Repository: Fabrizio-Caruso/CROSS-LIB Branch: master Commit: cb85d0590332 Files: 8180 Total size: 45.1 MB Directory structure: gitextract_v60rhtgp/ ├── .devcontainer/ │ ├── devcontainer.json │ └── post-start.sh ├── .gitignore ├── README.md ├── cfg/ │ ├── ___empty.cfg │ └── default.cfg ├── docs/ │ ├── ARCHITECTURES.md │ ├── Alice32k.txt │ ├── BUILD.md │ ├── BUILD_PROCESS.md │ ├── COMPILERS.md │ ├── COMPILER_NAMES.md │ ├── CREDITS.txt │ ├── CROSSLIB.md │ ├── CROSS_LIB_APIS.md │ ├── CROSS_LIB_APIS.txt │ ├── CX16.txt │ ├── Creativision_binary_structure.txt │ ├── CrossLib.odp │ ├── DISCLAIMER.md │ ├── EnglishArticle.md │ ├── FEATURE_STATUS.ods │ ├── GAMES.md │ ├── GIOCHI.md │ ├── HARDWARE_AGNOSTIC_CODE.md │ ├── HOW_TO_ADD_A_NEW_GAME.md │ ├── HOW_TO_ADD_NEW_TARGET.txt │ ├── HOW_TO_INSTALL_COMPILERS.txt │ ├── HOW_TO_LOAD.md │ ├── HOW_TO_LOAD_THE_GAME.md │ ├── HOW_TO_LOAD_THE_GAME_ON_REAL_HARDWARE.md │ ├── INSTALL.md │ ├── LICENCE.txt │ ├── LINUX_SETUP.md │ ├── MSDOS_big_banging.txt │ ├── PREREQUISITES.md │ ├── PRESENTAZIONE_ITA/ │ │ ├── Documenti_on_line.txt │ │ └── Giochi/ │ │ ├── EMULATORI_DA_USARE.txt │ │ ├── xbomber/ │ │ │ ├── Xbomber_atari_color.xex │ │ │ └── Xbomber_gamegear.gg │ │ └── xsnake/ │ │ ├── Xsnake_gb.gb │ │ └── Xsnake_sms.sms │ ├── SNAPSHOTS.md │ ├── STATUS.md │ ├── SUPPORT_FOR_NEW_TARGET.txt │ ├── SYSTEMS.md │ ├── TESTS.md │ ├── THE_GAME.txt │ ├── TILES.txt │ ├── TODO.txt │ ├── VGA_from_protected_mode.txt │ ├── VZ.txt │ ├── XL.md │ ├── alt_conio_fonts.s │ ├── articles/ │ │ ├── CALL_APPLE/ │ │ │ └── apple2.txt │ │ ├── CROSS_LIB_PUBLIC.rtf │ │ ├── CROSS_LIB_PUBLIC_ENG.rtf │ │ ├── article.txt │ │ └── articolo_ITA.txt │ ├── bbc/ │ │ ├── chibiakumas.txt │ │ └── putchar.txt │ ├── bbc_sounds/ │ │ ├── bbc.h │ │ └── bbctest.c │ ├── compilation_parameters.txt │ ├── compiler_install.txt │ ├── conio_macros_vs_functions.txt │ ├── docker.txt │ ├── games/ │ │ ├── BOMBER.txt │ │ ├── CHASE.txt │ │ ├── HORDE.txt │ │ ├── SHOOT.txt │ │ ├── SNAKE.txt │ │ └── VERBIX.txt │ ├── generic_tiles.txt │ ├── hector_sound.txt │ ├── manual/ │ │ ├── XSize.txt │ │ ├── YSize.txt │ │ ├── _XL_CHAR.txt │ │ ├── _XL_CLEAR_SCREEN.txt │ │ ├── _XL_DELETE.txt │ │ ├── _XL_DOWN.txt │ │ ├── _XL_DRAW.txt │ │ ├── _XL_EXPLOSION_SOUND.txt │ │ ├── _XL_FIRE.txt │ │ ├── _XL_INIT_GRAPHICS.txt │ │ ├── _XL_INIT_INPUT.txt │ │ ├── _XL_INIT_SOUND.txt │ │ ├── _XL_INPUT.txt │ │ ├── _XL_KEY_PRESSED.txt │ │ ├── _XL_LEFT.txt │ │ ├── _XL_PING_SOUND.txt │ │ ├── _XL_PRINT.txt │ │ ├── _XL_PRINTD.txt │ │ ├── _XL_RAND.txt │ │ ├── _XL_RIGHT.txt │ │ ├── _XL_SET_TEXT_COLOR.txt │ │ ├── _XL_SHOOT_SOUND.txt │ │ ├── _XL_SLEEP.txt │ │ ├── _XL_SLOW_DOWN.txt │ │ ├── _XL_TICK_SOUND.txt │ │ ├── _XL_TOCK_SOUND.txt │ │ ├── _XL_UP.txt │ │ ├── _XL_WAIT_FOR_INPUT.txt │ │ └── _XL_ZAP_SOUND.txt │ ├── mc10.txt │ ├── mc10_2.txt │ ├── mega65.txt │ ├── presentazione.md │ ├── presentazione.txt │ ├── requirements.txt │ └── zzap_issue.txt ├── logs/ │ └── .gitkeep ├── roms/ │ ├── mame/ │ │ └── .keepthisfile.txt │ └── vice/ │ ├── c64/ │ │ └── .keepthisfile.txt │ ├── pet/ │ │ └── .keepthisfile.txt │ ├── plus4/ │ │ └── .keepthisfile.txt │ └── vic20/ │ └── .keepthisfile.txt ├── src/ │ ├── Makefile_common │ ├── assets/ │ │ ├── LoggerSingleton.py │ │ ├── __init__.py │ │ ├── copy_assets.py │ │ ├── examples/ │ │ │ ├── README.txt │ │ │ ├── single_tiles/ │ │ │ │ ├── tile_shape0.txt │ │ │ │ └── tile_shape1.txt │ │ │ └── tile_sets/ │ │ │ ├── asm/ │ │ │ │ ├── 8x6_cidelsa_digits.s │ │ │ │ ├── 8x6_cidelsa_fonts.s │ │ │ │ ├── Antiriad_Chars.asm │ │ │ │ ├── test_vchar-charset.s │ │ │ │ ├── tile_8x6_shapeA.txt │ │ │ │ ├── tile_8x6_shapeA_rotated.txt │ │ │ │ ├── tiles_all.asm │ │ │ │ ├── tiles_all_2.asm │ │ │ │ ├── tiles_bin.asm │ │ │ │ ├── tiles_charPad.asm │ │ │ │ ├── tiles_magellan.a99 │ │ │ │ └── tiles_magellan_2.a99 │ │ │ └── basic/ │ │ │ ├── test.txt │ │ │ ├── tiles_atari.bas │ │ │ ├── tiles_atari_2.bas │ │ │ ├── tiles_bbc.bas │ │ │ ├── tiles_cbm.bas │ │ │ ├── tiles_cbm_10_liner.bas │ │ │ ├── tiles_cbm_10_liner_2.bas │ │ │ ├── tiles_cbm_10_liner_3.bas │ │ │ ├── tiles_cbm_10_liner_4.bas │ │ │ ├── tiles_cbm_2.bas │ │ │ ├── tiles_cpc.bas │ │ │ ├── tiles_msx_headless_hex.bas │ │ │ ├── tiles_oric.bas │ │ │ ├── tiles_oric_2.bas │ │ │ ├── tiles_oric_3.bas │ │ │ ├── tiles_oric_4.bas │ │ │ ├── tiles_oric_5.bas │ │ │ └── tiles_sinclair.bas │ │ ├── generate_assets.py │ │ ├── templates/ │ │ │ ├── 4x4/ │ │ │ │ └── 4x4_chars.h.template │ │ │ ├── 6x8/ │ │ │ │ ├── 6x8_chars.h.template │ │ │ │ └── z88dk_6x8_pmd85.asm.template │ │ │ ├── 6x9/ │ │ │ │ └── 6x9_chars.h.template │ │ │ ├── 7x8/ │ │ │ │ └── 7x8_chars.h.template │ │ │ ├── 8x6/ │ │ │ │ ├── 8x6_chars.h.template │ │ │ │ ├── 8x6_tiles.s.template │ │ │ │ └── z88dk_8x6_sprites_definitions.h.template │ │ │ └── 8x8/ │ │ │ ├── 8x8_chars.h.template │ │ │ ├── cc65_agat.s.template │ │ │ ├── cc65_gamate_tiles.s.template │ │ │ ├── cc65_nes_color_tiles.s.template │ │ │ ├── cc65_nes_tiles.s.template │ │ │ ├── cc65_pce_tiles.s.template │ │ │ ├── cc65_udc.s.template │ │ │ ├── cc65_udc_64_chars.s.template │ │ │ ├── cc65_udc_6chars.s.template │ │ │ ├── cc65_udc_arcade.s.template │ │ │ ├── cc65_udc_arcade_64_chars.s.template │ │ │ ├── cc65_udc_arcade_VIC20.s.template │ │ │ ├── cc65_udc_arcade_conio.s.template │ │ │ ├── cc65_udc_arcade_v2.s.template │ │ │ ├── cc65_udc_atari7800_160A.s.template │ │ │ ├── cc65_udc_vic20_19_tiles.s.template │ │ │ ├── cc65_udc_vic20_25_tiles.s.template │ │ │ ├── cc65_udc_vic20_27_tiles.s.template │ │ │ ├── cc65_udc_vic20_64_chars.s.template │ │ │ ├── cmoc_udc_tiles.s.template │ │ │ ├── cmoc_udc_tiles_and_fonts.s.template │ │ │ ├── z88dk_cpc_Chars8.asm.template │ │ │ ├── z88dk_gameboy.asm.template │ │ │ ├── z88dk_pv1000.asm.template │ │ │ ├── z88dk_sprites_definitions.h.template │ │ │ └── z88dk_xchase.asm.template │ │ └── unit_tests/ │ │ └── testAssets.py │ ├── config.ini │ ├── cross_lib/ │ │ ├── boot/ │ │ │ └── multi8/ │ │ │ └── bootstrap.c │ │ ├── cfg/ │ │ │ ├── cc65/ │ │ │ │ ├── alt/ │ │ │ │ │ ├── vic20-16k.cfg │ │ │ │ │ ├── vic20-24k.cfg │ │ │ │ │ ├── vic20-3k.cfg │ │ │ │ │ ├── vic20-8k.cfg │ │ │ │ │ ├── vic20-8k_GFX_tight.cfg │ │ │ │ │ ├── vic20-8k_old_GFX.cfg │ │ │ │ │ ├── vic20-8k_tight.cfg │ │ │ │ │ └── vic20_unexpanded.cfg │ │ │ │ ├── apple2-hgr.cfg │ │ │ │ ├── apple2enh-hgr.cfg │ │ │ │ ├── atari5200_redefined_chars.cfg │ │ │ │ ├── atari5200_redefined_chars_32k.cfg │ │ │ │ ├── atari7800_more_ram.cfg │ │ │ │ ├── atari_mode12.cfg │ │ │ │ ├── atari_mode1_redefined_chars.cfg │ │ │ │ ├── atarixl_mode12.cfg │ │ │ │ ├── atmos_better_tap.cfg │ │ │ │ ├── c16-16k.cfg │ │ │ │ ├── c16-16k_GFX.cfg │ │ │ │ ├── c16-16k_GFX_64chars.cfg │ │ │ │ ├── c16-16k_GFX_64chars_stack_0x30.cfg │ │ │ │ ├── c16-16k_GFX_64chars_stack_0x30_less_hd_stack.cfg │ │ │ │ ├── c16-32k.cfg │ │ │ │ ├── c16-32k_GFX.cfg │ │ │ │ ├── c16-32k_GFX_64chars.cfg │ │ │ │ ├── c64_GFXat0xC000.cfg │ │ │ │ ├── creativision-16k.cfg │ │ │ │ ├── creativision-16k_2.cfg │ │ │ │ ├── creativision-16k_less_stack.cfg │ │ │ │ ├── creativision-18k.cfg │ │ │ │ ├── creativision-24k.cfg │ │ │ │ ├── creativision-32k.cfg │ │ │ │ ├── creativision-32k_alt.cfg │ │ │ │ ├── creativision-8k.cfg │ │ │ │ ├── creativision-8k_less_stack.cfg │ │ │ │ ├── gamate_reduced_stack.cfg │ │ │ │ ├── gamate_reduced_stack_2.cfg │ │ │ │ ├── nes_fx.cfg │ │ │ │ ├── osic1p_less_stack.cfg │ │ │ │ ├── pce.cfg │ │ │ │ ├── pce_16k.cfg │ │ │ │ ├── pce_16k_less_stack.cfg │ │ │ │ ├── pce_32k.cfg │ │ │ │ ├── pce_8k_less_stack.cfg │ │ │ │ ├── pet_8k.cfg │ │ │ │ ├── plus4_GFX.cfg │ │ │ │ ├── supervision-16k.cfg │ │ │ │ ├── supervision-16k_GFX.cfg │ │ │ │ ├── supervision-16k_GFX_2.cfg │ │ │ │ ├── supervision-16k_GFX_2_stack_0x1B.cfg │ │ │ │ ├── supervision-16k_GFX_3.cfg │ │ │ │ ├── supervision-64k.cfg │ │ │ │ ├── vic20-16k_CODE2_GFX.cfg │ │ │ │ ├── vic20-16k_CODE2_GFX_ALT_V2.cfg │ │ │ │ ├── vic20-16k_CODE2_GFX_V2.cfg │ │ │ │ ├── vic20-16k_GFX.cfg │ │ │ │ ├── vic20-3k_GFX.cfg │ │ │ │ ├── vic20-8k_CODE2_GFX.cfg │ │ │ │ ├── vic20-8k_CODE2_GFX_V2.cfg │ │ │ │ ├── vic20-8k_CODE2_GFX_V2_alt.cfg │ │ │ │ ├── vic20-8k_GFX.cfg │ │ │ │ ├── vic20-8k_GFX_25_tiles.cfg │ │ │ │ ├── vic20-8k_GFX_stack_0x1B.cfg │ │ │ │ ├── vic20-8k_memory_mapped_GFX.cfg │ │ │ │ ├── vic20-cart.cfg │ │ │ │ ├── vic20.cfg │ │ │ │ ├── vic20_unexpanded_gfx.cfg │ │ │ │ └── vic20_unexpanded_gfx_low_stack.cfg │ │ │ ├── gcc4ti99/ │ │ │ │ └── linkfile.cfg │ │ │ ├── vbcc/ │ │ │ │ └── bbc/ │ │ │ │ ├── bbc │ │ │ │ ├── bbc2 │ │ │ │ ├── bbc2_posix │ │ │ │ ├── bbc5 │ │ │ │ ├── bbc5_posix │ │ │ │ ├── bbc7 │ │ │ │ ├── bbc7_posix │ │ │ │ ├── bbc_posix │ │ │ │ ├── bbcmaster │ │ │ │ ├── vlink.cmd │ │ │ │ ├── vlink2.cmd │ │ │ │ ├── vlink5.cmd │ │ │ │ └── vlink7.cmd │ │ │ └── z88dk/ │ │ │ ├── zpragma.inc │ │ │ ├── zpragma_clib.inc │ │ │ ├── zpragma_clib_no_printf.inc │ │ │ └── zpragma_sms.inc │ │ ├── cross_lib.h │ │ ├── crt/ │ │ │ └── cc65/ │ │ │ └── vic20/ │ │ │ └── vic20_cart.crt │ │ ├── display/ │ │ │ ├── alt_print/ │ │ │ │ ├── atari_mode1_alt_print.c │ │ │ │ ├── comx_alt_print.c │ │ │ │ ├── memory_mapped_alt_print.c │ │ │ │ ├── memory_mapped_alt_print.h │ │ │ │ ├── mo5_alt_print.c │ │ │ │ ├── ncurses_alt_print.c │ │ │ │ ├── simple_alt_stats.c │ │ │ │ ├── tgi_alt_print.c │ │ │ │ └── tgi_gfx_print.c │ │ │ ├── color_definitions.h │ │ │ ├── conio_patch.h │ │ │ ├── display_macros.c │ │ │ ├── display_macros.h │ │ │ ├── display_target_color.h │ │ │ ├── display_target_geometry.h │ │ │ ├── graphics_mode/ │ │ │ │ ├── antic_mode6_graphics.h │ │ │ │ ├── apple2_hgr_graphics.h │ │ │ │ ├── atari7800_color_graphics.h │ │ │ │ ├── atari_lynx_tgi_graphics.h │ │ │ │ ├── bbc_graphics.h │ │ │ │ ├── bit_mapped_16_graphics.h │ │ │ │ ├── bit_mapped_4_graphics.h │ │ │ │ ├── bit_mapped_graphics.h │ │ │ │ ├── buffered_graphics.h │ │ │ │ ├── conio_graphics.h │ │ │ │ ├── cpc_cpcrslib_graphics.h │ │ │ │ ├── dual_memory_mapped_graphics.h │ │ │ │ ├── lcc1802_color_graphics.h │ │ │ │ ├── lcc1802_graphics.h │ │ │ │ ├── memory_mapped_graphics.h │ │ │ │ ├── nes_conio_graphics.h │ │ │ │ ├── no_graphics.h │ │ │ │ ├── oric_color_graphics.h │ │ │ │ ├── pv1000_graphics.h │ │ │ │ ├── quad_memory_mapped_graphics.h │ │ │ │ ├── rex_graphics.h │ │ │ │ ├── terminal_graphics.h │ │ │ │ ├── vdp_mode1_graphics.h │ │ │ │ ├── vectorial_graphics.h │ │ │ │ ├── vga_graphics.h │ │ │ │ └── z88dk_sprites_graphics.h │ │ │ ├── graphics_settings.h │ │ │ ├── init_graphics/ │ │ │ │ ├── ack/ │ │ │ │ │ ├── msdos386/ │ │ │ │ │ │ ├── init386_vga.s │ │ │ │ │ │ └── msdos386_init_graphics.c │ │ │ │ │ └── msdos86/ │ │ │ │ │ ├── CGA.txt │ │ │ │ │ ├── EGA.txt │ │ │ │ │ ├── init_vga.s │ │ │ │ │ └── msdos86_init_graphics.c │ │ │ │ ├── cc6303/ │ │ │ │ │ └── mc10_init_graphics.c │ │ │ │ ├── cc65/ │ │ │ │ │ ├── agat/ │ │ │ │ │ │ └── agat_init_graphics.c │ │ │ │ │ ├── apple2/ │ │ │ │ │ │ ├── apple2_hgr_init_graphics.c │ │ │ │ │ │ └── hgr.s │ │ │ │ │ ├── apple2enh/ │ │ │ │ │ │ └── apple2enh_80col_init_graphics.c │ │ │ │ │ ├── atari/ │ │ │ │ │ │ ├── atari_mode1_redefined_chars_init_graphics.c │ │ │ │ │ │ └── disable_setcursor.s │ │ │ │ │ ├── atari5200/ │ │ │ │ │ │ ├── atari5200_init_graphics.c │ │ │ │ │ │ └── setcolor.h │ │ │ │ │ ├── atari7800/ │ │ │ │ │ │ ├── atari7800_init_graphics.c │ │ │ │ │ │ └── atari7800_init_graphics_debug.c │ │ │ │ │ ├── atari_lynx/ │ │ │ │ │ │ └── atari_lynx_gfx_init_graphics.c │ │ │ │ │ ├── atmos/ │ │ │ │ │ │ └── atmos_redefined_characters_init_graphics.c │ │ │ │ │ ├── c128/ │ │ │ │ │ │ └── c128_80col_init_graphics.c │ │ │ │ │ ├── c264/ │ │ │ │ │ │ ├── c16_linked_redefined_chars_init_graphics.c │ │ │ │ │ │ └── c16_redefined_chars_init_graphics.c │ │ │ │ │ ├── c64/ │ │ │ │ │ │ └── c64_init_graphics.c │ │ │ │ │ ├── c65/ │ │ │ │ │ │ └── c65_init_graphics.c │ │ │ │ │ ├── creativision/ │ │ │ │ │ │ ├── creativision_color_init_graphics.c │ │ │ │ │ │ └── creativision_init_graphics.c │ │ │ │ │ ├── cx16/ │ │ │ │ │ │ └── cx16_init_graphics.c │ │ │ │ │ ├── mega65/ │ │ │ │ │ │ └── mega65_init_graphics.c │ │ │ │ │ ├── nes/ │ │ │ │ │ │ └── nes_init_graphics.c │ │ │ │ │ ├── pce/ │ │ │ │ │ │ └── pce_init_graphics.c │ │ │ │ │ ├── supervision/ │ │ │ │ │ │ └── supervision_init_graphics.c │ │ │ │ │ └── vic20/ │ │ │ │ │ └── vic20_init_graphics.c │ │ │ │ ├── cmoc/ │ │ │ │ │ ├── coco/ │ │ │ │ │ │ └── coco_init_graphics.c │ │ │ │ │ ├── coco3/ │ │ │ │ │ │ └── coco3_init_graphics.c │ │ │ │ │ └── mo5/ │ │ │ │ │ └── mo5_init_graphics.c │ │ │ │ ├── gcc/ │ │ │ │ │ ├── ncurses_init_graphics.c │ │ │ │ │ └── terminal_init_graphics.c │ │ │ │ ├── gcc4ti99/ │ │ │ │ │ └── gcc4ti99_init_graphics.c │ │ │ │ ├── lcc1802/ │ │ │ │ │ └── comx/ │ │ │ │ │ ├── comx_color_init_graphics.c │ │ │ │ │ ├── comx_init_graphics.c │ │ │ │ │ └── micro_color_init_graphics.c │ │ │ │ ├── vbcc/ │ │ │ │ │ └── bbc/ │ │ │ │ │ ├── bbc_init_graphics.c │ │ │ │ │ └── bbc_init_graphics_test.c │ │ │ │ └── z88dk/ │ │ │ │ ├── aquarius/ │ │ │ │ │ └── aquarius_init_graphics.c │ │ │ │ ├── c128/ │ │ │ │ │ └── c128_init_graphics.c │ │ │ │ ├── cpc/ │ │ │ │ │ └── cpc_cpcrslib_init_graphics.c │ │ │ │ ├── g850/ │ │ │ │ │ └── g850_init_graphics.c │ │ │ │ ├── msx/ │ │ │ │ │ └── msx_redefined_chars_init_graphics.c │ │ │ │ ├── rex/ │ │ │ │ │ └── rex_init_graphics.c │ │ │ │ ├── sms/ │ │ │ │ │ └── sms_init_graphics.c │ │ │ │ ├── udg/ │ │ │ │ │ ├── udg_init_graphics.c │ │ │ │ │ └── udg_msx_test.c │ │ │ │ ├── vz200/ │ │ │ │ │ └── vz200_init_graphics.c │ │ │ │ ├── x07/ │ │ │ │ │ └── x07_init_graphics.c │ │ │ │ ├── z88/ │ │ │ │ │ ├── z88_init_graphics.c │ │ │ │ │ └── z88_udg_init_graphics.c │ │ │ │ ├── zx80/ │ │ │ │ │ └── zx80_init_graphics.c │ │ │ │ └── zx81/ │ │ │ │ └── zx81_init_graphics.c │ │ │ ├── redefine_characters/ │ │ │ │ └── udg_map.h │ │ │ ├── tiles/ │ │ │ │ ├── agat_settings.h │ │ │ │ ├── apple2_hgr_settings.h │ │ │ │ ├── atari7800_settings.h │ │ │ │ ├── atari_mode1_redefined_chars_settings.h │ │ │ │ ├── atmos_redefined_characters_settings.h │ │ │ │ ├── bbc_settings.h │ │ │ │ ├── c128_settings.h │ │ │ │ ├── c264_link_time_redefined_chars_settings.h │ │ │ │ ├── c264_redefined_chars_settings.h │ │ │ │ ├── c64_conio_settings.h │ │ │ │ ├── c64_memory_mapped_settings.h │ │ │ │ ├── cidelsa_no_gfx.h │ │ │ │ ├── cmoc_memory_mapped_settings.h │ │ │ │ ├── comx_color_settings.h │ │ │ │ ├── comx_settings.h │ │ │ │ ├── cpc_cpcrslib_settings.h │ │ │ │ ├── creativision_settings.h │ │ │ │ ├── cx16_settings.h │ │ │ │ ├── default_image_settings.h │ │ │ │ ├── default_quad_graphics_settings.h │ │ │ │ ├── micro_color_settings.h │ │ │ │ ├── micro_settings.h │ │ │ │ ├── msx_redefined_chars_settings.h │ │ │ │ ├── nes_conio_settings.h │ │ │ │ ├── nes_settings.h │ │ │ │ ├── pce_settings.h │ │ │ │ ├── petscii_memory_mapped_settings.h │ │ │ │ ├── pv1000_settings.h │ │ │ │ ├── supervision_settings.h │ │ │ │ ├── tgi_gfx_settings.h │ │ │ │ ├── udg_settings.h │ │ │ │ ├── vdp_mode1_settings.h │ │ │ │ ├── vic20_exp_16k_settings.h │ │ │ │ ├── vic20_exp_16k_v2_settings.h │ │ │ │ ├── vic20_exp_3k_light_settings.h │ │ │ │ ├── vic20_exp_3k_settings.h │ │ │ │ ├── vic20_rom_chars_and_26_tiles_settings.h │ │ │ │ ├── vic20_rom_chars_and_27_tiles_settings.h │ │ │ │ └── vic20_rom_chars_and_6_tiles_settings.h │ │ │ └── tiles.h │ │ ├── include/ │ │ │ └── standard_libs.h │ │ ├── input/ │ │ │ ├── input_macros.c │ │ │ ├── input_macros.h │ │ │ └── input_target_settings.h │ │ ├── rand/ │ │ │ ├── rand.c │ │ │ ├── rand.h │ │ │ └── rand_lcc1802_devkit_include.c │ │ ├── sleep/ │ │ │ ├── sleep_macros.c │ │ │ └── sleep_macros.h │ │ ├── sound/ │ │ │ ├── ack/ │ │ │ │ └── msdos86/ │ │ │ │ └── msdos86_sounds.h │ │ │ ├── cc65/ │ │ │ │ ├── atari7800/ │ │ │ │ │ └── atari7800_sounds.h │ │ │ │ ├── atari_lynx/ │ │ │ │ │ ├── atari_lynx_sounds.c │ │ │ │ │ ├── atari_lynx_sounds.h │ │ │ │ │ └── chibisound.asm │ │ │ │ ├── atmos/ │ │ │ │ │ └── atmos_sounds.h │ │ │ │ ├── c264/ │ │ │ │ │ ├── c264_sounds.c │ │ │ │ │ └── c264_sounds.h │ │ │ │ ├── creativision/ │ │ │ │ │ ├── creativision_sounds.c │ │ │ │ │ └── creativision_sounds.h │ │ │ │ ├── cx16/ │ │ │ │ │ ├── cx16_sounds.c │ │ │ │ │ └── cx16_sounds.h │ │ │ │ ├── gamate/ │ │ │ │ │ ├── gamate_sounds.c │ │ │ │ │ └── gamate_sounds.h │ │ │ │ ├── pet/ │ │ │ │ │ ├── pet_sounds.c │ │ │ │ │ └── pet_sounds.h │ │ │ │ ├── pokey/ │ │ │ │ │ ├── pokey_sounds.c │ │ │ │ │ └── pokey_sounds.h │ │ │ │ ├── sid/ │ │ │ │ │ ├── sid_sounds.c │ │ │ │ │ └── sid_sounds.h │ │ │ │ ├── supervision/ │ │ │ │ │ ├── reverse_engineered_notes.txt │ │ │ │ │ ├── supervision_sounds.c │ │ │ │ │ └── supervision_sounds.h │ │ │ │ └── vic20/ │ │ │ │ ├── vic20_explosion_sound.c │ │ │ │ ├── vic20_explosion_sound.h │ │ │ │ ├── vic20_sounds.c │ │ │ │ └── vic20_sounds.h │ │ │ ├── gcc4ti99/ │ │ │ │ ├── ti99_sounds.c │ │ │ │ └── ti99_sounds.h │ │ │ ├── generic/ │ │ │ │ ├── ascii_sounds.h │ │ │ │ ├── bit_bang_sounds.c │ │ │ │ ├── bit_bang_sounds.h │ │ │ │ ├── dac_sounds.c │ │ │ │ └── dac_sounds.h │ │ │ ├── lcc1802/ │ │ │ │ └── comx/ │ │ │ │ ├── comx_sounds.c │ │ │ │ └── comx_sounds.h │ │ │ ├── sound_macros.h │ │ │ ├── vbcc/ │ │ │ │ └── bbc/ │ │ │ │ ├── bbc_sounds.c │ │ │ │ └── bbc_sounds.h │ │ │ └── z88dk/ │ │ │ ├── bit_bang/ │ │ │ │ └── z88dk_bit_bang_sounds.h │ │ │ ├── gb/ │ │ │ │ ├── gb_sounds.c │ │ │ │ └── gb_sounds.h │ │ │ └── psg/ │ │ │ ├── ay-3-8910_psg_sounds.c │ │ │ ├── psg_sounds.h │ │ │ └── sn76489a_psg_sounds.c │ │ └── text/ │ │ └── letters.h │ ├── debug/ │ │ ├── CONIO_TEST.COM │ │ ├── Makefile │ │ ├── amiga_core.h │ │ ├── atari2600_graphics_test.c │ │ ├── atari7800_test.c │ │ ├── atari7800_test2.c │ │ ├── atari7800_test3.c │ │ ├── atari_lynx.c │ │ ├── bar.c │ │ ├── bbctest.c │ │ ├── bitbang.c │ │ ├── build_conio_test.txt │ │ ├── coco3_test.c │ │ ├── coco_strings_test.c │ │ ├── comx_class.c │ │ ├── comx_conv_debug.c │ │ ├── comx_hello.c │ │ ├── comx_hello_integer.c │ │ ├── comx_mod.c │ │ ├── comx_pointer2func.c │ │ ├── comx_pp_debug.c │ │ ├── comx_simple_class.c │ │ ├── comx_simplest_class.c │ │ ├── comx_size_debug.c │ │ ├── conio.c │ │ ├── conio0.c │ │ ├── conio_test.c │ │ ├── cpc_test.c │ │ ├── cprintf.c │ │ ├── debug_images.h │ │ ├── empty42.c │ │ ├── extern.c │ │ ├── extern.h │ │ ├── foo.c │ │ ├── foo.h │ │ ├── fx.c │ │ ├── gamate_conio_test.c │ │ ├── gamate_conio_test2.c │ │ ├── gb_main.c │ │ ├── gcc_class.c │ │ ├── gcc_simple_class.c │ │ ├── gcc_simplest_class.c │ │ ├── gcc_test.c │ │ ├── generic_psg.c │ │ ├── getk_test.c │ │ ├── h0comx.c │ │ ├── hello_cgetc.c │ │ ├── hello_conio.c │ │ ├── hello_fputc.c │ │ ├── hello_sdl.c │ │ ├── helloworld.c │ │ ├── helloworld_background_color.c │ │ ├── helloworld_getchar.c │ │ ├── htron.c │ │ ├── hwcomx.c │ │ ├── hwcomx1.c │ │ ├── hwcomx2.c │ │ ├── hwcomx_gotoxy.c │ │ ├── hwcomx_gotoxy2.c │ │ ├── hwcomx_pp_debug.c │ │ ├── hwpecom.c │ │ ├── intern.c │ │ ├── intern.h │ │ ├── lcc1802_test.c │ │ ├── lcc1802_test_NEW.c │ │ ├── litterals.c │ │ ├── m5.c │ │ ├── main_use_amiga_core.c │ │ ├── mapfile_shoot_pet_func.txt │ │ ├── mc10_getk.s │ │ ├── mc10_test1.c │ │ ├── mc10_test2.c │ │ ├── mc10_test3.c │ │ ├── mc10_test4.c │ │ ├── msx_test.c │ │ ├── msx_test2.c │ │ ├── ncurses_test.c │ │ ├── nes_bgcolor.c │ │ ├── psg_test.c │ │ ├── psg_test2.c │ │ ├── psg_test3.c │ │ ├── rand.c │ │ ├── struct.c │ │ ├── testBitwiseAnd.c │ │ ├── test_gb.c │ │ ├── test_getk.c │ │ ├── test_joy.c │ │ ├── test_joy2.c │ │ ├── test_sleep.c │ │ ├── test_vsync.c │ │ ├── testc16.c │ │ ├── tgi_lynx_black_test.c │ │ ├── tgi_lynx_cgetc_test.c │ │ ├── tgi_lynx_test.c │ │ ├── ti99.c │ │ ├── ti99_test.c │ │ ├── unsigned_right_shift.c │ │ ├── wait_for_key.c │ │ ├── world.c │ │ └── x07.c │ ├── examples/ │ │ ├── animate/ │ │ │ ├── Makefile.animate │ │ │ ├── config/ │ │ │ │ └── project_config.mk │ │ │ ├── main.c │ │ │ └── tiles/ │ │ │ ├── 6x8/ │ │ │ │ ├── tile0.txt │ │ │ │ ├── tile1.txt │ │ │ │ ├── tile10.txt │ │ │ │ ├── tile11.txt │ │ │ │ ├── tile12.txt │ │ │ │ ├── tile13.txt │ │ │ │ ├── tile14.txt │ │ │ │ ├── tile15.txt │ │ │ │ ├── tile16.txt │ │ │ │ ├── tile17.txt │ │ │ │ ├── tile18.txt │ │ │ │ ├── tile19.txt │ │ │ │ ├── tile2.txt │ │ │ │ ├── tile20.txt │ │ │ │ ├── tile21.txt │ │ │ │ ├── tile22.txt │ │ │ │ ├── tile23.txt │ │ │ │ ├── tile24.txt │ │ │ │ ├── tile25.txt │ │ │ │ ├── tile25_ORIG.txt │ │ │ │ ├── tile3.txt │ │ │ │ ├── tile4.txt │ │ │ │ ├── tile5.txt │ │ │ │ ├── tile6.txt │ │ │ │ ├── tile7.txt │ │ │ │ ├── tile8.txt │ │ │ │ └── tile9.txt │ │ │ ├── 6x9/ │ │ │ │ ├── tile0.txt │ │ │ │ ├── tile1.txt │ │ │ │ ├── tile10.txt │ │ │ │ ├── tile11.txt │ │ │ │ ├── tile12.txt │ │ │ │ ├── tile13.txt │ │ │ │ ├── tile14.txt │ │ │ │ ├── tile15.txt │ │ │ │ ├── tile16.txt │ │ │ │ ├── tile17.txt │ │ │ │ ├── tile18.txt │ │ │ │ ├── tile19.txt │ │ │ │ ├── tile2.txt │ │ │ │ ├── tile20.txt │ │ │ │ ├── tile21.txt │ │ │ │ ├── tile22.txt │ │ │ │ ├── tile23.txt │ │ │ │ ├── tile24.txt │ │ │ │ ├── tile25 _ORIG.txt │ │ │ │ ├── tile25.txt │ │ │ │ ├── tile3.txt │ │ │ │ ├── tile4.txt │ │ │ │ ├── tile5.txt │ │ │ │ ├── tile6.txt │ │ │ │ ├── tile7.txt │ │ │ │ ├── tile8.txt │ │ │ │ └── tile9.txt │ │ │ ├── 7x8/ │ │ │ │ ├── tile0.txt │ │ │ │ ├── tile1.txt │ │ │ │ ├── tile10.txt │ │ │ │ ├── tile11.txt │ │ │ │ ├── tile12.txt │ │ │ │ ├── tile13.txt │ │ │ │ ├── tile14.txt │ │ │ │ ├── tile15.txt │ │ │ │ ├── tile16.txt │ │ │ │ ├── tile17.txt │ │ │ │ ├── tile18.txt │ │ │ │ ├── tile19.txt │ │ │ │ ├── tile2.txt │ │ │ │ ├── tile20.txt │ │ │ │ ├── tile21.txt │ │ │ │ ├── tile22.txt │ │ │ │ ├── tile23.txt │ │ │ │ ├── tile24.txt │ │ │ │ ├── tile25.txt │ │ │ │ ├── tile25_ORIG.txt │ │ │ │ ├── tile3.txt │ │ │ │ ├── tile4.txt │ │ │ │ ├── tile5.txt │ │ │ │ ├── tile6.txt │ │ │ │ ├── tile7.txt │ │ │ │ ├── tile8.txt │ │ │ │ └── tile9.txt │ │ │ ├── 8x8/ │ │ │ │ ├── tile0.txt │ │ │ │ ├── tile1.txt │ │ │ │ ├── tile10.txt │ │ │ │ ├── tile11.txt │ │ │ │ ├── tile12.txt │ │ │ │ ├── tile13.txt │ │ │ │ ├── tile14.txt │ │ │ │ ├── tile15.txt │ │ │ │ ├── tile16.txt │ │ │ │ ├── tile17.txt │ │ │ │ ├── tile18.txt │ │ │ │ ├── tile19.txt │ │ │ │ ├── tile2.txt │ │ │ │ ├── tile20.txt │ │ │ │ ├── tile21.txt │ │ │ │ ├── tile22.txt │ │ │ │ ├── tile23.txt │ │ │ │ ├── tile24.txt │ │ │ │ ├── tile25.txt │ │ │ │ ├── tile3.txt │ │ │ │ ├── tile4.txt │ │ │ │ ├── tile5.txt │ │ │ │ ├── tile6.txt │ │ │ │ ├── tile7.txt │ │ │ │ ├── tile8.txt │ │ │ │ └── tile9.txt │ │ │ └── ASCII/ │ │ │ └── char_tiles.h │ │ ├── background/ │ │ │ ├── Makefile.background │ │ │ ├── config/ │ │ │ │ └── project_config.mk │ │ │ ├── main.c │ │ │ └── tiles/ │ │ │ ├── 6x8/ │ │ │ │ ├── tile0.txt │ │ │ │ ├── tile1.txt │ │ │ │ ├── tile10.txt │ │ │ │ ├── tile11.txt │ │ │ │ ├── tile12.txt │ │ │ │ ├── tile13.txt │ │ │ │ ├── tile14.txt │ │ │ │ ├── tile15.txt │ │ │ │ ├── tile16.txt │ │ │ │ ├── tile17.txt │ │ │ │ ├── tile18.txt │ │ │ │ ├── tile19.txt │ │ │ │ ├── tile2.txt │ │ │ │ ├── tile20.txt │ │ │ │ ├── tile21.txt │ │ │ │ ├── tile22.txt │ │ │ │ ├── tile23.txt │ │ │ │ ├── tile24.txt │ │ │ │ ├── tile25.txt │ │ │ │ ├── tile25_ORIG.txt │ │ │ │ ├── tile3.txt │ │ │ │ ├── tile4.txt │ │ │ │ ├── tile5.txt │ │ │ │ ├── tile6.txt │ │ │ │ ├── tile7.txt │ │ │ │ ├── tile8.txt │ │ │ │ └── tile9.txt │ │ │ ├── 6x9/ │ │ │ │ ├── tile0.txt │ │ │ │ ├── tile1.txt │ │ │ │ ├── tile10.txt │ │ │ │ ├── tile11.txt │ │ │ │ ├── tile12.txt │ │ │ │ ├── tile13.txt │ │ │ │ ├── tile14.txt │ │ │ │ ├── tile15.txt │ │ │ │ ├── tile16.txt │ │ │ │ ├── tile17.txt │ │ │ │ ├── tile18.txt │ │ │ │ ├── tile19.txt │ │ │ │ ├── tile2.txt │ │ │ │ ├── tile20.txt │ │ │ │ ├── tile21.txt │ │ │ │ ├── tile22.txt │ │ │ │ ├── tile23.txt │ │ │ │ ├── tile24.txt │ │ │ │ ├── tile25 _ORIG.txt │ │ │ │ ├── tile25.txt │ │ │ │ ├── tile3.txt │ │ │ │ ├── tile4.txt │ │ │ │ ├── tile5.txt │ │ │ │ ├── tile6.txt │ │ │ │ ├── tile7.txt │ │ │ │ ├── tile8.txt │ │ │ │ └── tile9.txt │ │ │ ├── 7x8/ │ │ │ │ ├── tile0.txt │ │ │ │ ├── tile1.txt │ │ │ │ ├── tile10.txt │ │ │ │ ├── tile11.txt │ │ │ │ ├── tile12.txt │ │ │ │ ├── tile13.txt │ │ │ │ ├── tile14.txt │ │ │ │ ├── tile15.txt │ │ │ │ ├── tile16.txt │ │ │ │ ├── tile17.txt │ │ │ │ ├── tile18.txt │ │ │ │ ├── tile19.txt │ │ │ │ ├── tile2.txt │ │ │ │ ├── tile20.txt │ │ │ │ ├── tile21.txt │ │ │ │ ├── tile22.txt │ │ │ │ ├── tile23.txt │ │ │ │ ├── tile24.txt │ │ │ │ ├── tile25.txt │ │ │ │ ├── tile25_ORIG.txt │ │ │ │ ├── tile3.txt │ │ │ │ ├── tile4.txt │ │ │ │ ├── tile5.txt │ │ │ │ ├── tile6.txt │ │ │ │ ├── tile7.txt │ │ │ │ ├── tile8.txt │ │ │ │ └── tile9.txt │ │ │ ├── 8x8/ │ │ │ │ ├── tile0.txt │ │ │ │ ├── tile1.txt │ │ │ │ ├── tile10.txt │ │ │ │ ├── tile11.txt │ │ │ │ ├── tile12.txt │ │ │ │ ├── tile13.txt │ │ │ │ ├── tile14.txt │ │ │ │ ├── tile15.txt │ │ │ │ ├── tile16.txt │ │ │ │ ├── tile17.txt │ │ │ │ ├── tile18.txt │ │ │ │ ├── tile19.txt │ │ │ │ ├── tile2.txt │ │ │ │ ├── tile20.txt │ │ │ │ ├── tile21.txt │ │ │ │ ├── tile22.txt │ │ │ │ ├── tile23.txt │ │ │ │ ├── tile24.txt │ │ │ │ ├── tile25.txt │ │ │ │ ├── tile3.txt │ │ │ │ ├── tile4.txt │ │ │ │ ├── tile5.txt │ │ │ │ ├── tile6.txt │ │ │ │ ├── tile7.txt │ │ │ │ ├── tile8.txt │ │ │ │ └── tile9.txt │ │ │ └── ASCII/ │ │ │ └── char_tiles.h │ │ ├── blob/ │ │ │ ├── Makefile.blob │ │ │ ├── config/ │ │ │ │ ├── game_config.mk │ │ │ │ └── project_config.mk │ │ │ ├── main.c │ │ │ ├── shapes/ │ │ │ │ ├── 6x8/ │ │ │ │ │ ├── shape0.txt │ │ │ │ │ ├── shape1.txt │ │ │ │ │ ├── shape10.txt │ │ │ │ │ ├── shape11.txt │ │ │ │ │ ├── shape12.txt │ │ │ │ │ ├── shape13.txt │ │ │ │ │ ├── shape14.txt │ │ │ │ │ ├── shape15.txt │ │ │ │ │ ├── shape16.txt │ │ │ │ │ ├── shape17.txt │ │ │ │ │ ├── shape18.txt │ │ │ │ │ ├── shape19.txt │ │ │ │ │ ├── shape2.txt │ │ │ │ │ ├── shape20.txt │ │ │ │ │ ├── shape21.txt │ │ │ │ │ ├── shape22.txt │ │ │ │ │ ├── shape23.txt │ │ │ │ │ ├── shape24.txt │ │ │ │ │ ├── shape25.txt │ │ │ │ │ ├── shape26.txt │ │ │ │ │ ├── shape3.txt │ │ │ │ │ ├── shape4.txt │ │ │ │ │ ├── shape5.txt │ │ │ │ │ ├── shape6.txt │ │ │ │ │ ├── shape7.txt │ │ │ │ │ ├── shape8.txt │ │ │ │ │ └── shape9.txt │ │ │ │ ├── 6x9/ │ │ │ │ │ ├── shape0.txt │ │ │ │ │ ├── shape1.txt │ │ │ │ │ ├── shape10.txt │ │ │ │ │ ├── shape11.txt │ │ │ │ │ ├── shape12.txt │ │ │ │ │ ├── shape13.txt │ │ │ │ │ ├── shape14.txt │ │ │ │ │ ├── shape15.txt │ │ │ │ │ ├── shape16.txt │ │ │ │ │ ├── shape17.txt │ │ │ │ │ ├── shape18.txt │ │ │ │ │ ├── shape19.txt │ │ │ │ │ ├── shape2.txt │ │ │ │ │ ├── shape20.txt │ │ │ │ │ ├── shape21.txt │ │ │ │ │ ├── shape22.txt │ │ │ │ │ ├── shape23.txt │ │ │ │ │ ├── shape24.txt │ │ │ │ │ ├── shape25.txt │ │ │ │ │ ├── shape26.txt │ │ │ │ │ ├── shape3.txt │ │ │ │ │ ├── shape4.txt │ │ │ │ │ ├── shape5.txt │ │ │ │ │ ├── shape6.txt │ │ │ │ │ ├── shape7.txt │ │ │ │ │ ├── shape8.txt │ │ │ │ │ └── shape9.txt │ │ │ │ ├── 7x8/ │ │ │ │ │ ├── shape0.txt │ │ │ │ │ ├── shape1.txt │ │ │ │ │ ├── shape10.txt │ │ │ │ │ ├── shape11.txt │ │ │ │ │ ├── shape12.txt │ │ │ │ │ ├── shape13.txt │ │ │ │ │ ├── shape14.txt │ │ │ │ │ ├── shape15.txt │ │ │ │ │ ├── shape16.txt │ │ │ │ │ ├── shape17.txt │ │ │ │ │ ├── shape18.txt │ │ │ │ │ ├── shape19.txt │ │ │ │ │ ├── shape2.txt │ │ │ │ │ ├── shape20.txt │ │ │ │ │ ├── shape21.txt │ │ │ │ │ ├── shape22.txt │ │ │ │ │ ├── shape23.txt │ │ │ │ │ ├── shape24.txt │ │ │ │ │ ├── shape25.txt │ │ │ │ │ ├── shape26.txt │ │ │ │ │ ├── shape3.txt │ │ │ │ │ ├── shape4.txt │ │ │ │ │ ├── shape5.txt │ │ │ │ │ ├── shape6.txt │ │ │ │ │ ├── shape7.txt │ │ │ │ │ ├── shape8.txt │ │ │ │ │ └── shape9.txt │ │ │ │ ├── 8x6/ │ │ │ │ │ ├── shape0.txt │ │ │ │ │ ├── shape1.txt │ │ │ │ │ ├── shape10.txt │ │ │ │ │ ├── shape11.txt │ │ │ │ │ ├── shape12.txt │ │ │ │ │ ├── shape13.txt │ │ │ │ │ ├── shape14.txt │ │ │ │ │ ├── shape15.txt │ │ │ │ │ ├── shape16.txt │ │ │ │ │ ├── shape17.txt │ │ │ │ │ ├── shape18.txt │ │ │ │ │ ├── shape19.txt │ │ │ │ │ ├── shape2.txt │ │ │ │ │ ├── shape20.txt │ │ │ │ │ ├── shape21.txt │ │ │ │ │ ├── shape22.txt │ │ │ │ │ ├── shape23.txt │ │ │ │ │ ├── shape24.txt │ │ │ │ │ ├── shape25.txt │ │ │ │ │ ├── shape26.txt │ │ │ │ │ ├── shape3.txt │ │ │ │ │ ├── shape4.txt │ │ │ │ │ ├── shape5.txt │ │ │ │ │ ├── shape6.txt │ │ │ │ │ ├── shape7.txt │ │ │ │ │ ├── shape8.txt │ │ │ │ │ └── shape9.txt │ │ │ │ └── 8x8/ │ │ │ │ ├── shape18.txt │ │ │ │ ├── shape19.txt │ │ │ │ └── shape20.txt │ │ │ └── tiles/ │ │ │ ├── 6x8/ │ │ │ │ ├── tile0.txt │ │ │ │ ├── tile1.txt │ │ │ │ ├── tile10.txt │ │ │ │ ├── tile11.txt │ │ │ │ ├── tile12.txt │ │ │ │ ├── tile13.txt │ │ │ │ ├── tile14.txt │ │ │ │ ├── tile15.txt │ │ │ │ ├── tile16.txt │ │ │ │ ├── tile17.txt │ │ │ │ ├── tile18.txt │ │ │ │ ├── tile19.txt │ │ │ │ ├── tile2.txt │ │ │ │ ├── tile20.txt │ │ │ │ ├── tile21.txt │ │ │ │ ├── tile22.txt │ │ │ │ ├── tile23.txt │ │ │ │ ├── tile24.txt │ │ │ │ ├── tile25.txt │ │ │ │ ├── tile26.txt │ │ │ │ ├── tile3.txt │ │ │ │ ├── tile4.txt │ │ │ │ ├── tile5.txt │ │ │ │ ├── tile6.txt │ │ │ │ ├── tile7.txt │ │ │ │ ├── tile8.txt │ │ │ │ └── tile9.txt │ │ │ ├── 6x9/ │ │ │ │ ├── tile0.txt │ │ │ │ ├── tile1.txt │ │ │ │ ├── tile10.txt │ │ │ │ ├── tile11.txt │ │ │ │ ├── tile12.txt │ │ │ │ ├── tile13.txt │ │ │ │ ├── tile14.txt │ │ │ │ ├── tile15.txt │ │ │ │ ├── tile16.txt │ │ │ │ ├── tile17.txt │ │ │ │ ├── tile18.txt │ │ │ │ ├── tile19.txt │ │ │ │ ├── tile2.txt │ │ │ │ ├── tile20.txt │ │ │ │ ├── tile21.txt │ │ │ │ ├── tile22.txt │ │ │ │ ├── tile23.txt │ │ │ │ ├── tile24.txt │ │ │ │ ├── tile25.txt │ │ │ │ ├── tile26.txt │ │ │ │ ├── tile3.txt │ │ │ │ ├── tile4.txt │ │ │ │ ├── tile5.txt │ │ │ │ ├── tile6.txt │ │ │ │ ├── tile7.txt │ │ │ │ ├── tile8.txt │ │ │ │ └── tile9.txt │ │ │ ├── 7x8/ │ │ │ │ ├── tile0.txt │ │ │ │ ├── tile1.txt │ │ │ │ ├── tile10.txt │ │ │ │ ├── tile11.txt │ │ │ │ ├── tile12.txt │ │ │ │ ├── tile13.txt │ │ │ │ ├── tile14.txt │ │ │ │ ├── tile15.txt │ │ │ │ ├── tile16.txt │ │ │ │ ├── tile17.txt │ │ │ │ ├── tile18.txt │ │ │ │ ├── tile19.txt │ │ │ │ ├── tile2.txt │ │ │ │ ├── tile20.txt │ │ │ │ ├── tile21.txt │ │ │ │ ├── tile22.txt │ │ │ │ ├── tile23.txt │ │ │ │ ├── tile24.txt │ │ │ │ ├── tile25.txt │ │ │ │ ├── tile26.txt │ │ │ │ ├── tile3.txt │ │ │ │ ├── tile4.txt │ │ │ │ ├── tile5.txt │ │ │ │ ├── tile6.txt │ │ │ │ ├── tile7.txt │ │ │ │ ├── tile8.txt │ │ │ │ └── tile9.txt │ │ │ ├── 8x6/ │ │ │ │ ├── tile0.txt │ │ │ │ ├── tile1.txt │ │ │ │ ├── tile10.txt │ │ │ │ ├── tile11.txt │ │ │ │ ├── tile12.txt │ │ │ │ ├── tile13.txt │ │ │ │ ├── tile14.txt │ │ │ │ ├── tile15.txt │ │ │ │ ├── tile16.txt │ │ │ │ ├── tile17.txt │ │ │ │ ├── tile18.txt │ │ │ │ ├── tile19.txt │ │ │ │ ├── tile2.txt │ │ │ │ ├── tile20.txt │ │ │ │ ├── tile21.txt │ │ │ │ ├── tile22.txt │ │ │ │ ├── tile23.txt │ │ │ │ ├── tile24.txt │ │ │ │ ├── tile25.txt │ │ │ │ ├── tile26.txt │ │ │ │ ├── tile3.txt │ │ │ │ ├── tile4.txt │ │ │ │ ├── tile5.txt │ │ │ │ ├── tile6.txt │ │ │ │ ├── tile7.txt │ │ │ │ ├── tile8.txt │ │ │ │ └── tile9.txt │ │ │ ├── 8x8/ │ │ │ │ ├── tile0.txt │ │ │ │ ├── tile1.txt │ │ │ │ ├── tile10.txt │ │ │ │ ├── tile11.txt │ │ │ │ ├── tile12.txt │ │ │ │ ├── tile13.txt │ │ │ │ ├── tile14.txt │ │ │ │ ├── tile15.txt │ │ │ │ ├── tile16.txt │ │ │ │ ├── tile17.txt │ │ │ │ ├── tile18.txt │ │ │ │ ├── tile19.txt │ │ │ │ ├── tile2.txt │ │ │ │ ├── tile20.txt │ │ │ │ ├── tile21.txt │ │ │ │ ├── tile22.txt │ │ │ │ ├── tile23.txt │ │ │ │ ├── tile24.txt │ │ │ │ ├── tile25.txt │ │ │ │ ├── tile26.txt │ │ │ │ ├── tile3.txt │ │ │ │ ├── tile4.txt │ │ │ │ ├── tile5.txt │ │ │ │ ├── tile6.txt │ │ │ │ ├── tile7.txt │ │ │ │ ├── tile8.txt │ │ │ │ └── tile9.txt │ │ │ └── ASCII/ │ │ │ └── char_tiles.h │ │ ├── boundary/ │ │ │ ├── Makefile.boundary │ │ │ ├── config/ │ │ │ │ └── project_config.mk │ │ │ ├── main.c │ │ │ └── tiles/ │ │ │ ├── 6x8/ │ │ │ │ ├── tile0.txt │ │ │ │ ├── tile1.txt │ │ │ │ ├── tile10.txt │ │ │ │ ├── tile11.txt │ │ │ │ ├── tile12.txt │ │ │ │ ├── tile13.txt │ │ │ │ ├── tile14.txt │ │ │ │ ├── tile15.txt │ │ │ │ ├── tile16.txt │ │ │ │ ├── tile17.txt │ │ │ │ ├── tile18.txt │ │ │ │ ├── tile19.txt │ │ │ │ ├── tile2.txt │ │ │ │ ├── tile20.txt │ │ │ │ ├── tile21.txt │ │ │ │ ├── tile22.txt │ │ │ │ ├── tile23.txt │ │ │ │ ├── tile24.txt │ │ │ │ ├── tile25.txt │ │ │ │ ├── tile25_ORIG.txt │ │ │ │ ├── tile3.txt │ │ │ │ ├── tile4.txt │ │ │ │ ├── tile5.txt │ │ │ │ ├── tile6.txt │ │ │ │ ├── tile7.txt │ │ │ │ ├── tile8.txt │ │ │ │ └── tile9.txt │ │ │ ├── 6x9/ │ │ │ │ ├── tile0.txt │ │ │ │ ├── tile1.txt │ │ │ │ ├── tile10.txt │ │ │ │ ├── tile11.txt │ │ │ │ ├── tile12.txt │ │ │ │ ├── tile13.txt │ │ │ │ ├── tile14.txt │ │ │ │ ├── tile15.txt │ │ │ │ ├── tile16.txt │ │ │ │ ├── tile17.txt │ │ │ │ ├── tile18.txt │ │ │ │ ├── tile19.txt │ │ │ │ ├── tile2.txt │ │ │ │ ├── tile20.txt │ │ │ │ ├── tile21.txt │ │ │ │ ├── tile22.txt │ │ │ │ ├── tile23.txt │ │ │ │ ├── tile24.txt │ │ │ │ ├── tile25 _ORIG.txt │ │ │ │ ├── tile25.txt │ │ │ │ ├── tile3.txt │ │ │ │ ├── tile4.txt │ │ │ │ ├── tile5.txt │ │ │ │ ├── tile6.txt │ │ │ │ ├── tile7.txt │ │ │ │ ├── tile8.txt │ │ │ │ └── tile9.txt │ │ │ ├── 7x8/ │ │ │ │ ├── tile0.txt │ │ │ │ ├── tile1.txt │ │ │ │ ├── tile10.txt │ │ │ │ ├── tile11.txt │ │ │ │ ├── tile12.txt │ │ │ │ ├── tile13.txt │ │ │ │ ├── tile14.txt │ │ │ │ ├── tile15.txt │ │ │ │ ├── tile16.txt │ │ │ │ ├── tile17.txt │ │ │ │ ├── tile18.txt │ │ │ │ ├── tile19.txt │ │ │ │ ├── tile2.txt │ │ │ │ ├── tile20.txt │ │ │ │ ├── tile21.txt │ │ │ │ ├── tile22.txt │ │ │ │ ├── tile23.txt │ │ │ │ ├── tile24.txt │ │ │ │ ├── tile25.txt │ │ │ │ ├── tile25_ORIG.txt │ │ │ │ ├── tile3.txt │ │ │ │ ├── tile4.txt │ │ │ │ ├── tile5.txt │ │ │ │ ├── tile6.txt │ │ │ │ ├── tile7.txt │ │ │ │ ├── tile8.txt │ │ │ │ └── tile9.txt │ │ │ ├── 8x8/ │ │ │ │ ├── tile0.txt │ │ │ │ ├── tile1.txt │ │ │ │ ├── tile10.txt │ │ │ │ ├── tile11.txt │ │ │ │ ├── tile12.txt │ │ │ │ ├── tile13.txt │ │ │ │ ├── tile14.txt │ │ │ │ ├── tile15.txt │ │ │ │ ├── tile16.txt │ │ │ │ ├── tile17.txt │ │ │ │ ├── tile18.txt │ │ │ │ ├── tile19.txt │ │ │ │ ├── tile2.txt │ │ │ │ ├── tile20.txt │ │ │ │ ├── tile21.txt │ │ │ │ ├── tile22.txt │ │ │ │ ├── tile23.txt │ │ │ │ ├── tile24.txt │ │ │ │ ├── tile25.txt │ │ │ │ ├── tile3.txt │ │ │ │ ├── tile4.txt │ │ │ │ ├── tile5.txt │ │ │ │ ├── tile6.txt │ │ │ │ ├── tile7.txt │ │ │ │ ├── tile8.txt │ │ │ │ └── tile9.txt │ │ │ └── ASCII/ │ │ │ └── char_tiles.h │ │ ├── characters/ │ │ │ ├── Makefile.characters │ │ │ ├── config/ │ │ │ │ └── project_config.mk │ │ │ ├── main.c │ │ │ └── tiles/ │ │ │ ├── 6x8/ │ │ │ │ ├── tile0.txt │ │ │ │ ├── tile1.txt │ │ │ │ ├── tile10.txt │ │ │ │ ├── tile11.txt │ │ │ │ ├── tile12.txt │ │ │ │ ├── tile13.txt │ │ │ │ ├── tile14.txt │ │ │ │ ├── tile15.txt │ │ │ │ ├── tile16.txt │ │ │ │ ├── tile17.txt │ │ │ │ ├── tile18.txt │ │ │ │ ├── tile19.txt │ │ │ │ ├── tile2.txt │ │ │ │ ├── tile20.txt │ │ │ │ ├── tile21.txt │ │ │ │ ├── tile22.txt │ │ │ │ ├── tile23.txt │ │ │ │ ├── tile24.txt │ │ │ │ ├── tile25.txt │ │ │ │ ├── tile25_ORIG.txt │ │ │ │ ├── tile3.txt │ │ │ │ ├── tile4.txt │ │ │ │ ├── tile5.txt │ │ │ │ ├── tile6.txt │ │ │ │ ├── tile7.txt │ │ │ │ ├── tile8.txt │ │ │ │ └── tile9.txt │ │ │ ├── 6x9/ │ │ │ │ ├── tile0.txt │ │ │ │ ├── tile1.txt │ │ │ │ ├── tile10.txt │ │ │ │ ├── tile11.txt │ │ │ │ ├── tile12.txt │ │ │ │ ├── tile13.txt │ │ │ │ ├── tile14.txt │ │ │ │ ├── tile15.txt │ │ │ │ ├── tile16.txt │ │ │ │ ├── tile17.txt │ │ │ │ ├── tile18.txt │ │ │ │ ├── tile19.txt │ │ │ │ ├── tile2.txt │ │ │ │ ├── tile20.txt │ │ │ │ ├── tile21.txt │ │ │ │ ├── tile22.txt │ │ │ │ ├── tile23.txt │ │ │ │ ├── tile24.txt │ │ │ │ ├── tile25 _ORIG.txt │ │ │ │ ├── tile25.txt │ │ │ │ ├── tile3.txt │ │ │ │ ├── tile4.txt │ │ │ │ ├── tile5.txt │ │ │ │ ├── tile6.txt │ │ │ │ ├── tile7.txt │ │ │ │ ├── tile8.txt │ │ │ │ └── tile9.txt │ │ │ ├── 7x8/ │ │ │ │ ├── tile0.txt │ │ │ │ ├── tile1.txt │ │ │ │ ├── tile10.txt │ │ │ │ ├── tile11.txt │ │ │ │ ├── tile12.txt │ │ │ │ ├── tile13.txt │ │ │ │ ├── tile14.txt │ │ │ │ ├── tile15.txt │ │ │ │ ├── tile16.txt │ │ │ │ ├── tile17.txt │ │ │ │ ├── tile18.txt │ │ │ │ ├── tile19.txt │ │ │ │ ├── tile2.txt │ │ │ │ ├── tile20.txt │ │ │ │ ├── tile21.txt │ │ │ │ ├── tile22.txt │ │ │ │ ├── tile23.txt │ │ │ │ ├── tile24.txt │ │ │ │ ├── tile25.txt │ │ │ │ ├── tile25_ORIG.txt │ │ │ │ ├── tile3.txt │ │ │ │ ├── tile4.txt │ │ │ │ ├── tile5.txt │ │ │ │ ├── tile6.txt │ │ │ │ ├── tile7.txt │ │ │ │ ├── tile8.txt │ │ │ │ └── tile9.txt │ │ │ ├── 8x8/ │ │ │ │ ├── tile0.txt │ │ │ │ ├── tile1.txt │ │ │ │ ├── tile10.txt │ │ │ │ ├── tile11.txt │ │ │ │ ├── tile12.txt │ │ │ │ ├── tile13.txt │ │ │ │ ├── tile14.txt │ │ │ │ ├── tile15.txt │ │ │ │ ├── tile16.txt │ │ │ │ ├── tile17.txt │ │ │ │ ├── tile18.txt │ │ │ │ ├── tile19.txt │ │ │ │ ├── tile2.txt │ │ │ │ ├── tile20.txt │ │ │ │ ├── tile21.txt │ │ │ │ ├── tile22.txt │ │ │ │ ├── tile23.txt │ │ │ │ ├── tile24.txt │ │ │ │ ├── tile25.txt │ │ │ │ ├── tile3.txt │ │ │ │ ├── tile4.txt │ │ │ │ ├── tile5.txt │ │ │ │ ├── tile6.txt │ │ │ │ ├── tile7.txt │ │ │ │ ├── tile8.txt │ │ │ │ └── tile9.txt │ │ │ └── ASCII/ │ │ │ └── char_tiles.h │ │ ├── color/ │ │ │ ├── Makefile.color │ │ │ ├── config/ │ │ │ │ └── project_config.mk │ │ │ ├── main.c │ │ │ ├── shapes/ │ │ │ │ ├── 6x8/ │ │ │ │ │ ├── shape0.txt │ │ │ │ │ ├── shape1.txt │ │ │ │ │ ├── shape10.txt │ │ │ │ │ ├── shape11.txt │ │ │ │ │ ├── shape12.txt │ │ │ │ │ ├── shape13.txt │ │ │ │ │ ├── shape14.txt │ │ │ │ │ ├── shape15.txt │ │ │ │ │ ├── shape16.txt │ │ │ │ │ ├── shape17.txt │ │ │ │ │ ├── shape18.txt │ │ │ │ │ ├── shape19.txt │ │ │ │ │ ├── shape2.txt │ │ │ │ │ ├── shape20.txt │ │ │ │ │ ├── shape21.txt │ │ │ │ │ ├── shape22.txt │ │ │ │ │ ├── shape23.txt │ │ │ │ │ ├── shape24.txt │ │ │ │ │ ├── shape25.txt │ │ │ │ │ ├── shape26.txt │ │ │ │ │ ├── shape3.txt │ │ │ │ │ ├── shape4.txt │ │ │ │ │ ├── shape5.txt │ │ │ │ │ ├── shape6.txt │ │ │ │ │ ├── shape7.txt │ │ │ │ │ ├── shape8.txt │ │ │ │ │ └── shape9.txt │ │ │ │ ├── 6x9/ │ │ │ │ │ ├── shape0.txt │ │ │ │ │ ├── shape1.txt │ │ │ │ │ ├── shape10.txt │ │ │ │ │ ├── shape11.txt │ │ │ │ │ ├── shape12.txt │ │ │ │ │ ├── shape13.txt │ │ │ │ │ ├── shape14.txt │ │ │ │ │ ├── shape15.txt │ │ │ │ │ ├── shape16.txt │ │ │ │ │ ├── shape17.txt │ │ │ │ │ ├── shape18.txt │ │ │ │ │ ├── shape19.txt │ │ │ │ │ ├── shape2.txt │ │ │ │ │ ├── shape20.txt │ │ │ │ │ ├── shape21.txt │ │ │ │ │ ├── shape22.txt │ │ │ │ │ ├── shape23.txt │ │ │ │ │ ├── shape24.txt │ │ │ │ │ ├── shape25.txt │ │ │ │ │ ├── shape26.txt │ │ │ │ │ ├── shape3.txt │ │ │ │ │ ├── shape4.txt │ │ │ │ │ ├── shape5.txt │ │ │ │ │ ├── shape6.txt │ │ │ │ │ ├── shape7.txt │ │ │ │ │ ├── shape8.txt │ │ │ │ │ └── shape9.txt │ │ │ │ ├── 7x8/ │ │ │ │ │ ├── shape0.txt │ │ │ │ │ ├── shape1.txt │ │ │ │ │ ├── shape10.txt │ │ │ │ │ ├── shape11.txt │ │ │ │ │ ├── shape12.txt │ │ │ │ │ ├── shape13.txt │ │ │ │ │ ├── shape14.txt │ │ │ │ │ ├── shape15.txt │ │ │ │ │ ├── shape16.txt │ │ │ │ │ ├── shape17.txt │ │ │ │ │ ├── shape18.txt │ │ │ │ │ ├── shape19.txt │ │ │ │ │ ├── shape2.txt │ │ │ │ │ ├── shape20.txt │ │ │ │ │ ├── shape21.txt │ │ │ │ │ ├── shape22.txt │ │ │ │ │ ├── shape23.txt │ │ │ │ │ ├── shape24.txt │ │ │ │ │ ├── shape25.txt │ │ │ │ │ ├── shape26.txt │ │ │ │ │ ├── shape3.txt │ │ │ │ │ ├── shape4.txt │ │ │ │ │ ├── shape5.txt │ │ │ │ │ ├── shape6.txt │ │ │ │ │ ├── shape7.txt │ │ │ │ │ ├── shape8.txt │ │ │ │ │ └── shape9.txt │ │ │ │ ├── 8x6/ │ │ │ │ │ ├── shape0.txt │ │ │ │ │ ├── shape1.txt │ │ │ │ │ ├── shape10.txt │ │ │ │ │ ├── shape11.txt │ │ │ │ │ ├── shape12.txt │ │ │ │ │ ├── shape13.txt │ │ │ │ │ ├── shape14.txt │ │ │ │ │ ├── shape15.txt │ │ │ │ │ ├── shape16.txt │ │ │ │ │ ├── shape17.txt │ │ │ │ │ ├── shape18.txt │ │ │ │ │ ├── shape19.txt │ │ │ │ │ ├── shape2.txt │ │ │ │ │ ├── shape20.txt │ │ │ │ │ ├── shape21.txt │ │ │ │ │ ├── shape22.txt │ │ │ │ │ ├── shape23.txt │ │ │ │ │ ├── shape24.txt │ │ │ │ │ ├── shape25.txt │ │ │ │ │ ├── shape26.txt │ │ │ │ │ ├── shape3.txt │ │ │ │ │ ├── shape4.txt │ │ │ │ │ ├── shape5.txt │ │ │ │ │ ├── shape6.txt │ │ │ │ │ ├── shape7.txt │ │ │ │ │ ├── shape8.txt │ │ │ │ │ └── shape9.txt │ │ │ │ └── 8x8/ │ │ │ │ ├── shape0.txt │ │ │ │ ├── shape1.txt │ │ │ │ ├── shape10.txt │ │ │ │ ├── shape11.txt │ │ │ │ ├── shape12.txt │ │ │ │ ├── shape13.txt │ │ │ │ ├── shape14.txt │ │ │ │ ├── shape15.txt │ │ │ │ ├── shape16.txt │ │ │ │ ├── shape17.txt │ │ │ │ ├── shape18.txt │ │ │ │ ├── shape19.txt │ │ │ │ ├── shape2.txt │ │ │ │ ├── shape20.txt │ │ │ │ ├── shape21.txt │ │ │ │ ├── shape22.txt │ │ │ │ ├── shape23.txt │ │ │ │ ├── shape24.txt │ │ │ │ ├── shape25.txt │ │ │ │ ├── shape26.txt │ │ │ │ ├── shape3.txt │ │ │ │ ├── shape4.txt │ │ │ │ ├── shape5.txt │ │ │ │ ├── shape6.txt │ │ │ │ ├── shape7.txt │ │ │ │ ├── shape8.txt │ │ │ │ └── shape9.txt │ │ │ └── tiles/ │ │ │ ├── 6x8/ │ │ │ │ ├── tile0.txt │ │ │ │ ├── tile1.txt │ │ │ │ ├── tile10.txt │ │ │ │ ├── tile11.txt │ │ │ │ ├── tile12.txt │ │ │ │ ├── tile13.txt │ │ │ │ ├── tile14.txt │ │ │ │ ├── tile15.txt │ │ │ │ ├── tile16.txt │ │ │ │ ├── tile17.txt │ │ │ │ ├── tile18.txt │ │ │ │ ├── tile19.txt │ │ │ │ ├── tile2.txt │ │ │ │ ├── tile20.txt │ │ │ │ ├── tile21.txt │ │ │ │ ├── tile22.txt │ │ │ │ ├── tile23.txt │ │ │ │ ├── tile24.txt │ │ │ │ ├── tile25.txt │ │ │ │ ├── tile25_ORIG.txt │ │ │ │ ├── tile26.txt │ │ │ │ ├── tile3.txt │ │ │ │ ├── tile4.txt │ │ │ │ ├── tile5.txt │ │ │ │ ├── tile6.txt │ │ │ │ ├── tile7.txt │ │ │ │ ├── tile8.txt │ │ │ │ └── tile9.txt │ │ │ ├── 6x9/ │ │ │ │ ├── tile0.txt │ │ │ │ ├── tile1.txt │ │ │ │ ├── tile10.txt │ │ │ │ ├── tile11.txt │ │ │ │ ├── tile12.txt │ │ │ │ ├── tile13.txt │ │ │ │ ├── tile14.txt │ │ │ │ ├── tile15.txt │ │ │ │ ├── tile16.txt │ │ │ │ ├── tile17.txt │ │ │ │ ├── tile18.txt │ │ │ │ ├── tile19.txt │ │ │ │ ├── tile2.txt │ │ │ │ ├── tile20.txt │ │ │ │ ├── tile21.txt │ │ │ │ ├── tile22.txt │ │ │ │ ├── tile23.txt │ │ │ │ ├── tile24.txt │ │ │ │ ├── tile25 _ORIG.txt │ │ │ │ ├── tile25.txt │ │ │ │ ├── tile26.txt │ │ │ │ ├── tile3.txt │ │ │ │ ├── tile4.txt │ │ │ │ ├── tile5.txt │ │ │ │ ├── tile6.txt │ │ │ │ ├── tile7.txt │ │ │ │ ├── tile8.txt │ │ │ │ └── tile9.txt │ │ │ ├── 7x8/ │ │ │ │ ├── tile0.txt │ │ │ │ ├── tile1.txt │ │ │ │ ├── tile10.txt │ │ │ │ ├── tile11.txt │ │ │ │ ├── tile12.txt │ │ │ │ ├── tile13.txt │ │ │ │ ├── tile14.txt │ │ │ │ ├── tile15.txt │ │ │ │ ├── tile16.txt │ │ │ │ ├── tile17.txt │ │ │ │ ├── tile18.txt │ │ │ │ ├── tile19.txt │ │ │ │ ├── tile2.txt │ │ │ │ ├── tile20.txt │ │ │ │ ├── tile21.txt │ │ │ │ ├── tile22.txt │ │ │ │ ├── tile23.txt │ │ │ │ ├── tile24.txt │ │ │ │ ├── tile25.txt │ │ │ │ ├── tile25_ORIG.txt │ │ │ │ ├── tile26.txt │ │ │ │ ├── tile3.txt │ │ │ │ ├── tile4.txt │ │ │ │ ├── tile5.txt │ │ │ │ ├── tile6.txt │ │ │ │ ├── tile7.txt │ │ │ │ ├── tile8.txt │ │ │ │ └── tile9.txt │ │ │ ├── 8x6/ │ │ │ │ ├── tile0.txt │ │ │ │ ├── tile1.txt │ │ │ │ ├── tile10.txt │ │ │ │ ├── tile11.txt │ │ │ │ ├── tile12.txt │ │ │ │ ├── tile13.txt │ │ │ │ ├── tile14.txt │ │ │ │ ├── tile15.txt │ │ │ │ ├── tile16.txt │ │ │ │ ├── tile17.txt │ │ │ │ ├── tile18.txt │ │ │ │ ├── tile19.txt │ │ │ │ ├── tile2.txt │ │ │ │ ├── tile20.txt │ │ │ │ ├── tile21.txt │ │ │ │ ├── tile22.txt │ │ │ │ ├── tile23.txt │ │ │ │ ├── tile24.txt │ │ │ │ ├── tile25.txt │ │ │ │ ├── tile26.txt │ │ │ │ ├── tile3.txt │ │ │ │ ├── tile4.txt │ │ │ │ ├── tile5.txt │ │ │ │ ├── tile6.txt │ │ │ │ ├── tile7.txt │ │ │ │ ├── tile8.txt │ │ │ │ └── tile9.txt │ │ │ ├── 8x8/ │ │ │ │ ├── tile0.txt │ │ │ │ ├── tile1.txt │ │ │ │ ├── tile10.txt │ │ │ │ ├── tile11.txt │ │ │ │ ├── tile12.txt │ │ │ │ ├── tile13.txt │ │ │ │ ├── tile14.txt │ │ │ │ ├── tile15.txt │ │ │ │ ├── tile16.txt │ │ │ │ ├── tile17.txt │ │ │ │ ├── tile18.txt │ │ │ │ ├── tile19.txt │ │ │ │ ├── tile2.txt │ │ │ │ ├── tile20.txt │ │ │ │ ├── tile21.txt │ │ │ │ ├── tile22.txt │ │ │ │ ├── tile23.txt │ │ │ │ ├── tile24.txt │ │ │ │ ├── tile25.txt │ │ │ │ ├── tile26.txt │ │ │ │ ├── tile3.txt │ │ │ │ ├── tile4.txt │ │ │ │ ├── tile5.txt │ │ │ │ ├── tile6.txt │ │ │ │ ├── tile7.txt │ │ │ │ ├── tile8.txt │ │ │ │ └── tile9.txt │ │ │ └── ASCII/ │ │ │ └── char_tiles.h │ │ ├── graphics/ │ │ │ ├── Makefile.graphics │ │ │ ├── config/ │ │ │ │ └── project_config.mk │ │ │ ├── images.h │ │ │ ├── main.c │ │ │ ├── shapes/ │ │ │ │ ├── 6x8/ │ │ │ │ │ ├── shape0.txt │ │ │ │ │ ├── shape1.txt │ │ │ │ │ ├── shape10.txt │ │ │ │ │ ├── shape11.txt │ │ │ │ │ ├── shape12.txt │ │ │ │ │ ├── shape13.txt │ │ │ │ │ ├── shape14.txt │ │ │ │ │ ├── shape15.txt │ │ │ │ │ ├── shape16.txt │ │ │ │ │ ├── shape17.txt │ │ │ │ │ ├── shape18.txt │ │ │ │ │ ├── shape19.txt │ │ │ │ │ ├── shape2.txt │ │ │ │ │ ├── shape20.txt │ │ │ │ │ ├── shape21.txt │ │ │ │ │ ├── shape22.txt │ │ │ │ │ ├── shape23.txt │ │ │ │ │ ├── shape24.txt │ │ │ │ │ ├── shape25.txt │ │ │ │ │ ├── shape26.txt │ │ │ │ │ ├── shape3.txt │ │ │ │ │ ├── shape4.txt │ │ │ │ │ ├── shape5.txt │ │ │ │ │ ├── shape6.txt │ │ │ │ │ ├── shape7.txt │ │ │ │ │ ├── shape8.txt │ │ │ │ │ └── shape9.txt │ │ │ │ ├── 6x9/ │ │ │ │ │ ├── shape0.txt │ │ │ │ │ ├── shape1.txt │ │ │ │ │ ├── shape10.txt │ │ │ │ │ ├── shape11.txt │ │ │ │ │ ├── shape12.txt │ │ │ │ │ ├── shape13.txt │ │ │ │ │ ├── shape14.txt │ │ │ │ │ ├── shape15.txt │ │ │ │ │ ├── shape16.txt │ │ │ │ │ ├── shape17.txt │ │ │ │ │ ├── shape18.txt │ │ │ │ │ ├── shape19.txt │ │ │ │ │ ├── shape2.txt │ │ │ │ │ ├── shape20.txt │ │ │ │ │ ├── shape21.txt │ │ │ │ │ ├── shape22.txt │ │ │ │ │ ├── shape23.txt │ │ │ │ │ ├── shape24.txt │ │ │ │ │ ├── shape25.txt │ │ │ │ │ ├── shape26.txt │ │ │ │ │ ├── shape3.txt │ │ │ │ │ ├── shape4.txt │ │ │ │ │ ├── shape5.txt │ │ │ │ │ ├── shape6.txt │ │ │ │ │ ├── shape7.txt │ │ │ │ │ ├── shape8.txt │ │ │ │ │ └── shape9.txt │ │ │ │ ├── 7x8/ │ │ │ │ │ ├── shape0.txt │ │ │ │ │ ├── shape1.txt │ │ │ │ │ ├── shape10.txt │ │ │ │ │ ├── shape11.txt │ │ │ │ │ ├── shape12.txt │ │ │ │ │ ├── shape13.txt │ │ │ │ │ ├── shape14.txt │ │ │ │ │ ├── shape15.txt │ │ │ │ │ ├── shape16.txt │ │ │ │ │ ├── shape17.txt │ │ │ │ │ ├── shape18.txt │ │ │ │ │ ├── shape19.txt │ │ │ │ │ ├── shape2.txt │ │ │ │ │ ├── shape20.txt │ │ │ │ │ ├── shape21.txt │ │ │ │ │ ├── shape22.txt │ │ │ │ │ ├── shape23.txt │ │ │ │ │ ├── shape24.txt │ │ │ │ │ ├── shape25.txt │ │ │ │ │ ├── shape26.txt │ │ │ │ │ ├── shape3.txt │ │ │ │ │ ├── shape4.txt │ │ │ │ │ ├── shape5.txt │ │ │ │ │ ├── shape6.txt │ │ │ │ │ ├── shape7.txt │ │ │ │ │ ├── shape8.txt │ │ │ │ │ └── shape9.txt │ │ │ │ ├── 8x6/ │ │ │ │ │ ├── shape0.txt │ │ │ │ │ ├── shape1.txt │ │ │ │ │ ├── shape10.txt │ │ │ │ │ ├── shape11.txt │ │ │ │ │ ├── shape12.txt │ │ │ │ │ ├── shape13.txt │ │ │ │ │ ├── shape14.txt │ │ │ │ │ ├── shape15.txt │ │ │ │ │ ├── shape16.txt │ │ │ │ │ ├── shape17.txt │ │ │ │ │ ├── shape18.txt │ │ │ │ │ ├── shape19.txt │ │ │ │ │ ├── shape2.txt │ │ │ │ │ ├── shape20.txt │ │ │ │ │ ├── shape21.txt │ │ │ │ │ ├── shape22.txt │ │ │ │ │ ├── shape23.txt │ │ │ │ │ ├── shape24.txt │ │ │ │ │ ├── shape25.txt │ │ │ │ │ ├── shape26.txt │ │ │ │ │ ├── shape3.txt │ │ │ │ │ ├── shape4.txt │ │ │ │ │ ├── shape5.txt │ │ │ │ │ ├── shape6.txt │ │ │ │ │ ├── shape7.txt │ │ │ │ │ ├── shape8.txt │ │ │ │ │ └── shape9.txt │ │ │ │ └── 8x8/ │ │ │ │ ├── shape0.txt │ │ │ │ ├── shape1.txt │ │ │ │ ├── shape10.txt │ │ │ │ ├── shape11.txt │ │ │ │ ├── shape12.txt │ │ │ │ ├── shape13.txt │ │ │ │ ├── shape14.txt │ │ │ │ ├── shape15.txt │ │ │ │ ├── shape16.txt │ │ │ │ ├── shape17.txt │ │ │ │ ├── shape18.txt │ │ │ │ ├── shape19.txt │ │ │ │ ├── shape2.txt │ │ │ │ ├── shape20.txt │ │ │ │ ├── shape21.txt │ │ │ │ ├── shape22.txt │ │ │ │ ├── shape23.txt │ │ │ │ ├── shape24.txt │ │ │ │ ├── shape25.txt │ │ │ │ ├── shape26.txt │ │ │ │ ├── shape3.txt │ │ │ │ ├── shape4.txt │ │ │ │ ├── shape5.txt │ │ │ │ ├── shape6.txt │ │ │ │ ├── shape7.txt │ │ │ │ ├── shape8.txt │ │ │ │ └── shape9.txt │ │ │ ├── tiles/ │ │ │ │ ├── 6x8/ │ │ │ │ │ ├── tile0.txt │ │ │ │ │ ├── tile1.txt │ │ │ │ │ ├── tile10.txt │ │ │ │ │ ├── tile11.txt │ │ │ │ │ ├── tile12.txt │ │ │ │ │ ├── tile13.txt │ │ │ │ │ ├── tile14.txt │ │ │ │ │ ├── tile15.txt │ │ │ │ │ ├── tile16.txt │ │ │ │ │ ├── tile17.txt │ │ │ │ │ ├── tile18.txt │ │ │ │ │ ├── tile19.txt │ │ │ │ │ ├── tile2.txt │ │ │ │ │ ├── tile20.txt │ │ │ │ │ ├── tile21.txt │ │ │ │ │ ├── tile22.txt │ │ │ │ │ ├── tile23.txt │ │ │ │ │ ├── tile24.txt │ │ │ │ │ ├── tile25.txt │ │ │ │ │ ├── tile26.txt │ │ │ │ │ ├── tile3.txt │ │ │ │ │ ├── tile4.txt │ │ │ │ │ ├── tile5.txt │ │ │ │ │ ├── tile6.txt │ │ │ │ │ ├── tile7.txt │ │ │ │ │ ├── tile8.txt │ │ │ │ │ └── tile9.txt │ │ │ │ ├── 6x9/ │ │ │ │ │ ├── tile0.txt │ │ │ │ │ ├── tile1.txt │ │ │ │ │ ├── tile10.txt │ │ │ │ │ ├── tile11.txt │ │ │ │ │ ├── tile12.txt │ │ │ │ │ ├── tile13.txt │ │ │ │ │ ├── tile14.txt │ │ │ │ │ ├── tile15.txt │ │ │ │ │ ├── tile16.txt │ │ │ │ │ ├── tile17.txt │ │ │ │ │ ├── tile18.txt │ │ │ │ │ ├── tile19.txt │ │ │ │ │ ├── tile2.txt │ │ │ │ │ ├── tile20.txt │ │ │ │ │ ├── tile21.txt │ │ │ │ │ ├── tile22.txt │ │ │ │ │ ├── tile23.txt │ │ │ │ │ ├── tile24.txt │ │ │ │ │ ├── tile25.txt │ │ │ │ │ ├── tile26.txt │ │ │ │ │ ├── tile3.txt │ │ │ │ │ ├── tile4.txt │ │ │ │ │ ├── tile5.txt │ │ │ │ │ ├── tile6.txt │ │ │ │ │ ├── tile7.txt │ │ │ │ │ ├── tile8.txt │ │ │ │ │ └── tile9.txt │ │ │ │ ├── 7x8/ │ │ │ │ │ ├── tile0.txt │ │ │ │ │ ├── tile1.txt │ │ │ │ │ ├── tile10.txt │ │ │ │ │ ├── tile11.txt │ │ │ │ │ ├── tile12.txt │ │ │ │ │ ├── tile13.txt │ │ │ │ │ ├── tile14.txt │ │ │ │ │ ├── tile15.txt │ │ │ │ │ ├── tile16.txt │ │ │ │ │ ├── tile17.txt │ │ │ │ │ ├── tile18.txt │ │ │ │ │ ├── tile19.txt │ │ │ │ │ ├── tile2.txt │ │ │ │ │ ├── tile20.txt │ │ │ │ │ ├── tile21.txt │ │ │ │ │ ├── tile22.txt │ │ │ │ │ ├── tile23.txt │ │ │ │ │ ├── tile24.txt │ │ │ │ │ ├── tile25.txt │ │ │ │ │ ├── tile26.txt │ │ │ │ │ ├── tile3.txt │ │ │ │ │ ├── tile4.txt │ │ │ │ │ ├── tile5.txt │ │ │ │ │ ├── tile6.txt │ │ │ │ │ ├── tile7.txt │ │ │ │ │ ├── tile8.txt │ │ │ │ │ └── tile9.txt │ │ │ │ ├── 8x6/ │ │ │ │ │ ├── tile0.txt │ │ │ │ │ ├── tile1.txt │ │ │ │ │ ├── tile10.txt │ │ │ │ │ ├── tile11.txt │ │ │ │ │ ├── tile12.txt │ │ │ │ │ ├── tile13.txt │ │ │ │ │ ├── tile14.txt │ │ │ │ │ ├── tile15.txt │ │ │ │ │ ├── tile16.txt │ │ │ │ │ ├── tile17.txt │ │ │ │ │ ├── tile18.txt │ │ │ │ │ ├── tile19.txt │ │ │ │ │ ├── tile2.txt │ │ │ │ │ ├── tile20.txt │ │ │ │ │ ├── tile21.txt │ │ │ │ │ ├── tile22.txt │ │ │ │ │ ├── tile23.txt │ │ │ │ │ ├── tile24.txt │ │ │ │ │ ├── tile25.txt │ │ │ │ │ ├── tile26.txt │ │ │ │ │ ├── tile3.txt │ │ │ │ │ ├── tile4.txt │ │ │ │ │ ├── tile5.txt │ │ │ │ │ ├── tile6.txt │ │ │ │ │ ├── tile7.txt │ │ │ │ │ ├── tile8.txt │ │ │ │ │ └── tile9.txt │ │ │ │ ├── 8x8/ │ │ │ │ │ ├── tile0.txt │ │ │ │ │ ├── tile1.txt │ │ │ │ │ ├── tile10.txt │ │ │ │ │ ├── tile11.txt │ │ │ │ │ ├── tile12.txt │ │ │ │ │ ├── tile13.txt │ │ │ │ │ ├── tile14.txt │ │ │ │ │ ├── tile15.txt │ │ │ │ │ ├── tile16.txt │ │ │ │ │ ├── tile17.txt │ │ │ │ │ ├── tile18.txt │ │ │ │ │ ├── tile19.txt │ │ │ │ │ ├── tile2.txt │ │ │ │ │ ├── tile20.txt │ │ │ │ │ ├── tile21.txt │ │ │ │ │ ├── tile22.txt │ │ │ │ │ ├── tile23.txt │ │ │ │ │ ├── tile24.txt │ │ │ │ │ ├── tile25.txt │ │ │ │ │ ├── tile26.txt │ │ │ │ │ ├── tile3.txt │ │ │ │ │ ├── tile4.txt │ │ │ │ │ ├── tile5.txt │ │ │ │ │ ├── tile6.txt │ │ │ │ │ ├── tile7.txt │ │ │ │ │ ├── tile8.txt │ │ │ │ │ └── tile9.txt │ │ │ │ └── ASCII/ │ │ │ │ └── char_tiles.h │ │ │ └── tools/ │ │ │ ├── digit_0.txt │ │ │ ├── digit_1.txt │ │ │ ├── digit_2.txt │ │ │ ├── digit_3.txt │ │ │ ├── digit_4.txt │ │ │ ├── digit_5.txt │ │ │ ├── digit_6.txt │ │ │ ├── digit_7.txt │ │ │ ├── digit_8.txt │ │ │ ├── digit_9.txt │ │ │ ├── extract_least.py │ │ │ ├── join_digits.py │ │ │ ├── shape0.txt │ │ │ ├── shape1.txt │ │ │ ├── shape2.txt │ │ │ ├── shape3.txt │ │ │ ├── shape4.txt │ │ │ ├── shape5.txt │ │ │ ├── shape6.txt │ │ │ ├── shape7.txt │ │ │ ├── shape8.txt │ │ │ ├── shape9.txt │ │ │ └── test.txt │ │ ├── hello/ │ │ │ ├── Makefile.hello │ │ │ ├── config/ │ │ │ │ └── project_config.mk │ │ │ ├── main.c │ │ │ └── tiles/ │ │ │ ├── 6x8/ │ │ │ │ ├── tile0.txt │ │ │ │ ├── tile1.txt │ │ │ │ ├── tile10.txt │ │ │ │ ├── tile11.txt │ │ │ │ ├── tile12.txt │ │ │ │ ├── tile13.txt │ │ │ │ ├── tile14.txt │ │ │ │ ├── tile15.txt │ │ │ │ ├── tile16.txt │ │ │ │ ├── tile17.txt │ │ │ │ ├── tile18.txt │ │ │ │ ├── tile19.txt │ │ │ │ ├── tile2.txt │ │ │ │ ├── tile20.txt │ │ │ │ ├── tile21.txt │ │ │ │ ├── tile22.txt │ │ │ │ ├── tile23.txt │ │ │ │ ├── tile24.txt │ │ │ │ ├── tile25.txt │ │ │ │ ├── tile25_ORIG.txt │ │ │ │ ├── tile3.txt │ │ │ │ ├── tile4.txt │ │ │ │ ├── tile5.txt │ │ │ │ ├── tile6.txt │ │ │ │ ├── tile7.txt │ │ │ │ ├── tile8.txt │ │ │ │ └── tile9.txt │ │ │ ├── 6x9/ │ │ │ │ ├── tile0.txt │ │ │ │ ├── tile1.txt │ │ │ │ ├── tile10.txt │ │ │ │ ├── tile11.txt │ │ │ │ ├── tile12.txt │ │ │ │ ├── tile13.txt │ │ │ │ ├── tile14.txt │ │ │ │ ├── tile15.txt │ │ │ │ ├── tile16.txt │ │ │ │ ├── tile17.txt │ │ │ │ ├── tile18.txt │ │ │ │ ├── tile19.txt │ │ │ │ ├── tile2.txt │ │ │ │ ├── tile20.txt │ │ │ │ ├── tile21.txt │ │ │ │ ├── tile22.txt │ │ │ │ ├── tile23.txt │ │ │ │ ├── tile24.txt │ │ │ │ ├── tile25 _ORIG.txt │ │ │ │ ├── tile25.txt │ │ │ │ ├── tile3.txt │ │ │ │ ├── tile4.txt │ │ │ │ ├── tile5.txt │ │ │ │ ├── tile6.txt │ │ │ │ ├── tile7.txt │ │ │ │ ├── tile8.txt │ │ │ │ └── tile9.txt │ │ │ ├── 7x8/ │ │ │ │ ├── tile0.txt │ │ │ │ ├── tile1.txt │ │ │ │ ├── tile10.txt │ │ │ │ ├── tile11.txt │ │ │ │ ├── tile12.txt │ │ │ │ ├── tile13.txt │ │ │ │ ├── tile14.txt │ │ │ │ ├── tile15.txt │ │ │ │ ├── tile16.txt │ │ │ │ ├── tile17.txt │ │ │ │ ├── tile18.txt │ │ │ │ ├── tile19.txt │ │ │ │ ├── tile2.txt │ │ │ │ ├── tile20.txt │ │ │ │ ├── tile21.txt │ │ │ │ ├── tile22.txt │ │ │ │ ├── tile23.txt │ │ │ │ ├── tile24.txt │ │ │ │ ├── tile25.txt │ │ │ │ ├── tile25_ORIG.txt │ │ │ │ ├── tile3.txt │ │ │ │ ├── tile4.txt │ │ │ │ ├── tile5.txt │ │ │ │ ├── tile6.txt │ │ │ │ ├── tile7.txt │ │ │ │ ├── tile8.txt │ │ │ │ └── tile9.txt │ │ │ ├── 8x8/ │ │ │ │ ├── tile0.txt │ │ │ │ ├── tile1.txt │ │ │ │ ├── tile10.txt │ │ │ │ ├── tile11.txt │ │ │ │ ├── tile12.txt │ │ │ │ ├── tile13.txt │ │ │ │ ├── tile14.txt │ │ │ │ ├── tile15.txt │ │ │ │ ├── tile16.txt │ │ │ │ ├── tile17.txt │ │ │ │ ├── tile18.txt │ │ │ │ ├── tile19.txt │ │ │ │ ├── tile2.txt │ │ │ │ ├── tile20.txt │ │ │ │ ├── tile21.txt │ │ │ │ ├── tile22.txt │ │ │ │ ├── tile23.txt │ │ │ │ ├── tile24.txt │ │ │ │ ├── tile25.txt │ │ │ │ ├── tile3.txt │ │ │ │ ├── tile4.txt │ │ │ │ ├── tile5.txt │ │ │ │ ├── tile6.txt │ │ │ │ ├── tile7.txt │ │ │ │ ├── tile8.txt │ │ │ │ └── tile9.txt │ │ │ └── ASCII/ │ │ │ └── char_tiles.h │ │ ├── input/ │ │ │ ├── Makefile.input │ │ │ ├── config/ │ │ │ │ └── project_config.mk │ │ │ ├── main.c │ │ │ └── tiles/ │ │ │ ├── 6x8/ │ │ │ │ ├── tile0.txt │ │ │ │ ├── tile1.txt │ │ │ │ ├── tile10.txt │ │ │ │ ├── tile11.txt │ │ │ │ ├── tile12.txt │ │ │ │ ├── tile13.txt │ │ │ │ ├── tile14.txt │ │ │ │ ├── tile15.txt │ │ │ │ ├── tile16.txt │ │ │ │ ├── tile17.txt │ │ │ │ ├── tile18.txt │ │ │ │ ├── tile19.txt │ │ │ │ ├── tile2.txt │ │ │ │ ├── tile20.txt │ │ │ │ ├── tile21.txt │ │ │ │ ├── tile22.txt │ │ │ │ ├── tile23.txt │ │ │ │ ├── tile24.txt │ │ │ │ ├── tile25.txt │ │ │ │ ├── tile25_ORIG.txt │ │ │ │ ├── tile3.txt │ │ │ │ ├── tile4.txt │ │ │ │ ├── tile5.txt │ │ │ │ ├── tile6.txt │ │ │ │ ├── tile7.txt │ │ │ │ ├── tile8.txt │ │ │ │ └── tile9.txt │ │ │ ├── 6x9/ │ │ │ │ ├── tile0.txt │ │ │ │ ├── tile1.txt │ │ │ │ ├── tile10.txt │ │ │ │ ├── tile11.txt │ │ │ │ ├── tile12.txt │ │ │ │ ├── tile13.txt │ │ │ │ ├── tile14.txt │ │ │ │ ├── tile15.txt │ │ │ │ ├── tile16.txt │ │ │ │ ├── tile17.txt │ │ │ │ ├── tile18.txt │ │ │ │ ├── tile19.txt │ │ │ │ ├── tile2.txt │ │ │ │ ├── tile20.txt │ │ │ │ ├── tile21.txt │ │ │ │ ├── tile22.txt │ │ │ │ ├── tile23.txt │ │ │ │ ├── tile24.txt │ │ │ │ ├── tile25 _ORIG.txt │ │ │ │ ├── tile25.txt │ │ │ │ ├── tile3.txt │ │ │ │ ├── tile4.txt │ │ │ │ ├── tile5.txt │ │ │ │ ├── tile6.txt │ │ │ │ ├── tile7.txt │ │ │ │ ├── tile8.txt │ │ │ │ └── tile9.txt │ │ │ ├── 7x8/ │ │ │ │ ├── tile0.txt │ │ │ │ ├── tile1.txt │ │ │ │ ├── tile10.txt │ │ │ │ ├── tile11.txt │ │ │ │ ├── tile12.txt │ │ │ │ ├── tile13.txt │ │ │ │ ├── tile14.txt │ │ │ │ ├── tile15.txt │ │ │ │ ├── tile16.txt │ │ │ │ ├── tile17.txt │ │ │ │ ├── tile18.txt │ │ │ │ ├── tile19.txt │ │ │ │ ├── tile2.txt │ │ │ │ ├── tile20.txt │ │ │ │ ├── tile21.txt │ │ │ │ ├── tile22.txt │ │ │ │ ├── tile23.txt │ │ │ │ ├── tile24.txt │ │ │ │ ├── tile25.txt │ │ │ │ ├── tile25_ORIG.txt │ │ │ │ ├── tile3.txt │ │ │ │ ├── tile4.txt │ │ │ │ ├── tile5.txt │ │ │ │ ├── tile6.txt │ │ │ │ ├── tile7.txt │ │ │ │ ├── tile8.txt │ │ │ │ └── tile9.txt │ │ │ ├── 8x8/ │ │ │ │ ├── tile0.txt │ │ │ │ ├── tile1.txt │ │ │ │ ├── tile10.txt │ │ │ │ ├── tile11.txt │ │ │ │ ├── tile12.txt │ │ │ │ ├── tile13.txt │ │ │ │ ├── tile14.txt │ │ │ │ ├── tile15.txt │ │ │ │ ├── tile16.txt │ │ │ │ ├── tile17.txt │ │ │ │ ├── tile18.txt │ │ │ │ ├── tile19.txt │ │ │ │ ├── tile2.txt │ │ │ │ ├── tile20.txt │ │ │ │ ├── tile21.txt │ │ │ │ ├── tile22.txt │ │ │ │ ├── tile23.txt │ │ │ │ ├── tile24.txt │ │ │ │ ├── tile25.txt │ │ │ │ ├── tile3.txt │ │ │ │ ├── tile4.txt │ │ │ │ ├── tile5.txt │ │ │ │ ├── tile6.txt │ │ │ │ ├── tile7.txt │ │ │ │ ├── tile8.txt │ │ │ │ └── tile9.txt │ │ │ └── ASCII/ │ │ │ └── char_tiles.h │ │ ├── invaders/ │ │ │ ├── Makefile.invaders │ │ │ ├── config/ │ │ │ │ └── project_config.mk │ │ │ ├── main.c │ │ │ ├── tile_aliases.h │ │ │ └── tiles/ │ │ │ ├── 6x8/ │ │ │ │ ├── tile0.txt │ │ │ │ ├── tile1.txt │ │ │ │ ├── tile10.txt │ │ │ │ ├── tile11.txt │ │ │ │ ├── tile12.txt │ │ │ │ ├── tile13.txt │ │ │ │ ├── tile14.txt │ │ │ │ ├── tile15.txt │ │ │ │ ├── tile16.txt │ │ │ │ ├── tile17.txt │ │ │ │ ├── tile18.txt │ │ │ │ ├── tile19.txt │ │ │ │ ├── tile2.txt │ │ │ │ ├── tile20.txt │ │ │ │ ├── tile21.txt │ │ │ │ ├── tile22.txt │ │ │ │ ├── tile23.txt │ │ │ │ ├── tile24.txt │ │ │ │ ├── tile25.txt │ │ │ │ ├── tile3.txt │ │ │ │ ├── tile4.txt │ │ │ │ ├── tile5.txt │ │ │ │ ├── tile6.txt │ │ │ │ ├── tile7.txt │ │ │ │ ├── tile8.txt │ │ │ │ └── tile9.txt │ │ │ ├── 6x9/ │ │ │ │ ├── tile0.txt │ │ │ │ ├── tile1.txt │ │ │ │ ├── tile10.txt │ │ │ │ ├── tile11.txt │ │ │ │ ├── tile12.txt │ │ │ │ ├── tile13.txt │ │ │ │ ├── tile14.txt │ │ │ │ ├── tile15.txt │ │ │ │ ├── tile16.txt │ │ │ │ ├── tile17.txt │ │ │ │ ├── tile18.txt │ │ │ │ ├── tile19.txt │ │ │ │ ├── tile2.txt │ │ │ │ ├── tile20.txt │ │ │ │ ├── tile21.txt │ │ │ │ ├── tile22.txt │ │ │ │ ├── tile23.txt │ │ │ │ ├── tile24.txt │ │ │ │ ├── tile25.txt │ │ │ │ ├── tile3.txt │ │ │ │ ├── tile4.txt │ │ │ │ ├── tile5.txt │ │ │ │ ├── tile6.txt │ │ │ │ ├── tile7.txt │ │ │ │ ├── tile8.txt │ │ │ │ └── tile9.txt │ │ │ ├── 7x8/ │ │ │ │ ├── tile0.txt │ │ │ │ ├── tile1.txt │ │ │ │ ├── tile10.txt │ │ │ │ ├── tile11.txt │ │ │ │ ├── tile12.txt │ │ │ │ ├── tile13.txt │ │ │ │ ├── tile14.txt │ │ │ │ ├── tile15.txt │ │ │ │ ├── tile16.txt │ │ │ │ ├── tile17.txt │ │ │ │ ├── tile18.txt │ │ │ │ ├── tile19.txt │ │ │ │ ├── tile2.txt │ │ │ │ ├── tile20.txt │ │ │ │ ├── tile21.txt │ │ │ │ ├── tile22.txt │ │ │ │ ├── tile23.txt │ │ │ │ ├── tile24.txt │ │ │ │ ├── tile25.txt │ │ │ │ ├── tile3.txt │ │ │ │ ├── tile4.txt │ │ │ │ ├── tile5.txt │ │ │ │ ├── tile6.txt │ │ │ │ ├── tile7.txt │ │ │ │ ├── tile8.txt │ │ │ │ └── tile9.txt │ │ │ ├── 8x8/ │ │ │ │ ├── tile0.txt │ │ │ │ ├── tile1.txt │ │ │ │ ├── tile10.txt │ │ │ │ ├── tile11.txt │ │ │ │ ├── tile12.txt │ │ │ │ ├── tile13.txt │ │ │ │ ├── tile14.txt │ │ │ │ ├── tile15.txt │ │ │ │ ├── tile16.txt │ │ │ │ ├── tile17.txt │ │ │ │ ├── tile18.txt │ │ │ │ ├── tile19.txt │ │ │ │ ├── tile2.txt │ │ │ │ ├── tile20.txt │ │ │ │ ├── tile21.txt │ │ │ │ ├── tile22.txt │ │ │ │ ├── tile23.txt │ │ │ │ ├── tile24.txt │ │ │ │ ├── tile25.txt │ │ │ │ ├── tile3.txt │ │ │ │ ├── tile4.txt │ │ │ │ ├── tile5.txt │ │ │ │ ├── tile6.txt │ │ │ │ ├── tile7.txt │ │ │ │ ├── tile8.txt │ │ │ │ └── tile9.txt │ │ │ └── ASCII/ │ │ │ └── char_tiles.h │ │ ├── matrix/ │ │ │ ├── Makefile.matrix │ │ │ ├── config/ │ │ │ │ └── project_config.mk │ │ │ ├── main.c │ │ │ ├── tile_aliases.h │ │ │ └── tiles/ │ │ │ ├── 6x8/ │ │ │ │ ├── tile0.txt │ │ │ │ ├── tile1.txt │ │ │ │ ├── tile10.txt │ │ │ │ ├── tile11.txt │ │ │ │ ├── tile12.txt │ │ │ │ ├── tile13.txt │ │ │ │ ├── tile14.txt │ │ │ │ ├── tile15.txt │ │ │ │ ├── tile16.txt │ │ │ │ ├── tile17.txt │ │ │ │ ├── tile18.txt │ │ │ │ ├── tile19.txt │ │ │ │ ├── tile2.txt │ │ │ │ ├── tile20.txt │ │ │ │ ├── tile21.txt │ │ │ │ ├── tile22.txt │ │ │ │ ├── tile23.txt │ │ │ │ ├── tile24.txt │ │ │ │ ├── tile25.txt │ │ │ │ ├── tile3.txt │ │ │ │ ├── tile4.txt │ │ │ │ ├── tile5.txt │ │ │ │ ├── tile6.txt │ │ │ │ ├── tile7.txt │ │ │ │ ├── tile8.txt │ │ │ │ └── tile9.txt │ │ │ ├── 6x9/ │ │ │ │ ├── tile0.txt │ │ │ │ ├── tile1.txt │ │ │ │ ├── tile10.txt │ │ │ │ ├── tile11.txt │ │ │ │ ├── tile12.txt │ │ │ │ ├── tile13.txt │ │ │ │ ├── tile14.txt │ │ │ │ ├── tile15.txt │ │ │ │ ├── tile16.txt │ │ │ │ ├── tile17.txt │ │ │ │ ├── tile18.txt │ │ │ │ ├── tile19.txt │ │ │ │ ├── tile2.txt │ │ │ │ ├── tile20.txt │ │ │ │ ├── tile21.txt │ │ │ │ ├── tile22.txt │ │ │ │ ├── tile23.txt │ │ │ │ ├── tile24.txt │ │ │ │ ├── tile25.txt │ │ │ │ ├── tile3.txt │ │ │ │ ├── tile4.txt │ │ │ │ ├── tile5.txt │ │ │ │ ├── tile6.txt │ │ │ │ ├── tile7.txt │ │ │ │ ├── tile8.txt │ │ │ │ └── tile9.txt │ │ │ ├── 7x8/ │ │ │ │ ├── tile0.txt │ │ │ │ ├── tile1.txt │ │ │ │ ├── tile10.txt │ │ │ │ ├── tile11.txt │ │ │ │ ├── tile12.txt │ │ │ │ ├── tile13.txt │ │ │ │ ├── tile14.txt │ │ │ │ ├── tile15.txt │ │ │ │ ├── tile16.txt │ │ │ │ ├── tile17.txt │ │ │ │ ├── tile18.txt │ │ │ │ ├── tile19.txt │ │ │ │ ├── tile2.txt │ │ │ │ ├── tile20.txt │ │ │ │ ├── tile21.txt │ │ │ │ ├── tile22.txt │ │ │ │ ├── tile23.txt │ │ │ │ ├── tile24.txt │ │ │ │ ├── tile25.txt │ │ │ │ ├── tile3.txt │ │ │ │ ├── tile4.txt │ │ │ │ ├── tile5.txt │ │ │ │ ├── tile6.txt │ │ │ │ ├── tile7.txt │ │ │ │ ├── tile8.txt │ │ │ │ └── tile9.txt │ │ │ ├── 8x8/ │ │ │ │ ├── tile0.txt │ │ │ │ ├── tile1.txt │ │ │ │ ├── tile10.txt │ │ │ │ ├── tile11.txt │ │ │ │ ├── tile12.txt │ │ │ │ ├── tile13.txt │ │ │ │ ├── tile14.txt │ │ │ │ ├── tile15.txt │ │ │ │ ├── tile16.txt │ │ │ │ ├── tile17.txt │ │ │ │ ├── tile18.txt │ │ │ │ ├── tile19.txt │ │ │ │ ├── tile2.txt │ │ │ │ ├── tile20.txt │ │ │ │ ├── tile21.txt │ │ │ │ ├── tile22.txt │ │ │ │ ├── tile23.txt │ │ │ │ ├── tile24.txt │ │ │ │ ├── tile25.txt │ │ │ │ ├── tile3.txt │ │ │ │ ├── tile4.txt │ │ │ │ ├── tile5.txt │ │ │ │ ├── tile6.txt │ │ │ │ ├── tile7.txt │ │ │ │ ├── tile8.txt │ │ │ │ └── tile9.txt │ │ │ └── ASCII/ │ │ │ └── char_tiles.h │ │ ├── numbers/ │ │ │ ├── Makefile.numbers │ │ │ ├── config/ │ │ │ │ └── project_config.mk │ │ │ ├── main.c │ │ │ └── tiles/ │ │ │ ├── 6x8/ │ │ │ │ ├── tile0.txt │ │ │ │ ├── tile1.txt │ │ │ │ ├── tile10.txt │ │ │ │ ├── tile11.txt │ │ │ │ ├── tile12.txt │ │ │ │ ├── tile13.txt │ │ │ │ ├── tile14.txt │ │ │ │ ├── tile15.txt │ │ │ │ ├── tile16.txt │ │ │ │ ├── tile17.txt │ │ │ │ ├── tile18.txt │ │ │ │ ├── tile19.txt │ │ │ │ ├── tile2.txt │ │ │ │ ├── tile20.txt │ │ │ │ ├── tile21.txt │ │ │ │ ├── tile22.txt │ │ │ │ ├── tile23.txt │ │ │ │ ├── tile24.txt │ │ │ │ ├── tile25.txt │ │ │ │ ├── tile25_ORIG.txt │ │ │ │ ├── tile3.txt │ │ │ │ ├── tile4.txt │ │ │ │ ├── tile5.txt │ │ │ │ ├── tile6.txt │ │ │ │ ├── tile7.txt │ │ │ │ ├── tile8.txt │ │ │ │ └── tile9.txt │ │ │ ├── 6x9/ │ │ │ │ ├── tile0.txt │ │ │ │ ├── tile1.txt │ │ │ │ ├── tile10.txt │ │ │ │ ├── tile11.txt │ │ │ │ ├── tile12.txt │ │ │ │ ├── tile13.txt │ │ │ │ ├── tile14.txt │ │ │ │ ├── tile15.txt │ │ │ │ ├── tile16.txt │ │ │ │ ├── tile17.txt │ │ │ │ ├── tile18.txt │ │ │ │ ├── tile19.txt │ │ │ │ ├── tile2.txt │ │ │ │ ├── tile20.txt │ │ │ │ ├── tile21.txt │ │ │ │ ├── tile22.txt │ │ │ │ ├── tile23.txt │ │ │ │ ├── tile24.txt │ │ │ │ ├── tile25 _ORIG.txt │ │ │ │ ├── tile25.txt │ │ │ │ ├── tile3.txt │ │ │ │ ├── tile4.txt │ │ │ │ ├── tile5.txt │ │ │ │ ├── tile6.txt │ │ │ │ ├── tile7.txt │ │ │ │ ├── tile8.txt │ │ │ │ └── tile9.txt │ │ │ ├── 7x8/ │ │ │ │ ├── tile0.txt │ │ │ │ ├── tile1.txt │ │ │ │ ├── tile10.txt │ │ │ │ ├── tile11.txt │ │ │ │ ├── tile12.txt │ │ │ │ ├── tile13.txt │ │ │ │ ├── tile14.txt │ │ │ │ ├── tile15.txt │ │ │ │ ├── tile16.txt │ │ │ │ ├── tile17.txt │ │ │ │ ├── tile18.txt │ │ │ │ ├── tile19.txt │ │ │ │ ├── tile2.txt │ │ │ │ ├── tile20.txt │ │ │ │ ├── tile21.txt │ │ │ │ ├── tile22.txt │ │ │ │ ├── tile23.txt │ │ │ │ ├── tile24.txt │ │ │ │ ├── tile25.txt │ │ │ │ ├── tile25_ORIG.txt │ │ │ │ ├── tile3.txt │ │ │ │ ├── tile4.txt │ │ │ │ ├── tile5.txt │ │ │ │ ├── tile6.txt │ │ │ │ ├── tile7.txt │ │ │ │ ├── tile8.txt │ │ │ │ └── tile9.txt │ │ │ ├── 8x8/ │ │ │ │ ├── tile0.txt │ │ │ │ ├── tile1.txt │ │ │ │ ├── tile10.txt │ │ │ │ ├── tile11.txt │ │ │ │ ├── tile12.txt │ │ │ │ ├── tile13.txt │ │ │ │ ├── tile14.txt │ │ │ │ ├── tile15.txt │ │ │ │ ├── tile16.txt │ │ │ │ ├── tile17.txt │ │ │ │ ├── tile18.txt │ │ │ │ ├── tile19.txt │ │ │ │ ├── tile2.txt │ │ │ │ ├── tile20.txt │ │ │ │ ├── tile21.txt │ │ │ │ ├── tile22.txt │ │ │ │ ├── tile23.txt │ │ │ │ ├── tile24.txt │ │ │ │ ├── tile25.txt │ │ │ │ ├── tile3.txt │ │ │ │ ├── tile4.txt │ │ │ │ ├── tile5.txt │ │ │ │ ├── tile6.txt │ │ │ │ ├── tile7.txt │ │ │ │ ├── tile8.txt │ │ │ │ └── tile9.txt │ │ │ └── ASCII/ │ │ │ └── char_tiles.h │ │ ├── palette/ │ │ │ ├── Makefile.palette │ │ │ ├── config/ │ │ │ │ └── project_config.mk │ │ │ ├── main.c │ │ │ ├── shapes/ │ │ │ │ ├── 6x8/ │ │ │ │ │ ├── shape0.txt │ │ │ │ │ ├── shape1.txt │ │ │ │ │ ├── shape10.txt │ │ │ │ │ ├── shape11.txt │ │ │ │ │ ├── shape12.txt │ │ │ │ │ ├── shape13.txt │ │ │ │ │ ├── shape14.txt │ │ │ │ │ ├── shape15.txt │ │ │ │ │ ├── shape16.txt │ │ │ │ │ ├── shape17.txt │ │ │ │ │ ├── shape18.txt │ │ │ │ │ ├── shape19.txt │ │ │ │ │ ├── shape2.txt │ │ │ │ │ ├── shape20.txt │ │ │ │ │ ├── shape21.txt │ │ │ │ │ ├── shape22.txt │ │ │ │ │ ├── shape23.txt │ │ │ │ │ ├── shape24.txt │ │ │ │ │ ├── shape25.txt │ │ │ │ │ ├── shape26.txt │ │ │ │ │ ├── shape3.txt │ │ │ │ │ ├── shape4.txt │ │ │ │ │ ├── shape5.txt │ │ │ │ │ ├── shape6.txt │ │ │ │ │ ├── shape7.txt │ │ │ │ │ ├── shape8.txt │ │ │ │ │ └── shape9.txt │ │ │ │ ├── 6x9/ │ │ │ │ │ ├── shape0.txt │ │ │ │ │ ├── shape1.txt │ │ │ │ │ ├── shape10.txt │ │ │ │ │ ├── shape11.txt │ │ │ │ │ ├── shape12.txt │ │ │ │ │ ├── shape13.txt │ │ │ │ │ ├── shape14.txt │ │ │ │ │ ├── shape15.txt │ │ │ │ │ ├── shape16.txt │ │ │ │ │ ├── shape17.txt │ │ │ │ │ ├── shape18.txt │ │ │ │ │ ├── shape19.txt │ │ │ │ │ ├── shape2.txt │ │ │ │ │ ├── shape20.txt │ │ │ │ │ ├── shape21.txt │ │ │ │ │ ├── shape22.txt │ │ │ │ │ ├── shape23.txt │ │ │ │ │ ├── shape24.txt │ │ │ │ │ ├── shape25.txt │ │ │ │ │ ├── shape26.txt │ │ │ │ │ ├── shape3.txt │ │ │ │ │ ├── shape4.txt │ │ │ │ │ ├── shape5.txt │ │ │ │ │ ├── shape6.txt │ │ │ │ │ ├── shape7.txt │ │ │ │ │ ├── shape8.txt │ │ │ │ │ └── shape9.txt │ │ │ │ ├── 7x8/ │ │ │ │ │ ├── shape0.txt │ │ │ │ │ ├── shape1.txt │ │ │ │ │ ├── shape10.txt │ │ │ │ │ ├── shape11.txt │ │ │ │ │ ├── shape12.txt │ │ │ │ │ ├── shape13.txt │ │ │ │ │ ├── shape14.txt │ │ │ │ │ ├── shape15.txt │ │ │ │ │ ├── shape16.txt │ │ │ │ │ ├── shape17.txt │ │ │ │ │ ├── shape18.txt │ │ │ │ │ ├── shape19.txt │ │ │ │ │ ├── shape2.txt │ │ │ │ │ ├── shape20.txt │ │ │ │ │ ├── shape21.txt │ │ │ │ │ ├── shape22.txt │ │ │ │ │ ├── shape23.txt │ │ │ │ │ ├── shape24.txt │ │ │ │ │ ├── shape25.txt │ │ │ │ │ ├── shape26.txt │ │ │ │ │ ├── shape3.txt │ │ │ │ │ ├── shape4.txt │ │ │ │ │ ├── shape5.txt │ │ │ │ │ ├── shape6.txt │ │ │ │ │ ├── shape7.txt │ │ │ │ │ ├── shape8.txt │ │ │ │ │ └── shape9.txt │ │ │ │ ├── 8x6/ │ │ │ │ │ ├── shape0.txt │ │ │ │ │ ├── shape1.txt │ │ │ │ │ ├── shape10.txt │ │ │ │ │ ├── shape11.txt │ │ │ │ │ ├── shape12.txt │ │ │ │ │ ├── shape13.txt │ │ │ │ │ ├── shape14.txt │ │ │ │ │ ├── shape15.txt │ │ │ │ │ ├── shape16.txt │ │ │ │ │ ├── shape17.txt │ │ │ │ │ ├── shape18.txt │ │ │ │ │ ├── shape19.txt │ │ │ │ │ ├── shape2.txt │ │ │ │ │ ├── shape20.txt │ │ │ │ │ ├── shape21.txt │ │ │ │ │ ├── shape22.txt │ │ │ │ │ ├── shape23.txt │ │ │ │ │ ├── shape24.txt │ │ │ │ │ ├── shape25.txt │ │ │ │ │ ├── shape26.txt │ │ │ │ │ ├── shape3.txt │ │ │ │ │ ├── shape4.txt │ │ │ │ │ ├── shape5.txt │ │ │ │ │ ├── shape6.txt │ │ │ │ │ ├── shape7.txt │ │ │ │ │ ├── shape8.txt │ │ │ │ │ └── shape9.txt │ │ │ │ └── 8x8/ │ │ │ │ ├── shape0.txt │ │ │ │ ├── shape1.txt │ │ │ │ ├── shape10.txt │ │ │ │ ├── shape11.txt │ │ │ │ ├── shape12.txt │ │ │ │ ├── shape13.txt │ │ │ │ ├── shape14.txt │ │ │ │ ├── shape15.txt │ │ │ │ ├── shape16.txt │ │ │ │ ├── shape17.txt │ │ │ │ ├── shape18.txt │ │ │ │ ├── shape19.txt │ │ │ │ ├── shape2.txt │ │ │ │ ├── shape20.txt │ │ │ │ ├── shape21.txt │ │ │ │ ├── shape22.txt │ │ │ │ ├── shape23.txt │ │ │ │ ├── shape24.txt │ │ │ │ ├── shape25.txt │ │ │ │ ├── shape26.txt │ │ │ │ ├── shape3.txt │ │ │ │ ├── shape4.txt │ │ │ │ ├── shape5.txt │ │ │ │ ├── shape6.txt │ │ │ │ ├── shape7.txt │ │ │ │ ├── shape8.txt │ │ │ │ └── shape9.txt │ │ │ └── tiles/ │ │ │ ├── 6x8/ │ │ │ │ ├── tile0.txt │ │ │ │ ├── tile1.txt │ │ │ │ ├── tile10.txt │ │ │ │ ├── tile11.txt │ │ │ │ ├── tile12.txt │ │ │ │ ├── tile13.txt │ │ │ │ ├── tile14.txt │ │ │ │ ├── tile15.txt │ │ │ │ ├── tile16.txt │ │ │ │ ├── tile17.txt │ │ │ │ ├── tile18.txt │ │ │ │ ├── tile19.txt │ │ │ │ ├── tile2.txt │ │ │ │ ├── tile20.txt │ │ │ │ ├── tile21.txt │ │ │ │ ├── tile22.txt │ │ │ │ ├── tile23.txt │ │ │ │ ├── tile24.txt │ │ │ │ ├── tile25.txt │ │ │ │ ├── tile25_ORIG.txt │ │ │ │ ├── tile26.txt │ │ │ │ ├── tile3.txt │ │ │ │ ├── tile4.txt │ │ │ │ ├── tile5.txt │ │ │ │ ├── tile6.txt │ │ │ │ ├── tile7.txt │ │ │ │ ├── tile8.txt │ │ │ │ └── tile9.txt │ │ │ ├── 6x9/ │ │ │ │ ├── tile0.txt │ │ │ │ ├── tile1.txt │ │ │ │ ├── tile10.txt │ │ │ │ ├── tile11.txt │ │ │ │ ├── tile12.txt │ │ │ │ ├── tile13.txt │ │ │ │ ├── tile14.txt │ │ │ │ ├── tile15.txt │ │ │ │ ├── tile16.txt │ │ │ │ ├── tile17.txt │ │ │ │ ├── tile18.txt │ │ │ │ ├── tile19.txt │ │ │ │ ├── tile2.txt │ │ │ │ ├── tile20.txt │ │ │ │ ├── tile21.txt │ │ │ │ ├── tile22.txt │ │ │ │ ├── tile23.txt │ │ │ │ ├── tile24.txt │ │ │ │ ├── tile25 _ORIG.txt │ │ │ │ ├── tile25.txt │ │ │ │ ├── tile26.txt │ │ │ │ ├── tile3.txt │ │ │ │ ├── tile4.txt │ │ │ │ ├── tile5.txt │ │ │ │ ├── tile6.txt │ │ │ │ ├── tile7.txt │ │ │ │ ├── tile8.txt │ │ │ │ └── tile9.txt │ │ │ ├── 7x8/ │ │ │ │ ├── tile0.txt │ │ │ │ ├── tile1.txt │ │ │ │ ├── tile10.txt │ │ │ │ ├── tile11.txt │ │ │ │ ├── tile12.txt │ │ │ │ ├── tile13.txt │ │ │ │ ├── tile14.txt │ │ │ │ ├── tile15.txt │ │ │ │ ├── tile16.txt │ │ │ │ ├── tile17.txt │ │ │ │ ├── tile18.txt │ │ │ │ ├── tile19.txt │ │ │ │ ├── tile2.txt │ │ │ │ ├── tile20.txt │ │ │ │ ├── tile21.txt │ │ │ │ ├── tile22.txt │ │ │ │ ├── tile23.txt │ │ │ │ ├── tile24.txt │ │ │ │ ├── tile25.txt │ │ │ │ ├── tile25_ORIG.txt │ │ │ │ ├── tile26.txt │ │ │ │ ├── tile3.txt │ │ │ │ ├── tile4.txt │ │ │ │ ├── tile5.txt │ │ │ │ ├── tile6.txt │ │ │ │ ├── tile7.txt │ │ │ │ ├── tile8.txt │ │ │ │ └── tile9.txt │ │ │ ├── 8x6/ │ │ │ │ ├── tile0.txt │ │ │ │ ├── tile1.txt │ │ │ │ ├── tile10.txt │ │ │ │ ├── tile11.txt │ │ │ │ ├── tile12.txt │ │ │ │ ├── tile13.txt │ │ │ │ ├── tile14.txt │ │ │ │ ├── tile15.txt │ │ │ │ ├── tile16.txt │ │ │ │ ├── tile17.txt │ │ │ │ ├── tile18.txt │ │ │ │ ├── tile19.txt │ │ │ │ ├── tile2.txt │ │ │ │ ├── tile20.txt │ │ │ │ ├── tile21.txt │ │ │ │ ├── tile22.txt │ │ │ │ ├── tile23.txt │ │ │ │ ├── tile24.txt │ │ │ │ ├── tile25.txt │ │ │ │ ├── tile26.txt │ │ │ │ ├── tile3.txt │ │ │ │ ├── tile4.txt │ │ │ │ ├── tile5.txt │ │ │ │ ├── tile6.txt │ │ │ │ ├── tile7.txt │ │ │ │ ├── tile8.txt │ │ │ │ └── tile9.txt │ │ │ ├── 8x8/ │ │ │ │ ├── tile0.txt │ │ │ │ ├── tile1.txt │ │ │ │ ├── tile10.txt │ │ │ │ ├── tile11.txt │ │ │ │ ├── tile12.txt │ │ │ │ ├── tile13.txt │ │ │ │ ├── tile14.txt │ │ │ │ ├── tile15.txt │ │ │ │ ├── tile16.txt │ │ │ │ ├── tile17.txt │ │ │ │ ├── tile18.txt │ │ │ │ ├── tile19.txt │ │ │ │ ├── tile2.txt │ │ │ │ ├── tile20.txt │ │ │ │ ├── tile21.txt │ │ │ │ ├── tile22.txt │ │ │ │ ├── tile23.txt │ │ │ │ ├── tile24.txt │ │ │ │ ├── tile25.txt │ │ │ │ ├── tile26.txt │ │ │ │ ├── tile3.txt │ │ │ │ ├── tile4.txt │ │ │ │ ├── tile5.txt │ │ │ │ ├── tile6.txt │ │ │ │ ├── tile7.txt │ │ │ │ ├── tile8.txt │ │ │ │ └── tile9.txt │ │ │ └── ASCII/ │ │ │ └── char_tiles.h │ │ ├── random/ │ │ │ ├── Makefile.random │ │ │ ├── config/ │ │ │ │ └── project_config.mk │ │ │ ├── main.c │ │ │ └── tiles/ │ │ │ ├── 6x8/ │ │ │ │ ├── tile0.txt │ │ │ │ ├── tile1.txt │ │ │ │ ├── tile10.txt │ │ │ │ ├── tile11.txt │ │ │ │ ├── tile12.txt │ │ │ │ ├── tile13.txt │ │ │ │ ├── tile14.txt │ │ │ │ ├── tile15.txt │ │ │ │ ├── tile16.txt │ │ │ │ ├── tile17.txt │ │ │ │ ├── tile18.txt │ │ │ │ ├── tile19.txt │ │ │ │ ├── tile2.txt │ │ │ │ ├── tile20.txt │ │ │ │ ├── tile21.txt │ │ │ │ ├── tile22.txt │ │ │ │ ├── tile23.txt │ │ │ │ ├── tile24.txt │ │ │ │ ├── tile25.txt │ │ │ │ ├── tile25_ORIG.txt │ │ │ │ ├── tile3.txt │ │ │ │ ├── tile4.txt │ │ │ │ ├── tile5.txt │ │ │ │ ├── tile6.txt │ │ │ │ ├── tile7.txt │ │ │ │ ├── tile8.txt │ │ │ │ └── tile9.txt │ │ │ ├── 6x9/ │ │ │ │ ├── tile0.txt │ │ │ │ ├── tile1.txt │ │ │ │ ├── tile10.txt │ │ │ │ ├── tile11.txt │ │ │ │ ├── tile12.txt │ │ │ │ ├── tile13.txt │ │ │ │ ├── tile14.txt │ │ │ │ ├── tile15.txt │ │ │ │ ├── tile16.txt │ │ │ │ ├── tile17.txt │ │ │ │ ├── tile18.txt │ │ │ │ ├── tile19.txt │ │ │ │ ├── tile2.txt │ │ │ │ ├── tile20.txt │ │ │ │ ├── tile21.txt │ │ │ │ ├── tile22.txt │ │ │ │ ├── tile23.txt │ │ │ │ ├── tile24.txt │ │ │ │ ├── tile25 _ORIG.txt │ │ │ │ ├── tile25.txt │ │ │ │ ├── tile3.txt │ │ │ │ ├── tile4.txt │ │ │ │ ├── tile5.txt │ │ │ │ ├── tile6.txt │ │ │ │ ├── tile7.txt │ │ │ │ ├── tile8.txt │ │ │ │ └── tile9.txt │ │ │ ├── 7x8/ │ │ │ │ ├── tile0.txt │ │ │ │ ├── tile1.txt │ │ │ │ ├── tile10.txt │ │ │ │ ├── tile11.txt │ │ │ │ ├── tile12.txt │ │ │ │ ├── tile13.txt │ │ │ │ ├── tile14.txt │ │ │ │ ├── tile15.txt │ │ │ │ ├── tile16.txt │ │ │ │ ├── tile17.txt │ │ │ │ ├── tile18.txt │ │ │ │ ├── tile19.txt │ │ │ │ ├── tile2.txt │ │ │ │ ├── tile20.txt │ │ │ │ ├── tile21.txt │ │ │ │ ├── tile22.txt │ │ │ │ ├── tile23.txt │ │ │ │ ├── tile24.txt │ │ │ │ ├── tile25.txt │ │ │ │ ├── tile25_ORIG.txt │ │ │ │ ├── tile3.txt │ │ │ │ ├── tile4.txt │ │ │ │ ├── tile5.txt │ │ │ │ ├── tile6.txt │ │ │ │ ├── tile7.txt │ │ │ │ ├── tile8.txt │ │ │ │ └── tile9.txt │ │ │ ├── 8x8/ │ │ │ │ ├── tile0.txt │ │ │ │ ├── tile1.txt │ │ │ │ ├── tile10.txt │ │ │ │ ├── tile11.txt │ │ │ │ ├── tile12.txt │ │ │ │ ├── tile13.txt │ │ │ │ ├── tile14.txt │ │ │ │ ├── tile15.txt │ │ │ │ ├── tile16.txt │ │ │ │ ├── tile17.txt │ │ │ │ ├── tile18.txt │ │ │ │ ├── tile19.txt │ │ │ │ ├── tile2.txt │ │ │ │ ├── tile20.txt │ │ │ │ ├── tile21.txt │ │ │ │ ├── tile22.txt │ │ │ │ ├── tile23.txt │ │ │ │ ├── tile24.txt │ │ │ │ ├── tile25.txt │ │ │ │ ├── tile3.txt │ │ │ │ ├── tile4.txt │ │ │ │ ├── tile5.txt │ │ │ │ ├── tile6.txt │ │ │ │ ├── tile7.txt │ │ │ │ ├── tile8.txt │ │ │ │ └── tile9.txt │ │ │ └── ASCII/ │ │ │ └── char_tiles.h │ │ ├── sleep/ │ │ │ ├── Makefile.sleep │ │ │ ├── config/ │ │ │ │ └── project_config.mk │ │ │ ├── main.c │ │ │ └── tiles/ │ │ │ ├── 6x8/ │ │ │ │ ├── tile0.txt │ │ │ │ ├── tile1.txt │ │ │ │ ├── tile10.txt │ │ │ │ ├── tile11.txt │ │ │ │ ├── tile12.txt │ │ │ │ ├── tile13.txt │ │ │ │ ├── tile14.txt │ │ │ │ ├── tile15.txt │ │ │ │ ├── tile16.txt │ │ │ │ ├── tile17.txt │ │ │ │ ├── tile18.txt │ │ │ │ ├── tile19.txt │ │ │ │ ├── tile2.txt │ │ │ │ ├── tile20.txt │ │ │ │ ├── tile21.txt │ │ │ │ ├── tile22.txt │ │ │ │ ├── tile23.txt │ │ │ │ ├── tile24.txt │ │ │ │ ├── tile25.txt │ │ │ │ ├── tile25_ORIG.txt │ │ │ │ ├── tile3.txt │ │ │ │ ├── tile4.txt │ │ │ │ ├── tile5.txt │ │ │ │ ├── tile6.txt │ │ │ │ ├── tile7.txt │ │ │ │ ├── tile8.txt │ │ │ │ └── tile9.txt │ │ │ ├── 6x9/ │ │ │ │ ├── tile0.txt │ │ │ │ ├── tile1.txt │ │ │ │ ├── tile10.txt │ │ │ │ ├── tile11.txt │ │ │ │ ├── tile12.txt │ │ │ │ ├── tile13.txt │ │ │ │ ├── tile14.txt │ │ │ │ ├── tile15.txt │ │ │ │ ├── tile16.txt │ │ │ │ ├── tile17.txt │ │ │ │ ├── tile18.txt │ │ │ │ ├── tile19.txt │ │ │ │ ├── tile2.txt │ │ │ │ ├── tile20.txt │ │ │ │ ├── tile21.txt │ │ │ │ ├── tile22.txt │ │ │ │ ├── tile23.txt │ │ │ │ ├── tile24.txt │ │ │ │ ├── tile25 _ORIG.txt │ │ │ │ ├── tile25.txt │ │ │ │ ├── tile3.txt │ │ │ │ ├── tile4.txt │ │ │ │ ├── tile5.txt │ │ │ │ ├── tile6.txt │ │ │ │ ├── tile7.txt │ │ │ │ ├── tile8.txt │ │ │ │ └── tile9.txt │ │ │ ├── 7x8/ │ │ │ │ ├── tile0.txt │ │ │ │ ├── tile1.txt │ │ │ │ ├── tile10.txt │ │ │ │ ├── tile11.txt │ │ │ │ ├── tile12.txt │ │ │ │ ├── tile13.txt │ │ │ │ ├── tile14.txt │ │ │ │ ├── tile15.txt │ │ │ │ ├── tile16.txt │ │ │ │ ├── tile17.txt │ │ │ │ ├── tile18.txt │ │ │ │ ├── tile19.txt │ │ │ │ ├── tile2.txt │ │ │ │ ├── tile20.txt │ │ │ │ ├── tile21.txt │ │ │ │ ├── tile22.txt │ │ │ │ ├── tile23.txt │ │ │ │ ├── tile24.txt │ │ │ │ ├── tile25.txt │ │ │ │ ├── tile25_ORIG.txt │ │ │ │ ├── tile3.txt │ │ │ │ ├── tile4.txt │ │ │ │ ├── tile5.txt │ │ │ │ ├── tile6.txt │ │ │ │ ├── tile7.txt │ │ │ │ ├── tile8.txt │ │ │ │ └── tile9.txt │ │ │ ├── 8x8/ │ │ │ │ ├── tile0.txt │ │ │ │ ├── tile1.txt │ │ │ │ ├── tile10.txt │ │ │ │ ├── tile11.txt │ │ │ │ ├── tile12.txt │ │ │ │ ├── tile13.txt │ │ │ │ ├── tile14.txt │ │ │ │ ├── tile15.txt │ │ │ │ ├── tile16.txt │ │ │ │ ├── tile17.txt │ │ │ │ ├── tile18.txt │ │ │ │ ├── tile19.txt │ │ │ │ ├── tile2.txt │ │ │ │ ├── tile20.txt │ │ │ │ ├── tile21.txt │ │ │ │ ├── tile22.txt │ │ │ │ ├── tile23.txt │ │ │ │ ├── tile24.txt │ │ │ │ ├── tile25.txt │ │ │ │ ├── tile3.txt │ │ │ │ ├── tile4.txt │ │ │ │ ├── tile5.txt │ │ │ │ ├── tile6.txt │ │ │ │ ├── tile7.txt │ │ │ │ ├── tile8.txt │ │ │ │ └── tile9.txt │ │ │ └── ASCII/ │ │ │ └── char_tiles.h │ │ ├── sounds/ │ │ │ ├── Makefile.sounds │ │ │ ├── config/ │ │ │ │ └── project_config.mk │ │ │ ├── main.c │ │ │ └── tiles/ │ │ │ ├── 6x8/ │ │ │ │ ├── tile0.txt │ │ │ │ ├── tile1.txt │ │ │ │ ├── tile10.txt │ │ │ │ ├── tile11.txt │ │ │ │ ├── tile12.txt │ │ │ │ ├── tile13.txt │ │ │ │ ├── tile14.txt │ │ │ │ ├── tile15.txt │ │ │ │ ├── tile16.txt │ │ │ │ ├── tile17.txt │ │ │ │ ├── tile18.txt │ │ │ │ ├── tile19.txt │ │ │ │ ├── tile2.txt │ │ │ │ ├── tile20.txt │ │ │ │ ├── tile21.txt │ │ │ │ ├── tile22.txt │ │ │ │ ├── tile23.txt │ │ │ │ ├── tile24.txt │ │ │ │ ├── tile25.txt │ │ │ │ ├── tile25_ORIG.txt │ │ │ │ ├── tile3.txt │ │ │ │ ├── tile4.txt │ │ │ │ ├── tile5.txt │ │ │ │ ├── tile6.txt │ │ │ │ ├── tile7.txt │ │ │ │ ├── tile8.txt │ │ │ │ └── tile9.txt │ │ │ ├── 6x9/ │ │ │ │ ├── tile0.txt │ │ │ │ ├── tile1.txt │ │ │ │ ├── tile10.txt │ │ │ │ ├── tile11.txt │ │ │ │ ├── tile12.txt │ │ │ │ ├── tile13.txt │ │ │ │ ├── tile14.txt │ │ │ │ ├── tile15.txt │ │ │ │ ├── tile16.txt │ │ │ │ ├── tile17.txt │ │ │ │ ├── tile18.txt │ │ │ │ ├── tile19.txt │ │ │ │ ├── tile2.txt │ │ │ │ ├── tile20.txt │ │ │ │ ├── tile21.txt │ │ │ │ ├── tile22.txt │ │ │ │ ├── tile23.txt │ │ │ │ ├── tile24.txt │ │ │ │ ├── tile25 _ORIG.txt │ │ │ │ ├── tile25.txt │ │ │ │ ├── tile3.txt │ │ │ │ ├── tile4.txt │ │ │ │ ├── tile5.txt │ │ │ │ ├── tile6.txt │ │ │ │ ├── tile7.txt │ │ │ │ ├── tile8.txt │ │ │ │ └── tile9.txt │ │ │ ├── 7x8/ │ │ │ │ ├── tile0.txt │ │ │ │ ├── tile1.txt │ │ │ │ ├── tile10.txt │ │ │ │ ├── tile11.txt │ │ │ │ ├── tile12.txt │ │ │ │ ├── tile13.txt │ │ │ │ ├── tile14.txt │ │ │ │ ├── tile15.txt │ │ │ │ ├── tile16.txt │ │ │ │ ├── tile17.txt │ │ │ │ ├── tile18.txt │ │ │ │ ├── tile19.txt │ │ │ │ ├── tile2.txt │ │ │ │ ├── tile20.txt │ │ │ │ ├── tile21.txt │ │ │ │ ├── tile22.txt │ │ │ │ ├── tile23.txt │ │ │ │ ├── tile24.txt │ │ │ │ ├── tile25.txt │ │ │ │ ├── tile25_ORIG.txt │ │ │ │ ├── tile3.txt │ │ │ │ ├── tile4.txt │ │ │ │ ├── tile5.txt │ │ │ │ ├── tile6.txt │ │ │ │ ├── tile7.txt │ │ │ │ ├── tile8.txt │ │ │ │ └── tile9.txt │ │ │ ├── 8x8/ │ │ │ │ ├── tile0.txt │ │ │ │ ├── tile1.txt │ │ │ │ ├── tile10.txt │ │ │ │ ├── tile11.txt │ │ │ │ ├── tile12.txt │ │ │ │ ├── tile13.txt │ │ │ │ ├── tile14.txt │ │ │ │ ├── tile15.txt │ │ │ │ ├── tile16.txt │ │ │ │ ├── tile17.txt │ │ │ │ ├── tile18.txt │ │ │ │ ├── tile19.txt │ │ │ │ ├── tile2.txt │ │ │ │ ├── tile20.txt │ │ │ │ ├── tile21.txt │ │ │ │ ├── tile22.txt │ │ │ │ ├── tile23.txt │ │ │ │ ├── tile24.txt │ │ │ │ ├── tile25.txt │ │ │ │ ├── tile3.txt │ │ │ │ ├── tile4.txt │ │ │ │ ├── tile5.txt │ │ │ │ ├── tile6.txt │ │ │ │ ├── tile7.txt │ │ │ │ ├── tile8.txt │ │ │ │ └── tile9.txt │ │ │ └── ASCII/ │ │ │ └── char_tiles.h │ │ ├── target/ │ │ │ ├── Makefile.target │ │ │ ├── config/ │ │ │ │ └── project_config.mk │ │ │ ├── main.c │ │ │ └── tiles/ │ │ │ ├── 6x8/ │ │ │ │ ├── tile0.txt │ │ │ │ ├── tile1.txt │ │ │ │ ├── tile10.txt │ │ │ │ ├── tile11.txt │ │ │ │ ├── tile12.txt │ │ │ │ ├── tile13.txt │ │ │ │ ├── tile14.txt │ │ │ │ ├── tile15.txt │ │ │ │ ├── tile16.txt │ │ │ │ ├── tile17.txt │ │ │ │ ├── tile18.txt │ │ │ │ ├── tile19.txt │ │ │ │ ├── tile2.txt │ │ │ │ ├── tile20.txt │ │ │ │ ├── tile21.txt │ │ │ │ ├── tile22.txt │ │ │ │ ├── tile23.txt │ │ │ │ ├── tile24.txt │ │ │ │ ├── tile25.txt │ │ │ │ ├── tile25_ORIG.txt │ │ │ │ ├── tile3.txt │ │ │ │ ├── tile4.txt │ │ │ │ ├── tile5.txt │ │ │ │ ├── tile6.txt │ │ │ │ ├── tile7.txt │ │ │ │ ├── tile8.txt │ │ │ │ └── tile9.txt │ │ │ ├── 6x9/ │ │ │ │ ├── tile0.txt │ │ │ │ ├── tile1.txt │ │ │ │ ├── tile10.txt │ │ │ │ ├── tile11.txt │ │ │ │ ├── tile12.txt │ │ │ │ ├── tile13.txt │ │ │ │ ├── tile14.txt │ │ │ │ ├── tile15.txt │ │ │ │ ├── tile16.txt │ │ │ │ ├── tile17.txt │ │ │ │ ├── tile18.txt │ │ │ │ ├── tile19.txt │ │ │ │ ├── tile2.txt │ │ │ │ ├── tile20.txt │ │ │ │ ├── tile21.txt │ │ │ │ ├── tile22.txt │ │ │ │ ├── tile23.txt │ │ │ │ ├── tile24.txt │ │ │ │ ├── tile25 _ORIG.txt │ │ │ │ ├── tile25.txt │ │ │ │ ├── tile3.txt │ │ │ │ ├── tile4.txt │ │ │ │ ├── tile5.txt │ │ │ │ ├── tile6.txt │ │ │ │ ├── tile7.txt │ │ │ │ ├── tile8.txt │ │ │ │ └── tile9.txt │ │ │ ├── 7x8/ │ │ │ │ ├── tile0.txt │ │ │ │ ├── tile1.txt │ │ │ │ ├── tile10.txt │ │ │ │ ├── tile11.txt │ │ │ │ ├── tile12.txt │ │ │ │ ├── tile13.txt │ │ │ │ ├── tile14.txt │ │ │ │ ├── tile15.txt │ │ │ │ ├── tile16.txt │ │ │ │ ├── tile17.txt │ │ │ │ ├── tile18.txt │ │ │ │ ├── tile19.txt │ │ │ │ ├── tile2.txt │ │ │ │ ├── tile20.txt │ │ │ │ ├── tile21.txt │ │ │ │ ├── tile22.txt │ │ │ │ ├── tile23.txt │ │ │ │ ├── tile24.txt │ │ │ │ ├── tile25.txt │ │ │ │ ├── tile25_ORIG.txt │ │ │ │ ├── tile3.txt │ │ │ │ ├── tile4.txt │ │ │ │ ├── tile5.txt │ │ │ │ ├── tile6.txt │ │ │ │ ├── tile7.txt │ │ │ │ ├── tile8.txt │ │ │ │ └── tile9.txt │ │ │ ├── 8x8/ │ │ │ │ ├── tile0.txt │ │ │ │ ├── tile1.txt │ │ │ │ ├── tile10.txt │ │ │ │ ├── tile11.txt │ │ │ │ ├── tile12.txt │ │ │ │ ├── tile13.txt │ │ │ │ ├── tile14.txt │ │ │ │ ├── tile15.txt │ │ │ │ ├── tile16.txt │ │ │ │ ├── tile17.txt │ │ │ │ ├── tile18.txt │ │ │ │ ├── tile19.txt │ │ │ │ ├── tile2.txt │ │ │ │ ├── tile20.txt │ │ │ │ ├── tile21.txt │ │ │ │ ├── tile22.txt │ │ │ │ ├── tile23.txt │ │ │ │ ├── tile24.txt │ │ │ │ ├── tile25.txt │ │ │ │ ├── tile3.txt │ │ │ │ ├── tile4.txt │ │ │ │ ├── tile5.txt │ │ │ │ ├── tile6.txt │ │ │ │ ├── tile7.txt │ │ │ │ ├── tile8.txt │ │ │ │ └── tile9.txt │ │ │ └── ASCII/ │ │ │ └── char_tiles.h │ │ ├── text/ │ │ │ ├── Makefile.text │ │ │ ├── config/ │ │ │ │ └── project_config.mk │ │ │ ├── main.c │ │ │ └── tiles/ │ │ │ ├── 6x8/ │ │ │ │ ├── tile0.txt │ │ │ │ ├── tile1.txt │ │ │ │ ├── tile10.txt │ │ │ │ ├── tile11.txt │ │ │ │ ├── tile12.txt │ │ │ │ ├── tile13.txt │ │ │ │ ├── tile14.txt │ │ │ │ ├── tile15.txt │ │ │ │ ├── tile16.txt │ │ │ │ ├── tile17.txt │ │ │ │ ├── tile18.txt │ │ │ │ ├── tile19.txt │ │ │ │ ├── tile2.txt │ │ │ │ ├── tile20.txt │ │ │ │ ├── tile21.txt │ │ │ │ ├── tile22.txt │ │ │ │ ├── tile23.txt │ │ │ │ ├── tile24.txt │ │ │ │ ├── tile25.txt │ │ │ │ ├── tile25_ORIG.txt │ │ │ │ ├── tile26.txt │ │ │ │ ├── tile3.txt │ │ │ │ ├── tile4.txt │ │ │ │ ├── tile5.txt │ │ │ │ ├── tile6.txt │ │ │ │ ├── tile7.txt │ │ │ │ ├── tile8.txt │ │ │ │ └── tile9.txt │ │ │ ├── 6x9/ │ │ │ │ ├── tile0.txt │ │ │ │ ├── tile1.txt │ │ │ │ ├── tile10.txt │ │ │ │ ├── tile11.txt │ │ │ │ ├── tile12.txt │ │ │ │ ├── tile13.txt │ │ │ │ ├── tile14.txt │ │ │ │ ├── tile15.txt │ │ │ │ ├── tile16.txt │ │ │ │ ├── tile17.txt │ │ │ │ ├── tile18.txt │ │ │ │ ├── tile19.txt │ │ │ │ ├── tile2.txt │ │ │ │ ├── tile20.txt │ │ │ │ ├── tile21.txt │ │ │ │ ├── tile22.txt │ │ │ │ ├── tile23.txt │ │ │ │ ├── tile24.txt │ │ │ │ ├── tile25 _ORIG.txt │ │ │ │ ├── tile25.txt │ │ │ │ ├── tile26.txt │ │ │ │ ├── tile3.txt │ │ │ │ ├── tile4.txt │ │ │ │ ├── tile5.txt │ │ │ │ ├── tile6.txt │ │ │ │ ├── tile7.txt │ │ │ │ ├── tile8.txt │ │ │ │ └── tile9.txt │ │ │ ├── 7x8/ │ │ │ │ ├── tile0.txt │ │ │ │ ├── tile1.txt │ │ │ │ ├── tile10.txt │ │ │ │ ├── tile11.txt │ │ │ │ ├── tile12.txt │ │ │ │ ├── tile13.txt │ │ │ │ ├── tile14.txt │ │ │ │ ├── tile15.txt │ │ │ │ ├── tile16.txt │ │ │ │ ├── tile17.txt │ │ │ │ ├── tile18.txt │ │ │ │ ├── tile19.txt │ │ │ │ ├── tile2.txt │ │ │ │ ├── tile20.txt │ │ │ │ ├── tile21.txt │ │ │ │ ├── tile22.txt │ │ │ │ ├── tile23.txt │ │ │ │ ├── tile24.txt │ │ │ │ ├── tile25.txt │ │ │ │ ├── tile25_ORIG.txt │ │ │ │ ├── tile26.txt │ │ │ │ ├── tile3.txt │ │ │ │ ├── tile4.txt │ │ │ │ ├── tile5.txt │ │ │ │ ├── tile6.txt │ │ │ │ ├── tile7.txt │ │ │ │ ├── tile8.txt │ │ │ │ └── tile9.txt │ │ │ ├── 8x6/ │ │ │ │ ├── tile0.txt │ │ │ │ ├── tile1.txt │ │ │ │ ├── tile10.txt │ │ │ │ ├── tile11.txt │ │ │ │ ├── tile12.txt │ │ │ │ ├── tile13.txt │ │ │ │ ├── tile14.txt │ │ │ │ ├── tile15.txt │ │ │ │ ├── tile16.txt │ │ │ │ ├── tile17.txt │ │ │ │ ├── tile18.txt │ │ │ │ ├── tile19.txt │ │ │ │ ├── tile2.txt │ │ │ │ ├── tile20.txt │ │ │ │ ├── tile21.txt │ │ │ │ ├── tile22.txt │ │ │ │ ├── tile23.txt │ │ │ │ ├── tile24.txt │ │ │ │ ├── tile25.txt │ │ │ │ ├── tile3.txt │ │ │ │ ├── tile4.txt │ │ │ │ ├── tile5.txt │ │ │ │ ├── tile6.txt │ │ │ │ ├── tile7.txt │ │ │ │ ├── tile8.txt │ │ │ │ └── tile9.txt │ │ │ ├── 8x8/ │ │ │ │ ├── tile0.txt │ │ │ │ ├── tile1.txt │ │ │ │ ├── tile10.txt │ │ │ │ ├── tile11.txt │ │ │ │ ├── tile12.txt │ │ │ │ ├── tile13.txt │ │ │ │ ├── tile14.txt │ │ │ │ ├── tile15.txt │ │ │ │ ├── tile16.txt │ │ │ │ ├── tile17.txt │ │ │ │ ├── tile18.txt │ │ │ │ ├── tile19.txt │ │ │ │ ├── tile2.txt │ │ │ │ ├── tile20.txt │ │ │ │ ├── tile21.txt │ │ │ │ ├── tile22.txt │ │ │ │ ├── tile23.txt │ │ │ │ ├── tile24.txt │ │ │ │ ├── tile25.txt │ │ │ │ ├── tile26.txt │ │ │ │ ├── tile3.txt │ │ │ │ ├── tile4.txt │ │ │ │ ├── tile5.txt │ │ │ │ ├── tile6.txt │ │ │ │ ├── tile7.txt │ │ │ │ ├── tile8.txt │ │ │ │ └── tile9.txt │ │ │ └── ASCII/ │ │ │ └── char_tiles.h │ │ └── zombies/ │ │ ├── Makefile.zombies │ │ ├── config/ │ │ │ └── project_config.mk │ │ ├── images.h │ │ ├── main.c │ │ └── tiles/ │ │ ├── 6x8/ │ │ │ ├── tile0.txt │ │ │ ├── tile1.txt │ │ │ ├── tile10.txt │ │ │ ├── tile11.txt │ │ │ ├── tile12.txt │ │ │ ├── tile13.txt │ │ │ ├── tile14.txt │ │ │ ├── tile15.txt │ │ │ ├── tile16.txt │ │ │ ├── tile17.txt │ │ │ ├── tile18.txt │ │ │ ├── tile19.txt │ │ │ ├── tile2.txt │ │ │ ├── tile20.txt │ │ │ ├── tile21.txt │ │ │ ├── tile22.txt │ │ │ ├── tile23.txt │ │ │ ├── tile24.txt │ │ │ ├── tile25.txt │ │ │ ├── tile3.txt │ │ │ ├── tile4.txt │ │ │ ├── tile5.txt │ │ │ ├── tile6.txt │ │ │ ├── tile7.txt │ │ │ ├── tile8.txt │ │ │ └── tile9.txt │ │ ├── 6x9/ │ │ │ ├── tile0.txt │ │ │ ├── tile1.txt │ │ │ ├── tile10.txt │ │ │ ├── tile11.txt │ │ │ ├── tile12.txt │ │ │ ├── tile13.txt │ │ │ ├── tile14.txt │ │ │ ├── tile15.txt │ │ │ ├── tile16.txt │ │ │ ├── tile17.txt │ │ │ ├── tile18.txt │ │ │ ├── tile19.txt │ │ │ ├── tile2.txt │ │ │ ├── tile20.txt │ │ │ ├── tile21.txt │ │ │ ├── tile22.txt │ │ │ ├── tile23.txt │ │ │ ├── tile24.txt │ │ │ ├── tile25.txt │ │ │ ├── tile3.txt │ │ │ ├── tile4.txt │ │ │ ├── tile5.txt │ │ │ ├── tile6.txt │ │ │ ├── tile7.txt │ │ │ ├── tile8.txt │ │ │ └── tile9.txt │ │ ├── 7x8/ │ │ │ ├── tile0.txt │ │ │ ├── tile1.txt │ │ │ ├── tile10.txt │ │ │ ├── tile11.txt │ │ │ ├── tile12.txt │ │ │ ├── tile13.txt │ │ │ ├── tile14.txt │ │ │ ├── tile15.txt │ │ │ ├── tile16.txt │ │ │ ├── tile17.txt │ │ │ ├── tile18.txt │ │ │ ├── tile19.txt │ │ │ ├── tile2.txt │ │ │ ├── tile20.txt │ │ │ ├── tile21.txt │ │ │ ├── tile22.txt │ │ │ ├── tile23.txt │ │ │ ├── tile24.txt │ │ │ ├── tile25.txt │ │ │ ├── tile3.txt │ │ │ ├── tile4.txt │ │ │ ├── tile5.txt │ │ │ ├── tile6.txt │ │ │ ├── tile7.txt │ │ │ ├── tile8.txt │ │ │ └── tile9.txt │ │ ├── 8x8/ │ │ │ ├── tile0.txt │ │ │ ├── tile1.txt │ │ │ ├── tile10.txt │ │ │ ├── tile11.txt │ │ │ ├── tile12.txt │ │ │ ├── tile13.txt │ │ │ ├── tile14.txt │ │ │ ├── tile15.txt │ │ │ ├── tile16.txt │ │ │ ├── tile17.txt │ │ │ ├── tile18.txt │ │ │ ├── tile19.txt │ │ │ ├── tile2.txt │ │ │ ├── tile20.txt │ │ │ ├── tile21.txt │ │ │ ├── tile22.txt │ │ │ ├── tile23.txt │ │ │ ├── tile24.txt │ │ │ ├── tile25.txt │ │ │ ├── tile3.txt │ │ │ ├── tile4.txt │ │ │ ├── tile5.txt │ │ │ ├── tile6.txt │ │ │ ├── tile7.txt │ │ │ ├── tile8.txt │ │ │ └── tile9.txt │ │ └── ASCII/ │ │ └── char_tiles.h │ ├── games/ │ │ ├── bomber/ │ │ │ ├── Makefile.bomber │ │ │ ├── config/ │ │ │ │ ├── game_config.mk │ │ │ │ └── project_config.mk │ │ │ ├── main.c │ │ │ ├── makefiles/ │ │ │ │ └── Makefile.override │ │ │ ├── tile_aliases.h │ │ │ └── tiles/ │ │ │ ├── 6x8/ │ │ │ │ ├── tile0.txt │ │ │ │ ├── tile1.txt │ │ │ │ ├── tile10.txt │ │ │ │ ├── tile11.txt │ │ │ │ ├── tile12.txt │ │ │ │ ├── tile13.txt │ │ │ │ ├── tile14.txt │ │ │ │ ├── tile15.txt │ │ │ │ ├── tile16.txt │ │ │ │ ├── tile17.txt │ │ │ │ ├── tile18.txt │ │ │ │ ├── tile19.txt │ │ │ │ ├── tile2.txt │ │ │ │ ├── tile20.txt │ │ │ │ ├── tile21.txt │ │ │ │ ├── tile22.txt │ │ │ │ ├── tile23.txt │ │ │ │ ├── tile24.txt │ │ │ │ ├── tile25.txt │ │ │ │ ├── tile3.txt │ │ │ │ ├── tile4.txt │ │ │ │ ├── tile5.txt │ │ │ │ ├── tile6.txt │ │ │ │ ├── tile7.txt │ │ │ │ ├── tile8.txt │ │ │ │ └── tile9.txt │ │ │ ├── 6x9/ │ │ │ │ ├── tile0.txt │ │ │ │ ├── tile1.txt │ │ │ │ ├── tile10.txt │ │ │ │ ├── tile11.txt │ │ │ │ ├── tile12.txt │ │ │ │ ├── tile13.txt │ │ │ │ ├── tile14.txt │ │ │ │ ├── tile15.txt │ │ │ │ ├── tile16.txt │ │ │ │ ├── tile17.txt │ │ │ │ ├── tile18.txt │ │ │ │ ├── tile19.txt │ │ │ │ ├── tile2.txt │ │ │ │ ├── tile20.txt │ │ │ │ ├── tile21.txt │ │ │ │ ├── tile22.txt │ │ │ │ ├── tile23.txt │ │ │ │ ├── tile24.txt │ │ │ │ ├── tile25.txt │ │ │ │ ├── tile3.txt │ │ │ │ ├── tile4.txt │ │ │ │ ├── tile5.txt │ │ │ │ ├── tile6.txt │ │ │ │ ├── tile7.txt │ │ │ │ ├── tile8.txt │ │ │ │ └── tile9.txt │ │ │ ├── 7x8/ │ │ │ │ ├── tile0.txt │ │ │ │ ├── tile1.txt │ │ │ │ ├── tile10.txt │ │ │ │ ├── tile11.txt │ │ │ │ ├── tile12.txt │ │ │ │ ├── tile13.txt │ │ │ │ ├── tile14.txt │ │ │ │ ├── tile15.txt │ │ │ │ ├── tile16.txt │ │ │ │ ├── tile17.txt │ │ │ │ ├── tile18.txt │ │ │ │ ├── tile19.txt │ │ │ │ ├── tile2.txt │ │ │ │ ├── tile20.txt │ │ │ │ ├── tile21.txt │ │ │ │ ├── tile22.txt │ │ │ │ ├── tile23.txt │ │ │ │ ├── tile24.txt │ │ │ │ ├── tile25.txt │ │ │ │ ├── tile3.txt │ │ │ │ ├── tile4.txt │ │ │ │ ├── tile5.txt │ │ │ │ ├── tile6.txt │ │ │ │ ├── tile7.txt │ │ │ │ ├── tile8.txt │ │ │ │ └── tile9.txt │ │ │ ├── 8x6/ │ │ │ │ ├── tile0.txt │ │ │ │ ├── tile1.txt │ │ │ │ ├── tile10.txt │ │ │ │ ├── tile11.txt │ │ │ │ ├── tile12.txt │ │ │ │ ├── tile13.txt │ │ │ │ ├── tile14.txt │ │ │ │ ├── tile15.txt │ │ │ │ ├── tile16.txt │ │ │ │ ├── tile17.txt │ │ │ │ ├── tile18.txt │ │ │ │ ├── tile19.txt │ │ │ │ ├── tile2.txt │ │ │ │ ├── tile20.txt │ │ │ │ ├── tile21.txt │ │ │ │ ├── tile22.txt │ │ │ │ ├── tile23.txt │ │ │ │ ├── tile24.txt │ │ │ │ ├── tile25.txt │ │ │ │ ├── tile3.txt │ │ │ │ ├── tile4.txt │ │ │ │ ├── tile5.txt │ │ │ │ ├── tile6.txt │ │ │ │ ├── tile7.txt │ │ │ │ ├── tile8.txt │ │ │ │ └── tile9.txt │ │ │ ├── 8x8/ │ │ │ │ ├── tile0.txt │ │ │ │ ├── tile1.txt │ │ │ │ ├── tile10.txt │ │ │ │ ├── tile11.txt │ │ │ │ ├── tile12.txt │ │ │ │ ├── tile13.txt │ │ │ │ ├── tile14.txt │ │ │ │ ├── tile15.txt │ │ │ │ ├── tile16.txt │ │ │ │ ├── tile17.txt │ │ │ │ ├── tile18.txt │ │ │ │ ├── tile19.txt │ │ │ │ ├── tile2.txt │ │ │ │ ├── tile20.txt │ │ │ │ ├── tile21.txt │ │ │ │ ├── tile22.txt │ │ │ │ ├── tile23.txt │ │ │ │ ├── tile24.txt │ │ │ │ ├── tile25.txt │ │ │ │ ├── tile3.txt │ │ │ │ ├── tile4.txt │ │ │ │ ├── tile5.txt │ │ │ │ ├── tile6.txt │ │ │ │ ├── tile7.txt │ │ │ │ ├── tile8.txt │ │ │ │ └── tile9.txt │ │ │ └── ASCII/ │ │ │ ├── aquarius/ │ │ │ │ ├── aquarius_char_tiles.h │ │ │ │ └── aquarius_quad_char_tiles.h │ │ │ ├── char_tiles.h │ │ │ └── quad_char_tiles.h │ │ ├── chase/ │ │ │ ├── Makefile.chase │ │ │ ├── Makefile.chase_BK │ │ │ ├── bullet.h │ │ │ ├── character.h │ │ │ ├── config/ │ │ │ │ ├── game_config.mk │ │ │ │ └── project_config.mk │ │ │ ├── definitions.h │ │ │ ├── end_screen.h │ │ │ ├── game_settings.h │ │ │ ├── game_text.h │ │ │ ├── ghost.h │ │ │ ├── horizontal_missile.h │ │ │ ├── images.h │ │ │ ├── init_images.h │ │ │ ├── item.h │ │ │ ├── level.h │ │ │ ├── makefiles/ │ │ │ │ └── Makefile.override │ │ │ ├── makefiles.chase/ │ │ │ │ ├── Makefile.ack_targets │ │ │ │ ├── Makefile.cc6303_targets │ │ │ │ ├── Makefile.cc65_targets │ │ │ │ ├── Makefile.cmoc_targets │ │ │ │ ├── Makefile.cross-dev-kit_targets │ │ │ │ ├── Makefile.emcc_targets │ │ │ │ ├── Makefile.gcc_amiga_targets │ │ │ │ ├── Makefile.gcc_atari_st_targets │ │ │ │ ├── Makefile.gcc_targets │ │ │ │ ├── Makefile.gcc_tms9900_targets │ │ │ │ ├── Makefile.gcc_z8k_pcos_targets │ │ │ │ ├── Makefile.lcc1802_targets │ │ │ │ ├── Makefile.sdcc_targets │ │ │ │ ├── Makefile.vbcc_targets │ │ │ │ ├── Makefile.xtc68_targets │ │ │ │ ├── Makefile.z88dk_targets │ │ │ │ └── makefiles_z88dk/ │ │ │ │ ├── Makefile_z88dk_a-k │ │ │ │ ├── Makefile_z88dk_l-p │ │ │ │ ├── Makefile_z88dk_q-z │ │ │ │ └── Makefile_z88dk_zsdcc │ │ │ ├── memory/ │ │ │ │ ├── c16_memory.s │ │ │ │ ├── creativision_memory.s │ │ │ │ ├── gal_memory.asm │ │ │ │ ├── gamate_memory.s │ │ │ │ ├── oric1_memory.s │ │ │ │ ├── pet_memory.s │ │ │ │ └── vic20_memory.s │ │ │ ├── move_player.h │ │ │ ├── rocket.h │ │ │ ├── settings.h │ │ │ ├── shapes/ │ │ │ │ ├── 7x8/ │ │ │ │ │ ├── shape4.txt │ │ │ │ │ ├── shape5.txt │ │ │ │ │ ├── shape6.txt │ │ │ │ │ └── shape7.txt │ │ │ │ └── 8x6/ │ │ │ │ ├── shape0.txt │ │ │ │ ├── shape1.txt │ │ │ │ ├── shape10.txt │ │ │ │ ├── shape11.txt │ │ │ │ ├── shape12.txt │ │ │ │ ├── shape13.txt │ │ │ │ ├── shape14.txt │ │ │ │ ├── shape15.txt │ │ │ │ ├── shape17.txt │ │ │ │ ├── shape18.txt │ │ │ │ ├── shape2.txt │ │ │ │ ├── shape25.txt │ │ │ │ ├── shape3.txt │ │ │ │ ├── shape4.txt │ │ │ │ ├── shape5.txt │ │ │ │ ├── shape6.txt │ │ │ │ ├── shape7.txt │ │ │ │ ├── shape8.txt │ │ │ │ └── shape9.txt │ │ │ ├── skull.h │ │ │ ├── speed_game_settings.h │ │ │ ├── split_files/ │ │ │ │ ├── bullet.c │ │ │ │ ├── character.c │ │ │ │ ├── end_screen.c │ │ │ │ ├── game_text.c │ │ │ │ ├── ghost.c │ │ │ │ ├── horizontal_missile.c │ │ │ │ ├── init_images.c │ │ │ │ ├── item.c │ │ │ │ ├── level.c │ │ │ │ ├── main.c │ │ │ │ ├── move_player.c │ │ │ │ ├── rocket.c │ │ │ │ ├── skull.c │ │ │ │ └── strategy.c │ │ │ ├── strategy.h │ │ │ ├── text_strings.h │ │ │ ├── tiles/ │ │ │ │ ├── 6x8/ │ │ │ │ │ ├── tile0.txt │ │ │ │ │ ├── tile1.txt │ │ │ │ │ ├── tile10.txt │ │ │ │ │ ├── tile11.txt │ │ │ │ │ ├── tile12.txt │ │ │ │ │ ├── tile13.txt │ │ │ │ │ ├── tile14.txt │ │ │ │ │ ├── tile15.txt │ │ │ │ │ ├── tile16.txt │ │ │ │ │ ├── tile17.txt │ │ │ │ │ ├── tile18.txt │ │ │ │ │ ├── tile19.txt │ │ │ │ │ ├── tile2.txt │ │ │ │ │ ├── tile20.txt │ │ │ │ │ ├── tile21.txt │ │ │ │ │ ├── tile22.txt │ │ │ │ │ ├── tile23.txt │ │ │ │ │ ├── tile24.txt │ │ │ │ │ ├── tile25.txt │ │ │ │ │ ├── tile3.txt │ │ │ │ │ ├── tile4.txt │ │ │ │ │ ├── tile5.txt │ │ │ │ │ ├── tile6.txt │ │ │ │ │ ├── tile7.txt │ │ │ │ │ ├── tile8.txt │ │ │ │ │ └── tile9.txt │ │ │ │ ├── 6x9/ │ │ │ │ │ ├── tile0.txt │ │ │ │ │ ├── tile1.txt │ │ │ │ │ ├── tile10.txt │ │ │ │ │ ├── tile11.txt │ │ │ │ │ ├── tile12.txt │ │ │ │ │ ├── tile13.txt │ │ │ │ │ ├── tile14.txt │ │ │ │ │ ├── tile15.txt │ │ │ │ │ ├── tile16.txt │ │ │ │ │ ├── tile17.txt │ │ │ │ │ ├── tile18.txt │ │ │ │ │ ├── tile19.txt │ │ │ │ │ ├── tile2.txt │ │ │ │ │ ├── tile20.txt │ │ │ │ │ ├── tile21.txt │ │ │ │ │ ├── tile22.txt │ │ │ │ │ ├── tile23.txt │ │ │ │ │ ├── tile24.txt │ │ │ │ │ ├── tile25.txt │ │ │ │ │ ├── tile3.txt │ │ │ │ │ ├── tile4.txt │ │ │ │ │ ├── tile5.txt │ │ │ │ │ ├── tile6.txt │ │ │ │ │ ├── tile7.txt │ │ │ │ │ ├── tile8.txt │ │ │ │ │ └── tile9.txt │ │ │ │ ├── 7x8/ │ │ │ │ │ ├── tile0.txt │ │ │ │ │ ├── tile1.txt │ │ │ │ │ ├── tile10.txt │ │ │ │ │ ├── tile11.txt │ │ │ │ │ ├── tile12.txt │ │ │ │ │ ├── tile13.txt │ │ │ │ │ ├── tile14.txt │ │ │ │ │ ├── tile15.txt │ │ │ │ │ ├── tile16.txt │ │ │ │ │ ├── tile17.txt │ │ │ │ │ ├── tile18.txt │ │ │ │ │ ├── tile19.txt │ │ │ │ │ ├── tile2.txt │ │ │ │ │ ├── tile20.txt │ │ │ │ │ ├── tile21.txt │ │ │ │ │ ├── tile22.txt │ │ │ │ │ ├── tile23.txt │ │ │ │ │ ├── tile24.txt │ │ │ │ │ ├── tile25.txt │ │ │ │ │ ├── tile3.txt │ │ │ │ │ ├── tile4.txt │ │ │ │ │ ├── tile5.txt │ │ │ │ │ ├── tile6.txt │ │ │ │ │ ├── tile7.txt │ │ │ │ │ ├── tile8.txt │ │ │ │ │ └── tile9.txt │ │ │ │ ├── 8x6/ │ │ │ │ │ ├── tile0.txt │ │ │ │ │ ├── tile1.txt │ │ │ │ │ ├── tile10.txt │ │ │ │ │ ├── tile11.txt │ │ │ │ │ ├── tile12.txt │ │ │ │ │ ├── tile13.txt │ │ │ │ │ ├── tile14.txt │ │ │ │ │ ├── tile15.txt │ │ │ │ │ ├── tile16.txt │ │ │ │ │ ├── tile17.txt │ │ │ │ │ ├── tile18.txt │ │ │ │ │ ├── tile19.txt │ │ │ │ │ ├── tile2.txt │ │ │ │ │ ├── tile20.txt │ │ │ │ │ ├── tile21.txt │ │ │ │ │ ├── tile22.txt │ │ │ │ │ ├── tile23.txt │ │ │ │ │ ├── tile24.txt │ │ │ │ │ ├── tile25.txt │ │ │ │ │ ├── tile3.txt │ │ │ │ │ ├── tile4.txt │ │ │ │ │ ├── tile5.txt │ │ │ │ │ ├── tile6.txt │ │ │ │ │ ├── tile7.txt │ │ │ │ │ ├── tile8.txt │ │ │ │ │ └── tile9.txt │ │ │ │ ├── 8x8/ │ │ │ │ │ ├── tile0.txt │ │ │ │ │ ├── tile1.txt │ │ │ │ │ ├── tile10.txt │ │ │ │ │ ├── tile11.txt │ │ │ │ │ ├── tile12.txt │ │ │ │ │ ├── tile13.txt │ │ │ │ │ ├── tile14.txt │ │ │ │ │ ├── tile15.txt │ │ │ │ │ ├── tile16.txt │ │ │ │ │ ├── tile17.txt │ │ │ │ │ ├── tile18.txt │ │ │ │ │ ├── tile19.txt │ │ │ │ │ ├── tile2.txt │ │ │ │ │ ├── tile20.txt │ │ │ │ │ ├── tile21.txt │ │ │ │ │ ├── tile22.txt │ │ │ │ │ ├── tile23.txt │ │ │ │ │ ├── tile24.txt │ │ │ │ │ ├── tile25.txt │ │ │ │ │ ├── tile3.txt │ │ │ │ │ ├── tile4.txt │ │ │ │ │ ├── tile5.txt │ │ │ │ │ ├── tile6.txt │ │ │ │ │ ├── tile7.txt │ │ │ │ │ ├── tile8.txt │ │ │ │ │ └── tile9.txt │ │ │ │ └── ASCII/ │ │ │ │ ├── aquarius/ │ │ │ │ │ └── aquarius_char_tiles.h │ │ │ │ └── char_tiles.h │ │ │ └── variables.h │ │ ├── horde/ │ │ │ ├── Makefile.horde │ │ │ ├── config/ │ │ │ │ ├── game_config.mk │ │ │ │ └── project_config.mk │ │ │ ├── images.h │ │ │ ├── main.c │ │ │ ├── makefiles/ │ │ │ │ └── Makefile.override │ │ │ ├── shapes/ │ │ │ │ ├── 6x8/ │ │ │ │ │ ├── shape25.txt │ │ │ │ │ └── shape26.txt │ │ │ │ ├── 6x9/ │ │ │ │ │ ├── shape25.txt │ │ │ │ │ └── shape26.txt │ │ │ │ ├── 7x8/ │ │ │ │ │ ├── shape25.txt │ │ │ │ │ └── shape26.txt │ │ │ │ ├── 8x6/ │ │ │ │ │ ├── shape0.txt │ │ │ │ │ ├── shape1.txt │ │ │ │ │ ├── shape10.txt │ │ │ │ │ ├── shape11.txt │ │ │ │ │ ├── shape12.txt │ │ │ │ │ ├── shape13.txt │ │ │ │ │ ├── shape14.txt │ │ │ │ │ ├── shape15.txt │ │ │ │ │ ├── shape16.txt │ │ │ │ │ ├── shape17.txt │ │ │ │ │ ├── shape18.txt │ │ │ │ │ ├── shape19.txt │ │ │ │ │ ├── shape2.txt │ │ │ │ │ ├── shape20.txt │ │ │ │ │ ├── shape21.txt │ │ │ │ │ ├── shape22.txt │ │ │ │ │ ├── shape23.txt │ │ │ │ │ ├── shape24.txt │ │ │ │ │ ├── shape25.txt │ │ │ │ │ ├── shape26.txt │ │ │ │ │ ├── shape3.txt │ │ │ │ │ ├── shape4.txt │ │ │ │ │ ├── shape5.txt │ │ │ │ │ ├── shape6.txt │ │ │ │ │ ├── shape7.txt │ │ │ │ │ ├── shape8.txt │ │ │ │ │ └── shape9.txt │ │ │ │ └── 8x8/ │ │ │ │ ├── shape25.txt │ │ │ │ └── shape26.txt │ │ │ └── tiles/ │ │ │ ├── 6x8/ │ │ │ │ ├── tile0.txt │ │ │ │ ├── tile1.txt │ │ │ │ ├── tile10.txt │ │ │ │ ├── tile11.txt │ │ │ │ ├── tile12.txt │ │ │ │ ├── tile13.txt │ │ │ │ ├── tile14.txt │ │ │ │ ├── tile15.txt │ │ │ │ ├── tile16.txt │ │ │ │ ├── tile17.txt │ │ │ │ ├── tile18.txt │ │ │ │ ├── tile19.txt │ │ │ │ ├── tile2.txt │ │ │ │ ├── tile20.txt │ │ │ │ ├── tile21.txt │ │ │ │ ├── tile22.txt │ │ │ │ ├── tile23.txt │ │ │ │ ├── tile24.txt │ │ │ │ ├── tile25.txt │ │ │ │ ├── tile26.txt │ │ │ │ ├── tile3.txt │ │ │ │ ├── tile4.txt │ │ │ │ ├── tile5.txt │ │ │ │ ├── tile6.txt │ │ │ │ ├── tile7.txt │ │ │ │ ├── tile8.txt │ │ │ │ └── tile9.txt │ │ │ ├── 6x9/ │ │ │ │ ├── tile0.txt │ │ │ │ ├── tile1.txt │ │ │ │ ├── tile10.txt │ │ │ │ ├── tile11.txt │ │ │ │ ├── tile12.txt │ │ │ │ ├── tile13.txt │ │ │ │ ├── tile14.txt │ │ │ │ ├── tile15.txt │ │ │ │ ├── tile16.txt │ │ │ │ ├── tile17.txt │ │ │ │ ├── tile18.txt │ │ │ │ ├── tile19.txt │ │ │ │ ├── tile2.txt │ │ │ │ ├── tile20.txt │ │ │ │ ├── tile21.txt │ │ │ │ ├── tile22.txt │ │ │ │ ├── tile23.txt │ │ │ │ ├── tile24.txt │ │ │ │ ├── tile25.txt │ │ │ │ ├── tile26.txt │ │ │ │ ├── tile3.txt │ │ │ │ ├── tile4.txt │ │ │ │ ├── tile5.txt │ │ │ │ ├── tile6.txt │ │ │ │ ├── tile7.txt │ │ │ │ ├── tile8.txt │ │ │ │ └── tile9.txt │ │ │ ├── 7x8/ │ │ │ │ ├── tile0.txt │ │ │ │ ├── tile1.txt │ │ │ │ ├── tile10.txt │ │ │ │ ├── tile11.txt │ │ │ │ ├── tile12.txt │ │ │ │ ├── tile13.txt │ │ │ │ ├── tile14.txt │ │ │ │ ├── tile15.txt │ │ │ │ ├── tile16.txt │ │ │ │ ├── tile17.txt │ │ │ │ ├── tile18.txt │ │ │ │ ├── tile19.txt │ │ │ │ ├── tile2.txt │ │ │ │ ├── tile20.txt │ │ │ │ ├── tile21.txt │ │ │ │ ├── tile22.txt │ │ │ │ ├── tile23.txt │ │ │ │ ├── tile24.txt │ │ │ │ ├── tile25.txt │ │ │ │ ├── tile26.txt │ │ │ │ ├── tile3.txt │ │ │ │ ├── tile4.txt │ │ │ │ ├── tile5.txt │ │ │ │ ├── tile6.txt │ │ │ │ ├── tile7.txt │ │ │ │ ├── tile8.txt │ │ │ │ └── tile9.txt │ │ │ ├── 8x6/ │ │ │ │ ├── tile0.txt │ │ │ │ ├── tile1.txt │ │ │ │ ├── tile10.txt │ │ │ │ ├── tile11.txt │ │ │ │ ├── tile12.txt │ │ │ │ ├── tile13.txt │ │ │ │ ├── tile14.txt │ │ │ │ ├── tile15.txt │ │ │ │ ├── tile16.txt │ │ │ │ ├── tile17.txt │ │ │ │ ├── tile18.txt │ │ │ │ ├── tile19.txt │ │ │ │ ├── tile2.txt │ │ │ │ ├── tile20.txt │ │ │ │ ├── tile21.txt │ │ │ │ ├── tile22.txt │ │ │ │ ├── tile23.txt │ │ │ │ ├── tile24.txt │ │ │ │ ├── tile25.txt │ │ │ │ ├── tile26.txt │ │ │ │ ├── tile3.txt │ │ │ │ ├── tile4.txt │ │ │ │ ├── tile5.txt │ │ │ │ ├── tile6.txt │ │ │ │ ├── tile7.txt │ │ │ │ ├── tile8.txt │ │ │ │ └── tile9.txt │ │ │ ├── 8x8/ │ │ │ │ ├── tile0.txt │ │ │ │ ├── tile1.txt │ │ │ │ ├── tile10.txt │ │ │ │ ├── tile11.txt │ │ │ │ ├── tile12.txt │ │ │ │ ├── tile13.txt │ │ │ │ ├── tile14.txt │ │ │ │ ├── tile15.txt │ │ │ │ ├── tile16.txt │ │ │ │ ├── tile17.txt │ │ │ │ ├── tile18.txt │ │ │ │ ├── tile19.txt │ │ │ │ ├── tile2.txt │ │ │ │ ├── tile20.txt │ │ │ │ ├── tile21.txt │ │ │ │ ├── tile22.txt │ │ │ │ ├── tile23.txt │ │ │ │ ├── tile24.txt │ │ │ │ ├── tile25.txt │ │ │ │ ├── tile26.txt │ │ │ │ ├── tile3.txt │ │ │ │ ├── tile4.txt │ │ │ │ ├── tile5.txt │ │ │ │ ├── tile6.txt │ │ │ │ ├── tile7.txt │ │ │ │ ├── tile8.txt │ │ │ │ └── tile9.txt │ │ │ └── ASCII/ │ │ │ ├── aquarius/ │ │ │ │ └── aquarius_char_tiles.h │ │ │ └── char_tiles.h │ │ ├── shoot/ │ │ │ ├── Makefile.shoot │ │ │ ├── bullet.h │ │ │ ├── character.h │ │ │ ├── config/ │ │ │ │ ├── game_config.mk │ │ │ │ └── project_config.mk │ │ │ ├── definitions.h │ │ │ ├── doc/ │ │ │ │ ├── items.txt │ │ │ │ ├── levels.txt │ │ │ │ └── secrets.txt │ │ │ ├── end_screen.h │ │ │ ├── game_settings.h │ │ │ ├── game_text.h │ │ │ ├── ghost.h │ │ │ ├── horizontal_missile.h │ │ │ ├── images.h │ │ │ ├── init_images.h │ │ │ ├── item.h │ │ │ ├── level.h │ │ │ ├── makefiles/ │ │ │ │ └── Makefile.override │ │ │ ├── memory/ │ │ │ │ ├── c16_memory.s │ │ │ │ ├── creativision_memory.s │ │ │ │ ├── creativision_memory_light.s │ │ │ │ ├── creativision_memory_tiny.s │ │ │ │ ├── gal_memory.asm │ │ │ │ ├── gamate_memory.s │ │ │ │ ├── oric1_memory.s │ │ │ │ ├── pet_memory.s │ │ │ │ └── vic20_memory.s │ │ │ ├── move_player.h │ │ │ ├── rocket.h │ │ │ ├── settings.h │ │ │ ├── shapes/ │ │ │ │ ├── 6x8/ │ │ │ │ │ ├── shape19.txt │ │ │ │ │ ├── shape20.txt │ │ │ │ │ ├── shape21.txt │ │ │ │ │ ├── shape22.txt │ │ │ │ │ ├── shape23.txt │ │ │ │ │ ├── shape24.txt │ │ │ │ │ └── shape26.txt │ │ │ │ ├── 7x8/ │ │ │ │ │ ├── shape0.txt │ │ │ │ │ ├── shape1.txt │ │ │ │ │ ├── shape10.txt │ │ │ │ │ ├── shape19.txt │ │ │ │ │ ├── shape2.txt │ │ │ │ │ ├── shape20.txt │ │ │ │ │ ├── shape21.txt │ │ │ │ │ ├── shape22.txt │ │ │ │ │ ├── shape23.txt │ │ │ │ │ ├── shape24.txt │ │ │ │ │ ├── shape26.txt │ │ │ │ │ └── shape3.txt │ │ │ │ ├── 8x6/ │ │ │ │ │ ├── shape14.txt │ │ │ │ │ ├── shape15.txt │ │ │ │ │ ├── shape19.txt │ │ │ │ │ ├── shape20.txt │ │ │ │ │ ├── shape21.txt │ │ │ │ │ ├── shape22.txt │ │ │ │ │ ├── shape23.txt │ │ │ │ │ ├── shape24.txt │ │ │ │ │ ├── shape26.txt │ │ │ │ │ ├── shape4.txt │ │ │ │ │ ├── shape6.txt │ │ │ │ │ └── shape9.txt │ │ │ │ └── 8x8/ │ │ │ │ ├── shape19.txt │ │ │ │ ├── shape20.txt │ │ │ │ ├── shape21.txt │ │ │ │ ├── shape22.txt │ │ │ │ ├── shape23.txt │ │ │ │ ├── shape26.txt │ │ │ │ └── shape6.txt │ │ │ ├── skull.h │ │ │ ├── sleep.h │ │ │ ├── speed_game_settings.h │ │ │ ├── split_files/ │ │ │ │ ├── bullet.c │ │ │ │ ├── character.c │ │ │ │ ├── end_screen.c │ │ │ │ ├── game_text.c │ │ │ │ ├── ghost.c │ │ │ │ ├── horizontal_missile.c │ │ │ │ ├── init_images.c │ │ │ │ ├── item.c │ │ │ │ ├── level.c │ │ │ │ ├── main.c │ │ │ │ ├── move_player.c │ │ │ │ ├── rocket.c │ │ │ │ ├── skull.c │ │ │ │ ├── sleep.c │ │ │ │ └── strategy.c │ │ │ ├── strategy.h │ │ │ ├── text_strings.h │ │ │ ├── tiles/ │ │ │ │ ├── 6x8/ │ │ │ │ │ ├── tile0.txt │ │ │ │ │ ├── tile1.txt │ │ │ │ │ ├── tile10.txt │ │ │ │ │ ├── tile11.txt │ │ │ │ │ ├── tile12.txt │ │ │ │ │ ├── tile13.txt │ │ │ │ │ ├── tile14.txt │ │ │ │ │ ├── tile15.txt │ │ │ │ │ ├── tile16.txt │ │ │ │ │ ├── tile17.txt │ │ │ │ │ ├── tile18.txt │ │ │ │ │ ├── tile19.txt │ │ │ │ │ ├── tile2.txt │ │ │ │ │ ├── tile20.txt │ │ │ │ │ ├── tile21.txt │ │ │ │ │ ├── tile22.txt │ │ │ │ │ ├── tile23.txt │ │ │ │ │ ├── tile24.txt │ │ │ │ │ ├── tile25.txt │ │ │ │ │ ├── tile26.txt │ │ │ │ │ ├── tile3.txt │ │ │ │ │ ├── tile4.txt │ │ │ │ │ ├── tile5.txt │ │ │ │ │ ├── tile6.txt │ │ │ │ │ ├── tile7.txt │ │ │ │ │ ├── tile8.txt │ │ │ │ │ └── tile9.txt │ │ │ │ ├── 6x9/ │ │ │ │ │ ├── tile0.txt │ │ │ │ │ ├── tile1.txt │ │ │ │ │ ├── tile10.txt │ │ │ │ │ ├── tile11.txt │ │ │ │ │ ├── tile12.txt │ │ │ │ │ ├── tile13.txt │ │ │ │ │ ├── tile14.txt │ │ │ │ │ ├── tile15.txt │ │ │ │ │ ├── tile16.txt │ │ │ │ │ ├── tile17.txt │ │ │ │ │ ├── tile18.txt │ │ │ │ │ ├── tile19.txt │ │ │ │ │ ├── tile2.txt │ │ │ │ │ ├── tile20.txt │ │ │ │ │ ├── tile21.txt │ │ │ │ │ ├── tile22.txt │ │ │ │ │ ├── tile23.txt │ │ │ │ │ ├── tile24.txt │ │ │ │ │ ├── tile25.txt │ │ │ │ │ ├── tile26.txt │ │ │ │ │ ├── tile3.txt │ │ │ │ │ ├── tile4.txt │ │ │ │ │ ├── tile5.txt │ │ │ │ │ ├── tile6.txt │ │ │ │ │ ├── tile7.txt │ │ │ │ │ ├── tile8.txt │ │ │ │ │ └── tile9.txt │ │ │ │ ├── 7x8/ │ │ │ │ │ ├── tile0.txt │ │ │ │ │ ├── tile1.txt │ │ │ │ │ ├── tile10.txt │ │ │ │ │ ├── tile11.txt │ │ │ │ │ ├── tile12.txt │ │ │ │ │ ├── tile13.txt │ │ │ │ │ ├── tile14.txt │ │ │ │ │ ├── tile15.txt │ │ │ │ │ ├── tile16.txt │ │ │ │ │ ├── tile17.txt │ │ │ │ │ ├── tile18.txt │ │ │ │ │ ├── tile19.txt │ │ │ │ │ ├── tile2.txt │ │ │ │ │ ├── tile20.txt │ │ │ │ │ ├── tile21.txt │ │ │ │ │ ├── tile22.txt │ │ │ │ │ ├── tile23.txt │ │ │ │ │ ├── tile24.txt │ │ │ │ │ ├── tile25.txt │ │ │ │ │ ├── tile26.txt │ │ │ │ │ ├── tile3.txt │ │ │ │ │ ├── tile4.txt │ │ │ │ │ ├── tile5.txt │ │ │ │ │ ├── tile6.txt │ │ │ │ │ ├── tile7.txt │ │ │ │ │ ├── tile8.txt │ │ │ │ │ └── tile9.txt │ │ │ │ ├── 8x6/ │ │ │ │ │ ├── tile0.txt │ │ │ │ │ ├── tile1.txt │ │ │ │ │ ├── tile10.txt │ │ │ │ │ ├── tile11.txt │ │ │ │ │ ├── tile12.txt │ │ │ │ │ ├── tile13.txt │ │ │ │ │ ├── tile14.txt │ │ │ │ │ ├── tile15.txt │ │ │ │ │ ├── tile16.txt │ │ │ │ │ ├── tile17.txt │ │ │ │ │ ├── tile18.txt │ │ │ │ │ ├── tile19.txt │ │ │ │ │ ├── tile2.txt │ │ │ │ │ ├── tile20.txt │ │ │ │ │ ├── tile21.txt │ │ │ │ │ ├── tile22.txt │ │ │ │ │ ├── tile23.txt │ │ │ │ │ ├── tile24.txt │ │ │ │ │ ├── tile25.txt │ │ │ │ │ ├── tile26.txt │ │ │ │ │ ├── tile3.txt │ │ │ │ │ ├── tile4.txt │ │ │ │ │ ├── tile5.txt │ │ │ │ │ ├── tile6.txt │ │ │ │ │ ├── tile7.txt │ │ │ │ │ ├── tile8.txt │ │ │ │ │ └── tile9.txt │ │ │ │ └── 8x8/ │ │ │ │ ├── tile0.txt │ │ │ │ ├── tile1.txt │ │ │ │ ├── tile10.txt │ │ │ │ ├── tile11.txt │ │ │ │ ├── tile12.txt │ │ │ │ ├── tile13.txt │ │ │ │ ├── tile14.txt │ │ │ │ ├── tile15.txt │ │ │ │ ├── tile16.txt │ │ │ │ ├── tile17.txt │ │ │ │ ├── tile18.txt │ │ │ │ ├── tile19.txt │ │ │ │ ├── tile2.txt │ │ │ │ ├── tile20.txt │ │ │ │ ├── tile21.txt │ │ │ │ ├── tile22.txt │ │ │ │ ├── tile23.txt │ │ │ │ ├── tile24.txt │ │ │ │ ├── tile25.txt │ │ │ │ ├── tile26.txt │ │ │ │ ├── tile3.txt │ │ │ │ ├── tile4.txt │ │ │ │ ├── tile5.txt │ │ │ │ ├── tile6.txt │ │ │ │ ├── tile7.txt │ │ │ │ ├── tile8.txt │ │ │ │ └── tile9.txt │ │ │ └── variables.h │ │ ├── shuriken/ │ │ │ ├── Makefile.shuriken │ │ │ ├── config/ │ │ │ │ ├── game_config.mk │ │ │ │ └── project_config.mk │ │ │ ├── docs/ │ │ │ │ ├── 12x12_multi_tile_1.txt │ │ │ │ ├── 12x12_multi_tile_2.txt │ │ │ │ ├── 12x16_multi_tile.txt │ │ │ │ ├── 14x16_multi_tile.txt │ │ │ │ ├── 14x16_multi_tile_2.txt │ │ │ │ ├── 14x16_multi_tile_3.txt │ │ │ │ ├── 14x16_multi_tile_4.txt │ │ │ │ ├── 14x16_shapes.txt │ │ │ │ ├── 16x12_multi_tile.txt │ │ │ │ ├── 16x16_multi_tile.txt │ │ │ │ ├── 7x8.txt │ │ │ │ ├── mine_shape1.txt │ │ │ │ └── mine_shape2.txt │ │ │ ├── level_00_horiz.h │ │ │ ├── level_01_vert_bars.h │ │ │ ├── level_02_cross.h │ │ │ ├── level_03_07_11_boss.h │ │ │ ├── level_04_horiz_walls.h │ │ │ ├── level_05_h_barriers.h │ │ │ ├── level_06_rain.h │ │ │ ├── level_08_vert_walls.h │ │ │ ├── level_09_squares.h │ │ │ ├── level_10_many.h │ │ │ ├── levels.h │ │ │ ├── main.c │ │ │ ├── makefiles/ │ │ │ │ └── Makefile.override │ │ │ ├── screen_types.h │ │ │ ├── shapes/ │ │ │ │ ├── 6x8/ │ │ │ │ │ ├── shape0.txt │ │ │ │ │ ├── shape1.txt │ │ │ │ │ ├── shape10.txt │ │ │ │ │ ├── shape11.txt │ │ │ │ │ ├── shape12.txt │ │ │ │ │ ├── shape13.txt │ │ │ │ │ ├── shape14.txt │ │ │ │ │ ├── shape15.txt │ │ │ │ │ ├── shape16.txt │ │ │ │ │ ├── shape17.txt │ │ │ │ │ ├── shape18.txt │ │ │ │ │ ├── shape19.txt │ │ │ │ │ ├── shape2.txt │ │ │ │ │ ├── shape20.txt │ │ │ │ │ ├── shape21.txt │ │ │ │ │ ├── shape22.txt │ │ │ │ │ ├── shape23.txt │ │ │ │ │ ├── shape24.txt │ │ │ │ │ ├── shape25.txt │ │ │ │ │ ├── shape26.txt │ │ │ │ │ ├── shape3.txt │ │ │ │ │ ├── shape4.txt │ │ │ │ │ ├── shape5.txt │ │ │ │ │ ├── shape6.txt │ │ │ │ │ ├── shape7.txt │ │ │ │ │ ├── shape8.txt │ │ │ │ │ └── shape9.txt │ │ │ │ ├── 6x9/ │ │ │ │ │ ├── shape0.txt │ │ │ │ │ ├── shape1.txt │ │ │ │ │ ├── shape10.txt │ │ │ │ │ ├── shape11.txt │ │ │ │ │ ├── shape12.txt │ │ │ │ │ ├── shape13.txt │ │ │ │ │ ├── shape14.txt │ │ │ │ │ ├── shape15.txt │ │ │ │ │ ├── shape16.txt │ │ │ │ │ ├── shape17.txt │ │ │ │ │ ├── shape18.txt │ │ │ │ │ ├── shape19.txt │ │ │ │ │ ├── shape2.txt │ │ │ │ │ ├── shape20.txt │ │ │ │ │ ├── shape21.txt │ │ │ │ │ ├── shape22.txt │ │ │ │ │ ├── shape23.txt │ │ │ │ │ ├── shape24.txt │ │ │ │ │ ├── shape25.txt │ │ │ │ │ ├── shape26.txt │ │ │ │ │ ├── shape3.txt │ │ │ │ │ ├── shape4.txt │ │ │ │ │ ├── shape5.txt │ │ │ │ │ ├── shape6.txt │ │ │ │ │ ├── shape7.txt │ │ │ │ │ ├── shape8.txt │ │ │ │ │ └── shape9.txt │ │ │ │ ├── 7x8/ │ │ │ │ │ ├── shape0.txt │ │ │ │ │ ├── shape1.txt │ │ │ │ │ ├── shape10.txt │ │ │ │ │ ├── shape11.txt │ │ │ │ │ ├── shape12.txt │ │ │ │ │ ├── shape13.txt │ │ │ │ │ ├── shape14.txt │ │ │ │ │ ├── shape15.txt │ │ │ │ │ ├── shape16.txt │ │ │ │ │ ├── shape17.txt │ │ │ │ │ ├── shape18.txt │ │ │ │ │ ├── shape19.txt │ │ │ │ │ ├── shape2.txt │ │ │ │ │ ├── shape20.txt │ │ │ │ │ ├── shape21.txt │ │ │ │ │ ├── shape22.txt │ │ │ │ │ ├── shape23.txt │ │ │ │ │ ├── shape24.txt │ │ │ │ │ ├── shape25.txt │ │ │ │ │ ├── shape26.txt │ │ │ │ │ ├── shape3.txt │ │ │ │ │ ├── shape4.txt │ │ │ │ │ ├── shape5.txt │ │ │ │ │ ├── shape6.txt │ │ │ │ │ ├── shape7.txt │ │ │ │ │ ├── shape8.txt │ │ │ │ │ └── shape9.txt │ │ │ │ ├── 8x6/ │ │ │ │ │ ├── shape0.txt │ │ │ │ │ ├── shape1.txt │ │ │ │ │ ├── shape10.txt │ │ │ │ │ ├── shape11.txt │ │ │ │ │ ├── shape12.txt │ │ │ │ │ ├── shape13.txt │ │ │ │ │ ├── shape14.txt │ │ │ │ │ ├── shape15.txt │ │ │ │ │ ├── shape16.txt │ │ │ │ │ ├── shape17.txt │ │ │ │ │ ├── shape18.txt │ │ │ │ │ ├── shape19.txt │ │ │ │ │ ├── shape2.txt │ │ │ │ │ ├── shape20.txt │ │ │ │ │ ├── shape21.txt │ │ │ │ │ ├── shape22.txt │ │ │ │ │ ├── shape23.txt │ │ │ │ │ ├── shape24.txt │ │ │ │ │ ├── shape25.txt │ │ │ │ │ ├── shape26.txt │ │ │ │ │ ├── shape3.txt │ │ │ │ │ ├── shape4.txt │ │ │ │ │ ├── shape5.txt │ │ │ │ │ ├── shape6.txt │ │ │ │ │ ├── shape7.txt │ │ │ │ │ ├── shape8.txt │ │ │ │ │ └── shape9.txt │ │ │ │ └── 8x8/ │ │ │ │ ├── shape0.txt │ │ │ │ ├── shape1.txt │ │ │ │ ├── shape10.txt │ │ │ │ ├── shape11.txt │ │ │ │ ├── shape12.txt │ │ │ │ ├── shape13.txt │ │ │ │ ├── shape14.txt │ │ │ │ ├── shape15.txt │ │ │ │ ├── shape16.txt │ │ │ │ ├── shape17.txt │ │ │ │ ├── shape18.txt │ │ │ │ ├── shape19.txt │ │ │ │ ├── shape2.txt │ │ │ │ ├── shape20.txt │ │ │ │ ├── shape21.txt │ │ │ │ ├── shape22.txt │ │ │ │ ├── shape23.txt │ │ │ │ ├── shape24.txt │ │ │ │ ├── shape25.txt │ │ │ │ ├── shape26.txt │ │ │ │ ├── shape3.txt │ │ │ │ ├── shape4.txt │ │ │ │ ├── shape5.txt │ │ │ │ ├── shape6.txt │ │ │ │ ├── shape7.txt │ │ │ │ ├── shape8.txt │ │ │ │ └── shape9.txt │ │ │ └── tiles/ │ │ │ ├── 6x9/ │ │ │ │ ├── tile0.txt │ │ │ │ ├── tile1.txt │ │ │ │ ├── tile10.txt │ │ │ │ ├── tile11.txt │ │ │ │ ├── tile12.txt │ │ │ │ ├── tile13.txt │ │ │ │ ├── tile14.txt │ │ │ │ ├── tile15.txt │ │ │ │ ├── tile16.txt │ │ │ │ ├── tile17.txt │ │ │ │ ├── tile18.txt │ │ │ │ ├── tile19.txt │ │ │ │ ├── tile2.txt │ │ │ │ ├── tile20.txt │ │ │ │ ├── tile21.txt │ │ │ │ ├── tile22.txt │ │ │ │ ├── tile23.txt │ │ │ │ ├── tile24.txt │ │ │ │ ├── tile25.txt │ │ │ │ ├── tile26.txt │ │ │ │ ├── tile3.txt │ │ │ │ ├── tile4.txt │ │ │ │ ├── tile5.txt │ │ │ │ ├── tile6.txt │ │ │ │ ├── tile7.txt │ │ │ │ ├── tile8.txt │ │ │ │ └── tile9.txt │ │ │ ├── 7x8/ │ │ │ │ ├── tile0.txt │ │ │ │ ├── tile1.txt │ │ │ │ ├── tile10.txt │ │ │ │ ├── tile11.txt │ │ │ │ ├── tile12.txt │ │ │ │ ├── tile13.txt │ │ │ │ ├── tile14.txt │ │ │ │ ├── tile15.txt │ │ │ │ ├── tile16.txt │ │ │ │ ├── tile17.txt │ │ │ │ ├── tile18.txt │ │ │ │ ├── tile19.txt │ │ │ │ ├── tile2.txt │ │ │ │ ├── tile20.txt │ │ │ │ ├── tile21.txt │ │ │ │ ├── tile22.txt │ │ │ │ ├── tile23.txt │ │ │ │ ├── tile24.txt │ │ │ │ ├── tile25.txt │ │ │ │ ├── tile26.txt │ │ │ │ ├── tile3.txt │ │ │ │ ├── tile4.txt │ │ │ │ ├── tile5.txt │ │ │ │ ├── tile6.txt │ │ │ │ ├── tile7.txt │ │ │ │ ├── tile8.txt │ │ │ │ └── tile9.txt │ │ │ ├── 8x6/ │ │ │ │ ├── tile0.txt │ │ │ │ ├── tile1.txt │ │ │ │ ├── tile10.txt │ │ │ │ ├── tile11.txt │ │ │ │ ├── tile12.txt │ │ │ │ ├── tile13.txt │ │ │ │ ├── tile14.txt │ │ │ │ ├── tile15.txt │ │ │ │ ├── tile16.txt │ │ │ │ ├── tile17.txt │ │ │ │ ├── tile18.txt │ │ │ │ ├── tile19.txt │ │ │ │ ├── tile2.txt │ │ │ │ ├── tile20.txt │ │ │ │ ├── tile21.txt │ │ │ │ ├── tile22.txt │ │ │ │ ├── tile23.txt │ │ │ │ ├── tile24.txt │ │ │ │ ├── tile25.txt │ │ │ │ ├── tile26.txt │ │ │ │ ├── tile3.txt │ │ │ │ ├── tile4.txt │ │ │ │ ├── tile5.txt │ │ │ │ ├── tile6.txt │ │ │ │ ├── tile7.txt │ │ │ │ ├── tile8.txt │ │ │ │ └── tile9.txt │ │ │ ├── 8x8/ │ │ │ │ ├── tile0.txt │ │ │ │ ├── tile1.txt │ │ │ │ ├── tile10.txt │ │ │ │ ├── tile11.txt │ │ │ │ ├── tile12.txt │ │ │ │ ├── tile13.txt │ │ │ │ ├── tile14.txt │ │ │ │ ├── tile15.txt │ │ │ │ ├── tile16.txt │ │ │ │ ├── tile17.txt │ │ │ │ ├── tile18.txt │ │ │ │ ├── tile19.txt │ │ │ │ ├── tile2.txt │ │ │ │ ├── tile20.txt │ │ │ │ ├── tile21.txt │ │ │ │ ├── tile22.txt │ │ │ │ ├── tile23.txt │ │ │ │ ├── tile24.txt │ │ │ │ ├── tile25.txt │ │ │ │ ├── tile26.txt │ │ │ │ ├── tile3.txt │ │ │ │ ├── tile4.txt │ │ │ │ ├── tile5.txt │ │ │ │ ├── tile6.txt │ │ │ │ ├── tile7.txt │ │ │ │ ├── tile8.txt │ │ │ │ └── tile9.txt │ │ │ └── ASCII/ │ │ │ └── char_tiles.h │ │ ├── snake/ │ │ │ ├── Makefile.snake │ │ │ ├── config/ │ │ │ │ ├── game_config.mk │ │ │ │ └── project_config.mk │ │ │ ├── control_player.h │ │ │ ├── doc/ │ │ │ │ ├── game_play.txt │ │ │ │ ├── info.txt │ │ │ │ ├── levels.txt │ │ │ │ └── whatsnew.txt │ │ │ ├── game_text.h │ │ │ ├── init_images.h │ │ │ ├── levels.h │ │ │ ├── makefiles/ │ │ │ │ └── Makefile.override │ │ │ ├── memory/ │ │ │ │ ├── c16_memory.s │ │ │ │ ├── creativision_memory.s │ │ │ │ ├── gamate_memory.s │ │ │ │ └── vic20_memory.s │ │ │ ├── move_snake.h │ │ │ ├── settings.h │ │ │ ├── shapes/ │ │ │ │ ├── 6x8/ │ │ │ │ │ └── shape25.txt │ │ │ │ ├── 6x9/ │ │ │ │ │ └── shape25.txt │ │ │ │ ├── 7x8/ │ │ │ │ │ └── shape25.txt │ │ │ │ ├── 8x6/ │ │ │ │ │ ├── shape0.txt │ │ │ │ │ ├── shape1.txt │ │ │ │ │ ├── shape10.txt │ │ │ │ │ ├── shape11.txt │ │ │ │ │ ├── shape12.txt │ │ │ │ │ ├── shape13.txt │ │ │ │ │ ├── shape15.txt │ │ │ │ │ ├── shape17.txt │ │ │ │ │ ├── shape18.txt │ │ │ │ │ ├── shape2.txt │ │ │ │ │ ├── shape25.txt │ │ │ │ │ ├── shape3.txt │ │ │ │ │ ├── shape4.txt │ │ │ │ │ ├── shape5.txt │ │ │ │ │ ├── shape7.txt │ │ │ │ │ └── shape8.txt │ │ │ │ └── 8x8/ │ │ │ │ └── shape25.txt │ │ │ ├── snake.h │ │ │ ├── split_files/ │ │ │ │ ├── control_player.c │ │ │ │ ├── game_text.c │ │ │ │ ├── main.c │ │ │ │ ├── move_snake.c │ │ │ │ ├── snake.c │ │ │ │ └── variables.c │ │ │ ├── tiles/ │ │ │ │ ├── 6x8/ │ │ │ │ │ ├── tile0.txt │ │ │ │ │ ├── tile1.txt │ │ │ │ │ ├── tile10.txt │ │ │ │ │ ├── tile11.txt │ │ │ │ │ ├── tile12.txt │ │ │ │ │ ├── tile13.txt │ │ │ │ │ ├── tile14.txt │ │ │ │ │ ├── tile15.txt │ │ │ │ │ ├── tile16.txt │ │ │ │ │ ├── tile17.txt │ │ │ │ │ ├── tile18.txt │ │ │ │ │ ├── tile19.txt │ │ │ │ │ ├── tile2.txt │ │ │ │ │ ├── tile20.txt │ │ │ │ │ ├── tile21.txt │ │ │ │ │ ├── tile22.txt │ │ │ │ │ ├── tile23.txt │ │ │ │ │ ├── tile24.txt │ │ │ │ │ ├── tile25.txt │ │ │ │ │ ├── tile3.txt │ │ │ │ │ ├── tile4.txt │ │ │ │ │ ├── tile5.txt │ │ │ │ │ ├── tile6.txt │ │ │ │ │ ├── tile7.txt │ │ │ │ │ ├── tile8.txt │ │ │ │ │ └── tile9.txt │ │ │ │ ├── 6x9/ │ │ │ │ │ ├── tile0.txt │ │ │ │ │ ├── tile1.txt │ │ │ │ │ ├── tile10.txt │ │ │ │ │ ├── tile11.txt │ │ │ │ │ ├── tile12.txt │ │ │ │ │ ├── tile13.txt │ │ │ │ │ ├── tile14.txt │ │ │ │ │ ├── tile15.txt │ │ │ │ │ ├── tile16.txt │ │ │ │ │ ├── tile17.txt │ │ │ │ │ ├── tile18.txt │ │ │ │ │ ├── tile19.txt │ │ │ │ │ ├── tile2.txt │ │ │ │ │ ├── tile20.txt │ │ │ │ │ ├── tile21.txt │ │ │ │ │ ├── tile22.txt │ │ │ │ │ ├── tile23.txt │ │ │ │ │ ├── tile24.txt │ │ │ │ │ ├── tile25.txt │ │ │ │ │ ├── tile3.txt │ │ │ │ │ ├── tile4.txt │ │ │ │ │ ├── tile5.txt │ │ │ │ │ ├── tile6.txt │ │ │ │ │ ├── tile7.txt │ │ │ │ │ ├── tile8.txt │ │ │ │ │ └── tile9.txt │ │ │ │ ├── 7x8/ │ │ │ │ │ ├── tile0.txt │ │ │ │ │ ├── tile1.txt │ │ │ │ │ ├── tile10.txt │ │ │ │ │ ├── tile11.txt │ │ │ │ │ ├── tile12.txt │ │ │ │ │ ├── tile13.txt │ │ │ │ │ ├── tile14.txt │ │ │ │ │ ├── tile15.txt │ │ │ │ │ ├── tile16.txt │ │ │ │ │ ├── tile17.txt │ │ │ │ │ ├── tile18.txt │ │ │ │ │ ├── tile19.txt │ │ │ │ │ ├── tile2.txt │ │ │ │ │ ├── tile20.txt │ │ │ │ │ ├── tile21.txt │ │ │ │ │ ├── tile22.txt │ │ │ │ │ ├── tile23.txt │ │ │ │ │ ├── tile24.txt │ │ │ │ │ ├── tile25.txt │ │ │ │ │ ├── tile3.txt │ │ │ │ │ ├── tile4.txt │ │ │ │ │ ├── tile5.txt │ │ │ │ │ ├── tile6.txt │ │ │ │ │ ├── tile7.txt │ │ │ │ │ ├── tile8.txt │ │ │ │ │ └── tile9.txt │ │ │ │ ├── 8x6/ │ │ │ │ │ ├── tile0.txt │ │ │ │ │ ├── tile1.txt │ │ │ │ │ ├── tile10.txt │ │ │ │ │ ├── tile11.txt │ │ │ │ │ ├── tile12.txt │ │ │ │ │ ├── tile13.txt │ │ │ │ │ ├── tile14.txt │ │ │ │ │ ├── tile15.txt │ │ │ │ │ ├── tile16.txt │ │ │ │ │ ├── tile17.txt │ │ │ │ │ ├── tile18.txt │ │ │ │ │ ├── tile19.txt │ │ │ │ │ ├── tile2.txt │ │ │ │ │ ├── tile20.txt │ │ │ │ │ ├── tile21.txt │ │ │ │ │ ├── tile22.txt │ │ │ │ │ ├── tile23.txt │ │ │ │ │ ├── tile24.txt │ │ │ │ │ ├── tile25.txt │ │ │ │ │ ├── tile3.txt │ │ │ │ │ ├── tile4.txt │ │ │ │ │ ├── tile5.txt │ │ │ │ │ ├── tile6.txt │ │ │ │ │ ├── tile7.txt │ │ │ │ │ ├── tile8.txt │ │ │ │ │ └── tile9.txt │ │ │ │ ├── 8x8/ │ │ │ │ │ ├── tile0.txt │ │ │ │ │ ├── tile1.txt │ │ │ │ │ ├── tile10.txt │ │ │ │ │ ├── tile11.txt │ │ │ │ │ ├── tile12.txt │ │ │ │ │ ├── tile13.txt │ │ │ │ │ ├── tile14.txt │ │ │ │ │ ├── tile15.txt │ │ │ │ │ ├── tile16.txt │ │ │ │ │ ├── tile17.txt │ │ │ │ │ ├── tile18.txt │ │ │ │ │ ├── tile19.txt │ │ │ │ │ ├── tile2.txt │ │ │ │ │ ├── tile20.txt │ │ │ │ │ ├── tile21.txt │ │ │ │ │ ├── tile22.txt │ │ │ │ │ ├── tile23.txt │ │ │ │ │ ├── tile24.txt │ │ │ │ │ ├── tile25.txt │ │ │ │ │ ├── tile3.txt │ │ │ │ │ ├── tile4.txt │ │ │ │ │ ├── tile5.txt │ │ │ │ │ ├── tile6.txt │ │ │ │ │ ├── tile7.txt │ │ │ │ │ ├── tile8.txt │ │ │ │ │ └── tile9.txt │ │ │ │ └── ASCII/ │ │ │ │ ├── aquarius/ │ │ │ │ │ └── aquarius_char_tiles.h │ │ │ │ └── char_tiles.h │ │ │ └── variables.h │ │ ├── stinger/ │ │ │ ├── Makefile.stinger │ │ │ ├── config/ │ │ │ │ ├── game_config.mk │ │ │ │ └── project_config.mk │ │ │ ├── docs/ │ │ │ │ ├── empty_stinger1.txt │ │ │ │ ├── empty_stinger2.txt │ │ │ │ ├── score.txt │ │ │ │ ├── stinger.txt │ │ │ │ ├── stinger1.txt │ │ │ │ └── stinger2.txt │ │ │ ├── images.h │ │ │ ├── main.c │ │ │ ├── makefiles/ │ │ │ │ └── Makefile.override │ │ │ ├── shapes/ │ │ │ │ ├── 6x8/ │ │ │ │ │ ├── shape0.txt │ │ │ │ │ ├── shape1.txt │ │ │ │ │ ├── shape10.txt │ │ │ │ │ ├── shape11.txt │ │ │ │ │ ├── shape12.txt │ │ │ │ │ ├── shape13.txt │ │ │ │ │ ├── shape14.txt │ │ │ │ │ ├── shape15.txt │ │ │ │ │ ├── shape16.txt │ │ │ │ │ ├── shape17.txt │ │ │ │ │ ├── shape18.txt │ │ │ │ │ ├── shape19.txt │ │ │ │ │ ├── shape2.txt │ │ │ │ │ ├── shape20.txt │ │ │ │ │ ├── shape21.txt │ │ │ │ │ ├── shape22.txt │ │ │ │ │ ├── shape23.txt │ │ │ │ │ ├── shape24.txt │ │ │ │ │ ├── shape25.txt │ │ │ │ │ ├── shape26.txt │ │ │ │ │ ├── shape3.txt │ │ │ │ │ ├── shape4.txt │ │ │ │ │ ├── shape5.txt │ │ │ │ │ ├── shape6.txt │ │ │ │ │ ├── shape7.txt │ │ │ │ │ ├── shape8.txt │ │ │ │ │ └── shape9.txt │ │ │ │ ├── 6x9/ │ │ │ │ │ ├── shape0.txt │ │ │ │ │ ├── shape1.txt │ │ │ │ │ ├── shape10.txt │ │ │ │ │ ├── shape11.txt │ │ │ │ │ ├── shape12.txt │ │ │ │ │ ├── shape13.txt │ │ │ │ │ ├── shape14.txt │ │ │ │ │ ├── shape15.txt │ │ │ │ │ ├── shape16.txt │ │ │ │ │ ├── shape17.txt │ │ │ │ │ ├── shape18.txt │ │ │ │ │ ├── shape19.txt │ │ │ │ │ ├── shape2.txt │ │ │ │ │ ├── shape20.txt │ │ │ │ │ ├── shape21.txt │ │ │ │ │ ├── shape22.txt │ │ │ │ │ ├── shape23.txt │ │ │ │ │ ├── shape24.txt │ │ │ │ │ ├── shape25.txt │ │ │ │ │ ├── shape26.txt │ │ │ │ │ ├── shape3.txt │ │ │ │ │ ├── shape4.txt │ │ │ │ │ ├── shape5.txt │ │ │ │ │ ├── shape6.txt │ │ │ │ │ ├── shape7.txt │ │ │ │ │ ├── shape8.txt │ │ │ │ │ └── shape9.txt │ │ │ │ ├── 7x8/ │ │ │ │ │ ├── shape0.txt │ │ │ │ │ ├── shape1.txt │ │ │ │ │ ├── shape10.txt │ │ │ │ │ ├── shape11.txt │ │ │ │ │ ├── shape12.txt │ │ │ │ │ ├── shape13.txt │ │ │ │ │ ├── shape14.txt │ │ │ │ │ ├── shape15.txt │ │ │ │ │ ├── shape16.txt │ │ │ │ │ ├── shape17.txt │ │ │ │ │ ├── shape18.txt │ │ │ │ │ ├── shape19.txt │ │ │ │ │ ├── shape2.txt │ │ │ │ │ ├── shape20.txt │ │ │ │ │ ├── shape21.txt │ │ │ │ │ ├── shape22.txt │ │ │ │ │ ├── shape23.txt │ │ │ │ │ ├── shape24.txt │ │ │ │ │ ├── shape25.txt │ │ │ │ │ ├── shape26.txt │ │ │ │ │ ├── shape3.txt │ │ │ │ │ ├── shape4.txt │ │ │ │ │ ├── shape5.txt │ │ │ │ │ ├── shape6.txt │ │ │ │ │ ├── shape7.txt │ │ │ │ │ ├── shape8.txt │ │ │ │ │ └── shape9.txt │ │ │ │ ├── 8x6/ │ │ │ │ │ ├── shape0.txt │ │ │ │ │ ├── shape1.txt │ │ │ │ │ ├── shape10.txt │ │ │ │ │ ├── shape11.txt │ │ │ │ │ ├── shape12.txt │ │ │ │ │ ├── shape13.txt │ │ │ │ │ ├── shape14.txt │ │ │ │ │ ├── shape15.txt │ │ │ │ │ ├── shape16.txt │ │ │ │ │ ├── shape17.txt │ │ │ │ │ ├── shape18.txt │ │ │ │ │ ├── shape19.txt │ │ │ │ │ ├── shape2.txt │ │ │ │ │ ├── shape20.txt │ │ │ │ │ ├── shape21.txt │ │ │ │ │ ├── shape22.txt │ │ │ │ │ ├── shape23.txt │ │ │ │ │ ├── shape24.txt │ │ │ │ │ ├── shape25.txt │ │ │ │ │ ├── shape26.txt │ │ │ │ │ ├── shape3.txt │ │ │ │ │ ├── shape4.txt │ │ │ │ │ ├── shape5.txt │ │ │ │ │ ├── shape6.txt │ │ │ │ │ ├── shape7.txt │ │ │ │ │ ├── shape8.txt │ │ │ │ │ └── shape9.txt │ │ │ │ └── 8x8/ │ │ │ │ ├── shape0.txt │ │ │ │ ├── shape1.txt │ │ │ │ ├── shape10.txt │ │ │ │ ├── shape11.txt │ │ │ │ ├── shape12.txt │ │ │ │ ├── shape13.txt │ │ │ │ ├── shape14.txt │ │ │ │ ├── shape15.txt │ │ │ │ ├── shape16.txt │ │ │ │ ├── shape17.txt │ │ │ │ ├── shape18.txt │ │ │ │ ├── shape19.txt │ │ │ │ ├── shape2.txt │ │ │ │ ├── shape20.txt │ │ │ │ ├── shape21.txt │ │ │ │ ├── shape22.txt │ │ │ │ ├── shape23.txt │ │ │ │ ├── shape24.txt │ │ │ │ ├── shape25.txt │ │ │ │ ├── shape26.txt │ │ │ │ ├── shape3.txt │ │ │ │ ├── shape4.txt │ │ │ │ ├── shape5.txt │ │ │ │ ├── shape6.txt │ │ │ │ ├── shape7.txt │ │ │ │ ├── shape8.txt │ │ │ │ └── shape9.txt │ │ │ └── tiles/ │ │ │ ├── 6x8/ │ │ │ │ ├── tile0.txt │ │ │ │ ├── tile1.txt │ │ │ │ ├── tile10.txt │ │ │ │ ├── tile11.txt │ │ │ │ ├── tile12.txt │ │ │ │ ├── tile13.txt │ │ │ │ ├── tile14.txt │ │ │ │ ├── tile15.txt │ │ │ │ ├── tile16.txt │ │ │ │ ├── tile17.txt │ │ │ │ ├── tile18.txt │ │ │ │ ├── tile19.txt │ │ │ │ ├── tile2.txt │ │ │ │ ├── tile20.txt │ │ │ │ ├── tile21.txt │ │ │ │ ├── tile22.txt │ │ │ │ ├── tile23.txt │ │ │ │ ├── tile24.txt │ │ │ │ ├── tile25.txt │ │ │ │ ├── tile26.txt │ │ │ │ ├── tile3.txt │ │ │ │ ├── tile4.txt │ │ │ │ ├── tile5.txt │ │ │ │ ├── tile6.txt │ │ │ │ ├── tile7.txt │ │ │ │ ├── tile8.txt │ │ │ │ └── tile9.txt │ │ │ ├── 6x9/ │ │ │ │ ├── tile0.txt │ │ │ │ ├── tile1.txt │ │ │ │ ├── tile10.txt │ │ │ │ ├── tile11.txt │ │ │ │ ├── tile12.txt │ │ │ │ ├── tile13.txt │ │ │ │ ├── tile14.txt │ │ │ │ ├── tile15.txt │ │ │ │ ├── tile16.txt │ │ │ │ ├── tile17.txt │ │ │ │ ├── tile18.txt │ │ │ │ ├── tile19.txt │ │ │ │ ├── tile2.txt │ │ │ │ ├── tile20.txt │ │ │ │ ├── tile21.txt │ │ │ │ ├── tile22.txt │ │ │ │ ├── tile23.txt │ │ │ │ ├── tile24.txt │ │ │ │ ├── tile25.txt │ │ │ │ ├── tile26.txt │ │ │ │ ├── tile3.txt │ │ │ │ ├── tile4.txt │ │ │ │ ├── tile5.txt │ │ │ │ ├── tile6.txt │ │ │ │ ├── tile7.txt │ │ │ │ ├── tile8.txt │ │ │ │ └── tile9.txt │ │ │ ├── 7x8/ │ │ │ │ ├── tile0.txt │ │ │ │ ├── tile1.txt │ │ │ │ ├── tile10.txt │ │ │ │ ├── tile11.txt │ │ │ │ ├── tile12.txt │ │ │ │ ├── tile13.txt │ │ │ │ ├── tile14.txt │ │ │ │ ├── tile15.txt │ │ │ │ ├── tile16.txt │ │ │ │ ├── tile17.txt │ │ │ │ ├── tile18.txt │ │ │ │ ├── tile19.txt │ │ │ │ ├── tile2.txt │ │ │ │ ├── tile20.txt │ │ │ │ ├── tile21.txt │ │ │ │ ├── tile22.txt │ │ │ │ ├── tile23.txt │ │ │ │ ├── tile24.txt │ │ │ │ ├── tile25.txt │ │ │ │ ├── tile26.txt │ │ │ │ ├── tile3.txt │ │ │ │ ├── tile4.txt │ │ │ │ ├── tile5.txt │ │ │ │ ├── tile6.txt │ │ │ │ ├── tile7.txt │ │ │ │ ├── tile8.txt │ │ │ │ └── tile9.txt │ │ │ ├── 8x6/ │ │ │ │ ├── tile0.txt │ │ │ │ ├── tile1.txt │ │ │ │ ├── tile10.txt │ │ │ │ ├── tile11.txt │ │ │ │ ├── tile12.txt │ │ │ │ ├── tile13.txt │ │ │ │ ├── tile14.txt │ │ │ │ ├── tile15.txt │ │ │ │ ├── tile16.txt │ │ │ │ ├── tile17.txt │ │ │ │ ├── tile18.txt │ │ │ │ ├── tile19.txt │ │ │ │ ├── tile2.txt │ │ │ │ ├── tile20.txt │ │ │ │ ├── tile21.txt │ │ │ │ ├── tile22.txt │ │ │ │ ├── tile23.txt │ │ │ │ ├── tile24.txt │ │ │ │ ├── tile25.txt │ │ │ │ ├── tile26.txt │ │ │ │ ├── tile3.txt │ │ │ │ ├── tile4.txt │ │ │ │ ├── tile5.txt │ │ │ │ ├── tile6.txt │ │ │ │ ├── tile7.txt │ │ │ │ ├── tile8.txt │ │ │ │ └── tile9.txt │ │ │ ├── 8x8/ │ │ │ │ ├── tile0.txt │ │ │ │ ├── tile1.txt │ │ │ │ ├── tile10.txt │ │ │ │ ├── tile11.txt │ │ │ │ ├── tile12.txt │ │ │ │ ├── tile13.txt │ │ │ │ ├── tile14.txt │ │ │ │ ├── tile15.txt │ │ │ │ ├── tile16.txt │ │ │ │ ├── tile17.txt │ │ │ │ ├── tile18.txt │ │ │ │ ├── tile19.txt │ │ │ │ ├── tile2.txt │ │ │ │ ├── tile20.txt │ │ │ │ ├── tile21.txt │ │ │ │ ├── tile22.txt │ │ │ │ ├── tile23.txt │ │ │ │ ├── tile24.txt │ │ │ │ ├── tile25.txt │ │ │ │ ├── tile26.txt │ │ │ │ ├── tile3.txt │ │ │ │ ├── tile4.txt │ │ │ │ ├── tile5.txt │ │ │ │ ├── tile6.txt │ │ │ │ ├── tile7.txt │ │ │ │ ├── tile8.txt │ │ │ │ └── tile9.txt │ │ │ └── ASCII/ │ │ │ ├── aquarius/ │ │ │ │ └── aquarius_char_tiles.h │ │ │ └── char_tiles.h │ │ ├── trex/ │ │ │ ├── Makefile.trex │ │ │ ├── config/ │ │ │ │ ├── game_config.mk │ │ │ │ └── project_config.mk │ │ │ ├── docs/ │ │ │ │ ├── dino.txt │ │ │ │ ├── shape2x8left.txt │ │ │ │ ├── shape2x8right.txt │ │ │ │ ├── tile2x8left.txt │ │ │ │ └── tile2x8right.txt │ │ │ ├── images.h │ │ │ ├── main.c │ │ │ ├── shapes/ │ │ │ │ ├── 6x8/ │ │ │ │ │ ├── shape0.txt │ │ │ │ │ ├── shape1.txt │ │ │ │ │ ├── shape10.txt │ │ │ │ │ ├── shape11.txt │ │ │ │ │ ├── shape12.txt │ │ │ │ │ ├── shape13.txt │ │ │ │ │ ├── shape14.txt │ │ │ │ │ ├── shape15.txt │ │ │ │ │ ├── shape16.txt │ │ │ │ │ ├── shape17.txt │ │ │ │ │ ├── shape18.txt │ │ │ │ │ ├── shape19.txt │ │ │ │ │ ├── shape2.txt │ │ │ │ │ ├── shape20.txt │ │ │ │ │ ├── shape21.txt │ │ │ │ │ ├── shape22.txt │ │ │ │ │ ├── shape23.txt │ │ │ │ │ ├── shape24.txt │ │ │ │ │ ├── shape25.txt │ │ │ │ │ ├── shape26.txt │ │ │ │ │ ├── shape2x8left.txt │ │ │ │ │ ├── shape2x8right.txt │ │ │ │ │ ├── shape3.txt │ │ │ │ │ ├── shape4.txt │ │ │ │ │ ├── shape5.txt │ │ │ │ │ ├── shape6.txt │ │ │ │ │ ├── shape7.txt │ │ │ │ │ ├── shape8.txt │ │ │ │ │ └── shape9.txt │ │ │ │ ├── 6x9/ │ │ │ │ │ ├── shape0.txt │ │ │ │ │ ├── shape1.txt │ │ │ │ │ ├── shape10.txt │ │ │ │ │ ├── shape11.txt │ │ │ │ │ ├── shape12.txt │ │ │ │ │ ├── shape13.txt │ │ │ │ │ ├── shape14.txt │ │ │ │ │ ├── shape15.txt │ │ │ │ │ ├── shape16.txt │ │ │ │ │ ├── shape17.txt │ │ │ │ │ ├── shape18.txt │ │ │ │ │ ├── shape19.txt │ │ │ │ │ ├── shape2.txt │ │ │ │ │ ├── shape20.txt │ │ │ │ │ ├── shape21.txt │ │ │ │ │ ├── shape22.txt │ │ │ │ │ ├── shape23.txt │ │ │ │ │ ├── shape24.txt │ │ │ │ │ ├── shape25.txt │ │ │ │ │ ├── shape26.txt │ │ │ │ │ ├── shape2x8left.txt │ │ │ │ │ ├── shape2x8right.txt │ │ │ │ │ ├── shape3.txt │ │ │ │ │ ├── shape4.txt │ │ │ │ │ ├── shape5.txt │ │ │ │ │ ├── shape6.txt │ │ │ │ │ ├── shape7.txt │ │ │ │ │ ├── shape8.txt │ │ │ │ │ └── shape9.txt │ │ │ │ ├── 7x8/ │ │ │ │ │ ├── shape0.txt │ │ │ │ │ ├── shape1.txt │ │ │ │ │ ├── shape10.txt │ │ │ │ │ ├── shape11.txt │ │ │ │ │ ├── shape12.txt │ │ │ │ │ ├── shape13.txt │ │ │ │ │ ├── shape14.txt │ │ │ │ │ ├── shape15.txt │ │ │ │ │ ├── shape16.txt │ │ │ │ │ ├── shape17.txt │ │ │ │ │ ├── shape18.txt │ │ │ │ │ ├── shape19.txt │ │ │ │ │ ├── shape2.txt │ │ │ │ │ ├── shape20.txt │ │ │ │ │ ├── shape21.txt │ │ │ │ │ ├── shape22.txt │ │ │ │ │ ├── shape23.txt │ │ │ │ │ ├── shape24.txt │ │ │ │ │ ├── shape25.txt │ │ │ │ │ ├── shape26.txt │ │ │ │ │ ├── shape2x8left.txt │ │ │ │ │ ├── shape2x8right.txt │ │ │ │ │ ├── shape3.txt │ │ │ │ │ ├── shape4.txt │ │ │ │ │ ├── shape5.txt │ │ │ │ │ ├── shape6.txt │ │ │ │ │ ├── shape7.txt │ │ │ │ │ ├── shape8.txt │ │ │ │ │ └── shape9.txt │ │ │ │ ├── 8x6/ │ │ │ │ │ ├── shape0.txt │ │ │ │ │ ├── shape1.txt │ │ │ │ │ ├── shape10.txt │ │ │ │ │ ├── shape11.txt │ │ │ │ │ ├── shape12.txt │ │ │ │ │ ├── shape13.txt │ │ │ │ │ ├── shape14.txt │ │ │ │ │ ├── shape15.txt │ │ │ │ │ ├── shape16.txt │ │ │ │ │ ├── shape17.txt │ │ │ │ │ ├── shape18.txt │ │ │ │ │ ├── shape19.txt │ │ │ │ │ ├── shape2.txt │ │ │ │ │ ├── shape20.txt │ │ │ │ │ ├── shape21.txt │ │ │ │ │ ├── shape22.txt │ │ │ │ │ ├── shape23.txt │ │ │ │ │ ├── shape24.txt │ │ │ │ │ ├── shape25.txt │ │ │ │ │ ├── shape26.txt │ │ │ │ │ ├── shape2x8left.txt │ │ │ │ │ ├── shape2x8right.txt │ │ │ │ │ ├── shape3.txt │ │ │ │ │ ├── shape4.txt │ │ │ │ │ ├── shape5.txt │ │ │ │ │ ├── shape6.txt │ │ │ │ │ ├── shape7.txt │ │ │ │ │ ├── shape8.txt │ │ │ │ │ └── shape9.txt │ │ │ │ └── 8x8/ │ │ │ │ ├── bird12x8left.txt │ │ │ │ ├── bird12x8right.txt │ │ │ │ ├── shape0.txt │ │ │ │ ├── shape1.txt │ │ │ │ ├── shape10.txt │ │ │ │ ├── shape11.txt │ │ │ │ ├── shape12.txt │ │ │ │ ├── shape13.txt │ │ │ │ ├── shape14.txt │ │ │ │ ├── shape15.txt │ │ │ │ ├── shape16.txt │ │ │ │ ├── shape17.txt │ │ │ │ ├── shape18.txt │ │ │ │ ├── shape19.txt │ │ │ │ ├── shape2.txt │ │ │ │ ├── shape20.txt │ │ │ │ ├── shape21.txt │ │ │ │ ├── shape22.txt │ │ │ │ ├── shape23.txt │ │ │ │ ├── shape24.txt │ │ │ │ ├── shape25.txt │ │ │ │ ├── shape26.txt │ │ │ │ ├── shape3.txt │ │ │ │ ├── shape4.txt │ │ │ │ ├── shape5.txt │ │ │ │ ├── shape6.txt │ │ │ │ ├── shape7.txt │ │ │ │ ├── shape8.txt │ │ │ │ └── shape9.txt │ │ │ └── tiles/ │ │ │ ├── 6x8/ │ │ │ │ ├── tile0.txt │ │ │ │ ├── tile1.txt │ │ │ │ ├── tile10.txt │ │ │ │ ├── tile11.txt │ │ │ │ ├── tile12.txt │ │ │ │ ├── tile13.txt │ │ │ │ ├── tile14.txt │ │ │ │ ├── tile15.txt │ │ │ │ ├── tile16.txt │ │ │ │ ├── tile17.txt │ │ │ │ ├── tile18.txt │ │ │ │ ├── tile19.txt │ │ │ │ ├── tile2.txt │ │ │ │ ├── tile20.txt │ │ │ │ ├── tile21.txt │ │ │ │ ├── tile22.txt │ │ │ │ ├── tile23.txt │ │ │ │ ├── tile24.txt │ │ │ │ ├── tile25.txt │ │ │ │ ├── tile26.txt │ │ │ │ ├── tile2x8left.txt │ │ │ │ ├── tile2x8right.txt │ │ │ │ ├── tile3.txt │ │ │ │ ├── tile4.txt │ │ │ │ ├── tile5.txt │ │ │ │ ├── tile6.txt │ │ │ │ ├── tile7.txt │ │ │ │ ├── tile8.txt │ │ │ │ └── tile9.txt │ │ │ ├── 6x9/ │ │ │ │ ├── tile0.txt │ │ │ │ ├── tile1.txt │ │ │ │ ├── tile10.txt │ │ │ │ ├── tile11.txt │ │ │ │ ├── tile12.txt │ │ │ │ ├── tile13.txt │ │ │ │ ├── tile14.txt │ │ │ │ ├── tile15.txt │ │ │ │ ├── tile16.txt │ │ │ │ ├── tile17.txt │ │ │ │ ├── tile18.txt │ │ │ │ ├── tile19.txt │ │ │ │ ├── tile2.txt │ │ │ │ ├── tile20.txt │ │ │ │ ├── tile21.txt │ │ │ │ ├── tile22.txt │ │ │ │ ├── tile23.txt │ │ │ │ ├── tile24.txt │ │ │ │ ├── tile25.txt │ │ │ │ ├── tile26.txt │ │ │ │ ├── tile2x8left.txt │ │ │ │ ├── tile2x8right.txt │ │ │ │ ├── tile3.txt │ │ │ │ ├── tile4.txt │ │ │ │ ├── tile5.txt │ │ │ │ ├── tile6.txt │ │ │ │ ├── tile7.txt │ │ │ │ ├── tile8.txt │ │ │ │ └── tile9.txt │ │ │ ├── 7x8/ │ │ │ │ ├── tile0.txt │ │ │ │ ├── tile1.txt │ │ │ │ ├── tile10.txt │ │ │ │ ├── tile11.txt │ │ │ │ ├── tile12.txt │ │ │ │ ├── tile13.txt │ │ │ │ ├── tile14.txt │ │ │ │ ├── tile15.txt │ │ │ │ ├── tile16.txt │ │ │ │ ├── tile17.txt │ │ │ │ ├── tile18.txt │ │ │ │ ├── tile19.txt │ │ │ │ ├── tile2.txt │ │ │ │ ├── tile20.txt │ │ │ │ ├── tile21.txt │ │ │ │ ├── tile22.txt │ │ │ │ ├── tile23.txt │ │ │ │ ├── tile24.txt │ │ │ │ ├── tile25.txt │ │ │ │ ├── tile26.txt │ │ │ │ ├── tile2x8left.txt │ │ │ │ ├── tile2x8right.txt │ │ │ │ ├── tile3.txt │ │ │ │ ├── tile4.txt │ │ │ │ ├── tile5.txt │ │ │ │ ├── tile6.txt │ │ │ │ ├── tile7.txt │ │ │ │ ├── tile8.txt │ │ │ │ └── tile9.txt │ │ │ ├── 8x6/ │ │ │ │ ├── tile0.txt │ │ │ │ ├── tile1.txt │ │ │ │ ├── tile10.txt │ │ │ │ ├── tile11.txt │ │ │ │ ├── tile12.txt │ │ │ │ ├── tile13.txt │ │ │ │ ├── tile14.txt │ │ │ │ ├── tile15.txt │ │ │ │ ├── tile16.txt │ │ │ │ ├── tile17.txt │ │ │ │ ├── tile18.txt │ │ │ │ ├── tile19.txt │ │ │ │ ├── tile2.txt │ │ │ │ ├── tile20.txt │ │ │ │ ├── tile21.txt │ │ │ │ ├── tile22.txt │ │ │ │ ├── tile23.txt │ │ │ │ ├── tile24.txt │ │ │ │ ├── tile25.txt │ │ │ │ ├── tile26.txt │ │ │ │ ├── tile2x8left.txt │ │ │ │ ├── tile2x8right.txt │ │ │ │ ├── tile3.txt │ │ │ │ ├── tile4.txt │ │ │ │ ├── tile5.txt │ │ │ │ ├── tile6.txt │ │ │ │ ├── tile7.txt │ │ │ │ ├── tile8.txt │ │ │ │ └── tile9.txt │ │ │ ├── 8x8/ │ │ │ │ ├── tile0.txt │ │ │ │ ├── tile1.txt │ │ │ │ ├── tile10.txt │ │ │ │ ├── tile11.txt │ │ │ │ ├── tile12.txt │ │ │ │ ├── tile13.txt │ │ │ │ ├── tile14.txt │ │ │ │ ├── tile15.txt │ │ │ │ ├── tile16.txt │ │ │ │ ├── tile17.txt │ │ │ │ ├── tile18.txt │ │ │ │ ├── tile19.txt │ │ │ │ ├── tile2.txt │ │ │ │ ├── tile20.txt │ │ │ │ ├── tile21.txt │ │ │ │ ├── tile22.txt │ │ │ │ ├── tile23.txt │ │ │ │ ├── tile24.txt │ │ │ │ ├── tile25.txt │ │ │ │ ├── tile26.txt │ │ │ │ ├── tile3.txt │ │ │ │ ├── tile4.txt │ │ │ │ ├── tile5.txt │ │ │ │ ├── tile6.txt │ │ │ │ ├── tile7.txt │ │ │ │ ├── tile8.txt │ │ │ │ └── tile9.txt │ │ │ └── ASCII/ │ │ │ └── char_tiles.h │ │ └── verbix/ │ │ ├── Makefile.verbix │ │ ├── config/ │ │ │ ├── game_config.mk │ │ │ └── project_config.mk │ │ ├── dictionary.h │ │ ├── main.c │ │ ├── makefiles/ │ │ │ └── Makefile.override │ │ ├── shapes/ │ │ │ ├── 6x8/ │ │ │ │ ├── shape0.txt │ │ │ │ ├── shape1.txt │ │ │ │ ├── shape10.txt │ │ │ │ ├── shape11.txt │ │ │ │ ├── shape12.txt │ │ │ │ ├── shape13.txt │ │ │ │ ├── shape14.txt │ │ │ │ ├── shape15.txt │ │ │ │ ├── shape16.txt │ │ │ │ ├── shape17.txt │ │ │ │ ├── shape18.txt │ │ │ │ ├── shape19.txt │ │ │ │ ├── shape2.txt │ │ │ │ ├── shape20.txt │ │ │ │ ├── shape21.txt │ │ │ │ ├── shape22.txt │ │ │ │ ├── shape23.txt │ │ │ │ ├── shape24.txt │ │ │ │ ├── shape25.txt │ │ │ │ ├── shape26.txt │ │ │ │ ├── shape3.txt │ │ │ │ ├── shape4.txt │ │ │ │ ├── shape5.txt │ │ │ │ ├── shape6.txt │ │ │ │ ├── shape7.txt │ │ │ │ ├── shape8.txt │ │ │ │ └── shape9.txt │ │ │ ├── 6x9/ │ │ │ │ ├── shape0.txt │ │ │ │ ├── shape1.txt │ │ │ │ ├── shape10.txt │ │ │ │ ├── shape11.txt │ │ │ │ ├── shape12.txt │ │ │ │ ├── shape13.txt │ │ │ │ ├── shape14.txt │ │ │ │ ├── shape15.txt │ │ │ │ ├── shape16.txt │ │ │ │ ├── shape17.txt │ │ │ │ ├── shape18.txt │ │ │ │ ├── shape19.txt │ │ │ │ ├── shape2.txt │ │ │ │ ├── shape20.txt │ │ │ │ ├── shape21.txt │ │ │ │ ├── shape22.txt │ │ │ │ ├── shape23.txt │ │ │ │ ├── shape24.txt │ │ │ │ ├── shape25.txt │ │ │ │ ├── shape26.txt │ │ │ │ ├── shape3.txt │ │ │ │ ├── shape4.txt │ │ │ │ ├── shape5.txt │ │ │ │ ├── shape6.txt │ │ │ │ ├── shape7.txt │ │ │ │ ├── shape8.txt │ │ │ │ └── shape9.txt │ │ │ ├── 7x8/ │ │ │ │ ├── shape0.txt │ │ │ │ ├── shape1.txt │ │ │ │ ├── shape10.txt │ │ │ │ ├── shape11.txt │ │ │ │ ├── shape12.txt │ │ │ │ ├── shape13.txt │ │ │ │ ├── shape14.txt │ │ │ │ ├── shape15.txt │ │ │ │ ├── shape16.txt │ │ │ │ ├── shape17.txt │ │ │ │ ├── shape18.txt │ │ │ │ ├── shape19.txt │ │ │ │ ├── shape2.txt │ │ │ │ ├── shape20.txt │ │ │ │ ├── shape21.txt │ │ │ │ ├── shape22.txt │ │ │ │ ├── shape23.txt │ │ │ │ ├── shape24.txt │ │ │ │ ├── shape25.txt │ │ │ │ ├── shape26.txt │ │ │ │ ├── shape3.txt │ │ │ │ ├── shape4.txt │ │ │ │ ├── shape5.txt │ │ │ │ ├── shape6.txt │ │ │ │ ├── shape7.txt │ │ │ │ ├── shape8.txt │ │ │ │ └── shape9.txt │ │ │ ├── 8x6/ │ │ │ │ ├── shape0.txt │ │ │ │ ├── shape1.txt │ │ │ │ ├── shape10.txt │ │ │ │ ├── shape11.txt │ │ │ │ ├── shape12.txt │ │ │ │ ├── shape13.txt │ │ │ │ ├── shape14.txt │ │ │ │ ├── shape15.txt │ │ │ │ ├── shape16.txt │ │ │ │ ├── shape17.txt │ │ │ │ ├── shape18.txt │ │ │ │ ├── shape19.txt │ │ │ │ ├── shape2.txt │ │ │ │ ├── shape20.txt │ │ │ │ ├── shape21.txt │ │ │ │ ├── shape22.txt │ │ │ │ ├── shape23.txt │ │ │ │ ├── shape24.txt │ │ │ │ ├── shape25.txt │ │ │ │ ├── shape26.txt │ │ │ │ ├── shape3.txt │ │ │ │ ├── shape4.txt │ │ │ │ ├── shape5.txt │ │ │ │ ├── shape6.txt │ │ │ │ ├── shape7.txt │ │ │ │ ├── shape8.txt │ │ │ │ └── shape9.txt │ │ │ └── 8x8/ │ │ │ ├── shape0.txt │ │ │ ├── shape1.txt │ │ │ ├── shape10.txt │ │ │ ├── shape11.txt │ │ │ ├── shape12.txt │ │ │ ├── shape13.txt │ │ │ ├── shape14.txt │ │ │ ├── shape15.txt │ │ │ ├── shape16.txt │ │ │ ├── shape17.txt │ │ │ ├── shape18.txt │ │ │ ├── shape19.txt │ │ │ ├── shape2.txt │ │ │ ├── shape20.txt │ │ │ ├── shape21.txt │ │ │ ├── shape22.txt │ │ │ ├── shape23.txt │ │ │ ├── shape24.txt │ │ │ ├── shape25.txt │ │ │ ├── shape26.txt │ │ │ ├── shape3.txt │ │ │ ├── shape4.txt │ │ │ ├── shape5.txt │ │ │ ├── shape6.txt │ │ │ ├── shape7.txt │ │ │ ├── shape8.txt │ │ │ └── shape9.txt │ │ ├── tiles/ │ │ │ ├── 6x8/ │ │ │ │ ├── tile0.txt │ │ │ │ ├── tile1.txt │ │ │ │ ├── tile10.txt │ │ │ │ ├── tile11.txt │ │ │ │ ├── tile12.txt │ │ │ │ ├── tile13.txt │ │ │ │ ├── tile14.txt │ │ │ │ ├── tile15.txt │ │ │ │ ├── tile16.txt │ │ │ │ ├── tile17.txt │ │ │ │ ├── tile18.txt │ │ │ │ ├── tile19.txt │ │ │ │ ├── tile2.txt │ │ │ │ ├── tile20.txt │ │ │ │ ├── tile21.txt │ │ │ │ ├── tile22.txt │ │ │ │ ├── tile23.txt │ │ │ │ ├── tile24.txt │ │ │ │ ├── tile25.txt │ │ │ │ ├── tile25_ORIG.txt │ │ │ │ ├── tile26.txt │ │ │ │ ├── tile3.txt │ │ │ │ ├── tile4.txt │ │ │ │ ├── tile5.txt │ │ │ │ ├── tile6.txt │ │ │ │ ├── tile7.txt │ │ │ │ ├── tile8.txt │ │ │ │ └── tile9.txt │ │ │ ├── 6x9/ │ │ │ │ ├── tile0.txt │ │ │ │ ├── tile1.txt │ │ │ │ ├── tile10.txt │ │ │ │ ├── tile11.txt │ │ │ │ ├── tile12.txt │ │ │ │ ├── tile13.txt │ │ │ │ ├── tile14.txt │ │ │ │ ├── tile15.txt │ │ │ │ ├── tile16.txt │ │ │ │ ├── tile17.txt │ │ │ │ ├── tile18.txt │ │ │ │ ├── tile19.txt │ │ │ │ ├── tile2.txt │ │ │ │ ├── tile20.txt │ │ │ │ ├── tile21.txt │ │ │ │ ├── tile22.txt │ │ │ │ ├── tile23.txt │ │ │ │ ├── tile24.txt │ │ │ │ ├── tile25 _ORIG.txt │ │ │ │ ├── tile25.txt │ │ │ │ ├── tile26.txt │ │ │ │ ├── tile3.txt │ │ │ │ ├── tile4.txt │ │ │ │ ├── tile5.txt │ │ │ │ ├── tile6.txt │ │ │ │ ├── tile7.txt │ │ │ │ ├── tile8.txt │ │ │ │ └── tile9.txt │ │ │ ├── 7x8/ │ │ │ │ ├── tile0.txt │ │ │ │ ├── tile1.txt │ │ │ │ ├── tile10.txt │ │ │ │ ├── tile11.txt │ │ │ │ ├── tile12.txt │ │ │ │ ├── tile13.txt │ │ │ │ ├── tile14.txt │ │ │ │ ├── tile15.txt │ │ │ │ ├── tile16.txt │ │ │ │ ├── tile17.txt │ │ │ │ ├── tile18.txt │ │ │ │ ├── tile19.txt │ │ │ │ ├── tile2.txt │ │ │ │ ├── tile20.txt │ │ │ │ ├── tile21.txt │ │ │ │ ├── tile22.txt │ │ │ │ ├── tile23.txt │ │ │ │ ├── tile24.txt │ │ │ │ ├── tile25.txt │ │ │ │ ├── tile25_ORIG.txt │ │ │ │ ├── tile26.txt │ │ │ │ ├── tile3.txt │ │ │ │ ├── tile4.txt │ │ │ │ ├── tile5.txt │ │ │ │ ├── tile6.txt │ │ │ │ ├── tile7.txt │ │ │ │ ├── tile8.txt │ │ │ │ └── tile9.txt │ │ │ ├── 8x6/ │ │ │ │ ├── tile0.txt │ │ │ │ ├── tile1.txt │ │ │ │ ├── tile10.txt │ │ │ │ ├── tile11.txt │ │ │ │ ├── tile12.txt │ │ │ │ ├── tile13.txt │ │ │ │ ├── tile14.txt │ │ │ │ ├── tile15.txt │ │ │ │ ├── tile16.txt │ │ │ │ ├── tile17.txt │ │ │ │ ├── tile18.txt │ │ │ │ ├── tile19.txt │ │ │ │ ├── tile2.txt │ │ │ │ ├── tile20.txt │ │ │ │ ├── tile21.txt │ │ │ │ ├── tile22.txt │ │ │ │ ├── tile23.txt │ │ │ │ ├── tile24.txt │ │ │ │ ├── tile25.txt │ │ │ │ ├── tile26.txt │ │ │ │ ├── tile3.txt │ │ │ │ ├── tile4.txt │ │ │ │ ├── tile5.txt │ │ │ │ ├── tile6.txt │ │ │ │ ├── tile7.txt │ │ │ │ ├── tile8.txt │ │ │ │ └── tile9.txt │ │ │ ├── 8x8/ │ │ │ │ ├── tile0.txt │ │ │ │ ├── tile1.txt │ │ │ │ ├── tile10.txt │ │ │ │ ├── tile11.txt │ │ │ │ ├── tile12.txt │ │ │ │ ├── tile13.txt │ │ │ │ ├── tile14.txt │ │ │ │ ├── tile15.txt │ │ │ │ ├── tile16.txt │ │ │ │ ├── tile17.txt │ │ │ │ ├── tile18.txt │ │ │ │ ├── tile19.txt │ │ │ │ ├── tile2.txt │ │ │ │ ├── tile20.txt │ │ │ │ ├── tile21.txt │ │ │ │ ├── tile22.txt │ │ │ │ ├── tile23.txt │ │ │ │ ├── tile24.txt │ │ │ │ ├── tile25.txt │ │ │ │ ├── tile26.txt │ │ │ │ ├── tile3.txt │ │ │ │ ├── tile4.txt │ │ │ │ ├── tile5.txt │ │ │ │ ├── tile6.txt │ │ │ │ ├── tile7.txt │ │ │ │ ├── tile8.txt │ │ │ │ └── tile9.txt │ │ │ └── ASCII/ │ │ │ ├── atari7800/ │ │ │ │ ├── atari7800_char_tiles.h │ │ │ │ └── atari7800_no_color_char_tiles.h │ │ │ ├── char_tiles.h │ │ │ ├── mc10/ │ │ │ │ └── mc10_char_tiles.h │ │ │ ├── vz/ │ │ │ │ └── vz_char_tiles.h │ │ │ └── zx81/ │ │ │ └── zx81_char_tiles.h │ │ └── words_16/ │ │ ├── a.txt │ │ ├── c.txt │ │ ├── compress.py │ │ ├── d.txt │ │ ├── e.txt │ │ ├── h.txt │ │ ├── i.txt │ │ ├── l.txt │ │ ├── m.txt │ │ ├── missing_words.txt │ │ ├── n.txt │ │ ├── o.txt │ │ ├── p.txt │ │ ├── r.txt │ │ ├── s.txt │ │ ├── t.txt │ │ ├── u.txt │ │ ├── word_frequency.txt │ │ ├── words_16letters.txt │ │ └── y.txt │ ├── makefiles.common/ │ │ ├── auxiliary/ │ │ │ ├── Makefile_ALL │ │ │ ├── Makefile_assets │ │ │ ├── Makefile_combo │ │ │ ├── Makefile_common │ │ │ ├── Makefile_compilers │ │ │ ├── Makefile_default_values │ │ │ └── Makefile_tools │ │ ├── debug/ │ │ │ ├── Makefile.cc6303_debug │ │ │ ├── Makefile.cc65_debug │ │ │ ├── Makefile.cmoc_debug │ │ │ ├── Makefile.lcc1802_debug │ │ │ └── Makefile.z88dk_debug │ │ └── targets/ │ │ ├── ack/ │ │ │ └── Makefile.ack_targets │ │ ├── amiga_gcc/ │ │ │ └── Makefile.gcc_amiga_targets │ │ ├── atari_mint_gcc/ │ │ │ └── Makefile_atari_st │ │ ├── cc65/ │ │ │ ├── Makefile_c128_8502 │ │ │ ├── Makefile_c65 │ │ │ ├── Makefile_cx16 │ │ │ ├── Makefile_kim1 │ │ │ ├── Makefile_osic1p │ │ │ ├── Makefile_sym1 │ │ │ └── Makefile_telestrat │ │ ├── emcc/ │ │ │ └── Makefile.emcc_targets │ │ ├── gcc4ti/ │ │ │ └── Makefile_ti99 │ │ ├── gcc_z8k_pcos/ │ │ │ └── Makefile.gcc_z8k_pcos_targets │ │ ├── sdcc/ │ │ │ └── Makefile.sdcc_targets │ │ ├── vbcc/ │ │ │ ├── Makefile_amiga │ │ │ ├── Makefile_atari_jaguar │ │ │ ├── Makefile_bbc │ │ │ └── Makefile_m65 │ │ ├── xtc68/ │ │ │ └── Makefile.xtc68_targets │ │ └── z88dk/ │ │ ├── Makefile_abc80 │ │ ├── Makefile_abc800 │ │ ├── Makefile_alphatro │ │ ├── Makefile_altair8800 │ │ ├── Makefile_attache │ │ ├── Makefile_aussie │ │ ├── Makefile_bee │ │ ├── Makefile_bic │ │ ├── Makefile_bit90 │ │ ├── Makefile_bondwell │ │ ├── Makefile_bondwell2 │ │ ├── Makefile_c7420 │ │ ├── Makefile_coleco_adam │ │ ├── Makefile_corvette │ │ ├── Makefile_dai │ │ ├── Makefile_dmv │ │ ├── Makefile_eg2k │ │ ├── Makefile_einstein │ │ ├── Makefile_enterprise │ │ ├── Makefile_excalibur64 │ │ ├── Makefile_fp1100 │ │ ├── Makefile_g800 │ │ ├── Makefile_gemini │ │ ├── Makefile_gl4000 │ │ ├── Makefile_gl6000sl │ │ ├── Makefile_hemc │ │ ├── Makefile_hgmc │ │ ├── Makefile_homelab │ │ ├── Makefile_homelab2 │ │ ├── Makefile_kaypro │ │ ├── Makefile_kaypro83 │ │ ├── Makefile_kramermc │ │ ├── Makefile_krokha │ │ ├── Makefile_lambda │ │ ├── Makefile_lm80c │ │ ├── Makefile_lviv │ │ ├── Makefile_m5 │ │ ├── Makefile_mbc200 │ │ ├── Makefile_micro8085 │ │ ├── Makefile_mikro80 │ │ ├── Makefile_misc_cpm │ │ ├── Makefile_multi8 │ │ ├── Makefile_myvision │ │ ├── Makefile_mz2500 │ │ ├── Makefile_nabu │ │ ├── Makefile_nascom │ │ ├── Makefile_nc100 │ │ ├── Makefile_nc200 │ │ ├── Makefile_newbrain │ │ ├── Makefile_ondra │ │ ├── Makefile_osborne1 │ │ ├── Makefile_osca │ │ ├── Makefile_oz │ │ ├── Makefile_p2000 │ │ ├── Makefile_pasopia7 │ │ ├── Makefile_pc6001 │ │ ├── Makefile_pcw40 │ │ ├── Makefile_pcw80 │ │ ├── Makefile_pencil2 │ │ ├── Makefile_phc25 │ │ ├── Makefile_pmd85 │ │ ├── Makefile_pps │ │ ├── Makefile_primo │ │ ├── Makefile_pv1000 │ │ ├── Makefile_pv2000 │ │ ├── Makefile_px4 │ │ ├── Makefile_px8 │ │ ├── Makefile_radio86 │ │ ├── Makefile_rc700 │ │ ├── Makefile_rx78 │ │ ├── Makefile_smc777 │ │ ├── Makefile_sol20 │ │ ├── Makefile_sos │ │ ├── Makefile_spc1000 │ │ ├── Makefile_special │ │ ├── Makefile_srr │ │ ├── Makefile_super80 │ │ ├── Makefile_super80r │ │ ├── Makefile_sv8000 │ │ ├── Makefile_svi │ │ ├── Makefile_ti82 │ │ ├── Makefile_ti83 │ │ ├── Makefile_ti83p │ │ ├── Makefile_ti85 │ │ ├── Makefile_ti86 │ │ ├── Makefile_tiki100 │ │ ├── Makefile_tim011 │ │ ├── Makefile_ts2068 │ │ ├── Makefile_tvc │ │ ├── Makefile_v1050 │ │ ├── Makefile_vector06c │ │ ├── Makefile_x07 │ │ ├── Makefile_x1 │ │ ├── Makefile_x820 │ │ ├── Makefile_z80tvgame │ │ ├── Makefile_z88 │ │ ├── Makefile_zx80 │ │ ├── Makefile_zxn │ │ └── extras/ │ │ ├── Makefile_agon │ │ ├── Makefile_c128 │ │ ├── Makefile_camputers_lynx │ │ ├── Makefile_cpc │ │ ├── Makefile_gal │ │ ├── Makefile_gal_plus │ │ └── Makefile_pc88 │ ├── makefiles.other/ │ │ └── chase/ │ │ ├── alt/ │ │ │ ├── Makefile.cc65_alternative_builds │ │ │ ├── Makefile.z88dk_alternative_builds │ │ │ └── z88dk_alternative_builds/ │ │ │ ├── Makefile.z88dk_alternative_builds_a-n │ │ │ ├── Makefile.z88dk_alternative_builds_o-z │ │ │ ├── Makefile.z88dk_alternative_builds_qaopm │ │ │ └── Makefile.z88dk_alternative_builds_zsdcc │ │ ├── bench/ │ │ │ └── Makefile.cc65_bench │ │ ├── experimental/ │ │ │ └── Makefile.z88dk_experimental_targets │ │ ├── tests/ │ │ │ ├── Makefile.tests │ │ │ └── Makefile.z88dk_quick_tests │ │ └── wip/ │ │ ├── Makefile.ack_wip_targets │ │ ├── Makefile.cc65_wip_targets │ │ └── Makefile.z88dk_wip_targets │ ├── modules/ │ │ ├── LoggerSingleton.py │ │ ├── __init__.py │ │ ├── build_functions.py │ │ ├── clean_functions.py │ │ ├── commands.py │ │ ├── default_values.py │ │ ├── execute.py │ │ ├── file_functions.py │ │ ├── help_functions.py │ │ ├── import_from_source.py │ │ ├── init.py │ │ ├── input_functions.py │ │ ├── option_functions.py │ │ ├── params.py │ │ ├── print_functions.py │ │ ├── project_functions.py │ │ ├── run.py │ │ ├── shape_functions.py │ │ ├── split_projects.py │ │ ├── strings.py │ │ ├── target_defs.py │ │ ├── test_self_defs.py │ │ ├── tests.py │ │ └── tiles.py │ ├── patches/ │ │ └── move_globals.py │ ├── template_projects/ │ │ ├── Makefile_game.template │ │ ├── arcade_game_code.template/ │ │ │ ├── main.c │ │ │ ├── shapes/ │ │ │ │ ├── 6x8/ │ │ │ │ │ ├── shape0.txt │ │ │ │ │ ├── shape1.txt │ │ │ │ │ ├── shape10.txt │ │ │ │ │ ├── shape11.txt │ │ │ │ │ ├── shape12.txt │ │ │ │ │ ├── shape13.txt │ │ │ │ │ ├── shape14.txt │ │ │ │ │ ├── shape15.txt │ │ │ │ │ ├── shape16.txt │ │ │ │ │ ├── shape17.txt │ │ │ │ │ ├── shape18.txt │ │ │ │ │ ├── shape19.txt │ │ │ │ │ ├── shape2.txt │ │ │ │ │ ├── shape20.txt │ │ │ │ │ ├── shape21.txt │ │ │ │ │ ├── shape22.txt │ │ │ │ │ ├── shape23.txt │ │ │ │ │ ├── shape24.txt │ │ │ │ │ ├── shape25.txt │ │ │ │ │ ├── shape26.txt │ │ │ │ │ ├── shape3.txt │ │ │ │ │ ├── shape4.txt │ │ │ │ │ ├── shape5.txt │ │ │ │ │ ├── shape6.txt │ │ │ │ │ ├── shape7.txt │ │ │ │ │ ├── shape8.txt │ │ │ │ │ └── shape9.txt │ │ │ │ ├── 6x9/ │ │ │ │ │ ├── shape0.txt │ │ │ │ │ ├── shape1.txt │ │ │ │ │ ├── shape10.txt │ │ │ │ │ ├── shape11.txt │ │ │ │ │ ├── shape12.txt │ │ │ │ │ ├── shape13.txt │ │ │ │ │ ├── shape14.txt │ │ │ │ │ ├── shape15.txt │ │ │ │ │ ├── shape16.txt │ │ │ │ │ ├── shape17.txt │ │ │ │ │ ├── shape18.txt │ │ │ │ │ ├── shape19.txt │ │ │ │ │ ├── shape2.txt │ │ │ │ │ ├── shape20.txt │ │ │ │ │ ├── shape21.txt │ │ │ │ │ ├── shape22.txt │ │ │ │ │ ├── shape23.txt │ │ │ │ │ ├── shape24.txt │ │ │ │ │ ├── shape25.txt │ │ │ │ │ ├── shape26.txt │ │ │ │ │ ├── shape3.txt │ │ │ │ │ ├── shape4.txt │ │ │ │ │ ├── shape5.txt │ │ │ │ │ ├── shape6.txt │ │ │ │ │ ├── shape7.txt │ │ │ │ │ ├── shape8.txt │ │ │ │ │ └── shape9.txt │ │ │ │ ├── 7x8/ │ │ │ │ │ ├── shape0.txt │ │ │ │ │ ├── shape1.txt │ │ │ │ │ ├── shape10.txt │ │ │ │ │ ├── shape11.txt │ │ │ │ │ ├── shape12.txt │ │ │ │ │ ├── shape13.txt │ │ │ │ │ ├── shape14.txt │ │ │ │ │ ├── shape15.txt │ │ │ │ │ ├── shape16.txt │ │ │ │ │ ├── shape17.txt │ │ │ │ │ ├── shape18.txt │ │ │ │ │ ├── shape19.txt │ │ │ │ │ ├── shape2.txt │ │ │ │ │ ├── shape20.txt │ │ │ │ │ ├── shape21.txt │ │ │ │ │ ├── shape22.txt │ │ │ │ │ ├── shape23.txt │ │ │ │ │ ├── shape24.txt │ │ │ │ │ ├── shape25.txt │ │ │ │ │ ├── shape26.txt │ │ │ │ │ ├── shape3.txt │ │ │ │ │ ├── shape4.txt │ │ │ │ │ ├── shape5.txt │ │ │ │ │ ├── shape6.txt │ │ │ │ │ ├── shape7.txt │ │ │ │ │ ├── shape8.txt │ │ │ │ │ └── shape9.txt │ │ │ │ ├── 8x6/ │ │ │ │ │ ├── shape0.txt │ │ │ │ │ ├── shape1.txt │ │ │ │ │ ├── shape10.txt │ │ │ │ │ ├── shape11.txt │ │ │ │ │ ├── shape12.txt │ │ │ │ │ ├── shape13.txt │ │ │ │ │ ├── shape14.txt │ │ │ │ │ ├── shape15.txt │ │ │ │ │ ├── shape16.txt │ │ │ │ │ ├── shape17.txt │ │ │ │ │ ├── shape18.txt │ │ │ │ │ ├── shape19.txt │ │ │ │ │ ├── shape2.txt │ │ │ │ │ ├── shape20.txt │ │ │ │ │ ├── shape21.txt │ │ │ │ │ ├── shape22.txt │ │ │ │ │ ├── shape23.txt │ │ │ │ │ ├── shape24.txt │ │ │ │ │ ├── shape25.txt │ │ │ │ │ ├── shape26.txt │ │ │ │ │ ├── shape3.txt │ │ │ │ │ ├── shape4.txt │ │ │ │ │ ├── shape5.txt │ │ │ │ │ ├── shape6.txt │ │ │ │ │ ├── shape7.txt │ │ │ │ │ ├── shape8.txt │ │ │ │ │ └── shape9.txt │ │ │ │ └── 8x8/ │ │ │ │ ├── shape0.txt │ │ │ │ ├── shape1.txt │ │ │ │ ├── shape10.txt │ │ │ │ ├── shape11.txt │ │ │ │ ├── shape12.txt │ │ │ │ ├── shape13.txt │ │ │ │ ├── shape14.txt │ │ │ │ ├── shape15.txt │ │ │ │ ├── shape16.txt │ │ │ │ ├── shape17.txt │ │ │ │ ├── shape18.txt │ │ │ │ ├── shape19.txt │ │ │ │ ├── shape2.txt │ │ │ │ ├── shape20.txt │ │ │ │ ├── shape21.txt │ │ │ │ ├── shape22.txt │ │ │ │ ├── shape23.txt │ │ │ │ ├── shape24.txt │ │ │ │ ├── shape25.txt │ │ │ │ ├── shape26.txt │ │ │ │ ├── shape3.txt │ │ │ │ ├── shape4.txt │ │ │ │ ├── shape5.txt │ │ │ │ ├── shape6.txt │ │ │ │ ├── shape7.txt │ │ │ │ ├── shape8.txt │ │ │ │ └── shape9.txt │ │ │ └── tiles/ │ │ │ ├── 6x8/ │ │ │ │ ├── tile0.txt │ │ │ │ ├── tile1.txt │ │ │ │ ├── tile10.txt │ │ │ │ ├── tile11.txt │ │ │ │ ├── tile12.txt │ │ │ │ ├── tile13.txt │ │ │ │ ├── tile14.txt │ │ │ │ ├── tile15.txt │ │ │ │ ├── tile16.txt │ │ │ │ ├── tile17.txt │ │ │ │ ├── tile18.txt │ │ │ │ ├── tile19.txt │ │ │ │ ├── tile2.txt │ │ │ │ ├── tile20.txt │ │ │ │ ├── tile21.txt │ │ │ │ ├── tile22.txt │ │ │ │ ├── tile23.txt │ │ │ │ ├── tile24.txt │ │ │ │ ├── tile25.txt │ │ │ │ ├── tile26.txt │ │ │ │ ├── tile3.txt │ │ │ │ ├── tile4.txt │ │ │ │ ├── tile5.txt │ │ │ │ ├── tile6.txt │ │ │ │ ├── tile7.txt │ │ │ │ ├── tile8.txt │ │ │ │ └── tile9.txt │ │ │ ├── 6x9/ │ │ │ │ ├── tile0.txt │ │ │ │ ├── tile1.txt │ │ │ │ ├── tile10.txt │ │ │ │ ├── tile11.txt │ │ │ │ ├── tile12.txt │ │ │ │ ├── tile13.txt │ │ │ │ ├── tile14.txt │ │ │ │ ├── tile15.txt │ │ │ │ ├── tile16.txt │ │ │ │ ├── tile17.txt │ │ │ │ ├── tile18.txt │ │ │ │ ├── tile19.txt │ │ │ │ ├── tile2.txt │ │ │ │ ├── tile20.txt │ │ │ │ ├── tile21.txt │ │ │ │ ├── tile22.txt │ │ │ │ ├── tile23.txt │ │ │ │ ├── tile24.txt │ │ │ │ ├── tile25.txt │ │ │ │ ├── tile26.txt │ │ │ │ ├── tile3.txt │ │ │ │ ├── tile4.txt │ │ │ │ ├── tile5.txt │ │ │ │ ├── tile6.txt │ │ │ │ ├── tile7.txt │ │ │ │ ├── tile8.txt │ │ │ │ └── tile9.txt │ │ │ ├── 7x8/ │ │ │ │ ├── tile0.txt │ │ │ │ ├── tile1.txt │ │ │ │ ├── tile10.txt │ │ │ │ ├── tile11.txt │ │ │ │ ├── tile12.txt │ │ │ │ ├── tile13.txt │ │ │ │ ├── tile14.txt │ │ │ │ ├── tile15.txt │ │ │ │ ├── tile16.txt │ │ │ │ ├── tile17.txt │ │ │ │ ├── tile18.txt │ │ │ │ ├── tile19.txt │ │ │ │ ├── tile2.txt │ │ │ │ ├── tile20.txt │ │ │ │ ├── tile21.txt │ │ │ │ ├── tile22.txt │ │ │ │ ├── tile23.txt │ │ │ │ ├── tile24.txt │ │ │ │ ├── tile25.txt │ │ │ │ ├── tile26.txt │ │ │ │ ├── tile3.txt │ │ │ │ ├── tile4.txt │ │ │ │ ├── tile5.txt │ │ │ │ ├── tile6.txt │ │ │ │ ├── tile7.txt │ │ │ │ ├── tile8.txt │ │ │ │ └── tile9.txt │ │ │ ├── 8x6/ │ │ │ │ ├── tile0.txt │ │ │ │ ├── tile1.txt │ │ │ │ ├── tile10.txt │ │ │ │ ├── tile11.txt │ │ │ │ ├── tile12.txt │ │ │ │ ├── tile13.txt │ │ │ │ ├── tile14.txt │ │ │ │ ├── tile15.txt │ │ │ │ ├── tile16.txt │ │ │ │ ├── tile17.txt │ │ │ │ ├── tile18.txt │ │ │ │ ├── tile19.txt │ │ │ │ ├── tile2.txt │ │ │ │ ├── tile20.txt │ │ │ │ ├── tile21.txt │ │ │ │ ├── tile22.txt │ │ │ │ ├── tile23.txt │ │ │ │ ├── tile24.txt │ │ │ │ ├── tile25.txt │ │ │ │ ├── tile26.txt │ │ │ │ ├── tile3.txt │ │ │ │ ├── tile4.txt │ │ │ │ ├── tile5.txt │ │ │ │ ├── tile6.txt │ │ │ │ ├── tile7.txt │ │ │ │ ├── tile8.txt │ │ │ │ └── tile9.txt │ │ │ ├── 8x8/ │ │ │ │ ├── tile0.txt │ │ │ │ ├── tile1.txt │ │ │ │ ├── tile10.txt │ │ │ │ ├── tile11.txt │ │ │ │ ├── tile12.txt │ │ │ │ ├── tile13.txt │ │ │ │ ├── tile14.txt │ │ │ │ ├── tile15.txt │ │ │ │ ├── tile16.txt │ │ │ │ ├── tile17.txt │ │ │ │ ├── tile18.txt │ │ │ │ ├── tile19.txt │ │ │ │ ├── tile2.txt │ │ │ │ ├── tile20.txt │ │ │ │ ├── tile21.txt │ │ │ │ ├── tile22.txt │ │ │ │ ├── tile23.txt │ │ │ │ ├── tile24.txt │ │ │ │ ├── tile25.txt │ │ │ │ ├── tile26.txt │ │ │ │ ├── tile3.txt │ │ │ │ ├── tile4.txt │ │ │ │ ├── tile5.txt │ │ │ │ ├── tile6.txt │ │ │ │ ├── tile7.txt │ │ │ │ ├── tile8.txt │ │ │ │ └── tile9.txt │ │ │ └── ASCII/ │ │ │ └── char_tiles.h │ │ ├── config/ │ │ │ ├── game_config.mk.template │ │ │ └── project_config.mk.template │ │ ├── demo_code.template/ │ │ │ ├── main.c │ │ │ ├── shapes/ │ │ │ │ ├── 6x8/ │ │ │ │ │ ├── shape0.txt │ │ │ │ │ ├── shape1.txt │ │ │ │ │ ├── shape10.txt │ │ │ │ │ ├── shape11.txt │ │ │ │ │ ├── shape12.txt │ │ │ │ │ ├── shape13.txt │ │ │ │ │ ├── shape14.txt │ │ │ │ │ ├── shape15.txt │ │ │ │ │ ├── shape16.txt │ │ │ │ │ ├── shape17.txt │ │ │ │ │ ├── shape18.txt │ │ │ │ │ ├── shape19.txt │ │ │ │ │ ├── shape2.txt │ │ │ │ │ ├── shape20.txt │ │ │ │ │ ├── shape21.txt │ │ │ │ │ ├── shape22.txt │ │ │ │ │ ├── shape23.txt │ │ │ │ │ ├── shape24.txt │ │ │ │ │ ├── shape25.txt │ │ │ │ │ ├── shape26.txt │ │ │ │ │ ├── shape3.txt │ │ │ │ │ ├── shape4.txt │ │ │ │ │ ├── shape5.txt │ │ │ │ │ ├── shape6.txt │ │ │ │ │ ├── shape7.txt │ │ │ │ │ ├── shape8.txt │ │ │ │ │ └── shape9.txt │ │ │ │ ├── 6x9/ │ │ │ │ │ ├── shape0.txt │ │ │ │ │ ├── shape1.txt │ │ │ │ │ ├── shape10.txt │ │ │ │ │ ├── shape11.txt │ │ │ │ │ ├── shape12.txt │ │ │ │ │ ├── shape13.txt │ │ │ │ │ ├── shape14.txt │ │ │ │ │ ├── shape15.txt │ │ │ │ │ ├── shape16.txt │ │ │ │ │ ├── shape17.txt │ │ │ │ │ ├── shape18.txt │ │ │ │ │ ├── shape19.txt │ │ │ │ │ ├── shape2.txt │ │ │ │ │ ├── shape20.txt │ │ │ │ │ ├── shape21.txt │ │ │ │ │ ├── shape22.txt │ │ │ │ │ ├── shape23.txt │ │ │ │ │ ├── shape24.txt │ │ │ │ │ ├── shape25.txt │ │ │ │ │ ├── shape26.txt │ │ │ │ │ ├── shape3.txt │ │ │ │ │ ├── shape4.txt │ │ │ │ │ ├── shape5.txt │ │ │ │ │ ├── shape6.txt │ │ │ │ │ ├── shape7.txt │ │ │ │ │ ├── shape8.txt │ │ │ │ │ └── shape9.txt │ │ │ │ ├── 7x8/ │ │ │ │ │ ├── shape0.txt │ │ │ │ │ ├── shape1.txt │ │ │ │ │ ├── shape10.txt │ │ │ │ │ ├── shape11.txt │ │ │ │ │ ├── shape12.txt │ │ │ │ │ ├── shape13.txt │ │ │ │ │ ├── shape14.txt │ │ │ │ │ ├── shape15.txt │ │ │ │ │ ├── shape16.txt │ │ │ │ │ ├── shape17.txt │ │ │ │ │ ├── shape18.txt │ │ │ │ │ ├── shape19.txt │ │ │ │ │ ├── shape2.txt │ │ │ │ │ ├── shape20.txt │ │ │ │ │ ├── shape21.txt │ │ │ │ │ ├── shape22.txt │ │ │ │ │ ├── shape23.txt │ │ │ │ │ ├── shape24.txt │ │ │ │ │ ├── shape25.txt │ │ │ │ │ ├── shape26.txt │ │ │ │ │ ├── shape3.txt │ │ │ │ │ ├── shape4.txt │ │ │ │ │ ├── shape5.txt │ │ │ │ │ ├── shape6.txt │ │ │ │ │ ├── shape7.txt │ │ │ │ │ ├── shape8.txt │ │ │ │ │ └── shape9.txt │ │ │ │ ├── 8x6/ │ │ │ │ │ ├── shape0.txt │ │ │ │ │ ├── shape1.txt │ │ │ │ │ ├── shape10.txt │ │ │ │ │ ├── shape11.txt │ │ │ │ │ ├── shape12.txt │ │ │ │ │ ├── shape13.txt │ │ │ │ │ ├── shape14.txt │ │ │ │ │ ├── shape15.txt │ │ │ │ │ ├── shape16.txt │ │ │ │ │ ├── shape17.txt │ │ │ │ │ ├── shape18.txt │ │ │ │ │ ├── shape19.txt │ │ │ │ │ ├── shape2.txt │ │ │ │ │ ├── shape20.txt │ │ │ │ │ ├── shape21.txt │ │ │ │ │ ├── shape22.txt │ │ │ │ │ ├── shape23.txt │ │ │ │ │ ├── shape24.txt │ │ │ │ │ ├── shape25.txt │ │ │ │ │ ├── shape26.txt │ │ │ │ │ ├── shape3.txt │ │ │ │ │ ├── shape4.txt │ │ │ │ │ ├── shape5.txt │ │ │ │ │ ├── shape6.txt │ │ │ │ │ ├── shape7.txt │ │ │ │ │ ├── shape8.txt │ │ │ │ │ └── shape9.txt │ │ │ │ └── 8x8/ │ │ │ │ ├── shape0.txt │ │ │ │ ├── shape1.txt │ │ │ │ ├── shape10.txt │ │ │ │ ├── shape11.txt │ │ │ │ ├── shape12.txt │ │ │ │ ├── shape13.txt │ │ │ │ ├── shape14.txt │ │ │ │ ├── shape15.txt │ │ │ │ ├── shape16.txt │ │ │ │ ├── shape17.txt │ │ │ │ ├── shape18.txt │ │ │ │ ├── shape19.txt │ │ │ │ ├── shape2.txt │ │ │ │ ├── shape20.txt │ │ │ │ ├── shape21.txt │ │ │ │ ├── shape22.txt │ │ │ │ ├── shape23.txt │ │ │ │ ├── shape24.txt │ │ │ │ ├── shape25.txt │ │ │ │ ├── shape26.txt │ │ │ │ ├── shape3.txt │ │ │ │ ├── shape4.txt │ │ │ │ ├── shape5.txt │ │ │ │ ├── shape6.txt │ │ │ │ ├── shape7.txt │ │ │ │ ├── shape8.txt │ │ │ │ └── shape9.txt │ │ │ └── tiles/ │ │ │ ├── 6x8/ │ │ │ │ ├── tile0.txt │ │ │ │ ├── tile1.txt │ │ │ │ ├── tile10.txt │ │ │ │ ├── tile11.txt │ │ │ │ ├── tile12.txt │ │ │ │ ├── tile13.txt │ │ │ │ ├── tile14.txt │ │ │ │ ├── tile15.txt │ │ │ │ ├── tile16.txt │ │ │ │ ├── tile17.txt │ │ │ │ ├── tile18.txt │ │ │ │ ├── tile19.txt │ │ │ │ ├── tile2.txt │ │ │ │ ├── tile20.txt │ │ │ │ ├── tile21.txt │ │ │ │ ├── tile22.txt │ │ │ │ ├── tile23.txt │ │ │ │ ├── tile24.txt │ │ │ │ ├── tile25.txt │ │ │ │ ├── tile25_ORIG.txt │ │ │ │ ├── tile26.txt │ │ │ │ ├── tile3.txt │ │ │ │ ├── tile4.txt │ │ │ │ ├── tile5.txt │ │ │ │ ├── tile6.txt │ │ │ │ ├── tile7.txt │ │ │ │ ├── tile8.txt │ │ │ │ └── tile9.txt │ │ │ ├── 6x9/ │ │ │ │ ├── tile0.txt │ │ │ │ ├── tile1.txt │ │ │ │ ├── tile10.txt │ │ │ │ ├── tile11.txt │ │ │ │ ├── tile12.txt │ │ │ │ ├── tile13.txt │ │ │ │ ├── tile14.txt │ │ │ │ ├── tile15.txt │ │ │ │ ├── tile16.txt │ │ │ │ ├── tile17.txt │ │ │ │ ├── tile18.txt │ │ │ │ ├── tile19.txt │ │ │ │ ├── tile2.txt │ │ │ │ ├── tile20.txt │ │ │ │ ├── tile21.txt │ │ │ │ ├── tile22.txt │ │ │ │ ├── tile23.txt │ │ │ │ ├── tile24.txt │ │ │ │ ├── tile25 _ORIG.txt │ │ │ │ ├── tile25.txt │ │ │ │ ├── tile26.txt │ │ │ │ ├── tile3.txt │ │ │ │ ├── tile4.txt │ │ │ │ ├── tile5.txt │ │ │ │ ├── tile6.txt │ │ │ │ ├── tile7.txt │ │ │ │ ├── tile8.txt │ │ │ │ └── tile9.txt │ │ │ ├── 7x8/ │ │ │ │ ├── tile0.txt │ │ │ │ ├── tile1.txt │ │ │ │ ├── tile10.txt │ │ │ │ ├── tile11.txt │ │ │ │ ├── tile12.txt │ │ │ │ ├── tile13.txt │ │ │ │ ├── tile14.txt │ │ │ │ ├── tile15.txt │ │ │ │ ├── tile16.txt │ │ │ │ ├── tile17.txt │ │ │ │ ├── tile18.txt │ │ │ │ ├── tile19.txt │ │ │ │ ├── tile2.txt │ │ │ │ ├── tile20.txt │ │ │ │ ├── tile21.txt │ │ │ │ ├── tile22.txt │ │ │ │ ├── tile23.txt │ │ │ │ ├── tile24.txt │ │ │ │ ├── tile25.txt │ │ │ │ ├── tile25_ORIG.txt │ │ │ │ ├── tile26.txt │ │ │ │ ├── tile3.txt │ │ │ │ ├── tile4.txt │ │ │ │ ├── tile5.txt │ │ │ │ ├── tile6.txt │ │ │ │ ├── tile7.txt │ │ │ │ ├── tile8.txt │ │ │ │ └── tile9.txt │ │ │ ├── 8x6/ │ │ │ │ ├── tile0.txt │ │ │ │ ├── tile1.txt │ │ │ │ ├── tile10.txt │ │ │ │ ├── tile11.txt │ │ │ │ ├── tile12.txt │ │ │ │ ├── tile13.txt │ │ │ │ ├── tile14.txt │ │ │ │ ├── tile15.txt │ │ │ │ ├── tile16.txt │ │ │ │ ├── tile17.txt │ │ │ │ ├── tile18.txt │ │ │ │ ├── tile19.txt │ │ │ │ ├── tile2.txt │ │ │ │ ├── tile20.txt │ │ │ │ ├── tile21.txt │ │ │ │ ├── tile22.txt │ │ │ │ ├── tile23.txt │ │ │ │ ├── tile24.txt │ │ │ │ ├── tile25.txt │ │ │ │ ├── tile26.txt │ │ │ │ ├── tile3.txt │ │ │ │ ├── tile4.txt │ │ │ │ ├── tile5.txt │ │ │ │ ├── tile6.txt │ │ │ │ ├── tile7.txt │ │ │ │ ├── tile8.txt │ │ │ │ └── tile9.txt │ │ │ ├── 8x8/ │ │ │ │ ├── tile0.txt │ │ │ │ ├── tile1.txt │ │ │ │ ├── tile10.txt │ │ │ │ ├── tile11.txt │ │ │ │ ├── tile12.txt │ │ │ │ ├── tile13.txt │ │ │ │ ├── tile14.txt │ │ │ │ ├── tile15.txt │ │ │ │ ├── tile16.txt │ │ │ │ ├── tile17.txt │ │ │ │ ├── tile18.txt │ │ │ │ ├── tile19.txt │ │ │ │ ├── tile2.txt │ │ │ │ ├── tile20.txt │ │ │ │ ├── tile21.txt │ │ │ │ ├── tile22.txt │ │ │ │ ├── tile23.txt │ │ │ │ ├── tile24.txt │ │ │ │ ├── tile25.txt │ │ │ │ ├── tile26.txt │ │ │ │ ├── tile3.txt │ │ │ │ ├── tile4.txt │ │ │ │ ├── tile5.txt │ │ │ │ ├── tile6.txt │ │ │ │ ├── tile7.txt │ │ │ │ ├── tile8.txt │ │ │ │ └── tile9.txt │ │ │ └── ASCII/ │ │ │ └── char_tiles.h │ │ ├── helloworld_code.template/ │ │ │ ├── main.c │ │ │ ├── shapes/ │ │ │ │ ├── 6x8/ │ │ │ │ │ ├── shape0.txt │ │ │ │ │ ├── shape1.txt │ │ │ │ │ ├── shape10.txt │ │ │ │ │ ├── shape11.txt │ │ │ │ │ ├── shape12.txt │ │ │ │ │ ├── shape13.txt │ │ │ │ │ ├── shape14.txt │ │ │ │ │ ├── shape15.txt │ │ │ │ │ ├── shape16.txt │ │ │ │ │ ├── shape17.txt │ │ │ │ │ ├── shape18.txt │ │ │ │ │ ├── shape19.txt │ │ │ │ │ ├── shape2.txt │ │ │ │ │ ├── shape20.txt │ │ │ │ │ ├── shape21.txt │ │ │ │ │ ├── shape22.txt │ │ │ │ │ ├── shape23.txt │ │ │ │ │ ├── shape24.txt │ │ │ │ │ ├── shape25.txt │ │ │ │ │ ├── shape26.txt │ │ │ │ │ ├── shape3.txt │ │ │ │ │ ├── shape4.txt │ │ │ │ │ ├── shape5.txt │ │ │ │ │ ├── shape6.txt │ │ │ │ │ ├── shape7.txt │ │ │ │ │ ├── shape8.txt │ │ │ │ │ └── shape9.txt │ │ │ │ ├── 6x9/ │ │ │ │ │ ├── shape0.txt │ │ │ │ │ ├── shape1.txt │ │ │ │ │ ├── shape10.txt │ │ │ │ │ ├── shape11.txt │ │ │ │ │ ├── shape12.txt │ │ │ │ │ ├── shape13.txt │ │ │ │ │ ├── shape14.txt │ │ │ │ │ ├── shape15.txt │ │ │ │ │ ├── shape16.txt │ │ │ │ │ ├── shape17.txt │ │ │ │ │ ├── shape18.txt │ │ │ │ │ ├── shape19.txt │ │ │ │ │ ├── shape2.txt │ │ │ │ │ ├── shape20.txt │ │ │ │ │ ├── shape21.txt │ │ │ │ │ ├── shape22.txt │ │ │ │ │ ├── shape23.txt │ │ │ │ │ ├── shape24.txt │ │ │ │ │ ├── shape25.txt │ │ │ │ │ ├── shape26.txt │ │ │ │ │ ├── shape3.txt │ │ │ │ │ ├── shape4.txt │ │ │ │ │ ├── shape5.txt │ │ │ │ │ ├── shape6.txt │ │ │ │ │ ├── shape7.txt │ │ │ │ │ ├── shape8.txt │ │ │ │ │ └── shape9.txt │ │ │ │ ├── 7x8/ │ │ │ │ │ ├── shape0.txt │ │ │ │ │ ├── shape1.txt │ │ │ │ │ ├── shape10.txt │ │ │ │ │ ├── shape11.txt │ │ │ │ │ ├── shape12.txt │ │ │ │ │ ├── shape13.txt │ │ │ │ │ ├── shape14.txt │ │ │ │ │ ├── shape15.txt │ │ │ │ │ ├── shape16.txt │ │ │ │ │ ├── shape17.txt │ │ │ │ │ ├── shape18.txt │ │ │ │ │ ├── shape19.txt │ │ │ │ │ ├── shape2.txt │ │ │ │ │ ├── shape20.txt │ │ │ │ │ ├── shape21.txt │ │ │ │ │ ├── shape22.txt │ │ │ │ │ ├── shape23.txt │ │ │ │ │ ├── shape24.txt │ │ │ │ │ ├── shape25.txt │ │ │ │ │ ├── shape26.txt │ │ │ │ │ ├── shape3.txt │ │ │ │ │ ├── shape4.txt │ │ │ │ │ ├── shape5.txt │ │ │ │ │ ├── shape6.txt │ │ │ │ │ ├── shape7.txt │ │ │ │ │ ├── shape8.txt │ │ │ │ │ └── shape9.txt │ │ │ │ ├── 8x6/ │ │ │ │ │ ├── shape0.txt │ │ │ │ │ ├── shape1.txt │ │ │ │ │ ├── shape10.txt │ │ │ │ │ ├── shape11.txt │ │ │ │ │ ├── shape12.txt │ │ │ │ │ ├── shape13.txt │ │ │ │ │ ├── shape14.txt │ │ │ │ │ ├── shape15.txt │ │ │ │ │ ├── shape16.txt │ │ │ │ │ ├── shape17.txt │ │ │ │ │ ├── shape18.txt │ │ │ │ │ ├── shape19.txt │ │ │ │ │ ├── shape2.txt │ │ │ │ │ ├── shape20.txt │ │ │ │ │ ├── shape21.txt │ │ │ │ │ ├── shape22.txt │ │ │ │ │ ├── shape23.txt │ │ │ │ │ ├── shape24.txt │ │ │ │ │ ├── shape25.txt │ │ │ │ │ ├── shape26.txt │ │ │ │ │ ├── shape3.txt │ │ │ │ │ ├── shape4.txt │ │ │ │ │ ├── shape5.txt │ │ │ │ │ ├── shape6.txt │ │ │ │ │ ├── shape7.txt │ │ │ │ │ ├── shape8.txt │ │ │ │ │ └── shape9.txt │ │ │ │ └── 8x8/ │ │ │ │ ├── shape0.txt │ │ │ │ ├── shape1.txt │ │ │ │ ├── shape10.txt │ │ │ │ ├── shape11.txt │ │ │ │ ├── shape12.txt │ │ │ │ ├── shape13.txt │ │ │ │ ├── shape14.txt │ │ │ │ ├── shape15.txt │ │ │ │ ├── shape16.txt │ │ │ │ ├── shape17.txt │ │ │ │ ├── shape18.txt │ │ │ │ ├── shape19.txt │ │ │ │ ├── shape2.txt │ │ │ │ ├── shape20.txt │ │ │ │ ├── shape21.txt │ │ │ │ ├── shape22.txt │ │ │ │ ├── shape23.txt │ │ │ │ ├── shape24.txt │ │ │ │ ├── shape25.txt │ │ │ │ ├── shape26.txt │ │ │ │ ├── shape3.txt │ │ │ │ ├── shape4.txt │ │ │ │ ├── shape5.txt │ │ │ │ ├── shape6.txt │ │ │ │ ├── shape7.txt │ │ │ │ ├── shape8.txt │ │ │ │ └── shape9.txt │ │ │ └── tiles/ │ │ │ ├── 6x8/ │ │ │ │ ├── tile0.txt │ │ │ │ ├── tile1.txt │ │ │ │ ├── tile10.txt │ │ │ │ ├── tile11.txt │ │ │ │ ├── tile12.txt │ │ │ │ ├── tile13.txt │ │ │ │ ├── tile14.txt │ │ │ │ ├── tile15.txt │ │ │ │ ├── tile16.txt │ │ │ │ ├── tile17.txt │ │ │ │ ├── tile18.txt │ │ │ │ ├── tile19.txt │ │ │ │ ├── tile2.txt │ │ │ │ ├── tile20.txt │ │ │ │ ├── tile21.txt │ │ │ │ ├── tile22.txt │ │ │ │ ├── tile23.txt │ │ │ │ ├── tile24.txt │ │ │ │ ├── tile25.txt │ │ │ │ ├── tile25_ORIG.txt │ │ │ │ ├── tile26.txt │ │ │ │ ├── tile3.txt │ │ │ │ ├── tile4.txt │ │ │ │ ├── tile5.txt │ │ │ │ ├── tile6.txt │ │ │ │ ├── tile7.txt │ │ │ │ ├── tile8.txt │ │ │ │ └── tile9.txt │ │ │ ├── 6x9/ │ │ │ │ ├── tile0.txt │ │ │ │ ├── tile1.txt │ │ │ │ ├── tile10.txt │ │ │ │ ├── tile11.txt │ │ │ │ ├── tile12.txt │ │ │ │ ├── tile13.txt │ │ │ │ ├── tile14.txt │ │ │ │ ├── tile15.txt │ │ │ │ ├── tile16.txt │ │ │ │ ├── tile17.txt │ │ │ │ ├── tile18.txt │ │ │ │ ├── tile19.txt │ │ │ │ ├── tile2.txt │ │ │ │ ├── tile20.txt │ │ │ │ ├── tile21.txt │ │ │ │ ├── tile22.txt │ │ │ │ ├── tile23.txt │ │ │ │ ├── tile24.txt │ │ │ │ ├── tile25 _ORIG.txt │ │ │ │ ├── tile25.txt │ │ │ │ ├── tile26.txt │ │ │ │ ├── tile3.txt │ │ │ │ ├── tile4.txt │ │ │ │ ├── tile5.txt │ │ │ │ ├── tile6.txt │ │ │ │ ├── tile7.txt │ │ │ │ ├── tile8.txt │ │ │ │ └── tile9.txt │ │ │ ├── 7x8/ │ │ │ │ ├── tile0.txt │ │ │ │ ├── tile1.txt │ │ │ │ ├── tile10.txt │ │ │ │ ├── tile11.txt │ │ │ │ ├── tile12.txt │ │ │ │ ├── tile13.txt │ │ │ │ ├── tile14.txt │ │ │ │ ├── tile15.txt │ │ │ │ ├── tile16.txt │ │ │ │ ├── tile17.txt │ │ │ │ ├── tile18.txt │ │ │ │ ├── tile19.txt │ │ │ │ ├── tile2.txt │ │ │ │ ├── tile20.txt │ │ │ │ ├── tile21.txt │ │ │ │ ├── tile22.txt │ │ │ │ ├── tile23.txt │ │ │ │ ├── tile24.txt │ │ │ │ ├── tile25.txt │ │ │ │ ├── tile25_ORIG.txt │ │ │ │ ├── tile26.txt │ │ │ │ ├── tile3.txt │ │ │ │ ├── tile4.txt │ │ │ │ ├── tile5.txt │ │ │ │ ├── tile6.txt │ │ │ │ ├── tile7.txt │ │ │ │ ├── tile8.txt │ │ │ │ └── tile9.txt │ │ │ ├── 8x6/ │ │ │ │ ├── tile0.txt │ │ │ │ ├── tile1.txt │ │ │ │ ├── tile10.txt │ │ │ │ ├── tile11.txt │ │ │ │ ├── tile12.txt │ │ │ │ ├── tile13.txt │ │ │ │ ├── tile14.txt │ │ │ │ ├── tile15.txt │ │ │ │ ├── tile16.txt │ │ │ │ ├── tile17.txt │ │ │ │ ├── tile18.txt │ │ │ │ ├── tile19.txt │ │ │ │ ├── tile2.txt │ │ │ │ ├── tile20.txt │ │ │ │ ├── tile21.txt │ │ │ │ ├── tile22.txt │ │ │ │ ├── tile23.txt │ │ │ │ ├── tile24.txt │ │ │ │ ├── tile25.txt │ │ │ │ ├── tile26.txt │ │ │ │ ├── tile3.txt │ │ │ │ ├── tile4.txt │ │ │ │ ├── tile5.txt │ │ │ │ ├── tile6.txt │ │ │ │ ├── tile7.txt │ │ │ │ ├── tile8.txt │ │ │ │ └── tile9.txt │ │ │ ├── 8x8/ │ │ │ │ ├── tile0.txt │ │ │ │ ├── tile1.txt │ │ │ │ ├── tile10.txt │ │ │ │ ├── tile11.txt │ │ │ │ ├── tile12.txt │ │ │ │ ├── tile13.txt │ │ │ │ ├── tile14.txt │ │ │ │ ├── tile15.txt │ │ │ │ ├── tile16.txt │ │ │ │ ├── tile17.txt │ │ │ │ ├── tile18.txt │ │ │ │ ├── tile19.txt │ │ │ │ ├── tile2.txt │ │ │ │ ├── tile20.txt │ │ │ │ ├── tile21.txt │ │ │ │ ├── tile22.txt │ │ │ │ ├── tile23.txt │ │ │ │ ├── tile24.txt │ │ │ │ ├── tile25.txt │ │ │ │ ├── tile26.txt │ │ │ │ ├── tile3.txt │ │ │ │ ├── tile4.txt │ │ │ │ ├── tile5.txt │ │ │ │ ├── tile6.txt │ │ │ │ ├── tile7.txt │ │ │ │ ├── tile8.txt │ │ │ │ └── tile9.txt │ │ │ └── ASCII/ │ │ │ └── char_tiles.h │ │ ├── test_code.template/ │ │ │ ├── main.c │ │ │ ├── shapes/ │ │ │ │ └── 8x8/ │ │ │ │ ├── shape19.txt │ │ │ │ ├── shape20.txt │ │ │ │ ├── shape21.txt │ │ │ │ ├── shape22.txt │ │ │ │ ├── shape23.txt │ │ │ │ ├── shape26.txt │ │ │ │ └── shape6.txt │ │ │ └── tiles/ │ │ │ ├── 6x8/ │ │ │ │ ├── tile0.txt │ │ │ │ ├── tile1.txt │ │ │ │ ├── tile10.txt │ │ │ │ ├── tile11.txt │ │ │ │ ├── tile12.txt │ │ │ │ ├── tile13.txt │ │ │ │ ├── tile14.txt │ │ │ │ ├── tile15.txt │ │ │ │ ├── tile16.txt │ │ │ │ ├── tile17.txt │ │ │ │ ├── tile18.txt │ │ │ │ ├── tile19.txt │ │ │ │ ├── tile2.txt │ │ │ │ ├── tile20.txt │ │ │ │ ├── tile21.txt │ │ │ │ ├── tile22.txt │ │ │ │ ├── tile23.txt │ │ │ │ ├── tile24.txt │ │ │ │ ├── tile25.txt │ │ │ │ ├── tile25_ORIG.txt │ │ │ │ ├── tile3.txt │ │ │ │ ├── tile4.txt │ │ │ │ ├── tile5.txt │ │ │ │ ├── tile6.txt │ │ │ │ ├── tile7.txt │ │ │ │ ├── tile8.txt │ │ │ │ └── tile9.txt │ │ │ ├── 6x9/ │ │ │ │ ├── tile0.txt │ │ │ │ ├── tile1.txt │ │ │ │ ├── tile10.txt │ │ │ │ ├── tile11.txt │ │ │ │ ├── tile12.txt │ │ │ │ ├── tile13.txt │ │ │ │ ├── tile14.txt │ │ │ │ ├── tile15.txt │ │ │ │ ├── tile16.txt │ │ │ │ ├── tile17.txt │ │ │ │ ├── tile18.txt │ │ │ │ ├── tile19.txt │ │ │ │ ├── tile2.txt │ │ │ │ ├── tile20.txt │ │ │ │ ├── tile21.txt │ │ │ │ ├── tile22.txt │ │ │ │ ├── tile23.txt │ │ │ │ ├── tile24.txt │ │ │ │ ├── tile25 _ORIG.txt │ │ │ │ ├── tile25.txt │ │ │ │ ├── tile3.txt │ │ │ │ ├── tile4.txt │ │ │ │ ├── tile5.txt │ │ │ │ ├── tile6.txt │ │ │ │ ├── tile7.txt │ │ │ │ ├── tile8.txt │ │ │ │ └── tile9.txt │ │ │ ├── 7x8/ │ │ │ │ ├── tile0.txt │ │ │ │ ├── tile1.txt │ │ │ │ ├── tile10.txt │ │ │ │ ├── tile11.txt │ │ │ │ ├── tile12.txt │ │ │ │ ├── tile13.txt │ │ │ │ ├── tile14.txt │ │ │ │ ├── tile15.txt │ │ │ │ ├── tile16.txt │ │ │ │ ├── tile17.txt │ │ │ │ ├── tile18.txt │ │ │ │ ├── tile19.txt │ │ │ │ ├── tile2.txt │ │ │ │ ├── tile20.txt │ │ │ │ ├── tile21.txt │ │ │ │ ├── tile22.txt │ │ │ │ ├── tile23.txt │ │ │ │ ├── tile24.txt │ │ │ │ ├── tile25.txt │ │ │ │ ├── tile25_ORIG.txt │ │ │ │ ├── tile3.txt │ │ │ │ ├── tile4.txt │ │ │ │ ├── tile5.txt │ │ │ │ ├── tile6.txt │ │ │ │ ├── tile7.txt │ │ │ │ ├── tile8.txt │ │ │ │ └── tile9.txt │ │ │ ├── 8x6/ │ │ │ │ ├── tile0.txt │ │ │ │ ├── tile1.txt │ │ │ │ ├── tile10.txt │ │ │ │ ├── tile11.txt │ │ │ │ ├── tile12.txt │ │ │ │ ├── tile13.txt │ │ │ │ ├── tile14.txt │ │ │ │ ├── tile15.txt │ │ │ │ ├── tile16.txt │ │ │ │ ├── tile17.txt │ │ │ │ ├── tile18.txt │ │ │ │ ├── tile19.txt │ │ │ │ ├── tile2.txt │ │ │ │ ├── tile20.txt │ │ │ │ ├── tile21.txt │ │ │ │ ├── tile22.txt │ │ │ │ ├── tile23.txt │ │ │ │ ├── tile24.txt │ │ │ │ ├── tile25.txt │ │ │ │ ├── tile26.txt │ │ │ │ ├── tile3.txt │ │ │ │ ├── tile4.txt │ │ │ │ ├── tile5.txt │ │ │ │ ├── tile6.txt │ │ │ │ ├── tile7.txt │ │ │ │ ├── tile8.txt │ │ │ │ └── tile9.txt │ │ │ ├── 8x8/ │ │ │ │ ├── tile0.txt │ │ │ │ ├── tile1.txt │ │ │ │ ├── tile10.txt │ │ │ │ ├── tile11.txt │ │ │ │ ├── tile12.txt │ │ │ │ ├── tile13.txt │ │ │ │ ├── tile14.txt │ │ │ │ ├── tile15.txt │ │ │ │ ├── tile16.txt │ │ │ │ ├── tile17.txt │ │ │ │ ├── tile18.txt │ │ │ │ ├── tile19.txt │ │ │ │ ├── tile2.txt │ │ │ │ ├── tile20.txt │ │ │ │ ├── tile21.txt │ │ │ │ ├── tile22.txt │ │ │ │ ├── tile23.txt │ │ │ │ ├── tile24.txt │ │ │ │ ├── tile25.txt │ │ │ │ ├── tile3.txt │ │ │ │ ├── tile4.txt │ │ │ │ ├── tile5.txt │ │ │ │ ├── tile6.txt │ │ │ │ ├── tile7.txt │ │ │ │ ├── tile8.txt │ │ │ │ └── tile9.txt │ │ │ └── ASCII/ │ │ │ └── char_tiles.h │ │ └── text_game_code.template/ │ │ ├── main.c │ │ ├── shapes/ │ │ │ ├── 6x8/ │ │ │ │ ├── shape0.txt │ │ │ │ ├── shape1.txt │ │ │ │ ├── shape10.txt │ │ │ │ ├── shape11.txt │ │ │ │ ├── shape12.txt │ │ │ │ ├── shape13.txt │ │ │ │ ├── shape14.txt │ │ │ │ ├── shape15.txt │ │ │ │ ├── shape16.txt │ │ │ │ ├── shape17.txt │ │ │ │ ├── shape18.txt │ │ │ │ ├── shape19.txt │ │ │ │ ├── shape2.txt │ │ │ │ ├── shape20.txt │ │ │ │ ├── shape21.txt │ │ │ │ ├── shape22.txt │ │ │ │ ├── shape23.txt │ │ │ │ ├── shape24.txt │ │ │ │ ├── shape25.txt │ │ │ │ ├── shape26.txt │ │ │ │ ├── shape3.txt │ │ │ │ ├── shape4.txt │ │ │ │ ├── shape5.txt │ │ │ │ ├── shape6.txt │ │ │ │ ├── shape7.txt │ │ │ │ ├── shape8.txt │ │ │ │ └── shape9.txt │ │ │ ├── 6x9/ │ │ │ │ ├── shape0.txt │ │ │ │ ├── shape1.txt │ │ │ │ ├── shape10.txt │ │ │ │ ├── shape11.txt │ │ │ │ ├── shape12.txt │ │ │ │ ├── shape13.txt │ │ │ │ ├── shape14.txt │ │ │ │ ├── shape15.txt │ │ │ │ ├── shape16.txt │ │ │ │ ├── shape17.txt │ │ │ │ ├── shape18.txt │ │ │ │ ├── shape19.txt │ │ │ │ ├── shape2.txt │ │ │ │ ├── shape20.txt │ │ │ │ ├── shape21.txt │ │ │ │ ├── shape22.txt │ │ │ │ ├── shape23.txt │ │ │ │ ├── shape24.txt │ │ │ │ ├── shape25.txt │ │ │ │ ├── shape26.txt │ │ │ │ ├── shape3.txt │ │ │ │ ├── shape4.txt │ │ │ │ ├── shape5.txt │ │ │ │ ├── shape6.txt │ │ │ │ ├── shape7.txt │ │ │ │ ├── shape8.txt │ │ │ │ └── shape9.txt │ │ │ ├── 7x8/ │ │ │ │ ├── shape0.txt │ │ │ │ ├── shape1.txt │ │ │ │ ├── shape10.txt │ │ │ │ ├── shape11.txt │ │ │ │ ├── shape12.txt │ │ │ │ ├── shape13.txt │ │ │ │ ├── shape14.txt │ │ │ │ ├── shape15.txt │ │ │ │ ├── shape16.txt │ │ │ │ ├── shape17.txt │ │ │ │ ├── shape18.txt │ │ │ │ ├── shape19.txt │ │ │ │ ├── shape2.txt │ │ │ │ ├── shape20.txt │ │ │ │ ├── shape21.txt │ │ │ │ ├── shape22.txt │ │ │ │ ├── shape23.txt │ │ │ │ ├── shape24.txt │ │ │ │ ├── shape25.txt │ │ │ │ ├── shape26.txt │ │ │ │ ├── shape3.txt │ │ │ │ ├── shape4.txt │ │ │ │ ├── shape5.txt │ │ │ │ ├── shape6.txt │ │ │ │ ├── shape7.txt │ │ │ │ ├── shape8.txt │ │ │ │ └── shape9.txt │ │ │ ├── 8x6/ │ │ │ │ ├── shape0.txt │ │ │ │ ├── shape1.txt │ │ │ │ ├── shape10.txt │ │ │ │ ├── shape11.txt │ │ │ │ ├── shape12.txt │ │ │ │ ├── shape13.txt │ │ │ │ ├── shape14.txt │ │ │ │ ├── shape15.txt │ │ │ │ ├── shape16.txt │ │ │ │ ├── shape17.txt │ │ │ │ ├── shape18.txt │ │ │ │ ├── shape19.txt │ │ │ │ ├── shape2.txt │ │ │ │ ├── shape20.txt │ │ │ │ ├── shape21.txt │ │ │ │ ├── shape22.txt │ │ │ │ ├── shape23.txt │ │ │ │ ├── shape24.txt │ │ │ │ ├── shape25.txt │ │ │ │ ├── shape26.txt │ │ │ │ ├── shape3.txt │ │ │ │ ├── shape4.txt │ │ │ │ ├── shape5.txt │ │ │ │ ├── shape6.txt │ │ │ │ ├── shape7.txt │ │ │ │ ├── shape8.txt │ │ │ │ └── shape9.txt │ │ │ └── 8x8/ │ │ │ ├── shape0.txt │ │ │ ├── shape1.txt │ │ │ ├── shape10.txt │ │ │ ├── shape11.txt │ │ │ ├── shape12.txt │ │ │ ├── shape13.txt │ │ │ ├── shape14.txt │ │ │ ├── shape15.txt │ │ │ ├── shape16.txt │ │ │ ├── shape17.txt │ │ │ ├── shape18.txt │ │ │ ├── shape19.txt │ │ │ ├── shape2.txt │ │ │ ├── shape20.txt │ │ │ ├── shape21.txt │ │ │ ├── shape22.txt │ │ │ ├── shape23.txt │ │ │ ├── shape24.txt │ │ │ ├── shape25.txt │ │ │ ├── shape26.txt │ │ │ ├── shape3.txt │ │ │ ├── shape4.txt │ │ │ ├── shape5.txt │ │ │ ├── shape6.txt │ │ │ ├── shape7.txt │ │ │ ├── shape8.txt │ │ │ └── shape9.txt │ │ └── tiles/ │ │ ├── 6x8/ │ │ │ ├── tile0.txt │ │ │ ├── tile1.txt │ │ │ ├── tile10.txt │ │ │ ├── tile11.txt │ │ │ ├── tile12.txt │ │ │ ├── tile13.txt │ │ │ ├── tile14.txt │ │ │ ├── tile15.txt │ │ │ ├── tile16.txt │ │ │ ├── tile17.txt │ │ │ ├── tile18.txt │ │ │ ├── tile19.txt │ │ │ ├── tile2.txt │ │ │ ├── tile20.txt │ │ │ ├── tile21.txt │ │ │ ├── tile22.txt │ │ │ ├── tile23.txt │ │ │ ├── tile24.txt │ │ │ ├── tile25.txt │ │ │ ├── tile26.txt │ │ │ ├── tile3.txt │ │ │ ├── tile4.txt │ │ │ ├── tile5.txt │ │ │ ├── tile6.txt │ │ │ ├── tile7.txt │ │ │ ├── tile8.txt │ │ │ └── tile9.txt │ │ ├── 6x9/ │ │ │ ├── tile0.txt │ │ │ ├── tile1.txt │ │ │ ├── tile10.txt │ │ │ ├── tile11.txt │ │ │ ├── tile12.txt │ │ │ ├── tile13.txt │ │ │ ├── tile14.txt │ │ │ ├── tile15.txt │ │ │ ├── tile16.txt │ │ │ ├── tile17.txt │ │ │ ├── tile18.txt │ │ │ ├── tile19.txt │ │ │ ├── tile2.txt │ │ │ ├── tile20.txt │ │ │ ├── tile21.txt │ │ │ ├── tile22.txt │ │ │ ├── tile23.txt │ │ │ ├── tile24.txt │ │ │ ├── tile25.txt │ │ │ ├── tile26.txt │ │ │ ├── tile3.txt │ │ │ ├── tile4.txt │ │ │ ├── tile5.txt │ │ │ ├── tile6.txt │ │ │ ├── tile7.txt │ │ │ ├── tile8.txt │ │ │ └── tile9.txt │ │ ├── 7x8/ │ │ │ ├── tile0.txt │ │ │ ├── tile1.txt │ │ │ ├── tile10.txt │ │ │ ├── tile11.txt │ │ │ ├── tile12.txt │ │ │ ├── tile13.txt │ │ │ ├── tile14.txt │ │ │ ├── tile15.txt │ │ │ ├── tile16.txt │ │ │ ├── tile17.txt │ │ │ ├── tile18.txt │ │ │ ├── tile19.txt │ │ │ ├── tile2.txt │ │ │ ├── tile20.txt │ │ │ ├── tile21.txt │ │ │ ├── tile22.txt │ │ │ ├── tile23.txt │ │ │ ├── tile24.txt │ │ │ ├── tile25.txt │ │ │ ├── tile26.txt │ │ │ ├── tile3.txt │ │ │ ├── tile4.txt │ │ │ ├── tile5.txt │ │ │ ├── tile6.txt │ │ │ ├── tile7.txt │ │ │ ├── tile8.txt │ │ │ └── tile9.txt │ │ ├── 8x6/ │ │ │ ├── tile0.txt │ │ │ ├── tile1.txt │ │ │ ├── tile10.txt │ │ │ ├── tile11.txt │ │ │ ├── tile12.txt │ │ │ ├── tile13.txt │ │ │ ├── tile14.txt │ │ │ ├── tile15.txt │ │ │ ├── tile16.txt │ │ │ ├── tile17.txt │ │ │ ├── tile18.txt │ │ │ ├── tile19.txt │ │ │ ├── tile2.txt │ │ │ ├── tile20.txt │ │ │ ├── tile21.txt │ │ │ ├── tile22.txt │ │ │ ├── tile23.txt │ │ │ ├── tile24.txt │ │ │ ├── tile25.txt │ │ │ ├── tile26.txt │ │ │ ├── tile3.txt │ │ │ ├── tile4.txt │ │ │ ├── tile5.txt │ │ │ ├── tile6.txt │ │ │ ├── tile7.txt │ │ │ ├── tile8.txt │ │ │ └── tile9.txt │ │ ├── 8x8/ │ │ │ ├── tile0.txt │ │ │ ├── tile1.txt │ │ │ ├── tile10.txt │ │ │ ├── tile11.txt │ │ │ ├── tile12.txt │ │ │ ├── tile13.txt │ │ │ ├── tile14.txt │ │ │ ├── tile15.txt │ │ │ ├── tile16.txt │ │ │ ├── tile17.txt │ │ │ ├── tile18.txt │ │ │ ├── tile19.txt │ │ │ ├── tile2.txt │ │ │ ├── tile20.txt │ │ │ ├── tile21.txt │ │ │ ├── tile22.txt │ │ │ ├── tile23.txt │ │ │ ├── tile24.txt │ │ │ ├── tile25.txt │ │ │ ├── tile26.txt │ │ │ ├── tile3.txt │ │ │ ├── tile4.txt │ │ │ ├── tile5.txt │ │ │ ├── tile6.txt │ │ │ ├── tile7.txt │ │ │ ├── tile8.txt │ │ │ └── tile9.txt │ │ └── ASCII/ │ │ └── char_tiles.h │ ├── unit_tests/ │ │ ├── testDefaults.py │ │ ├── testImport.py │ │ ├── testParams.py │ │ ├── testShapes.py │ │ ├── testStrings.py │ │ └── testTiles.py │ └── xl └── tools/ ├── README.txt ├── atari_st/ │ └── usr/ │ └── share/ │ └── terminfo/ │ └── s/ │ └── st52 ├── bbc/ │ └── bbcim-1.0.1/ │ ├── Makefile │ ├── READ_ME │ ├── doc/ │ │ ├── ARCHIVE_FORMAT-0.83 │ │ ├── LICENCE │ │ ├── bbcim.1 │ │ └── bbcim.ps │ └── src/ │ ├── archief.c │ ├── bbc_crc.c │ ├── bbcim.c │ ├── ddos2dfs.c │ ├── diskb_add.c │ ├── diskb_del.c │ ├── expand_im.c │ ├── intersplits.c │ ├── minimaliseer.c │ ├── nieuw_diskb.c │ ├── overschrijf.c │ ├── overschrijf.h │ ├── splits_cat.c │ ├── w62.c │ └── xbeeb.c ├── cc65/ │ ├── apple2/ │ │ ├── MASTER_BOOT_ASCHASE.DSK │ │ └── ac.jar │ ├── atari/ │ │ └── mkatr-master/ │ │ ├── .clang-format │ │ ├── .gitignore │ │ ├── LICENSE │ │ ├── Makefile │ │ ├── README.md │ │ ├── bomber.atr │ │ └── src/ │ │ ├── asm/ │ │ │ ├── boot128.asm │ │ │ ├── boot128.h │ │ │ ├── boot256.asm │ │ │ ├── boot256.h │ │ │ └── get_boot.sh │ │ ├── atr.c │ │ ├── atr.h │ │ ├── compat.c │ │ ├── compat.h │ │ ├── crc32.c │ │ ├── crc32.h │ │ ├── darray.c │ │ ├── darray.h │ │ ├── disksizes.h │ │ ├── flist.c │ │ ├── flist.h │ │ ├── lsatr.c │ │ ├── lsdos.c │ │ ├── lsdos.h │ │ ├── lsextra.c │ │ ├── lsextra.h │ │ ├── lshowfen.c │ │ ├── lshowfen.h │ │ ├── lssfs.c │ │ ├── lssfs.h │ │ ├── mkatr.c │ │ ├── msg.c │ │ ├── msg.h │ │ ├── spartafs.c │ │ ├── spartafs.h │ │ └── version.h │ ├── atari7800/ │ │ ├── extzp.inc │ │ ├── extzp.s │ │ ├── sfx.s │ │ ├── sfx_monolythic.s │ │ └── sfxlib/ │ │ ├── sfx_70stvcomputer.s │ │ ├── sfx_activate.s │ │ ├── sfx_advbite.s │ │ ├── sfx_advdragonslain.s │ │ ├── sfx_advdrop.s │ │ ├── sfx_advpickup.s │ │ ├── sfx_alienaggressor.s │ │ ├── sfx_alienbuzz.s │ │ ├── sfx_aliencoo.s │ │ ├── sfx_alienkitty.s │ │ ├── sfx_alienklaxon.s │ │ ├── sfx_alienlife.s │ │ ├── sfx_alientrill1.s │ │ ├── sfx_alientrill2.s │ │ ├── sfx_anotherjumpdies.s │ │ ├── sfx_anotherjumpman.s │ │ ├── sfx_anotherup.s │ │ ├── sfx_arfarf.s │ │ ├── sfx_babyribbit.s │ │ ├── sfx_babyribbithop.s │ │ ├── sfx_babywah.s │ │ ├── sfx_bassbump.s │ │ ├── sfx_bassbump2.s │ │ ├── sfx_berzerkrobotdeath.s │ │ ├── sfx_bling.s │ │ ├── sfx_bubbleup.s │ │ ├── sfx_buzzbomb.s │ │ ├── sfx_cabwhistle.s │ │ ├── sfx_cavalry.s │ │ ├── sfx_chirp.s │ │ ├── sfx_crystalchimes.s │ │ ├── sfx_deeproar.s │ │ ├── sfx_denied.s │ │ ├── sfx_distressed.s │ │ ├── sfx_distressed2.s │ │ ├── sfx_distressed3.s │ │ ├── sfx_distressed4.s │ │ ├── sfx_doorpound.s │ │ ├── sfx_downthepipe.s │ │ ├── sfx_dragit.s │ │ ├── sfx_drip.s │ │ ├── sfx_dropmedium.s │ │ ├── sfx_dropped.s │ │ ├── sfx_dunno.s │ │ ├── sfx_echo1.s │ │ ├── sfx_echo2.s │ │ ├── sfx_echobang.s │ │ ├── sfx_eek.s │ │ ├── sfx_eek2.s │ │ ├── sfx_electrobump.s │ │ ├── sfx_electropunch.s │ │ ├── sfx_electrosplosion.s │ │ ├── sfx_electroswitch.s │ │ ├── sfx_electroswitch2.s │ │ ├── sfx_explosion.s │ │ ├── sfx_falling.s │ │ ├── sfx_gooditem.s │ │ ├── sfx_gotthecoin.s │ │ ├── sfx_gotthering.s │ │ ├── sfx_hahaha.s │ │ ├── sfx_hahaha2.s │ │ ├── sfx_hophip.s │ │ ├── sfx_hophipquick.s │ │ ├── sfx_hophop.s │ │ ├── sfx_humanoid.s │ │ ├── sfx_jump1.s │ │ ├── sfx_jump2.s │ │ ├── sfx_jump3.s │ │ ├── sfx_jumpman.s │ │ ├── sfx_jumpo.s │ │ ├── sfx_laserrecoil.s │ │ ├── sfx_longgongsilver.s │ │ ├── sfx_maser.s │ │ ├── sfx_nonobounce.s │ │ ├── sfx_oneup.s │ │ ├── sfx_ouch.s │ │ ├── sfx_pewpew.s │ │ ├── sfx_pickupprize.s │ │ ├── sfx_pitfalljump.s │ │ ├── sfx_plainlaser.s │ │ ├── sfx_plonk.s │ │ ├── sfx_poof1.s │ │ ├── sfx_poof2.s │ │ ├── sfx_powerup.s │ │ ├── sfx_pulsecannon.s │ │ ├── sfx_quack.s │ │ ├── sfx_ribbit.s │ │ ├── sfx_roarcheep.s │ │ ├── sfx_roarroar.s │ │ ├── sfx_rubberhammer.s │ │ ├── sfx_rubbermallet.s │ │ ├── sfx_salvolasershot.s │ │ ├── sfx_simplebuzz.s │ │ ├── sfx_snore.s │ │ ├── sfx_spaceinvshoot.s │ │ ├── sfx_spawn.s │ │ ├── sfx_spring.s │ │ ├── sfx_squeek.s │ │ ├── sfx_strum.s │ │ ├── sfx_teleported.s │ │ ├── sfx_tom.s │ │ ├── sfx_transporter.s │ │ ├── sfx_twinkle.s │ │ ├── sfx_uhoh.s │ │ ├── sfx_uncovered.s │ │ ├── sfx_warcry.s │ │ ├── sfx_whoa.s │ │ ├── sfx_wilhelm.s │ │ ├── sfx_wolfwhistle.s │ │ ├── sfx_yahoo.s │ │ └── sfx_yeah.s │ ├── bbc/ │ │ └── INSTALL/ │ │ └── bbcim-1.2/ │ │ ├── Makefile │ │ ├── READ_ME │ │ ├── doc/ │ │ │ ├── ARCHIVE_FORMAT-0.83 │ │ │ ├── CHANGES │ │ │ ├── EMAIL │ │ │ ├── LICENCE │ │ │ ├── TO_DO │ │ │ ├── USE_AS_LIBRARY │ │ │ ├── WatfordDFS_format.txt │ │ │ └── bbcim.1 │ │ ├── lib/ │ │ │ ├── Makefile │ │ │ ├── NOT_USED/ │ │ │ │ └── d_write_cat.c │ │ │ ├── _config.h │ │ │ ├── bbcim_internal.h │ │ │ ├── bbcimlib.c │ │ │ ├── disk_add_file.c │ │ │ ├── disk_catalogue_extract.c │ │ │ ├── disk_catalogue_extract__dfs.c │ │ │ ├── disk_combine_ss.c │ │ │ ├── disk_convert_ddos_to_dfs.c │ │ │ ├── disk_convert_w62_to_dfs.c │ │ │ ├── disk_delete_file.c │ │ │ ├── disk_expand.c │ │ │ ├── disk_id.c │ │ │ ├── disk_minimise.c │ │ │ ├── disk_new.c │ │ │ ├── disk_set_boot.c │ │ │ ├── disk_split_ds.c │ │ │ ├── error.c │ │ │ ├── include/ │ │ │ │ └── bbcim.h │ │ │ ├── overschrijf.c │ │ │ ├── overschrijf.h │ │ │ ├── shared/ │ │ │ │ ├── _ansi_console.h │ │ │ │ ├── _bbc_crc.c │ │ │ │ ├── _bbc_crc.h │ │ │ │ ├── _bbc_filenames.c │ │ │ │ ├── _bbc_filenames.h │ │ │ │ ├── _read_write_wrappers.c │ │ │ │ ├── _read_write_wrappers.h │ │ │ │ └── archive_format/ │ │ │ │ ├── ARCHIVE_FORMAT-0.83 │ │ │ │ ├── EMAIL │ │ │ │ ├── Makefile │ │ │ │ ├── READ_ME │ │ │ │ ├── _bbc_archive.h │ │ │ │ ├── _bbc_archive_read_attributes.c │ │ │ │ ├── _bbc_archive_write_attributes.c │ │ │ │ ├── _weg/ │ │ │ │ │ └── archive_error.c │ │ │ │ └── test/ │ │ │ │ ├── Makefile │ │ │ │ └── archive_test.c │ │ │ └── utils.c │ │ ├── prog/ │ │ │ ├── Makefile │ │ │ ├── _config.h │ │ │ ├── _help.c │ │ │ ├── _help_man.c │ │ │ ├── bbcim.c │ │ │ ├── functions/ │ │ │ │ ├── archive_cleanup.c │ │ │ │ ├── archive_crc_check.c │ │ │ │ └── catalogue_to_inf.c │ │ │ ├── shared/ │ │ │ │ └── _ansi_console.h │ │ │ └── utils.c │ │ └── test/ │ │ ├── Makefile │ │ └── libtest.c │ ├── c64/ │ │ └── prg2crt.py │ ├── gamate/ │ │ └── gamate-fixcart.c │ ├── osic1p/ │ │ └── srecord-1.64/ │ │ ├── AUTHORS │ │ ├── BUILDING │ │ ├── LICENSE │ │ ├── Makefile.in │ │ ├── README │ │ ├── RELEASE │ │ ├── aegis.conf │ │ ├── aegis.conf.d/ │ │ │ ├── aede-policy │ │ │ ├── aemakegen │ │ │ ├── architecture │ │ │ ├── build │ │ │ ├── debian │ │ │ ├── diff │ │ │ ├── history │ │ │ ├── merge │ │ │ ├── new_file_template │ │ │ ├── rss │ │ │ └── test │ │ ├── configure │ │ ├── debian/ │ │ │ ├── changelog │ │ │ ├── compat │ │ │ ├── control │ │ │ ├── copyright │ │ │ ├── docs │ │ │ ├── libsrecord-dev.install │ │ │ ├── libsrecord0.install │ │ │ ├── rules │ │ │ ├── srecord-doc.install │ │ │ ├── srecord.install │ │ │ └── watch │ │ ├── etc/ │ │ │ ├── BUILDING.man │ │ │ ├── CHANGES.1.0.txt │ │ │ ├── CHANGES.1.1.txt │ │ │ ├── CHANGES.1.10.txt │ │ │ ├── CHANGES.1.2.txt │ │ │ ├── CHANGES.1.3.txt │ │ │ ├── CHANGES.1.4.txt │ │ │ ├── CHANGES.1.5.txt │ │ │ ├── CHANGES.1.6.txt │ │ │ ├── CHANGES.1.7.txt │ │ │ ├── CHANGES.1.8.txt │ │ │ ├── CHANGES.1.9.txt │ │ │ ├── CHANGES.sh │ │ │ ├── Howto.conf.in │ │ │ ├── README.man │ │ │ ├── apt-get-depends.cook │ │ │ ├── archive.cook │ │ │ ├── autoconf.cook │ │ │ ├── change_log.man │ │ │ ├── check-tarball.sh │ │ │ ├── configure.ac │ │ │ ├── crc16-ccitt.html │ │ │ ├── debian.png.uue │ │ │ ├── doc_cat.png.uue │ │ │ ├── doc_chip.png.uue │ │ │ ├── doc_gen.png.uue │ │ │ ├── doc_lens.png.uue │ │ │ ├── doc_lib.png.uue │ │ │ ├── documentation.cook │ │ │ ├── download.html │ │ │ ├── doxygen.cfg │ │ │ ├── doxygen.cook │ │ │ ├── groff.sh │ │ │ ├── howto.cook │ │ │ ├── howto_qemu_hardy64.txt │ │ │ ├── index.html │ │ │ ├── mailing-list.html │ │ │ ├── man-html-index.sh │ │ │ ├── metrics.cook │ │ │ ├── new.sh │ │ │ ├── page-list.awk │ │ │ ├── ppa-upload.sh │ │ │ ├── ref-ptx.ignore │ │ │ ├── ref-ptx.sh │ │ │ ├── ref-ptx1.awk │ │ │ ├── ref-ptx2.awk │ │ │ ├── reference.man │ │ │ ├── rpm-build.sh │ │ │ ├── srecord.lsm │ │ │ ├── srecord.png.uue │ │ │ ├── ssp.awk │ │ │ ├── tags.cook │ │ │ ├── template/ │ │ │ │ ├── c │ │ │ │ ├── cc │ │ │ │ ├── etc-new-so │ │ │ │ ├── generic │ │ │ │ ├── h │ │ │ │ ├── lib_cc │ │ │ │ ├── lib_h │ │ │ │ ├── man │ │ │ │ ├── sh │ │ │ │ └── test │ │ │ ├── whining.png.uue │ │ │ ├── windows.html │ │ │ └── x_defs_pack.vhd │ │ ├── install-sh │ │ ├── libdir/ │ │ │ └── pkgconfig/ │ │ │ └── srecord.pc.in │ │ ├── man/ │ │ │ ├── man1/ │ │ │ │ ├── srec_cat.1 │ │ │ │ ├── srec_cmp.1 │ │ │ │ ├── srec_examples.1 │ │ │ │ ├── srec_info.1 │ │ │ │ ├── srec_input.1 │ │ │ │ └── srec_license.1 │ │ │ ├── man3/ │ │ │ │ ├── srecord.3 │ │ │ │ └── srecord_license.3 │ │ │ └── man5/ │ │ │ ├── srec_aomf.5 │ │ │ ├── srec_ascii_hex.5 │ │ │ ├── srec_atmel_generic.5 │ │ │ ├── srec_binary.5 │ │ │ ├── srec_brecord.5 │ │ │ ├── srec_coe.5 │ │ │ ├── srec_cosmac.5 │ │ │ ├── srec_dec_binary.5 │ │ │ ├── srec_emon52.5 │ │ │ ├── srec_fairchild.5 │ │ │ ├── srec_fastload.5 │ │ │ ├── srec_formatted_binary.5 │ │ │ ├── srec_forth.5 │ │ │ ├── srec_fpc.5 │ │ │ ├── srec_idt.5 │ │ │ ├── srec_intel.5 │ │ │ ├── srec_intel16.5 │ │ │ ├── srec_logisim.5 │ │ │ ├── srec_mem.5 │ │ │ ├── srec_mif.5 │ │ │ ├── srec_mips_flash.5 │ │ │ ├── srec_mos_tech.5 │ │ │ ├── srec_motorola.5 │ │ │ ├── srec_msbin.5 │ │ │ ├── srec_needham.5 │ │ │ ├── srec_os65v.5 │ │ │ ├── srec_ppb.5 │ │ │ ├── srec_ppx.5 │ │ │ ├── srec_signetics.5 │ │ │ ├── srec_spasm.5 │ │ │ ├── srec_spectrum.5 │ │ │ ├── srec_stewie.5 │ │ │ ├── srec_tektronix.5 │ │ │ ├── srec_tektronix_extended.5 │ │ │ ├── srec_ti_tagged.5 │ │ │ ├── srec_ti_tagged_16.5 │ │ │ ├── srec_ti_txt.5 │ │ │ ├── srec_trs80.5 │ │ │ ├── srec_vmem.5 │ │ │ └── srec_wilson.5 │ │ ├── script/ │ │ │ └── test_prelude.sh.in │ │ ├── srec_cat/ │ │ │ ├── arglex3.cc │ │ │ ├── arglex3.h │ │ │ └── main.cc │ │ ├── srec_cmp/ │ │ │ └── main.cc │ │ ├── srec_info/ │ │ │ └── main.cc │ │ ├── srecord/ │ │ │ ├── adler16.cc │ │ │ ├── adler16.h │ │ │ ├── adler32.cc │ │ │ ├── adler32.h │ │ │ ├── arglex/ │ │ │ │ ├── abbreviate.cc │ │ │ │ ├── test_ambiguous.cc │ │ │ │ ├── tool/ │ │ │ │ │ ├── get_interval.cc │ │ │ │ │ ├── get_interval_small.cc │ │ │ │ │ ├── get_number.cc │ │ │ │ │ ├── get_string.cc │ │ │ │ │ ├── input.cc │ │ │ │ │ └── output.cc │ │ │ │ ├── tool.cc │ │ │ │ └── tool.h │ │ │ ├── arglex.cc │ │ │ ├── arglex.h │ │ │ ├── bitrev.cc │ │ │ ├── bitrev.h │ │ │ ├── config.h.in │ │ │ ├── config.messy.h │ │ │ ├── crc16.cc │ │ │ ├── crc16.h │ │ │ ├── crc32.cc │ │ │ ├── crc32.h │ │ │ ├── defcon.cc │ │ │ ├── defcon.h │ │ │ ├── endian/ │ │ │ │ └── decode_word.cc │ │ │ ├── endian.cc │ │ │ ├── endian.h │ │ │ ├── fletcher16.cc │ │ │ ├── fletcher16.h │ │ │ ├── fletcher32.cc │ │ │ ├── fletcher32.h │ │ │ ├── format_printf.h │ │ │ ├── input/ │ │ │ │ ├── catenate.cc │ │ │ │ ├── catenate.h │ │ │ │ ├── file/ │ │ │ │ │ ├── aomf.cc │ │ │ │ │ ├── aomf.h │ │ │ │ │ ├── ascii_hex.cc │ │ │ │ │ ├── ascii_hex.h │ │ │ │ │ ├── atmel_generic.cc │ │ │ │ │ ├── atmel_generic.h │ │ │ │ │ ├── binary.cc │ │ │ │ │ ├── binary.h │ │ │ │ │ ├── brecord.cc │ │ │ │ │ ├── brecord.h │ │ │ │ │ ├── cosmac.cc │ │ │ │ │ ├── cosmac.h │ │ │ │ │ ├── dec_binary.cc │ │ │ │ │ ├── dec_binary.h │ │ │ │ │ ├── emon52.cc │ │ │ │ │ ├── emon52.h │ │ │ │ │ ├── fairchild.cc │ │ │ │ │ ├── fairchild.h │ │ │ │ │ ├── fastload.cc │ │ │ │ │ ├── fastload.h │ │ │ │ │ ├── formatted_binary.cc │ │ │ │ │ ├── formatted_binary.h │ │ │ │ │ ├── four_packed_code.cc │ │ │ │ │ ├── four_packed_code.h │ │ │ │ │ ├── guess.cc │ │ │ │ │ ├── hexdump.cc │ │ │ │ │ ├── hexdump.h │ │ │ │ │ ├── idt.cc │ │ │ │ │ ├── idt.h │ │ │ │ │ ├── intel.cc │ │ │ │ │ ├── intel.h │ │ │ │ │ ├── intel16.cc │ │ │ │ │ ├── intel16.h │ │ │ │ │ ├── logisim.cc │ │ │ │ │ ├── logisim.h │ │ │ │ │ ├── mif.cc │ │ │ │ │ ├── mif.h │ │ │ │ │ ├── mips_flash.cc │ │ │ │ │ ├── mips_flash.h │ │ │ │ │ ├── mos_tech.cc │ │ │ │ │ ├── mos_tech.h │ │ │ │ │ ├── motorola.cc │ │ │ │ │ ├── motorola.h │ │ │ │ │ ├── msbin.cc │ │ │ │ │ ├── msbin.h │ │ │ │ │ ├── needham.cc │ │ │ │ │ ├── needham.h │ │ │ │ │ ├── os65v.cc │ │ │ │ │ ├── os65v.h │ │ │ │ │ ├── ppb.cc │ │ │ │ │ ├── ppb.h │ │ │ │ │ ├── ppx.cc │ │ │ │ │ ├── ppx.h │ │ │ │ │ ├── signetics.cc │ │ │ │ │ ├── signetics.h │ │ │ │ │ ├── spasm.cc │ │ │ │ │ ├── spasm.h │ │ │ │ │ ├── spectrum.cc │ │ │ │ │ ├── spectrum.h │ │ │ │ │ ├── stewie.cc │ │ │ │ │ ├── stewie.h │ │ │ │ │ ├── tektronix.cc │ │ │ │ │ ├── tektronix.h │ │ │ │ │ ├── tektronix_extended.cc │ │ │ │ │ ├── tektronix_extended.h │ │ │ │ │ ├── ti_tagged.cc │ │ │ │ │ ├── ti_tagged.h │ │ │ │ │ ├── ti_tagged_16.cc │ │ │ │ │ ├── ti_tagged_16.h │ │ │ │ │ ├── ti_txt.cc │ │ │ │ │ ├── ti_txt.h │ │ │ │ │ ├── trs80.cc │ │ │ │ │ ├── trs80.h │ │ │ │ │ ├── vmem.cc │ │ │ │ │ ├── vmem.h │ │ │ │ │ ├── wilson.cc │ │ │ │ │ └── wilson.h │ │ │ │ ├── file.cc │ │ │ │ ├── file.h │ │ │ │ ├── filter/ │ │ │ │ │ ├── and.cc │ │ │ │ │ ├── and.h │ │ │ │ │ ├── bitrev.cc │ │ │ │ │ ├── bitrev.h │ │ │ │ │ ├── byte_swap.cc │ │ │ │ │ ├── byte_swap.h │ │ │ │ │ ├── checksum/ │ │ │ │ │ │ ├── bitnot.cc │ │ │ │ │ │ ├── bitnot.h │ │ │ │ │ │ ├── negative.cc │ │ │ │ │ │ ├── negative.h │ │ │ │ │ │ ├── positive.cc │ │ │ │ │ │ └── positive.h │ │ │ │ │ ├── checksum.cc │ │ │ │ │ ├── checksum.h │ │ │ │ │ ├── crop.cc │ │ │ │ │ ├── crop.h │ │ │ │ │ ├── fill.cc │ │ │ │ │ ├── fill.h │ │ │ │ │ ├── interval/ │ │ │ │ │ │ ├── length.cc │ │ │ │ │ │ ├── length.h │ │ │ │ │ │ ├── maximum.cc │ │ │ │ │ │ ├── maximum.h │ │ │ │ │ │ ├── minimum.cc │ │ │ │ │ │ └── minimum.h │ │ │ │ │ ├── interval.cc │ │ │ │ │ ├── interval.h │ │ │ │ │ ├── message/ │ │ │ │ │ │ ├── adler16.cc │ │ │ │ │ │ ├── adler16.h │ │ │ │ │ │ ├── adler32.cc │ │ │ │ │ │ ├── adler32.h │ │ │ │ │ │ ├── crc16.cc │ │ │ │ │ │ ├── crc16.h │ │ │ │ │ │ ├── crc32.cc │ │ │ │ │ │ ├── crc32.h │ │ │ │ │ │ ├── fletcher16.cc │ │ │ │ │ │ ├── fletcher16.h │ │ │ │ │ │ ├── fletcher32.cc │ │ │ │ │ │ ├── fletcher32.h │ │ │ │ │ │ ├── gcrypt.cc │ │ │ │ │ │ ├── gcrypt.h │ │ │ │ │ │ ├── stm32.cc │ │ │ │ │ │ └── stm32.h │ │ │ │ │ ├── message.cc │ │ │ │ │ ├── message.h │ │ │ │ │ ├── not.cc │ │ │ │ │ ├── not.h │ │ │ │ │ ├── offset.cc │ │ │ │ │ ├── offset.h │ │ │ │ │ ├── or.cc │ │ │ │ │ ├── or.h │ │ │ │ │ ├── random_fill.cc │ │ │ │ │ ├── random_fill.h │ │ │ │ │ ├── sequence.cc │ │ │ │ │ ├── sequence.h │ │ │ │ │ ├── split.cc │ │ │ │ │ ├── split.h │ │ │ │ │ ├── unfill.cc │ │ │ │ │ ├── unfill.h │ │ │ │ │ ├── unsplit.cc │ │ │ │ │ ├── unsplit.h │ │ │ │ │ ├── xor.cc │ │ │ │ │ └── xor.h │ │ │ │ ├── filter.cc │ │ │ │ ├── filter.h │ │ │ │ ├── generator/ │ │ │ │ │ ├── constant.cc │ │ │ │ │ ├── constant.h │ │ │ │ │ ├── random.cc │ │ │ │ │ ├── random.h │ │ │ │ │ ├── repeat.cc │ │ │ │ │ └── repeat.h │ │ │ │ ├── generator.cc │ │ │ │ ├── generator.h │ │ │ │ ├── interval.cc │ │ │ │ └── interval.h │ │ │ ├── input.cc │ │ │ ├── input.h │ │ │ ├── interval/ │ │ │ │ ├── coverage.cc │ │ │ │ └── flatten.cc │ │ │ ├── interval.cc │ │ │ ├── interval.h │ │ │ ├── memory/ │ │ │ │ ├── chunk.cc │ │ │ │ ├── chunk.h │ │ │ │ ├── walker/ │ │ │ │ │ ├── adler16.cc │ │ │ │ │ ├── adler16.h │ │ │ │ │ ├── adler32.cc │ │ │ │ │ ├── adler32.h │ │ │ │ │ ├── alignment.cc │ │ │ │ │ ├── alignment.h │ │ │ │ │ ├── compare.cc │ │ │ │ │ ├── compare.h │ │ │ │ │ ├── continuity.cc │ │ │ │ │ ├── continuity.h │ │ │ │ │ ├── crc16.cc │ │ │ │ │ ├── crc16.h │ │ │ │ │ ├── crc32.cc │ │ │ │ │ ├── crc32.h │ │ │ │ │ ├── fletcher16.cc │ │ │ │ │ ├── fletcher16.h │ │ │ │ │ ├── fletcher32.cc │ │ │ │ │ ├── fletcher32.h │ │ │ │ │ ├── gcrypt.cc │ │ │ │ │ ├── gcrypt.h │ │ │ │ │ ├── stm32.cc │ │ │ │ │ ├── stm32.h │ │ │ │ │ ├── writer.cc │ │ │ │ │ └── writer.h │ │ │ │ ├── walker.cc │ │ │ │ └── walker.h │ │ │ ├── memory.cc │ │ │ ├── memory.h │ │ │ ├── output/ │ │ │ │ ├── file/ │ │ │ │ │ ├── aomf.cc │ │ │ │ │ ├── aomf.h │ │ │ │ │ ├── ascii_hex.cc │ │ │ │ │ ├── ascii_hex.h │ │ │ │ │ ├── asm.cc │ │ │ │ │ ├── asm.h │ │ │ │ │ ├── atmel_generic.cc │ │ │ │ │ ├── atmel_generic.h │ │ │ │ │ ├── basic.cc │ │ │ │ │ ├── basic.h │ │ │ │ │ ├── binary.cc │ │ │ │ │ ├── binary.h │ │ │ │ │ ├── brecord.cc │ │ │ │ │ ├── brecord.h │ │ │ │ │ ├── c.cc │ │ │ │ │ ├── c.h │ │ │ │ │ ├── coe.cc │ │ │ │ │ ├── coe.h │ │ │ │ │ ├── cosmac.cc │ │ │ │ │ ├── cosmac.h │ │ │ │ │ ├── dec_binary.cc │ │ │ │ │ ├── dec_binary.h │ │ │ │ │ ├── emon52.cc │ │ │ │ │ ├── emon52.h │ │ │ │ │ ├── fairchild.cc │ │ │ │ │ ├── fairchild.h │ │ │ │ │ ├── fastload.cc │ │ │ │ │ ├── fastload.h │ │ │ │ │ ├── formatted_binary.cc │ │ │ │ │ ├── formatted_binary.h │ │ │ │ │ ├── forth.cc │ │ │ │ │ ├── forth.h │ │ │ │ │ ├── four_packed_code.cc │ │ │ │ │ ├── four_packed_code.h │ │ │ │ │ ├── hexdump.cc │ │ │ │ │ ├── hexdump.h │ │ │ │ │ ├── idt.cc │ │ │ │ │ ├── idt.h │ │ │ │ │ ├── intel.cc │ │ │ │ │ ├── intel.h │ │ │ │ │ ├── intel16.cc │ │ │ │ │ ├── intel16.h │ │ │ │ │ ├── line_termination.cc │ │ │ │ │ ├── logisim.cc │ │ │ │ │ ├── logisim.h │ │ │ │ │ ├── mem.cc │ │ │ │ │ ├── mem.h │ │ │ │ │ ├── mif.cc │ │ │ │ │ ├── mif.h │ │ │ │ │ ├── mips_flash.cc │ │ │ │ │ ├── mips_flash.h │ │ │ │ │ ├── mos_tech.cc │ │ │ │ │ ├── mos_tech.h │ │ │ │ │ ├── motorola.cc │ │ │ │ │ ├── motorola.h │ │ │ │ │ ├── msbin.cc │ │ │ │ │ ├── msbin.h │ │ │ │ │ ├── needham.cc │ │ │ │ │ ├── needham.h │ │ │ │ │ ├── os65v.cc │ │ │ │ │ ├── os65v.h │ │ │ │ │ ├── ppb.cc │ │ │ │ │ ├── ppb.h │ │ │ │ │ ├── ppx.cc │ │ │ │ │ ├── ppx.h │ │ │ │ │ ├── signetics.cc │ │ │ │ │ ├── signetics.h │ │ │ │ │ ├── spasm.cc │ │ │ │ │ ├── spasm.h │ │ │ │ │ ├── spectrum.cc │ │ │ │ │ ├── spectrum.h │ │ │ │ │ ├── stewie.cc │ │ │ │ │ ├── stewie.h │ │ │ │ │ ├── tektronix.cc │ │ │ │ │ ├── tektronix.h │ │ │ │ │ ├── tektronix_extended.cc │ │ │ │ │ ├── tektronix_extended.h │ │ │ │ │ ├── ti_tagged.cc │ │ │ │ │ ├── ti_tagged.h │ │ │ │ │ ├── ti_tagged_16.cc │ │ │ │ │ ├── ti_tagged_16.h │ │ │ │ │ ├── ti_txt.cc │ │ │ │ │ ├── ti_txt.h │ │ │ │ │ ├── trs80.cc │ │ │ │ │ ├── trs80.h │ │ │ │ │ ├── vhdl.cc │ │ │ │ │ ├── vhdl.h │ │ │ │ │ ├── vmem.cc │ │ │ │ │ ├── vmem.h │ │ │ │ │ ├── wilson.cc │ │ │ │ │ └── wilson.h │ │ │ │ ├── file.cc │ │ │ │ ├── file.h │ │ │ │ ├── filter/ │ │ │ │ │ ├── reblock.cc │ │ │ │ │ └── reblock.h │ │ │ │ ├── filter.cc │ │ │ │ └── filter.h │ │ │ ├── output.cc │ │ │ ├── output.h │ │ │ ├── patchlevel.h │ │ │ ├── pretty_size.cc │ │ │ ├── pretty_size.h │ │ │ ├── progname.cc │ │ │ ├── progname.h │ │ │ ├── quit/ │ │ │ │ ├── exception.cc │ │ │ │ ├── exception.h │ │ │ │ ├── normal.cc │ │ │ │ ├── normal.h │ │ │ │ ├── prefix.cc │ │ │ │ └── prefix.h │ │ │ ├── quit.cc │ │ │ ├── quit.h │ │ │ ├── r250.cc │ │ │ ├── r250.h │ │ │ ├── record.cc │ │ │ ├── record.h │ │ │ ├── sizeof.h │ │ │ ├── srecord.h │ │ │ ├── stm32.cc │ │ │ ├── stm32.h │ │ │ ├── string/ │ │ │ │ ├── quote_c.cc │ │ │ │ ├── url_decode.cc │ │ │ │ └── url_encode.cc │ │ │ ├── string.h │ │ │ ├── versn_stamp.cc │ │ │ ├── versn_stamp.h │ │ │ └── vsnprintf.cc │ │ ├── srecord-1.64.spec │ │ ├── test/ │ │ │ ├── 00/ │ │ │ │ ├── t0001a.sh │ │ │ │ ├── t0002a.sh │ │ │ │ ├── t0003a.sh │ │ │ │ ├── t0004a.sh │ │ │ │ ├── t0005a.sh │ │ │ │ ├── t0006a.sh │ │ │ │ ├── t0007a.sh │ │ │ │ ├── t0008a.sh │ │ │ │ ├── t0009a.sh │ │ │ │ ├── t0010a.sh │ │ │ │ ├── t0011a.sh │ │ │ │ ├── t0012a.sh │ │ │ │ ├── t0013a.sh │ │ │ │ ├── t0014a.sh │ │ │ │ ├── t0015a.sh │ │ │ │ ├── t0016a.sh │ │ │ │ ├── t0017a.sh │ │ │ │ ├── t0018a.sh │ │ │ │ ├── t0019a.sh │ │ │ │ ├── t0020a.sh │ │ │ │ ├── t0021a.sh │ │ │ │ ├── t0022a.sh │ │ │ │ ├── t0023a.sh │ │ │ │ ├── t0024a.sh │ │ │ │ ├── t0025a.sh │ │ │ │ ├── t0026a.sh │ │ │ │ ├── t0027a.sh │ │ │ │ ├── t0028a.sh │ │ │ │ ├── t0029a.sh │ │ │ │ ├── t0030a.sh │ │ │ │ ├── t0031a.sh │ │ │ │ ├── t0032a.sh │ │ │ │ ├── t0033a.sh │ │ │ │ ├── t0034a.sh │ │ │ │ ├── t0035a.sh │ │ │ │ ├── t0036a.sh │ │ │ │ ├── t0037a.sh │ │ │ │ ├── t0037b.sh │ │ │ │ ├── t0038a.sh │ │ │ │ ├── t0039a.sh │ │ │ │ ├── t0040a.sh │ │ │ │ ├── t0050a.sh │ │ │ │ ├── t0051a.sh │ │ │ │ ├── t0052a.sh │ │ │ │ ├── t0053a.sh │ │ │ │ ├── t0055a.sh │ │ │ │ ├── t0056a.sh │ │ │ │ ├── t0057a.sh │ │ │ │ ├── t0058a.sh │ │ │ │ ├── t0059a.sh │ │ │ │ ├── t0060a.sh │ │ │ │ ├── t0061a.sh │ │ │ │ ├── t0062a.sh │ │ │ │ ├── t0063a.sh │ │ │ │ ├── t0065a.sh │ │ │ │ ├── t0066a.sh │ │ │ │ ├── t0067a.sh │ │ │ │ ├── t0068a.sh │ │ │ │ ├── t0069a.sh │ │ │ │ ├── t0070a.sh │ │ │ │ ├── t0071a.sh │ │ │ │ ├── t0072a.sh │ │ │ │ ├── t0073a.sh │ │ │ │ ├── t0075a.sh │ │ │ │ ├── t0076a.sh │ │ │ │ ├── t0077a.sh │ │ │ │ ├── t0078a.sh │ │ │ │ ├── t0079a.sh │ │ │ │ ├── t0080a.sh │ │ │ │ ├── t0081a.sh │ │ │ │ ├── t0082a.sh │ │ │ │ ├── t0083a.sh │ │ │ │ ├── t0085a.sh │ │ │ │ ├── t0086a.sh │ │ │ │ ├── t0087a.sh │ │ │ │ ├── t0088a.sh │ │ │ │ ├── t0089a.sh │ │ │ │ ├── t0090a.sh │ │ │ │ ├── t0091a.sh │ │ │ │ ├── t0092a.sh │ │ │ │ ├── t0093a.sh │ │ │ │ ├── t0095a.sh │ │ │ │ ├── t0096a.sh │ │ │ │ ├── t0097a.sh │ │ │ │ ├── t0098a.sh │ │ │ │ └── t0099a.sh │ │ │ ├── 01/ │ │ │ │ ├── t0100a.sh │ │ │ │ ├── t0101a.sh │ │ │ │ ├── t0102a.sh │ │ │ │ ├── t0103a.sh │ │ │ │ ├── t0105a.sh │ │ │ │ ├── t0106a.sh │ │ │ │ ├── t0107a.sh │ │ │ │ ├── t0108a.sh │ │ │ │ ├── t0109a.sh │ │ │ │ ├── t0110a.sh │ │ │ │ ├── t0111a.sh │ │ │ │ ├── t0112a.sh │ │ │ │ ├── t0113a.sh │ │ │ │ ├── t0115a.sh │ │ │ │ ├── t0116a.sh │ │ │ │ ├── t0117a.sh │ │ │ │ ├── t0118a.sh │ │ │ │ ├── t0119a.sh │ │ │ │ ├── t0120a.sh │ │ │ │ ├── t0121a.sh │ │ │ │ ├── t0122a.sh │ │ │ │ ├── t0123a.sh │ │ │ │ ├── t0125a.sh │ │ │ │ ├── t0126a.sh │ │ │ │ ├── t0127a.sh │ │ │ │ ├── t0128a.sh │ │ │ │ ├── t0129a.sh │ │ │ │ ├── t0130a.sh │ │ │ │ ├── t0131a.sh │ │ │ │ ├── t0132a.sh │ │ │ │ ├── t0133a.sh │ │ │ │ ├── t0135a.sh │ │ │ │ ├── t0136a.sh │ │ │ │ ├── t0137a.sh │ │ │ │ ├── t0138a.sh │ │ │ │ ├── t0139a.sh │ │ │ │ ├── t0150a.sh │ │ │ │ ├── t0151a.sh │ │ │ │ ├── t0152a.sh │ │ │ │ ├── t0153a.sh │ │ │ │ ├── t0155a.sh │ │ │ │ ├── t0156a.sh │ │ │ │ ├── t0157a.sh │ │ │ │ ├── t0158a.sh │ │ │ │ ├── t0159a.sh │ │ │ │ ├── t0160a.sh │ │ │ │ ├── t0161a.sh │ │ │ │ ├── t0162a.sh │ │ │ │ ├── t0163a.sh │ │ │ │ ├── t0165a.sh │ │ │ │ ├── t0166a.sh │ │ │ │ ├── t0167a.sh │ │ │ │ ├── t0168a.sh │ │ │ │ ├── t0169a.sh │ │ │ │ ├── t0170a.sh │ │ │ │ ├── t0171a.sh │ │ │ │ ├── t0172a.sh │ │ │ │ ├── t0173a.sh │ │ │ │ ├── t0175a.sh │ │ │ │ ├── t0176a.sh │ │ │ │ ├── t0177a.sh │ │ │ │ ├── t0178a.sh │ │ │ │ ├── t0179a.sh │ │ │ │ ├── t0180a.sh │ │ │ │ ├── t0181a.sh │ │ │ │ ├── t0182a.sh │ │ │ │ ├── t0183a.sh │ │ │ │ ├── t0185a.sh │ │ │ │ ├── t0186a.sh │ │ │ │ ├── t0187a.sh │ │ │ │ ├── t0188a.sh │ │ │ │ ├── t0189a.sh │ │ │ │ ├── t0191a.sh │ │ │ │ ├── t0192a.sh │ │ │ │ ├── t0193a.sh │ │ │ │ ├── t0195a.sh │ │ │ │ ├── t0196a.sh │ │ │ │ ├── t0197a.sh │ │ │ │ ├── t0198a.sh │ │ │ │ └── t0199a.sh │ │ │ ├── 02/ │ │ │ │ ├── t0200a.sh │ │ │ │ ├── t0201a.sh │ │ │ │ ├── t0202a.sh │ │ │ │ ├── t0203a.sh │ │ │ │ ├── t0205a.sh │ │ │ │ ├── t0206a.sh │ │ │ │ ├── t0207a.sh │ │ │ │ ├── t0209a.sh │ │ │ │ ├── t0210a.sh │ │ │ │ ├── t0211a.sh │ │ │ │ ├── t0212a.sh │ │ │ │ ├── t0213a.sh │ │ │ │ ├── t0215a.sh │ │ │ │ ├── t0216a.sh │ │ │ │ ├── t0217a.sh │ │ │ │ ├── t0218a.sh │ │ │ │ ├── t0219a.sh │ │ │ │ ├── t0220a.sh │ │ │ │ ├── t0221a.sh │ │ │ │ ├── t0222a.sh │ │ │ │ ├── t0223a.sh │ │ │ │ ├── t0225a.sh │ │ │ │ ├── t0227a.sh │ │ │ │ ├── t0228a.sh │ │ │ │ ├── t0229a.sh │ │ │ │ ├── t0230a.sh │ │ │ │ ├── t0231a.sh │ │ │ │ ├── t0232a.sh │ │ │ │ ├── t0233a.sh │ │ │ │ ├── t0235a.sh │ │ │ │ ├── t0236a.sh │ │ │ │ ├── t0237a.sh │ │ │ │ ├── t0238a.sh │ │ │ │ ├── t0239a.sh │ │ │ │ ├── t0250a.sh │ │ │ │ ├── t0251a.sh │ │ │ │ └── t0253a.sh │ │ │ ├── arglex_ambiguous/ │ │ │ │ └── main.cc │ │ │ ├── crc16/ │ │ │ │ └── main.cc │ │ │ ├── fletcher16/ │ │ │ │ └── main.cc │ │ │ ├── gecos/ │ │ │ │ └── main.cc │ │ │ ├── hyphen/ │ │ │ │ └── main.cc │ │ │ └── url_decode/ │ │ │ └── main.cc │ │ └── test_hyphen/ │ │ └── module.cook │ └── telestrat/ │ ├── mfmlib.h │ ├── old2mfm.c │ ├── sedoric3.h │ ├── tap2dsk.c │ └── tap2dsk.txt ├── cmoc/ │ ├── coco/ │ │ └── file2dsk/ │ │ ├── Source/ │ │ │ ├── Makefile │ │ │ └── file2dsk.c │ │ └── version_1.0.8.txt │ ├── dragon/ │ │ ├── bin2cas.pl │ │ └── bin2cas.txt │ ├── mo5/ │ │ ├── f2k5.c │ │ └── sap/ │ │ ├── dfloppy.c │ │ ├── floppy.h │ │ ├── lfloppy.c │ │ ├── libsap.c │ │ ├── libsap.h │ │ ├── licence.txt │ │ ├── makefile │ │ ├── makefile.dj │ │ ├── makefile.lnx │ │ ├── readme.txt │ │ ├── sap2.c │ │ └── sapfs.c │ └── to7/ │ └── k7tools/ │ ├── getmemo7.c │ ├── getrom.c │ ├── makefile │ ├── makefile.dj │ ├── makefile.lnx │ ├── readme.txt │ └── wav2k7.c ├── cpm/ │ ├── ANY2IMD.COM │ ├── BIN2IMD.COM │ ├── DMK2IMD.COM │ ├── IMD.COM │ ├── IMDA.COM │ ├── IMDU.COM │ ├── IMDV.COM │ ├── TD02IMD.COM │ ├── TESTFDC.COM │ └── imd118sc/ │ ├── ANY2IMD.C │ ├── BIN2IMD.C │ ├── DMK2IMD.C │ ├── IMD.C │ ├── IMDA.C │ ├── IMDU.C │ ├── IMDV.C │ ├── README.TXT │ ├── REMTAB.COM │ ├── TD02IMD.C │ ├── TD0NOTES.TXT │ ├── TESTFDC.C │ └── VERSION.H ├── gcc/ │ ├── libncurses.a │ └── libncurses.dll.a ├── generic/ │ └── CC1541/ │ ├── Makefile │ ├── README.md │ └── cc1541.c ├── olivetti_m20/ │ └── m20floppy-0.61/ │ ├── COPYING │ ├── ChangeLog │ ├── Makefile │ ├── README │ ├── blockop.c │ ├── blockop.h │ ├── cmdopts.h │ ├── cpgdefs.h │ ├── cpgtypes.h │ ├── fhdr.h │ ├── imgopen.c │ ├── imgopen.h │ ├── main.c │ ├── packend.h │ ├── packstrt.h │ ├── pcosdir.h │ ├── roprotos.h │ ├── roserv.c │ ├── rwprotos.h │ ├── rwserv.c │ ├── util.c │ ├── util.h │ └── version.h ├── ti99/ │ ├── cart_header.asm │ ├── crt0.c │ ├── crt0_ea5.asm │ ├── ea5split/ │ │ ├── Makefile │ │ └── ea5split.c │ ├── ea5tocart.jar │ ├── ea5tocart.txt │ └── elf2ea5/ │ ├── Makefile │ ├── elf.h │ └── elf2ea5.c └── z88dk/ ├── abc80/ │ └── abcdisk-2.7/ │ ├── .gitignore │ ├── Makefile.in │ ├── README.txt │ ├── _gitignore │ ├── abcdisk.h │ ├── abcfile.c │ ├── abcread.c │ ├── abctext.c │ ├── abcwrite.c │ ├── abs.c │ ├── asmsrc/ │ │ ├── bac80.asm │ │ ├── bac80.inc │ │ ├── bac800.asm │ │ ├── bac800a.asm │ │ ├── bac800d.asm │ │ ├── bac80r.asm │ │ ├── copy80.inc │ │ ├── end80.inc │ │ ├── mkcsrc.pl │ │ ├── relocate.inc │ │ ├── run800.inc │ │ ├── setup80.inc │ │ ├── setup800.inc │ │ └── start80.inc │ ├── autoconf/ │ │ ├── helpers/ │ │ │ ├── compile │ │ │ ├── config.guess │ │ │ ├── config.sub │ │ │ └── install-sh │ │ └── m4/ │ │ ├── pa_add_cflags.m4 │ │ ├── pa_add_cppflags.m4 │ │ ├── pa_add_flags.m4 │ │ ├── pa_add_headers.m4 │ │ ├── pa_add_ldflags.m4 │ │ ├── pa_arg_bool.m4 │ │ ├── pa_arg_enabled.m4 │ │ ├── pa_check_bad_stdc_inline.m4 │ │ ├── pa_func_attribute.m4 │ │ ├── pa_func_attribute_error.m4 │ │ ├── pa_have_func.m4 │ │ └── pa_sym.m4 │ ├── autogen.sh │ ├── bac80.c │ ├── bac800.c │ ├── bas.c │ ├── bin2abc.c │ ├── bin2abc.h │ ├── casdecode.c │ ├── casencode.c │ ├── clib/ │ │ ├── dirent.c │ │ └── dirent.h │ ├── compiler.h │ ├── config/ │ │ └── config.h.in │ ├── configure │ ├── configure.ac │ ├── deinter.c │ ├── formats.c │ ├── ihex.c │ ├── mangle.c │ ├── mkrel │ ├── patchlevel.h │ ├── relocs.c │ ├── tag │ ├── unmangle.c │ └── util.c ├── apple2/ │ └── CPM2.2(56k).dsk ├── cpc/ │ ├── cpcrslib/ │ │ ├── borra.bat │ │ ├── cambios.txt │ │ ├── cpc_AnyKeyPressed.asm │ │ ├── cpc_AssignKey.asm │ │ ├── cpc_Chars.asm │ │ ├── cpc_Chars8.asm │ │ ├── cpc_ClrScr.asm │ │ ├── cpc_CollSp.asm │ │ ├── cpc_DeleteKeys.asm │ │ ├── cpc_DisableFirmware.asm │ │ ├── cpc_EnableFirmware.asm │ │ ├── cpc_GetScrAddress.asm │ │ ├── cpc_GetScrAddress0.asm │ │ ├── cpc_GetSp.asm │ │ ├── cpc_GetSp0.asm │ │ ├── cpc_GetTiles.asm │ │ ├── cpc_InitTileMap.asm │ │ ├── cpc_InputText.asm │ │ ├── cpc_KeysData.asm │ │ ├── cpc_PrintGphStr.asm │ │ ├── cpc_PrintGphStr0.asm │ │ ├── cpc_PrintGphStr0M1.asm │ │ ├── cpc_PrintGphStr2X.asm │ │ ├── cpc_PrintGphStrM1.asm │ │ ├── cpc_PrintGphStrM12X.asm │ │ ├── cpc_PrintGphStrStd.asm │ │ ├── cpc_PrintGphStrStd0.asm │ │ ├── cpc_PrintGphStrStdXY.asm │ │ ├── cpc_PrintGphStrXY.asm │ │ ├── cpc_PrintGphStrXY2X.asm │ │ ├── cpc_PrintGphStrXYM1.asm │ │ ├── cpc_PrintGphStrXYM12X.asm │ │ ├── cpc_PrintStr.asm │ │ ├── cpc_PutCpSpTileMap2b.asm │ │ ├── cpc_PutMaskSp.asm │ │ ├── cpc_PutMaskSp0.asm │ │ ├── cpc_PutMaskSp2x8.asm │ │ ├── cpc_PutMaskSp4x16.asm │ │ ├── cpc_PutMaskSpTileMap2b.asm │ │ ├── cpc_PutMaskSprite.asm │ │ ├── cpc_PutMaskSpriteTileMap2b.asm │ │ ├── cpc_PutORSpTileMap2b.asm │ │ ├── cpc_PutSp.asm │ │ ├── cpc_PutSp0.asm │ │ ├── cpc_PutSpTileMap.asm │ │ ├── cpc_PutSpTileMap2b.asm │ │ ├── cpc_PutSpTileMapO.asm │ │ ├── cpc_PutSpTr.asm │ │ ├── cpc_PutSpTr0.asm │ │ ├── cpc_PutSpXOR.asm │ │ ├── cpc_PutSpXOR0.asm │ │ ├── cpc_PutSprite.asm │ │ ├── cpc_PutSpriteXOR.asm │ │ ├── cpc_PutTile2x8.asm │ │ ├── cpc_PutTile2x8b.asm │ │ ├── cpc_PutTile4x16.asm │ │ ├── cpc_PutTiles.asm │ │ ├── cpc_PutTrSp8x16TileMap2b.asm │ │ ├── cpc_PutTrSpTileMap2b.asm │ │ ├── cpc_PutTrSpriteTileMap2b.asm │ │ ├── cpc_RLI.asm │ │ ├── cpc_RRI.asm │ │ ├── cpc_Random.asm │ │ ├── cpc_ReadTile.asm │ │ ├── cpc_RedefineKey.asm │ │ ├── cpc_ResetTouchedTiles.asm │ │ ├── cpc_ScanKeyboard.asm │ │ ├── cpc_ScrollLeft.asm │ │ ├── cpc_ScrollLeft0.asm │ │ ├── cpc_ScrollRight.asm │ │ ├── cpc_ScrollRight0.asm │ │ ├── cpc_SetBorder.asm │ │ ├── cpc_SetColorGphStr.asm │ │ ├── cpc_SetColorGphStrM1.asm │ │ ├── cpc_SetColour.asm │ │ ├── cpc_SetInk.asm │ │ ├── cpc_SetInkGphStr.asm │ │ ├── cpc_SetInkGphStrM1.asm │ │ ├── cpc_SetMode.asm │ │ ├── cpc_SetModo.asm │ │ ├── cpc_SetTile.asm │ │ ├── cpc_SetTouchTileXY.asm │ │ ├── cpc_ShowScrTileMap.asm │ │ ├── cpc_ShowScrTileMap2.asm │ │ ├── cpc_ShowTileMap.asm │ │ ├── cpc_ShowTouchedTiles.asm │ │ ├── cpc_ShowTouchedTiles2.asm │ │ ├── cpc_SpRLM1.asm │ │ ├── cpc_SpRRM1.asm │ │ ├── cpc_SpUpdX.asm │ │ ├── cpc_SpUpdY.asm │ │ ├── cpc_SuperbufferAddress.asm │ │ ├── cpc_TestKey.asm │ │ ├── cpc_TestKeyF.asm │ │ ├── cpc_TestKeyboard.asm │ │ ├── cpc_TouchTileSpXY.asm │ │ ├── cpc_TouchTileXY.asm │ │ ├── cpc_TouchTiles.asm │ │ ├── cpc_UnExo.asm │ │ ├── cpc_Uncrunch.asm │ │ ├── cpc_UpdScr.asm │ │ ├── cpc_UpdScrAddresses.asm │ │ ├── cpc_UpdTileTable.asm │ │ ├── cpc_UpdateTileMap.asm │ │ ├── cpcrslib.h │ │ ├── cpcrslib.lib │ │ ├── make.bat │ │ ├── multiplication1.asm │ │ ├── multiplication2.asm │ │ └── optimizando_codigo.txt │ ├── cpcrslib.h │ ├── cpcrslib.lib │ ├── cpcwyzlib/ │ │ ├── borra.bat │ │ ├── cpc_WyzConfigurePlayer.asm │ │ ├── cpc_WyzInitPlayer.asm │ │ ├── cpc_WyzLoadSong.asm │ │ ├── cpc_WyzPlayer.asm │ │ ├── cpc_WyzSetPlayerOff.asm │ │ ├── cpc_WyzSetPlayerOn.asm │ │ ├── cpc_WyzSetTempo.asm │ │ ├── cpc_WyzStartEffect.asm │ │ ├── cpc_WyzStartSound.asm │ │ ├── cpc_WyzStopMusic.asm │ │ ├── cpc_WyzTestPlayer.asm │ │ ├── cpcwyzlib.h │ │ ├── cpcwyzlib.lib │ │ └── make.bat │ ├── cpcxfs/ │ │ └── readme │ └── nocart/ │ ├── amsdos.rom │ ├── basic.rom │ ├── os.rom │ ├── readme.txt │ ├── src/ │ │ ├── amsdos.rom │ │ ├── basic.rom │ │ ├── main.cpp │ │ ├── makefile │ │ ├── nocart.sln │ │ ├── nocart.vcxproj │ │ ├── nocart.vcxproj.filters │ │ ├── opth.c │ │ ├── opth.h │ │ ├── original/ │ │ │ ├── amsdos.rom │ │ │ ├── basic.rom │ │ │ └── os.rom │ │ ├── os.rom │ │ ├── patchbasic.asm │ │ ├── patchdos.asm │ │ ├── patchos.asm │ │ ├── patchroms.bat │ │ └── patchroms.sh │ └── test/ │ ├── amsdos.rom │ ├── basic.rom │ ├── bmc.dsk │ ├── da3a.dsk │ ├── os.rom │ ├── test.asm │ ├── test.bat │ ├── test.cpr │ ├── test.dsk │ └── test.sh ├── einstein/ │ └── EDIP1e/ │ ├── CPM2_BLK.DSK │ ├── DOS80.DSK │ ├── EDIPV1e.txt │ ├── README.txt │ ├── TESTlge.TXT │ ├── XBAS_131_40TSS.DSK │ ├── XTAL205_40TSS.DSK │ ├── XTAL205_80TDS.DSK │ └── ZDOS_BLK.DSK ├── oz/ │ └── makewzd.c ├── pacman/ │ ├── pacman.5e │ └── pacman.5f ├── samcoupe/ │ ├── pyz80.py │ ├── sam_wrapper.asm │ ├── samdos2 │ └── samdos2_empty └── trs80_model2/ └── LB225D.IMD ================================================ FILE CONTENTS ================================================ ================================================ FILE: .devcontainer/devcontainer.json ================================================ // For format details, see https://aka.ms/devcontainer.json. For config options, see the // README at: https://github.com/devcontainers/templates/tree/main/src/alpine { "name": "Cross-Lib", // Or use a Dockerfile or Docker Compose file. More info: https://containers.dev/guide/dockerfile "image": "ghcr.io/cross-lib/devcontainers/base:1.0.6-ubuntu", // "postStartCommand": "bash .devcontainer/post-start.sh", "customizations": { // Configure properties specific to VS Code. "vscode": { // Set *default* container specific settings.json values on container create. "settings": { "files.trimTrailingWhitespace": false, "python.defaultInterpreterPath": "/usr/local/bin/python" } }, "codespaces": { // Set *default* codespaces specific settings.json values on container create. "settings": { "files.trimTrailingWhitespace": false, "python.defaultInterpreterPath": "/usr/local/bin/python" } } } // Uncomment to connect as root instead. More info: https://aka.ms/dev-containers-non-root. // "remoteUser": "root" } ================================================ FILE: .devcontainer/post-start.sh ================================================ sudo install /usr/local/bin/p2hex /usr/bin PATH=.:$PATH ================================================ FILE: .gitignore ================================================ .bash_history .python_history deliverables **_shapes roms/mame/*.zip roms/vice/vic20/chargen roms/vice/vic20/kernal roms/vice/vic20/basic roms/vice/c64/chargen roms/vice/c64/kernal roms/vice/c64/basic roms/vice/plus4/chargen roms/vice/plus4/kernal roms/vice/plus4/basic roms/vice/plus4/3plus1hi roms/vice/plus4/3plus1lo roms/vice/pet/chargen roms/vice/pet/kernal1 roms/vice/pet/kernal2 roms/vice/pet/kernal4 roms/vice/pet/basic1 roms/vice/pet/basic2 roms/vice/pet/basic4 roms/vice/pet/edit* roms/vice/pet/characters* src/cfg/* **.lis **mapfile.txt **global.txt **A.BEE *.o *.def *.swp *.img *.tap *.prg build/* src/projects/* **generated_assets **__pycache__ src/assets/generated_assets/* src/examples/matrix/generated_assets/* src/examples/tiles/generated_assets/* src/examples/invaders/generated_assets/* src/examples/zombies/generated_assets/* src/examples/sounds/generated_assets/* src/games/chase/generated_assets/* src/games/shoot/generated_assets/* src/games/bomber/generated_assets/* src/games/snake/generated_assets/* src/games/horde/generated_assets/* src/games/shoot/main.c src/games/chase/main.c src/games/snake/main.c src/test/*.exe src/*.asm src/examples/full_lcc1802_combo.c src/games/full_lcc1802_combo.c src/experiments/* src/wincmoc_main.c src/*.asm src/chase/*.s src/nes/*.o src/nes/nes_graphics.s *.swp *.swo src/wincmoc_input.c src/wincmoc_graphics.c ./tools/cpcrslib/cpcrslib.lib ./map.txt *.stackdump src/wincmoc_tmp.c src/*combo.c src/modules/*.pyc *.lst tools/EDIP1e/xchase.DSK src/cross_lib/display/*.s src/chase/wincmoc* a.exe a.out src/games/full_combo_rand.c src/examples/full_combo_rand.c src/examples/reduced_full_lcc1802_combo.c src/examples/reduced_full_lcc1802_color_combo.c src/games/reduced_full_lcc1802_combo.c src/games/reduced_full_lcc1802_color_combo.c src/games/reduced_full_lcc1802_micro_combo.c src/games/reduced_full_lcc1802_combo_no_sounds.c src/debug/*.bin src/debug/cprintf src/debug/*.inf src/debug/bbctest src/debug/bbctest1 src/debug/bbctest2 src/debug/*.dsk src/debug/*.nes src/assets/*.pyc src/debug/gamate_conio_test src/debug/gamate_conio_test2 tools/cc65/gamate/gamate-fixcart.exe tools/cc65/osic1p/srecord-1.64/config.log tools/cmoc/mo5/f2k5.exe tools/cc65/gamate/gamate-fixcart.out tools/cc65/telestrat/tap2dsk.exe tools/cc65/telestrat/tap2dsk tools/cc65/telestrat/tap2dsk.out tools/cc65/telestrat/old2mfm.exe tools/cc65/telestrat/old2mfm tools/cc65/telestrat/old2mfm.out tools/cmoc/mo5/f2k5.out tools/bbc/bbcim.exe tools/bbc/bbcim.out tools/generic/CC1541/cc1541.exe tools/generic/CC1541/cc1541.out tools/generic/cc1541.exe tools/generic/cc1541.out tools/generic/exomizer/exomizer.exe tools/generic/exomizer/exomizer.out tools/generic/exomizer.exe tools/generic/exomizer tools/generic/exomizer/src/asm.tab.h tools/generic/exomizer/src/asm.tab.c tools/generic/CC1541/cc1541 tools/z88dk/oz/makewzd.exe tools/z88dk/oz/makewzd.out tools/cmoc/coco/file2dsk/file2dsk.exe tools/cmoc/coco/file2dsk/file2dsk.out tools/cmoc/mo5/sap/*.exe tools/cmoc/mo5/sap/*.out tools/cmoc/mo5/sapfs.exe tools/cmoc/mo5/sapfs.out tools/cmoc/mo5/sap/sap2 tools/cc65/atari/mkatr-master/lsatr.exe tools/cc65/atari/mkatr-master/mkatr.exe tools/cc65/atari/mkatr-master/lsatr.out tools/cc65/atari/mkatr-master/mkatr.out tools/z88dk/cpc/nocart/nocart.exe tools/z88dk/cpc/nocart/nocart.out tools/olivetti_m20/m20.exe tools/olivetti_m20/m20.out tools/ti99/elf2ea5.exe tools/ti99/elf2ea5.out tools/ti99/ea5split.exe tools/ti99/ea5split.out logs/*.log tools/z88dk/abc80/abcdisk-2.7/conftest.c tools/z88dk/abc80/abcdisk-2.7/abcwrite tools/z88dk/abc80/abcdisk-2.7/bin2abc tools/z88dk/abc80/abcdisk-2.7/confdefs.h **/*.sym **/*.dSYM **/*.DS_Store ================================================ FILE: README.md ================================================ # CROSS LIB ![LOGO](snapshots/CrossLibLogoByHamletShorter.jpg) *Cross-Lib* and games built with it (e.g., Chase, Shoot, Bomber, Snake, Horde, Verbix, Shuriken, Stinger, Trex) by Fabrizio Caruso (fabrizio_caruso@hotmail.com) *Cross-Lib* is a *WORA* (Write Once Run Anywhere) framework for vintage systems, i.e., you code your game in C **once** and *Cross-Lib* builds the very same game for about 200 vintage systems (console, computers, etc.) with **the very same code**. Read the Disclaimer.
------------------------------------------- ## CROSS-LIB-HD Cross-Lib-HD is an equivalent backward-compatible framework, still work-in-progress: http://github.com/Fabrizio-Caruso/CROSS-LIB-HD Its goal is to provide a **higher number of redefinable tiles**, while maintaining the **same API's** and possibly the same number of supported targets as Cross-Lib. Cross-Lib-HD is not meant to replace Cross-Lib because the latter can provide slightly smaller binaries, a higher number of colors and a higher number of targets with real graphics. A game with the need for a higher number of tiles may require Cross-Lib-HD, whereas games with a lower number of tiles will work on both but on Cross-Lib may get a better color pallette and/or graphics on some very limited targets. ------------------------------------------- ## ARTICLES ABOUT CROSS-LIB Article [in English], first published in C.A.L.L. Apple Volume 3 Number 1 (January 2023): C.A.L.L.-Apple Article [in French], first published in the French magazine "Programmez! Hors série #6": Programmez! ------------------------------------------- ## THE GAMES

Click on the links below to play the games on your browser. 1. Trex is a mini-game and an obvious clone of off-line Chrome T-Rex game. 2. Stinger is a tank-shooter with several enemies, levels, power-ups and items to pick. 3. Shuriken is somehow inspired by Pac-man and Pengo. 4. Verbix is a Scrabble-like game that looks like Tetrix with letters. 5. Horde is a zombie shooter with several different enemies, levels, power-ups and special items to pick. 6. Snake is my personal re-interpretation of Nibbler (arcade game) to which I have added more game elements. 7. Bomber is a mini-game and clone of Air Attack (aka Blitz). 8. Shoot is a shooter somehow similar to Robotron. It has many items and secrets to discover. 9. Chase is somehow similar to *Gnome Robots* but in real-time game and with several items and power-ups. ------------------------------------------- ## MORE THAN 200 SUPPORTED TARGETS Cross-Lib can be used to build games for more than 200 different vintage systems (computers, consoles, arcade boards, pocket calculators, etc.). An almost complete list of the supported systems with their status is in: Supported Systems Some supported vintage CPU architectures are: - `GBZ80` - `Intel 8080/85` - `Intel 8086` - `MOS 6502` - `Motorola 6803` - `Motorola 6809` - `RCA 1802` - `TMS 9900` - `Zilog 80` Cross-Lib has also some support for vintage 16-bit and 32-bit systems and the native host PC. For a more complete list of architectures you can look at: Architectures ------------------------------------------- ## SUPPORTED HOSTS Cross-Lib runs under __any POSIX__-like environment such as - ***Linux*** - ***Windows/Cygwin*** - ***Windows Subsystem for Linux*** - ***Windows/MSYS2*** - ***MacOS*** - ***FreeBSD*** ------------------------------------------- ## REQUIREMEMTS Cross-Lib requires a **POSIX** environment with at least - **Python** (2.7 is the bare minimum but 3.x provides more features) - **make** (GNU make) - one or more **ANSI C compiler(s)** If you want to produce interactive binaries for the *native terminal* you need a **native compiler** (*gcc* or any other compiler such as *clang*) with **ncurses** or **ncursesw**. In order to build binaries for a supported vintage system, the corresponding **cross-compiler** has to be installed (see the list of supported targets to see which compiler is required). ### Currently supported cross-compilers The current set of supported cross-compilers is: - `CC65`, - `Z88DK` (`SCCZ80` and `ZSDCC`), - `CMOC`, - `LCC1802`, - `TMS9900-GCC` - `ACK`, - `VBCC`, - `CC6303` Partially supported cross-compilers: - `GCC-Z8K`, - `XTC68` - `GCC-ATARI-ST`, - `GCC-AMIGA`, For more details click on Compilers ### Tools to generate disk/tape/cartridge images Very few targets use special tools to generate tape/disk/cartridge images. Some of these tools are built from source on the fly the first time they are required. Most require *gcc* or *g++*. In order to generate disk images for the *Apple][* and derivative targets Cross-Lib uses *ac.jar* for which **java** is necessary. To generate tape images for the *CoCo 1/2* and *Dragon 32/64* targets Cross-Lib uses bin2cas.pl for which **perl** is required. ------------------------------------------- ## NO ACTUAL INSTALLATION NECESSARY An actual installation is not necessary because Cross-Lib is made of scripts and a C *source library*, which is compiled on the fly when building binaries for target systems. Moreover even installing the required compilers may not be necessary because Cross-Lib can be used through GitHub Codespaces (with preinstalled compilers) on any browser. Additionally ou can also use it with - the pre-built docker image (compilers are preinstalled), - the dockerfile to build an image or (compilers are preinstalled), - a clone of this repository (which requires the installation of the compilers). For the details click on Installation ------------------------------------------- ## THE `xl` SCRIPT Inside the project main directory, you find the `src` and the `build` directories: - `src` contains the source code and all other files that are necessary to build the games and the examples; - `build` is supposed to be empty at first and it is the target directory for the build process. First of all you need to be in the `src` directory. From `src` you can use the `xl` script to do different operations on projects. `xl` is used as follows: ``` xl <[optional] parameters> ``` You can get help with: ``` xl help <[optional] command> ``` You can build games and examples with : `xl <[optional] system_name>` For example `xl snake vic20` builds the *snake* for the *Commodore Vic 20 +16K* and `xl stinger` builds *stinger* for the *native terminal*. For more details click on XL script ------------------------------------------- ## THE TOOL-CHAIN Cross-Lib provides a full tool-chain to build universal vintage 8-bit games. ### Cross-Lib components Cross-Lib provides: - a C library with hardware-agnostic APIs for game development; - the "user-friendly" script `xl`. ### The build process When a game is built for a specific target, the Cross-Lib tool-chain will automatically: 1. if needed, **convert abstract graphics assets** into target specific assets on the fly; 2. **compile and link** the game code (and the target-specific game assets) by using the appropriate compiler; 3. if needed, whenever possible, **create disk/cassette/cartridge images**. ### The Workflow The user has to: - **code** the game in C with Cross-Lib APIs in a hardware-agnostic way; - **draw** the abstract graphics assets and store them in the *tiles* or *shapes* directory; - **run** the `xl` script (see below). ![User](snapshots/User2.bmp) For more details click on Build ------------------------------------------- ## HOW TO CODE WITH CROSS-LIB https://github.com/Fabrizio-Caruso/CROSS-LIB/blob/master/docs/HARDWARE_AGNOSTIC_CODE.md https://github.com/Fabrizio-Caruso/CROSS-LIB/blob/master/docs/CROSS_LIB_APIS.md ------------------------------------------- ## LOADING THE GAMES https://github.com/Fabrizio-Caruso/CROSS-LIB/blob/master/docs/HOW_TO_LOAD.md ------------------------------------------- ## ACKNOWLEDGEMENTS Cross-Lib would not exist without the cross-compilers and the support of their developers and the support of some people who have helped me handle the input/output of some targets. A partial list of the people who have helped in found in Credits ------------------------------------------- ## LICENCE This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for non-commercial applications, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. For example I do not authorize selling hardware, software, firmware or any other product that contains any part of Cross-Lib and/or its games (e.g., pre-loaded disks, tapes, cartridges, etc.). On the other hand I authorize people to load the games in the most convenient way for their personal use. ================================================ FILE: cfg/___empty.cfg ================================================  ================================================ FILE: cfg/default.cfg ================================================  ================================================ FILE: docs/ARCHITECTURES.md ================================================ ## SUPPORTED ARCHITECTURES ### 8-BIT ARCHITECTURES - COSMAC RCA 1802 and derivates - Intel 8080 and derivatives - MOS 6502 and derivatives - Motorola 6809 and derivatives - Motorola 6803 - Zilog 80 and derivatives ### 16-BIT ARCHITECTURES - Intel 8088/8086 - Motorola 68000/68008 - PDP11 - TMS 9900 - Zilog Z8000 ### 32-BIT ARCHITECTURES - PowerPC - Intel 386 - Motorola 68020 - MIPS32r2 (little-endian) ### 32/64-BIT ARCHITECTURE We also support any current architecture for which GCC can produce a working binary. ================================================ FILE: docs/Alice32k.txt ================================================ By Christophe Possamaï //*************************************** //* CODE DEMO redefinition caractere * //* ligne de commande pour compilation: * //* cc68 -tmc10 tuto.c -o tuto * //* pour executer sur alice: * //* chargement: CLOADM * //* execution: EXEC * //*************************************** #include // definition Registres #define R0 0xBF20 //commande #define R1 0xBF21 //paramètre principal #define R2 0xBF22 //paramètre #define R3 0xBF23 //paramètre #define R4 0xBF24 //pointeur auxiliaire haut #define R5 0xBF25 //pointeur auxiliaire bas #define R6 0xBF26 //pointeur principal haut #define R7 0xBF27 //pointeur principal bas #define EXEC 0x8 // a ajouter au registe pour execution. // Definition couleurs #define noir 0 #define rouge 1 #define vert 2 #define orange 3 #define bleu 4 #define magenta 5 #define cyan 6 #define rose 7 #define vertc 10 #define jaune 11 #define magentac 13 #define blanc 15 char tuiles_0[] ={0x00,0x00,0x7C,0x92,0x92,0xFE,0xEE,0x7C,0x54,0x00}; char tuiles_1[] ={0x7E,0xC3,0xA9,0xFD,0xFD,0xFD,0xB9,0x91,0xC3,0x7E}; // fonction Poke void poke(uint16_t addr, uint8_t value) {*((uint8_t*)addr) = value;} //fonction Peek uint8_t peek(uint16_t address) { // Utilisez un pointeur pour accéder à l'adresse mémoire spécifiée uint8_t *memoryPointer = (uint8_t *)address; // Utilisez le pointeur pour lire la valeur à l'adresse spécifiée return *memoryPointer; } // positionne le curseur pour afficher un caractere void posxy(unsigned char colonne, unsigned char ligne) { poke(R6, ligne); // R6 (MP / LIGNE) poke(R7, colonne); // R7 (MP / COL) } // parametre void param(unsigned char b) { poke(R2, b); // R2 (B) } // defnie la couleur du prichain caractere void color(unsigned char crayon, unsigned char papier) { unsigned char b=0,a; if(crayon>rose) { b=1; crayon-=8; } if(papier>rose) { b=1; papier-=8; } a=papier+(crayon*16); poke(R2, b); // R2 (B) poke(R3, a); // R3 (A) couleur } // affiche un caractere void affichr(unsigned char c) { poke(R1, c); // R1 (C) poke(R0+EXEC, 0); // R0 + EXEC (KRF) } // fonction pour afficher une chaine de caractere ASCII a une position et avec les couleurs. void print(signed char x, signed char y, char *texte) { char *c = texte; // Correction ici if (x < 0) { x = (40 - sizeof(texte)) / 2; } posxy(x, y); for (; *c != '\0'; c++) { poke(R1, *c); poke(R0+EXEC, 1); } } // Fonction pour redefinir un caracteres void redefin(char numcaractere,char* data){ //CARACTERES REDÉFINIS uint16_t A = numcaractere+192; char i; for (i = 0; i < 10; ++i) { poke(R4, A / 256); poke(R5, A & 255); poke(R1, data[i]); poke(R0+EXEC, 48 + 4); // OCT + AUX_PTR (EXEC) A += 4; } } void main() { redefin(0,tuiles_0); //redifinition du caractere 0/128 redefin(1,tuiles_1); //redifinition du caractere 1/128 color(rouge,noir); print(6, 0,"Demo redefinition caracteres"); color(bleu,noir); param(128+32+16);// bascule sur les caractères redéfinit posxy(19, 8); affichr(0); posxy(20, 8); affichr(1); } ================================================ FILE: docs/BUILD.md ================================================ # BUILD INSTRUCTIONS ## Build the default target for a given system In order to build a game or a test, you need to be in the `src` directory. You build a project (either a game or a test) for a specific system by either using the `xl build` script or an equivalent `make` command. A convenient shortcut is ### Using `xl build` I recommend that you use `xl build` as follows: `xl build [project_name] [optional system_name] [optional number of threads]` where `[project name]` is either an example, a built-in game or user-defined project. A convenient shortcut is using just `xl` as follows: `xl [project_name] [optional system_name] [optional number of threads]` The `[optional system_name]` parameter is the name of the target. If no target is specified then the native target (the host terminal) is implied. The `[optional number of threads]` is used to specify the number of threads to use for multiple targets that can be built in parallel. Built-in games are `chase`, `shoot`, `bomber`, `snake`, `horde`. Current examples are: `helloworld`, `text`, `pause`, `background`, `tiles`, `input`, `sounds`, `matrix`, `zombies`, `invaders`. For the list of supported systems look at https://github.com/Fabrizio-Caruso/CROSS-LIB/blob/master/docs/STATUS.md If no system name is given, a native version of the game or test is built by using `gcc` and `ncurses`. *Only when using the script*: If you use the script you can pass `games`, `tests` or `all` as `[game_or_test_name]` to build all games, tests or all projects (games and tests) for a specific system or list of systems. As system you can also pass a group of systems such as: - `[compiler name]_targets` to build a given project for all targets compiled by a given compiler (e.g., `cc65_targets`, `z88dk_targets`, `cmoc_targets`, etc.) - `all` to build a given project on all possible targets (avoid this if you are not sure as it fails if you have not installed *all* compilers). Examples (`xl build` is shortened to `xl`): - `xl snake` -> It builds Cross Snake for the native console by using `gcc` and `ncurses`. - `xl chase` -> It builds Cross Chase for the native console by using `gcc` and `ncurses`. - `xl bomber atari` -> It builds Cross Bomber for the Atari 8-bit target (by using the appropriate cross-compiler, i.e., CC65) - `xl snake vic20` -> It builds Cross Snake for the Commodore Vic 20. - `xl games msx` -> It builds all game projects for the MSX target (by using the appropriate cross-compiler, i.e., the ones in Z88DK). - `xl bomber cc65_targets` -> It builds Cross Bomber for all targets that use CC65. - `xl tests c64` -> It builds all tests for the Commodore 64 target - `xl all coco` -> It builds all projects (games and tests) for the TRS-80 Color Computer (by using the appropriate cross-compiler, i.e., CMOC) ### Using `make` Using a standard `make` command is possible but you will get fewer options. For game projects you can use: `make [system_name] -f ./games/[game_name]/Makefile.[game_name]` For test projects you can use: `make [system_name] -f ./tests/[test_name]/Makefile.[test_name]` Examples for games: - `make vic20 -f ./games/horde/Makefile.horde` builds *Cross Horde* for Commodore Vic 20. - `make c64 -f ./games/chase/Makefile.chase` builds *Cross Chase* for Commodore 64. - `make nes -f ./games/shoot/Makefile.shoot` builds *Cross Shoot* for the Nintendo NES videogame console. - `make spectrum -f ./games/bomber/Makefile.bomber` builds *Cross Bomber* for the Sinclair ZX Spectrum. - `make ti83 -f ./games/chase/Makefile.chase` builds *Cross Chase* for the Texas Instrument TI 83 scientific calculator. - `make ncurses -f ./games/chase/Makefile.chase` builds *Cross Chase* for all targets by using GCC for the native host console (e.g., CYGWIN, Linux, etc. console). - `make cc65_targets ./games/chase/Makefile.chase` builds *Cross Chase* for all targets that are built with the CC65 cross-compiler for the MOS 6502-based systems. - `make cmoc_targets ./games/chase/Makefile.chase` builds *Cross Chase* for all targets that are built with the CMOC cross-compiler for the Motorola 6809-based systems. - `make z88dk_targets ./games/chase/Makefile.chase` builds *Cross Chase* for all targets that are built with the SCCZ80 and ZSDCC cross-compilers of the Z88DK dev-kit for Zilog 80-based and Intel 8080-based systems. - `make cc65_targets -f ./games/shoot/Makefile.shoot` builds *Cross Shoot* for all targets that are built with the CC65 cross-compiler for the MOS 6502-based systems. - `make z88dk_targets -f ./games/bomber/Makefile.bomber` builds *Cross Bomber* for all targets that are built with the SCCZ80 and ZSDCC cross-compilers of the Z88DK dev-kit for Zilog 80-based and Intel 8080-based systems. - `make lcc1802_targets -f ./games/bomber/Makefile.bomber` builds *Cross Bomber* for all targets that are built with the LCC1802 cross-compiler for the RCA COSMAC 1802-based systems. Examples for tests: - `make vic20 -f ./tests/tiles/Makefile.tiles` builds the test `tiles` for the Commodore Vic 20. - `make cpc -f ./tests/sounds/Makefile.sounds` builds the test `sounds` for the Amstrad CPC computer. - `make atari -f ./tests/invaders/Makefile.invaders` builds the tests `invaders` for the Atari 8-bit computer. ## Targets built by multiple dev-kits Some targets, e.g., CP/M and Commodore 128, can be built by two different compilers because they can run different CPU architectures or because we may want to have multiple versions. In such cases we can specify the CPU in the target name: Examples using `xl build` - `xl build chase c128_targets` builds Cross Chase for all Commodore 128 targets for both the MOS 8502 and for the more exotic Zilog 80 non-CP/M mode. - `xl build chase c128_8502_targets` builds Cross Chase for all Commodore 128 targets for the MOS 8502 architecture in both 40 and 80 column mode. - `xl build chase c128_z80_targets` builds Cross Chase for all Commodore 128 targets for the Zilog 80 non-CP/M mode in both 40 and 80 column mode. - `xl build chase cpm_targets` builds Cross Chase for all "generic" CP/M targets for both the Intel 8080 and Zilog 80 architecture. - `xl build chase cpm_8080_targets` builds Cross Chase for all "generic" CP/M targets for the Intel 8080 architecture (compatible with Zilog 80 systems). - `xl build chase cpm_z80_targets` builds Cross Chase for all "generic" CP/M targets for both the Zilog 80 architecture (not compatible with Intel 8080 systems). Examples using `make`: - `make c128_targets -f ./games/chase/Makefile.chase` builds Cross Chase for all Commodore 128 targets for both the MOS 8502 and for the more exotic Zilog 80 non-CP/M mode. - `make c128_8502_targets -f ./games/chase/Makefile.chase` builds Cross Chase for all Commodore 128 targets for the MOS 8502 architecture in both 40 and 80 column mode. - `make c128_z80_targets -f ./games/chase/Makefile.chase` builds Cross Chase for all Commodore 128 targets for the Zilog 80 non-CP/M mode in both 40 and 80 column mode. - `make cpm_targets -f ./games/chase/Makefile.chase` builds Cross Chase for all "generic" CP/M targets for both the Intel 8080 and Zilog 80 architecture. - `make cpm_8080_targets -f ./games/chase/Makefile.chase` builds Cross Chase for all "generic" CP/M targets for the Intel 8080 architecture (compatible with Zilog 80 systems). - `make cpm_z80_targets -f ./games/chase/Makefile.chase` builds Cross Chase for all "generic" CP/M targets for both the Zilog 80 architecture (not compatible with Intel 8080 systems). ================================================ FILE: docs/BUILD_PROCESS.md ================================================ The `xl` script will trigger the full build process which will produce the target specific version of the project or massively build the same project for several targets (or even build several projects for one or more targets). For example for the build of a project for the sole GameBoy target we may represent the interactions of various Cross-Lib components with this diagram: ![User](../snapshots/CrossLibFlow8.png) ================================================ FILE: docs/COMPILERS.md ================================================ # SUPPORTED COMPILERS The program is written in ANSI C and currently compiled with - CC65 for all MOS 6502 targets (http://www.cc65.org/), - SCCZ80 (from Z88DK) for most Zilog 80 and Intel 8080 targets (https://www.z88dk.org/), - ZSDCC (from Z88DK) for some Zilog 80 and Intel 8080 targets (https://www.z88dk.org/), - CMOC for Motorola 6809 targets (https://perso.b2b2c.ca/~sarrazip/dev/cmoc.html), - LCC1802 for COSMAC RCA 1802 targets (https://sites.google.com/site/lcc1802/downloads), - ACK for PC 8088/8086, CP/M Intel 8080, Linux 386/68K/PPC/MIPS, PDP11 (https://github.com/davidgiven/ack), - XTC68 (C68) for the Motorola 68008-based Sinclair QL (https://github.com/stronnag/xtc68), - VBCC for BBC Micro, BBC Master and other systems (http://www.compilers.de/vbcc.html) - Z8KGCC for the Zilog Z8000-based Olivetti M20 series (http://www.z80ne.com/m20/sections/download/z8kgcc/z8kgcc.html), - CC6303 for the Motorola 6803-based targets (https://github.com/EtchedPixels/CC6303 or https://github.com/zu2/CC6303), - "GCC for Atari ST" (http://vincent.riviere.free.fr/soft/m68k-atari-mint/), - "GCC for Amiga" (https://github.com/bebbo/amiga-gcc), - "GCC for TI" for the Texas TI99/4a (https://github.com/mburkley/tms9900-gcc), - GCC for modern 32/64-bit PC under any operating systems Previous versions used - WinCMOC for 6809 targets (https://sourceforge.net/projects/cmoc-win32/). WinCMOC has been abandoned because it uses an old CMOC version that has broken pointer to functions and because it is no longer maintained by its author. For other targets, the following compilers and dev-kits may be included in future versions of the tool-chain: - QDOS-GCC for the Sinclair QL (http://morloch.hd.free.fr/qdos/qdosgcc.html) - SDCC for Z80 and other targets (http://sdcc.sourceforge.net/), - PVSNESLIB for the Super Nintendo Entertainment System (https://github.com/alekmaul/pvsneslib), - amiga-os-toolchain for all Amigas (https://github.com/cahirwpz/amigaos-cross-toolchain), - GCC6809 for other 6809 targets (https://sourceforge.net/projects/freewpc/files/GCC-6809/), - TIGCC for 68k-based TI calculators (http://tigcc.ticalc.org/). The tool-chain also uses some third-party target-specific tools to create usable cassette/disk/rom images. This is documented in https://github.com/Fabrizio-Caruso/CROSS-CHASE/blob/master/tools/README.txt ================================================ FILE: docs/COMPILER_NAMES.md ================================================ ## Compiler names of currently supported compilers - `ack` - `cc65` - `cmoc` - `emcc` (totally experimental Emscripten to produce WebAssembly/Javascript) - `gcc` - `gcc_amiga` - `gcc_atari_st` - `gcc_ti99` - `gcc_z8k` (currently buildable only under Linux) - `lcc1802` - `xtc68` - `z88dk` (for both the SCCZ80 and the ZSDCC cross-compiler in Z88DK) ================================================ FILE: docs/CREDITS.txt ================================================ CREDITS I have been helped by people who are involved in the cross compilers Z88Dk, CC65, CMOC, ACK, LCC1802, GCC for TI99 development. In particular I must thank: - Alex Thissen for his support on the docker release and on the Atari Lynx target - Stefano Bodrato for lots of help on all Z80 targets including development on the Z88Dk to support my library and games. - Bill Rowe for improving LCC1802 and supporting my library - Antonino Porcino for providing his online emulators and helping me test my games. - Marcen van Tongeren: for implementing the dev-kit in LCC1802 and supporting CrossLib - Christian Groessler: has helped me to improve the Makefile and fix an issue on the Atari 8-bit color version. - Simon Jonassen: Help on getting a good routine for the keyboard input for all CoCo and Dragon models. - Tursi (from AtariAge) for his Classic99 emulator, his support with libti99 and general help on the TI99/4A - Asmusr (from AtariAge) for his JS99er JavaScript emulator, support on the cartUrl parameter, and the generation of cartridge images from EA5 files - Mark Burkley for his great work and support on GCC for the TI compiler - *Hamlet* for the logo. ================================================ FILE: docs/CROSSLIB.md ================================================ ## CROSSLIB For each target, at least one of the following modes has to be implemented: 1. memory-mapped graphics (display can be implemented by writing bytes into video memory) 2. conio-like (display is performed by either direct conio APIs or a wrapper that provides conio APIs, e.g., ADM3/A, VT52, VT100, etc.) 3. TGI (CC65-specific graphics APIs) 4. Z88DK Sprites (Z88DK-specific sprite APIs) 5. CPCRSLIB (Amstrad CPC-specific graphics APIs) 6. bit-mapped (display is implemented by writing into video memory and each bytes corresponds to one or more pixels) 7. buffered (stdlib-only "graphics" for targets with just stdlib support) A graphic mode may implement the concrete graphics by either calling low level graphics instructions (e.g., writing into video-memory) or by calling higher level instructions (e.g., using control codes). For example for a CPM target with ADM3/A control codes, we use 1. CrossLib APIs that call 2. conio.h APIs that call 3. ADM3/A control codes For a target with direct or indirect video memory (e.g., Commodore 64, MSX, etc.), one may use: 1. CrossLib APIs that implement 2. Direct (or indirect) writes into video memory Remark: For some targets multiple implementations are possible (C64 may use conio APIs as provided by C65, memory-mapped graphics, TGI APIs) ================================================ FILE: docs/CROSS_LIB_APIS.md ================================================ # CROSS-LIB APIs ## GRAPHICS `_XL_INIT_GRAPHICS()` It initializes the graphics. Necessary for any build that wants to show anything on the screen. -------------------------------------------------------- `XSize`: Number of tiles that can be displayed horizontally on the (usable) screen `YSize`: Number of tiles that can be displayed vertically on the (usable) screen `_TILE_1`, ..., `_TILE_24`, `_DOLLAR_TILE`: Displayable tiles with _XL_DRAW `_XL_BLACK`, `_XL_WHITE`, `_XL_RED`, `_XL_CYAN`, `_XL_GREEN`, `_XL_YELLOW`, `_XL_BLUE`: Currently available colors -------------------------------------------------------- `_XL_DRAW(X, Y, T, C)` It displays tile T at position (X,Y) with color C if color C is available or its "closest" match when C is not supported by a target. -------------------------------------------------------- `_XL_DELETE(X,Y)` It deletes a tile-sized area of the screen at position (X,Y) -------------------------------------------------------- `_XL_CLEAR_SCREEN()` It clears the whole screen. -------------------------------------------------------- `_XL_WAIT_VSYNC()` It waits for the vertical synch if this is supported by the target. It does nothing otherwise. -------------------------------------------------------- ## TEXT A "Cross-Lib string" is string formed with only the following 37 possible characters `_XL_SPACE`, `_XL_a`, ..., `_XL_z`, `_XL_A`, ..., `_XL_Z`, `'0'`, ..., `'9'` where capital/small letter may be displayed as the same character depending on whether the target supports different display for capital vs small letters. -------------------------------------------------------- `_XL_PRINT(X,Y,S)` It prints the "Cross-Lib string" S starting a position (X,Y). -------------------------------------------------------- `_XL_PRINT_CENTERED(S)` Same as `XL_PRINT` but it just displays the "Cross-Lib string" S at the center of the screen -------------------------------------------------------- `_XL_PRINT_CENTERED_ON_ROW(Y,S)` Same as `XL_PRINT` but it just displays the "Cross-Lib string" S centered on row Y -------------------------------------------------------- `_XL_PRINT_CENTERED_ON_ROW_WITH_COLOR(Y,C,S)` Same as `_XL_PRINT_CENTERED_ON_ROW` but with color C (if the target supports text color) -------------------------------------------------------- `_XL_PRINT_CENTERED_WITH_COLOR(C,S)` Same as `_XL_PRINT_CENTERED` but with color C (if the target supports text color) -------------------------------------------------------- `_XL_PRINTD(X,Y,L,N)` It prints the positive integer number N in L digits (1<=L<=5) starting at position (X,Y) -------------------------------------------------------- `_XL_SET_TEXT_COLOR(C)` It sets the text color to C. Such color will be used on next PRINT and PRINTD for targets that support colored text. If any other display operation is present (e.g., `_XL_DRAW`), then there is no guarantee that the color C will be used afterwards. -------------------------------------------------------- ## INPUT `_XL_INIT_INPUT()` It initializes the input (joystick/keyboard). Necessary for any program that needs to receive an input -------------------------------------------------------- `_XL_INPUT()` It returns a value J that represents the specific received input or absence of input at the moment of its execution (keyboard may be buffered, though). The result J is meant to be used with the Boolean functions below. -------------------------------------------------------- `_XL_UP(J)`, `_XL_DOWN(J)`, `_XL_LEFT(J)`, `_XL_RIGHT(J)`, `_XL_FIRE(J)` These Boolean functions return 1 (true) if J represents a specific movement or fire button/key, and 0 (false) otherwise. -------------------------------------------------------- `_XL_KEY_PRESSED()` This Boolean function returns 1 (true) if any key or fire button is pressed. -------------------------------------------------------- `_XL_WAIT_FOR_INPUT()` It waits for any key or fire button to be pressed. -------------------------------------------------------- ## SOUND `_XL_INIT_SOUND()` It initializes the sound system. Necessary for any program that produces sound. -------------------------------------------------------- `_XL_ZAP_SOUND()`: Long rising sound `_XL_PING_SOUND()`: Short high-pitched sound `_XL_TICK_SOUND()`: Very short high-pitched sound `_XL_TOCK_SOUND()`: Very short low-pitched sound `_XL_EXPLOSION_SOUND()`: Long noise `_XL_SHOOT_SOUND()`: Short noise ## SLEEP `_XL_SLEEP(S)` It waits S seconds or an approximations of S seconds depending on the target -------------------------------------------------------- `_XL_SLOW_DOWN(T)` It waits T loops (0<=T<=65535) -------------------------------------------------------- ## RANDOM `_XL_RAND()` It generates a pseudo-random number in the range \[0,32767\] ================================================ FILE: docs/CROSS_LIB_APIS.txt ================================================ -------------------------------------------------------------------------------------- CROSS-LIB APIs -------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------- GRAPHICS -------------------------------------------------------------------------------------- -------------------------------- _XL_INIT_GRAPHICS() It initializes the graphics. Necessary for any build that wants to show anything on the screen. -------------------------------- XSize: Number of tiles that can be displayed horizontally on the (usable) screen -------------------------------- YSize: Number of tiles that can be displayed vertically on the (usable) screen -------------------------------- _TILE_1, ..., _TILE_24, _DOLLAR_TILE Displayable tiles with _XL_DRAW -------------------------------- _XL_BLACK, _XL_WHITE, _XL_RED, _XL_CYAN, _XL_GREEN, _XL_YELLOW, _XL_BLUE Currently available colors -------------------------------- _XL_DRAW(X, Y, T, C) It displays tile T at position (X,Y) with color C if color C is available or its "closest" match when C is not supported by a target. -------------------------------- _XL_DELETE(X,Y) It deletes a tile-sized area of the screen at position (X,Y) -------------------------------- _XL_CLEAR_SCREEN() It clears the whole screen. -------------------------------- _XL_WAIT_VSYNC() It waits for the vertical synch if this is supported by the target. It does nothing otherwise. -------------------------------------------------------------------------------------- TEXT -------------------------------------------------------------------------------------- -------------------------------- _XL_PRINT(X,Y,S) It prints the "Cross-Lib string" S starting a position (X,Y). A "Cross-Lib string" is string formed with only the following 37 possible characters _XL_SPACE, _XL_a, ..., _XL_z, _XL_A, ..., _XL_Z, '0', ..., '9' where capital/small letter may be displayed as the same character depending on whether the target supports different display for capital vs small letters. -------------------------------- _XL_PRINTD(X,Y,L,N) It prints the positive integer number N in L digits (1<=L<=5) starting at position (X,Y) -------------------------------- _XL_SET_TEXT_COLOR(C) It sets the text color to C. Such color will be used on next PRINT and PRINTD for targets that support colored text. If any other display operation is present (e.g., _XL_DRAW), then there is no guarantee that the color C will be used afterwards. -------------------------------------------------------------------------------------- INPUT -------------------------------------------------------------------------------------- -------------------------------- _XL_INIT_INPUT() It initializes the input (joystick/keyboard). Necessary for any program that needs to receive an input -------------------------------- _XL_INPUT() It returns a value J that represents the specific received input or absence of input at the moment of its execution (keyboard may be buffered, though). The result J is meant to be used with the Boolean functions below. -------------------------------- _XL_UP(J), _XL_DOWN(J), _XL_LEFT(J), _XL_RIGHT(J), _XL_FIRE(J) These Boolean functions return 1 (true) if J represents a specific movement or fire button/key, and 0 (false) otherwise. -------------------------------- _XL_KEY_PRESSED() This Boolean function returns 1 (true) if any key or fire button is pressed. -------------------------------- _XL_WAIT_FOR_INPUT() It waits for any key or fire button to be pressed. -------------------------------------------------------------------------------------- SOUND -------------------------------------------------------------------------------------- -------------------------------- _XL_INIT_SOUND() It initializes the sound system. Necessary for any program that produces sound. -------------------------------- _XL_ZAP_SOUND() Long rising sound -------------------------------- _XL_PING_SOUND() Short high-pitched sound -------------------------------- _XL_TICK_SOUND() Very short high-pitched sound -------------------------------- _XL_TOCK_SOUND() Very short low-pitched sound -------------------------------- _XL_EXPLOSION_SOUND() Long noise -------------------------------- _XL_SHOOT_SOUND() Short noise -------------------------------------------------------------------------------------- SLEEP -------------------------------------------------------------------------------------- -------------------------------- _XL_SLEEP(S) It waits S seconds or an approximations of S seconds depending on the target -------------------------------- _XL_SLOW_DOWN(T) It waits T loops (0<=T<=65535) -------------------------------------------------------------------------------------- RANDOM -------------------------------------------------------------------------------------- _XL_RAND() It generates a pseudo-random number in the range [0,32767] ================================================ FILE: docs/CX16.txt ================================================ VERA ports: In a nutshell the values at $9F20, $9F21 & $9F22 specify a starting VRAM address and an auto-increment value (in $9F22). Reading $9F23 reads the next VRAM byte. Writing $9F23 writes the next VRAM byte. ---- For example: $9F20 = 0 $9F21 = 0 $9F22 = %00010001 This points at VRAM address 65536 with Auto Increment value of 1 ---- Bit 0 of $9F22 is considered the bank the rest of the bits in 22 set the auto increment mode The address is Little Endian from $9F20 to the bank bit in $22 ---- HSCALE = ( DESIRED RES/640 ) * 128 VSCALE = (DESIREDRES/480) * 128 ---- VRAM: The FONT resides at 1:$F000 The text screen memory is at $1:BOOO layed out as ATTR, CHAR, ATTR, CHAR..... ================================================ FILE: docs/Creativision_binary_structure.txt ================================================ From FunnyMu source code: ----------------------------------- Reset CPU -> PC counter is initialized from values in $FFFC,$FFFD? ----------------------------------- if(F=fopen(Cartridge, "rb")) { CartSize=fread(CART, 1, 0x8000, F); // read a max of 32KB in CART rewind(F); // rewinds reading to 0 if (CartSize==0x1000) { // cart is 4KB printf("4KBytes cartridge found...OK\n"); CartSize=fread(RAM+0xB000, 1, 0x1000, F); // main 4Kb at 0xB000 memcpy(RAM+0x9000, RAM+0xA000, 0x1000); // mirror 4KB at 0x9000 } else if (CartSize==0x1800) { // cart is 6KB printf("6KBytes cartridge found...OK\n"); CartSize=fread(RAM+0xB000, 1, 0x1000, F); // main 4Kb at 0xB000 memcpy(RAM+0x9000, RAM+0xB000, 0x1000); // mirror 4KB at 0x9000 CartSize=fread(RAM+0xA800, 1, 0x0800, F); // main 2Kb at 0xA800 memcpy(RAM+0xA000, RAM+0xA800, 0x0800); // mirror 2KB at 0xA000 memcpy(RAM+0x8800, RAM+0xA800, 0x0800); // mirror 2KB at 0x8800 memcpy(RAM+0x8000, RAM+0xA800, 0x0800); // mirror 2KB at 0x8000 } else if (CartSize==0x2000) { // cart is 8KB printf("8KBytes cartridge found...OK\n"); CartSize=fread(RAM+0xA000, 1, 0x2000, F); // main 8Kb at 0xA000 memcpy(RAM+0x8000, RAM+0xA000, 0x2000); // mirror 8KB at 0x8000 } else if (CartSize==0x2800) { // cart is 10KB printf("10KBytes cartridge found...OK\n"); CartSize=fread(RAM+0xA000, 1, 0x2000, F); // main 8Kb at 0xA000 memcpy(RAM+0x8000, RAM+0xA000, 0x2000); // mirror 8KB at 0x8000 CartSize=fread(RAM+0x7800, 1, 0x0800, F); // main 2KB at 0x7800 memcpy(RAM+0x5800, RAM+0x7800, 0x0800); // mirror 2Kb at 0x5800 memcpy(RAM+0x7000, RAM+0x7800, 0x0800); // mirror 2Kb at 0x7000 memcpy(RAM+0x6800, RAM+0x7800, 0x0800); // mirror 2Kb at 0x6800 memcpy(RAM+0x6000, RAM+0x7800, 0x0800); // mirror 2Kb at 0x6000 memcpy(RAM+0x5000, RAM+0x7800, 0x0800); // mirror 2Kb at 0x5000 memcpy(RAM+0x4800, RAM+0x7800, 0x0800); // mirror 2Kb at 0x4800 memcpy(RAM+0x4000, RAM+0x7800, 0x0800); // mirror 2Kb at 0x4000 (needed by Werben ++++ Informieren) } else if (CartSize==0x3000) { // cart is 12KB printf("12KBytes cartridge found...OK\n"); CartSize=fread(RAM+0xA000, 1, 0x2000, F); // main 8Kb at 0xA000 memcpy(RAM+0x8000, RAM+0xA000, 0x2000); // mirror 8KB at 0x8000 CartSize=fread(RAM+0x7000, 1, 0x1000, F); // main 4Kb at 0x7000 memcpy(RAM+0x5000, RAM+0x7000, 0x1000); // mirror 4KB at 0x5000 memcpy(RAM+0x6000, RAM+0x7000, 0x1000); // mirror 4KB at 0x6000 memcpy(RAM+0x4000, RAM+0x7000, 0x1000); // mirror 4KB at 0x4000 (needed by Basic 82) } else if (CartSize==0x4000) { // cart is 16KB printf("16KBytes cartridge found...OK\n"); CartSize=fread(RAM+0xA000, 1, 0x2000, F); // main 8Kb at 0xA000 CartSize=fread(RAM+0x8000, 1, 0x2000, F); // second 8Kb at 0x8000 } else if (CartSize==0x4800) { // cart is 18KB printf("18KBytes cartridge found...OK\n"); CartSize=fread(RAM+0xA000, 1, 0x2000, F); // main 8Kb at 0xA000 CartSize=fread(RAM+0x8000, 1, 0x2000, F); // second 8Kb at 0x8000 CartSize=fread(RAM+0x7800, 1, 0x0800, F); // main 2KB at 0x7800 memcpy(RAM+0x6800, RAM+0x7800, 0x0800); // mirror 2Kb at 0x6800 memcpy(RAM+0x5800, RAM+0x7800, 0x0800); // mirror 2Kb at 0x5800 memcpy(RAM+0x4800, RAM+0x7800, 0x0800); // mirror 2Kb at 0x4800 memcpy(RAM+0x7000, RAM+0x7800, 0x0800); // mirror 2Kb at 0x7000 memcpy(RAM+0x6000, RAM+0x7800, 0x0800); // mirror 2Kb at 0x6000 memcpy(RAM+0x5000, RAM+0x7800, 0x0800); // mirror 2Kb at 0x5000 memcpy(RAM+0x4000, RAM+0x7800, 0x0800); // mirror 2Kb at 0x4000 } else if (CartSize==0x8000) { // cart is 32KB printf("32KBytes cartridge found...OK\n"); CartSize=fread(RAM+0x4000, 1, 0x8000, F); // main 32Kb at 0x4000 } fclose(F); } else P="NOT FOUND"; ================================================ FILE: docs/DISCLAIMER.md ================================================ # DISCLAIMER All information on the site (https://github.com/Fabrizio-Caruso/CROSS-LIB) and the software it describes is provided in good faith, however we make no representation or warranty of any kind, express or implied, regarding the accuracy, adequacy, validity, reliability, availability or completeness of any information on the site https://github.com/Fabrizio-Caruso/CROSS-LIB and the software it provides. Under no circumstance shall we have any liability to you for any loss or damage of any kind incurred as a result of the use of the aforementioned site and any software it provides (games, tests, tools, library, source code, scripts. etc.) or reliance on any information provided on the site. Your use of the site and the software it provides and your reliance on any information on the site is solely at your own risk. ================================================ FILE: docs/EnglishArticle.md ================================================ # CROSS-LIB by Fabrizio Caruso ## INTRODUCTION The goal of this article is to present Cross-Lib, briefly show how to use it and present the 6 "universal" games I have written with it. By "universal" here I mean that these games will run on about 200 different systems (consoles, computers, arcade boards, pocket calculators, etc.) despite using the very same game code. For more details we refer to the GitHub page: http://www.github.com/Fabrizio-Caruso/CROSS-LIB/ ## WHAT IS CROSS-LIB? Cross-Lib (https://github.com/Fabrizio-Caruso/CROSS-LIB/) is a free open source tool for retro-coding for a multitude of 8-bit and vintage systems from the ‘80s (computers, consoles, pocket calculators, arcade boards, etc.) such as Apple //, all 8-bit Commodore computers, Atari 800, Amstrad CPC, Sinclair ZX 81, Sinclair ZX Spectrum, TRS-80 CoCo, Dragon 32, TRS-80 MC-10, Thomson Mo5 and To7, MSX, Oric-1, Oric Atmos, BBC Micro, etc. as well as consoles such as GameBoy, Sega Master System, GameGear, Nintendo NES, etc. and other devices such as Texas Instruments pocket calculators. The main CPU architectures are Zilog 80, MOS 6502, Intel 8080, Motorola 6803, Motorola 6809 and RCA 1802. Cross-Lib also supports several lesser known systems such as the Philips VG-5000, the Jupiter Ace and several exotic and rare systems such as the yugoslav Galaksija, the Hungarian Homlab-2, several computers from the Eastern German Robotron series such as the Robotron KC 85, etc. A large, yet partial list of the supported systems is at the page: https://github.com/Fabrizio-Caruso/CROSS-LIB/blob/master/docs/STATUS.md. Cross-Lib has two main components: 1. A "universal" C library (e.g., a collection of C APIs mostly for input/output); 2. A Python script to manage game projects (e.g., to build, create, clone, etc.) and manipulate graphics assets (e.g., to create, import or rip assets) The main goal of Cross-Lib is to provide a *hardware abstraction layer* for hundreds of vintage systems so that the *very same* game code can be used without any adaptation for all its supported systems. Several articles have been published on Cross-Lib ([rg], [prog]) and its games ([ceo] and, in by this very magazine, [app]). ## CROSS-LIB VS OTHER DEV-KITS Historically, 8-bit systems were programmed directly on the system and mostly in Assembly, or for simpler programs in interpreted BASIC. Today cross-development simplifies developers’ tasks a lot (modern editors, simplified debugging, efficient and quick compilation, etc.) and can be done in C. The problem with the portability of C code comes from the diversity of the machines and from the fact that ANSI C does not provide a standard library for graphics, sounds, input, etc. A partial solution is already provided by some dev-kits such as CC65 (for MOS 6502), Z88DK (for the Zilog 80 and Intel 8080), LCC1802 (for the RCA 1802), CMOC (for the Motorola 6890), etc. By using one of these dev-kits, we can exploit their cross-compatible libraries for input and output. On the other hand: 1. Each dev-kit only covers a subset of all 8-bit architectures. 2. Even within a given dev-kit, its libraries do not necessarily provide the very same input/output APIs across the entirety of its supported targets. Cross-Lib improves on these points and lets you do things that you cannot do with other tools: 1. cover many more vintage 8-bit architectures, including very exotic ones; 2. writing 100% WORA code, i.e., "write once, run anywhere" (after re-compilation); 3. using WORA graphics resources, i.e., define abstract graphics assets for several totally different systems; 4. using a simplified tool-chain to create, compile and test the games. The closest dev-kits to Cross-Lib with respect to these points are - 8-bit-Unity [un8] (meant to be used with CC65), which does incredible things but only for very few MOS 6502-based systems; - Z88DK, which has huge libraries but only covers Zilog 80 and Intel 8080 systems. On the other hand Cross-Lib is not a compiler. It uses several compilers to build the binary files (executable files, disk images, tape images, cartridge images, etc.) for retro-consoles and retro-computers. By providing an abstraction layer for all 8-bit systems, Cross-Lib makes some compromises with respect to what we could do if we were coding only for a specific system. In particular, graphics is somehow limited by what is possible on all systems. Sound effects are even more limited. ## COMPILERS Cross-Lib is supposed to be used with C compilers but which ones? A native compiler (for example GCC) can be used to build native binaries that can be run, for instance, under Windows. Today the support for native compilation is limited to the text terminal, which means no graphics other than ASCII on the host machine. Currently Cross-Lib fully supports the following cross-compilers and dev-kits with graphics and sound effects for most of its targets: - CC65 [cc65] for most systems based on the MOS 6502 architecture; - Z88DK [z88dk] for systems based on the Zilog 80 and Intel 8080 architectures; - CMOC [cmoc] for systems that use the Motorola 6809; - LCC1802 [lcc1802] for systems that use the COSMAC RCA 1802 ; - GCC for TI [ti] for the Texas Instruments TI99/4A based on the 16-bit TMS9900. Cross-Lib also supports other compilers (currently with limited or absent graphics and sound effects) such as - ACK [ack] for 8088/8086, Intel 8080 CP/M, 386/68K/PPC/MIPS Linux and PDP11, - XTC68 [xtc68] for the Sinclair QL, - VBCC [vbcc] for the BBC Micro, BBC Master, the Amiga and others, - CC6303 [cc6303] for the Motorola 6803; - several versions of modded GCC to target vintage computers (Atari ST [st], Olivetti M20 [m20]). Cross-Lib supports a large sub-set of ANSI C89 because most available cross-compilers for 8-bit architectures only implement a sub-set of ANSI C89. Therefore we write in C (a sub-set of ANSI C C89) with Cross-Lib APIs for graphics, sounds, input. In particular we must avoid: - "float" and "double" types, - copies and parameters by value of "struct" objects, - any use of the heap. For hints on how to code efficiently for 8-bit systems we refer to [effc] and for specific hints on how to code with these compilers we refer to [c8b]. ## INSTALLATION Cross-Lib itself does not require any real installation. It is enough to download the repository files (from the GitHub page) or to clone the repository with: git clone https://www.github.com/Fabrizio-Caruso/CROSS-LIB/ On the other hand it requires: - a POSIX environment (e.g., Windows with Cygwin, Linux, FreeBSD, etc.); - Make (GNU Make); - Python 2.7 or Python 3.* [optional but necessary to simplify many operations]; - GCC compiler with ncurses libraries [optional]; - any compiler necessary to build for a desired target architecture (e.g., CC65, Z88DK, etc.) - JAVA (only to be disk images for the Apple //). Once you have Cross-Lib with its dependencies in a POSIX environment, you should move to the "src" directory. Inside "src" you will find the "xl" Python script and the following directories - "cross-lib", which contains the library code; - "games" with built-in games; - "examples" with built-in examples; - "projects" with user-defined projects. If you have correctly installed just Makefile, Python and any compiler (e.g. GCC) in a POSIX environment, it should already be possible to minimally use Cross-Lib to build the Chase game by running the following command inside the "src" directory (you will have to make sure that the "." directory is in your PATH environment variable otherwise you will have to explicitly use "./xl" instead of "xl"): "xl chase stdio", which will build the game Chase in turn-based mode for the target if the compiler (e.g., the native console if you use GCC). As stdio has no support for immediate input, the game will be, at best, barely playable in turn-based mode. Most games won't be playable at all, because this can only work for games that are aware of this (e.g., chase) where the code invokes a specific refresh command to re-display the content of the screen like a slide-slow. This can be used to test if the games compile with a given compiler. ## HOW TO USE THE XL SCRIPT If just one of the supported compilers is installed, Cross-Lib can be used with the "xl" Python script inside the "src" directory. If GCC with ncurses is installed, a native version of the games and examples can be built with: "xl build \" or just "xl \" For example "xl snake" builds the "snake" game for the native console. If a cross compiler (CC65, Z88DK, CMOC, CC6303, LCC1802, etc) is installed, the games and examples can be built for the corresponding systems. For example, if CC65 is installed, "xl horde apple2" builds the "horde" game for the Apple // with 6-color HGR graphics. The "xl" script takes several commands. In particular you can see a list of the available commands with "xl commands". You can get an explanation of each command with examples with "xl help \". If we want to create a new project, we need to use "xl create \", which will create a project with a trivial "hello world" example inside the "projects" directory. We can also start with a template code for a game if we pass the additional parameter "game": "xl create \ game". ## HELLO WORLD Coding with Cross-Lib is like normal coding in C (with ANSI C89) with the only addition that all input/output is done through Cross-Lib APIs. Cross-Lib comes with many examples in the src/examples/ directory as well as a few games in the src/games directory. Both of which can be used to learn how to code with Cross-Lib. We could start to look at src/examples/helloworld/, whose main.c files contains: ``` #include "cross_lib.h" int main(void) { _XL_INIT_GRAPHICS(); _XL_CLEAR_SCREEN(); _XL_SET_TEXT_COLOR(_XL_WHITE); _XL_PRINT_CENTERED("HELLO WORLD"); while(1){}; return EXIT_SUCCESS; } ``` We remark that all Cross-Lib specific functions start with the _XL_ prefix: 1. _XL_INIT_GRAPHICS() required to initialize the display ; 2. _XL_CLEAR_SCREEN() which cleans the content of the screen ; 3. _XL_SET_TEXT_COLOR(_XL_WHITE) which defines the color to be used by the text and characters ; 4. _XL_PRINT_CENTERED("HELLO WORLD") which displays "HELLO WORLD" on the center of the screen. If we want to use one of the examples or games as a starting point we can clone the project with: xl clone \ \ Or we can start from (almost) scratch with xl create \ Once we have a new project, we can build it with xl \ \ or xl \ if we want to build the project for the native terminal. We can run the project for the native terminal with: xl run \ For example we could run these commands: xl clone helloworld myhelloworld [to clone helloworld and create myhellworld] We modify the project myhelloworld (found inside ./src/projects/myhelloworld/) xl build myhelloworld (or equivalently xl myhelloworld) [to build a native binary of the new project] xl run myhelloworld [to run the new project] xl build myhelloworld c64 [to build the same project for the Commodore 64] ## CODING WITH ABSTRACTIONS In order to code with Cross-Lib for all targets at the same time, Cross-Lib uses several abstractions. Graphics is only tile-based. In the code, tiles are abstract as their exact shape will depend on the target type. The game code only sees tiles as macros _TILE_0, _TILE_1, _TILE_2, etc. Each concrete target will interpret tiles in different ways depending on whether the target can or cannot assign free shapes to tiles and on the number of pixels that define tiles on that system. Sound is currently only limited to few sound effects that are rendered somehow similarly across multiple targets. Input is limited to 4 directions and a single fire button. On each target this will be mapped to either 5 keys (usually I J K L SPACE) or the main joystick/controller/gamepad. Running "xl manual" will output a manual with all commands. ## MAIN DEVELOPMENT FLOW Producing "universal" games with Cross-Lib for the developer boils down to these main steps: - Creating or cloning a project (with xl create or xl clone); - Writing the abstract game code in ANSI C with Cross-Lib APIs for input/output; - Manually creating or automatically importing abstract assets (with commands such as e.g., xl shapes, xl import, xl rip, xl tile); - Running the xl script to build the project for one or multiple targets (with xl build). The "xl build \ \" command (or its equivalent short form "xl \ \") executes one or several Makefile targets, which generally: - generate a concrete asset file from the abstract asset files - compile the source code (game code and target-specific portions of Cross-Lib library); - include or link the asset files with the compiled source code; - if necessary a tool is used to create a usable disk/floppy/rom/cartridge image (this is the case for the Apple // for which disk images are generated). [INSERT FLOW PICTURE HERE] ## GRAPHICS Graphics is performed by displaying "tiles", whose shape can be defined. The number of tiles is currently limited to 27 but future versions of Cross-Lib will overcome this constraint. We can also display "characters" (letters, digits and the space character) but their shape is (currently) fixed. Characters and tiles have the same size. Characters are used for the text, whereas tiles are used for graphics. ASCII-only targets will be able to only assign ASCII shapes to tiles, whereas targets with real graphics will assign a "freely defined" shape to tiles. Currently each tile only has one tile-specific foreground color and a common background color. The definition of their shapes is not done in the C code. Instead it is done inside the \/tiles directory, which contains sub-directories with files with tile definitions for the ASCII case and for the graphics-enabled targets, e.g., 8x8 (for most targets), 7x8 (for the Apple //), 6x8 (for the Oric series and NTSC COMX-35), etc... In the aforementioned files the shapes are described by either ASCII codes for ASCII-only targets or sequences of bytes for graphics-enabled targets. These files can be: 1. edited manually or 2. automatically imported from several programs such as CharPad [chPad] (with "xl import \ \") or 3. automatically ripped from BASIC or Assembly listings (with "xl rip \ \") or 4. generated by some simple "pictorial" text files with drawings made of "#" and "." characters (with "xl shapes \ \ \ or "xl tile \ \ \". You can see how to use these commands by running "xl help \". In the game code tile graphics is primarily performed by invoking these functions (to display or delete tiles): void _XL_DRAW_TILE(uint8_t x, uint8_t y, uint8_t tile_number, uint8_t tile_color); void _XL_DELETE(uint8_t x, uint8_t y); ## SOUND Sound is even more limited than graphics and it is restricted to a few predefined effects. The sound commands have this form: void _XL_\_SOUND(void); For example: XL_EXPLOSION_SOUND() produces an explosion sound (or something vaguely similar to it depending on the target) ## INPUT Input is limited to four directions and a single fire button. The primary input APIs are: uint8_t _XL_INPUT(void); uint8_t _XL_LEFT(uint8_t input); uint8_t _XL_RIGHT(uint8_t input); uint8_t _XL_UP(uint8_t input); uint8_t _XL_DOWN(uint8_t input); uint8_t _XL_FIRE(uint8_t input); where _XL_INPUT polls the input and the other functions are used to determined the specific input. ## GRAPHICS, SOUNDS AND INPUT IN ONE EXAMPLE Inside the src/examples/animate directory you can find the following example that could be used as a blueprint for a simple game. This simple example has graphics, input and sound. When compiled for any of the possible systems, it will produce the very same program but the exact tile shapes and sounds will depend on the target. For example it can be compiled for the native console with: xl animate or for the Apple // with xl animate apple2 or for the MSX with xl animate msx ``` #include "cross_lib.h" #define MIN_X 1 #define MAX_X (XSize-2) #define MIN_Y 1 #define MAX_Y (YSize-2) #define DOWN_TILE _TILE_0 #define UP_TILE _TILE_1 #define RIGHT_TILE _TILE_2 #define LEFT_TILE _TILE_3 #define FIRE_TILE _TILE_4 int main(void) { uint8_t x; uint8_t y; uint8_t input; uint8_t tile; _XL_INIT_GRAPHICS(); _XL_INIT_SOUND(); _XL_INIT_INPUT(); _XL_CLEAR_SCREEN(); x = XSize/2; y = YSize/2; tile = DOWN_TILE; while(1) { _XL_SET_TEXT_COLOR(_XL_WHITE); _XL_PRINTD(0,0,3,x); _XL_PRINTD(5,0,3,y); input = _XL_INPUT(); if(_XL_UP(input)) { _XL_DELETE(x,y); tile = UP_TILE; --y; } else if (_XL_DOWN(input)) { _XL_DELETE(x,y); tile = DOWN_TILE; ++y; } else if (_XL_LEFT(input)) { _XL_DELETE(x,y); tile = LEFT_TILE; --x; } else if(_XL_RIGHT(input)) { _XL_DELETE(x,y); tile = RIGHT_TILE; ++x; } else if(_XL_FIRE(input)) { _XL_DRAW(x,y,FIRE_TILE,_XL_WHITE); _XL_EXPLOSION_SOUND(); _XL_SLOW_DOWN(16*_XL_SLOW_DOWN_FACTOR); } if((y>=MIN_Y)&&(y<=MAX_Y)&&(x>=MIN_X)&&(x<=MAX_X)) { _XL_DRAW(x,y,tile,_XL_WHITE); } else { _XL_DELETE(x,y); _XL_ZAP_SOUND(); _XL_SLOW_DOWN(16*_XL_SLOW_DOWN_FACTOR); x = XSize/2; y = YSize/2; } _XL_SLOW_DOWN(4*_XL_SLOW_DOWN_FACTOR); } return EXIT_SUCCESS; } ``` ## THE GAMES Cross-Lib comes with some games I have written with it. As for July 2023, it includes seven games: - Shuriken - Verbix - Horde - Snake - Bomber - Shoot - Chase ### SHURIKEN Shuriken is somehow similar to PAC-MAN in that you need to collect all diamonds to complete non-boss levels while you need to avoid being hit by the shurikens. In boss levels you have to additionally kill all the shurikens by using the movable blocks that are deadly for them. You can also collect special items that make you temporarily invincible (white ring) or that slow down the shurikens (blue large diamond). ### VERBIX Verbix is a Scrabble-like game that looks also a bit like Tetris. In this game you have to form valid 5-letter English words on the bottom row before the tower of letters reaches the top level. You can rotate the bottom row or any of the columns by moving in the 4 directions. You press fire to confirm the word. ### HORDE Horde is a zombie-themed shooter with many power-ups and several different enemies, levels and special items to pick. You control a bow with a limited number of arrows. You get more arrows as a possible reward for killing some zombies. If you run out of arrows, you will get a few arrows after a short period. In each level you are confronted with a horde of zombies that become harder as you progress. ### SNAKE Snake is my personal interpretation of a hybrid game between the arcade game Nibbler and the Nokia cell phone game Snake to which I have added more game elements. As in Nibbler the walls do not kill you and can be used to stop you and let you better control your movements. As in Nokia Snake the main goal is to eat apples. If you do not eat any apple for too long, the snake becomes faster and harder to control, consumes its energy and eventually dies. In each level you are also confronted with mines that kill you if the snake's head touches them. As a secondary goal you can collect rings. If you manage to get 3 or more rings without dying on a level, you will be rewarded with bonus items. The game has several secrets and level to discover. ### BOMBER Bomber is a mini-game and clone of Air Attack (aka Blitz) that first appeared on the Commodore Pet. The game concept is horrible (not my own concept) but it can be addictive nevertheless. Your plane has to carpet-bomb an entire city in order to safely land on the road. Let us assume the city has no inhabitants. You do not control the plane and can only press fire to drop a bomb at a time. ### SHOOT Shoot is a shooter somehow similar to Robotron. You have to kill a horde of ghosts on each level. You can kill them by hitting them many times or by hitting them enough times to push them against the walls (mortal only for them). You can also kill them by placing mines but you need to get the mine item (with 3 mines). A mine kills instantly common enemies. At the end of each level when only few ghosts are left or if you survive without killing enemies long enough or in boss levels, you are confronted by some hard-to-kill skull-shaped enemies. As a secondary goal you can complete the level by killing the skulls before the last ghosts and by doing so you unlock extra items and secrets in the next levels. Destroying the missile bases can also unlock items. The game has many secrets, levels and items to discover. ### CHASE Cross Chase is somehow similar to Daleks / Gnome Robots. You need to lure your pursuers into the mines. The main difference is that it is a real-time game and that it has several secrets items and power-ups to pick. Similarly to Shoot, at the end of each level or in boss levels, you are confronted by a boss (a skull), which can only be killed by several bullets fired by the gun item. You can complete the level by killing the skull before the last enemy and by doing so you unlock extra items and secrets in the next levels. Destroying the missile bases can also unlock items. ## FUTURE DEVELOPMENT Cross-Lib is actively developed. Planned future developments are: - support for more targets and architectures (e.g., Apple ||gs, Apple 1, etc.); - improved targets (e.g, DHGR mode for the 80-column capable Apple // models); - improved APIs (more tiles, improved sounds, etc.); - simplified setup (docker file with all compilers, tools and dependencies); - improved scripts to handle graphics assets; - improved support for the native target; - more games. ## BIBLIOGRAPHY [ack] ACK, Tanenbaum A., Jacobs C. et al., C compiler for Intel 8088, PDP 11, CP/M-80,etc., https://github.com/davidgiven/ack [app] Cross Chase: A Massively 8-bi Multi-System Game, Caruso F., Call-A.P.P.L.E., vol. 28, No. 1, Feb 2018, pages 31-33, http://www.callapple.org [c8b] 8-bit C, Caruso F., https://github.com/Fabrizio-Caruso/8bitC [cc6303] CC6303, Cox A., C compiler for the Motorola 6800 and 6803, https://github.com/EtchedPixels/CC6303 [cc65] CC65, C compiler for the MOS 6502, https://sourceforge.net/projects/cc65/ [ceo] Cross Chase, Caruso F., CEO-MAG, No. 327-328, Juillet-Août 2017, https://ceo.oric.org/ [chPad] CharPad, Subchrist Software, https://subchristsoftware.itch.io/charpad-c64-free [cmoc] CMOC, Sarrazin P., C compiler for the Motorola 6809, https://perso.b2b2c.ca/~sarrazip/dev/cmoc.html [effc] Efficient C Code for 8-bit Microcontrollers, Jones N., https://barrgroup.com/embedded-systems/how-to/efficient-c-code [m20] Z8KGCC, Groessler C., GCC modded for the Olivetti M20, http://www.z80ne.com/m20/sections/download/z8kgcc/z8kgcc.html [lcc1802] LCC1802, Rowe B., C compiler for the RCA 1802, https://github.com/bill2009/lcc1802 [prog] Cross-Lib, Caruso F., Programmez! Hors Série #6, pages 72-82. [rg] Interview to F. Caruso about Cross-Lib, RetroGamer #240, page 100, https://www.retrogamer.net/ [st] GCC, Rivière V., modded for the Atari ST, http://vincent.riviere.free.fr/soft/m68k-atari-mint/ [ti] GCC, (Insomnia), modded for the TI99/4A, http://atariage.com/forums/topic/164295-gcc-for-the-ti [un8] 8-Bit Unity, Beaucamp A. (8-bit Dude), http://8bit-unity.com/ [vbcc] VBCC, Barthelmann V., C compiler for the BBC Micro, BBC Master, Amiga, etc., http://www.compilers.de/vbcc.html [xtc68] XTC68, Hudson J., C compiler Sinclair QL, https://github.com/stronnag/xtc68 [z88dk] Z88DK, C compiler and dev-kit for the Zilog 80 and Intel 8080 architectures. ================================================ FILE: docs/GAMES.md ================================================ # THE GAMES ------------------------------------------- ## TREX ![Vic20](/snapshots/vic20_trex.jpg) CONTROLS: either SPACE or FIRE. 1. Commodore Vic 20: https://nippur72.github.io/vic20-emu/?joy=1&load=http://github.com/Fabrizio-Caruso/CROSS-LIB/releases/download/trexBETA/Xtrex_vic20_exp_16k.prg 2. TI99/4A: https://js99er.net/#/?cartUrl=https:%2F%2Fgithub.com%2FFabrizio-Caruso%2FCROSS-LIB%2Freleases%2Fdownload%2Fti99_1.32%2FXtrexti.bin 3. MSX: https://webmsx.org/?cartridge1_url=http://github.com/Fabrizio-Caruso/CROSS-LIB/releases/download/trexBETA/Xtrex_msx_16k.rom 4. Video Technology Laser 500: https://nippur72.github.io/laser500emu/?load=http://github.com/Fabrizio-Caruso/CROSS-LIB/releases/download/trexBETA/Xtrex_laser500_keyboard.bin ------------------------------------------- ## STINGER ![Vic20](/snapshots/XStinger_VIC20_gameplay.jpg) ![Vic20](/snapshots/XStinger_VIC20_title.jpg) CONTROLS: either the joystick or J (move lefte), L(move right), SPACE (check word) 1. Commodore Vic 20: https://nippur72.github.io/vic20-emu/?joy=1&load=http://github.com/Fabrizio-Caruso/CROSS-LIB/releases/download/stinger/Xstinger_vic20_exp_16k.prg 2. TI99/4A: https://js99er.net/#/?cartUrl=https:%2F%2Fgithub.com%2FFabrizio-Caruso%2FCROSS-LIB%2Freleases%2Fdownload%2Fti99_1.32%2FXstingerti.bin 3. MSX: https://webmsx.org/?cartridge1_url=http://github.com/Fabrizio-Caruso/CROSS-LIB/releases/download/stinger/Xstinger_msx_16k.rom 4. Video Technology Laser 500: https://nippur72.github.io/laser500emu/?load=http://github.com/Fabrizio-Caruso/CROSS-LIB/releases/download/stinger/Xstinger_laser500.bin ------------------------------------------- ## SHURIKEN ![Vic20](/snapshots/XShuriken_Vic20_gameplay.jpg) ![Vic20](/snapshots/XShuriken_Vic20_title.jpg) CONTROLS: either the joystick or I (up rotate), J (move left/left rotate), K (down rotate), L(move right, right rotate), SPACE (check word) 1. Commodore Vic 20: https://nippur72.github.io/vic20-emu/?joy=1&load=http://github.com/Fabrizio-Caruso/CROSS-LIB/releases/download/shuriken/Xshuriken_vic20_exp_16k.prg 2. TI99/4A: https://js99er.net/#/?cartUrl=https:%2F%2Fgithub.com%2FFabrizio-Caruso%2FCROSS-LIB%2Freleases%2Fdownload%2Fti99_1.32%2FXshurikenti.bin 3. MSX: https://webmsx.org/?cartridge1_url=http://github.com/Fabrizio-Caruso/CROSS-LIB/releases/download/shuriken/Xshuriken_msx_16k.rom 4. Video Technology Laser 500: https://nippur72.github.io/laser500emu/?load=http://github.com/Fabrizio-Caruso/CROSS-LIB/releases/download/shuriken/Xshuriken_laser500.bin ------------------------------------------- ## VERBIX ![Vic20](/snapshots/XVerbix_Vic20_gameplay.jpg) ![Vic20](/snapshots/XVerbix_Vic20_title.jpg) Cross Verbix is a word game somehow similar to Scrabble and to a much lesser extent similar to Tetris: you must construct correct English words by rotating columns of letters or by rotating the bottom row before the letters reach the top level. You can get extra points if you complete the level earlier by lowering the stack of letters below the second row. CONTROLS: either the joystick or I (up rotate), J (move left/left rotate), K (down rotate), L(move right, right rotate), SPACE (check word) 1. Commodore Vic 20: https://nippur72.github.io/vic20-emu/?joy=1&load=http://github.com/Fabrizio-Caruso/CROSS-LIB/releases/download/verbix/Xverbix_vic20_exp_16k.prg 2. TI99/4A: https://js99er.net/#/?cartUrl=https:%2F%2Fgithub.com%2FFabrizio-Caruso%2FCROSS-LIB%2Freleases%2Fdownload%2Fti99_1.32%2FXverbixti.bin 3. MSX: https://webmsx.org/?cartridge1_url=http://github.com/Fabrizio-Caruso/CROSS-LIB/releases/download/verbix/Xverbix_msx_16k.rom 4. Video Technology Laser 500: https://nippur72.github.io/laser500emu/?load=http://github.com/Fabrizio-Caruso/CROSS-LIB/releases/download/verbix/Xverbix_laser500.bin 5. Video Technology Laser 200 / VZ200: https://nippur72.github.io/laser310-emu/?load=http://github.com/Fabrizio-Caruso/CROSS-LIB/releases/download/verbix/Xverbix_vz200_24k.vz ## HORDE ![CPC](../snapshots/XHorde_CPC.png) ![Atari](../snapshots/XHorde_A8.png) ![SMS](../snapshots/XHorde_SMS.png) Cross Horde is a zombie shooter with several different enemies, levels and power-ups and items to pick. You die if a zombie reaches the wall behind the bow or if a zombie hits you with its bullets. In order to improve your fire power you can pick up the rings that are dropped when some zombies die. Rings will improve in this order: - the range of your bow - the speed of your bow - the number of arrows thrown at once - the power of your bow After these improvements, the rings will be necessary to unblock special items and to achieve the temporary "hyper" power. CONTROLS: either the joystick or J (left), L (right), SPACE (fire). 1. Commodore Vic 20: https://nippur72.github.io/vic20-emu/?joy=1&load=http://github.com/Fabrizio-Caruso/CROSS-LIB/releases/download/XHorde1.0/Xhorde_vic20_exp_8k.prg 2. TI99/4A: https://js99er.net/#/?cartUrl=https:%2F%2Fgithub.com%2FFabrizio-Caruso%2FCROSS-LIB%2Freleases%2Fdownload%2Fti99_1.32%2FXhordeti.bin 3. Commodore 64: https://nippur72.github.io/c64-emu/?joy=3&load=http://github.com/Fabrizio-Caruso/CROSS-LIB/releases/download/XHorde1.0/Xhorde_c64.prg 4. MSX 1: https://homebrew.file-hunter.com/index.php?id=crosshorde 5. Sinclair ZX Spectrum 48K: \ https://spectrumcomputing.co.uk/playonline.php?eml=2&downid=140691 or https://spectrumcomputing.co.uk/playonline.php?eml=1&downid=140691 6. Video Technology Laser 200 / VZ200: https://nippur72.github.io/laser310-emu/?load=http://github.com/Fabrizio-Caruso/CROSS-LIB/releases/download/XHorde1.0/Xhorde_vz200_24k.vz 7. Video Technology Laser 500: https://nippur72.github.io/laser500emu/?load=http://github.com/Fabrizio-Caruso/CROSS-LIB/releases/download/XHorde1.0/Xhorde_laser500.bin 8. Commodore 264 series (C16/C116/C+4): https://plus4world.powweb.com/play/cross_horde Binaries are in the release section (Click on Assets): \ https://github.com/Fabrizio-Caruso/CROSS-LIB/releases/tag/XHorde1.0 ------------------------------------------- ## SNAKE ![MSX](../snapshots/XSnake_MSX2.png) ![GB](../snapshots/XSnake_GB.png) ![C64](../snapshots/XSnake_C64_intro.png) This my own re-interpretation of Nibbler (arcade) and Snake (primarily a cell phone game), to which I have added many more game elements. You have to go through 32 levels (with 16 different maps) + an optional secret level (with its own map). To complete a level you have to eat all the apples while: - avoiding your own tail and body - avoiding the fixed and bouncing mines - avoiding to starve by losing your energy (eat apples to prevent this). As you starve, the snake moves faster and faster. Walls do not kill you and let you pause the game and think about your next move. You can also catch special items that will help in your quest: - ring (collect 3 or even 4 for extra points and to spawn more special items such as "freeze") - freeze (special item that freezes the mines and restores your energy - $ (extra points... but also some secret effects if you collect many) - extra life (special and hard to unlock item that gives 1 extra life) CONTROLS: either the joystick or I J K L to move and SPACE to start/continue. You can play the game online: 1. Commodore Vic 20: \ https://nippur72.github.io/vic20-emu/?joy=1&load=http://github.com/Fabrizio-Caruso/CROSS-LIB/releases/download/XSnake2.0/Xsnake_vic20_exp_16k.prg 2. TI99/4A: https://js99er.net/#/?cartUrl=https:%2F%2Fgithub.com%2FFabrizio-Caruso%2FCROSS-LIB%2Freleases%2Fdownload%2Fti99_1.32%2FXsnaketi.bin 3. Commodore 64: \ https://nippur72.github.io/c64-emu/?joy=3&load=http://github.com/Fabrizio-Caruso/CROSS-LIB/releases/download/XSnake2.0/Xsnake_c64.prg 4. MSX 1: \ https://homebrew.file-hunter.com/index.php?id=crosssnake 5. Sinclair ZX Spectrum 48K: \ https://spectrumcomputing.co.uk/playonline.php?eml=2&downid=137608 or https://spectrumcomputing.co.uk/playonline.php?eml=1&downid=137608 6. Video Technology Laser 200 / VZ200: \ https://nippur72.github.io/laser310-emu/?load=http://github.com/Fabrizio-Caruso/CROSS-LIB/releases/download/XSnake2.0/Xsnake_vz200_24k.vz 7. Video Technology Laser 500: \ https://nippur72.github.io/laser500emu/?load=http://github.com/Fabrizio-Caruso/CROSS-LIB/releases/download/XSnake2.0/Xsnake_laser500.bin 8. Commodore 264 series (C16/C116/C+4): \ http://plus4world.powweb.com/play/cross_snake_2_0 Binaries are in the release section (Click on Assets): \ https://github.com/Fabrizio-Caruso/CROSS-LIB/releases/tag/XSnake2.0 ------------------------------------------- ## BOMBER ![Atari](../snapshots/XBomber_A8.png) The game's goal is to destroy all buildings so that you can land on an empty road. The game is a clone of Air Attack (aka Blitz) game that was first developed on the Commodore Pet. The game is controlled by the single fire button (first joystick button for targets with joystick input and space key for targets with keyboard input). Your score depends on the number of building destroyed, the level reached and how fast you complete each single level. The game has 9 levels and it ends after the eighth level. CONTROLS: either the joystick fire button or SPACE. You can play the game online: 1. Commodore Vic 20: \ https://nippur72.github.io/vic20-emu/?joy=1&load=http://github.com/Fabrizio-Caruso/CROSS-LIB/releases/download/XBomber/Xbomber_vic20_exp_8k.prg 2. TI99/4A: https://js99er.net/#/?cartUrl=https:%2F%2Fgithub.com%2FFabrizio-Caruso%2FCROSS-LIB%2Freleases%2Fdownload%2Fti99_1.32%2FXbomberti.bin 3. Commodore 64: \ https://nippur72.github.io/c64-emu/?joy=3&load=http://github.com/Fabrizio-Caruso/CROSS-LIB/releases/download/XBomber/Xbomber_c64.prg 4. MSX 1: \ https://homebrew.file-hunter.com/index.php?id=crossbomber 5. Sinclair ZX Spectrum 48K: \ https://spectrumcomputing.co.uk/playonline.php?eml=2&downid=137605 or https://spectrumcomputing.co.uk/playonline.php?eml=1&downid=137605 6. Video technology Laser 200 / VZ200: \ https://nippur72.github.io/laser310-emu/?restore=false&?load=http://github.com/Fabrizio-Caruso/CROSS-LIB/releases/download/XBomber/Xbomber_vz200_24k.vz 7. Video technology Laser 500: \ https://nippur72.github.io/laser500emu/?restore=false&?load=http://github.com/Fabrizio-Caruso/CROSS-LIB/releases/download/bomber/Xbomber_laser500.bin 8. Commodore 264 series (C16/C116/C+4): \ http://plus4world.powweb.com/play/cross_bomber Binaries are in the release section (Click on Assets): \ https://github.com/Fabrizio-Caruso/CROSS-LIB/releases/tag/XBomber ------------------------------------------- ## SHOOT ![SMS](../snapshots/XShoot_sms.png) The game's goal is to kill all common enemies or kill all 4 "skulls". Common enemies can be killed quickly if pushed against the walls by shooting at them. The "skulls" and the boss cannot be pushed and are harder to kill. You have to avoid all enemies, rockets and chasing missiles. All flashing items have positive effects and can grant you special powers. Your bullets have a limited power that can be improved by catching the special fire power item. You can also fetch the mine item that grants you 3 powerful mines to use against all your enemies. Discover the 12 items. Some items are secret. In total the game has 16 secrets. You can unlock the 16 secrets by shooting at the skulls and at the missile and rocket bases in different ways. The game has 16 different levels including 2 boss levels + 1 secret level. CONTROLS: either the joystick or I J K L to move and SPACE to fire. You can play the gamne online: 1. Commodore VIC 20: \ https://nippur72.github.io/vic20-emu/?joy=1&load=http://github.com/Fabrizio-Caruso/CROSS-LIB/releases/download/XShootRebuild/XShoot_vic20_exp_16k.prg 2. TI99/4A: https://js99er.net/#/?cartUrl=https:%2F%2Fgithub.com%2FFabrizio-Caruso%2FCROSS-LIB%2Freleases%2Fdownload%2Fti99_1.32%2FXshootti.bin 3. Commodore 64: \ https://nippur72.github.io/c64-emu/?joy=3&load=http://github.com/Fabrizio-Caruso/CROSS-LIB/releases/download/XShootRebuild/Xshoot_c64.prg 4. MSX 1: \ https://homebrew.file-hunter.com/index.php?id=crossshoot 5. Sinclair ZX Spectrum 48K: \ https://spectrumcomputing.co.uk/playonline.php?eml=2&downid=137606 or https://spectrumcomputing.co.uk/playonline.php?eml=1&downid=137606 6. Video Technology Laser 200 / VZ 200: \ https://nippur72.github.io/laser310-emu/?restore=false&load=http://github.com/Fabrizio-Caruso/CROSS-LIB/releases/download/XShootRebuild/Xshoot_vz200_24k.vz 7. Video Technology Laser 500: \ https://nippur72.github.io/laser500emu/?restore=false&load=http://github.com/Fabrizio-Caruso/CROSS-LIB/releases/download/XShootRebuild/Xshoot_laser500.bin 8. Commodore 264 series (C16/C116/C+4): \ http://plus4world.powweb.com/play/cross_shoot Binaries are in the release section (Click on Assets): \ https://github.com/Fabrizio-Caruso/CROSS-LIB/releases/tag/XShootRebuild ------------------------------------------- ## CHASE ![Atari](../snapshots/XChase_A8.png) The game's goal is to lure the "ghosts" into the mines and possibly kill the "skull" by repeatedly using the gun. You have to avoid all enemies, the mines, all walls, rockets and chasing missiles. All flashing items have positive effects and can grant you some special powers. Discover the 10 items. If you use the gun against the skull and/or the missiles and rockets, you can unlock some special secret items. There are 20 different levels including 4 boss levels. CONTROLS: either the joystick or I J K L (to move) and SPACE to fire. You can play the game online for different systems: 1. Commodore Vic 20: \ https://nippur72.github.io/vic20-emu/?joy=1&load=http://github.com/Fabrizio-Caruso/CROSS-LIB/releases/download/XChase/Xchase_vic20_exp_16k.prg 2. TI99/4A: https://js99er.net/#/?cartUrl=https:%2F%2Fgithub.com%2FFabrizio-Caruso%2FCROSS-LIB%2Freleases%2Fdownload%2Fti99_1.32%2FXchaseti.bin 3. Commodore 64: \ https://nippur72.github.io/c64-emu/?joy=3&load=http://github.com/Fabrizio-Caruso/CROSS-LIB/releases/download/XChase/Xchase_c64.prg 4. MSX 1: \ https://homebrew.file-hunter.com/index.php?id=crosschase 5. Sinclair ZX Spectrum 48K: \ https://spectrumcomputing.co.uk/playonline.php?eml=2&downid=112056 or https://spectrumcomputing.co.uk/playonline.php?eml=1&downid=112056 6. Video Technology Laser 210 / VZ200 : \ https://nippur72.github.io/laser310-emu/?restore=false&load=http://github.com/Fabrizio-Caruso/CROSS-LIB/releases/download/XChase/Xchase_vz200_18k.vz 7. Video Technology Laser 500: \ https://nippur72.github.io/laser500emu/?restore=false&load=http://github.com/Fabrizio-Caruso/CROSS-LIB/releases/download/XChase/Xchase_laser500.bin 8. Commodore 264 series (C16/C116/C+4): \ http://plus4world.powweb.com/play/cross_chase_32k_v0_9 Binaries are in the release section (Click on Assets): \ https://github.com/Fabrizio-Caruso/CROSS-LIB/releases/tag/XChase ================================================ FILE: docs/GIOCHI.md ================================================ # I GIOCHI A secondo del sistema il gioco prevede - l'uso del joystick nella port più comune (in genere port 1 tranne che port 2 su C64) oppure - l'uso di I J K L per i movimenti e SPAZIO per FIRE. ------------------------------------------- ## CROSS HORDE ![CPC](../snapshots/XHorde_CPC.png) ![Atari](../snapshots/XHorde_A8.png) ![SMS](../snapshots/XHorde_SMS.png) Cross Horde è uno zombie shooter con diversi tipi di nemici, power-ups e oggetti da raccogliere. Si muore se uno zombie raggiunge il muro o se uno zombie ci colpisce con un suo proiettile. Per migliorare la potenza di fuoco si possono raccogliere gli anelli che alcuni zombie ci lasciano alla loro morte. Gli anelli hanno questi effetti in ordine temporale: - aumenta la distanza dei nostri colpi - aumenta la velocità di ricarica del nostro arco - aumenta il numero di frecce lanciate contemporaneamente - aumenta la potenza di ogni freccia Una volta raggiunti tutti questi miglioramenti, gli anelli successivi saranno utile per sbloccare oggetti speciali e per raggiungere la potenza di fuoco "hyper". Il gioco è disponibile pure online: 1. Commodore 264 series (C16/C116/C+4): https://plus4world.powweb.com/play/cross_horde 2. Commodore Vic 20: https://nippur72.github.io/vic20-emu/?joy=1&load=http://github.com/Fabrizio-Caruso/CROSS-LIB/releases/download/XHorde1.0/Xhorde_vic20_exp_8k.prg 3. Commodore 64: https://nippur72.github.io/c64-emu/?joy=3&load=http://github.com/Fabrizio-Caruso/CROSS-LIB/releases/download/XHorde1.0/Xhorde_c64.prg 4. Video Technology Laser 200 / VZ200: https://nippur72.github.io/laser310-emu/?load=http://github.com/Fabrizio-Caruso/CROSS-LIB/releases/download/XHorde1.0/Xhorde_vz200_24k.vz 5. Video Technology Laser 500: https://nippur72.github.io/laser500emu/?load=http://github.com/Fabrizio-Caruso/CROSS-LIB/releases/download/XHorde1.0/Xhorde_laser500.bin ------------------------------------------- ## CROSS SNAKE - THE GAME ![MSX](../snapshots/XSnake_MSX2.png) ![GB](../snapshots/XSnake_GB.png) ![C64](../snapshots/XSnake_C64_intro.png) E' la mia personale re-interpretazione del gioco arcade Nibbler e del gioco per cellulare Snake, alla quale io ho aggiunto ulteriori elementi di gioco. Ci sono 32 livelli (su 16 mappe diverse) + un livello opzionale segreto (con la sua mappa). Per completare un livello si devono mangiare tutte le mele preveste dal livello: - evitando di mordere il proprio corpo; - evitando di colpire con la testa le mine (mobili e fisse); - evitando di morire di fame, cioè perdendo tutta l'energia (non trascorrere troppo tempo senza mangiare una mela). Più tempo passa senza mangiare mele, più veloce si muoverà il serpente e questo rende i movimenti sempre più difficili. I muri non uccidono (come nel gioco arcade Nibbler) e tu possono essere utili per fermare il serpente per decidere la mossa successiva. Puoi catturare oggetti speciali: - anello (prendine 3 or anche 4 per punti extra e per generare altri oggetti speciali come "freeze"); - freeze (oggetto speciale che congela temporaneamente le mine e rallenta il serpente); - $ (punti extra ma anche effetti speciali se se ne prendono molti) - vita extra (oggetto difficile da sbloccare) Il gioco è disponibile pure online: 1. Commodore 264 series (C16/C116/C+4): http://plus4world.powweb.com/play/cross_snake_2_0 2. Commodore Vic 20: https://nippur72.github.io/vic20-emu/?joy=1&load=http://github.com/Fabrizio-Caruso/CROSS-LIB/releases/download/XSnake2.0/Xsnake_vic20_exp_16k.prg 3. Commodore 64: https://nippur72.github.io/c64-emu/?joy=3&load=http://github.com/Fabrizio-Caruso/CROSS-LIB/releases/download/XSnake2.0/Xsnake_c64.prg 4. MSX 1: https://homebrew.file-hunter.com/index.php?id=crosssnake 5. Sinclair ZX Spectrum 48K: https://spectrumcomputing.co.uk/playonline.php?eml=1&downid=137608 6. Video Technology Laser 200 / VZ200: https://nippur72.github.io/laser310-emu/?load=http://github.com/Fabrizio-Caruso/CROSS-LIB/releases/download/XSnake2.0/Xsnake_vz200_24k.vz 7. Video Technology Laser 500: https://nippur72.github.io/laser500emu/?load=http://github.com/Fabrizio-Caruso/CROSS-LIB/releases/download/XSnake2.0/Xsnake_laser500.bin ------------------------------------------- ## CROSS BOMBER - THE GAME ![Atari](../snapshots/XBomber_A8.png) Lo scopo del gioco è distruggere tutti gli edifici in maniera da potere atterrare. Trattasi di un clone di Air Attack (anche noto come Blitz) che fu sviluppato la prima volta per Commodore Pet. Il gioco è controllato dal solo pulsate di fuoco (quindi FIRE o SPAZIO). Il punteggio dipende dal numero di edifici distrutti, dal livello raggiunto e da quanto velocemente si completi ogni singolo livello. Il gioco prevede 8 livelli e termina alla fine dell'ottavo livello. Il gioco è disponibile pure online: 1. Commodore 264 series (C16/C116/C+4): http://plus4world.powweb.com/play/cross_bomber 2. Commodore Vic 20: https://nippur72.github.io/vic20-emu/?joy=1&load=http://github.com/Fabrizio-Caruso/CROSS-LIB/releases/download/XBomber/Xbomber_vic20_exp_8k.prg 3. Commodore 64: https://nippur72.github.io/c64-emu/?joy=3&load=http://github.com/Fabrizio-Caruso/CROSS-LIB/releases/download/XBomber/Xbomber_c64.prg 4. MSX 1: https://homebrew.file-hunter.com/index.php?id=crossbomber 5. Sinclair ZX Spectrum 48K: https://spectrumcomputing.co.uk/playonline.php?eml=1&downid=137605 6. Video technology Laser 200 / VZ200: https://nippur72.github.io/laser310-emu/?restore=false&?load=http://github.com/Fabrizio-Caruso/CROSS-LIB/releases/download/XBomber/Xbomber_vz200_24k.vz 7. Video technology Laser 500: https://nippur72.github.io/laser500emu/?restore=false&?load=http://github.com/Fabrizio-Caruso/CROSS-LIB/releases/download/bomber/Xbomber_laser500.bin ------------------------------------------- ## CROSS SHOOT - THE GAME ![SMS](../snapshots/XShoot_sms.png) Lo scopo del gioco è di occidere tutti i nemici comuni oppure alternativamente uccidere i 4 teschi prima di avere ucciso tutti gli altri nemici. Completare un livello uccidendo i 4 teschi permette di avere più punti e di sbloccare segreti, oggetti e bonus. I nemici comuni possono essere uccisi velocemente se spinti dai nostri proiettili contro i muri. Devi evitare tutti i nemici e i missili di vario tipo. Tutti gli oggetti che lampeggiano hanno effetti positivi per noi e ci possono darci poteri speciali. I tuoi proiettili hanno una potenza limitata che puoi essere migliorata da un oggetto specifico. Puoi anche raccogliere un oggetto che ti dà 3 mine da usare contro tutti i nemici. Puoi scoprire 12 oggetti. Alcuni di questi oggetti sono segreti. Il gioco ha in totale 16 segreti (di vario tipo). Per trovare i segreti la strategia migliore è quella di distruggere diversi teschi e basi di missili. Il gioco prevede 16 diversi livelli compresi 2 boss + 1 livello segreto. Il gioco è disponibile pure online: 1. Commodore 264 series (C16/C116/C+4): http://plus4world.powweb.com/play/cross_shoot 2. Commodore VIC 20: https://nippur72.github.io/vic20-emu/?joy=1&load=http://github.com/Fabrizio-Caruso/CROSS-LIB/releases/download/XShootRebuild/XShoot_vic20_exp_16k.prg 3. Commodore 64: https://nippur72.github.io/c64-emu/?joy=3&load=http://github.com/Fabrizio-Caruso/CROSS-LIB/releases/download/XShootRebuild/Xshoot_c64.prg 4. MSX 1: https://homebrew.file-hunter.com/index.php?id=crossshoot 5. Sinclair ZX Spectrum 48K: https://spectrumcomputing.co.uk/playonline.php?eml=1&downid=137606 6. Video Technology Laser 200 / VZ 200: https://nippur72.github.io/laser310-emu/?restore=false&load=http://github.com/Fabrizio-Caruso/CROSS-LIB/releases/download/XShootRebuild/Xshoot_vz200_24k.vz 7. Video Technology Laser 500: https://nippur72.github.io/laser500emu/?restore=false&load=http://github.com/Fabrizio-Caruso/CROSS-LIB/releases/download/XShootRebuild/Xshoot_laser500.bin ------------------------------------------- ## CROSS CHASE - THE GAME ![Atari](../snapshots/XChase_A8.png) Lo scopo del gioco è quello di fare finiti i nemici sulle mine e se possibile uccidere pure il teschio colpendolo con più colpi (dopo avere preso la pistola). Il gioco è quindi simile ad una versione real-time di Gnome Robots ma ha anche diversi elementi di gioco aggiuntivi. Devi evitare tutti i nemici, le mine, i muri e i missili di vario genere. Tutti gli oggetti lampeggianti hanno effetti positivi e possono darti poteri speciali. Ci sono 10 oggeti diversi da scoprire e sbloccare. Per sbloccare alcuni segreti e oggetti speciali, dovrai usare la pistola contro il teschio e/o contro le basi dei missili. Il gioco prevde 20 livelli diversi compresi 4 boss. Il gioco è disponibile pure online: 1. Atari LYNX: https://atarigamer.com/lynx/play/CrossChase/675300242 2. Commodore 264 series (C16/C116/C+4): http://plus4world.powweb.com/play/cross_chase_32k_v0_9 3. Commodore Vic 20: https://nippur72.github.io/vic20-emu/?joy=1&load=http://github.com/Fabrizio-Caruso/CROSS-LIB/releases/download/XChase/Xchase_vic20_exp_16k.prg 4. Commodore 64: https://nippur72.github.io/c64-emu/?joy=3&load=http://github.com/Fabrizio-Caruso/CROSS-LIB/releases/download/XChase/Xchase_c64.prg 5. MSX 1: https://homebrew.file-hunter.com/index.php?id=crosschase 6. Sinclair ZX Spectrum 48K: https://spectrumcomputing.co.uk/playonline.php?eml=1&downid=112056 7. Video Technology Laser 210 / VZ200 : https://nippur72.github.io/laser310-emu/?restore=false&load=http://github.com/Fabrizio-Caruso/CROSS-LIB/releases/download/XChase/Xchase_vz200_18k.vz 8. Video Technology Laser 500: https://nippur72.github.io/laser500emu/?restore=false&load=http://github.com/Fabrizio-Caruso/CROSS-LIB/releases/download/XChase/Xchase_laser500.bin ================================================ FILE: docs/HARDWARE_AGNOSTIC_CODE.md ================================================ ## HARDWARE-AGNOSTIC CODE Thanks to Cross-Lib APIs, the game code can be *hardware-agnostic*. Using only Cross-Lib APIs is not enough, though, as Cross-Lib covers targets that have different screen size, screen shape and targets that lack some hardware features such as graphics, colors, sounds. ### ANSI C (A sub-set of) The code has to be compiled by several different compilers that do not necessarily support the latest version of the C standard. Therefore it should be written in a sub-set of ANSI C89 that is common among all supported compilers. This sub-set can be described as (mostly) ANSI C89 without: - `float` types; - `struct` copies, assignments, parameters (use pointers to `struct` instead); - dynamically allocated memory (`malloc`, `free`). Moreover for performance reasons it is better to avoid recursion (as this has an extreme high cost on MOS 6502 targets). Some C99 features are available: - Modern `//` comments are allowed. - `stdint.h` is not available but `uint8_t` and `uint16_t` are (with no need for extra include directive). ### Screen size Using Cross-Lib APIs is not enough as the screen size and shape may be different. Cross-Lib exposes a constant `XSize` for the width of the screen and a constant `YSize` for the height of the screen. Both these macros are measured in terms of numbers of *tiles* (see next section). The game code should rely on fractions of `XSize` and of `YSize` and never use hard-coded sizes or use conditional directives to cover all sizes. By doing so, upon compilation, the game will auto-adapt to the target's screen size. ### Tile-based Graphics Graphics in Cross-Lib is tile-based as this is the only possible graphics that can be supported by all targets. For targets with graphics, the shapes of tiles are only defined at compilation time and cannot be re-defined. So, for targets with graphics, smoothly moving sprites can only be implemented as software sprites through pre-shifted tiles. Most targets with graphics have 8x8 pixel tiles but some other targets with graphics have different shapes. So do not implement logic that only assumes 8x8 pixel tiles (e.g. when implementing software sprites with pre-shifted tiles). If you want to support targets with no graphics (i.e., tiles are just mapped to ASCII characters), you either avoid code that depends on tile shapes or if you, you have to implement an alternative version for non-graphics targets. For example for the game Cross Snake you can see how it is rendered on the MSX 1 (graphics, sounds, colors) and on the Game Boy (graphics, sounds but no colors): ![MSX](snapshots/XSnake_MSX2.png) ![GB](snapshots/XSnake_GB.png) For more snapshots we refer to: https://github.com/Fabrizio-Caruso/CROSS-LIB/blob/master/docs/SNAPSHOTS.md ### Colors, Sounds and Graphics Some targets have no colors or no color on text, or no sounds, or no graphics. So do not write any logic that relies only on the presence of colors/sounds/graphics; or if you do, use conditional directives to implement an alternative logic for targets with no colors/sounds/graphics. ### Learn from the built-in games and tests Cross-Lib comes with games and tests whose code can be used to learn how to code universal games. The code of the games is in: https://github.com/Fabrizio-Caruso/CROSS-LIB/tree/master/src/games The code of the examples is in: https://github.com/Fabrizio-Caruso/CROSS-LIB/tree/master/src/examples ================================================ FILE: docs/HOW_TO_ADD_A_NEW_GAME.md ================================================ ## HOW TO ADD A NEW GAME Adding a new game is just a matter of - copying src/Makefile.bomber into src/Makefile. - copying src/games/bomber into src/games/ - add an exception to src/.gitignore for src/games//generated_assets ================================================ FILE: docs/HOW_TO_ADD_NEW_TARGET.txt ================================================ HOW TO COMPILE FOR A NEW TARGET Adding a new target computer with no sound, no joystick/gamepad inpu and no user-defined graphics can be as simple as just recompiling with no modification if the compiler supports conio.h. In most cases this won't produce the best result. So some little tuning is usually necessary. If no conio is natively supported, some little conio wrapper and/or re-implementation of the display APIs in display_macros.c is necessary. Here we describe the simplest cases when conio is already available, no sound and no user defined graphics is expected. Usually you have to do the following steps: 1. SCREEN SIZE By default screen size is 16x16 cells. So, if you want your target (e.g., NEW_TARGET) to use a different cell count. You need to compile with the -D__NEW_TARGET__ option to let the code know you are compiling for NEW_TARGET edit display_macros.h and add something like: ... #elif defined(__NEW_TARGET__) #define XSize ... #elif defined(__NEW_TARGET__) #define YSize ... 2. SPEED By default no slow down is inserted in the main loop but in some cases your game may run too fast. So you will need to edit settings.h to add some slow-down: ... #elif defined(__NEW_TARGET__) #define SLOW_DOWN #define GAME_SLOW_DOWN ... 3. SLEEP If the compiler does not implement the sleep function, you need to either implement one yourself or compile with -DNO_SLEEP if you want no sleep. 4. KEYBOARD INPUT Some targets may detect key-presses as capital and others as small letters. You can tune this in settings.h. 5. INPUT Some targets may no implement getk to read the keyboard input. In this case you need to provide a substitute in input_macros.h and input_macros.c ================================================ FILE: docs/HOW_TO_INSTALL_COMPILERS.txt ================================================ ------------------------------------------------------------------------------------------------------- XTC68 ------------------------------------------------------------------------------------------------------- 1. You need to clone https://github.com/stronnag/xtc68 2. So you need a 32bit development environment on a x86-64 machine. So, you may need to run: "sudo apt install libc6-dev-i386" or install the corresponding Cygwin package or just be in a 32-bit environment 3. You need to unzip 424frun1.zip (found inside the tools/xtc68 directory and originally taken from "Runtime disk1" in http://www.dilwyn.me.uk/c/index.html into the "support" directory which you find inside the newly cloned code. i.e., download the disk1 http://www.dilwyn.me.uk/c/424frun1.zip from http://www.dilwyn.me.uk/c/index.html and put it inside the "support" directory 4. Run "make all" 5. Run "install.sh" Remark: After linking and compilation the command will give us the number of bytes used for the "dataspace". In order to use the binary inside an emulator we need to add some meta-data and choose an emulator, e.g., QPC from https://www.kilgus.net/qpc/ : - run the following commands " f$=“dos1_“ l=FLEN(\f$) mem=RESPR(l) LBYTES f$,mem SEXEC ram1_,mem,l,= dataspace bytes> " - you will have the program in ram1 with the name chosen by the SEXEC command, which you run by selecting ram1 and the program. ------------------------------------------------------------------------------------------------------- Z8K-GCC ------------------------------------------------------------------------------------------------------- 0. Under Linux 64-bit, you may need to install libc6:i386, libncurses5:i386, libstdc++6:i386 zlib1g:i386 1. Use: z8kgcc-jan-19-2009-linux-fc9.tar from: ftp://ftp.groessler.org/pub/chris/olivetti_m20/misc/z8kgcc/z8kgcc-jan-19-2009.tar.bz2 or: http://www.z80ne.com/m20/sections/download/z8kgcc/z8kgcc-jan-19-2009-linux-fc9.tar.bz2 Main site: http://www.z80ne.com/m20/index.php. 2. Decompress it into /opt in order to have "z8k-pcos-gcc" inside /opt/z8kgcc-jan-2009/bin 3. Add "/opt/z8kgcc-jan-2009/bin" to your PATH For example by inserting the following line in .bashrc export PATH="/opt/z8kgcc-jan-2009/bin:$PATH" Disk images In order to insert the binary inside a disk image download the tool m20floppy from ftp://ftp.groessler.org/…/ol…/imgtools/m20floppy-0.61.tar.gz Use a bootable image from https://github.com/…/m…/tools/olivetti_m20/pcos20h_empty.img Compilation - to produce an object file do something like : qcc -c hello.c -o hello.o - to link and produce a binary "a_out" do something like qcc crt.o part1.o part2.o ------------------------------------------------------------------------------------------------------- GCC for TI ------------------------------------------------------------------------------------------------------- Compiler Installation: git clone https://github.com/mburkley/tms9900-gcc (IMPORTANT:As of 2024/10/18 only 1.32 branch is stable) git checkout 1.32 sudo apt install build-essential libgmp-dev libmpfr-dev cd tms900-gcc ./install.sh /opt/gcc4ti -------------------------------------------------------------------------------- libTi99: git clone https://github.com/tursilion/libti99 Modify the Makefile to make it point to /opt/gcc/bin e.g., TMS9900_DIR?=/opt/gcc4ti/bin ELF2EA5_DIR?=/opt/gcc4ti/bin EA5_SPLIT_DIR?=/opt/gcc4ti/bin Once the it has finished to build (even if with errors), make sure that - the header files are in /opt/gcc4ti/include - libti99 is in /opt/gcc4ti/lib The lib may fail if it does not find classic 99 emulator, but it builds the libti99 file anyway. So you have to move it manually to /opt/gcc4ti/lib and to move the .h files to /opt/gcc4ti/include. A cleaner way would be to have the Makefile also point to classic99. ---- OLD procedure for the Texas TI99/4a (http://atariage.com/forums/topic/164295-gcc-for-the-ti/page-6), 1. download and decompress gcc-installer.tar.gz from http://atariage.com/forums/topic/164295-gcc-for-the-ti/page-1 2. install libgmp-dev libmpfr-dev tree For Cygwin install: Category "Devel" - gcc-core - libiconv - make - patchutils Category "Libs" - libgmp-devel - libmpfr-devel Category "Interpreters" - m4 3. export set MAKEINFO=missing (to fix one error about texinfo) [maybe no longer necessary] 4. run the "install.sh " script command 5. find files inside /bin -------------- NEW version ------------------------------------------------------------------------------------------------------- GCC for Atari ST ------------------------------------------------------------------------------------------------------- 1. download the cross compiler from http://vincent.riviere.free.fr/soft/m68k-atari-mint/ 2. follow the instructions from the installation site 3. use as GCC 4. place st52 terminfo file inside usr\share\terminfo\s in the same virtual hard disk as the .tos file(s) ================================================ FILE: docs/HOW_TO_LOAD.md ================================================ In order to run the game you will have to follow a different procedure depending on whether you want to load it into an emulated system or a real system. ### Loading the game into an emulated vintage system In most cases loading an executable into an emulator is straightforward. For a detailed guide on how to load the game on several emulated systems for which the procedure is not obvious, we refer to: https://github.com/Fabrizio-Caruso/CROSS-LIB/blob/master/docs/HOW_TO_LOAD_THE_GAME.md ### Loading the game into a real vintage system This depends on the systems and the format used to store the game. For some hints on this take a look at: https://github.com/Fabrizio-Caruso/CROSS-LIB/blob/master/docs/HOW_TO_LOAD_THE_GAME_ON_REAL_HARDWARE.md ================================================ FILE: docs/HOW_TO_LOAD_THE_GAME.md ================================================ ## HOW TO LOAD THE GAME This document only describes some non-obvious procedures on how to load the game on some emulators (similar procedures can be followed on the real machines): ----------------------------------------------------------- ### AGAT 7 and 9 Use the Agat emulator 1.29 (the one not detected as a virus): https://sourceforge.net/projects/agatemulator/ Select "(2) IKP-9" Chose second option from below Right click top of the window Go to 140k drive Select game disk image Type: " CATALOG,S6 BRUN XL " ----------------------------------------------------------- ### AGON LIGHT Use https://github.com/astralaster/agon-light-emulator Put the binaries inside the sdcard directory dir to list the content of the emulated SDK load run ----------------------------------------------------------- ### ALPHATRONIC Use MAME/MESS mame64.exe alphatro -uimodekey DEL -window -cartridge1 c:\Retro\CROSS-CHASE\build\FULL_alphatro.rom --------------------------------------------------------- ### AMSTRAD CPC/GX4000 You can use Caprice, WinApe - Tape (.cdt) version: You need to attach the image as a tape In BASIC type |tape run" Start PLAY on the virtual tape player - Disk (.dsk) version: You need to attach the image as a disk In BASIC type run"XBIN .CPC" - ROM (.cpr) version: You need to attach the image as a cartridge ---------------------------------------------------------- ### Amstrad NC 100 Use nc100em-1.2-2014 emulator . Rename the binary to nc100.card and place it in the same folder as the emulator Run the emulator. Control-X to start the game --------------------------------------------------------- ### ATARI 5200 Use Altirra or use Atari800 emulator with the Atari 5200 bios roms and select Atari 5200 emulation. Load as 16k one chip cartridge. --------------------------------------------------------- ### ATARI 7800 Use A7800 (http://7800.8bitdev.org/index.php/A7800_Emulator) Select standard options. Use it as Mame/Mess by: TAB->load ROM->cartridge->select file --------------------------------------------------------- ### ATARI LYNX Use Handy 0.95 emulator (https://sourceforge.net/projects/handy/?source=typ_redirect). Place the rom into same folder as Handy emulator (https://atariage.com/Lynx/roms/LynxBoot.zip) --------------------------------------------------------- ### AQUARIUS Unzip the .zip file. Type CLOAD First load the file starting with underscore Type RUN Type CLOAD Then load the other file ----------------------------------------------------------- ### BBC MICRO / BBC MASTER Use BeebEm 4.19 emulator. File-> Load disk 0-> Select .img file To load and run the game in dsk format you can use the following commands: - *CAT to verify the disk content - *RUN"XCHASE" If you want to create a dsk image from a .inf image: It is better to have short simple name files. For example let us assume XCHASE and XCHASE.INF Use the binary and .inf files to either create a disk with tools such as bbcim or BBCExplorer-2.01 or use BeebEm 4.16 emulator 1. to create an empty disk image (File->Disc Options->New Disc 0) 2. inject the binary into the new disk (Edit->Import files to disc->select .inf file) ----------------------------------------------------------- ### BIC / A5105 Use JKCEMU. - (If not already selected) Einstellungen -> Select BIC - Datei->Diskettenstation->Laufwerk 1->Open->Diskettenabbilddatei oeffnen->select file .dumb file->Nur lesen - Datei->Schliessen - Run file by its name (e.g., BULD/FU) - Run DIR to see disk content/view/3/4/ ----------------------------------------------------------- ### BIT90 Use Mame emulator. Run it with something like: mame64.exe bit90 -window -uimodekey DEL Attach the .rom as a cartridge to load and run the game ----------------------------------------------------------- ### BONDWELL 2 Use Mame - Start bw2 - May need to use ScrollLock (FN+`[` on some keyboards) in order to enable TAB to enter the disk selection menu - Select the CP/M 2.2 boot disk - Use natural keyboard to type CTRL-C to leave the menu - Switch to the game disk ----------------------------------------------------------- ### CAMPUTERS LYNX Use Jinx emulator: https://jynxemulator.wordpress.com/download/ GitHub project: https://github.com/jonathan-markland/Jynx/releases ----------------------------------------------------------- ### CANON X-07 Use Takeda emulator Insert the .CAS file with PLAY->select file Use the CAS file with the following commands CLOAD RUN ----------------------------------------------------------- ### CASIO FP-1100 Use Takeda's fp1100.exe emulator. You need to put MAME roms in the same directory as the binary. Attach disk image Reset --------------------------------------------------------- ### CCE MC-1000 Use the MESS emulator e.g. mess64.exe mc1000 -uimodekey DEL -window mess64.exe mc1000 -uimodekey DEL -window -ramsize 48k (for the 48k expansion) ) Use File Manager to attach the WAV file In BASIC do: TLOAD Start the tape: Tape Control -> Tape --------------------------------------------------------- ### CBM 610 Use WinVice 3.1 and try multiple times. Sometimes load"*",8 helps. There must be a bug in WinVice disk drive emulation for this target. ----------------------------------------------------------- ### COLECOVISION Use ColEm: https://fms.komkon.org/ColEm/ ----------------------------------------------------------- ### COLECO ADAM Use Mame emulator. mame64.exe adam -window -flop1 .\disk\adam\cpm2.2_1.50.dsk -flop2 c:\Retro\CROSS-CHASE\build\FULL_coleco_adam.img B: Type the binary name (no extension) contained in B: ------------------------------------------------------------- ### Color Computer (CoCo) Tape load - Use XROAR emulator: https://www.6809.org.uk/xroar/ - Attach the .cas image - Type - CLOADM Remark: You can also simply use the "run" option Disk load - Use XROAR emulator (Emulate CoCo DISK EXTENDED) - Disable "keyboard translation" in the "Tool" tab - Select a CoCO machine to emulate in the "Hardware" tab - Attach the .dsk disk image in "File->Drive 1" - Type: - LOADM"XBIN - EXEC ------------------------------------------------------------- ### Color Computer 3 (CoCo 3) Use VCC emulator: https://github.com/VCCE/VCC/releases Same as CoCo with XROAR but disk drives need to be enabled: Disk load Cartridge -> Cartridge -> Load Cart fd502.dll (to enable disk drive emulation) --------------------------------------------------------- ### COMX Use EMMA 02 (https://www.emma02.hobby-site.com/download.html) Select COMX tab Click on START (window may hide the option -> make it bigger) Click on LOAD Go to the directory with the .hex file Select HEX Files Chose the .hex file Type RUN [equivalent to CALL(@4401)] ---------------------------------------------------------- ### CP/M (generic system) with ADM-3A control sequences .COM binaries: Examples of CP/M systems with ADM-3A support: multiple Kaypro systems, Aussie Byte (Knight 2000), Decision Mate V Use MAME emulator with correct roms and CP/M disks. Examples: - mame64.exe kaypro2x -flop1 ..\disk\kaypro\k10hald1.td0 -uimodekey DEL - mame64.exe aussieby -flop1 ..\disk\aussie_byte\knight2000_boot.dsk -uimodekey DEL WAIT for the operating system to fully load. Use the quickload option to load the .COM file. If you want to create a disk image you need to follow the instructions in the Z88DK wiki. .DSK images: Use MAME emulator with correct roms and CP/M disks Examples: - mame64.exe dmv -flop1 ..\disk\dmv\dm5-cpm.td0 -uimodekey DEL - Attach image as disk B: - Run B: - ----------------------------------------------------------- ### CREATIVISION Use MAME/MESS. Mess 0.148 with crvision works fine: mess64.exe crvision -window -uimodekey DEL -cart1 c:\Retro\CROSS-LIB\build\FULL_creativision_16k_SWAPPED.bin mess64.exe crvision -window -uimodekey DEL -cart c:\Retro\CROSS-LIB\build\Xshoot_creativision_18k_SWAPPED.bin ------------------------------------------------------------- ### DAI Use Mame emulator. mame64.exe dai -window Attach tape file UT (to enter monitor) R (to load) G0800 (to start the game) ------------------------------------------------------------- ### Dragon Tape load - Use XROAR emulator - Attach the .cas image - Type - CLOADM Remark: You can also simply use the "run" option Disk load - Use XROAR emulator (Emulate DOSPLUS) - Attach the .vdk disk image - Type: RUN"XBIN.BIN" ----------------------------------------------------------- ### EACA 2000 - EG2K Use the Genieous emulator: http://gaia.atilia.eu/content/view/3/4/ ------------------------------------------------------------ ### EMSCRIPTEN This is a special target: its build is generated by Emscripten and it is targeting browsers. The build for this target are .html, .js, , .wasm files. In order to run a game built for this target you need to run an HTTP server: - move the generated files inside the emsdk directory - python -m SimpleHTTPServer You can then run your program by using the following URL: e.g., http://localhost:8000/FULL_emcc_buffered.html For more info on Emscripten installation: see https://emscripten.org/docs/getting_started/downloads.html In particular: - Make the "latest" SDK "active" for the current user. (writes .emscripten file) ./emsdk activate latest - Activate PATH and other environment variables in the current terminal source ./emsdk_env.sh Note: On Windows, run emsdk instead of ./emsdk, and emsdk_env.bat instead of source ./emsdk_env.sh. WSL mounted on: C:\Users\fabri\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu18.04onWindows_79rhkp1fndgsc\LocalState\rootfs ------------------------------------------------------------ ### ENTERPRISE Use ep128emu (https://sourceforge.net/projects/ep128emu/files/) Select config EP_128k_EXDOS_FileIO.cfg Set working directory to the directory with your binary F1 -> Select binary ---------------------------------------------------------- ### EPSON PX-4 / HC-40 Use Takeda emulator for HC-40 with the right SYS.ROM file (https://fjkraan.home.xs4all.nl/comp/px4/). Rename the binary into BASIC.ROM and replace the original BASIC.ROM that should be (or have been) in the same directory as the HC-40 emulator executable. ---------------------------------------------------------- ### EPSON PX-8 / HC-80 Use Takeda emulator for HC-80 with the right SYS.ROM file. Rename the binary into BASIC.ROM and replace the original BASIC.ROM that should be (or have been) in the same directory as the HC-80 emulator executable. ---------------------------------------------------------- ### EPSON QC-10 / QX-10 Use Mame emulator e.g., mame64.exe qx10 -window -uimodekey DEL -flop1 c:\Emulation\TEST\0.196\disk\qc10\EPSNQX10.dsk Attach the disk image and type the binary name (run DIR to see name). ----------------------------------------------------------- ### BGR COMPUTERS EXCALIBUR 64 Use Mame emulator with the CP/M boot disk e.g., mame64.exe excali64 -window -uimodekey DEL -flop1 c:\Emulation\TEST\0.196\disk\excali64\excalibur_cpm_system.raw Attach the game image B: Run the binary in B: with its plain name (no extension) ----------------------------------------------------------- ### EXIDY SORCERER Use Mess emulator. Attach the .wav file Type LOADG --------------------------------------------------------- ### PC-E200 / PC-G850 / PC-G815 Use the g800 emulator (https://ver0.sakura.ne.jp/pc/) Run it from the cmd line with: g800(.exe) -machine=e200 g800(.exe) -machine=g815 g800(.exe) -machine=g850 Once the emulated machine is started use: MON (to enter the Assembly monitor) G100 (to actually run the code) --------------------------------------------------------- ### Galaksija Use the MESS emulator or (for debugging) the online emulator https://galaksija.net/?i=2 Use File Manager to attach the WAV file In BASIC run: OLD Start the tape In BASIC run: RUN --------------------------------------------------------- ### Galaksija Plus Use GALe emualtor: https://galaksija.net/?i=1 Drop the .gtp file into the browser. --------------------------------------------------------- ### GAMATE Use MESS/MAME (e.g., Mess 0.148). Run mess.exe gamate File Manager -> Select cartridge -> Choose the .bin file --------------------------------------------------------- ### GAMEGEAR Use Mednafen. Remark: Sound works fine here. mednafen.exe c:\Retro\CROSS-LIB\build\Xhorde_gamegear.gg Use Emulitious (https://emulicious.net/) File -> Open File -> Select .gg file or (maybe broken with no sound!) Use Kega Fusion ((https://segaretro.org/Kega_Fusion). File -> Open GameGear ROM -> Select .gg file ------------------------------------------------------------ ### GRUNDY NEWBRAIN Use NBemulator15. Create a directory with _dir.txt, a.bas, a.dat Insert this directory into the BASIC directory Start the emulator File -> Start Emulation File -> Tape Management -> Select directory with the game's files Type "LOAD" Type "RUN" --------------------------------------------------------- ### HECTOR HR Use DCHector or VB Hector emulator [DCHector] Select Hector HR(2)+. File->Load Tape Press 1 and wait for the game to load and run --- [VB HECTOR] Start the emulator Select HR Plus Fichier -> Ouvrir Fichier K7 Press 1 and wait for the game to load and run Click on the emulator's window --------------------------------------------------------- ### HOMELAB 2### HECTOR HR Use MAME emulator. Use quickload to select the .htp file (and load it into memory) CALL 17152 --------------------------------------------------------- ### HOMELAB 3/4 Use MAME emulator. Use quickload to select the .htp file (and load it into memory) CALL $4300 --------------------------------------------------------- ### HUEBLER/EVERT-MC Use JKCEmu. Einstellungen Select HUEBLER/EVERT-MC Uebernehmen Schliessen Datei -> Lauden -> Select binary GO 0000 --------------------------------------------------------- ### HUEBLER-GRAFIK-MC Einstellungen Select HUEBLER-GRAFIK-MC Uebernehmen Schliessen Datei -> Lauden -> Select binary GO 0000 --------------------------------------------------------- ### JUPITER ACE Use EightOne emulator. For the FULL version game "0 0 bload ace" Open the FULL .wav version with Tools->Wav Loader. ------------------------------------------------------------ ### KAYPRO Use Mame (See CP/M target) mame64.exe kaypro2x -flop1 ..\disk\kaypro\k10hald1.td0 -uimodekey DEL --------------------------------------------------------- ### Luxor ABC 80 Use the ABC80SIM emulator (https://www.abc80.org/pub/abc80sim/, https://git.zytor.com/abc80/abc80sim.git/) .ihx Pass the ihx file as a parameter to the emulator Run it directly with the command “A=CALL(49200)” --- .bac abc80 --casfile program.bac run cas: or put the .bac file in the right directory (abcdir), then run prb:xchase --- .dsk Rename the image to mo0 Put the image in abcdisk run xchase or Rename the image to mo0 Put the image in Run abc80 -Dd run xchase -------------------------------- Use ABC80Win. Attach .dsk image load"xchase" run --------------------------------------------------------- ### Luxor ABC 800 Use the ABC80SIM emulator (https://www.abc80.org/pub/abc80sim/, https://git.zytor.com/abc80/abc80sim.git/) .bac abc80 --abc802 --memfile program.bac Then "run mem:" .dsk Rename the image to mo0 Put the image in abcdisk run xchase or Rename the image to mo0 Put the image in Run abc80 -Dd run xchase Use ABC80Win Attach .dsk image load"xchase" run --------------------------------------------------------- ### LVIV/LVOV Use https://web.archive.org/web/20201215185635/https://github.com/izhaks/PK01LvovEmulator/releases/tag/v1.4 --------------------------------------------------------- ### M100 / Olivetti M10 / KC85 / PC8201 .CO file can be loaded into VirtualT emulator through "File > Load file from HD" menu item. Once the program is in memory, enter BASIC and give the following command: CLEAR 0,49999 now the program can be loaded, either via the BASIC command RUNM "A.CO or by pressing F8 to get back to the menu and choosing it with the cursors. --------------------------------------------------------- ### Memotech MTX 500 and 512 Use Bill's MEMU (http://www.primrosebank.net/computers/mtx/emulators/Bills_MEMU_ds.htm) memu -tape-overwrite -vid-win-big -snd-portaudio Type: LO."" Then: RUN --- Place the .mtx binary into the directory "tapes" Use memu-cfg.exe F11 to enter the menu Select MTX model if necessary (MTX500 or MTX512) Select tape -> Choose the .mtx binary Restart MTX500 binary on MTX512 POKE 64122,0 NEW LOAD"" RUN MTX500 binary on MTX500 or MTX 512 binary n MTX512 LOAD"" RUN Use the MESS 0.118 emulator Rename FULL_MTX.mtx to FULL and place it in the same folder as the Mess emulator In Basic do: LOAD"FULL" RUN ----------------------------------------------------------- ### MITS Altair 8800 Use http://www.classiccmp.org/altair32/ Switch it ON Load the .bin y File -> Read Image File -> Select File -> Address: $0000 Click on STOP/RUN ----------------------------------------------------------- ### MITSUBISHI MULTI 8 Use Takeda emulator Type "MON" Then "R" Select tape file with CMT -> Play -> Select file Type "GC000" ----------------------------------------------------------- ### MICROBEE (1) .WAV files (1a) Use Mame/Mess_ For example with: mbeepc85 -window -uimodekey DEL -cass c:\Retro\CROSS-LIB\build\.WAV Type B to enter BASIC Type LOAD Go to Mame/Mess menu to control TAPE and select PLAY --- (1b) Use UBEE512 Install UBEE512 (run script, copy roms into rom folder) Select UBEE512 icon and select properties to add " ic" to the command Run UBEE512 C:\Emulation\Computers\ubee512\ubee512.exe ic --tapei="a.wav" Type LOAD Right click to select TAPE to start loading the tape Type RUN ----------------------------------------------------------- ### MICRO (MICROBOARD SYSTEM) Use Emma 02 emulator. Select RCA -> Microboard System CARD2 -> 128 6x8 characters CARD1 -> RAM U20 -> binary START ----------------- (2) .BEE files Use Nanowasp emulator: http://nanowasp.org/ Click on TAPE to select the .BEE file to insert the file in the list of programs Click on the selected file to insert in the tape player Type LOADM ----------------------------------------------------------- ### MIKRO-80 Use E3000 emulator http://www.emulator3000.org/e3.htm Select the binary to load and run it. ----------------------------------------------------------- ### MSX Use BlueMSX Attach image. Run bload"cas:",r Or use MAME For example mame.exe canonv20 -window -uimodekey DEL -cart1 c:\Retro\CROSS-LIB\build\Xhorde_msx_32k.rom -skip_gameinfo ----------------------------------------------------------- ### NICHIBUTSU MY VISION Use Mame emulator e.g., mame64.exe myvision -window -uimodekey DEL Attach the .rom image file as a cartridge ----------------------------------------------------------- ### NASCOM Use Virtual-Nascom (http://repo.or.cz/w/virtual-nascom.git) Type virtualnascom [.nas file] Once the monitor is running, enter “E 1000” ----------------------------------------------------------- ### NEC PC-6001 Use Virtual Nec Trek Select 2 pages at start-up Type "cload" Select cassette image Type "run" --------------------------------------------------------- ### Nintendo NES / Famicom Use FCEUX (https://tasvideos.github.io/fceux/web/home.html) Alternatively Use mednafen and run the following command: mednafen.exe -fs 1 FULL_nes.nes --------------------------------------------------------- ### Ohio Scientific C1P Start the WinOSI executable (http://osi.marks-lab.com/) Under "Options" select "System Configuration...". Select "OSI C1P / Superboard II (600 BOard)" as machine type. On the "System ROMs" tab under "Specify ROM Type" select SYN600. Press "OK" Under "File" select "Attach Serial Input File...". Select the file "FULL_osic1p.c1p". In the emulator window you should see the "D/C/W/M" prompt. Press "M" to run the monitor. You then should see the "0000 00" prompt of the machine monitor. Press "l" (lowercase L). This will load the program and start it. Memory configs in WinOSI Open Osi.ini 32K -> RAMTOP=0x7FFF 8k _> RAMTOP=0x1FFF ------------------------------------------------------------- ### Olivetti M20 Use Mame You need to attach the floppy image mame64.exe m20 -window -flop1 c:\Retro\CROSS-CHASE\build\FULL_m20_buffered.img At the prompt run with aout.cmd --------------------------------------------------------- ### Sanyo PHC-25 Use https://github.com/hitchhikr/phc25 Screen -> 1 (to get more available memory) cload File->Read tape options->Read tape file->(select file) run ---------------------------------------------------------- ### Senio MAP-1010 You need to convert the phc file to a wav file. In order to do this you can use castool: castool convert phc [phc file] [wav output file] Use TAKEDA emulator CLOAD CMT->Play->select file run ---------------------------------------------------------- ### MS-DOS 8086 Use DOSBOX. Map the directory with the .COM binaries to a drive (e.g., C:) Move to C: Type the name of the .COM file ---------------------------------------------------------- ### MS-DOS 386 Use DOSBOX. Map the directory with the .EXE binaries to a drive (e.g., C:) Move to C: You need CWSDPMI Run: CWSDPMI -p -s Type the name of the .EXE file ------------------------------------------------------------ ### TESLA ONDRA VILI Use Mame emulator with the ondrav target e.g., mame64.exe ondrav -window -uimodekey DEL Press ENTER Attach .wav image as tape Start tape to load and autostart the game ------------------------------------------------------------ ### ORIC 1 / ORIC ATMOS Use the Oricutron emulator (https://github.com/pete-gordon/oricutron) Attach the image. Run CLOAD"" ------------------------------------------------------------ ### ORIC TELESTRAT Use the modified version of Oricutron emulator: http://orix.oric.org/download/ Use the instructions on the link above to boot Orix operating system Rename the binary file to a short name with no extension Copy it into sdcard/bin Run the binary by typing its name ------------------------------------------------------------ ### OSCA Use the OSCA emulator (http://www.basoft.co.uk/wordpress/emulation/computer-system-emulation/v6z80p/osca-emulator/) Use WinImage to inject the .exe binary into a working .img file Edit the config.txt to make it point to the modified .img file Run by typing the executable name (whitout .exe) ------------------------------------------------------------ ### OZ Launch vOZ Drag oz750.rom on the emulator's windows choose the memory size (256K in my case) press ENTER (CTRL key) to exit the display settings press ENTER (CTRL key) again (optional) Press F6 for brighter display Drag .wzd on the emulator's windows Choose the program 'slot' from the emulator's dialog window Press F5 to select the custom program ----------------------------------------------------------- ### NAMCO PUCMAN (PACMAN) Use the Mame emulator You need the puckman.zip rom file. You have to replace puckmod with the one generated by CrossLib Makefile. Run Mame: mame64.exe puckmod -window -uimodekey DEL ----------------------------------------------------------- ### PASOPIA 7 Use Takeda emulator (http://takeda-toshiya.my.coocan.jp/) with the Mame romset Attach the disk image Reset to start the game ----------------------------------------------------------- ### PC 8088/8086 Use qemu-system-i386 to start a bare metal PC 8088/8086 and attach the floppy image qemu-system-i386.exe c:\Retro\CROSS-CHASE\build\FULL_pc8086_turn_based.img --------------------------------------------------------- ### PCE Use mednafen and run the following command: mednafen.exe -fs 1 TINY_pce.pce --------------------------------------------------------- ### Pecom 32/64 Use EMMA 02 (https://www.emma02.hobby-site.com/download.html) Select Pecom tab Click on START (window may hide the option -> make it bigger) Click on LOAD Go to the directory with the .hex file Select HEX Files Chose the .hex file Type RUN [equivalent to CALL(&0201)] --------------------------------------------------------- ### Hanimex Pencil II Use Mame emulator. Run mame64.exe pencil2 -window -uimodekey DEL Attach the ROM image ----------------------------------------------------------- ### NEC PC 8801 Use the M88 emulator: https://illusioncity.net/PC88/m88eng.rar BIOS: https://archive.org/details/m-88.7z Type: MON R Select the tape file G8A00 to start ----------------------------------------------------------- ### PETERS PLUS SPRINTER Use SPRINT (http://web.archive.org/web/20040905083237/http://shaos.ru/nedopc/sprinter/sprint.htm) run with something like SPRINTGW.EXE c:\Retro\CROSS-CHASE\build\FULL_pps.exe --------------------------------------------------------- ### Philips 2000 Use m2000-allegro5 emulator Place the game file into the same directory as the m2000.exe and rename it into p2000.cas In BASIC execute: CLOAD RUN --------------------------------------------------------- ### Philips VG 5000 Type CLOAD Select the game file ---------------------------------------------------------- ### PMD-85 Use Borik's PMD-85 Emulator (https://pmd85.borik.net/wiki/Emulator) Select the .ptp image file. Run MGLD 00 Press the flash button. Click on the play button. JUMP 0000 ---------------------------------------------------------- ### PRIMO Use Mame e.g., mame64.exe primoa64 -window -uimodekey DEL Use Quickload to load the .pp image ---------------------------------------------------------- ### Robotron KC 85/2, 85/3, 85/4, 85/5, HC 900 Use the JKCEMU emulator. Click on "Extra" tab. Choose "Einstellungen" Select your target (e.g., KC 85/5) Press "Uebernehmen" and then "Schliessen" Load file with "Datei" -> "Laden" -> Select File -> "Starten" ---------------------------------------------------------- ### Robotron Z 1013 Use J1013 emulator (http://www.jens-mueller.org/j1013/download.html): 1. Press Datei->Laden 2. Select binary 3. Press Starten --------------------------------------------------------- ### Robotron Z 9001 Use the JKCEMU emulator. Click on the "Extra" tab. Choose "Einstellungen" Select Z9001 Press "Uebernehmen" Press "Schliessen" Load file with "Datei"->"Laden" Select file Click "Starten" ------------------------------------------------------------- ### S-OS Use sword05 (http://www.retropc.net/ohishi/s-os/sword05.lzh) Place the file (a.obj) in the same directory as the emulator (no space)La.obj (no space)J 3000 ----------------------------------------------------------- ### SAMSUNG SPC-1000 Use ESPC emulator Type "LOAD" CMT -> Play -> Select file CMT -> Play button --------------------------------------------------------- ### SEGA MSTER SYSTEM Use Kega Fusion Emulator (https://segaretro.org/Kega_Fusion) File -> Load MasterSystem ROM -> Select .sms file or Use Emulitious (https://emulicious.net/) File -> Open File -> Select .sms file --------------------------------------------------------- ### SEGA SC 3000 Use the MESS emulator Run mess with mess64.exe sc3000 -cart1 .sc -cass1 FULL_sc3000_32k.wav Inside the emulator type: LOAD RUN --------------------------------------------------------- ### Sharp MZ Use mz800Emu Press C Select .mzf file ---------------------------------------------------------- ### SHARP X1 Use Takeda X1 emulator (you need the roms) 1. Start the emulator. 2. Click on FD0. 3. Select the disk image ----------------------------------------------------------- ### SHARP PC G850 Use g800win32 emulator (http://ver0.sakura.ne.jp/pc/) g800.exe -machine=200 c:\Retro\CROSS-CHASE\build\FULL_g800_turn_based.ihx Type "G100" ----------------------------------------------------------- ### ZX SPECTRUM NEXT Use CSPECT emulator (http://www.cspect.org/) Press F2 Select .nex binary to load and start it ------------------------------------------------------------- ### Sinclair QL Use QPC https://www.kilgus.net/qpc/ Rename the binary to something short, e.g., xchase Type the following commands to add the necessary meta-data and have the binary inside the emulated Sinclair QL " f$=“dos1_“ l=FLEN(\f$) mem=RESPR(l) LBYTES f$,mem SEXEC ram1_,mem,l, " (*) dataspace has to be big enough, i.e., bigger than what the compiler shows as output. A possible value is 4096. Now the ram1 disk has the executable binary inside the QL. Select ram1 and then the game to start ----------------------------------------------------------- ### SONY SMC-77 Use Takeda emulator with Mame roms. Insert the boot disk into the first floppy drive and the game disk in the second one B: Run the binary inside B: (no extension) ----------------------------------------------------------- ### SORD M5 Use MESS/MAME You need the basic-i rom somewhere in your file system You could run: Mess 0.191 ROM: mess64.exe m5 -window -ramsize 36k -cart1 c:\Retro\CROSS-LIB\build\Xbomber_m5_rom.rom |Tape: mess64.exe m5 -window -ramsize 36k -cart1 basic-i\basic-i.rom -cass c:\Retro\CROSS-LIB\build\Xbomber_m5.cas or mess64.exe m5 -uimodekey DEL -cart1 basic-i\basic-i.rom -ramsize 36k -window You need to insert the tape Type TAPE Press ESC --------------------------------------------------------- ### SUPERVISION Use Potator (https://emulationrealm.net/downloads/file/235-potator) Use arrows for movements and C for fire --------------------------------------------------------- ### SONY SV 8000 Use the Mame emulator. e.g., mame64.exe sv8000 -window -uimodekey DEL Attach the .rom cartridge image to start the game. --------------------------------------------------------- ### DICK SMITH SUPER 80 Use the Mame emulator e.g., mame64.exe super80 -window -uimodekey DEL Use quickload to load and start the game --------------------------------------------------------- ### DICK SMITH SUPER 80R Use the Mame emulator e.g., mame64.exe super80r -window -uimodekey DEL Ues quickload to load and start the game ----------------------------------------------------------- ### TATUNG EINSTEIN With +cpm -subtype=einstein a .dsk will be produced that can be used in combination with dos80.dsk. -flop1 dos80.dsk -flop2 [created image] Once booted, type: 1: APP.COM ---------- USE EDIP1 1e (http://www.einstein.talktalk.net/edip.html?showpage=true) to insert the .COM file into a disk image: 0. Rename your file such that no special characters (no underscore) are present 1. Run EDIP 1e 2. Select DOS80.DSK 3. Click on CREATE BLANK -> Name your disk image 4. Select DOS TATUNG XTAL... 5. Press SELECT -> Select File 6. Press SELECT -> Cancel -> Quit Use MAME/MESS: 1. mame64.exe einstein -window -uimodekey DEL -flop1 c:\Emulation\Mame\EDIP1e\XCHASE.DSK 2. run the .COM file by typing its name --------------------------------------------------------- ### Telmac TMC-600 Use EMMA 02 (https://www.emma02.hobby-site.com/download.html) Select telmac tab. Select TMC-600 Click on START (window may hide the option -> make it bigger) Click on LOAD Go to the directory with the .hex file Select HEX Files Chose the .hex file Type RUN [equivalent to CALL(@6300)] ------------------------------------------------------------- ### Thomson MO5/MO6/Prodest PC 128 - Tape Use DCMOTO Select Mo5 or Mo6 or Prodest PC 128 BASIC 1.0 Attach .k7 image Type LOADM EXEC BASIC 128 (Mo6/Prodest PC 128) Attach .k7 imloadage Type LOADM"CASS:",&H600 EXEC or LOADM"CASS:",&H600,R ------------------------------------------------------------- ### Thomson TO7/TO8/TO9 - Disk .sap image Use DCMOTO Select T08D Attach .sap image Type loadm "XLIB.bin" exec In order to load at an address lower than $A000 by bytes, you need to use CLEAR: CLEAR ,,,&h8000 loadm "XLIB.bin", exec Example 1: Cross Snake may need to be loaded at a lower start address than $A000, so you need to do: CLEAR ,,,&h8000 loadm "XLIB.bin",-1024 Example 2: Cross Shoot may need even more memory than Cross Snake. So you need to do: CLEAR ,,,&H7FFF LOADM"0:FULL_TO7.bin",-&HA000 EXEC ----------------------------------------------------------- ### TI-82 Use the VTI emulator 1. Load the Crash Shell into the calculator - 2nd + x,T,\theta (LINK) - Select Receive - Drop Crash .82b - 2ND + ON (OFF) - ON (+ SAVE STATE to start from this point next time) 2. Load the game - 2nd + x,T,\theta (LINK) - Select Receive - Drop .82p file - 2ND + ON (OFF) - ON (+ SAVE STATE to start from this point next time) 3. Run the game - PRGM - Select Crash (NOT the game) - Select the game ----------------------------------------------------------- ### TI-83 Use the VTI emulator 1. Load the Ion Shell into the calculator - 2nd + x,T,\theta,\pi (LINK) - Select Receive - Drop .83b Ion 1.5 or 1.6 file - 2ND + ON (OFF) - ON (+ SAVE STATE to start from this point next time) 2. Load the game - 2nd + x,T,\theta,\pi (LINK) - Select Receive - Drop .83p file - 2ND + ON (OFF) - ON (+ SAVE STATE to start from this point next time) 3. Run the "a" application - PRGM - Select A 4. Run the game - PRGM - Select Ion (NOT the game) - Select the game Alternative load instructions: - Use VTI 2.5 beta 4 or beta 5. - Select TI83 (v1.07) - Reset calculator (MEM CLEARED) - 2nd, LINK, RECEIVE (do not press ENTER, yet) - Look for ION.83G (memory dump) - Press ENTER on ION - Drag the file onto VTI - Transmission error. Retry. - PRGM -> ION (see prgmION) -> press Enter (INSTALLED) - Compile your program with a name different from default abc80 - Transfer program as done with ION.83G - Start the shell and program ----------------------------------------------------------- ### TI-85 Use the VTI emulator 1. Load the Rigel Shell into the calculator - 2nd + X-Var (LINK) + F2 - Drop Rigel memory backup file - 2ND + ON (OFF) - ON (+ SAVE STATE to start from this point next time) 2. Load the game - 2nd + X-Var (LINK) + F2 - Drop the .85s game binary 3. Run the game - Custom + F1 (to select Rigel) - Select the game Alternative instructions: - Install the emulator program VTI. - Download the TI85.ROM and put it into VTI directory. - Download and extract Rigel Shell. - Start VTI. Select TI85. - Click 2nd Link, then press F2 to receive. - Right Mouse click and choose Send File to VTI. Choose the file rigel.85b from the Backups directory of the Rigel Shell. - Quickly press F1 to confirm Warning about Memory backup, before transmission error message. - Click 2nd OFF On, to init the Rigel Shell. - Click 2nd Link, then press F2 to receive. - Right Mouse click and choose Send File to VTI. Select spice.85s. - Click 2nd OFF On, to init the Rigel Shell. - Click Custom, then F1, and select SPICE program. QUICK - Load Rigel savestate - Click 2nd OFF On - Click 2nd Link, then press F2 to receive. - Right Mouse click and choose Send File to VTI. Choose the .85s file - Click 2nd OFF On, to init the Rigel Shell. - Click Custom, then F1, and select A program. ----------------------------------------------------------- ### TI-86 Use Wabbitemu You can load the .86p files by directly dragging them on VTI, no need to go through the 'link" sequence, they'll be pushed in the TI86 memory. - So, first drag InstLASM.86p, - then enter: `asm(InstLASM)` - press `F5` and confirm the reset process - once you get the message "MEM CLEARED", - drag LargeLd.86p on the calculator. - Now you can upload *ONE SINGLE* "big" executable (built with the LASM startup option), just drag it on the calculator. - To run: asm(LargeLd) ----------------------------------------------------------- ### TI99/4A Use Classic99 (http://www.harmlesslion.com/cgi-bin/onesoft.cgi?1). EA5 files are loaded as follows: - Have one of the disks, e.g DSK1., point to the directory that contains the EA5 file: DSK1-> Set DSK1 -> Disk Type: FIAD - Go to Cartridge->Apps->Editor/Assembler - Press 2 to enter the Editor/Assembler - Press 5 to run a file - Enter DSK1.(file name)1 Example: DSK1.XCHASE1 -> loads Cross Chase ----------------------------------------------------------- ### TIKI-100 Use TIKI-100_emul (http://www.djupdal.org/tiki/emulator/) Attach the image and type: a folowed by enter. ---------------------------------------------------------- ### TRS-80 MC-10 Use VMC-10 emulator (https://github.com/PhoenixInteractiveNL/emuDownloadCenter/wiki/Emulator-virtualmc10#downloads) Enable 16k (at least): Configure -> Memory -> 16k Run: CLOADM Load the .c10 file: File->Play cassette file Run: EXEC ---------------------------------------------------------- ### TRS-80 Model 1/2/4 .cas version: If you use trs80gp-1.8 Type enter to get to the console Use load option If you use trs32 .cas version: Use trs32 emulator. Type L+enter at Cass? Type enter at Memory? Type System Attach .cas Show cassette Type ../BUI Press PLAY Wait... Press / + enter to start .cmd version: Get to BASIC prompt File->Run-> Select .cmd file ---------------------------------------------------------- ### VIDEOTON TVC Use WinTVC emulator (http://gaia.atilia.eu/downloads/) Start the emulator and wait until the BASIC prompt Load the .cas file with "CAS direkt betoeltese" Type "run" to start ----------------------------------------------------------- ### VECTOR 06C Use E3000 emulator http://www.emulator3000.org/e3.htm Select the binary to load and run it. ---------------------------------------------------------- ### VTECH Laser 500 Use the online Laser500emu (https://nippur72.github.io/laser500emu/). Drop the .bin or .wav file onto the browser window ---------------------------------------------------------- ### Z80 TV GAME Use Takeda emulator with Mame roms Start the game: Cart -> Insert -> Select .rom image file Input: Host -> Input -> Joystick1 -> Redefine keys ================================================ FILE: docs/HOW_TO_LOAD_THE_GAME_ON_REAL_HARDWARE.md ================================================ ## Loading the game into a real vintage system The loading procedure depends on the systems and the format used to store the game. - Most vintage systems used cassette players. For such systems the .wav or any other reproducible format (e.g., mp3) is the easiest solution because it can be played by a PC or smartphone connected to the audio in of the vintage system. If a different format is produced, we suggest the use of a tool to convert into a playable. If the emulator supports the creation of .wav files, one way to do this is to use the `save` or equivalent BASIC command. - Several vintage systems use floppy disks. Some hardware solutions (e.g., XUM1541 cables for the Commodore 8-bit series) can be used to transfer disk images into real disks. Some other hardware solutions (SD2IEC for the Commodore 8-bit series, SI2SD for the Atari 8-bit series) allow the use disk images by a vintage system. - Some other systems use cartridges. Cartridge images can be store into EPROMs or can be used directly by some special hardware (e.g., EasyFlash for the Commodore 64). ================================================ FILE: docs/INSTALL.md ================================================ ## NO LOCAL INSTALLATION Having a Dockerfile and a devcontainer configuration means that anyone with a GitHub account can just clone this repository and run it with GitHub CodeSpaces (free of charge with some restrictions): https://github.com/codespaces. ------------------------------------------- ## LOCAL DOKCER WITH A PRE-BUILD DOCKER IMAGE You can pull and run the latest pre-build image with ``` docker run -it -v {cross-lib_location}:/usr/src/cross-lib ghcr.io/cross-lib/devcontainers/base:1.0.5-ubuntu ``` where {cross-lib_location} could be something like: *c:\sources\cross-lib*. Once in the docker container, you can enter the *src* directory with *cd /usr/src/cross-lib/src* and use the *xl* script, e.g., *./xl stinger cc65*. Or just pull the pre-build image with ``` docker pull ghcr.io/cross-lib/devcontainers/base:1.0.5-ubuntu ``` An older image can be pulled here ``` docker pull fabriziocaruso:crosslib:0.1 ``` and follow the same instructions as for docker image built from a dockerfile. ------------------------------------------- ## LOCAL DOCKER WITH THE DOCKERFILE The dockerized version of Cross-Lib can used by - cloning this repository into a directory (let us refer to it as ``); - building the docker image that contains the dependencies by running the command ```docker build . -t crosslib:```; from the `/CROSS-LIB/.devcontainer` directory. - running the docker container and mapping the cloned repository into a directory (e.g. `/workspaces/crosslib`) in the container with ```docker run -it -v :/workspaces/crosslib --env-file /.devcontainer/container.env crosslib: bash``` - (once in the docker container) by entering `workspaces/crosslib/src` and running `xl` commands. ------------------------------------------- ## LOCAL NON-DOCKER INSTALLATION - PREREQUISITES Cross-Lib is meant to be used under a POSIX environment (Windows+Cygwin, Linux, etc.). In order to be able to build the games and tests on all `default targets` you need: - GNU `make` - `python` (2.x or 3.x) - `gcc` and `ncurses` (necessary only for native builds) - cross-compilers (necessary to build for vintage targets) - `java` only to build disk images for the Apple//e, Apple\]\[ and the Agat 7/9 targets - `perl` only to build cassette images for the CoCo 1/2 and Dragon 32/64 targets For the compilers to work, you may need to add the location of their binaries to the `$PATH` environment variable and to add the execution rights to those binaries. If the compiler's binary cannot be found, you may have to set their paths in: `src\makefiles.common\auxiliary/Makefile_compilers`, e.g., `Z88DK_PATH`, `LCC1802_PATH`, etc.. For more details on the prerequisites we refer to: https://github.com/Fabrizio-Caruso/CROSS-LIB/blob/master/docs/PREREQUISITES.md ------------------------------------------- ## LOCAL NON-DOCKER INSTALLATION OF THE TOOL-CHAIN The tool-chain Cross-Lib can be installed on different POSIX-compliant environments. It has been tested on: - Windows (7, 10) + `Cygwin` - Windows Subsystem for Linux - MacOS X - Linux Ubuntu 18.04 under the Windows Subsystem - Linux (KUbuntu 18.04, Lubuntu 21.10) - FreeBSD 13.0 Cross-Lib itself does not require any installation. It is just a source library and scripts that is ready to be used as is, by just downloading or cloning the content of this repository. For example you can do it by: ``` git clone https://github.com/Fabrizio-Caruso/CROSS-LIB.git ``` In order to use Cross-Lib you will need to install the prerequisites described in the previous section. The way these prerequisites are installed vary depending on the environment. ### Under Windows + Cygwin For Windows + Cygwin the tested and verified installation procedure uses: - `Cygwin` setup to install `gcc`, `make`, `python`, `java` - `CC65` is installed under Windows by just downloading and decompressing its snapshot (https://sourceforge.net/projects/cc65/). - `Z88DK` is installed under Windows by downloading and decompressing its latest nightly build (http://nightly.z88dk.org/). - `CMOC` and `ACK` are installed from sources. Look at the installation procedure under Linux for the details. - `LCC1802` is installed under Windows by simply decompressing its released binary version (https://github.com/bill2009/lcc1802/releases). ### Under Linux For Linux (native or under the Windows Subsystem), the tested and verified procedure both standard repositories and installation from sources. A detailed procedure for recent Ubuntu distributions is described here: https://github.com/Fabrizio-Caruso/CROSS-LIB/blob/master/docs/LINUX_SETUP.md ### ACKNOWLEDGEMENTS Thanks to Alex Thissen, a version of Cross-Lib with (Z88DK, CC65, CMOC and native compilers) is available as a Docker image (to be built by using the provided Dockerfile) with a devcontainer configuration. ================================================ FILE: docs/LICENCE.txt ================================================ This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for non-commercial applications, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. ================================================ FILE: docs/LINUX_SETUP.md ================================================ # CROSS-LIB SET-UP UNDER LINUX We give here the procedure to install Cross-Lib and its dependencies under Linux. In particular this procedure is the one I have used under LUBUNTU 21.10. On other distributions the same procedure or a similar one can be used depending on how packages are handled. Even under Windows with Cygwin many of these steps are similar but the way packages are installed is very different (i.e., using Cygwin's `setup.exe`). We do not cover *all* supported compilers here. We only fully covered the fully supported ones under Linux. In particular we describe how to install: - `GCC` for native compilation - `CC65` for MOS 6502-based targets - `Z88DK` for Zilog 80, Intel 8080-based targets - `CMOC` for Motorola 6809-based targets We give some information on how to install some experimentally supported compilers: - `ACK` for Intel 8088-based targets and other targets (partially supported and currently only used for one game) - `LCC1802` for RCA COSMAC 1802-based targets (with only experimental support under Linux) ----------------------------- ## Python Installation The whole tool-chain uses heavily Python scripts. So we need Python to do anything. Python 2.7 or Python 3.X can used. Under any recent Ubuntu distribution, Python is trivially installed with: ``` sudo apt install python ``` ----------------------------- ## Enable builds for the host Native builds can be performed as long as an ANSI C compiler and the `ncurses` libraries are installed. By default Cross-Lib expects `gcc` to be the native compiler. A different one can be used (including a non-native one, which would defeat the purpose of a native compiler). In order to select a different compiler edit the `NATIVE_CC` variable in `src/makefiles.common/auxiliary/Makefile.compilers`. The `gcc` compiler may be pre-installed. In not present, `gcc` is trivially installed with ``` sudo apt install gcc ``` The `ncurses` libraries can be installed with: ``` sudo apt install libncurses5-dev libncursesw5-dev ``` The native target is the default target for the script command `xl build`. This makes it possible to try and debug the code natively if desired. No emulator and no cross-compiler is necessary to start using Cross-Lib. Currently the native target is just an ncurses-enabled terminal target. So no graphics. Only ASCII characters will be displayed. So you can use Cross-Lib to build old and new games and to create new ones by using the `xl` command and by providing no target or equivalently the `ncurses` target. To get started you can build some of the games by using `xl build [name of the game or test]`. Example: The following commands will be three games for the native target: ``` xl build bomber xl build snake xl build horde ``` ----------------------------- ## Enable builds for MOS 6502-based targets Nearly all MOS 6502-based targets supported by Cross-Lib rely on `CC65`. Very few others experimental targets use `VBCC`. On very recent Ubuntu distributions we can install `CC65` by just: ``` sudo apt install cc65 ``` In order to build disk images for the `Apple][` and `Apple//e` targets we need `java`, which we can install with: ``` sudo apt install openjdk-17-jre-headless ``` ----------------------------- ## Enable builds for Motorola 6809-based targets Cross-Lib relies on `CMOC` for all its supported Motorola 6809-targets. In order to install `CMOC` you can use build from its source code and follow its simple installation procedure. First of all you need to download `LWTOOLS` (the linker) from http://www.lwtools.ca/, and install it with ``` make sudo make install ``` Then you download `CMOC`'s source code from http://perso.b2b2c.ca/~sarrazip/dev/cmoc.html and install it with: ``` apt install bison apt install flex configure make sudo make install ``` ---------------------- ## Enable builds for targets based on Zilog 80 and Intel 8080 Cross-Lib relies on the `Z88DK` dev-kit for all its targets based on the Zilog 80, Intel 8080/5, and GBZ80. `Z88DK` contains two separate cross-compilers: `SCCZ80` and `ZSDCC`. Using `SCCZ80` is enough to build most Cross-Lib targets. So the installation of `ZSDCC` is not strictly necessary to build new games. Here we describe how to download and install `Z88DK` from its source code. ### Z88DK dependencies In order to be able to compile the source you have to install the following packages by running `apt install [list of packages]`: ``` apt install build-essential dos2unix libboost-all-dev texinfo texi2html libxml2-dev subversion bison flex zlib1g-dev m4 ``` ### Installation from source code In order to download `Z88DK`'s source code you can run: ``` wget http://nightly.z88dk.org/z88dk-latest.tgz ``` and then decompress it with: ``` tar -xzf z88dk-latest.tgz ``` You can now start the build process by using the `build.sh` script: ``` cd z88dk export BUILD_SDCC=1 chmod 777 build.sh ./build.sh ``` In order to finalize the installation and to be able to use Z88DK from any location you need to set the following environment variables: ``` export PATH=${PATH}:${HOME}/z88dk/bin export ZCCCFG=${HOME}/z88dk/lib/config ``` ---------------------------------------------------------- ## Enable builds for RCA COSMAC 1802-based targets The build process for RCA COSMAC 1802-based targets relies on the `LCC1802` compiler. This has not been tested, yet, under Linux. Its installation procedure under Linux is described in: https://github.com/bill2009/lcc1802 ---------------------------------------------------------- ## Enable builds for Intel 8088-based targets In order to use Cross-Lib for targets based on the Intel 8088 and some other 16 and 32-bit vintage targets you can use `ACK`. Support for these targets is currently only experimental. `ACK` can be downloaded from https://github.com/davidgiven/ack. It depends only on `flex` and `yacc` or `bison` and it is installed with: ``` make sudo make install ``` ================================================ FILE: docs/MSDOS_big_banging.txt ================================================ Skip to content Chat history You said: How can I produce sounds with the speaker by big banging in msdos 8086? ChatGPT said: On an 8086 under MS-DOS you can produce sound with the PC speaker in two different ways: Correct way (using the PIT timer, channel 2) – stable tone True “bit banging” – manually toggling the speaker line for crude square waves Below are both methods with full explanations and sample 8086 code. ✅ 1. REAL MODE / MS-DOS PC SPEAKER USING PIT (recommended) The PC speaker is controlled by: Function Port PIT channel 2 control 43h PIT channel 2 data 42h Speaker gate + data enable 61h → Steps to play a tone: Program PIT channel 2 for square-wave mode. Load divisor into port 42h (frequency = 1,193,180 / divisor). Enable speaker bit 0 and 1 in port 61h. Delay. Turn off speaker. Example: 1 kHz tone ; ====== Play 1 kHz tone ====== ; PIT clock = 1,193,180 Hz ; divisor = 1193180 / 1000 ≈ 1193 = 04A9h mov al, 0B6h ; Channel 2, lobyte/hibyte, mode 3 (square wave) out 43h, al mov ax, 1193 out 42h, al ; Low byte mov al, ah out 42h, al ; High byte ; Enable speaker (bits 0 and 1 of port 61h) in al, 61h or al, 03h out 61h, al ; ---- Delay loop ---- mov cx, 0FFFFh .delay: loop .delay ; Disable speaker in al, 61h and al, 0FCh ; clear bits 0 and 1 out 61h, al This produces a clean, stable square wave. ✅ 2. TRUE “BIT BANGING” (no PIT) This is closer to the literal meaning of bit-banging: you manually drive the speaker by flipping bit 1 of port 61h at the desired rate. The PC speaker is connected to bit 1 (value 2) of port 61h. → Principle Flip bit 1 rapidly: 0 → 1 → 0 → 1 → 0 → … The switching speed = frequency × 2. So for a 1 kHz tone, toggle 2000 times per second. Example: crude software-generated square wave ; ====== Bit-banged speaker tone ====== in al, 61h or al, 01h ; enable speaker gate out 61h, al mov bx, 2000 ; number of toggles (duration) bitloop: in al, 61h xor al, 02h ; toggle speaker data bit (bit 1) out 61h, al ; small delay to control pitch mov cx, 80 delay: loop delay dec bx jnz bitloop ; turn off speaker in al, 61h and al, 0FCh out 61h, al This method: gives you full control but tone quality is rough pitch depends on CPU speed (so unstable on fast machines or emulators) Choosing a method Method Pros Cons PIT (hardware) stable, accurate, classic PC speaker tone slightly more code Bit banging unlimited waveforms, educational, works without PIT crude, speed-dependent If you want, I can also provide: A macro-based sound library C-callable 8086 routines A bit-banged melody player A PIT-based music routine using int 08h (timer interrupts) ChatGPT can make mistakes. Check important info. See Cookie Preferences. ================================================ FILE: docs/PREREQUISITES.md ================================================ ## Prerequisites - [Non-UNIX only] Install a POSIX environment if necessary, e.g., Cygwin. - Install `make` in your environment. - Install `python` (2.x or 3.x) - Install the required cross-compilers - [Only for some compilers] Make sure they are either installed as described in the Makefile variables: `Z88DK_PATH`, `CC65_PATH`, `LCC1802_PATH`, etc. or set these variables accordingly. - [Z88DK-only] Select the optimization level in Makefile by setting the variables: `SCZZ80_OPTS` (`-O3` for highest optimizations), `ZSDCC_OPTS` (`-SO3` for high optimizations; `-SO3 --max-allocs-per-node200000` for highest and extremely slow optimizations). - [Native builds only] Install `gcc` and `ncurses` - [Only to have disk images for the Apple //e and Apple\]\[] Install `java` ================================================ FILE: docs/PRESENTAZIONE_ITA/Documenti_on_line.txt ================================================ CROSS-LIB breve presentazione in italiano: https://github.com/Fabrizio-Caruso/CROSS-LIB/blob/master/docs/presentazione.md LISTA PARZIALE DEI SISTEMI SUPPORTATI: https://github.com/Fabrizio-Caruso/CROSS-LIB/blob/master/docs/STATUS.md DESCRIZIONE DEI GIOCHI (in italino): https://github.com/Fabrizio-Caruso/CROSS-LIB/blob/master/docs/GIOCHI.md CROSS-LIB pagina principale (in inglese) : https://github.com/Fabrizio-Caruso/CROSS-LIB CROSS-LIB presentazione lunga (in inglese) con slides: https://github.com/Fabrizio-Caruso/CROSS-LIB/blob/master/docs/CrossLib.odp ================================================ FILE: docs/PRESENTAZIONE_ITA/Giochi/EMULATORI_DA_USARE.txt ================================================ ATARI 8-bit: Altirra Commodore 64: Vice Commodore Vic 20 + 8k: Vice (settare memoria a +8k) Game Boy: Visual Boy Advance Emulator Game Gear: Emulicious (ULTIMA versione) Sega Master System: Emulicious (ULTIMA versione) Sinclair ZX Spectrum: Fuse ================================================ FILE: docs/SNAPSHOTS.md ================================================ ## Snapshots ![MSX](../snapshots/XSnake_MSX2.png) ![Atari](../snapshots/XChase_A8.png) ![CPC](../snapshots/XHorde_CPC.png) ![Atari](../snapshots/XBomber_A8.png) ![SMS](../snapshots/XShoot_sms.png) ![GB](../snapshots/XSnake_GB.png) ![Atari](../snapshots/XHorde_A8.png) ![SMS](../snapshots/XHorde_SMS.png) ================================================ FILE: docs/STATUS.md ================================================ ## STATUS Last update: 2026/03/16 ### 8-BIT targets target name | long target name | working | CPU family | dev-kit | real-time input | graphics | sound | notes --------------------|---------------------------------------------|----------|---------------|---------|-----------------|----------------|---------|----------- *abc80* | Luxor ABC 80 | YES | Zilog 80 | Z88DK | OK | missing | missing | *abc800* | Luxor ABC 800 | YES | Zilog 80 | Z88DK | OK? | missing | missing | *ace* | Jupiter Ace | YES | Zilog 80 | Z88DK | OK | OK | OK | *agat* | Agat-7/9 | YES | MOS 6502 | CC65 | OK | OK | OK | *alphatro* | Alphatronic | YES | Zilog 80 | Z88DK | OK | N/A | missing | *altair8800* | MITS Altair 8800 | YES | Intel 8080 | Z88DK | OK | N/A | N/A | *apple2* | Apple II | YES | MOS 6502 | CC65 | OK | OK | OK | *apple2_z80* | Apple II | YES | Zilog 80 | Z88DK | OK | missing | missing | *apple2enh* | Apple //e | YES | MOS 6502 | CC65 | OK | OK | OK | *aquarius* | Mattel Aquarius | YES | Zilog 80 | Z88DK | OK | N/A | OK | *aquarius plus* | Aquarius Plus | YES | Zilog 80 | Z88DK | OK | OK | OK | *atari5200* | Atari 5200 | YES | MOS 6502 | CC65 | OK | OK | OK | *atari7800* | Atari 7800 | YES | MOS 6502 | CC65 | OK | OK | OK | *atari* | Atari 8-bit (e.g., Atari 800) | YES | MOS 6502 | CC65 | OK | OK | OK | *atari_lynx* | Atari Lynx | YES | MOS 6502 | CC65 | OK | OK | OK | *attache* | Otrona Attache | YES | Zilog 80 | Z88DK | OK | OK | missing | *aussie* | Aussie Byte (Knight 2000) | YES | Zilog 80 | Z88DK | OK | missing | OK | *bbc* | BBC Micro | YES | MOS 6502 | VBCC | OK | OK | OK | *bbcmaster* | BBC Master | YES | MOS 6502 | VBCC | OK | OK | OK | *bic* | BIC/A5105 | YES | Zilog 80 | Z88DK | OK | ? | ? | *bit90* | Bit Corporation BIT 90 | YES | Zilog 80 | Z88DK | OK | OK | missing | PSG SN76489A *bondwell* | Bondwell | YES? | Zilog 80 | Z88DK | OK | ? | ? | *bondwell2* | Bondwell 2 | YES? | Zilog 80 | Z88DK | OK | OK | ? | *c128_8502* | Commodore 128 [8502 CPU] | YES | MOS 6502 | CC65 | OK | OK | OK | GFX in VDC mode *c128* | Commodore 128 [Z80 CPU] | YES | Zilog 80 | Z88DK | OK | OK | OK | GFX with VIC (OK) and VDC (slow) *c16* | Commodore 264 series (16/116/+4) | YES | MOS 6502 | CC65 | OK | OK | OK | *c64* | Commodore 64 | YES | MOS 6502 | CC65 | OK | OK | OK | *c65* | Commodore 65 | ? | MOS 6502 | CC65 | OK? | missing | missing | *cbm510* | Commodore CBM 510 | YES | MOS 6502 | CC65 | OK | missing | missing | *cbm610* | Commodore CBM 610 | YES | MOS 6502 | CC65 | OK | missing | missing | *camputers_lynx* | Camputers Lynx 48k/96k/128k | YES | Zilog 80 | Z88DK | OK | OK | missing | *cidelsa_altair* | Cidelsa Altair arcade board | YES | RCA 1802 | LCC1802 | OK | missing | OK | *cidelsa_destroyer* | Cidelsa Destroyer arcade board | YES | RCA 1802 | LCC1802 | OK | missing | OK | *cidelsa_draco* | Cidelsa Draco arcade board | YES | RCA 1802 | LCC1802 | OK | missing | OK | *coco* | Color Computer 1/2 | YES | Motorola 6809 | CMOC | OK | OK | OK | *coco3* | Color Computer 3 | YES | Motorola 6809 | CMOC | OK | OK | OK | *coleco* | Colecovision | YES | Zilog 80 | Z88DK | OK | OK | missing | PSG SN76489A *coleco_adam* | Colecovision Adam | YES | Zilog 80 | Z88DK | OK | OK | missing | PSG SN76489A *comx* | COMX-35 | YES | RCA 1802 | LCC1802 | OK | OK | OK | *corvette* | Corvette | YES? | Zilog 80 | Z88DK | OK? | OK? | missing | *cpc* | Amstrad CPC | YES | Zilog 80 | Z88DK | OK | OK | OK | *cpm_8080* | CP/M Intel 8080 | YES | Intel 8080 | Z88DK | OK | N/A | N/A | *cpm_z80* | CP/M Z80 with adm3a/vt52/vt100 | YES | Zilog 80 | Z88DK | OK | N/A | N/A | *creativision* | VTech Creativision | YES | MOS 6502 | CC65 | OK | OK | OK | *cx16* | Commander X16 | YES | MOS 6502 | CC65 | OK | OK | OK | *dai* | DAI | YES | Intel 8080 | Z88DK | missing | N/A ? | N/A ? | *dmv* | Decision Mate V | YES | Zilog 80 | Z88DK | OK | ? | ? | *dragon* | Dragon 32/64 | YES | Motorola 6809 | CMOC | OK | OK | OK | *e200* | Sharp PC-E200 | YES | Zilog 80 | Z88DK | OK | missing | missing | *eg2k* | EACA EG2000 Color Genie | YES | Zilog 80 | Z88DK | OK | OK | OK ? | *einstein* | Tatung Einstein TC-01 | YES | Zilog 80 | Z88DK | OK | OK ? | OK ? | PSG AY-3-8910 *einstein256* | Tatung Einstein TC-01 | YES | Zilog 80 | Z88DK | OK | OK ? | OK ? | PSG AY-3-8910 *enterprise* | Enterprise 64/128 | YES | Zilog 80 | Z88DK | missing | missing | missing | *excalibur64* | Excalibur64 | YES | Zilog 80 | Z88DK | OK | N/A ? | N/A ? | *fp1100* | Casio FP-1100 | YES | Zilog 80 | Z88DK | OK | OK | N/A ? | *g815* | Sharp PC-G815 | YES | Zilog 80 | Z88DK | OK | missing | missing | *g850* | Sharp PC-G850 | YES | Zilog 80 | Z88DK | OK | missing | missing | *gal* | Galaksija | YES | Zilog 80 | Z88DK | OK | N/A | N/A | *gal_plus* | Galaksija Plus | YES | Zilog 80 | Z88DK | OK | OK ? | N/A | *gamate* | Gamate | YES | MOS 6502 | CC65 | OK | OK | OK | *gamegear* | Game Gear | YES | Zilog 80 | Z88DK | OK | OK | OK ? | PSG SN76489 Mednafen OK *gb* | Game Boy | YES | GBZ80 | Z88DK | OK | OK | OK | grey levels *gemini* | Gemini | YES? | Zilog 80 | Z88DK | OK | ? | ? | *gl4000* | VTech Genius Leader 4000 | YES | Zilog 80 | Z88DK | missing | missing | missing | *gl6000sl* | VTech Genius Leader 6000sl | YES | Zilog 80 | Z88DK | OK | OK | missing | *gx4000* | Amstrad GX-4000 | YES | Zilog 80 | Z88DK | OK | OK | OK | *hbios* | HBIOS generic target | ? | Zilog 80 | Z88DK | missing | missing | missing | *hector1* | Hector 1 | YES | Zilog 80 | Z88DK | OK? | missing | missing | extremely low memory *hectorhr* | Hector HR2+ / Hector HRX | YES | Zilog 80 | Z88DK | OK | OK | missing | *hemc* | Huebler/Evert-MC | YES | Zilog 80 | Z88DK | OK | N/A | N/A ? | *hgmc* | Huebler-Grafik-MC | YES | Zilog 80 | Z88DK | OK | missing | N/A ? | *homelab* | Homelab 4 | YES | Zilog 80 | Z88DK | OK | N/A | N/A ? | *homelab2* | Homelab 2 | YES | Zilog 80 | Z88DK | OK | N/A | N/A ? | *kaypro83* | Kaypro 83 | YES | Zilog 80 | Z88DK | OK | N/A | N/A ? | *kaypro* | Kaypro 2X | YES | Zilog 80 | Z88DK | OK | N/A ? | N/A ? | *interact* | Interact | YES | Intel 8080 | Z88DK | OK? | missing | missing | extremely low memory *kc* | Robotron KC-85/2/3/4 | YES | Zilog 80 | Z88DK | OK | OK | N/A ? | *kc85* | Kyocera 85 | YES | Intel 8085 | Z88DK | OK | missing | missing | *kramermc* | Kramer-MC | YES | Zilog 80 | Z88DK | OK | N/A | N/A ? | *krokha* | Krokha | YES? | Zilog 80 | Z88DK | OK | ? | ? | *lambda* | Lambda 8300 | YES | Zilog 80 | Z88DK | OK | N/A | N/A ? | *laser500* | Laser 500 | YES | Zilog 80 | Z88DK | OK | OK | OK | *lm80c* | LM80C | YES | Zilog 80 | Z88DK | OK? | OK | missing | *m10* | Olivetti M10 | YES | Intel 8085 | Z88DK | OK | missing | missing | *m100* | TRS-80 M100 | YES | Intel 8085 | Z88DK | OK | missing | missing | *m5* | Sord M5 | YES | Zilog 80 | Z88DK | OK | OK | OK ? | *map1010* | Seiko MAP-1010 | YES | Zilog 80 | Z88DK | OK | OK | OK | *mbc200* | Sanyo MBC 200 | YES? | Zilog 80 | Z88DK | OK | missing | missing | *mc10* | TRS-80 MC-10 / Alice Matra 4k | YES | Motorola 6803 | CC6303 | OK | missing | OK | *mc1000* | CCE MC-1000 | YES | Zilog 80 | Z88DK | OK | OK | OK | *mega65* | Mega 65 / Commodore 65 | YES | MOS 6502 | CC65 | OK | missing | OK | *micro8085* | Micro 8085 | YES? | Intel 8085 | Z88DK | N/A? | N/A? | N/A? | *microboard* | Microboard Computer Development System | YES | RCA 1802 | LCC1802 | OK | OK | OK | *microbee* | Microobee | YES | Zilog 80 | Z88DK | OK | OK | OK | *microbee_premium* | Microobee Premium | YES | Zilog 80 | Z88DK | OK | OK | OK | *mikro80* | Mikro 80 | YES | Intel 8080 | Z88DK | OK | N/A | N/A | *mo5* | Thomson Mo series / Olivetti Prodest PC 128 | YES | Motorola 6809 | CMOC | OK | OK | OK | *msx* | MSX 1 | YES | Zilog 80 | Z88DK | OK | OK | OK | *msx 2* | MSX 2/2+/Turbo | YES | Zilog 80 | Z88DK | OK | OK | OK | *mtx* | Memotech MTX 512 | YES | Zilog 80 | Z88DK | OK | OK | OK ? | *mtx500* | Memotech MTX 500 | YES | Zilog 80 | Z88DK | OK | OK | OK ? | *multi8* | Mitsubishi Multi 8 | YES | Zilog 80 | Z88DK | OK | OK | OK | *myvision* | Nichibutsu My Vision | YES | Zilog 80 | Z88DK | OK | OK | OK | *mz* | Sharp MZ 80/700 | YES | Zilog 80 | Z88DK | OK | N/A | OK | *mz2500* | Sharp MZ 2500 | YES | Zilog 80 | Z88DK | OK | missing | missing | *nabu* | Nabu PC | YES? | Zilog 80 | Z88DK | OK? | OK? | missing | *nascom* | Nascom | YES | Zilog 80 | Z88DK | OK | N/A | missing | *nc100* | Amstrad NC-100/150 | YES | Zilog 80 | Z88DK | OK | OK | N/A ? | *nc200* | Amstrad NC-200 | YES | Zilog 80 | Z88DK | OK | OK | N/A ? | *nes* | Nintendo Enterteinment System | YES | MOS 6502 | CC65 | OK | OK | missing | *newbrain* | Grundy Newbrain | YES | Zilog 80 | Z88DK | missing | missing | missing | *ondra* | Tesla Ondra Vili | YES | Zilog 80 | Z88DK | OK | OK ? | missing | *oric* | Tangerine Oric 1/Atmos | YES | MOS 6502 | CC65 | OK | OK | OK | *osborne1* | Osborne 1 | YES | Zilog 80 | Z88DK | OK | N/A ? | N/A ? | *osca* | OSCA v6z80p | YES | Zilog 80 | Z88DK | OK | missing | missing | *osic1p* | Ohio Scientific Challenger 1P | YES | MOS 6502 | CC65 | OK | N/A ? | N/A ? | *oz* | Sharp OZ-700 | YES | Zilog 80 | Z88DK | N/A ? | N/A ? | N/A ? | *p2000* | Philips P2000 | YES | Zilog 80 | Z88DK | OK | N/A | OK | *pacman* | Pacman Namco arcade board | NO | Zilog 80 | Z88DK | missing | missing | missing | *pasaopia7* | Toshiba Pasopia 7 | YES | Zilog 80 | Z88DK | OK | missing | missing | PSG SN76489 *pc6001* | NEC PC 6001 | YES | Zilog 80 | Z88DK | OK | OK | OK | *pc8201* | NEC PC 8201 | YES | Intel 8085 | Z88DK | OK | missing | missing | *pc88* | NEC PC 8801 | YES | Zilog 80 | Z88DK | OK | OK ? | missing | *pce* | PCEngine | YES | MOS 6502 | CC65 | OK | OK | OK | *pcw* | Amstrad PCW | ? | Zilog 80 | Z88DK | ? | missing | missing | *pecom* | Pecom 32/64 | YES | RCA 1802 | LCC1802 | OK | OK | OK | *pencil2* | Hanimex Pencil II | YES | Zilog 80 | Z88DK | OK | OK ? | missing | PSG SN76489 *pet* | Commodore Pet | YES | MOS 6502 | CC65 | OK | N/A | OK | *phc25* | Sanyo PHC-25 | YES | Zilog 80 | Z88DK | OK | OK | OK | *lviv* | PK-01 LVIV/LVOV | YES | Intel 8080 | Z88DK | OK | OK | missing | *pmd85* | PMD85 | YES | Intel 8080 | Z88DK | OK | OK ? | missing | *pps* | Peters Plus Sprinter | YES | Zilog 80 | Z88DK | OK | N/A ? | missing | *primo* | Microkey Primo | YES | Zilog 80 | Z88DK | OK | OK ? | OK ? | *pv1000* | Casio PV1000 | YES | Zilog 80 | Z88DK | OK | OK | missing | *pv2000* | Casio PV2000 | YES | Zilog 80 | Z88DK | OK | OK | missing | PSG SN76489 *px4* | Epson PX-4/HC-40 | YES | Zilog 80 | Z88DK | OK | OK | N/A ? | *px8* | Epson PX-8/HC-80 | YES | Zilog 80 | Z88DK | OK | OK | N/A ? | *qc10* | Epson QX-10/QC-10 | YES | Zilog 80 | Z88DK | OK | N/A ? | N/A ? | *radio86* | Radio 86 | YES? | Zilog 80 | Z88DK | OK | OK? | missing | *rex* | Xircom Rex 6000 | ? | Zilog 80 | Z88DK | missing | missing | missing | *rc2014* | RC 2014 board | ? | Zilog 80 | Z88DK | missing | missing | missing | *rc700* | Regnecentralen RC700 | YES | Zilog 80 | Z88DK | OK | N/A ? | N/A ? | *rcmx00* | Rabbit Control Module | ? | Zilog 80 | Z88DK | missing | missing | missing | *rx78* | Bandai RX-78 | YES | Zilog 80 | Z88DK | OK | OK | missing | PSG SN76489 *samcoupe* | Sam Coupe | YES | Zilog 80 | Z88DK | OK | OK | OK | *sc3000* | Sega SC 3000 | YES | Zilog 80 | Z88DK | OK | OK | OK | *scz180* | SC126 and SC130 boards | ? | Zilog 80 | Z88DK | missing | missing | missing | *sg1000* | Sega SG 1000 | YES | Zilog 80 | Z88DK | OK | OK | OK | *smc777* | Sony SMC-70 / SMC-777 | YES | Zilog 80 | Z88DK | OK | OK | missing | PSG SN76489 *sms* | Sega Master System | YES | Zilog 80 | Z88DK | OK | OK | OK? | PSG SN76489 Mednafen OK *sol20* | Sol 20 | YES? | Intel 8085 | Z88DK | OK? | missing | missing | *sos* | S-OS | YES | Zilog 80 | Z88DK | N/A | N/A | N/A | *spc1000* | Samsung SPC 1000 | YES | Zilog 80 | Z88DK | OK | OK | OK | *special* | Specialist | NO | Zilog 80 | Z88DK | OK | N/A ? | N/A ? | *zx* | Sinclair Spectrum 16k/48k | YES | Zilog 80 | Z88DK | OK | OK | OK | *zx* | Sinclair Spectrum 128k | YES | Zilog 80 | Z88DK | OK | OK | OK | PSG sounds could be improved *srr* | Exidy Sorcerer | YES | Zilog 80 | Z88DK | OK | OK | N/A | *super80* | Dick Smith Super 80/80d/80e/80m | YES | Zilog 80 | Z88DK | OK | N/A | OK | *super80r* | Dick Smith Super 80r/80v | YES | Zilog 80 | Z88DK | OK | OK ? | OK | *supervision* | Watara Supervision | YES | MOS 6502 | CC65 | OK | OK | OK | *sv8000* | Bandai Supervision 8000 | YES | Zilog 80 | Z88DK | OK | missing | OK ? | 4k rom limit *svi* | Spectravideo 318/328 | YES | Zilog 80 | Z88DK | OK | OK | OK | *t200* | TRS-80 T200 | YES | Intel 8085 | Z88DK | OK | missing | missing | *telestrat* | Oric Telestrat | YES | MOS 6502 | CC65 | missing | missing | missing | *tmc600* | Telmac TMC-600 | YES | RCA 1802 | LCC1802 | OK | N/A | OK | *ti82* | Texas Instruments TI 82 | YES | Zilog 80 | Z88DK | OK | OK | N/A | *ti83* | Texas Instruments TI 83 | YES | Zilog 80 | Z88DK | OK | OK | N/A | *ti8x* | Texas Instruments TI 83 Plus | YES | Zilog 80 | Z88DK | OK | OK | N/A | *ti85* | Texas Instruments TI 85 | YES | Zilog 80 | Z88DK | OK | OK | N/A | *ti86* | Texas Instruments TI 86 | YES | Zilog 80 | Z88DK | OK | OK | N/A | *tiki100* | TIKI 100 | YES | Zilog 80 | Z88DK | OK | OK | OK | *tim 011* | Tim 011 | YES? | Zilog 180 | Z88DK | OK? | OK? | missing | *to7* | Thomson To series | YES | Motorola 6809 | CMOC | OK | OK | OK | *trs80* | TRS-80 Model I/III/IV | YES | Zilog 80 | Z88DK | OK | N/A | OK | *ts2068* | Timex TS 2068 | YES | Zilog 80 | Z88DK | OK | OK | OK | *tvc* | Videoton TV Computer | YES | Zilog 80 | Z88DK | missing | missing | missing | *vector06c* | Вектор-06Ц Vector06c | YES | Zilog 80 | Z88DK | OK | missing | missing | *vg5k* | VG-5000 | YES | Zilog 80 | Z88DK | OK | OK | OK | *v1050* | V1050 | YES? | Zilog 80 | Z88DK | OK? | OK | missing | *vic20* | Commodore Vic 20 | YES | MOS 6502 | CC65 | OK | OK | OK | *vz* | VTech VZ200 | YES | Zilog 80 | Z88DK | OK | OK | OK | *x1* | Sharp X1 | YES | Zilog 80 | Z88DK | OK | OK ? | OK | mode 0 has udg *x07* | Canon X-07 | YES | Zilog 80 | Z88DK | OK | ? | ? | *x820* | Xerox 820 | YES? | Zilog 80 | Z88DK | OK | OK ? | OK | *yaz180* | YAZ 180 board | ? | Zilog 80 | Z88DK | missing | missing | missing | *z1013* | Robotron Z1013 | YES | Zilog 80 | Z88DK | OK | N/A | N/A ? | *z80tvgame* | Z80 TV Game | YES | Zilog 80 | Z88DK | OK | OK ? | missing | *z88* | Cambridge Z88 | YES | Zilog 80 | Z88DK | OK | OK | OK | *z9001* | Robotron Z9001, KC 85/1, KC 87 | YES | Zilog 80 | Z88DK | OK | OK ? | missing | *zx80* | Sinclair ZX80 | YES | Zilog 80 | Z88DK | OK ? | missing | N/A | *zx81* | Sinclair ZX81 | YES | Zilog 80 | Z88DK | OK | OK | N/A | *zxn* | ZX Spectrum Next | YES | Zilog 80 | Z88DK | OK | OK | OK | TOTAL : 192 OK : 183 (170 with real-time input) KO : 2 UNKNOWN : 7 ----------------------------------------------- #### Statistics on 8-bit targets Dev-kit | no. 8-bit targets --------|-------------------- Z88DK | 152 CC65 | 25 LCC1802 | 7 CMOC | 5 VBCC | 2 CC6303 | 1 ----------------------------------------------- CPU family | no. 8-bit targets | --------------|--------------------| Zilog 80 | 136 | MOS 6502 | 27 | RCA 1802 | 7 | Intel 8085 | 7 | Intel 8080 | 8 | Motorola 6809 | 5 | GBZ80 | 1 | Motorola 6803 | 1 | ----------------------------------------------------------------------------------------- ### 16-BIT targets target name | long target name | working | CPU family | dev-kit | real-time input | graphics | sound | notes --------------------|---------------------------------------------|----------|---------------|---------|-----------------|----------------|---------|----------- *amiga* | Commodore Amiga | YES | 68000 | GCC mod | missing | missing | missing | *atari_st* | Atari ST | YES | 68000 | GCC mod | missing | missing | missing | *olivetti_m20* | Olivetti M20 | YES | Zilog 8001 | Z8K-GCC | missing | missing | missing | *pc86* | PC 8088/86 | YES | Intel 8086 | ACK | OK | OK | OK? | *msdos86* | MS-DOS 8086 | YES | Intel 8086 | ACK | OK | OK | OK | *pdp11v7* | PDP 11 V7 | ? | PDP 11 | ACK | missing | missing | missing | *sinclair_ql* | Sinclair QL | YES | 68000 | XTC68 | missing | missing | missing | *ti99* | Texas Instruments TI99/4A | YES | TMS 9900 | GCC mod | OK | OK | OK | *minix68k* | Minix 68K | ? | 68000 | ACK | missing | missing | missing | OK : 7 (3 with real-time input) UNKNOWN : 2 ----------------------------------------------------------------------------------------- ### 32-BIT targets (excluding modern PCs) target name | long target name | working | CPU family | dev-kit | real-time input | graphics | sound | notes --------------------|---------------------------------------------|----------|---------------|-----------|-----------------|----------------|---------|----------- *linux386* | ELF linux for Intel 386 | YES | Intel 386 | ACK | missing | missing | missing | *linux68k* | ELF linux for Motorola 68020 | YES | Motorola 68020| ACK | missing | missing | missing | *linuxppc* | ELF linux for PPC | YES | PPC | ACK | missing | missing | missing | *linuxmips* | ELF linux for little endian MIPS32r2 | ? | MIPS32r2 | ACK | missing | missing | missing | *msdos386* | MS-DOS 386 DPMI | NO | Intel 386 | ACK | missing | missing | missing | *osx386* | OSX X Mach0 for i386 | ? | Intel 386 | ACK | missing | missing | missing | *osxppc* | OSX X Mach0 for PPC | ? | PPC | ACK | missing | missing | missing | *rpi* | RPI GPU | ? | RPI GPU | ACK | missing | missing | missing | OK : 3 KO : 4 UNKNOWN : 1 ----------------------------------------------------------------------------------------- ### 32-BIT and 64-BIT targets on modern PC systems target name | long target name | working | CPU family | dev-kit | real-time input | graphics | sound | notes --------------------|---------------------------------------------|----------|---------------|-----------|-----------------|----------------|---------|----------- *gcc* | Native Console version | YES | host CPU | native | OK | OK | OK | *emcc* | Emscripten | YES | Web Assembly | emscripten| missing | missing | input | OK : 2 (1 wiith real-time input) ----------------------------------------------------------------------------------------- ### GLOBAL STATISTICS TOTAL : 211 OK : 194 (179 with real-time input) KO : 4 UNKNOWN : 13 ================================================ FILE: docs/SUPPORT_FOR_NEW_TARGET.txt ================================================ Example to add support to PV1000 Concerned files: modified: ../.gitignore modified: assets/templates/8x8/z88dk_pv1000.asm.template modified: cross_lib/cross_lib.h modified: cross_lib/display/color_definitions.h modified: cross_lib/display/display_target_color.h modified: cross_lib/display/graphics_settings.h modified: cross_lib/display/tiles.h modified: games/chase/config/project_config.mk modified: games/shoot/makefiles/Makefile.override modified: games/verbix/config/project_config.mk modified: makefiles.common/targets/z88dk/Makefile_pv1000 Untracked files: (use "git add ..." to include in what will be committed) cross_lib/display/graphics_mode/pv1000_graphics.h cross_lib/display/tiles/pv1000_settings.h 1. New graphics mode: cross_lib/display/graphics_settings.h cross_lib/display/graphics_mode/pv1000_graphics.h 2. Tile mapping: cross_lib/display/tiles.h cross_lib/display/tiles/pv1000_settings.h ================================================ FILE: docs/SYSTEMS.md ================================================ ## SUPPORTED SYSTEMS (as of 2020/09/30) In principle you can compile the game with minimal input and output for any recent or old/ancient architecture for which there is an ANSI C capable compiler. For most vintage systems, you can build a version of the game with some graphics, sounds and real time input. ### 8-BIT targets For most systems, more than one version is built, in order to support different hardware configurations and expansions (e.g., memory expansions, second CPU, 80-col display card, etc.). - `abc80`: Luxor ABC 80 - `abc800`: Luxor ABC 800 - `ace`: Jupiter Ace - `alphatro`: Alphatronic - `altair8800`: MITS Altair 8800 - `apple2`: Apple // - `apple2enh`: Enhanced Apple //e - `aquarius`: Mattel Aquarius - `atari5200`: Atari 5200 - `atari`: Atari 400/800/600XL/800XL/1200XL/65XE/130XE - `atari_jaguar`: Atari Jaguar - `atari_lynx`: Atari Lynx - `attache`: Otrona Attache - `aussie`: Aussie Byte - `bbc`: BBC Micro - `bbcmaster`: BBC Master - `bic`: BIC/A5105 - `bit90`: Bit Corporation BIT 90 - `c128_8502`: Commodore 128 [8502 CPU] - `c128_z80`: Commodore 128 [Z80 CPU] - `c16`: Commodore 264 series (16/116/+4) - `c64`: Commodore 64 - `c7420`: Philips VideoPac C7420 module (z88dk lib incomplete, work in progress) - `cbm510`: Commodore CBM 510 - `cbm610`: Commodore CBM 610 - `camputers_lynx`: Camputers Lynx 48k/96k/128k - `cidelsa_altair`: Cidelsa Altair arcade board - `cidelsa_destroyer`: Cidelsa Destroyer arcade board - `cidelsa_draco`: Cidelsa Draco arcade board - `coco`: Color Computer - `coleco`: Colecovision - `coleco_adam`: Colecovision Adam - `comx`: COMX-35 - `cpc`: Amstrad CPC - `cpm_8080`: CP/M Intel 8080 - `cpm_z80`: CP/M Z80 with adm3a/vt52/vt100 terminals - `creativision`: VTech Creativision - `dai`: DAI - `dmv`: Decision Mate V - `dragon`: Dragon 32/64 - `eg2k`: EACA EG2000 Color Genie - `einstein`: Tatung Einstein - `enterprise`: Enterprise 64/128 - `excalibur64`: Excalibur64 - `fp1100`: Casio FP-1100 - `g800`: Sharp PC-G800 - `gal`: Galaksija - `gal_plus`: Galaksija Plus - `gamate`: Gamate - `gb`: Game Boy - `gx4000`: Amstrad GX-4000 - `hemc`: Huebler/Evert-MC - `hgmc`: Huebler-Grafik-MC - `homelab`: Homelab 4 - `homelab2`: Homelab 2 - `kaypro`: Kaypro 2X - `kramermc`: Kramer-MCs - `kc`: Robotron KC-85/2/3/4 - `lambda`: Lambda 8300 - `laser500`: Laser 500 - `m100`: TRS-80 M100 (z88dk lib incomplete, work in progress) - `m5`: Sord M5 - `mega65`: Mega 65 / Commodore 65 - `mc1000`: CCE MC-1000 - `microboard`: Microboard Computer Development Board - `microbee`: Microobee - `mikro80`: Mikro 80 - `mo5`: Thomson Mo5 / Thomson Mo6 / Olivetti Prodest PC 128 - `msx`: MSX - `mtx`: Memotech MTX 512 - `mtx500`: Memotech MTX 500 - `multi8`: Mitsubishi Multi 8 - `myvision`: Nichibutsu My Vision - `mz`: Sharp MZ 80/700 - `mz2500`: Sharp MZ 2500 - `nascom`: Nascom - `nc100`: Amstrad NC-100/150 - `nc200`: Amstrad NC-200 - `nes`: Nintendo Enterteinment System - `newbrain`: Grundy Newbrain - `ondra`: Tesla Ondra Vili - `oric`: Tangerine Oric 1/Atmos - `osborne1`: Osborne 1 - `osca`: OSCA v6z80p - `osic1p`: Ohio Scientific Challenger 1P - `oz`: Sharp OZ-700 - `p2000`: Philips P2000 - `pacman`: Pacman (work in progress) - `pasaopia7`: Toshiba Pasopia 7 - `pc6001`: NEC PC 6001 - `pc88`: NEC PC 8801 - `pce`: PCEngine - `pecom`: Pecom 32/64 - `pencil2`: Hanimex Pencil II - `pet`: Commodore Pet - `pmd85`: PMD85 - `pps`: Peters Plus Sprinter - `primo`: Primo - `pv1000`: Casio PV1000 - `pv2000`: Casio PV2000 - `px4`: Epson PX-4/HC-40 - `px8`: Epson PX-8/HC-80 - `qc10`: Epson QC-10/QX-10 - `rex`: Xircom Rex 6000 (no available emulator, work in progress) - `rc700`: Regnecentralen RC700 - `rx78`: Bandai RX-78 - `samcoupe`: Sam Coupe - `sc3000`: Sega SC 3000 - `sg1000`: Sega SG 1000 - `smc777`: Sony SMC-70 / SMC-777 - `sms`: Sega Master System - `sos`: S-OS - `spc1000`: Samsung SPC 1000 - `special`: Specialist - `spectrum`: Sinclair Spectrum 16k/48k/128k - `srr`: Exidy Sorcerer - `super80`: Super 80/80d/80e/80m - `super80r`: Super 80r/Super80v - `supervision`: Watara Supervision - `sv8000`: Bandai Supervision 8000 - `svi`: Spectravideo 318/328 - `telestrat`: Oric Telestrat - `tmc600`: Telmac TMC-600 - `ti82`: Texas TI 82 - `ti83`: Texas TI 83 - `ti8x`: Texas TI 83 Plus - `ti85`: Texas TI 85 - `ti86`: Texas TI 86 - `tiki100`: TIKI 100 - `to7`: Thomson To7 / To7/70 / To8 / To8d / To8+ / To9 / To9+ - `trs80`: TRS-80 Model I/III/IV - `ts2068`: Timex TS 2068 - `tvc`: Videoton TV Computer - `vector06c`: Вектор-06Ц - Vector06c - `vg5k`: VG-5000 - `vic20`: Commodore Vic 20 - `vz200`: VTech VZ200 - `x07`: Casio X-07 (z88dk lib incomplete, work in progress) - `x1`: Sharp X1 - `z1013`: Robotron Z1013 - `z80tvgame`: ZX80 TV Game - `z88`: Cambridge Z88 - `z9001`: Robotron Z9001, Robotron KC 85/1, Robotron KC 87 - `zx80`: Sinclair ZX80 - `zx81`: Sinclair ZX81 - `zxn` : ZX Spectrum Next ### 16-BIT targets - `amiga`: Amiga - `atari_st`: Atari ST - `cx16`: Commander X16 (work in progress) - `olivetti_m20`: Olivetti M20 - `pc8086`: Intel 8088/8086 PC - `pdp`: PDP 11 v7 (work in progress) - `sinclair_ql`: Sinclair QL - `ti99`: Texas Instruments TI99/4A ### 32-BIT targets - `linux386`: ELF linux for Intel 386 - `linux68k`: ELF linux for Motorola 68020 - `linuxppc`: ELF linux for PPC - `linuxmips`: ELF linux for little endian MIPS32r2 (work in progress) ### Modern 32/64-BIT PC targets There are a plain stdlib (turn based) and an ncurses (action) version that can be compiled for multiple platforms for which an ANSI C compiler and ncurses are available, including Windows and Linux. For example: - Cygwin/Windows or Linux (gcc + ncurses, e.g., cygwin/Windows or Linux) - Windows 32/64 bit console (mingw-gcc + ncurses, e.g., x86_64-w64-mingw32-gcc) ================================================ FILE: docs/TESTS.md ================================================ ## COMPILATION TESTS We can test the compilation of the game for multiple targets by running some tests that build a very simple version of the game that may not be playable. The purpose of these tests is to test the compilation. ### SIMPLE GCC-ONLY TESTS If you have installed `GCC`, you can run `make simple_test` (short compilation time), which builds the game by only using `GCC` for the host system. This test will produce a binary that can be run on the host console. ### TESTS ON SEVERAL COMPILERS AND TARGETS You can run many tests that use several cross-compilers and dev-kits not including Z88DK by running `make no_z88dk_test`. You can run many tests that use several cross-compilers and dev-kits including Z88DK by running `make test` (long compilation time). ### MORE Z88DK-ONLY TESTS If you have installed `Z88DK` you can test lots of Z80 systems and targets by - `make sccz80_test` to test the compilation of different targets with `SCCZ80`; - `make zsdcc_test` to test the compilation of different targets with `ZSDCC` - `make z88dk_test` to cover both cross-compilers. ================================================ FILE: docs/THE_GAME.txt ================================================ THE GAME by Fabrizio Caruso - Game idea The idea behind the game was my own and it was not inspired by any other game. However, I later discovered that GNOME Robots is in some respects similar in its basic concept. The key differences are that: 1. the main version of Cross Chase is an action game, whereas Robots is only a turn-based game 2. Cross Chase has other enemy types (skull, missiles, rockets) that require the use of the gun. 3. Cross Chase has other game elements such as different types of walls and items - Game goals The game goal is to kill two different types of enemies: 1. the "ghosts" (shown as faces or "O" in no graphics versions), which die if they end up on a mine (or if shot by a bullet) 2. the "skull" (shown as a skull or "+" in no graphics versions), which only dies if hit multiple times by bullets Optionally the player can destroy (horizontal and possibly chasing) missiles and (vertical) rockets by shooting at their bases. All enemies and walls are deadly for the player. - Levels There are 20 levels. The game has an end. Levels vary in terms of walls, missiles, rockets, items, speed, enemy's chasing strategy, etc. Normal levels are completed only by killing all the ghosts. Boss levels (every fifth level) are completed only by killing the skull. - Items Any item shown on the screen has a positive effect for the player. There are 10 items. Special and secret items require the player to perform some actions on the same level and/or previous levels. HINT: Use the gun to hit or even kill the skull and/or destroy missile and rocket bases to unlock more items in current and next levels. ================================================ FILE: docs/TILES.txt ================================================ TILES In the code we use the name tiles for different things: - tile absolute index [used to display] "_TILE_{index}", i.e., and index in memory that points to the tile data - tile relative index [used to redefine] "_TILE_{index}_OFFSET", i.e. a relative index in memory (e.g., Atari 8-bit mode 1 characters are repeated 4 times) - tile data (in template files) "", i.e., this is the data that defines the shape of tiles - tile data in C code (in header files) "_TILE_{tile #}_UDG" contains "" ---------------------------------------------------------------------------------------------- TILE | TILE | CAN HAVE | EXAMPLE CHARACTER INDEX | # | INTRINSIC COLOR (*) | IN CROSS CHASE AND CROSS SHOOT ---------------------------------------------------------------------------------------------- 0 | 0 | CYAN | PLAYER DOWN ---------------------------------------------------------------------------------------------- 1 | 1 | CYAN | PLAYER UP ---------------------------------------------------------------------------------------------- 2 | 2 | CYAN | PLAYER RIGHT ---------------------------------------------------------------------------------------------- 3 | 3 | CYAN | PLAYER LEFT ---------------------------------------------------------------------------------------------- 4 | 4 | WHITE | GHOST ---------------------------------------------------------------------------------------------- 5 | 5 | RED | MINE ---------------------------------------------------------------------------------------------- 6 | 6 | RED | DEAD GHOST/BOSS ---------------------------------------------------------------------------------------------- 7 | 7 | YELLOW | SKULL ---------------------------------------------------------------------------------------------- 8 | 8 | GREEN | CALM-DOWN ---------------------------------------------------------------------------------------------- 9 | 9 | CYAN/PURPLE/YELLOW | GUN/FIRE POWER ---------------------------------------------------------------------------------------------- 10 | 10 | YELLOW | INVINCIBILITY ---------------------------------------------------------------------------------------------- 11 | 11 | WHITE | BULLET ---------------------------------------------------------------------------------------------- 12 | 12 | YELLOW | VERTICAL BRICK ---------------------------------------------------------------------------------------------- 13 | 13 | YELLOW | HORIZONTAL BRICK ---------------------------------------------------------------------------------------------- 14 | 14 | WHITE | LEFT HORIZONTAL MISSILE ---------------------------------------------------------------------------------------------- 15 | 15 | WHITE | RIGHT HORIZONTAL MISSILE ---------------------------------------------------------------------------------------------- 16 | 16 | WHITE | ROCKET ---------------------------------------------------------------------------------------------- 17 | 17 | CYAN | FREEZE ---------------------------------------------------------------------------------------------- 18 | 18 | RED | SUPER ---------------------------------------------------------------------------------------------- 19 | 13 | CYAN | ---------------------------------------------------------------------------------------------- 20 | 14 | CYAN | ---------------------------------------------------------------------------------------------- 21 | 15 | CYAN | ---------------------------------------------------------------------------------------------- 22 | 16 | CYAN | ---------------------------------------------------------------------------------------------- 23 | 17 | CYAN | ---------------------------------------------------------------------------------------------- 24 | 18 | YELLOW | ---------------------------------------------------------------------------------------------- 0_B | 0 | WHITE | EXTRA LIFE (PLAYER_DOWN) ---------------------------------------------------------------------------------------------- 4_B | 4 | YELLOW | SUICIDE (GHOST) ---------------------------------------------------------------------------------------------- 5_B | 5 | YELLOW | BROKEN BRICK (BOMB) ---------------------------------------------------------------------------------------------- 7_B | 7 | RED | CONFUSE (SKULL) ---------------------------------------------------------------------------------------------- DOLLAR |DOLLAR| YELLOW | DOLLAR SYMBOL [FIXED SHAPE] ---------------------------------------------------------------------------------------------- (*) Some systems have tiles/characters with pre-assigned colors. The intrinsic color is the pre-assigned color to a tile (on most systems). ================================================ FILE: docs/TODO.txt ================================================ TODO 1. Improve documentation on how to add new targets 2. Factorize cmoc/stdlib includes in all concerned files 3. Fix implicit declaraton of kbhit and getch 4. _XL_NO_LOWER_BORDER fix/implementation 5. Retest BEE input 6. Check Unix compilation (A7800 assets?) 7. Compiler options should be settable per game Targets to improve/fix Z80: - Casio FP 1100 (random zombie characters/missed display) - Bandai Supervision 8000 (REMARK: ONLY 4k roms in real hardware) - TVC Videoton (not cursor position) - M100 (only single pixel graphics) - MZ 2500 - Cambridge Z88 - Sharp OZ - Coleco Adam - Super 80 - ABC 800 6809: - Vectrex 8501: - Minitel [SDCC] 6502: - Oric Telestrat - Acorn BBC Micro / Atom - Atari 2600 65C816 - Super NES [GBDK: http://gbdk.sourceforge.net/] 68000: - Amiga 8. Add more CP/M targets with just different disk image formats: SUBTYPE actrix -Cz+cpmdisk -Cz-f -Czactrix -Cz--container=imd -D__ACTRIX__ SUBTYPE actrixss -Cz+cpmdisk -Cz-f -Czactrixss -Cz--container=imd -D__ACTRIX__ SUBTYPE adam -Cz+cpmdisk -Cz-f -Czcol1 -Cz--container=raw -D__COLECOADAM__ -D__COLECO__ -ladam -pragma-define:CONSOLE_COLUMNS=32 -pragma-define:CONSOLE_ROWS=24 -pragma-define:__HAVE_TMS99X8=1 SUBTYPE alphatro -Cz+cpmdisk -Cz-f -Czalphatro -Cz--container=imd -lalphatro_cpm -D__ALPHATRO__ SUBTYPE altos5 -Cz+cpmdisk -Cz-f -Czaltos5 -Cz--container=imd -D__ALTOS__ SUBTYPE altos580 -Cz+cpmdisk -Cz-f -Czaltos580 -Cz--container=imd -D__ALTOS__ SUBTYPE ampro -Cz+cpmdisk -Cz-f -Czampro -Cz--container=imd -D__AMPRO__ SUBTYPE amust -Cz+cpmdisk -Cz-f -Czamust -Cz--container=imd -D__AMUST__ SUBTYPE amustold -Cz+cpmdisk -Cz-f -Czamustold -Cz--container=imd -D__AMUST__ SUBTYPE apple2 -Cz+cpmdisk -Cz-f -Czapple2 -Cz--container=raw -Cz--extension=.dsk -lapple2 -D__APPLE__ SUBTYPE aussie -Cz+cpmdisk -Cz-f -Czaussie -Cz--container=imd -laussie -D__AUSSIE__ SUBTYPE archive -Cz+cpmdisk -Cz-f -Czarchive -Cz--container=imd -D__ARCHIVE__ SUBTYPE attache -Cz+cpmdisk -Cz-f -Czattache -lattache -D__ATTACHE__ SUBTYPE beehive -Cz+cpmdisk -Cz-f -Czbeehive -Cz--container=imd -D__BEEHIVE__ SUBTYPE bbc -Cz+cpmdisk -Cz-f -Czbbc -Cz--container=raw -Cz--extension=.ssd -D__BBC__ SUBTYPE bic -Cz+cpmdisk -Cz-f -Czbic -Cz--container=ana -lbic -pragma-define:CONSOLE_ROWS=24 -pragma-define:CONSOLE_COLUMNS=80 -D__BIC__ SUBTYPE bigboard -Cz+cpmdisk -Cz-f -Czbigboard -Cz--container=imd -Cz--container=imd -D__X820__ -lx820ii -pragma-define:CONSOLE_ROWS=24 -pragma-define:CONSOLE_COLUMNS=80 -pragma-define:CRT_ORG_GRAPHICS=50000 -pragma-define:TAR__clib_gfx_fatpix=1 SUBTYPE bondwell -Cz+cpmdisk -Cz-f -Czbw12 -lbondwell -D__BONDWELL__ -pragma-define:CONSOLE_COLUMNS=80 -pragma-define:CONSOLE_ROWS=25 SUBTYPE bondwell2 -Cz+cpmdisk -Cz-f -Czbw2 -lbondwell2 -D__BONDWELL2__ -pragma-define:CRT_ORG_GRAPHICS=47000 -pragma-define:REGISTER_SP=47000 -pragma-define:CONSOLE_COLUMNS=80 -pragma-define:CONSOLE_ROWS=25 -clib=ixiy SUBTYPE compactor -Cz+cpmdisk -Cz-f -Czcompactor -Cz--container=imd -ltrs80_cpm -D__TRS80__ SUBTYPE corvette -Cz+cpmdisk -Cz-f -Czcorvette -Cz--container=raw -D__CORVETTE__ -Cz--extension=.kdi -pragma-define:CLIB_FPUTC_CLS_CODE=0x1f -clib=8080 SUBTYPE corvboot -Cz+cpmdisk -Cz-f -Czcorvboot -Cz--container=raw -D__CORVETTE__ -Cz--extension=.kdi -pragma-define:CLIB_FPUTC_CLS_CODE=0x1f -clib=8080 SUBTYPE cpc -Cz+cpmdisk -Cz-f -Czcpcsystem -Cz--force-com-ext -lcpccpm -D__CPC__ SUBTYPE cpcvortex -Cz+cpmdisk -Cz-f -Czcpcvortex -Cz--force-com-ext -lcpccpm -D__CPC__ SUBTYPE dmvss -Cz+cpmdisk -Cz-f -Czdmvss -Cz--container=imd -D__DMV__ SUBTYPE dmv -Cz+cpmdisk -Cz-f -Czdmv -Cz--container=imd -D__DMV__ SUBTYPE eagle2 -Cz+cpmdisk -Cz-f -Czeagle2 -Cz--container=imd -D__EAGLE2__ SUBTYPE einstein -Cz+cpmdisk -Cz-f -Czeinstein -leinstein -pragma-define:CONSOLE_COLUMNS=40 -pragma-define:CONSOLE_ROWS=24 -D__EINSTEIN__ -pragma-define:__HAVE_TMS99X8=1 -pragma-define:CLIB_FPUTC_CLS_CODE=0x0c SUBTYPE einstein256 -Cz+cpmdisk -Cz-f -Czeinstein -leinstein -pragma-define:CONSOLE_COLUMNS=40 -pragma-define:CONSOLE_ROWS=24 -D__EINSTEIN__ -D__EINSTEIN256__ -pragma-define:__HAVE_TMS99X8=1 -pragma-define:CLIB_FPUTC_CLS_CODE=0x0c -leinstein256 SUBTYPE excali64 -Cz+cpmdisk -Cz-f -Czexcali64 -Cz--container=raw -D__EXCALI64__ -pragma-define:CRT_ORG_GRAPHICS=50000 -pragma-define:CONSOLE_ROWS=24 -pragma-define:CONSOLE_COLUMNS=80 -lexcali64_cpm SUBTYPE fmgcpm -Cz+cpmdisk -Cz-f -Czfmgcpm -Cz--container=imd -ltrs80_cpm -lgfxtrs80m2 -D__TRS80__ -D__TRS80II__ SUBTYPE fp1100 -Cz+cpmdisk -Cz-f -Czfp1100 -Cz--container=d88 -D__FP1100__ -lfp1100_cpm -pragma-define:CONSOLE_ROWS=24 -pragma-define:CONSOLE_COLUMNS=40 SUBTYPE g2skk -Cz+cpmdisk -Cz-f -Czg2skk -Cz--container=dmk -ltrs80_cpm -D__TRS80__ SUBTYPE g2skkb -Cz+cpmdisk -Cz-f -Czg2skkb -Cz--container=dmk -ltrs80_cpm -D__TRS80__ SUBTYPE g2sgs -Cz+cpmdisk -Cz-f -Czg2sgs -Cz--container=dmk -ltrs80_cpm -D__TRS80__ SUBTYPE g3lowe22a -Cz+cpmdisk -Cz-f -Czg3lowe22a -Cz--container=dmk -ltrs80_cpm -D__TRS80__ SUBTYPE g3lowe22b -Cz+cpmdisk -Cz-f -Czg3lowe22b -Cz--container=dmk -ltrs80_cpm -D__TRS80__ SUBTYPE g3holte22 -Cz+cpmdisk -Cz-f -Czg3holte22 -Cz--container=dmk -ltrs80_cpm -D__TRS80__ SUBTYPE g3holte30 -Cz+cpmdisk -Cz-f -Czg3holte30 -Cz--container=dmk -ltrs80_cpm -D__TRS80__ SUBTYPE g3kk -Cz+cpmdisk -Cz-f -Czg2skk -Cz--container=dmk -ltrs80_cpm -D__TRS80__ SUBTYPE g3skk -Cz+cpmdisk -Cz-f -Czg2skk -Cz--container=dmk -ltrs80_cpm -D__TRS80__ SUBTYPE gemini -Cz+cpmdisk -Cz-f -Czgemini -Cz--container=imd -lgemini -D__GEMINI__ SUBTYPE gnat10 -Cz+cpmdisk -Cz-f -Czgnat10 -Cz--container=d88 -D__GNAT__ SUBTYPE holmes -Cz+cpmdisk -Cz-f -Czholmes -Cz--container=imd -ltrs80_cpm -D__TRS80__ SUBTYPE hp125 -Cz+cpmdisk -Cz-f -Czhp125 -Cz--container=imd -D__HP125__ SUBTYPE hz89 -Cz+cpmdisk -Cz-f -Czhz89 -Cz--container=imd -lgfxh19 -D__ZENITH__ SUBTYPE hz100 -Cz+cpmdisk -Cz-f -Czhz100 -Cz--container=imd -lgfxh19 -D__ZENITH__ SUBTYPE itt3030 -Cz+cpmdisk -Cz-f -Czitt3030 -D__ITT__ SUBTYPE kaypro83 -Cz+cpmdisk -Cz-f -Czkayproii -D__KAYPROII__ -D__KAYPRO83__ -pragma-define:CONSOLE_COLUMNS=80 -pragma-define:CONSOLE_ROWS=24 -pragma-define:CRT_ORG_GRAPHICS=47000 -lgfxkp83 -pragma-export:GRAPHICS_CHAR_SET=31 -pragma-export:GRAPHICS_CHAR_UNSET=32 SUBTYPE kaypro84 -Cz+cpmdisk -Cz-f -Czkayproii -D__KAYPRO84__ -pragma-define:CONSOLE_COLUMNS=80 -pragma-define:CONSOLE_ROWS=25 -lgfxkp SUBTYPE lifeboat -Cz+cpmdisk -Cz-f -Czlifeboat -Cz--container=imd -ltrs80_cpm -lgfxtrs80m2 -D__TRS80__ -D__TRS80II__ SUBTYPE lynx -Cz+cpmdisk -Cz-f -Czlynx -Cz--container=raw -Cz--extension=.ldf -D__LYNX__ SUBTYPE lnw80 -Cz+cpmdisk -Cz-f -Czlnw80 -Cz--container=imd -ltrs80_cpm -D__TRS80__ SUBTYPE max80 -Cz+cpmdisk -Cz-f -Czmax80cpm3 -Cz--container=imd -ltrs80_cpm -D__TRS80__ SUBTYPE magnolia -Cz+cpmdisk -Cz-f -Czmagnolia -Cz--container=imd -lgfxh19 -D__ZENITH__ SUBTYPE mikko320 -Cz+cpmdisk -Cz-f -Czmikko-320 -Cz--container=dsk -D__MIKKO__ -clib=8085 SUBTYPE mbc1100 -Cz+cpmdisk -Cz-f -Czmbc1000 -Cz--container=imd -D__SANYO__ -D__MB1100__ SUBTYPE mbc1160 -Cz+cpmdisk -Cz-f -Czmbc1200 -Cz--container=imd -D__SANYO__ -D__MBC1160__ SUBTYPE mbc200 -Cz+cpmdisk -Cz-f -Czmbc1200 -Cz--container=imd -lmbc200 -D__SANYO__ -D__MBC200__ -pragma-define:CONSOLE_ROWS=33 -pragma-define:CONSOLE_COLUMNS=80 -pragma-define:ansirows=33 SUBTYPE md2 -Cz+cpmdisk -Cz-f -Czmorrow2 -Cz--container=imd -D__MORROW__ SUBTYPE md3 -Cz+cpmdisk -Cz-f -Czmorrow3 -Cz--container=imd -D__MORROW__ SUBTYPE mbc2000 -Cz+cpmdisk -Cz-f -Czmbc2000 -Cz--container=imd -D__SANYO__ -D__MBC2000__ -clib=8080 SUBTYPE merchant -Cz+cpmdisk -Cz-f -Czmerchant -Cz--container=imd -ltrs80_cpm -D__TRS80__ SUBTYPE microbee40 -Cz+cpmdisk -Cz-f -Czmicrobee-ds40 -pragma-define:CONSOLE_COLUMNS=80 -pragma-define:CONSOLE_ROWS=24 -lmicrobee -D__BEE__ -Ca-D__BEE__ SUBTYPE microbee -Cz+cpmdisk -Cz-f -Czmicrobee-ds80 -pragma-define:CONSOLE_COLUMNS=80 -pragma-define:CONSOLE_ROWS=24 -lmicrobee -D__BEE__ -Ca-D__BEE__ SUBTYPE micromate -Cz+cpmdisk -Cz-f -Czmicromate -Cz--container=imd -D__MICROMATE__ SUBTYPE montezuma -Cz+cpmdisk -Cz-f -Czmontezuma -Cz--container=imd -ltrs80_cpm -D__TRS80__ SUBTYPE m4cpm3 -Cz+cpmdisk -Cz-f -Czm4cpm3 -Cz--container=imd -ltrs80_cpm -D__TRS80__ SUBTYPE msx -Cz+fat -Cz-f -Czmsxdos -Cz--container -Czdsk -D__MSX__ -pragma-define:__HAVE_TMS99X8=1 -lcpm_msx SUBTYPE mz80 -Cz+cpmdisk -Cz-f -Czmz80 -Cz--container=dsk -DSHARPMZ -D__SHARPMZ__ SUBTYPE mz800 -Cz+cpmdisk -Cz-f -Czmz800 -Cz--container=dsk -DSHARPMZ -D__SHARPMZ__ SUBTYPE mz2000 -Cz+cpmdisk -Cz-f -Czmz2000 -DSHARPMZ -D__SHARPMZ__ SUBTYPE mz2500 -Cz+cpmdisk -Cz-f -Czmz2500cpm -D__MZ2500__ SUBTYPE mz3500 -Cz+cpmdisk -Cz-f -Czmz3500 -Cz--container=raw -D__MZ3500__ SUBTYPE nabu -Cz+cpmdisk -Cz-f -Cznabupc -Cz--container=raw -lnabu_cpm -pragma-define:CONSOLE_COLUMNS=32 -pragma-define:CONSOLE_ROWS=24 -D__NABUPC__ -Ca-D__NABUPC__ -pragma-define:__HAVE_TMS99X8=1 SUBTYPE nabu-nshd8 -Cz+cpmdisk -Cz-f -Cznshd8 -Cz--container=raw -lnabu_cpm -pragma-define:CONSOLE_COLUMNS=32 -pragma-define:CONSOLE_ROWS=24 -D__NABUPC__ -Ca-D__NABUPC__ -pragma-define:__HAVE_TMS99X8=1 SUBTYPE naburn -Cz+cpmdisk -Cz-f -Cznaburn -Cz--container=raw -lnabu_cpm -pragma-define:CONSOLE_COLUMNS=32 -pragma-define:CONSOLE_ROWS=24 -D__NABUPC__ -Ca-D__NABUPC__ -pragma-define:__HAVE_TMS99X8=1 SUBTYPE nanos -Cz+cpmdisk -Cz-f -Czcaos -Cz--container=ana -D__NANOS__ -lnanos SUBTYPE nascom -Cz+cpmdisk -Cz-f -Cznascomcpm -Cz--container=raw -lnascomcpm -pragma-export:CONSOLE_DISPLAY=0xf800 -pragma-define:CONSOLE_ROWS=16 -pragma-define:ansirows=16 -D__NASCOM__ SUBTYPE omikron -Cz+cpmdisk -Cz-f -Czomikron -Cz--container=imd -ltrs80_cpm -D__TRS80__ SUBTYPE osborne1 -Cz+cpmdisk -Cz-f -Czosborne1 -lgfxosborne1 -Cz--container=imd -D__OSBORNE1__ SUBTYPE osborne1sd -Cz+cpmdisk -Cz-f -Czosborne1sd -lgfxosborne1 -Cz--container=imd -D__OSBORNE1__ SUBTYPE partner -Cz+cpmdisk -Cz-f -Czidpfdd -Cz--container=raw -D__PARTNER__ SUBTYPE pasopia -Cz+cpmdisk -Cz-f -Czpasopia -Cz--container=d88 -D__PASOPIA__ SUBTYPE pc6001 -Cz+cpmdisk -Cz-f -Czpc6001 -Cz--container=d88 -D__PC6001__ SUBTYPE pc8001 -Cz+cpmdisk -Cz-f -Czpc8001 -Cz--container=d88 -D__PC88__ SUBTYPE pc88 -Cz+cpmdisk -Cz-f -Czpc88 -Cz--container=d88 -D__PC88__ SUBTYPE pcw40 -Cz+cpmdisk -Cz-f -Czpcw40 -lpcw -pragma-define:CRT_ORG_GRAPHICS=61000 -pragma-define:REGISTER_SP=61000 -pragma-export:CLIB_PCW_FARHEAP_BANK_START=0x90 -pragma-export:CLIB_PCW_DEFAULT_BANK=0x86 SUBTYPE pcw80 -Cz+cpmdisk -Cz-f -Czpcw80 -lpcw -pragma-define:CRT_ORG_GRAPHICS=61000 -pragma-define:REGISTER_SP=61000 -pragma-export:CLIB_PCW_FARHEAP_BANK_START=0x90 -pragma-export:CLIB_PCW_DEFAULT_BANK=0x86 SUBTYPE ptcpm -Cz+cpmdisk -Cz-f -Czptcpm -Cz--container=imd -ltrs80_cpm -lgfxtrs80m2 -D__TRS80__ -D__TRS80II__ SUBTYPE px -Cz+px -lpx8 -Ca-IDESTDIR/lib/target/px8/def -D__PX8__ SUBTYPE pxansi -Cz+px -lpx8 -Ca-IDESTDIR/lib/target/px8/def -pragma-need=ansiterminal -D__CONIO_VT100 -pragma-define:ansicolumns=60 -pragma-define:ansipixels=480 -pragma-define:ansirows=10 -pragma-redirect:ansifont=_font_8x6_px -pragma-define:ansifont_is_packed=0 -D__PX8__ SUBTYPE px4 -Cz+px -lpx4 -Cz--32k -D__PX4__ SUBTYPE px4ansi -Cz+px -lpx4 -Cz--32k -pragma-need=ansiterminal -D__CONIO_VT100 -pragma-define:ansipixels=240 -pragma-define:ansirows=8 -pragma-define:ansicolumns=30 -D__PX4__ SUBTYPE px8 -Cz+px -lpx8 -Ca-IDESTDIR/lib/target/px8/def -D__PX8__ SUBTYPE px8ansi -Cz+px -lpx8 -Ca-IDESTDIR/lib/target/px8/def -pragma-need=ansiterminal -D__CONIO_VT100 -pragma-define:ansicolumns=60 -pragma-define:ansipixels=480 -pragma-define:ansirows=10 -pragma-redirect:ansifont=_font_8x6_px -pragma-define:ansifont_is_packed=0 -D__PX8__ SUBTYPE qc10 -Cz+cpmdisk -Cz-f -Czqc10 -D__QC10__ -D__QX10__ SUBTYPE qc10m1 -Cz+cpmdisk -Cz-f -Czqc10m1 -D__QC10__ -D__QX10__ SUBTYPE rc700 -Cz+cpmdisk -Cz-f -Czrc700 -Cz--container=imd -D__RC700__ -pragma-define:CONSOLE_ROWS=25 -pragma-define:CONSOLE_COLUMNS=80 -lrc700 -pragma-export:GRAPHICS_CHAR_SET=127 -pragma-export:GRAPHICS_CHAR_UNSET=32 SUBTYPE rainbow -Cz+cpmdisk -Cz-f -Czrainbow -Cz--container=imd -D__RAINBOW__ SUBTYPE sagafox -Cz+cpmdisk -Cz-f -Czsagafox -Cz--container=imd SUBTYPE sam -Cz+cpmdisk -Cz-f -Czpcw80 -Cz--container=raw -Cz--extension=.dsk -lsam_cpm -startup=3 SUBTYPE seequa -Cz+cpmdisk -Cz-f -Czseequa -Cz--container=imd SUBTYPE smc777 -Cz+cpmdisk -Cz-f -Czsmc777 -D__SMC777__ -lsmc777_cpm -pragma-define:CONSOLE_COLUMNS=80 -pragma-define:CONSOLE_ROWS=25 SUBTYPE svi -Cz+cpmdisk -Cz-f -Czsvi-40ss -D__SVI__ -pragma-define:__HAVE_TMS99X8=1 SUBTYPE teletek -Cz+cpmdisk -Cz-f -Czteletekds -Cz--container=imd -D__TELETEK__ SUBTYPE televideo -Cz+cpmdisk -Cz-f -Cztelevideo -Cz--container=imd -D__TELEVIDEO__ SUBTYPE tiki100 -Cz+cpmdisk -Cz-f -Cztiki100ss -D__TIKI100__ -ltiki100 -pragma-define:CRT_ORG_GRAPHICS=48000 -pragma-define:REGISTER_SP=48000 -pragma-define:CONSOLE_ROWS=32 -pragma-define:CONSOLE_COLUMNS=128 SUBTYPE tiki100_400k -Cz+cpmdisk -Cz-f -Cztiki100ds -D__TIKI100__ -ltiki100 -pragma-define:CRT_ORG_GRAPHICS=48000 -pragma-define:REGISTER_SP=48000 -pragma-define:CONSOLE_ROWS=32 -pragma-define:CONSOLE_COLUMNS=128 SUBTYPE tim011 -Cz+cpmdisk -Cz-f -Cztim011 -D__TIM011__ -Cz--container=raw -ltim011 -clib=z180 SUBTYPE v1050 -Cz+cpmdisk -Cz-f -Czv1050 -Cz--container=imd -D__V1050__ -lv1050 -pragma-define:CONSOLE_ROWS=25 -pragma-define:CONSOLE_COLUMNS=80 SUBTYPE cortex -Cz+cpmdisk -Cz-f -Czcortex -Cz--container=imd -D__V1050__ -lv1050 -pragma-define:CONSOLE_ROWS=25 -pragma-define:CONSOLE_COLUMNS=80 SUBTYPE vector06c -Cz+cpmdisk -Cz-f -Czvector06c -Cz--container=raw -D__VECTOR06C__ -clib=8080 SUBTYPE vt180 -Cz+cpmdisk -Cz-f -Czvt180 -Cz--container=imd -D__VT180__ SUBTYPE x1 -Cz+cpmdisk -Cz-f -Czsharpx1 -Cz--container=d88 -D__SHARPX1__ -pragma-define:CONSOLE_ROWS=24 -pragma-define:CONSOLE_COLUMNS=80 -lx1_cpm -pragma-define:CLIB_DEFAULT_SCREEN_MODE=1 SUBTYPE x820 -Cz+cpmdisk -Cz-f -Czx820 -Cz--container=imd -D__X820__ -lx820ii -pragma-define:CONSOLE_ROWS=24 -pragma-define:CONSOLE_COLUMNS=80 -pragma-define:CRT_ORG_GRAPHICS=50000 -pragma-define:TAR__clib_gfx_fatpix=1 SUBTYPE z80pack -Cz+cpmdisk -Cz-f -Czz80pack -Cz--container=raw -Cz--extension=.dsk SUBTYPE z80retro -lz80retro_cpm -pragma-define:CONSOLE_COLUMNS=40 -pragma-define:CONSOLE_ROWS=24 -D__Z80RETRO__ -pragma-define:__HAVE_TMS99X8=1 SUBTYPE zxplus3 -Cz+cpmdisk -Cz-f -Czplus3 -Cz--container=dsk -D__ZXPLUS3__ -lzxcpm -startup=3 SUBTYPE diskface -Cz+cpmdisk -Cz-f -Czdiskface -Cz--container=raw -Cz--extension=.raw -D__ZXPLUS3__ -lzxcpm -startup=4 SUBTYPE zxlec -Cz+zx -Cz--lec-cpm -D__ZXPLUS3__ -lzxcpm -startup=5 SUBTYPE lec80t -Cz+cpmdisk -Cz-f -Czlec80t -Cz--container=imd -D__ZXPLUS3__ -lzxcpm -startup=5 SUBTYPE scorpion -Cz+cpmdisk -Cz-f -Czscorpion -Cz--container=raw -Cz--extension=.trd -D__ZXPLUS3__ -lzxcpm -startup=3 SUBTYPE atmturbo -Cz+cpmdisk -Cz-f -Czatmturbo -Cz--container=raw -Cz--extension=.trd -D__ZXPLUS3__ -lzxcpm -startup=3 SUBTYPE quorum -Cz+cpmdisk -Cz-f -Czquorum -Cz--container=dsk -D__ZXPLUS3__ -lzxcpm -startup=3 SUBTYPE hc91 -Cz+cpmdisk -Cz-f -Czhc91 -Cz--container=dsk -D__ZXPLUS3__ -lzxcpm -startup=3 SUBTYPE hc2000 -Cz+cpmdisk -Cz-f -Czhc2000 -Cz--container=dsk -D__ZXPLUS3__ -lzxcpm -startup=3 ================================================ FILE: docs/VGA_from_protected_mode.txt ================================================ vga_mode13.s (ACK / Minix-386 assembly) .globl set_mode13h .globl set_textmode .globl init_vga_memory .globl A000 .data ! ------------------------------------------------------- ! DPMI Real-Mode Register Structure (44 bytes) ! Layout (ACK labels below). This block is zeroed before use. ! ------------------------------------------------------- RMRegs: RM_Edi: .long 0 ! offset 0 RM_Esi: .long 0 ! offset 4 RM_Ebp: .long 0 ! offset 8 RM_Res: .long 0 ! offset 12 (reserved) RM_Ebx: .long 0 ! offset 16 RM_Edx: .long 0 ! offset 20 RM_Ecx: .long 0 ! offset 24 RM_Eax: .long 0 ! offset 28 RM_Flags: .word 0 ! offset 32 RM_ES: .word 0 ! offset 34 RM_DS: .word 0 ! offset 36 RM_FS: .word 0 ! offset 38 RM_GS: .word 0 ! offset 40 RM_IP: .word 0 ! offset 42 RM_CS: .word 0 ! offset 44 (note: some hosts expect 44+; we keep labels for compatibility) RM_SP: .word 0 RM_SS: .word 0 RMRegs_end: ! ------------------------------------------------------- ! Storage for protected-mode pointer/selector for A0000h ! The C side expects 'unsigned char *A000' symbol. ! ------------------------------------------------------- A000: .long 0 .text ! ======================================================= ! void set_mode13h(void) ! - zero RM register block ! - set EAX = 0x0013 (BIOS: AH=0 AL=13h) ! - call DPMI: AX=0x0300, BL=0x10 (simulate int 10h) ! ======================================================= set_mode13h: ! Clear RM register structure bytewise leal RMRegs, %edi movl $0, %eax movl $((RMRegs_end - RMRegs)), %ecx 1: movb %al, (%edi) incl %edi loop 1b ! Set EAX = 0x00000013 for BIOS int 10h (set video mode) movl $0x00000013, RM_Eax ! Prepare DPMI simulate real-mode int: ! AX = 0x0300, BL = int number (0x10) movw $0x0300, %ax movb $0x10, %bl movb $0x00, %bh ! ES:DI -> pointer to RMRegs (DPMI expects a far pointer here) leal RMRegs, %edi int $0x31 ret ! ======================================================= ! void set_textmode(void) ! - same as above but AX = 0x0003 (text mode 03h) ! ======================================================= set_textmode: ! Clear RM register structure leal RMRegs, %edi movl $0, %eax movl $((RMRegs_end - RMRegs)), %ecx 2: movb %al, (%edi) incl %edi loop 2b ! AX = 0x0003 (text mode) movl $0x00000003, RM_Eax movw $0x0300, %ax movb $0x10, %bl movb $0x00, %bh leal RMRegs, %edi int $0x31 ret ! ======================================================= ! void init_vga_memory(void) ! - map physical A0000h (0xA0000) into protected-mode pointer ! - uses DPMI function 0x0800 (service varies by host), ! many hosts return selector:offset in EAX/Ebx — this is ! somewhat host-dependent; the simple approach below ! uses INT 31h with AX=0x0800 (allocate/ map) which on ! many DPMI hosts returns linear pointer in EAX. ! - After call we store EAX into A000 (caller reads it as pointer) ! ======================================================= init_vga_memory: ! physical base = 0x000A0000 movl $0x000A0000, %ebx ! size = 0x10000 (64K) movl $0x00010000, %ecx ! access flags: 1 = read/write (host-specific) movl $0x00000001, %edx ! DPMI function to map physical memory -> AX = 0x0800 movw $0x0800, %ax int $0x31 ! store returned pointer/selector (EAX) into A000 movl %eax, A000 ret vga.h (C header) /* vga.h */ #ifndef VGA_H #define VGA_H /* switch to VGA 320x200x256 */ void set_mode13h(void); /* restore text mode 80x25 */ void set_textmode(void); /* map VGA memory A0000 -> returns pointer in global A000 (extern) */ void init_vga_memory(void); /* extern pointer to VGA linear memory (set by init_vga_memory) */ extern unsigned char *A000; #endif ================================================ FILE: docs/VZ.txt ================================================ VZ keyboard echo fix *((byte *)0x7839) |= 1; (that is, set bit 0 to "1") ================================================ FILE: docs/XL.md ================================================ ## BUILDING PROJECTS We recommend to use `xl` (equivalent to `xl build`) to build projects. ### Using `xl` I recommend that you use `xl build`: `xl [game_or_test_name] [optional system_name] [optional number of threads]` A convenient shortcut is using just `xl` as follows: `xl [project_name] [optional system_name] [optional number of threads]` The `[optional system_name]` parameter is the name of the target. If no target is specified then the native target (the host terminal) is implied. The `[optional number of threads]` is used to specify the number of threads to use for multiple targets that can be built in parallel. Examples: - `xl snake` -> It builds Cross Snake for the native console by using `gcc` and `ncurses`. - `xl bomber atari` -> It builds Cross Bomber for the Atari 8-bit target (by using the appropriate cross-compiler, i.e., CC65) - `xl snake vic20` -> It builds Cross Snake for the Commodore Vic 20. - `xl games msx` -> It builds all game projects for the MSX target (by using the appropriate cross-compiler, i.e., the ones in Z88DK). - `xl bomber cc65` -> It builds Cross Bomber for all targets that use CC65. - `xl examples c64` -> It builds all examples for the Commodore 64 target Remark: All binaries will be in the `build` directory (same depth level as `src`). ------------------------------------------- ## CREATING A NEW GAME PROJECT In order to create a new game project we can use the `xl create` scripts that will create the necessary initial source code files, graphic assets and Makefile inside a folder in the `games` folder. The script is used as follows: `xl create [game project name] [initial code type]` where `[initial code type]` can be - `helloworld` or empty for initial code that only displays 'hello world' - `game` for an initial code for a standard game with a main loop and a level loop - `demo` for an initial code that uses most APIs. Examples: - `xl create foo` -> It creates a new game project `foo` with a trivial code that initializes sound, input and graphics and just displays `hello world` on the screen. - `xl create bar game` -> It creates a new game project `bar` with code that initializes sound, input and graphics and contains the main loops that may be used in a standard game. - `xl create foobar demo` -> It creates a new game project `foobar` with code that initializes sound, input and graphics and contains code that shows how to use most APIs. ------------------------------------------- ## CLEANING TEMPORARY FILES AND BINARIES If you want to remove built binaries and temporary files that are produced during a build you can use 'xl clean'. `xl clean` -------------------------------------------- ## DELETING PROJECTS Non-built-in game projects can be deleted trhough the `xl delete` script in a very simple way: `xl delete [game project name]` Example: `xl delete foo` -> It removes the `foo` source code, assets and Makefile files ================================================ FILE: docs/alt_conio_fonts.s ================================================ ; The internal font structure for Atari7800 needs a full set of 128 ; characters. Each character is 16 x 8 bits. ; The font consists of 8 rows of data: ; row7 ; row6 ; row5 ; row4 ; row3 ; row2 ; row1 ; row0 ; Each row is 256 bytes long ; As we have 2 bits per pixel we need 2 bytes to represent ; one character. So we can fit 128 characters in this font ; When you later use the font you must address the characters as ; 0, 2, 4, 6, ... 254 ; Odd indices cannot be used. .export _conio_font .rodata .align 256 _conio_font: .byte $FF, $AA, $55, $FF, $55, $FF, $55, $FF ; SPACE .byte $0, $0, $0, $0, $1, $40, $0, $0 .byte $0, $0, $0, $0, $0, $0, $0, $0 .byte $0, $0, $0, $0, $0, $0, $0, $0 .byte $0, $0, $0, $0, $0, $0, $0, $0 .byte $0, $0, $0, $0, $0, $0, $0, $0 .byte $0, $0, $0, $0, $0, $0, $0, $0 .byte $0, $0, $0, $0, $0, $0, $0, $0 .byte $0, $0, $0, $0, $0, $0, $0, $0 .byte $0, $0, $0, $0, $0, $0, $0, $0 .byte $0, $0, $0, $0, $0, $0, $82, $82 .byte $0, $0, $28, $0, $0, $0, $0, $0 .byte $2, $80, $0, $0, $0, $0, $0, $0 .byte $0, $0, $0, $0, $0, $0, $0, $0 .byte $0, $0, $0, $0, $0, $0, $0, $0 .byte $0, $0, $0, $0, $0, $0, $0, $0 .byte $0, $0, $0, $0, $0, $0, $0, $0 .byte $0, $0, $0, $0, $0, $0, $0, $0 .byte $0, $0, $0, $0, $0, $0, $0, $0 .byte $0, $0, $0, $0, $0, $0, $0, $0 .byte $0, $0, $0, $0, $0, $0, $0, $0 .byte $0, $0, $c3, $c3, $0, $0, $3c, $0 .byte $0, $0, $0, $0, $3, $c0, $0, $0 .byte $0, $0, $0, $0, $0, $0, $0, $0 .byte $0, $0, $0, $0, $0, $0, $0, $0 .byte $0, $0, $0, $0, $0, $0, $0, $0 .byte $0, $0, $0, $0, $0, $0, $0, $0 .byte $0, $0, $0, $0, $0, $0, $0, $0 .byte $0, $0, $0, $0, $0, $0, $0, $0 .byte $0, $0, $0, $0, $0, $0, $0, $0 .byte $0, $0, $0, $0, $0, $0, $0, $0 .byte $0, $0, $0, $0, $0, $0, $ff, $ff .byte $AA, $FF, $55, $FF, $55, $FF, $55, $FF ; SPACE .byte $0, $0, $5, $0, $1, $40, $15, $50 .byte $55, $50, $55, $50, $15, $40, $1, $54 .byte $15, $40, $15, $40, $5, $0, $15, $40 .byte $15, $0, $50, $50, $55, $50, $5, $50 .byte $55, $40, $55, $54, $55, $0, $5, $54 .byte $50, $50, $15, $40, $15, $40, $54, $14 .byte $55, $54, $50, $14, $50, $14, $5, $40 .byte $55, $0, $1, $50, $54, $14, $15, $40 .byte $15, $40, $55, $50, $5, $0, $50, $14 .byte $50, $14, $15, $40, $55, $54, $22, $88 .byte $a, $0, $a, $0, $0, $0, $a, $0 .byte $2, $80, $2a, $a0, $aa, $a0, $aa, $a0 .byte $2a, $80, $2, $a8, $2a, $80, $2a, $80 .byte $a, $0, $2a, $80, $2a, $0, $a0, $a0 .byte $aa, $a0, $a, $a0, $aa, $80, $aa, $a8 .byte $aa, $0, $a, $a8, $a0, $a0, $2a, $80 .byte $2a, $80, $a8, $28, $aa, $a8, $a0, $28 .byte $a0, $28, $a, $80, $aa, $0, $2, $a0 .byte $a8, $28, $2a, $80, $2a, $80, $aa, $a0 .byte $a, $0, $a0, $28, $a0, $28, $2a, $80 .byte $aa, $a8, $33, $cc, $f, $0, $f, $0 .byte $0, $0, $f, $0, $3, $c0, $3f, $f0 .byte $ff, $f0, $ff, $f0, $3f, $c0, $3, $fc .byte $3f, $c0, $3f, $c0, $f, $0, $3f, $c0 .byte $3f, $0, $f0, $f0, $ff, $f0, $f, $f0 .byte $ff, $c0, $ff, $fc, $ff, $0, $f, $fc .byte $f0, $f0, $3f, $c0, $3f, $c0, $fc, $3c .byte $ff, $fc, $f0, $3c, $f0, $3c, $f, $c0 .byte $ff, $0, $3, $f0, $fc, $3c, $3f, $c0 .byte $3f, $c0, $ff, $f0, $f, $0, $f0, $3c .byte $f0, $3c, $3f, $c0, $ff, $fc, $0, $0 .byte $FF, $AA, $55, $FF, $55, $FF, $55, $FF ; SPACE .byte $0, $0, $5, $0, $1, $40, $54, $14 .byte $5, $0, $50, $50, $50, $50, $0, $50 .byte $50, $50, $50, $50, $5, $0, $50, $50 .byte $1, $40, $50, $50, $14, $14, $14, $14 .byte $14, $50, $14, $4, $14, $0, $14, $14 .byte $50, $50, $5, $0, $50, $50, $14, $14 .byte $14, $14, $50, $14, $50, $14, $14, $50 .byte $14, $0, $15, $40, $14, $14, $50, $50 .byte $5, $0, $50, $50, $15, $40, $54, $54 .byte $14, $50, $5, $0, $14, $14, $a, $a0 .byte $0, $0, $a, $0, $0, $0, $a, $0 .byte $2, $80, $a8, $28, $a, $0, $a0, $a0 .byte $a0, $a0, $0, $a0, $a0, $a0, $a0, $a0 .byte $a, $0, $a0, $a0, $2, $80, $a0, $a0 .byte $28, $28, $28, $28, $28, $a0, $28, $8 .byte $28, $0, $28, $28, $a0, $a0, $a, $0 .byte $a0, $a0, $28, $28, $28, $28, $a0, $28 .byte $a0, $28, $28, $a0, $28, $0, $2a, $80 .byte $28, $28, $a0, $a0, $a, $0, $a0, $a0 .byte $2a, $80, $a8, $a8, $28, $a0, $a, $0 .byte $28, $28, $f, $f0, $0, $0, $f, $0 .byte $0, $0, $f, $0, $3, $c0, $fc, $3c .byte $f, $0, $f0, $f0, $f0, $f0, $0, $f0 .byte $f0, $f0, $f0, $f0, $f, $0, $f0, $f0 .byte $3, $c0, $f0, $f0, $3c, $3c, $3c, $3c .byte $3c, $f0, $3c, $c, $3c, $0, $3c, $3c .byte $f0, $f0, $f, $0, $f0, $f0, $3c, $3c .byte $3c, $3c, $f0, $3c, $f0, $3c, $3c, $f0 .byte $3c, $0, $3f, $c0, $3c, $3c, $f0, $f0 .byte $f, $0, $f0, $f0, $3f, $c0, $fc, $fc .byte $3c, $f0, $f, $0, $3c, $3c, $0, $0 .byte $AA, $FF, $55, $FF, $55, $FF, $55, $FF ; SPACE .byte $55, $55, $0, $0, $1, $40, $55, $14 .byte $5, $0, $14, $0, $0, $50, $55, $54 .byte $0, $50, $50, $50, $5, $0, $50, $50 .byte $0, $50, $55, $50, $14, $14, $50, $0 .byte $14, $14, $14, $40, $14, $40, $50, $54 .byte $50, $50, $5, $0, $50, $50, $14, $50 .byte $14, $4, $51, $14, $50, $54, $50, $14 .byte $14, $0, $51, $50, $14, $50, $1, $50 .byte $5, $0, $50, $50, $50, $50, $55, $54 .byte $5, $40, $5, $0, $5, $4, $a8, $2a .byte $a, $0, $0, $0, $aa, $aa, $0, $0 .byte $2, $80, $aa, $28, $a, $0, $28, $0 .byte $0, $a0, $aa, $a8, $0, $a0, $a0, $a0 .byte $a, $0, $a0, $a0, $0, $a0, $aa, $a0 .byte $28, $28, $a0, $0, $28, $28, $28, $80 .byte $28, $80, $a0, $a8, $a0, $a0, $a, $0 .byte $a0, $a0, $28, $a0, $28, $8, $a2, $28 .byte $a0, $a8, $a0, $28, $28, $0, $a2, $a0 .byte $28, $a0, $2, $a0, $a, $0, $a0, $a0 .byte $a0, $a0, $aa, $a8, $a, $80, $a, $0 .byte $a, $8, $fc, $3f, $f, $0, $0, $0 .byte $ff, $ff, $0, $0, $3, $c0, $ff, $3c .byte $f, $0, $3c, $0, $0, $f0, $ff, $fc .byte $0, $f0, $f0, $f0, $f, $0, $f0, $f0 .byte $0, $f0, $ff, $f0, $3c, $3c, $f0, $0 .byte $3c, $3c, $3c, $c0, $3c, $c0, $f0, $fc .byte $f0, $f0, $f, $0, $f0, $f0, $3c, $f0 .byte $3c, $c, $f3, $3c, $f0, $fc, $f0, $3c .byte $3c, $0, $f3, $f0, $3c, $f0, $3, $f0 .byte $f, $0, $f0, $f0, $f0, $f0, $ff, $fc .byte $f, $c0, $f, $0, $f, $c, $0, $0 .byte $FF, $AA, $55, $FF, $55, $FF, $55, $FF ; SPACE .byte $55, $55, $0, $0, $1, $40, $51, $54 .byte $5, $0, $5, $40, $5, $40, $50, $50 .byte $0, $50, $55, $40, $1, $40, $15, $40 .byte $15, $50, $50, $50, $15, $50, $50, $0 .byte $14, $14, $15, $40, $15, $40, $50, $0 .byte $55, $50, $5, $0, $0, $50, $15, $40 .byte $14, $0, $55, $54, $51, $54, $50, $14 .byte $15, $50, $50, $50, $15, $50, $15, $0 .byte $5, $0, $50, $50, $50, $50, $51, $14 .byte $5, $40, $15, $40, $1, $40, $a8, $2a .byte $2, $80, $0, $0, $aa, $aa, $0, $0 .byte $2, $80, $a2, $a8, $a, $0, $a, $80 .byte $a, $80, $a0, $a0, $0, $a0, $aa, $80 .byte $2, $80, $2a, $80, $2a, $a0, $a0, $a0 .byte $2a, $a0, $a0, $0, $28, $28, $2a, $80 .byte $2a, $80, $a0, $0, $aa, $a0, $a, $0 .byte $0, $a0, $2a, $80, $28, $0, $aa, $a8 .byte $a2, $a8, $a0, $28, $2a, $a0, $a0, $a0 .byte $2a, $a0, $2a, $0, $a, $0, $a0, $a0 .byte $a0, $a0, $a2, $28, $a, $80, $2a, $80 .byte $2, $80, $fc, $3f, $3, $c0, $0, $0 .byte $ff, $ff, $0, $0, $3, $c0, $f3, $fc .byte $f, $0, $f, $c0, $f, $c0, $f0, $f0 .byte $0, $f0, $ff, $c0, $3, $c0, $3f, $c0 .byte $3f, $f0, $f0, $f0, $3f, $f0, $f0, $0 .byte $3c, $3c, $3f, $c0, $3f, $c0, $f0, $0 .byte $ff, $f0, $f, $0, $0, $f0, $3f, $c0 .byte $3c, $0, $ff, $fc, $f3, $fc, $f0, $3c .byte $3f, $f0, $f0, $f0, $3f, $f0, $3f, $0 .byte $f, $0, $f0, $f0, $f0, $f0, $f3, $3c .byte $f, $c0, $3f, $c0, $3, $c0, $0, $0 .byte $AA, $FF, $55, $FF, $55, $FF, $55, $FF ; SPACE .byte $0, $0, $0, $0, $1, $40, $50, $54 .byte $5, $0, $0, $50, $0, $50, $14, $50 .byte $55, $40, $50, $0, $0, $50, $50, $50 .byte $50, $50, $50, $50, $14, $14, $50, $0 .byte $14, $14, $14, $40, $14, $40, $50, $0 .byte $50, $50, $5, $0, $0, $50, $14, $50 .byte $14, $0, $55, $54, $55, $14, $50, $14 .byte $14, $14, $50, $50, $14, $14, $54, $0 .byte $5, $0, $50, $50, $50, $50, $50, $14 .byte $14, $50, $50, $50, $40, $50, $a, $a0 .byte $0, $a0, $0, $0, $0, $0, $0, $0 .byte $2, $80, $a0, $a8, $a, $0, $0, $a0 .byte $0, $a0, $28, $a0, $aa, $80, $a0, $0 .byte $0, $a0, $a0, $a0, $a0, $a0, $a0, $a0 .byte $28, $28, $a0, $0, $28, $28, $28, $80 .byte $28, $80, $a0, $0, $a0, $a0, $a, $0 .byte $0, $a0, $28, $a0, $28, $0, $aa, $a8 .byte $aa, $28, $a0, $28, $28, $28, $a0, $a0 .byte $28, $28, $a8, $0, $a, $0, $a0, $a0 .byte $a0, $a0, $a0, $28, $28, $a0, $a0, $a0 .byte $80, $a0, $f, $f0, $0, $f0, $0, $0 .byte $0, $0, $0, $0, $3, $c0, $f0, $fc .byte $f, $0, $0, $f0, $0, $f0, $3c, $f0 .byte $ff, $c0, $f0, $0, $0, $f0, $f0, $f0 .byte $f0, $f0, $f0, $f0, $3c, $3c, $f0, $0 .byte $3c, $3c, $3c, $c0, $3c, $c0, $f0, $0 .byte $f0, $f0, $f, $0, $0, $f0, $3c, $f0 .byte $3c, $0, $ff, $fc, $ff, $3c, $f0, $3c .byte $3c, $3c, $f0, $f0, $3c, $3c, $fc, $0 .byte $f, $0, $f0, $f0, $f0, $f0, $f0, $3c .byte $3c, $f0, $f0, $f0, $c0, $f0, $0, $0 .byte $FF, $AA, $55, $FF, $55, $FF, $55, $FF ; SPACE .byte $55, $FF, $55, $FF, $55, $FF, $50, $14 .byte $55, $FF, $55, $FF, $55, $FF, $5, $50 .byte $50, $0, $14, $0, $50, $50, $50, $50 .byte $50, $50, $15, $40, $14, $14, $14, $14 .byte $14, $50, $14, $4, $14, $4, $14, $14 .byte $50, $50, $5, $0, $0, $50, $14, $14 .byte $14, $0, $54, $54, $54, $14, $14, $50 .byte $14, $14, $50, $50, $14, $14, $50, $50 .byte $45, $10, $50, $50, $50, $50, $50, $14 .byte $50, $14, $50, $50, $50, $14, $22, $88 .byte $a0, $a0, $0, $0, $0, $0, $0, $0 .byte $2, $80, $a0, $28, $2a, $0, $a0, $a0 .byte $a0, $a0, $a, $a0, $a0, $0, $28, $0 .byte $a0, $a0, $a0, $a0, $a0, $a0, $2a, $80 .byte $28, $28, $28, $28, $28, $a0, $28, $8 .byte $28, $8, $28, $28, $a0, $a0, $a, $0 .byte $0, $a0, $28, $28, $28, $0, $a8, $a8 .byte $a8, $28, $28, $a0, $28, $28, $a0, $a0 .byte $28, $28, $a0, $a0, $8a, $20, $a0, $a0 .byte $a0, $a0, $a0, $28, $a0, $28, $a0, $a0 .byte $a0, $28, $33, $cc, $f0, $f0, $0, $0 .byte $0, $0, $0, $0, $3, $c0, $f0, $3c .byte $3f, $0, $f0, $f0, $f0, $f0, $f, $f0 .byte $f0, $0, $3c, $0, $f0, $f0, $f0, $f0 .byte $f0, $f0, $3f, $c0, $3c, $3c, $3c, $3c .byte $3c, $f0, $3c, $c, $3c, $c, $3c, $3c .byte $f0, $f0, $f, $0, $0, $f0, $3c, $3c .byte $3c, $0, $fc, $fc, $fc, $3c, $3c, $f0 .byte $3c, $3c, $f0, $f0, $3c, $3c, $f0, $f0 .byte $cf, $30, $f0, $f0, $f0, $f0, $f0, $3c .byte $f0, $3c, $f0, $f0, $f0, $3c, $0, $0 .byte $AA, $FF, $55, $FF, $55, $FF, $55, $FF ; SPACE .byte $55, $FF, $55, $FF, $55, $FF, $15, $50 .byte $55, $FF, $55, $FF, $55, $FF, $1, $50 .byte $55, $50, $5, $40, $55, $50, $15, $40 .byte $15, $40, $5, $0, $55, $50, $5, $50 .byte $55, $40, $55, $54, $55, $54, $5, $50 .byte $50, $50, $15, $40, $1, $54, $54, $14 .byte $55, $0, $50, $14, $50, $14, $5, $40 .byte $55, $50, $15, $40, $55, $50, $15, $40 .byte $55, $50, $50, $50, $50, $50, $50, $14 .byte $50, $14, $50, $50, $55, $54, $82, $82 .byte $2a, $80, $0, $0, $0, $0, $0, $0 .byte $2, $80, $2a, $a0, $a, $0, $2a, $80 .byte $2a, $80, $2, $a0, $aa, $a0, $a, $80 .byte $aa, $a0, $2a, $80, $2a, $80, $a, $0 .byte $aa, $a0, $a, $a0, $aa, $80, $aa, $a8 .byte $aa, $a8, $a, $a0, $a0, $a0, $2a, $80 .byte $2, $a8, $a8, $28, $aa, $0, $a0, $28 .byte $a0, $28, $a, $80, $aa, $a0, $2a, $80 .byte $aa, $a0, $2a, $80, $aa, $a0, $a0, $a0 .byte $a0, $a0, $a0, $28, $a0, $28, $a0, $a0 .byte $aa, $a8, $c3, $c3, $3f, $c0, $0, $0 .byte $0, $0, $0, $0, $3, $c0, $3f, $f0 .byte $f, $0, $3f, $c0, $3f, $c0, $3, $f0 .byte $ff, $f0, $f, $c0, $ff, $f0, $3f, $c0 .byte $3f, $c0, $f, $0, $ff, $f0, $f, $f0 .byte $ff, $c0, $ff, $fc, $ff, $fc, $f, $f0 .byte $f0, $f0, $3f, $c0, $3, $fc, $fc, $3c .byte $ff, $0, $f0, $3c, $f0, $3c, $f, $c0 .byte $ff, $f0, $3f, $c0, $ff, $f0, $3f, $c0 .byte $ff, $f0, $f0, $f0, $f0, $f0, $f0, $3c .byte $f0, $3c, $f0, $f0, $ff, $fc, $0, $0 ================================================ FILE: docs/articles/CALL_APPLE/apple2.txt ================================================ [INSERT LOGO PICTURE HERE] [If desired, also INSERT PHOTO OF THE AUTHOR] # INTRODUCTION The goal of this article is to present Cross-Lib, briefly show how to use it and present the 6 "universal" games I have written with it. By "universal" here I mean that these games will run on about 200 different systems (consoles, computers, arcade boards, pocket calculators, etc.) despite using the very same game code. A detailed description of Cross-Lib is not in the scope of this article. For more details we refer to the GitHub page: http://www.github.com/Fabrizio-Caruso/CROSS-LIB/ # WHAT IS CROSS-LIB? Cross-Lib (https://github.com/Fabrizio-Caruso/CROSS-LIB/) is a free open source tool for retro-coding for a multitude of 8-bit and vintage systems from the ‘80s (computers, consoles, pocket calculators, arcade boards, etc.) such as Apple //, all 8-bit Commodore computers, Atari 800, Amstrad CPC, Sinclair ZX 81, Sinclair ZX Spectrum, TRS-80 CoCo, Dragon 32, TRS-80 MC-10, Thomson Mo5 and To7, MSX, Oric-1, Oric Atmos, BBC Micro, etc. as well as consoles such as GameBoy, Sega Master System, GameGear, Nintendo NES, etc. and other devices such as Texas Instruments pocket calculators. The main CPU architectures are Zilog 80, MOS 6502, Intel 8080, Motorola 6803, Motorola 6809 and RCA 1802. Cross-Lib also supports several lesser known systems such as the Philips VG-5000, the Jupiter Ace and several exotic and rare systems such as the yugoslav Galaksija, the Hungarian Homlab-2, several computers from the Eastern German Robotron series such as the Robotron KC 85, etc. In particular for the Apple //, Cross-Lib currently supports the 6-color HGR mode for graphics, joystick input and a few 1-bit sound effects. A large but partial list of the supported systems is at the page: https://github.com/Fabrizio-Caruso/CROSS-LIB/blob/master/docs/STATUS.md. Cross-Lib has two main components: 1. A "universal" C library (e.g., a collection of C APIs mostly for input/output); 2. A Python script to manage game projects (e.g., to build, create game projects, etc.) and manipulate graphics assets (e.g., to create, import or rip assets) The main goal of Cross-Lib is to provide a *hardware abstraction layer* for hundreds of vintage systems so that the *very same* game code can be used without any adaptation for all its supported systems. Several articles have been published on Cross-Lib ([rg], [prog]) and its games ([ceo] and, in by this very magazine, [app]). # CROSS-LIB VS OTHER DEV-KITS Historically, 8-bit systems were programmed directly on the system and mostly in Assembly, or for simpler programs in interpreted BASIC. Today cross-development simplifies developers’ tasks a lot (modern editors, simplified debugging, efficient and quick compilation, etc.) and can be done in C. The problem with the portability of C code comes from the diversity of the machines and from the fact that ANSI C does not provide a standard library for graphics, sounds, input, etc. A partial solution is already provided by some dev-kits such as CC65 (for MOS 6502), Z88DK (for the Zilog 80 and Intel 8080), LCC1802 (for the RCA 1802), CMOC (for the Motorola 6890), etc. By using one of these dev-kits, we can exploit their cross-compatible libraries for input and output. On the other hand: 1. Each dev-kit only covers a subset of all 8-bit architectures. 2. Even within a given dev-kit, its libraries do not necessarily provide the very same input/output APIs across the entirety of its supported targets. Cross-Lib improves on these points and lets you do things that you cannot do with other tools: 1. cover many more vintage 8-bit architectures, including very exotic ones; 2. writing 100% WORA code, i.e., "write once, run anywhere" (after re-compilation); 3. using WORA graphics resources, i.e., define abstract graphics assets for several totally different systems; 4. using a simplified tool-chain to create, compile and test the games. The closest dev-kits to Cross-Lib with respect to these points are - 8-bit-Unity [un8] (meant to be used with CC65), which does incredible things but only for very few MOS 6502-based systems; - Z88DK, which has huge libraries but only covers Zilog 80 and Intel 8080 systems. On the other hand Cross-Lib is not a compiler. It uses several compilers to build the binary files (executable files, disk images, tape images, cartridge images, etc.) for retro-consoles and retro-computers. By providing an abstraction layer for all 8-bit systems, Cross-Lib makes some compromises with respect to what we could do if we were coding only for a specific system. In particular, graphics is somehow limited by what is possible on all systems. Sound effects are even more limited. # COMPILERS Cross-Lib is supposed to be used with C compilers but which ones? A native compiler (for example GCC) can be used to build native binaries that can be run, for instance, under Windows. Today the support for native compilation is limited to the text terminal, which means no graphics other than ASCII on the host machine. Currently Cross-Lib fully supports the following cross-compilers and dev-kits with graphics and sound effects for most of its targets: - CC65 [cc65] for most systems based on the MOS 6502 architecture; - Z88DK [z88dk] for systems based on the Zilog 80 and Intel 8080 architectures; - CMOC [cmoc] for systems that use the Motorola 6809; - LCC1802 [lcc1802] for systems that use the COSMAC RCA 1802 ; - GCC for TI [ti] for the Texas Instruments TI99/4A based on the 16-bit TMS9900. Cross-Lib also supports other compilers (currently with limited or absent graphics and sound effects) such as - ACK [ack] for 8088/8086, Intel 8080 CP/M, 386/68K/PPC/MIPS Linux and PDP11, - XTC68 [xtc68] for the Sinclair QL, - VBCC [vbcc] for the BBC Micro, BBC Master, the Amiga and others, - CC6303 [cc6303] for the Motorola 6803; - several versions of modded GCC to target vintage computers (Atari ST [st], Olivetti M20 [m20]). Cross-Lib supports a large sub-set of ANSI C89 because most available cross-compilers for 8-bit architectures only implement a sub-set of ANSI C89. Therefore we write in C (a sub-set of ANSI C C89) with Cross-Lib APIs for graphics, sounds, input. In particular we must avoid: - "float" and "double" types, - copies and parameters by value of "struct" objects, - any use of the heap. For hints on how to code efficiently for 8-bit systems we refer to [effc] and for specific hints on how to code with these compilers we refer to [c8b]. # INSTALLATION Cross-Lib itself does not require any real installation. It is enough to download the repository files (from the GitHub page) or to clone the repository with: git clone https://www.github.com/Fabrizio-Caruso/CROSS-LIB/ On the other hand it requires: - a POSIX environment (e.g., Windows with Cygwin, Linux, FreeBSD, etc.); - Make (GNU Make); - Python 2.7 or Python 3.* [optional but necessary to simplify many operations]; - JAVA [optional but required to generate floppy disk images for the Apple //]; - GCC compiler with ncurses libraries [optional]; - any compiler necessary to build for a desired target architecture (e.g., CC65, Z88DK, etc.) [optional but CC65 is necessary for the Apple //]. Once you have Cross-Lib with its dependencies in a POSIX environment, you should move to the "src" directory. Inside "src" you will find the "xl" Python script and the following directories - "cross-lib", which contains the library code; - "games" with built-in games; - "examples" with built-in examples; - "projects" with user-defined projects. If you have correctly installed just Makefile, Python and (native) GCC in a POSIX environment, it should already be possible to minimally use Cross-Lib to build the Chase game by running the following command inside the "src" directory: "xl chase gcc", which will build the game Chase in turn-based mode for the native console. # HOW TO USE THE XL SCRIPT If just one of the supported compilers is installed, Cross-Lib can be used with the "xl" Python script inside the "src" directory. If GCC with ncurses is installed, a native version of the games and examples can be built with: "xl build " or just "xl " For example "xl snake" builds the "snake" game for the native console. If a cross compiler (CC65, Z88DK, CMOC, CC6303, LCC1802, etc) is installed, the games and examples can be built for the corresponding systems. For example, if CC65 is installed, "xl horde apple2" builds the "horde" game for the Apple // with 6-color HGR graphics. The "xl" script takes several commands. In particular you can see a list of the available commands with "xl commands". You can get an explanation of each command with examples with "xl help ". If we want to create a new project, we need to use "xl create ", which will create a project with a trivial "hello world" example inside the "projects" directory. We can also start with a template code for a game if we pass the additional parameter "game": "xl create game". # HELLO WORLD Coding with Cross-Lib is like normal coding in C (with ANSI C89) with the only addition that all input/output is done through Cross-Lib APIs. Cross-Lib comes with many examples in the src/examples/ directory as well as a few games in the src/games directory. Both of which can be used to learn how to code with Cross-Lib. We could start to look at src/examples/helloworld/, whose main.c files contains: #include "cross_lib.h" int main(void) { _XL_INIT_GRAPHICS(); _XL_CLEAR_SCREEN(); _XL_SET_TEXT_COLOR(_XL_WHITE); _XL_PRINT_CENTERED("HELLO WORLD"); while(1){}; return EXIT_SUCCESS; } We remark that all Cross-Lib specific functions start with the _XL_ prefix: 1. _XL_INIT_GRAPHICS() required to initialize the display ; 2. _XL_CLEAR_SCREEN() which cleans the content of the screen ; 3. _XL_SET_TEXT_COLOR(_XL_WHITE) which defines the color to be used by the text and characters ; 4. _XL_PRINT_CENTERED("HELLO WORLD") which displays "HELLO WORLD" on the center of the screen. If we want to use one of the examples or games as a starting point we can clone the project with: xl clone Or we can start from (almost) scratch with xl create Once we have a new project, we can build it with xl or xl if we want to build the project for the native terminal. We can run the project for the native terminal with: xl run For example we could run these commands: xl clone helloworld myhelloworld [to clone helloworld and create myhellworld] We modify the project myhelloworld (found inside ./src/projects/myhelloworld/) xl build myhelloworld (or equivalently xl myhelloworld) [to build a native binary of the new project] xl run myhelloworld [to run the new project] xl build myhelloworld apple2 [to build the same project for the Apple //] # CODING WITH ABSTRACTIONS In order to code with Cross-Lib for all targets at the same time, Cross-Lib uses several abstractions. Graphics is only tile-based. In the code, tiles are abstract as their exact shape will depend on the target type. The game code only sees tiles as macros _TILE_0, _TILE_1, _TILE_2, etc. Each concrete target will interpret tiles in different ways depending on whether the target can or cannot assign free shapes to tiles and on the number of pixels that define tiles on that system. Sound is currently only limited to few sound effects that are rendered somehow similarly across multiple targets. Input is limited to 4 directions and a single fire button. On each target this will be mapped to either 5 keys (usually I J K L SPACE) or the main joystick/controller/gamepad. Running "xl manual" will output a manual with all commands. # MAIN DEVELOPMENT FLOW Producing "universal" games with Cross-Lib for the developer boils down to these main steps: - Creating or cloning a project (with xl create or xl clone); - Writing the abstract game code in ANSI C with Cross-Lib APIs for input/output; - Manually creating or automatically importing abstract assets (with commands such as e.g., xl shapes, xl import, xl rip, xl tile); - Running the xl script to build the project for one or multiple targets (with xl build). The "xl build " command (or its equivalent short form "xl ") executes one or several Makefile targets, which generally: - generate a concrete asset file from the abstract asset files - compile the source code (game code and target-specific portions of Cross-Lib library); - include or link the asset files with the compiled source code; - if necessary a tool is used to create a usable disk/floppy/rom/cartridge image (this is the case for the Apple // for which disk images are generated). [INSERT FLOW PICTURE HERE] # GRAPHICS Graphics is performed by displaying "tiles", whose shape can be defined. The number of tiles is currently limited to 27 but future versions of Cross-Lib will overcome this constraint. We can also display "characters" (letters, digits and the space character) but their shape is (currently) fixed. Characters and tiles have the same size. Characters are used for the text, whereas tiles are used for graphics. ASCII-only targets will be able to only assign ASCII shapes to tiles, whereas targets with real graphics will assign a "freely defined" shape to tiles. Currently each tile only has one tile-specific foreground color and a common background color. The definition of their shapes is not done in the C code. Instead it is done inside the /tiles directory, which contains sub-directories with files with tile definitions for the ASCII case and for the graphics-enabled targets, e.g., 8x8 (for most targets), 7x8 (for the Apple //), 6x8 (for the Oric series and NTSC COMX-35), etc... In the aforementioned files the shapes are described by either ASCII codes for ASCII-only targets or sequences of bytes for graphics-enabled targets. These files can be: 1. edited manually or 2. automatically imported from several programs such as CharPad [chPad] (with "xl import ") or 3. automatically ripped from BASIC or Assembly listings (with "xl rip ") or 4. generated by some simple "pictorial" text files with drawings made of "#" and "." characters (with "xl shapes or "xl tile ". You can see how to use these commands by running "xl help ". In the game code tile graphics is primarily performed by invoking these functions (to display or delete tiles): void _XL_DRAW_TILE(uint8_t x, uint8_t y, uint8_t tile_number, uint8_t tile_color); void _XL_DELETE(uint8_t x, uint8_t y); # SOUND Sound is even more limited than graphics and it is restricted to a few predefined effects. The sound commands have this form: void _XL__SOUND(void); For example: XL_EXPLOSION_SOUND() produces an explosion sound (or something vaguely similar to it depending on the target) For the Apple //, the sound effects are produced by simple 1-bit banging. # INPUT Input is limited to four directions and a single fire button. The primary input APIs are: uint8_t _XL_INPUT(void); uint8_t _XL_LEFT(uint8_t input); uint8_t _XL_RIGHT(uint8_t input); uint8_t _XL_UP(uint8_t input); uint8_t _XL_DOWN(uint8_t input); uint8_t _XL_FIRE(uint8_t input); where _XL_INPUT polls the input and the other functions are used to determined the specific input. # GRAPHICS, SOUNDS AND INPUT IN ONE EXAMPLE Inside the src/examples/animate directory you can find the following example that could be used as a blueprint for a simple game. This simple example has graphics, input and sound. When compiled for any of the possible systems, it will produce the very same program but the exact tile shapes and sounds will depend on the target. For example it can be compiled for the native console with: xl animate or for the Apple // with xl animate apple2 #include "cross_lib.h" #define MIN_X 1 #define MAX_X (XSize-2) #define MIN_Y 1 #define MAX_Y (YSize-2) #define DOWN_TILE _TILE_0 #define UP_TILE _TILE_1 #define RIGHT_TILE _TILE_2 #define LEFT_TILE _TILE_3 #define FIRE_TILE _TILE_4 int main(void) { uint8_t x; uint8_t y; uint8_t input; uint8_t tile; _XL_INIT_GRAPHICS(); _XL_INIT_SOUND(); _XL_INIT_INPUT(); _XL_CLEAR_SCREEN(); x = XSize/2; y = YSize/2; tile = DOWN_TILE; while(1) { _XL_SET_TEXT_COLOR(_XL_WHITE); _XL_PRINTD(0,0,3,x); _XL_PRINTD(5,0,3,y); input = _XL_INPUT(); if(_XL_UP(input)) { _XL_DELETE(x,y); tile = UP_TILE; --y; } else if (_XL_DOWN(input)) { _XL_DELETE(x,y); tile = DOWN_TILE; ++y; } else if (_XL_LEFT(input)) { _XL_DELETE(x,y); tile = LEFT_TILE; --x; } else if(_XL_RIGHT(input)) { _XL_DELETE(x,y); tile = RIGHT_TILE; ++x; } else if(_XL_FIRE(input)) { _XL_DRAW(x,y,FIRE_TILE,_XL_WHITE); _XL_EXPLOSION_SOUND(); _XL_SLOW_DOWN(16*_XL_SLOW_DOWN_FACTOR); } if((y>=MIN_Y)&&(y<=MAX_Y)&&(x>=MIN_X)&&(x<=MAX_X)) { _XL_DRAW(x,y,tile,_XL_WHITE); } else { _XL_DELETE(x,y); _XL_ZAP_SOUND(); _XL_SLOW_DOWN(16*_XL_SLOW_DOWN_FACTOR); x = XSize/2; y = YSize/2; } _XL_SLOW_DOWN(4*_XL_SLOW_DOWN_FACTOR); } return EXIT_SUCCESS; } # THE GAMES Cross-Lib comes with some games I have written with it. As for January 2023, it includes six games: - Cross Verbix - Cross Horde - Cross Snake - Cross Bomber - Cross Shoot - Cross Chase which are also referred to as Verbix, Horde, Snake, Bomber, Shoot, Chase. ## VERBIX Verbix is a Scrabble-like game that looks also a bit like Tetris. In this game you have to form valid 5-letter English words on the bottom row before the tower of letters reaches the top level. You can rotate the bottom row or any of the columns by moving in the 4 directions. You press fire to confirm the word. [INSERT SNAPSHOT HERE] ## HORDE Horde is a zombie-themed shooter with many power-ups and several different enemies, levels and special items to pick. You control a bow with a limited number of arrows. You get more arrows as a possible reward for killing some zombies. If you run out of arrows, you will get a few arrows after a short period. In each level you are confronted with a horde of zombies that become harder as you progress. [INSERT SNAPSHOT HERE] ## SNAKE Snake is my personal interpretation of a hybrid game between the arcade game Nibbler and the Nokia cell phone game Snake to which I have added more game elements. As in Nibbler the walls do not kill you and can be used to stop you and let you better control your movements. As in Nokia Snake the main goal is to eat apples. If you do not eat any apple for too long, the snake becomes faster and harder to control, consumes its energy and eventually dies. In each level you are also confronted with mines that kill you if the snake's head touches them. As a secondary goal you can collect rings. If you manage to get 3 or more rings without dying on a level, you will be rewarded with bonus items. The game has several secrets and level to discover. [INSERT SNAPSHOT HERE] ## BOMBER Bomber is a mini-game and clone of Air Attack (aka Blitz) that first appeared on the Commodore Pet. The game concept is horrible (not my own concept) but it can be addictive nevertheless. Your plane has to carpet-bomb an entire city in order to safely land on the road. Let us assume the city has no inhabitants. You do not control the plane and can only press fire to drop a bomb at a time. [INSERT SNAPSHOT HERE] ## SHOOT Shoot is a shooter somehow similar to Robotron. You have to kill a horde of ghosts on each level. You can kill them by hitting them many times or by hitting them enough times to push them against the walls (mortal only for them). You can also kill them by placing mines but you need to get the mine item (with 3 mines). A mine kills instantly common enemies. At the end of each level when only few ghosts are left or if you survive without killing enemies long enough or in boss levels, you are confronted by some hard-to-kill skull-shaped enemies. As a secondary goal you can complete the level by killing the skulls before the last ghosts and by doing so you unlock extra items and secrets in the next levels. Destroying the missile bases can also unlock items. The game has many secrets, levels and items to discover. [INSERT SNAPSHOT HERE] ## CHASE Cross Chase is somehow similar to Daleks / Gnome Robots. You need to lure your pursuers into the mines. The main difference is that it is a real-time game and that it has several secrets items and power-ups to pick. Similarly to Shoot, at the end of each level or in boss levels, you are confronted by a boss (a skull), which can only be killed by several bullets fired by the gun item. You can complete the level by killing the skull before the last enemy and by doing so you unlock extra items and secrets in the next levels. Destroying the missile bases can also unlock items. [INSERT SNAPSHOT HERE] # FUTURE DEVELOPMENT Cross-Lib is actively developed. Planned future developments are: - support for more targets and architectures (e.g., Apple ||gs, Apple 1, etc.); - improved targets (e.g, DHGR mode for the 80-column capable Apple // models); - improved APIs (more tiles, improved sounds, etc.); - simplified setup (docker file with all compilers, tools and dependencies); - improved scripts to handle graphics assets; - improved support for the native target; - more games. # BIBLIOGRAPHY [ack] ACK, Tanenbaum A., Jacobs C. et al., C compiler for Intel 8088, PDP 11, CP/M-80,etc., https://github.com/davidgiven/ack [app] Cross Chase: A Massively 8-bi Multi-System Game, Caruso F., Call-A.P.P.L.E., vol. 28, No. 1, Feb 2018, pages 31-33, http://www.callapple.org [c8b] 8-bit C, Caruso F., https://github.com/Fabrizio-Caruso/8bitC [cc6303] CC6303, Cox A., C compiler for the Motorola 6800 and 6803, https://github.com/EtchedPixels/CC6303 [cc65] CC65, C compiler for the MOS 6502, https://sourceforge.net/projects/cc65/ [ceo] Cross Chase, Caruso F., CEO-MAG, No. 327-328, Juillet-Août 2017, https://ceo.oric.org/ [chPad] CharPad, Subchrist Software, https://subchristsoftware.itch.io/charpad-c64-free [cmoc] CMOC, Sarrazin P., C compiler for the Motorola 6809, https://perso.b2b2c.ca/~sarrazip/dev/cmoc.html [effc] Efficient C Code for 8-bit Microcontrollers, Jones N., https://barrgroup.com/embedded-systems/how-to/efficient-c-code [m20] Z8KGCC, Groessler C., GCC modded for the Olivetti M20, http://www.z80ne.com/m20/sections/download/z8kgcc/z8kgcc.html [lcc1802] LCC1802, Rowe B., C compiler for the RCA 1802, https://github.com/bill2009/lcc1802 [prog] Cross-Lib, Caruso F., Programmez! Hors Série #6, pages 72-82. [rg] Interview to F. Caruso about Cross-Lib, RetroGamer #240, page 100, https://www.retrogamer.net/ [st] GCC, Rivière V., modded for the Atari ST, http://vincent.riviere.free.fr/soft/m68k-atari-mint/ [ti] GCC, (Insomnia), modded for the TI99/4A, http://atariage.com/forums/topic/164295-gcc-for-the-ti [un8] 8-Bit Unity, Beaucamp A. (8-bit Dude), http://8bit-unity.com/ [vbcc] VBCC, Barthelmann V., C compiler for the BBC Micro, BBC Master, Amiga, etc., http://www.compilers.de/vbcc.html [xtc68] XTC68, Hudson J., C compiler Sinclair QL, https://github.com/stronnag/xtc68 [z88dk] Z88DK, C compiler and dev-kit for the Zilog 80 and Intel 8080 architectures. ================================================ FILE: docs/articles/CROSS_LIB_PUBLIC.rtf ================================================ [File too large to display: 17.4 MB] ================================================ FILE: docs/articles/CROSS_LIB_PUBLIC_ENG.rtf ================================================ [File too large to display: 17.4 MB] ================================================ FILE: docs/articles/article.txt ================================================ CROSS CHASE A massively 8-bit multi-system game MYSELF - THE AUTHOR My name is Fabrizio Caruso, I am a software engineer and a retro-computing enthusiast and collector. I have collected about 80 computers from the late '70s, '80s and early '90. I am mostly interested in the 8-bit era. CROSS CHASE is my personal project whose main purpose is to create a simple, yet fun, game for literally ALL 8-bit computers/consoles/handhelds from the '70s and '80s. By ALL I mean any 8-bit computers with enough RAM and for which a capable ANSI C cross compiler exists. My project is open source and it can be followed at: https://github.com/Fabrizio-Caruso/CROSS-CHASE where both the source code and pre-compiled binaries for more than 60 different systems and configurations are freely available. Please go back often to the GitHub page if you want the latest version because I make frequent updates. HISTORY This idea came to me when I found out about the CC65 cross development toolkit for 6502-based systems (https://github.com/cc65/cc65). I realized that CC65 provided a common language (ANSI C) for all its supported targets and some common APIs for most of its targets. I started playing around with it by modifying the "hello world" example, which is provided with it. After 1400 Git commits from the "hello world" I have now an arcade-like game that can run on about 60 different systems. CC65 was clearly not enough and I had to resort to other toolkits such as: Z88DK (https://github.com/z88dk/z88dk) which comes with two ANSI C cross compilers (ZSDCC and SCCZ80) for Z80-based systems and WinCMOC and CMOC proper (https://perso.b2b2c.ca/~sarrazip/dev/cmoc.html) which are development tools for 6809-based computers. I also plan to use GCC for TI for the TMS9000-based Texas Ti-99/4A, which I intend to support even if it is a 16 bit system but for the same 8-bit era. THE GAME The idea of the game is original. You are chased by some bad guys. You can kill by luring them into some mines that they do not see. I was not inspired by anything but I later found out that similar games exist. The closest one may be Robots (https://wiki.gnome.org/Apps/Robots) as included in Gnome. The main difference between my game and Robots is that my game is an action game and Robots is turn-based. With respect to the gameplay the game has three versions in order to fit into as many different memory (and in some cases video) configurations as possible. The VERY SAME code (or meta-code) produces all three versions: - TINY: just you, the bad guys chasing you and the mines; - LIGHT: same as TINY but: 1. there is an enemy (the skull) who does not die on the mines and 2. you can get some power-ups including a gun that can kill all including the skull; - FULL: as as LIGHT but with different enemy types, more power-ups and multiple levels with different walls and missiles. THE FRAMEWORK A very important by-product of this project is a C library/framework that I have written to create an abstraction layer so that the very same code can be used for all systems. This means that it is already possible to create other universal 8 bit games within the graphical and sound limitations of the framework. THE APPLE VERSIONS The game supports lots of systems (see next section) including the Apple][ and Apple//e systems. The Apple versions currently only use the text mode and have no sound. Both sound (through the bit banging technique), as well as graphics (through the CC65's TGI libraries) are planned. Nevertheless the game is already fully playable in these versions. THE SUPPORTED SYSTEMS The supported systems are in principle ALL 8-bit systems but the game currently only works for just about 70 systems and configurations. I am actively adding new systems all the time, so I can only provide the partial list: Partial list of FULL versions: - Sega SC 3000 - Luxor ABC80 32k - Jupiter Ace 16k - Apple //c - Apple ][e - Mattel Aquarius 16k - Atari 5200 (console) - Atari 400/800 (color low resolution) - Atari 400/800 (high resolution) - Tangerine Atmos and Oric 1 48K - Commodore 128 (native 40 column mode) - Commodore 128 (native 80 column mode) - Commodore 16/116/+4 (32k min) - Commodore 64 - Commodore CBM 510 - Commodore CBM 610 - CoCo 1/2/3 and Dragon 32/64 (multiple versions) - Amstrad CPC - Galaksija 22k - Gamate (console) - Lambda 8300 16k - CCE MC-1000 48k - MicroBee - MSX 32K (cassette and rom version) - MTX - Nascom computer series 32k - NES (console) - Ohio Scientific 1P 32k - Philips P2000 - PC-6001 32K - Commodore PET 16k - Sam Coupe - Sharp MZ series - Sinclair Spectrum 48K - Spectravideo SVI 328 - VG-5000 with 16k expansion - Vic 20 with 16k expansion - VZ 200 family (Vtech Laser 200/310 and VZ 200/300) with 32K - Robotron Z 9001 32k - Sinclair ZX80 with 16k expansion - Sinclair ZX81 with 16k expansion Partial list of LIGHT versions: - Atari Lynx (handheld) - Luxor ABC80 16k - Atari 400/800 (high resolution) - Commodore 16/116 (unexpanded) - CCE MC-1000 16k (unexpanded) - MSX 16k - Nascom computer series 16k - Oric 1 16k (unexpanded) - Philips P2000 16k (unexpanded) - Spectravideo 318 16k (unexpanded) - VG-5000 16k (unexpanded) - Vic 20 with 8k expansion - VZ 200 family (Vtech Laser 200/310 and VZ 200/300) with 16K - Robotron Z 9001 16k Partial list of TINY versions: - Mattel Aquarius with 4k expansion - PCEngine (console) 8k rom version - Creativision (computer/console hybrid) 8k rom version - Ohio Scientific 1P 8k - Commodore PET 8k - Sinclair Spectrum 16k (unexpanded) - Commodore Vic 20 with 3k expansion SAME CODE FOR MORE THAN 100 SYSTEMS I am using the very same code for all systems. This is possible because - I am using ANSI C, which is a universal language, which is compiled by multiple cross-compilers into executables for the specific systems. - I have created a universal 8-bit framework for very simple graphics and sounds. The framework provides an abstraction layer so that hardware-specific code is used for graphics and sounds. ACKKNOWLEDGEMENTS This is a personal project but I have been helped and supported by different people. I have got a lot of support and help from Stefano Bodrato from the Z88DK team. I have also been supported by some people from the "scene" (Simon Jonassen from the CoCo/Dragon scene) and from some of the authors of the other toolkits (Christian Groessler from the CC65 team and Pierre Sarrazin who is the author of the CMOC). ================================================ FILE: docs/articles/articolo_ITA.txt ================================================ CROSS CHASE Un gioco estremamente multi-sistema di Fabrizio Caruso # L'autore Mi chiamo Fabrizio Caruso. Sono uno sviluppatore software e collezionista entusiasta di retro-computer. Ho circa 80 retrocomputer di svariate marche dai più comuni Commodore 64, Vic 20, Commodore 16, Sinclair ZX Spectrum ad alcuni modelli meno comuni come il Mattel Aquarius, il Commodore 116, Matra-Hachette Alice, etc. Sono particolarmente interessato all'era 8-bit, cioè il periodo che va dalla fine degli anni 70 e l'inizio degli anni 90. Mi piace usarli e restaurarli. Ultimamente ho scoperto il piacere di programmare su queste macchine (su tutte!). # Il progetto CROSS CHASE è il mio progetto personale il cui scopo è creare un gioco anche con un minimo di grafica e sonoro e che sia soprattutto divertente da giocare e, cosa ancora più importante, che possa girare su “tutti” i computer 8 bit e buona parte delle console, console-computer ipridi e handheld ad 8 bit dell'epoca 8'bit. Il termine “tutti” significa qualunque home computer 8-bit tra la fine degli anni 70 e fine anni 80 con abbastanza memoria RAM e per il quale esiste un cross compilatore ANSI C. Il mio progetto è open source e può esssere seguito sulla pagina GitHub: https://github.com/Fabrizio-Caruso/CROSS-CHASE dove, oltre al codice sorgente, metto a disposizione anche i binari già pronti per più di 60 computer (nella sezione release). # Il framework Il progetto ha richiesto la scrittura di un framework per la scrittura di giochi 8 bit "universali" che consente la scrittura contemporanea di un gioco 8 bit su un centinaio di piattaforme 8-bit diverse. Al momento attuale il framework è ad uno stato molto iniziale ma ha già la proprietà più importante: il suo codice è indipendente dal gioco che sto sviluppando. Quando questo framework sarà maturo, sarà possibile usarlo per creare rapidamente altri giochi 8-bit universali SENZA dover fare porting o riscrittura del codice per ogni macchina. # Cosa mi ha fatto cominciare L'idea nacque 9 mesi fa con la mia scoperta del toolkit di sviluppo CC65 per sistemi basati su CPU 6502 e suoi derivati (come il Commodore 64, Commodore 16, Commodore Vic 20, Atari 400/800, NES, etc.). Questo toolkit mette a disposizione un linguaggio comune (ANSI C) e alcune API per diversi computer e console. Cominciai modificando il classico esempio “hello world” che viene formito con toolkit e dopo più di 1200 commits (modifiche) ho ottenuto con un gioco arcade completo che gira si un centinaio di sistemi totalmente diversi e incompatibili tra loro. # Tools di sviluppo Chiaramente CC65 non sarebbe bastato per coprire tutti i sistemi 8 bit. Ho quindi dovuto usare altri toolkit simili per altri sistemi. I principali tools di sviluppo che ho usato sono: - CC65 (https://github.com/cc65/cc65) - Z88DK (https://github.com/z88dk/z88dk) per i sistemi basati su CPU Z80 (come il Sinclair Spectrum, MSX, Amstrad CPC, etc.) e - CMOC (https://perso.b2b2c.ca/~sarrazip/dev/cmoc.html) per i sistemi basati su CPU 6809 (come Dragon 32/64 e CoCo 1/2/ 3) e la sua variante WinCMOC. In totale attualmente uso 5 cross compilatori - cl65 (CC65), - sccz80 (Z88DK), - zsdcc (variante di sdcc in Z88DK), - CMOC, - WinCMOC (variante moddata di CMOC). Sto sperimentando con altri cross compilatori come GCC for TI (per TI99/4A), GCC6809 e sdcc (sia "liscio" sia la versione del toolkit CPCTelera per Amstrad CPC). Lo scopo è di supportare il più grande numero di sistemi ma con una regola ferrea: nessun porting o riscrittura del codice della logica del gioco. Lo stesso codice deve essere usato per tutti i computer e console. Il codice specifico è ammesso solo per alcuni dettagli dell'input/output. # 100 sistemi contemporaneamente supportati con lo stesso codice? Questo è possibile perché: 1. Uso ANSI C che è un linguaggio universale che è ricompilato da vari cross-compilatori per produrre lo stesso gioco su sistemi diversi. 2. Ho creato dei livelli di astrazione nel mio codice (il framework!) così da poter inserire, in alcuni casi, del codice specifico per vari hardware senza modificare il codice del gioco. 3. Uso meta-codice per selezionare le porzioni di codice che servono per ogni sistema. # Il Gioco L'idea del gioco è totalmente originale: sei inseguito da dei nemici che puoi fare fuori facendoli schiantare contro delle mine che vede solo il giocatore o sparando contro loro se riesci ad ottenere una pistola. Esistono 10 diversi power-up che danno poteri speciali. Alcuni dei quali sono nascosti e vanno scoperti compiente specifiche operazioni (esempio: colpire o uccidere il teschio, etc.). Non mi sono ispirato a nulla ma ho scoperto che esistono giochi simili. Il più simile è Robots (https://wiki.gnome.org/Apps/Robots) che è incluso in Gnome. La differenza maggiore sta nel fatto che Robots è turn-based mentre il mio gioco è un gioco d'azione. Altra differenza importante è l'uso della pistola nel mio gioco che serve ad distruggere alcuni ostali e nemici speciali. # Tre versioni Lo stesso codice del gioco produce 3 diverse varianti del gioco che sono più o meno complete in maniera tale da poter girare su hardware anche molto limitati (anche soli 8k di ram). Quindi il gioco esiste in versione: - TINY: nemici semplice e mine - LIGHT: aggiunta di alcuni power-up ed il teschio (nemico da uccidere con la pistola) - FULL: versione completa Sistemi supportati Il gioco supporta in principio tutti i sistemi a 8 bit comprese svariate configurazioni di memoria e video. Per il momento posso confermare il funzionamento per una settantina. Aggiungo in continuazione nuovi sistemi e qui posso fornire una lista parzionale. Versione FULL - Luxor ABC80 32k - Jupiter Ace 16k - Apple //c - Apple ][e - Mattel Aquarius 16k - Atari 5200 (console) - Atari 400/800 (color low resolution) - Atari 400/800 (high resolution) - Tangerine Atmos and Oric 1 48K - Commodore 128 (native 40 column mode) - Commodore 128 (native 80 column mode) - Commodore 16/116/+4 (32k min) - Commodore 64 - Commodore CBM 510 - Commodore CBM 610 - CoCo 1/2/3 and Dragon 32/64 (multiple versions) - Amstrad CPC - Galaksija 22k - Gamate (console) - Lambda 8300 16k - CCE MC-1000 48k - MicroBee - MSX 32K (cassette and rom version) - MTX - Nascom computer series 32k - NES (console) - Ohio Scientific 1P 32k - Philips P2000 - PC-6001 32K - Commodore PET 16k - Sam Coupe - Sharp MZ series - Sinclair Spectrum 48K - Spectravideo SVI 328 - VG-5000 with 16k expansion - Vic 20 with 16k expansion - VZ 200 family (Vtech Laser 200/310 and VZ 200/300) with 32K - Robotron Z 9001 32k - Sinclair ZX80 with 16k expansion - Sinclair ZX81 with 16k expansion Versione LIGHT - Luxor ABC80 16k - Atari 400/800 (high resolution) - Commodore 16/116 (unexpanded) - CCE MC-1000 16k (unexpanded) - MSX 16k - Nascom computer series 16k - Oric 1 16k (unexpanded) - Philips P2000 16k (unexpanded) - Spectravideo 318 16k (unexpanded) - VG-5000 16k (unexpanded) - Vic 20 with 8k expansion - VZ 200 family (Vtech Laser 200/310 and VZ 200/300) with 16K - Robotron Z 9001 16k Versione TINY - Creativision (computer/console hybrid) 8k rom version - Ohio Scientific 1P 8k - Commodore PET 8k - Sinclair Spectrum 16k (unexpanded) - Commodore Vic 20 with 3k expansion # Ringraziamenti Per essendo un progetto personale, sono stato aiutato da diverse persone. In particolare da Stefano Bodrato che è uno dei principali sviluppatori di Z88DK. Sono anche stato aiutato da alcuni membri di varie “scene” 8-bit (in particolare da Simon Jonassen che sviluppa per CoCo e Dragon). Ringrazio anche Christian Groessler (sviluppatore CC65) per avermi dato alcuni consigli su Atari. ================================================ FILE: docs/bbc/chibiakumas.txt ================================================ https://www.chibiakumas.com/6502/bbc.php ================================================ FILE: docs/bbc/putchar.txt ================================================ FYI I have uploaded a new release of vbcc6502. For the bbc target I have added a function to suppress the conversion of \n. After calling __vdu_sequence(1); all the characters should be output without any modifications. Calling __vdu_sequence(0) will activate the \n conversion again. void OSWRCHR(__reg("a") char)="\tjsr\t0xffee"; ... OSWRCHR(22); OSWRCHR(2); void OSNEWL()="\tjsr\t0xffe7"; void OSWRCHR(__reg("a") char)="\tjsr\t0xffee"; unsigned int __write(int f,const char *p,unsigned int len) { unsigned int n=len; while(n){ char c=*p++; if(c=='\n') OSNEWL(); else OSWRCHR(c); n--; } return len; } ================================================ FILE: docs/bbc_sounds/bbc.h ================================================ typedef struct { int channel; int amplitude; int pitch; int duration; } bbc_sound; char OSBYTE0(__reg("a") char)="\tjsr\t$fff4\n\ttxa"; char OSBYTE1(__reg("a") char,__reg("r0") char)="\tldx\tr0\n\tjsr\t$fff4\n\ttxa"; char OSBYTE1RI(__reg("a") char,__reg("r0") char)="\tldx\tr0\n\tjsr\t$fff4\n\ttxa\n\tpha\n\ttya\n\ttax\n\tpla"; char OSBYTE2(__reg("a") char,__reg("r0") char,__reg("r1") char)="\tldx\tr0\n\tldy\tr1\n\tjsr\t$fff4\n\ttxa"; char OSBYTE2I(__reg("a") char,__reg("r0/r1") unsigned int)="\tldx\tr0\n\tldy\tr1\n\tjsr\t$fff4\n\ttxa"; void OSBYTE0NR(__reg("a") char)="\tjsr\t$fff4"; void OSBYTE1NR(__reg("a") char,__reg("r0") char)="\tldx\tr0\n\tjsr\t$fff4"; void OSBYTE2NR(__reg("a") char,__reg("r0") char,__reg("r1") char)="\tldx\tr0\n\tldy\tr1\n\tjsr\t$fff4"; #define OSVER() OSBYTE0(0) #define OSUSRFLG(x,y) OSBYTE2(1,(x),(y)) #define OSSELINPUT(x) OSBYTE1NR(2,(x)) #define OSSELOUTPUT(x) OSBYTE2(3,(x),(y)) #define OSCURSORED(x) OSBYTE2(4,(x),(y)) #define OSSELADC(x) OSBYTE1(16,(x)) #define OSFRCADC(x) OSBYTE1NR(17,(x)) #define OSVSYNC() OSBYTE0(19) #define OSRDVDU() OSBYTE0(117) #define OSSCANKEY(x) OSBYTE1(121,(x)) #define OSSCANKEY16() OSBYTE0(122) #define OSADVAL(x) OSBYTE1RI(128,(x)) #define OSINKEY(x) OSBYTE2I(129,(x)) void OSWORD(__reg("a") char,__reg("r0/r1") void *)="\tldx\tr0\n\tldy\tr1\n\tjsr\t$fff1"; #define OSRDSYSCLK(x) OSWORD(1,x) #define OSWRSYSCLK(x) OSWORD(2,x) #define OSRDTIMER(x) OSWORD(3,x) #define OSWRTIMER(x) OSWORD(4,x) #define OSRDIO(x) OSWORD(5,x) #define OSWRIO(x) OSWORD(6,x) #define OSSOUND(x) OSWORD(7,x) #define OSENVELOPE(x) OSWORD(8,x) #define OSRDPIXEL(x) OSWORD(9,x) #define OSRDCHARDEF(x) OSWORD(10,x) #define OSRDPALETTE(x) OSWORD(11,x) #define OSWRPALETTE(x) OSWORD(12,x) #define OSRDGRCURSOR(x) OSWORD(13,x) ================================================ FILE: docs/bbc_sounds/bbctest.c ================================================ #include #include "bbc.h" bbc_sound snd = {1,-15,200,20}; main() { unsigned int i=0; puts("playing sound"); OSSOUND(&snd); puts("done"); while(1){ printf("k=%03u js=%05u %05u %05u %05u\n",OSSCANKEY16(),OSADVAL(1),OSADVAL(2),OSADVAL(3),OSADVAL(4)); } } ================================================ FILE: docs/compilation_parameters.txt ================================================ ------------------------------------- NO_MESSAGE It disables: - printGameOver - gameCompleted - _printScoreOnRow - _printScore - printKillTheSkull - highScoreScreen ------------------------------------- LESS_TEXT It disables: - printLevel - printVictoryMessage - printExtraLife ------------------------------------- ================================================ FILE: docs/compiler_install.txt ================================================ (1) TMS9900-GCC https://github.com/mburkley/tms9900-gcc Very simple instructions are here: https://github.com/mburkley/tms9900-gcc?tab=readme-ov-file#user-download-and-install ------------------------------------- (2) ACK https://github.com/davidgiven/ack Very simple but *time consuming* compilation explained in the main README file. ------------------------------------- (3) CC6303 for the Motorola 6803-based targets https://github.com/zu2/CC6303 (maintained and more recent but not tested yet) I need to check and see if it works fine. If the first link fails to build and/or fails to build correct binaries we have this: https://github.com/EtchedPixels/CC6303 (obsolete and not maintained) No instructions found but there is a simple Makefile. So "make all" and probably "make install" (it just copies files to hard-coded locations) ------------------------------------- (4) VBCC http://www.compilers.de/vbcc.html Remark: We need a *multi-target* version. The *multi-target* versions support several targets across different architectures. I have never built it from source myself. I have always used a pre-built multi-target. I need to check if it can be easily built. Source code of the multi-target version is here: http://www.ibaug.de/vbcc/vbcc.tar.gz ================================================ FILE: docs/conio_macros_vs_functions.txt ================================================ xl snake c16_16k_conio BEFORE (with macros for _XL_CHAR, _XL_PRINT): ld65: Warning: cross_lib/cfg//cc65/c16-16k.cfg:10: Segment 'BSS' overflows memory area 'MAIN' by 1432 bytes ld65: Error: Cannot generate most of the files due to memory area overflow gmake: *** [Makefile_common:486: c16_16k_conio] Error 1 Segment list: ------------- Name Start End Size Align ---------------------------------------------------- ZEROPAGE 000008 000021 00001A 00001 LOADADDR 000FFF 001000 000002 00001 EXEHDR 001001 00100C 00000C 00001 STARTUP 00100D 00104E 000042 00001 ONCE 00104F 00105A 00000C 00001 CODE 00105B 003AE1 002A87 00001 RODATA 003AE2 003F6E 00048D 00001 DATA 003F6F 003FC0 000052 00001 INIT 003FC1 003FDA 00001A 00001 BSS 003FDB 004577 00059D 00001 ------------------------------------------------------------------------------------------------- AFTER (with functions): ld65: Warning: cross_lib/cfg//cc65/c16-16k.cfg:10: Segment 'INIT' overflows memory area 'MAIN' by 5 bytes ld65: Error: Cannot generate most of the files due to memory area overflow make: *** [Makefile_common:486: c16_16k_conio] Error 1 Segment list: ------------- Name Start End Size Align ---------------------------------------------------- ZEROPAGE 000008 000021 00001A 00001 LOADADDR 000FFF 001000 000002 00001 EXEHDR 001001 00100C 00000C 00001 STARTUP 00100D 00104E 000042 00001 ONCE 00104F 00105A 00000C 00001 CODE 00105B 003AEB 002A91 00001 RODATA 003AEC 003F78 00048D 00001 DATA 003F79 003FCA 000052 00001 INIT 003FCB 003FE4 00001A 00001 BSS 003FE5 004581 00059D 00001 -------------------------------------------------------------- shoot pet BEFORE Segment list: ------------- Name Start End Size Align ---------------------------------------------------- ZEROPAGE 000055 00006E 00001A 00001 LOADADDR 0003FF 000400 000002 00001 EXEHDR 000401 00040C 00000C 00001 STARTUP 00040D 00044C 000040 00001 ONCE 00044D 000458 00000C 00001 CODE 000459 00474C 0042F4 00001 RODATA 00474D 0049A1 000255 00001 DATA 0049A2 0049F3 000052 00001 INIT 0049F4 004A0D 00001A 00001 BSS 004A0E 004C1A 00020D 00001 ---------------------------------- AFTER Segment list: ------------- Name Start End Size Align ---------------------------------------------------- ZEROPAGE 000055 00006E 00001A 00001 LOADADDR 0003FF 000400 000002 00001 EXEHDR 000401 00040C 00000C 00001 STARTUP 00040D 00044C 000040 00001 ONCE 00044D 000458 00000C 00001 CODE 000459 004722 0042CA 00001 RODATA 004723 004977 000255 00001 DATA 004978 0049C9 000052 00001 INIT 0049CA 0049E3 00001A 00001 BSS 0049E4 004BF0 00020D 00001 ================================================ FILE: docs/docker.txt ================================================ # CROSS-LIB in GitHubCodeSpaces https://github.com/codespaces/ # CROSS-LIB in a Docker container ## BUILD IMAGE Enter .devcontainer docker build . -t crosslib:254 ## RUN CONTAINER docker run -it -v /mnt/c/Retro/CROSS-LIB:/workspaces/crosslib --env-file /mnt/c/Retro/CROSS-LIB/.devcontainer/devcontainer.env crosslib:254 bash --------------------- sudo docker run -it -v .:/workspaces/crosslib --env-file ./.devcontainer/container.env crosslib:0.1 bash Push to registry: docker push docker.io/fabriziocaruso/crosslib:0.1 sudo docker tag crosslib:0.1 crosslib:0.1 sudo docker logout && sudo docker login -u "fabriziocaruso" -p "L1kud1a_33" docker.io ================================================ FILE: docs/games/BOMBER.txt ================================================ BOMBER Bomber is a mini-game and clone of Air Attack (aka Blitz) that first appeared on the Commodore Pet. The game is about a rather horrible idea (not mine) but it can be addictive nevertheless. You need to carpet-bomb an entire city in order to safely land on the road. Let us assume the city has no inhabitants. You do not control the plane. You can only use fire to drop bombs. REMARK: This game is part of Cross-Lib: https://github.com/Fabrizio-Caruso/CROSS-LIB Go to its GitHub page for updates and new games. Cross-Lib's licence applies to this game. ------------------------------------------------------------------------------------------------------------------------------------ CROSS-LIB'S LICENCE This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for non-commercial applications, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. For example I do not authorize selling hardware, software, firmware or any other product that contains any part of Cross-Lib and/or its games (e.g., pre-loaded disks, tapes, cartridges, etc.). On the other hand I authorize people to load the games in the most convenient way for their personal use. ================================================ FILE: docs/games/CHASE.txt ================================================ CHASE Cross Chase is somehow similar to Daleks / Gnome Robots. You need to lure your pursuers into the mines. The main difference is that it is a real-time game and that it has several secrets items and power-ups to pick. Similarly to Shoot, at the end of each level or in boss levels, you are confronted by a boss (a skull), which can only be killed by a few bullets fired by the gun item. You can complete the level by killing the skull before the last enemy and by doing so you unlock extra items and secrets in the next levels. Destroying the missile bases can also unlock items. You can move in 4 directions and shoot with fire (if you have collected the gun item). REMARK: This game is part of Cross-Lib: https://github.com/Fabrizio-Caruso/CROSS-LIB Go to its GitHub page for updates and new games. Cross-Lib's licence applies to this game. ------------------------------------------------------------------------------------------------------------------------------------ CROSS-LIB'S LICENCE This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for non-commercial applications, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. For example I do not authorize selling hardware, software, firmware or any other product that contains any part of Cross-Lib and/or its games (e.g., pre-loaded disks, tapes, cartridges, etc.). On the other hand I authorize people to load the games in the most convenient way for their personal use. ================================================ FILE: docs/games/HORDE.txt ================================================ HORDE Horde is a zombie-themed shooter with many power-ups and several different enemies, levels and special items to pick. You control a bow with a limited number of arrows. You get more arrows as a possible reward for killing some zombies. If you run out of arrows, you will get a few arrows after a short period. In each level you are confronted with a horde of zombies that become harder as you progress. You can move left or right. Use fire to shoot. REMARK: This game is part of Cross-Lib: https://github.com/Fabrizio-Caruso/CROSS-LIB Go to its GitHub page for updates and new games. Cross-Lib's licence applies to this game. ------------------------------------------------------------------------------------------------------------------------------------ CROSS-LIB'S LICENCE This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for non-commercial applications, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. For example I do not authorize selling hardware, software, firmware or any other product that contains any part of Cross-Lib and/or its games (e.g., pre-loaded disks, tapes, cartridges, etc.). On the other hand I authorize people to load the games in the most convenient way for their personal use. ================================================ FILE: docs/games/SHOOT.txt ================================================ SHOOT Shoot is a shooter somehow similar to Robotron. You have to kill a horde of ghosts on each level. You can kill them by hitting them many times or by hitting them enough times to push them against the walls (mortal only for them). You can also kill them by placing mines but you need to get the mine item (with 3 mines). A mine kills instantly common enemies. At the end of each level when only few ghosts are left or if you survive without killing enemies long enough or in boss levels, you are confronted by some hard-to-kill skulls. Optionally you can complete the level by killing the skulls before the last ghosts and by doing so you unlock extra items and secrets in the next levels. Destroying the missile bases can also unlock items. The game has many secrets and items to discover. You move in the 4 directions and shoot with fire. REMARK: This game is part of Cross-Lib: https://github.com/Fabrizio-Caruso/CROSS-LIB Go to its GitHub page for updates and new games. Cross-Lib's licence applies to this game. ------------------------------------------------------------------------------------------------------------------------------------ CROSS-LIB'S LICENCE This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for non-commercial applications, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. For example I do not authorize selling hardware, software, firmware or any other product that contains any part of Cross-Lib and/or its games (e.g., pre-loaded disks, tapes, cartridges, etc.). On the other hand I authorize people to load the games in the most convenient way for their personal use. ================================================ FILE: docs/games/SNAKE.txt ================================================ SNAKE Snake is my personal interpretation of a hybrid game between Nibbler (arcade game) and the Nokia Snake game to which I have added more game elements. As in Nibbler the walls do not kill you and can be used to stop you and let you better control your movements. As in Nokia Snake the main goal is to eat apples. If you do not eat any apple for too long, the snake becomes faster and harder to control and ultimately consume its energy. In each level you are also confronted with mines that kill you if the snake's head touches them. As a secondary goal you can collect rings. If you manage to get 3 or more rings without dying on a level, you will be rewarded with bonus items. Use the fire button to start the game. You move in the 4 directions and shoot with fire. REMARK: This game is part of Cross-Lib: https://github.com/Fabrizio-Caruso/CROSS-LIB Go to its GitHub page for updates and new games. Cross-Lib's licence applies to this game. ------------------------------------------------------------------------------------------------------------------------------------ CROSS-LIB'S LICENCE This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for non-commercial applications, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. For example I do not authorize selling hardware, software, firmware or any other product that contains any part of Cross-Lib and/or its games (e.g., pre-loaded disks, tapes, cartridges, etc.). On the other hand I authorize people to load the games in the most convenient way for their personal use. ================================================ FILE: docs/games/VERBIX.txt ================================================ VERBIX Verbix is a Scrabble-like game that looks also a bit like Tetris. In this game you have to form valid 5-letter English words on the bottom row before the tower of letters reaches the top level. You can rotate the bottom row or any of the columns by moving in the 4 directions. You press fire to confirm the word. REMARK: This game is part of Cross-Lib: https://github.com/Fabrizio-Caruso/CROSS-LIB Go to its GitHub page for updates and new games. Cross-Lib's licence applies to this game. ------------------------------------------------------------------------------------------------------------------------------------ CROSS-LIB'S LICENCE This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for non-commercial applications, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. For example I do not authorize selling hardware, software, firmware or any other product that contains any part of Cross-Lib and/or its games (e.g., pre-loaded disks, tapes, cartridges, etc.). On the other hand I authorize people to load the games in the most convenient way for their personal use. ================================================ FILE: docs/generic_tiles.txt ================================================ GENERIC TILES NAMES USED IN THE CODE In the code we use the name tiles for different things: - tile absolute index [used to display] "_TILE_{index}", i.e., and index in memory that points to the tile data - tile relative index [used to redefine] "_TILE_{index}_OFFSET", i.e. a relative index in memory (e.g., Atari 8-bit mode 1 characters are repeated 4 times) - tile data (in template files) "", i.e., this is the data that defines the shape of tiles - tile data in C code (in header files) "_TILE_{tile #}_UDG" contains "" LINKED TILES VS TILES BY EXPLICIT REDEFINITION IN C CODE Cross-Lib supports different ways to enable tiles: - by to-be-linked Assembly files with the tiles data - by including header files with tiles definitions TEMPLATED TILE FILES Templates cover both cases described above (linked Assembly and header files). Both to-be-linked Assembly files and tile header files are generated by Python scripts "generate_assets.py" and "copy_assets.py" found in src/assets/. The scripts use - the templates in /src/assets/templates with "" tags and - the game-specific tile data in /src/games//tiles or /src/demos//tiles where the file "tile_.txt" contains the data the are meant to replace "" in all templates The result of the execution of the Python scripts is store in /src/games//generated_assets or /src/demos//generated_assets. SUB-TARGET-SPECIFIC TILES Tiles are implemented differently on each target and sub-target as this depend on the graphics mode chosen in Cross-Lib. Each tile is identified by a absolute index (used to display it) "_TILE_{index}" and a relative index (used to redefined it) "_TILE_{index}_OFFSET". These indices are defined in /src/cross_lib/display/tiles. TILES DEFINED THROUGH HEADER FILES For tiles that are defined by included header files (not by linked Assembly), the tile data is defined in "_TILE_{tile #}_UDG". Each target may use some specific code to redefine characters code. Most targets use the definitions and code in /src/cross_lib/display/redefined_characters/udg_map.h. ================================================ FILE: docs/hector_sound.txt ================================================ Pour 2HR - CALL 0x07BF Pour HRX - CALL 0x1A09 Il faut préalablement définir DE pour la longueur Et BC pour le période. La fréquence de la note sera égale à 1/(BC), et sa durée à (BC) x (DE). Si les interruptions sont autorisées, le son sera "vibrato", si les interruptions sont interdites, il sera continu. voici ce que moi j'utilise pour 2HR mon code asm: PUBLIC _TONES ;************************************ ; * émet un son * ;************************************ _TONES: POP IX ; récupère l'adresse de retour POP DE ; récupère le deuxième argument (longeur) POP BC ; récupère le premier argument (periode) PUSH BC ; remet sur la pile PUSH DE ; remet sur la pile PUSH IX ; remet l'adresse de retour sur la pile CALL 0x07BF RET dans mon code C: extern void TONES(unsigned short periode, unsigned short longeur); TONES(0x1000,10); ================================================ FILE: docs/manual/XSize.txt ================================================ XSize Number of tiles that can be displayed horizontally on the (usable) screen ================================================ FILE: docs/manual/YSize.txt ================================================ YSize Number of tiles that can be displayed vertically on the (usable) screen ================================================ FILE: docs/manual/_XL_CHAR.txt ================================================ _XL_CHAR(X,Y,C) It displays the C character at position X,Y with the color set by _XL_SET_TEXT_COLOR. ================================================ FILE: docs/manual/_XL_CLEAR_SCREEN.txt ================================================ _XL_CLEAR_SCREEN() It clears the whole screen. ================================================ FILE: docs/manual/_XL_DELETE.txt ================================================ _XL_DELETE(X,Y) It deletes a tile-sized area of the screen at position (X,Y) ================================================ FILE: docs/manual/_XL_DOWN.txt ================================================ _XL_DOWN(J) This Boolean function returns 1 (true) if J represents the down movement, and 0 (false) otherwise. J is supposed to be the output of _XL_INPUT. ================================================ FILE: docs/manual/_XL_DRAW.txt ================================================ _XL_DRAW(X, Y, T, C) It displays tile T at position (X,Y) with color C if color C is available or its "closest" match when C is not supported by a target. For targets with no colors (i.e., with _XL_NO_COLOR) you may assume that _XL_DRAW is macro that disregards the C parameter. ================================================ FILE: docs/manual/_XL_EXPLOSION_SOUND.txt ================================================ _XL_EXPLOSION_SOUND() Short explosion noise ================================================ FILE: docs/manual/_XL_FIRE.txt ================================================ _XL_FIRE(J) This Boolean function returns 1 (true) if J represents the fire button, and 0 (false) otherwise. J is supposed to be the output of _XL_INPUT. ================================================ FILE: docs/manual/_XL_INIT_GRAPHICS.txt ================================================ _XL_INIT_GRAPHICS() It initializes the graphics. Necessary for any build that wants to show anything on the screen. ================================================ FILE: docs/manual/_XL_INIT_INPUT.txt ================================================ _XL_INIT_INPUT() It initializes the input (joystick/keyboard). Necessary for any program that needs to receive an input ================================================ FILE: docs/manual/_XL_INIT_SOUND.txt ================================================ _XL_INIT_SOUND() It initializes the sound system. Necessary for any program that produces sound. ================================================ FILE: docs/manual/_XL_INPUT.txt ================================================ _XL_INPUT() It returns a value J that represents the specific received input or absence of input at the moment of its execution (keyboard may be buffered, though). The result J is meant to be used with the Boolean functions _XL_UP, _XL_DOWN, _XL_LEFT, _XL_RIGHT, _XL_FIRE. ================================================ FILE: docs/manual/_XL_KEY_PRESSED.txt ================================================ _XL_KEY_PRESSED() This Boolean function returns 1 (true) if any key or fire button is pressed. ================================================ FILE: docs/manual/_XL_LEFT.txt ================================================ _XL_LEFT(J) This Boolean function returns 1 (true) if J represents the left movement, and 0 (false) otherwise. J is supposed to be the output of _XL_INPUT. ================================================ FILE: docs/manual/_XL_PING_SOUND.txt ================================================ _XL_PING_SOUND() Short high-pitched sound ================================================ FILE: docs/manual/_XL_PRINT.txt ================================================ _XL_PRINT(X,Y,S) It prints the "Cross-Lib string" S starting a position (X,Y) with the color set by _XL_SET_TEXT_COLOR. A "Cross-Lib string" is string formed with only the following 37 possible characters _XL_SPACE, _XL_a, ..., _XL_z, _XL_A, ..., _XL_Z, '0', ..., '9' where capital/small letter may be displayed as the same character depending on whether the target supports different display for capital vs small letters. ================================================ FILE: docs/manual/_XL_PRINTD.txt ================================================ _XL_PRINTD(X,Y,L,N) It prints the positive integer number N in L digits (1<=L<=5) starting at position (X,Y) with the color set by _XL_SET_TEXT_COLOR. ================================================ FILE: docs/manual/_XL_RAND.txt ================================================ _XL_RAND() It generates a pseudo-random number in the range [0,32767] ================================================ FILE: docs/manual/_XL_RIGHT.txt ================================================ _XL_RIGHT(J) This Boolean function returns 1 (true) if J represents the right movement, and 0 (false) otherwise. J is supposed to be the output of _XL_INPUT. ================================================ FILE: docs/manual/_XL_SET_TEXT_COLOR.txt ================================================ _XL_SET_TEXT_COLOR(C) It sets the text color to C. Such color will be used on next _XL_PRINT, _XL_PRINTD, _XL_CHAR for targets that support colored text. If any other display operation is present (e.g., _XL_DRAW), then there is no guarantee that the color C will be used afterwards. ================================================ FILE: docs/manual/_XL_SHOOT_SOUND.txt ================================================ _XL_SHOOT_SOUND() Very short shoot noise ================================================ FILE: docs/manual/_XL_SLEEP.txt ================================================ _XL_SLEEP(S) It waits S seconds or an approximations of S seconds depending on the target ================================================ FILE: docs/manual/_XL_SLOW_DOWN.txt ================================================ _XL_SLOW_DOWN(T) It waits T loops (0<=T<=65535) ================================================ FILE: docs/manual/_XL_TICK_SOUND.txt ================================================ _XL_TICK_SOUND() Very short high-pitched sound ================================================ FILE: docs/manual/_XL_TOCK_SOUND.txt ================================================ _XL_TOCK_SOUND() Very short low-pitched sound ================================================ FILE: docs/manual/_XL_UP.txt ================================================ _XL_UP(J) This Boolean function returns 1 (true) if J represents the up movement, and 0 (false) otherwise. J is supposed to be the output of _XL_INPUT. ================================================ FILE: docs/manual/_XL_WAIT_FOR_INPUT.txt ================================================ _XL_WAIT_FOR_INPUT() It waits for any key or fire button to be pressed. ================================================ FILE: docs/manual/_XL_ZAP_SOUND.txt ================================================ _XL_ZAP_SOUND() Short rising sound ================================================ FILE: docs/mc10.txt ================================================ Multicolor graphics Disable Interrupt with SEI CLI to enable POKE 49151,36 $4000 ================================================ FILE: docs/mc10_2.txt ================================================ ; Radio Shack MC-10 Disassembly ; (C) Copyright 1999 Kevin Timmerman ; Additional annotation by Greg D. ; Fixed and modified by James Tamer for use with TASM cross-assembler ; A few handy defines to make TASM more like typcial ; motorola syntax .MSFIRST ; Most Significant byte first ; .ADDINSTR inst args opcode nbytes rule class shift binor .ADDINSTR JSRE * BD 3 SWAP 1 shift binor #define EQU .EQU #define ORG .ORG #define RMB .BLOCK #define FCB .BYTE #define FCC .TEXT #define FDB .WORD #define equ .EQU #define org .ORG #define rmb .BLOCK #define fcb .BYTE #define fcc .TEXT #define fdb .WORD ; end a few handy defines ram00 equ $00 ;Port 1/2 Data Directon Register 1=Output 0=Input ram01 equ $01 ram02 equ $02 ;Port 1 Data Register ram03 equ $03 ;Port 2 Data Register ram08 equ $08 ;Timer control and status register ram09 equ $09 ;Counter (2 bytes) ram0B equ $0B ;Output Compare (2 bytes) ram80 equ $80 ;number build store MSB ram81 equ $81 ;number build store LSB ram82 equ $82 ;logic AND/OR function store ram83 equ $83 ram84 equ $84 ;vartype flag ram85 equ $85 ;data token flag ram86 equ $86 ram87 equ $87 ;READ cmd status flag ram88 equ $88 ram89 equ $89 ;address temp store ram8B equ $8B TBL008C equ $8C TBL008D equ $8D ; DIGIT 4 MSB ram8E equ $8E ; 3 ram8F equ $8F ; 2 ram90 equ $90 ; 1 LSB ram91 equ $91 ; stack pointer store ram93 equ $93 ; start of BASIC memory ram95 equ $95 ; start of variable space ram97 equ $97 ; start of dimensioned variable space ram99 equ $99 ; end of variables. ram9B equ $9B ; start of string space ram9D equ $9D ; next free string store ram9F equ $9F ; address build store ramA1 equ $A1 ; top of string storage ramA3 equ $A3 ramA5 equ $A5 ramA7 equ $A7 ; program break address MSB ramA8 equ $A8 ; program break address LSB ramA9 equ $A9 ramAB equ $AB ramAD equ $AD ; DATA pointer ramAF equ $AF ; LIST command end line no. ramB1 equ $B1 ramB2 equ $B2 ramB3 equ $B3 ramB5 equ $B5 ; FOR-NEXT var pointer ramB7 equ $B7 ramB9 equ $B9 TBL00BA equ $BA ; EXPONENT ramBB equ $BB ; DIGIT 4-3 ramBD equ $BD ; DIGIT 2-1 ramBF equ $BF ; SIGN ramC0 equ $C0 ramC1 equ $C1 ramC2 equ $C2 TBL00C4 equ $C4 ramC5 equ $C5 ramC7 equ $C7 ramC9 equ $C9 ; EXPONENT [FPA0] ramCA equ $CA ; DIGIT 4 MSB ramCB equ $CB ; DIGIT 3 ramCC equ $CC ; DIGIT 2 ramCD equ $CD ; DIGIT 1 LSB ramCE equ $CE ; SIGN ramCF equ $CF ramD0 equ $D0 ramD2 equ $D2 ramD5 equ $D5 ramD6 equ $D6 ; EXPONENT [FPA1] ramD7 equ $D7 ; DIGIT 4 MSB ramD8 equ $D8 ; DIGIT 3 ramD9 equ $D9 ; DIGIT 2 ramDA equ $DA ; DIGIT 1 LSB ramDB equ $DB ; SIGN ramDC equ $DC ; SIGN ramDD equ $DD ramDE equ $DE ; end of string address MSB ramDF equ $DF ; end of string address LSB ramE2 equ $E2 ; filename screen pointer ramE4 equ $E4 ; i/o tab field ramE5 equ $E5 ; i/o last tab field ramE6 equ $E6 ; max line length MSB ramE7 equ $E7 ; max line length LSB ramE8 equ $E8 ; I/O select 0=screen -1=printer ramE9 equ $E9 ramEA equ $EA ; warm start setup flag =$55 LBL00EB equ $EB ; bump interpreter pointer LBL00F3 equ $F3 ; A <- [address ptr] ramF4 equ $F4 ; address ptr MSB ramF5 equ $F5 ; address ptr LSB TBL4000 equ $4000 ; start of screen mem TBL41FD equ $41FD ; start clearing. FNC_USR equ $4215 ; USR command address ram4218 equ $4218 ; random number seed word 1 ram421A equ $421A ; random number seed word 2 ram421C equ $421C ; upcase flag ram421D equ $421D ; keyboard debounce delay $045E ram421F equ $421F ; default EXEC address $EC2E ram4221 equ $4221 ram4223 equ $4223 ; printer baud rate $0080 ram4225 equ $4225 ; cr. delay count $0001 ram4227 equ $4227 ; tab field width 16 ram4229 equ $4229 ; last tab zone 112 ram422A equ $422A ; printer line length max MSB 88 ram422B equ $422B ; printer line length max LSB 132 ram422C equ $422C ; cassette 1200/2400Hz partition 21 ($15) ram422D equ $422D ; upper limit of 1200 Hz ram422E equ $422E ; lower limit of 2400 Hz ram422F equ $422F ; number of 55's in leader MSB TBL4230 equ $4230 ; number of 55's in leader LSB 128; kyboard scan buff 4231-8. ram4239 equ $4239 ; keyboard strobe store ram423A equ $423A ; keyboard control key flag ram423B equ $423B ; keyboard break flag ram423C equ $423C ram423D equ $423D ; string buffer pointer ram423F equ $423F TBL4241 equ $4241 ; string buffer ram4250 equ $4250 ; end of memory pointer ram4252 equ $4252 ram4253 equ $4253 ram4254 equ $4254 ; random number store 1 ram4255 equ $4255 ; random number store 2 TBL4256 equ $4256 ; file name length TBL4257 equ $4257 ; SKIP/LOAD file name TBL425F equ $425F ; TAPE file name block ram4267 equ $4267 ; file type flag ram426A equ $426A ; EXEC address offset ram426C equ $426C ; LOAD address ram426E equ $426E ; NEW command status flag ram426F equ $426F ram4271 equ $4271 ram4273 equ $4273 ram4274 equ $4274 ram4275 equ $4275 ; cass block type flag ram4276 equ $4276 ; cass block length ram4278 equ $4278 ; cass buffer address ram427A equ $427A ; cass sumcheck ram427B equ $427B ; cass load status flag ram427C equ $427C ; cass byte load bit counter ram427D equ $427D ; tone duration counter ram427E equ $427E ; cass polarity flag ram427F equ $427F ; last keyboard input char ram4280 equ $4280 ; cursor address MSB ram4281 equ $4281 ; cursor address LSB ram4282 equ $4282 ; cursor color ram4283 equ $4283 ; break status flag ram4284 equ $4284 ; LIST command status flag LBL4285 equ $4285 ; input char command extension LBL4288 equ $4288 ; output char command extension LBL428B equ $428B ; output char command extension LBL428E equ $428E ; NEW command extension LBL4291 equ $4291 ; build command line extension LBL4294 equ $4294 ; maths command extension LBL4297 equ $4297 ; error return extension 1 LBL429A equ $429A ; error return extension 2 LBL429D equ $429D ; fp-acc number transfer extension LBL42A0 equ $42A0 ; RUN command extension LBL42A3 equ $42A3 ; command token lookup extension LBL42A6 equ $42A6 ; LIST command extension LBL42A9 equ $42A9 LBL42AC equ $42AC ram42AF equ $42AF ram42B0 equ $42B0 TBL42B1 equ $42B1 TBL42B2 equ $42B2 ; command line buffer TBL4333 equ $4333 TBL4334 equ $4334 TBL4335 equ $4335 ; binary-decimal conversion buffer TBL4346 equ $4346 ioBFFF equ $BFFF org $E000 ; --- Function vector table --- TBLE000 FDB FNC_SGN ; $F2BA SGN FDB FNC_INT ; $F335 INT FDB FNC_ABS ; $F2D5 ABS FDB FNC_USR ; $4215 USR FDB FNC_RND ; $F62A RND FDB FNC_SQR ; $F54D SQR FDB FNC_LOG ; $F0B9 LOG FDB FNC_EXP ; $F5C9 EXP FDB FNC_SIN ; $F68C SIN FDB FNC_COS ; $F686 COS FDB FNC_TAN ; $F6D2 TAN FDB FNC_PEEK ; $EF5F PEEK FDB FNC_LEN ; $EE82 LEN FDB FNC_STR ; $ECED STR$ FDB FNC_VAL ; $EF1C VAL FDB FNC_ASC ; $EEA2 ASC FDB FNC_CHR ; $EE8E CHR$ FDB FNC_LEFT ; $EEAD LEFT$ FDB FNC_RIGHT ; $EEC8 RIGHT$ FDB FNC_MID ; $EECF MID$ FDB FNC_POINT ; $FB9C POINT FDB FNC_VARPTR ; $FC11 VARPTR FDB FNC_INKEY ; $FBED INKEY$ FDB FNC_MEM ; $ECDB MEM TBLE030 FCB $79 FDB fp_ADD ; $EF80 + FCB $79 FDB fp_SUB ; $EF75 - FCB $7B FDB fp_MUL ; $F0F1 * FCB $7B FDB fp_DIV ; $F1C8 / FCB $7F FDB fp_POW ; $F556 ^ FCB $50 FDB fp_OR+1 ; $EA8E AND (fp_AND) FCB $46 FDB fp_OR ; $EA8D OR ;--- Tokens --- TBLE045 FCB $46,$4F,$D2 ;FOR 80 FCB $47,$4F,$54,$CF ;GOTO 81 FCB $47,$4F,$53,$55,$C2 ;GOSUB 82 FCB $52,$45,$CD ;REM 83 FCB $49,$C6 ;IF 84 FCB $44,$41,$54,$C1 ;DATA 85 FCB $50,$52,$49,$4E,$D4 ;PRINT 86 FCB $4F,$CE ;ON 87 FCB $49,$4E,$50,$55,$D4 ;INPUT 88 FCB $45,$4E,$C4 ;END 89 FCB $4E,$45,$58,$D4 ;NEXT 8A FCB $44,$49,$CD ;DIM 8B FCB $52,$45,$41,$C4 ;READ 8C FCB $4C,$45,$D4 ;LET 8D FCB $52,$55,$CE ;RUN 8E FCB $52,$45,$53,$54,$4F,$52,$C5 ;RESTORE 8F FCB $52,$45,$54,$55,$52,$CE ;RETURN 90 FCB $53,$54,$4F,$D0 ;STOP 91 FCB $50,$4F,$4B,$C5 ;POKE 92 FCB $43,$4F,$4E,$D4 ;CONT 93 FCB $4C,$49,$53,$D4 ;LIST 94 FCB $43,$4C,$45,$41,$D2 ;CLEAR 95 FCB $4E,$45,$D7 ;NEW 96 FCB $43,$4C,$4F,$41,$C4 ;CLOAD 97 FCB $43,$53,$41,$56,$C5 ;CSAVE 98 FCB $4C,$4C,$49,$53,$D4 ;LLIST 99 FCB $4C,$50,$52,$49,$4E,$D4 ;LPRINT 9A FCB $53,$45,$D4 ;SET 9B FCB $52,$45,$53,$45,$D4 ;RESET 9C FCB $43,$4C,$D3 ;CLS 9D FCB $53,$4F,$55,$4E,$C4 ;SOUND 9E FCB $45,$58,$45,$C3 ;EXEC 9F FCB $53,$4B,$49,$50,$C6 ;SKIPF A0 FCB $54,$41,$42,$A8 ;TAB( A1 FCB $54,$CF ;TO A2 FCB $54,$48,$45,$CE ;THEN A3 FCB $4E,$4F,$D4 ;NOT A4 FCB $53,$54,$45,$D0 ;STEP A5 FCB $4F,$46,$C6 ;OFF A6 FCB $AB ;+ A7 FCB $AD ;- A8 FCB $AA ;* A9 FCB $AF ;/ AA FCB $DE ;^ AB FCB $41,$4E,$C4 ;AND AC FCB $4F,$D2 ;OR AD FCB $BE ;> AE FCB $BD ;= AF FCB $BC ;< B0 FCB $53,$47,$CE ;SGN B1 FCB $49,$4E,$D4 ;INT B2 FCB $41,$42,$D3 ;ABS B3 FCB $55,$53,$D2 ;USR B4 FCB $52,$4E,$C4 ;RND B5 FCB $53,$51,$D2 ;SQR B6 FCB $4C,$4F,$C7 ;LOG B7 FCB $45,$58,$D0 ;EXP B8 FCB $53,$49,$CE ;SIN B9 FCB $43,$4F,$D3 ;COS BA FCB $54,$41,$CE ;TAN BB FCB $50,$45,$45,$CB ;PEEK BC FCB $4C,$45,$CE ;LEN BD FCB $53,$54,$52,$A4 ;STR$ BE FCB $56,$41,$CC ;VAL BF FCB $41,$53,$C3 ;ASC C0 FCB $43,$48,$52,$A4 ;CHR$ C1 FCB $4C,$45,$46,$54,$A4 ;LEFT$ C2 FCB $52,$49,$47,$48,$54,$A4 ;RIGHT$ C3 FCB $4D,$49,$44,$A4 ;MID$ C4 FCB $50,$4F,$49,$4E,$D4 ;POINT C5 FCB $56,$41,$52,$50,$54,$D2 ;VARPTR C6 FCB $49,$4E,$4B,$45,$59,$A4 ;INKEY$ C7 FCB $4D,$45,$CD ;MEM C8 FCB $00 ; --- Command vector table --- TBLE148 FDB CMD_FOR ; $E4C4 FOR FDB CMD_GOTO ; $E61A GOTO FDB CMD_GOSUB ; $E604 GOSUB FDB CMD_REM ; $E685 REM FDB CMD_IF ; $E672 IF FDB CMD_DATA ; $E651 DATA FDB CMD_PRINT ; $E71F PRINT FDB CMD_ON ; $E692 ON FDB CMD_INPUT ; $E7DE INPUT FDB CMD_END ; $E57F END FDB CMD_NEXT ; $E8BB NEXT FDB CMD_DIM ; $EB12 DIM FDB CMD_READ ; $E80E READ FDB CMD_LET ; $E6D3 LET FDB CMD_RUN ; $E5FA RUN FDB CMD_RESTORE ; $E560 RESTORE FDB CMD_RETURN ; $E631 RETURN FDB CMD_STOP ; $E57E STOP FDB CMD_POKE ; $EF66 POKE FDB CMD_CONT ; $E5A6 CONT FDB CMD_LIST ; $E40D LIST FDB CMD_CLEAR ; $E5B8 CLEAR FDB CMD_NEW ; $E3CD NEW FDB CMD_CLOAD ; $FD5C CLOAD FDB CMD_CSAVE ; $FC3B CSAVE FDB CMD_LLIST ; $E40B LLIST FDB CMD_LPRINT ; $E71C LPRINT FDB CMD_SET ; $FB25 SET FDB CMD_RESET ; $FB55 RESET FDB CMD_CLS ; $FBBF CLS FDB CMD_SOUND ; $FFA5 SOUND FDB CMD_EXEC ; $FC04 EXEC FDB CMD_SKIPF ; $FE2F SKIPF ; --- Errors --- TBLE18A FCB $4E,$46 ;$00 NF NEXT without FOR FCB $53,$4E ;$02 SN Syntax Error FCB $52,$47 ;$04 RG RETURN without GOSUB FCB $4F,$44 ;$06 OD Out of Data FCB $46,$43 ;$08 FC Illegal Function Call FCB $4F,$56 ;$0A OV Overflow FCB $4F,$4D ;$0C OM Out of Memory FCB $55,$4C ;$0E UL Undefined Line FCB $42,$53 ;$20 BS Bad Subscript FCB $44,$44 ;$22 DD Double Dimensioned Array FCB $2F,$30 ;$24 /0 Division by 0 FCB $49,$44 ;$26 ID Illegal Direct Statement FCB $54,$4D ;$28 TM Type Mismatch FCB $4F,$53 ;$2A OS Out of String Space FCB $4C,$53 ;$2C LS Long String (exceeds 255 characters) FCB $53,$54 ;$2E ST String Formula Too Complex ? ""+(""+(""+"")) FCB $43,$4E ;$30 CN Can't Continue FCB $49,$4F ;$32 IO Input/Output Error FCB $46,$4D ;$34 FM File Mode Error TBLE1B0 FCB $20,$45,$52,$52,$4F,$52,$00 ; ERROR TBLE1B7 FCB $20,$49,$4E,$20,$00 ; IN TBLE1BC FCB $0D,$4F,$4B,$0D,$00 ; OK TBLE1C1 FCB $0D,$42,$52,$45,$41,$4B,$00 ; BREAK LBLE1C8 CMPA #$3A ;Leave if non-numeric. Z=':' or NULL BHS LBLE1D7 ; C=Numeric CMPA #$20 ;skip whitespace BNE LBLE1D3 JMP LBL00EB LBLE1D3 SUBA #$30 SUBA #$D0 ;Set Carry if numeric. LBLE1D7 RTS LBLE1D8 TSX LDAB #$04 ABX LBLE1DC LDAB #$12 STX ram89 LDAA ,X ; SP+0==return addr. SP+2==?. SP+4->A SUBA #$80 BNE LBLE1FA LDX 1,X STX ram8B LDX ramB5 BEQ LBLE1F6 CPX ram8B BEQ LBLE1FA BSR LBLE22F BRA LBLE1DC LBLE1F6 LDX ram8B STX ramB5 LBLE1FA LDX ram89 TSTA RTS ; -- copy [C1:BD]->[bf:BB] LBLE1FE BSR LBLE21E; see if D bytes fit on stack LBLE200 TPA PSHA STS ram91 SEI LDS ramBB ; store in [BB] LDX ramBD ; start at [BD] INX LBLE20A DEX LDAA ,X PSHA CPX ramC1 ; stop at [C1] BNE LBLE20A INS STS ramBF ; store end in [BF] LDS ram91 PULA TAP RTS LBLE21A CLRA ; return with 2*B+#$3A+ram99 ASLB ; ADDD ram99 ; check if 2*B+3A+ram99>0xffff LBLE21E ADDD #$003A BLO LBLE236; ?OM error STS ram91 SUBD ram91 BHS LBLE236; ?OM if greater than stack ADDD ram91 RTS LBLE22C CLRA ; B+X->D,X LBLE22D STX ram89 ; D+X->D,X (save old X in 89. New X,D in 8B) LBLE22F ADDD ram89 ; D+ram89->D,X. STD ram8B LDX ram8B RTS LBLE236 LDAB #$0C ;?OM error LBLE238 JSR LBL4297 ;error return extension 1 JSR LBL429A ;error return extension 2 JSR LBLFC86 LDAA ram426E BEQ LBLE249 JSR LBLE3CF LBLE249 JSR LBLE3EE CLR ramE8 ;turn off printer JSR LBLE76A JSR LBLE7BB+1 LDX #TBLE18A ;Error table ABX LDAA ,X JSR LBLE7BE ;A->SCN LDAA 1,X JSR LBLE7BE ;A->SCN LDX #TBLE1B0-1 ;"ERROR" LBLE266 JSR LBLE7A8 ;Write string LDX ramE2 INX BEQ LBLE271 JSR LBLF412 ;' IN ' line LBLE271 JSR LBLE76A LDX #TBLE1BC ;"OK" JSR LBLE7A8 ;Write string LBLE27A LDX #$FFFF STX ramE2 JSR LBLFAA4 ;Get Command Line BLO LBLE27A ;Try again if carry set (BREAK) STX ramF4 JSRE LBL00EB BEQ LBLE27A ;Try again if blank line BLO LBLE293 JSR LBLE311 ;immediate mode - compile line. JMP LBLE53D LBLE293 JSR LBLE6B2 ;get line number->ramA5 LDX ramA5 STX ram42B0 ;store line number JSR LBLE311 ;compile line STAB ram82 ;length of line JSR LBLE3B9 ;find first line greater than line number BLO LBLE2C1 ; none found, insert at end. LDD ramC1 SUBD ,X ADDD ram95 STD ram95 TPA PSHA STS ram91 SEI LDS ,X DES LBLE2B5 PULA STAA ,X INX CPX ram95 BNE LBLE2B5 LDS ram91 PULA TAP LBLE2C1 LDAA TBL42B2 BEQ LBLE2EB LDD ram95 STD ramBD ADDB ram82 ADCA #$00 STD ramBB JSR LBLE1FE ;copy [C1:BD]->[bf:BB] TPA PSHA STS ram91 SEI LDS #$42AD LBLE2DB PULA STAA ,X INX CPX ramBF BNE LBLE2DB LDS ram91 PULA TAP LDX ramBB STX ram95 LBLE2EB JSR LBLE3D9 ;reset variables BSR LBLE2F3 ;adjust next statement pointers JMP LBLE27A ;get command line ; adjust next statement pointers LBLE2F3 LDX ram93 ;start of basic LBLE2F5 LDD ,X ;return if last statement. BNE LBLE2FA RTS LBLE2FA PSHX ;push address of statement LDAB #$04 ABX LBLE2FE INX LDAA ,X BNE LBLE2FE INX PSHX ;push address of next statement TSX LDD ,X ;addr of next statement -> D LDX 2,X ;addr of prev statement -> X STD ,X ;update addr of prev statment to point to next statement. PULX INS INS BRA LBLE2F5 LBLE311 CLR ram85 ;clear DATA token flag LDX ramF4 ;reset pointer back to start of line. DEX STX ramF4 LDX #TBL42B1 ;start of command line buffer-1 STX ramDE STS ram91 TPA ; save interrupt flag STAA ram87 LBLE323 NOP SEI ; disable interrupts LDS ramF4 PULB CMPB #$20 ; ' ' BEQ LBLE364 STAB ram81 CMPB #$22 ; '"' BEQ LBLE38D LDAA ram85 BNE LBLE364 CMPB #$3F ; '?' BNE LBLE33E LDAB #$86 ; 'PRINT' code BRA LBLE364 LBLE33E CMPB #$30 ; '0' BLO LBLE346 CMPB #$3C ; '<' BLO LBLE364 LBLE346 TSTB ; use ! for non-printing input chars BMI LBLE361+1 LDX #TBLE045-1 ; start matching tokens LDS ramF4 CLRB LBLE34F INX LBLE350 PULA CMPA #$20 ; skip whitespace when matching tokens BEQ LBLE350 SUBA ,X BEQ LBLE34F CMPA #$80 BNE LBLE392 ORAB #$80 ; found match, store token. LBLE35F LDX ramDE LBLE361 CPX #$C621 ;LDAB #$21 '!' LBLE364 STS ramF4 LDS ram91 LDAA ram87 ; restore interrupt TAP INX STX ramDE STAB ,X BEQ LBLE3AA SUBB #$3A ; ':' BEQ LBLE37A CMPB #$4B ; 'DATA' encountered BNE LBLE37C LBLE37A STAB ram85 ; set DATA token flag LBLE37C SUBB #$49 ; 'REM' BNE LBLE323 ; get next char. STAB ram81 ; 'REM' found, clear ram81 SEI LDS ramF4 LBLE385 PULB ; copy until 0 or ram81 encountered. TSTB BEQ LBLE364 CMPB ram81 BEQ LBLE364 LBLE38D INX STAB ,X BRA LBLE385 LBLE392 LDS ramF4 ; token failed match INCB ; inc token count LBLE395 LDAA ,X ; INX BPL LBLE395 LDAA ,X BNE LBLE350 STS ramF4 ; no tokens matched. LDS ram91 JSR LBL42A3 LDS ramF4 PULB BRA LBLE35F LBLE3AA STAB 1,X ; clear next two bytes STAB 2,X LDD ramDE SUBD #$42AD ; length of buff in D. LDX #TBL42B1 STX ramF4 RTS LBLE3B9 LDX ram93 LBLE3BB LDD ,X BEQ LBLE3C9 LDD ramA5 SUBD 2,X BLS LBLE3CA LDX ,X BRA LBLE3BB LBLE3C9 SEC LBLE3CA STX ramC1 RTS ; --- NEW command --- CMD_NEW BNE LBLE3CA ; cause syntax error LBLE3CF LDX ram93 ; start of BASIC CLR ,X ; clear line INX CLR ,X INX STX ram95 ; end of BASIC LBLE3D9 LDX ram93 ; transfer control to program DEX STX ramF4 ; read pointer LBLE3DE JSR LBL428E ; NEW command extension LDX ramA1 ; top of string storage STX ram9D ; avail string storage. JSR CMD_RESTORE LDX ram95 ; end of BASIC STX ram97 ; DATA pointer STX ram99 ; LBLE3EE LDX #TBL4241 ; string buff. STX ram423D ; string ptr. PULX LDS ram9B ; bottom of system stack CLRA PSHA STAA ramA7 ; program BREAK address STAA ramA8 ; program BREAK address STAA ram86 ; ? STAA ram426E ; NEW command status flag JMP ,X ; RTS LBLE404 LDAB #$FE ; select printer STAB ramE8 ; turn on printer LBLE408 JMP LBL00F3 ; --- LLIST command --- CMD_LLIST BSR LBLE404 ; --- LIST command --- CMD_LIST TPA PSHA BSR LBLE408 ; Get char JSR LBLE6B2 ; Get line number BSR LBLE3B9 ; Find line number in program PULA TAP PSHX BEQ LBLE431 JSRE LBL00F3 BEQ LBLE436 CMPA #$A8 ; '-' BNE LBLE42E JSRE LBL00EB BEQ LBLE431 JSR LBLE6B2 BEQ LBLE436 LBLE42E JMP LBLEA3C ;?SN ERROR LBLE431 LDX #$FFFF STX ramA5 LBLE436 PULX INS INS LBLE439 JSR LBLE76A JSR LBLE566 LDD ,X BNE LBLE449 LBLE443 CLR ramE8 ; set output to printer JMP LBLE271 LBLE449 LDD 2,X SUBD ramA5 BHI LBLE443 LDD 2,X PSHX JSR LBLF419 PULX INX INX INX INX STX ram89 CLR ram4284 LDAA #$20 LBLE461 CPX #$8621 ;LDAA #$21 LBLE464 LDX ram89 ANDA #$7F LBLE468 JSR LBLE7BE ;A->SCN LDAA ,X INX TSTA BEQ LBLE439 LDAB ram4284 CMPA #$22 ; '"' BNE LBLE47D EORB #$01 STAB ram4284 LBLE47D CMPA #$3A ; ':' BNE LBLE48A BITB #$01 BNE LBLE48A ANDB #$FD STAB ram4284 LBLE48A TSTA BPL LBLE468 TSTB BNE LBLE468 CMPA #$85 ; 'DATA' BNE LBLE496 ORAB #$02 LBLE496 CMPA #$83 ; 'REM' BNE LBLE49C ORAB #$04 LBLE49C STAB ram4284 JSR LBL42A6 CMPA #$C8 ; 'MEM' BHI LBLE461+1 ; write ! for unknown print BSR LBLE4B2 LBLE4A8 LDAA ,X ; write token BMI LBLE464 INX JSR LBLE7BE;A->SCN BRA LBLE4A8 LBLE4B2 SUBA #$7F ;Find address of matching token->X STX ram89 ;save X into ram89 LDX #TBLE045 LBLE4B9 DECA BNE LBLE4BD RTS LBLE4BD TST ,X INX BPL LBLE4BD BRA LBLE4B9 ; --- FOR Command --- CMD_FOR LDAA #$80 STAA ram86 JSR CMD_LET JSR LBLE1D8 PULX BNE LBLE4D5 LDX ram89 ABX TXS LBLE4D5 LDAB #$09 JSR LBLE21A ; Verify 9 words will fit on stack JSR LBLE656 ; ignore rest of line until ':' seen PSHX LDX ramE2 PSHX LDAB #$A2 ;'TO' index JSR LBLEA31 JSR LBLE90E ; expect numeric JSR LBLE90C ; Get numeric value LDAB ramCE ORAB #$7F ANDB ramCA STAB ramCA LDX #LBLE4FA ; push C9-CA onto stack JMP LBLE9A4 LBLE4FA LDX #TBLF08B ; 1.0 JSR LBLF251 ;X->C9-E JSRE LBL00F3 CMPA #$A5 ;'STEP' index BNE LBLE50D JSRE LBL00EB JSR LBLE90C ; Get numeric value LBLE50D JSR LBLF2AD ;Sign C9-E -> B -1 0 1 JSR LBLE9A2 LDX ramB5 PSHX LDAA #$80 PSHA LBLE519 BSR LBLE566 ; check for BREAK or PAUSE LDX ramF4 STX ramA9 LDAA ,X BEQ LBLE52A CMPA #$3A ; ':' BEQ LBLE53D LBLE527 JMP LBLEA3C ; ?SN ERROR LBLE52A INX ; check for next line LDAA ,X INX ORAA ,X STAA ram4283 ; 0 if at last line number BEQ LBLE589 ; Implicit END if no next line. INX LDD ,X STD ramE2 ; Otherwise store current line in E2. INX STX ramF4 LBLE53D JSRE LBL00EB ; get token BSR LBLE544 BRA LBLE519 ; continue executing line LBLE544 BEQ LBLE5B7 ; RTS if 0 encountered. LBLE546 JSR LBL42A0 ; Run command extension TSTA BMI LBLE54F ; Command encountered. JMP CMD_LET ; otherwise, this must be an assignment. LBLE54F CMPA #$A0 ; SKIPF is the last valid command. BHI LBLE527 ; ?SN ERROR ASLA ; lookup command. TAB LDX #TBLE148 ABX LDX ,X JSRE LBL00EB ; prefetch next character. JMP ,X ; GO! [to command] ; --- RESTORE command --- CMD_RESTORE LDX ram93 DEX LBLE563 STX ramAD ;DATA pointer RTS LBLE566 JSR LBLF879 BEQ LBLE576 LBLE56B CMPA #$03 ; 'break pressed? BEQ CMD_STOP CMPA #$13 ; 'shift+@ pressed (pause) BEQ LBLE577 ; wait for next key. STAA ram427F LBLE576 RTS LBLE577 JSR LBLF883 BEQ LBLE577 BRA LBLE56B ; --- STOP command --- CMD_STOP SEC ; --- END command --- CMD_END BNE LBLE5B7 LDX ramF4 STX ramA9 LBLE585 ROR ram4283 ; break status flag PULX LBLE589 LDX ramE2 INX BEQ LBLE595 DEX STX ramA3 LDX ramA9 STX ramA7 LBLE595 CLR ramE8 ; turn off printing LDX #TBLE1C1-1 ; 'BREAK' TST ram4283 BPL LBLE5A3 JMP LBLE266 ; in program LBLE5A3 JMP LBLE271 ; not in program ; --- CONT command --- CMD_CONT BNE LBLE5B7 LDAB #$20 ;?CN error LDX ramA7 BNE LBLE5B1 JMP LBLE238 ;write ?CN error LBLE5B1 STX ramF4 LDX ramA3 STX ramE2 LBLE5B7 RTS ; --- CLEAR command --- CMD_CLEAR BEQ LBLE5F4 JSR LBLEBBD PSHB PSHA LDX ramA1 ; top of string storage STX ramCC JSRE LBL00F3 BEQ LBLE5DA JSR LBLEA2E+1 ; get ',' JSR LBLEF4C LDX ramCC DEX STX ramCC LDD ram4250 ; end of memory pointer SUBD ramCC BLO LBLE5F7 ; ?OM error LBLE5DA LDD ramCC PSHB PSHA TSX SUBD 2,X BLO LBLE5F7 ; ?OM error STD 2,X SUBD #$003A BLO LBLE5F7 ; ?OM error SUBD ram95 BLO LBLE5F7 ; ?OM error PULX STX ramA1 ; top of string storage PULX STX ram9B ; bottom of system stack LBLE5F4 JMP LBLE3DE ; reset variables LBLE5F7 JMP LBLE236 ; ?OM ERROR ; --- RUN command --- CMD_RUN BNE LBLE5FF JMP LBLE3D9 ; transfer control to program / reset variables LBLE5FF JSR LBLE3DE ; reset data variables BRA LBLE612 ; --- GOSUB command --- CMD_GOSUB LDAB #$03 JSR LBLE21A ; verify 3 words on stack LDX ramF4 PSHX LDX ramE2 PSHX LDAA #$82 PSHA LBLE612 JSRE LBL00F3 BSR CMD_GOTO JMP LBLE519 ; Continue executing line ; --- GOTO command --- CMD_GOTO JSR LBLE6B2 BSR LBLE658+1 INX LDD ramA5 SUBD ramE2 BHI LBLE628 LDX ram93 LBLE628 JSR LBLE3BB BLO LBLE641+1 ;?UL error DEX STX ramF4 LBLE630 RTS ; --- RETURN command --- CMD_RETURN BNE LBLE630 ; will ultimately result in ?SN error LDAA #$FF STAA ramB5 JSR LBLE1D8 TXS CMPA #$02 BEQ LBLE64A LDAB #$04 ;?RG error LBLE641 CPX #$C60E ;LDAB #$0E ?UL error JMP LBLE238 ;Write error LBLE647 JMP LBLEA3C ;?SN error LBLE64A PULA PULX STX ramE2 PULX STX ramF4 ; --- DATA command --- CMD_DATA BSR LBLE656 ; ignore rest of line until ':' or 0 reached. STX ramF4 LBLE655 RTS LBLE656 LDAB #$3A ; ignore rest of line until ':' or 0 reached. LBLE658 LDAA #$5F ;CLRB; ignore rest of line STAB ram80 CLRB LDX ramF4 LBLE65F TBA LDAB ram80 STAA ram80 LBLE664 LDAA ,X BEQ LBLE655 CBA BEQ LBLE655 INX CMPA #$22 ; '"' BEQ LBLE65F BRA LBLE664 ; --- IF command --- CMD_IF JSR LBLE90C ; Get numeric value JSRE LBL00F3 CMPA #$81 ; GOTO BEQ LBLE681 LDAB #$A3 ; THEN JSR LBLEA31 LBLE681 LDAA ramC9 BNE LBLE68A ; --- REM command --- CMD_REM BSR LBLE658+1 STX ramF4 RTS LBLE68A JSRE LBL00F3 BLO CMD_GOTO JMP LBLE544 ; --- ON command ---- CMD_ON JSR LBLEF0D ; Arg->ramCD PSHA CMPA #$82 ; GOSUB BEQ LBLE69E CMPA #$81 ; GOTO LBLE69C BNE LBLE647 ; ?SN ERROR LBLE69E DEC ramCD BNE LBLE6A7 PULA JMP LBLE546 LBLE6A7 JSRE LBL00EB BSR LBLE6B2 ; get line number->A5 CMPA #$2C ; ',' BEQ LBLE69E INS LBLE6B1 RTS ; bug -- "0 ON 2 GOTO 4,#,4,4#" hangs the MC-10 on RUN. LBLE6B2 LDX #$0000 ; get line number->ramA5 STX ramA5 LBLE6B7 BHS LBLE6B1 SUBA #$30 STAA ram80 LDD ramA5 ; Get line number CMPA #$18 ; err if > 6399 BHI LBLE69C ; ?SN ERROR ASLD ; ramA5 = 10*ramA5 + ram80 ASLD ADDD ramA5 ASLD ADDB ram80 ADCA #$00 STD ramA5 JSRE LBL00EB BRA LBLE6B7 ; --- LET command --- CMD_LET JSR LBLEB1B STX ramB5 LDAB #$AF JSR LBLEA31 LDAA ram84 ; vartype flag PSHA JSR LBLE91A PULA RORA JSR LBLE910 ;check for ?TM and get next number BEQ LBLE719 LBLE6EA LDX ramCC LDD ram9B ; bottom of system stack SUBD 2,X BHS LBLE705 LDD ram95 SUBD ramCC BHI LBLE705 LDAB ,X JSR LBLECFC LDX ramC7 JSR LBLEE38 LDX #ramD0 LBLE705 STX ramC7 JSR LBLEE70 LDX ramC7 LDAA ,X PSHA LDD 2,X LDX ramB5 STD 2,X PULA STAA ,X RTS LBLE719 JMP LBLF26F+1 ; --- LPRINT command --- CMD_LPRINT JSR LBLE404 ; --- PRINT command --- CMD_PRINT BSR LBLE725 CLR ramE8 ; turn off printing RTS LBLE725 BEQ LBLE766 CMPA #$40 ; '@' BNE LBLE736 JSR LBLFC29 JSRE LBL00F3 BEQ LBLE766 JSR LBLEA2E+1 ; get ',' LBLE736 BEQ LBLE773 LBLE738 CMPA #$A1 BEQ LBLE78C CMPA #$2C BEQ LBLE774 CMPA #$3B BEQ LBLE7A2 JSR LBLE91A LDAA ram84 ; vartype flag PSHA BNE LBLE752 JSR LBLF426 JSR LBLED05 LBLE752 BSR LBLE7AB PULB TSTB BNE LBLE761 JSRE LBL00F3 CMPA #$2C BEQ LBLE774 BSR LBLE7B9 LBLE761 JSRE LBL00F3 BNE LBLE738 LBLE766 LDAA #$0D BRA LBLE7BE ;A->SCN LBLE76A JSR LBLFA7B BEQ LBLE766 LDAA ramE6 BNE LBLE766 LBLE773 RTS LBLE774 JSR LBLFA7B BEQ LBLE783 LDAB ramE6 CMPB ramE5 BLO LBLE785 BSR LBLE766 BRA LBLE7A2 LBLE783 LDAB ramE6 LBLE785 SUBB ramE4 BHS LBLE785 NEGB BRA LBLE79D LBLE78C JSR LBLEF0A CMPA #$29 BEQ LBLE796 JMP LBLEA3C ;?SN ERROR LBLE796 JSR LBLFA7B SUBB ramE6 BLS LBLE7A2 LBLE79D BSR LBLE7B9 DECB BNE LBLE79D LBLE7A2 JSRE LBL00EB JMP LBLE736 ; --- Write string to screen --- LBLE7A8 JSR LBLED06 ;Calc string length LBLE7AB JSR LBLEE56 ;Get length to B, start address to X INCB LBLE7AF DECB ;Dec char count BEQ LBLE773 ;RTS LDAA ,X ;Get char INX ;Inc char ptr BSR LBLE7BE ;A->SCN Write char BRA LBLE7AF ;Next char LBLE7B9 LDAA #$20 LBLE7BB CPX #$863F ;LDAA #$3F LBLE7BE JMP LBLF9C6 ;A->SCN TBLE7C1 FCB $3F,$52,$45,$44,$4F,$0D,$00 ;?REDO LBLE7C8 LDAA ram87 BEQ LBLE7D3 LDX ramAB STX ramE2 JMP LBLEA3C ;?SN ERROR LBLE7D3 LDX #TBLE7C1-1 JSR LBLE7A8 LDX ramA9 STX ramF4 LBLE7DD RTS ; --- INPUT command --- CMD_INPUT LDAB #$16 ;?ID error LDX ramE2 INX BNE LBLE7E8 JMP LBLE238 ;write ?ID error LBLE7E8 CMPA #$22 ;check for "Prompt"; BNE LBLE7F7 JSR LBLEA07 ; scan string until '"' reached. LDAB #$3B JSR LBLEA31 ;expect and skip ';' JSR LBLE7AB ;write string to screen. LBLE7F7 BSR LBLE7FF ;"? " and get command line LDAB #$2C STAB ,X BRA LBLE810+1 LBLE7FF JSR LBLE7BB+1 ; "?"->SCN JSR LBLE7B9 ; " "->SCN JSR LBLFAA4 ; get command line BHS LBLE7DD PULX JMP LBLE585 ;break pressed - abort prog ; --- READ command --- CMD_READ LDX ramAD ;DATA pointer LBLE810 LDAA #$4F ;CLRA [used during INPUT command] STAA ram87 STX ramAF LBLE816 JSR LBLEB1B ; Get Var STX ramB5 LDX ramF4 STX ramA5 LDX ramAF LDAA ,X BNE LBLE82E LDAA ram87 BNE LBLE877 JSR LBLE7BB+1 BSR LBLE7FF LBLE82E STX ramF4 JSRE LBL00EB LDAB ram84 ;vartype flag BEQ LBLE853 LDX ramF4 STAA ram80 CMPA #$22 BEQ LBLE846 DEX LDAA #$3A STAA ram80 LDAA #$2C LBLE846 STAA ram81 JSR LBLED0C JSR LBLEF3E JSR LBLE6EA BRA LBLE859 LBLE853 JSR LBLF359 JSR LBLF26F+1 LBLE859 JSRE LBL00F3 BEQ LBLE865 CMPA #$2C BEQ LBLE865 JMP LBLE7C8 LBLE865 LDX ramF4 STX ramAF LDX ramA5 STX ramF4 JSRE LBL00F3 BEQ LBLE897 JSR LBLEA2E+1 ; get ',' BRA LBLE816 LBLE877 STX ramF4 JSR LBLE656 ; ignore rest of line thru ':' INX TSTA BNE LBLE88F LDAB #$06 LDAA ,X ORAA 1,X BEQ LBLE8CE LDD 2,X STD ramAB LDAB #$04 ABX LBLE88F LDAA ,X CMPA #$85 BNE LBLE877 BRA LBLE82E LBLE897 LDX ramAF LDAB ram87 BEQ LBLE8A0 JMP LBLE563 LBLE8A0 LDAA ,X BEQ LBLE8AA LDX #LBLE8AB-1 JMP LBLE7A8 LBLE8AA RTS LBLE8AB FCB $3F,$45,$58,$54,$52,$41,$20,$49,$47,$4E,$4F,$52,$45,$44,$0D,$00 ;?EXTRA IGNORED ; --- NEXT command --- CMD_NEXT BNE LBLE8C2 LDX #$0000 BRA LBLE8C5 LBLE8C2 JSR LBLEB1B ;Get Var LBLE8C5 STX ramB5 JSR LBLE1D8 BEQ LBLE8D0 LDAB #$00 ;?NF error LBLE8CE BRA LBLE917 ;write error LBLE8D0 TXS INX INX INX JSR LBLF251 ;X->C9-E TSX LDAA $08,X STAA ramCE LDX ramB5 JSR LBLEF7D JSR LBLF26F+1 TSX LDAB #$09 ABX JSR LBLF2D9 TSX SUBB $08,X BEQ LBLE8FC LDX $0E,X STX ramE2 TSX LDX $10,X STX ramF4 LBLE8F9 JMP LBLE519 ; continue executing line LBLE8FC LDAB #$12 ABX TXS JSRE LBL00F3 CMPA #$2C ; ',' BNE LBLE8F9 ; continue executing line JSRE LBL00EB BSR LBLE8C2 LBLE90C BSR LBLE91A LBLE90E TST $0D,X ;SEC E-expect numeric? F-expect string? LBLE910 ROR ram84 ;vartype flag BVC LBLE8AA ;RTS LDAB #$18 ;?TM error LBLE917 JMP LBLE238 LBLE91A LDX ramF4 DEX STX ramF4 CLRA LBLE920 LDAB #$37 ;PSHB PSHA LDAB #$01 JSR LBLE21A ; see if 1 word fits on stack JSR LBLE9E5 CLR ramB9 LBLE92E JSRE LBL00F3 LBLE931 SUBA #$AE ; '>' ; + - * / ^ AND OR > = < BLO LBLE949 CMPA #$03 ; SGN BHS LBLE949 CMPA #$01 ROLA EORA ramB9 CMPA ramB9 BLO LBLE99B STAA ramB9 JSRE LBL00EB BRA LBLE931 LBLE949 LDAB ramB9 BNE LBLE978 BHS LBLE9B5 ADDA #$07 ; + - * / ^ AND OR > = < BHS LBLE9B5 ADCA ram84 ; vartype flag BNE LBLE95A JMP LBLEE06 LBLE95A ADCA #$FF TAB ; B = A*3 ASLA ABA TAB LDX #TBLE030 ABX LBLE964 PULA CMPA ,X BHS LBLE9BC BSR LBLE90E ;expect numeric LBLE96B PSHA BSR LBLE991 LDX ramB7 PULA BNE LBLE98B TSTA BEQ LBLE9E2 BRA LBLE9C5 LBLE978 ASL ram84 ROLB LDX ramF4 DEX STX ramF4 LDX #TBLE988 STAB ramB9 BRA LBLE964 TBLE988 FCB $64,$EA,$AE LBLE98B CMPA ,X BHS LBLE9C5 BRA LBLE96B LBLE991 LDD 1,X PSHB ;push binary fp operation onto stack. PSHA BSR LBLE99E ;push CE onto stack. LDAB ramB9 BRA LBLE920+1 LBLE99B JMP LBLEA3C ;?SN ERROR LBLE99E LDAB ramCE ;push C9-CE onto stack. LDAA ,X LBLE9A2 PULX PSHB LBLE9A4 LDAB ramCD ;push C9 onto stack and return. PSHB LDAB ramCC PSHB LDAB ramCB PSHB LDAB ramCA PSHB LDAB ramC9 PSHB JMP ,X LBLE9B5 LDX #$0000 PULA TSTA BEQ LBLE9E2 LBLE9BC CMPA #$64 BEQ LBLE9C3 JSR LBLE90E ; expect numeric LBLE9C3 STX ramB7 LBLE9C5 PULB CMPA #$5A BEQ LBLE9E4 ;RTS CMPA #$7D BEQ LBLE9E4 ;RTS LSRB STAB ram88 PULA PULB STD ramD6 PULX STX ramD8 PULB STAB ramDA PULB STAB ramDB EORB ramCE STAB ramDC LBLE9E2 LDAB ramC9 LBLE9E4 RTS LBLE9E5 JSR LBL4294 ; maths command extension CLR ram84 ; vartype flag BSR LBLEA39 ; get next char BHS LBLE9F2 ; go if not numeric LBLE9EF JMP LBLF359 ; get FP number LBLE9F2 JSR LBLEB76 ; is_alpha()? BHS LBLEA49 ; go if alpha() CMPA #$2E ; '.' BEQ LBLE9EF CMPA #$A8 ; '-' BEQ LBLEA41 CMPA #$A7 ; '+' BEQ LBLE9E5 CMPA #$22 ; '"' BNE LBLEA0F LBLEA07 LDX ramF4 JSR LBLED06 JMP LBLEF3E LBLEA0F CMPA #$A4 ; ? NOT BNE LBLEA20 LDAA #$5A JSR LBLE920+1 JSR LBLEBC7 ;get result into D COMA ;perform bitwise negation COMB JMP LBLECE3 ;return D LBLEA20 SUBA #$B1 ; start of function tokens [SGN()] BHS LBLEA55 ;go if a function LBLEA24 BSR LBLEA2B+1 ;otherwise, must be a parenthetical expression JSR LBLE91A LBLEA29 LDAB #$29 ; ')' expect and skip char. LBLEA2B CPX #$C628 ;LDAB #$28 '(' LBLEA2E CPX #$C62C ;LDAB #$2C ',' LBLEA31 PSHX LDX ramF4 CMPB ,X PULX BNE LBLEA3C ;?SN error LBLEA39 JMP LBL00EB LBLEA3C LDAB #$02 ;?SN error JMP LBLE238 LBLEA41 LDAA #$7D JSR LBLE920+1 JMP LBLF593 LBLEA49 JSR LBLEB1B ; :get/init var STX ramCC LDAA ram84 ;vartype flag BNE LBLE9E4 JMP LBLF251 ;X->C9-E LBLEA55 TAB ASLB BSR LBLEA39 ;get next char PSHB CMPB #$22 ;'"' BLO LBLEA7F CMPB #$2C ;',' BHS LBLEA81 BSR LBLEA2B+1 ;get '(' PULB CMPB #$28 ;'(' BHS LBLEA82 PSHB JSR LBLE91A BSR LBLEA2E+1 ;get ',' JSR LBLE90E+1 ;expect string PULA LDX ramCC PSHX PSHA JSR LBLEF0D PULA PSHB TAB BRA LBLEA82 LBLEA7F BSR LBLEA24 LBLEA81 PULB LBLEA82 LDX #TBLE000 ABX LDX ,X JSR ,X JMP LBLE90E ; expect numeric fp_OR LDAA #$4F ; perform fp OR. CLRA -- perform fp_AND. STAA ram82 JSR LBLEBC7 ; get result->D STD ram80 JSR LBLF28B ; copy D6->C9. Clear DD. JSR LBLEBC7 ; get result->D TST ram82 BNE LBLEAA7 ANDA ram80 ; perform the AND ANDB ram81 BRA LBLEAAB LBLEAA7 ORAA ram80 ; perform the OR ORAB ram81 LBLEAAB JMP LBLECE3 ; return D. ; probably < = > ?? fp_EAAE JSR LBLE910 ; check for ?TM and get next number BNE LBLEAC3 LDAA ramDB ORAA #$7F ANDA ramD7 STAA ramD7 LDX #ramD6 JSR LBLF2D9 BRA LBLEB03 LBLEAC3 CLR ram84 ; vartype flag DEC ramB9 JSR LBLEE56 STAB ramD0 STX ramD2 LDX ramD9 JSR LBLEE58 LDAA ramD0 SBA BEQ LBLEAE1 LDAA #$01 BHS LBLEAE1 LDAB ramD0 NEGA LBLEAE1 STAA ramCE TPA PSHA STS ram91 SEI TXS LDX ramD2 INCB DEX LBLEAED DECB BNE LBLEAF4 LDAB ramCE BRA LBLEAFF LBLEAF4 PULA INX CMPA ,X BEQ LBLEAED LDAB #$FF BHS LBLEAFF NEGB LBLEAFF LDS ram91 PULA TAP LBLEB03 ADDB #$01 ROLB ANDB ram88 BEQ LBLEB0C LDAB #$FF LBLEB0C JMP LBLF2BC LBLEB0F JSR LBLEA2E+1 ; get ',' ; --- DIM command --- CMD_DIM TAB BSR LBLEB1F JSRE LBL00F3 BNE LBLEB0F RTS LBLEB1B CLRB JSRE LBL00F3 ;Get current char LBLEB1F STAB ram83 ; STAA ramB1 JSRE LBL00F3 BSR LBLEB76 ;Check for A-Z BHS LBLEB2D JMP LBLEA3C ;?SN error LBLEB2D CLRB STAB ram84 ; vartype flag JSRE LBL00EB ; get next char BLO LBLEB39 ; go if numeric BSR LBLEB76 ; check for A-Z BLO LBLEB43 ; go if not LBLEB39 TAB ; B holds second char (0) if none. LBLEB3A JSRE LBL00EB ; skip until first non-alphanumeric char BLO LBLEB3A ; ' BSR LBLEB76 ; ' BHS LBLEB3A ; ' LBLEB43 CMPA #$24 ; check for $ BNE LBLEB4F COM ram84 ; vartype flag FF=string 00=numeric ADDB #$80 ; mask second char of B if string JSRE LBL00EB ; get next char LBLEB4F STAB ramB2 ; B1-B2 hold varname. LDAB ram86 ; 01 if in CSAVE* or CLOAD* 80 if in FOR 0 else? DECB BNE LBLEB59 JMP LBLEC07 LBLEB59 ADDA ram86 SUBA #$28 ;'(' BNE LBLEB62 JMP LBLEBDE LBLEB62 CLR ram86 LDX ram95 ; start of variable space LBLEB67 CPX ram97 ; start of dim variable space BEQ LBLEB7F ; go if varname not found LDD ramB1 SUBD ,X BEQ LBLEBB0 ; go if varname found LDAB #$07 ABX BRA LBLEB67 ; try again LBLEB76 CMPA #$41 ; 'A' BLO LBLEB7E SUBA #$5B ; 'Z' SUBA #$A5 ;-'Z' LBLEB7E RTS LBLEB7F PULX ;Varname not found. find caller PSHX CPX #$EA4C ;were we called from EA49? BNE LBLEB8A ;yes, insert variable LDX #TBLEBB7 ;[X]=0 RTS LBLEB8A LDD ram99 ;end of arrays STD ramBD ; ADDD #$0007 ;length of var STD ramBB ; LDX ram97 ;start of arrays STX ramC1 ; JSR LBLE1FE ;copy [C1:BD]->[bf:BB] LDX ramBB ; STX ram99 ;bump end of arrays LDX ramBF ; STX ram97 ;bump start of arrays LDX ramC1 ;get destination of variable LDD ramB1 ;get varname STD ,X ;store varname CLRA CLRB STD 2,X ;initialize variable to zero STD 4,X STAA 6,X LBLEBB0 INX INX STX ramB3 ;?start of array data RTS TBLEBB5 FCB $90 FCB $80 TBLEBB7 FCB $00 FCB $00 FCB $00 LBLEBBA JSRE LBL00EB LBLEBBD JSR LBLE90C LBLEBC0 JSR LBLE90E ;expect numeric LDAA ramCE BMI LBLEC2D+1 ;?FC error LBLEBC7 JSR LBLE90E ;expect numeric LDAA ramC9 CMPA #$90 BLO LBLEBD8 LDX #TBLEBB5 ; -32768.0 JSR LBLF2D9 ; compare [X] with C9-E. BNE LBLEC2D+1 ;?FC error LBLEBD8 JSR LBLF30B ; C9-x -> integer LDD ramCC LBLEBDD RTS LBLEBDE LDX ram83 ; Array detected... PSHX CLRB LBLEBE2 PSHB LDX ramB1 PSHX BSR LBLEBBA PULX STX ramB1 PULB INCB STAB ram82 PULA PULB LDX ramCC PSHX PSHB PSHA LDAB ram82 JSRE LBL00F3 CMPA #$2C BEQ LBLEBE2 JSR LBLEA29; get ')' PULX STX ram83 LDAB #$FF LBLEC07 PSHB LDX ram97 LBLEC0A CPX ram99 BEQ LBLEC33 ; go if not found LDD ramB1 ; get varname SUBD ,X BEQ LBLEC1B ; go if found LDD 2,X ; get length of current var JSR LBLE22D ; D+X->D,X BRA LBLEC0A LBLEC1B LDAB #$12 ;?DD error PULA TSTA BEQ LBLEBDD ; RTS - if found and 0 on stack LDAA ram83 BNE LBLEC30 ;write error if in a DIM command on a previously alloc'd var. LDAB ram82 CMPB 4,X BEQ LBLEC87 LBLEC2B LDAB #$10 ;?BS error LBLEC2D CPX #$C608 ;LDAB #$08 ?FC error LBLEC30 JMP LBLE238 LBLEC33 PULA TSTA BEQ LBLEC2D+1 ;?FC error LDD #$0005 STD ramDE LDD ramB1 STD ,X LDAB ram82 STAB 4,X JSR LBLE21A ; see if B words fit on stack STX ramBB LBLEC49 LDAB #$0B CLRA TST ram83 BEQ LBLEC56 PULA PULB ADDD #$0001 LBLEC56 STD 5,X BSR LBLECB9 STD ramDE INX INX DEC ram82 BNE LBLEC49 JSR LBLE22D ; D+X->D,X BHS LBLEC6B JMP LBLE236 ; ?OM ERROR LBLEC6B JSR LBLE21E ; see if D bytes fit on stack SUBD #$0035 STD ram99 CLRA LBLEC74 DEX STAA 5,X CPX ram89 BNE LBLEC74 LDX ramBB LDAA ram99 SUBD ramBB STD 2,X LDAA ram83 BNE LBLECB8 LBLEC87 LDAB 4,X STAB ram82 CLRA CLRB LBLEC8D STD ramDE PULA PULB STD ramCC PSHB PSHA SUBD 5,X BHS LBLECD8 LDD ramDE PULA PULB BEQ LBLECA3 BSR LBLECB9 ADDD ramCC LBLECA3 INX INX DEC ram82 BNE LBLEC8D STD ram89 ASLD ASLD ADDD ram89 ADDD #$0005 JSR LBLE22D ;D+X->D,X STX ramB3 LBLECB8 RTS LBLECB9 LDAA #$10 STAA ramBF LDD 5,X STD ram91 CLRA CLRB LBLECC3 ASLD BLO LBLECD8 ASL ramDF ROL ramDE BHS LBLECD2 ADDD ram91 BLO LBLECD8 LBLECD2 DEC ramBF BNE LBLECC3 RTS LBLECD8 JMP LBLEC2B ; --- MEM function --- FNC_MEM STS ram91 LDD ram91 SUBD ram99 FCB $21 ;"BRN CLRA" LBLECE2 CLRA ; return value of B. LBLECE3 CLR ram84 ; vartype flag = 0 (numeric) STD ramCA LDAB #$90 JMP LBLF2C3 ; --- STR$ function --- FNC_STR JSR LBLE90E ; expect numeric LDX #TBL4334 JSR LBLF429 PULX LDX #TBL4333 BRA LBLED06 LBLECFC STX ramC7 LBLECFE BSR LBLED5F LBLED00 STX ramD2 STAB ramD0 RTS LBLED05 DEX LBLED06 LDAA #$22 STAA ram80 ;String term char #1 STAA ram81 ;String term char #2 LBLED0C INX STX ramDC STX ramD2 LDAB #$FF LBLED13 INCB LDAA ,X BEQ LBLED26 ;Null char term INX CMPA ram80 BEQ LBLED21 CMPA ram81 BNE LBLED13 LBLED21 CMPA #$22 BEQ LBLED26 DEX LBLED26 STX ramDE ;Points to non-null, non-" term char. STAB ramD0 ;stringsize->D0 PSHB LDD ramDC SUBD #$4334 ;See if in command buffer PULB BHI LBLED3A ;Jump if in program BSR LBLECFC LDX ramDC JSR LBLEE3A LBLED3A LDX ram423D ;string buff pointer CPX #$4250 ;end of pointer space BNE LBLED47 LDAB #$1E ;?ST error LBLED44 JMP LBLE238 LBLED47 LDAA ramD0 ;stringsize STAA ,X LDD ramD2 STD 2,X LDAA #$FF STAA ram84 ;vartype flag STX ram423F ;temp str buff ptr STX ramCC LDAB #$05 ABX STX ram423D ;string buff pointer RTS LBLED5F CLR ram85 LBLED62 PSHB CLRA STD ram89 LDD ram9D SUBD ram89 SUBD ram9B ; bottom of system stack BLO LBLED79 ADDD ram9B ; bottom of system stack STD ram9D LDX ram9D INX STX ram9F PULB RTS LBLED79 LDAB #$1A ;?OS error COM ram85 BEQ LBLED44 ;write error BSR LBLED85 PULB BRA LBLED62 LBLED85 LDX ramA1 LBLED87 STX ram9D CLRA CLRB STD ramC5 LDX ram9B ; bottom of system stack STX ramC1 LDX #TBL4241 LBLED94 CPX ram423D ;string buff pointer BEQ LBLED9D BSR LBLEDCD BRA LBLED94 LBLED9D LDX ram95 LBLED9F CPX ram97 BEQ LBLEDA7 BSR LBLEDC7 BRA LBLED9F LBLEDA7 STX ramBB LBLEDA9 LDX ramBB LBLEDAB CPX ram99 BEQ LBLEDE7 LDD 2,X ADDD ramBB STD ramBB LDAA 1,X BPL LBLEDA9 LDAB 4,X ASLB ADDB #$05 ABX LBLEDBF CPX ramBB BEQ LBLEDAB BSR LBLEDCD BRA LBLEDBF LBLEDC7 LDAA 1,X INX INX BPL LBLEDE3 LBLEDCD LDAB ,X BEQ LBLEDE3 LDD 2,X SUBD ram9D BHI LBLEDE3 LDD 2,X SUBD ramC1 BLS LBLEDE3 STX ramC5 LDD 2,X STD ramC1 LBLEDE3 LDAB #$05 ABX LBLEDE6 RTS LBLEDE7 LDX ramC5 BEQ LBLEDE6 CLRA LDAB ,X DECB ADDD ramC1 STD ramBD LDX ram9D STX ramBB JSR LBLE200 LDX ramC5 LDD ramBF STD 2,X LDX ramBF DEX JMP LBLED87 LBLEE06 LDX ramCC PSHX JSR LBLE9E5 JSR LBLE90E+1 ; expect string PULX STX ramDC LDAB ,X LDX ramCC ADDB ,X BHS LBLEE1F LDAB #$1C ;?LS error JMP LBLE238 LBLEE1F JSR LBLECFC LDX ramDC LDAB ,X BSR LBLEE38 LDX ramC7 BSR LBLEE58 BSR LBLEE3A LDX ramDC BSR LBLEE58 JSR LBLED3A JMP LBLE92E LBLEE38 LDX 2,X LBLEE3A TPA PSHA STS ram91 SEI TXS LDX ram9F INCB BRA LBLEE49 LBLEE45 PULA STAA ,X INX LBLEE49 DECB BNE LBLEE45 STX ram9F LDS ram91 PULA TAP RTS LBLEE53 JSR LBLE90E+1 ;expect string LBLEE56 LDX ramCC LBLEE58 LDAB ,X BSR LBLEE70 BNE LBLEE6D LDX 7,X DEX CPX ram9D ; next free string store BNE LBLEE6B PSHB ADDD ram9D STD ram9D PULB LBLEE6B INX RTS LBLEE6D LDX 2,X RTS LBLEE70 CPX ram423F ;tmp str buff ptr BNE LBLEE81 STX ram423D ;string buff pointer DEX DEX DEX DEX DEX STX ram423F ;tmp str buff ptr CLRA LBLEE81 RTS ; --- LEN function --- FNC_LEN BSR LBLEE87 ; stringlen->B LBLEE84 JMP LBLECE2 LBLEE87 BSR LBLEE53 CLR ram84 ; vartype flag TSTB RTS ; --- CHR$ function --- FNC_CHR JSR LBLEF10 LBLEE91 LDAB #$01 JSR LBLED5F LDAA ramCD JSR LBLED00 STAA ,X LBLEE9D INS INS LBLEE9F JMP LBLED3A ; --- ASC function --- FNC_ASC BSR LBLEEA6 BRA LBLEE84 LBLEEA6 BSR LBLEE87 BEQ LBLEF07 ;?FC error LDAB ,X RTS ; --- LEFT$ function --- FNC_LEFT BSR LBLEEF2 CLRA LBLEEB0 CMPB ,X BLS LBLEEB7 LDAB ,X CLRA LBLEEB7 PSHB PSHA JSR LBLECFE LDX ramC7 BSR LBLEE58 PULB ABX PULB JSR LBLEE3A BRA LBLEE9F ; --- RIGHT$ function --- FNC_RIGHT BSR LBLEEF2 LDAA ,X SBA BRA LBLEEB0 ; --- MID$ function --- FNC_MID LDAB #$FF STAB ramCD BSR LBLEF19 CMPA #$29 ;')' BEQ LBLEEDC JSR LBLEF47 LBLEEDC BSR LBLEEF2 BEQ LBLEF07 ;?FC error CLRB DECA CMPA ,X BHS LBLEEB7 TAB SUBB ,X NEGB CMPB ramCD BLS LBLEEB7 LDAB ramCD BRA LBLEEB7 LBLEEF2 JSR LBLEA29; get ')' TSX LDD 5,X STD ramC7 LDD ,X STD 5,X INS INS INS INS PULA LDX ramC7 TAB RTS LBLEF07 JMP LBLEC2D+1 ;?FC error LBLEF0A JSRE LBL00EB ;get arg -> B LBLEF0D JSR LBLE90C LBLEF10 JSR LBLEBC0 LDAA ramCC ; err if result >255 BNE LBLEF07 ;?FC error LDAB ramCD LBLEF19 JMP LBL00F3 ; --- VAL function --- FNC_VAL JSR LBLEE87 BNE LBLEF24 JMP LBLEFF4 LBLEF24 JSR LBLE22C LDAA ,X PSHA CLR ,X LDX ramF4 STX ramDE LDX ram89 STX ramF4 BSR LBLEF19 JSR LBLF359 ; get FP number PULA LDX ram8B STAA ,X LBLEF3E LDX ramDE STX ramF4 RTS LBLEF43 BSR LBLEF4C STX ramA5 LBLEF47 JSR LBLEA2E+1 ;get ',' BRA LBLEF0D ;get arg into B ; get 0-65535 into X LBLEF4C JSR LBLE90C ;get numeric var. LBLEF4F LDAA ramCE BMI LBLEF07 ;?FC error LDAA ramC9 CMPA #$90 BHI LBLEF07 ;?FC error JSR LBLF30B ;C9->integer LDX ramCC RTS ; --- PEEK function --- FNC_PEEK BSR LBLEF4F LDAB ,X JMP LBLECE2; return B ; --- POKE function --- CMD_POKE BSR LBLEF43 LDX ramA5 STAB ,X RTS LBLEF6D LDX #TBLF524 BRA LBLEF7D LBLEF72 JSR LBLF160 ; perform fp - fp_SUB COM ramCE COM ramDC BRA fp_ADD LBLEF7D JSR LBLF160 ; peform fp + fp_ADD TSTB BNE LBLEF86 JMP LBLF28B ; copy D6->C9. Clear DD. LBLEF86 LDX #ramD6 LBLEF89 TAB BEQ LBLEFF9 ; RTS SUBB ramC9 BEQ LBLEFFA BMI LBLEF9C STAA ramC9 LDAA ramDB STAA ramCE LDX #ramC9 NEGB LBLEF9C CMPB #$F8 BLE LBLEFFA CLRA LSR 1,X JSR LBLF080 LBLEFA6 LDAB ramDC BPL LBLEFB5 COM 1,X COM 2,X COM 3,X COM 4,X COMA ADCA #$00 LBLEFB5 STAA ramDD LDAA ramCD ADCA ramDA STAA ramCD LDAA ramCC ADCA ramD9 STAA ramCC LDAA ramCB ADCA ramD8 STAA ramCB LDAA ramCA ADCA ramD7 STAA ramCA TBA BPL LBLF018+1 LBLEFD2 BLO LBLEFD6 BSR LBLF03C ; negate C9-E LBLEFD6 CLRB LBLEFD7 LDAA ramCA BNE LBLF00F LDAA ramCB ;shift digits left by one byte STAA ramCA LDAA ramCC STAA ramCB LDAA ramCD STAA ramCC LDAA ramDD STAA ramCD CLR ramDD ADDB #$08 CMPB #$28 BLT LBLEFD7 LBLEFF4 CLRA LBLEFF5 STAA ramC9 LBLEFF7 STAA ramCE LBLEFF9 RTS LBLEFFA BSR LBLF074 ;shift digits right by -B bits CLC BRA LBLEFA6 LBLEFFF INCB ASL ramDD ROL ramCD ROL ramCC ROL ramCB ROL ramCA LBLF00F BPL LBLEFFF LDAA ramC9 SBA STAA ramC9 BLS LBLEFF4 LBLF018 CPX #$2509 ;BLO LBLF024 ASL ramDD LDAA #$00 STAA ramDD BRA LBLF035 LBLF024 INC ramC9 ;mul by 2 BEQ LBLF058 ;?OV ERROR ROR ramCA ;div digits by 2 ROR ramCB ROR ramCC ROR ramCD LBLF035 BHS LBLF03B ; leave if we don't need to round up BSR LBLF04B ; increment CA-CD BEQ LBLF024 ; adjust exponenent if we broke the bank LBLF03B RTS LBLF03C COM ramCE ; negate C9-E LBLF03F COM ramCA ; negate C9-D COM ramCB COM ramCC COM ramCD LBLF04B LDX ramCC INX STX ramCC BNE LBLF057 LDX ramCA INX STX ramCA LBLF057 RTS LBLF058 LDAB #$0A ;?OV error JMP LBLE238 LBLF05D LDX #TBL008C LBLF060 LDAA 4,X ;shift digits right one byte. STAA ramDD LDAA 3,X STAA 4,X LDAA 2,X STAA 3,X LDAA 1,X STAA 2,X LDAA ramD5 STAA 1,X LBLF074 ADDB #$08 ;if B<-8, shift digits right one byte. BLE LBLF060 LDAA ramDD SUBB #$08 BEQ LBLF08A LBLF07E ASR 1,X ;if B<0 shift digits right one bit LBLF080 ROR 2,X ROR 3,X ROR 4,X RORA INCB BNE LBLF07E LBLF08A RTS TBLF08B FCB $81,$00,$00,$00,$00 ; 1.0 TBLF090 FCB $03 FCB $7F,$5E,$56,$CB,$79 ;0.43425594 FCB $80,$13,$9B,$0B,$64 ;0.57658454 FCB $80,$76,$38,$93,$16 ;0.96180076 FCB $82,$38,$AA,$3B,$20 ;2.88539007 TBLF0A5 FCB $80,$35,$04,$F3,$34 ;SQR(0.5) TBLF0AA FCB $81,$35,$04,$F3,$34 ;SQR(2.0) TBLF0AF FCB $80,$80,$00,$00,$00 ;-0.5 TBLF0B4 FCB $80,$31,$72,$17,$F8 ;LOG(2.0) ; --- LOG function --- LBLF0B9 FNC_LOG JSR LBLF2AD ;Test C9-E BGT LBLF0C1 JMP LBLEC2D+1 ;?FC error LBLF0C1 LDX #TBLF0A5 LDAA ramC9 SUBA #$80 PSHA LDAA #$80 STAA ramC9 JSR LBLEF7D LDX #TBLF0AA JSR LBLF1C5+1 LDX #TBLF08B ; 1.0 JSR LBLEF72 LDX #TBLF090 JSR LBLF5F8 LDX #TBLF0AF JSR LBLEF7D PULB JSR LBLF3E9 LDX #TBLF0B4 LBLF0EF BSR LBLF160 ; perform fp * fp_MUL BEQ LBLF15F JSR LBLF179 LBLF0F6 LDAA #$00 STAA TBL008D STAA ram8E STAA ram8F STAA ram90 LDAB ramCD BSR LBLF12A LDAB ramDD STAB ram4255 LDAB ramCC BSR LBLF12A LDAB ramDD STAB ram4254 LDAB ramCB BSR LBLF12A LDAB ramDD STAB ram4253 LDAB ramCA BSR LBLF12F LDAB ramDD STAB ram4252 JSR LBLF248 JMP LBLEFD6 LBLF12A BNE LBLF12F JMP LBLF05D LBLF12F SEC LBLF130 LDAA TBL008D RORB BEQ LBLF15F BHS LBLF14D LDAA ram90 ADDA ramDA STAA ram90 LDAA ram8F ADCA ramD9 STAA ram8F LDAA ram8E ADCA ramD8 STAA ram8E LDAA TBL008D ADCA ramD7 LBLF14D RORA STAA TBL008D ROR ram8E ROR ram8F ROR ram90 ROR ramDD CLC BRA LBLF130 LBLF15F RTS LBLF160 LDD 1,X STAA ramDB ORAA #$80 STD ramD7 LDAB ramDB EORB ramCE STAB ramDC LDD 3,X STD ramD9 LDAA ,X STAA ramD6 LDAB ramC9 RTS LBLF179 TSTA BEQ LBLF195 ADDA ramC9 RORA ROLA BVC LBLF195 ADDA #$80 STAA ramC9 BNE LBLF18B JMP LBLEFF7 LBLF18B LDAA ramDC STAA ramCE RTS LBLF190 LDAA ramCE COMA BRA LBLF197 LBLF195 PULA PULA LBLF197 BMI LBLF19C JMP LBLEFF4 LBLF19C JMP LBLF058 ; ?OV ERROR LBLF19F JSR LBLF29F ; copy fp C9->D6 BEQ LBLF1B3 ; RTS ADDA #$02 BLO LBLF19C ; ?OV ERROR CLR ramDC JSR LBLEF89 INC ramC9 BEQ LBLF19C ; ?OV ERROR LBLF1B3 RTS TBLF1B4 FCB $84,$20,$00,$00,$00 ; 10.0 LBLF1B9 JSR LBLF29F ;copy fp C9->D6 LDX #TBLF1B4 ;10.0 CLRB LBLF1C0 STAB ramDC JSR LBLF251 ;X->C9-E LBLF1C5 CPX #$8D98 ;BSR LBLF160 ; perform fp / fp_DIV BEQ LBLF243 ; ?/0 error NEG ramC9 BSR LBLF179 INC ramC9 BEQ LBLF19C LDX #TBL008D LDAB #$04 STAB ram82 LDAB #$01 LBLF1DD LDAA ramCA CMPA ramD7 BNE LBLF1F6 LDAA ramCB CMPA ramD8 BNE LBLF1F6 LDAA ramCC CMPA ramD9 BNE LBLF1F6 LDAA ramCD CMPA ramDA BNE LBLF1F6 SEC LBLF1F6 TPA ROLB BHS LBLF206 STAB ,X INX DEC ram82 BMI LBLF239 BEQ LBLF235 LDAB #$01 LBLF206 TAP BLO LBLF21B LBLF209 ASL ramDA ROL ramD9 ROL ramD8 ROL ramD7 BLO LBLF1F6 BMI LBLF1DD BRA LBLF1F6 LBLF21B LDAA ramDA SUBA ramCD STAA ramDA LDAA ramD9 SBCA ramCC STAA ramD9 LDAA ramD8 SBCA ramCB STAA ramD8 LDAA ramD7 SBCA ramCA STAA ramD7 BRA LBLF209 LBLF235 LDAB #$40 BRA LBLF206 LBLF239 RORB RORB RORB STAB ramDD BSR LBLF248 JMP LBLEFD6 LBLF243 LDAB #$14 ;?/0 error JMP LBLE238 LBLF248 LDX TBL008D STX ramCA LDX ram8F STX ramCC RTS LBLF251 PSHA LDD 1,X STAA ramCE ORAA #$80 STD ramCA CLR ramDD LDAB ,X LDX 3,X STX ramCC STAB ramC9 PULA RTS LBLF267 LDX #ramBF BRA LBLF272 ;FPA->X LBLF26C LDX #TBL00BA LBLF26F CPX #$DEB5 ;LDX ramB5 LBLF272 LDAA ramC9 ; Load floating-point ACOI storage-> X. STAA ,X LDAA ramCE ORAA #$7F ANDA ramCA STAA 1,X LDAA ramCB STAA 2,X LDAA ramCC STAA 3,X LDAA ramCD STAA 4,X RTS ; copy D6->C9. Clear DD. LBLF28B LDAA ramDB LBLF28D STAA ramCE LDX ramD6 STX ramC9 CLR ramDD LDX ramD8 STX ramCB LDX ramD9 STX ramCC RTS LBLF29F LDD ramC9 STD ramD6 LDX ramCB STX ramD8 LDX ramCD STX ramDA TSTA RTS LBLF2AD LDAB ramC9 BEQ LBLF2B9 LBLF2B1 LDAB ramCE LBLF2B3 ROLB LDAB #$FF ; return -1 in B. BLO LBLF2B9 NEGB ; return 1 in B. LBLF2B9 RTS ; --- SGN function --- FNC_SGN BSR LBLF2AD ; Test C9-E. B = -1 0 +1 LBLF2BC STAB ramCA CLR ramCB LDAB #$88 LBLF2C3 LDAA ramCA SUBA #$80 LBLF2C7 STAB ramC9 LDAA #$00 TAB STD ramCC STAA ramDD STAA ramCE JMP LBLEFD2 ; --- ABS function --- FNC_ABS CLR ramCE ; clear sign bit RTS ; Compare C9-E with X, returning in B ; =1 if C>X, =-1 if CB if equal LBLF306 RORB EORB ramCE BRA LBLF2B3 ; convert C9-x to integer (contained in CC-D) LBLF30B LDAB ramC9 BEQ LBLF350 SUBB #$A0 LDAA ramCE ;test sign byte BPL LBLF31B COM ramD5 JSR LBLF03F ;negate CA-CD LBLF31B LDX #ramC9 CMPB #$F8 BGT LBLF329 JSR LBLF074 ;shift digits right by -B bits CLR ramD5 RTS LBLF329 CLR ramD5 LDAA ramCE ROLA ROR ramCA JMP LBLF080 ;divide CA-CD by 2^($100-B). ; --- INT function --- LBLF335 FNC_INT LDAB ramC9 CMPB #$A0 BHS LBLF358 BSR LBLF30B ; C9-x -> integer STAB ramDD LDAA ramCE STAB ramCE SUBA #$80 LDAA #$A0 STAA ramC9 LDAA ramCD STAA ram80 JMP LBLEFD2 LBLF350 STAB ramCA STAB ramCB STAB ramCC STAB ramCD LBLF358 RTS LBLF359 JSR LBL429D ;fp-acc number transfer extension LDX #$0000 STX ramCE ;clear C9 STX ramC9 STX ramCB STX ramCC STX ramC1 ;clear C1 STX ramBF BLO LBLF3D8 ;go if numeric CMPA #$2D ; '-' BNE LBLF376 COM ramCF BRA LBLF37A LBLF376 CMPA #$2B ; '+' BNE LBLF37F LBLF37A JSRE LBL00EB BLO LBLF3D8 LBLF37F CMPA #$2E ; '.' BEQ LBLF3B0 CMPA #$45 ; 'E' BNE LBLF3B5 JSRE LBL00EB BLO LBLF3F5 CMPA #$A8 ; '-' BEQ LBLF39E CMPA #$2D ; '-' BEQ LBLF39E CMPA #$A7 ; '+' BEQ LBLF3A1 CMPA #$2B ; '+' BEQ LBLF3A1 BRA LBLF3A6 LBLF39E COM ramC2 LBLF3A1 JSRE LBL00EB BLO LBLF3F5 LBLF3A6 TST ramC2 BEQ LBLF3B5 NEG ramC1 BRA LBLF3B5 LBLF3B0 COM ramC0 BNE LBLF37A LBLF3B5 LDAA ramC1 SUBA ramBF STAA ramC1 BEQ LBLF3D1 BPL LBLF3C9 LBLF3BF JSR LBLF1B9 INC ramC1 BNE LBLF3BF BRA LBLF3D1 LBLF3C9 JSR LBLF19F DEC ramC1 BNE LBLF3C9 LBLF3D1 LDAA ramCF BPL LBLF358 JMP LBLF593 LBLF3D8 LDAB ramBF SUBB ramC0 STAB ramBF PSHA JSR LBLF19F PULB SUBB #$30 BSR LBLF3E9 BRA LBLF37A LBLF3E9 JSR LBLF26C ;C9->BA JSR LBLF2BC LDX #TBL00BA JMP LBLEF7D ;ramC1 = 10*ramC1+(A-$30). LBLF3F5 LDAB ramC1 ASLB ASLB ADDB ramC1 ASLB SUBA #$30 ABA STAA ramC1 BRA LBLF3A1 TBLF403 FCB $9B,$3E,$BC,$1F,$FD ; 99999999.90625 TBLF408 FCB $9E,$6E,$6B,$27,$FD ; 999999999.25000 TBLF40D FCB $9E,$6E,$6B,$28,$00 ;1000000000.00000 LBLF412 LDX #TBLE1B7-1; ' IN ' BSR LBLF423 LDD ramE2 ; line number LBLF419 STD ramCA LDAB #$90 SEC JSR LBLF2C7 BSR LBLF426 LBLF423 JMP LBLE7A8 LBLF426 LDX #TBL4335 LBLF429 LDAA #$20 LDAB ramCE BPL LBLF431 LDAA #$2D LBLF431 STAA ,X STAA ramCE STX ramDE INX LDAA #$30 LDAB ramC9 BNE LBLF441 JMP LBLF51C LBLF441 CLRA CMPB #$80 BHI LBLF44E LDX #TBLF40D JSR LBLF0EF LDAA #$F7 LBLF44E STAA ramBF LBLF450 LDX #TBLF408 JSR LBLF2E3 BGT LBLF468 LBLF458 LDX #TBLF403 JSR LBLF2E3 BGT LBLF470 JSR LBLF19F DEC ramBF BRA LBLF458 LBLF468 JSR LBLF1B9 INC ramBF BRA LBLF450 LBLF470 JSR LBLEF6D JSR LBLF30B ;C9-x -> integer LDAB #$01 LDAA ramBF ADDA #$0A BMI LBLF486 CMPA #$0B BHS LBLF486 DECA TAB LDAA #$02 LBLF486 DECA DECA STAA ramC1 STAB ramBF BGT LBLF49F LDX ramDE LDAA #$2E INX STAA ,X TSTB BEQ LBLF49D LDAA #$30 INX STAA ,X LBLF49D STX ramDE LBLF49F LDX #TBLF529 LDAB #$80 LBLF4A4 LDAA ramCD ADDA 3,X STAA ramCD LDAA ramCC ADCA 2,X STAA ramCC LDAA ramCB ADCA 1,X STAA ramCB LDAA ramCA ADCA ,X STAA ramCA INCB RORB ROLB BVC LBLF4A4 BHS LBLF4C6 SUBB #$0B NEGB LBLF4C6 ADDB #$2F INX INX INX INX STX ramB3 LDX ramDE INX TBA ANDA #$7F STAA ,X DEC ramBF BNE LBLF4E0 LDAA #$2E INX STAA ,X LBLF4E0 STX ramDE LDX ramB3 COMB ANDB #$80 CPX #$F54D BNE LBLF4A4 LDX ramDE LBLF4EE LDAA ,X DEX CMPA #$30 ; '0' BEQ LBLF4EE CMPA #$2E ; '.' BEQ LBLF4FA INX LBLF4FA LDAA #$2B ; '+' LDAB ramC1 BEQ LBLF51E BPL LBLF505 LDAA #$2D ; '-' NEGB LBLF505 STAA 2,X LDAA #$45 STAA 1,X LDAA #$2F LBLF50D INCA SUBB #$0A BHS LBLF50D ADDB #$3A STAA 3,X STAB 4,X CLR 5,X BRA LBLF520 LBLF51C STAA ,X LBLF51E CLR 1,X LBLF520 LDX #TBL4335 LBLF523 RTS TBLF524 FCB $80,$00,$00,$00,$00 ; 0.5 TBLF529 FCB $FA,$0A,$1F,$00 ;-100,000,000 FCB $00,$98,$96,$80 ; 10,000,000 FCB $FF,$F0,$BD,$C0 ; -1,000,000 FCB $00,$01,$86,$A0 ; 100,000 FCB $FF,$FF,$D8,$F0 ; -10,000 FCB $00,$00,$03,$E8 ; 1,000 FCB $FF,$FF,$FF,$9C ; -100 FCB $00,$00,$00,$0A ; 10 FCB $FF,$FF,$FF,$FF ; -1 ; --- SQR function --- FNC_SQR JSR LBLF29F ;copy fp C9->D6 LDX #TBLF524 ;0.5 JSR LBLF251 ;X->C9-E ; perform fp ^ fp_POW BEQ LBLF5C9 TSTA BNE LBLF565 LDAA ramCE BPL LBLF562 JMP LBLF243 ; ?/0 error LBLF562 JMP LBLEFF5 LBLF565 LDX #TBL00C4 JSR LBLF272 ;FPA->X CLRB LDAA ramDB BPL LBLF580 JSR FNC_INT ; LBLF335 LDX #TBL00C4 LDAA ramDB JSR LBLF2E3 BNE LBLF580 COMA LDAB ram80 ; TBL0080 LBLF580 JSR LBLF28D PSHB JSR FNC_LOG ; LBLF0B9 LDX #TBL00C4 JSR LBLF0EF BSR LBLF5C9 PULA RORA BHS LBLF523 LBLF593 LDAA ramC9 BEQ LBLF59A COM ramCE LBLF59A RTS TBLF59B FCB $81,$38,$AA,$3B,$29 ;1.44269504 (CF) correction factor for EXP function TBLF5A0 FCB $07 ;eight coeff's... tchebyshev modified taylor series coeffs for exp(x) FCB $71,$34,$58,$3E,$56 ;0.00002150 1/(7! * CF^7) FCB $74,$16,$7E,$B3,$1B ;0.00014352 1/(6! * CF^6) FCB $77,$2F,$EE,$E3,$85 ;0.00134226 1/(5! * CF^5) FCB $7A,$1D,$84,$1C,$2A ;0.00961402 1/(4! * CF^4) FCB $7C,$63,$59,$58,$0A ;0.05550513 1/(3! * CF^3) FCB $7E,$75,$FD,$E7,$C6 ;0.24022638 1/(2! * CF^2) FCB $80,$31,$72,$18,$10 ;0.69314719 1/(1! * CF^1) FCB $81,$00,$00,$00,$00 ; 1.0 ; --- EXP function --- LBLF5C9: FNC_EXP LDX #TBLF59B ;Get correction factor BSR LBLF604 ;Multiply FPA0 by X JSR LBLF26C ;pack fpa0 and store in fpa3 LDAA ramC9 ;get exponent of fpa0 and compare to max value CMPA #$88 ; (128) BLO LBLF5DA ;br if fpa0 < 128 LBLF5D7 JMP LBLF190 ;set fpa0 = 0 or ?OV ERROR LBLF5DA JSR FNC_INT ;convert fpa0 to integer LDAA ram80 ;get least significant byte of integer ADDA #$81 ; =127? BEQ LBLF5D7 ; ?OV ERROR DECA ; adds bias of 80 (since 81 used above) PSHA ;save exponent on stack LDX #TBL00BA ;point (x) to FPa3 JSR LBLEF72 ;subtract fpa0 from (x) LDX #TBLF5A0 ;point x to coeffs BSR LBLF607 ;eval polynomial for frac part CLR ramDC ;force mantissa to be positive PULA JSR LBLF179 ;calc exp of new fpa0 by adding exps of integer and frac'l parts. RTS LBLF5F8 STX ramDE JSR LBLF26C BSR LBLF604 BSR LBLF609 LDX #TBL00BA LBLF604 JMP LBLF0EF LBLF607 STX ramDE LBLF609 JSR LBLF267 LDX ramDE LDAB ,X STAB ramCF INX STX ramDE LBLF615 BSR LBLF604 LDX ramDE LDAB #$05 ABX STX ramDE JSR LBLEF7D LDX #ramBF DEC ramCF BNE LBLF615 RTS ; --- RND function --- FNC_RND JSR LBLF2AD ; Test C9-E BMI LBLF650 BEQ LBLF646 BSR LBLF643 JSR LBLF26C BSR LBLF646 LDX #TBL00BA BSR LBLF604 LDX #TBLF08B ; 1.0 JSR LBLEF7D LBLF643 JMP FNC_INT LBLF646 LDX ram4218 STX ramCA LDX ram421A STX ramCC LBLF650 LDX CONF682 STX ramD7 LDX CONF684 STX ramD9 JSR LBLF0F6 LDD ram4254 ADDD #$658B STD ram421A STD ramCC LDD ram4252 ADCB #$B0 ADCA #$05 STD ram4218 STD ramCA CLR ramCE LDAA #$80 STAA ramC9 LDAA ram8F STAA ramDD JMP LBLEFD6 CONF682 FDB $40E6 CONF684 FDB $4DAB ; --- COS function --- FNC_COS LDX #TBLF6F6 ; Pi/2 JSR LBLEF7D ; --- SIN function --- FNC_SIN JSR LBLF29F ; copy FPA0 to FPA1 LDX #TBLF6FB ; point X to 2*Pi LDAB ramDB ; get mantissa sign of fpa1 JSR LBLF1C0 ; divide fpa0 by X JSR LBLF29F ; copy FPA0 to FPA1 JSR FNC_INT ; convert FPA0 to integer CLR ramDC ; set result sign to positive LDAA ramD6 ; get exponent of fpa1 LDAB ramC9 ; get exponent of fpa0 JSR fp_SUB ; subtract fpa0 from fpa1 LDX #TBLF700 ; point X to 0.25 JSR LBLEF72 ; subtract fpa0 from 0.25 (pi/2) LDAA ramCE ; get mantissa sign of fpa0 PSHA ; save on stack BPL LBLF6BC ; branch if mantissa positive JSR LBLEF6D ; add 0.5 (pi) to fpa0 LDAA ramCE ; get sign of fpa0 BMI LBLF6BF ; branch if negative COM ram88 ; com if 3pi/2 > arg > pi/2 [quadrant flag] LBLF6BC JSR LBLF593 ; toggle mantissa sign of fpa0 LBLF6BF LDX #TBLF700 ; point X to 0.25 JSR LBLEF7D ; add it to fpa0 PULA ; get the old sign TSTA ; BPL LBLF6CC ; branch if old sign was positve JSR LBLF593 ; toggle mantissa sign LBLF6CC LDX #TBLF705 ; point x to table of coeff's JMP LBLF5F8 ; calculate polynomial value ; --- TAN function --- FNC_TAN JSR LBLF26C CLR ram88 BSR FNC_SIN LDX #TBL00C4 JSR LBLF272 ;FPA->X LDX #TBL00BA JSR LBLF251 ;X->C9-E CLR ramCE LDAA ram88 BSR LBLF6F3 LDX #TBL00C4 JMP LBLF1C5+1 LBLF6F3 PSHA BRA LBLF6BC TBLF6F6 FCB $81,$49,$0F,$DA,$A2 ; 1.57079632 Pi/2 TBLF6FB FCB $83,$49,$0F,$DA,$A2 ; 6.28318531 2*Pi TBLF700 FCB $7F,$00,$00,$00,$00 ; 0.25 1/4 TBLF705 FCB $05 FCB $84,$E6,$1A,$2D,$1B ;-14.38139067 -(2*Pi)^11/11! should be -15.094642578 ($84,$F1,$83,$A7,$EF) FCB $86,$28,$07,$FB,$F8 ; 42.00779712 (2*Pi)^9 / 9! should be 42.058693944 ($86,$28,$3C,$1A,$44) FCB $87,$99,$68,$89,$01 ;-76.70417026 -(2*Pi)^7 / 7! should be -76.705859753 ($87,$99,$69,$66,$73) FCB $87,$23,$35,$DF,$E1 ; 81.60522369 (2*Pi)^5 / 5! should be 81.605249276 ($87,$23,$35,$E3,$3C) FCB $86,$A5,$5D,$E7,$28 ;-41.34170210 -(2*Pi)^3 / 3! should be -41.341702240 ($86,$A5,$5D,$E7,$31) FCB $83,$49,$0F,$DA,$A2 ; 6.28318531 (2*Pi)^1 / 1! should be 6.283185307 ($86,$49,$0F,$DA,$A2) FCB $A1,$54,$46,$8F,$13 ; 7122787878.0 unused? FCB $8F,$52,$43,$89,$CD ; 26913.76914 unused? ; --- Reset Vector --- ;Reset I/O LBLF72E LDAA #$FF STAA ram00 LDAA #$01 STAA ram01 LDAA #$01 STAA ram03 LDAA ramEA ;Check for warm boot flag CMPA #$55 BNE LBLF74A ;Not warm boot LDX ram4221 LDAA ,X DECA BNE LBLF74A JMP ,X ;Warm boot ;Cold boot LBLF74A LDX #$0080 ;Clear 6803 RAM LBLF74D CLR ,X INX CPX #$0100 BNE LBLF74D LDX #TBL41FD ;Size and clear external RAM LBLF758 INX LDAA 2,X ;Get a byte COM 2,X ;Complement LDAB 2,X ;Get the complement CLR 2,X ;Clear COMA CBA ;Complement successful? BEQ LBLF758 ;Next... STX ram4250 ;Save top of RAM STX ramA1 STX ram9D LDD ram9D SUBD #100 ;Reserve 100 bytes for string space STD ram9B ;bottom of system stack LDS ram9B LDX #TBLF7CF ;Init 6803 RAM LDD #$00EB BSR LBLF7AD LDX #TBLF7DE ;Init external RAM LDD #$4200 BSR LBLF7AD LDAA #$39 ;==RTS LDX #LBL4285 ;4285 to 42AE set to RTS LBLF78A STAA ,X INX CPX #$42AF BNE LBLF78A COM ram42AF ;??? LDX #TBL4346 ;init start of prog mem. STX ram93 JSR LBLE3CF ;NEW command JSR LBLFBD3+1 ;Clear screen LDX #TBLF810-1 ;Copyright message JSR LBLE7A8 LDAA #$55 ;Flag warm boot STAA ramEA LBLF7AA JMP LBLE271 ;Copy block of memory from [X+1] to [D], length at [X] LBLF7AD STD ramBF ;Save destination LDAB ,X ;Get length LBLF7B1 INX ;Inc start ;Copy block of memory from [X] to [$00BF], length in B LBLF7B2 LDAA ,X ;Get byte STX ramC1 ;Save source LDX ramBF ;Get dest STAA ,X ;Put byte INX ;Inc dest STX ramBF ;Save dest LDX ramC1 ;Get source DECB ;Dec count BNE LBLF7B1 ;More... RTS ;DEFAULT RESET WARM-BOOT (F7C3) NOP CLR ramE8 ;turn off printing JSR LBLE3EE JSR LBLFBD3+1 ;Clear screen BRA LBLF7AA ;Copied to $00EB TBLF7CF FCB 14 ;14 bytes to copy INC ramF5 BNE LBLF7D8 INC ramF4 LBLF7D8 LDAA >ram00 JMP LBLE1C8 ;Copied to $4200 TBLF7DE FCB 49 ;49 bytes to copy RTI FCB $00 FCB $00 RTI FCB $00 FCB $00 RTI FCB $00 FCB $00 RTI FCB $00 FCB $00 RTI FCB $00 FCB $00 RTI FCB $00 FCB $00 RTI FCB $00 FCB $00 JMP LBLEC2D+1 ;?FC error FCB $4F,$C7,$52,$59,$FF,$04,$5E,$EC,$2E,$F7,$C3,$00,$76,$00,$01,$10 FCB $70,$84,$00,$01,$15,$1A,$0B,$00,$80 TBLF810 FCB $4D,$49,$43,$52,$4F,$43,$4F,$4C,$4F,$52,$20,$42,$41,$53,$49,$43 ;MICROCOLOR BASIC FCB $20,$31,$2E,$30,$0D ; 1.0 FCB $43,$4F,$50,$59,$52,$49,$47,$48,$54,$20,$31,$39,$38,$32,$20 ;COPYRIGHT 1982 TBLF834 FCB $4D,$49,$43,$52,$4F,$53,$4F,$46,$54,$0D,$00 ;MICROSOFT ; --- Flash cursor --- LBLF83F DEC ram422B ;cursor flash delay counter BNE LBLF85E LDAA ram4282 ;cursor color EORA #$0F STAA ram4282 ORAA #$80 LDX ram4280 STAA ,X LDAB #$16 ANDA #$0F BEQ LBLF85B LDAB #$58 ;flash color longer than black. LBLF85B STAB ram422B LBLF85E LDX #$03FA LBLF861 DEX BNE LBLF861 RTS ; --- Idle loop --- LBLF865 JSR LBL4285 ;input char command extension PSHX PSHB LBLF86A BSR LBLF83F ;Flash cursor BSR LBLF883 ;Scan keyboard BEQ LBLF86A ;Repeat if no key pressed LDAB #$60 LDX ram4280 ;cursor address STAB ,X BRA LBLF8CB LBLF879 CLRA BSR LBLF8D0 BNE LBLF883 BSR LBLF8E4 INCA BEQ LBLF8CD ; --- Scan keyboard --- LBLF883 JSR LBL42A9 ; Keyscan command extension PSHX PSHB LDAA #$FB ; Port code for BREAK key. BSR LBLF8D0 TAB BEQ LBLF892 EORB ram423B ; keyboard BREAK flag. LBLF892 STAA ram423B TSTB BEQ LBLF89E BSR LBLF8DC ; delay BSR LBLF8D2 ; still a break? BNE LBLF8C7+1 ; return BREAK code 03 LBLF89E LDX #TBL4230 CLRB DECB STAB ram4239 LBLF8A6 ROLB BHS LBLF8C6 INC ram4239 BSR LBLF8E2 PSHB TAB INX EORA ,X ANDA ,X STAB ,X PULB TSTA SEC BEQ LBLF8A6 PSHA BSR LBLF8DC BSR LBLF8E4 CMPA ,X PULA BNE LBLF8EA LBLF8C6 CLRA LBLF8C7 CPX #$8603 ;LDAA #$03 LBLF8CA TSTA LBLF8CB PULB ;Restore clobbered registers PULX LBLF8CD RTS ; End Scan Keyboard subroutine LBLF8CE LDAA #$7F ; Port code for SHIFT key LBLF8D0 STAA ram02 ; Keyboard port i/o sequence LBLF8D2 LDAA ram03 ; A=0x00=found COMA ; A=0xff=not found ANDA #$02 BEQ LBLF8DB LDAA #$FF LBLF8DB RTS LBLF8DC LDX ram421D ;keyboard debounce delay JMP LBLF861 LBLF8E2 STAB ram02 LBLF8E4 LDAA ioBFFF ORAA #$C0 RTS LBLF8EA LDAB #$F8 LBLF8EC ADDB #$08 LSRA BHS LBLF8EC ADDB ram4239 ; keyboard strobe store LDAA #$FE ; Port code for CONTROL key BSR LBLF8D0 STAA ram423A ; keyboard control key flag JSR LBL42AC ; keyboard control extension BEQ LBLF911 LDX #TBLF97C CMPB #$20 BNE LBLF92E LDAA ram4282 ADDA #$10 STAA ram4282 BRA LBLF8C6 LBLF911 TBA BEQ LBLF918+1 CMPB #$1A BLS LBLF933 LBLF918 CPX #$C61D ;LDAB #$1D LDX #TBLF956-$1D BSR LBLF8CE BEQ LBLF92E LDX #TBLF969-$1D CMPB #$20 BNE LBLF92E COM ram421C BRA LBLF8C6 LBLF92E ABX LDAA ,X BRA LBLF8CA LBLF933 BSR LBLF8CE EORA ram421C BNE LBLF941 LDAA ram421C BNE LBLF946 ORAB #$20 LBLF941 TBA ORAA #$40 LBLF944 BRA LBLF8CA LBLF946 LDX #TBLF9AB ABX LDAA ,X BPL LBLF944 LDAB ram4282 ANDB #$70 ABA BRA LBLF944 TBLF956 FCB $40,$0D,$20 ;@- FCB $30,$31,$32,$33,$34,$35,$36,$37 ;01234567 FCB $38,$39,$3A,$3B,$2C,$2D,$2E,$2F ;89:;,-./ TBLF969 FCB $13,$0D,$20 ;-- FCB $00,$21,$22,$23,$24,$25,$26,$27 ;-!"#$%&' FCB $28,$29,$2A,$2B,$3C,$3D,$3E,$3F ;()*+<=>? ;Tokens TBLF97C FCB $88,$08,$B3,$B2,$82,$9B,$90,$84 ;-------- FCB $A3,$8A,$81,$9E,$BC,$BA,$B9,$A5 ;-------- FCB $C7,$15,$9C,$09,$8C,$80,$B5,$5E ;-------^ FCB $B1,$8F,$0A,$00,$00,$00,$0D,$20 ;------- FCB $00,$8E,$93,$98,$97,$96,$94,$95 ;-------- FCB $9D,$86,$89,$92,$BB,$91,$B7 ;------- ;Graphic chars TBLF9AB FCB $B6,$89,$80,$82,$87,$8D,$86,$85 ;-------- FCB $48,$49,$4A,$4B,$4C,$4D,$4E,$4F ;HIJKLMNO FCB $50,$8F,$8C,$88,$8B,$55,$81,$8E ;P----U-- FCB $83,$8A,$84 ;--- LBLF9C6 JSR LBL4288 ; --- Write char to screen --- PSHX PSHB PSHA LDAB ramE8 ;Ouput device # BEQ LBLFA1B ;Video... ;Assume printer TAB TPA PSHA SEI TBA LBLF9D5 LDAB ram03 ;Wait for handshake ANDB #$04 BNE LBLF9D5 BSR LBLFA0A ;Idle bit CLRB BSR LBLFA0C ;Start bit LDAB #$08 LBLF9E2 PSHB CLRB LSRA ROLB BSR LBLFA0C ;Bit out PULB DECB BNE LBLF9E2 ;Next bit BSR LBLFA0A ;Stop bit PULA TAP PULA CMPA #$0D BEQ LBLFA00 INC ram422A LDAB ram422A CMPB ram4229 BLO LBLFA07 LBLFA00 CLR ram422A BSR LBLFA15 BSR LBLFA15 LBLFA07 PULB PULX RTS LBLFA0A LDAB #$01 LBLFA0C STAB ram03 ;Printer bit output BSR LBLFA10 LBLFA10 LDX ram4223 BRA LBLFA18 LBLFA15 LDX ram4225 LBLFA18 JMP LBLF861 ; A->SCN LBLFA1B LDX ram4280 CMPA #$08 ; backspace BNE LBLFA2E CPX #$4000 BEQ LBLFA77 LDAA #$60 DEX STAA ,X BRA LBLFA5C LBLFA2E CMPA #$0D ; carriage return BNE LBLFA46 LDX ram4280 LBLFA35 LDAA #$60 STAA ,X INX STX ram4280 LDAB ram4281 BITB #$1F BNE LBLFA35 BRA LBLFA5C LBLFA46 CMPA #$20 BLO LBLFA77 TSTA BMI LBLFA59 CMPA #$40 BLO LBLFA57 CMPA #$60 BLO LBLFA59 ANDA #$DF LBLFA57 EORA #$40 LBLFA59 STAA ,X INX LBLFA5C STX ram4280 CPX #$4200 BNE LBLFA77 LDX #$4000 ; scroll up LBLFA67 LDD $20,X STD ,X INX INX CPX #$41E0 BNE LBLFA67 LDAB #$60 JSR LBLFBD9 LBLFA77 PULA PULB PULX RTS LBLFA7B JSR LBL428B ;I/O pointer setup command extenstion PSHX PSHB PSHA LDAA ramE8 ;Get device output 0=screen, -1 printer BEQ LBLFA8D ;go if on screen LDX ram4227 ;tab field width 16/last tab zone 112 LDD ram4229 ;printer line length max BRA LBLFA97 LBLFA8D LDAB ram4281 ;cursor address lsb ANDB #$1F LDX #$1010 LDAA #$20 LBLFA97 STX ramE4 ;i/o tab and last tab field STAB ramE6 ;max line length msb STAA ramE7 ;max line length lsb PULA PULB PULX RTS LBLFAA1 JSR LBLFBD3+1 ;Clear screen LBLFAA4 JSR LBL4291 ;build command line extension LBLFAA7 CLR ram427F ;last keyboard input char LDX #TBL42B2 ;command line buffer LDAB #$01 LBLFAAF JSR LBLF865 ;Cursor loop return with KEY->A TST ramE9 ;Punt if set. (by cmd extension?) BNE LBLFB04 TST ramE8 ;check output flag BNE LBLFB00 ;go if printer TSTA BPL LBLFADD TST ram423A ;control key flag BEQ LBLFADD JSR LBLE4B2 ;address of token->X (save X->ram89) LBLFAC7 LDAA ,X INX PSHX PSHA ANDA #$7F LDX ram89 BSR LBLFB1A STX ram89 PULA PULX TSTA BPL LBLFAC7 LDX ram89 BRA LBLFAAF LBLFADD CMPA #$0C ;unimplemented clearscreen key? BEQ LBLFAA1 CMPA #$08 ;backspace BNE LBLFAED DECB BEQ LBLFAA7 ;don't go before stop DEX BSR LBLFB22 ;A->SCN BRA LBLFAAF LBLFAED CMPA #$15 ;L. DEL BNE LBLFAFB LBLFAF1 DECB ;keep backspacing until stop BEQ LBLFAA7 LDAA #$08 JSR LBLF9C6 ;A->SCN BRA LBLFAF1 LBLFAFB CMPA #$03 ;break SEC BEQ LBLFB05 LBLFB00 CMPA #$0D ;ENTER key BNE LBLFB12 LBLFB04 CLRA ;clear carry flag LBLFB05 TPA PSHA JSR LBLE766 ;#0D->SCN CLR ,X ;terminate scratch LDX #TBL42B1 ;command line buff-1 PULA ;carry set if BREAK'd. TAP LBLFB11 RTS LBLFB12 CMPA #$20 BLO LBLFAAF ;ignore any non-printing char's BSR LBLFB1A BRA LBLFAAF LBLFB1A CMPB #$80 ;don't go more than 128 chars. BHS LBLFB11 STAA ,X ;store char into command line buffer INX INCB LBLFB22 JMP LBLF9C6 ;A->SCN ; --- SET command --- CMD_SET BSR LBLFB6A ; get (x,y arg into memloc into X PSHX JSR LBLEF47 ; get ,c (B holds color code ) PULX CMPB #$08 BHI LBLFB67 ; ?FC error if color > 8 DECB BMI LBLFB38 LDAA #$10 ; LSLB LSLB LSLB LSLB MUL BRA LBLFB40 LBLFB38 LDAB ,X ; Get color from screen BPL LBLFB3F ; Set to zero if text encountered ANDB #$70 FCB $21 ;"BRN CLRB" LBLFB3F CLRB LBLFB40 STAB ram82 ; save color BSR LBLFBB4 ; get trailing ')' LDAA ,X BMI LBLFB49 ; make sure its graphics CLRA ; clear if a text char LBLFB49 ANDA #$0F ; ignore color bits ORAA ram423C ; holds desired bit ORAA ram82 ; get color LBLFB50 ORAA #$80 ; make a graphics char STAA ,X ; write value to screen RTS ; --- RESET command --- CMD_RESET BSR LBLFB6A ; get (x,y arg into memloc into X BSR LBLFBB4 ; get trailing ')' CLRA LDAB ,X BPL LBLFB50 ; clear if it's a text char COM ram423C ANDB ram423C STAB ,X RTS LBLFB67 JMP LBLEC2D+1 ; ?FC error LBLFB6A JSR LBLEA2B+1 ; get '(' LBLFB6D JSR LBLEF0D ; get x position CMPB #$3F BHI LBLFB67 ; ?FC error if > 63 PSHB ; push x on stack JSR LBLEF47 ; get y position CMPB #$1F BHI LBLFB67 ; ?FC error if > 31 PSHB ; push y on stack LSRB ; y=y/2 LDAA #$20 MUL ADDD #$4000 ; get address of left side of screen from y PSHB ; push onto stack PSHA TSX LDAB 3,X ; take x/2 and add to left side of screen LSRB PULX ABX PULA ; now construct mask for char block and store in 423C PULB ANDA #$01 RORB ROLA ; A holds 2's complement of bit pos LDAB #$10 ; start B with bit 4 LBLFB94 LSRB ; shift right until A is zero DECA BPL LBLFB94 STAB ram423C ; done, store into 423C RTS ; --- POINT command --- FNC_POINT BSR LBLFB6D ; get '(x,y' into X and mask into 423C LDAB #$FF LDAA ,X BPL LBLFBB2 ; need to return -1 if text char ANDA ram423C BEQ LBLFBB1 ; not set, return 0 LDAB ,X LSRB LSRB LSRB LSRB ANDB #$07 LBLFBB1 INCB LBLFBB2 BSR LBLFBB7 ; return B (sign extended) LBLFBB4 JMP LBLEA29 ; get ')' LBLFBB7 CLRA ; return B (sign extended) TSTB BPL LBLFBBC COMA LBLFBBC JMP LBLECE3 ; return D ; --- CLS command --- CMD_CLS BEQ LBLFBD3+1 ;No args - default clear JSR LBLEF0D ;Get integer arg into B between 0-255. CMPB #$08 BHI LBLFBE5 ;If > 8 - Clear screen and print Microsoft message TSTB BEQ LBLFBD1 ;CLS 0... DECB LDAA #$10 MUL ORAB #$0F LBLFBD1 ORAB #$80 ;0=$80, 1=$8F, 2=$9F, 3=$AF, 4=$BF, 5=$CF, 6=$DF, 7=$EF, 8=$FF LBLFBD3 CPX #$C660 ;==LDAB #$60 - Default clear char LDX #TBL4000 ;Start of video memory LBLFBD9 STX ram4280 LBLFBDC STAB ,X ;Set mem INX ;Next CPX #$4200 ;Done? BNE LBLFBDC ;More... RTS LBLFBE5 BSR LBLFBD3+1 ;Clear screen LDX #TBLF834-1 ;Microsoft message JMP LBLE7A8 ;Write string ; --- INKEY$ function --- FNC_INKEY LDAA ram427F ;last keyboard input char BNE LBLFBF5 JSR LBLF883 LBLFBF5 CLR ram427F STAA ramCD BEQ LBLFBFF JMP LBLEE91 LBLFBFF STAA ramD0 JMP LBLEE9D ; --- EXEC function --- CMD_EXEC BEQ LBLFC0C JSR LBLEF4C ; Get address to X STX ram421F LBLFC0C LDX ram421F JMP ,X ; --- VARPTR function --- FNC_VARPTR LDX ram99 PSHX JSR LBLEB1B JSR LBLEA29 ; get ')' STX ram89 PULX LDD ram89 CPX ram99 BEQ LBLFC26 JMP LBLEC2D+1 ; ?FC error LBLFC26 JMP LBLECE3 ; return D ; --- PRINT @expression --- LBLFC29 JSR LBLEBBA SUBD #$01FF BLS LBLFC34 JMP LBLEC2D+1 ; ?FC error LBLFC34 ADDD #$41FF STD ram4280 RTS ; --- CSAVE command --- CMD_CSAVE LDX ram93 STX ram426F ; start LDX ram95 STX ram4271 ; end CLRB CMPA #$A9 ; CSAVE* BNE LBLFC4F JSR LBLFDDB LDAB #$04 LBLFC4F STAB ram4267 ;file type flag LDD ram4271 ; end SUBD ram426F ; start STD ram426C ;LOAD address BSR LBLFC8B LDX ram426F ; start LBLFC60 STX ram4278 ;cass buffer address LDAA #$FF STAA ram4276 ;cass block length LDD ram4271 SUBD ram4278 ;cass buffer address BLS LBLFC7E TSTA BNE LBLFC7A CMPB #$FF BEQ LBLFC7A STAB ram4276 ;cass block length LBLFC7A BSR LBLFCC0 ;write cassette block BRA LBLFC60 LBLFC7E NEG ram4275 ;cass block type flag CLR ram4276 ;cass block length BSR LBLFCC0 ;write cassette block LBLFC86 LDAA #$01 STAA ram03 RTS LBLFC8B JSR LBLFD29 LDX #TBL425F ;tape filename block STX ram4278 ;cass buffer address STX ramBF CLR $09,X ;ram4268 CLR $0A,X ;ram4269 LDX #TBL4257 ;skip/load filename LDAB #$08 JSR LBLF7B2 ;Copy block of memory from [X] to [$00BF], length in B CLR ram4275 ;cass block type flag LDAA #$0F STAA ram4276 ;cass block length BSR LBLFCB7 ;write cassette leader BSR LBLFCC0 ;write cassette block INC ram4275 ;cass block type flag LDX #$0000 JSR LBLF861 ;Write cassette leader LBLFCB7 LDX ram422F ; numer of $55's in leader LBLFCBA BSR LBLFD01 DEX BNE LBLFCBA RTS LBLFCC0 NOP ;Write cassette block SEI LDAB ram4276 ;cass block length STAB ram427B ;cass load status flag LDAA ram4276 ;cass block length BEQ LBLFCD6 LDX ram4278 ;cass buffer address LBLFCD0 ADDA ,X INX DECB BNE LBLFCD0 LBLFCD6 ADDA ram4275 ;cass block type flag STAA ram427A ;cass sumcheck LDX ram4278 ;cass buffer address BSR LBLFD01 LDAA #$3C BSR LBLFD03 LDAA ram4275 BSR LBLFD03 LDAA ram4276 ;cass block length BSR LBLFD03 TSTA BEQ LBLFCFC LBLFCF2 LDAA ,X INX BSR LBLFD03 DEC ram427B ;cass load status flag BNE LBLFCF2 LBLFCFC LDAA ram427A ;cass sumcheck BSR LBLFD03 LBLFD01 LDAA #$55 ;Write cassette char LBLFD03 PSHX PSHA PSHA LDAB #$08 LBLFD08 TSX LSR ,X LDX #$0020 BLO LBLFD13 LDX #$0040 LBLFD13 PSHX LDAA #$01 STAA ram03 LBLFD18 DEX BNE LBLFD18 CLRA STAA ram03 PULX LBLFD1F DEX BNE LBLFD1F DECB BNE LBLFD08 PULA PULA PULX LBLFD28 RTS LBLFD29 BSR LBLFD33 JSRE LBL00F3 BEQ LBLFD28 JMP LBLEA3C;?SN ERROR LBLFD33 LDX #TBL4256 ; file name length CLR ,X LDAA #$20 ; pad filename with space chars LBLFD3A INX STAA ,X CPX #$425F ;tape filename block BNE LBLFD3A JSRE LBL00F3 ; load input char BEQ LBLFD28 ; return if no filename JSR LBLE91A ; evaulate arg JSR LBLEE53 ; get string? STAB TBL4256 ; length of string to filename len. BEQ LBLFD28 ; RTS PSHB LDD #$4257 ;skip/load filename STD ramBF PULB JMP LBLF7B2 ;Copy block of memory from [X] to [$00BF], length in B ; --- CLOAD command --- CMD_CLOAD CMPA #$A9 ; CLOAD* BNE LBLFD63 JMP LBLFDB1 LBLFD63 CMPA #$4D ; CLOADM BNE LBLFD6A JMP LBLFE06 LBLFD6A CLRA ; program data BSR LBLFD8F JSR LBLE3CF ; NEW command status flag COM ram426E ; unset new command flag LDD ram426C ; LOAD address ADDD ram93 JSR LBLE21E ; see if D bytes fit on stack LDX ram93 LBLFD7D STX ram4278 ; cass buffer address BSR LBLFDD0 BPL LBLFD7D STX ram95 LDX #TBLE1BC-1 ; "OK" JSR LBLE7A8 ; Write string JMP LBLE2EB ; adjust next line pointers, and return to command mode LBLFD8F PSHA ; A: 00=program 02=machine code 04=array data BSR LBLFDA2 PULA TST ram4274 BNE LBLFDCF CMPA ram4267 ;File type flag BEQ LBLFDCF LDAB #$24 ;?FM error JMP LBLE238 ;write error LBLFDA2 BSR LBLFD33 JSR LBLFE37 BNE LBLFDAC ;?IO error JMP LBLFF4E ;Read cassette leader LBLFDAC LDAB #$22 ;?IO error JMP LBLE238 ;CLOAD* LBLFDB1 BSR LBLFDDB LDAA #$04 ;array data BSR LBLFD8F LDD ram4271 ;end SUBD ram426F ;start SUBD ram426C ; LOAD address BHS LBLFDC5 JMP LBLE236 ;?OM error LBLFDC5 LDX ram426F LBLFDC8 STX ram4278 ;cass buffer address BSR LBLFDD0 BPL LBLFDC8 LBLFDCF RTS LBLFDD0 JSR LBLFEB5+1 ;disable blocklength limit, enable writing, read block->X LBLFDD3 BNE LBLFDAC ; ?IO error LDAA ram4275 ; Cass block type flag BEQ LBLFDAC ; ?IO error RTS ;CSAVE* LBLFDDB JSRE LBL00EB ;get next char LDAB #$01 STAB ram86 JSR LBLEB1B ;get init/var CLR ram86 JSR LBLE90E ;expect string LDD 2,X JSR LBLE22D ;D+X->D,X STX ram4271 LDX ram89 LDAB 4,X ASLB ADDB #$05 ABX STX ram426F JSRE LBL00F3 BEQ LBLFDCF JMP LBLEA2E+1 ; get ',' ;CLOADM LBLFE06 JSRE LBL00EB ; Get next input char LDAA #$02 ; machine code BSR LBLFD8F LDX #$0000 JSRE LBL00F3 BEQ LBLFE1B JSR LBLEA2E+1 ; get ',' JSR LBLEF4C ; get address offset to X LBLFE1B STX ram89 LDD ram426A ;EXEC address offset ADDD ram89 STD ram421F ;default EXEC address LDD ram426C ;LOAD address ADDD ram89 PSHB PSHA PULX BRA LBLFDC8 ; --- SKIPF command --- CMD_SKIPF JSR LBLFDA2 BSR LBLFE8A BNE LBLFDD3 RTS LBLFE37 LDAA ramE2 INCA BNE LBLFE46 JSR LBLFBD3+1 ;Clear screen LDAA #$53 ;write 'S' to screen BSR LBLFE81 JSR LBLE7B9 LBLFE46 BSR LBLFEAA ORAA ram4275 ; Cass block type flag BNE LBLFE80 CLRB PSHB LBLFE4F LDX #TBL425F ;tape filename block ABX LDAA ,X LDX ramE2 INX BNE LBLFE5C BSR LBLFE81 LBLFE5C LDX #TBL4257 ;skip/load filename ABX SUBA ,X TSX ORAA ,X STAA ,X INCB CMPB #$08 BNE LBLFE4F PULA TSTA BEQ LBLFE7B TST TBL4256 BEQ LBLFE7B BSR LBLFE87 BNE LBLFE80 BRA LBLFE37 LBLFE7B LDAA #$46 BSR LBLFEA1 CLRA LBLFE80 RTS LBLFE81 CLR ramE8 ;turn off printer JMP LBLF9C6 ;A->SCN LBLFE87 JSR LBLFF4E ;Read cassette leader LBLFE8A LDAA #$FF ;disable blocklength limit TAB ;disable writing (B=$FF) BSR LBLFEB9 BNE LBLFE98 LDAA ram4275 ;cass block type flag NEGA BMI LBLFE8A DECA LBLFE98 STAA ram427B ;cass load status flag RTS LBLFE9C LDAA TBL4000 EORA #$40 LBLFEA1 LDAB ramE2 INCB BNE LBLFEA9 STAA TBL4000 LBLFEA9 RTS LBLFEAA JSR LBLFF4E ;Read cassette leader LDX #TBL425F ;tape filename block STX ram4278 ;cass buffer address LDAA #$0F ;15 byte block length limit LBLFEB5 CPX #$86FF ;LDAA #$FF (disable blocklength limit) CLRB ;enable writing LBLFEB9 PSHA ;Read cassette block STAB ram4273 NOP SEI BSR LBLFE9C LDX ram4278 ;cass buffer address CLRA LBLFEC5 BSR LBLFF22 ;Read cassette bit RORA CMPA #$3C ;00111100 BNE LBLFEC5 BSR LBLFF14 ;Read cassette char STAA ram4275 ;cass block type flag BSR LBLFF14 ;Read cassette char STAA ram4276 ;cass block length PULB CBA BHI LBLFF0A+1 ADDA ram4275 ;cass block type flag STAA ram427A ;cass sumcheck LDAA ram4276 ;cass block length STAA ram427B ;cass load status flag BEQ LBLFF01 LBLFEE8 BSR LBLFF14 ;Read cassette char TST ram4273 BNE LBLFEF6 ;don't write if set STAA ,X CMPA ,X BNE LBLFF0D+1 INX LBLFEF6 ADDA ram427A ;cass sumcheck STAA ram427A ;cass sumcheck DEC ram427B ;cass load status flag BNE LBLFEE8 LBLFF01 BSR LBLFF14 ;Read cassette char SUBA ram427A ;cass sumcheck BEQ LBLFF10 LDAA #$01 ; #$01 - bad sumcheck LBLFF0A CPX #$8603 ;LDAA #$03 - unexpected block length LBLFF0D CPX #$8602 ;LDAA #$02 - store failed LBLFF10 STAA ram427B ;cass load status flag RTS LBLFF14 LDAA #$08 ;Read cassette char->A STAA ram427C ;cass byte load bit counter LBLFF19 BSR LBLFF22 ;read cassette bit RORA DEC ram427C ;cass byte load bit counter BNE LBLFF19 RTS LBLFF22 BSR LBLFF2C ;Read cassette bit->C LDAB ram427D ;tone duration counter DECB CMPB ram422C ;cassette 1200/2400Hz partition RTS LBLFF2C CLR ram427D ;tone duration counter TST ram427E ;cass polarity flag BNE LBLFF45 ;get 1->0 transition ;get 0->1 transition LBLFF34 BSR LBLFF3D ;Inc duration until 0 BNE LBLFF34 LBLFF38 BSR LBLFF3D ;Inc duration until 1 BEQ LBLFF38 RTS LBLFF3D INC ram427D ;tone duration counter LDAB ram03 ANDB #$10 RTS ;get 1->0 transition LBLFF45 BSR LBLFF3D ;Inc duration until 1 BEQ LBLFF45 LBLFF49 BSR LBLFF3D ;Inc duration until 0 BNE LBLFF49 RTS LBLFF4E NOP ;Read cassette leader SEI CLR ram427C ;cass byte load bit counter LBLFF53 BSR LBLFF34 ;get 0->1 xsition LBLFF55 BSR LBLFF84 ;clear counter, count until 0, compare counter against limit BHI LBLFF6B LBLFF59 BSR LBLFF7D ;clear counter, count until 1, compare counter against limit BLO LBLFF6F DEC ram427C ;cass byte load bit counter LDAA ram427C ;cass byte load bit counter CMPA #$A0 LBLFF65 BNE LBLFF53 STAA ram427E ;cass polarity flag RTS LBLFF6B BSR LBLFF7D ;clear counter, count until 1, compare counter against limit BHI LBLFF55 LBLFF6F BSR LBLFF84 ;clear counter, count until 0, compare counter against limit BLO LBLFF59 INC ram427C ;cass byte load bit counter LDAA ram427C ;cass byte load bit counter SUBA #$60 BRA LBLFF65 LBLFF7D CLR ram427D ;tone duration counter BSR LBLFF38 ;incr duration until 1 BRA LBLFF89 LBLFF84 CLR ram427D ;tone duration counter BSR LBLFF49 ;incr duration until 0 LBLFF89 LDAB ram427D ;tone duration counter CMPB ram422D ;upper limit of 1200 Hz BHI LBLFF95 CMPB ram422E ;lower limit of 2400 Hz RTS LBLFF95 CLR ram427C ;cass byte load bit counter RTS LBLFF99 JSR LBLEA2E+1 ; get ',' LBLFF9C JSR LBLEF0D ; get num->B TSTB BNE LBLFFD1 JMP LBLEC2D+1 ;?FC error if B=0 ; --- SOUND command --- CMD_SOUND BSR LBLFF9C ;get num->B PSHB BSR LBLFF99 ;get ,num->B PULA LBLFFAB PSHA ;A=PITCH, B=DURATION PSHB CLRA LBLFFAE LDX ram09 ;4; read counter LDAB ram08 ;3; read timer control and status reg [req'd to clear OCF flag] (ICF OCF TOF EICI EOCI ETOI IEDG OLVL) STX ram0B ;4; store counter to output compare register LBLFFB4 EORA #$80 ;2; toggle speaker coil output STAA ioBFFF ;4; TSX ;3; LDAB 1,X ;4; get pitch LBLFFBC INX ;3; timewaste INX ;3; timewaste INCB ;2; BNE LBLFFBC ;3; (11 cycles per loop) LDAB ram08 ;3; ANDB #$40 ;2; get output compare flag BEQ LBLFFB4 ;3; toggle again if still clear... (freq = 1MHz/(11*(256-PITCH)+21)) TSX ;4; DEC ,X ;6; dec duration (=DURATION * 65.56ms) BNE LBLFFAE ;3; CLRA STAA ioBFFF PULX LBLFFD1 RTS FCB $6E,$69,$6C,$72,$65,$62,$6D,$61,$68,$43 ; nilrebmahC (spell it backwards) ; --- User ROM routines--- FDB LBLF883 ;Scan keyboard FDB LBLF9C6 ;Write char to screen FDB LBLFF4E ;Read cassette leader FDB LBLFEB9 ;Read cassette block FDB LBLFCC0 ;Write cassette block FDB LBLFFAB ;Sound FDB LBLFCB7 ;Write cassette leader FDB LBLECE3 ; return D to BASIC FDB LBLEBC7 ; get result -> D FCB $00,$C9 ; 6803 vectors FDB $4200 ;SCI (TDRE + RDRF + ORFE) FDB $4203 ;TOF Timer overflow interrupt FDB $4206 ;OCF Output compare interrupt FDB $4209 ;ICF Input capture interrupt FDB $420C ;IRQ1 Maskable interrupt req 1. FDB $420F ;SWI Software interrupt FDB $4212 ;NMI Non-maskable interrupt FDB LBLF72E ;Reset .end ; { 0xE000, VECTOR }, ; { 0xE030, TABLE }, ; { 0xE045, TABLE_ASCII }, ; { 0xE148, VECTOR }, ; { 0xE18A, TABLE_ASCII }, ; { 0xE1C8, CODE }, ; { 0xE7C1, TABLE_ASCII }, ; { 0xE7C8, CODE }, ; { 0xE8AB, TABLE_ASCII }, ; { 0xE8BB, CODE }, ; { 0xE988, TABLE }, ; { 0xE98B, CODE }, ; { 0xF08B, TABLE }, ; { 0xF0B9, CODE }, ; { 0xF403, TABLE }, ; { 0xF412, CODE }, ; { 0xF524, TABLE }, ; { 0xF54D, CODE }, ; { 0xF59B, TABLE }, ; { 0xF5C9, CODE }, ; { 0xF682, TABLE_WORD }, ; { 0xF686, CODE }, ; { 0xF6F6, TABLE }, ; { 0xF72E, CODE }, ; { 0xF7F7, TABLE }, ; { 0xF810, TABLE_ASCII }, ; { 0xF83F, CODE }, ; { 0xF956, TABLE_ASCII }, ; { 0xF9C6, CODE }, ; { 0xFFD2, TABLE_ASCII }, ; { 0xFFDC, VECTOR }, ; { 0xFFEE, TABLE }, ; { 0xFFF0, TABLE_WORD }, ; { 0x10000, DISASM_END }, ================================================ FILE: docs/mega65.txt ================================================ https://dansanderson.com/mega65/taste-the-rainbow/ ================================================ FILE: docs/presentazione.md ================================================ # CROSS-LIB Una breve presentazione ## COSA E'? Cross-Lib è una libreria C e alcuni strumenti che permettono di scrivere semplici giochi per computer, consoles 8-bit e altri dispositivi vintage (calcolatrici scientifiche, board arcade, computer giocattolo, etc.). Permette di scrivere un gioco *UNA SOLA VOLTA* e poi compilarne il codice per circa 200 sistemi vintage senza bisogno di doverlo adattare manualmente. Quindi si usa come una normale libreria C che non fa altro che estendere il C con alcune funzioni per l'input, la grafica e per i suoni. I giochi scritti con Cross-Lib sono quindi scritti in C. ## COMPILAZIONE Cross-Lib è fatta in modo che il codice del gioco possa essere cross-compilato con più di una dozzina di cross-compilatori diversi per centinaia di sistemi diversi. In sostanza si usano dei cross-compilatori su PC che producono i binari e eventuali immagini disco/cassetta/cartuccia direttamente da PC. ## FLESSIBILITA' Cross-Lib supporta pressoché qualsiasi sistema 8-bit tra quelli degli ultimi anni 60 fino a quelli dei primi anni 90. Quindi supporta sia sistemi senza alcuna grafica, senza colori e suoni (come CP/M senza schede grafiche aggiuntive), sia sistemi con grafica, colori e suoni (come il Commodore 64 e la console Sega Master System). Cross-Lib fa la "magia" di adattare durante la compilazione il gioco alla presenza o meno di grafica, colori, suoni e adatta il gioco anche rispetto alla dimensione dello schermo di ogni sistema. ## LIMITI Questa enorme flessibilità però impone alcuni vincoli su alcuni aspetti tecnici dei giochi che si possono scrivere con Cross-Lib: - grafica a tiles, - poche tiles, - suoni limitati, - pochi colori, - velocità del gioco a volte non sempre costante, - velocità del gioco non sempre identica tra i diversi sistemi, - etc. Il risultato più evidente è che i giochi scritti con C usano poche tiles (cioè qualcosa di simile a dei caratteri ridefiniti). Nonostante questi limiti è comunque possibile creare delle animazioni più fluide del semplice movimento di un carattere. I giochi attualmente possibili hanno un aspetto simile a quelli dei primi anni 80 su un Sinclair ZX Spectrum. ## SVILUPPO FUTURO Cross-Lib NON è un prodotto finito. In futuro migliorerò diversi aspetti tra cui: - facilità d'uso come framework di sviluppo, - possibilità di usare un numero maggiore di tiles, - maggiore flessibilità dei suoni. ================================================ FILE: docs/presentazione.txt ================================================ CROSS-LIB Una breve presentazione COSA E'? Cross-Lib è una libreria C e alcuni strumenti che permettono di scrivere semplici giochi per computer, consoles 8-bit e altri dispositivi vintage (calcolatrici scientifiche, board arcade, computer giocattolo, etc.). Permette di scrivere un gioco UNA SOLA VOLTA e poi compilarlo per circa 200 sistemi vintage senza bisogno di doverlo adattare. Quindi si usa come una normale libreria C che non fa altro che estendere il C con alcune funzioni per la grafica e per i suoni. I giochi scritti con Cross-Lib sono quindi scritti in C. COMPILAZIONE Cross-Lib è fatta in modo che il codice del gioco possa essere cross-compilato con più di una dozzina di cross-compilatori diversi per centinaia di sistemi diversi. In sostanza si usano dei cross-compilatori su PC che producono i binari e eventuali immagini disco/cassetta/cartuccia direttamente da PC. FLESSIBILITA' Cross-Lib supporta pressoché qualsiasi sistema 8-bit tra quelli degli ultimi anni 60 a quelli più recente. Quindi supporta target senza alcuna grafica, colori e suoni come CP/M senza schede grafiche aggiuntive e sistemi con grafica, colori e suoni come il Commodore 64 e la Game Boy. Cross-Lib fa la "magia" di adattare durante la compilazione il gioco alla presenza o meno di grafica, colori, suoni e dimensione dello schermo di ogni sistema. LIMITI Questa enorme flessibilità però impone alcuni vincoli su alcuni aspetti tecnici dei giochi che si possono scrivere con Cross-Lib: - grafica a tiles, - suoni limitati, - pochi colori, - velocità del gioco a volte non sempre costante, - velocità del gioco non sempre identica tra i diversi sistemi, - etc. Il risultato è che i giochi scritti con C usano poche tiles (cioè qualcosa di simile a dei caratteri ridefiniti). Nonostante questi limiti è comunque possibile creare delle animazioni più fluide del semplice movimento di un carattere. I giochi attualmente possibili hanno un aspetto simile a quelli dei primi anni 80 su un Sinclair ZX Spectrum. SVILUPPO FUTURO Cross-Lib NON è un prodotto finito. In futuro migliorerò diversi aspetti tra cui: - facilità d'uso come framework di sviluppo, - possibilità di usare un numero maggiore di tiles, - maggiore flessibilità dei suoni. ================================================ FILE: docs/requirements.txt ================================================ REQUIREMENTS In order to build the binaries for all targets, you need the compilers (see README.md) and some additionals tools, such as: - Java - Python ================================================ FILE: docs/zzap_issue.txt ================================================ Are PSG sound routines on the Spectrum target suppose to work as on other A&-3-8910 targets? I am testing with the Spectrum 128 emulated by Fuse and EightyOne emulators. Fuse: black screen freezze EightyOne: no freeze but the border flashes when I run the zap function I am using the following code (which works on CPC): ``` #include #include #include #define A_PERIOD_LOW 0 #define A_PERIOD_HI 1 #define B_PERIOD_LOW 2 #define B_PERIOD_HI 3 #define C_PERIOD_LOW 4 #define C_PERIOD_HI 5 #define NOISE 6 #define CONTROL 7 #define A_VOLUME 8 #define B_VOLUME 9 #define C_VOLUME 10 #define ENV_PERIOD_LOW 11 #define ENV_PERIOD_HI 12 #define ENV_WAVE 13 void _ping_sound(uint8_t freq) { uint8_t i; set_psg(A_VOLUME,15); set_psg(A_PERIOD_LOW,255); set_psg(A_PERIOD_HI, 15 - (freq>>4)); set_psg(CONTROL, 0xFF - 0x01); for(i=0;i<220;++i) { } set_psg(A_VOLUME,0); } void _explosion_sound(uint8_t freq) { uint8_t i; uint8_t j; set_psg(NOISE,15); set_psg(A_VOLUME,15); set_psg(A_PERIOD_LOW,0); set_psg(A_PERIOD_HI, 15 - (freq>>4)); set_psg(CONTROL, 0xFF - 0x08); for(i=0;i<13;i++) { set_psg(A_VOLUME,15-i); for(j=0;j<253;++j) { } } set_psg(A_VOLUME,0); } void ZAP_SOUND(void) { uint8_t i; uint8_t j; set_psg(A_VOLUME,15); set_psg(A_PERIOD_LOW,255); set_psg(A_PERIOD_HI, 15); set_psg(CONTROL, 0xFF - 0x01); for(i=0;i<16;i++) { set_psg(A_PERIOD_HI,15-i); for(j=0;j<150;++j){} } set_psg(A_VOLUME,0); } #define PING_SOUND() _ping_sound(0xF0); #define TOCK_SOUND() _ping_sound(0x02); #define TICK_SOUND() _ping_sound(0x60); #define SHOOT_SOUND() _explosion_sound(0xF0); #define EXPLOSION_SOUND() _explosion_sound(0x80); int main() { while(1) { clrscr(); printf("press a key\n"); getch(); clrscr(); printf("ping sound"); PING_SOUND(); getch(); clrscr(); printf("explosion"); EXPLOSION_SOUND(); getch(); clrscr(); printf("zzzapp!!\n"); ZAP_SOUND(); getch(); }; return 0; } ``` which I compile with: ``` $(Z88DK_PATH)$(MYZ88DK) +zx -lndos -create-app -vn $(TEST_PATH)/psg_test.c ``` ================================================ FILE: logs/.gitkeep ================================================ ================================================ FILE: roms/mame/.keepthisfile.txt ================================================ keep this file ================================================ FILE: roms/vice/c64/.keepthisfile.txt ================================================ keep this file ================================================ FILE: roms/vice/pet/.keepthisfile.txt ================================================ keep this file ================================================ FILE: roms/vice/plus4/.keepthisfile.txt ================================================ keep this file ================================================ FILE: roms/vice/vic20/.keepthisfile.txt ================================================ keep this file ================================================ FILE: src/Makefile_common ================================================ ###################################################################### # Common Makefile SOURCE_PATH := $(PARENT_DIR)/$(GAME_NAME) #-D_DEFAULT_ASCII DEFAULT_ASCII= GLOBAL_OPTS ?= $(DEFAULT_ASCII) $(COMPILER_OPTS) $(PROJECT_OPTS) -D__FORCE_SLOWDOWN=$(SLOWDOWN) # #-D_BACKGROUND_COLOR=1 # NCURSES ?= ncursesw ####################################################################### # Use parameters (env variables) to modify compilation parameters SCCZ80_OPTS ?= $(GLOBAL_OPTS) $(Z88DK_MAKEFILE_COMPILATION_OPTS) #-O0 #-O3 SCCZ80_ROM_OPTS ?= $(GLOBAL_OPTS) $(Z88DK_MAKEFILE_COMPILATION_OPTS) #-O0 #-O3 ZSDCC_OPTS ?= $(ZSDCC_MAKEFILE_COMPILATION_OPTS) $(GLOBAL_OPTS) # -SO2 #-SO0 # -SO3 --max-allocs-per-node200000 ZSDCC_ROM_OPTS ?= $(ZSDCC_MAKEFILE_COMPILATION_OPTS) $(GLOBAL_OPTS) # -SO3 # -SO3 --max-allocs-per-node200000 Z88DK_MAKE_OPTS ?= $(ZSDCC_MAKEFILE_THREADS_OPTS) #-j 8 ###################################################################### # Cross-Shoot files # SCCZ80_OPTS ?= -O0 # Parallel compilation for Z88DK targets # Z88DK_MAKE_OPTS ?= -j 8 #################################################################################################################### # COMMON INCLUDES include makefiles.common/auxiliary/Makefile_ALL ################################################################# # Grouped Targets ifeq ($(DO_WIN),1) all: \ gcc_targets \ cc65_targets \ cmoc_targets \ lcc1802_targets \ z88dk_targets C1541 = ../tools/generic/c1541.exe LCC1802_HEX=hex else all: \ gcc_targets \ cc65_targets \ cmoc_targets \ z88dk_targets C1541 = c1541 LCC1802_HEX=out endif gcc_targets: \ ncurses #TODO: Atari is currently broken in newest cc65 versions ifeq ($(DO_WIN),1) cc65_targets_sequential: \ apple2 \ apple2enh \ atari \ atari_lynx \ atari5200 \ atari7800 \ c16 \ c64 \ cbm510 \ cbm610 \ creativision \ gamate \ oric \ nes \ pet \ pce \ supervision \ vic20 else cc65_targets_sequential: \ apple2 \ apple2enh \ atari_lynx \ atari5200 \ atari7800 \ atari \ c16 \ c64 \ cbm510 \ cbm610 \ creativision \ gamate \ oric \ nes \ pet \ pce \ supervision \ vic20 endif cc65_targets: $(MAKE) $(Z88DK_MAKE_OPTS) cc65_targets_sequential -f ./$(PARENT_DIR)/$(GAME_NAME)/Makefile.$(GAME_NAME) cmoc_targets: \ mo5_targets \ to7_targets \ coco_targets ifeq ($(DO_WIN),1) z88dk_targets_sequential: \ ace \ agon \ aquarius \ cpc \ c128_z80_40col \ camputers_lynx \ coleco \ cpm \ gb \ laser500 \ mc1000 \ bee \ m5 \ msx \ mtx500 \ mtx512 \ mz \ pc88 \ samcoupe \ sc3000 \ sc3000_rom \ sg1000 \ spectrum \ vg5k \ vz200 \ zx81_wrx \ zx81_8x6_wrx128 \ zx81 \ gg \ sms else z88dk_targets_sequential: \ aquarius \ ace \ agon \ camputers_lynx \ coleco \ cpc \ cpm \ gb \ laser500 \ mc1000 \ bee \ m5 \ msx \ mtx500 \ mtx512 \ mz \ pc88 \ samcoupe \ sc3000 \ sc3000_rom \ sg1000 \ spectrum \ vg5k \ vz200 \ zx81_wrx \ zx81_8x6_wrx128 \ zx81 \ gg \ sms endif z88dk_targets: $(MAKE) $(Z88DK_MAKE_OPTS) z88dk_targets_sequential -f ./$(PARENT_DIR)/$(GAME_NAME)/Makefile.$(GAME_NAME) _lcc1802_6x9_targets: \ _comx \ _pecom \ _micro lcc1802_6x9_targets: \ _lcc1802_6x9_targets \ clean_combo_files _lcc1802_6x8_targets: \ _comx_ntsc lcc1802_6x8_targets: \ _lcc1802_6x8_targets \ clean_combo_files _lcc1802_ascii_targets: \ _tmc600 lcc1802_ascii_targets: \ _lcc1802_ascii_targets \ clean_combo_files lcc1802_targets: \ _lcc1802_6x9_targets \ _lcc1802_ascii_targets \ clean_combo_files ################################################################# # CC65 ################################################################# CC65_OPTS = $(GLOBAL_OPTS) $(CC65_MAKEFILE_COMPILATION_OPTS) apple2: apple2_hgr apple2_hgr: $(ASSETS_PATH)/7x8_chars.h $(CC65_PATH)$(MYCC65) $(INCLUDE_OPTS) $(CC65_OPTS) -t apple2 \ --config $(CFG_PATH)/cc65/apple2-hgr.cfg \ -D__ALT_SLEEP $(APPLE2_GAME_OPTS) \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_APPLE2_HGR_SLOWDOWN) -DXSize=20 -DYSize=24 \ -D__ALT_PRINT \ -D__APPLE2_HGR_GRAPHICS -D__DEFAULT_CLEAR_SCREEN \ $(CROSS_LIB_PATH)/display/init_graphics/cc65/apple2/hgr.s \ $(FULL_FILES) \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c \ --code-name LOWCODE \ $(CROSS_LIB_PATH)/sound/generic/bit_bang_sounds.c \ $(CROSS_LIB_PATH)/display/init_graphics/cc65/apple2/apple2_hgr_init_graphics.c \ -o $(BUILD_PATH)/aschase.bin ifdef USE_TOOLS cp $(TOOLS_PATH)/cc65/apple2/MASTER_BOOT_ASCHASE.DSK $(BUILD_PATH)/X$(GAME_NAME)_$@.dsk java -jar $(TOOLS_PATH)/cc65/apple2/ac.jar -as $(BUILD_PATH)/X$(GAME_NAME)_$@.dsk aschase < $(BUILD_PATH)/aschase.bin rm -rf $(BUILD_PATH)/aschase.bin else mv $(BUILD_PATH)/aschase.bin $(BUILD_PATH)/X$(GAME_NAME)_$@.bin endif AGAT_GFX_OPTS ?= -D__BIT_MAPPED_GRAPHICS -D__BIT_MAPPED_16_GRAPHICS -D_XL_NO_SMALL_LETTERS agat: $(ASSETS_PATH)/cc65_agat.s $(CC65_PATH)$(MYCC65) $(INCLUDE_OPTS) $(CC65_OPTS) -t agat \ -D__AGAT__ -D_XL_NO_JOYSTICK -D_XL_JCUKEN_KEYBOARD -D__ALT_SLEEP -D__ALT_PRINT -D__DEFAULT_CLEAR_SCREEN \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_AGAT_SLOWDOWN) -DXSize=16 -DYSize=16 \ $(AGAT_GFX_OPTS) \ $(CROSS_LIB_PATH)/sound/generic/bit_bang_sounds.c \ $(FULL_FILES) $(ASSETS_PATH)/cc65_agat.s \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c \ $(CROSS_LIB_PATH)/display/init_graphics/cc65/agat/agat_init_graphics.c \ -o $(BUILD_PATH)/$@.bin ifdef USE_TOOLS cp $(TOOLS_PATH)/cc65/apple2/MASTER_BOOT_ASCHASE.DSK $(BUILD_PATH)/X$(GAME_NAME)_$@.dsk java -jar $(TOOLS_PATH)/cc65/apple2/ac.jar -as $(BUILD_PATH)/X$(GAME_NAME)_$@.dsk xl < $(BUILD_PATH)/$@.bin rm -rf $(BUILD_PATH)/$@.bin else mv $(BUILD_PATH)/$@.bin $(BUILD_PATH)/X$(GAME_NAME)_$@.bin endif agat_ijkl: $(ASSETS_PATH)/cc65_agat.s $(CC65_PATH)$(MYCC65) $(INCLUDE_OPTS) $(CC65_OPTS) -t agat \ -D__AGAT__ -D_XL_NO_JOYSTICK -D__ALT_SLEEP -D__ALT_PRINT -D__DEFAULT_CLEAR_SCREEN \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_AGAT_SLOWDOWN) -DXSize=16 -DYSize=16 \ $(AGAT_GFX_OPTS) \ $(CROSS_LIB_PATH)/sound/generic/bit_bang_sounds.c \ $(FULL_FILES) $(ASSETS_PATH)/cc65_agat.s \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c \ $(CROSS_LIB_PATH)/display/init_graphics/cc65/agat/agat_init_graphics.c \ -o $(BUILD_PATH)/$@.bin ifdef USE_TOOLS cp $(TOOLS_PATH)/cc65/apple2/MASTER_BOOT_ASCHASE.DSK $(BUILD_PATH)/X$(GAME_NAME)_$@.dsk java -jar $(TOOLS_PATH)/cc65/apple2/ac.jar -as $(BUILD_PATH)/X$(GAME_NAME)_$@.dsk xl < $(BUILD_PATH)/$@.bin rm -rf $(BUILD_PATH)/$@.bin else mv $(BUILD_PATH)/$@.bin $(BUILD_PATH)/X$(GAME_NAME)_$@.bin endif # TODO: does it work? agat_cursors: $(ASSETS_PATH)/cc65_agat.s $(CC65_PATH)$(MYCC65) $(INCLUDE_OPTS) $(CC65_OPTS) -t agat \ -D__AGAT__ -D_XL_NO_JOYSTICK -D_XL_ARROW_KEYS -D__ALT_SLEEP -D__ALT_PRINT -D__DEFAULT_CLEAR_SCREEN \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_AGAT_SLOWDOWN) -DXSize=16 -DYSize=16 \ $(AGAT_GFX_OPTS) \ $(CROSS_LIB_PATH)/sound/generic/bit_bang_sounds.c \ $(FULL_FILES) $(ASSETS_PATH)/cc65_agat.s \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c \ $(CROSS_LIB_PATH)/display/init_graphics/cc65/agat/agat_init_graphics.c \ -o $(BUILD_PATH)/$@.bin ifdef USE_TOOLS cp $(TOOLS_PATH)/cc65/apple2/MASTER_BOOT_ASCHASE.DSK $(BUILD_PATH)/X$(GAME_NAME)_$@.dsk java -jar $(TOOLS_PATH)/cc65/apple2/ac.jar -as $(BUILD_PATH)/X$(GAME_NAME)_$@.dsk xl < $(BUILD_PATH)/$@.bin rm -rf $(BUILD_PATH)/$@.bin else mv $(BUILD_PATH)/$@.bin $(BUILD_PATH)/X$(GAME_NAME)_$@.bin endif ################################################################# apple2enh: apple2enh_hgr apple2enh_hgr: $(ASSETS_PATH)/7x8_chars.h $(CC65_PATH)$(MYCC65) $(INCLUDE_OPTS) $(CC65_OPTS) -t apple2 \ --config $(CFG_PATH)/cc65/apple2-hgr.cfg \ -D__ALT_SLEEP $(APPLE2_GAME_OPTS) \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_APPLE2ENH_HGR_SLOWDOWN) -DXSize=20 -DYSize=24 \ -D__ALT_PRINT \ -D__APPLE2_HGR_GRAPHICS -D__DEFAULT_CLEAR_SCREEN \ $(CROSS_LIB_PATH)/display/init_graphics/cc65/apple2/hgr.s \ $(FULL_FILES) \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c \ --code-name LOWCODE \ $(CROSS_LIB_PATH)/sound/generic/bit_bang_sounds.c \ $(CROSS_LIB_PATH)/display/init_graphics/cc65/apple2/apple2_hgr_init_graphics.c \ -o $(BUILD_PATH)/aschase.bin ifdef USE_TOOLS cp $(TOOLS_PATH)/cc65/apple2/MASTER_BOOT_ASCHASE.DSK $(BUILD_PATH)/X$(GAME_NAME)_$@.dsk java -jar $(TOOLS_PATH)/cc65/apple2/ac.jar -as $(BUILD_PATH)/X$(GAME_NAME)_$@.dsk aschase < $(BUILD_PATH)/aschase.bin rm -rf $(BUILD_PATH)/aschase.bin else mv $(BUILD_PATH)/aschase.bin $(BUILD_PATH)/X$(GAME_NAME)_$@.bin endif ################################################################# atari: $(ASSETS_PATH)/8x8_chars.h $(TOOLS_PATH)/cc65/atari/mkatr-master/mkatr$(COMPILEDEXT) $(CC65_PATH)$(MYCC65) $(INCLUDE_OPTS) $(CC65_OPTS) -t atari \ \ $(5COLOR_PALETTE) \ --config $(CFG_PATH)/cc65/atari_mode1_redefined_chars.cfg \ -D__ANTIC_MODE6_GRAPHICS -D__ALT_SLEEP \ -D__NO_SCREEN_COLOR_INIT \ -D__ALT_PRINT \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_ATARI_SLOWDOWN) \ $(CROSS_LIB_PATH)/display/alt_print/atari_mode1_alt_print.c \ $(CROSS_LIB_PATH)/display/init_graphics/cc65/atari/disable_setcursor.s \ $(CROSS_LIB_PATH)/display/init_graphics/cc65/atari/atari_mode1_redefined_chars_init_graphics.c \ $(CROSS_LIB_PATH)/sound/cc65/pokey/pokey_sounds.c \ $(FULL_FILES) \ -o $(BUILD_PATH)/X$(GAME_NAME)_$@.xex $(TOOLS_PATH)/cc65/atari/mkatr-master/mkatr $(BUILD_PATH)/X$(GAME_NAME)_$@.atr -b $(BUILD_PATH)/X$(GAME_NAME)_$@.xex ################################################################# atari5200: $(ASSETS_PATH)/8x8_chars.h $(CC65_PATH)$(MYCC65) $(INCLUDE_OPTS) $(CC65_OPTS) -t atari5200 \ --config $(CFG_PATH)/cc65/atari5200_redefined_chars_32k.cfg \ -D__ATARI5200__ $(5COLOR_PALETTE) \ -D__ANTIC_MODE6_GRAPHICS \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_ATARI5200_SLOWDOWN) \ $(CROSS_LIB_PATH)/sound/cc65/pokey/pokey_sounds.c \ $(FULL_FILES) \ $(CROSS_LIB_PATH)/display/init_graphics/cc65/atari5200/atari5200_init_graphics.c \ -o $(BUILD_PATH)/X$(GAME_NAME)_$@.rom ################################################################# atari_lynx: $(ASSETS_PATH)/8x6_tiles.s $(CC65_PATH)$(MYCC65) $(INCLUDE_OPTS) $(CC65_OPTS) -t lynx \ -D__ATARI_LYNX__ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_ATARI_LYNX_SLOWDOWN) \ -D__NO_SCREEN_COLOR_INIT -DXSize=20 -DYSize=17 -D_XL_NUMBER_OF_TILES=27 \ -D__LYNX_TGI_GRAPHICS \ -D__ALT_PRINT \ $(CROSS_LIB_PATH)/display/alt_print/tgi_gfx_print.c \ $(CROSS_LIB_PATH)/sound/cc65/atari_lynx/atari_lynx_sounds.c \ $(CROSS_LIB_PATH)/sound/cc65/atari_lynx/chibisound.asm \ $(ASSETS_PATH)/8x6_tiles.s \ $(CROSS_LIB_PATH)/display/init_graphics/cc65/atari_lynx/atari_lynx_gfx_init_graphics.c \ $(FULL_FILES) \ -o $(BUILD_PATH)/X$(GAME_NAME)_$@.lnx ################################################################# %.o : %.s $(CC65_PATH)$(CA65) -t atari7800 -o$@ $< sfxobjects= \ $(TOOLS_PATH)/cc65/atari7800/sfxlib/sfx_bling.o \ $(TOOLS_PATH)/cc65/atari7800/sfxlib/sfx_explosion.o \ $(TOOLS_PATH)/cc65/atari7800/sfxlib/sfx_poof1.o \ $(TOOLS_PATH)/cc65/atari7800/sfxlib/sfx_poof2.o \ $(TOOLS_PATH)/cc65/atari7800/sfxlib/sfx_powerup.o \ $(TOOLS_PATH)/cc65/atari7800/sfxlib/sfx_quack.o sfxlib = sfx.lib # all: $(sfxlib) $(sfxlib) : $(sfxobjects) $(AR65) rv $(sfxlib) $(sfxobjects) $(AR65) t $(sfxlib) atari7800: $(ASSETS_PATH)/cc65_udc_atari7800_160A.s $(ASSETS_PATH)/formatted_cc65_udc_atari7800_160A.s $(TOOLS_PATH)/cc65/atari7800/sfx.o $(TOOLS_PATH)/cc65/atari7800/extzp.o $(sfxlib) $(CC65_PATH)$(MYCC65) $(INCLUDE_OPTS) $(CC65_OPTS) -t atari7800 --force-import __EXEHDR__ \ -D__ATARI7800_COLOR_GRAPHICS -D__NO_SCREEN_COLOR_INIT -D__ALT_SLEEP \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_ATARI7800_SLOWDOWN) \ -DXSize=20 -DYSize=28 -D__DEFAULT_CLEAR_SCREEN $(4COLOR_PALETTE) \ -D__ALT_PRINT \ $(TOOLS_PATH)/cc65/atari7800/extzp.o \ $(TOOLS_PATH)/cc65/atari7800/sfx.o \ $(FULL_FILES) \ $(CROSS_LIB_PATH)/display/init_graphics/cc65/atari7800/atari7800_init_graphics.c \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c \ $(ASSETS_PATH)/formatted_cc65_udc_atari7800_160A.s \ -o $(BUILD_PATH)/X$(GAME_NAME)_$@.a78 -L . sfx.lib rm sfx.lib atari7800_no_color: $(CC65_PATH)$(MYCC65) $(INCLUDE_OPTS) $(CC65_OPTS) -t atari7800 --force-import __EXEHDR__ atari7800-mono.o \ --config $(CFG_PATH)/cc65/atari7800_more_ram.cfg -D_XL_NO_UDG -D_XL_NO_COLOR -D__TARGET_SPECIFIC_ASCII \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS -D__NO_SCREEN_COLOR_INIT -D__ALT_SLEEP -D_XL_NO_SOUND \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_ATARI7800_NO_COLOR_SLOWDOWN) -DXSize=34 -DX_OFFSET=3 -DYSize=28 \ $(FULL_FILES) \ -o $(BUILD_PATH)/X$(GAME_NAME)_$@.a78 atari7800_320A: $(ASSETS_PATH)/cc65_udc_atari7800_160A.s $(ASSETS_PATH)/formatted_cc65_udc_atari7800_160A.s $(CC65_PATH)$(MYCC65) $(INCLUDE_OPTS) $(CC65_OPTS) -t atari7800 --force-import __EXEHDR__ atari7800-mono.o \ --config $(CFG_PATH)/cc65/atari7800_more_ram.cfg -D_XL_NO_COLOR -D__TARGET_SPECIFIC_ASCII \ -D__ATARI7800_COLOR_GRAPHICS -D__DEFAULT_CLEAR_SCREEN \ -D__CONIO_GRAPHICS -D__NO_SCREEN_COLOR_INIT -D__ALT_SLEEP -D_XL_NO_SOUND \ $(ASSETS_PATH)/formatted_cc65_udc_atari7800_160A.s \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_ATARI7800_NO_COLOR_SLOWDOWN) -DXSize=34 -DX_OFFSET=3 -DYSize=28 \ $(CROSS_LIB_PATH)/display/init_graphics/cc65/atari7800/atari7800_init_graphics.c \ $(FULL_FILES) \ -o $(BUILD_PATH)/X$(GAME_NAME)_$@.a78 ################################################################# c16: c16_32k # -m mapfile.txt # --check-stack # D__DEFAULT_CLEAR_SCREEN uses _SPACE=$60, which is correct but slow # D__KERNAL_CLEAR_SCREEN uses a hard-coded $20 character, which is wrong in this case ($60 is needed) # D__ASSEMBLY_CLEAR_SCREEN uses a hard-coded $60, which is correct c16_16k: $(ASSETS_PATH)/cc65_udc_arcade_64_chars.s $(CC65_PATH)$(MYCC65) $(INCLUDE_OPTS) $(CC65_OPTS) -t c16 \ --config $(CFG_PATH)/cc65/c16-16k_GFX_64chars_stack_0x30.cfg \ -D__NO_SCREEN_COLOR_INIT \ -D__ALT_PRINT \ -D__MEMORY_MAPPED_GRAPHICS \ -D__ASSEMBLY_CLEAR_SCREEN \ -D__ALT_SLEEP \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_C16_SLOWDOWN) \ -D__UDG_BASE_FACTOR=15 \ $(CROSS_LIB_PATH)/sound/cc65/c264/c264_sounds.c \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c \ $(FULL_FILES) \ $(ASSETS_PATH)/cc65_udc_arcade_64_chars.s \ $(CROSS_LIB_PATH)/display/init_graphics/cc65/c264/c16_linked_redefined_chars_init_graphics.c \ -o $(BUILD_PATH)/X$(GAME_NAME)_$@.prg c16_16k_double_buffer: $(ASSETS_PATH)/cc65_udc_arcade_64_chars.s $(CC65_PATH)$(MYCC65) $(INCLUDE_OPTS) $(CC65_OPTS) -t c16 -m mapfile.txt \ --config $(CFG_PATH)/cc65/c16-16k_GFX_64chars_stack_0x30.cfg \ -D__NO_SCREEN_COLOR_INIT -D__USE_WAIT_V_SYNC \ -D__ALT_PRINT \ -D__MEMORY_MAPPED_GRAPHICS -D__DOUBLE_BUFFER \ -D__ASSEMBLY_CLEAR_SCREEN -D__DEFAULT_CLEAR_SCREEN \ -D__ALT_SLEEP \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_C16_DOUBLE_BUFFER_SLOWDOWN) \ -D__UDG_BASE_FACTOR=15 \ $(CROSS_LIB_PATH)/sound/cc65/c264/c264_sounds.c \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c \ $(FULL_FILES) \ $(ASSETS_PATH)/cc65_udc_arcade_64_chars.s \ $(CROSS_LIB_PATH)/display/init_graphics/cc65/c264/c16_linked_redefined_chars_init_graphics.c \ -o $(BUILD_PATH)/X$(GAME_NAME)_$@.prg c16_16k_low_stack: $(ASSETS_PATH)/cc65_udc_arcade_64_chars.s $(CC65_PATH)$(MYCC65) $(INCLUDE_OPTS) $(CC65_OPTS) -t c16 \ --config $(CFG_PATH)/cc65/c16-16k_GFX_64chars_stack_0x30_less_hd_stack.cfg \ -D__NO_SCREEN_COLOR_INIT \ -D__ALT_PRINT \ -D__MEMORY_MAPPED_GRAPHICS \ -D__ASSEMBLY_CLEAR_SCREEN \ -D__ALT_SLEEP \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_C16_SLOWDOWN) \ -D__UDG_BASE_FACTOR=15 \ $(CROSS_LIB_PATH)/sound/cc65/c264/c264_sounds.c \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c \ $(FULL_FILES) \ $(ASSETS_PATH)/cc65_udc_arcade_64_chars.s \ $(CROSS_LIB_PATH)/display/init_graphics/cc65/c264/c16_linked_redefined_chars_init_graphics.c \ -o $(BUILD_PATH)/X$(GAME_NAME)_$@.prg c16_conio: c16_16k_conio c16_16k_conio: $(ASSETS_PATH)/8x8_chars.h $(CC65_PATH)$(MYCC65) $(INCLUDE_OPTS) $(CC65_OPTS) -t c16 --config $(CFG_PATH)/cc65/c16-16k.cfg -m mapfile.txt \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_C16_CONIO_SLOWDOWN) \ -D__CONIO_GRAPHICS \ $(CROSS_LIB_PATH)/display/init_graphics/cc65/c264/c16_redefined_chars_init_graphics.c \ $(CROSS_LIB_PATH)/sound/cc65/c264/c264_sounds.c \ $(FULL_FILES) \ -o $(BUILD_PATH)/X$(GAME_NAME)_$@.prg #c16_32k: c16_32k_conio c16_32k: $(ASSETS_PATH)/8x8_chars.h $(CC65_PATH)$(MYCC65) $(INCLUDE_OPTS) $(CC65_OPTS) -t c16 --config $(CFG_PATH)/cc65/c16-32k.cfg \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_C16_SLOWDOWN) \ -D__CONIO_GRAPHICS \ $(CROSS_LIB_PATH)/display/init_graphics/cc65/c264/c16_redefined_chars_init_graphics.c \ $(CROSS_LIB_PATH)/sound/cc65/c264/c264_sounds.c \ $(FULL_FILES) \ -o $(BUILD_PATH)/X$(GAME_NAME)_$@.prg ################################################################# # c64_Ln: $(ASSETS_PATH)/cc65_udc_arcade.s # $(CC65_PATH)$(MYCC65) $(INCLUDE_OPTS) $(CC65_OPTS) -t c64 -Ln global \ # --config $(CFG_PATH)/cc65/c64_GFXat0xC000.cfg \ # -D__MEMORY_MAPPED_GRAPHICS -D__ALT_PRINT \ # -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_C64_SLOWDOWN) \ # $(CROSS_LIB_PATH)/sound/cc65/sid/sid_sounds.c \ # $(ASSETS_PATH)/cc65_udc_arcade.s \ # $(CROSS_LIB_PATH)/display/init_graphics/cc65/c64/c64_init_graphics.c \ # $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c \ # $(FULL_FILES) \ # -o $(BUILD_PATH)/X$(GAME_NAME)_$@.prg # -Ln global c64: $(ASSETS_PATH)/cc65_udc_arcade.s $(CC65_PATH)$(MYCC65) $(INCLUDE_OPTS) $(CC65_OPTS) -t c64 \ --config $(CFG_PATH)/cc65/c64_GFXat0xC000.cfg \ -D__MEMORY_MAPPED_GRAPHICS -D__ALT_PRINT \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_C64_SLOWDOWN) \ $(CROSS_LIB_PATH)/sound/cc65/sid/sid_sounds.c \ $(ASSETS_PATH)/cc65_udc_arcade.s \ $(CROSS_LIB_PATH)/display/init_graphics/cc65/c64/c64_init_graphics.c \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c \ $(FULL_FILES) \ -o $(BUILD_PATH)/X$(GAME_NAME)_$@.prg c64_double_buffer: $(ASSETS_PATH)/cc65_udc_arcade.s $(CC65_PATH)$(MYCC65) $(INCLUDE_OPTS) $(CC65_OPTS) -t c64 \ --config $(CFG_PATH)/cc65/c64_GFXat0xC000.cfg \ -D__MEMORY_MAPPED_GRAPHICS -D__DOUBLE_BUFFER -D__ALT_PRINT \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_C64_SLOWDOWN) \ $(CROSS_LIB_PATH)/sound/cc65/sid/sid_sounds.c \ $(ASSETS_PATH)/cc65_udc_arcade.s \ $(CROSS_LIB_PATH)/display/init_graphics/cc65/c64/c64_init_graphics.c \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c \ $(FULL_FILES) \ -o $(BUILD_PATH)/X$(GAME_NAME)_$@.prg #TODO: Broken c64_conio: $(ASSETS_PATH)/cc65_udc_arcade_conio.s $(CC65_PATH)$(MYCC65) $(INCLUDE_OPTS) $(CC65_OPTS) -t c64 \ --config $(CFG_PATH)/cc65/c64_GFXat0xC000.cfg \ -D__CONIO_GRAPHICS \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_C64_SLOWDOWN) \ $(CROSS_LIB_PATH)/sound/cc65/sid/sid_sounds.c \ $(ASSETS_PATH)/cc65_udc_arcade_conio.s \ $(CROSS_LIB_PATH)/display/init_graphics/cc65/c64/c64_init_graphics.c \ $(FULL_FILES) \ -o $(BUILD_PATH)/X$(GAME_NAME)_$@.prg ifdef USE_TOOLS c64_exomized: c64 $(TOOLS_PATH)/generic/exomizer/exomizer$(COMPILEDEXT) $(TOOLS_PATH)/generic/exomizer/exomizer sfx basic $(BUILD_PATH)/X$(GAME_NAME)_$<.prg -o $(BUILD_PATH)/X$(GAME_NAME)_$@.prg c64_crt: c64_exomized python $(TOOLS_PATH)/cc65/c64/prg2crt.py $(BUILD_PATH)/X$(GAME_NAME)_$<.prg $(BUILD_PATH)/X$(GAME_NAME)_$@.crt endif ####################################################################################### # CBM610 cbm610: $(CC65_PATH)$(MYCC65) $(INCLUDE_OPTS) $(CC65_OPTS) -t cbm610 \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS -D_XL_NO_JOYSTICK -D_XL_NO_UDG \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_CBM610_SLOWDOWN) \ $(FULL_FILES) \ -o $(BUILD_PATH)/X$(GAME_NAME)_$@.prg ####################################################################################### # CBM510 cbm510: $(CC65_PATH)$(MYCC65) $(INCLUDE_OPTS) $(CC65_OPTS) -t cbm510 -DEXTRA_TITLE \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS -D_XL_NO_SOUND -D_XL_NO_UDG \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_CBM510_SLOWDOWN) \ $(FULL_FILES) \ -o $(BUILD_PATH)/X$(GAME_NAME)_$@.prg ################################################################# ifdef USE_TOOLS gamate: $(ASSETS_PATH)/cc65_gamate_tiles.s $(TOOLS_PATH)/cc65/gamate/gamate-fixcart$(COMPILEDEXT) else gamate: $(ASSETS_PATH)/cc65_gamate_tiles.s endif $(CC65_PATH)$(MYCC65) $(INCLUDE_OPTS) $(CC65_OPTS) -t gamate --config $(CFG_PATH)/cc65/gamate_reduced_stack.cfg \ \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_GAMATE_SLOWDOWN) \ $(GAMATE_GAME_OPTS) \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS \ -D__NO_SCREEN_COLOR_INIT \ $(FULL_FILES) \ $(ASSETS_PATH)/cc65_gamate_tiles.s \ $(CROSS_LIB_PATH)/sound/cc65/gamate/gamate_sounds.c \ -o $(BUILD_PATH)/X$(GAME_NAME)_gamate.bin ifdef USE_TOOLS $(TOOLS_PATH)/cc65/gamate/gamate-fixcart$(COMPILEDEXT) $(BUILD_PATH)/X$(GAME_NAME)_gamate.bin endif ################################################################# nes: $(ASSETS_PATH)/cc65_nes_color_tiles.s $(CC65_PATH)$(MYCC65) $(INCLUDE_OPTS) $(CC65_OPTS) -t nes \ --config $(CFG_PATH)/cc65/nes_fx.cfg \ -D__NES_CONIO_GRAPHICS \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_NES_SLOWDOWN) \ $(4COLOR_PALETTE) \ -D__DEFAULT_CLEAR_SCREEN \ $(CROSS_LIB_PATH)/display/init_graphics/cc65/nes/nes_init_graphics.c \ $(ASSETS_PATH)/cc65_nes_color_tiles.s \ $(FULL_FILES) \ -o $(BUILD_PATH)/X$(GAME_NAME)_nes.nes ################################################################# pce: pce_32k pce_16k: $(ASSETS_PATH)/cc65_pce_tiles.s $(CC65_PATH)$(MYCC65) $(INCLUDE_OPTS) $(CC65_OPTS) -t pce \ \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_PCE_SLOWDOWN) \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS \ --config $(CFG_PATH)/cc65/pce_16k_less_stack.cfg \ $(FULL_FILES) \ $(ASSETS_PATH)/cc65_pce_tiles.s \ -o $(BUILD_PATH)/X$(GAME_NAME)_PCE.bin dd if=$(BUILD_PATH)/X$(GAME_NAME)_PCE.bin ibs=1 count=8192 of=$(BUILD_PATH)/X$(GAME_NAME)_PCE_LOW.bin dd if=$(BUILD_PATH)/X$(GAME_NAME)_PCE.bin ibs=1 skip=8192 of=$(BUILD_PATH)/X$(GAME_NAME)_PCE_HIGH.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_PCE.bin cat $(BUILD_PATH)/X$(GAME_NAME)_PCE_HIGH.bin $(BUILD_PATH)/X$(GAME_NAME)_PCE_LOW.bin > $(BUILD_PATH)/X$(GAME_NAME)_PCE_SWAPPED.pce rm -rf $(BUILD_PATH)/X$(GAME_NAME)_PCE_LOW.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_PCE_HIGH.bin pce_32k: $(ASSETS_PATH)/cc65_pce_tiles.s $(CC65_PATH)$(MYCC65) $(INCLUDE_OPTS) $(CC65_OPTS) -t pce \ \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_PCE_SLOWDOWN) \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS \ --config $(CFG_PATH)/cc65/pce_32k.cfg \ $(FULL_FILES) \ $(ASSETS_PATH)/cc65_pce_tiles.s \ -o $(BUILD_PATH)/X$(GAME_NAME)_PCE.bin dd if=$(BUILD_PATH)/X$(GAME_NAME)_PCE.bin ibs=1 count=24576 of=$(BUILD_PATH)/X$(GAME_NAME)_PCE_LOW.bin dd if=$(BUILD_PATH)/X$(GAME_NAME)_PCE.bin ibs=1 skip=24576 of=$(BUILD_PATH)/X$(GAME_NAME)_PCE_HIGH.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_PCE.bin cat $(BUILD_PATH)/X$(GAME_NAME)_PCE_HIGH.bin $(BUILD_PATH)/X$(GAME_NAME)_PCE_LOW.bin > $(BUILD_PATH)/X$(GAME_NAME)_PCE_SWAPPED.pce rm -rf $(BUILD_PATH)/X$(GAME_NAME)_PCE_LOW.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_PCE_HIGH.bin ################################################################# creativision: $(ASSETS_PATH)/8x8_chars.h $(CC65_PATH)$(MYCC65) $(INCLUDE_OPTS) $(CC65_OPTS) -t creativision \ -D__CREATIVISION__ \ -D__ALT_SLEEP $(CREATIVISION_GAME_OPTS) \ -D__VDP_MODE1_GRAPHICS \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_CREATIVISION_SLOWDOWN) \ --config $(CFG_PATH)/cc65/creativision-16k.cfg \ $(CROSS_LIB_PATH)/sound/cc65/creativision/creativision_sounds.c \ $(FULL_FILES) \ $(CROSS_LIB_PATH)/display/init_graphics/cc65/creativision/creativision_color_init_graphics.c \ -o $(BUILD_PATH)/X$(GAME_NAME)_creativision_16k.bin dd if=$(BUILD_PATH)/X$(GAME_NAME)_creativision_16k.bin bs=8k skip=1 > $(BUILD_PATH)/X$(GAME_NAME)_creativision_16k_SWAPPED.bin dd if=$(BUILD_PATH)/X$(GAME_NAME)_creativision_16k.bin bs=8k count=1 >> $(BUILD_PATH)/X$(GAME_NAME)_creativision_16k_SWAPPED.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_creativision_16k.bin ################################################################# oric: oric_atmos atmos: oric_atmos oric1: oric_atmos oric1_48k: oric_atmos oric_atmos: $(ASSETS_PATH)/6x8_chars.h $(CC65_PATH)$(MYCC65) $(INCLUDE_OPTS) $(CC65_OPTS) \ -t atmos -D_XL_NO_JOYSTICK $(ORIC_COLORS) \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_ORIC_SLOWDOWN) \ --config $(CFG_PATH)/cc65/atmos_better_tap.cfg \ -D__ORIC_COLOR_GRAPHICS \ $(CROSS_LIB_PATH)/display/init_graphics/cc65/atmos/atmos_redefined_characters_init_graphics.c \ $(FULL_FILES) \ -o $(BUILD_PATH)/X$(GAME_NAME)_atmos_and_oric1_48k.tap ################################################################# pet: pet_16k pet_16k: $(CC65_PATH)$(MYCC65) $(INCLUDE_OPTS) $(CC65_OPTS) -t pet -m mapfile.txt \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_PET_SLOWDOWN) \ -D__NO_INIT_GRAPHICS -D__CONIO_GRAPHICS -D_XL_NO_UDG \ $(FULL_FILES) \ $(CROSS_LIB_PATH)/sound/cc65/pet/pet_sounds.c \ -o $(BUILD_PATH)/X$(GAME_NAME)_pet_16k.prg ################################################################# supervision: $(ASSETS_PATH)/cc65_udc.s $(CC65_PATH)$(MYCC65) $(INCLUDE_OPTS) $(CC65_OPTS) -t supervision \ --config $(CFG_PATH)/cc65/supervision-16k_GFX_2.cfg \ $(ASSETS_PATH)/cc65_udc.s \ -D__ALT_PRINT -D__ALT_SLEEP \ -D__BIT_MAPPED_4_GRAPHICS \ -D__DEFAULT_CLEAR_SCREEN \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_SUPERVISION_SLOWDOWN) \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c \ $(FULL_FILES) \ $(CROSS_LIB_PATH)/display/init_graphics/cc65/supervision/supervision_init_graphics.c \ -o $(BUILD_PATH)/X$(GAME_NAME)_supervision.sv ################################################################# vic20: vic20_exp_16k vic20_exp_16k: $(ASSETS_PATH)/cc65_udc_arcade_v2.s $(CC65_PATH)$(MYCC65) $(INCLUDE_OPTS) $(CC65_OPTS) -t vic20 \ --config $(CFG_PATH)/cc65/vic20-16k_CODE2_GFX_V2.cfg \ -D__CONIO_GRAPHICS -D__VIC20_EXP_8K $(VIC_20_EXP_16K_GAME_OPTS) \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_VIC20_SLOWDOWN) \ \ $(ASSETS_PATH)/cc65_udc_arcade_v2.s \ $(FULL_FILES) \ --code-name CODE2 \ $(CROSS_LIB_PATH)/sound/cc65/vic20/vic20_sounds.c \ $(CROSS_LIB_PATH)/display/init_graphics/cc65/vic20/vic20_init_graphics.c \ -o $(BUILD_PATH)/X$(GAME_NAME)_$@.prg vic20_exp_8k_conio: $(ASSETS_PATH)/cc65_udc_arcade_v2.s $(CC65_PATH)$(MYCC65) $(INCLUDE_OPTS) $(CC65_OPTS) -t vic20 \ --config $(CFG_PATH)/cc65/vic20-8k_CODE2_GFX_V2.cfg \ -D__CONIO_GRAPHICS -D__VIC20_EXP_8K $(VIC_20_EXP_16K_GAME_OPTS) \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_VIC20_SLOWDOWN) \ $(FULL_FILES) \ --code-name CODE2 \ $(CROSS_LIB_PATH)/display/init_graphics/cc65/vic20/vic20_init_graphics.c \ $(CROSS_LIB_PATH)/sound/cc65/vic20/vic20_sounds.c \ $(ASSETS_PATH)/cc65_udc_arcade_v2.s \ -o $(BUILD_PATH)/X$(GAME_NAME)_$@.prg vic20_exp_8k: $(ASSETS_PATH)/cc65_udc_vic20_27_tiles.s $(CC65_PATH)$(MYCC65) $(INCLUDE_OPTS) $(CC65_OPTS) -t vic20 \ --config $(CFG_PATH)/cc65/vic20-8k_memory_mapped_GFX.cfg \ -D__ALT_SLEEP $(VIC_20_EXP_16K_GAME_OPTS) \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_VIC20_SLOWDOWN) \ -D__MEMORY_MAPPED_GRAPHICS -D__VIC20__ -D__VIC20_EXP_8K \ -D__ALT_PRINT \ -D__DEFAULT_CLEAR_SCREEN \ $(FULL_FILES) \ --code-name CODE2 \ $(ASSETS_PATH)/cc65_udc_vic20_27_tiles.s \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c \ $(CROSS_LIB_PATH)/display/init_graphics/cc65/vic20/vic20_init_graphics.c \ $(CROSS_LIB_PATH)/sound/cc65/vic20/vic20_sounds.c \ -o $(BUILD_PATH)/X$(GAME_NAME)_$@.prg vic20_exp_3k: $(ASSETS_PATH)/cc65_udc_vic20_64_chars.s $(CC65_PATH)$(MYCC65) $(INCLUDE_OPTS) $(CC65_OPTS) -t vic20 \ --config $(CFG_PATH)/cc65/vic20-3k_GFX.cfg \ -D__VIC20_EXP_3K \ -D__MEMORY_MAPPED_GRAPHICS \ $(VIC_20_EXP_3K_GAME_OPTS) \ -D__ALT_PRINT \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_VIC20_SLOWDOWN) \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c \ $(CROSS_LIB_PATH)/display/init_graphics/cc65/vic20/vic20_init_graphics.c \ $(CROSS_LIB_PATH)/sound/cc65/vic20/vic20_sounds.c \ $(FULL_FILES) \ $(ASSETS_PATH)/cc65_udc_vic20_64_chars.s \ -o $(BUILD_PATH)/X$(GAME_NAME)_$@.prg # Unexpanded VIC 20, with 6 tiles, default ASCII mapped as reverse characters # vic20_unexpanded: $(ASSETS_PATH)/cc65_udc_6chars.s # $(CC65_PATH)$(MYCC65) $(INCLUDE_OPTS) $(CC65_OPTS) -t vic20 -m mapfile.txt \ # -D_XL_NO_TEXT_COLOR \ # -D__VIC20_UNEXPANDED -D_XL_NUMBER_OF_TILES=6 \ # -D__NO_SLEEP_SEC -D__ALT_SLEEP \ # -D__NO_COLOR_INIT \ # -D__MEMORY_MAPPED_GRAPHICS \ # -D__ALT_PRINT \ # -D__DEFAULT_CLEAR_SCREEN \ # -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_VIC20_SLOWDOWN) \ # $(VIC20_UNEXPANDED_GAME_OPTS) \ # --config $(CFG_PATH)/cc65/vic20_unexpanded_gfx.cfg \ # $(FULL_FILES) \ # $(CROSS_LIB_PATH)/sound/cc65/vic20/vic20_sounds.c \ # $(CROSS_LIB_PATH)/display/init_graphics/cc65/vic20/vic20_init_graphics.c \ # $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c \ # $(ASSETS_PATH)/cc65_udc_6chars.s \ # -o $(BUILD_PATH)/X$(GAME_NAME)_$@.prg # Same as above but with just explosion sound vic20_unexpanded: $(ASSETS_PATH)/cc65_udc_6chars.s $(CC65_PATH)$(MYCC65) $(INCLUDE_OPTS) $(CC65_OPTS) -t vic20 -m mapfile.txt \ -D_XL_NO_TEXT_COLOR \ -D__VIC20_UNEXPANDED -D_XL_NUMBER_OF_TILES=6 \ -D__NO_SLEEP_SEC -D__ALT_SLEEP \ -D__NO_COLOR_INIT \ -D__MEMORY_MAPPED_GRAPHICS \ -D__ALT_PRINT \ -D__DEFAULT_CLEAR_SCREEN \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_VIC20_SLOWDOWN) \ $(VIC20_UNEXPANDED_GAME_OPTS) \ --config $(CFG_PATH)/cc65/vic20_unexpanded_gfx.cfg \ $(FULL_FILES) \ $(CROSS_LIB_PATH)/sound/cc65/vic20/vic20_explosion_sound.c \ $(CROSS_LIB_PATH)/display/init_graphics/cc65/vic20/vic20_init_graphics.c \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c \ $(ASSETS_PATH)/cc65_udc_6chars.s \ -o $(BUILD_PATH)/X$(GAME_NAME)_$@.prg vic20_unexpanded2: $(ASSETS_PATH)/cc65_udc_6chars.s $(CC65_PATH)$(MYCC65) $(INCLUDE_OPTS) $(CC65_OPTS) -t vic20 -m mapfile.txt \ -D_XL_NO_TEXT_COLOR \ -D__VIC20_UNEXPANDED -D_XL_NUMBER_OF_TILES=6 \ -D__NO_SLEEP_SEC -D__ALT_SLEEP \ -D__NO_COLOR_INIT \ -D__MEMORY_MAPPED_GRAPHICS \ -D__ALT_PRINT \ -D__DEFAULT_CLEAR_SCREEN \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_VIC20_SLOWDOWN) \ $(VIC20_UNEXPANDED_GAME_OPTS) \ --config $(CFG_PATH)/cc65/vic20_unexpanded_gfx_low_stack.cfg \ $(FULL_FILES) \ $(CROSS_LIB_PATH)/sound/cc65/vic20/vic20_sounds.c \ $(CROSS_LIB_PATH)/display/init_graphics/cc65/vic20/vic20_init_graphics.c \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c \ $(ASSETS_PATH)/cc65_udc_6chars.s \ -o $(BUILD_PATH)/X$(GAME_NAME)_$@.prg vic20_unexpanded_no_gfx: $(CC65_PATH)$(MYCC65) $(INCLUDE_OPTS) $(CC65_OPTS) -t vic20 \ -D__MEMORY_MAPPED_GRAPHICS \ -D_XL_NO_TEXT_COLOR \ -D__VIC20_UNEXPANDED \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_VIC20_SLOWDOWN) \ -D__ALT_SLEEP -D__NO_SLEEP_SEC \ -D__NO_SCREEN_COLOR_INIT \ -D_XL_NO_UDG \ $(VIC20_UNEXPANDED_NO_GFX_GAME_OPTS) \ -D__ALT_PRINT \ --config $(CFG_PATH)/cc65/alt/vic20_unexpanded.cfg \ $(FULL_FILES) \ $(CROSS_LIB_PATH)/sound/cc65/vic20/vic20_sounds.c \ $(CROSS_LIB_PATH)/display/init_graphics/cc65/vic20/vic20_init_graphics.c \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c \ -o $(BUILD_PATH)/X$(GAME_NAME)_$@.prg ################################################################# # Z88DK ################################################################# jupiter_ace: ace ace: ace_exp_16k ace_exp_16k: $(ASSETS_PATH)/z88dk_xchase.asm $(Z88DK_PATH)$(MYZ88DK) +ace $(SCCZ80_OPTS) $(INCLUDE_OPTS) \ -D__ACE__ \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_ACE_SLOWDOWN) \ -D_XL_NO_JOYSTICK \ -D__CONIO_GRAPHICS \ -clib=default \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/udg/udg_init_graphics.c \ $(ASSETS_PATH)/z88dk_xchase.asm \ $(FULL_FILES) \ -o $(BUILD_PATH)/X$(GAME_NAME)_$@ -Cz--audio -create-app rm $(BUILD_PATH)/X$(GAME_NAME)_$@ ################################################################# agon: agon_mode2 agon_mode2: $(ASSETS_PATH)/z88dk_xchase.asm $(Z88DK_PATH)$(MYZ88DK) +agon $(SCCZ80_OPTS) $(INCLUDE_OPTS) \ -D__AGON__ -D_XL_NO_JOYSTICK -pragma-redirect:fputc_cons=fputc_cons_generic \ -D__SCREEN_MODE=2 -pragma-define:CRT_ENABLE_COMMANDLINE=0 \ -D__CONIO_GRAPHICS -DXSize=40 -DYSize=24 \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_AGON_SLOWDOWN) \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/udg/udg_init_graphics.c \ $(ASSETS_PATH)/z88dk_xchase.asm \ $(FULL_FILES) \ -o $(BUILD_PATH)/X$(GAME_NAME)_$@ ################################################################# aquarius: aquarius_exp_16k aquarius_exp_16k: $(Z88DK_PATH)$(MYZ88DK) +aquarius $(SCCZ80_OPTS) -clib=ansi $(INCLUDE_OPTS) -vn \ -D__AQUARIUS__ \ -lndos -D_XL_NO_UDG -D_XL_NO_JOYSTICK \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_AQUARIUS_SLOWDOWN) \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS \ $(FULL_FILES) \ -create-app \ -o $(BUILD_PATH)/X$(GAME_NAME)_$@ rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@ aquarius_rom: $(Z88DK_PATH)$(MYZ88DK) +aquarius $(SCCZ80_OPTS) -clib=ansi -subtype=rom $(INCLUDE_OPTS) -vn \ -D__AQUARIUS__ \ -lndos -D_XL_NO_UDG -D_XL_NO_JOYSTICK \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_AQUARIUS_SLOWDOWN) \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS \ $(FULL_FILES) \ -create-app \ -o $(BUILD_PATH)/X$(GAME_NAME)_$@ rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@ rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@_BSS.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@_DATA.bin aquarius_plus_caq: $(ASSETS_PATH)/z88dk_xchase.asm $(Z88DK_PATH)$(MYZ88DK) +aquarius $(SCCZ80_OPTS) -clib=aqplus $(INCLUDE_OPTS) -vn \ -D__AQUARIUS__ --generic-console -D__SCREEN_MODE=1 \ -lndos -D_XL_NO_JOYSTICK -DY_OFFSET=1 -DYSize=23 \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_AQUARIUS_SLOWDOWN) \ -D__CONIO_GRAPHICS \ $(FULL_FILES) \ $(ASSETS_PATH)/z88dk_xchase.asm \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/udg/udg_init_graphics.c \ -create-app \ -o $(BUILD_PATH)/X$(GAME_NAME)_$@ rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@ rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@_BSS.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@_DATA.bin # aqx aquarius_plus: $(ASSETS_PATH)/z88dk_xchase.asm $(Z88DK_PATH)$(MYZ88DK) +aquarius $(SCCZ80_OPTS) -clib=aqplus -subtype=aqx $(INCLUDE_OPTS) -vn \ -D__AQUARIUS__ --generic-console -D__SCREEN_MODE=1 \ -lndos -D_XL_NO_JOYSTICK -DY_OFFSET=1 -DYSize=23 \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_AQUARIUS_SLOWDOWN) \ -D__CONIO_GRAPHICS \ $(FULL_FILES) \ $(ASSETS_PATH)/z88dk_xchase.asm \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/udg/udg_init_graphics.c \ -create-app \ -o $(BUILD_PATH)/X$(GAME_NAME)_$@ rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@ rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@_BSS.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@_DATA.bin aquarius_plus_rom: $(ASSETS_PATH)/z88dk_xchase.asm $(Z88DK_PATH)$(MYZ88DK) +aquarius $(SCCZ80_OPTS) -clib=aqplus -subtype=rom $(INCLUDE_OPTS) -vn \ -D__AQUARIUS__ --generic-console -D__SCREEN_MODE=1 \ -lndos -D_XL_NO_JOYSTICK -DY_OFFSET=1 -DYSize=23 \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_AQUARIUS_SLOWDOWN) \ -D__CONIO_GRAPHICS \ $(FULL_FILES) \ $(ASSETS_PATH)/z88dk_xchase.asm \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/udg/udg_init_graphics.c \ -create-app \ -o $(BUILD_PATH)/X$(GAME_NAME)_$@ rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@ rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@_BSS.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@_DATA.bin aquarius_alt: $(Z88DK_PATH)$(MYZ88DK) +aquarius $(SCCZ80_OPTS) -clib=ansi $(INCLUDE_OPTS) -vn \ -D__AQUARIUS__ \ -lndos -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_AQUARIUS_SLOWDOWN) -D_XL_NO_UDG \ -D__MEMORY_MAPPED_GRAPHICS -D__NO_INIT_GRAPHICS -D_XL_NO_JOYSTICK \ $(FULL_FILES) \ -create-app \ -o $(BUILD_PATH)/X$(GAME_NAME)_$@ rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@ # experimental aquarius_exp_4k: $(Z88DK_PATH)$(MYZ88DK) +aquarius -SO3 -compiler=sdcc -clib=ansi $(INCLUDE_OPTS) -vn \ -pragma-include:$(CFG_PATH)/z88dk/zpragma_clib.inc \ -D__AQUARIUS__ \ -lndos -D_XL_NO_UDG -D_XL_NO_JOYSTICK \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_AQUARIUS_SLOWDOWN) \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS \ $(FULL_FILES) \ -create-app \ -o $(BUILD_PATH)/X$(GAME_NAME)_aquarius_exp_4k rm -rf $(BUILD_PATH)/X$(GAME_NAME)_aquarius_exp_4k # # -D__BIT_BANG_SOUND ################################################################# c128: c128_40col c128_8502_80col: $(ASSETS_PATH)/8x8_chars.h $(CC65_PATH)$(MYCC65) $(INCLUDE_OPTS) -O -t c128 \ -DXSize=80 \ -D__CONIO_GRAPHICS -D__80COL_UDG -D_XL_NO_SMALL_LETTERS \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_C128_8502_80COL_SLOWDOWN) \ $(CROSS_LIB_PATH)/display/init_graphics/cc65/c128/c128_80col_init_graphics.c \ $(CROSS_LIB_PATH)/sound/cc65/sid/sid_sounds.c \ $(FULL_FILES) \ -o $(BUILD_PATH)/X$(GAME_NAME)_$@.prg c128_zsdcc: c128_z80_40col_zsdcc c128_40col_zsdcc: c128_z80_40col_zsdcc c128_40col: c128_z80_40col c128_z80_40col_alt: $(ASSETS_PATH)/z88dk_xchase.asm $(Z88DK_PATH)$(MYZ88DK) +c128 $(SCCZ80_OPTS) \ $(INCLUDE_OPTS) \ -lndos -subtype=disk -clib=gencon \ -D__C128_Z80__ -DXSize=40 \ \ -D__BIT_BANG_SOUND \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_C128_Z80_40COL_SLOWDOWN) \ -D__CONIO_GRAPHICS \ $(FULL_FILES) \ $(ASSETS_PATH)/z88dk_xchase.asm \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/udg/udg_init_graphics.c \ -create-app -o"a40.bin" ifdef USE_TOOLS $(C1541) -format "crosschase,0" d64 FULL_$@.d64 $(C1541) -attach FULL_$@.d64 -write a40.ldr $(C1541) -attach FULL_$@.d64 -write a40 mv FULL_$@.d64 $(BUILD_PATH)/X$(GAME_NAME)_$@.d64 rm a40.bin else mv a40.bin $(BUILD_PATH)/X$(GAME_NAME)_$@.bin endif rm a40.ldr rm a40 c128_z80_40col: $(ASSETS_PATH)/z88dk_xchase.asm $(TOOLS_PATH)/generic/CC1541/cc1541$(COMPILEDEXT) $(Z88DK_PATH)$(MYZ88DK) +c128 $(SCCZ80_OPTS) \ $(INCLUDE_OPTS) \ -lndos -subtype=disk -clib=gencon \ -D__C128_Z80__ -DXSize=40 \ \ -D__BIT_BANG_SOUND \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_C128_Z80_40COL_SLOWDOWN) \ -D__CONIO_GRAPHICS \ $(FULL_FILES) \ $(ASSETS_PATH)/z88dk_xchase.asm \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/udg/udg_init_graphics.c \ -create-app -o"a40.bin" ../tools/generic/CC1541/cc1541 -f a40.ldr -w a40.ldr X$(GAME_NAME)_$@.d64 ../tools/generic/CC1541/cc1541 -f a40 -w a40 X$(GAME_NAME)_$@.d64 mv X$(GAME_NAME)_$@.d64 $(BUILD_PATH)/ rm -rf a40.bin rm -rf a40.ldr rm -rf a40 c128_80col: c128_8502_80col c128_z80_80col_alt: $(ASSETS_PATH)/z88dk_sprites_definitions.h $(Z88DK_PATH)$(MYZ88DK) +c128 $(SCCZ80_OPTS) -lgfx128hr \ $(INCLUDE_OPTS) \ -lndos -subtype=disk \ -D__C128_Z80__ -D__SPRITE_X_STEP=8 -D__SPRITE_Y_STEP=8 -D__NO_SPRITE_TRANSPARENCY \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_C128_Z80_80COL_SLOWDOWN) \ -D__Z88DK_SPRITES_GRAPHICS \ -D__BIT_BANG_SOUND $(C128_Z80_80COL_GAME_OPTS) \ -D__ALT_PRINT \ -D_XL_NO_COLOR \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/c128/c128_init_graphics.c \ $(FULL_FILES) \ -create-app -o"a80.bin" ifdef USE_TOOLS $(C1541) -format "crosschase,0" d64 X$(GAME_NAME)_$@.d64 $(C1541) -attach X$(GAME_NAME)_$@.d64 -write a80.ldr $(C1541) -attach X$(GAME_NAME)_$@.d64 -write a80 mv X$(GAME_NAME)_$@.d64 $(BUILD_PATH)/ rm a80.bin else mv a80.bin $(BUILD_PATH)/X$(GAME_NAME)_$@.bin endif rm a80.ldr rm a80 c128_z80_80col: $(ASSETS_PATH)/z88dk_sprites_definitions.h $(TOOLS_PATH)/generic/CC1541/cc1541$(COMPILEDEXT) $(Z88DK_PATH)$(MYZ88DK) +c128 $(SCCZ80_OPTS) -lgfx128hr \ $(INCLUDE_OPTS) \ -lndos -subtype=disk \ -D__C128_Z80__ -D__SPRITE_X_STEP=8 -D__SPRITE_Y_STEP=8 -D__NO_SPRITE_TRANSPARENCY \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_C128_Z80_80COL_SLOWDOWN) \ -D__Z88DK_SPRITES_GRAPHICS \ -D__BIT_BANG_SOUND $(C128_Z80_80COL_GAME_OPTS) \ -D__ALT_PRINT \ -D_XL_NO_COLOR \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/c128/c128_init_graphics.c \ $(FULL_FILES) \ -create-app -o"a80.bin" ../tools/generic/CC1541/cc1541 -f a80.ldr -w a80.ldr X$(GAME_NAME)_$@.d64 ../tools/generic/CC1541/cc1541 -f a80 -w a80 X$(GAME_NAME)_$@.d64 mv X$(GAME_NAME)_$@.d64 $(BUILD_PATH)/ rm -rf a80.bin rm -rf a80.ldr rm -rf a80 c128_8x6: c128_8x6_80col c128_8x6_80col: c128_z80_8x6_80col c128_z80_8x6_80col: $(ASSETS_PATH)/z88dk_8x6_sprites_definitions.h $(Z88DK_PATH)$(MYZ88DK) +c128 $(SCCZ80_OPTS) -lgfx128hr \ $(INCLUDE_OPTS) \ -lndos -subtype=disk \ -D__C128_Z80__ -D__NO_SPRITE_TRANSPARENCY \ -D__Z88DK_SPRITES_GRAPHICS -D__SPRITE_X_STEP=8 -D__SPRITE_Y_STEP=6 -DSPRITE_Y_SIZE=6 -DYSize=33 \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_C128_Z80_80COL_SLOWDOWN) \ -D__BIT_BANG_SOUND $(C128_Z80_80COL_GAME_OPTS) \ -D__ALT_PRINT \ -D_XL_NO_COLOR \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/c128/c128_init_graphics.c \ $(FULL_FILES) \ -create-app -o"a80.bin" ifdef USE_TOOLS $(C1541) -format "crosschase,0" d64 X$(GAME_NAME)_$@.d64 $(C1541) -attach X$(GAME_NAME)_$@.d64 -write a80.ldr $(C1541) -attach X$(GAME_NAME)_$@.d64 -write a80 mv X$(GAME_NAME)_$@.d64 $(BUILD_PATH)/ rm a80.bin else mv a80.bin $(BUILD_PATH)/X$(GAME_NAME)_$@.bin endif rm a80.ldr rm a80 ################################################################# camputers_lynx: $(ASSETS_PATH)/z88dk_xchase.asm $(Z88DK_PATH)$(MYZ88DK) +lynx $(SCCZ80_OPTS) $(INCLUDE_OPTS) \ -pragma-redirect:fputc_cons=fputc_cons_generic \ -pragma-redirect:getk=getk_inkey \ -D__CAMPUTERS_LYNX__ -D_XL_NO_JOYSTICK -D__BIT_BANG_SOUND \ -vn \ $(CAMPUTERS_LYNX_GAME_OPTS) \ -D__VT52 \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_CAMPUTERS_LYNX_SLOWDOWN) \ -lndos \ -D__CONIO_GRAPHICS \ $(FULL_FILES) \ $(ASSETS_PATH)/z88dk_xchase.asm \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/udg/udg_init_graphics.c \ -create-app -o $(BUILD_PATH)/X$(GAME_NAME)_camputers_lynx.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_camputers_lynx.bin ################################################################# coleco: $(ASSETS_PATH)/z88dk_xchase.asm $(Z88DK_PATH)$(MYZ88DK) +coleco $(SCCZ80_OPTS) $(INCLUDE_OPTS) \ -D__COLECO__ \ \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_COLECO_SLOWDOWN) \ -D__VT52 \ -D__CONIO_GRAPHICS \ -lndos \ \ -clib=default -pragma-redirect:fputc_cons=fputc_cons_generic \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/udg/udg_init_graphics.c \ $(ASSETS_PATH)/z88dk_xchase.asm \ $(FULL_FILES) \ -create-app -o$(BUILD_PATH)/X$(GAME_NAME)_coleco.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_coleco.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_coleco_DATA.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_coleco_BSS.bin ################################################################# gx4000: cpc cpc: cpc_mode0 ifdef USE_TOOLS cpc_mode0: $(ASSETS_PATH)/z88dk_xchase.asm $(TOOLS_PATH)/z88dk/cpc/nocart/nocart$(COMPILEDEXT) else cpc_mode0: $(ASSETS_PATH)/z88dk_xchase.asm endif $(Z88DK_PATH)$(MYZ88DK) +cpc -subtype=dsk $(SCCZ80_OPTS) $(INCLUDE_OPTS) \ -pragma-include:$(CFG_PATH)/z88dk/zpragma_clib.inc \ -DYSize=25 -DXSize=20 -D__SCREEN_MODE=0 \ $(CPC_GAME_OPTS) \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_CPC_MODE0_SLOWDOWN) \ -D__CPC__ \ -lndos -create-app \ -D__CONIO_GRAPHICS \ -pragma-redirect:fputc_cons=fputc_cons_generic \ -o $(BUILD_PATH)/XBIN \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/udg/udg_init_graphics.c \ $(CROSS_LIB_PATH)/sound/z88dk/psg/ay-3-8910_psg_sounds.c \ $(ASSETS_PATH)/z88dk_xchase.asm \ $(FULL_FILES) ifdef USE_TOOLS cp $(TOOLS_PATH)/z88dk/cpc/nocart/*.rom . $(TOOLS_PATH)/z88dk/cpc/nocart/nocart$(COMPILEDEXT) $(BUILD_PATH)/XBIN.dsk $(BUILD_PATH)/XBIN_$@_gx4000.cpr -c 'run"XBIN' rm os.rom rm amsdos.rom rm basic.rom mv $(BUILD_PATH)/XBIN_$@_gx4000.cpr $(BUILD_PATH)/X$(GAME_NAME)_$@_gx4000.cpr endif mv $(BUILD_PATH)/XBIN.dsk $(BUILD_PATH)/X$(GAME_NAME)_$@.dsk rm -rf $(BUILD_PATH)/XBIN.bin rm -rf $(BUILD_PATH)/XBIN.cpc rm -rf $(BUILD_PATH)/XBIN ################################################################# cpm: cpm_z80_adm3a cpm_adm3a: cpm_z80_adm3a cpm_8080: cpm_8080_adm3a cpm_8085: cpm_8085_adm3a cpm_vt52: cpm_z80_vt52 cpm_targets: cpm_adm3a cpm_vt52 cpm_z80_adm3a: $(Z88DK_PATH)$(MYZ88DK) +cpm $(SCCZ80_OPTS) \ $(INCLUDE_OPTS) --generic-console -pragma-define:CONSOLE_COLUMNS=80 -pragma-define:CONSOLE_ROWS=24 -lndos \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_CPM_Z80_SLOWDOWN) \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS -D__NO_SCREEN_COLOR_INIT -D_XL_NO_COLOR \ -create-app -o$(BUILD_PATH)/X$(GAME_NAME)_$@.bin \ $(FULL_FILES) rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.bin cpm_8080_adm3a: $(Z88DK_PATH)$(MYZ88DK) +cpm $(SCCZ80_OPTS) \ $(INCLUDE_OPTS) -clib=8080 --generic-console -pragma-define:CONSOLE_COLUMNS=80 -pragma-define:CONSOLE_ROWS=24 -lndos \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_CPM_Z80_SLOWDOWN) \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS -D__NO_SCREEN_COLOR_INIT -D_XL_NO_COLOR \ -create-app -o$(BUILD_PATH)/X$(GAME_NAME)_$@.bin \ $(FULL_FILES) rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.bin cpm_8085_adm3a: $(Z88DK_PATH)$(MYZ88DK) +cpm $(SCCZ80_OPTS) \ $(INCLUDE_OPTS) -clib=8085 --generic-console -pragma-define:CONSOLE_COLUMNS=80 -pragma-define:CONSOLE_ROWS=24 -lndos \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_CPM_Z80_SLOWDOWN) \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS -D__NO_SCREEN_COLOR_INIT -D_XL_NO_COLOR \ -create-app -o$(BUILD_PATH)/X$(GAME_NAME)_$@.bin \ $(FULL_FILES) rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.bin cpm_z80_vt52: $(Z88DK_PATH)$(MYZ88DK) +cpm $(SCCZ80_OPTS) \ $(INCLUDE_OPTS) \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_CPM_Z80_SLOWDOWN) \ -D__VT52 -DXSize=80 -DYSize=24 \ -D__NO_WAIT -D_XL_NO_COLOR \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS -D__NO_SCREEN_COLOR_INIT \ -create-app -o$(BUILD_PATH)/X$(GAME_NAME)_$@.bin \ $(FULL_FILES) rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.bin cpm_8080_vt52: $(Z88DK_PATH)$(MYZ88DK) +cpm $(SCCZ80_OPTS) -m8080 -clib=8080 \ $(INCLUDE_OPTS) \ -D__VT52 -DXSize=80 -DYSize=24 \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_CPM_INTEL8080_SLOWDOWN) \ -D__NO_WAIT -D_XL_NO_COLOR \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS -D__NO_SCREEN_COLOR_INIT \ -create-app -o$(BUILD_PATH)/X$(GAME_NAME)_$@.bin \ $(FULL_FILES) rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.bin ################################################################# gb: $(ASSETS_PATH)/z88dk_gameboy.asm $(Z88DK_PATH)$(MYZ88DK) +gb $(SCCZ80_ROM_OPTS) $(INCLUDE_OPTS) -pragma-redirect:fputc_cons=fputc_cons_generic \ -D__GB__ \ -DXSize=20 \ -DYSize=18 \ -D__NO_SCREEN_COLOR_INIT \ -D_XL_NO_COLOR \ -D__SCREEN_MODE=1 \ -D__CONIO_GRAPHICS \ -lndos \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_GB_SLOWDOWN) \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/udg/udg_init_graphics.c \ $(ASSETS_PATH)/z88dk_gameboy.asm \ $(FULL_FILES) \ $(CROSS_LIB_PATH)/sound/z88dk/gb/gb_sounds.c \ -create-app -o$(BUILD_PATH)/X$(GAME_NAME)_$@.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@_BSS.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@_DATA.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@_BANK_1F.bin ################################################################# gal: gal_22k gal_22k: $(Z88DK_PATH)$(MYZ88DK) +gal $(SCCZ80_OPTS) \ $(INCLUDE_OPTS) \ -pragma-need=ansiterminal \ -D__GAL__ \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_GAL_SLOWDOWN) \ -vn -lndos -create-app -o $(BUILD_PATH)/X$(GAME_NAME)_galaksija.prg \ $(FULL_FILES) rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.prg gal_plus: gal_plus_gfx gal_plus_gfx: $(ASSETS_PATH)/z88dk_xchase.asm $(Z88DK_PATH)$(MYZ88DK) +gal -subtype=galaxyp $(SCCZ80_OPTS) \ $(INCLUDE_OPTS) \ --generic-console -D__SCREEN_MODE=1 -DYSize=26 \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_GAL_GFX_SLOWDOWN) \ -D__GAL__ -D__GAL_PLUS__ $(GAL_PLUS_GAME_OPTS) \ -D__CONIO_GRAPHICS -D__BIT_BANG_SOUND \ -vn -lndos -create-app -o $(BUILD_PATH)/X$(GAME_NAME)_galaksija_plus.prg \ $(FULL_FILES) $(ASSETS_PATH)/z88dk_xchase.asm \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/udg/udg_init_graphics.c rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.prg ################################################################# gg: gamegear gamegear: $(ASSETS_PATH)/z88dk_xchase.asm $(Z88DK_PATH)$(MYZ88DK) +sms -subtype=gamegear $(SCCZ80_ROM_OPTS) $(INCLUDE_OPTS) -pragma-redirect:fputc_cons=fputc_cons_generic \ -D__SMS__ -D__GAME_GEAR__ \ -DXSize=20 \ -DYSize=18 \ -D__BIT_BANG_SOUND \ -D__CONIO_GRAPHICS \ -lndos \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_GG_SLOWDOWN) \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/udg/udg_init_graphics.c \ $(ASSETS_PATH)/z88dk_xchase.asm \ $(FULL_FILES) \ -create-app -o$(BUILD_PATH)/X$(GAME_NAME)_gamegear.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_gamegear.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_gamegear_BSS.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_gamegear_DATA.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_gamegear_BANK_1F.bin ################################################################# laser500: laser500_keyboard laser500_joy: $(ASSETS_PATH)/z88dk_xchase.asm $(Z88DK_PATH)$(MYZ88DK) +laser500 $(SCCZ80_OPTS) -vn -Cz--audio \ -create-app -o $(BUILD_PATH)/X$(GAME_NAME)_$@.bin \ $(INCLUDE_OPTS) \ -D__LASER500__ -DXSize=40 -DYSize=22 -D__SCREEN_MODE=2 \ -D__BIT_BANG_SOUND \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_LASER500_SLOWDOWN) \ -D__CONIO_GRAPHICS \ -lndos \ $(FULL_FILES) \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/udg/udg_init_graphics.c \ $(ASSETS_PATH)/z88dk_xchase.asm rm $(BUILD_PATH)/X$(GAME_NAME)_$@.cas laser500_keyboard: $(ASSETS_PATH)/z88dk_xchase.asm $(Z88DK_PATH)$(MYZ88DK) +laser500 $(SCCZ80_OPTS) -vn -Cz--audio \ -create-app -o $(BUILD_PATH)/X$(GAME_NAME)_$@.bin \ $(INCLUDE_OPTS) -D_XL_NO_JOYSTICK \ -D__LASER500__ -DXSize=40 -DYSize=22 -D__SCREEN_MODE=2 \ -D__BIT_BANG_SOUND \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_LASER500_SLOWDOWN) \ -D__CONIO_GRAPHICS \ -lndos \ $(FULL_FILES) \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/udg/udg_init_graphics.c \ $(ASSETS_PATH)/z88dk_xchase.asm rm $(BUILD_PATH)/X$(GAME_NAME)_$@.cas ################################################################# # -D__NO_BOTTOM m100: $(Z88DK_PATH)$(MYZ88DK) +m100 $(SCCZ80_OPTS) $(INCLUDE_OPTS) \ -D__M100__ \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_M100_SLOWDOWN) \ -DXSize=39 \ -DYSize=8 \ -D__NO_SCREEN_COLOR_INIT \ -D_XL_NO_COLOR \ -D_XL_NO_JOYSTICK -D_XL_NO_UDG \ -D__VT52 \ -D__CONIO_GRAPHICS \ -lndos \ -D__NO_INIT_GRAPHICS \ $(FULL_FILES) \ -create-app -o$(BUILD_PATH)/X$(GAME_NAME)_$@.bin rm $(BUILD_PATH)/X$(GAME_NAME)_$@.bin m10: $(Z88DK_PATH)$(MYZ88DK) +m100 $(SCCZ80_OPTS) $(INCLUDE_OPTS) \ -D__M100__ -clib m10 \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_M100_SLOWDOWN) \ -DXSize=39 \ -DYSize=8 \ -D__NO_SCREEN_COLOR_INIT \ -D_XL_NO_COLOR \ -D_XL_NO_JOYSTICK -D_XL_NO_UDG \ -D__VT52 \ -D__CONIO_GRAPHICS \ -lndos \ -D__NO_INIT_GRAPHICS \ $(FULL_FILES) \ -create-app -o$(BUILD_PATH)/X$(GAME_NAME)_$@.bin rm $(BUILD_PATH)/X$(GAME_NAME)_$@.bin kc85: $(Z88DK_PATH)$(MYZ88DK) +m100 $(SCCZ80_OPTS) $(INCLUDE_OPTS) \ -D__M100__ -clib kc85 \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_M100_SLOWDOWN) \ -DXSize=39 \ -DYSize=8 \ -D__NO_SCREEN_COLOR_INIT \ -D_XL_NO_COLOR \ -D_XL_NO_JOYSTICK -D_XL_NO_UDG \ -D__VT52 \ -D__CONIO_GRAPHICS \ -lndos \ -D__NO_INIT_GRAPHICS \ $(FULL_FILES) \ -create-app -o$(BUILD_PATH)/X$(GAME_NAME)_$@.bin rm $(BUILD_PATH)/X$(GAME_NAME)_$@.bin pc8201: $(Z88DK_PATH)$(MYZ88DK) +m100 $(SCCZ80_OPTS) $(INCLUDE_OPTS) \ -D__M100__ -clib pc8201 \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_M100_SLOWDOWN) \ -DXSize=39 \ -DYSize=8 \ -D__NO_SCREEN_COLOR_INIT \ -D_XL_NO_COLOR \ -D_XL_NO_JOYSTICK -D_XL_NO_UDG \ -D__VT52 \ -D__CONIO_GRAPHICS \ -lndos \ -D__NO_INIT_GRAPHICS \ $(FULL_FILES) \ -create-app -o$(BUILD_PATH)/X$(GAME_NAME)_$@.bin rm $(BUILD_PATH)/X$(GAME_NAME)_$@.bin t200: $(Z88DK_PATH)$(MYZ88DK) +m100 $(SCCZ80_OPTS) $(INCLUDE_OPTS) \ -D__M100__ -clib t200 \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_M100_SLOWDOWN) \ -DXSize=39 \ -DYSize=16 \ -D__NO_SCREEN_COLOR_INIT \ -D_XL_NO_COLOR \ -D_XL_NO_JOYSTICK -D_XL_NO_UDG \ -D__VT52 \ -D__CONIO_GRAPHICS \ -lndos \ -D__NO_INIT_GRAPHICS \ $(FULL_FILES) \ -create-app -o$(BUILD_PATH)/X$(GAME_NAME)_$@.bin rm $(BUILD_PATH)/X$(GAME_NAME)_$@.bin mc1000_mono: $(ASSETS_PATH)/z88dk_xchase.asm $(Z88DK_PATH)$(MYZ88DK) +mc1000 $(SCCZ80_OPTS) $(INCLUDE_OPTS) -pragma-define:REGISTER_SP=0x3fff \ -subtype=gaming \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_MC1000_SLOWDOWN) \ -D__SCREEN_MODE=1 \ -D__MC1000__ -D_XL_NO_JOYSTICK \ -D__CONIO_GRAPHICS \ -vn -lndos -Cz--audio \ -create-app -o $(BUILD_PATH)/X$(GAME_NAME)_$@.bin \ -clib=default -pragma-redirect:fputc_cons=fputc_cons_generic \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/udg/udg_init_graphics.c \ $(ASSETS_PATH)/z88dk_xchase.asm \ $(FULL_FILES) rm $(BUILD_PATH)/X$(GAME_NAME)_$@.bin rm $(BUILD_PATH)/X$(GAME_NAME)_$@.cas mc1000_color: mc1000 # background color white mc1000: $(ASSETS_PATH)/z88dk_xchase.asm $(Z88DK_PATH)$(MYZ88DK) +mc1000 $(SCCZ80_OPTS) $(INCLUDE_OPTS) -pragma-define:REGISTER_SP=0x3fff \ -subtype=gaming \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_MC1000_SLOWDOWN) \ -D__SCREEN_MODE=2 -DXSize=16 -D__NO_SCREEN_COLOR_INIT \ -D__MC1000__ -D_XL_NO_JOYSTICK \ -D__CONIO_GRAPHICS \ -vn -lndos -Cz--audio \ -create-app -o $(BUILD_PATH)/X$(GAME_NAME)_$@.bin \ -clib=default -pragma-redirect:fputc_cons=fputc_cons_generic \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/udg/udg_init_graphics.c \ $(ASSETS_PATH)/z88dk_xchase.asm \ $(FULL_FILES) rm $(BUILD_PATH)/X$(GAME_NAME)_$@.bin rm $(BUILD_PATH)/X$(GAME_NAME)_$@.cas ################################################################# msx: msx_16k msx_16k: $(ASSETS_PATH)/z88dk_xchase.asm $(Z88DK_PATH)$(MYZ88DK) +msx $(SCCZ80_OPTS) $(INCLUDE_OPTS) \ -pragma-redirect:fputc_cons=fputc_cons_generic \ -vn -D__MSX__ \ -lndos -subtype=rom \ -create-app -o $(BUILD_PATH)/X$(GAME_NAME)_$@.rom \ -D__CONIO_GRAPHICS -DXSize=32 -DYSize=24 \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_MSX_SLOWDOWN) \ $(ASSETS_PATH)/z88dk_xchase.asm \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/udg/udg_init_graphics.c \ $(CROSS_LIB_PATH)/sound/z88dk/psg/ay-3-8910_psg_sounds.c \ $(FULL_FILES) rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@_BSS.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@_DATA.bin # TODO: BROKEN with only green # msx2_color: msx2_mode6 msx2: msx2_color # msx2_color: $(ASSETS_PATH)/z88dk_xchase.asm # $(Z88DK_PATH)$(MYZ88DK) +msx -lmsx2 $(SCCZ80_OPTS) $(INCLUDE_OPTS) \ # -pragma-redirect:fputc_cons=fputc_cons_generic \ # $(CROSS_LIB_PATH)/display/init_graphics/z88dk/udg/msx2_palette.asm \ # -vn -D__MSX__ -D__SCREEN_MODE=6 -D__MSX2_COLOR -pragma-define:CLIB_CONIO_NATIVE_COLOUR=1 \ # -lndos -subtype=rom \ # -create-app -o $(BUILD_PATH)/X$(GAME_NAME)_$@.rom \ # -D__CONIO_GRAPHICS -DXSize=64 -DYSize=24 \ # -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_MSX_SLOWDOWN)*4 \ # $(ASSETS_PATH)/z88dk_xchase.asm \ # $(CROSS_LIB_PATH)/display/init_graphics/z88dk/udg/udg_init_graphics.c \ # $(CROSS_LIB_PATH)/sound/z88dk/psg/ay-3-8910_psg_sounds.c \ # $(FULL_FILES) # rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@_BSS.bin # rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@_DATA.bin msx2_mono: $(ASSETS_PATH)/z88dk_xchase.asm $(Z88DK_PATH)$(MYZ88DK) +msx -lmsx2 $(SCCZ80_OPTS) $(INCLUDE_OPTS) \ -pragma-redirect:fputc_cons=fputc_cons_generic -D_XL_NO_COLOR \ -vn -D__MSX__ -D__SCREEN_MODE=6 \ -lndos -subtype=rom \ -create-app -o $(BUILD_PATH)/X$(GAME_NAME)_$@.rom \ -D__CONIO_GRAPHICS -DXSize=64 -DYSize=24 \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_MSX_SLOWDOWN)*4 \ $(ASSETS_PATH)/z88dk_xchase.asm \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/udg/udg_init_graphics.c \ $(CROSS_LIB_PATH)/sound/z88dk/psg/ay-3-8910_psg_sounds.c \ $(FULL_FILES) rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@_BSS.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@_DATA.bin msx2_color: msx2_mode7 msx2_mode7: $(ASSETS_PATH)/z88dk_xchase.asm $(Z88DK_PATH)$(MYZ88DK) +msx -lmsx2 $(SCCZ80_OPTS) $(INCLUDE_OPTS) \ -pragma-redirect:fputc_cons=fputc_cons_generic \ -vn -D__MSX__ -D__SCREEN_MODE=7 \ -lndos -subtype=rom \ -create-app -o $(BUILD_PATH)/X$(GAME_NAME)_$@.rom \ -D__CONIO_GRAPHICS -DXSize=64 -DYSize=24 \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_MSX_SLOWDOWN)*4 \ $(ASSETS_PATH)/z88dk_xchase.asm \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/udg/udg_init_graphics.c \ $(CROSS_LIB_PATH)/sound/z88dk/psg/ay-3-8910_psg_sounds.c \ $(FULL_FILES) rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@_BSS.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@_DATA.bin msx2_mode6: $(ASSETS_PATH)/z88dk_xchase.asm $(Z88DK_PATH)$(MYZ88DK) +msx -lmsx2 $(SCCZ80_OPTS) $(INCLUDE_OPTS) \ -pragma-redirect:fputc_cons=fputc_cons_generic \ -vn -D__MSX__ -D__SCREEN_MODE=6 \ -lndos -subtype=rom \ -create-app -o $(BUILD_PATH)/X$(GAME_NAME)_$@.rom \ -D__CONIO_GRAPHICS -DXSize=64 -DYSize=24 \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_MSX_SLOWDOWN)*4 \ $(ASSETS_PATH)/z88dk_xchase.asm \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/udg/udg_init_graphics.c \ $(CROSS_LIB_PATH)/sound/z88dk/psg/ay-3-8910_psg_sounds.c \ $(FULL_FILES) rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@_BSS.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@_DATA.bin msx2_mode7: $(ASSETS_PATH)/z88dk_xchase.asm $(Z88DK_PATH)$(MYZ88DK) +msx -lmsx2 $(SCCZ80_OPTS) $(INCLUDE_OPTS) \ -pragma-redirect:fputc_cons=fputc_cons_generic \ -vn -D__MSX__ -D__SCREEN_MODE=7 \ -lndos -subtype=rom \ -create-app -o $(BUILD_PATH)/X$(GAME_NAME)_$@.rom \ -D__CONIO_GRAPHICS -DXSize=64 -DYSize=24 \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_MSX_SLOWDOWN)*4 \ $(ASSETS_PATH)/z88dk_xchase.asm \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/udg/udg_init_graphics.c \ $(CROSS_LIB_PATH)/sound/z88dk/psg/ay-3-8910_psg_sounds.c \ $(FULL_FILES) rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@_BSS.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@_DATA.bin ################################################################# interact: $(Z88DK_PATH)$(MYZ88DK) +hector $(SCCZ80_OPTS) $(INCLUDE_OPTS) \ -vn -D__INTERACT__ -D_XL_NO_SOUND -D_XL_NO_JOYSTICK $(HECTOR1_GAME_OPTS) \ -pragma-include:$(CFG_PATH)/z88dk/zpragma_clib.inc -pragma-define:CRT_ORG_CODE=0x4B00 \ -DXSize=28 -DYSize=9 -m8080 $(HECTOR1_GAME_OPTS) \ -pragma-redirect:fputc_cons=fputc_cons_generic \ -lndos -pragma-redirect:CRT_FONT_64=_font_4x8_default \ -create-app -o $(BUILD_PATH)/X$(GAME_NAME)_$@.bin \ -D__CONIO_GRAPHICS -D_XL_NO_UDG -D__NO_INIT_GRAPHICS \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_HECTOR1_SLOWDOWN) \ $(FULL_FILES) hector1: $(Z88DK_PATH)$(MYZ88DK) +hector $(SCCZ80_OPTS) $(INCLUDE_OPTS) \ -vn -D__HECTOR__ -D_XL_NO_SOUND -D_XL_NO_JOYSTICK $(HECTOR1_GAME_OPTS) \ -pragma-include:$(CFG_PATH)/z88dk/zpragma_clib.inc -pragma-define:CRT_ORG_CODE=0x4B00 \ -pragma-redirect:fputc_cons=fputc_cons_generic \ -DXSize=28 -DYSize=9 $(HECTOR1_GAME_OPTS) \ -lndos -pragma-redirect:CRT_FONT_64=_font_4x8_default \ -create-app -o $(BUILD_PATH)/X$(GAME_NAME)_$@.bin \ -D__CONIO_GRAPHICS -D_XL_NO_UDG -D__NO_INIT_GRAPHICS \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_HECTOR1_SLOWDOWN) \ $(FULL_FILES) interact_mono: $(Z88DK_PATH)$(MYZ88DK) +hector $(SCCZ80_OPTS) $(INCLUDE_OPTS) \ -vn -D__INTERACT__ -D_XL_NO_SOUND -D_XL_NO_JOYSTICK $(HECTOR1_GAME_OPTS) \ -pragma-include:$(CFG_PATH)/z88dk/zpragma_clib.inc -pragma-define:CRT_ORG_CODE=0x4B00 \ -DXSize=28 -DYSize=9 -m8080 -D_XL_NO_COLOR $(HECTOR1_GAME_OPTS) \ -pragma-redirect:fputc_cons=fputc_cons_generic \ -lndos -pragma-redirect:CRT_FONT_64=_font_4x8_default \ -create-app -o $(BUILD_PATH)/X$(GAME_NAME)_$@.bin \ -D__CONIO_GRAPHICS -D_XL_NO_UDG -D__NO_INIT_GRAPHICS \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_HECTOR1_SLOWDOWN) \ $(FULL_FILES) hector1_mono: $(Z88DK_PATH)$(MYZ88DK) +hector $(SCCZ80_OPTS) $(INCLUDE_OPTS) \ -vn -D__HECTOR__ -D_XL_NO_SOUND -D_XL_NO_JOYSTICK $(HECTOR1_GAME_OPTS) \ -pragma-include:$(CFG_PATH)/z88dk/zpragma_clib.inc -pragma-define:CRT_ORG_CODE=0x4B00 \ -pragma-redirect:fputc_cons=fputc_cons_generic -D_XL_NO_COLOR $(HECTOR1_GAME_OPTS) \ -DXSize=28 -DYSize=9 \ -lndos -pragma-redirect:CRT_FONT_64=_font_4x8_default \ -create-app -o $(BUILD_PATH)/X$(GAME_NAME)_$@.bin \ -D__CONIO_GRAPHICS -D_XL_NO_UDG -D__NO_INIT_GRAPHICS \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_HECTOR1_SLOWDOWN) \ $(FULL_FILES) # -D__PATCH_HECTORHR_COLORS hectorhr: $(ASSETS_PATH)/z88dk_xchase.asm $(Z88DK_PATH)$(MYZ88DK) +hector -clib=hectorhr $(SCCZ80_OPTS) $(INCLUDE_OPTS) \ -pragma-redirect:fputc_cons=fputc_cons_generic \ -vn -D__HECTORHR__ -D_XL_NO_SOUND $(4COLOR_PALETTE) \ -lndos -pragma-define:CLIB_CONIO_NATIVE_COLOUR=1 \ -create-app -o $(BUILD_PATH)/X$(GAME_NAME)_$@.bin \ -D__CONIO_GRAPHICS -DXSize=30 -DYSize=28 \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_HECTORHR_SLOWDOWN) \ $(ASSETS_PATH)/z88dk_xchase.asm \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/udg/udg_init_graphics.c \ $(FULL_FILES) ################################################################# mtx: mtx512 # $(CROSS_LIB_PATH)/sound/z88dk/psg/sn76489a_psg_sounds.c # -D__PSG_SOUND mtx512: $(ASSETS_PATH)/z88dk_xchase.asm $(Z88DK_PATH)$(MYZ88DK) +mtx $(SCCZ80_OPTS) -clib=ansi -startup=2 $(INCLUDE_OPTS) \ -D__MTX__ -D__SCREEN_MODE=2 \ -create-app -o$(BUILD_PATH)/X$(GAME_NAME)_$@.bin -vn \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_MTX512_SLOWDOWN) \ -D__CONIO_GRAPHICS \ -lndos \ -clib=default -pragma-redirect:fputc_cons=fputc_cons_generic \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/udg/udg_init_graphics.c \ $(ASSETS_PATH)/z88dk_xchase.asm \ $(FULL_FILES) rm $(BUILD_PATH)/X$(GAME_NAME)_$@.bin mtx500: $(ASSETS_PATH)/z88dk_xchase.asm $(Z88DK_PATH)$(MYZ88DK) +mtx $(SCCZ80_OPTS) $(INCLUDE_OPTS) \ -D__MTX__ \ -create-app -o$(BUILD_PATH)/X$(GAME_NAME)_$@.bin -vn \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_MTX500_SLOWDOWN) \ -D__CONIO_GRAPHICS \ -lndos \ -clib=default -pragma-redirect:fputc_cons=fputc_cons_generic \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/udg/udg_init_graphics.c \ $(ASSETS_PATH)/z88dk_xchase.asm \ $(FULL_FILES) rm $(BUILD_PATH)/X$(GAME_NAME)_$@.bin ################################################################# mz: $(Z88DK_PATH)$(MYZ88DK) +mz $(SCCZ80_OPTS) $(INCLUDE_OPTS) \ -D__MZ__ -clib=ansi -pragma-define:ansicolumns=32 -Cz--audio -vn \ -D_XL_NO_UDG \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_MZ_SLOWDOWN) \ -pragma-define:REGISTER_SP=0xd000 \ -lndos -create-app -o $(BUILD_PATH)/X$(GAME_NAME)_mz.prg \ $(FULL_FILES) rm -rf $(BUILD_PATH)/X$(GAME_NAME)_mz.prg mv $(BUILD_PATH)/X$(GAME_NAME)_mz.mzt $(BUILD_PATH)/X$(GAME_NAME)_mz.mzf ################################################################# nabu_no_gfx: $(Z88DK_PATH)$(MYZ88DK) +nabu $(SCCZ80_OPTS) $(INCLUDE_OPTS) \ -D__NABU__ \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_M100_SLOWDOWN) \ -DXSize=32 \ -DYSize=24 \ -D__NO_SCREEN_COLOR_INIT \ -D_XL_NO_COLOR \ -D_XL_NO_JOYSTICK -D_XL_NO_UDG \ -D__VT52 \ -D__CONIO_GRAPHICS \ -lndos \ -D__NO_INIT_GRAPHICS \ $(FULL_FILES) \ -create-app -o$(BUILD_PATH)/X$(GAME_NAME)_$@.bin rm $(BUILD_PATH)/X$(GAME_NAME)_$@.bin nabu: $(ASSETS_PATH)/z88dk_xchase.asm $(Z88DK_PATH)$(MYZ88DK) +nabu $(SCCZ80_OPTS) -Cz--audio $(INCLUDE_OPTS) -vn \ -D__NABU__ \ -lndos -DXSize=32 -DYSize=24 -D_XL_NO_JOYSTICK \ -clib=default -pragma-redirect:fputc_cons=fputc_cons_generic \ -D__CONIO_GRAPHICS -D_XL_NO_SOUND -D__DEFAULT_CLEAR_SCREEN \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_M100_SLOWDOWN) \ $(FULL_FILES) \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/udg/udg_init_graphics.c \ $(ASSETS_PATH)/z88dk_xchase.asm \ -create-app -o$(BUILD_PATH)/X$(GAME_NAME)_$@.bin rm $(BUILD_PATH)/X$(GAME_NAME)_$@.bin ################################################################# pc88: $(ASSETS_PATH)/z88dk_xchase.asm $(Z88DK_PATH)$(MYZ88DK) +pc88 $(SCCZ80_OPTS) $(INCLUDE_OPTS) -vn \ -D__PC88__ -subtype=disk \ -lndos -DXSize=80 -DYSize=25 -D_XL_NO_JOYSTICK \ -clib=default -pragma-redirect:fputc_cons=fputc_cons_generic \ -D__CONIO_GRAPHICS -D__BIT_BANG_SOUND -D__DEFAULT_CLEAR_SCREEN \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_PC88_SLOWDOWN) \ $(FULL_FILES) \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/udg/udg_init_graphics.c \ $(ASSETS_PATH)/z88dk_xchase.asm \ -create-app \ -o $(BUILD_PATH)/X$(GAME_NAME)_$@ rm $(BUILD_PATH)/X$(GAME_NAME)_$@ # mv FULL_pc88.d88 $(BUILD_PATH)/X$(GAME_NAME)_$@.d88 rm $(BUILD_PATH)/X$(GAME_NAME)_$@_BOOTSTRAP.bin $(Z88DK_PATH)$(MYZ88DK) +pc88 $(SCCZ80_OPTS) -Cz--audio $(INCLUDE_OPTS) -vn \ -D__PC88__ \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_PC88_SLOWDOWN) \ -lndos -DXSize=80 -DYSize=25 \ -clib=default -pragma-redirect:fputc_cons=fputc_cons_generic \ -D__CONIO_GRAPHICS -D__BIT_BANG_SOUND -D__DEFAULT_CLEAR_SCREEN \ $(FULL_FILES) \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/udg/udg_init_graphics.c \ $(ASSETS_PATH)/z88dk_xchase.asm \ -create-app \ -o FULL_$@ rm FULL_$@ mv FULL_$@.wav $(BUILD_PATH)/X$(GAME_NAME)_$@.wav mv FULL_$@.t88 $(BUILD_PATH)/X$(GAME_NAME)_$@.t88 ################################################################# samcoupe: sam sam: $(ASSETS_PATH)/z88dk_xchase.asm $(Z88DK_PATH)$(MYZ88DK) +sam $(SCCZ80_OPTS) $(INCLUDE_OPTS) -create-app \ -D__SAM__ -D_XL_NO_JOYSTICK \ -D__CONIO_GRAPHICS \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_SAMCOUPE_SLOWDOWN) \ -clib=ansi -pragma-define:ansicolumns=32 -vn \ -D__BIT_BANG_SOUND -o $(BUILD_PATH)/FULL_samcoupe_$(GAME_NAME).bin -lndos \ $(FULL_FILES) \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/udg/udg_init_graphics.c \ $(ASSETS_PATH)/z88dk_xchase.asm rm $(BUILD_PATH)/FULL_samcoupe_$(GAME_NAME).bin mv $(BUILD_PATH)/FULL_samcoupe_$(GAME_NAME).mgt $(BUILD_PATH)/X$(GAME_NAME)_$@.mgt ################################################################# ############################# # SC3000 sc3000: sc3000_32k sc3000_32k: $(ASSETS_PATH)/z88dk_xchase.asm $(Z88DK_PATH)$(MYZ88DK) +sc3000 $(SCCZ80_OPTS) \ $(INCLUDE_OPTS) \ -D__SC3000__ \ \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_SC3000_SLOWDOWN) \ -D__BIT_BANG_SOUND \ \ -DZ88DK_JOYSTICK \ -D__CONIO_GRAPHICS \ -vn -lndos -create-app -Cz--audio \ -pragma-define:CRT_ORG_BSS=0x8000 \ -pragma-define:REGISTER_SP=0xFFFF \ -clib=default -pragma-redirect:fputc_cons=fputc_cons_generic \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/udg/udg_init_graphics.c \ $(ASSETS_PATH)/z88dk_xchase.asm \ -o $(BUILD_PATH)/X$(GAME_NAME)_$@.prg \ $(FULL_FILES) rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.prg rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.tap sc3000_rom: $(ASSETS_PATH)/z88dk_xchase.asm $(Z88DK_PATH)$(MYZ88DK) +sc3000 $(SCCZ80_ROM_OPTS) -subtype=rom \ $(INCLUDE_OPTS) \ -D__SC3000__ \ -DZ88DK_JOYSTICK \ -pragma-define:REGISTER_SP=0xC7FF \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_SC3000_SLOWDOWN) \ -D__BIT_BANG_SOUND \ -D__CONIO_GRAPHICS \ -vn -lndos -create-app \ -clib=default -pragma-redirect:fputc_cons=fputc_cons_generic \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/udg/udg_init_graphics.c \ $(ASSETS_PATH)/z88dk_xchase.asm \ -o $(BUILD_PATH)/X$(GAME_NAME)_$@.prg \ $(FULL_FILES) rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.prg rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@_BSS.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@_DATA.bin ############################# # SG1000 sg1000: $(ASSETS_PATH)/z88dk_xchase.asm $(Z88DK_PATH)$(MYZ88DK) +sc3000 $(SCCZ80_ROM_OPTS) -subtype=rom \ $(INCLUDE_OPTS) -pragma-define:REGISTER_SP=0xC7FF \ -D__SC3000__ \ -DZ88DK_JOYSTICK \ -DGHOSTS_NUMBER=6 -DBULLETS_NUMBER=3 \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_SC3000_SLOWDOWN) \ -D__BIT_BANG_SOUND \ \ -D__CONIO_GRAPHICS \ -vn -lndos -create-app \ \ \ -clib=default -pragma-redirect:fputc_cons=fputc_cons_generic \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/udg/udg_init_graphics.c \ $(ASSETS_PATH)/z88dk_xchase.asm \ -o $(BUILD_PATH)/X$(GAME_NAME)_$@.prg \ $(FULL_FILES) rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.prg rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@_BSS.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@_DATA.bin ################################################################# sms: $(ASSETS_PATH)/z88dk_xchase.asm $(Z88DK_PATH)$(MYZ88DK) +sms $(SCCZ80_ROM_OPTS) $(INCLUDE_OPTS) -pragma-redirect:fputc_cons=fputc_cons_generic \ -D__SMS__ \ -DXSize=32 \ -DYSize=24 \ -D__BIT_BANG_SOUND \ -D__CONIO_GRAPHICS \ -lndos \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_SMS_SLOWDOWN) \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/udg/udg_init_graphics.c \ $(ASSETS_PATH)/z88dk_xchase.asm \ $(FULL_FILES) \ -create-app -o$(BUILD_PATH)/X$(GAME_NAME)_sms.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_sms.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_sms_BSS.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_sms_DATA.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_sms_BANK_1F.bin ################################################################# zx : spectrum spectrum_48k : spectrum spectrum: spectrum_48k_keyboard spectrum_keyboard: spectrum_48k_keyboard spectrum_48k_joystick: $(ASSETS_PATH)/z88dk_xchase.asm $(Z88DK_PATH)$(MYZ88DK) +zx $(SCCZ80_OPTS) $(INCLUDE_OPTS) \ -pragma-include:$(CFG_PATH)/z88dk/zpragma_clib.inc \ -pragma-redirect:getk=getk_inkey \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_SPECTRUM_SLOWDOWN) \ -D__SPECTRUM__ \ -lndos -create-app \ -D__CONIO_GRAPHICS \ -pragma-redirect:fputc_cons=fputc_cons_generic \ -o $(BUILD_PATH)/X$(GAME_NAME)_$@.prg \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/udg/udg_init_graphics.c \ $(ASSETS_PATH)/z88dk_xchase.asm \ $(FULL_FILES) rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.prg rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@_BANK_7.bin spectrum_48k_keyboard: $(ASSETS_PATH)/z88dk_xchase.asm $(Z88DK_PATH)$(MYZ88DK) +zx $(SCCZ80_OPTS) $(INCLUDE_OPTS) \ -pragma-include:$(CFG_PATH)/z88dk/zpragma_clib.inc \ -pragma-redirect:getk=getk_inkey \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_SPECTRUM_SLOWDOWN) \ -D__SPECTRUM__ -D_XL_NO_JOYSTICK \ -lndos -create-app \ -D__CONIO_GRAPHICS \ -pragma-redirect:fputc_cons=fputc_cons_generic \ -o $(BUILD_PATH)/X$(GAME_NAME)_$@.prg \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/udg/udg_init_graphics.c \ $(ASSETS_PATH)/z88dk_xchase.asm \ $(FULL_FILES) rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.prg rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@_BANK_7.bin spectrum_128k: spectrum_128k_keyboard spectrum_128k_keyboard: $(ASSETS_PATH)/z88dk_xchase.asm $(Z88DK_PATH)$(MYZ88DK) +zx $(SCCZ80_OPTS) $(INCLUDE_OPTS) \ -pragma-include:$(CFG_PATH)/z88dk/zpragma_clib.inc \ -pragma-redirect:getk=getk_inkey \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_SPECTRUM_SLOWDOWN) \ -D__SPECTRUM__ -D_XL_NO_JOYSTICK -D__PSG_SOUND \ -lndos -create-app \ -D__CONIO_GRAPHICS \ -pragma-redirect:fputc_cons=fputc_cons_generic \ $(CROSS_LIB_PATH)/sound/z88dk/psg/ay-3-8910_psg_sounds.c \ -o $(BUILD_PATH)/X$(GAME_NAME)_$@.prg \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/udg/udg_init_graphics.c \ $(ASSETS_PATH)/z88dk_xchase.asm \ $(FULL_FILES) rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.prg rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@_BANK_7.bin ################################################################# trs80_gfx: $(ASSETS_PATH)/z88dk_sprites_definitions.h $(Z88DK_PATH)$(MYZ88DK) +trs80 $(SCCZ80_OPTS) -lndos -subtype=disk \ $(INCLUDE_OPTS) \ -pragma-redirect:getk=getk_inkey \ -pragma-define:REGISTER_SP=0xffb5 \ -D__TRS80__ \ -D_XL_NO_JOYSTICK \ -vn -lndos \ -D__ALT_PRINT -D__BIT_BANG_SOUND \ \ -D__Z88DK_SPRITES_GRAPHICS -D__NO_INIT_GRAPHICS \ \ -DLESS_TEXT \ -create-app \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_TRS80_SLOWDOWN) \ -o$(BUILD_PATH)/X$(GAME_NAME)_$@S.bin \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c \ $(FULL_FILES) rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.bin trs80: $(Z88DK_PATH)$(MYZ88DK) +trs80 $(SCCZ80_OPTS) -lndos -subtype=disk \ $(INCLUDE_OPTS) \ -lm -create-app \ -D__TRS80__ \ -D_XL_NO_JOYSTICK -D_XL_NO_UDG \ -pragma-redirect:getk=getk_inkey \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_TRS80_SLOWDOWN) \ -D__VT52 \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS -D__BIT_BANG_SOUND \ -o$(BUILD_PATH)/X$(GAME_NAME)_$@.bin \ $(FULL_FILES) rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.bin trs80_model2: trs80_model2_lifeboat trs80_model2_lifeboat: $(Z88DK_PATH)$(MYZ88DK) +cpm $(SCCZ80_OPTS) -lndos -subtype=lifeboat -lgfxtrs80m2 \ $(INCLUDE_OPTS) --generic-console \ -lm -create-app \ -DXSize=80 -DYSize=24 \ -D__TRS80__ \ -D_XL_NO_JOYSTICK -D_XL_NO_UDG \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_TRS80_SLOWDOWN) \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS -D__BIT_BANG_SOUND \ -o$(BUILD_PATH)/X$(GAME_NAME)_$@.bin \ $(FULL_FILES) rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.bin trs80_model2_ptcpm: $(Z88DK_PATH)$(MYZ88DK) +cpm $(SCCZ80_OPTS) -lndos -subtype=ptcpm \ $(INCLUDE_OPTS) \ -lm -create-app \ -D__TRS80__ \ -D_XL_NO_JOYSTICK -D_XL_NO_UDG \ -pragma-redirect:getk=getk_inkey \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_TRS80_SLOWDOWN) \ --generic-console \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS -D__BIT_BANG_SOUND \ -o$(BUILD_PATH)/X$(GAME_NAME)_$@.bin \ $(FULL_FILES) rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.bin trs80_model2_fmgcpm: $(Z88DK_PATH)$(MYZ88DK) +cpm $(SCCZ80_OPTS) -lndos -subtype=fmgcpm \ $(INCLUDE_OPTS) \ -lm -create-app \ -D__TRS80__ \ -D_XL_NO_JOYSTICK -D_XL_NO_UDG \ -pragma-redirect:getk=getk_inkey \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_TRS80_SLOWDOWN) \ --generic-console \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS -D__BIT_BANG_SOUND \ -o$(BUILD_PATH)/X$(GAME_NAME)_$@.bin \ $(FULL_FILES) rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.bin ################################################################# vg5k: $(ASSETS_PATH)/z88dk_xchase.asm $(Z88DK_PATH)$(MYZ88DK) +vg5k $(SCCZ80_OPTS) \ $(INCLUDE_OPTS) \ -vn -D__VG5K__ \ -D__CONIO_GRAPHICS \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_VG5K_SLOWDOWN) \ -clib=default --generic-console \ -D_XL_NO_JOYSTICK \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/udg/udg_init_graphics.c \ $(ASSETS_PATH)/z88dk_xchase.asm \ $(FULL_FILES) \ -lndos -create-app -o $(BUILD_PATH)/X$(GAME_NAME)_vg5k.prg rm -rf $(BUILD_PATH)/X$(GAME_NAME)_vg5k.prg ################################################################# vz200_no_gfx: vz200_no_gfx_24k vz_no_gfx: vz200_no_gfx_24k vz200_no_gfx_24k: $(Z88DK_PATH)$(MYZ88DK) +vz $(SCCZ80_OPTS) -vn \ --hardware-keyboard --generic-console -D__HARDWARE_KEYBOARD \ $(INCLUDE_OPTS) -D__TARGET_SPECIFIC_ASCII \ -D__VZ__ -D_XL_NO_JOYSTICK \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_VZ200_SLOWDOWN) \ -D__CONIO_GRAPHICS -D_XL_NO_UDG \ -lndos \ -create-app -o $(BUILD_PATH)/X$(GAME_NAME)_$@.vz \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/vz200/vz200_init_graphics.c \ $(FULL_FILES) rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.cas vz200: vz200_24k vz: vz200_24k vz200_24k: $(ASSETS_PATH)/z88dk_xchase.asm $(Z88DK_PATH)$(MYZ88DK) +vz $(SCCZ80_OPTS) -vn \ --hardware-keyboard --generic-console -D__HARDWARE_KEYBOARD \ $(INCLUDE_OPTS) -D__TARGET_SPECIFIC_ASCII \ -D__VZ__ -D_XL_NO_JOYSTICK \ -DXSize=16 -DYSize=8 \ -D__SCREEN_MODE=1 \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_VZ200_SLOWDOWN) \ -D__CONIO_GRAPHICS \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/udg/udg_init_graphics.c \ $(ASSETS_PATH)/z88dk_xchase.asm \ -lndos \ -create-app -o $(BUILD_PATH)/X$(GAME_NAME)_$@.vz \ $(FULL_FILES) rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.cas vz200_target_specific: $(Z88DK_PATH)$(MYZ88DK) +vz $(SCCZ80_OPTS) -vn \ --hardware-keyboard --generic-console -D__HARDWARE_KEYBOARD \ $(INCLUDE_OPTS) -D__TARGET_SPECIFIC_ASCII -D_XL_NO_JOYSTICK \ -D__VZ__ -D_XL_NO_COLOR -D__ALT_PRINT \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_VZ200_SLOWDOWN) \ -D__MEMORY_MAPPED_GRAPHICS -D_XL_NO_UDG \ -lndos \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c \ -create-app -o $(BUILD_PATH)/X$(GAME_NAME)_$@.vz \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/vz200/vz200_init_graphics.c \ $(FULL_FILES) rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.cas ################################################################# zx81_no_gfx: zx81_no_gfx_16k # -pragma-define:ZX_CHAR_XLATE_MODE=1 zx81_no_gfx_16k: $(Z88DK_PATH)$(MYZ88DK) +zx81 $(SCCZ80_OPTS) \ $(INCLUDE_OPTS) \ --opt-code-size -pragma-define:ZX_CHAR_XLATE_MODE=1 \ -vn -D__TARGET_SPECIFIC_ASCII \ -D__ZX81__ \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_ZX81_SLOWDOWN) $(ZX81_NO_GFX_GAME_OPTS) \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS -D_XL_NO_JOYSTICK \ -lndos \ -create-app -o $(BUILD_PATH)/X$(GAME_NAME)_$@.prg \ $(FULL_FILES) rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.prg zx81: zx81_no_gfx zx81_wrx: zx81_32k_wrx zx81_16k_wrx: $(ASSETS_PATH)/z88dk_sprites_definitions.h $(Z88DK_PATH)$(MYZ88DK) +zx81 $(SCCZ80_OPTS) -subtype=wrx -clib=wrx \ $(INCLUDE_OPTS) \ -pragma-include:$(CFG_PATH)/z88dk/zpragma_clib_no_printf.inc \ -D__NO_SPRITE_TRANSPARENCY \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_ZX81_WRX_SLOWDOWN) $(ZX81_GFX_GAME_OPTS) \ -DXSize=32 \ -DYSize=22 \ -vn \ -D__ZX81__ \ -D__Z88DK_SPRITES_GRAPHICS -D__SPRITE_X_STEP=8 -D__SPRITE_Y_STEP=8 \ -lndos \ -D_XL_NO_COLOR \ -D__NO_SCREEN_COLOR_INIT -D_XL_NO_JOYSTICK \ -D__ALT_PRINT \ -D__FEWER_SPRITES \ -create-app -o $(BUILD_PATH)/X$(GAME_NAME)_$@.prg \ $(FULL_FILES) \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/zx81/zx81_init_graphics.c \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.prg zx81_32k_wrx: $(ASSETS_PATH)/z88dk_sprites_definitions.h $(Z88DK_PATH)$(MYZ88DK) +zx81 $(SCCZ80_OPTS) -subtype=wrx -clib=wrx \ $(INCLUDE_OPTS) \ -pragma-include:$(CFG_PATH)/z88dk/zpragma_clib_no_printf.inc \ -pragma-define:hrgpage=36096 \ -D__NO_SPRITE_TRANSPARENCY \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_ZX81_WRX_SLOWDOWN) $(ZX81_GFX_GAME_OPTS) \ -DXSize=32 \ -DYSize=22 \ -vn \ -D__ZX81__ \ -D__Z88DK_SPRITES_GRAPHICS -D__SPRITE_X_STEP=8 -D__SPRITE_Y_STEP=8 \ -lndos \ -D_XL_NO_COLOR \ -D__NO_SCREEN_COLOR_INIT -D_XL_NO_JOYSTICK \ -D__ALT_PRINT \ -D__FEWER_SPRITES \ -create-app -o $(BUILD_PATH)/X$(GAME_NAME)_$@.prg \ $(FULL_FILES) \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/zx81/zx81_init_graphics.c \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.prg zx81_8x6: zx81_8x6_wrx zx81_8x6_wrx: zx81_32k_8x6_wrx zx81_16k_8x6_wrx: $(ASSETS_PATH)/z88dk_8x6_sprites_definitions.h $(Z88DK_PATH)$(MYZ88DK) +zx81 $(SCCZ80_OPTS) -subtype=wrx -clib=wrx \ $(INCLUDE_OPTS) \ -pragma-include:$(CFG_PATH)/z88dk/zpragma_clib_no_printf.inc \ -D__NO_SPRITE_TRANSPARENCY \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_ZX81_8X6_WRX_SLOWDOWN) $(ZX81_GFX_GAME_OPTS) \ -DXSize=32 \ -DYSize=32 \ -vn \ -D__ZX81__ \ -D__Z88DK_SPRITES_GRAPHICS -D__SPRITE_X_STEP=8 -D__SPRITE_Y_STEP=6 -DSPRITE_Y_SIZE=6 \ -lndos \ -D_XL_NO_COLOR \ -D__NO_SCREEN_COLOR_INIT -D_XL_NO_JOYSTICK \ -D__ALT_PRINT \ -D__FEWER_SPRITES \ -create-app -o $(BUILD_PATH)/X$(GAME_NAME)_$@.prg \ $(FULL_FILES) \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/zx81/zx81_init_graphics.c \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.prg zx81_32k_8x6_wrx: $(ASSETS_PATH)/z88dk_8x6_sprites_definitions.h $(Z88DK_PATH)$(MYZ88DK) +zx81 $(SCCZ80_OPTS) -subtype=wrx -clib=wrx \ $(INCLUDE_OPTS) \ -pragma-include:$(CFG_PATH)/z88dk/zpragma_clib_no_printf.inc \ -pragma-define:hrgpage=36096 \ -D__NO_SPRITE_TRANSPARENCY \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_ZX81_8X6_WRX_SLOWDOWN) $(ZX81_GFX_GAME_OPTS) \ -DXSize=32 \ -DYSize=32 \ -vn \ -D__ZX81__ \ -D__Z88DK_SPRITES_GRAPHICS -D__SPRITE_X_STEP=8 -D__SPRITE_Y_STEP=6 -DSPRITE_Y_SIZE=6 \ -lndos \ -D_XL_NO_COLOR \ -D__NO_SCREEN_COLOR_INIT -D_XL_NO_JOYSTICK \ -D__ALT_PRINT \ -D__FEWER_SPRITES \ -create-app -o $(BUILD_PATH)/X$(GAME_NAME)_$@.prg \ $(FULL_FILES) \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/zx81/zx81_init_graphics.c \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.prg zx81_wrx64: zx81_32k_wrx64 zx81_16k_wrx64: $(ASSETS_PATH)/z88dk_sprites_definitions.h $(Z88DK_PATH)$(MYZ88DK) +zx81 $(SCCZ80_OPTS) -subtype=wrx64 -clib=wrx \ $(INCLUDE_OPTS) \ -pragma-include:$(CFG_PATH)/z88dk/zpragma_clib_no_printf.inc \ -D__NO_SPRITE_TRANSPARENCY \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_ZX81_WRX64_SLOWDOWN) $(ZX81_GFX_GAME_OPTS) \ -DXSize=32 \ -DYSize=8 \ -vn \ -D__ZX81__ \ -D__Z88DK_SPRITES_GRAPHICS -D__SPRITE_X_STEP=8 -D__SPRITE_Y_STEP=8 \ -lndos \ -D_XL_NO_COLOR \ -D__NO_SCREEN_COLOR_INIT -D_XL_NO_JOYSTICK \ -D__ALT_PRINT \ -D__FEWER_SPRITES \ -create-app -o $(BUILD_PATH)/X$(GAME_NAME)_$@.prg \ $(FULL_FILES) \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/zx81/zx81_init_graphics.c \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.prg zx81_32k_wrx64: $(ASSETS_PATH)/z88dk_sprites_definitions.h $(Z88DK_PATH)$(MYZ88DK) +zx81 $(SCCZ80_OPTS) -subtype=wrx64 -clib=wrx \ $(INCLUDE_OPTS) \ -pragma-include:$(CFG_PATH)/z88dk/zpragma_clib_no_printf.inc \ -pragma-define:hrgpage=36096 \ -D__NO_SPRITE_TRANSPARENCY \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_ZX81_WRX64_SLOWDOWN) $(ZX81_GFX_GAME_OPTS) \ -DXSize=32 \ -DYSize=8 \ -vn \ -D__ZX81__ \ -D__Z88DK_SPRITES_GRAPHICS -D__SPRITE_X_STEP=8 -D__SPRITE_Y_STEP=8 \ -lndos \ -D_XL_NO_COLOR \ -D__NO_SCREEN_COLOR_INIT -D_XL_NO_JOYSTICK \ -D__ALT_PRINT \ -D__FEWER_SPRITES \ -create-app -o $(BUILD_PATH)/X$(GAME_NAME)_$@.prg \ $(FULL_FILES) \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/zx81/zx81_init_graphics.c \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.prg zx81_wrx128: zx81_32k_wrx128 zx81_16k_wrx128: $(ASSETS_PATH)/z88dk_sprites_definitions.h $(Z88DK_PATH)$(MYZ88DK) +zx81 $(SCCZ80_OPTS) -subtype=wrx128 -clib=wrx \ $(INCLUDE_OPTS) \ -pragma-include:$(CFG_PATH)/z88dk/zpragma_clib_no_printf.inc \ -D__NO_SPRITE_TRANSPARENCY \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_ZX81_WRX128_SLOWDOWN) $(ZX81_GFX_GAME_OPTS) \ -DXSize=32 \ -DYSize=16 \ -vn \ -D__ZX81__ \ -D__Z88DK_SPRITES_GRAPHICS -D__SPRITE_X_STEP=8 -D__SPRITE_Y_STEP=8 \ -lndos \ -D_XL_NO_COLOR \ -D__NO_SCREEN_COLOR_INIT -D_XL_NO_JOYSTICK \ -D__ALT_PRINT \ -D__FEWER_SPRITES \ -create-app -o $(BUILD_PATH)/X$(GAME_NAME)_$@.prg \ $(FULL_FILES) \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/zx81/zx81_init_graphics.c \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.prg zx81_32k_wrx128: $(ASSETS_PATH)/z88dk_sprites_definitions.h $(Z88DK_PATH)$(MYZ88DK) +zx81 $(SCCZ80_OPTS) -subtype=wrx128 -clib=wrx \ $(INCLUDE_OPTS) \ -pragma-include:$(CFG_PATH)/z88dk/zpragma_clib_no_printf.inc \ -pragma-define:hrgpage=36096 \ -D__NO_SPRITE_TRANSPARENCY \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_ZX81_WRX128_SLOWDOWN) $(ZX81_GFX_GAME_OPTS) \ -DXSize=32 \ -DYSize=16 \ -vn \ -D__ZX81__ \ -D__Z88DK_SPRITES_GRAPHICS -D__SPRITE_X_STEP=8 -D__SPRITE_Y_STEP=8 \ -lndos \ -D_XL_NO_COLOR \ -D__NO_SCREEN_COLOR_INIT -D_XL_NO_JOYSTICK \ -D__ALT_PRINT \ -D__FEWER_SPRITES \ -create-app -o $(BUILD_PATH)/X$(GAME_NAME)_$@.prg \ $(FULL_FILES) \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/zx81/zx81_init_graphics.c \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.prg zx81_8x6_wrx128: zx81_32k_8x6_wrx128 zx81_16k_8x6_wrx128: $(ASSETS_PATH)/z88dk_8x6_sprites_definitions.h $(Z88DK_PATH)$(MYZ88DK) +zx81 $(SCCZ80_OPTS) -subtype=wrx -clib=wrx128 \ $(INCLUDE_OPTS) \ -pragma-include:$(CFG_PATH)/z88dk/zpragma_clib_no_printf.inc \ -D__NO_SPRITE_TRANSPARENCY \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_ZX81_8X6_WRX128_SLOWDOWN) $(ZX81_GFX_GAME_OPTS) \ -DXSize=32 \ -DYSize=21 \ -vn \ -D__ZX81__ \ -D__Z88DK_SPRITES_GRAPHICS -D__SPRITE_X_STEP=8 -D__SPRITE_Y_STEP=6 -DSPRITE_Y_SIZE=6 \ -lndos \ -D_XL_NO_COLOR \ -D__NO_SCREEN_COLOR_INIT -D_XL_NO_JOYSTICK \ -D__ALT_PRINT \ -D__FEWER_SPRITES \ -create-app -o $(BUILD_PATH)/X$(GAME_NAME)_$@.prg \ $(FULL_FILES) \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/zx81/zx81_init_graphics.c \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.prg zx81_32k_8x6_wrx128: $(ASSETS_PATH)/z88dk_8x6_sprites_definitions.h $(Z88DK_PATH)$(MYZ88DK) +zx81 $(SCCZ80_OPTS) -subtype=wrx -clib=wrx128 \ $(INCLUDE_OPTS) \ -pragma-include:$(CFG_PATH)/z88dk/zpragma_clib_no_printf.inc \ -pragma-define:hrgpage=36096 \ -D__NO_SPRITE_TRANSPARENCY \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_ZX81_8X6_WRX128_SLOWDOWN) $(ZX81_GFX_GAME_OPTS) \ -DXSize=32 \ -DYSize=21 \ -vn \ -D__ZX81__ \ -D__Z88DK_SPRITES_GRAPHICS -D__SPRITE_X_STEP=8 -D__SPRITE_Y_STEP=6 -DSPRITE_Y_SIZE=6 \ -lndos \ -D_XL_NO_COLOR \ -D__NO_SCREEN_COLOR_INIT -D_XL_NO_JOYSTICK \ -D__ALT_PRINT \ -D__FEWER_SPRITES \ -create-app -o $(BUILD_PATH)/X$(GAME_NAME)_$@.prg \ $(FULL_FILES) \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/zx81/zx81_init_graphics.c \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.prg zx81_8x6_wrx64: zx81_32k_8x6_wrx64 zx81_16k_8x6_wrx64: $(ASSETS_PATH)/z88dk_8x6_sprites_definitions.h $(Z88DK_PATH)$(MYZ88DK) +zx81 $(SCCZ80_OPTS) -subtype=wrx -clib=wrx64 \ $(INCLUDE_OPTS) \ -pragma-include:$(CFG_PATH)/z88dk/zpragma_clib_no_printf.inc \ -D__NO_SPRITE_TRANSPARENCY \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_ZX81_8X6_WRX64_SLOWDOWN) $(ZX81_GFX_GAME_OPTS) \ -DXSize=32 \ -DYSize=11 \ -vn \ -D__ZX81__ \ -D__Z88DK_SPRITES_GRAPHICS -D__SPRITE_X_STEP=8 -D__SPRITE_Y_STEP=6 -DSPRITE_Y_SIZE=6 \ -lndos \ -D_XL_NO_COLOR \ -D__NO_SCREEN_COLOR_INIT -D_XL_NO_JOYSTICK \ -D__ALT_PRINT \ -D__FEWER_SPRITES \ -create-app -o $(BUILD_PATH)/X$(GAME_NAME)_$@.prg \ $(FULL_FILES) \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/zx81/zx81_init_graphics.c \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.prg zx81_32k_8x6_wrx64: $(ASSETS_PATH)/z88dk_8x6_sprites_definitions.h $(Z88DK_PATH)$(MYZ88DK) +zx81 $(SCCZ80_OPTS) -subtype=wrx -clib=wrx64 \ $(INCLUDE_OPTS) \ -pragma-include:$(CFG_PATH)/z88dk/zpragma_clib_no_printf.inc \ -pragma-define:hrgpage=36096 \ -D__NO_SPRITE_TRANSPARENCY \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_ZX81_8X6_WRX64_SLOWDOWN) $(ZX81_GFX_GAME_OPTS) \ -DXSize=32 \ -DYSize=11 \ -vn \ -D__ZX81__ \ -D__Z88DK_SPRITES_GRAPHICS -D__SPRITE_X_STEP=8 -D__SPRITE_Y_STEP=6 -DSPRITE_Y_SIZE=6 \ -lndos \ -D_XL_NO_COLOR \ -D__NO_SCREEN_COLOR_INIT -D_XL_NO_JOYSTICK \ -D__ALT_PRINT \ -D__FEWER_SPRITES \ -create-app -o $(BUILD_PATH)/X$(GAME_NAME)_$@.prg \ $(FULL_FILES) \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/zx81/zx81_init_graphics.c \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.prg ################################################################# z1013: $(Z88DK_PATH)$(MYZ88DK) +z1013 $(SCCZ80_OPTS) $(INCLUDE_OPTS) -clib=ansi \ -vn -lndos \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_Z1013_SLOWDOWN) \ -D__Z1013__ \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS -D_XL_NO_JOYSTICK -D_XL_NO_UDG \ $(FULL_FILES) \ -create-app -o $(BUILD_PATH)/X$(GAME_NAME)_$@ rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@ z1013_krt: $(ASSETS_PATH)/z88dk_xchase.asm $(Z88DK_PATH)$(MYZ88DK) +z1013 $(SCCZ80_OPTS) $(INCLUDE_OPTS) --generic-console \ -vn -lndos \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_Z1013_SLOWDOWN) \ -D__Z1013__ -D__SCREEN_MODE=1 \ -D__CONIO_GRAPHICS -D_XL_NO_JOYSTICK \ $(FULL_FILES) \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/udg/udg_init_graphics.c \ $(ASSETS_PATH)/z88dk_xchase.asm \ -create-app -o $(BUILD_PATH)/X$(GAME_NAME)_$@ rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@ ############################# # Z9001 # --generic-console z9001_krt: $(ASSETS_PATH)/z88dk_xchase.asm $(Z88DK_PATH)$(MYZ88DK) +z9001 $(SCCZ80_OPTS) $(INCLUDE_OPTS) \ -D__Z9001__ -vn -D__SCREEN_MODE=1 -D_XL_NO_JOYSTICK \ -D__CONIO_GRAPHICS -D__BIT_BANG_SOUND --generic-console \ -lndos -create-app -o $(BUILD_PATH)/X$(GAME_NAME)_$@.z80 \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_Z9001_SLOWDOWN) \ $(FULL_FILES) \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/udg/udg_init_graphics.c \ $(ASSETS_PATH)/z88dk_xchase.asm z9001: $(Z88DK_PATH)$(MYZ88DK) +z9001 $(SCCZ80_OPTS) $(INCLUDE_OPTS) \ -D__Z9001__ -vn -D__SCREEN_MODE=1 -D_XL_NO_JOYSTICK \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_Z9001_SLOWDOWN) \ -D__CONIO_GRAPHICS -D_XL_NO_UDG -D__NO_INIT_GRAPHICS -D__BIT_BANG_SOUND --generic-console \ -lndos -create-app -o $(BUILD_PATH)/X$(GAME_NAME)_$@.z80 \ $(FULL_FILES) \ $(ASSETS_PATH)/z88dk_xchase.asm ############################# # KC kc: $(ASSETS_PATH)/z88dk_xchase.asm $(Z88DK_PATH)$(MYZ88DK) +kc $(SCCZ80_OPTS) -subtype=tap $(INCLUDE_OPTS) \ -D__KC__ \ -D__VT52 \ -D__CONIO_GRAPHICS -D_XL_NO_JOYSTICK \ -lndos \ -clib=default -pragma-redirect:fputc_cons=fputc_cons_generic \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_KC_SLOWDOWN) \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/udg/udg_init_graphics.c \ $(ASSETS_PATH)/z88dk_xchase.asm \ $(FULL_FILES) \ -create-app -o$(BUILD_PATH)/X$(GAME_NAME)_kc.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_kc.bin ################################################################# # CMOC ################################################################# CMOC_NO_UDG_OPTS ?= $(CMOC_MAKEFILE_COMPILATION_OPTS) -Wno-const -D__ALT_SLEEP -D__DEFAULT_CLEAR_SCREEN -D__CMOC__ NO_UDG_OPS ?= $(CMOC_NO_UDG_OPTS) -D__MEMORY_MAPPED_GRAPHICS -D__NO_INIT_GRAPHICS -D_XL_NO_UDG -D__ALT_PRINT -D_XL_SLOW_DOWN_FACTOR=4000 COCO_OPTS ?= -D__COCO__ $(NO_UDG_OPS) -D_XL_NO_COLOR -D_XL_NO_JOYSTICK DRAGON_OPTS ?= --dragon -D__COCO__ $(NO_UDG_OPS) -D_XL_NO_COLOR -D_XL_NO_JOYSTICK COCO_COMPILE_OPTS ?= $(COCO_OPTS) DRAGON_COMPILE_OPTS ?= $(DRAGON_OPTS) DRAGON_GFX_OPTS ?= --dragon -D__DRAGON__ $(GFX_OPTS) -D_XL_NO_JOYSTICK DRAGON_GFX_COMPILE_OPTS ?= $(DRAGON_GFX_OPTS) CMOC_OPTS ?= $(CMOC_MAKEFILE_COMPILATION_OPTS) -Wno-const -D__ALT_SLEEP -D__DEFAULT_CLEAR_SCREEN -D__CMOC__ GFX_OPTS ?= $(CMOC_OPTS) -D__BIT_MAPPED_GRAPHICS -D__ALT_PRINT -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_COCO_SLOWDOWN) COCO_GFX_OPTS ?= -D__COCO__ $(GFX_OPTS) -D_XL_NO_COLOR -D_XL_NO_JOYSTICK COCO_GFX_COMPILE_OPTS ?= $(COCO_GFX_OPTS) # ? BACKGROUND_COLOR white GFX_COLOR_OPTS ?= $(CMOC_OPTS) -D_XL_NO_JOYSTICK -D__BIT_MAPPED_GRAPHICS -D__ALT_PRINT COCO_COLOR_GFX_OPTS ?= -D__COCO__ $(GFX_COLOR_OPTS) -D__BIT_MAPPED_4_GRAPHICS $(COCO_COLOR_GFX_GAME_OPTS) -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_COCO_SLOWDOWN) COCO_COLOR_GFX_COMPILE_OPTS ?= $(COCO_COLOR_GFX_OPTS) COCO3_COLOR_GFX_OPTS ?= -D__COCO3__ $(GFX_COLOR_OPTS) -D__BIT_MAPPED_16_GRAPHICS $(COCO3_COLOR_GFX_GAME_OPTS) -DXSize=32 -DYSize=24 -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_COCO3_SLOWDOWN) COCO3_COLOR_GFX_COMPILE_OPTS ?= $(COCO3_COLOR_GFX_OPTS) THOMSON_OPTS ?= $(CMOC_MAKEFILE_COMPILATION_OPTS) -D__ALT_SLEEP -Wno-const -D__CMOC__ -D__BIT_MAPPED_GRAPHICS -D__ALT_PRINT MO5_OPTS ?= $(THOMSON_OPTS) -DXSize=39 -D_XL_NO_JOYSTICK -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_MO5_SLOWDOWN) -D__MO5__ TO7_OPTS ?= $(THOMSON_OPTS) -DXSize=39 -D_XL_NO_JOYSTICK -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_TO7_SLOWDOWN) -D__TO7__ TO7_ORG_DATA ?= --org=a000 ############################################################################################# dragon: coco dragon_mono: coco_mono ifdef USE_TOOLS coco_mono: $(ASSETS_PATH)/cmoc_udc_tiles_and_fonts.s $(TOOLS_PATH)/cmoc/coco/file2dsk/file2dsk$(COMPILEDEXT) else coco_mono: $(ASSETS_PATH)/cmoc_udc_tiles_and_fonts.s endif $(CMOC) \ $(COCO_GFX_COMPILE_OPTS) $(INCLUDE_OPTS) \ -c $(CROSS_LIB_PATH)/sound/generic/dac_sounds.c $(CMOC) \ $(COCO_GFX_COMPILE_OPTS) $(INCLUDE_OPTS) \ -c $(CROSS_LIB_PATH)/display/display_macros.c $(CMOC) \ $(COCO_GFX_COMPILE_OPTS) $(INCLUDE_OPTS) \ -c $(CROSS_LIB_PATH)/display/init_graphics/cmoc/coco/coco_init_graphics.c $(CMOC) \ $(COCO_GFX_COMPILE_OPTS) $(INCLUDE_OPTS) \ -c $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c $(CMOC) \ $(COCO_GFX_COMPILE_OPTS) $(INCLUDE_OPTS) \ -c $(ASSETS_PATH)/cmoc_udc_tiles_and_fonts.s $(CMOC) \ $(COCO_GFX_COMPILE_OPTS) $(INCLUDE_OPTS) \ -c $(CROSS_LIB_PATH)/sleep/sleep_macros.c $(CMOC) \ $(COCO_GFX_COMPILE_OPTS) $(INCLUDE_OPTS) \ -c $(CROSS_LIB_PATH)/input/input_macros.c $(CMOC) \ $(COCO_GFX_COMPILE_OPTS) $(INCLUDE_OPTS) \ -c $(SOURCE_PATH)/main.c $(CMOC) -o $(BUILD_PATH)/XBIN.BIN \ $(COCO_GFX_OPTS) $(INCLUDE_OPTS) \ main.o coco_init_graphics.o \ display_macros.o dac_sounds.o \ memory_mapped_alt_print.o sleep_macros.o \ cmoc_udc_tiles_and_fonts.o \ input_macros.o rm main.o dac_sounds.o coco_init_graphics.o display_macros.o sleep_macros.o \ cmoc_udc_tiles_and_fonts.o \ memory_mapped_alt_print.o \ input_macros.o ifdef USE_TOOLS mv $(BUILD_PATH)/XBIN.BIN XBIN.BIN rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.dsk $(TOOLS_PATH)/cmoc/coco/file2dsk/file2dsk$(COMPILEDEXT) XBIN.BIN mv XBIN.DSK $(BUILD_PATH)/X$(GAME_NAME)_$@.dsk $(TOOLS_PATH)/cmoc/dragon/bin2cas.pl -o $(BUILD_PATH)/X$(GAME_NAME)_coco_dragon_mono.cas -C XBIN.BIN -A else mv $(BUILD_PATH)/XBIN.BIN $(BUILD_PATH)/X$(GAME_NAME)_$@_dragon.bin endif ifeq ($(DO_WIN),1) ifdef USE_TOOLS $(TOOLS_PATH)/cmoc/dragon/File2VDK.exe $(BUILD_PATH)/XBIN.BIN mv $(BUILD_PATH)/XBIN.BIN.vdk $(BUILD_PATH)/X$(GAME_NAME)_dragon_mono.vdk endif endif rm -rf $(BUILD_PATH)/XBIN.BIN rm -rf XBIN.BIN rm -rf A80 rm -rf A80.LDR coco_targets: \ coco coco_mono coco3 coco_color: coco dragon_color: dragon ifdef USE_TOOLS coco: $(ASSETS_PATH)/cmoc_udc_tiles_and_fonts.s $(TOOLS_PATH)/cmoc/coco/file2dsk/file2dsk$(COMPILEDEXT) else coco: $(ASSETS_PATH)/cmoc_udc_tiles_and_fonts.s endif $(CMOC) \ $(COCO_COLOR_GFX_COMPILE_OPTS) $(INCLUDE_OPTS) \ -c $(CROSS_LIB_PATH)/sound/generic/dac_sounds.c $(CMOC) \ $(COCO_COLOR_GFX_COMPILE_OPTS) $(INCLUDE_OPTS) \ -c $(CROSS_LIB_PATH)/display/display_macros.c $(CMOC) \ $(COCO_COLOR_GFX_COMPILE_OPTS) $(INCLUDE_OPTS) \ -c $(CROSS_LIB_PATH)/display/init_graphics/cmoc/coco/coco_init_graphics.c $(CMOC) \ $(COCO_COLOR_GFX_COMPILE_OPTS) $(INCLUDE_OPTS) \ -c $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c $(CMOC) \ $(COCO_COLOR_GFX_COMPILE_OPTS) $(INCLUDE_OPTS) \ -c $(ASSETS_PATH)/cmoc_udc_tiles_and_fonts.s $(CMOC) \ $(COCO_COLOR_GFX_COMPILE_OPTS) $(INCLUDE_OPTS) \ -c $(CROSS_LIB_PATH)/sleep/sleep_macros.c $(CMOC) \ $(COCO_COLOR_GFX_COMPILE_OPTS) $(INCLUDE_OPTS) \ -c $(CROSS_LIB_PATH)/input/input_macros.c $(CMOC) \ $(COCO_COLOR_GFX_COMPILE_OPTS) $(INCLUDE_OPTS) \ -c $(SOURCE_PATH)/main.c $(CMOC) -o $(BUILD_PATH)/XBIN.BIN \ $(COCO_COLOR_GFX_COMPILE_OPTS) $(INCLUDE_OPTS) \ main.o coco_init_graphics.o \ display_macros.o dac_sounds.o \ memory_mapped_alt_print.o sleep_macros.o \ cmoc_udc_tiles_and_fonts.o \ input_macros.o rm main.o dac_sounds.o coco_init_graphics.o display_macros.o sleep_macros.o \ cmoc_udc_tiles_and_fonts.o \ memory_mapped_alt_print.o \ input_macros.o ifdef USE_TOOLS mv $(BUILD_PATH)/XBIN.BIN XBIN.BIN rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.dsk $(TOOLS_PATH)/cmoc/coco/file2dsk/file2dsk$(COMPILEDEXT) XBIN.BIN mv XBIN.DSK $(BUILD_PATH)/X$(GAME_NAME)_$@.dsk $(TOOLS_PATH)/cmoc/dragon/bin2cas.pl -o $(BUILD_PATH)/X$(GAME_NAME)_coco_dragon.cas -C XBIN.BIN -A else mv $(BUILD_PATH)/XBIN.BIN $(BUILD_PATH)/X$(GAME_NAME)_$@_dragon.bin endif ifeq ($(DO_WIN),1) ifdef USE_TOOLS $(TOOLS_PATH)/cmoc/dragon/File2VDK.exe $(BUILD_PATH)/XBIN.BIN mv $(BUILD_PATH)/XBIN.BIN.vdk $(BUILD_PATH)/X$(GAME_NAME)_dragon.vdk endif endif rm -rf $(BUILD_PATH)/XBIN.BIN rm -rf XBIN.BIN rm -rf A80 rm -rf A80.LDR # coco3: coco3_gfx coco3: $(ASSETS_PATH)/cmoc_udc_tiles_and_fonts.s $(TOOLS_PATH)/cmoc/coco/file2dsk/file2dsk$(COMPILEDEXT) $(CMOC) \ $(COCO3_COLOR_GFX_OPTS) $(INCLUDE_OPTS) \ -c $(CROSS_LIB_PATH)/sound/generic/dac_sounds.c $(CMOC) \ $(COCO3_COLOR_GFX_OPTS) $(INCLUDE_OPTS) \ -c $(ASSETS_PATH)/cmoc_udc_tiles_and_fonts.s $(CMOC) \ $(COCO3_COLOR_GFX_OPTS) $(INCLUDE_OPTS) \ -c $(CROSS_LIB_PATH)/display/display_macros.c $(CMOC) \ $(COCO3_COLOR_GFX_OPTS) $(INCLUDE_OPTS) \ -c $(CROSS_LIB_PATH)/display/init_graphics/cmoc/coco3/coco3_init_graphics.c $(CMOC) \ $(COCO3_COLOR_GFX_OPTS) $(INCLUDE_OPTS) \ -c $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c $(CMOC) \ $(COCO3_COLOR_GFX_OPTS) $(INCLUDE_OPTS) \ -c $(CROSS_LIB_PATH)/input/input_macros.c $(CMOC) \ $(COCO3_COLOR_GFX_OPTS) $(INCLUDE_OPTS) \ -c $(CROSS_LIB_PATH)/sleep/sleep_macros.c $(CMOC) -o $(BUILD_PATH)/xbin.bin \ $(COCO3_COLOR_GFX_OPTS) $(INCLUDE_OPTS) \ $(SOURCE_PATH)/main.c \ display_macros.o dac_sounds.o sleep_macros.o \ coco3_init_graphics.o \ memory_mapped_alt_print.o \ input_macros.o cmoc_udc_tiles_and_fonts.o rm -rf \ display_macros.o dac_sounds.o sleep_macros.o \ coco3_init_graphics.o \ memory_mapped_alt_print.o \ input_macros.o cmoc_udc_tiles_and_fonts.o ifdef USE_TOOLS mv $(BUILD_PATH)/xbin.bin XBIN.BIN rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.dsk $(TOOLS_PATH)/cmoc/coco/file2dsk/file2dsk$(COMPILEDEXT) XBIN.BIN mv XBIN.DSK $(BUILD_PATH)/X$(GAME_NAME)_$@.dsk $(TOOLS_PATH)/cmoc/dragon/bin2cas.pl -o $(BUILD_PATH)/X$(GAME_NAME)_$@.cas -C XBIN.BIN -A rm XBIN.BIN else mv $(BUILD_PATH)/xbin.bin $(BUILD_PATH)/X$(GAME_NAME)_$@_dragon.bin endif coco3_targets: \ coco3_gfx ######################################## ifdef USE_TOOLS mo5: $(ASSETS_PATH)/cmoc_udc_tiles.s $(TOOLS_PATH)/cmoc/mo5/f2k5$(COMPILEDEXT) $(TOOLS_PATH)/cmoc/mo5/sapfs$(COMPILEDEXT) else mo5: $(ASSETS_PATH)/cmoc_udc_tiles.s endif $(CMOC) \ $(MO5_OPTS) $(INCLUDE_OPTS) \ -c $(CROSS_LIB_PATH)/sound/generic/dac_sounds.c $(CMOC) \ $(MO5_OPTS) $(INCLUDE_OPTS) \ -c $(CROSS_LIB_PATH)/display/alt_print/mo5_alt_print.c $(CMOC) \ $(MO5_OPTS) $(INCLUDE_OPTS) \ -c $(CROSS_LIB_PATH)/sleep/sleep_macros.c $(CMOC) \ $(MO5_OPTS) $(INCLUDE_OPTS) \ -c $(CROSS_LIB_PATH)/display/init_graphics/cmoc/mo5/mo5_init_graphics.c $(CMOC) \ $(MO5_OPTS) $(INCLUDE_OPTS) \ -c $(CROSS_LIB_PATH)/display/display_macros.c $(CMOC) \ $(MO5_OPTS) $(INCLUDE_OPTS) \ -c $(CROSS_LIB_PATH)/input/input_macros.c $(CMOC) \ $(MO5_OPTS) $(INCLUDE_OPTS) \ -c $(ASSETS_PATH)/cmoc_udc_tiles.s $(CMOC) -o $(BUILD_PATH)/FULL_MO5.bin \ $(MO5_OPTS) $(INCLUDE_OPTS) \ $(SOURCE_PATH)/main.c \ mo5_alt_print.o dac_sounds.o \ mo5_init_graphics.o \ display_macros.o \ cmoc_udc_tiles.o \ sleep_macros.o \ input_macros.o rm \ mo5_alt_print.o dac_sounds.o \ cmoc_udc_tiles.o \ mo5_init_graphics.o \ display_macros.o \ \ input_macros.o sleep_macros.o ifdef USE_TOOLS $(TOOLS_PATH)/cmoc/mo5/f2k5$(COMPILEDEXT) $(BUILD_PATH)/FULL_MO5.bin mv $(BUILD_PATH)/FULL_MO5.bin . $(TOOLS_PATH)/cmoc/mo5/sapfs$(COMPILEDEXT) -c X$(GAME_NAME)_MO5.sap $(TOOLS_PATH)/cmoc/mo5/sapfs$(COMPILEDEXT) --add X$(GAME_NAME)_MO5.sap FULL_MO5.bin mv ./X$(GAME_NAME)_MO5.sap $(BUILD_PATH) mv ./FILE.K5 $(BUILD_PATH)/X$(GAME_NAME)_MO5.k5 rm ./FULL_MO5.bin else mv $(BUILD_PATH)/FULL_MO5.bin $(BUILD_PATH)/X$(GAME_NAME)_MO5.bin endif mo5_targets: \ mo5 ifdef USE_TOOLS to7: $(ASSETS_PATH)/cmoc_udc_tiles.s $(TOOLS_PATH)/cmoc/mo5/sapfs$(COMPILEDEXT) else to7: $(ASSETS_PATH)/cmoc_udc_tiles.s endif $(CMOC) \ $(TO7_OPTS) $(INCLUDE_OPTS) \ -c $(CROSS_LIB_PATH)/sound/generic/dac_sounds.c $(CMOC) \ $(TO7_OPTS) $(INCLUDE_OPTS) \ -c $(CROSS_LIB_PATH)/display/alt_print/mo5_alt_print.c $(CMOC) \ $(TO7_OPTS) $(INCLUDE_OPTS) \ -c $(CROSS_LIB_PATH)/display/init_graphics/cmoc/mo5/mo5_init_graphics.c $(CMOC) \ $(TO7_OPTS) $(INCLUDE_OPTS) \ -c $(CROSS_LIB_PATH)/display/display_macros.c $(CMOC) \ $(COCO_GFX_COMPILE_OPTS) $(INCLUDE_OPTS) \ -c $(CROSS_LIB_PATH)/sleep/sleep_macros.c $(CMOC) \ $(TO7_OPTS) $(INCLUDE_OPTS) \ -c $(CROSS_LIB_PATH)/input/input_macros.c $(CMOC) \ $(TO7_OPTS) $(INCLUDE_OPTS) \ -c $(ASSETS_PATH)/cmoc_udc_tiles.s $(CMOC) $(TO7_ORG_DATA) -o $(BUILD_PATH)/XLIB.bin \ $(TO7_OPTS) $(INCLUDE_OPTS) \ $(SOURCE_PATH)/main.c \ mo5_alt_print.o dac_sounds.o \ mo5_init_graphics.o \ display_macros.o \ cmoc_udc_tiles.o \ \ input_macros.o sleep_macros.o rm \ mo5_alt_print.o dac_sounds.o \ cmoc_udc_tiles.o \ mo5_init_graphics.o \ display_macros.o \ \ input_macros.o sleep_macros.o ifdef USE_TOOLS mv $(BUILD_PATH)/XLIB.bin . $(TOOLS_PATH)/cmoc/mo5/sapfs$(COMPILEDEXT) -c X$(GAME_NAME)_TO7.sap $(TOOLS_PATH)/cmoc/mo5/sapfs$(COMPILEDEXT) --add X$(GAME_NAME)_TO7.sap XLIB.bin mv ./X$(GAME_NAME)_TO7.sap $(BUILD_PATH) rm ./XLIB.bin else mv $(BUILD_PATH)/XLIB.bin $(BUILD_PATH)/X$(GAME_NAME)_TO7.bin endif to7_targets: \ to7 ################################################################# # LCC1802 ################################################################# full_combo_rand.c: cat $(FULL_FILES) > $(SOURCE_PATH)/../full_combo_rand.c # ------------------------------------------------------------------------------------------ # LCC1802 # -target=xr18CX # https://sites.google.com/site/lcc1802/downloads/Quarrantine.zip?attredirects=0&d=1 ifeq ($(DO_WIN),1) LCC1802_OPTS ?= -target=xr18CX $(LCC1802_MAKEFILE_COMPILATION_OPTS) BASIC_OPTS ?= $(LCC1802_OPTS) "-Wa-D LCCCX=1" "-Wa-D LCCNOLONG" COMX_OPTS ?= $(BASIC_OPTS) "-Wa-D CODELOC=0x4401" PECOM_OPTS ?= $(BASIC_OPTS) "-Wa-D CODELOC=0x201" TMC600_OPTS ?= $(BASIC_OPTS) "-Wa-D CODELOC=0x6300" CIDELSA_OPTS ?= $(LCC1802_OPTS) "-Wa-D CODELOC=0" "-Wa-D NOFILLBSS=1" DRACO_32K_OPTS ?= $(CIDELSA_OPTS) "-Wa-D DATALOC=0x8000" "-Wa-D STACKLOC=0x83ff" DRACO_16K_OPTS ?= $(CIDELSA_OPTS) "-Wa-D DATALOC=0x4000" "-Wa-D STACKLOC=0x43ff" ALTAIR_24K_OPTS ?= $(CIDELSA_OPTS) "-Wa-D DATALOC=0x6000" "-Wa-D STACKLOC=0x60ff" ALTAIR_12K_OPTS ?= $(CIDELSA_OPTS) "-Wa-D DATALOC=0x3000" "-Wa-D STACKLOC=0x30ff" DESTROYER_12K_OPTS ?= $(CIDELSA_OPTS) "-Wa-D DATALOC=0x3000" "-Wa-D STACKLOC=0x30ff" DESTROYER_8K_OPTS ?= $(CIDELSA_OPTS) "-Wa-D DATALOC=0x2000" "-Wa-D STACKLOC=0x20ff" PIXIE_4K_OPTS ?= "-Wa-D LCCCX=1" -D__VIP__ -DRES=64 -DVIDMEM=0xF00 "-Wa-D STACKLOC=0xDFF" MICROBOARD_OPTS ?= $(CIDELSA_OPTS) "-Wa-D DATALOC=0x8000" "-Wa-D STACKLOC=0x9fff" MICROBOARD_PAL_1_OPTS ?= $(MICROBOARD_OPTS) "-DPAL=1" MICROBOARD_PAL_2_OPTS ?= $(MICROBOARD_OPTS) "-DPAL=2" MICROBOARD_NTSC_1_OPTS ?= $(CIDELSA_OPTS) "-DNTSC=1" MICROBOARD_NTSC_3_OPTS ?= $(CIDELSA_OPTS) "-DNTSC=3" else # LCC under Linux: # "-Wa-D CODELOC=0x2000" becomes "-Wa-D" "-WaCODELOC=0x2000" However, multiple symbols can still be combined as "-Wa-D" "-WaCODELOC=0x2000,STACKLOC=7fff" #/cygdrive/c/lcc42/bat/caCX.bat #/cygdrive/c/lcc42/bin/lcc.exe LCC1802_OPTS ?= -target=xr18CX $(LCC1802_MAKEFILE_COMPILATION_OPTS) BASIC_OPTS ?= $(LCC1802_OPTS) "-Wa-D" "-WaLCCCX=1" "-Wa-D" "-WaLCCNOLONG" COMX_OPTS ?= $(BASIC_OPTS) "-Wa-D" "-WaCODELOC=0x4401" PECOM_OPTS ?= $(BASIC_OPTS) "-Wa-D" "-WaCODELOC=0x201" TMC600_OPTS ?= $(BASIC_OPTS) "-Wa-D" "-WaCODELOC=0x6300" CIDELSA_OPTS ?= $(LCC1802_OPTS) "-Wa-D" "-WaCODELOC=0,NOFILLBSS=1" DRACO_32K_OPTS ?= $(CIDELSA_OPTS) "-Wa-D" "-WaDATALOC=0x8000,STACKLOC=0x83ff" DRACO_16K_OPTS ?= $(CIDELSA_OPTS) "-Wa-D" "-WaDATALOC=0x4000,STACKLOC=0x43ff" ALTAIR_24K_OPTS ?= $(CIDELSA_OPTS) "-Wa-D" "-WaDATALOC=0x6000,STACKLOC=0x60ff" ALTAIR_12K_OPTS ?= $(CIDELSA_OPTS) "-Wa-D" "-WaDATALOC=0x3000,STACKLOC=0x30ff" DESTROYER_12K_OPTS ?= $(CIDELSA_OPTS) "-Wa-D" "-WaDATALOC=0x3000,STACKLOC=0x30ff" DESTROYER_8K_OPTS ?= $(CIDELSA_OPTS) "-Wa-D" "-WaDATALOC=0x2000,STACKLOC=0x20ff" PIXIE_4K_OPTS ?= "-Wa-D" "-WaLCCCX=1" -D__VIP__ -DRES=64 -DVIDMEM=0xF00,STACKLOC=0xDFF" MICROBOARD_OPTS ?= $(CIDELSA_OPTS) "-Wa-D DATALOC=0x8000,STACKLOC=0x9fff" MICROBOARD_PAL_1_OPTS ?= $(MICROBOARD_OPTS) "-DPAL=1" MICROBOARD_PAL_2_OPTS ?= $(MICROBOARD_OPTS) "-DPAL=2" MICROBOARD_NTSC_1_OPTS ?= $(CIDELSA_OPTS) "-DNTSC=1" MICROBOARD_NTSC_3_OPTS ?= $(CIDELSA_OPTS) "-DNTSC=3" endif # @c:\lcc42\bin\lcc.exe "-target=xr18CX" "-Wf-g,;" "-Wf-volatile" -O "-Wp-D nofloats" "-Wa-D LCCNOLONG" -D__MICRO__ -DNTSC=1 -S %2 %3 %4 %5 %6 %1.c # @IF ERRORLEVEL 1 GOTO quit # @c:\lcc42\bin\copt c:\lcc42\include\lcc1806.opt -I %1.asm -O %1.oasm # @c:\lcc42\bin\asw -cpu 1802 -quiet -D NOFILLBSS=1 -D DATALOC=0x8000 -D CODELOC=0 -D STACKLOC=0x9fff -P -x -i ..\..\..\include -L %1.oasm # @c:\lcc42\bin\p2hex -r $-$ %1 %1_microboard_ntsc1_4_8 | more +2 # @:quit # @c:\lcc42\bin\lcc.exe "-target=xr18CX" "-Wf-g,;" "-Wf-volatile" -O "-Wp-D nofloats" "-Wa-D LCCNOLONG" -D__MICRO__ -DNTSC=3 -S %2 %3 %4 %5 %6 %1.c # @IF ERRORLEVEL 1 GOTO quit # @c:\lcc42\bin\copt c:\lcc42\include\lcc1806.opt -I %1.asm -O %1.oasm # @c:\lcc42\bin\asw -cpu 1802 -quiet -D NOFILLBSS=1 -D DATALOC=0x8000 -D CODELOC=0 -D STACKLOC=0x9fff -P -x -i ..\..\..\include -L %1.oasm # @c:\lcc42\bin\p2hex -r $-$ %1 %1_microboard_ntsc3 | more +2 # @:quit ################################################################################ COMX_REDUCED_EXTRA_FILES ?= \ $(CROSS_LIB_PATH)/display/init_graphics/lcc1802/comx/comx_init_graphics.c \ $(CROSS_LIB_PATH)/display/alt_print/comx_alt_print.c COMX_COLOR_GRAPHICS_REDUCED_EXTRA_FILES ?= \ $(CROSS_LIB_PATH)/display/init_graphics/lcc1802/comx/comx_color_init_graphics.c \ $(CROSS_LIB_PATH)/display/alt_print/comx_alt_print.c COMX_EXTRA_FILES ?= \ $(COMX_REDUCED_EXTRA_FILES) \ $(CROSS_LIB_PATH)/rand/rand.c \ $(CROSS_LIB_PATH)/sound/lcc1802/comx/comx_sounds.c COMX_COLOR_GRAPHICS_EXTRA_FILES ?= \ $(COMX_COLOR_GRAPHICS_REDUCED_EXTRA_FILES) \ $(CROSS_LIB_PATH)/sound/lcc1802/comx/comx_sounds.c COMX_EXTRA_FILES_WTIH_END_SCREEN ?= \ $(COMX_EXTRA_FILES) COMX_COLOR_GRAPHICS_EXTRA_FILES_WTIH_END_SCREEN ?= \ $(COMX_COLOR_GRAPHICS_EXTRA_FILES) reduced_full_lcc1802_combo.c: full_combo_rand.c cat \ $(COMX_REDUCED_EXTRA_FILES) $(CROSS_LIB_PATH)/rand/rand_lcc1802_devkit_include.c \ $(SOURCE_PATH)/../full_combo_rand.c > $(SOURCE_PATH)/../reduced_full_lcc1802_combo.c reduced_full_lcc1802_color_combo.c: full_combo_rand.c cat \ $(COMX_COLOR_GRAPHICS_EXTRA_FILES) $(CROSS_LIB_PATH)/rand/rand_lcc1802_devkit_include.c \ $(SOURCE_PATH)/../full_combo_rand.c > $(SOURCE_PATH)/../reduced_full_lcc1802_color_combo.c full_lcc1802_combo.c: full_combo_rand.c cat \ $(CROSS_LIB_PATH)/rand/rand_lcc1802_devkit_include.c \ $(COMX_EXTRA_FILES_WTIH_END_SCREEN) \ $(SOURCE_PATH)/../full_combo_rand.c > $(SOURCE_PATH)/../full_lcc1802_combo.c reduced_full_lcc1802_micro_combo.c: full_combo_rand.c cat \ $(MICRO_COLOR_REDUCED_EXTRA_FILES) $(CROSS_LIB_PATH)/rand/rand_lcc1802_devkit_include.c \ $(SOURCE_PATH)/../full_combo_rand.c > $(SOURCE_PATH)/../reduced_full_lcc1802_micro_combo.c clean_combo_files: rm -rf $(SOURCE_PATH)/../full_combo_rand.c rm -rf $(SOURCE_PATH)/../full_lcc1802_combo.c rm -rf $(SOURCE_PATH)/../reduced_full_lcc1802_combo.c rm -rf $(SOURCE_PATH)/../reduced_full_lcc1802_color_combo.c rm -rf $(SOURCE_PATH)/../reduced_full_lcc1802_micro_combo.c LCC1802_COLOR_BASIC_C_OPTS ?= \ -D__LCC1802__ \ -D__NO_SCREEN_COLOR_INIT \ -D__COMX_COLOR_GRAPHICS \ -D__ALT_PRINT LCC1802_BASIC_C_OPTS ?= \ -D__LCC1802__ \ -D__NO_SCREEN_COLOR_INIT \ -D__MEMORY_MAPPED_GRAPHICS \ -D__ALT_PRINT LCC1802_C_OPTS ?= \ $(LCC1802_BASIC_C_OPTS) \ \ -D__ALT_SLEEP \ LCC1802_C_OPTS_NO_SOUNDS ?= \ $(LCC1802_BASIC_C_OPTS) \ -D__ALT_SLEEP \ REDUCED_LCC1802_C_OPTS ?= \ $(LCC1802_BASIC_C_OPTS) \ -D_XL_NO_SLEEP PIXIE_C_OPTS ?= \ -D__LCC1802__ \ -D__NO_SCREEN_COLOR_INIT \ -D__NO_PRINT \ -D__NO_SLEEP LCC1802_COLOR_C_OPTS ?= \ $(LCC1802_COLOR_BASIC_C_OPTS) \ -D__ALT_SLEEP LCC1802_COLOR_C_OPTS_NO_SOUNDS ?= \ $(LCC1802_COLOR_BASIC_C_OPTS) \ -D__ALT_SLEEP REDUCED_LCC1802_COLOR_C_OPTS ?= \ $(LCC1802_COLOR_BASIC_C_OPTS) \ -D_XL_NO_SLEEP MICRO_COLOR_REDUCED_EXTRA_FILES ?= \ $(CROSS_LIB_PATH)/display/init_graphics/lcc1802/comx/micro_color_init_graphics.c \ $(CROSS_LIB_PATH)/display/alt_print/comx_alt_print.c MICRO_COLOR_EXTRA_FILES ?= \ $(MICRO_COLOR_REDUCED_EXTRA_FILES) \ $(CROSS_LIB_PATH)/sound/lcc1802/comx/comx_sounds.c MICRO_COLOR_EXTRA_FILES_WTIH_END_SCREEN ?= \ $(MICRO_COLOR_EXTRA_FILES) ############################################################################### # COMX _full_comx: _comx _comx_buffered: reduced_full_lcc1802_color_combo.c $(ASSETS_PATH)/6x9_chars.h $(LCC1802) $(INCLUDE_OPTS) -I$(SOURCE_PATH) $(COMX_OPTS) \ -D__COMX__ $(COMX_GAME_OPTS) \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_COMX_SLOWDOWN) \ $(LCC1802_COLOR_C_OPTS) \ $(SOURCE_PATH)/../reduced_full_lcc1802_color_combo.c # rm -rf $(SOURCE_PATH)/../reduced_full_lcc1802_color_combo.c mv $(SOURCE_PATH)/../../a.$(LCC1802_HEX) $(BUILD_PATH)/X$(GAME_NAME)_$@.hex comx_buffered: \ _comx_buffered \ clean_combo_files # -D__LCC1802_UNBUFFERED _comx: reduced_full_lcc1802_color_combo.c $(ASSETS_PATH)/6x9_chars.h $(LCC1802) $(INCLUDE_OPTS) -I$(SOURCE_PATH) $(COMX_OPTS) -D__LCC1802_UNBUFFERED \ -D__COMX__ $(COMX_GAME_OPTS) \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_COMX_SLOWDOWN) \ $(LCC1802_COLOR_C_OPTS) \ $(SOURCE_PATH)/../reduced_full_lcc1802_color_combo.c # rm -rf $(SOURCE_PATH)/../reduced_full_lcc1802_color_combo.c mv $(SOURCE_PATH)/../../a.$(LCC1802_HEX) $(BUILD_PATH)/X$(GAME_NAME)_$@.hex comx: \ _comx \ clean_combo_files # Interrupt-driver graphics _comx_int: reduced_full_lcc1802_color_combo.c $(ASSETS_PATH)/6x9_chars.h $(LCC1802) $(INCLUDE_OPTS) -I$(SOURCE_PATH) $(COMX_OPTS) -DVIS_INT \ -D__COMX__ \ $(COMX_GAME_OPTS) \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_COMX_SLOWDOWN) \ $(LCC1802_COLOR_C_OPTS) \ $(SOURCE_PATH)/../reduced_full_lcc1802_color_combo.c # rm -rf $(SOURCE_PATH)/../reduced_full_lcc1802_color_combo.c mv $(SOURCE_PATH)/../../a.$(LCC1802_HEX) $(BUILD_PATH)/X$(GAME_NAME)_$@.hex comx_int: \ _comx_int \ clean_combo_files _comx_ntsc: reduced_full_lcc1802_color_combo.c $(ASSETS_PATH)/6x8_chars.h $(LCC1802) $(INCLUDE_OPTS) -I$(SOURCE_PATH) $(COMX_OPTS) \ -D__COMX__ -DNTSC $(COMX_GAME_OPTS) \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_COMX_SLOWDOWN) \ $(LCC1802_COLOR_C_OPTS) \ $(SOURCE_PATH)/../reduced_full_lcc1802_color_combo.c # rm -rf $(SOURCE_PATH)/../reduced_full_lcc1802_color_combo.c mv $(SOURCE_PATH)/../../a.$(LCC1802_HEX) $(BUILD_PATH)/X$(GAME_NAME)_$@.hex comx_ntsc: \ _comx_ntsc \ clean_combo_files # VIP _vip: reduced_full_lcc1802_color_combo.c $(ASSETS_PATH)/4x4_chars.h $(LCC1802) $(INCLUDE_OPTS) -I$(SOURCE_PATH) $(PIXIE_4K_OPTS) \ -D__VIP__ $(VIP_GAME_OPTS) \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_VIP_SLOWDOWN) \ $(PIXIE_C_OPTS) \ $(SOURCE_PATH)/../reduced_full_lcc1802_color_combo.c mv $(SOURCE_PATH)/../../a.$(LCC1802_HEX) $(BUILD_PATH)/X$(GAME_NAME)_$@.hex vip: \ _vip \ clean_combo_files ############################################################################### # MICRO _micro_pal2: reduced_full_lcc1802_micro_combo.c $(ASSETS_PATH)/6x9_chars.h $(LCC1802) $(INCLUDE_OPTS) -I$(SOURCE_PATH) $(MICROBOARD_PAL_2_OPTS) \ -D__MICRO__ \ -D__COMX_COLOR_GRAPHICS \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_MICRO_SLOWDOWN) \ $(MICRO_GAME_OPTS) \ $(LCC1802_COLOR_C_OPTS) \ $(SOURCE_PATH)/../reduced_full_lcc1802_micro_combo.c # rm -rf $(SOURCE_PATH)/../reduced_full_lcc1802_micro_combo.c mv $(SOURCE_PATH)/../../a.$(LCC1802_HEX) $(BUILD_PATH)/X$(GAME_NAME)_$@.hex _micro_pal1: reduced_full_lcc1802_micro_combo.c $(ASSETS_PATH)/6x8_chars.h $(LCC1802) $(INCLUDE_OPTS) -I$(SOURCE_PATH) $(MICROBOARD_PAL_1_OPTS) \ -D__MICRO__ \ -D__COMX_COLOR_GRAPHICS \ $(MICRO_GAME_OPTS) \ \ $(LCC1802_COLOR_C_OPTS) \ $(SOURCE_PATH)/../reduced_full_lcc1802_micro_combo.c # rm -rf $(SOURCE_PATH)/../reduced_full_lcc1802_micro_combo.c mv $(SOURCE_PATH)/../../a.$(LCC1802_HEX) $(BUILD_PATH)/X$(GAME_NAME)_$@.hex _micro_ntsc1: reduced_full_lcc1802_micro_combo.c $(ASSETS_PATH)/6x8_chars.h $(LCC1802) $(INCLUDE_OPTS) -I$(SOURCE_PATH) $(MICROBOARD_NTSC1_OPTS) \ -D__MICRO__ -DNTSC \ -D__COMX_COLOR_GRAPHICS \ $(MICRO_GAME_OPTS) \ \ $(LCC1802_COLOR_C_OPTS) \ $(SOURCE_PATH)/../reduced_full_lcc1802_micro_combo.c # rm -rf $(SOURCE_PATH)/../reduced_full_lcc1802_micro_combo.c mv $(SOURCE_PATH)/../../a.$(LCC1802_HEX) $(BUILD_PATH)/X$(GAME_NAME)_$@.hex micro_pal1: \ _micro_pal1 \ clean_combo_files micro_ntsc1: \ _micro_ntsc1 \ clean_combo_files micro_pal2: \ _micro_pal2 \ clean_combo_files _micro: _micro_pal2 micro: \ _micro \ clean_combo_files ############################################################################### # PECOM _full_pecom: _pecom _pecom: reduced_full_lcc1802_color_combo.c $(ASSETS_PATH)/6x9_chars.h $(LCC1802) $(INCLUDE_OPTS) -I$(SOURCE_PATH) $(PECOM_OPTS) \ -D__PECOM__ $(PECOM_GAME_OPTS) \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_PECOM_SLOWDOWN) \ $(PECOM_GAME_OPTS) \ $(LCC1802_COLOR_C_OPTS) \ $(SOURCE_PATH)/../reduced_full_lcc1802_color_combo.c # rm -rf $(SOURCE_PATH)/../reduced_full_lcc1802_color_combo.c mv $(SOURCE_PATH)/../../a.$(LCC1802_HEX) $(BUILD_PATH)/X$(GAME_NAME)_$@.hex pecom: \ _pecom \ clean_combo_files ############################################################################### # TMC600 _full_tmc600: _tmc600_37k _tmc600: _tmc600_37k # -savetemps -S _tmc600_37k: full_lcc1802_combo.c $(LCC1802) $(INCLUDE_OPTS) -I$(SOURCE_PATH) $(TMC600_OPTS) \ -D__TMC600__ $(TMC600_GAME_OPTS) \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_TMC600_SLOWDOWN) \ -D_XL_NO_UDG \ $(LCC1802_C_OPTS) \ $(SOURCE_PATH)/../full_lcc1802_combo.c mv $(SOURCE_PATH)/../../a.$(LCC1802_HEX) $(BUILD_PATH)/X$(GAME_NAME)_tmc600_37k.hex tmc600: \ _tmc600 \ clean_combo_files ############################################################################### # CIDELSA DRACO _cidelsa: _cidelsa_draco _cidelsa_draco: _cidelsa_draco_32k _cidelsa_draco_32k: reduced_full_lcc1802_color_combo.c $(LCC1802) $(INCLUDE_OPTS) -I$(SOURCE_PATH) $(DRACO_32K_OPTS) \ -D__CIDELSA__ -D__DRACO__ \ -D_XL_NO_COLOR -D_XL_NO_UDG \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_CIDELSA_SLOWDOWN) \ $(LCC1802_COLOR_C_OPTS) \ $(SOURCE_PATH)/../reduced_full_lcc1802_color_combo.c mv $(SOURCE_PATH)/../../a.$(LCC1802_HEX) $(BUILD_PATH)/X$(GAME_NAME)_$@.hex cidelsa: \ _cidelsa \ clean_combo_files ############################################################################### comx_targets: comx comx_ntsc pecom_targets: pecom tmc600_targets: tmc600_37k cidelsa_targets: $(MAKE) cidelsa_draco_32k ############################################################################################### mc10: cc68 -tmc10 $(CC6303_MC10_OPTS) $(INCLUDE_OPTS) $(GLOBAL_OPTS) \ -D__MC10__ \ $(MC10_COLORS) \ -DXSize=32 \ -DYSize=16 \ -D__MEMORY_MAPPED_GRAPHICS -D_XL_NO_JOYSTICK \ -D_XL_NO_COLOR -D__TARGET_SPECIFIC_ASCII \ -D__ALT_SLEEP -D__ALT_RAND \ -D__NO_INIT_GRAPHICS \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_MC10_SLOWDOWN) \ -D__DEFAULT_CLEAR_SCREEN -D__ALT_PRINT \ $(CROSS_LIB_PATH)/sound/generic/bit_bang_sounds.c \ $(FULL_FILES) \ $(CROSS_LIB_PATH)/rand/rand.c \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c \ -o xbin rm xbin mv xbin.c10 $(BUILD_PATH)/X$(GAME_NAME)_$@.c10 ############################################################################################### # GCC # ncurses_targets: \ ncurses GCC_OPTS = $(GLOBAL_OPTS) $(NATIVE_MAKEFILE_COMPILATION_OPTS) ############################################################################################### ncurses_sized: $(NATIVE_CC) $(GCC_OPTS) $(INCLUDE_OPTS) -D__NCURSES__ \ -DXSize=$(XSIZE) -DYSize=$(YSIZE) \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_NCURSES_SLOWDOWN) \ -D__CONIO_GRAPHICS -D_XL_NO_UDG -D_XL_NO_JOYSTICK \ -D__ALT_PRINT \ $(NCURSES_GAME_OPTS) \ $(CROSS_LIB_PATH)/display/alt_print/ncurses_alt_print.c \ $(CROSS_LIB_PATH)/display/init_graphics/gcc/ncurses_init_graphics.c \ $(FULL_FILES) \ -l$(NCURSES) mv a$(COMPILEDEXT) $(BUILD_PATH)/X$(GAME_NAME)_ncurses_$(XSIZE)X$(YSIZE)$(COMPILEDEXT) ncurses: $(NATIVE_CC) $(GCC_OPTS) $(INCLUDE_OPTS) -D__NCURSES__ \ \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_NCURSES_SLOWDOWN) \ -D__CONIO_GRAPHICS -D_XL_NO_UDG -D_XL_NO_JOYSTICK \ -D__ALT_PRINT \ $(NCURSES_GAME_OPTS) \ $(CROSS_LIB_PATH)/display/alt_print/ncurses_alt_print.c \ $(CROSS_LIB_PATH)/display/init_graphics/gcc/ncurses_init_graphics.c \ $(FULL_FILES) \ -l$(NCURSES) \ -o $(BUILD_PATH)/X$(GAME_NAME)_ncurses$(COMPILEDEXT) terminal8x8_sized: $(ASSETS_PATH)/8x8_chars.h $(NATIVE_CC) $(GCC_OPTS) $(INCLUDE_OPTS) \ -DXSize=$(XSIZE) -DYSize=$(YSIZE) \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_TERMINAL_SLOWDOWN) \ -D__TERMINAL__ -D_XL_NO_JOYSTICK \ -D__ALT_PRINT \ $(NCURSES_GAME_OPTS) \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c \ $(CROSS_LIB_PATH)/display/init_graphics/gcc/terminal_init_graphics.c \ $(FULL_FILES) \ -l$(NCURSES) \ -o $(BUILD_PATH)/X$(GAME_NAME)_terminal8x8_$(XSIZE)X$(YSIZE)$(COMPILEDEXT) terminal: terminal8x8 terminal8x8: $(ASSETS_PATH)/8x8_chars.h $(NATIVE_CC) $(GCC_OPTS) $(INCLUDE_OPTS) \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_TERMINAL_SLOWDOWN) \ -D__TERMINAL__ -D_XL_NO_JOYSTICK \ -D__ALT_PRINT -DXSize=20 -DYSize=18 \ $(NCURSES_GAME_OPTS) \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c \ $(CROSS_LIB_PATH)/display/init_graphics/gcc/terminal_init_graphics.c \ $(FULL_FILES) \ -l$(NCURSES) \ -o $(BUILD_PATH)/X$(GAME_NAME)_$@$(COMPILEDEXT) terminal8x6_sized: $(ASSETS_PATH)/8x6_chars.h $(NATIVE_CC) $(GCC_OPTS) $(INCLUDE_OPTS) \ -DXSize=$(XSIZE) -DYSize=$(YSIZE) \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_TERMINAL_SLOWDOWN) \ -D__TERMINAL__ -D_XL_NO_JOYSTICK \ -D__ALT_PRINT -D_XL_TILE_X_SIZE=8 -D_XL_TILE_Y_SIZE=6 \ $(NCURSES_GAME_OPTS) \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c \ $(CROSS_LIB_PATH)/display/init_graphics/gcc/terminal_init_graphics.c \ $(FULL_FILES) \ -l$(NCURSES) \ -o $(BUILD_PATH)/X$(GAME_NAME)_terminal8x6_$(XSIZE)X$(YSIZE)$(COMPILEDEXT) terminal8x6: $(ASSETS_PATH)/8x6_chars.h $(NATIVE_CC) $(GCC_OPTS) $(INCLUDE_OPTS) \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_TERMINAL_SLOWDOWN) \ -D__TERMINAL__ -D_XL_NO_JOYSTICK \ -D__ALT_PRINT -DXSize=20 -DYSize=17 -D_XL_TILE_X_SIZE=8 -D_XL_TILE_Y_SIZE=6 \ $(NCURSES_GAME_OPTS) \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c \ $(CROSS_LIB_PATH)/display/init_graphics/gcc/terminal_init_graphics.c \ $(FULL_FILES) \ -l$(NCURSES) \ -o $(BUILD_PATH)/X$(GAME_NAME)_$@$(COMPILEDEXT) terminal7x8_sized: $(ASSETS_PATH)/7x8_chars.h $(NATIVE_CC) $(GCC_OPTS) $(INCLUDE_OPTS) \ -DXSize=$(XSIZE) -DYSize=$(YSIZE) \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_TERMINAL_SLOWDOWN) \ -D__TERMINAL__ -D_XL_NO_JOYSTICK \ -D__ALT_PRINT -D_XL_TILE_X_SIZE=7 -D_XL_TILE_Y_SIZE=8 \ $(NCURSES_GAME_OPTS) \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c \ $(CROSS_LIB_PATH)/display/init_graphics/gcc/terminal_init_graphics.c \ $(FULL_FILES) \ -l$(NCURSES) \ -o $(BUILD_PATH)/X$(GAME_NAME)_terminal7x8_$(XSIZE)X$(YSIZE)$(COMPILEDEXT) terminal7x8: $(ASSETS_PATH)/7x8_chars.h $(NATIVE_CC) $(GCC_OPTS) $(INCLUDE_OPTS) \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_TERMINAL_SLOWDOWN) \ -D__TERMINAL__ -D_XL_NO_JOYSTICK \ -D__ALT_PRINT -DXSize=20 -DYSize=24 -D_XL_TILE_X_SIZE=7 -D_XL_TILE_Y_SIZE=8 \ $(NCURSES_GAME_OPTS) \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c \ $(CROSS_LIB_PATH)/display/init_graphics/gcc/terminal_init_graphics.c \ $(FULL_FILES) \ -l$(NCURSES) \ -o $(BUILD_PATH)/X$(GAME_NAME)_$@$(COMPILEDEXT) terminal6x8_sized: $(ASSETS_PATH)/6x8_chars.h $(NATIVE_CC) $(GCC_OPTS) $(INCLUDE_OPTS) \ -DXSize=$(XSIZE) -DYSize=$(YSIZE) \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_TERMINAL_SLOWDOWN) \ -D__TERMINAL__ -D_XL_NO_JOYSTICK \ -D__ALT_PRINT -D_XL_TILE_X_SIZE=6 -D_XL_TILE_Y_SIZE=8 \ $(NCURSES_GAME_OPTS) \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c \ $(CROSS_LIB_PATH)/display/init_graphics/gcc/terminal_init_graphics.c \ $(FULL_FILES) \ -l$(NCURSES) \ -o $(BUILD_PATH)/X$(GAME_NAME)_terminal6x8_$(XSIZE)X$(YSIZE)$(COMPILEDEXT) terminal6x8: $(ASSETS_PATH)/6x8_chars.h $(NATIVE_CC) $(GCC_OPTS) $(INCLUDE_OPTS) \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_TERMINAL_SLOWDOWN) \ -D__TERMINAL__ -D_XL_NO_JOYSTICK \ -D__ALT_PRINT -DXSize=40 -DYSize=24 -D_XL_TILE_X_SIZE=6 -D_XL_TILE_Y_SIZE=8 \ $(NCURSES_GAME_OPTS) \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c \ $(CROSS_LIB_PATH)/display/init_graphics/gcc/terminal_init_graphics.c \ $(FULL_FILES) \ -l$(NCURSES) \ -o $(BUILD_PATH)/X$(GAME_NAME)_$@$(COMPILEDEXT) terminal6x9_sized: $(ASSETS_PATH)/6x8_chars.h $(NATIVE_CC) $(GCC_OPTS) $(INCLUDE_OPTS) \ -DXSize=$(XSIZE) -DYSize=$(YSIZE) \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_TERMINAL_SLOWDOWN) \ -D__TERMINAL__ -D_XL_NO_JOYSTICK \ -D__ALT_PRINT -D_XL_TILE_X_SIZE=6 -D_XL_TILE_Y_SIZE=9 \ $(NCURSES_GAME_OPTS) \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c \ $(CROSS_LIB_PATH)/display/init_graphics/gcc/terminal_init_graphics.c \ $(FULL_FILES) \ -l$(NCURSES) \ -o $(BUILD_PATH)/X$(GAME_NAME)_terminal6x9_$(XSIZE)X$(YSIZE)$(COMPILEDEXT) terminal6x9: $(ASSETS_PATH)/6x8_chars.h $(NATIVE_CC) $(GCC_OPTS) $(INCLUDE_OPTS) \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_TERMINAL_SLOWDOWN) \ -D__TERMINAL__ -D_XL_NO_JOYSTICK \ -D__ALT_PRINT -DXSize=40 -DYSize=24 -D_XL_TILE_X_SIZE=6 -D_XL_TILE_Y_SIZE=9 \ $(NCURSES_GAME_OPTS) \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c \ $(CROSS_LIB_PATH)/display/init_graphics/gcc/terminal_init_graphics.c \ $(FULL_FILES) \ -l$(NCURSES) \ -o $(BUILD_PATH)/X$(GAME_NAME)_$@$(COMPILEDEXT) ## stdio_buffered: stdio # stdio: $(NATIVE_CC) $(GCC_OPTS) $(INCLUDE_OPTS) \ -D__STDIO $(STDIO_GAME_OPTS) \ -D_XL_NO_JOYSTICK \ -DXSize=32 -DYSize=24 \ -D_XL_NO_COLOR \ $(NCURSES_GAME_OPTS) \ -D_XL_TURN_BASED \ -D__BUFFERED_GRAPHICS \ -D__NO_INIT_GRAPHICS \ -D__ALT_PRINT \ -D__DEFAULT_CLEAR_SCREEN \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c \ $(FULL_FILES) \ -o $(BUILD_PATH)/X$(GAME_NAME)_$@$(COMPILEDEXT) stdio_sized: $(NATIVE_CC) $(GCC_OPTS) $(INCLUDE_OPTS) \ -DXSize=$(XSIZE) -DYSize=$(YSIZE) \ -D__STDIO $(STDIO_GAME_OPTS) \ -D_XL_NO_JOYSTICK \ -D_XL_NO_COLOR \ $(NCURSES_GAME_OPTS) \ -D_XL_TURN_BASED \ -D__BUFFERED_GRAPHICS \ -D__NO_INIT_GRAPHICS \ -D__ALT_PRINT \ -D__DEFAULT_CLEAR_SCREEN \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c \ $(FULL_FILES) mv a$(COMPILEDEXT) $(BUILD_PATH)/X$(GAME_NAME)_stdio_$(XSIZE)X$(YSIZE)$(COMPILEDEXT) ################ # Experimental targets # CC65 include makefiles.common/targets/cc65/Makefile_c128_8502 include makefiles.common/targets/cc65/Makefile_cx16 include makefiles.common/targets/cc65/Makefile_c65 include makefiles.common/targets/cc65/Makefile_osic1p include makefiles.common/targets/cc65/Makefile_telestrat include makefiles.common/targets/cc65/Makefile_kim1 include makefiles.common/targets/cc65/Makefile_sym1 # Z88DK include makefiles.common/targets/z88dk/Makefile_abc80 include makefiles.common/targets/z88dk/Makefile_abc800 include makefiles.common/targets/z88dk/Makefile_alphatro include makefiles.common/targets/z88dk/Makefile_altair8800 include makefiles.common/targets/z88dk/Makefile_attache include makefiles.common/targets/z88dk/Makefile_aussie include makefiles.common/targets/z88dk/Makefile_bee include makefiles.common/targets/z88dk/Makefile_bic include makefiles.common/targets/z88dk/Makefile_bit90 include makefiles.common/targets/z88dk/Makefile_bondwell include makefiles.common/targets/z88dk/Makefile_bondwell2 include makefiles.common/targets/z88dk/Makefile_c7420 include makefiles.common/targets/z88dk/Makefile_coleco_adam include makefiles.common/targets/z88dk/Makefile_corvette include makefiles.common/targets/z88dk/Makefile_dai include makefiles.common/targets/z88dk/Makefile_dmv include makefiles.common/targets/z88dk/Makefile_eg2k include makefiles.common/targets/z88dk/Makefile_einstein include makefiles.common/targets/z88dk/Makefile_enterprise include makefiles.common/targets/z88dk/Makefile_excalibur64 include makefiles.common/targets/z88dk/Makefile_fp1100 include makefiles.common/targets/z88dk/Makefile_g800 include makefiles.common/targets/z88dk/Makefile_gemini include makefiles.common/targets/z88dk/Makefile_gl4000 include makefiles.common/targets/z88dk/Makefile_gl6000sl include makefiles.common/targets/z88dk/Makefile_hemc include makefiles.common/targets/z88dk/Makefile_hgmc include makefiles.common/targets/z88dk/Makefile_homelab include makefiles.common/targets/z88dk/Makefile_homelab2 include makefiles.common/targets/z88dk/Makefile_kaypro include makefiles.common/targets/z88dk/Makefile_kaypro83 include makefiles.common/targets/z88dk/Makefile_kramermc include makefiles.common/targets/z88dk/Makefile_krokha include makefiles.common/targets/z88dk/Makefile_lambda include makefiles.common/targets/z88dk/Makefile_lm80c include makefiles.common/targets/z88dk/Makefile_lviv include makefiles.common/targets/z88dk/Makefile_m5 include makefiles.common/targets/z88dk/Makefile_mbc200 include makefiles.common/targets/z88dk/Makefile_micro8085 include makefiles.common/targets/z88dk/Makefile_mikro80 include makefiles.common/targets/z88dk/Makefile_multi8 include makefiles.common/targets/z88dk/Makefile_myvision include makefiles.common/targets/z88dk/Makefile_mz2500 include makefiles.common/targets/z88dk/Makefile_nascom include makefiles.common/targets/z88dk/Makefile_nc100 include makefiles.common/targets/z88dk/Makefile_nc200 include makefiles.common/targets/z88dk/Makefile_newbrain include makefiles.common/targets/z88dk/Makefile_ondra include makefiles.common/targets/z88dk/Makefile_osborne1 include makefiles.common/targets/z88dk/Makefile_osca include makefiles.common/targets/z88dk/Makefile_oz include makefiles.common/targets/z88dk/Makefile_p2000 include makefiles.common/targets/z88dk/Makefile_pasopia7 include makefiles.common/targets/z88dk/Makefile_pc6001 include makefiles.common/targets/z88dk/Makefile_pcw40 include makefiles.common/targets/z88dk/Makefile_pcw80 include makefiles.common/targets/z88dk/Makefile_pencil2 include makefiles.common/targets/z88dk/Makefile_phc25 include makefiles.common/targets/z88dk/Makefile_pmd85 include makefiles.common/targets/z88dk/Makefile_pps include makefiles.common/targets/z88dk/Makefile_primo include makefiles.common/targets/z88dk/Makefile_pv1000 include makefiles.common/targets/z88dk/Makefile_pv2000 include makefiles.common/targets/z88dk/Makefile_px4 include makefiles.common/targets/z88dk/Makefile_px8 include makefiles.common/targets/z88dk/Makefile_radio86 include makefiles.common/targets/z88dk/Makefile_rc700 include makefiles.common/targets/z88dk/Makefile_rx78 include makefiles.common/targets/z88dk/Makefile_smc777 include makefiles.common/targets/z88dk/Makefile_sol20 include makefiles.common/targets/z88dk/Makefile_sos include makefiles.common/targets/z88dk/Makefile_spc1000 include makefiles.common/targets/z88dk/Makefile_special include makefiles.common/targets/z88dk/Makefile_srr include makefiles.common/targets/z88dk/Makefile_super80 include makefiles.common/targets/z88dk/Makefile_super80r include makefiles.common/targets/z88dk/Makefile_sv8000 include makefiles.common/targets/z88dk/Makefile_svi include makefiles.common/targets/z88dk/Makefile_ti82 include makefiles.common/targets/z88dk/Makefile_ti83 include makefiles.common/targets/z88dk/Makefile_ti85 include makefiles.common/targets/z88dk/Makefile_ti86 include makefiles.common/targets/z88dk/Makefile_ti83p include makefiles.common/targets/z88dk/Makefile_tiki100 include makefiles.common/targets/z88dk/Makefile_tim011 include makefiles.common/targets/z88dk/Makefile_ts2068 include makefiles.common/targets/z88dk/Makefile_tvc include makefiles.common/targets/z88dk/Makefile_v1050 include makefiles.common/targets/z88dk/Makefile_vector06c include makefiles.common/targets/z88dk/Makefile_x07 include makefiles.common/targets/z88dk/Makefile_x1 include makefiles.common/targets/z88dk/Makefile_x820 include makefiles.common/targets/z88dk/Makefile_z80tvgame include makefiles.common/targets/z88dk/Makefile_z88 include makefiles.common/targets/z88dk/Makefile_zx80 include makefiles.common/targets/z88dk/Makefile_zxn include makefiles.common/targets/z88dk/Makefile_misc_cpm # GCC4TI include makefiles.common/targets/gcc4ti/Makefile_ti99 # VBCC include makefiles.common/targets/vbcc/Makefile_amiga include makefiles.common/targets/vbcc/Makefile_atari_jaguar include makefiles.common/targets/vbcc/Makefile_bbc include makefiles.common/targets/vbcc/Makefile_m65 # ATARI_MINT_GCC include makefiles.common/targets/atari_mint_gcc/Makefile_atari_st # TODO: Fix and improve these targets # ACK include makefiles.common/targets/ack/Makefile.ack_targets ######################################################################## # Extras # Z88DK Extras include makefiles.common/targets/z88dk/extras/Makefile_agon include makefiles.common/targets/z88dk/extras/Makefile_camputers_lynx include makefiles.common/targets/z88dk/extras/Makefile_gal include makefiles.common/targets/z88dk/extras/Makefile_gal_plus include makefiles.common/targets/z88dk/extras/Makefile_c128 include makefiles.common/targets/z88dk/extras/Makefile_cpc include makefiles.common/targets/z88dk/extras/Makefile_pc88 z88dk_experimental_targets: \ abc80 \ abc800 \ alphatro \ altair8800 \ attache \ aussie \ bic \ bit90 \ bondwell \ bondwell2 \ coleco_adam \ corvette \ dai \ dmv \ eg2k \ enterprise \ excalibur64 \ fp1100 \ g800 \ gemini \ gl4000 \ gl6000sl \ hemc \ hgmc \ homelab \ homelab2 \ kaypro \ kaypro83 \ kramermc \ krokha \ lambda \ lm80c \ m5 \ mbc200 \ micro8085 \ mikro80 \ multi8 \ myvision \ mz2500 \ nascom \ nc100 \ nc200 \ newbrain \ ondra \ osborne1 \ osca \ oz \ p2000 \ pasopia7 \ pc6001 \ pc88 \ pcw40 \ pcw80 \ pencil2 \ pmd85 \ pps \ primo \ pv1000 \ pv2000 \ px4 \ px8 \ qc10 \ radio86 \ rc700 \ rx78 \ smc777 \ sol20 \ sos \ spc1000 \ special \ srr \ super80 \ super80r \ sv8000 \ svi \ ti82 \ ti83 \ ti85 \ ti86 \ ti83p \ tiki100 \ tim011 \ ts2068 \ tvc \ v1050 \ vector06c \ x1 \ x820 \ z80tvgame \ z88 \ zx80 \ zxn ================================================ FILE: src/assets/LoggerSingleton.py ================================================ import logging import datetime # global logger # logger = None class LoggerSingleton: @staticmethod def initLogger(name, path): if name in logging.Logger.manager.loggerDict: logger = logging.getLogger(name) # print("Logger already exists") # print(str(logging.Logger.manager.loggerDict)) else: # print("Logger does not exists, yet") # print(str(logging.Logger.manager.loggerDict)) logger = logging.getLogger(name) logger.setLevel(logging.DEBUG) if not logger.handlers: # file_name='/cygdrive/c/Retro/CROSS-LIB/logs/log_'+datetime.datetime.now().strftime("%Y-%m-%d_%H_%M_%S")+'.log' # file_name=path+'/log_'+name+'_'+datetime.datetime.now().strftime("%Y-%m-%d_%H_%M_%S")+'.log' file_name=path+'/log.log' file_handler = logging.FileHandler(file_name,mode='a+', encoding="utf-8") formatter = logging.Formatter('%(asctime)s - %(filename)s:%(lineno)s - %(message)s') file_handler.setFormatter(formatter) logger.addHandler(file_handler) return logger # @staticmethod # def initConsoleLogger(name): # if name in logging.Logger.manager.loggerDict: # logger = logging.getLogger(name) # else: # logger = logging.getLogger(name) # logger.setLevel(logging.DEBUG) # if not logger.handlers: # console_handler = logging.StreamHandler() # formatter = logging.Formatter('%(asctime)s - %(filename)s:%(lineno)s - %(message)s') # console_handler.setFormatter(formatter) # logger.addHandler(console_handler) # return logger ================================================ FILE: src/assets/__init__.py ================================================ ================================================ FILE: src/assets/copy_assets.py ================================================ #!/bin/python import shutil import os,sys if len(sys.argv)<2: game_dir = "chase" else: game_dir = sys.argv[1] if len(sys.argv)<3: parent_dir = "games" else: parent_dir = sys.argv[2] file_names = os.listdir("./generated_assets/"+game_dir) print("Files to copy: "+str(file_names)) for file_name in file_names: print("Copying: ", file_name) source_path = "./generated_assets/"+game_dir+"/"+file_name print("from: " + source_path) dest_path = "../"+parent_dir+"/"+game_dir+"/generated_assets" if not os.path.exists(dest_path): print("creating: " + dest_path) os.makedirs(dest_path) print("to: " + dest_path) shutil.copy(source_path, dest_path ) ================================================ FILE: src/assets/examples/README.txt ================================================ Some of the sample BASIC programs and code excerpts are taken from https://gkanold.wixsite.com/homeputerium ================================================ FILE: src/assets/examples/single_tiles/tile_shape0.txt ================================================ ...##... ..#..#.. ...##... .##..##. #.####.# # ####.# ..#..#.. ..#..#.. ================================================ FILE: src/assets/examples/single_tiles/tile_shape1.txt ================================================ ...#.... 16 ..###... 56 ..#.###. 46 .##...## 99 ##...##. 198 .###.#.. 116 ...###.. 28 ....#... 8 ================================================ FILE: src/assets/examples/tile_sets/asm/8x6_cidelsa_digits.s ================================================ !byte $1E, $21, $21, $21, $1E, $00, $00, $00 !byte $01, $3F, $21, $11, $01, $00, $00, $00 !byte $11, $29, $25, $25, $13, $00, $00, $00 !byte $16, $29, $29, $21, $21, $00, $00, $00 !byte $04, $3F, $24, $14, $0C, $00, $00, $00 !byte $26, $29, $29, $29, $32, $00, $00, $00 !byte $26, $29, $29, $29, $1E, $00, $00, $00 !byte $30, $28, $24, $23, $20, $00, $00, $00 !byte $16, $29, $29, $29, $16, $00, $00, $00 !byte $1E, $29, $29, $29, $11, $00, $00, $00 !byte $00, $00, $00, $00, $00, $00, $00, $00 ================================================ FILE: src/assets/examples/tile_sets/asm/8x6_cidelsa_fonts.s ================================================ !byte $00, $1F, $28, $28, $28, $3F, $1F, $00 !byte $00, $16, $29, $29, $29, $3F, $3F, $00 !byte $00, $12, $21, $21, $21, $3F, $1E, $00 !byte $00, $1E, $21, $21, $21, $3F, $3F, $00 !byte $00, $21, $21, $29, $29, $3F, $3F, $00 !byte $00, $20, $20, $28, $28, $3F, $3F, $00 !byte $00, $16, $25, $21, $21, $3F, $1E, $00 !byte $00, $3F, $08, $08, $08, $3F, $3F, $00 !byte $00, $00, $21, $3F, $3F, $21, $00, $00 !byte $00, $3E, $3F, $01, $01, $01, $02, $00 !byte $00, $00, $21, $12, $0C, $3F, $3F, $00 !byte $00, $00, $01, $01, $01, $3F, $3F, $00 !byte $00, $3F, $10, $08, $10, $3F, $3F, $00 !byte $00, $3F, $04, $08, $10, $3F, $3F, $00 !byte $00, $1E, $21, $21, $21, $3F, $1E, $00 !byte $00, $10, $28, $28, $28, $3F, $3F, $00 !byte $00, $1E, $21, $27, $21, $3F, $1E, $00 !byte $00, $11, $2A, $2C, $28, $3F, $3F, $00 !byte $00, $26, $2F, $29, $29, $39, $11, $00 !byte $00, $20, $20, $3F, $3F, $20, $20, $00 !byte $00, $3E, $01, $01, $01, $3F, $3E, $00 !byte $00, $30, $0C, $03, $0F, $3C, $30, $00 !byte $30, $0C, $03, $0C, $03, $0F, $3C, $30 !byte $00, $33, $14, $08, $14, $33, $33, $00 !byte $00, $20, $10, $0F, $1F, $30, $20, $00 !byte $00, $31, $31, $29, $25, $23, $23, $00 ================================================ FILE: src/assets/examples/tile_sets/asm/Antiriad_Chars.asm ================================================ ; CHARSET IMAGE DATA... ; 48 images, 8 bytes per image, total size is 384 ($180) bytes. charset_data .byte $00,$00,$00,$00,$00,$00,$00,$00,$7C,$EE,$C6,$C6,$FE,$C6,$C6,$00 .byte $FC,$C6,$C6,$FC,$C6,$C6,$FE,$00,$7E,$E6,$C0,$C0,$C0,$E6,$7E,$00 .byte $FC,$CE,$C6,$C6,$C6,$CE,$FC,$00,$FE,$C6,$C0,$F8,$C0,$C6,$FE,$00 .byte $FE,$C6,$C0,$F8,$C0,$C0,$C0,$00,$7E,$E6,$C0,$CE,$C6,$E6,$7E,$00 .byte $C6,$C6,$C6,$C6,$FE,$C6,$C6,$00,$3C,$18,$18,$18,$18,$18,$3C,$00 .byte $06,$06,$06,$06,$C6,$EE,$7C,$00,$CE,$DC,$F8,$F8,$DC,$CE,$C6,$00 .byte $C0,$C0,$C0,$C0,$C0,$C6,$FE,$00,$C6,$EE,$FE,$FE,$C6,$C6,$C6,$00 .byte $C6,$E6,$F6,$FE,$DE,$CE,$C6,$00,$FC,$CE,$C6,$C6,$C6,$E6,$7E,$00 .byte $FC,$CE,$C6,$C6,$FE,$C0,$C0,$00,$FC,$CE,$C6,$C6,$E6,$7C,$0E,$00 .byte $FC,$CE,$C6,$C6,$FE,$DC,$CE,$00,$FE,$C6,$C0,$7C,$06,$C6,$FE,$00 .byte $FE,$36,$30,$30,$30,$30,$30,$00,$C6,$C6,$C6,$C6,$C6,$EE,$7C,$00 .byte $C6,$C6,$C6,$EE,$7C,$38,$10,$00,$C6,$C6,$C6,$C6,$FE,$EE,$C6,$00 .byte $C6,$6C,$38,$38,$6C,$C6,$C6,$00,$C6,$EC,$78,$30,$30,$30,$30,$00 .byte $FE,$CE,$1C,$38,$70,$E6,$FE,$00,$7C,$EE,$C6,$C6,$C6,$EE,$7C,$00 .byte $38,$18,$18,$18,$18,$18,$18,$00,$FC,$C6,$06,$1C,$70,$E0,$FE,$00 .byte $FC,$C6,$06,$3C,$06,$C6,$FC,$00,$C0,$C0,$C0,$D8,$FE,$18,$18,$00 .byte $FE,$C6,$C0,$FE,$06,$C6,$7C,$00,$1C,$38,$70,$EC,$C6,$E6,$7E,$00 .byte $FE,$C6,$0C,$18,$30,$30,$30,$00,$7C,$C6,$C6,$7C,$C6,$C6,$7C,$00 .byte $7E,$67,$63,$37,$0E,$1C,$38,$00,$00,$00,$00,$00,$00,$30,$30,$00 .byte $00,$00,$00,$00,$00,$18,$30,$00,$7E,$66,$06,$1C,$18,$00,$18,$00 .byte $18,$18,$18,$18,$18,$00,$18,$00,$18,$18,$18,$00,$00,$00,$00,$00 .byte $6C,$6C,$6C,$00,$00,$00,$00,$00,$18,$30,$30,$30,$30,$30,$18,$00 .byte $18,$0C,$0C,$0C,$0C,$0C,$18,$00,$00,$00,$FC,$7E,$00,$00,$00,$00 .byte $00,$18,$18,$7E,$18,$18,$00,$00,$00,$00,$18,$00,$00,$18,$00,$00 ; CHARSET IMAGE ATTRIBUTE DATA... ; 48 attributes, 1 attribute per image, 8 bits per attribute, total size is 48 ($30) bytes. ; nb. Upper nybbles = material, lower nybbles = colour. charset_attrib_data .byte $03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03 .byte $03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03 .byte $03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03 ================================================ FILE: src/assets/examples/tile_sets/asm/test_vchar-charset.s ================================================ ; Exported using VChar64 v0.2.4 ; Total bytes: 2048 charset: foo .byte $3c,$66,$6e,$6e,$60,$62,$3c .byte $00,$18,$3c,$66,$7e,$66,$66,$66,$00 ; 0 bar .byte $7c,$66,$66,$7c,$66,$66,$7c,$00,$3c,$66,$60,$60,$60,$66,$3c,$00 ; 16 toto .byte $78,$6c,$66,$66,$66,$6c,$78,$00,$7e,$60,$60,$78,$60,$60,$7e,$00 ; 32 .byte $7e,$60,$60,$78,$60,$60,$60,$00,$3c,$66,$60,$6e,$66,$66,$3c,$00 ; 48 .byte $66,$66,$66,$7e,$66,$66,$66,$00,$3c,$18,$18,$18,$18,$18,$3c,$00 ; 64 .byte $1e,$0c,$0c,$0c,$0c,$6c,$38,$00,$66,$6c,$78,$70,$78,$6c,$66,$00 ; 80 .byte $60,$60,$60,$60,$60,$60,$7e,$00,$63,$77,$7f,$6b,$63,$63,$63,$00 ; 96 .byte $66,$76,$7e,$7e,$6e,$66,$66,$00,$3c,$66,$66,$66,$66,$66,$3c,$00 ; 112 .byte $7c,$66,$66,$7c,$60,$60,$60,$00,$3c,$66,$66,$66,$66,$3c,$0e,$00 ; 128 .byte $7c,$66,$66,$7c,$78,$6c,$66,$00,$3c,$66,$60,$3c,$06,$66,$3c,$00 ; 144 .byte $7e,$18,$18,$18,$18,$18,$18,$00,$66,$66,$66,$66,$66,$66,$3c,$00 ; 160 .byte $66,$66,$66,$66,$66,$3c,$18,$00,$63,$63,$63,$6b,$7f,$77,$63,$00 ; 176 .byte $66,$66,$3c,$18,$3c,$66,$66,$00,$66,$66,$66,$3c,$18,$18,$18,$00 ; 192 .byte $7e,$06,$0c,$18,$30,$60,$7e,$00,$3c,$30,$30,$30,$30,$30,$3c,$00 ; 208 .byte $0c,$12,$30,$7c,$30,$62,$fc,$00,$3c,$0c,$0c,$0c,$0c,$0c,$3c,$00 ; 224 .byte $00,$18,$3c,$7e,$18,$18,$18,$18,$00,$10,$30,$7f,$7f,$30,$10,$00 ; 240 .byte $00,$00,$00,$00,$00,$00,$00,$00,$18,$18,$18,$18,$00,$00,$18,$00 ; 256 .byte $66,$66,$66,$00,$00,$00,$00,$00,$66,$66,$ff,$66,$ff,$66,$66,$00 ; 272 .byte $18,$3e,$60,$3c,$06,$7c,$18,$00,$62,$66,$0c,$18,$30,$66,$46,$00 ; 288 .byte $3c,$66,$3c,$38,$67,$66,$3f,$00,$06,$0c,$18,$00,$00,$00,$00,$00 ; 304 .byte $0c,$18,$30,$30,$30,$18,$0c,$00,$30,$18,$0c,$0c,$0c,$18,$30,$00 ; 320 .byte $00,$66,$3c,$ff,$3c,$66,$00,$00,$00,$18,$18,$7e,$18,$18,$00,$00 ; 336 .byte $00,$00,$00,$00,$00,$18,$18,$30,$00,$00,$00,$7e,$00,$00,$00,$00 ; 352 .byte $00,$00,$00,$00,$00,$18,$18,$00,$00,$03,$06,$0c,$18,$30,$60,$00 ; 368 .byte $3c,$66,$6e,$76,$66,$66,$3c,$00,$18,$18,$38,$18,$18,$18,$7e,$00 ; 384 .byte $3c,$66,$06,$0c,$30,$60,$7e,$00,$3c,$66,$06,$1c,$06,$66,$3c,$00 ; 400 .byte $06,$0e,$1e,$66,$7f,$06,$06,$00,$7e,$60,$7c,$06,$06,$66,$3c,$00 ; 416 .byte $3c,$66,$60,$7c,$66,$66,$3c,$00,$7e,$66,$0c,$18,$18,$18,$18,$00 ; 432 .byte $3c,$66,$66,$3c,$66,$66,$3c,$00,$3c,$66,$66,$3e,$06,$66,$3c,$00 ; 448 .byte $00,$00,$18,$00,$00,$18,$00,$00,$00,$00,$18,$00,$00,$18,$18,$30 ; 464 .byte $0e,$18,$30,$60,$30,$18,$0e,$00,$00,$00,$7e,$00,$7e,$00,$00,$00 ; 480 .byte $70,$18,$0c,$06,$0c,$18,$70,$00,$3c,$66,$06,$0c,$18,$00,$18,$00 ; 496 .byte $00,$00,$00,$ff,$ff,$00,$00,$00,$08,$1c,$3e,$7f,$7f,$1c,$3e,$00 ; 512 .byte $18,$18,$18,$18,$18,$18,$18,$18,$00,$00,$00,$ff,$ff,$00,$00,$00 ; 528 .byte $00,$00,$ff,$ff,$00,$00,$00,$00,$00,$ff,$ff,$00,$00,$00,$00,$00 ; 544 .byte $00,$00,$00,$00,$ff,$ff,$00,$00,$30,$30,$30,$30,$30,$30,$30,$30 ; 560 .byte $0c,$0c,$0c,$0c,$0c,$0c,$0c,$0c,$00,$00,$00,$e0,$f0,$38,$18,$18 ; 576 .byte $18,$18,$1c,$0f,$07,$00,$00,$00,$18,$18,$38,$f0,$e0,$00,$00,$00 ; 592 .byte $c0,$c0,$c0,$c0,$c0,$c0,$ff,$ff,$c0,$e0,$70,$38,$1c,$0e,$07,$03 ; 608 .byte $03,$07,$0e,$1c,$38,$70,$e0,$c0,$ff,$ff,$c0,$c0,$c0,$c0,$c0,$c0 ; 624 .byte $ff,$ff,$03,$03,$03,$03,$03,$03,$00,$3c,$7e,$7e,$7e,$7e,$3c,$00 ; 640 .byte $00,$00,$00,$00,$00,$ff,$ff,$00,$36,$7f,$7f,$7f,$3e,$1c,$08,$00 ; 656 .byte $60,$60,$60,$60,$60,$60,$60,$60,$00,$00,$00,$07,$0f,$1c,$18,$18 ; 672 .byte $c3,$e7,$7e,$3c,$3c,$7e,$e7,$c3,$00,$3c,$7e,$66,$66,$7e,$3c,$00 ; 688 .byte $18,$18,$66,$66,$18,$18,$3c,$00,$06,$06,$06,$06,$06,$06,$06,$06 ; 704 .byte $08,$1c,$3e,$7f,$3e,$1c,$08,$00,$18,$18,$18,$ff,$ff,$18,$18,$18 ; 720 .byte $c0,$c0,$30,$30,$c0,$c0,$30,$30,$18,$18,$18,$18,$18,$18,$18,$18 ; 736 .byte $00,$00,$03,$3e,$76,$36,$36,$00,$ff,$7f,$3f,$1f,$0f,$07,$03,$01 ; 752 .byte $00,$00,$00,$00,$00,$00,$00,$00,$f0,$f0,$f0,$f0,$f0,$f0,$f0,$f0 ; 768 .byte $00,$00,$00,$00,$ff,$ff,$ff,$ff,$ff,$00,$00,$00,$00,$00,$00,$00 ; 784 .byte $00,$00,$00,$00,$00,$00,$00,$ff,$c0,$c0,$c0,$c0,$c0,$c0,$c0,$c0 ; 800 .byte $cc,$cc,$33,$33,$cc,$cc,$33,$33,$03,$03,$03,$03,$03,$03,$03,$03 ; 816 .byte $00,$00,$00,$00,$cc,$cc,$33,$33,$ff,$fe,$fc,$f8,$f0,$e0,$c0,$80 ; 832 .byte $03,$03,$03,$03,$03,$03,$03,$03,$18,$18,$18,$1f,$1f,$18,$18,$18 ; 848 .byte $00,$00,$00,$00,$0f,$0f,$0f,$0f,$18,$18,$18,$1f,$1f,$00,$00,$00 ; 864 .byte $00,$00,$00,$f8,$f8,$18,$18,$18,$00,$00,$00,$00,$00,$00,$ff,$ff ; 880 .byte $00,$00,$00,$1f,$1f,$18,$18,$18,$18,$18,$18,$ff,$ff,$00,$00,$00 ; 896 .byte $00,$00,$00,$ff,$ff,$18,$18,$18,$18,$18,$18,$f8,$f8,$18,$18,$18 ; 912 .byte $c0,$c0,$c0,$c0,$c0,$c0,$c0,$c0,$e0,$e0,$e0,$e0,$e0,$e0,$e0,$e0 ; 928 .byte $07,$07,$07,$07,$07,$07,$07,$07,$ff,$ff,$00,$00,$00,$00,$00,$00 ; 944 .byte $ff,$ff,$ff,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$ff,$ff,$ff ; 960 .byte $03,$03,$03,$03,$03,$03,$ff,$ff,$00,$00,$00,$00,$f0,$f0,$f0,$f0 ; 976 .byte $0f,$0f,$0f,$0f,$00,$00,$00,$00,$18,$18,$18,$f8,$f8,$00,$00,$00 ; 992 .byte $f0,$f0,$f0,$f0,$00,$00,$00,$00,$f0,$f0,$f0,$f0,$0f,$0f,$0f,$0f ; 1008 .byte $c3,$99,$91,$91,$9f,$99,$c3,$ff,$e7,$c3,$99,$81,$99,$99,$99,$ff ; 1024 .byte $83,$99,$99,$83,$99,$99,$83,$ff,$c3,$99,$9f,$9f,$9f,$99,$c3,$ff ; 1040 .byte $87,$93,$99,$99,$99,$93,$87,$ff,$81,$9f,$9f,$87,$9f,$9f,$81,$ff ; 1056 .byte $81,$9f,$9f,$87,$9f,$9f,$9f,$ff,$c3,$99,$9f,$91,$99,$99,$c3,$ff ; 1072 .byte $99,$99,$99,$81,$99,$99,$99,$ff,$c3,$e7,$e7,$e7,$e7,$e7,$c3,$ff ; 1088 .byte $e1,$f3,$f3,$f3,$f3,$93,$c7,$ff,$99,$93,$87,$8f,$87,$93,$99,$ff ; 1104 .byte $9f,$9f,$9f,$9f,$9f,$9f,$81,$ff,$9c,$88,$80,$94,$9c,$9c,$9c,$ff ; 1120 .byte $99,$89,$81,$81,$91,$99,$99,$ff,$c3,$99,$99,$99,$99,$99,$c3,$ff ; 1136 .byte $83,$99,$99,$83,$9f,$9f,$9f,$ff,$c3,$99,$99,$99,$99,$c3,$f1,$ff ; 1152 .byte $83,$99,$99,$83,$87,$93,$99,$ff,$c3,$99,$9f,$c3,$f9,$99,$c3,$ff ; 1168 .byte $81,$e7,$e7,$e7,$e7,$e7,$e7,$ff,$99,$99,$99,$99,$99,$99,$c3,$ff ; 1184 .byte $99,$99,$99,$99,$99,$c3,$e7,$ff,$9c,$9c,$9c,$94,$80,$88,$9c,$ff ; 1200 .byte $99,$99,$c3,$e7,$c3,$99,$99,$ff,$99,$99,$99,$c3,$e7,$e7,$e7,$ff ; 1216 .byte $81,$f9,$f3,$e7,$cf,$9f,$81,$ff,$c3,$cf,$cf,$cf,$cf,$cf,$c3,$ff ; 1232 .byte $f3,$ed,$cf,$83,$cf,$9d,$03,$ff,$c3,$f3,$f3,$f3,$f3,$f3,$c3,$ff ; 1248 .byte $ff,$e7,$c3,$81,$e7,$e7,$e7,$e7,$ff,$ef,$cf,$80,$80,$cf,$ef,$ff ; 1264 .byte $ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$e7,$e7,$e7,$e7,$ff,$ff,$e7,$ff ; 1280 .byte $99,$99,$99,$ff,$ff,$ff,$ff,$ff,$99,$99,$00,$99,$00,$99,$99,$ff ; 1296 .byte $e7,$c1,$9f,$c3,$f9,$83,$e7,$ff,$9d,$99,$f3,$e7,$cf,$99,$b9,$ff ; 1312 .byte $c3,$99,$c3,$c7,$98,$99,$c0,$ff,$f9,$f3,$e7,$ff,$ff,$ff,$ff,$ff ; 1328 .byte $f3,$e7,$cf,$cf,$cf,$e7,$f3,$ff,$cf,$e7,$f3,$f3,$f3,$e7,$cf,$ff ; 1344 .byte $ff,$99,$c3,$00,$c3,$99,$ff,$ff,$ff,$e7,$e7,$81,$e7,$e7,$ff,$ff ; 1360 .byte $ff,$ff,$ff,$ff,$ff,$e7,$e7,$cf,$ff,$ff,$ff,$81,$ff,$ff,$ff,$ff ; 1376 .byte $ff,$ff,$ff,$ff,$ff,$e7,$e7,$ff,$ff,$fc,$f9,$f3,$e7,$cf,$9f,$ff ; 1392 .byte $c3,$99,$91,$89,$99,$99,$c3,$ff,$e7,$e7,$c7,$e7,$e7,$e7,$81,$ff ; 1408 .byte $c3,$99,$f9,$f3,$cf,$9f,$81,$ff,$c3,$99,$f9,$e3,$f9,$99,$c3,$ff ; 1424 .byte $f9,$f1,$e1,$99,$80,$f9,$f9,$ff,$81,$9f,$83,$f9,$f9,$99,$c3,$ff ; 1440 .byte $c3,$99,$9f,$83,$99,$99,$c3,$ff,$81,$99,$f3,$e7,$e7,$e7,$e7,$ff ; 1456 .byte $c3,$99,$99,$c3,$99,$99,$c3,$ff,$c3,$99,$99,$c1,$f9,$99,$c3,$ff ; 1472 .byte $ff,$ff,$e7,$ff,$ff,$e7,$ff,$ff,$ff,$ff,$e7,$ff,$ff,$e7,$e7,$cf ; 1488 .byte $f1,$e7,$cf,$9f,$cf,$e7,$f1,$ff,$ff,$ff,$81,$ff,$81,$ff,$ff,$ff ; 1504 .byte $8f,$e7,$f3,$f9,$f3,$e7,$8f,$ff,$c3,$99,$f9,$f3,$e7,$ff,$e7,$ff ; 1520 .byte $ff,$ff,$ff,$00,$00,$ff,$ff,$ff,$f7,$e3,$c1,$80,$80,$e3,$c1,$ff ; 1536 .byte $e7,$e7,$e7,$e7,$e7,$e7,$e7,$e7,$ff,$ff,$ff,$00,$00,$ff,$ff,$ff ; 1552 .byte $ff,$ff,$00,$00,$ff,$ff,$ff,$ff,$ff,$00,$00,$ff,$ff,$ff,$ff,$ff ; 1568 .byte $ff,$ff,$ff,$ff,$00,$00,$ff,$ff,$cf,$cf,$cf,$cf,$cf,$cf,$cf,$cf ; 1584 .byte $f3,$f3,$f3,$f3,$f3,$f3,$f3,$f3,$ff,$ff,$ff,$1f,$0f,$c7,$e7,$e7 ; 1600 .byte $e7,$e7,$e3,$f0,$f8,$ff,$ff,$ff,$e7,$e7,$c7,$0f,$1f,$ff,$ff,$ff ; 1616 .byte $3f,$3f,$3f,$3f,$3f,$3f,$00,$00,$3f,$1f,$8f,$c7,$e3,$f1,$f8,$fc ; 1632 .byte $fc,$f8,$f1,$e3,$c7,$8f,$1f,$3f,$00,$00,$3f,$3f,$3f,$3f,$3f,$3f ; 1648 .byte $00,$00,$fc,$fc,$fc,$fc,$fc,$fc,$ff,$c3,$81,$81,$81,$81,$c3,$ff ; 1664 .byte $ff,$ff,$ff,$ff,$ff,$00,$00,$ff,$c9,$80,$80,$80,$c1,$e3,$f7,$ff ; 1680 .byte $9f,$9f,$9f,$9f,$9f,$9f,$9f,$9f,$ff,$ff,$ff,$f8,$f0,$e3,$e7,$e7 ; 1696 .byte $3c,$18,$81,$c3,$c3,$81,$18,$3c,$ff,$c3,$81,$99,$99,$81,$c3,$ff ; 1712 .byte $e7,$e7,$99,$99,$e7,$e7,$c3,$ff,$f9,$f9,$f9,$f9,$f9,$f9,$f9,$f9 ; 1728 .byte $f7,$e3,$c1,$80,$c1,$e3,$f7,$ff,$e7,$e7,$e7,$00,$00,$e7,$e7,$e7 ; 1744 .byte $3f,$3f,$cf,$cf,$3f,$3f,$cf,$cf,$e7,$e7,$e7,$e7,$e7,$e7,$e7,$e7 ; 1760 .byte $ff,$ff,$fc,$c1,$89,$c9,$c9,$ff,$00,$80,$c0,$e0,$f0,$f8,$fc,$fe ; 1776 .byte $ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$0f,$0f,$0f,$0f,$0f,$0f,$0f,$0f ; 1792 .byte $ff,$ff,$ff,$ff,$00,$00,$00,$00,$00,$ff,$ff,$ff,$ff,$ff,$ff,$ff ; 1808 .byte $ff,$ff,$ff,$ff,$ff,$ff,$ff,$00,$3f,$3f,$3f,$3f,$3f,$3f,$3f,$3f ; 1824 .byte $33,$33,$cc,$cc,$33,$33,$cc,$cc,$fc,$fc,$fc,$fc,$fc,$fc,$fc,$fc ; 1840 .byte $ff,$ff,$ff,$ff,$33,$33,$cc,$cc,$00,$01,$03,$07,$0f,$1f,$3f,$7f ; 1856 .byte $fc,$fc,$fc,$fc,$fc,$fc,$fc,$fc,$e7,$e7,$e7,$e0,$e0,$e7,$e7,$e7 ; 1872 .byte $ff,$ff,$ff,$ff,$f0,$f0,$f0,$f0,$e7,$e7,$e7,$e0,$e0,$ff,$ff,$ff ; 1888 .byte $ff,$ff,$ff,$07,$07,$e7,$e7,$e7,$ff,$ff,$ff,$ff,$ff,$ff,$00,$00 ; 1904 .byte $ff,$ff,$ff,$e0,$e0,$e7,$e7,$e7,$e7,$e7,$e7,$00,$00,$ff,$ff,$ff ; 1920 .byte $ff,$ff,$ff,$00,$00,$e7,$e7,$e7,$e7,$e7,$e7,$07,$07,$e7,$e7,$e7 ; 1936 .byte $3f,$3f,$3f,$3f,$3f,$3f,$3f,$3f,$1f,$1f,$1f,$1f,$1f,$1f,$1f,$1f ; 1952 .byte $f8,$f8,$f8,$f8,$f8,$f8,$f8,$f8,$00,$00,$ff,$ff,$ff,$ff,$ff,$ff ; 1968 .byte $00,$00,$00,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff,$00,$00,$00 ; 1984 .byte $fc,$fc,$fc,$fc,$fc,$fc,$00,$00,$ff,$ff,$ff,$ff,$0f,$0f,$0f,$0f ; 2000 .byte $f0,$f0,$f0,$f0,$ff,$ff,$ff,$ff,$e7,$e7,$e7,$07,$07,$ff,$ff,$ff ; 2016 .byte $0f,$0f,$0f,$0f,$ff,$ff,$ff,$ff,$0f,$0f,$0f,$0f,$f0,$f0,$f0,$f0 ; 2032 CHARSET_COUNT = 2048 ================================================ FILE: src/assets/examples/tile_sets/asm/tile_8x6_shapeA.txt ================================================ !byte 0x00, 0x1F, 0x28, 0x28, 0x28, 0x3F, 0x1F, 0x00 ================================================ FILE: src/assets/examples/tile_sets/asm/tile_8x6_shapeA_rotated.txt ================================================ !byte 0,0,60,98,126,98,98,98 ================================================ FILE: src/assets/examples/tile_sets/asm/tiles_all.asm ================================================ Charset_00_data: !byte $18, $24, $18, $66, $BD, $3C, $24, $24 ================================================ FILE: src/assets/examples/tile_sets/asm/tiles_all_2.asm ================================================ ; Generated by CharPad 2.7, assemble with 64TASS or similar. ; Character display mode : Multi-colour (MCM). ; Character colouring method : Per-Map. ; Colour values... COLR_SCREEN = 9 COLR_CHAR_DEF = 3 COLR_CHAR_MC1 = 0 COLR_CHAR_MC2 = 1 ; Quantities and dimensions... CHAR_COUNT = 256 MAP_WID = 40 MAP_HEI = 25 ; Data block sizes (in bytes)... SZ_CHARSET_DATA = 2048 SZ_CHARSET_ATTRIB_DATA = 256 SZ_MAP_DATA = 1000 ; Data block addresses (dummy values)... ADDR_CHARSET_DATA = $1000 ; block size = $0800, label = 'charset_data'. ADDR_CHARSET_ATTRIB_DATA = $2000 ; block size = $0100, label = 'charset_attrib_data'. ADDR_MAP_DATA = $5000 ; block size = $03e8, label = 'map_data'. ; * INSERT EXAMPLE PROGRAM HERE! * (Or just include this file in your project). ; CHARSET IMAGE DATA... ; 256 images, 8 bytes per image, total size is 2048 ($800) bytes. charset_data bar .byte $18,$24,$18 foo .byte $66,$bd,$3c,$24,$24, $11,$22,$33,$44,$55,$66,$77,$88 .byte $99,$AA,$BB,$CC,$DD,$EE,$FF,$10 .byte $20,$30,$40,$50,$60,$70,$80,$90,$00,$01,$02,$03,$04,$05,$06,$07,$08,$09,$0A,$0B,$0C,$0D,$0E,$0F .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 ; CHARSET IMAGE ATTRIBUTE DATA... ; 256 attributes, 1 attribute per image, 8 bits per attribute, total size is 256 ($100) bytes. ; nb. Upper nybbles = material, lower nybbles = colour. charset_attrib_data .byte $03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03 .byte $03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03 .byte $03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03 .byte $03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03 .byte $03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03 .byte $03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03 .byte $03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03 .byte $03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03 .byte $03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03 .byte $03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03 .byte $03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03 .byte $03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03 .byte $03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03 .byte $03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03 .byte $03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03 .byte $03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03 ; MAP DATA... ; 40x25 (1000) cells, 8 bits per cell, total size is 1000 ($3e8) bytes. map_data .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00 ================================================ FILE: src/assets/examples/tile_sets/asm/tiles_bin.asm ================================================ .byte %01010101 .byte %11111111 .byte %10101010 .byte %00110011 .byte %11001100 .byte %01010101 .byte %10101010 .byte %11111111 ================================================ FILE: src/assets/examples/tile_sets/asm/tiles_charPad.asm ================================================ ; CHARSET IMAGE DATA... ; 256 images, 8 bytes per image, total size is 2048 ($800) bytes. charset_data .byte $18,$24,$18,$66,$bd,$3c,$24,$24,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 ; CHARSET IMAGE ATTRIBUTE DATA... ; 256 attributes, 1 attribute per image, 8 bits per attribute, total size is 256 ($100) bytes. ; nb. Upper nybbles = material, lower nybbles = colour. charset_attrib_data .byte $03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03 .byte $03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03 .byte $03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03 .byte $03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03 .byte $03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03 .byte $03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03 .byte $03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03 .byte $03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03 .byte $03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03 .byte $03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03 .byte $03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03 .byte $03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03 .byte $03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03 .byte $03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03 .byte $03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03 .byte $03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03 ================================================ FILE: src/assets/examples/tile_sets/asm/tiles_magellan.a99 ================================================ PAT0 DATA >1824,>1866,>BD3C,>2424 PAT1 DATA >0000,>0000,>0000,>0000 ================================================ FILE: src/assets/examples/tile_sets/asm/tiles_magellan_2.a99 ================================================ CLRNUM DATA 256 CLRSET BYTE >10,>10,>10,>10 BYTE >10,>10,>10,>10 BYTE >10,>10,>10,>10 BYTE >10,>10,>10,>10 BYTE >10,>10,>10,>10 BYTE >10,>10,>10,>10 BYTE >10,>10,>10,>10 BYTE >10,>10,>10,>10 BYTE >10,>10,>10,>10 BYTE >10,>10,>10,>10 BYTE >10,>10,>10,>10 BYTE >10,>10,>10,>10 BYTE >10,>10,>10,>10 BYTE >10,>10,>10,>10 BYTE >10,>10,>10,>10 BYTE >10,>10,>10,>10 BYTE >10,>10,>10,>10 BYTE >10,>10,>10,>10 BYTE >10,>10,>10,>10 BYTE >10,>10,>10,>10 BYTE >10,>10,>10,>10 BYTE >10,>10,>10,>10 BYTE >10,>10,>10,>10 BYTE >10,>10,>10,>10 BYTE >10,>10,>10,>10 BYTE >10,>10,>10,>10 BYTE >10,>10,>10,>10 BYTE >10,>10,>10,>10 BYTE >10,>10,>10,>10 BYTE >10,>10,>10,>10 BYTE >10,>10,>10,>10 BYTE >10,>10,>10,>10 BYTE >10,>10,>10,>10 BYTE >10,>10,>10,>10 BYTE >10,>10,>10,>10 BYTE >10,>10,>10,>10 BYTE >10,>10,>10,>10 BYTE >10,>10,>10,>10 BYTE >10,>10,>10,>10 BYTE >10,>10,>10,>10 BYTE >10,>10,>10,>10 BYTE >10,>10,>10,>10 BYTE >10,>10,>10,>10 BYTE >10,>10,>10,>10 BYTE >10,>10,>10,>10 BYTE >10,>10,>10,>10 BYTE >10,>10,>10,>10 BYTE >10,>10,>10,>10 BYTE >10,>10,>10,>10 BYTE >10,>10,>10,>10 BYTE >10,>10,>10,>10 BYTE >10,>10,>10,>10 BYTE >10,>10,>10,>10 BYTE >10,>10,>10,>10 BYTE >10,>10,>10,>10 BYTE >10,>10,>10,>10 BYTE >10,>10,>10,>10 BYTE >10,>10,>10,>10 BYTE >10,>10,>10,>10 BYTE >10,>10,>10,>10 BYTE >10,>10,>10,>10 BYTE >10,>10,>10,>10 BYTE >10,>10,>10,>10 BYTE >10,>10,>10,>10 PAT0 DATA >0000,>0000,>0000,>0000 PAT1 DATA >0000,>0000,>0000,>0000 MCOUNT DATA 1 MC0 DATA 0 MS0 DATA >0020,>0018,>0300 MD0 DATA >8083,>8283,>8485,>8687 DATA >8889,>8A8B,>8C8D,>8E20 DATA >2020,>2020,>2020,>2020 DATA >2020,>2020,>2020,>2020 DATA >2020,>2020,>2020,>2020 DATA >2020,>2020,>2020,>2020 DATA >2020,>2020,>2020,>2020 DATA >2020,>2020,>2020,>2020 DATA >2020,>2020,>2020,>2020 DATA >2020,>2020,>2020,>2020 DATA >2020,>2020,>2020,>2020 DATA >2020,>2020,>2020,>2020 DATA >2020,>2020,>2020,>2020 DATA >2020,>2020,>2020,>2020 DATA >2020,>2020,>2020,>2020 DATA >2020,>2020,>2020,>2020 DATA >2020,>2020,>2020,>2020 DATA >2020,>2020,>2020,>2020 DATA >2020,>2020,>2020,>2020 DATA >2020,>2020,>2020,>2020 DATA >2020,>8520,>2080,>2020 DATA >2020,>2020,>2020,>2020 DATA >2020,>2020,>2020,>2020 DATA >2020,>2020,>2020,>2020 DATA >2020,>2020,>2020,>2020 DATA >8520,>2020,>2020,>2020 DATA >2020,>2020,>2020,>2020 DATA >2020,>2020,>2020,>2020 DATA >2020,>2020,>2020,>2020 DATA >2020,>2020,>2020,>2020 DATA >2020,>2020,>2020,>2020 DATA >2020,>2020,>2020,>2020 DATA >2020,>2020,>8020,>2020 DATA >2020,>2020,>2020,>2020 DATA >2020,>2020,>2020,>2020 DATA >2020,>2020,>2020,>2020 DATA >2020,>2020,>2020,>2020 DATA >2020,>2020,>2020,>2020 DATA >2020,>2020,>2020,>2020 DATA >2020,>2020,>2020,>2020 DATA >2020,>2020,>2020,>2020 DATA >2020,>2020,>2020,>2020 DATA >2020,>2020,>2020,>2020 DATA >2020,>2020,>2020,>2020 DATA >2020,>2020,>2020,>2020 DATA >2020,>2020,>2020,>2020 DATA >2020,>2020,>2020,>2020 DATA >2020,>2020,>2020,>2020 DATA >2020,>2020,>2020,>2020 DATA >2020,>2020,>2020,>2020 DATA >2020,>2020,>2020,>2020 DATA >2020,>2020,>2020,>2020 DATA >2020,>2020,>2020,>2020 DATA >8020,>2020,>2020,>2020 DATA >2020,>2020,>2020,>2020 DATA >2020,>2020,>2020,>2020 DATA >2020,>2020,>2020,>2020 DATA >2020,>2020,>2020,>2020 DATA >2020,>2020,>2020,>2020 DATA >2020,>2020,>2020,>2020 DATA >2020,>2020,>2020,>2020 DATA >2020,>2020,>2020,>2020 DATA >2020,>2020,>2020,>2020 DATA >2020,>2020,>2020,>2020 DATA >2020,>2020,>2020,>2020 DATA >2020,>2020,>2020,>2020 DATA >2020,>2020,>2020,>2020 DATA >2020,>2020,>2020,>2020 DATA >2020,>2020,>2020,>2020 DATA >2020,>2020,>2020,>2020 DATA >2020,>2020,>2020,>2020 DATA >2020,>2020,>2020,>2020 DATA >2020,>2020,>2020,>2020 DATA >2020,>2020,>2020,>2020 DATA >2020,>2020,>2020,>2020 DATA >2020,>2020,>2020,>2020 DATA >2020,>2020,>2020,>2020 DATA >2020,>2020,>2020,>2020 DATA >2020,>2020,>2020,>2020 DATA >2020,>2020,>2020,>2020 DATA >2020,>2020,>2020,>2020 DATA >2020,>2020,>2020,>2020 DATA >2020,>2020,>2020,>2020 DATA >2020,>2020,>2020,>2020 DATA >2020,>2020,>2020,>2020 DATA >2020,>2020,>2020,>2020 DATA >2020,>2020,>2020,>2020 DATA >2020,>2020,>2020,>2020 DATA >2020,>2020,>2020,>2020 DATA >2020,>2020,>2020,>2020 DATA >2020,>2020,>2020,>2020 DATA >2020,>2020,>2020,>2020 DATA >2020,>2020,>2020,>2020 DATA >2020,>2020,>2020,>2020 DATA >2020,>2020,>2020,>2020 DATA >2020,>2020,>2020,>2020 ================================================ FILE: src/assets/examples/tile_sets/basic/test.txt ================================================ 20 SYMBOL AFTER 32 30 REM Upper case chars 40 SYMBOL 65,126,66,66,126,98,98,98,0 50 SYMBOL 66,126,66,66,126,98,98,126,0 60 SYMBOL 67,126,64,64,96,96,96,126,0 70 SYMBOL 68,254,66,66,98,98,98,254,0 80 SYMBOL 69,126,64,64, 120,96,96,126,0 90 SYMBOL 70,126,64,64,120,96,96,96,0 100 SYMBOL 71,126,64,64,102,98,98,126,0 110 SYMBOL 72,66,66,66,126,98,98,98,0 120 SYMBOL 73,60,16,16,24,24,24,60,0 130 SYMBOL 74,126,8,8,24,24,24,120,0 140 SYMBOL 75,68,68,68, 120,100,100,100,0 150 SYMBOL 76,64,64,64,96,96,96, 126,0 160 SYMBOL 77,126,74,74,98,98,98,98,0 170 SYMBOL 78,98,82,74,102,98,98,98,0 180 SYMBOL 79,126,66,66,98,98,98,126,0 190 SYMBOL 80,126,66,66,126,96,96,96,0 200 SYMBOL 81,126,66,66,98,98,106,126,4 210 SYMBOL 82,126,66,66,126,106,100,98,0 220 SYMBOL 83,126,64,64,126,6,6,126,0 230 SYMBOL 84,126,16,16,24,24,24,24,0 240 SYMBOL 85,66,66,66,98,98,98,126,0 250 SYMBOL 86,66,66,66,66,66,36,24,0 260 SYMBOL 87,66,66,66,98,106,106,126,0 270 SYMBOL 88,102,102,36,24,36,102,102,0 280 SYMBOL 89,66,66,126,16,24,24,24,0 290 SYMBOL 90,126,4,8,16,32,64,126,0 295 REM Lower case chars 300 SYMBOL 97,0,0,126,6,126,70,126,0 310 SYMBOL 98,96,96,96,126,98,98,126,0 320 SYMBOL 99,0,0,126,96,96,96,126,0 330 SYMBOL 100,6,6,6,126,70,70,126,0 340 SYMBOL 101,0,0,126,98,126,96,126,0 350 SYMBOL 102,60,48,48,120,48,48,48,0 360 SYMBOL 103,0,0,126,70,70,126,6,126 370 SYMBOL 104,96,96,96,126,98,98,98,0 380 SYMBOL 105,24,0,24,24,24,24,24,0 390 SYMBOL 106,6,0,6,6,6,6,6,126 400 SYMBOL 107,96,96,102,108,120,108, 102,0 410 SYMBOL 108,24,24,24,24,24,24,24,0 420 SYMBOL 109,0,0,126,90,90,66,66,0 430 SYMBOL 110,0,0,108,114,98,98,98,0 440 SYMBOL 111,0,0,126,102,102,102,126,0 450 SYMBOL 112,0,0,126,98,98,126,96,96 460 SYMBOL 113,8,0,126,70,70,126,6,6 470 SYMBOL 114,0,0,108,114,96,96,96,0 480 SYMBOL 115,0,0,126,96,126,6,126,0 490 SYMBOL 116,24,62,24,24,24,24,30,0 500 SYMBOL 117,0,0,102,102,102,102,126,0 510 SYMBOL 118,0,0,102,102,102,60,24,0 520 SYMBOL 119,0,0,66,66,90,90,126,0 530 SYMBOL 120,0,0,198,104,16,104,198,0 540 SYMBOL 121,0,0,102,102,102,126,6,126 550 SYMBOL 122,0,0,126,12,24,48,126,0 555 REM Numbers 560 SYMBOL 48,126,102,110,118,102,102,126,0 570 SYMBOL 49,24,56,24,24,24,24,126,0 580 SYMBOL 50,126,2,2,126,96,96,126,0 590 SYMBOL 51,126,2,2,30,6,6,126,0 600 SYMBOL 52,96,96,96,96,104,126,8,8 610 SYMBOL 53,126,64,126,6,6,6,126,0 620 SYMBOL 54,126,64,64,126,98,98,126,0 630 SYMBOL 55,126,2,4,62,16,32,64,0 640 SYMBOL 56,126,66,66,126,66,66,126,0 650 SYMBOL 57,126,66,66,126,6,6,6,0 680 SYMBOL 95,0,255,0,0,0,0,0,0 ================================================ FILE: src/assets/examples/tile_sets/basic/tiles_atari.bas ================================================ 1560 DATA 0,6,15,249,239,6,0,0 1570 DATA 34,148,65,58,124,62,122,60 1580 DATA 251,251,251,0,223,223,223,223 1590 DATA 255,0,118,118,0,94,94,94 1600 DATA 195,195,255,255,195,195,255,255 1610 DATA 15,27,55,0,55,54,55,55 1620 DATA 248,108,118,0,118,54,118,118 1630 DATA 1,3,7,11,10,11,11,11 1640 DATA 128,192,224,208,80,208,208,208 1650 DATA 62,123,251,255,110,26,114,67 1660 DATA 62,123,251,254,244,100,12,8 1670 DATA 124,222,223,255,118,88,78,194 1680 DATA 124,222,222,127,47,38,48,16 1690 DATA 126,219,219,254,232,92,22,48 1700 DATA 126,219,219,127,23,58,104,12 1710 DATA 12,30,181,127,59,63,126,212 1720 DATA 12,30,53,127,191,63,126,170 1730 DATA 48,120,173,254,220,252,126,39 1740 DATA 48,120,172,254,253,252,126,101 1750 DATA 0,6,15,249,239,6,0,0 1760 DATA 68,41,130,92,62,116,126,60 1770 DATA 251,251,251,0,223,223,223,223 1780 DATA 255,0,118,118,0,94,94,94 1790 DATA 195,195,255,255,195,195,255,255 1800 DATA 15,27,55,0,55,54,55,55 1810 DATA 248,108,118,0,118,54,118,118 1820 DATA 1,3,7,11,10,11,11,11 ================================================ FILE: src/assets/examples/tile_sets/basic/tiles_atari_2.bas ================================================ 0A=PEEK(106)-4:POK.106,A:GR.17:U=256*A:F.I=28TO432:POK.U+I,PEEK(57344+I):N.I:F.I=64TO79:REA.J:POK.U+I,J:N.I:H=400 1DIMN(255):POK.756,A:M=47:F.I=0TO4:REA.L:POK.708+I,L:N.I:B=PEEK(88)+PEEK(89)*256:O=B+59:Z=125:D=B+460:T=B+210:E=10 2P=T:L=26:?#6;CHR$(Z);"USE IJKL SPC":K=1:Q=.9:G=B:U=3:J=0:F.I=0TO127:N(I)=0:N(I+128)=0:POK.O+1+INT(RND(0)*H),M:N.I 3N(0)=1:N(5)=20:N(13)=-20:N(1)=-1:W=132:POS.6,1:?#6;" MINES+ ":F.I=0TO19:POK.O-I,73:POK.D+I,73:N.I:D.0,60,126,126 4R=J*(J>R)+R*(J<=R):POS.1,0:?#6;9-F;" ";CHR$(136);U;" ";J;" hi ";R:IFPEEK(P)=W THENJ=J+9:F=F-(F>0):SO.0,Z,E,E 5SE.4,0,0:Y=0:IFQ=K*500 THENU=U+(U<9):K=K+1:F=0:L=74 6POK.P,200:S=PEEK(764):SO.0,0,0,0:IFS<>9THENPOK.764,9:IFN(S)THENPOK.P,M:P=P+N(S):J=J+1:Y=1:Q=Q-.0005:SO.0,99,E,E 7POK.G,W:G=B:POK.729,0:IFY*(INT(J/4)=J/4)THENG=O+1+INT(RND(1)*H):POK.G,68:D.126,126,60,0,0,170,85,170,85,170,85 8U=(P>O)*(PM)*(U>0))GOTO4:SO.0,99,8,9:POK.P,138:U=U-1:F=0:ON(U>0)GOTO4:SO.0,0,0,0:F.I=0TO2600:N.I:G.2 ================================================ FILE: src/assets/examples/tile_sets/basic/tiles_bbc.bas ================================================ 10 REM Walking alien 20 MODE 6 30 VDU 23,240,153,189,219,126,36,60,36,36 40 PRINT TAB(0,10);CHR$(240) 50 FOR I%=1 TO 19 60 PRINT TAB(I%-1,10);" " 70 PRINT TAB(I%,10);CHR$(240) 80 FOR J%=1 TO 500: NEXT J% 90 NEXT I% 100 END ================================================ FILE: src/assets/examples/tile_sets/basic/tiles_cbm.bas ================================================ 000 REM ** USER DEFINED GRAPHICS ** 001 REM ** BY SHANE JOLLY ** 100 PRINT "♥": PRINT TAB(12)"PLEASE WAIT..." 110 PRINT CHR$(142) 120 POKE 52, 48: POKE 56, 48 130 POKE UG=12288;CG=53248 140 POKE 56334, PEEK(56334) AND 254 150 POKE 1, PEEK(1) AND 251 160 FOR K=1 TO 2047 170 POKE UG+K, PEEK(CG+K) 180 NEXT 190 POKE 1, PEEK(1) OR 4 200 POKE 56334, PEEK(6334) OR 1 210 POKE 53272, (PEEK(53272) AND 240)+12 220 FOR CC=1 TO 9 230 FOR J=0 TO 7 240 READ A: POKE UG+8*CC+J, A 250 NEXT J 260 NEXT CC 270 FOR N=65 TO 90 280 PRINT CHR$(N);" "; 290 NEXT N 300 DATA 000, 016, 040, 068, 124, 068, 068, 000 310 DATA 000, 120, 072, 124, 068, 068, 124, 000 320 DATA 000, 124, 068, 064, 064, 068, 124, 000 330 DATA 000, 120, 068, 068, 068, 068, 120, 000 340 DATA 000, 124, 068, 112, 112, 068, 124, 000 350 DATA 000, 124, 068, 112, 064, 064, 064, 000 360 DATA 000, 124, 068, 064, 064, 078, 124, 000 370 DATA 000, 068, 068, 124, 124, 068, 068, 000 380 DATA 000, 056, 016, 016, 016, 016, 056, 000 ================================================ FILE: src/assets/examples/tile_sets/basic/tiles_cbm_10_liner.bas ================================================ 0l=32:v=36878:fOk=.to4:rEb$:fOi=1to8:pO7167+i+k*8,aS(mI(b$,i)):pO7421+i,.:nE:nE 1pO52,26:pO56,26:n=1:t=30720:pOv-9,255:pOv+1,8:?"{clear}{reverse on}{yellow}ijkl":x=3:p=7955:ifj>rtHr=j 2wA198,1:g(0)=211:g(1)=209:g(2)=215:g(3)=218:pO650,128:u=22:k=7745:y=7732:z=y-8 3gEa$:b=z+rN(.)*464:q=rN(1)*4:pOb,g(q):pOb+t,q+2:ifj>=100*ntHx=x-(x<9):n=n+1 4pOk+i,l:pOy+i*u,l:i=i+1:ifi<=utHpOk+i,4:pOk+i+t,6:pOy+i*u,4:pOy+i*u+t,7:m=pE(p) 5g=.:x=x+(m=4):e=saN1:c=s-1+e:ifi>utHi=.:y=z+rN(.)*u-1:k=z+u*int((p-z)/u)-1 6ifc=sG(c)tHg=1:h=s+1:pOp,l:p=p+c*21*e+c:d=pE(p):ifd=ftHw=w-(d>l):j=j-(w>1)*w 7pOp+t,7:?"{home}{reverse on}{red}g{green}e{cyan}m{purple}s{white}"j" {blue}hi{cyan}"r" {yellow}{reverse off}b{green}{reverse on}"x:ifd>ltHifgtHpOv,9:pOv,.:dA"{24}{60}{24}{102}{153}{24}{36}{102}" 8pOp,h:w=-w*(d=f):s=aS(a$+"@")-74:dA"{24}{44}{152}{110}{25}{24}{40}{40}","{24}{36}{24}{102}{153}{24}{36}{102}","{24}{52}{25}{118}{152}{24}{40}{40}","{ 24}{ 36}{ 90}{189}{189}{ 90}{ 36}{ 24}" 9f=d:on-(x>.aNp<8186aNp>=z)gO3:?sP7)"{reverse on}{red}game over":fOa=.tov/9:nE:pO198,0:j=.:gO1 ================================================ FILE: src/assets/examples/tile_sets/basic/tiles_cbm_10_liner_2.bas ================================================ 0pO56,26:pO52,26:v=36878:x=132:pOv-9,255:fOp=.to39:rEb:pO7168+p,b:pO7421+p,.:nE 1e=22:z=218:o=4:y=3:b=7:p=8174:pO650,z:?"{clear}{black}{reverse on}jl":l$="{green}{68*2}{black}{66}":r$="{black}{67}{green}{68*2}":ifi>rtHr=i 2n=v+1:t=30720:pOn,59:wA198,1:?"{clear}":fOi=3toe:?tA4)"{green}{68}{black}{reverse on}{230}{191}"sP8)"{191}{230}{reverse off}{green}{68}":nE:d=1:i=. 3b=b+f:i=i+1:if(iaNy)=ytHd=int(rN(.)*3):ifb<4tHifo<6tHb=4:y=7:dA24,189,255,165 4s=int(rN(.)*(b+1)):ifpE(p-e)<>32tHpOn,42:pOv,15:pOv,.:l=l+1:fOf=-9tox:nE:pOn,59 5c$=" ":gEa$:ifiaN1tHc$="{31}@":ifl<.tHl=.:dA36,189,255,165,90,102,90,60,36,219,255 6?"{home}{down}{left}{148}":pOz,x:pOp+t,2:pOp,1:ifpE(p-e)=4tHl=9:dA195,93,114,101,66,93,114,101,66 7?sPo)l$sPs)c$sPb-s)r$:ifa$<>""tHk=aS(a$):p=p+(k=74)-(k=76):dA93,39,83,33,93,39 8?"{home}{red}a{reverse on}"l" {purple}"i" {black}"r:f=(iaN127)=.:l=l+f:ifo>1-dtHifo+d+b<17tHo=o-1+d:dA83,33,8,28 9on-(l<9)gO3:?"{home}{down*2}"sP8)"{black}{reverse on}{191} {red}end {black}{191}":fOs=ttov:nE:l=.:pO198,0:gO1:dA62,28,62,8,8, ================================================ FILE: src/assets/examples/tile_sets/basic/tiles_cbm_10_liner_3.bas ================================================ 0pO56,28:pO52,28:n=36879:w=49:rEb$:fOk=1to48:pO7559+k,aS(mI(b$,k)):pO7421+k,.:nE 1v=n-1:pOv-9,255:g=198:u=22:z=8186:t=30720:h=52:pOn,8:?"{clear}{reverse on}{green}ijkl":wAg,1:pO650,128 2l=.:x=5:y=44:m=9:o=7723:?"{clear}":p=7933:fOa=.to9:fOd=.to9+j/2:goS9:pOf+t,5:pOf,w:nE 3b=54:pOf,b:pOf+t,1:goS9:pOf+t,2:pOf,211:nE:pOg,.:wAg,1:fOq=.to439:pOo+q+t,.:nE 4pOn,8:?"{home}"sP6)"{reverse on}{red}S{cyan}"j" {red}{reverse off}4{cyan}{reverse on}"m-xaN15:ifpE(p)=211tHpOn,90:j=j+1:l=l+1:x=x+(x>1) 5pOp+t,2:pOp,h:gEa$:s=aS(a$+"@"):ifl>mtH?sP7)"{purple}{reverse on}completed":fOi=tton:nE:pOn,8:gO2 6e=saN1:c=s-75+e:ifc=sG(c)tHx=x+.1:h=s-23:pOp,160:q=p+c*21*e+c:if(pE(q)<>w)gO8 7on-(xoaNpE(p)<>b)gO4:pOn,109:?sPm)"{yellow}{reverse on}end":fOi=tton:nE:j=.:pOg,.:gO1 8p=q:pOv,m:pOv,.:fOa=-2to2:q=p+t+a:pOq-y,1:pOq-u,1:pOq,1:pOq+u,1:pOq+y,1:nE:gO7 9f=2+o+2*a*u+rN(.)*20:reT:dA"{16}{56}{124}{56}{124}{16}{16}{16}{24}{60}{24}{102}{153}{24}{36}{102}{24}{44}{152}{110}{25}{24}{40}{40}{24}{36}{24}{102}{153}{24}{36}{102}{24}{52}{25}{118}{152}{24}{40}{40}{62}{127}{73}{127}{119}{62}{42}{42}" ================================================ FILE: src/assets/examples/tile_sets/basic/tiles_cbm_10_liner_4.bas ================================================ 0v=36878:t=30720:pokev+1,110:b=7816:c=b+12:z=65:q=.:g=160:dimc(g):pokev-9,255:data17,85 1fori=1to16:reade:poke7167+i,255-e:next:s$="{home}{down*3}{reverse on} {white}step{yellow}":data17,,254,,,70,136 2s=3:fori=.to3:p(i)=1:p(6-i)=0:next:c(0)=3:c(1)=5:print"{clear}{reverse on} {cyan}{reverse off}@{green}a{reverse on} {white}vic {green}fruzzle {cyan}{reverse off}@{green}a" 3h=42:q=.:p(s)=g:print"{down*18}{reverse on}{yellow} use {white}abcdefg{down}"spc(11)"{yellow}reset with {white}x" 4e=22:fori=.to6:poke8036+i*2,i+129:forj=1to8:pokeb+e*j+i*2,230:pokeb+e*j+i*2+t,7:next:next 5fori=.to6:pokeb+t+i*2,c(p(i)):pokeb+i*2,p(i):next:prints$;q;:d$="{down}done!":data170,136,,127,, 6geta$:on-(a$="")goto6:f=asc(a$)-z:on-(f=23)goto2:on-(f<.orf>6orf=sors<.ors>6)goto6:data98 7x=peek(b+f*2):on-((x=1)and(((s-f)>2)or(f>s)))goto6:on-((x=0)and(((f-s)>2)or(s>f)))goto6 8pokeb+f*2,g:q=q+1:j=b+f*2-22-sgn(f-s):pokej+t,c(x):pokej,x:pokev,9:pokev,0:p(s)=x:p(f)=g 9k=tan(9.9):s=f:pokej,g:on-(p(4)*p(5)*p(6)<>1orp(3)<2)goto5:print"{home}"spc(9)d$:pokev+1,h:goto5 ================================================ FILE: src/assets/examples/tile_sets/basic/tiles_cbm_2.bas ================================================ 1 goto800 2 poke53280,6:poke53281,1 5 s=1304:ex=1:l=3:sc=0:so=54272 10 pokeso+24,15:pokeso+5,17:pokeso+6,16:pokeso,100 20 tc=27:poke251,112:poke831,0:poke832,6:poke829,20 30 tb(1)=112 40 tb(2)=197 50 ss$="{right*19}{space*3}{down}{left*4}{space*5}{down}{left*3} " 60 sc$="{right*19}{green}###{down}{left*4}{blue}#####{down}{left*3}$" 70 poke53272,(peek(53272)and240)+12 80 t(1)=38:t(2)=40 90 print"{clear}{down*2}{red}########################################"; 91 print"{green}###################{space*3}##################"; 92 print"{blue}##################{space*5}#################"; 100 fori=16to1step-1 110 print"{home}{down*3}";:fort=1toi:print"{down}";:next:printsc$ 120 fory=1to75:next 130 print"{home}{down*3}";:fort=1toi:print"{down}";:next:printss$ 140 next 150 print"{clear}{down*2}{red}########################################"; 151 print"{green}########################################"; 152 print"{blue}########################################"; 160 print"{home}{down}++++++++++++++++++++++++++++++++++++++++" 170 print"{home}{down*23},,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,"; 180 tt=1:d=-1:ao=40:mp=1244:mc=55516:tp=19:ba=121:z=0:poke834,tp 185 w=int(rnd(1)*39)+1104 190 poke251,tb(tt):sys49152 200 print"{home}{down*16}-------{space*26}-------" 210 print"{home}{space*6}punti=";sc:print"{home}{right*25}clown=";l 220 pokemp,36:pokemc,0 230 gosub750:iffbthen240 235 goto230 240 u=int(rnd(1)*10) 244 ifz=0andu>8thenz=7:goto248 246 ifz=7andu>7thenz=0:goto248 248 ifpeek(w)=35thenpokew+so,z 290 poke251,tb(tt):sys49434:tp=peek(834) 310 ifd=-1then330 320 ifd=1then410 325 goto310 330 op=mp:mp=mp+ao:mc=mp+so:pm=peek(mp) 335 if((op-1023)/40=int((op-1023)/40))andao=41thenmp=mp-40:pm=peek(mp):mc=mp+so 340 ifpm=32thengoto406 350 ifpm=35thengosub560:goto406 370 ifpm=t(tt)then460 380 ifpm=43orpm=45thenmp=op:d=1:ao=int(rnd(1)*3)+39:goto240 400 l=l-1:ifl<=0then630 404 goto180 406 pokeop,32:pokemp,36:pokemc,0:goto240 410 op=mp:mp=mp-ao:mc=mp+so:pm=peek(mp) 415 if((op-1024)/40=int((op-1024)/40))andao=41thenmp=mp+40:pm=peek(mp):mc=mp+so 420 ifpm=32then450 430 ifpm=35thend=-1:gosub560:goto450 435 ifpm=45thenpokeop,32:mp=mp-ao:mc=mp+so 440 ifpm=43thenmp=op:d=-1:ao=int(rnd(1)*3)+39:goto240 450 pokeop,32:pokemp,36:pokemc,0:goto240 460 sc=sc+5:pokeop,32 480 pokeso+1,10:pokeso+4,33 490 poke251,tc:sys49152 500 pokeso+4,32:iftt=1thenmp=1787+tp:mc=mp+so 510 iftt=2thenmp=1785+tp:mc=mp+so 520 tt=tt+1:iftt>2thentt=1 530 d=1 540 poke251,tb(tt):sys49152 550 ao=int(rnd(1)*3)+39 555 print"{home}{space*6}punti=";sc:print"{home}{right*25}clown=";l:goto240 560 pokeso+1,10:pokeso+4,129:fori=1to10:next:pokeso+4,128 563 ifmp=wandc=0thenl=l-1:goto180 566 ifmp=wandc=7thensc=sc+250:goto600 570 ifmp>1103andmp<1144thensc=sc+100 580 ifmp>1143andmp<1184thensc=sc+75 590 ifmp>1183andmp<1224thensc=sc+50 600 ifsc>ex*2000thenl=l+1:ex=ex+1 605 ba=ba-1:ifba=1then180 610 ao=int(rnd(1)*3)+39 620 print"{home}{space*6}punti=";sc:print"{home}{right*25}clown=";l:return 630 g$=" p a r t i t a c o n c l u s a " 640 fori=2to34step2 650 print"{home}{down*9}";tab(i+2);mid$(g$,i,1) 660 fort=1to100:next:next 670 fori=1to250:next 680 print"{space*2}premi il pulsante per giocare ancora" 690 print"{space*3}spingi il joystick verso il basso" 695 print"{space*4}per terminare" 700 gosub750 710 iffbthenclr:goto2 720 ifj1thensys2048:end 730 goto700 750 p=peek(56320)and15 760 j1=-(p=13) 770 fb=-((peek(56320)and16)=0):return 800 poke53280,6:poke53281,1 810 print"{clear}{down*12}{space*17}{red}c{cyan}i{purple}r{green}c{blue}o{black}":c=0 820 print"{down}{space*12}attendere prego...":goto1310 830 gosub10000:poke53272,(peek(53272)and240)+12 840 print"{clear}{down*12}{right*17}{black}circo" 850 print"{home}{down*10}{right*15}#########" 855 print"{down*3}{right*15}#########" 860 print"{home}{down*11}{right*15}#{down}{left}#{down}{left}#{up*2}{right*7}#{down}{left}#{down}{left}#" 880 fort=1to3:forp=1to7:s=p 890 fori=55711to55720:pokei,s 900 s=s+1:ifs=1thens=2 910 ifs>7thens=0 920 next 930 fori=55760to55840step40:pokei,s 940 s=s+1:ifs=1thens=2 950 ifs>7thens=0 960 next 970 fori=55880to55871step-1:pokei,s 980 s=s+1:ifs=1thens=2 990 ifs>7thens=0 1000 next 1010 fori=55831to55751step-40:pokei,s 1020 s=s+1:ifs-1thens=2 1030 ifs>7thens=0 1040 next 1050 nextp,t 1060 poke53272,21:print"{clear}{down*12}"; 1070 print"{space*5}vuoi le istruzioni? (s/n)" 1080 geta$:ifa$=""then1080 1090 ifa$="s"then1120 1100 ifa$="n"then1500 1110 goto1080 1120 printchr$(14);"{clear}{down}questo e' il gioco del circo." 1130 print"{down}lo scopo del gioco consiste nel far" 1135 print"scoppiare tutti i palloncini." 1140 print"{down}cio' e' possibile muovendo il joystick" 1145 print"a sinistra e a destra in modo da pren-" 1150 print"dere al volo il clown" 1153 print"{down}all'inizio premere il pulsarte di sparo" 1155 print"per dare il via al gioco." 1160 print"{home}{down*20} premi qualsiasi tasto" 1170 geta$:ifa$=""then1170 1180 print"{clear}{down}tutti i blocchi a scacchi fanno rimbal- zare il vostro giocatore" 1190 print"{down}ogni 2000 punti verra' concesso un uomo in piu'." 1200 print"{down}anche il blocco mobile permettera' al {space*3}vostro giocatore di"; 1205 print" rimbalzare." 1210 print"{home}{down*22} premi qualsiasi tasto" 1220 geta$:ifa$=""then1220 1230 print"{clear}{down}dovete far attenzione al palloncino" 1235 print"di diverso colore della riga superiore." 1240 print"{down}quando il palloncino e' nero, scoppiera'" 1250 print"{up}in faccia al vostro giocatore, quando e'" 1260 print"{up}giallo vi dara' 250 punti" 1270 print"{down*2}buona fortuna!!!" 1280 print"{home}{down*22} premi qualsiasi tasto" 1290 geta$:ifa$=""then1290 1300 goto1500 1310 poke52,48:poke56,48:clr 1320 cs=12288:poke56334,peek(56334)and254:poke1,peek(1)and251 1330 fori=cstocs+511:pokei,peek(i+40960):next 1340 poke1,peek(1)or4:poke56334,peek(56334)or1 1360 fori=cs+35*8tocs+46*8-1:readj:pokei,j:a=a+j:next 1365 ifa<>6897thenprint"errore nei dati alle righe 1380-1480":end 1370 goto830 1380 data28,62,47,63,63,126,96,0 1390 data58,58,18,124,16,56,68,68 1400 data128,64,32,16,24,28,38,37 1410 data128,64,32,16,8,4,2,1 1420 data1,2,4,8,24,56,100,164 1430 data1,2,4,8,16,32,64,128 1440 data0,0,0,255,24,24,36,36 1450 data0,0,0,255,0,0,0,0 1460 data170,85,170,85,170,85,170,85 1470 data255,255,255,255,255,255,255,255 1480 data170,85,170,85,170,85,170,85 1500 print"{clear}":printchr$(17):goto2 10000 i=49152 10010 reada:ifa=256thengoto10025 10020 pokei,a:i=i+1:c=c+a:goto10010 10025 ifc<>21810thenprint"errore nei dati alle righe 10030-10580":end 10028 return 10030 data172,66,3,174,61,3,24 10040 data32,240,255,169,192,133,252 10050 data160,0,177,251,32,210,255 10060 data200,192,85,208,246,96,32 10070 data36,32,36,32,32,32,32 10080 data32,32,32,32,32,32,32 10090 data32,32,32,32,32,32,32 ================================================ FILE: src/assets/examples/tile_sets/basic/tiles_cpc.bas ================================================ 20 SYMBOL AFTER 32 30 REM Upper case chars 40 SYMBOL 65,126,66,66,126,98,98,98,0 50 SYMBOL 66,126,66,66,126,98,98,126,0 60 SYMBOL 67,126,64,64,96,96,96,126,0 70 SYMBOL 68,254,66,66,98,98,98,254,0 80 SYMBOL 69,126,64,64, 120,96,96,126,0 90 SYMBOL 70,126,64,64,120,96,96,96,0 100 SYMBOL 71,126,64,64,102,98,98,126,0 110 SYMBOL 72,66,66,66,126,98,98,98,0 120 SYMBOL 73,60,16,16,24,24,24,60,0 130 SYMBOL 74,126,8,8,24,24,24,120,0 140 SYMBOL 75,68,68,68, 120,100,100,100,0 150 SYMBOL 76,64,64,64,96,96,96, 126,0 160 SYMBOL 77,126,74,74,98,98,98,98,0 170 SYMBOL 78,98,82,74,102,98,98,98,0 180 SYMBOL 79,126,66,66,98,98,98,126,0 190 SYMBOL 80,126,66,66,126,96,96,96,0 200 SYMBOL 81,126,66,66,98,98,106,126,4 210 SYMBOL 82,126,66,66,126,106,100,98,0 220 SYMBOL 83,126,64,64,126,6,6,126,0 230 SYMBOL 84,126,16,16,24,24,24,24,0 240 SYMBOL 85,66,66,66,98,98,98,126,0 250 SYMBOL 86,66,66,66,66,66,36,24,0 260 SYMBOL 87,66,66,66,98,106,106,126,0 270 SYMBOL 88,102,102,36,24,36,102,102,0 280 SYMBOL 89,66,66,126,16,24,24,24,0 290 SYMBOL 90,126,4,8,16,32,64,126,0 295 REM Lower case chars 300 SYMBOL 97,0,0,126,6,126,70,126,0 310 SYMBOL 98,96,96,96,126,98,98,126,0 320 SYMBOL 99,0,0,126,96,96,96,126,0 330 SYMBOL 100,6,6,6,126,70,70,126,0 340 SYMBOL 101,0,0,126,98,126,96,126,0 350 SYMBOL 102,60,48,48,120,48,48,48,0 360 SYMBOL 103,0,0,126,70,70,126,6,126 370 SYMBOL 104,96,96,96,126,98,98,98,0 380 SYMBOL 105,24,0,24,24,24,24,24,0 390 SYMBOL 106,6,0,6,6,6,6,6,126 400 SYMBOL 107,96,96,102,108,120,108, 102,0 410 SYMBOL 108,24,24,24,24,24,24,24,0 420 SYMBOL 109,0,0,126,90,90,66,66,0 430 SYMBOL 110,0,0,108,114,98,98,98,0 440 SYMBOL 111,0,0,126,102,102,102,126,0 450 SYMBOL 112,0,0,126,98,98,126,96,96 460 SYMBOL 113,8,0,126,70,70,126,6,6 470 SYMBOL 114,0,0,108,114,96,96,96,0 480 SYMBOL 115,0,0,126,96,126,6,126,0 490 SYMBOL 116,24,62,24,24,24,24,30,0 500 SYMBOL 117,0,0,102,102,102,102,126,0 510 SYMBOL 118,0,0,102,102,102,60,24,0 520 SYMBOL 119,0,0,66,66,90,90,126,0 530 SYMBOL 120,0,0,198,104,16,104,198,0 540 SYMBOL 121,0,0,102,102,102,126,6,126 550 SYMBOL 122,0,0,126,12,24,48,126,0 555 REM Numbers 560 SYMBOL 48,126,102,110,118,102,102,126,0 570 SYMBOL 49,24,56,24,24,24,24,126,0 580 SYMBOL 50,126,2,2,126,96,96,126,0 590 SYMBOL 51,126,2,2,30,6,6,126,0 600 SYMBOL 52,96,96,96,96,104,126,8,8 610 SYMBOL 53,126,64,126,6,6,6,126,0 620 SYMBOL 54,126,64,64,126,98,98,126,0 630 SYMBOL 55,126,2,4,62,16,32,64,0 640 SYMBOL 56,126,66,66,126,66,66,126,0 650 SYMBOL 57,126,66,66,126,6,6,6,0 680 SYMBOL 95,0,255,0,0,0,0,0,0 ================================================ FILE: src/assets/examples/tile_sets/basic/tiles_msx_headless_hex.bas ================================================ 490 DATA 22,63,F7,B7,FF,7E,3C,3C ' a 491 DATA 38,6C,FF,3F,0F,3F,FC,38 ' b 492 DATA 3C,3C,7E,FF,ED,EF,C6,44 ' c 493 DATA 1C,36,FF,FC,F0,FC,3F,1C ' d 494 DATA 3C,7E,FF,FF,FF,FF,7E,3C ' e 495 DATA 08,10,54,FE,FE,FE,FE,7C ' f 496 DATA 06,08,10,10,38,7C,7C,38 ' g 497 DATA 00,28,FE,AA,FE,54,38,10 ' h 500 DATA 08,1C,2A,7F,77,3E,36,63 ' i 501 DATA FF,D5,AB,D5,AB,D5,AB,FF ' j 502 DATA 00,00,00,18,18,00,00,00 ' k 503 DATA 00,00,18,24,24,18,00,00 ' l 504 DATA 00,18,3C,66,66,3C,18,00 ' m 505 DATA 3C,7E,E7,C3,C3,E7,7E,3C ' n 510 DATA 00,01,06,1D,2A,2A,2A,1F ' o 511 DATA 1B,8F,65,11,C9,A9,B1,F3 ' p 512 DATA 4C,F7,F0,18,07,02,3E,FE ' q 513 DATA 7F,9F,31,41,81,81,F9,FD ' r 515 DATA 7E,C3,9F,9F,9F,C3,7E,00 ' s 520 FORF%=&H2000+ASC("a")*8TO&H2097+ASC("a")*8:READA$:VPOKEF%,VAL("&H"+A$):NEXTF%:F%=USR2(0):F%=USR3(0) 530 DATA C1,C1,C1,C1,C1,C1,C1,C1 ' a 531 DATA C1,C1,C1,C1,C1,C1,C1,C1 ' b 532 DATA C1,C1,C1,C1,C1,C1,C1,C1 ' c 533 DATA C1,C1,C1,C1,C1,C1,C1,C1 ' d 534 DATA D1,D1,41,71,71,41,D1,D1 ' e 535 DATA A1,A1,A1,A1,A1,A1,A1,A1 ' f 536 DATA F1,F1,F1,F1,D1,D1,D1,D1 ' g 537 DATA D1,D1,D1,D1,D1,D1,D1,D1 ' h 540 DATA D1,D1,21,21,21,21,41,41 ' i 541 DATA 31,31,D1,D1,81,81,51,51 ' j 542 DATA F1,F1,F1,21,21,F1,F1,F1 ' k 543 DATA F1,F1,F1,F1,F1,F1,F1,F1 ' l 544 DATA F1,41,41,F1,F1,41,41,F1 ' m 545 DATA D1,D1,81,81,81,81,D1,D1 ' n 546 DATA 21,21,21,21,21,21,21,21 ' o 547 DATA 21,21,21,21,21,21,21,21 ' p 548 DATA 21,21,21,21,21,21,21,21 ' q 550 DATA 21,21,21,21,21,21,21,21 ' r 551 DATA 90,90,90,90,90,90,90,00 ' s 552 DATA 91,91,91,91,91,91,91,91 ' t ================================================ FILE: src/assets/examples/tile_sets/basic/tiles_oric.bas ================================================ 10 REM Golf 20 CH=46080 30 FOR Q=1 TO 3 40 READ C 50 FOR I=0 TO 7 60 READ D 70 POKE CH+C+I,D 80 NEXT I 90 NEXT Q 100 DATA 264,8,12,14,8,8,8,8,62 110 DATA 512,12,30,45,30,12,18,18,33 120 DATA 280,12,30,31,46,62,60,28,24 130 DIM T(9) 140 XH =0:XC=0 150 YH=0:HT=0:YC=0 170 FOR H=1 TO 9 180 HIRES 190 PAPER 2: INK 7 200 PRINT "Hole Number ";H 220 FOR Z=1 TO 8 230 XB=INT(RND(1)*80)+80 240 YB=INT(RND(1)*40)+50 250 CURSET XB,YB,0 260 CHAR 35,0,1 270 NEXT Z 300 X=INT(RND(1)*20)+20 310 Y=INT(RND(1)*30)+120 320 XT=INT(RND(1)*50)+150 330 YT=INT(RND(1)*10)+20 340 D=SGN(XT-X)*SQR((XT-X)*(XT-X)+(YT-Y)*(YT-Y)) 350 CURSET XT,YT,0 360 CHAR 33,0,1 370 CURSET X,Y,0 380 CHAR 64,0,1 400 PRINT "Distance to next hole is ";INT(D) 410 INPUT "Which club (1 to 8)";C 420 IF C<1 OR C>8 THEN GOTO 420 430 C=(9-C) 440 GOSUB 1160 480 GOSUB 800 490 B=1 500 D=SGN(XT-X1)*SQR((XT-X1)*(XT-X1)+(YT-Y1)*(YT-Y1)) 510 IF D<-15 THEN PRINT "You overshot-try another hole":WAIT 100:GOTO 180 520 IF D<12 THEN PRINT "ON THE GREEN":WAIT 200:GOTO 1320 530 CURSET X1,Y1,0 540 CHAR 46,0,0 550 CURSET X,Y,0 560 CHAR 64,0,0 570 X=X1 580 Y=Y1 590 GOTO 350 640 PRINT "You took ";T(H);" strokes" 650 WAIT 200:PRINT CHR$(17) 660 NEXT H 670 CLS 680 PRINT:PRINT 690 PRINT SPC(15);"This Round" 700 COL=1:R0W=5:GOSUB 1700 720 FOR I=1 TO 9 730 PRINT SPC(10);"Hole ";I; 740 IF T(I)=-1 THEN PRINT " lost ball":GOTO 760 750 PRINT " ";T(I);" strokes" 760 NEXT I 765 ROW=20:COL=5:GOSUB 1700 770 INPUT "Another round Y/N";A$ 775 PRINT CHR$(17) 780 IF A$ = "Y" THEN RUN 790 CLS : STOP 800 VT=C*(1+RND(1)*.01) 810 HT=0 820 XH=0 840 Q=(Y-YT)/(XT-X) 850 VV=-VT*(SIN(45*PI/180)) 860 XC=X+3 870 YC=Y+3 880 VH=VT*(COS(45*PI/180)) 890 HT=HT+VV 900 YH=Q*XH 910 VV=VV+1 920 XH=XH+VH 930 YH=-Q*XH 940 IF XH+XC>250 THEN GOTO 1100 950 IF YH+HT+YC<0 THEN GOTO 1100 960 IF HT>=0 THEN GOTO 1040 970 CURSET XH+XC,YH+HT+YC,0 980 CHAR 46,0,1 1000 WAIT 3 1010 CURSET XH+XC,YH+HT+YC,0 1020 CHAR 46,0,0 1030 GOTO 890 1040 X1=XH+XC 1050 Y1=YH+HT+YC 1070 CURSET X1,Y1,O 1080 CHAR 46,0,1 1090 RETURN 1100 YH=0:YT=0:YC=0:XH=0:XC=0 1110 PRINT "You've lost your ball " 1120 PING 1130 T(H)=-1 1140 WAIT 300 1150 POP:GOTO 660 1160 T(H)=T(H)+1 1170 XS=X+4 1180 YS=Y+4 1190 FOR S=-5 TO -40 STEP -5 1200 A=S/30*PI 1210 SX=10*SIN(A) 1220 SY=-10*COS(A) 1230 CURSET XS,YS,0 1240 DRAW SX,SY,2 1250 IF SO<>-30 THEN WAIT 10 1260 IF S=-30 THEN PING 1270 CURSET XS,YS,0 1280 DRAW SX,SY,2 1300 NEXT S 1310 RETURN 1320 TEXT:PRINT CHR$(17) 1330 PAPER 2 1340 XG=INT(RND(1)*5)+1 1350 YG=15 1360 XH=INT(RND(1)*15)+10 1370 YH=15 1380 D=XH-XG 1390 IF D<0 THEN D=ABS(D) 1400 PLOT XH,YH,"O" 1410 PLOT XG,YG,"@" 1420 R0W=22:C0L=1:GOSUB 1700 1440 PRINT "Distance to hole is ";D;" " 1450 INPUT "Which club (1 to 8)";C 1460 IF C<1 OR C>8 THEN GOTO 1450 1470 T(H)=T(H)+1 1480 H1=8-C+INT(RND(1)*2) 1485 IF D=1 AND C=8 THEN H1=1 1490 D=D-H1 1500 FOR Z=XG+1 TO XG+H1 1510 PLOT Z,YH,"." 1520 WAIT 10 1530 PLOT Z,YH," " 1540 NEXT Z 1550 PLOT XG,YG," " 1560 XG=XG+H1 1570 IF XG=XH THEN GOTO 640 1580 IF D<0 THEN CLS:XG=XH+D:GOTO 1380 1590 GOTO 1400 1700 DOKE #12,48040+R0W*40+COL-1 1710 POKE #268,ROW+1 1720 POKE #269,COL/2 1730 RETURN ================================================ FILE: src/assets/examples/tile_sets/basic/tiles_oric_2.bas ================================================ 0DATA,12,,30,45,12,18,51,63,63,45,30,12,12,18,51,,61,61,61,,47,47,47,18,12,30' 1DIME(40):DEFFNR(X)=INT(RND(1)*36)+2:FORA=0TO39:READV:POKE47368+A,V:NEXT:G=2'' 2POKE#26A,10:LORES1:INK6:FORY=5TO20:FORX=2TO37:PLOTX,Y,163:NEXTX,Y:POKE#BBA8,6 3B=163:N=20:X=20:P=34:V=175:REPEAT:PLOTX,4,P:IFX=ZANDP=33THENP=34:DATA45,12,30 4U=U+1:K=PEEK(#208):IFK>100THENPLOTX,4,32:X=X-((K=172)*(X>2))+((K=188)*(X<37)) 5IFK=132ANDP=34THENE(X)=0:FORI=6TON:PLOTX,I,V:PLOTX,I-1,B:NEXT:P=33:Z=1:O=O+10 6IFZ=1THENZ=FNR(0):PLOTZ,4,92ELSEIFX=ZTHENP=34:IFU>999THENL=L+1:U=0:DATA45,,'' 7S=S+1:IFS>4THENS=L:GOSUB9ELSE:PRINT@6,0;"Man:"G" Lvl:"L" Scr:"O:UNTILE(E)>15' 8IFGTHENG=G-1:SHOOT:FORI=0TO40:E(I)=0:NEXT:GOTO2ELSEEND:DATA54,58,54,,59,55,59 9E=FNR(0):PLOTE,N-E(E),165:E(E)=E(E)+1:PLOTE,N-E(E),36:PLAY0,1,1,99:RETURN'''' ================================================ FILE: src/assets/examples/tile_sets/basic/tiles_oric_3.bas ================================================ 0PAPER0:INK7:FORA=0TO15:READV:POKE47368+A,V:NEXT:DATA0,28,56,63,63,56,28,0,54 1HIRES:POKE#26A,10:Q=14:P=-14:X=231:Y=100:M=0:L=0:W=200:H=200:DATA0,25,45,14 2REPEAT:CURSETX,Y,3:CHAR33,1,0:K$=KEY$:Y=Y+(K$="A")-(K$="Z"):X=X+1:GOSUB6 3IFX=232THENX=12:Y=RND(1)*160+20:INKRND(1)*7+1:GOSUB8:L=L+1:CLS:PRINT"Level:"L 4CURSETX,Y,3:CHAR33,1,1:IFK$=" "THENZAP:M=1:GOSUB7:M=0:GOSUB7:DATA32,29,0 5T=X+6:UNTILPOINT(T,Y+2)ORPOINT(T,Y+3)ORPOINT(T,Y+4)ORPOINT(T,Y+5):EXPLODE:END 6IFRND(1)*100<3THENCURSETRND(1)*W+30,RND(1)*190,3:CHAR34,1,1:RETURNELSERETURN 7CURSETX+6,Y+3,M:T=60+(X>170)*(X-170):DRAWT,0,M:DRAW1,1,3:DRAW-T,0,M:RETURN 8PING:CURSET10,0,3:FORA=0TO7:DRAWQ,Q,1:DRAWQ,P,1:NEXT:DRAW0,199,1:FORA=0TO7: 9DRAWP,P,1:DRAWP,Q,1:NEXT:FORA=0TO99:CURSETRND(1)*W+30,RND(1)*H,1:NEXT:RETURN ================================================ FILE: src/assets/examples/tile_sets/basic/tiles_oric_4.bas ================================================ 0PAPER0:INK7:TEXT:FORI=0TO15:READA:POKE#B908+I,A:NEXT:DEFFNR(X)=RND(1)*X:G=.1 1HIRES:Y=150:M=3:FORI=12TO230STEP6:R=FNR(14)-7:IFY+R<190ANDY+R>120THENY=Y+R 2CURSETI+6,Y,3:T=FNR(60)+35:CHART,1,1:CURSETI,Y,3:CHART,1,1:DRAW0,6,3 3FILL193-Y,2,255:CURSETFNR(239),FNR(110),1:NEXT:Y=5:X=FNR(220)+12:PRINT"LVL:"S 4POKE#26A,10:INK3:REPEAT:K=PEEK(#208):Y=Y+V:V=V+G:IFX+E>12ANDX+E<225THENX=X+E 5IFK=156THENV=V-.3-G:ELSEIFK=172THENE=E-FNR(1)ELSEIFK=188THENE=E+FNR(1) 6IFY<0THENY=0ELSE:CURSETQ,W,3:CHAR33,1,M:M=2:CURSETX,Y,3:CHAR33,1,M:Q=X:W=Y''' 7L=Y+8:O=POINT(X,L):P=POINT(X+2,L):L=POINT(X+5,L):Z=Y>115AND(OORPORL):UNTILZ'' 8G=G+0.03:CURSETX+7,Y,3:S=S+1:DATA0,12,22,47,30,12,30,51,,,48,62,60,56,32,32 9IFOANDPANDLANDV<2THENCHAR34,1,1:PING:WAIT200:GETA$:GOTO1ELSEEXPLODE ================================================ FILE: src/assets/examples/tile_sets/basic/tiles_oric_5.bas ================================================ 0 U=520:W=34:X=20:Y=25:P=X:DIMJ(40):M=123:B=32:A=125:Z=124:O=24:GOSUB7:REPEAT 1 K=PEEK(U):PLOTX,Y,B:X=X+(K=170ANDX>2):X=X-(K=176ANDX<37):PLOTX,Y,M:PLOTP,Q,B 2 F=-(K=159ANDQ<2):G=-(F=0):P=P*G+X*F:Q=(Q+(Q>1))*G+(Y-1)*F:V=RND(1)-.3<(L/20) 3 H=-(Q>1ANDSCRN(P,Q)=A):PLOTP,Q,Z:ONHGOSUB6:IFFTHENPLOT1,O,7:ZAP:PLOT1,O,4 4 L=L+H:I=-(I=W):J=J(I):PLOTI,J,B:J=(J-V)*-(J1ANDSCRN(I,J)=Z):PLOTI,J,A:ONHGOSUB6:L=L+H:UNTILJ=Y:EXPLODE:END 6 SHOOT:PLOTP,Q,42:S=S+Q:PLOT18,0,STR$(S):J(P)=1+L/2:WAIT7:PLOTP,Q,B:Q=1:RETURN 7 INK4:CLS:POKE#26A,10:FORG=0TO26:F=2*-(G>0ANDG<9)-(G>8ANDG<18)*3-(G>17ANDG<=Y) 8 PLOT0,G,F+16:NEXT:FORG=47064TO47087:READD:POKEG,D:NEXT:PLOT1,1,2:PLOT1,0,7 9 Q=1:RETURN:DATA0,12,12,45,45,63,63,30,0,8,4,8,4,8,4,0,33,18,30,45,45,63,18,33 ================================================ FILE: src/assets/examples/tile_sets/basic/tiles_sinclair.bas ================================================ 5 POKE USR "a"+0,BIN 0000000 10 POKE USR "a"+1,BIN 0001000 20 POKE USR "a"+2,BIN 0011100 30 POKE USR "a"+3,BIN 0111110 40 POKE USR "a"+4,BIN 1111111 50 POKE USR "a"+5,BIN 0111110 60 POKE USR "a"+6,BIN 0011100 70 POKE USR "a"+7,BIN 0001000 ================================================ FILE: src/assets/generate_assets.py ================================================ #!/bin/python import os import sys # sys.path.append("..") from LoggerSingleton import * global logger if len(sys.argv)<2: game_dir = "chase" else: game_dir = sys.argv[1] if len(sys.argv)<3: parent_dir = "games" else: parent_dir = sys.argv[2] # TODO: Maybe we should have more MAX_NUMBER_OF_TILES = 91 ATARI7800_FILE = "cc65_udc_atari7800_160A.s" ATARI7800_HEADER = \ ".export _conio_font\n" \ ".rodata\n" \ ".align 256\n" \ "_conio_font:\n\n" PMD85_FILE = "z88dk_6x8_pmd85.asm" VERBOSE = False tile=[] # Read tile files from a given directory and store them into the tile variable def read_tiles_from_dir(dir_name): logger.info("read_tiles_from_dir") global tile tile = [] for i in range(MAX_NUMBER_OF_TILES): file_to_open = "../"+parent_dir+"/"+game_dir+"/tiles/"+dir_name+"/tile"+str(i)+".txt" if not os.path.exists(file_to_open): file_to_open = "../"+parent_dir+"/"+game_dir+"/tiles/"+dir_name+"/tile_"+format(i,"03d")+".txt" if VERBOSE: print("tile file to open: " + file_to_open) if os.path.exists(file_to_open): with open(file_to_open, 'r') as myfile: if VERBOSE: print("Opening file tile"+file_to_open) tile.append(myfile.read().replace('\n','')) else: if VERBOSE: print("Tile file NOT found") y = int(dir_name[2]) zerolist = str([0]*y) tile.append(zerolist[1:len(zerolist)-1]) def read_templates_from_dir(dir_name): global stripped_template_file_names template_file_names = os.listdir("./templates/"+dir_name) stripped_template_file_names = [] for template_file_name in template_file_names: if template_file_name.endswith(".template"): stripped_template_file_name = template_file_name[:-9] print("template_file_name: "+template_file_name) print("stripped file name: "+stripped_template_file_name) stripped_template_file_names.append(stripped_template_file_name) print("Templates found: "+str(len(stripped_template_file_names))) print("") # Input : 4 bits # Output: 8 bits with double bits, e.g. 1010 -> 11001100 double_bit_map = { 0x0:0x00, 0x1:0x03, 0x2:0x0C, 0x3:0x0F, 0x4:0x30, 0x5:0x33, 0x6:0x3C, 0x7:0x3F, 0x8:0xC0, 0x9:0xC3, 0xA:0xCC, 0xB:0xCF, 0xC:0xF0, 0xD:0xF3, 0xE:0xFC, 0xF:0xFF } # COCO # 0x00, 0x03, 0x0C, 0x0F, 0x30, 0x33, 0x3C, 0x3F, # 0xC0, 0xC3, 0xCC, 0xCF, 0xF0, 0xF3, 0xFC, 0xFF color_1 = 0x55 # red color_2 = 0xAA # green color_3 = 0xFF # white # color = 0x00, 0x55, 0xAA, 0xFF # Input : 4 bits, color # Output: 8 bits encoding 4 pixels in 4 color mode in a given color def four_colored(four_bit, color): return double_bit_map[four_bit]&color # Input : 1 byte, color # Output: 2 bytes encoding 8 pixels in 4 color mode in a given color def one_to_two(source, color): return [four_colored(source>>4,color), four_colored(source&0x0F,color)] # INPUT: 64 monochromatic tiles (64 x 8 bytes) # OUTPUT: # First 37 -> Converted in 37 4-color tiles in color 3 # Second 27 -> Converted in 3 groups of 27 4-color tiles in color 1, 2, 3 def generate_two_bit_asset(abstract_asset): two_bit_asset = [] # space, alphabet, digits (1+26+10=37) for i in range(0,37): for j in range(0,8): two_bit_block = one_to_two(abstract_asset[i*8+j],color_3) # two_bit_asset.extend(two_bit_block) two_bit_asset.append(two_bit_block) # 27 tiles in color 0 for i in range(37,64): for j in range(0,8): two_bit_block = one_to_two(abstract_asset[i*8+j],color_1) # two_bit_asset.extend(two_bit_block) two_bit_asset.append(two_bit_block) # 27 tiles in color 1 for i in range(37,64): for j in range(0,8): two_bit_block = one_to_two(abstract_asset[i*8+j],color_2) # two_bit_asset.extend(two_bit_block) two_bit_asset.append(two_bit_block) # 27 tiles in color 2 for i in range(37,64): for j in range(0,8): two_bit_block = one_to_two(abstract_asset[i*8+j],color_3) # two_bit_asset.extend(two_bit_block) two_bit_asset.append(two_bit_block) # padding to get to 128 for i in range(0,10): for j in range(0,8): two_bit_asset.append([255,255]) return two_bit_asset # def generate_160A_asset(two_bit_asset, two_bit_160A_asset): def generate_160A_asset(two_bit_assets): row_map = {0:[], 1:[], 2:[], 3:[], 4:[], 5:[], 6:[], 7:[]} two_bit_160A_asset = [] counter = 0 for byte_couple in two_bit_assets: row_map[counter&7].extend(byte_couple) counter+=1 for i in range(0,8): two_bit_160A_asset.extend(row_map[7-i]) return two_bit_160A_asset def process_a7800_160A_file(): parent_path = "./generated_assets/" dest_path = parent_path+game_dir fin = open(dest_path+"/"+ATARI7800_FILE, "rt") res = [] source = [] for line in fin: words = line.split(",") for word in words: word = word.strip() if word != '' and word != "\n" and word != "\t\n" and word != "\r\n" and word != "\r": trimmed_word = word.replace("\n","").replace(" ","").replace("$","0x") # print(trimmed_word) source.append(trimmed_word) base = 16 if trimmed_word.startswith("0x") else 10 res.append(int(trimmed_word, base)) fin.close() # print(res) if len(res)==512: print("Asset has correct length (512 bytes)") else: print("Asset has wrong length: " + str(len(res))) two_bit_assets = generate_two_bit_asset(res) # print("two_bit_assets: \n" + str(two_bit_assets)) a7800_assets = generate_160A_asset(two_bit_assets) print("length of a7800_assets: " + str(len(a7800_assets))) formatted_assets = ATARI7800_HEADER + format_asset(a7800_assets) # print(formatted_assets) return formatted_assets # while(1): # pass # -------------------------------------------------------------------------------------- def format_asset(assets): res = "" counter = 0 for asset in assets: # print("[format_asset] asset: " + str(asset)) if counter==0: line = ".byte " line = line + str(asset) counter=counter+1 if counter<8: line = line + ", " else: res = res + line + "\n" # print("line: " + line) # print("res: " + res) counter = 0 if counter>0: res = res + line + "\n" # print("line: " + line) # print("res: " + res) # if res.endswith(', '): res = res[:-3] + "\n" return res def generate_asset_from_template(dir_name, stripped_template_file_name): matches = 0 print("") print("Handling "+stripped_template_file_name) print("") fin = open("./templates/"+dir_name+"/"+stripped_template_file_name+".template", "rt") parent_path = "./generated_assets/" if not os.path.exists(parent_path): print("creating: " + parent_path) os.makedirs(parent_path) dest_path = parent_path+game_dir if not os.path.exists(dest_path): print("creating: " + dest_path) os.makedirs(dest_path) fout = open(dest_path+"/"+stripped_template_file_name, "wt") for line in fin: newline = line for i in range(len(tile)): if stripped_template_file_name==PMD85_FILE: digits_string = tile[i].split(",") normalized_digits_string = "" for digit_string in digits_string: normalized_digit_string = str(int(digit_string)*4) normalized_digits_string += normalized_digit_string + "," normalized_digits_string = normalized_digits_string[:-1] tile_data=normalized_digits_string elif stripped_template_file_name.startswith("cmoc"): tile_data = tile[i].replace(","," \n FCB ") else: if stripped_template_file_name.endswith(".h"): tile_data = tile[i].replace("$","0x") else: tile_data = tile[i] if stripped_template_file_name.startswith("cmoc"): tile_data = tile_data + "\n" newline = newline.replace('', tile_data) fout.write(newline) if line != newline: matches = matches+1 if VERBOSE: print("Changing \n"+line+"with\n"+newline) if VERBOSE: print("Number of tiles found: "+str(matches)) print("") print("") #close input and output files fin.close() fout.close() if stripped_template_file_name==ATARI7800_FILE: formatted_assets = process_a7800_160A_file() fout = open(dest_path+"/formatted_"+ATARI7800_FILE, "wt") fout.write(formatted_assets) fout.close() def generate_assets_from_dir(dir_name): for stripped_template_file_name in stripped_template_file_names: generate_asset_from_template(dir_name, stripped_template_file_name) def main(): for dir_name in ["8x8", "7x8", "6x8", "6x9", "8x6"]: print("dir name: " + dir_name) read_tiles_from_dir(dir_name) read_templates_from_dir(dir_name) generate_assets_from_dir(dir_name) if __name__ == "__main__": # execute only if run as a script logger = LoggerSingleton.initLogger('xl','../../logs') # logger.setLevel(logging.DEBUG) # logging.basicConfig(filename='../logs/log_'+datetime.datetime.now().strftime("%Y-%m-%d_%H_%M_%S")+'.log', level = logging.DEBUG) # logging.basicConfig(filename='../../logs/xl_log_.log', level = logging.DEBUG) logger.info("Started generate_assets") main() logger.error("Finished generate_assets") ================================================ FILE: src/assets/templates/4x4/4x4_chars.h.template ================================================ #ifndef _4X4_CHARS #define _4X4_CHARS #define _TILE_0_UDG { } #define _TILE_1_UDG { } #define _TILE_3_UDG { } #define _TILE_2_UDG { } #define _TILE_4_UDG {} #define _TILE_7_UDG { } #define _TILE_9_UDG { } #define _TILE_8_UDG { } #define _TILE_11_UDG { } #define _TILE_5_UDG { } #define _TILE_16_UDG { } #define _TILE_15_UDG { } #define _TILE_14_UDG { } #define _TILE_6_UDG {} #define _TILE_12_UDG { } #define _TILE_13_UDG { } #define _TILE_10_UDG { } #define _TILE_17_UDG { } #define _TILE_18_UDG { } #define _TILE_19_UDG { } #define _TILE_20_UDG { } #define _TILE_21_UDG { } #define _TILE_22_UDG { } #define _TILE_23_UDG { } #define _TILE_24_UDG { } #define _TILE_25_UDG { } #define _TILE_26_UDG { } #endif // _4x4_CHARS ================================================ FILE: src/assets/templates/6x8/6x8_chars.h.template ================================================ #ifndef _6X8_CHARS #define _6X8_CHARS // A - Z #define _TILE_A { 0x08, 0x1C, 0x22, 0x22, 0x3E, 0x22, 0x22, 0x00 } #define _TILE_B { 0x3C, 0x12, 0x12, 0x1C, 0x12, 0x12, 0x3C, 0x00 } #define _TILE_C { 0x1C, 0x22, 0x20, 0x20, 0x20, 0x22, 0x1C, 0x00 } #define _TILE_D { 0x38, 0x24, 0x22, 0x22, 0x22, 0x24, 0x38, 0x00 } #define _TILE_E { 0x3E, 0x20, 0x20, 0x3C, 0x20, 0x20, 0x3E, 0x00 } #define _TILE_F { 0x3E, 0x20, 0x20, 0x3C, 0x20, 0x20, 0x20, 0x00 } #define _TILE_G { 0x1C, 0x20, 0x20, 0x2E, 0x22, 0x22, 0x1C, 0x00 } #define _TILE_H { 0x22, 0x22, 0x22, 0x3E, 0x22, 0x22, 0x22, 0x00 } #define _TILE_I { 0x1C, 0x08, 0x08, 0x08, 0x08, 0x08, 0x1C, 0x00 } #define _TILE_J { 0x0E, 0x04, 0x04, 0x04, 0x04, 0x24, 0x18, 0x00 } #define _TILE_K { 0x22, 0x24, 0x28, 0x30, 0x28, 0x24, 0x22, 0x00 } #define _TILE_L { 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3E, 0x00 } #define _TILE_M { 0x22, 0x36, 0x2A, 0x2A, 0x22, 0x22, 0x22, 0x00 } #define _TILE_N { 0x22, 0x22, 0x32, 0x2A, 0x26, 0x22, 0x22, 0x00 } #define _TILE_O { 0x1C, 0x22, 0x22, 0x22, 0x22, 0x22, 0x1C, 0x00 } #define _TILE_P { 0x3C, 0x22, 0x22, 0x3C, 0x20, 0x20, 0x20, 0x00 } #define _TILE_Q { 0x1C, 0x22, 0x22, 0x22, 0x2A, 0x24, 0x1A, 0x00 } #define _TILE_R { 0x3C, 0x22, 0x22, 0x3C, 0x28, 0x24, 0x22, 0x00 } #define _TILE_S { 0x1C, 0x22, 0x20, 0x1C, 0x02, 0x22, 0x1C, 0x00 } #define _TILE_T { 0x3E, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x00 } #define _TILE_U { 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x1C, 0x00 } #define _TILE_V { 0x22, 0x22, 0x22, 0x14, 0x14, 0x08, 0x08, 0x00 } #define _TILE_W { 0x22, 0x22, 0x22, 0x2A, 0x2A, 0x36, 0x22, 0x00 } #define _TILE_X { 0x22, 0x22, 0x14, 0x08, 0x14, 0x22, 0x22, 0x00 } #define _TILE_Y { 0x22, 0x22, 0x14, 0x08, 0x08, 0x08, 0x08, 0x00 } #define _TILE_Z { 0x3E, 0x02, 0x04, 0x08, 0x10, 0x20, 0x3E, 0x00 } // 0 - 9 #define _TILE_DIGIT_0 { 0x1C, 0x22, 0x26, 0x2A, 0x32, 0x22, 0x1C, 0x00 } #define _TILE_DIGIT_1 { 0x08, 0x18, 0x08, 0x08, 0x08, 0x08, 0x1C, 0x00 } #define _TILE_DIGIT_2 { 0x1C, 0x22, 0x22, 0x0C, 0x10, 0x20, 0x3E, 0x00 } #define _TILE_DIGIT_3 { 0x1C, 0x22, 0x02, 0x0C, 0x02, 0x22, 0x1C, 0x00 } #define _TILE_DIGIT_4 { 0x04, 0x0C, 0x14, 0x24, 0x3E, 0x04, 0x04, 0x00 } #define _TILE_DIGIT_5 { 0x3E, 0x30, 0x3C, 0x02, 0x02, 0x22, 0x1C, 0x00 } #define _TILE_DIGIT_6 { 0x0C, 0x10, 0x20, 0x3C, 0x22, 0x22, 0x1C, 0x00 } #define _TILE_DIGIT_7 { 0x3E, 0x02, 0x04, 0x08, 0x10, 0x10, 0x10, 0x00 } #define _TILE_DIGIT_8 { 0x1C, 0x22, 0x22, 0x1C, 0x22, 0x22, 0x1C, 0x00 } #define _TILE_DIGIT_9 { 0x1C, 0x22, 0x22, 0x1E, 0x02, 0x04, 0x08, 0x00 } #define _TILE_0_UDG {} #define _TILE_1_UDG {} #define _TILE_2_UDG {} #define _TILE_3_UDG {} #define _TILE_4_UDG {} #define _TILE_7_UDG {} #define _TILE_9_UDG {} #define _TILE_8_UDG {} #define _TILE_11_UDG {} #define _TILE_5_UDG {} #define _TILE_6_UDG {} #define _TILE_16_UDG {} #define _TILE_14_UDG {} #define _TILE_15_UDG {} #define _TILE_10_UDG {} #define _TILE_12_UDG {} #define _TILE_13_UDG {} #define _TILE_17_UDG {} #define _TILE_18_UDG {} #define _TILE_19_UDG {} #define _TILE_20_UDG {} #define _TILE_21_UDG {} #define _TILE_22_UDG {} #define _TILE_23_UDG {} #define _TILE_24_UDG {} #define _TILE_25_UDG {} #define _TILE_26_UDG {} #endif // _6x8_CHARS ================================================ FILE: src/assets/templates/6x8/z88dk_6x8_pmd85.asm.template ================================================ SECTION rodata_font SECTION rodata_font_6x8 PUBLIC _udgs PUBLIC _udgs_end _udgs: defb %"------" defb %"------" defb %"------" defb %"------" defb %"------" defb %"------" defb %"------" defb %"------" ; invincibility defb ; left missile defb ; bullet defb ; dollar defb ; power-up F defb ; vertical brick defb ; skull defb ; ghost defb ; bomb defb ; player down defb ; horizontal brick defb ; power-up S defb defb ; right missile defb ; rocket defb defb %"------" defb %"--###-" defb %"-#--##" defb %"-#-#-#" defb %"-#-#-#" defb %"-##--#" defb %"--###-" defb %"------" defb %"------" defb %"---#--" defb %"--##--" defb %"---#--" defb %"---#--" defb %"---#--" defb %"--###-" defb %"------" defb %"------" defb %"--###-" defb %"-#---#" defb %"-----#" defb %"--###-" defb %"-#----" defb %"-#####" defb %"------" defb %"------" defb %"--###-" defb %"-#---#" defb %"---##-" defb %"-----#" defb %"-#---#" defb %"--###-" defb %"------" defb %"------" defb %"----#-" defb %"---##-" defb %"--#-#-" defb %"-#--#-" defb %"-#####" defb %"----#-" defb %"------" defb %"------" defb %"-#####" defb %"-#----" defb %"-####-" defb %"-----#" defb %"-#---#" defb %"--###-" defb %"------" defb %"------" defb %"--###-" defb %"-#----" defb %"-####-" defb %"-#---#" defb %"-#---#" defb %"--###-" defb %"------" defb %"------" defb %"-#####" defb %"-----#" defb %"----#-" defb %"---#--" defb %"---#--" defb %"---#--" defb %"------" defb %"------" defb %"--###-" defb %"-#---#" defb %"--###-" defb %"-#---#" defb %"-#---#" defb %"--###-" defb %"------" defb %"------" defb %"--###-" defb %"-#---#" defb %"-#---#" defb %"--####" defb %"-----#" defb %"--###-" defb %"------" defb ; power-up H defb ; player up defb ; player right defb ; player left defb ; gun defb defb defb %"------" defb %"--###-" defb %"-#---#" defb %"-#---#" defb %"-#####" defb %"-#---#" defb %"-#---#" defb %"------" defb %"------" defb %"-####-" defb %"-#---#" defb %"-####-" defb %"-#---#" defb %"-#---#" defb %"-####-" defb %"------" defb %"------" defb %"--###-" defb %"-#---#" defb %"-#----" defb %"-#----" defb %"-#---#" defb %"--###-" defb %"------" defb %"------" defb %"-###--" defb %"-#--#-" defb %"-#---#" defb %"-#---#" defb %"-#--#-" defb %"-###--" defb %"------" defb %"------" defb %"-#####" defb %"-#----" defb %"-####-" defb %"-#----" defb %"-#----" defb %"-#####" defb %"------" defb %"------" defb %"-#####" defb %"-#----" defb %"-####-" defb %"-#----" defb %"-#----" defb %"-#----" defb %"------" defb %"------" defb %"--###-" defb %"-#---#" defb %"-#----" defb %"-#-###" defb %"-#---#" defb %"--###-" defb %"------" defb %"------" defb %"-#---#" defb %"-#---#" defb %"-#####" defb %"-#---#" defb %"-#---#" defb %"-#---#" defb %"------" defb %"------" defb %"--###-" defb %"---#--" defb %"---#--" defb %"---#--" defb %"---#--" defb %"--###-" defb %"------" defb %"------" defb %"-----#" defb %"-----#" defb %"-----#" defb %"-#---#" defb %"-#---#" defb %"--###-" defb %"------" defb %"------" defb %"-#--#-" defb %"-#-#--" defb %"-##---" defb %"-#-#--" defb %"-#--#-" defb %"-#---#" defb %"------" defb %"------" defb %"-#----" defb %"-#----" defb %"-#----" defb %"-#----" defb %"-#----" defb %"-#####" defb %"------" defb %"------" defb %"-#---#" defb %"-##-##" defb %"-#-#-#" defb %"-#---#" defb %"-#---#" defb %"-#---#" defb %"------" defb %"------" defb %"-#---#" defb %"-#---#" defb %"-##--#" defb %"-#-#-#" defb %"-#--##" defb %"-#---#" defb %"------" defb %"------" defb %"--###-" defb %"-#---#" defb %"-#---#" defb %"-#---#" defb %"-#---#" defb %"--###-" defb %"------" defb %"------" defb %"-####-" defb %"-#---#" defb %"-#---#" defb %"-####-" defb %"-#----" defb %"-#----" defb %"------" defb %"------" defb %"--###-" defb %"-#---#" defb %"-#---#" defb %"-#-#-#" defb %"-#--##" defb %"--###-" defb %"------" defb %"------" defb %"-####-" defb %"-#---#" defb %"-#---#" defb %"-####-" defb %"-#--#-" defb %"-#---#" defb %"------" defb %"------" defb %"--###-" defb %"-#----" defb %"--###-" defb %"-----#" defb %"-#---#" defb %"--###-" defb %"------" defb %"------" defb %"-#####" defb %"---#--" defb %"---#--" defb %"---#--" defb %"---#--" defb %"---#--" defb %"------" defb %"------" defb %"-#---#" defb %"-#---#" defb %"-#---#" defb %"-#---#" defb %"-#---#" defb %"--###-" defb %"------" defb %"------" defb %"-#---#" defb %"-#---#" defb %"-#---#" defb %"-#---#" defb %"--#-#-" defb %"---#--" defb %"------" defb %"------" defb %"-#---#" defb %"-#---#" defb %"-#---#" defb %"-#---#" defb %"-#-#-#" defb %"--#-#-" defb %"------" defb %"------" defb %"-#---#" defb %"--#-#-" defb %"---#--" defb %"---#--" defb %"--#-#-" defb %"-#---#" defb %"------" defb %"------" defb %"-#---#" defb %"-#---#" defb %"--#-#-" defb %"---#--" defb %"---#--" defb %"---#--" defb %"------" defb %"------" defb %"-#####" defb %"----#-" defb %"---#--" defb %"--#---" defb %"-#----" defb %"-#####" defb %"------" ; dead ghost defb defb defb defb defb _udgs_end: ================================================ FILE: src/assets/templates/6x9/6x9_chars.h.template ================================================ #ifndef _6X9_CHARS #define _6X9_CHARS // A - Z #define _TILE_A { 0x08, 0x1C, 0x22, 0x22, 0x3E, 0x22, 0x22, 0x00 } #define _TILE_B { 0x3C, 0x12, 0x12, 0x1C, 0x12, 0x12, 0x3C, 0x00 } #define _TILE_C { 0x1C, 0x22, 0x20, 0x20, 0x20, 0x22, 0x1C, 0x00 } #define _TILE_D { 0x38, 0x24, 0x22, 0x22, 0x22, 0x24, 0x38, 0x00 } #define _TILE_E { 0x3E, 0x20, 0x20, 0x3C, 0x20, 0x20, 0x3E, 0x00 } #define _TILE_F { 0x3E, 0x20, 0x20, 0x3C, 0x20, 0x20, 0x20, 0x00 } #define _TILE_G { 0x1C, 0x20, 0x20, 0x2E, 0x22, 0x22, 0x1C, 0x00 } #define _TILE_H { 0x22, 0x22, 0x22, 0x3E, 0x22, 0x22, 0x22, 0x00 } #define _TILE_I { 0x1C, 0x08, 0x08, 0x08, 0x08, 0x08, 0x1C, 0x00 } #define _TILE_J { 0x0E, 0x04, 0x04, 0x04, 0x04, 0x24, 0x18, 0x00 } #define _TILE_K { 0x22, 0x24, 0x28, 0x30, 0x28, 0x24, 0x22, 0x00 } #define _TILE_L { 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3E, 0x00 } #define _TILE_M { 0x22, 0x36, 0x2A, 0x2A, 0x22, 0x22, 0x22, 0x00 } #define _TILE_N { 0x22, 0x22, 0x32, 0x2A, 0x26, 0x22, 0x22, 0x00 } #define _TILE_O { 0x1C, 0x22, 0x22, 0x22, 0x22, 0x22, 0x1C, 0x00 } #define _TILE_P { 0x3C, 0x22, 0x22, 0x3C, 0x20, 0x20, 0x20, 0x00 } #define _TILE_Q { 0x1C, 0x22, 0x22, 0x22, 0x2A, 0x24, 0x1A, 0x00 } #define _TILE_R { 0x3C, 0x22, 0x22, 0x3C, 0x28, 0x24, 0x22, 0x00 } #define _TILE_S { 0x1C, 0x22, 0x20, 0x1C, 0x02, 0x22, 0x1C, 0x00 } #define _TILE_T { 0x3E, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x00 } #define _TILE_U { 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x1C, 0x00 } #define _TILE_V { 0x22, 0x22, 0x22, 0x14, 0x14, 0x08, 0x08, 0x00 } #define _TILE_W { 0x22, 0x22, 0x22, 0x2A, 0x2A, 0x36, 0x22, 0x00 } #define _TILE_X { 0x22, 0x22, 0x14, 0x08, 0x14, 0x22, 0x22, 0x00 } #define _TILE_Y { 0x22, 0x22, 0x14, 0x08, 0x08, 0x08, 0x08, 0x00 } #define _TILE_Z { 0x3E, 0x02, 0x04, 0x08, 0x10, 0x20, 0x3E, 0x00 } // 0 - 9 #define _TILE_DIGIT_0 { 0x1C, 0x22, 0x26, 0x2A, 0x32, 0x22, 0x1C, 0x00 } #define _TILE_DIGIT_1 { 0x08, 0x18, 0x08, 0x08, 0x08, 0x08, 0x1C, 0x00 } #define _TILE_DIGIT_2 { 0x1C, 0x22, 0x22, 0x0C, 0x10, 0x20, 0x3E, 0x00 } #define _TILE_DIGIT_3 { 0x1C, 0x22, 0x02, 0x0C, 0x02, 0x22, 0x1C, 0x00 } #define _TILE_DIGIT_4 { 0x04, 0x0C, 0x14, 0x24, 0x3E, 0x04, 0x04, 0x00 } #define _TILE_DIGIT_5 { 0x3E, 0x30, 0x3C, 0x02, 0x02, 0x22, 0x1C, 0x00 } #define _TILE_DIGIT_6 { 0x0C, 0x10, 0x20, 0x3C, 0x22, 0x22, 0x1C, 0x00 } #define _TILE_DIGIT_7 { 0x3E, 0x02, 0x04, 0x08, 0x10, 0x10, 0x10, 0x00 } #define _TILE_DIGIT_8 { 0x1C, 0x22, 0x22, 0x1C, 0x22, 0x22, 0x1C, 0x00 } #define _TILE_DIGIT_9 { 0x1C, 0x22, 0x22, 0x1E, 0x02, 0x04, 0x08, 0x00 } #define _TILE_0_UDG {} #define _TILE_1_UDG {} #define _TILE_2_UDG {} #define _TILE_3_UDG {} #define _TILE_4_UDG {} #define _TILE_7_UDG {} #define _TILE_9_UDG {} #define _TILE_8_UDG {} #define _TILE_11_UDG {} #define _TILE_5_UDG {} #define _TILE_6_UDG {} #define _TILE_16_UDG {} #define _TILE_14_UDG {} #define _TILE_15_UDG {} #define _TILE_10_UDG {} #define _TILE_12_UDG {} #define _TILE_13_UDG {} #define _TILE_17_UDG {} #define _TILE_18_UDG {} #define _TILE_19_UDG {} #define _TILE_20_UDG {} #define _TILE_21_UDG {} #define _TILE_22_UDG {} #define _TILE_23_UDG {} #define _TILE_24_UDG {} #define _TILE_25_UDG {} #define _TILE_26_UDG {} #endif // _6x9_CHARS ================================================ FILE: src/assets/templates/7x8/7x8_chars.h.template ================================================ #ifndef _7X8_CHARS #define _7X8_CHARS // A - Z #define _TILE_A { 0x08, 0x1C, 0x22, 0x22, 0x3E, 0x22, 0x22, 0x00 } #define _TILE_B { 0x3C, 0x12, 0x12, 0x1C, 0x12, 0x12, 0x3C, 0x00 } #define _TILE_C { 0x1C, 0x22, 0x20, 0x20, 0x20, 0x22, 0x1C, 0x00 } #define _TILE_D { 0x38, 0x24, 0x22, 0x22, 0x22, 0x24, 0x38, 0x00 } #define _TILE_E { 0x3E, 0x20, 0x20, 0x3C, 0x20, 0x20, 0x3E, 0x00 } #define _TILE_F { 0x3E, 0x20, 0x20, 0x3C, 0x20, 0x20, 0x20, 0x00 } #define _TILE_G { 0x1C, 0x20, 0x20, 0x2E, 0x22, 0x22, 0x1C, 0x00 } #define _TILE_H { 0x22, 0x22, 0x22, 0x3E, 0x22, 0x22, 0x22, 0x00 } #define _TILE_I { 0x1C, 0x08, 0x08, 0x08, 0x08, 0x08, 0x1C, 0x00 } #define _TILE_J { 0x0E, 0x04, 0x04, 0x04, 0x04, 0x24, 0x18, 0x00 } #define _TILE_K { 0x22, 0x24, 0x28, 0x30, 0x28, 0x24, 0x22, 0x00 } #define _TILE_L { 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3E, 0x00 } #define _TILE_M { 0x22, 0x36, 0x2A, 0x2A, 0x22, 0x22, 0x22, 0x00 } #define _TILE_N { 0x22, 0x22, 0x32, 0x2A, 0x26, 0x22, 0x22, 0x00 } #define _TILE_O { 0x1C, 0x22, 0x22, 0x22, 0x22, 0x22, 0x1C, 0x00 } #define _TILE_P { 0x3C, 0x22, 0x22, 0x3C, 0x20, 0x20, 0x20, 0x00 } #define _TILE_Q { 0x1C, 0x22, 0x22, 0x22, 0x2A, 0x24, 0x1A, 0x00 } #define _TILE_R { 0x3C, 0x22, 0x22, 0x3C, 0x28, 0x24, 0x22, 0x00 } #define _TILE_S { 0x1C, 0x22, 0x20, 0x1C, 0x02, 0x22, 0x1C, 0x00 } #define _TILE_T { 0x3E, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x00 } #define _TILE_U { 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x1C, 0x00 } #define _TILE_V { 0x22, 0x22, 0x22, 0x14, 0x14, 0x08, 0x08, 0x00 } #define _TILE_W { 0x22, 0x22, 0x22, 0x2A, 0x2A, 0x36, 0x22, 0x00 } #define _TILE_X { 0x22, 0x22, 0x14, 0x08, 0x14, 0x22, 0x22, 0x00 } #define _TILE_Y { 0x22, 0x22, 0x14, 0x08, 0x08, 0x08, 0x08, 0x00 } #define _TILE_Z { 0x3E, 0x02, 0x04, 0x08, 0x10, 0x20, 0x3E, 0x00 } // 0 - 9 #define _TILE_DIGIT_0 { 0x1C, 0x22, 0x26, 0x2A, 0x32, 0x22, 0x1C, 0x00 } #define _TILE_DIGIT_1 { 0x08, 0x18, 0x08, 0x08, 0x08, 0x08, 0x1C, 0x00 } #define _TILE_DIGIT_2 { 0x1C, 0x22, 0x22, 0x0C, 0x10, 0x20, 0x3E, 0x00 } #define _TILE_DIGIT_3 { 0x1C, 0x22, 0x02, 0x0C, 0x02, 0x22, 0x1C, 0x00 } #define _TILE_DIGIT_4 { 0x04, 0x0C, 0x14, 0x24, 0x3E, 0x04, 0x04, 0x00 } #define _TILE_DIGIT_5 { 0x3E, 0x30, 0x3C, 0x02, 0x02, 0x22, 0x1C, 0x00 } #define _TILE_DIGIT_6 { 0x0C, 0x10, 0x20, 0x3C, 0x22, 0x22, 0x1C, 0x00 } #define _TILE_DIGIT_7 { 0x3E, 0x02, 0x04, 0x08, 0x10, 0x10, 0x10, 0x00 } #define _TILE_DIGIT_8 { 0x1C, 0x22, 0x22, 0x1C, 0x22, 0x22, 0x1C, 0x00 } #define _TILE_DIGIT_9 { 0x1C, 0x22, 0x22, 0x1E, 0x02, 0x04, 0x08, 0x00 } #define _TILE_0_UDG {} #define _TILE_1_UDG {} #define _TILE_2_UDG {} #define _TILE_3_UDG {} #define _TILE_4_UDG {} #define _TILE_7_UDG {} #define _TILE_9_UDG {} #define _TILE_8_UDG {} #define _TILE_11_UDG {} #define _TILE_5_UDG {} #define _TILE_6_UDG {} #define _TILE_16_UDG {} #define _TILE_14_UDG {} #define _TILE_15_UDG {} #define _TILE_10_UDG {} #define _TILE_12_UDG {} #define _TILE_13_UDG {} #define _TILE_17_UDG {} #define _TILE_18_UDG {} #define _TILE_19_UDG {} #define _TILE_20_UDG {} #define _TILE_21_UDG {} #define _TILE_22_UDG {} #define _TILE_23_UDG {} #define _TILE_24_UDG {} #define _TILE_25_UDG {} #define _TILE_26_UDG {} #define _TILE_27_UDG {} #endif // _7x8_CHARS ================================================ FILE: src/assets/templates/8x6/8x6_chars.h.template ================================================ #ifndef _8x6_C_DEFINITION #define _8x6_C_DEFINITION #include "standard_libs.h" // A - Z #define _TILE_A {60, 98, 126, 98, 98, 0} #define _TILE_B {124, 98, 124, 98, 124,0} #define _TILE_C {60, 98, 96, 98, 60, 0} #define _TILE_D {124, 98, 98, 98, 124,0} #define _TILE_E {126, 96, 120, 96, 126,0} #define _TILE_F {126, 96, 120, 96, 96, 0} #define _TILE_G {60, 96, 102, 98, 60, 0} #define _TILE_H {98, 98, 126, 98, 98, 0} #define _TILE_I {60, 24, 24, 24, 60, 0} #define _TILE_J {6, 6, 6, 70, 60,0} #define _TILE_K {100, 104, 112, 104, 100, 0} #define _TILE_L {96, 96, 96, 96, 124, 0} #define _TILE_M {98, 118, 106, 98, 98, 0} #define _TILE_N {98, 114, 106, 102, 98, 0} #define _TILE_O {60, 98, 98, 98, 60, 0} #define _TILE_P {124, 98, 124, 96, 96, 0} #define _TILE_Q {60, 98, 98, 106, 60, 0} #define _TILE_R {124, 98, 124, 104, 100, 0} #define _TILE_S {62, 96, 60, 6, 124, 0} #define _TILE_T {126, 24, 24, 24, 24, 0} #define _TILE_U {98, 98, 98, 98, 60, 0} #define _TILE_V {98, 98, 52, 52, 24, 0} #define _TILE_W {193, 193, 106, 106, 52, 0} #define _TILE_X {99, 54, 28, 54, 99, 0} #define _TILE_Y {98, 52, 24, 24, 24, 0} #define _TILE_Z {126, 6, 24, 96, 126,0} // 0 - 9 #define _TILE_DIGIT_0 {28, 34, 34, 34, 28, 0} #define _TILE_DIGIT_1 {12, 20, 4, 4, 30, 0} #define _TILE_DIGIT_2 {60, 2, 28, 32, 62, 0} #define _TILE_DIGIT_3 {60, 2, 12, 2, 60, 0} #define _TILE_DIGIT_4 {12, 20, 36, 62, 4, 0} #define _TILE_DIGIT_5 {62, 32, 28, 2, 60, 0} #define _TILE_DIGIT_6 {30, 32, 60, 34, 28, 0} #define _TILE_DIGIT_7 {62, 2, 4, 8, 16, 0} #define _TILE_DIGIT_8 {28, 34, 28, 34, 28, 0} #define _TILE_DIGIT_9 {28, 34, 30, 2, 60, 0} #define _TILE_0_UDG {} #define _TILE_1_UDG {} #define _TILE_2_UDG {} #define _TILE_3_UDG {} #define _TILE_4_UDG {} #define _TILE_5_UDG {} #define _TILE_6_UDG {} #define _TILE_7_UDG {} #define _TILE_8_UDG {} #define _TILE_9_UDG {} #define _TILE_10_UDG {} #define _TILE_11_UDG {} #define _TILE_12_UDG {} #define _TILE_13_UDG {} #define _TILE_14_UDG {} #define _TILE_15_UDG {} #define _TILE_16_UDG {} #define _TILE_17_UDG {} #define _TILE_18_UDG {} #define _TILE_19_UDG {} #define _TILE_20_UDG {} #define _TILE_21_UDG {} #define _TILE_22_UDG {} #define _TILE_23_UDG {} #define _TILE_24_UDG {} #define _TILE_25_UDG {} #define _TILE_26_UDG {} #endif // _8x6_C_DEFINITION ================================================ FILE: src/assets/templates/8x6/8x6_tiles.s.template ================================================ .export __compressed_tile_data __compressed_tile_data: ; tile 0 .byte ; tile 1 .byte ; tile 2 .byte ; tile 3 .byte ; tile 4 .byte ; tile 5 .byte ; tile 6 .byte ; tile 7 .byte ; tile 8 .byte ; tile 9 .byte ; tile 10 .byte ; tile 11 .byte ; tile 12 .byte ; tile 13 .byte ; tile 14 .byte ; tile 15 .byte ; tile 16 .byte ; tile 17 .byte ; tile 18 .byte ; tile 19 .byte ; tile 20 .byte ; tile 21 .byte ; tile 22 .byte ; tile 23 .byte ; tile 24 .byte ; tile 25 .byte ; tile 26 .byte ================================================ FILE: src/assets/templates/8x6/z88dk_8x6_sprites_definitions.h.template ================================================ #ifndef _Z88DK_8X6_SPRITES_DEFINITIONS #define _Z88DK_8X6_SPRITES_DEFINITIONS __asm ._sprites ; 0 defb 8,6 defb %"--------" defb %"--------" defb %"--------" defb %"--------" defb %"--------" defb %"--------" ; 1 defb 8,6 defb ; 2 defb 8,6 defb ; 3 defb 8,6 defb ; 4 defb 8,6 defb ; 5 defb 8,6 defb ; 6 defb 8,6 defb ; 7 defb 8,6 defb ; 8 defb 8,6 defb ; 9 defb 8,6 defb ; 10 defb 8,6 defb ; 11 defb 8,6 defb ; 12 defb 8,6 defb ; 13 defb 8,6 defb ; 14 defb 8,6 defb ; 15 defb 8,6 defb ; 16 defb 8,6 defb %"--####--" defb %"-#---##-" defb %"-#--#-#-" defb %"-#-#--#-" defb %"-##---#-" defb %"--####--" ; 17 defb 8,6 defb %"---##---" defb %"--#-#---" defb %"----#---" defb %"----#---" defb %"----#---" defb %"--#####-" ; 18 defb 8,6 defb %"--####--" defb %"-#----#-" defb %"------#-" defb %"--####--" defb %"-#------" defb %"-######-" ; 19 defb 8,6 defb %"--####--" defb %"-#----#-" defb %"----##--" defb %"------#-" defb %"-#----#-" defb %"--####--" ; 20 defb 8,6 defb %"----#---" defb %"---##---" defb %"--#-#---" defb %"-#--#---" defb %"-######-" defb %"----#---" ; 21 defb 8,6 defb %"-######-" defb %"-#------" defb %"-#####--" defb %"------#-" defb %"-#----#-" defb %"--####--" ; 22 defb 8,6 defb %"--####--" defb %"-#------" defb %"-#####--" defb %"-#----#-" defb %"-#----#-" defb %"--####--" ; 23 defb 8,6 defb %"-######-" defb %"------#-" defb %"-----#--" defb %"----#---" defb %"---#----" defb %"---#----" ; 24 defb 8,6 defb %"--####--" defb %"-#----#-" defb %"--####--" defb %"-#----#-" defb %"-#----#-" defb %"--####--" ; 25 defb 8,6 defb %"--####--" defb %"-#----#-" defb %"-#----#-" defb %"--#####-" defb %"------#-" defb %"--####--" ; 26 defb 8,6 defb ; 27 defb 8,6 defb ; 28 defb 8,6 defb ; 29 defb 8,6 defb ; 30 defb 8,6 defb ; 31 defb 8,6 defb ; 32 defb 8,6 defb ; 33 defb 8,6 defb %"--####--" defb %"-#----#-" defb %"-#----#-" defb %"-######-" defb %"-#----#-" defb %"-#----#-" ; 34 defb 8,6 defb %"-#####--" defb %"-#----#-" defb %"-#####--" defb %"-#----#-" defb %"-#----#-" defb %"-#####--" ; 35 defb 8,6 defb %"--####--" defb %"-#----#-" defb %"-#------" defb %"-#------" defb %"-#----#-" defb %"--####--" ; 36 defb 8,6 defb %"-####---" defb %"-#---#--" defb %"-#----#-" defb %"-#----#-" defb %"-#---#--" defb %"-####---" ; 37 defb 8,6 defb %"-######-" defb %"-#------" defb %"-#####--" defb %"-#------" defb %"-#------" defb %"-######-" ; 38 defb 8,6 defb %"-######-" defb %"-#------" defb %"-#####--" defb %"-#------" defb %"-#------" defb %"-#------" ; 39 defb 8,6 defb %"--####--" defb %"-#----#-" defb %"-#------" defb %"-#--###-" defb %"-#----#-" defb %"--####--" ; 40 defb 8,6 defb %"-#----#-" defb %"-#----#-" defb %"-######-" defb %"-#----#-" defb %"-#----#-" defb %"-#----#-" ; 41 defb 8,6 defb %"--#####-" defb %"----#---" defb %"----#---" defb %"----#---" defb %"----#---" defb %"--#####-" ; 42 defb 8,6 defb %"------#-" defb %"------#-" defb %"------#-" defb %"-#----#-" defb %"-#----#-" defb %"--####--" ; 43 defb 8,6 defb %"-#---#--" defb %"-#--#---" defb %"-###----" defb %"-#--#---" defb %"-#---#--" defb %"-#----#-" ; 44 defb 8,6 defb %"-#------" defb %"-#------" defb %"-#------" defb %"-#------" defb %"-#------" defb %"-######-" ; 45 defb 8,6 defb %"-#----#-" defb %"-##--##-" defb %"-#-##-#-" defb %"-#----#-" defb %"-#----#-" defb %"-#----#-" ; 46 defb 8,6 defb %"-#----#-" defb %"-##---#-" defb %"-#-#--#-" defb %"-#--#-#-" defb %"-#---##-" defb %"-#----#-" ; 47 defb 8,6 defb %"--####--" defb %"-#----#-" defb %"-#----#-" defb %"-#----#-" defb %"-#----#-" defb %"--####--" ; 48 defb 8,6 defb %"-#####--" defb %"-#----#-" defb %"-#----#-" defb %"-#####--" defb %"-#------" defb %"-#------" ; 49 defb 8,6 defb %"--####--" defb %"-#----#-" defb %"-#----#-" defb %"-#-#--#-" defb %"-#--#-#-" defb %"--####--" ; 50 defb 8,6 defb %"-#####--" defb %"-#----#-" defb %"-#----#-" defb %"-#####--" defb %"-#---#--" defb %"-#----#-" ; 51 defb 8,6 defb %"--####--" defb %"-#------" defb %"--####--" defb %"------#-" defb %"-#----#-" defb %"--####--" ; 52 defb 8,6 defb %"#######-" defb %"---#----" defb %"---#----" defb %"---#----" defb %"---#----" defb %"---#----" ; 53 defb 8,6 defb %"-#----#-" defb %"-#----#-" defb %"-#----#-" defb %"-#----#-" defb %"-#----#-" defb %"--####--" ; 54 defb 8,6 defb %"-#----#-" defb %"-#----#-" defb %"-#----#-" defb %"-#----#-" defb %"--#--#--" defb %"---##---" ; 55 defb 8,6 defb %"-#----#-" defb %"-#----#-" defb %"-#----#-" defb %"-#----#-" defb %"-#-##-#-" defb %"--#--#--" ; 56 defb 8,6 defb %"-#----#-" defb %"--#--#--" defb %"---##---" defb %"---##---" defb %"--#--#--" defb %"-#----#-" ; 57 defb 8,6 defb %"#-----#-" defb %"-#---#--" defb %"--#-#---" defb %"---#----" defb %"---#----" defb %"---#----" ; 58 defb 8,6 defb %"-######-" defb %"-----#--" defb %"----#---" defb %"---#----" defb %"--#-----" defb %"-######-" ; 59 defb 8,6 defb ; 60 defb 8,6 defb ; 61 defb 8,6 defb ; 62 defb 8,6 defb ; 63 defb 8,6 defb #if !defined(__FEWER_SPRITES) ; 64 defb 8,6 defb %"---###--" defb %"--#---#-" defb %"-####---" defb %"--#-----" defb %"--#-----" defb %"-######-" ; 65 defb 8,6 defb %"--------" defb %"--###---" defb %"-----#--" defb %"--####--" defb %"-#---#--" defb %"--####--" ; 66 defb 8,6 defb %"--#-----" defb %"--#-----" defb %"--####--" defb %"--#---#-" defb %"--#---#-" defb %"--####--" ; 67 defb 8,6 defb %"--------" defb %"---###--" defb %"--#-----" defb %"--#-----" defb %"--#-----" defb %"---###--" ; 68 defb 8,6 defb %"-----#--" defb %"-----#--" defb %"--####--" defb %"-#---#--" defb %"-#---#--" defb %"--####--" ; 69 defb 8,6 defb %"--------" defb %"--###---" defb %"-#---#--" defb %"-####---" defb %"-#------" defb %"--####--" ; 70 defb 8,6 defb %"----##--" defb %"---#----" defb %"---##---" defb %"---#----" defb %"---#----" defb %"---#----" ; 71 defb 8,6 defb %"--####--" defb %"-#---#--" defb %"-#---#--" defb %"--####--" defb %"-----#--" defb %"--###---" ; 72 defb 8,6 defb %"-#------" defb %"-#------" defb %"-####---" defb %"-#---#--" defb %"-#---#--" defb %"-#---#--" ; 73 defb 8,6 defb %"---#----" defb %"--------" defb %"--##----" defb %"---#----" defb %"---#----" defb %"--###---" ; 74 defb 8,6 defb %"-----#--" defb %"--------" defb %"-----#--" defb %"-----#--" defb %"--#--#--" defb %"---##---" ; 75 defb 8,6 defb %"--#-----" defb %"--#-#---" defb %"--##----" defb %"--##----" defb %"--#-#---" defb %"--#--#--" ; 76 defb 8,6 defb %"---#----" defb %"---#----" defb %"---#----" defb %"---#----" defb %"---#----" defb %"----##--" ; 77 defb 8,6 defb %"--------" defb %"-##-#---" defb %"-#-#-#--" defb %"-#-#-#--" defb %"-#-#-#--" defb %"-#-#-#--" ; 78 defb 8,6 defb %"--------" defb %"-####---" defb %"-#---#--" defb %"-#---#--" defb %"-#---#--" defb %"-#---#--" ; 79 defb 8,6 defb %"--------" defb %"--###---" defb %"-#---#--" defb %"-#---#--" defb %"-#---#--" defb %"--###---" ; 80 defb 8,6 defb %"-####---" defb %"-#---#--" defb %"-#---#--" defb %"-####---" defb %"-#------" defb %"-#------" ; 81 defb 8,6 defb %"--####--" defb %"-#---#--" defb %"-#---#--" defb %"--####--" defb %"-----#--" defb %"-----##-" ; 82 defb 8,6 defb %"--------" defb %"---###--" defb %"--#-----" defb %"--#-----" defb %"--#-----" defb %"--#-----" ; 83 defb 8,6 defb %"--------" defb %"--###---" defb %"-#------" defb %"--###---" defb %"-----#--" defb %"-####---" ; 84 defb 8,6 defb %"---#----" defb %"--###---" defb %"---#----" defb %"---#----" defb %"---#----" defb %"----##--" ; 85 defb 8,6 defb %"--------" defb %"-#---#--" defb %"-#---#--" defb %"-#---#--" defb %"-#---#--" defb %"--###---" ; 86 defb 8,6 defb %"--------" defb %"-#---#--" defb %"-#---#--" defb %"--#-#---" defb %"--#-#---" defb %"---#----" ; 87 defb 8,6 defb %"--------" defb %"-#---#--" defb %"-#-#-#--" defb %"-#-#-#--" defb %"-#-#-#--" defb %"--#-#---" ; 88 defb 8,6 defb %"--------" defb %"-#---#--" defb %"--#-#---" defb %"---#----" defb %"--#-#---" defb %"-#---#--" ; 89 defb 8,6 defb %"-#---#--" defb %"-#---#--" defb %"-#---#--" defb %"--####--" defb %"-----#--" defb %"--###---" ; 90 defb 8,6 defb %"--------" defb %"-#####--" defb %"----#---" defb %"---#----" defb %"--#-----" defb %"-#####--" ; 91 defb 8,6 defb %"----###-" defb %"----#---" defb %"--##----" defb %"----#---" defb %"----#---" defb %"----###-" ; 92 defb 8,6 defb %"----#---" defb %"----#---" defb %"----#---" defb %"----#---" defb %"----#---" defb %"----#---" ; 93 defb 8,6 defb %"-###----" defb %"---#----" defb %"----##--" defb %"---#----" defb %"---#----" defb %"-###----" ; 94 defb 8,6 defb %"--#-#---" defb %"--------" defb %"--------" defb %"--------" defb %"--------" ; 95 defb 8,6 defb %"--####--" defb %"#--##--#" defb %"#-#----#" defb %"#-#----#" defb %"#--##--#" defb %"--####--" #endif defb 8,6 defb %"########" defb %"########" defb %"########" defb %"########" defb %"########" defb %"########" __endasm; #endif // _Z88DK_8X6_SPRITES_DEFINITIONS ================================================ FILE: src/assets/templates/8x8/8x8_chars.h.template ================================================ #ifndef _8X8_CHARS #define _8X8_CHARS // A - Z #define _TILE_A { 0x38,0x6c,0xc6,0xc6,0xfe,0xc6,0xc6,0x00 } #define _TILE_B { 0xfc,0xc6,0xc6,0xfc,0xc6,0xc6,0xfc,0x00 } #define _TILE_C { 0x3c,0x66,0xc0,0xc0,0xc0,0x66,0x3c,0x00 } #define _TILE_D { 0xf8,0xcc,0xc6,0xc6,0xc6,0xcc,0xf8,0x00 } #define _TILE_E { 0xfc,0xc0,0xc0,0xf8,0xc0,0xc0,0xfe,0x00 } #define _TILE_F { 0xfc,0xc0,0xc0,0xf8,0xc0,0xc0,0xc0,0x00 } #define _TILE_G { 0x3e,0x60,0xc0,0xce,0xc6,0x66,0x3e,0x00 } #define _TILE_H { 0xc6,0xc6,0xc6,0xfe,0xc6,0xc6,0xc6,0x00 } #define _TILE_I { 0xfc,0x30,0x30,0x30,0x30,0x30,0xfc,0x00 } #define _TILE_J { 0x06,0x06,0x06,0x06,0x06,0xc6,0x7c,0x00 } #define _TILE_K { 0xc6,0xcc,0xd8,0xf0,0xf8,0xdc,0xce,0x00 } #define _TILE_L { 0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xfe,0x00 } #define _TILE_M { 0xc6,0xee,0xfe,0xd6,0xc6,0xc6,0xc6,0x00 } #define _TILE_N { 0xc6,0xe6,0xf6,0xde,0xce,0xc6,0xc6,0x00 } #define _TILE_O { 0x7c,0xc6,0xc6,0xc6,0xc6,0xc6,0x7c,0x00 } #define _TILE_P { 0xfc,0xc6,0xc6,0xc6,0xfc,0xc0,0xc0,0x00 } #define _TILE_Q { 0x7c,0xc6,0xc6,0xc6,0xde,0xcc,0x7a,0x00 } #define _TILE_R { 0xfc,0xc6,0xc6,0xcc,0xf8,0xdc,0xce,0x00 } #define _TILE_S { 0x78,0xcc,0xc0,0x7c,0x06,0xc6,0x7c,0x00 } #define _TILE_T { 0xfc,0x30,0x30,0x30,0x30,0x30,0x30,0x00 } #define _TILE_U { 0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0x7c,0x00 } #define _TILE_V { 0xc6,0xc6,0xc6,0xc6,0x6c,0x38,0x10,0x00 } #define _TILE_W { 0xc6,0xc6,0xd6,0xfe,0xfe,0xee,0xc6,0x00 } #define _TILE_X { 0xc6,0xee,0x7c,0x38,0x7c,0xee,0xc6,0x00 } #define _TILE_Y { 0xcc,0xcc,0xcc,0x78,0x30,0x30,0x30,0x00 } #define _TILE_Z { 0xfe,0x0e,0x1c,0x38,0x70,0xe0,0xfe,0x00 } // 0 - 9 #define _TILE_DIGIT_0 { 0x38,0x4c,0xc6,0xc6,0xc6,0x64,0x38,0x00 } #define _TILE_DIGIT_1 { 0x30,0x70,0x30,0x30,0x30,0x30,0xfc,0x00 } #define _TILE_DIGIT_2 { 0x7c,0xc6,0x0e,0x3c,0x60,0xc0,0xfe,0x00 } #define _TILE_DIGIT_3 { 0x7e,0x0c,0x18,0x3c,0x06,0xc6,0x7c,0x00 } #define _TILE_DIGIT_4 { 0x1c,0x3c,0x6c,0xcc,0xfe,0x0c,0x0c,0x00 } #define _TILE_DIGIT_5 { 0xfc,0xc0,0xfc,0x06,0x06,0xc6,0x7c,0x00 } #define _TILE_DIGIT_6 { 0x3c,0x60,0xc0,0xfc,0xc6,0xc6,0x7c,0x00 } #define _TILE_DIGIT_7 { 0xfe,0xc6,0x0c,0x18,0x30,0x30,0x30,0x00 } #define _TILE_DIGIT_8 { 0x78,0xc4,0xe4,0x78,0x9e,0x86,0x7c,0x00 } #define _TILE_DIGIT_9 { 0x7c,0xc6,0xc6,0x7e,0x06,0x0c,0x78,0x00 } #define _SPACE_TILE {0,0,0,0,0,0,0,0} #define _TILE_0_UDG { } #define _TILE_1_UDG { } #define _TILE_3_UDG { } #define _TILE_2_UDG { } #define _TILE_4_UDG {} #define _TILE_7_UDG { } #define _TILE_9_UDG { } #define _TILE_8_UDG { } #define _TILE_11_UDG { } #define _TILE_5_UDG { } #define _TILE_16_UDG { } #define _TILE_15_UDG { } #define _TILE_14_UDG { } #define _TILE_6_UDG {} #define _TILE_12_UDG { } #define _TILE_13_UDG { } #define _TILE_10_UDG { } #define _TILE_17_UDG { } #define _TILE_18_UDG { } #define _TILE_19_UDG { } #define _TILE_20_UDG { } #define _TILE_21_UDG { } #define _TILE_22_UDG { } #define _TILE_23_UDG { } #define _TILE_24_UDG { } #define _TILE_25_UDG { } #define _TILE_26_UDG { } #endif // _8x8_CHARS ================================================ FILE: src/assets/templates/8x8/cc65_agat.s.template ================================================ .export _udgs _udgs: .byte .byte .byte .byte .byte .byte .byte .byte .byte .byte .byte .byte .byte .byte .byte .byte .byte .byte .byte .byte .byte .byte .byte .byte .byte .byte .byte .byte $00,$00,$00,$00,$00,$00,$00,$00 ; 32 .byte $38,$6c,$c6,$c6,$fe,$c6,$c6,$00 ; a .byte $fc,$c6,$c6,$fc,$c6,$c6,$fc,$00,$3c,$66,$c0,$c0,$c0,$66,$3c,$00 .byte $f8,$cc,$c6,$c6,$c6,$cc,$f8,$00,$fc,$c0,$c0,$f8,$c0,$c0,$fe,$00 .byte $fc,$c0,$c0,$f8,$c0,$c0,$c0,$00,$3e,$60,$c0,$ce,$c6,$66,$3e,$00 .byte $c6,$c6,$c6,$fe,$c6,$c6,$c6,$00,$fc,$30,$30,$30,$30,$30,$fc,$00 .byte $06,$06,$06,$06,$06,$c6,$7c,$00,$c6,$cc,$d8,$f0,$f8,$dc,$ce,$00 .byte $c0,$c0,$c0,$c0,$c0,$c0,$fe,$00,$c6,$ee,$fe,$d6,$c6,$c6,$c6,$00 .byte $c6,$e6,$f6,$de,$ce,$c6,$c6,$00,$7c,$c6,$c6,$c6,$c6,$c6,$7c,$00 .byte $fc,$c6,$c6,$c6,$fc,$c0,$c0,$00,$7c,$c6,$c6,$c6,$de,$cc,$7a,$00 .byte $fc,$c6,$c6,$cc,$f8,$dc,$ce,$00,$78,$cc,$c0,$7c,$06,$c6,$7c,$00 .byte $fc,$30,$30,$30,$30,$30,$30,$00,$c6,$c6,$c6,$c6,$c6,$c6,$7c,$00 .byte $c6,$c6,$c6,$c6,$6c,$38,$10,$00,$c6,$c6,$d6,$fe,$fe,$ee,$c6,$00 .byte $c6,$ee,$7c,$38,$7c,$ee,$c6,$00,$cc,$cc,$cc,$78,$30,$30,$30,$00 .byte $fe,$0e,$1c,$38,$70,$e0,$fe,$00 ; z .byte $38,$4c,$c6,$c6,$c6,$64,$38,$00 ; 0 .byte $30,$70,$30,$30,$30,$30,$fc,$00,$7c,$c6,$0e,$3c,$60,$c0,$fe,$00 .byte $7e,$0c,$18,$3c,$06,$c6,$7c,$00,$1c,$3c,$6c,$cc,$fe,$0c,$0c,$00 .byte $fc,$c0,$fc,$06,$06,$c6,$7c,$00,$3c,$60,$c0,$fc,$c6,$c6,$7c,$00 .byte $fe,$c6,$0c,$18,$30,$30,$30,$00,$78,$c4,$e4,$78,$9e,$86,$7c,$00 .byte $7c,$c6,$c6,$7e,$06,$0c,$78,$00 ; 9 ================================================ FILE: src/assets/templates/8x8/cc65_gamate_tiles.s.template ================================================ ; VGA charset for the Gamate conio implementation .export fontdata .rodata fontdata: .byte .byte .byte .byte .byte .byte .byte .byte .byte .byte .byte .byte .byte .byte 0,0,0,0,0,0,0,0 .byte .byte .byte .byte .byte .byte .byte .byte .byte .byte .byte .byte .byte .byte .byte .byte $00, $24, $66, $FF, $66, $24, $00, $00 .byte $00, $18, $3C, $7E, $FF, $FF, $00, $00 .byte $00, $FF, $FF, $7E, $3C, $18, $00, $00 .byte $00, $00, $00, $00, $00, $00, $00, $00 .byte $30, $78, $78, $78, $30, $00, $30, $00 .byte $6C, $6C, $6C, $00, $00, $00, $00, $00 .byte $6C, $6C, $FE, $6C, $FE, $6C, $6C, $00 .byte $30, $7C, $C0, $78, $0C, $F8, $30, $00 .byte $00, $C6, $CC, $18, $30, $66, $C6, $00 .byte $38, $6C, $38, $76, $DC, $CC, $76, $00 .byte $60, $60, $C0, $00, $00, $00, $00, $00 .byte $18, $30, $60, $60, $60, $30, $18, $00 .byte $60, $30, $18, $18, $18, $30, $60, $00 .byte $00, $66, $3C, $FF, $3C, $66, $00, $00 .byte $00, $30, $30, $FC, $30, $30, $00, $00 .byte $00, $00, $00, $00, $00, $30, $30, $60 .byte $00, $00, $00, $FC, $00, $00, $00, $00 .byte $00, $00, $00, $00, $00, $30, $30, $00 .byte $06, $0C, $18, $30, $60, $C0, $80, $00 .byte $7C, $C6, $CE, $DE, $F6, $E6, $7C, $00 .byte $30, $70, $30, $30, $30, $30, $FC, $00 .byte $78, $CC, $0C, $38, $60, $CC, $FC, $00 .byte $78, $CC, $0C, $38, $0C, $CC, $78, $00 .byte $1C, $3C, $6C, $CC, $FE, $0C, $1E, $00 .byte $FC, $C0, $F8, $0C, $0C, $CC, $78, $00 .byte $38, $60, $C0, $F8, $CC, $CC, $78, $00 .byte $FC, $CC, $0C, $18, $30, $30, $30, $00 .byte $78, $CC, $CC, $78, $CC, $CC, $78, $00 .byte $78, $CC, $CC, $7C, $0C, $18, $70, $00 .byte $00, $30, $30, $00, $00, $30, $30, $00 .byte $00, $30, $30, $00, $00, $30, $30, $60 .byte $18, $30, $60, $C0, $60, $30, $18, $00 .byte $00, $00, $FC, $00, $00, $FC, $00, $00 .byte $60, $30, $18, $0C, $18, $30, $60, $00 .byte $78, $CC, $0C, $18, $30, $00, $30, $00 .byte $7C, $C6, $DE, $DE, $DE, $C0, $78, $00 .byte $30, $78, $CC, $CC, $FC, $CC, $CC, $00 .byte $FC, $66, $66, $7C, $66, $66, $FC, $00 .byte $3C, $66, $C0, $C0, $C0, $66, $3C, $00 .byte $F8, $6C, $66, $66, $66, $6C, $F8, $00 .byte $7E, $60, $60, $78, $60, $60, $7E, $00 .byte $7E, $60, $60, $78, $60, $60, $60, $00 .byte $3C, $66, $C0, $C0, $CE, $66, $3E, $00 .byte $CC, $CC, $CC, $FC, $CC, $CC, $CC, $00 .byte $78, $30, $30, $30, $30, $30, $78, $00 .byte $1E, $0C, $0C, $0C, $CC, $CC, $78, $00 .byte $E6, $66, $6C, $78, $6C, $66, $E6, $00 .byte $60, $60, $60, $60, $60, $60, $7E, $00 .byte $C6, $EE, $FE, $FE, $D6, $C6, $C6, $00 .byte $C6, $E6, $F6, $DE, $CE, $C6, $C6, $00 .byte $38, $6C, $C6, $C6, $C6, $6C, $38, $00 .byte $FC, $66, $66, $7C, $60, $60, $F0, $00 .byte $78, $CC, $CC, $CC, $DC, $78, $1C, $00 .byte $FC, $66, $66, $7C, $6C, $66, $E6, $00 .byte $78, $CC, $E0, $70, $1C, $CC, $78, $00 .byte $FC, $30, $30, $30, $30, $30, $30, $00 .byte $CC, $CC, $CC, $CC, $CC, $CC, $FC, $00 .byte $CC, $CC, $CC, $CC, $CC, $78, $30, $00 .byte $C6, $C6, $C6, $D6, $FE, $EE, $C6, $00 .byte $C6, $C6, $6C, $38, $38, $6C, $C6, $00 .byte $CC, $CC, $CC, $78, $30, $30, $78, $00 .byte $FE, $06, $0C, $18, $30, $60, $FE, $00 .byte $78, $60, $60, $60, $60, $60, $78, $00 .byte $C0, $60, $30, $18, $0C, $06, $02, $00 .byte $78, $18, $18, $18, $18, $18, $78, $00 .byte $10, $38, $6C, $C6, $00, $00, $00, $00 .byte $00, $00, $00, $00, $00, $00, $00, $FF .byte $30, $30, $18, $00, $00, $00, $00, $00 .byte $00, $00, $78, $0C, $7C, $CC, $76, $00 .byte $E0, $60, $60, $7C, $66, $66, $DC, $00 .byte $00, $00, $78, $CC, $C0, $CC, $78, $00 .byte $1C, $0C, $0C, $7C, $CC, $CC, $76, $00 .byte $00, $00, $78, $CC, $FC, $C0, $78, $00 .byte $38, $6C, $60, $F0, $60, $60, $F0, $00 .byte $00, $00, $76, $CC, $CC, $7C, $0C, $F8 .byte $E0, $60, $6C, $76, $66, $66, $E6, $00 .byte $30, $00, $70, $30, $30, $30, $78, $00 .byte $0C, $00, $0C, $0C, $0C, $CC, $CC, $78 .byte $E0, $60, $66, $6C, $78, $6C, $E6, $00 .byte $70, $30, $30, $30, $30, $30, $78, $00 .byte $00, $00, $CC, $FE, $FE, $D6, $C6, $00 .byte $00, $00, $F8, $CC, $CC, $CC, $CC, $00 .byte $00, $00, $78, $CC, $CC, $CC, $78, $00 .byte $00, $00, $DC, $66, $66, $7C, $60, $F0 .byte $00, $00, $76, $CC, $CC, $7C, $0C, $1E .byte $00, $00, $DC, $76, $66, $60, $F0, $00 .byte $00, $00, $7C, $C0, $78, $0C, $F8, $00 .byte $10, $30, $7C, $30, $30, $34, $18, $00 .byte $00, $00, $CC, $CC, $CC, $CC, $76, $00 .byte $00, $00, $CC, $CC, $CC, $78, $30, $00 .byte $00, $00, $C6, $D6, $FE, $FE, $6C, $00 .byte $00, $00, $C6, $6C, $38, $6C, $C6, $00 .byte $00, $00, $CC, $CC, $CC, $7C, $0C, $F8 .byte $00, $00, $FC, $98, $30, $64, $FC, $00 .byte $1C, $30, $30, $E0, $30, $30, $1C, $00 .byte $18, $18, $18, $00, $18, $18, $18, $00 .byte $E0, $30, $30, $1C, $30, $30, $E0, $00 .byte $76, $DC, $00, $00, $00, $00, $00, $00 .byte $00, $10, $38, $6C, $C6, $C6, $FE, $00 ================================================ FILE: src/assets/templates/8x8/cc65_nes_color_tiles.s.template ================================================ ; ------------------------------------------------------------------------ ; Character data ; ------------------------------------------------------------------------ .export NESfont .segment "CHARS" NESfont: .byte %00000000 ; 0000 1-00: .byte %00000000 ; 0001 1-00: .byte %00000000 ; 0002 1-00: .byte %00000000 ; 0003 1-00: .byte %00000000 ; 0004 1-00: .byte %00000000 ; 0005 1-00: .byte %00000000 ; 0006 1-00: .byte %00000000 ; 0007 1-00: .byte %00000000 ; 0008 1-01: .byte %00000000 ; 0009 1-01: .byte %00000000 ; 000A 1-01: .byte %00000000 ; 000B 1-01: .byte %00000000 ; 000C 1-01: .byte %00000000 ; 000D 1-01: .byte %00000000 ; 000E 1-01: .byte %00000000 ; 000F 1-01: .byte .byte %00000000 ; 0008 1-01: .byte %00000000 ; 0009 1-01: .byte %00000000 ; 000A 1-01: .byte %00000000 ; 000B 1-01: .byte %00000000 ; 000C 1-01: .byte %00000000 ; 000D 1-01: .byte %00000000 ; 000E 1-01: .byte %00000000 ; 000F 1-01: .byte %00000000 ; 0008 1-01: .byte %00000000 ; 0009 1-01: .byte %00000000 ; 000A 1-01: .byte %00000000 ; 000B 1-01: .byte %00000000 ; 000C 1-01: .byte %00000000 ; 000D 1-01: .byte %00000000 ; 000E 1-01: .byte %00000000 ; 000F 1-01: .byte .byte .byte .byte .byte %00000000 ; 0008 1-01: .byte %00000000 ; 0009 1-01: .byte %00000000 ; 000A 1-01: .byte %00000000 ; 000B 1-01: .byte %00000000 ; 000C 1-01: .byte %00000000 ; 000D 1-01: .byte %00000000 ; 000E 1-01: .byte %00000000 ; 000F 1-01: .byte %00000000 ; 0008 1-01: .byte %00000000 ; 0009 1-01: .byte %00000000 ; 000A 1-01: .byte %00000000 ; 000B 1-01: .byte %00000000 ; 000C 1-01: .byte %00000000 ; 000D 1-01: .byte %00000000 ; 000E 1-01: .byte %00000000 ; 000F 1-01: .byte .byte .byte .byte .byte %00000000 ; 0008 1-01: .byte %00000000 ; 0009 1-01: .byte %00000000 ; 000A 1-01: .byte %00000000 ; 000B 1-01: .byte %00000000 ; 000C 1-01: .byte %00000000 ; 000D 1-01: .byte %00000000 ; 000E 1-01: .byte %00000000 ; 000F 1-01: .byte %00000000 ; 0008 1-01: .byte %00000000 ; 0009 1-01: .byte %00000000 ; 000A 1-01: .byte %00000000 ; 000B 1-01: .byte %00000000 ; 000C 1-01: .byte %00000000 ; 000D 1-01: .byte %00000000 ; 000E 1-01: .byte %00000000 ; 000F 1-01: .byte .byte .byte .byte .byte %00000000 ; 0008 1-01: .byte %00000000 ; 0009 1-01: .byte %00000000 ; 000A 1-01: .byte %00000000 ; 000B 1-01: .byte %00000000 ; 000C 1-01: .byte %00000000 ; 000D 1-01: .byte %00000000 ; 000E 1-01: .byte %00000000 ; 000F 1-01: .byte %00000000 ; 0008 1-01: .byte %00000000 ; 0009 1-01: .byte %00000000 ; 000A 1-01: .byte %00000000 ; 000B 1-01: .byte %00000000 ; 000C 1-01: .byte %00000000 ; 000D 1-01: .byte %00000000 ; 000E 1-01: .byte %00000000 ; 000F 1-01: .byte .byte .byte .byte .byte %00000000 ; 0008 1-01: .byte %00000000 ; 0009 1-01: .byte %00000000 ; 000A 1-01: .byte %00000000 ; 000B 1-01: .byte %00000000 ; 000C 1-01: .byte %00000000 ; 000D 1-01: .byte %00000000 ; 000E 1-01: .byte %00000000 ; 000F 1-01: .byte %00000000 ; 0008 1-01: .byte %00000000 ; 0009 1-01: .byte %00000000 ; 000A 1-01: .byte %00000000 ; 000B 1-01: .byte %00000000 ; 000C 1-01: .byte %00000000 ; 000D 1-01: .byte %00000000 ; 000E 1-01: .byte %00000000 ; 000F 1-01: .byte .byte .byte .byte .byte %00000000 ; 0008 1-01: .byte %00000000 ; 0009 1-01: .byte %00000000 ; 000A 1-01: .byte %00000000 ; 000B 1-01: .byte %00000000 ; 000C 1-01: .byte %00000000 ; 000D 1-01: .byte %00000000 ; 000E 1-01: .byte %00000000 ; 000F 1-01: .byte %00000000 ; 0008 1-01: .byte %00000000 ; 0009 1-01: .byte %00000000 ; 000A 1-01: .byte %00000000 ; 000B 1-01: .byte %00000000 ; 000C 1-01: .byte %00000000 ; 000D 1-01: .byte %00000000 ; 000E 1-01: .byte %00000000 ; 000F 1-01: .byte .byte .byte .byte .byte %00000000 ; 0008 1-01: .byte %00000000 ; 0009 1-01: .byte %00000000 ; 000A 1-01: .byte %00000000 ; 000B 1-01: .byte %00000000 ; 000C 1-01: .byte %00000000 ; 000D 1-01: .byte %00000000 ; 000E 1-01: .byte %00000000 ; 000F 1-01: .byte %00000000 ; 0008 1-01: .byte %00000000 ; 0009 1-01: .byte %00000000 ; 000A 1-01: .byte %00000000 ; 000B 1-01: .byte %00000000 ; 000C 1-01: .byte %00000000 ; 000D 1-01: .byte %00000000 ; 000E 1-01: .byte %00000000 ; 000F 1-01: .byte .byte .byte .byte .byte %00000000 ; 0008 1-01: .byte %00000000 ; 0009 1-01: .byte %00000000 ; 000A 1-01: .byte %00000000 ; 000B 1-01: .byte %00000000 ; 000C 1-01: .byte %00000000 ; 000D 1-01: .byte %00000000 ; 000E 1-01: .byte %00000000 ; 000F 1-01: .byte %00000000 ; 0008 1-01: .byte %00000000 ; 0009 1-01: .byte %00000000 ; 000A 1-01: .byte %00000000 ; 000B 1-01: .byte %00000000 ; 000C 1-01: .byte %00000000 ; 000D 1-01: .byte %00000000 ; 000E 1-01: .byte %00000000 ; 000F 1-01: .byte .byte .byte .byte .byte %00000000 ; 0008 1-01: .byte %00000000 ; 0009 1-01: .byte %00000000 ; 000A 1-01: .byte %00000000 ; 000B 1-01: .byte %00000000 ; 000C 1-01: .byte %00000000 ; 000D 1-01: .byte %00000000 ; 000E 1-01: .byte %00000000 ; 000F 1-01: .byte %00000000 ; 0008 1-01: .byte %00000000 ; 0009 1-01: .byte %00000000 ; 000A 1-01: .byte %00000000 ; 000B 1-01: .byte %00000000 ; 000C 1-01: .byte %00000000 ; 000D 1-01: .byte %00000000 ; 000E 1-01: .byte %00000000 ; 000F 1-01: .byte .byte .byte .byte .byte %00000000 ; 0008 1-01: .byte %00000000 ; 0009 1-01: .byte %00000000 ; 000A 1-01: .byte %00000000 ; 000B 1-01: .byte %00000000 ; 000C 1-01: .byte %00000000 ; 000D 1-01: .byte %00000000 ; 000E 1-01: .byte %00000000 ; 000F 1-01: .byte %00000000 ; 0008 1-01: .byte %00000000 ; 0009 1-01: .byte %00000000 ; 000A 1-01: .byte %00000000 ; 000B 1-01: .byte %00000000 ; 000C 1-01: .byte %00000000 ; 000D 1-01: .byte %00000000 ; 000E 1-01: .byte %00000000 ; 000F 1-01: .byte .byte .byte .byte %11110000 ; 01F0 1-3e: **** .byte %11110000 ; 01F1 1-3e: **** .byte %11110000 ; 01F2 1-3e: **** .byte %11110000 ; 01F3 1-3e: **** .byte %00001111 ; 01F4 1-3e: **** .byte %00001111 ; 01F5 1-3e: **** .byte %00001111 ; 01F6 1-3e: **** .byte %00001111 ; 01F7 1-3e: **** .byte %11110000 ; 01F8 1-3f: **** .byte %11110000 ; 01F9 1-3f: **** .byte %11110000 ; 01FA 1-3f: **** .byte %11110000 ; 01FB 1-3f: **** .byte %00001111 ; 01FC 1-3f: **** .byte %00001111 ; 01FD 1-3f: **** .byte %00001111 ; 01FE 1-3f: **** .byte %00001111 ; 01FF 1-3f: **** .byte %00000000 ; 0200 1-40: .byte %00000000 ; 0201 1-40: .byte %00000000 ; 0202 1-40: .byte %00000000 ; 0203 1-40: .byte %00000000 ; 0204 1-40: .byte %00000000 ; 0205 1-40: .byte %00000000 ; 0206 1-40: .byte %00000000 ; 0207 1-40: .byte %00000000 ; 0208 1-41: .byte %00000000 ; 0209 1-41: .byte %00000000 ; 020A 1-41: .byte %00000000 ; 020B 1-41: .byte %00000000 ; 020C 1-41: .byte %00000000 ; 020D 1-41: .byte %00000000 ; 020E 1-41: .byte %00000000 ; 020F 1-41: .byte .byte %00000000 ; 0200 1-40: .byte %00000000 ; 0201 1-40: .byte %00000000 ; 0202 1-40: .byte %00000000 ; 0203 1-40: .byte %00000000 ; 0204 1-40: .byte %00000000 ; 0205 1-40: .byte %00000000 ; 0206 1-40: .byte %00000000 ; 0207 1-40: .byte %00000000 ; 0208 1-41: .byte %00000000 ; 0209 1-41: .byte %00000000 ; 020A 1-41: .byte %00000000 ; 020B 1-41: .byte %00000000 ; 020C 1-41: .byte %00000000 ; 020D 1-41: .byte %00000000 ; 020E 1-41: .byte %00000000 ; 020F 1-41: .byte .byte .byte .byte %00011000 ; 0240 1-48: ** .byte %00111110 ; 0241 1-48: ***** .byte %01100000 ; 0242 1-48: ** .byte %00111100 ; 0243 1-48: **** .byte %00000110 ; 0244 1-48: ** .byte %01111100 ; 0245 1-48: ***** .byte %00011000 ; 0246 1-48: ** .byte %00000000 ; 0247 1-48: .byte %00011000 ; 0248 1-49: ** .byte %00111110 ; 0249 1-49: ***** .byte %01100000 ; 024A 1-49: ** .byte %00111100 ; 024B 1-49: **** .byte %00000110 ; 024C 1-49: ** .byte %01111100 ; 024D 1-49: ***** .byte %00011000 ; 024E 1-49: ** .byte %00000000 ; 024F 1-49: .byte .byte %00000000 ; 0200 1-40: .byte %00000000 ; 0201 1-40: .byte %00000000 ; 0202 1-40: .byte %00000000 ; 0203 1-40: .byte %00000000 ; 0204 1-40: .byte %00000000 ; 0205 1-40: .byte %00000000 ; 0206 1-40: .byte %00000000 ; 0207 1-40: .byte %00000000 ; 0208 1-41: .byte %00000000 ; 0209 1-41: .byte %00000000 ; 020A 1-41: .byte %00000000 ; 020B 1-41: .byte %00000000 ; 020C 1-41: .byte %00000000 ; 020D 1-41: .byte %00000000 ; 020E 1-41: .byte %00000000 ; 020F 1-41: .byte .byte .byte .byte .byte %00000000 ; 0200 1-40: .byte %00000000 ; 0201 1-40: .byte %00000000 ; 0202 1-40: .byte %00000000 ; 0203 1-40: .byte %00000000 ; 0204 1-40: .byte %00000000 ; 0205 1-40: .byte %00000000 ; 0206 1-40: .byte %00000000 ; 0207 1-40: .byte %00000000 ; 0208 1-41: .byte %00000000 ; 0209 1-41: .byte %00000000 ; 020A 1-41: .byte %00000000 ; 020B 1-41: .byte %00000000 ; 020C 1-41: .byte %00000000 ; 020D 1-41: .byte %00000000 ; 020E 1-41: .byte %00000000 ; 020F 1-41: .byte .byte .byte .byte .byte %00000000 ; 0008 1-01: .byte %00000000 ; 0009 1-01: .byte %00000000 ; 000A 1-01: .byte %00000000 ; 000B 1-01: .byte %00000000 ; 000C 1-01: .byte %00000000 ; 000D 1-01: .byte %00000000 ; 000E 1-01: .byte %00000000 ; 000F 1-01: .byte %00000000 ; 0008 1-01: .byte %00000000 ; 0009 1-01: .byte %00000000 ; 000A 1-01: .byte %00000000 ; 000B 1-01: .byte %00000000 ; 000C 1-01: .byte %00000000 ; 000D 1-01: .byte %00000000 ; 000E 1-01: .byte %00000000 ; 000F 1-01: .byte .byte .byte .byte %00000000 ; 02E0 1-5c: .byte %00000000 ; 02E1 1-5c: .byte %00000000 ; 02E2 1-5c: .byte %00000000 ; 02E3 1-5c: .byte %00000000 ; 02E4 1-5c: .byte %00011000 ; 02E5 1-5c: ** .byte %00011000 ; 02E6 1-5c: ** .byte %00000000 ; 02E7 1-5c: .byte %00000000 ; 02E8 1-5d: .byte %00000000 ; 02E9 1-5d: .byte %00000000 ; 02EA 1-5d: .byte %00000000 ; 02EB 1-5d: .byte %00000000 ; 02EC 1-5d: .byte %00011000 ; 02ED 1-5d: ** .byte %00011000 ; 02EE 1-5d: ** .byte %00000000 ; 02EF 1-5d: .byte %00000000 ; 02F0 1-5e: .byte %00000011 ; 02F1 1-5e: ** .byte %00000110 ; 02F2 1-5e: ** .byte %00001100 ; 02F3 1-5e: ** .byte %00011000 ; 02F4 1-5e: ** .byte %00110000 ; 02F5 1-5e: ** .byte %01100000 ; 02F6 1-5e: ** .byte %00000000 ; 02F7 1-5e: .byte %00000000 ; 02F8 1-5f: .byte %00000011 ; 02F9 1-5f: ** .byte %00000110 ; 02FA 1-5f: ** .byte %00001100 ; 02FB 1-5f: ** .byte %00011000 ; 02FC 1-5f: ** .byte %00110000 ; 02FD 1-5f: ** .byte %01100000 ; 02FE 1-5f: ** .byte %00000000 ; 02FF 1-5f: .byte %00111100 ; 0300 1-60: **** .byte %01100110 ; 0301 1-60: ** ** .byte %01101110 ; 0302 1-60: ** *** .byte %01110110 ; 0303 1-60: *** ** .byte %01100110 ; 0304 1-60: ** ** .byte %01100110 ; 0305 1-60: ** ** .byte %00111100 ; 0306 1-60: **** .byte %00000000 ; 0307 1-60: .byte %00111100 ; 0308 1-61: **** .byte %01100110 ; 0309 1-61: ** ** .byte %01101110 ; 030A 1-61: ** *** .byte %01110110 ; 030B 1-61: *** ** .byte %01100110 ; 030C 1-61: ** ** .byte %01100110 ; 030D 1-61: ** ** .byte %00111100 ; 030E 1-61: **** .byte %00000000 ; 030F 1-61: .byte %00011000 ; 0310 1-62: ** .byte %00011000 ; 0311 1-62: ** .byte %00111000 ; 0312 1-62: *** .byte %00011000 ; 0313 1-62: ** .byte %00011000 ; 0314 1-62: ** .byte %00011000 ; 0315 1-62: ** .byte %01111110 ; 0316 1-62: ****** .byte %00000000 ; 0317 1-62: .byte %00011000 ; 0318 1-63: ** .byte %00011000 ; 0319 1-63: ** .byte %00111000 ; 031A 1-63: *** .byte %00011000 ; 031B 1-63: ** .byte %00011000 ; 031C 1-63: ** .byte %00011000 ; 031D 1-63: ** .byte %01111110 ; 031E 1-63: ****** .byte %00000000 ; 031F 1-63: .byte %00111100 ; 0320 1-64: **** .byte %01100110 ; 0321 1-64: ** ** .byte %00000110 ; 0322 1-64: ** .byte %00001100 ; 0323 1-64: ** .byte %00110000 ; 0324 1-64: ** .byte %01100000 ; 0325 1-64: ** .byte %01111110 ; 0326 1-64: ****** .byte %00000000 ; 0327 1-64: .byte %00111100 ; 0328 1-65: **** .byte %01100110 ; 0329 1-65: ** ** .byte %00000110 ; 032A 1-65: ** .byte %00001100 ; 032B 1-65: ** .byte %00110000 ; 032C 1-65: ** .byte %01100000 ; 032D 1-65: ** .byte %01111110 ; 032E 1-65: ****** .byte %00000000 ; 032F 1-65: .byte %00111100 ; 0330 1-66: **** .byte %01100110 ; 0331 1-66: ** ** .byte %00000110 ; 0332 1-66: ** .byte %00011100 ; 0333 1-66: *** .byte %00000110 ; 0334 1-66: ** .byte %01100110 ; 0335 1-66: ** ** .byte %00111100 ; 0336 1-66: **** .byte %00000000 ; 0337 1-66: .byte %00111100 ; 0338 1-67: **** .byte %01100110 ; 0339 1-67: ** ** .byte %00000110 ; 033A 1-67: ** .byte %00011100 ; 033B 1-67: *** .byte %00000110 ; 033C 1-67: ** .byte %01100110 ; 033D 1-67: ** ** .byte %00111100 ; 033E 1-67: **** .byte %00000000 ; 033F 1-67: .byte %00000110 ; 0340 1-68: ** .byte %00001110 ; 0341 1-68: *** .byte %00011110 ; 0342 1-68: **** .byte %01100110 ; 0343 1-68: ** ** .byte %01111111 ; 0344 1-68: ******* .byte %00000110 ; 0345 1-68: ** .byte %00000110 ; 0346 1-68: ** .byte %00000000 ; 0347 1-68: .byte %00000110 ; 0348 1-69: ** .byte %00001110 ; 0349 1-69: *** .byte %00011110 ; 034A 1-69: **** .byte %01100110 ; 034B 1-69: ** ** .byte %01111111 ; 034C 1-69: ******* .byte %00000110 ; 034D 1-69: ** .byte %00000110 ; 034E 1-69: ** .byte %00000000 ; 034F 1-69: .byte %01111110 ; 0350 1-6a: ****** .byte %01100000 ; 0351 1-6a: ** .byte %01111100 ; 0352 1-6a: ***** .byte %00000110 ; 0353 1-6a: ** .byte %00000110 ; 0354 1-6a: ** .byte %01100110 ; 0355 1-6a: ** ** .byte %00111100 ; 0356 1-6a: **** .byte %00000000 ; 0357 1-6a: .byte %01111110 ; 0358 1-6b: ****** .byte %01100000 ; 0359 1-6b: ** .byte %01111100 ; 035A 1-6b: ***** .byte %00000110 ; 035B 1-6b: ** .byte %00000110 ; 035C 1-6b: ** .byte %01100110 ; 035D 1-6b: ** ** .byte %00111100 ; 035E 1-6b: **** .byte %00000000 ; 035F 1-6b: .byte %00111100 ; 0360 1-6c: **** .byte %01100110 ; 0361 1-6c: ** ** .byte %01100000 ; 0362 1-6c: ** .byte %01111100 ; 0363 1-6c: ***** .byte %01100110 ; 0364 1-6c: ** ** .byte %01100110 ; 0365 1-6c: ** ** .byte %00111100 ; 0366 1-6c: **** .byte %00000000 ; 0367 1-6c: .byte %00111100 ; 0368 1-6d: **** .byte %01100110 ; 0369 1-6d: ** ** .byte %01100000 ; 036A 1-6d: ** .byte %01111100 ; 036B 1-6d: ***** .byte %01100110 ; 036C 1-6d: ** ** .byte %01100110 ; 036D 1-6d: ** ** .byte %00111100 ; 036E 1-6d: **** .byte %00000000 ; 036F 1-6d: .byte %01111110 ; 0370 1-6e: ****** .byte %01100110 ; 0371 1-6e: ** ** .byte %00001100 ; 0372 1-6e: ** .byte %00011000 ; 0373 1-6e: ** .byte %00011000 ; 0374 1-6e: ** .byte %00011000 ; 0375 1-6e: ** .byte %00011000 ; 0376 1-6e: ** .byte %00000000 ; 0377 1-6e: .byte %01111110 ; 0378 1-6f: ****** .byte %01100110 ; 0379 1-6f: ** ** .byte %00001100 ; 037A 1-6f: ** .byte %00011000 ; 037B 1-6f: ** .byte %00011000 ; 037C 1-6f: ** .byte %00011000 ; 037D 1-6f: ** .byte %00011000 ; 037E 1-6f: ** .byte %00000000 ; 037F 1-6f: .byte %00111100 ; 0380 1-70: **** .byte %01100110 ; 0381 1-70: ** ** .byte %01100110 ; 0382 1-70: ** ** .byte %00111100 ; 0383 1-70: **** .byte %01100110 ; 0384 1-70: ** ** .byte %01100110 ; 0385 1-70: ** ** .byte %00111100 ; 0386 1-70: **** .byte %00000000 ; 0387 1-70: .byte %00111100 ; 0388 1-71: **** .byte %01100110 ; 0389 1-71: ** ** .byte %01100110 ; 038A 1-71: ** ** .byte %00111100 ; 038B 1-71: **** .byte %01100110 ; 038C 1-71: ** ** .byte %01100110 ; 038D 1-71: ** ** .byte %00111100 ; 038E 1-71: **** .byte %00000000 ; 038F 1-71: .byte %00111100 ; 0390 1-72: **** .byte %01100110 ; 0391 1-72: ** ** .byte %01100110 ; 0392 1-72: ** ** .byte %00111110 ; 0393 1-72: ***** .byte %00000110 ; 0394 1-72: ** .byte %01100110 ; 0395 1-72: ** ** .byte %00111100 ; 0396 1-72: **** .byte %00000000 ; 0397 1-72: .byte %00111100 ; 0398 1-73: **** .byte %01100110 ; 0399 1-73: ** ** .byte %01100110 ; 039A 1-73: ** ** .byte %00111110 ; 039B 1-73: ***** .byte %00000110 ; 039C 1-73: ** .byte %01100110 ; 039D 1-73: ** ** .byte %00111100 ; 039E 1-73: **** .byte %00000000 ; 039F 1-73: .byte .byte %00000000 ; 0200 1-40: .byte %00000000 ; 0201 1-40: .byte %00000000 ; 0202 1-40: .byte %00000000 ; 0203 1-40: .byte %00000000 ; 0204 1-40: .byte %00000000 ; 0205 1-40: .byte %00000000 ; 0206 1-40: .byte %00000000 ; 0207 1-40: .byte %00000000 ; 0208 1-41: .byte %00000000 ; 0209 1-41: .byte %00000000 ; 020A 1-41: .byte %00000000 ; 020B 1-41: .byte %00000000 ; 020C 1-41: .byte %00000000 ; 020D 1-41: .byte %00000000 ; 020E 1-41: .byte %00000000 ; 020F 1-41: .byte .byte .byte .byte .byte %00000000 ; 0200 1-40: .byte %00000000 ; 0201 1-40: .byte %00000000 ; 0202 1-40: .byte %00000000 ; 0203 1-40: .byte %00000000 ; 0204 1-40: .byte %00000000 ; 0205 1-40: .byte %00000000 ; 0206 1-40: .byte %00000000 ; 0207 1-40: .byte %00000000 ; 0208 1-41: .byte %00000000 ; 0209 1-41: .byte %00000000 ; 020A 1-41: .byte %00000000 ; 020B 1-41: .byte %00000000 ; 020C 1-41: .byte %00000000 ; 020D 1-41: .byte %00000000 ; 020E 1-41: .byte %00000000 ; 020F 1-41: .byte .byte .byte .byte %00111100 ; 0400 1-80: **** .byte %01100110 ; 0401 1-80: ** ** .byte %01101110 ; 0402 1-80: ** *** .byte %01101110 ; 0403 1-80: ** *** .byte %01100000 ; 0404 1-80: ** .byte %01100010 ; 0405 1-80: ** * .byte %00111100 ; 0406 1-80: **** .byte %00000000 ; 0407 1-80: .byte %00111100 ; 0408 1-81: **** .byte %01100110 ; 0409 1-81: ** ** .byte %01101110 ; 040A 1-81: ** *** .byte %01101110 ; 040B 1-81: ** *** .byte %01100000 ; 040C 1-81: ** .byte %01100010 ; 040D 1-81: ** * .byte %00111100 ; 040E 1-81: **** .byte %00000000 ; 040F 1-81: .byte %00011000 ; 0410 1-82: ** .byte %00111100 ; 0411 1-82: **** .byte %01100110 ; 0412 1-82: ** ** .byte %01111110 ; 0413 1-82: ****** .byte %01100110 ; 0414 1-82: ** ** .byte %01100110 ; 0415 1-82: ** ** .byte %01100110 ; 0416 1-82: ** ** .byte %00000000 ; 0417 1-82: .byte %00011000 ; 0418 1-83: ** .byte %00111100 ; 0419 1-83: **** .byte %01100110 ; 041A 1-83: ** ** .byte %01111110 ; 041B 1-83: ****** .byte %01100110 ; 041C 1-83: ** ** .byte %01100110 ; 041D 1-83: ** ** .byte %01100110 ; 041E 1-83: ** ** .byte %00000000 ; 041F 1-83: .byte %01111100 ; 0420 1-84: ***** .byte %01100110 ; 0421 1-84: ** ** .byte %01100110 ; 0422 1-84: ** ** .byte %01111100 ; 0423 1-84: ***** .byte %01100110 ; 0424 1-84: ** ** .byte %01100110 ; 0425 1-84: ** ** .byte %01111100 ; 0426 1-84: ***** .byte %00000000 ; 0427 1-84: .byte %01111100 ; 0428 1-85: ***** .byte %01100110 ; 0429 1-85: ** ** .byte %01100110 ; 042A 1-85: ** ** .byte %01111100 ; 042B 1-85: ***** .byte %01100110 ; 042C 1-85: ** ** .byte %01100110 ; 042D 1-85: ** ** .byte %01111100 ; 042E 1-85: ***** .byte %00000000 ; 042F 1-85: .byte %00111100 ; 0430 1-86: **** .byte %01100110 ; 0431 1-86: ** ** .byte %01100000 ; 0432 1-86: ** .byte %01100000 ; 0433 1-86: ** .byte %01100000 ; 0434 1-86: ** .byte %01100110 ; 0435 1-86: ** ** .byte %00111100 ; 0436 1-86: **** .byte %00000000 ; 0437 1-86: .byte %00111100 ; 0438 1-87: **** .byte %01100110 ; 0439 1-87: ** ** .byte %01100000 ; 043A 1-87: ** .byte %01100000 ; 043B 1-87: ** .byte %01100000 ; 043C 1-87: ** .byte %01100110 ; 043D 1-87: ** ** .byte %00111100 ; 043E 1-87: **** .byte %00000000 ; 043F 1-87: .byte %01111000 ; 0440 1-88: **** .byte %01101100 ; 0441 1-88: ** ** .byte %01100110 ; 0442 1-88: ** ** .byte %01100110 ; 0443 1-88: ** ** .byte %01100110 ; 0444 1-88: ** ** .byte %01101100 ; 0445 1-88: ** ** .byte %01111000 ; 0446 1-88: **** .byte %00000000 ; 0447 1-88: .byte %01111000 ; 0448 1-89: **** .byte %01101100 ; 0449 1-89: ** ** .byte %01100110 ; 044A 1-89: ** ** .byte %01100110 ; 044B 1-89: ** ** .byte %01100110 ; 044C 1-89: ** ** .byte %01101100 ; 044D 1-89: ** ** .byte %01111000 ; 044E 1-89: **** .byte %00000000 ; 044F 1-89: .byte %01111110 ; 0450 1-8a: ****** .byte %01100000 ; 0451 1-8a: ** .byte %01100000 ; 0452 1-8a: ** .byte %01111000 ; 0453 1-8a: **** .byte %01100000 ; 0454 1-8a: ** .byte %01100000 ; 0455 1-8a: ** .byte %01111110 ; 0456 1-8a: ****** .byte %00000000 ; 0457 1-8a: .byte %01111110 ; 0458 1-8b: ****** .byte %01100000 ; 0459 1-8b: ** .byte %01100000 ; 045A 1-8b: ** .byte %01111000 ; 045B 1-8b: **** .byte %01100000 ; 045C 1-8b: ** .byte %01100000 ; 045D 1-8b: ** .byte %01111110 ; 045E 1-8b: ****** .byte %00000000 ; 045F 1-8b: .byte %01111110 ; 0460 1-8c: ****** .byte %01100000 ; 0461 1-8c: ** .byte %01100000 ; 0462 1-8c: ** .byte %01111000 ; 0463 1-8c: **** .byte %01100000 ; 0464 1-8c: ** .byte %01100000 ; 0465 1-8c: ** .byte %01100000 ; 0466 1-8c: ** .byte %00000000 ; 0467 1-8c: .byte %01111110 ; 0468 1-8d: ****** .byte %01100000 ; 0469 1-8d: ** .byte %01100000 ; 046A 1-8d: ** .byte %01111000 ; 046B 1-8d: **** .byte %01100000 ; 046C 1-8d: ** .byte %01100000 ; 046D 1-8d: ** .byte %01100000 ; 046E 1-8d: ** .byte %00000000 ; 046F 1-8d: .byte %00111100 ; 0470 1-8e: **** .byte %01100110 ; 0471 1-8e: ** ** .byte %01100000 ; 0472 1-8e: ** .byte %01101110 ; 0473 1-8e: ** *** .byte %01100110 ; 0474 1-8e: ** ** .byte %01100110 ; 0475 1-8e: ** ** .byte %00111100 ; 0476 1-8e: **** .byte %00000000 ; 0477 1-8e: .byte %00111100 ; 0478 1-8f: **** .byte %01100110 ; 0479 1-8f: ** ** .byte %01100000 ; 047A 1-8f: ** .byte %01101110 ; 047B 1-8f: ** *** .byte %01100110 ; 047C 1-8f: ** ** .byte %01100110 ; 047D 1-8f: ** ** .byte %00111100 ; 047E 1-8f: **** .byte %00000000 ; 047F 1-8f: .byte %01100110 ; 0480 1-90: ** ** .byte %01100110 ; 0481 1-90: ** ** .byte %01100110 ; 0482 1-90: ** ** .byte %01111110 ; 0483 1-90: ****** .byte %01100110 ; 0484 1-90: ** ** .byte %01100110 ; 0485 1-90: ** ** .byte %01100110 ; 0486 1-90: ** ** .byte %00000000 ; 0487 1-90: .byte %01100110 ; 0488 1-91: ** ** .byte %01100110 ; 0489 1-91: ** ** .byte %01100110 ; 048A 1-91: ** ** .byte %01111110 ; 048B 1-91: ****** .byte %01100110 ; 048C 1-91: ** ** .byte %01100110 ; 048D 1-91: ** ** .byte %01100110 ; 048E 1-91: ** ** .byte %00000000 ; 048F 1-91: .byte %00111100 ; 0490 1-92: **** .byte %00011000 ; 0491 1-92: ** .byte %00011000 ; 0492 1-92: ** .byte %00011000 ; 0493 1-92: ** .byte %00011000 ; 0494 1-92: ** .byte %00011000 ; 0495 1-92: ** .byte %00111100 ; 0496 1-92: **** .byte %00000000 ; 0497 1-92: .byte %00111100 ; 0498 1-93: **** .byte %00011000 ; 0499 1-93: ** .byte %00011000 ; 049A 1-93: ** .byte %00011000 ; 049B 1-93: ** .byte %00011000 ; 049C 1-93: ** .byte %00011000 ; 049D 1-93: ** .byte %00111100 ; 049E 1-93: **** .byte %00000000 ; 049F 1-93: .byte %00011110 ; 04A0 1-94: **** .byte %00001100 ; 04A1 1-94: ** .byte %00001100 ; 04A2 1-94: ** .byte %00001100 ; 04A3 1-94: ** .byte %00001100 ; 04A4 1-94: ** .byte %01101100 ; 04A5 1-94: ** ** .byte %00111000 ; 04A6 1-94: *** .byte %00000000 ; 04A7 1-94: .byte %00011110 ; 04A8 1-95: **** .byte %00001100 ; 04A9 1-95: ** .byte %00001100 ; 04AA 1-95: ** .byte %00001100 ; 04AB 1-95: ** .byte %00001100 ; 04AC 1-95: ** .byte %01101100 ; 04AD 1-95: ** ** .byte %00111000 ; 04AE 1-95: *** .byte %00000000 ; 04AF 1-95: .byte %01100110 ; 04B0 1-96: ** ** .byte %01101100 ; 04B1 1-96: ** ** .byte %01111000 ; 04B2 1-96: **** .byte %01110000 ; 04B3 1-96: *** .byte %01111000 ; 04B4 1-96: **** .byte %01101100 ; 04B5 1-96: ** ** .byte %01100110 ; 04B6 1-96: ** ** .byte %00000000 ; 04B7 1-96: .byte %01100110 ; 04B8 1-97: ** ** .byte %01101100 ; 04B9 1-97: ** ** .byte %01111000 ; 04BA 1-97: **** .byte %01110000 ; 04BB 1-97: *** .byte %01111000 ; 04BC 1-97: **** .byte %01101100 ; 04BD 1-97: ** ** .byte %01100110 ; 04BE 1-97: ** ** .byte %00000000 ; 04BF 1-97: .byte %01100000 ; 04C0 1-98: ** .byte %01100000 ; 04C1 1-98: ** .byte %01100000 ; 04C2 1-98: ** .byte %01100000 ; 04C3 1-98: ** .byte %01100000 ; 04C4 1-98: ** .byte %01100000 ; 04C5 1-98: ** .byte %01111110 ; 04C6 1-98: ****** .byte %00000000 ; 04C7 1-98: .byte %01100000 ; 04C8 1-99: ** .byte %01100000 ; 04C9 1-99: ** .byte %01100000 ; 04CA 1-99: ** .byte %01100000 ; 04CB 1-99: ** .byte %01100000 ; 04CC 1-99: ** .byte %01100000 ; 04CD 1-99: ** .byte %01111110 ; 04CE 1-99: ****** .byte %00000000 ; 04CF 1-99: .byte %01100011 ; 04D0 1-9a: ** ** .byte %01110111 ; 04D1 1-9a: *** *** .byte %01111111 ; 04D2 1-9a: ******* .byte %01101011 ; 04D3 1-9a: ** * ** .byte %01100011 ; 04D4 1-9a: ** ** .byte %01100011 ; 04D5 1-9a: ** ** .byte %01100011 ; 04D6 1-9a: ** ** .byte %00000000 ; 04D7 1-9a: .byte %01100011 ; 04D8 1-9b: ** ** .byte %01110111 ; 04D9 1-9b: *** *** .byte %01111111 ; 04DA 1-9b: ******* .byte %01101011 ; 04DB 1-9b: ** * ** .byte %01100011 ; 04DC 1-9b: ** ** .byte %01100011 ; 04DD 1-9b: ** ** .byte %01100011 ; 04DE 1-9b: ** ** .byte %00000000 ; 04DF 1-9b: .byte %01100110 ; 04E0 1-9c: ** ** .byte %01110110 ; 04E1 1-9c: *** ** .byte %01111110 ; 04E2 1-9c: ****** .byte %01111110 ; 04E3 1-9c: ****** .byte %01101110 ; 04E4 1-9c: ** *** .byte %01100110 ; 04E5 1-9c: ** ** .byte %01100110 ; 04E6 1-9c: ** ** .byte %00000000 ; 04E7 1-9c: .byte %01100110 ; 04E8 1-9d: ** ** .byte %01110110 ; 04E9 1-9d: *** ** .byte %01111110 ; 04EA 1-9d: ****** .byte %01111110 ; 04EB 1-9d: ****** .byte %01101110 ; 04EC 1-9d: ** *** .byte %01100110 ; 04ED 1-9d: ** ** .byte %01100110 ; 04EE 1-9d: ** ** .byte %00000000 ; 04EF 1-9d: .byte %00111100 ; 04F0 1-9e: **** .byte %01100110 ; 04F1 1-9e: ** ** .byte %01100110 ; 04F2 1-9e: ** ** .byte %01100110 ; 04F3 1-9e: ** ** .byte %01100110 ; 04F4 1-9e: ** ** .byte %01100110 ; 04F5 1-9e: ** ** .byte %00111100 ; 04F6 1-9e: **** .byte %00000000 ; 04F7 1-9e: .byte %00111100 ; 04F8 1-9f: **** .byte %01100110 ; 04F9 1-9f: ** ** .byte %01100110 ; 04FA 1-9f: ** ** .byte %01100110 ; 04FB 1-9f: ** ** .byte %01100110 ; 04FC 1-9f: ** ** .byte %01100110 ; 04FD 1-9f: ** ** .byte %00111100 ; 04FE 1-9f: **** .byte %00000000 ; 04FF 1-9f: .byte %01111100 ; 0500 1-a0: ***** .byte %01100110 ; 0501 1-a0: ** ** .byte %01100110 ; 0502 1-a0: ** ** .byte %01111100 ; 0503 1-a0: ***** .byte %01100000 ; 0504 1-a0: ** .byte %01100000 ; 0505 1-a0: ** .byte %01100000 ; 0506 1-a0: ** .byte %00000000 ; 0507 1-a0: .byte %01111100 ; 0508 1-a1: ***** .byte %01100110 ; 0509 1-a1: ** ** .byte %01100110 ; 050A 1-a1: ** ** .byte %01111100 ; 050B 1-a1: ***** .byte %01100000 ; 050C 1-a1: ** .byte %01100000 ; 050D 1-a1: ** .byte %01100000 ; 050E 1-a1: ** .byte %00000000 ; 050F 1-a1: .byte %00111100 ; 0510 1-a2: **** .byte %01100110 ; 0511 1-a2: ** ** .byte %01100110 ; 0512 1-a2: ** ** .byte %01100110 ; 0513 1-a2: ** ** .byte %01100110 ; 0514 1-a2: ** ** .byte %00111100 ; 0515 1-a2: **** .byte %00001110 ; 0516 1-a2: *** .byte %00000000 ; 0517 1-a2: .byte %00111100 ; 0518 1-a3: **** .byte %01100110 ; 0519 1-a3: ** ** .byte %01100110 ; 051A 1-a3: ** ** .byte %01100110 ; 051B 1-a3: ** ** .byte %01100110 ; 051C 1-a3: ** ** .byte %00111100 ; 051D 1-a3: **** .byte %00001110 ; 051E 1-a3: *** .byte %00000000 ; 051F 1-a3: .byte %01111100 ; 0520 1-a4: ***** .byte %01100110 ; 0521 1-a4: ** ** .byte %01100110 ; 0522 1-a4: ** ** .byte %01111100 ; 0523 1-a4: ***** .byte %01111000 ; 0524 1-a4: **** .byte %01101100 ; 0525 1-a4: ** ** .byte %01100110 ; 0526 1-a4: ** ** .byte %00000000 ; 0527 1-a4: .byte %01111100 ; 0528 1-a5: ***** .byte %01100110 ; 0529 1-a5: ** ** .byte %01100110 ; 052A 1-a5: ** ** .byte %01111100 ; 052B 1-a5: ***** .byte %01111000 ; 052C 1-a5: **** .byte %01101100 ; 052D 1-a5: ** ** .byte %01100110 ; 052E 1-a5: ** ** .byte %00000000 ; 052F 1-a5: .byte %00111100 ; 0530 1-a6: **** .byte %01100110 ; 0531 1-a6: ** ** .byte %01100000 ; 0532 1-a6: ** .byte %00111100 ; 0533 1-a6: **** .byte %00000110 ; 0534 1-a6: ** .byte %01100110 ; 0535 1-a6: ** ** .byte %00111100 ; 0536 1-a6: **** .byte %00000000 ; 0537 1-a6: .byte %00111100 ; 0538 1-a7: **** .byte %01100110 ; 0539 1-a7: ** ** .byte %01100000 ; 053A 1-a7: ** .byte %00111100 ; 053B 1-a7: **** .byte %00000110 ; 053C 1-a7: ** .byte %01100110 ; 053D 1-a7: ** ** .byte %00111100 ; 053E 1-a7: **** .byte %00000000 ; 053F 1-a7: .byte %01111110 ; 0540 1-a8: ****** .byte %00011000 ; 0541 1-a8: ** .byte %00011000 ; 0542 1-a8: ** .byte %00011000 ; 0543 1-a8: ** .byte %00011000 ; 0544 1-a8: ** .byte %00011000 ; 0545 1-a8: ** .byte %00011000 ; 0546 1-a8: ** .byte %00000000 ; 0547 1-a8: .byte %01111110 ; 0548 1-a9: ****** .byte %00011000 ; 0549 1-a9: ** .byte %00011000 ; 054A 1-a9: ** .byte %00011000 ; 054B 1-a9: ** .byte %00011000 ; 054C 1-a9: ** .byte %00011000 ; 054D 1-a9: ** .byte %00011000 ; 054E 1-a9: ** .byte %00000000 ; 054F 1-a9: .byte %01100110 ; 0550 1-aa: ** ** .byte %01100110 ; 0551 1-aa: ** ** .byte %01100110 ; 0552 1-aa: ** ** .byte %01100110 ; 0553 1-aa: ** ** .byte %01100110 ; 0554 1-aa: ** ** .byte %01100110 ; 0555 1-aa: ** ** .byte %00111100 ; 0556 1-aa: **** .byte %00000000 ; 0557 1-aa: .byte %01100110 ; 0558 1-ab: ** ** .byte %01100110 ; 0559 1-ab: ** ** .byte %01100110 ; 055A 1-ab: ** ** .byte %01100110 ; 055B 1-ab: ** ** .byte %01100110 ; 055C 1-ab: ** ** .byte %01100110 ; 055D 1-ab: ** ** .byte %00111100 ; 055E 1-ab: **** .byte %00000000 ; 055F 1-ab: .byte %01100110 ; 0560 1-ac: ** ** .byte %01100110 ; 0561 1-ac: ** ** .byte %01100110 ; 0562 1-ac: ** ** .byte %01100110 ; 0563 1-ac: ** ** .byte %01100110 ; 0564 1-ac: ** ** .byte %00111100 ; 0565 1-ac: **** .byte %00011000 ; 0566 1-ac: ** .byte %00000000 ; 0567 1-ac: .byte %01100110 ; 0568 1-ad: ** ** .byte %01100110 ; 0569 1-ad: ** ** .byte %01100110 ; 056A 1-ad: ** ** .byte %01100110 ; 056B 1-ad: ** ** .byte %01100110 ; 056C 1-ad: ** ** .byte %00111100 ; 056D 1-ad: **** .byte %00011000 ; 056E 1-ad: ** .byte %00000000 ; 056F 1-ad: .byte %01100011 ; 0570 1-ae: ** ** .byte %01100011 ; 0571 1-ae: ** ** .byte %01100011 ; 0572 1-ae: ** ** .byte %01101011 ; 0573 1-ae: ** * ** .byte %01111111 ; 0574 1-ae: ******* .byte %01110111 ; 0575 1-ae: *** *** .byte %01100011 ; 0576 1-ae: ** ** .byte %00000000 ; 0577 1-ae: .byte %01100011 ; 0578 1-af: ** ** .byte %01100011 ; 0579 1-af: ** ** .byte %01100011 ; 057A 1-af: ** ** .byte %01101011 ; 057B 1-af: ** * ** .byte %01111111 ; 057C 1-af: ******* .byte %01110111 ; 057D 1-af: *** *** .byte %01100011 ; 057E 1-af: ** ** .byte %00000000 ; 057F 1-af: .byte %01100110 ; 0580 1-b0: ** ** .byte %01100110 ; 0581 1-b0: ** ** .byte %00111100 ; 0582 1-b0: **** .byte %00011000 ; 0583 1-b0: ** .byte %00111100 ; 0584 1-b0: **** .byte %01100110 ; 0585 1-b0: ** ** .byte %01100110 ; 0586 1-b0: ** ** .byte %00000000 ; 0587 1-b0: .byte %01100110 ; 0588 1-b1: ** ** .byte %01100110 ; 0589 1-b1: ** ** .byte %00111100 ; 058A 1-b1: **** .byte %00011000 ; 058B 1-b1: ** .byte %00111100 ; 058C 1-b1: **** .byte %01100110 ; 058D 1-b1: ** ** .byte %01100110 ; 058E 1-b1: ** ** .byte %00000000 ; 058F 1-b1: .byte %01100110 ; 0590 1-b2: ** ** .byte %01100110 ; 0591 1-b2: ** ** .byte %01100110 ; 0592 1-b2: ** ** .byte %00111100 ; 0593 1-b2: **** .byte %00011000 ; 0594 1-b2: ** .byte %00011000 ; 0595 1-b2: ** .byte %00011000 ; 0596 1-b2: ** .byte %00000000 ; 0597 1-b2: .byte %01100110 ; 0598 1-b3: ** ** .byte %01100110 ; 0599 1-b3: ** ** .byte %01100110 ; 059A 1-b3: ** ** .byte %00111100 ; 059B 1-b3: **** .byte %00011000 ; 059C 1-b3: ** .byte %00011000 ; 059D 1-b3: ** .byte %00011000 ; 059E 1-b3: ** .byte %00000000 ; 059F 1-b3: .byte %01111110 ; 05A0 1-b4: ****** .byte %00000110 ; 05A1 1-b4: ** .byte %00001100 ; 05A2 1-b4: ** .byte %00011000 ; 05A3 1-b4: ** .byte %00110000 ; 05A4 1-b4: ** .byte %01100000 ; 05A5 1-b4: ** .byte %01111110 ; 05A6 1-b4: ****** .byte %00000000 ; 05A7 1-b4: .byte %01111110 ; 05A8 1-b5: ****** .byte %00000110 ; 05A9 1-b5: ** .byte %00001100 ; 05AA 1-b5: ** .byte %00011000 ; 05AB 1-b5: ** .byte %00110000 ; 05AC 1-b5: ** .byte %01100000 ; 05AD 1-b5: ** .byte %01111110 ; 05AE 1-b5: ****** .byte %00000000 ; 05AF 1-b5: .byte .byte %00000000 ; 0200 1-40: .byte %00000000 ; 0201 1-40: .byte %00000000 ; 0202 1-40: .byte %00000000 ; 0203 1-40: .byte %00000000 ; 0204 1-40: .byte %00000000 ; 0205 1-40: .byte %00000000 ; 0206 1-40: .byte %00000000 ; 0207 1-40: .byte %00000000 ; 0208 1-41: .byte %00000000 ; 0209 1-41: .byte %00000000 ; 020A 1-41: .byte %00000000 ; 020B 1-41: .byte %00000000 ; 020C 1-41: .byte %00000000 ; 020D 1-41: .byte %00000000 ; 020E 1-41: .byte %00000000 ; 020F 1-41: .byte .byte .byte .byte .byte %00000000 ; 0200 1-40: .byte %00000000 ; 0201 1-40: .byte %00000000 ; 0202 1-40: .byte %00000000 ; 0203 1-40: .byte %00000000 ; 0204 1-40: .byte %00000000 ; 0205 1-40: .byte %00000000 ; 0206 1-40: .byte %00000000 ; 0207 1-40: .byte %00000000 ; 0208 1-41: .byte %00000000 ; 0209 1-41: .byte %00000000 ; 020A 1-41: .byte %00000000 ; 020B 1-41: .byte %00000000 ; 020C 1-41: .byte %00000000 ; 020D 1-41: .byte %00000000 ; 020E 1-41: .byte %00000000 ; 020F 1-41: .byte .byte .byte .byte %00000000 ; 0610 1-c2: .byte %00000000 ; 0611 1-c2: .byte %00111100 ; 0612 1-c2: **** .byte %00000110 ; 0613 1-c2: ** .byte %00111110 ; 0614 1-c2: ***** .byte %01100110 ; 0615 1-c2: ** ** .byte %00111110 ; 0616 1-c2: ***** .byte %00000000 ; 0617 1-c2: .byte %00000000 ; 0618 1-c3: .byte %00000000 ; 0619 1-c3: .byte %00111100 ; 061A 1-c3: **** .byte %00000110 ; 061B 1-c3: ** .byte %00111110 ; 061C 1-c3: ***** .byte %01100110 ; 061D 1-c3: ** ** .byte %00111110 ; 061E 1-c3: ***** .byte %00000000 ; 061F 1-c3: .byte %00000000 ; 0620 1-c4: .byte %01100000 ; 0621 1-c4: ** .byte %01100000 ; 0622 1-c4: ** .byte %01111100 ; 0623 1-c4: ***** .byte %01100110 ; 0624 1-c4: ** ** .byte %01100110 ; 0625 1-c4: ** ** .byte %01111100 ; 0626 1-c4: ***** .byte %00000000 ; 0627 1-c4: .byte %00000000 ; 0628 1-c5: .byte %01100000 ; 0629 1-c5: ** .byte %01100000 ; 062A 1-c5: ** .byte %01111100 ; 062B 1-c5: ***** .byte %01100110 ; 062C 1-c5: ** ** .byte %01100110 ; 062D 1-c5: ** ** .byte %01111100 ; 062E 1-c5: ***** .byte %00000000 ; 062F 1-c5: .byte %00000000 ; 0630 1-c6: .byte %00000000 ; 0631 1-c6: .byte %00111100 ; 0632 1-c6: **** .byte %01100000 ; 0633 1-c6: ** .byte %01100000 ; 0634 1-c6: ** .byte %01100000 ; 0635 1-c6: ** .byte %00111100 ; 0636 1-c6: **** .byte %00000000 ; 0637 1-c6: .byte %00000000 ; 0638 1-c7: .byte %00000000 ; 0639 1-c7: .byte %00111100 ; 063A 1-c7: **** .byte %01100000 ; 063B 1-c7: ** .byte %01100000 ; 063C 1-c7: ** .byte %01100000 ; 063D 1-c7: ** .byte %00111100 ; 063E 1-c7: **** .byte %00000000 ; 063F 1-c7: .byte %00000000 ; 0640 1-c8: .byte %00000110 ; 0641 1-c8: ** .byte %00000110 ; 0642 1-c8: ** .byte %00111110 ; 0643 1-c8: ***** .byte %01100110 ; 0644 1-c8: ** ** .byte %01100110 ; 0645 1-c8: ** ** .byte %00111110 ; 0646 1-c8: ***** .byte %00000000 ; 0647 1-c8: .byte %00000000 ; 0648 1-c9: .byte %00000110 ; 0649 1-c9: ** .byte %00000110 ; 064A 1-c9: ** .byte %00111110 ; 064B 1-c9: ***** .byte %01100110 ; 064C 1-c9: ** ** .byte %01100110 ; 064D 1-c9: ** ** .byte %00111110 ; 064E 1-c9: ***** .byte %00000000 ; 064F 1-c9: .byte %00000000 ; 0650 1-ca: .byte %00000000 ; 0651 1-ca: .byte %00111100 ; 0652 1-ca: **** .byte %01100110 ; 0653 1-ca: ** ** .byte %01111110 ; 0654 1-ca: ****** .byte %01100000 ; 0655 1-ca: ** .byte %00111100 ; 0656 1-ca: **** .byte %00000000 ; 0657 1-ca: .byte %00000000 ; 0658 1-cb: .byte %00000000 ; 0659 1-cb: .byte %00111100 ; 065A 1-cb: **** .byte %01100110 ; 065B 1-cb: ** ** .byte %01111110 ; 065C 1-cb: ****** .byte %01100000 ; 065D 1-cb: ** .byte %00111100 ; 065E 1-cb: **** .byte %00000000 ; 065F 1-cb: .byte %00000000 ; 0660 1-cc: .byte %00001110 ; 0661 1-cc: *** .byte %00011000 ; 0662 1-cc: ** .byte %00111110 ; 0663 1-cc: ***** .byte %00011000 ; 0664 1-cc: ** .byte %00011000 ; 0665 1-cc: ** .byte %00011000 ; 0666 1-cc: ** .byte %00000000 ; 0667 1-cc: .byte %00000000 ; 0668 1-cd: .byte %00001110 ; 0669 1-cd: *** .byte %00011000 ; 066A 1-cd: ** .byte %00111110 ; 066B 1-cd: ***** .byte %00011000 ; 066C 1-cd: ** .byte %00011000 ; 066D 1-cd: ** .byte %00011000 ; 066E 1-cd: ** .byte %00000000 ; 066F 1-cd: .byte %00000000 ; 0670 1-ce: .byte %00000000 ; 0671 1-ce: .byte %00111110 ; 0672 1-ce: ***** .byte %01100110 ; 0673 1-ce: ** ** .byte %01100110 ; 0674 1-ce: ** ** .byte %00111110 ; 0675 1-ce: ***** .byte %00000110 ; 0676 1-ce: ** .byte %01111100 ; 0677 1-ce: ***** .byte %00000000 ; 0678 1-cf: .byte %00000000 ; 0679 1-cf: .byte %00111110 ; 067A 1-cf: ***** .byte %01100110 ; 067B 1-cf: ** ** .byte %01100110 ; 067C 1-cf: ** ** .byte %00111110 ; 067D 1-cf: ***** .byte %00000110 ; 067E 1-cf: ** .byte %01111100 ; 067F 1-cf: ***** .byte %00000000 ; 0680 1-d0: .byte %01100000 ; 0681 1-d0: ** .byte %01100000 ; 0682 1-d0: ** .byte %01111100 ; 0683 1-d0: ***** .byte %01100110 ; 0684 1-d0: ** ** .byte %01100110 ; 0685 1-d0: ** ** .byte %01100110 ; 0686 1-d0: ** ** .byte %00000000 ; 0687 1-d0: .byte %00000000 ; 0688 1-d1: .byte %01100000 ; 0689 1-d1: ** .byte %01100000 ; 068A 1-d1: ** .byte %01111100 ; 068B 1-d1: ***** .byte %01100110 ; 068C 1-d1: ** ** .byte %01100110 ; 068D 1-d1: ** ** .byte %01100110 ; 068E 1-d1: ** ** .byte %00000000 ; 068F 1-d1: .byte %00000000 ; 0690 1-d2: .byte %00011000 ; 0691 1-d2: ** .byte %00000000 ; 0692 1-d2: .byte %00111000 ; 0693 1-d2: *** .byte %00011000 ; 0694 1-d2: ** .byte %00011000 ; 0695 1-d2: ** .byte %00111100 ; 0696 1-d2: **** .byte %00000000 ; 0697 1-d2: .byte %00000000 ; 0698 1-d3: .byte %00011000 ; 0699 1-d3: ** .byte %00000000 ; 069A 1-d3: .byte %00111000 ; 069B 1-d3: *** .byte %00011000 ; 069C 1-d3: ** .byte %00011000 ; 069D 1-d3: ** .byte %00111100 ; 069E 1-d3: **** .byte %00000000 ; 069F 1-d3: .byte %00000000 ; 06A0 1-d4: .byte %00000110 ; 06A1 1-d4: ** .byte %00000000 ; 06A2 1-d4: .byte %00000110 ; 06A3 1-d4: ** .byte %00000110 ; 06A4 1-d4: ** .byte %00000110 ; 06A5 1-d4: ** .byte %00000110 ; 06A6 1-d4: ** .byte %00111100 ; 06A7 1-d4: **** .byte %00000000 ; 06A8 1-d5: .byte %00000110 ; 06A9 1-d5: ** .byte %00000000 ; 06AA 1-d5: .byte %00000110 ; 06AB 1-d5: ** .byte %00000110 ; 06AC 1-d5: ** .byte %00000110 ; 06AD 1-d5: ** .byte %00000110 ; 06AE 1-d5: ** .byte %00111100 ; 06AF 1-d5: **** .byte %00000000 ; 06B0 1-d6: .byte %01100000 ; 06B1 1-d6: ** .byte %01100000 ; 06B2 1-d6: ** .byte %01101100 ; 06B3 1-d6: ** ** .byte %01111000 ; 06B4 1-d6: **** .byte %01101100 ; 06B5 1-d6: ** ** .byte %01100110 ; 06B6 1-d6: ** ** .byte %00000000 ; 06B7 1-d6: .byte %00000000 ; 06B8 1-d7: .byte %01100000 ; 06B9 1-d7: ** .byte %01100000 ; 06BA 1-d7: ** .byte %01101100 ; 06BB 1-d7: ** ** .byte %01111000 ; 06BC 1-d7: **** .byte %01101100 ; 06BD 1-d7: ** ** .byte %01100110 ; 06BE 1-d7: ** ** .byte %00000000 ; 06BF 1-d7: .byte %00000000 ; 06C0 1-d8: .byte %00111000 ; 06C1 1-d8: *** .byte %00011000 ; 06C2 1-d8: ** .byte %00011000 ; 06C3 1-d8: ** .byte %00011000 ; 06C4 1-d8: ** .byte %00011000 ; 06C5 1-d8: ** .byte %00111100 ; 06C6 1-d8: **** .byte %00000000 ; 06C7 1-d8: .byte %00000000 ; 06C8 1-d9: .byte %00111000 ; 06C9 1-d9: *** .byte %00011000 ; 06CA 1-d9: ** .byte %00011000 ; 06CB 1-d9: ** .byte %00011000 ; 06CC 1-d9: ** .byte %00011000 ; 06CD 1-d9: ** .byte %00111100 ; 06CE 1-d9: **** .byte %00000000 ; 06CF 1-d9: .byte %00000000 ; 06D0 1-da: .byte %00000000 ; 06D1 1-da: .byte %01100110 ; 06D2 1-da: ** ** .byte %01111111 ; 06D3 1-da: ******* .byte %01111111 ; 06D4 1-da: ******* .byte %01101011 ; 06D5 1-da: ** * ** .byte %01100011 ; 06D6 1-da: ** ** .byte %00000000 ; 06D7 1-da: .byte %00000000 ; 06D8 1-db: .byte %00000000 ; 06D9 1-db: .byte %01100110 ; 06DA 1-db: ** ** .byte %01111111 ; 06DB 1-db: ******* .byte %01111111 ; 06DC 1-db: ******* .byte %01101011 ; 06DD 1-db: ** * ** .byte %01100011 ; 06DE 1-db: ** ** .byte %00000000 ; 06DF 1-db: .byte %00000000 ; 06E0 1-dc: .byte %00000000 ; 06E1 1-dc: .byte %01111100 ; 06E2 1-dc: ***** .byte %01100110 ; 06E3 1-dc: ** ** .byte %01100110 ; 06E4 1-dc: ** ** .byte %01100110 ; 06E5 1-dc: ** ** .byte %01100110 ; 06E6 1-dc: ** ** .byte %00000000 ; 06E7 1-dc: .byte %00000000 ; 06E8 1-dd: .byte %00000000 ; 06E9 1-dd: .byte %01111100 ; 06EA 1-dd: ***** .byte %01100110 ; 06EB 1-dd: ** ** .byte %01100110 ; 06EC 1-dd: ** ** .byte %01100110 ; 06ED 1-dd: ** ** .byte %01100110 ; 06EE 1-dd: ** ** .byte %00000000 ; 06EF 1-dd: .byte %00000000 ; 06F0 1-de: .byte %00000000 ; 06F1 1-de: .byte %00111100 ; 06F2 1-de: **** .byte %01100110 ; 06F3 1-de: ** ** .byte %01100110 ; 06F4 1-de: ** ** .byte %01100110 ; 06F5 1-de: ** ** .byte %00111100 ; 06F6 1-de: **** .byte %00000000 ; 06F7 1-de: .byte %00000000 ; 06F8 1-df: .byte %00000000 ; 06F9 1-df: .byte %00111100 ; 06FA 1-df: **** .byte %01100110 ; 06FB 1-df: ** ** .byte %01100110 ; 06FC 1-df: ** ** .byte %01100110 ; 06FD 1-df: ** ** .byte %00111100 ; 06FE 1-df: **** .byte %00000000 ; 06FF 1-df: .byte %00000000 ; 0700 1-e0: .byte %00000000 ; 0701 1-e0: .byte %01111100 ; 0702 1-e0: ***** .byte %01100110 ; 0703 1-e0: ** ** .byte %01100110 ; 0704 1-e0: ** ** .byte %01111100 ; 0705 1-e0: ***** .byte %01100000 ; 0706 1-e0: ** .byte %01100000 ; 0707 1-e0: ** .byte %00000000 ; 0708 1-e1: .byte %00000000 ; 0709 1-e1: .byte %01111100 ; 070A 1-e1: ***** .byte %01100110 ; 070B 1-e1: ** ** .byte %01100110 ; 070C 1-e1: ** ** .byte %01111100 ; 070D 1-e1: ***** .byte %01100000 ; 070E 1-e1: ** .byte %01100000 ; 070F 1-e1: ** .byte %00000000 ; 0710 1-e2: .byte %00000000 ; 0711 1-e2: .byte %00111110 ; 0712 1-e2: ***** .byte %01100110 ; 0713 1-e2: ** ** .byte %01100110 ; 0714 1-e2: ** ** .byte %00111110 ; 0715 1-e2: ***** .byte %00000110 ; 0716 1-e2: ** .byte %00000110 ; 0717 1-e2: ** .byte %00000000 ; 0718 1-e3: .byte %00000000 ; 0719 1-e3: .byte %00111110 ; 071A 1-e3: ***** .byte %01100110 ; 071B 1-e3: ** ** .byte %01100110 ; 071C 1-e3: ** ** .byte %00111110 ; 071D 1-e3: ***** .byte %00000110 ; 071E 1-e3: ** .byte %00000110 ; 071F 1-e3: ** .byte %00000000 ; 0720 1-e4: .byte %00000000 ; 0721 1-e4: .byte %01111100 ; 0722 1-e4: ***** .byte %01100110 ; 0723 1-e4: ** ** .byte %01100000 ; 0724 1-e4: ** .byte %01100000 ; 0725 1-e4: ** .byte %01100000 ; 0726 1-e4: ** .byte %00000000 ; 0727 1-e4: .byte %00000000 ; 0728 1-e5: .byte %00000000 ; 0729 1-e5: .byte %01111100 ; 072A 1-e5: ***** .byte %01100110 ; 072B 1-e5: ** ** .byte %01100000 ; 072C 1-e5: ** .byte %01100000 ; 072D 1-e5: ** .byte %01100000 ; 072E 1-e5: ** .byte %00000000 ; 072F 1-e5: .byte %00000000 ; 0730 1-e6: .byte %00000000 ; 0731 1-e6: .byte %00111110 ; 0732 1-e6: ***** .byte %01100000 ; 0733 1-e6: ** .byte %00111100 ; 0734 1-e6: **** .byte %00000110 ; 0735 1-e6: ** .byte %01111100 ; 0736 1-e6: ***** .byte %00000000 ; 0737 1-e6: .byte %00000000 ; 0738 1-e7: .byte %00000000 ; 0739 1-e7: .byte %00111110 ; 073A 1-e7: ***** .byte %01100000 ; 073B 1-e7: ** .byte %00111100 ; 073C 1-e7: **** .byte %00000110 ; 073D 1-e7: ** .byte %01111100 ; 073E 1-e7: ***** .byte %00000000 ; 073F 1-e7: .byte %00000000 ; 0740 1-e8: .byte %00011000 ; 0741 1-e8: ** .byte %01111110 ; 0742 1-e8: ****** .byte %00011000 ; 0743 1-e8: ** .byte %00011000 ; 0744 1-e8: ** .byte %00011000 ; 0745 1-e8: ** .byte %00001110 ; 0746 1-e8: *** .byte %00000000 ; 0747 1-e8: .byte %00000000 ; 0748 1-e9: .byte %00011000 ; 0749 1-e9: ** .byte %01111110 ; 074A 1-e9: ****** .byte %00011000 ; 074B 1-e9: ** .byte %00011000 ; 074C 1-e9: ** .byte %00011000 ; 074D 1-e9: ** .byte %00001110 ; 074E 1-e9: *** .byte %00000000 ; 074F 1-e9: .byte %00000000 ; 0750 1-ea: .byte %00000000 ; 0751 1-ea: .byte %01100110 ; 0752 1-ea: ** ** .byte %01100110 ; 0753 1-ea: ** ** .byte %01100110 ; 0754 1-ea: ** ** .byte %01100110 ; 0755 1-ea: ** ** .byte %00111110 ; 0756 1-ea: ***** .byte %00000000 ; 0757 1-ea: .byte %00000000 ; 0758 1-eb: .byte %00000000 ; 0759 1-eb: .byte %01100110 ; 075A 1-eb: ** ** .byte %01100110 ; 075B 1-eb: ** ** .byte %01100110 ; 075C 1-eb: ** ** .byte %01100110 ; 075D 1-eb: ** ** .byte %00111110 ; 075E 1-eb: ***** .byte %00000000 ; 075F 1-eb: .byte %00000000 ; 0760 1-ec: .byte %00000000 ; 0761 1-ec: .byte %01100110 ; 0762 1-ec: ** ** .byte %01100110 ; 0763 1-ec: ** ** .byte %01100110 ; 0764 1-ec: ** ** .byte %00111100 ; 0765 1-ec: **** .byte %00011000 ; 0766 1-ec: ** .byte %00000000 ; 0767 1-ec: .byte %00000000 ; 0768 1-ed: .byte %00000000 ; 0769 1-ed: .byte %01100110 ; 076A 1-ed: ** ** .byte %01100110 ; 076B 1-ed: ** ** .byte %01100110 ; 076C 1-ed: ** ** .byte %00111100 ; 076D 1-ed: **** .byte %00011000 ; 076E 1-ed: ** .byte %00000000 ; 076F 1-ed: .byte %00000000 ; 0770 1-ee: .byte %00000000 ; 0771 1-ee: .byte %01100011 ; 0772 1-ee: ** ** .byte %01101011 ; 0773 1-ee: ** * ** .byte %01111111 ; 0774 1-ee: ******* .byte %00111110 ; 0775 1-ee: ***** .byte %00110110 ; 0776 1-ee: ** ** .byte %00000000 ; 0777 1-ee: .byte %00000000 ; 0778 1-ef: .byte %00000000 ; 0779 1-ef: .byte %01100011 ; 077A 1-ef: ** ** .byte %01101011 ; 077B 1-ef: ** * ** .byte %01111111 ; 077C 1-ef: ******* .byte %00111110 ; 077D 1-ef: ***** .byte %00110110 ; 077E 1-ef: ** ** .byte %00000000 ; 077F 1-ef: .byte %00000000 ; 0780 1-f0: .byte %00000000 ; 0781 1-f0: .byte %01100110 ; 0782 1-f0: ** ** .byte %00111100 ; 0783 1-f0: **** .byte %00011000 ; 0784 1-f0: ** .byte %00111100 ; 0785 1-f0: **** .byte %01100110 ; 0786 1-f0: ** ** .byte %00000000 ; 0787 1-f0: .byte %00000000 ; 0788 1-f1: .byte %00000000 ; 0789 1-f1: .byte %01100110 ; 078A 1-f1: ** ** .byte %00111100 ; 078B 1-f1: **** .byte %00011000 ; 078C 1-f1: ** .byte %00111100 ; 078D 1-f1: **** .byte %01100110 ; 078E 1-f1: ** ** .byte %00000000 ; 078F 1-f1: .byte %00000000 ; 0790 1-f2: .byte %00000000 ; 0791 1-f2: .byte %01100110 ; 0792 1-f2: ** ** .byte %01100110 ; 0793 1-f2: ** ** .byte %01100110 ; 0794 1-f2: ** ** .byte %00111110 ; 0795 1-f2: ***** .byte %00001100 ; 0796 1-f2: ** .byte %01111000 ; 0797 1-f2: **** .byte %00000000 ; 0798 1-f3: .byte %00000000 ; 0799 1-f3: .byte %01100110 ; 079A 1-f3: ** ** .byte %01100110 ; 079B 1-f3: ** ** .byte %01100110 ; 079C 1-f3: ** ** .byte %00111110 ; 079D 1-f3: ***** .byte %00001100 ; 079E 1-f3: ** .byte %01111000 ; 079F 1-f3: **** .byte %00000000 ; 07A0 1-f4: .byte %00000000 ; 07A1 1-f4: .byte %01111110 ; 07A2 1-f4: ****** .byte %00001100 ; 07A3 1-f4: ** .byte %00011000 ; 07A4 1-f4: ** .byte %00110000 ; 07A5 1-f4: ** .byte %01111110 ; 07A6 1-f4: ****** .byte %00000000 ; 07A7 1-f4: .byte %00000000 ; 07A8 1-f5: .byte %00000000 ; 07A9 1-f5: .byte %01111110 ; 07AA 1-f5: ****** .byte %00001100 ; 07AB 1-f5: ** .byte %00011000 ; 07AC 1-f5: ** .byte %00110000 ; 07AD 1-f5: ** .byte %01111110 ; 07AE 1-f5: ****** .byte %00000000 ; 07AF 1-f5: .byte .byte %00000000 ; 0200 1-40: .byte %00000000 ; 0201 1-40: .byte %00000000 ; 0202 1-40: .byte %00000000 ; 0203 1-40: .byte %00000000 ; 0204 1-40: .byte %00000000 ; 0205 1-40: .byte %00000000 ; 0206 1-40: .byte %00000000 ; 0207 1-40: .byte %00000000 ; 0208 1-41: .byte %00000000 ; 0209 1-41: .byte %00000000 ; 020A 1-41: .byte %00000000 ; 020B 1-41: .byte %00000000 ; 020C 1-41: .byte %00000000 ; 020D 1-41: .byte %00000000 ; 020E 1-41: .byte %00000000 ; 020F 1-41: .byte .byte .byte .byte .byte %00000000 ; 0200 1-40: .byte %00000000 ; 0201 1-40: .byte %00000000 ; 0202 1-40: .byte %00000000 ; 0203 1-40: .byte %00000000 ; 0204 1-40: .byte %00000000 ; 0205 1-40: .byte %00000000 ; 0206 1-40: .byte %00000000 ; 0207 1-40: .byte %00000000 ; 0208 1-41: .byte %00000000 ; 0209 1-41: .byte %00000000 ; 020A 1-41: .byte %00000000 ; 020B 1-41: .byte %00000000 ; 020C 1-41: .byte %00000000 ; 020D 1-41: .byte %00000000 ; 020E 1-41: .byte %00000000 ; 020F 1-41: .byte .byte .byte .byte .byte %00000000 ; 0200 1-40: .byte %00000000 ; 0201 1-40: .byte %00000000 ; 0202 1-40: .byte %00000000 ; 0203 1-40: .byte %00000000 ; 0204 1-40: .byte %00000000 ; 0205 1-40: .byte %00000000 ; 0206 1-40: .byte %00000000 ; 0207 1-40: .byte %00000000 ; 0208 1-41: .byte %00000000 ; 0209 1-41: .byte %00000000 ; 020A 1-41: .byte %00000000 ; 020B 1-41: .byte %00000000 ; 020C 1-41: .byte %00000000 ; 020D 1-41: .byte %00000000 ; 020E 1-41: .byte %00000000 ; 020F 1-41: .byte .byte .byte .byte .byte %00000000 ; 0200 1-40: .byte %00000000 ; 0201 1-40: .byte %00000000 ; 0202 1-40: .byte %00000000 ; 0203 1-40: .byte %00000000 ; 0204 1-40: .byte %00000000 ; 0205 1-40: .byte %00000000 ; 0206 1-40: .byte %00000000 ; 0207 1-40: .byte %00000000 ; 0208 1-41: .byte %00000000 ; 0209 1-41: .byte %00000000 ; 020A 1-41: .byte %00000000 ; 020B 1-41: .byte %00000000 ; 020C 1-41: .byte %00000000 ; 020D 1-41: .byte %00000000 ; 020E 1-41: .byte %00000000 ; 020F 1-41: .byte .byte .byte .byte .byte %00000000 ; 0200 1-40: .byte %00000000 ; 0201 1-40: .byte %00000000 ; 0202 1-40: .byte %00000000 ; 0203 1-40: .byte %00000000 ; 0204 1-40: .byte %00000000 ; 0205 1-40: .byte %00000000 ; 0206 1-40: .byte %00000000 ; 0207 1-40: .byte %00000000 ; 0208 1-41: .byte %00000000 ; 0209 1-41: .byte %00000000 ; 020A 1-41: .byte %00000000 ; 020B 1-41: .byte %00000000 ; 020C 1-41: .byte %00000000 ; 020D 1-41: .byte %00000000 ; 020E 1-41: .byte %00000000 ; 020F 1-41: .byte .byte .byte .byte .byte %00000000 ; 0200 1-40: .byte %00000000 ; 0201 1-40: .byte %00000000 ; 0202 1-40: .byte %00000000 ; 0203 1-40: .byte %00000000 ; 0204 1-40: .byte %00000000 ; 0205 1-40: .byte %00000000 ; 0206 1-40: .byte %00000000 ; 0207 1-40: .byte %00000000 ; 0208 1-41: .byte %00000000 ; 0209 1-41: .byte %00000000 ; 020A 1-41: .byte %00000000 ; 020B 1-41: .byte %00000000 ; 020C 1-41: .byte %00000000 ; 020D 1-41: .byte %00000000 ; 020E 1-41: .byte %00000000 ; 020F 1-41: .byte .byte .byte .byte .byte %00000000 ; 0200 1-40: .byte %00000000 ; 0201 1-40: .byte %00000000 ; 0202 1-40: .byte %00000000 ; 0203 1-40: .byte %00000000 ; 0204 1-40: .byte %00000000 ; 0205 1-40: .byte %00000000 ; 0206 1-40: .byte %00000000 ; 0207 1-40: .byte %00000000 ; 0208 1-41: .byte %00000000 ; 0209 1-41: .byte %00000000 ; 020A 1-41: .byte %00000000 ; 020B 1-41: .byte %00000000 ; 020C 1-41: .byte %00000000 ; 020D 1-41: .byte %00000000 ; 020E 1-41: .byte %00000000 ; 020F 1-41: .byte .byte .byte .byte .byte %00000000 ; 0200 1-40: .byte %00000000 ; 0201 1-40: .byte %00000000 ; 0202 1-40: .byte %00000000 ; 0203 1-40: .byte %00000000 ; 0204 1-40: .byte %00000000 ; 0205 1-40: .byte %00000000 ; 0206 1-40: .byte %00000000 ; 0207 1-40: .byte %00000000 ; 0208 1-41: .byte %00000000 ; 0209 1-41: .byte %00000000 ; 020A 1-41: .byte %00000000 ; 020B 1-41: .byte %00000000 ; 020C 1-41: .byte %00000000 ; 020D 1-41: .byte %00000000 ; 020E 1-41: .byte %00000000 ; 020F 1-41: .byte .byte .byte .byte .byte %00000000 ; 0200 1-40: .byte %00000000 ; 0201 1-40: .byte %00000000 ; 0202 1-40: .byte %00000000 ; 0203 1-40: .byte %00000000 ; 0204 1-40: .byte %00000000 ; 0205 1-40: .byte %00000000 ; 0206 1-40: .byte %00000000 ; 0207 1-40: .byte %00000000 ; 0208 1-41: .byte %00000000 ; 0209 1-41: .byte %00000000 ; 020A 1-41: .byte %00000000 ; 020B 1-41: .byte %00000000 ; 020C 1-41: .byte %00000000 ; 020D 1-41: .byte %00000000 ; 020E 1-41: .byte %00000000 ; 020F 1-41: .byte .byte .byte .byte .byte %00000000 ; 0200 1-40: .byte %00000000 ; 0201 1-40: .byte %00000000 ; 0202 1-40: .byte %00000000 ; 0203 1-40: .byte %00000000 ; 0204 1-40: .byte %00000000 ; 0205 1-40: .byte %00000000 ; 0206 1-40: .byte %00000000 ; 0207 1-40: .byte %00000000 ; 0208 1-41: .byte %00000000 ; 0209 1-41: .byte %00000000 ; 020A 1-41: .byte %00000000 ; 020B 1-41: .byte %00000000 ; 020C 1-41: .byte %00000000 ; 020D 1-41: .byte %00000000 ; 020E 1-41: .byte %00000000 ; 020F 1-41: .byte .byte .byte .byte .byte %00000000 ; 0008 1-01: .byte %00000000 ; 0009 1-01: .byte %00000000 ; 000A 1-01: .byte %00000000 ; 000B 1-01: .byte %00000000 ; 000C 1-01: .byte %00000000 ; 000D 1-01: .byte %00000000 ; 000E 1-01: .byte %00000000 ; 000F 1-01: .byte %00000000 ; 0008 1-01: .byte %00000000 ; 0009 1-01: .byte %00000000 ; 000A 1-01: .byte %00000000 ; 000B 1-01: .byte %00000000 ; 000C 1-01: .byte %00000000 ; 000D 1-01: .byte %00000000 ; 000E 1-01: .byte %00000000 ; 000F 1-01: .byte .byte .byte .byte %11110000 ; 09C0 2-38: **** .byte %11110000 ; 09C1 2-38: **** .byte %11110000 ; 09C2 2-38: **** .byte %11110000 ; 09C3 2-38: **** .byte %11111111 ; 09C4 2-38: ******** .byte %11111111 ; 09C5 2-38: ******** .byte %11111111 ; 09C6 2-38: ******** .byte %11111111 ; 09C7 2-38: ******** .byte %11110000 ; 09C8 2-39: **** .byte %11110000 ; 09C9 2-39: **** .byte %11110000 ; 09CA 2-39: **** .byte %11110000 ; 09CB 2-39: **** .byte %11111111 ; 09CC 2-39: ******** .byte %11111111 ; 09CD 2-39: ******** .byte %11111111 ; 09CE 2-39: ******** .byte %11111111 ; 09CF 2-39: ******** .byte %11111111 ; 09D0 2-3a: ******** .byte %11111111 ; 09D1 2-3a: ******** .byte %11111111 ; 09D2 2-3a: ******** .byte %11111111 ; 09D3 2-3a: ******** .byte %11110000 ; 09D4 2-3a: **** .byte %11110000 ; 09D5 2-3a: **** .byte %11110000 ; 09D6 2-3a: **** .byte %11110000 ; 09D7 2-3a: **** .byte %11111111 ; 09D8 2-3b: ******** .byte %11111111 ; 09D9 2-3b: ******** .byte %11111111 ; 09DA 2-3b: ******** .byte %11111111 ; 09DB 2-3b: ******** .byte %11110000 ; 09DC 2-3b: **** .byte %11110000 ; 09DD 2-3b: **** .byte %11110000 ; 09DE 2-3b: **** .byte %11110000 ; 09DF 2-3b: **** .byte %00001111 ; 09E0 2-3c: **** .byte %00001111 ; 09E1 2-3c: **** .byte %00001111 ; 09E2 2-3c: **** .byte %00001111 ; 09E3 2-3c: **** .byte %11111111 ; 09E4 2-3c: ******** .byte %11111111 ; 09E5 2-3c: ******** .byte %11111111 ; 09E6 2-3c: ******** .byte %11111111 ; 09E7 2-3c: ******** .byte %00001111 ; 09E8 2-3d: **** .byte %00001111 ; 09E9 2-3d: **** .byte %00001111 ; 09EA 2-3d: **** .byte %00001111 ; 09EB 2-3d: **** .byte %11111111 ; 09EC 2-3d: ******** .byte %11111111 ; 09ED 2-3d: ******** .byte %11111111 ; 09EE 2-3d: ******** .byte %11111111 ; 09EF 2-3d: ******** .byte %00001111 ; 09F0 2-3e: **** .byte %00001111 ; 09F1 2-3e: **** .byte %00001111 ; 09F2 2-3e: **** .byte %00001111 ; 09F3 2-3e: **** .byte %11110000 ; 09F4 2-3e: **** .byte %11110000 ; 09F5 2-3e: **** .byte %11110000 ; 09F6 2-3e: **** .byte %11110000 ; 09F7 2-3e: **** .byte %00001111 ; 09F8 2-3f: **** .byte %00001111 ; 09F9 2-3f: **** .byte %00001111 ; 09FA 2-3f: **** .byte %00001111 ; 09FB 2-3f: **** .byte %11110000 ; 09FC 2-3f: **** .byte %11110000 ; 09FD 2-3f: **** .byte %11110000 ; 09FE 2-3f: **** .byte %11110000 ; 09FF 2-3f: **** .byte %11111111 ; 0A00 2-40: ******** .byte %11111111 ; 0A01 2-40: ******** .byte %11111111 ; 0A02 2-40: ******** .byte %11111111 ; 0A03 2-40: ******** .byte %11111111 ; 0A04 2-40: ******** .byte %11111111 ; 0A05 2-40: ******** .byte %11111111 ; 0A06 2-40: ******** .byte %11111111 ; 0A07 2-40: ******** .byte %11111111 ; 0A08 2-41: ******** .byte %11111111 ; 0A09 2-41: ******** .byte %11111111 ; 0A0A 2-41: ******** .byte %11111111 ; 0A0B 2-41: ******** .byte %11111111 ; 0A0C 2-41: ******** .byte %11111111 ; 0A0D 2-41: ******** .byte %11111111 ; 0A0E 2-41: ******** .byte %11111111 ; 0A0F 2-41: ******** .byte %11100111 ; 0A10 2-42: *** *** .byte %11100111 ; 0A11 2-42: *** *** .byte %11100111 ; 0A12 2-42: *** *** .byte %11100111 ; 0A13 2-42: *** *** .byte %11111111 ; 0A14 2-42: ******** .byte %11111111 ; 0A15 2-42: ******** .byte %11100111 ; 0A16 2-42: *** *** .byte %11111111 ; 0A17 2-42: ******** .byte %11100111 ; 0A18 2-43: *** *** .byte %11100111 ; 0A19 2-43: *** *** .byte %11100111 ; 0A1A 2-43: *** *** .byte %11100111 ; 0A1B 2-43: *** *** .byte %11111111 ; 0A1C 2-43: ******** .byte %11111111 ; 0A1D 2-43: ******** .byte %11100111 ; 0A1E 2-43: *** *** .byte %11111111 ; 0A1F 2-43: ******** .byte %10011001 ; 0A20 2-44: * ** * .byte %10011001 ; 0A21 2-44: * ** * .byte %10011001 ; 0A22 2-44: * ** * .byte %11111111 ; 0A23 2-44: ******** .byte %11111111 ; 0A24 2-44: ******** .byte %11111111 ; 0A25 2-44: ******** .byte %11111111 ; 0A26 2-44: ******** .byte %11111111 ; 0A27 2-44: ******** .byte %10011001 ; 0A28 2-45: * ** * .byte %10011001 ; 0A29 2-45: * ** * .byte %10011001 ; 0A2A 2-45: * ** * .byte %11111111 ; 0A2B 2-45: ******** .byte %11111111 ; 0A2C 2-45: ******** .byte %11111111 ; 0A2D 2-45: ******** .byte %11111111 ; 0A2E 2-45: ******** .byte %11111111 ; 0A2F 2-45: ******** .byte %10011001 ; 0A30 2-46: * ** * .byte %10011001 ; 0A31 2-46: * ** * .byte %00000000 ; 0A32 2-46: .byte %10011001 ; 0A33 2-46: * ** * .byte %00000000 ; 0A34 2-46: .byte %10011001 ; 0A35 2-46: * ** * .byte %10011001 ; 0A36 2-46: * ** * .byte %11111111 ; 0A37 2-46: ******** .byte %10011001 ; 0A38 2-47: * ** * .byte %10011001 ; 0A39 2-47: * ** * .byte %00000000 ; 0A3A 2-47: .byte %10011001 ; 0A3B 2-47: * ** * .byte %00000000 ; 0A3C 2-47: .byte %10011001 ; 0A3D 2-47: * ** * .byte %10011001 ; 0A3E 2-47: * ** * .byte %11111111 ; 0A3F 2-47: ******** .byte %11100111 ; 0A40 2-48: *** *** .byte %11000001 ; 0A41 2-48: ** * .byte %10011111 ; 0A42 2-48: * ***** .byte %11000011 ; 0A43 2-48: ** ** .byte %11111001 ; 0A44 2-48: ***** * .byte %10000011 ; 0A45 2-48: * ** .byte %11100111 ; 0A46 2-48: *** *** .byte %11111111 ; 0A47 2-48: ******** .byte %11100111 ; 0A48 2-49: *** *** .byte %11000001 ; 0A49 2-49: ** * .byte %10011111 ; 0A4A 2-49: * ***** .byte %11000011 ; 0A4B 2-49: ** ** .byte %11111001 ; 0A4C 2-49: ***** * .byte %10000011 ; 0A4D 2-49: * ** .byte %11100111 ; 0A4E 2-49: *** *** .byte %11111111 ; 0A4F 2-49: ******** .byte %11111111 ; 0A50 2-4a: ******** .byte %10011001 ; 0A51 2-4a: * ** * .byte %11110011 ; 0A52 2-4a: **** ** .byte %11100111 ; 0A53 2-4a: *** *** .byte %11001111 ; 0A54 2-4a: ** **** .byte %10011001 ; 0A55 2-4a: * ** * .byte %10111001 ; 0A56 2-4a: * *** * .byte %11111111 ; 0A57 2-4a: ******** .byte %11111111 ; 0A58 2-4b: ******** .byte %10011001 ; 0A59 2-4b: * ** * .byte %11110011 ; 0A5A 2-4b: **** ** .byte %11100111 ; 0A5B 2-4b: *** *** .byte %11001111 ; 0A5C 2-4b: ** **** .byte %10011001 ; 0A5D 2-4b: * ** * .byte %10111001 ; 0A5E 2-4b: * *** * .byte %11111111 ; 0A5F 2-4b: ******** .byte %11000011 ; 0A60 2-4c: ** ** .byte %10011001 ; 0A61 2-4c: * ** * .byte %11000011 ; 0A62 2-4c: ** ** .byte %11000111 ; 0A63 2-4c: ** *** .byte %10011000 ; 0A64 2-4c: * ** .byte %10011001 ; 0A65 2-4c: * ** * .byte %11000000 ; 0A66 2-4c: ** .byte %11111111 ; 0A67 2-4c: ******** .byte %11000011 ; 0A68 2-4d: ** ** .byte %10011001 ; 0A69 2-4d: * ** * .byte %11000011 ; 0A6A 2-4d: ** ** .byte %11000111 ; 0A6B 2-4d: ** *** .byte %10011000 ; 0A6C 2-4d: * ** .byte %10011001 ; 0A6D 2-4d: * ** * .byte %11000000 ; 0A6E 2-4d: ** .byte %11111111 ; 0A6F 2-4d: ******** .byte %11111001 ; 0A70 2-4e: ***** * .byte %11110011 ; 0A71 2-4e: **** ** .byte %11100111 ; 0A72 2-4e: *** *** .byte %11111111 ; 0A73 2-4e: ******** .byte %11111111 ; 0A74 2-4e: ******** .byte %11111111 ; 0A75 2-4e: ******** .byte %11111111 ; 0A76 2-4e: ******** .byte %11111111 ; 0A77 2-4e: ******** .byte %11111001 ; 0A78 2-4f: ***** * .byte %11110011 ; 0A79 2-4f: **** ** .byte %11100111 ; 0A7A 2-4f: *** *** .byte %11111111 ; 0A7B 2-4f: ******** .byte %11111111 ; 0A7C 2-4f: ******** .byte %11111111 ; 0A7D 2-4f: ******** .byte %11111111 ; 0A7E 2-4f: ******** .byte %11111111 ; 0A7F 2-4f: ******** .byte %11110011 ; 0A80 2-50: **** ** .byte %11100111 ; 0A81 2-50: *** *** .byte %11001111 ; 0A82 2-50: ** **** .byte %11001111 ; 0A83 2-50: ** **** .byte %11001111 ; 0A84 2-50: ** **** .byte %11100111 ; 0A85 2-50: *** *** .byte %11110011 ; 0A86 2-50: **** ** .byte %11111111 ; 0A87 2-50: ******** .byte %11110011 ; 0A88 2-51: **** ** .byte %11100111 ; 0A89 2-51: *** *** .byte %11001111 ; 0A8A 2-51: ** **** .byte %11001111 ; 0A8B 2-51: ** **** .byte %11001111 ; 0A8C 2-51: ** **** .byte %11100111 ; 0A8D 2-51: *** *** .byte %11110011 ; 0A8E 2-51: **** ** .byte %11111111 ; 0A8F 2-51: ******** .byte %11001111 ; 0A90 2-52: ** **** .byte %11100111 ; 0A91 2-52: *** *** .byte %11110011 ; 0A92 2-52: **** ** .byte %11110011 ; 0A93 2-52: **** ** .byte %11110011 ; 0A94 2-52: **** ** .byte %11100111 ; 0A95 2-52: *** *** .byte %11001111 ; 0A96 2-52: ** **** .byte %11111111 ; 0A97 2-52: ******** .byte %11001111 ; 0A98 2-53: ** **** .byte %11100111 ; 0A99 2-53: *** *** .byte %11110011 ; 0A9A 2-53: **** ** .byte %11110011 ; 0A9B 2-53: **** ** .byte %11110011 ; 0A9C 2-53: **** ** .byte %11100111 ; 0A9D 2-53: *** *** .byte %11001111 ; 0A9E 2-53: ** **** .byte %11111111 ; 0A9F 2-53: ******** .byte %11111111 ; 0AA0 2-54: ******** .byte %10011001 ; 0AA1 2-54: * ** * .byte %11000011 ; 0AA2 2-54: ** ** .byte %00000000 ; 0AA3 2-54: .byte %11000011 ; 0AA4 2-54: ** ** .byte %10011001 ; 0AA5 2-54: * ** * .byte %11111111 ; 0AA6 2-54: ******** .byte %11111111 ; 0AA7 2-54: ******** .byte %11111111 ; 0AA8 2-55: ******** .byte %10011001 ; 0AA9 2-55: * ** * .byte %11000011 ; 0AAA 2-55: ** ** .byte %00000000 ; 0AAB 2-55: .byte %11000011 ; 0AAC 2-55: ** ** .byte %10011001 ; 0AAD 2-55: * ** * .byte %11111111 ; 0AAE 2-55: ******** .byte %11111111 ; 0AAF 2-55: ******** .byte %11111111 ; 0AB0 2-56: ******** .byte %11100111 ; 0AB1 2-56: *** *** .byte %11100111 ; 0AB2 2-56: *** *** .byte %10000001 ; 0AB3 2-56: * * .byte %11100111 ; 0AB4 2-56: *** *** .byte %11100111 ; 0AB5 2-56: *** *** .byte %11111111 ; 0AB6 2-56: ******** .byte %11111111 ; 0AB7 2-56: ******** .byte %11111111 ; 0AB8 2-57: ******** .byte %11100111 ; 0AB9 2-57: *** *** .byte %11100111 ; 0ABA 2-57: *** *** .byte %10000001 ; 0ABB 2-57: * * .byte %11100111 ; 0ABC 2-57: *** *** .byte %11100111 ; 0ABD 2-57: *** *** .byte %11111111 ; 0ABE 2-57: ******** .byte %11111111 ; 0ABF 2-57: ******** .byte %11111111 ; 0AC0 2-58: ******** .byte %11111111 ; 0AC1 2-58: ******** .byte %11111111 ; 0AC2 2-58: ******** .byte %11111111 ; 0AC3 2-58: ******** .byte %11111111 ; 0AC4 2-58: ******** .byte %11100111 ; 0AC5 2-58: *** *** .byte %11100111 ; 0AC6 2-58: *** *** .byte %11001111 ; 0AC7 2-58: ** **** .byte %11111111 ; 0AC8 2-59: ******** .byte %11111111 ; 0AC9 2-59: ******** .byte %11111111 ; 0ACA 2-59: ******** .byte %11111111 ; 0ACB 2-59: ******** .byte %11111111 ; 0ACC 2-59: ******** .byte %11100111 ; 0ACD 2-59: *** *** .byte %11100111 ; 0ACE 2-59: *** *** .byte %11001111 ; 0ACF 2-59: ** **** .byte %11111111 ; 0AD0 2-5a: ******** .byte %11111111 ; 0AD1 2-5a: ******** .byte %11111111 ; 0AD2 2-5a: ******** .byte %10000001 ; 0AD3 2-5a: * * .byte %11111111 ; 0AD4 2-5a: ******** .byte %11111111 ; 0AD5 2-5a: ******** .byte %11111111 ; 0AD6 2-5a: ******** .byte %11111111 ; 0AD7 2-5a: ******** .byte %11111111 ; 0AD8 2-5b: ******** .byte %11111111 ; 0AD9 2-5b: ******** .byte %11111111 ; 0ADA 2-5b: ******** .byte %10000001 ; 0ADB 2-5b: * * .byte %11111111 ; 0ADC 2-5b: ******** .byte %11111111 ; 0ADD 2-5b: ******** .byte %11111111 ; 0ADE 2-5b: ******** .byte %11111111 ; 0ADF 2-5b: ******** .byte %11111111 ; 0AE0 2-5c: ******** .byte %11111111 ; 0AE1 2-5c: ******** .byte %11111111 ; 0AE2 2-5c: ******** .byte %11111111 ; 0AE3 2-5c: ******** .byte %11111111 ; 0AE4 2-5c: ******** .byte %11100111 ; 0AE5 2-5c: *** *** .byte %11100111 ; 0AE6 2-5c: *** *** .byte %11111111 ; 0AE7 2-5c: ******** .byte %11111111 ; 0AE8 2-5d: ******** .byte %11111111 ; 0AE9 2-5d: ******** .byte %11111111 ; 0AEA 2-5d: ******** .byte %11111111 ; 0AEB 2-5d: ******** .byte %11111111 ; 0AEC 2-5d: ******** .byte %11100111 ; 0AED 2-5d: *** *** .byte %11100111 ; 0AEE 2-5d: *** *** .byte %11111111 ; 0AEF 2-5d: ******** .byte %11111111 ; 0AF0 2-5e: ******** .byte %11111100 ; 0AF1 2-5e: ****** .byte %11111001 ; 0AF2 2-5e: ***** * .byte %11110011 ; 0AF3 2-5e: **** ** .byte %11100111 ; 0AF4 2-5e: *** *** .byte %11001111 ; 0AF5 2-5e: ** **** .byte %10011111 ; 0AF6 2-5e: * ***** .byte %11111111 ; 0AF7 2-5e: ******** .byte %11111111 ; 0AF8 2-5f: ******** .byte %11111100 ; 0AF9 2-5f: ****** .byte %11111001 ; 0AFA 2-5f: ***** * .byte %11110011 ; 0AFB 2-5f: **** ** .byte %11100111 ; 0AFC 2-5f: *** *** .byte %11001111 ; 0AFD 2-5f: ** **** .byte %10011111 ; 0AFE 2-5f: * ***** .byte %11111111 ; 0AFF 2-5f: ******** .byte %11000011 ; 0B00 2-60: ** ** .byte %10011001 ; 0B01 2-60: * ** * .byte %10010001 ; 0B02 2-60: * * * .byte %10001001 ; 0B03 2-60: * * * .byte %10011001 ; 0B04 2-60: * ** * .byte %10011001 ; 0B05 2-60: * ** * .byte %11000011 ; 0B06 2-60: ** ** .byte %11111111 ; 0B07 2-60: ******** .byte %11000011 ; 0B08 2-61: ** ** .byte %10011001 ; 0B09 2-61: * ** * .byte %10010001 ; 0B0A 2-61: * * * .byte %10001001 ; 0B0B 2-61: * * * .byte %10011001 ; 0B0C 2-61: * ** * .byte %10011001 ; 0B0D 2-61: * ** * .byte %11000011 ; 0B0E 2-61: ** ** .byte %11111111 ; 0B0F 2-61: ******** .byte %11100111 ; 0B10 2-62: *** *** .byte %11100111 ; 0B11 2-62: *** *** .byte %11000111 ; 0B12 2-62: ** *** .byte %11100111 ; 0B13 2-62: *** *** .byte %11100111 ; 0B14 2-62: *** *** .byte %11100111 ; 0B15 2-62: *** *** .byte %10000001 ; 0B16 2-62: * * .byte %11111111 ; 0B17 2-62: ******** .byte %11100111 ; 0B18 2-63: *** *** .byte %11100111 ; 0B19 2-63: *** *** .byte %11000111 ; 0B1A 2-63: ** *** .byte %11100111 ; 0B1B 2-63: *** *** .byte %11100111 ; 0B1C 2-63: *** *** .byte %11100111 ; 0B1D 2-63: *** *** .byte %10000001 ; 0B1E 2-63: * * .byte %11111111 ; 0B1F 2-63: ******** .byte %11000011 ; 0B20 2-64: ** ** .byte %10011001 ; 0B21 2-64: * ** * .byte %11111001 ; 0B22 2-64: ***** * .byte %11110011 ; 0B23 2-64: **** ** .byte %11001111 ; 0B24 2-64: ** **** .byte %10011111 ; 0B25 2-64: * ***** .byte %10000001 ; 0B26 2-64: * * .byte %11111111 ; 0B27 2-64: ******** .byte %11000011 ; 0B28 2-65: ** ** .byte %10011001 ; 0B29 2-65: * ** * .byte %11111001 ; 0B2A 2-65: ***** * .byte %11110011 ; 0B2B 2-65: **** ** .byte %11001111 ; 0B2C 2-65: ** **** .byte %10011111 ; 0B2D 2-65: * ***** .byte %10000001 ; 0B2E 2-65: * * .byte %11111111 ; 0B2F 2-65: ******** .byte %11000011 ; 0B30 2-66: ** ** .byte %10011001 ; 0B31 2-66: * ** * .byte %11111001 ; 0B32 2-66: ***** * .byte %11100011 ; 0B33 2-66: *** ** .byte %11111001 ; 0B34 2-66: ***** * .byte %10011001 ; 0B35 2-66: * ** * .byte %11000011 ; 0B36 2-66: ** ** .byte %11111111 ; 0B37 2-66: ******** .byte %11000011 ; 0B38 2-67: ** ** .byte %10011001 ; 0B39 2-67: * ** * .byte %11111001 ; 0B3A 2-67: ***** * .byte %11100011 ; 0B3B 2-67: *** ** .byte %11111001 ; 0B3C 2-67: ***** * .byte %10011001 ; 0B3D 2-67: * ** * .byte %11000011 ; 0B3E 2-67: ** ** .byte %11111111 ; 0B3F 2-67: ******** .byte %11111001 ; 0B40 2-68: ***** * .byte %11110001 ; 0B41 2-68: **** * .byte %11100001 ; 0B42 2-68: *** * .byte %10011001 ; 0B43 2-68: * ** * .byte %10000000 ; 0B44 2-68: * .byte %11111001 ; 0B45 2-68: ***** * .byte %11111001 ; 0B46 2-68: ***** * .byte %11111111 ; 0B47 2-68: ******** .byte %11111001 ; 0B48 2-69: ***** * .byte %11110001 ; 0B49 2-69: **** * .byte %11100001 ; 0B4A 2-69: *** * .byte %10011001 ; 0B4B 2-69: * ** * .byte %10000000 ; 0B4C 2-69: * .byte %11111001 ; 0B4D 2-69: ***** * .byte %11111001 ; 0B4E 2-69: ***** * .byte %11111111 ; 0B4F 2-69: ******** .byte %10000001 ; 0B50 2-6a: * * .byte %10011111 ; 0B51 2-6a: * ***** .byte %10000011 ; 0B52 2-6a: * ** .byte %11111001 ; 0B53 2-6a: ***** * .byte %11111001 ; 0B54 2-6a: ***** * .byte %10011001 ; 0B55 2-6a: * ** * .byte %11000011 ; 0B56 2-6a: ** ** .byte %11111111 ; 0B57 2-6a: ******** .byte %10000001 ; 0B58 2-6b: * * .byte %10011111 ; 0B59 2-6b: * ***** .byte %10000011 ; 0B5A 2-6b: * ** .byte %11111001 ; 0B5B 2-6b: ***** * .byte %11111001 ; 0B5C 2-6b: ***** * .byte %10011001 ; 0B5D 2-6b: * ** * .byte %11000011 ; 0B5E 2-6b: ** ** .byte %11111111 ; 0B5F 2-6b: ******** .byte %11000011 ; 0B60 2-6c: ** ** .byte %10011001 ; 0B61 2-6c: * ** * .byte %10011111 ; 0B62 2-6c: * ***** .byte %10000011 ; 0B63 2-6c: * ** .byte %10011001 ; 0B64 2-6c: * ** * .byte %10011001 ; 0B65 2-6c: * ** * .byte %11000011 ; 0B66 2-6c: ** ** .byte %11111111 ; 0B67 2-6c: ******** .byte %11000011 ; 0B68 2-6d: ** ** .byte %10011001 ; 0B69 2-6d: * ** * .byte %10011111 ; 0B6A 2-6d: * ***** .byte %10000011 ; 0B6B 2-6d: * ** .byte %10011001 ; 0B6C 2-6d: * ** * .byte %10011001 ; 0B6D 2-6d: * ** * .byte %11000011 ; 0B6E 2-6d: ** ** .byte %11111111 ; 0B6F 2-6d: ******** .byte %10000001 ; 0B70 2-6e: * * .byte %10011001 ; 0B71 2-6e: * ** * .byte %11110011 ; 0B72 2-6e: **** ** .byte %11100111 ; 0B73 2-6e: *** *** .byte %11100111 ; 0B74 2-6e: *** *** .byte %11100111 ; 0B75 2-6e: *** *** .byte %11100111 ; 0B76 2-6e: *** *** .byte %11111111 ; 0B77 2-6e: ******** .byte %10000001 ; 0B78 2-6f: * * .byte %10011001 ; 0B79 2-6f: * ** * .byte %11110011 ; 0B7A 2-6f: **** ** .byte %11100111 ; 0B7B 2-6f: *** *** .byte %11100111 ; 0B7C 2-6f: *** *** .byte %11100111 ; 0B7D 2-6f: *** *** .byte %11100111 ; 0B7E 2-6f: *** *** .byte %11111111 ; 0B7F 2-6f: ******** .byte %11000011 ; 0B80 2-70: ** ** .byte %10011001 ; 0B81 2-70: * ** * .byte %10011001 ; 0B82 2-70: * ** * .byte %11000011 ; 0B83 2-70: ** ** .byte %10011001 ; 0B84 2-70: * ** * .byte %10011001 ; 0B85 2-70: * ** * .byte %11000011 ; 0B86 2-70: ** ** .byte %11111111 ; 0B87 2-70: ******** .byte %11000011 ; 0B88 2-71: ** ** .byte %10011001 ; 0B89 2-71: * ** * .byte %10011001 ; 0B8A 2-71: * ** * .byte %11000011 ; 0B8B 2-71: ** ** .byte %10011001 ; 0B8C 2-71: * ** * .byte %10011001 ; 0B8D 2-71: * ** * .byte %11000011 ; 0B8E 2-71: ** ** .byte %11111111 ; 0B8F 2-71: ******** .byte %11000011 ; 0B90 2-72: ** ** .byte %10011001 ; 0B91 2-72: * ** * .byte %10011001 ; 0B92 2-72: * ** * .byte %11000001 ; 0B93 2-72: ** * .byte %11111001 ; 0B94 2-72: ***** * .byte %10011001 ; 0B95 2-72: * ** * .byte %11000011 ; 0B96 2-72: ** ** .byte %11111111 ; 0B97 2-72: ******** .byte %11000011 ; 0B98 2-73: ** ** .byte %10011001 ; 0B99 2-73: * ** * .byte %10011001 ; 0B9A 2-73: * ** * .byte %11000001 ; 0B9B 2-73: ** * .byte %11111001 ; 0B9C 2-73: ***** * .byte %10011001 ; 0B9D 2-73: * ** * .byte %11000011 ; 0B9E 2-73: ** ** .byte %11111111 ; 0B9F 2-73: ******** .byte %11111111 ; 0BA0 2-74: ******** .byte %11111111 ; 0BA1 2-74: ******** .byte %11100111 ; 0BA2 2-74: *** *** .byte %11111111 ; 0BA3 2-74: ******** .byte %11111111 ; 0BA4 2-74: ******** .byte %11100111 ; 0BA5 2-74: *** *** .byte %11111111 ; 0BA6 2-74: ******** .byte %11111111 ; 0BA7 2-74: ******** .byte %11111111 ; 0BA8 2-75: ******** .byte %11111111 ; 0BA9 2-75: ******** .byte %11100111 ; 0BAA 2-75: *** *** .byte %11111111 ; 0BAB 2-75: ******** .byte %11111111 ; 0BAC 2-75: ******** .byte %11100111 ; 0BAD 2-75: *** *** .byte %11111111 ; 0BAE 2-75: ******** .byte %11111111 ; 0BAF 2-75: ******** .byte %11111111 ; 0BB0 2-76: ******** .byte %11111111 ; 0BB1 2-76: ******** .byte %11100111 ; 0BB2 2-76: *** *** .byte %11111111 ; 0BB3 2-76: ******** .byte %11111111 ; 0BB4 2-76: ******** .byte %11100111 ; 0BB5 2-76: *** *** .byte %11100111 ; 0BB6 2-76: *** *** .byte %11001111 ; 0BB7 2-76: ** **** .byte %11111111 ; 0BB8 2-77: ******** .byte %11111111 ; 0BB9 2-77: ******** .byte %11100111 ; 0BBA 2-77: *** *** .byte %11111111 ; 0BBB 2-77: ******** .byte %11111111 ; 0BBC 2-77: ******** .byte %11100111 ; 0BBD 2-77: *** *** .byte %11100111 ; 0BBE 2-77: *** *** .byte %11001111 ; 0BBF 2-77: ** **** .byte %11110001 ; 0BC0 2-78: **** * .byte %11100111 ; 0BC1 2-78: *** *** .byte %11001111 ; 0BC2 2-78: ** **** .byte %10011111 ; 0BC3 2-78: * ***** .byte %11001111 ; 0BC4 2-78: ** **** .byte %11100111 ; 0BC5 2-78: *** *** .byte %11110001 ; 0BC6 2-78: **** * .byte %11111111 ; 0BC7 2-78: ******** .byte %11110001 ; 0BC8 2-79: **** * .byte %11100111 ; 0BC9 2-79: *** *** .byte %11001111 ; 0BCA 2-79: ** **** .byte %10011111 ; 0BCB 2-79: * ***** .byte %11001111 ; 0BCC 2-79: ** **** .byte %11100111 ; 0BCD 2-79: *** *** .byte %11110001 ; 0BCE 2-79: **** * .byte %11111111 ; 0BCF 2-79: ******** .byte %11111111 ; 0BD0 2-7a: ******** .byte %11111111 ; 0BD1 2-7a: ******** .byte %10000001 ; 0BD2 2-7a: * * .byte %11111111 ; 0BD3 2-7a: ******** .byte %10000001 ; 0BD4 2-7a: * * .byte %11111111 ; 0BD5 2-7a: ******** .byte %11111111 ; 0BD6 2-7a: ******** .byte %11111111 ; 0BD7 2-7a: ******** .byte %11111111 ; 0BD8 2-7b: ******** .byte %11111111 ; 0BD9 2-7b: ******** .byte %10000001 ; 0BDA 2-7b: * * .byte %11111111 ; 0BDB 2-7b: ******** .byte %10000001 ; 0BDC 2-7b: * * .byte %11111111 ; 0BDD 2-7b: ******** .byte %11111111 ; 0BDE 2-7b: ******** .byte %11111111 ; 0BDF 2-7b: ******** .byte %10001111 ; 0BE0 2-7c: * **** .byte %11100111 ; 0BE1 2-7c: *** *** .byte %11110011 ; 0BE2 2-7c: **** ** .byte %11111001 ; 0BE3 2-7c: ***** * .byte %11110011 ; 0BE4 2-7c: **** ** .byte %11100111 ; 0BE5 2-7c: *** *** .byte %10001111 ; 0BE6 2-7c: * **** .byte %11111111 ; 0BE7 2-7c: ******** .byte %10001111 ; 0BE8 2-7d: * **** .byte %11100111 ; 0BE9 2-7d: *** *** .byte %11110011 ; 0BEA 2-7d: **** ** .byte %11111001 ; 0BEB 2-7d: ***** * .byte %11110011 ; 0BEC 2-7d: **** ** .byte %11100111 ; 0BED 2-7d: *** *** .byte %10001111 ; 0BEE 2-7d: * **** .byte %11111111 ; 0BEF 2-7d: ******** .byte %11000011 ; 0BF0 2-7e: ** ** .byte %10011001 ; 0BF1 2-7e: * ** * .byte %11111001 ; 0BF2 2-7e: ***** * .byte %11110011 ; 0BF3 2-7e: **** ** .byte %11100111 ; 0BF4 2-7e: *** *** .byte %11111111 ; 0BF5 2-7e: ******** .byte %11100111 ; 0BF6 2-7e: *** *** .byte %11111111 ; 0BF7 2-7e: ******** .byte %11000011 ; 0BF8 2-7f: ** ** .byte %10011001 ; 0BF9 2-7f: * ** * .byte %11111001 ; 0BFA 2-7f: ***** * .byte %11110011 ; 0BFB 2-7f: **** ** .byte %11100111 ; 0BFC 2-7f: *** *** .byte %11111111 ; 0BFD 2-7f: ******** .byte %11100111 ; 0BFE 2-7f: *** *** .byte %11111111 ; 0BFF 2-7f: ******** .byte %11000011 ; 0C00 2-80: ** ** .byte %10011001 ; 0C01 2-80: * ** * .byte %10010001 ; 0C02 2-80: * * * .byte %10010001 ; 0C03 2-80: * * * .byte %10011111 ; 0C04 2-80: * ***** .byte %10011101 ; 0C05 2-80: * *** * .byte %11000011 ; 0C06 2-80: ** ** .byte %11111111 ; 0C07 2-80: ******** .byte %11000011 ; 0C08 2-81: ** ** .byte %10011001 ; 0C09 2-81: * ** * .byte %10010001 ; 0C0A 2-81: * * * .byte %10010001 ; 0C0B 2-81: * * * .byte %10011111 ; 0C0C 2-81: * ***** .byte %10011101 ; 0C0D 2-81: * *** * .byte %11000011 ; 0C0E 2-81: ** ** .byte %11111111 ; 0C0F 2-81: ******** .byte %11100111 ; 0C10 2-82: *** *** .byte %11000011 ; 0C11 2-82: ** ** .byte %10011001 ; 0C12 2-82: * ** * .byte %10000001 ; 0C13 2-82: * * .byte %10011001 ; 0C14 2-82: * ** * .byte %10011001 ; 0C15 2-82: * ** * .byte %10011001 ; 0C16 2-82: * ** * .byte %11111111 ; 0C17 2-82: ******** .byte %11100111 ; 0C18 2-83: *** *** .byte %11000011 ; 0C19 2-83: ** ** .byte %10011001 ; 0C1A 2-83: * ** * .byte %10000001 ; 0C1B 2-83: * * .byte %10011001 ; 0C1C 2-83: * ** * .byte %10011001 ; 0C1D 2-83: * ** * .byte %10011001 ; 0C1E 2-83: * ** * .byte %11111111 ; 0C1F 2-83: ******** .byte %10000011 ; 0C20 2-84: * ** .byte %10011001 ; 0C21 2-84: * ** * .byte %10011001 ; 0C22 2-84: * ** * .byte %10000011 ; 0C23 2-84: * ** .byte %10011001 ; 0C24 2-84: * ** * .byte %10011001 ; 0C25 2-84: * ** * .byte %10000011 ; 0C26 2-84: * ** .byte %11111111 ; 0C27 2-84: ******** .byte %10000011 ; 0C28 2-85: * ** .byte %10011001 ; 0C29 2-85: * ** * .byte %10011001 ; 0C2A 2-85: * ** * .byte %10000011 ; 0C2B 2-85: * ** .byte %10011001 ; 0C2C 2-85: * ** * .byte %10011001 ; 0C2D 2-85: * ** * .byte %10000011 ; 0C2E 2-85: * ** .byte %11111111 ; 0C2F 2-85: ******** .byte %11000011 ; 0C30 2-86: ** ** .byte %10011001 ; 0C31 2-86: * ** * .byte %10011111 ; 0C32 2-86: * ***** .byte %10011111 ; 0C33 2-86: * ***** .byte %10011111 ; 0C34 2-86: * ***** .byte %10011001 ; 0C35 2-86: * ** * .byte %11000011 ; 0C36 2-86: ** ** .byte %11111111 ; 0C37 2-86: ******** .byte %11000011 ; 0C38 2-87: ** ** .byte %10011001 ; 0C39 2-87: * ** * .byte %10011111 ; 0C3A 2-87: * ***** .byte %10011111 ; 0C3B 2-87: * ***** .byte %10011111 ; 0C3C 2-87: * ***** .byte %10011001 ; 0C3D 2-87: * ** * .byte %11000011 ; 0C3E 2-87: ** ** .byte %11111111 ; 0C3F 2-87: ******** .byte %10000111 ; 0C40 2-88: * *** .byte %10010011 ; 0C41 2-88: * * ** .byte %10011001 ; 0C42 2-88: * ** * .byte %10011001 ; 0C43 2-88: * ** * .byte %10011001 ; 0C44 2-88: * ** * .byte %10010011 ; 0C45 2-88: * * ** .byte %10000111 ; 0C46 2-88: * *** .byte %11111111 ; 0C47 2-88: ******** .byte %10000111 ; 0C48 2-89: * *** .byte %10010011 ; 0C49 2-89: * * ** .byte %10011001 ; 0C4A 2-89: * ** * .byte %10011001 ; 0C4B 2-89: * ** * .byte %10011001 ; 0C4C 2-89: * ** * .byte %10010011 ; 0C4D 2-89: * * ** .byte %10000111 ; 0C4E 2-89: * *** .byte %11111111 ; 0C4F 2-89: ******** .byte %10000001 ; 0C50 2-8a: * * .byte %10011111 ; 0C51 2-8a: * ***** .byte %10011111 ; 0C52 2-8a: * ***** .byte %10000111 ; 0C53 2-8a: * *** .byte %10011111 ; 0C54 2-8a: * ***** .byte %10011111 ; 0C55 2-8a: * ***** .byte %10000001 ; 0C56 2-8a: * * .byte %11111111 ; 0C57 2-8a: ******** .byte %10000001 ; 0C58 2-8b: * * .byte %10011111 ; 0C59 2-8b: * ***** .byte %10011111 ; 0C5A 2-8b: * ***** .byte %10000111 ; 0C5B 2-8b: * *** .byte %10011111 ; 0C5C 2-8b: * ***** .byte %10011111 ; 0C5D 2-8b: * ***** .byte %10000001 ; 0C5E 2-8b: * * .byte %11111111 ; 0C5F 2-8b: ******** .byte %10000001 ; 0C60 2-8c: * * .byte %10011111 ; 0C61 2-8c: * ***** .byte %10011111 ; 0C62 2-8c: * ***** .byte %10000111 ; 0C63 2-8c: * *** .byte %10011111 ; 0C64 2-8c: * ***** .byte %10011111 ; 0C65 2-8c: * ***** .byte %10011111 ; 0C66 2-8c: * ***** .byte %11111111 ; 0C67 2-8c: ******** .byte %10000001 ; 0C68 2-8d: * * .byte %10011111 ; 0C69 2-8d: * ***** .byte %10011111 ; 0C6A 2-8d: * ***** .byte %10000111 ; 0C6B 2-8d: * *** .byte %10011111 ; 0C6C 2-8d: * ***** .byte %10011111 ; 0C6D 2-8d: * ***** .byte %10011111 ; 0C6E 2-8d: * ***** .byte %11111111 ; 0C6F 2-8d: ******** .byte %11000011 ; 0C70 2-8e: ** ** .byte %10011001 ; 0C71 2-8e: * ** * .byte %10011111 ; 0C72 2-8e: * ***** .byte %10010001 ; 0C73 2-8e: * * * .byte %10011001 ; 0C74 2-8e: * ** * .byte %10011001 ; 0C75 2-8e: * ** * .byte %11000011 ; 0C76 2-8e: ** ** .byte %11111111 ; 0C77 2-8e: ******** .byte %11000011 ; 0C78 2-8f: ** ** .byte %10011001 ; 0C79 2-8f: * ** * .byte %10011111 ; 0C7A 2-8f: * ***** .byte %10010001 ; 0C7B 2-8f: * * * .byte %10011001 ; 0C7C 2-8f: * ** * .byte %10011001 ; 0C7D 2-8f: * ** * .byte %11000011 ; 0C7E 2-8f: ** ** .byte %11111111 ; 0C7F 2-8f: ******** .byte %10011001 ; 0C80 2-90: * ** * .byte %10011001 ; 0C81 2-90: * ** * .byte %10011001 ; 0C82 2-90: * ** * .byte %10000001 ; 0C83 2-90: * * .byte %10011001 ; 0C84 2-90: * ** * .byte %10011001 ; 0C85 2-90: * ** * .byte %10011001 ; 0C86 2-90: * ** * .byte %11111111 ; 0C87 2-90: ******** .byte %10011001 ; 0C88 2-91: * ** * .byte %10011001 ; 0C89 2-91: * ** * .byte %10011001 ; 0C8A 2-91: * ** * .byte %10000001 ; 0C8B 2-91: * * .byte %10011001 ; 0C8C 2-91: * ** * .byte %10011001 ; 0C8D 2-91: * ** * .byte %10011001 ; 0C8E 2-91: * ** * .byte %11111111 ; 0C8F 2-91: ******** .byte %11000011 ; 0C90 2-92: ** ** .byte %11100111 ; 0C91 2-92: *** *** .byte %11100111 ; 0C92 2-92: *** *** .byte %11100111 ; 0C93 2-92: *** *** .byte %11100111 ; 0C94 2-92: *** *** .byte %11100111 ; 0C95 2-92: *** *** .byte %11000011 ; 0C96 2-92: ** ** .byte %11111111 ; 0C97 2-92: ******** .byte %11000011 ; 0C98 2-93: ** ** .byte %11100111 ; 0C99 2-93: *** *** .byte %11100111 ; 0C9A 2-93: *** *** .byte %11100111 ; 0C9B 2-93: *** *** .byte %11100111 ; 0C9C 2-93: *** *** .byte %11100111 ; 0C9D 2-93: *** *** .byte %11000011 ; 0C9E 2-93: ** ** .byte %11111111 ; 0C9F 2-93: ******** .byte %11100001 ; 0CA0 2-94: *** * .byte %11110011 ; 0CA1 2-94: **** ** .byte %11110011 ; 0CA2 2-94: **** ** .byte %11110011 ; 0CA3 2-94: **** ** .byte %11110011 ; 0CA4 2-94: **** ** .byte %10010011 ; 0CA5 2-94: * * ** .byte %11000111 ; 0CA6 2-94: ** *** .byte %11111111 ; 0CA7 2-94: ******** .byte %11100001 ; 0CA8 2-95: *** * .byte %11110011 ; 0CA9 2-95: **** ** .byte %11110011 ; 0CAA 2-95: **** ** .byte %11110011 ; 0CAB 2-95: **** ** .byte %11110011 ; 0CAC 2-95: **** ** .byte %10010011 ; 0CAD 2-95: * * ** .byte %11000111 ; 0CAE 2-95: ** *** .byte %11111111 ; 0CAF 2-95: ******** .byte %10011001 ; 0CB0 2-96: * ** * .byte %10010011 ; 0CB1 2-96: * * ** .byte %10000111 ; 0CB2 2-96: * *** .byte %10001111 ; 0CB3 2-96: * **** .byte %10000111 ; 0CB4 2-96: * *** .byte %10010011 ; 0CB5 2-96: * * ** .byte %10011001 ; 0CB6 2-96: * ** * .byte %11111111 ; 0CB7 2-96: ******** .byte %10011001 ; 0CB8 2-97: * ** * .byte %10010011 ; 0CB9 2-97: * * ** .byte %10000111 ; 0CBA 2-97: * *** .byte %10001111 ; 0CBB 2-97: * **** .byte %10000111 ; 0CBC 2-97: * *** .byte %10010011 ; 0CBD 2-97: * * ** .byte %10011001 ; 0CBE 2-97: * ** * .byte %11111111 ; 0CBF 2-97: ******** .byte %10011111 ; 0CC0 2-98: * ***** .byte %10011111 ; 0CC1 2-98: * ***** .byte %10011111 ; 0CC2 2-98: * ***** .byte %10011111 ; 0CC3 2-98: * ***** .byte %10011111 ; 0CC4 2-98: * ***** .byte %10011111 ; 0CC5 2-98: * ***** .byte %10000001 ; 0CC6 2-98: * * .byte %11111111 ; 0CC7 2-98: ******** .byte %10011111 ; 0CC8 2-99: * ***** .byte %10011111 ; 0CC9 2-99: * ***** .byte %10011111 ; 0CCA 2-99: * ***** .byte %10011111 ; 0CCB 2-99: * ***** .byte %10011111 ; 0CCC 2-99: * ***** .byte %10011111 ; 0CCD 2-99: * ***** .byte %10000001 ; 0CCE 2-99: * * .byte %11111111 ; 0CCF 2-99: ******** .byte %10011100 ; 0CD0 2-9a: * *** .byte %10001000 ; 0CD1 2-9a: * * .byte %10000000 ; 0CD2 2-9a: * .byte %10010100 ; 0CD3 2-9a: * * * .byte %10011100 ; 0CD4 2-9a: * *** .byte %10011100 ; 0CD5 2-9a: * *** .byte %10011100 ; 0CD6 2-9a: * *** .byte %11111111 ; 0CD7 2-9a: ******** .byte %10011100 ; 0CD8 2-9b: * *** .byte %10001000 ; 0CD9 2-9b: * * .byte %10000000 ; 0CDA 2-9b: * .byte %10010100 ; 0CDB 2-9b: * * * .byte %10011100 ; 0CDC 2-9b: * *** .byte %10011100 ; 0CDD 2-9b: * *** .byte %10011100 ; 0CDE 2-9b: * *** .byte %11111111 ; 0CDF 2-9b: ******** .byte %10011001 ; 0CE0 2-9c: * ** * .byte %10001001 ; 0CE1 2-9c: * * * .byte %10000001 ; 0CE2 2-9c: * * .byte %10000001 ; 0CE3 2-9c: * * .byte %10010001 ; 0CE4 2-9c: * * * .byte %10011001 ; 0CE5 2-9c: * ** * .byte %10011001 ; 0CE6 2-9c: * ** * .byte %11111111 ; 0CE7 2-9c: ******** .byte %10011001 ; 0CE8 2-9d: * ** * .byte %10001001 ; 0CE9 2-9d: * * * .byte %10000001 ; 0CEA 2-9d: * * .byte %10000001 ; 0CEB 2-9d: * * .byte %10010001 ; 0CEC 2-9d: * * * .byte %10011001 ; 0CED 2-9d: * ** * .byte %10011001 ; 0CEE 2-9d: * ** * .byte %11111111 ; 0CEF 2-9d: ******** .byte %11000011 ; 0CF0 2-9e: ** ** .byte %10011001 ; 0CF1 2-9e: * ** * .byte %10011001 ; 0CF2 2-9e: * ** * .byte %10011001 ; 0CF3 2-9e: * ** * .byte %10011001 ; 0CF4 2-9e: * ** * .byte %10011001 ; 0CF5 2-9e: * ** * .byte %11000011 ; 0CF6 2-9e: ** ** .byte %11111111 ; 0CF7 2-9e: ******** .byte %11000011 ; 0CF8 2-9f: ** ** .byte %10011001 ; 0CF9 2-9f: * ** * .byte %10011001 ; 0CFA 2-9f: * ** * .byte %10011001 ; 0CFB 2-9f: * ** * .byte %10011001 ; 0CFC 2-9f: * ** * .byte %10011001 ; 0CFD 2-9f: * ** * .byte %11000011 ; 0CFE 2-9f: ** ** .byte %11111111 ; 0CFF 2-9f: ******** .byte %10000011 ; 0D00 2-a0: * ** .byte %10011001 ; 0D01 2-a0: * ** * .byte %10011001 ; 0D02 2-a0: * ** * .byte %10000011 ; 0D03 2-a0: * ** .byte %10011111 ; 0D04 2-a0: * ***** .byte %10011111 ; 0D05 2-a0: * ***** .byte %10011111 ; 0D06 2-a0: * ***** .byte %11111111 ; 0D07 2-a0: ******** .byte %10000011 ; 0D08 2-a1: * ** .byte %10011001 ; 0D09 2-a1: * ** * .byte %10011001 ; 0D0A 2-a1: * ** * .byte %10000011 ; 0D0B 2-a1: * ** .byte %10011111 ; 0D0C 2-a1: * ***** .byte %10011111 ; 0D0D 2-a1: * ***** .byte %10011111 ; 0D0E 2-a1: * ***** .byte %11111111 ; 0D0F 2-a1: ******** .byte %11000011 ; 0D10 2-a2: ** ** .byte %10011001 ; 0D11 2-a2: * ** * .byte %10011001 ; 0D12 2-a2: * ** * .byte %10011001 ; 0D13 2-a2: * ** * .byte %10011001 ; 0D14 2-a2: * ** * .byte %11000011 ; 0D15 2-a2: ** ** .byte %11110001 ; 0D16 2-a2: **** * .byte %11111111 ; 0D17 2-a2: ******** .byte %11000011 ; 0D18 2-a3: ** ** .byte %10011001 ; 0D19 2-a3: * ** * .byte %10011001 ; 0D1A 2-a3: * ** * .byte %10011001 ; 0D1B 2-a3: * ** * .byte %10011001 ; 0D1C 2-a3: * ** * .byte %11000011 ; 0D1D 2-a3: ** ** .byte %11110001 ; 0D1E 2-a3: **** * .byte %11111111 ; 0D1F 2-a3: ******** .byte %10000011 ; 0D20 2-a4: * ** .byte %10011001 ; 0D21 2-a4: * ** * .byte %10011001 ; 0D22 2-a4: * ** * .byte %10000011 ; 0D23 2-a4: * ** .byte %10000111 ; 0D24 2-a4: * *** .byte %10010011 ; 0D25 2-a4: * * ** .byte %10011001 ; 0D26 2-a4: * ** * .byte %11111111 ; 0D27 2-a4: ******** .byte %10000011 ; 0D28 2-a5: * ** .byte %10011001 ; 0D29 2-a5: * ** * .byte %10011001 ; 0D2A 2-a5: * ** * .byte %10000011 ; 0D2B 2-a5: * ** .byte %10000111 ; 0D2C 2-a5: * *** .byte %10010011 ; 0D2D 2-a5: * * ** .byte %10011001 ; 0D2E 2-a5: * ** * .byte %11111111 ; 0D2F 2-a5: ******** .byte %11000011 ; 0D30 2-a6: ** ** .byte %10011001 ; 0D31 2-a6: * ** * .byte %10011111 ; 0D32 2-a6: * ***** .byte %11000011 ; 0D33 2-a6: ** ** .byte %11111001 ; 0D34 2-a6: ***** * .byte %10011001 ; 0D35 2-a6: * ** * .byte %11000011 ; 0D36 2-a6: ** ** .byte %11111111 ; 0D37 2-a6: ******** .byte %11000011 ; 0D38 2-a7: ** ** .byte %10011001 ; 0D39 2-a7: * ** * .byte %10011111 ; 0D3A 2-a7: * ***** .byte %11000011 ; 0D3B 2-a7: ** ** .byte %11111001 ; 0D3C 2-a7: ***** * .byte %10011001 ; 0D3D 2-a7: * ** * .byte %11000011 ; 0D3E 2-a7: ** ** .byte %11111111 ; 0D3F 2-a7: ******** .byte %10000001 ; 0D40 2-a8: * * .byte %11100111 ; 0D41 2-a8: *** *** .byte %11100111 ; 0D42 2-a8: *** *** .byte %11100111 ; 0D43 2-a8: *** *** .byte %11100111 ; 0D44 2-a8: *** *** .byte %11100111 ; 0D45 2-a8: *** *** .byte %11100111 ; 0D46 2-a8: *** *** .byte %11111111 ; 0D47 2-a8: ******** .byte %10000001 ; 0D48 2-a9: * * .byte %11100111 ; 0D49 2-a9: *** *** .byte %11100111 ; 0D4A 2-a9: *** *** .byte %11100111 ; 0D4B 2-a9: *** *** .byte %11100111 ; 0D4C 2-a9: *** *** .byte %11100111 ; 0D4D 2-a9: *** *** .byte %11100111 ; 0D4E 2-a9: *** *** .byte %11111111 ; 0D4F 2-a9: ******** .byte %10011001 ; 0D50 2-aa: * ** * .byte %10011001 ; 0D51 2-aa: * ** * .byte %10011001 ; 0D52 2-aa: * ** * .byte %10011001 ; 0D53 2-aa: * ** * .byte %10011001 ; 0D54 2-aa: * ** * .byte %10011001 ; 0D55 2-aa: * ** * .byte %11000011 ; 0D56 2-aa: ** ** .byte %11111111 ; 0D57 2-aa: ******** .byte %10011001 ; 0D58 2-ab: * ** * .byte %10011001 ; 0D59 2-ab: * ** * .byte %10011001 ; 0D5A 2-ab: * ** * .byte %10011001 ; 0D5B 2-ab: * ** * .byte %10011001 ; 0D5C 2-ab: * ** * .byte %10011001 ; 0D5D 2-ab: * ** * .byte %11000011 ; 0D5E 2-ab: ** ** .byte %11111111 ; 0D5F 2-ab: ******** .byte %10011001 ; 0D60 2-ac: * ** * .byte %10011001 ; 0D61 2-ac: * ** * .byte %10011001 ; 0D62 2-ac: * ** * .byte %10011001 ; 0D63 2-ac: * ** * .byte %10011001 ; 0D64 2-ac: * ** * .byte %11000011 ; 0D65 2-ac: ** ** .byte %11100111 ; 0D66 2-ac: *** *** .byte %11111111 ; 0D67 2-ac: ******** .byte %10011001 ; 0D68 2-ad: * ** * .byte %10011001 ; 0D69 2-ad: * ** * .byte %10011001 ; 0D6A 2-ad: * ** * .byte %10011001 ; 0D6B 2-ad: * ** * .byte %10011001 ; 0D6C 2-ad: * ** * .byte %11000011 ; 0D6D 2-ad: ** ** .byte %11100111 ; 0D6E 2-ad: *** *** .byte %11111111 ; 0D6F 2-ad: ******** .byte %10011100 ; 0D70 2-ae: * *** .byte %10011100 ; 0D71 2-ae: * *** .byte %10011100 ; 0D72 2-ae: * *** .byte %10010100 ; 0D73 2-ae: * * * .byte %10000000 ; 0D74 2-ae: * .byte %10001000 ; 0D75 2-ae: * * .byte %10011100 ; 0D76 2-ae: * *** .byte %11111111 ; 0D77 2-ae: ******** .byte %10011100 ; 0D78 2-af: * *** .byte %10011100 ; 0D79 2-af: * *** .byte %10011100 ; 0D7A 2-af: * *** .byte %10010100 ; 0D7B 2-af: * * * .byte %10000000 ; 0D7C 2-af: * .byte %10001000 ; 0D7D 2-af: * * .byte %10011100 ; 0D7E 2-af: * *** .byte %11111111 ; 0D7F 2-af: ******** .byte %10011001 ; 0D80 2-b0: * ** * .byte %10011001 ; 0D81 2-b0: * ** * .byte %11000011 ; 0D82 2-b0: ** ** .byte %11100111 ; 0D83 2-b0: *** *** .byte %11000011 ; 0D84 2-b0: ** ** .byte %10011001 ; 0D85 2-b0: * ** * .byte %10011001 ; 0D86 2-b0: * ** * .byte %11111111 ; 0D87 2-b0: ******** .byte %10011001 ; 0D88 2-b1: * ** * .byte %10011001 ; 0D89 2-b1: * ** * .byte %11000011 ; 0D8A 2-b1: ** ** .byte %11100111 ; 0D8B 2-b1: *** *** .byte %11000011 ; 0D8C 2-b1: ** ** .byte %10011001 ; 0D8D 2-b1: * ** * .byte %10011001 ; 0D8E 2-b1: * ** * .byte %11111111 ; 0D8F 2-b1: ******** .byte %10011001 ; 0D90 2-b2: * ** * .byte %10011001 ; 0D91 2-b2: * ** * .byte %10011001 ; 0D92 2-b2: * ** * .byte %11000011 ; 0D93 2-b2: ** ** .byte %11100111 ; 0D94 2-b2: *** *** .byte %11100111 ; 0D95 2-b2: *** *** .byte %11100111 ; 0D96 2-b2: *** *** .byte %11111111 ; 0D97 2-b2: ******** .byte %10011001 ; 0D98 2-b3: * ** * .byte %10011001 ; 0D99 2-b3: * ** * .byte %10011001 ; 0D9A 2-b3: * ** * .byte %11000011 ; 0D9B 2-b3: ** ** .byte %11100111 ; 0D9C 2-b3: *** *** .byte %11100111 ; 0D9D 2-b3: *** *** .byte %11100111 ; 0D9E 2-b3: *** *** .byte %11111111 ; 0D9F 2-b3: ******** .byte %10000001 ; 0DA0 2-b4: * * .byte %11111001 ; 0DA1 2-b4: ***** * .byte %11110011 ; 0DA2 2-b4: **** ** .byte %11100111 ; 0DA3 2-b4: *** *** .byte %11001111 ; 0DA4 2-b4: ** **** .byte %10011111 ; 0DA5 2-b4: * ***** .byte %10000001 ; 0DA6 2-b4: * * .byte %11111111 ; 0DA7 2-b4: ******** .byte %10000001 ; 0DA8 2-b5: * * .byte %11111001 ; 0DA9 2-b5: ***** * .byte %11110011 ; 0DAA 2-b5: **** ** .byte %11100111 ; 0DAB 2-b5: *** *** .byte %11001111 ; 0DAC 2-b5: ** **** .byte %10011111 ; 0DAD 2-b5: * ***** .byte %10000001 ; 0DAE 2-b5: * * .byte %11111111 ; 0DAF 2-b5: ******** .byte %11000011 ; 0DB0 2-b6: ** ** .byte %11001111 ; 0DB1 2-b6: ** **** .byte %11001111 ; 0DB2 2-b6: ** **** .byte %11001111 ; 0DB3 2-b6: ** **** .byte %11001111 ; 0DB4 2-b6: ** **** .byte %11001111 ; 0DB5 2-b6: ** **** .byte %11000011 ; 0DB6 2-b6: ** ** .byte %11111111 ; 0DB7 2-b6: ******** .byte %11000011 ; 0DB8 2-b7: ** ** .byte %11001111 ; 0DB9 2-b7: ** **** .byte %11001111 ; 0DBA 2-b7: ** **** .byte %11001111 ; 0DBB 2-b7: ** **** .byte %11001111 ; 0DBC 2-b7: ** **** .byte %11001111 ; 0DBD 2-b7: ** **** .byte %11000011 ; 0DBE 2-b7: ** ** .byte %11111111 ; 0DBF 2-b7: ******** .byte %10011111 ; 0DC0 2-b8: * ***** .byte %11001111 ; 0DC1 2-b8: ** **** .byte %11100111 ; 0DC2 2-b8: *** *** .byte %11110011 ; 0DC3 2-b8: **** ** .byte %11111001 ; 0DC4 2-b8: ***** * .byte %11111100 ; 0DC5 2-b8: ****** .byte %11111111 ; 0DC6 2-b8: ******** .byte %11111111 ; 0DC7 2-b8: ******** .byte %10011111 ; 0DC8 2-b9: * ***** .byte %11001111 ; 0DC9 2-b9: ** **** .byte %11100111 ; 0DCA 2-b9: *** *** .byte %11110011 ; 0DCB 2-b9: **** ** .byte %11111001 ; 0DCC 2-b9: ***** * .byte %11111100 ; 0DCD 2-b9: ****** .byte %11111111 ; 0DCE 2-b9: ******** .byte %11111111 ; 0DCF 2-b9: ******** .byte %11000011 ; 0DD0 2-ba: ** ** .byte %11110011 ; 0DD1 2-ba: **** ** .byte %11110011 ; 0DD2 2-ba: **** ** .byte %11110011 ; 0DD3 2-ba: **** ** .byte %11110011 ; 0DD4 2-ba: **** ** .byte %11110011 ; 0DD5 2-ba: **** ** .byte %11000011 ; 0DD6 2-ba: ** ** .byte %11111111 ; 0DD7 2-ba: ******** .byte %11000011 ; 0DD8 2-bb: ** ** .byte %11110011 ; 0DD9 2-bb: **** ** .byte %11110011 ; 0DDA 2-bb: **** ** .byte %11110011 ; 0DDB 2-bb: **** ** .byte %11110011 ; 0DDC 2-bb: **** ** .byte %11110011 ; 0DDD 2-bb: **** ** .byte %11000011 ; 0DDE 2-bb: ** ** .byte %11111111 ; 0DDF 2-bb: ******** .byte %11111111 ; 0DE0 2-bc: ******** .byte %11100111 ; 0DE1 2-bc: *** *** .byte %11000011 ; 0DE2 2-bc: ** ** .byte %10011001 ; 0DE3 2-bc: * ** * .byte %11111111 ; 0DE4 2-bc: ******** .byte %11111111 ; 0DE5 2-bc: ******** .byte %11111111 ; 0DE6 2-bc: ******** .byte %11111111 ; 0DE7 2-bc: ******** .byte %11111111 ; 0DE8 2-bd: ******** .byte %11100111 ; 0DE9 2-bd: *** *** .byte %11000011 ; 0DEA 2-bd: ** ** .byte %10011001 ; 0DEB 2-bd: * ** * .byte %11111111 ; 0DEC 2-bd: ******** .byte %11111111 ; 0DED 2-bd: ******** .byte %11111111 ; 0DEE 2-bd: ******** .byte %11111111 ; 0DEF 2-bd: ******** .byte %11111111 ; 0DF0 2-be: ******** .byte %11111111 ; 0DF1 2-be: ******** .byte %11111111 ; 0DF2 2-be: ******** .byte %11111111 ; 0DF3 2-be: ******** .byte %11111111 ; 0DF4 2-be: ******** .byte %11111111 ; 0DF5 2-be: ******** .byte %10000000 ; 0DF6 2-be: * .byte %11111111 ; 0DF7 2-be: ******** .byte %11111111 ; 0DF8 2-bf: ******** .byte %11111111 ; 0DF9 2-bf: ******** .byte %11111111 ; 0DFA 2-bf: ******** .byte %11111111 ; 0DFB 2-bf: ******** .byte %11111111 ; 0DFC 2-bf: ******** .byte %11111111 ; 0DFD 2-bf: ******** .byte %10000000 ; 0DFE 2-bf: * .byte %11111111 ; 0DFF 2-bf: ******** .byte %11100111 ; 0E00 2-c0: *** *** .byte %11100111 ; 0E01 2-c0: *** *** .byte %11100111 ; 0E02 2-c0: *** *** .byte %11111111 ; 0E03 2-c0: ******** .byte %11111111 ; 0E04 2-c0: ******** .byte %11111111 ; 0E05 2-c0: ******** .byte %11111111 ; 0E06 2-c0: ******** .byte %11111111 ; 0E07 2-c0: ******** .byte %11100111 ; 0E08 2-c1: *** *** .byte %11100111 ; 0E09 2-c1: *** *** .byte %11100111 ; 0E0A 2-c1: *** *** .byte %11111111 ; 0E0B 2-c1: ******** .byte %11111111 ; 0E0C 2-c1: ******** .byte %11111111 ; 0E0D 2-c1: ******** .byte %11111111 ; 0E0E 2-c1: ******** .byte %11111111 ; 0E0F 2-c1: ******** .byte %11111111 ; 0E10 2-c2: ******** .byte %11111111 ; 0E11 2-c2: ******** .byte %11000011 ; 0E12 2-c2: ** ** .byte %11111001 ; 0E13 2-c2: ***** * .byte %11000001 ; 0E14 2-c2: ** * .byte %10011001 ; 0E15 2-c2: * ** * .byte %11000001 ; 0E16 2-c2: ** * .byte %11111111 ; 0E17 2-c2: ******** .byte %11111111 ; 0E18 2-c3: ******** .byte %11111111 ; 0E19 2-c3: ******** .byte %11000011 ; 0E1A 2-c3: ** ** .byte %11111001 ; 0E1B 2-c3: ***** * .byte %11000001 ; 0E1C 2-c3: ** * .byte %10011001 ; 0E1D 2-c3: * ** * .byte %11000001 ; 0E1E 2-c3: ** * .byte %11111111 ; 0E1F 2-c3: ******** .byte %11111111 ; 0E20 2-c4: ******** .byte %10011111 ; 0E21 2-c4: * ***** .byte %10011111 ; 0E22 2-c4: * ***** .byte %10000011 ; 0E23 2-c4: * ** .byte %10011001 ; 0E24 2-c4: * ** * .byte %10011001 ; 0E25 2-c4: * ** * .byte %10000011 ; 0E26 2-c4: * ** .byte %11111111 ; 0E27 2-c4: ******** .byte %11111111 ; 0E28 2-c5: ******** .byte %10011111 ; 0E29 2-c5: * ***** .byte %10011111 ; 0E2A 2-c5: * ***** .byte %10000011 ; 0E2B 2-c5: * ** .byte %10011001 ; 0E2C 2-c5: * ** * .byte %10011001 ; 0E2D 2-c5: * ** * .byte %10000011 ; 0E2E 2-c5: * ** .byte %11111111 ; 0E2F 2-c5: ******** .byte %11111111 ; 0E30 2-c6: ******** .byte %11111111 ; 0E31 2-c6: ******** .byte %11000011 ; 0E32 2-c6: ** ** .byte %10011111 ; 0E33 2-c6: * ***** .byte %10011111 ; 0E34 2-c6: * ***** .byte %10011111 ; 0E35 2-c6: * ***** .byte %11000011 ; 0E36 2-c6: ** ** .byte %11111111 ; 0E37 2-c6: ******** .byte %11111111 ; 0E38 2-c7: ******** .byte %11111111 ; 0E39 2-c7: ******** .byte %11000011 ; 0E3A 2-c7: ** ** .byte %10011111 ; 0E3B 2-c7: * ***** .byte %10011111 ; 0E3C 2-c7: * ***** .byte %10011111 ; 0E3D 2-c7: * ***** .byte %11000011 ; 0E3E 2-c7: ** ** .byte %11111111 ; 0E3F 2-c7: ******** .byte %11111111 ; 0E40 2-c8: ******** .byte %11111001 ; 0E41 2-c8: ***** * .byte %11111001 ; 0E42 2-c8: ***** * .byte %11000001 ; 0E43 2-c8: ** * .byte %10011001 ; 0E44 2-c8: * ** * .byte %10011001 ; 0E45 2-c8: * ** * .byte %11000001 ; 0E46 2-c8: ** * .byte %11111111 ; 0E47 2-c8: ******** .byte %11111111 ; 0E48 2-c9: ******** .byte %11111001 ; 0E49 2-c9: ***** * .byte %11111001 ; 0E4A 2-c9: ***** * .byte %11000001 ; 0E4B 2-c9: ** * .byte %10011001 ; 0E4C 2-c9: * ** * .byte %10011001 ; 0E4D 2-c9: * ** * .byte %11000001 ; 0E4E 2-c9: ** * .byte %11111111 ; 0E4F 2-c9: ******** .byte %11111111 ; 0E50 2-ca: ******** .byte %11111111 ; 0E51 2-ca: ******** .byte %11000011 ; 0E52 2-ca: ** ** .byte %10011001 ; 0E53 2-ca: * ** * .byte %10000001 ; 0E54 2-ca: * * .byte %10011111 ; 0E55 2-ca: * ***** .byte %11000011 ; 0E56 2-ca: ** ** .byte %11111111 ; 0E57 2-ca: ******** .byte %11111111 ; 0E58 2-cb: ******** .byte %11111111 ; 0E59 2-cb: ******** .byte %11000011 ; 0E5A 2-cb: ** ** .byte %10011001 ; 0E5B 2-cb: * ** * .byte %10000001 ; 0E5C 2-cb: * * .byte %10011111 ; 0E5D 2-cb: * ***** .byte %11000011 ; 0E5E 2-cb: ** ** .byte %11111111 ; 0E5F 2-cb: ******** .byte %11111111 ; 0E60 2-cc: ******** .byte %11110001 ; 0E61 2-cc: **** * .byte %11100111 ; 0E62 2-cc: *** *** .byte %11000001 ; 0E63 2-cc: ** * .byte %11100111 ; 0E64 2-cc: *** *** .byte %11100111 ; 0E65 2-cc: *** *** .byte %11100111 ; 0E66 2-cc: *** *** .byte %11111111 ; 0E67 2-cc: ******** .byte %11111111 ; 0E68 2-cd: ******** .byte %11110001 ; 0E69 2-cd: **** * .byte %11100111 ; 0E6A 2-cd: *** *** .byte %11000001 ; 0E6B 2-cd: ** * .byte %11100111 ; 0E6C 2-cd: *** *** .byte %11100111 ; 0E6D 2-cd: *** *** .byte %11100111 ; 0E6E 2-cd: *** *** .byte %11111111 ; 0E6F 2-cd: ******** .byte %11111111 ; 0E70 2-ce: ******** .byte %11111111 ; 0E71 2-ce: ******** .byte %11000001 ; 0E72 2-ce: ** * .byte %10011001 ; 0E73 2-ce: * ** * .byte %10011001 ; 0E74 2-ce: * ** * .byte %11000001 ; 0E75 2-ce: ** * .byte %11111001 ; 0E76 2-ce: ***** * .byte %10000011 ; 0E77 2-ce: * ** .byte %11111111 ; 0E78 2-cf: ******** .byte %11111111 ; 0E79 2-cf: ******** .byte %11000001 ; 0E7A 2-cf: ** * .byte %10011001 ; 0E7B 2-cf: * ** * .byte %10011001 ; 0E7C 2-cf: * ** * .byte %11000001 ; 0E7D 2-cf: ** * .byte %11111001 ; 0E7E 2-cf: ***** * .byte %10000011 ; 0E7F 2-cf: * ** .byte %11111111 ; 0E80 2-d0: ******** .byte %10011111 ; 0E81 2-d0: * ***** .byte %10011111 ; 0E82 2-d0: * ***** .byte %10000011 ; 0E83 2-d0: * ** .byte %10011001 ; 0E84 2-d0: * ** * .byte %10011001 ; 0E85 2-d0: * ** * .byte %10011001 ; 0E86 2-d0: * ** * .byte %11111111 ; 0E87 2-d0: ******** .byte %11111111 ; 0E88 2-d1: ******** .byte %10011111 ; 0E89 2-d1: * ***** .byte %10011111 ; 0E8A 2-d1: * ***** .byte %10000011 ; 0E8B 2-d1: * ** .byte %10011001 ; 0E8C 2-d1: * ** * .byte %10011001 ; 0E8D 2-d1: * ** * .byte %10011001 ; 0E8E 2-d1: * ** * .byte %11111111 ; 0E8F 2-d1: ******** .byte %11111111 ; 0E90 2-d2: ******** .byte %11100111 ; 0E91 2-d2: *** *** .byte %11111111 ; 0E92 2-d2: ******** .byte %11000111 ; 0E93 2-d2: ** *** .byte %11100111 ; 0E94 2-d2: *** *** .byte %11100111 ; 0E95 2-d2: *** *** .byte %11000011 ; 0E96 2-d2: ** ** .byte %11111111 ; 0E97 2-d2: ******** .byte %11111111 ; 0E98 2-d3: ******** .byte %11100111 ; 0E99 2-d3: *** *** .byte %11111111 ; 0E9A 2-d3: ******** .byte %11000111 ; 0E9B 2-d3: ** *** .byte %11100111 ; 0E9C 2-d3: *** *** .byte %11100111 ; 0E9D 2-d3: *** *** .byte %11000011 ; 0E9E 2-d3: ** ** .byte %11111111 ; 0E9F 2-d3: ******** .byte %11111111 ; 0EA0 2-d4: ******** .byte %11111001 ; 0EA1 2-d4: ***** * .byte %11111111 ; 0EA2 2-d4: ******** .byte %11111001 ; 0EA3 2-d4: ***** * .byte %11111001 ; 0EA4 2-d4: ***** * .byte %11111001 ; 0EA5 2-d4: ***** * .byte %11111001 ; 0EA6 2-d4: ***** * .byte %11000011 ; 0EA7 2-d4: ** ** .byte %11111111 ; 0EA8 2-d5: ******** .byte %11111001 ; 0EA9 2-d5: ***** * .byte %11111111 ; 0EAA 2-d5: ******** .byte %11111001 ; 0EAB 2-d5: ***** * .byte %11111001 ; 0EAC 2-d5: ***** * .byte %11111001 ; 0EAD 2-d5: ***** * .byte %11111001 ; 0EAE 2-d5: ***** * .byte %11000011 ; 0EAF 2-d5: ** ** .byte %11111111 ; 0EB0 2-d6: ******** .byte %10011111 ; 0EB1 2-d6: * ***** .byte %10011111 ; 0EB2 2-d6: * ***** .byte %10010011 ; 0EB3 2-d6: * * ** .byte %10000111 ; 0EB4 2-d6: * *** .byte %10010011 ; 0EB5 2-d6: * * ** .byte %10011001 ; 0EB6 2-d6: * ** * .byte %11111111 ; 0EB7 2-d6: ******** .byte %11111111 ; 0EB8 2-d7: ******** .byte %10011111 ; 0EB9 2-d7: * ***** .byte %10011111 ; 0EBA 2-d7: * ***** .byte %10010011 ; 0EBB 2-d7: * * ** .byte %10000111 ; 0EBC 2-d7: * *** .byte %10010011 ; 0EBD 2-d7: * * ** .byte %10011001 ; 0EBE 2-d7: * ** * .byte %11111111 ; 0EBF 2-d7: ******** .byte %11111111 ; 0EC0 2-d8: ******** .byte %11000111 ; 0EC1 2-d8: ** *** .byte %11100111 ; 0EC2 2-d8: *** *** .byte %11100111 ; 0EC3 2-d8: *** *** .byte %11100111 ; 0EC4 2-d8: *** *** .byte %11100111 ; 0EC5 2-d8: *** *** .byte %11000011 ; 0EC6 2-d8: ** ** .byte %11111111 ; 0EC7 2-d8: ******** .byte %11111111 ; 0EC8 2-d9: ******** .byte %11000111 ; 0EC9 2-d9: ** *** .byte %11100111 ; 0ECA 2-d9: *** *** .byte %11100111 ; 0ECB 2-d9: *** *** .byte %11100111 ; 0ECC 2-d9: *** *** .byte %11100111 ; 0ECD 2-d9: *** *** .byte %11000011 ; 0ECE 2-d9: ** ** .byte %11111111 ; 0ECF 2-d9: ******** .byte %11111111 ; 0ED0 2-da: ******** .byte %11111111 ; 0ED1 2-da: ******** .byte %10011001 ; 0ED2 2-da: * ** * .byte %10000000 ; 0ED3 2-da: * .byte %10000000 ; 0ED4 2-da: * .byte %10010100 ; 0ED5 2-da: * * * .byte %10011100 ; 0ED6 2-da: * *** .byte %11111111 ; 0ED7 2-da: ******** .byte %11111111 ; 0ED8 2-db: ******** .byte %11111111 ; 0ED9 2-db: ******** .byte %10011001 ; 0EDA 2-db: * ** * .byte %10000000 ; 0EDB 2-db: * .byte %10000000 ; 0EDC 2-db: * .byte %10010100 ; 0EDD 2-db: * * * .byte %10011100 ; 0EDE 2-db: * *** .byte %11111111 ; 0EDF 2-db: ******** .byte %11111111 ; 0EE0 2-dc: ******** .byte %11111111 ; 0EE1 2-dc: ******** .byte %10000011 ; 0EE2 2-dc: * ** .byte %10011001 ; 0EE3 2-dc: * ** * .byte %10011001 ; 0EE4 2-dc: * ** * .byte %10011001 ; 0EE5 2-dc: * ** * .byte %10011001 ; 0EE6 2-dc: * ** * .byte %11111111 ; 0EE7 2-dc: ******** .byte %11111111 ; 0EE8 2-dd: ******** .byte %11111111 ; 0EE9 2-dd: ******** .byte %10000011 ; 0EEA 2-dd: * ** .byte %10011001 ; 0EEB 2-dd: * ** * .byte %10011001 ; 0EEC 2-dd: * ** * .byte %10011001 ; 0EED 2-dd: * ** * .byte %10011001 ; 0EEE 2-dd: * ** * .byte %11111111 ; 0EEF 2-dd: ******** .byte %11111111 ; 0EF0 2-de: ******** .byte %11111111 ; 0EF1 2-de: ******** .byte %11000011 ; 0EF2 2-de: ** ** .byte %10011001 ; 0EF3 2-de: * ** * .byte %10011001 ; 0EF4 2-de: * ** * .byte %10011001 ; 0EF5 2-de: * ** * .byte %11000011 ; 0EF6 2-de: ** ** .byte %11111111 ; 0EF7 2-de: ******** .byte %11111111 ; 0EF8 2-df: ******** .byte %11111111 ; 0EF9 2-df: ******** .byte %11000011 ; 0EFA 2-df: ** ** .byte %10011001 ; 0EFB 2-df: * ** * .byte %10011001 ; 0EFC 2-df: * ** * .byte %10011001 ; 0EFD 2-df: * ** * .byte %11000011 ; 0EFE 2-df: ** ** .byte %11111111 ; 0EFF 2-df: ******** .byte %11111111 ; 0F00 2-e0: ******** .byte %11111111 ; 0F01 2-e0: ******** .byte %10000011 ; 0F02 2-e0: * ** .byte %10011001 ; 0F03 2-e0: * ** * .byte %10011001 ; 0F04 2-e0: * ** * .byte %10000011 ; 0F05 2-e0: * ** .byte %10011111 ; 0F06 2-e0: * ***** .byte %10011111 ; 0F07 2-e0: * ***** .byte %11111111 ; 0F08 2-e1: ******** .byte %11111111 ; 0F09 2-e1: ******** .byte %10000011 ; 0F0A 2-e1: * ** .byte %10011001 ; 0F0B 2-e1: * ** * .byte %10011001 ; 0F0C 2-e1: * ** * .byte %10000011 ; 0F0D 2-e1: * ** .byte %10011111 ; 0F0E 2-e1: * ***** .byte %10011111 ; 0F0F 2-e1: * ***** .byte %11111111 ; 0F10 2-e2: ******** .byte %11111111 ; 0F11 2-e2: ******** .byte %11000001 ; 0F12 2-e2: ** * .byte %10011001 ; 0F13 2-e2: * ** * .byte %10011001 ; 0F14 2-e2: * ** * .byte %11000001 ; 0F15 2-e2: ** * .byte %11111001 ; 0F16 2-e2: ***** * .byte %11111001 ; 0F17 2-e2: ***** * .byte %11111111 ; 0F18 2-e3: ******** .byte %11111111 ; 0F19 2-e3: ******** .byte %11000001 ; 0F1A 2-e3: ** * .byte %10011001 ; 0F1B 2-e3: * ** * .byte %10011001 ; 0F1C 2-e3: * ** * .byte %11000001 ; 0F1D 2-e3: ** * .byte %11111001 ; 0F1E 2-e3: ***** * .byte %11111001 ; 0F1F 2-e3: ***** * .byte %11111111 ; 0F20 2-e4: ******** .byte %11111111 ; 0F21 2-e4: ******** .byte %10000011 ; 0F22 2-e4: * ** .byte %10011001 ; 0F23 2-e4: * ** * .byte %10011111 ; 0F24 2-e4: * ***** .byte %10011111 ; 0F25 2-e4: * ***** .byte %10011111 ; 0F26 2-e4: * ***** .byte %11111111 ; 0F27 2-e4: ******** .byte %11111111 ; 0F28 2-e5: ******** .byte %11111111 ; 0F29 2-e5: ******** .byte %10000011 ; 0F2A 2-e5: * ** .byte %10011001 ; 0F2B 2-e5: * ** * .byte %10011111 ; 0F2C 2-e5: * ***** .byte %10011111 ; 0F2D 2-e5: * ***** .byte %10011111 ; 0F2E 2-e5: * ***** .byte %11111111 ; 0F2F 2-e5: ******** .byte %11111111 ; 0F30 2-e6: ******** .byte %11111111 ; 0F31 2-e6: ******** .byte %11000001 ; 0F32 2-e6: ** * .byte %10011111 ; 0F33 2-e6: * ***** .byte %11000011 ; 0F34 2-e6: ** ** .byte %11111001 ; 0F35 2-e6: ***** * .byte %10000011 ; 0F36 2-e6: * ** .byte %11111111 ; 0F37 2-e6: ******** .byte %11111111 ; 0F38 2-e7: ******** .byte %11111111 ; 0F39 2-e7: ******** .byte %11000001 ; 0F3A 2-e7: ** * .byte %10011111 ; 0F3B 2-e7: * ***** .byte %11000011 ; 0F3C 2-e7: ** ** .byte %11111001 ; 0F3D 2-e7: ***** * .byte %10000011 ; 0F3E 2-e7: * ** .byte %11111111 ; 0F3F 2-e7: ******** .byte %11111111 ; 0F40 2-e8: ******** .byte %11100111 ; 0F41 2-e8: *** *** .byte %10000001 ; 0F42 2-e8: * * .byte %11100111 ; 0F43 2-e8: *** *** .byte %11100111 ; 0F44 2-e8: *** *** .byte %11100111 ; 0F45 2-e8: *** *** .byte %11110001 ; 0F46 2-e8: **** * .byte %11111111 ; 0F47 2-e8: ******** .byte %11111111 ; 0F48 2-e9: ******** .byte %11100111 ; 0F49 2-e9: *** *** .byte %10000001 ; 0F4A 2-e9: * * .byte %11100111 ; 0F4B 2-e9: *** *** .byte %11100111 ; 0F4C 2-e9: *** *** .byte %11100111 ; 0F4D 2-e9: *** *** .byte %11110001 ; 0F4E 2-e9: **** * .byte %11111111 ; 0F4F 2-e9: ******** .byte %11111111 ; 0F50 2-ea: ******** .byte %11111111 ; 0F51 2-ea: ******** .byte %10011001 ; 0F52 2-ea: * ** * .byte %10011001 ; 0F53 2-ea: * ** * .byte %10011001 ; 0F54 2-ea: * ** * .byte %10011001 ; 0F55 2-ea: * ** * .byte %11000001 ; 0F56 2-ea: ** * .byte %11111111 ; 0F57 2-ea: ******** .byte %11111111 ; 0F58 2-eb: ******** .byte %11111111 ; 0F59 2-eb: ******** .byte %10011001 ; 0F5A 2-eb: * ** * .byte %10011001 ; 0F5B 2-eb: * ** * .byte %10011001 ; 0F5C 2-eb: * ** * .byte %10011001 ; 0F5D 2-eb: * ** * .byte %11000001 ; 0F5E 2-eb: ** * .byte %11111111 ; 0F5F 2-eb: ******** .byte %11111111 ; 0F60 2-ec: ******** .byte %11111111 ; 0F61 2-ec: ******** .byte %10011001 ; 0F62 2-ec: * ** * .byte %10011001 ; 0F63 2-ec: * ** * .byte %10011001 ; 0F64 2-ec: * ** * .byte %11000011 ; 0F65 2-ec: ** ** .byte %11100111 ; 0F66 2-ec: *** *** .byte %11111111 ; 0F67 2-ec: ******** .byte %11111111 ; 0F68 2-ed: ******** .byte %11111111 ; 0F69 2-ed: ******** .byte %10011001 ; 0F6A 2-ed: * ** * .byte %10011001 ; 0F6B 2-ed: * ** * .byte %10011001 ; 0F6C 2-ed: * ** * .byte %11000011 ; 0F6D 2-ed: ** ** .byte %11100111 ; 0F6E 2-ed: *** *** .byte %11111111 ; 0F6F 2-ed: ******** .byte %11111111 ; 0F70 2-ee: ******** .byte %11111111 ; 0F71 2-ee: ******** .byte %10011100 ; 0F72 2-ee: * *** .byte %10010100 ; 0F73 2-ee: * * * .byte %10000000 ; 0F74 2-ee: * .byte %11000001 ; 0F75 2-ee: ** * .byte %11001001 ; 0F76 2-ee: ** * * .byte %11111111 ; 0F77 2-ee: ******** .byte %11111111 ; 0F78 2-ef: ******** .byte %11111111 ; 0F79 2-ef: ******** .byte %10011100 ; 0F7A 2-ef: * *** .byte %10010100 ; 0F7B 2-ef: * * * .byte %10000000 ; 0F7C 2-ef: * .byte %11000001 ; 0F7D 2-ef: ** * .byte %11001001 ; 0F7E 2-ef: ** * * .byte %11111111 ; 0F7F 2-ef: ******** .byte %11111111 ; 0F80 2-f0: ******** .byte %11111111 ; 0F81 2-f0: ******** .byte %10011001 ; 0F82 2-f0: * ** * .byte %11000011 ; 0F83 2-f0: ** ** .byte %11100111 ; 0F84 2-f0: *** *** .byte %11000011 ; 0F85 2-f0: ** ** .byte %10011001 ; 0F86 2-f0: * ** * .byte %11111111 ; 0F87 2-f0: ******** .byte %11111111 ; 0F88 2-f1: ******** .byte %11111111 ; 0F89 2-f1: ******** .byte %10011001 ; 0F8A 2-f1: * ** * .byte %11000011 ; 0F8B 2-f1: ** ** .byte %11100111 ; 0F8C 2-f1: *** *** .byte %11000011 ; 0F8D 2-f1: ** ** .byte %10011001 ; 0F8E 2-f1: * ** * .byte %11111111 ; 0F8F 2-f1: ******** .byte %11111111 ; 0F90 2-f2: ******** .byte %11111111 ; 0F91 2-f2: ******** .byte %10011001 ; 0F92 2-f2: * ** * .byte %10011001 ; 0F93 2-f2: * ** * .byte %10011001 ; 0F94 2-f2: * ** * .byte %11000001 ; 0F95 2-f2: ** * .byte %11110011 ; 0F96 2-f2: **** ** .byte %10000111 ; 0F97 2-f2: * *** .byte %11111111 ; 0F98 2-f3: ******** .byte %11111111 ; 0F99 2-f3: ******** .byte %10011001 ; 0F9A 2-f3: * ** * .byte %10011001 ; 0F9B 2-f3: * ** * .byte %10011001 ; 0F9C 2-f3: * ** * .byte %11000001 ; 0F9D 2-f3: ** * .byte %11110011 ; 0F9E 2-f3: **** ** .byte %10000111 ; 0F9F 2-f3: * *** .byte %11111111 ; 0FA0 2-f4: ******** .byte %11111111 ; 0FA1 2-f4: ******** .byte %10000001 ; 0FA2 2-f4: * * .byte %11110011 ; 0FA3 2-f4: **** ** .byte %11100111 ; 0FA4 2-f4: *** *** .byte %11001111 ; 0FA5 2-f4: ** **** .byte %10000001 ; 0FA6 2-f4: * * .byte %11111111 ; 0FA7 2-f4: ******** .byte %11111111 ; 0FA8 2-f5: ******** .byte %11111111 ; 0FA9 2-f5: ******** .byte %10000001 ; 0FAA 2-f5: * * .byte %11110011 ; 0FAB 2-f5: **** ** .byte %11100111 ; 0FAC 2-f5: *** *** .byte %11001111 ; 0FAD 2-f5: ** **** .byte %10000001 ; 0FAE 2-f5: * * .byte %11111111 ; 0FAF 2-f5: ******** .byte %11100011 ; 0FB0 2-f6: *** ** .byte %11001111 ; 0FB1 2-f6: ** **** .byte %11100111 ; 0FB2 2-f6: *** *** .byte %10001111 ; 0FB3 2-f6: * **** .byte %11100111 ; 0FB4 2-f6: *** *** .byte %11001111 ; 0FB5 2-f6: ** **** .byte %11100011 ; 0FB6 2-f6: *** ** .byte %11111111 ; 0FB7 2-f6: ******** .byte %11100011 ; 0FB8 2-f7: *** ** .byte %11001111 ; 0FB9 2-f7: ** **** .byte %11100111 ; 0FBA 2-f7: *** *** .byte %10001111 ; 0FBB 2-f7: * **** .byte %11100111 ; 0FBC 2-f7: *** *** .byte %11001111 ; 0FBD 2-f7: ** **** .byte %11100011 ; 0FBE 2-f7: *** ** .byte %11111111 ; 0FBF 2-f7: ******** .byte %11100111 ; 0FC0 2-f8: *** *** .byte %11100111 ; 0FC1 2-f8: *** *** .byte %11100111 ; 0FC2 2-f8: *** *** .byte %11111111 ; 0FC3 2-f8: ******** .byte %11111111 ; 0FC4 2-f8: ******** .byte %11100111 ; 0FC5 2-f8: *** *** .byte %11100111 ; 0FC6 2-f8: *** *** .byte %11100111 ; 0FC7 2-f8: *** *** .byte %11100111 ; 0FC8 2-f9: *** *** .byte %11100111 ; 0FC9 2-f9: *** *** .byte %11100111 ; 0FCA 2-f9: *** *** .byte %11111111 ; 0FCB 2-f9: ******** .byte %11111111 ; 0FCC 2-f9: ******** .byte %11100111 ; 0FCD 2-f9: *** *** .byte %11100111 ; 0FCE 2-f9: *** *** .byte %11100111 ; 0FCF 2-f9: *** *** .byte %11000111 ; 0FD0 2-fa: ** *** .byte %11110011 ; 0FD1 2-fa: **** ** .byte %11100111 ; 0FD2 2-fa: *** *** .byte %11110001 ; 0FD3 2-fa: **** * .byte %11100111 ; 0FD4 2-fa: *** *** .byte %11110011 ; 0FD5 2-fa: **** ** .byte %11000111 ; 0FD6 2-fa: ** *** .byte %11111111 ; 0FD7 2-fa: ******** .byte %11000111 ; 0FD8 2-fb: ** *** .byte %11110011 ; 0FD9 2-fb: **** ** .byte %11100111 ; 0FDA 2-fb: *** *** .byte %11110001 ; 0FDB 2-fb: **** * .byte %11100111 ; 0FDC 2-fb: *** *** .byte %11110011 ; 0FDD 2-fb: **** ** .byte %11000111 ; 0FDE 2-fb: ** *** .byte %11111111 ; 0FDF 2-fb: ******** .byte %11001100 ; 0FE0 2-fc: ** ** .byte %00000000 ; 0FE1 2-fc: .byte %00110011 ; 0FE2 2-fc: ** ** .byte %11111111 ; 0FE3 2-fc: ******** .byte %11111111 ; 0FE4 2-fc: ******** .byte %11111111 ; 0FE5 2-fc: ******** .byte %11111111 ; 0FE6 2-fc: ******** .byte %11111111 ; 0FE7 2-fc: ******** .byte %11001100 ; 0FE8 2-fd: ** ** .byte %00000000 ; 0FE9 2-fd: .byte %00110011 ; 0FEA 2-fd: ** ** .byte %11111111 ; 0FEB 2-fd: ******** .byte %11111111 ; 0FEC 2-fd: ******** .byte %11111111 ; 0FED 2-fd: ******** .byte %11111111 ; 0FEE 2-fd: ******** .byte %11111111 ; 0FEF 2-fd: ******** .byte %11111111 ; 0FF0 2-fe: ******** .byte %11111111 ; 0FF1 2-fe: ******** .byte %11111111 ; 0FF2 2-fe: ******** .byte %11111111 ; 0FF3 2-fe: ******** .byte %11111111 ; 0FF4 2-fe: ******** .byte %11111111 ; 0FF5 2-fe: ******** .byte %11111111 ; 0FF6 2-fe: ******** .byte %11111111 ; 0FF7 2-fe: ******** .byte %11111111 ; 0FF8 2-ff: ******** .byte %11111111 ; 0FF9 2-ff: ******** .byte %11111111 ; 0FFA 2-ff: ******** .byte %11111111 ; 0FFB 2-ff: ******** .byte %11111111 ; 0FFC 2-ff: ******** .byte %11111111 ; 0FFD 2-ff: ******** .byte %11111111 ; 0FFE 2-ff: ******** .byte %11111111 ; 0FFF 2-ff: ******** ================================================ FILE: src/assets/templates/8x8/cc65_nes_tiles.s.template ================================================ .segment "CHARS" .export _Charset _Charset: .byte %00000000 ; 0000 1-00: .byte %00000000 ; 0001 1-00: .byte %00000000 ; 0002 1-00: .byte %00000000 ; 0003 1-00: .byte %00000000 ; 0004 1-00: .byte %00000000 ; 0005 1-00: .byte %00000000 ; 0006 1-00: .byte %00000000 ; 0007 1-00: .byte %00000000 ; 0008 1-01: .byte %00000000 ; 0009 1-01: .byte %00000000 ; 000A 1-01: .byte %00000000 ; 000B 1-01: .byte %00000000 ; 000C 1-01: .byte %00000000 ; 000D 1-01: .byte %00000000 ; 000E 1-01: .byte %00000000 ; 000F 1-01: .byte .byte .byte .byte .byte .byte .byte .byte .byte .byte .byte .byte .byte %11100000 ; 0070 1-0e: *** .byte %11100000 ; 0071 1-0e: *** .byte %01100000 ; 0072 1-0e: ** .byte %01100000 ; 0073 1-0e: ** .byte %01100000 ; 0074 1-0e: ** .byte %01100000 ; 0075 1-0e: ** .byte %01100000 ; 0076 1-0e: ** .byte %01100000 ; 0077 1-0e: ** .byte %11100000 ; 0078 1-0f: *** .byte %11100000 ; 0079 1-0f: *** .byte %01100000 ; 007A 1-0f: ** .byte %01100000 ; 007B 1-0f: ** .byte %01100000 ; 007C 1-0f: ** .byte %01100000 ; 007D 1-0f: ** .byte %01100000 ; 007E 1-0f: ** .byte %01100000 ; 007F 1-0f: ** .byte %00011000 ; 0080 1-10: ** .byte %00011000 ; 0081 1-10: ** .byte %00011000 ; 0082 1-10: ** .byte %11111000 ; 0083 1-10: ***** .byte %11111000 ; 0084 1-10: ***** .byte %00000000 ; 0085 1-10: .byte %00000000 ; 0086 1-10: .byte %00000000 ; 0087 1-10: .byte %00011000 ; 0088 1-11: ** .byte %00011000 ; 0089 1-11: ** .byte %00011000 ; 008A 1-11: ** .byte %11111000 ; 008B 1-11: ***** .byte %11111000 ; 008C 1-11: ***** .byte %00000000 ; 008D 1-11: .byte %00000000 ; 008E 1-11: .byte %00000000 ; 008F 1-11: .byte %11001100 ; 0090 1-12: ** ** .byte %10011001 ; 0091 1-12: * ** * .byte %00110011 ; 0092 1-12: ** ** .byte %01100110 ; 0093 1-12: ** ** .byte %11001100 ; 0094 1-12: ** ** .byte %10011001 ; 0095 1-12: * ** * .byte %00110011 ; 0096 1-12: ** ** .byte %01100110 ; 0097 1-12: ** ** .byte %11001100 ; 0098 1-13: ** ** .byte %10011001 ; 0099 1-13: * ** * .byte %00110011 ; 009A 1-13: ** ** .byte %01100110 ; 009B 1-13: ** ** .byte %11001100 ; 009C 1-13: ** ** .byte %10011001 ; 009D 1-13: * ** * .byte %00110011 ; 009E 1-13: ** ** .byte %01100110 ; 009F 1-13: ** ** .byte %00110011 ; 00A0 1-14: ** ** .byte %10011001 ; 00A1 1-14: * ** * .byte %11001100 ; 00A2 1-14: ** ** .byte %01100110 ; 00A3 1-14: ** ** .byte %00110011 ; 00A4 1-14: ** ** .byte %10011001 ; 00A5 1-14: * ** * .byte %11001100 ; 00A6 1-14: ** ** .byte %01100110 ; 00A7 1-14: ** ** .byte %00110011 ; 00A8 1-15: ** ** .byte %10011001 ; 00A9 1-15: * ** * .byte %11001100 ; 00AA 1-15: ** ** .byte %01100110 ; 00AB 1-15: ** ** .byte %00110011 ; 00AC 1-15: ** ** .byte %10011001 ; 00AD 1-15: * ** * .byte %11001100 ; 00AE 1-15: ** ** .byte %01100110 ; 00AF 1-15: ** ** .byte %00000000 ; 00B0 1-16: .byte %00000000 ; 00B1 1-16: .byte %00000000 ; 00B2 1-16: .byte %11111111 ; 00B3 1-16: ******** .byte %11111111 ; 00B4 1-16: ******** .byte %00000000 ; 00B5 1-16: .byte %00000000 ; 00B6 1-16: .byte %00000000 ; 00B7 1-16: .byte %00000000 ; 00B8 1-17: .byte %00000000 ; 00B9 1-17: .byte %00000000 ; 00BA 1-17: .byte %11111111 ; 00BB 1-17: ******** .byte %11111111 ; 00BC 1-17: ******** .byte %00000000 ; 00BD 1-17: .byte %00000000 ; 00BE 1-17: .byte %00000000 ; 00BF 1-17: .byte %00000011 ; 00C0 1-18: ** .byte %00000011 ; 00C1 1-18: ** .byte %00000011 ; 00C2 1-18: ** .byte %00000011 ; 00C3 1-18: ** .byte %00000011 ; 00C4 1-18: ** .byte %00000011 ; 00C5 1-18: ** .byte %00000011 ; 00C6 1-18: ** .byte %00000011 ; 00C7 1-18: ** .byte %00000011 ; 00C8 1-19: ** .byte %00000011 ; 00C9 1-19: ** .byte %00000011 ; 00CA 1-19: ** .byte %00000011 ; 00CB 1-19: ** .byte %00000011 ; 00CC 1-19: ** .byte %00000011 ; 00CD 1-19: ** .byte %00000011 ; 00CE 1-19: ** .byte %00000011 ; 00CF 1-19: ** .byte %00000000 ; 00D0 1-1a: .byte %00000000 ; 00D1 1-1a: .byte %00000000 ; 00D2 1-1a: .byte %00000000 ; 00D3 1-1a: .byte %11001100 ; 00D4 1-1a: ** ** .byte %11001100 ; 00D5 1-1a: ** ** .byte %00110011 ; 00D6 1-1a: ** ** .byte %00110011 ; 00D7 1-1a: ** ** .byte %00000000 ; 00D8 1-1b: .byte %00000000 ; 00D9 1-1b: .byte %00000000 ; 00DA 1-1b: .byte %00000000 ; 00DB 1-1b: .byte %11001100 ; 00DC 1-1b: ** ** .byte %11001100 ; 00DD 1-1b: ** ** .byte %00110011 ; 00DE 1-1b: ** ** .byte %00110011 ; 00DF 1-1b: ** ** .byte %00011000 ; 00E0 1-1c: ** .byte %00011000 ; 00E1 1-1c: ** .byte %00011000 ; 00E2 1-1c: ** .byte %00011000 ; 00E3 1-1c: ** .byte %00011000 ; 00E4 1-1c: ** .byte %00011000 ; 00E5 1-1c: ** .byte %00011000 ; 00E6 1-1c: ** .byte %00011000 ; 00E7 1-1c: ** .byte %00011000 ; 00E8 1-1d: ** .byte %00011000 ; 00E9 1-1d: ** .byte %00011000 ; 00EA 1-1d: ** .byte %00011000 ; 00EB 1-1d: ** .byte %00011000 ; 00EC 1-1d: ** .byte %00011000 ; 00ED 1-1d: ** .byte %00011000 ; 00EE 1-1d: ** .byte %00011000 ; 00EF 1-1d: ** .byte %00011000 ; 00F0 1-1e: ** .byte %00011000 ; 00F1 1-1e: ** .byte %00011000 ; 00F2 1-1e: ** .byte %00011111 ; 00F3 1-1e: ***** .byte %00011111 ; 00F4 1-1e: ***** .byte %00011000 ; 00F5 1-1e: ** .byte %00011000 ; 00F6 1-1e: ** .byte %00011000 ; 00F7 1-1e: ** .byte %00011000 ; 00F8 1-1f: ** .byte %00011000 ; 00F9 1-1f: ** .byte %00011000 ; 00FA 1-1f: ** .byte %00011111 ; 00FB 1-1f: ***** .byte %00011111 ; 00FC 1-1f: ***** .byte %00011000 ; 00FD 1-1f: ** .byte %00011000 ; 00FE 1-1f: ** .byte %00011000 ; 00FF 1-1f: ** .byte %00011000 ; 0100 1-20: ** .byte %00011000 ; 0101 1-20: ** .byte %00011000 ; 0102 1-20: ** .byte %11111111 ; 0103 1-20: ******** .byte %11111111 ; 0104 1-20: ******** .byte %00011000 ; 0105 1-20: ** .byte %00011000 ; 0106 1-20: ** .byte %00011000 ; 0107 1-20: ** .byte %00011000 ; 0108 1-21: ** .byte %00011000 ; 0109 1-21: ** .byte %00011000 ; 010A 1-21: ** .byte %11111111 ; 010B 1-21: ******** .byte %11111111 ; 010C 1-21: ******** .byte %00011000 ; 010D 1-21: ** .byte %00011000 ; 010E 1-21: ** .byte %00011000 ; 010F 1-21: ** .byte %00011000 ; 0110 1-22: ** .byte %00011000 ; 0111 1-22: ** .byte %00011000 ; 0112 1-22: ** .byte %00011111 ; 0113 1-22: ***** .byte %00011111 ; 0114 1-22: ***** .byte %00000000 ; 0115 1-22: .byte %00000000 ; 0116 1-22: .byte %00000000 ; 0117 1-22: .byte %00011000 ; 0118 1-23: ** .byte %00011000 ; 0119 1-23: ** .byte %00011000 ; 011A 1-23: ** .byte %00011111 ; 011B 1-23: ***** .byte %00011111 ; 011C 1-23: ***** .byte %00000000 ; 011D 1-23: .byte %00000000 ; 011E 1-23: .byte %00000000 ; 011F 1-23: .byte %00000000 ; 0120 1-24: .byte %00000000 ; 0121 1-24: .byte %00000000 ; 0122 1-24: .byte %11111000 ; 0123 1-24: ***** .byte %11111000 ; 0124 1-24: ***** .byte %00011000 ; 0125 1-24: ** .byte %00011000 ; 0126 1-24: ** .byte %00011000 ; 0127 1-24: ** .byte %00000000 ; 0128 1-25: .byte %00000000 ; 0129 1-25: .byte %00000000 ; 012A 1-25: .byte %11111000 ; 012B 1-25: ***** .byte %11111000 ; 012C 1-25: ***** .byte %00011000 ; 012D 1-25: ** .byte %00011000 ; 012E 1-25: ** .byte %00011000 ; 012F 1-25: ** .byte %00000000 ; 0130 1-26: .byte %00000000 ; 0131 1-26: .byte %00000000 ; 0132 1-26: .byte %00000000 ; 0133 1-26: .byte %00000000 ; 0134 1-26: .byte %00000000 ; 0135 1-26: .byte %11111111 ; 0136 1-26: ******** .byte %11111111 ; 0137 1-26: ******** .byte %00000000 ; 0138 1-27: .byte %00000000 ; 0139 1-27: .byte %00000000 ; 013A 1-27: .byte %00000000 ; 013B 1-27: .byte %00000000 ; 013C 1-27: .byte %00000000 ; 013D 1-27: .byte %11111111 ; 013E 1-27: ******** .byte %11111111 ; 013F 1-27: ******** .byte %00000000 ; 0140 1-28: .byte %00000000 ; 0141 1-28: .byte %00000000 ; 0142 1-28: .byte %00011111 ; 0143 1-28: ***** .byte %00011111 ; 0144 1-28: ***** .byte %00011000 ; 0145 1-28: ** .byte %00011000 ; 0146 1-28: ** .byte %00011000 ; 0147 1-28: ** .byte %00000000 ; 0148 1-29: .byte %00000000 ; 0149 1-29: .byte %00000000 ; 014A 1-29: .byte %00011111 ; 014B 1-29: ***** .byte %00011111 ; 014C 1-29: ***** .byte %00011000 ; 014D 1-29: ** .byte %00011000 ; 014E 1-29: ** .byte %00011000 ; 014F 1-29: ** .byte %00011000 ; 0150 1-2a: ** .byte %00011000 ; 0151 1-2a: ** .byte %00011000 ; 0152 1-2a: ** .byte %11111111 ; 0153 1-2a: ******** .byte %11111111 ; 0154 1-2a: ******** .byte %00000000 ; 0155 1-2a: .byte %00000000 ; 0156 1-2a: .byte %00000000 ; 0157 1-2a: .byte %00011000 ; 0158 1-2b: ** .byte %00011000 ; 0159 1-2b: ** .byte %00011000 ; 015A 1-2b: ** .byte %11111111 ; 015B 1-2b: ******** .byte %11111111 ; 015C 1-2b: ******** .byte %00000000 ; 015D 1-2b: .byte %00000000 ; 015E 1-2b: .byte %00000000 ; 015F 1-2b: .byte %00000000 ; 0160 1-2c: .byte %00000000 ; 0161 1-2c: .byte %00000000 ; 0162 1-2c: .byte %11111111 ; 0163 1-2c: ******** .byte %11111111 ; 0164 1-2c: ******** .byte %00011000 ; 0165 1-2c: ** .byte %00011000 ; 0166 1-2c: ** .byte %00011000 ; 0167 1-2c: ** .byte %00000000 ; 0168 1-2d: .byte %00000000 ; 0169 1-2d: .byte %00000000 ; 016A 1-2d: .byte %11111111 ; 016B 1-2d: ******** .byte %11111111 ; 016C 1-2d: ******** .byte %00011000 ; 016D 1-2d: ** .byte %00011000 ; 016E 1-2d: ** .byte %00011000 ; 016F 1-2d: ** .byte %00011000 ; 0170 1-2e: ** .byte %00011000 ; 0171 1-2e: ** .byte %00011000 ; 0172 1-2e: ** .byte %11111000 ; 0173 1-2e: ***** .byte %11111000 ; 0174 1-2e: ***** .byte %00011000 ; 0175 1-2e: ** .byte %00011000 ; 0176 1-2e: ** .byte %00011000 ; 0177 1-2e: ** .byte %00011000 ; 0178 1-2f: ** .byte %00011000 ; 0179 1-2f: ** .byte %00011000 ; 017A 1-2f: ** .byte %11111000 ; 017B 1-2f: ***** .byte %11111000 ; 017C 1-2f: ***** .byte %00011000 ; 017D 1-2f: ** .byte %00011000 ; 017E 1-2f: ** .byte %00011000 ; 017F 1-2f: ** .byte %11110000 ; 0180 1-30: **** .byte %11110000 ; 0181 1-30: **** .byte %11110000 ; 0182 1-30: **** .byte %11110000 ; 0183 1-30: **** .byte %11110000 ; 0184 1-30: **** .byte %11110000 ; 0185 1-30: **** .byte %11110000 ; 0186 1-30: **** .byte %11110000 ; 0187 1-30: **** .byte %11110000 ; 0188 1-31: **** .byte %11110000 ; 0189 1-31: **** .byte %11110000 ; 018A 1-31: **** .byte %11110000 ; 018B 1-31: **** .byte %11110000 ; 018C 1-31: **** .byte %11110000 ; 018D 1-31: **** .byte %11110000 ; 018E 1-31: **** .byte %11110000 ; 018F 1-31: **** .byte %00000000 ; 0190 1-32: .byte %00000000 ; 0191 1-32: .byte %00000000 ; 0192 1-32: .byte %00000000 ; 0193 1-32: .byte %11111111 ; 0194 1-32: ******** .byte %11111111 ; 0195 1-32: ******** .byte %11111111 ; 0196 1-32: ******** .byte %11111111 ; 0197 1-32: ******** .byte %00000000 ; 0198 1-33: .byte %00000000 ; 0199 1-33: .byte %00000000 ; 019A 1-33: .byte %00000000 ; 019B 1-33: .byte %11111111 ; 019C 1-33: ******** .byte %11111111 ; 019D 1-33: ******** .byte %11111111 ; 019E 1-33: ******** .byte %11111111 ; 019F 1-33: ******** .byte %00000000 ; 01A0 1-34: .byte %00000000 ; 01A1 1-34: .byte %00000000 ; 01A2 1-34: .byte %00000000 ; 01A3 1-34: .byte %11110000 ; 01A4 1-34: **** .byte %11110000 ; 01A5 1-34: **** .byte %11110000 ; 01A6 1-34: **** .byte %11110000 ; 01A7 1-34: **** .byte %00000000 ; 01A8 1-35: .byte %00000000 ; 01A9 1-35: .byte %00000000 ; 01AA 1-35: .byte %00000000 ; 01AB 1-35: .byte %11110000 ; 01AC 1-35: **** .byte %11110000 ; 01AD 1-35: **** .byte %11110000 ; 01AE 1-35: **** .byte %11110000 ; 01AF 1-35: **** .byte %11000000 ; 01B0 1-36: ** .byte %11000000 ; 01B1 1-36: ** .byte %00110000 ; 01B2 1-36: ** .byte %00110000 ; 01B3 1-36: ** .byte %11000000 ; 01B4 1-36: ** .byte %11000000 ; 01B5 1-36: ** .byte %00110000 ; 01B6 1-36: ** .byte %00110000 ; 01B7 1-36: ** .byte %11000000 ; 01B8 1-37: ** .byte %11000000 ; 01B9 1-37: ** .byte %00110000 ; 01BA 1-37: ** .byte %00110000 ; 01BB 1-37: ** .byte %11000000 ; 01BC 1-37: ** .byte %11000000 ; 01BD 1-37: ** .byte %00110000 ; 01BE 1-37: ** .byte %00110000 ; 01BF 1-37: ** .byte %00001111 ; 01C0 1-38: **** .byte %00001111 ; 01C1 1-38: **** .byte %00001111 ; 01C2 1-38: **** .byte %00001111 ; 01C3 1-38: **** .byte %00000000 ; 01C4 1-38: .byte %00000000 ; 01C5 1-38: .byte %00000000 ; 01C6 1-38: .byte %00000000 ; 01C7 1-38: .byte %00001111 ; 01C8 1-39: **** .byte %00001111 ; 01C9 1-39: **** .byte %00001111 ; 01CA 1-39: **** .byte %00001111 ; 01CB 1-39: **** .byte %00000000 ; 01CC 1-39: .byte %00000000 ; 01CD 1-39: .byte %00000000 ; 01CE 1-39: .byte %00000000 ; 01CF 1-39: .byte %00000000 ; 01D0 1-3a: .byte %00000000 ; 01D1 1-3a: .byte %00000000 ; 01D2 1-3a: .byte %00000000 ; 01D3 1-3a: .byte %00001111 ; 01D4 1-3a: **** .byte %00001111 ; 01D5 1-3a: **** .byte %00001111 ; 01D6 1-3a: **** .byte %00001111 ; 01D7 1-3a: **** .byte %00000000 ; 01D8 1-3b: .byte %00000000 ; 01D9 1-3b: .byte %00000000 ; 01DA 1-3b: .byte %00000000 ; 01DB 1-3b: .byte %00001111 ; 01DC 1-3b: **** .byte %00001111 ; 01DD 1-3b: **** .byte %00001111 ; 01DE 1-3b: **** .byte %00001111 ; 01DF 1-3b: **** .byte %11110000 ; 01E0 1-3c: **** .byte %11110000 ; 01E1 1-3c: **** .byte %11110000 ; 01E2 1-3c: **** .byte %11110000 ; 01E3 1-3c: **** .byte %00000000 ; 01E4 1-3c: .byte %00000000 ; 01E5 1-3c: .byte %00000000 ; 01E6 1-3c: .byte %00000000 ; 01E7 1-3c: .byte %11110000 ; 01E8 1-3d: **** .byte %11110000 ; 01E9 1-3d: **** .byte %11110000 ; 01EA 1-3d: **** .byte %11110000 ; 01EB 1-3d: **** .byte %00000000 ; 01EC 1-3d: .byte %00000000 ; 01ED 1-3d: .byte %00000000 ; 01EE 1-3d: .byte %00000000 ; 01EF 1-3d: .byte %11110000 ; 01F0 1-3e: **** .byte %11110000 ; 01F1 1-3e: **** .byte %11110000 ; 01F2 1-3e: **** .byte %11110000 ; 01F3 1-3e: **** .byte %00001111 ; 01F4 1-3e: **** .byte %00001111 ; 01F5 1-3e: **** .byte %00001111 ; 01F6 1-3e: **** .byte %00001111 ; 01F7 1-3e: **** .byte %11110000 ; 01F8 1-3f: **** .byte %11110000 ; 01F9 1-3f: **** .byte %11110000 ; 01FA 1-3f: **** .byte %11110000 ; 01FB 1-3f: **** .byte %00001111 ; 01FC 1-3f: **** .byte %00001111 ; 01FD 1-3f: **** .byte %00001111 ; 01FE 1-3f: **** .byte %00001111 ; 01FF 1-3f: **** .byte %00000000 ; 0200 1-40: .byte %00000000 ; 0201 1-40: .byte %00000000 ; 0202 1-40: .byte %00000000 ; 0203 1-40: .byte %00000000 ; 0204 1-40: .byte %00000000 ; 0205 1-40: .byte %00000000 ; 0206 1-40: .byte %00000000 ; 0207 1-40: .byte %00000000 ; 0208 1-41: .byte %00000000 ; 0209 1-41: .byte %00000000 ; 020A 1-41: .byte %00000000 ; 020B 1-41: .byte %00000000 ; 020C 1-41: .byte %00000000 ; 020D 1-41: .byte %00000000 ; 020E 1-41: .byte %00000000 ; 020F 1-41: .byte %00011000 ; 0210 1-42: ** .byte %00011000 ; 0211 1-42: ** .byte %00011000 ; 0212 1-42: ** .byte %00011000 ; 0213 1-42: ** .byte %00000000 ; 0214 1-42: .byte %00000000 ; 0215 1-42: .byte %00011000 ; 0216 1-42: ** .byte %00000000 ; 0217 1-42: .byte %00011000 ; 0218 1-43: ** .byte %00011000 ; 0219 1-43: ** .byte %00011000 ; 021A 1-43: ** .byte %00011000 ; 021B 1-43: ** .byte %00000000 ; 021C 1-43: .byte %00000000 ; 021D 1-43: .byte %00011000 ; 021E 1-43: ** .byte %00000000 ; 021F 1-43: .byte %01100110 ; 0220 1-44: ** ** .byte %01100110 ; 0221 1-44: ** ** .byte %01100110 ; 0222 1-44: ** ** .byte %00000000 ; 0223 1-44: .byte %00000000 ; 0224 1-44: .byte %00000000 ; 0225 1-44: .byte %00000000 ; 0226 1-44: .byte %00000000 ; 0227 1-44: .byte %01100110 ; 0228 1-45: ** ** .byte %01100110 ; 0229 1-45: ** ** .byte %01100110 ; 022A 1-45: ** ** .byte %00000000 ; 022B 1-45: .byte %00000000 ; 022C 1-45: .byte %00000000 ; 022D 1-45: .byte %00000000 ; 022E 1-45: .byte %00000000 ; 022F 1-45: .byte ; .byte %10111101 ; .byte %01000010 ; .byte %10100101 ; .byte %10000001 ; .byte %10000001 ; .byte %10011001 ; .byte %10000001 ; .byte %01111110 .byte ; .byte %10111101 ; .byte %01000010 ; .byte %10100101 ; .byte %10000001 ; .byte %10000001 ; .byte %10011001 ; .byte %10000001 ; .byte %01111110 .byte %00000000 ; 0008 1-01: .byte %00000000 ; 0009 1-01: .byte %00000000 ; 000A 1-01: .byte %00000000 ; 000B 1-01: .byte %00000000 ; 000C 1-01: .byte %00000000 ; 000D 1-01: .byte %00000000 ; 000E 1-01: .byte %00000000 ; 000F 1-01: .byte .byte %00000000 ; 0250 1-4a: .byte %01100110 ; 0251 1-4a: ** ** .byte %00001100 ; 0252 1-4a: ** .byte %00011000 ; 0253 1-4a: ** .byte %00110000 ; 0254 1-4a: ** .byte %01100110 ; 0255 1-4a: ** ** .byte %01000110 ; 0256 1-4a: * ** .byte %00000000 ; 0257 1-4a: .byte %00000000 ; 0258 1-4b: .byte %01100110 ; 0259 1-4b: ** ** .byte %00001100 ; 025A 1-4b: ** .byte %00011000 ; 025B 1-4b: ** .byte %00110000 ; 025C 1-4b: ** .byte %01100110 ; 025D 1-4b: ** ** .byte %01000110 ; 025E 1-4b: * ** .byte %00000000 ; 025F 1-4b: .byte %00111100 ; 0260 1-4c: **** .byte %01100110 ; 0261 1-4c: ** ** .byte %00111100 ; 0262 1-4c: **** .byte %00111000 ; 0263 1-4c: *** .byte %01100111 ; 0264 1-4c: ** *** .byte %01100110 ; 0265 1-4c: ** ** .byte %00111111 ; 0266 1-4c: ****** .byte %00000000 ; 0267 1-4c: .byte %00111100 ; 0268 1-4d: **** .byte %01100110 ; 0269 1-4d: ** ** .byte %00111100 ; 026A 1-4d: **** .byte %00111000 ; 026B 1-4d: *** .byte %01100111 ; 026C 1-4d: ** *** .byte %01100110 ; 026D 1-4d: ** ** .byte %00111111 ; 026E 1-4d: ****** .byte %00000000 ; 026F 1-4d: .byte %00000110 ; 0270 1-4e: ** .byte %00001100 ; 0271 1-4e: ** .byte %00011000 ; 0272 1-4e: ** .byte %00000000 ; 0273 1-4e: .byte %00000000 ; 0274 1-4e: .byte %00000000 ; 0275 1-4e: .byte %00000000 ; 0276 1-4e: .byte %00000000 ; 0277 1-4e: .byte %00000110 ; 0278 1-4f: ** .byte %00001100 ; 0279 1-4f: ** .byte %00011000 ; 027A 1-4f: ** .byte %00000000 ; 027B 1-4f: .byte %00000000 ; 027C 1-4f: .byte %00000000 ; 027D 1-4f: .byte %00000000 ; 027E 1-4f: .byte %00000000 ; 027F 1-4f: .byte %00001100 ; 0280 1-50: ** .byte %00011000 ; 0281 1-50: ** .byte %00110000 ; 0282 1-50: ** .byte %00110000 ; 0283 1-50: ** .byte %00110000 ; 0284 1-50: ** .byte %00011000 ; 0285 1-50: ** .byte %00001100 ; 0286 1-50: ** .byte %00000000 ; 0287 1-50: .byte %00001100 ; 0288 1-51: ** .byte %00011000 ; 0289 1-51: ** .byte %00110000 ; 028A 1-51: ** .byte %00110000 ; 028B 1-51: ** .byte %00110000 ; 028C 1-51: ** .byte %00011000 ; 028D 1-51: ** .byte %00001100 ; 028E 1-51: ** .byte %00000000 ; 028F 1-51: .byte %00110000 ; 0290 1-52: ** .byte %00011000 ; 0291 1-52: ** .byte %00001100 ; 0292 1-52: ** .byte %00001100 ; 0293 1-52: ** .byte %00001100 ; 0294 1-52: ** .byte %00011000 ; 0295 1-52: ** .byte %00110000 ; 0296 1-52: ** .byte %00000000 ; 0297 1-52: .byte %00110000 ; 0298 1-53: ** .byte %00011000 ; 0299 1-53: ** .byte %00001100 ; 029A 1-53: ** .byte %00001100 ; 029B 1-53: ** .byte %00001100 ; 029C 1-53: ** .byte %00011000 ; 029D 1-53: ** .byte %00110000 ; 029E 1-53: ** .byte %00000000 ; 029F 1-53: .byte %00000000 ; 02A0 1-54: .byte %01100110 ; 02A1 1-54: ** ** .byte %00111100 ; 02A2 1-54: **** .byte %11111111 ; 02A3 1-54: ******** .byte %00111100 ; 02A4 1-54: **** .byte %01100110 ; 02A5 1-54: ** ** .byte %00000000 ; 02A6 1-54: .byte %00000000 ; 02A7 1-54: .byte %00000000 ; 02A8 1-55: .byte %01100110 ; 02A9 1-55: ** ** .byte %00111100 ; 02AA 1-55: **** .byte %11111111 ; 02AB 1-55: ******** .byte %00111100 ; 02AC 1-55: **** .byte %01100110 ; 02AD 1-55: ** ** .byte %00000000 ; 02AE 1-55: .byte %00000000 ; 02AF 1-55: .byte %00000000 ; 02B0 1-56: .byte %00011000 ; 02B1 1-56: ** .byte %00011000 ; 02B2 1-56: ** .byte %01111110 ; 02B3 1-56: ****** .byte %00011000 ; 02B4 1-56: ** .byte %00011000 ; 02B5 1-56: ** .byte %00000000 ; 02B6 1-56: .byte %00000000 ; 02B7 1-56: .byte %00000000 ; 02B8 1-57: .byte %00011000 ; 02B9 1-57: ** .byte %00011000 ; 02BA 1-57: ** .byte %01111110 ; 02BB 1-57: ****** .byte %00011000 ; 02BC 1-57: ** .byte %00011000 ; 02BD 1-57: ** .byte %00000000 ; 02BE 1-57: .byte %00000000 ; 02BF 1-57: .byte %00000000 ; 02C0 1-58: .byte %00000000 ; 02C1 1-58: .byte %00000000 ; 02C2 1-58: .byte %00000000 ; 02C3 1-58: .byte %00000000 ; 02C4 1-58: .byte %00011000 ; 02C5 1-58: ** .byte %00011000 ; 02C6 1-58: ** .byte %00110000 ; 02C7 1-58: ** .byte %00000000 ; 02C8 1-59: .byte %00000000 ; 02C9 1-59: .byte %00000000 ; 02CA 1-59: .byte %00000000 ; 02CB 1-59: .byte %00000000 ; 02CC 1-59: .byte %00011000 ; 02CD 1-59: ** .byte %00011000 ; 02CE 1-59: ** .byte %00110000 ; 02CF 1-59: ** .byte %00000000 ; 02D0 1-5a: .byte %00000000 ; 02D1 1-5a: .byte %00000000 ; 02D2 1-5a: .byte %01111110 ; 02D3 1-5a: ****** .byte %00000000 ; 02D4 1-5a: .byte %00000000 ; 02D5 1-5a: .byte %00000000 ; 02D6 1-5a: .byte %00000000 ; 02D7 1-5a: .byte %00000000 ; 02D8 1-5b: .byte %00000000 ; 02D9 1-5b: .byte %00000000 ; 02DA 1-5b: .byte %01111110 ; 02DB 1-5b: ****** .byte %00000000 ; 02DC 1-5b: .byte %00000000 ; 02DD 1-5b: .byte %00000000 ; 02DE 1-5b: .byte %00000000 ; 02DF 1-5b: .byte %00000000 ; 02E0 1-5c: .byte %00000000 ; 02E1 1-5c: .byte %00000000 ; 02E2 1-5c: .byte %00000000 ; 02E3 1-5c: .byte %00000000 ; 02E4 1-5c: .byte %00011000 ; 02E5 1-5c: ** .byte %00011000 ; 02E6 1-5c: ** .byte %00000000 ; 02E7 1-5c: .byte %00000000 ; 02E8 1-5d: .byte %00000000 ; 02E9 1-5d: .byte %00000000 ; 02EA 1-5d: .byte %00000000 ; 02EB 1-5d: .byte %00000000 ; 02EC 1-5d: .byte %00011000 ; 02ED 1-5d: ** .byte %00011000 ; 02EE 1-5d: ** .byte %00000000 ; 02EF 1-5d: .byte %00000000 ; 02F0 1-5e: .byte %00000011 ; 02F1 1-5e: ** .byte %00000110 ; 02F2 1-5e: ** .byte %00001100 ; 02F3 1-5e: ** .byte %00011000 ; 02F4 1-5e: ** .byte %00110000 ; 02F5 1-5e: ** .byte %01100000 ; 02F6 1-5e: ** .byte %00000000 ; 02F7 1-5e: .byte %00000000 ; 02F8 1-5f: .byte %00000011 ; 02F9 1-5f: ** .byte %00000110 ; 02FA 1-5f: ** .byte %00001100 ; 02FB 1-5f: ** .byte %00011000 ; 02FC 1-5f: ** .byte %00110000 ; 02FD 1-5f: ** .byte %01100000 ; 02FE 1-5f: ** .byte %00000000 ; 02FF 1-5f: .byte %00111100 ; 0300 1-60: **** .byte %01100110 ; 0301 1-60: ** ** .byte %01101110 ; 0302 1-60: ** *** .byte %01110110 ; 0303 1-60: *** ** .byte %01100110 ; 0304 1-60: ** ** .byte %01100110 ; 0305 1-60: ** ** .byte %00111100 ; 0306 1-60: **** .byte %00000000 ; 0307 1-60: .byte %00111100 ; 0308 1-61: **** .byte %01100110 ; 0309 1-61: ** ** .byte %01101110 ; 030A 1-61: ** *** .byte %01110110 ; 030B 1-61: *** ** .byte %01100110 ; 030C 1-61: ** ** .byte %01100110 ; 030D 1-61: ** ** .byte %00111100 ; 030E 1-61: **** .byte %00000000 ; 030F 1-61: .byte %00011000 ; 0310 1-62: ** .byte %00011000 ; 0311 1-62: ** .byte %00111000 ; 0312 1-62: *** .byte %00011000 ; 0313 1-62: ** .byte %00011000 ; 0314 1-62: ** .byte %00011000 ; 0315 1-62: ** .byte %01111110 ; 0316 1-62: ****** .byte %00000000 ; 0317 1-62: .byte %00011000 ; 0318 1-63: ** .byte %00011000 ; 0319 1-63: ** .byte %00111000 ; 031A 1-63: *** .byte %00011000 ; 031B 1-63: ** .byte %00011000 ; 031C 1-63: ** .byte %00011000 ; 031D 1-63: ** .byte %01111110 ; 031E 1-63: ****** .byte %00000000 ; 031F 1-63: .byte %00111100 ; 0320 1-64: **** .byte %01100110 ; 0321 1-64: ** ** .byte %00000110 ; 0322 1-64: ** .byte %00001100 ; 0323 1-64: ** .byte %00110000 ; 0324 1-64: ** .byte %01100000 ; 0325 1-64: ** .byte %01111110 ; 0326 1-64: ****** .byte %00000000 ; 0327 1-64: .byte %00111100 ; 0328 1-65: **** .byte %01100110 ; 0329 1-65: ** ** .byte %00000110 ; 032A 1-65: ** .byte %00001100 ; 032B 1-65: ** .byte %00110000 ; 032C 1-65: ** .byte %01100000 ; 032D 1-65: ** .byte %01111110 ; 032E 1-65: ****** .byte %00000000 ; 032F 1-65: .byte %00111100 ; 0330 1-66: **** .byte %01100110 ; 0331 1-66: ** ** .byte %00000110 ; 0332 1-66: ** .byte %00011100 ; 0333 1-66: *** .byte %00000110 ; 0334 1-66: ** .byte %01100110 ; 0335 1-66: ** ** .byte %00111100 ; 0336 1-66: **** .byte %00000000 ; 0337 1-66: .byte %00111100 ; 0338 1-67: **** .byte %01100110 ; 0339 1-67: ** ** .byte %00000110 ; 033A 1-67: ** .byte %00011100 ; 033B 1-67: *** .byte %00000110 ; 033C 1-67: ** .byte %01100110 ; 033D 1-67: ** ** .byte %00111100 ; 033E 1-67: **** .byte %00000000 ; 033F 1-67: .byte %00000110 ; 0340 1-68: ** .byte %00001110 ; 0341 1-68: *** .byte %00011110 ; 0342 1-68: **** .byte %01100110 ; 0343 1-68: ** ** .byte %01111111 ; 0344 1-68: ******* .byte %00000110 ; 0345 1-68: ** .byte %00000110 ; 0346 1-68: ** .byte %00000000 ; 0347 1-68: .byte %00000110 ; 0348 1-69: ** .byte %00001110 ; 0349 1-69: *** .byte %00011110 ; 034A 1-69: **** .byte %01100110 ; 034B 1-69: ** ** .byte %01111111 ; 034C 1-69: ******* .byte %00000110 ; 034D 1-69: ** .byte %00000110 ; 034E 1-69: ** .byte %00000000 ; 034F 1-69: .byte %01111110 ; 0350 1-6a: ****** .byte %01100000 ; 0351 1-6a: ** .byte %01111100 ; 0352 1-6a: ***** .byte %00000110 ; 0353 1-6a: ** .byte %00000110 ; 0354 1-6a: ** .byte %01100110 ; 0355 1-6a: ** ** .byte %00111100 ; 0356 1-6a: **** .byte %00000000 ; 0357 1-6a: .byte %01111110 ; 0358 1-6b: ****** .byte %01100000 ; 0359 1-6b: ** .byte %01111100 ; 035A 1-6b: ***** .byte %00000110 ; 035B 1-6b: ** .byte %00000110 ; 035C 1-6b: ** .byte %01100110 ; 035D 1-6b: ** ** .byte %00111100 ; 035E 1-6b: **** .byte %00000000 ; 035F 1-6b: .byte %00111100 ; 0360 1-6c: **** .byte %01100110 ; 0361 1-6c: ** ** .byte %01100000 ; 0362 1-6c: ** .byte %01111100 ; 0363 1-6c: ***** .byte %01100110 ; 0364 1-6c: ** ** .byte %01100110 ; 0365 1-6c: ** ** .byte %00111100 ; 0366 1-6c: **** .byte %00000000 ; 0367 1-6c: .byte %00111100 ; 0368 1-6d: **** .byte %01100110 ; 0369 1-6d: ** ** .byte %01100000 ; 036A 1-6d: ** .byte %01111100 ; 036B 1-6d: ***** .byte %01100110 ; 036C 1-6d: ** ** .byte %01100110 ; 036D 1-6d: ** ** .byte %00111100 ; 036E 1-6d: **** .byte %00000000 ; 036F 1-6d: .byte %01111110 ; 0370 1-6e: ****** .byte %01100110 ; 0371 1-6e: ** ** .byte %00001100 ; 0372 1-6e: ** .byte %00011000 ; 0373 1-6e: ** .byte %00011000 ; 0374 1-6e: ** .byte %00011000 ; 0375 1-6e: ** .byte %00011000 ; 0376 1-6e: ** .byte %00000000 ; 0377 1-6e: .byte %01111110 ; 0378 1-6f: ****** .byte %01100110 ; 0379 1-6f: ** ** .byte %00001100 ; 037A 1-6f: ** .byte %00011000 ; 037B 1-6f: ** .byte %00011000 ; 037C 1-6f: ** .byte %00011000 ; 037D 1-6f: ** .byte %00011000 ; 037E 1-6f: ** .byte %00000000 ; 037F 1-6f: .byte %00111100 ; 0380 1-70: **** .byte %01100110 ; 0381 1-70: ** ** .byte %01100110 ; 0382 1-70: ** ** .byte %00111100 ; 0383 1-70: **** .byte %01100110 ; 0384 1-70: ** ** .byte %01100110 ; 0385 1-70: ** ** .byte %00111100 ; 0386 1-70: **** .byte %00000000 ; 0387 1-70: .byte %00111100 ; 0388 1-71: **** .byte %01100110 ; 0389 1-71: ** ** .byte %01100110 ; 038A 1-71: ** ** .byte %00111100 ; 038B 1-71: **** .byte %01100110 ; 038C 1-71: ** ** .byte %01100110 ; 038D 1-71: ** ** .byte %00111100 ; 038E 1-71: **** .byte %00000000 ; 038F 1-71: .byte %00111100 ; 0390 1-72: **** .byte %01100110 ; 0391 1-72: ** ** .byte %01100110 ; 0392 1-72: ** ** .byte %00111110 ; 0393 1-72: ***** .byte %00000110 ; 0394 1-72: ** .byte %01100110 ; 0395 1-72: ** ** .byte %00111100 ; 0396 1-72: **** .byte %00000000 ; 0397 1-72: .byte %00111100 ; 0398 1-73: **** .byte %01100110 ; 0399 1-73: ** ** .byte %01100110 ; 039A 1-73: ** ** .byte %00111110 ; 039B 1-73: ***** .byte %00000110 ; 039C 1-73: ** .byte %01100110 ; 039D 1-73: ** ** .byte %00111100 ; 039E 1-73: **** .byte %00000000 ; 039F 1-73: .byte %00000000 ; 03A0 1-74: .byte %00000000 ; 03A1 1-74: .byte %00011000 ; 03A2 1-74: ** .byte %00000000 ; 03A3 1-74: .byte %00000000 ; 03A4 1-74: .byte %00011000 ; 03A5 1-74: ** .byte %00000000 ; 03A6 1-74: .byte %00000000 ; 03A7 1-74: .byte %00000000 ; 03A8 1-75: .byte %00000000 ; 03A9 1-75: .byte %00011000 ; 03AA 1-75: ** .byte %00000000 ; 03AB 1-75: .byte %00000000 ; 03AC 1-75: .byte %00011000 ; 03AD 1-75: ** .byte %00000000 ; 03AE 1-75: .byte %00000000 ; 03AF 1-75: .byte %00000000 ; 03B0 1-76: .byte %00000000 ; 03B1 1-76: .byte %00011000 ; 03B2 1-76: ** .byte %00000000 ; 03B3 1-76: .byte %00000000 ; 03B4 1-76: .byte %00011000 ; 03B5 1-76: ** .byte %00011000 ; 03B6 1-76: ** .byte %00110000 ; 03B7 1-76: ** .byte %00000000 ; 03B8 1-77: .byte %00000000 ; 03B9 1-77: .byte %00011000 ; 03BA 1-77: ** .byte %00000000 ; 03BB 1-77: .byte %00000000 ; 03BC 1-77: .byte %00011000 ; 03BD 1-77: ** .byte %00011000 ; 03BE 1-77: ** .byte %00110000 ; 03BF 1-77: ** .byte %00001110 ; 03C0 1-78: *** .byte %00011000 ; 03C1 1-78: ** .byte %00110000 ; 03C2 1-78: ** .byte %01100000 ; 03C3 1-78: ** .byte %00110000 ; 03C4 1-78: ** .byte %00011000 ; 03C5 1-78: ** .byte %00001110 ; 03C6 1-78: *** .byte %00000000 ; 03C7 1-78: .byte %00001110 ; 03C8 1-79: *** .byte %00011000 ; 03C9 1-79: ** .byte %00110000 ; 03CA 1-79: ** .byte %01100000 ; 03CB 1-79: ** .byte %00110000 ; 03CC 1-79: ** .byte %00011000 ; 03CD 1-79: ** .byte %00001110 ; 03CE 1-79: *** .byte %00000000 ; 03CF 1-79: .byte %00000000 ; 03D0 1-7a: .byte %00000000 ; 03D1 1-7a: .byte %01111110 ; 03D2 1-7a: ****** .byte %00000000 ; 03D3 1-7a: .byte %01111110 ; 03D4 1-7a: ****** .byte %00000000 ; 03D5 1-7a: .byte %00000000 ; 03D6 1-7a: .byte %00000000 ; 03D7 1-7a: .byte %00000000 ; 03D8 1-7b: .byte %00000000 ; 03D9 1-7b: .byte %01111110 ; 03DA 1-7b: ****** .byte %00000000 ; 03DB 1-7b: .byte %01111110 ; 03DC 1-7b: ****** .byte %00000000 ; 03DD 1-7b: .byte %00000000 ; 03DE 1-7b: .byte %00000000 ; 03DF 1-7b: .byte %01110000 ; 03E0 1-7c: *** .byte %00011000 ; 03E1 1-7c: ** .byte %00001100 ; 03E2 1-7c: ** .byte %00000110 ; 03E3 1-7c: ** .byte %00001100 ; 03E4 1-7c: ** .byte %00011000 ; 03E5 1-7c: ** .byte %01110000 ; 03E6 1-7c: *** .byte %00000000 ; 03E7 1-7c: .byte %01110000 ; 03E8 1-7d: *** .byte %00011000 ; 03E9 1-7d: ** .byte %00001100 ; 03EA 1-7d: ** .byte %00000110 ; 03EB 1-7d: ** .byte %00001100 ; 03EC 1-7d: ** .byte %00011000 ; 03ED 1-7d: ** .byte %01110000 ; 03EE 1-7d: *** .byte %00000000 ; 03EF 1-7d: .byte %00111100 ; 03F0 1-7e: **** .byte %01100110 ; 03F1 1-7e: ** ** .byte %00000110 ; 03F2 1-7e: ** .byte %00001100 ; 03F3 1-7e: ** .byte %00011000 ; 03F4 1-7e: ** .byte %00000000 ; 03F5 1-7e: .byte %00011000 ; 03F6 1-7e: ** .byte %00000000 ; 03F7 1-7e: .byte %00111100 ; 03F8 1-7f: **** .byte %01100110 ; 03F9 1-7f: ** ** .byte %00000110 ; 03FA 1-7f: ** .byte %00001100 ; 03FB 1-7f: ** .byte %00011000 ; 03FC 1-7f: ** .byte %00000000 ; 03FD 1-7f: .byte %00011000 ; 03FE 1-7f: ** .byte %00000000 ; 03FF 1-7f: .byte %00111100 ; 0400 1-80: **** .byte %01100110 ; 0401 1-80: ** ** .byte %01101110 ; 0402 1-80: ** *** .byte %01101110 ; 0403 1-80: ** *** .byte %01100000 ; 0404 1-80: ** .byte %01100010 ; 0405 1-80: ** * .byte %00111100 ; 0406 1-80: **** .byte %00000000 ; 0407 1-80: .byte %00111100 ; 0408 1-81: **** .byte %01100110 ; 0409 1-81: ** ** .byte %01101110 ; 040A 1-81: ** *** .byte %01101110 ; 040B 1-81: ** *** .byte %01100000 ; 040C 1-81: ** .byte %01100010 ; 040D 1-81: ** * .byte %00111100 ; 040E 1-81: **** .byte %00000000 ; 040F 1-81: .byte %00011000 ; 0410 1-82: ** .byte %00111100 ; 0411 1-82: **** .byte %01100110 ; 0412 1-82: ** ** .byte %01111110 ; 0413 1-82: ****** .byte %01100110 ; 0414 1-82: ** ** .byte %01100110 ; 0415 1-82: ** ** .byte %01100110 ; 0416 1-82: ** ** .byte %00000000 ; 0417 1-82: .byte %00011000 ; 0418 1-83: ** .byte %00111100 ; 0419 1-83: **** .byte %01100110 ; 041A 1-83: ** ** .byte %01111110 ; 041B 1-83: ****** .byte %01100110 ; 041C 1-83: ** ** .byte %01100110 ; 041D 1-83: ** ** .byte %01100110 ; 041E 1-83: ** ** .byte %00000000 ; 041F 1-83: .byte %01111100 ; 0420 1-84: ***** .byte %01100110 ; 0421 1-84: ** ** .byte %01100110 ; 0422 1-84: ** ** .byte %01111100 ; 0423 1-84: ***** .byte %01100110 ; 0424 1-84: ** ** .byte %01100110 ; 0425 1-84: ** ** .byte %01111100 ; 0426 1-84: ***** .byte %00000000 ; 0427 1-84: .byte %01111100 ; 0428 1-85: ***** .byte %01100110 ; 0429 1-85: ** ** .byte %01100110 ; 042A 1-85: ** ** .byte %01111100 ; 042B 1-85: ***** .byte %01100110 ; 042C 1-85: ** ** .byte %01100110 ; 042D 1-85: ** ** .byte %01111100 ; 042E 1-85: ***** .byte %00000000 ; 042F 1-85: .byte %00111100 ; 0430 1-86: **** .byte %01100110 ; 0431 1-86: ** ** .byte %01100000 ; 0432 1-86: ** .byte %01100000 ; 0433 1-86: ** .byte %01100000 ; 0434 1-86: ** .byte %01100110 ; 0435 1-86: ** ** .byte %00111100 ; 0436 1-86: **** .byte %00000000 ; 0437 1-86: .byte %00111100 ; 0438 1-87: **** .byte %01100110 ; 0439 1-87: ** ** .byte %01100000 ; 043A 1-87: ** .byte %01100000 ; 043B 1-87: ** .byte %01100000 ; 043C 1-87: ** .byte %01100110 ; 043D 1-87: ** ** .byte %00111100 ; 043E 1-87: **** .byte %00000000 ; 043F 1-87: .byte %01111000 ; 0440 1-88: **** .byte %01101100 ; 0441 1-88: ** ** .byte %01100110 ; 0442 1-88: ** ** .byte %01100110 ; 0443 1-88: ** ** .byte %01100110 ; 0444 1-88: ** ** .byte %01101100 ; 0445 1-88: ** ** .byte %01111000 ; 0446 1-88: **** .byte %00000000 ; 0447 1-88: .byte %01111000 ; 0448 1-89: **** .byte %01101100 ; 0449 1-89: ** ** .byte %01100110 ; 044A 1-89: ** ** .byte %01100110 ; 044B 1-89: ** ** .byte %01100110 ; 044C 1-89: ** ** .byte %01101100 ; 044D 1-89: ** ** .byte %01111000 ; 044E 1-89: **** .byte %00000000 ; 044F 1-89: .byte %01111110 ; 0450 1-8a: ****** .byte %01100000 ; 0451 1-8a: ** .byte %01100000 ; 0452 1-8a: ** .byte %01111000 ; 0453 1-8a: **** .byte %01100000 ; 0454 1-8a: ** .byte %01100000 ; 0455 1-8a: ** .byte %01111110 ; 0456 1-8a: ****** .byte %00000000 ; 0457 1-8a: .byte %01111110 ; 0458 1-8b: ****** .byte %01100000 ; 0459 1-8b: ** .byte %01100000 ; 045A 1-8b: ** .byte %01111000 ; 045B 1-8b: **** .byte %01100000 ; 045C 1-8b: ** .byte %01100000 ; 045D 1-8b: ** .byte %01111110 ; 045E 1-8b: ****** .byte %00000000 ; 045F 1-8b: .byte %01111110 ; 0460 1-8c: ****** .byte %01100000 ; 0461 1-8c: ** .byte %01100000 ; 0462 1-8c: ** .byte %01111000 ; 0463 1-8c: **** .byte %01100000 ; 0464 1-8c: ** .byte %01100000 ; 0465 1-8c: ** .byte %01100000 ; 0466 1-8c: ** .byte %00000000 ; 0467 1-8c: .byte %01111110 ; 0468 1-8d: ****** .byte %01100000 ; 0469 1-8d: ** .byte %01100000 ; 046A 1-8d: ** .byte %01111000 ; 046B 1-8d: **** .byte %01100000 ; 046C 1-8d: ** .byte %01100000 ; 046D 1-8d: ** .byte %01100000 ; 046E 1-8d: ** .byte %00000000 ; 046F 1-8d: .byte %00111100 ; 0470 1-8e: **** .byte %01100110 ; 0471 1-8e: ** ** .byte %01100000 ; 0472 1-8e: ** .byte %01101110 ; 0473 1-8e: ** *** .byte %01100110 ; 0474 1-8e: ** ** .byte %01100110 ; 0475 1-8e: ** ** .byte %00111100 ; 0476 1-8e: **** .byte %00000000 ; 0477 1-8e: .byte %00111100 ; 0478 1-8f: **** .byte %01100110 ; 0479 1-8f: ** ** .byte %01100000 ; 047A 1-8f: ** .byte %01101110 ; 047B 1-8f: ** *** .byte %01100110 ; 047C 1-8f: ** ** .byte %01100110 ; 047D 1-8f: ** ** .byte %00111100 ; 047E 1-8f: **** .byte %00000000 ; 047F 1-8f: .byte %01100110 ; 0480 1-90: ** ** .byte %01100110 ; 0481 1-90: ** ** .byte %01100110 ; 0482 1-90: ** ** .byte %01111110 ; 0483 1-90: ****** .byte %01100110 ; 0484 1-90: ** ** .byte %01100110 ; 0485 1-90: ** ** .byte %01100110 ; 0486 1-90: ** ** .byte %00000000 ; 0487 1-90: .byte %01100110 ; 0488 1-91: ** ** .byte %01100110 ; 0489 1-91: ** ** .byte %01100110 ; 048A 1-91: ** ** .byte %01111110 ; 048B 1-91: ****** .byte %01100110 ; 048C 1-91: ** ** .byte %01100110 ; 048D 1-91: ** ** .byte %01100110 ; 048E 1-91: ** ** .byte %00000000 ; 048F 1-91: .byte %00111100 ; 0490 1-92: **** .byte %00011000 ; 0491 1-92: ** .byte %00011000 ; 0492 1-92: ** .byte %00011000 ; 0493 1-92: ** .byte %00011000 ; 0494 1-92: ** .byte %00011000 ; 0495 1-92: ** .byte %00111100 ; 0496 1-92: **** .byte %00000000 ; 0497 1-92: .byte %00111100 ; 0498 1-93: **** .byte %00011000 ; 0499 1-93: ** .byte %00011000 ; 049A 1-93: ** .byte %00011000 ; 049B 1-93: ** .byte %00011000 ; 049C 1-93: ** .byte %00011000 ; 049D 1-93: ** .byte %00111100 ; 049E 1-93: **** .byte %00000000 ; 049F 1-93: .byte %00011110 ; 04A0 1-94: **** .byte %00001100 ; 04A1 1-94: ** .byte %00001100 ; 04A2 1-94: ** .byte %00001100 ; 04A3 1-94: ** .byte %00001100 ; 04A4 1-94: ** .byte %01101100 ; 04A5 1-94: ** ** .byte %00111000 ; 04A6 1-94: *** .byte %00000000 ; 04A7 1-94: .byte %00011110 ; 04A8 1-95: **** .byte %00001100 ; 04A9 1-95: ** .byte %00001100 ; 04AA 1-95: ** .byte %00001100 ; 04AB 1-95: ** .byte %00001100 ; 04AC 1-95: ** .byte %01101100 ; 04AD 1-95: ** ** .byte %00111000 ; 04AE 1-95: *** .byte %00000000 ; 04AF 1-95: .byte %01100110 ; 04B0 1-96: ** ** .byte %01101100 ; 04B1 1-96: ** ** .byte %01111000 ; 04B2 1-96: **** .byte %01110000 ; 04B3 1-96: *** .byte %01111000 ; 04B4 1-96: **** .byte %01101100 ; 04B5 1-96: ** ** .byte %01100110 ; 04B6 1-96: ** ** .byte %00000000 ; 04B7 1-96: .byte %01100110 ; 04B8 1-97: ** ** .byte %01101100 ; 04B9 1-97: ** ** .byte %01111000 ; 04BA 1-97: **** .byte %01110000 ; 04BB 1-97: *** .byte %01111000 ; 04BC 1-97: **** .byte %01101100 ; 04BD 1-97: ** ** .byte %01100110 ; 04BE 1-97: ** ** .byte %00000000 ; 04BF 1-97: .byte %01100000 ; 04C0 1-98: ** .byte %01100000 ; 04C1 1-98: ** .byte %01100000 ; 04C2 1-98: ** .byte %01100000 ; 04C3 1-98: ** .byte %01100000 ; 04C4 1-98: ** .byte %01100000 ; 04C5 1-98: ** .byte %01111110 ; 04C6 1-98: ****** .byte %00000000 ; 04C7 1-98: .byte %01100000 ; 04C8 1-99: ** .byte %01100000 ; 04C9 1-99: ** .byte %01100000 ; 04CA 1-99: ** .byte %01100000 ; 04CB 1-99: ** .byte %01100000 ; 04CC 1-99: ** .byte %01100000 ; 04CD 1-99: ** .byte %01111110 ; 04CE 1-99: ****** .byte %00000000 ; 04CF 1-99: .byte %01100011 ; 04D0 1-9a: ** ** .byte %01110111 ; 04D1 1-9a: *** *** .byte %01111111 ; 04D2 1-9a: ******* .byte %01101011 ; 04D3 1-9a: ** * ** .byte %01100011 ; 04D4 1-9a: ** ** .byte %01100011 ; 04D5 1-9a: ** ** .byte %01100011 ; 04D6 1-9a: ** ** .byte %00000000 ; 04D7 1-9a: .byte %01100011 ; 04D8 1-9b: ** ** .byte %01110111 ; 04D9 1-9b: *** *** .byte %01111111 ; 04DA 1-9b: ******* .byte %01101011 ; 04DB 1-9b: ** * ** .byte %01100011 ; 04DC 1-9b: ** ** .byte %01100011 ; 04DD 1-9b: ** ** .byte %01100011 ; 04DE 1-9b: ** ** .byte %00000000 ; 04DF 1-9b: .byte %01100110 ; 04E0 1-9c: ** ** .byte %01110110 ; 04E1 1-9c: *** ** .byte %01111110 ; 04E2 1-9c: ****** .byte %01111110 ; 04E3 1-9c: ****** .byte %01101110 ; 04E4 1-9c: ** *** .byte %01100110 ; 04E5 1-9c: ** ** .byte %01100110 ; 04E6 1-9c: ** ** .byte %00000000 ; 04E7 1-9c: .byte %01100110 ; 04E8 1-9d: ** ** .byte %01110110 ; 04E9 1-9d: *** ** .byte %01111110 ; 04EA 1-9d: ****** .byte %01111110 ; 04EB 1-9d: ****** .byte %01101110 ; 04EC 1-9d: ** *** .byte %01100110 ; 04ED 1-9d: ** ** .byte %01100110 ; 04EE 1-9d: ** ** .byte %00000000 ; 04EF 1-9d: .byte %00111100 ; 04F0 1-9e: **** .byte %01100110 ; 04F1 1-9e: ** ** .byte %01100110 ; 04F2 1-9e: ** ** .byte %01100110 ; 04F3 1-9e: ** ** .byte %01100110 ; 04F4 1-9e: ** ** .byte %01100110 ; 04F5 1-9e: ** ** .byte %00111100 ; 04F6 1-9e: **** .byte %00000000 ; 04F7 1-9e: .byte %00111100 ; 04F8 1-9f: **** .byte %01100110 ; 04F9 1-9f: ** ** .byte %01100110 ; 04FA 1-9f: ** ** .byte %01100110 ; 04FB 1-9f: ** ** .byte %01100110 ; 04FC 1-9f: ** ** .byte %01100110 ; 04FD 1-9f: ** ** .byte %00111100 ; 04FE 1-9f: **** .byte %00000000 ; 04FF 1-9f: .byte %01111100 ; 0500 1-a0: ***** .byte %01100110 ; 0501 1-a0: ** ** .byte %01100110 ; 0502 1-a0: ** ** .byte %01111100 ; 0503 1-a0: ***** .byte %01100000 ; 0504 1-a0: ** .byte %01100000 ; 0505 1-a0: ** .byte %01100000 ; 0506 1-a0: ** .byte %00000000 ; 0507 1-a0: .byte %01111100 ; 0508 1-a1: ***** .byte %01100110 ; 0509 1-a1: ** ** .byte %01100110 ; 050A 1-a1: ** ** .byte %01111100 ; 050B 1-a1: ***** .byte %01100000 ; 050C 1-a1: ** .byte %01100000 ; 050D 1-a1: ** .byte %01100000 ; 050E 1-a1: ** .byte %00000000 ; 050F 1-a1: .byte %00111100 ; 0510 1-a2: **** .byte %01100110 ; 0511 1-a2: ** ** .byte %01100110 ; 0512 1-a2: ** ** .byte %01100110 ; 0513 1-a2: ** ** .byte %01100110 ; 0514 1-a2: ** ** .byte %00111100 ; 0515 1-a2: **** .byte %00001110 ; 0516 1-a2: *** .byte %00000000 ; 0517 1-a2: .byte %00111100 ; 0518 1-a3: **** .byte %01100110 ; 0519 1-a3: ** ** .byte %01100110 ; 051A 1-a3: ** ** .byte %01100110 ; 051B 1-a3: ** ** .byte %01100110 ; 051C 1-a3: ** ** .byte %00111100 ; 051D 1-a3: **** .byte %00001110 ; 051E 1-a3: *** .byte %00000000 ; 051F 1-a3: .byte %01111100 ; 0520 1-a4: ***** .byte %01100110 ; 0521 1-a4: ** ** .byte %01100110 ; 0522 1-a4: ** ** .byte %01111100 ; 0523 1-a4: ***** .byte %01111000 ; 0524 1-a4: **** .byte %01101100 ; 0525 1-a4: ** ** .byte %01100110 ; 0526 1-a4: ** ** .byte %00000000 ; 0527 1-a4: .byte %01111100 ; 0528 1-a5: ***** .byte %01100110 ; 0529 1-a5: ** ** .byte %01100110 ; 052A 1-a5: ** ** .byte %01111100 ; 052B 1-a5: ***** .byte %01111000 ; 052C 1-a5: **** .byte %01101100 ; 052D 1-a5: ** ** .byte %01100110 ; 052E 1-a5: ** ** .byte %00000000 ; 052F 1-a5: .byte %00111100 ; 0530 1-a6: **** .byte %01100110 ; 0531 1-a6: ** ** .byte %01100000 ; 0532 1-a6: ** .byte %00111100 ; 0533 1-a6: **** .byte %00000110 ; 0534 1-a6: ** .byte %01100110 ; 0535 1-a6: ** ** .byte %00111100 ; 0536 1-a6: **** .byte %00000000 ; 0537 1-a6: .byte %00111100 ; 0538 1-a7: **** .byte %01100110 ; 0539 1-a7: ** ** .byte %01100000 ; 053A 1-a7: ** .byte %00111100 ; 053B 1-a7: **** .byte %00000110 ; 053C 1-a7: ** .byte %01100110 ; 053D 1-a7: ** ** .byte %00111100 ; 053E 1-a7: **** .byte %00000000 ; 053F 1-a7: .byte %01111110 ; 0540 1-a8: ****** .byte %00011000 ; 0541 1-a8: ** .byte %00011000 ; 0542 1-a8: ** .byte %00011000 ; 0543 1-a8: ** .byte %00011000 ; 0544 1-a8: ** .byte %00011000 ; 0545 1-a8: ** .byte %00011000 ; 0546 1-a8: ** .byte %00000000 ; 0547 1-a8: .byte %01111110 ; 0548 1-a9: ****** .byte %00011000 ; 0549 1-a9: ** .byte %00011000 ; 054A 1-a9: ** .byte %00011000 ; 054B 1-a9: ** .byte %00011000 ; 054C 1-a9: ** .byte %00011000 ; 054D 1-a9: ** .byte %00011000 ; 054E 1-a9: ** .byte %00000000 ; 054F 1-a9: .byte %01100110 ; 0550 1-aa: ** ** .byte %01100110 ; 0551 1-aa: ** ** .byte %01100110 ; 0552 1-aa: ** ** .byte %01100110 ; 0553 1-aa: ** ** .byte %01100110 ; 0554 1-aa: ** ** .byte %01100110 ; 0555 1-aa: ** ** .byte %00111100 ; 0556 1-aa: **** .byte %00000000 ; 0557 1-aa: .byte %01100110 ; 0558 1-ab: ** ** .byte %01100110 ; 0559 1-ab: ** ** .byte %01100110 ; 055A 1-ab: ** ** .byte %01100110 ; 055B 1-ab: ** ** .byte %01100110 ; 055C 1-ab: ** ** .byte %01100110 ; 055D 1-ab: ** ** .byte %00111100 ; 055E 1-ab: **** .byte %00000000 ; 055F 1-ab: .byte %01100110 ; 0560 1-ac: ** ** .byte %01100110 ; 0561 1-ac: ** ** .byte %01100110 ; 0562 1-ac: ** ** .byte %01100110 ; 0563 1-ac: ** ** .byte %01100110 ; 0564 1-ac: ** ** .byte %00111100 ; 0565 1-ac: **** .byte %00011000 ; 0566 1-ac: ** .byte %00000000 ; 0567 1-ac: .byte %01100110 ; 0568 1-ad: ** ** .byte %01100110 ; 0569 1-ad: ** ** .byte %01100110 ; 056A 1-ad: ** ** .byte %01100110 ; 056B 1-ad: ** ** .byte %01100110 ; 056C 1-ad: ** ** .byte %00111100 ; 056D 1-ad: **** .byte %00011000 ; 056E 1-ad: ** .byte %00000000 ; 056F 1-ad: .byte %01100011 ; 0570 1-ae: ** ** .byte %01100011 ; 0571 1-ae: ** ** .byte %01100011 ; 0572 1-ae: ** ** .byte %01101011 ; 0573 1-ae: ** * ** .byte %01111111 ; 0574 1-ae: ******* .byte %01110111 ; 0575 1-ae: *** *** .byte %01100011 ; 0576 1-ae: ** ** .byte %00000000 ; 0577 1-ae: .byte %01100011 ; 0578 1-af: ** ** .byte %01100011 ; 0579 1-af: ** ** .byte %01100011 ; 057A 1-af: ** ** .byte %01101011 ; 057B 1-af: ** * ** .byte %01111111 ; 057C 1-af: ******* .byte %01110111 ; 057D 1-af: *** *** .byte %01100011 ; 057E 1-af: ** ** .byte %00000000 ; 057F 1-af: .byte %01100110 ; 0580 1-b0: ** ** .byte %01100110 ; 0581 1-b0: ** ** .byte %00111100 ; 0582 1-b0: **** .byte %00011000 ; 0583 1-b0: ** .byte %00111100 ; 0584 1-b0: **** .byte %01100110 ; 0585 1-b0: ** ** .byte %01100110 ; 0586 1-b0: ** ** .byte %00000000 ; 0587 1-b0: .byte %01100110 ; 0588 1-b1: ** ** .byte %01100110 ; 0589 1-b1: ** ** .byte %00111100 ; 058A 1-b1: **** .byte %00011000 ; 058B 1-b1: ** .byte %00111100 ; 058C 1-b1: **** .byte %01100110 ; 058D 1-b1: ** ** .byte %01100110 ; 058E 1-b1: ** ** .byte %00000000 ; 058F 1-b1: .byte %01100110 ; 0590 1-b2: ** ** .byte %01100110 ; 0591 1-b2: ** ** .byte %01100110 ; 0592 1-b2: ** ** .byte %00111100 ; 0593 1-b2: **** .byte %00011000 ; 0594 1-b2: ** .byte %00011000 ; 0595 1-b2: ** .byte %00011000 ; 0596 1-b2: ** .byte %00000000 ; 0597 1-b2: .byte %01100110 ; 0598 1-b3: ** ** .byte %01100110 ; 0599 1-b3: ** ** .byte %01100110 ; 059A 1-b3: ** ** .byte %00111100 ; 059B 1-b3: **** .byte %00011000 ; 059C 1-b3: ** .byte %00011000 ; 059D 1-b3: ** .byte %00011000 ; 059E 1-b3: ** .byte %00000000 ; 059F 1-b3: .byte %01111110 ; 05A0 1-b4: ****** .byte %00000110 ; 05A1 1-b4: ** .byte %00001100 ; 05A2 1-b4: ** .byte %00011000 ; 05A3 1-b4: ** .byte %00110000 ; 05A4 1-b4: ** .byte %01100000 ; 05A5 1-b4: ** .byte %01111110 ; 05A6 1-b4: ****** .byte %00000000 ; 05A7 1-b4: .byte %01111110 ; 05A8 1-b5: ****** .byte %00000110 ; 05A9 1-b5: ** .byte %00001100 ; 05AA 1-b5: ** .byte %00011000 ; 05AB 1-b5: ** .byte %00110000 ; 05AC 1-b5: ** .byte %01100000 ; 05AD 1-b5: ** .byte %01111110 ; 05AE 1-b5: ****** .byte %00000000 ; 05AF 1-b5: .byte %00111100 ; 05B0 1-b6: **** .byte %00110000 ; 05B1 1-b6: ** .byte %00110000 ; 05B2 1-b6: ** .byte %00110000 ; 05B3 1-b6: ** .byte %00110000 ; 05B4 1-b6: ** .byte %00110000 ; 05B5 1-b6: ** .byte %00111100 ; 05B6 1-b6: **** .byte %00000000 ; 05B7 1-b6: .byte %00111100 ; 05B8 1-b7: **** .byte %00110000 ; 05B9 1-b7: ** .byte %00110000 ; 05BA 1-b7: ** .byte %00110000 ; 05BB 1-b7: ** .byte %00110000 ; 05BC 1-b7: ** .byte %00110000 ; 05BD 1-b7: ** .byte %00111100 ; 05BE 1-b7: **** .byte %00000000 ; 05BF 1-b7: .byte %01100000 ; 05C0 1-b8: ** .byte %00110000 ; 05C1 1-b8: ** .byte %00011000 ; 05C2 1-b8: ** .byte %00001100 ; 05C3 1-b8: ** .byte %00000110 ; 05C4 1-b8: ** .byte %00000011 ; 05C5 1-b8: ** .byte %00000000 ; 05C6 1-b8: .byte %00000000 ; 05C7 1-b8: .byte %01100000 ; 05C8 1-b9: ** .byte %00110000 ; 05C9 1-b9: ** .byte %00011000 ; 05CA 1-b9: ** .byte %00001100 ; 05CB 1-b9: ** .byte %00000110 ; 05CC 1-b9: ** .byte %00000011 ; 05CD 1-b9: ** .byte %00000000 ; 05CE 1-b9: .byte %00000000 ; 05CF 1-b9: .byte %00111100 ; 05D0 1-ba: **** .byte %00001100 ; 05D1 1-ba: ** .byte %00001100 ; 05D2 1-ba: ** .byte %00001100 ; 05D3 1-ba: ** .byte %00001100 ; 05D4 1-ba: ** .byte %00001100 ; 05D5 1-ba: ** .byte %00111100 ; 05D6 1-ba: **** .byte %00000000 ; 05D7 1-ba: .byte %00111100 ; 05D8 1-bb: **** .byte %00001100 ; 05D9 1-bb: ** .byte %00001100 ; 05DA 1-bb: ** .byte %00001100 ; 05DB 1-bb: ** .byte %00001100 ; 05DC 1-bb: ** .byte %00001100 ; 05DD 1-bb: ** .byte %00111100 ; 05DE 1-bb: **** .byte %00000000 ; 05DF 1-bb: .byte %00000000 ; 05E0 1-bc: .byte %00011000 ; 05E1 1-bc: ** .byte %00111100 ; 05E2 1-bc: **** .byte %01100110 ; 05E3 1-bc: ** ** .byte %00000000 ; 05E4 1-bc: .byte %00000000 ; 05E5 1-bc: .byte %00000000 ; 05E6 1-bc: .byte %00000000 ; 05E7 1-bc: .byte %00000000 ; 05E8 1-bd: .byte %00011000 ; 05E9 1-bd: ** .byte %00111100 ; 05EA 1-bd: **** .byte %01100110 ; 05EB 1-bd: ** ** .byte %00000000 ; 05EC 1-bd: .byte %00000000 ; 05ED 1-bd: .byte %00000000 ; 05EE 1-bd: .byte %00000000 ; 05EF 1-bd: .byte %00000000 ; 05F0 1-be: .byte %00000000 ; 05F1 1-be: .byte %00000000 ; 05F2 1-be: .byte %00000000 ; 05F3 1-be: .byte %00000000 ; 05F4 1-be: .byte %00000000 ; 05F5 1-be: .byte %01111111 ; 05F6 1-be: ******* .byte %00000000 ; 05F7 1-be: .byte %00000000 ; 05F8 1-bf: .byte %00000000 ; 05F9 1-bf: .byte %00000000 ; 05FA 1-bf: .byte %00000000 ; 05FB 1-bf: .byte %00000000 ; 05FC 1-bf: .byte %00000000 ; 05FD 1-bf: .byte %01111111 ; 05FE 1-bf: ******* .byte %00000000 ; 05FF 1-bf: .byte %00011000 ; 0600 1-c0: ** .byte %00011000 ; 0601 1-c0: ** .byte %00011000 ; 0602 1-c0: ** .byte %00000000 ; 0603 1-c0: .byte %00000000 ; 0604 1-c0: .byte %00000000 ; 0605 1-c0: .byte %00000000 ; 0606 1-c0: .byte %00000000 ; 0607 1-c0: .byte %00011000 ; 0608 1-c1: ** .byte %00011000 ; 0609 1-c1: ** .byte %00011000 ; 060A 1-c1: ** .byte %00000000 ; 060B 1-c1: .byte %00000000 ; 060C 1-c1: .byte %00000000 ; 060D 1-c1: .byte %00000000 ; 060E 1-c1: .byte %00000000 ; 060F 1-c1: .byte %00000000 ; 0610 1-c2: .byte %00000000 ; 0611 1-c2: .byte %00111100 ; 0612 1-c2: **** .byte %00000110 ; 0613 1-c2: ** .byte %00111110 ; 0614 1-c2: ***** .byte %01100110 ; 0615 1-c2: ** ** .byte %00111110 ; 0616 1-c2: ***** .byte %00000000 ; 0617 1-c2: .byte %00000000 ; 0618 1-c3: .byte %00000000 ; 0619 1-c3: .byte %00111100 ; 061A 1-c3: **** .byte %00000110 ; 061B 1-c3: ** .byte %00111110 ; 061C 1-c3: ***** .byte %01100110 ; 061D 1-c3: ** ** .byte %00111110 ; 061E 1-c3: ***** .byte %00000000 ; 061F 1-c3: .byte %00000000 ; 0620 1-c4: .byte %01100000 ; 0621 1-c4: ** .byte %01100000 ; 0622 1-c4: ** .byte %01111100 ; 0623 1-c4: ***** .byte %01100110 ; 0624 1-c4: ** ** .byte %01100110 ; 0625 1-c4: ** ** .byte %01111100 ; 0626 1-c4: ***** .byte %00000000 ; 0627 1-c4: .byte %00000000 ; 0628 1-c5: .byte %01100000 ; 0629 1-c5: ** .byte %01100000 ; 062A 1-c5: ** .byte %01111100 ; 062B 1-c5: ***** .byte %01100110 ; 062C 1-c5: ** ** .byte %01100110 ; 062D 1-c5: ** ** .byte %01111100 ; 062E 1-c5: ***** .byte %00000000 ; 062F 1-c5: .byte %00000000 ; 0630 1-c6: .byte %00000000 ; 0631 1-c6: .byte %00111100 ; 0632 1-c6: **** .byte %01100000 ; 0633 1-c6: ** .byte %01100000 ; 0634 1-c6: ** .byte %01100000 ; 0635 1-c6: ** .byte %00111100 ; 0636 1-c6: **** .byte %00000000 ; 0637 1-c6: .byte %00000000 ; 0638 1-c7: .byte %00000000 ; 0639 1-c7: .byte %00111100 ; 063A 1-c7: **** .byte %01100000 ; 063B 1-c7: ** .byte %01100000 ; 063C 1-c7: ** .byte %01100000 ; 063D 1-c7: ** .byte %00111100 ; 063E 1-c7: **** .byte %00000000 ; 063F 1-c7: .byte %00000000 ; 0640 1-c8: .byte %00000110 ; 0641 1-c8: ** .byte %00000110 ; 0642 1-c8: ** .byte %00111110 ; 0643 1-c8: ***** .byte %01100110 ; 0644 1-c8: ** ** .byte %01100110 ; 0645 1-c8: ** ** .byte %00111110 ; 0646 1-c8: ***** .byte %00000000 ; 0647 1-c8: .byte %00000000 ; 0648 1-c9: .byte %00000110 ; 0649 1-c9: ** .byte %00000110 ; 064A 1-c9: ** .byte %00111110 ; 064B 1-c9: ***** .byte %01100110 ; 064C 1-c9: ** ** .byte %01100110 ; 064D 1-c9: ** ** .byte %00111110 ; 064E 1-c9: ***** .byte %00000000 ; 064F 1-c9: .byte %00000000 ; 0650 1-ca: .byte %00000000 ; 0651 1-ca: .byte %00111100 ; 0652 1-ca: **** .byte %01100110 ; 0653 1-ca: ** ** .byte %01111110 ; 0654 1-ca: ****** .byte %01100000 ; 0655 1-ca: ** .byte %00111100 ; 0656 1-ca: **** .byte %00000000 ; 0657 1-ca: .byte %00000000 ; 0658 1-cb: .byte %00000000 ; 0659 1-cb: .byte %00111100 ; 065A 1-cb: **** .byte %01100110 ; 065B 1-cb: ** ** .byte %01111110 ; 065C 1-cb: ****** .byte %01100000 ; 065D 1-cb: ** .byte %00111100 ; 065E 1-cb: **** .byte %00000000 ; 065F 1-cb: .byte %00000000 ; 0660 1-cc: .byte %00001110 ; 0661 1-cc: *** .byte %00011000 ; 0662 1-cc: ** .byte %00111110 ; 0663 1-cc: ***** .byte %00011000 ; 0664 1-cc: ** .byte %00011000 ; 0665 1-cc: ** .byte %00011000 ; 0666 1-cc: ** .byte %00000000 ; 0667 1-cc: .byte %00000000 ; 0668 1-cd: .byte %00001110 ; 0669 1-cd: *** .byte %00011000 ; 066A 1-cd: ** .byte %00111110 ; 066B 1-cd: ***** .byte %00011000 ; 066C 1-cd: ** .byte %00011000 ; 066D 1-cd: ** .byte %00011000 ; 066E 1-cd: ** .byte %00000000 ; 066F 1-cd: .byte %00000000 ; 0670 1-ce: .byte %00000000 ; 0671 1-ce: .byte %00111110 ; 0672 1-ce: ***** .byte %01100110 ; 0673 1-ce: ** ** .byte %01100110 ; 0674 1-ce: ** ** .byte %00111110 ; 0675 1-ce: ***** .byte %00000110 ; 0676 1-ce: ** .byte %01111100 ; 0677 1-ce: ***** .byte %00000000 ; 0678 1-cf: .byte %00000000 ; 0679 1-cf: .byte %00111110 ; 067A 1-cf: ***** .byte %01100110 ; 067B 1-cf: ** ** .byte %01100110 ; 067C 1-cf: ** ** .byte %00111110 ; 067D 1-cf: ***** .byte %00000110 ; 067E 1-cf: ** .byte %01111100 ; 067F 1-cf: ***** .byte %00000000 ; 0680 1-d0: .byte %01100000 ; 0681 1-d0: ** .byte %01100000 ; 0682 1-d0: ** .byte %01111100 ; 0683 1-d0: ***** .byte %01100110 ; 0684 1-d0: ** ** .byte %01100110 ; 0685 1-d0: ** ** .byte %01100110 ; 0686 1-d0: ** ** .byte %00000000 ; 0687 1-d0: .byte %00000000 ; 0688 1-d1: .byte %01100000 ; 0689 1-d1: ** .byte %01100000 ; 068A 1-d1: ** .byte %01111100 ; 068B 1-d1: ***** .byte %01100110 ; 068C 1-d1: ** ** .byte %01100110 ; 068D 1-d1: ** ** .byte %01100110 ; 068E 1-d1: ** ** .byte %00000000 ; 068F 1-d1: .byte %00000000 ; 0690 1-d2: .byte %00011000 ; 0691 1-d2: ** .byte %00000000 ; 0692 1-d2: .byte %00111000 ; 0693 1-d2: *** .byte %00011000 ; 0694 1-d2: ** .byte %00011000 ; 0695 1-d2: ** .byte %00111100 ; 0696 1-d2: **** .byte %00000000 ; 0697 1-d2: .byte %00000000 ; 0698 1-d3: .byte %00011000 ; 0699 1-d3: ** .byte %00000000 ; 069A 1-d3: .byte %00111000 ; 069B 1-d3: *** .byte %00011000 ; 069C 1-d3: ** .byte %00011000 ; 069D 1-d3: ** .byte %00111100 ; 069E 1-d3: **** .byte %00000000 ; 069F 1-d3: .byte %00000000 ; 06A0 1-d4: .byte %00000110 ; 06A1 1-d4: ** .byte %00000000 ; 06A2 1-d4: .byte %00000110 ; 06A3 1-d4: ** .byte %00000110 ; 06A4 1-d4: ** .byte %00000110 ; 06A5 1-d4: ** .byte %00000110 ; 06A6 1-d4: ** .byte %00111100 ; 06A7 1-d4: **** .byte %00000000 ; 06A8 1-d5: .byte %00000110 ; 06A9 1-d5: ** .byte %00000000 ; 06AA 1-d5: .byte %00000110 ; 06AB 1-d5: ** .byte %00000110 ; 06AC 1-d5: ** .byte %00000110 ; 06AD 1-d5: ** .byte %00000110 ; 06AE 1-d5: ** .byte %00111100 ; 06AF 1-d5: **** .byte %00000000 ; 06B0 1-d6: .byte %01100000 ; 06B1 1-d6: ** .byte %01100000 ; 06B2 1-d6: ** .byte %01101100 ; 06B3 1-d6: ** ** .byte %01111000 ; 06B4 1-d6: **** .byte %01101100 ; 06B5 1-d6: ** ** .byte %01100110 ; 06B6 1-d6: ** ** .byte %00000000 ; 06B7 1-d6: .byte %00000000 ; 06B8 1-d7: .byte %01100000 ; 06B9 1-d7: ** .byte %01100000 ; 06BA 1-d7: ** .byte %01101100 ; 06BB 1-d7: ** ** .byte %01111000 ; 06BC 1-d7: **** .byte %01101100 ; 06BD 1-d7: ** ** .byte %01100110 ; 06BE 1-d7: ** ** .byte %00000000 ; 06BF 1-d7: .byte %00000000 ; 06C0 1-d8: .byte %00111000 ; 06C1 1-d8: *** .byte %00011000 ; 06C2 1-d8: ** .byte %00011000 ; 06C3 1-d8: ** .byte %00011000 ; 06C4 1-d8: ** .byte %00011000 ; 06C5 1-d8: ** .byte %00111100 ; 06C6 1-d8: **** .byte %00000000 ; 06C7 1-d8: .byte %00000000 ; 06C8 1-d9: .byte %00111000 ; 06C9 1-d9: *** .byte %00011000 ; 06CA 1-d9: ** .byte %00011000 ; 06CB 1-d9: ** .byte %00011000 ; 06CC 1-d9: ** .byte %00011000 ; 06CD 1-d9: ** .byte %00111100 ; 06CE 1-d9: **** .byte %00000000 ; 06CF 1-d9: .byte %00000000 ; 06D0 1-da: .byte %00000000 ; 06D1 1-da: .byte %01100110 ; 06D2 1-da: ** ** .byte %01111111 ; 06D3 1-da: ******* .byte %01111111 ; 06D4 1-da: ******* .byte %01101011 ; 06D5 1-da: ** * ** .byte %01100011 ; 06D6 1-da: ** ** .byte %00000000 ; 06D7 1-da: .byte %00000000 ; 06D8 1-db: .byte %00000000 ; 06D9 1-db: .byte %01100110 ; 06DA 1-db: ** ** .byte %01111111 ; 06DB 1-db: ******* .byte %01111111 ; 06DC 1-db: ******* .byte %01101011 ; 06DD 1-db: ** * ** .byte %01100011 ; 06DE 1-db: ** ** .byte %00000000 ; 06DF 1-db: .byte %00000000 ; 06E0 1-dc: .byte %00000000 ; 06E1 1-dc: .byte %01111100 ; 06E2 1-dc: ***** .byte %01100110 ; 06E3 1-dc: ** ** .byte %01100110 ; 06E4 1-dc: ** ** .byte %01100110 ; 06E5 1-dc: ** ** .byte %01100110 ; 06E6 1-dc: ** ** .byte %00000000 ; 06E7 1-dc: .byte %00000000 ; 06E8 1-dd: .byte %00000000 ; 06E9 1-dd: .byte %01111100 ; 06EA 1-dd: ***** .byte %01100110 ; 06EB 1-dd: ** ** .byte %01100110 ; 06EC 1-dd: ** ** .byte %01100110 ; 06ED 1-dd: ** ** .byte %01100110 ; 06EE 1-dd: ** ** .byte %00000000 ; 06EF 1-dd: .byte %00000000 ; 06F0 1-de: .byte %00000000 ; 06F1 1-de: .byte %00111100 ; 06F2 1-de: **** .byte %01100110 ; 06F3 1-de: ** ** .byte %01100110 ; 06F4 1-de: ** ** .byte %01100110 ; 06F5 1-de: ** ** .byte %00111100 ; 06F6 1-de: **** .byte %00000000 ; 06F7 1-de: .byte %00000000 ; 06F8 1-df: .byte %00000000 ; 06F9 1-df: .byte %00111100 ; 06FA 1-df: **** .byte %01100110 ; 06FB 1-df: ** ** .byte %01100110 ; 06FC 1-df: ** ** .byte %01100110 ; 06FD 1-df: ** ** .byte %00111100 ; 06FE 1-df: **** .byte %00000000 ; 06FF 1-df: .byte %00000000 ; 0700 1-e0: .byte %00000000 ; 0701 1-e0: .byte %01111100 ; 0702 1-e0: ***** .byte %01100110 ; 0703 1-e0: ** ** .byte %01100110 ; 0704 1-e0: ** ** .byte %01111100 ; 0705 1-e0: ***** .byte %01100000 ; 0706 1-e0: ** .byte %01100000 ; 0707 1-e0: ** .byte %00000000 ; 0708 1-e1: .byte %00000000 ; 0709 1-e1: .byte %01111100 ; 070A 1-e1: ***** .byte %01100110 ; 070B 1-e1: ** ** .byte %01100110 ; 070C 1-e1: ** ** .byte %01111100 ; 070D 1-e1: ***** .byte %01100000 ; 070E 1-e1: ** .byte %01100000 ; 070F 1-e1: ** .byte %00000000 ; 0710 1-e2: .byte %00000000 ; 0711 1-e2: .byte %00111110 ; 0712 1-e2: ***** .byte %01100110 ; 0713 1-e2: ** ** .byte %01100110 ; 0714 1-e2: ** ** .byte %00111110 ; 0715 1-e2: ***** .byte %00000110 ; 0716 1-e2: ** .byte %00000110 ; 0717 1-e2: ** .byte %00000000 ; 0718 1-e3: .byte %00000000 ; 0719 1-e3: .byte %00111110 ; 071A 1-e3: ***** .byte %01100110 ; 071B 1-e3: ** ** .byte %01100110 ; 071C 1-e3: ** ** .byte %00111110 ; 071D 1-e3: ***** .byte %00000110 ; 071E 1-e3: ** .byte %00000110 ; 071F 1-e3: ** .byte %00000000 ; 0720 1-e4: .byte %00000000 ; 0721 1-e4: .byte %01111100 ; 0722 1-e4: ***** .byte %01100110 ; 0723 1-e4: ** ** .byte %01100000 ; 0724 1-e4: ** .byte %01100000 ; 0725 1-e4: ** .byte %01100000 ; 0726 1-e4: ** .byte %00000000 ; 0727 1-e4: .byte %00000000 ; 0728 1-e5: .byte %00000000 ; 0729 1-e5: .byte %01111100 ; 072A 1-e5: ***** .byte %01100110 ; 072B 1-e5: ** ** .byte %01100000 ; 072C 1-e5: ** .byte %01100000 ; 072D 1-e5: ** .byte %01100000 ; 072E 1-e5: ** .byte %00000000 ; 072F 1-e5: .byte %00000000 ; 0730 1-e6: .byte %00000000 ; 0731 1-e6: .byte %00111110 ; 0732 1-e6: ***** .byte %01100000 ; 0733 1-e6: ** .byte %00111100 ; 0734 1-e6: **** .byte %00000110 ; 0735 1-e6: ** .byte %01111100 ; 0736 1-e6: ***** .byte %00000000 ; 0737 1-e6: .byte %00000000 ; 0738 1-e7: .byte %00000000 ; 0739 1-e7: .byte %00111110 ; 073A 1-e7: ***** .byte %01100000 ; 073B 1-e7: ** .byte %00111100 ; 073C 1-e7: **** .byte %00000110 ; 073D 1-e7: ** .byte %01111100 ; 073E 1-e7: ***** .byte %00000000 ; 073F 1-e7: .byte %00000000 ; 0740 1-e8: .byte %00011000 ; 0741 1-e8: ** .byte %01111110 ; 0742 1-e8: ****** .byte %00011000 ; 0743 1-e8: ** .byte %00011000 ; 0744 1-e8: ** .byte %00011000 ; 0745 1-e8: ** .byte %00001110 ; 0746 1-e8: *** .byte %00000000 ; 0747 1-e8: .byte %00000000 ; 0748 1-e9: .byte %00011000 ; 0749 1-e9: ** .byte %01111110 ; 074A 1-e9: ****** .byte %00011000 ; 074B 1-e9: ** .byte %00011000 ; 074C 1-e9: ** .byte %00011000 ; 074D 1-e9: ** .byte %00001110 ; 074E 1-e9: *** .byte %00000000 ; 074F 1-e9: .byte %00000000 ; 0750 1-ea: .byte %00000000 ; 0751 1-ea: .byte %01100110 ; 0752 1-ea: ** ** .byte %01100110 ; 0753 1-ea: ** ** .byte %01100110 ; 0754 1-ea: ** ** .byte %01100110 ; 0755 1-ea: ** ** .byte %00111110 ; 0756 1-ea: ***** .byte %00000000 ; 0757 1-ea: .byte %00000000 ; 0758 1-eb: .byte %00000000 ; 0759 1-eb: .byte %01100110 ; 075A 1-eb: ** ** .byte %01100110 ; 075B 1-eb: ** ** .byte %01100110 ; 075C 1-eb: ** ** .byte %01100110 ; 075D 1-eb: ** ** .byte %00111110 ; 075E 1-eb: ***** .byte %00000000 ; 075F 1-eb: .byte %00000000 ; 0760 1-ec: .byte %00000000 ; 0761 1-ec: .byte %01100110 ; 0762 1-ec: ** ** .byte %01100110 ; 0763 1-ec: ** ** .byte %01100110 ; 0764 1-ec: ** ** .byte %00111100 ; 0765 1-ec: **** .byte %00011000 ; 0766 1-ec: ** .byte %00000000 ; 0767 1-ec: .byte %00000000 ; 0768 1-ed: .byte %00000000 ; 0769 1-ed: .byte %01100110 ; 076A 1-ed: ** ** .byte %01100110 ; 076B 1-ed: ** ** .byte %01100110 ; 076C 1-ed: ** ** .byte %00111100 ; 076D 1-ed: **** .byte %00011000 ; 076E 1-ed: ** .byte %00000000 ; 076F 1-ed: .byte %00000000 ; 0770 1-ee: .byte %00000000 ; 0771 1-ee: .byte %01100011 ; 0772 1-ee: ** ** .byte %01101011 ; 0773 1-ee: ** * ** .byte %01111111 ; 0774 1-ee: ******* .byte %00111110 ; 0775 1-ee: ***** .byte %00110110 ; 0776 1-ee: ** ** .byte %00000000 ; 0777 1-ee: .byte %00000000 ; 0778 1-ef: .byte %00000000 ; 0779 1-ef: .byte %01100011 ; 077A 1-ef: ** ** .byte %01101011 ; 077B 1-ef: ** * ** .byte %01111111 ; 077C 1-ef: ******* .byte %00111110 ; 077D 1-ef: ***** .byte %00110110 ; 077E 1-ef: ** ** .byte %00000000 ; 077F 1-ef: .byte %00000000 ; 0780 1-f0: .byte %00000000 ; 0781 1-f0: .byte %01100110 ; 0782 1-f0: ** ** .byte %00111100 ; 0783 1-f0: **** .byte %00011000 ; 0784 1-f0: ** .byte %00111100 ; 0785 1-f0: **** .byte %01100110 ; 0786 1-f0: ** ** .byte %00000000 ; 0787 1-f0: .byte %00000000 ; 0788 1-f1: .byte %00000000 ; 0789 1-f1: .byte %01100110 ; 078A 1-f1: ** ** .byte %00111100 ; 078B 1-f1: **** .byte %00011000 ; 078C 1-f1: ** .byte %00111100 ; 078D 1-f1: **** .byte %01100110 ; 078E 1-f1: ** ** .byte %00000000 ; 078F 1-f1: .byte %00000000 ; 0790 1-f2: .byte %00000000 ; 0791 1-f2: .byte %01100110 ; 0792 1-f2: ** ** .byte %01100110 ; 0793 1-f2: ** ** .byte %01100110 ; 0794 1-f2: ** ** .byte %00111110 ; 0795 1-f2: ***** .byte %00001100 ; 0796 1-f2: ** .byte %01111000 ; 0797 1-f2: **** .byte %00000000 ; 0798 1-f3: .byte %00000000 ; 0799 1-f3: .byte %01100110 ; 079A 1-f3: ** ** .byte %01100110 ; 079B 1-f3: ** ** .byte %01100110 ; 079C 1-f3: ** ** .byte %00111110 ; 079D 1-f3: ***** .byte %00001100 ; 079E 1-f3: ** .byte %01111000 ; 079F 1-f3: **** .byte %00000000 ; 07A0 1-f4: .byte %00000000 ; 07A1 1-f4: .byte %01111110 ; 07A2 1-f4: ****** .byte %00001100 ; 07A3 1-f4: ** .byte %00011000 ; 07A4 1-f4: ** .byte %00110000 ; 07A5 1-f4: ** .byte %01111110 ; 07A6 1-f4: ****** .byte %00000000 ; 07A7 1-f4: .byte %00000000 ; 07A8 1-f5: .byte %00000000 ; 07A9 1-f5: .byte %01111110 ; 07AA 1-f5: ****** .byte %00001100 ; 07AB 1-f5: ** .byte %00011000 ; 07AC 1-f5: ** .byte %00110000 ; 07AD 1-f5: ** .byte %01111110 ; 07AE 1-f5: ****** .byte %00000000 ; 07AF 1-f5: .byte %00011100 ; 07B0 1-f6: *** .byte %00110000 ; 07B1 1-f6: ** .byte %00011000 ; 07B2 1-f6: ** .byte %01110000 ; 07B3 1-f6: *** .byte %00011000 ; 07B4 1-f6: ** .byte %00110000 ; 07B5 1-f6: ** .byte %00011100 ; 07B6 1-f6: *** .byte %00000000 ; 07B7 1-f6: .byte %00011100 ; 07B8 1-f7: *** .byte %00110000 ; 07B9 1-f7: ** .byte %00011000 ; 07BA 1-f7: ** .byte %01110000 ; 07BB 1-f7: *** .byte %00011000 ; 07BC 1-f7: ** .byte %00110000 ; 07BD 1-f7: ** .byte %00011100 ; 07BE 1-f7: *** .byte %00000000 ; 07BF 1-f7: .byte %00011000 ; 07C0 1-f8: ** .byte %00011000 ; 07C1 1-f8: ** .byte %00011000 ; 07C2 1-f8: ** .byte %00000000 ; 07C3 1-f8: .byte %00000000 ; 07C4 1-f8: .byte %00011000 ; 07C5 1-f8: ** .byte %00011000 ; 07C6 1-f8: ** .byte %00011000 ; 07C7 1-f8: ** .byte %00011000 ; 07C8 1-f9: ** .byte %00011000 ; 07C9 1-f9: ** .byte %00011000 ; 07CA 1-f9: ** .byte %00000000 ; 07CB 1-f9: .byte %00000000 ; 07CC 1-f9: .byte %00011000 ; 07CD 1-f9: ** .byte %00011000 ; 07CE 1-f9: ** .byte %00011000 ; 07CF 1-f9: ** .byte %00111000 ; 07D0 1-fa: *** .byte %00001100 ; 07D1 1-fa: ** .byte %00011000 ; 07D2 1-fa: ** .byte %00001110 ; 07D3 1-fa: *** .byte %00011000 ; 07D4 1-fa: ** .byte %00001100 ; 07D5 1-fa: ** .byte %00111000 ; 07D6 1-fa: *** .byte %00000000 ; 07D7 1-fa: .byte %00111000 ; 07D8 1-fb: *** .byte %00001100 ; 07D9 1-fb: ** .byte %00011000 ; 07DA 1-fb: ** .byte %00001110 ; 07DB 1-fb: *** .byte %00011000 ; 07DC 1-fb: ** .byte %00001100 ; 07DD 1-fb: ** .byte %00111000 ; 07DE 1-fb: *** .byte %00000000 ; 07DF 1-fb: .byte %00110011 ; 07E0 1-fc: ** ** .byte %11111111 ; 07E1 1-fc: ******** .byte %11001100 ; 07E2 1-fc: ** ** .byte %00000000 ; 07E3 1-fc: .byte %00000000 ; 07E4 1-fc: .byte %00000000 ; 07E5 1-fc: .byte %00000000 ; 07E6 1-fc: .byte %00000000 ; 07E7 1-fc: .byte %00110011 ; 07E8 1-fd: ** ** .byte %11111111 ; 07E9 1-fd: ******** .byte %11001100 ; 07EA 1-fd: ** ** .byte %00000000 ; 07EB 1-fd: .byte %00000000 ; 07EC 1-fd: .byte %00000000 ; 07ED 1-fd: .byte %00000000 ; 07EE 1-fd: .byte %00000000 ; 07EF 1-fd: .byte %00000000 ; 07F0 1-fe: .byte %00000000 ; 07F1 1-fe: .byte %00000000 ; 07F2 1-fe: .byte %00000000 ; 07F3 1-fe: .byte %00000000 ; 07F4 1-fe: .byte %00000000 ; 07F5 1-fe: .byte %00000000 ; 07F6 1-fe: .byte %00000000 ; 07F7 1-fe: .byte %00000000 ; 07F8 1-ff: .byte %00000000 ; 07F9 1-ff: .byte %00000000 ; 07FA 1-ff: .byte %00000000 ; 07FB 1-ff: .byte %00000000 ; 07FC 1-ff: .byte %00000000 ; 07FD 1-ff: .byte %00000000 ; 07FE 1-ff: .byte %00000000 ; 07FF 1-ff: .byte %11111111 ; 0800 2-00: ******** .byte %11111111 ; 0801 2-00: ******** .byte %11111111 ; 0802 2-00: ******** .byte %11111111 ; 0803 2-00: ******** .byte %11111111 ; 0804 2-00: ******** .byte %11111111 ; 0805 2-00: ******** .byte %11111111 ; 0806 2-00: ******** .byte %11111111 ; 0807 2-00: ******** .byte %11111111 ; 0808 2-01: ******** .byte %11111111 ; 0809 2-01: ******** .byte %11111111 ; 080A 2-01: ******** .byte %11111111 ; 080B 2-01: ******** .byte %11111111 ; 080C 2-01: ******** .byte %11111111 ; 080D 2-01: ******** .byte %11111111 ; 080E 2-01: ******** .byte %11111111 ; 080F 2-01: ******** .byte %00110011 ; 0810 2-02: ** ** .byte %00110011 ; 0811 2-02: ** ** .byte %11001100 ; 0812 2-02: ** ** .byte %11001100 ; 0813 2-02: ** ** .byte %00110011 ; 0814 2-02: ** ** .byte %00110011 ; 0815 2-02: ** ** .byte %11001100 ; 0816 2-02: ** ** .byte %11001100 ; 0817 2-02: ** ** .byte %00110011 ; 0818 2-03: ** ** .byte %00110011 ; 0819 2-03: ** ** .byte %11001100 ; 081A 2-03: ** ** .byte %11001100 ; 081B 2-03: ** ** .byte %00110011 ; 081C 2-03: ** ** .byte %00110011 ; 081D 2-03: ** ** .byte %11001100 ; 081E 2-03: ** ** .byte %11001100 ; 081F 2-03: ** ** .byte %11111111 ; 0820 2-04: ******** .byte %11100111 ; 0821 2-04: *** *** .byte %11000011 ; 0822 2-04: ** ** .byte %10000001 ; 0823 2-04: * * .byte %11100111 ; 0824 2-04: *** *** .byte %11100111 ; 0825 2-04: *** *** .byte %11100111 ; 0826 2-04: *** *** .byte %11100111 ; 0827 2-04: *** *** .byte %11111111 ; 0828 2-05: ******** .byte %11100111 ; 0829 2-05: *** *** .byte %11000011 ; 082A 2-05: ** ** .byte %10000001 ; 082B 2-05: * * .byte %11100111 ; 082C 2-05: *** *** .byte %11100111 ; 082D 2-05: *** *** .byte %11100111 ; 082E 2-05: *** *** .byte %11100111 ; 082F 2-05: *** *** .byte %11111111 ; 0830 2-06: ******** .byte %11101111 ; 0831 2-06: *** **** .byte %11001111 ; 0832 2-06: ** **** .byte %10000000 ; 0833 2-06: * .byte %10000000 ; 0834 2-06: * .byte %11001111 ; 0835 2-06: ** **** .byte %11101111 ; 0836 2-06: *** **** .byte %11111111 ; 0837 2-06: ******** .byte %11111111 ; 0838 2-07: ******** .byte %11101111 ; 0839 2-07: *** **** .byte %11001111 ; 083A 2-07: ** **** .byte %10000000 ; 083B 2-07: * .byte %10000000 ; 083C 2-07: * .byte %11001111 ; 083D 2-07: ** **** .byte %11101111 ; 083E 2-07: *** **** .byte %11111111 ; 083F 2-07: ******** .byte %11110011 ; 0840 2-08: **** ** .byte %11101101 ; 0841 2-08: *** ** * .byte %11001111 ; 0842 2-08: ** **** .byte %10000011 ; 0843 2-08: * ** .byte %11001111 ; 0844 2-08: ** **** .byte %10011101 ; 0845 2-08: * *** * .byte %00000011 ; 0846 2-08: ** .byte %11111111 ; 0847 2-08: ******** .byte %11110011 ; 0848 2-09: **** ** .byte %11101101 ; 0849 2-09: *** ** * .byte %11001111 ; 084A 2-09: ** **** .byte %10000011 ; 084B 2-09: * ** .byte %11001111 ; 084C 2-09: ** **** .byte %10011101 ; 084D 2-09: * *** * .byte %00000011 ; 084E 2-09: ** .byte %11111111 ; 084F 2-09: ******** .byte %11111111 ; 0850 2-0a: ******** .byte %11111111 ; 0851 2-0a: ******** .byte %11111100 ; 0852 2-0a: ****** .byte %11000001 ; 0853 2-0a: ** * .byte %10001001 ; 0854 2-0a: * * * .byte %11001001 ; 0855 2-0a: ** * * .byte %11001001 ; 0856 2-0a: ** * * .byte %11111111 ; 0857 2-0a: ******** .byte %11111111 ; 0858 2-0b: ******** .byte %11111111 ; 0859 2-0b: ******** .byte %11111100 ; 085A 2-0b: ****** .byte %11000001 ; 085B 2-0b: ** * .byte %10001001 ; 085C 2-0b: * * * .byte %11001001 ; 085D 2-0b: ** * * .byte %11001001 ; 085E 2-0b: ** * * .byte %11111111 ; 085F 2-0b: ******** .byte %10000000 ; 0860 2-0c: * .byte %10000000 ; 0861 2-0c: * .byte %11111111 ; 0862 2-0c: ******** .byte %11111111 ; 0863 2-0c: ******** .byte %11111111 ; 0864 2-0c: ******** .byte %11111111 ; 0865 2-0c: ******** .byte %11111111 ; 0866 2-0c: ******** .byte %11111111 ; 0867 2-0c: ******** .byte %10000000 ; 0868 2-0d: * .byte %10000000 ; 0869 2-0d: * .byte %11111111 ; 086A 2-0d: ******** .byte %11111111 ; 086B 2-0d: ******** .byte %11111111 ; 086C 2-0d: ******** .byte %11111111 ; 086D 2-0d: ******** .byte %11111111 ; 086E 2-0d: ******** .byte %11111111 ; 086F 2-0d: ******** .byte %00011111 ; 0870 2-0e: ***** .byte %00011111 ; 0871 2-0e: ***** .byte %10011111 ; 0872 2-0e: * ***** .byte %10011111 ; 0873 2-0e: * ***** .byte %10011111 ; 0874 2-0e: * ***** .byte %10011111 ; 0875 2-0e: * ***** .byte %10011111 ; 0876 2-0e: * ***** .byte %10011111 ; 0877 2-0e: * ***** .byte %00011111 ; 0878 2-0f: ***** .byte %00011111 ; 0879 2-0f: ***** .byte %10011111 ; 087A 2-0f: * ***** .byte %10011111 ; 087B 2-0f: * ***** .byte %10011111 ; 087C 2-0f: * ***** .byte %10011111 ; 087D 2-0f: * ***** .byte %10011111 ; 087E 2-0f: * ***** .byte %10011111 ; 087F 2-0f: * ***** .byte %11100111 ; 0880 2-10: *** *** .byte %11100111 ; 0881 2-10: *** *** .byte %11100111 ; 0882 2-10: *** *** .byte %00000111 ; 0883 2-10: *** .byte %00000111 ; 0884 2-10: *** .byte %11111111 ; 0885 2-10: ******** .byte %11111111 ; 0886 2-10: ******** .byte %11111111 ; 0887 2-10: ******** .byte %11100111 ; 0888 2-11: *** *** .byte %11100111 ; 0889 2-11: *** *** .byte %11100111 ; 088A 2-11: *** *** .byte %00000111 ; 088B 2-11: *** .byte %00000111 ; 088C 2-11: *** .byte %11111111 ; 088D 2-11: ******** .byte %11111111 ; 088E 2-11: ******** .byte %11111111 ; 088F 2-11: ******** .byte %00110011 ; 0890 2-12: ** ** .byte %01100110 ; 0891 2-12: ** ** .byte %11001100 ; 0892 2-12: ** ** .byte %10011001 ; 0893 2-12: * ** * .byte %00110011 ; 0894 2-12: ** ** .byte %01100110 ; 0895 2-12: ** ** .byte %11001100 ; 0896 2-12: ** ** .byte %10011001 ; 0897 2-12: * ** * .byte %00110011 ; 0898 2-13: ** ** .byte %01100110 ; 0899 2-13: ** ** .byte %11001100 ; 089A 2-13: ** ** .byte %10011001 ; 089B 2-13: * ** * .byte %00110011 ; 089C 2-13: ** ** .byte %01100110 ; 089D 2-13: ** ** .byte %11001100 ; 089E 2-13: ** ** .byte %10011001 ; 089F 2-13: * ** * .byte %11001100 ; 08A0 2-14: ** ** .byte %01100110 ; 08A1 2-14: ** ** .byte %00110011 ; 08A2 2-14: ** ** .byte %10011001 ; 08A3 2-14: * ** * .byte %11001100 ; 08A4 2-14: ** ** .byte %01100110 ; 08A5 2-14: ** ** .byte %00110011 ; 08A6 2-14: ** ** .byte %10011001 ; 08A7 2-14: * ** * .byte %11001100 ; 08A8 2-15: ** ** .byte %01100110 ; 08A9 2-15: ** ** .byte %00110011 ; 08AA 2-15: ** ** .byte %10011001 ; 08AB 2-15: * ** * .byte %11001100 ; 08AC 2-15: ** ** .byte %01100110 ; 08AD 2-15: ** ** .byte %00110011 ; 08AE 2-15: ** ** .byte %10011001 ; 08AF 2-15: * ** * .byte %11111111 ; 08B0 2-16: ******** .byte %11111111 ; 08B1 2-16: ******** .byte %11111111 ; 08B2 2-16: ******** .byte %00000000 ; 08B3 2-16: .byte %00000000 ; 08B4 2-16: .byte %11111111 ; 08B5 2-16: ******** .byte %11111111 ; 08B6 2-16: ******** .byte %11111111 ; 08B7 2-16: ******** .byte %11111111 ; 08B8 2-17: ******** .byte %11111111 ; 08B9 2-17: ******** .byte %11111111 ; 08BA 2-17: ******** .byte %00000000 ; 08BB 2-17: .byte %00000000 ; 08BC 2-17: .byte %11111111 ; 08BD 2-17: ******** .byte %11111111 ; 08BE 2-17: ******** .byte %11111111 ; 08BF 2-17: ******** .byte %11111100 ; 08C0 2-18: ****** .byte %11111100 ; 08C1 2-18: ****** .byte %11111100 ; 08C2 2-18: ****** .byte %11111100 ; 08C3 2-18: ****** .byte %11111100 ; 08C4 2-18: ****** .byte %11111100 ; 08C5 2-18: ****** .byte %11111100 ; 08C6 2-18: ****** .byte %11111100 ; 08C7 2-18: ****** .byte %11111100 ; 08C8 2-19: ****** .byte %11111100 ; 08C9 2-19: ****** .byte %11111100 ; 08CA 2-19: ****** .byte %11111100 ; 08CB 2-19: ****** .byte %11111100 ; 08CC 2-19: ****** .byte %11111100 ; 08CD 2-19: ****** .byte %11111100 ; 08CE 2-19: ****** .byte %11111100 ; 08CF 2-19: ****** .byte %11111111 ; 08D0 2-1a: ******** .byte %11111111 ; 08D1 2-1a: ******** .byte %11111111 ; 08D2 2-1a: ******** .byte %11111111 ; 08D3 2-1a: ******** .byte %00110011 ; 08D4 2-1a: ** ** .byte %00110011 ; 08D5 2-1a: ** ** .byte %11001100 ; 08D6 2-1a: ** ** .byte %11001100 ; 08D7 2-1a: ** ** .byte %11111111 ; 08D8 2-1b: ******** .byte %11111111 ; 08D9 2-1b: ******** .byte %11111111 ; 08DA 2-1b: ******** .byte %11111111 ; 08DB 2-1b: ******** .byte %00110011 ; 08DC 2-1b: ** ** .byte %00110011 ; 08DD 2-1b: ** ** .byte %11001100 ; 08DE 2-1b: ** ** .byte %11001100 ; 08DF 2-1b: ** ** .byte %11100111 ; 08E0 2-1c: *** *** .byte %11100111 ; 08E1 2-1c: *** *** .byte %11100111 ; 08E2 2-1c: *** *** .byte %11100111 ; 08E3 2-1c: *** *** .byte %11100111 ; 08E4 2-1c: *** *** .byte %11100111 ; 08E5 2-1c: *** *** .byte %11100111 ; 08E6 2-1c: *** *** .byte %11100111 ; 08E7 2-1c: *** *** .byte %11100111 ; 08E8 2-1d: *** *** .byte %11100111 ; 08E9 2-1d: *** *** .byte %11100111 ; 08EA 2-1d: *** *** .byte %11100111 ; 08EB 2-1d: *** *** .byte %11100111 ; 08EC 2-1d: *** *** .byte %11100111 ; 08ED 2-1d: *** *** .byte %11100111 ; 08EE 2-1d: *** *** .byte %11100111 ; 08EF 2-1d: *** *** .byte %11100111 ; 08F0 2-1e: *** *** .byte %11100111 ; 08F1 2-1e: *** *** .byte %11100111 ; 08F2 2-1e: *** *** .byte %11100000 ; 08F3 2-1e: *** .byte %11100000 ; 08F4 2-1e: *** .byte %11100111 ; 08F5 2-1e: *** *** .byte %11100111 ; 08F6 2-1e: *** *** .byte %11100111 ; 08F7 2-1e: *** *** .byte %11100111 ; 08F8 2-1f: *** *** .byte %11100111 ; 08F9 2-1f: *** *** .byte %11100111 ; 08FA 2-1f: *** *** .byte %11100000 ; 08FB 2-1f: *** .byte %11100000 ; 08FC 2-1f: *** .byte %11100111 ; 08FD 2-1f: *** *** .byte %11100111 ; 08FE 2-1f: *** *** .byte %11100111 ; 08FF 2-1f: *** *** .byte %11100111 ; 0900 2-20: *** *** .byte %11100111 ; 0901 2-20: *** *** .byte %11100111 ; 0902 2-20: *** *** .byte %00000000 ; 0903 2-20: .byte %00000000 ; 0904 2-20: .byte %11100111 ; 0905 2-20: *** *** .byte %11100111 ; 0906 2-20: *** *** .byte %11100111 ; 0907 2-20: *** *** .byte %11100111 ; 0908 2-21: *** *** .byte %11100111 ; 0909 2-21: *** *** .byte %11100111 ; 090A 2-21: *** *** .byte %00000000 ; 090B 2-21: .byte %00000000 ; 090C 2-21: .byte %11100111 ; 090D 2-21: *** *** .byte %11100111 ; 090E 2-21: *** *** .byte %11100111 ; 090F 2-21: *** *** .byte %11100111 ; 0910 2-22: *** *** .byte %11100111 ; 0911 2-22: *** *** .byte %11100111 ; 0912 2-22: *** *** .byte %11100000 ; 0913 2-22: *** .byte %11100000 ; 0914 2-22: *** .byte %11111111 ; 0915 2-22: ******** .byte %11111111 ; 0916 2-22: ******** .byte %11111111 ; 0917 2-22: ******** .byte %11100111 ; 0918 2-23: *** *** .byte %11100111 ; 0919 2-23: *** *** .byte %11100111 ; 091A 2-23: *** *** .byte %11100000 ; 091B 2-23: *** .byte %11100000 ; 091C 2-23: *** .byte %11111111 ; 091D 2-23: ******** .byte %11111111 ; 091E 2-23: ******** .byte %11111111 ; 091F 2-23: ******** .byte %11111111 ; 0920 2-24: ******** .byte %11111111 ; 0921 2-24: ******** .byte %11111111 ; 0922 2-24: ******** .byte %00000111 ; 0923 2-24: *** .byte %00000111 ; 0924 2-24: *** .byte %11100111 ; 0925 2-24: *** *** .byte %11100111 ; 0926 2-24: *** *** .byte %11100111 ; 0927 2-24: *** *** .byte %11111111 ; 0928 2-25: ******** .byte %11111111 ; 0929 2-25: ******** .byte %11111111 ; 092A 2-25: ******** .byte %00000111 ; 092B 2-25: *** .byte %00000111 ; 092C 2-25: *** .byte %11100111 ; 092D 2-25: *** *** .byte %11100111 ; 092E 2-25: *** *** .byte %11100111 ; 092F 2-25: *** *** .byte %11111111 ; 0930 2-26: ******** .byte %11111111 ; 0931 2-26: ******** .byte %11111111 ; 0932 2-26: ******** .byte %11111111 ; 0933 2-26: ******** .byte %11111111 ; 0934 2-26: ******** .byte %11111111 ; 0935 2-26: ******** .byte %00000000 ; 0936 2-26: .byte %00000000 ; 0937 2-26: .byte %11111111 ; 0938 2-27: ******** .byte %11111111 ; 0939 2-27: ******** .byte %11111111 ; 093A 2-27: ******** .byte %11111111 ; 093B 2-27: ******** .byte %11111111 ; 093C 2-27: ******** .byte %11111111 ; 093D 2-27: ******** .byte %00000000 ; 093E 2-27: .byte %00000000 ; 093F 2-27: .byte %11111111 ; 0940 2-28: ******** .byte %11111111 ; 0941 2-28: ******** .byte %11111111 ; 0942 2-28: ******** .byte %11100000 ; 0943 2-28: *** .byte %11100000 ; 0944 2-28: *** .byte %11100111 ; 0945 2-28: *** *** .byte %11100111 ; 0946 2-28: *** *** .byte %11100111 ; 0947 2-28: *** *** .byte %11111111 ; 0948 2-29: ******** .byte %11111111 ; 0949 2-29: ******** .byte %11111111 ; 094A 2-29: ******** .byte %11100000 ; 094B 2-29: *** .byte %11100000 ; 094C 2-29: *** .byte %11100111 ; 094D 2-29: *** *** .byte %11100111 ; 094E 2-29: *** *** .byte %11100111 ; 094F 2-29: *** *** .byte %11100111 ; 0950 2-2a: *** *** .byte %11100111 ; 0951 2-2a: *** *** .byte %11100111 ; 0952 2-2a: *** *** .byte %00000000 ; 0953 2-2a: .byte %00000000 ; 0954 2-2a: .byte %11111111 ; 0955 2-2a: ******** .byte %11111111 ; 0956 2-2a: ******** .byte %11111111 ; 0957 2-2a: ******** .byte %11100111 ; 0958 2-2b: *** *** .byte %11100111 ; 0959 2-2b: *** *** .byte %11100111 ; 095A 2-2b: *** *** .byte %00000000 ; 095B 2-2b: .byte %00000000 ; 095C 2-2b: .byte %11111111 ; 095D 2-2b: ******** .byte %11111111 ; 095E 2-2b: ******** .byte %11111111 ; 095F 2-2b: ******** .byte %11111111 ; 0960 2-2c: ******** .byte %11111111 ; 0961 2-2c: ******** .byte %11111111 ; 0962 2-2c: ******** .byte %00000000 ; 0963 2-2c: .byte %00000000 ; 0964 2-2c: .byte %11100111 ; 0965 2-2c: *** *** .byte %11100111 ; 0966 2-2c: *** *** .byte %11100111 ; 0967 2-2c: *** *** .byte %11111111 ; 0968 2-2d: ******** .byte %11111111 ; 0969 2-2d: ******** .byte %11111111 ; 096A 2-2d: ******** .byte %00000000 ; 096B 2-2d: .byte %00000000 ; 096C 2-2d: .byte %11100111 ; 096D 2-2d: *** *** .byte %11100111 ; 096E 2-2d: *** *** .byte %11100111 ; 096F 2-2d: *** *** .byte %11100111 ; 0970 2-2e: *** *** .byte %11100111 ; 0971 2-2e: *** *** .byte %11100111 ; 0972 2-2e: *** *** .byte %00000111 ; 0973 2-2e: *** .byte %00000111 ; 0974 2-2e: *** .byte %11100111 ; 0975 2-2e: *** *** .byte %11100111 ; 0976 2-2e: *** *** .byte %11100111 ; 0977 2-2e: *** *** .byte %11100111 ; 0978 2-2f: *** *** .byte %11100111 ; 0979 2-2f: *** *** .byte %11100111 ; 097A 2-2f: *** *** .byte %00000111 ; 097B 2-2f: *** .byte %00000111 ; 097C 2-2f: *** .byte %11100111 ; 097D 2-2f: *** *** .byte %11100111 ; 097E 2-2f: *** *** .byte %11100111 ; 097F 2-2f: *** *** .byte %00001111 ; 0980 2-30: **** .byte %00001111 ; 0981 2-30: **** .byte %00001111 ; 0982 2-30: **** .byte %00001111 ; 0983 2-30: **** .byte %00001111 ; 0984 2-30: **** .byte %00001111 ; 0985 2-30: **** .byte %00001111 ; 0986 2-30: **** .byte %00001111 ; 0987 2-30: **** .byte %00001111 ; 0988 2-31: **** .byte %00001111 ; 0989 2-31: **** .byte %00001111 ; 098A 2-31: **** .byte %00001111 ; 098B 2-31: **** .byte %00001111 ; 098C 2-31: **** .byte %00001111 ; 098D 2-31: **** .byte %00001111 ; 098E 2-31: **** .byte %00001111 ; 098F 2-31: **** .byte %11111111 ; 0990 2-32: ******** .byte %11111111 ; 0991 2-32: ******** .byte %11111111 ; 0992 2-32: ******** .byte %11111111 ; 0993 2-32: ******** .byte %00000000 ; 0994 2-32: .byte %00000000 ; 0995 2-32: .byte %00000000 ; 0996 2-32: .byte %00000000 ; 0997 2-32: .byte %11111111 ; 0998 2-33: ******** .byte %11111111 ; 0999 2-33: ******** .byte %11111111 ; 099A 2-33: ******** .byte %11111111 ; 099B 2-33: ******** .byte %00000000 ; 099C 2-33: .byte %00000000 ; 099D 2-33: .byte %00000000 ; 099E 2-33: .byte %00000000 ; 099F 2-33: .byte %11111111 ; 09A0 2-34: ******** .byte %11111111 ; 09A1 2-34: ******** .byte %11111111 ; 09A2 2-34: ******** .byte %11111111 ; 09A3 2-34: ******** .byte %00001111 ; 09A4 2-34: **** .byte %00001111 ; 09A5 2-34: **** .byte %00001111 ; 09A6 2-34: **** .byte %00001111 ; 09A7 2-34: **** .byte %11111111 ; 09A8 2-35: ******** .byte %11111111 ; 09A9 2-35: ******** .byte %11111111 ; 09AA 2-35: ******** .byte %11111111 ; 09AB 2-35: ******** .byte %00001111 ; 09AC 2-35: **** .byte %00001111 ; 09AD 2-35: **** .byte %00001111 ; 09AE 2-35: **** .byte %00001111 ; 09AF 2-35: **** .byte %00111111 ; 09B0 2-36: ****** .byte %00111111 ; 09B1 2-36: ****** .byte %11001111 ; 09B2 2-36: ** **** .byte %11001111 ; 09B3 2-36: ** **** .byte %00111111 ; 09B4 2-36: ****** .byte %00111111 ; 09B5 2-36: ****** .byte %11001111 ; 09B6 2-36: ** **** .byte %11001111 ; 09B7 2-36: ** **** .byte %00111111 ; 09B8 2-37: ****** .byte %00111111 ; 09B9 2-37: ****** .byte %11001111 ; 09BA 2-37: ** **** .byte %11001111 ; 09BB 2-37: ** **** .byte %00111111 ; 09BC 2-37: ****** .byte %00111111 ; 09BD 2-37: ****** .byte %11001111 ; 09BE 2-37: ** **** .byte %11001111 ; 09BF 2-37: ** **** .byte %11110000 ; 09C0 2-38: **** .byte %11110000 ; 09C1 2-38: **** .byte %11110000 ; 09C2 2-38: **** .byte %11110000 ; 09C3 2-38: **** .byte %11111111 ; 09C4 2-38: ******** .byte %11111111 ; 09C5 2-38: ******** .byte %11111111 ; 09C6 2-38: ******** .byte %11111111 ; 09C7 2-38: ******** .byte %11110000 ; 09C8 2-39: **** .byte %11110000 ; 09C9 2-39: **** .byte %11110000 ; 09CA 2-39: **** .byte %11110000 ; 09CB 2-39: **** .byte %11111111 ; 09CC 2-39: ******** .byte %11111111 ; 09CD 2-39: ******** .byte %11111111 ; 09CE 2-39: ******** .byte %11111111 ; 09CF 2-39: ******** .byte %11111111 ; 09D0 2-3a: ******** .byte %11111111 ; 09D1 2-3a: ******** .byte %11111111 ; 09D2 2-3a: ******** .byte %11111111 ; 09D3 2-3a: ******** .byte %11110000 ; 09D4 2-3a: **** .byte %11110000 ; 09D5 2-3a: **** .byte %11110000 ; 09D6 2-3a: **** .byte %11110000 ; 09D7 2-3a: **** .byte %11111111 ; 09D8 2-3b: ******** .byte %11111111 ; 09D9 2-3b: ******** .byte %11111111 ; 09DA 2-3b: ******** .byte %11111111 ; 09DB 2-3b: ******** .byte %11110000 ; 09DC 2-3b: **** .byte %11110000 ; 09DD 2-3b: **** .byte %11110000 ; 09DE 2-3b: **** .byte %11110000 ; 09DF 2-3b: **** .byte %00001111 ; 09E0 2-3c: **** .byte %00001111 ; 09E1 2-3c: **** .byte %00001111 ; 09E2 2-3c: **** .byte %00001111 ; 09E3 2-3c: **** .byte %11111111 ; 09E4 2-3c: ******** .byte %11111111 ; 09E5 2-3c: ******** .byte %11111111 ; 09E6 2-3c: ******** .byte %11111111 ; 09E7 2-3c: ******** .byte %00001111 ; 09E8 2-3d: **** .byte %00001111 ; 09E9 2-3d: **** .byte %00001111 ; 09EA 2-3d: **** .byte %00001111 ; 09EB 2-3d: **** .byte %11111111 ; 09EC 2-3d: ******** .byte %11111111 ; 09ED 2-3d: ******** .byte %11111111 ; 09EE 2-3d: ******** .byte %11111111 ; 09EF 2-3d: ******** .byte %00001111 ; 09F0 2-3e: **** .byte %00001111 ; 09F1 2-3e: **** .byte %00001111 ; 09F2 2-3e: **** .byte %00001111 ; 09F3 2-3e: **** .byte %11110000 ; 09F4 2-3e: **** .byte %11110000 ; 09F5 2-3e: **** .byte %11110000 ; 09F6 2-3e: **** .byte %11110000 ; 09F7 2-3e: **** .byte %00001111 ; 09F8 2-3f: **** .byte %00001111 ; 09F9 2-3f: **** .byte %00001111 ; 09FA 2-3f: **** .byte %00001111 ; 09FB 2-3f: **** .byte %11110000 ; 09FC 2-3f: **** .byte %11110000 ; 09FD 2-3f: **** .byte %11110000 ; 09FE 2-3f: **** .byte %11110000 ; 09FF 2-3f: **** .byte %11111111 ; 0A00 2-40: ******** .byte %11111111 ; 0A01 2-40: ******** .byte %11111111 ; 0A02 2-40: ******** .byte %11111111 ; 0A03 2-40: ******** .byte %11111111 ; 0A04 2-40: ******** .byte %11111111 ; 0A05 2-40: ******** .byte %11111111 ; 0A06 2-40: ******** .byte %11111111 ; 0A07 2-40: ******** .byte %11111111 ; 0A08 2-41: ******** .byte %11111111 ; 0A09 2-41: ******** .byte %11111111 ; 0A0A 2-41: ******** .byte %11111111 ; 0A0B 2-41: ******** .byte %11111111 ; 0A0C 2-41: ******** .byte %11111111 ; 0A0D 2-41: ******** .byte %11111111 ; 0A0E 2-41: ******** .byte %11111111 ; 0A0F 2-41: ******** .byte %11100111 ; 0A10 2-42: *** *** .byte %11100111 ; 0A11 2-42: *** *** .byte %11100111 ; 0A12 2-42: *** *** .byte %11100111 ; 0A13 2-42: *** *** .byte %11111111 ; 0A14 2-42: ******** .byte %11111111 ; 0A15 2-42: ******** .byte %11100111 ; 0A16 2-42: *** *** .byte %11111111 ; 0A17 2-42: ******** .byte %11100111 ; 0A18 2-43: *** *** .byte %11100111 ; 0A19 2-43: *** *** .byte %11100111 ; 0A1A 2-43: *** *** .byte %11100111 ; 0A1B 2-43: *** *** .byte %11111111 ; 0A1C 2-43: ******** .byte %11111111 ; 0A1D 2-43: ******** .byte %11100111 ; 0A1E 2-43: *** *** .byte %11111111 ; 0A1F 2-43: ******** .byte %10011001 ; 0A20 2-44: * ** * .byte %10011001 ; 0A21 2-44: * ** * .byte %10011001 ; 0A22 2-44: * ** * .byte %11111111 ; 0A23 2-44: ******** .byte %11111111 ; 0A24 2-44: ******** .byte %11111111 ; 0A25 2-44: ******** .byte %11111111 ; 0A26 2-44: ******** .byte %11111111 ; 0A27 2-44: ******** .byte %10011001 ; 0A28 2-45: * ** * .byte %10011001 ; 0A29 2-45: * ** * .byte %10011001 ; 0A2A 2-45: * ** * .byte %11111111 ; 0A2B 2-45: ******** .byte %11111111 ; 0A2C 2-45: ******** .byte %11111111 ; 0A2D 2-45: ******** .byte %11111111 ; 0A2E 2-45: ******** .byte %11111111 ; 0A2F 2-45: ******** .byte %10011001 ; 0A30 2-46: * ** * .byte %10011001 ; 0A31 2-46: * ** * .byte %00000000 ; 0A32 2-46: .byte %10011001 ; 0A33 2-46: * ** * .byte %00000000 ; 0A34 2-46: .byte %10011001 ; 0A35 2-46: * ** * .byte %10011001 ; 0A36 2-46: * ** * .byte %11111111 ; 0A37 2-46: ******** .byte %10011001 ; 0A38 2-47: * ** * .byte %10011001 ; 0A39 2-47: * ** * .byte %00000000 ; 0A3A 2-47: .byte %10011001 ; 0A3B 2-47: * ** * .byte %00000000 ; 0A3C 2-47: .byte %10011001 ; 0A3D 2-47: * ** * .byte %10011001 ; 0A3E 2-47: * ** * .byte %11111111 ; 0A3F 2-47: ******** .byte %11100111 ; 0A40 2-48: *** *** .byte %11000001 ; 0A41 2-48: ** * .byte %10011111 ; 0A42 2-48: * ***** .byte %11000011 ; 0A43 2-48: ** ** .byte %11111001 ; 0A44 2-48: ***** * .byte %10000011 ; 0A45 2-48: * ** .byte %11100111 ; 0A46 2-48: *** *** .byte %11111111 ; 0A47 2-48: ******** .byte %11100111 ; 0A48 2-49: *** *** .byte %11000001 ; 0A49 2-49: ** * .byte %10011111 ; 0A4A 2-49: * ***** .byte %11000011 ; 0A4B 2-49: ** ** .byte %11111001 ; 0A4C 2-49: ***** * .byte %10000011 ; 0A4D 2-49: * ** .byte %11100111 ; 0A4E 2-49: *** *** .byte %11111111 ; 0A4F 2-49: ******** .byte %11111111 ; 0A50 2-4a: ******** .byte %10011001 ; 0A51 2-4a: * ** * .byte %11110011 ; 0A52 2-4a: **** ** .byte %11100111 ; 0A53 2-4a: *** *** .byte %11001111 ; 0A54 2-4a: ** **** .byte %10011001 ; 0A55 2-4a: * ** * .byte %10111001 ; 0A56 2-4a: * *** * .byte %11111111 ; 0A57 2-4a: ******** .byte %11111111 ; 0A58 2-4b: ******** .byte %10011001 ; 0A59 2-4b: * ** * .byte %11110011 ; 0A5A 2-4b: **** ** .byte %11100111 ; 0A5B 2-4b: *** *** .byte %11001111 ; 0A5C 2-4b: ** **** .byte %10011001 ; 0A5D 2-4b: * ** * .byte %10111001 ; 0A5E 2-4b: * *** * .byte %11111111 ; 0A5F 2-4b: ******** .byte %11000011 ; 0A60 2-4c: ** ** .byte %10011001 ; 0A61 2-4c: * ** * .byte %11000011 ; 0A62 2-4c: ** ** .byte %11000111 ; 0A63 2-4c: ** *** .byte %10011000 ; 0A64 2-4c: * ** .byte %10011001 ; 0A65 2-4c: * ** * .byte %11000000 ; 0A66 2-4c: ** .byte %11111111 ; 0A67 2-4c: ******** .byte %11000011 ; 0A68 2-4d: ** ** .byte %10011001 ; 0A69 2-4d: * ** * .byte %11000011 ; 0A6A 2-4d: ** ** .byte %11000111 ; 0A6B 2-4d: ** *** .byte %10011000 ; 0A6C 2-4d: * ** .byte %10011001 ; 0A6D 2-4d: * ** * .byte %11000000 ; 0A6E 2-4d: ** .byte %11111111 ; 0A6F 2-4d: ******** .byte %11111001 ; 0A70 2-4e: ***** * .byte %11110011 ; 0A71 2-4e: **** ** .byte %11100111 ; 0A72 2-4e: *** *** .byte %11111111 ; 0A73 2-4e: ******** .byte %11111111 ; 0A74 2-4e: ******** .byte %11111111 ; 0A75 2-4e: ******** .byte %11111111 ; 0A76 2-4e: ******** .byte %11111111 ; 0A77 2-4e: ******** .byte %11111001 ; 0A78 2-4f: ***** * .byte %11110011 ; 0A79 2-4f: **** ** .byte %11100111 ; 0A7A 2-4f: *** *** .byte %11111111 ; 0A7B 2-4f: ******** .byte %11111111 ; 0A7C 2-4f: ******** .byte %11111111 ; 0A7D 2-4f: ******** .byte %11111111 ; 0A7E 2-4f: ******** .byte %11111111 ; 0A7F 2-4f: ******** .byte %11110011 ; 0A80 2-50: **** ** .byte %11100111 ; 0A81 2-50: *** *** .byte %11001111 ; 0A82 2-50: ** **** .byte %11001111 ; 0A83 2-50: ** **** .byte %11001111 ; 0A84 2-50: ** **** .byte %11100111 ; 0A85 2-50: *** *** .byte %11110011 ; 0A86 2-50: **** ** .byte %11111111 ; 0A87 2-50: ******** .byte %11110011 ; 0A88 2-51: **** ** .byte %11100111 ; 0A89 2-51: *** *** .byte %11001111 ; 0A8A 2-51: ** **** .byte %11001111 ; 0A8B 2-51: ** **** .byte %11001111 ; 0A8C 2-51: ** **** .byte %11100111 ; 0A8D 2-51: *** *** .byte %11110011 ; 0A8E 2-51: **** ** .byte %11111111 ; 0A8F 2-51: ******** .byte %11001111 ; 0A90 2-52: ** **** .byte %11100111 ; 0A91 2-52: *** *** .byte %11110011 ; 0A92 2-52: **** ** .byte %11110011 ; 0A93 2-52: **** ** .byte %11110011 ; 0A94 2-52: **** ** .byte %11100111 ; 0A95 2-52: *** *** .byte %11001111 ; 0A96 2-52: ** **** .byte %11111111 ; 0A97 2-52: ******** .byte %11001111 ; 0A98 2-53: ** **** .byte %11100111 ; 0A99 2-53: *** *** .byte %11110011 ; 0A9A 2-53: **** ** .byte %11110011 ; 0A9B 2-53: **** ** .byte %11110011 ; 0A9C 2-53: **** ** .byte %11100111 ; 0A9D 2-53: *** *** .byte %11001111 ; 0A9E 2-53: ** **** .byte %11111111 ; 0A9F 2-53: ******** .byte %11111111 ; 0AA0 2-54: ******** .byte %10011001 ; 0AA1 2-54: * ** * .byte %11000011 ; 0AA2 2-54: ** ** .byte %00000000 ; 0AA3 2-54: .byte %11000011 ; 0AA4 2-54: ** ** .byte %10011001 ; 0AA5 2-54: * ** * .byte %11111111 ; 0AA6 2-54: ******** .byte %11111111 ; 0AA7 2-54: ******** .byte %11111111 ; 0AA8 2-55: ******** .byte %10011001 ; 0AA9 2-55: * ** * .byte %11000011 ; 0AAA 2-55: ** ** .byte %00000000 ; 0AAB 2-55: .byte %11000011 ; 0AAC 2-55: ** ** .byte %10011001 ; 0AAD 2-55: * ** * .byte %11111111 ; 0AAE 2-55: ******** .byte %11111111 ; 0AAF 2-55: ******** .byte %11111111 ; 0AB0 2-56: ******** .byte %11100111 ; 0AB1 2-56: *** *** .byte %11100111 ; 0AB2 2-56: *** *** .byte %10000001 ; 0AB3 2-56: * * .byte %11100111 ; 0AB4 2-56: *** *** .byte %11100111 ; 0AB5 2-56: *** *** .byte %11111111 ; 0AB6 2-56: ******** .byte %11111111 ; 0AB7 2-56: ******** .byte %11111111 ; 0AB8 2-57: ******** .byte %11100111 ; 0AB9 2-57: *** *** .byte %11100111 ; 0ABA 2-57: *** *** .byte %10000001 ; 0ABB 2-57: * * .byte %11100111 ; 0ABC 2-57: *** *** .byte %11100111 ; 0ABD 2-57: *** *** .byte %11111111 ; 0ABE 2-57: ******** .byte %11111111 ; 0ABF 2-57: ******** .byte %11111111 ; 0AC0 2-58: ******** .byte %11111111 ; 0AC1 2-58: ******** .byte %11111111 ; 0AC2 2-58: ******** .byte %11111111 ; 0AC3 2-58: ******** .byte %11111111 ; 0AC4 2-58: ******** .byte %11100111 ; 0AC5 2-58: *** *** .byte %11100111 ; 0AC6 2-58: *** *** .byte %11001111 ; 0AC7 2-58: ** **** .byte %11111111 ; 0AC8 2-59: ******** .byte %11111111 ; 0AC9 2-59: ******** .byte %11111111 ; 0ACA 2-59: ******** .byte %11111111 ; 0ACB 2-59: ******** .byte %11111111 ; 0ACC 2-59: ******** .byte %11100111 ; 0ACD 2-59: *** *** .byte %11100111 ; 0ACE 2-59: *** *** .byte %11001111 ; 0ACF 2-59: ** **** .byte %11111111 ; 0AD0 2-5a: ******** .byte %11111111 ; 0AD1 2-5a: ******** .byte %11111111 ; 0AD2 2-5a: ******** .byte %10000001 ; 0AD3 2-5a: * * .byte %11111111 ; 0AD4 2-5a: ******** .byte %11111111 ; 0AD5 2-5a: ******** .byte %11111111 ; 0AD6 2-5a: ******** .byte %11111111 ; 0AD7 2-5a: ******** .byte %11111111 ; 0AD8 2-5b: ******** .byte %11111111 ; 0AD9 2-5b: ******** .byte %11111111 ; 0ADA 2-5b: ******** .byte %10000001 ; 0ADB 2-5b: * * .byte %11111111 ; 0ADC 2-5b: ******** .byte %11111111 ; 0ADD 2-5b: ******** .byte %11111111 ; 0ADE 2-5b: ******** .byte %11111111 ; 0ADF 2-5b: ******** .byte %11111111 ; 0AE0 2-5c: ******** .byte %11111111 ; 0AE1 2-5c: ******** .byte %11111111 ; 0AE2 2-5c: ******** .byte %11111111 ; 0AE3 2-5c: ******** .byte %11111111 ; 0AE4 2-5c: ******** .byte %11100111 ; 0AE5 2-5c: *** *** .byte %11100111 ; 0AE6 2-5c: *** *** .byte %11111111 ; 0AE7 2-5c: ******** .byte %11111111 ; 0AE8 2-5d: ******** .byte %11111111 ; 0AE9 2-5d: ******** .byte %11111111 ; 0AEA 2-5d: ******** .byte %11111111 ; 0AEB 2-5d: ******** .byte %11111111 ; 0AEC 2-5d: ******** .byte %11100111 ; 0AED 2-5d: *** *** .byte %11100111 ; 0AEE 2-5d: *** *** .byte %11111111 ; 0AEF 2-5d: ******** .byte %11111111 ; 0AF0 2-5e: ******** .byte %11111100 ; 0AF1 2-5e: ****** .byte %11111001 ; 0AF2 2-5e: ***** * .byte %11110011 ; 0AF3 2-5e: **** ** .byte %11100111 ; 0AF4 2-5e: *** *** .byte %11001111 ; 0AF5 2-5e: ** **** .byte %10011111 ; 0AF6 2-5e: * ***** .byte %11111111 ; 0AF7 2-5e: ******** .byte %11111111 ; 0AF8 2-5f: ******** .byte %11111100 ; 0AF9 2-5f: ****** .byte %11111001 ; 0AFA 2-5f: ***** * .byte %11110011 ; 0AFB 2-5f: **** ** .byte %11100111 ; 0AFC 2-5f: *** *** .byte %11001111 ; 0AFD 2-5f: ** **** .byte %10011111 ; 0AFE 2-5f: * ***** .byte %11111111 ; 0AFF 2-5f: ******** .byte %11000011 ; 0B00 2-60: ** ** .byte %10011001 ; 0B01 2-60: * ** * .byte %10010001 ; 0B02 2-60: * * * .byte %10001001 ; 0B03 2-60: * * * .byte %10011001 ; 0B04 2-60: * ** * .byte %10011001 ; 0B05 2-60: * ** * .byte %11000011 ; 0B06 2-60: ** ** .byte %11111111 ; 0B07 2-60: ******** .byte %11000011 ; 0B08 2-61: ** ** .byte %10011001 ; 0B09 2-61: * ** * .byte %10010001 ; 0B0A 2-61: * * * .byte %10001001 ; 0B0B 2-61: * * * .byte %10011001 ; 0B0C 2-61: * ** * .byte %10011001 ; 0B0D 2-61: * ** * .byte %11000011 ; 0B0E 2-61: ** ** .byte %11111111 ; 0B0F 2-61: ******** .byte %11100111 ; 0B10 2-62: *** *** .byte %11100111 ; 0B11 2-62: *** *** .byte %11000111 ; 0B12 2-62: ** *** .byte %11100111 ; 0B13 2-62: *** *** .byte %11100111 ; 0B14 2-62: *** *** .byte %11100111 ; 0B15 2-62: *** *** .byte %10000001 ; 0B16 2-62: * * .byte %11111111 ; 0B17 2-62: ******** .byte %11100111 ; 0B18 2-63: *** *** .byte %11100111 ; 0B19 2-63: *** *** .byte %11000111 ; 0B1A 2-63: ** *** .byte %11100111 ; 0B1B 2-63: *** *** .byte %11100111 ; 0B1C 2-63: *** *** .byte %11100111 ; 0B1D 2-63: *** *** .byte %10000001 ; 0B1E 2-63: * * .byte %11111111 ; 0B1F 2-63: ******** .byte %11000011 ; 0B20 2-64: ** ** .byte %10011001 ; 0B21 2-64: * ** * .byte %11111001 ; 0B22 2-64: ***** * .byte %11110011 ; 0B23 2-64: **** ** .byte %11001111 ; 0B24 2-64: ** **** .byte %10011111 ; 0B25 2-64: * ***** .byte %10000001 ; 0B26 2-64: * * .byte %11111111 ; 0B27 2-64: ******** .byte %11000011 ; 0B28 2-65: ** ** .byte %10011001 ; 0B29 2-65: * ** * .byte %11111001 ; 0B2A 2-65: ***** * .byte %11110011 ; 0B2B 2-65: **** ** .byte %11001111 ; 0B2C 2-65: ** **** .byte %10011111 ; 0B2D 2-65: * ***** .byte %10000001 ; 0B2E 2-65: * * .byte %11111111 ; 0B2F 2-65: ******** .byte %11000011 ; 0B30 2-66: ** ** .byte %10011001 ; 0B31 2-66: * ** * .byte %11111001 ; 0B32 2-66: ***** * .byte %11100011 ; 0B33 2-66: *** ** .byte %11111001 ; 0B34 2-66: ***** * .byte %10011001 ; 0B35 2-66: * ** * .byte %11000011 ; 0B36 2-66: ** ** .byte %11111111 ; 0B37 2-66: ******** .byte %11000011 ; 0B38 2-67: ** ** .byte %10011001 ; 0B39 2-67: * ** * .byte %11111001 ; 0B3A 2-67: ***** * .byte %11100011 ; 0B3B 2-67: *** ** .byte %11111001 ; 0B3C 2-67: ***** * .byte %10011001 ; 0B3D 2-67: * ** * .byte %11000011 ; 0B3E 2-67: ** ** .byte %11111111 ; 0B3F 2-67: ******** .byte %11111001 ; 0B40 2-68: ***** * .byte %11110001 ; 0B41 2-68: **** * .byte %11100001 ; 0B42 2-68: *** * .byte %10011001 ; 0B43 2-68: * ** * .byte %10000000 ; 0B44 2-68: * .byte %11111001 ; 0B45 2-68: ***** * .byte %11111001 ; 0B46 2-68: ***** * .byte %11111111 ; 0B47 2-68: ******** .byte %11111001 ; 0B48 2-69: ***** * .byte %11110001 ; 0B49 2-69: **** * .byte %11100001 ; 0B4A 2-69: *** * .byte %10011001 ; 0B4B 2-69: * ** * .byte %10000000 ; 0B4C 2-69: * .byte %11111001 ; 0B4D 2-69: ***** * .byte %11111001 ; 0B4E 2-69: ***** * .byte %11111111 ; 0B4F 2-69: ******** .byte %10000001 ; 0B50 2-6a: * * .byte %10011111 ; 0B51 2-6a: * ***** .byte %10000011 ; 0B52 2-6a: * ** .byte %11111001 ; 0B53 2-6a: ***** * .byte %11111001 ; 0B54 2-6a: ***** * .byte %10011001 ; 0B55 2-6a: * ** * .byte %11000011 ; 0B56 2-6a: ** ** .byte %11111111 ; 0B57 2-6a: ******** .byte %10000001 ; 0B58 2-6b: * * .byte %10011111 ; 0B59 2-6b: * ***** .byte %10000011 ; 0B5A 2-6b: * ** .byte %11111001 ; 0B5B 2-6b: ***** * .byte %11111001 ; 0B5C 2-6b: ***** * .byte %10011001 ; 0B5D 2-6b: * ** * .byte %11000011 ; 0B5E 2-6b: ** ** .byte %11111111 ; 0B5F 2-6b: ******** .byte %11000011 ; 0B60 2-6c: ** ** .byte %10011001 ; 0B61 2-6c: * ** * .byte %10011111 ; 0B62 2-6c: * ***** .byte %10000011 ; 0B63 2-6c: * ** .byte %10011001 ; 0B64 2-6c: * ** * .byte %10011001 ; 0B65 2-6c: * ** * .byte %11000011 ; 0B66 2-6c: ** ** .byte %11111111 ; 0B67 2-6c: ******** .byte %11000011 ; 0B68 2-6d: ** ** .byte %10011001 ; 0B69 2-6d: * ** * .byte %10011111 ; 0B6A 2-6d: * ***** .byte %10000011 ; 0B6B 2-6d: * ** .byte %10011001 ; 0B6C 2-6d: * ** * .byte %10011001 ; 0B6D 2-6d: * ** * .byte %11000011 ; 0B6E 2-6d: ** ** .byte %11111111 ; 0B6F 2-6d: ******** .byte %10000001 ; 0B70 2-6e: * * .byte %10011001 ; 0B71 2-6e: * ** * .byte %11110011 ; 0B72 2-6e: **** ** .byte %11100111 ; 0B73 2-6e: *** *** .byte %11100111 ; 0B74 2-6e: *** *** .byte %11100111 ; 0B75 2-6e: *** *** .byte %11100111 ; 0B76 2-6e: *** *** .byte %11111111 ; 0B77 2-6e: ******** .byte %10000001 ; 0B78 2-6f: * * .byte %10011001 ; 0B79 2-6f: * ** * .byte %11110011 ; 0B7A 2-6f: **** ** .byte %11100111 ; 0B7B 2-6f: *** *** .byte %11100111 ; 0B7C 2-6f: *** *** .byte %11100111 ; 0B7D 2-6f: *** *** .byte %11100111 ; 0B7E 2-6f: *** *** .byte %11111111 ; 0B7F 2-6f: ******** .byte %11000011 ; 0B80 2-70: ** ** .byte %10011001 ; 0B81 2-70: * ** * .byte %10011001 ; 0B82 2-70: * ** * .byte %11000011 ; 0B83 2-70: ** ** .byte %10011001 ; 0B84 2-70: * ** * .byte %10011001 ; 0B85 2-70: * ** * .byte %11000011 ; 0B86 2-70: ** ** .byte %11111111 ; 0B87 2-70: ******** .byte %11000011 ; 0B88 2-71: ** ** .byte %10011001 ; 0B89 2-71: * ** * .byte %10011001 ; 0B8A 2-71: * ** * .byte %11000011 ; 0B8B 2-71: ** ** .byte %10011001 ; 0B8C 2-71: * ** * .byte %10011001 ; 0B8D 2-71: * ** * .byte %11000011 ; 0B8E 2-71: ** ** .byte %11111111 ; 0B8F 2-71: ******** .byte %11000011 ; 0B90 2-72: ** ** .byte %10011001 ; 0B91 2-72: * ** * .byte %10011001 ; 0B92 2-72: * ** * .byte %11000001 ; 0B93 2-72: ** * .byte %11111001 ; 0B94 2-72: ***** * .byte %10011001 ; 0B95 2-72: * ** * .byte %11000011 ; 0B96 2-72: ** ** .byte %11111111 ; 0B97 2-72: ******** .byte %11000011 ; 0B98 2-73: ** ** .byte %10011001 ; 0B99 2-73: * ** * .byte %10011001 ; 0B9A 2-73: * ** * .byte %11000001 ; 0B9B 2-73: ** * .byte %11111001 ; 0B9C 2-73: ***** * .byte %10011001 ; 0B9D 2-73: * ** * .byte %11000011 ; 0B9E 2-73: ** ** .byte %11111111 ; 0B9F 2-73: ******** .byte %11111111 ; 0BA0 2-74: ******** .byte %11111111 ; 0BA1 2-74: ******** .byte %11100111 ; 0BA2 2-74: *** *** .byte %11111111 ; 0BA3 2-74: ******** .byte %11111111 ; 0BA4 2-74: ******** .byte %11100111 ; 0BA5 2-74: *** *** .byte %11111111 ; 0BA6 2-74: ******** .byte %11111111 ; 0BA7 2-74: ******** .byte %11111111 ; 0BA8 2-75: ******** .byte %11111111 ; 0BA9 2-75: ******** .byte %11100111 ; 0BAA 2-75: *** *** .byte %11111111 ; 0BAB 2-75: ******** .byte %11111111 ; 0BAC 2-75: ******** .byte %11100111 ; 0BAD 2-75: *** *** .byte %11111111 ; 0BAE 2-75: ******** .byte %11111111 ; 0BAF 2-75: ******** .byte %11111111 ; 0BB0 2-76: ******** .byte %11111111 ; 0BB1 2-76: ******** .byte %11100111 ; 0BB2 2-76: *** *** .byte %11111111 ; 0BB3 2-76: ******** .byte %11111111 ; 0BB4 2-76: ******** .byte %11100111 ; 0BB5 2-76: *** *** .byte %11100111 ; 0BB6 2-76: *** *** .byte %11001111 ; 0BB7 2-76: ** **** .byte %11111111 ; 0BB8 2-77: ******** .byte %11111111 ; 0BB9 2-77: ******** .byte %11100111 ; 0BBA 2-77: *** *** .byte %11111111 ; 0BBB 2-77: ******** .byte %11111111 ; 0BBC 2-77: ******** .byte %11100111 ; 0BBD 2-77: *** *** .byte %11100111 ; 0BBE 2-77: *** *** .byte %11001111 ; 0BBF 2-77: ** **** .byte %11110001 ; 0BC0 2-78: **** * .byte %11100111 ; 0BC1 2-78: *** *** .byte %11001111 ; 0BC2 2-78: ** **** .byte %10011111 ; 0BC3 2-78: * ***** .byte %11001111 ; 0BC4 2-78: ** **** .byte %11100111 ; 0BC5 2-78: *** *** .byte %11110001 ; 0BC6 2-78: **** * .byte %11111111 ; 0BC7 2-78: ******** .byte %11110001 ; 0BC8 2-79: **** * .byte %11100111 ; 0BC9 2-79: *** *** .byte %11001111 ; 0BCA 2-79: ** **** .byte %10011111 ; 0BCB 2-79: * ***** .byte %11001111 ; 0BCC 2-79: ** **** .byte %11100111 ; 0BCD 2-79: *** *** .byte %11110001 ; 0BCE 2-79: **** * .byte %11111111 ; 0BCF 2-79: ******** .byte %11111111 ; 0BD0 2-7a: ******** .byte %11111111 ; 0BD1 2-7a: ******** .byte %10000001 ; 0BD2 2-7a: * * .byte %11111111 ; 0BD3 2-7a: ******** .byte %10000001 ; 0BD4 2-7a: * * .byte %11111111 ; 0BD5 2-7a: ******** .byte %11111111 ; 0BD6 2-7a: ******** .byte %11111111 ; 0BD7 2-7a: ******** .byte %11111111 ; 0BD8 2-7b: ******** .byte %11111111 ; 0BD9 2-7b: ******** .byte %10000001 ; 0BDA 2-7b: * * .byte %11111111 ; 0BDB 2-7b: ******** .byte %10000001 ; 0BDC 2-7b: * * .byte %11111111 ; 0BDD 2-7b: ******** .byte %11111111 ; 0BDE 2-7b: ******** .byte %11111111 ; 0BDF 2-7b: ******** .byte %10001111 ; 0BE0 2-7c: * **** .byte %11100111 ; 0BE1 2-7c: *** *** .byte %11110011 ; 0BE2 2-7c: **** ** .byte %11111001 ; 0BE3 2-7c: ***** * .byte %11110011 ; 0BE4 2-7c: **** ** .byte %11100111 ; 0BE5 2-7c: *** *** .byte %10001111 ; 0BE6 2-7c: * **** .byte %11111111 ; 0BE7 2-7c: ******** .byte %10001111 ; 0BE8 2-7d: * **** .byte %11100111 ; 0BE9 2-7d: *** *** .byte %11110011 ; 0BEA 2-7d: **** ** .byte %11111001 ; 0BEB 2-7d: ***** * .byte %11110011 ; 0BEC 2-7d: **** ** .byte %11100111 ; 0BED 2-7d: *** *** .byte %10001111 ; 0BEE 2-7d: * **** .byte %11111111 ; 0BEF 2-7d: ******** .byte %11000011 ; 0BF0 2-7e: ** ** .byte %10011001 ; 0BF1 2-7e: * ** * .byte %11111001 ; 0BF2 2-7e: ***** * .byte %11110011 ; 0BF3 2-7e: **** ** .byte %11100111 ; 0BF4 2-7e: *** *** .byte %11111111 ; 0BF5 2-7e: ******** .byte %11100111 ; 0BF6 2-7e: *** *** .byte %11111111 ; 0BF7 2-7e: ******** .byte %11000011 ; 0BF8 2-7f: ** ** .byte %10011001 ; 0BF9 2-7f: * ** * .byte %11111001 ; 0BFA 2-7f: ***** * .byte %11110011 ; 0BFB 2-7f: **** ** .byte %11100111 ; 0BFC 2-7f: *** *** .byte %11111111 ; 0BFD 2-7f: ******** .byte %11100111 ; 0BFE 2-7f: *** *** .byte %11111111 ; 0BFF 2-7f: ******** .byte %11000011 ; 0C00 2-80: ** ** .byte %10011001 ; 0C01 2-80: * ** * .byte %10010001 ; 0C02 2-80: * * * .byte %10010001 ; 0C03 2-80: * * * .byte %10011111 ; 0C04 2-80: * ***** .byte %10011101 ; 0C05 2-80: * *** * .byte %11000011 ; 0C06 2-80: ** ** .byte %11111111 ; 0C07 2-80: ******** .byte %11000011 ; 0C08 2-81: ** ** .byte %10011001 ; 0C09 2-81: * ** * .byte %10010001 ; 0C0A 2-81: * * * .byte %10010001 ; 0C0B 2-81: * * * .byte %10011111 ; 0C0C 2-81: * ***** .byte %10011101 ; 0C0D 2-81: * *** * .byte %11000011 ; 0C0E 2-81: ** ** .byte %11111111 ; 0C0F 2-81: ******** .byte %11100111 ; 0C10 2-82: *** *** .byte %11000011 ; 0C11 2-82: ** ** .byte %10011001 ; 0C12 2-82: * ** * .byte %10000001 ; 0C13 2-82: * * .byte %10011001 ; 0C14 2-82: * ** * .byte %10011001 ; 0C15 2-82: * ** * .byte %10011001 ; 0C16 2-82: * ** * .byte %11111111 ; 0C17 2-82: ******** .byte %11100111 ; 0C18 2-83: *** *** .byte %11000011 ; 0C19 2-83: ** ** .byte %10011001 ; 0C1A 2-83: * ** * .byte %10000001 ; 0C1B 2-83: * * .byte %10011001 ; 0C1C 2-83: * ** * .byte %10011001 ; 0C1D 2-83: * ** * .byte %10011001 ; 0C1E 2-83: * ** * .byte %11111111 ; 0C1F 2-83: ******** .byte %10000011 ; 0C20 2-84: * ** .byte %10011001 ; 0C21 2-84: * ** * .byte %10011001 ; 0C22 2-84: * ** * .byte %10000011 ; 0C23 2-84: * ** .byte %10011001 ; 0C24 2-84: * ** * .byte %10011001 ; 0C25 2-84: * ** * .byte %10000011 ; 0C26 2-84: * ** .byte %11111111 ; 0C27 2-84: ******** .byte %10000011 ; 0C28 2-85: * ** .byte %10011001 ; 0C29 2-85: * ** * .byte %10011001 ; 0C2A 2-85: * ** * .byte %10000011 ; 0C2B 2-85: * ** .byte %10011001 ; 0C2C 2-85: * ** * .byte %10011001 ; 0C2D 2-85: * ** * .byte %10000011 ; 0C2E 2-85: * ** .byte %11111111 ; 0C2F 2-85: ******** .byte %11000011 ; 0C30 2-86: ** ** .byte %10011001 ; 0C31 2-86: * ** * .byte %10011111 ; 0C32 2-86: * ***** .byte %10011111 ; 0C33 2-86: * ***** .byte %10011111 ; 0C34 2-86: * ***** .byte %10011001 ; 0C35 2-86: * ** * .byte %11000011 ; 0C36 2-86: ** ** .byte %11111111 ; 0C37 2-86: ******** .byte %11000011 ; 0C38 2-87: ** ** .byte %10011001 ; 0C39 2-87: * ** * .byte %10011111 ; 0C3A 2-87: * ***** .byte %10011111 ; 0C3B 2-87: * ***** .byte %10011111 ; 0C3C 2-87: * ***** .byte %10011001 ; 0C3D 2-87: * ** * .byte %11000011 ; 0C3E 2-87: ** ** .byte %11111111 ; 0C3F 2-87: ******** .byte %10000111 ; 0C40 2-88: * *** .byte %10010011 ; 0C41 2-88: * * ** .byte %10011001 ; 0C42 2-88: * ** * .byte %10011001 ; 0C43 2-88: * ** * .byte %10011001 ; 0C44 2-88: * ** * .byte %10010011 ; 0C45 2-88: * * ** .byte %10000111 ; 0C46 2-88: * *** .byte %11111111 ; 0C47 2-88: ******** .byte %10000111 ; 0C48 2-89: * *** .byte %10010011 ; 0C49 2-89: * * ** .byte %10011001 ; 0C4A 2-89: * ** * .byte %10011001 ; 0C4B 2-89: * ** * .byte %10011001 ; 0C4C 2-89: * ** * .byte %10010011 ; 0C4D 2-89: * * ** .byte %10000111 ; 0C4E 2-89: * *** .byte %11111111 ; 0C4F 2-89: ******** .byte %10000001 ; 0C50 2-8a: * * .byte %10011111 ; 0C51 2-8a: * ***** .byte %10011111 ; 0C52 2-8a: * ***** .byte %10000111 ; 0C53 2-8a: * *** .byte %10011111 ; 0C54 2-8a: * ***** .byte %10011111 ; 0C55 2-8a: * ***** .byte %10000001 ; 0C56 2-8a: * * .byte %11111111 ; 0C57 2-8a: ******** .byte %10000001 ; 0C58 2-8b: * * .byte %10011111 ; 0C59 2-8b: * ***** .byte %10011111 ; 0C5A 2-8b: * ***** .byte %10000111 ; 0C5B 2-8b: * *** .byte %10011111 ; 0C5C 2-8b: * ***** .byte %10011111 ; 0C5D 2-8b: * ***** .byte %10000001 ; 0C5E 2-8b: * * .byte %11111111 ; 0C5F 2-8b: ******** .byte %10000001 ; 0C60 2-8c: * * .byte %10011111 ; 0C61 2-8c: * ***** .byte %10011111 ; 0C62 2-8c: * ***** .byte %10000111 ; 0C63 2-8c: * *** .byte %10011111 ; 0C64 2-8c: * ***** .byte %10011111 ; 0C65 2-8c: * ***** .byte %10011111 ; 0C66 2-8c: * ***** .byte %11111111 ; 0C67 2-8c: ******** .byte %10000001 ; 0C68 2-8d: * * .byte %10011111 ; 0C69 2-8d: * ***** .byte %10011111 ; 0C6A 2-8d: * ***** .byte %10000111 ; 0C6B 2-8d: * *** .byte %10011111 ; 0C6C 2-8d: * ***** .byte %10011111 ; 0C6D 2-8d: * ***** .byte %10011111 ; 0C6E 2-8d: * ***** .byte %11111111 ; 0C6F 2-8d: ******** .byte %11000011 ; 0C70 2-8e: ** ** .byte %10011001 ; 0C71 2-8e: * ** * .byte %10011111 ; 0C72 2-8e: * ***** .byte %10010001 ; 0C73 2-8e: * * * .byte %10011001 ; 0C74 2-8e: * ** * .byte %10011001 ; 0C75 2-8e: * ** * .byte %11000011 ; 0C76 2-8e: ** ** .byte %11111111 ; 0C77 2-8e: ******** .byte %11000011 ; 0C78 2-8f: ** ** .byte %10011001 ; 0C79 2-8f: * ** * .byte %10011111 ; 0C7A 2-8f: * ***** .byte %10010001 ; 0C7B 2-8f: * * * .byte %10011001 ; 0C7C 2-8f: * ** * .byte %10011001 ; 0C7D 2-8f: * ** * .byte %11000011 ; 0C7E 2-8f: ** ** .byte %11111111 ; 0C7F 2-8f: ******** .byte %10011001 ; 0C80 2-90: * ** * .byte %10011001 ; 0C81 2-90: * ** * .byte %10011001 ; 0C82 2-90: * ** * .byte %10000001 ; 0C83 2-90: * * .byte %10011001 ; 0C84 2-90: * ** * .byte %10011001 ; 0C85 2-90: * ** * .byte %10011001 ; 0C86 2-90: * ** * .byte %11111111 ; 0C87 2-90: ******** .byte %10011001 ; 0C88 2-91: * ** * .byte %10011001 ; 0C89 2-91: * ** * .byte %10011001 ; 0C8A 2-91: * ** * .byte %10000001 ; 0C8B 2-91: * * .byte %10011001 ; 0C8C 2-91: * ** * .byte %10011001 ; 0C8D 2-91: * ** * .byte %10011001 ; 0C8E 2-91: * ** * .byte %11111111 ; 0C8F 2-91: ******** .byte %11000011 ; 0C90 2-92: ** ** .byte %11100111 ; 0C91 2-92: *** *** .byte %11100111 ; 0C92 2-92: *** *** .byte %11100111 ; 0C93 2-92: *** *** .byte %11100111 ; 0C94 2-92: *** *** .byte %11100111 ; 0C95 2-92: *** *** .byte %11000011 ; 0C96 2-92: ** ** .byte %11111111 ; 0C97 2-92: ******** .byte %11000011 ; 0C98 2-93: ** ** .byte %11100111 ; 0C99 2-93: *** *** .byte %11100111 ; 0C9A 2-93: *** *** .byte %11100111 ; 0C9B 2-93: *** *** .byte %11100111 ; 0C9C 2-93: *** *** .byte %11100111 ; 0C9D 2-93: *** *** .byte %11000011 ; 0C9E 2-93: ** ** .byte %11111111 ; 0C9F 2-93: ******** .byte %11100001 ; 0CA0 2-94: *** * .byte %11110011 ; 0CA1 2-94: **** ** .byte %11110011 ; 0CA2 2-94: **** ** .byte %11110011 ; 0CA3 2-94: **** ** .byte %11110011 ; 0CA4 2-94: **** ** .byte %10010011 ; 0CA5 2-94: * * ** .byte %11000111 ; 0CA6 2-94: ** *** .byte %11111111 ; 0CA7 2-94: ******** .byte %11100001 ; 0CA8 2-95: *** * .byte %11110011 ; 0CA9 2-95: **** ** .byte %11110011 ; 0CAA 2-95: **** ** .byte %11110011 ; 0CAB 2-95: **** ** .byte %11110011 ; 0CAC 2-95: **** ** .byte %10010011 ; 0CAD 2-95: * * ** .byte %11000111 ; 0CAE 2-95: ** *** .byte %11111111 ; 0CAF 2-95: ******** .byte %10011001 ; 0CB0 2-96: * ** * .byte %10010011 ; 0CB1 2-96: * * ** .byte %10000111 ; 0CB2 2-96: * *** .byte %10001111 ; 0CB3 2-96: * **** .byte %10000111 ; 0CB4 2-96: * *** .byte %10010011 ; 0CB5 2-96: * * ** .byte %10011001 ; 0CB6 2-96: * ** * .byte %11111111 ; 0CB7 2-96: ******** .byte %10011001 ; 0CB8 2-97: * ** * .byte %10010011 ; 0CB9 2-97: * * ** .byte %10000111 ; 0CBA 2-97: * *** .byte %10001111 ; 0CBB 2-97: * **** .byte %10000111 ; 0CBC 2-97: * *** .byte %10010011 ; 0CBD 2-97: * * ** .byte %10011001 ; 0CBE 2-97: * ** * .byte %11111111 ; 0CBF 2-97: ******** .byte %10011111 ; 0CC0 2-98: * ***** .byte %10011111 ; 0CC1 2-98: * ***** .byte %10011111 ; 0CC2 2-98: * ***** .byte %10011111 ; 0CC3 2-98: * ***** .byte %10011111 ; 0CC4 2-98: * ***** .byte %10011111 ; 0CC5 2-98: * ***** .byte %10000001 ; 0CC6 2-98: * * .byte %11111111 ; 0CC7 2-98: ******** .byte %10011111 ; 0CC8 2-99: * ***** .byte %10011111 ; 0CC9 2-99: * ***** .byte %10011111 ; 0CCA 2-99: * ***** .byte %10011111 ; 0CCB 2-99: * ***** .byte %10011111 ; 0CCC 2-99: * ***** .byte %10011111 ; 0CCD 2-99: * ***** .byte %10000001 ; 0CCE 2-99: * * .byte %11111111 ; 0CCF 2-99: ******** .byte %10011100 ; 0CD0 2-9a: * *** .byte %10001000 ; 0CD1 2-9a: * * .byte %10000000 ; 0CD2 2-9a: * .byte %10010100 ; 0CD3 2-9a: * * * .byte %10011100 ; 0CD4 2-9a: * *** .byte %10011100 ; 0CD5 2-9a: * *** .byte %10011100 ; 0CD6 2-9a: * *** .byte %11111111 ; 0CD7 2-9a: ******** .byte %10011100 ; 0CD8 2-9b: * *** .byte %10001000 ; 0CD9 2-9b: * * .byte %10000000 ; 0CDA 2-9b: * .byte %10010100 ; 0CDB 2-9b: * * * .byte %10011100 ; 0CDC 2-9b: * *** .byte %10011100 ; 0CDD 2-9b: * *** .byte %10011100 ; 0CDE 2-9b: * *** .byte %11111111 ; 0CDF 2-9b: ******** .byte %10011001 ; 0CE0 2-9c: * ** * .byte %10001001 ; 0CE1 2-9c: * * * .byte %10000001 ; 0CE2 2-9c: * * .byte %10000001 ; 0CE3 2-9c: * * .byte %10010001 ; 0CE4 2-9c: * * * .byte %10011001 ; 0CE5 2-9c: * ** * .byte %10011001 ; 0CE6 2-9c: * ** * .byte %11111111 ; 0CE7 2-9c: ******** .byte %10011001 ; 0CE8 2-9d: * ** * .byte %10001001 ; 0CE9 2-9d: * * * .byte %10000001 ; 0CEA 2-9d: * * .byte %10000001 ; 0CEB 2-9d: * * .byte %10010001 ; 0CEC 2-9d: * * * .byte %10011001 ; 0CED 2-9d: * ** * .byte %10011001 ; 0CEE 2-9d: * ** * .byte %11111111 ; 0CEF 2-9d: ******** .byte %11000011 ; 0CF0 2-9e: ** ** .byte %10011001 ; 0CF1 2-9e: * ** * .byte %10011001 ; 0CF2 2-9e: * ** * .byte %10011001 ; 0CF3 2-9e: * ** * .byte %10011001 ; 0CF4 2-9e: * ** * .byte %10011001 ; 0CF5 2-9e: * ** * .byte %11000011 ; 0CF6 2-9e: ** ** .byte %11111111 ; 0CF7 2-9e: ******** .byte %11000011 ; 0CF8 2-9f: ** ** .byte %10011001 ; 0CF9 2-9f: * ** * .byte %10011001 ; 0CFA 2-9f: * ** * .byte %10011001 ; 0CFB 2-9f: * ** * .byte %10011001 ; 0CFC 2-9f: * ** * .byte %10011001 ; 0CFD 2-9f: * ** * .byte %11000011 ; 0CFE 2-9f: ** ** .byte %11111111 ; 0CFF 2-9f: ******** .byte %10000011 ; 0D00 2-a0: * ** .byte %10011001 ; 0D01 2-a0: * ** * .byte %10011001 ; 0D02 2-a0: * ** * .byte %10000011 ; 0D03 2-a0: * ** .byte %10011111 ; 0D04 2-a0: * ***** .byte %10011111 ; 0D05 2-a0: * ***** .byte %10011111 ; 0D06 2-a0: * ***** .byte %11111111 ; 0D07 2-a0: ******** .byte %10000011 ; 0D08 2-a1: * ** .byte %10011001 ; 0D09 2-a1: * ** * .byte %10011001 ; 0D0A 2-a1: * ** * .byte %10000011 ; 0D0B 2-a1: * ** .byte %10011111 ; 0D0C 2-a1: * ***** .byte %10011111 ; 0D0D 2-a1: * ***** .byte %10011111 ; 0D0E 2-a1: * ***** .byte %11111111 ; 0D0F 2-a1: ******** .byte %11000011 ; 0D10 2-a2: ** ** .byte %10011001 ; 0D11 2-a2: * ** * .byte %10011001 ; 0D12 2-a2: * ** * .byte %10011001 ; 0D13 2-a2: * ** * .byte %10011001 ; 0D14 2-a2: * ** * .byte %11000011 ; 0D15 2-a2: ** ** .byte %11110001 ; 0D16 2-a2: **** * .byte %11111111 ; 0D17 2-a2: ******** .byte %11000011 ; 0D18 2-a3: ** ** .byte %10011001 ; 0D19 2-a3: * ** * .byte %10011001 ; 0D1A 2-a3: * ** * .byte %10011001 ; 0D1B 2-a3: * ** * .byte %10011001 ; 0D1C 2-a3: * ** * .byte %11000011 ; 0D1D 2-a3: ** ** .byte %11110001 ; 0D1E 2-a3: **** * .byte %11111111 ; 0D1F 2-a3: ******** .byte %10000011 ; 0D20 2-a4: * ** .byte %10011001 ; 0D21 2-a4: * ** * .byte %10011001 ; 0D22 2-a4: * ** * .byte %10000011 ; 0D23 2-a4: * ** .byte %10000111 ; 0D24 2-a4: * *** .byte %10010011 ; 0D25 2-a4: * * ** .byte %10011001 ; 0D26 2-a4: * ** * .byte %11111111 ; 0D27 2-a4: ******** .byte %10000011 ; 0D28 2-a5: * ** .byte %10011001 ; 0D29 2-a5: * ** * .byte %10011001 ; 0D2A 2-a5: * ** * .byte %10000011 ; 0D2B 2-a5: * ** .byte %10000111 ; 0D2C 2-a5: * *** .byte %10010011 ; 0D2D 2-a5: * * ** .byte %10011001 ; 0D2E 2-a5: * ** * .byte %11111111 ; 0D2F 2-a5: ******** .byte %11000011 ; 0D30 2-a6: ** ** .byte %10011001 ; 0D31 2-a6: * ** * .byte %10011111 ; 0D32 2-a6: * ***** .byte %11000011 ; 0D33 2-a6: ** ** .byte %11111001 ; 0D34 2-a6: ***** * .byte %10011001 ; 0D35 2-a6: * ** * .byte %11000011 ; 0D36 2-a6: ** ** .byte %11111111 ; 0D37 2-a6: ******** .byte %11000011 ; 0D38 2-a7: ** ** .byte %10011001 ; 0D39 2-a7: * ** * .byte %10011111 ; 0D3A 2-a7: * ***** .byte %11000011 ; 0D3B 2-a7: ** ** .byte %11111001 ; 0D3C 2-a7: ***** * .byte %10011001 ; 0D3D 2-a7: * ** * .byte %11000011 ; 0D3E 2-a7: ** ** .byte %11111111 ; 0D3F 2-a7: ******** .byte %10000001 ; 0D40 2-a8: * * .byte %11100111 ; 0D41 2-a8: *** *** .byte %11100111 ; 0D42 2-a8: *** *** .byte %11100111 ; 0D43 2-a8: *** *** .byte %11100111 ; 0D44 2-a8: *** *** .byte %11100111 ; 0D45 2-a8: *** *** .byte %11100111 ; 0D46 2-a8: *** *** .byte %11111111 ; 0D47 2-a8: ******** .byte %10000001 ; 0D48 2-a9: * * .byte %11100111 ; 0D49 2-a9: *** *** .byte %11100111 ; 0D4A 2-a9: *** *** .byte %11100111 ; 0D4B 2-a9: *** *** .byte %11100111 ; 0D4C 2-a9: *** *** .byte %11100111 ; 0D4D 2-a9: *** *** .byte %11100111 ; 0D4E 2-a9: *** *** .byte %11111111 ; 0D4F 2-a9: ******** .byte %10011001 ; 0D50 2-aa: * ** * .byte %10011001 ; 0D51 2-aa: * ** * .byte %10011001 ; 0D52 2-aa: * ** * .byte %10011001 ; 0D53 2-aa: * ** * .byte %10011001 ; 0D54 2-aa: * ** * .byte %10011001 ; 0D55 2-aa: * ** * .byte %11000011 ; 0D56 2-aa: ** ** .byte %11111111 ; 0D57 2-aa: ******** .byte %10011001 ; 0D58 2-ab: * ** * .byte %10011001 ; 0D59 2-ab: * ** * .byte %10011001 ; 0D5A 2-ab: * ** * .byte %10011001 ; 0D5B 2-ab: * ** * .byte %10011001 ; 0D5C 2-ab: * ** * .byte %10011001 ; 0D5D 2-ab: * ** * .byte %11000011 ; 0D5E 2-ab: ** ** .byte %11111111 ; 0D5F 2-ab: ******** .byte %10011001 ; 0D60 2-ac: * ** * .byte %10011001 ; 0D61 2-ac: * ** * .byte %10011001 ; 0D62 2-ac: * ** * .byte %10011001 ; 0D63 2-ac: * ** * .byte %10011001 ; 0D64 2-ac: * ** * .byte %11000011 ; 0D65 2-ac: ** ** .byte %11100111 ; 0D66 2-ac: *** *** .byte %11111111 ; 0D67 2-ac: ******** .byte %10011001 ; 0D68 2-ad: * ** * .byte %10011001 ; 0D69 2-ad: * ** * .byte %10011001 ; 0D6A 2-ad: * ** * .byte %10011001 ; 0D6B 2-ad: * ** * .byte %10011001 ; 0D6C 2-ad: * ** * .byte %11000011 ; 0D6D 2-ad: ** ** .byte %11100111 ; 0D6E 2-ad: *** *** .byte %11111111 ; 0D6F 2-ad: ******** .byte %10011100 ; 0D70 2-ae: * *** .byte %10011100 ; 0D71 2-ae: * *** .byte %10011100 ; 0D72 2-ae: * *** .byte %10010100 ; 0D73 2-ae: * * * .byte %10000000 ; 0D74 2-ae: * .byte %10001000 ; 0D75 2-ae: * * .byte %10011100 ; 0D76 2-ae: * *** .byte %11111111 ; 0D77 2-ae: ******** .byte %10011100 ; 0D78 2-af: * *** .byte %10011100 ; 0D79 2-af: * *** .byte %10011100 ; 0D7A 2-af: * *** .byte %10010100 ; 0D7B 2-af: * * * .byte %10000000 ; 0D7C 2-af: * .byte %10001000 ; 0D7D 2-af: * * .byte %10011100 ; 0D7E 2-af: * *** .byte %11111111 ; 0D7F 2-af: ******** .byte %10011001 ; 0D80 2-b0: * ** * .byte %10011001 ; 0D81 2-b0: * ** * .byte %11000011 ; 0D82 2-b0: ** ** .byte %11100111 ; 0D83 2-b0: *** *** .byte %11000011 ; 0D84 2-b0: ** ** .byte %10011001 ; 0D85 2-b0: * ** * .byte %10011001 ; 0D86 2-b0: * ** * .byte %11111111 ; 0D87 2-b0: ******** .byte %10011001 ; 0D88 2-b1: * ** * .byte %10011001 ; 0D89 2-b1: * ** * .byte %11000011 ; 0D8A 2-b1: ** ** .byte %11100111 ; 0D8B 2-b1: *** *** .byte %11000011 ; 0D8C 2-b1: ** ** .byte %10011001 ; 0D8D 2-b1: * ** * .byte %10011001 ; 0D8E 2-b1: * ** * .byte %11111111 ; 0D8F 2-b1: ******** .byte %10011001 ; 0D90 2-b2: * ** * .byte %10011001 ; 0D91 2-b2: * ** * .byte %10011001 ; 0D92 2-b2: * ** * .byte %11000011 ; 0D93 2-b2: ** ** .byte %11100111 ; 0D94 2-b2: *** *** .byte %11100111 ; 0D95 2-b2: *** *** .byte %11100111 ; 0D96 2-b2: *** *** .byte %11111111 ; 0D97 2-b2: ******** .byte %10011001 ; 0D98 2-b3: * ** * .byte %10011001 ; 0D99 2-b3: * ** * .byte %10011001 ; 0D9A 2-b3: * ** * .byte %11000011 ; 0D9B 2-b3: ** ** .byte %11100111 ; 0D9C 2-b3: *** *** .byte %11100111 ; 0D9D 2-b3: *** *** .byte %11100111 ; 0D9E 2-b3: *** *** .byte %11111111 ; 0D9F 2-b3: ******** .byte %10000001 ; 0DA0 2-b4: * * .byte %11111001 ; 0DA1 2-b4: ***** * .byte %11110011 ; 0DA2 2-b4: **** ** .byte %11100111 ; 0DA3 2-b4: *** *** .byte %11001111 ; 0DA4 2-b4: ** **** .byte %10011111 ; 0DA5 2-b4: * ***** .byte %10000001 ; 0DA6 2-b4: * * .byte %11111111 ; 0DA7 2-b4: ******** .byte %10000001 ; 0DA8 2-b5: * * .byte %11111001 ; 0DA9 2-b5: ***** * .byte %11110011 ; 0DAA 2-b5: **** ** .byte %11100111 ; 0DAB 2-b5: *** *** .byte %11001111 ; 0DAC 2-b5: ** **** .byte %10011111 ; 0DAD 2-b5: * ***** .byte %10000001 ; 0DAE 2-b5: * * .byte %11111111 ; 0DAF 2-b5: ******** .byte %11000011 ; 0DB0 2-b6: ** ** .byte %11001111 ; 0DB1 2-b6: ** **** .byte %11001111 ; 0DB2 2-b6: ** **** .byte %11001111 ; 0DB3 2-b6: ** **** .byte %11001111 ; 0DB4 2-b6: ** **** .byte %11001111 ; 0DB5 2-b6: ** **** .byte %11000011 ; 0DB6 2-b6: ** ** .byte %11111111 ; 0DB7 2-b6: ******** .byte %11000011 ; 0DB8 2-b7: ** ** .byte %11001111 ; 0DB9 2-b7: ** **** .byte %11001111 ; 0DBA 2-b7: ** **** .byte %11001111 ; 0DBB 2-b7: ** **** .byte %11001111 ; 0DBC 2-b7: ** **** .byte %11001111 ; 0DBD 2-b7: ** **** .byte %11000011 ; 0DBE 2-b7: ** ** .byte %11111111 ; 0DBF 2-b7: ******** .byte %10011111 ; 0DC0 2-b8: * ***** .byte %11001111 ; 0DC1 2-b8: ** **** .byte %11100111 ; 0DC2 2-b8: *** *** .byte %11110011 ; 0DC3 2-b8: **** ** .byte %11111001 ; 0DC4 2-b8: ***** * .byte %11111100 ; 0DC5 2-b8: ****** .byte %11111111 ; 0DC6 2-b8: ******** .byte %11111111 ; 0DC7 2-b8: ******** .byte %10011111 ; 0DC8 2-b9: * ***** .byte %11001111 ; 0DC9 2-b9: ** **** .byte %11100111 ; 0DCA 2-b9: *** *** .byte %11110011 ; 0DCB 2-b9: **** ** .byte %11111001 ; 0DCC 2-b9: ***** * .byte %11111100 ; 0DCD 2-b9: ****** .byte %11111111 ; 0DCE 2-b9: ******** .byte %11111111 ; 0DCF 2-b9: ******** .byte %11000011 ; 0DD0 2-ba: ** ** .byte %11110011 ; 0DD1 2-ba: **** ** .byte %11110011 ; 0DD2 2-ba: **** ** .byte %11110011 ; 0DD3 2-ba: **** ** .byte %11110011 ; 0DD4 2-ba: **** ** .byte %11110011 ; 0DD5 2-ba: **** ** .byte %11000011 ; 0DD6 2-ba: ** ** .byte %11111111 ; 0DD7 2-ba: ******** .byte %11000011 ; 0DD8 2-bb: ** ** .byte %11110011 ; 0DD9 2-bb: **** ** .byte %11110011 ; 0DDA 2-bb: **** ** .byte %11110011 ; 0DDB 2-bb: **** ** .byte %11110011 ; 0DDC 2-bb: **** ** .byte %11110011 ; 0DDD 2-bb: **** ** .byte %11000011 ; 0DDE 2-bb: ** ** .byte %11111111 ; 0DDF 2-bb: ******** .byte %11111111 ; 0DE0 2-bc: ******** .byte %11100111 ; 0DE1 2-bc: *** *** .byte %11000011 ; 0DE2 2-bc: ** ** .byte %10011001 ; 0DE3 2-bc: * ** * .byte %11111111 ; 0DE4 2-bc: ******** .byte %11111111 ; 0DE5 2-bc: ******** .byte %11111111 ; 0DE6 2-bc: ******** .byte %11111111 ; 0DE7 2-bc: ******** .byte %11111111 ; 0DE8 2-bd: ******** .byte %11100111 ; 0DE9 2-bd: *** *** .byte %11000011 ; 0DEA 2-bd: ** ** .byte %10011001 ; 0DEB 2-bd: * ** * .byte %11111111 ; 0DEC 2-bd: ******** .byte %11111111 ; 0DED 2-bd: ******** .byte %11111111 ; 0DEE 2-bd: ******** .byte %11111111 ; 0DEF 2-bd: ******** .byte %11111111 ; 0DF0 2-be: ******** .byte %11111111 ; 0DF1 2-be: ******** .byte %11111111 ; 0DF2 2-be: ******** .byte %11111111 ; 0DF3 2-be: ******** .byte %11111111 ; 0DF4 2-be: ******** .byte %11111111 ; 0DF5 2-be: ******** .byte %10000000 ; 0DF6 2-be: * .byte %11111111 ; 0DF7 2-be: ******** .byte %11111111 ; 0DF8 2-bf: ******** .byte %11111111 ; 0DF9 2-bf: ******** .byte %11111111 ; 0DFA 2-bf: ******** .byte %11111111 ; 0DFB 2-bf: ******** .byte %11111111 ; 0DFC 2-bf: ******** .byte %11111111 ; 0DFD 2-bf: ******** .byte %10000000 ; 0DFE 2-bf: * .byte %11111111 ; 0DFF 2-bf: ******** .byte %11100111 ; 0E00 2-c0: *** *** .byte %11100111 ; 0E01 2-c0: *** *** .byte %11100111 ; 0E02 2-c0: *** *** .byte %11111111 ; 0E03 2-c0: ******** .byte %11111111 ; 0E04 2-c0: ******** .byte %11111111 ; 0E05 2-c0: ******** .byte %11111111 ; 0E06 2-c0: ******** .byte %11111111 ; 0E07 2-c0: ******** .byte %11100111 ; 0E08 2-c1: *** *** .byte %11100111 ; 0E09 2-c1: *** *** .byte %11100111 ; 0E0A 2-c1: *** *** .byte %11111111 ; 0E0B 2-c1: ******** .byte %11111111 ; 0E0C 2-c1: ******** .byte %11111111 ; 0E0D 2-c1: ******** .byte %11111111 ; 0E0E 2-c1: ******** .byte %11111111 ; 0E0F 2-c1: ******** .byte %11111111 ; 0E10 2-c2: ******** .byte %11111111 ; 0E11 2-c2: ******** .byte %11000011 ; 0E12 2-c2: ** ** .byte %11111001 ; 0E13 2-c2: ***** * .byte %11000001 ; 0E14 2-c2: ** * .byte %10011001 ; 0E15 2-c2: * ** * .byte %11000001 ; 0E16 2-c2: ** * .byte %11111111 ; 0E17 2-c2: ******** .byte %11111111 ; 0E18 2-c3: ******** .byte %11111111 ; 0E19 2-c3: ******** .byte %11000011 ; 0E1A 2-c3: ** ** .byte %11111001 ; 0E1B 2-c3: ***** * .byte %11000001 ; 0E1C 2-c3: ** * .byte %10011001 ; 0E1D 2-c3: * ** * .byte %11000001 ; 0E1E 2-c3: ** * .byte %11111111 ; 0E1F 2-c3: ******** .byte %11111111 ; 0E20 2-c4: ******** .byte %10011111 ; 0E21 2-c4: * ***** .byte %10011111 ; 0E22 2-c4: * ***** .byte %10000011 ; 0E23 2-c4: * ** .byte %10011001 ; 0E24 2-c4: * ** * .byte %10011001 ; 0E25 2-c4: * ** * .byte %10000011 ; 0E26 2-c4: * ** .byte %11111111 ; 0E27 2-c4: ******** .byte %11111111 ; 0E28 2-c5: ******** .byte %10011111 ; 0E29 2-c5: * ***** .byte %10011111 ; 0E2A 2-c5: * ***** .byte %10000011 ; 0E2B 2-c5: * ** .byte %10011001 ; 0E2C 2-c5: * ** * .byte %10011001 ; 0E2D 2-c5: * ** * .byte %10000011 ; 0E2E 2-c5: * ** .byte %11111111 ; 0E2F 2-c5: ******** .byte %11111111 ; 0E30 2-c6: ******** .byte %11111111 ; 0E31 2-c6: ******** .byte %11000011 ; 0E32 2-c6: ** ** .byte %10011111 ; 0E33 2-c6: * ***** .byte %10011111 ; 0E34 2-c6: * ***** .byte %10011111 ; 0E35 2-c6: * ***** .byte %11000011 ; 0E36 2-c6: ** ** .byte %11111111 ; 0E37 2-c6: ******** .byte %11111111 ; 0E38 2-c7: ******** .byte %11111111 ; 0E39 2-c7: ******** .byte %11000011 ; 0E3A 2-c7: ** ** .byte %10011111 ; 0E3B 2-c7: * ***** .byte %10011111 ; 0E3C 2-c7: * ***** .byte %10011111 ; 0E3D 2-c7: * ***** .byte %11000011 ; 0E3E 2-c7: ** ** .byte %11111111 ; 0E3F 2-c7: ******** .byte %11111111 ; 0E40 2-c8: ******** .byte %11111001 ; 0E41 2-c8: ***** * .byte %11111001 ; 0E42 2-c8: ***** * .byte %11000001 ; 0E43 2-c8: ** * .byte %10011001 ; 0E44 2-c8: * ** * .byte %10011001 ; 0E45 2-c8: * ** * .byte %11000001 ; 0E46 2-c8: ** * .byte %11111111 ; 0E47 2-c8: ******** .byte %11111111 ; 0E48 2-c9: ******** .byte %11111001 ; 0E49 2-c9: ***** * .byte %11111001 ; 0E4A 2-c9: ***** * .byte %11000001 ; 0E4B 2-c9: ** * .byte %10011001 ; 0E4C 2-c9: * ** * .byte %10011001 ; 0E4D 2-c9: * ** * .byte %11000001 ; 0E4E 2-c9: ** * .byte %11111111 ; 0E4F 2-c9: ******** .byte %11111111 ; 0E50 2-ca: ******** .byte %11111111 ; 0E51 2-ca: ******** .byte %11000011 ; 0E52 2-ca: ** ** .byte %10011001 ; 0E53 2-ca: * ** * .byte %10000001 ; 0E54 2-ca: * * .byte %10011111 ; 0E55 2-ca: * ***** .byte %11000011 ; 0E56 2-ca: ** ** .byte %11111111 ; 0E57 2-ca: ******** .byte %11111111 ; 0E58 2-cb: ******** .byte %11111111 ; 0E59 2-cb: ******** .byte %11000011 ; 0E5A 2-cb: ** ** .byte %10011001 ; 0E5B 2-cb: * ** * .byte %10000001 ; 0E5C 2-cb: * * .byte %10011111 ; 0E5D 2-cb: * ***** .byte %11000011 ; 0E5E 2-cb: ** ** .byte %11111111 ; 0E5F 2-cb: ******** .byte %11111111 ; 0E60 2-cc: ******** .byte %11110001 ; 0E61 2-cc: **** * .byte %11100111 ; 0E62 2-cc: *** *** .byte %11000001 ; 0E63 2-cc: ** * .byte %11100111 ; 0E64 2-cc: *** *** .byte %11100111 ; 0E65 2-cc: *** *** .byte %11100111 ; 0E66 2-cc: *** *** .byte %11111111 ; 0E67 2-cc: ******** .byte %11111111 ; 0E68 2-cd: ******** .byte %11110001 ; 0E69 2-cd: **** * .byte %11100111 ; 0E6A 2-cd: *** *** .byte %11000001 ; 0E6B 2-cd: ** * .byte %11100111 ; 0E6C 2-cd: *** *** .byte %11100111 ; 0E6D 2-cd: *** *** .byte %11100111 ; 0E6E 2-cd: *** *** .byte %11111111 ; 0E6F 2-cd: ******** .byte %11111111 ; 0E70 2-ce: ******** .byte %11111111 ; 0E71 2-ce: ******** .byte %11000001 ; 0E72 2-ce: ** * .byte %10011001 ; 0E73 2-ce: * ** * .byte %10011001 ; 0E74 2-ce: * ** * .byte %11000001 ; 0E75 2-ce: ** * .byte %11111001 ; 0E76 2-ce: ***** * .byte %10000011 ; 0E77 2-ce: * ** .byte %11111111 ; 0E78 2-cf: ******** .byte %11111111 ; 0E79 2-cf: ******** .byte %11000001 ; 0E7A 2-cf: ** * .byte %10011001 ; 0E7B 2-cf: * ** * .byte %10011001 ; 0E7C 2-cf: * ** * .byte %11000001 ; 0E7D 2-cf: ** * .byte %11111001 ; 0E7E 2-cf: ***** * .byte %10000011 ; 0E7F 2-cf: * ** .byte %11111111 ; 0E80 2-d0: ******** .byte %10011111 ; 0E81 2-d0: * ***** .byte %10011111 ; 0E82 2-d0: * ***** .byte %10000011 ; 0E83 2-d0: * ** .byte %10011001 ; 0E84 2-d0: * ** * .byte %10011001 ; 0E85 2-d0: * ** * .byte %10011001 ; 0E86 2-d0: * ** * .byte %11111111 ; 0E87 2-d0: ******** .byte %11111111 ; 0E88 2-d1: ******** .byte %10011111 ; 0E89 2-d1: * ***** .byte %10011111 ; 0E8A 2-d1: * ***** .byte %10000011 ; 0E8B 2-d1: * ** .byte %10011001 ; 0E8C 2-d1: * ** * .byte %10011001 ; 0E8D 2-d1: * ** * .byte %10011001 ; 0E8E 2-d1: * ** * .byte %11111111 ; 0E8F 2-d1: ******** .byte %11111111 ; 0E90 2-d2: ******** .byte %11100111 ; 0E91 2-d2: *** *** .byte %11111111 ; 0E92 2-d2: ******** .byte %11000111 ; 0E93 2-d2: ** *** .byte %11100111 ; 0E94 2-d2: *** *** .byte %11100111 ; 0E95 2-d2: *** *** .byte %11000011 ; 0E96 2-d2: ** ** .byte %11111111 ; 0E97 2-d2: ******** .byte %11111111 ; 0E98 2-d3: ******** .byte %11100111 ; 0E99 2-d3: *** *** .byte %11111111 ; 0E9A 2-d3: ******** .byte %11000111 ; 0E9B 2-d3: ** *** .byte %11100111 ; 0E9C 2-d3: *** *** .byte %11100111 ; 0E9D 2-d3: *** *** .byte %11000011 ; 0E9E 2-d3: ** ** .byte %11111111 ; 0E9F 2-d3: ******** .byte %11111111 ; 0EA0 2-d4: ******** .byte %11111001 ; 0EA1 2-d4: ***** * .byte %11111111 ; 0EA2 2-d4: ******** .byte %11111001 ; 0EA3 2-d4: ***** * .byte %11111001 ; 0EA4 2-d4: ***** * .byte %11111001 ; 0EA5 2-d4: ***** * .byte %11111001 ; 0EA6 2-d4: ***** * .byte %11000011 ; 0EA7 2-d4: ** ** .byte %11111111 ; 0EA8 2-d5: ******** .byte %11111001 ; 0EA9 2-d5: ***** * .byte %11111111 ; 0EAA 2-d5: ******** .byte %11111001 ; 0EAB 2-d5: ***** * .byte %11111001 ; 0EAC 2-d5: ***** * .byte %11111001 ; 0EAD 2-d5: ***** * .byte %11111001 ; 0EAE 2-d5: ***** * .byte %11000011 ; 0EAF 2-d5: ** ** .byte %11111111 ; 0EB0 2-d6: ******** .byte %10011111 ; 0EB1 2-d6: * ***** .byte %10011111 ; 0EB2 2-d6: * ***** .byte %10010011 ; 0EB3 2-d6: * * ** .byte %10000111 ; 0EB4 2-d6: * *** .byte %10010011 ; 0EB5 2-d6: * * ** .byte %10011001 ; 0EB6 2-d6: * ** * .byte %11111111 ; 0EB7 2-d6: ******** .byte %11111111 ; 0EB8 2-d7: ******** .byte %10011111 ; 0EB9 2-d7: * ***** .byte %10011111 ; 0EBA 2-d7: * ***** .byte %10010011 ; 0EBB 2-d7: * * ** .byte %10000111 ; 0EBC 2-d7: * *** .byte %10010011 ; 0EBD 2-d7: * * ** .byte %10011001 ; 0EBE 2-d7: * ** * .byte %11111111 ; 0EBF 2-d7: ******** .byte %11111111 ; 0EC0 2-d8: ******** .byte %11000111 ; 0EC1 2-d8: ** *** .byte %11100111 ; 0EC2 2-d8: *** *** .byte %11100111 ; 0EC3 2-d8: *** *** .byte %11100111 ; 0EC4 2-d8: *** *** .byte %11100111 ; 0EC5 2-d8: *** *** .byte %11000011 ; 0EC6 2-d8: ** ** .byte %11111111 ; 0EC7 2-d8: ******** .byte %11111111 ; 0EC8 2-d9: ******** .byte %11000111 ; 0EC9 2-d9: ** *** .byte %11100111 ; 0ECA 2-d9: *** *** .byte %11100111 ; 0ECB 2-d9: *** *** .byte %11100111 ; 0ECC 2-d9: *** *** .byte %11100111 ; 0ECD 2-d9: *** *** .byte %11000011 ; 0ECE 2-d9: ** ** .byte %11111111 ; 0ECF 2-d9: ******** .byte %11111111 ; 0ED0 2-da: ******** .byte %11111111 ; 0ED1 2-da: ******** .byte %10011001 ; 0ED2 2-da: * ** * .byte %10000000 ; 0ED3 2-da: * .byte %10000000 ; 0ED4 2-da: * .byte %10010100 ; 0ED5 2-da: * * * .byte %10011100 ; 0ED6 2-da: * *** .byte %11111111 ; 0ED7 2-da: ******** .byte %11111111 ; 0ED8 2-db: ******** .byte %11111111 ; 0ED9 2-db: ******** .byte %10011001 ; 0EDA 2-db: * ** * .byte %10000000 ; 0EDB 2-db: * .byte %10000000 ; 0EDC 2-db: * .byte %10010100 ; 0EDD 2-db: * * * .byte %10011100 ; 0EDE 2-db: * *** .byte %11111111 ; 0EDF 2-db: ******** .byte %00000000 ; 0008 1-01: .byte %00000000 ; 0009 1-01: .byte %00000000 ; 000A 1-01: .byte %00000000 ; 000B 1-01: .byte %00000000 ; 000C 1-01: .byte %00000000 ; 000D 1-01: .byte %00000000 ; 000E 1-01: .byte %00000000 ; 000F 1-01: .byte ; .byte %00011000 ; .byte %00100100 ; .byte %00000000 ; .byte %01100110 ; .byte %10011001 ; .byte %00000000 ; .byte %00100100 ; .byte %01100110 .byte ; .byte %00011000 ; .byte %00111100 ; .byte %00111100 ; .byte %00111100 ; .byte %01111110 ; .byte %01111110 ; .byte %01011010 ; .byte %01000010 .byte ; .byte %00011000 ; .byte %00111100 ; .byte %00111100 ; .byte %00111100 ; .byte %01111110 ; .byte %01111110 ; .byte %01011010 ; .byte %01000010 .byte ; .byte %00000000 ; .byte %00000000 ; .byte %00001111 ; .byte %11111110 ; .byte %11111110 ; .byte %00001111 ; .byte %00000000 ; .byte %00000000 .byte ; .byte %00000000 ; .byte %00000000 ; .byte %00001111 ; .byte %11111110 ; .byte %11111110 ; .byte %00001111 ; .byte %00000000 ; .byte %00000000 .byte ; .byte %00000000 ; .byte %00000000 ; .byte %11110000 ; .byte %01111111 ; .byte %01111111 ; .byte %11110000 ; .byte %00000000 ; .byte %00000000 .byte ; .byte %00000000 ; .byte %00000000 ; .byte %11110000 ; .byte %01111111 ; .byte %01111111 ; .byte %11110000 ; .byte %00000000 ; .byte %00000000 .byte ; .byte %00000000 ; .byte %00000000 ; .byte %00001000 ; .byte %00111000 ; .byte %00011100 ; .byte %00010000 ; .byte %00000000 ; .byte %00000000 .byte ; .byte %00000000 ; .byte %00000000 ; .byte %00001000 ; .byte %00111000 ; .byte %00011100 ; .byte %00010000 ; .byte %00000000 ; .byte %00000000 .byte ; .byte %00000000 ; .byte %00111100 ; .byte %01000010 ; .byte %11001111 ; .byte %11000011 ; .byte %01100110 ; .byte %00100100 ; .byte %00011000 .byte ; .byte %00000000 ; .byte %00111100 ; .byte %01000010 ; .byte %11001111 ; .byte %11000011 ; .byte %01100110 ; .byte %00100100 ; .byte %00011000 .byte %00000000 .byte %00000000 .byte %00000000 .byte %00000000 .byte %00000000 .byte %00000000 .byte %00000000 .byte %00000000 .byte ; .byte %00000000 ; .byte %00000000 ; .byte %00000000 ; .byte %11111111 ; .byte %11111111 ; .byte %00000000 ; .byte %00000000 ; .byte %00000000 .byte ; .byte %00000000 ; .byte %00111100 ; .byte %01011010 ; .byte %11011011 ; .byte %11000011 ; .byte %01011010 ; .byte %00111100 ; .byte %00011000 .byte %00000000 .byte %00000000 .byte %00000000 .byte %00000000 .byte %00000000 .byte %00000000 .byte %00000000 .byte %00000000 .byte %00000000 .byte %00000000 .byte %00000000 .byte %00000000 .byte %00000000 .byte %00000000 .byte %00000000 .byte %00000000 .byte ; .byte %00000000 ; .byte %10000000 ; .byte %01111110 ; .byte %11001000 ; .byte %11111000 ; .byte %11000000 ; .byte %10000000 ; .byte %00000000 .byte ; .byte %10111101 ; .byte %01000010 ; .byte %10100101 ; .byte %10100101 ; .byte %10000001 ; .byte %10011001 ; .byte %10000001 ; .byte %01111110 .byte %00000000 .byte %00000000 .byte %00000000 .byte %00000000 .byte %00000000 .byte %00000000 .byte %00000000 .byte %00000000 .byte %00000000 .byte %00000000 .byte %00000000 .byte %00000000 .byte %00000000 .byte %00000000 .byte %00000000 .byte %00000000 .byte ; .byte %00000000 ; .byte %00111100 ; .byte %01100110 ; .byte %11011111 ; .byte %11100111 ; .byte %01111010 ; .byte %00100100 ; .byte %00011000 .byte %00000000 .byte %00000000 .byte %00000000 .byte %00000000 .byte %00000000 .byte %00000000 .byte %00000000 .byte %00000000 .byte ; .byte %00011000 ; .byte %00011000 ; .byte %01111000 ; .byte %00011000 ; .byte %00011000 ; .byte %00011110 ; .byte %00011000 ; .byte %00011000 .byte %00000000 .byte %00000000 .byte %00000000 .byte %00000000 .byte %00000000 .byte %00000000 .byte %00000000 .byte %00000000 .byte ; .byte .byte %00000000 .byte %00000000 .byte %00000000 .byte %00000000 .byte %00000000 .byte %00000000 .byte %00000000 .byte %00000000 .byte %00000000 .byte %00000000 .byte %00000000 .byte %00000000 .byte %00000000 .byte %00000000 .byte %00000000 .byte %00000000 .byte .byte %00000000 .byte %00000000 .byte %00000000 .byte %00000000 .byte %00000000 .byte %00000000 .byte %00000000 .byte %00000000 .byte .byte %00000000 .byte %00000000 .byte %00000000 .byte %00000000 .byte %00000000 .byte %00000000 .byte %00000000 .byte %00000000 .byte ; .byte %00011000 ; .byte %00110100 ; .byte %00011001 ; .byte %01110111 ; .byte %10011000 ; .byte %00011000 ; .byte %00101000 ; .byte %00101000 .byte %00000000 .byte %00000000 .byte %00000000 .byte %00000000 .byte %00000000 .byte %00000000 .byte %00000000 .byte %00000000 .byte ; .byte %00011000 ; .byte %00111100 ; .byte %00011000 ; .byte %01100110 ; .byte %10011001 ; .byte %00011000 ; .byte %00100100 ; .byte %01100110 ================================================ FILE: src/assets/templates/8x8/cc65_pce_tiles.s.template ================================================ ;---------------------------------------------------------------------------- ; VGA font for the PC-Engine conio implementation .export _pce_font ; The character tiles use only two colors from each pallette. Color zero ; comes from pallette zero; color one is different in each pallette. The ; color of a character is set by choosing one of the 16 pallettes. .rodata _pce_font: .byte .byte .byte ; down .byte ; up .byte ; right .byte ; left .byte ; bomb .byte ; skull .byte ; ghost .byte ; unused gun .byte $00,$80,$7e,$c8,$f8,$c0,$80,$00 ; power-up S .byte ; power-up F .byte ; unused power-up H .byte $00,$3c,$5a,$db,$c3,$5A,$3c,$18 ; gun .byte ; power-up H .byte ; bullet .byte .byte ; rocket .byte ; left missile .byte ; right missile .byte ; dead ghost .byte .byte .byte .byte .byte .byte .byte .byte .byte $00, $24, $66, $FF, $66, $24, $00, $00 .byte $00, $18, $3C, $7E, $FF, $FF, $00, $00 .byte $00, $FF, $FF, $7E, $3C, $18, $00, $00 .byte $00, $00, $00, $00, $00, $00, $00, $00 .byte $30, $78, $78, $78, $30, $00, $30, $00 .byte $6C, $6C, $6C, $00, $00, $00, $00, $00 .byte $6C, $6C, $FE, $6C, $FE, $6C, $6C, $00 .byte $30, $7C, $C0, $78, $0C, $F8, $30, $00 .byte $00, $C6, $CC, $18, $30, $66, $C6, $00 .byte $38, $6C, $38, $76, $DC, $CC, $76, $00 .byte $60, $60, $C0, $00, $00, $00, $00, $00 .byte $18, $30, $60, $60, $60, $30, $18, $00 .byte $60, $30, $18, $18, $18, $30, $60, $00 .byte $00, $66, $3C, $FF, $3C, $66, $00, $00 .byte $00, $30, $30, $FC, $30, $30, $00, $00 .byte $00, $00, $00, $00, $00, $30, $30, $60 .byte $00, $00, $00, $FC, $00, $00, $00, $00 .byte $00, $00, $00, $00, $00, $30, $30, $00 .byte $06, $0C, $18, $30, $60, $C0, $80, $00 .byte $7C, $C6, $CE, $DE, $F6, $E6, $7C, $00 .byte $30, $70, $30, $30, $30, $30, $FC, $00 .byte $78, $CC, $0C, $38, $60, $CC, $FC, $00 .byte $78, $CC, $0C, $38, $0C, $CC, $78, $00 .byte $1C, $3C, $6C, $CC, $FE, $0C, $1E, $00 .byte $FC, $C0, $F8, $0C, $0C, $CC, $78, $00 .byte $38, $60, $C0, $F8, $CC, $CC, $78, $00 .byte $FC, $CC, $0C, $18, $30, $30, $30, $00 .byte $78, $CC, $CC, $78, $CC, $CC, $78, $00 .byte $78, $CC, $CC, $7C, $0C, $18, $70, $00 .byte $00, $30, $30, $00, $00, $30, $30, $00 .byte $00, $30, $30, $00, $00, $30, $30, $60 .byte $18, $30, $60, $C0, $60, $30, $18, $00 .byte $00, $00, $FC, $00, $00, $FC, $00, $00 .byte $60, $30, $18, $0C, $18, $30, $60, $00 .byte $78, $CC, $0C, $18, $30, $00, $30, $00 .byte $7C, $C6, $DE, $DE, $DE, $C0, $78, $00 .byte $30, $78, $CC, $CC, $FC, $CC, $CC, $00 .byte $FC, $66, $66, $7C, $66, $66, $FC, $00 .byte $3C, $66, $C0, $C0, $C0, $66, $3C, $00 .byte $F8, $6C, $66, $66, $66, $6C, $F8, $00 .byte $7E, $60, $60, $78, $60, $60, $7E, $00 .byte $7E, $60, $60, $78, $60, $60, $60, $00 .byte $3C, $66, $C0, $C0, $CE, $66, $3E, $00 .byte $CC, $CC, $CC, $FC, $CC, $CC, $CC, $00 .byte $78, $30, $30, $30, $30, $30, $78, $00 .byte $1E, $0C, $0C, $0C, $CC, $CC, $78, $00 .byte $E6, $66, $6C, $78, $6C, $66, $E6, $00 .byte $60, $60, $60, $60, $60, $60, $7E, $00 .byte $C6, $EE, $FE, $FE, $D6, $C6, $C6, $00 .byte $C6, $E6, $F6, $DE, $CE, $C6, $C6, $00 .byte $38, $6C, $C6, $C6, $C6, $6C, $38, $00 .byte $FC, $66, $66, $7C, $60, $60, $F0, $00 .byte $78, $CC, $CC, $CC, $DC, $78, $1C, $00 .byte $FC, $66, $66, $7C, $6C, $66, $E6, $00 .byte $78, $CC, $E0, $70, $1C, $CC, $78, $00 .byte $FC, $30, $30, $30, $30, $30, $30, $00 .byte $CC, $CC, $CC, $CC, $CC, $CC, $FC, $00 .byte $CC, $CC, $CC, $CC, $CC, $78, $30, $00 .byte $C6, $C6, $C6, $D6, $FE, $EE, $C6, $00 .byte $C6, $C6, $6C, $38, $38, $6C, $C6, $00 .byte $CC, $CC, $CC, $78, $30, $30, $78, $00 .byte $FE, $06, $0C, $18, $30, $60, $FE, $00 .byte $78, $60, $60, $60, $60, $60, $78, $00 .byte $C0, $60, $30, $18, $0C, $06, $02, $00 .byte $78, $18, $18, $18, $18, $18, $78, $00 .byte $10, $38, $6C, $C6, $00, $00, $00, $00 .byte $00, $00, $00, $00, $00, $00, $00, $FF .byte $30, $30, $18, $00, $00, $00, $00, $00 .byte $00, $00, $78, $0C, $7C, $CC, $76, $00 .byte $E0, $60, $60, $7C, $66, $66, $DC, $00 .byte $00, $00, $78, $CC, $C0, $CC, $78, $00 .byte $1C, $0C, $0C, $7C, $CC, $CC, $76, $00 .byte $00, $00, $78, $CC, $FC, $C0, $78, $00 .byte $38, $6C, $60, $F0, $60, $60, $F0, $00 .byte $00, $00, $76, $CC, $CC, $7C, $0C, $F8 .byte $E0, $60, $6C, $76, $66, $66, $E6, $00 .byte $30, $00, $70, $30, $30, $30, $78, $00 .byte $0C, $00, $0C, $0C, $0C, $CC, $CC, $78 .byte $E0, $60, $66, $6C, $78, $6C, $E6, $00 .byte $70, $30, $30, $30, $30, $30, $78, $00 .byte $00, $00, $CC, $FE, $FE, $D6, $C6, $00 .byte $00, $00, $F8, $CC, $CC, $CC, $CC, $00 .byte $00, $00, $78, $CC, $CC, $CC, $78, $00 .byte $00, $00, $DC, $66, $66, $7C, $60, $F0 .byte $00, $00, $76, $CC, $CC, $7C, $0C, $1E .byte $00, $00, $DC, $76, $66, $60, $F0, $00 .byte $00, $00, $7C, $C0, $78, $0C, $F8, $00 .byte $10, $30, $7C, $30, $30, $34, $18, $00 .byte $00, $00, $CC, $CC, $CC, $CC, $76, $00 .byte $00, $00, $CC, $CC, $CC, $78, $30, $00 .byte $00, $00, $C6, $D6, $FE, $FE, $6C, $00 .byte $00, $00, $C6, $6C, $38, $6C, $C6, $00 .byte $00, $00, $CC, $CC, $CC, $7C, $0C, $F8 .byte $00, $00, $FC, $98, $30, $64, $FC, $00 .byte $1C, $30, $30, $E0, $30, $30, $1C, $00 .byte $18, $18, $18, $00, $18, $18, $18, $00 .byte $E0, $30, $30, $1C, $30, $30, $E0, $00 .byte $76, $DC, $00, $00, $00, $00, $00, $00 .byte $00, $10, $38, $6C, $C6, $C6, $FE, $00 ================================================ FILE: src/assets/templates/8x8/cc65_udc.s.template ================================================ .segment "GFX" .export _udgs _udgs: .byte .byte $38,$6c,$c6,$c6,$fe,$c6,$c6,$00 ; a .byte $fc,$c6,$c6,$fc,$c6,$c6,$fc,$00,$3c,$66,$c0,$c0,$c0,$66,$3c,$00 .byte $f8,$cc,$c6,$c6,$c6,$cc,$f8,$00,$fc,$c0,$c0,$f8,$c0,$c0,$fe,$00 .byte $fc,$c0,$c0,$f8,$c0,$c0,$c0,$00,$3e,$60,$c0,$ce,$c6,$66,$3e,$00 .byte $c6,$c6,$c6,$fe,$c6,$c6,$c6,$00,$fc,$30,$30,$30,$30,$30,$fc,$00 .byte $06,$06,$06,$06,$06,$c6,$7c,$00,$c6,$cc,$d8,$f0,$f8,$dc,$ce,$00 .byte $c0,$c0,$c0,$c0,$c0,$c0,$fe,$00,$c6,$ee,$fe,$d6,$c6,$c6,$c6,$00 .byte $c6,$e6,$f6,$de,$ce,$c6,$c6,$00,$7c,$c6,$c6,$c6,$c6,$c6,$7c,$00 .byte $fc,$c6,$c6,$c6,$fc,$c0,$c0,$00,$7c,$c6,$c6,$c6,$de,$cc,$7a,$00 .byte $fc,$c6,$c6,$cc,$f8,$dc,$ce,$00,$78,$cc,$c0,$7c,$06,$c6,$7c,$00 .byte $fc,$30,$30,$30,$30,$30,$30,$00,$c6,$c6,$c6,$c6,$c6,$c6,$7c,$00 .byte $c6,$c6,$c6,$c6,$6c,$38,$10,$00,$c6,$c6,$d6,$fe,$fe,$ee,$c6,$00 .byte $c6,$ee,$7c,$38,$7c,$ee,$c6,$00,$cc,$cc,$cc,$78,$30,$30,$30,$00 .byte $fe,$0e,$1c,$38,$70,$e0,$fe,$00 ; z .byte $00,$00,$00,$ff,$ff,$00,$00,$00 ; // unused .byte , ; 28 29 .byte ; 30 .byte ; 31 .byte $00,$00,$00,$00,$00,$00,$00,$00 ; 32 .byte .byte .byte ;.byte $18,$3e,$60,$3c,$06,$7c,$18,$00 ; 36 .byte .byte ; .byte ; .byte .byte .byte .byte .byte .byte .byte .byte .byte .byte $3c,$66,$6e,$76,$66,$66,$3c,$00, $18,$18,$38,$18,$18,$18,$7e,$00 ; 0 1 .byte $3c,$66,$06,$0c,$30,$60,$7e,$00, $3c,$66,$06,$1c,$06,$66,$3c,$00 .byte $06,$0e,$1e,$66,$7f,$06,$06,$00, $7e,$60,$7c,$06,$06,$66,$3c,$00 .byte $3c,$66,$60,$7c,$66,$66,$3c,$00, $7e,$66,$0c,$18,$18,$18,$18,$00 .byte $3c,$66,$66,$3c,$66,$66,$3c,$00, $3c,$66,$66,$3e,$06,$66,$3c,$00 ; 8 9 .byte .byte .byte .byte .byte .byte .byte .byte .byte ================================================ FILE: src/assets/templates/8x8/cc65_udc_64_chars.s.template ================================================ .segment "UDCCHAR" .export _Charset _Charset: ; 0xFE super .byte .byte .byte .byte ; formerly 24 .byte ; A-Z .byte $18,$3c,$66,$7e,$66,$66,$66,$00 .byte $7c,$66,$66,$7c,$66,$66,$7c,$00,$3c,$66,$60,$60,$60,$66,$3c,$00 .byte $78,$6c,$66,$66,$66,$6c,$78,$00,$7e,$60,$60,$78,$60,$60,$7e,$00 .byte $7e,$60,$60,$78,$60,$60,$60,$00,$3c,$66,$60,$6e,$66,$66,$3c,$00 .byte $66,$66,$66,$7e,$66,$66,$66,$00,$3c,$18,$18,$18,$18,$18,$3c,$00 .byte $1e,$0c,$0c,$0c,$0c,$6c,$38,$00,$66,$6c,$78,$70,$78,$6c,$66,$00 .byte $60,$60,$60,$60,$60,$60,$7e,$00,$63,$77,$7f,$6b,$63,$63,$63,$00 .byte $66,$76,$7e,$7e,$6e,$66,$66,$00,$3c,$66,$66,$66,$66,$66,$3c,$00 .byte $7c,$66,$66,$7c,$60,$60,$60,$00,$3c,$66,$66,$66,$66,$3c,$0e,$00 .byte $7c,$66,$66,$7c,$78,$6c,$66,$00,$3c,$66,$60,$3c,$06,$66,$3c,$00 .byte $7e,$18,$18,$18,$18,$18,$18,$00,$66,$66,$66,$66,$66,$66,$3c,$00 .byte $66,$66,$66,$66,$66,$3c,$18,$00,$63,$63,$63,$6b,$7f,$77,$63,$00 .byte $66,$66,$3c,$18,$3c,$66,$66,$00,$66,$66,$66,$3c,$18,$18,$18,$00 .byte $7e,$06,$0c,$18,$30,$60,$7e,$00 ; gun .byte ; pound - invincibility .byte ; powerup .byte ; rocket .byte ; cbm left arrow - left missile .byte ; space .byte $00,$00,$00,$00,$00,$00,$00,$00 ; bullet .byte ; vertical brick .byte ; horizontal brick .byte ; ghost .byte ; skull .byte ; bomb .byte ; player down .byte ; player left .byte ; player right .byte ; extraPoints .byte $18,$3e,$60,$3c,$06,$7c,$18,$00 ; player up .byte ; comma .byte ; dash .byte $00,$00,$00,$7e,$00,$00,$00,$00 ; period ;.byte $00,$00,$00,$00,$00,$18,$18,$00 .byte ; slash ;.byte 0,0,0,0,0,0,0,0 .byte .byte $3c,$66,$6e,$76,$66,$66,$3c,$00,$18,$18,$38,$18,$18,$18,$7e,$00 .byte $3c,$66,$06,$0c,$30,$60,$7e,$00,$3c,$66,$06,$1c,$06,$66,$3c,$00 .byte $06,$0e,$1e,$66,$7f,$06,$06,$00,$7e,$60,$7c,$06,$06,$66,$3c,$00 .byte $3c,$66,$60,$7c,$66,$66,$3c,$00,$7e,$66,$0c,$18,$18,$18,$18,$00 .byte $3c,$66,$66,$3c,$66,$66,$3c,$00 .byte $3c,$66,$66,$3e,$06,$66,$3c,$00 ; right missile .byte ; 0xFD freeze ; formerly 17 .byte ; ------------------------------------------------------------------------ ; Unused - Conflict? ================================================ FILE: src/assets/templates/8x8/cc65_udc_6chars.s.template ================================================ .segment "UDCCHAR" .export _Charset _Charset: .byte .byte .byte .byte .byte .byte ================================================ FILE: src/assets/templates/8x8/cc65_udc_arcade.s.template ================================================ .segment "GFX" .export _udgs _udgs: .byte .byte $38,$6c,$c6,$c6,$fe,$c6,$c6,$00 ; a .byte $fc,$c6,$c6,$fc,$c6,$c6,$fc,$00,$3c,$66,$c0,$c0,$c0,$66,$3c,$00 .byte $f8,$cc,$c6,$c6,$c6,$cc,$f8,$00,$fc,$c0,$c0,$f8,$c0,$c0,$fe,$00 .byte $fc,$c0,$c0,$f8,$c0,$c0,$c0,$00,$3e,$60,$c0,$ce,$c6,$66,$3e,$00 .byte $c6,$c6,$c6,$fe,$c6,$c6,$c6,$00,$fc,$30,$30,$30,$30,$30,$fc,$00 .byte $06,$06,$06,$06,$06,$c6,$7c,$00,$c6,$cc,$d8,$f0,$f8,$dc,$ce,$00 .byte $c0,$c0,$c0,$c0,$c0,$c0,$fe,$00,$c6,$ee,$fe,$d6,$c6,$c6,$c6,$00 .byte $c6,$e6,$f6,$de,$ce,$c6,$c6,$00,$7c,$c6,$c6,$c6,$c6,$c6,$7c,$00 .byte $fc,$c6,$c6,$c6,$fc,$c0,$c0,$00,$7c,$c6,$c6,$c6,$de,$cc,$7a,$00 .byte $fc,$c6,$c6,$cc,$f8,$dc,$ce,$00,$78,$cc,$c0,$7c,$06,$c6,$7c,$00 .byte $fc,$30,$30,$30,$30,$30,$30,$00,$c6,$c6,$c6,$c6,$c6,$c6,$7c,$00 .byte $c6,$c6,$c6,$c6,$6c,$38,$10,$00,$c6,$c6,$d6,$fe,$fe,$ee,$c6,$00 .byte $c6,$ee,$7c,$38,$7c,$ee,$c6,$00,$cc,$cc,$cc,$78,$30,$30,$30,$00 .byte $fe,$0e,$1c,$38,$70,$e0,$fe,$00 .byte $00,$00,$00,$ff,$ff,$00,$00,$00 .byte , ; 28 29 .byte ; 30 .byte ; 31 .byte $00,$00,$00,$00,$00,$00,$00,$00 ; 32 .byte .byte .byte ;.byte $18,$3e,$60,$3c,$06,$7c,$18,$00 ; 36 .byte .byte .byte .byte .byte .byte .byte .byte .byte .byte .byte .byte .byte $38,$4c,$c6,$c6,$c6,$64,$38,$00 ; 0 .byte $30,$70,$30,$30,$30,$30,$fc,$00,$7c,$c6,$0e,$3c,$60,$c0,$fe,$00 .byte $7e,$0c,$18,$3c,$06,$c6,$7c,$00,$1c,$3c,$6c,$cc,$fe,$0c,$0c,$00 .byte $fc,$c0,$fc,$06,$06,$c6,$7c,$00,$3c,$60,$c0,$fc,$c6,$c6,$7c,$00 .byte $fe,$c6,$0c,$18,$30,$30,$30,$00,$78,$c4,$e4,$78,$9e,$86,$7c,$00 .byte $7c,$c6,$c6,$7e,$06,$0c,$78,$00 ; 9 .byte .byte .byte .byte .byte .byte .byte .byte .byte ================================================ FILE: src/assets/templates/8x8/cc65_udc_arcade_64_chars.s.template ================================================ .segment "UDCCHAR" .export _Charset _Charset: ; right missile .byte ; 0xFD freeze ; formerly 17 .byte ; 0xFE super .byte .byte .byte .byte ; formerly 24 .byte ; A-Z .byte $38,$6c,$c6,$c6,$fe,$c6,$c6,$00 ; a .byte $fc,$c6,$c6,$fc,$c6,$c6,$fc,$00,$3c,$66,$c0,$c0,$c0,$66,$3c,$00 .byte $f8,$cc,$c6,$c6,$c6,$cc,$f8,$00,$fc,$c0,$c0,$f8,$c0,$c0,$fe,$00 .byte $fc,$c0,$c0,$f8,$c0,$c0,$c0,$00,$3e,$60,$c0,$ce,$c6,$66,$3e,$00 .byte $c6,$c6,$c6,$fe,$c6,$c6,$c6,$00,$fc,$30,$30,$30,$30,$30,$fc,$00 .byte $06,$06,$06,$06,$06,$c6,$7c,$00,$c6,$cc,$d8,$f0,$f8,$dc,$ce,$00 .byte $c0,$c0,$c0,$c0,$c0,$c0,$fe,$00,$c6,$ee,$fe,$d6,$c6,$c6,$c6,$00 .byte $c6,$e6,$f6,$de,$ce,$c6,$c6,$00,$7c,$c6,$c6,$c6,$c6,$c6,$7c,$00 .byte $fc,$c6,$c6,$c6,$fc,$c0,$c0,$00,$7c,$c6,$c6,$c6,$de,$cc,$7a,$00 .byte $fc,$c6,$c6,$cc,$f8,$dc,$ce,$00,$78,$cc,$c0,$7c,$06,$c6,$7c,$00 .byte $fc,$30,$30,$30,$30,$30,$30,$00,$c6,$c6,$c6,$c6,$c6,$c6,$7c,$00 .byte $c6,$c6,$c6,$c6,$6c,$38,$10,$00,$c6,$c6,$d6,$fe,$fe,$ee,$c6,$00 .byte $c6,$ee,$7c,$38,$7c,$ee,$c6,$00,$cc,$cc,$cc,$78,$30,$30,$30,$00 .byte $fe,$0e,$1c,$38,$70,$e0,$fe,$00 ; z ; gun .byte ; pound - invincibility .byte ; powerup .byte ; rocket .byte ; cbm left arrow - left missile .byte ; space .byte $00,$00,$00,$00,$00,$00,$00,$00 ; bullet .byte ; vertical brick .byte ; horizontal brick .byte ; ghost .byte ; skull .byte ; bomb .byte ; player down .byte ; player left .byte ; player right .byte ; extraPoints ;.byte $18,$3e,$60,$3c,$06,$7c,$18,$00 .byte ; player up .byte ; comma .byte ; dash .byte ; period ;.byte $00,$00,$00,$00,$00,$18,$18,$00 .byte ; slash ;.byte 0,0,0,0,0,0,0,0 .byte .byte $38,$4c,$c6,$c6,$c6,$64,$38,$00 ; 0 .byte $30,$70,$30,$30,$30,$30,$fc,$00,$7c,$c6,$0e,$3c,$60,$c0,$fe,$00 .byte $7e,$0c,$18,$3c,$06,$c6,$7c,$00,$1c,$3c,$6c,$cc,$fe,$0c,$0c,$00 .byte $fc,$c0,$fc,$06,$06,$c6,$7c,$00,$3c,$60,$c0,$fc,$c6,$c6,$7c,$00 .byte $fe,$c6,$0c,$18,$30,$30,$30,$00,$78,$c4,$e4,$78,$9e,$86,$7c,$00 .byte $7c,$c6,$c6,$7e,$06,$0c,$78,$00 ; 9 ; ------------------------------------------------------------------------ ; Unused - Conflict? ================================================ FILE: src/assets/templates/8x8/cc65_udc_arcade_VIC20.s.template ================================================ .segment "GFX" .export _udgs _udgs: .byte $00,$00,$00,$00,$00,$00,$00,$00 ; 32 .byte ;(33) .byte .byte .byte .byte .byte .byte .byte ;(40) .byte .byte .byte .byte .byte .byte .byte .byte $38,$4c,$c6,$c6,$c6,$64,$38,$00 ; 0 (48) .byte $30,$70,$30,$30,$30,$30,$fc,$00,$7c,$c6,$0e,$3c,$60,$c0,$fe,$00 .byte $7e,$0c,$18,$3c,$06,$c6,$7c,$00,$1c,$3c,$6c,$cc,$fe,$0c,$0c,$00 .byte $fc,$c0,$fc,$06,$06,$c6,$7c,$00,$3c,$60,$c0,$fc,$c6,$c6,$7c,$00 .byte $fe,$c6,$0c,$18,$30,$30,$30,$00,$78,$c4,$e4,$78,$9e,$86,$7c,$00 .byte $7c,$c6,$c6,$7e,$06,$0c,$78,$00 ; 9 (57) .byte .byte .byte .byte .byte .byte .byte ;(64) .byte $38,$6c,$c6,$c6,$fe,$c6,$c6,$00 ; a (65) .byte $fc,$c6,$c6,$fc,$c6,$c6,$fc,$00,$3c,$66,$c0,$c0,$c0,$66,$3c,$00 .byte $f8,$cc,$c6,$c6,$c6,$cc,$f8,$00,$fc,$c0,$c0,$f8,$c0,$c0,$fe,$00 .byte $fc,$c0,$c0,$f8,$c0,$c0,$c0,$00,$3e,$60,$c0,$ce,$c6,$66,$3e,$00 .byte $c6,$c6,$c6,$fe,$c6,$c6,$c6,$00,$fc,$30,$30,$30,$30,$30,$fc,$00 .byte $06,$06,$06,$06,$06,$c6,$7c,$00,$c6,$cc,$d8,$f0,$f8,$dc,$ce,$00 .byte $c0,$c0,$c0,$c0,$c0,$c0,$fe,$00,$c6,$ee,$fe,$d6,$c6,$c6,$c6,$00 .byte $c6,$e6,$f6,$de,$ce,$c6,$c6,$00,$7c,$c6,$c6,$c6,$c6,$c6,$7c,$00 .byte $fc,$c6,$c6,$c6,$fc,$c0,$c0,$00,$7c,$c6,$c6,$c6,$de,$cc,$7a,$00 .byte $fc,$c6,$c6,$cc,$f8,$dc,$ce,$00,$78,$cc,$c0,$7c,$06,$c6,$7c,$00 .byte $fc,$30,$30,$30,$30,$30,$30,$00,$c6,$c6,$c6,$c6,$c6,$c6,$7c,$00 .byte $c6,$c6,$c6,$c6,$6c,$38,$10,$00,$c6,$c6,$d6,$fe,$fe,$ee,$c6,$00 .byte $c6,$ee,$7c,$38,$7c,$ee,$c6,$00,$cc,$cc,$cc,$78,$30,$30,$30,$00 .byte $fe,$0e,$1c,$38,$70,$e0,$fe,$00 ; z (90) ;.byte $00,$00,$00,$ff,$ff,$00,$00,$00 ; (91) unused (future 27th tile) .byte .byte ; (92) .byte ; (93) .byte ; (94) .byte ; (95) ================================================ FILE: src/assets/templates/8x8/cc65_udc_arcade_conio.s.template ================================================ .segment "GFX" .export _udgs _udgs: .byte .byte $38,$6c,$c6,$c6,$fe,$c6,$c6,$00 ; a .byte $fc,$c6,$c6,$fc,$c6,$c6,$fc,$00,$3c,$66,$c0,$c0,$c0,$66,$3c,$00 .byte $f8,$cc,$c6,$c6,$c6,$cc,$f8,$00,$fc,$c0,$c0,$f8,$c0,$c0,$fe,$00 .byte $fc,$c0,$c0,$f8,$c0,$c0,$c0,$00,$3e,$60,$c0,$ce,$c6,$66,$3e,$00 .byte $c6,$c6,$c6,$fe,$c6,$c6,$c6,$00,$fc,$30,$30,$30,$30,$30,$fc,$00 .byte $06,$06,$06,$06,$06,$c6,$7c,$00,$c6,$cc,$d8,$f0,$f8,$dc,$ce,$00 .byte $c0,$c0,$c0,$c0,$c0,$c0,$fe,$00,$c6,$ee,$fe,$d6,$c6,$c6,$c6,$00 .byte $c6,$e6,$f6,$de,$ce,$c6,$c6,$00,$7c,$c6,$c6,$c6,$c6,$c6,$7c,$00 .byte $fc,$c6,$c6,$c6,$fc,$c0,$c0,$00,$7c,$c6,$c6,$c6,$de,$cc,$7a,$00 .byte $fc,$c6,$c6,$cc,$f8,$dc,$ce,$00,$78,$cc,$c0,$7c,$06,$c6,$7c,$00 .byte $fc,$30,$30,$30,$30,$30,$30,$00,$c6,$c6,$c6,$c6,$c6,$c6,$7c,$00 .byte $c6,$c6,$c6,$c6,$6c,$38,$10,$00,$c6,$c6,$d6,$fe,$fe,$ee,$c6,$00 .byte $c6,$ee,$7c,$38,$7c,$ee,$c6,$00,$cc,$cc,$cc,$78,$30,$30,$30,$00 .byte $fe,$0e,$1c,$38,$70,$e0,$fe,$00 .byte $00,$00,$00,$ff,$ff,$00,$00,$00 .byte , ; 28 29 .byte ; 30 .byte ; 31 .byte $00,$00,$00,$00,$00,$00,$00,$00 ; 32 .byte .byte .byte ;.byte $18,$3e,$60,$3c,$06,$7c,$18,$00 ; 36 .byte .byte .byte .byte .byte .byte .byte .byte .byte .byte .byte .byte .byte $38,$4c,$c6,$c6,$c6,$64,$38,$00 ; 0 .byte $30,$70,$30,$30,$30,$30,$fc,$00,$7c,$c6,$0e,$3c,$60,$c0,$fe,$00 .byte $7e,$0c,$18,$3c,$06,$c6,$7c,$00,$1c,$3c,$6c,$cc,$fe,$0c,$0c,$00 .byte $fc,$c0,$fc,$06,$06,$c6,$7c,$00,$3c,$60,$c0,$fc,$c6,$c6,$7c,$00 .byte $fe,$c6,$0c,$18,$30,$30,$30,$00,$78,$c4,$e4,$78,$9e,$86,$7c,$00 .byte $7c,$c6,$c6,$7e,$06,$0c,$78,$00 ; 9 .byte .byte .byte .byte .byte .byte ; .byte .byte 0,0,0,0,0,0,0,0 .byte $38,$6c,$c6,$c6,$fe,$c6,$c6,$00 ; a .byte $fc,$c6,$c6,$fc,$c6,$c6,$fc,$00,$3c,$66,$c0,$c0,$c0,$66,$3c,$00 .byte $f8,$cc,$c6,$c6,$c6,$cc,$f8,$00,$fc,$c0,$c0,$f8,$c0,$c0,$fe,$00 .byte $fc,$c0,$c0,$f8,$c0,$c0,$c0,$00,$3e,$60,$c0,$ce,$c6,$66,$3e,$00 .byte $c6,$c6,$c6,$fe,$c6,$c6,$c6,$00,$fc,$30,$30,$30,$30,$30,$fc,$00 .byte $06,$06,$06,$06,$06,$c6,$7c,$00,$c6,$cc,$d8,$f0,$f8,$dc,$ce,$00 .byte $c0,$c0,$c0,$c0,$c0,$c0,$fe,$00,$c6,$ee,$fe,$d6,$c6,$c6,$c6,$00 .byte $c6,$e6,$f6,$de,$ce,$c6,$c6,$00,$7c,$c6,$c6,$c6,$c6,$c6,$7c,$00 .byte $fc,$c6,$c6,$c6,$fc,$c0,$c0,$00,$7c,$c6,$c6,$c6,$de,$cc,$7a,$00 .byte $fc,$c6,$c6,$cc,$f8,$dc,$ce,$00,$78,$cc,$c0,$7c,$06,$c6,$7c,$00 .byte $fc,$30,$30,$30,$30,$30,$30,$00,$c6,$c6,$c6,$c6,$c6,$c6,$7c,$00 .byte $c6,$c6,$c6,$c6,$6c,$38,$10,$00,$c6,$c6,$d6,$fe,$fe,$ee,$c6,$00 .byte $c6,$ee,$7c,$38,$7c,$ee,$c6,$00,$cc,$cc,$cc,$78,$30,$30,$30,$00 .byte $fe,$0e,$1c,$38,$70,$e0,$fe,$00 .byte .byte .byte ================================================ FILE: src/assets/templates/8x8/cc65_udc_arcade_v2.s.template ================================================ .segment "GFX" .export _udgs _udgs: .byte $00,$00,$00,$00,$00,$00,$00,$00 ; 32 .byte ;(33) .byte .byte .byte .byte .byte .byte .byte ;(40) .byte .byte .byte .byte .byte .byte .byte .byte $38,$4c,$c6,$c6,$c6,$64,$38,$00 ; 0 (48) .byte $30,$70,$30,$30,$30,$30,$fc,$00,$7c,$c6,$0e,$3c,$60,$c0,$fe,$00 .byte $7e,$0c,$18,$3c,$06,$c6,$7c,$00,$1c,$3c,$6c,$cc,$fe,$0c,$0c,$00 .byte $fc,$c0,$fc,$06,$06,$c6,$7c,$00,$3c,$60,$c0,$fc,$c6,$c6,$7c,$00 .byte $fe,$c6,$0c,$18,$30,$30,$30,$00,$78,$c4,$e4,$78,$9e,$86,$7c,$00 .byte $7c,$c6,$c6,$7e,$06,$0c,$78,$00 ; 9 (57) .byte .byte .byte .byte .byte .byte .byte ;(64) .byte $38,$6c,$c6,$c6,$fe,$c6,$c6,$00 ; a (65) .byte $fc,$c6,$c6,$fc,$c6,$c6,$fc,$00,$3c,$66,$c0,$c0,$c0,$66,$3c,$00 .byte $f8,$cc,$c6,$c6,$c6,$cc,$f8,$00,$fc,$c0,$c0,$f8,$c0,$c0,$fe,$00 .byte $fc,$c0,$c0,$f8,$c0,$c0,$c0,$00,$3e,$60,$c0,$ce,$c6,$66,$3e,$00 .byte $c6,$c6,$c6,$fe,$c6,$c6,$c6,$00,$fc,$30,$30,$30,$30,$30,$fc,$00 .byte $06,$06,$06,$06,$06,$c6,$7c,$00,$c6,$cc,$d8,$f0,$f8,$dc,$ce,$00 .byte $c0,$c0,$c0,$c0,$c0,$c0,$fe,$00,$c6,$ee,$fe,$d6,$c6,$c6,$c6,$00 .byte $c6,$e6,$f6,$de,$ce,$c6,$c6,$00,$7c,$c6,$c6,$c6,$c6,$c6,$7c,$00 .byte $fc,$c6,$c6,$c6,$fc,$c0,$c0,$00,$7c,$c6,$c6,$c6,$de,$cc,$7a,$00 .byte $fc,$c6,$c6,$cc,$f8,$dc,$ce,$00,$78,$cc,$c0,$7c,$06,$c6,$7c,$00 .byte $fc,$30,$30,$30,$30,$30,$30,$00,$c6,$c6,$c6,$c6,$c6,$c6,$7c,$00 .byte $c6,$c6,$c6,$c6,$6c,$38,$10,$00,$c6,$c6,$d6,$fe,$fe,$ee,$c6,$00 .byte $c6,$ee,$7c,$38,$7c,$ee,$c6,$00,$cc,$cc,$cc,$78,$30,$30,$30,$00 .byte $fe,$0e,$1c,$38,$70,$e0,$fe,$00 ; z (90) .byte ; (91) unused (future 27th tile) .byte ; (92) .byte ; (93) .byte ; (94) .byte ; (95) ================================================ FILE: src/assets/templates/8x8/cc65_udc_atari7800_160A.s.template ================================================ 0,0,0,0,0,0,0,0 $38,$4c,$c6,$c6,$c6,$64,$38,$00 $30,$70,$30,$30,$30,$30,$fc,$00 $7c,$c6,$0e,$3c,$60,$c0,$fe,$00 $7e,$0c,$18,$3c,$06,$c6,$7c,$00 $1c,$3c,$6c,$cc,$fe,$0c,$0c,$00 $fc,$c0,$fc,$06,$06,$c6,$7c,$00 $3c,$60,$c0,$fc,$c6,$c6,$7c,$00 $fe,$c6,$0c,$18,$30,$30,$30,$00 $78,$c4,$e4,$78,$9e,$86,$7c,$00 $7c,$c6,$c6,$7e,$06,$0c,$78,$00 $38,$6c,$c6,$c6,$fe,$c6,$c6,$00 $fc,$c6,$c6,$fc,$c6,$c6,$fc,$00 $3c,$66,$c0,$c0,$c0,$66,$3c,$00 $f8,$cc,$c6,$c6,$c6,$cc,$f8,$00 $fc,$c0,$c0,$f8,$c0,$c0,$fe,$00 $fc,$c0,$c0,$f8,$c0,$c0,$c0,$00 $3e,$60,$c0,$ce,$c6,$66,$3e,$00 $c6,$c6,$c6,$fe,$c6,$c6,$c6,$00 $fc,$30,$30,$30,$30,$30,$fc,$00 $06,$06,$06,$06,$06,$c6,$7c,$00 $c6,$cc,$d8,$f0,$f8,$dc,$ce,$00 $c0,$c0,$c0,$c0,$c0,$c0,$fe,$00 $c6,$ee,$fe,$d6,$c6,$c6,$c6,$00 $c6,$e6,$f6,$de,$ce,$c6,$c6,$00 $7c,$c6,$c6,$c6,$c6,$c6,$7c,$00 $fc,$c6,$c6,$c6,$fc,$c0,$c0,$00 $7c,$c6,$c6,$c6,$de,$cc,$7a,$00 $fc,$c6,$c6,$cc,$f8,$dc,$ce,$00 $78,$cc,$c0,$7c,$06,$c6,$7c,$00 $fc,$30,$30,$30,$30,$30,$30,$00 $c6,$c6,$c6,$c6,$c6,$c6,$7c,$00 $c6,$c6,$c6,$c6,$6c,$38,$10,$00 $c6,$c6,$d6,$fe,$fe,$ee,$c6,$00 $c6,$ee,$7c,$38,$7c,$ee,$c6,$00 $cc,$cc,$cc,$78,$30,$30,$30,$00 $fe,$0e,$1c,$38,$70,$e0,$fe,$00 ================================================ FILE: src/assets/templates/8x8/cc65_udc_vic20_19_tiles.s.template ================================================ .segment "UDCCHAR" .export _Charset _Charset: ; 0xEC player up .byte ; 0xED gun .byte ; 0xEE pound - invincibility .byte ; 0xEF powerup .byte ; 0xF0 rocket .byte ; 0xF1 left missile .byte ; 0xF2 space .byte $00,$00,$00,$00,$00,$00,$00,$00 ; 0xF3 bullet .byte ; 0xF4 vertical .byte ; 0xF5 horizontal .byte ; 0xF6 ghost .byte ; 0xF7 skull .byte ; 0xF8 bomb .byte ; 0xF9 player down .byte ; 0xFA player left .byte ; 0xFB player right .byte ; 0xFC right missile from the right .byte ; 0xFD freeze .byte ; 0xFE super .byte ; 0xFF dead ghost .byte ================================================ FILE: src/assets/templates/8x8/cc65_udc_vic20_25_tiles.s.template ================================================ .segment "UDCCHAR" .export _Charset _Charset: ; 0xE6 .byte ; 0xE7 .byte ; 0xE8 .byte ; 0xE9 .byte ; 0xEA .byte ; 0xEB .byte ; 0xEC player up .byte ; 0xED gun .byte ; 0xEE pound - invincibility .byte ; 0xEF powerup .byte ; 0xF0 rocket .byte ; 0xF1 left missile .byte ; 0xF2 space .byte $00,$00,$00,$00,$00,$00,$00,$00 ; 0xF3 bullet .byte ; 0xF4 vertical .byte ; 0xF5 horizontal .byte ; 0xF6 ghost .byte ; 0xF7 skull .byte ; 0xF8 bomb .byte ; 0xF9 player down .byte ; 0xFA player left .byte ; 0xFB player right .byte ; 0xFC right missile from the right .byte ; 0xFD freeze .byte ; 0xFE super .byte ; 0xFF dead ghost .byte ================================================ FILE: src/assets/templates/8x8/cc65_udc_vic20_27_tiles.s.template ================================================ .segment "UDCCHAR" .export _Charset _Charset: ; 0xE4 .byte ; 0xE5 .byte ; 0xE6 .byte ; 0xE7 .byte ; 0xE8 .byte ; 0xE9 .byte ; 0xEA .byte ; 0xEB .byte ; 0xEC player up .byte ; 0xED gun .byte ; 0xEE pound - invincibility .byte ; 0xEF powerup .byte ; 0xF0 rocket .byte ; 0xF1 left missile .byte ; 0xF2 space .byte $00,$00,$00,$00,$00,$00,$00,$00 ; 0xF3 bullet .byte ; 0xF4 vertical .byte ; 0xF5 horizontal .byte ; 0xF6 ghost .byte ; 0xF7 skull .byte ; 0xF8 bomb .byte ; 0xF9 player down .byte ; 0xFA player left .byte ; 0xFB player right .byte ; 0xFC right missile from the right .byte ; 0xFD freeze .byte ; 0xFE super .byte ; 0xFF dead ghost .byte ================================================ FILE: src/assets/templates/8x8/cc65_udc_vic20_64_chars.s.template ================================================ .segment "UDCCHAR" .export _Charset _Charset: .byte , $38,$6c,$c6,$c6,$fe,$c6,$c6,$00 ; a (65) .byte $fc,$c6,$c6,$fc,$c6,$c6,$fc,$00,$3c,$66,$c0,$c0,$c0,$66,$3c,$00 .byte $f8,$cc,$c6,$c6,$c6,$cc,$f8,$00,$fc,$c0,$c0,$f8,$c0,$c0,$fe,$00 .byte $fc,$c0,$c0,$f8,$c0,$c0,$c0,$00,$3e,$60,$c0,$ce,$c6,$66,$3e,$00 .byte $c6,$c6,$c6,$fe,$c6,$c6,$c6,$00,$fc,$30,$30,$30,$30,$30,$fc,$00 .byte $06,$06,$06,$06,$06,$c6,$7c,$00,$c6,$cc,$d8,$f0,$f8,$dc,$ce,$00 .byte $c0,$c0,$c0,$c0,$c0,$c0,$fe,$00,$c6,$ee,$fe,$d6,$c6,$c6,$c6,$00 .byte $c6,$e6,$f6,$de,$ce,$c6,$c6,$00,$7c,$c6,$c6,$c6,$c6,$c6,$7c,$00 .byte $fc,$c6,$c6,$c6,$fc,$c0,$c0,$00,$7c,$c6,$c6,$c6,$de,$cc,$7a,$00 .byte $fc,$c6,$c6,$cc,$f8,$dc,$ce,$00,$78,$cc,$c0,$7c,$06,$c6,$7c,$00 .byte $fc,$30,$30,$30,$30,$30,$30,$00,$c6,$c6,$c6,$c6,$c6,$c6,$7c,$00 .byte $c6,$c6,$c6,$c6,$6c,$38,$10,$00,$c6,$c6,$d6,$fe,$fe,$ee,$c6,$00 .byte $c6,$ee,$7c,$38,$7c,$ee,$c6,$00,$cc,$cc,$cc,$78,$30,$30,$30,$00 .byte $fe,$0e,$1c,$38,$70,$e0,$fe,$00, ; z (90) .byte , .byte , .byte $00,$00,$00,$00,$00,$00,$00,$00, .byte , .byte , .byte , .byte , .byte , .byte , .byte , .byte $38,$4c,$c6,$c6,$c6,$64,$38,$00 ; 0 .byte $30,$70,$30,$30,$30,$30,$fc,$00,$7c,$c6,$0e,$3c,$60,$c0,$fe,$00 .byte $7e,$0c,$18,$3c,$06,$c6,$7c,$00,$1c,$3c,$6c,$cc,$fe,$0c,$0c,$00 .byte $fc,$c0,$fc,$06,$06,$c6,$7c,$00,$3c,$60,$c0,$fc,$c6,$c6,$7c,$00 .byte $fe,$c6,$0c,$18,$30,$30,$30,$00,$78,$c4,$e4,$78,$9e,$86,$7c,$00 .byte $7c,$c6,$c6,$7e,$06,$0c,$78,$00 ; 9 .byte , .byte , .byte , ================================================ FILE: src/assets/templates/8x8/cmoc_udc_tiles.s.template ================================================ * 6809 assembly program generated by cmoc 0.1.56 SECTION code _udgs EXPORT ENDSECTION SECTION rodata string_literals_start EQU * string_literals_end EQU * ******************************************************************************* * READ0ONLY GLOBAL VARIABLES ENDSECTION SECTION rwdata * Globals with static initializers _udgs EQU * udgs: uint8_t[] FCB %00000000 FCB %00000000 FCB %00000000 FCB %00000000 FCB %00000000 FCB %00000000 FCB %00000000 FCB %00000000 ; invincibility FCB ; left missile FCB ; bullet FCB ; dollar $ FCB ; power-up F FCB ; vertical brick FCB ; skull FCB ; ghost FCB ; bomb FCB ; player down FCB ; horizontal brick FCB ; power-up S FCB FCB ; right missile FCB ; rocket FCB FCB %00000000 ; FCB %00111100 ; #### FCB %01000110 ; # ## FCB %01001010 ; # # # FCB %01010010 ; # # # FCB %01100010 ; ## # FCB %00111100 ; #### FCB %00000000 FCB FCB FCB FCB FCB FCB FCB %00000000 FCB %01111110 FCB %00000010 FCB %00000100 FCB %00001000 FCB %00010000 FCB %00010000 FCB %00000000 FCB %00000000 FCB %00111100 FCB %01000010 FCB %00111100 FCB %01000010 FCB %01000010 FCB %00111100 FCB %00000000 FCB %00000000 FCB %00111100 FCB %01000010 FCB %01000010 FCB %00111110 FCB %00000010 FCB %00111100 FCB %00000000 ; dead ghost FCB ; power-up H FCB ; player up FCB ; player right FCB ; player left FCB ; gun FCB ENDSECTION SECTION bss * Uninitialized globals bss_start EQU * bss_end EQU * ENDSECTION SECTION code ENDSECTION SECTION initgl ******************************************************************************* * Initialize global variables. ENDSECTION ******************************************************************************* * Importing 0 utility routine(s). ******************************************************************************* END ================================================ FILE: src/assets/templates/8x8/cmoc_udc_tiles_and_fonts.s.template ================================================ * 6809 assembly program generated by cmoc 0.1.56 SECTION code _udgs EXPORT ENDSECTION SECTION rodata string_literals_start EQU * string_literals_end EQU * ******************************************************************************* * READ0ONLY GLOBAL VARIABLES ENDSECTION SECTION rwdata * Globals with static initializers _udgs EQU * udgs: uint8_t[] FCB %00000000 FCB %00000000 FCB %00000000 FCB %00000000 FCB %00000000 FCB %00000000 FCB %00000000 FCB %00000000 ; invincibility FCB ; left missile FCB ; bullet FCB ; dollar $ FCB ; power0up F FCB ; vertical brick FCB ; skull FCB ; ghost FCB ; bomb FCB ; player down FCB ; horizontal brick FCB ; power0up S FCB FCB ; right missile FCB ; rocket FCB FCB %00000000 FCB %00000000 FCB %00000000 FCB %00000000 FCB %00000000 FCB %00000000 FCB %00000000 FCB %00000000 FCB FCB FCB FCB FCB FCB FCB %00000000 FCB %00000000 FCB %00000000 FCB %00000000 FCB %00000000 FCB %00000000 FCB %00000000 FCB %00000000 FCB %00000000 FCB %00000000 FCB %00000000 FCB %00000000 FCB %00000000 FCB %00000000 FCB %00000000 FCB %00000000 FCB %00000000 FCB %00000000 FCB %00000000 FCB %00000000 FCB %00000000 FCB %00000000 FCB %00000000 FCB %00000000 ; dead ghost FCB ; power0up H FCB ; player up FCB ; player right FCB ; player left FCB ; gun FCB ; 13 FCB %00000000 FCB %00000000 FCB %00000000 FCB %00000000 FCB %00111110 FCB %00000000 FCB %00000000 FCB %00000000 ; 14 FCB %00000000 FCB %00000000 FCB %00000000 FCB %00000000 FCB %00000000 FCB %00000000 FCB %00000000 FCB %00000000 ; 15 FCB %00000000 FCB %00000000 FCB %00000000 FCB %00000000 FCB %00000000 FCB %00000000 FCB %00000000 FCB %00000000 ; 16 FCB %00000000 FCB %00111100 FCB %01000110 FCB %01001010 FCB %01010010 FCB %01100010 FCB %00111100 FCB %00000000 ; 17 FCB %00000000 FCB %00011000 FCB %00101000 FCB %00001000 FCB %00001000 FCB %00001000 FCB %00111110 FCB %00000000 ; 18 FCB %00000000 FCB %00111100 FCB %01000010 FCB %00000010 FCB %00111100 FCB %01000000 FCB %01111110 FCB %00000000 ; 19 FCB %00000000 FCB %00111100 FCB %01000010 FCB %00001100 FCB %00000010 FCB %01000010 FCB %00111100 FCB %00000000 ; 20 FCB %00000000 FCB %00001000 FCB %00011000 FCB %00101000 FCB %01001000 FCB %01111110 FCB %00001000 FCB %00000000 ; 21 FCB %00000000 FCB %01111110 FCB %01000000 FCB %01111100 FCB %00000010 FCB %01000010 FCB %00111100 FCB %00000000 ; 22 FCB %00000000 FCB %00111100 FCB %01000000 FCB %01111100 FCB %01000010 FCB %01000010 FCB %00111100 FCB %00000000 ; 23 FCB %00000000 FCB %01111110 FCB %00000010 FCB %00000100 FCB %00001000 FCB %00010000 FCB %00010000 FCB %00000000 ; 24 FCB %00000000 FCB %00111100 FCB %01000010 FCB %00111100 FCB %01000010 FCB %01000010 FCB %00111100 FCB %00000000 ; 25 FCB %00000000 FCB %00111100 FCB %01000010 FCB %01000010 FCB %00111110 FCB %00000010 FCB %00111100 FCB %00000000 ; 26 FCB %00000000 FCB %00000000 FCB %00000000 FCB %00000000 FCB %00000000 FCB %00000000 FCB %00000000 FCB %00000000 ; 27 FCB %00000000 FCB %00000000 FCB %00000000 FCB %00000000 FCB %00000000 FCB %00000000 FCB %00000000 FCB %00000000 ; 28 FCB %00000000 FCB %00000000 FCB %00000000 FCB %00000000 FCB %00000000 FCB %00000000 FCB %00000000 FCB %00000000 ; 29 FCB %00000000 FCB %00000000 FCB %00000000 FCB %00000000 FCB %00000000 FCB %00000000 FCB %00000000 FCB %00000000 ; 30 FCB %00000000 FCB %00000000 FCB %00000000 FCB %00000000 FCB %00000000 FCB %00000000 FCB %00000000 FCB %00000000 ; 31 FCB %00000000 FCB %00000000 FCB %00000000 FCB %00000000 FCB %00000000 FCB %00000000 FCB %00000000 FCB %00000000 ; 32 FCB %00000000 FCB %00000000 FCB %00000000 FCB %00000000 FCB %00000000 FCB %00000000 FCB %00000000 FCB %00000000 ; 33 FCB %00000000 FCB %00111100 FCB %01000010 FCB %01000010 FCB %01111110 FCB %01000010 FCB %01000010 FCB %00000000 ; 34 FCB %00000000 FCB %01111100 FCB %01000010 FCB %01111100 FCB %01000010 FCB %01000010 FCB %01111100 FCB %00000000 ; 35 FCB %00000000 FCB %00111100 FCB %01000010 FCB %01000000 FCB %01000000 FCB %01000010 FCB %00111100 FCB %00000000 ; 36 FCB %00000000 FCB %01111000 FCB %01000100 FCB %01000010 FCB %01000010 FCB %01000100 FCB %01111000 FCB %00000000 ; 37 FCB %00000000 FCB %01111110 FCB %01000000 FCB %01111100 FCB %01000000 FCB %01000000 FCB %01111110 FCB %00000000 ; 38 FCB %00000000 FCB %01111110 FCB %01000000 FCB %01111100 FCB %01000000 FCB %01000000 FCB %01000000 FCB %00000000 ; 39 FCB %00000000 FCB %00111100 FCB %01000010 FCB %01000000 FCB %01001110 FCB %01000010 FCB %00111100 FCB %00000000 ; 40 FCB %00000000 FCB %01000010 FCB %01000010 FCB %01111110 FCB %01000010 FCB %01000010 FCB %01000010 FCB %00000000 ; 41 FCB %00000000 FCB %00111110 FCB %00001000 FCB %00001000 FCB %00001000 FCB %00001000 FCB %00111110 FCB %00000000 ; 42 FCB %00000000 FCB %00000010 FCB %00000010 FCB %00000010 FCB %01000010 FCB %01000010 FCB %00111100 FCB %00000000 ; 43 FCB %00000000 FCB %01000100 FCB %01001000 FCB %01110000 FCB %01001000 FCB %01000100 FCB %01000010 FCB %00000000 ; 44 FCB %00000000 FCB %01000000 FCB %01000000 FCB %01000000 FCB %01000000 FCB %01000000 FCB %01111110 FCB %00000000 ; 45 FCB %00000000 FCB %01000010 FCB %01100110 FCB %01011010 FCB %01000010 FCB %01000010 FCB %01000010 FCB %00000000 ; 46 FCB %00000000 FCB %01000010 FCB %01100010 FCB %01010010 FCB %01001010 FCB %01000110 FCB %01000010 FCB %00000000 ; 47 FCB %00000000 FCB %00111100 FCB %01000010 FCB %01000010 FCB %01000010 FCB %01000010 FCB %00111100 FCB %00000000 ; 48 FCB %00000000 FCB %01111100 FCB %01000010 FCB %01000010 FCB %01111100 FCB %01000000 FCB %01000000 FCB %00000000 ; 49 FCB %00000000 FCB %00111100 FCB %01000010 FCB %01000010 FCB %01010010 FCB %01001010 FCB %00111100 FCB %00000000 ; 50 FCB %00000000 FCB %01111100 FCB %01000010 FCB %01000010 FCB %01111100 FCB %01000100 FCB %01000010 FCB %00000000 ; 51 FCB %00000000 FCB %00111100 FCB %01000000 FCB %00111100 FCB %00000010 FCB %01000010 FCB %00111100 FCB %00000000 ; 52 FCB %00000000 FCB %11111110 FCB %00010000 FCB %00010000 FCB %00010000 FCB %00010000 FCB %00010000 FCB %00000000 ; 53 FCB %00000000 FCB %01000010 FCB %01000010 FCB %01000010 FCB %01000010 FCB %01000010 FCB %00111100 FCB %00000000 ; 54 FCB %00000000 FCB %01000010 FCB %01000010 FCB %01000010 FCB %01000010 FCB %00100100 FCB %00011000 FCB %00000000 ; 55 FCB %00000000 FCB %01000010 FCB %01000010 FCB %01000010 FCB %01000010 FCB %01011010 FCB %00100100 FCB %00000000 ; 56 FCB %00000000 FCB %01000010 FCB %00100100 FCB %00011000 FCB %00011000 FCB %00100100 FCB %01000010 FCB %00000000 ; 57 FCB %00000000 FCB %10000010 FCB %01000100 FCB %00101000 FCB %00010000 FCB %00010000 FCB %00010000 FCB %00000000 ; 58 FCB %00000000 FCB %01111110 FCB %00000100 FCB %00001000 FCB %00010000 FCB %00100000 FCB %01111110 FCB %00000000 ENDSECTION SECTION bss * Uninitialized globals bss_start EQU * bss_end EQU * ENDSECTION SECTION code ENDSECTION SECTION initgl ******************************************************************************* * Initialize global variables. ENDSECTION ******************************************************************************* * Importing 0 utility routine(s). ******************************************************************************* END ================================================ FILE: src/assets/templates/8x8/z88dk_cpc_Chars8.asm.template ================================================ ; ****************************************************** ; ** Libreria de rutinas para Amstrad CPC ** ; ** Raul Simarro, Artaburu 2009 ** ; ****************************************************** GLOBAL cpc_Chars8 GLOBAL first_char8 .first_char8 defb 32 ;first defined char number (ASCII) .cpc_Chars8 ;each bit of each byte is a pixel, same way as SYMBOL function of Locomotive BASIC. ;; KEY SET BY ANJUEL AND NA_TH_AN FROM NANAKO CPC GAME. DEFB 0, 0, 0, 0, 0, 0, 0, 0 ; (32) DEFB DEFB DEFB DEFB DEFB DEFB DEFB DEFB DEFB DEFB DEFB DEFB DEFB DEFB DEFB ; TILE 12 (47) DEFB ; TILE 13 (48) DEFB ; TILE 25 (49) DEFB ; TILE 17 (50) DEFB ; TILE 18 (51) DEFB ; (52) DEFB 62, 32, 32, 62, 2, 34, 62, 0 DEFB 62, 32, 32, 62, 34, 34, 62, 0 DEFB 62, 36, 4, 4, 4, 4, 14, 0 DEFB 62, 34, 34, 62, 34, 34, 62, 0 DEFB 62, 34, 34, 62, 2, 34, 62, 0 DEFB 0, 24, 24, 0, 0, 24, 24, 0 DEFB 0, 24, 24, 0, 0, 24, 24, 32 DEFB 4, 8, 16, 32, 16, 8, 4, 0 DEFB 0, 0,126, 0, 0,126, 0, 0 DEFB 32, 16, 8, 4, 8, 16, 32, 0 DEFB 64,124, 68, 4, 28, 16, 0, 16 DEFB 0, 56, 84, 92, 64, 60, 0, 0 DEFB 126, 36, 36, 36, 60, 36,102, 0 DEFB 124, 36, 36, 62, 34, 34,126, 0 DEFB 2,126, 66, 64, 66,126, 2, 0 DEFB 126, 34, 34, 34, 34, 34,126, 0 DEFB 2,126, 66,120, 66,126, 2, 0 DEFB 2,126, 34, 48, 32, 32,112, 0 DEFB 2,126, 34, 32, 46, 36,124, 0 DEFB 102, 36, 36, 60, 36, 36,102, 0 DEFB 56, 16, 16, 16, 16, 16, 56, 0 DEFB 28, 8, 8, 8, 8, 40, 56, 0 DEFB 108, 40, 40,124, 36, 36,102, 0 DEFB 112, 32, 32, 32, 34,126, 2, 0 DEFB 127, 42, 42, 42, 42,107, 8, 0 DEFB 126, 36, 36, 36, 36, 36,102, 0 DEFB 126, 66, 66, 66, 66, 66,126, 0 DEFB 126, 34, 34,126, 32, 32,112, 0 DEFB 126, 66, 66, 74,126, 8, 28, 0 DEFB 126, 34, 34,126, 36, 36,114, 0 DEFB 126, 66, 64,126, 2, 66,126, 0 DEFB 34, 62, 42, 8, 8, 8, 28, 0 DEFB 102, 36, 36, 36, 36, 36,126, 0 DEFB 102, 36, 36, 36, 36, 24, 0, 0 DEFB 107, 42, 42, 42, 42, 42, 62, 0 DEFB 102, 36, 36, 24, 36, 36,102, 0 DEFB 102, 36, 36, 60, 8, 8, 28, 0 DEFB 126, 66, 4, 8, 16, 34,126, 0 DEFB 4, 60, 36, 32, 36, 60, 4, 0 DEFB 0, 64, 32, 16, 8, 4, 0, 0 DEFB 32, 60, 36, 4, 36, 60, 32, 0 DEFB 0, 16, 40, 68, 0, 0, 0, 0 DEFB 0, 0, 0, 0, 0, 0, 0, 0 DEFB 0,100,104, 16, 44, 76, 0, 0 DEFB 126, 36, 36, 36, 60, 36,102, 0 DEFB 124, 36, 36, 62, 34, 34,126, 0 DEFB 2,126, 66, 64, 66,126, 2, 0 DEFB 126, 34, 34, 34, 34, 34,126, 0 DEFB 2,126, 66,120, 66,126, 2, 0 DEFB 2,126, 34, 48, 32, 32,112, 0 DEFB 2,126, 34, 32, 46, 36,124, 0 DEFB 102, 36, 36, 60, 36, 36,102, 0 DEFB 56, 16, 16, 16, 16, 16, 56, 0 DEFB 28, 8, 8, 8, 8, 40, 56, 0 DEFB 108, 40, 40,124, 36, 36,102, 0 DEFB 112, 32, 32, 32, 34,126, 2, 0 DEFB 127, 42, 42, 42, 42,107, 8, 0 DEFB 126, 36, 36, 36, 36, 36,102, 0 DEFB 126, 66, 66, 66, 66, 66,126, 0 DEFB 126, 34, 34,126, 32, 32,112, 0 DEFB 126, 66, 66, 74,126, 8, 28, 0 DEFB 126, 34, 34,126, 36, 36,114, 0 DEFB 126, 66, 64,126, 2, 66,126, 0 DEFB 34, 62, 42, 8, 8, 8, 28, 0 DEFB 102, 36, 36, 36, 36, 36,126, 0 DEFB 102, 36, 36, 36, 36, 24, 0, 0 DEFB 107, 42, 42, 42, 42, 42, 62, 0 DEFB 102, 36, 36, 24, 36, 36,102, 0 DEFB 102, 36, 36, 60, 8, 8, 28, 0 DEFB DEFB DEFB DEFB DEFB DEFB DEFB ================================================ FILE: src/assets/templates/8x8/z88dk_gameboy.asm.template ================================================ SECTION rodata_user PUBLIC _udgs _udgs: ; Paste in the contents of lower.asm here defb 2+4 ;256 char encoding, compressed defb 128 ;Number of tiles ; Character: ? (00) defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 ; Character: ? (01) defb 0b00011000 ; oo defb 0b00100100 ; o o defb 0b01000010 ; o o defb 0b10000001 ; o o defb 0b11100111 ; ooo ooo defb 0b00100100 ; o o defb 0b00100100 ; o o defb 0b00111100 ; oooo ; Character: ? (02) defb 0b00111100 ; oooo defb 0b00100100 ; o o defb 0b00100100 ; o o defb 0b11100111 ; ooo ooo defb 0b10000001 ; o o defb 0b01000010 ; o o defb 0b00100100 ; o o defb 0b00011000 ; oo ; Character: ? (03) defb 0b00011000 ; oo defb 0b00010100 ; o o defb 0b11110010 ; oooo o defb 0b10000001 ; o o defb 0b10000001 ; o o defb 0b11110010 ; oooo o defb 0b00010100 ; o o defb 0b00011000 ; oo ; Character: ? (04) defb 0b00011000 ; oo defb 0b00101000 ; o o defb 0b01001111 ; o oooo defb 0b10000001 ; o o defb 0b10000001 ; o o defb 0b01001111 ; o oooo defb 0b00101000 ; o o defb 0b00011000 ; oo ; Character: ? (05) defb @11110000 defb @11110000 defb @11110000 defb @11110000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 ; Character: ? (06) defb @00001111 defb @00001111 defb @00001111 defb @00001111 defb @00000000 defb @00000000 defb @00000000 defb @00000000 ; Character: ? (07) defb @11111111 defb @11111111 defb @11111111 defb @11111111 defb @00000000 defb @00000000 defb @00000000 defb @00000000 ; Character: ? (08) defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @11110000 defb @11110000 defb @11110000 defb @11110000 ; Character: ? (09) defb @11110000 defb @11110000 defb @11110000 defb @11110000 defb @11110000 defb @11110000 defb @11110000 defb @11110000 ; Character: ? (0a) defb @00001111 defb @00001111 defb @00001111 defb @00001111 defb @11110000 defb @11110000 defb @11110000 defb @11110000 ; Character: ? (0b) defb @11111111 defb @11111111 defb @11111111 defb @11111111 defb @11110000 defb @11110000 defb @11110000 defb @11110000 ; Character: ? (0c) defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00001111 defb @00001111 defb @00001111 defb @00001111 ; Character: ? (0D) defb 0b01110000 ; ooo defb 0b11001000 ; oo o defb 0b11011110 ; oo oooo defb 0b11011011 ; oo oo oo defb 0b11011011 ; oo oo oo defb 0b01111110 ; oooooo defb 0b00011011 ; oo oo defb 0b00011011 ; oo oo ; Character: ? (0E) defb 0b00000000 ; defb 0b00000000 ; defb 0b00000000 ; defb 0b11111111 ; oooooooo defb 0b11111111 ; oooooooo defb 0b11111111 ; oooooooo defb 0b00000000 ; defb 0b00000000 ; ; Character: ? (0F) defb 0b00011100 ; ooo defb 0b00011100 ; ooo defb 0b00011100 ; ooo defb 0b00011100 ; ooo defb 0b00011100 ; ooo defb 0b00011100 ; ooo defb 0b00011100 ; ooo defb 0b00011100 ; ooo ; Character: ? (10) defb @11110000 defb @11110000 defb @11110000 defb @11110000 defb @00001111 defb @00001111 defb @00001111 defb @00001111 ; Character: ? (11) defb @00001111 defb @00001111 defb @00001111 defb @00001111 defb @00001111 defb @00001111 defb @00001111 defb @00001111 ; Character: ? (12) defb @11111111 defb @11111111 defb @11111111 defb @11111111 defb @00001111 defb @00001111 defb @00001111 defb @00001111 ; Character: ? (13) defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @11111111 defb @11111111 defb @11111111 defb @11111111 ; Character: ? (14) defb @11110000 defb @11110000 defb @11110000 defb @11110000 defb @11111111 defb @11111111 defb @11111111 defb @11111111 ; Character: ? (15) defb @00001111 defb @00001111 defb @00001111 defb @00001111 defb @11111111 defb @11111111 defb @11111111 defb @11111111 ; Character: ? (16) defb @11111111 defb @11111111 defb @11111111 defb @11111111 defb @11111111 defb @11111111 defb @11111111 defb @11111111 ; Character: ? (17) defb @10101010 defb @01010101 defb @10101010 defb @01010101 defb @10101010 defb @01010101 defb @10101010 defb @01010101 ; Character: ? (18) defb @10101010 defb @01010101 defb @10101010 defb @01010101 defb @00000000 defb @00000000 defb @00000000 defb @00000000 ; Character: ? (19) defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @10101010 defb @01010101 defb @10101010 defb @01010101 ; Character: ? (1A) defb @00001010 defb @00000101 defb @00001010 defb @00000101 defb @00001010 defb @00000101 defb @00001010 defb @00000101 ; Character: ? (1B) defb @10100000 defb @01010000 defb @10100000 defb @01010000 defb @10100000 defb @01010000 defb @10100000 defb @01010000 ; Character: ? (1C) defb 0b00000000 ; defb 0b00000000 ; defb 0b00000000 ; defb 0b00011111 ; ooooo defb 0b00011111 ; ooooo defb 0b00011111 ; ooooo defb 0b00011100 ; ooo defb 0b00011100 ; ooo ; Character: ? (1D) defb 0b00000000 ; defb 0b00000000 ; defb 0b00000000 ; defb 0b11111100 ; oooooo defb 0b11111100 ; oooooo defb 0b11111100 ; oooooo defb 0b00011100 ; ooo defb 0b00011100 ; ooo ; Character: ? (1E) defb 0b00011100 ; ooo defb 0b00011100 ; ooo defb 0b00011100 ; ooo defb 0b00011111 ; ooooo defb 0b00011111 ; ooooo defb 0b00011111 ; ooooo defb 0b00000000 ; defb 0b00000000 ; ; Character: ? (1F) defb 0b00011100 ; ooo defb 0b00011100 ; ooo defb 0b00011100 ; ooo defb 0b11111100 ; oooooo defb 0b11111100 ; oooooo defb 0b11111100 ; oooooo defb 0b00000000 ; defb 0b00000000 ; ; Include your usual font file here defb %"--------" defb %"--------" defb %"--------" defb %"--------" defb %"--------" defb %"--------" defb %"--------" defb %"--------" ; invincibility defb ; defb @00011000 ; defb @00100100 ; defb @00000000 ; defb @01100110 ; defb @10011001 ; defb @00000000 ; defb @00100100 ; defb @01100110 ; left missile defb ; defb @00000000 ; defb @00000000 ; defb @11110000 ; defb @01111111 ; defb @01111111 ; defb @11110000 ; defb @00000000 ; defb @00000000 ; bullet defb ; defb @00000000 ; defb @00000000 ; defb @00001000 ; defb @00111000 ; defb @00011100 ; defb @00010000 ; defb @00000000 ; defb @00000000 ; dollar defb ;defb %"--------" ;defb %"----#---" ;defb %"--#####-" ;defb %"--#-#---" ;defb %"--#####-" ;defb %"----#-#-" ;defb %"--#####-" ;defb %"----#---" ; power-up F defb ; defb @00000000 ; defb @00111100 ; defb @01000010 ; defb @11001111 ; defb @11000011 ; defb @01100110 ; defb @00100100 ; defb @00011000 ; vertical brick defb ; defb @00011000 ; defb @00011000 ; defb @01111000 ; defb @00011000 ; defb @00011000 ; defb @00011110 ; defb @00011000 ; defb @00011000 ; skull defb ; defb @00111100 ; defb @01000010 ; defb @10100101 ; defb @10000001 ; defb @01011010 ; defb @00100100 ; defb @00100100 ; defb @00111100 ; ghost defb ; defb @10111101 ; defb @01000010 ; defb @10100101 ; defb @10000001 ; defb @10000001 ; defb @10011001 ; defb @10000001 ; defb @01111110 ; bomb defb ; defb @00111100 ; defb @01000010 ; defb @10100101 ; defb @10011001 ; defb @10011001 ; defb @10100101 ; defb @01000010 ; defb @00111100 ; player down defb ; defb @00011000 ; defb @00100100 ; defb @00011000 ; defb @01100110 ; defb @10011001 ; defb @00011000 ; defb @00100100 ; defb @01100110 ; horizontal brick defb ; defb @00000000 ; defb @00000000 ; defb @00000000 ; defb @11111111 ; defb @11111111 ; defb @00000000 ; defb @00000000 ; defb @00000000 ; power-up S defb ; defb @00000000 ; defb @00111100 ; defb @01100110 ; defb @11011111 ; defb @11100111 ; defb @01111010 ; defb @00100100 ; defb @00011000 defb ; defb %"--------" ; defb %"--------" ; defb %"--------" ; defb %"--------" ; defb %"--#####-" ; defb %"--------" ; defb %"--------" ; defb %"--------" ; right missile defb ; defb @00000000 ; defb @00000000 ; defb @00001111 ; defb @11111110 ; defb @11111110 ; defb @00001111 ; defb @00000000 ; defb @00000000 ; rocket defb ; defb @00011000 ; defb @00111100 ; defb @00111100 ; defb @00111100 ; defb @01111110 ; defb @01111110 ; defb @01011010 ; defb @01000010 defb %"--------" defb %"--####--" defb %"-#---##-" defb %"-#--#-#-" defb %"-#-#--#-" defb %"-##---#-" defb %"--####--" defb %"--------" defb %"--------" defb %"---##---" defb %"--#-#---" defb %"----#---" defb %"----#---" defb %"----#---" defb %"--#####-" defb %"--------" defb %"--------" defb %"--####--" defb %"-#----#-" defb %"------#-" defb %"--####--" defb %"-#------" defb %"-######-" defb %"--------" defb %"--------" defb %"--####--" defb %"-#----#-" defb %"----##--" defb %"------#-" defb %"-#----#-" defb %"--####--" defb %"--------" defb %"--------" defb %"----#---" defb %"---##---" defb %"--#-#---" defb %"-#--#---" defb %"-######-" defb %"----#---" defb %"--------" defb %"--------" defb %"-######-" defb %"-#------" defb %"-#####--" defb %"------#-" defb %"-#----#-" defb %"--####--" defb %"--------" defb %"--------" defb %"--####--" defb %"-#------" defb %"-#####--" defb %"-#----#-" defb %"-#----#-" defb %"--####--" defb %"--------" defb %"--------" defb %"-######-" defb %"------#-" defb %"-----#--" defb %"----#---" defb %"---#----" defb %"---#----" defb %"--------" defb %"--------" defb %"--####--" defb %"-#----#-" defb %"--####--" defb %"-#----#-" defb %"-#----#-" defb %"--####--" defb %"--------" defb %"--------" defb %"--####--" defb %"-#----#-" defb %"-#----#-" defb %"--#####-" defb %"------#-" defb %"--####--" defb %"--------" defb ; power-up H defb ; defb @00000000 ; defb @00111100 ; defb @01011010 ; defb @11011011 ; defb @11000011 ; defb @01011010 ; defb @00111100 ; defb @00011000 ; player up defb ; defb @00011000 ; defb @00111100 ; defb @00011000 ; defb @01100110 ; defb @10011001 ; defb @00011000 ; defb @00100100 ; defb @01100110 ; player right defb ; defb @00011000 ; defb @00110100 ; defb @00011001 ; defb @01101111 ; defb @10011000 ; defb @00011000 ; defb @00010100 ; defb @00010100 ; player left defb ; defb @00011000 ; defb @00101100 ; defb @10011000 ; defb @11101110 ; defb @00011001 ; defb @00011000 ; defb @00101000 ; defb @00101000 ; gun defb ; defb @00000000 ; defb @10000000 ; defb @01111110 ; defb @11001000 ; defb @11111000 ; defb @11000000 ; defb @10000000 ; defb @00000000 defb defb %"--------" defb %"--####--" defb %"-#----#-" defb %"-#----#-" defb %"-######-" defb %"-#----#-" defb %"-#----#-" defb %"--------" defb %"--------" defb %"-#####--" defb %"-#----#-" defb %"-#####--" defb %"-#----#-" defb %"-#----#-" defb %"-#####--" defb %"--------" defb %"--------" defb %"--####--" defb %"-#----#-" defb %"-#------" defb %"-#------" defb %"-#----#-" defb %"--####--" defb %"--------" defb %"--------" defb %"-####---" defb %"-#---#--" defb %"-#----#-" defb %"-#----#-" defb %"-#---#--" defb %"-####---" defb %"--------" defb %"--------" defb %"-######-" defb %"-#------" defb %"-#####--" defb %"-#------" defb %"-#------" defb %"-######-" defb %"--------" defb %"--------" defb %"-######-" defb %"-#------" defb %"-#####--" defb %"-#------" defb %"-#------" defb %"-#------" defb %"--------" defb %"--------" defb %"--####--" defb %"-#----#-" defb %"-#------" defb %"-#--###-" defb %"-#----#-" defb %"--####--" defb %"--------" defb %"--------" defb %"-#----#-" defb %"-#----#-" defb %"-######-" defb %"-#----#-" defb %"-#----#-" defb %"-#----#-" defb %"--------" defb %"--------" defb %"--#####-" defb %"----#---" defb %"----#---" defb %"----#---" defb %"----#---" defb %"--#####-" defb %"--------" defb %"--------" defb %"------#-" defb %"------#-" defb %"------#-" defb %"-#----#-" defb %"-#----#-" defb %"--####--" defb %"--------" defb %"--------" defb %"-#---#--" defb %"-#--#---" defb %"-###----" defb %"-#--#---" defb %"-#---#--" defb %"-#----#-" defb %"--------" defb %"--------" defb %"-#------" defb %"-#------" defb %"-#------" defb %"-#------" defb %"-#------" defb %"-######-" defb %"--------" defb %"--------" defb %"-#----#-" defb %"-##--##-" defb %"-#-##-#-" defb %"-#----#-" defb %"-#----#-" defb %"-#----#-" defb %"--------" defb %"--------" defb %"-#----#-" defb %"-##---#-" defb %"-#-#--#-" defb %"-#--#-#-" defb %"-#---##-" defb %"-#----#-" defb %"--------" defb %"--------" defb %"--####--" defb %"-#----#-" defb %"-#----#-" defb %"-#----#-" defb %"-#----#-" defb %"--####--" defb %"--------" defb %"--------" defb %"-#####--" defb %"-#----#-" defb %"-#----#-" defb %"-#####--" defb %"-#------" defb %"-#------" defb %"--------" defb %"--------" defb %"--####--" defb %"-#----#-" defb %"-#----#-" defb %"-#-#--#-" defb %"-#--#-#-" defb %"--####--" defb %"--------" defb %"--------" defb %"-#####--" defb %"-#----#-" defb %"-#----#-" defb %"-#####--" defb %"-#---#--" defb %"-#----#-" defb %"--------" defb %"--------" defb %"--####--" defb %"-#------" defb %"--####--" defb %"------#-" defb %"-#----#-" defb %"--####--" defb %"--------" defb %"--------" defb %"#######-" defb %"---#----" defb %"---#----" defb %"---#----" defb %"---#----" defb %"---#----" defb %"--------" defb %"--------" defb %"-#----#-" defb %"-#----#-" defb %"-#----#-" defb %"-#----#-" defb %"-#----#-" defb %"--####--" defb %"--------" defb %"--------" defb %"-#----#-" defb %"-#----#-" defb %"-#----#-" defb %"-#----#-" defb %"--#--#--" defb %"---##---" defb %"--------" defb %"--------" defb %"-#----#-" defb %"-#----#-" defb %"-#----#-" defb %"-#----#-" defb %"-#-##-#-" defb %"--#--#--" defb %"--------" defb %"--------" defb %"-#----#-" defb %"--#--#--" defb %"---##---" defb %"---##---" defb %"--#--#--" defb %"-#----#-" defb %"--------" defb %"--------" defb %"#-----#-" defb %"-#---#--" defb %"--#-#---" defb %"---#----" defb %"---#----" defb %"---#----" defb %"--------" defb %"--------" defb %"-######-" defb %"-----#--" defb %"----#---" defb %"---#----" defb %"--#-----" defb %"-######-" defb %"--------" ; dead ghost defb ; defb @10111101 ; defb @01000010 ; defb @10100101 ; defb @10100101 ; defb @10000001 ; defb @10011001 ; defb @10000001 ; defb @01111110 defb defb defb defb defb %"--------" defb %"---###--" defb %"--#---#-" defb %"-####---" defb %"--#-----" defb %"--#-----" defb %"-######-" defb %"--------" defb %"--------" defb %"--------" defb %"--###---" defb %"-----#--" defb %"--####--" defb %"-#---#--" defb %"--####--" defb %"--------" defb %"--------" defb %"--#-----" defb %"--#-----" defb %"--####--" defb %"--#---#-" defb %"--#---#-" defb %"--####--" defb %"--------" defb %"--------" defb %"--------" defb %"---###--" defb %"--#-----" defb %"--#-----" defb %"--#-----" defb %"---###--" defb %"--------" defb %"--------" defb %"-----#--" defb %"-----#--" defb %"--####--" defb %"-#---#--" defb %"-#---#--" defb %"--####--" defb %"--------" defb %"--------" defb %"--------" defb %"--###---" defb %"-#---#--" defb %"-####---" defb %"-#------" defb %"--####--" defb %"--------" defb %"--------" defb %"----##--" defb %"---#----" defb %"---##---" defb %"---#----" defb %"---#----" defb %"---#----" defb %"--------" defb %"--------" defb %"--------" defb %"--####--" defb %"-#---#--" defb %"-#---#--" defb %"--####--" defb %"-----#--" defb %"--###---" defb %"--------" defb %"-#------" defb %"-#------" defb %"-####---" defb %"-#---#--" defb %"-#---#--" defb %"-#---#--" defb %"--------" defb %"--------" defb %"---#----" defb %"--------" defb %"--##----" defb %"---#----" defb %"---#----" defb %"--###---" defb %"--------" defb %"--------" defb %"-----#--" defb %"--------" defb %"-----#--" defb %"-----#--" defb %"-----#--" defb %"--#--#--" defb %"---##---" defb %"--------" defb %"--#-----" defb %"--#-#---" defb %"--##----" defb %"--##----" defb %"--#-#---" defb %"--#--#--" defb %"--------" defb %"--------" defb %"---#----" defb %"---#----" defb %"---#----" defb %"---#----" defb %"---#----" defb %"----##--" defb %"--------" defb %"--------" defb %"--------" defb %"-##-#---" defb %"-#-#-#--" defb %"-#-#-#--" defb %"-#-#-#--" defb %"-#-#-#--" defb %"--------" defb %"--------" defb %"--------" defb %"-####---" defb %"-#---#--" defb %"-#---#--" defb %"-#---#--" defb %"-#---#--" defb %"--------" defb %"--------" defb %"--------" defb %"--###---" defb %"-#---#--" defb %"-#---#--" defb %"-#---#--" defb %"--###---" defb %"--------" defb %"--------" defb %"--------" defb %"-####---" defb %"-#---#--" defb %"-#---#--" defb %"-####---" defb %"-#------" defb %"-#------" defb %"--------" defb %"--------" defb %"--####--" defb %"-#---#--" defb %"-#---#--" defb %"--####--" defb %"-----#--" defb %"-----##-" defb %"--------" defb %"--------" defb %"---###--" defb %"--#-----" defb %"--#-----" defb %"--#-----" defb %"--#-----" defb %"--------" defb %"--------" defb %"--------" defb %"--###---" defb %"-#------" defb %"--###---" defb %"-----#--" defb %"-####---" defb %"--------" defb %"--------" defb %"---#----" defb %"--###---" defb %"---#----" defb %"---#----" defb %"---#----" defb %"----##--" defb %"--------" defb %"--------" defb %"--------" defb %"-#---#--" defb %"-#---#--" defb %"-#---#--" defb %"-#---#--" defb %"--###---" defb %"--------" defb %"--------" defb %"--------" defb %"-#---#--" defb %"-#---#--" defb %"--#-#---" defb %"--#-#---" defb %"---#----" defb %"--------" defb %"--------" defb %"--------" defb %"-#---#--" defb %"-#-#-#--" defb %"-#-#-#--" defb %"-#-#-#--" defb %"--#-#---" defb %"--------" defb %"--------" defb %"--------" defb %"-#---#--" defb %"--#-#---" defb %"---#----" defb %"--#-#---" defb %"-#---#--" defb %"--------" defb %"--------" defb %"--------" defb %"-#---#--" defb %"-#---#--" defb %"-#---#--" defb %"--####--" defb %"-----#--" defb %"--###---" defb %"--------" defb %"--------" defb %"-#####--" defb %"----#---" defb %"---#----" defb %"--#-----" defb %"-#####--" defb %"--------" defb %"--------" defb %"----###-" defb %"----#---" defb %"--##----" defb %"----#---" defb %"----#---" defb %"----###-" defb %"--------" defb %"--------" defb %"----#---" defb %"----#---" defb %"----#---" defb %"----#---" defb %"----#---" defb %"----#---" defb %"--------" defb %"--------" defb %"-###----" defb %"---#----" defb %"----##--" defb %"---#----" defb %"---#----" defb %"-###----" defb %"--------" defb %"--------" defb %"---#-#--" defb %"--#-#---" defb %"--------" defb %"--------" defb %"--------" defb %"--------" defb %"--------" defb %"--####--" defb %"-#----#-" defb %"#--##--#" defb %"#-#----#" defb %"#-#----#" defb %"#--##--#" defb %"-#----#-" defb %"--####--" _udgs_end: ================================================ FILE: src/assets/templates/8x8/z88dk_pv1000.asm.template ================================================ ; Char 32 (20) defb 0,0,0,0,0,0,0,0 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 ; Char 32 (20) defb 0,0,0,0,0,0,0,0 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 ; Char 32 (20) defb 0,0,0,0,0,0,0,0 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 ; Char 32 (20) defb 0,0,0,0,0,0,0,0 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 ; Char 32 (20) defb 0,0,0,0,0,0,0,0 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 ; Char 32 (20) defb 0,0,0,0,0,0,0,0 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 ; Char 32 (20) defb 0,0,0,0,0,0,0,0 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 ; Char 32 (20) defb 0,0,0,0,0,0,0,0 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 ; Char 32 (20) defb 0,0,0,0,0,0,0,0 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 ; Char 32 (20) defb 0,0,0,0,0,0,0,0 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 ; Char 32 (20) defb 0,0,0,0,0,0,0,0 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 ; Char 32 (20) defb 0,0,0,0,0,0,0,0 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 ; Char 32 (20) defb 0,0,0,0,0,0,0,0 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 ; Char 32 (20) defb 0,0,0,0,0,0,0,0 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 ; Char 32 (20) defb 0,0,0,0,0,0,0,0 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 ; Char 32 (20) defb 0,0,0,0,0,0,0,0 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 ; Char 32 (20) defb 0,0,0,0,0,0,0,0 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 ; Char 32 (20) defb 0,0,0,0,0,0,0,0 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 ; Char 32 (20) defb 0,0,0,0,0,0,0,0 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 ; Char 32 (20) defb 0,0,0,0,0,0,0,0 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 ; Char 32 (20) defb 0,0,0,0,0,0,0,0 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 ; Char 32 (20) defb 0,0,0,0,0,0,0,0 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 ; Char 32 (20) defb 0,0,0,0,0,0,0,0 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 ; Char 33 (21) WHITE defb 0,0,0,0,0,0,0,0 defb defb defb ; Char 34 (22) CYAN defb 0,0,0,0,0,0,0,0 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb defb ; Char 35 (23) GREEN defb 0,0,0,0,0,0,0,0 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 ; Char 36 (24) YELLOW defb 0,0,0,0,0,0,0,0 defb defb defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 ; Char 37 (25) RED defb 0,0,0,0,0,0,0,0 defb defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 ; Char 38 (21) WHITE defb 0,0,0,0,0,0,0,0 defb defb defb ; Char 39 (22) CYAN defb 0,0,0,0,0,0,0,0 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb defb ; Char 40 (23) GREEN defb 0,0,0,0,0,0,0,0 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 ; Char 41 (24) YELLOW defb 0,0,0,0,0,0,0,0 defb defb defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 ; Char 42 (25) RED defb 0,0,0,0,0,0,0,0 defb defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 ; Char 43 (21) WHITE defb 0,0,0,0,0,0,0,0 defb defb defb ; Char 44 (22) CYAN defb 0,0,0,0,0,0,0,0 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb defb ; Char 45 (23) GREEN defb 0,0,0,0,0,0,0,0 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 ; Char 46 (24) YELLOW defb 0,0,0,0,0,0,0,0 defb defb defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 ; Char 47 (25) RED defb 0,0,0,0,0,0,0,0 defb defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 ; Char 48 (30) defb 0,0,0,0,0,0,0,0 defb @01111100 defb @11000110 defb @11001110 defb @11010110 defb @11100110 defb @11000110 defb @01111100 defb @00000000 defb @01111100 defb @11000110 defb @11001110 defb @11010110 defb @11100110 defb @11000110 defb @01111100 defb @00000000 defb @01111100 defb @11000110 defb @11001110 defb @11010110 defb @11100110 defb @11000110 defb @01111100 defb @00000000 ; Char 49 (31) defb 0,0,0,0,0,0,0,0 defb @00011000 defb @00111000 defb @00011000 defb @00011000 defb @00011000 defb @00011000 defb @01111110 defb @00000000 defb @00011000 defb @00111000 defb @00011000 defb @00011000 defb @00011000 defb @00011000 defb @01111110 defb @00000000 defb @00011000 defb @00111000 defb @00011000 defb @00011000 defb @00011000 defb @00011000 defb @01111110 defb @00000000 ; Char 50 (32) defb 0,0,0,0,0,0,0,0 defb @00111100 defb @01100110 defb @00000110 defb @00111100 defb @01100000 defb @01100110 defb @01111110 defb @00000000 defb @00111100 defb @01100110 defb @00000110 defb @00111100 defb @01100000 defb @01100110 defb @01111110 defb @00000000 defb @00111100 defb @01100110 defb @00000110 defb @00111100 defb @01100000 defb @01100110 defb @01111110 defb @00000000 ; Char 51 (33) defb 0,0,0,0,0,0,0,0 defb @00111100 defb @01100110 defb @00000110 defb @00011100 defb @00000110 defb @01100110 defb @00111100 defb @00000000 defb @00111100 defb @01100110 defb @00000110 defb @00011100 defb @00000110 defb @01100110 defb @00111100 defb @00000000 defb @00111100 defb @01100110 defb @00000110 defb @00011100 defb @00000110 defb @01100110 defb @00111100 defb @00000000 ; Char 52 (34) defb 0,0,0,0,0,0,0,0 defb @00011100 defb @00111100 defb @01101100 defb @11001100 defb @11111110 defb @00001100 defb @00011110 defb @00000000 defb @00011100 defb @00111100 defb @01101100 defb @11001100 defb @11111110 defb @00001100 defb @00011110 defb @00000000 defb @00011100 defb @00111100 defb @01101100 defb @11001100 defb @11111110 defb @00001100 defb @00011110 defb @00000000 ; Char 53 (35) defb 0,0,0,0,0,0,0,0 defb @01111110 defb @01100010 defb @01100000 defb @01111100 defb @00000110 defb @01100110 defb @00111100 defb @00000000 defb @01111110 defb @01100010 defb @01100000 defb @01111100 defb @00000110 defb @01100110 defb @00111100 defb @00000000 defb @01111110 defb @01100010 defb @01100000 defb @01111100 defb @00000110 defb @01100110 defb @00111100 defb @00000000 ; Char 54 (36) defb 0,0,0,0,0,0,0,0 defb @00111100 defb @01100110 defb @01100000 defb @01111100 defb @01100110 defb @01100110 defb @00111100 defb @00000000 defb @00111100 defb @01100110 defb @01100000 defb @01111100 defb @01100110 defb @01100110 defb @00111100 defb @00000000 defb @00111100 defb @01100110 defb @01100000 defb @01111100 defb @01100110 defb @01100110 defb @00111100 defb @00000000 ; Char 55 (37) defb 0,0,0,0,0,0,0,0 defb @01111110 defb @01100110 defb @00000110 defb @00001100 defb @00011000 defb @00011000 defb @00011000 defb @00000000 defb @01111110 defb @01100110 defb @00000110 defb @00001100 defb @00011000 defb @00011000 defb @00011000 defb @00000000 defb @01111110 defb @01100110 defb @00000110 defb @00001100 defb @00011000 defb @00011000 defb @00011000 defb @00000000 ; Char 56 (38) defb 0,0,0,0,0,0,0,0 defb @00111100 defb @01100110 defb @01100110 defb @00111100 defb @01100110 defb @01100110 defb @00111100 defb @00000000 defb @00111100 defb @01100110 defb @01100110 defb @00111100 defb @01100110 defb @01100110 defb @00111100 defb @00000000 defb @00111100 defb @01100110 defb @01100110 defb @00111100 defb @01100110 defb @01100110 defb @00111100 defb @00000000 ; Char 57 (39) defb 0,0,0,0,0,0,0,0 defb @00111100 defb @01100110 defb @01100110 defb @00111110 defb @00000110 defb @01100110 defb @00111100 defb @00000000 defb @00111100 defb @01100110 defb @01100110 defb @00111110 defb @00000110 defb @01100110 defb @00111100 defb @00000000 defb @00111100 defb @01100110 defb @01100110 defb @00111110 defb @00000110 defb @01100110 defb @00111100 defb @00000000 ; Char 58 (21) WHITE defb 0,0,0,0,0,0,0,0 defb defb defb ; Char 59 (22) CYAN defb 0,0,0,0,0,0,0,0 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb defb ; Char 60 (23) GREEN defb 0,0,0,0,0,0,0,0 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 ; Char 61 (24) YELLOW defb 0,0,0,0,0,0,0,0 defb defb defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 ; Char 62 (25) RED defb 0,0,0,0,0,0,0,0 defb defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 ; Char 63 (3f) defb 0,0,0,0,0,0,0,0 defb @00111100 defb @01100110 defb @01100110 defb @00001100 defb @00011000 defb @00000000 defb @00011000 defb @00000000 defb @00111100 defb @01100110 defb @01100110 defb @00001100 defb @00011000 defb @00000000 defb @00011000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 ; Char 64 (40) defb 0,0,0,0,0,0,0,0 defb @01111100 defb @11000110 defb @11011110 defb @11011110 defb @11011110 defb @11000000 defb @01111100 defb @00000000 defb @01111100 defb @11000110 defb @11011110 defb @11011110 defb @11011110 defb @11000000 defb @01111100 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 ; Char 65 (41) defb 0,0,0,0,0,0,0,0 defb @00011000 defb @00111100 defb @01100110 defb @01100110 defb @01111110 defb @01100110 defb @01100110 defb @00000000 defb @00011000 defb @00111100 defb @01100110 defb @01100110 defb @01111110 defb @01100110 defb @01100110 defb @00000000 defb @00011000 defb @00111100 defb @01100110 defb @01100110 defb @01111110 defb @01100110 defb @01100110 defb @00000000 ; Char 66 (42) defb 0,0,0,0,0,0,0,0 defb @11111100 defb @01100110 defb @01100110 defb @01111100 defb @01100110 defb @01100110 defb @11111100 defb @00000000 defb @11111100 defb @01100110 defb @01100110 defb @01111100 defb @01100110 defb @01100110 defb @11111100 defb @00000000 defb @11111100 defb @01100110 defb @01100110 defb @01111100 defb @01100110 defb @01100110 defb @11111100 defb @00000000 ; Char 67 (43) defb 0,0,0,0,0,0,0,0 defb @00111100 defb @01100110 defb @11000000 defb @11000000 defb @11000000 defb @01100110 defb @00111100 defb @00000000 defb @00111100 defb @01100110 defb @11000000 defb @11000000 defb @11000000 defb @01100110 defb @00111100 defb @00000000 defb @00111100 defb @01100110 defb @11000000 defb @11000000 defb @11000000 defb @01100110 defb @00111100 defb @00000000 ; Char 68 (44) defb 0,0,0,0,0,0,0,0 defb @11111000 defb @01101100 defb @01100110 defb @01100110 defb @01100110 defb @01101100 defb @11111000 defb @00000000 defb @11111000 defb @01101100 defb @01100110 defb @01100110 defb @01100110 defb @01101100 defb @11111000 defb @00000000 defb @11111000 defb @01101100 defb @01100110 defb @01100110 defb @01100110 defb @01101100 defb @11111000 defb @00000000 ; Char 69 (45) defb 0,0,0,0,0,0,0,0 defb @11111110 defb @01100010 defb @01101000 defb @01111000 defb @01101000 defb @01100010 defb @11111110 defb @00000000 defb @11111110 defb @01100010 defb @01101000 defb @01111000 defb @01101000 defb @01100010 defb @11111110 defb @00000000 defb @11111110 defb @01100010 defb @01101000 defb @01111000 defb @01101000 defb @01100010 defb @11111110 defb @00000000 ; Char 70 (46) defb 0,0,0,0,0,0,0,0 defb @11111110 defb @01100010 defb @01101000 defb @01111000 defb @01101000 defb @01100000 defb @11110000 defb @00000000 defb @11111110 defb @01100010 defb @01101000 defb @01111000 defb @01101000 defb @01100000 defb @11110000 defb @00000000 defb @11111110 defb @01100010 defb @01101000 defb @01111000 defb @01101000 defb @01100000 defb @11110000 defb @00000000 ; Char 71 (47) defb 0,0,0,0,0,0,0,0 defb @00111100 defb @01100110 defb @11000000 defb @11000000 defb @11001110 defb @01100110 defb @00111110 defb @00000000 defb @00111100 defb @01100110 defb @11000000 defb @11000000 defb @11001110 defb @01100110 defb @00111110 defb @00000000 defb @00111100 defb @01100110 defb @11000000 defb @11000000 defb @11001110 defb @01100110 defb @00111110 defb @00000000 ; Char 72 (48) defb 0,0,0,0,0,0,0,0 defb @01100110 defb @01100110 defb @01100110 defb @01111110 defb @01100110 defb @01100110 defb @01100110 defb @00000000 defb @01100110 defb @01100110 defb @01100110 defb @01111110 defb @01100110 defb @01100110 defb @01100110 defb @00000000 defb @01100110 defb @01100110 defb @01100110 defb @01111110 defb @01100110 defb @01100110 defb @01100110 defb @00000000 ; Char 73 (49) defb 0,0,0,0,0,0,0,0 defb @01111110 defb @00011000 defb @00011000 defb @00011000 defb @00011000 defb @00011000 defb @01111110 defb @00000000 defb @01111110 defb @00011000 defb @00011000 defb @00011000 defb @00011000 defb @00011000 defb @01111110 defb @00000000 defb @01111110 defb @00011000 defb @00011000 defb @00011000 defb @00011000 defb @00011000 defb @01111110 defb @00000000 ; Char 74 (4a) defb 0,0,0,0,0,0,0,0 defb @00011110 defb @00001100 defb @00001100 defb @00001100 defb @11001100 defb @11001100 defb @01111000 defb @00000000 defb @00011110 defb @00001100 defb @00001100 defb @00001100 defb @11001100 defb @11001100 defb @01111000 defb @00000000 defb @00011110 defb @00001100 defb @00001100 defb @00001100 defb @11001100 defb @11001100 defb @01111000 defb @00000000 ; Char 75 (4b) defb 0,0,0,0,0,0,0,0 defb @11100110 defb @01100110 defb @01101100 defb @01111000 defb @01101100 defb @01100110 defb @11100110 defb @00000000 defb @11100110 defb @01100110 defb @01101100 defb @01111000 defb @01101100 defb @01100110 defb @11100110 defb @00000000 defb @11100110 defb @01100110 defb @01101100 defb @01111000 defb @01101100 defb @01100110 defb @11100110 defb @00000000 ; Char 76 (4c) defb 0,0,0,0,0,0,0,0 defb @11110000 defb @01100000 defb @01100000 defb @01100000 defb @01100010 defb @01100110 defb @11111110 defb @00000000 defb @11110000 defb @01100000 defb @01100000 defb @01100000 defb @01100010 defb @01100110 defb @11111110 defb @00000000 defb @11110000 defb @01100000 defb @01100000 defb @01100000 defb @01100010 defb @01100110 defb @11111110 defb @00000000 ; Char 77 (4d) defb 0,0,0,0,0,0,0,0 defb @11000110 defb @11101110 defb @11111110 defb @11111110 defb @11010110 defb @11000110 defb @11000110 defb @00000000 defb @11000110 defb @11101110 defb @11111110 defb @11111110 defb @11010110 defb @11000110 defb @11000110 defb @00000000 defb @11000110 defb @11101110 defb @11111110 defb @11111110 defb @11010110 defb @11000110 defb @11000110 defb @00000000 ; Char 78 (4e) defb 0,0,0,0,0,0,0,0 defb @11000110 defb @11100110 defb @11110110 defb @11011110 defb @11001110 defb @11000110 defb @11000110 defb @00000000 defb @11000110 defb @11100110 defb @11110110 defb @11011110 defb @11001110 defb @11000110 defb @11000110 defb @00000000 defb @11000110 defb @11100110 defb @11110110 defb @11011110 defb @11001110 defb @11000110 defb @11000110 defb @00000000 ; Char 79 (4f) defb 0,0,0,0,0,0,0,0 defb @00111000 defb @01101100 defb @11000110 defb @11000110 defb @11000110 defb @01101100 defb @00111000 defb @00000000 defb @00111000 defb @01101100 defb @11000110 defb @11000110 defb @11000110 defb @01101100 defb @00111000 defb @00000000 defb @00111000 defb @01101100 defb @11000110 defb @11000110 defb @11000110 defb @01101100 defb @00111000 defb @00000000 ; Char 80 (50) defb 0,0,0,0,0,0,0,0 defb @11111100 defb @01100110 defb @01100110 defb @01111100 defb @01100000 defb @01100000 defb @11110000 defb @00000000 defb @11111100 defb @01100110 defb @01100110 defb @01111100 defb @01100000 defb @01100000 defb @11110000 defb @00000000 defb @11111100 defb @01100110 defb @01100110 defb @01111100 defb @01100000 defb @01100000 defb @11110000 defb @00000000 ; Char 81 (51) defb 0,0,0,0,0,0,0,0 defb @00111000 defb @01101100 defb @11000110 defb @11000110 defb @11011010 defb @11001100 defb @01110110 defb @00000000 defb @00111000 defb @01101100 defb @11000110 defb @11000110 defb @11011010 defb @11001100 defb @01110110 defb @00000000 defb @00111000 defb @01101100 defb @11000110 defb @11000110 defb @11011010 defb @11001100 defb @01110110 defb @00000000 ; Char 82 (52) defb 0,0,0,0,0,0,0,0 defb @11111100 defb @01100110 defb @01100110 defb @01111100 defb @01101100 defb @01100110 defb @11100110 defb @00000000 defb @11111100 defb @01100110 defb @01100110 defb @01111100 defb @01101100 defb @01100110 defb @11100110 defb @00000000 defb @11111100 defb @01100110 defb @01100110 defb @01111100 defb @01101100 defb @01100110 defb @11100110 defb @00000000 ; Char 83 (53) defb 0,0,0,0,0,0,0,0 defb @00111100 defb @01100110 defb @01100000 defb @00111100 defb @00000110 defb @01100110 defb @00111100 defb @00000000 defb @00111100 defb @01100110 defb @01100000 defb @00111100 defb @00000110 defb @01100110 defb @00111100 defb @00000000 defb @00111100 defb @01100110 defb @01100000 defb @00111100 defb @00000110 defb @01100110 defb @00111100 defb @00000000 ; Char 84 (54) defb 0,0,0,0,0,0,0,0 defb @01111110 defb @01011010 defb @00011000 defb @00011000 defb @00011000 defb @00011000 defb @00111100 defb @00000000 defb @01111110 defb @01011010 defb @00011000 defb @00011000 defb @00011000 defb @00011000 defb @00111100 defb @00000000 defb @01111110 defb @01011010 defb @00011000 defb @00011000 defb @00011000 defb @00011000 defb @00111100 defb @00000000 ; Char 85 (55) defb 0,0,0,0,0,0,0,0 defb @01100110 defb @01100110 defb @01100110 defb @01100110 defb @01100110 defb @01100110 defb @00111100 defb @00000000 defb @01100110 defb @01100110 defb @01100110 defb @01100110 defb @01100110 defb @01100110 defb @00111100 defb @00000000 defb @01100110 defb @01100110 defb @01100110 defb @01100110 defb @01100110 defb @01100110 defb @00111100 defb @00000000 ; Char 86 (56) defb 0,0,0,0,0,0,0,0 defb @01100110 defb @01100110 defb @01100110 defb @01100110 defb @01100110 defb @00111100 defb @00011000 defb @00000000 defb @01100110 defb @01100110 defb @01100110 defb @01100110 defb @01100110 defb @00111100 defb @00011000 defb @00000000 defb @01100110 defb @01100110 defb @01100110 defb @01100110 defb @01100110 defb @00111100 defb @00011000 defb @00000000 ; Char 87 (57) defb 0,0,0,0,0,0,0,0 defb @11000110 defb @11000110 defb @11000110 defb @11010110 defb @11111110 defb @11101110 defb @11000110 defb @00000000 defb @11000110 defb @11000110 defb @11000110 defb @11010110 defb @11111110 defb @11101110 defb @11000110 defb @00000000 defb @11000110 defb @11000110 defb @11000110 defb @11010110 defb @11111110 defb @11101110 defb @11000110 defb @00000000 ; Char 88 (58) defb 0,0,0,0,0,0,0,0 defb @11000110 defb @01101100 defb @00111000 defb @00111000 defb @01101100 defb @11000110 defb @11000110 defb @00000000 defb @11000110 defb @01101100 defb @00111000 defb @00111000 defb @01101100 defb @11000110 defb @11000110 defb @00000000 defb @11000110 defb @01101100 defb @00111000 defb @00111000 defb @01101100 defb @11000110 defb @11000110 defb @00000000 ; Char 89 (59) defb 0,0,0,0,0,0,0,0 defb @01100110 defb @01100110 defb @01100110 defb @00111100 defb @00011000 defb @00011000 defb @00111100 defb @00000000 defb @01100110 defb @01100110 defb @01100110 defb @00111100 defb @00011000 defb @00011000 defb @00111100 defb @00000000 defb @01100110 defb @01100110 defb @01100110 defb @00111100 defb @00011000 defb @00011000 defb @00111100 defb @00000000 ; Char 90 (5a) defb 0,0,0,0,0,0,0,0 defb @11111110 defb @11000110 defb @10001100 defb @00011000 defb @00110010 defb @01100110 defb @11111110 defb @00000000 defb @11111110 defb @11000110 defb @10001100 defb @00011000 defb @00110010 defb @01100110 defb @11111110 defb @00000000 defb @11111110 defb @11000110 defb @10001100 defb @00011000 defb @00110010 defb @01100110 defb @11111110 defb @00000000 ; Char 91 (21) WHITE defb 0,0,0,0,0,0,0,0 defb defb defb ; Char 92 (22) CYAN defb 0,0,0,0,0,0,0,0 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb defb ; Char 93 (23) GREEN defb 0,0,0,0,0,0,0,0 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 ; Char 94 (24) YELLOW defb 0,0,0,0,0,0,0,0 defb defb defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 ; Char 95 (25) RED defb 0,0,0,0,0,0,0,0 defb defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 ; Char 96 (21) WHITE defb 0,0,0,0,0,0,0,0 defb defb defb ; Char 97 (22) CYAN defb 0,0,0,0,0,0,0,0 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb defb ; Char 98 (23) GREEN defb 0,0,0,0,0,0,0,0 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 ; Char 99 (24) YELLOW defb 0,0,0,0,0,0,0,0 defb defb defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 ; Char 100 (25) RED defb 0,0,0,0,0,0,0,0 defb defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 ; Char 101 (21) WHITE defb 0,0,0,0,0,0,0,0 defb defb defb ; Char 102 (22) CYAN defb 0,0,0,0,0,0,0,0 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb defb ; Char 103 (23) GREEN defb 0,0,0,0,0,0,0,0 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 ; Char 94 (104) YELLOW defb 0,0,0,0,0,0,0,0 defb defb defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 ; Char 105 (25) RED defb 0,0,0,0,0,0,0,0 defb defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 ; Char 106 (21) WHITE defb 0,0,0,0,0,0,0,0 defb defb defb ; Char 107 (22) CYAN defb 0,0,0,0,0,0,0,0 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb defb ; Char 108 (23) GREEN defb 0,0,0,0,0,0,0,0 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 ; Char 109 (24) YELLOW defb 0,0,0,0,0,0,0,0 defb defb defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 ; Char 110 (25) RED defb 0,0,0,0,0,0,0,0 defb defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 ; Char 111 (21) WHITE defb 0,0,0,0,0,0,0,0 defb defb defb ; Char 112 (22) CYAN defb 0,0,0,0,0,0,0,0 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb defb ; Char 113 (23) GREEN defb 0,0,0,0,0,0,0,0 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 ; Char 114 (24) YELLOW defb 0,0,0,0,0,0,0,0 defb defb defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 ; Char 115 (25) RED defb 0,0,0,0,0,0,0,0 defb defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 ; Char 116 (21) WHITE defb 0,0,0,0,0,0,0,0 defb defb defb ; Char 117 (22) CYAN defb 0,0,0,0,0,0,0,0 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb defb ; Char 118 (23) GREEN defb 0,0,0,0,0,0,0,0 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 ; Char 119 (24) YELLOW defb 0,0,0,0,0,0,0,0 defb defb defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 ; Char 120 (25) RED defb 0,0,0,0,0,0,0,0 defb defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 ; Char 121 (21) WHITE defb 0,0,0,0,0,0,0,0 defb defb defb ; Char 122 (22) CYAN defb 0,0,0,0,0,0,0,0 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb defb ; Char 123 (23) GREEN defb 0,0,0,0,0,0,0,0 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 ; Char 124 (24) YELLOW defb 0,0,0,0,0,0,0,0 defb defb defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 ; Char 125 (25) RED defb 0,0,0,0,0,0,0,0 defb defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 ; Char 126 (21) WHITE defb 0,0,0,0,0,0,0,0 defb defb defb ; Char 127 (22) CYAN defb 0,0,0,0,0,0,0,0 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb defb ; Char 128 (23) GREEN defb 0,0,0,0,0,0,0,0 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 ; Char 129 (24) YELLOW defb 0,0,0,0,0,0,0,0 defb defb defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 ; Char 130 (25) RED defb 0,0,0,0,0,0,0,0 defb defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 ; Char 131 (21) WHITE defb 0,0,0,0,0,0,0,0 defb defb defb ; Char 132 (22) CYAN defb 0,0,0,0,0,0,0,0 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb defb ; Char 133 (23) GREEN defb 0,0,0,0,0,0,0,0 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 ; Char 134 (24) YELLOW defb 0,0,0,0,0,0,0,0 defb defb defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 ; Char 135 (25) RED defb 0,0,0,0,0,0,0,0 defb defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 ; Char 136 (21) WHITE defb 0,0,0,0,0,0,0,0 defb defb defb ; Char 137 (22) CYAN defb 0,0,0,0,0,0,0,0 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb defb ; Char 138 (23) GREEN defb 0,0,0,0,0,0,0,0 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 ; Char 139 (24) YELLOW defb 0,0,0,0,0,0,0,0 defb defb defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 ; Char 140 (25) RED defb 0,0,0,0,0,0,0,0 defb defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 ; Char 141 (21) WHITE defb 0,0,0,0,0,0,0,0 defb defb defb ; Char 142 (22) CYAN defb 0,0,0,0,0,0,0,0 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb defb ; Char 143 (23) GREEN defb 0,0,0,0,0,0,0,0 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 ; Char 144 (24) YELLOW defb 0,0,0,0,0,0,0,0 defb defb defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 ; Char 145 (25) RED defb 0,0,0,0,0,0,0,0 defb defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 ; Char 146 (21) WHITE defb 0,0,0,0,0,0,0,0 defb defb defb ; Char 147 (22) CYAN defb 0,0,0,0,0,0,0,0 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb defb ; Char 148 (23) GREEN defb 0,0,0,0,0,0,0,0 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 ; Char 149 (24) YELLOW defb 0,0,0,0,0,0,0,0 defb defb defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 ; Char 150 (25) RED defb 0,0,0,0,0,0,0,0 defb defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 ; Char 151 (21) WHITE defb 0,0,0,0,0,0,0,0 defb defb defb ; Char 152 (22) CYAN defb 0,0,0,0,0,0,0,0 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb defb ; Char 153 (23) GREEN defb 0,0,0,0,0,0,0,0 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 ; Char 154 (24) YELLOW defb 0,0,0,0,0,0,0,0 defb defb defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 ; Char 155 (25) RED defb 0,0,0,0,0,0,0,0 defb defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 ; Char 156 (21) WHITE defb 0,0,0,0,0,0,0,0 defb defb defb ; Char 157 (22) CYAN defb 0,0,0,0,0,0,0,0 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb defb ; Char 158 (23) GREEN defb 0,0,0,0,0,0,0,0 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 ; Char 159 (24) YELLOW defb 0,0,0,0,0,0,0,0 defb defb defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 ; Char 160 (25) RED defb 0,0,0,0,0,0,0,0 defb defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 ; Char 161 (21) WHITE defb 0,0,0,0,0,0,0,0 defb defb defb ; Char 162 (22) CYAN defb 0,0,0,0,0,0,0,0 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb defb ; Char 163 (23) GREEN defb 0,0,0,0,0,0,0,0 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 ; Char 164 (24) YELLOW defb 0,0,0,0,0,0,0,0 defb defb defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 ; Char 165 (25) RED defb 0,0,0,0,0,0,0,0 defb defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 ; Char 166 (21) WHITE defb 0,0,0,0,0,0,0,0 defb defb defb ; Char 167 (22) CYAN defb 0,0,0,0,0,0,0,0 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb defb ; Char 168 (23) GREEN defb 0,0,0,0,0,0,0,0 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 ; Char 169 (24) YELLOW defb 0,0,0,0,0,0,0,0 defb defb defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 ; Char 170 (25) RED defb 0,0,0,0,0,0,0,0 defb defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 ; Char 171 (21) WHITE defb 0,0,0,0,0,0,0,0 defb defb defb ; Char 172 (22) CYAN defb 0,0,0,0,0,0,0,0 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb defb ; Char 173 (23) GREEN defb 0,0,0,0,0,0,0,0 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 ; Char 174 (24) YELLOW defb 0,0,0,0,0,0,0,0 defb defb defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 ; Char 175 (25) RED defb 0,0,0,0,0,0,0,0 defb defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 ; Char 176 (21) WHITE defb 0,0,0,0,0,0,0,0 defb defb defb ; Char 177 (22) CYAN defb 0,0,0,0,0,0,0,0 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb defb ; Char 178 (23) GREEN defb 0,0,0,0,0,0,0,0 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 ; Char 179 (24) YELLOW defb 0,0,0,0,0,0,0,0 defb defb defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 ; Char 180 (25) RED defb 0,0,0,0,0,0,0,0 defb defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 ; Char 181 (21) WHITE defb 0,0,0,0,0,0,0,0 defb defb defb ; Char 182 (22) CYAN defb 0,0,0,0,0,0,0,0 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb defb ; Char 183 (23) GREEN defb 0,0,0,0,0,0,0,0 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 ; Char 184 (24) YELLOW defb 0,0,0,0,0,0,0,0 defb defb defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 ; Char 185 (25) RED defb 0,0,0,0,0,0,0,0 defb defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 ; Char 186 (21) WHITE defb 0,0,0,0,0,0,0,0 defb defb defb ; Char 187 (22) CYAN defb 0,0,0,0,0,0,0,0 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb defb ; Char 188 (23) GREEN defb 0,0,0,0,0,0,0,0 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 ; Char 189 (24) YELLOW defb 0,0,0,0,0,0,0,0 defb defb defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 ; Char 190 (25) RED defb 0,0,0,0,0,0,0,0 defb defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 ; Char 191 (21) WHITE defb 0,0,0,0,0,0,0,0 defb defb defb ; Char 192 (22) CYAN defb 0,0,0,0,0,0,0,0 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb defb ; Char 193 (23) GREEN defb 0,0,0,0,0,0,0,0 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 ; Char 194 (24) YELLOW defb 0,0,0,0,0,0,0,0 defb defb defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 ; Char 195 (25) RED defb 0,0,0,0,0,0,0,0 defb defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 ; Char 196 (21) WHITE defb 0,0,0,0,0,0,0,0 defb defb defb ; Char 197 (22) CYAN defb 0,0,0,0,0,0,0,0 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb defb ; Char 198 (23) GREEN defb 0,0,0,0,0,0,0,0 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 ; Char 199 (24) YELLOW defb 0,0,0,0,0,0,0,0 defb defb defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 ; Char 200 (25) RED defb 0,0,0,0,0,0,0,0 defb defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 ; Char 201 (21) WHITE defb 0,0,0,0,0,0,0,0 defb defb defb ; Char 202 (22) CYAN defb 0,0,0,0,0,0,0,0 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb defb ; Char 203 (23) GREEN defb 0,0,0,0,0,0,0,0 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 ; Char 204 (24) YELLOW defb 0,0,0,0,0,0,0,0 defb defb defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 ; Char 205 (25) RED defb 0,0,0,0,0,0,0,0 defb defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 defb @00000000 ================================================ FILE: src/assets/templates/8x8/z88dk_sprites_definitions.h.template ================================================ #ifndef _Z88DK_SPRITES_DEFINITIONS #define _Z88DK_SPRITES_DEFINITIONS __asm ._sprites ; 0 defb 8,8 defb %"--------" defb %"--------" defb %"--------" defb %"--------" defb %"--------" defb %"--------" defb %"--------" defb %"--------" ; 1 defb 8,8 defb ; 2 defb 8,8 defb ; 3 defb 8,8 defb ; 4 defb 8,8 defb ; defb %"--------" ; defb %"----#---" ; defb %"--#####-" ; defb %"--#-#---" ; defb %"--#####-" ; defb %"----#-#-" ; defb %"--#####-" ; defb %"----#---" ; 5 defb 8,8 defb ; 6 defb 8,8 defb ; 7 defb 8,8 defb ; 8 defb 8,8 defb ; 9 defb 8,8 defb ; 10 defb 8,8 defb ; 11 defb 8,8 defb ; 12 defb 8,8 defb ; 13 defb 8,8 defb ; 14 defb 8,8 defb ; 15 defb 8,8 defb ; 16 defb 8,8 defb %"--------" defb %"--####--" defb %"-#---##-" defb %"-#--#-#-" defb %"-#-#--#-" defb %"-##---#-" defb %"--####--" defb %"--------" ; 17 defb 8,8 defb %"--------" defb %"---##---" defb %"--#-#---" defb %"----#---" defb %"----#---" defb %"----#---" defb %"--#####-" defb %"--------" ; 18 defb 8,8 defb %"--------" defb %"--####--" defb %"-#----#-" defb %"------#-" defb %"--####--" defb %"-#------" defb %"-######-" defb %"--------" ; 19 defb 8,8 defb %"--------" defb %"--####--" defb %"-#----#-" defb %"----##--" defb %"------#-" defb %"-#----#-" defb %"--####--" defb %"--------" ; 20 defb 8,8 defb %"--------" defb %"----#---" defb %"---##---" defb %"--#-#---" defb %"-#--#---" defb %"-######-" defb %"----#---" defb %"--------" ; 21 defb 8,8 defb %"--------" defb %"-######-" defb %"-#------" defb %"-#####--" defb %"------#-" defb %"-#----#-" defb %"--####--" defb %"--------" ; 22 defb 8,8 defb %"--------" defb %"--####--" defb %"-#------" defb %"-#####--" defb %"-#----#-" defb %"-#----#-" defb %"--####--" defb %"--------" ; 23 defb 8,8 defb %"--------" defb %"-######-" defb %"------#-" defb %"-----#--" defb %"----#---" defb %"---#----" defb %"---#----" defb %"--------" ; 24 defb 8,8 defb %"--------" defb %"--####--" defb %"-#----#-" defb %"--####--" defb %"-#----#-" defb %"-#----#-" defb %"--####--" defb %"--------" ; 25 defb 8,8 defb %"--------" defb %"--####--" defb %"-#----#-" defb %"-#----#-" defb %"--#####-" defb %"------#-" defb %"--####--" defb %"--------" ; 26 defb 8,8 defb ; 27 defb 8,8 defb ; 28 defb 8,8 defb ; 29 defb 8,8 defb ; 30 defb 8,8 defb ; 31 defb 8,8 defb ; 32 defb 8,8 defb ; 33 defb 8,8 defb %"--------" defb %"--####--" defb %"-#----#-" defb %"-#----#-" defb %"-######-" defb %"-#----#-" defb %"-#----#-" defb %"--------" ; 34 defb 8,8 defb %"--------" defb %"-#####--" defb %"-#----#-" defb %"-#####--" defb %"-#----#-" defb %"-#----#-" defb %"-#####--" defb %"--------" ; 35 defb 8,8 defb %"--------" defb %"--####--" defb %"-#----#-" defb %"-#------" defb %"-#------" defb %"-#----#-" defb %"--####--" defb %"--------" ; 36 defb 8,8 defb %"--------" defb %"-####---" defb %"-#---#--" defb %"-#----#-" defb %"-#----#-" defb %"-#---#--" defb %"-####---" defb %"--------" ; 37 defb 8,8 defb %"--------" defb %"-######-" defb %"-#------" defb %"-#####--" defb %"-#------" defb %"-#------" defb %"-######-" defb %"--------" ; 38 defb 8,8 defb %"--------" defb %"-######-" defb %"-#------" defb %"-#####--" defb %"-#------" defb %"-#------" defb %"-#------" defb %"--------" ; 39 defb 8,8 defb %"--------" defb %"--####--" defb %"-#----#-" defb %"-#------" defb %"-#--###-" defb %"-#----#-" defb %"--####--" defb %"--------" ; 40 defb 8,8 defb %"--------" defb %"-#----#-" defb %"-#----#-" defb %"-######-" defb %"-#----#-" defb %"-#----#-" defb %"-#----#-" defb %"--------" ; 41 defb 8,8 defb %"--------" defb %"--#####-" defb %"----#---" defb %"----#---" defb %"----#---" defb %"----#---" defb %"--#####-" defb %"--------" ; 42 defb 8,8 defb %"--------" defb %"------#-" defb %"------#-" defb %"------#-" defb %"-#----#-" defb %"-#----#-" defb %"--####--" defb %"--------" ; 43 defb 8,8 defb %"--------" defb %"-#---#--" defb %"-#--#---" defb %"-###----" defb %"-#--#---" defb %"-#---#--" defb %"-#----#-" defb %"--------" ; 44 defb 8,8 defb %"--------" defb %"-#------" defb %"-#------" defb %"-#------" defb %"-#------" defb %"-#------" defb %"-######-" defb %"--------" ; 45 defb 8,8 defb %"--------" defb %"-#----#-" defb %"-##--##-" defb %"-#-##-#-" defb %"-#----#-" defb %"-#----#-" defb %"-#----#-" defb %"--------" ; 46 defb 8,8 defb %"--------" defb %"-#----#-" defb %"-##---#-" defb %"-#-#--#-" defb %"-#--#-#-" defb %"-#---##-" defb %"-#----#-" defb %"--------" ; 47 defb 8,8 defb %"--------" defb %"--####--" defb %"-#----#-" defb %"-#----#-" defb %"-#----#-" defb %"-#----#-" defb %"--####--" defb %"--------" ; 48 defb 8,8 defb %"--------" defb %"-#####--" defb %"-#----#-" defb %"-#----#-" defb %"-#####--" defb %"-#------" defb %"-#------" defb %"--------" ; 49 defb 8,8 defb %"--------" defb %"--####--" defb %"-#----#-" defb %"-#----#-" defb %"-#-#--#-" defb %"-#--#-#-" defb %"--####--" defb %"--------" ; 50 defb 8,8 defb %"--------" defb %"-#####--" defb %"-#----#-" defb %"-#----#-" defb %"-#####--" defb %"-#---#--" defb %"-#----#-" defb %"--------" ; 51 defb 8,8 defb %"--------" defb %"--####--" defb %"-#------" defb %"--####--" defb %"------#-" defb %"-#----#-" defb %"--####--" defb %"--------" ; 52 defb 8,8 defb %"--------" defb %"#######-" defb %"---#----" defb %"---#----" defb %"---#----" defb %"---#----" defb %"---#----" defb %"--------" ; 53 defb 8,8 defb %"--------" defb %"-#----#-" defb %"-#----#-" defb %"-#----#-" defb %"-#----#-" defb %"-#----#-" defb %"--####--" defb %"--------" ; 54 defb 8,8 defb %"--------" defb %"-#----#-" defb %"-#----#-" defb %"-#----#-" defb %"-#----#-" defb %"--#--#--" defb %"---##---" defb %"--------" ; 55 defb 8,8 defb %"--------" defb %"-#----#-" defb %"-#----#-" defb %"-#----#-" defb %"-#----#-" defb %"-#-##-#-" defb %"--#--#--" defb %"--------" ; 56 defb 8,8 defb %"--------" defb %"-#----#-" defb %"--#--#--" defb %"---##---" defb %"---##---" defb %"--#--#--" defb %"-#----#-" defb %"--------" ; 57 defb 8,8 defb %"--------" defb %"#-----#-" defb %"-#---#--" defb %"--#-#---" defb %"---#----" defb %"---#----" defb %"---#----" defb %"--------" ; 58 defb 8,8 defb %"--------" defb %"-######-" defb %"-----#--" defb %"----#---" defb %"---#----" defb %"--#-----" defb %"-######-" defb %"--------" ; 59 defb 8,8 defb ; 60 defb 8,8 defb ; 61 defb 8,8 defb ; 62 defb 8,8 defb ; 63 defb 8,8 defb #if !defined(__FEWER_SPRITES) ; 64 defb 8,8 defb %"--------" defb %"---###--" defb %"--#---#-" defb %"-####---" defb %"--#-----" defb %"--#-----" defb %"-######-" defb %"--------" ; 65 defb 8,8 defb %"--------" defb %"--------" defb %"--###---" defb %"-----#--" defb %"--####--" defb %"-#---#--" defb %"--####--" defb %"--------" ; 66 defb 8,8 defb %"--------" defb %"--#-----" defb %"--#-----" defb %"--####--" defb %"--#---#-" defb %"--#---#-" defb %"--####--" defb %"--------" ; 67 defb 8,8 defb %"--------" defb %"--------" defb %"---###--" defb %"--#-----" defb %"--#-----" defb %"--#-----" defb %"---###--" defb %"--------" ; 68 defb 8,8 defb %"--------" defb %"-----#--" defb %"-----#--" defb %"--####--" defb %"-#---#--" defb %"-#---#--" defb %"--####--" defb %"--------" ; 69 defb 8,8 defb %"--------" defb %"--------" defb %"--###---" defb %"-#---#--" defb %"-####---" defb %"-#------" defb %"--####--" defb %"--------" ; 70 defb 8,8 defb %"--------" defb %"----##--" defb %"---#----" defb %"---##---" defb %"---#----" defb %"---#----" defb %"---#----" defb %"--------" ; 71 defb 8,8 defb %"--------" defb %"--------" defb %"--####--" defb %"-#---#--" defb %"-#---#--" defb %"--####--" defb %"-----#--" defb %"--###---" ; 72 defb 8,8 defb %"--------" defb %"-#------" defb %"-#------" defb %"-####---" defb %"-#---#--" defb %"-#---#--" defb %"-#---#--" defb %"--------" ; 73 defb 8,8 defb %"--------" defb %"---#----" defb %"--------" defb %"--##----" defb %"---#----" defb %"---#----" defb %"--###---" defb %"--------" ; 74 defb 8,8 defb %"--------" defb %"-----#--" defb %"--------" defb %"-----#--" defb %"-----#--" defb %"-----#--" defb %"--#--#--" defb %"---##---" ; 75 defb 8,8 defb %"--------" defb %"--#-----" defb %"--#-#---" defb %"--##----" defb %"--##----" defb %"--#-#---" defb %"--#--#--" defb %"--------" ; 76 defb 8,8 defb %"--------" defb %"---#----" defb %"---#----" defb %"---#----" defb %"---#----" defb %"---#----" defb %"----##--" defb %"--------" ; 77 defb 8,8 defb %"--------" defb %"--------" defb %"-##-#---" defb %"-#-#-#--" defb %"-#-#-#--" defb %"-#-#-#--" defb %"-#-#-#--" defb %"--------" ; 78 defb 8,8 defb %"--------" defb %"--------" defb %"-####---" defb %"-#---#--" defb %"-#---#--" defb %"-#---#--" defb %"-#---#--" defb %"--------" ; 79 defb 8,8 defb %"--------" defb %"--------" defb %"--###---" defb %"-#---#--" defb %"-#---#--" defb %"-#---#--" defb %"--###---" defb %"--------" ; 80 defb 8,8 defb %"--------" defb %"--------" defb %"-####---" defb %"-#---#--" defb %"-#---#--" defb %"-####---" defb %"-#------" defb %"-#------" ; 81 defb 8,8 defb %"--------" defb %"--------" defb %"--####--" defb %"-#---#--" defb %"-#---#--" defb %"--####--" defb %"-----#--" defb %"-----##-" ; 82 defb 8,8 defb %"--------" defb %"--------" defb %"---###--" defb %"--#-----" defb %"--#-----" defb %"--#-----" defb %"--#-----" defb %"--------" ; 83 defb 8,8 defb %"--------" defb %"--------" defb %"--###---" defb %"-#------" defb %"--###---" defb %"-----#--" defb %"-####---" defb %"--------" ; 84 defb 8,8 defb %"--------" defb %"---#----" defb %"--###---" defb %"---#----" defb %"---#----" defb %"---#----" defb %"----##--" defb %"--------" ; 85 defb 8,8 defb %"--------" defb %"--------" defb %"-#---#--" defb %"-#---#--" defb %"-#---#--" defb %"-#---#--" defb %"--###---" defb %"--------" ; 86 defb 8,8 defb %"--------" defb %"--------" defb %"-#---#--" defb %"-#---#--" defb %"--#-#---" defb %"--#-#---" defb %"---#----" defb %"--------" ; 87 defb 8,8 defb %"--------" defb %"--------" defb %"-#---#--" defb %"-#-#-#--" defb %"-#-#-#--" defb %"-#-#-#--" defb %"--#-#---" defb %"--------" ; 88 defb 8,8 defb %"--------" defb %"--------" defb %"-#---#--" defb %"--#-#---" defb %"---#----" defb %"--#-#---" defb %"-#---#--" defb %"--------" ; 89 defb 8,8 defb %"--------" defb %"--------" defb %"-#---#--" defb %"-#---#--" defb %"-#---#--" defb %"--####--" defb %"-----#--" defb %"--###---" ; 90 defb 8,8 defb %"--------" defb %"--------" defb %"-#####--" defb %"----#---" defb %"---#----" defb %"--#-----" defb %"-#####--" defb %"--------" ; 91 defb 8,8 defb %"--------" defb %"----###-" defb %"----#---" defb %"--##----" defb %"----#---" defb %"----#---" defb %"----###-" defb %"--------" ; 92 defb 8,8 defb %"--------" defb %"----#---" defb %"----#---" defb %"----#---" defb %"----#---" defb %"----#---" defb %"----#---" defb %"--------" ; 93 defb 8,8 defb %"--------" defb %"-###----" defb %"---#----" defb %"----##--" defb %"---#----" defb %"---#----" defb %"-###----" defb %"--------" ; 94 defb 8,8 defb %"--------" defb %"---#-#--" defb %"--#-#---" defb %"--------" defb %"--------" defb %"--------" defb %"--------" defb %"--------" ; 95 defb 8,8 defb %"--####--" defb %"-#----#-" defb %"#--##--#" defb %"#-#----#" defb %"#-#----#" defb %"#--##--#" defb %"-#----#-" defb %"--####--" #endif defb 8,8 defb %"########" defb %"########" defb %"########" defb %"########" defb %"########" defb %"########" defb %"########" defb %"########" __endasm; #endif // _Z88DK_SPRITES_DEFINITIONS ================================================ FILE: src/assets/templates/8x8/z88dk_xchase.asm.template ================================================ SECTION rodata_font SECTION rodata_font_8x8 PUBLIC _udgs PUBLIC _udgs_end _udgs: defb %"--------" defb %"--------" defb %"--------" defb %"--------" defb %"--------" defb %"--------" defb %"--------" defb %"--------" ; invincibility defb ; left missile defb ; bullet defb ; dollar defb ; power-up F defb ; vertical brick defb ; skull defb ; ghost defb ; bomb defb ; player down defb ; horizontal brick defb ; power-up S defb defb ; right missile defb ; rocket defb defb %"--------" defb %"--####--" defb %"-#---##-" defb %"-#--#-#-" defb %"-#-#--#-" defb %"-##---#-" defb %"--####--" defb %"--------" defb %"--------" defb %"---##---" defb %"--#-#---" defb %"----#---" defb %"----#---" defb %"----#---" defb %"--#####-" defb %"--------" defb %"--------" defb %"--####--" defb %"-#----#-" defb %"------#-" defb %"--####--" defb %"-#------" defb %"-######-" defb %"--------" defb %"--------" defb %"--####--" defb %"-#----#-" defb %"----##--" defb %"------#-" defb %"-#----#-" defb %"--####--" defb %"--------" defb %"--------" defb %"----#---" defb %"---##---" defb %"--#-#---" defb %"-#--#---" defb %"-######-" defb %"----#---" defb %"--------" defb %"--------" defb %"-######-" defb %"-#------" defb %"-#####--" defb %"------#-" defb %"-#----#-" defb %"--####--" defb %"--------" defb %"--------" defb %"--####--" defb %"-#------" defb %"-#####--" defb %"-#----#-" defb %"-#----#-" defb %"--####--" defb %"--------" defb %"--------" defb %"-######-" defb %"------#-" defb %"-----#--" defb %"----#---" defb %"---#----" defb %"---#----" defb %"--------" defb %"--------" defb %"--####--" defb %"-#----#-" defb %"--####--" defb %"-#----#-" defb %"-#----#-" defb %"--####--" defb %"--------" defb %"--------" defb %"--####--" defb %"-#----#-" defb %"-#----#-" defb %"--#####-" defb %"------#-" defb %"--####--" defb %"--------" defb ; power-up H defb ; player up defb ; player right defb ; player left defb ; gun defb defb defb %"--------" defb %"--####--" defb %"-#----#-" defb %"-#----#-" defb %"-######-" defb %"-#----#-" defb %"-#----#-" defb %"--------" defb %"--------" defb %"-#####--" defb %"-#----#-" defb %"-#####--" defb %"-#----#-" defb %"-#----#-" defb %"-#####--" defb %"--------" defb %"--------" defb %"--####--" defb %"-#----#-" defb %"-#------" defb %"-#------" defb %"-#----#-" defb %"--####--" defb %"--------" defb %"--------" defb %"-####---" defb %"-#---#--" defb %"-#----#-" defb %"-#----#-" defb %"-#---#--" defb %"-####---" defb %"--------" defb %"--------" defb %"-######-" defb %"-#------" defb %"-#####--" defb %"-#------" defb %"-#------" defb %"-######-" defb %"--------" defb %"--------" defb %"-######-" defb %"-#------" defb %"-#####--" defb %"-#------" defb %"-#------" defb %"-#------" defb %"--------" defb %"--------" defb %"--####--" defb %"-#----#-" defb %"-#------" defb %"-#--###-" defb %"-#----#-" defb %"--####--" defb %"--------" defb %"--------" defb %"-#----#-" defb %"-#----#-" defb %"-######-" defb %"-#----#-" defb %"-#----#-" defb %"-#----#-" defb %"--------" defb %"--------" defb %"--#####-" defb %"----#---" defb %"----#---" defb %"----#---" defb %"----#---" defb %"--#####-" defb %"--------" defb %"--------" defb %"------#-" defb %"------#-" defb %"------#-" defb %"-#----#-" defb %"-#----#-" defb %"--####--" defb %"--------" defb %"--------" defb %"-#---#--" defb %"-#--#---" defb %"-###----" defb %"-#--#---" defb %"-#---#--" defb %"-#----#-" defb %"--------" defb %"--------" defb %"-#------" defb %"-#------" defb %"-#------" defb %"-#------" defb %"-#------" defb %"-######-" defb %"--------" defb %"--------" defb %"-#----#-" defb %"-##--##-" defb %"-#-##-#-" defb %"-#----#-" defb %"-#----#-" defb %"-#----#-" defb %"--------" defb %"--------" defb %"-#----#-" defb %"-##---#-" defb %"-#-#--#-" defb %"-#--#-#-" defb %"-#---##-" defb %"-#----#-" defb %"--------" defb %"--------" defb %"--####--" defb %"-#----#-" defb %"-#----#-" defb %"-#----#-" defb %"-#----#-" defb %"--####--" defb %"--------" defb %"--------" defb %"-#####--" defb %"-#----#-" defb %"-#----#-" defb %"-#####--" defb %"-#------" defb %"-#------" defb %"--------" defb %"--------" defb %"--####--" defb %"-#----#-" defb %"-#----#-" defb %"-#-#--#-" defb %"-#--#-#-" defb %"--####--" defb %"--------" defb %"--------" defb %"-#####--" defb %"-#----#-" defb %"-#----#-" defb %"-#####--" defb %"-#---#--" defb %"-#----#-" defb %"--------" defb %"--------" defb %"--####--" defb %"-#------" defb %"--####--" defb %"------#-" defb %"-#----#-" defb %"--####--" defb %"--------" defb %"--------" defb %"#######-" defb %"---#----" defb %"---#----" defb %"---#----" defb %"---#----" defb %"---#----" defb %"--------" defb %"--------" defb %"-#----#-" defb %"-#----#-" defb %"-#----#-" defb %"-#----#-" defb %"-#----#-" defb %"--####--" defb %"--------" defb %"--------" defb %"-#----#-" defb %"-#----#-" defb %"-#----#-" defb %"-#----#-" defb %"--#--#--" defb %"---##---" defb %"--------" defb %"--------" defb %"-#----#-" defb %"-#----#-" defb %"-#----#-" defb %"-#----#-" defb %"-#-##-#-" defb %"--#--#--" defb %"--------" defb %"--------" defb %"-#----#-" defb %"--#--#--" defb %"---##---" defb %"---##---" defb %"--#--#--" defb %"-#----#-" defb %"--------" defb %"--------" defb %"#-----#-" defb %"-#---#--" defb %"--#-#---" defb %"---#----" defb %"---#----" defb %"---#----" defb %"--------" defb %"--------" defb %"-######-" defb %"-----#--" defb %"----#---" defb %"---#----" defb %"--#-----" defb %"-######-" defb %"--------" ; dead ghost defb defb defb defb defb defb %"--------" defb %"---###--" defb %"--#---#-" defb %"-####---" defb %"--#-----" defb %"--#-----" defb %"-######-" defb %"--------" defb %"--------" defb %"--------" defb %"--###---" defb %"-----#--" defb %"--####--" defb %"-#---#--" defb %"--####--" defb %"--------" defb %"--------" defb %"--#-----" defb %"--#-----" defb %"--####--" defb %"--#---#-" defb %"--#---#-" defb %"--####--" defb %"--------" defb %"--------" defb %"--------" defb %"---###--" defb %"--#-----" defb %"--#-----" defb %"--#-----" defb %"---###--" defb %"--------" defb %"--------" defb %"-----#--" defb %"-----#--" defb %"--####--" defb %"-#---#--" defb %"-#---#--" defb %"--####--" defb %"--------" defb %"--------" defb %"--------" defb %"--###---" defb %"-#---#--" defb %"-####---" defb %"-#------" defb %"--####--" defb %"--------" defb %"--------" defb %"----##--" defb %"---#----" defb %"---##---" defb %"---#----" defb %"---#----" defb %"---#----" defb %"--------" defb %"--------" defb %"--------" defb %"--####--" defb %"-#---#--" defb %"-#---#--" defb %"--####--" defb %"-----#--" defb %"--###---" defb %"--------" defb %"-#------" defb %"-#------" defb %"-####---" defb %"-#---#--" defb %"-#---#--" defb %"-#---#--" defb %"--------" defb %"--------" defb %"---#----" defb %"--------" defb %"--##----" defb %"---#----" defb %"---#----" defb %"--###---" defb %"--------" defb %"--------" defb %"-----#--" defb %"--------" defb %"-----#--" defb %"-----#--" defb %"-----#--" defb %"--#--#--" defb %"---##---" defb %"--------" defb %"--#-----" defb %"--#-#---" defb %"--##----" defb %"--##----" defb %"--#-#---" defb %"--#--#--" defb %"--------" defb %"--------" defb %"---#----" defb %"---#----" defb %"---#----" defb %"---#----" defb %"---#----" defb %"----##--" defb %"--------" defb %"--------" defb %"--------" defb %"-##-#---" defb %"-#-#-#--" defb %"-#-#-#--" defb %"-#-#-#--" defb %"-#-#-#--" defb %"--------" defb %"--------" defb %"--------" defb %"-####---" defb %"-#---#--" defb %"-#---#--" defb %"-#---#--" defb %"-#---#--" defb %"--------" defb %"--------" defb %"--------" defb %"--###---" defb %"-#---#--" defb %"-#---#--" defb %"-#---#--" defb %"--###---" defb %"--------" defb %"--------" defb %"--------" defb %"-####---" defb %"-#---#--" defb %"-#---#--" defb %"-####---" defb %"-#------" defb %"-#------" defb %"--------" defb %"--------" defb %"--####--" defb %"-#---#--" defb %"-#---#--" defb %"--####--" defb %"-----#--" defb %"-----##-" defb %"--------" defb %"--------" defb %"---###--" defb %"--#-----" defb %"--#-----" defb %"--#-----" defb %"--#-----" defb %"--------" defb %"--------" defb %"--------" defb %"--###---" defb %"-#------" defb %"--###---" defb %"-----#--" defb %"-####---" defb %"--------" defb %"--------" defb %"---#----" defb %"--###---" defb %"---#----" defb %"---#----" defb %"---#----" defb %"----##--" defb %"--------" defb %"--------" defb %"--------" defb %"-#---#--" defb %"-#---#--" defb %"-#---#--" defb %"-#---#--" defb %"--###---" defb %"--------" defb %"--------" defb %"--------" defb %"-#---#--" defb %"-#---#--" defb %"--#-#---" defb %"--#-#---" defb %"---#----" defb %"--------" defb %"--------" defb %"--------" defb %"-#---#--" defb %"-#-#-#--" defb %"-#-#-#--" defb %"-#-#-#--" defb %"--#-#---" defb %"--------" defb %"--------" defb %"--------" defb %"-#---#--" defb %"--#-#---" defb %"---#----" defb %"--#-#---" defb %"-#---#--" defb %"--------" defb %"--------" defb %"--------" defb %"-#---#--" defb %"-#---#--" defb %"-#---#--" defb %"--####--" defb %"-----#--" defb %"--###---" defb %"--------" defb %"--------" defb %"-#####--" defb %"----#---" defb %"---#----" defb %"--#-----" defb %"-#####--" defb %"--------" defb %"--------" defb %"----###-" defb %"----#---" defb %"--##----" defb %"----#---" defb %"----#---" defb %"----###-" defb %"--------" defb %"--------" defb %"----#---" defb %"----#---" defb %"----#---" defb %"----#---" defb %"----#---" defb %"----#---" defb %"--------" defb %"--------" defb %"-###----" defb %"---#----" defb %"----##--" defb %"---#----" defb %"---#----" defb %"-###----" defb %"--------" defb %"--------" defb %"---#-#--" defb %"--#-#---" defb %"--------" defb %"--------" defb %"--------" defb %"--------" defb %"--------" defb %"--####--" defb %"-#----#-" defb %"#--##--#" defb %"#-#----#" defb %"#-#----#" defb %"#--##--#" defb %"-#----#-" defb %"--####--" _udgs_end: ================================================ FILE: src/assets/unit_tests/testAssets.py ================================================ import unittest import sys sys.path.append("assets") from generate_assets import * class testAssets(unittest.TestCase): COLOR1 = 0x55 COLOR2 = 0xAA COLOR3 = 0xFF def test_four_colored_1(self): res = four_colored(0x1,testAssets.COLOR3) self.assertEqual(res,0x03) def test_four_colored_2(self): res = four_colored(0x3,testAssets.COLOR3) self.assertEqual(res,0x0F) def test_four_colored_3(self): res = four_colored(0x7,testAssets.COLOR3) self.assertEqual(res,0x3F) def test_four_colored_4(self): res = four_colored(0xF,testAssets.COLOR3) self.assertEqual(res,0xFF) def test_four_colored_5(self): res = four_colored(0x1,testAssets.COLOR2) self.assertEqual(res,0x02) def test_four_colored_6(self): res = four_colored(0x3,testAssets.COLOR2) self.assertEqual(res,0x0A) def test_four_colored_7(self): res = four_colored(0x7,testAssets.COLOR2) self.assertEqual(res,0x2A) def test_four_colored_8(self): res = four_colored(0xF,testAssets.COLOR2) self.assertEqual(res,0xAA) def test_four_colored_9(self): res = four_colored(0x1,testAssets.COLOR1) self.assertEqual(res,0x01) def test_four_colored_10(self): res = four_colored(0x3,testAssets.COLOR1) self.assertEqual(res,0x05) def test_four_colored_11(self): res = four_colored(0x7,testAssets.COLOR1) self.assertEqual(res,0x15) def test_four_colored_12(self): res = four_colored(0xF,testAssets.COLOR1) self.assertEqual(res,0x55) def test_four_colored_13(self): res = four_colored(0x2,testAssets.COLOR1) self.assertEqual(res,0x04) def test_four_colored_14(self): res = four_colored(0x2,testAssets.COLOR2) self.assertEqual(res,0x08) def test_four_colored_15(self): res = four_colored(0x2,testAssets.COLOR3) self.assertEqual(res,0x0C) if __name__ == '__main__': unittest.main() ================================================ FILE: src/config.ini ================================================ [build] # gnu_make name (usually "make" but "gmake" on FreeBSD") # auto -> automatic heuristic detection gnu_make = auto # Maximum number of threads to be used when building compilation_threads = auto # Parallel build of different projects (i.e. games/examples) parallelize_multi_build = 1 z88dk_compiler = sccz80 # sccz80 # zsdcc # clang [experimental] # Z88DK common optimization options z88dk_compiler_opts = #-compiler=sdcc -SO3 --max-allocs-per-node200000 #-O3 # SCCZ80-specific compiler options sccz80_compiler_opts = -O3 # ZSDCC-specific (Z88DK) optimization options for ZSDCC targets zsdcc_compiler_opts = -SO3 --max-allocs-per-node200000 # --opt-code-size -SO3 --max-allocs-per-node200000 # -SO3 --max-allocs-per-node200000 # --opt-code-size # CMOC optimization options cmoc_compiler_opts = -O2 #--verbose #-fomit-frame-pointer # CC65 optimization options cc65_compiler_opts = -Or -Cl # LCC1802 optimization options lcc1802_compiler_opts = -v -O "-Wf-volatile" "-Wp-D nofloats" "-Wf-mulcall" # GCC for TI99/4A options # -O2 # -O1 # -Os # -fno-peephole2 -fno-function-cse gcc4ti99_compiler_opts = -O2 -fno-peephole2 -fno-function-cse # VBCC options vbcc_compiler_opts = -O1 # ACK options ack_compiler_opts = -O6 # Native compiler options native_compiler_opts = -Wpedantic -Wall # Compiler use to build native builds # Remark: Under cygwin, gcc targets the cygwin environment and not Windows native_compiler = gcc # Flag to toggle tools when building # 0 -> targets won't use tools to create easy to use disk/tape/cartridge images so that raw or simpler binaries are produced # 1 -> targets that need tools will use tools to create easy to use disk/tape/cartridge images use_tools = 1 # Compiler to use for tools that are built by a C compiler tool_compiler = gcc [extend] # How to approximate tiles with more rows # duplicate -> duplicate adjacent row # zero -> add zero row(s) extend_algorithm = duplicate # Location of generated non-8x8 pixel shapes # 0 -> write in _shapes directory, # 1 -> write in shapes directory but avoid overwriting existing shapes or tiles replace_shapes = 1 [run] # If empty, we assume the emulator path is in PATH environment variable vice_path = # If empty, vice searches its default path (OS-dependent) vice_rom_path = ../roms/vice/ # If empty, we assume the emulator path is in the PATH environment variable mame_path = #e.g., /cygdrive/c/Retro/Emulators/Mame0251/ # If empty, mame searches the current directory (which should be wrong) mame_rom_path = ../roms/mame/ #e.g., 'c:\\Retro\\Emulators\\Mame0251\\roms\\' [terminal] color_terminal = 1 verbose = 1 fast_test = 0 interactive_test = 0 ================================================ FILE: src/cross_lib/boot/multi8/bootstrap.c ================================================ /* * Bootstrap program for loading larger programs in 64k mode * on the Mitsubishi Multi8 * * zcc +multi8 bootstrap.c -create-app */ #include #include extern void start() @ 0x0000; #pragma define CRT_ENABLE_STDIO=0 #pragma redirect fputc_cons=fputc_cons_native static void setup_memory_map() __naked { #asm ; Here we need to switch to 64k RAM mode ; We have no access to the display (unless we page it in) di ld a,@00100000 ;bit 5 set = RAM ;bit 4 reset = RAM out ($2a),a ret #endasm } static void reset_memory_map() __naked { #asm ; Here we need to switch to 64k RAM mode ; We have no access to the display (unless we page it in) ld a,@00010000 ;bit 5 set = RAM ;bit 4 reset = RAM out ($2a),a ei ret #endasm } static void write_string(char *str) __z88dk_fastcall { while (*str) fputc_cons(*str++); } int main() { write_string("z88dk Multi8 bootstrap starting\n"); setup_memory_map(); if ( tape_load() == 0 ) { start(); } else { reset_memory_map(); write_string("Loading failed\n"); } } ================================================ FILE: src/cross_lib/cfg/cc65/alt/vic20-16k.cfg ================================================ # Memory configuration for the VIC-20 with 32K RAM Cartridge # Contributed by Stefan Haubenthal SYMBOLS { __LOADADDR__: type = import; __EXEHDR__: type = import; __STACKSIZE__: type = weak, value = $0000; } MEMORY { ZP: file = "", define = yes, start = $0002, size = $001A; LOADADDR: file = %O, start = $11FF, size = $0002; HEADER: file = %O, start = $1201, size = $000C; MAIN: file = %O, define = yes, start = $120D, size = $4DF3 - __STACKSIZE__; } SEGMENTS { ZEROPAGE: load = ZP, type = zp; LOADADDR: load = LOADADDR, type = ro; EXEHDR: load = HEADER, type = ro; STARTUP: load = MAIN, type = ro; LOWCODE: load = MAIN, type = ro, optional = yes; ONCE: load = MAIN, type = ro, optional = yes; CODE: load = MAIN, type = ro; RODATA: load = MAIN, type = ro; DATA: load = MAIN, type = rw; INIT: load = MAIN, type = bss; BSS: load = MAIN, type = bss, define = yes; } FEATURES { CONDES: type = constructor, label = __CONSTRUCTOR_TABLE__, count = __CONSTRUCTOR_COUNT__, segment = ONCE; CONDES: type = destructor, label = __DESTRUCTOR_TABLE__, count = __DESTRUCTOR_COUNT__, segment = RODATA; CONDES: type = interruptor, label = __INTERRUPTOR_TABLE__, count = __INTERRUPTOR_COUNT__, segment = RODATA, import = __CALLIRQ__; } ================================================ FILE: src/cross_lib/cfg/cc65/alt/vic20-24k.cfg ================================================ # Memory configuration for the VIC-20 with 32K RAM Cartridge # Contributed by Stefan Haubenthal SYMBOLS { __LOADADDR__: type = import; __EXEHDR__: type = import; __STACKSIZE__: type = weak, value = $0400; # 1k stack } MEMORY { ZP: file = "", define = yes, start = $0002, size = $001A; LOADADDR: file = %O, start = $11FF, size = $0002; HEADER: file = %O, start = $1201, size = $000C; MAIN: file = %O, define = yes, start = $120D, size = $6DF3 - __STACKSIZE__; } SEGMENTS { ZEROPAGE: load = ZP, type = zp; LOADADDR: load = LOADADDR, type = ro; EXEHDR: load = HEADER, type = ro; STARTUP: load = MAIN, type = ro; LOWCODE: load = MAIN, type = ro, optional = yes; ONCE: load = MAIN, type = ro, optional = yes; CODE: load = MAIN, type = ro; RODATA: load = MAIN, type = ro; DATA: load = MAIN, type = rw; INIT: load = MAIN, type = bss; BSS: load = MAIN, type = bss, define = yes; } FEATURES { CONDES: type = constructor, label = __CONSTRUCTOR_TABLE__, count = __CONSTRUCTOR_COUNT__, segment = ONCE; CONDES: type = destructor, label = __DESTRUCTOR_TABLE__, count = __DESTRUCTOR_COUNT__, segment = RODATA; CONDES: type = interruptor, label = __INTERRUPTOR_TABLE__, count = __INTERRUPTOR_COUNT__, segment = RODATA, import = __CALLIRQ__; } ================================================ FILE: src/cross_lib/cfg/cc65/alt/vic20-3k.cfg ================================================ SYMBOLS { __LOADADDR__: type = import; __EXEHDR__: type = import; __STACKSIZE__: type = weak, value = $0001; # 1k stack } MEMORY { ZP: file = "", define = yes, start = $0002, size = $001A; LOADADDR: file = %O, start = $03FF, size = $0002; HEADER: file = %O, start = $0401, size = $000C; MAIN: file = %O, define = yes, start = $040D, size = $1E00 - __MAIN_START__ - __STACKSIZE__; } SEGMENTS { ZEROPAGE: load = ZP, type = zp; LOADADDR: load = LOADADDR, type = ro; EXEHDR: load = HEADER, type = ro; STARTUP: load = MAIN, type = ro; LOWCODE: load = MAIN, type = ro, optional = yes; ONCE: load = MAIN, type = ro, optional = yes; CODE: load = MAIN, type = ro; RODATA: load = MAIN, type = ro; DATA: load = MAIN, type = rw; INIT: load = MAIN, type = bss; BSS: load = MAIN, type = bss, define = yes; } FEATURES { CONDES: type = constructor, label = __CONSTRUCTOR_TABLE__, count = __CONSTRUCTOR_COUNT__, segment = ONCE; CONDES: type = destructor, label = __DESTRUCTOR_TABLE__, count = __DESTRUCTOR_COUNT__, segment = RODATA; CONDES: type = interruptor, label = __INTERRUPTOR_TABLE__, count = __INTERRUPTOR_COUNT__, segment = RODATA, import = __CALLIRQ__; } ================================================ FILE: src/cross_lib/cfg/cc65/alt/vic20-8k.cfg ================================================ # Memory configuration for the VIC-20 with 32K RAM Cartridge # Contributed by Stefan Haubenthal SYMBOLS { __LOADADDR__: type = import; __EXEHDR__: type = import; __STACKSIZE__: type = weak, value = $0010; } MEMORY { ZP: file = "", define = yes, start = $0002, size = $001A; SCREEN: start = $1000, size = $0200; LOADADDR: file = %O, start = $11FF, size = $0002; HEADER: file = %O, start = $1201, size = $000C; MAIN: file = %O, define = yes, start = $120D, size = $2DF3 - __STACKSIZE__; } SEGMENTS { ZEROPAGE: load = ZP, type = zp; LOADADDR: load = LOADADDR, type = ro; EXEHDR: load = HEADER, type = ro; STARTUP: load = MAIN, type = ro; LOWCODE: load = MAIN, type = ro, optional = yes; ONCE: load = MAIN, type = ro, optional = yes; CODE: load = MAIN, type = ro; RODATA: load = MAIN, type = ro; DATA: load = MAIN, type = rw; INIT: load = MAIN, type = bss; BSS: load = MAIN, type = bss, define = yes; } FEATURES { CONDES: type = constructor, label = __CONSTRUCTOR_TABLE__, count = __CONSTRUCTOR_COUNT__, segment = ONCE; CONDES: type = destructor, label = __DESTRUCTOR_TABLE__, count = __DESTRUCTOR_COUNT__, segment = RODATA; CONDES: type = interruptor, label = __INTERRUPTOR_TABLE__, count = __INTERRUPTOR_COUNT__, segment = RODATA, import = __CALLIRQ__; } ================================================ FILE: src/cross_lib/cfg/cc65/alt/vic20-8k_GFX_tight.cfg ================================================ # Memory configuration for the VIC-20 with 32K RAM Cartridge # Contributed by Stefan Haubenthal SYMBOLS { __LOADADDR__: type = import; __EXEHDR__: type = import; __STACKSIZE__: type = weak, value = $0014; } MEMORY { ZP: file = "", define = yes, start = $0002, size = $001A; SCREEN: start = $1000, size = $0200; LOADADDR: file = %O, start = $11FF, size = $0002; HEADER: file = %O, start = $1201, size = $000C; MAIN: file = %O, define = yes, start = $120D, fill = yes, size = $1C00 - $120D - __STACKSIZE__; DUMMY: file = %O, start = $1C00 - __STACKSIZE__ - 1, fill = yes, size = __STACKSIZE__; CHARMEM: file = %O, start = $1C00, size = $0200, type = rw, define = yes, fill = yes; RAM1: file = %O, start = $1E00, size = $2200, type = rw; } SEGMENTS { ZEROPAGE: load = ZP, type = zp; LOADADDR: load = LOADADDR, type = ro; EXEHDR: load = HEADER, type = ro; STARTUP: load = MAIN, type = ro; LOWCODE: load = MAIN, type = ro, optional = yes; ONCE: load = MAIN, type = ro, optional = yes; CODE: load = RAM1, type = ro; RODATA: load = MAIN, type = ro; DATA: load = MAIN, type = rw; INIT: load = RAM1, type = bss; BSS: load = MAIN, type = bss, define = yes; UDCCHAR: load = CHARMEM, type = ro, define = yes, optional = no; CODE2: load = MAIN, type = ro; } FEATURES { CONDES: type = constructor, label = __CONSTRUCTOR_TABLE__, count = __CONSTRUCTOR_COUNT__, segment = ONCE; CONDES: type = destructor, label = __DESTRUCTOR_TABLE__, count = __DESTRUCTOR_COUNT__, segment = RODATA; CONDES: type = interruptor, label = __INTERRUPTOR_TABLE__, count = __INTERRUPTOR_COUNT__, segment = RODATA, import = __CALLIRQ__; } ================================================ FILE: src/cross_lib/cfg/cc65/alt/vic20-8k_old_GFX.cfg ================================================ # Memory configuration for the VIC-20 with 16K RAM Cartridge # Contributed by Stefan Haubenthal SYMBOLS { __LOADADDR__: type = import; __EXEHDR__: type = import; __STACKSIZE__: type = weak, value = $0002; # 256 byte stack __GFX_START__: type = weak, value = $1C00; } MEMORY { ZP: file = "", define = yes, start = $0002, size = $001A; SCREEN: start = $1000, size = $0200; LOADADDR: file = %O, start = $11FF, size = $0002; HEADER: file = %O, start = $1201, size = $000C; MAIN: file = %O, define = yes, start = $120D, fill = yes, size = __GFX_START__ - $120D - __STACKSIZE__; DUMMY: file = %O, start = __GFX_START__ - __STACKSIZE__ - 1, fill = yes, size = __STACKSIZE__; CHARMEM: file = %O, start = __GFX_START__, size = $0400, type = rw, define = yes, fill = yes; RAM1: file = %O, start = $2000, size = $2000, type = rw; } SEGMENTS { ZEROPAGE: load = ZP, type = zp; LOADADDR: load = LOADADDR, type = ro; EXEHDR: load = HEADER, type = ro; STARTUP: load = MAIN, type = ro; LOWCODE: load = MAIN, type = ro, optional = yes; ONCE: load = MAIN, type = ro, optional = yes; CODE: load = RAM1, type = ro; RODATA: load = MAIN, type = ro; DATA: load = MAIN, type = rw; INIT: load = RAM1, type = bss; BSS: load = MAIN, type = bss, define = yes; UDCCHAR: load = CHARMEM, type = ro, define = yes, optional = no; CODE2: load = MAIN, type = ro; } FEATURES { CONDES: type = constructor, label = __CONSTRUCTOR_TABLE__, count = __CONSTRUCTOR_COUNT__, segment = ONCE; CONDES: type = destructor, label = __DESTRUCTOR_TABLE__, count = __DESTRUCTOR_COUNT__, segment = RODATA; CONDES: type = interruptor, label = __INTERRUPTOR_TABLE__, count = __INTERRUPTOR_COUNT__, segment = RODATA, import = __CALLIRQ__; } ================================================ FILE: src/cross_lib/cfg/cc65/alt/vic20-8k_tight.cfg ================================================ # Memory configuration for the VIC-20 with 32K RAM Cartridge # Contributed by Stefan Haubenthal SYMBOLS { __LOADADDR__: type = import; __EXEHDR__: type = import; __STACKSIZE__: type = weak, value = $0014; } MEMORY { ZP: file = "", define = yes, start = $0002, size = $001A; SCREEN: start = $1000, size = $0200; LOADADDR: file = %O, start = $11FF, size = $0002; HEADER: file = %O, start = $1201, size = $000C; MAIN: file = %O, define = yes, start = $120D, fill = yes, size = $1C00 - $120D - __STACKSIZE__; DUMMY: file = %O, start = $1C00 - __STACKSIZE__ - 1, fill = yes, size = __STACKSIZE__; CHARMEM: file = %O, start = $1C00, size = $0200, type = rw, define = yes, fill = yes; RAM1: file = %O, start = $1E00, size = $2200, type = rw; } SEGMENTS { ZEROPAGE: load = ZP, type = zp; LOADADDR: load = LOADADDR, type = ro; EXEHDR: load = HEADER, type = ro; STARTUP: load = MAIN, type = ro; LOWCODE: load = MAIN, type = ro, optional = yes; ONCE: load = MAIN, type = ro, optional = yes; CODE: load = RAM1, type = ro; RODATA: load = MAIN, type = ro; DATA: load = MAIN, type = rw; INIT: load = RAM1, type = bss; BSS: load = MAIN, type = bss, define = yes; UDCCHAR: load = CHARMEM, type = ro, define = yes, optional = no; CODE2: load = MAIN, type = ro; } FEATURES { CONDES: type = constructor, label = __CONSTRUCTOR_TABLE__, count = __CONSTRUCTOR_COUNT__, segment = ONCE; CONDES: type = destructor, label = __DESTRUCTOR_TABLE__, count = __DESTRUCTOR_COUNT__, segment = RODATA; CONDES: type = interruptor, label = __INTERRUPTOR_TABLE__, count = __INTERRUPTOR_COUNT__, segment = RODATA, import = __CALLIRQ__; } ================================================ FILE: src/cross_lib/cfg/cc65/alt/vic20_unexpanded.cfg ================================================ SYMBOLS { __LOADADDR__: type = import; __EXEHDR__: type = import; __STACKSIZE__: type = weak, value = $0001; # 1k stack } MEMORY { ZP: file = "", define = yes, start = $0002, size = $001A; LOADADDR: file = %O, start = $0FFF, size = $0002; HEADER: file = %O, start = $1001, size = $000C; MAIN: file = %O, define = yes, start = $100D, size = $0DF3 - __STACKSIZE__; } SEGMENTS { ZEROPAGE: load = ZP, type = zp; LOADADDR: load = LOADADDR, type = ro; EXEHDR: load = HEADER, type = ro; STARTUP: load = MAIN, type = ro; LOWCODE: load = MAIN, type = ro, optional = yes; ONCE: load = MAIN, type = ro, optional = yes; CODE: load = MAIN, type = ro; RODATA: load = MAIN, type = ro; DATA: load = MAIN, type = rw; INIT: load = MAIN, type = bss; BSS: load = MAIN, type = bss, define = yes; } FEATURES { CONDES: type = constructor, label = __CONSTRUCTOR_TABLE__, count = __CONSTRUCTOR_COUNT__, segment = ONCE; CONDES: type = destructor, label = __DESTRUCTOR_TABLE__, count = __DESTRUCTOR_COUNT__, segment = RODATA; CONDES: type = interruptor, label = __INTERRUPTOR_TABLE__, count = __INTERRUPTOR_COUNT__, segment = RODATA, import = __CALLIRQ__; } ================================================ FILE: src/cross_lib/cfg/cc65/apple2-hgr.cfg ================================================ # Configuration for programs including a hires screen (with 6KB LOWCODE) FEATURES { STARTADDRESS: default = $0803; } SYMBOLS { __EXEHDR__: type = import; __FILETYPE__: type = weak, value = $0006; # ProDOS file type __STACKSIZE__: type = weak, value = $0200; # 0.5k stack __HIMEM__: type = weak, value = $9600; # Presumed RAM end __LCADDR__: type = weak, value = $D400; # Behind quit code __LCSIZE__: type = weak, value = $0C00; # Rest of bank two } MEMORY { ZP: file = "", define = yes, start = $0080, size = $001A; HEADER: file = %O, start = %S - $003A, size = $003A; MAIN: file = %O, define = yes, start = %S, size = __HIMEM__ - %S; BSS: file = "", start = __ONCE_RUN__, size = __HIMEM__ - __STACKSIZE__ - __ONCE_RUN__; LC: file = "", define = yes, start = __LCADDR__, size = __LCSIZE__; } SEGMENTS { ZEROPAGE: load = ZP, type = zp; EXEHDR: load = HEADER, type = ro, optional = yes; STARTUP: load = MAIN, type = ro; LOWCODE: load = MAIN, type = ro, optional = yes; HGR: load = MAIN, type = rw, start = $2000; CODE: load = MAIN, type = ro start = $4000; RODATA: load = MAIN, type = ro; DATA: load = MAIN, type = rw; INIT: load = MAIN, type = rw; ONCE: load = MAIN, type = ro, define = yes; LC: load = MAIN, run = LC, type = ro, optional = yes; BSS: load = BSS, type = bss, define = yes; } FEATURES { CONDES: type = constructor, label = __CONSTRUCTOR_TABLE__, count = __CONSTRUCTOR_COUNT__, segment = ONCE; CONDES: type = destructor, label = __DESTRUCTOR_TABLE__, count = __DESTRUCTOR_COUNT__, segment = RODATA; CONDES: type = interruptor, label = __INTERRUPTOR_TABLE__, count = __INTERRUPTOR_COUNT__, segment = RODATA, import = __CALLIRQ__; } ================================================ FILE: src/cross_lib/cfg/cc65/apple2enh-hgr.cfg ================================================ # Configuration for programs including a hires screen (with 6KB LOWCODE) FEATURES { STARTADDRESS: default = $0803; } SYMBOLS { __EXEHDR__: type = import; __FILETYPE__: type = weak, value = $0006; # ProDOS file type __STACKSIZE__: type = weak, value = $0200; # 0.5k stack __HIMEM__: type = weak, value = $9600; # Presumed RAM end __LCADDR__: type = weak, value = $D400; # Behind quit code __LCSIZE__: type = weak, value = $0C00; # Rest of bank two } MEMORY { ZP: file = "", define = yes, start = $0080, size = $001A; HEADER: file = %O, start = %S - $003A, size = $003A; MAIN: file = %O, define = yes, start = %S, size = __HIMEM__ - %S; BSS: file = "", start = __ONCE_RUN__, size = __HIMEM__ - __STACKSIZE__ - __ONCE_RUN__; LC: file = "", define = yes, start = __LCADDR__, size = __LCSIZE__; } SEGMENTS { ZEROPAGE: load = ZP, type = zp; EXEHDR: load = HEADER, type = ro, optional = yes; STARTUP: load = MAIN, type = ro; LOWCODE: load = MAIN, type = ro, optional = yes; HGR: load = MAIN, type = rw, start = $2000; CODE: load = MAIN, type = ro start = $4000; RODATA: load = MAIN, type = ro; DATA: load = MAIN, type = rw; INIT: load = MAIN, type = rw; ONCE: load = MAIN, type = ro, define = yes; LC: load = MAIN, run = LC, type = ro, optional = yes; BSS: load = BSS, type = bss, define = yes; } FEATURES { CONDES: type = constructor, label = __CONSTRUCTOR_TABLE__, count = __CONSTRUCTOR_COUNT__, segment = ONCE; CONDES: type = destructor, label = __DESTRUCTOR_TABLE__, count = __DESTRUCTOR_COUNT__, segment = RODATA; CONDES: type = interruptor, label = __INTERRUPTOR_TABLE__, count = __INTERRUPTOR_COUNT__, segment = RODATA, import = __CALLIRQ__; } ================================================ FILE: src/cross_lib/cfg/cc65/atari5200_redefined_chars.cfg ================================================ SYMBOLS { __CARTSIZE__: type = weak, value = $4000; # possible values: $4000 and $8000 __CART_ENTRY__: type = import; __STACKSIZE__: type = weak, value = $0400; # 4 pages stack __RESERVED_MEMORY__: type = export, value = $01E0; # space for 20x24 screen buffer (default display list is in ROM) } MEMORY { ZP: file = "", start = $001D, size = $00E3, define = yes; RAM: file = "", start = $021C, size = $4000 - $0200 - __STACKSIZE__ - __RESERVED_MEMORY__ - $021C, define = yes; FONT: file = "", start = $3800, size = $0400, define = yes; ROM: file = %O, start = $C000 - __CARTSIZE__, size = __CARTSIZE__ - $18, define = yes, fill = yes, fillval = $FF; CARTNAME: file = %O, start = $BFE8, size = $0014 fill = yes, fillval = $40; CARTYEAR: file = %O, start = $BFFC, size = $0002 fill = yes, fillval = $59; CARTENTRY: file = %O, start = $BFFE, size = $0002; } SEGMENTS { ZEROPAGE: load = ZP, type = zp, optional = yes; EXTZP: load = ZP, type = zp, optional = yes; DLIST: load = ROM , type = ro, define = yes, optional = yes; STARTUP: load = ROM, type = ro, define = yes, optional = yes; LOWCODE: load = ROM, type = ro, define = yes, optional = yes; ONCE: load = ROM, type = ro, optional = yes; CODE: load = ROM, type = ro, define = yes; RODATA: load = ROM, type = ro, optional = yes; DATA: load = ROM, run = RAM, type = rw, define = yes, optional = yes; BSS: load = RAM, type = bss, define = yes, optional = yes; CARTNAME: load = CARTNAME, type = ro; CARTYEAR: load = CARTYEAR, type = ro; CARTENTRY: load = CARTENTRY, type = ro; FONT: load = FONT, type = rw, optional = yes; } FEATURES { CONDES: type = constructor, label = __CONSTRUCTOR_TABLE__, count = __CONSTRUCTOR_COUNT__, segment = ONCE; CONDES: type = destructor, label = __DESTRUCTOR_TABLE__, count = __DESTRUCTOR_COUNT__, segment = RODATA; CONDES: type = interruptor, label = __INTERRUPTOR_TABLE__, count = __INTERRUPTOR_COUNT__, segment = RODATA, import = __CALLIRQ__; } ================================================ FILE: src/cross_lib/cfg/cc65/atari5200_redefined_chars_32k.cfg ================================================ SYMBOLS { __CARTSIZE__: type = weak, value = $8000; # possible values: $4000 and $8000 __CART_ENTRY__: type = import; __STACKSIZE__: type = weak, value = $0400; # 4 pages stack __RESERVED_MEMORY__: type = export, value = $01E0; # space for 20x24 screen buffer (default display list is in ROM) } MEMORY { ZP: file = "", start = $001D, size = $00E3, define = yes; RAM: file = "", start = $021C, size = $4000 - $0200 - __STACKSIZE__ - __RESERVED_MEMORY__ - $021C, define = yes; FONT: file = "", start = $3800, size = $0400, define = yes; ROM: file = %O, start = $C000 - __CARTSIZE__, size = __CARTSIZE__ - $18, define = yes, fill = yes, fillval = $FF; CARTNAME: file = %O, start = $BFE8, size = $0014 fill = yes, fillval = $40; CARTYEAR: file = %O, start = $BFFC, size = $0002 fill = yes, fillval = $59; CARTENTRY: file = %O, start = $BFFE, size = $0002; } SEGMENTS { ZEROPAGE: load = ZP, type = zp, optional = yes; EXTZP: load = ZP, type = zp, optional = yes; DLIST: load = ROM , type = ro, define = yes, optional = yes; STARTUP: load = ROM, type = ro, define = yes, optional = yes; LOWCODE: load = ROM, type = ro, define = yes, optional = yes; ONCE: load = ROM, type = ro, optional = yes; CODE: load = ROM, type = ro, define = yes; RODATA: load = ROM, type = ro, optional = yes; DATA: load = ROM, run = RAM, type = rw, define = yes, optional = yes; BSS: load = RAM, type = bss, define = yes, optional = yes; CARTNAME: load = CARTNAME, type = ro; CARTYEAR: load = CARTYEAR, type = ro; CARTENTRY: load = CARTENTRY, type = ro; FONT: load = FONT, type = rw, optional = yes; } FEATURES { CONDES: type = constructor, label = __CONSTRUCTOR_TABLE__, count = __CONSTRUCTOR_COUNT__, segment = ONCE; CONDES: type = destructor, label = __DESTRUCTOR_TABLE__, count = __DESTRUCTOR_COUNT__, segment = RODATA; CONDES: type = interruptor, label = __INTERRUPTOR_TABLE__, count = __INTERRUPTOR_COUNT__, segment = RODATA, import = __CALLIRQ__; } ================================================ FILE: src/cross_lib/cfg/cc65/atari7800_more_ram.cfg ================================================ # Atari VCS 7800 linker configuration file for cc65 # In order to add the a78 header to the build you can add # "--force-import __EXEHDR__" to the command line SYMBOLS { __STACKSIZE__: type = weak, value = $0600; # C stack __CARTSIZE__: type = weak, value = $8000; __VEC_BOTTOM__: value = $fffa, type = export; __VEC_SIZE__: value = $6, type = export; __ENCRYPT_BOTTOM__: value = $ff7a, type = export; __ENCRYPT_SIZE__: value = $80, type = export; __MEMORY_TOP__: value = __ENCRYPT_BOTTOM__, type = export; __INIT_SIZE__: value = 156, type = export; __MEMORY_INIT__: value = __MEMORY_TOP__ - __INIT_SIZE__, type = export; __MEMORY_BOTTOM__: value = $10000 - __CARTSIZE__, type = weak; __FREE_ROM_SIZE__: value = __MEMORY_INIT__ - __MEMORY_BOTTOM__, type = export; } MEMORY { ZP: file = "", define = yes, start = $0040, size = $00C0, type = rw; SP: file = "", define = yes, start = $0140, size = $00C0, type = rw; RAM1: file = "", define = yes, start = $1800, size = $0840, type = rw; RAM3: file = "", define = yes, start = $2100, size = $0040, type = rw; RAM2: file = "", define = yes, start = $2200, size = $0600, type = rw; # For emulators you also need a header file HEADER: file = %O, start = $0000, size = 128; # "Normal" cartridge rom. Multiple banks arent supported # by this script. You may change the rom size, but keep # two things in mind: # - start must be a multiple of $1000 # - ROM must end at $ff79 ROM: file = %O, define = yes, start = __MEMORY_BOTTOM__, size = __FREE_ROM_SIZE__, type = ro, fill = yes, fillval = $ff; ROMS: file = %O, define = yes, start = __MEMORY_INIT__, size = __INIT_SIZE__, type = ro, fill = yes, fillval = $ff; # Encryption stuff ROME: file = %O, start = __ENCRYPT_BOTTOM__, size = __ENCRYPT_SIZE__, type = ro, fill = yes, fillval = $ff; # Interrupt vectors ROMV: file = %O, start = __VEC_BOTTOM__, size = __VEC_SIZE__, type = ro, fill = yes, fillval = $ff; } SEGMENTS { ZEROPAGE: load = ZP, type = zp; EXTZP: load = ZP, type = zp; EXEHDR: load = HEADER, type = ro, optional = yes; STARTUP: load = ROMS, type = ro, define = yes; ONCE: load = ROMS, type = ro, define = yes; CODE: load = ROM, type = ro, define = yes; RODATA: load = ROM, type = ro, define = yes, align = 256; DATA: load = ROM, run = RAM2, type = rw, define = yes; BSS: load = RAM1, type = bss, define = yes; VECTORS: load = ROMV, type = ro, define = yes; ENCRYPTION: load = ROME, type = ro define = yes; } FEATURES { CONDES: type = constructor, label = __CONSTRUCTOR_TABLE__, count = __CONSTRUCTOR_COUNT__, segment = ONCE; CONDES: type = destructor, label = __DESTRUCTOR_TABLE__, count = __DESTRUCTOR_COUNT__, segment = RODATA; CONDES: type = interruptor, label = __INTERRUPTOR_TABLE__, count = __INTERRUPTOR_COUNT__, segment = RODATA, import = __CALLIRQ__; } ================================================ FILE: src/cross_lib/cfg/cc65/atari_mode12.cfg ================================================ FEATURES { STARTADDRESS: default = $2000; } SYMBOLS { __EXEHDR__: type = import; __SYSTEM_CHECK__: type = import; # force inclusion of "system check" load chunk __AUTOSTART__: type = import; # force inclusion of autostart "trailer" __STACKSIZE__: type = weak, value = $0800; # 2k stack __STARTADDRESS__: type = export, value = %S; # __RESERVED_MEMORY__: type = weak, value = $00A2; } MEMORY { ZP: file = "", define = yes, start = $0082, size = $007E; # file header, just $FFFF HEADER: file = %O, start = $0000, size = $0002; # "system check" load chunk SYSCHKHDR: file = %O, start = $0000, size = $0004; SYSCHKCHNK: file = %O, start = $2E00, size = $0300; SYSCHKTRL: file = %O, start = $0000, size = $0006; # "main program" load chunk MAINHDR: file = %O, start = $0000, size = $0004; MAIN: file = %O, define = yes, start = %S, size = $BC20 - __STACKSIZE__ - __RESERVED_MEMORY__ - %S; TRAILER: file = %O, start = $0000, size = $0006; } SEGMENTS { ZEROPAGE: load = ZP, type = zp; EXTZP: load = ZP, type = zp, optional = yes; EXEHDR: load = HEADER, type = ro; SYSCHKHDR: load = SYSCHKHDR, type = ro, optional = yes; SYSCHK: load = SYSCHKCHNK, type = rw, define = yes, optional = yes; SYSCHKTRL: load = SYSCHKTRL, type = ro, optional = yes; MAINHDR: load = MAINHDR, type = ro; STARTUP: load = MAIN, type = ro, define = yes; LOWCODE: load = MAIN, type = ro, define = yes, optional = yes; ONCE: load = MAIN, type = ro, optional = yes; CODE: load = MAIN, type = ro, define = yes; RODATA: load = MAIN, type = ro; DATA: load = MAIN, type = rw; INIT: load = MAIN, type = rw, optional = yes; BSS: load = MAIN, type = bss, define = yes; AUTOSTRT: load = TRAILER, type = ro; } FEATURES { CONDES: type = constructor, label = __CONSTRUCTOR_TABLE__, count = __CONSTRUCTOR_COUNT__, segment = ONCE; CONDES: type = destructor, label = __DESTRUCTOR_TABLE__, count = __DESTRUCTOR_COUNT__, segment = RODATA; CONDES: type = interruptor, label = __INTERRUPTOR_TABLE__, count = __INTERRUPTOR_COUNT__, segment = RODATA, import = __CALLIRQ__; } ================================================ FILE: src/cross_lib/cfg/cc65/atari_mode1_redefined_chars.cfg ================================================ FEATURES { STARTADDRESS: default = $2000; } SYMBOLS { __EXEHDR__: type = import; __SYSTEM_CHECK__: type = import; # force inclusion of "system check" load chunk __AUTOSTART__: type = import; # force inclusion of autostart "trailer" __STACKSIZE__: type = weak, value = $0800; # 2k stack __STARTADDRESS__: type = export, value = %S; __RESERVED_MEMORY__: type = weak, value = $0000; } MEMORY { ZP: file = "", define = yes, start = $0082, size = $007E; # file header, just $FFFF HEADER: file = %O, start = $0000, size = $0002; # "system check" load chunk SYSCHKHDR: file = %O, start = $0000, size = $0004; SYSCHKCHNK: file = %O, start = $2E00, size = $0300; SYSCHKTRL: file = %O, start = $0000, size = $0006; # "main program" load chunk MAINHDR: file = %O, start = $0000, size = $0004; MAIN: file = %O, define = yes, start = %S + $0200, size = $BC20 - __STACKSIZE__ - __RESERVED_MEMORY__ - %S - $0200; TRAILER: file = %O, start = $0000, size = $0006; # font area FONT: file = "", define = yes, start = %S, size = $0200; } SEGMENTS { ZEROPAGE: load = ZP, type = zp; EXTZP: load = ZP, type = zp, optional = yes; EXEHDR: load = HEADER, type = ro; SYSCHKHDR: load = SYSCHKHDR, type = ro, optional = yes; SYSCHK: load = SYSCHKCHNK, type = rw, define = yes, optional = yes; SYSCHKTRL: load = SYSCHKTRL, type = ro, optional = yes; MAINHDR: load = MAINHDR, type = ro; STARTUP: load = MAIN, type = ro, define = yes; LOWCODE: load = MAIN, type = ro, define = yes, optional = yes; ONCE: load = MAIN, type = ro, optional = yes; CODE: load = MAIN, type = ro, define = yes; RODATA: load = MAIN, type = ro; DATA: load = MAIN, type = rw; INIT: load = MAIN, type = rw, define = yes, optional = yes; BSS: load = MAIN, type = bss, define = yes; AUTOSTRT: load = TRAILER, type = ro; FONT: load = FONT, type = rw, optional = yes; } FEATURES { CONDES: type = constructor, label = __CONSTRUCTOR_TABLE__, count = __CONSTRUCTOR_COUNT__, segment = ONCE; CONDES: type = destructor, label = __DESTRUCTOR_TABLE__, count = __DESTRUCTOR_COUNT__, segment = RODATA; CONDES: type = interruptor, label = __INTERRUPTOR_TABLE__, count = __INTERRUPTOR_COUNT__, segment = RODATA, import = __CALLIRQ__; } ================================================ FILE: src/cross_lib/cfg/cc65/atarixl_mode12.cfg ================================================ FEATURES { STARTADDRESS: default = $2400; } SYMBOLS { __EXEHDR__: type = import; __SYSTEM_CHECK__: type = import; # force inclusion of "system check" load chunk __AUTOSTART__: type = import; # force inclusion of autostart "trailer" __STACKSIZE__: type = weak, value = $0800; # 2k stack __STARTADDRESS__: type = export, value = %S; } MEMORY { ZP: file = "", define = yes, start = $0082, size = $007E; # just $FFFF HEADER: file = %O, start = $0000, size = $0002; # "system check" load chunk SYSCHKHDR: file = %O, start = $0000, size = $0004; SYSCHKCHNK: file = %O, start = $2E00, size = $0300; SYSCHKTRL: file = %O, start = $0000, size = $0006; # "shadow RAM preparation" load chunk SRPREPHDR: file = %O, start = $0000, size = $0004; SRPREPCHNK: file = %O, define = yes, start = %S, size = $7C20 - %S - $07FF; # $07FF: space for temp. chargen buffer, 1K aligned SRPREPTRL: file = %O, start = $0000, size = $0006; # "main program" load chunk MAINHDR: file = %O, start = $0000, size = $0004; MAIN: file = %O, define = yes, start = %S + __LOWBSS_SIZE__, size = $D000 - __STACKSIZE__ - %S - __LOWBSS_SIZE__; # defines entry point into program TRAILER: file = %O, start = $0000, size = $0006; # memory beneath the ROM preceeding the character generator HIDDEN_RAM2: file = "", define = yes, start = $D800, size = $0800; # address of relocated character generator (same addess as ROM version) CHARGEN: file = "", define = yes, start = $E000, size = $0400; # memory beneath the ROM HIDDEN_RAM: file = "", define = yes, start = $E400, size = $FFFA - $E400; } SEGMENTS { ZEROPAGE: load = ZP, type = zp; EXTZP: load = ZP, type = zp, optional = yes; EXEHDR: load = HEADER, type = ro; SYSCHKHDR: load = SYSCHKHDR, type = ro, optional = yes; SYSCHK: load = SYSCHKCHNK, type = rw, define = yes, optional = yes; SYSCHKTRL: load = SYSCHKTRL, type = ro, optional = yes; SRPREPHDR: load = SRPREPHDR, type = ro; LOWBSS: load = SRPREPCHNK, type = bss, define = yes; # shared btw. SRPREPCHNK and RAM, not zero initialized SRPREP: load = SRPREPCHNK, type = rw, define = yes; SHADOW_RAM: load = SRPREPCHNK, run = HIDDEN_RAM, type = rw, define = yes, optional = yes; SHADOW_RAM2: load = SRPREPCHNK, run = HIDDEN_RAM2, type = rw, define = yes, optional = yes; SRPREPTRL: load = SRPREPTRL, type = ro; MAINHDR: load = MAINHDR, type = ro; STARTUP: load = MAIN, type = ro, define = yes; LOWCODE: load = MAIN, type = ro, define = yes, optional = yes; ONCE: load = MAIN, type = ro, optional = yes; CODE: load = MAIN, type = ro, define = yes; RODATA: load = MAIN, type = ro; DATA: load = MAIN, type = rw; INIT: load = MAIN, type = rw, optional = yes; BSS: load = MAIN, type = bss, define = yes; AUTOSTRT: load = TRAILER, type = ro; } FEATURES { CONDES: type = constructor, label = __CONSTRUCTOR_TABLE__, count = __CONSTRUCTOR_COUNT__, segment = ONCE; CONDES: type = destructor, label = __DESTRUCTOR_TABLE__, count = __DESTRUCTOR_COUNT__, segment = RODATA; CONDES: type = interruptor, label = __INTERRUPTOR_TABLE__, count = __INTERRUPTOR_COUNT__, segment = RODATA, import = __CALLIRQ__; } ================================================ FILE: src/cross_lib/cfg/cc65/atmos_better_tap.cfg ================================================ # Fichier de configuration gnrant un fichier TAP. # Le programme est assemble partir de l'adresse __BASHEAD__ $500 (1280) # La compilation donne un nom a la cassette __TAPNAME__ # Cette compilation n'integre pas la librairie __BASHDR__ demandee en standard SYMBOLS { __TAPEHDR__: type = import; __PROGFLAG__: type = weak, value = $80; # $00=BASIC, $80=machine code __AUTORUN__: type = weak, value = $C7; # $00=only load, $C7=run __STACKSIZE__: type = weak, value = $0020; # 2K stack __GRAB__: type = weak, value = 1; # 0=don't grab graphics RAM, 1=grab graphics RAM __RAMEND__: type = weak, value = $9800 + $1C00 * __GRAB__; # __TAPNAME__: value = "CC65"; # Definition du nom du fichier TAP } MEMORY { ZP: file = "", define = yes, start = $00E2, size = $001A; TAPEHDR: file = %O, type = ro, start = $0000, size = $001F; BASHEAD: file = %O, define = yes, start = $0500, size = $000D; MAIN: file = %O, define = yes, start = __BASHEAD_LAST__, size = __RAMEND__ - __MAIN_START__; BSS: file = "", start = __ONCE_RUN__, size = __RAMEND__ - __STACKSIZE__ - __ONCE_RUN__; } SEGMENTS { ZEROPAGE: load = ZP, type = zp; TAPEHDR: load = TAPEHDR, type = ro; STARTUP: load = MAIN, type = ro; LOWCODE: load = MAIN, type = ro, optional = yes; CODE: load = MAIN, type = ro; RODATA: load = MAIN, type = ro; DATA: load = MAIN, type = rw; INIT: load = MAIN, type = rw; ONCE: load = MAIN, type = ro, define = yes; BASTAIL: load = MAIN, type = ro, optional = yes; BSS: load = BSS, type = bss, define = yes; } FEATURES { CONDES: type = constructor, label = __CONSTRUCTOR_TABLE__, count = __CONSTRUCTOR_COUNT__, segment = ONCE; CONDES: type = destructor, label = __DESTRUCTOR_TABLE__, count = __DESTRUCTOR_COUNT__, segment = RODATA; CONDES: type = interruptor, label = __INTERRUPTOR_TABLE__, count = __INTERRUPTOR_COUNT__, segment = RODATA, import = __CALLIRQ__; } ================================================ FILE: src/cross_lib/cfg/cc65/c16-16k.cfg ================================================ SYMBOLS { __LOADADDR__: type = import; __EXEHDR__: type = import; __STACKSIZE__: type = weak, value = $0020; # 2k stack } MEMORY { ZP: file = "", define = yes, start = $0008, size = $001A; LOADADDR: file = %O, start = $0FFF, size = $0002; HEADER: file = %O, start = $1001, size = $000C; MAIN: file = %O, start = $100D, size = $2FF3 - __STACKSIZE__; } SEGMENTS { ZEROPAGE: load = ZP, type = zp; LOADADDR: load = LOADADDR, type = ro; EXEHDR: load = HEADER, type = ro; STARTUP: load = MAIN, type = ro; LOWCODE: load = MAIN, type = ro, optional = yes; ONCE: load = MAIN, type = ro, optional = yes; CODE: load = MAIN, type = ro; RODATA: load = MAIN, type = ro; DATA: load = MAIN, type = rw; INIT: load = MAIN, type = bss; BSS: load = MAIN, type = bss, define = yes; } FEATURES { CONDES: type = constructor, label = __CONSTRUCTOR_TABLE__, count = __CONSTRUCTOR_COUNT__, segment = ONCE; CONDES: type = destructor, label = __DESTRUCTOR_TABLE__, count = __DESTRUCTOR_COUNT__, segment = RODATA; CONDES: type = interruptor, label = __INTERRUPTOR_TABLE__, count = __INTERRUPTOR_COUNT__, segment = RODATA, import = __CALLIRQ__; } ================================================ FILE: src/cross_lib/cfg/cc65/c16-16k_GFX.cfg ================================================ SYMBOLS { __LOADADDR__: type = import; __EXEHDR__: type = import; __STACKSIZE__: type = weak, value = $0040; __UDC_START__: type = weak, value = $3DF8; __MAIN_START__: type = weak, value = __UDC_START__ - $100D; } MEMORY { ZP: file = "", define = yes, start = $0002, size = $001A; LOADADDR: file = %O, start = $0FFF, size = $0002; HEADER: file = %O, start = $1001, size = $000C; MAIN: file = %O, start = $100D, size = __MAIN_START__ - __STACKSIZE__, fill = yes; DUMMY: file = %O, start = __UDC_START__ - __STACKSIZE__ - 1, size = __STACKSIZE__, fill = yes; CHARMEM: file = %O, define = yes, start = __UDC_START__, size = $01F8, type = rw; } SEGMENTS { ZEROPAGE: load = ZP, type = zp; LOADADDR: load = LOADADDR, type = ro; EXEHDR: load = HEADER, type = ro; STARTUP: load = MAIN, type = ro; LOWCODE: load = MAIN, type = ro, optional = yes; ONCE: load = MAIN, type = ro, optional = yes; CODE: load = MAIN, type = ro; RODATA: load = MAIN, type = ro; DATA: load = MAIN, type = rw; INIT: load = MAIN, type = bss; BSS: load = MAIN, type = bss, define = yes; UDCCHAR: load = CHARMEM, type = ro, define = yes, optional = no; } FEATURES { CONDES: type = constructor, label = __CONSTRUCTOR_TABLE__, count = __CONSTRUCTOR_COUNT__, segment = ONCE; CONDES: type = destructor, label = __DESTRUCTOR_TABLE__, count = __DESTRUCTOR_COUNT__, segment = RODATA; CONDES: type = interruptor, label = __INTERRUPTOR_TABLE__, count = __INTERRUPTOR_COUNT__, segment = RODATA, import = __CALLIRQ__; } ================================================ FILE: src/cross_lib/cfg/cc65/c16-16k_GFX_64chars.cfg ================================================ SYMBOLS { __LOADADDR__: type = import; __EXEHDR__: type = import; __STACKSIZE__: type = weak, value = $0048; __UDC_START__: type = weak, value = $3DD0; __MAINSIZE__: type = weak, value = __UDC_START__ - $100D; } MEMORY { ZP: file = "", define = yes, start = $0002, size = $001A; LOADADDR: file = %O, start = $0FFF, size = $0002; HEADER: file = %O, start = $1001, size = $000C; MAIN: file = %O, start = $100D, size = __MAINSIZE__ - __STACKSIZE__, fill = yes; DUMMY: file = %O, start = __UDC_START__ - __STACKSIZE__ - 1, size = __STACKSIZE__, fill = yes; CHARMEM: file = %O, define = yes, start = __UDC_START__, size = $0200, type = rw; } SEGMENTS { ZEROPAGE: load = ZP, type = zp; LOADADDR: load = LOADADDR, type = ro; EXEHDR: load = HEADER, type = ro; STARTUP: load = MAIN, type = ro; LOWCODE: load = MAIN, type = ro, optional = yes; ONCE: load = MAIN, type = ro, optional = yes; CODE: load = MAIN, type = ro; RODATA: load = MAIN, type = ro; DATA: load = MAIN, type = rw; INIT: load = MAIN, type = bss; BSS: load = MAIN, type = bss, define = yes; UDCCHAR: load = CHARMEM, type = ro, define = yes, optional = no; } FEATURES { CONDES: type = constructor, label = __CONSTRUCTOR_TABLE__, count = __CONSTRUCTOR_COUNT__, segment = ONCE; CONDES: type = destructor, label = __DESTRUCTOR_TABLE__, count = __DESTRUCTOR_COUNT__, segment = RODATA; CONDES: type = interruptor, label = __INTERRUPTOR_TABLE__, count = __INTERRUPTOR_COUNT__, segment = RODATA, import = __CALLIRQ__; } ================================================ FILE: src/cross_lib/cfg/cc65/c16-16k_GFX_64chars_stack_0x30.cfg ================================================ SYMBOLS { __LOADADDR__: type = import; __EXEHDR__: type = import; __STACKSIZE__: type = weak, value = $0030; __UDC_START__: type = weak, value = $3DD0; __MAINSIZE__: type = weak, value = __UDC_START__ - $100D; } MEMORY { ZP: file = "", define = yes, start = $0002, size = $001A; LOADADDR: file = %O, start = $0FFF, size = $0002; TAPEBUF: file = "", define = yes, start = $0333, size = $0100; HEADER: file = %O, start = $1001, size = $000C; MAIN: file = %O, start = $100D, size = __MAINSIZE__, fill = yes; CHARMEM: file = %O, define = yes, start = __UDC_START__, size = $0200, type = rw; } SEGMENTS { ZEROPAGE: load = ZP, type = zp; LOADADDR: load = LOADADDR, type = ro; EXEHDR: load = HEADER, type = ro; STARTUP: load = MAIN, type = ro; LOWCODE: load = MAIN, type = ro, optional = yes; ONCE: load = MAIN, type = ro, optional = yes; CODE: load = MAIN, type = ro; RODATA: load = MAIN, type = ro; DATA: load = MAIN, type = rw; INIT: load = TAPEBUF, type = bss; BSS: load = MAIN, type = bss, define = yes; UDCCHAR: load = CHARMEM, type = ro, define = yes, optional = no; } FEATURES { CONDES: type = constructor, label = __CONSTRUCTOR_TABLE__, count = __CONSTRUCTOR_COUNT__, segment = ONCE; CONDES: type = destructor, label = __DESTRUCTOR_TABLE__, count = __DESTRUCTOR_COUNT__, segment = RODATA; CONDES: type = interruptor, label = __INTERRUPTOR_TABLE__, count = __INTERRUPTOR_COUNT__, segment = RODATA, import = __CALLIRQ__; } ================================================ FILE: src/cross_lib/cfg/cc65/c16-16k_GFX_64chars_stack_0x30_less_hd_stack.cfg ================================================ SYMBOLS { __LOADADDR__: type = import; __EXEHDR__: type = import; __STACKSIZE__: type = weak, value = $0030; __UDC_START__: type = weak, value = $3DD0; __MAINSIZE__: type = weak, value = __UDC_START__ - $100D; } MEMORY { ZP: file = "", define = yes, start = $0002, size = $001A; LOWHDSTACK: file = "", define = yes, start = $0100, size = $00B0; TAPEBUF: file = "", define = yes, start = $0333, size = $0100; LOADADDR: file = %O, start = $0FFF, size = $0002; HEADER: file = %O, start = $1001, size = $000C; MAIN: file = %O, start = $100D, size = __MAINSIZE__, fill = yes; CHARMEM: file = %O, define = yes, start = __UDC_START__, size = $0200, type = rw; } SEGMENTS { ZEROPAGE: load = ZP, type = zp; LOADADDR: load = LOADADDR, type = ro; EXEHDR: load = HEADER, type = ro; STARTUP: load = MAIN, type = ro; LOWCODE: load = MAIN, type = ro, optional = yes; ONCE: load = MAIN, type = ro, optional = yes; CODE: load = MAIN, type = ro; RODATA: load = MAIN, type = ro; DATA: load = MAIN, type = rw; INIT: load = TAPEBUF, type = bss; BSS: load = LOWHDSTACK, type = bss, define = yes; UDCCHAR: load = CHARMEM, type = ro, define = yes, optional = no; } FEATURES { CONDES: type = constructor, label = __CONSTRUCTOR_TABLE__, count = __CONSTRUCTOR_COUNT__, segment = ONCE; CONDES: type = destructor, label = __DESTRUCTOR_TABLE__, count = __DESTRUCTOR_COUNT__, segment = RODATA; CONDES: type = interruptor, label = __INTERRUPTOR_TABLE__, count = __INTERRUPTOR_COUNT__, segment = RODATA, import = __CALLIRQ__; } ================================================ FILE: src/cross_lib/cfg/cc65/c16-32k.cfg ================================================ SYMBOLS { __LOADADDR__: type = import; __EXEHDR__: type = import; __STACKSIZE__: type = weak, value = $0028; } MEMORY { ZP: file = "", define = yes, start = $0002, size = $001A; LOADADDR: file = %O, start = $0FFF, size = $0002; HEADER: file = %O, start = $1001, size = $000C; MAIN: file = %O, start = $100D, size = $4FF3 - __STACKSIZE__; } SEGMENTS { ZEROPAGE: load = ZP, type = zp; LOADADDR: load = LOADADDR, type = ro; EXEHDR: load = HEADER, type = ro; STARTUP: load = MAIN, type = ro; LOWCODE: load = MAIN, type = ro, optional = yes; ONCE: load = MAIN, type = ro, optional = yes; CODE: load = MAIN, type = ro; RODATA: load = MAIN, type = ro; DATA: load = MAIN, type = rw; INIT: load = MAIN, type = bss; BSS: load = MAIN, type = bss, define = yes; } FEATURES { CONDES: type = constructor, label = __CONSTRUCTOR_TABLE__, count = __CONSTRUCTOR_COUNT__, segment = ONCE; CONDES: type = destructor, label = __DESTRUCTOR_TABLE__, count = __DESTRUCTOR_COUNT__, segment = RODATA; CONDES: type = interruptor, label = __INTERRUPTOR_TABLE__, count = __INTERRUPTOR_COUNT__, segment = RODATA, import = __CALLIRQ__; } ================================================ FILE: src/cross_lib/cfg/cc65/c16-32k_GFX.cfg ================================================ SYMBOLS { __LOADADDR__: type = import; __EXEHDR__: type = import; __STACKSIZE__: type = weak, value = $0040; __UDC_START__: type = weak, value = $5E08; __MAIN_START__: type = weak, value = __UDC_START__ - $100D; } MEMORY { ZP: file = "", define = yes, start = $0002, size = $001A; LOADADDR: file = %O, start = $0FFF, size = $0002; HEADER: file = %O, start = $1001, size = $000C; MAIN: file = %O, start = $100D, size = __MAIN_START__ - __STACKSIZE__, fill = yes; DUMMY: file = %O, start = __UDC_START__ - __STACKSIZE__ - 1, size = __STACKSIZE__, fill = yes; CHARMEM: file = %O, define = yes, start = __UDC_START__, size = $01F8, type = rw; } SEGMENTS { ZEROPAGE: load = ZP, type = zp; LOADADDR: load = LOADADDR, type = ro; EXEHDR: load = HEADER, type = ro; STARTUP: load = MAIN, type = ro; LOWCODE: load = MAIN, type = ro, optional = yes; ONCE: load = MAIN, type = ro, optional = yes; CODE: load = MAIN, type = ro; RODATA: load = MAIN, type = ro; DATA: load = MAIN, type = rw; INIT: load = MAIN, type = bss; BSS: load = MAIN, type = bss, define = yes; UDCCHAR: load = CHARMEM, type = ro, define = yes, optional = no; } FEATURES { CONDES: type = constructor, label = __CONSTRUCTOR_TABLE__, count = __CONSTRUCTOR_COUNT__, segment = ONCE; CONDES: type = destructor, label = __DESTRUCTOR_TABLE__, count = __DESTRUCTOR_COUNT__, segment = RODATA; CONDES: type = interruptor, label = __INTERRUPTOR_TABLE__, count = __INTERRUPTOR_COUNT__, segment = RODATA, import = __CALLIRQ__; } ================================================ FILE: src/cross_lib/cfg/cc65/c16-32k_GFX_64chars.cfg ================================================ SYMBOLS { __LOADADDR__: type = import; __EXEHDR__: type = import; __STACKSIZE__: type = weak, value = $0100; __UDC_START__: type = weak, value = $5DE0; __MAINSIZE__: type = weak, value = __UDC_START__ - $100D; } MEMORY { ZP: file = "", define = yes, start = $0002, size = $001A; LOADADDR: file = %O, start = $0FFF, size = $0002; HEADER: file = %O, start = $1001, size = $000C; MAIN: file = %O, start = $100D, size = __MAINSIZE__, fill = yes; CHARMEM: file = %O, define = yes, start = __UDC_START__, size = $0200, type = rw; } SEGMENTS { ZEROPAGE: load = ZP, type = zp; LOADADDR: load = LOADADDR, type = ro; EXEHDR: load = HEADER, type = ro; STARTUP: load = MAIN, type = ro; LOWCODE: load = MAIN, type = ro, optional = yes; ONCE: load = MAIN, type = ro, optional = yes; CODE: load = MAIN, type = ro; RODATA: load = MAIN, type = ro; DATA: load = MAIN, type = rw; INIT: load = MAIN, type = bss; BSS: load = MAIN, type = bss, define = yes; UDCCHAR: load = CHARMEM, type = ro, define = yes, optional = no; } FEATURES { CONDES: type = constructor, label = __CONSTRUCTOR_TABLE__, count = __CONSTRUCTOR_COUNT__, segment = ONCE; CONDES: type = destructor, label = __DESTRUCTOR_TABLE__, count = __DESTRUCTOR_COUNT__, segment = RODATA; CONDES: type = interruptor, label = __INTERRUPTOR_TABLE__, count = __INTERRUPTOR_COUNT__, segment = RODATA, import = __CALLIRQ__; } ================================================ FILE: src/cross_lib/cfg/cc65/c64_GFXat0xC000.cfg ================================================ FEATURES { STARTADDRESS: default = $0801; } SYMBOLS { __LOADADDR__: type = import; __EXEHDR__: type = import; __STACKSIZE__: type = weak, value = $0800; # 2k stack __HIMEM__: type = weak, value = $D000; __GFXSTART__: type = weak, value = $C800; __GFXSIZE__: type = weak, value = $02F0; } MEMORY { ZP: file = "", define = yes, start = $0002, size = $001A; LOADADDR: file = %O, start = $7FF, size = $0002; HEADER: file = %O, define = yes, start = $801, size = $000D; MAIN: file = %O, define = yes, start = __HEADER_LAST__, fill = yes, size = __GFXSTART__ - __HEADER_SIZE__ - __STACKSIZE__; GFX: start = __GFXSTART__, size = __GFXSIZE__, type = rw, file = %O, fill = yes, define = yes; BSS: file = "", start = __ONCE_RUN__, size = __HIMEM__ - __STACKSIZE__ - __ONCE_RUN__; } SEGMENTS { ZEROPAGE: load = ZP, type = zp; LOADADDR: load = LOADADDR, type = ro; EXEHDR: load = HEADER, type = ro; STARTUP: load = MAIN, type = ro; LOWCODE: load = MAIN, type = ro, optional = yes; CODE: load = MAIN, type = ro; RODATA: load = MAIN, type = ro; DATA: load = MAIN, type = rw; INIT: load = MAIN, type = rw; ONCE: load = MAIN, type = ro, define = yes; GFX: load = GFX, type = rw; BSS: load = BSS, type = bss, define = yes; } FEATURES { CONDES: type = constructor, label = __CONSTRUCTOR_TABLE__, count = __CONSTRUCTOR_COUNT__, segment = ONCE; CONDES: type = destructor, label = __DESTRUCTOR_TABLE__, count = __DESTRUCTOR_COUNT__, segment = RODATA; CONDES: type = interruptor, label = __INTERRUPTOR_TABLE__, count = __INTERRUPTOR_COUNT__, segment = RODATA, import = __CALLIRQ__; } ================================================ FILE: src/cross_lib/cfg/cc65/creativision-16k.cfg ================================================ SYMBOLS { __STACKSIZE__: type = weak, value = $0060; } MEMORY { ZP: file = "", define = yes, start = $0020, size = $00E0; RAM: file = "", define = yes, start = $01FA, size = $0206 - __STACKSIZE__; ROM: file = %O, define = yes, start = $8000, size = $4000, fill = yes, fillval = $FF; } SEGMENTS { ZEROPAGE: load = ZP, type = zp; ZP: load = ZP, type = zp, optional = yes; VECTORS: load = ROM, run = RAM, type = rw, define = yes; DATA: load = ROM, run = RAM, type = rw, define = yes, start = $0204; BSS: load = RAM, type = bss, define = yes; ONCE: load = ROM, type = ro, optional = yes; CODE: load = ROM, type = ro; INIT: load = ROM, type = ro; RODATA: load = ROM, type = ro; AUDIO: load = ROM, type = ro, optional = yes, start = $BF00; SETUP: load = ROM, type = ro, start = $BFE8; } FEATURES { CONDES: type = constructor, label = __CONSTRUCTOR_TABLE__, count = __CONSTRUCTOR_COUNT__, segment = INIT; CONDES: type = destructor, label = __DESTRUCTOR_TABLE__, count = __DESTRUCTOR_COUNT__, segment = RODATA; CONDES: type = interruptor, label = __INTERRUPTOR_TABLE__, count = __INTERRUPTOR_COUNT__, segment = RODATA, import = __CALLIRQ__; } ================================================ FILE: src/cross_lib/cfg/cc65/creativision-16k_2.cfg ================================================ SYMBOLS { __STACKSIZE__: type = weak, value = $0020; } MEMORY { ZP: file = "", define = yes, start = $0020, size = $00E0; RAM0: file = "", define = yes, start = $0100, size = $A0; RAM: file = "", define = yes, start = $01FA, size = $0206 - __STACKSIZE__; ROM: file = %O, define = yes, start = $8000, size = $4000, fill = yes, fillval = $FF; } SEGMENTS { ZEROPAGE: load = ZP, type = zp; ZP: load = ZP, type = zp, optional = yes; VECTORS: load = ROM, run = RAM, type = rw, define = yes; DATA: load = ROM, run = RAM, type = rw, define = yes, start = $0204; BSS: load = RAM, type = bss, define = yes; ONCE: load = ROM, type = ro, optional = yes; CODE: load = ROM, type = ro; INIT: load = ROM, type = ro; RODATA: load = ROM, type = ro; AUDIO: load = ROM, type = ro, optional = yes, start = $BF00; SETUP: load = ROM, type = ro, start = $BFE8; } FEATURES { CONDES: type = constructor, label = __CONSTRUCTOR_TABLE__, count = __CONSTRUCTOR_COUNT__, segment = INIT; CONDES: type = destructor, label = __DESTRUCTOR_TABLE__, count = __DESTRUCTOR_COUNT__, segment = RODATA; CONDES: type = interruptor, label = __INTERRUPTOR_TABLE__, count = __INTERRUPTOR_COUNT__, segment = RODATA, import = __CALLIRQ__; } ================================================ FILE: src/cross_lib/cfg/cc65/creativision-16k_less_stack.cfg ================================================ SYMBOLS { __STACKSIZE__: type = weak, value = $001E; } MEMORY { ZP: file = "", define = yes, start = $0020, size = $00E0; RAM: file = "", define = yes, start = $01FA, size = $0206 - __STACKSIZE__; ROM: file = %O, define = yes, start = $8000, size = $4000, fill = yes, fillval = $FF; } SEGMENTS { ZEROPAGE: load = ZP, type = zp; ZP: load = ZP, type = zp, optional = yes; VECTORS: load = ROM, run = RAM, type = rw, define = yes; DATA: load = ROM, run = RAM, type = rw, define = yes, start = $0204; BSS: load = RAM, type = bss, define = yes; ONCE: load = ROM, type = ro, optional = yes; CODE: load = ROM, type = ro; INIT: load = ROM, type = ro; RODATA: load = ROM, type = ro; AUDIO: load = ROM, type = ro, optional = yes, start = $BF00; SETUP: load = ROM, type = ro, start = $BFE8; } FEATURES { CONDES: type = constructor, label = __CONSTRUCTOR_TABLE__, count = __CONSTRUCTOR_COUNT__, segment = INIT; CONDES: type = destructor, label = __DESTRUCTOR_TABLE__, count = __DESTRUCTOR_COUNT__, segment = RODATA; CONDES: type = interruptor, label = __INTERRUPTOR_TABLE__, count = __INTERRUPTOR_COUNT__, segment = RODATA, import = __CALLIRQ__; } ================================================ FILE: src/cross_lib/cfg/cc65/creativision-18k.cfg ================================================ SYMBOLS { __STACKSIZE__: type = weak, value = $0036; } MEMORY { ZP: file = "", define = yes, start = $0020, size = $00E0; RAM: file = "", define = yes, start = $01FA, size = $0206 - __STACKSIZE__; ROM: file = %O, define = yes, start = $7800, size = $4800, fill = yes, fillval = $FF; } SEGMENTS { ZEROPAGE: load = ZP, type = zp; ZP: load = ZP, type = zp, optional = yes; VECTORS: load = ROM, run = RAM, type = rw, define = yes; DATA: load = ROM, run = RAM, type = rw, define = yes, start = $0204; BSS: load = RAM, type = bss, define = yes; ONCE: load = ROM, type = ro, optional = yes; CODE: load = ROM, type = ro; INIT: load = ROM, type = ro; RODATA: load = ROM, type = ro; AUDIO: load = ROM, type = ro, optional = yes, start = $BF00; SETUP: load = ROM, type = ro, start = $BFE8; } FEATURES { CONDES: type = constructor, label = __CONSTRUCTOR_TABLE__, count = __CONSTRUCTOR_COUNT__, segment = INIT; CONDES: type = destructor, label = __DESTRUCTOR_TABLE__, count = __DESTRUCTOR_COUNT__, segment = RODATA; CONDES: type = interruptor, label = __INTERRUPTOR_TABLE__, count = __INTERRUPTOR_COUNT__, segment = RODATA, import = __CALLIRQ__; } ================================================ FILE: src/cross_lib/cfg/cc65/creativision-24k.cfg ================================================ SYMBOLS { __STACKSIZE__: type = weak, value = $0020; } MEMORY { ZP: file = "", define = yes, start = $0020, size = $0020; RAM: file = "", define = yes, start = $01FA, size = $0206 - __STACKSIZE__; ROM: file = %O, define = yes, start = $6000, size = $6000, fill = yes, fillval = $FF; } SEGMENTS { ZEROPAGE: load = ZP, type = zp; ZP: load = ZP, type = zp, optional = yes; VECTORS: load = ROM, run = RAM, type = rw, define = yes; DATA: load = ROM, run = RAM, type = rw, define = yes, start = $0204; BSS: load = RAM, type = bss, define = yes; ONCE: load = ROM, type = ro, optional = yes; CODE: load = ROM, type = ro; INIT: load = ROM, type = ro; RODATA: load = ROM, type = ro; AUDIO: load = ROM, type = ro, optional = yes, start = $BF00; SETUP: load = ROM, type = ro, start = $BFE8; } FEATURES { CONDES: type = constructor, label = __CONSTRUCTOR_TABLE__, count = __CONSTRUCTOR_COUNT__, segment = INIT; CONDES: type = destructor, label = __DESTRUCTOR_TABLE__, count = __DESTRUCTOR_COUNT__, segment = RODATA; CONDES: type = interruptor, label = __INTERRUPTOR_TABLE__, count = __INTERRUPTOR_COUNT__, segment = RODATA, import = __CALLIRQ__; } ================================================ FILE: src/cross_lib/cfg/cc65/creativision-32k.cfg ================================================ SYMBOLS { __STACKSIZE__: type = weak, value = $0036; } MEMORY { ZP: file = "", define = yes, start = $0020, size = $0020; RAM: file = "", define = yes, start = $01FA, size = $0206 - __STACKSIZE__; ROM: file = %O, define = yes, start = $4000, size = $8000, fill = yes, fillval = $FF; } SEGMENTS { ZEROPAGE: load = ZP, type = zp; ZP: load = ZP, type = zp, optional = yes; VECTORS: load = ROM, run = RAM, type = rw, define = yes; DATA: load = ROM, run = RAM, type = rw, define = yes, start = $0204; BSS: load = RAM, type = bss, define = yes; ONCE: load = ROM, type = ro, optional = yes; CODE: load = ROM, type = ro; INIT: load = ROM, type = ro; RODATA: load = ROM, type = ro; AUDIO: load = ROM, type = ro, optional = yes, start = $BF00; SETUP: load = ROM, type = ro, start = $BFE8; } FEATURES { CONDES: type = constructor, label = __CONSTRUCTOR_TABLE__, count = __CONSTRUCTOR_COUNT__, segment = INIT; CONDES: type = destructor, label = __DESTRUCTOR_TABLE__, count = __DESTRUCTOR_COUNT__, segment = RODATA; CONDES: type = interruptor, label = __INTERRUPTOR_TABLE__, count = __INTERRUPTOR_COUNT__, segment = RODATA, import = __CALLIRQ__; } ================================================ FILE: src/cross_lib/cfg/cc65/creativision-32k_alt.cfg ================================================ SYMBOLS { __STACKSIZE__: type = weak, value = $0020; } MEMORY { ZP: file = "", define = yes, start = $0020, size = $0020; EXTRA: file = "", define = yes, start = $0100, size = $0080; RAM: file = "", define = yes, start = $01FA, size = $0206 - __STACKSIZE__; ROM: file = %O, define = yes, start = $4000, size = $8000, fill = yes, fillval = $FF; } SEGMENTS { ZEROPAGE: load = ZP, type = zp; ZP: load = ZP, type = zp, optional = yes; VECTORS: load = ROM, run = RAM, type = rw, define = yes; DATA: load = ROM, run = EXTRA, type = rw, define = yes, start = $0204; BSS: load = RAM, type = bss, define = yes; ONCE: load = ROM, type = ro, optional = yes; CODE: load = ROM, type = ro; INIT: load = ROM, type = ro; RODATA: load = ROM, type = ro; AUDIO: load = ROM, type = ro, optional = yes, start = $BF00; SETUP: load = ROM, type = ro, start = $BFE8; } FEATURES { CONDES: type = constructor, label = __CONSTRUCTOR_TABLE__, count = __CONSTRUCTOR_COUNT__, segment = INIT; CONDES: type = destructor, label = __DESTRUCTOR_TABLE__, count = __DESTRUCTOR_COUNT__, segment = RODATA; CONDES: type = interruptor, label = __INTERRUPTOR_TABLE__, count = __INTERRUPTOR_COUNT__, segment = RODATA, import = __CALLIRQ__; } ================================================ FILE: src/cross_lib/cfg/cc65/creativision-8k.cfg ================================================ SYMBOLS { __STACKSIZE__: type = weak, value = $0100; } MEMORY { ZP: file = "", define = yes, start = $0020, size = $00E0; RAM: file = "", define = yes, start = $01FA, size = $0206 - __STACKSIZE__; ROM: file = %O, define = yes, start = $A000, size = $2000, fill = yes, fillval = $FF; } SEGMENTS { ZEROPAGE: load = ZP, type = zp; ZP: load = ZP, type = zp, optional = yes; VECTORS: load = ROM, run = RAM, type = rw, define = yes; DATA: load = ROM, run = RAM, type = rw, define = yes, start = $0204; BSS: load = RAM, type = bss, define = yes; ONCE: load = ROM, type = ro, optional = yes; CODE: load = ROM, type = ro; INIT: load = ROM, type = ro; RODATA: load = ROM, type = ro; AUDIO: load = ROM, type = ro, optional = yes, start = $BF00; SETUP: load = ROM, type = ro, start = $BFE8; } FEATURES { CONDES: type = constructor, label = __CONSTRUCTOR_TABLE__, count = __CONSTRUCTOR_COUNT__, segment = INIT; CONDES: type = destructor, label = __DESTRUCTOR_TABLE__, count = __DESTRUCTOR_COUNT__, segment = RODATA; CONDES: type = interruptor, label = __INTERRUPTOR_TABLE__, count = __INTERRUPTOR_COUNT__, segment = RODATA, import = __CALLIRQ__; } ================================================ FILE: src/cross_lib/cfg/cc65/creativision-8k_less_stack.cfg ================================================ SYMBOLS { __STACKSIZE__: type = weak, value = $0018; } MEMORY { ZP: file = "", define = yes, start = $0020, size = $00E0; RAM: file = "", define = yes, start = $01FA, size = $0206 - __STACKSIZE__; ROM: file = %O, define = yes, start = $A000, size = $2000, fill = yes, fillval = $FF; } SEGMENTS { ZEROPAGE: load = ZP, type = zp; ZP: load = ZP, type = zp, optional = yes; VECTORS: load = ROM, run = RAM, type = rw, define = yes; DATA: load = ROM, run = RAM, type = rw, define = yes, start = $0204; BSS: load = RAM, type = bss, define = yes; ONCE: load = ROM, type = ro, optional = yes; CODE: load = ROM, type = ro; INIT: load = ROM, type = ro; RODATA: load = ROM, type = ro; AUDIO: load = ROM, type = ro, optional = yes, start = $BF00; SETUP: load = ROM, type = ro, start = $BFE8; } FEATURES { CONDES: type = constructor, label = __CONSTRUCTOR_TABLE__, count = __CONSTRUCTOR_COUNT__, segment = INIT; CONDES: type = destructor, label = __DESTRUCTOR_TABLE__, count = __DESTRUCTOR_COUNT__, segment = RODATA; CONDES: type = interruptor, label = __INTERRUPTOR_TABLE__, count = __INTERRUPTOR_COUNT__, segment = RODATA, import = __CALLIRQ__; } ================================================ FILE: src/cross_lib/cfg/cc65/gamate_reduced_stack.cfg ================================================ # linker config to produce simple Gamate cartridge (.bin) SYMBOLS { __STARTUP__: type = import; __STACKSIZE__: type = weak, value = $0020; # 1 page stack } MEMORY { # 0000-03ff is RAM # FIXME: what zp range can we actually use? # $0a-$11 is used by IRQ/NMI, $e8 is used by NMI ZP: start = $0012, size = $00E8 - $0012; CPUSTACK: start = $0100, size = $0100; RAM: start = $0200, size = $0200 - __STACKSIZE__, define = yes; CARTHEADER: file = %O, define = yes, start = %S, size = $0029; # 6000-e000 can be (Cartridge) ROM # WARNING: fill value must be $00 else it will no more work #ROM: start = $6000, size = $1000, fill = yes, fillval = $00, file = %O, define = yes; #ROMFILL: start = $7000, size = $7000, fill = yes, fillval = $00, file = %O, define = yes; # for images that have code >$6fff we must calculate the checksum! ROM: start = $6000 + $0029, size = $8000 - $0029, fill = yes, fillval = $00, file = %O, define = yes; } SEGMENTS { ZEROPAGE: load = ZP, type = zp, define = yes; EXTZP: load = ZP, type = zp, define = yes, optional = yes; APPZP: load = ZP, type = zp, define = yes, optional = yes; STARTUP: load = CARTHEADER, type = ro, define = yes; ONCE: load = ROM, type = ro, optional = yes; CODE: load = ROM, type = ro, define = yes; RODATA: load = ROM, type = ro, define = yes; DATA: load = ROM, run = RAM, type = rw, define = yes; BSS: load = RAM, type = bss, define = yes; } FEATURES { CONDES: type = constructor, label = __CONSTRUCTOR_TABLE__, count = __CONSTRUCTOR_COUNT__, segment = ONCE; CONDES: type = destructor, label = __DESTRUCTOR_TABLE__, count = __DESTRUCTOR_COUNT__, segment = RODATA; CONDES: type = interruptor, label = __INTERRUPTOR_TABLE__, count = __INTERRUPTOR_COUNT__, segment = RODATA, import = __CALLIRQ__; } ================================================ FILE: src/cross_lib/cfg/cc65/gamate_reduced_stack_2.cfg ================================================ # linker config to produce simple Gamate cartridge (.bin) SYMBOLS { __STARTUP__: type = import; __STACKSIZE__: type = weak, value = $0020; # 1 page stack } MEMORY { # 0000-03ff is RAM # FIXME: what zp range can we actually use? # $0a-$11 is used by IRQ/NMI, $e8 is used by NMI ZP: start = $0012, size = $00E8 - $0012; LOWCPUSTACK: start = $0100, size = $0080; CPUSTACK: start = $0180, size = $0080; RAM: start = $0200, size = $0200 - __STACKSIZE__, define = yes; CARTHEADER: file = %O, define = yes, start = %S, size = $0029; # 6000-e000 can be (Cartridge) ROM # WARNING: fill value must be $00 else it will no more work #ROM: start = $6000, size = $1000, fill = yes, fillval = $00, file = %O, define = yes; #ROMFILL: start = $7000, size = $7000, fill = yes, fillval = $00, file = %O, define = yes; # for images that have code >$6fff we must calculate the checksum! ROM: start = $6000 + $0029, size = $8000 - $0029, fill = yes, fillval = $00, file = %O, define = yes; } SEGMENTS { ZEROPAGE: load = ZP, type = zp, define = yes; EXTZP: load = ZP, type = zp, define = yes, optional = yes; APPZP: load = ZP, type = zp, define = yes, optional = yes; STARTUP: load = CARTHEADER, type = ro, define = yes; ONCE: load = ROM, type = ro, optional = yes; CODE: load = ROM, type = ro, define = yes; RODATA: load = ROM, type = ro, define = yes; DATA: load = ROM, run = LOWCPUSTACK, type = rw, define = yes; BSS: load = RAM, type = bss, define = yes; } FEATURES { CONDES: type = constructor, label = __CONSTRUCTOR_TABLE__, count = __CONSTRUCTOR_COUNT__, segment = ONCE; CONDES: type = destructor, label = __DESTRUCTOR_TABLE__, count = __DESTRUCTOR_COUNT__, segment = RODATA; CONDES: type = interruptor, label = __INTERRUPTOR_TABLE__, count = __INTERRUPTOR_COUNT__, segment = RODATA, import = __CALLIRQ__; } ================================================ FILE: src/cross_lib/cfg/cc65/nes_fx.cfg ================================================ SYMBOLS { __STACKSIZE__: type = weak, value = $0300; # 3 pages stack } MEMORY { ZP: file = "", start = $0002, size = $001A, type = rw, define = yes; # INES Cartridge Header HEADER: file = %O, start = $0000, size = $0010, fill = yes; # 2 16K ROM Banks # - startup # - code # - rodata # - data (load) ROM0: file = %O, start = $8000, size = $7FFA, fill = yes, define = yes; # Hardware Vectors at End of 2nd 8K ROM ROMV: file = %O, start = $FFFA, size = $0006, fill = yes; # 1 8k CHR Bank ROM2: file = %O, start = $0000, size = $2000, fill = yes; # standard 2k SRAM (-zeropage) # $0100-$0200 cpu stack # $0200-$0500 3 pages for ppu memory write buffer # $0500-$0800 3 pages for cc65 parameter stack SRAM: file = "", start = $0500, size = __STACKSIZE__, define = yes; # additional 8K SRAM Bank # - data (run) # - bss # - heap RAM: file = "", start = $6000, size = $2000, define = yes; } SEGMENTS { ZEROPAGE: load = ZP, type = zp; HEADER: load = HEADER, type = ro; STARTUP: load = ROM0, type = ro, define = yes; LOWCODE: load = ROM0, type = ro, optional = yes; ONCE: load = ROM0, type = ro, optional = yes; CODE: load = ROM0, type = ro, define = yes; RODATA: load = ROM0, type = ro, define = yes; DATA: load = ROM0, run = RAM, type = rw, define = yes; VECTORS: load = ROMV, type = rw; CHARS: load = ROM2, type = rw; BSS: load = RAM, type = bss, define = yes; } FEATURES { CONDES: type = constructor, label = __CONSTRUCTOR_TABLE__, count = __CONSTRUCTOR_COUNT__, segment = ONCE; CONDES: type = destructor, label = __DESTRUCTOR_TABLE__, count = __DESTRUCTOR_COUNT__, segment = RODATA; CONDES: type = interruptor, label = __INTERRUPTOR_TABLE__, count = __INTERRUPTOR_COUNT__, segment = RODATA, import = __CALLIRQ__; } ================================================ FILE: src/cross_lib/cfg/cc65/osic1p_less_stack.cfg ================================================ FEATURES { STARTADDRESS: default = $0200; } SYMBOLS { # If you want ld65 to output a loadable-format file by default, then uncomment # the next line. (Then, "-u __BOOT__" wouldn't be needed on the command line.) # __BOOT__: type = import; __STACKSIZE__: type = weak, value = $0001; # 1 kB stack __HIMEM__: type = weak, value = $2000; # 32 kB RAM } MEMORY { # for size of ZP, see runtime/zeropage.s and c1p/extzp.s ZP: file = "", define = yes, start = $0002, size = $001A + $0020; HEAD: file = %O, start = $0000, size = $00B6; MAIN: file = %O, define = yes, start = %S, size = __HIMEM__ - __STACKSIZE__ - %S; } SEGMENTS { ZEROPAGE: load = ZP, type = zp; EXTZP: load = ZP, type = zp, define = yes, optional = yes; BOOT: load = HEAD, type = ro, optional = yes; STARTUP: load = MAIN, type = ro; LOWCODE: load = MAIN, type = ro, optional = yes; ONCE: load = MAIN, type = ro, optional = yes; CODE: load = MAIN, type = rw; RODATA: load = MAIN, type = rw; DATA: load = MAIN, type = rw; BSS: load = MAIN, type = bss, define = yes; } FEATURES { CONDES: type = constructor, label = __CONSTRUCTOR_TABLE__, count = __CONSTRUCTOR_COUNT__, segment = ONCE; CONDES: type = destructor, label = __DESTRUCTOR_TABLE__, count = __DESTRUCTOR_COUNT__, segment = RODATA; } ================================================ FILE: src/cross_lib/cfg/cc65/pce.cfg ================================================ # linker config to produce simple NEC PC-Engine cartridge (.pce) SYMBOLS { __STACKSIZE__: type = weak, value = $0300; # 3 pages stack } MEMORY { # FIXME: is this correct? the first 3? bytes cant be used? ZP: file = "", start = $0003, size = $00FD, type = rw, define = yes; # reset-bank and hardware vectors ROM0: file = %O, start = $E000, size = $1FF6, fill = yes, define = yes; ROMV: file = %O, start = $FFF6, size = $000A, fill = yes; # first RAM page (also contains stack and zeropage) RAM: file = "", start = $2200, size = $1e00, define = yes; } SEGMENTS { ZEROPAGE: load = ZP, type = zp, define = yes; EXTZP: load = ZP, type = zp, define = yes, optional = yes; APPZP: load = ZP, type = zp, define = yes, optional = yes; STARTUP: load = ROM0, type = ro, define = yes; ONCE: load = ROM0, type = ro, optional = yes; CODE: load = ROM0, type = ro, define = yes; RODATA: load = ROM0, type = ro, define = yes; DATA: load = ROM0, run = RAM, type = rw, define = yes; BSS: load = RAM, type = bss, define = yes; VECTORS: load = ROMV, type = rw, define = yes; } FEATURES { CONDES: type = constructor, label = __CONSTRUCTOR_TABLE__, count = __CONSTRUCTOR_COUNT__, segment = ONCE; CONDES: type = destructor, label = __DESTRUCTOR_TABLE__, count = __DESTRUCTOR_COUNT__, segment = RODATA; CONDES: type = interruptor, label = __INTERRUPTOR_TABLE__, count = __INTERRUPTOR_COUNT__, segment = RODATA, import = __CALLIRQ__; } ================================================ FILE: src/cross_lib/cfg/cc65/pce_16k.cfg ================================================ # linker config to produce simple NEC PC-Engine cartridge (.pce) SYMBOLS { __STACKSIZE__: type = weak, value = $0300; # 3 pages stack } MEMORY { # Preserve System Card standard ZP locations. ZP: start = $00, size = $EC, type = rw, define = yes; # banks and vectors ROM00: start = $E000, size = $1FF6, file = %O, fill = yes, bank = $00, fillval = $FF, define = yes; VECTORS: start = $FFF6, size = $000A, file = %O, fill = yes; ROM01: start = $6000, size = $2000, file = %O, fill = yes, bank = $01, fillval = $FF, define = yes; # First RAM page (also contains zero page and stack) RAM: start $2200, size $1E00, define = yes; } SEGMENTS { EXTZP: load = ZP, type = zp, define = yes, optional = yes; APPZP: load = ZP, type = zp, define = yes, optional = yes; STARTUP: load = ROM00, type = ro, define = yes; CODE: load = ROM00, type = ro, define = yes; RODATA: load = ROM00, type = ro, define = yes; DATA: load = ROM00, run = RAM, type = rw, define = yes; ONCE: load = ROM00, type = ro, optional = yes; BSS: load = RAM, type = bss, define = yes; VECTORS: load = VECTORS, type = rw, define = yes; ZEROPAGE: load = ZP, type = zp, define = yes; BANK01: load = ROM01, type = ro, define = yes; } # BANK01: load = ROM01, type = ro, define = yes; FEATURES { CONDES: type = constructor, label = __CONSTRUCTOR_TABLE__, count = __CONSTRUCTOR_COUNT__, segment = ONCE; CONDES: type = destructor, label = __DESTRUCTOR_TABLE__, count = __DESTRUCTOR_COUNT__, segment = RODATA; CONDES: type = interruptor, label = __INTERRUPTOR_TABLE__, count = __INTERRUPTOR_COUNT__, segment = RODATA, import = __CALLIRQ__; } ================================================ FILE: src/cross_lib/cfg/cc65/pce_16k_less_stack.cfg ================================================ # linker config. to produce a NEC PC-Engine 8K, 16K, or 32K image (.bin) SYMBOLS { __CARTSIZE__: type = weak, value = $4000; # $2000, $4000, or $8000 __STACKSIZE__: type = weak, value = $0020; # 3 pages stack } MEMORY { ZP: file = "", start = $0000, size = $0100, define = yes; # RAM bank MAIN: file = "", start = $2200, size = $1E00 - __STACKSIZE__, define = yes; # ROM banks, before swapping, and after mapping ROM: file = %O, start = $10000 - __CARTSIZE__, size = __CARTSIZE__, fill = yes, fillval = $FF; } SEGMENTS { ZEROPAGE: load = ZP, type = zp; EXTZP: load = ZP, type = zp, optional = yes; APPZP: load = ZP, type = zp, optional = yes; DATA: load = ROM, run = MAIN, type = rw, define = yes; INIT: load = MAIN, type = bss, optional = yes; BSS: load = MAIN, type = bss, define = yes; RODATA: load = ROM, type = ro; CODE: load = ROM, type = ro; LOWCODE: load = ROM, type = ro, optional = yes; ONCE: load = ROM, type = ro, optional = yes; STARTUP: load = ROM, type = ro, start = $FFF6 - $0066; VECTORS: load = ROM, type = ro, start = $FFF6; } FEATURES { CONDES: type = constructor, label = __CONSTRUCTOR_TABLE__, count = __CONSTRUCTOR_COUNT__, segment = ONCE; CONDES: type = destructor, label = __DESTRUCTOR_TABLE__, count = __DESTRUCTOR_COUNT__, segment = RODATA; CONDES: type = interruptor, label = __INTERRUPTOR_TABLE__, count = __INTERRUPTOR_COUNT__, segment = RODATA, import = __CALLIRQ__; } ================================================ FILE: src/cross_lib/cfg/cc65/pce_32k.cfg ================================================ # linker config. to produce a NEC PC-Engine 8K, 16K, or 32K image (.bin) SYMBOLS { __CARTSIZE__: type = weak, value = $8000; # $2000, $4000, or $8000 __STACKSIZE__: type = weak, value = $0200; # 3 pages stack } MEMORY { ZP: file = "", start = $0000, size = $0100, define = yes; # RAM bank MAIN: file = "", start = $2200, size = $1E00 - __STACKSIZE__, define = yes; # ROM banks, before swapping, and after mapping ROM: file = %O, start = $10000 - __CARTSIZE__, size = __CARTSIZE__, fill = yes, fillval = $FF; } SEGMENTS { ZEROPAGE: load = ZP, type = zp; EXTZP: load = ZP, type = zp, optional = yes; APPZP: load = ZP, type = zp, optional = yes; DATA: load = ROM, run = MAIN, type = rw, define = yes; INIT: load = MAIN, type = bss, optional = yes; BSS: load = MAIN, type = bss, define = yes; RODATA: load = ROM, type = ro; CODE: load = ROM, type = ro; LOWCODE: load = ROM, type = ro, optional = yes; ONCE: load = ROM, type = ro, optional = yes; STARTUP: load = ROM, type = ro, start = $FFF6 - $0066; VECTORS: load = ROM, type = ro, start = $FFF6; } FEATURES { CONDES: type = constructor, label = __CONSTRUCTOR_TABLE__, count = __CONSTRUCTOR_COUNT__, segment = ONCE; CONDES: type = destructor, label = __DESTRUCTOR_TABLE__, count = __DESTRUCTOR_COUNT__, segment = RODATA; CONDES: type = interruptor, label = __INTERRUPTOR_TABLE__, count = __INTERRUPTOR_COUNT__, segment = RODATA, import = __CALLIRQ__; } ================================================ FILE: src/cross_lib/cfg/cc65/pce_8k_less_stack.cfg ================================================ # linker config. to produce a NEC PC-Engine 8K, 16K, or 32K image (.bin) SYMBOLS { __CARTSIZE__: type = weak, value = $2000; # $2000, $4000, or $8000 __STACKSIZE__: type = weak, value = $0020; # 3 pages stack } MEMORY { ZP: file = "", start = $0000, size = $0100, define = yes; # RAM bank MAIN: file = "", start = $2200, size = $1E00 - __STACKSIZE__, define = yes; # ROM banks, before swapping, and after mapping ROM: file = %O, start = $10000 - __CARTSIZE__, size = __CARTSIZE__, fill = yes, fillval = $FF; } SEGMENTS { ZEROPAGE: load = ZP, type = zp; EXTZP: load = ZP, type = zp, optional = yes; APPZP: load = ZP, type = zp, optional = yes; DATA: load = ROM, run = MAIN, type = rw, define = yes; INIT: load = MAIN, type = bss, optional = yes; BSS: load = MAIN, type = bss, define = yes; RODATA: load = ROM, type = ro; CODE: load = ROM, type = ro; LOWCODE: load = ROM, type = ro, optional = yes; ONCE: load = ROM, type = ro, optional = yes; STARTUP: load = ROM, type = ro, start = $FFF6 - $0066; VECTORS: load = ROM, type = ro, start = $FFF6; } FEATURES { CONDES: type = constructor, label = __CONSTRUCTOR_TABLE__, count = __CONSTRUCTOR_COUNT__, segment = ONCE; CONDES: type = destructor, label = __DESTRUCTOR_TABLE__, count = __DESTRUCTOR_COUNT__, segment = RODATA; CONDES: type = interruptor, label = __INTERRUPTOR_TABLE__, count = __INTERRUPTOR_COUNT__, segment = RODATA, import = __CALLIRQ__; } ================================================ FILE: src/cross_lib/cfg/cc65/pet_8k.cfg ================================================ SYMBOLS { __LOADADDR__: type = import; __EXEHDR__: type = import; __STACKSIZE__: type = weak, value = $0010; # 2k stack } MEMORY { ZP: file = "", define = yes, start = $0055, size = $001A; LOADADDR: file = %O, start = $03FF, size = $0002; HEADER: file = %O, start = $0401, size = $000C; RAM: file = %O, start = $040D, size = $1BF3 - __STACKSIZE__; } SEGMENTS { ZEROPAGE: load = ZP, type = zp; LOADADDR: load = LOADADDR, type = ro; EXEHDR: load = HEADER, type = ro; STARTUP: load = RAM, type = ro; LOWCODE: load = RAM, type = ro, optional = yes; ONCE: load = RAM, type = ro, optional = yes; CODE: load = RAM, type = ro; RODATA: load = RAM, type = ro; DATA: load = RAM, type = rw; INIT: load = RAM, type = bss; BSS: load = RAM, type = bss, define = yes; } FEATURES { CONDES: type = constructor, label = __CONSTRUCTOR_TABLE__, count = __CONSTRUCTOR_COUNT__, segment = ONCE; CONDES: type = destructor, label = __DESTRUCTOR_TABLE__, count = __DESTRUCTOR_COUNT__, segment = RODATA; CONDES: type = interruptor, label = __INTERRUPTOR_TABLE__, count = __INTERRUPTOR_COUNT__, segment = RODATA, import = __CALLIRQ__; } ================================================ FILE: src/cross_lib/cfg/cc65/plus4_GFX.cfg ================================================ SYMBOLS { __LOADADDR__: type = import; __EXEHDR__: type = import; __STACKSIZE__: type = weak, value = $0800; # 2k stack } MEMORY { ZP: file = "", define = yes, start = $0002, size = $001A; LOADADDR: file = %O, start = $0FFF, size = $0002; HEADER: file = %O, start = $1001, size = $000C; MAIN: file = %O, define = yes, start = $100D, size = $5FF3 - __STACKSIZE__; } SEGMENTS { ZEROPAGE: load = ZP, type = zp; LOADADDR: load = LOADADDR, type = ro; EXEHDR: load = HEADER, type = ro; STARTUP: load = MAIN, type = ro; LOWCODE: load = MAIN, type = ro, optional = yes; ONCE: load = MAIN, type = ro, optional = yes; CODE: load = MAIN, type = ro; RODATA: load = MAIN, type = ro; DATA: load = MAIN, type = rw; INIT: load = MAIN, type = bss; BSS: load = MAIN, type = bss, define = yes; } FEATURES { CONDES: type = constructor, label = __CONSTRUCTOR_TABLE__, count = __CONSTRUCTOR_COUNT__, segment = ONCE; CONDES: type = destructor, label = __DESTRUCTOR_TABLE__, count = __DESTRUCTOR_COUNT__, segment = RODATA; CONDES: type = interruptor, label = __INTERRUPTOR_TABLE__, count = __INTERRUPTOR_COUNT__, segment = RODATA, import = __CALLIRQ__; } ================================================ FILE: src/cross_lib/cfg/cc65/supervision-16k.cfg ================================================ # supervision 16kbyte cartridge # ld65 config file # ld65 --config supervision-16k.cfg -o .bin .o SYMBOLS { __STACKSIZE__: type = weak, value = $0100; # 1 page stack __GFX_START__: type = weak, value = $FB00; } MEMORY { ZP: file = "", start = $0000, size = $0100; CPUSTACK: file = "", start = $0100, size = $0100; RAM: file = "", start = $0200, size = $1E00 - __STACKSIZE__, define=yes; VRAM: file = "", start = $4000, size = $2000; BANKROM1: file = %O, start = $8000, size = $4000, fill = yes, fillval = $ff, define=yes; ROM: file = %O, start = $C000, size = $3F00, fill = yes, fillval = $ff, define=yes; ROM2: file = %O, start = $FF00, size = $0100, fill = yes, fillval = $ff, define=yes; } SEGMENTS { ZEROPAGE: load = ZP, type = zp, define = yes; LOWCODE: load = ROM, type = ro, optional = yes; ONCE: load = ROM, type = ro, optional = yes; CODE: load = ROM, type = ro, define = yes; RODATA: load = ROM, type = ro, define = yes; DATA: load = ROM, run = RAM, type = rw, define = yes; FFF0: load = ROM2, type = ro, offset = $F0; VECTORS: load = ROM2, type = ro, offset = $FA; BSS: load = RAM, type = bss, define = yes; } FEATURES { CONDES: type = constructor, label = __CONSTRUCTOR_TABLE__, count = __CONSTRUCTOR_COUNT__, segment = ONCE; CONDES: type = destructor, label = __DESTRUCTOR_TABLE__, count = __DESTRUCTOR_COUNT__, segment = RODATA; CONDES: type = interruptor, label = __INTERRUPTOR_TABLE__, count = __INTERRUPTOR_COUNT__, segment = RODATA, import = __CALLIRQ__; } ================================================ FILE: src/cross_lib/cfg/cc65/supervision-16k_GFX.cfg ================================================ # supervision 16kbyte cartridge # ld65 config file # ld65 --config supervision-16k.cfg -o .bin .o SYMBOLS { __STACKSIZE__: type = weak, value = $0040; # 1 page stack __GFX_START__: type = weak, value = $FB00; } MEMORY { ZP: file = "", start = $0000, size = $0100; CPUSTACK: file = "", start = $0100, size = $0100; RAM: file = "", start = $0200, size = $1E00 - __STACKSIZE__, define=yes; VRAM: file = "", start = $4000, size = $2000; DUMMY: file = %O, start = $8000, size = $4000, fill = yes, fillval = $ff, define=yes; ROM: file = %O, start = $C000, size = $3B00, fill = yes, fillval = $ff, define=yes; CHARMEM: file = %O, start = __GFX_START__, size = $0400, type = rw, define = yes, fill = yes; ROM2: file = %O, start = $FF00, size = $0100, fill = yes, fillval = $ff, define=yes; } SEGMENTS { ZEROPAGE: load = ZP, type = zp, define = yes; GFX: load = CHARMEM, type = ro, define = yes, optional = no; LOWCODE: load = ROM, type = ro, optional = yes; ONCE: load = ROM, type = ro, optional = yes; CODE: load = ROM, type = ro, define = yes; RODATA: load = ROM, type = ro, define = yes; DATA: load = ROM, run = RAM, type = rw, define = yes; FFF0: load = ROM2, type = ro, offset = $F0; VECTORS: load = ROM2, type = ro, offset = $FA; BSS: load = RAM, type = bss, define = yes; } FEATURES { CONDES: type = constructor, label = __CONSTRUCTOR_TABLE__, count = __CONSTRUCTOR_COUNT__, segment = ONCE; CONDES: type = destructor, label = __DESTRUCTOR_TABLE__, count = __DESTRUCTOR_COUNT__, segment = RODATA; CONDES: type = interruptor, label = __INTERRUPTOR_TABLE__, count = __INTERRUPTOR_COUNT__, segment = RODATA, import = __CALLIRQ__; } ================================================ FILE: src/cross_lib/cfg/cc65/supervision-16k_GFX_2.cfg ================================================ # supervision 16kbyte cartridge # ld65 config file # ld65 --config supervision-16k.cfg -o .bin .o SYMBOLS { __STACKSIZE__: type = weak, value = $0040; # 1 page stack __GFX_START__: type = weak, value = $FB00; } MEMORY { ZP: file = "", start = $0000, size = $0100; CPUSTACK: file = "", start = $0100, size = $0100; RAM: file = "", start = $0200, size = $1E00 - __STACKSIZE__, define=yes; VRAM: file = "", start = $4000, size = $2000; ROM0: file = %O, start = $8000, size = $4000, fill = yes, fillval = $ff, define=yes; ROM: file = %O, start = $C000, size = $3B00, fill = yes, fillval = $ff, define=yes; CHARMEM: file = %O, start = __GFX_START__, size = $0400, type = rw, define = yes, fill = yes; ROM2: file = %O, start = $FF00, size = $0100, fill = yes, fillval = $ff, define=yes; } SEGMENTS { ZEROPAGE: load = ZP, type = zp, define = yes; GFX: load = CHARMEM, type = ro, define = yes, optional = no; LOWCODE: load = ROM, type = ro, optional = yes; ONCE: load = ROM, type = ro, optional = yes; CODE: load = ROM, type = ro, define = yes; RODATA: load = ROM0, type = ro, define = yes; DATA: load = ROM, run = RAM, type = rw, define = yes; FFF0: load = ROM2, type = ro, offset = $F0; VECTORS: load = ROM2, type = ro, offset = $FA; BSS: load = RAM, type = bss, define = yes; } FEATURES { CONDES: type = constructor, label = __CONSTRUCTOR_TABLE__, count = __CONSTRUCTOR_COUNT__, segment = ONCE; CONDES: type = destructor, label = __DESTRUCTOR_TABLE__, count = __DESTRUCTOR_COUNT__, segment = RODATA; CONDES: type = interruptor, label = __INTERRUPTOR_TABLE__, count = __INTERRUPTOR_COUNT__, segment = RODATA, import = __CALLIRQ__; } ================================================ FILE: src/cross_lib/cfg/cc65/supervision-16k_GFX_2_stack_0x1B.cfg ================================================ # supervision 16kbyte cartridge # ld65 config file # ld65 --config supervision-16k.cfg -o .bin .o SYMBOLS { __STACKSIZE__: type = weak, value = $001B; # 1 page stack __GFX_START__: type = weak, value = $FB00; } MEMORY { ZP: file = "", start = $0000, size = $0100; CPUSTACK: file = "", start = $0100, size = $0100; RAM: file = "", start = $0200, size = $1E00 - __STACKSIZE__, define=yes; VRAM: file = "", start = $4000, size = $2000; ROM0: file = %O, start = $8000, size = $4000, fill = yes, fillval = $ff, define=yes; ROM: file = %O, start = $C000, size = $3B00, fill = yes, fillval = $ff, define=yes; CHARMEM: file = %O, start = __GFX_START__, size = $0400, type = rw, define = yes, fill = yes; ROM2: file = %O, start = $FF00, size = $0100, fill = yes, fillval = $ff, define=yes; } SEGMENTS { ZEROPAGE: load = ZP, type = zp, define = yes; GFX: load = CHARMEM, type = ro, define = yes, optional = no; LOWCODE: load = ROM, type = ro, optional = yes; ONCE: load = ROM, type = ro, optional = yes; CODE: load = ROM, type = ro, define = yes; RODATA: load = ROM0, type = ro, define = yes; DATA: load = ROM, run = RAM, type = rw, define = yes; FFF0: load = ROM2, type = ro, offset = $F0; VECTORS: load = ROM2, type = ro, offset = $FA; BSS: load = RAM, type = bss, define = yes; } FEATURES { CONDES: type = constructor, label = __CONSTRUCTOR_TABLE__, count = __CONSTRUCTOR_COUNT__, segment = ONCE; CONDES: type = destructor, label = __DESTRUCTOR_TABLE__, count = __DESTRUCTOR_COUNT__, segment = RODATA; CONDES: type = interruptor, label = __INTERRUPTOR_TABLE__, count = __INTERRUPTOR_COUNT__, segment = RODATA, import = __CALLIRQ__; } ================================================ FILE: src/cross_lib/cfg/cc65/supervision-16k_GFX_3.cfg ================================================ # supervision 16kbyte cartridge # ld65 config file # ld65 --config supervision-16k.cfg -o .bin .o SYMBOLS { __STACKSIZE__: type = weak, value = $0040; # 1 page stack __GFX_START__: type = weak, value = $FB00; } MEMORY { ZP: file = "", start = $0000, size = $0100; CPUSTACK: file = "", start = $0100, size = $0100; RAM: file = "", start = $0200, size = $1E00 - __STACKSIZE__, define=yes; VRAM: file = "", start = $4000, size = $2000; ROM0: file = %O, start = $8000, size = $4000, fill = yes, fillval = $ff, define=yes; ROM: file = %O, start = $C000, size = $3B00, fill = yes, fillval = $ff, define=yes; CHARMEM: file = %O, start = __GFX_START__, size = $0400, type = rw, define = yes, fill = yes; ROM2: file = %O, start = $FF00, size = $0100, fill = yes, fillval = $ff, define=yes; } SEGMENTS { ZEROPAGE: load = ZP, type = zp, define = yes; GFX: load = CHARMEM, type = ro, define = yes, optional = no; LOWCODE: load = ROM, type = ro, optional = yes; ONCE: load = ROM, type = ro, optional = yes; CODE: load = ROM, type = ro, define = yes; CODE0: load = ROM0, type = ro, define = yes; RODATA: load = ROM0, type = ro, define = yes; DATA: load = ROM, run = RAM, type = rw, define = yes; FFF0: load = ROM2, type = ro, offset = $F0; VECTORS: load = ROM2, type = ro, offset = $FA; BSS: load = RAM, type = bss, define = yes; } FEATURES { CONDES: type = constructor, label = __CONSTRUCTOR_TABLE__, count = __CONSTRUCTOR_COUNT__, segment = ONCE; CONDES: type = destructor, label = __DESTRUCTOR_TABLE__, count = __DESTRUCTOR_COUNT__, segment = RODATA; CONDES: type = interruptor, label = __INTERRUPTOR_TABLE__, count = __INTERRUPTOR_COUNT__, segment = RODATA, import = __CALLIRQ__; } ================================================ FILE: src/cross_lib/cfg/cc65/supervision-64k.cfg ================================================ # supervision 64kbyte cartridge with bankswitching # for assembler # ld65 config file # ld65 --config supervision-64k.cfg -o .bin .o SYMBOLS { __STACKSIZE__: type = weak, value = $0100; # 1 page stack } MEMORY { RAM: file = "", start = $0000, size = $2000 - __STACKSIZE__, define = yes; VRAM: file = "", start = $4000, size = $2000; BANKROM1: file = %O, start = $8000, size = $4000, fill = yes, fillval = $FF; BANKROM2: file = %O, start = $8000, size = $4000, fill = yes, fillval = $FF; BANKROM3: file = %O, start = $8000, size = $4000, fill = yes, fillval = $FF; ROM: file = %O, start = $C000, size = $4000, fill = yes, fillval = $FF; } SEGMENTS { LOWCODE: load = ROM, type = ro, optional = yes; ONCE: load = ROM, type = ro, optional = yes; CODE: load = ROM, type = ro; RODATA: load = ROM, type = ro; BANK1: load = BANKROM1, type = ro; BANK2: load = BANKROM2, type = ro; BANK3: load = BANKROM3, type = ro; ZEROPAGE: load = RAM, type = bss, define = yes; DATA: load = RAM, type = bss, define = yes, offset = $0200; BSS: load = RAM, type = bss, define = yes; VECTORS: load = ROM, type = ro, offset = $3FFA; } ================================================ FILE: src/cross_lib/cfg/cc65/vic20-16k_CODE2_GFX.cfg ================================================ # Memory configuration for the VIC-20 with 16K RAM Cartridge # Contributed by Stefan Haubenthal SYMBOLS { __LOADADDR__: type = import; __EXEHDR__: type = import; __STACKSIZE__: type = weak, value = $0030; # 256 byte stack } MEMORY { ZP: file = "", define = yes, start = $0002, size = $001A; SCREEN: start = $1000, size = $0200; LOADADDR: file = %O, start = $11FF, size = $0002; HEADER: file = %O, start = $1201, size = $000C; MAIN: file = %O, define = yes, start = $120D, fill = yes, size = $1C00 - $120D - __STACKSIZE__; DUMMY: file = %O, start = $1C00 - __STACKSIZE__ - 1, size = __STACKSIZE__, fill = yes; CHARMEM: file = %O, start = $1C00, size = $02F0-216, type = rw, define = yes, fill = yes; RAM1: file = %O, start = $1EF0-216, size = $4000+216, type = rw; } SEGMENTS { ZEROPAGE: load = ZP, type = zp; LOADADDR: load = LOADADDR, type = ro; EXEHDR: load = HEADER, type = ro; STARTUP: load = MAIN, type = ro; LOWCODE: load = MAIN, type = ro, optional = yes; ONCE: load = RAM1, type = ro, optional = yes; CODE: load = RAM1, type = ro; CODE2: load = MAIN, type = ro; RODATA: load = MAIN, type = ro; DATA: load = MAIN, type = rw; INIT: load = MAIN, type = bss; BSS: load = RAM1, type = bss, define = yes; GFX: load = CHARMEM, type = ro, define = yes, optional = no; } FEATURES { CONDES: type = constructor, label = __CONSTRUCTOR_TABLE__, count = __CONSTRUCTOR_COUNT__, segment = ONCE; CONDES: type = destructor, label = __DESTRUCTOR_TABLE__, count = __DESTRUCTOR_COUNT__, segment = RODATA; CONDES: type = interruptor, label = __INTERRUPTOR_TABLE__, count = __INTERRUPTOR_COUNT__, segment = RODATA, import = __CALLIRQ__; } ================================================ FILE: src/cross_lib/cfg/cc65/vic20-16k_CODE2_GFX_ALT_V2.cfg ================================================ # Memory configuration for the VIC-20 with 16K RAM Cartridge # Contributed by Stefan Haubenthal SYMBOLS { __LOADADDR__: type = import; __EXEHDR__: type = import; __STACKSIZE__: type = weak, value = $0030; # 256 byte stack } MEMORY { ZP: file = "", define = yes, start = $0002, size = $001A; SCREEN: start = $1000, size = $0200; LOADADDR: file = %O, start = $11FF, size = $0002; HEADER: file = %O, start = $1201, size = $000C; MAIN: file = %O, define = yes, start = $120D, fill = yes, size = $1900 - $120D - __STACKSIZE__; DUMMY: file = %O, start = $1900 - __STACKSIZE__ - 1, size = __STACKSIZE__, fill = yes; CHARMEM: file = %O, start = $1900, size = $0200, type = rw, define = yes, fill = yes; RAM1: file = %O, start = $1B00, size = $4500, type = rw; } SEGMENTS { ZEROPAGE: load = ZP, type = zp; LOADADDR: load = LOADADDR, type = ro; EXEHDR: load = HEADER, type = ro; STARTUP: load = MAIN, type = ro; LOWCODE: load = MAIN, type = ro, optional = yes; ONCE: load = MAIN, type = ro, optional = yes; CODE: load = RAM1, type = ro; CODE2: load = MAIN, type = ro; RODATA: load = RAM1, type = ro; DATA: load = MAIN, type = rw; INIT: load = MAIN, type = bss; BSS: load = RAM1, type = bss, define = yes; GFX: load = CHARMEM, type = ro, define = yes, optional = no; } FEATURES { CONDES: type = constructor, label = __CONSTRUCTOR_TABLE__, count = __CONSTRUCTOR_COUNT__, segment = ONCE; CONDES: type = destructor, label = __DESTRUCTOR_TABLE__, count = __DESTRUCTOR_COUNT__, segment = RODATA; CONDES: type = interruptor, label = __INTERRUPTOR_TABLE__, count = __INTERRUPTOR_COUNT__, segment = RODATA, import = __CALLIRQ__; } ================================================ FILE: src/cross_lib/cfg/cc65/vic20-16k_CODE2_GFX_V2.cfg ================================================ # Memory configuration for the VIC-20 with 16K RAM Cartridge # Contributed by Stefan Haubenthal SYMBOLS { __LOADADDR__: type = import; __EXEHDR__: type = import; __STACKSIZE__: type = weak, value = $0030; # 256 byte stack } MEMORY { ZP: file = "", define = yes, start = $0002, size = $001A; SCREEN: start = $1000, size = $0200; LOADADDR: file = %O, start = $11FF, size = $0002; HEADER: file = %O, start = $1201, size = $000C; MAIN: file = %O, define = yes, start = $120D, fill = yes, size = $1900 - $120D - __STACKSIZE__; DUMMY: file = %O, start = $1900 - __STACKSIZE__ - 1, size = __STACKSIZE__, fill = yes; CHARMEM: file = %O, start = $1900, size = $0200, type = rw, define = yes, fill = yes; RAM1: file = %O, start = $1B00, size = $4500, type = rw; } SEGMENTS { ZEROPAGE: load = ZP, type = zp; LOADADDR: load = LOADADDR, type = ro; EXEHDR: load = HEADER, type = ro; STARTUP: load = MAIN, type = ro; LOWCODE: load = MAIN, type = ro, optional = yes; ONCE: load = MAIN, type = ro, optional = yes; CODE: load = RAM1, type = ro; CODE2: load = MAIN, type = ro; RODATA: load = RAM1, type = ro; DATA: load = MAIN, type = rw; INIT: load = MAIN, type = bss; BSS: load = RAM1, type = bss, define = yes; GFX: load = CHARMEM, type = ro, define = yes, optional = no; } FEATURES { CONDES: type = constructor, label = __CONSTRUCTOR_TABLE__, count = __CONSTRUCTOR_COUNT__, segment = ONCE; CONDES: type = destructor, label = __DESTRUCTOR_TABLE__, count = __DESTRUCTOR_COUNT__, segment = RODATA; CONDES: type = interruptor, label = __INTERRUPTOR_TABLE__, count = __INTERRUPTOR_COUNT__, segment = RODATA, import = __CALLIRQ__; } ================================================ FILE: src/cross_lib/cfg/cc65/vic20-16k_GFX.cfg ================================================ # Memory configuration for the VIC-20 with 16K RAM Cartridge # Contributed by Stefan Haubenthal SYMBOLS { __LOADADDR__: type = import; __EXEHDR__: type = import; __STACKSIZE__: type = weak, value = $0020; # 256 byte stack } MEMORY { ZP: file = "", define = yes, start = $0002, size = $001A; SCREEN: start = $1000, size = $0200; LOADADDR: file = %O, start = $11FF, size = $0002; HEADER: file = %O, start = $1201, size = $000C; MAIN: file = %O, define = yes, start = $120D, fill = yes, size = $1C00 - $120D - __STACKSIZE__; DUMMY: file = %O, start = $1C00 - __STACKSIZE__ - 1, size = __STACKSIZE__, fill = yes; CHARMEM: file = %O, start = $1C00, size = $02F0, type = rw, define = yes, fill = yes; RAM1: file = %O, start = $1EF0, size = $4000, type = rw; } SEGMENTS { ZEROPAGE: load = ZP, type = zp; LOADADDR: load = LOADADDR, type = ro; EXEHDR: load = HEADER, type = ro; STARTUP: load = MAIN, type = ro; LOWCODE: load = MAIN, type = ro, optional = yes; ONCE: load = MAIN, type = ro, optional = yes; CODE: load = RAM1, type = ro; RODATA: load = MAIN, type = ro; DATA: load = MAIN, type = rw; INIT: load = MAIN, type = bss; BSS: load = MAIN, type = bss, define = yes; GFX: load = CHARMEM, type = ro, define = yes, optional = no; } FEATURES { CONDES: type = constructor, label = __CONSTRUCTOR_TABLE__, count = __CONSTRUCTOR_COUNT__, segment = ONCE; CONDES: type = destructor, label = __DESTRUCTOR_TABLE__, count = __DESTRUCTOR_COUNT__, segment = RODATA; CONDES: type = interruptor, label = __INTERRUPTOR_TABLE__, count = __INTERRUPTOR_COUNT__, segment = RODATA, import = __CALLIRQ__; } ================================================ FILE: src/cross_lib/cfg/cc65/vic20-3k_GFX.cfg ================================================ SYMBOLS { __LOADADDR__: type = import; __EXEHDR__: type = import; __STACKSIZE__: type = weak, value = $0001; # 1k stack } MEMORY { ZP: file = "", define = yes, start = $0002, size = $001A; LOADADDR: file = %O, start = $03FF, size = $0002; HEADER: file = %O, start = $0401, size = $000C; MAIN: file = %O, define = yes, start = $040D, size = $1C00 - $40D - __STACKSIZE__, fill=yes; DUMMY: file = %O, start = $1C00 - __STACKSIZE__ - 1, size = __STACKSIZE__, fill = yes; CHARMEM: file = %O, define = yes, start = $1C00, size = $0200, type = rw, fill = yes; } SEGMENTS { ZEROPAGE: load = ZP, type = zp; LOADADDR: load = LOADADDR, type = ro; EXEHDR: load = HEADER, type = ro; STARTUP: load = MAIN, type = ro; LOWCODE: load = MAIN, type = ro, optional = yes; ONCE: load = MAIN, type = ro, optional = yes; CODE: load = MAIN, type = ro; RODATA: load = MAIN, type = ro; DATA: load = MAIN, type = rw; INIT: load = MAIN, type = bss; BSS: load = MAIN, type = bss, define = yes; UDCCHAR: load = CHARMEM, type = ro, define = yes, optional = no; } FEATURES { CONDES: type = constructor, label = __CONSTRUCTOR_TABLE__, count = __CONSTRUCTOR_COUNT__, segment = ONCE; CONDES: type = destructor, label = __DESTRUCTOR_TABLE__, count = __DESTRUCTOR_COUNT__, segment = RODATA; CONDES: type = interruptor, label = __INTERRUPTOR_TABLE__, count = __INTERRUPTOR_COUNT__, segment = RODATA, import = __CALLIRQ__; } ================================================ FILE: src/cross_lib/cfg/cc65/vic20-8k_CODE2_GFX.cfg ================================================ # Memory configuration for the VIC-20 with 16K RAM Cartridge # Contributed by Stefan Haubenthal SYMBOLS { __LOADADDR__: type = import; __EXEHDR__: type = import; __STACKSIZE__: type = weak, value = $0030; # 256 byte stack } MEMORY { ZP: file = "", define = yes, start = $0002, size = $001A; SCREEN: start = $1000, size = $0200; LOADADDR: file = %O, start = $11FF, size = $0002; HEADER: file = %O, start = $1201, size = $000C; MAIN: file = %O, define = yes, start = $120D, fill = yes, size = $1C00 - $120D - __STACKSIZE__; DUMMY: file = %O, start = $1C00 - __STACKSIZE__ - 1, size = __STACKSIZE__, fill = yes; CHARMEM: file = %O, start = $1C00, size = $02F0 - 216, type = rw, define = yes, fill = yes; RAM1: file = %O, start = $1EF0 - 216, size = $2110 + 216, type = rw; } SEGMENTS { ZEROPAGE: load = ZP, type = zp; LOADADDR: load = LOADADDR, type = ro; EXEHDR: load = HEADER, type = ro; STARTUP: load = MAIN, type = ro; LOWCODE: load = MAIN, type = ro, optional = yes; ONCE: load = MAIN, type = ro, optional = yes; CODE: load = RAM1, type = ro; CODE2: load = MAIN, type = ro; RODATA: load = MAIN, type = ro; DATA: load = MAIN, type = rw; INIT: load = MAIN, type = bss; BSS: load = MAIN, type = bss, define = yes; GFX: load = CHARMEM, type = ro, define = yes, optional = no; } FEATURES { CONDES: type = constructor, label = __CONSTRUCTOR_TABLE__, count = __CONSTRUCTOR_COUNT__, segment = ONCE; CONDES: type = destructor, label = __DESTRUCTOR_TABLE__, count = __DESTRUCTOR_COUNT__, segment = RODATA; CONDES: type = interruptor, label = __INTERRUPTOR_TABLE__, count = __INTERRUPTOR_COUNT__, segment = RODATA, import = __CALLIRQ__; } ================================================ FILE: src/cross_lib/cfg/cc65/vic20-8k_CODE2_GFX_V2.cfg ================================================ # Memory configuration for the VIC-20 with 16K RAM Cartridge # Contributed by Stefan Haubenthal SYMBOLS { __LOADADDR__: type = import; __EXEHDR__: type = import; __STACKSIZE__: type = weak, value = $0030; # 256 byte stack } MEMORY { ZP: file = "", define = yes, start = $0002, size = $001A; SCREEN: start = $1000, size = $0200; LOADADDR: file = %O, start = $11FF, size = $0002; HEADER: file = %O, start = $1201, size = $000C; MAIN: file = %O, define = yes, start = $120D, fill = yes, size = $1900 - $120D - __STACKSIZE__; DUMMY: file = %O, start = $1900 - __STACKSIZE__ - 1, size = __STACKSIZE__, fill = yes; CHARMEM: file = %O, start = $1900, size = $0200, type = rw, define = yes, fill = yes; RAM1: file = %O, start = $1B00, size = $2500, type = rw; } SEGMENTS { ZEROPAGE: load = ZP, type = zp; LOADADDR: load = LOADADDR, type = ro; EXEHDR: load = HEADER, type = ro; STARTUP: load = MAIN, type = ro; LOWCODE: load = MAIN, type = ro, optional = yes; ONCE: load = MAIN, type = ro, optional = yes; CODE: load = RAM1, type = ro; CODE2: load = MAIN, type = ro; RODATA: load = MAIN, type = ro; DATA: load = MAIN, type = rw; INIT: load = MAIN, type = bss; BSS: load = RAM1, type = bss, define = yes; GFX: load = CHARMEM, type = ro, define = yes, optional = no; } FEATURES { CONDES: type = constructor, label = __CONSTRUCTOR_TABLE__, count = __CONSTRUCTOR_COUNT__, segment = ONCE; CONDES: type = destructor, label = __DESTRUCTOR_TABLE__, count = __DESTRUCTOR_COUNT__, segment = RODATA; CONDES: type = interruptor, label = __INTERRUPTOR_TABLE__, count = __INTERRUPTOR_COUNT__, segment = RODATA, import = __CALLIRQ__; } ================================================ FILE: src/cross_lib/cfg/cc65/vic20-8k_CODE2_GFX_V2_alt.cfg ================================================ # Memory configuration for the VIC-20 with 16K RAM Cartridge # Contributed by Stefan Haubenthal SYMBOLS { __LOADADDR__: type = import; __EXEHDR__: type = import; __STACKSIZE__: type = weak, value = $0030; # 256 byte stack } MEMORY { ZP: file = "", define = yes, start = $0002, size = $001A; SCREEN: start = $1000, size = $0200; LOADADDR: file = %O, start = $11FF, size = $0002; HEADER: file = %O, start = $1201, size = $000C; MAIN: file = %O, define = yes, start = $120D, fill = yes, size = $1900 - $120D - __STACKSIZE__; DUMMY: file = %O, start = $1900 - __STACKSIZE__ - 1, size = __STACKSIZE__, fill = yes; CHARMEM: file = %O, start = $1900, size = $0200, type = rw, define = yes, fill = yes; RAM1: file = %O, start = $1B00, size = $2500, type = rw; } SEGMENTS { ZEROPAGE: load = ZP, type = zp; LOADADDR: load = LOADADDR, type = ro; EXEHDR: load = HEADER, type = ro; STARTUP: load = MAIN, type = ro; LOWCODE: load = MAIN, type = ro, optional = yes; ONCE: load = MAIN, type = ro, optional = yes; CODE: load = RAM1, type = ro; CODE2: load = MAIN, type = ro; RODATA: load = RAM1, type = ro; DATA: load = MAIN, type = rw; INIT: load = MAIN, type = bss; BSS: load = RAM1, type = bss, define = yes; GFX: load = CHARMEM, type = ro, define = yes, optional = no; } FEATURES { CONDES: type = constructor, label = __CONSTRUCTOR_TABLE__, count = __CONSTRUCTOR_COUNT__, segment = ONCE; CONDES: type = destructor, label = __DESTRUCTOR_TABLE__, count = __DESTRUCTOR_COUNT__, segment = RODATA; CONDES: type = interruptor, label = __INTERRUPTOR_TABLE__, count = __INTERRUPTOR_COUNT__, segment = RODATA, import = __CALLIRQ__; } ================================================ FILE: src/cross_lib/cfg/cc65/vic20-8k_GFX.cfg ================================================ # Memory configuration for the VIC-20 with 16K RAM Cartridge # Contributed by Stefan Haubenthal SYMBOLS { __LOADADDR__: type = import; __EXEHDR__: type = import; __STACKSIZE__: type = weak, value = $0050; # small stack __GFX_START__: type = weak, value = $1F60; } MEMORY { ZP: file = "", define = yes, start = $0002, size = $001A; SCREEN: start = $1000, size = $0200; LOADADDR: file = %O, start = $11FF, size = $0002; HEADER: file = %O, start = $1201, size = $000C; MAIN: file = %O, define = yes, start = $120D, fill = yes, size = __GFX_START__ - $120D - __STACKSIZE__; DUMMY: file = %O, start = __GFX_START__ - __STACKSIZE__ - 1, fill = yes, size = __STACKSIZE__; CHARMEM: file = %O, start = __GFX_START__, size = $00A0, type = rw, define = yes, fill = yes; RAMEXP: file = %O, start = $2000, size = $2000, type = rw; } SEGMENTS { ZEROPAGE: load = ZP, type = zp; LOADADDR: load = LOADADDR, type = ro; EXEHDR: load = HEADER, type = ro; STARTUP: load = MAIN, type = ro; LOWCODE: load = MAIN, type = ro, optional = yes; ONCE: load = MAIN, type = ro, optional = yes; CODE: load = RAMEXP, type = ro; RODATA: load = MAIN, type = ro; DATA: load = MAIN, type = rw; INIT: load = MAIN, type = bss; BSS: load = MAIN, type = bss, define = yes; UDCCHAR: load = CHARMEM, type = ro, define = yes, optional = no; CODE2: load = MAIN, type = ro; } FEATURES { CONDES: type = constructor, label = __CONSTRUCTOR_TABLE__, count = __CONSTRUCTOR_COUNT__, segment = ONCE; CONDES: type = destructor, label = __DESTRUCTOR_TABLE__, count = __DESTRUCTOR_COUNT__, segment = RODATA; CONDES: type = interruptor, label = __INTERRUPTOR_TABLE__, count = __INTERRUPTOR_COUNT__, segment = RODATA, import = __CALLIRQ__; } ================================================ FILE: src/cross_lib/cfg/cc65/vic20-8k_GFX_25_tiles.cfg ================================================ # Memory configuration for the VIC-20 with 16K RAM Cartridge # Contributed by Stefan Haubenthal SYMBOLS { __LOADADDR__: type = import; __EXEHDR__: type = import; __STACKSIZE__: type = weak, value = $0050; # small stack __GFX_START__: type = weak, value = $1F30; } MEMORY { ZP: file = "", define = yes, start = $0002, size = $001A; SCREEN: start = $1000, size = $0200; LOADADDR: file = %O, start = $11FF, size = $0002; HEADER: file = %O, start = $1201, size = $000C; MAIN: file = %O, define = yes, start = $120D, fill = yes, size = __GFX_START__ - $120D - __STACKSIZE__; DUMMY: file = %O, start = __GFX_START__ - __STACKSIZE__ - 1, fill = yes, size = __STACKSIZE__; CHARMEM: file = %O, start = __GFX_START__, size = $00D0, type = rw, define = yes, fill = yes; RAMEXP: file = %O, start = $2000, size = $2000, type = rw; } SEGMENTS { ZEROPAGE: load = ZP, type = zp; LOADADDR: load = LOADADDR, type = ro; EXEHDR: load = HEADER, type = ro; STARTUP: load = MAIN, type = ro; LOWCODE: load = MAIN, type = ro, optional = yes; ONCE: load = MAIN, type = ro, optional = yes; CODE: load = RAMEXP, type = ro; RODATA: load = MAIN, type = ro; DATA: load = MAIN, type = rw; INIT: load = MAIN, type = bss; BSS: load = MAIN, type = bss, define = yes; UDCCHAR: load = CHARMEM, type = ro, define = yes, optional = no; CODE2: load = MAIN, type = ro; } FEATURES { CONDES: type = constructor, label = __CONSTRUCTOR_TABLE__, count = __CONSTRUCTOR_COUNT__, segment = ONCE; CONDES: type = destructor, label = __DESTRUCTOR_TABLE__, count = __DESTRUCTOR_COUNT__, segment = RODATA; CONDES: type = interruptor, label = __INTERRUPTOR_TABLE__, count = __INTERRUPTOR_COUNT__, segment = RODATA, import = __CALLIRQ__; } ================================================ FILE: src/cross_lib/cfg/cc65/vic20-8k_GFX_stack_0x1B.cfg ================================================ # Memory configuration for the VIC-20 with 16K RAM Cartridge # Contributed by Stefan Haubenthal SYMBOLS { __LOADADDR__: type = import; __EXEHDR__: type = import; __STACKSIZE__: type = weak, value = $001B; # small stack __GFX_START__: type = weak, value = $1F60; } MEMORY { ZP: file = "", define = yes, start = $0002, size = $001A; SCREEN: start = $1000, size = $0200; LOADADDR: file = %O, start = $11FF, size = $0002; HEADER: file = %O, start = $1201, size = $000C; MAIN: file = %O, define = yes, start = $120D, fill = yes, size = __GFX_START__ - $120D - __STACKSIZE__; DUMMY: file = %O, start = __GFX_START__ - __STACKSIZE__ - 1, fill = yes, size = __STACKSIZE__; CHARMEM: file = %O, start = __GFX_START__, size = $00A0, type = rw, define = yes, fill = yes; RAMEXP: file = %O, start = $2000, size = $2000, type = rw; } SEGMENTS { ZEROPAGE: load = ZP, type = zp; LOADADDR: load = LOADADDR, type = ro; EXEHDR: load = HEADER, type = ro; STARTUP: load = MAIN, type = ro; LOWCODE: load = MAIN, type = ro, optional = yes; ONCE: load = MAIN, type = ro, optional = yes; CODE: load = RAMEXP, type = ro; RODATA: load = MAIN, type = ro; DATA: load = MAIN, type = rw; INIT: load = MAIN, type = bss; BSS: load = MAIN, type = bss, define = yes; UDCCHAR: load = CHARMEM, type = ro, define = yes, optional = no; CODE2: load = MAIN, type = ro; } FEATURES { CONDES: type = constructor, label = __CONSTRUCTOR_TABLE__, count = __CONSTRUCTOR_COUNT__, segment = ONCE; CONDES: type = destructor, label = __DESTRUCTOR_TABLE__, count = __DESTRUCTOR_COUNT__, segment = RODATA; CONDES: type = interruptor, label = __INTERRUPTOR_TABLE__, count = __INTERRUPTOR_COUNT__, segment = RODATA, import = __CALLIRQ__; } ================================================ FILE: src/cross_lib/cfg/cc65/vic20-8k_memory_mapped_GFX.cfg ================================================ # Memory configuration for the VIC-20 with 16K RAM Cartridge # Contributed by Stefan Haubenthal SYMBOLS { __LOADADDR__: type = import; __EXEHDR__: type = import; __STACKSIZE__: type = weak, value = $001B; # small stack __GFX_START__: type = weak, value = $1F20; } MEMORY { ZP: file = "", define = yes, start = $0002, size = $001A; SCREEN: start = $1000, size = $0200; LOADADDR: file = %O, start = $11FF, size = $0002; HEADER: file = %O, start = $1201, size = $000C; MAIN: file = %O, define = yes, start = $120D, fill = yes, size = __GFX_START__ - $120D - __STACKSIZE__; DUMMY: file = %O, start = __GFX_START__ - __STACKSIZE__ - 1, fill = yes, size = __STACKSIZE__; CHARMEM: file = %O, start = __GFX_START__, size = $00E0, type = rw, define = yes, fill = yes; RAMEXP: file = %O, start = $2000, size = $2000, type = rw; } SEGMENTS { ZEROPAGE: load = ZP, type = zp; LOADADDR: load = LOADADDR, type = ro; EXEHDR: load = HEADER, type = ro; STARTUP: load = MAIN, type = ro; LOWCODE: load = MAIN, type = ro, optional = yes; ONCE: load = MAIN, type = ro, optional = yes; CODE: load = RAMEXP, type = ro; RODATA: load = MAIN, type = ro; DATA: load = MAIN, type = rw; INIT: load = MAIN, type = bss; BSS: load = MAIN, type = bss, define = yes; UDCCHAR: load = CHARMEM, type = ro, define = yes, optional = no; CODE2: load = MAIN, type = ro; } FEATURES { CONDES: type = constructor, label = __CONSTRUCTOR_TABLE__, count = __CONSTRUCTOR_COUNT__, segment = ONCE; CONDES: type = destructor, label = __DESTRUCTOR_TABLE__, count = __DESTRUCTOR_COUNT__, segment = RODATA; CONDES: type = interruptor, label = __INTERRUPTOR_TABLE__, count = __INTERRUPTOR_COUNT__, segment = RODATA, import = __CALLIRQ__; } ================================================ FILE: src/cross_lib/cfg/cc65/vic20-cart.cfg ================================================ # # VIC-20 cart image with CC65 compiler suite # Linker configuration file for unexpanded VIC-20 # # Taken from https://github.com/ops/vic-cc65-cart SYMBOLS { __LOADADDR__: type = import; __EXEHDR__: type = import; __STACKSIZE__: type = weak, value = $0400; # 1k stack } MEMORY { ZP: file = "", define = yes, start = $0002, size = $001A; HEADER: file = "", start = $1001, size = $000C; LOADADDR: file = %O, start = $9FFE, size = $0002; RAM: file = "", define = yes, start = $1000, size = $0E00; MAIN: file = %O, define = yes, start = $A000, size = $2000, fill=yes; } SEGMENTS { ZEROPAGE: load = ZP, type = zp; LOADADDR: load = LOADADDR, type = ro; EXEHDR: load = HEADER, type = ro; STARTUP: load = MAIN, type = ro; ONCE: load = MAIN, type = ro, optional = yes; CODE: load = MAIN, type = ro; RODATA: load = MAIN, type = ro; DATA: load = MAIN, run = RAM, type = rw, define = yes; BSS: load = RAM, type = bss, define = yes; } FEATURES { CONDES: type = constructor, label = __CONSTRUCTOR_TABLE__, count = __CONSTRUCTOR_COUNT__, segment = ONCE; CONDES: type = destructor, label = __DESTRUCTOR_TABLE__, count = __DESTRUCTOR_COUNT__, segment = RODATA; CONDES: type = interruptor, label = __INTERRUPTOR_TABLE__, count = __INTERRUPTOR_COUNT__, segment = RODATA, import = __CALLIRQ__; } ================================================ FILE: src/cross_lib/cfg/cc65/vic20.cfg ================================================ SYMBOLS { __LOADADDR__: type = import; __EXEHDR__: type = import; __STACKSIZE__: type = weak, value = $0400; # 1k stack } MEMORY { ZP: file = "", define = yes, start = $0002, size = $001A; LOADADDR: file = %O, start = $0FFF, size = $0002; HEADER: file = %O, start = $1001, size = $000C; MAIN: file = %O, define = yes, start = $100D, size = $0DF3 - __STACKSIZE__; } SEGMENTS { ZEROPAGE: load = ZP, type = zp; LOADADDR: load = LOADADDR, type = ro; EXEHDR: load = HEADER, type = ro; STARTUP: load = MAIN, type = ro; LOWCODE: load = MAIN, type = ro, optional = yes; ONCE: load = MAIN, type = ro, optional = yes; CODE: load = MAIN, type = ro; RODATA: load = MAIN, type = ro; DATA: load = MAIN, type = rw; INIT: load = MAIN, type = bss; BSS: load = MAIN, type = bss, define = yes; } FEATURES { CONDES: type = constructor, label = __CONSTRUCTOR_TABLE__, count = __CONSTRUCTOR_COUNT__, segment = ONCE; CONDES: type = destructor, label = __DESTRUCTOR_TABLE__, count = __DESTRUCTOR_COUNT__, segment = RODATA; CONDES: type = interruptor, label = __INTERRUPTOR_TABLE__, count = __INTERRUPTOR_COUNT__, segment = RODATA, import = __CALLIRQ__; } ================================================ FILE: src/cross_lib/cfg/cc65/vic20_unexpanded_gfx.cfg ================================================ # ZP: file = "", define = yes, start = $0002, size = $001A; # LOADADDR: file = %O, start = $0FFF, size = $0002; # HEADER: file = %O, start = $1001, size = $000C; # MAIN: file = %O, define = yes, start = $100D, size = $0DF3 - __STACKSIZE__; # Memory configuration for the VIC-20 with 16K RAM Cartridge # Contributed by Stefan Haubenthal SYMBOLS { __LOADADDR__: type = import; __EXEHDR__: type = import; __STACKSIZE__: type = weak, value = $0010; # small stack __GFX_START__: type = weak, value = $1DD0; } MEMORY { ZP: file = "", define = yes, start = $0002, size = $001A; LOADADDR: file = %O, start = $0FFF, size = $0002; HEADER: file = %O, start = $1001, size = $000C; MAIN: file = %O, define = yes, start = $100D, fill = yes, size = __GFX_START__ - $100D - __STACKSIZE__; DUMMY: file = %O, start = __GFX_START__ - __STACKSIZE__ - 1, fill = yes, size = __STACKSIZE__; CHARMEM: file = %O, start = __GFX_START__, size = $0030, type = rw, define = yes, fill = yes; } SEGMENTS { ZEROPAGE: load = ZP, type = zp; LOADADDR: load = LOADADDR, type = ro; EXEHDR: load = HEADER, type = ro; STARTUP: load = MAIN, type = ro; LOWCODE: load = MAIN, type = ro, optional = yes; ONCE: load = MAIN, type = ro, optional = yes; CODE: load = MAIN, type = ro; RODATA: load = MAIN, type = ro; DATA: load = MAIN, type = rw; INIT: load = MAIN, type = bss; BSS: load = MAIN, type = bss, define = yes; UDCCHAR: load = CHARMEM, type = ro, define = yes, optional = no; } FEATURES { CONDES: type = constructor, label = __CONSTRUCTOR_TABLE__, count = __CONSTRUCTOR_COUNT__, segment = ONCE; CONDES: type = destructor, label = __DESTRUCTOR_TABLE__, count = __DESTRUCTOR_COUNT__, segment = RODATA; CONDES: type = interruptor, label = __INTERRUPTOR_TABLE__, count = __INTERRUPTOR_COUNT__, segment = RODATA, import = __CALLIRQ__; } ================================================ FILE: src/cross_lib/cfg/cc65/vic20_unexpanded_gfx_low_stack.cfg ================================================ # ZP: file = "", define = yes, start = $0002, size = $001A; # LOADADDR: file = %O, start = $0FFF, size = $0002; # HEADER: file = %O, start = $1001, size = $000C; # MAIN: file = %O, define = yes, start = $100D, size = $0DF3 - __STACKSIZE__; # Memory configuration for the VIC-20 with 16K RAM Cartridge # Contributed by Stefan Haubenthal SYMBOLS { __LOADADDR__: type = import; __EXEHDR__: type = import; __STACKSIZE__: type = weak, value = $0010; # small stack __GFX_START__: type = weak, value = $1DD0; } MEMORY { ZP: file = "", define = yes, start = $0002, size = $001A; LOADADDR: file = %O, start = $0FFF, size = $0002; LOWCPUSTACK: start = $0100, size = $0070; HEADER: file = %O, start = $1001, size = $000C; MAIN: file = %O, define = yes, start = $100D, fill = yes, size = __GFX_START__ - $100D - __STACKSIZE__; DUMMY: file = %O, start = __GFX_START__ - __STACKSIZE__ - 1, fill = yes, size = __STACKSIZE__; CHARMEM: file = %O, start = __GFX_START__, size = $0030, type = rw, define = yes, fill = yes; } SEGMENTS { ZEROPAGE: load = ZP, type = zp; LOADADDR: load = LOADADDR, type = ro; EXEHDR: load = HEADER, type = ro; STARTUP: load = MAIN, type = ro; LOWCODE: load = MAIN, type = ro, optional = yes; ONCE: load = MAIN, type = ro, optional = yes; CODE: load = MAIN, type = ro; RODATA: load = MAIN, type = ro; DATA: load = MAIN, type = rw; INIT: load = LOWCPUSTACK, type = bss; BSS: load = LOWCPUSTACK, type = bss, define = yes; UDCCHAR: load = CHARMEM, type = ro, define = yes, optional = no; } FEATURES { CONDES: type = constructor, label = __CONSTRUCTOR_TABLE__, count = __CONSTRUCTOR_COUNT__, segment = ONCE; CONDES: type = destructor, label = __DESTRUCTOR_TABLE__, count = __DESTRUCTOR_COUNT__, segment = RODATA; CONDES: type = interruptor, label = __INTERRUPTOR_TABLE__, count = __INTERRUPTOR_COUNT__, segment = RODATA, import = __CALLIRQ__; } ================================================ FILE: src/cross_lib/cfg/gcc4ti99/linkfile.cfg ================================================ MEMORY { cart_rom (rx) : ORIGIN = 0x6000, LENGTH = 0x2000 /* cartridge ROM, read-only */ lower_exp (wx) : ORIGIN = 0x2080, LENGTH = 0x1F80 /* 8k - 128 bytes */ higher_exp (wx) : ORIGIN = 0xa000, LENGTH = 0x6000 scratchpad (wx) : ORIGIN = 0x8320, LENGTH = 0x00e0 /* 32b is for workspace */ } SECTIONS { .text 0x6000 : {*(.text)} .ctors ALIGN(2) : { __CTOR_START = .; *(.ctors);} __CTOR_END = .; __VAL_START = .; .data 0xa000 : { __DATA_START = .; *(.data);} __DATA_END = .; .bss ALIGN(2) : { __BSS_START = .; *(.bss);} __BSS_END = .; } ================================================ FILE: src/cross_lib/cfg/vbcc/bbc/bbc ================================================ -cc=vbcc6502 -I"%%VBCC%%"/targets/6502-bbc/include -quiet %s -o= %s %s -O=%ld -ccv=vbcc6502 -I"%%VBCC%%"/targets/6502-bbc/include %s -o= %s %s -O=%ld -unsigned-char -mainargs -mask-opt -as=vasm6502_oldstyle -quiet -nowarn=62 -opt-branch -ldots -Fvobj %s -o %s -asv=vasm6502_oldstyle -nowarn=62 -Fvobj -opt-branch -ldots %s -o %s -rm=del %s -rmv=del %s -cpr=vcpr6502 -quiet %s %s -cprv=vcpr6502 %s %s -ld=vlink -m -b bbc -Cvbcc -T./cross_lib/cfg/vbcc/bbc/vlink.cmd -L"%%VBCC%%"/targets/6502-bbc/lib "%%VBCC%%"/targets/6502-bbc/lib/startup.o %s %s -o %s -lvc -ldv=vlink -m -b bbc -Cvbcc -T./cross_lib/cfg/vbcc/bbc/vlink.cmd -L"%%VBCC%%"/targets/6502-bbc/lib "%%VBCC%%"/targets/6502-bbc/lib/startup.o %s %s -o %s -lvc -Mmapfile -l2=vlink -m -b bbc -Cvbcc -T./cross_lib/cfg/vbcc/bbc/vlink.cmd -L"%%VBCC%%"/targets/6502-bbc/lib %s %s -o %s -l2v=vlink -m -b bbc -Cvbcc -T./cross_lib/cfg/vbcc/bbc/vlink.cmd -L"%%VBCC%%"/targets/6502-bbc/lib %s %s -o %s -Mmapfile ================================================ FILE: src/cross_lib/cfg/vbcc/bbc/bbc2 ================================================ -cc=vbcc6502 -I"%%VBCC%%"/targets/6502-bbc/include -quiet %s -o= %s %s -O=%ld -ccv=vbcc6502 -I"%%VBCC%%"/targets/6502-bbc/include %s -o= %s %s -O=%ld -unsigned-char -mainargs -mask-opt -as=vasm6502_oldstyle -quiet -nowarn=62 -opt-branch -ldots -Fvobj %s -o %s -asv=vasm6502_oldstyle -nowarn=62 -Fvobj -opt-branch -ldots %s -o %s -rm=del %s -rmv=del %s -cpr=vcpr6502 -quiet %s %s -cprv=vcpr6502 %s %s -ld=vlink -m -b bbc -Cvbcc -T./cross_lib/cfg/vbcc/bbc/vlink2.cmd -L"%%VBCC%%"/targets/6502-bbc/lib "%%VBCC%%"/targets/6502-bbc/lib/startup.o %s %s -o %s -lvc -ldv=vlink -m -b bbc -Cvbcc -T./cross_lib/cfg/vbcc/bbc/vlink2.cmd -L"%%VBCC%%"/targets/6502-bbc/lib "%%VBCC%%"/targets/6502-bbc/lib/startup.o %s %s -o %s -lvc -Mmapfile -l2=vlink -m -b bbc -Cvbcc -T./cross_lib/cfg/vbcc/bbc/vlink2.cmd -L"%%VBCC%%"/targets/6502-bbc/lib %s %s -o %s -l2v=vlink -m -b bbc -Cvbcc -T./cross_lib/cfg/vbcc/bbc/vlink2.cmd -L"%%VBCC%%"/targets/6502-bbc/lib %s %s -o %s -Mmapfile ================================================ FILE: src/cross_lib/cfg/vbcc/bbc/bbc2_posix ================================================ -cc=vbcc6502 -I$VBCC/targets/6502-bbc/include -quiet %s -o= %s %s -O=%ld -ccv=vbcc6502 -I$VBCC/targets/6502-bbc/include %s -o= %s %s -O=%ld -unsigned-char -mainargs -mask-opt -as=vasm6502_oldstyle -quiet -nosym -vobj3 -nowarn=62 -opt-branch -ldots -Fvobj %s -o %s -asv=vasm6502_oldstyle -nosym -vobj3 -nowarn=62 -Fvobj -opt-branch -ldots %s -o %s -rm=rm %s -rmv=rm %s -cpr=vcpr6502 -quiet %s %s -cprv=vcpr6502 %s %s -ld=vlink -m -b bbc -Cvbcc -T./cross_lib/cfg/vbcc/bbc/vlink2.cmd -L$VBCC/targets/6502-bbc/lib $VBCC/targets/6502-bbc/lib/startup.o %s %s -o %s -lvc -ldv=vlink -m -b bbc -Cvbcc -T./cross_lib/cfg/vbcc/bbc/vlink2.cmd -L$VBCC/targets/6502-bbc/lib $VBCC/targets/6502-bbc/lib/startup.o %s %s -o %s -lvc -l2=vlink -m -b bbc -Cvbcc -T./cross_lib/cfg/vbcc/bbc/vlink2.cmd -L$VBCC/targets/6502-bbc/lib %s %s -o %s -l2v=vlink -m -b bbc -Cvbcc -T./cross_lib/cfg/vbcc/bbc/vlink2.cmd -L$VBCC/targets/6502-bbc/lib %s %s -o %s ================================================ FILE: src/cross_lib/cfg/vbcc/bbc/bbc5 ================================================ -cc=vbcc6502 -I"%%VBCC%%"/targets/6502-bbc/include -quiet %s -o= %s %s -O=%ld -ccv=vbcc6502 -I"%%VBCC%%"/targets/6502-bbc/include %s -o= %s %s -O=%ld -unsigned-char -mainargs -mask-opt -as=vasm6502_oldstyle -quiet -nowarn=62 -opt-branch -ldots -Fvobj %s -o %s -asv=vasm6502_oldstyle -nowarn=62 -Fvobj -opt-branch -ldots %s -o %s -rm=del %s -rmv=del %s -cpr=vcpr6502 -quiet %s %s -cprv=vcpr6502 %s %s -ld=vlink -m -b bbc -Cvbcc -T./cross_lib/cfg/vbcc/bbc/vlink5.cmd -L"%%VBCC%%"/targets/6502-bbc/lib "%%VBCC%%"/targets/6502-bbc/lib/startup.o %s %s -o %s -lvc -ldv=vlink -m -b bbc -Cvbcc -T./cross_lib/cfg/vbcc/bbc/vlink5.cmd -L"%%VBCC%%"/targets/6502-bbc/lib "%%VBCC%%"/targets/6502-bbc/lib/startup.o %s %s -o %s -lvc -Mmapfile -l2=vlink -m -b bbc -Cvbcc -T./cross_lib/cfg/vbcc/bbc/vlink5.cmd -L"%%VBCC%%"/targets/6502-bbc/lib %s %s -o %s -l2v=vlink -m -b bbc -Cvbcc -T./cross_lib/cfg/vbcc/bbc/vlink5.cmd -L"%%VBCC%%"/targets/6502-bbc/lib %s %s -o %s -Mmapfile ================================================ FILE: src/cross_lib/cfg/vbcc/bbc/bbc5_posix ================================================ -cc=vbcc6502 -I$VBCC/targets/6502-bbc/include -quiet %s -o= %s %s -O=%ld -ccv=vbcc6502 -I$VBCC/targets/6502-bbc/include %s -o= %s %s -O=%ld -unsigned-char -mainargs -mask-opt -as=vasm6502_oldstyle -quiet -nosym -vobj3 -nowarn=62 -opt-branch -ldots -Fvobj %s -o %s -asv=vasm6502_oldstyle -nosym -vobj3 -nowarn=62 -Fvobj -opt-branch -ldots %s -o %s -rm=rm %s -rmv=rm %s -cpr=vcpr6502 -quiet %s %s -cprv=vcpr6502 %s %s -ld=vlink -m -b bbc -Cvbcc -T./cross_lib/cfg/vbcc/bbc/vlink5.cmd -L$VBCC/targets/6502-bbc/lib $VBCC/targets/6502-bbc/lib/startup.o %s %s -o %s -lvc -ldv=vlink -m -b bbc -Cvbcc -T./cross_lib/cfg/vbcc/bbc/vlink5.cmd -L$VBCC/targets/6502-bbc/lib $VBCC/targets/6502-bbc/lib/startup.o %s %s -o %s -lvc -l2=vlink -m -b bbc -Cvbcc -T./cross_lib/cfg/vbcc/bbc/vlink5.cmd -L$VBCC/targets/6502-bbc/lib %s %s -o %s -l2v=vlink -m -b bbc -Cvbcc -T./cross_lib/cfg/vbcc/bbc/vlink5.cmd -L$VBCC/targets/6502-bbc/lib %s %s -o %s ================================================ FILE: src/cross_lib/cfg/vbcc/bbc/bbc7 ================================================ -cc=vbcc6502 -I"%%VBCC%%"/targets/6502-bbc/include -quiet %s -o= %s %s -O=%ld -ccv=vbcc6502 -I"%%VBCC%%"/targets/6502-bbc/include %s -o= %s %s -O=%ld -unsigned-char -mainargs -mask-opt -as=vasm6502_oldstyle -quiet -nowarn=62 -opt-branch -ldots -Fvobj %s -o %s -asv=vasm6502_oldstyle -nowarn=62 -Fvobj -opt-branch -ldots %s -o %s -rm=del %s -rmv=del %s -cpr=vcpr6502 -quiet %s %s -cprv=vcpr6502 %s %s -ld=vlink -m -b bbc -Cvbcc -T./cross_lib/cfg/vbcc/bbc/vlink7.cmd -L"%%VBCC%%"/targets/6502-bbc/lib "%%VBCC%%"/targets/6502-bbc/lib/startup.o %s %s -o %s -lvc -ldv=vlink -m -b bbc -Cvbcc -T./cross_lib/cfg/vbcc/bbc/vlink7.cmd -L"%%VBCC%%"/targets/6502-bbc/lib "%%VBCC%%"/targets/6502-bbc/lib/startup.o %s %s -o %s -lvc -Mmapfile -l2=vlink -m -b bbc -Cvbcc -T./cross_lib/cfg/vbcc/bbc/vlink7.cmd -L"%%VBCC%%"/targets/6502-bbc/lib %s %s -o %s -l2v=vlink -m -b bbc -Cvbcc -T./cross_lib/cfg/vbcc/bbc/vlink7.cmd -L"%%VBCC%%"/targets/6502-bbc/lib %s %s -o %s -Mmapfile ================================================ FILE: src/cross_lib/cfg/vbcc/bbc/bbc7_posix ================================================ -cc=vbcc6502 -I$VBCC/targets/6502-bbc/include -quiet %s -o= %s %s -O=%ld -ccv=vbcc6502 -I$VBCC/targets/6502-bbc/include %s -o= %s %s -O=%ld -unsigned-char -mainargs -mask-opt -as=vasm6502_oldstyle -quiet -nosym -vobj3 -nowarn=62 -opt-branch -ldots -Fvobj %s -o %s -asv=vasm6502_oldstyle -nosym -vobj3 -nowarn=62 -Fvobj -opt-branch -ldots %s -o %s -rm=rm %s -rmv=rm %s -cpr=vcpr6502 -quiet %s %s -cprv=vcpr6502 %s %s -ld=vlink -m -b bbc -Cvbcc -T./cross_lib/cfg/vbcc/bbc/vlink7.cmd -L$VBCC/targets/6502-bbc/lib $VBCC/targets/6502-bbc/lib/startup.o %s %s -o %s -lvc -ldv=vlink -m -b bbc -Cvbcc -T./cross_lib/cfg/vbcc/bbc/vlink7.cmd -L$VBCC/targets/6502-bbc/lib $VBCC/targets/6502-bbc/lib/startup.o %s %s -o %s -lvc -l2=vlink -m -b bbc -Cvbcc -T./cross_lib/cfg/vbcc/bbc/vlink7.cmd -L$VBCC/targets/6502-bbc/lib %s %s -o %s -l2v=vlink -m -b bbc -Cvbcc -T./cross_lib/cfg/vbcc/bbc/vlink7.cmd -L$VBCC/targets/6502-bbc/lib %s %s -o %s ================================================ FILE: src/cross_lib/cfg/vbcc/bbc/bbc_posix ================================================ -cc=vbcc6502 -I$VBCC/targets/6502-bbc/include -quiet %s -o= %s %s -O=%ld -ccv=vbcc6502 -I$VBCC/targets/6502-bbc/include %s -o= %s %s -O=%ld -unsigned-char -mainargs -mask-opt -as=vasm6502_oldstyle -quiet -nosym -vobj3 -nowarn=62 -opt-branch -ldots -Fvobj %s -o %s -asv=vasm6502_oldstyle -nosym -vobj3 -nowarn=62 -Fvobj -opt-branch -ldots %s -o %s -rm=rm %s -rmv=rm %s -cpr=vcpr6502 -quiet %s %s -cprv=vcpr6502 %s %s -ld=vlink -m -b bbc -Cvbcc -T./cross_lib/cfg/vbcc/bbc/vlink.cmd -L$VBCC/targets/6502-bbc/lib $VBCC/targets/6502-bbc/lib/startup.o %s %s -o %s -lvc -ldv=vlink -m -b bbc -Cvbcc -T./cross_lib/cfg/vbcc/bbc/vlink.cmd -L$VBCC/targets/6502-bbc/lib $VBCC/targets/6502-bbc/lib/startup.o %s %s -o %s -lvc -l2=vlink -m -b bbc -Cvbcc -T./cross_lib/cfg/vbcc/bbc/vlink.cmd -L$VBCC/targets/6502-bbc/lib %s %s -o %s -l2v=vlink -m -b bbc -Cvbcc -T./cross_lib/cfg/vbcc/bbc/vlink.cmd -L$VBCC/targets/6502-bbc/lib %s %s -o %s ================================================ FILE: src/cross_lib/cfg/vbcc/bbc/bbcmaster ================================================ -cc=vbcc6502 -I"%%VBCC%%"/targets/6502-bbc/include -quiet %s -o= %s %s -O=%ld -ccv=vbcc6502 -I"%%VBCC%%"/targets/6502-bbc/include %s -o= %s %s -O=%ld -unsigned-char -mainargs -mask-opt -as=vasm6502_oldstyle -quiet -nowarn=62 -opt-branch -ldots -Fvobj %s -o %s -asv=vasm6502_oldstyle -nowarn=62 -Fvobj -opt-branch -ldots %s -o %s -rm=del %s -rmv=del %s -cpr=vcpr6502 -quiet %s %s -cprv=vcpr6502 %s %s -ld=vlink -m -b bbc -Cvbcc -T./cross_lib/cfg/vbcc/bbc/vlink7.cmd -L"%%VBCC%%"/targets/6502-bbc/lib "%%VBCC%%"/targets/6502-bbc/lib/startup.o %s %s -o %s -lvc -ldv=vlink -m -b bbc -Cvbcc -T./cross_lib/cfg/vbcc/bbc/vlink7.cmd -L"%%VBCC%%"/targets/6502-bbc/lib "%%VBCC%%"/targets/6502-bbc/lib/startup.o %s %s -o %s -lvc -Mmapfile -l2=vlink -m -b bbc -Cvbcc -T./cross_lib/cfg/vbcc/bbc/vlink7.cmd -L"%%VBCC%%"/targets/6502-bbc/lib %s %s -o %s -l2v=vlink -m -b bbc -Cvbcc -T./cross_lib/cfg/vbcc/bbc/vlink7.cmd -L"%%VBCC%%"/targets/6502-bbc/lib %s %s -o %s -Mmapfile ================================================ FILE: src/cross_lib/cfg/vbcc/bbc/vlink.cmd ================================================ HIMEM = 0x7C00; STACKSIZE = 0x100; STACKSTART = HIMEM - STACKSIZE; OSHWM = 0x1900; MEMORY { zero : org = 0 , len = 0x90 ram : org = OSHWM, len = (STACKSTART-OSHWM) } SECTIONS { text : {*(text)} >ram .dtors : { *(.dtors) } > ram .ctors : { *(.ctors) } > ram rodata : {*(rodata)} >ram data: {*(data)} >ram init : {*(init)} >ram zpage (NOLOAD) : {*(zpage) *(zp1) *(zp2)} >zero bss (NOLOAD): {*(bss)} >ram __BB = ADDR(bss); __BE = ADDR(bss)+SIZEOF(bss); ___heap = ADDR(bss)+SIZEOF(bss); ___heapend = STACKSTART-1; } ================================================ FILE: src/cross_lib/cfg/vbcc/bbc/vlink2.cmd ================================================ HIMEM = 0x3000; STACKSIZE = 0x040; STACKSTART = HIMEM - STACKSIZE; OSHWM = 0x1900; MEMORY { zero : org = 0 , len = 0x90 ram : org = OSHWM, len = (STACKSTART-OSHWM) } SECTIONS { text : {*(text)} >ram .dtors : { *(.dtors) } > ram .ctors : { *(.ctors) } > ram rodata : {*(rodata)} >ram data: {*(data)} >ram init : {*(init)} >ram zpage (NOLOAD) : {*(zpage) *(zp1) *(zp2)} >zero bss (NOLOAD): {*(bss)} >ram __BB = ADDR(bss); __BE = ADDR(bss)+SIZEOF(bss); ___heap = ADDR(bss)+SIZEOF(bss); ___heapend = STACKSTART-1; } ================================================ FILE: src/cross_lib/cfg/vbcc/bbc/vlink5.cmd ================================================ HIMEM = 0x5800; STACKSIZE = 0x040; STACKSTART = HIMEM - STACKSIZE; OSHWM = 0x1900; MEMORY { zero : org = 0 , len = 0x90 ram : org = OSHWM, len = (STACKSTART-OSHWM) } SECTIONS { text : {*(text)} >ram .dtors : { *(.dtors) } > ram .ctors : { *(.ctors) } > ram rodata : {*(rodata)} >ram data: {*(data)} >ram init : {*(init)} >ram zpage (NOLOAD) : {*(zpage) *(zp1) *(zp2)} >zero bss (NOLOAD): {*(bss)} >ram __BB = ADDR(bss); __BE = ADDR(bss)+SIZEOF(bss); ___heap = ADDR(bss)+SIZEOF(bss); ___heapend = STACKSTART-1; } ================================================ FILE: src/cross_lib/cfg/vbcc/bbc/vlink7.cmd ================================================ HIMEM = 0x7C00; STACKSIZE = 0x040; STACKSTART = HIMEM - STACKSIZE; OSHWM = 0x1900; MEMORY { zero : org = 0 , len = 0x90 ram : org = OSHWM, len = (STACKSTART-OSHWM) } SECTIONS { text : {*(text)} >ram .dtors : { *(.dtors) } > ram .ctors : { *(.ctors) } > ram rodata : {*(rodata)} >ram data: {*(data)} >ram init : {*(init)} >ram zpage (NOLOAD) : {*(zpage) *(zp1) *(zp2)} >zero bss (NOLOAD): {*(bss)} >ram __BB = ADDR(bss); __BE = ADDR(bss)+SIZEOF(bss); ___heap = ADDR(bss)+SIZEOF(bss); ___heapend = STACKSTART-1; } ================================================ FILE: src/cross_lib/cfg/z88dk/zpragma.inc ================================================ // It next exits #pragma-define:CLIB_EXIT_STACK_SIZE=0 // Do not initialize BSS #pragma-define:CRT_INITIALIZE_BSS=0 // move the stack to available memory #pragma output REGISTER_SP = -1 // must be placed somewhere in the 16k ram // halt program on exit, no need to play well with basic #pragma output CRT_ON_EXIT = 0x10001 // eliminate the malloc heap #pragma output CLIB_MALLOC_HEAP_SIZE = 0 // eliminate the stdio heap (no files can be opened) #pragma output CLIB_STDIO_HEAP_SIZE = 0 // eliminate unused printf converters #pragma printf = "%c %u" // placed used converters here, empty string if none ================================================ FILE: src/cross_lib/cfg/z88dk/zpragma_clib.inc ================================================ // It next exits #pragma-define:CLIB_EXIT_STACK_SIZE=0 // Do not initialize BSS #pragma-define:CRT_INITIALIZE_BSS=0 // move the stack to available memory //#pragma output REGISTER_SP = -1 // must be placed somewhere in the 16k ram // halt program on exit, no need to play well with basic #pragma output CRT_ON_EXIT = 0x10001 // eliminate the malloc heap #pragma output CLIB_MALLOC_HEAP_SIZE = 0 // eliminate the stdio heap (no files can be opened) #pragma output CLIB_STDIO_HEAP_SIZE = 0 // eliminate unused printf converters #pragma printf = "%0u" // placed used converters here, empty string if none ================================================ FILE: src/cross_lib/cfg/z88dk/zpragma_clib_no_printf.inc ================================================ // It next exits #pragma-define:CLIB_EXIT_STACK_SIZE=0 // Do not initialize BSS #pragma-define:CRT_INITIALIZE_BSS=0 // move the stack to available memory #pragma output REGISTER_SP = -1 // must be placed somewhere in the 16k ram // halt program on exit, no need to play well with basic #pragma output CRT_ON_EXIT = 0x10001 // eliminate the malloc heap #pragma output CLIB_MALLOC_HEAP_SIZE = 0 // eliminate the stdio heap (no files can be opened) #pragma output CLIB_STDIO_HEAP_SIZE = 0 // eliminate unused printf converters //#pragma printf = "" // placed used converters here, empty string if none ================================================ FILE: src/cross_lib/cfg/z88dk/zpragma_sms.inc ================================================ // Standard SMS Header #pragma output SMS_HDR_PRODUCT_CODE = 107026 #pragma output SMS_HDR_VERSION = 1 #pragma output SMS_HDR_REGION = 0x3 #pragma output SMS_HDR_ROM_SIZE = 0x1 // ignored; rom size is always set to 32k // SDSC Header - not generated if no SDSC pragmas are present #pragma output SDSC_HDR_VERSION = 199 #pragma output SDSC_HDR_DATE = 20170416 // if omitted current date is used #pragma redirect SDSC_HDR_AUTHOR = _author // character string in program #pragma redirect SDSC_HDR_NAME = _name // character string in program #pragma redirect SDSC_HDR_DESCRIPTION = _description // character string in program // Eliminate Unused Printf Converters #pragma printf = "" // generates a reference to the printf core so only employ if actually using the printf() family // Output Terminal Options #pragma output CRT_OTERM_CHAR_PATTERN_OFFSET = -32 // ascii code 32 of the font will be mapped to tile 0 #pragma output CRT_OTERM_BACKGROUND_CHAR = 0 // background tile is an absolute tile 0-511 #pragma output CRT_OTERM_WINDOW_X = 4 #pragma output CRT_OTERM_WINDOW_WIDTH = 24 #pragma output CRT_OTERM_WINDOW_Y = 4 #pragma output CRT_OTERM_WINDOW_HEIGHT = 16 ================================================ FILE: src/cross_lib/cross_lib.h ================================================ /* --------------------------------------------------------------------------------------- */ // // CROSS CHASE by Fabrizio Caruso // // Fabrizio_Caruso@hotmail.com // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from // the use of this software. // Permission is granted to anyone to use this software for non-commercial applications, // subject to the following restrictions: // 1. The origin of this software must not be misrepresented; you must not // claim that you wrote the original software. If you use this software in // a product, an acknowledgment in the product documentation would be // appreciated but is not required. // 2. Altered source versions must be plainly marked as such, and must not // be misrepresented as being the original software. // 3. This notice may not be removed or altered from any source distribution. /* --------------------------------------------------------------------------------------- */ #ifndef _CROSS_LIB_H #define _CROSS_LIB_H #if !defined(__NO_GRAPHICS) #include "standard_libs.h" #endif #if !defined EXIT_SUCCESS #define EXIT_SUCCESS 0 #endif #if !defined(_TARGET_SETTINGS) #define _TARGET_SETTINGS #if !defined(__COCO3__) && !defined(__COCO__) && !defined(__DRAGON__) && !defined(__MO5__) && !defined(__TO7__) \ && !defined(__SUPERVISION__) && !defined(__MC10__) && !defined(__LCC1802__) && !defined(__ATARI_LYNX__) \ && !(defined(__MSX__) && defined(__MEMORY_MAPPED_GRAPHICS)) \ && !defined(__SVI__) \ && !defined(__ENTERPRISE__) \ && !defined(__ABC800__) \ && !(defined(__KC__) && defined(__Z88DK_SPRITES_GRAPHICS)) \ && !(defined(__OSBORNE1__) && defined(__Z88DK_SPRITES_GRAPHICS)) \ && !defined(__EINSTEIN__) \ && !defined(__SRR__) \ && !defined(__NCURSES__) \ && !defined(__TERMINAL__) \ && !defined(__MZ2500__) \ && !defined(__VECTREX__) \ && !defined(ACK) \ && !defined(__STDIO) && !defined(__BBC_GRAPHICS) #define __INCLUDE_CONIO_H #endif #if !defined(__BACKGROUND_COLOR) #define __BACKGROUND_COLOR 0 #endif // This may be different on each target #if !defined(_XL_NUMBER_OF_TILES) #define _XL_NUMBER_OF_TILES 27 #endif #if defined(ACK) || defined(__NCURSES__) || defined(__LCC1802__) // #elif defined(__TI99__) // #elif defined(__CC6303__) // #elif defined(__SCCZ80) || defined(__SDCC) #define __Z88DK__ #else // #endif #if !defined(_XL_NO_SMALL_LETTERS) # if defined(__PV1000_GRAPHICS) || defined(__COCO3__) || defined(__COCO__) || defined(__DRAGON__) \ || (defined(__C64__) && defined(__MEMORY_MAPPED_GRAPHICS)) \ || (defined(__C16__) && defined(__ALT_PRINT)) || (defined(__ATARI__) && !defined(_XL_NO_COLOR)) \ || defined(__LCC1802__) || defined(__FEWER_SPRITES) || defined(__SUPERVISION__) || (defined(__MSX__)&&defined(__MEMORY_MAPPED_GRAPHICS)) \ || defined(__ZX80__) || defined(__ZX81__) \ || (defined(__APPLE2__) && defined(__APPLE2_HGR_GRAPHICS)) || defined(__VIC20__) \ || (defined(__APPLE2__) && !defined(__APPLE2ENH__) && !defined(__APPLE2_HGR_GRAPHICS)) \ || (defined(__ATARI_LYNX__) && defined(__LYNX_TGI_GRAPHICS)) || defined(__MC10__) || defined(__TI99__) \ || (defined(__ATARI7800__) && !defined(_XL_NO_COLOR)) || defined(__TERMINAL__) #define _XL_NO_SMALL_LETTERS #endif #endif #if !defined(_XL_TILE_X_SIZE) #if defined(_XL_NO_UDG) #define _XL_TILE_X_SIZE 1 #elif defined(__ORIC__) || defined(__ATMOS__) \ || defined(__COMX__) || defined(__PECOM__) || defined(__MICRO__) #define _XL_TILE_X_SIZE 6 #elif defined(__APPLE2__) || defined(__APPLE2__) #define _XL_TILE_X_SIZE 7 #else #define _XL_TILE_X_SIZE 8 #endif #endif #if !defined(_XL_TILE_Y_SIZE) #if defined(_XL_NO_UDG) #define _XL_TILE_Y_SIZE 1 #elif (defined(__COMX__) || defined(__PECOM__) || defined(__MICRO__)) && !defined(NTSC) #define _XL_TILE_Y_SIZE 9 #elif (defined(__MC10__) && defined(__BIT_MAPPED_4_GRAPHICS)) || defined(__ATARI_LYNX__) #define _XL_TILE_Y_SIZE 6 #else #define _XL_TILE_Y_SIZE 8 #endif #endif #include "input_target_settings.h" #include "input_macros.h" #include "display_target_color.h" #include "color_definitions.h" #include "sound_macros.h" #include "sleep_macros.h" #include "letters.h" #include "graphics_settings.h" #include "display_macros.h" #include "tiles.h" #if !defined(__LCC1802__) #include "rand.h" #else #define _XL_RAND() rand() #endif #endif // _TARGET_SETTINGS #endif // _CROSS_LIB_H ================================================ FILE: src/cross_lib/crt/cc65/vic20/vic20_cart.crt ================================================ ; ; VIC-20 cart image with CC65 compiler suite ; Startup code ; ; Taken from https://github.com/ops/vic-cc65-cart INITMEM := $FD8D FRESTOR := $FD52 INITVIA := $FDF9 INITSK := $E518 INITVCTRS := $E45B INITBA := $E3A4 FREMSG := $E404 READY := $C474 .export _exit .export __STARTUP__ : absolute = 1 ; Mark as startup .import initlib, callmain, donelib .import zerobss, copydata .import __STACKSIZE__ ; Linker generated .import __RAM_START__, __RAM_SIZE__ ; Linker generated .importzp ST .include "zeropage.inc" ; ------------------------------------------------------------------------ .segment "LOADADDR" .export __LOADADDR__: absolute = 1 .addr *+2 .segment "STARTUP" ; Startup code .word reset .word $FEA9 ; Cart signature .byte $41,$30,"CBM" reset: jsr INITMEM ; initialise and test RAM jsr FRESTOR ; restore default I/O vectors jsr INITVIA ; initialise I/O registers jsr INITSK ; initialise hardware jsr INITVCTRS ; initialise BASIC vector table jsr INITBA ; initialise BASIC RAM locations jsr FREMSG ; print start up message and initialise memory pointers cli ; enable interrupts jsr copydata ; Clear the BSS data. jsr zerobss ; Set up the stack. lda #<(__RAM_START__ + __RAM_SIZE__) sta sp lda #>(__RAM_START__ + __RAM_SIZE__) sta sp+1 ; Set argument stack ptr ; Call the module constructors. jsr initlib ; Push the command-line arguments; and, call main(). jsr callmain ; Back from main() [this is also the exit() entry]. Run the module destructors. _exit: pha ; Save the return code on stack jsr donelib ; Place the program return code into BASIC's status variable. pla sta ST ; Back to BASIC. jmp READY ; do "READY." warm start ================================================ FILE: src/cross_lib/display/alt_print/atari_mode1_alt_print.c ================================================ #include #include #include "cross_lib.h" #if !defined(__ANTIC_MODE6_GRAPHICS) void _GOTOXY(uint8_t x, uint8_t y) { if((y)&1) { gotoxy(x+20,(y)/2); } else { gotoxy(x, (y)/2); } }; void _XL_PRINT(uint8_t x, uint8_t y, const char * str) { _GOTOXY(x,y); cprintf(str); }; #else extern uint8_t _atari_text_color; uint8_t screenCode(uint8_t ch) { if(ch==32) { return 0; } else { return ch+(_atari_text_color)-0x20u; } } void _XL_PRINT(uint8_t x, uint8_t y, const char * str) { uint8_t i = 0; while(str[i]!='\0') { DISPLAY_POKE(loc(x+i,y), screenCode(str[i])); ++i; } } void _XL_CHAR(uint8_t x, uint8_t y, char ch) { DISPLAY_POKE(loc(x,y),screenCode(ch)); } #endif void _XL_PRINTD(uint8_t x, uint8_t y, uint8_t length, uint16_t val) { uint8_t i; uint8_t digit; for(i=0;i #include "standard_libs.h" unsigned int strlen(char *str) { asm( " ldi 0xff\n" " plo R15\n" " phi R15\n" "$$loop:\n" " inc R15\n" " lda R12\n" " bnz $$loop\n" " Cretn\n"); return 0; } // TODO: This is broken with a const parameter void _XL_PRINT(uint8_t x, uint8_t y, const char * str) { #if !defined(__CIDELSA__) vidstrcpy((uint16_t) BASE_ADDR+x+y*40,(char *)str); #else vidstrcpy((uint16_t) 0xF800+REAL_XSIZE*40-40 -(uint16_t)(x+X_OFFSET)*(uint16_t)40+(y+Y_OFFSET),(char *)str); #endif } #if defined(__COMX__) && !defined(__COMX_COLOR_GRAPHICS) #define CHAR_OFFSET 96 #else #define CHAR_OFFSET 48 #endif #if !defined(__CIDELSA__) #if defined(__LCC1802_UNBUFFERED) #define _DISPLAY(x,y,ch) vidcharnobufxy(x,y, (uint8_t) (ch+CHAR_OFFSET)) #else #define _DISPLAY(x,y,ch) vidcharxy(x,y, (uint8_t) (ch+CHAR_OFFSET)) #endif #else #define _DISPLAY(__x,__y,__ch) vidcharxy(__x+X_OFFSET,__y+Y_OFFSET, (uint8_t) (__ch+CHAR_OFFSET)) #endif #define COLOR_BIT 0 #define _XL_CHAR(x,y,ch) _DISPLAY(x,y,(ch+80+COLOR_BIT)) #if !defined(__TMC600__) #define DIGIT_OFFSET 128U #else #define DIGIT_OFFSET 0U #endif void _XL_PRINTD(uint8_t x, uint8_t y, uint8_t length, uint16_t val) { uint8_t i; uint8_t digit; for(i=0;i=65) { return 64+ch; } else { return ch; } } #elif defined(__QUAD_MEMORY_MAPPED_GRAPHICS) char screenCode(char ch) { return ch-(uint8_t) 32u; } #elif defined(CBM_SCREEN_CODES) || defined(__SUPERVISION__) char screenCode(char ch) { if(ch<64) { return ch; } else { return ch-64; } return ch; } #elif (defined(__COCO__) || defined(__DRAGON__)) && !defined(__BIT_MAPPED_GRAPHICS) && !defined(__BIT_MAPPED_4_GRAPHICS) char screenCode(char ch) { if(ch==32) { return 96; } else if((ch>='0')&&(ch<='9')) { return 64+ch; } else { return ch; } } #elif defined(__TERMINAL__) char screenCode(char ch) { if(ch==32) { return 0; } else if((ch>='0')&&(ch<='9')) { return ch-48+1; } else if(ch<58) { return ch-48+1-64; } else { return ch+18-65; } } #elif ((defined(__APPLE2__) || defined(__APPLE2ENH__)) && defined(__APPLE2_HGR_GRAPHICS)) char screenCode(char ch) { if(ch==32) { return 0; } else if((ch>='0')&&(ch<='9')) { return ch-48+1; } else if(ch<58) { return ch-48+1-64; } else { return ch+18-65; } } #elif (defined(__COCO3__) && defined(__BIT_MAPPED_16_GRAPHICS)) #define _SPACE_OFFSET 13 char screenCode(char ch) { if(ch==32) { return 0+_SPACE_OFFSET; } else { return ch; } } #elif (defined(__COCO3__) || defined(__COCO__) || defined(__DRAGON__)) && (defined(__BIT_MAPPED_GRAPHICS) || defined(__BIT_MAPPED_4_GRAPHICS)) #if defined(__BIT_MAPPED_4_GRAPHICS) #define _SPACE_OFFSET 13 #else #define _SPACE_OFFSET 0 #endif char screenCode(char ch) { if(ch==32) { return 0+_SPACE_OFFSET; } else { return ch; } } #elif defined(__ZX81__) && defined(__Z88DK_SPRITES_GRAPHICS) char screenCode(char ch) { if(ch==32) { return 32; } else { return ch-32-64; } } #elif (defined(__VIC20__) && (defined(__VIC20_EXP_3K) || defined(__VIC20_EXP_8K))) char screenCode(char ch) { if(ch<64) { return 128+ch; } else { return 64+ch; } } #elif (defined(__VIC20__) && (defined(__VIC20_UNEXPANDED))) char screenCode(char ch) { if(ch<64) { return 128+ch; } else { return 192+ch; } } #elif defined(__C16__) && defined(__MEMORY_MAPPED_GRAPHICS) char screenCode(char ch) { if(ch&0x80) { return ch&0x7F; } else { if(ch<58) // TODO: Use bitwise operator <64? { return ch|64; } else { return ch; } } } #endif # if defined(__Z88DK_SPRITES_GRAPHICS) #include #include #include "display_macros.h" #define _DISPLAY(x,y,ch) \ __draw_ch(x,y,ch); #elif defined(__BUFFERED_GRAPHICS) #define _DISPLAY(x,y,ch) \ video_buffer[(y)][(x)] = (ch) #elif defined(__NO_GRAPHICS) #define _DISPLAY(x,y,ch) #elif defined(__TERMINAL__) #include "cross_lib.h" extern uint8_t _terminal_text_color; void _DISPLAY(uint8_t x, uint8_t y, uint8_t ch) { _terminal_draw(x, y, ch, _terminal_text_color); } #elif (defined(__APPLE2__)||defined(__APPLE2ENH__)) && defined(__APPLE2_HGR_GRAPHICS) #include "cross_lib.h" extern uint8_t _apple2_text_color; void _DISPLAY(uint8_t x, uint8_t y, uint8_t ch) { hgr_draw(x, y, ch, _apple2_text_color); } #elif (defined(__C16__) && defined(__MEMORY_MAPPED_GRAPHICS)) && defined(__NO_SCREEN_CODES) void _DISPLAY(uint8_t x, uint8_t y, uint8_t ch) { DISPLAY_POKE((loc(x,y)), ch); DISPLAY_POKE((loc(x,y)-1024), PEEK(0x053B)); } #elif (defined(__C16__) && defined(__MEMORY_MAPPED_GRAPHICS)) && defined(__DOUBLE_BUFFER) void _DISPLAY(uint8_t x, uint8_t y, uint8_t ch) { DISPLAY_POKE(((uint16_t) BASE_ADDR)+(1)*x+(uint8_t)((1)*y)*((uint16_t) ((XSize) + X_OFFSET)), screenCode(ch)); DISPLAY_POKE(((uint16_t) COLOR_ADDR)+(1)*x+(uint8_t)((1)*y)*((uint16_t) ((XSize) + X_OFFSET)), PEEK(0x053B)); } #elif (defined(__C16__) && defined(__MEMORY_MAPPED_GRAPHICS)) void _DISPLAY(uint8_t x, uint8_t y, uint8_t ch) { DISPLAY_POKE((loc(x,y)), screenCode(ch)); DISPLAY_POKE((loc(x,y)-1024), PEEK(0x053B)); } #elif (defined(__VIC20__) && defined(__VIC20_EXP_8K)) && !defined(_XL_NO_UDG) void _DISPLAY(uint8_t x, uint8_t y, uint8_t ch) { DISPLAY_POKE((loc(x,y)), screenCode(ch)); DISPLAY_POKE((0x8400+loc(x,y)), PEEK(0x0286)); } #elif (defined(__VIC20__) && defined(__VIC20_UNEXPANDED)) && !defined(_XL_NO_UDG) #if !defined(_XL_NO_TEXT_COLOR) void _DISPLAY(uint8_t x, uint8_t y, uint8_t ch) { DISPLAY_POKE((loc(x,y)), screenCode(ch)); DISPLAY_POKE((0x7800+loc(x,y)), PEEK(0x0286)); } #else void _DISPLAY(uint8_t x, uint8_t y, uint8_t ch) { DISPLAY_POKE((loc(x,y)), screenCode(ch)); DISPLAY_POKE((0x7800+loc(x,y)), 0x1); } #endif #elif defined(__C64__) void _DISPLAY(uint8_t x, uint8_t y, uint8_t ch) { DISPLAY_POKE((loc(x,y)), ch); DISPLAY_POKE((0x1800+loc(x,y)), PEEK(0x0286)); } #elif defined(__VGA_GRAPHICS) extern uint8_t _vga_text_color; void _DISPLAY(uint8_t x, uint8_t y, uint8_t ch) { uint8_t tile_index; if((ch>=65) && (ch<=65+25)) { tile_index = _XL_NUMBER_OF_TILES+ch-'A'; } else if ((ch>=48) && (ch<=48+9)) { tile_index = _XL_NUMBER_OF_TILES+26+ch-'0'; } else { tile_index = _XL_NUMBER_OF_TILES+26+10; } _display_tile(x, y, tile_index, _vga_text_color); } #elif defined(__BIT_MAPPED_4_GRAPHICS) #include "bit_mapped_4_graphics.h" #include "cross_lib.h" #if defined(__COCO__) || defined(__DRAGON__) #define _CHAR_OFFSET (-13) #else #define _CHAR_OFFSET 0 #endif extern uint8_t _bitmap4_text_color; void _DISPLAY(uint8_t x, uint8_t y, uint8_t ch) { _color_draw(x,y,ch+_CHAR_OFFSET,_bitmap4_text_color); } #elif defined(__BIT_MAPPED_16_GRAPHICS) #include "bit_mapped_16_graphics.h" #include "cross_lib.h" #if defined(__COCO3__) #define _CHAR_OFFSET (-13) #elif defined(__AGAT__) #define _CHAR_OFFSET (_XL_NUMBER_OF_TILES) #endif extern uint8_t _bitmap16_text_color; #if defined(__COCO3__) void _DISPLAY(uint8_t x, uint8_t y, uint8_t ch) { _color_draw(x,y,ch+_CHAR_OFFSET,_bitmap16_text_color); } #else void _DISPLAY(uint8_t x, uint8_t y, uint8_t ch) { if(ch==' ') { ch = 27; } else if (ch<65) { ch+= 27+26+1-48; } else { ch = 27+1+ch-'A'; } _color_draw(x,y,ch,_bitmap16_text_color); } #endif #elif (defined(__COCO__) || defined(__DRAGON__)) && defined(__BIT_MAPPED_GRAPHICS) #include "bit_mapped_graphics.h" #include "cross_lib.h" void _DISPLAY(uint8_t x, uint8_t y, uint8_t ch) { if(ch==0) { _XL_DELETE(x,y); } else { _XL_DRAW(x,y,(ch-13),0); } } #elif defined(__AQUARIUS__) || defined(__MEMORY_MAPPED_GRAPHICS) void _DISPLAY(uint8_t x, uint8_t y, uint8_t ch) { if(ch==0) { _XL_DELETE(x,y); } else { _XL_DRAW(x,y,ch,_XL_WHITE); } } #elif defined(__QUAD_MEMORY_MAPPED_GRAPHICS) || defined(__DUAL_MEMORY_MAPPED_GRAPHICS) void _DISPLAY(uint8_t x, uint8_t y, uint8_t ch) { _XL_DRAW(x,y,ch-32,_XL_WHITE); } #elif defined(__ATARI7800__) void _DISPLAY(uint8_t x, uint8_t y, uint8_t ch) { uint8_t adjusted_ch; if(ch==32) { adjusted_ch = 0; } else if(ch<=57) { adjusted_ch = ch-48+1; } else { adjusted_ch = ch - 65 + 10 + 1; } screen[loc(x,y)] = 2*adjusted_ch; } #else void _DISPLAY(uint8_t x, uint8_t y, uint8_t ch) { DISPLAY_POKE((loc(x,y)), (ch)); } #endif void _XL_PRINT(uint8_t x, uint8_t y, const char * str) { uint8_t i = 0; while(str[i]!='\0') { #if defined(CBM_SCREEN_CODES) || defined(__COCO3__) || defined(__COCO__) || defined(__DRAGON__) || defined(__SUPERVISION__) \ || ((defined(__APPLE2__) || defined(__APPLE2ENH__)) && defined(__APPLE2_HGR_GRAPHICS)) \ || defined(__C64__) \ || (defined(__VIC20__) && !defined(__VIC20_UNEXPANDED)) \ || defined(__QUAD_MEMORY_MAPPED_GRAPHICS) || defined(__TERMINAL__) _DISPLAY(x+i,y, screenCode(str[i])); #else _DISPLAY(x+i,y, str[i]); #endif ++i; } } void _XL_PRINTD(uint8_t x, uint8_t y, uint8_t length, uint16_t val) { uint8_t i; uint8_t digit; for(i=0;i #if defined(WIN32) #include #else #include #endif #include "display_macros.h" void _XL_PRINT(uint8_t x, uint8_t y, const char * str) { move(y,x); printw("%s",str); refresh(); } // void _XL_PRINTD(uint8_t x, uint8_t y, uint8_t len, uint16_t value) // { // } void _XL_CHAR(uint8_t x, uint8_t y, char ch) { move(y,x); cputc(ch); } ================================================ FILE: src/cross_lib/display/alt_print/simple_alt_stats.c ================================================ #include "standard_libs.h" #include "display_macros.h" #include "memory_mapped_graphics.h" #if !defined(__CC65__) && !defined(POKE) && !defined(PEEK) #define POKE(addr,val) (*(uint8_t*) (addr) = (val)) #define POKEW(addr,val) (*(unsigned*) (addr) = (val)) #define PEEK(addr) (*(uint8_t*) (addr)) #define PEEKW(addr) (*(unsigned*) (addr)) #else #include #endif #if defined(__VIC20__) && defined(__VIC20_UNEXPANDED) && !defined(_XL_NO_UDG) #define UDG_OFFSET 128 #else #define UDG_OFFSET 0 #endif #define _COLOR_ADDR 0x7800 // void _XL_PRINTD(register uint8_t x, uint8_t y, uint8_t length, register uint16_t value) void _displayShort(uint8_t x, register uint16_t value) { uint8_t i; uint8_t old; uint16_t addr; for(i=0;i<5;++i) { old = value%10; addr = BASE_ADDR+4+x-i; value -= POKE(addr,(uint8_t) ((value)%10)); value/=10; POKE(addr,UDG_OFFSET+48+old); POKE(_COLOR_ADDR+addr,0x1); } } void _XL_PRINT(uint8_t x, uint8_t y, const char * str) { uint8_t i = 0; while(str[i]!='\0') { POKE(loc(x+i,y), 192+str[i]); POKE((_COLOR_ADDR+loc(x+i,y)),0x01); ++i; } } ================================================ FILE: src/cross_lib/display/alt_print/tgi_alt_print.c ================================================ #include #include "standard_libs.h" void _XL_CHAR(uint8_t x, uint8_t y, char ch) { char str[2]; str[1]='\0'; str[0] = (uint8_t) ch; tgi_outtextxy(x*8,y*8,str); } void _XL_PRINT(uint8_t x, uint8_t y, const char * str) { tgi_outtextxy(x*8,y*8,str); } void _XL_PRINTD(uint8_t x, uint8_t y, uint8_t length, uint16_t val) { uint8_t i; uint8_t digit; char str[2]; str[1]='\0'; for(i=0;i #include "standard_libs.h" extern uint8_t _atari_lynx_text_color; #include "cross_lib.h" void _XL_CHAR(uint8_t x, uint8_t y, char ch) { if(ch==' ') { _XL_DRAW(x,y,_XL_NUMBER_OF_TILES+FONT_SIZE-1, _atari_lynx_text_color); } else { if((ch>='A')&&(ch<='Z')) { _XL_DRAW(x,y,ch-'A'+_XL_NUMBER_OF_TILES, _atari_lynx_text_color); } else { _XL_DRAW(x,y,ch-'0'+_XL_NUMBER_OF_TILES+26, _atari_lynx_text_color); } } } void _XL_PRINT(uint8_t x, uint8_t y, const char * str) { uint8_t i; i=0; while(str[i]!='\0') { // _XL_DRAW(x+i,y,str[i]-'A'+_XL_NUMBER_OF_TILES,_XL_WHITE); _XL_CHAR(x+i,y,str[i]); ++i; } } void _XL_PRINTD(uint8_t x, uint8_t y, uint8_t length, uint16_t val) { uint8_t i; uint8_t digit; for(i=0;i pink // 0 -> white // 4 -> grey // 5 -> darker grey ? // 6 -> even darker grey // 7 -> grey/red // 8 -> light red // B -> dark green // C -> dark blue // #define _XL_BLACK 0x6 #define _XL_BLACK 0x1 #define _XL_RED 0x2 #define _XL_WHITE 0x0F #define _XL_BLUE 0xD #define _XL_YELLOW 0x9 #define _XL_GREEN 0xA #define _XL_CYAN 0xE #define _XL_MAGENTA 0x3 #elif defined(__SUPERVISION__) #define _AUX_BLACK 0xFF #define _AUX_DARK_GREY 0xAA #define _AUX_LIGHT_GREY 0x55 #define _AUX_WHITE 0x00 #define _XL_BLACK _AUX_BLACK #define _XL_WHITE _AUX_BLACK #define _XL_YELLOW _AUX_DARK_GREY #define _XL_RED _AUX_LIGHT_GREY #define _XL_GREEN _AUX_BLACK #define _XL_CYAN _AUX_DARK_GREY #define _XL_BLUE _AUX_DARK_GREY #define _XL_MAGENTA _XL_RED #elif defined(__GAMATE__) #define _AUX_BLACK COLOR_BLACK #define _AUX_DARK_GREY 2 #define _AUX_LIGHT_GREY 1 #define _AUX_WHITE 0 #define _XL_BLACK _AUX_BLACK #define _XL_WHITE _AUX_BLACK #define _XL_YELLOW _AUX_DARK_GREY #define _XL_RED _AUX_LIGHT_GREY #define _XL_GREEN _AUX_BLACK #define _XL_CYAN _AUX_DARK_GREY #define _XL_BLUE _AUX_DARK_GREY #define _XL_MAGENTA _XL_RED #elif defined(__BIT_MAPPED_16_GRAPHICS) #if defined(__COCO3__) // TODO: BOGUS #define _XL_BLACK 0x00 #define _XL_WHITE 0x11 #define _XL_GREEN 0x33 #define _XL_CYAN 0x44 #define _XL_YELLOW 0x55 #define _XL_RED 0xAA #define _XL_BLUE 0xFF // TODO: Use correct definition #define _XL_MAGENTA 0xAA #elif defined(__AGAT__) #define _XL_BLACK 0x00 #define _XL_WHITE 0xFF #define _XL_GREEN 0x22 #define _XL_CYAN 0x66 #define _XL_YELLOW 0x33 #define _XL_RED 0x11 #define _XL_BLUE 0xCC #define _XL_MAGENTA 0xDD #endif #elif defined(__BBC__) && defined(__BBC_GRAPHICS) // COLORS // 0 -> black // 1 -> red // 2 -> green // 3 -> yellow // 4 -> blue // 5 -> purple // 6 -> cyan // 7 -> white #if __BBC_MODE==130 #define _XL_BLACK 0 #define _XL_RED 1 #define _XL_GREEN 2 #define _XL_YELLOW 3 #define _XL_MAGENTA 5 #define _XL_BLUE 4 #define _XL_CYAN 6 #define _XL_WHITE 7 #else #define _XL_BLACK 0 #define _XL_RED 1 #define _XL_GREEN 2 #define _XL_YELLOW 3 #define _XL_MAGENTA 5 #define _XL_BLUE 2 #define _XL_CYAN 2 #define _XL_WHITE 3 #endif #elif (defined(__COCO__) || defined(__DRAGON__) || defined(__MC10__)) && defined(__BIT_MAPPED_4_GRAPHICS) #define _COCO_RED 0xFF #define _COCO_YELLOW 0x55 #define _COCO_CYAN 0xAA #define _XL_BLACK _COCO_CYAN #define _XL_WHITE _COCO_RED #define _XL_YELLOW _COCO_YELLOW #define _XL_RED _COCO_RED #define _XL_GREEN _COCO_CYAN #define _XL_CYAN _COCO_CYAN #define _XL_BLUE _COCO_CYAN #define _XL_MAGENTA _COCO_RED #elif defined(__TI99__) #define _XL_BLACK COLOR_BLACK #define _XL_RED COLOR_LTRED #define _XL_WHITE COLOR_WHITE #define _XL_BLUE COLOR_DKBLUE #define _XL_YELLOW COLOR_YELLOW #define _XL_GREEN COLOR_GREEN #define _XL_CYAN COLOR_LTBLUE #define _XL_MAGENTA COLOR_RED #elif defined(__CC65__) || defined(__TMC600__) #define _XL_BLACK COLOR_BLACK #define _XL_RED COLOR_RED #define _XL_WHITE COLOR_WHITE #define _XL_BLUE COLOR_BLUE #define _XL_YELLOW COLOR_YELLOW #define _XL_GREEN COLOR_GREEN #if defined(COLOR_CYAN) #define _XL_CYAN COLOR_CYAN #else #define _XL_CYAN COLOR_BLUE #endif #if defined(COLOR_MAGENTA) #define _XL_MAGENTA COLOR_MAGENTA #elif defined(COLOR_PURPLE) && !defined(__C16__) #define _XL_MAGENTA COLOR_PURPLE #else #define _XL_MAGENTA COLOR_RED #endif #elif defined(__NCURSES__) || defined(__TERMINAL__) #define _XL_YELLOW 1 #define _XL_CYAN 2 #define _XL_RED 3 #define _XL_GREEN 4 #define _XL_BLUE 5 #define _XL_WHITE 6 #define _XL_MAGENTA 7 #define _XL_BLACK 8 #elif defined(__MC1000__) #if defined(__BACKGROUND_COLOR) && __BACKGROUND_COLOR==1 #define _XL_WHITE MAGENTA #define _XL_CYAN CYAN #define _XL_YELLOW MAGENTA #define _XL_GREEN CYAN #define _XL_RED RED #define _XL_BLUE BLUE #define _XL_BLACK BLUE #else #define _XL_BLACK CYAN #define _XL_WHITE RED #define _XL_YELLOW YELLOW #define _XL_RED RED #define _XL_GREEN BLUE #define _XL_CYAN BLUE #define _XL_BLUE BLUE #endif #define _XL_MAGENTA MAGENTA #elif defined(__HECTORHR__) #define _XL_WHITE 1 #define _XL_CYAN 2 #define _XL_YELLOW 1 #define _XL_GREEN 2 #define _XL_RED 3 #define _XL_BLUE 2 #define _XL_BLACK 0 #define _XL_MAGENTA 3 #elif defined(__VGA_GRAPHICS) #define _XL_WHITE 0x0F #define _XL_CYAN 0x0B #define _XL_YELLOW 0x2C #define _XL_GREEN 0x2F #define _XL_RED 0x28 #define _XL_BLUE 0x20 #define _XL_BLACK 0x00 #define _XL_MAGENTA 0x23 #else // Z88DK #define _XL_BLACK BLACK #if defined(__PC6001__) || defined(__SPC1000__) || defined(__PHC25__) || defined(__VZ__) #undef _XL_WHITE #if defined(__PHC25__) || defined(__VZ__) #define _XL_WHITE 3 #else #define _XL_WHITE 7 #endif #else #define _XL_WHITE WHITE #endif #if defined(__CPC__) || defined(__LASER500__) #define _XL_CYAN LIGHTCYAN #elif defined(__PHC25__) || defined(__VZ__) #define _XL_CYAN 5 #else #define _XL_CYAN CYAN #endif #if defined(__SMS__) || defined(__GAME_GEAR__) #define _XL_YELLOW LIGHTGRAY #else #define _XL_YELLOW YELLOW #endif #if defined(__LASER500__) #define _XL_RED LIGHTRED #define _XL_GREEN LIGHTGREEN #define _XL_MAGENTA LIGHTMAGENTA #define _XL_BLUE LIGHTBLUE #else #if defined(__SMS__) || defined(__GAME_GEAR__) #define _XL_RED LIGHTRED #define _XL_GREEN LIGHTGREEN #elif defined(__PHC25__) || defined(__VZ__) #define _XL_RED RED #define _XL_GREEN 5 #else #define _XL_RED RED #define _XL_GREEN GREEN #endif #if defined(__PHC25__) || defined(__VZ__) #define _XL_MAGENTA RED #else #define _XL_MAGENTA MAGENTA #endif #if defined(__PHC25__) || defined(__VZ__) #define _XL_BLUE 5 #else #define _XL_BLUE BLUE #endif #endif #endif #endif // _COLOR_DEFINITIONS_H ================================================ FILE: src/cross_lib/display/conio_patch.h ================================================ #ifndef _CONIO_PATCH_H #define _CONIO_PATCH_H #if defined(ACK) #define cputc(c) putchar(c) #endif #if defined(__NO_PRINT) || defined(__NO_GRAPHICS) #ifndef gotoxy #define gotoxy(x,y) #endif #ifndef clrscr #define clrscr() #endif #ifndef textcolor #define textcolor(c) #endif #else #if defined(__C16__) && defined(__MEMORY_MAPPED_GRAPHICS) // #if !defined(PEEK) && !defined(POKE) // #include // #endif #define textcolor(c) POKE(0x053B,c) #define bgcolor(c) #define bordercolor(c) #endif #if defined(__Z88DK__) || defined(ACK) #define cprintf printf #endif #if defined(__SMS__) && defined(NEW_LIB) #include #include #include #include #include #include #include #define gotoxy(x,y) \ SMS_setNextTileatXY(x,y) #define cputc(c) \ SMS_setTile(c) #endif #if defined(__Z88DK__) && !defined(__SMS__) && !defined(__ZX80__) && !defined(__ZX81__) && !defined(__LAMBDA__) #undef cputc #define cputc(c) fputc_cons(c) #endif # if defined(__ADM3A) #define gotoxy(x,y) printf("\033=%c%c",y+32,x+32); #define clrscr() printf("\032") #elif defined(__ADM3A_WITH_UNDEF) // TODO: Remove undef's below #undef gotoxy #undef clrscr #define gotoxy(x,y) printf("\033=%c%c",y+32,x+32); #define clrscr() printf("\032") #elif defined(__VT52) #undef gotoxy #define gotoxy(x,y) printf("\033Y%c%c",y+32,x+32) #undef clrscr #define clrscr() printf("\033E") #elif defined(__VT100) #undef gotoxy #define gotoxy(x,y) printf("\033[%d;%dH", y+1, x+1) #undef clrscr #define clrscr() printf("\033[2J\033[H") #elif defined(__PDP) /* + FUNCTION --------------------------------------------------- = Alternate keypad mode > Exit alternate keypad mode A Move cursor up one line B Move cursor down one line C Move cursor left one space D Move cursor right one space F Enter graphics mode G Exit graphics mode H Home cursor I Reverse scroll J Erase screen from cursor to bottom K Erase screen from cursor to end of line Z Ident terminal type [ Enter hold screen mode ] "Copy" screen to printer \ Exit hold screen mode ---------------------------------------------------- */ #include // TODO: BOGUS gotoxy #define gotoxy(x,y) // #define gotoxy(x,y) printf("\033[%d;%dH", y+1, x+1) #define clrscr() printf("\033H\033J") #elif defined(__ATARI_LYNX__) #include #include #include #define gotoxy(a,b) tgi_gotoxy(a*8,b*8) #define clrscr() tgi_clear() #define cprintf(str) tgi_outtext(str) #define cputc(c) #define textcolor tgi_setcolor #elif defined(__SUPERVISION__) #include #define gotoxy(a,b) #define clrscr() #define cprintf #define cputc(c) #define textcolor #elif defined(__ZX81__) || defined(__ZX80__) || defined(__LAMBDA__) #undef gotoxy #if defined(__ZX80__) && defined(ZX80_GEN_TV_FIELD) #undef gotoxy #undef cputc #define gotoxy(x,y) do {gen_tv_field(); zx_setcursorpos(y,x); gen_tv_field();} while(0) #define cputc(c) do { gen_tv_field(); fputc_cons(c); gen_tv_field(); } while(0) #else #define gotoxy(x,y) zx_setcursorpos(y,x) #endif #elif (defined(__MSX__) && defined(__MEMORY_MAPPED_GRAPHICS)) || (defined(__SVI__) && defined(MSX_MODE0)) #define gotoxy(a,b) printf("\033Y%c%c",b+31+1,a+31) #define clrscr() printf("\033E") #elif defined(__KC__) #include #define gotoxy(x,y) do \ { \ printf("\1B%c%c",y+0x80, x+0x80); \ \ } while(0) #define clrscr() printf("\0C"); #define cprintf printf #elif defined(__COCO__) || defined(__DRAGON__) #define cprintf printf #define gotoxy(x,y) locate(y,x) #define cputc(c) printf("%c",c) #elif defined(__MO5__) || defined(__TO7__) #include "coco.h" // uint8_t definition void SWITCH_COLOR_BANK_OFF(void); void SWITCH_COLOR_BANK_ON(void); void PUTCH(unsigned char ch); #define cputc(c) \ PUTCH(c) void gotoxy(uint8_t x, uint8_t y); #elif defined(__NCURSES__) #if defined(WIN32) #include #else #include #endif #define gotoxy(x,y) do { move(y,x); refresh(); } while(0) #define cputc(c) do { addch(c); refresh(); } while(0) #else // #endif #endif // defined(__NO_PRINT) || defined(__NO_GRAPHICS) #endif // _CONIO_PATCH_H ================================================ FILE: src/cross_lib/display/display_macros.c ================================================ /* --------------------------------------------------------------------------------------- */ // // CROSS CHASE by Fabrizio Caruso // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from // the use of this software. // Permission is granted to anyone to use this software for non-commercial applications, // subject to the following restrictions: // 1. The origin of this software must not be misrepresented; you must not // claim that you wrote the original software. If you use this software in // a product, an acknowledgment in the product documentation would be // appreciated but is not required. // 2. Altered source versions must be plainly marked as such, and must not // be misrepresented as being the original software. // 3. This notice may not be removed or altered from any source distribution. /* --------------------------------------------------------------------------------------- */ #include "cross_lib.h" #ifndef POKE #define POKE(addr,val) (*(uint8_t*) (addr) = (val)) #endif #if defined(__ATARI__) && (defined(__ANTIC_MODE6_GRAPHICS) ) extern uint16_t BASE_ADDR; #endif #if defined(__AQUARIUS__) && defined(__MEMORY_MAPPED_GRAPHICS) void _XL_SET_TEXT_COLOR(uint8_t c) { if(c==_XL_WHITE) { textcolor(WHITE); } else if(c==_XL_RED) { textcolor(RED); } else if(c==_XL_YELLOW) { textcolor(YELLOW); } else if(c==_XL_GREEN) { textcolor(GREEN); } else if(c==_XL_CYAN) { textcolor(CYAN); } else if(c==_XL_BLUE) { textcolor(BLUE); } } #endif // #if defined(__SUPERVISION__) || (defined(__COCO__) && defined(__BIT_MAPPED_4_GRAPHICS)) || (defined(__MC10__) && defined(__BIT_MAPPED_4_GRAPHICS)) #if defined(__BIT_MAPPED_4_GRAPHICS) extern uint8_t udgs[]; uint8_t _bitmap4_text_color; void _color_draw(uint8_t x, uint8_t y, uint8_t tile, uint8_t color) { uint8_t k; uint16_t offset = (_XL_TILE_Y_SIZE*(uint16_t)(tile)); // uint8_t does not work on CoCo and Dragon but it does work on Supervision uint16_t base = 2*x+BYTES_PER_LINE*_XL_TILE_Y_SIZE*(y); uint8_t udg; for(k=0;k<_XL_TILE_Y_SIZE;++k) { udg=udgs[offset++]; SV_VIDEO[base] = left_map_one_to_two(udg)&color; SV_VIDEO[++base] = right_map_one_to_two(udg)&color; base+=BYTES_PER_LINE-1; } } void _color_delete(uint8_t x, uint8_t y) { uint8_t k; uint16_t base = 2*x+BYTES_PER_LINE*_XL_TILE_Y_SIZE*(y); // uint16_t delta = 0; for(k=0;k<_XL_TILE_Y_SIZE;++k) { // SV_VIDEO[base]=0; // SV_VIDEO[base+1]=0; // base+=BYTES_PER_LINE; SV_VIDEO[base]=0; SV_VIDEO[++base]=0; base+=BYTES_PER_LINE-1; // base+=BYTES_PER_LINE; } } #elif defined(__BIT_MAPPED_16_GRAPHICS) extern uint8_t udgs[]; uint8_t _bitmap16_text_color; void _color_draw(uint8_t x, uint8_t y, uint8_t tile, uint8_t color) { uint8_t k; uint16_t offset = (_XL_TILE_Y_SIZE*(uint16_t)(tile)); // uint8_t does not work on CoCo and Dragon but it does work on Supervision uint16_t base = 4*x+BYTES_PER_LINE*_XL_TILE_Y_SIZE*(y); // uint16_t delta = 0; uint8_t udg; for(k=0;k<_XL_TILE_Y_SIZE;++k) { udg = udgs[offset++]; SV_VIDEO[base] = first_map_one_to_four(udg)&color; SV_VIDEO[++base] = second_map_one_to_four(udg)&color; SV_VIDEO[++base] = third_map_one_to_four(udg)&color; SV_VIDEO[++base] = fourth_map_one_to_four(udg)&color; // SV_VIDEO[base] = 0xFF; // SV_VIDEO[++base] = 0xFF; // SV_VIDEO[++base] = 0xFF; // SV_VIDEO[++base] = 0xFF; base+=BYTES_PER_LINE-3; } } void _color_delete(uint8_t x, uint8_t y) { uint8_t k; uint16_t base = 4*x+BYTES_PER_LINE*_XL_TILE_Y_SIZE*(y); for(k=0;k<_XL_TILE_Y_SIZE;++k) { SV_VIDEO[base]=0; SV_VIDEO[++base]=0; SV_VIDEO[++base]=0; SV_VIDEO[++base]=0; base+=BYTES_PER_LINE-3; } } #endif #if defined(__QUAD_MEMORY_MAPPED_GRAPHICS) // TODO: MOVE THIS TO GRAPHICS INIT? uint8_t quad_tile[1+27+10+26][4] = { { ' ', ' ', ' ', ' '}, // 32 [SPACE] {_TILE_0_0,_TILE_0_1,_TILE_0_2,_TILE_0_3}, // 33 {_TILE_1_0,_TILE_1_1,_TILE_1_2,_TILE_1_3}, // 34 {_TILE_2_0,_TILE_2_1,_TILE_2_2,_TILE_2_3}, // 35 {_TILE_3_0,_TILE_3_1,_TILE_3_2,_TILE_3_3}, // 36 {_TILE_4_0,_TILE_4_1,_TILE_4_2,_TILE_4_3}, // 37 {_TILE_5_0,_TILE_5_1,_TILE_5_2,_TILE_5_3}, // 38 {_TILE_6_0,_TILE_6_1,_TILE_6_2,_TILE_6_3}, // 39 {_TILE_7_0,_TILE_7_1,_TILE_7_2,_TILE_7_3}, // 40 {_TILE_8_0,_TILE_8_1,_TILE_8_2,_TILE_8_3}, // 41 {_TILE_9_0,_TILE_9_1,_TILE_9_2,_TILE_9_3}, // 42 {_TILE_10_0,_TILE_10_1,_TILE_10_2,_TILE_10_3}, // 43 {_TILE_11_0,_TILE_11_1,_TILE_11_2,_TILE_11_3}, // 44 {_TILE_12_0,_TILE_12_1,_TILE_12_2,_TILE_12_3}, // 45 {_TILE_13_0,_TILE_13_1,_TILE_13_2,_TILE_13_3}, // 48 {_TILE_14_0,_TILE_14_1,_TILE_14_2,_TILE_14_3}, // 47 { '0', ' ', ' ', ' '}, // 48 [0] { '1', ' ', ' ', ' '}, // 49 { '2', ' ', ' ', ' '}, // 50 { '3', ' ', ' ', ' '}, // 51 { '4', ' ', ' ', ' '}, // 52 { '5', ' ', ' ', ' '}, // 53 { '6', ' ', ' ', ' '}, // 54 { '7', ' ', ' ', ' '}, // 55 { '8', ' ', ' ', ' '}, // 56 { '9', ' ', ' ', ' '}, // 57 [9] {_TILE_15_0,_TILE_15_1,_TILE_15_2,_TILE_15_3}, // 58 {_TILE_16_0,_TILE_16_1,_TILE_16_2,_TILE_16_3}, // 59 {_TILE_17_0,_TILE_17_1,_TILE_17_2,_TILE_17_3}, // 60 {_TILE_18_0,_TILE_18_1,_TILE_18_2,_TILE_18_3}, // 61 {_TILE_19_0,_TILE_19_1,_TILE_19_2,_TILE_19_3}, // 62 {_TILE_20_0,_TILE_20_1,_TILE_20_2,_TILE_20_3}, // 63 {_TILE_21_0,_TILE_21_1,_TILE_21_2,_TILE_21_3}, // 64 { 'A', ' ', ' ', ' '}, // 65 [A] { 'B', ' ', ' ', ' '}, // 66 { 'C', ' ', ' ', ' '}, // 67 { 'D', ' ', ' ', ' '}, // 68 { 'E', ' ', ' ', ' '}, // 69 { 'F', ' ', ' ', ' '}, // 70 { 'G', ' ', ' ', ' '}, // 71 { 'H', ' ', ' ', ' '}, // 72 { 'I', ' ', ' ', ' '}, // 73 { 'J', ' ', ' ', ' '}, // 74 { 'K', ' ', ' ', ' '}, // 75 { 'L', ' ', ' ', ' '}, // 76 { 'M', ' ', ' ', ' '}, // 77 { 'N', ' ', ' ', ' '}, // 78 { 'O', ' ', ' ', ' '}, // 79 { 'P', ' ', ' ', ' '}, // 80 { 'Q', ' ', ' ', ' '}, // 81 { 'R', ' ', ' ', ' '}, // 82 { 'S', ' ', ' ', ' '}, // 83 { 'T', ' ', ' ', ' '}, // 84 { 'U', ' ', ' ', ' '}, // 85 { 'V', ' ', ' ', ' '}, // 86 { 'W', ' ', ' ', ' '}, // 87 { 'X', ' ', ' ', ' '}, // 88 { 'Y', ' ', ' ', ' '}, // 89 { 'Z', ' ', ' ', ' '}, // 90 [Z] {_TILE_22_0,_TILE_22_1,_TILE_22_2,_TILE_22_3}, // 91 {_TILE_23_0,_TILE_23_1,_TILE_23_2,_TILE_23_3}, // 92 {_TILE_24_0,_TILE_24_1,_TILE_24_2,_TILE_24_3}, // 93 {_TILE_25_0,_TILE_25_1,_TILE_25_2,_TILE_25_3}, // 94 {_TILE_26_0,_TILE_26_1,_TILE_26_2,_TILE_26_3}, // 95 }; // ------------------------- #endif #if defined(__MC10__) void mc10_display_poke(uint16_t addr, uint8_t val) { #if !defined(__REVERSE_LETTERS) if((val>='A')&&(val<='Z')) // TODO: Change this to allow negative letters { val = val-64; } #endif POKE(addr,val); } #endif #if defined(__VDP_WAIT_V_SYNC) void vdp_waitvsync(void) { #asm ld hl,_tick_count ld a,(hl) loop: cp (hl) jr nz,loop #endasm return; } #endif #if (defined(__VDP_MODE1_GRAPHICS) || defined(__MEMORY_MAPPED_GRAPHICS) || defined(__QUAD_MEMORY_MAPPED_GRAPHICS) || defined(__ORIC_COLOR_GRAPHICS) || defined(__ANTIC_MODE6_GRAPHICS) || defined(__ATARI7800_COLOR_GRAPHICS)) #if defined(__QUAD_MEMORY_MAPPED_GRAPHICS) #define X_MULT 2 #define Y_MULT 2 #else #define X_MULT 1 #define Y_MULT 1 #endif uint16_t loc(uint8_t x, uint8_t y) { #if !defined(__CIDELSA__) #if defined(__CREATIVISION__) #if !defined(_CREAT_XSIZE) #define _CREAT_XSIZE XSize #endif return ((uint16_t) BASE_ADDR)+(x+X_OFFSET)+(uint8_t)(Y_OFFSET+y)*((uint16_t) (_CREAT_XSIZE)); #else return ((uint16_t) BASE_ADDR)+(X_MULT)*x+(uint8_t)((Y_MULT)*y)*((uint16_t) ((XSize) + X_OFFSET)); #endif #else return ((uint16_t) 0xF800+XSize*YSize-YSize)-x*YSize+(uint8_t)y; #endif } #elif defined(__Z88DK_SPRITES_GRAPHICS) #if SPRITE_Y_SIZE==8 #include "z88dk_sprites_definitions.h" #elif SPRITE_Y_SIZE==6 #include "z88dk_8x6_sprites_definitions.h" #endif extern uint8_t sprites[]; #elif defined(__BUFFERED_GRAPHICS) #if defined(_XL_NO_LOWER_BORDER) #define LOWER_BORDER_OFFSET 1 #else #define LOWER_BORDER_OFFSET 0 #endif uint8_t video_buffer[YSize+Y_OFFSET][XSize]; #if !defined(__DOUBLE_BUFFER) void __display_all(void) { uint8_t j; uint8_t i; for(j=0;j> 4]; } uint8_t right_map_one_to_two(uint8_t n) { return map_one_to_two_lookup[n&0x0F]; } #elif defined(__BIT_MAPPED_16_GRAPHICS) const uint8_t map_one_to_four_lookup[4] = { // 0x00000000, // 0b00001111, // 0b11110000, // 0b11111111, 0x00, 0x0F, 0xF0, 0xFF, }; uint8_t first_map_one_to_four(uint8_t n) { return map_one_to_four_lookup[n >> 6]; } uint8_t second_map_one_to_four(uint8_t n) { return map_one_to_four_lookup[(n >> 4)&0x03]; } uint8_t third_map_one_to_four(uint8_t n) { return map_one_to_four_lookup[(n >> 2)&0x03]; } uint8_t fourth_map_one_to_four(uint8_t n) { return map_one_to_four_lookup[n&0x03]; } #endif #ifndef X_OFFSET COMPILATION ERROR #endif #ifndef Y_OFFSET COMPILATION ERROR #endif #if defined(__MO5__) || defined(__TO7__) #define _THOMSON_BLACK 64 #define _THOMSON_RED 65 #define _THOMSON_GREEN 66 #define _THOMSON_YELLOW 67 #define _THOMSON_BLUE 68 #define _THOMSON_MAGENTA 69 #define _THOMSON_CYAN 70 #define _THOMSON_WHITE 71 #define _THOMSON_GREY 72 void _XL_SET_TEXT_COLOR(uint8_t c) { PUTCH(0x1B); if(c==_XL_WHITE) { PUTCH(_THOMSON_WHITE); } else if(c==_XL_RED) { PUTCH(_THOMSON_RED); } else if(c==_XL_GREEN) { PUTCH(_THOMSON_GREEN); } else if (c==_XL_YELLOW) { PUTCH(_THOMSON_YELLOW); } else if(c==_XL_BLUE) { PUTCH(_THOMSON_BLUE); } else if(c==_XL_CYAN) { PUTCH(_THOMSON_CYAN); } else if(c==_XL_WHITE) { PUTCH(_THOMSON_WHITE); } else { PUTCH(_THOMSON_BLACK); } } #endif #if defined(__Z88DK_SPRITES_GRAPHICS) && defined(__ALT_PRINT) void __draw_ch(uint8_t x, uint8_t y, uint8_t ch) { _XL_DELETE(x,y); putsprite(spr_or,x*(__SPRITE_X_STEP),y*(__SPRITE_Y_STEP),sprites + ((ch-32U)*(2+SPRITE_Y_SIZE))); } #endif #if defined(__DEFAULT_CLEAR_SCREEN) void _XL_CLEAR_SCREEN(void) { uint8_t i; uint8_t j; for(i=0;i void osputc(__reg("a") char)="\tjsr\t0xffee"; void _gotoxy(uint8_t x, uint8_t y) { osputc(31); osputc(x); osputc(y); } void _select_color(uint8_t color) { osputc(17); osputc(color); } #if !defined(_XL_NO_COLOR) void _bbc_draw(uint8_t x, uint8_t y, uint8_t tile, uint8_t color) { _gotoxy(x,y); _select_color(color); osputc(tile); } #else void _bbc_draw(uint8_t x, uint8_t y, uint8_t tile) { _gotoxy(x,y); osputc(tile); } #endif void _bbc_delete(uint8_t x, uint8_t y) { _gotoxy(x,y); putchar(' '); } #endif #if defined(__TERMINAL__) #if _XL_TILE_X_SIZE==8 #define _MAX_BIT_VALUE 128 #if _XL_TILE_Y_SIZE==8 #include "8x8_chars.h" #elif _XL_TILE_Y_SIZE==6 #include "8x6_chars.h" #endif #elif _XL_TILE_X_SIZE==7 #define _MAX_BIT_VALUE 64 #include "7x8_chars.h" #elif _XL_TILE_X_SIZE==6 #define _MAX_BIT_VALUE 32 #if _XL_TILE_Y_SIZE==8 #include "6x8_chars.h" #elif _XL_TILE_Y_SIZE==9 #include "6x9_chars.h" #endif #endif #define _WIDTH 4 #define _gotoxy(x,y) do { move(y,x); } while(0) #define _cputc(c) do { addch(c); } while(0) #if defined(WIN32) #include #else #include #endif extern uint8_t _tiles[_XL_NUMBER_OF_TILES][_XL_TILE_Y_SIZE]; void _terminal_draw(uint8_t x, uint8_t y, uint8_t tile, uint8_t color) { uint8_t i; uint8_t j; uint8_t k; uint8_t n; for(i=0;i<_XL_TILE_Y_SIZE;++i) { k = _MAX_BIT_VALUE; for(j=0;j<_XL_TILE_X_SIZE;++j) { if(k & _tiles[tile][i]) { attron(COLOR_PAIR(color)); } else { attron(COLOR_PAIR(_XL_BLACK)); } for(n=1;n<=_WIDTH;++n) { _gotoxy(_WIDTH*(_XL_TILE_X_SIZE*(x)+j)+n,_XL_TILE_Y_SIZE*(y)+i); _cputc(' '); } k/=2; } } refresh(); } void _terminal_delete(uint8_t x, uint8_t y) { uint8_t i; uint8_t j; uint8_t n; attron(COLOR_PAIR(_XL_BLACK)); for(i=0;i<_XL_TILE_Y_SIZE;++i) { for(j=0;j<_XL_TILE_X_SIZE;++j) { for(n=1;n<=_WIDTH;++n) { _gotoxy(_WIDTH*(_XL_TILE_X_SIZE*(x)+j)+n,_XL_TILE_Y_SIZE*(y)+i); _cputc(' '); } } } refresh(); } #endif #if defined(__DOUBLE_BUFFER) && !defined(__BUFFERED_GRAPHICS) #if defined(__CC65__) void _XL_REFRESH(void) { memcpy((uint8_t *)REAL_BASE_ADDR, (uint8_t *)BASE_ADDR,XSize*YSize); } #else void _XL_REFRESH(void) { uint16_t i; for(i=0;i<(XSize)*(YSize);++i) \ { POKE(REAL_BASE_ADDR+i,PEEK(BASE_ADDR+i)); } } #endif #endif #if defined(__BBC__) #include void _XL_PRINT(uint8_t x, uint8_t y, const char * str) { uint8_t i = 0; _gotoxy(X_OFFSET+x,Y_OFFSET+y); while(str[i]!='\0') { osputc(str[i++]); } } void _XL_CHAR(uint8_t x, uint8_t y, char ch) { _gotoxy(x+X_OFFSET,Y_OFFSET+y); osputc(ch); } #include void _XL_PRINTD(uint8_t x, uint8_t y, uint8_t length, uint16_t val) { uint8_t i; uint8_t digit; for(i=0;i void _XL_SET_TEXT_COLOR(uint8_t c) { osputc(17); osputc(c); } #endif #endif #if defined(__CONIO_PRINT) #if !defined(__VT52) #include #endif void _XL_PRINT(uint8_t x, uint8_t y, const char * str) { gotoxy(X_OFFSET+x,Y_OFFSET+y); cprintf(str); } void _XL_CHAR(uint8_t x, uint8_t y, char ch) { gotoxy(x+X_OFFSET,Y_OFFSET+y); cputc(ch); } #endif ================================================ FILE: src/cross_lib/display/display_macros.h ================================================ /* --------------------------------------------------------------------------------------- */ // // CROSS CHASE by Fabrizio Caruso // // Fabrizio_Caruso@hotmail.com // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from // the use of this software. // Permission is granted to anyone to use this software for non-commercial applications, // subject to the following restrictions: // 1. The origin of this software must not be misrepresented; you must not // claim that you wrote the original software. If you use this software in // a product, an acknowledgment in the product documentation would be // appreciated but is not required. // 2. Altered source versions must be plainly marked as such, and must not // be misrepresented as being the original software. // 3. This notice may not be removed or altered from any source distribution. /* --------------------------------------------------------------------------------------- */ #ifndef _DISPLAY_MACROS #define _DISPLAY_MACROS #include "cross_lib.h" #include "display_target_color.h" #if !defined(__NO_GRAPHICS) #if defined(__INCLUDE_CONIO_H) #include #elif defined(__CMOC__) && !defined(__WINCMOC__) #include #endif #endif #include "conio_patch.h" #include "standard_libs.h" #if defined(__BUFFERED_GRAPHICS) extern uint8_t video_buffer[YSize+Y_OFFSET][XSize]; #endif #if defined(__Z88DK_SPRITES_GRAPHICS) extern uint8_t sprites[]; #endif #if defined(__Z88DK_SPRITES_GRAPHICS) && defined(__ALT_PRINT) void __draw_ch(uint8_t x, uint8_t y, uint8_t ch); #endif #if defined(__VGA_GRAPHICS) void _init_vga(void); void _display_tile(uint8_t x, uint8_t y, uint8_t tile, uint8_t color); void _delete_vga_segment(uint8_t x, uint8_t y); void _delete_vga_tile(uint16_t x, uint16_t y); #endif #if defined(__VIC20__) #define SET_DEBUG_BORDER() POKE(36879u, 12) #define UNSET_DEBUG_BORDER() POKE(36879u, 8) #elif defined(__C64__) #define SET_DEBUG_BORDER() POKE(53280u, 1) #define UNSET_DEBUG_BORDER() POKE(53280u, 0) #else #define SET_DEBUG_BORDER() #define UNSET_DEBUG_BORDER() #endif #if defined(__USE_WAIT_V_SYNC) #if defined(__MSX__) || defined(__SVI__) || defined(__M5__) || defined(__MTX__) #define __VDP_WAIT_V_SYNC #endif #if defined(__VIC20__) || defined(__C16__) || defined(__PLUS4__) || defined(__C64__) || \ defined(__APPLE2ENH__) || defined(__PCE__) || defined(__NES__) || \ defined(__GAMATE__) || defined(__CBM510__) || defined(__CX16__) || \ defined(__ATARI__) || defined(__ATARI5200__) #define _XL_WAIT_VSYNC() waitvsync() #elif defined(__GB__) #include #define _XL_WAIT_VSYNC() wait_vbl_done() #elif defined(__VDP_WAIT_V_SYNC) void vdp_waitvsync(void); #include #define _XL_WAIT_VSYNC() vdp_waitvsync() #else #define _XL_WAIT_VSYNC() #endif #else #define _XL_WAIT_VSYNC() #endif #if !defined(__BUFFERED_GRAPHICS) && !defined(__DOUBLE_BUFFER) #define _XL_REFRESH() #elif defined(__DOUBLE_BUFFER) && !defined(__BUFFERED_GRAPHICS) void _XL_REFRESH(void); #elif defined(ZX80_GEN_TV_FIELD) #define _XL_REFRESH() gen_tv_field() #else void __display_all(void); #include "buffered_graphics.h" #define __REFRESH() \ do \ { \ putchar('\n'); \ __display_all(); \ } while(0); #if !defined(__EMCC__) #define _XL_REFRESH() __REFRESH() #else #define _XL_REFRESH() \ do \ { \ __REFRESH(); \ fflush(stdout); \ } while(0) #endif #endif // PRINT AND PRINTD # if defined(__ALT_DISPLAY_STATS) void _XL_PRINT(uint8_t x, uint8_t y, const char * str); // void _XL_PRINTD(uint8_t x, uint8_t y, uint8_t length, uint16_t val); void _displayShort(uint8_t x, uint16_t val); #define _XL_PRINTD(x,y,length,val) _displayShort(x,val) uint16_t loc(uint8_t x, uint8_t y); #define _XL_CHAR(x,y,ch) #elif defined(__NO_PRINT) #define _XL_PRINT(x,y,str) #define _XL_PRINTD(x,y,length, val) #define _XL_CHAR(x,y,ch) #elif defined(__ATARI__) && defined(__ANTIC_MODE6_GRAPHICS) void _GOTOXY(uint8_t x, uint8_t y); void _XL_PRINT(uint8_t x, uint8_t y, const char * str); void _XL_PRINTD(uint8_t x, uint8_t y, uint8_t length, uint16_t val); void _XL_CHAR(uint8_t x, uint8_t y, char ch); // #elif defined(__TERMINAL__) // #define _XL_PRINT(x,y,str) // #define _XL_PRINTD(x,y,length, val) // #define _XL_CHAR(x,y,ch) #elif defined(__NCURSES__) && !defined(__TERMINAL__) void _XL_PRINT(uint8_t x, uint8_t y, const char * str); #define _XL_PRINTD(x,y,length,val) \ do { \ move(y,x); \ printw("%0" #length "u",val); \ refresh(); \ } while(0) void _XL_CHAR(uint8_t x, uint8_t y, char ch); #elif defined(__ALT_PRINT) void _XL_PRINT(uint8_t x, uint8_t y, const char * str); void _XL_PRINTD(uint8_t x, uint8_t y, uint8_t length, uint16_t val); void _XL_CHAR(uint8_t x, uint8_t y, char ch); #elif defined(__NO_BOTTOM) #define _XL_PRINT(x,y,str) \ do \ { \ if(y void _XL_PRINT(uint8_t x, uint8_t y, const char * str); void _XL_CHAR(uint8_t x, uint8_t y, char ch); void _XL_PRINTD(uint8_t x, uint8_t y, uint8_t length, uint16_t val); #elif !defined(__NO_PRINT) #define __CONIO_PRINT void _XL_PRINT(uint8_t x, uint8_t y, const char * str); void _XL_CHAR(uint8_t x, uint8_t y, char ch); #define _XL_PRINTD(x,y,length,val) \ do \ { \ gotoxy(x+X_OFFSET,Y_OFFSET+y); \ cprintf("%0" #length "u",val); \ } while(0) #endif #if defined(__NO_SCREEN_COLOR_INIT) || defined(__NO_GRAPHICS) #define _setScreenColors() #else #define _setScreenColors() \ do \ { \ _SET_BORDER_COLOR(__BORDER_COLOR); \ _SET_BACKGROUND_COLOR(_XL_BACKGROUND_COLOR); \ } while(0) #endif // COLORS #if defined(__ATARI5200__) #define _XL_SET_TEXT_COLOR(c) textcolor(c>>6) #elif defined(__ATARI__) && (defined(__ANTIC_MODE6_GRAPHICS)) extern uint8_t _atari_text_color; #define _XL_SET_TEXT_COLOR(c) _atari_text_color = (c) #elif defined(__TERMINAL__) extern uint8_t _terminal_text_color; #define _XL_SET_TEXT_COLOR(c) _terminal_text_color = (c) #elif defined(__APPLE2__) && (defined(__APPLE2_HGR_GRAPHICS)) extern uint8_t _apple2_text_color; #define _XL_SET_TEXT_COLOR(c) _apple2_text_color = (c) #elif defined(__VGA_GRAPHICS) extern uint8_t _vga_text_color; #define _XL_SET_TEXT_COLOR(c) _vga_text_color = (c) #elif defined(__MO5__) || defined(__TO7__) void _XL_SET_TEXT_COLOR(uint8_t c); #elif defined(__BIT_MAPPED_16_GRAPHICS) extern uint8_t _bitmap16_text_color; #define _XL_SET_TEXT_COLOR(c) _bitmap16_text_color = (c) #elif defined(__SUPERVISION__) || (defined(__COCO__)&&defined(__BIT_MAPPED_4_GRAPHICS)) extern uint8_t _bitmap4_text_color; #define _XL_SET_TEXT_COLOR(c) _bitmap4_text_color = (c) #elif defined(_XL_NO_TEXT_COLOR) #define _XL_SET_TEXT_COLOR(c) #elif defined(__ATARI_LYNX__) #if defined(__LYNX_TGI_GRAPHICS) extern uint8_t _atari_lynx_text_color; #define _XL_SET_TEXT_COLOR(c) (_atari_lynx_text_color=(c)) #else #define _XL_SET_TEXT_COLOR(c) tgi_setcolor(c) #endif #elif defined(__NCURSES__) || defined(__TERMINAL__) #if defined(WIN32) #include #else #include #endif #define _XL_SET_TEXT_COLOR(c) attron(COLOR_PAIR(c)) #elif defined(__CPC__) && defined(__CPCRSLIB_GRAPHICS) #define CPC_TEXT_WHITE 3 #define CPC_TEXT_RED 4 #define CPC_TEXT_BLACK 7 #define CPC_TEXT_YELLOW 0 #define _XL_SET_TEXT_COLOR(c) \ if(c==_XL_WHITE) \ { \ textcolor(CPC_TEXT_WHITE); \ } \ else if(c==_XL_RED) \ { \ textcolor(CPC_TEXT_RED); \ } \ else \ { \ textcolor(CPC_TEXT_YELLOW); \ } #elif defined(__BBC__) void _XL_SET_TEXT_COLOR(uint8_t c); #elif defined(__MC10__) #define _XL_SET_TEXT_COLOR(c) #elif defined(__AQUARIUS__) && defined(__MEMORY_MAPPED_GRAPHICS) void _XL_SET_TEXT_COLOR(uint8_t c); #elif defined(__COMX__) || defined(__PECOM__) || defined(__CIDELSA__) || defined(__MICRO__) #define _XL_SET_TEXT_COLOR(c) textcolor(_COMX_TEXT_WHITE) // #define _XL_SET_TEXT_COLOR(c) #else #define _XL_SET_TEXT_COLOR(c) textcolor(c) #endif #if defined(__Z88DK_SPRITES_GRAPHICS) || defined(__MO5__)||defined(__TO7__) || defined(__COCO3__) || defined(__COCO__) || defined(__DRAGON__) #define _Z88DK_SPRITE_OFFSET (0x20) #else #define _Z88DK_SPRITE_OFFSET 0x00 #endif #if defined(__COCO3__) || defined(__COCO__) || defined(__DRAGON__) #define NOT_INVERTED 64 #define INVERTED -64 #endif # if defined(__VIC20__) && (defined(__VIC20_EXP_8K) && !defined(__CONIO_GRAPHICS)) && !defined(_XL_NO_UDG) #define _SPACE 0x72 #elif defined(__VIC20__) && defined(__VIC20_UNEXPANDED) && !defined(_XL_NO_UDG) #define _SPACE 0xA0 #elif (defined(__ATARI__) && defined(__ANTIC_MODE6_GRAPHICS)) #define _SPACE 0 #elif defined(__C16__) && !defined(_XL_NO_UDG) && defined(__MEMORY_MAPPED_GRAPHICS) #define _SPACE 0x60 // If you use the kernal routine, you risk to get a corrupted space character #elif defined(__Z88DK_SPRITES_GRAPHICS) #if defined(__FEWER_SPRITES) #define _SPACE 64 #else #define _SPACE 96 #endif #elif defined(__COCO3__) || defined(__COCO__) || defined(__DRAGON__) #define _SPACE (' '+NOT_INVERTED) #elif defined(__ATARI5200__) || defined(__ATARI7800_COLOR_GRAPHICS) #define _SPACE 0 #elif defined(__CPCRSLIB_GRAPHICS) #define _SPACE (19*2) #else #define _SPACE ' ' #endif // CLEAR SCREEN # if defined(__DEFAULT_CLEAR_SCREEN) void _XL_CLEAR_SCREEN(void); #elif defined(__MSDOS86__) #define _XL_CLEAR_SCREEN() _init_vga() #elif defined(__NO_CLEAR_SCREEN) #define _XL_CLEAR_SCREEN() #elif defined(__TI99__) #include #define _XL_CLEAR_SCREEN() vdpmemset(gImage, 32, 768) #elif defined(__ATARI_LYNX__) #define _XL_CLEAR_SCREEN() tgi_bar(0,0,159,101) #elif defined(__CPC__) && defined(__CPCRSLIB_GRAPHICS) #define _XL_CLEAR_SCREEN() printf("\x1B[37;40m\x1B[2J") #elif defined(__ATMOS__) #define _XL_CLEAR_SCREEN() do {clrscr(); _XL_INIT_GRAPHICS(); } while(0) #elif defined(__Z88DK_SPRITES_GRAPHICS) #include #include #define _XL_CLEAR_SCREEN() clg() #elif defined(__NCURSES__) || defined(__TERMINAL__) #if defined(WIN32) #include #else #include #endif #if defined(_DEBUG_FLAG) && _DEBUG_FLAG==1 #define _XL_CLEAR_SCREEN() \ do \ { \ uint8_t i; \ \ clear(); \ \ for(i=0;i #if defined(__DRACO__) #define REAL_XSIZE 27 #else #define REAL_XSIZE 25 #endif #define _XL_CLEAR_SCREEN() vidclr(BASE_ADDR,XSize*40) #elif defined(__MO5__)||defined(__TO7__) #define _XL_CLEAR_SCREEN() PUTCH(12); #elif defined(__ASSEMBLY_CLEAR_SCREEN) #if defined(__C16__) #define _XL_CLEAR_SCREEN() \ __asm__("LDX #$04"); \ __asm__("LDY #$0C"); \ __asm__("LDA #$60"); \ __asm__("JSR $C5A7"); #endif // KERNAL routine uses ASCII character 0x20 (32), whereas memory mapped sets space character at 0x60 #elif defined(__KERNAL_CLEAR_SCREEN) && !defined(__MEMORY_MAPPED_GRAPHICS) #if defined(__C16__) #define _XL_CLEAR_SCREEN() __asm__("jsr $D88B") #elif defined(__VIC20__) #define _XL_CLEAR_SCREEN() __asm__("jsr $E55F") #endif #else // CONIO case #define _XL_CLEAR_SCREEN() clrscr() #endif // BORDER AND BACKGROUND COLORS #if defined(__CC65__) && !defined(__NES_CONIO_GRAPHICS) && !defined(__ATARI5200__) && !defined(__SUPERVISION__) && defined(__CONIO_GRAPHICS) #define _SET_BORDER_COLOR(c) (void) bordercolor(c) #define _SET_BACKGROUND_COLOR(c) (void) bgcolor (c) #elif defined(__SAM__) #define _SET_BORDER_COLOR(c) {} #define _SET_BACKGROUND_COLOR(c) {} #elif (defined(__Z88DK__) && !defined(_XL_NO_UDG)) || defined(__AQUARIUS__) #define _SET_BORDER_COLOR(c) (void) bordercolor(c) #define _SET_BACKGROUND_COLOR(c) (void) textbackground(c) #else #define _SET_BORDER_COLOR(c) {} #define _SET_BACKGROUND_COLOR(c) {} #endif #if !defined(__NO_INIT_GRAPHICS) void _XL_INIT_GRAPHICS(void); #else #define _XL_INIT_GRAPHICS() _setScreenColors() #endif #endif // _DISPLAY_MACROS ================================================ FILE: src/cross_lib/display/display_target_color.h ================================================ #ifndef _DISPLAY_TARGET_COLOR #define _DISPLAY_TARGET_COLOR #include "cross_lib.h" #include "display_target_geometry.h" #if defined(__GAL__) \ || (defined(__PC6001__) && !(__SCREEN_MODE==2)) \ || (defined(__ATARI5200__) && !defined(__ANTIC_MODE6_GRAPHICS)) \ || (defined(__CREATIVISION__) && !defined(__VDP_MODE1_GRAPHICS)) \ || defined(__WINCMOC__) || (defined(__COCO3__)&&!defined(__BIT_MAPPED_16_GRAPHICS)) || (defined(__COCO__)&&!defined(__BIT_MAPPED_4_GRAPHICS)) || (defined(__DRAGON__)&&!defined(__BIT_MAPPED_4_GRAPHICS)) || defined(__OSIC1P__) \ || (defined(__MC1000__) && !(__SCREEN_MODE==2)) \ || defined(__LAMBDA__) || (defined(__MSX__) && defined(__MEMORY_MAPPED_GRAPHICS)) \ || (defined(__VZ__) && defined(_XL_NO_UDG)) \ || (defined(__ATARI__) && !defined(__ANTIC_MODE6_GRAPHICS)) \ || defined(__PET__) || defined(__CBM610__) || ((defined(__APPLE2__) || defined(__APPLE2ENH__)) && !defined(__APPLE2_HGR_GRAPHICS)) \ || defined(__ZX81__) || defined(__ZX80__) || defined(__ACE__) \ || defined(__TRS80__) || defined(__PX8__) || defined(__PX4__) \ || defined(__ABC80__) || defined(__ABC800__) || defined(__SRR__) \ || defined(__KC__) || (defined(__ATMOS__) && !defined(__ORIC_COLOR_GRAPHICS)) \ || defined(__VECTREX__) || defined(__GB__) \ || defined(__NC100__) || defined(__NC200__) #if !defined(_XL_NO_COLOR) #define _XL_NO_COLOR #endif #endif // defined(__COMX__) || defined(__PECOM__) || defined(__CIDELSA__) || defined(__MICRO__) #if defined(_XL_NO_COLOR) || defined(__PV1000_GRAPHICS) || defined(__NES__) \ || defined(__CREATIVISION__) || defined(__ORIC__) || defined(__ATMOS__) || defined(__TI99__) \ || defined(__COMX__) || defined(__PECOM__) || defined(__CIDELSA__) || defined(__MICRO__) \ || defined(__ATARI7800_COLOR_GRAPHICS) #define _XL_NO_TEXT_COLOR #endif #if defined(__BACKGROUND_COLOR) && __BACKGROUND_COLOR==1 #define _XL_BACKGROUND_COLOR _XL_WHITE #define __BORDER_COLOR _XL_WHITE #else #define _XL_BACKGROUND_COLOR _XL_BLACK #define __BORDER_COLOR _XL_BLACK #endif #endif // _DISPLAY_TARGET_COLOR ================================================ FILE: src/cross_lib/display/display_target_geometry.h ================================================ #ifndef DISPLAY_TARGET_GEOMETRY_H #define DISPLAY_TARGET_GEOMETRY_H #if defined(__Z88DK_SPRITES_GRAPHICS) #if (defined(__TRS80__) && !defined(__EG2K__) && defined(__Z88DK_SPRITES_GRAPHICS)) \ || (defined(__OSBORNE1__) && defined(__Z88DK_SPRITES_GRAPHICS)) #define EXTRA_TINY_Y #define EXTRA_TINY_X #endif #if defined(__TI82__) && defined(__Z88DK_SPRITES_GRAPHICS) #define EXTRA_TINY_X #endif #if !defined(__SPRITE_Y_STEP) #if !defined(EXTRA_TINY_Y) #define __SPRITE_Y_STEP 5 #else #define __SPRITE_Y_STEP 3 #endif #endif #if !defined(__SPRITE_X_STEP) #if !defined(EXTRA_TINY_X) #define __SPRITE_X_STEP 7 #else #define __SPRITE_X_STEP 6 #endif #endif #if !defined(SPRITE_X_SIZE) #define SPRITE_X_SIZE 8 #endif #if !defined(SPRITE_Y_SIZE) #define SPRITE_Y_SIZE 8 #endif #ifndef __SPRITE_X_STEP #define __SPRITE_X_STEP SPRITE_X_SIZE #endif #ifndef __SPRITE_Y_STEP #define __SPRITE_Y_STEP SPRITE_Y_SIZE #endif #endif #if !defined(YSize) # if defined(__NCURSES__) #define YSize (24-Y_OFFSET) #elif defined(__CIDELSA__) // DRACO/DESTROYER/ALTAIR #define YSize (40-Y_OFFSET) #elif defined(__PPS__) #define YSize (32-Y_OFFSET) #elif defined(__Z1013__) #define YSize (32-Y_OFFSET) #elif defined(__SRR__) #define YSize (30-Y_OFFSET) #elif defined(__KC__) && defined(__Z88DK_SPRITES_GRAPHICS) #define YSize ((256/__SPRITE_Y_STEP)-Y_OFFSET) #elif (defined(__KC__) && !defined(_XL_NO_UDG)) \ || defined(__CAMPUTERS_LYNX__) #define YSize (32-Y_OFFSET) #elif defined(__ATMOS__) || defined(__NES__) #define YSize (28-Y_OFFSET) #elif defined(__CBM610__) || defined(__PET__) || (defined(__C128__) && !defined(__Z88DK_SPRITES_GRAPHICS)) \ || defined(__C16__) || defined(__PLUS4__) || defined(__C64__) \ || defined(__PET__) || defined(__CBM510__) \ || defined(__MZ__) || defined(__BEE__) || defined(__X1__) \ || defined(__PCE__) || defined(__CPC__) || defined(__VG5K__) \ || defined(__ENTERPRISE__) \ || defined(__FP1100__) \ || defined(__MULTI8__) \ || defined(__MO5__) || defined(__TO7__) #define YSize (25-Y_OFFSET) #elif defined(__CREATIVISION__) || defined(__MSX__) || defined(__SVI__) \ || defined(__ZX81__) || defined(__ZX80__) || defined(__LAMBDA__) \ || (defined(__SPECTRUM__) && !defined(__TS2068__)) || defined(__SC3000__) || defined(__MTX__) \ || defined(__APPLE2ENH__) || defined(__APPLE2__) \ || defined(__Z9001__) || defined(__P2000__) \ || defined(__ATARI__) \ || defined(__ATARI5200__) \ || defined(__ACE__) \ || defined(__EINSTEIN__) \ || defined(__OSIC1P__) \ || defined(__MC1000__) \ || defined(__M5__) \ || (defined(__AQUARIUS__) && !defined(QUAD_MEMORY_MAP)) \ || defined(__COLECO__) \ || defined(__PV2000__) \ || defined(__PV1000__) \ || (defined(__EG2K__) && !!defined(_XL_NO_UDG)) \ || (defined(__EG2K__) && !defined(_XL_NO_UDG)) \ || defined(__ALPHATRO__) || defined(__ABC80__) \ || defined(__LASER500__) \ || (defined(__OSCA__) && !defined(__Z88DK_SPRITES_GRAPHICS)) \ || defined(__COMX__) || defined(__PECOM__) || defined(__TMC600__) || defined(__MICRO__) #define YSize (24-Y_OFFSET) #elif defined(__VIC20__) \ || defined(__RX78__) #define YSize 23 #elif defined(__SPC1000__) #define YSize 22 #elif defined(__SAM__) #define YSize (24-2-Y_OFFSET) #elif (defined(__TS2068__) && defined(__Z88DK_SPRITES_GRAPHICS)) #define YSize (192/__SPRITE_Y_STEP -Y_OFFSET) #elif (defined(__NC200__) && defined(__Z88DK_SPRITES_GRAPHICS)) #define YSize ((128/__SPRITE_Y_STEP)-Y_OFFSET) #elif defined(__SUPERVISION__) #define YSize 20 #elif defined(__GAMATE__) #define YSize 19 #elif defined(__ATARI_LYNX__) #define YSize 13 #elif (defined(__PX4__) && defined(Z88DK_PUTC4X6)) #define YSize (10+1) #elif defined(__Z88__) || (defined(__PX8__) && !defined(__Z88DK_SPRITES_GRAPHICS)) \ || ((defined(__TI82__) || defined(__TI83__) || defined(__TI8X__) || defined(__TI85__) || defined(__TI86__)) && !defined(__Z88DK_SPRITES_GRAPHICS)) #define YSize 8 #elif defined(__G800__) #define YSize 7 #elif ((defined(__TI82__) || defined(__TI83__) || defined(__TI8X__) || defined(__TI85__) || defined(__TI86__)) && defined(__Z88DK_SPRITES_GRAPHICS)) #define YSize ((64/__SPRITE_Y_STEP)+1) #elif (defined(__VZ__) && defined(__Z88DK_SPRITES_GRAPHICS)) #define YSize ((64/__SPRITE_Y_STEP)+1) #elif (defined(__PX8__) && defined(__Z88DK_SPRITES_GRAPHICS)) #define YSize ((64/__SPRITE_Y_STEP)+1) #elif (defined(__PX4__) && defined(__Z88DK_SPRITES_GRAPHICS)) #define YSize ((64/__SPRITE_Y_STEP)+1) #elif (defined(__OSBORNE1__) && defined(__Z88DK_SPRITES_GRAPHICS)) #define YSize ((48/__SPRITE_Y_STEP)-1) #elif defined(__TIKI100__) #define YSize ((256/__SPRITE_Y_STEP)-Y_OFFSET) #elif (defined(__NC100__) && defined(__Z88DK_SPRITES_GRAPHICS)) #define YSize ((64/__SPRITE_Y_STEP)+1) #elif (defined(__TRS80__) && !defined(__EG2K__) && defined(__Z88DK_SPRITES_GRAPHICS)) #define YSize ((48/__SPRITE_Y_STEP)-1) #elif defined(__KAYPRO83__) #define YSize (50/__SPRITE_Y_STEP) #elif defined(__KAYPRO__) #define YSize (100/__SPRITE_Y_STEP) #elif defined(__ATTACHE__) && defined(__Z88DK_SPRITES_GRAPHICS) #define YSize (240/__SPRITE_Y_STEP) #elif (defined(__OZ__) && defined(__Z88DK_SPRITES_GRAPHICS)) #define YSize (80/__SPRITE_Y_STEP) #elif (defined(__C128_Z80__) && defined(__Z88DK_SPRITES_GRAPHICS)) #define YSize ((200/__SPRITE_Y_STEP)-Y_OFFSET) #elif (defined(__Z88__) && defined(__Z88DK_SPRITES_GRAPHICS)) #define YSize ((64/__SPRITE_Y_STEP)) #elif (defined(__PC6001__) && __SCREEN_MODE==2) || (defined(__COCO__) || defined(__DRAGON__)) && defined(__BIT_MAPPED_GRAPHICS) #define YSize 24 #else #define YSize 16 #endif #endif #if !defined(XSize) # if defined(__NCURSES__) #define XSize 80 #elif defined(__CBM610__) || defined(__PET__) || (defined(__C128__) && defined(C128_80COL_VIDEO_MODE)) \ || defined(__BEE__) || defined(__PET__) || defined(__CBM610__) \ || (defined(__PX8__) && !defined(__Z88DK_SPRITES_GRAPHICS)) \ || (defined(__APPLE2ENH__) && defined(APPLE2ENH_80COL_VIDEO_MODE)) \ || defined(__PPS__) || (defined(__MULTI8__) && !defined(_XL_NO_UDG)) \ || (defined(__TS2068__) && !defined(__Z88DK_SPRITES_GRAPHICS)) #define XSize 80 #elif defined(__SRR__) || (defined(__TRS80__) && !defined(__EG2K__) && !defined(__Z88DK_SPRITES_GRAPHICS)) #define XSize 64 #elif defined(__PCE__) || (defined(__PX4__) && defined(Z88DK_PUTC4X6)) #define XSize 60 #elif defined(__TIKI100__) #define XSize (1024/__SPRITE_X_STEP) #elif ((defined(__NC100__) || defined(__NC200__)) && defined(__Z88DK_SPRITES_GRAPHICS)) #define XSize (480/__SPRITE_X_STEP) #elif (defined(__PX8__) && defined(__Z88DK_SPRITES_GRAPHICS)) #define XSize (480/__SPRITE_X_STEP) #elif (defined(__PX4__) && defined(__Z88DK_SPRITES_GRAPHICS)) #define XSize (240/__SPRITE_X_STEP) #elif (defined(__ATTACHE__) && defined(__Z88DK_SPRITES_GRAPHICS)) #define XSize (320/__SPRITE_X_STEP) #elif (defined(__OZ__) && defined(__Z88DK_SPRITES_GRAPHICS)) #define XSize (239/__SPRITE_X_STEP) #elif (defined(__OSBORNE1__) && defined(__Z88DK_SPRITES_GRAPHICS)) #define XSize (104/__SPRITE_X_STEP) #elif (defined(__C128_Z80__) && defined(__Z88DK_SPRITES_GRAPHICS)) #define XSize (640/__SPRITE_X_STEP) #elif defined(__NASCOM__) #define XSize 48 #elif defined(__VG5K__) || (defined(__APPLE2ENH__) && !defined(APPLE2ENH_80COL_VIDEO_MODE))|| defined(__APPLE2__) \ || defined(__Z9001__) || defined(__P2000__) || defined(__ABC80__) \ || defined(__X1__) || defined(__ATMOS__) \ || (defined(__CPC__) && defined(__CPCRSLIB_GRAPHICS)) || defined(__C16__) || defined(__PLUS4__) || defined(__C64__) \ || (defined(__C128__) && !defined(__Z88DK_SPRITES_GRAPHICS) && !defined(C128_80COL_VIDEO_MODE)) \ || (defined(__AQUARIUS__) && !defined(QUAD_MEMORY_MAP)) || (defined(__SVI__) && defined(MSX_MODE0)) \ || defined(__ENTERPRISE__) \ || (defined(__ATARI__) && !defined(__ANTIC_MODE6_GRAPHICS)) \ || defined(__CBM510__) \ || defined(__FP1100__) \ || (defined(__EG2K__) && !defined(_XL_NO_UDG)) \ || (defined(__EG2K__) && !!defined(_XL_NO_UDG)) \ || defined(__ALPHATRO__) \ || defined(__LASER500__) \ || (defined(__OSCA__) && !defined(__Z88DK_SPRITES_GRAPHICS)) \ || defined(__MO5__) || defined(__TO7__) \ || defined(__COMX__) || defined (__PECOM__) || defined(__TMC600__) || defined(__MICRO__) #define XSize (40-X_OFFSET) #elif defined(__KC__) && defined(__Z88DK_SPRITES_GRAPHICS) #define XSize (320/__SPRITE_X_STEP) #elif (defined(__TS2068__) && defined(__Z88DK_SPRITES_GRAPHICS)) #define XSize (512/__SPRITE_X_STEP) #elif (defined(__VZ__) && defined(__Z88DK_SPRITES_GRAPHICS)) #define XSize (128/__SPRITE_X_STEP) #elif defined(__KAYPRO83__) #define XSize (80/__SPRITE_X_STEP) #elif defined(__KAYPRO__) #define XSize (160/__SPRITE_X_STEP) #elif ((defined(__TI82__) ) && defined(__Z88DK_SPRITES_GRAPHICS)) #define XSize ((96/__SPRITE_X_STEP)) #elif ((defined(__TI83__)) && defined(__Z88DK_SPRITES_GRAPHICS)) #define XSize ((96/__SPRITE_X_STEP)+1) #elif ((defined(__TI8X__)) && defined(__Z88DK_SPRITES_GRAPHICS)) #define XSize ((96/__SPRITE_X_STEP)+1) #elif ((defined(__TI85__) || defined(__TI86__)) && defined(__Z88DK_SPRITES_GRAPHICS)) #define XSize (128/__SPRITE_X_STEP) #elif (defined(__TRS80__) && !defined(__EG2K__) && defined(__Z88DK_SPRITES_GRAPHICS)) #define XSize (128/__SPRITE_X_STEP) #elif (defined(__Z88__) && defined(__Z88DK_SPRITES_GRAPHICS)) #define XSize (256/__SPRITE_X_STEP) #elif defined(__KC__) && !defined(_XL_NO_UDG) #define XSize 40 #elif (defined(__COCO__) || defined(__DRAGON__)) && defined(__BIT_MAPPED_4_GRAPHICS) #define XSize 16 #elif (defined(__VZ__) && !defined(__Z88DK_SPRITES_GRAPHICS)) || defined(__NES__) || defined(__CREATIVISION__) || defined(__MSX__) \ || (defined(__SVI__) && !defined(MSX_MODE0) ) || defined(__ZX81__) || defined(__ZX80__) \ || defined(__LAMBDA__) || (defined(__SPECTRUM__)&&!defined(__TS2068)) || (defined(__PC6001__) && !defined(__SCREEN_MODE))\ || defined(__SC3000__) || defined(__MC1000__) || defined(__MTX__) || defined(__SAM__) \ || defined(__GAL__) || defined(__COCO__) || defined(__DRAGON__) || defined(__WINCMOC__) \ || defined(__Z1013__) || defined(__Z88__) || defined(__ACE__) \ || defined(__EINSTEIN__) \ || ((defined(__TI82__) || defined(__TI83__) || defined(__TI8X__) || defined(__TI85__) || defined(__TI86__)) && !defined(__Z88DK_SPRITES_GRAPHICS)) \ || defined(__M5__) || defined(__COLECO__) \ || defined(__PV2000__) || defined(__MZ__) \ || defined(__CAMPUTERS_LYNX__) #define XSize 32 #elif defined(__PV1000__) #define XSize 28 #elif defined(__CIDELSA__) && defined(__DRACO__) #define XSize 27 #elif defined(__CIDELSA__) && (defined(__DESTROYER__) || defined(__ALTAIR__)) #define XSize 25 #elif defined(__OSIC1P__) || defined(__G800__) || defined(__RX78__) #define XSize 24 #elif defined(__VIC20__) #define XSize 22 #elif (defined(__ATARI__) && defined(__ANTIC_MODE6_GRAPHICS)) \ || defined(__ATARI_LYNX__) || defined(__SUPERVISION__) \ || defined(__ATARI5200__) || defined(__GAMATE__) #define XSize 20 #elif defined(__PC6001__) && __SCREEN_MODE==2 #define XSize 16 #else #define XSize 16 #endif #endif #if !defined(Y_OFFSET) #define Y_OFFSET 0 #endif #if !defined(X_OFFSET) #if defined(__ATMOS__) #define X_OFFSET 2 #else #define X_OFFSET 0 #endif #endif #endif // _DISPLAY_TARGET_GEOMETRY_H ================================================ FILE: src/cross_lib/display/graphics_mode/antic_mode6_graphics.h ================================================ #ifndef _ATARI_MODE1_COLOR_GRAPHICS_H #define _ATARI_MODE1_COLOR_GRAPHICS_H #include "standard_libs.h" #if defined(__ATARI5200__) #define BASE_ADDR 0x3E20 #else #define BASE_ADDR_VALUE (PEEK(88)+PEEK(89)*256) #endif #define DISPLAY_POKE(addr,val) (*(uint8_t*) (addr) = (val)) #define _XL_DRAW(x,y, tile,color) \ DISPLAY_POKE((uint16_t) loc(x,y), tile+color); #define _XL_DELETE(x,y) DISPLAY_POKE(loc(x,y), _SPACE) uint16_t loc(uint8_t x, uint8_t y); #endif // _ATARI_MODE1_COLOR_GRAPHICS_H ================================================ FILE: src/cross_lib/display/graphics_mode/apple2_hgr_graphics.h ================================================ #ifndef _APPLE2_HGR_H #define _APPLE2_HGR_H /* unsigned HB2[]={ 0x4000, 0x4400, 0x4800, 0x4C00, 0x5000, 0x5400, 0x5800, 0x5C00, 0x4080, 0x4480, 0x4880, 0x4C80, 0x5080, 0x5480, 0x5880, 0x5C80, 0x4100, 0x4500, 0x4900, 0x4D00, 0x5100, 0x5500, 0x5900, 0x5D00, 0x4180, 0x4580, 0x4980, 0x4D80, 0x5180, 0x5580, 0x5980, 0x5D80, 0x4200, 0x4600, 0x4A00, 0x4E00, 0x5200, 0x5600, 0x5A00, 0x5E00, 0x4280, 0x4680, 0x4A80, 0x4E80, 0x5280, 0x5680, 0x5A80, 0x5E80, 0x4300, 0x4700, 0x4B00, 0x4F00, 0x5300, 0x5700, 0x5B00, 0x5F00, 0x4380, 0x4780, 0x4B80, 0x4F80, 0x5380, 0x5780, 0x5B80, 0x5F80, 0x4028, 0x4428, 0x4828, 0x4C28, 0x5028, 0x5428, 0x5828, 0x5C28, 0x40A8, 0x44A8, 0x48A8, 0x4CA8, 0x50A8, 0x54A8, 0x58A8, 0x5CA8, 0x4128, 0x4528, 0x4928, 0x4D28, 0x5128, 0x5528, 0x5928, 0x5D28, 0x41A8, 0x45A8, 0x49A8, 0x4DA8, 0x51A8, 0x55A8, 0x59A8, 0x5DA8, 0x4228, 0x4628, 0x4A28, 0x4E28, 0x5228, 0x5628, 0x5A28, 0x5E28, 0x42A8, 0x46A8, 0x4AA8, 0x4EA8, 0x52A8, 0x56A8, 0x5AA8, 0x5EA8, 0x4328, 0x4728, 0x4B28, 0x4F28, 0x5328, 0x5728, 0x5B28, 0x5F28, 0x43A8, 0x47A8, 0x4BA8, 0x4FA8, 0x53A8, 0x57A8, 0x5BA8, 0x5FA8, 0x4050, 0x4450, 0x4850, 0x4C50, 0x5050, 0x5450, 0x5850, 0x5C50, 0x40D0, 0x44D0, 0x48D0, 0x4CD0, 0x50D0, 0x54D0, 0x58D0, 0x5CD0, 0x4150, 0x4550, 0x4950, 0x4D50, 0x5150, 0x5550, 0x5950, 0x5D50, 0x41D0, 0x45D0, 0x49D0, 0x4DD0, 0x51D0, 0x55D0, 0x59D0, 0x5DD0, 0x4250, 0x4650, 0x4A50, 0x4E50, 0x5250, 0x5650, 0x5A50, 0x5E50, 0x42D0, 0x46D0, 0x4AD0, 0x4ED0, 0x52D0, 0x56D0, 0x5AD0, 0x5ED0, 0x4350, 0x4750, 0x4B50, 0x4F50, 0x5350, 0x5750, 0x5B50, 0x5F50, 0x43D0, 0x47D0, 0x4BD0, 0x4FD0, 0x53D0, 0x57D0, 0x5BD0, 0x5FD0}; */ extern uint16_t HB1[]; void hgr_draw(uint8_t x, uint8_t y, uint8_t tile, uint8_t color); void hgr_delete(uint8_t x, uint8_t y); #define _XL_DRAW(x, y, tile, color) hgr_draw(x,y,tile,color) #define _XL_DELETE(x,y) hgr_delete(x,y) #endif //_APPLE2_HGR_H ================================================ FILE: src/cross_lib/display/graphics_mode/atari7800_color_graphics.h ================================================ #ifndef _ATARI_7800_GRAPHICS_H #define _ATARI_7800_GRAPHICS_H #include "standard_libs.h" #include extern char screen[]; #define BASE_ADDR 0x0000 uint16_t loc(uint8_t x, uint8_t y); #define DISPLAY_POKE(addr,val) (screen[addr] = (val)) #define _XL_DRAW(x, y, tile, color) \ DISPLAY_POKE((uint16_t) loc(x,y), (unsigned char) (tile)+((color)*54U)); // +(tile+color) #define _XL_DELETE(x,y) DISPLAY_POKE(loc(x,y), 0) #endif // _ATARI_7800_GRAPHICS_H ================================================ FILE: src/cross_lib/display/graphics_mode/atari_lynx_tgi_graphics.h ================================================ #ifndef _LYNX_TGI_GRAPHICS_GRAPHICS #define _LYNX_TGI_GRAPHICS_GRAPHICS #include "cross_lib.h" #include #define FONT_SIZE (26+10+1) typedef struct scb_hv_pal2 { unsigned char sprctl0; unsigned char sprctl1; // set REHV unsigned char sprcoll; char *next; unsigned char *data; signed int hpos; signed int vpos; unsigned int hsize; unsigned int vsize; unsigned char penpal[2]; } scb_hv_pal2; extern scb_hv_pal2 _tgi_tile[_XL_NUMBER_OF_TILES+FONT_SIZE]; extern scb_hv_pal2 *empty_spr; void _tgi_gfx_delete(uint8_t x, uint8_t y); void _tgi_gfx_draw(uint8_t x, uint8_t y, uint8_t tile, uint8_t color); #define _XL_DELETE(__x,__y) \ _tgi_gfx_delete(__x,__y) #define _XL_DRAW(__x,__y,__tile,__color) \ _tgi_gfx_draw(__x,__y,__tile,__color) #endif // _LYNX_TGI_GRAPHICS_GRAPHICS ================================================ FILE: src/cross_lib/display/graphics_mode/bbc_graphics.h ================================================ #include #if !defined(_XL_NO_COLOR) void _bbc_draw(uint8_t x, uint8_t y, uint8_t tile, uint8_t color); #else void _bbc_draw(uint8_t x, uint8_t y, uint8_t tile); #endif void _bbc_delete(uint8_t x, uint8_t y); #if !defined(_XL_NO_COLOR) #define _XL_DRAW(x,y,tile,color) _bbc_draw(x,y,tile,color) #else #define _XL_DRAW(x,y,tile,color) _bbc_draw(x,y,tile) #endif #define _XL_DELETE(x,y) _bbc_delete(x,y) ================================================ FILE: src/cross_lib/display/graphics_mode/bit_mapped_16_graphics.h ================================================ #ifndef _BIT_MAPPED_16_GRAPHICS #define _BIT_MAPPED_16_GRAPHICS #if defined(__COCO3__) #define SV_VIDEO ((uint8_t*)0x8000) #elif defined(__AGAT__) #define SV_VIDEO ((uint8_t*)0x6000) #endif extern uint8_t udgs[]; #define BYTES_PER_LINE ((XSize)*4) uint8_t first_map_one_to_four(uint8_t n); uint8_t second_map_one_to_four(uint8_t n); uint8_t third_map_one_to_four(uint8_t n); uint8_t fourth_map_one_to_four(uint8_t n); void _color_draw(uint8_t x, uint8_t y, uint8_t tile, uint8_t color); void _color_delete(uint8_t x, uint8_t y); #define _XL_DRAW(x,y,tile,color) \ _color_draw(x,y,tile,color) #define _XL_DELETE(x,y) \ _color_delete(x,y) #endif // _BIT_MAPPED_16_GRAPHICS ================================================ FILE: src/cross_lib/display/graphics_mode/bit_mapped_4_graphics.h ================================================ #ifndef _BIT_MAPPED_4_GRAPHICS #define _BIT_MAPPED_4_GRAPHICS #if defined(__SUPERVISION__) // #elif defined(__COCO__) #define SV_VIDEO ((uint8_t*)0x0E00) #elif defined(__MC10__) #define SV_VIDEO ((uint8_t*)0x4000) #endif // TODO: Make this more general #if defined(__SUPERVISION__) #define EXTRA_PADDING 8 #else #define EXTRA_PADDING 0 #endif /* NON-REVERSED MAPPING (e.g., COCO/DRAGON) color 1 0x00,0x01,0x04,0x05,0x10,0x11,0x14,0x15,0x40,0x41,0x44,0x45,0x50,0x51,0x54,0x55, color 2 0x00,0x02,0x08,0x0A,0x20,0x22,0x28,0x2A,0x80,0x82,0x88,0x8A,0xA0,0xA2,0xA8,0xAA, color 3 0x00,0x03,0x0C,0x0F,0x30,0x33,0x3C,0x3F,0xC0,0xC3,0xCC,0xCF,0xF0,0xF3,0xFC,0xFF, */ #define BYTES_PER_LINE ((XSize)*2+EXTRA_PADDING) #if defined(__MC10__) #include "8x6_c_definition.h" #endif uint8_t left_map_one_to_two(uint8_t n); uint8_t right_map_one_to_two(uint8_t n); void _color_draw(uint8_t x, uint8_t y, uint8_t tile, uint8_t color); void _color_delete(uint8_t x, uint8_t y); #define _XL_DRAW(x,y,tile,color) \ _color_draw(x,y,tile,color) #define _XL_DELETE(x,y) \ _color_delete(x,y) #endif // _BIT_MAPPED_4_GRAPHICS ================================================ FILE: src/cross_lib/display/graphics_mode/bit_mapped_graphics.h ================================================ #ifndef _BIT_MAPPED_GRAPHICS #define _BIT_MAPPED_GRAPHICS #if defined(__MO5__) #define SV_VIDEO ((uint8_t*)0x0000) #elif defined(__TO7__) #define SV_VIDEO ((uint8_t*)0x4000) #elif defined(__COCO__) || defined(__DRAGON__) #define SV_VIDEO ((uint8_t*)0x0E00) #elif defined(__COCO3__) #define SV_VIDEO ((uint8_t*)0x8000) #endif extern uint8_t udgs[]; #if defined(__MO5__) || defined(__TO7__) #define _BITMAP_XSize 40 #else #define _BITMAP_XSize (XSize) #endif #define BIT_MAP_DRAW() \ for(__i=0;__i<7;++__i) \ { \ SV_VIDEO[__base+__delta] = udgs[__offset+__i]; \ __delta+=_BITMAP_XSize; \ } \ SV_VIDEO[__base+(_BITMAP_XSize)*7] = udgs[__offset+7]; \ #define BIT_MAP_DELETE() \ for(__i=0;__i<7;++__i) \ { \ SV_VIDEO[(uint16_t) __base+__delta] = 0; \ __delta+=_BITMAP_XSize; \ } \ SV_VIDEO[__base+(_BITMAP_XSize)*(uint16_t)7] = 0; \ #if defined(__MO5__) || defined(__TO7__) #include "conio_patch.h" #define _XL_DRAW(x,y,tile,color) \ { \ uint8_t __i; \ uint16_t __base = (x)+(_BITMAP_XSize)*8*(y); \ uint8_t __delta = 0; \ uint8_t __offset = (8U*(uint8_t)(tile)) ; \ \ SWITCH_COLOR_BANK_OFF(); \ BIT_MAP_DRAW(); \ \ __delta = 0; \ SWITCH_COLOR_BANK_ON(); \ for(__i=0;__i<7;++__i) \ { \ SV_VIDEO[__base+__delta] = (color); \ __delta+=_BITMAP_XSize; \ } \ SV_VIDEO[__base+(_BITMAP_XSize)*(uint16_t)7] = (color); \ SWITCH_COLOR_BANK_OFF(); \ } #define _XL_DELETE(x,y) \ { \ uint8_t __i; \ uint16_t __base = (x)+(_BITMAP_XSize)*8*(y); \ uint8_t __delta = 0; \ \ SWITCH_COLOR_BANK_OFF(); \ BIT_MAP_DELETE(); \ } #elif defined(__COCO__) || defined(__DRAGON__) #define _XL_DRAW(x,y,tile,color) \ { \ uint16_t __i; \ uint16_t __base = (x)+(_BITMAP_XSize)*8*(y); \ uint8_t __delta = 0; \ uint16_t __offset = (8U*((uint16_t) tile)) ; \ \ BIT_MAP_DRAW(); \ } #define _XL_DELETE(x,y) \ { \ uint8_t __i; \ uint16_t __base = (x)+(_BITMAP_XSize)*8*(y); \ uint8_t __delta = 0; \ \ BIT_MAP_DELETE(); \ } #endif #endif // _BIT_MAPPED_GRAPHICS ================================================ FILE: src/cross_lib/display/graphics_mode/buffered_graphics.h ================================================ #ifndef ___BUFFERED_GRAPHICS #define ___BUFFERED_GRAPHICS #include "display_target_geometry.h" #if defined(__C64__) || defined(__C128__) #if defined(__DOUBLE_BUFFER) #define BASE_ADDR 0xB800 #define COLOR_ADDR 0xBC00 #define REAL_BASE_ADDR 0xC000 #define REAL_COLOR_ADDR 0xD800 #else #define BASE_ADDR 0xC000 #define COLOR_ADDR 0xD800 #endif #endif void display_all(void); #define _XL_DRAW(x,y,tile,color) \ video_buffer[(y)][(x)]=tile; #define _XL_DELETE(x,y) \ video_buffer[(y)][(x)]=_SPACE; #endif // ___BUFFERED_GRAPHICS ================================================ FILE: src/cross_lib/display/graphics_mode/conio_graphics.h ================================================ #ifndef _CONIO_GRAPHICS_H #define _CONIO_GRAPHICS_H #if !defined(_XL_NO_COLOR) #if defined(__FP1100__) #define _XL_DRAW(x,y,tile,color) \ do \ { \ gotoxy((X_OFFSET+(x)),(Y_OFFSET+(y))); \ _XL_SET_TEXT_COLOR(color); \ cputc(tile); \ gotoxy((X_OFFSET+((XSize)-1)),(Y_OFFSET+((YSize)))); \ cputc(' '); \ } \ while(0) #else #if defined(__NO_BOTTOM) #define _XL_DRAW(x,y,tile,color) \ do \ { \ if(y #define _DRAW_AUX(color,str,x,y) cpc_PrintGphStrStdXY(color,str,(x*2),(y*8)) #define _XL_DRAW(x,y,tile,color) _DRAW_AUX(color, char_list+(tile), (x), (y)) #define _XL_DELETE(x,y) _DRAW_AUX(CPC_BLACK,space_str,(x),(y)) #endif // _CPC___CPCRSLIB_GRAPHICS ================================================ FILE: src/cross_lib/display/graphics_mode/dual_memory_mapped_graphics.h ================================================ #ifndef ___DUAL_MEMORY_MAPPED_GRAPHICS #define ___DUAL_MEMORY_MAPPED_GRAPHICS #include "standard_libs.h" #include "display_macros.h" #if defined(___DUAL_MEMORY_MAPPED_GRAPHICS) # if defined(__C64__) || defined(__C128__) #if defined(__DOUBLE_BUFFER) #define BASE_ADDR 0xB800 #define COLOR_ADDR 0xBC00 #define REAL_BASE_ADDR 0xC000 #define REAL_COLOR_ADDR 0xD800 #else #define BASE_ADDR 0xC000 #define COLOR_ADDR 0xD800 #endif #elif defined(__MC10__) #define BASE_ADDR 0x4000 #elif defined(__VIC20__) && defined(___DUAL_MEMORY_MAPPED_GRAPHICS) && (defined(__VIC20_EXP_8K) || defined(__VIC20_EXP_16K)) #define BASE_ADDR 0x1000 #define COLOR_ADDR 0x9400 #elif defined(__C16__) #define BASE_ADDR 0x0C00 #define COLOR_ADDR 0x0800 #elif defined(__GAL__) #define BASE_ADDR 0x2800 #elif defined(__COCO__) || defined(__DRAGON__) #define BASE_ADDR 0x0400 #elif defined(__ATARI__) && defined(__ANTIC_MODE6_GRAPHICS) #define BASE_ADDR_VALUE (PEEK(88)+PEEK(89)*256) #elif defined(__ATARI5200__) #define BASE_ADDR 0x3E20 #elif defined(__ATMOS__) #define BASE_ADDR 0xBB80 #elif defined(__VIC20__) && (defined(__VIC20_UNEXPANDED) || defined(__VIC20_EXP_3K)) #define BASE_ADDR 0x1E00 #define COLOR_ADDR 0x9600 #elif defined(__MSX__) #if !defined(USE_MSX_BIOS) #define BASE_ADDR 0x0000 #else #define BASE_ADDR 0x1800 #endif #elif defined(__CREATIVISION__) && defined(___DUAL_MEMORY_MAPPED_GRAPHICS) #define BASE_ADDR 0x1000 #elif defined(__AQUARIUS__) // TODO: it could be 12288 with X_OFFSET 1 to avoid using the first character that also sets the border character #if defined(__DUAL_MEMORY_MAPPED_GRAPHICS) #define BASE_ADDR (12288+40) #else #define BASE_ADDR (12288+40) #endif #define COLOR_ADDR (BASE_ADDR+1024) #elif defined(__COMX__) || defined(__PECOM__) || defined(__TMC600__) || defined(__CIDELSA__) || defined(__MICRO__) #define BASE_ADDR 0xF800 #if defined(__TMC600__) #define COLOR_ADDR 0 #endif #elif defined(__PET__) #define BASE_ADDR 0x8000 #endif #if defined(__MSX__) #define DISPLAY_POKE(addr,val) msx_vpoke(addr,val) #elif defined(__CREATIVISION__) #define VDP_DATA 0x3000 #define VDP_CONTROL 0x3001 #include #define CHAR_BASE ((uint16_t) 0x0000) #define COLOR_DEF ((uint16_t) 0x1800) #define DISPLAY_POKE(addr,val) \ do { \ __asm__("sei"); \ POKE(VDP_CONTROL,(uint8_t) (addr&0x00FF)); \ POKE(VDP_CONTROL,(uint8_t) (addr>>8)|0x40); \ POKE(VDP_DATA,val); \ __asm__("cli"); \ } while(0) #elif defined(__COMX__) || defined(__PECOM__) || defined(__TMC600__) || defined(__CIDELSA__) || defined(__MICRO__) #include #define DISPLAY_POKE(addr,val) vidchar(addr,val) #elif defined(__MC10__) void mc10_display_poke(uint16_t addr, uint8_t val); #define DISPLAY_POKE(addr,val) mc10_display_poke(addr,val) #else #define DISPLAY_POKE(addr,val) (*(uint8_t*) (addr) = (val)) #endif #if defined(__TMC600__) #include #define COLOR_POKE(addr,color) setcolor(addr,color) #else #define COLOR_POKE(addr, color) \ do \ { \ DISPLAY_POKE(addr, color); \ } while(0) #endif /* COLOR_POKE((uint16_t) ((uint16_t) (COLOR_ADDR+(2*(x)+1)) +(uint16_t)(2*(y))*(XSize)),(color)); \ DISPLAY_POKE((((uint16_t) BASE_ADDR)+(2*(x)+1)+(uint8_t)(2*(y))*((uint16_t) (XSize ))), (tile)); \ COLOR_POKE((uint16_t) ((uint16_t) (COLOR_ADDR+(2*(x)+1)) +(uint16_t)(2*(y)+2)*(XSize)),(color)); \ DISPLAY_POKE((((uint16_t) BASE_ADDR)+(2*(x)+1)+(uint8_t)(2*(y)+2)*((uint16_t) (XSize))), (tile)); \ COLOR_POKE((uint16_t) ((uint16_t) (COLOR_ADDR+(2*(x))) +(uint16_t)(2*(y)+2)*(XSize)),(color)); \ DISPLAY_POKE((((uint16_t) BASE_ADDR)+(2*(x))+(uint8_t)(2*(y)+2)*((uint16_t) (XSize))), (tile)); \ */ #if defined(__AQUARIUS__) #define HARD_Y_LIMIT (YSize-1) #else #define HARD_Y_LIMIT (YSize+1) #endif #if !defined(_XL_NO_COLOR) #define _XL_DRAW(x,y,tile,color) \ do \ { \ COLOR_POKE((uint16_t) ((uint16_t) (COLOR_ADDR+(2*(x))) +(uint16_t)(1*(y))*(2*XSize)),(color)); \ DISPLAY_POKE((((uint16_t) BASE_ADDR)+(2*(x))+(uint8_t)(1*(y))*((uint16_t) (2*XSize))), (tile)); \ \ COLOR_POKE((uint16_t) ((uint16_t) (COLOR_ADDR+(2*(x)+1)) +(uint16_t)(1*(y))*(2*XSize)),(color)); \ DISPLAY_POKE((((uint16_t) BASE_ADDR)+(2*(x)+1)+(uint8_t)(1*(y))*((uint16_t) (2*XSize))), (tile)); \ \ } \ while(0) #else #define _XL_DRAW(x,y,tile,color) \ do \ { \ uint8_t computed_loc = (((uint16_t) BASE_ADDR)+(2*(x))+(uint8_t)((y))*((uint16_t) (XSize + X_OFFSET))); \ \ DISPLAY_POKE(computed_loc, (tile)); \ DISPLAY_POKE(computed_loc+2, (tile)); \ } \ while(0) #endif #define _XL_DELETE(x,y) \ do \ { \ COLOR_POKE((uint16_t) ((uint16_t) (COLOR_ADDR+(2*(x))) +(uint16_t)(1*(y))*(2*XSize)), _XL_BLACK); \ DISPLAY_POKE((((uint16_t) BASE_ADDR)+(2*(x))+(uint8_t)((1*y))*((uint16_t) (2*XSize))), _SPACE); \ \ COLOR_POKE((uint16_t) ((uint16_t) (COLOR_ADDR+(2*(x)+1)) +(uint16_t)(1*(y))*(2*XSize)), _XL_BLACK); \ DISPLAY_POKE((((uint16_t) BASE_ADDR)+(2*(x)+1)+(uint8_t)((1*y))*((uint16_t) (2*XSize))), _SPACE); \ \ } \ while(0) #endif #endif // ___DUAL_MEMORY_MAPPED_GRAPHICS ================================================ FILE: src/cross_lib/display/graphics_mode/lcc1802_color_graphics.h ================================================ #ifndef _LCC1802_COLOR_GRAPHICS #define _LCC1802_COLOR_GRAPHICS #define BASE_ADDR 0xF800 #if defined(__LCC1802_UNBUFFERED) #define VIDCHARXY(x,y,ch) vidcharnobufxy(x,y,ch) #define VIDFLUSH() #elif defined(VIS_INT) #define VIDCHARXY(x,y,ch) vidcharxy(x,y,ch) #define VIDFLUSH() #else #define VIDCHARXY(x,y,ch) vidcharxy(x,y,ch) #define VIDFLUSH() vidflush() #endif #if !defined(_XL_NO_COLOR) #define _XL_DRAW(x,y,tile,color) VIDCHARXY(((x)+X_OFFSET),((y)+Y_OFFSET),(tile)+(color)) #else #define _XL_DRAW(x,y,tile,color) VIDCHARXY(((x)+X_OFFSET),((y)+Y_OFFSET),(tile)) #endif #define _XL_DELETE(x,y) VIDCHARXY(((x)+X_OFFSET),((y)+Y_OFFSET),' ') #endif // _LCC1802_COLOR_GRAPHICS ================================================ FILE: src/cross_lib/display/graphics_mode/lcc1802_graphics.h ================================================ #ifndef _LCC1802_GRAPHICS #define _LCC1802_GRAPHICS #define BASE_ADDR 0xF800 #define _XL_DRAW(x,y,tile,color) vidcharxy(((x)+X_OFFSET),((y)+Y_OFFSET),tile) #define _XL_DELETE(x,y) vidcharxy(((x)+X_OFFSET),((y)+Y_OFFSET),' ') #endif // _LCC1802_GRAPHICS ================================================ FILE: src/cross_lib/display/graphics_mode/memory_mapped_graphics.h ================================================ #ifndef _MEMORY_MAPPED_GRAPHICS #define _MEMORY_MAPPED_GRAPHICS #include "standard_libs.h" #if (defined(__PET__) && defined(__MEMORY_MAPPED_GRAPHICS)) || defined(__MC10__) || defined(__AQUARIUS__) || \ (defined(__COCO__) && !defined(__BIT_MAPPED_GRAPHICS)) || (defined(__DRAGON__) && !defined(__BIT_MAPPED_GRAPHICS)) #include "display_macros.h" #endif #if defined(__MEMORY_MAPPED_GRAPHICS) # if defined(__C64__) || defined(__C128__) #if defined(__DOUBLE_BUFFER) // #define BASE_ADDR 0x9800 // #define COLOR_ADDR 0x9C00 // #define REAL_BASE_ADDR 0xC000 // #define REAL_COLOR_ADDR 0xD800 #define BASE_ADDR 0xB800 #define COLOR_ADDR 0xBC00 #define REAL_BASE_ADDR 0xC000 #define REAL_COLOR_ADDR 0xD800 #else #define BASE_ADDR 0xC000 #define COLOR_ADDR 0xD800 #endif #elif defined(__VZ__) #define BASE_ADDR 0x7000 #elif defined(__MC10__) #define BASE_ADDR 0x4000 #elif defined(__VIC20__) && defined(__MEMORY_MAPPED_GRAPHICS) && (defined(__VIC20_EXP_8K) || defined(__VIC20_EXP_16K)) #define BASE_ADDR 0x1000 #define COLOR_ADDR 0x9400 #elif defined(__C16__) #if defined(__DOUBLE_BUFFER) #define BASE_ADDR 0x2B00 // #define COLOR_ADDR 0x3000 #define REAL_BASE_ADDR 0x0C00 // #define REAL_COLOR_ADDR 0x0800 #else #define BASE_ADDR 0x0C00 // #define COLOR_ADDR 0x0800 #endif #define COLOR_ADDR 0x0800 #elif defined(__GAL__) #define BASE_ADDR 0x2800 #elif defined(__COCO__) || defined(__DRAGON__) #define BASE_ADDR 0x0400 #elif defined(__ATARI__) && defined(__ANTIC_MODE6_GRAPHICS) #define BASE_ADDR_VALUE (PEEK(88)+PEEK(89)*256) #elif defined(__ATARI5200__) #define BASE_ADDR 0x3E20 #elif defined(__ATMOS__) #define BASE_ADDR 0xBB80 #elif defined(__VIC20__) && (defined(__VIC20_UNEXPANDED) || defined(__VIC20_EXP_3K)) #define BASE_ADDR 0x1E00 #define COLOR_ADDR 0x9600 #elif defined(__MSX__) #if !defined(USE_MSX_BIOS) #define BASE_ADDR 0x0000 #else #define BASE_ADDR 0x1800 #endif #elif defined(__CREATIVISION__) && defined(__MEMORY_MAPPED_GRAPHICS) #define BASE_ADDR 0x1000 #elif defined(__AQUARIUS__) #define BASE_ADDR (12288+40) #define COLOR_ADDR (BASE_ADDR+1024) #elif defined(__COMX__) || defined(__PECOM__) || defined(__TMC600__) || defined(__CIDELSA__) || defined(__MICRO__) #define BASE_ADDR 0xF800 #if defined(__TMC600__) #define COLOR_ADDR 0 #endif #elif defined(__PET__) #define BASE_ADDR 0x8000 #endif #if defined(__MSX__) #define DISPLAY_POKE(addr,val) msx_vpoke(addr,val) #elif defined(__CREATIVISION__) #define VDP_DATA 0x3000 #define VDP_CONTROL 0x3001 #if !defined(PEEK) #include #endif #define CHAR_BASE ((uint16_t) 0x0000) #define COLOR_DEF ((uint16_t) 0x1800) #define DISPLAY_POKE(addr,val) \ do { \ __asm__("sei"); \ POKE(VDP_CONTROL,(uint8_t) (addr&0x00FF)); \ POKE(VDP_CONTROL,(uint8_t) (addr>>8)|0x40); \ POKE(VDP_DATA,val); \ __asm__("cli"); \ } while(0) #elif defined(__COMX__) || defined(__PECOM__) || defined(__TMC600__) || defined(__CIDELSA__) || defined(__MICRO__) #include #define DISPLAY_POKE(addr,val) vidchar(addr,val) #elif defined(__MC10__) void mc10_display_poke(uint16_t addr, uint8_t val); #define DISPLAY_POKE(addr,val) mc10_display_poke(addr,val) #else #define DISPLAY_POKE(addr,val) (*(uint8_t*) (addr) = (val)) #endif #if defined(__TMC600__) #include #define COLOR_POKE(addr,color) setcolor(addr,color) #else #define COLOR_POKE(addr, color) DISPLAY_POKE(addr, color) #endif #if !defined(_XL_NO_COLOR) void _XL_DRAW(uint8_t x, uint8_t y, uint8_t tile, uint8_t color); #else void __DRAW_NO_COLOR(uint8_t x, uint8_t y, uint8_t tile); #define _XL_DRAW(x, y, tile, color) __DRAW_NO_COLOR(x,y,tile) #endif void _XL_DELETE(uint8_t x,uint8_t y); // #define _XL_DELETE(x,y) DISPLAY_POKE(loc(x,y), _SPACE) uint16_t loc(uint8_t x, uint8_t y); #endif #endif // _MEMORY_MAPPED_GRAPHICS ================================================ FILE: src/cross_lib/display/graphics_mode/nes_conio_graphics.h ================================================ #ifndef _CONIO_GRAPHICS_H #define _CONIO_GRAPHICS_H #define _XL_DRAW(x,y,tile,color) \ do \ { \ gotoxy((x),(y)); \ cputc((tile)+(color)); \ } \ while(0) #define _XL_DELETE(x,y) \ do \ { \ gotoxy((x),(y)); \ cputc(_SPACE); \ } \ while(0) #endif // _CONIO_GRAPHICS_H ================================================ FILE: src/cross_lib/display/graphics_mode/no_graphics.h ================================================ #ifndef ___NO_GRAPHICS #define ___NO_GRAPHICS // TODO: to be implemented #define _XL_DRAW(x,y,tile,color) #define _XL_DELETE(x,y) #endif // ___NO_GRAPHICS ================================================ FILE: src/cross_lib/display/graphics_mode/oric_color_graphics.h ================================================ #ifndef _MEMORY_MAPPED_GRAPHICS #define _MEMORY_MAPPED_GRAPHICS #include "standard_libs.h" #define BASE_ADDR 0xBB80 #define DISPLAY_POKE(addr,val) (*(uint8_t*) (addr) = (val)) #if defined(__MONO_COLOR) #define _XL_DRAW(x,y,tile,color) \ DISPLAY_POKE((uint16_t) loc(x+X_OFFSET,y), (tile)); #else #define _XL_DRAW(x,y,tile,color) \ DISPLAY_POKE((uint16_t) loc(x+X_OFFSET,y), (tile)+(color)); #endif #define _XL_DELETE(x,y) DISPLAY_POKE(loc(x+X_OFFSET,y), _SPACE) uint16_t loc(uint8_t x, uint8_t y); #endif // _MEMORY_MAPPED_GRAPHICS ================================================ FILE: src/cross_lib/display/graphics_mode/pv1000_graphics.h ================================================ #ifndef _PV1000_GRAPHICS_H #define _PV1000_GRAPHICS_H #define _XL_DRAW(x,y,tile,color) \ do \ { \ gotoxy((X_OFFSET+(x)),(Y_OFFSET+(y))); \ cputc(tile+color); \ } \ while(0) #define _XL_DELETE(x,y) \ do \ { \ gotoxy((X_OFFSET+x),(Y_OFFSET+y)); \ cputc(_SPACE); \ } \ while(0) #endif // _PV1000_GRAPHICS_H ================================================ FILE: src/cross_lib/display/graphics_mode/quad_memory_mapped_graphics.h ================================================ #ifndef ___QUAD_MEMORY_MAPPED_GRAPHICS #define ___QUAD_MEMORY_MAPPED_GRAPHICS #include "standard_libs.h" #include "display_macros.h" #if defined(___QUAD_MEMORY_MAPPED_GRAPHICS) # if defined(__C64__) || defined(__C128__) #if defined(__DOUBLE_BUFFER) #define BASE_ADDR 0xB800 #define COLOR_ADDR 0xBC00 #define REAL_BASE_ADDR 0xC000 #define REAL_COLOR_ADDR 0xD800 #else #define BASE_ADDR 0xC000 #define COLOR_ADDR 0xD800 #endif #elif defined(__MC10__) #define BASE_ADDR 0x4000 #elif defined(__VIC20__) && defined(___QUAD_MEMORY_MAPPED_GRAPHICS) && (defined(__VIC20_EXP_8K) || defined(__VIC20_EXP_16K)) #define BASE_ADDR 0x1000 #define COLOR_ADDR 0x9400 #elif defined(__C16__) #define BASE_ADDR 0x0C00 #define COLOR_ADDR 0x0800 #elif defined(__GAL__) #define BASE_ADDR 0x2800 #elif defined(__COCO__) || defined(__DRAGON__) #define BASE_ADDR 0x0400 #elif defined(__ATARI__) && defined(__ANTIC_MODE6_GRAPHICS) #define BASE_ADDR_VALUE (PEEK(88)+PEEK(89)*256) #elif defined(__ATARI5200__) #define BASE_ADDR 0x3E20 #elif defined(__ATMOS__) #define BASE_ADDR 0xBB80 #elif defined(__VIC20__) && (defined(__VIC20_UNEXPANDED) || defined(__VIC20_EXP_3K)) #define BASE_ADDR 0x1E00 #define COLOR_ADDR 0x9600 #elif defined(__MSX__) #if !defined(USE_MSX_BIOS) #define BASE_ADDR 0x0000 #else #define BASE_ADDR 0x1800 #endif #elif defined(__CREATIVISION__) && defined(___QUAD_MEMORY_MAPPED_GRAPHICS) #define BASE_ADDR 0x1000 #elif defined(__AQUARIUS__) // TODO: it could be 12288 with X_OFFSET 1 to avoid using the first character that also sets the border character #if defined(__QUAD_MEMORY_MAPPED_GRAPHICS) #define BASE_ADDR (12288) #else #define BASE_ADDR (12288+40) #endif #define COLOR_ADDR (BASE_ADDR+1024) #elif defined(__COMX__) || defined(__PECOM__) || defined(__TMC600__) || defined(__CIDELSA__) || defined(__MICRO__) #define BASE_ADDR 0xF800 #if defined(__TMC600__) #define COLOR_ADDR 0 #endif #elif defined(__PET__) #define BASE_ADDR 0x8000 #endif #if defined(__MSX__) #define DISPLAY_POKE(addr,val) msx_vpoke(addr,val) #elif defined(__CREATIVISION__) #define VDP_DATA 0x3000 #define VDP_CONTROL 0x3001 #include #define CHAR_BASE ((uint16_t) 0x0000) #define COLOR_DEF ((uint16_t) 0x1800) #define DISPLAY_POKE(addr,val) \ do { \ __asm__("sei"); \ POKE(VDP_CONTROL,(uint8_t) (addr&0x00FF)); \ POKE(VDP_CONTROL,(uint8_t) (addr>>8)|0x40); \ POKE(VDP_DATA,val); \ __asm__("cli"); \ } while(0) #elif defined(__COMX__) || defined(__PECOM__) || defined(__TMC600__) || defined(__CIDELSA__) || defined(__MICRO__) #include #define DISPLAY_POKE(addr,val) vidchar(addr,val) #elif defined(__MC10__) void mc10_display_poke(uint16_t addr, uint8_t val); #define DISPLAY_POKE(addr,val) mc10_display_poke(addr,val) #else #define DISPLAY_POKE(addr,val) (*(uint8_t*) (addr) = (val)) #endif #if defined(__TMC600__) #include #define COLOR_POKE(addr,color) setcolor(addr,color) #else #define COLOR_POKE(addr, color) \ do \ { \ DISPLAY_POKE(addr, color); \ } while(0) #endif /* COLOR_POKE((uint16_t) ((uint16_t) (COLOR_ADDR+(2*(x)+1)) +(uint16_t)(2*(y))*(XSize)),(color)); \ DISPLAY_POKE((((uint16_t) BASE_ADDR)+(2*(x)+1)+(uint8_t)(2*(y))*((uint16_t) (XSize ))), (tile)); \ COLOR_POKE((uint16_t) ((uint16_t) (COLOR_ADDR+(2*(x)+1)) +(uint16_t)(2*(y)+2)*(XSize)),(color)); \ DISPLAY_POKE((((uint16_t) BASE_ADDR)+(2*(x)+1)+(uint8_t)(2*(y)+2)*((uint16_t) (XSize))), (tile)); \ COLOR_POKE((uint16_t) ((uint16_t) (COLOR_ADDR+(2*(x))) +(uint16_t)(2*(y)+2)*(XSize)),(color)); \ DISPLAY_POKE((((uint16_t) BASE_ADDR)+(2*(x))+(uint8_t)(2*(y)+2)*((uint16_t) (XSize))), (tile)); \ */ #if defined(__AQUARIUS__) #define HARD_Y_LIMIT (YSize-1) #else #define HARD_Y_LIMIT (YSize+1) #endif #define SCREEN_XSIZE (XSize+X_OFFSET) extern uint8_t quad_tile[26][4]; #if !defined(_XL_NO_COLOR) #define _XL_DRAW(x,y,tile,color) \ do \ { \ COLOR_POKE((uint16_t) ((uint16_t) (COLOR_ADDR+(2*(x)+X_OFFSET)) +(uint16_t)((y))*(4*SCREEN_XSIZE)),(color)); \ DISPLAY_POKE((((uint16_t) BASE_ADDR)+(2*(x)+X_OFFSET)+(uint8_t)((y))*((uint16_t) (4*SCREEN_XSIZE))), (quad_tile[tile][0])); \ \ COLOR_POKE((uint16_t) ((uint16_t) (COLOR_ADDR+(2*(x)+1+X_OFFSET)) +(uint16_t)((y))*(4*SCREEN_XSIZE)),(color)); \ DISPLAY_POKE((((uint16_t) BASE_ADDR)+(2*(x)+1+X_OFFSET)+(uint8_t)((y))*((uint16_t) (4*SCREEN_XSIZE))), (quad_tile[tile][1])); \ \ if(y #include "standard_libs.h" extern uint8_t char_list[]; extern uint8_t space_str[]; #define _XL_DRAW(x,y,tile,color) DsPrintf((x),(y),16,char_list+tile) #define _XL_DELETE(x,y) DsPrintf((x),(y),16,space_str) #endif // _REX_GRAPHICS ================================================ FILE: src/cross_lib/display/graphics_mode/terminal_graphics.h ================================================ #ifndef _TERMINAL_GRAPHICS_H #define _TERMINAL_GRAPHICS_H void _terminal_draw(uint8_t x, uint8_t y, uint8_t tile, uint8_t color); void _terminal_delete(uint8_t x, uint8_t y); #define _XL_DRAW(x,y,tile,color) \ _terminal_draw(x,y,tile,color) #define _XL_DELETE(x,y) \ _terminal_delete(x,y) #endif // _TERMINAL_GRAPHICS_H ================================================ FILE: src/cross_lib/display/graphics_mode/vdp_mode1_graphics.h ================================================ #ifndef _VDP_MODE1_GRAPHICS #define _VDP_MODE1_GRAPHICS #include "standard_libs.h" #define _CREAT_XSIZE 32 #define _CREAT_YSIZE 24 #if defined(__CREATIVISION__) #define BASE_ADDR 0x1000 #elif defined(__TI99__) #define BASE_ADDR gImage #endif #define VDP_DATA 0x3000 #define VDP_CONTROL 0x3001 #if defined(__CREATIVISION__) #include #define CHAR_BASE ((uint16_t) 0x0000) #define COLOR_DEF ((uint16_t) 0x1800) #define DISPLAY_POKE(addr,val) \ do { \ __asm__("sei"); \ POKE(VDP_CONTROL,(uint8_t) (addr&0x00FF)); \ POKE(VDP_CONTROL,(uint8_t) (addr>>8)|0x40); \ POKE(VDP_DATA,val); \ __asm__("cli"); \ } while(0) #elif defined(__TI99__) #define DISPLAY_POKE(addr,val) \ do { \ vdpmemset(addr,val,1); \ } while(0) #endif uint16_t loc(uint8_t x, uint8_t y); #if defined(__QUAD_MEMORY_MAPPED_GRAPHICS) #define X_MULT 2 #define Y_MULT 2 #else #define X_MULT 1 #define Y_MULT 1 #endif // TODO: Isolate the bug when _XL_DRAW uses loc(x,y) // loc(x,y) -> // no string displayed after _XL_DRAW in title screen of Snake // // locti99(x,y) -> // games/stinger/main.o: In function `L300': // (.text+0x1585): relocation truncated to fit: R_TMS9900_PC8 against `.text' // make: *** [makefiles.common/targets/gcc4ti/Makefile_ti99:132: xchase.ea5.elf] Error 1 // #define locti99(x, y) ((uint16_t) BASE_ADDR)+(X_MULT)*x+(uint8_t)((Y_MULT)*y)*(uint16_t) ((XSize) + X_OFFSET) // #define _XL_DRAW(x,y,__tile,__color) \ // do \ // { \ // DISPLAY_POKE(locti99(x,y), (__tile)+(__color)); \ // } \ // while(0) // #define _XL_DELETE(x,y) DISPLAY_POKE(locti99(x,y), _SPACE) #define _XL_DRAW(x,y,__tile,__color) \ do \ { \ DISPLAY_POKE(loc(x,y), (__tile)+(__color)); \ } \ while(0) #define _XL_DELETE(x,y) DISPLAY_POKE(loc(x,y), _SPACE) #endif // _VDP_MODE1_GRAPHICS ================================================ FILE: src/cross_lib/display/graphics_mode/vectorial_graphics.h ================================================ #ifndef ___VECTORIAL_GRAPHICS_GRAPHICS #define ___VECTORIAL_GRAPHICS_GRAPHICS // TODO: to be implemented #define _XL_DRAW(tile,color) #define _XL_DELETE(x,y) #endif // ___VECTORIAL_GRAPHICS_GRAPHICS ================================================ FILE: src/cross_lib/display/graphics_mode/vga_graphics.h ================================================ // void _XL_DRAW(uint8_t x, uint8_t y, uint8_t tile, uint8_t color); // void _XL_DELETE(uint8_t x, uint8_t y); // TODO: color #define _XL_DRAW(x,y,tile,color) \ _display_tile(x,y,tile,color); #define _XL_DELETE(x,y) \ _delete_vga_tile(8*(uint16_t)(x),8*(uint16_t)(y)); // #define _XL_DELETE(x,y) \ // _display_tile(x,y,0,0); // #define _XL_DELETE2(x,y) \ // do \ // { \ // _delete_vga_tile(x,y); \ // _delete_vga_tile(x,(y+1)); \ // _delete_vga_tile(x,(y+2)); \ // _delete_vga_tile(x,(y+3)); \ // _delete_vga_tile(x,(y+4)); \ // _delete_vga_tile(x,(y+5)); \ // _delete_vga_tile(x,(y+6)); \ // _delete_vga_tile(x,(y+7)); \ // } while(0) ================================================ FILE: src/cross_lib/display/graphics_mode/z88dk_sprites_graphics.h ================================================ #ifndef __Z88DK_SPRITES_GRAPHICS_GRAPHICS #define __Z88DK_SPRITES_GRAPHICS_GRAPHICS #include #include #include extern uint8_t sprites[]; #include "display_target_geometry.h" #define BLIT_OPERATION spr_or #if defined(__ZX81__) || defined(__C128_Z80__) #define _XL_DELETE(x,y) \ clga((x)*(__SPRITE_X_STEP),(y)*(__SPRITE_Y_STEP),SPRITE_X_SIZE,SPRITE_Y_SIZE) #else #define _XL_DELETE(x,y) \ putsprite(spr_and,(x)*(__SPRITE_X_STEP),(y)*(__SPRITE_Y_STEP),sprites + ((_SPACE)*(2+SPRITE_Y_SIZE))) #endif #if defined(__NO_SPRITE_TRANSPARENCY) #define _XL_DRAW(x,y,tile,color) \ do \ { \ _XL_DELETE(x,y); \ putsprite(BLIT_OPERATION,(x)*(__SPRITE_X_STEP),(y)*(__SPRITE_Y_STEP),sprites + ((tile)*(2+SPRITE_Y_SIZE))); \ } while(0) #else #define _XL_DRAW(x,y,tile,color) \ putsprite(BLIT_OPERATION,(x)*(__SPRITE_X_STEP),(y)*(__SPRITE_Y_STEP),sprites + ((tile)*(2+SPRITE_Y_SIZE))) #endif #endif // __Z88DK_SPRITES_GRAPHICS_GRAPHICS ================================================ FILE: src/cross_lib/display/graphics_settings.h ================================================ #ifndef _GRAPHICS_SETTING_H #define _GRAPHICS_SETTING_H # if defined(__MEMORY_MAPPED_GRAPHICS) #include "memory_mapped_graphics.h" #elif defined(__PV1000_GRAPHICS) #include "pv1000_graphics.h" #elif defined(__VGA_GRAPHICS) #include "vga_graphics.h" #elif defined(__BBC__) && defined(__BBC_GRAPHICS) #include "bbc_graphics.h" #elif defined(__TERMINAL__) #include "terminal_graphics.h" #elif defined(__QUAD_MEMORY_MAPPED_GRAPHICS) #include "quad_memory_mapped_graphics.h" #elif defined(__DUAL_MEMORY_MAPPED_GRAPHICS) #include "dual_memory_mapped_graphics.h" #elif defined(__ATARI7800_COLOR_GRAPHICS) #include "atari7800_color_graphics.h" #elif defined(__APPLE2_HGR_GRAPHICS) #include "apple2_hgr_graphics.h" #elif defined(__VDP_MODE1_GRAPHICS) #include "vdp_mode1_graphics.h" #elif defined(__NES_CONIO_GRAPHICS) #include "nes_conio_graphics.h" #elif defined(__COMX_COLOR_GRAPHICS) #include "lcc1802_color_graphics.h" #elif defined(__ORIC_COLOR_GRAPHICS) #include "oric_color_graphics.h" #elif defined(__CONIO_GRAPHICS) #include "conio_graphics.h" #elif defined(__ANTIC_MODE6_GRAPHICS) #include "antic_mode6_graphics.h" #elif defined(__VECTORIAL_GRAPHICS) #include "vectorial_graphics.h" #elif defined(__BUFFERED_GRAPHICS) #include "buffered_graphics.h" #elif defined(__Z88DK_SPRITES_GRAPHICS) #include "z88dk_sprites_graphics.h" #elif defined(__LYNX_TGI_GRAPHICS) #include "atari_lynx_tgi_graphics.h" #elif defined(__CPCRSLIB_GRAPHICS) #include "cpc_cpcrslib_graphics.h" #elif defined(__BIT_MAPPED_16_GRAPHICS) #include "bit_mapped_16_graphics.h" #elif defined(__BIT_MAPPED_4_GRAPHICS) #include "bit_mapped_4_graphics.h" #elif defined(__BIT_MAPPED_GRAPHICS) #include "bit_mapped_graphics.h" #elif defined(__REX_GRAPHICS) #include "rex_graphics.h" #elif defined(__LCC1802_GRAPHICS) #include "lcc1802_graphics.h" #elif defined(__PV1000_GRAPHICS) #include "pv1000_graphics.h" #elif defined(__NO_GRAPHICS) #include "no_graphics.h" #endif #endif // _GRAPHICS_SETTING_H ================================================ FILE: src/cross_lib/display/init_graphics/ack/msdos386/init386_vga.s ================================================ .sect .text .sect .rom .sect .data .sect .bss .sect .text ! Protected mode code ! Set VGA mode 13h through DPMI !mov ax, 0x0000 ; AL=00: set video mode !mov bx, 0x0013 ; mode 13h !mov cx, 0 ; not used !; Build the real-mode register structure somewhere in memory: !; DPMI real-mode call uses a 16-byte structure. !; ES:DI points to the structure !mov ax, 0x0300 ; DPMI: simulate real-mode interrupt !mov bl, 0x10 ; BIOS interrupt 10h !int 0x31 ; run it .define __init_vga __init_vga: ret !.define __cls !__cls: ! push bp ! push di ! mov ax, 0x0013 ! VGA 320x200x256 ! int 0x10 ! BIOS sets the mode and clears the screen ! pop di ! pop bp ! ret !.define __init_vga !__init_vga: ! push bp ! push di ! mov ax, 0x13 ! int 0x10 ! pop di ! pop bp ! ret !.define __video_mode !__video_mode: ! push bp ! push di ! mov ax, 19 ! int 16 ! pop di ! pop bp ! ret .define __keyboard_init __keyboard_init: push bp push di movb ah, 0x03 movb al, 0x05 !set typematic rate/delay movb bh, 0x00 !repeat delay: 250ms <-- this has to be 0 movb bl, 0x00 !typematic rate: 30 int 0x16 pop di pop bp ret !.define _text_mode !_text_mode: ! mov ax, 3 ! int 16 ! ret .define __wait_for_key __wait_for_key: push bp push di movb ah, 0x00 ! function: wait for key int 0x16 ! returns key in AX pop di pop bp ret .define __delete_vga_pixel __delete_vga_pixel: push bp mov bp, sp push ax push bx push cx push dx push di ! mov bx, sp mov cx, 4(bp) mov dx, 6(bp) ! Set ES = A000h (VGA memory) mov ax, 0xA000 mov es, ax ! Compute offset = y*320 + x mov ax, dx ! AX = y mov bx, 320 mul bx ! AX = y*320 (fits in 16 bits) add ax, cx ! AX = y*320 + x mov di, ax ! DI = offset ! movb al, 0 ! color xor ax,ax ! AL already contains color ! Write pixel using STOSB stosb ! [ES:DI] = AL, increments DI pop di pop dx pop cx pop bx pop ax pop bp ret .define __delete_vga_segment __delete_vga_segment: push bp mov bp, sp ! push ax ! push bx push cx ! push dx push di ! mov bx, sp mov cx, 4(bp) mov dx, 6(bp) ! Set ES = A000h (VGA memory) mov ax, 0xA000 mov es, ax ! Compute offset = y*320 + x mov ax, dx ! AX = y mov bx, 320 mul bx ! AX = y*320 (fits in 16 bits) add ax, cx ! AX = y*320 + x mov di, ax ! DI = offset movb al, 0 ! color ! AL already contains color ! Write pixel using STOSB mov cx, 8 rep stosb ! [ES:DI] = AL, increments DI pop di ! pop dx pop cx ! pop bx ! pop ax pop bp ret ! TODO: Fix this because it is still broken .define __delete_vga_tile __delete_vga_tile: push bp mov bp, sp ! push ax ! push bx push cx ! push dx push di ! mov bx, sp mov cx, 4(bp) mov dx, 6(bp) ! Set ES = A000h (VGA memory) mov ax, 0xA000 mov es, ax ! Compute offset = y*320 + x mov ax, dx ! AX = y mov bx, 320 mul bx ! AX = y*320 (fits in 16 bits) add ax, cx ! AX = y*320 + x mov di, ax ! DI = offset movb al, 0 ! color ! AL already contains color ! Write pixel using STOSB mov cx, 8 rep stosb ! [ES:DI] = AL, increments DI mov ax, di add ax, 312 mov di, ax movb al, 0 mov cx, 8 rep stosb ! [ES:DI] = AL, increments DI mov ax, di add ax, 312 mov di, ax movb al, 0 mov cx, 8 rep stosb ! [ES:DI] = AL, increments DI mov ax, di add ax, 312 mov di, ax movb al, 0 mov cx, 8 rep stosb ! [ES:DI] = AL, increments DI mov ax, di add ax, 312 mov di, ax movb al, 0 mov cx, 8 rep stosb ! [ES:DI] = AL, increments DI mov ax, di add ax, 312 mov di, ax movb al, 0 mov cx, 8 rep stosb ! [ES:DI] = AL, increments DI mov ax, di add ax, 312 mov di, ax movb al, 0 mov cx, 8 rep stosb ! [ES:DI] = AL, increments DI mov ax, di add ax, 312 mov di, ax movb al, 0 mov cx, 8 rep stosb ! [ES:DI] = AL, increments DI pop di ! pop dx pop cx ! pop bx ! pop ax pop bp ret ! PlotPixel_STOSB: ! CX = x (0..319) ! DX = y (0..199) ! AL = color (0..255) ! Uses STOSB to write the pixel ! Registers preserved. .define __plot_vga __plot_vga: ! Stack layout (cdecl): ! esp+4 -> x (32-bit int) ! esp+8 -> y (32-bit int) ! esp+12 -> color (8-bit, but passed as 32-bit) !mov eax, [esp+4] ! eax = x !mov ebx, [esp+8] ! ebx = y !mov ecx, [esp+12] ! ecx = color (lower byte used) mov eax, 4(esp) ! eax = x mov ebx, 8(esp) ! ebx = y mov ecx, 12(esp) ! ecx = color (lower byte used) ! offset = y * 320 + x imul ebx, ebx, 320 ! ebx = y*320 add ebx, eax ! ebx = y*320 + x ! edi = A0000h + offset mov edi, 0xA0000 add edi, ebx ! eseg mov (esi), al ! Write pixel !mov [edi], cl ! store color byte eseg movb (esi), cl ! store color byte ret .define __kb_poll __kb_poll: inb 0x60 ret ! int kb_poll_buffer() returns ASCII code or 0 if none ! it also flushes the buffer (so the buffer behaves as a 1 byte buffer) .define __kb_poll_buffer __kb_poll_buffer: push bp push di push bx movb bl, 0 CheckLoop: movb ah, 0x01 int 0x16 jz Done movb ah, 0x00 int 0x16 movb bl, al jmp CheckLoop Done: movb ah, 0 movb al, bl pop bx pop di pop bp ret .define __speaker_beep __speaker_beep: push bp mov bp, sp push di movb al, 0xB6 ! Channel 2, lobyte/hibyte, mode 3 (square wave) outb 0x43 mov ax, 4(bp) !mov ax, 1193 outb 0x42 ! Low byte movb al, ah outb 0x42 ! High byte ! Enable speaker (bits 0 and 1 of port 61h) inb 0x61 orb al, 0x03 outb 0x61 ! ---- Delay loop ---- mov cx, 6(bp) .delay: loop .delay ! Disable speaker inb 0x61 andb al, 0xFC ! clear bits 0 and 1 outb 0x61 pop di pop bp ret ================================================ FILE: src/cross_lib/display/init_graphics/ack/msdos386/msdos386_init_graphics.c ================================================ // #define POKE(addr,val) (*(unsigned char *) (addr) = (val)) // #define POKEW(addr,val) (*(unsigned int *) (addr) = (val)) // #define SCREEN_BASE (0x0000A000UL) // #define TEXT_BASE (0x0000B800UL) #include #include #include "8x8_chars.h" extern void _init_vga(void); extern void _video_mode(void); extern void _delete_vga_tile(uint16_t x, uint16_t y); extern void _delete_vga_segment(uint16_t x, uint16_t y); extern void _delete_vga_pixel(uint16_t x, uint16_t y); extern void _keyboard_init(void); extern void _plot_vga(uint16_t x, uint16_t y, uint8_t color); uint8_t _vga_text_color; uint16_t _i86_tiles[][8] = { _TILE_0_UDG, _TILE_1_UDG, _TILE_2_UDG, _TILE_3_UDG, _TILE_4_UDG, _TILE_5_UDG, _TILE_6_UDG, _TILE_7_UDG, _TILE_8_UDG, _TILE_9_UDG, _TILE_10_UDG, _TILE_11_UDG, _TILE_12_UDG, _TILE_13_UDG, _TILE_14_UDG, _TILE_15_UDG, _TILE_16_UDG, _TILE_17_UDG, _TILE_18_UDG, _TILE_19_UDG, _TILE_20_UDG, _TILE_21_UDG, _TILE_22_UDG, _TILE_23_UDG, _TILE_24_UDG, _TILE_25_UDG, _TILE_26_UDG, _TILE_A, _TILE_B, _TILE_C, _TILE_D, _TILE_E, _TILE_F, _TILE_G, _TILE_H, _TILE_I, _TILE_J, _TILE_K, _TILE_L, _TILE_M, _TILE_N, _TILE_O, _TILE_P, _TILE_Q, _TILE_R, _TILE_S, _TILE_T, _TILE_U, _TILE_V, _TILE_W, _TILE_X, _TILE_Y, _TILE_Z, _TILE_DIGIT_0, _TILE_DIGIT_1, _TILE_DIGIT_2, _TILE_DIGIT_3, _TILE_DIGIT_4, _TILE_DIGIT_5, _TILE_DIGIT_6, _TILE_DIGIT_7, _TILE_DIGIT_8, _TILE_DIGIT_9, _SPACE_TILE, }; // void _display_tile(uint8_t x, uint8_t y, uint8_t tile, uint8_t color) // { // uint8_t row; // uint8_t col; // uint16_t row_pos; // uint16_t col_pos; // uint8_t tile_row; // for(row=0;row<8;++row) // { // row_pos = 8*(uint16_t)y+row; // tile_row = _i86_tiles[tile][row]; // for(col=0;col<8;++col) // { // col_pos = 8*(uint16_t)x+col; // if(tile_row&(128>>col)) // { // _plot_vga(col_pos,row_pos,color); // } // else // { // _delete_vga_pixel(col_pos,row_pos); // } // } // } // } void _display_tile(uint8_t x, uint8_t y, uint8_t tile, uint8_t color) { uint8_t row; uint8_t col; uint16_t row_pos; uint16_t col_pos; uint8_t tile_row; row_pos = 8*(uint16_t)y; for(row=0;row<8;++row) { tile_row = _i86_tiles[tile][row]; col_pos = 8*(uint16_t)x; for(col=0;col<8;++col) { if(tile_row&(128>>col)) { _plot_vga(col_pos,row_pos,color); } else { _delete_vga_pixel(col_pos,row_pos); } ++col_pos; } ++row_pos; } } // void _delete_tile(uint8_t x, uint8_t y) // { // _delete_vga_tile(8*(uint16_t)x,8*(uint16_t)y); // } void _XL_INIT_GRAPHICS(void) { _init_vga(); _keyboard_init(); // _plot_vga(10,10,100); // _plot_vga(20,10,110); // _plot_vga(30,20,120); // _plot_vga(40,20,130); // while(1){}; } ================================================ FILE: src/cross_lib/display/init_graphics/ack/msdos86/CGA.txt ================================================ ; ========================================================== ; CGA Mode 04h pixel plot ; void plot_pixel(int x, int y, unsigned char color); ; ========================================================== public _plot_pixel _plot_pixel proc near push bp mov bp, sp push ax push bx push cx push dx push si mov bx, [bp+4] ; x mov cx, [bp+6] ; y mov dl, [bp+8] ; color (0–3) ;------------------------------------------ ; Compute base address: ; B800:0000 = even scanlines ; B800:2000 = odd scanlines ;------------------------------------------ mov ax, 0B800h mov es, ax mov ax, cx shr ax, 1 ; ax = y/2 mov si, ax mov ax, 80 mul si ; ax = (y/2)*80 mov si, ax ; SI = line base test cx, 1 jz LineEven add si, 2000h ; odd lines start at offset 0x2000 LineEven: ; --- byte offset += x/2 --- mov ax, bx shr ax, 1 ; ax = x/2 add si, ax ;------------------------------------------ ; Determine which half-byte to modify ;------------------------------------------ mov al, es:[si] ; read old byte test bx, 1 jz PixelLeft ; Right pixel (low 4 bits) and al, 0F0h ; clear low nibble or al, dl ; insert color 0..3 jmp Store PixelLeft: ; Left pixel (high 4 bits) and al, 0Fh ; clear high nibble mov ah, dl shl ah, 4 ; move into high nibble or al, ah Store: mov es:[si], al ; write pixel pop si pop dx pop cx pop bx pop ax pop bp ret 6 _plot_pixel endp ================================================ FILE: src/cross_lib/display/init_graphics/ack/msdos86/EGA.txt ================================================ ; ========================================================== ; void plot_pixel(int x, int y, unsigned char color); ; ========================================================== public _plot_pixel _plot_pixel proc near push bp mov bp, sp push ax push bx push cx push dx push si mov bx, [bp+4] ; x mov cx, [bp+6] ; y mov dl, [bp+8] ; color ; offset = y * 40 + (x >> 3) mov ax, cx mov si, 40 mul si ; ax = y*40 mov si, ax mov ax, bx shr ax, 3 ; ax = x/8 add si, ax ; mask = 80h >> (x & 7) mov dx, bx and dx, 7 mov ah, 80h mov cl, dl ; save color shr ah, cl ; mask in AH ; Now write color bit-by-bit into 4 planes mov ax, 0A000h mov es, ax mov al, dl ; al = color mov cx, 4 WritePlane: push ax push cx ; Select plane = (1 << plane) mov dx, 3C4h mov al, 02h ; index = 2 (Map Mask Register) mov ah, 1 shl ah, cl ; mask = 1 << plane out dx, ax ; Write bit if this plane's color bit = 1 pop cx pop ax test al, 1 jz SkipWrite mov es:[si], ah ; write mask bit SkipWrite: shr al, 1 ; next color bit (next plane) loop WritePlane pop si pop dx pop cx pop bx pop ax pop bp ret 6 _plot_pixel endp ================================================ FILE: src/cross_lib/display/init_graphics/ack/msdos86/init_vga.s ================================================ .sect .text .sect .rom .sect .data .sect .bss .sect .text !.define __cls !__cls: ! push bp ! push di ! mov ax, 0x0013 ! VGA 320x200x256 ! int 0x10 ! BIOS sets the mode and clears the screen ! pop di ! pop bp ! ret .define __init_vga __init_vga: push bp push di mov ax, 0x13 int 0x10 pop di pop bp ret !.define __video_mode !__video_mode: ! push bp ! push di ! mov ax, 19 ! int 16 ! pop di ! pop bp ! ret .define __keyboard_init __keyboard_init: push bp push di movb ah, 0x03 movb al, 0x05 !set typematic rate/delay movb bh, 0x00 !repeat delay: 250ms <-- this has to be 0 movb bl, 0x00 !typematic rate: 30 int 0x16 pop di pop bp ret !.define _text_mode !_text_mode: ! mov ax, 3 ! int 16 ! ret .define __wait_for_key __wait_for_key: push bp push di movb ah, 0x00 ! function: wait for key int 0x16 ! returns key in AX pop di pop bp ret .define __delete_vga_pixel __delete_vga_pixel: push bp mov bp, sp push ax push bx push cx push dx push di ! mov bx, sp mov cx, 4(bp) mov dx, 6(bp) ! Set ES = A000h (VGA memory) mov ax, 0xA000 mov es, ax ! Compute offset = y*320 + x mov ax, dx ! AX = y mov bx, 320 mul bx ! AX = y*320 (fits in 16 bits) add ax, cx ! AX = y*320 + x mov di, ax ! DI = offset ! movb al, 0 ! color xor ax,ax ! AL already contains color ! Write pixel using STOSB stosb ! [ES:DI] = AL, increments DI pop di pop dx pop cx pop bx pop ax pop bp ret .define __delete_vga_segment __delete_vga_segment: push bp mov bp, sp ! push ax ! push bx push cx ! push dx push di ! mov bx, sp mov cx, 4(bp) mov dx, 6(bp) ! Set ES = A000h (VGA memory) mov ax, 0xA000 mov es, ax ! Compute offset = y*320 + x mov ax, dx ! AX = y mov bx, 320 mul bx ! AX = y*320 (fits in 16 bits) add ax, cx ! AX = y*320 + x mov di, ax ! DI = offset movb al, 0 ! color ! AL already contains color ! Write pixel using STOSB mov cx, 8 rep stosb ! [ES:DI] = AL, increments DI pop di ! pop dx pop cx ! pop bx ! pop ax pop bp ret ! TODO: Fix this because it is still broken .define __delete_vga_tile __delete_vga_tile: push bp mov bp, sp ! push ax ! push bx push cx ! push dx push di ! mov bx, sp mov cx, 4(bp) mov dx, 6(bp) ! Set ES = A000h (VGA memory) mov ax, 0xA000 mov es, ax ! Compute offset = y*320 + x mov ax, dx ! AX = y mov bx, 320 mul bx ! AX = y*320 (fits in 16 bits) add ax, cx ! AX = y*320 + x mov di, ax ! DI = offset movb al, 0 ! color ! AL already contains color ! Write pixel using STOSB mov cx, 8 rep stosb ! [ES:DI] = AL, increments DI mov ax, di add ax, 312 mov di, ax movb al, 0 mov cx, 8 rep stosb ! [ES:DI] = AL, increments DI mov ax, di add ax, 312 mov di, ax movb al, 0 mov cx, 8 rep stosb ! [ES:DI] = AL, increments DI mov ax, di add ax, 312 mov di, ax movb al, 0 mov cx, 8 rep stosb ! [ES:DI] = AL, increments DI mov ax, di add ax, 312 mov di, ax movb al, 0 mov cx, 8 rep stosb ! [ES:DI] = AL, increments DI mov ax, di add ax, 312 mov di, ax movb al, 0 mov cx, 8 rep stosb ! [ES:DI] = AL, increments DI mov ax, di add ax, 312 mov di, ax movb al, 0 mov cx, 8 rep stosb ! [ES:DI] = AL, increments DI mov ax, di add ax, 312 mov di, ax movb al, 0 mov cx, 8 rep stosb ! [ES:DI] = AL, increments DI pop di ! pop dx pop cx ! pop bx ! pop ax pop bp ret ! PlotPixel_STOSB: ! CX = x (0..319) ! DX = y (0..199) ! AL = color (0..255) ! Uses STOSB to write the pixel ! Registers preserved. .define __plot_vga __plot_vga: push bp mov bp, sp ! push ax ! push bx ! push cx ! push dx push di ! mov bx, sp mov cx, 4(bp) mov dx, 6(bp) ! Set ES = A000h (VGA memory) mov ax, 0xA000 mov es, ax ! Compute offset = y*320 + x mov ax, dx ! AX = y mov bx, 320 mul bx ! AX = y*320 (fits in 16 bits) add ax, cx ! AX = y*320 + x mov di, ax ! DI = offset movb al, 8(bp) ! color ! AL already contains color ! Write pixel using STOSB stosb ! [ES:DI] = AL, increments DI pop di ! pop dx ! pop cx ! pop bx ! pop ax pop bp ret .define __kb_poll __kb_poll: inb 0x60 ret ! int kb_poll_buffer() returns ASCII code or 0 if none ! it also flushes the buffer (so the buffer behaves as a 1 byte buffer) .define __kb_poll_buffer __kb_poll_buffer: push bp push di push bx movb bl, 0 CheckLoop: movb ah, 0x01 int 0x16 jz Done movb ah, 0x00 int 0x16 movb bl, al jmp CheckLoop Done: movb ah, 0 movb al, bl pop bx pop di pop bp ret .define __speaker_beep __speaker_beep: push bp mov bp, sp push di movb al, 0xB6 ! Channel 2, lobyte/hibyte, mode 3 (square wave) outb 0x43 mov ax, 4(bp) !mov ax, 1193 outb 0x42 ! Low byte movb al, ah outb 0x42 ! High byte ! Enable speaker (bits 0 and 1 of port 61h) inb 0x61 orb al, 0x03 outb 0x61 ! ---- Delay loop ---- mov cx, 6(bp) .delay: loop .delay ! Disable speaker inb 0x61 andb al, 0xFC ! clear bits 0 and 1 outb 0x61 pop di pop bp ret ================================================ FILE: src/cross_lib/display/init_graphics/ack/msdos86/msdos86_init_graphics.c ================================================ #include #include #include "8x8_chars.h" extern void _init_vga(void); extern void _video_mode(void); extern void _delete_vga_tile(uint16_t x, uint16_t y); extern void _delete_vga_segment(uint16_t x, uint16_t y); extern void _delete_vga_pixel(uint16_t x, uint16_t y); extern void _speaker_beep(uint16_t freq, uint16_t length); extern void _keyboard_init(void); extern void _plot_vga(uint16_t x, uint16_t y, uint8_t color); uint8_t _vga_text_color; uint16_t _i86_tiles[][8] = { _TILE_0_UDG, _TILE_1_UDG, _TILE_2_UDG, _TILE_3_UDG, _TILE_4_UDG, _TILE_5_UDG, _TILE_6_UDG, _TILE_7_UDG, _TILE_8_UDG, _TILE_9_UDG, _TILE_10_UDG, _TILE_11_UDG, _TILE_12_UDG, _TILE_13_UDG, _TILE_14_UDG, _TILE_15_UDG, _TILE_16_UDG, _TILE_17_UDG, _TILE_18_UDG, _TILE_19_UDG, _TILE_20_UDG, _TILE_21_UDG, _TILE_22_UDG, _TILE_23_UDG, _TILE_24_UDG, _TILE_25_UDG, _TILE_26_UDG, _TILE_A, _TILE_B, _TILE_C, _TILE_D, _TILE_E, _TILE_F, _TILE_G, _TILE_H, _TILE_I, _TILE_J, _TILE_K, _TILE_L, _TILE_M, _TILE_N, _TILE_O, _TILE_P, _TILE_Q, _TILE_R, _TILE_S, _TILE_T, _TILE_U, _TILE_V, _TILE_W, _TILE_X, _TILE_Y, _TILE_Z, _TILE_DIGIT_0, _TILE_DIGIT_1, _TILE_DIGIT_2, _TILE_DIGIT_3, _TILE_DIGIT_4, _TILE_DIGIT_5, _TILE_DIGIT_6, _TILE_DIGIT_7, _TILE_DIGIT_8, _TILE_DIGIT_9, _SPACE_TILE, }; void _display_tile(uint8_t x, uint8_t y, uint8_t tile, uint8_t color) { uint8_t row; uint8_t col; uint16_t row_pos; uint16_t col_pos; uint8_t tile_row; row_pos = 8*(uint16_t)y; for(row=0;row<8;++row) { tile_row = _i86_tiles[tile][row]; col_pos = 8*(uint16_t)x; for(col=0;col<8;++col) { if(tile_row&(128>>col)) { _plot_vga(col_pos,row_pos,color); } else { _delete_vga_pixel(col_pos,row_pos); } ++col_pos; } ++row_pos; } } void _XL_INIT_GRAPHICS(void) { _init_vga(); _keyboard_init(); _speaker_beep(100,100); } ================================================ FILE: src/cross_lib/display/init_graphics/cc6303/mc10_init_graphics.c ================================================ #include "standard_libs.h" #include "8x6_chars.h" #define POKE(addr,val) (*(uint8_t*) (addr) = (val)) const uint8_t udgs[] = { _TILE_0_UDG, _TILE_1_UDG, _TILE_2_UDG, _TILE_4_UDG, _TILE_5_UDG, _TILE_6_UDG, _TILE_7_UDG, _TILE_8_UDG, _TILE_9_UDG, _TILE_10_UDG, _TILE_11_UDG, _TILE_12_UDG, _TILE_13_UDG, _TILE_14_UDG, _TILE_15_UDG, _TILE_16_UDG, _TILE_17_UDG, _TILE_18_UDG, _TILE_19_UDG, _TILE_20_UDG, _TILE_21_UDG, _TILE_22_UDG, _TILE_23_UDG, _TILE_24_UDG, _TILE_25_UDG, _TILE_26_UDG, }; void _XL_INIT_GRAPHICS(void) { // uint16_t i; // uint8_t j; // uint8_t c; __asm__("sei" ); POKE(49151U,36); // for(j=0;j<6 ;++j) // { // if((j&3)==0) // { // c=0xFF; // } // else if((j&3)==1) // { // c=0xAA; // } // else if((j&3)==2) // { // c=0x55; // } // else // { // c=0; // } // for(i=0;i<6000;++i) // { // POKE(0x4000+i,c); // } // } } ================================================ FILE: src/cross_lib/display/init_graphics/cc65/agat/agat_init_graphics.c ================================================ // STA $C133 ; map 3-rd physical memory page to 3-rd CPU memory segment // LDA #$12 ; load red:green to A // STA $6000 ; store to 3-rd memory segment // LDA #$34 ; load yellow:blue to A // STA $6001 ; store to 3-rd memory segment // STA $C731 ; switch display controller to 3-rd memory page in 128x128 mode. #include #include "standard_libs.h" void _XL_INIT_GRAPHICS(void) { // uint16_t i; // uint16_t j; POKE(0xC133,0); POKE(0xC731,0); // for(i=0;i<8192;i+=2) // { // POKE(0x6000+i,0x12); // POKE(0x6001+i,0x34); // for(j=0;j<300;++j) // { // }; // } // while(1){}; } ================================================ FILE: src/cross_lib/display/init_graphics/cc65/apple2/apple2_hgr_init_graphics.c ================================================ /* Entry points $F3D8 - HGR2 $F3E2 - HGR $F605 - XDRAW $F661 - DRAW $F6E9 - HCOLOR $F6FD - HPLOT $F721 - ROT $F727 - SCALE */ #include "standard_libs.h" #include "apple2_hgr_graphics.h" #include #include #include "7x8_chars.h" uint8_t _apple2_text_color; uint16_t HB1[]={ 0x2000, 0x2400, 0x2800, 0x2C00, 0x3000, 0x3400, 0x3800, 0x3C00, 0x2080, 0x2480, 0x2880, 0x2C80, 0x3080, 0x3480, 0x3880, 0x3C80, 0x2100, 0x2500, 0x2900, 0x2D00, 0x3100, 0x3500, 0x3900, 0x3D00, 0x2180, 0x2580, 0x2980, 0x2D80, 0x3180, 0x3580, 0x3980, 0x3D80, 0x2200, 0x2600, 0x2A00, 0x2E00, 0x3200, 0x3600, 0x3A00, 0x3E00, 0x2280, 0x2680, 0x2A80, 0x2E80, 0x3280, 0x3680, 0x3A80, 0x3E80, 0x2300, 0x2700, 0x2B00, 0x2F00, 0x3300, 0x3700, 0x3B00, 0x3F00, 0x2380, 0x2780, 0x2B80, 0x2F80, 0x3380, 0x3780, 0x3B80, 0x3F80, 0x2028, 0x2428, 0x2828, 0x2C28, 0x3028, 0x3428, 0x3828, 0x3C28, 0x20A8, 0x24A8, 0x28A8, 0x2CA8, 0x30A8, 0x34A8, 0x38A8, 0x3CA8, 0x2128, 0x2528, 0x2928, 0x2D28, 0x3128, 0x3528, 0x3928, 0x3D28, 0x21A8, 0x25A8, 0x29A8, 0x2DA8, 0x31A8, 0x35A8, 0x39A8, 0x3DA8, 0x2228, 0x2628, 0x2A28, 0x2E28, 0x3228, 0x3628, 0x3A28, 0x3E28, 0x22A8, 0x26A8, 0x2AA8, 0x2EA8, 0x32A8, 0x36A8, 0x3AA8, 0x3EA8, 0x2328, 0x2728, 0x2B28, 0x2F28, 0x3328, 0x3728, 0x3B28, 0x3F28, 0x23A8, 0x27A8, 0x2BA8, 0x2FA8, 0x33A8, 0x37A8, 0x3BA8, 0x3FA8, 0x2050, 0x2450, 0x2850, 0x2C50, 0x3050, 0x3450, 0x3850, 0x3C50, 0x20D0, 0x24D0, 0x28D0, 0x2CD0, 0x30D0, 0x34D0, 0x38D0, 0x3CD0, 0x2150, 0x2550, 0x2950, 0x2D50, 0x3150, 0x3550, 0x3950, 0x3D50, 0x21D0, 0x25D0, 0x29D0, 0x2DD0, 0x31D0, 0x35D0, 0x39D0, 0x3DD0, 0x2250, 0x2650, 0x2A50, 0x2E50, 0x3250, 0x3650, 0x3A50, 0x3E50, 0x22D0, 0x26D0, 0x2AD0, 0x2ED0, 0x32D0, 0x36D0, 0x3AD0, 0x3ED0, 0x2350, 0x2750, 0x2B50, 0x2F50, 0x3350, 0x3750, 0x3B50, 0x3F50, 0x23D0, 0x27D0, 0x2BD0, 0x2FD0, 0x33D0, 0x37D0, 0x3BD0, 0x3FD0}; #define _SPACE_ {0,0,0,0,0,0,0,0} const static uint8_t tiles[][8] = { _SPACE_, _TILE_DIGIT_0, _TILE_DIGIT_1, _TILE_DIGIT_2, _TILE_DIGIT_3, _TILE_DIGIT_4, _TILE_DIGIT_5, _TILE_DIGIT_6, _TILE_DIGIT_7, _TILE_DIGIT_8, _TILE_DIGIT_9, _TILE_0_UDG, _TILE_1_UDG, _TILE_2_UDG, _TILE_3_UDG, _TILE_4_UDG, _TILE_5_UDG, _TILE_6_UDG, _TILE_A, _TILE_B, _TILE_C, _TILE_D, _TILE_E, _TILE_F, _TILE_G, _TILE_H, _TILE_I, _TILE_J, _TILE_K, _TILE_L, _TILE_M, _TILE_N, _TILE_O, _TILE_P, _TILE_Q, _TILE_R, _TILE_S, _TILE_T, _TILE_U, _TILE_V, _TILE_W, _TILE_X, _TILE_Y, _TILE_Z, _TILE_7_UDG, // 43 _TILE_8_UDG, _TILE_9_UDG, _TILE_10_UDG, _TILE_11_UDG, _TILE_12_UDG, _TILE_13_UDG, _TILE_14_UDG, _TILE_15_UDG, _TILE_16_UDG, _TILE_17_UDG, _TILE_18_UDG, _TILE_19_UDG, _TILE_20_UDG, _TILE_21_UDG, _TILE_22_UDG, _TILE_23_UDG, _TILE_24_UDG, _TILE_25_UDG, _TILE_26_UDG, // {0x18,0x3e,0x60,0x3c,0x06,0x7c,0x18,0x00}, }; uint8_t hgr_enc[3*2*128] = { 0,0,0,64,0,16,0,80,0,4,0,68,0,20,0,84,0,1,0,65,0,17,0,81,0,5,0,69,0,21,0,85,32,0,32,64,32,16,32,80,32,4,32,68,32,20,32,84,32,1,32,65,32,17,32,81,32,5,32,69,32,21,32,85,8,0,8,64,8,16,8,80,8,4,8,68,8,20,8,84,8,1,8,65,8,17,8,81,8,5,8,69,8,21,8,85,40,0,40,64,40,16,40,80,40,4,40,68,40,20,40,84,40,1,40,65,40,17,40,81,40,5,40,69,40,21,40,85,2,0,2,64,2,16,2,80,2,4,2,68,2,20,2,84,2,1,2,65,2,17,2,81,2,5,2,69,2,21,2,85,34,0,34,64,34,16,34,80,34,4,34,68,34,20,34,84,34,1,34,65,34,17,34,81,34,5,34,69,34,21,34,85,10,0,10,64,10,16,10,80,10,4,10,68,10,20,10,84,10,1,10,65,10,17,10,81,10,5,10,69,10,21,10,85,42,0,42,64,42,16,42,80,42,4,42,68,42,20,42,84,42,1,42,65,42,17,42,81,42,5,42,69,42,21,42,85, 0,0,0,32,0,8,0,40,0,2,0,34,0,10,0,42,64,0,64,32,64,8,64,40,64,2,64,34,64,10,64,42,16,0,16,32,16,8,16,40,16,2,16,34,16,10,16,42,80,0,80,32,80,8,80,40,80,2,80,34,80,10,80,42,4,0,4,32,4,8,4,40,4,2,4,34,4,10,4,42,68,0,68,32,68,8,68,40,68,2,68,34,68,10,68,42,20,0,20,32,20,8,20,40,20,2,20,34,20,10,20,42,84,0,84,32,84,8,84,40,84,2,84,34,84,10,84,42,1,0,1,32,1,8,1,40,1,2,1,34,1,10,1,42,65,0,65,32,65,8,65,40,65,2,65,34,65,10,65,42,17,0,17,32,17,8,17,40,17,2,17,34,17,10,17,42,81,0,81,32,81,8,81,40,81,2,81,34,81,10,81,42,5,0,5,32,5,8,5,40,5,2,5,34,5,10,5,42,69,0,69,32,69,8,69,40,69,2,69,34,69,10,69,42,21,0,21,32,21,8,21,40,21,2,21,34,21,10,21,42,85,0,85,32,85,8,85,40,85,2,85,34,85,10,85,42, 0,0,0,96,0,24,0,120,0,6,0,102,0,30,0,126,64,1,64,97,64,25,64,121,64,7,64,103,64,31,64,127,48,0,48,96,48,24,48,120,48,6,48,102,48,30,48,126,112,1,112,97,112,25,112,121,112,7,112,103,112,31,112,127,12,0,12,96,12,24,12,120,12,6,12,102,12,30,12,126,76,1,76,97,76,25,76,121,76,7,76,103,76,31,76,127,60,0,60,96,60,24,60,120,60,6,60,102,60,30,60,126,124,1,124,97,124,25,124,121,124,7,124,103,124,31,124,127,3,0,3,96,3,24,3,120,3,6,3,102,3,30,3,126,67,1,67,97,67,25,67,121,67,7,67,103,67,31,67,127,51,0,51,96,51,24,51,120,51,6,51,102,51,30,51,126,115,1,115,97,115,25,115,121,115,7,115,103,115,31,115,127,15,0,15,96,15,24,15,120,15,6,15,102,15,30,15,126,79,1,79,97,79,25,79,121,79,7,79,103,79,31,79,127,63,0,63,96,63,24,63,120,63,6,63,102,63,30,63,126,127,1,127,97,127,25,127,121,127,7,127,103,127,31,127,127, }; // uint8_t mock_tile[8] = { 12,18,12,51,45,12,18,51 }; void hgr_draw(uint8_t x, uint8_t y, uint8_t tile, uint8_t color) { uint8_t k; uint8_t extra_color = color>3; uint8_t d_x = 2*x; uint16_t o_y = 8*y; uint16_t cc; uint16_t index; color = color-4*extra_color; cc = ((uint16_t)color)<<8; extra_color<<=7; for(k=0;k<8;++k) { index = (uint16_t) (tiles[tile][k])*2u+cc; #if defined(__BACKGROUND_COLOR) && __BACKGROUND_COLOR==1 POKE(HB1[o_y+k]+d_x,(hgr_enc[index]^0x7F)|extra_color); POKE(HB1[o_y+k]+d_x+1,(hgr_enc[index+1]^0x7F)|extra_color); #else POKE(HB1[o_y+k]+d_x,hgr_enc[index]|extra_color); POKE(HB1[o_y+k]+d_x+1,hgr_enc[index+1]|extra_color); #endif } } void hgr_delete(uint8_t x, uint8_t y) { uint8_t k; uint8_t d_x = 2*x; uint16_t o_y = 8*y; for(k=0;k<8;++k) { #if defined(__BACKGROUND_COLOR) && __BACKGROUND_COLOR==1 POKE(HB1[o_y+k]+d_x,0x7F); POKE(HB1[o_y+k]+d_x+1,0x7F); #else POKE(HB1[o_y+k]+d_x,0); POKE(HB1[o_y+k]+d_x+1,0); #endif } } void _XL_INIT_GRAPHICS(void) { // HIGH RES ON POKE(0xC057,0); // HGR PAGE 2 // POKE(0xC055,0); // HGR PAGE 1 POKE(0xC054,0); // TEXT OFF POKE(0xC050,0); // MIXED OFF POKE(0xC052,0); } ================================================ FILE: src/cross_lib/display/init_graphics/cc65/apple2/hgr.s ================================================ .segment "HGR" .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 ================================================ FILE: src/cross_lib/display/init_graphics/cc65/apple2enh/apple2enh_80col_init_graphics.c ================================================ #include #include #include "cross_lib.h" void _XL_INIT_GRAPHICS(void) { #if defined(__APPLE2ENH__) && defined(APPLE2ENH_80COL_VIDEO_MODE) videomode(80); #endif _setScreenColors(); } ================================================ FILE: src/cross_lib/display/init_graphics/cc65/atari/atari_mode1_redefined_chars_init_graphics.c ================================================ /* --------------------------------------------------------------------------------------- */ // // CROSS CHASE by Fabrizio Caruso // // Fabrizio_Caruso@hotmail.com // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from // the use of this software. // Permission is granted to anyone to use this software for non-commercial applications, // subject to the following restrictions: // 1. The origin of this software must not be misrepresented; you must not // claim that you wrote the original software. If you use this software in // a product, an acknowledgment in the product documentation would be // appreciated but is not required. // 2. Altered source versions must be plainly marked as such, and must not // be misrepresented as being the original software. // 3. This notice may not be removed or altered from any source distribution. /* --------------------------------------------------------------------------------------- */ #include #include #include #include #include #include #include #include "display_macros.h" #include "graphics_settings.h" #include "8x8_chars.h" #define GRAPHICS_MODE_1 (1+16) #include "udg_map.h" #if !defined(_XL_NO_UDG) void set_udg(void) { uint8_t *_CHBAS = (uint8_t *) 0x2F4; extern char _FONT_START__[]; memcpy(_FONT_START__, (void *)0xE000, 512); /* modify your font at _FONT_START__, etc, then set the new font: */ REDEFINE_AT(_FONT_START__); *_CHBAS = ((int)_FONT_START__ >> 8); /* enable the new font */ } #endif uint16_t BASE_ADDR; #if defined(__ANTIC_MODE6_GRAPHICS) uint8_t _atari_text_color; #endif // ; Hue values // HUE_GREY = 0 // HUE_GOLD = 1 // HUE_GOLDORANGE = 2 // HUE_REDORANGE = 3 // HUE_ORANGE = 4 // HUE_MAGENTA = 5 // HUE_PURPLE = 6 // HUE_BLUE = 7 // HUE_BLUE2 = 8 // HUE_CYAN = 9 // HUE_BLUEGREEN = 10 // HUE_BLUEGREEN2 = 11 // HUE_GREEN = 12 // HUE_YELLOWGREEN = 13 // HUE_YELLOW = 14 // HUE_YELLOWRED = 15 // ; Color defines, similar to c64 colors (untested) // GTIA_COLOR_BLACK = (HUE_GREY << 4) // GTIA_COLOR_WHITE = (HUE_GREY << 4 | 7 << 1) // GTIA_COLOR_RED = (HUE_REDORANGE << 4 | 1 << 1) // GTIA_COLOR_CYAN = (HUE_CYAN << 4 | 3 << 1) // GTIA_COLOR_VIOLET = (HUE_PURPLE << 4 | 4 << 1) // GTIA_COLOR_GREEN = (HUE_GREEN << 4 | 2 << 1) // GTIA_COLOR_BLUE = (HUE_BLUE << 4 | 2 << 1) // GTIA_COLOR_YELLOW = (HUE_YELLOW << 4 | 7 << 1) // GTIA_COLOR_ORANGE = (HUE_ORANGE << 4 | 5 << 1) // GTIA_COLOR_BROWN = (HUE_YELLOW << 4 | 2 << 1) // GTIA_COLOR_LIGHTRED = (HUE_REDORANGE << 4 | 6 << 1) // GTIA_COLOR_GRAY1 = (HUE_GREY << 4 | 2 << 1) // GTIA_COLOR_GRAY2 = (HUE_GREY << 4 | 3 << 1) // GTIA_COLOR_LIGHTGREEN = (HUE_GREEN << 4 | 6 << 1) // GTIA_COLOR_LIGHTBLUE = (HUE_BLUE << 4 | 6 << 1) // GTIA_COLOR_GRAY3 = (HUE_GREY << 4 | 5 << 1) // #define SETCOLOR_LOW(reg, val) *((unsigned char *)12 + (reg)) = (val) #if defined(__BACKGROUND_COLOR) && __BACKGROUND_COLOR==1 #define _ATARI_BACKGROUND_COLOR GTIA_COLOR_WHITE #define _ATARI_EXTRA_COLOR GTIA_COLOR_BLACK #else #define _ATARI_BACKGROUND_COLOR GTIA_COLOR_BLACK #define _ATARI_EXTRA_COLOR GTIA_COLOR_WHITE #endif void _XL_INIT_GRAPHICS(void) { // Mode 12 with no last monochromatic lines (12+16) _graphics(GRAPHICS_MODE_1); #if defined(__USE_CYAN_YELLOW) _setcolor_low(0,_gtia_mkcolor(HUE_REDORANGE,2)); _setcolor_low(1,_ATARI_EXTRA_COLOR); _setcolor_low(2,GTIA_COLOR_CYAN); _setcolor_low(3,GTIA_COLOR_YELLOW); _setcolor_low(4, _ATARI_BACKGROUND_COLOR); #elif defined(__USE_GREEN_YELLOW) _setcolor_low(0,_gtia_mkcolor(HUE_REDORANGE,2)); _setcolor_low(1,_ATARI_EXTRA_COLOR); _setcolor_low(2,GTIA_COLOR_YELLOW); _setcolor_low(3,_gtia_mkcolor(HUE_GREEN ,4)); _setcolor_low(4, _ATARI_BACKGROUND_COLOR); #else _setcolor_low(0,_gtia_mkcolor(HUE_REDORANGE,2)); _setcolor_low(1,_ATARI_EXTRA_COLOR); _setcolor_low(2,GTIA_COLOR_CYAN); _setcolor_low(3,_gtia_mkcolor(HUE_GREEN ,4)); _setcolor_low(4, _ATARI_BACKGROUND_COLOR); #endif #if !defined(_XL_NO_UDG) set_udg(); #endif BASE_ADDR = BASE_ADDR_VALUE; _setScreenColors(); } ================================================ FILE: src/cross_lib/display/init_graphics/cc65/atari/disable_setcursor.s ================================================ ; ; Christian Groessler, November-2002 ; ; cursor handling, internal function .include "atari.inc" .import cursor,_mul40 .export setcursor .proc setcursor ldy #0 ;lda OLDCHR ;sta (OLDADR),y lda ROWCRS jsr _mul40 clc adc SAVMSC ; add start of screen memory sta OLDADR txa adc SAVMSC+1 sta OLDADR+1 lda COLCRS adc OLDADR sta OLDADR bcc nc inc OLDADR+1 nc: lda (OLDADR),y sta OLDCHR ldx cursor ; current cursor setting as requested by the user beq off ldx #0 beq cont off: inx cont: stx CRSINH ; update system variable beq turnon ;and #$7f ; clear high bit / inverse flag finish: sta (OLDADR),y ; update on-screen display rts turnon: ;ora #$80 ; set high bit / inverse flag jmp finish .endproc ================================================ FILE: src/cross_lib/display/init_graphics/cc65/atari5200/atari5200_init_graphics.c ================================================ /* --------------------------------------------------------------------------------------- */ // // CROSS CHASE by Fabrizio Caruso // // Fabrizio_Caruso@hotmail.com // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from // the use of this software. // Permission is granted to anyone to use this software for non-commercial applications, // subject to the following restrictions: // 1. The origin of this software must not be misrepresented; you must not // claim that you wrote the original software. If you use this software in // a product, an acknowledgment in the product documentation would be // appreciated but is not required. // 2. Altered source versions must be plainly marked as such, and must not // be misrepresented as being the original software. // 3. This notice may not be removed or altered from any source distribution. /* --------------------------------------------------------------------------------------- */ #include #include #include #include "display_macros.h" #include #include #include #include #include "setcolor.h" #include "graphics_settings.h" #include "8x8_chars.h" #include "udg_map.h" void set_udg(void) { extern char _FONT_START__[]; uint8_t *CHBASE = (uint8_t *)0xD409; memcpy(_FONT_START__, (void *)0xF800, 512); REDEFINE_AT(_FONT_START__); *CHBASE = ((int)_FONT_START__ >> 8); } #define SETCOLOR_LOW(reg, val) *((unsigned char *)12 + (reg)) = (val) void _XL_INIT_GRAPHICS(void) { #if defined(__USE_CYAN_YELLOW) POKE(COLOR0,_gtia_mkcolor(HUE_REDORANGE,2)); POKE(COLOR1,GTIA_COLOR_WHITE); POKE(COLOR2,GTIA_COLOR_CYAN); POKE(COLOR3,GTIA_COLOR_YELLOW); #if defined(__BACKGROUND_COLOR) && __BACKGROUND_COLOR==1 POKE(COLOR4,GTIA_COLOR_WHITE); #else POKE(COLOR4,GTIA_COLOR_BLACK); #endif #elif defined(__USE_GREEN_YELLOW) POKE(COLOR0,_gtia_mkcolor(HUE_REDORANGE,2)); POKE(COLOR1,GTIA_COLOR_WHITE); POKE(COLOR2,GTIA_COLOR_YELLOW); POKE(COLOR3,_gtia_mkcolor(HUE_GREEN ,4)); #if defined(__BACKGROUND_COLOR) && __BACKGROUND_COLOR==1 POKE(COLOR4,GTIA_COLOR_WHITE); #else POKE(COLOR4,GTIA_COLOR_BLACK); #endif #else POKE(COLOR0,_gtia_mkcolor(HUE_REDORANGE,2)); POKE(COLOR1,GTIA_COLOR_WHITE); POKE(COLOR2,GTIA_COLOR_CYAN); POKE(COLOR3,_gtia_mkcolor(HUE_GREEN ,4)); #if defined(__BACKGROUND_COLOR) && __BACKGROUND_COLOR==1 POKE(COLOR4,GTIA_COLOR_WHITE); #else POKE(COLOR4,GTIA_COLOR_BLACK); #endif #endif set_udg(); _setScreenColors(); } ================================================ FILE: src/cross_lib/display/init_graphics/cc65/atari5200/setcolor.h ================================================ #ifndef _SET_COLOR #define _SET_COLOR #define TGI_COLOR_BLACK COLOR_BLACK #define TGI_COLOR_WHITE COLOR_WHITE #define TGI_COLOR_RED COLOR_RED #define TGI_COLOR_CYAN COLOR_CYAN #define TGI_COLOR_VIOLET COLOR_VIOLET #define TGI_COLOR_GREEN COLOR_GREEN #define TGI_COLOR_BLUE COLOR_BLUE #define TGI_COLOR_YELLOW COLOR_YELLOW #define TGI_COLOR_ORANGE COLOR_ORANGE #define TGI_COLOR_BROWN COLOR_BROWN #define TGI_COLOR_LIGHTRED COLOR_LIGHTRED #define TGI_COLOR_GRAY1 COLOR_GRAY1 #define TGI_COLOR_GRAY2 COLOR_GRAY2 #define TGI_COLOR_LIGHTGREEN COLOR_LIGHTGREEN #define TGI_COLOR_LIGHTBLUE COLOR_LIGHTBLUE #define TGI_COLOR_GRAY3 COLOR_GRAY3 #define COLOR0 0x0C #define COLOR1 0x0D #define COLOR2 0x0E #define COLOR3 0x0F #define COLOR4 0x10 #endif ================================================ FILE: src/cross_lib/display/init_graphics/cc65/atari7800/atari7800_init_graphics.c ================================================ #include // #include #include "cross_lib.h" extern char screen[]; // 0x48 pink // 0x38 light red void _XL_INIT_GRAPHICS(void) { // #if defined(__USE_GREEN) // TODO: Implement palette switch // MARIA.bkgrnd = 0x17; // MARIA.p0c1 = 0x00; // MARIA.p0c2 = 0xb2; // MARIA.p0c3 = 0x05; MARIA.bkgrnd = 0x00; // black #if defined(__USE_GREEN) MARIA.p0c2 = 0xD4; #else MARIA.p0c2 = 0xAA; // darker cyan 0x98 #endif MARIA.p0c1 = 0x33; // red MARIA.p0c3 = 0x0F; // white // #endif // MARIA.p0c1 = 0xD4; // green // MARIA.p0c1 = 0xB4; // green } ================================================ FILE: src/cross_lib/display/init_graphics/cc65/atari7800/atari7800_init_graphics_debug.c ================================================ #include // #include #include "cross_lib.h" extern char screen[]; void _XL_INIT_GRAPHICS(void) { char i; // clrscr(); // cputc('A'); for(i=0;i<100;++i) { screen[i]=2*i; _XL_SLEEP(1); } while (1) { screen[0] = screen[0] + 1; } } ================================================ FILE: src/cross_lib/display/init_graphics/cc65/atari_lynx/atari_lynx_gfx_init_graphics.c ================================================ // Alex Thissen has helped a lot to fix a bug #include "display_macros.h" #include "graphics_settings.h" #include "input_macros.h" #include #include <6502.h> #include #include // Default to black uint8_t _atari_lynx_background_color = TGI_COLOR_BLACK; uint8_t _atari_lynx_text_color; extern uint8_t _compressed_tile_data[_XL_NUMBER_OF_TILES][6]; uint8_t _compressed_font_data[FONT_SIZE][6] = { // A {60, 98, 126, 98, 98, 0}, // B {124, 98, 124, 98, 124,0}, // C {60, 98, 96, 98, 60, 0}, // // D {124, 98, 98, 98, 124,0}, // E {126, 96, 120, 96, 126,0}, // F {126, 96, 120, 96, 96, 0}, // G {60, 96, 102, 98, 60, 0}, // // H {98, 98, 126, 98, 98, 0}, // I {60, 24, 24, 24, 60, 0}, // J {6, 6, 6, 70, 60,0}, // K {100, 104, 112, 104, 100, 0}, // // L {96, 96, 96, 96, 124, 0}, // M {98, 118, 106, 98, 98, 0}, // N {98, 114, 106, 102, 98, 0}, // O {60, 98, 98, 98, 60, 0}, // P {124, 98, 124, 96, 96, 0}, // Q {60, 98, 98, 106, 60, 0}, // R {124, 98, 124, 104, 100, 0}, // // S {62, 96, 60, 6, 124, 0}, // T {126, 24, 24, 24, 24, 0}, // U {98, 98, 98, 98, 60, 0}, // V {98, 98, 52, 52, 24, 0}, // W {193, 193, 106, 106, 52, 0}, // X {99, 54, 28, 54, 99, 0}, // Y {98, 52, 24, 24, 24, 0}, // Z {126, 6, 24, 96, 126,0}, // DIGITS // 0 // {14, 17, 17, 17, 14, 0}, {28, 34, 34, 34, 28, 0}, // 1 // {6, 10, 2, 2, 15, 0}, {12, 20, 4, 4, 30, 0}, // 2 // {30, 1, 14, 16, 31, 0}, {60, 2, 28, 32, 62, 0}, // 3 // {30, 1, 6, 1, 30, 0}, {60, 2, 12, 2, 60, 0}, // 4 // {6, 10, 18, 31, 2, 0}, {12, 20, 36, 62, 4, 0}, // 5 // {31, 16, 14, 1, 30, 0}, {62, 32, 28, 2, 60, 0}, // 6 // {15, 16, 30, 17, 14, 0}, {30, 32, 60, 34, 28, 0}, // 7 // {31, 1, 2, 4, 8, 0}, {62, 2, 4, 8, 16, 0}, // 8 // {14, 17, 14, 17, 14, 0}, {28, 34, 28, 34, 28, 0}, // 9 // {14, 17, 15, 1, 30, 0}, {28, 34, 30, 2, 60, 0}, // SPACE CHARACTER {0, 0, 0, 0, 0, 0} }; #define BYTES_PER_LINE 4 uint8_t _tile_data[_XL_NUMBER_OF_TILES+FONT_SIZE][BYTES_PER_LINE*6+1]; // Alex Thissen has helped a lot to fix a bug in this code void init_tile_data(void) { uint8_t i; uint8_t j; uint8_t data, bit, byte1, byte2; for(i = 0; i < FONT_SIZE+_XL_NUMBER_OF_TILES; ++i) { uint8_t line; // for line for(line = 0; line < 6; line++) { j = line*BYTES_PER_LINE; // Indicate literal sprite data of 3 bytes (plus 1) _tile_data[i][j] = BYTES_PER_LINE; byte1 = 0; byte2 = 0; for (bit = 0; bit < 8; bit++) { data = i < _XL_NUMBER_OF_TILES ? _compressed_tile_data[i][line] : _compressed_font_data[i-_XL_NUMBER_OF_TILES][line]; if (data & (1 << bit)) { if (bit * 2 < 8) { byte2 |= 1 << (bit * 2); } else { byte1 |= 1 << ((bit * 2) - 8); } } } _tile_data[i][j+1] = byte1; _tile_data[i][j+2] = byte2; _tile_data[i][j+3] = 0xAA; } _tile_data[i][6*BYTES_PER_LINE] = 0x00; } } scb_hv_pal2 _tgi_tile[_XL_NUMBER_OF_TILES+FONT_SIZE]; void init_tgi_tile(void) { uint8_t i; scb_hv_pal2 *tile; for(i = 0; i < _XL_NUMBER_OF_TILES+FONT_SIZE; ++i) { tile = &_tgi_tile[i]; tile->sprctl0 = BPP_2 | TYPE_NORMAL; tile->sprctl1 = LITERAL | REHV; tile->sprcoll = NO_COLLIDE; tile->next = (char *)NULL; tile->data = _tile_data[i]; tile->hpos = 0; tile->vpos = 0; tile->hsize = 0x100; tile->vsize = 0x100; // Palette will use 4 pens for background and color and transparent (for hardware bug) tile->penpal[0] = (_atari_lynx_background_color << 4); // Dynamically changed during draw tile->penpal[1] = 0x00; // Two (same) transparent pens } } // No significant bit at end, so no extra byte is needed const unsigned char empty[] = { 4, 0, 0, 0x55, 4, 0, 0, 0x55, 4, 0, 0, 0x55, 4, 0, 0, 0x55, 4, 0, 0, 0x55, 4, 0, 0, 0x55, 0x00, }; scb_hv_pal2 Sempty= { BPP_2 | TYPE_NORMAL, LITERAL | REHV, NO_COLLIDE, 0, // next (unsigned char *)empty, // data 0, 0, 0x100, 0x100, // hsize/vsize {0x00, 0xef} // Pen palette 0 will be set in _XL_INIT_GRAPHICS }; scb_hv_pal2 *empty_spr; void _tgi_gfx_delete(uint8_t x, uint8_t y) { // Use 8x6 pixel empty sprite to erase tile empty_spr->hpos = (x)*8; empty_spr->vpos = (y)*6; tgi_sprite(empty_spr); } void _tgi_gfx_draw(uint8_t x, uint8_t y, uint8_t tile, uint8_t color) { // Reposition sprite _tgi_tile[tile].hpos = (x)*8; _tgi_tile[tile].vpos = (y)*6; // Solid black for first pen 0 and selected color for pen 1 _tgi_tile[tile].penpal[0] = (_atari_lynx_background_color << 4) + color; tgi_sprite(&(_tgi_tile[tile])); } void _XL_INIT_GRAPHICS(void) { #if defined(_XL_BACKGROUND_COLOR) _atari_lynx_background_color = _XL_BACKGROUND_COLOR; #endif Sempty.penpal[0] = _atari_lynx_background_color << 4; empty_spr = &Sempty; tgi_install(tgi_static_stddrv); tgi_init(); CLI(); init_tile_data(); init_tgi_tile(); tgi_setcolor(_atari_lynx_background_color); tgi_bar(0,0,159,101); while (tgi_busy()) { }; } ================================================ FILE: src/cross_lib/display/init_graphics/cc65/atmos/atmos_redefined_characters_init_graphics.c ================================================ #include #include #include #include #include #include "graphics_settings.h" #include "display_macros.h" #include "6x8_chars.h" #define UDG_BASE_ADDR 0xb400 #include "udg_map.h" #if defined(__BACKGROUND_COLOR) && __BACKGROUND_COLOR==1 #define ORIC_BACKGROUND_COLOR 23 #define ORIC_INK_COLOR 0 #else #define ORIC_BACKGROUND_COLOR 16 #define ORIC_INK_COLOR 3 #endif void init_colors(void) { uint8_t i; // Initialize colors for(i=0;i<28;++i) { // yellow on black (inverted: blue on white) POKE(0xBB80+i*40,ORIC_BACKGROUND_COLOR); POKE(0xBB81+i*40,ORIC_INK_COLOR); } } void _XL_INIT_GRAPHICS(void) { REDEFINE_AT(((uint8_t *)UDG_BASE_ADDR)); init_colors(); _setScreenColors(); } ================================================ FILE: src/cross_lib/display/init_graphics/cc65/c128/c128_80col_init_graphics.c ================================================ #include #include "display_macros.h" #include #include "8x8_chars.h" #include "udg_map.h" #define ADDRESS_PORT 0xD600 #define DATA_PORT 0xD601 #define HIGH_ADDRESS_REGISTER 0x12 #define LOW_ADDRESS_REGISTER 0x13 #define VDC_DATA_REGISTER 0x1F #define CHAR_BASE 0x3000 void vdc_write(uint8_t vdc_register, uint8_t value) { POKE(ADDRESS_PORT,vdc_register); while(!(PEEK(ADDRESS_PORT)&(0x80))){}; POKE(DATA_PORT,value); } void redefine(uint8_t tile, const uint8_t definition[]) { uint8_t i; uint16_t address = CHAR_BASE + (((uint16_t)tile)<<4U); vdc_write(HIGH_ADDRESS_REGISTER,(uint8_t)(address>>8)); vdc_write(LOW_ADDRESS_REGISTER,(uint8_t)(address&0x00FF)); for(i=0;i<8;++i) { vdc_write(VDC_DATA_REGISTER,definition[i]); } } void set_udg(void) { uint8_t i; for (i = 0; i < (sizeof(redefine_map)/sizeof(*redefine_map)); ++i) { redefine(redefine_map[i].ascii,redefine_map[i].bitmap); } } // #define DEBUG void _XL_INIT_GRAPHICS(void) { fast(); videomode(80); #if !defined(DEBUG) set_udg(); _setScreenColors(); #else vdc_write(HIGH_ADDRESS_REGISTER,0x00); vdc_write(LOW_ADDRESS_REGISTER,0x00); { uint8_t i; for(i=0;i<255;++i) { vdc_write(VDC_DATA_REGISTER,i); }; } // sleep(2); set_udg(); // sleep(2); while(1){}; _setScreenColors(); #endif } ================================================ FILE: src/cross_lib/display/init_graphics/cc65/c264/c16_linked_redefined_chars_init_graphics.c ================================================ #if !defined(PEEK) #include #endif #include #include #include #include #include "graphics_settings.h" #include "display_macros.h" #if !defined(__UDG_BASE_FACTOR) #define __UDG_BASE_FACTOR 15 #endif // #define DEBUG void _XL_INIT_GRAPHICS(void) { // __asm__ ("STA $FF3F"); // __asm__ ("SEI"); POKE(65299ul,(PEEK(65299ul)&3)|((__UDG_BASE_FACTOR)*4)); // change character base address to 28th Kbyte POKE(65298ul,PEEK(65298ul)&251); // make graphics chip get characters from RAM #if defined(DEBUG) { uint8_t i; for(i=0;i<255;++i) { POKE((3072+i),i+0x40); } while(1){}; } #endif POKE(65301u,0); POKE(65305u,0); // clear screen and color ram __asm__("jsr $D88B"); _setScreenColors(); } ================================================ FILE: src/cross_lib/display/init_graphics/cc65/c264/c16_redefined_chars_init_graphics.c ================================================ #if !defined(PEEK) #include #endif #include #include #include #include #include "graphics_settings.h" #include "display_macros.h" #include "8x8_chars.h" #include "udg_map.h" #include #if !defined(__UDG_BASE_FACTOR) #define __UDG_BASE_FACTOR 29 #else #define __UDG_BASE_FACTOR 15 #endif void _XL_INIT_GRAPHICS(void) { uint16_t i; #if defined(__INCLUDE_CONIO_H) POKE(65301u,0); POKE(65305u,0); #endif POKE(1177,62); // disable switch to RAM in PEEK for(i=0;i<1023;++i) { POKE(__UDG_BASE_FACTOR*1024+i,PEEK((uint16_t) (54272ul+(uint16_t) i))); } POKE(1177,63); // re-enable switch to RAM in PEEK POKE(65299ul,(PEEK(65299ul)&3)|((__UDG_BASE_FACTOR)*4)); // change character base address to 28th Kbyte POKE(65298ul,PEEK(65298ul)&251); // make graphics chip get characters from RAM REDEFINE_AT(__UDG_BASE_FACTOR*1024); _setScreenColors(); } ================================================ FILE: src/cross_lib/display/init_graphics/cc65/c64/c64_init_graphics.c ================================================ #if !defined(PEEK) #include #endif #include "display_macros.h" #define _C64_FOREGROUND 53280u #define _C64_BORDER 53281u void _XL_INIT_GRAPHICS(void) { // Select video bank and set the character set pointer to point to $C800 // where the redefined charset has been placed by the linker POKE(56576u,0); POKE(53272u,2); POKE(648,192); POKE(_C64_FOREGROUND,_XL_BACKGROUND_COLOR); POKE(_C64_BORDER,_XL_BACKGROUND_COLOR); _setScreenColors(); } ================================================ FILE: src/cross_lib/display/init_graphics/cc65/c65/c65_init_graphics.c ================================================ #include #include #include "standard_libs.h" #define CRAM2K 0xD030 // lda #%00000001 ; Enable CRAM2K // tsb cram2k void _XL_INIT_GRAPHICS(void) { // __asm__("SEI"); // BLACK background and border POKE(53281U,0U); POKE(53280U,0U); #if defined(__CRAM2K) POKE(CRAM2K,PEEK(CRAM2K)|(0x01)); #endif #if defined(__MEGA65_40COL) // gotoxy(0,0); // cputc(27); // cputc('4'); // lda #27 // jsr $ffd2 // lda #52 // jsr $ffd2 __asm__("lda #27"); __asm__("jsr $ffd2"); __asm__("lda #52"); __asm__("jsr $ffd2"); // 40 column mode // POKE(0xD031,PEEK(0xD031)&(0x7F)); // CRAM2K #endif // { // uint16_t i; // for(i=0;i<2000;++i) // { // POKE(2048+i,65); // } // }; // while(1){}; } ================================================ FILE: src/cross_lib/display/init_graphics/cc65/creativision/creativision_color_init_graphics.c ================================================ // https://www.msx.org/wiki/Category:VDP_Registers #include "8x8_chars.h" #include "udg_map.h" #include "memory_mapped_graphics.h" #include "display_macros.h" /* 0 Transparent 1 Black 2 Green 3 Light Green 4 Dark Blue 5 Light Blue 6 Dark Red 7 Cyan 8 Red 9 Bright Red 10 Yellow 11 Light Yellow 12 Dark Green 13 Magenta 14 Grey 15 White */ #define _CREAT_VDP_GREEN 3 #define _CREAT_VDP_BLUE 5 #define _CREAT_VDP_CYAN 7 #define _CREAT_VDP_RED 9 #define _CREAT_VDP_YELLOW 10 #define _CREAT_VDP_WHITE 15 #define _CREAT_VDP_BLACK 0 #if defined(__BACKGROUND_COLOR) && __BACKGROUND_COLOR==1 #define _CREAT_BACKGROUND_COLOR _CREAT_VDP_WHITE #define _CREAT_TEXT_COLOR _CREAT_VDP_BLACK #else #define _CREAT_BACKGROUND_COLOR _CREAT_VDP_BLACK #define _CREAT_TEXT_COLOR _CREAT_VDP_WHITE #endif #define set_group_colorset_group_color(group, color) \ do \ { \ DISPLAY_POKE((uint16_t) COLOR_DEF + (uint16_t) group, (((uint16_t) color)<<4)+_CREAT_BACKGROUND_COLOR); \ } while(0) void set_group_block_color(uint8_t group, uint8_t color) { uint8_t i; for(i=0;i<4;++i) { set_group_colorset_group_color(group+i,color); } } void set_udg_colors(void) { // 0 // set_group_color(0,_CREAT_VDP_BLUE); // set_group_color(1,_CREAT_VDP_BLUE); // set_group_color(2,_CREAT_VDP_BLUE); // set_group_color(3,_CREAT_VDP_BLUE); set_group_block_color(0,_CREAT_VDP_BLUE); // 32 // set_group_color(4,_CREAT_VDP_GREEN); // set_group_color(5,_CREAT_VDP_GREEN); // set_group_color(6,_CREAT_VDP_GREEN); // set_group_color(7,_CREAT_VDP_GREEN); set_group_block_color(4,_CREAT_VDP_GREEN); // 64 // set_group_color(8,_CREAT_VDP_YELLOW); // set_group_color(9,_CREAT_VDP_YELLOW); // set_group_color(10,_CREAT_VDP_YELLOW); // set_group_color(11,_CREAT_VDP_YELLOW); set_group_block_color(8,_CREAT_VDP_YELLOW); // 96 #if defined(__BACKGROUND_COLOR) && __BACKGROUND_COLOR==1 // set_group_color(12,_CREAT_VDP_BLACK); // set_group_color(13,_CREAT_VDP_BLACK); // set_group_color(14,_CREAT_VDP_BLACK); // set_group_color(15,_CREAT_VDP_BLACK); set_group_block_color(12,_CREAT_VDP_BLACK); #else // set_group_color(12,_CREAT_VDP_WHITE); // set_group_color(13,_CREAT_VDP_WHITE); // set_group_color(14,_CREAT_VDP_WHITE); // set_group_color(15,_CREAT_VDP_WHITE); set_group_block_color(12,_CREAT_VDP_WHITE); #endif // 128 // set_group_color(16,_CREAT_VDP_CYAN); // set_group_color(17,_CREAT_VDP_CYAN); // set_group_color(18,_CREAT_VDP_CYAN); // set_group_color(19,_CREAT_VDP_CYAN); set_group_block_color(16,_CREAT_VDP_CYAN); // 160 // set_group_color(20,_CREAT_VDP_RED); // set_group_color(21,_CREAT_VDP_RED); // set_group_color(22,_CREAT_VDP_RED); // set_group_color(23,_CREAT_VDP_RED); set_group_block_color(20,_CREAT_VDP_RED); // 192 // set_group_color(24,_CREAT_TEXT_COLOR); // set_group_color(25,_CREAT_TEXT_COLOR); // set_group_color(26,_CREAT_TEXT_COLOR); // set_group_color(27,_CREAT_TEXT_COLOR); // set_group_block_color(16,_CREAT_VDP_CYAN); // 224 // set_group_color(28,_CREAT_TEXT_COLOR); // set_group_color(29,_CREAT_TEXT_COLOR); // set_group_color(30,_CREAT_TEXT_COLOR); // set_group_color(31,_CREAT_TEXT_COLOR); set_group_block_color(28,_CREAT_TEXT_COLOR); } void redefine(const uint8_t ch, const uint8_t* image) { uint8_t i; for(i=0;i<8;++i) { DISPLAY_POKE(CHAR_BASE +(uint16_t)(ch<<3)+i,image[i]); } } void SET_UDG_IMAGES(void) { uint8_t i; uint8_t j; for (i = 0; i < sizeof(redefine_map) / sizeof(*redefine_map); ++i) { for(j=0;j<5;++j) { redefine(redefine_map[i].ascii+32*j, redefine_map[i].bitmap); } } } void _XL_INIT_GRAPHICS(void) { SET_UDG_IMAGES(); set_udg_colors(); _setScreenColors(); } ================================================ FILE: src/cross_lib/display/init_graphics/cc65/creativision/creativision_init_graphics.c ================================================ #include "8x8_chars.h" #include "udg_map.h" #include "memory_mapped_graphics.h" #include "display_macros.h" void set_group_color(uint8_t group, uint8_t color) { DISPLAY_POKE((uint16_t) COLOR_DEF + (uint16_t) group, ((uint16_t) color)<<4); } void set_udg_colors(void) { uint8_t i; set_group_color(0,9); set_group_color(1,7); set_group_color(2,9); set_group_color(3,11); set_group_color(4,10); set_group_color(5,2); set_group_color(6,4); set_group_color(7,4); for(i=8;i<=11;++i) { set_group_color(i,8); } } void redefine(const uint8_t ch, const uint8_t* image) { uint8_t i; for(i=0;i<8;++i) { DISPLAY_POKE(CHAR_BASE +(uint16_t)(ch<<3)+i,image[i]); } } void SET_UDG_IMAGES(void) { uint8_t i; for (i = 0; i < sizeof(redefine_map) / sizeof(*redefine_map); ++i) { redefine(redefine_map[i].ascii, redefine_map[i].bitmap); } } void _XL_INIT_GRAPHICS(void) { SET_UDG_IMAGES(); set_udg_colors(); _setScreenColors(); } ================================================ FILE: src/cross_lib/display/init_graphics/cc65/cx16/cx16_init_graphics.c ================================================ #include #include "standard_libs.h" #include "8x8_chars.h" #include "udg_map.h" #define CHAR_BASE ((long) 0x01F000) void redefine(const uint8_t ch, const uint8_t* image) { uint8_t i; for(i=0;i<8;++i) { if(ch>63) { vpoke(image[i], CHAR_BASE +(unsigned long)((((unsigned long) ch-64U)<<3)+i)); } else { vpoke(image[i], CHAR_BASE +(unsigned long)((((unsigned long) ch)<<3)+i)); } } } void SET_UDG_IMAGES(void) { uint8_t i; for (i = 0; i < sizeof(redefine_map) / sizeof(*redefine_map); ++i) { redefine(redefine_map[i].ascii, redefine_map[i].bitmap); } } // ; #define VIDEOMODE_80x60 0x00 // ; #define VIDEOMODE_80x30 0x01 // ; #define VIDEOMODE_40x60 0x02 // ; #define VIDEOMODE_40x30 0x03 // ; #define VIDEOMODE_40x15 0x04 // ; #define VIDEOMODE_20x30 0x05 // ; #define VIDEOMODE_20x15 0x06 // ; #define VIDEOMODE_22x23 0x07 // ; #define VIDEOMODE_64x50 0x08 // ; #define VIDEOMODE_64x25 0x09 // ; #define VIDEOMODE_32x50 0x0A // ; #define VIDEOMODE_32x25 0x0B // ; #define VIDEOMODE_80COL VIDEOMODE_80x60 // ; #define VIDEOMODE_40COL VIDEOMODE_40x30 // ; #define VIDEOMODE_320x240 0x80 void _XL_INIT_GRAPHICS(void) { videomode(VIDEOMODE_20x30); printf("%c%c%c%c",0x90,0x01,0x05,147); // printf("%c",0x09); // printf("%c",0x01); // printf("%c",0x01); // printf("%c",0x10); // printf("%c",0x01); cputc(0x10); cputc(0x01); SET_UDG_IMAGES(); } ================================================ FILE: src/cross_lib/display/init_graphics/cc65/mega65/mega65_init_graphics.c ================================================ #include #include #define CRAM2K 0xD030 // lda #%00000001 ; Enable CRAM2K // tsb cram2k void _XL_INIT_GRAPHICS(void) { // __asm__("SEI"); // BLACK background and border POKE(53281U,0U); POKE(53280U,0U); #if defined(__CRAM2K) POKE(CRAM2K,PEEK(CRAM2K)|(0x01)); #endif #if defined(__MEGA65_40COL) // gotoxy(0,0); // cputc(27); // cputc('4'); // lda #27 // jsr $ffd2 // lda #52 // jsr $ffd2 __asm__("lda #27"); __asm__("jsr $ffd2"); __asm__("lda #52"); __asm__("jsr $ffd2"); // 40 column mode // POKE(0xD031,PEEK(0xD031)&(0x7F)); // CRAM2K #endif } ================================================ FILE: src/cross_lib/display/init_graphics/cc65/nes/nes_init_graphics.c ================================================ #include #include "display_macros.h" #include #include #define _RED 6 #define _BROWN 24 #define _WHITE 32 #define _ORANGE 23 #define _GREEN_BROWN 25 #define _CYAN 33 #define _DARK_YELLOW 40 #define _LIGHT_YELLOW 56 void set_color(uint8_t palette_group, uint8_t color_index, uint8_t color) { PPU.vram.address = 0x3f; PPU.vram.address = palette_group * 4 + color_index; PPU.vram.data = color; } #define CTRL 0x2000 #define MASK 0x2001 #define SCROLL 0x2005 void All_Off(void) { PPU.control = 0; PPU.mask = 0; } void All_On(void) { PPU.control = 0x80; PPU.mask = 0x1e; } void Reset_Scroll(void) { PPU.vram.address = 0; PPU.vram.address = 0; PPU.scroll = 0; PPU.scroll = 0; } // #if defined(__BACKGROUND_COLOR) && __BACKGROUND_COLOR==1 #define NES_BACKGROUND_COLOR COLOR_WHITE #else #define NES_BACKGROUND_COLOR COLOR_BLACK #endif #if defined(__USE_GREEN) #define _CYAN_GREEN _GREEN_BROWN #else #define _CYAN_GREEN _CYAN #endif void _XL_INIT_GRAPHICS(void) { All_Off(); set_color(0,2,_CYAN_GREEN); set_color(0,1,_RED); set_color(0,3,_WHITE); set_color(1,2,_CYAN_GREEN); set_color(1,1,_RED); set_color(1,3,_WHITE); set_color(3,2,_CYAN_GREEN); set_color(3,1,_RED); set_color(3,3,_WHITE); // set_color(1,2,_DARK_YELLOW); // set_color(1,1,_GREEN_BROWN); // set_color(1,3,_RED); // set_color(3,2,_DARK_YELLOW); // set_color(3,1,_BROWN); // set_color(3,3,_CYAN); { uint8_t j; for(j=0;j<4;++j) { PPU.vram.address = 0x23; PPU.vram.address = (0xC0+j); PPU.vram.data = 0xFF;//0b00001111; } for(j=4;j<8;++j) { PPU.vram.address = 0x23; PPU.vram.address = (0xC0+j); PPU.vram.data = 0x55;//0b00001111; } PPU.vram.address = 0x23; PPU.vram.address = 0xC3; PPU.vram.data = 0xF0; PPU.vram.address = 0x23; PPU.vram.address = 0xC4; PPU.vram.data = 0x00; } Reset_Scroll(); All_On(); bgcolor(NES_BACKGROUND_COLOR); } ================================================ FILE: src/cross_lib/display/init_graphics/cc65/pce/pce_init_graphics.c ================================================ #include #include #include <_vdc.h> #include "display_macros.h" #define VDC_CTRL 0x0000 #define VDC_DATA_LO 0x0002 #define VDC_DATA_HI 0x0003 /* VDC_CTRL = $0000 VDC_DATA_LO = $0002 VDC_DATA_HI = $0003 */ void _XL_INIT_GRAPHICS(void) { uint8_t i; // uint8_t j; // for(j=0;j<8;++j) for(i=0;i<254;++i) { POKE(VDC_CTRL,0x20); POKE(VDC_CTRL,0x00); POKE(VDC_DATA_HI,i); POKE(VDC_DATA_LO,i); // __vdc.data = i; // POKE(VDC_MAWR,0x20+j); // POKE(VDC_MAWR,0x00+i); // POKE(VDC_VWR,i); } _setScreenColors(); } ================================================ FILE: src/cross_lib/display/init_graphics/cc65/supervision/supervision_init_graphics.c ================================================ #include #include "display_macros.h" void _XL_INIT_GRAPHICS(void) { SV_LCD.height = 160; SV_LCD.width = 160; _setScreenColors(); } ================================================ FILE: src/cross_lib/display/init_graphics/cc65/vic20/vic20_init_graphics.c ================================================ #if !defined(PEEK) #include #endif #include #include #include "display_macros.h" void _XL_INIT_GRAPHICS(void) { #if !defined(_XL_NO_UDG) #if defined(__VIC20_EXP_8K) || defined(__VIC20_EXP_16K) #if !defined(VIC20_USE_0X0F) && !defined(__MEMORY_MAPPED_GRAPHICS) uint8_t tmp; tmp = ~0x0F & PEEK(&(VIC.addr)); POKE(&(VIC.addr), tmp | 0x0E); // 1110 -> character map at $1800 #else uint8_t tmp; tmp = ~0x0F & PEEK(&(VIC.addr)); POKE(&(VIC.addr), tmp | 0x0F); #endif #elif defined(__VIC20_EXP_3K) || defined(__VIC20_UNEXPANDED) POKE(0x9005,0xFF); #endif #endif POKE(646,1); #if defined(__BACKGROUND_COLOR) && __BACKGROUND_COLOR==1 POKE(36879L,25); #else POKE(36879L,8); #endif #if defined(DEBUG) #if defined(__VIC20_EXP_8K) || defined(__VIC20_EXP_16K) #define BASE_ADDR 0x1000 #else #define BASE_ADDR 0x1E00 #endif { uint8_t i; i=0; do { POKE(BASE_ADDR+i,i); ++i; } while(i!=0); while(1); } #endif _setScreenColors(); } ================================================ FILE: src/cross_lib/display/init_graphics/cmoc/coco/coco_init_graphics.c ================================================ /* // COCO 3 // Set 256x192x16 mode POKE(0xFF99,0x1A); // Set graphics ON POKE(0xFF98,0x80); // Set actual screen ram at $600000 POKE(0xFF9D,0xC0); POKE(0xFF9E,0x00); // Set palette POKE(0xFFB0,...); ... POKE(0xFFBF,...); // Set MMU windows at $8000 POKE(0xFFA4,0x30); POKE(0xFFA5,0x31); POKE(0xFFA6,0x32); */ #include "cross_lib.h" #define POKE(addr,val) (*(uint8_t*) (addr) = (val)) #define _MONO_WHITE_ON_BLACK 0xF8 #define _MONO_GREEN_ON_DARK_GREEN 0xF0 #define _MULTI_COLOR_ON_WHITE (0xF8-0x10) #define _MULTI_COLOR_ON_GREEN (0xF0-0x10) void _XL_INIT_GRAPHICS(void) { // Set monochromatic black/white ($F0 for green) // 0xF8 -> 2 colors (black and white) // 0XF0 -> 2 colors (dark green and light green) // 0xF8-16 -> 4 colors with white background // 0xF0-16 -> 4 colors with green background #if defined(__BIT_MAPPED_4_GRAPHICS) #if defined(__BACKGROUND_COLOR) && __BACKGROUND_COLOR==1 POKE(0xFF22,_MULTI_COLOR_ON_WHITE); #else POKE(0xFF22,_MULTI_COLOR_ON_GREEN); #endif #else POKE(0xFF22,_MONO_GREEN_ON_DARK_GREEN); #endif // Set resolution to 256x192 POKE(0xFFC3,1); POKE(0xFFC5,1); // Set screen memory at $0E00 POKE(0xFFC7,1); POKE(0xFFC9,1); POKE(0xFFCB,1); _setScreenColors(); } ================================================ FILE: src/cross_lib/display/init_graphics/cmoc/coco3/coco3_init_graphics.c ================================================ #define POKE(addr,val) (*(uint8_t*) (addr) = (val)) #define POKEW(addr,val) (*(unsigned*) (addr) = (val)) #define PEEK(addr) (*(uint8_t*) (addr)) #define PEEKW(addr) (*(unsigned*) (addr)) #include "display_macros.h" #include "coco.h" // #include "color_definitions.h" #define _GIME_BLACK 0b000000 #define _GIME_WHITE 0b111111 #define _GIME_RED 0b100100 #define _GIME_GREEN 0b010010 #define _GIME_CYAN 0b011011 #define _GIME_YELLOW 0b110110 #define _GIME_PURPLE 0b101101 #define _GIME_BLUE 0b001001 const unsigned char _color_encoding[] = { _GIME_BLACK,_GIME_WHITE,_GIME_RED,_GIME_GREEN,_GIME_CYAN,_GIME_YELLOW,_GIME_PURPLE,_GIME_BLUE, _GIME_BLACK,_GIME_WHITE,_GIME_RED,_GIME_GREEN,_GIME_CYAN,_GIME_YELLOW,_GIME_PURPLE,_GIME_BLUE, }; void _XL_INIT_GRAPHICS(void) { // uint16_t i; // uint16_t j; uint8_t color; disableInterrupts(); // High speed (2 Mhz CPU clock) POKE(65497,0); // Enable MMU // POKE(0xFF90,0x40); POKE(0xFF90,0x44); // Set graphics ON POKE(0xFF98,0x80); // Set 256x192x16 mode POKE(0xFF99,0x1A); // Set actual screen ram at $600000 POKE(0xFF9D,0xC0); POKE(0xFF9E,0x00); // Set palette for(color=0;color<16;++color) { POKE(0xFFB0+color,_color_encoding[color]); } // POKE(0xFFB,0x3F); // Set MMU windows at $8000 POKE(0xFFA4,0x30); POKE(0xFFA5,0x31); POKE(0xFFA6,0x32); // color = 0; // for(i=0;i<24000/32;++i) // { // POKE(0x8000+i,255); // for(j=0;j<700;++j) // { // } // if((i&31)==31) // { // _XL_WAIT_FOR_INPUT(); // ++color; // color&=7; // } // } // while(1){}; } ================================================ FILE: src/cross_lib/display/init_graphics/cmoc/mo5/mo5_init_graphics.c ================================================ #include "conio_patch.h" #include "display_macros.h" void _XL_INIT_GRAPHICS(void) { // Hide blinking cursor PUTCH(0x14); #if defined(__BACKGROUND_COLOR) && __BACKGROUND_COLOR==1 // SCREEN 7 - TEXT COLOR PUTCH(0x1B);PUTCH(32);PUTCH(64);PUTCH(32); // SCREEN ,0 - BACKGROUND COLOR PUTCH(0x1B);PUTCH(32);PUTCH(87);PUTCH(32); // BORDER COLOR PUTCH(0x1B);PUTCH(103); #else // SCREEN 7 - TEXT COLOR PUTCH(0x1B);PUTCH(32);PUTCH(71);PUTCH(32); // SCREEN ,0 - BACKGROUND COLOR PUTCH(0x1B);PUTCH(32);PUTCH(80);PUTCH(32); // BORDER COLOR PUTCH(0x1B);PUTCH(96); #endif // SCREEN ,,,0 (Fix attributes) PUTCH(0x1B);PUTCH(118); } ================================================ FILE: src/cross_lib/display/init_graphics/gcc/ncurses_init_graphics.c ================================================ #if defined(WIN32) #include #else #include #endif #include "display_macros.h" #if defined(__BACKGROUND_COLOR) && __BACKGROUND_COLOR==1 #define _NCURSES_BACKGROUND_COLOR COLOR_WHITE #else #define _NCURSES_BACKGROUND_COLOR COLOR_BLACK #endif void _XL_INIT_GRAPHICS(void) { #if defined(__ATARI_ST__) putenv("TERM=st52"); #endif initscr(); noecho(); curs_set(0); start_color(); cbreak(); intrflush(stdscr, TRUE); init_pair(1, COLOR_YELLOW, _NCURSES_BACKGROUND_COLOR); init_pair(2, COLOR_CYAN, _NCURSES_BACKGROUND_COLOR); init_pair(3, COLOR_RED, _NCURSES_BACKGROUND_COLOR); init_pair(4, COLOR_GREEN, _NCURSES_BACKGROUND_COLOR); init_pair(5, COLOR_BLUE, _NCURSES_BACKGROUND_COLOR); init_pair(6, COLOR_WHITE, _NCURSES_BACKGROUND_COLOR); init_pair(7, COLOR_MAGENTA, _NCURSES_BACKGROUND_COLOR); init_pair(8, COLOR_BLACK, _NCURSES_BACKGROUND_COLOR); wbkgd(stdscr, COLOR_PAIR(1)); refresh(); _setScreenColors(); } ================================================ FILE: src/cross_lib/display/init_graphics/gcc/terminal_init_graphics.c ================================================ #if defined(WIN32) #include #else #include #endif #include "display_macros.h" #if _XL_TILE_X_SIZE==8 #define _MAX_BIT_VALUE 128 #if _XL_TILE_Y_SIZE==8 #include "8x8_chars.h" #elif _XL_TILE_Y_SIZE==6 #include "8x6_chars.h" #endif #elif _XL_TILE_X_SIZE==7 #define _MAX_BIT_VALUE 64 #include "7x8_chars.h" #elif _XL_TILE_X_SIZE==6 #define _MAX_BIT_VALUE 32 #if _XL_TILE_Y_SIZE==8 #include "6x8_chars.h" #elif _XL_TILE_Y_SIZE==9 #include "6x9_chars.h" #endif #endif #if defined(__BACKGROUND_COLOR) && __BACKGROUND_COLOR==1 #define _NCURSES_BACKGROUND_COLOR COLOR_WHITE #else #define _NCURSES_BACKGROUND_COLOR COLOR_BLACK #endif #if _XL_TILE_Y_SIZE==9 #define _SPACE_ {0,0,0,0,0,0,0,0,0} #elif _XL_TILE_Y_SIZE==8 #define _SPACE_ {0,0,0,0,0,0,0,0} #elif _XL_TILE_Y_SIZE==6 #define _SPACE_ {0,0,0,0,0,0} #endif uint8_t _terminal_text_color; uint8_t _tiles[][_XL_TILE_Y_SIZE] = { _SPACE_, _TILE_DIGIT_0, _TILE_DIGIT_1, _TILE_DIGIT_2, _TILE_DIGIT_3, _TILE_DIGIT_4, _TILE_DIGIT_5, _TILE_DIGIT_6, _TILE_DIGIT_7, _TILE_DIGIT_8, _TILE_DIGIT_9, _TILE_0_UDG, _TILE_1_UDG, _TILE_2_UDG, _TILE_3_UDG, _TILE_4_UDG, _TILE_5_UDG, _TILE_6_UDG, _TILE_A, _TILE_B, _TILE_C, _TILE_D, _TILE_E, _TILE_F, _TILE_G, _TILE_H, _TILE_I, _TILE_J, _TILE_K, _TILE_L, _TILE_M, _TILE_N, _TILE_O, _TILE_P, _TILE_Q, _TILE_R, _TILE_S, _TILE_T, _TILE_U, _TILE_V, _TILE_W, _TILE_X, _TILE_Y, _TILE_Z, _TILE_7_UDG, // 43 _TILE_8_UDG, _TILE_9_UDG, _TILE_10_UDG, _TILE_11_UDG, _TILE_12_UDG, _TILE_13_UDG, _TILE_14_UDG, _TILE_15_UDG, _TILE_16_UDG, _TILE_17_UDG, _TILE_18_UDG, _TILE_19_UDG, _TILE_20_UDG, _TILE_21_UDG, _TILE_22_UDG, _TILE_23_UDG, _TILE_24_UDG, _TILE_25_UDG, _TILE_26_UDG, // {0x18,0x3e,0x60,0x3c,0x06,0x7c,0x18,0x00}, }; void _XL_INIT_GRAPHICS(void) { #if defined(__ATARI_ST__) putenv("TERM=st52"); #endif initscr(); noecho(); nodelay(NULL, TRUE); curs_set(0); start_color(); cbreak(); intrflush(stdscr, TRUE); // init_pair(1, COLOR_YELLOW, _NCURSES_BACKGROUND_COLOR); // init_pair(2, COLOR_CYAN, _NCURSES_BACKGROUND_COLOR); // init_pair(3, COLOR_RED, _NCURSES_BACKGROUND_COLOR); // init_pair(4, COLOR_GREEN, _NCURSES_BACKGROUND_COLOR); // init_pair(5, COLOR_BLUE, _NCURSES_BACKGROUND_COLOR); // init_pair(6, COLOR_WHITE, _NCURSES_BACKGROUND_COLOR); // init_pair(7, COLOR_MAGENTA, _NCURSES_BACKGROUND_COLOR); // init_pair(8, COLOR_BLACK, _NCURSES_BACKGROUND_COLOR); init_pair(1, _NCURSES_BACKGROUND_COLOR, COLOR_YELLOW); init_pair(2, _NCURSES_BACKGROUND_COLOR, COLOR_CYAN); init_pair(3, _NCURSES_BACKGROUND_COLOR, COLOR_RED); init_pair(4, _NCURSES_BACKGROUND_COLOR, COLOR_GREEN); init_pair(5, _NCURSES_BACKGROUND_COLOR, COLOR_BLUE); init_pair(6, _NCURSES_BACKGROUND_COLOR, COLOR_WHITE); init_pair(7, _NCURSES_BACKGROUND_COLOR, COLOR_MAGENTA); init_pair(8, _NCURSES_BACKGROUND_COLOR, COLOR_BLACK); wbkgd(stdscr, COLOR_PAIR(8)); refresh(); _setScreenColors(); } ================================================ FILE: src/cross_lib/display/init_graphics/gcc4ti99/gcc4ti99_init_graphics.c ================================================ #include #include #include #include "8x8_chars.h" #include "udg_map.h" #include "display_macros.h" // #include #if defined(__BACKGROUND_COLOR) && __BACKGROUND_COLOR==1 #define set_group_color(group, color) \ vdpmemset(gColor+group,COLOR_WHITE+16*color,1) #else #define set_group_color(group, color) \ vdpmemset(gColor+group,COLOR_BLACK+16*color,1) #endif #define _GROUP_COLOR_OFFSET 8 // COLOR_LTGREEN // COLOR_LTYELLOW void set_udg_colors(void) { // 0 set_group_color(0,COLOR_LTBLUE); set_group_color(1,COLOR_LTBLUE); set_group_color(2,COLOR_LTBLUE); set_group_color(3,COLOR_LTBLUE); // 32 - Digits set_group_color(4,COLOR_WHITE); set_group_color(5,COLOR_WHITE); set_group_color(6,COLOR_WHITE); set_group_color(7,COLOR_WHITE); // 64 - Alphabet set_group_color(8,COLOR_WHITE); set_group_color(9,COLOR_WHITE); set_group_color(10,COLOR_WHITE); set_group_color(11,COLOR_WHITE); // 96 #if defined(__BACKGROUND_COLOR) && __BACKGROUND_COLOR==1 set_group_color(12,COLOR_BLACK); set_group_color(13,COLOR_BLACK); set_group_color(14,COLOR_BLACK); set_group_color(15,COLOR_BLACK); #else set_group_color(12,COLOR_WHITE); set_group_color(13,COLOR_WHITE); set_group_color(14,COLOR_WHITE); set_group_color(15,COLOR_WHITE); #endif // 128 set_group_color(16,COLOR_CYAN); set_group_color(17,COLOR_CYAN); set_group_color(18,COLOR_CYAN); set_group_color(19,COLOR_CYAN); // 160 set_group_color(20,COLOR_LTRED); set_group_color(21,COLOR_LTRED); set_group_color(22,COLOR_LTRED); set_group_color(23,COLOR_LTRED); // 192 set_group_color(24,COLOR_LTGREEN); set_group_color(25,COLOR_LTGREEN); set_group_color(26,COLOR_LTGREEN); set_group_color(27,COLOR_LTGREEN); // 224 set_group_color(28,COLOR_LTYELLOW); set_group_color(29,COLOR_LTYELLOW); set_group_color(30,COLOR_LTYELLOW); set_group_color(31,COLOR_LTYELLOW); } void redefine(const uint8_t ch, const uint8_t* image) { vdpmemcpy(gPattern +(uint16_t)(ch<<3),image,8); } void SET_UDG_IMAGES(void) { uint8_t i; uint8_t j; for (i = 0; i < sizeof(redefine_map) / sizeof(*redefine_map); ++i) { for(j=0;j<5;++j) { redefine(redefine_map[i].ascii+32*j, redefine_map[i].bitmap); } } } void _XL_INIT_GRAPHICS(void) { uint8_t i; set_graphics(VDP_SPR_16x16); // set video mode charsetlc(); // load character set with lowercase vdpmemset(gImage, 32, 768); // clear screen VDP_SET_REGISTER(VDP_REG_COL, COLOR_BLACK); // set screen color set_udg_colors(); SET_UDG_IMAGES(); _setScreenColors(); } ================================================ FILE: src/cross_lib/display/init_graphics/lcc1802/comx/comx_color_init_graphics.c ================================================ #include #include #if !defined(NTSC) #define NUMBER_OF_LINES 9 #include "6x9_chars.h" #else #define NUMBER_OF_LINES 8 #include "6x8_chars.h" #endif #if defined(__COMX__) || defined(__PECOM__) #include "comx_color_settings.h" #elif defined(__CIDELSA__) && !!defined(_XL_NO_UDG) // #include "cidelsa_no_gfx.h" #elif defined(__MICRO__) #include "micro_settings.h" #endif #include "standard_libs.h" #include "cross_lib.h" #if defined(__CIDELSA__) #include #endif #if defined(__MICRO__) #include "devkit/video/vis_char.h" #endif #if !defined(COLOR_OFFSET) #define COLOR_OFFSET 64 #endif #if defined(__COMX__) || defined(__PECOM__) || defined(__MICRO__) || !defined(_XL_NO_UDG) void redefine_char(uint8_t ch, const uint8_t * shapelocation) { uint8_t colored_shape[NUMBER_OF_LINES]; uint8_t i; uint8_t color; for(color=0;color<3;++color) { for(i=0;i=20 {_TILE_19, _TILE_19_UDG}, // #if _XL_NUMBER_OF_TILES>=21 {_TILE_20, _TILE_20_UDG}, // #if _XL_NUMBER_OF_TILES>=22 {_TILE_21, _TILE_21_UDG}, // #if _XL_NUMBER_OF_TILES>=23 {_TILE_22, _TILE_22_UDG}, // #if _XL_NUMBER_OF_TILES>=24 {_TILE_23, _TILE_23_UDG}, // #if _XL_NUMBER_OF_TILES>=25 {_TILE_24, _TILE_24_UDG}, // #if _XL_NUMBER_OF_TILES>=26 {_TILE_25, _TILE_25_UDG}, // #if _XL_NUMBER_OF_TILES>=27 {_TILE_26, _TILE_26_UDG}, // #endif // #endif // #endif // #endif // #endif // #endif // #endif // #endif }; #endif #endif void _XL_INIT_GRAPHICS(void) { uint8_t i; initvideo(); setvideobase(BASE_ADDR); #if !defined(VIS_INT) disableinterrupt(); #endif #if defined(__TMC600__) textcolor(5); #endif #if defined(__CIDELSA__) || defined(__MICRO__) character_set(4); #endif #if defined(__COMX__) || defined(__PECOM__) || defined(__CIDELSA__) || defined(__MICRO__) #if defined(__BACKGROUND_COLOR) && __BACKGROUND_COLOR==1 (void) bgcolor(7); #else (void) bgcolor(0); #endif // bgcolor(__BACKGROUND_COLOR); textcolordefinition(3); monochrome(0); #endif #if defined(__PECOM__) shapecolor(48, 10, 2); // to reshape the numbers shapecolor(65, 26, 3); // to reshape the capitals #endif #if defined(__COMX__) || defined(__PECOM__) || defined(__MICRO__) || !defined(_XL_NO_UDG) for(i=0;i<_XL_NUMBER_OF_TILES;++i) { redefine_char(redefine_map[i]._ascii, redefine_map[i]._bitmap); } #endif _setScreenColors(); } #if defined(__CIDELSA__) #include #endif ================================================ FILE: src/cross_lib/display/init_graphics/lcc1802/comx/comx_init_graphics.c ================================================ #include #include #if !defined(_XL_NO_UDG) #include "6x9_chars.h" #endif #if defined(__COMX__) || defined(__PECOM__) || (defined(__CIDELSA__) && !defined(_XL_NO_UDG)) #include "comx_settings.h" #elif defined(__MICRO__) #include "micro_settings.h" #endif #include "standard_libs.h" #include "cross_lib.h" #if defined(__CIDELSA__) #include #endif #if defined(__MICRO__) #include "devkit/video/vis_char.h" #endif #if defined(__COMX__) || defined(__PECOM__) || defined(__MICRO__) || !defined(_XL_NO_UDG) void redefine_char(uint8_t ch, const uint8_t * shapelocation, int color) { uint8_t colored_shape[9]; uint8_t i; for(i=0;i<9;++i) { colored_shape[i]=shapelocation[i]+color*64; } shapechar(colored_shape, ch, 1); } const struct redefine_struct { const uint8_t _ascii; const uint8_t _bitmap[9]; const uint8_t _color; } ; const struct redefine_struct redefine_map[] = { {_TILE_0, _TILE_0_UDG, 3}, {_TILE_1, _TILE_1_UDG, 3}, {_TILE_2, _TILE_2_UDG, 3}, {_TILE_3, _TILE_3_UDG, 3}, {_TILE_4, _TILE_4_UDG, 3}, {_TILE_5, _TILE_5_UDG, 0}, {_TILE_6, _TILE_6_UDG, 0}, {_TILE_7, _TILE_7_UDG, 2}, {_TILE_8, _TILE_8_UDG, 2}, {_TILE_9, _TILE_9_UDG, 1}, {_TILE_10, _TILE_10_UDG, 3}, {_TILE_11, _TILE_11_UDG, 3}, {_TILE_12, _TILE_12_UDG, 2}, {_TILE_13, _TILE_13_UDG, 2}, {_TILE_14, _TILE_14_UDG, 3}, {_TILE_15, _TILE_15_UDG, 3}, {_TILE_16, _TILE_16_UDG, 3}, {_TILE_17, _TILE_17_UDG, 3}, {_TILE_18, _TILE_18_UDG, 0}, {_TILE_19, _TILE_19_UDG, 3}, {_TILE_20, _TILE_20_UDG, 3}, {_TILE_21, _TILE_21_UDG, 3}, {_TILE_22, _TILE_22_UDG, 3}, {_TILE_23, _TILE_23_UDG, 3}, {_TILE_24, _TILE_24_UDG, 3}, {_TILE_25, _TILE_25_UDG, 3}, {_TILE_26, _TILE_26_UDG, 3}, }; #endif #if defined(__MEMORY_MAPPED_GRAPHICS) #include "memory_mapped_graphics.h" #elif defined(__LCC1802_GRAPHICS) #include "lcc1802_graphics.h" #endif void _XL_INIT_GRAPHICS(void) { uint8_t i; initvideo(); setvideobase(BASE_ADDR); disableinterrupt(); #if defined(__TMC600__) textcolor(5); #endif #if defined(__CIDELSA__) || defined(__MICRO__) character_set(4); #endif #if defined(__COMX__) || defined(__PECOM__) || defined(__MICRO__) || !defined(_XL_NO_UDG) for(i=0;i<_XL_NUMBER_OF_TILES;++i) { redefine_char(redefine_map[i]._ascii, redefine_map[i]._bitmap, redefine_map[i]._color); } #endif #if defined(__COMX__) || defined(__PECOM__) || defined(__CIDELSA__) || defined(__MICRO__) #if defined(__BACKGROUND_COLOR) && __BACKGROUND_COLOR==1 (void) bgcolor(7); #else (void) bgcolor(0); #endif textcolordefinition(3); monochrome(0); #endif #if defined(__PECOM__) shapecolor(36, 22, 2); // to reshape the numbers shapecolor(65, 26, 3); // to reshape the capitals #endif _setScreenColors(); } #if defined(__CIDELSA__) #include #endif ================================================ FILE: src/cross_lib/display/init_graphics/lcc1802/comx/micro_color_init_graphics.c ================================================ #include #include #if !defined(_XL_NO_UDG) #if !defined(NTSC) #define NUMBER_OF_LINES 9 #include "6x9_chars.h" #else #define NUMBER_OF_LINES 8 #include "6x8_chars.h" #endif #endif #include "micro_color_settings.h" #include "standard_libs.h" #include "cross_lib.h" #include "devkit/video/vis_char.h" #define _BASE_COLOR 192 void redefine_char(uint8_t ch, const uint8_t * shapelocation) { uint8_t colored_shape[NUMBER_OF_LINES]; uint8_t i; for(i=0;i=20 {_TILE_19, _TILE_19_UDG}, #if _XL_NUMBER_OF_TILES>=21 {_TILE_20, _TILE_20_UDG}, #if _XL_NUMBER_OF_TILES>=22 {_TILE_21, _TILE_21_UDG}, #if _XL_NUMBER_OF_TILES>=23 {_TILE_22, _TILE_22_UDG}, #if _XL_NUMBER_OF_TILES>=24 {_TILE_23, _TILE_23_UDG}, #if _XL_NUMBER_OF_TILES>=25 {_TILE_24, _TILE_24_UDG}, #if _XL_NUMBER_OF_TILES>=26 {_TILE_25, _TILE_25_UDG}, #if _XL_NUMBER_OF_TILES>=27 {_TILE_26, _TILE_26_UDG}, #endif #endif #endif #endif #endif #endif #endif #endif // {_DOLLAR_TILE, _DOLLAR_DEFINITION}, }; #include "lcc1802_color_graphics.h" void _XL_INIT_GRAPHICS(void) { uint8_t i; initvideo(); setvideobase(BASE_ADDR); disableinterrupt(); character_set(4); for(i=0;i<_XL_NUMBER_OF_TILES;++i) { redefine_char(redefine_map[i]._ascii, redefine_map[i]._bitmap); } #if defined(__BACKGROUND_COLOR) && __BACKGROUND_COLOR==1 (void) bgcolor(7); #else (void) bgcolor(0); #endif textcolordefinition(3); monochrome(0); _setScreenColors(); } ================================================ FILE: src/cross_lib/display/init_graphics/vbcc/bbc/bbc_init_graphics.c ================================================ // DOC on VDU // https://www.bbcbasic.co.uk/bbcbasic/manual/vdu.html#vdu22 /* 0 Null - it does nothing. 1 Send the next character to the printer ONLY. 2 Enable the printer. 3 Disable the printer. 4 Write text at the text cursor position. 5 Write text at the graphics cursor position. 6 Enable output to the screen. 7 Bell - make a short 'beep'. 8 Move the text cursor backwards one character. 9 Move the text cursor forwards one character. 10 Move the text cursor down one line. 11 Move the text cursor up one line. 12 Clear the text area - identical to CLS. 13 Move the text cursor to the start of the current line. 14 Enable the auto-paging mode. 15 Disable the auto-paging mode. 16 Clear the graphics area - identical to CLG. 17 Define a text colour - identical to COLOUR. 18 Define a graphics colour - identical to GCOL. 19 Select a colour palette. 20 Restore the default logical colours. 21 Disable output to the screen. 22 Select the screen mode - identical to MODE. 23 Program characters and control the cursor. 24 Define a graphics window. 25 Identical to PLOT. 26 Restore the default text and graphics windows. 27 Send the next character to the screen. 28 Define a text window. 29 Set the graphics origin. 30 Home the text cursor to the top left of the screen. 31 Move the text cursor - identical to TAB(x,y). 127 Backspace and delete. */ // char OSBYTE0(__reg("a") char)="\tjsr\t$fff4\n\ttxa"; // char OSBYTE1(__reg("a") char,__reg("r0") char)="\tldx\tr0\n\tjsr\t$fff4\n\ttxa"; // char OSBYTE1RI(__reg("a") char,__reg("r0") char)="\tldx\tr0\n\tjsr\t$fff4\n\ttxa\n\tpha\n\ttya\n\ttax\n\tpla"; // char OSBYTE2(__reg("a") char,__reg("r0") char,__reg("r1") char)="\tldx\tr0\n\tldy\tr1\n\tjsr\t$fff4\n\ttxa"; // char OSBYTE2I(__reg("a") char,__reg("r0/r1") unsigned int)="\tldx\tr0\n\tldy\tr1\n\tjsr\t$fff4\n\ttxa"; // void OSBYTE0NR(__reg("a") char)="\tjsr\t$fff4"; // void OSBYTE1NR(__reg("a") char,__reg("r0") char)="\tldx\tr0\n\tjsr\t$fff4"; // void OSBYTE2NR(__reg("a") char,__reg("r0") char,__reg("r1") char)="\tldx\tr0\n\tldy\tr1\n\tjsr\t$fff4"; // #define OSVER() OSBYTE0(0) // #define OSUSRFLG(x,y) OSBYTE2(1,(x),(y)) // #define OSSELINPUT(x) OSBYTE1NR(2,(x)) // #define OSSELOUTPUT(x) OSBYTE2(3,(x),(y)) // #define OSCURSORED(x) OSBYTE2(4,(x),(y)) // #define OSSELADC(x) OSBYTE1(16,(x)) // #define OSFRCADC(x) OSBYTE1NR(17,(x)) // #define OSVSYNC() OSBYTE0(19) // #define OSRDVDU() OSBYTE0(117) // #define OSSCANKEY(x) OSBYTE1(121,(x)) // #define OSSCANKEY16() OSBYTE0(122) // #define OSADVAL(x) OSBYTE1RI(128,(x)) // #define OSINKEY(x) OSBYTE2I(129,(x)) // void OSWORD(__reg("a") char,__reg("r0/r1") void *)="\tldx\tr0\n\tldy\tr1\n\tjsr\t$fff1"; // #define OSRDSYSCLK(x) OSWORD(1,x) // #define OSWRSYSCLK(x) OSWORD(2,x) // #define OSRDTIMER(x) OSWORD(3,x) // #define OSWRTIMER(x) OSWORD(4,x) // #define OSRDIO(x) OSWORD(5,x) // #define OSWRIO(x) OSWORD(6,x) // #define OSSOUND(x) OSWORD(7,x) // #define OSENVELOPE(x) OSWORD(8,x) // #define OSRDPIXEL(x) OSWORD(9,x) // #define OSRDCHARDEF(x) OSWORD(10,x) // #define OSRDPALETTE(x) OSWORD(11,x) // #define OSWRPALETTE(x) OSWORD(12,x) // #define OSRDGRCURSOR(x) OSWORD(13,x) #include "8x8_chars.h" #include "udg_map.h" #include void osputc(__reg("a") char)="\tjsr\t0xffee"; void redefine(const uint8_t ch, const uint8_t *data) { uint8_t i; osputc(23); osputc(ch); for(i=0;i<8;++i) { osputc(data[i]); } } void SET_UDG_IMAGES(void) { uint8_t i; for (i = 0; i < sizeof(redefine_map) / sizeof(*redefine_map); ++i) { redefine(redefine_map[i].ascii, redefine_map[i].bitmap); } } // COLORS // 0 -> black // 1 -> red // 2 -> green // 3 -> yellow // 4 -> blue // 5 -> purple // 6 -> cyan // 7 -> white // OSSCANKEY // 'b' <-> SPACE // '%' <-> 'I' // 'F' <-> 'K' // 'E' <-> 'J' // 'V' <-> 'L' #if !defined(__BBC_MODE) #define __BBC_MODE 7 #endif void _XL_INIT_GRAPHICS(void) { #if __BBC_MODE!=7 osputc(22); #if defined(__SHADOW_RAM) osputc((uint8_t)__BBC_MODE+128U); #else osputc(__BBC_MODE); #endif #endif #if __BBC_MODE==5 #if !defined(__USE_GREEN) osputc(19); osputc(2); osputc(6); osputc(1); osputc(1); osputc(1); #else osputc(19); osputc(2); osputc(2); osputc(0); osputc(0); osputc(0); #endif #endif // Disable the cursor osputc(23); osputc(1); osputc(0); osputc(0); osputc(0); osputc(0); osputc(0); osputc(0); osputc(0); osputc(0); #if !(__BBC_MODE==7) SET_UDG_IMAGES(); #endif } ================================================ FILE: src/cross_lib/display/init_graphics/vbcc/bbc/bbc_init_graphics_test.c ================================================ // DOC on VDU // https://www.bbcbasic.co.uk/bbcbasic/manual/vdu.html#vdu22 /* 0 Null - it does nothing. 1 Send the next character to the printer ONLY. 2 Enable the printer. 3 Disable the printer. 4 Write text at the text cursor position. 5 Write text at the graphics cursor position. 6 Enable output to the screen. 7 Bell - make a short 'beep'. 8 Move the text cursor backwards one character. 9 Move the text cursor forwards one character. 10 Move the text cursor down one line. 11 Move the text cursor up one line. 12 Clear the text area - identical to CLS. 13 Move the text cursor to the start of the current line. 14 Enable the auto-paging mode. 15 Disable the auto-paging mode. 16 Clear the graphics area - identical to CLG. 17 Define a text colour - identical to COLOUR. 18 Define a graphics colour - identical to GCOL. 19 Select a colour palette. 20 Restore the default logical colours. 21 Disable output to the screen. 22 Select the screen mode - identical to MODE. 23 Program characters and control the cursor. 24 Define a graphics window. 25 Identical to PLOT. 26 Restore the default text and graphics windows. 27 Send the next character to the screen. 28 Define a text window. 29 Set the graphics origin. 30 Home the text cursor to the top left of the screen. 31 Move the text cursor - identical to TAB(x,y). 127 Backspace and delete. */ #include "bbc.h" // char OSBYTE0(__reg("a") char)="\tjsr\t$fff4\n\ttxa"; // char OSBYTE1(__reg("a") char,__reg("r0") char)="\tldx\tr0\n\tjsr\t$fff4\n\ttxa"; // char OSBYTE1RI(__reg("a") char,__reg("r0") char)="\tldx\tr0\n\tjsr\t$fff4\n\ttxa\n\tpha\n\ttya\n\ttax\n\tpla"; // char OSBYTE2(__reg("a") char,__reg("r0") char,__reg("r1") char)="\tldx\tr0\n\tldy\tr1\n\tjsr\t$fff4\n\ttxa"; // char OSBYTE2I(__reg("a") char,__reg("r0/r1") unsigned int)="\tldx\tr0\n\tldy\tr1\n\tjsr\t$fff4\n\ttxa"; // void OSBYTE0NR(__reg("a") char)="\tjsr\t$fff4"; // void OSBYTE1NR(__reg("a") char,__reg("r0") char)="\tldx\tr0\n\tjsr\t$fff4"; // void OSBYTE2NR(__reg("a") char,__reg("r0") char,__reg("r1") char)="\tldx\tr0\n\tldy\tr1\n\tjsr\t$fff4"; // #define OSVER() OSBYTE0(0) // #define OSUSRFLG(x,y) OSBYTE2(1,(x),(y)) // #define OSSELINPUT(x) OSBYTE1NR(2,(x)) // #define OSSELOUTPUT(x) OSBYTE2(3,(x),(y)) // #define OSCURSORED(x) OSBYTE2(4,(x),(y)) // #define OSSELADC(x) OSBYTE1(16,(x)) // #define OSFRCADC(x) OSBYTE1NR(17,(x)) // #define OSVSYNC() OSBYTE0(19) // #define OSRDVDU() OSBYTE0(117) // #define OSSCANKEY(x) OSBYTE1(121,(x)) // #define OSSCANKEY16() OSBYTE0(122) // #define OSADVAL(x) OSBYTE1RI(128,(x)) // #define OSINKEY(x) OSBYTE2I(129,(x)) // void OSWORD(__reg("a") char,__reg("r0/r1") void *)="\tldx\tr0\n\tldy\tr1\n\tjsr\t$fff1"; // #define OSRDSYSCLK(x) OSWORD(1,x) // #define OSWRSYSCLK(x) OSWORD(2,x) // #define OSRDTIMER(x) OSWORD(3,x) // #define OSWRTIMER(x) OSWORD(4,x) // #define OSRDIO(x) OSWORD(5,x) // #define OSWRIO(x) OSWORD(6,x) // #define OSSOUND(x) OSWORD(7,x) // #define OSENVELOPE(x) OSWORD(8,x) // #define OSRDPIXEL(x) OSWORD(9,x) // #define OSRDCHARDEF(x) OSWORD(10,x) // #define OSRDPALETTE(x) OSWORD(11,x) // #define OSWRPALETTE(x) OSWORD(12,x) // #define OSRDGRCURSOR(x) OSWORD(13,x) #include "8x8_chars.h" #include "udg_map.h" #include // #include void osputc(__reg("a") char)="\tjsr\t0xffee"; // static uint8_t stripes[] = {255,0,255,0,255,0,255,0}; // static uint8_t player[] = {24, 36, 24,102,153, 24, 36, 102}; // void redefine(const uint8_t ch, const uint8_t* image) // { // uint8_t i; // for(i=0;i<8;++i) // { // DISPLAY_POKE(CHAR_BASE +(uint16_t)(ch<<3)+i,image[i]); // } // } void redefine(const uint8_t ch, const uint8_t *data) { uint8_t i; osputc(23); osputc(ch); for(i=0;i<8;++i) { osputc(data[i]); } // osputc('\n'); } void SET_UDG_IMAGES(void) { uint8_t i; // uint8_t j; for (i = 0; i < sizeof(redefine_map) / sizeof(*redefine_map); ++i) { redefine(redefine_map[i].ascii, redefine_map[i].bitmap); } } // void _gotoxy(uint8_t x, uint8_t y) // { // osputc(31); // osputc(x); // osputc(y); // } // COLORS // 0 -> black // 1 -> red // 2 -> green // 3 -> yellow // 4 -> blue // 5 -> purple // 6 -> cyan // 7 -> white // OSSCANKEY // 'b' <-> SPACE // '%' <-> 'I' // 'F' <-> 'K' // 'E' <-> 'J' // 'V' <-> 'L' #if !defined(__BBC_MODE) #define __BBC_MODE 7 #endif void _XL_INIT_GRAPHICS(void) { // uint8_t res; #if __BBC_MODE!=7 osputc(22); #if defined(__SHADOW_RAM) osputc((uint8_t)__BBC_MODE+128U); #else osputc(__BBC_MODE); #endif #endif #if __BBC_MODE==5 #if !defined(__USE_GREEN) osputc(19); osputc(2); osputc(6); osputc(1); osputc(1); osputc(1); #else osputc(19); osputc(2); osputc(2); osputc(0); osputc(0); osputc(0); #endif #endif // Disable the cursor osputc(23); osputc(1); osputc(0); osputc(0); osputc(0); osputc(0); osputc(0); osputc(0); osputc(0); osputc(0); // Delete graphics screen data // osputc(16); // osputc(12); // Redefine characters // TODO: This is wrong #if !(__BBC_MODE==7) SET_UDG_IMAGES(); #endif osputc('A'); osputc('B'); osputc('C'); osputc(_TILE_0); osputc(_TILE_1); osputc(_TILE_2); while(1){}; } ================================================ FILE: src/cross_lib/display/init_graphics/z88dk/aquarius/aquarius_init_graphics.c ================================================ /* --------------------------------------------------------------------------------------- */ // // CROSS CHASE by Fabrizio Caruso // // Fabrizio_Caruso@hotmail.com // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from // the use of this software. // Permission is granted to anyone to use this software for non-commercial applications, // subject to the following restrictions: // 1. The origin of this software must not be misrepresented; you must not // claim that you wrote the original software. If you use this software in // a product, an acknowledgment in the product documentation would be // appreciated but is not required. // 2. Altered source versions must be plainly marked as such, and must not // be misrepresented as being the original software. // 3. This notice may not be removed or altered from any source distribution. /* --------------------------------------------------------------------------------------- */ #define _AQUARIUS_RED 16 #define _AQUARIUS_WHITE (16+32+64) #define _AQUARIUS_CYAN (16+128) #include "memory_mapped_graphics.h" #include "display_macros.h" #define POKE(addr,val) (*(uint8_t*) (addr) = (val)) #define POKEW(addr,val) (*(unsigned*) (addr) = (val)) #define PEEK(addr) (*(uint8_t*) (addr)) #define PEEKW(addr) (*(unsigned*) (addr)) void _XL_INIT_GRAPHICS(void) { uint8_t i; POKE(COLOR_ADDR,7); for(i=0;i<251;++i) { POKE((uint16_t) (COLOR_ADDR+1+i),128); POKE((uint16_t) (COLOR_ADDR+250+i),128); POKE((uint16_t) (COLOR_ADDR+500+i),128); POKE((uint16_t) (COLOR_ADDR+749+i),128); } _setScreenColors(); } ================================================ FILE: src/cross_lib/display/init_graphics/z88dk/c128/c128_init_graphics.c ================================================ #include #include "display_macros.h" #define POKE(addr,val) (*(uint8_t*) (addr) = (val)) void _XL_INIT_GRAPHICS(void) { clg(); // Disable VIC-IIe to get a little speed-up (about 7%) /* __asm ; Disable VIC-IIe chip ld a,0 ld bc,$d011 out (c),a ; Set fast mode ld a,1 ld bc,$d030 out (c),a __endasm; */ _setScreenColors(); } ================================================ FILE: src/cross_lib/display/init_graphics/z88dk/cpc/cpc_cpcrslib_init_graphics.c ================================================ #include "display_macros.h" #define UDG_N 26 char char_list[] = { 33, '\0', // TILE_ 37, '\0', // TILE_ 44, '\0', // TILE_ 40, '\0', // TILE_ 43, '\0', // TILE_ 42, '\0', // TILE_8 41, '\0', // TILE_ 49, '\0', // TILE_ 46, '\0', // TILE_ 52, '\0', // TILE_ 39, '\0', // TILE_ 38, '\0', // TILE_ 45, '\0', // TILE_ 33, '\0', // TILE_ 34, '\0', // TILE_ 35, '\0', // TILE_ 36, '\0', // TILE_ 47, '\0', // TILE_12 48, '\0', // TILE_13 50, '\0', 51, '\0', 122, '\0', 123, '\0', 124, '\0', 125, '\0', 126, '\0', 127, '\0', 128, '\0' }; char space_str[2] = {' ', '\0'}; void set_palette() { #asm EXTERN firmware ld bc,$0000 call firmware defw 0xbc38 ld a,$00 ld bc,$0000 call firmware defw 0xbc32 ld a,$02 ld bc,$1a1a call firmware defw 0xbc32 ld a,$03 ld bc,$0606 call firmware defw 0xbc32 ld a,$01 ld bc,$1818 call firmware defw 0xbc32 #endasm } void _XL_INIT_GRAPHICS(void) { set_palette(); _setScreenColors(); } ================================================ FILE: src/cross_lib/display/init_graphics/z88dk/g850/g850_init_graphics.c ================================================ #include void _XL_INIT_GRAPHICS(void) { fputc_cons(12); } ================================================ FILE: src/cross_lib/display/init_graphics/z88dk/msx/msx_redefined_chars_init_graphics.c ================================================ #include #include "display_macros.h" // 0000 | 07FF | VRAM: Main Tile Patterns (1/3) // 0800 | 0FFF | VRAM: Extra Tile Patterns (2/3) // 1000 | 17FF | VRAM: Extra Tile Patterns (3/3) // 1800 | 1AFF | VRAM: Tilemap // 1B00 | 1B7F | VRAM: Sprite Attributes // 1B80 | 1BAF | VRAM: Palette Table // 2000 | 37FF | VRAM: Colormap // 3800 | 3FFF | VRAM: Sprite Patterns #if !defined(USE_MSX_BIOS) #define COLOR_DEF 0x1000 #define CHAR_BASE 0x2000 #define TEXT_MODE_32x40 mode_0 #else #define COLOR_DEF 0x2000 #define CHAR_BASE 0x0000 #define TEXT_MODE_32x40 mode_1 #endif #include "msx_redefined_chars_settings.h" #include "8x8_chars.h" #include "udg_map.h" #include "memory_mapped_graphics.h" void set_group_color(uint8_t group, uint8_t color) { msx_vpoke(COLOR_DEF+group, color<<4); } /* $00 Transparent #000000 $01 Black #000000 $02 Medium Green #21C842 $03 Light Green #5EDC78 $04 Dark Blue #5455ED $05 Light Blue #7D76FC $06 Dark Red #D4524D $07 Cyan #42EBF5 $08 Medium Red #FC5554 $09 Light Red #FF7978 $0a Dark Yellow #D4C154 $0b Light Yellow #E6CE80 $0c Dark Green #21B03B $0d Magenta #C95BBA $0e Gray #CCCCCC $0f White #FFFFFF */ #define MSX_COLOR_MEDIUM_GREEN 2 #define MSX_COLOR_DARK_RED 6 #define MSX_COLOR_CYAN 7 #define MSX_COLOR_MEDIUM_RED 8 #define MSX_COLOR_LIGHT_RED 9 #define MSX_COLOR_DARK_YELLOW 10 #define MSX_COLOR_LIGHT_YELLOW 11 #define MSX_COLOR_WHITE 15 void set_udg_colors(void) { uint8_t i; #if !defined(ALL_COLOR) #if defined(__ALTERNATIVE_COLOR) set_group_color(0,MSX_COLOR_LIGHT_RED); set_group_color(1,MSX_COLOR_WHITE); set_group_color(2,MSX_COLOR_LIGHT_RED); set_group_color(3,MSX_COLOR_LIGHT_YELLOW); set_group_color(4,MSX_COLOR_DARK_YELLOW); set_group_color(5,MSX_COLOR_MEDIUM_GREEN); set_group_color(6,MSX_COLOR_WHITE); set_group_color(7,MSX_COLOR_WHITE); for(i=8;i<=11;++i) { set_group_color(i,MSX_COLOR_WHITE); } for(i=12;i<=20;++i) { set_group_color(i,MSX_COLOR_DARK_RED); } for(i=21;i<=28;++i) { set_group_color(i,MSX_COLOR_WHITE); } for(i=29;i<=31;++i) { set_group_color(i,MSX_COLOR_CYAN); } #else set_group_color(0,MSX_COLOR_LIGHT_RED); set_group_color(1,MSX_COLOR_WHITE); set_group_color(2,MSX_COLOR_LIGHT_RED); set_group_color(3,MSX_COLOR_LIGHT_YELLOW); set_group_color(4,MSX_COLOR_DARK_YELLOW); set_group_color(5,MSX_COLOR_MEDIUM_GREEN); set_group_color(6,MSX_COLOR_CYAN); set_group_color(7,MSX_COLOR_CYAN); for(i=8;i<=11;++i) { set_group_color(i,MSX_COLOR_WHITE); } for(i=21;i<=31;++i) { set_group_color(i,MSX_COLOR_LIGHT_RED); } #endif #else for(i=0;i<=32;++i) { set_group_color(i,ALL_COLOR); } #endif } void redefine(const uint8_t ch, const uint8_t* image) { uint8_t i; for(i=0;i<8;++i) { DISPLAY_POKE(CHAR_BASE +(uint16_t)(ch<<3)+i,image[i]); } } void SET_UDG_IMAGES(void) { uint8_t i; for (i = 0; i < sizeof(redefine_map) / sizeof(*redefine_map); ++i) { redefine(redefine_map[i].ascii, redefine_map[i].bitmap); } } #include void _XL_INIT_GRAPHICS(void) { #if defined(VDP_WAIT_V_SYNC) #include add_raster_int(tick_count_isr); #endif set_mode(TEXT_MODE_32x40); set_color(15, 1, 1); set_udg_colors(); SET_UDG_IMAGES(); _setScreenColors(); } ================================================ FILE: src/cross_lib/display/init_graphics/z88dk/rex/rex_init_graphics.c ================================================ #include #include "display_macros.h" #define UDG_N 20 char char_list[UDG_N*2] = { '*', '\0', // PLAYER 'O', '\0', // GHOST 'X', '\0', // BOMB '+', '\0', // SKULL '.', '\0', // BULLET 'P', '\0', // POWERUP '!', '\0', // GUN '$', '\0', // EXTRA_POINTS_IMAGE 'V', '\0', // INVINCIBILITY '*', '\0', // EXTRA LIFE '>', '\0', // LEFT_HORIZONTAL_MISSILE '<', '\0', // RIGHT_HORIZONTAL_MISSILE '^', '\0', // ROCKET '*', '\0', // PLAYER_DOWN '*', '\0', // PLAYER_UP '*', '\0', // PLAYER_RIGHT '*', '\0', // PLAYER_LEFT '|', '\0', // VERTICAL_BRICK '-', '\0' // HORIZONTAL_BRICK }; char space_str[2] = {' ', '\0'}; void _XL_INIT_GRAPHICS(void) { DsEventClear(); DsClearScreen(); _setScreenColors(); } ================================================ FILE: src/cross_lib/display/init_graphics/z88dk/sms/sms_init_graphics.c ================================================ #include #include #include #include #include #include "display_macros.h" const uint8_t author[] = "z88dk"; const uint8_t name[] = "Hello World"; const uint8_t description[] = "Test program for the output terminal."; extern uint8_t font_8x8_bbc_system[]; const uint8_t palette[] = {0x00,0x01,0x05,0x15,0x24,0x25,0x29,0x39,0x16,0x1a,0x1b,0x2a,0x3a,0x3e,0x2b,0x3f}; const struct r_Rect8 rect = {0, 32, 0, 24}; void _XL_INIT_GRAPHICS(void) { sms_memcpy_mem_to_cram(0, palette, 16); sms_memcpy_mem_to_cram(16, palette, 16); sms_vdp_set_write_address(0x0000); sms_copy_font_8x8_to_vram(font_8x8_bbc_system, 128 - 32, 0, 1); sms_display_on(); sms_border(4); // clear entire screen with # character sms_cls_wc(&rect,'#' - 32); // clear terminal only ioctl(1, IOCTL_OTERM_CLS); ioctl(1, IOCTL_OTERM_PAUSE, 0); _setScreenColors(); } ================================================ FILE: src/cross_lib/display/init_graphics/z88dk/udg/udg_init_graphics.c ================================================ #include #include "display_macros.h" #include #if defined(__HECTORHR__) #include #endif extern uint8_t udgs[]; void _XL_INIT_GRAPHICS(void) { void *param = &udgs; // Necessary to have .vz file correctly started on several emulators that do not load .vz as they should #if defined(__VZ__) *((unsigned char *)0x7839) |= 1; #endif #if !defined(__SCREEN_MODE) #define __SCREEN_MODE 2 #endif #if defined(__MC1000__) && defined(__BACKGROUND_COLOR) && __BACKGROUND_COLOR==1 int mode = __SCREEN_MODE + 32; #else int mode = __SCREEN_MODE; #endif console_ioctl(IOCTL_GENCON_SET_MODE, &mode); console_ioctl(IOCTL_GENCON_SET_FONT32, ¶m); // TODO: remove the Spectrum special case #if defined(__SPECTRUM__) printf("\x01\x20"); textbackground(_XL_BACKGROUND_COLOR); zx_border(_XL_BACKGROUND_COLOR); #elif defined(__HECTORHR__) // #include #if defined(__USE_GREEN) hector_set_palette(HECTOR_BLACK, HECTOR_WHITE, HECTOR_GREEN, HECTOR_RED); #else hector_set_palette(HECTOR_BLACK, HECTOR_WHITE, HECTOR_CYAN, HECTOR_RED); #endif #else _setScreenColors(); #endif } ================================================ FILE: src/cross_lib/display/init_graphics/z88dk/udg/udg_msx_test.c ================================================ #include #include "display_macros.h" #include #include void _XL_INIT_GRAPHICS(void) { int mode = mode_2; console_ioctl(IOCTL_GENCON_SET_MODE, &mode); gotoxy(2,2); printf("hello world!\n"); gotoxy(0,0); printf("a"); gotoxy(31,0); printf("b"); gotoxy(0,23); printf("c"); gotoxy(31,23); printf("d"); while(1){}; _setScreenColors(); } ================================================ FILE: src/cross_lib/display/init_graphics/z88dk/vz200/vz200_init_graphics.c ================================================ void _XL_INIT_GRAPHICS(void) { // Necessary to have .vz file correctly started on several emulators that do not load .vz as they should *((unsigned char *)0x7839) |= 1; } ================================================ FILE: src/cross_lib/display/init_graphics/z88dk/x07/x07_init_graphics.c ================================================ #include void _XL_INIT_GRAPHICS(void) { int height = 4; console_ioctl(IOCTL_GENCON_SET_FONT_H,&height); } ================================================ FILE: src/cross_lib/display/init_graphics/z88dk/z88/z88_init_graphics.c ================================================ #include // #define HELP1 "A pointless demo application made with z88dk" // #define HELP2 "Simply loops, points out menu selections and dies" // #define HELP3 "..eventually..see source for details" // #define HELP4 "" // #define HELP5 "v0.1 - 9.4.99 (djm)" // #define HELP6 "" #pragma -no-expandz88 #if !defined(BAD_PAGES) #define BAD_PAGES 2 #else #define BAD_PAGES 1 #endif #pragma -reqpag=BAD_PAGES #pragma printf = "" // /* Redirect OZ required callbacks to our functions */ // #pragma redirect handlecmds=_handlecmds // #pragma redirect redrawscreen=_redrawscreen #define APP_INFO "by Fabrizio Caruso" #define APP_KEY 'X' #define APP_NAME "XChase" #include #include #include "display_macros.h" void _XL_INIT_GRAPHICS(void) { #if defined(__Z88DK_SPRITES_GRAPHICS) static struct window win; /* Window structure */ win.graph=1; win.width=255; win.number='4'; window(win); #endif _setScreenColors(); } ================================================ FILE: src/cross_lib/display/init_graphics/z88dk/z88/z88_udg_init_graphics.c ================================================ #include #pragma -no-expandz88 #if !defined(BAD_PAGES) #define BAD_PAGES 2 #else #define BAD_PAGES 1 #endif #pragma -reqpag=BAD_PAGES #define APP_INFO "by Fabrizio Caruso" #define APP_KEY 'X' #define APP_NAME "XL" #include #include #include "display_macros.h" extern uint8_t udgs[]; void _XL_INIT_GRAPHICS(void) { void *param = &udgs; #if !defined(__SCREEN_MODE) #define __SCREEN_MODE 2 #endif int mode = __SCREEN_MODE; console_ioctl(IOCTL_GENCON_SET_FONT32, ¶m); console_ioctl(IOCTL_GENCON_SET_MODE, &mode); z88_disable_cursor(); _setScreenColors(); } ================================================ FILE: src/cross_lib/display/init_graphics/z88dk/zx80/zx80_init_graphics.c ================================================ #include "display_macros.h" void _XL_INIT_GRAPHICS(void) { #if defined(ZX80_GEN_TV_FIELD) gen_tv_field_init(); #endif _setScreenColors(); } ================================================ FILE: src/cross_lib/display/init_graphics/z88dk/zx81/zx81_init_graphics.c ================================================ #include "display_macros.h" void _XL_INIT_GRAPHICS(void) { #if !defined(__Z88DK_SPRITES_GRAPHICS) clg(); #endif _setScreenColors(); } ================================================ FILE: src/cross_lib/display/redefine_characters/udg_map.h ================================================ #ifndef _UDG_MAP #define _UDG_MAP #if !defined(USE_MSX_BIOS) #include "display_macros.h" #include "tiles.h" #endif const struct redefine_struct { const uint8_t ascii; const uint8_t bitmap[8]; } ; #if defined(__C16__) && defined(__CONIO_GRAPHICS) char screenCode(char ch) { if(ch<64) { return ch; } else { return ch-64; } return ch; } #else #define screenCode(ch) ch #endif const struct redefine_struct redefine_map[] = { {_TILE_0, _TILE_0_UDG}, {_TILE_1, _TILE_1_UDG}, {_TILE_2, _TILE_2_UDG}, {_TILE_3, _TILE_3_UDG}, {_TILE_4, _TILE_4_UDG}, {_TILE_5, _TILE_5_UDG}, {_TILE_6, _TILE_6_UDG}, {_TILE_7, _TILE_7_UDG}, {_TILE_8, _TILE_8_UDG}, {_TILE_9, _TILE_9_UDG}, {_TILE_10, _TILE_10_UDG}, {_TILE_11, _TILE_11_UDG}, {_TILE_12, _TILE_12_UDG}, {_TILE_13, _TILE_13_UDG}, {_TILE_14, _TILE_14_UDG}, {_TILE_15, _TILE_15_UDG}, {_TILE_16, _TILE_16_UDG}, {_TILE_17, _TILE_17_UDG}, {_TILE_18, _TILE_18_UDG}, {_TILE_19, _TILE_19_UDG}, {_TILE_20, _TILE_20_UDG}, {_TILE_21, _TILE_21_UDG}, {_TILE_22, _TILE_22_UDG}, {_TILE_23, _TILE_23_UDG}, {_TILE_24, _TILE_24_UDG}, {_TILE_25, _TILE_25_UDG}, {_TILE_26, _TILE_26_UDG}, }; #define REDEFINE_AT(addr) \ { \ uint8_t i; \ \ for (i = 0; i < (sizeof(redefine_map)/sizeof(*redefine_map)); ++i) \ { \ memcpy((uint8_t *)(addr) + screenCode((redefine_map[i].ascii))*8, redefine_map[i].bitmap, 8); \ } \ } #endif // _UDG_MAP ================================================ FILE: src/cross_lib/display/tiles/agat_settings.h ================================================ #define _TILE_0 0 #define _TILE_1 1 #define _TILE_2 2 #define _TILE_3 3 #define _TILE_4 4 #define _TILE_5 5 #define _TILE_6 6 #define _TILE_7 7 #define _TILE_8 8 #define _TILE_9 9 #define _TILE_10 10 #define _TILE_11 11 #define _TILE_12 12 #define _TILE_13 13 #define _TILE_14 14 #define _TILE_15 15 #define _TILE_16 16 #define _TILE_17 17 #define _TILE_18 18 #define _TILE_19 19 #define _TILE_20 20 #define _TILE_21 21 #define _TILE_22 22 #define _TILE_23 23 #define _TILE_24 24 #define _TILE_25 25 #define _TILE_26 26 ================================================ FILE: src/cross_lib/display/tiles/apple2_hgr_settings.h ================================================ #ifndef _APPLE2_HGR_SETTINGS #define _APPLE2_HGR_SETTINGS #define _TILE_0 11 #define _TILE_1 12 #define _TILE_2 13 #define _TILE_3 14 #define _TILE_4 15 #define _TILE_5 16 #define _TILE_6 17 #define _TILE_7 44 #define _TILE_8 45 #define _TILE_9 46 #define _TILE_10 47 #define _TILE_11 48 #define _TILE_12 49 #define _TILE_13 50 #define _TILE_14 51 #define _TILE_15 52 #define _TILE_16 53 #define _TILE_17 54 #define _TILE_18 55 #define _TILE_19 56 #define _TILE_20 57 #define _TILE_21 58 #define _TILE_22 59 #define _TILE_23 60 #define _TILE_24 61 #define _TILE_25 62 #define _TILE_26 63 #endif // _APPLE2_HGR_SETTINGS ================================================ FILE: src/cross_lib/display/tiles/atari7800_settings.h ================================================ // 37 * 2 = 74 #define _TILE_0 (0+74) #define _TILE_1 (2+74) #define _TILE_2 (4+74) #define _TILE_3 (6+74) #define _TILE_4 (8+74) #define _TILE_5 (10+74) #define _TILE_6 (12+74) #define _TILE_7 (14+74) #define _TILE_8 (16+74) #define _TILE_9 (18+74) #define _TILE_10 (20+74) #define _TILE_11 (22+74) #define _TILE_12 (24+74) #define _TILE_13 (26+74) #define _TILE_14 (28+74) #define _TILE_15 (30+74) #define _TILE_16 (32+74) #define _TILE_17 (34+74) #define _TILE_18 (36+74) #define _TILE_19 (38+74) #define _TILE_20 (40+74) #define _TILE_21 (42+74) #define _TILE_22 (44+74) #define _TILE_23 (46+74) #define _TILE_24 (48+74) #define _TILE_25 (50+74) #define _TILE_26 (52+74) ================================================ FILE: src/cross_lib/display/tiles/atari_mode1_redefined_chars_settings.h ================================================ #ifndef _ATARI_MODE1_SETTINGS #define _ATARI_MODE1_SETTINGS // Still available: // 3,15,26,27,31,32 (TILE_19-24) // 16-25 (0-9) // 33-58 (A-Z) // 13 (-) // 4 ($) // #define _ATARI_MODE1_RED 0 // #define _ATARI_MODE1_WHITE 64 // #define _ATARI_MODE1_BLUE 128 // #define _ATARI_MODE1_YELLOW 192 #define _TILE_0 60 #define _TILE_1 61 #define _TILE_2 62 #define _TILE_3 63 #define _TILE_4 59 #define _TILE_5 29 #define _TILE_6 14 #define _TILE_7 30 #define _TILE_8 28 #define _TILE_9 11 #define _TILE_10 12 #define _TILE_11 10 #define _TILE_12 5 #define _TILE_13 6 #define _TILE_14 9 #define _TILE_15 8 #define _TILE_16 7 #define _TILE_17 1 #define _TILE_18 2 #define _TILE_19 3 #define _TILE_20 15 #define _TILE_21 26 #define _TILE_22 27 #define _TILE_23 31 #define _TILE_24 32 #define _TILE_25 4 #define _TILE_26 13 #endif // _ATARI_MODE1_SETTINGS ================================================ FILE: src/cross_lib/display/tiles/atmos_redefined_characters_settings.h ================================================ #define _TILE_0 '/' #define _TILE_1 '.' #define _TILE_2 ',' #define _TILE_3 '*' #define _TILE_4 0x60 #define _TILE_5 0x5b #define _TILE_6 ('Z'+2) #define _TILE_7 0x7b #define _TILE_8 0x5d #define _TILE_9 0x5e #define _TILE_10 0x3B #define _TILE_11 0x5f #define _TILE_12 '|' #define _TILE_13 0x26 #define _TILE_14 '>' #define _TILE_15 '<' #define _TILE_16 0x23 #define _TILE_17 0x28 #define _TILE_18 0x29 #define _TILE_19 ('Z'+35) #define _TILE_20 ('Z'+36) #define _TILE_21 ('Z'+37) #define _TILE_22 ('<'+1) #define _TILE_23 ('+') #define _TILE_24 ('?') #define _TILE_25 '$' #define _TILE_26 ('@') ================================================ FILE: src/cross_lib/display/tiles/bbc_settings.h ================================================ #define _TILE_0 200 #define _TILE_1 201 #define _TILE_2 202 #define _TILE_3 203 #define _TILE_4 204 #define _TILE_5 205 #define _TILE_6 206 #define _TILE_7 207 #define _TILE_8 208 #define _TILE_9 209 #define _TILE_10 210 #define _TILE_11 211 #define _TILE_12 212 #define _TILE_13 213 #define _TILE_14 214 #define _TILE_15 215 #define _TILE_16 216 #define _TILE_17 217 #define _TILE_18 218 #define _TILE_19 219 #define _TILE_20 220 #define _TILE_21 221 #define _TILE_22 222 #define _TILE_23 223 #define _TILE_24 224 #define _TILE_25 225 #define _TILE_26 226 ================================================ FILE: src/cross_lib/display/tiles/c128_settings.h ================================================ #ifndef _C264_REDEFINED_CHARS_H #define _C264_REDEFINED_CHARS_H // Still available: // 0x80-.... ? // BLUE #define _TILE_0 0x3B #define _TILE_1 0x3C #define _TILE_2 0x3D #define _TILE_3 0x3E #define _TILE_9 0x3F // YELLOW #define _TILE_7 0x27 #define _TILE_12 0x26 #define _TILE_13 0x2B #define _TILE_25 0x24 // GREEN #define _TILE_8 0x2C // RED #define _TILE_5 0x29 // CYAN #define _TILE_10 0x21 #define _TILE_11 0x23 // WHITE #define _TILE_4 0x1F #define _TILE_6 0x28 #define _TILE_14 0x22 #define _TILE_15 0x2E #define _TILE_16 0x2F #define _TILE_17 0x3A #define _TILE_18 0x25 // OK #define _TILE_19 0 // OK #define _TILE_20 28 // OK #define _TILE_21 30 // ok #define _TILE_22 0x2A // KO: #define _TILE_23 ('b'-65) // KO: #define _TILE_24 ('c'-65) #define _TILE_26 0x2D #endif // _C264_REDEFINED_CHARS_H ================================================ FILE: src/cross_lib/display/tiles/c264_link_time_redefined_chars_settings.h ================================================ // #define _TILE_15 0x7A // #define _TILE_24 0x7B #define _TILE_15 0x3A #define _TILE_24 0x3B #define _TILE_18 0x3C #define _TILE_21 0x3D #define _TILE_22 0x3E #define _TILE_23 0x3F // TO FIX // #define _TILE_24 0x40 // TODO: Move this to 0x3A or 0x3B // BLUE #define _TILE_0 0x67 #define _TILE_1 0x6B #define _TILE_2 0x69 #define _TILE_3 0x68 #define _TILE_9 0x5B // YELLOW #define _TILE_7 0x65 #define _TILE_12 0x62 #define _TILE_13 0x63 #define _TILE_25 0x6A // GREEN #define _TILE_8 0x5D // RED #define _TILE_5 0x66 // CYAN #define _TILE_10 0x5C #define _TILE_11 0x61 // WHITE #define _TILE_4 0x64 #define _TILE_6 0x6C #define _TILE_14 0x5F #define _TILE_16 0x5E // #define _TILE_17 0x7B #define _TILE_17 0x40 #define _TILE_19 0x6E #define _TILE_20 0x6F #define _TILE_26 0x6D ================================================ FILE: src/cross_lib/display/tiles/c264_redefined_chars_settings.h ================================================ #ifndef _C264_REDEFINED_CHARS_H #define _C264_REDEFINED_CHARS_H // Still available: // 0x80-.... ? // BLUE #define _TILE_0 0x3B #define _TILE_1 0x3C #define _TILE_2 0x3D #define _TILE_3 0x3E #define _TILE_9 0x3F // YELLOW #define _TILE_7 0x27 #define _TILE_12 0x26 #define _TILE_13 0x2B #define _TILE_25 0x24 // GREEN #define _TILE_8 0x2C // RED #define _TILE_5 0x29 // CYAN #define _TILE_10 0x21 #define _TILE_11 0x23 // WHITE #define _TILE_4 0x1F #define _TILE_6 0x28 #define _TILE_14 0x22 #define _TILE_15 0x2E #define _TILE_16 0x2F #define _TILE_17 0x3A #define _TILE_18 0x25 // OK #define _TILE_19 0 // OK #define _TILE_20 28 // OK #define _TILE_21 30 // ok #define _TILE_22 0x2A // KO: #define _TILE_23 ('{') // KO: #define _TILE_24 ('}') #define _TILE_26 0x2D #endif // _C264_REDEFINED_CHARS_H ================================================ FILE: src/cross_lib/display/tiles/c64_conio_settings.h ================================================ /* --------------------------------------------------------------------------------------- */ // // CROSS CHASE by Fabrizio Caruso // // Fabrizio_Caruso@hotmail.com // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from // the use of this software. // Permission is granted to anyone to use this software for non-commercial applications, // subject to the following restrictions: // 1. The origin of this software must not be misrepresented; you must not // claim that you wrote the original software. If you use this software in // a product, an acknowledgment in the product documentation would be // appreciated but is not required. // 2. Altered source versions must be plainly marked as such, and must not // be misrepresented as being the original software. // 3. This notice may not be removed or altered from any source distribution. /* --------------------------------------------------------------------------------------- */ #include // #include #include #include #include #include #include "display_macros.h" // #define _TILE_4 (0x76-0x20-13-7) #define _TILE_7 33 #define _TILE_5 34 #define _TILE_17 35 #define _TILE_8 44 #define _TILE_9 45 #define _TILE_11 46 #define _TILE_12 47 #define _TILE_0 '\'' #define _TILE_1 (0x70-0x20-12-7) // #define _TILE_2 (0x74-0x20-13-7) #define _TILE_3 (0x72-0x20-13-7) #define _TILE_16 ('^'-0x40) #define _TILE_25 '$' #define _TILE_14 ('>'-3) #define _TILE_15 ('<'-2) #define _TILE_10 (0x73 - 0x20-13-7) #define _TILE_6 (('^'-0x40)+1) #define _TILE_13 (0xC3-128-7) // #define _TILE_18 (0x75-0x20-13-7) #define _TILE_19 42 #define _TILE_20 43 #define _TILE_21 37 #define _TILE_22 38 #define _TILE_23 40 #define _TILE_24 41 #define _TILE_26 0 #define _TILE_2 ('Z'+1) #define _TILE_4 ('Z'+2) #define _TILE_18 ('Z'+3) ================================================ FILE: src/cross_lib/display/tiles/c64_memory_mapped_settings.h ================================================ /* --------------------------------------------------------------------------------------- */ // // CROSS CHASE by Fabrizio Caruso // // Fabrizio_Caruso@hotmail.com // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from // the use of this software. // Permission is granted to anyone to use this software for non-commercial applications, // subject to the following restrictions: // 1. The origin of this software must not be misrepresented; you must not // claim that you wrote the original software. If you use this software in // a product, an acknowledgment in the product documentation would be // appreciated but is not required. // 2. Altered source versions must be plainly marked as such, and must not // be misrepresented as being the original software. // 3. This notice may not be removed or altered from any source distribution. /* --------------------------------------------------------------------------------------- */ #include // #include #include #include #include #include #include "display_macros.h" #define _TILE_4 (0x76-0x20-13-7) #define _TILE_7 33 #define _TILE_5 34 #define _TILE_17 35 #define _TILE_8 44 #define _TILE_9 45 #define _TILE_11 46 #define _TILE_12 47 #define _TILE_0 '\'' #define _TILE_1 (0x70-0x20-12-7) #define _TILE_2 (0x74-0x20-13-7) #define _TILE_3 (0x72-0x20-13-7) #define _TILE_16 ('^'-0x40) #define _TILE_25 '$' #define _TILE_14 ('>'-3) #define _TILE_15 ('<'-2) #define _TILE_10 (0x73 - 0x20-13-7) #define _TILE_6 (('^'-0x40)+1) #define _TILE_13 (0xC3-128-7) #define _TILE_18 (0x75-0x20-13-7) #define _TILE_19 42 #define _TILE_20 43 #define _TILE_21 37 #define _TILE_22 38 #define _TILE_23 40 #define _TILE_24 41 #define _TILE_26 0 ================================================ FILE: src/cross_lib/display/tiles/cidelsa_no_gfx.h ================================================ /* --------------------------------------------------------------------------------------- */ // // CROSS CHASE by Fabrizio Caruso // // Fabrizio_Caruso@hotmail.com // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from // the use of this software. // Permission is granted to anyone to use this software for non-commercial applications, // subject to the following restrictions: // 1. The origin of this software must not be misrepresented; you must not // claim that you wrote the original software. If you use this software in // a product, an acknowledgment in the product documentation would be // appreciated but is not required. // 2. Altered source versions must be plainly marked as such, and must not // be misrepresented as being the original software. // 3. This notice may not be removed or altered from any source distribution. /* --------------------------------------------------------------------------------------- */ #ifndef _DEFAULT_GRAPHICS_SETTINGS #define _DEFAULT_GRAPHICS_SETTINGS #if !defined(_DEFAULT_ASCII) #include "tiles/ASCII/char_tiles.h" #endif // #else #if !defined(_TILE_19) #define _TILE_19 'T' #endif #if !defined(_TILE_20) #define _TILE_20 'W' #endif #if !defined(_TILE_21) #define _TILE_21 'H' #endif #if !defined(_TILE_22) #define _TILE_22 'E' #endif #if !defined(_TILE_23) #define _TILE_23 'L' #endif #if !defined(_TILE_24) #define _TILE_24 'D' #endif #if !defined(_TILE_1) #define _TILE_1 'H' #endif #if !defined(_TILE_3) #define _TILE_3 'H' #endif #if !defined(_TILE_2) #define _TILE_2 'H' #endif #if !defined(_TILE_0) #define _TILE_0 'H' #endif // RED #if !defined(_TILE_5) #define _TILE_5 'X' #endif // WHITE #if !defined(_TILE_4) #define _TILE_4 'O' #endif #if !defined(_TILE_6) #define _TILE_6 'Z' #endif // BLUE #if !defined(_TILE_9) #define _TILE_9 'G' #endif // YELLOW #if !defined(_TILE_7) #define _TILE_7 'A' #endif #if !defined(_TILE_25) #define _TILE_25 'M' #endif #if !defined(_TILE_26) #define _TILE_26 'M' #endif // GREEN #if !defined(_TILE_8) #define _TILE_8 'S' #endif #if !defined(_TILE_17) #define _TILE_17 'F' #endif #if !defined(_TILE_18) #define _TILE_18 'H' #endif // CYAN #if !defined(_TILE_10) #define _TILE_10 'V' #endif #if !defined(_TILE_11) #define _TILE_11 'O' #endif #if !defined(_TILE_14) #define _TILE_14 'D' #endif #if !defined(_TILE_15) #define _TILE_15 'C' #endif #if !defined(_TILE_16) #define _TILE_16 'I' #endif #if !defined(_TILE_12) #define _TILE_12 'I' #endif #if !defined(_TILE_13) #define _TILE_13 'I' #endif // #endif #endif // _DEFAULT_GRAPHICS_SETTINGS ================================================ FILE: src/cross_lib/display/tiles/cmoc_memory_mapped_settings.h ================================================ /* --------------------------------------------------------------------------------------- */ // // CROSS CHASE by Fabrizio Caruso // // Fabrizio_Caruso@hotmail.com // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from // the use of this software. // Permission is granted to anyone to use this software for non-commercial applications, // subject to the following restrictions: // 1. The origin of this software must not be misrepresented; you must not // claim that you wrote the original software. If you use this software in // a product, an acknowledgment in the product documentation would be // appreciated but is not required. // 2. Altered source versions must be plainly marked as such, and must not // be misrepresented as being the original software. // 3. This notice may not be removed or altered from any source distribution. /* --------------------------------------------------------------------------------------- */ #ifndef _CMOC_GRAPHICS_SETTINGS #define _CMOC_GRAPHICS_SETTINGS #include "cross_lib.h" #if !defined(_DEFAULT_ASCII) #include "tiles/ASCII/char_tiles.h" #endif #if !defined(_TILE_19) #if !defined(__CIDELSA__) #define _TILE_19 '*' #else #define _TILE_19 'H' #endif #endif #if !defined(_TILE_20) #if !defined(__CIDELSA__) #define _TILE_20 '*' #else #define _TILE_20 'H' #endif #endif #if !defined(_TILE_21) #if !defined(__CIDELSA__) #define _TILE_21 '*' #else #define _TILE_21 'H' #endif #endif #if !defined(_TILE_22) #if !defined(__CIDELSA__) #define _TILE_22 '*' #else #define _TILE_22 'H' #endif #endif #if !defined(_TILE_23) #if !defined(__CIDELSA__) #define _TILE_23 '*' #else #define _TILE_23 'H' #endif #endif #if !defined(_TILE_24) #if !defined(__CIDELSA__) #define _TILE_24 '*' #else #define _TILE_24 'H' #endif #endif // BLUE #if !defined(_TILE_0) #define _TILE_0 ('*'+NOT_INVERTED) #endif #if !defined(_TILE_1) #define _TILE_1 ('*'+NOT_INVERTED) #endif #if !defined(_TILE_2) #define _TILE_2 ('*'+NOT_INVERTED) #endif #if !defined(_TILE_3) #define _TILE_3 ('*'+NOT_INVERTED) #endif #if !defined(_TILE_9) #define _TILE_9 '!' #endif #if !defined(_TILE_7) #define _TILE_7 ('+'+NOT_INVERTED) #endif #if !defined(_TILE_25) #define _TILE_25 '$' #endif #if !defined(_TILE_8) #define _TILE_8 ('S'+INVERTED) #endif #if !defined(_TILE_17) #define _TILE_17 ('F'+INVERTED) #endif #if !defined(_TILE_18) #define _TILE_18 ('H'+INVERTED) #endif #if !defined(_TILE_5) #define _TILE_5 ('X'+INVERTED) #endif #if !defined(_TILE_6) #define _TILE_6 '#' #endif #if !defined(_TILE_10) #define _TILE_10 'I' #endif #if !defined(_TILE_11) #define _TILE_11 ('.'+NOT_INVERTED) #endif #if !defined(_TILE_4) #define _TILE_4 'O' #endif #if !defined(_TILE_14) #define _TILE_14 ('>'+NOT_INVERTED) #endif #if !defined(_TILE_15) #define _TILE_15 ('<'+NOT_INVERTED) #endif #if !defined(_TILE_16) #define _TILE_16 ('#'+NOT_INVERTED) #endif #if !defined(_TILE_18) #define _TILE_18 ('H'+INVERTED) #endif #if !defined(_TILE_12) #define _TILE_12 ('#'+NOT_INVERTED) #endif #if !defined(_TILE_13) #define _TILE_13 ('-'+NOT_INVERTED) #endif #if !defined(_TILE_26) #define _TILE_26 ('-'+NOT_INVERTED) #endif #endif // _CMOC_GRAPHICS_SETTINGS ================================================ FILE: src/cross_lib/display/tiles/comx_color_settings.h ================================================ /* --------------------------------------------------------------------------------------- */ // // CROSS CHASE by Fabrizio Caruso // // Fabrizio_Caruso@hotmail.com // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from // the use of this software. // Permission is granted to anyone to use this software for non-commercial applications, // subject to the following restrictions: // 1. The origin of this software must not be misrepresented; you must not // claim that you wrote the original software. If you use this software in // a product, an acknowledgment in the product documentation would be // appreciated but is not required. // 2. Altered source versions must be plainly marked as such, and must not // be misrepresented as being the original software. // 3. This notice may not be removed or altered from any source distribution. /* --------------------------------------------------------------------------------------- */ #ifndef _COMX_COLOR_GRAPHICS_GRAPHICS_SETTINGS #define _COMX_COLOR_GRAPHICS_GRAPHICS_SETTINGS #define _TILE_0 0 #define _TILE_1 3 #define _TILE_2 6 #define _TILE_3 9 #define _TILE_4 12 #define _TILE_5 15 #define _TILE_6 18 #define _TILE_7 21 #define _TILE_8 24 #define _TILE_9 27 #define _TILE_10 33 #define _TILE_11 39 #define _TILE_12 42 #define _TILE_13 58 #define _TILE_14 91 #define _TILE_15 94 #define _TILE_16 97 #define _TILE_17 100 #define _TILE_18 103 #define _TILE_19 106 #define _TILE_20 109 #define _TILE_21 112 #define _TILE_22 115 #define _TILE_23 118 #define _TILE_24 121 #define _TILE_25 36 #define _TILE_26 124 #endif // _COMX_COLOR_GRAPHICS_GRAPHICS_SETTINGS ================================================ FILE: src/cross_lib/display/tiles/comx_settings.h ================================================ /* --------------------------------------------------------------------------------------- */ // // CROSS CHASE by Fabrizio Caruso // // Fabrizio_Caruso@hotmail.com // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from // the use of this software. // Permission is granted to anyone to use this software for non-commercial applications, // subject to the following restrictions: // 1. The origin of this software must not be misrepresented; you must not // claim that you wrote the original software. If you use this software in // a product, an acknowledgment in the product documentation would be // appreciated but is not required. // 2. Altered source versions must be plainly marked as such, and must not // be misrepresented as being the original software. // 3. This notice may not be removed or altered from any source distribution. /* --------------------------------------------------------------------------------------- */ #ifndef _COMX_GRAPHICS_SETTINGS #define _COMX_GRAPHICS_SETTINGS #define PALETTE_SWITCH 128 #define _TILE_0 ('k') #define _TILE_1 ('l') #define _TILE_2 ('m') #define _TILE_3 ('n') // RED #define _TILE_5 ('o'+PALETTE_SWITCH) // WHITE #define _TILE_4 ('p'+PALETTE_SWITCH) #define _TILE_6 ('u'+PALETTE_SWITCH) // BLUE #define _TILE_9 ('s') //('s'+PALETTE_SWITCH) // YELLOW #define _TILE_7 ('q'+PALETTE_SWITCH) #define _TILE_25 '$' #define _TILE_26 ('a'-2) // GREEN #define _TILE_8 'r' #define _TILE_17 ('z'+1) #define _TILE_18 ('z'+2+PALETTE_SWITCH) // CYAN #define _TILE_10 'j' #define _TILE_11 ('t'+PALETTE_SWITCH) #define _TILE_14 ('w'+PALETTE_SWITCH) #define _TILE_15 ('x'+PALETTE_SWITCH) #define _TILE_16 ('v'+PALETTE_SWITCH) #define _TILE_12 ('y'+PALETTE_SWITCH) #define _TILE_13 ('z'+PALETTE_SWITCH) #if !defined(__COMX__) #define _TILE_19 ('a') #define _TILE_20 ('b') #define _TILE_21 ('c') #define _TILE_22 ('d') #define _TILE_23 ('e') #define _TILE_24 ('f') #else #define _TILE_19 ('/') #define _TILE_20 ('=') #define _TILE_21 (';') #define _TILE_22 ('+') #define _TILE_23 ('*') #define _TILE_24 ('!') #endif #endif // _COMX_GRAPHICS_SETTINGS ================================================ FILE: src/cross_lib/display/tiles/cpc_cpcrslib_settings.h ================================================ #ifndef _CPC___CPCRSLIB_GRAPHICS_SETTINGS #define _CPC___CPCRSLIB_GRAPHICS_SETTINGS // Offsets in the "meta-string" #define _TILE_4 1*2 #define _TILE_5 2*2 #define _TILE_7 3*2 #define _TILE_11 4*2 #define _TILE_8 5*2 #define _TILE_9 6*2 #define _TILE_25 7*2 #define _TILE_10 8*2 #define _TILE_14 10*2 #define _TILE_15 11*2 #define _TILE_16 12*2 #define _TILE_0 13*2 #define _TILE_1 14*2 #define _TILE_2 15*2 #define _TILE_3 16*2 #define _TILE_12 17*2 #define _TILE_13 18*2 #define _TILE_6 9*2 #define _TILE_17 19*2 #define _TILE_18 20*2 #define _TILE_19 21*2 #define _TILE_20 22*2 #define _TILE_21 23*2 #define _TILE_22 24*2 #define _TILE_23 25*2 #define _TILE_24 26*2 #define _TILE_26 27*2 #endif // _CPC___CPCRSLIB_GRAPHICS_SETTINGS ================================================ FILE: src/cross_lib/display/tiles/creativision_settings.h ================================================ #ifndef _CREATIVISION_COLOR_REDEFINED_CHARS_SETTINGS #define _CREATIVISION_COLOR_REDEFINED_CHARS_SETTINGS // Still available: // 0x80-.... ? // BLUE #define _TILE_0 0x3B #define _TILE_1 0x3C #define _TILE_2 0x3D #define _TILE_3 0x3E #define _TILE_9 0x3F // YELLOW #define _TILE_7 0x27 #define _TILE_12 0x26 #define _TILE_13 0x22 #define _TILE_25 0x24 // GREEN #define _TILE_8 0x2C // RED #define _TILE_5 0x5E #define _TILE_6 0x5B // CYAN #define _TILE_10 0x08 #define _TILE_11 0x09 #define _TILE_17 0x0A #define _TILE_18 0x5C // WHITE #define _TILE_4 0x7E #define _TILE_14 ((uint8_t)0x7B) #define _TILE_15 ((uint8_t)0x7D) #define _TILE_16 ((uint8_t)0x60) #define _TILE_19 0x41 #define _TILE_20 0x42 #define _TILE_21 0x43 #define _TILE_22 0x44 #define _TILE_23 0x45 #define _TILE_24 0x46 // TODO: Check this #define _TILE_26 0x47 #endif // _CREATIVISION_COLOR_REDEFINED_CHARS_SETTINGS ================================================ FILE: src/cross_lib/display/tiles/cx16_settings.h ================================================ #define _TILE_0 (33) #define _TILE_1 (34) #define _TILE_2 (35) #define _TILE_3 (36) #define _TILE_4 (37) #define _TILE_5 (38) #define _TILE_6 (39) #define _TILE_7 (40) #define _TILE_8 (41) #define _TILE_9 (42) #define _TILE_10 (43) #define _TILE_11 (44) #define _TILE_12 (45) #define _TILE_13 (46) #define _TILE_14 (47) #define _TILE_15 (58) #define _TILE_16 (59) #define _TILE_17 (60) #define _TILE_18 (61) #define _TILE_19 (62) #define _TILE_20 (63) #define _TILE_21 (64) #define _TILE_22 (65) #define _TILE_23 (66) #define _TILE_24 (67) #define _TILE_25 (68) #define _TILE_26 (69) ================================================ FILE: src/cross_lib/display/tiles/default_image_settings.h ================================================ /* --------------------------------------------------------------------------------------- */ // // CROSS CHASE by Fabrizio Caruso // // Fabrizio_Caruso@hotmail.com // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from // the use of this software. // Permission is granted to anyone to use this software for non-commercial applications, // subject to the following restrictions: // 1. The origin of this software must not be misrepresented; you must not // claim that you wrote the original software. If you use this software in // a product, an acknowledgment in the product documentation would be // appreciated but is not required. // 2. Altered source versions must be plainly marked as such, and must not // be misrepresented as being the original software. // 3. This notice may not be removed or altered from any source distribution. /* --------------------------------------------------------------------------------------- */ #ifndef _DEFAULT_GRAPHICS_SETTINGS #define _DEFAULT_GRAPHICS_SETTINGS #if !defined(_DEFAULT_ASCII) #include "tiles/ASCII/char_tiles.h" #endif #if !defined(_TILE_19) #if !defined(__CIDELSA__) && !defined(__CREATIVISION__) #define _TILE_19 '*' #else #define _TILE_19 'H' #endif #endif #if !defined(_TILE_20) #if !defined(__CIDELSA__) && !defined(__CREATIVISION__) #define _TILE_20 '*' #else #define _TILE_20 'H' #endif #endif #if !defined(_TILE_21) #if !defined(__CIDELSA__) && !defined(__CREATIVISION__) #define _TILE_21 '*' #else #define _TILE_21 'H' #endif #endif #if !defined(_TILE_22) #if !defined(__CIDELSA__) && !defined(__CREATIVISION__) #define _TILE_22 '*' #else #define _TILE_22 'H' #endif #endif #if !defined(_TILE_23) #if !defined(__CIDELSA__) && !defined(__CREATIVISION__) #define _TILE_23 '*' #else #define _TILE_23 'H' #endif #endif #if !defined(_TILE_24) #if !defined(__CIDELSA__) && !defined(__CREATIVISION__) #define _TILE_24 'W' #else #define _TILE_24 'W' #endif #endif #if !defined(_TILE_1) #if !defined(__CIDELSA__) && !defined(__CREATIVISION__) #define _TILE_1 '*' #else #define _TILE_1 'H' #endif #endif #if !defined(_TILE_3) #if !defined(__CIDELSA__) && !defined(__CREATIVISION__) #define _TILE_3 '*' #else #define _TILE_3 'H' #endif #endif #if !defined(_TILE_2) #if !defined(__CIDELSA__) && !defined(__CREATIVISION__) #define _TILE_2 '*' #else #define _TILE_2 'H' #endif #endif #if !defined(_TILE_0) #if !defined(__CIDELSA__) && !defined(__CREATIVISION__) #define _TILE_0 '*' #else #define _TILE_0 'H' #endif #endif // RED #if !defined(_TILE_5) #if defined(__ZX81__) || defined(__ZX80__) #define _TILE_5 'x' #else #define _TILE_5 'X' #endif #endif // WHITE #if !defined(_TILE_4) #if defined(__LCC1802__) || defined(__SV8000__) || defined(__CIDELSA__) || defined(__MC10__) #define _TILE_4 'O' #elif defined(__CREATIVISION__) #define _TILE_4 'Q' #else #define _TILE_4 'o' #endif #endif #if !defined(_TILE_6) #if defined(__ALPHATRO__) #define _TILE_6 'm' #elif defined(__CIDELSA__) || defined(__CREATIVISION__) #define _TILE_6 'M' #else #define _TILE_6 '#' #endif #endif // BLUE #if !defined(_TILE_9) #if defined(__ZX80__) || defined(__CIDELSA__) || defined(__CREATIVISION__) #define _TILE_9 'G' #else #define _TILE_9 '!' #endif #endif // YELLOW #if !defined(_TILE_7) #if !defined(__CIDELSA__) && !defined(__CREATIVISION__) #define _TILE_7 '+' #elif defined(__ZX81__) || defined(__ZX80__) #define _TILE_7 'a' #else #define _TILE_7 'A' #endif #endif #if !defined(_TILE_25) #if !defined(__CREATIVISION__) #define _TILE_25 '$' #else #define _TILE_25 'M' #endif #endif // GREEN #if !defined(_TILE_8) #if defined(__ZX81__) || defined(__ZX80__) #define _TILE_8 's' #else #define _TILE_8 'S' #endif #endif #if !defined(_TILE_17) #if defined(__ZX81__) || defined(__ZX80__) #define _TILE_17 'f' #else #define _TILE_17 'F' #endif #endif #if !defined(_TILE_18) #if defined(__ZX81__) || defined(__ZX80__) #define _TILE_18 'h' #else #define _TILE_18 'H' #endif #endif // CYAN #if !defined(_TILE_10) #if defined(__ZX81__) || defined(__ZX80__) #define _TILE_10 'v' #else #define _TILE_10 'V' #endif #endif #if !defined(_TILE_11) #if defined(__CIDELSA__) || defined(__CREATIVISION__) #define _TILE_11 'O' #else #define _TILE_11 '.' #endif #endif #if !defined(_TILE_14) #if !defined(__CREATIVISION__) #define _TILE_14 '>' #else #define _TILE_14 'N' #endif #endif #if !defined(_TILE_15) #if !defined(__CREATIVISION__) #define _TILE_15 '<' #else #define _TILE_15 'N' #endif #endif #if !defined(_TILE_16) #if defined(__ZX80__) || defined(__ZX81__) #define _TILE_16 'i' #elif defined(__CIDELSA__) || defined(__CREATIVISION__) || defined(__MC10__) #define _TILE_16 'I' #else #define _TILE_16 ('^') #endif #endif #if !defined(_TILE_12) #if defined(__C128_Z80__) || defined(__GAL__) || defined(__VZ__) || defined(__COCO__) || defined(__DRAGON__) #define _TILE_12 'i' #elif defined(__APPLE2__) || defined(__ATARI_LYNX__) || defined(__ABC80__) || defined(__OSIC1P__) || defined(__TMC600__) \ || defined(__MIKRO80__) || defined(__BIC__) || defined(__SUPER80__) || defined(__CIDELSA__) || defined(__CREATIVISION__) \ || defined(__ZX80__) || defined(__ZX81__) || defined(__MC10__) #define _TILE_12 'I' #else #define _TILE_12 ('|') #endif #endif #if !defined(_TILE_13) #if defined(__CIDELSA__) #define _TILE_13 'I' #elif defined(__CREATIVISION__) #define _TILE_13 'N' #else #define _TILE_13 '-' #endif #endif #if !defined(_TILE_26) #if defined(__C128_Z80__) || defined(__GAL__) || defined(__VZ__) || defined(__COCO__) || defined(__DRAGON__) #define _TILE_26 't' #else #define _TILE_26 'T' #endif #endif #endif // _DEFAULT_GRAPHICS_SETTINGS ================================================ FILE: src/cross_lib/display/tiles/default_quad_graphics_settings.h ================================================ /* --------------------------------------------------------------------------------------- */ // // CROSS CHASE by Fabrizio Caruso // // Fabrizio_Caruso@hotmail.com // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from // the use of this software. // Permission is granted to anyone to use this software for non-commercial applications, // subject to the following restrictions: // 1. The origin of this software must not be misrepresented; you must not // claim that you wrote the original software. If you use this software in // a product, an acknowledgment in the product documentation would be // appreciated but is not required. // 2. Altered source versions must be plainly marked as such, and must not // be misrepresented as being the original software. // 3. This notice may not be removed or altered from any source distribution. /* --------------------------------------------------------------------------------------- */ #ifndef _DEFAULT_QUAD_GRAPHICS_SETTINGS #define _DEFAULT_QUAD_GRAPHICS_SETTINGS #if !defined(_DEFAULT_QUAD_ASCII) #include "tiles/ASCII/quad_char_tiles.h" #endif #endif // _DEFAULT_QUAD_GRAPHICS_SETTINGS ================================================ FILE: src/cross_lib/display/tiles/micro_color_settings.h ================================================ /* --------------------------------------------------------------------------------------- */ // // CROSS CHASE by Fabrizio Caruso // // Fabrizio_Caruso@hotmail.com // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from // the use of this software. // Permission is granted to anyone to use this software for non-commercial applications, // subject to the following restrictions: // 1. The origin of this software must not be misrepresented; you must not // claim that you wrote the original software. If you use this software in // a product, an acknowledgment in the product documentation would be // appreciated but is not required. // 2. Altered source versions must be plainly marked as such, and must not // be misrepresented as being the original software. // 3. This notice may not be removed or altered from any source distribution. /* --------------------------------------------------------------------------------------- */ #ifndef _MICRO_COLOR_GRAPHICS_SETTINGS #define _MICRO_COLOR_GRAPHICS_SETTINGS #define PALETTE_SWITCH 0 #define _TILE_0 0 #define _TILE_1 27 #define _TILE_3 29 #define _TILE_2 28 // RED #define _TILE_5 (31) // WHITE #define _TILE_4 (30) //('p') #define _TILE_6 (33) // BLUE #define _TILE_9 46 // YELLOW #define _TILE_7 (34) #define _TILE_25 ('$') // GREEN #define _TILE_8 35 #define _TILE_17 44 #define _TILE_18 (45) // CYAN #define _TILE_10 37 #define _TILE_11 (38) #define _TILE_14 (41) #define _TILE_15 (42) #define _TILE_16 (43) #define _TILE_12 (39) #define _TILE_13 (40) #define _TILE_19 (47) #define _TILE_20 (58) #define _TILE_21 (59) #define _TILE_22 (60) #define _TILE_23 (61) #define _TILE_24 (62) #define _TILE_26 (63) #endif // _MICRO_COLOR_GRAPHICS_SETTINGS ================================================ FILE: src/cross_lib/display/tiles/micro_settings.h ================================================ /* --------------------------------------------------------------------------------------- */ // // CROSS CHASE by Fabrizio Caruso // // Fabrizio_Caruso@hotmail.com // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from // the use of this software. // Permission is granted to anyone to use this software for non-commercial applications, // subject to the following restrictions: // 1. The origin of this software must not be misrepresented; you must not // claim that you wrote the original software. If you use this software in // a product, an acknowledgment in the product documentation would be // appreciated but is not required. // 2. Altered source versions must be plainly marked as such, and must not // be misrepresented as being the original software. // 3. This notice may not be removed or altered from any source distribution. /* --------------------------------------------------------------------------------------- */ #ifndef _MICRO_GRAPHICS_SETTINGS #define _MICRO_GRAPHICS_SETTINGS #define PALETTE_SWITCH 128 #define _TILE_0 0 #define _TILE_1 27 #define _TILE_3 29 #define _TILE_2 28 // RED #define _TILE_5 (31+PALETTE_SWITCH) // WHITE #define _TILE_4 (30+PALETTE_SWITCH) //('p'+PALETTE_SWITCH) #define _TILE_6 (33+PALETTE_SWITCH) // BLUE #define _TILE_9 46 // YELLOW #define _TILE_7 (34+PALETTE_SWITCH) #define _TILE_25 ('$'+PALETTE_SWITCH) // GREEN #define _TILE_8 35 #define _TILE_17 44 #define _TILE_18 (45+PALETTE_SWITCH) // CYAN #define _TILE_10 37 #define _TILE_11 (38+PALETTE_SWITCH) #define _TILE_14 (41+PALETTE_SWITCH) #define _TILE_15 (42+PALETTE_SWITCH) #define _TILE_16 (43+PALETTE_SWITCH) #define _TILE_12 (39+PALETTE_SWITCH) #define _TILE_13 (40+PALETTE_SWITCH) #define _TILE_19 (47) #define _TILE_20 (58) #define _TILE_21 (59) #define _TILE_22 (60) #define _TILE_23 (61) #define _TILE_24 (62) #define _TILE_26 (63) #endif // _MICRO_GRAPHICS_SETTINGS ================================================ FILE: src/cross_lib/display/tiles/msx_redefined_chars_settings.h ================================================ #ifndef _MSX_REDEFINED_CHARS_SETTINGS #define _MSX_REDEFINED_CHARS_SETTINGS // Still available: // 0x80-.... ? #if !defined(__ALTERNATIVE_COLOR) // CYAN #define _TILE_0 0x3B #define _TILE_1 0x3C #define _TILE_2 0x3D #define _TILE_3 0x3E #define _TILE_9 0x3F #define _TILE_11 0x09 #define _TILE_17 0x3A // YELLOW #define _TILE_7 0x27 #define _TILE_12 0x26 #define _TILE_13 0x22 #define _TILE_25 0x24 #define _TILE_10 0x23 // GREEN #define _TILE_8 0x2C // WHITE #define _TILE_4 0x7E #define _TILE_14 ((uint8_t)0x7B) #define _TILE_15 ((uint8_t)0x7D) #define _TILE_16 ((uint8_t)0x60) #define _TILE_19 0x80 #define _TILE_20 0x81 #define _TILE_21 0x82 #define _TILE_22 0x83 #define _TILE_23 0x84 #define _TILE_24 0x85 // RED #define _TILE_5 0xEE #define _TILE_6 0xEB #define _TILE_18 0xEC // TODO: Check this #define _TILE_26 0x86 #else // CYAN #define _TILE_2 0xEB #define _TILE_3 0xEC #define _TILE_11 0xED #define _TILE_15 0xEE #define _TILE_17 0xEF #define _TILE_18 0xEA #define _TILE_14 0xF0 #define _TILE_16 0xF1 // YELLOW #define _TILE_7 0x27 #define _TILE_12 0x26 #define _TILE_13 0x22 #define _TILE_10 0x23 // GREEN #define _TILE_0 0x2C #define _TILE_1 0x2D #define _TILE_4 0x2E #define _TILE_9 0x2F // RED #define _TILE_5 0x86 #define _TILE_6 0x87 // WHITE #define _TILE_8 0xA9 #define _TILE_19 0x80 #define _TILE_20 0x81 #define _TILE_21 0x82 #define _TILE_22 0x83 #define _TILE_23 0x84 #define _TILE_24 0x85 // TODO: check this #define _TILE_26 0xB0 #endif #endif // _MSX_REDEFINED_CHARS_SETTINGS ================================================ FILE: src/cross_lib/display/tiles/nes_conio_settings.h ================================================ /* --------------------------------------------------------------------------------------- */ // // CROSS CHASE by Fabrizio Caruso // // Fabrizio_Caruso@hotmail.com // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from // the use of this software. // Permission is granted to anyone to use this software for non-commercial applications, // subject to the following restrictions: // 1. The origin of this software must not be misrepresented; you must not // claim that you wrote the original software. If you use this software in // a product, an acknowledgment in the product documentation would be // appreciated but is not required. // 2. Altered source versions must be plainly marked as such, and must not // be misrepresented as being the original software. // 3. This notice may not be removed or altered from any source distribution. /* --------------------------------------------------------------------------------------- */ #include #include #include #include #include #include #include "display_macros.h" // #define _TILE_3 10 // #define _TILE_4 13 #define _TILE_3 43 #define _TILE_4 153 #define _TILE_8 25 #define _TILE_5 16 #define _TILE_9 28 #define _TILE_0 1 #define _TILE_1 4 #define _TILE_2 7 #define _TILE_11 37 #define _TILE_16 94 #define _TILE_25 147 #define _TILE_14 61 #define _TILE_15 91 #define _TILE_10 33 #define _TILE_7 22 #define _TILE_6 19 #define _TILE_18 126 #define _TILE_17 123 #define _TILE_12 40 #define _TILE_13 58 #define _TILE_19 129 #define _TILE_20 132 #define _TILE_21 135 #define _TILE_22 138 #define _TILE_23 141 #define _TILE_24 144 #define _TILE_26 150 ================================================ FILE: src/cross_lib/display/tiles/nes_settings.h ================================================ /* --------------------------------------------------------------------------------------- */ // // CROSS CHASE by Fabrizio Caruso // // Fabrizio_Caruso@hotmail.com // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from // the use of this software. // Permission is granted to anyone to use this software for non-commercial applications, // subject to the following restrictions: // 1. The origin of this software must not be misrepresented; you must not // claim that you wrote the original software. If you use this software in // a product, an acknowledgment in the product documentation would be // appreciated but is not required. // 2. Altered source versions must be plainly marked as such, and must not // be misrepresented as being the original software. // 3. This notice may not be removed or altered from any source distribution. /* --------------------------------------------------------------------------------------- */ #include #include #include #include #include #include #include "display_macros.h" #define _TILE_8 248 #define _TILE_4 35 #define _TILE_5 251 #define _TILE_9 246 #define _TILE_0 252 #define _TILE_1 255 #define _TILE_2 254 #define _TILE_3 253 #define _TILE_11 242 #define _TILE_16 239 #define _TILE_25 '$' #define _TILE_14 241 #define _TILE_15 240 #define _TILE_10 238 #define _TILE_7 250 #define _TILE_6 247 #define _TILE_0_B _TILE_0 #define _TILE_7_B _TILE_7 #define _TILE_18 245 #define _TILE_17 243 #define _TILE_12 249 #define _TILE_13 244 #define _TILE_4_B _TILE_4 #define _TILE_5_B 'X' #define _TILE_19 1 #define _TILE_20 2 #define _TILE_21 3 #define _TILE_22 4 #define _TILE_23 5 #define _TILE_24 6 ================================================ FILE: src/cross_lib/display/tiles/pce_settings.h ================================================ /* --------------------------------------------------------------------------------------- */ // // CROSS CHASE by Fabrizio Caruso // // Fabrizio_Caruso@hotmail.com // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from // the use of this software. // Permission is granted to anyone to use this software for non-commercial applications, // subject to the following restrictions: // 1. The origin of this software must not be misrepresented; you must not // claim that you wrote the original software. If you use this software in // a product, an acknowledgment in the product documentation would be // appreciated but is not required. // 2. Altered source versions must be plainly marked as such, and must not // be misrepresented as being the original software. // 3. This notice may not be removed or altered from any source distribution. /* --------------------------------------------------------------------------------------- */ #ifndef _PCE_GRAPHICS_SETTINGS #define _PCE_GRAPHICS_SETTINGS #define _TILE_0 3 #define _TILE_1 4 #define _TILE_2 5 #define _TILE_3 6 // RED #define _TILE_5 7 // WHITE #define _TILE_4 9 #define _TILE_6 21 // CYAN #define _TILE_9 14 // YELLOW #define _TILE_7 8 #define _TILE_25 28 // GREEN #define _TILE_8 11 #define _TILE_17 12 // 13 #define _TILE_18 15 // CYAN #define _TILE_10 17 #define _TILE_11 16 #define _TILE_14 19 #define _TILE_15 20 #define _TILE_16 18 #define _TILE_12 2 #define _TILE_13 1 #define _TILE_19 22 #define _TILE_20 23 #define _TILE_21 24 #define _TILE_22 25 #define _TILE_23 26 #define _TILE_24 27 #define _TILE_26 0 #endif // _PCE_GRAPHICS_SETTINGS ================================================ FILE: src/cross_lib/display/tiles/petscii_memory_mapped_settings.h ================================================ /* --------------------------------------------------------------------------------------- */ // // CROSS CHASE by Fabrizio Caruso // // Fabrizio_Caruso@hotmail.com // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from // the use of this software. // Permission is granted to anyone to use this software for non-commercial applications, // subject to the following restrictions: // 1. The origin of this software must not be misrepresented; you must not // claim that you wrote the original software. If you use this software in // a product, an acknowledgment in the product documentation would be // appreciated but is not required. // 2. Altered source versions must be plainly marked as such, and must not // be misrepresented as being the original software. // 3. This notice may not be removed or altered from any source distribution. /* --------------------------------------------------------------------------------------- */ #ifndef _PETSCII_MEMORY_MAPPED_SETTINGS #define _PETSCII_MEMORY_MAPPED_SETTINGS #include #include #include #include #include #define _TILE_0 (0xB2-0x40) //0x3B #define _TILE_1 (0xB1-0x40) //0x3C #define _TILE_2 (0xAB-0x40) //0x3D #define _TILE_3 (0xB3-0x40) //0x3E #define _TILE_5 '^' #define _TILE_4 'o' #define _TILE_6 '#' #define _TILE_9 '!' #define _TILE_7 '+' #define _TILE_25 '$' #define _TILE_8 'S' #define _TILE_17 'F' #define _TILE_18 'H' #define _TILE_10 'V' #define _TILE_11 '.' #define _TILE_14 '>' #define _TILE_15 '<' #define _TILE_16 ('^'-64) #define _TILE_12 ('|'-128) #define _TILE_13 '-' #endif // _PETSCII_MEMORY_MAPPED_SETTINGS ================================================ FILE: src/cross_lib/display/tiles/pv1000_settings.h ================================================ #ifndef __PV1000_SETTINGS_H #define __PV1000_SETTINGS_H #define _TILE_0 33 #define _TILE_1 38 #define _TILE_2 43 #define _TILE_3 58 #define _TILE_4 91 #define _TILE_5 96 #define _TILE_6 101 #define _TILE_7 106 #define _TILE_8 111 #define _TILE_9 116 #define _TILE_10 121 #define _TILE_11 126 #define _TILE_12 131 #define _TILE_13 136 #define _TILE_14 141 #define _TILE_15 146 #define _TILE_16 151 #define _TILE_17 156 #define _TILE_18 161 #define _TILE_19 166 #define _TILE_20 171 #define _TILE_21 176 #define _TILE_22 181 #define _TILE_23 186 #define _TILE_24 191 #define _TILE_25 196 #define _TILE_26 201 #endif // __PV1000_SETTINGS_H ================================================ FILE: src/cross_lib/display/tiles/supervision_settings.h ================================================ #define _TILE_4 (0x76-0x20-13-7) #define _TILE_0 '\'' #define _TILE_1 (0x76 - 6 - 0x20-12-7) #define _TILE_2 (0x76 - 2 - 0x20-13-7) #define _TILE_3 (0x76 - 4 -0x20-13-7) #define _TILE_8 44 #define _TILE_9 45 #define _TILE_11 46 #define _TILE_12 47 #define _TILE_16 ('^'-0x40) #define _TILE_25 '$' #define _TILE_14 ('>'-3) #define _TILE_15 ('<'-2) #define _TILE_10 (0x73 - 0x20-13-7) #define _TILE_7 33 #define _TILE_5 34 #define _TILE_17 35 #define _TILE_6 (_TILE_16+1) #define _TILE_13 (0xC3-128-7) #define _TILE_18 (0x7A-0x20-13-7-5) #define _TILE_19 42 #define _TILE_20 43 #define _TILE_21 37 #define _TILE_22 38 #define _TILE_23 40 #define _TILE_24 41 #define _TILE_26 0 ================================================ FILE: src/cross_lib/display/tiles/tgi_gfx_settings.h ================================================ /* --------------------------------------------------------------------------------------- */ // // CROSS CHASE by Fabrizio Caruso // // Fabrizio_Caruso@hotmail.com // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from // the use of this software. // Permission is granted to anyone to use this software for non-commercial applications, // subject to the following restrictions: // 1. The origin of this software must not be misrepresented; you must not // claim that you wrote the original software. If you use this software in // a product, an acknowledgment in the product documentation would be // appreciated but is not required. // 2. Altered source versions must be plainly marked as such, and must not // be misrepresented as being the original software. // 3. This notice may not be removed or altered from any source distribution. /* --------------------------------------------------------------------------------------- */ #ifndef _LYNX_TGI_GRAPHICS_SETTINGS #define _LYNX_TGI_GRAPHICS_SETTINGS #define _TILE_0 0 #define _TILE_1 1 #define _TILE_2 2 #define _TILE_3 3 #define _TILE_4 4 #define _TILE_5 5 #define _TILE_6 6 #define _TILE_7 7 #define _TILE_8 8 #define _TILE_9 9 #define _TILE_10 10 #define _TILE_11 11 #define _TILE_12 12 #define _TILE_13 13 #define _TILE_14 14 #define _TILE_15 15 #define _TILE_16 16 #define _TILE_17 17 #define _TILE_18 18 #define _TILE_19 19 #define _TILE_20 20 #define _TILE_21 21 #define _TILE_22 22 #define _TILE_23 23 #define _TILE_24 24 #define _TILE_25 25 #define _TILE_26 26 #endif // _LYNX_TGI_GRAPHICS_SETTINGS ================================================ FILE: src/cross_lib/display/tiles/udg_settings.h ================================================ /* --------------------------------------------------------------------------------------- */ // // CROSS CHASE by Fabrizio Caruso // // Fabrizio_Caruso@hotmail.com // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from // the use of this software. // Permission is granted to anyone to use this software for non-commercial applications, // subject to the following restrictions: // 1. The origin of this software must not be misrepresented; you must not // claim that you wrote the original software. If you use this software in // a product, an acknowledgment in the product documentation would be // appreciated but is not required. // 2. Altered source versions must be plainly marked as such, and must not // be misrepresented as being the original software. // 3. This notice may not be removed or altered from any source distribution. /* --------------------------------------------------------------------------------------- */ #ifndef _UDG_SETTINGS #define _UDG_SETTINGS #define _TILE_0 (0x2A - _Z88DK_SPRITE_OFFSET) #define _TILE_1 (0x3C - _Z88DK_SPRITE_OFFSET) #define _TILE_2 (0x3D - _Z88DK_SPRITE_OFFSET) #define _TILE_3 (0x3E - _Z88DK_SPRITE_OFFSET) #define _TILE_9 (0x3F-_Z88DK_SPRITE_OFFSET) // YELLOW #define _TILE_7 (0x27 - _Z88DK_SPRITE_OFFSET) #define _TILE_12 (0x26 -_Z88DK_SPRITE_OFFSET) #define _TILE_13 (0x2B -_Z88DK_SPRITE_OFFSET) #define _TILE_25 (0x24 - _Z88DK_SPRITE_OFFSET) // GREEN #define _TILE_8 (0x2C - _Z88DK_SPRITE_OFFSET) #define _TILE_17 (0x25 - _Z88DK_SPRITE_OFFSET) #define _TILE_18 (0x3B - _Z88DK_SPRITE_OFFSET) // RED #define _TILE_5 (0x29 - _Z88DK_SPRITE_OFFSET) // CYAN #define _TILE_10 (0x21 - _Z88DK_SPRITE_OFFSET) #define _TILE_11 (0x23 - _Z88DK_SPRITE_OFFSET) // WHITE #define _TILE_4 (0x28 - _Z88DK_SPRITE_OFFSET) #if defined(__MO5__)||defined(__TO7__)|| defined(__COCO3__) || defined(__COCO__)||defined(__DRAGON__) #define _TILE_6 (0x3A - _Z88DK_SPRITE_OFFSET) #else #define _TILE_6 (0x5B - _Z88DK_SPRITE_OFFSET) #endif #define _TILE_14 (0x22 - _Z88DK_SPRITE_OFFSET) #define _TILE_15 (0x2E - _Z88DK_SPRITE_OFFSET ) #define _TILE_16 (0x2F - _Z88DK_SPRITE_OFFSET) // 0x50 -> 0 #if defined(__MO5__)||defined(__TO7__) #define _TILE_19 49 #define _TILE_20 50 #define _TILE_21 51 #define _TILE_22 52 #define _TILE_23 53 #define _TILE_24 54 #define _TILE_26 (_TILE_8+1) #elif defined(__COCO3__) || defined(__COCO__)||defined(__DRAGON__) #define _TILE_19 (_TILE_16+2) #define _TILE_20 (_TILE_16+3) #define _TILE_21 (_TILE_16+4) #define _TILE_22 (_TILE_16+5) #define _TILE_23 (_TILE_16+6) #define _TILE_24 (_TILE_16+7) #define _TILE_26 (_TILE_8+1) #else #define _TILE_19 (0x3A - _Z88DK_SPRITE_OFFSET) #define _TILE_20 (0x40 - _Z88DK_SPRITE_OFFSET) #define _TILE_21 (0x5C - _Z88DK_SPRITE_OFFSET) #define _TILE_22 (0x5D - _Z88DK_SPRITE_OFFSET) #define _TILE_23 (0x5E - _Z88DK_SPRITE_OFFSET) #define _TILE_24 (0x5F - _Z88DK_SPRITE_OFFSET) #define _TILE_26 (_TILE_8+1) #endif #endif // _UDG_SETTINGS ================================================ FILE: src/cross_lib/display/tiles/vdp_mode1_settings.h ================================================ #if defined(__TI99__) #define _BASE 96 #else #define _BASE 32 #endif #define _TILE_0 (_BASE+27) #define _TILE_1 (_BASE+1) #define _TILE_2 (_BASE+2) #define _TILE_3 (_BASE+3) #define _TILE_25 (_BASE+4) #define _TILE_4 (_BASE+5) #define _TILE_5 (_BASE+6) #define _TILE_6 (_BASE+7) #define _TILE_7 (_BASE+8) #define _TILE_8 (_BASE+9) #define _TILE_9 (_BASE+10) #define _TILE_10 (_BASE+11) #define _TILE_11 (_BASE+12) #define _TILE_12 (_BASE+14) #define _TILE_13 (_BASE+15) #define _TILE_14 (_BASE+16) #define _TILE_15 (_BASE+17) #define _TILE_16 (_BASE+18) #define _TILE_17 (_BASE+19) #define _TILE_18 (_BASE+20) #define _TILE_19 (_BASE+21) #define _TILE_20 (_BASE+22) #define _TILE_21 (_BASE+23) #define _TILE_22 (_BASE+24) #define _TILE_23 (_BASE+25) #define _TILE_24 (_BASE+26) #define _TILE_26 (_BASE+13) ================================================ FILE: src/cross_lib/display/tiles/vic20_exp_16k_settings.h ================================================ #define _TILE_0 '\'' #define _TILE_1 ('>'+1-2) #define _TILE_2 (0x74-13-7) #define _TILE_3 ('>'+1-2+1) #define _TILE_8 44 #define _TILE_9 45 #define _TILE_11 46 #define _TILE_12 47 #define _TILE_7 33 #define _TILE_5 34 #define _TILE_17 35 #define _TILE_15 ('<'-2) #define _TILE_13 ('>'+5-7) #define _TILE_25 '$' #define _TILE_10 ('>'+1-2+1+1) #define _TILE_4 (0x76-13-7) #define _TILE_6 ('^'+1) #define _TILE_14 ('>'-3) #define _TILE_16 '^' #define _TILE_18 ((0x7A-13-7)-5) #define _TILE_19 42 #define _TILE_20 43 #define _TILE_21 37 #define _TILE_22 38 #define _TILE_23 40 #define _TILE_24 41 ================================================ FILE: src/cross_lib/display/tiles/vic20_exp_16k_v2_settings.h ================================================ #define _TILE_0 '\'' #define _TILE_1 ('>'+1-2) #define _TILE_2 (0x74-13-7) #define _TILE_3 ('>'+1-2+1) #define _TILE_8 44 #define _TILE_9 45 #define _TILE_11 46 #define _TILE_12 47 #define _TILE_7 33 #define _TILE_5 34 #define _TILE_17 35 #define _TILE_15 ('<'-2) #define _TILE_13 ('>'+5-7) #define _TILE_25 '$' #define _TILE_10 ('>'+1-2+1+1) #define _TILE_4 ('Z'+2) //(0x76-13-7) #define _TILE_6 ('Z'+5) #define _TILE_14 ('>'-3) #define _TILE_16 ('Z'+4) #define _TILE_18 ('Z'+3) #define _TILE_19 42 #define _TILE_20 43 #define _TILE_21 37 #define _TILE_22 38 #define _TILE_23 40 #define _TILE_24 41 #define _TILE_26 ('Z'+1) ================================================ FILE: src/cross_lib/display/tiles/vic20_exp_3k_light_settings.h ================================================ #define _TILE_0 0x00 #define _TILE_1 27 #define _TILE_2 28 #define _TILE_3 29 #define _TILE_4 30 #define _TILE_5 31 #define _TILE_6 33 #define _TILE_7 34 #define _TILE_8 35 #define _TILE_9 36 #define _TILE_10 37 #define _TILE_11 38 #define _TILE_12 39 #define _TILE_13 40 #define _TILE_14 41 #define _TILE_15 42 #define _TILE_16 43 #define _TILE_17 44 #define _TILE_18 45 #define _TILE_19 46 #define _TILE_20 47 #define _TILE_21 58 #define _TILE_22 59 #define _TILE_23 60 #define _TILE_24 61 #define _TILE_25 62 #define _TILE_26 63 ================================================ FILE: src/cross_lib/display/tiles/vic20_exp_3k_settings.h ================================================ #define _TILE_0 0x00 #define _TILE_1 0x0E #define _TILE_2 0x11 #define _TILE_3 0x10 #define _TILE_4 0x1C #define _TILE_5 0x1B // BOGUS TILES //#define _TILE_6 _TILE_4 ================================================ FILE: src/cross_lib/display/tiles/vic20_rom_chars_and_26_tiles_settings.h ================================================ // BLUE #define _TILE_0 0x79 #define _TILE_1 0x6C #define _TILE_2 0x7B #define _TILE_3 0x7A // #define _PLAYER _PLAYER_DOWN #define _TILE_9 0x6D // YELLOW #define _TILE_7 0x77 #define _TILE_12 0x74 #define _TILE_13 0x75 #define _TILE_25 ('$'+128) // GREEN #define _TILE_8 0x6F // RED #define _TILE_5 0x78 // CYAN #define _TILE_10 0x6E #define _TILE_11 0x73 // WHITE #define _TILE_4 0x76 #define _TILE_6 0x7F #define _TILE_14 0x71 #define _TILE_15 0x7C #define _TILE_16 0x70 #define _TILE_17 0x7D #define _TILE_18 0x7E #define _TILE_19 0x66 #define _TILE_20 0x67 #define _TILE_21 0x68 #define _TILE_22 0x69 #define _TILE_23 0x6A #define _TILE_24 0x6B ================================================ FILE: src/cross_lib/display/tiles/vic20_rom_chars_and_27_tiles_settings.h ================================================ // BLUE #define _TILE_0 0x79 #define _TILE_1 0x6C #define _TILE_2 0x7B #define _TILE_3 0x7A // #define _PLAYER _PLAYER_DOWN #define _TILE_9 0x6D // YELLOW #define _TILE_7 0x77 #define _TILE_12 0x74 #define _TILE_13 0x75 // GREEN #define _TILE_8 0x6F // RED #define _TILE_5 0x78 // CYAN #define _TILE_10 0x6E #define _TILE_11 0x73 // WHITE #define _TILE_4 0x76 #define _TILE_6 0x7F #define _TILE_14 0x71 #define _TILE_15 0x7C #define _TILE_16 0x70 #define _TILE_17 0x7D #define _TILE_18 0x7E #define _TILE_19 0x64 #define _TILE_20 0x65 #define _TILE_21 0x66 #define _TILE_22 0x67 #define _TILE_23 0x68 #define _TILE_24 0x69 #define _TILE_25 0x6A #define _TILE_26 0x6B ================================================ FILE: src/cross_lib/display/tiles/vic20_rom_chars_and_6_tiles_settings.h ================================================ // BLUE #define _TILE_0 61 #define _TILE_1 60 #define _TILE_2 63 #define _TILE_3 62 #define _TILE_4 58 #define _TILE_5 59 #define _TILE_6 61 #define _TILE_7 60 #define _TILE_8 63 #define _TILE_9 62 #define _TILE_10 58 #define _TILE_11 59 #define _TILE_12 61 #define _TILE_13 60 #define _TILE_14 63 #define _TILE_15 62 #define _TILE_16 58 #define _TILE_17 59 #define _TILE_18 61 #define _TILE_19 60 #define _TILE_20 63 #define _TILE_21 62 #define _TILE_22 58 #define _TILE_23 59 #define _TILE_24 61 #define _TILE_25 60 #define _TILE_26 63 ================================================ FILE: src/cross_lib/display/tiles.h ================================================ #ifndef _TILES_H #define _TILES_H #include "cross_lib.h" # if defined(__C64__) && defined(__MEMORY_MAPPED_GRAPHICS) #include "c64_memory_mapped_settings.h" #elif (defined(__AGAT__) && defined(__BIT_MAPPED_GRAPHICS)) || defined(__VGA_GRAPHICS) #include "agat_settings.h" #elif (defined(__CX16__) && !defined(_XL_NO_UDG)) // #include "agat_settings.h" #include "cx16_settings.h" #elif defined(__PV1000__) && defined(__PV1000_GRAPHICS) #include "pv1000_settings.h" #elif defined(__C64__) && defined(__CONIO_GRAPHICS) #include "c64_conio_settings.h" #elif defined(__C128__) && defined(__80COL_UDG) // #include "c264_redefined_chars_settings.h" 23 24 #include "c128_settings.h" #elif defined(__ATARI7800_COLOR_GRAPHICS) #include "atari7800_settings.h" #elif defined(__BBC_GRAPHICS) && !defined(_XL_NO_UDG) #include "bbc_settings.h" #elif defined(__QUAD_MEMORY_MAPPED_GRAPHICS) #include "default_quad_graphics_settings.h" #elif defined(__CREATIVISION__) && defined(__VDP_MODE1_GRAPHICS) && !defined(_XL_NO_UDG) #include "vdp_mode1_settings.h" #elif defined(__TI99__) && !defined(_XL_NO_UDG) #include "vdp_mode1_settings.h" #elif defined(__CREATIVISION__) && !defined(_XL_NO_UDG) #include "creativision_settings.h" #elif defined(__VIC20__) && defined(__VIC20_EXP_3K) && defined(_XL_NO_UDG) #include "vic20_exp_3k_settings.h" #elif defined(__VIC20__) && defined(__VIC20_EXP_3K) && !defined(_XL_NO_UDG) #include "vic20_exp_3k_light_settings.h" #elif defined(__VIC20__) && defined(__MEMORY_MAPPED_GRAPHICS) && (defined(__VIC20_EXP_8K) || defined(__VIC20_EXP_3K)) && !defined(_XL_NO_UDG) #include "vic20_rom_chars_and_27_tiles_settings.h" #elif defined(__VIC20__) && defined(__VIC20_UNEXPANDED) && !defined(_XL_NO_UDG) #include "vic20_rom_chars_and_6_tiles_settings.h" #elif defined(__VIC20__) && defined(__CONIO_GRAPHICS) #include "vic20_exp_16k_v2_settings.h" #elif defined(__C16__) && !defined(_XL_NO_UDG) && !defined(__MEMORY_MAPPED_GRAPHICS) #include "c264_redefined_chars_settings.h" #elif defined(__C16__) && !defined(_XL_NO_UDG) #include "c264_link_time_redefined_chars_settings.h" // #elif defined(__CBM__) && defined(__MEMORY_MAPPED_GRAPHICS) // e.g., Bomber Vic 20 unexpanded no gfx // #include "petscii_memory_mapped_settings.h" #elif defined(__MO5__) || defined(__TO7__) || ( (defined(__COCO__) || defined(__DRAGON__)) && (defined(__BIT_MAPPED_GRAPHICS) || defined(__BIT_MAPPED_4_GRAPHICS))) #include "udg_settings.h" #elif (defined(__COCO__) || defined(__DRAGON__)) && defined(__MEMORY_MAPPED_GRAPHICS) #include "cmoc_memory_mapped_settings.h" #elif defined(__COCO3__) #include "udg_settings.h" #elif (defined(__ATARI__) && defined(__ANTIC_MODE6_GRAPHICS)) #include "atari_mode1_redefined_chars_settings.h" #elif defined(__ATARI5200__) #include "atari_mode1_redefined_chars_settings.h" #elif defined(__ATMOS__) && !defined(NO_UDG) #include "atmos_redefined_characters_settings.h" #elif defined(__Z88DK_SPRITES_GRAPHICS) #include "udg_settings.h" #elif defined(__MSX__) && defined(__MEMORY_MAPPED_GRAPHICS) #include "msx_redefined_chars_settings.h" #elif defined(__CPCRSLIB_GRAPHICS) #include "cpc_cpcrslib_settings.h" #elif defined(__REX__) #include "cpc_cpcrslib_settings.h" #elif defined(__SUPERVISION__) #include "supervision_settings.h" #elif defined(__NES__) && defined(__CONIO_GRAPHICS) #include "nes_settings.h" #elif defined(__NES__) && defined(__NES_CONIO_GRAPHICS) #include "nes_conio_settings.h" #elif defined(__CIDELSA__) && defined(_XL_NO_UDG) #include "cidelsa_no_gfx.h" #elif defined(__COMX_COLOR_GRAPHICS) && !defined(__MICRO__) #include "comx_color_settings.h" #elif defined(__COMX__) || defined(__PECOM__) || ((defined(__CIDELSA__) && !defined(_XL_NO_UDG))) #include "comx_settings.h" #elif defined(__MICRO__) // #include "micro_settings.h" #elif defined(__ATARI_LYNX__) && defined(__LYNX_TGI_GRAPHICS) #include "tgi_gfx_settings.h" // #elif (defined(__SCCZ80) || defined(__SDCC)) && !defined(_XL_NO_UDG) #elif defined(__Z88DK__) && !defined(_XL_NO_UDG) #include "udg_settings.h" #elif defined(__PCE__) || ( defined(__GAMATE__) && !defined(_XL_NO_UDG)) #include "pce_settings.h" #elif (defined(__APPLE2__)||defined(__APPLE2ENH__))&&defined(__APPLE2_HGR_GRAPHICS) #include "apple2_hgr_settings.h" #elif defined(__TERMINAL__) #include "apple2_hgr_settings.h" #else #include "default_image_settings.h" #endif #endif // _TILES_H ================================================ FILE: src/cross_lib/include/standard_libs.h ================================================ #ifndef _STANDARD_LIBS_H #define _STANDARD_LIBS_H #if defined(__COCO__) || defined(__DRAGON__) || (defined(__CMOC__) && !defined(__WINCMOC__)) #include #include #elif defined(__MC10__) #include #include int rand(void); #elif defined(__BBC__) && defined(__NO_GRAPHICS) #include #include #elif defined(__LCC1802__) #include #elif defined(__TI99__) typedef unsigned char uint8_t; typedef unsigned int uint16_t; #include #elif defined(__NO_GRAPHICS) #if !defined(_STDINT) #define _STDINT typedef unsigned char uint8_t; typedef unsigned int uint16_t; #endif // _STDINT #else #include #include #include #if !defined(__XTC68__) && !defined(__OLIVETTI_M20__) #include #else #if !defined(_STDINT) #define _STDINT typedef unsigned char uint8_t; typedef unsigned short uint16_t; #endif // _STDINT #endif #endif #if defined(__ALT_RAND) && !defined(__LCC1802__) int rand(void); #endif #endif // _STANDARD_LIBS_H ================================================ FILE: src/cross_lib/input/input_macros.c ================================================ /* --------------------------------------------------------------------------------------- */ // // CROSS CHASE by Fabrizio Caruso // // Fabrizio_Caruso@hotmail.com // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from // the use of this software. // Permission is granted to anyone to use this software for non-commercial applications, // subject to the following restrictions: // 1. The origin of this software must not be misrepresented; you must not // claim that you wrote the original software. If you use this software in // a product, an acknowledgment in the product documentation would be // appreciated but is not required. // 2. Altered source versions must be plainly marked as such, and must not // be misrepresented as being the original software. // 3. This notice may not be removed or altered from any source distribution. /* --------------------------------------------------------------------------------------- */ #include "cross_lib.h" #include "sleep_macros.h" #include "input_macros.h" #if defined(__Z88DK__) uint8_t stick; #endif #ifndef POKE #define POKE(addr,val) (*(uint8_t*) (addr) = (val)) #endif #ifndef PEEK #define PEEK(addr) (*(uint8_t*) (addr)) #endif #if defined(__TI99__) && !defined(_XL_NO_JOYSTICK) #include "kscan.h" uint8_t __joystfast(int unit) { unsigned int result; // read the joystick lines (column 6 or 7, (5 added to unit)) __asm__("li r12,>0024\n\tai %1,5\n\tswpb %1\n\tldcr %1,3\n\tsrc r12,7\n\tli r12,>0006\n\tclr %0\n\tstcr %0,8" : "=r"(result) : "r"(unit) : "r12"); KSCAN_JOYY = 0; KSCAN_JOYX = 0; if ((result & 0x0200) == 0) { KSCAN_JOYX = JOY_LEFT; return JOY_LEFT; } if ((result & 0x0400) == 0) { KSCAN_JOYX = JOY_RIGHT; return JOY_RIGHT; } if ((result & 0x0800) == 0) { KSCAN_JOYY = JOY_DOWN; return JOY_DOWN; } if ((result & 0x1000) == 0) { KSCAN_JOYY = JOY_UP; return JOY_UP; } kscan(1); if(result==18) { return 18; } } uint8_t JOY_INPUT(void) { return __joystfast(1); } #endif // !defined(ACK) #if defined(_XL_NO_JOYSTICK) && !defined(__STDIO) && !defined(__NO_INPUT) #if defined(__COMX__) || defined(__PECOM__) || defined(__TMC600__) || defined(__MICRO__) #include #endif char GET_CHAR(void) { // # if defined(__NO_PRINT) // return 0; #if defined(_XL_TURN_BASED) return _XL_TURN_BASED_INPUT(); // #elif defined(__MSX__) // if(!get_trigger(0)) // { // return get_stick(0); // } // else // { // return 9; // } #elif defined(__MSDOS86__) && defined(__KEY_POLL_FROM_BUFFER) #define POKE(addr,val) (*(uint8_t*) (addr) = (val)) #define PEEK(addr) (*(uint8_t*) (addr)) unsigned char _kb_poll_buffer(void); // void GET_CHAR(void) // { unsigned char volatile input = _kb_poll_buffer(); // POKE(1050,PEEK(1052)); return input; // } #elif defined(__MC10__) POKE(2u,0xFFu-0x10u); if(!(PEEK((volatile uint16_t) 49151u)&2)) { return 'L'; } POKE(2u,0xFFu-0x08u); if(!(PEEK((volatile uint16_t)49151u)&2)) { return 'K'; } POKE(2u,0xFFu-0x04u); if(!(PEEK((volatile uint16_t)49151u)&2)) { return 'J'; } POKE(2u,0xFFu-0x2u); if(!(PEEK((volatile uint16_t)49151u)&2)) { return 'I'; } POKE(2u,0xFFu-0x80u); if(!(PEEK((volatile uint16_t)49151u)&8)) { return ' '; } return 0; #elif defined(__VIC20__) || defined(__SUPERVISION__) || defined(__CREATIVISION__) || defined(__OSIC1P__) \ || defined(__APPLE2__) || defined(__APPLE2ENH__) || defined(__CBM610__) || defined(__C16__) \ || defined(__CX16__) || defined(__AGAT__) || defined(__MEGA65__) || defined(__C65__) \ || defined(__KIM1__) || defined(__SYM1__) if(kbhit()) return cgetc(); else return 0; // Code by Marcel van Tongeren #elif defined(__COMX__) || defined(__PECOM__) || defined(__TMC600__) || defined(__MICRO__) return get_stick(); #elif defined(__ATMOS__) || defined(__TELESTRAT__) #include uint8_t polledValue = PEEK(0x208); switch(polledValue) { case 141: return 'I'; break; case 129: return 'J'; break; case 131: return 'K'; break; case 143: return 'L'; break; case 132: return ' '; break; } return '\0'; #elif defined(__TO7__) uint8_t res; asm { jsr 0xE806 stb res } return res; #define PEEK(addr) (*(uint8_t*) (addr)) #elif defined(__MO5__) #define KEYREG 0xA7C1 POKE(KEYREG,0x18); if(!(PEEK(KEYREG)&128)) { return 'I'; } else { POKE(KEYREG,0x04); if(!(PEEK(KEYREG)&128)) { return 'J'; } else { POKE(KEYREG,0x14); if(!(PEEK(KEYREG)&128)) { return 'K'; } else { POKE(KEYREG,0x24); if(!(PEEK(KEYREG)&128)) { return 'L'; } else { POKE(KEYREG,0x40); if(!(PEEK(KEYREG)&128)) { return ' '; } else { return 0; } } } } } #elif defined(__NCURSES__) || defined(__TERMINAL__) #if defined(__TERMINAL__) #if defined(WIN32) #include #else #include #endif #endif #define INPUT_LOOPS 10 unsigned long delay = 0; volatile char _ch; volatile char ch = 0; while(delay #include uint8_t res; uint8_t machine; asm { lda #253 sta machine sta $FF02 ldb #73 test lda $ff00 cmpa machine beq out incb rol $ff02 inc $ff02 cmpb #77 bne test clrb out stb res } #define _COCO_SPACE_BIT_MASK 0x08 POKE(0xFF02,0x7F); if(!(PEEK(0xFF00)&_COCO_SPACE_BIT_MASK)) { return ' '; } return res; #elif defined(__COCO__) || defined(__DRAGON__) #include #include uint8_t res; uint8_t machine; asm { ldd $8000 cmpd #$7EBB beq _dragon lda #253 sta machine bra pia _dragon lda #247 sta machine pia lda #253 sta $FF02 ldb #73 test lda $ff00 cmpa machine beq out incb rol $ff02 inc $ff02 cmpb #77 bne test clrb out stb res } #define _COCO_SPACE_BIT_MASK 0x08 #define _DRAGON_SPACE_BIT_MASK 0x20 POKE(0xFF02,0x7F); if(!(PEEK(0xFF00)&_COCO_SPACE_BIT_MASK) || !(PEEK(0xFF00)&_DRAGON_SPACE_BIT_MASK)) { return ' '; } return res; #elif defined(__SRR__) return getk_inkey(); #elif defined(__TI99__) POKE(0x83C8,0); POKE(0x83CA,0); if(kbhit()) return cgetc(); else return 0; #elif defined(__BBC__) #define OSSCANKEY(x) OSBYTE1(121,(x)) char OSBYTE1(__reg("a") char,__reg("r0") char)="\tldx\tr0\n\tjsr\t$fff4\n\ttxa"; return OSSCANKEY('')+1; #else return getk(); #endif } #endif // _XL_WAIT_FOR_INPUT() definitions #if !defined(__NO_INPUT) # if defined(__NO_WAIT) && !defined(_XL_NO_SLEEP) void _XL_WAIT_FOR_INPUT(void) { _XL_SLEEP(2); } #elif defined(__NO_WAIT) // #elif defined(WAIT_FOR_KEY) # if defined(__STDIO) void _XL_WAIT_FOR_INPUT(void) { getchar(); } #elif defined(__MSDOS86__) extern void _wait_for_key(void); void _XL_WAIT_FOR_INPUT(void) { _wait_for_key(); } #elif defined(__MC10__) void _XL_WAIT_FOR_INPUT(void) { getchar(); } #elif defined(__NCURSES__) || defined(__TERMINAL__) #if defined(WIN32) #include #else #include #endif void _XL_WAIT_FOR_INPUT(void) { #if !defined(_XL_TURN_BASED) while(getch()==ERR) {} #else getch(); #endif } #elif defined(__COCO3__) void _XL_WAIT_FOR_INPUT(void) { do { } while(!_XL_INPUT()); } #elif defined(__COCO__) || defined(__DRAGON__) #include void _XL_WAIT_FOR_INPUT(void) { waitkey(0); // isKeyPressed(); } #elif defined(__NO_INPUT) // #elif defined(__BBC__) void _XL_WAIT_FOR_INPUT(void) { while(!_XL_KEY_PRESSED()) { } } #elif defined(__MO5__) || defined(__TO7__) void _XL_WAIT_FOR_INPUT(void) { while(GET_CHAR()) { }; while(!GET_CHAR()) { } } #elif defined(__TERMINAL__) #include void _XL_WAIT_FOR_INPUT(void) { // TODO: Implement this } #else #if defined(__INCLUDE_CONIO_H) #include #endif #if defined(__Z88DK__) #undef cgetc #define cgetc() getch() #endif void _XL_WAIT_FOR_INPUT(void) { while(kbhit()) (void) cgetc(); while(!kbhit()) { }; (void) cgetc(); } #endif #else #if defined(__Z88DK__) #include extern uint8_t stick; void _XL_WAIT_FOR_INPUT(void) { while ((joystick(stick) & MOVE_FIRE)) { } while (!(joystick(stick) & MOVE_FIRE)) { } } #elif defined(__LCC1802__) #include void _XL_WAIT_FOR_INPUT(void) { // Flush the video buffer to make sure that the latest character is displayed #if !defined(__LCC1802_UNBUFFERED) VIDFLUSH(); #endif while(!get_stick(0)) { } } #elif defined(__TI99__) // TODO: Implement this #include "kscan.h" void _XL_WAIT_FOR_INPUT(void) { do { kscan(1); } while(KSCAN_KEY!=18); } #else #include void _XL_WAIT_FOR_INPUT(void) { while ((joy_read(STANDARD_JOY) & JOY_BTN_1_MASK)) { } while (! (joy_read(STANDARD_JOY) & JOY_BTN_1_MASK)) { } } #endif #endif #endif ================================================ FILE: src/cross_lib/input/input_macros.h ================================================ /* --------------------------------------------------------------------------------------- */ // // CROSS CHASE by Fabrizio Caruso // // Fabrizio_Caruso@hotmail.com // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from // the use of this software. // Permission is granted to anyone to use this software for non-commercial applications, // subject to the following restrictions: // 1. The origin of this software must not be misrepresented; you must not // claim that you wrote the original software. If you use this software in // a product, an acknowledgment in the product documentation would be // appreciated but is not required. // 2. Altered source versions must be plainly marked as such, and must not // be misrepresented as being the original software. // 3. This notice may not be removed or altered from any source distribution. /* --------------------------------------------------------------------------------------- */ #ifndef _INPUT_MACROS #define _INPUT_MACROS #include "input_target_settings.h" // _XL_INIT_INPUT #if defined(_XL_NO_JOYSTICK) #if defined(__ATMOS__) #if !defined(PEEK) #include #endif #define _XL_INIT_INPUT() { POKE(0x26A,PEEK(0x26A) | 8); } #elif defined(__MSX__) #define POKE(addr,val) (*(uint8_t*) (addr) = (val)) #define _XL_INIT_INPUT() { POKE(0xF3DB,0); } // Enable key-repeat on all VIC 20 targets that use the keyboard #elif defined(__VIC20__) || defined(__C64__) #if !defined(PEEK) #include #endif #define _XL_INIT_INPUT() \ do \ { \ POKE(0x028A ,0xFF) \ POKE(657,128); \ } while(0) #elif defined(__TO7__) #define POKE(addr,val) (*(uint8_t*) (addr) = (val)) #define PEEK(addr) (*(uint8_t*) (addr)) #define _XL_INIT_INPUT() POKE(0x6067,0); #elif (defined(__NCURSES__) || defined(__TERMINAL__)) && !defined(_XL_TURN_BASED) #define _XL_INIT_INPUT() nodelay(stdscr,TRUE) #elif defined(__M5__) #define POKE(addr,val) (*(uint8_t*) (addr) = (val)) #define PEEK(addr) (*(uint8_t*) (addr)) #define _XL_INIT_INPUT() { POKE(0x701A,PEEK(0x701A)&0x7F);} #else #define _XL_INIT_INPUT() #endif #elif defined(__Z88DK__) extern uint8_t stick; #if !defined(STICK) #if defined(__ZX81__) #define STICK 3 // #elif defined(__LASER500__) // #define STICK 2 #else #define STICK 1 #endif #endif #define _XL_INIT_INPUT() \ { \ stick = STICK; \ } #elif defined(__SMS__) || defined(__LCC1802__) || defined(__TI99__) #define _XL_INIT_INPUT() #else // All CBM except CBM610 + ATARI + ATARI XL + ATARI 5200 #include #if defined(__SUPERVISION__) #include #endif #if defined(__VIC20__) || defined(__C64__) #if !defined(PEEK) #include #endif #define _XL_INIT_INPUT() \ do \ { \ joy_install((void *)joy_static_stddrv); \ POKE(657,128); \ } while(0); #else #define _XL_INIT_INPUT() { joy_install((void *)joy_static_stddrv); }; #endif #endif // // __JOY_UP/DOWN/LEFT/RIGHT/FIRE #if !defined(_XL_NO_JOYSTICK) #if defined(__C64__) || defined(__C128__) #define STANDARD_JOY JOY_2 #else #define STANDARD_JOY JOY_1 #endif #if defined(__Z88DK__) #include #define __JOY_UP(joyInput) ((joyInput) & MOVE_UP) #define __JOY_DOWN(joyInput) ((joyInput) & MOVE_DOWN) #define __JOY_LEFT(joyInput) ((joyInput) & MOVE_LEFT) #define __JOY_RIGHT(joyInput) ((joyInput) & MOVE_RIGHT) #define __JOY_FIRE(joyInput) ((joyInput) & MOVE_FIRE) #elif defined(__LCC1802__) #include #define __JOY_UP(joyInput) ((joyInput) == MOVE_UP) #define __JOY_DOWN(joyInput) ((joyInput) == MOVE_DOWN) #define __JOY_LEFT(joyInput) ((joyInput) == MOVE_LEFT) #define __JOY_RIGHT(joyInput) ((joyInput) == MOVE_RIGHT) #define __JOY_FIRE(joyInput) ((joyInput) == MOVE_FIRE) #elif defined(__TI99__) #include "kscan.h" #define __JOY_UP(joyInput) ((KSCAN_JOYY) == JOY_UP) #define __JOY_DOWN(joyInput) ((KSCAN_JOYY) == JOY_DOWN) #define __JOY_LEFT(joyInput) ((KSCAN_JOYX) == JOY_LEFT) #define __JOY_RIGHT(joyInput) ((KSCAN_JOYX) == JOY_RIGHT) #define __JOY_FIRE(joyInput) ((joyInput) == 18) #else // CC65 #include #define __JOY_UP(joyInput) JOY_UP(joyInput) #define __JOY_DOWN(joyInput) JOY_DOWN(joyInput) #define __JOY_LEFT(joyInput) JOY_LEFT(joyInput) #define __JOY_RIGHT(joyInput) JOY_RIGHT(joyInput) #if !defined(__JOY_FIRE) #define __JOY_FIRE(joyKey) JOY_BTN_1(joyKey) #endif #endif // #if defined(__Z88DK__) extern uint8_t stick; #define JOY_INPUT() joystick(stick) // #elif defined(__SMS__) // #include // #define JOY_INPUT() (SMS_getKeysStatus() & 0xFF) #elif defined(__LCC1802__) #define JOY_INPUT() get_stick(0) #elif defined(__TI99__) // #include "kscan.h" uint8_t JOY_INPUT(void); #else #define JOY_INPUT() joy_read(STANDARD_JOY) #endif #endif /* #if defined(__EMCC__) #include void js_getchar(void) { window.addEventListener("keydown", function (event) { if (event.defaultPrevented) { return; // Do nothing if the event was already processed } switch (event.key) { case "ArrowDown": // code for "down arrow" key press. break; case "ArrowUp": // code for "up arrow" key press. break; case "ArrowLeft": // code for "left arrow" key press. break; case "ArrowRight": // code for "right arrow" key press. break; default: return; // Quit when this doesn't handle the key event. } // Cancel the default action to avoid it being handled twice event.preventDefault(); }, true); // the last option dispatches the event to the listener first, // then dispatches event to window #endif */ // _XL_TURN_BASED_INPUT definitions # if defined(__TELESTRAT__) #include #define _XL_TURN_BASED_INPUT() cgetc(); #elif defined(__EMCC__) #define __() getchar() #elif defined(__NCURSES__) || defined(__STDIO) || defined(__MC10__) #if defined(__MC10__) #include #endif #define _XL_TURN_BASED_INPUT() getchar() #elif defined(__Z88DK__) #define _XL_TURN_BASED_INPUT() getch() #elif defined(ACK) #define _XL_TURN_BASED_INPUT() getchar() #elif defined(__NO_PRINT) #define _XL_TURN_BASED_INPUT() #else #define _XL_TURN_BASED_INPUT() cgetc() #endif // _XL_TURN_BASED_INPUT definitions #if defined(__NO_INPUT) #define _XL_INPUT() 0 #elif defined(_XL_TURN_BASED) #define _XL_INPUT() _XL_TURN_BASED_INPUT() #elif !defined(_XL_NO_JOYSTICK) #define _XL_INPUT() JOY_INPUT() #else #define _XL_INPUT() GET_CHAR() #endif // GET_CHAR #if !defined(__NO_INPUT) && defined(_XL_NO_JOYSTICK) #if defined(__TELESTRAT__) #include #define GET_CHAR() cgetc() #elif defined(__MSDOS86__) #if defined(__KEY_POLL_FROM_BUFFER) // unsigned char _kb_poll_buffer(void); // #define GET_CHAR() _kb_poll_buffer() char GET_CHAR(void); #else // Direct poll unsigned char _kb_poll(void); #define GET_CHAR() _kb_poll() #endif #elif defined(ACK) || defined(__STDIO) #define GET_CHAR() getchar() #else char GET_CHAR(void); #endif #else #define GET_CHAR() #endif // !defined(__NO_PRINT) #if defined(__MSDOS86__) void _wait_for_key(void); #endif #if !defined(__NO_INPUT) // _XL_WAIT_FOR_INPUT #if !defined(__NO_WAIT) || !defined(_XL_NO_SLEEP) void _XL_WAIT_FOR_INPUT(void); #else // __NO_WAIT + _XL_NO_SLEEP #define _XL_WAIT_FOR_INPUT() #endif // !defined(__NO_WAIT) || !defined(_XL_NO_SLEEP) #else #define _XL_WAIT_FOR_INPUT() #endif // KEY_PRESSED definitions #if !defined(__NO_INPUT) #if defined(_XL_NO_JOYSTICK) #define _XL_KEY_PRESSED() (GET_CHAR()) #else #define _XL_KEY_PRESSED() (__JOY_FIRE(JOY_INPUT())) #endif #else #define _XL_KEY_PRESSED() ' ' #endif #if defined(_XL_NO_JOYSTICK) #define _XL_UP(input) ((input)==_MOVE_UP) #define _XL_DOWN(input) ((input)==_MOVE_DOWN) #define _XL_LEFT(input) ((input)==_MOVE_LEFT) #define _XL_RIGHT(input) ((input)==_MOVE_RIGHT) #define _XL_FIRE(input) ((input)==_FIRE) #else #define _XL_UP(input) __JOY_UP(input) #define _XL_DOWN(input) __JOY_DOWN(input) #define _XL_LEFT(input) __JOY_LEFT(input) #define _XL_RIGHT(input) __JOY_RIGHT(input) #define _XL_FIRE(input) __JOY_FIRE(input) #endif #endif // _INPUT_MACROS ================================================ FILE: src/cross_lib/input/input_target_settings.h ================================================ #ifndef _INPUT_TARGET_SETTINGS #define _INPUT_TARGET_SETTINGS #if !defined(_MOVE_UP) && !defined(_MOVE_LEFT) && !defined(_MOVE_RIGHT) && !defined(_MOVE_DOWN) #if defined(__NASCOM__) || defined(__MC1000__) || defined(__OSIC1P__) \ || defined(__WINCMOC__) || defined(__COCO3__) || defined(__COCO__) || defined(__DRAGON__) || defined(__TO7__) ||defined(__MO5__) \ || defined(__GAL__) || defined(__Z9001__) || (defined(__APPLE2__) && !defined(__APPLE2_CPM__)) || (defined(__APPLE2ENH__) && !defined(__APPLE2_CPM__)) \ || (defined(__AGAT__) && !defined(_XL_JCUKEN_KEYBOARD) && defined(_XL_NO_JOYSTICK)) \ || (defined(__VZ__) && !defined(__HARDWARE_KEYBOARD)) || defined(__ATMOS__) || defined(__MZ__) || defined(__MTX__) || defined(__SC3000__) \ || defined(__Z1013__) || defined(__KC__) || defined(__C128_Z80__) || defined(__EINSTEIN__) || defined(__MULTI8__) \ || defined(__G800__) || defined(__FP1100__) || defined(__TI99__) || defined(__HEMC__) || defined(__HGMC__) \ || defined(__HOMELAB__) || defined(__SPECIAL__) || defined(__KRAMERMC__) || defined(__DAI__) || defined(__X07__) \ || (defined(__BBC__) && defined(TURN_BASED))|| defined(__BBCMASTER__) \ || defined(__MC10__) || (defined(__ZX81__) && defined(__CONIO_GRAPHICS)) #define _MOVE_UP 'I' #define _MOVE_DOWN 'K' #define _MOVE_LEFT 'J' #define _MOVE_RIGHT 'L' #elif defined(__AGAT__) && defined(_XL_JCUKEN_KEYBOARD) #define _MOVE_UP 'G' #define _MOVE_DOWN 'O' #define _MOVE_LEFT 'R' #define _MOVE_RIGHT 'L' #elif defined(__AGAT__) && defined(_XL_ARROW_KEYS) #define _MOVE_UP 0x19 #define _MOVE_DOWN 0x1A #define _MOVE_LEFT 0x08 #define _MOVE_RIGHT 0x15 #elif defined(__MSDOS__) && !defined(__KEY_POLL_FROM_BUFFER) #define _MOVE_UP 0x17 #define _MOVE_DOWN 0x25 #define _MOVE_LEFT 0x24 #define _MOVE_RIGHT 0x26 #elif defined(__BBC__) // 'b' <-> SPACE // '%' <-> 'I' // 'F' <-> 'K' // 'E' <-> 'J' // 'V' <-> 'L' #define _MOVE_UP ('%'+1) #define _MOVE_DOWN ('F'+1) #define _MOVE_LEFT ('E'+1) #define _MOVE_RIGHT ('V'+1) #else #define _MOVE_UP 'i' #define _MOVE_DOWN 'k' #define _MOVE_LEFT 'j' #define _MOVE_RIGHT 'l' #endif #endif #if !defined(_FIRE) #if defined(__COMX__) #define _FIRE 0x5f #elif defined(__MSDOS__) && !defined(__KEY_POLL_FROM_BUFFER) #define _FIRE 0x39 #elif defined(__BBC__) #define _FIRE ('b'+1) #else #define _FIRE ' ' #endif #endif #if !defined(_XL_UP_KEY) && !defined(_XL_LEFT_KEY) && !defined(_XL_DOWN_KEY) && !defined(_XL_RIGHT_KEY) && !defined(_XL_FIRE_KEY) #if !defined(_XL_JCUKEN_KEYBOARD) #define _XL_UP_KEY "I" #define _XL_LEFT_KEY "J" #define _XL_DOWN_KEY "K" #define _XL_RIGHT_KEY "L" #define _XL_FIRE_KEY "SPACE" #else #define _XL_UP_KEY "G" #define _XL_LEFT_KEY "R" #define _XL_DOWN_KEY "O" #define _XL_RIGHT_KEY "L" #define _XL_FIRE_KEY "SPACE" #endif #endif #if defined(_XL_NO_JOYSTICK) #define WAIT_FOR_KEY #else #define WAIT_FOR_JOY #endif #endif // _INPUT_TARGET_SETTINGS ================================================ FILE: src/cross_lib/rand/rand.c ================================================ // #define rnd_m 2345 // #define rnd_a 6789 // #define rnd_m 58653 // #define rnd_a 13849 /* static unsigned int next = 1; int rand(void) // RAND_MAX assumed to be 32767 { next = next * rnd_m + rnd_a; return next; } */ #if defined(__ALT_RAND) static unsigned long int next = 1; int rand(void) // RAND_MAX assumed to be 32767 { next = next * 1103515245 + 12345; return (unsigned int)(next>>16)&0x7FFF; } #endif ================================================ FILE: src/cross_lib/rand/rand.h ================================================ #ifndef _RAND_H #define _RAND_H // Normalized 15-bit pseudo-random number generator #if defined(__NORMALIZED_RAND) || defined(__NCURSES__) || defined(__TERMINAL__) #define _XL_RAND() (rand()&0x7FFF) #else #define _XL_RAND() (rand()) #endif #endif // _RAND_H ================================================ FILE: src/cross_lib/rand/rand_lcc1802_devkit_include.c ================================================ // Necessary for LCC1802 #include ================================================ FILE: src/cross_lib/sleep/sleep_macros.c ================================================ /* --------------------------------------------------------------------------------------- */ // // CROSS CHASE by Fabrizio Caruso // // Fabrizio_Caruso@hotmail.com // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from // the use of this software. // Permission is granted to anyone to use this software for non-commercial applications, // subject to the following restrictions: // 1. The origin of this software must not be misrepresented; you must not // claim that you wrote the original software. If you use this software in // a product, an acknowledgment in the product documentation would be // appreciated but is not required. // 2. Altered source versions must be plainly marked as such, and must not // be misrepresented as being the original software. // 3. This notice may not be removed or altered from any source distribution. /* --------------------------------------------------------------------------------------- */ #include "sleep_macros.h" #include "cross_lib.h" #include "standard_libs.h" #if !defined(_XL_NO_SLEEP) #if defined(__OSIC1P__) || defined(__ZX81__) #define CYCLES 500 #elif defined(__COMX__) || defined(__PECOM__) || defined(__TMC600__) || defined(__VIC20__) #define CYCLES 2000U #elif defined(__COCO3___) #define CYCLES 30000U #elif defined(__COCO__) || defined(__DRAGON__) #define CYCLES 600U #elif defined(__SUPERVISION__) #define CYCLES 6000U #elif defined(__BBC__) #define CYCLES 9000U #elif defined(__TI99__) #define CYCLES 17000U #else #define CYCLES 1000 #endif #if defined(__ALT_SLEEP) && !defined(__NO_SLEEP_SEC) void _XL_SLEEP(uint8_t sec) { #if defined(__TI99__) volatile uint16_t ii; #else uint16_t ii; #endif // Flush the video buffer to make sure that the latest character is displayed #if !defined(__LCC1802_UNBUFFERED) && (defined(__COMX__) || defined(__PECOM__) || defined(__TMC600__) || defined(__MICRO__) || defined(__CIDELSA__)) VIDFLUSH(); #endif #if defined(__CMOC__) uint16_t foo; uint16_t bar; for(ii=0;ii #include #include void _XL_SLOW_DOWN(uint16_t t) { usleep((t)*800); } #elif defined(__TI99__) void _XL_SLOW_DOWN(uint16_t t) { volatile uint16_t i; for(i=0;i<(t);++i) { } } #elif defined(__CMOC__) // TODO: There should be a less hackish way void _XL_SLOW_DOWN(uint16_t t) { uint16_t i; uint16_t foo; for(i=0;i<(t);++i) { // foo=42*PEEK(0xF000); foo=42+i; } } #elif defined(__CX16__) void _XL_SLOW_DOWN(uint16_t t) { uint16_t i; uint8_t j; for(i=0;i<(t);++i) { for(j=0;j<9;++j) { } } } #elif defined(__MEGA65__) void _XL_SLOW_DOWN(uint16_t t) { uint16_t i; uint8_t j; for(i=0;i<(t);++i) { for(j=0;j<9;++j) { } } } #elif defined(__MSDOS86__) void _XL_SLOW_DOWN(uint16_t t) { uint16_t i; uint8_t j; for(i=0;i<(t);++i) { for(j=0;j<9;++j) { } } } #else void _XL_SLOW_DOWN(uint16_t t) { uint16_t i; for(i=0;i<(t);++i) { } } #endif #endif ================================================ FILE: src/cross_lib/sleep/sleep_macros.h ================================================ /* --------------------------------------------------------------------------------------- */ // // CROSS CHASE by Fabrizio Caruso // // Fabrizio_Caruso@hotmail.com // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from // the use of this software. // Permission is granted to anyone to use this software for non-commercial applications, // subject to the following restrictions: // 1. The origin of this software must not be misrepresented; you must not // claim that you wrote the original software. If you use this software in // a product, an acknowledgment in the product documentation would be // appreciated but is not required. // 2. Altered source versions must be plainly marked as such, and must not // be misrepresented as being the original software. // 3. This notice may not be removed or altered from any source distribution. /* --------------------------------------------------------------------------------------- */ #ifndef _SLEEP_MACROS #define _SLEEP_MACROS #include #if !defined(_XL_NO_SLEEP) # if !defined(__CMOC__) && !defined(__LCC1802__) && !defined(__TI99__) && !defined(__MC10__) #include #if !defined(__BBC__) #include #endif #include #elif defined(__CMC__) #include #include #endif #endif #if defined(__VIC20__) #define MAX_XL_SLOW_DOWN_FACTOR 20000u #else #define MAX_XL_SLOW_DOWN_FACTOR 65534U #endif #if defined(_XL_NO_SLEEP) #define _XL_SLEEP(s) #elif defined(__NO_SLEEP_SEC) #define _XL_SLEEP(s) _XL_SLOW_DOWN(MAX_XL_SLOW_DOWN_FACTOR) #elif defined(__ALT_SLEEP) void _XL_SLEEP(uint8_t s); #else #define _XL_SLEEP(s) sleep(s) #endif #if !defined(__FORCE_SLOWDOWN) || __FORCE_SLOWDOWN==-1 #if !defined(_XL_SLOW_DOWN_FACTOR) #if defined(_XL_TURN_BASED) #define _XL_SLOW_DOWN_FACTOR 0 #else # if defined(__NCURSES__) #define _XL_SLOW_DOWN_FACTOR 100 #elif defined(__OSIC1P__) #define _XL_SLOW_DOWN_FACTOR 500U #elif defined(__OSCA__) #define _XL_SLOW_DOWN_FACTOR 8167U #elif defined(__SC3000__) #define _XL_SLOW_DOWN_FACTOR 2500 #elif defined(__NC100__) || defined(__NC200__) #define _XL_SLOW_DOWN_FACTOR 1500 #elif defined(__MTX__) #define _XL_SLOW_DOWN_FACTOR 3300U #elif defined(__MSX__) #define _XL_SLOW_DOWN_FACTOR 2000U #elif defined(__MC1000__) #define _XL_SLOW_DOWN_FACTOR 1200 #elif defined(__SAM__) #define _XL_SLOW_DOWN_FACTOR 500 #elif defined(__VIC20__) && defined(__VIC20_UNEXPANDED) #define _XL_SLOW_DOWN_FACTOR 0 #elif defined(__PC6001__) #define _XL_SLOW_DOWN_FACTOR 500 #elif defined(__NASCOM__) #define _XL_SLOW_DOWN_FACTOR 8000U #elif defined(__ABC80__) #define _XL_SLOW_DOWN_FACTOR 8000U #elif defined(__VZ__) #define _XL_SLOW_DOWN_FACTOR 3000U #elif defined(__TI82__) || defined(__TI83__) || defined(__TI85__) || defined(__TI8X__) || defined(__TI86__) #define _XL_SLOW_DOWN_FACTOR 6000U #elif defined(__C64__) #if defined(__USE_WAIT_V_SYNC) #define _XL_SLOW_DOWN_FACTOR 0 #else #define _XL_SLOW_DOWN_FACTOR 300 #endif #elif (defined(__VIC20__) && !defined(__VIC20_UNEXPANDED)) #define _XL_SLOW_DOWN_FACTOR 600 #elif defined(__NES__) || defined(__MZ__) || defined(__Z9001__) || defined(__WINCMOC__) || defined(__CMOC__) || \ defined(__CBM610__) || defined(__MSX__) || defined(__LASER500__) #define _XL_SLOW_DOWN_FACTOR 800 #elif defined(__APPLE2__) || defined(__APPLE2ENH__) || (defined(__C16__) || defined(__PLUS4__)) #define _XL_SLOW_DOWN_FACTOR 250 #elif defined(__ATMOS__) #define _XL_SLOW_DOWN_FACTOR 50 #elif defined(__VG5K__) && !defined(__ALT_PRINT) #define _XL_SLOW_DOWN_FACTOR 2000U #elif defined(__VG5K__) && defined(__ALT_PRINT) #define _XL_SLOW_DOWN_FACTOR 5000U #elif defined(__GAMATE__) || defined(__X1__) || defined(__AQUARIUS__) && defined(__ALT_PRINT) #define _XL_SLOW_DOWN_FACTOR 1500 #elif defined(__CREATIVISION__) || defined(__ATARI5200__) || defined(__ATARI__) || \ defined(__ACE__) || defined(__BEE__) || defined(__AQUARIUS__) && !defined(__ALT_PRINT) || defined(__PET__) #define _XL_SLOW_DOWN_FACTOR 1000 #elif defined(__PCE__) #define _XL_SLOW_DOWN_FACTOR 5500U #elif defined(__SPECTRUM__) && !defined(__TS2068__) #define _XL_SLOW_DOWN_FACTOR 1400 #elif defined(__TS2068__) #define _XL_SLOW_DOWN_FACTOR 3000 #elif defined(__CPC__) && defined(__CPCRSLIB_GRAPHICS) #define _XL_SLOW_DOWN_FACTOR 500 #elif defined(__SVI__) #define _XL_SLOW_DOWN_FACTOR 1200 #elif defined(__ATARI_LYNX__) #define _XL_SLOW_DOWN_FACTOR 6000U #elif (defined(__TRS80__) || defined(__EG2K__)) && !defined(__Z88DK_SPRITES_GRAPHICS) #define _XL_SLOW_DOWN_FACTOR 100 #elif defined(__EINSTEIN__) #define _XL_SLOW_DOWN_FACTOR 5000 #elif defined(__PX4__) #define _XL_SLOW_DOWN_FACTOR 2500 #elif defined(__PX8__) #define _XL_SLOW_DOWN_FACTOR 30000U #elif defined(__M5__) #define _XL_SLOW_DOWN_FACTOR 900 #elif defined(__SUPERVISION__) #define _XL_SLOW_DOWN_FACTOR 2000 #endif #endif #endif #else #undef _XL_SLOW_DOWN_FACTOR #define _XL_SLOW_DOWN_FACTOR __FORCE_SLOWDOWN #endif #if !defined(_XL_SLOW_DOWN_FACTOR) #define _XL_SLOW_DOWN_FACTOR 0 #endif #if defined(_XL_NO_SLEEP) || defined(__NO_SLEEP) #define _XL_SLOW_DOWN(t) #else void _XL_SLOW_DOWN(uint16_t t); #endif #endif // _SLEEP_MACROS ================================================ FILE: src/cross_lib/sound/ack/msdos86/msdos86_sounds.h ================================================ #ifndef _MSDOS86_SOUNDS #define _MSDOS86_SOUNDS extern void _speaker_beep(uint16_t freq, uint16_t length); #define __NOISE #if defined(__NOISE) #define _speaker_noise(length) \ do \ { \ uint16_t i; \ \ for(i=0;i #define _XL_EXPLOSION_SOUND() atmos_explode(); #define _XL_PING_SOUND() atmos_ping(); #define _XL_SHOOT_SOUND() atmos_shoot(); #define _XL_TICK_SOUND() atmos_tick(); #define _XL_TOCK_SOUND() atmos_tock(); #define _XL_ZAP_SOUND() atmos_zap(); #endif // __ATMOS_SOUNDS ================================================ FILE: src/cross_lib/sound/cc65/c264/c264_sounds.c ================================================ /* --------------------------------------------------------------------------------------- */ // // CROSS CHASE by Fabrizio Caruso // // Fabrizio_Caruso@hotmail.com // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from // the use of this software. // Permission is granted to anyone to use this software for non-commercial applications, // subject to the following restrictions: // 1. The origin of this software must not be misrepresented; you must not // claim that you wrote the original software. If you use this software in // a product, an acknowledgment in the product documentation would be // appreciated but is not required. // 2. Altered source versions must be plainly marked as such, and must not // be misrepresented as being the original software. // 3. This notice may not be removed or altered from any source distribution. /* --------------------------------------------------------------------------------------- */ #include "c264_sounds.h" #include void _set_sound() { POKE(SELECT,MAX_VOLUME+VOICE_1); POKE(HI_FREQ_1,PEEK(HI_FREQ_1) & (255-3)); } void _pause(uint8_t length) { uint8_t i; for(i=0;i #endif #include #define NOISE 64 #define VOICE_1 16 #define MAX_VOLUME 15 #define LO_FREQ_1 0xFF0E #define HI_FREQ_1 0xFF12 #define SELECT 0xFF11 void _noise_sound(uint8_t type); #define _XL_EXPLOSION_SOUND() _noise_sound(220) #define _XL_SHOOT_SOUND() _noise_sound(160) void _short_sound(uint8_t freq); #define _XL_PING_SOUND() _short_sound(200) #define _XL_TOCK_SOUND() _short_sound(150) #define _XL_TICK_SOUND() _short_sound(250) void _XL_ZAP_SOUND(void); #endif // __C264_SOUNDS ================================================ FILE: src/cross_lib/sound/cc65/creativision/creativision_sounds.c ================================================ /* --------------------------------------------------------------------------------------- */ // // CROSS CHASE by Fabrizio Caruso // // Fabrizio_Caruso@hotmail.com // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from // the use of this software. // Permission is granted to anyone to use this software for non-commercial applications, // subject to the following restrictions: // 1. The origin of this software must not be misrepresented; you must not // claim that you wrote the original software. If you use this software in // a product, an acknowledgment in the product documentation would be // appreciated but is not required. // 2. Altered source versions must be plainly marked as such, and must not // be misrepresented as being the original software. // 3. This notice may not be removed or altered from any source distribution. /* --------------------------------------------------------------------------------------- */ #ifndef _CREATIVISION_SOUNDS #define _CREATIVISION_SOUNDS #include #include #include "standard_libs.h" #include "creativision_sounds.h" void play_frequency(uint16_t value) { psg_outb(value&0xFF); // Latch frequency psg_outb((value&0xFF00)>>8); // Frequency byte 2 psg_outb(0x90); // Channel 0 full volume psg_delay(900); psg_silence(); } #endif // _CREATIVISION_SOUNDS ================================================ FILE: src/cross_lib/sound/cc65/creativision/creativision_sounds.h ================================================ /* --------------------------------------------------------------------------------------- */ // // CROSS CHASE by Fabrizio Caruso // // Fabrizio_Caruso@hotmail.com // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from // the use of this software. // Permission is granted to anyone to use this software for non-commercial applications, // subject to the following restrictions: // 1. The origin of this software must not be misrepresented; you must not // claim that you wrote the original software. If you use this software in // a product, an acknowledgment in the product documentation would be // appreciated but is not required. // 2. Altered source versions must be plainly marked as such, and must not // be misrepresented as being the original software. // 3. This notice may not be removed or altered from any source distribution. /* --------------------------------------------------------------------------------------- */ #ifndef _GAMATE_SOUNDS #define _GAMATE_SOUNDS void play_frequency(uint16_t freq); #define _XL_EXPLOSION_SOUND() play_frequency(350) #define _XL_PING_SOUND() play_frequency(200) #define _XL_SHOOT_SOUND() play_frequency(600) #define _XL_TICK_SOUND() play_frequency(80) #define _XL_TOCK_SOUND() play_frequency(90) #define _XL_ZAP_SOUND() play_frequency(1200) #endif // _GAMATE_SOUNDS ================================================ FILE: src/cross_lib/sound/cc65/cx16/cx16_sounds.c ================================================ #include "cx16_sounds.h" #include #include "standard_libs.h" // VERA $1F9C0 - $1F9C3 #define _FREQ_LO_REG 0x1F9C0 #define _FREQ_HI_REG 0x1F9C1 #define _VOLUME_REG 0x1F9C2 #define _WAVE_REG 0x1F9C3 void _play(uint16_t value) { uint16_t i; vpoke(0xFF, _VOLUME_REG); vpoke(value>>8, _FREQ_HI_REG); vpoke(((value&0xFF00)>>8), _FREQ_LO_REG); vpoke(0b00011111,_WAVE_REG); for(i=0;i<5000;++i){}; // while(1){}; vpoke(0x00, _VOLUME_REG); } ================================================ FILE: src/cross_lib/sound/cc65/cx16/cx16_sounds.h ================================================ //VERA $1F9C0 - $1F9C3 #include "standard_libs.h" #ifndef _CX16_SOUNDS #define _CX16_SOUNDS void _play(uint16_t freq); #define _XL_EXPLOSION_SOUND() _play(3500U) #define _XL_PING_SOUND() _play(2000U) #define _XL_SHOOT_SOUND() _play(6000U) #define _XL_TICK_SOUND() _play(8000U) #define _XL_TOCK_SOUND() _play(9000U) #define _XL_ZAP_SOUND() _play(1200U) #endif // _CX16_SOUNDS ================================================ FILE: src/cross_lib/sound/cc65/gamate/gamate_sounds.c ================================================ /* --------------------------------------------------------------------------------------- */ // // CROSS CHASE by Fabrizio Caruso // // Fabrizio_Caruso@hotmail.com // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from // the use of this software. // Permission is granted to anyone to use this software for non-commercial applications, // subject to the following restrictions: // 1. The origin of this software must not be misrepresented; you must not // claim that you wrote the original software. If you use this software in // a product, an acknowledgment in the product documentation would be // appreciated but is not required. // 2. Altered source versions must be plainly marked as such, and must not // be misrepresented as being the original software. // 3. This notice may not be removed or altered from any source distribution. /* --------------------------------------------------------------------------------------- */ #ifndef _GAMATE_SOUNDS #define _GAMATE_SOUNDS #include #include #include "standard_libs.h" #include "gamate_sounds.h" #define set_volume(value) \ POKE(AUDIO_BASE+10,value) #define silence() set_volue(0) void play_frequency(uint16_t value) { uint16_t i; set_volume(0xF); POKE(AUDIO_BASE+4,value&0xFF); POKE(AUDIO_BASE+5,(value&0x0F00)>>8); for(i=0;i<1200U;++i) { } set_volume(0x0); } #endif // _GAMATE_SOUNDS ================================================ FILE: src/cross_lib/sound/cc65/gamate/gamate_sounds.h ================================================ /* --------------------------------------------------------------------------------------- */ // // CROSS CHASE by Fabrizio Caruso // // Fabrizio_Caruso@hotmail.com // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from // the use of this software. // Permission is granted to anyone to use this software for non-commercial applications, // subject to the following restrictions: // 1. The origin of this software must not be misrepresented; you must not // claim that you wrote the original software. If you use this software in // a product, an acknowledgment in the product documentation would be // appreciated but is not required. // 2. Altered source versions must be plainly marked as such, and must not // be misrepresented as being the original software. // 3. This notice may not be removed or altered from any source distribution. /* --------------------------------------------------------------------------------------- */ #ifndef _GAMATE_SOUNDS #define _GAMATE_SOUNDS void play_frequency(uint16_t value); #define _XL_EXPLOSION_SOUND() play_frequency(350) #define _XL_PING_SOUND() play_frequency(200) #define _XL_SHOOT_SOUND() play_frequency(600) #define _XL_TOCK_SOUND() play_frequency(90) #define _XL_TICK_SOUND() play_frequency(150) #define _XL_ZAP_SOUND() play_frequency(1200) #endif // _GAMATE_SOUNDS ================================================ FILE: src/cross_lib/sound/cc65/pet/pet_sounds.c ================================================ /* --------------------------------------------------------------------------------------- */ // // CROSS CHASE by Fabrizio Caruso // // Fabrizio_Caruso@hotmail.com // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from // the use of this software. // Permission is granted to anyone to use this software for non-commercial applications, // subject to the following restrictions: // 1. The origin of this software must not be misrepresented; you must not // claim that you wrote the original software. If you use this software in // a product, an acknowledgment in the product documentation would be // appreciated but is not required. // 2. Altered source versions must be plainly marked as such, and must not // be misrepresented as being the original software. // 3. This notice may not be removed or altered from any source distribution. /* --------------------------------------------------------------------------------------- */ #ifndef _GAMATE_SOUNDS #define _GAMATE_SOUNDS #include #include "standard_libs.h" #include "pet_sounds.h" void beep(uint8_t value) { uint8_t i; POKE(SHIFT_REG, 15); POKE(AUX_CTRL_REG,16); POKE(TIMER_2_LOW,value); for(i=0;i<100;++i){}; POKE(AUX_CTRL_REG,0); } void noise(uint8_t duration) { uint8_t i; uint8_t j; POKE(SHIFT_REG,15); POKE(AUX_CTRL_REG,16); for(i=0;i0;--i) { POKE(TIMER_2_LOW,i); } POKE(AUX_CTRL_REG,0); } #endif // _GAMATE_SOUNDS ================================================ FILE: src/cross_lib/sound/cc65/pet/pet_sounds.h ================================================ /* --------------------------------------------------------------------------------------- */ // // CROSS CHASE by Fabrizio Caruso // // Fabrizio_Caruso@hotmail.com // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from // the use of this software. // Permission is granted to anyone to use this software for non-commercial applications, // subject to the following restrictions: // 1. The origin of this software must not be misrepresented; you must not // claim that you wrote the original software. If you use this software in // a product, an acknowledgment in the product documentation would be // appreciated but is not required. // 2. Altered source versions must be plainly marked as such, and must not // be misrepresented as being the original software. // 3. This notice may not be removed or altered from any source distribution. /* --------------------------------------------------------------------------------------- */ #ifndef _PET_SOUNDS #define _PET_SOUNDS #include // Auxiliary control register (Free run) #define AUX_CTRL_REG 59467U // Timbre and octave #define SHIFT_REG 59466U // Period: Small -> high pitch #define TIMER_2_LOW 59464U #define TIMER_2_HIGH 59465U void beep(uint8_t freq); void noise(uint8_t duration); #define _XL_EXPLOSION_SOUND() noise(250) #define _XL_PING_SOUND() beep(90) #define _XL_SHOOT_SOUND() noise(180) #define _XL_TICK_SOUND() beep(60) #define _XL_TOCK_SOUND() beep(220) void _XL_ZAP_SOUND(void); #endif // _GAMATE_SOUNDS ================================================ FILE: src/cross_lib/sound/cc65/pokey/pokey_sounds.c ================================================ /* --------------------------------------------------------------------------------------- */ // // CROSS CHASE by Fabrizio Caruso // // Fabrizio_Caruso@hotmail.com // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from // the use of this software. // Permission is granted to anyone to use this software for non-commercial applications, // subject to the following restrictions: // 1. The origin of this software must not be misrepresented; you must not // claim that you wrote the original software. If you use this software in // a product, an acknowledgment in the product documentation would be // appreciated but is not required. // 2. Altered source versions must be plainly marked as such, and must not // be misrepresented as being the original software. // 3. This notice may not be removed or altered from any source distribution. /* --------------------------------------------------------------------------------------- */ #include "pokey_sounds.h" #include void _explosion_sound(uint8_t freq) { uint16_t i; POKEY_WRITE.audctl = 0x00; POKEY_WRITE.skctl = 2; POKEY_WRITE.audf1 = freq; POKEY_WRITE.audc1 = 0x07; for(i=150;i>0;--i) { POKEY_WRITE.audc1 = i/10u; } } void _ping_sound(uint8_t freq) { uint16_t i; POKEY_WRITE.audctl = 0x00; POKEY_WRITE.skctl = 2; POKEY_WRITE.audf1 = freq; POKEY_WRITE.audc1 = 0xA7; for(i=700;i>0;--i) { } POKEY_WRITE.audc1 = 0x00; }; void _XL_ZAP_SOUND(void) { uint16_t i; uint16_t j; POKEY_WRITE.audctl = 0x00; POKEY_WRITE.skctl = 2; POKEY_WRITE.audf1 = 0x02; POKEY_WRITE.audc1 = 0xA7; for(i=0;i<100;++i) { for(j=0;j<50;++j) { } POKEY_WRITE.audf1 = 100+i; } POKEY_WRITE.audc1 = 0x00; }; ================================================ FILE: src/cross_lib/sound/cc65/pokey/pokey_sounds.h ================================================ /* --------------------------------------------------------------------------------------- */ // // CROSS CHASE by Fabrizio Caruso // // Fabrizio_Caruso@hotmail.com // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from // the use of this software. // Permission is granted to anyone to use this software for non-commercial applications, // subject to the following restrictions: // 1. The origin of this software must not be misrepresented; you must not // claim that you wrote the original software. If you use this software in // a product, an acknowledgment in the product documentation would be // appreciated but is not required. // 2. Altered source versions must be plainly marked as such, and must not // be misrepresented as being the original software. // 3. This notice may not be removed or altered from any source distribution. /* --------------------------------------------------------------------------------------- */ #ifndef _ATARI_SOUNDS #define _ATARI_SOUNDS #include #if defined(__ATARI__) #include #else #include #endif void _ping_sound(uint8_t freq); #define _XL_PING_SOUND() _ping_sound(0xF0); #define _XL_TOCK_SOUND() _ping_sound(0x02); #define _XL_TICK_SOUND() _ping_sound(0x60); void _explosion_sound(uint8_t freq); #define _XL_SHOOT_SOUND() _explosion_sound(0xF0); #define _XL_EXPLOSION_SOUND() _explosion_sound(0x80); void _XL_ZAP_SOUND(void); #endif // _ATARI_SOUNDS ================================================ FILE: src/cross_lib/sound/cc65/sid/sid_sounds.c ================================================ #include "sid_sounds.h" #include #if defined(__MEGA65__) #define SID SID1 #define _SOUND_DELAY 16 #else #define _SOUND_DELAY 1 #endif #if !defined(_XL_NO_SOUND) void _set_noise(void) { SID.v3.ad = 0x00; SID.v3.sr = 0xA8; SID.flt_ctrl = 0x44; SID.amp = 0x1F; SID.v3.ctrl = 0x81; } void _short_sound(void) { uint16_t i; #if defined(__MEGA65__) SID.v3.freq = 0x1800; SID.v3.ad = 0x00; SID.v3.sr = 0xC8; SID.flt_ctrl = 0x44; SID.amp = 0x1F; SID.v3.ctrl = 0x21; for(i=0;i<253*_SOUND_DELAY;++i) { SID.v3.freq+=8; }; #else SID.v3.freq = 0x2000; SID.v3.ad = 0x00; SID.v3.sr = 0xC8; SID.flt_ctrl = 0x44; SID.amp = 0x1F; SID.v3.ctrl = 0x21; #endif for(i=0;i<200*_SOUND_DELAY;++i) {}; SID.amp = 0x00; SID.v3.ctrl = 0x08; } void _XL_SHOOT_SOUND(void) { uint16_t i; #if defined(__MEGA65__) SID.v3.freq = 0x1800; SID.flt_freq = 0x3000; #else SID.v3.freq = 0x3000; SID.flt_freq = 0x9000; #endif _set_noise(); for(i=0;i<800*_SOUND_DELAY;++i) {} SID.amp = 0x00; SID.v3.ctrl = 0x08; }; void _XL_EXPLOSION_SOUND(void) { uint16_t i; uint16_t j; SID.v3.freq = 0x1200; SID.flt_freq = 0x2000; _set_noise(); for(i=0;i<300*_SOUND_DELAY;++i) { } for(j=0;j<15;++j) { SID.amp = 0x1F - j; for(i=0;i<100*_SOUND_DELAY;++i) { } } SID.amp = 0x00; SID.v3.ctrl = 0x08; }; void _XL_PING_SOUND(void) { SID.flt_freq = 0x3500; _short_sound(); }; void _XL_TICK_SOUND(void) { SID.flt_freq = 0x2000; _short_sound(); }; void _XL_TOCK_SOUND(void) { SID.flt_freq = 0x1000; _short_sound(); }; void _XL_ZAP_SOUND(void) { uint16_t i; uint8_t j; SID.v3.freq = 0x6800; SID.v3.ad = 0x88; SID.v3.sr = 0xC8; SID.flt_freq = 0x5000; SID.flt_ctrl = 0x44; SID.amp = 0x1F; SID.v3.ctrl = 0x21; for(i=0;i<253*_SOUND_DELAY;++i) { SID.v3.freq+=8; for(j=0;j<25;++j){}; }; SID.amp = 0x00; SID.v3.ctrl = 0x08; }; #endif // _XL_NO_SOUND ================================================ FILE: src/cross_lib/sound/cc65/sid/sid_sounds.h ================================================ /* --------------------------------------------------------------------------------------- */ // // CROSS CHASE by Fabrizio Caruso // // Fabrizio_Caruso@hotmail.com // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from // the use of this software. // Permission is granted to anyone to use this software for non-commercial applications, // subject to the following restrictions: // 1. The origin of this software must not be misrepresented; you must not // claim that you wrote the original software. If you use this software in // a product, an acknowledgment in the product documentation would be // appreciated but is not required. // 2. Altered source versions must be plainly marked as such, and must not // be misrepresented as being the original software. // 3. This notice may not be removed or altered from any source distribution. /* --------------------------------------------------------------------------------------- */ #ifndef _SID_SOUNDS #define _SID_SOUNDS #if defined(__C64__) #include #elif defined(__C128__) #include #elif defined(__MEGA65__) #include #else // TODO: USE pokebsys and pokewsys for the CBM510 #include #endif #if !defined(__XL_NO_SOUND) void _XL_EXPLOSION_SOUND(void); void _XL_PING_SOUND(void); void _XL_SHOOT_SOUND(void); void _XL_TICK_SOUND(void); void _XL_TOCK_SOUND(void); void _XL_ZAP_SOUND(void); #endif #endif // SID_SOUNDS ================================================ FILE: src/cross_lib/sound/cc65/supervision/reverse_engineered_notes.txt ================================================ Supervision Reverse Engineering Notes This is a copy of http://blog.kevtris.org/blogfiles/Supervision_Tech.txt just to preserve it. Supervision Reverse Engineering Notes ------------------------------------- Kevin Horton 12/20/2011 V4.00 The Supervision is a Gameboy wanna-be. It was sold and marketed in many countries, under many different names. Here in the US, it was simply sold as the "Supervision". The branding on it is "Watara", and it has a vaguely Gameboy-like look, but the screen can be angled up or down via a hinge below the display proper. The top half contains the actual game hardware, a 160*160 LCD, the main PCB with a glop-top ASIC which is the "brains", and two 8K SRAMs. The two 8K SRAMs are 6264's or equivelant, and are physically glop-tops on little tiny carrier boards. The cartridges seem to support up to 128K byte ROMs, but as far as I know, the games were only as large as 64K bytes. There are a few 4 in 1 multicarts which might be 128K bytes, but contain games that were previously released on separate carts. To perform this reverse engineering, I made a special test system. It is composed of a home made game cartridge, with a UART mapped into memory at 1FFE and 1FFF. I cut the chip enable to the internal WRAM, and ran it through a circuit to pull out 1FFE/1FFF, which then ran the chip enable on the UART. A simple "bios" was made that allowed me to read/write data to/from anywhere in memory. This was then used to poke data into VRAM, poke registers, and all that fun stuff. I used an HP 54645D mixed signal oscilloscope/logic analyzer. I connected a test header to the VRAM and LCD control signals. This was then used to poke at things on the system to figure out how it all works. So that's the background, now onto the juicy technical details. --- System Overview --------------- The device runs on a 4MHz resonator. This resonator's not that great (mine was 1.35% off), so I replaced it with a 4MHz crystal. I replaced to increase the accuracy which helped during reverse engineering on the logic analyzer. There are not many parts in this system: * 65C02 CPU running at 4MHz * 8K of VRAM which the CPU can access with 0 wait states * 8K of WRAM which is connected to the CPU * audio amplifier * 160*160 monochrome LCD (see the LCD section) * speaker * cartridge port that can accept a single ROM, up to 128Kbytes --- The LCD system -------------- The LCD on the Supervision is a simple 160*160 dot 2 bpp monochrome LCD. The LCD uses some tricks to load the data into it. A full frame is composed of two fields. Each field is 1 bit per pixel, so to show a full frame it takes two fields. frame: p0 p1 p2 p3 ------------------- 1 0 0 1 1 2 0 1 0 1 3 0 0 1 1 4 0 1 0 1 p0 is an 'off' pixel. It shows up as the lightest colour possible p1 1/3rd darkness p2 2/3rd darkness p3 an 'on' pixel which is as dark as possible The LCD is physically connected with 9 outputs from the ASIC. In order, they are: 1 - Data 0 2 - Data 1 3 - Data 2 4 - Data 3 5 - Pixel Clock 6 - Line Latch 7 - Frame Latch 8 - Frame Polarity/bright control 9 - Power Control A diagram of how the LCD hardware works is probably in order. The LCD on this system is not much different from other similar displays available from Optrex and other manufacturers. A block diagram of the LCD system looks like this: +---------------------------+ Pix clk(5)O--|Clock | Data 0(1)O--|D0 CK LT PL | Data 1(2)O--|D1 4*40 bit shift reg | Data 2(3)O--|D2 | Data 3(4)O--|D3 0... ...159 | +---------------------------+ | | | | +---------------------------+ | | Line Lat(6)O--|Latch 160 bit latch | Polarity(8)O--|Pol | +---------------------------+ | | | 160 Columns | +------------------------------+ | | +-----+ | | LL(6)O--|CK 0|---| | FL(7)O--|DT .| | | PL(8)O--|PL .| 1 | | | .| 6 | LCD Glass | | | 0 | | | | | | | | R | | | | o | | | | w | | | | s | | | .| | | | .| | | | .| | | | 159|---| | +-----+ | | | | +------------------------------+ There are two shift registers. Data is shifted into the column shift register 4 bits at a time. This is done simply to increase the speed at which data can be shifted in. The shift register is pretty simple, and bits are arranged on the 160 pin outputs in sequence like so: 01230123012301230123.... (0,1,2,3 = data bits 0-3). After 40 clocks (160 pixels: 40*4 = 160), the line latch signal is pulsed, which latches all 160 pixels into the columns of the LCD glass at the same time. There is a second shift register that drives the rows of the LCD. This shift register selects a single row to be enabled. Its data input is connected to the frame latch signal: It's pulsed high for 1 scanline, and on line latch's falling edge, it's clocked into the row shift register. This enables the topmost scanline, and when it is enabled, the first row's pixel signals are simultaniously latched into the column drivers. This "lights up" the uppermost row of pixels. The next line latch signal then clocks the row shift register and simultaniously latches in new data into the columns to "light up" the second row of pixels, and so on. This process repeats for all 160 scanlines, and repeats. The frame polarity/bright control signal is toggled every field. This inverts all the driver signals. It also darkens the display a bit so you can get a true 2 bits per pixel. The polarity toggling is done to prevent destruction of the LCD display glass via electrolytic plating action. (Incidentally, this is why you should never turn the Gameboy LCD off during rendering and you must turn it off in VBLANK). Timing ------ A single frame is composed of two fields. A field is a complete scanning of the LCD. There's two fields in each frame to effect the grey scale. Each field takes exactly 39360 cycles. A complete frame is thus 2x that, or 78720 cycles. There are 160 scanlines in each field, and each scanline takes 246 clocks to complete. Thus, 246*160 = 39360, and 39360*2 = 78720. With the 4MHz system clock, this means that there are 101.62 fields a second, or 50.81 frames a second. Each scanline is composed of 246 clocks. There are 40 pixel writes to the LCD, and 1 latch write, for a total of 41 writes. Each write period lasts 6 clock cycles, so 41*6 = 246 cycles. On the following diagram, a clock cycle is 1 character cell. The "clk cyc" is a count of the phase of the LCD write hardware, which performs 1 write to the LCD every 6 clocks. I have arbitrarily placed the pixel clock (which writes 4 pixels into the LCD shift register) on clock cycle 0. I have shown a line latch pulse on the diagram, too. These pulses only occur every 246 clocks, and are what latch data into the LCD's output buffers from the LCD's input shift register. clk cyc 012345012345012345012345012345012345012345012345012345012345012345012345 pixclk -_____-___________-_____-_____-_____-_____-_____-_____-_____-_____-_____ data 0-3 ====x=====x=====x=====x=====x=====x=====x=====x=====x=====x=====x=====x= line lat _____________-__________________________________________________________ _ - a low signal - - a high signal = - data (high or low) x - transition point (where this signal CAN (but doesn't have to) change scanline timing: | field N | field N+1 | field N+2 ... frame lat ______-______________/___________-____________/___________-________ frame pol ______---------------/-----------_____________/___________--------- Each character cell is 1 scanline (246 clocks). There are 160 scanlines represented on the diagram, with a / to indicate that part of the diagram has been removed for clarity. That about wraps up LCD timing. The LCD timing does not deviate from this set pattern, even when the CPU writes or reads from the VRAM. --- VRAM Timing ----------- The VRAM timing is very rigid and does not deviate, even during CPU reads or writes. The RAM is simply addressed by the video hardware and sent out to the LCD. Every 6 clocks, a new RAM location is accessed. The address lines update every 6 cycles. This corresponds neatly to the LCD output timing. The way the data gets from the RAM to the LCD is very simple. Data is read a byte at a time from the VRAM, and 4 bits of it are sent to the 4 LCD data lines. Either D0/D2/D4/D6 or D1/D3/D5/D7 depending on which field it is. The bits sent alternate this way every field to effect the 4 level greyscale. Thus, every 2 bits of RAM correspond to a single pixel on the LCD. When the CPU reads or writes the VRAM, it simply inserts a single clock access. This access can occur anywhere in the 6 cycle period. The video controller seems to read the LCD data on all 6 clocks, and any clock where there is a CPU access, it simply doesn't read it. This means that unless there's 6 writes or reads in a row from the CPU, it will always have valid display data. During normal operation, there is no way there can be more than 1 write to VRAM at any one time. (An interrupt or JSR would do 3 or 2 respectively, but VRAM does not sit at 0100h so this can never occur). A fun test will be to execute code out of VRAM to see how the display reacts. --------------------------------------- Cartridge pinout: (taken from svision.txt from the Mess emulator documentation, updated by me.) Cartridge connector (looking at the cartridge pins) +-------+ /RD -| 1 40 |- +5v (picture side) A0 -| 2 39 |- nc A1 -| 3 38 |- nc A2 -| 4 37 |- nc A3 -| 5 36 |- nc A4 -| 6 35 |- /WR A5 -| 7 34 |- D0 A6 -| 8 33 |- D1 A7 -| 9 32 |- D2 A8 -| 10 31 |- D3 A9 -| 11 30 |- D4 A10 -| 12 29 |- D5 A11 -| 13 28 |- D6 A12 -| 14 27 |- D7 A13 -| 15 26 |- nc A14 -| 16 25 |- nc A15 -| 17 24 |- nc A16 -| 18 23 |- nc nc -| 19 22 |- gnd nc -| 20 21 |- power ground +-------+ * A0-A16 connect to A0-A16 on the ROM/EPROM * D0-D7 connect to D0-D7 on the ROM/EPROM * /RD connects to /CE or /OE (or both) on the EPROM * /WR is not used (but could be used to run a simple latch to effect more bankswitching) * power ground must be connected to gnd for the Supervision to turn on That power ground input connects from the power source to ground on the rest of the console. The system will not power up without a cartridge installed. --------------------------------------- ASIC Pinout ----------- 1 - VRAM D5 2 - VRAM D6 3 - VRAM D7 4 - VRAM /WR 5 - Dpad Right 6 - Dpad Left 7 - Dpad Down 8 - Dpad Up 9 - B Button 10 - A Button 11 - Select Button 12 - Start Button 13 - +5V 14 - Audio Left Out 15 - Audio Right Out 16 - GND 17 - CLK Out? 18 - CPU D7 19 - CPU D6 20 - CPU D5 21 - CPU D4 22 - CPU D3 23 - CPU D2 24 - CPU D1 25 - CPU D0 26 - CPU A16 27 - CPU A15 28 - CPU A14 29 - CPU A13 30 - CPU A12 31 - CPU A11 32 - CPU A10 33 - CPU A9 34 - CPU A8 35 - CPU A7 36 - CPU A6 37 - CPU A5 38 - CPU A4 39 - CPU A3 40 - CPU A2 41 - CPU A1 42 - CPU A0 43 - WRAM /CE 44 - CPU R/W 45 - CART /CE 46 - NC 47 - Link Port D0 48 - Link Port D1 49 - Link Port D2 50 - Link Port D3 51 - LCD 9 52 - LCD 8 53 - LCD 7 54 - LCD 6 55 - LCD 5 56 - LCD 4 57 - LCD 3 58 - LCD 2 59 - LCD 1 60 - Xtal 2 61 - Xtal 1 62 - GND 63 - VRAM A0 64 - VRAM A1 65 - VRAM A2 66 - VRAM A3 67 - VRAM A4 68 - VRAM A5 69 - VRAM A6 70 - VRAM A7 71 - VRAM A8 72 - VRAM A9 73 - VRAM A10 74 - VRAM A11 75 - VRAM A12 76 - VRAM D0 77 - VRAM D1 78 - VRAM D2 79 - VRAM D3 80 - VRAM D4 --------------------------------------- That's the basics of the hardware end. Now for programming. 2000 - LCD_X_Size 2001 - LCD_Y_Size 2002 - X_Scroll 2003 - Y_Scroll 2004 - Mirror of register 2000 2005 - Mirror of register 2001 2006 - Mirror of register 2002 2007 - Mirror of register 2003 2008 - DMA Source low 2009 - DMA Source high 200A - DMA Destination low 200B - DMA Destination high 200C - DMA Length 200D - DMA Control 200E 200F 2010 - CH1_Flow (Right only) 2011 - CH1_Fhi 2012 - CH1_Vol_Duty 2013 - CH1_Length 2014 - CH2_Flow (Left only) 2015 - CH2_Fhi 2016 - CH2_Vol_Duty 2017 - CH2_Length 2018 - CH3_Addrlow 2019 - CH3_Addrhi 201A - CH3_Length 201B - CH3_Control 201C - CH3_Trigger 201D 201E 201F 2020 - Controller 2021 - Link port DDR 2022 - Link port data 2023 - IRQ Timer 2024 - Reset IRQ timer flag 2025 - Reset Sound DMA IRQ flag 2026 - System Control 2027 - IRQ Status 2028 - CH4_Freq_Vol (Left and Right) 2029 - CH4_Length 202A - CH4_Control 202B 202C - Mirror of 2028 202D - Mirror of 2029 202E - Mirror of 202A 202F ---------------------------------------------------------- Audio system ------------ 2010, 2011, 2012, and 2013 correspond to channel 1 which is a square wave on right channel 2014, 2015, 2016, and 2017 correspond to channel 2 which is a square wave on left channel 2018, 2019, 201A, 201B, and 201C correspond to the DMA channel on both output channels 2028, 2029, 202A correspond to channel 4 which is the noise wave on both output channels Square waves: ------------- CHx_Flow: 7 0 --------- FFFF FFFF F: lower 8 bits of frequency CHx_Fhi: 7 0 --------- ???? ?FFF F: Upper 3 bits of frequency CHx_Vol_Duty: 7 0 --------- ?EDD VVVV E: Enable. 1 = channel always produces sound. 0 = only plays when length reg is written D: Duty cycle: 00 - 12.5% 01 - 25% 10 - 50% 11 - 75% V: Volume. 0 = silent, F = loudest. Linear. CHx_Length: 7 0 --------- LLLL LLLL L: Length. Writing to this register triggers the sound to play for L counts if bit 6 of CHx_Vol_Duty is cleared. If that E bit is set, the length counter still runs, but it has no effect unless the E bit is cleared before the timer expires. --- Frequency is calculated using the following formula: 125000 Fout = ---------- (Freq+1) Freq is the concatenated value of the 8 lower bits and the 3 upper bits. Writing to EITHER frequency register resets the duty cycle prescaler, just like writing to Fhi does on the NES... only in this case, writing to either does it. --- The length counter works in increments of 16.384ms. This value is gotten by taking the 4000000Hz clock divided by 65536 via a 16 bit prescaler. There is a 1 clock uncertainty in the length counter, because it's decremented each time the prescaler expires. This prescaler is never reloaded or reset so the point where the length register is written determines the 1 count uncertainty. The length count is simply L+1 * 65536 cycles, with up to 65535 extra cycles added on. i.e.: If L is loaded with 10, then it will expire between (65536*11) counts and (65536*11+65535) counts. ------- DMA Channel: ------------ CH3_Addrlow: CH3_Addrehi: 7 0 --------- AAAA AAAA A: All 16 bits are the start address of the DMA audio channel. Each register holds 8 bits. CH3_Length: 7 0 --------- LLLL LLLL L: Length of the sample to play. The sample length is L * 16 bytes. For a length of 00h, 4096 samples will be played (100h * 16). CH3_Control: 7 0 --------- ?BBB LRFF B: ROM bank to use for pulling sample data These bits determine what ROM bank will be mapped into 8000-BFFF for digi audio. This overrides the bank bits on 2026, but only for digi audio. L: Output audio to left channel R: Output audio to right channel F: Playback frequency: (outputs a sample every...) 00 - 256 clocks 01 - 512 clocks 10 - 1024 clocks 11 - 2048 clocks The RAM is read at 1/2 the rate samples are outputted. The memory is read first, then the upper 4 bits are output to the DAC, and then the lower 4 bits are output, then the next byte is read, and the upper 4 bits of the next sample are output, etc. CH3_Trigger: 7 0 --------- T??? ???? T: Trigger the channel. Writing a 1 here will start the sample playing. Notes: Writing to the length and address registers set them. When the channel is triggered, via CH3_Trigger, The registers are modified. Thus, if the channel is triggered again, the address is not updated and points to the last address that was accessed. Additionally, the length counter is 00h, and the channel plays a maximum length sample (4096 bytes). ------- Noise Channel: -------------- CH4_Freq_Vol: 7 0 --------- FFFF VVVV V: Volume, 0 = silence, F = maximum, linear stepping. F: Frequency: Divisor: 0 - 500KHz 8 1 - 125KHz 32 2 - 62.5KHz 64 3 - 31.25KHz 128 4 - 15.625KHz 256 5 - 7.8125KHz 512 6 - 3.90625KHz 1024 7 - 1.953KHz 2048 8 - 976.56Hz 4096 9 - 488.28Hz 8192 A - 244.14Hz 16384 B - 122.07Hz 32768 C - 61.035Hz 65536 D - 30.52Hz 131072 E - 61.035Hz 65536 F - 30.52Hz 131072 4000000 F = --------- divisor The frequency is how often (per second) that the noise LFSR is updated. The LFSR is 15 bits long, and is tapped at bits 14 and 15 to generate a maximal length shift register that repeats after 32767 counts. Bit 0 of CH4_Noise_Con controls the length of the register. When the bit is clear, the shift register is cut down to just 7 bits, and repeats after 127 counts. CH4_Length: 7 0 --------- LLLL LLLL L: Length to play noise. Works identically to the square wave length register. CH4_Control: 7 0 --------- ???N LREP N: Noise Enable L: Left output. 1 - mix audio with left channel R: Right output. 1 - mix audio with right channel E: Channel Enable. 1 - enable noise channel continuously. 0 - use the length register P: LFSR length. 1 - 15 bit LFSR, 0 = 7 bit LFSR. Writing to this register resets the LFSR to all 1's. Writing to the other noise registers do not reset the LFSR. Audio Mixing: ------------- Audio is mixed in an interesting fashion. Each of the outputs (left and right) are only 4 bit DACs. But each channel can output up to 3 different things. (Square, noise, DMA). The hardware simply adds all three together, and clips it at 0fh. This means that if more than 1 channel is playing, they cannot be outputting the maximum level or else they can be clipped. Kinda dumb and would result in weird things occuring as well as kinda poor audio output. ---------------------------------------------------------- Controller ---------- 2020 - Controller Nothing too special here. Controller: 7 0 --------- SLAB UDLR S: Start button L: Select button A: A button B: B button U: Up on D-pad D: Down on D-pad L: Left on D-pad R: Right on D-pad Pressing a button results in that bit going LOW. Bits are high for buttons that are not pressed. (i.e. the register returns FFh when no buttons are pressed). ---------------------------------------------------------- Link Port --------- 2021 - Link port DDR 2022 - Link port data Pinout: The link port is a male DB-9 connector. The pinout is as follows (using standard DB-x pin notations as molded into the plugs/sockets) 1 - D0 2 - D1 3 - D2 4 - D3 6 - ground 8 - VCC All other pins are NC. Link Port DDR: 7 0 --------- ???? DDDD D: Data direction bits for the link port. 0 - this is an output bit 1 - this is an input bit Link Port data: 7 0 --------- ???? LLLL L: Link port bits. 0 - output a low on this link port line. 1 - output a high on this link port line. When the link port line(s) are set as inputs, they float high via 30uA current sources. The upper 4 bits on the link port data register returns open bus. I thought there was a UART on here to communicate on the link port, but it does not appear there is. ---------------------------------------------------------- DMA --- 2008 - DMA Source low 2009 - DMA Source high 200A - DMA Destination low 200B - DMA Destination high 200C - DMA Length 200D - DMA Control CAUTION: This DMA can only be used to move data from WRAM/cartridge ROM to VRAM! Attempting to move data to a non-VRAM address will cause serious problems to occur. See my findings at the bottom of the document in the DMA timing section. DMA Source low/high: 7 0 --------- SSSS SSSS S: Source address DMA Destination low/high: 7 0 --------- DDDD DDDD D: Destination address These four registers select the source and destination addresses for the DMA unit. DMA length: 7 0 --------- LLLL LLLL L: Length*16 (in bytes) This register selects how many bytes of data to move. The actual number of bytes to move is (L * 16). If the register is loaded with 0, a full 4096 bytes is moved. After a DMA occurs, the registers are updated internally, and performing another DMA will cause a full 4096 bytes to be moved, because the length register now holds 00h. The source/destination registers are incremented each transfer, and it will start transferring where it left off. DMA Control: 7 0 --------- S??? ???? S: Start DMA when written with this bit set. ---------------------------------------------------------- Interrupts & Bankswitching & System Control ------------------------------------------- 2023 - IRQ Timer 2024 - Reset IRQ timer flag 2025 - Reset Sound DMA IRQ flag 2026 - System Control 2027 - IRQ Status NMI: The NMI occurs every 65536 clock cycles (61.04Hz) regardless of the rate that the LCD refreshes. I find this interesting, because the LCD refresh is totally divorced from the NMI timing. In fact, there is no way to know what the LCD is doing from software. System Control: 7 0 --------- BBBS D?IN B: Bank select bits for 8000-BFFF. N: Enable the NMI (1 = enable) I: Enable the IRQ (1 = enable) S: IRQ Timer prescaler. 1 = divide by 16384, 0 = divide by 256 D: Display enable. 1 = enable display, 0 = disable display Writing to this register resets the LCD rendering system and makes it start rendering from the upper left corner, regardless of the bit pattern. IRQ Timer: 7 0 --------- TTTT TTTT T: IRQ Timer. Readable and writable. When a value is written to this register, the timer will start decrementing until it is 00h, then it will stay at 00h. When the timer expires, it sets a flag which triggers an IRQ. This timer is clocked by a prescaler, which is reset when the timer is written to. This prescaler can divide the system clock by 256 or 16384. Writing 00h to the IRQ Timer register results in an instant IRQ. It does not wrap to FFh and continue counting; it just stays at 00h and fires off an IRQ. IRQ Status: 7 0 --------- ???? ??DT D: DMA Audio system (1 = DMA audio finished) T: IRQ Timer expired (1 = expired) Reset IRQ timer flag: 7 0 --------- ???? ???? When this register is read, it resets the timer IRQ flag (clears the status reg bit too) Reset Sound DMA IRQ flag: 7 0 --------- ???? ???? When this register is read, it resets the audio DMA IRQ flag (clears status reg bit too) Bankswitching ------------- The bankswitching on this system is very simple. 8000-FFFF is the cartridge ROM. C000-FFFF is fixed to the last 16K bank of the game ROM. 8000-BFFF is selectable using the 3 bits on the System Control register. 0 = first 16K, 1 = second 16K, etc. ---------------------------------------------------------- LCD System ---------- 2000 - LCD_X_Size 2001 - LCD_Y_Size 2002 - X_Scroll 2003 - Y_Scroll 2004 - Mirror of register 2000 2005 - Mirror of register 2001 2006 - Mirror of register 2002 2007 - Mirror of register 2003 Frame Timing Registers ---------------------- 2000: LCD X size 2001: LCD Y size LCD X and Y size control LCD refreshing. All games program A0h / A0h into them since the LCD is 160*160 pixels. Only the upper 6 bits of LCD_X_Size are usable, though. The lower 2 bits are "don't care" bits, because the LCD size can only be changed in 4 pixel increments (due to the LCD loading 4 pixels at a time. See the LCD hardware description above). Changing LCD_X_size simply changes how many pixclk pulses are output before line latch signal is output. Frame timing changes of course, depending on how many clocks have been output. Setting this to a value less than A0h results in some of the columns (in groups of four) NOT being refreshed. On the system, the columns keep outputting what they were at the time the count was reduced. So, if the LCD has a black square on it the width of the display and the rest is white, and if the count is reduced when the LCD is scanning the black rows, those columns on the right will be solid black. If it was scanning the white area at the time, those columns will be solid white. Increasing it past A0h but less than C4h does not do anything visually; the extra bits just shift out and are not displayed. It does slow LCD timing down, however. Increasing it past C3h does do something cool: the LCD data is shown twice on the screen. The reason for this is pretty simple. Every scanline, the VRAM start address is bumped 30h. This corresponds to 192 pixels. So setting the count past 192 (C0h) results in it changing the VRAM start address increment size from 30h to 60h. Changing LCD_Y_Size controls how many scanlines are shown in the frame. After the requisite number of scanlines, the LCD frame latch signal is output and the frame polarity line is toggled. Normally, this is A0h for 160 lines. Making this number larger reduces the LCD duty cycle since each row is on for 1/LCD_Y_Size of the time. i.e. normally when it's set to A0h, each row is on for 1/160th of the time. Making it larger reduces the duty cycle further and the display gets dimmer which means you have to advance the contrast knob to see it. The frame rate also drops because of this. Decreasing it below A0h results in a higher duty cycle which means the contrast knob has to be backed off because the whole screen gets darker. This also has the negative effect of repeating the data on the display. This is because more than 1 row driver output is on at a time now, so by necessity the bottom scanline(s) will now reflect what's happening at the top of the display. This also increases the frame rate of the display. So, to summerize. Frame timing is calculated like this: Scanlinelen = ((LCD_X_Size & 0xFC) + 4) * 6 Xsize is anded with FCh because only the upper 6 bits are used, and +4 to account for the line latch pulse, and *6 due to each LCD clocking period taking 6 cycles. Framelen = Scanlinelen * LCD_Y_Size * 2 Frame length is simply the number of scanlines * the Y_Size register. --- Scrolling: ---------- 2002: X_scroll 2003: Y_scroll X_scroll and Y_scroll are used to (as you might've guessed) scroll the display information. The upper 6 bits of X_scroll control the starting offset of the VRAM buffer, and the lower 2 bits delay the bits going to the LCD by 0, 1, 2, or 3 clocks. The chip actually reads data during the line load pulse to the LCD which reads the first byte of VRAM data. This data is mostly sent through a 1 deep by 4 bit shift register, which is then run through a multiplexer to choose the appropriate 4 bits to send to the LCD. Y_Scroll is another offset added to the VRAM pointer at the start of the frame. It's Y_Scroll * 30h. Since the chip adds 30h (and sometimes 60h, see below) each scanline, this makes sense. The hardware also checks to make sure that you cannot display the last bit of VRAM, which would offset the pixels, because 48 byte scanlines do not exactly fill all 8K of VRAM. The closest number is 170. This leaves 20h bytes on the end which the hardware then skips. (most of the time. You CAN make it display these. see below) Testing: -------- First, I am setting the LCD_Size registers both to A0h, which is how all games set them. X_scroll is set to 0, and Y_Scroll is set to AAh. The display looks exactly like it does for a Y_Scroll value of 0, so this tells me the check occurs when the offset used to count through VRAM is updated (either loaded, or 30/60h are added). Adjusting X_Scroll when Y_Scroll = AAh results in expected behaviour. If X_Size is changed to a value greater than C3h, this test is still performed, but it might be skipped because of the hardware adding 60h each scanline instead of 30h. The Y_Scroll still changes the inital offset the same way regardless of X_Size value. Going by how this works, I can generate some pseudocode to reproduce the behaviour: // inputs int8 X_Scroll; // X scroll register int8 Y_Scroll; // Y scroll register int8 LCD_X_Size; // X size register int8 LCD_Y_Size; // Y size register // internal variables int16 Vstart; // starting VRAM address for the scanline int16 Vtemp; // temporary VRAM address that is incremented in the scanline int8 oldpix; // stores the last 4 pixels read from VRAM int16 pixels; // the current 4 pixels read, and the last 4 pixels read int8 outpixels; // the 4 output pixels int8 X; // X count int8 Y; // Y count Vstart = (Y_Scroll * 0x30) & 0x1FFF; // initial V start value (limit to 8K size) if (Vstart == 0x1FE0) Vstart = 0; // if it has wrapped, perform the wrap here for (Y = 1; Y < LCD_Y_Size; Y++) // do Y_Size scanlines { Vtemp = Vstart + (X_Scroll >> 2); // start address for this scanline oldpix = buffer[Vtemp]; // get the pipeline rolling Vtemp++; for (X = 1; X < (LCD_X_Size >> 2); X++) { pixels = (buffer[Vtemp] << 8) | oldpix; // mingle old pixels from last read with new ones outpixels = pixels >> ((X_Scroll & 0x03) << 1); // get the correct 4 pixels (see below) plotpixels(outpixels); // display them oldpix = pixels >> 8; // move current pixels into old pixels Vtemp++; } Vstart += ((LCD_X_size > 0xC3) ? 0x60 : 0x30) & 0x1FFF; // add 30/60 and keep in 8K range if (Vstart == 0x1FE0) Vstart = 0; } "plotpixels" is the routine that would plot 4 pixels to the display buffer or LCD or what have you. The format of the data is simply 4 pixels packed into a byte. bits 0/1 are one pixel, bits 2/3 are the next, and so on. The above code does not take into account clearing/setting the unused pixels on the screen, but I don't think this has to be done for an emulator. ---------------------------------------------------------- DMA Timing ---------- A bunch of headers were soldered on and I connected up A0-A5 cart /CE, R/W, and my 1ffe/1fff decode output to the logic analyzer. channel setup: -------------- 0-5 = A0-A5 6 = cart /CE 7 = 1FFE/1FFF decode 8 = R/W To test the DMA, I set the DMA start address to FFFF, destination address to 40FF, length to 1 and then started it up and recorded the results on the logic analyzer. Turns out that the DMA unit fails to operate properly, unless the destination is VRAM. If the destination is not VRAM, the DMA fails, and ends up clobbering WRAM (if the read pointer is indexing it). Attempting to DMA VRAM to VRAM causes corruption too, because the data is being overwritten. The DMA is extremely fast. It copies 5 bytes to the VRAM every 6 clocks; the 6th clock is for the LCD system to read VRAM for display. Copying continues until all bytes are copied. On the idle cycle (every 6 clocks) the CPU is allowed to run for that cycle. Audio DMA Timing ---------------- Nothing special here. When the Audio DMA Trigger register is written to, a flag is set (I call it "ADMA playing"). The first 2 samples are fetched when the prescaler overflows. The first sample (upper 4 bits of the byte) are then output. After the prescaler expires again, the lower 4 bits of the byte are output. After another prescaler expiration, the next byte is fetched, and so on until the complete sample is played. The DMA fetch only takes a single cycle to perform. ================================================ FILE: src/cross_lib/sound/cc65/supervision/supervision_sounds.c ================================================ #include #include "standard_libs.h" #include // struct __sv_tone { // unsigned delay; // Fhx_Flow and hi // unsigned char control; // Chx_Vol_duty // unsigned char timer; // Chx_Length // }; // #define SV_RIGHT (*(struct __sv_tone*)0x2010) // #define SV_LEFT (*(struct __sv_tone*)0x2014) // struct __sv_noise { // unsigned char volume; /* and frequency */ // unsigned char timer; // unsigned char control; // }; // #define SV_NOISE (*(struct __sv_noise*)0x2028) void play_frequency(uint16_t value) { SV_RIGHT.delay = 10000+value; SV_LEFT.delay = 10000+value; SV_RIGHT.control = 0x3F; SV_LEFT.control = 0x3F; SV_RIGHT.timer = 2; SV_LEFT.timer = 2; } ================================================ FILE: src/cross_lib/sound/cc65/supervision/supervision_sounds.h ================================================ #ifndef _SUPERVISION_SOUNDS #define _SUPERVISION_SOUNDS void play_frequency(uint16_t value); #define _XL_EXPLOSION_SOUND() play_frequency(350) #define _XL_PING_SOUND() play_frequency(200) #define _XL_SHOOT_SOUND() play_frequency(600) #define _XL_TOCK_SOUND() play_frequency(90) #define _XL_TICK_SOUND() play_frequency(150) #define _XL_ZAP_SOUND() play_frequency(1200) #endif // _SUPERVISION_SOUNDS ================================================ FILE: src/cross_lib/sound/cc65/vic20/vic20_explosion_sound.c ================================================ /* --------------------------------------------------------------------------------------- */ // // CROSS CHASE by Fabrizio Caruso // // Fabrizio_Caruso@hotmail.com // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from // the use of this software. // Permission is granted to anyone to use this software for non-commercial applications, // subject to the following restrictions: // 1. The origin of this software must not be misrepresented; you must not // claim that you wrote the original software. If you use this software in // a product, an acknowledgment in the product documentation would be // appreciated but is not required. // 2. Altered source versions must be plainly marked as such, and must not // be misrepresented as being the original software. // 3. This notice may not be removed or altered from any source distribution. /* --------------------------------------------------------------------------------------- */ #include #include "cross_lib.h" #include "vic20_explosion_sound.h" #define FREQ 0x80 #define VOL 0x08 void _explosion_sound(void) { // uint8_t i; // uint8_t j; VIC.noise = FREQ; VIC.volume_color |= VOL; // for(i=0;i<254;++i) // { // } _XL_SLOW_DOWN(100); // __asm__("NOP"); // __asm__("NOP"); // __asm__("NOP"); // __asm__("NOP"); // __asm__("NOP"); // __asm__("NOP"); // __asm__("NOP"); // __asm__("NOP"); // __asm__("NOP"); // __asm__("NOP"); VIC.volume_color &= 0x00; }; ================================================ FILE: src/cross_lib/sound/cc65/vic20/vic20_explosion_sound.h ================================================ /* --------------------------------------------------------------------------------------- */ // // CROSS CHASE by Fabrizio Caruso // // Fabrizio_Caruso@hotmail.com // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from // the use of this software. // Permission is granted to anyone to use this software for non-commercial applications, // subject to the following restrictions: // 1. The origin of this software must not be misrepresented; you must not // claim that you wrote the original software. If you use this software in // a product, an acknowledgment in the product documentation would be // appreciated but is not required. // 2. Altered source versions must be plainly marked as such, and must not // be misrepresented as being the original software. // 3. This notice may not be removed or altered from any source distribution. /* --------------------------------------------------------------------------------------- */ #ifndef _VIC_SOUNDS #define _VIC_SOUNDS #include #define _XL_PING_SOUND() _explosion_sound() #define _XL_TOCK_SOUND() _explosion_sound() #define _XL_TICK_SOUND() _explosion_sound() void _explosion_sound(void); #define _XL_SHOOT_SOUND() _explosion_sound() #define _XL_EXPLOSION_SOUND() _explosion_sound() #define _XL_ZAP_SOUND() _explosion_sound() #endif // _VIC_SOUNDS ================================================ FILE: src/cross_lib/sound/cc65/vic20/vic20_sounds.c ================================================ /* --------------------------------------------------------------------------------------- */ // // CROSS CHASE by Fabrizio Caruso // // Fabrizio_Caruso@hotmail.com // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from // the use of this software. // Permission is granted to anyone to use this software for non-commercial applications, // subject to the following restrictions: // 1. The origin of this software must not be misrepresented; you must not // claim that you wrote the original software. If you use this software in // a product, an acknowledgment in the product documentation would be // appreciated but is not required. // 2. Altered source versions must be plainly marked as such, and must not // be misrepresented as being the original software. // 3. This notice may not be removed or altered from any source distribution. /* --------------------------------------------------------------------------------------- */ #include #include #include "sleep_macros.h" // #define _pause() _XL_SLOW_DOWN(100) void _pause(void) { _XL_SLOW_DOWN(100); // uint8_t i; // for(i=0;i<254;++i) // { // } } void silence(void) { VIC.noise = 0x00; VIC.voice1 = 0x00; VIC.volume_color = 0x00; } void _explosion_sound(uint8_t freq, uint8_t duration) { uint8_t j; VIC.noise = freq; VIC.volume_color |= 15; for(j=0;j void _ping_sound(uint8_t freq); #define _XL_PING_SOUND() _ping_sound(0xF0); #define _XL_TOCK_SOUND() _ping_sound(0x08); #define _XL_TICK_SOUND() _ping_sound(0xC0); void _explosion_sound(uint8_t freq, uint8_t vol); #define _XL_SHOOT_SOUND() _explosion_sound(0x50, 0x0B); #define _XL_EXPLOSION_SOUND() _explosion_sound(0x80, 0x0F); void _XL_ZAP_SOUND(); #endif // _VIC_SOUNDS ================================================ FILE: src/cross_lib/sound/gcc4ti99/ti99_sounds.c ================================================ #include "cross_lib.h" #include "ti99_sounds.h" #include // period must be in the range of 1 (highest pitch) to 1023 (lowest pitch) void CLICK(uint16_t duration, uint16_t period) { volatile uint16_t i; SOUND=TONE1_VOL; SOUND=TONE1_FREQ|(period&0xf); SOUND=(period>>4)&0xff; for(i=0;i void _XL_ZAP_SOUND(); void NOISE(uint16_t duration, uint8_t mode); void CLICK(uint16_t duration, uint16_t period); #define _XL_EXPLOSION_SOUND() NOISE(1000,4) #define _XL_SHOOT_SOUND() NOISE(200,5) #define _XL_PING_SOUND() CLICK(550,900) #define _XL_TICK_SOUND() CLICK(450,700) #define _XL_TOCK_SOUND() CLICK(350,300) #endif // __TI99_SOUNDS ================================================ FILE: src/cross_lib/sound/generic/ascii_sounds.h ================================================ #ifndef __ASCII_SOUNDS #define __ASCII_SOUNDS #if defined(__MO5__) || defined(__TO7__) #define BEEP_ASCII() PUTCH(7) #else #define BEEP_ASCII() putchar('\a') #endif #define _XL_EXPLOSION_SOUND() BEEP_ASCII() #define _XL_ZAP_SOUND() BEEP_ASCII() #define _XL_SHOOT_SOUND() BEEP_ASCII() #define _XL_PING_SOUND() BEEP_ASCII() #define _XL_TICK_SOUND() BEEP_ASCII() #define _XL_TOCK_SOUND() BEEP_ASCII() #endif // __ASCII_SOUNDS ================================================ FILE: src/cross_lib/sound/generic/bit_bang_sounds.c ================================================ #include "cross_lib.h" #include "bit_bang_sounds.h" // #if defined(__APPLE2__) || defined(__APPLE2ENH__) // #define _click() \ // __asm__("LDA $C030") // #else #if defined(__APPLE2__) || defined(__APPLE2ENH__) || defined(__AGAT__) void _click(void) { uint8_t k; k = PEEK(BIT_BANG_ADDR); } #elif defined(__MC10__) void _click(void) { POKE(0xBFFF,0x80); POKE(0xBFFF,0x00); } #endif void _XL_ZAP_SOUND(void) { uint16_t i; uint8_t j; for(i=1;i<6;++i) { CLICK(50-i,i); for(j=0;j<5;++j){}; } } void CLICK(uint16_t duration, uint8_t period) { uint16_t i; uint8_t j; for(i=0;i0;--j) { for(i=0;i<90;++i){}; generatetone(freq,80,j); } generatetone(0,0,0); } void _explosion_sound(uint8_t range, uint8_t duration) { uint16_t i; uint8_t j; generatenoise(range,7); for(j=7;j>0;--j) { for(i=0;i #if !defined(_XL_NO_SOUND) void _ping_sound(uint8_t freq); #define _XL_PING_SOUND() _ping_sound(0x75) #define _XL_TOCK_SOUND() _ping_sound(0x20) #define _XL_TICK_SOUND() _ping_sound(0x45) void _explosion_sound(uint8_t range, uint8_t duration); #define _XL_SHOOT_SOUND() _explosion_sound(0x4,30) #define _XL_EXPLOSION_SOUND() _explosion_sound(0x2,80) void _XL_ZAP_SOUND(void); #else #define _XL_PING_SOUND() #define _XL_TOCK_SOUND() #define _XL_TICK_SOUND() #define _XL_SHOOT_SOUND() #define _XL_EXPLOSION_SOUND() #endif #endif // _COMX_SOUNDS ================================================ FILE: src/cross_lib/sound/sound_macros.h ================================================ /* --------------------------------------------------------------------------------------- */ // // CROSS CHASE by Fabrizio Caruso // // Fabrizio_Caruso@hotmail.com // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from // the use of this software. // Permission is granted to anyone to use this software for non-commercial applications, // subject to the following restrictions: // 1. The origin of this software must not be misrepresented; you must not // claim that you wrote the original software. If you use this software in // a product, an acknowledgment in the product documentation would be // appreciated but is not required. // 2. Altered source versions must be plainly marked as such, and must not // be misrepresented as being the original software. // 3. This notice may not be removed or altered from any source distribution. /* --------------------------------------------------------------------------------------- */ #ifndef _SOUNDS_MACROS #define _SOUNDS_MACROS #if !defined(_XL_NO_SOUND) # if defined(__BIT_BANG_SOUND) #include "z88dk_bit_bang_sounds.h" #elif defined(__PSG_SOUND) #include "psg_sounds.h" #elif defined(ASCII_SOUNDS) #define _XL_INIT_SOUND() #include "ascii_sounds.h" #elif defined(__TI99__) #include "ti99_sounds.h" #elif defined(__ACE__) #include "z88dk_bit_bang_sounds.h" #elif (defined(__ATARI__) ) #include "pokey_sounds.h" #elif defined(__ATARI5200__) #include "pokey_sounds.h" #elif defined(__ATMOS__) #include "atmos_sounds.h" #elif defined(__AQUARIUS__) #include "z88dk_bit_bang_sounds.h" #elif defined(__BEE__) #include "z88dk_bit_bang_sounds.h" #elif defined(__C16__) #include "c264_sounds.h" #elif defined(__C64__) #include "sid_sounds.h" #elif defined(__C128__) #include "sid_sounds.h" #elif defined(__CBM510__) #include "sid_sounds.h" // #elif defined(__COLECO__) // #include "psg_sounds.h" // #elif defined(__COLECO_ADAM__) // #include "psg_sounds.h" #elif (defined(__COMX__) || defined(__PECOM__) || defined(__TMC600__) || defined(__CIDELSA__)) #include "comx_sounds.h" #elif defined(__CPC__) #include "psg_sounds.h" #elif defined(__MC1000__) #include "z88dk_bit_bang_sounds.h" #elif defined(__MSX__) #include "psg_sounds.h" #elif defined(__RX78__) #include "psg_sounds.h" #elif defined(__SPECTRUM__) #include "z88dk_bit_bang_sounds.h" #elif defined(__SV8000__) #include "psg_sounds.h" #elif defined(__SVI__) #include "psg_sounds.h" #elif defined(__VG5K__) #include "z88dk_bit_bang_sounds.h" #elif defined(__VIC20__) && !defined(__VIC20_UNEXPANDED) #include "vic20_sounds.h" #elif defined(__VIC20__) && defined(__VIC20_UNEXPANDED) #include "vic20_explosion_sound.h" #elif defined(__VZ__) #include "z88dk_bit_bang_sounds.h" #elif defined(__WINCMOC__) #include "wincmoc_sounds.h" #elif (defined(__COCO__) || defined(__DRAGON__)) #include "dac_sounds.h" #elif defined(__COCO3__) #include "dac_sounds.h" #elif (defined(__MO5__) || defined(__TO7__)) #include "dac_sounds.h" #elif defined(__GAMATE__) #include "gamate_sounds.h" #elif defined(__CREATIVISION__) #include "creativision_sounds.h" #elif defined(__GB__) #include "gb_sounds.h" #elif (defined(__APPLE2__) || defined(__APPLE2ENH__) || defined(__AGAT__)) #include "bit_bang_sounds.h" #elif defined(__PET__) #include "pet_sounds.h" #elif defined(__ATARI_LYNX__) #include "atari_lynx_sounds.h" #elif defined(__MC10__) #include "bit_bang_sounds.h" #elif defined(__ATARI7800__) #include "atari7800_sounds.h" // #elif defined(__SUPERVISION__) // #include "supervision_sounds.h" #elif defined(__BBC__) #include "bbc_sounds.h" #else #define _XL_NO_SOUND #endif #endif #if defined(_XL_NO_SOUND) #define _XL_EXPLOSION_SOUND() #define _XL_PING_SOUND() #define _XL_SHOOT_SOUND() #define _XL_TICK_SOUND() #define _XL_TOCK_SOUND() #define _XL_ZAP_SOUND() #endif #if !defined(_XL_NO_SOUND) && (defined(__GB__) \ || defined(__MO5__) || defined(__TO7__) || defined(__COCO3__) || defined(__COCO__) || defined(__DRAGON__) \ || defined(__MSX__)) || defined(__PSG_SOUND) // _XL_INIT_SOUND() needs to be defined void _XL_INIT_SOUND(); #else #define _XL_INIT_SOUND() #endif #endif // _SOUNDS_MACROS ================================================ FILE: src/cross_lib/sound/vbcc/bbc/bbc_sounds.c ================================================ #include "bbc.h" bbc_sound ping_snd = {1,-15,100,2}; bbc_sound tick_snd = {1,-15,50,1}; bbc_sound tock_snd = {1,-15,30,1}; bbc_sound shoot_snd = {0,-15,40,1}; bbc_sound explosion_snd = {0,-15,20,2}; ================================================ FILE: src/cross_lib/sound/vbcc/bbc/bbc_sounds.h ================================================ #include "bbc.h" extern bbc_sound ping_snd; extern bbc_sound tick_snd; extern bbc_sound tock_snd; extern bbc_sound explosion_snd; extern bbc_sound shoot_snd; #define _XL_EXPLOSION_SOUND() OSSOUND(&explosion_snd) #define _XL_PING_SOUND() OSSOUND(&ping_snd) #define _XL_SHOOT_SOUND() OSSOUND(&shoot_snd) #define _XL_TICK_SOUND() OSSOUND(&tick_snd) #define _XL_TOCK_SOUND() OSSOUND(&tock_snd) #define _XL_ZAP_SOUND() OSSOUND(&ping_snd) ================================================ FILE: src/cross_lib/sound/z88dk/bit_bang/z88dk_bit_bang_sounds.h ================================================ /*****************************************************************************/ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* (C) 2017 Fabrizio Caruso */ /* */ /* */ /* EMail: Fabrizio_Caruso@hotmail.com */ /* */ /* */ /* This software is provided 'as-is', without any expressed or implied */ /* warranty. In no event will the authors be held liable for any damages */ /* arising from the use of this software. */ /* */ /* Permission is granted to anyone to use this software for any purpose, */ /* including commercial applications, and to alter it and redistribute it */ /* freely, subject to the following restrictions: */ /* */ /* 1. The origin of this software must not be misrepresented; you must not */ /* claim that you wrote the original software. If you use this software */ /* in a product, an acknowledgment in the product documentation would be */ /* appreciated but is not required. */ /* 2. Altered source versions must be plainly marked as such, and must not */ /* be misrepresented as being the original software. */ /* 3. This notice may not be removed or altered from any source */ /* distribution. */ /* */ /*****************************************************************************/ /* bit_fx(0) Short hi-pitch decreasing "gulp/fall" sound bit_fx(1) Fast increasing scale bit_fx(2) Fast increasing squeak, mid duration, high pitch bit_fx(3) Crash sound, mid duration bit_fx(4) Fast increasing squeak/jump, short duration bit_fx(5) Short two tones clackson sound bit_fx(6) Two tones mid/high pitch bright beep bit_fx(7) Medium duration moving down, then up bit_fx2(0) Sort of electronic synth, mid-low tone, mid duration bit_fx2(1) Mid duration low tone, beating waves effect bit_fx2(2) Quick low pitch electronic buzz/noise bit_fx2(3) Long two tones truck clackson bit_fx2(4) Two tones increasing sound, electr. fx, mid duration bit_fx2(5) Two tones bounce sound bit_fx2(6) Alt. two tones bounce sound bit_fx2(7) Long low explosion sound bit_fx3(0) Quick noisy high pitch buzz / break noise bit_fx3(1) Longer very noisy high pitch buzz bit_fx3(2) Very quick low electronic noise / explosion / drum bit_fx3(3) Short low explosion sound bit_fx3(4) Electronic zap, mid duration bit_fx3(5) Noisy high pitch short increasing sound bit_fx3(6) Low level noise (AM radio noise) bit_fx3(7) Quick high pitch tremolo sound bit_fx4(0) Very quick squeaky sound bit_fx4(1) Tape rewind effect, long duration bit_fx4(2) Fast squeak/bounce/duck sound bit_fx4(3) Fall-down, mid duration bit_fx4(4) High pitch fall-down sound, long duration bit_fx4(5) Short high pitch slightly noisy decreasing sound bit_fx4(6) Short jump sound bit_fx4(7) Very quick duck squeak extern void __LIB__ bit_beep(int duration, int period) __smallc; */ #ifndef __BIT_BANG_SOUNDS #define __BIT_BANG_SOUNDS #include // TODO: Remove these HACKS #if defined(__ACE__) #define _XL_EXPLOSION_SOUND() bit_fx3(3) #elif defined(__MC1000__) #define _XL_EXPLOSION_SOUND() bit_fx(1) #elif defined(__SC3000__) #define _XL_EXPLOSION_SOUND() bit_fx3(3) #else #define _XL_EXPLOSION_SOUND() bit_fx3(0) // TODO: Improve this sound #endif // TODO: Remove these HACKS #if defined(__M5__) || defined(__SC3000__) #define _XL_ZAP_SOUND() bit_fx3(0) #define _XL_SHOOT_SOUND() bit_fx3(0) #else #define _XL_ZAP_SOUND() bit_fx(7) #define _XL_SHOOT_SOUND() bit_fx3(2) #endif #define _XL_PING_SOUND() bit_beep(70,3) // bit_fx3(3) // bit_beep(40,20) #define _XL_TICK_SOUND() bit_beep(20,20) // bit_fx(0) // bit_beep(40,40) #define _XL_TOCK_SOUND() bit_beep(20,40) #endif // __BIT_BANG_SOUNDS ================================================ FILE: src/cross_lib/sound/z88dk/gb/gb_sounds.c ================================================ // see https://github.com/bwhitman/pushpin/blob/master/src/gbsound.txt // chanel 1 register 0, Frequency sweep settings // 7 Unused // 6-4 Sweep time(update rate) (if 0, sweeping is off) // 3 Sweep Direction (1: decrease, 0: increase) // 2-0 Sweep RtShift amount (if 0, sweeping is off) // 0001 0110 is 0x16, sweet time 1, sweep direction increase, shift ammount per step 110 (6 decimal) // NR10_REG = 0x16; // chanel 1 register 1: Wave pattern duty and sound length // Channels 1 2 and 4 // 7-6 Wave pattern duty cycle 0-3 (12.5%, 25%, 50%, 75%), duty cycle is how long a quadrangular wave is "on" vs "of" so 50% (2) is both equal. // 5-0 sound length (higher the number shorter the sound) // 01000000 is 0x40, duty cycle 1 (25%), wave length 0 (long) // NR11_REG = 0x40; // chanel 1 register 2: Volume Envelope (Makes the volume get louder or quieter each "tick") // On Channels 1 2 and 4 // 7-4 (Initial) Channel Volume // 3 Volume sweep direction (0: down; 1: up) // 2-0 Length of each step in sweep (if 0, sweeping is off) // NOTE: each step is n/64 seconds long, where n is 1-7 // 0111 0011 is 0x73, volume 7, sweep down, step length 3 // NR12_REG = 0x73; // chanel 1 register 3: Frequency LSbs (Least Significant bits) and noise options // for Channels 1 2 and 3 // 7-0 8 Least Significant bits of frequency (3 Most Significant Bits are set in register 4) // NR13_REG = 0x00; // chanel 1 register 4: Playback and frequency MSbs // Channels 1 2 3 and 4 // 7 Initialize (trigger channel start, AKA channel INIT) (Write only) // 6 Consecutive select/length counter enable (Read/Write). When "0", regardless of the length of data on the NR11 register, sound can be produced consecutively. When "1", sound is generated during the time period set by the length data contained in register NR11. After the sound is ouput, the Sound 1 ON flag, at bit 0 of register NR52 is reset. // 5-3 Unused // 2-0 3 Most Significant bits of frequency // 1100 0011 is 0xC3, initialize, no consecutive, frequency = MSB + LSB = 011 0000 0000 = 0x300 // NR14_REG = 0xC3; #include "standard_libs.h" #include "gb_sounds.h" #include void _XL_INIT_SOUND(void) { NR52_REG = 0x80; NR50_REG = 0x77; NR51_REG = 0xFF; } void _XL_ZAP_SOUND(void) { uint8_t i; uint8_t j; NR10_REG = 0x36; NR11_REG = 0x4F; NR12_REG = 0x73; NR13_REG = 0x80; NR14_REG = 0xC4; for(i=0;i<0x80;++i) { NR13_REG = 0x80+i; for(j=0;j<8;++j) { } } } void sound(uint8_t freq_msb) { NR10_REG = 0x16; NR11_REG = 0x4F; NR12_REG = 0x73; NR13_REG = 0x00; NR14_REG = 0xC0 | freq_msb; } ================================================ FILE: src/cross_lib/sound/z88dk/gb/gb_sounds.h ================================================ /*****************************************************************************/ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* (C) 2017 Fabrizio Caruso */ /* */ /* */ /* EMail: Fabrizio_Caruso@hotmail.com */ /* */ /* */ /* This software is provided 'as-is', without any expressed or implied */ /* warranty. In no event will the authors be held liable for any damages */ /* arising from the use of this software. */ /* */ /* Permission is granted to anyone to use this software for any purpose, */ /* including commercial applications, and to alter it and redistribute it */ /* freely, subject to the following restrictions: */ /* */ /* 1. The origin of this software must not be misrepresented; you must not */ /* claim that you wrote the original software. If you use this software */ /* in a product, an acknowledgment in the product documentation would be */ /* appreciated but is not required. */ /* 2. Altered source versions must be plainly marked as such, and must not */ /* be misrepresented as being the original software. */ /* 3. This notice may not be removed or altered from any source */ /* distribution. */ /* */ /*****************************************************************************/ #ifndef __GB_SOUNDS #define __GB_SOUNDS #include #include "standard_libs.h" // NR52_REG = 0x80; is 1000 0000 in binary and turns on sound // NR50_REG = 0x77; sets the volume for both left and right channel just set to max 0x77 // NR51_REG = 0xFF; is 1111 1111 in binary, select which chanels we want to use in this case all of them. One bit for the L one bit for the R of all four channels // see https://github.com/bwhitman/pushpin/blob/master/src/gbsound.txt // chanel 1 register 0, Frequency sweep settings // 7 Unused // 6-4 Sweep time(update rate) (if 0, sweeping is off) // 3 Sweep Direction (1: decrease, 0: increase) // 2-0 Sweep RtShift amount (if 0, sweeping is off) // 0001 0110 is 0x16, sweet time 1, sweep direction increase, shift ammount per step 110 (6 decimal) // NR10_REG = 0x16; // chanel 1 register 1: Wave pattern duty and sound length // Channels 1 2 and 4 // 7-6 Wave pattern duty cycle 0-3 (12.5%, 25%, 50%, 75%), duty cycle is how long a quadrangular wave is "on" vs "of" so 50% (2) is both equal. // 5-0 sound length (higher the number shorter the sound) // 01000000 is 0x40, duty cycle 1 (25%), wave length 0 (long) // NR11_REG = 0x40; // chanel 1 register 2: Volume Envelope (Makes the volume get louder or quieter each "tick") // On Channels 1 2 and 4 // 7-4 (Initial) Channel Volume // 3 Volume sweep direction (0: down; 1: up) // 2-0 Length of each step in sweep (if 0, sweeping is off) // NOTE: each step is n/64 seconds long, where n is 1-7 // 0111 0011 is 0x73, volume 7, sweep down, step length 3 // NR12_REG = 0x73; // chanel 1 register 3: Frequency LSbs (Least Significant bits) and noise options // for Channels 1 2 and 3 // 7-0 8 Least Significant bits of frequency (3 Most Significant Bits are set in register 4) // NR13_REG = 0x00; // chanel 1 register 4: Playback and frequency MSbs // Channels 1 2 3 and 4 // 7 Initialize (trigger channel start, AKA channel INIT) (Write only) // 6 Consecutive select/length counter enable (Read/Write). When "0", regardless of the length of data on the NR11 register, sound can be produced consecutively. When "1", sound is generated during the time period set by the length data contained in register NR11. After the sound is ouput, the Sound 1 ON flag, at bit 0 of register NR52 is reset. // 5-3 Unused // 2-0 3 Most Significant bits of frequency // 1100 0011 is 0xC3, initialize, no consecutive, frequency = MSB + LSB = 011 0000 0000 = 0x300 // NR14_REG = 0xC3; void sound(uint8_t freq_msb); #define _XL_EXPLOSION_SOUND() sound(1) //#define _XL_ZAP_SOUND() sound(6) void _XL_ZAP_SOUND(void); #define _XL_SHOOT_SOUND() sound(2); #define _XL_PING_SOUND() sound(5); #define _XL_TICK_SOUND() sound(4); #define _XL_TOCK_SOUND() sound(3); #endif // __GB_SOUNDS ================================================ FILE: src/cross_lib/sound/z88dk/psg/ay-3-8910_psg_sounds.c ================================================ /* --------------------------------------------------------------------------------------- */ // // CROSS CHASE by Fabrizio Caruso // // Fabrizio_Caruso@hotmail.com // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from // the use of this software. // Permission is granted to anyone to use this software for non-commercial applications, // subject to the following restrictions: // 1. The origin of this software must not be misrepresented; you must not // claim that you wrote the original software. If you use this software in // a product, an acknowledgment in the product documentation would be // appreciated but is not required. // 2. Altered source versions must be plainly marked as such, and must not // be misrepresented as being the original software. // 3. This notice may not be removed or altered from any source distribution. /* --------------------------------------------------------------------------------------- */ #if !defined(_XL_NO_SOUND) #include "psg_sounds.h" #include #include // PSG code for AY-3-8910 /* R0 Channel A Period pa7 pa6 pa5 pa4 pa3 pa2 pa1 pa0 R1 - - - - paB paA pa9 pa8 R2 Channel B Period pb7 pb6 pb5 pb4 pb3 pb2 pb1 pb0 R3 - - - - pbB pbA pb9 pb8 R4 Channel C Period pc7 pc6 pc5 pc4 pc3 pc2 pc1 pc0 R5 - - - - pcB pcA pc9 pc8 R6 Noise Tone - - - n4 n3 n2 n1 n0 R7 /Enable Port B Dir. Port A Dir. C Noise B Noise A Noise C Tone B Tone A Tone R8 Channel A Volume - - - A Mode va3 va2 va1 va0 R9 Channel B Volume - - - B Mode vb3 vb2 vb1 vb0 R10 Channel C Volume - - - C Mode vc3 vc2 vc1 vc0 R11 Envelope Period ep7 ep6 ep5 ep4 ep3 ep2 ep1 ep0 R12 epF epE epD epC epB epA ep9 ep8 R13 Envelope Wave Shape - - - - es3 es2 es1 es0 R14 I/O Port A Cas Input Kbd Mode Joy Trg.B Joy Trg.A Joy Right Joy Left Joy Back Joy Fwd R15 I/O Port B Kana LED Joy Sel Pulse 2 Pulse 1 1 1 1 1 */ #define A_PERIOD_LOW 0 #define A_PERIOD_HI 1 #define B_PERIOD_LOW 2 #define B_PERIOD_HI 3 #define C_PERIOD_LOW 4 #define C_PERIOD_HI 5 #define NOISE 6 #define CONTROL 7 #define A_VOLUME 8 #define B_VOLUME 9 #define C_VOLUME 10 #define ENV_PERIOD_LOW 11 #define ENV_PERIOD_HI 12 #define ENV_WAVE 13 #define POKE(addr,val) (*(uint8_t*) (addr) = (val)) void _XL_INIT_SOUND(void) { #if defined(__MSX__) POKE(0xF3DB,0); #endif psg_init(); } #if defined(__CPC__) #define SAFE_PORT_A_DIRECTION 0x40 #else #define SAFE_PORT_A_DIRECTION 0x00 #endif void _XL_ZAP_SOUND(void) { uint8_t i; uint8_t j; set_psg(A_VOLUME,15); set_psg(A_PERIOD_LOW,255); set_psg(A_PERIOD_HI, 15); set_psg(CONTROL, 0xFF - 0x01 - SAFE_PORT_A_DIRECTION); for(i=0;i<16;i++) { set_psg(A_PERIOD_HI,15-i); for(j=0;j<150U;++j) { } } set_psg(A_VOLUME,0); } void _ping_sound(uint8_t freq) { uint8_t i; set_psg(A_VOLUME,15); set_psg(A_PERIOD_LOW,255); set_psg(A_PERIOD_HI, 15 - (freq>>4)); set_psg(CONTROL, 0xFF - 0x01 - SAFE_PORT_A_DIRECTION); // -0x40 is necessary for the CPC for(i=0;i<250U;++i) { } for(i=0;i<250U;++i) { } set_psg(A_VOLUME,0); } void _explosion_sound(uint8_t freq) { uint8_t i; // uint8_t j; set_psg(NOISE,15); set_psg(A_VOLUME,15); set_psg(A_PERIOD_LOW,0); set_psg(A_PERIOD_HI, 15 - (freq>>4)); set_psg(CONTROL, 0xFF - 0x08 - SAFE_PORT_A_DIRECTION); for(i=0;i<16;i++) { set_psg(A_VOLUME,15-i); // for(j=0;j<40;++j) // { // } } // set_psg(A_VOLUME,0); } #endif ================================================ FILE: src/cross_lib/sound/z88dk/psg/psg_sounds.h ================================================ /* --------------------------------------------------------------------------------------- */ // // CROSS CHASE by Fabrizio Caruso // // Fabrizio_Caruso@hotmail.com // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from // the use of this software. // Permission is granted to anyone to use this software for non-commercial applications, // subject to the following restrictions: // 1. The origin of this software must not be misrepresented; you must not // claim that you wrote the original software. If you use this software in // a product, an acknowledgment in the product documentation would be // appreciated but is not required. // 2. Altered source versions must be plainly marked as such, and must not // be misrepresented as being the original software. // 3. This notice may not be removed or altered from any source distribution. /* --------------------------------------------------------------------------------------- */ // PSG code for AY-3-8910 #ifndef _PSG_SOUNDS #define _PSG_SOUNDS #include // void _XL_INIT_SOUND(void); void _ping_sound(uint8_t freq); #define _XL_PING_SOUND() _ping_sound(0xF0); #define _XL_TOCK_SOUND() _ping_sound(0x02); #define _XL_TICK_SOUND() _ping_sound(0xA0); void _explosion_sound(uint8_t freq); #define _XL_SHOOT_SOUND() _explosion_sound(0xF0); #define _XL_EXPLOSION_SOUND() _explosion_sound(0x80); void _XL_ZAP_SOUND(void); #endif // _PSG_SOUNDS ================================================ FILE: src/cross_lib/sound/z88dk/psg/sn76489a_psg_sounds.c ================================================ /* --------------------------------------------------------------------------------------- */ // // CROSS CHASE by Fabrizio Caruso // // Fabrizio_Caruso@hotmail.com // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from // the use of this software. // Permission is granted to anyone to use this software for non-commercial applications, // subject to the following restrictions: // 1. The origin of this software must not be misrepresented; you must not // claim that you wrote the original software. If you use this software in // a product, an acknowledgment in the product documentation would be // appreciated but is not required. // 2. Altered source versions must be plainly marked as such, and must not // be misrepresented as being the original software. // 3. This notice may not be removed or altered from any source distribution. /* --------------------------------------------------------------------------------------- */ // PSG code for AY-3-8910 #if !defined(_XL_NO_SOUND) #include "psg_sounds.h" #include #include #define A_PERIOD_LOW 0 #define A_PERIOD_HI 1 #define B_PERIOD_LOW 2 #define B_PERIOD_HI 3 #define C_PERIOD_LOW 4 #define C_PERIOD_HI 5 #define NOISE 6 #define CONTROL 7 #define A_VOLUME 8 #define B_VOLUME 9 #define C_VOLUME 10 #define ENV_PERIOD_LOW 11 #define ENV_PERIOD_HI 12 #define ENV_WAVE 13 #define POKE(addr,val) (*(uint8_t*) (addr) = (val)) #if defined(__MSX__) void _XL_INIT_SOUND(void) { POKE(0xF3DB,0); } // #elif defined(__SMS__) // #include // void _XL_INIT_SOUND(void) // { // psg_init(); // } #else #include void _XL_INIT_SOUND(void) { psg_init(); } #endif void _ping_sound(uint8_t freq) { uint16_t i; psg_volume(0,15); psg_tone(0,freq); for(i=0;i<220;i++) { } psg_volume(0,0); } void _XL_ZAP_SOUND(void) { uint8_t i; uint8_t j; psg_volume(0,15); for(i=0;i<30;i++) { for(j=0;j= 8 #include "support/gcc8_c_support.h" #define AMIGADEBUGGER 1 #else #define AMIGADEBUGGER 0 #define warpmode(x) #endif #include #include #include #include #include #include #include #include #define BPLHPTH_ADDR 0x1EC #define BPLHPTL_ADDR 0x1EE #define FMODE_ADDR 0x1FC #define COP1LCH_ADDR 0x080 #define COP1LCL_ADDR 0x082 #define COP2LCH_ADDR 0x084 #define COP2LCL_ADDR 0x086 #define COPJMP1_ADDR 0x088 #define COPJMP2_ADDR 0x08A #define COPINS_ADDR 0x08C #define DIWSTRT_ADDR 0x08E #define DIWSTOP_ADDR 0x090 #define DDFSTRT_ADDR 0x092 #define DDFSTOP_ADDR 0x094 #define BITPLNS_ADDR 0x0E0 // + 4*N bitplane. #define BPLCON0_ADDR 0x100 #define BPLCON1_ADDR 0x102 #define BPLCON2_ADDR 0x104 #define BPLCON3_ADDR 0x106 #define BPL1MOD_ADDR 0x108 #define BPL2MOD_ADDR 0x10A #define BPLCON4_ADDR 0x10C #define COLOR00_ADDR 0x180 #define BLITTER_READY (1<<14) #define BLITTER_ZERO (1<<13) #define BLITTER_NASTY (1<<12) #define DMA_ALL (1<<9) #define BITPLANES_ON (1<<8) #define COPPER_ON (1<<7) #define BLITTER_ON (1<<6) #define SPRITES_ON (1<<5) #define DISKS_ON (1<<4) #define AUDIO3_ON (1<<3) #define AUDIO2_ON (1<<2) #define AUDIO1_ON (1<<1) #define AUDIO0_ON (1<<0) #define DMACON_ADDR 0x096 struct ExecBase *SysBase; volatile struct Custom *hw; struct DosLibrary *DOSBase; struct GfxBase *GfxBase; void dma_On(int v) { hw->dmacon=0x8000|v; } void dma_Off(int v) { hw->dmacon=v; } short *copper_List = 0; int copper_List_cursor=0; int copper_List_bitplanes_cursor=0; int copper_List_vx,copper_List_vy; int copper_Move(short a,short v) { int c=copper_List_cursor; copper_List[copper_List_cursor++]=a; copper_List[copper_List_cursor++]=v; return c; } void copper_Set(void *copmem) { copper_List=(short*)copmem; copper_List_cursor=0; } //(short sx = 0, short sy = 0, short ww = 320, short hh = 256, short wib = 0) int copper_SetView(short sx , short sy , short ww , short hh , short wib ) { hh += sy; sx += 0x81; sy += 0x2c; ww += 0x81; hh += 0x2c; copper_List_vx = sx; copper_List_vy = sy; int r = copper_List_cursor; copper_Move(FMODE_ADDR, 0); // rimuovere se AGA copper_Move(DIWSTRT_ADDR, (sx) | (sy << 8)); copper_Move(DIWSTOP_ADDR, (ww & 0xff) | ((hh & 0xff) << 8)); copper_Move(DDFSTRT_ADDR, 0x38); // qui ci sarebbe da calcolare cose in modo da gestire overscan etc. copper_Move(DDFSTOP_ADDR, 0xd0); copper_Move(DDFSTOP_ADDR, 0xd0); copper_Move(BPLCON3_ADDR, 0x0c00); // AGA compatibility se dual playfield mode copper_Move(BPL1MOD_ADDR, wib); copper_Move(BPL2MOD_ADDR, wib); copper_Move(BPLCON1_ADDR, 0); // qua tocco ctrl se chiedo hires.. etc.. //DIWSTRT, $5281; DIWSTOP, $06c1 return r; } int copper_OffsetX(short x) { x &= 0xf; return copper_Move(BPLCON1_ADDR, x | (x << 4)); } int copper_Pointer(short addr, short n, void *pdata) { short* d = (short*)&pdata; short hi = d[0]; short lo = d[1]; short a = addr + (n << 2); // qui riswitcha da LE a BE copper_Move(a,hi); copper_Move(a+2,lo); return copper_List_cursor - 4; } int copper_Bitplane(short n, void *data) { return copper_Pointer(BITPLNS_ADDR, n, data); } int copper_Bitplanes(short n, void *data, int count , int stride ) { int r = copper_List_cursor; if(data)copper_List_bitplanes_cursor = copper_List_cursor; char *p = (char*)data; for (int i = 0; i < count; i++, p += stride) copper_Pointer(BITPLNS_ADDR, n + i, p); return r; } int copper_RefreshBitplanes(short n, void *data, int count , int stride ) { int oc = copper_List_cursor; copper_List_cursor = copper_List_bitplanes_cursor; copper_Bitplanes(n, data, count, stride); copper_List_cursor = oc; return copper_List_bitplanes_cursor; } int copper_BitplanesNum(int n) { int v = 0;//playfields_mode ? (1 << 10) : 0; v |= n << 12; v |= 0x200; return copper_Move(BPLCON0_ADDR, v); } int copper_Jump(int cpl) { return copper_Move(COPJMP1_ADDR + (cpl<<1) , 0); } int copper_Next(int cmdn, int cpl ) { short *l = copper_List + copper_List_cursor + (cmdn<<1) + 4; return copper_Pointer(COP1LCH_ADDR, cpl, l); } int copper_Color(short n, short val) { return copper_Move(COLOR00_ADDR + (n << 1), val); } int copper_Colors(short *c, int pos, int count ) { int a = COLOR00_ADDR + (pos << 1); int r = copper_List_cursor; for (int i=0;i> 1) ; y = copper_List_vy + y; return copper_WaitRaw(x, y, maskx, masky, blitwait); } int copper_End() { int r = copper_List_cursor; copper_Move(0xffdf, 0xfffe); copper_Move(0xffff, 0xfffe); return r; } void copper_Load() //=0 { hw->cop1lc = (long)copper_List; } void OpenDisplay(int w,int h, void* bitplanes, int nbitplanes,short *palette,int ncolors) { copper_List_cursor=0; copper_SetView(0,0,w,h,0); copper_Bitplanes(0,bitplanes,nbitplanes, (w>>3)*h); copper_Bitplanes(nbitplanes,0,6-nbitplanes, 0); copper_BitplanesNum(nbitplanes); copper_Colors(palette,0,ncolors); copper_End(); copper_Load(); dma_On(BITPLANES_ON|COPPER_ON|DMA_ALL); } //backup static UWORD SystemInts; static UWORD SystemDMA; static UWORD SystemADKCON; volatile static APTR VBR=0; static APTR SystemIrq; struct View *ActiView; static APTR GetVBR(void) { APTR vbr = 0; UWORD getvbr[] = { 0x4e7a, 0x0801, 0x4e73 }; // copper_MoveC.L VBR,D0 RTE if (SysBase->AttnFlags & AFF_68010) vbr = (APTR)Supervisor((void*)getvbr); return vbr; } void SetInterruptHandler(APTR interrupt) { *(volatile APTR*)(((UBYTE*)VBR)+0x6c) = interrupt; } APTR GetInterruptHandler() { return *(volatile APTR*)(((UBYTE*)VBR)+0x6c); } //vblank begins at vpos 312 hpos 1 and ends at vpos 25 hpos 1 //vsync begins at line 2 hpos 132 and ends at vpos 5 hpos 18 void WaitVbl() { while (1) { volatile ULONG vpos=*(volatile ULONG*)0xDFF004; vpos&=0x1ff00; if (vpos!=(311<<8)) break; } while (1) { volatile ULONG vpos=*(volatile ULONG*)0xDFF004; vpos&=0x1ff00; if (vpos==(311<<8)) break; } } void WaitBlt() { UWORD tst=*(volatile UWORD*)&hw->dmaconr; //for compatiblity a1000 (void)tst; while (*(volatile UWORD*)&hw->dmaconr&(1<<14)) {} //blitter busy wait } void TakeSystem() { warpmode(0); ActiView=GfxBase->ActiView; //store current view OwnBlitter(); WaitBlit(); Disable(); //Save current interrupts and DMA settings so we can restore them upon exit. SystemADKCON=hw->adkconr; SystemInts=hw->intenar; SystemDMA=hw->dmaconr; hw->intena=0x7fff;//disable all interrupts hw->intreq=0x7fff;//Clear any interrupts that were pending WaitVbl(); WaitVbl(); hw->dmacon=0x7fff;//Clear all DMA channels //set all colors black for(int a=0;a<32;a++) hw->color[a]=0xf0; LoadView(0); WaitTOF(); WaitTOF(); WaitVbl(); WaitVbl(); VBR=GetVBR(); SystemIrq=GetInterruptHandler(); //store interrupt register WaitVbl(); } void FreeSystem() { WaitVbl(); WaitBlt(); hw->intena=0x7fff;//disable all interrupts hw->intreq=0x7fff;//Clear any interrupts that were pending hw->dmacon=0x7fff;//Clear all DMA channels //restore interrupts SetInterruptHandler(SystemIrq); /*Restore system copper list(s). */ hw->cop1lc=(ULONG)GfxBase->copinit; hw->cop2lc=(ULONG)GfxBase->LOFlist; hw->copjmp1=0x7fff; //start coppper /*Restore all interrupts and DMA settings. */ hw->intena=SystemInts|0x8000; hw->dmacon=SystemDMA|0x8000; hw->adkcon=SystemADKCON|0x8000; LoadView(ActiView); WaitTOF(); WaitTOF(); WaitBlit(); DisownBlitter(); Enable(); } short MouseLeft(){return !((*(volatile UBYTE*)0xbfe001)&64);} short MouseRight(){return !((*(volatile UWORD*)0xdff016)&(1<<10));} void *alloc_chip(unsigned long sz ) { long *r=(long*)AllocMem(sz+4, MEMF_CHIP); *r= sz; return (void*)(r+1); } void *free_chip(void *memtofree) { long *r=((long*)memtofree)-1; FreeMem(r,*r); return r; } void InitializeSystem() { SysBase = *((struct ExecBase**)4UL); hw = (struct Custom*)0xdff000; // We will use the graphics library only to locate and restore the system copper list once we are through. GfxBase = (struct GfxBase *)OpenLibrary("graphics.library",0); if (!GfxBase) Exit(0); // used for printing DOSBase = (struct DosLibrary*)OpenLibrary("dos.library", 0); if (!DOSBase) Exit(0); } void SetVBLInterrupt(APTR intr) { SetInterruptHandler(intr); hw->intena=(1<intreq=1< // PAL Timings // Roughly computed based on Stella Programmer's guide (Steve Wright) // scanlines count per section. #define VBLANK_TIM64 51 // 45 lines * 76 cycles/line / 64 cycles/tick #define KERNAL_T1024 17 // 228 lines * 76 cycles/line / 1024 cycles/tick #define OVERSCAN_TIM64 42 // 36 lines * 76 cycles/line / 64 cycles/tick // Testing memory zones const uint8_t rodata_v[] = "Hello!"; uint8_t data_v = 0x77; uint8_t bss_v; void main(void) { uint8_t color = 0x79; // Stack variable bss_v = 0x88; // Testing BSS variable for/*ever*/(;;) { // Vertical Sync signal TIA.vsync = 0x02; TIA.wsync = 0x00; TIA.wsync = 0x00; TIA.wsync = 0x00; TIA.vsync = 0x00; // Vertical Blank timer setting RIOT.tim64t = VBLANK_TIM64; // Doing frame computation during blank TIA.colubk = color++; // Update color // while(RIOT.timint>0) // { TIA.colubk = ++color; // } // Wait for end of Vertical Blank while (RIOT.timint == 0) {} TIA.wsync = 0x00; TIA.vblank = 0x00; // Turn on beam // Display frame RIOT.t1024t = KERNAL_T1024; while (RIOT.timint == 0) {} TIA.wsync = 0x00; TIA.vblank = 0x02; // Turn off beam // Overscan RIOT.tim64t = OVERSCAN_TIM64; while (RIOT.timint == 0) {} } } ================================================ FILE: src/debug/atari7800_test.c ================================================ // cl65.exe -t atari7800 --force-import __EXEHDR__ atari7800_test.c -o atari7800_DEBUG.a78 #include #include extern char screen[]; int main(void) { clrscr(); POKE(7000,1); while(1){}; return 0; } ================================================ FILE: src/debug/atari7800_test2.c ================================================ #include #include extern char screen[]; void main() { char i; clrscr(); for(i=0;i<100;++i) { screen[i]=i; } while (1) { screen[0] = screen[0] + 1; } } ================================================ FILE: src/debug/atari7800_test3.c ================================================ #include extern char *screen; int main(void) { char i; clrscr(); for(i=0;i<100;++i) { screen[i]=i; } while (1) { screen[0] = screen[0] + 1; } return 0; } ================================================ FILE: src/debug/atari_lynx.c ================================================ #include #define CLI() asm("\tcli") int main(void) { tgi_install (tgi_static_stddrv); tgi_init (); CLI(); while (tgi_busy()) { }; tgi_setpalette(tgi_getdefpalette()); tgi_setbgcolor(TGI_COLOR_WHITE); tgi_outtextxy(8,8," "); tgi_setcolor(TGI_COLOR_BLACK); // tgi_setcolor(TGI_COLOR_RED); tgi_outtextxy(8,8,"hello"); while(1){}; return 0; } ================================================ FILE: src/debug/bar.c ================================================ char foo[] = {'a','b','c'}; ================================================ FILE: src/debug/bbctest.c ================================================ // DOC on VDU // https://www.bbcbasic.co.uk/bbcbasic/manual/vdu.html#vdu22 /* 0 Null - it does nothing. 1 Send the next character to the printer ONLY. 2 Enable the printer. 3 Disable the printer. 4 Write text at the text cursor position. 5 Write text at the graphics cursor position. 6 Enable output to the screen. 7 Bell - make a short 'beep'. 8 Move the text cursor backwards one character. 9 Move the text cursor forwards one character. 10 Move the text cursor down one line. 11 Move the text cursor up one line. 12 Clear the text area - identical to CLS. 13 Move the text cursor to the start of the current line. 14 Enable the auto-paging mode. 15 Disable the auto-paging mode. 16 Clear the graphics area - identical to CLG. 17 Define a text colour - identical to COLOUR. 18 Define a graphics colour - identical to GCOL. 19 Select a colour palette. 20 Restore the default logical colours. 21 Disable output to the screen. 22 Select the screen mode - identical to MODE. 23 Program characters and control the cursor. 24 Define a graphics window. 25 Identical to PLOT. 26 Restore the default text and graphics windows. 27 Send the next character to the screen. 28 Define a text window. 29 Set the graphics origin. 30 Home the text cursor to the top left of the screen. 31 Move the text cursor - identical to TAB(x,y). 127 Backspace and delete. */ // #include "bbc.h" char OSBYTE0(__reg("a") char)="\tjsr\t$fff4\n\ttxa"; char OSBYTE1(__reg("a") char,__reg("r0") char)="\tldx\tr0\n\tjsr\t$fff4\n\ttxa"; char OSBYTE1RI(__reg("a") char,__reg("r0") char)="\tldx\tr0\n\tjsr\t$fff4\n\ttxa\n\tpha\n\ttya\n\ttax\n\tpla"; char OSBYTE2(__reg("a") char,__reg("r0") char,__reg("r1") char)="\tldx\tr0\n\tldy\tr1\n\tjsr\t$fff4\n\ttxa"; char OSBYTE2I(__reg("a") char,__reg("r0/r1") unsigned int)="\tldx\tr0\n\tldy\tr1\n\tjsr\t$fff4\n\ttxa"; void OSBYTE0NR(__reg("a") char)="\tjsr\t$fff4"; void OSBYTE1NR(__reg("a") char,__reg("r0") char)="\tldx\tr0\n\tjsr\t$fff4"; void OSBYTE2NR(__reg("a") char,__reg("r0") char,__reg("r1") char)="\tldx\tr0\n\tldy\tr1\n\tjsr\t$fff4"; #define OSVER() OSBYTE0(0) #define OSUSRFLG(x,y) OSBYTE2(1,(x),(y)) #define OSSELINPUT(x) OSBYTE1NR(2,(x)) #define OSSELOUTPUT(x) OSBYTE2(3,(x),(y)) #define OSCURSORED(x) OSBYTE2(4,(x),(y)) #define OSSELADC(x) OSBYTE1(16,(x)) #define OSFRCADC(x) OSBYTE1NR(17,(x)) #define OSVSYNC() OSBYTE0(19) #define OSRDVDU() OSBYTE0(117) #define OSSCANKEY(x) OSBYTE1(121,(x)) #define OSSCANKEY16() OSBYTE0(122) #define OSADVAL(x) OSBYTE1RI(128,(x)) #define OSINKEY(x) OSBYTE2I(129,(x)) void OSWORD(__reg("a") char,__reg("r0/r1") void *)="\tldx\tr0\n\tldy\tr1\n\tjsr\t$fff1"; #define OSRDSYSCLK(x) OSWORD(1,x) #define OSWRSYSCLK(x) OSWORD(2,x) #define OSRDTIMER(x) OSWORD(3,x) #define OSWRTIMER(x) OSWORD(4,x) #define OSRDIO(x) OSWORD(5,x) #define OSWRIO(x) OSWORD(6,x) #define OSSOUND(x) OSWORD(7,x) #define OSENVELOPE(x) OSWORD(8,x) #define OSRDPIXEL(x) OSWORD(9,x) #define OSRDCHARDEF(x) OSWORD(10,x) #define OSRDPALETTE(x) OSWORD(11,x) #define OSWRPALETTE(x) OSWORD(12,x) #define OSRDGRCURSOR(x) OSWORD(13,x) #define _TILE_0 200 #define _TILE_1 201 #define _TILE_2 202 #define _TILE_3 203 #define _TILE_4 204 #define _TILE_5 205 #define _TILE_6 206 #define _TILE_7 207 #define _TILE_8 208 #define _TILE_9 209 #define _TILE_10 210 #define _TILE_11 211 #define _TILE_12 212 #define _TILE_13 213 #define _TILE_14 214 #define _TILE_15 215 #define _TILE_16 216 #define _TILE_17 217 #define _TILE_18 218 #define _TILE_19 219 #define _TILE_20 220 #define _TILE_21 221 #define _TILE_22 222 #define _TILE_23 223 #define _TILE_24 224 #define _TILE_25 225 #define _TILE_26 226 #include void osputc(__reg("a") char)="\tjsr\t0xffee"; #define _TILE_0_UDG { 198,186,254,170,238,186,170,16} #define _TILE_1_UDG { 0,0,198,186,254,170,238,186} #define _TILE_3_UDG { 0,0,0,0,198,186,254,170} #define _TILE_2_UDG { 170,16,0,0,0,0,0,0} #define _TILE_4_UDG {238,186,170,16,0,0,0,0} #define _TILE_7_UDG { 198,186,0,170,0,186,214,16} #define _TILE_9_UDG { 4,14,14,4,63,68,228,64} #define _TILE_8_UDG { 60,126,231,195,195,231,126,60} #define _TILE_11_UDG { 0,0,0,0,3,10,4,10} #define _TILE_5_UDG { 0,0,0,0,0,0,198,186} #define _TILE_16_UDG { 0,0,0,0,248,4,14,4} #define _TILE_15_UDG { 0,0,0,16,130,16,84,16} #define _TILE_14_UDG { 198,186,68,84,186,214,16,16} #define _TILE_6_UDG {254,170,238,186,170,16,0,0} #define _TILE_12_UDG { 64,224,224,64,248,68,78,4 } #define _TILE_13_UDG { 0,0,0,0,63,64,224,64 } #define _TILE_10_UDG { 0,0,0,0,128,160,64,160 } #define _TILE_17_UDG { 4,14,14,4,4,4,0,0 } #define _TILE_18_UDG { 64,224,224,64,64,64,0,0 } #define _TILE_19_UDG { 198,186,254,170,238,186,214,16 } #define _TILE_20_UDG { 254,170,238,186,214,16,0,0 } #define _TILE_21_UDG { 238,186,214,16,0,0,0,0 } #define _TILE_22_UDG { 214,16,0,0,0,0,0,0 } #define _TILE_23_UDG { 0,24,60,122,253,122,60,24 } #define _TILE_24_UDG { 120,252,255,133,255,161,255,0 } #define _TILE_25_UDG { 0,0,0,24,52,122,52,24 } #define _TILE_26_UDG { 0,0,0,0,0,16,16,16 } const struct redefine_struct { const uint8_t ascii; const uint8_t bitmap[8]; } ; const struct redefine_struct redefine_map[] = { {_TILE_0, _TILE_0_UDG}, {_TILE_1, _TILE_1_UDG}, {_TILE_2, _TILE_2_UDG}, {_TILE_3, _TILE_3_UDG}, {_TILE_4, _TILE_4_UDG}, {_TILE_5, _TILE_5_UDG}, {_TILE_6, _TILE_6_UDG}, {_TILE_7, _TILE_7_UDG}, {_TILE_8, _TILE_8_UDG}, {_TILE_9, _TILE_9_UDG}, {_TILE_10, _TILE_10_UDG}, {_TILE_11, _TILE_11_UDG}, {_TILE_12, _TILE_12_UDG}, {_TILE_13, _TILE_13_UDG}, {_TILE_14, _TILE_14_UDG}, {_TILE_15, _TILE_15_UDG}, {_TILE_16, _TILE_16_UDG}, {_TILE_17, _TILE_17_UDG}, {_TILE_18, _TILE_18_UDG}, {_TILE_19, _TILE_19_UDG}, {_TILE_20, _TILE_20_UDG}, {_TILE_21, _TILE_21_UDG}, {_TILE_22, _TILE_22_UDG}, {_TILE_23, _TILE_23_UDG}, {_TILE_24, _TILE_24_UDG}, {_TILE_25, _TILE_25_UDG}, {_TILE_26, _TILE_26_UDG}, }; #define REDEFINE_AT(addr) \ { \ uint8_t i; \ \ for (i = 0; i < (sizeof(redefine_map)/sizeof(*redefine_map)); ++i) \ { \ memcpy((uint8_t *)(addr) + screenCode((redefine_map[i].ascii))*8, redefine_map[i].bitmap, 8); \ } \ } void redefine(const uint8_t ch, const uint8_t *data) { uint8_t i; osputc(23); osputc(ch); for(i=0;i<8;++i) { osputc(data[i]); } } void SET_UDG_IMAGES(void) { uint8_t i; for (i = 0; i < sizeof(redefine_map) / sizeof(*redefine_map); ++i) { redefine(redefine_map[i].ascii, redefine_map[i].bitmap); } } void _XL_INIT_GRAPHICS(void) { osputc(22); osputc(5); // Disable the cursor osputc(23); osputc(1); osputc(0); osputc(0); osputc(0); osputc(0); osputc(0); osputc(0); osputc(0); osputc(0); SET_UDG_IMAGES(); osputc('A'); osputc('B'); osputc('C'); osputc(_TILE_0); osputc(_TILE_1); osputc(_TILE_2); while(1){}; } int main(void) { _XL_INIT_GRAPHICS(); return 0; } ================================================ FILE: src/debug/bitbang.c ================================================ #include #include int main(void) { while(1) { bit_fx(7); getchar(); bit_fx(1); getchar(); bit_fx3(0); getchar(); } return 0; } ================================================ FILE: src/debug/build_conio_test.txt ================================================ zcc.exe +cpm --generic-console -pragma-define:CONSOLE_COLUMNS=80 -pragma-define:CONSOLE_ROWS=24 conio_test.c -create-app -oconio_test.bin -lndos cpm_z80_adm3a: $(Z88DK_PATH)$(MYZ88DK) +cpm $(SCCZ80_OPTS) \ $(INCLUDE_OPTS) --generic-console -pragma-define:CONSOLE_COLUMNS=80 -pragma-define:CONSOLE_ROWS=24 -lndos \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_CPM_Z80_SLOWDOWN) \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS -D__NO_SCREEN_COLOR_INIT \ -create-app -o$(BUILD_PATH)/X$(GAME_NAME)_cpm_adm3a.bin \ $(FULL_FILES) rm -rf $(BUILD_PATH)/X$(GAME_NAME)_cpm_adm3a.bin cpm_8080_adm3a: $(Z88DK_PATH)$(MYZ88DK) +cpm $(SCCZ80_OPTS) \ $(INCLUDE_OPTS) -clib=8080 --generic-console -pragma-define:CONSOLE_COLUMNS=80 -pragma-define:CONSOLE_ROWS=24 -lndos \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_CPM_Z80_SLOWDOWN) \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS -D__NO_SCREEN_COLOR_INIT \ -create-app -o$(BUILD_PATH)/X$(GAME_NAME)_$@.bin \ $(FULL_FILES) rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.bin cpm_8085_adm3a: $(Z88DK_PATH)$(MYZ88DK) +cpm $(SCCZ80_OPTS) \ $(INCLUDE_OPTS) -clib=8085 --generic-console -pragma-define:CONSOLE_COLUMNS=80 -pragma-define:CONSOLE_ROWS=24 -lndos \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_CPM_Z80_SLOWDOWN) \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS -D__NO_SCREEN_COLOR_INIT \ -create-app -o$(BUILD_PATH)/X$(GAME_NAME)_$@.bin \ $(FULL_FILES) rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.bin ================================================ FILE: src/debug/coco3_test.c ================================================ #include #include #define POKE(addr,value) (*(unsigned char *)(addr)=(value)) #define PEEK(addr) (*(unsigned char *)(addr)) int main(void) { uint16_t i; disableInterrupts(); // Enable MMU POKE(0xFF90,0x40); // Set graphics ON POKE(0xFF98,0x80); // Set 256x192x16 mode POKE(0xFF99,0x1A); // Set actual screen ram at $600000 POKE(0xFF9D,0xC0); POKE(0xFF9E,0x00); // Set palette for(i=0;i<16;++i) { POKE(0xFFB0+i,(unsigned char) i&0xFF); } // Set MMU windows at $8000 POKE(0xFFA4,0x30); POKE(0xFFA5,0x31); POKE(0xFFA6,0x32); for(i=0;i<24000;++i) { POKE(0x8000+i,(unsigned char) 255); } while(1){}; return 0; } ================================================ FILE: src/debug/coco_strings_test.c ================================================ #include #include char strings[5][7] = { "Mine", "Energy", "Bonus", "Points", "Apple", }; int main(void) { unsigned char i; for(i=0;i<5;++i) { printf("%s\n", strings[i]); } while(1){}; return 0; } ================================================ FILE: src/debug/comx_class.c ================================================ void setvideobase(unsigned int vidmem){ asm( //vidmem pointer is R12 " sex R12\n" " out 7\n" " sex R2\n"); } void vidstrcpy(unsigned int vidmem,char * text){ //write to video memory asm( "$$cpy:\n" " lda R13 ;pick up input pointer\n" " b1 $ ;wait til video is quiet\n" " str R12 ;move the byte\n" " inc R12 ;++\n" " bnz $$cpy\n"); } struct ParentStruct { int data; void (*set_parent_data)(struct ParentStruct*, int); }; typedef struct ParentStruct parent_t; struct ChildStruct { parent_t _parent; int more_data; void (*set_child_data)(struct ChildStruct* this, int val); }; typedef struct ChildStruct child_t; void _set_parent_data(struct ParentStruct* this, int val) { this->data = val; } void _set_child_data(child_t* this, int val) { this->more_data = val; } int main() { parent_t foo; child_t bar; parent_t *bar_p = (parent_t*) &bar; unsigned int vidmem=0xf800; setvideobase(vidmem); bar._parent.set_parent_data = _set_parent_data; foo.set_parent_data = _set_parent_data; foo.set_parent_data(&foo, 42); bar_p->set_parent_data(bar_p, 43); if(foo.data==42) { vidstrcpy(vidmem+40, "OK - FOO.DATA == 42"); } else { vidstrcpy(vidmem+40, "KO - FOO.DATA != 42"); } if(bar_p->data==43) { vidstrcpy(vidmem+80, "OK - BAR_P->DATA == 43"); } else { vidstrcpy(vidmem+80, "KO - BAR_P->DATA != 43"); } return 0; } ================================================ FILE: src/debug/comx_conv_debug.c ================================================ #define BASE_ADDR 0xF800 typedef unsigned char uint8_t; typedef unsigned short uint16_t; void main(){ uint16_t foo; uint16_t bar = 42; foo = (uint16_t) BASE_ADDR + (uint16_t) bar; } ================================================ FILE: src/debug/comx_hello.c ================================================ /* Hello World for the COMX-35 by Marcel van Tongoren & Bill Rowe */ #include #define putc(c) putcomx(c,0x3302) void putcomx(unsigned char c, unsigned int r13val){ asm( " glo r12\n" " lbr 0x2cd3\n"); } char shapes[] = { 97, // First byte is the character to shape followed by 9 bytes for the shape 0x00, 0xcc, 0xde, 0xed, 0xff, 0xf3, 0xed, 0xe1, 0x00, 98, // next character to shape 0x00, 0x8c, 0x9e, 0xad, 0xbf, 0xb3, 0xad, 0xa1, 0x00, 99, 0x00, 0x00, 0xcc, 0xde, 0xff, 0xde, 0xcc, 0x00, 0x00, }; void shapechar(char * shapelocation, int number) { asm( //shapelocation pointer is R12, number of shapes is R13 " ldi 0xf7\n" " phi R8\n" " ldi 0xfb\n" " phi R9\n" "$$nextshape:\n" " ldi 0xC0 \n" " plo R8 ; R8 = charmem pointer\n" " plo r9 ; R9 = vidmem pointer\n" " ldi 9 \n" " plo R10 ; R10.0 = number of lines, we need to somehowe make a NTSC version for 8 lines\n" " lda 12\n" " phi R10 ; R10.1 = character\n" "$$nextline:\n" " ghi R10\n" " b1 $ ; wait til video is quiet\n" " str R9 ; store character in vidmem\n" " inc R9\n" " lda R12\n" " str R8 ; store first shape line in charmem\n" " inc R8\n" " dec R10\n" " glo R10\n" " bnz $$nextline ; number of lines - 1 if not zero do next line\n" " dec r13\n" " glo r13\n" " bnz $$nextshape\n"); } void setvideobase(unsigned int vidmem){ asm( //vidmem pointer is R12 " sex R12\n" " out 7\n" " sex R2\n"); } void disableinterrupt(){ asm( " sex 3\n" " dis\n" " db 0x23\n"); } void enableinterrupt(){ asm( " sex 3\n" " ret\n" " db 0x23\n"); } void vidstrcpy(unsigned int vidmem,char * text){ //write to video memory asm( "$$cpy:\n" " lda R13 ;pick up input pointer\n" " b1 $ ;wait til video is quiet\n" " str R12 ;move the byte\n" " inc R12 ;++\n" " bnz $$cpy\n"); } void vidclr(unsigned int vidmem, int vidlen){ //write 0's to video memory asm( //vidmem pointer is R12, vidlen is R13 "$$cpy:\n" " ldi 0 ;source a 0 for clearing the screen\n" " b1 $ ;wait til video is quiet\n" " str R12 ;move the byte\n" " inc R12 ;++\n" " dec R13 ;decrement count\n" " glo R13 ; check bottom byte\n" " bnz $$cpy\n" " ghi R13 ;top byte\n" " bnz $$cpy\n"); return; } void vidchar(unsigned int vidmem, int character){ //write character to vidmem location in video memory asm(//vidmem pointer is R12, character is R13.0 " glo r13\n" " b1 $ ;wait til video is quiet\n" " str R12 ;move the byte\n"); return; } unsigned char getkey(){ //get key value if pressed, otherwise return 0 asm( " b3 $$keypressed\n" // Check if a key is pressed for the 'first time' " bn2 $$nokey\n" // Branch to nokey if no key was pressed previously "$$keypressed:\n" " inp 3\n" " lskp\n" "$$nokey:\n" " ldi 0\n" " plo R15\n" " ldi 0\n" " phi R15\n" " Cretn\n"); return 0; //this statement will never be executed but it keeps the compiler happy } unsigned char cgetc(){ //wait for key press asm( "$$loop:\n" " b3 $$keypressed\n" // Check if a key is pressed for the 'first time' " bn2 $$loop\n" // Loop if no key was pressed previously "$$keypressed:\n" " inp 3\n" " plo R15\n" " ldi 0\n" " phi R15\n" " Cretn\n"); return 0; //this statement will never be executed but it keeps the compiler happy } int kbhit(){ //return 1 if a key is pressed, 0 if not asm( " b3 $$keypressed\n" // Check if a key is pressed for the 'first time' " bn2 $$nokey\n" // Branch to nokey if no key was pressed previously "$$keypressed:\n" " ldi 1\n" " lskp\n" "$$nokey:\n" " ldi 0\n" " plo R15\n" " ldi 0\n" " phi R15\n" " Cretn\n"); return 0; //this statement will never be executed but it keeps the compiler happy } void settone(int value){ asm( " sex R12 ;Tone generation value\n" " out 4\n" " sex R2\n"); } void generatetone(int tone, int range, int volume){ int tonevalue; tonevalue = (volume & 0xf) + ((range &0x7) << 4) + 0x8 + ((tone & 0x7f) << 8); settone(tonevalue); } void setnoise(int value){ asm( " ldireg R8,0x41C3\n" " ldn R8\n" " plo R12 ; load current OUT 5 (low byte) video setting from 0x41C3 and store in R12.0\n" " sex R12 ; Noise generation value\n" " out 5\n" " sex R2\n"); } void generatenoise(int range, int volume){ int tonevalue; tonevalue = ((volume & 0xf) + ((range &0x7) << 4) + 0x8) << 8; setnoise(tonevalue); } void main(){ unsigned int vidmem=0xf800; unsigned char key; unsigned int loop; setvideobase(vidmem); vidclr(vidmem,24*40); enableinterrupt(); printf("HELLO WORLD! %i %d end of digits\n second line", 42, 43); } ================================================ FILE: src/debug/comx_hello_integer.c ================================================ /* Hello World for the COMX-35 by Marcel van Tongoren & Bill Rowe */ #include #define putc(c) putcomx(c,0x3302) void putcomx(unsigned char c, unsigned int r13val){ asm( " glo r12\n" " lbr 0x2cd3\n"); } char shapes[] = { 97, // First byte is the character to shape followed by 9 bytes for the shape 0x00, 0xcc, 0xde, 0xed, 0xff, 0xf3, 0xed, 0xe1, 0x00, 98, // next character to shape 0x00, 0x8c, 0x9e, 0xad, 0xbf, 0xb3, 0xad, 0xa1, 0x00, 99, 0x00, 0x00, 0xcc, 0xde, 0xff, 0xde, 0xcc, 0x00, 0x00, }; void shapechar(char * shapelocation, int number) { asm( //shapelocation pointer is R12, number of shapes is R13 " ldi 0xf7\n" " phi R8\n" " ldi 0xfb\n" " phi R9\n" "$$nextshape:\n" " ldi 0xC0 \n" " plo R8 ; R8 = charmem pointer\n" " plo r9 ; R9 = vidmem pointer\n" " ldi 9 \n" " plo R10 ; R10.0 = number of lines, we need to somehowe make a NTSC version for 8 lines\n" " lda 12\n" " phi R10 ; R10.1 = character\n" "$$nextline:\n" " ghi R10\n" " b1 $ ; wait til video is quiet\n" " str R9 ; store character in vidmem\n" " inc R9\n" " lda R12\n" " str R8 ; store first shape line in charmem\n" " inc R8\n" " dec R10\n" " glo R10\n" " bnz $$nextline ; number of lines - 1 if not zero do next line\n" " dec r13\n" " glo r13\n" " bnz $$nextshape\n"); } void setvideobase(unsigned int vidmem){ asm( //vidmem pointer is R12 " sex R12\n" " out 7\n" " sex R2\n"); } void disableinterrupt(){ asm( " sex 3\n" " dis\n" " db 0x23\n"); } void enableinterrupt(){ asm( " sex 3\n" " ret\n" " db 0x23\n"); } void vidstrcpy(unsigned int vidmem,char * text){ //write to video memory asm( "$$cpy:\n" " lda R13 ;pick up input pointer\n" " b1 $ ;wait til video is quiet\n" " str R12 ;move the byte\n" " inc R12 ;++\n" " bnz $$cpy\n"); } void vidclr(unsigned int vidmem, int vidlen){ //write 0's to video memory asm( //vidmem pointer is R12, vidlen is R13 "$$cpy:\n" " ldi 0 ;source a 0 for clearing the screen\n" " b1 $ ;wait til video is quiet\n" " str R12 ;move the byte\n" " inc R12 ;++\n" " dec R13 ;decrement count\n" " glo R13 ; check bottom byte\n" " bnz $$cpy\n" " ghi R13 ;top byte\n" " bnz $$cpy\n"); return; } void vidchar(unsigned int vidmem, int character){ //write character to vidmem location in video memory asm(//vidmem pointer is R12, character is R13.0 " glo r13\n" " b1 $ ;wait til video is quiet\n" " str R12 ;move the byte\n"); return; } unsigned char getkey(){ //get key value if pressed, otherwise return 0 asm( " b3 $$keypressed\n" // Check if a key is pressed for the 'first time' " bn2 $$nokey\n" // Branch to nokey if no key was pressed previously "$$keypressed:\n" " inp 3\n" " lskp\n" "$$nokey:\n" " ldi 0\n" " plo R15\n" " ldi 0\n" " phi R15\n" " Cretn\n"); return 0; //this statement will never be executed but it keeps the compiler happy } unsigned char cgetc(){ //wait for key press asm( "$$loop:\n" " b3 $$keypressed\n" // Check if a key is pressed for the 'first time' " bn2 $$loop\n" // Loop if no key was pressed previously "$$keypressed:\n" " inp 3\n" " plo R15\n" " ldi 0\n" " phi R15\n" " Cretn\n"); return 0; //this statement will never be executed but it keeps the compiler happy } int kbhit(){ //return 1 if a key is pressed, 0 if not asm( " b3 $$keypressed\n" // Check if a key is pressed for the 'first time' " bn2 $$nokey\n" // Branch to nokey if no key was pressed previously "$$keypressed:\n" " ldi 1\n" " lskp\n" "$$nokey:\n" " ldi 0\n" " plo R15\n" " ldi 0\n" " phi R15\n" " Cretn\n"); return 0; //this statement will never be executed but it keeps the compiler happy } void settone(int value){ asm( " sex R12 ;Tone generation value\n" " out 4\n" " sex R2\n"); } void generatetone(int tone, int range, int volume){ int tonevalue; tonevalue = (volume & 0xf) + ((range &0x7) << 4) + 0x8 + ((tone & 0x7f) << 8); settone(tonevalue); } void setnoise(int value){ asm( " ldireg R8,0x41C3\n" " ldn R8\n" " plo R12 ; load current OUT 5 (low byte) video setting from 0x41C3 and store in R12.0\n" " sex R12 ; Noise generation value\n" " out 5\n" " sex R2\n"); } void generatenoise(int range, int volume){ int tonevalue; tonevalue = ((volume & 0xf) + ((range &0x7) << 4) + 0x8) << 8; setnoise(tonevalue); } void main(){ unsigned int vidmem=0xf800; unsigned char key; unsigned int loop; setvideobase(vidmem); disableinterrupt(); vidclr(vidmem,24*40); enableinterrupt(); printf("HELLO WORLD! %i %d", 42, 43); } #include ================================================ FILE: src/debug/comx_mod.c ================================================ /* Hello World for the COMX-35 by Marcel van Tongoren & Bill Rowe */ #include #define putc(c) putcomx(c,0x3302) void putcomx(unsigned char c, unsigned int r13val){ asm( " glo r12\n" " lbr 0x2cd3\n"); } char shapes[] = { 97, // First byte is the character to shape followed by 9 bytes for the shape 0x00, 0xcc, 0xde, 0xed, 0xff, 0xf3, 0xed, 0xe1, 0x00, 98, // next character to shape 0x00, 0x8c, 0x9e, 0xad, 0xbf, 0xb3, 0xad, 0xa1, 0x00, 99, 0x00, 0x00, 0xcc, 0xde, 0xff, 0xde, 0xcc, 0x00, 0x00, }; void shapechar(char * shapelocation, int number) { asm( //shapelocation pointer is R12, number of shapes is R13 " ldi 0xf7\n" " phi R8\n" " ldi 0xfb\n" " phi R9\n" "$$nextshape:\n" " ldi 0xC0 \n" " plo R8 ; R8 = charmem pointer\n" " plo r9 ; R9 = vidmem pointer\n" " ldi 9 \n" " plo R10 ; R10.0 = number of lines, we need to somehowe make a NTSC version for 8 lines\n" " lda 12\n" " phi R10 ; R10.1 = character\n" "$$nextline:\n" " ghi R10\n" " b1 $ ; wait til video is quiet\n" " str R9 ; store character in vidmem\n" " inc R9\n" " lda R12\n" " str R8 ; store first shape line in charmem\n" " inc R8\n" " dec R10\n" " glo R10\n" " bnz $$nextline ; number of lines - 1 if not zero do next line\n" " dec r13\n" " glo r13\n" " bnz $$nextshape\n"); } void setvideobase(unsigned int vidmem){ asm( //vidmem pointer is R12 " sex R12\n" " out 7\n" " sex R2\n"); } void disableinterrupt(){ asm( " sex 3\n" " dis\n" " db 0x23\n"); } void enableinterrupt(){ asm( " sex 3\n" " ret\n" " db 0x23\n"); } void vidstrcpy(unsigned int vidmem,char * text){ //write to video memory asm( "$$cpy:\n" " lda R13 ;pick up input pointer\n" " b1 $ ;wait til video is quiet\n" " str R12 ;move the byte\n" " inc R12 ;++\n" " bnz $$cpy\n"); } void vidclr(unsigned int vidmem, int vidlen){ //write 0's to video memory asm( //vidmem pointer is R12, vidlen is R13 "$$cpy:\n" " ldi 0 ;source a 0 for clearing the screen\n" " b1 $ ;wait til video is quiet\n" " str R12 ;move the byte\n" " inc R12 ;++\n" " dec R13 ;decrement count\n" " glo R13 ; check bottom byte\n" " bnz $$cpy\n" " ghi R13 ;top byte\n" " bnz $$cpy\n"); return; } void vidchar(unsigned int vidmem, int character){ //write character to vidmem location in video memory asm(//vidmem pointer is R12, character is R13.0 " glo r13\n" " b1 $ ;wait til video is quiet\n" " str R12 ;move the byte\n"); return; } unsigned char getkey(){ //get key value if pressed, otherwise return 0 asm( " b3 $$keypressed\n" // Check if a key is pressed for the 'first time' " bn2 $$nokey\n" // Branch to nokey if no key was pressed previously "$$keypressed:\n" " inp 3\n" " lskp\n" "$$nokey:\n" " ldi 0\n" " plo R15\n" " ldi 0\n" " phi R15\n" " Cretn\n"); return 0; //this statement will never be executed but it keeps the compiler happy } unsigned char cgetc(){ //wait for key press asm( "$$loop:\n" " b3 $$keypressed\n" // Check if a key is pressed for the 'first time' " bn2 $$loop\n" // Loop if no key was pressed previously "$$keypressed:\n" " inp 3\n" " plo R15\n" " ldi 0\n" " phi R15\n" " Cretn\n"); return 0; //this statement will never be executed but it keeps the compiler happy } int kbhit(){ //return 1 if a key is pressed, 0 if not asm( " b3 $$keypressed\n" // Check if a key is pressed for the 'first time' " bn2 $$nokey\n" // Branch to nokey if no key was pressed previously "$$keypressed:\n" " ldi 1\n" " lskp\n" "$$nokey:\n" " ldi 0\n" " plo R15\n" " ldi 0\n" " phi R15\n" " Cretn\n"); return 0; //this statement will never be executed but it keeps the compiler happy } void settone(int value){ asm( " sex R12 ;Tone generation value\n" " out 4\n" " sex R2\n"); } void generatetone(int tone, int range, int volume){ int tonevalue; tonevalue = (volume & 0xf) + ((range &0x7) << 4) + 0x8 + ((tone & 0x7f) << 8); settone(tonevalue); } void setnoise(int value){ asm( " ldireg R8,0x41C3\n" " ldn R8\n" " plo R12 ; load current OUT 5 (low byte) video setting from 0x41C3 and store in R12.0\n" " sex R12 ; Noise generation value\n" " out 5\n" " sex R2\n"); } void generatenoise(int range, int volume){ int tonevalue; tonevalue = ((volume & 0xf) + ((range &0x7) << 4) + 0x8) << 8; setnoise(tonevalue); } typedef unsigned char uint8_t; uint8_t level; #define FIRST_ROCKETS_LEVEL 7 #define FIRST_HORIZONTAL_WALLS_LEVEL 6 uint8_t oneMissileLevel(void) { return ((level%5)==3) || (level==5); } uint8_t rocketLevel(void) { return (level >= FIRST_ROCKETS_LEVEL) && ((level%5)==2 || (level%5)==3); } uint8_t missileLevel(void) { return level%5==4; } uint8_t bossLevel(void) { return !(level%5); } uint8_t horizontalWallsLevel(void) { return ((level >= FIRST_HORIZONTAL_WALLS_LEVEL) && ((level%5==1) || (level%5==4))); } void main(){ unsigned int vidmem=0xf800; unsigned char key; setvideobase(vidmem); disableinterrupt(); vidclr(vidmem,24*40); enableinterrupt(); for(level=1;level<=20;++level) { printf("LEVEL %d ", level); printf("1MISSILE: %d ", oneMissileLevel()); printf("ROCKET: %d ", rocketLevel()); printf("MISSILES: %d ", missileLevel()); printf("BOSS: %d ", bossLevel()); printf("H.WALL: %d", horizontalWallsLevel()); printf("\n"); (void) cgetc(); } // printf("HELLO WORLD! %i %d", 42, 43); } #include ================================================ FILE: src/debug/comx_pointer2func.c ================================================ void _do_nothing(void){} void main() { void (*bar)(void) = _do_nothing; bar(); } ================================================ FILE: src/debug/comx_pp_debug.c ================================================ #include "debug_images.h" #if !defined(ANIMATE_PLAYER) extern Image PLAYER_IMAGE; #else extern Image PLAYER_DOWN; extern Image PLAYER_UP; extern Image PLAYER_RIGHT; extern Image PLAYER_LEFT; #endif extern Image GHOST_IMAGE; extern Image BOMB_IMAGE; #if !defined(NO_DEAD_GHOSTS) extern Image DEAD_GHOST_IMAGE; #endif #if !defined(TINY_GAME) extern Image SKULL_IMAGE; extern Image POWERUP_IMAGE; extern Image GUN_IMAGE; extern Image BULLET_IMAGE; extern Image EXTRA_POINTS_IMAGE; extern Image HORIZONTAL_BRICK_IMAGE; extern Image VERTICAL_BRICK_IMAGE; #endif #if defined(FULL_GAME) extern Image LEFT_HORIZONTAL_MISSILE_IMAGE; extern Image RIGHT_HORIZONTAL_MISSILE_IMAGE; extern Image ROCKET_IMAGE; extern Image FREEZE_IMAGE; extern Image EXTRA_LIFE_IMAGE; extern Image INVINCIBILITY_IMAGE; extern Image SUPER_IMAGE; extern Image CONFUSE_IMAGE; extern Image ZOMBIE_IMAGE; extern Image BROKEN_BRICK_IMAGE; #endif int main(void) { PLAYER_LEFT._imageData = _PLAYER_LEFT; return 0; } ================================================ FILE: src/debug/comx_simple_class.c ================================================ void setvideobase(unsigned int vidmem){ asm( //vidmem pointer is R12 " sex R12\n" " out 7\n" " sex R2\n"); } void vidstrcpy(unsigned int vidmem,char * text){ //write to video memory asm( "$$cpy:\n" " lda R13 ;pick up input pointer\n" " b1 $ ;wait til video is quiet\n" " str R12 ;move the byte\n" " inc R12 ;++\n" " bnz $$cpy\n"); } struct ClassStruct { int data; void (*set_class_data)(struct ClassStruct*, int); }; typedef struct ClassStruct class_t; void _set_class_data(struct ClassStruct* this, int val) { this->data = val; } int main() { class_t foo; unsigned int vidmem=0xf800; setvideobase(vidmem); foo.set_class_data = _set_class_data; foo.set_class_data(&foo, 42); if(foo.data==42) { vidstrcpy(vidmem+40, "OK - FOO.DATA == 42"); } else { vidstrcpy(vidmem+40, "KO - FOO.DATA != 42"); } return 0; } ================================================ FILE: src/debug/comx_simplest_class.c ================================================ void setvideobase(unsigned int vidmem){ asm( //vidmem pointer is R12 " sex R12\n" " out 7\n" " sex R2\n"); } void vidstrcpy(unsigned int vidmem,char * text){ //write to video memory asm( "$$cpy:\n" " lda R13 ;pick up input pointer\n" " b1 $ ;wait til video is quiet\n" " str R12 ;move the byte\n" " inc R12 ;++\n" " bnz $$cpy\n"); } struct ClassStruct { void (*method_t)(void); }; typedef struct ClassStruct class_t; unsigned int vidmem=0xf800; void _print_42(void) { vidstrcpy(vidmem+40, "42"); } int main() { class_t foo; setvideobase(vidmem); foo.method_t = _print_42; foo.method_t(); return 0; } ================================================ FILE: src/debug/comx_size_debug.c ================================================ /* Hello World for the COMX-35 by Marcel van Tongoren & Bill Rowe */ #include #define putc(c) putcomx(c,0x3302) void putcomx(unsigned char c, unsigned int r13val){ asm( " glo r12\n" " lbr 0x2cd3\n"); } char shapes[] = { 97, // First byte is the character to shape followed by 9 bytes for the shape 0x00, 0xcc, 0xde, 0xed, 0xff, 0xf3, 0xed, 0xe1, 0x00, 98, // next character to shape 0x00, 0x8c, 0x9e, 0xad, 0xbf, 0xb3, 0xad, 0xa1, 0x00, 99, 0x00, 0x00, 0xcc, 0xde, 0xff, 0xde, 0xcc, 0x00, 0x00, }; void shapechar(char * shapelocation, int number) { asm( //shapelocation pointer is R12, number of shapes is R13 " ldi 0xf7\n" " phi R8\n" " ldi 0xfb\n" " phi R9\n" "$$nextshape:\n" " ldi 0xC0 \n" " plo R8 ; R8 = charmem pointer\n" " plo r9 ; R9 = vidmem pointer\n" " ldi 9 \n" " plo R10 ; R10.0 = number of lines, we need to somehowe make a NTSC version for 8 lines\n" " lda 12\n" " phi R10 ; R10.1 = character\n" "$$nextline:\n" " ghi R10\n" " b1 $ ; wait til video is quiet\n" " str R9 ; store character in vidmem\n" " inc R9\n" " lda R12\n" " str R8 ; store first shape line in charmem\n" " inc R8\n" " dec R10\n" " glo R10\n" " bnz $$nextline ; number of lines - 1 if not zero do next line\n" " dec r13\n" " glo r13\n" " bnz $$nextshape\n"); } void setvideobase(unsigned int vidmem){ asm( //vidmem pointer is R12 " sex R12\n" " out 7\n" " sex R2\n"); } void disableinterrupt(){ asm( " sex 3\n" " dis\n" " db 0x23\n"); } void enableinterrupt(){ asm( " sex 3\n" " ret\n" " db 0x23\n"); } void vidstrcpy(unsigned int vidmem,char * text){ //write to video memory asm( "$$cpy:\n" " lda R13 ;pick up input pointer\n" " b1 $ ;wait til video is quiet\n" " str R12 ;move the byte\n" " inc R12 ;++\n" " bnz $$cpy\n"); } void vidclr(unsigned int vidmem, int vidlen){ //write 0's to video memory asm( //vidmem pointer is R12, vidlen is R13 "$$cpy:\n" " ldi 0 ;source a 0 for clearing the screen\n" " b1 $ ;wait til video is quiet\n" " str R12 ;move the byte\n" " inc R12 ;++\n" " dec R13 ;decrement count\n" " glo R13 ; check bottom byte\n" " bnz $$cpy\n" " ghi R13 ;top byte\n" " bnz $$cpy\n"); return; } void vidchar(unsigned int vidmem, int character){ //write character to vidmem location in video memory asm(//vidmem pointer is R12, character is R13.0 " glo r13\n" " b1 $ ;wait til video is quiet\n" " str R12 ;move the byte\n"); return; } unsigned char getkey(){ //get key value if pressed, otherwise return 0 asm( " bn3 $$nokey ;check if key pressed\n" " inp 3\n" " lskp\n" "$$nokey:\n" " ldi 0\n" " plo R15\n" " ldi 0\n" " phi R15\n" " Cretn\n"); return 0; //this statement will never be executed but it keeps the compiler happy } unsigned char cgetc(){ //wait for key press asm( " bn3 $ ;wait for key\n" " inp 3\n" " plo R15\n" " ldi 0\n" " phi R15\n" " Cretn\n"); return 0; //this statement will never be executed but it keeps the compiler happy } int kbhit(){ //return 1 if a key is pressed, 0 if not asm( " b2 $$keypressed\n" " ldi 0\n" " lskp\n" "$$keypressed:\n" " ldi 1\n" " plo R15\n" " ldi 0\n" " phi R15\n" " Cretn\n"); return 0; //this statement will never be executed but it keeps the compiler happy } void settone(int value){ asm( " sex R12 ;Tone generation value\n" " out 4\n" " sex R2\n"); } void generatetone(int tone, int range, int volume){ int tonevalue; tonevalue = (volume & 0xf) + ((range &0x7) << 4) + 0x8 + ((tone & 0x7f) << 8); settone(tonevalue); } void setnoise(int value){ asm( " ldireg R8,0x41C3\n" " ldn R8\n" " plo R12 ; load current OUT 5 (low byte) video setting from 0x41C3 and store in R12.0\n" " sex R12 ; Noise generation value\n" " out 5\n" " sex R2\n"); } void generatenoise(int range, int volume){ int tonevalue; tonevalue = ((volume & 0xf) + ((range &0x7) << 4) + 0x8) << 8; setnoise(tonevalue); } void main(){ unsigned int vidmem=0xf800; unsigned char key; unsigned int loop; setvideobase(vidmem); enableinterrupt(); vidclr(vidmem,24*40); vidstrcpy(vidmem, "HELLO WORLD"); if(sizeof(unsigned char)==1) { vidstrcpy(vidmem+80, "UNSIGNED CHAR HAS SIZE 1"); } else { vidstrcpy(vidmem+80, "UNSIGNED CHAR DOES NOT HAVE SIZE 1!"); } if(sizeof(unsigned short)==2) { vidstrcpy(vidmem+120, "UNSIGNED SHORT HAS SIZE 2"); } else { vidstrcpy(vidmem+120, "UNSIGNED SHORT DOES NOT HAVE SIZE 2!"); } if(sizeof(unsigned int)==2) { vidstrcpy(vidmem+160, "UNSIGNED INT HAS SIZE 2"); } else { vidstrcpy(vidmem+160, "UNSIGNED INT DOES NOT HAVE SIZE 2!"); } if(sizeof(unsigned long)==4) { vidstrcpy(vidmem+200, "UNSIGNED LONG HAS SIZE 4"); } else { vidstrcpy(vidmem+200, "UNSIGNED LONG DOES NOT HAVE SIZE 4!"); } if(sizeof(unsigned long long)==8) { vidstrcpy(vidmem+240, "UNSIGNED LONG LONG HAS SIZE 8"); } else { vidstrcpy(vidmem+240, "UNSIGNED LONG LONG DOES NOT HAVE SIZE 8!"); } while(1); } #include ================================================ FILE: src/debug/conio.c ================================================ /* * conio API test program * * keys: * * 1...0 change text color * F5/F6 change border color * F7/F8 change background color * */ #include #include #include #include #if defined(__GAMATE__) /* there is not enough screen space to show all 256 characters at the bottom */ #define NUMCHARS 128 #define NUMCOLS 4 #else #define NUMCHARS 256 #define NUMCOLS 16 #endif static char grid[5][5] = { {CH_ULCORNER, CH_HLINE, CH_TTEE, CH_HLINE, CH_URCORNER}, {CH_VLINE, ' ', CH_VLINE, ' ', CH_VLINE }, {CH_LTEE, CH_HLINE, CH_CROSS, CH_HLINE, CH_RTEE }, {CH_VLINE, ' ', CH_VLINE, ' ', CH_VLINE }, {CH_LLCORNER, CH_HLINE, CH_BTEE, CH_HLINE, CH_LRCORNER} }; void main(void) { unsigned int i, j, n; unsigned char xsize, ysize, tcol, bgcol, bcol, inpos = 0; #if defined(__NES__) || defined(__PCE__) || defined(__GAMATE__) unsigned char joy; joy_install(joy_static_stddrv); #endif clrscr(); screensize(&xsize, &ysize); cputs("cc65 conio test\n\r"); cputs("Input:[ ]"); /* 8 spaces */ tcol = textcolor(0); /* memorize original textcolor */ bgcol = bgcolor(0); /* memorize original background color */ bcol = bordercolor(0); /* memorize original border color */ (void)bordercolor(bcol); (void)bgcolor(bgcol); cputsxy(0, 2, "Colors:" ); for (i = 0; i < 3; ++i) { gotoxy(i, 3 + i); for (j = 0; j < NUMCOLS; ++j) { (void)textcolor(j); cputc('X'); } } (void)textcolor(tcol); cprintf("\n\n\r Screensize: %ux%u", xsize, ysize); chlinexy(0, 6, xsize); cvlinexy(0, 6, 3); chlinexy(0, 8, xsize); cvlinexy(xsize - 1, 6, 3); cputcxy(0, 6, CH_ULCORNER); cputcxy(xsize - 1, 6, CH_URCORNER); cputcxy(0, 8, CH_LLCORNER); cputcxy(xsize - 1, 8, CH_LRCORNER); for (i = 0; i < 5; ++i) { gotoxy(xsize - 5, i); for (j = 0; j < 5; ++j) { cputc(grid[i][j]); } } gotoxy(0, ysize - 2 - ((NUMCHARS + xsize) / xsize)); revers(1); for (i = 0; i < xsize; ++i) { cputc('0' + i % 10); } revers(0); for (i = 0; i < NUMCHARS; ++i) { if ((i != '\n') && (i != '\r')) { cputc(i); } else { cputc(' '); } } while(wherex() > 0) { cputc('#'); } revers(1); for (i = 0; i < xsize; ++i) { cputc('0' + i % 10); } revers(0); cursor(1); for (;;) { /* do the "rvs" blinking */ i = textcolor(COLOR_BLACK); gotoxy(8, 2); j = (++n / 16) & 1; revers(j); cputc(j ? 'R' : ' '); revers(j ^ 1); cputs(" rvs"); revers(0); (void)textcolor(i); gotoxy(7 + inpos, 1); #if defined(__NES__) || defined(__PCE__) || defined(__GAMATE__) /* not all targets have waitvsync */ waitvsync(); /* for targets that do not have a keyboard, read the first joystick */ joy = joy_read(JOY_1); cprintf("%02x", joy); #else i = cgetc(); switch (i) { case CH_ENTER: clrscr(); return; case CH_CURS_LEFT: inpos = (inpos - 1) % 8; break; case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': (void)textcolor(i - '0'); break; #ifdef CH_F5 case CH_F5: bcol = (bcol + 1) & 0x0f; (void)bordercolor(bcol); break; #endif #ifdef CH_F6 case CH_F6: bcol = (bcol - 1) & 0x0f; (void)bordercolor(bcol); break; #endif #ifdef CH_F7 case CH_F7: bgcol = (bgcol + 1) & 0x0f; (void)bgcolor(bgcol); break; #endif #ifdef CH_F8 case CH_F8: bgcol = (bgcol - 1) & 0x0f; (void)bgcolor(bgcol); break; #endif default: cputc(i); /* fallthrough */ case CH_CURS_RIGHT: inpos = (inpos + 1) % 8; } #endif } } ================================================ FILE: src/debug/conio0.c ================================================ /* * conio API test program * * keys: * * 1...0 change text color * F5/F6 change border color * F7/F8 change background color * */ #include #include #include #include int main() { int i; int j; for(i=0;i<10;++i) { for(j=0;j<10;++j) { gotoxy(i,j); cputc('x'); } } return 0; } ================================================ FILE: src/debug/conio_test.c ================================================ #include int main() { gotoxy(0,1); cprintf("hello world"); gotoxy(0,2); cprintf("au revoir"); gotoxy(0,3); cprintf("%d", XSize); gotoxy(5,3); cprintf("%d", YSize); gotoxy(0,0); // cprintf("01234567890123456789012345678901234567890123456789012345678901234567890123456789"); cprintf("0123456789012345678901234567890123456789"); gotoxy(0,24); // cprintf("01234567890123456789012345678901234567890123456789012345678901234567890123456789"); cprintf("0123456789012345678901234567890123456789"); while(1){}; return 0; } ================================================ FILE: src/debug/cpc_test.c ================================================ #include #include #include int main(void) { int mode = 0; console_ioctl(IOCTL_GENCON_SET_MODE, &mode); textbackground(BLACK); printf("Hello world\n"); getchar(); bordercolor(BLACK); clrscr(); textcolor(RED); gotoxy(2,2); printf("Hello world\n"); while(1){}; return 0; } ================================================ FILE: src/debug/cprintf.c ================================================ #include #define _XL_PRINTD(x,y,length,val) \ do \ { \ gotoxy(x,y); \ cprintf("%0" #length "u",val); \ } while(0) int main(void) { // _XL_PRINTD(10,10,3,123); cprintf("%03u",123); while(1){}; return 0; } ================================================ FILE: src/debug/debug_images.h ================================================ #ifndef _IMAGES_H #define _IMAGES_H #define _PLAYER_LEFT 42 typedef unsigned char uint8_t; struct ImageStruct { uint8_t _imageData; #if !defined(_XL_NO_COLOR) uint8_t _color; #endif }; typedef struct ImageStruct Image; #if !defined(ANIMATE_PLAYER) Image PLAYER_IMAGE; #else // #if !defined(__LCC1802__) Image PLAYER_DOWN; Image PLAYER_UP; Image PLAYER_RIGHT; Image PLAYER_LEFT; // #endif #endif Image GHOST_IMAGE; Image BOMB_IMAGE; #if !defined(NO_DEAD_GHOSTS) Image DEAD_GHOST_IMAGE; #endif #endif // _IMAGES_H ================================================ FILE: src/debug/empty42.c ================================================ int main() { int a = 42; int b; b = a; return 0; } ================================================ FILE: src/debug/extern.c ================================================ #include "extern.h" extern const int foo[]; int main(void) { return 0; } ================================================ FILE: src/debug/extern.h ================================================ const int foo[] = {42,43,44,45,46,47}; ================================================ FILE: src/debug/foo.c ================================================ extern char foo[]; int main(void) { return 0; } ================================================ FILE: src/debug/foo.h ================================================ #if defined(_FOO_DEF) #define _FOO 43 #endif struct FooStruct { unsigned char bar; }; typedef struct FooStruct Foo; Foo FOO; ================================================ FILE: src/debug/fx.c ================================================ #include #include void main() { int i; for (i=0; i < 8 ; i++ ) { printf("bit_fx(%u)\n",i); bit_fx(i); } for (i=0; i < 8 ; i++ ) { printf("bit_fx2(%u)\n",i); bit_fx2(i); } for (i=0; i < 8 ; i++ ) { printf("bit_fx3(%u)\n",i); bit_fx3(i); } for (i=0; i < 8 ; i++ ) { printf("bit_fx4(%u)\n",i); bit_fx4(i); } for (i=0; i < 8 ; i++ ) { printf("bit_fx5(%u)\n",i); bit_fx5(i); } while(1){}; } ================================================ FILE: src/debug/gamate_conio_test.c ================================================ #include #include #include void waitForJoy(void) { while(!(JOY_BTN_1(joy_read(0)))){}; } int main(void) { joy_install((void *)joy_static_stddrv); while(1) { clrscr(); gotoxy(2,2); textcolor(COLOR_BLACK); cprintf("hello"); sleep(1); waitForJoy(); textcolor(COLOR_WHITE); gotoxy(2,2); cprintf("ciao!"); sleep(1); waitForJoy(); gotoxy(2,2); textcolor(1); cprintf("hello"); sleep(1); waitForJoy(); textcolor(2); gotoxy(2,2); cprintf("ciao!"); sleep(1); waitForJoy(); gotoxy(2,2); textcolor(2); cprintf("hello"); sleep(1); waitForJoy(); textcolor(1); gotoxy(2,2); cprintf("ciao!"); sleep(1); waitForJoy(); gotoxy(2,2); textcolor(COLOR_BLACK); cprintf("hello"); sleep(1); waitForJoy(); textcolor(COLOR_WHITE); gotoxy(2,2); cprintf("ciao!"); } return 0; } ================================================ FILE: src/debug/gamate_conio_test2.c ================================================ #include #include #include #include void waitForJoy(void) { while(!(JOY_BTN_1(joy_read(0)))){}; } void display_3_rows(uint8_t x_offset, uint8_t y_offset) { uint8_t i; uint16_t j; for(i=0;i<3;++i) { gotoxy(x_offset,y_offset+i); textcolor(1+i); cprintf("hello"); for(j=0;j<10000;++j){}; waitForJoy(); } } int main(void) { uint8_t i; joy_install((void *)joy_static_stddrv); while(1) { clrscr(); for(i=0;i<3;++i) { display_3_rows(2+i,2+i); waitForJoy(); } for(i=0;i<3;++i) { display_3_rows(2+5*i,9+i); waitForJoy(); } sleep(1); } return 0; } ================================================ FILE: src/debug/gb_main.c ================================================ #include int main(void) { unsigned char i; for(i=0;i<20;++i) { gotoxy(19,i); } while(1){}; return EXIT_SUCCESS; } ================================================ FILE: src/debug/gcc_class.c ================================================ #include #include #include #include struct ParentStruct { int data; void (*set_parent_data)(struct ParentStruct*, int); }; typedef struct ParentStruct parent_t; struct ChildStruct { parent_t _parent; int more_data; void (*set_child_data)(struct ChildStruct* this, int val); }; typedef struct ChildStruct child_t; void _set_parent_data(struct ParentStruct* this, int val) { this->data = val; } void _set_child_data(child_t* this, int val) { this->more_data = val; } int main() { parent_t foo; child_t bar; parent_t *bar_p = (parent_t*) &bar; bar._parent.set_parent_data = _set_parent_data; foo.set_parent_data = _set_parent_data; foo.set_parent_data(&foo, 42); bar_p->set_parent_data(bar_p, 43); printf("value in parent: %d\n", foo.data); printf("value in child: %d\n", bar_p->data); if(foo.data==42) { printf("OK - FOO.DATA == 42 OK\n"); } else { printf("KO - FOO.DATA != 42\n"); } if(bar_p->data==43) { printf("OK - BAR_P->DATA == 43 OK\n"); } else { printf("KO - BAR_P->DATA != 43 OK\n"); } return EXIT_SUCCESS; } ================================================ FILE: src/debug/gcc_simple_class.c ================================================ #include #include #include #include struct ClassStruct { int data; void (*set_data)(struct ClassStruct*, int); }; typedef struct ClassStruct class_t; void _set_data(struct ClassStruct* this, int val) { this->data = val; } int main() { class_t foo; foo.set_data = _set_data; foo.set_data(&foo, 42); if(foo.data==42) { printf("OK - FOO.DATA == 42\n"); } else { printf("KO - FOO.DATA != 42\n"); } return EXIT_SUCCESS; } ================================================ FILE: src/debug/gcc_simplest_class.c ================================================ #include #include #include #include struct ClassStruct { void (*method_t)(void); }; typedef struct ClassStruct class_t; void _print_42(void) { printf("42\n"); } int main() { class_t foo; foo.method_t = _print_42; foo.method_t(); return EXIT_SUCCESS; } ================================================ FILE: src/debug/gcc_test.c ================================================ #include #include #define NUMBER_OF_STRINGS 5 #define MAX_STRING_SIZE 7 const char strings[NUMBER_OF_STRINGS][MAX_STRING_SIZE] = { "Mine", "Energy", "Bonus", "Points", "Apple" }; int main(void) { uint8_i; set_graphics(VDP_SPR_16x16); // set video mode charsetlc(); // load character set with lowercase vdpmemset(gImage, 32, 768); // clear screen VDP_SET_REGISTER(VDP_REG_COL, COLOR_BLACK); // set screen color for(i=0;i int main(void) { unsigned char i; unsigned char j; psg_init(); psg_volume(0, 15); //psg_channels(1, 0); // set first channel to tone generation, reset noise channels for(i=0;i<16;i++) { psg_tone(0, 500-(i*16)); for(j=0;j<150;++j) {} } psg_volume(0, 0); return 0; } ================================================ FILE: src/debug/getk_test.c ================================================ #include int main() { while(1) { printf("ch: %d\n", getk()); } return 0; } ================================================ FILE: src/debug/h0comx.c ================================================ int main() { int a = 42; return 0; } ================================================ FILE: src/debug/hello_cgetc.c ================================================ #include #include int main(){ while(1){ clrscr(); printf("Hello World!\n"); cgetc(); }; return 0; } ================================================ FILE: src/debug/hello_conio.c ================================================ #include int main() { clrscr(); gotoxy(4,4); textcolor(RED); cprintf("hello world"); while(1){}; return 0; } ================================================ FILE: src/debug/hello_fputc.c ================================================ #include int main() { fputc_cons('h'); fputc_cons('e'); fputc_cons('l'); fputc_cons('l'); fputc_cons('o'); while(1){}; return 0; } ================================================ FILE: src/debug/hello_sdl.c ================================================ #include #include #include SDL_Surface *screen; void drawRandomPixels() { if (SDL_MUSTLOCK(screen)) SDL_LockSurface(screen); Uint8 * pixels = screen->pixels; for (int i=0; i < 1048576; i++) { char randomByte = rand() % 255; pixels[i] = randomByte; } if (SDL_MUSTLOCK(screen)) SDL_UnlockSurface(screen); SDL_Flip(screen); } int main(int argc, char* argv[]) { SDL_Init(SDL_INIT_VIDEO); screen = SDL_SetVideoMode(512, 512, 32, SDL_SWSURFACE); emscripten_set_main_loop(drawRandomPixels, 60, 1); } ================================================ FILE: src/debug/helloworld.c ================================================ #include int main() { printf("Hello World!\n"); while(1){}; return 0; } ================================================ FILE: src/debug/helloworld_background_color.c ================================================ #include #include #if defined(__MSX__) #define MODE 2 #else #define MODE 0 #endif int main() { int mode = MODE; console_ioctl(IOCTL_GENCON_SET_MODE, &mode); textcolor(WHITE); bordercolor(YELLOW); textbackground(RED); clrscr(); gotoxy(2,2); cprintf("hello world\n"); while(1){}; return 0; } ================================================ FILE: src/debug/helloworld_getchar.c ================================================ #include int main(){ while(1){ printf("Hello World!\n"); getchar(); }; return 0; } ================================================ FILE: src/debug/htron.c ================================================ /************************************************************** * htron.c * * H-Tron - a Tron motorcycle game * * Originally written in Borland Turbo C 2.01 for * * XT-class DOS PCs equipped with a Hercules graphics card * * Author: RobertK (RobertK@psc.at), December 2016 * * * * Ported to the varous Z80-based computers * * (based on DOS Version 2016-12-26a) * * by RobertK in 2018 using the z88dk C compiler * * * * Portable z88dk Version 2020-05-04 * * * * Compile with z88dk nightly build * * (last full compilation with version 2018-07-09, * * ColecoVision target with 2018-07-04 due to a * * problem with that target in the 2018-07-09 nightly) * * Do not use the stable release 1.99B because * * the z88dk team have since then massively improved * * the graphics functions for various targets. * * * * This is the classic overhead view "Tron" game from * * the movie of the same title (motorcycles that leave * * "wall trails" behind them). If you crash into a wall, * * your opponent scores a point. The player who first * * reaches a score of 5 wins. * * * * Controls (on QWERTY keyboards, AZERTY differs) * * Turn left/right: * * Left Player: A/S * * Right Player: N/M or 5/8 (Cursor left/right on ZX81) * * (in one-player mode, human is right player) * * Start round: Space or 0 * * Pause game: P * * End game: X * **************************************************************/ #include // #include // custom-made ASM plot() and point() functions for the ZX81 target (by A. Rea) #include // contains standard plot() and point() functions #if defined(__PC6001__) || defined(__MC1000__) || defined(__EINSTEIN80COLUMNS__) || defined(__TIKI100__) || defined(__GALPLUSHIRES__) || defined(__SMC777__) || defined(__EXCALIBUR64__) || defined(__FP1100__) // NEC PC-6001, CCE MC-1000, Tatung Einstein 80 column mode, Tiki-100, Galaksija Plus HiRes-Mode, Sony SMC-777, Casio FP-1100 #include // required for switching the screen mode #endif #if defined(__TIKI100__) #include #endif #if defined(__MSX__) #pragma output nofileio // we don't need any file I/O in this game, so we can save a few bytes here #endif // Some systems have no keyboard // These are usually consoles with two joysticks #if defined(__PV1000__) || (defined(__COLECO__) && !defined(__BIT90__)) || defined(__PACMAN__) || defined(__Z80TVGAME__) || defined(__GAMEBOY__) || defined(__MYVISION__) // Casio PV-1000, ColecoVision, PacMan-Hardware, etc. #define JOYSTICK_ONLY 1 #include #endif // But some have only one joystick #if defined(__Z80TVGAME__) || defined(__GAMEBOY__) #define TWO_PLAYER_MODE_NOT_AVAILABLE 1 #endif // For joystick-only systems we have to define the joystick numbers, and // if there is a "Pause" button and a "Menu" button // -1 means that such a button is not available #if defined(__PV1000__) // Casio PV-1000 #define JOYSTICK_1 0 #define JOYSTICK_2 1 #define JOYSTICK_BUTTON_MENU MOVE_FIRE3 // Select #define JOYSTICK_BUTTON_PAUSE MOVE_FIRE4 // Start #elif defined(__COLECO__) && !defined(__BIT90__) // ColecoVision #define JOYSTICK_1 1 #define JOYSTICK_2 2 #define JOYSTICK_BUTTON_MENU MOVE_FIRE2 // Select #define JOYSTICK_BUTTON_PAUSE -1 // only two-Joystick buttons available #elif defined(__PACMAN__) // PacMan-Hardware // PROVISIONAL VALUES #define JOYSTICK_1 1 #define JOYSTICK_2 2 #define JOYSTICK_BUTTON_MENU -1 // only 1-player start and 2-player-start button #define JOYSTICK_BUTTON_PAUSE -1 // only 1-player start and 2-player-start button #elif defined(__Z80TVGAME__) // Z80 TV-Game (homebrew) #define JOYSTICK_1 1 #define JOYSTICK_2 1 // The z88dk wiki says that this is a single joystick system, but the Takeda emulator supports two?? #define JOYSTICK_BUTTON_MENU MOVE_FIRE2 // Button 2 #define JOYSTICK_BUTTON_PAUSE -1 #elif defined(__GAMEBOY__) // Nintendo Gameboy #define JOYSTICK_1 0 #define JOYSTICK_2 1 #define JOYSTICK_BUTTON_MENU MOVE_FIRE3 // Select Button #define JOYSTICK_BUTTON_PAUSE MOVE_FIRE4 // Start Button #elif defined(__MYVISION__) #define JOYSTICK_1 1 #define JOYSTICK_2 2 #define JOYSTICK_BUTTON_MENU MOVE_FIRE3 // Select Button #define JOYSTICK_BUTTON_PAUSE MOVE_FIRE4 // Start Button #endif // VT100 Console I/O ANSI driver for the targets that support it // we use this for gotoxy() and keyboard input #if defined(__ABC80__) || defined(__ACE__) || defined(__AQUARIUS__) || defined(__NASCOM__) || defined(__P2000__) || defined(__VG5000__) || defined(__SHARPMZ__) || defined(__VZ200__) || defined(__Z1013__) || defined(__Z9001__) || defined(__PC6001__) || defined(__MSX__) || defined(__CPC__) || defined(__X1__) #include #define USE_ANSI 1 #elif ((defined(__TRS80__) && !defined(__EG2000__)) || defined(__PV1000__)) || defined(__SORCERER__) || defined(__COLECO__) || defined(__ALPHATRO__) || defined(__SPC1000__) || defined(__MULTI8__) || defined(__RX78__) || defined(__PV2000__) || defined(__SPECTRUM__) || defined(__KC__) || defined(__SVI__) || defined(__MTX__) || defined(__M5__) || defined(__SC3000__) || defined(__LASER500__) || defined(__EINSTEIN__) || (defined(__LYNX__) && !defined(__LYNXSTANDARDCONSOLE__)) || defined(__MC1000__) || defined(__BEE__) || defined(__TIKI100__) || defined(__SUPER80__) || defined(__GAL__) || defined(__SMC777__) || defined(__Z80TVGAME__) || defined(__EXCALIBUR64__) || defined(__GAMEBOY__) || defined(__RC700__) || defined(__PC88__) || defined(__FP1100__) || defined(__MYVISION__) || defined(__PENCIL2__) || defined(__HGMC__) || defined(__PMD85__) || defined(__VECTOR06C__) || defined(__HOMELAB__) || defined(__HOMELAB2__) || defined(__PRIMO__) || defined(__MIKRO80__) // TRS-80, Casio PV-1000, Exidy Sorcerer, ColecoVision, ... #define USE_GENERIC_CONSOLE 1 #elif defined(__OSBORNE1__) || defined(__PACMAN__) || defined(__KAYPRO84__) || defined(__ATTACHE__) // Osborne 1, PacMan-Hardware, Kaypro, Otrona Attache #define USE_NATIVE_CONSOLE 1 #endif // #if defined(__TRS80__) || defined(__SORCERER__) // Triumph-Adler Alphatronic PC, Samsung SPC-1000, Mitsubishi Multi8 // Note: TRS-80 / EG2000 and Exidy Sorcerer use inkey_pressed() input during gameplay, but native keyboard input is used in menus #if defined(__ALPHATRO__) || defined(__SPC1000__) || defined(__MULTI8__) || defined(__TRS80__) || defined(__SORCERER__) || defined(__RX78__) || defined(__PV2000__) || defined(__SPECTRUM__) || defined(__SVI__)|| defined(__MTX__) || defined(__M5__) || defined(__SC3000__) || defined(__LASER500__) || defined(__EINSTEIN__) || defined(__OSBORNE1__) || defined(__LYNX__) || defined(__MC1000__) || defined(__BEE__) || defined(__TIKI100__) || defined(__SUPER80__) || defined(__GAL__) || defined(__SMC777__) || defined(__ATTACHE__) || defined(__EXCALIBUR64__) || defined(__RC700__) || defined(__PC88__) || defined(__PENCIL2__) || defined(__PMD85__) || defined(__BIT90__) || defined(__VECTOR06C__) || defined(__HOMELAB2__) || defined(__MIKRO80__) || defined(__PRIMO__) #define USE_NATIVE_INPUT 1 // kbhit() and getch() without conio.h #endif #if defined(__ZX81__) || defined(__ZX80__) || defined(__ACE__) || defined(__VZ200__) || defined(__SORCERER__) || defined(__VG5000__) || defined(__TRS80__) || defined(__AQUARIUS__) || defined(__SPECTRUM__) || defined(__PMD85__) || defined(__PRIMO__) || defined(__MIKRO80__) #define USE_INKEYPRESSED 1 // allows simultaneously checking the status of more than just one key #endif // These systems can only display upper-case characters, but in the C source you need to // use lower-case characters while the upper-case ones have a different meaning (for the // ZX80 and ZX81 they produce inverse character) #if defined(__ZX81__) || defined(__ZX80__) || defined(__PACMAN__) || (defined(__GAL__) && !defined(__GALPLUSHIRES__)) || defined(__HOMELAB2__) || defined(__MIKRO80__) #define SMALL_LETTERS_ONLY 1 #endif // Here we define the position of the separator line, etc. // Most systems use the values in the ELSE section, but some need special values. #if (defined(__VZ200__) && !defined(VZ200_LGFX)) || defined(__P2000__) || (defined(__TRS80__) && defined(__EG2000__)) || defined(__PC88__) // Some systems cannot combine text and graphics, so the z88dk team kindly added // 4x6 character support to their graphic modes. This requires a different method // of text positioning by specifying pixel coordinates instead of line and column // coordinates. For these systems we define FOUR_BY_SIX_CHARACTERS. #define FOUR_BY_SIX_CHARACTERS 1 #define SCORE_LINE 0 #define SCORE_COL 0 #define BORDER_TOP 7 #define SEPARATOR_LINE -1 // not drawn #elif defined(__TRS80__) && !defined(__EG2000__) // TRS-80 #define SCORE_LINE 1 #define SCORE_COL 2 #define BORDER_TOP 0 #define SEPARATOR_LINE 6 #elif defined(__SORCERER__) || defined(__MULTI8__) || defined(__SPECTRUM__) || defined(__OSBORNE1__) || defined(__BEE__) || defined(__MIKRO80__) // Exidy Sorcerer, Mitsubishi Multi8, ZX Spectrum, Osborne 1, Microbee, Mikro-80 #define SCORE_LINE 1 #define SCORE_COL 2 #define BORDER_TOP 0 #define SEPARATOR_LINE 5 #elif defined(__ALPHATRO__) // Triumph-Adler Alphatronic PC #define SCORE_LINE 1 #define SCORE_COL 1 #define BORDER_TOP 0 #define SEPARATOR_LINE 7 #elif defined(__NASCOM__) // Nascom #define SCORE_LINE 1 #define SCORE_COL 1 #define BORDER_TOP 0 #define SEPARATOR_LINE 7 #elif defined(__PC6001__) // NEC PC-6001 #define SCORE_LINE 1 #define SCORE_COL 1 #define BORDER_TOP 0 #define SEPARATOR_LINE 7 #elif defined(__SPC1000__) // Samsung SPC-1000 #define SCORE_LINE 1 #define SCORE_COL 1 #define BORDER_TOP 0 #define SEPARATOR_LINE 7 #elif defined(__VG5000__) // Philips VG5000 #define SCORE_LINE 1 #define SCORE_COL 1 #define BORDER_TOP 0 #define SEPARATOR_LINE 7 #elif defined(__EINSTEIN80COLUMNS__) || defined(__RC700__) // Tatung Einstein 80 column mode, RC-700 #define SCORE_LINE 0 #define SCORE_COL 3 #define BORDER_TOP 1 #define SEPARATOR_LINE -1 // not drawn #elif defined(__SUPER80__) && !defined(__SUPER80_VDUEM__) // Super-80 e or m model #define SCORE_LINE 1 #define SCORE_COL 1 #define BORDER_TOP 0 #define SEPARATOR_LINE 7 #elif defined(__SUPER80__) && defined(__SUPER80_VDUEM__) // Super-80 r or v model #define SCORE_LINE 1 #define SCORE_COL 2 #define BORDER_TOP 0 #define SEPARATOR_LINE 5 #elif defined(__PACMAN__) // PacMan-Hardware // PROVISIONAL VALUES #define SCORE_LINE 2 #define SCORE_COL 1 #define BORDER_TOP 0 #define SEPARATOR_LINE 5 #elif (defined(__GAL__) && !defined(__GALPLUSHIRES__)) #define SCORE_LINE 0 #define SCORE_COL 1 #define BORDER_TOP 4 #define SEPARATOR_LINE -1 // not drawn #elif defined(__ATTACHE__) // Otrona Attache #define SCORE_LINE 1 #define SCORE_COL 2 #define BORDER_TOP 0 #define SEPARATOR_LINE 6 #elif defined(__EXCALIBUR64__) #define SCORE_LINE 1 #define SCORE_COL 1 #define BORDER_TOP 0 #define SEPARATOR_LINE 7 #else #define SCORE_LINE 1 #define SCORE_COL 1 #define BORDER_TOP 0 #define SEPARATOR_LINE 5 #endif // Some 4x6 character systems offer a higher resolution, there we // do not need to shorten the text strings #if (defined(__VZ200__) && !defined(VZ200_LGFX)) || (defined(__TRS80__) && defined(__EG2000__)) || defined(__PC88__) #define FOUR_BY_SIX_CHARACTERS_WIDE_SCREEN 1 #endif // On some 4x6 systems we don't need to show the menu texts in two parts #if defined(__TRS80__) && defined(__EG2000__) || defined(__PC88__) #define FOUR_BY_SIX_CHARACTERS_TALL_SCREEN 1 #endif // Some systems support uppercase and lowercase characters, but have a narrow screen #if defined(__PV1000__) // identical to the FOUR_BY_SIX_CHARACTERS_WIDE_SCREEN variant, but with both uppercase and lowercase letters #define STANDARD_CHARACTERS_NARROW_SCREEN 1 #elif defined(__RX78__) // RX78: This system is special: 24x23 makes an almost quadratic layout #define STANDARD_CHARACTERS_NARROW_BUT_TALL_SCREEN 1 #elif defined(__Z80TVGAME__) || defined(__GAMEBOY__) #define STANDARD_CHARACTERS_VERYNARROW_BUT_TALL_SCREEN 1 #endif // Some systems have a screen resolution that requires us to double the // pixels on one axis to get closer to a 4:3 aspect ratio. Apart from looking // odd, the movement on one axis would be twice as fast as on the other axis // if we wouldn't make this correction. #if (defined(__TRS80__) && !defined(__EG2000__)) || defined(__SORCERER__) || defined(__MULTI8__) || defined(__OSBORNE1__) || defined(__CPC__) || defined(__BEE__) || defined(__EINSTEIN80COLUMNS__) || defined(__SUPER80_VDUEM__) || defined(__MIKRO80__) // || defined(__HOMELAB__) // || defined(__RC700__) // TRS-80, Exidy Sorcerer, Mitsubishi Multi8, Osborne 1, CPC, Tatung Einstein 80 Columns, Microbee, Super-80 r or v model #define DOUBLE_PIXELS_HORIZONTALLY 1 #endif // On some systems with high resolution graphics we use c_plot() and c_point() to // achieve a pseudo lo-res graphics resolution. c_plot() creates a 4x4 pixel rectangle, // which turns e.g. a 256x192 resolution into 64x48. #if defined(__COLECO__) || defined(__MULTI8__) || defined(__RX78__) || defined(__PV2000__) || defined(__SPECTRUM__) || defined(__SC3000__) || defined(__KC__) || defined(__MSX__) || defined(__M5__) || defined(__SVI__) || defined(__MTX__) || (defined(__EINSTEIN__) && !defined(__EINSTEIN80COLUMNS__)) || defined(__CPC__) || defined(__MC1000__) || defined(__TIKI100__) || (__GALPLUSHIRES__) || defined(__Z80TVGAME__) || defined(__ATTACHE__) || defined(__X1__) || defined(__MYVISION__) || defined(__PENCIL2__) || defined(__HGMC__) || defined(__PMD85__) || defined(__VECTOR06C__) || defined(__PRIMO__) #define USE_C_PLOT 1 #endif // The Sharp MZ seems to run out of stack space when the program crashes at the // "char textP1[25];" declaration within the InitPlayfield() function. Solution according to dom: // "compiling with the atexit size removed - by default on the MZ that's taking up 64 bytes of stack" // "For your case, I don't think there's any benefit in protecting that #pragma as just for the MZ - // I'm guessing you're not using atexit() so it might as well be 0 for all targets." // #if defined(__SHARPMZ__) // Sharp MZ #pragma output CLIB_EXIT_STACK_SIZE = 0 // #endif #define POINTS_TO_WIN 5 // On systems with very low resolution we reduce the AI player's sighting distance to get him closer to the walls #if (defined(__VZ200__) && defined(VZ200_LGFX)) // || defined(__SPC1000__) #define AI_MAX_DISTANCE_TO_CHECK 8 #define AI_SHORTSIGHTED_FACTOR 5 #else #define AI_MAX_DISTANCE_TO_CHECK 12 // (DOS version: 15) #define AI_SHORTSIGHTED_FACTOR 8 #endif // ZX81 and ZX80 Key Codes #define KEY_CODE_0 48 #define KEY_CODE_1 49 #define KEY_CODE_2 50 #define KEY_CODE_SPACE 32 // Keypress codes - only for those systems where in_KeyPressed() is implemented // You can find out these codes like this: // printf("in_lookupkey() for a is %d\n",in_LookupKey('a')); #if defined(__ZX81__) || defined(__ZX80__) || defined(__SPECTRUM__) #define KEYPRESS_CODE_5 4343 #define KEYPRESS_CODE_8 1263 #define KEYPRESS_CODE_A 509 #define KEYPRESS_CODE_M 1151 #define KEYPRESS_CODE_N 2175 #define KEYPRESS_CODE_P 479 #define KEYPRESS_CODE_S 765 #define KEYPRESS_CODE_X 1278 #elif defined(__ACE__) #define KEYPRESS_CODE_5 4343 #define KEYPRESS_CODE_8 1263 #define KEYPRESS_CODE_A 509 #define KEYPRESS_CODE_M 639 #define KEYPRESS_CODE_N 1151 #define KEYPRESS_CODE_P 479 #define KEYPRESS_CODE_S 765 #define KEYPRESS_CODE_X 2302 #elif defined(__VZ200__) #define KEYPRESS_CODE_5 -2303 #define KEYPRESS_CODE_8 -8440 #define KEYPRESS_CODE_A -752 #define KEYPRESS_CODE_M -4320 #define KEYPRESS_CODE_N -4351 #define KEYPRESS_CODE_P -16624 #define KEYPRESS_CODE_S -766 #define KEYPRESS_CODE_X -1278 #elif defined(__SORCERER__) #define KEYPRESS_CODE_5 4101 #define KEYPRESS_CODE_8 4104 #define KEYPRESS_CODE_A 1026 #define KEYPRESS_CODE_M 262 #define KEYPRESS_CODE_N 518 #define KEYPRESS_CODE_P 2057 #define KEYPRESS_CODE_S 1027 #define KEYPRESS_CODE_X 258 #elif defined(__VG5000__) // this machine from France has an AZERTY keyboard #define KEYPRESS_CODE_5 4099 #define KEYPRESS_CODE_8 16389 #define KEYPRESS_CODE_A 513 // Q instead of A #define KEYPRESS_CODE_M 4101 // , instead of M #define KEYPRESS_CODE_N 1031 #define KEYPRESS_CODE_P -32764 #define KEYPRESS_CODE_S 259 #define KEYPRESS_CODE_X 514 #elif defined(__TRS80__) // TRS-80 or EG2000, both use the same key codes #define KEYPRESS_CODE_5 8196 #define KEYPRESS_CODE_8 261 #define KEYPRESS_CODE_A 512 #define KEYPRESS_CODE_M 8193 #define KEYPRESS_CODE_N 16385 #define KEYPRESS_CODE_P 258 #define KEYPRESS_CODE_S 2050 #define KEYPRESS_CODE_X 259 #elif defined(__AQUARIUS__) // Mattel Aquarius #define KEYPRESS_CODE_5 261 #define KEYPRESS_CODE_8 259 #define KEYPRESS_CODE_A 8198 #define KEYPRESS_CODE_M 2050 #define KEYPRESS_CODE_N 4098 #define KEYPRESS_CODE_P 2049 #define KEYPRESS_CODE_S 1030 #define KEYPRESS_CODE_X 8197 #elif defined(__PMD85__) #define KEYPRESS_CODE_5 516 #define KEYPRESS_CODE_8 519 #define KEYPRESS_CODE_A 2048 #define KEYPRESS_CODE_M 4103 #define KEYPRESS_CODE_N 4102 #define KEYPRESS_CODE_P 1033 #define KEYPRESS_CODE_S 2049 #define KEYPRESS_CODE_X 4098 #elif defined(__PRIMO__) #define KEYPRESS_CODE_5 29 #define KEYPRESS_CODE_8 33 #define KEYPRESS_CODE_A 14 #define KEYPRESS_CODE_M 44 #define KEYPRESS_CODE_N 32 #define KEYPRESS_CODE_P 50 #define KEYPRESS_CODE_S 2 #define KEYPRESS_CODE_X 10 #elif defined(__MIKRO80__) #define KEYPRESS_CODE_5 8192 #define KEYPRESS_CODE_8 513 #define KEYPRESS_CODE_A 2050 #define KEYPRESS_CODE_M 516 #define KEYPRESS_CODE_N 1028 #define KEYPRESS_CODE_P 4100 #define KEYPRESS_CODE_S 261 #define KEYPRESS_CODE_X 8197 #endif // The key codes on the ZX81 and ZX80 are the same, but for the menu screens we use in_Inkey() // on the ZX81 and fgetc_cons() on the ZX80, and these two function return different codes. #if defined(__ZX80__) || defined(__SPECTRUM__) #define KEY_CODE_D 100 #define KEY_CODE_M 109 #define KEY_CODE_N 110 #define KEY_CODE_P 112 #define KEY_CODE_X 120 #define KEY_CODE_Y 121 #else // we use these ZX81 constants for the ANSI variants as well (the actual code values are irrelevant for this purpose) #define KEY_CODE_D 68 #define KEY_CODE_M 77 #define KEY_CODE_N 78 #define KEY_CODE_P 80 #define KEY_CODE_X 88 #define KEY_CODE_Y 89 #endif // ZX81/ZX80/Ace playfield dimensions: 64 x 48 (DOS version: 90 x 58 ) // Define the screen dimensions and startup positions for the current system // Note: the screen dimensions can be determined on runtime by calling getmaxx() and getmaxy() #if defined(__ZX81__) || defined(__ZX80__) || defined(__ACE__) || (defined(__GAL__) && !defined(__GALPLUSHIRES__)) || defined(__COLECO__) || defined(__PV2000__) || defined(__SC3000__) || defined(__PC6001__) || defined(__MSX__) || defined(__M5__) || defined(__SVI__) || defined(__MTX__) || defined(__SPC1000__) || (defined(__EINSTEIN__) && !defined(__EINSTEIN80COLUMNS__)) || defined(__MC1000__) || (defined(__SUPER80__) && !defined(__SUPER80_VDUEM__)) || defined(__MYVISION__) || defined(__PENCIL2__) || defined(__PRIMO__) // ZX81, ZX80, Jupiter Ace, Galaksija, ColecoVision, Casio PV-2000 (using c_plot), etc. #define X_RES 64 #define Y_RES 48 #define X_COLS 32 #define STARTUP_P1_X 10 #define STARTUP_P2_X 53 #define STARTUP_Y 26 #elif defined(__SPECTRUM__) // ZX Spectrum #define X_RES 64 #define Y_RES 48 #define X_COLS 64 #define STARTUP_P1_X 10 #define STARTUP_P2_X 53 #define STARTUP_Y 26 #elif defined(__GAL__) && defined(__GALPLUSHIRES__) // Galaksija Plus Hi-Res Mode 256x208 #define X_RES 64 #define Y_RES 52 #define X_COLS 32 #define STARTUP_P1_X 10 #define STARTUP_P2_X 53 #define STARTUP_Y 28 #elif defined(__VG5000__) || defined(__EXCALIBUR64__) // Philips VG5000 or Excalibur 64 #define X_RES 80 #define Y_RES 72 #define X_COLS 40 #define STARTUP_P1_X 12 #define STARTUP_P2_X 67 #define STARTUP_Y 39 #elif defined(__AQUARIUS__) || defined(__Z9001__) || defined(__LASER500__) || defined(__FP1100__) // Mattel Aquarius, Robotron Z9001, Laser 500/700, Casio FP-1100 #define X_RES 80 #define Y_RES 48 #define X_COLS 40 #define STARTUP_P1_X 12 #define STARTUP_P2_X 67 #define STARTUP_Y 26 #elif defined(__VZ200__) // VZ200 / Laser 310/210/110 #if !defined(VZ200_LGFX) #define X_RES 128 #define Y_RES 64 #define X_COLS 32 #define STARTUP_P1_X 20 #define STARTUP_P2_X 107 #define STARTUP_Y 35 #else #define X_RES 64 #define Y_RES 32 #define X_COLS 32 #define STARTUP_P1_X 10 #define STARTUP_P2_X 53 #define STARTUP_Y 17 #endif #elif defined(__TRS80__) && !defined(__EG2000__) // TRS-80 #define X_RES 64 // normally 128, but on this system we double the pixels horizontally to get a better aspect ratio #define Y_RES 48 #define X_COLS 64 // no VT100 Console I/O ANSI for this system #define STARTUP_P1_X 10 // normally 20, see above #define STARTUP_P2_X 53 // normally 107, see above #define STARTUP_Y 26 #elif defined(__TRS80__) && defined(__EG2000__) // EG2000 (constant for this sub-type available since nightly 2018-03-31) #define X_RES 160 #define Y_RES 96 // 160x102 on the newer models, but only 160x96 on the older ones - we use the latter so it will work on both models #define X_COLS 40 // no VT100 Console I/O ANSI for this system #define STARTUP_P1_X 25 #define STARTUP_P2_X 134 #define STARTUP_Y 54 #elif defined(__Z1013__) || defined(__HGMC__) || defined(__LYNX__) || defined(__VECTOR06C__) // Robotron Z1013, Hübler-Grafik-MC, Camputers Lynx, Vector 06c #define X_RES 64 #define Y_RES 64 #define X_COLS 32 #define STARTUP_P1_X 10 #define STARTUP_P2_X 53 #define STARTUP_Y 35 #elif defined(__SHARPMZ__) || defined(__SMC777__) || defined(__X1__) || defined(__HOMELAB2__) // Sharp MZ, Sony SMC-777 or Sharp X1 #define X_RES 80 #define Y_RES 50 #define X_COLS 40 #define STARTUP_P1_X 12 #define STARTUP_P2_X 67 #define STARTUP_Y 27 #elif defined(__ABC80__) // Luxor ABC 80 #define X_RES 78 #define Y_RES 72 #define X_COLS 40 #define STARTUP_P1_X 12 #define STARTUP_P2_X 65 #define STARTUP_Y 39 #elif defined(__NASCOM__) // Nascom #define X_RES 96 #define Y_RES 48 #define X_COLS 48 #define STARTUP_P1_X 15 #define STARTUP_P2_X 80 #define STARTUP_Y 26 #elif defined(__P2000__) // Philips P2000 #define X_RES 78 #define Y_RES 72 #define X_COLS 19 // normally 40, but with 4x6 characters LOWER(X_RES / 4) #define STARTUP_P1_X 12 #define STARTUP_P2_X 65 #define STARTUP_Y 39 #elif defined(__PV1000__) // Casio PV-1000 #define X_RES 56 #define Y_RES 48 #define X_COLS 28 #define STARTUP_P1_X 8 #define STARTUP_P2_X 47 #define STARTUP_Y 26 #elif defined(__SORCERER__) #define X_RES 64 // normally 128, but on this system we double the pixels horizontally to get a better aspect ratio #define Y_RES 60 #define X_COLS 64 #define STARTUP_P1_X 10 // normally 20, see above #define STARTUP_P2_X 53 // normally 107, see above #define STARTUP_Y 31 #elif defined(__ALPHATRO__) // Triumph-Adler Alphatronic PC #define X_RES 80 #define Y_RES 72 #define X_COLS 40 #define STARTUP_P1_X 12 #define STARTUP_P2_X 67 #define STARTUP_Y 39 /* // SPC-1000 resolution is now 64x48, see above #elif defined(__SPC1000__) // Samsung SPC-1000 #define X_RES 64 #define Y_RES 32 #define X_COLS 32 #define STARTUP_P1_X 10 #define STARTUP_P2_X 53 #define STARTUP_Y 17 /* #define X_RES 32 // normally 64, but on this system we double the pixels horizontally to get a better aspect ratio #define Y_RES 32 #define X_COLS 32 #define STARTUP_P1_X 5 // normally 10, see above #define STARTUP_P2_X 26 // normally 53, see above #define STARTUP_Y 17 */ */ #elif defined(__MULTI8__) // Mitsubishi Multi8 (640x200) #define X_RES 80 // normally 160, but on this system we double the pixels horizontally to get a better aspect ratio #define Y_RES 50 #define X_COLS 80 #define STARTUP_P1_X 12 // normally 25, see above #define STARTUP_P2_X 67 // normally 134, see above #define STARTUP_Y 27 #elif defined(__CPC__) // Amstrad/Schneider CPC (640x200) #define X_RES 80 // normally 160, but on this system we double the pixels horizontally to get a better aspect ratio #define Y_RES 50 #define X_COLS 40 #define STARTUP_P1_X 12 // normally 25, see above #define STARTUP_P2_X 67 // normally 134, see above #define STARTUP_Y 27 #elif defined(__RX78__) // Bandai RX-78 #define X_RES 48 #define Y_RES 46 #define X_COLS 24 #define STARTUP_P1_X 7 #define STARTUP_P2_X 40 #define STARTUP_Y 25 #elif defined(__GAMEBOY__) // Nintendo Gameboy #define X_RES 40 #define Y_RES 36 #define X_COLS 20 #define STARTUP_P1_X 6 #define STARTUP_P2_X 33 #define STARTUP_Y 19 #elif defined(__KC__) // Robotron HC-900, KC85/2..KC85/5 #define X_RES 80 #define Y_RES 64 #define X_COLS 40 #define STARTUP_P1_X 12 #define STARTUP_P2_X 67 #define STARTUP_Y 35 #elif defined(__OSBORNE1__) #define X_RES 52 // normally 104, but on this system we double the pixels horizontally to get a better aspect ratio #define Y_RES 48 #define X_COLS 52 #define STARTUP_P1_X 8 // normally 16, see above #define STARTUP_P2_X 43 // normally 87, see above #define STARTUP_Y 26 #elif defined(__EINSTEIN80COLUMNS__) // || defined(__RC700__) // Tatung Einstein 80 column mode #define X_RES 40 // normally 80, but on this system we double the pixels horizontally to get a better aspect ratio #define Y_RES 25 #define X_COLS 80 #define STARTUP_P1_X 6 // normally 12, see above #define STARTUP_P2_X 33 // normally 67, see above #define STARTUP_Y 13 #elif defined(__RC700__) // RC-700 #define X_RES 80 #define Y_RES 25 #define X_COLS 80 #define STARTUP_P1_X 12 #define STARTUP_P2_X 67 #define STARTUP_Y 13 #elif defined(__BEE__) // Microbee #define X_RES 80 // normally 160, but on this system we double the pixels horizontally to get a better aspect ratio #define Y_RES 48 #define X_COLS 80 #define STARTUP_P1_X 12 // normally 25, see above #define STARTUP_P2_X 67 // normally 134, see above #define STARTUP_Y 26 #elif defined(__TIKI100__) || defined(__HOMELAB__) // || defined(__MIKRO80__) // Tiki-100 (also known as "Kontiki-100"), Homelab 3/4, Mikro-80 #define X_RES 128 #define Y_RES 64 #define X_COLS 64 #define STARTUP_P1_X 20 #define STARTUP_P2_X 107 #define STARTUP_Y 35 #elif defined(__MIKRO80__) // Mikro-80 #define X_RES 64 // normally 128, but on this system we double the pixels horizontally to get a better aspect ratio #define Y_RES 64 #define X_COLS 64 #define STARTUP_P1_X 10 // normally 20, see above #define STARTUP_P2_X 53 // normally 107, see above #define STARTUP_Y 35 /* #elif defined(__HOMELAB__) // Homelab 3/4 #define X_RES 64 // normally 128, but on this system we double the pixels horizontally to get a better aspect ratio #define Y_RES 64 #define X_COLS 64 #define STARTUP_P1_X 10 // normally 20, see above #define STARTUP_P2_X 53 // normally 107, see above #define STARTUP_Y 35 */ #elif defined(__SUPER80__) && defined(__SUPER80_VDUEM__) // Super-80 r or v model #define X_RES 80 // normally 160, but on this system we double the pixels horizontally to get a better aspect ratio #define Y_RES 50 #define X_COLS 80 #define STARTUP_P1_X 12 // normally 25, see above #define STARTUP_P2_X 67 // normally 134, see above #define STARTUP_Y 27 #elif defined(__PACMAN__) // PacMan-Hardware #define X_RES 56 #define Y_RES 72 #define X_COLS 28 #define STARTUP_P1_X 8 #define STARTUP_P2_X 47 #define STARTUP_Y 39 #elif defined(__Z80TVGAME__) // Z80 TV-Game (homebrew) #define X_RES 42 #define Y_RES 52 #define X_COLS 21 #define STARTUP_P1_X 6 #define STARTUP_P2_X 35 #define STARTUP_Y 28 #elif defined(__ATTACHE__) // Otrona Attache #define X_RES 80 #define Y_RES 60 #define X_COLS 80 #define STARTUP_P1_X 12 // normally 25, see above #define STARTUP_P2_X 67 // normally 134, see above #define STARTUP_Y 31 #elif defined(__PC88__) // NEC PC-800x #define X_RES 160 #define Y_RES 100 #define X_COLS 40 #define STARTUP_P1_X 25 #define STARTUP_P2_X 134 #define STARTUP_Y 54 #elif defined(__PMD85__) #define X_RES 72 #define Y_RES 64 #define X_COLS 48 #define STARTUP_P1_X 11 #define STARTUP_P2_X 60 #define STARTUP_Y 35 #else #define X_RES 0 #define Y_RES 0 #define X_COLS 0 #define STARTUP_P1_X 0 #define STARTUP_P2_X 0 #define STARTUP_Y 0 #endif // Delay Values // These values are milliseconds #define DELAY_DEMO_BEFOREROUNDSTART 1000 #define DELAY_AFTER_CRASH 250 // We adjust the speed for each system so that in 1-player mode it takes the player // about 5,5 seconds to horizontally cross the entire screen. // On the higher-resolution systems (VZ200, EG2000), we set the // values so that this takes about 7,5 seconds. #if defined(__ZX81__) || defined(__ZX80__) // ZX81, ZX80 #define DELAY_BEFORE_NEWKEY 50 #define DELAY_GAME_DEMO 0 #define DELAY_GAME_ONEPLAYER 5 #define DELAY_GAME_TWOPLAYERS 18 #elif defined(__ACE__) // Jupiter Ace #define DELAY_BEFORE_NEWKEY 0 #define DELAY_GAME_DEMO 40 #define DELAY_GAME_ONEPLAYER 50 #define DELAY_GAME_TWOPLAYERS 60 #elif defined(__AQUARIUS__) // Mattel Aquarius #define DELAY_BEFORE_NEWKEY 50 #define DELAY_GAME_DEMO 20 #define DELAY_GAME_ONEPLAYER 30 #define DELAY_GAME_TWOPLAYERS 40 #elif defined(__Z1013__) // Robotron Z1013 // Check if "Z1013_2MHZ" has been defined in the compile parameters #if !defined(Z1013_2MHZ) // 1 MHz values #define DELAY_BEFORE_NEWKEY 50 #define DELAY_GAME_DEMO 0 #define DELAY_GAME_ONEPLAYER 6 #define DELAY_GAME_TWOPLAYERS 60 #else // 2 MHz values #define DELAY_BEFORE_NEWKEY 50 #define DELAY_GAME_DEMO 20 #define DELAY_GAME_ONEPLAYER 75 #define DELAY_GAME_TWOPLAYERS 130 #endif #elif defined(__Z9001__) // Robotron Z9001 #define DELAY_BEFORE_NEWKEY 50 #define DELAY_GAME_DEMO 15 #define DELAY_GAME_ONEPLAYER 32 #define DELAY_GAME_TWOPLAYERS 55 #elif defined(__P2000__) // Philips P2000 #define DELAY_BEFORE_NEWKEY 50 #define DELAY_GAME_DEMO 12 #define DELAY_GAME_ONEPLAYER 35 #define DELAY_GAME_TWOPLAYERS 60 #elif defined(__VG5000__) // Philips VG5000 #define DELAY_BEFORE_NEWKEY 50 #define DELAY_GAME_DEMO 30 #define DELAY_GAME_ONEPLAYER 40 #define DELAY_GAME_TWOPLAYERS 50 #elif defined(__TRS80__) && !defined(__EG2000__) // TRS-80 #define DELAY_BEFORE_NEWKEY 50 #define DELAY_GAME_DEMO 0 #define DELAY_GAME_ONEPLAYER 4 #define DELAY_GAME_TWOPLAYERS 60 #elif defined(__TRS80__) && defined(__EG2000__) // EG2000 // here it takes about 7,5 seconds in one-player mode to horizontally move across the entire screen #define DELAY_BEFORE_NEWKEY 50 #define DELAY_GAME_DEMO 0 #define DELAY_GAME_ONEPLAYER 0 #define DELAY_GAME_TWOPLAYERS 27 #elif defined(__SHARPMZ__) // Sharp MZ #define DELAY_BEFORE_NEWKEY 50 #define DELAY_GAME_DEMO 20 #define DELAY_GAME_ONEPLAYER 30 #define DELAY_GAME_TWOPLAYERS 40 #elif defined(__VZ200__) // VZ200 / Laser 310/210/110 #if !defined(VZ200_LGFX) // 128x64 values // here it takes about 7,5 seconds in one-player mode to horizontally move across the entire screen #define DELAY_BEFORE_NEWKEY 50 #define DELAY_GAME_DEMO 15 #define DELAY_GAME_ONEPLAYER 25 #define DELAY_GAME_TWOPLAYERS 40 #else // 64x32 values #define DELAY_BEFORE_NEWKEY 50 #define DELAY_GAME_DEMO 40 #define DELAY_GAME_ONEPLAYER 50 #define DELAY_GAME_TWOPLAYERS 65 #endif #elif defined(__SORCERER__) // Exidy Sorcerer #define DELAY_BEFORE_NEWKEY 50 #define DELAY_GAME_DEMO 3 #define DELAY_GAME_ONEPLAYER 27 #define DELAY_GAME_TWOPLAYERS 57 #elif defined(__PV1000__) // Casio PV-1000 #define DELAY_BEFORE_NEWKEY 50 #define DELAY_GAME_DEMO 0 #define DELAY_GAME_ONEPLAYER 8 #define DELAY_GAME_TWOPLAYERS 20 #elif defined(__ALPHATRO__) // Triumph-Adler Alphatronic PC #define DELAY_BEFORE_NEWKEY 50 #define DELAY_GAME_DEMO 10 #define DELAY_GAME_ONEPLAYER 26 #define DELAY_GAME_TWOPLAYERS 50 #elif defined(__SPC1000__) // Samsung SPC-1000 #define DELAY_BEFORE_NEWKEY 50 #define DELAY_GAME_DEMO 60 #define DELAY_GAME_ONEPLAYER 65 #define DELAY_GAME_TWOPLAYERS 75 #elif defined(__MULTI8__) // Mitsubishi Multi8 #define DELAY_BEFORE_NEWKEY 50 #define DELAY_GAME_DEMO 10 #define DELAY_GAME_ONEPLAYER 20 #define DELAY_GAME_TWOPLAYERS 40 #elif defined(__COLECO__) // ColecoVision or Bit-90 #define DELAY_BEFORE_NEWKEY 50 #define DELAY_GAME_DEMO 35 #define DELAY_GAME_ONEPLAYER 45 #define DELAY_GAME_TWOPLAYERS 58 #elif defined(__RX78__) // Bandai RX-78 - due to the smaller screen, we let it take 5 seconds #define DELAY_BEFORE_NEWKEY 50 #define DELAY_GAME_DEMO 50 #define DELAY_GAME_ONEPLAYER 60 #define DELAY_GAME_TWOPLAYERS 70 #elif defined(__PV2000__) // Casio PV-2000 #define DELAY_BEFORE_NEWKEY 50 #define DELAY_GAME_DEMO 35 #define DELAY_GAME_ONEPLAYER 45 #define DELAY_GAME_TWOPLAYERS 58 #elif defined(__NASCOM__) // Nascom // Note: Unfortunately, this system is not powerful enough for this game. // Only the 2-player mode is playable (on a 4 MHz Nascom at about 90% of the desired speed). // EDIT: the accurate speed of the original hardware is still unknown, because the emulators // run at different speeds. #define DELAY_BEFORE_NEWKEY 50 #define DELAY_GAME_DEMO 0 #define DELAY_GAME_ONEPLAYER 0 #define DELAY_GAME_TWOPLAYERS 0 #elif defined(__SPECTRUM__) // ZX Spectrum #define DELAY_BEFORE_NEWKEY 50 #define DELAY_GAME_DEMO 35 #define DELAY_GAME_ONEPLAYER 45 #define DELAY_GAME_TWOPLAYERS 62 #elif defined(__SC3000__) // Sega SC-3000 #define DELAY_BEFORE_NEWKEY 50 #define DELAY_GAME_DEMO 20 #define DELAY_GAME_ONEPLAYER 35 #define DELAY_GAME_TWOPLAYERS 55 #elif defined(__PC6001__) // NEC PC-6001 - these are the values for the Mk2 model, the original machine was slower #define DELAY_BEFORE_NEWKEY 50 #define DELAY_GAME_DEMO 0 #define DELAY_GAME_ONEPLAYER 12 #define DELAY_GAME_TWOPLAYERS 27 #elif defined(__MSX__) // MSX #define DELAY_BEFORE_NEWKEY 50 #define DELAY_GAME_DEMO 20 #define DELAY_GAME_ONEPLAYER 30 #define DELAY_GAME_TWOPLAYERS 50 #elif defined(__M5__) // Sord M5 #define DELAY_BEFORE_NEWKEY 50 #define DELAY_GAME_DEMO 30 #define DELAY_GAME_ONEPLAYER 39 #define DELAY_GAME_TWOPLAYERS 60 #elif defined(__SVI__) // Spectravideo SVI #define DELAY_BEFORE_NEWKEY 50 #define DELAY_GAME_DEMO 20 #define DELAY_GAME_ONEPLAYER 35 #define DELAY_GAME_TWOPLAYERS 55 #elif defined(__KC__) // Robotron KC85/2..KC85/5 and HC900 // Note: Unfortunately, this system is not powerful enough for this game. // One-Player mode is a little slower than it should be #define DELAY_BEFORE_NEWKEY 50 #define DELAY_GAME_DEMO 0 #define DELAY_GAME_ONEPLAYER 0 #define DELAY_GAME_TWOPLAYERS 30 #elif defined(__LASER500__) // VTech Laser 350/500/700 // MAME 0.201 delay values - in MAME the game runs faster than on the real hardware /* #define DELAY_BEFORE_NEWKEY 50 #define DELAY_GAME_DEMO 30 #define DELAY_GAME_ONEPLAYER 40 #define DELAY_GAME_TWOPLAYERS 55 */ #define DELAY_BEFORE_NEWKEY 50 #define DELAY_GAME_DEMO 15 #define DELAY_GAME_ONEPLAYER 21 #define DELAY_GAME_TWOPLAYERS 35 #elif defined(__EINSTEIN__) // Tatung Einstein #if !defined(__EINSTEIN80COLUMNS__) // 40 column mode #define DELAY_BEFORE_NEWKEY 50 #define DELAY_GAME_DEMO 30 #define DELAY_GAME_ONEPLAYER 40 #define DELAY_GAME_TWOPLAYERS 55 #else // 80 column mode (TK02) #define DELAY_BEFORE_NEWKEY 50 #define DELAY_GAME_DEMO 80 #define DELAY_GAME_ONEPLAYER 90 #define DELAY_GAME_TWOPLAYERS 100 #endif #elif defined(__OSBORNE1__) // Osborne 1 #define DELAY_BEFORE_NEWKEY 50 #define DELAY_GAME_DEMO 60 #define DELAY_GAME_ONEPLAYER 70 #define DELAY_GAME_TWOPLAYERS 82 #elif defined(__LYNX__) // Camputers Lynx #if defined(__LYNXSTANDARDCONSOLE__) // Standard console (ROM printer) #define DELAY_BEFORE_NEWKEY 50 #define DELAY_GAME_DEMO 4 #define DELAY_GAME_ONEPLAYER 20 #define DELAY_GAME_TWOPLAYERS 50 #else // Generic console #define DELAY_BEFORE_NEWKEY 50 #define DELAY_GAME_DEMO 2 #define DELAY_GAME_ONEPLAYER 19 #define DELAY_GAME_TWOPLAYERS 50 #endif #elif defined(__MTX__) // Memotech MTX #define DELAY_BEFORE_NEWKEY 30 #define DELAY_GAME_DEMO 30 #define DELAY_GAME_ONEPLAYER 40 #define DELAY_GAME_TWOPLAYERS 55 #elif defined(__CPC__) // Amstrad/Schneider CPC #define DELAY_BEFORE_NEWKEY 10 #define DELAY_GAME_DEMO 5 #define DELAY_GAME_ONEPLAYER 10 #define DELAY_GAME_TWOPLAYERS 25 #elif defined(__MC1000__) // CCE MC-1000 #define DELAY_BEFORE_NEWKEY 50 #define DELAY_GAME_DEMO 20 #define DELAY_GAME_ONEPLAYER 30 #define DELAY_GAME_TWOPLAYERS 50 #elif defined (__BEE__) // Microbee #define DELAY_BEFORE_NEWKEY 50 #define DELAY_GAME_DEMO 15 #define DELAY_GAME_ONEPLAYER 30 #define DELAY_GAME_TWOPLAYERS 40 #elif defined(__TIKI100__) // Tiki-100 (also known as "Kontiki-100") #define DELAY_BEFORE_NEWKEY 50 #define DELAY_GAME_DEMO 5 #define DELAY_GAME_ONEPLAYER 15 #define DELAY_GAME_TWOPLAYERS 33 #elif defined(__SUPER80__) && !defined(__SUPER80_VDUEM__) // Super-80 e or m model #define DELAY_BEFORE_NEWKEY 50 #define DELAY_GAME_DEMO 0 #define DELAY_GAME_ONEPLAYER 3 #define DELAY_GAME_TWOPLAYERS 30 #elif defined(__SUPER80__) && defined(__SUPER80_VDUEM__) // Super-80 r or v model #define DELAY_BEFORE_NEWKEY 50 #define DELAY_GAME_DEMO 5 #define DELAY_GAME_ONEPLAYER 17 #define DELAY_GAME_TWOPLAYERS 45 #elif defined(__PACMAN__) // PacMan-Hardware // PROVISIONAL VALUES #define DELAY_BEFORE_NEWKEY 50 #define DELAY_GAME_DEMO 35 #define DELAY_GAME_ONEPLAYER 60 #define DELAY_GAME_TWOPLAYERS 90 #elif (defined(__GAL__) && !defined(__GALPLUSHIRES__)) // Galaksija #define DELAY_BEFORE_NEWKEY 50 #define DELAY_GAME_DEMO 0 #define DELAY_GAME_ONEPLAYER 1 // still too slow, but 1 instead of 0 to avoid massive speed-ups when the computer player is within closely spaced walls #define DELAY_GAME_TWOPLAYERS 20 #elif (defined(__GAL__) && defined(__GALPLUSHIRES__)) // Galaksija Plus Hi-Res #define DELAY_BEFORE_NEWKEY 50 #define DELAY_GAME_DEMO 0 #define DELAY_GAME_ONEPLAYER 1 // still too slow, but 1 instead of 0 to avoid massive speed-ups when the computer player is within closely spaced walls #define DELAY_GAME_TWOPLAYERS 16 #elif defined(__SMC777__) #define DELAY_BEFORE_NEWKEY 50 #define DELAY_GAME_DEMO 25 #define DELAY_GAME_ONEPLAYER 35 #define DELAY_GAME_TWOPLAYERS 50 #elif defined(__Z80TVGAME__) // Z80 TV-Game (homebrew) #define DELAY_BEFORE_NEWKEY 50 #define DELAY_GAME_DEMO 50 #define DELAY_GAME_ONEPLAYER 60 #define DELAY_GAME_TWOPLAYERS 70 #elif defined(__ATTACHE__) // Otrona Attache #define DELAY_BEFORE_NEWKEY 50 #define DELAY_GAME_DEMO 18 #define DELAY_GAME_ONEPLAYER 30 #define DELAY_GAME_TWOPLAYERS 47 #elif defined(__EXCALIBUR64__) #define DELAY_BEFORE_NEWKEY 50 #define DELAY_GAME_DEMO 30 #define DELAY_GAME_ONEPLAYER 40 #define DELAY_GAME_TWOPLAYERS 55 #elif defined(__GAMEBOY__) #define DELAY_BEFORE_NEWKEY 10 #define DELAY_GAME_DEMO 80 #define DELAY_GAME_ONEPLAYER 95 #define DELAY_GAME_TWOPLAYERS 110 #elif defined(__RC700__) #define DELAY_BEFORE_NEWKEY 50 #define DELAY_GAME_DEMO 80 #define DELAY_GAME_ONEPLAYER 90 #define DELAY_GAME_TWOPLAYERS 100 #elif defined(__PC88__) #define DELAY_BEFORE_NEWKEY 50 #define DELAY_GAME_DEMO 45 #define DELAY_GAME_ONEPLAYER 55 #define DELAY_GAME_TWOPLAYERS 65 #elif defined(__X1__) #define DELAY_BEFORE_NEWKEY 100 #define DELAY_GAME_DEMO 13 #define DELAY_GAME_ONEPLAYER 24 #define DELAY_GAME_TWOPLAYERS 45 #elif defined(__FP1100__) #define DELAY_BEFORE_NEWKEY 20 #define DELAY_GAME_DEMO 25 #define DELAY_GAME_ONEPLAYER 35 #define DELAY_GAME_TWOPLAYERS 47 #elif defined(__MYVISION__) #define DELAY_BEFORE_NEWKEY 10 #define DELAY_GAME_DEMO 12 #define DELAY_GAME_ONEPLAYER 27 #define DELAY_GAME_TWOPLAYERS 45 #elif defined(__PENCIL2__) #define DELAY_BEFORE_NEWKEY 70 #define DELAY_GAME_DEMO 35 #define DELAY_GAME_ONEPLAYER 45 #define DELAY_GAME_TWOPLAYERS 63 #elif defined(__HGMC__) // Hübler-Grafik-MC #define DELAY_BEFORE_NEWKEY 50 #define DELAY_GAME_DEMO 0 #define DELAY_GAME_ONEPLAYER 22 #define DELAY_GAME_TWOPLAYERS 55 #elif defined(__PMD85__) #define DELAY_BEFORE_NEWKEY 50 #define DELAY_GAME_DEMO 0 #define DELAY_GAME_ONEPLAYER 0 #define DELAY_GAME_TWOPLAYERS 38 #elif defined(__VECTOR06C__) #define DELAY_BEFORE_NEWKEY 50 #define DELAY_GAME_DEMO 0 #define DELAY_GAME_ONEPLAYER 15 #define DELAY_GAME_TWOPLAYERS 43 #elif defined(__HOMELAB__) #define DELAY_BEFORE_NEWKEY 100 #define DELAY_GAME_DEMO 15 #define DELAY_GAME_ONEPLAYER 27 #define DELAY_GAME_TWOPLAYERS 45 #elif defined(__HOMELAB2__) #define DELAY_BEFORE_NEWKEY 50 #define DELAY_GAME_DEMO 45 #define DELAY_GAME_ONEPLAYER 60 #define DELAY_GAME_TWOPLAYERS 75 #elif defined(__PRIMO__) #define DELAY_BEFORE_NEWKEY 50 #define DELAY_GAME_DEMO 25 #define DELAY_GAME_ONEPLAYER 40 #define DELAY_GAME_TWOPLAYERS 60 #elif defined(__MIKRO80__) // #define DELAY_BEFORE_NEWKEY 50 // #define DELAY_GAME_DEMO 2 // #define DELAY_GAME_ONEPLAYER 20 // #define DELAY_GAME_TWOPLAYERS 45 #define DELAY_BEFORE_NEWKEY 50 #define DELAY_GAME_DEMO 24 #define DELAY_GAME_ONEPLAYER 53 #define DELAY_GAME_TWOPLAYERS 81 #else // default values from Mattel Aquarius, need to be adjusted for each new supported target #define DELAY_BEFORE_NEWKEY 50 #define DELAY_GAME_DEMO 20 #define DELAY_GAME_ONEPLAYER 30 #define DELAY_GAME_TWOPLAYERS 40 #endif // Text constants #if defined(SMALL_LETTERS_ONLY) || defined(FOUR_BY_SIX_CHARACTERS_WIDE_SCREEN) #define SCORE_COMP1 "computer 1: %d" #define SCORE_COMP2 "computer 2: %d" #define SCORE_COMP "computer: %d" #define SCORE_HUMAN "human: %d" #define SCORE_P1 "player 1: %d" #define SCORE_P2 "player 2: %d" #define MENU_LINE1 "*** h-tron ***\n" #define MENU_LINE2 "by robertk (2016, 2018)\n" #if defined(JOYSTICK_ONLY) #define MENU_LINE3 "\nuse joystick left/right\n" #define MENU_LINE4 "to select game type\n\n" #else #define MENU_LINE3 "controls:\n\n" #define MENU_LINE4 "turn left/right:\n" #define MENU_LINE5 " left player: a/s\n" #define MENU_LINE6 " right player: n/m or 5/8\n" #define MENU_LINE8 " (in one-player mode,\n" #define MENU_LINE9 " human is right player)\n\n" // On the Galaksija, we need to save one line to make everything fit on the screen #if (defined(__GAL__) && !defined(__GALPLUSHIRES__)) #define MENU_LINE10 "pause game: p, end game: x\n" #else #define MENU_LINE10 "pause game: p, end game: x\n\n" #endif #define MENU_LINE11 "press space or 0\n" #define MENU_LINE12 "to start a round\n\n" #define MENU_LINE13 "one or two players (1/2)?\n" #define MENU_LINE14 "(or press d for demo mode)" #endif #define END_FINALSCORE "final score" #define END_COMP1_WINS "computer player one wins\n" #define END_P1_WINS "player one wins\n" #define END_COMP_WINS "computer wins\n" #define END_COMP2_WINS "computer player two wins\n" #define END_P2_WINS "player two wins\n" #define END_YOU_WIN "you win\n" #define END_A_DRAW "a draw\n" #if !defined(JOYSTICK_ONLY) #define END_PLAY_AGAIN "\nplay again (y/n)?\n\n" #define END_M_FOR_MENU "(press m to return to the menu)\n" #else #define END_PLAY_AGAIN "\npress fire to play again\n\n" #define END_M_FOR_MENU "(move joystick up for menu)\n" #endif #elif defined(FOUR_BY_SIX_CHARACTERS) #define SCORE_COMP1 "comp 1: %d" #define SCORE_COMP2 "comp 2: %d" #define SCORE_COMP "comp: %d" #define SCORE_HUMAN "human: %d" #define SCORE_P1 "plr 1: %d" #define SCORE_P2 "plr 2: %d" #define MENU_LINE1 "*** h-tron ***\n" #define MENU_LINE2 "by robertk\n(2016, 2018)\n" #define MENU_LINE3 "\ncontrols:\n\n" #define MENU_LINE4 "turn left/right:\n" #if defined(__VG5000__) // this machine from France has an AZERTY keyboard #define MENU_LINE5 " left player: q/s\n" #define MENU_LINE6 " right player: n/,\n or 5/8\n" #else #define MENU_LINE5 " left player: a/s\n" #define MENU_LINE6 " right player: n/m\n or 5/8\n" #endif #define MENU_LINE8 "(in 1-player mode,\n" #define MENU_LINE9 " human is right pl.)\n" #define MENU_LINE10 "pause game: p\nend game: x\n\n" #define MENU_LINE11 "press space or 0\n" #define MENU_LINE12 "to start a round\n\n" #define MENU_LINE13 "(1) or (2) players?\n" #define MENU_LINE14 "(or d for demo mode)" #define END_FINALSCORE "final score" #define END_COMP1_WINS "computer player one wins\n" #define END_P1_WINS "player one wins\n" #define END_COMP_WINS "computer wins\n" #define END_COMP2_WINS "computer player two wins\n" #define END_P2_WINS "player two wins\n" #define END_YOU_WIN "you win\n" #define END_A_DRAW "a draw\n" #define END_PLAY_AGAIN "\nplay again (y/n)?\n\n" #define END_M_FOR_MENU "(press m to return\nto the menu)\n" #elif defined(STANDARD_CHARACTERS_NARROW_SCREEN) #define SCORE_COMP1 "Comp 1: %d" #define SCORE_COMP2 "Comp 2: %d" #define SCORE_COMP "Comp: %d" #define SCORE_HUMAN "Human: %d" #define SCORE_P1 "Plr 1: %d" #define SCORE_P2 "Plr 2: %d" #define MENU_LINE1 "*** H-Tron ***\n" #define MENU_LINE2 "by RobertK (2016, 2018)\n" #if defined(JOYSTICK_ONLY) #define MENU_LINE3 "\nUse Joystick left/right\n" #define MENU_LINE4 "to select game type\n\n" #else #define MENU_LINE3 "Controls:\n\n" #define MENU_LINE4 "Turn left/right:\n" #define MENU_LINE5 " Left player: A/S\n" #define MENU_LINE6 " Right player: N/M or 5/8\n" #define MENU_LINE8 " (in one-player mode,\n" #define MENU_LINE9 " human is right player)\n\n" #define MENU_LINE10 "Pause game: P, End Game: X\n\n" #define MENU_LINE11 "Press Space or 0\n" #define MENU_LINE12 "to start a round\n\n" #define MENU_LINE13 "One or two players (1/2)?\n" #define MENU_LINE14 "(or press D for demo mode)" #endif #define END_FINALSCORE "Final score" #define END_COMP1_WINS "Computer player one wins\n" #define END_P1_WINS "Player one wins\n" #define END_COMP_WINS "Computer wins\n" #define END_COMP2_WINS "Computer player two wins\n" #define END_P2_WINS "Player two wins\n" #define END_YOU_WIN "You win\n" #define END_A_DRAW "A draw\n" #if !defined(JOYSTICK_ONLY) #define END_PLAY_AGAIN "\nPlay again (y/n)?\n\n" #define END_M_FOR_MENU "(press M to return to the menu)\n" #else #define END_PLAY_AGAIN "\nPress fire to play again\n\n" #define END_M_FOR_MENU "(move joystick up for menu)\n" #endif #elif defined(STANDARD_CHARACTERS_NARROW_BUT_TALL_SCREEN) #define SCORE_COMP1 "Comp 1: %d" #define SCORE_COMP2 "Comp 2: %d" #define SCORE_COMP "Comp: %d" #define SCORE_HUMAN "Human: %d" #define SCORE_P1 "Plr 1: %d" #define SCORE_P2 "Plr 2: %d" #define MENU_LINE1 "*** H-Tron ***\n" #define MENU_LINE2 "by RobertK (2016, 2018)\n" #if defined(JOYSTICK_ONLY) #define MENU_LINE3 "\nUse Joystick left/right\n" #define MENU_LINE4 "to select game type\n\n" #else #define MENU_LINE3 "Controls:\n\n" #define MENU_LINE4 "Turn left/right:\n" #define MENU_LINE5 " Left player: A/S\n" #define MENU_LINE6 " Right plr: N/M or 5/8\n" #define MENU_LINE8 " (in one-player mode,\n" #define MENU_LINE9 " human is right player)\n\n" #define MENU_LINE10 "Pause: P, End Game: X\n\n" #define MENU_LINE11 "Press Space or 0\n" #define MENU_LINE12 "to start a round\n\n" #define MENU_LINE13 "One or two players?\n" #define MENU_LINE14 "Press 1 or 2, or \nD for demo mode..." #endif #define END_FINALSCORE "Final score" #define END_COMP1_WINS "Computer player one wins\n" #define END_P1_WINS "Player one wins\n" #define END_COMP_WINS "Computer wins\n" #define END_COMP2_WINS "Computer player two wins\n" #define END_P2_WINS "Player two wins\n" #define END_YOU_WIN "You win\n" #define END_A_DRAW "A draw\n" #if !defined(JOYSTICK_ONLY) #define END_PLAY_AGAIN "\nPlay again (y/n)?\n\n" #define END_M_FOR_MENU "(press M to return \nto the menu)\n" #else #define END_PLAY_AGAIN "\nPress fire to play again\n\n" #define END_M_FOR_MENU "(move joystick up for menu)\n" #endif #elif defined(STANDARD_CHARACTERS_VERYNARROW_BUT_TALL_SCREEN) #if defined(__GAMEBOY__) #define SCORE_COMP1 "Cmp 1: %d" #define SCORE_COMP2 "Cmp 2: %d" #else #define SCORE_COMP1 "Comp 1: %d" #define SCORE_COMP2 "Comp 2: %d" #endif #define SCORE_COMP "Comp: %d" #define SCORE_HUMAN "Human: %d" #define SCORE_P1 "Plr 1: %d" #define SCORE_P2 "Plr 2: %d" #define MENU_LINE1 "*** H-Tron ***\n" #define MENU_LINE2 "RobertK (2016, 2018)\n" #if defined(JOYSTICK_ONLY) #define MENU_LINE3 "\nUse Joy left/right\n" #define MENU_LINE4 "to select game type\n\n" #else // these texts are untested #define MENU_LINE3 "Controls:\n\n" #define MENU_LINE4 "Turn left/right:\n" #define MENU_LINE5 " Left player: A/S\n" #define MENU_LINE6 " Right plr: N/M or 5/8\n" #define MENU_LINE8 " (in one-player mode,\n" #define MENU_LINE9 " human is right player)\n\n" #define MENU_LINE10 "Pause: P, End Game: X\n\n" #define MENU_LINE11 "Press Space or 0\n" #define MENU_LINE12 "to start a round\n\n" #define MENU_LINE13 "One or two players?\n" #define MENU_LINE14 "Press 1 or 2, or \nD for demo mode..." #endif #define END_FINALSCORE "Final score" #define END_COMP1_WINS "Computer player one wins\n" #define END_P1_WINS "Player one wins\n" #define END_COMP_WINS "Computer wins\n" #define END_COMP2_WINS "Computer player two wins\n" #define END_P2_WINS "Player two wins\n" #define END_YOU_WIN "You win\n" #define END_A_DRAW "A draw\n" #if !defined(JOYSTICK_ONLY) #define END_PLAY_AGAIN "\nPlay again (y/n)?\n\n" #define END_M_FOR_MENU "(press M to return \nto the menu)\n" #else // these texts are untested #define END_PLAY_AGAIN "\nFire to play again\n\n" #define END_M_FOR_MENU "Joystick up for menu\n" #endif #else #define SCORE_COMP1 "Computer 1: %d" #define SCORE_COMP2 "Computer 2: %d" #define SCORE_COMP "Computer: %d" #define SCORE_HUMAN "Human: %d" #define SCORE_P1 "Player 1: %d" #define SCORE_P2 "Player 2: %d" #define MENU_LINE1 "*** H-Tron ***\n" #define MENU_LINE2 "by RobertK (2016, 2018)\n" #if defined(JOYSTICK_ONLY) #define MENU_LINE3 "\nUse Joystick left/right\n" #define MENU_LINE4 "to select game type\n\n" #else #define MENU_LINE3 "Controls:\n\n" #define MENU_LINE4 "Turn left/right:\n" #define MENU_LINE5 " Left player: A/S\n" #define MENU_LINE6 " Right player: N/M or 5/8\n" #define MENU_LINE8 " (in one-player mode,\n" #define MENU_LINE9 " human is right player)\n\n" #if defined(__PC6001__) || (defined(__VZ200__) && defined(VZ200_LGFX)) || (defined(__SUPER80__) && !defined(__SUPER80_VDUEM__)) // NEC PC-6001, VZ200 lo-res, Super-80 e or m model // On these systems, we need to save one line to make everything fit on the screen #define MENU_LINE10 "Pause game: P, End Game: X\n" #else #define MENU_LINE10 "Pause game: P, End Game: X\n\n" #endif #define MENU_LINE11 "Press Space or 0\n" #define MENU_LINE12 "to start a round\n\n" #define MENU_LINE13 "One or two players (1/2)?\n" #define MENU_LINE14 "(or press D for demo mode)" #endif #define END_FINALSCORE "Final score" #define END_COMP1_WINS "Computer player one wins\n" #define END_P1_WINS "Player one wins\n" #define END_COMP_WINS "Computer wins\n" #define END_COMP2_WINS "Computer player two wins\n" #define END_P2_WINS "Player two wins\n" #define END_YOU_WIN "You win\n" #define END_A_DRAW "A draw\n" #if !defined(JOYSTICK_ONLY) #define END_PLAY_AGAIN "\nPlay again (y/n)?\n\n" #define END_M_FOR_MENU "(press M to return to the menu)\n" #else #define END_PLAY_AGAIN "\nPress fire to play again\n\n" #define END_M_FOR_MENU "(move joystick up for menu)\n" #endif #endif #if (X_COLS>36) && defined(SMALL_LETTERS_ONLY) #define MENU_LINE11_12 "press space or 0 to start a round\n\n" #elif (X_COLS>36) && !defined(SMALL_LETTERS_ONLY) #define MENU_LINE11_12 "Press Space or 0 to start a round\n\n" #endif /* indicates whether the player has hit an obstacle */ int p1Crashed; int p2Crashed; /* player coordinate variables */ int p1x,p1y,p2x,p2y; /* player direction variables in radian degrees */ /* 0 (or 360) = right, 90 = up, 180 = left, 270 = down */ int p1dir,p2dir; /* player score variables */ int p1Score,p2Score; /* One or two players */ int numberOfPlayers; void myTextOut(int x, int y, const char* text) { // writes a text to the specified x,y (column and row) screen position // this is the place for the platform-dependent // implementation of this function #if defined(__ZX81__) || defined(__ZX80__) // || defined(__SPECTRUM__) zx_setcursorpos(y,x); printf(text); #elif defined(__LYNXSTANDARDCONSOLE__) // for the Camputers Lynx "ROM printer" (when compiling without the generic console parameter) // See page 62 of thy Lynx user manual // TODO /* printf("%c",23); // homes cursor for (int i = 1; i <= y; i++) printf("%c",10); // line feed for (int i = 1; i <= x; i++) printf("%c",12); // moves cursor one character block to the right */ printf(text); #elif defined(__PACMAN__) // PacMan-Hardware // TODO: Screen positioning on PacMan-HW? printf(text); #elif defined(FOUR_BY_SIX_CHARACTERS) x_4x6 = x*4; y_4x6 = y*6; printf(text); #elif defined(USE_NATIVE_CONSOLE) printf("\033=%c%c",y+32,x+32); printf(text); #elif defined(USE_ANSI) || defined(USE_GENERIC_CONSOLE) // ANSI VT100 (conio.h) or native console (including conio.h not required, e.g. TRS-80) gotoxy(x,y); cprintf(text); #endif } void myTextOutXY(int x, int y, const char* text) { // writes a text to the specified x,y (graphics coordinate) screen position // only for targets that support this (currently those with 4x6 character mode) #if defined(FOUR_BY_SIX_CHARACTERS) x_4x6 = x; y_4x6 = y; printf(text); #endif } void myPlot(short x, short y, short pmode) { // sets or clears a pixel // pmode 1 plots, pmode 0 unplots // this is the place for the platform-dependent // implementation of this function #if defined(__EINSTEIN80COLUMNS__) // Tatung Einstein 80 column mode gotoxy(x*2,y); if (pmode==1) { printf("%c",160); } else { cprintf(" "); } gotoxy(x*2+1,y); if (pmode==1) { printf("%c",160); } else { cprintf(" "); } #elif defined(DOUBLE_PIXELS_HORIZONTALLY) // graphics.h if (pmode==1) { #if defined(USE_C_PLOT) c_plot(x*2,y); c_plot(x*2 + 1,y); #else plot(x*2,y); plot(x*2 + 1,y); #endif } else { #if defined(USE_C_PLOT) c_unplot(x*2,y); c_unplot(x*2 + 1,y); #else unplot(x*2,y); unplot(x*2 + 1,y); #endif } // zx81plot.h // zx_plot(x*2,y,pmode); // zx_plot(x*2 + 1,y,pmode); #else #if defined(USE_C_PLOT) if (pmode==1) c_plot(x,y); else c_unplot(x,y); // graphics.h #else if (pmode==1) plot(x,y); else unplot(x,y); // graphics.h #endif // zx_plot(x,y,pmode); // zx81plot.h #endif } void myCls() // clear the screen { #if defined(__PACMAN__) printf("%c",12); printf("\x0c"); // the "\x0c" (0x0c character) resets the cursor position to the top left corner #elif defined(USE_NATIVE_CONSOLE) printf("\032"); #elif defined(__LYNXSTANDARDCONSOLE__) // for the Camputers Lynx "rom printer" (when compiling without the generic console parameter) printf("%c",4); // See page 62 of thy Lynx user manual clg(); #else printf("%c",12); printf("\x0c"); // the "\x0c" (0x0c character) resets the cursor position to the top left corner #endif } int myPoint(short x, short y) { // checks the status of a pixel - returns 0 if unset or 1 if set // this is the place for the platform-dependent // implementation of this function #if defined(__EINSTEIN80COLUMNS__) // Tatung Einstein 80 column mode if (cvpeekr(x*2,y)==160) return 1; else return 0; #elif defined(DOUBLE_PIXELS_HORIZONTALLY) #if defined(USE_C_PLOT) return c_point(x*2,y); // graphics.h #else return point(x*2,y); // graphics.h #endif // return zx_point(x*2,y); // zx81plot.h #else #if defined(USE_C_PLOT) return c_point(x,y); // graphics.h #else return point(x,y); // graphics.h #endif // return zx_point(x,y); // zx81plot.h #endif } void myWait(uint msec) { // waits a specified number of milliseconds // this is the place for the platform-dependent // implementation of this function if (msec==0) return; msleep(msec); // The msleep() function should now be available on all platforms // (it runs the same code as the previously Sinclair-only in_Wait() function) // If there should be a future platform that does not support msleep(), // we can wait by doing a busy loop: /* #if defined(__....__) // Taken from CROSS CHASE by Fabrizio Caruso (sleep_macros.c) // value is not in milliseconds, has to be adjusted for each platform unsigned int ii; for(ii=0;ii=distanceLeft) && (distanceFront>=distanceRight)) { /* clear sailing ahead, nothing to do */ } else if ((distanceFrontdistanceRight) { /* turn left */ *dir = *dir+90; if (*dir>=360) *dir=0; } else if (distanceLeft=360) *dir=0; } else { /* turn right */ *dir = *dir-90; if (*dir<0) *dir=270; } } } } /* The following four functions calculate the distance from the given position to the next obstacle in grid map direction */ int AICheckDistanceEast(int x,int y,int maxDistanceToCheck) { int distance; distance=1; while(myPoint(x+distance,y)==0 && distance<=maxDistanceToCheck) { distance++; } return distance; } int AICheckDistanceWest(int x,int y,int maxDistanceToCheck) { int distance; distance=1; while(myPoint(x-distance,y)==0 && distance<=maxDistanceToCheck) { distance++; } return distance; } int AICheckDistanceNorth(int x,int y,int maxDistanceToCheck) { int distance; distance=1; while(myPoint(x,y-distance)==0 && distance<=maxDistanceToCheck) { distance++; } return distance; } int AICheckDistanceSouth(int x,int y,int maxDistanceToCheck) { int distance; distance=1; while(myPoint(x,y+distance)==0 && distance<=maxDistanceToCheck) { distance++; } return distance; } #if defined(JOYSTICK_ONLY) void DisplayGameType(int gameType) { #if defined(STANDARD_CHARACTERS_VERYNARROW_BUT_TALL_SCREEN) switch(gameType) { case 1: printf("1-Plr"); break; case 2: printf("2-Plr"); break; case 3: printf("Demo"); break; } printf(" Mode selected\n"); printf("Fire to continue"); #else switch(gameType) { case 1: printf("One-Player"); break; case 2: printf("Two-Player"); break; case 3: printf("Demo"); break; } printf(" Mode selected\n"); printf("Press Fire to continue"); #endif } #endif void DoWhenProgramTerminates() { #if defined(__MC1000__) || defined(__GALPLUSHIRES__) || defined(__SMC777__) || defined(__EXCALIBUR64__) || defined(__FP1100__) // CCE MC-1000, Galaksija Plus Hi-Res, Sony SMC-777, Casio FP-1100 int mode=0; console_ioctl(IOCTL_GENCON_SET_MODE, &mode); // return to text mode (green/yellow): myCls(); #elif defined(__TIKI100__) // Tiki-100 (also known as "Kontiki-100") int mode=3; // set to standard display mode 256x256 console_ioctl(IOCTL_GENCON_SET_MODE, &mode); #endif } void main() { int exitgame; int key; #if defined(JOYSTICK_ONLY) int gameType=1; // for Joystick menu selection; 1 = 1 player, 2 players, 3 = demo int joystickNumber1 = JOYSTICK_1; int joystickNumber2 = JOYSTICK_2; int joyButtonMenu=JOYSTICK_BUTTON_MENU; int joyButtonPause=JOYSTICK_BUTTON_PAUSE; #endif int notPlayAgain, restartAgain; int randomSeed=0; char c; // for ANSI keyboard input // Key press indicators // Note: internally P1 is always the "right" player, i.e. human in // 1-player-mode and player 2 in two player mode. int p1PressedLeft; int p1PressedRight; int p2PressedLeft; int p2PressedRight; int lastState_p1PressedLeft; int lastState_p1PressedRight; int lastState_p2PressedLeft; int lastState_p2PressedRight; int mode; // for IOCTL_GENCON_SET_MODE. Note that this requires a pointer parameter, so you cannot pass the value directly // Workaround for solving the "Visible Cursor Problem" occasionally occurring on the VZ #if defined(__VZ200__) #asm di #endasm #endif restartAgain=0; // randomize(); // no longer available in nightly builds, we have to use srand(value) instead // Set the background and foreground colour of the block-graphics characters where necessary #if defined(__PC6001__) // NEC PC-6001 mode=1 console_ioctl(IOCTL_GENCON_SET_MODE, &mode); textcolor(WHITE); textbackground(BLACK); #elif (defined(__VZ200__) && defined(VZ200_LGFX)) // VZ200 / Laser 310/210/110 // Note: in MAME, the block-graphics characters have a black background colour (it should be dark green) // Strangely, in VZEM the background colour is dark green as it should be. // This seems to have no effect: // textcolor(LIGHTGREEN); // textbackground(GREEN); #elif defined(__CPC__) textcolor(YELLOW); // this gives only the text output a yellow colour, the plotted points are still red #endif // On some systems we first need to activate the graphics mode #if (defined(__VZ200__) && !defined(VZ200_LGFX)) || defined(__ABC80__) || defined(__P2000__) || defined(__Z9001__) || defined(__MULTI8__) || defined(__MSX__) || defined(__SVI__) || defined(__PACMAN__) || defined(__ATTACHE__) clg(); // activate graphics mode #elif defined(__MC1000__) // CCE MC-1000 mode=1; console_ioctl(IOCTL_GENCON_SET_MODE, &mode); // switch to hires mode clg(); #elif defined(__GALPLUSHIRES__) || defined(__SMC777__) || defined(__EXCALIBUR64__) // Galaksija Plus Hi-Res, Sony SMC-777 or Excalibur 64 mode=1; console_ioctl(IOCTL_GENCON_SET_MODE, &mode); // switch to hires mode #elif defined(__FP1100__) // Casio FP-1100 mode=2; console_ioctl(IOCTL_GENCON_SET_MODE, &mode); // switch to 80x48 lores mode #elif defined(__EINSTEIN80COLUMNS__) // Tatung Einstein 80 column mode mode=10; console_ioctl(IOCTL_GENCON_SET_MODE, &mode); // switch the generic console to the 80 columns screen #elif defined(__TIKI100__) // Tiki-100 (also known as "Kontiki-100") clg(); // initiate graphicsets mode=2; // set to 512x256 console_ioctl(IOCTL_GENCON_SET_MODE, &mode); // set palette to avoid the rather dark default cyan colour // the first value is the background colour // the last is used as the default foreground colour char palette[]={0,0xD2,0x7F,0xFF}; gr_setpalette(4,palette); // textcolor(1); #endif do { notPlayAgain=0; myCls(); printf(MENU_LINE1); printf(MENU_LINE2); printf(MENU_LINE3); printf(MENU_LINE4); #if !defined(JOYSTICK_ONLY) printf(MENU_LINE5); printf(MENU_LINE6); // when using the 4x6 character set, we show the rest on the second // screen, because of the very tall characters // in the graphics mode of these systems #if defined(FOUR_BY_SIX_CHARACTERS) && !defined(FOUR_BY_SIX_CHARACTERS_TALL_SCREEN) getch(); myCls(); #endif printf(MENU_LINE8); printf(MENU_LINE9); printf(MENU_LINE10); #if defined(__SPC1000__) getch(); myCls(); #endif #if defined(MENU_LINE11_12) // on some systems, we show the text from lines 11 and 12 in only one line printf(MENU_LINE11_12); #else printf(MENU_LINE11); printf(MENU_LINE12); #endif printf(MENU_LINE13); printf(MENU_LINE14); // printf("\nxcols=%d\n",X_COLS); #endif #if defined(__ZX80__) gen_tv_field_init(0); // has to be called once for screen-refreshing on the ZX80 #endif /* myCls(); printf("\n"); printf("in_lookupkey() for 5 is %d\n",in_LookupKey('5')); printf("in_lookupkey() for 8 is %d\n",in_LookupKey('8')); printf("in_lookupkey() for a is %d\n",in_LookupKey('a')); printf("in_lookupkey() for m is %d\n",in_LookupKey('m')); printf("in_lookupkey() for n is %d\n",in_LookupKey('n')); printf("in_lookupkey() for p is %d\n",in_LookupKey('p')); printf("in_lookupkey() for s is %d\n",in_LookupKey('s')); printf("in_lookupkey() for x is %d\n",in_LookupKey('x')); */ // VG5000 /* myCls(); printf("in_lookupkey() for 5 is %d\n",in_LookupKey('5')); printf("in_lookupkey() for 8 is %d\n",in_LookupKey('8')); printf("in_lookupkey() for a is %d\n",in_LookupKey('q')); // Q instead of A printf("in_lookupkey() for m is %d\n",in_LookupKey(',')); // , instead of M printf("in_lookupkey() for n is %d\n",in_LookupKey('n')); printf("in_lookupkey() for p is %d\n",in_LookupKey('p')); printf("in_lookupkey() for s is %d\n",in_LookupKey('s')); printf("in_lookupkey() for x is %d\n",in_LookupKey('x')); */ do { // The ZX80 has FAST-mode only, therefore using in_Inkey() would leave the screen black (calling // gen_tv_field() within the loop would help a little but this would still make the screen flicker heavily) // So we use fgetc_cons() instead, which halts program execution and makes the ZX80 screen visible. // Unfortunately, with this we cannot provide a different random seed counter every time on the ZX80. #if defined(__ZX80__) key=fgetc_cons(); #elif defined(__ZX81__) || defined(__SPECTRUM__) key=in_Inkey(); // from input.h, available on the following platforms: zx spectrum, zx81, sam), returns the currently pressed key and program execution continues #elif defined(JOYSTICK_ONLY) DisplayGameType(gameType); while (!(joystick(joystickNumber1) & MOVE_FIRE1) && !(joystick(joystickNumber2) & MOVE_FIRE1)) { if (((joystick(joystickNumber1) & MOVE_RIGHT) || (joystick(joystickNumber2) & MOVE_RIGHT)) && gameType<3) { gameType++; #if defined(TWO_PLAYER_MODE_NOT_AVAILABLE) if (gameType==2) gameType=3; #endif myCls(); // clear the screen DisplayGameType(gameType); myWait(DELAY_BEFORE_NEWKEY); } if (((joystick(joystickNumber1) & MOVE_LEFT) || (joystick(joystickNumber2) & MOVE_LEFT)) && gameType>1) { gameType--; #if defined(TWO_PLAYER_MODE_NOT_AVAILABLE) if (gameType==2) gameType=1; #endif myCls(); // clear the screen DisplayGameType(gameType); myWait(DELAY_BEFORE_NEWKEY); } } switch(gameType) { case 1: key=KEY_CODE_1; break; case 2: key=KEY_CODE_2; break; case 3: key=KEY_CODE_D; break; } #elif defined(USE_ANSI) || defined(USE_NATIVE_INPUT) if(kbhit()) { c = getch(); if (c=='d' || c=='D') key=KEY_CODE_D; else if (c=='1') key=KEY_CODE_1; else if (c=='2') key=KEY_CODE_2; else if (c=='x' || c=='X') key=KEY_CODE_X; } else key=0; #else key=fgetc_cons(); #endif // if (key>0) printf("\nkeycode: %d",key); // printf("key a (65) pressed: %d\n",myKeyPressed(in_LookupKey('A'))); if (key==KEY_CODE_D) numberOfPlayers=0; if (key==KEY_CODE_1) numberOfPlayers=1; if (key==KEY_CODE_2) numberOfPlayers=2; if (key==KEY_CODE_X) { myCls(); DoWhenProgramTerminates(); return; } // we use this counter to every time get a different random seed value, // depending on how long it took until the user pressed a button randomSeed++; if (randomSeed>32766) randomSeed=0; // reset counter to avoid overflow } while(key!=KEY_CODE_D && key!=KEY_CODE_1 && key!=KEY_CODE_2); srand(randomSeed); /* myCls(); printf("\n\nrandom seed is %d\n",randomSeed); printf("first rand value is %d\n",rand()); printf("press space to continue\n",rand()); do { #if defined(USE_ANSI) || defined(USE_NATIVE_INPUT) if(kbhit()) { c = getch(); if (c==' ') key=KEY_CODE_SPACE; else key=0; } else key=0; #else key=fgetc_cons(); #endif } while(key!=KEY_CODE_SPACE); */ /* game restart loop */ while(notPlayAgain<1) { p1Score=0; p2Score=0; exitgame=0; /* round restart loop */ while(p1Score0) { do { #if defined(JOYSTICK_ONLY) // Fire if ((joystick(joystickNumber1) & MOVE_FIRE1) || (numberOfPlayers>1 && (joystick(joystickNumber2) & MOVE_FIRE1))) key=KEY_CODE_SPACE; // Return to Menu if (joyButtonMenu>0) { if ((joystick(joystickNumber1) & joyButtonMenu) || (joystick(joystickNumber2) & joyButtonMenu)) key=KEY_CODE_X; } #elif defined(USE_ANSI) || defined(USE_NATIVE_INPUT) if(kbhit()) { c = getch(); if (c==' ') key=KEY_CODE_SPACE; else if (c=='0') key=KEY_CODE_0; else if (c=='x' || c=='X') key=KEY_CODE_X; } else key=0; #elif defined(__ZX81__) || defined(__SPECTRUM__) key=in_Inkey(); // from input.h, available on the following platforms: zx spectrum, zx81, sam), returns the currently pressed key and program execution continues #else key=fgetc_cons(); // for ZX80 to keep the screen visible #endif if (key==KEY_CODE_X) exitgame=1; } while (key!=KEY_CODE_SPACE && key!= KEY_CODE_0 && key!=KEY_CODE_X); } else myWait(DELAY_DEMO_BEFOREROUNDSTART); /* in demo mode, the round starts automatically */ lastState_p1PressedLeft=0; lastState_p1PressedRight=0; lastState_p2PressedLeft=0; lastState_p2PressedRight=0; /* main game loop */ while(exitgame<1 && p1Crashed<1 && p2Crashed<1) { // Check keyboard state for player's control // ZX81 note: here we could use in_Inkey() and then switch-case to set the // actions for the possible key combinations. But this would not allow // both players to simultaneously press their control key - one would lock // the other one's steering. // So we have to use in_KeyPressed() which requires more code lines and // is probably a little less efficient, but it does the job that we need. // The lookup keys can be determined using the in_LookupKey() function. p1PressedLeft=0; p1PressedRight=0; p2PressedLeft=0; p2PressedRight=0; #if defined(USE_INKEYPRESSED) if (myKeyPressed(KEYPRESS_CODE_5)>0 || myKeyPressed(KEYPRESS_CODE_N)>0) p1PressedLeft=1; if (myKeyPressed(KEYPRESS_CODE_8)>0 || myKeyPressed(KEYPRESS_CODE_M)>0) p1PressedRight=1; if (myKeyPressed(KEYPRESS_CODE_A)>0) p2PressedLeft=1; if (myKeyPressed(KEYPRESS_CODE_S)>0) p2PressedRight=1; #elif defined(JOYSTICK_ONLY) if (joystick(joystickNumber1) & MOVE_LEFT) p1PressedLeft=1; if (joystick(joystickNumber1) & MOVE_RIGHT) p1PressedRight=1; if (joystick(joystickNumber2) & MOVE_LEFT) p2PressedLeft=1; if (joystick(joystickNumber2) & MOVE_RIGHT) p2PressedRight=1; #else // #if defined(USE_ANSI) || defined(USE_NATIVE_INPUT) // myPlot(p1x+5,p1y+5,1); // FOR TESTING PURPOSES if(kbhit()) { c = getch(); if (c=='5' || c=='n' || c=='N') p1PressedLeft=1; #if defined(__VG5000__) // this machine from France has an AZERTY keyboard else if (c=='8' || c==',') p1PressedRight=1; else if (c=='q' || c=='Q') p2PressedLeft=1; #else else if (c=='8' || c=='m' || c=='M') p1PressedRight=1; else if (c=='a' || c=='A') p2PressedLeft=1; #endif else if (c=='s' || c=='S') p2PressedRight=1; else if (c=='p' || c=='P') { // in ANSI mode we do not make a pause here because here key // input is not as responsive as with in_keypressed() on the Sinclair computers // myWait(DELAY_BEFORE_NEWKEY); // make pause before waiting for new key // Some systems are however special, so we still need to make a short pause... #if defined(__X1__) || defined(__HOMELAB__) || defined(__HOMELAB2__) myWait(DELAY_BEFORE_NEWKEY); // make pause before waiting for new key #endif fgetc_cons(); } else if (c=='x' || c=='X') exitgame=1; } #endif // We react to the key press only if there was a change since the // last time we came along here, hence the lastState...-Check. // By doing this we avoid unintended multiple turn commands, // the player must always first release the button and then press it again. if (p1PressedLeft>0 && p1PressedLeft!=lastState_p1PressedLeft) { if (numberOfPlayers>0) { p2dir = p2dir+90; if (p2dir>=360) p2dir=0; } } if (p1PressedRight>0 && p1PressedRight!=lastState_p1PressedRight) { if (numberOfPlayers>0) { p2dir = p2dir-90; if (p2dir<0) p2dir=270; } } if (p2PressedLeft>0 && p2PressedLeft!=lastState_p2PressedLeft) { if (numberOfPlayers==2) { p1dir = p1dir+90; if (p1dir>=360) p1dir=0; } } if (p2PressedRight>0 && p2PressedRight!=lastState_p2PressedRight) { if (numberOfPlayers==2) { p1dir = p1dir-90; if (p1dir<0) p1dir=270; } } // For the remaining keys we do not need to remember the status // For ANSI we have already handled this above #if defined(USE_INKEYPRESSED) if (myKeyPressed(KEYPRESS_CODE_P)>0) // Pause { myWait(DELAY_BEFORE_NEWKEY); // make pause before waiting for new key fgetc_cons(); } else if (myKeyPressed(KEYPRESS_CODE_X)>0) // Exit { exitgame=1; } #elif defined(JOYSTICK_ONLY) if (joyButtonPause>0) // Pause { if ((joystick(joystickNumber1) & joyButtonPause) || (joystick(joystickNumber2) & joyButtonPause)) { myWait(DELAY_BEFORE_NEWKEY); // make pause before waiting for new key while (!(joystick(joystickNumber1) & MOVE_FIRE1) && !(joystick(joystickNumber2) & MOVE_FIRE1)); } } if (joyButtonMenu>0) // Exit to Menu { if ((joystick(joystickNumber1) & joyButtonMenu) || (joystick(joystickNumber2) & joyButtonMenu)) exitgame=1; } #endif /* let the computer player decide what to do */ /* in one-player mode, Player 1 is controlled by the computer */ if (numberOfPlayers<2) AIComputerPlayer(&p1x,&p1y,&p1dir); /* in demo mode, Player 2 is also controlled by the computer */ if (numberOfPlayers==0) AIComputerPlayer(&p2x,&p2y,&p2dir); MovePlayers(); // speed throttling // depending on the type of game we use different delay values switch(numberOfPlayers) { case 0: if (DELAY_GAME_DEMO>0) myWait(DELAY_GAME_DEMO); break; // usually no delay required because AI for two computer players is most demanding for the CPU case 1: myWait(DELAY_GAME_ONEPLAYER); break; case 2: myWait(DELAY_GAME_TWOPLAYERS); break; } // remember the last state of the control keys lastState_p1PressedLeft=p1PressedLeft; lastState_p1PressedRight=p1PressedRight; lastState_p2PressedLeft=p2PressedLeft; lastState_p2PressedRight=p2PressedRight; } /* wait a quarter of a second after a crash has happened before clearing the screen */ if (p1Crashed || p2Crashed) myWait(DELAY_AFTER_CRASH); } myCls(); printf(END_FINALSCORE); #if !defined(FOUR_BY_SIX_CHARACTERS) printf(" %d : %d\n\n", p1Score, p2Score); #else printf(" %d : %d\n\n", p1Score, p2Score); #endif if (p1Score>p2Score) if (numberOfPlayers==0) printf(END_COMP1_WINS); else if (numberOfPlayers==2) printf(END_P1_WINS); else printf(END_COMP_WINS); if (p1Score0) printf("\nkeycode: %d",key); if (key==KEY_CODE_N) { notPlayAgain=1; restartAgain=0; } if (key==KEY_CODE_M) { notPlayAgain=1; restartAgain=1; } } while(key!=KEY_CODE_Y && key!=KEY_CODE_N && key!=KEY_CODE_0 && key!=KEY_CODE_M); // key 0 is for the ZX81 "cursor joystick" fire button } } while (restartAgain>0); myCls(); DoWhenProgramTerminates(); return; } ================================================ FILE: src/debug/hwcomx.c ================================================ /* Hello World for the COMX-35 by Marcel van Tongoren & Bill Rowe */ #include #define putc(c) putcomx(c,0x3302) void putcomx(unsigned char c, unsigned int r13val){ asm( " glo r12\n" " lbr 0x2cd3\n"); } char shapes[] = { 97, // First byte is the character to shape followed by 9 bytes for the shape 0x00, 0xcc, 0xde, 0xed, 0xff, 0xf3, 0xed, 0xe1, 0x00, 98, // next character to shape 0x00, 0x8c, 0x9e, 0xad, 0xbf, 0xb3, 0xad, 0xa1, 0x00, 99, 0x00, 0x00, 0xcc, 0xde, 0xff, 0xde, 0xcc, 0x00, 0x00, }; void shapechar(char * shapelocation, int number) { asm( //shapelocation pointer is R12, number of shapes is R13 " ldi 0xf7\n" " phi R8\n" " ldi 0xfb\n" " phi R9\n" "$$nextshape:\n" " ldi 0xC0 \n" " plo R8 ; R8 = charmem pointer\n" " plo r9 ; R9 = vidmem pointer\n" " ldi 9 \n" " plo R10 ; R10.0 = number of lines, we need to somehowe make a NTSC version for 8 lines\n" " lda 12\n" " phi R10 ; R10.1 = character\n" "$$nextline:\n" " ghi R10\n" " b1 $ ; wait til video is quiet\n" " str R9 ; store character in vidmem\n" " inc R9\n" " lda R12\n" " str R8 ; store first shape line in charmem\n" " inc R8\n" " dec R10\n" " glo R10\n" " bnz $$nextline ; number of lines - 1 if not zero do next line\n" " dec r13\n" " glo r13\n" " bnz $$nextshape\n"); } void setvideobase(unsigned int vidmem){ asm( //vidmem pointer is R12 " ldireg R8, 0x4195\n" " ghi R12\n" " str R8\n" " inc R8\n" " glo R12\n" " str R8\n" " sex R12\n" " out 7\n" " sex R2\n"); } void disableinterrupt(){ asm( " sex 3\n" " dis\n" " db 0x23\n"); } void enableinterrupt(){ asm( " sex 3\n" " ret\n" " db 0x23\n"); } void gotoxycomx(unsigned int vidmem, unsigned char column){ asm( " ldireg R8, 0x419A\n" " sex R8\n" " glo R13\n" " stxd\n" " dec R8\n" " glo R12\n" " stxd\n" " ghi R12\n" " stxd\n" " dec R8\n" " dec R8\n" " glo R12\n" " stxd\n" " ghi R12\n" " adi 0xf8\n" " stxd\n" " sex R2\n"); } void gotoxy(unsigned char x, unsigned char y){ unsigned int vidmem; vidmem = y*40 + x; gotoxycomx(vidmem, x); } void vidstrcpy(unsigned int vidmem,char * text){ //write to video memory asm( "$$cpy:\n" " lda R13 ;pick up input pointer\n" " bz $$end\n" " b1 $ ;wait til video is quiet\n" " str R12 ;move the byte\n" " inc R12 ;++\n" " br $$cpy\n" "$$end:\n"); } void vidclr(unsigned int vidmem, int vidlen){ //write 0's to video memory asm( //vidmem pointer is R12, vidlen is R13 "$$cpy:\n" " ldi 0 ;source a 0 for clearing the screen\n" " b1 $ ;wait til video is quiet\n" " str R12 ;move the byte\n" " inc R12 ;++\n" " dec R13 ;decrement count\n" " glo R13 ; check bottom byte\n" " bnz $$cpy\n" " ghi R13 ;top byte\n" " bnz $$cpy\n"); return; } void vidchar(unsigned int vidmem, int character){ //write character to vidmem location in video memory asm(//vidmem pointer is R12, character is R13.0 " glo r13\n" " b1 $ ;wait til video is quiet\n" " str R12 ;move the byte\n"); return; } unsigned char getkey(){ //get key value if pressed, otherwise return 0 asm( " b3 $$keypressed\n" // Check if a key is pressed for the 'first time' " bn2 $$nokey\n" // Branch to nokey if no key was pressed previously "$$keypressed:\n" " inp 3\n" " lskp\n" "$$nokey:\n" " ldi 0\n" " plo R15\n" " ldi 0\n" " phi R15\n" " Cretn\n"); return 0; //this statement will never be executed but it keeps the compiler happy } unsigned char cgetc(){ //wait for key press asm( "$$loop:\n" " b3 $$keypressed\n" // Check if a key is pressed for the 'first time' " bn2 $$loop\n" // Loop if no key was pressed previously "$$keypressed:\n" " inp 3\n" " plo R15\n" " ldi 0\n" " phi R15\n" " Cretn\n"); return 0; //this statement will never be executed but it keeps the compiler happy } int kbhit(){ //return 1 if a key is pressed, 0 if not asm( " b3 $$keypressed\n" // Check if a key is pressed for the 'first time' " bn2 $$nokey\n" // Branch to nokey if no key was pressed previously "$$keypressed:\n" " ldi 1\n" " lskp\n" "$$nokey:\n" " ldi 0\n" " plo R15\n" " ldi 0\n" " phi R15\n" " Cretn\n"); return 0; //this statement will never be executed but it keeps the compiler happy } void settone(int value){ asm( " sex R12 ;Tone generation value\n" " out 4\n" " sex R2\n"); } void generatetone(int tone, int range, int volume){ int tonevalue; tonevalue = (volume & 0xf) + ((range &0x7) << 4) + 0x8 + ((tone & 0x7f) << 8); settone(tonevalue); } void setnoise(int value){ asm( " ldireg R8,0x41C3\n" " ldn R8\n" " plo R12 ; load current OUT 5 (low byte) video setting from 0x41C3 and store in R12.0\n" " sex R12 ; Noise generation value\n" " out 5\n" " sex R2\n"); } void generatenoise(int range, int volume){ int tonevalue; tonevalue = ((volume & 0xf) + ((range &0x7) << 4) + 0x8) << 8; setnoise(tonevalue); } unsigned char bgcolor(unsigned char color){ asm( //color is in R12.0 //0: black //1: green //2: blue //3: cyan //4: red //5: yellow //6: magenta //7: white " ldireg R8, 0x41C0\n" " ldn R8\n" //get latest OUT 3 value " ani 7\n" //get old background color " plo R15\n" " ldi 0\n" " phi R15\n" //return old background in R15 " ldn R8\n" //get latest OUT 3 value " ani 0xf8\n" //clear background color " str R2\n" //store value on stack " glo R12\n" //get new color " ani 7\n" //limit to 3 bits " or\n" //new color OR latest OUT3 value " str R8\n" //store new value " sex R8\n" " out 3\n" //set new color value " sex R2\n" " Cretn\n"); return 0; //this statement will never be executed but it keeps the compiler happy } void textcolordefinition(unsigned char definition){ asm( //definition is in R12.0 // b1 b0 RED BLUE GREEN // 0 0 CB0 CB1 PCB // 0 1 CCB0 PCB CCB1 // 1 0/1 PCB CCB0 CCB1 " ldireg R8, 0x41C0\n" " ldn R8\n" //get latest OUT 3 value " ani 0x9f\n" //clear text color definition " str R2\n" //store value on stack " glo R12\n" //get new color " ani 3\n" //limit to 2 bits " shrc\n" " shrc\n" " shrc\n" " shrc\n" " or\n" //new text color definition OR latest OUT3 value " str R8\n" //store new value " sex R8\n" " out 3\n" //set new color definition value " sex R2\n"); } void monochrome(unsigned char mono){ asm( //mono/cfc is in R12.0, 0=color, 1=mono " ldireg R8, 0x41C0\n" " ldn R8\n" //get latest OUT 3 value " ani 0xf7\n" //clear cfc " str R2\n" //store value on stack " glo R12\n" //get new cfc " ani 1\n" //limit to 1 bits " shl\n" " shl\n" " shl\n" " or\n" //new cfc OR latest OUT3 value " str R8\n" //store new value " sex R8\n" " out 3\n" //set new cfc value " sex R2\n"); } unsigned short int rand(){ asm( " ldireg R8, 0x42be\n" // COMX BASIC RND seed value " lda R8\n" " bnz $$rand1\n" // Do rand if high byte of seed value != 0 "$$zerolow:\n" " glo R0\n" " bz $$zerolow\n" // Wait until R0.0 != 0 " phi R15\n" // Use R0.0 as low byte of seed value "$$zerohigh:\n" " ghi R0\n" " bnz $$rand2\n" // If R0.1 != 0 use as high byte of seed value " br $$zerohigh\n" // Wait until R0.1 != 0 "$$rand1:\n" " phi R15\n" // R15.1 = high byte of seed value " ldn 8\n" "$$rand2:\n" " plo R15\n" // R15.0 = low byte of seed value " ani 1\n" " str R2\n" // Stack = bit 0 of seed value, rest is 0 " glo R15\n" // D = low byte of seed value " shr\n" " shr\n" " xor\n" // D bit 0 = bit 0 XOR bit 2 " plo R9\n" " ani 1\n" " str R2\n" // Stack = bit 0 XOR bit 2 " glo R9\n" " shr\n" " xor\n" // D bit 0 = bit 0/2 XOR bit 3 " plo R9\n" " ani 1\n" " str R2\n" // Stack = bit 0/2 XOR bit 3 " glo R9\n" " shr\n" " shr\n" " xor\n" // D bit 0 = bit 0/2/3 XOR bit 5 " shr\n" // DF = new input bit " ghi R15\n" " shrc\n" " dec R8\n" " str R8\n" // Store high byte new seed value, // R15.1 >> 1, MSB = DF, new input bit, DF = LSB " ani 0x7f\n" " phi R15\n" // R15.1 = seed value & 0x7f, allowing only postivie numbers " glo R15\n" " shrc\n" " plo R15\n" // R15.0 >> 1, MSB = DF, DF = LSB " inc R8\n" " str R8\n" // Store low byte new seed value " Cretn\n"); return 0; //this statement will never be executed but it keeps the compiler happy } void main(){ unsigned int vidmem=0xf800; unsigned char key; unsigned int loop; unsigned int oldbkcolor; setvideobase(vidmem); oldbkcolor = bgcolor(0); textcolordefinition(3); monochrome(0); disableinterrupt(); vidclr(vidmem,24*40); vidstrcpy(vidmem, "HELLO WORLD, abc \xe1\xe2\xe3"); shapechar(shapes, 3); loop = 1; vidmem = 0xf828; while (1){ key = getkey(); switch (key){ case 0x82: vidchar(vidmem,'U'); vidchar(vidmem+1,'P'); vidchar(vidmem+2,' '); vidchar(vidmem+3,' '); vidchar(vidmem+4,' '); generatetone(80,5,7); break; case 0x83: vidstrcpy(vidmem,"RIGHT"); generatenoise(2,7); break; case 0x84: vidstrcpy(vidmem,"LEFT "); generatenoise(6,7); break; case 0x85: vidstrcpy(vidmem,"DOWN "); generatetone(80,7,7); break; case 0x71: // Q loop = 0; break; default: break; } if (kbhit() == 0) { settone(0); setnoise(0); } if (loop == 0) break; } while (kbhit() == 1) { } loop = 1; vidmem = 0xfa00; vidchar(vidmem,'X'); while (1){ key = getkey(); switch (key){ case 0x82: vidchar(vidmem,' '); vidmem = vidmem - 40; vidchar(vidmem,'X'); break; case 0x83: vidchar(vidmem,' '); vidmem++; vidchar(vidmem,'X'); break; case 0x84: vidchar(vidmem,' '); vidmem--; vidchar(vidmem,'X'); break; case 0x85: vidchar(vidmem,' '); vidmem = vidmem + 40; vidchar(vidmem,'X'); break; case 0x71: // Q loop = 0; break; default: break; } if (loop == 0) break; } enableinterrupt(); vidclr(vidmem,24*40); gotoxy(0,0); printf("HELLO WORLD!"); gotoxy(20,0); printf("20,0"); gotoxy(0,20); printf("0,20"); gotoxy(10,10); printf("10,10"); while(1) printf(" %i",rand()); } #include ================================================ FILE: src/debug/hwcomx1.c ================================================ /* Hello World for the COMX-35 by Marcel van Tongoren modified by Fabrizio Caruso */ #define _PLAYER_DOWN_UDG 12,18,12,51,45,12,18,51,0 #define _PLAYER_UP_UDG 12,30,12,51,45,12,18,51,0 #define _PLAYER_LEFT_UDG 12,22,12,62,13,12,20,20,0 #define _PLAYER_RIGHT_UDG 12,26,12,31,44,12,10,10,0 #define _PLAYER_DOWN_UDG_1 12+64,18+64,12+64,51+64,45+64,12+64,18+64,51+64,0+64 #define _PLAYER_UP_UDG_1 12+64,30+64,12+64,51+64,45+64,12+64,18+64,51+64,0+64 #define _PLAYER_LEFT_UDG_1 12+64,22+64,12+64,62+64,13+64,12+64,20+64,20+64,0+64 #define _PLAYER_RIGHT_UDG_1 12+64,26+64,12+64,31+64,44+64,12+64,10+64,10+64,0+64 #define _PLAYER_DOWN_UDG_2 12+128,18+128,12+128,51+128,45+128,12+128,18+128,51+128,0+128 #define _PLAYER_UP_UDG_2 12+128,30+128,12+128,51+128,45+128,12+128,18+128,51+128,0+128 #define _PLAYER_LEFT_UDG_2 12+128,22+128,12+128,62+128,13+128,12+128,20+128,20+128,0+128 #define _PLAYER_RIGHT_UDG_2 12+128,26+128,12+128,31+128,44+128,12+128,10+128,10+128,0+128 #define _PLAYER_DOWN_UDG_3 12+192,18+192,12+192,51+192,45+192,12+192,18+192,51+192,0+192 #define _PLAYER_UP_UDG_3 12+192,30+192,12+192,51+192,45+192,12+192,18+192,51+192,0+192 #define _PLAYER_LEFT_UDG_3 12+192,22+192,12+192,62+192,13+192,12+192,20+192,20+192,0+192 #define _PLAYER_RIGHT_UDG_3 12+192,26+192,12+192,31+192,44+192,12+192,10+192,10+192,0+192 unsigned char shapes[] = { 97, // First byte is the character to shape followed by 9 bytes for the shape _PLAYER_DOWN_UDG, 98, // next character to shape _PLAYER_UP_UDG, 99, _PLAYER_RIGHT_UDG, 100, _PLAYER_LEFT_UDG, 101, // First byte is the character to shape followed by 9 bytes for the shape _PLAYER_DOWN_UDG_1, 102, // next character to shape _PLAYER_UP_UDG_1, 103, _PLAYER_RIGHT_UDG_1, 104, _PLAYER_LEFT_UDG_1, 105, // First byte is the character to shape followed by 9 bytes for the shape _PLAYER_DOWN_UDG_2, 106, // next character to shape _PLAYER_UP_UDG_2, 107, _PLAYER_RIGHT_UDG_2, 108, _PLAYER_LEFT_UDG_2, 109, // First byte is the character to shape followed by 9 bytes for the shape _PLAYER_DOWN_UDG_3, 110, // next character to shape _PLAYER_UP_UDG_3, 111, _PLAYER_RIGHT_UDG_3, 112, _PLAYER_LEFT_UDG_3 }; void shapechar(unsigned char * shapelocation, int number) { asm( //shapelocation pointer is R12, number of shapes is R13 " ldi 0xf7\n" " phi R8\n" " ldi 0xfb\n" " phi R9\n" "$$nextshape:\n" " ldi 0xC0 \n" " plo R8 ; R8 = charmem pointer\n" " plo r9 ; R9 = vidmem pointer\n" " ldi 9 \n" " plo R10 ; R10.0 = number of lines, we need to somehowe make a NTSC version for 8 lines\n" " lda 12\n" " phi R10 ; R10.1 = character\n" "$$nextline:\n" " ghi R10\n" " b1 $ ; wait til video is quiet\n" " str R9 ; store character in vidmem\n" " inc R9\n" " lda R12\n" " str R8 ; store first shape line in charmem\n" " inc R8\n" " dec R10\n" " glo R10\n" " bnz $$nextline ; number of lines - 1 if not zero do next line\n" " dec r13\n" " glo r13\n" " bnz $$nextshape\n"); } void setvideobase(){ asm(" ldiReg R8,0xF800\n" " sex R8\n" " out 7\n" " sex R2\n"); } void vidstrcpy(unsigned char * vidmem,char * text){ //write to video memory asm( "$$cpy:\n" " lda R13 ;pick up input pointer\n" " b1 $ ;wait til video is quiet\n" " str R12 ;move the byte\n" " inc R12 ;++\n" " bnz $$cpy\n"); } void vidclr(unsigned char * vidmem, int vidlen){ //write 0's to video memory asm( //vidmem pointer is R12, vidlen is R13 "$$cpy:\n" " ldi 0 ;source a 0 for clearing the screen\n" " b1 $ ;wait til video is quiet\n" " str R12 ;move the byte\n" " inc R12 ;++\n" " dec R13 ;decrement count\n" " glo R13 ; check bottom byte\n" " bnz $$cpy\n" " ghi R13 ;top byte\n" " bnz $$cpy\n"); return; } void vidchar(int vidmem, int character){ //write character to vidmem location in video memory asm(//vidmem pointer is R12, character is R13.0 " glo r13\n" " b1 $ ;wait til video is quiet\n" " str R12 ;move the byte\n"); return; } int getlastkey(){ //get last key asm( " ldiReg R8,0x41A3\n" " ldn R8\n" " plo R15\n" " ldi 0\n" " str R8\n" " phi R15\n" " Cretn\n"); return 0; //this statement will never be executed but it keeps the compiler happy } int getkey(){ //get key value if currently pressed asm( " inp 3\n" " plo R15\n" " ldi 0\n" " phi R15\n" " Cretn\n"); return 0; //this statement will never be executed but it keeps the compiler happy } void settone(int value){ asm( " sex R12 ;Tone generation value\n" " out 4\n" " sex R2\n"); } void generatetone(int tone, int range, int volume){ int tonevalue; tonevalue = (volume & 0xf) + ((range &0x7) << 4) + 0x8 + ((tone & 0x7f) << 8); settone(tonevalue); } #define POKE(addr,val) (*(unsigned char*) (addr) = (val)) void main(){ unsigned char* vidmem=(unsigned char *)0xf800; char key; unsigned int loop, vidmemaddress; int i; setvideobase(); vidclr(vidmem,24*40); vidstrcpy(vidmem, "HELLO WORLD"); vidstrcpy(vidmem+40, "a b c d e f g h i j k l m n o p"); vidmemaddress = (unsigned int) 0xf800+120; // vidchar(vidmemaddress+21, 0xe1); // print character a in second color scheme for(i = 0;i<16;++i) { vidchar(vidmemaddress+i*2,0xe1+i); } shapechar(shapes, 16); POKE(0xf800+200,0xe1); POKE(0xf800+201,0xe2); POKE(0xf800+202,0xe3); POKE(0xf800+203,0xe4); loop = 1; vidmem = (unsigned char *)0xf828; vidmemaddress = (unsigned int) 0xf828; while (1){ key = getkey(); switch (key){ case 0x82: vidchar(vidmemaddress,'U'); vidchar(vidmemaddress+1,'P'); vidchar(vidmemaddress+2,' '); vidchar(vidmemaddress+3,' '); vidchar(vidmemaddress+4,' '); generatetone(80,5,7); break; case 0x83: vidstrcpy(vidmem,"RIGHT"); generatetone(80,6,7); break; case 0x84: vidstrcpy(vidmem,"LEFT "); generatetone(80,4,7); break; case 0x85: vidstrcpy(vidmem,"DOWN "); generatetone(80,7,7); break; case 0x71: // Q settone(0); loop = 0; break; default: break; } if (loop == 0) break; } } ================================================ FILE: src/debug/hwcomx2.c ================================================ /* Hello World for the COMX-35 by Marcel van Tongoren & Bill Rowe */ #include #define putc(c) putcomx(c,0x3302) void putcomx(unsigned char c, unsigned int r13val){ asm( " glo r12\n" " lbr 0x2cd3\n"); } char shapes[] = { 97, // First byte is the character to shape followed by 9 bytes for the shape 0x00, 0xcc, 0xde, 0xed, 0xff, 0xf3, 0xed, 0xe1, 0x00, 98, // next character to shape 0x00, 0x8c, 0x9e, 0xad, 0xbf, 0xb3, 0xad, 0xa1, 0x00, 99, 0x00, 0x00, 0xcc, 0xde, 0xff, 0xde, 0xcc, 0x00, 0x00, }; void shapechar(char * shapelocation, int number) { asm( //shapelocation pointer is R12, number of shapes is R13 " ldi 0xf7\n" " phi R8\n" " ldi 0xfb\n" " phi R9\n" "$$nextshape:\n" " ldi 0xC0 \n" " plo R8 ; R8 = charmem pointer\n" " plo r9 ; R9 = vidmem pointer\n" " ldi 9 \n" " plo R10 ; R10.0 = number of lines, we need to somehowe make a NTSC version for 8 lines\n" " lda 12\n" " phi R10 ; R10.1 = character\n" "$$nextline:\n" " ghi R10\n" " b1 $ ; wait til video is quiet\n" " str R9 ; store character in vidmem\n" " inc R9\n" " lda R12\n" " str R8 ; store first shape line in charmem\n" " inc R8\n" " dec R10\n" " glo R10\n" " bnz $$nextline ; number of lines - 1 if not zero do next line\n" " dec r13\n" " glo r13\n" " bnz $$nextshape\n"); } void setvideobase(unsigned int vidmem){ asm( //vidmem pointer is R12 " sex R12\n" " out 7\n" " sex R2\n"); } void disableinterrupt(){ asm( " sex 3\n" " dis\n" " db 0x23\n"); } void enableinterrupt(){ asm( " sex 3\n" " ret\n" " db 0x23\n"); } void vidstrcpy(unsigned int vidmem,char * text){ //write to video memory asm( "$$cpy:\n" " lda R13 ;pick up input pointer\n" " b1 $ ;wait til video is quiet\n" " str R12 ;move the byte\n" " inc R12 ;++\n" " bnz $$cpy\n"); } void vidclr(unsigned int vidmem, int vidlen){ //write 0's to video memory asm( //vidmem pointer is R12, vidlen is R13 "$$cpy:\n" " ldi 0 ;source a 0 for clearing the screen\n" " b1 $ ;wait til video is quiet\n" " str R12 ;move the byte\n" " inc R12 ;++\n" " dec R13 ;decrement count\n" " glo R13 ; check bottom byte\n" " bnz $$cpy\n" " ghi R13 ;top byte\n" " bnz $$cpy\n"); return; } void vidchar(unsigned int vidmem, int character){ //write character to vidmem location in video memory asm(//vidmem pointer is R12, character is R13.0 " glo r13\n" " b1 $ ;wait til video is quiet\n" " str R12 ;move the byte\n"); return; } unsigned char getkey(){ //get key value if pressed, otherwise return 0 asm( " b3 $$keypressed\n" // Check if a key is pressed for the 'first time' " bn2 $$nokey\n" // Branch to nokey if no key was pressed previously "$$keypressed:\n" " inp 3\n" " lskp\n" "$$nokey:\n" " ldi 0\n" " plo R15\n" " ldi 0\n" " phi R15\n" " Cretn\n"); return 0; //this statement will never be executed but it keeps the compiler happy } unsigned char cgetc(){ //wait for key press asm( "$$loop:\n" " b3 $$keypressed\n" // Check if a key is pressed for the 'first time' " bn2 $$loop\n" // Loop if no key was pressed previously "$$keypressed:\n" " inp 3\n" " plo R15\n" " ldi 0\n" " phi R15\n" " Cretn\n"); return 0; //this statement will never be executed but it keeps the compiler happy } int kbhit(){ //return 1 if a key is pressed, 0 if not asm( " b3 $$keypressed\n" // Check if a key is pressed for the 'first time' " bn2 $$nokey\n" // Branch to nokey if no key was pressed previously "$$keypressed:\n" " ldi 1\n" " lskp\n" "$$nokey:\n" " ldi 0\n" " plo R15\n" " ldi 0\n" " phi R15\n" " Cretn\n"); return 0; //this statement will never be executed but it keeps the compiler happy } void settone(int value){ asm( " sex R12 ;Tone generation value\n" " out 4\n" " sex R2\n"); } void generatetone(int tone, int range, int volume){ int tonevalue; tonevalue = (volume & 0xf) + ((range &0x7) << 4) + 0x8 + ((tone & 0x7f) << 8); settone(tonevalue); } void setnoise(int value){ asm( " ldireg R8,0x41C3\n" " ldn R8\n" " plo R12 ; load current OUT 5 (low byte) video setting from 0x41C3 and store in R12.0\n" " sex R12 ; Noise generation value\n" " out 5\n" " sex R2\n"); } void generatenoise(int range, int volume){ int tonevalue; tonevalue = ((volume & 0xf) + ((range &0x7) << 4) + 0x8) << 8; setnoise(tonevalue); } void main(){ unsigned int vidmem=0xf800; unsigned char key; unsigned int loop; setvideobase(vidmem); disableinterrupt(); vidclr(vidmem,24*40); vidstrcpy(vidmem, "HELLO WORLD, abc \xe1\xe2\xe3"); shapechar(shapes, 3); loop = 1; vidmem = 0xf828; while (1){ key = getkey(); switch (key){ case 0x82: vidchar(vidmem,'U'); vidchar(vidmem+1,'P'); vidchar(vidmem+2,' '); vidchar(vidmem+3,' '); vidchar(vidmem+4,' '); generatetone(80,5,7); break; case 0x83: vidstrcpy(vidmem,"RIGHT"); generatenoise(2,7); break; case 0x84: vidstrcpy(vidmem,"LEFT "); generatenoise(6,7); break; case 0x85: vidstrcpy(vidmem,"DOWN "); generatetone(80,7,7); break; case 0x71: // Q loop = 0; break; default: break; } if (kbhit() == 0) { settone(0); setnoise(0); } if (loop == 0) break; } while (kbhit() == 1) { } loop = 1; vidmem = 0xfa00; vidchar(vidmem,'X'); while (1){ key = getkey(); switch (key){ case 0x82: vidchar(vidmem,' '); vidmem = vidmem - 40; vidchar(vidmem,'X'); break; case 0x83: vidchar(vidmem,' '); vidmem++; vidchar(vidmem,'X'); break; case 0x84: vidchar(vidmem,' '); vidmem--; vidchar(vidmem,'X'); break; case 0x85: vidchar(vidmem,' '); vidmem = vidmem + 40; vidchar(vidmem,'X'); break; case 0x71: // Q loop = 0; break; default: break; } if (loop == 0) break; } enableinterrupt(); printf("HELLO WORLD! %i %d", 42, 43); } #include ================================================ FILE: src/debug/hwcomx_gotoxy.c ================================================ /* Hello World for the COMX-35 by Marcel van Tongoren & Bill Rowe */ #include #define putc(c) putcomx(c,0x3302) void putcomx(unsigned char c, unsigned int r13val){ asm( " glo r12\n" " lbr 0x2cd3\n"); } char shapes[] = { 97, // First byte is the character to shape followed by 9 bytes for the shape 0x00, 0xcc, 0xde, 0xed, 0xff, 0xf3, 0xed, 0xe1, 0x00, 98, // next character to shape 0x00, 0x8c, 0x9e, 0xad, 0xbf, 0xb3, 0xad, 0xa1, 0x00, 99, 0x00, 0x00, 0xcc, 0xde, 0xff, 0xde, 0xcc, 0x00, 0x00, }; void shapechar(char * shapelocation, int number) { asm( //shapelocation pointer is R12, number of shapes is R13 " ldi 0xf7\n" " phi R8\n" " ldi 0xfb\n" " phi R9\n" "$$nextshape:\n" " ldi 0xC0 \n" " plo R8 ; R8 = charmem pointer\n" " plo r9 ; R9 = vidmem pointer\n" " ldi 9 \n" " plo R10 ; R10.0 = number of lines, we need to somehowe make a NTSC version for 8 lines\n" " lda 12\n" " phi R10 ; R10.1 = character\n" "$$nextline:\n" " ghi R10\n" " b1 $ ; wait til video is quiet\n" " str R9 ; store character in vidmem\n" " inc R9\n" " lda R12\n" " str R8 ; store first shape line in charmem\n" " inc R8\n" " dec R10\n" " glo R10\n" " bnz $$nextline ; number of lines - 1 if not zero do next line\n" " dec r13\n" " glo r13\n" " bnz $$nextshape\n"); } void setvideobase(unsigned int vidmem){ asm( //vidmem pointer is R12 " sex R12\n" " out 7\n" " sex R2\n"); } void disableinterrupt(){ asm( " sex 3\n" " dis\n" " db 0x23\n"); } void enableinterrupt(){ asm( " sex 3\n" " ret\n" " db 0x23\n"); } void gotoxycomx(unsigned short vidmem, unsigned char column) { asm( " ldireg R8, 0x419A\n" " sex R8\n" " glo R13\n" " stxd\n" " dec R8\n" " glo R12\n" " stxd\n" " ghi R12\n" " smi 0xf8\n" " stxd\n" " ldi 0\n" " stxd\n" " ldi 0xf8\n" " stxd\n" " glo R12\n" " stxd\n" " ghi R12\n" " stxd\n"); } // void gotoxy(unsigned char x, unsigned char y) // { // gotoxycomx((unsigned short)0xf800+x+y*40,x); // } #define gotoxy(x,y) gotoxycomx((unsigned short)0xf800+(x)+(y)*40,(x)) void vidstrcpy(unsigned int vidmem,char * text){ //write to video memory asm( "$$cpy:\n" " lda R13 ;pick up input pointer\n" " b1 $ ;wait til video is quiet\n" " str R12 ;move the byte\n" " inc R12 ;++\n" " bnz $$cpy\n"); } void vidclr(unsigned int vidmem, int vidlen){ //write 0's to video memory asm( //vidmem pointer is R12, vidlen is R13 "$$cpy:\n" " ldi 0 ;source a 0 for clearing the screen\n" " b1 $ ;wait til video is quiet\n" " str R12 ;move the byte\n" " inc R12 ;++\n" " dec R13 ;decrement count\n" " glo R13 ; check bottom byte\n" " bnz $$cpy\n" " ghi R13 ;top byte\n" " bnz $$cpy\n"); return; } void vidchar(unsigned int vidmem, int character){ //write character to vidmem location in video memory asm(//vidmem pointer is R12, character is R13.0 " glo r13\n" " b1 $ ;wait til video is quiet\n" " str R12 ;move the byte\n"); return; } unsigned char getkey(){ //get key value if pressed, otherwise return 0 asm( " b3 $$keypressed\n" // Check if a key is pressed for the 'first time' " bn2 $$nokey\n" // Branch to nokey if no key was pressed previously "$$keypressed:\n" " inp 3\n" " lskp\n" "$$nokey:\n" " ldi 0\n" " plo R15\n" " ldi 0\n" " phi R15\n" " Cretn\n"); return 0; //this statement will never be executed but it keeps the compiler happy } unsigned char cgetc(){ //wait for key press asm( "$$loop:\n" " b3 $$keypressed\n" // Check if a key is pressed for the 'first time' " bn2 $$loop\n" // Loop if no key was pressed previously "$$keypressed:\n" " inp 3\n" " plo R15\n" " ldi 0\n" " phi R15\n" " Cretn\n"); return 0; //this statement will never be executed but it keeps the compiler happy } int kbhit(){ //return 1 if a key is pressed, 0 if not asm( " b3 $$keypressed\n" // Check if a key is pressed for the 'first time' " bn2 $$nokey\n" // Branch to nokey if no key was pressed previously "$$keypressed:\n" " ldi 1\n" " lskp\n" "$$nokey:\n" " ldi 0\n" " plo R15\n" " ldi 0\n" " phi R15\n" " Cretn\n"); return 0; //this statement will never be executed but it keeps the compiler happy } void settone(int value){ asm( " sex R12 ;Tone generation value\n" " out 4\n" " sex R2\n"); } void generatetone(int tone, int range, int volume){ int tonevalue; tonevalue = (volume & 0xf) + ((range &0x7) << 4) + 0x8 + ((tone & 0x7f) << 8); settone(tonevalue); } void setnoise(int value){ asm( " ldireg R8,0x41C3\n" " ldn R8\n" " plo R12 ; load current OUT 5 (low byte) video setting from 0x41C3 and store in R12.0\n" " sex R12 ; Noise generation value\n" " out 5\n" " sex R2\n"); } void generatenoise(int range, int volume){ int tonevalue; tonevalue = ((volume & 0xf) + ((range &0x7) << 4) + 0x8) << 8; setnoise(tonevalue); } void main(){ unsigned int vidmem=0xf800; unsigned char key; unsigned int loop; setvideobase(vidmem); disableinterrupt(); vidclr(vidmem,24*40); vidstrcpy(vidmem, "HELLO WORLD, abc \xe1\xe2\xe3"); shapechar(shapes, 3); loop = 1; vidmem = 0xf828; while (1){ key = getkey(); switch (key){ case 0x82: vidchar(vidmem,'U'); vidchar(vidmem+1,'P'); vidchar(vidmem+2,' '); vidchar(vidmem+3,' '); vidchar(vidmem+4,' '); generatetone(80,5,7); break; case 0x83: vidstrcpy(vidmem,"RIGHT"); generatenoise(2,7); break; case 0x84: vidstrcpy(vidmem,"LEFT "); generatenoise(6,7); break; case 0x85: vidstrcpy(vidmem,"DOWN "); generatetone(80,7,7); break; case 0x71: // Q loop = 0; break; default: break; } if (kbhit() == 0) { settone(0); setnoise(0); } if (loop == 0) break; } while (kbhit() == 1) { } loop = 1; vidmem = 0xfa00; vidchar(vidmem,'X'); while (1){ key = getkey(); switch (key){ case 0x82: vidchar(vidmem,' '); vidmem = vidmem - 40; vidchar(vidmem,'X'); break; case 0x83: vidchar(vidmem,' '); vidmem++; vidchar(vidmem,'X'); break; case 0x84: vidchar(vidmem,' '); vidmem--; vidchar(vidmem,'X'); break; case 0x85: vidchar(vidmem,' '); vidmem = vidmem + 40; vidchar(vidmem,'X'); break; case 0x71: // Q loop = 0; break; default: break; } if (loop == 0) break; } enableinterrupt(); vidclr(vidmem,24*40); gotoxy(0,0); printf("HELLO WORLD!"); gotoxy(20,0); printf("20,0"); gotoxy(0,20); printf("0,20"); gotoxy(10,10); printf("10,10"); } #include ================================================ FILE: src/debug/hwcomx_gotoxy2.c ================================================ /* Hello World for the COMX-35 by Marcel van Tongoren & Bill Rowe */ #include #define putc(c) putcomx(c,0x3302) void putcomx(unsigned char c, unsigned int r13val){ asm( " glo r12\n" " lbr 0x2cd3\n"); } char shapes[] = { 97, // First byte is the character to shape followed by 9 bytes for the shape 0x00, 0xcc, 0xde, 0xed, 0xff, 0xf3, 0xed, 0xe1, 0x00, 98, // next character to shape 0x00, 0x8c, 0x9e, 0xad, 0xbf, 0xb3, 0xad, 0xa1, 0x00, 99, 0x00, 0x00, 0xcc, 0xde, 0xff, 0xde, 0xcc, 0x00, 0x00, }; void shapechar(char * shapelocation, int number) { asm( //shapelocation pointer is R12, number of shapes is R13 " ldi 0xf7\n" " phi R8\n" " ldi 0xfb\n" " phi R9\n" "$$nextshape:\n" " ldi 0xC0 \n" " plo R8 ; R8 = charmem pointer\n" " plo r9 ; R9 = vidmem pointer\n" " ldi 9 \n" " plo R10 ; R10.0 = number of lines, we need to somehowe make a NTSC version for 8 lines\n" " lda 12\n" " phi R10 ; R10.1 = character\n" "$$nextline:\n" " ghi R10\n" " b1 $ ; wait til video is quiet\n" " str R9 ; store character in vidmem\n" " inc R9\n" " lda R12\n" " str R8 ; store first shape line in charmem\n" " inc R8\n" " dec R10\n" " glo R10\n" " bnz $$nextline ; number of lines - 1 if not zero do next line\n" " dec r13\n" " glo r13\n" " bnz $$nextshape\n"); } void setvideobase(unsigned int vidmem){ asm( //vidmem pointer is R12 " ldireg R8, 0x4195\n" " ghi R12\n" " str R8\n" " inc R8\n" " glo R12\n" " str R8\n" " sex R12\n" " out 7\n" " sex R2\n"); } void disableinterrupt(){ asm( " sex 3\n" " dis\n" " db 0x23\n"); } void enableinterrupt(){ asm( " sex 3\n" " ret\n" " db 0x23\n"); } void gotoxycomx(unsigned int vidmem, unsigned char column){ asm( " ldireg R8, 0x419A\n" " sex R8\n" " glo R13\n" " stxd\n" " dec R8\n" " glo R12\n" " stxd\n" " ghi R12\n" " stxd\n" " dec R8\n" " dec R8\n" " glo R12\n" " stxd\n" " ghi R12\n" " adi 0xf8\n" " stxd\n"); } // void gotoxy(unsigned char x, unsigned char y){ // unsigned int vidmem; // vidmem = y*40 + x; // gotoxycomx(vidmem, x); // } #define gotoxy(x,y) gotoxycomx((y)*40 + (x), (x)) void vidstrcpy(unsigned int vidmem,char * text){ //write to video memory asm( "$$cpy:\n" " lda R13 ;pick up input pointer\n" " b1 $ ;wait til video is quiet\n" " str R12 ;move the byte\n" " inc R12 ;++\n" " bnz $$cpy\n"); } void vidclr(unsigned int vidmem, int vidlen){ //write 0's to video memory asm( //vidmem pointer is R12, vidlen is R13 "$$cpy:\n" " ldi 0 ;source a 0 for clearing the screen\n" " b1 $ ;wait til video is quiet\n" " str R12 ;move the byte\n" " inc R12 ;++\n" " dec R13 ;decrement count\n" " glo R13 ; check bottom byte\n" " bnz $$cpy\n" " ghi R13 ;top byte\n" " bnz $$cpy\n"); return; } void vidchar(unsigned int vidmem, int character){ //write character to vidmem location in video memory asm(//vidmem pointer is R12, character is R13.0 " glo r13\n" " b1 $ ;wait til video is quiet\n" " str R12 ;move the byte\n"); return; } unsigned char getkey(){ //get key value if pressed, otherwise return 0 asm( " b3 $$keypressed\n" // Check if a key is pressed for the 'first time' " bn2 $$nokey\n" // Branch to nokey if no key was pressed previously "$$keypressed:\n" " inp 3\n" " lskp\n" "$$nokey:\n" " ldi 0\n" " plo R15\n" " ldi 0\n" " phi R15\n" " Cretn\n"); return 0; //this statement will never be executed but it keeps the compiler happy } unsigned char cgetc(){ //wait for key press asm( "$$loop:\n" " b3 $$keypressed\n" // Check if a key is pressed for the 'first time' " bn2 $$loop\n" // Loop if no key was pressed previously "$$keypressed:\n" " inp 3\n" " plo R15\n" " ldi 0\n" " phi R15\n" " Cretn\n"); return 0; //this statement will never be executed but it keeps the compiler happy } int kbhit(){ //return 1 if a key is pressed, 0 if not asm( " b3 $$keypressed\n" // Check if a key is pressed for the 'first time' " bn2 $$nokey\n" // Branch to nokey if no key was pressed previously "$$keypressed:\n" " ldi 1\n" " lskp\n" "$$nokey:\n" " ldi 0\n" " plo R15\n" " ldi 0\n" " phi R15\n" " Cretn\n"); return 0; //this statement will never be executed but it keeps the compiler happy } void settone(int value){ asm( " sex R12 ;Tone generation value\n" " out 4\n" " sex R2\n"); } void generatetone(int tone, int range, int volume){ int tonevalue; tonevalue = (volume & 0xf) + ((range &0x7) << 4) + 0x8 + ((tone & 0x7f) << 8); settone(tonevalue); } void setnoise(int value){ asm( " ldireg R8,0x41C3\n" " ldn R8\n" " plo R12 ; load current OUT 5 (low byte) video setting from 0x41C3 and store in R12.0\n" " sex R12 ; Noise generation value\n" " out 5\n" " sex R2\n"); } void generatenoise(int range, int volume){ int tonevalue; tonevalue = ((volume & 0xf) + ((range &0x7) << 4) + 0x8) << 8; setnoise(tonevalue); } void main(){ unsigned int vidmem=0xf800; unsigned char key; unsigned int loop; setvideobase(vidmem); disableinterrupt(); vidclr(vidmem,24*40); vidstrcpy(vidmem, "HELLO WORLD, abc \xe1\xe2\xe3"); shapechar(shapes, 3); loop = 1; vidmem = 0xf828; while (1){ key = getkey(); switch (key){ case 0x82: vidchar(vidmem,'U'); vidchar(vidmem+1,'P'); vidchar(vidmem+2,' '); vidchar(vidmem+3,' '); vidchar(vidmem+4,' '); generatetone(80,5,7); break; case 0x83: vidstrcpy(vidmem,"RIGHT"); generatenoise(2,7); break; case 0x84: vidstrcpy(vidmem,"LEFT "); generatenoise(6,7); break; case 0x85: vidstrcpy(vidmem,"DOWN "); generatetone(80,7,7); break; case 0x71: // Q loop = 0; break; default: break; } if (kbhit() == 0) { settone(0); setnoise(0); } if (loop == 0) break; } while (kbhit() == 1) { } loop = 1; vidmem = 0xfa00; vidchar(vidmem,'X'); while (1){ key = getkey(); switch (key){ case 0x82: vidchar(vidmem,' '); vidmem = vidmem - 40; vidchar(vidmem,'X'); break; case 0x83: vidchar(vidmem,' '); vidmem++; vidchar(vidmem,'X'); break; case 0x84: vidchar(vidmem,' '); vidmem--; vidchar(vidmem,'X'); break; case 0x85: vidchar(vidmem,' '); vidmem = vidmem + 40; vidchar(vidmem,'X'); break; case 0x71: // Q loop = 0; break; default: break; } if (loop == 0) break; } enableinterrupt(); vidclr(vidmem,24*40); gotoxy(0,0); printf("HELLO WORLD!"); gotoxy(20,0); printf("20,0"); gotoxy(0,20); printf("0,20"); gotoxy(10,10); printf("10,10"); } #include ================================================ FILE: src/debug/hwcomx_pp_debug.c ================================================ #include "foo.h" void setvideobase(){ asm(" ldiReg R8,0xF800\n" " sex R8\n" " out 7\n" " sex R2\n"); } void vidstrcpy(unsigned char * vidmem,char * text){ //write to video memory asm( "$$cpy:\n" " lda R13 ;pick up input pointer\n" " b1 $ ;wait til video is quiet\n" " str R12 ;move the byte\n" " inc R12 ;++\n" " bnz $$cpy\n"); } void vidclr(unsigned char * vidmem, int vidlen){ //write 0's to video memory asm( //vidmem pointer is R12, vidlen is R13 "$$cpy:\n" " ldi 0 ;source a 0 for clearing the screen\n" " b1 $ ;wait til video is quiet\n" " str R12 ;move the byte\n" " inc R12 ;++\n" " dec R13 ;decrement count\n" " glo R13 ; check bottom byte\n" " bnz $$cpy\n" " ghi R13 ;top byte\n" " bnz $$cpy\n"); return; } unsigned char _foo = 43; extern Foo FOO; int main(void) { unsigned char* vidmem=(unsigned char *)0xf800; setvideobase(); vidclr(vidmem,24*40); vidstrcpy(vidmem, "HELLO WORLD"); // if(FOO==42) // vidstrcpy(vidmem+80, "FOO IS 42"); // else // vidstrcpy(vidmem+80, "FOO IS NOT 42!"); // if(_FOO==43) // vidstrcpy(vidmem+120, "_FOO IS 43"); // else // vidstrcpy(vidmem+120, "_FOO IS NOT 43!"); FOO.bar = _FOO; while(1){}; return 0; } ================================================ FILE: src/debug/hwpecom.c ================================================ /* Hello World for the PECOM 64 by Marcel van Tongoren & Bill Rowe */ #include #define putc(c) putpecom(c,0xB102) void putpecom(unsigned char c, unsigned int r13val){ asm( " sex R2\n" " glo r12\n" " lbr 0xAAB8\n"); } char shapes[] = { 97, // First byte is the character to shape followed by 9 bytes for the shape 0x00, 0xcc, 0xde, 0xed, 0xff, 0xf3, 0xed, 0xe1, 0x00, 98, // next character to shape 0x00, 0x8c, 0x9e, 0xad, 0xbf, 0xb3, 0xad, 0xa1, 0x00, 99, 0x00, 0x00, 0xcc, 0xde, 0xff, 0xde, 0xcc, 0x00, 0x00, }; void shapechar(char * shapelocation, int number) { asm( //shapelocation pointer is R12, number of shapes is R13 " sex R3\n" " out 1\n" " db 2\n" " sex R2\n" " ldi 0xf7\n" " phi R8\n" " ldi 0xfb\n" " phi R9\n" "$$nextshape:\n" " ldi 0xC0 \n" " plo R8 ; R8 = charmem pointer\n" " plo r9 ; R9 = vidmem pointer\n" " ldi 9 \n" " plo R10 ; R10.0 = number of lines, we need to somehowe make a NTSC version for 8 lines\n" " lda 12\n" " phi R10 ; R10.1 = character\n" "$$nextline:\n" " ghi R10\n" " b1 $ ; wait til video is quiet\n" " str R9 ; store character in vidmem\n" " inc R9\n" " lda R12\n" " str R8 ; store first shape line in charmem\n" " inc R8\n" " dec R10\n" " glo R10\n" " bnz $$nextline ; number of lines - 1 if not zero do next line\n" " dec r13\n" " glo r13\n" " bnz $$nextshape\n"); } void setvideobase(unsigned int vidmem){ asm( //vidmem pointer is R12 " ldireg R8, 0x7cc8\n" " ghi R12\n" " str R8\n" " inc R8\n" " glo R12\n" " str R8\n" " sex R12\n" " out 7\n" " sex R2\n"); } void disableinterrupt(){ asm( " sex 3\n" " dis\n" " db 0x23\n"); } void enableinterrupt(){ asm( " sex 3\n" " ret\n" " db 0x23\n"); } void gotoxypecom(unsigned int vidmem){ asm( " ldireg R8, 0x7CC6\n" " sex R8\n" " glo R12\n" " stxd\n" " ghi R12\n" " adi 0xf8\n" " stxd\n" " sex R2\n"); } void gotoxy(unsigned char x, unsigned char y){ gotoxypecom(y*40 + x); } void vidstrcpy(unsigned int vidmem,char * text){ //write to video memory asm( " sex R3\n" " out 1\n" " db 2\n" " sex R2\n" "$$cpy:\n" " lda R13 ;pick up input pointer\n" " bz $$end\n" " b1 $ ;wait til video is quiet\n" " str R12 ;move the byte\n" " inc R12 ;++\n" " br $$cpy\n" "$$end:\n"); } void vidclr(unsigned int vidmem, int vidlen){ //write 0's to video memory asm( //vidmem pointer is R12, vidlen is R13 " sex R3\n" " out 1\n" " db 2\n" " sex R2\n" "$$cpy:\n" " ldi 0 ;source a 0 for clearing the screen\n" " b1 $ ;wait til video is quiet\n" " str R12 ;move the byte\n" " inc R12 ;++\n" " dec R13 ;decrement count\n" " glo R13 ; check bottom byte\n" " bnz $$cpy\n" " ghi R13 ;top byte\n" " bnz $$cpy\n"); return; } void vidchar(unsigned int vidmem, int character){ //write character to vidmem location in video memory asm(//vidmem pointer is R12, character is R13.0 " sex R3\n" " out 1\n" " db 2\n" " sex R2\n" " glo r13\n" " b1 $ ;wait til video is quiet\n" " str R12 ;move the byte\n"); return; } unsigned char getkey(){ //get key value if pressed, otherwise return 0 asm( " ldireg R8, 0x7CCA\n" " sex R8\n" //Set stack to R8 which counts up from 0x7CCA to 0x7CE3 to check all keys "$$checknext:\n" " inp 3\n" // bit 0 and 1 indicate key press " ani 3\n" " bnz $$keypressed\n" // bit 0 or 1 are 1 so a key is pressed " glo R8\n" " inc R8\n" " xri 0xe3\n" " bnz $$checknext\n" // R8++ if not 0xE3 check next key " ldi 0\n" " br $$exit\n" // all keys checked - return 0 "$$keypressed:\n" " shr\n" " shr\n" // move bit 1 into DF " glo R8\n" // get value 'keyset' " shlc\n" // shift left and move DF to b0 so key value is unique " adi 0x98\n" // convert to ASCII "$$exit:\n" " plo R15\n" " ldi 0\n" " phi R15\n" " sex R2\n" " Cretn\n"); return 0; //this statement will never be executed but it keeps the compiler happy } unsigned char cgetc(){ //wait for key press asm( "$$cgetc:\n" " ldireg R8, 0x7CCA\n" " sex R8\n" //Set stack to R8 which counts up from 0x7CCA to 0x7CE3 to check all keys "$$checknext:\n" " inp 3\n" // bit 0 and 1 indicate key press " ani 3\n" " bnz $$keypressed\n" // bit 0 or 1 are 1 so a key is pressed " glo R8\n" " inc R8\n" " xri 0xe3\n" " bnz $$checknext\n" // R8++ if not 0xE3 check next key " br $$cgetc\n" // all keys checked - check again "$$keypressed:\n" " shr\n" " shr\n" // move bit 1 into DF " glo R8\n" // get value 'keyset' " shlc\n" // shift left and move DF to b0 so key value is unique " adi 0x98\n" // convert to ASCII " plo R15\n" " ldi 0\n" " phi R15\n" " sex R2\n" " Cretn\n"); return 0; //this statement will never be executed but it keeps the compiler happy } int kbhit(){ //return 1 if a key is pressed, 0 if not asm( " ldireg R8, 0x7CCA\n" " sex R8\n" //Set stack to R8 which counts up from 0x7CCA to 0x7CE3 to check all keys "$$checknext:\n" " inp 3\n" // bit 0 and 1 indicate key press " ani 3\n" " bnz $$keypressed\n" // bit 0 or 1 are 1 so a key is pressed " glo R8\n" " inc R8\n" " xri 0xe3\n" " bnz $$checknext\n" // R8++ if not 0xE3 check next key " ldi 0\n" // all keys checked - return 0 " lskp\n" "$$keypressed:\n" " ldi 1\n" // key pressed - return 1 " plo R15\n" " ldi 0\n" " phi R15\n" " sex R2\n" " Cretn\n"); return 0; //this statement will never be executed but it keeps the compiler happy } void settone(int value){ asm( " sex R12 ;Tone generation value\n" " out 4\n" " sex R2\n"); } void generatetone(int tone, int range, int volume){ int tonevalue; tonevalue = (volume & 0xf) + ((range &0x7) << 4) + 0x8 + ((tone & 0x7f) << 8); settone(tonevalue); } void setnoise(int value){ asm( " ldi 0x80\n" " plo R12 ; load current OUT 5 (low byte) video setting 0x80\n" " sex R12 ; Noise generation value\n" " out 5\n" " sex R2\n"); } void generatenoise(int range, int volume){ int tonevalue; tonevalue = ((volume & 0xf) + ((range &0x7) << 4) + 0x8) << 8; setnoise(tonevalue); } unsigned char bgcolor(unsigned char color){ asm( //color is in R12.0 //0: black //1: green //2: blue //3: cyan //4: red //5: yellow //6: magenta //7: white " ldireg R8, 0x7cc4\n" " ldn R8\n" //get latest OUT 3 value " ani 7\n" //get old background color " plo R15\n" " ldi 0\n" " phi R15\n" //return old background in R15 " ldn R8\n" //get latest OUT 3 value " ani 0xf8\n" //clear background color " str R2\n" //store value on stack " glo R12\n" //get new color " ani 7\n" //limit to 3 bits " or\n" //new color OR latest OUT3 value " str R8\n" //store new value " sex R8\n" " out 3\n" //set new color value " sex R2\n" " Cretn\n"); return 0; //this statement will never be executed but it keeps the compiler happy } void textcolordefinition(unsigned char definition){ asm( //definition is in R12.0 // b1 b0 RED BLUE GREEN // 0 0 CB0 CB1 PCB // 0 1 CCB0 PCB CCB1 // 1 0/1 PCB CCB0 CCB1 " ldireg R8, 0x7cc4\n" " ldn R8\n" //get latest OUT 3 value " ani 0x9f\n" //clear text color definition " str R2\n" //store value on stack " glo R12\n" //get new color " ani 3\n" //limit to 2 bits " shrc\n" " shrc\n" " shrc\n" " shrc\n" " or\n" //new text color definition OR latest OUT3 value " str R8\n" //store new value " sex R8\n" " out 3\n" //set new color definition value " sex R2\n"); } void monochrome(unsigned char mono){ asm( //mono/cfc is in R12.0, 0=color, 1=mono " ldireg R8, 0x7cc4\n" " ldn R8\n" //get latest OUT 3 value " ani 0xf7\n" //clear cfc " str R2\n" //store value on stack " glo R12\n" //get new cfc " ani 1\n" //limit to 1 bits " shl\n" " shl\n" " shl\n" " or\n" //new cfc OR latest OUT3 value " str R8\n" //store new value " sex R8\n" " out 3\n" //set new cfc value " sex R2\n"); } void main(){ unsigned int vidmem=0xf800; unsigned char key; unsigned int loop; unsigned int oldbkcolor; setvideobase(vidmem); oldbkcolor = bgcolor(0); textcolordefinition(3); monochrome(0); vidclr(vidmem,24*40); vidstrcpy(vidmem, "HELLO WORLD, abc \xe1\xe2\xe3"); shapechar(shapes, 3); loop = 1; vidmem = 0xf828; while (1){ key = cgetc(); switch (key){ case 0x5E: vidchar(vidmem,'U'); vidchar(vidmem+1,'P'); vidchar(vidmem+2,' '); vidchar(vidmem+3,' '); vidchar(vidmem+4,' '); generatetone(80,5,7); break; case 0x5D: vidstrcpy(vidmem,"RIGHT"); generatenoise(2,7); break; case 0x5C: vidstrcpy(vidmem,"LEFT "); generatenoise(6,7); break; case 0x5B: vidstrcpy(vidmem,"DOWN "); generatetone(80,7,7); break; case 0x51: // q loop = 0; break; default: break; } if (kbhit() == 0) { settone(0); setnoise(0); } if (loop == 0) break; } while (kbhit() == 1) { } loop = 1; vidmem = 0xfa00; vidchar(vidmem,'X'); while (1){ key = getkey(); switch (key){ case 0x5E: vidchar(vidmem,' '); vidmem = vidmem - 40; vidchar(vidmem,'X'); break; case 0x5D: vidchar(vidmem,' '); vidmem++; vidchar(vidmem,'X'); break; case 0x5C: vidchar(vidmem,' '); vidmem--; vidchar(vidmem,'X'); break; case 0x5B: vidchar(vidmem,' '); vidmem = vidmem + 40; vidchar(vidmem,'X'); break; case 0x51: // q loop = 0; break; default: break; } if (loop == 0) break; } vidclr(vidmem,24*40); // gotoxy(0,0); // printf("HELLO WORLD!"); // gotoxy(20,0); // printf("20,0"); // gotoxy(0,20); // printf("0,20"); // gotoxy(10,10); // printf("10,10"); } #include ================================================ FILE: src/debug/intern.c ================================================ #include "intern.h" extern const int foo[]; int main(void) { return 0; } ================================================ FILE: src/debug/intern.h ================================================ const int foo[] = {42,43,44,45,46,47}; ================================================ FILE: src/debug/lcc1802_test.c ================================================ /* Hello World for the COMX-35 by Marcel van Tongoren & Bill Rowe */ #include #include "comx\rca_vis_video.h" #include "comx\rca_vis_sound.h" #ifdef __PECOM__ #include "comx\rca_joystick.h" #endif #ifdef __TMC600__ #include "comx\rca_joystick.h" #endif #ifdef __CIDELSA__ #include "comx\rca_joystick.h" #endif #ifdef __COMX__ #include "comx\rca_keyboard_encoder.h" #endif #include "comx\rca_rand.h" #include "comx\rca_system.h" #ifndef __CIDELSA__ #include "comx\rca_printf.h" #endif #ifdef __COMX__ #define key_up 0x82 #define key_right 0x83 #define key_left 0x84 #define key_down 0x85 #define key_exit 0x71 #endif #ifdef __PECOM__ #define key_up 0x5e #define key_right 0x5d #define key_left 0x5c #define key_down 0x5b #define key_exit 0x40 #endif #ifdef __TMC600__ #define key_up 0xb #define key_right 0x9 #define key_left 0x8 #define key_down 0xa #define key_exit 0x20 #endif #ifdef __CIDELSA__ #define key_up 0x10 #define key_right 0x40 #define key_left 0x80 #define key_down 0x20 #define key_exit 0x1 #endif void main(){ #ifdef __CIDELSA__ static const unsigned char shape_alpha[] = { 0x7E, // First byte is the '3rd' color bit for following lines one bit per line, b7 for first line 0x00, 0xDF, 0xE8, 0xE8, 0xE8, 0xFF, 0xDF, 0x00, //A 0x7E, 0x00, 0xD6, 0xE9, 0xE9, 0xE9, 0xFF, 0xFF, 0x00, //B 0x7E, 0x00, 0xD2, 0xE1, 0xE1, 0xE1, 0xFF, 0xDE, 0x00, //C 0x7E, 0x00, 0xDE, 0xE1, 0xE1, 0xE1, 0xFF, 0xFF, 0x00, //D 0x7E, 0x00, 0xE1, 0xE1, 0xE9, 0xE9, 0xFF, 0xFF, 0x00, //E 0x7E, 0x00, 0xE0, 0xE0, 0xE8, 0xE8, 0xFF, 0xFF, 0x00, //F 0x7E, 0x00, 0xD6, 0xE5, 0xE1, 0xE1, 0xFF, 0xDE, 0x00, //G 0x7E, 0x00, 0xFF, 0xC8, 0xC8, 0xC8, 0xFF, 0xFF, 0x00, //H 0x3C, 0x00, 0x00, 0xE1, 0xFF, 0xFF, 0xE1, 0x00, 0x00, //I 0x7E, 0x00, 0xFE, 0xFF, 0xC1, 0xC1, 0xC1, 0xC2, 0x00, //J 0x3E, 0x00, 0x00, 0xE1, 0xD2, 0xCC, 0xFF, 0xFF, 0x00, //K 0x3E, 0x00, 0x00, 0xC1, 0xC1, 0xC1, 0xFF, 0xFF, 0x00, //L 0x7E, 0x00, 0xFF, 0xD0, 0xC8, 0xD0, 0xFF, 0xFF, 0x00, //M 0x7E, 0x00, 0xFF, 0xC4, 0xC8, 0xD0, 0xFF, 0xFF, 0x00, //N 0x7E, 0x00, 0xDE, 0xE1, 0xE1, 0xE1, 0xFF, 0xDE, 0x00, //O 0x7E, 0x00, 0xD0, 0xE8, 0xE8, 0xE8, 0xFF, 0xFF, 0x00, //P 0x7E, 0x00, 0xDE, 0xE1, 0xE7, 0xE1, 0xFF, 0xDE, 0x00, //Q 0x7E, 0x00, 0xD1, 0xEA, 0xEC, 0xE8, 0xFF, 0xFF, 0x00, //R 0x7E, 0x00, 0xE6, 0xEF, 0xE9, 0xE9, 0xF9, 0xD1, 0x00, //S 0x7E, 0x00, 0xE0, 0xE0, 0xFF, 0xFF, 0xE0, 0xE0, 0x00, //T 0x7E, 0x00, 0xFE, 0xC1, 0xC1, 0xC1, 0xFF, 0xFE, 0x00, //U 0x7E, 0x00, 0xF0, 0xCC, 0xC3, 0xCF, 0xFC, 0xF0, 0x00, //V 0xFF, 0xF0, 0xCC, 0xC3, 0xCC, 0xC3, 0xCF, 0xFC, 0xF0, //W 0x7E, 0x00, 0xF3, 0xD4, 0xC8, 0xD4, 0xF3, 0xF3, 0x00, //X 0x7E, 0x00, 0xE0, 0xD0, 0xCF, 0xDF, 0xF0, 0xE0, 0x00, //Y 0x7E, 0x00, 0xF1, 0xF1, 0xE9, 0xE5, 0xE3, 0xE3, 0x00, //Z }; static const unsigned char shape_numbers[] = { 0x00, 0x5E, 0x61, 0x61, 0x61, 0x5E, 0x00, 0x00, 0x00, //0 0x00, 0x41, 0x7F, 0x61, 0x51, 0x41, 0x00, 0x00, 0x00, //1 0x00, 0x51, 0x69, 0x65, 0x65, 0x53, 0x00, 0x00, 0x00, //2 0x00, 0x56, 0x69, 0x69, 0x61, 0x61, 0x00, 0x00, 0x00, //3 0x00, 0x44, 0x7F, 0x64, 0x54, 0x4C, 0x00, 0x00, 0x00, //4 0x00, 0x66, 0x69, 0x69, 0x69, 0x72, 0x00, 0x00, 0x00, //5 0x00, 0x66, 0x69, 0x69, 0x69, 0x5E, 0x00, 0x00, 0x00, //6 0x00, 0x70, 0x68, 0x64, 0x63, 0x60, 0x00, 0x00, 0x00, //7 0x00, 0x56, 0x69, 0x69, 0x69, 0x56, 0x00, 0x00, 0x00, //8 0x00, 0x5E, 0x69, 0x69, 0x69, 0x51, 0x00, 0x00, 0x00, //9 0x00, }; static const unsigned char shape_space[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //space }; #else static const unsigned char shapes[] = { 97, // First byte is the character to shape followed by 9 bytes for the shape 0x00, 0xcc, 0xde, 0xed, 0xff, 0xf3, 0xed, 0xe1, 0x00, 98, // next character to shape 0x00, 0x8c, 0x9e, 0xad, 0xbf, 0xb3, 0xad, 0xa1, 0x00, 99, 0x00, 0x00, 0xcc, 0xde, 0xff, 0xde, 0xcc, 0x00, 0x00, }; #endif #ifdef __CIDELSA__ unsigned int vidmem=0xfc10; #else unsigned int vidmem=0xf800; #endif unsigned char key; unsigned int loop; unsigned int oldbkcolor; disableinterrupt(); setvideobase(vidmem); oldbkcolor = bgcolor(0); #ifndef __TMC600__ textcolordefinition(3); monochrome(0); #ifdef __CIDELSA__ shapechar(shape_space, 0x0001, 0x0); shapechar(shape_space, 0x2001, 0x0); shapechar(shape_numbers, 0x300A, 0x40); shapechar(shape_alpha, 0x411A, 0x0); shapechar(shape_space, 0x8001, 0x0); shapechar(shape_space, 0xA001, 0x0); shapechar(shape_numbers, 0xB00A, 0x80); shapechar(shape_alpha, 0xC11A, 0xa0); #else shapecolor(0x20, 0x5f, 2); shapechar(shapes, 3); #endif #else textcolor(7); #endif #ifdef __CIDELSA__ vidclr(0xf800,27*40); vidstrcpy(vidmem, "HELLO WORLD"); vidstrcpy(vidmem + 4, "ABCDEFGHIJKLMNOPQRSTUVWXYZ"); vidstrcpy(vidmem + 6, "0 1 2 3 4 5 6 7 8 9"); textcolor(1); vidstrcpy(vidmem + 8, "ABCDEFGHIJKLMNOPQRSTUVWXYZ"); vidstrcpy(vidmem + 10, "0 1 2 3 4 5 6 7 8 9"); vidmem += 2; #else vidclr(vidmem,24*40); vidstrcpy(vidmem, "HELLO "); textcolor(1); vidstrcpy(vidmem+6, "WORLD"); vidmem = 0xf828; #endif #ifdef __TMC600__ setcolor(0,3); #endif loop = 1; while (1){ #ifdef __CIDELSA__ key = get_stick(); if (get_trigger() != 0) key = 1; #else key = getkey(); #endif switch (key){ case key_up: vidstrcpy(vidmem,"UP "); generatetone(80,5,7); break; case key_right: vidstrcpy(vidmem,"RIGHT"); generatenoise(2,7); break; case key_left: vidstrcpy(vidmem,"LEFT "); generatenoise(6,7); break; case key_down: vidstrcpy(vidmem,"DOWN "); generatetone(80,7,7); break; case key_exit: // Q or space loop = 0; break; default: break; } if (kbhit() == 0) { generatetone(0, 0, 0); generatenoise(0,0); } if (loop == 0) break; } while (kbhit() == 1) { } loop = 1; vidmem = 0xfa00; vidchar(vidmem,'X'); while (1){ #ifdef __CIDELSA__ key = get_stick(); if (get_trigger() != 0) key = 1; #else key = getkey(); #endif switch (key){ case key_up: vidchar(vidmem,' '); #ifdef __CIDELSA__ vidmem--; #else vidmem = vidmem - 40; #endif vidchar(vidmem,'X'); break; case key_right: vidchar(vidmem,' '); #ifdef __CIDELSA__ vidmem = vidmem - 40; #else vidmem++; #endif vidchar(vidmem,'X'); break; case key_left: vidchar(vidmem,' '); #ifdef __CIDELSA__ vidmem = vidmem + 40; #else vidmem--; #endif vidchar(vidmem,'X'); break; case key_down: vidchar(vidmem,' '); #ifdef __CIDELSA__ vidmem++; #else vidmem = vidmem + 40; #endif vidchar(vidmem,'X'); break; case key_exit: // Q or space loop = 0; break; default: break; } if (loop == 0) break; } enableinterrupt(); vidclr(vidmem,24*40); #ifndef __CIDELSA__ gotoxy(0,0); printf("HELLO WORLD!"); gotoxy(20,0); printf("20,0"); gotoxy(0,20); printf("0,20"); gotoxy(10,10); printf("10,10"); printf(" %i",rand()); printf(" %i",rand()); printf(" %i",rand()); printf(" %i",rand()); printf(" %i",rand()); #endif } #include ================================================ FILE: src/debug/lcc1802_test_NEW.c ================================================ /* Hello World for the COMX-35 by Marcel van Tongoren & Bill Rowe */ #include #include "comx\rca_vis_video.h" #include "comx\rca_vis_sound.h" #ifdef __PECOM__ #include "comx\rca_joystick.h" #endif #ifdef __TMC600__ #include "comx\rca_joystick.h" #endif #ifdef __CIDELSA__ #include "comx\rca_joystick.h" #include "comx\rca_character_set.h" #endif #ifdef __COMX__ #include "comx\rca_keyboard_encoder.h" #endif #include "comx\rca_rand.h" #include "comx\rca_system.h" #ifndef __CIDELSA__ #include "comx\rca_printf.h" #endif #ifdef __COMX__ #define key_up 0x82 #define key_right 0x83 #define key_left 0x84 #define key_down 0x85 #define key_exit 0x71 #endif #ifdef __PECOM__ #define key_up 0x5e #define key_right 0x5d #define key_left 0x5c #define key_down 0x5b #define key_exit 0x40 #endif #ifdef __TMC600__ #define key_up 0xb #define key_right 0x9 #define key_left 0x8 #define key_down 0xa #define key_exit 0x20 #endif #ifdef __CIDELSA__ #define key_up 0x40 // UP is really right on the Cidelsa screen, key up = 0x10 #define key_right 0x20 // RIGHT is really down on the Cidelsa screen, key right = 0x40 #define key_left 0x10 // LEFT is really up on the Cidelsa screen, key left = 0x80 #define key_down 0x80 // DOWN is really left on the Cidelsa screen, key down = 0x20 #define key_exit 0x1 #endif void main(){ #ifndef __CIDELSA__ static const unsigned char shapes[] = { // 97, // First byte is the character to shape followed by 9 bytes for the shape 0x00, 0xcc, 0xde, 0xed, 0xff, 0xf3, 0xed, 0xe1, 0x00, // 98, // next character to shape 0x00, 0x8c, 0x9e, 0xad, 0xbf, 0xb3, 0xad, 0xa1, 0x00, // 99, 0x00, 0x00, 0xcc, 0xde, 0xff, 0xde, 0xcc, 0x00, 0x00, }; #endif unsigned int vidmem=0xf800; unsigned char key; unsigned int loop; unsigned int oldbkcolor; disableinterrupt(); setvideobase(vidmem); #ifdef __CIDELSA__ #ifdef __DRACO__ vidmem=0xfc10; #else vidmem=0xfbc0; #endif #endif oldbkcolor = bgcolor(0); #ifndef __TMC600__ textcolordefinition(3); monochrome(0); #else textcolor(7); #endif #ifdef __CIDELSA__ character_set(4); #ifdef __DRACO__ vidclr(0xf800,27*40); #else vidclr(0xf800,25*40); #endif vidstrcpy(vidmem, "HELLO WORLD"); vidstrcpy(vidmem + 4, "ABCDEFGHIJKLMNOPQRSTUVWXYZ"); vidstrcpy(vidmem + 6, "0 1 2 3 4 5 6 7 8 9"); textcolor(1); vidstrcpy(vidmem + 8, "ABCDEFGHIJKLMNOPQRSTUVWXYZ"); vidstrcpy(vidmem + 10, "0 1 2 3 4 5 6 7 8 9"); textcolor(2); vidstrcpy(vidmem + 12, "ABCDEFGHIJKLMNOPQRSTUVWXYZ"); vidstrcpy(vidmem + 14, "0 1 2 3 4 5 6 7 8 9"); textcolor(3); vidstrcpy(vidmem + 16, "ABCDEFGHIJKLMNOPQRSTUVWXYZ"); vidstrcpy(vidmem + 18, "0 1 2 3 4 5 6 7 8 9"); vidmem += 2; #else #ifndef __TMC600__ shapecolor(0x20, 0x5f, 2); shapechar(shapes, 0x61, 3); #endif vidclr(vidmem,24*40); vidstrcpy(vidmem, "HELLO "); textcolor(1); vidstrcpy(vidmem+6, "WORLD abc"); vidmem = 0xf828; #endif #ifdef __TMC600__ setcolor(0,3); #endif loop = 1; while (1){ #ifdef __CIDELSA__ key = get_stick(); if (get_trigger() != 0) key = 1; #else key = getkey(); #endif switch (key){ case key_up: vidstrcpy(vidmem,"UP "); generatetone(80,5,7); break; case key_right: vidstrcpy(vidmem,"RIGHT"); generatenoise(2,7); break; case key_left: vidstrcpy(vidmem,"LEFT "); generatenoise(6,7); break; case key_down: vidstrcpy(vidmem,"DOWN "); generatetone(80,7,7); break; case key_exit: // Q or space loop = 0; break; default: break; } if (kbhit() == 0) { generatetone(0, 0, 0); generatenoise(0,0); } if (loop == 0) break; } while (kbhit() == 1) { } loop = 1; vidmem = 0xfa00; vidchar(vidmem,'X'); while (1){ #ifdef __CIDELSA__ key = get_stick(); if (get_trigger() != 0) key = 1; #else key = getkey(); #endif switch (key){ case key_up: vidchar(vidmem,' '); vidmem = vidmem - 40; vidchar(vidmem,'X'); break; case key_right: vidchar(vidmem,' '); vidmem++; vidchar(vidmem,'X'); break; case key_left: vidchar(vidmem,' '); vidmem--; vidchar(vidmem,'X'); break; case key_down: vidchar(vidmem,' '); vidmem = vidmem + 40; vidchar(vidmem,'X'); break; case key_exit: // Q or space loop = 0; break; default: break; } if (loop == 0) break; } enableinterrupt(); vidclr(vidmem,24*40); #ifndef __CIDELSA__ gotoxy(0,0); printf("HELLO WORLD!"); gotoxy(20,0); printf("20,0"); gotoxy(0,20); printf("0,20"); gotoxy(10,10); printf("10,10"); printf(" %i",rand()); printf(" %i",rand()); printf(" %i",rand()); printf(" %i",rand()); printf(" %i",rand()); #endif } #include #include ================================================ FILE: src/debug/litterals.c ================================================ #include #define XSize 32 int main(void) { printf("debug: %d\n", XSize-XSize/4-XSize/5); printf("debug 2: %f\n", XSize/5); return 0; } ================================================ FILE: src/debug/m5.c ================================================ #include int main() { printf("Hello CGL M5 World !\n"); while(1){}; return 0; } ================================================ FILE: src/debug/main_use_amiga_core.c ================================================ #include "amiga_core.h" // DEMO - INCBIN volatile int frameCounter = 0; //INCBIN(colors, "colors.bin") static __attribute__((interrupt)) void interruptHandler() { hw->intreq=(1<intreq=(1<color[0] = ((UWORD*)colors)[frameCounter & 63]; } free_chip(mem); // END FreeSystem(); CloseLibrary((struct Library*)DOSBase); CloseLibrary((struct Library*)GfxBase); } ================================================ FILE: src/debug/mapfile_shoot_pet_func.txt ================================================ Modules list: ------------- display_macros.o: CODE Offs=000000 Size=00006B Align=00001 Fill=0000 input_macros.o: CODE Offs=00006B Size=000011 Align=00001 Fill=0000 sleep_macros.o: CODE Offs=00007C Size=000028 Align=00001 Fill=0000 BSS Offs=000000 Size=000002 Align=00001 Fill=0000 main.o: CODE Offs=0000A4 Size=0035D0 Align=00001 Fill=0000 RODATA Offs=000000 Size=000178 Align=00001 Fill=0000 BSS Offs=000002 Size=0001D7 Align=00001 Fill=0000 pet_sounds.o: CODE Offs=003674 Size=00008C Align=00001 Fill=0000 BSS Offs=0001D9 Size=000004 Align=00001 Fill=0000 C:\cc65-snapshot-win32\lib/pet.lib(_hextab.o): RODATA Offs=000178 Size=000010 Align=00001 Fill=0000 C:\cc65-snapshot-win32\lib/pet.lib(_longminstr.o): RODATA Offs=000188 Size=00000C Align=00001 Fill=0000 C:\cc65-snapshot-win32\lib/pet.lib(_printf.o): CODE Offs=003700 Size=0003A4 Align=00001 Fill=0000 BSS Offs=0001DD Size=00002B Align=00001 Fill=0000 DATA Offs=000000 Size=000003 Align=00001 Fill=0000 C:\cc65-snapshot-win32\lib/pet.lib(add.o): CODE Offs=003AA4 Size=00001C Align=00001 Fill=0000 C:\cc65-snapshot-win32\lib/pet.lib(addysp.o): CODE Offs=003AC0 Size=00000E Align=00001 Fill=0000 C:\cc65-snapshot-win32\lib/pet.lib(aslax1.o): CODE Offs=003ACE Size=000008 Align=00001 Fill=0000 C:\cc65-snapshot-win32\lib/pet.lib(aslax2.o): CODE Offs=003AD6 Size=00000B Align=00001 Fill=0000 C:\cc65-snapshot-win32\lib/pet.lib(aslax4.o): CODE Offs=003AE1 Size=000011 Align=00001 Fill=0000 C:\cc65-snapshot-win32\lib/pet.lib(axlong.o): CODE Offs=003AF2 Size=00000D Align=00001 Fill=0000 C:\cc65-snapshot-win32\lib/pet.lib(call.o): CODE Offs=003AFF Size=000007 Align=00001 Fill=0000 C:\cc65-snapshot-win32\lib/pet.lib(callmain.o): CODE Offs=003B06 Size=000017 Align=00001 Fill=0000 DATA Offs=000003 Size=000004 Align=00001 Fill=0000 C:\cc65-snapshot-win32\lib/pet.lib(checkst.o): CODE Offs=003B1D Size=00000A Align=00001 Fill=0000 C:\cc65-snapshot-win32\lib/pet.lib(clock.o): CODE Offs=003B27 Size=00000A Align=00001 Fill=0000 C:\cc65-snapshot-win32\lib/pet.lib(clrscr.o): CODE Offs=003B31 Size=00002A Align=00001 Fill=0000 C:\cc65-snapshot-win32\lib/pet.lib(condes.o): CODE Offs=003B5B Size=00000C Align=00001 Fill=0000 DATA Offs=000007 Size=000025 Align=00001 Fill=0000 ONCE Offs=000000 Size=00000C Align=00001 Fill=0000 C:\cc65-snapshot-win32\lib/pet.lib(conio.o): C:\cc65-snapshot-win32\lib/pet.lib(cprintf.o): CODE Offs=003B67 Size=00002A Align=00001 Fill=0000 BSS Offs=000208 Size=000001 Align=00001 Fill=0000 C:\cc65-snapshot-win32\lib/pet.lib(cputc.o): CODE Offs=003B91 Size=00006F Align=00001 Fill=0000 RODATA Offs=000194 Size=000032 Align=00001 Fill=0000 C:\cc65-snapshot-win32\lib/pet.lib(crt0.o): BSS Offs=000209 Size=000002 Align=00001 Fill=0000 STARTUP Offs=000000 Size=000040 Align=00001 Fill=0000 INIT Offs=000000 Size=00001A Align=00001 Fill=0000 C:\cc65-snapshot-win32\lib/pet.lib(ctype.o): RODATA Offs=0001C6 Size=00008B Align=00001 Fill=0000 C:\cc65-snapshot-win32\lib/pet.lib(ctypemask.o): CODE Offs=003C00 Size=00001E Align=00001 Fill=0000 C:\cc65-snapshot-win32\lib/pet.lib(decax1.o): CODE Offs=003C1E Size=000007 Align=00001 Fill=0000 C:\cc65-snapshot-win32\lib/pet.lib(decax3.o): CODE Offs=003C25 Size=000007 Align=00001 Fill=0000 C:\cc65-snapshot-win32\lib/pet.lib(decsp4.o): CODE Offs=003C2C Size=00000D Align=00001 Fill=0000 C:\cc65-snapshot-win32\lib/pet.lib(decsp6.o): CODE Offs=003C39 Size=00000D Align=00001 Fill=0000 C:\cc65-snapshot-win32\lib/pet.lib(div.o): CODE Offs=003C46 Size=000015 Align=00001 Fill=0000 C:\cc65-snapshot-win32\lib/pet.lib(exehdr.o): EXEHDR Offs=000000 Size=00000C Align=00001 Fill=0000 C:\cc65-snapshot-win32\lib/pet.lib(gotoxy.o): CODE Offs=003C5B Size=00000D Align=00001 Fill=0000 C:\cc65-snapshot-win32\lib/pet.lib(icmp.o): CODE Offs=003C68 Size=00002E Align=00001 Fill=0000 C:\cc65-snapshot-win32\lib/pet.lib(incax1.o): CODE Offs=003C96 Size=000007 Align=00001 Fill=0000 C:\cc65-snapshot-win32\lib/pet.lib(incax2.o): CODE Offs=003C9D Size=000007 Align=00001 Fill=0000 C:\cc65-snapshot-win32\lib/pet.lib(incaxy.o): CODE Offs=003CA4 Size=00000B Align=00001 Fill=0000 C:\cc65-snapshot-win32\lib/pet.lib(incsp1.o): CODE Offs=003CAF Size=000007 Align=00001 Fill=0000 C:\cc65-snapshot-win32\lib/pet.lib(incsp2.o): CODE Offs=003CB6 Size=000016 Align=00001 Fill=0000 C:\cc65-snapshot-win32\lib/pet.lib(incsp3.o): CODE Offs=003CCC Size=000005 Align=00001 Fill=0000 C:\cc65-snapshot-win32\lib/pet.lib(incsp4.o): CODE Offs=003CD1 Size=000005 Align=00001 Fill=0000 C:\cc65-snapshot-win32\lib/pet.lib(incsp5.o): CODE Offs=003CD6 Size=000005 Align=00001 Fill=0000 C:\cc65-snapshot-win32\lib/pet.lib(incsp6.o): CODE Offs=003CDB Size=000005 Align=00001 Fill=0000 C:\cc65-snapshot-win32\lib/pet.lib(incsp7.o): CODE Offs=003CE0 Size=000005 Align=00001 Fill=0000 C:\cc65-snapshot-win32\lib/pet.lib(joy-kernel.o): CODE Offs=003CE5 Size=00004D Align=00001 Fill=0000 RODATA Offs=000251 Size=000004 Align=00001 Fill=0000 BSS Offs=00020B Size=000002 Align=00001 Fill=0000 DATA Offs=00002C Size=00000C Align=00001 Fill=0000 C:\cc65-snapshot-win32\lib/pet.lib(joy_read.o): C:\cc65-snapshot-win32\lib/pet.lib(joy_stat_stddrv.o): C:\cc65-snapshot-win32\lib/pet.lib(kbsout.o): CODE Offs=003D32 Size=000006 Align=00001 Fill=0000 C:\cc65-snapshot-win32\lib/pet.lib(krdtim.o): CODE Offs=003D38 Size=000009 Align=00001 Fill=0000 C:\cc65-snapshot-win32\lib/pet.lib(ladd.o): CODE Offs=003D41 Size=000025 Align=00001 Fill=0000 C:\cc65-snapshot-win32\lib/pet.lib(lcmp.o): CODE Offs=003D66 Size=00003B Align=00001 Fill=0000 C:\cc65-snapshot-win32\lib/pet.lib(ldaxi.o): CODE Offs=003DA1 Size=00000D Align=00001 Fill=0000 C:\cc65-snapshot-win32\lib/pet.lib(ldaxsp.o): CODE Offs=003DAE Size=000009 Align=00001 Fill=0000 C:\cc65-snapshot-win32\lib/pet.lib(ldeaxysp.o): CODE Offs=003DB7 Size=000013 Align=00001 Fill=0000 C:\cc65-snapshot-win32\lib/pet.lib(lge.o): CODE Offs=003DCA Size=000006 Align=00001 Fill=0000 C:\cc65-snapshot-win32\lib/pet.lib(libref.o): C:\cc65-snapshot-win32\lib/pet.lib(lmul.o): CODE Offs=003DD0 Size=00005C Align=00001 Fill=0000 C:\cc65-snapshot-win32\lib/pet.lib(lneg.o): CODE Offs=003E2C Size=00001E Align=00001 Fill=0000 C:\cc65-snapshot-win32\lib/pet.lib(loadaddr.o): LOADADDR Offs=000000 Size=000002 Align=00001 Fill=0000 C:\cc65-snapshot-win32\lib/pet.lib(lpush.o): CODE Offs=003E4A Size=000021 Align=00001 Fill=0000 C:\cc65-snapshot-win32\lib/pet.lib(lsub.o): CODE Offs=003E6B Size=000027 Align=00001 Fill=0000 C:\cc65-snapshot-win32\lib/pet.lib(ltoa.o): CODE Offs=003E92 Size=000095 Align=00001 Fill=0000 C:\cc65-snapshot-win32\lib/pet.lib(makebool.o): CODE Offs=003F27 Size=00002C Align=00001 Fill=0000 C:\cc65-snapshot-win32\lib/pet.lib(mod.o): CODE Offs=003F53 Size=000011 Align=00001 Fill=0000 C:\cc65-snapshot-win32\lib/pet.lib(mul.o): CODE Offs=003F64 Size=000045 Align=00001 Fill=0000 C:\cc65-snapshot-win32\lib/pet.lib(mul8.o): CODE Offs=003FA9 Size=00003A Align=00001 Fill=0000 C:\cc65-snapshot-win32\lib/pet.lib(mulax5.o): CODE Offs=003FE3 Size=000014 Align=00001 Fill=0000 C:\cc65-snapshot-win32\lib/pet.lib(mulax9.o): CODE Offs=003FF7 Size=000017 Align=00001 Fill=0000 C:\cc65-snapshot-win32\lib/pet.lib(negabs.o): CODE Offs=00400E Size=000012 Align=00001 Fill=0000 C:\cc65-snapshot-win32\lib/pet.lib(popa.o): CODE Offs=004020 Size=00000C Align=00001 Fill=0000 C:\cc65-snapshot-win32\lib/pet.lib(popptr1.o): CODE Offs=00402C Size=00000E Align=00001 Fill=0000 C:\cc65-snapshot-win32\lib/pet.lib(push1.o): CODE Offs=00403A Size=000005 Align=00001 Fill=0000 C:\cc65-snapshot-win32\lib/pet.lib(pusha.o): CODE Offs=00403F Size=000016 Align=00001 Fill=0000 C:\cc65-snapshot-win32\lib/pet.lib(pushax.o): CODE Offs=004055 Size=00001A Align=00001 Fill=0000 C:\cc65-snapshot-win32\lib/pet.lib(pushwsp.o): CODE Offs=00406F Size=00001C Align=00001 Fill=0000 C:\cc65-snapshot-win32\lib/pet.lib(rand.o): CODE Offs=00408B Size=000034 Align=00001 Fill=0000 DATA Offs=000038 Size=000004 Align=00001 Fill=0000 C:\cc65-snapshot-win32\lib/pet.lib(regswap2.o): CODE Offs=0040BF Size=000016 Align=00001 Fill=0000 C:\cc65-snapshot-win32\lib/pet.lib(shelp.o): CODE Offs=0040D5 Size=000020 Align=00001 Fill=0000 C:\cc65-snapshot-win32\lib/pet.lib(shrax1.o): CODE Offs=0040F5 Size=000008 Align=00001 Fill=0000 C:\cc65-snapshot-win32\lib/pet.lib(shrax2.o): CODE Offs=0040FD Size=00000B Align=00001 Fill=0000 C:\cc65-snapshot-win32\lib/pet.lib(shrax3.o): CODE Offs=004108 Size=00000E Align=00001 Fill=0000 C:\cc65-snapshot-win32\lib/pet.lib(shrax4.o): CODE Offs=004116 Size=000011 Align=00001 Fill=0000 C:\cc65-snapshot-win32\lib/pet.lib(sleep.o): CODE Offs=004127 Size=000043 Align=00001 Fill=0000 C:\cc65-snapshot-win32\lib/pet.lib(staspidx.o): CODE Offs=00416A Size=000016 Align=00001 Fill=0000 C:\cc65-snapshot-win32\lib/pet.lib(status.o): C:\cc65-snapshot-win32\lib/pet.lib(strlen.o): CODE Offs=004180 Size=000016 Align=00001 Fill=0000 C:\cc65-snapshot-win32\lib/pet.lib(strlower.o): CODE Offs=004196 Size=000027 Align=00001 Fill=0000 C:\cc65-snapshot-win32\lib/pet.lib(sub.o): CODE Offs=0041BD Size=000015 Align=00001 Fill=0000 C:\cc65-snapshot-win32\lib/pet.lib(udiv.o): CODE Offs=0041D2 Size=00004F Align=00001 Fill=0000 C:\cc65-snapshot-win32\lib/pet.lib(vcprintf.o): CODE Offs=004221 Size=000078 Align=00001 Fill=0000 DATA Offs=00003C Size=000008 Align=00001 Fill=0000 C:\cc65-snapshot-win32\lib/pet.lib(zerobss.o): CODE Offs=004299 Size=000023 Align=00001 Fill=0000 C:\cc65-snapshot-win32\lib/pet.lib(zeropage.o): ZEROPAGE Offs=000000 Size=00001A Align=00001 Fill=0000 C:\cc65-snapshot-win32\lib/pet.lib(pet-stdjoy-joy.o): CODE Offs=0042BC Size=00003F Align=00001 Fill=0000 DATA Offs=000044 Size=00000E Align=00001 Fill=0000 Segment list: ------------- Name Start End Size Align ---------------------------------------------------- ZEROPAGE 000055 00006E 00001A 00001 LOADADDR 0003FF 000400 000002 00001 EXEHDR 000401 00040C 00000C 00001 STARTUP 00040D 00044C 000040 00001 ONCE 00044D 000458 00000C 00001 CODE 000459 004753 0042FB 00001 RODATA 004754 0049A8 000255 00001 DATA 0049A9 0049FA 000052 00001 INIT 0049FB 004A14 00001A 00001 BSS 004A15 004C21 00020D 00001 Exports list by name: --------------------- BSOUT 00418B RLA CURS_X 0000C6 RLZ CURS_Y 0000D8 RLZ RDTIM 004191 RLA ST 000096 RLZ __BSS_RUN__ 004A15 RLA __BSS_SIZE__ 00020D REA __CONSTRUCTOR_COUNT__ 000000 REA __CONSTRUCTOR_TABLE__ 000459 RLA __DESTRUCTOR_COUNT__ 000000 REA __DESTRUCTOR_TABLE__ 0049A9 RLA __EXEHDR__ 000001 REA __LOADADDR__ 000001 REA __STACKSIZE__ 000800 REA __STARTUP__ 000001 REA __XL_CHAR 0004A9 RLA __XL_PRINT 00048D RLA __XL_SLOW_DOWN 0004D5 RLA __XL_WAIT_FOR_INPUT 0004C4 RLA __XL_ZAP_SOUND 003B38 RLA __conio_delete 000474 RLA __conio_draw 000459 RLA __ctype 00491A RLA __ctypeidx 004925 RLA __hextab 0048CC RLA __longminstr 0048DC RLA __printf 003C4C RLA _beep 003ACD RLA _clock 003F80 RLA _clrscr 003F8A RLA _cprintf 003FC0 RLA _cputc 003FEF RLA _exit 000437 RLA _gotoxy 0040B7 RLA _joy_install 00413E RLA _joy_read 0049DE REA _joy_static_stddrv 0049ED RLA _ltoa 004303 RLA _main 0033F3 RLA _noise 003AF9 RLA _pet_stdjoy_joy 0049ED RLA _rand 0044F0 RLA _sleep 004580 RLA _strlen 0045D9 RLA _strlower 0045EF RLA _ultoa 004344 RLA _vcprintf 0046C2 RLA addysp 003F1A RLA addysp1 003F19 RLA aslax4 003F3A RLA axlong 003F4B RLA axulong 003F51 RLA boolge 004397 RLA boolugt 0043A5 RLA boolult 00439F RLA callax 003F58 RLA callmain 003F5F RLA checkst 003F76 RLA ctypemaskdirect 00405D RLA decax1 004077 RLA decax3 00407E RLA decsp4 004085 RLA decsp6 004092 RLA donelib 003FB4 RLA gotoxy 0040B4 RLA incax1 0040EF RLA incax2 0040F6 RLA incaxy 0040FF RLA incsp1 004108 RLA incsp2 004117 RLA incsp3 004125 RLA incsp4 00412A RLA incsp5 00412F RLA incsp6 004134 RLA incsp7 004139 RLA initlib 00044D RLA joy_libref 000437 RLA joy_read 0049DE RLA ldax0sp 004207 RLA ldaxidx 0041FC RLA ldaxysp 004209 RLA ldeax0sp 004210 RLA mul8x16 004404 RLA mul8x16a 00440E RLA mulax5 00443C RLA mulax9 004450 RLA negax 00446B RLA negeax 004285 RLA plot 00403A RLA popa 004479 RLA popax 00410F RLA popptr1 004485 RLA popsargsudiv16 00452E RLA ptr1 00005D RLZ ptr2 00005F RLZ ptr3 000061 RLZ ptr4 000063 RLZ push1 004493 RLA pusha 00449C RLA pusha0 0044B0 RLA pushax 0044B2 RLA pusheax 0042AC RLA pushw0sp 0044C8 RLA pushwysp 0044CA RLA regbank 000069 RLZ regswap2 004518 RLA shlax1 003F27 RLA shlax2 003F2F RLA shlax4 003F3A RLA shrax1 00454E RLA shrax2 004556 RLA shrax3 004561 RLA shrax4 00456F RLA sp 000055 RLZ sreg 000057 RLZ staspidx 0045C3 RLA tmp1 000065 RLZ tmp2 000066 RLZ tmp3 000067 RLZ tmp4 000068 RLZ tosadda0 003EFD RLA tosaddax 003EFF RLA tosaddeax 0041A0 RLA tosdivax 0040A1 RLA tosgeeax 004223 RLA tosicmp 0040C3 RLA toslcmp 0041BF RLA tosmoda0 0043AC RLA tosmulax 0043BD RLA tossuba0 004616 RLA tossubax 004618 RLA tossubeax 0042CA RLA tosudivax 00462D RLA tosumul0ax 004229 RLA tosumula0 004402 RLA udiv16 00463C RLA zerobss 0046F2 RLA Exports list by value: ---------------------- __CONSTRUCTOR_COUNT__ 000000 REA __DESTRUCTOR_COUNT__ 000000 REA __EXEHDR__ 000001 REA __STARTUP__ 000001 REA __LOADADDR__ 000001 REA sp 000055 RLZ sreg 000057 RLZ ptr1 00005D RLZ ptr2 00005F RLZ ptr3 000061 RLZ ptr4 000063 RLZ tmp1 000065 RLZ tmp2 000066 RLZ tmp3 000067 RLZ tmp4 000068 RLZ regbank 000069 RLZ ST 000096 RLZ CURS_X 0000C6 RLZ CURS_Y 0000D8 RLZ __BSS_SIZE__ 00020D REA _exit 000437 RLA joy_libref 000437 RLA initlib 00044D RLA __conio_draw 000459 RLA __CONSTRUCTOR_TABLE__ 000459 RLA __conio_delete 000474 RLA __XL_PRINT 00048D RLA __XL_CHAR 0004A9 RLA __XL_WAIT_FOR_INPUT 0004C4 RLA __XL_SLOW_DOWN 0004D5 RLA __STACKSIZE__ 000800 REA _main 0033F3 RLA _beep 003ACD RLA _noise 003AF9 RLA __XL_ZAP_SOUND 003B38 RLA __printf 003C4C RLA tosadda0 003EFD RLA tosaddax 003EFF RLA addysp1 003F19 RLA addysp 003F1A RLA shlax1 003F27 RLA shlax2 003F2F RLA shlax4 003F3A RLA aslax4 003F3A RLA axlong 003F4B RLA axulong 003F51 RLA callax 003F58 RLA callmain 003F5F RLA checkst 003F76 RLA _clock 003F80 RLA _clrscr 003F8A RLA donelib 003FB4 RLA _cprintf 003FC0 RLA _cputc 003FEF RLA plot 00403A RLA ctypemaskdirect 00405D RLA decax1 004077 RLA decax3 00407E RLA decsp4 004085 RLA decsp6 004092 RLA tosdivax 0040A1 RLA gotoxy 0040B4 RLA _gotoxy 0040B7 RLA tosicmp 0040C3 RLA incax1 0040EF RLA incax2 0040F6 RLA incaxy 0040FF RLA incsp1 004108 RLA popax 00410F RLA incsp2 004117 RLA incsp3 004125 RLA incsp4 00412A RLA incsp5 00412F RLA incsp6 004134 RLA incsp7 004139 RLA _joy_install 00413E RLA BSOUT 00418B RLA RDTIM 004191 RLA tosaddeax 0041A0 RLA toslcmp 0041BF RLA ldaxidx 0041FC RLA ldax0sp 004207 RLA ldaxysp 004209 RLA ldeax0sp 004210 RLA tosgeeax 004223 RLA tosumul0ax 004229 RLA negeax 004285 RLA pusheax 0042AC RLA tossubeax 0042CA RLA _ltoa 004303 RLA _ultoa 004344 RLA boolge 004397 RLA boolult 00439F RLA boolugt 0043A5 RLA tosmoda0 0043AC RLA tosmulax 0043BD RLA tosumula0 004402 RLA mul8x16 004404 RLA mul8x16a 00440E RLA mulax5 00443C RLA mulax9 004450 RLA negax 00446B RLA popa 004479 RLA popptr1 004485 RLA push1 004493 RLA pusha 00449C RLA pusha0 0044B0 RLA pushax 0044B2 RLA pushw0sp 0044C8 RLA pushwysp 0044CA RLA _rand 0044F0 RLA regswap2 004518 RLA popsargsudiv16 00452E RLA shrax1 00454E RLA shrax2 004556 RLA shrax3 004561 RLA shrax4 00456F RLA _sleep 004580 RLA staspidx 0045C3 RLA _strlen 0045D9 RLA _strlower 0045EF RLA tossuba0 004616 RLA tossubax 004618 RLA tosudivax 00462D RLA udiv16 00463C RLA _vcprintf 0046C2 RLA zerobss 0046F2 RLA __hextab 0048CC RLA __longminstr 0048DC RLA __ctype 00491A RLA __ctypeidx 004925 RLA __DESTRUCTOR_TABLE__ 0049A9 RLA _joy_read 0049DE REA joy_read 0049DE RLA _pet_stdjoy_joy 0049ED RLA _joy_static_stddrv 0049ED RLA __BSS_RUN__ 004A15 RLA Imports list: ------------- BSOUT (kbsout.o): crt0.o pet/crt0.s:10 CURS_X (conio.o): gotoxy.o cbm/gotoxy.s:9 CURS_Y (conio.o): gotoxy.o cbm/gotoxy.s:9 RDTIM (krdtim.o): clock.o cbm/cbm.inc:40 ST (status.o): checkst.o pet/checkst.s:9 crt0.o pet/crt0.s:11 __BSS_RUN__ ([linker generated]): zerobss.o common/zerobss.s:8 __BSS_SIZE__ ([linker generated]): zerobss.o common/zerobss.s:8 __CONSTRUCTOR_COUNT__ ([linker generated]): condes.o runtime/condes.s:18 __CONSTRUCTOR_TABLE__ ([linker generated]): condes.o runtime/condes.s:18 __DESTRUCTOR_COUNT__ ([linker generated]): condes.o runtime/condes.s:19 __DESTRUCTOR_TABLE__ ([linker generated]): condes.o runtime/condes.s:19 __EXEHDR__ (exehdr.o): [linker generated] C:\cc65-snapshot-win32\cfg/pet.cfg:3 __LOADADDR__ (loadaddr.o): [linker generated] C:\cc65-snapshot-win32\cfg/pet.cfg:2 __STACKSIZE__ ([linker generated]): [linker generated] C:\cc65-snapshot-win32\cfg/pet.cfg:10 __STARTUP__ (crt0.o): main.o games/shoot/main.s:13 __XL_CHAR (display_macros.o): main.o games/shoot/main.s:31 __XL_PRINT (display_macros.o): main.o games/shoot/main.s:30 __XL_SLOW_DOWN (sleep_macros.o): main.o games/shoot/main.s:24 __XL_WAIT_FOR_INPUT (input_macros.o): main.o games/shoot/main.s:19 __XL_ZAP_SOUND (pet_sounds.o): main.o games/shoot/main.s:22 __conio_delete (display_macros.o): main.o games/shoot/main.s:26 __conio_draw (display_macros.o): main.o games/shoot/main.s:25 __ctype (ctype.o): ctypemask.o common/ctypemask.s:23 __ctypeidx (ctype.o): ctypemask.o common/ctypemask.s:24 __hextab (_hextab.o): ltoa.o common/ltoa.s:10 __longminstr (_longminstr.o): ltoa.o common/ltoa.s:10 __printf (_printf.o): vcprintf.o conio/vcprintf.s:9 _beep (pet_sounds.o): main.o games/shoot/main.s:20 _clock (clock.o): sleep.o ../libwrk/pet/sleep.s:13 _clrscr (clrscr.o): main.o games/shoot/main.s:27 _cprintf (cprintf.o): main.o games/shoot/main.s:29 display_macros.o cross_lib/display/display_macros.s:17 _cputc (cputc.o): vcprintf.o conio/vcprintf.s:9 display_macros.o cross_lib/display/display_macros.s:16 _exit (crt0.o): libref.o pet/libref.s:6 _gotoxy (gotoxy.o): main.o games/shoot/main.s:28 display_macros.o cross_lib/display/display_macros.s:15 _joy_install (joy-kernel.o): main.o games/shoot/main.s:17 _joy_read (joy_read.o): main.o games/shoot/main.s:18 input_macros.o cross_lib/input/input_macros.s:13 _joy_static_stddrv (joy_stat_stddrv.o): main.o games/shoot/main.s:16 _ltoa (ltoa.o): _printf.o common/_printf.s:12 _main (main.o): callmain.o runtime/callmain.s:11 _noise (pet_sounds.o): main.o games/shoot/main.s:21 _pet_stdjoy_joy (pet-stdjoy-joy.o): joy_stat_stddrv.o pet/joy_stat_stddrv.s:10 _rand (rand.o): pet_sounds.o cross_lib/sound/cc65/pet/pet_sounds.s:13 main.o games/shoot/main.s:14 _sleep (sleep.o): main.o games/shoot/main.s:23 _strlen (strlen.o): _printf.o common/_printf.s:13 main.o games/shoot/main.s:15 _strlower (strlower.o): _printf.o common/_printf.s:13 _ultoa (ltoa.o): _printf.o common/_printf.s:12 _vcprintf (vcprintf.o): cprintf.o conio/cprintf.s:8 addysp (addysp.o): incsp7.o runtime/incsp7.s:8 incsp6.o runtime/incsp6.s:8 incsp5.o runtime/incsp5.s:8 incsp4.o runtime/incsp4.s:8 incsp3.o runtime/incsp3.s:8 cprintf.o conio/cprintf.s:8 addysp1 (addysp.o): lsub.o runtime/lsub.s:11 lmul.o runtime/lmul.s:9 ladd.o runtime/ladd.s:8 sub.o runtime/sub.s:8 aslax4 (aslax4.o): main.o games/shoot/main.s:8704 axlong (axlong.o): _printf.o common/_printf.s:11 axulong (axlong.o): _printf.o common/_printf.s:11 sleep.o ../libwrk/pet/sleep.s:54 boolge (makebool.o): lge.o runtime/lge.s:8 boolugt (makebool.o): main.o games/shoot/main.s:8704 boolult (makebool.o): main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 callax (call.o): main.o games/shoot/main.s:8704 callmain (callmain.o): crt0.o pet/crt0.s:9 checkst (checkst.o): kbsout.o pet/kbsout.s:10 ctypemaskdirect (ctypemask.o): strlower.o common/strlower.s:14 decax1 (decax1.o): main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 decax3 (decax3.o): main.o games/shoot/main.s:8704 decsp4 (decsp4.o): lpush.o runtime/lpush.s:12 decsp6 (decsp6.o): _printf.o common/_printf.s:11 donelib (condes.o): crt0.o pet/crt0.s:7 gotoxy (gotoxy.o): cputc.o pet/cputc.s:10 incax1 (incax1.o): main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 incax2 (incax2.o): main.o games/shoot/main.s:8704 incaxy (incaxy.o): main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 incsp1 (incsp1.o): pet_sounds.o cross_lib/sound/cc65/pet/pet_sounds.s:127 pet_sounds.o cross_lib/sound/cc65/pet/pet_sounds.s:127 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 incsp2 (incsp2.o): staspidx.o runtime/staspidx.s:8 popptr1.o runtime/popptr1.s:8 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 sleep_macros.o cross_lib/sleep/sleep_macros.s:48 display_macros.o cross_lib/display/display_macros.s:115 incsp3 (incsp3.o): main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 display_macros.o cross_lib/display/display_macros.s:115 display_macros.o cross_lib/display/display_macros.s:115 incsp4 (incsp4.o): lcmp.o runtime/lcmp.s:9 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 display_macros.o cross_lib/display/display_macros.s:115 incsp5 (incsp5.o): main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 incsp6 (incsp6.o): sleep.o ../libwrk/pet/sleep.s:54 main.o games/shoot/main.s:8704 incsp7 (incsp7.o): main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 initlib (condes.o): crt0.o pet/crt0.s:7 joy_libref (libref.o): joy-kernel.o joystick/joy-kernel.s:7 joy_read (joy-kernel.o): joy_read.o /home/runner/work/cc65/cc65/asminc/joy-kernel.inc:71 ldax0sp (ldaxsp.o): main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 ldaxidx (ldaxi.o): main.o games/shoot/main.s:8704 ldaxysp (ldaxsp.o): sleep.o ../libwrk/pet/sleep.s:54 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 ldeax0sp (ldeaxysp.o): sleep.o ../libwrk/pet/sleep.s:54 mul8x16 (mul8.o): mul.o runtime/mul.s:8 mul8x16a (mul8.o): mul.o runtime/mul.s:8 mulax5 (mulax5.o): main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 mulax9 (mulax9.o): main.o games/shoot/main.s:8704 negax (negabs.o): shelp.o runtime/shelp.s:11 mod.o runtime/mod.s:11 div.o runtime/div.s:11 negeax (lneg.o): ltoa.o common/ltoa.s:9 plot (cputc.o): gotoxy.o cbm/gotoxy.s:8 clrscr.o pet/clrscr.s:8 popa (popa.o): gotoxy.o cbm/gotoxy.s:8 popax (incsp2.o): ltoa.o common/ltoa.s:9 _printf.o common/_printf.s:11 vcprintf.o conio/vcprintf.s:8 shelp.o runtime/shelp.s:11 popptr1 (popptr1.o): ltoa.o common/ltoa.s:9 vcprintf.o conio/vcprintf.s:8 udiv.o runtime/udiv.s:9 mul8.o runtime/mul8.s:9 mul.o runtime/mul.s:9 popsargsudiv16 (shelp.o): mod.o runtime/mod.s:11 div.o runtime/div.s:11 ptr1 (zeropage.o): lcmp.o runtime/lcmp.s:10 strlower.o common/strlower.s:13 ltoa.o common/ltoa.s:11 lmul.o runtime/lmul.s:10 _printf.o /home/runner/work/cc65/cc65/asminc/zeropage.inc:12 zerobss.o common/zerobss.s:9 vcprintf.o conio/vcprintf.s:10 udiv.o runtime/udiv.s:10 staspidx.o runtime/staspidx.s:9 shelp.o runtime/shelp.s:12 popptr1.o runtime/popptr1.s:9 mulax9.o runtime/mulax9.s:10 mulax5.o runtime/mulax5.s:9 mul8.o runtime/mul8.s:10 mul.o runtime/mul.s:10 ldaxi.o runtime/ldaxi.s:8 joy-kernel.o joystick/joy-kernel.s:8 div.o runtime/div.s:12 cprintf.o conio/cprintf.s:9 clrscr.o pet/clrscr.s:9 call.o runtime/call.s:8 main.o games/shoot/main.s:11 ptr2 (zeropage.o): strlower.o common/strlower.s:13 ltoa.o common/ltoa.s:11 _printf.o /home/runner/work/cc65/cc65/asminc/zeropage.inc:12 vcprintf.o conio/vcprintf.s:10 strlen.o common/strlen.s:12 ptr3 (zeropage.o): ltoa.o common/ltoa.s:11 lmul.o runtime/lmul.s:10 vcprintf.o conio/vcprintf.s:10 ptr4 (zeropage.o): lmul.o runtime/lmul.s:10 udiv.o runtime/udiv.s:10 shelp.o runtime/shelp.s:12 mul8.o runtime/mul8.s:10 mul.o runtime/mul.s:10 push1 (push1.o): _printf.o common/_printf.s:11 pusha (pusha.o): pet_sounds.o cross_lib/sound/cc65/pet/pet_sounds.s:127 pet_sounds.o cross_lib/sound/cc65/pet/pet_sounds.s:127 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 display_macros.o cross_lib/display/display_macros.s:115 display_macros.o cross_lib/display/display_macros.s:115 display_macros.o cross_lib/display/display_macros.s:115 display_macros.o cross_lib/display/display_macros.s:115 pusha0 (pushax.o): push1.o runtime/push1.s:8 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 pushax (pushax.o): callmain.o runtime/callmain.s:11 _printf.o common/_printf.s:11 vcprintf.o conio/vcprintf.s:8 sleep.o ../libwrk/pet/sleep.s:54 cprintf.o conio/cprintf.s:8 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 sleep_macros.o cross_lib/sleep/sleep_macros.s:48 display_macros.o cross_lib/display/display_macros.s:115 pusheax (lpush.o): _printf.o common/_printf.s:11 sleep.o ../libwrk/pet/sleep.s:54 pushw0sp (pushwsp.o): main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 display_macros.o cross_lib/display/display_macros.s:115 pushwysp (pushwsp.o): main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 regbank (zeropage.o): _printf.o /home/runner/work/cc65/cc65/asminc/zeropage.inc:14 regswap2.o runtime/regswap2.s:8 main.o games/shoot/main.s:10 regswap2 (regswap2.o): main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 shlax1 (aslax1.o): main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 shlax2 (aslax2.o): main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 shlax4 (aslax4.o): main.o games/shoot/main.s:8704 shrax1 (shrax1.o): main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 shrax2 (shrax2.o): main.o games/shoot/main.s:8704 shrax3 (shrax3.o): main.o games/shoot/main.s:8704 shrax4 (shrax4.o): main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 sp (zeropage.o): lcmp.o runtime/lcmp.s:10 decsp4.o runtime/decsp4.s:8 lsub.o runtime/lsub.s:12 lpush.o runtime/lpush.s:13 lmul.o runtime/lmul.s:10 ldeaxysp.o runtime/ldeaxysp.s:12 ladd.o runtime/ladd.s:9 decsp6.o runtime/decsp6.s:8 addysp.o runtime/addysp.s:8 _printf.o /home/runner/work/cc65/cc65/asminc/zeropage.inc:11 vcprintf.o conio/vcprintf.s:10 sub.o runtime/sub.s:9 staspidx.o runtime/staspidx.s:9 regswap2.o runtime/regswap2.s:8 pushwsp.o runtime/pushwsp.s:8 pushax.o runtime/pushax.s:8 pusha.o runtime/pusha.s:8 popptr1.o runtime/popptr1.s:9 popa.o runtime/popa.s:8 ldaxsp.o runtime/ldaxsp.s:8 incsp2.o runtime/incsp2.s:8 incsp1.o runtime/incsp1.s:8 icmp.o runtime/icmp.s:9 crt0.o /home/runner/work/cc65/cc65/asminc/zeropage.inc:11 cprintf.o conio/cprintf.s:9 add.o runtime/add.s:12 pet_sounds.o cross_lib/sound/cc65/pet/pet_sounds.s:10 main.o games/shoot/main.s:10 sleep_macros.o cross_lib/sleep/sleep_macros.s:10 display_macros.o cross_lib/display/display_macros.s:10 sreg (zeropage.o): lneg.o runtime/lneg.s:11 lcmp.o runtime/lcmp.s:10 ltoa.o common/ltoa.s:11 lsub.o runtime/lsub.s:12 lpush.o runtime/lpush.s:13 lmul.o runtime/lmul.s:10 ldeaxysp.o runtime/ldeaxysp.s:12 ladd.o runtime/ladd.s:9 clock.o cbm/clock.s:9 axlong.o runtime/axlong.s:9 _printf.o /home/runner/work/cc65/cc65/asminc/zeropage.inc:11 udiv.o runtime/udiv.s:10 sleep.o ../libwrk/pet/sleep.s:10 mod.o runtime/mod.s:12 icmp.o runtime/icmp.s:9 staspidx (staspidx.o): main.o games/shoot/main.s:8704 tmp1 (zeropage.o): ltoa.o common/ltoa.s:11 ladd.o runtime/ladd.s:9 _printf.o /home/runner/work/cc65/cc65/asminc/zeropage.inc:13 vcprintf.o conio/vcprintf.s:10 staspidx.o runtime/staspidx.s:9 shrax4.o runtime/shrax4.s:8 shrax3.o runtime/shrax3.s:8 shrax2.o runtime/shrax2.s:8 shrax1.o runtime/shrax1.s:8 shelp.o runtime/shelp.s:12 mul.o runtime/mul.s:10 mod.o runtime/mod.s:12 incaxy.o runtime/incaxy.s:8 div.o runtime/div.s:12 aslax4.o runtime/aslax4.s:8 aslax2.o runtime/aslax2.s:8 aslax1.o runtime/aslax1.s:8 add.o runtime/add.s:12 main.o games/shoot/main.s:11 tmp2 (zeropage.o): lmul.o runtime/lmul.s:10 shelp.o runtime/shelp.s:12 div.o runtime/div.s:12 tmp3 (zeropage.o): lmul.o runtime/lmul.s:10 tmp4 (zeropage.o): lmul.o runtime/lmul.s:10 tosadda0 (add.o): main.o games/shoot/main.s:8704 tosaddax (add.o): main.o games/shoot/main.s:8704 tosaddeax (ladd.o): sleep.o ../libwrk/pet/sleep.s:54 tosdivax (div.o): main.o games/shoot/main.s:8704 tosgeeax (lge.o): sleep.o ../libwrk/pet/sleep.s:54 tosicmp (icmp.o): main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 toslcmp (lcmp.o): lge.o runtime/lge.s:8 tosmoda0 (mod.o): main.o games/shoot/main.s:8704 tosmulax (mul.o): main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 tossuba0 (sub.o): main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 tossubax (sub.o): main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 main.o games/shoot/main.s:8704 tossubeax (lsub.o): sleep.o ../libwrk/pet/sleep.s:54 tosudivax (udiv.o): main.o games/shoot/main.s:8704 tosumul0ax (lmul.o): sleep.o ../libwrk/pet/sleep.s:54 tosumula0 (mul8.o): main.o games/shoot/main.s:8704 udiv16 (udiv.o): shelp.o runtime/shelp.s:11 zerobss (zerobss.o): crt0.o pet/crt0.s:8 ================================================ FILE: src/debug/mc10_getk.s ================================================ .export _getk .setcpu 6803 .code _getk: pshx ldx $FFDC jsr ,x pulx tab clra rts ================================================ FILE: src/debug/mc10_test1.c ================================================ #if defined(__MC10__) #define SCREEN 0x4000 #define YSize 16 #define XSize 32 #elif defined(__C64__) #define SCREEN 0x0400 #define YSize 25 #define XSize 40 #elif defined(__VIC20__) #define SCREEN 7680 #define YSize 23 #define XSize 22 #endif #define POKE(addr,val) (*(unsigned char*) (addr) = (val)) #include int main(void) { uint8_t i; uint8_t j; for(i=0;i static const char foo[5] = {'H','E','L','L','O'}; int main(void) { uint8_t i; for(i=0;i<5;++i) { POKE((uint16_t) SCREEN+i,foo[i]); } while(1){}; return 0; } ================================================ FILE: src/debug/mc10_test3.c ================================================ #if defined(__MC10__) #define SCREEN 0x4000 #define YSize 16 #define XSize 32 #elif defined(__C64__) #define SCREEN 0x0400 #define YSize 25 #define XSize 40 #elif defined(__VIC20__) #define SCREEN 7680 #define YSize 23 #define XSize 22 #endif #define POKE(addr,val) (*(unsigned char*) (addr) = (val)) #include #define FOO 10 #define BAR 1 uint8_t bar; int main(void) { bar = BAR; POKE(SCREEN,65); while(1 && (bar < FOO + 1)) { POKE(SCREEN+1,66); } POKE(SCREEN+2,67); while(1){}; return 0; } ================================================ FILE: src/debug/mc10_test4.c ================================================ #if defined(__MC10__) #define SCREEN 0x4000 #define YSize 16 #define XSize 32 #elif defined(__C64__) #define SCREEN 0x0400 #define YSize 25 #define XSize 40 #elif defined(__VIC20__) #define SCREEN 7680 #define YSize 23 #define XSize 22 #endif #define POKE(addr,val) (*(unsigned char*) (addr) = (val)) #define PEEK(addr) (*(unsigned char*) (addr)) #include /* __getc: pshx getc_wait: ldx $FFDC ; poll keyboard jsr ,x beq getc_wait pulx tab rts */ // uint8_t getk(void) // { // __asm__("pshx"); // __asm__("ldx $FFDC"); // __asm__("jsr ,x"); // __asm__("pulx"); // __asm__("tab"); // } #include extern int getk(void); int main(void) { uint8_t c = 0; uint8_t ch; while(1) { POKE(SCREEN,PEEK(49151U)); POKE(SCREEN+1,PEEK(17023U)); POKE(SCREEN+2,PEEK(2)); ch = (uint8_t) getk(); POKE(SCREEN+4,(uint8_t) ch); if(ch) { POKE(SCREEN+32+c++,ch); } } while(1){}; return 0; } ================================================ FILE: src/debug/msx_test.c ================================================ #include int main() { uint8_t i; set_color(15, 1, 1); set_mode(mode_0); for(i=0;i<254;++i) { vpoke(0x0000+i,i); } while(1); return 0; } ================================================ FILE: src/debug/msx_test2.c ================================================ #include #include #include int main(void) { int mode = mode_2; console_ioctl(IOCTL_GENCON_SET_MODE, &mode); gotoxy(2,2); printf("hello world!\n"); textcolor(RED); gotoxy(0,0); printf("a"); gotoxy(31,0); printf("b"); textcolor(BLUE); gotoxy(0,23); printf("c"); gotoxy(31,23); printf("d"); while(1){}; return 0; } ================================================ FILE: src/debug/ncurses_test.c ================================================ /* If compiled with gcc ./debug/ncurses_test.c -lncurses you get the correct behavior, i.e., it detects i and k key presses with auto-repeat. For example this works with gcc targeting the native machine or cygwin. If the code above is cross-compiled with m68k-atari-mint-gcc ./debug/ncurses_test.c -lncurses -D__ATARI_ST__ then no key press is detected (tested on an emulated Atari ST with Hatari). */ #include #define _NCURSES_BACKGROUND_COLOR COLOR_BLACK #define INPUT_LOOPS 10 int main(void) { volatile unsigned char ch; #if defined(__ATARI_ST__) putenv("TERM=st52"); #endif initscr(); noecho(); curs_set(0); start_color(); cbreak(); intrflush(stdscr, TRUE); init_pair(1, COLOR_YELLOW, _NCURSES_BACKGROUND_COLOR); init_pair(2, COLOR_CYAN, _NCURSES_BACKGROUND_COLOR); init_pair(3, COLOR_RED, _NCURSES_BACKGROUND_COLOR); init_pair(4, COLOR_GREEN, _NCURSES_BACKGROUND_COLOR); init_pair(5, COLOR_BLUE, _NCURSES_BACKGROUND_COLOR); init_pair(6, COLOR_WHITE, _NCURSES_BACKGROUND_COLOR); init_pair(7, COLOR_MAGENTA, _NCURSES_BACKGROUND_COLOR); init_pair(8, COLOR_BLACK, _NCURSES_BACKGROUND_COLOR); wbkgd(stdscr, COLOR_PAIR(1)); nodelay(stdscr,TRUE); refresh(); move(0,0); while(1) { ch = getch(); if(ch=='i' || ch=='k') { printw("%c", ch); } refresh(); } return 0; } ``` ================================================ FILE: src/debug/nes_bgcolor.c ================================================ #include int main() { bgcolor(COLOR_WHITE); clrscr(); gotoxy(2,2); cprintf("hello world\n"); while(1){}; return 0; } ================================================ FILE: src/debug/psg_test.c ================================================ #include #include #include #define A_PERIOD_LOW 0 #define A_PERIOD_HI 1 #define B_PERIOD_LOW 2 #define B_PERIOD_HI 3 #define C_PERIOD_LOW 4 #define C_PERIOD_HI 5 #define NOISE 6 #define CONTROL 7 #define A_VOLUME 8 #define B_VOLUME 9 #define C_VOLUME 10 #define ENV_PERIOD_LOW 11 #define ENV_PERIOD_HI 12 #define ENV_WAVE 13 void _ping_sound(uint8_t freq) { uint8_t i; set_psg(A_VOLUME,15); set_psg(A_PERIOD_LOW,255); set_psg(A_PERIOD_HI, 15 - (freq>>4)); set_psg(CONTROL, 0xFF - 0x01); for(i=0;i<220;++i) { } set_psg(A_VOLUME,0); } void _explosion_sound(uint8_t freq) { uint8_t i; uint8_t j; set_psg(NOISE,15); set_psg(A_VOLUME,15); set_psg(A_PERIOD_LOW,0); set_psg(A_PERIOD_HI, 15 - (freq>>4)); set_psg(CONTROL, 0xFF - 0x08); for(i=0;i<13;i++) { set_psg(A_VOLUME,15-i); for(j=0;j<253;++j) { } } set_psg(A_VOLUME,0); } void ZAP_SOUND(void) { uint8_t i; uint8_t j; set_psg(A_VOLUME,15); set_psg(A_PERIOD_LOW,255); set_psg(A_PERIOD_HI, 15); set_psg(CONTROL, 0xFF - 0x01); for(i=0;i<16;i++) { set_psg(A_PERIOD_HI,15-i); for(j=0;j<150;++j){} } set_psg(A_VOLUME,0); } #define PING_SOUND() _ping_sound(0xF0); #define TOCK_SOUND() _ping_sound(0x02); #define TICK_SOUND() _ping_sound(0x60); #define SHOOT_SOUND() _explosion_sound(0xF0); #define EXPLOSION_SOUND() _explosion_sound(0x80); int main() { while(1) { clrscr(); printf("press a key\n"); getchar(); clrscr(); printf("ping sound"); // PING_SOUND(); getchar(); clrscr(); printf("explosion"); // EXPLOSION_SOUND(); getchar(); clrscr(); printf("zzzapp!!\n"); // ZAP_SOUND(); getch(); } ; return 0; } ================================================ FILE: src/debug/psg_test2.c ================================================ #include int main(void) { unsigned char i; unsigned char j; psg_init(); psg_volume(0, 15); // psg_channels(chan0, chanNone); // set first channel to tone generation, reset noise channels for(i=0;i<16;i++) { psg_tone(0, 500-(i*16)); for(j=0;j<150;++j) {} } psg_volume(0, 0); return 0; } ================================================ FILE: src/debug/psg_test3.c ================================================ #include #include void _ping_sound(uint8_t freq) { uint16_t i; psg_volume(0,15); psg_tone(0,freq); for(i=0;i<120;i++) { } psg_volume(0,0); } void _XL_ZAP_SOUND(void) { uint8_t i; uint8_t j; psg_volume(0,15); for(i=0;i<40;i++) { for(j=0;j #include int main(void) { while(1) { printf("%d\n", 1+(rand()&3)); getchar(); } return 0; } ================================================ FILE: src/debug/struct.c ================================================ #include struct Test { int a; int b; }; const struct Test globale = { 21, 42 }; const struct Test const * funzione() { return &globale; } void main(void) { const struct Test const* result = funzione(); printf( "risultato = %d, %d", result->a, result->b ); } ================================================ FILE: src/debug/testBitwiseAnd.c ================================================ #include int main() { unsigned char i; unsigned char j; for(i=0;i<=10;++i) { gotoxy(0,i); cprintf("%d %d", i, i&3); j=i; j&=3; gotoxy(8,i); cprintf("%d", j); } while(1){}; return 0; } ================================================ FILE: src/debug/test_gb.c ================================================ #include int main(void) { unsigned char i; for(i=0;i<20;++i) { gotoxy(19,i); } while(1){}; return EXIT_SUCCESS; } ================================================ FILE: src/debug/test_getk.c ================================================ #include #include int main() { int c; printf("Going\n"); while ( 1 ) { c = getk(); printf("."); if ( c != 0 ) printf("Got key %d ", c); msleep(100); } } ================================================ FILE: src/debug/test_joy.c ================================================ // CPC: zcc +cpc test_joy.c -subtype=dsk -lndos -otestjoy.dsk -create-app #include #include int main(void) { int stick = 1; int input; while(1) { input = joystick(stick); if(input && input==MOVE_FIRE) { printf("FIRE\n"); } } return 0; } ================================================ FILE: src/debug/test_joy2.c ================================================ // CPC: zcc +cpc test_joy2.c -subtype=dsk -lndos -otestjoy2.dsk -create-app #include #include #include #include #include #include #define YSize 20 #include #include #define A_PERIOD_LOW 0 #define A_PERIOD_HI 1 #define B_PERIOD_LOW 2 #define B_PERIOD_HI 3 #define C_PERIOD_LOW 4 #define C_PERIOD_HI 5 #define NOISE 6 #define CONTROL 7 #define A_VOLUME 8 #define B_VOLUME 9 #define C_VOLUME 10 #define ENV_PERIOD_LOW 11 #define ENV_PERIOD_HI 12 #define ENV_WAVE 13 #define POKE(addr,val) (*(uint8_t*) (addr) = (val)) int input; int stick = 1; int time_counter; int fire_pressed = 0; void _XL_ZAP_SOUND(void) { uint8_t i; uint8_t j; set_psg(A_VOLUME,15); set_psg(A_PERIOD_LOW,255); set_psg(A_PERIOD_HI, 15); set_psg(CONTROL, 0xFF - 0x01 - 0x40); // -0x40 is the FIX for(i=0;i<16;i++) { set_psg(A_PERIOD_HI,15-i); for(j=0;j<150U;++j) { } } set_psg(A_VOLUME,0); } uint8_t fire_pressed_after_time(void) { return (!time_counter) && (fire_pressed = (joystick(stick)==MOVE_FIRE)); } void short_sleep(void) { uint16_t i; for(i=0;i<200;++i) { } } int main(void) { input = 0; uint8_t i; time_counter = 5; do { for(i=3;i<(YSize-5)*4;++i) { if(time_counter) { --time_counter; } // Do something here if(fire_pressed_after_time()) { break; } // Do something else here short_sleep(); if(fire_pressed_after_time()) { break; } } if(!fire_pressed) { // Do something } } while(!fire_pressed); printf("OK1"); //asm("di"); _XL_ZAP_SOUND(); //asm("ei"); // ********************************** // _XL_ZAP_SOUND(); // **** BUG HERE *** // ********************************** sleep(1); time_counter = 5; do { for(i=5;i #include int main(void) { short i; for(i=0;i<10;++i) { printf("%d\n", i); sleep(1); } while(1){}; return 0; } ================================================ FILE: src/debug/test_vsync.c ================================================ #include #include #if defined(__VIC20__) #define SET_DEBUG_BORDER() POKE(36879u, 12) #define UNSET_DEBUG_BORDER() POKE(36879u, 8) #elif defined(__C64__) #define SET_DEBUG_BORDER() POKE(53280u, 1) #define UNSET_DEBUG_BORDER() POKE(53280u, 0) #else #define SET_DEBUG_BORDER() #define UNSET_DEBUG_BORDER() #endif int main() { int i; while(1) { waitvsync(); SET_DEBUG_BORDER(); // Waste some time for(i=0;i<100;++i){}; UNSET_DEBUG_BORDER(); } return 0; } ================================================ FILE: src/debug/testc16.c ================================================ #include int main(void) { textcolor(COLOR_PURPLE); gotoxy(0,0); cprintf("HELLO"); return 0; } ================================================ FILE: src/debug/tgi_lynx_black_test.c ================================================ #include #define CLI() asm("\tcli") int main(void) { tgi_install (tgi_static_stddrv); tgi_init (); CLI(); while (tgi_busy()) { }; tgi_setpalette(tgi_getdefpalette()); tgi_setbgcolor(TGI_COLOR_GREY); tgi_setcolor(TGI_COLOR_RED); tgi_outtextxy(8,8,"hello"); tgi_outtextxy(8,8*4,"hello"); tgi_setbgcolor(TGI_COLOR_WHITE); tgi_outtextxy(8,8," "); tgi_setbgcolor(TGI_COLOR_BLACK); tgi_outtextxy(8,8*4," "); while(1){}; return 0; } ================================================ FILE: src/debug/tgi_lynx_cgetc_test.c ================================================ #include #include #define CLI() asm("\tcli") int main(void) { uint16_t i; uint8_t str[2]; str[1] = '\0'; tgi_install (tgi_static_stddrv); tgi_init (); CLI(); tgi_clear(); while (tgi_busy()) { }; tgi_setpalette(tgi_getdefpalette()); tgi_setbgcolor(TGI_COLOR_GREY); tgi_setcolor(TGI_COLOR_RED); tgi_outtextxy(8,8*0,"press a key"); for(i=0;i<30000;++i){} if(kbhit()) { } else { } str[0] = cgetc(); tgi_outtextxy(8,8*1,"step 1"); tgi_outtextxy(8*8,8*1,str); for(i=0;i<30000;++i){} if(kbhit()) { } else { } str[0] = cgetc(); tgi_outtextxy(8,8*2,"step 2"); tgi_outtextxy(8*8,8*2,str); for(i=0;i<30000;++i){} str[0] = cgetc(); tgi_outtextxy(8,8*3,"step 3"); tgi_outtextxy(8*8,8*3,str); for(i=0;i<30000;++i){} tgi_outtextxy(8,8*4,"step 4"); while(1) { if(kbhit()) { str[0] = cgetc(); tgi_outtextxy(8*8,8*4,str); } else { tgi_outtextxy(8*8,8*6,"*"); for(i=0;i<4000;++i){} tgi_outtextxy(8*8,8*6,"+"); tgi_outtextxy(8*8,8*4," "); } } return 0; } ================================================ FILE: src/debug/tgi_lynx_test.c ================================================ #include #define CLI() asm("\tcli") int main(void) { tgi_install (tgi_static_stddrv); tgi_init (); CLI(); tgi_clear(); while (tgi_busy()) { }; tgi_setpalette(tgi_getdefpalette()); tgi_setbgcolor(TGI_COLOR_GREY); tgi_setcolor(TGI_COLOR_RED); tgi_outtextxy(8*6,8,"** ##"); tgi_setcolor(TGI_COLOR_WHITE); tgi_outtextxy(8,8,"** ##"); while(1){}; return 0; } ================================================ FILE: src/debug/ti99.c ================================================ #include #include int main(void) { uint8_t i; uint8_t offset; uint8_t new_arrow_x; uint8_t bow_x; uint8_t number_of_arrows_per_shoot; number_of_arrows_per_shoot = 2; bow_x = 20; new_arrow_x = (bow_x>>1)+(bow_x&1); for(i=0;i=4) { new_arrow_x-=4; } else { // printf("new_arrow_x for %d: %d\n", i, new_arrow_x); continue; } } printf("new_arrow_x for %d: %d\n\n", i, new_arrow_x); } return 0; } ================================================ FILE: src/debug/ti99_test.c ================================================ #include #include #define NUMBER_OF_STRINGS 5 #define MAX_STRING_SIZE 7 const char strings[NUMBER_OF_STRINGS][MAX_STRING_SIZE] = { "M" "i" "n" "e", "E" "n" "e" "r" "g" "y", "B" "o" "n" "u" "s", "P" "o" "i" "n" "t" "s", "A" "p" "p" "l" "e" }; #define LINE_OFFSET 4 #define LINE_SKIP 2 int main(void) { unsigned char i; set_graphics(VDP_SPR_16x16); // set video mode charsetlc(); // load character set with lowercase vdpmemset(gImage, 32, 768); // clear screen VDP_SET_REGISTER(VDP_REG_COL, COLOR_BLACK); // set screen color for(i=0;i #include uint8_t foo; uint8_t bar; // Without this there is no bug int main(void) { uint8_t i; foo = 1U; bar = 3U; // Without this there is no bug for(i=0;i<(int16_t) foo;++i) { printf("foo\n"); } printf("OK"); return 0; } ================================================ FILE: src/debug/wait_for_key.c ================================================ #include #define cgetc() getch() void wait_for_key(void) { while(kbhit()) (void) cgetc(); while(!kbhit()) { }; (void) cgetc(); } int main(void) { clrscr(); while(1) { printf("press a key\n"); wait_for_key(); } return 0; } ================================================ FILE: src/debug/world.c ================================================ /* * Hello World */ #include main() { printf("Hello world! %d\n",12); fgetc_cons(); } ================================================ FILE: src/debug/x07.c ================================================ void send_t6834(char data) __stdc { #asm ; __stdc: params pushed right-to-left, so on stack (low to high): ; SP+0: return address (2 bytes) ; SP+2: data (1 byte, but word-aligned) .wait ; wait for T6834 in a,($f2) ; and $02 ; jr z,wait ; ; nop ei ld a,($026c) ; INTIMAG or $80 ; ld ($026c),a ??? out ($f0),a di ; nop ld hl,$02 ; load byte to write from stack add hl,sp ; ld a,(hl) ; a<-byte to write out ($f1),a ; send a to $F1 ; nop ld a,$02 ; a<-2 out ($f5),a #endasm } // function 0X15 CIRCLE x,y center r radius // this work void x_circle(char x,y,r) { send_t6834(0x15); send_t6834(x); send_t6834(y); send_t6834(r); } // function 0X06 WRITE a char in the T6384 address room // addr where to be wrote // data to write void x_ramwrite(char data,unsigned int addr) { unsigned char low,high; low=addr&0xff; high=(addr>>8)&0xff; // printf("%d %d",high,low); send_t6834(0x06); // RAM WRITE command, send_t6834(high); // Address high byte send_t6834(low); // Address low byte send_t6834(data); // Data byte } int main(void) { int i; for(i=0;i<0x511;++i) { x_ramwrite(i,0xE000+i); }; while(1){}; return 0; } ================================================ FILE: src/examples/animate/Makefile.animate ================================================ FULL_FILES ?= \ $(BASIC_CROSS_LIB_FILES) \ $(CROSS_LIB_PATH)/sleep/sleep_macros.c \ $(SOURCE_PATH)/main.c GAME_NAME := animate PARENT_DIR = examples include ./$(PARENT_DIR)/$(GAME_NAME)/config/project_config.mk include ./Makefile_common include ./makefiles.common/auxiliary/Makefile_default_values ================================================ FILE: src/examples/animate/config/project_config.mk ================================================ ##################################################################### # SLOWDOWN VALUES # Common factor _COMMON_SLOWDOWN_FACTOR=10 # CC65 _APPLE2_SLOWDOWN=30 _APPLE2ENH_SLOWDOWN=30 _APPLE2_HGR_SLOWDOWN=50 _APPLE2ENH_HGR_SLOWDOWN=50 _ATARI_SLOWDOWN=70 _ATARI5200_SLOWDOWN=70 _C16_SLOWDOWN=55 _C64_SLOWDOWN=45 _CREATIVISION_SLOWDOWN=100 _GAMATE_SLOWDOWN=120 _ORIC_SLOWDOWN=40 _NES_SLOWDOWN=80 _PET_SLOWDOWN=40 _PCE_SLOWDOWN=550 _SUPERVISION_SLOWDOWN=140 _VIC20_SLOWDOWN=55 # Z88DK _AQUARIUS_SLOWDOWN=105 _ACE_SLOWDOWN=100 _C128_Z80_40COL_SLOWDOWN=20 _C128_Z80_80COL_SLOWDOWN=1 _CPC_MODE0_SLOWDOWN=100 _CPC_CPCRSLIB_MODE1_SLOWDOWN=90 _CPC_MODE2_SLOWDOWN=90 _CPM_Z80_SLOWDOWN=90 _CPM_INTEL8080_SLOWDOWN=80 _COLECO_SLOWDOWN=100 _GB_SLOWDOWN=280 _GG_SLOWDOWN=300 _GB_WAIT_VSYNC_SLOWDOWN=150 _LASER500_SLOWDOWN=200 _MC1000_SLOWDOWN=75 _MSX_SLOWDOWN=200 _MSX_FIXED_COLORS_SLOWDOWN=300 _MTX500_SLOWDOWN=200 _MTX512_SLOWDOWN=200 _MZ_SLOWDOWN=200 _SAMCOUPE_SLOWDOWN=300 _SMS_SLOWDOWN=160 _SPECTRUM_SLOWDOWN=160 _VG5K_SLOWDOWN=75 _VZ200_SLOWDOWN=250 _ZX81_SLOWDOWN=10 _ZX81_WRX_SLOWDOWN=1 # CMOC _COCO_SLOWDOWN=160 _DRAGON_SLOWDOWN=160 _MO5_SLOWDOWN=160 _TO7_SLOWDOWN=160 # LCC1802 _COMX_SLOWDOWN=30 _PECOM_SLOWDOWN=30 _TMC600_SLOWDOWN=50 _MICRO_SLOWDOWN=60 _CIDELSA_SLOWDOWN=40 # CC6303 _MC10_SLOWDOWN=14 # GCC _NCURSES_SLOWDOWN=12 ================================================ FILE: src/examples/animate/main.c ================================================ /* --------------------------------------------------------------------------------------- */ // // CROSS SHOOT by Fabrizio Caruso // // Fabrizio_Caruso@hotmail.com // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from // the use of this software. // Permission is granted to anyone to use this software for non-commercial applications, // subject to the following restrictions: // 1. The origin of this software must not be misrepresented; you must not // claim that you wrote the original software. If you use this software in // a product, an acknowledgment in the product documentation would be // appreciated but is not required. // 2. Altered source versions must be plainly marked as such, and must not // be misrepresented as being the original software. // 3. This notice may not be removed or altered from any source distribution. /* --------------------------------------------------------------------------------------- */ #include "cross_lib.h" #define MIN_X 1 #define MAX_X (XSize-2) #define MIN_Y 1 #define MAX_Y (YSize-2) #define DOWN_TILE _TILE_0 #define UP_TILE _TILE_1 #define RIGHT_TILE _TILE_2 #define LEFT_TILE _TILE_3 #define FIRE_TILE _TILE_4 int main(void) { uint8_t x; uint8_t y; uint8_t input; uint8_t tile; _XL_INIT_GRAPHICS(); _XL_INIT_SOUND(); _XL_INIT_INPUT(); _XL_CLEAR_SCREEN(); x = XSize/2; y = YSize/2; tile = DOWN_TILE; while(1) { _XL_SET_TEXT_COLOR(_XL_WHITE); _XL_PRINTD(0,0,3,x); _XL_PRINTD(5,0,3,y); input = _XL_INPUT(); if(_XL_UP(input)) { _XL_DELETE(x,y); tile = UP_TILE; --y; } else if (_XL_DOWN(input)) { _XL_DELETE(x,y); tile = DOWN_TILE; ++y; } else if (_XL_LEFT(input)) { _XL_DELETE(x,y); tile = LEFT_TILE; --x; } else if(_XL_RIGHT(input)) { _XL_DELETE(x,y); tile = RIGHT_TILE; ++x; } else if(_XL_FIRE(input)) { _XL_DRAW(x,y,FIRE_TILE,_XL_WHITE); _XL_EXPLOSION_SOUND(); _XL_SLOW_DOWN(16*_XL_SLOW_DOWN_FACTOR); } if((y>=MIN_Y)&&(y<=MAX_Y)&&(x>=MIN_X)&&(x<=MAX_X)) { _XL_DRAW(x,y,tile,_XL_WHITE); _XL_SLOW_DOWN(_XL_SLOW_DOWN_FACTOR); } else { _XL_DELETE(x,y); _XL_ZAP_SOUND(); _XL_SLOW_DOWN(16*_XL_SLOW_DOWN_FACTOR); x = XSize/2; y = YSize/2; } _XL_SLOW_DOWN(4*_XL_SLOW_DOWN_FACTOR); } return EXIT_SUCCESS; } ================================================ FILE: src/examples/animate/tiles/6x8/tile0.txt ================================================ 12,18,12,51,45,12,18,18 ================================================ FILE: src/examples/animate/tiles/6x8/tile1.txt ================================================ 0,0,12,18,12,51,45,12 ================================================ FILE: src/examples/animate/tiles/6x8/tile10.txt ================================================ 0,0,0,32,16,40,8,8 ================================================ FILE: src/examples/animate/tiles/6x8/tile11.txt ================================================ 0,0,0,1,2,5,4,4 ================================================ FILE: src/examples/animate/tiles/6x8/tile12.txt ================================================ 16,56,16,60,18,21,57,41 ================================================ FILE: src/examples/animate/tiles/6x8/tile13.txt ================================================ 0,0,0,15,16,40,39,32 ================================================ FILE: src/examples/animate/tiles/6x8/tile14.txt ================================================ 0,42,42,58,42,42,0,0 ================================================ FILE: src/examples/animate/tiles/6x8/tile15.txt ================================================ 0,37,37,37,37,50,0,0 ================================================ FILE: src/examples/animate/tiles/6x8/tile16.txt ================================================ 0,0,0,60,2,5,57,1 ================================================ FILE: src/examples/animate/tiles/6x8/tile17.txt ================================================ 2,7,2,2,2,2,2,5 ================================================ FILE: src/examples/animate/tiles/6x8/tile18.txt ================================================ 16,56,16,16,16,16,16,40 ================================================ FILE: src/examples/animate/tiles/6x8/tile19.txt ================================================ 45,18,12,51,45,12,18,18 ================================================ FILE: src/examples/animate/tiles/6x8/tile2.txt ================================================ 18,18,0,0,0,0,0,0 ================================================ FILE: src/examples/animate/tiles/6x8/tile20.txt ================================================ 0,0,45,18,12,51,45,12 ================================================ FILE: src/examples/animate/tiles/6x8/tile21.txt ================================================ 0,0,0,0,45,18,12,51 ================================================ FILE: src/examples/animate/tiles/6x8/tile22.txt ================================================ 0,0,0,0,0,0,45,18 ================================================ FILE: src/examples/animate/tiles/6x8/tile23.txt ================================================ 0,4,21,14,27,14,21,4 ================================================ FILE: src/examples/animate/tiles/6x8/tile24.txt ================================================ 63,41,63,37,63,41,63,37 ================================================ FILE: src/examples/animate/tiles/6x8/tile25.txt ================================================ 63,8, 31, 16, 30, 2,62, 63 ================================================ FILE: src/examples/animate/tiles/6x8/tile25_ORIG.txt ================================================ 0,8, 31, 16, 30, 2,62, 4 ================================================ FILE: src/examples/animate/tiles/6x8/tile3.txt ================================================ 0,0,0,0,12,18,12,51 ================================================ FILE: src/examples/animate/tiles/6x8/tile4.txt ================================================ 45,12,18,18,0,0,0,0 ================================================ FILE: src/examples/animate/tiles/6x8/tile5.txt ================================================ 0,0,0,0,0,0,12,18 ================================================ FILE: src/examples/animate/tiles/6x8/tile6.txt ================================================ 12,51,45,12,18,18,0,0 ================================================ FILE: src/examples/animate/tiles/6x8/tile7.txt ================================================ 12,18,12,0,45,0,18,18 ================================================ FILE: src/examples/animate/tiles/6x8/tile8.txt ================================================ 0,12,18,33,33,18,12,0 ================================================ FILE: src/examples/animate/tiles/6x8/tile9.txt ================================================ 2,7,2,15,18,42,39,37 ================================================ FILE: src/examples/animate/tiles/6x9/tile0.txt ================================================ 12,18,12,51,45,12,18,18,18 ================================================ FILE: src/examples/animate/tiles/6x9/tile1.txt ================================================ 0,0,0,12,18,12,51,45,12 ================================================ FILE: src/examples/animate/tiles/6x9/tile10.txt ================================================ 0,0,0,0,32,16,40,8,8 ================================================ FILE: src/examples/animate/tiles/6x9/tile11.txt ================================================ 0,0,0,0,1,2,5,4,4 ================================================ FILE: src/examples/animate/tiles/6x9/tile12.txt ================================================ 0,16,56,16,60,18,21,57,41 ================================================ FILE: src/examples/animate/tiles/6x9/tile13.txt ================================================ 0,0,0,0,15,16,40,39,32 ================================================ FILE: src/examples/animate/tiles/6x9/tile14.txt ================================================ 0,0,42,42,58,42,42,0,0 ================================================ FILE: src/examples/animate/tiles/6x9/tile15.txt ================================================ 0,0,37,37,37,37,50,0,0 ================================================ FILE: src/examples/animate/tiles/6x9/tile16.txt ================================================ 0,0,0,0,60,2,5,57,1 ================================================ FILE: src/examples/animate/tiles/6x9/tile17.txt ================================================ 2,2,7,2,2,2,2,2,5 ================================================ FILE: src/examples/animate/tiles/6x9/tile18.txt ================================================ 16,16,56,16,16,16,16,16,40 ================================================ FILE: src/examples/animate/tiles/6x9/tile19.txt ================================================ 45,18,12,51,45,12,18,18,18 ================================================ FILE: src/examples/animate/tiles/6x9/tile2.txt ================================================ 18,18,18,0,0,0,0,0,0 ================================================ FILE: src/examples/animate/tiles/6x9/tile20.txt ================================================ 0,0,0,45,18,12,51,45,12 ================================================ FILE: src/examples/animate/tiles/6x9/tile21.txt ================================================ 0,0,0,0,0,45,18,12,51 ================================================ FILE: src/examples/animate/tiles/6x9/tile22.txt ================================================ 0,0,0,0,0,0,0,45,18 ================================================ FILE: src/examples/animate/tiles/6x9/tile23.txt ================================================ 0,0,4,21,14,27,14,21,4 ================================================ FILE: src/examples/animate/tiles/6x9/tile24.txt ================================================ 0,63,41,63,37,63,41,63,37 ================================================ FILE: src/examples/animate/tiles/6x9/tile25 _ORIG.txt ================================================ 0,8, 31, 16, 30, 2,62, 4,0 ================================================ FILE: src/examples/animate/tiles/6x9/tile25.txt ================================================ 63,8, 31, 16, 30, 2,62, 4,63 ================================================ FILE: src/examples/animate/tiles/6x9/tile3.txt ================================================ 0,0,0,0,0,12,18,12,51 ================================================ FILE: src/examples/animate/tiles/6x9/tile4.txt ================================================ 45,12,18,18,0,0,0,0,0 ================================================ FILE: src/examples/animate/tiles/6x9/tile5.txt ================================================ 0,0,0,0,0,0,0,12,18 ================================================ FILE: src/examples/animate/tiles/6x9/tile6.txt ================================================ 12,51,45,12,18,18,18,0,0 ================================================ FILE: src/examples/animate/tiles/6x9/tile7.txt ================================================ 12,18,12,0,45,0,18,18 ================================================ FILE: src/examples/animate/tiles/6x9/tile8.txt ================================================ 0,0,12,18,33,33,18,12,0 ================================================ FILE: src/examples/animate/tiles/6x9/tile9.txt ================================================ 0,2,7,2,15,18,42,39,37 ================================================ FILE: src/examples/animate/tiles/7x8/tile0.txt ================================================ 12,18,12,51,45,12,18,18 ================================================ FILE: src/examples/animate/tiles/7x8/tile1.txt ================================================ 0,0,12,18,12,51,45,12 ================================================ FILE: src/examples/animate/tiles/7x8/tile10.txt ================================================ 0,0,0,32,16,40,8,8 ================================================ FILE: src/examples/animate/tiles/7x8/tile11.txt ================================================ 0,0,0,1,2,5,4,4 ================================================ FILE: src/examples/animate/tiles/7x8/tile12.txt ================================================ 16,56,16,60,18,21,57,41 ================================================ FILE: src/examples/animate/tiles/7x8/tile13.txt ================================================ 0,0,0,15,16,40,39,32 ================================================ FILE: src/examples/animate/tiles/7x8/tile14.txt ================================================ 0,42,42,58,42,42,0,0 ================================================ FILE: src/examples/animate/tiles/7x8/tile15.txt ================================================ 0,37,37,37,37,50,0,0 ================================================ FILE: src/examples/animate/tiles/7x8/tile16.txt ================================================ 0,0,0,60,2,5,57,1 ================================================ FILE: src/examples/animate/tiles/7x8/tile17.txt ================================================ 2,7,2,2,2,2,2,5 ================================================ FILE: src/examples/animate/tiles/7x8/tile18.txt ================================================ 16,56,16,16,16,16,16,40 ================================================ FILE: src/examples/animate/tiles/7x8/tile19.txt ================================================ 45,18,12,51,45,12,18,18 ================================================ FILE: src/examples/animate/tiles/7x8/tile2.txt ================================================ 18,18,0,0,0,0,0,0 ================================================ FILE: src/examples/animate/tiles/7x8/tile20.txt ================================================ 0,0,45,18,12,51,45,12 ================================================ FILE: src/examples/animate/tiles/7x8/tile21.txt ================================================ 0,0,0,0,45,18,12,51 ================================================ FILE: src/examples/animate/tiles/7x8/tile22.txt ================================================ 0,0,0,0,0,0,45,18 ================================================ FILE: src/examples/animate/tiles/7x8/tile23.txt ================================================ 0,4,21,14,27,14,21,4 ================================================ FILE: src/examples/animate/tiles/7x8/tile24.txt ================================================ 63,41,63,37,63,41,63,37 ================================================ FILE: src/examples/animate/tiles/7x8/tile25.txt ================================================ $ff,$3e,$60,$3c,$06,$7c,$18,$ff ================================================ FILE: src/examples/animate/tiles/7x8/tile25_ORIG.txt ================================================ $18,$3e,$60,$3c,$06,$7c,$18,$00 ================================================ FILE: src/examples/animate/tiles/7x8/tile3.txt ================================================ 0,0,0,0,12,18,12,51 ================================================ FILE: src/examples/animate/tiles/7x8/tile4.txt ================================================ 45,12,18,18,0,0,0,0 ================================================ FILE: src/examples/animate/tiles/7x8/tile5.txt ================================================ 0,0,0,0,0,0,12,18 ================================================ FILE: src/examples/animate/tiles/7x8/tile6.txt ================================================ 12,51,45,12,18,18,0,0 ================================================ FILE: src/examples/animate/tiles/7x8/tile7.txt ================================================ 12,18,12,0,45,0,18,18 ================================================ FILE: src/examples/animate/tiles/7x8/tile8.txt ================================================ 0,12,18,33,33,18,12,0 ================================================ FILE: src/examples/animate/tiles/7x8/tile9.txt ================================================ 2,7,2,15,18,42,39,37 ================================================ FILE: src/examples/animate/tiles/8x8/tile0.txt ================================================ 24, 36, 24,102,153, 24, 36, 102 ================================================ FILE: src/examples/animate/tiles/8x8/tile1.txt ================================================ 24, 60, 24,102,153, 24, 36,102 ================================================ FILE: src/examples/animate/tiles/8x8/tile10.txt ================================================ 24, 36, 24, 0,153, 0, 36,102 ================================================ FILE: src/examples/animate/tiles/8x8/tile11.txt ================================================ 0, 0, 8, 56, 28, 16, 0, 0 ================================================ FILE: src/examples/animate/tiles/8x8/tile12.txt ================================================ 24, 24, 24, 48, 24, 12, 24, 24 ================================================ FILE: src/examples/animate/tiles/8x8/tile13.txt ================================================ 0, 0, 32,255, 4, 0, 0, 0 ================================================ FILE: src/examples/animate/tiles/8x8/tile14.txt ================================================ 0, 0,240, 63, 63,240, 0, 0 ================================================ FILE: src/examples/animate/tiles/8x8/tile15.txt ================================================ 0, 0, 15,252,252, 15, 0, 0 ================================================ FILE: src/examples/animate/tiles/8x8/tile16.txt ================================================ 24, 60, 60, 60,126, 90, 66, 66 ================================================ FILE: src/examples/animate/tiles/8x8/tile17.txt ================================================ 0,60,66,207,195,102,36,24 ================================================ FILE: src/examples/animate/tiles/8x8/tile18.txt ================================================ 0,60,90,219,195,90,60,24 ================================================ FILE: src/examples/animate/tiles/8x8/tile19.txt ================================================ 255,255,0,48,48,0,255,255 ================================================ FILE: src/examples/animate/tiles/8x8/tile2.txt ================================================ 24, 52, 25,118,152, 24, 20, 20 ================================================ FILE: src/examples/animate/tiles/8x8/tile20.txt ================================================ 255,255,0,48,48,0,255,255 ================================================ FILE: src/examples/animate/tiles/8x8/tile21.txt ================================================ 255,255,0,48,48,0,255,255 ================================================ FILE: src/examples/animate/tiles/8x8/tile22.txt ================================================ 255,255,0,48,48,0,255,255 ================================================ FILE: src/examples/animate/tiles/8x8/tile23.txt ================================================ 255,255,0,48,48,0,255,255 ================================================ FILE: src/examples/animate/tiles/8x8/tile24.txt ================================================ 255,255,0,48,48,0,255,255 ================================================ FILE: src/examples/animate/tiles/8x8/tile25.txt ================================================ $18,$3e,$60,$3c,$06,$7c,$18,$00 ================================================ FILE: src/examples/animate/tiles/8x8/tile3.txt ================================================ 24, 44,152,110, 25, 24, 40, 40 ================================================ FILE: src/examples/animate/tiles/8x8/tile4.txt ================================================ 60, 66,165,153,153,165, 66, 60 ================================================ FILE: src/examples/animate/tiles/8x8/tile5.txt ================================================ 60, 66,165,153,153,165, 66, 60 ================================================ FILE: src/examples/animate/tiles/8x8/tile6.txt ================================================ 189,66,165,165,129,153,129,126 ================================================ FILE: src/examples/animate/tiles/8x8/tile7.txt ================================================ 60, 66,165,129, 90, 36, 36, 60 ================================================ FILE: src/examples/animate/tiles/8x8/tile8.txt ================================================ 0, 60, 102,223,231,122, 36, 24 ================================================ FILE: src/examples/animate/tiles/8x8/tile9.txt ================================================ 0,128,126,200,248,192,128, 0 ================================================ FILE: src/examples/animate/tiles/ASCII/char_tiles.h ================================================ #ifndef _CHAR_TILES_H #define _CHAR_TILES_H #include "cross_lib.h" #define _TILE_0 (unsigned char) '0' #define _TILE_1 (unsigned char) '1' #define _TILE_2 (unsigned char) '2' #define _TILE_3 (unsigned char) '3' // Apple #define _TILE_4 (unsigned char) '4' // Body #define _TILE_5 (unsigned char) '5' #define _TILE_6 (unsigned char) '6' #define _TILE_7 (unsigned char) '7' #define _TILE_8 (unsigned char) '8' #define _TILE_9 (unsigned char) '9' #define _TILE_10 (unsigned char) 'A' #define _TILE_11 (unsigned char) 'B' #define _TILE_12 (unsigned char) 'C' #define _TILE_13 (unsigned char) 'D' #define _TILE_14 (unsigned char) 'E' #define _TILE_15 (unsigned char) 'F' #define _TILE_16 (unsigned char) 'G' #define _TILE_17 (unsigned char) 'H' #define _TILE_18 (unsigned char) 'I' #define _TILE_19 (unsigned char) 'J' #define _TILE_20 (unsigned char) 'K' #define _TILE_21 (unsigned char) 'L' #define _TILE_22 (unsigned char) 'M' #define _TILE_23 (unsigned char) 'N' #define _TILE_24 (unsigned char) 'O' #define _TILE_25 'P' //#define _TILE_25 '$' #endif // _CHAR_TILES_H ================================================ FILE: src/examples/background/Makefile.background ================================================ PROJECT_OPTS = -D__BACKGROUND_COLOR=1 FULL_FILES ?= \ $(BASIC_CROSS_LIB_FILES) \ $(CROSS_LIB_PATH)/sleep/sleep_macros.c \ $(SOURCE_PATH)/main.c GAME_NAME := background PARENT_DIR = examples include ./$(PARENT_DIR)/$(GAME_NAME)/config/project_config.mk include ./Makefile_common include ./makefiles.common/auxiliary/Makefile_default_values ================================================ FILE: src/examples/background/config/project_config.mk ================================================ ##################################################################### # SLOWDOWN VALUES # Common factor _COMMON_SLOWDOWN_FACTOR=10 # CC65 _APPLE2_SLOWDOWN=30 _APPLE2ENH_SLOWDOWN=30 _APPLE2_HGR_SLOWDOWN=50 _APPLE2ENH_HGR_SLOWDOWN=50 _ATARI_SLOWDOWN=70 _ATARI5200_SLOWDOWN=70 _C16_SLOWDOWN=55 _C64_SLOWDOWN=45 _CREATIVISION_SLOWDOWN=100 _GAMATE_SLOWDOWN=120 _ORIC_SLOWDOWN=40 _NES_SLOWDOWN=80 _PET_SLOWDOWN=40 _PCE_SLOWDOWN=550 _SUPERVISION_SLOWDOWN=140 _VIC20_SLOWDOWN=55 # Z88DK _AQUARIUS_SLOWDOWN=105 _ACE_SLOWDOWN=100 _C128_Z80_40COL_SLOWDOWN=20 _C128_Z80_80COL_SLOWDOWN=1 _CPC_MODE0_SLOWDOWN=100 _CPC_CPCRSLIB_MODE1_SLOWDOWN=90 _CPC_MODE2_SLOWDOWN=90 _CPM_Z80_SLOWDOWN=90 _CPM_INTEL8080_SLOWDOWN=80 _COLECO_SLOWDOWN=100 _GB_SLOWDOWN=280 _GG_SLOWDOWN=300 _GB_WAIT_VSYNC_SLOWDOWN=150 _LASER500_SLOWDOWN=200 _MC1000_SLOWDOWN=75 _MSX_SLOWDOWN=200 _MSX_FIXED_COLORS_SLOWDOWN=300 _MTX500_SLOWDOWN=200 _MTX512_SLOWDOWN=200 _MZ_SLOWDOWN=200 _SAMCOUPE_SLOWDOWN=300 _SMS_SLOWDOWN=160 _SPECTRUM_SLOWDOWN=160 _VG5K_SLOWDOWN=75 _VZ200_SLOWDOWN=250 _ZX81_SLOWDOWN=10 _ZX81_WRX_SLOWDOWN=1 # CMOC _COCO_SLOWDOWN=160 _DRAGON_SLOWDOWN=160 _MO5_SLOWDOWN=160 _TO7_SLOWDOWN=160 # LCC1802 _COMX_SLOWDOWN=30 _PECOM_SLOWDOWN=30 _TMC600_SLOWDOWN=50 _MICRO_SLOWDOWN=60 _CIDELSA_SLOWDOWN=40 # CC6303 _MC10_SLOWDOWN=50 # GCC _NCURSES_SLOWDOWN=12 ================================================ FILE: src/examples/background/main.c ================================================ /* --------------------------------------------------------------------------------------- */ // // CROSS SHOOT by Fabrizio Caruso // // Fabrizio_Caruso@hotmail.com // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from // the use of this software. // Permission is granted to anyone to use this software for non-commercial applications, // subject to the following restrictions: // 1. The origin of this software must not be misrepresented; you must not // claim that you wrote the original software. If you use this software in // a product, an acknowledgment in the product documentation would be // appreciated but is not required. // 2. Altered source versions must be plainly marked as such, and must not // be misrepresented as being the original software. // 3. This notice may not be removed or altered from any source distribution. /* --------------------------------------------------------------------------------------- */ #include "cross_lib.h" #define NUMBER_OF_COLORS 7 #define MAX_STRING_SIZE 10 #if !defined(_XL_NO_COLOR) static const uint8_t color[NUMBER_OF_COLORS] = {_XL_BLACK, _XL_WHITE, _XL_RED, _XL_CYAN, _XL_GREEN, _XL_YELLOW, _XL_BLUE}; #endif const char color_name[NUMBER_OF_COLORS][MAX_STRING_SIZE] = { "BLACK", "WHITE", "RED", "CYAN", "GREEN", "YELLOW", "BLUE", }; #define MAX_TILES_TO_DISPLAY 16 const uint8_t tile[MAX_TILES_TO_DISPLAY] = { _TILE_0, _TILE_1, _TILE_2, _TILE_3, _TILE_4, _TILE_5, _TILE_6, _TILE_7, _TILE_8, _TILE_9, _TILE_10, _TILE_11, _TILE_12, _TILE_13, _TILE_14, _TILE_15, }; #define COL_OFFSET 4 #define ROW_OFFSET 3 #if XSize <=((MAX_TILES_TO_DISPLAY)*2-COL_OFFSET) #define TILE_SEPARATION 1 #define TILES_TO_DISPLAY ((XSize)-COL_OFFSET) #else #define TILE_SEPARATION 2 #define TILES_TO_DISPLAY (MAX_TILES_TO_DISPLAY-(COL_OFFSET/2)) #endif int main(void) { uint8_t i; uint8_t j; uint8_t k; _XL_INIT_GRAPHICS(); _XL_INIT_SOUND(); _XL_INIT_INPUT(); for(k=0;k<3;++k) { for(j=0;j=12 _XL_PRINT(COL_OFFSET,10, _XL_A _XL_B _XL_C _XL_D _XL_E _XL_F _XL_G _XL_H _XL_I _XL_J); _XL_PRINT(COL_OFFSET,11, _XL_K _XL_L _XL_M _XL_N _XL_O _XL_P _XL_Q _XL_R _XL_S _XL_T); _XL_PRINT(COL_OFFSET,12, _XL_U _XL_V _XL_W _XL_X _XL_Y _XL_Z); #endif #if YSize >= 15 #if XSize>=16 _XL_PRINT(COL_OFFSET,14, " ABCDEFG HIJKLM"); _XL_PRINT(COL_OFFSET,15, " NOPQRST UVWXYZ"); #else _XL_PRINT(COL_OFFSET,14, " ABCDEFG"); _XL_PRINT(COL_OFFSET,15, " NOPQRST"); #endif #endif for(i=0;i>1), row, Text); } #define PRINT_CENTERED(Text) \ PRINT_CENTERED_ON_ROW((YSize>>1), Text) void display_player_right(void) { uint8_t rx; if((x&1)) { rx = (x+1)>>1; _XL_DELETE(rx-1,y); _XL_DRAW(rx,y,RIGHT_PART,_XL_GREEN); _XL_DRAW(rx+1,y,RIGHT_PLAYER_HEAD_PART,_XL_GREEN); } else { rx = x>>1; _XL_DELETE(rx-1,y); _XL_DRAW(rx,y,RIGHT_TAIL,_XL_GREEN); _XL_DRAW(rx+1,y,RIGHT_PLAYER_HEAD,_XL_GREEN); } } void display_player_left(void) { uint8_t rx; if((x&1)) { rx = (x-1)>>1; _XL_DELETE(rx+2,y); _XL_DRAW(rx,y,LEFT_PLAYER_HEAD_PART,_XL_GREEN); _XL_DRAW(rx+1,y,LEFT_PART,_XL_GREEN); } else { rx = x>>1; _XL_DELETE(rx+2,y); _XL_DRAW(rx,y,LEFT_PLAYER_HEAD,_XL_GREEN); _XL_DRAW(rx+1,y,LEFT_TAIL,_XL_GREEN); } } void display_enemy_right(void) { uint8_t rx; if((x&1)) { rx = (x+1)>>1; _XL_DELETE(rx-1,y); _XL_DRAW(rx,y,RIGHT_PART,_XL_GREEN); _XL_DRAW(rx+1,y,RIGHT_ENEMY_HEAD_PART,_XL_GREEN); } else { rx = x>>1; _XL_DELETE(rx-1,y); _XL_DRAW(rx,y,RIGHT_TAIL,_XL_GREEN); _XL_DRAW(rx+1,y,RIGHT_ENEMY_HEAD,_XL_GREEN); } } void display_enemy_left(void) { uint8_t rx; if((x&1)) { rx = (x-1)>>1; _XL_DELETE(rx+2,y); _XL_DRAW(rx,y,LEFT_ENEMY_HEAD_PART,_XL_GREEN); _XL_DRAW(rx+1,y,LEFT_PART,_XL_GREEN); } else { rx = x>>1; _XL_DELETE(rx+2,y); _XL_DRAW(rx,y,LEFT_ENEMY_HEAD,_XL_GREEN); _XL_DRAW(rx+1,y,LEFT_TAIL,_XL_GREEN); } } void display_boss_right(void) { uint8_t rx; if((x&1)) { rx = (x+1)>>1; _XL_DELETE(rx-1,y); _XL_DRAW(rx,y,RIGHT_PART,_XL_GREEN); _XL_DRAW(rx+1,y,RIGHT_BOSS_HEAD_PART,_XL_GREEN); } else { rx = x>>1; _XL_DELETE(rx-1,y); _XL_DRAW(rx,y,RIGHT_TAIL,_XL_GREEN); _XL_DRAW(rx+1,y,RIGHT_BOSS_HEAD,_XL_GREEN); } } void display_boss_left(void) { uint8_t rx; if((x&1)) { rx = (x-1)>>1; _XL_DELETE(rx+2,y); _XL_DRAW(rx,y,LEFT_BOSS_HEAD_PART,_XL_GREEN); _XL_DRAW(rx+1,y,LEFT_PART,_XL_GREEN); } else { rx = x>>1; _XL_DELETE(rx+2,y); _XL_DRAW(rx,y,LEFT_BOSS_HEAD,_XL_GREEN); _XL_DRAW(rx+1,y,LEFT_TAIL,_XL_GREEN); } } void display_player(void) { if(direction) { display_player_right(); } else { display_player_left(); } } void display_enemy(void) { if(direction) { display_enemy_right(); } else { display_enemy_left(); } } void display_boss(void) { if(direction) { display_boss_right(); } else { display_boss_left(); } } void draw_level(void) { uint8_t i; for(i=MIN_X; i<=MAX_X/2; ++i) { _XL_DRAW(i,YSize/2+1,TERRAIN, _XL_WHITE); } } void handle_player(void) { input = _XL_INPUT(); if (_XL_RIGHT(input) && xMIN_X) { direction = 0; --x; display_player(); } } int main(void) { _XL_INIT_GRAPHICS(); _XL_INIT_INPUT(); _XL_INIT_SOUND(); hiscore = 0; // MAIN END-LESS LOOP while(1) { score = 0; level = INITIAL_LEVEL; lives = 3; _XL_CLEAR_SCREEN(); _XL_SET_TEXT_COLOR(_XL_RED); PRINT_CENTERED_ON_ROW(4, "BLOB"); _XL_SET_TEXT_COLOR(_XL_CYAN); PRINT_CENTERED_ON_ROW(6, "FABRIZIO CARUSO"); _XL_SET_TEXT_COLOR(_XL_WHITE); PRINT_CENTERED_ON_ROW(0, "HISCORE"); _XL_PRINTD(XSize/2-3,1,5,hiscore); #if !defined(_XL_NO_JOYSTICK) PRINT_CENTERED_ON_ROW(YSize-1, "PRESS FIRE"); #else PRINT_CENTERED_ON_ROW(YSize-1, "PRESS A KEY"); #endif _XL_WAIT_FOR_INPUT(); _XL_CLEAR_SCREEN(); // GAME LOOP while(lives && (levelhiscore) { hiscore = score; } } // while(1) -> restart from level 1 return EXIT_SUCCESS; } ================================================ FILE: src/examples/blob/shapes/6x8/shape0.txt ================================================ ...... .#..#. #.##.# #.##.# #.##.# #.##.# .#..#. ...... ================================================ FILE: src/examples/blob/shapes/6x8/shape1.txt ================================================ ...... .#..#. #.###. #.#.#. #.#.#. #.#.#. .#.### ...... ================================================ FILE: src/examples/blob/shapes/6x8/shape10.txt ================================================ ...... .#..#. ##.#.# .#.#.# .#.#.# .#.#.# ###.#. ...... ================================================ FILE: src/examples/blob/shapes/6x8/shape11.txt ================================================ ...... .#..#. ##.##. .#..#. .#..#. .#..#. ###### ...... ================================================ FILE: src/examples/blob/shapes/6x8/shape12.txt ================================================ ...... .#..## ##.#.# .#...# .#..#. .#.#.. ###### ...... ================================================ FILE: src/examples/blob/shapes/6x8/shape13.txt ================================================ ...... .#.### ##...# .#...# .#.### .#...# ###### ...... ================================================ FILE: src/examples/blob/shapes/6x8/shape14.txt ================================================ ...... .#.#.# ##.#.# .#.#.# .#.### .#...# ###..# ...... ================================================ FILE: src/examples/blob/shapes/6x8/shape15.txt ================================================ ...... .#.### ##.#.. .#.#.. .#.### .#...# ###### ...... ================================================ FILE: src/examples/blob/shapes/6x8/shape16.txt ================================================ ...... .#.### ##.#.. .#.#.. .#.### .#.#.# ###### ...... ================================================ FILE: src/examples/blob/shapes/6x8/shape17.txt ================================================ ...... .#.### ##...# .#...# .#..#. .#..#. ###.#. ...... ================================================ FILE: src/examples/blob/shapes/6x8/shape18.txt ================================================ ...... .#.### ##.#.# .#.#.# .#.### .#.#.# ###### ...... ================================================ FILE: src/examples/blob/shapes/6x8/shape19.txt ================================================ ...... .#.### ##.#.# .#.#.# .#.### .#...# ###..# ...... ================================================ FILE: src/examples/blob/shapes/6x8/shape2.txt ================================================ ...... .#..## #.##.# #.#..# #.#.#. #.##.. .#.### ...... ================================================ FILE: src/examples/blob/shapes/6x8/shape20.txt ================================================ ...... .##.#. #.##.# ..##.# .#.#.# #..#.# ###.#. ...... ================================================ FILE: src/examples/blob/shapes/6x8/shape21.txt ================================================ ...... .##.#. #.###. ..#.#. .#..#. #...#. ###### ...... ================================================ FILE: src/examples/blob/shapes/6x8/shape22.txt ================================================ ...... .##.## #.##.# ..#..# .#..#. #..#.. ###### ...... ================================================ FILE: src/examples/blob/shapes/6x8/shape23.txt ================================================ ...... .##### #.#..# ..#..# .#.### #....# ###### ...... ================================================ FILE: src/examples/blob/shapes/6x8/shape24.txt ================================================ ...... .###.# #.##.# ..##.# .#.### #....# ###..# ...... ================================================ FILE: src/examples/blob/shapes/6x8/shape25.txt ================================================ ...... .##### #.##.. ..##.. .#.### #....# ###### ...... ================================================ FILE: src/examples/blob/shapes/6x8/shape26.txt ================================================ ...... .##### #.##.. ..##.. .#.### #..#.# ###### ...... ================================================ FILE: src/examples/blob/shapes/6x8/shape3.txt ================================================ ...... .#.### #.#..# #.#..# #.#### #.#..# .#.### ...... ================================================ FILE: src/examples/blob/shapes/6x8/shape4.txt ================================================ ...... .#.#.# #.##.# #.##.# #.#### #.#..# .#...# ...... ================================================ FILE: src/examples/blob/shapes/6x8/shape5.txt ================================================ ...... .#.### #.##.. #.##.. #.#### #.#..# .#.### ...... ================================================ FILE: src/examples/blob/shapes/6x8/shape6.txt ================================================ ...... .#.### #.##.. #.##.. #.#### #.##.# .#.### ...... ================================================ FILE: src/examples/blob/shapes/6x8/shape7.txt ================================================ ...... .#.### #.#..# #.#..# #.#.#. #.#.#. .#..#. ....... ================================================ FILE: src/examples/blob/shapes/6x8/shape8.txt ================================================ ...... .#.### #.##.# #.##.# #.#### #.##.# .#.### ...... ================================================ FILE: src/examples/blob/shapes/6x8/shape9.txt ================================================ ...... .#.### #.##.# #.##.# #.#### #.#..# .#...# ...... ================================================ FILE: src/examples/blob/shapes/6x9/shape0.txt ================================================ ...... ...... .#..#. #.##.# #.##.# #.##.# #.##.# .#..#. ...... ================================================ FILE: src/examples/blob/shapes/6x9/shape1.txt ================================================ ...... ...... .#..#. #.###. #.#.#. #.#.#. #.#.#. .#.### ...... ================================================ FILE: src/examples/blob/shapes/6x9/shape10.txt ================================================ ...... ...... .#..#. ##.#.# .#.#.# .#.#.# .#.#.# ###.#. ...... ================================================ FILE: src/examples/blob/shapes/6x9/shape11.txt ================================================ ...... ...... .#..#. ##.##. .#..#. .#..#. .#..#. ###### ...... ================================================ FILE: src/examples/blob/shapes/6x9/shape12.txt ================================================ ...... ...... .#..## ##.#.# .#...# .#..#. .#.#.. ###### ...... ================================================ FILE: src/examples/blob/shapes/6x9/shape13.txt ================================================ ...... ...... .#.### ##...# .#...# .#.### .#...# ###### ...... ================================================ FILE: src/examples/blob/shapes/6x9/shape14.txt ================================================ ...... ...... .#.#.# ##.#.# .#.#.# .#.### .#...# ###..# ...... ================================================ FILE: src/examples/blob/shapes/6x9/shape15.txt ================================================ ...... ...... .#.### ##.#.. .#.#.. .#.### .#...# ###### ...... ================================================ FILE: src/examples/blob/shapes/6x9/shape16.txt ================================================ ...... ...... .#.### ##.#.. .#.#.. .#.### .#.#.# ###### ...... ================================================ FILE: src/examples/blob/shapes/6x9/shape17.txt ================================================ ...... ...... .#.### ##...# .#...# .#..#. .#..#. ###.#. ...... ================================================ FILE: src/examples/blob/shapes/6x9/shape18.txt ================================================ ...... ...... .#.### ##.#.# .#.#.# .#.### .#.#.# ###### ...... ================================================ FILE: src/examples/blob/shapes/6x9/shape19.txt ================================================ ...... ...... .#.### ##.#.# .#.#.# .#.### .#...# ###..# ...... ================================================ FILE: src/examples/blob/shapes/6x9/shape2.txt ================================================ ...... ...... .#..## #.##.# #.#..# #.#.#. #.##.. .#.### ...... ================================================ FILE: src/examples/blob/shapes/6x9/shape20.txt ================================================ ...... ...... .##.#. #.##.# ..##.# .#.#.# #..#.# ###.#. ...... ================================================ FILE: src/examples/blob/shapes/6x9/shape21.txt ================================================ ...... ...... .##.#. #.###. ..#.#. .#..#. #...#. ###### ...... ================================================ FILE: src/examples/blob/shapes/6x9/shape22.txt ================================================ ...... ...... .##.## #.##.# ..#..# .#..#. #..#.. ###### ...... ================================================ FILE: src/examples/blob/shapes/6x9/shape23.txt ================================================ ...... ...... .##### #.#..# ..#..# .#.### #....# ###### ...... ================================================ FILE: src/examples/blob/shapes/6x9/shape24.txt ================================================ ...... ...... .###.# #.##.# ..##.# .#.### #....# ###..# ...... ================================================ FILE: src/examples/blob/shapes/6x9/shape25.txt ================================================ ...... ...... .##### #.##.. ..##.. .#.### #....# ###### ...... ================================================ FILE: src/examples/blob/shapes/6x9/shape26.txt ================================================ ...... ...... .##### #.##.. ..##.. .#.### #..#.# ###### ...... ================================================ FILE: src/examples/blob/shapes/6x9/shape3.txt ================================================ ...... ...... .#.### #.#..# #.#..# #.#### #.#..# .#.### ...... ================================================ FILE: src/examples/blob/shapes/6x9/shape4.txt ================================================ ...... ...... .#.#.# #.##.# #.##.# #.#### #.#..# .#...# ...... ================================================ FILE: src/examples/blob/shapes/6x9/shape5.txt ================================================ ...... ...... .#.### #.##.. #.##.. #.#### #.#..# .#.### ...... ================================================ FILE: src/examples/blob/shapes/6x9/shape6.txt ================================================ ...... ...... .#.### #.##.. #.##.. #.#### #.##.# .#.### ...... ================================================ FILE: src/examples/blob/shapes/6x9/shape7.txt ================================================ ...... ...... .#.### #.#..# #.#..# #.#.#. #.#.#. .#..#. ....... ================================================ FILE: src/examples/blob/shapes/6x9/shape8.txt ================================================ ...... ...... .#.### #.##.# #.##.# #.#### #.##.# .#.### ...... ================================================ FILE: src/examples/blob/shapes/6x9/shape9.txt ================================================ ...... ...... .#.### #.##.# #.##.# #.#### #.#..# .#...# ...... ================================================ FILE: src/examples/blob/shapes/7x8/shape0.txt ================================================ ....... .#...#. #.#.#.# #.#.#.# #.#.#.# #.#.#.# .#...#. ....... ================================================ FILE: src/examples/blob/shapes/7x8/shape1.txt ================================================ ....... .#...#. #.#.##. #.#..#. #.#..#. #.#..#. .#..### ....... ================================================ FILE: src/examples/blob/shapes/7x8/shape10.txt ================================================ ....... .#...#. ##..#.# .#..#.# .#..#.# .#..#.# ###..#. ....... ================================================ FILE: src/examples/blob/shapes/7x8/shape11.txt ================================================ ....... .#...#. ##..##. .#...#. .#...#. .#...#. ###.### ....... ================================================ FILE: src/examples/blob/shapes/7x8/shape12.txt ================================================ ....... .#...## ##..#.# .#....# .#...#. .#..#.. ###.### ....... ================================================ FILE: src/examples/blob/shapes/7x8/shape13.txt ================================================ ....... .#..### ##....# .#....# .#..### .#....# ###.### ....... ================================================ FILE: src/examples/blob/shapes/7x8/shape14.txt ================================================ ....... .#..#.# ##..#.# .#..#.# .#..### .#....# ###...# ....... ================================================ FILE: src/examples/blob/shapes/7x8/shape15.txt ================================================ ....... .#..### ##..#.. .#..#.. .#..### .#....# ###.### ....... ================================================ FILE: src/examples/blob/shapes/7x8/shape16.txt ================================================ ....... .#..### ##..#.. .#..#.. .#..### .#..#.# ###.### ....... ================================================ FILE: src/examples/blob/shapes/7x8/shape17.txt ================================================ ....... .#..### ##....# .#....# .#...#. .#...#. ###..#. ....... ================================================ FILE: src/examples/blob/shapes/7x8/shape18.txt ================================================ ....... .#..### ##..#.# .#..#.# .#..### .#..#.# ###.### ....... ================================================ FILE: src/examples/blob/shapes/7x8/shape19.txt ================================================ ....... .#..### ##..#.# .#..#.# .#..### .#....# ###...# ....... ================================================ FILE: src/examples/blob/shapes/7x8/shape2.txt ================================================ ....... .#...## #.#.#.# #.#...# #.#..#. #.#.#.. .#..### ....... ================================================ FILE: src/examples/blob/shapes/7x8/shape20.txt ================================================ ....... .##..#. #.#.#.# ..#.#.# .#..#.# #...#.# ###..#. ....... ================================================ FILE: src/examples/blob/shapes/7x8/shape21.txt ================================================ ....... .##..#. #.#.##. ..#..#. .#...#. #....#. ###.### ....... ================================================ FILE: src/examples/blob/shapes/7x8/shape22.txt ================================================ ....... .##..## #.#.#.# ..#...# .#...#. #...#.. ###.### ....... ================================================ FILE: src/examples/blob/shapes/7x8/shape23.txt ================================================ ....... .##.### #.#...# ..#...# .#..### #.....# ###.### ....... ================================================ FILE: src/examples/blob/shapes/7x8/shape24.txt ================================================ ....... .##.#.# #.#.#.# ..#.#.# .#..### #.....# ###...# ....... ================================================ FILE: src/examples/blob/shapes/7x8/shape25.txt ================================================ ....... .##.### #.#.#.. ..#.#.. .#..### #.....# ###.### ....... ================================================ FILE: src/examples/blob/shapes/7x8/shape26.txt ================================================ ....... .##.### #.#.#.. ..#.#.. .#..### #...#.# ###.### ....... ================================================ FILE: src/examples/blob/shapes/7x8/shape3.txt ================================================ ....... .#..### #.#...# #.#...# #.#.### #.#...# .#..### ....... ================================================ FILE: src/examples/blob/shapes/7x8/shape4.txt ================================================ ....... .#..#.# #.#.#.# #.#.#.# #.#.### #.#...# .#....# ....... ================================================ FILE: src/examples/blob/shapes/7x8/shape5.txt ================================================ ....... .#..### #.#.#.. #.#.#.. #.#.### #.#...# .#..### ....... ================================================ FILE: src/examples/blob/shapes/7x8/shape6.txt ================================================ ....... .#..### #.#.#.. #.#.#.. #.#.### #.#.#.# .#..### ....... ================================================ FILE: src/examples/blob/shapes/7x8/shape7.txt ================================================ ....... .#..### #.#...# #.#...# #.#..#. #.#..#. .#...#. ........ ================================================ FILE: src/examples/blob/shapes/7x8/shape8.txt ================================================ ....... .#..### #.#.#.# #.#.#.# #.#.### #.#.#.# .#..### ....... ================================================ FILE: src/examples/blob/shapes/7x8/shape9.txt ================================================ ....... .#..### #.#.#.# #.#.#.# #.#.### #.#...# .#....# ....... ================================================ FILE: src/examples/blob/shapes/8x6/shape0.txt ================================================ .#....#. #.#..#.# #.#..#.# #.#..#.# #.#..#.# .#....#. ================================================ FILE: src/examples/blob/shapes/8x6/shape1.txt ================================================ .#....#. #.#..##. #.#...#. #.#...#. #.#...#. .#...### ================================================ FILE: src/examples/blob/shapes/8x6/shape10.txt ================================================ .#....#. ##...#.# .#...#.# .#...#.# .#...#.# ###...#. ================================================ FILE: src/examples/blob/shapes/8x6/shape11.txt ================================================ .#....#. ##...##. .#....#. .#....#. .#....#. ###..### ================================================ FILE: src/examples/blob/shapes/8x6/shape12.txt ================================================ .#....## ##...#.# .#.....# .#....#. .#...#.. ###..### ================================================ FILE: src/examples/blob/shapes/8x6/shape13.txt ================================================ .#...### ##.....# .#.....# .#...### .#.....# ###..### ================================================ FILE: src/examples/blob/shapes/8x6/shape14.txt ================================================ .#...#.# ##...#.# .#...#.# .#...### .#.....# ###....# ================================================ FILE: src/examples/blob/shapes/8x6/shape15.txt ================================================ .#...### ##...#.. .#...#.. .#...### .#.....# ###..### ================================================ FILE: src/examples/blob/shapes/8x6/shape16.txt ================================================ .#...### ##...#.. .#...#.. .#...### .#...#.# ###..### ================================================ FILE: src/examples/blob/shapes/8x6/shape17.txt ================================================ .#...### ##.....# .#.....# .#....#. .#....#. ###...#. ================================================ FILE: src/examples/blob/shapes/8x6/shape18.txt ================================================ .#...### ##...#.# .#...#.# .#...### .#...#.# ###..### ================================================ FILE: src/examples/blob/shapes/8x6/shape19.txt ================================================ .#...### ##...#.# .#...#.# .#...### .#.....# ###....# ================================================ FILE: src/examples/blob/shapes/8x6/shape2.txt ================================================ .#....## #.#..#.# #.#....# #.#...#. #.#..#.. .#...### ================================================ FILE: src/examples/blob/shapes/8x6/shape20.txt ================================================ .##...#. #.#..#.# ..#..#.# .#...#.# #....#.# ###...#. ================================================ FILE: src/examples/blob/shapes/8x6/shape21.txt ================================================ .##...#. #.#..##. ..#...#. .#....#. #.....#. ###..### ================================================ FILE: src/examples/blob/shapes/8x6/shape22.txt ================================================ .##...## #.#..#.# ..#....# .#....#. #....#.. ###..### ================================================ FILE: src/examples/blob/shapes/8x6/shape23.txt ================================================ .##..### #.#....# ..#....# .#...### #......# ###..### ================================================ FILE: src/examples/blob/shapes/8x6/shape24.txt ================================================ .##..#.# #.#..#.# ..#..#.# .#...### #......# ###....# ================================================ FILE: src/examples/blob/shapes/8x6/shape25.txt ================================================ .##..### #.#..#.. ..#..#.. .#...### #......# ###..### ================================================ FILE: src/examples/blob/shapes/8x6/shape26.txt ================================================ .##..### #.#..#.. ..#..#.. .#...### #....#.# ###..### ================================================ FILE: src/examples/blob/shapes/8x6/shape3.txt ================================================ .#...### #.#....# #.#....# #.#..### #.#....# .#...### ================================================ FILE: src/examples/blob/shapes/8x6/shape4.txt ================================================ .#...#.# #.#..#.# #.#..#.# #.#..### #.#....# .#.....# ================================================ FILE: src/examples/blob/shapes/8x6/shape5.txt ================================================ .#...### #.#..#.. #.#..#.. #.#..### #.#....# .#...### ================================================ FILE: src/examples/blob/shapes/8x6/shape6.txt ================================================ .#...### #.#..#.. #.#..#.. #.#..### #.#..#.# .#...### ================================================ FILE: src/examples/blob/shapes/8x6/shape7.txt ================================================ .#...### #.#....# #.#....# #.#...#. #.#...#. .#....#. ================================================ FILE: src/examples/blob/shapes/8x6/shape8.txt ================================================ .#...### #.#..#.# #.#..#.# #.#..### #.#..#.# .#...### ================================================ FILE: src/examples/blob/shapes/8x6/shape9.txt ================================================ .#...### #.#..#.# #.#..#.# #.#..### #.#....# .#.....# ================================================ FILE: src/examples/blob/shapes/8x8/shape18.txt ================================================ ........ ........ ........ ........ ...#.... ..###... ...#.... ........ ================================================ FILE: src/examples/blob/shapes/8x8/shape19.txt ================================================ ...#.... ..#.#... .#...#.. #..#..#. .#...# . ..#.#... ...#.... ...#.... ================================================ FILE: src/examples/blob/shapes/8x8/shape20.txt ================================================ ..####.. .######. ###..### ##....## ##....## ###..### .######. ..####.. ================================================ FILE: src/examples/blob/tiles/6x8/tile0.txt ================================================ 0,18,45,45,45,45,18,0 ================================================ FILE: src/examples/blob/tiles/6x8/tile1.txt ================================================ 0,18,46,42,42,42,23,0 ================================================ FILE: src/examples/blob/tiles/6x8/tile10.txt ================================================ 0,18,53,21,21,21,58,0 ================================================ FILE: src/examples/blob/tiles/6x8/tile11.txt ================================================ 0,18,54,18,18,18,63,0 ================================================ FILE: src/examples/blob/tiles/6x8/tile12.txt ================================================ 0,19,53,17,18,20,63,0 ================================================ FILE: src/examples/blob/tiles/6x8/tile13.txt ================================================ 0,23,49,17,23,17,63,0 ================================================ FILE: src/examples/blob/tiles/6x8/tile14.txt ================================================ 0,21,53,21,23,17,57,0 ================================================ FILE: src/examples/blob/tiles/6x8/tile15.txt ================================================ 0,23,52,20,23,17,63,0 ================================================ FILE: src/examples/blob/tiles/6x8/tile16.txt ================================================ 0,23,52,20,23,21,63,0 ================================================ FILE: src/examples/blob/tiles/6x8/tile17.txt ================================================ 0,23,49,17,18,18,58,0 ================================================ FILE: src/examples/blob/tiles/6x8/tile18.txt ================================================ 0,23,53,21,23,21,63,0 ================================================ FILE: src/examples/blob/tiles/6x8/tile19.txt ================================================ 0,23,53,21,23,17,57,0 ================================================ FILE: src/examples/blob/tiles/6x8/tile2.txt ================================================ 0,19,45,41,42,44,23,0 ================================================ FILE: src/examples/blob/tiles/6x8/tile20.txt ================================================ 0,26,45,13,21,37,58,0 ================================================ FILE: src/examples/blob/tiles/6x8/tile21.txt ================================================ 0,26,46,10,18,34,63,0 ================================================ FILE: src/examples/blob/tiles/6x8/tile22.txt ================================================ 0,27,45,9,18,36,63,0 ================================================ FILE: src/examples/blob/tiles/6x8/tile23.txt ================================================ 0,31,41,9,23,33,63,0 ================================================ FILE: src/examples/blob/tiles/6x8/tile24.txt ================================================ 0,29,45,13,23,33,57,0 ================================================ FILE: src/examples/blob/tiles/6x8/tile25.txt ================================================ 0,31,44,12,23,33,63,0 ================================================ FILE: src/examples/blob/tiles/6x8/tile26.txt ================================================ 0,31,44,12,23,37,63,0 ================================================ FILE: src/examples/blob/tiles/6x8/tile3.txt ================================================ 0,23,41,41,47,41,23,0 ================================================ FILE: src/examples/blob/tiles/6x8/tile4.txt ================================================ 0,21,45,45,47,41,17,0 ================================================ FILE: src/examples/blob/tiles/6x8/tile5.txt ================================================ 0,23,44,44,47,41,23,0 ================================================ FILE: src/examples/blob/tiles/6x8/tile6.txt ================================================ 0,23,44,44,47,45,23,0 ================================================ FILE: src/examples/blob/tiles/6x8/tile7.txt ================================================ 0,23,41,41,42,42,18,0 ================================================ FILE: src/examples/blob/tiles/6x8/tile8.txt ================================================ 0,23,45,45,47,45,23,0 ================================================ FILE: src/examples/blob/tiles/6x8/tile9.txt ================================================ 0,23,45,45,47,41,17,0 ================================================ FILE: src/examples/blob/tiles/6x9/tile0.txt ================================================ 0,0,18,45,45,45,45,18,0 ================================================ FILE: src/examples/blob/tiles/6x9/tile1.txt ================================================ 0,0,18,46,42,42,42,23,0 ================================================ FILE: src/examples/blob/tiles/6x9/tile10.txt ================================================ 0,0,18,53,21,21,21,58,0 ================================================ FILE: src/examples/blob/tiles/6x9/tile11.txt ================================================ 0,0,18,54,18,18,18,63,0 ================================================ FILE: src/examples/blob/tiles/6x9/tile12.txt ================================================ 0,0,19,53,17,18,20,63,0 ================================================ FILE: src/examples/blob/tiles/6x9/tile13.txt ================================================ 0,0,23,49,17,23,17,63,0 ================================================ FILE: src/examples/blob/tiles/6x9/tile14.txt ================================================ 0,0,21,53,21,23,17,57,0 ================================================ FILE: src/examples/blob/tiles/6x9/tile15.txt ================================================ 0,0,23,52,20,23,17,63,0 ================================================ FILE: src/examples/blob/tiles/6x9/tile16.txt ================================================ 0,0,23,52,20,23,21,63,0 ================================================ FILE: src/examples/blob/tiles/6x9/tile17.txt ================================================ 0,0,23,49,17,18,18,58,0 ================================================ FILE: src/examples/blob/tiles/6x9/tile18.txt ================================================ 0,0,23,53,21,23,21,63,0 ================================================ FILE: src/examples/blob/tiles/6x9/tile19.txt ================================================ 0,0,23,53,21,23,17,57,0 ================================================ FILE: src/examples/blob/tiles/6x9/tile2.txt ================================================ 0,0,19,45,41,42,44,23,0 ================================================ FILE: src/examples/blob/tiles/6x9/tile20.txt ================================================ 0,0,26,45,13,21,37,58,0 ================================================ FILE: src/examples/blob/tiles/6x9/tile21.txt ================================================ 0,0,26,46,10,18,34,63,0 ================================================ FILE: src/examples/blob/tiles/6x9/tile22.txt ================================================ 0,0,27,45,9,18,36,63,0 ================================================ FILE: src/examples/blob/tiles/6x9/tile23.txt ================================================ 0,0,31,41,9,23,33,63,0 ================================================ FILE: src/examples/blob/tiles/6x9/tile24.txt ================================================ 0,0,29,45,13,23,33,57,0 ================================================ FILE: src/examples/blob/tiles/6x9/tile25.txt ================================================ 0,0,31,44,12,23,33,63,0 ================================================ FILE: src/examples/blob/tiles/6x9/tile26.txt ================================================ 0,0,31,44,12,23,37,63,0 ================================================ FILE: src/examples/blob/tiles/6x9/tile3.txt ================================================ 0,0,23,41,41,47,41,23,0 ================================================ FILE: src/examples/blob/tiles/6x9/tile4.txt ================================================ 0,0,21,45,45,47,41,17,0 ================================================ FILE: src/examples/blob/tiles/6x9/tile5.txt ================================================ 0,0,23,44,44,47,41,23,0 ================================================ FILE: src/examples/blob/tiles/6x9/tile6.txt ================================================ 0,0,23,44,44,47,45,23,0 ================================================ FILE: src/examples/blob/tiles/6x9/tile7.txt ================================================ 0,0,23,41,41,42,42,18,0 ================================================ FILE: src/examples/blob/tiles/6x9/tile8.txt ================================================ 0,0,23,45,45,47,45,23,0 ================================================ FILE: src/examples/blob/tiles/6x9/tile9.txt ================================================ 0,0,23,45,45,47,41,17,0 ================================================ FILE: src/examples/blob/tiles/7x8/tile0.txt ================================================ 0,34,85,85,85,85,34,0 ================================================ FILE: src/examples/blob/tiles/7x8/tile1.txt ================================================ 0,34,86,82,82,82,39,0 ================================================ FILE: src/examples/blob/tiles/7x8/tile10.txt ================================================ 0,34,101,37,37,37,114,0 ================================================ FILE: src/examples/blob/tiles/7x8/tile11.txt ================================================ 0,34,102,34,34,34,119,0 ================================================ FILE: src/examples/blob/tiles/7x8/tile12.txt ================================================ 0,35,101,33,34,36,119,0 ================================================ FILE: src/examples/blob/tiles/7x8/tile13.txt ================================================ 0,39,97,33,39,33,119,0 ================================================ FILE: src/examples/blob/tiles/7x8/tile14.txt ================================================ 0,37,101,37,39,33,113,0 ================================================ FILE: src/examples/blob/tiles/7x8/tile15.txt ================================================ 0,39,100,36,39,33,119,0 ================================================ FILE: src/examples/blob/tiles/7x8/tile16.txt ================================================ 0,39,100,36,39,37,119,0 ================================================ FILE: src/examples/blob/tiles/7x8/tile17.txt ================================================ 0,39,97,33,34,34,114,0 ================================================ FILE: src/examples/blob/tiles/7x8/tile18.txt ================================================ 0,39,101,37,39,37,119,0 ================================================ FILE: src/examples/blob/tiles/7x8/tile19.txt ================================================ 0,39,101,37,39,33,113,0 ================================================ FILE: src/examples/blob/tiles/7x8/tile2.txt ================================================ 0,35,85,81,82,84,39,0 ================================================ FILE: src/examples/blob/tiles/7x8/tile20.txt ================================================ 0,50,85,21,37,69,114,0 ================================================ FILE: src/examples/blob/tiles/7x8/tile21.txt ================================================ 0,50,86,18,34,66,119,0 ================================================ FILE: src/examples/blob/tiles/7x8/tile22.txt ================================================ 0,51,85,17,34,68,119,0 ================================================ FILE: src/examples/blob/tiles/7x8/tile23.txt ================================================ 0,55,81,17,39,65,119,0 ================================================ FILE: src/examples/blob/tiles/7x8/tile24.txt ================================================ 0,53,85,21,39,65,113,0 ================================================ FILE: src/examples/blob/tiles/7x8/tile25.txt ================================================ 0,55,84,20,39,65,119,0 ================================================ FILE: src/examples/blob/tiles/7x8/tile26.txt ================================================ 0,55,84,20,39,69,119,0 ================================================ FILE: src/examples/blob/tiles/7x8/tile3.txt ================================================ 0,39,81,81,87,81,39,0 ================================================ FILE: src/examples/blob/tiles/7x8/tile4.txt ================================================ 0,37,85,85,87,81,33,0 ================================================ FILE: src/examples/blob/tiles/7x8/tile5.txt ================================================ 0,39,84,84,87,81,39,0 ================================================ FILE: src/examples/blob/tiles/7x8/tile6.txt ================================================ 0,39,84,84,87,85,39,0 ================================================ FILE: src/examples/blob/tiles/7x8/tile7.txt ================================================ 0,39,81,81,82,82,34,0 ================================================ FILE: src/examples/blob/tiles/7x8/tile8.txt ================================================ 0,39,85,85,87,85,39,0 ================================================ FILE: src/examples/blob/tiles/7x8/tile9.txt ================================================ 0,39,85,85,87,81,33,0 ================================================ FILE: src/examples/blob/tiles/8x6/tile0.txt ================================================ 66,165,165,165,165,66 ================================================ FILE: src/examples/blob/tiles/8x6/tile1.txt ================================================ 66,166,162,162,162,71 ================================================ FILE: src/examples/blob/tiles/8x6/tile10.txt ================================================ 66,197,69,69,69,226 ================================================ FILE: src/examples/blob/tiles/8x6/tile11.txt ================================================ 66,198,66,66,66,231 ================================================ FILE: src/examples/blob/tiles/8x6/tile12.txt ================================================ 67,197,65,66,68,231 ================================================ FILE: src/examples/blob/tiles/8x6/tile13.txt ================================================ 71,193,65,71,65,231 ================================================ FILE: src/examples/blob/tiles/8x6/tile14.txt ================================================ 69,197,69,71,65,225 ================================================ FILE: src/examples/blob/tiles/8x6/tile15.txt ================================================ 71,196,68,71,65,231 ================================================ FILE: src/examples/blob/tiles/8x6/tile16.txt ================================================ 71,196,68,71,69,231 ================================================ FILE: src/examples/blob/tiles/8x6/tile17.txt ================================================ 71,193,65,66,66,226 ================================================ FILE: src/examples/blob/tiles/8x6/tile18.txt ================================================ 71,197,69,71,69,231 ================================================ FILE: src/examples/blob/tiles/8x6/tile19.txt ================================================ 71,197,69,71,65,225 ================================================ FILE: src/examples/blob/tiles/8x6/tile2.txt ================================================ 67,165,161,162,164,71 ================================================ FILE: src/examples/blob/tiles/8x6/tile20.txt ================================================ 98,165,37,69,133,226 ================================================ FILE: src/examples/blob/tiles/8x6/tile21.txt ================================================ 98,166,34,66,130,231 ================================================ FILE: src/examples/blob/tiles/8x6/tile22.txt ================================================ 99,165,33,66,132,231 ================================================ FILE: src/examples/blob/tiles/8x6/tile23.txt ================================================ 103,161,33,71,129,231 ================================================ FILE: src/examples/blob/tiles/8x6/tile24.txt ================================================ 101,165,37,71,129,225 ================================================ FILE: src/examples/blob/tiles/8x6/tile25.txt ================================================ 103,164,36,71,129,231 ================================================ FILE: src/examples/blob/tiles/8x6/tile26.txt ================================================ 103,164,36,71,133,231 ================================================ FILE: src/examples/blob/tiles/8x6/tile3.txt ================================================ 71,161,161,167,161,71 ================================================ FILE: src/examples/blob/tiles/8x6/tile4.txt ================================================ 69,165,165,167,161,65 ================================================ FILE: src/examples/blob/tiles/8x6/tile5.txt ================================================ 71,164,164,167,161,71 ================================================ FILE: src/examples/blob/tiles/8x6/tile6.txt ================================================ 71,164,164,167,165,71 ================================================ FILE: src/examples/blob/tiles/8x6/tile7.txt ================================================ 71,161,161,162,162,66 ================================================ FILE: src/examples/blob/tiles/8x6/tile8.txt ================================================ 71,165,165,167,165,71 ================================================ FILE: src/examples/blob/tiles/8x6/tile9.txt ================================================ 71,165,165,167,161,65 ================================================ FILE: src/examples/blob/tiles/8x8/tile0.txt ================================================ $00,$00,$00,$01,$01,$07,$1f,$3f ================================================ FILE: src/examples/blob/tiles/8x8/tile1.txt ================================================ $00,$00,$00,$80,$80,$e0,$f8,$fc ================================================ FILE: src/examples/blob/tiles/8x8/tile10.txt ================================================ $c0,$e0,$f0,$50,$50,$f0,$f0,$e0 ================================================ FILE: src/examples/blob/tiles/8x8/tile11.txt ================================================ $03,$07,$0f,$0a,$0a,$0f,$0f,$07 ================================================ FILE: src/examples/blob/tiles/8x8/tile12.txt ================================================ $c0,$e0,$f0,$00,$b0,$f0,$f0,$e0 ================================================ FILE: src/examples/blob/tiles/8x8/tile13.txt ================================================ $03,$07,$0f,$00,$0d,$0f,$0f,$07 ================================================ FILE: src/examples/blob/tiles/8x8/tile14.txt ================================================ $c0,$e0,$f0,$50,$f0,$10,$f0,$e0 ================================================ FILE: src/examples/blob/tiles/8x8/tile15.txt ================================================ $03,$07,$0f,$0a,$0f,$08,$0f,$07 ================================================ FILE: src/examples/blob/tiles/8x8/tile16.txt ================================================ $ff,$aa,$ff,$aa,$ff,$00,$00,$00 ================================================ FILE: src/examples/blob/tiles/8x8/tile17.txt ================================================ $ff,$55,$22,$55,$ff,$00,$00,$00 ================================================ FILE: src/examples/blob/tiles/8x8/tile18.txt ================================================ 0,0,0,0,16,56,16,0 ================================================ FILE: src/examples/blob/tiles/8x8/tile19.txt ================================================ 16,40,68,146,68,40,16,16 ================================================ FILE: src/examples/blob/tiles/8x8/tile2.txt ================================================ $01,$07,$0f,$1f,$1f,$3f,$7f,$ff ================================================ FILE: src/examples/blob/tiles/8x8/tile20.txt ================================================ 60,126,231,195,195,231,126,60 ================================================ FILE: src/examples/blob/tiles/8x8/tile21.txt ================================================ 0,1,7,12,6,2,3,1 ================================================ FILE: src/examples/blob/tiles/8x8/tile22.txt ================================================ 128,192,64,96,48,224,128,0 ================================================ FILE: src/examples/blob/tiles/8x8/tile23.txt ================================================ 0,0,0,0,8,28,116,198 ================================================ FILE: src/examples/blob/tiles/8x8/tile24.txt ================================================ 99,46,56,16,0,0,0,0 ================================================ FILE: src/examples/blob/tiles/8x8/tile25.txt ================================================ 16,56,46,99,198,116,28,8 ================================================ FILE: src/examples/blob/tiles/8x8/tile26.txt ================================================ 0,0,0,24,52,122,52,24 ================================================ FILE: src/examples/blob/tiles/8x8/tile3.txt ================================================ $80,$e0,$f0,$f8,$f8,$fc,$fe,$ff ================================================ FILE: src/examples/blob/tiles/8x8/tile4.txt ================================================ $3c,$7e,$ff,$f5,$f5,$ff,$ff,$fe ================================================ FILE: src/examples/blob/tiles/8x8/tile5.txt ================================================ $3c,$7e,$ff,$af,$af,$ff,$ff,$7f ================================================ FILE: src/examples/blob/tiles/8x8/tile6.txt ================================================ $3c,$7e,$ff,$f0,$fb,$ff,$ff,$fe ================================================ FILE: src/examples/blob/tiles/8x8/tile7.txt ================================================ $3c,$7e,$ff,$0f,$df,$ff,$ff,$7f ================================================ FILE: src/examples/blob/tiles/8x8/tile8.txt ================================================ $3c,$7e,$ff,$f5,$ff,$f1,$ff,$fe ================================================ FILE: src/examples/blob/tiles/8x8/tile9.txt ================================================ $3c,$7e,$ff,$af,$ff,$8f,$ff,$7f ================================================ FILE: src/examples/blob/tiles/ASCII/char_tiles.h ================================================ #ifndef _CHAR_TILES_H #define _CHAR_TILES_H #include "cross_lib.h" #define _TILE_0 '*' #define _TILE_1 '*' #define _TILE_2 '-' #define _TILE_3 '-' // Apple #define _TILE_4 'O' // Body #define _TILE_5 'O' #define _TILE_6 'H' #define _TILE_7 '=' #if defined(_XL_NO_COLOR) #define _TILE_8 'R' #else #define _TILE_8 'O' #endif #define _TILE_9 'L' #define _TILE_10 '=' #define _TILE_11 'I' #define _TILE_12 'I' #define _TILE_13 '-' #define _TILE_14 'S' #define _TILE_15 'I' #define _TILE_16 'C' #define _TILE_17 'X' #if defined(_XL_NO_COLOR) #define _TILE_18 'S' #else #define _TILE_18 'O' #endif #define _TILE_26 'J' #endif // _CHAR_TILES_H ================================================ FILE: src/examples/boundary/Makefile.boundary ================================================ FULL_FILES ?= \ $(BASIC_CROSS_LIB_FILES) \ $(CROSS_LIB_PATH)/sleep/sleep_macros.c \ $(SOURCE_PATH)/main.c GAME_NAME := boundary PARENT_DIR = examples include ./$(PARENT_DIR)/$(GAME_NAME)/config/project_config.mk include ./Makefile_common include ./makefiles.common/auxiliary/Makefile_default_values ================================================ FILE: src/examples/boundary/config/project_config.mk ================================================ ##################################################################### # SLOWDOWN VALUES # Common factor _COMMON_SLOWDOWN_FACTOR=10 # CC65 _APPLE2_SLOWDOWN=30 _APPLE2ENH_SLOWDOWN=30 _APPLE2_HGR_SLOWDOWN=50 _APPLE2ENH_HGR_SLOWDOWN=50 _ATARI_SLOWDOWN=70 _ATARI5200_SLOWDOWN=70 _C16_SLOWDOWN=55 _C64_SLOWDOWN=45 _CREATIVISION_SLOWDOWN=100 _GAMATE_SLOWDOWN=120 _ORIC_SLOWDOWN=40 _NES_SLOWDOWN=80 _PET_SLOWDOWN=40 _PCE_SLOWDOWN=550 _SUPERVISION_SLOWDOWN=140 _VIC20_SLOWDOWN=55 # Z88DK _AQUARIUS_SLOWDOWN=105 _ACE_SLOWDOWN=100 _C128_Z80_40COL_SLOWDOWN=20 _C128_Z80_80COL_SLOWDOWN=1 _CPC_MODE0_SLOWDOWN=100 _CPC_CPCRSLIB_MODE1_SLOWDOWN=90 _CPC_MODE2_SLOWDOWN=90 _CPM_Z80_SLOWDOWN=90 _CPM_INTEL8080_SLOWDOWN=80 _COLECO_SLOWDOWN=100 _GB_SLOWDOWN=280 _GG_SLOWDOWN=300 _GB_WAIT_VSYNC_SLOWDOWN=150 _LASER500_SLOWDOWN=200 _MC1000_SLOWDOWN=75 _MSX_SLOWDOWN=200 _MSX_FIXED_COLORS_SLOWDOWN=300 _MTX500_SLOWDOWN=200 _MTX512_SLOWDOWN=200 _MZ_SLOWDOWN=200 _SAMCOUPE_SLOWDOWN=300 _SMS_SLOWDOWN=160 _SPECTRUM_SLOWDOWN=160 _VG5K_SLOWDOWN=75 _VZ200_SLOWDOWN=250 _ZX81_SLOWDOWN=10 _ZX81_WRX_SLOWDOWN=1 # CMOC _COCO_SLOWDOWN=160 _DRAGON_SLOWDOWN=160 _MO5_SLOWDOWN=160 _TO7_SLOWDOWN=160 # LCC1802 _COMX_SLOWDOWN=30 _PECOM_SLOWDOWN=30 _TMC600_SLOWDOWN=50 _MICRO_SLOWDOWN=60 _CIDELSA_SLOWDOWN=40 # CC6303 _MC10_SLOWDOWN=12 # GCC _NCURSES_SLOWDOWN=12 ================================================ FILE: src/examples/boundary/main.c ================================================ /* --------------------------------------------------------------------------------------- */ // // CROSS SHOOT by Fabrizio Caruso // // Fabrizio_Caruso@hotmail.com // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from // the use of this software. // Permission is granted to anyone to use this software for non-commercial applications, // subject to the following restrictions: // 1. The origin of this software must not be misrepresented; you must not // claim that you wrote the original software. If you use this software in // a product, an acknowledgment in the product documentation would be // appreciated but is not required. // 2. Altered source versions must be plainly marked as such, and must not // be misrepresented as being the original software. // 3. This notice may not be removed or altered from any source distribution. /* --------------------------------------------------------------------------------------- */ #include "cross_lib.h" int main(void) { uint8_t i; _XL_INIT_GRAPHICS(); _XL_CLEAR_SCREEN(); _XL_SET_TEXT_COLOR(_XL_WHITE); _XL_PRINT((XSize-11)/2,YSize-2,"HELLO WORLD"); for(i=0;i=38 const char color_name[NUMBER_OF_COLORS][MAX_STRING_SIZE] = { "WHITE ", "RED ", "CYAN ", "GREEN ", "YELLOW ", "BLUE ", "MAGENTA ", }; #define NAME_SIZE 7 #else const char color_name[NUMBER_OF_COLORS][MAX_STRING_SIZE] = { "WH ", "RE ", "CY ", "GR ", "YE ", "BL ", "MA ", }; #define NAME_SIZE 2 #endif #if YSize<=9 #define SHORT_X_OFFSET 4 #define SHOOT_Y_OFFSET 8 #elif YSize<=14 #define SHORT_X_OFFSET 5 #define SHOOT_Y_OFFSET 5 #else #define SHORT_X_OFFSET 0 #define SHOOT_Y_OFFSET 0 #endif #if _XL_NUMBER_OF_TILES>=XSize-NAME_SIZE #define DISPLAYED_TILES (XSize-NAME_SIZE-1)-SHORT_X_OFFSET #define OFFSET (NAME_SIZE+1) #else #define DISPLAYED_TILES _XL_NUMBER_OF_TILES #define OFFSET (NAME_SIZE+1) #endif int main(void) { uint8_t i; uint8_t j; _XL_INIT_GRAPHICS(); _XL_INIT_SOUND(); _XL_INIT_INPUT(); // for(;;) // { _XL_CLEAR_SCREEN(); for(j=0;j=16 && YSize>=15 _XL_PRINT(XSize-1-1,0,"TX"); _XL_PRINT(XSize-1-1,3,"CL"); #if defined(_XL_NO_TEXT_COLOR) _XL_PRINT(XSize-1-2,1,"OFF"); #else _XL_PRINT(XSize-1-1,1,"ON"); #endif #if defined(_XL_NO_COLOR) _XL_PRINT(XSize-1-2, 4,"OFF"); #else _XL_PRINT(XSize-1-1, 4,"ON"); #endif #endif _XL_SET_TEXT_COLOR(color_code[j]); _XL_PRINT(0,0+j, (char *) color_name[j]); _XL_PRINT(NAME_SIZE+1,0+j,"0123456789"); } for(j=0;j=16 _XL_SET_TEXT_COLOR(FIRST_COLOR); _XL_PRINT(COL_OFFSET,YSize-4, _PRESS); #endif for(i=0;i<_XL_NUMBER_OF_TILES;++i) { _XL_DRAW((i&7)*CHAR_SKIP+COL_OFFSET,(i/8)*LINE_SKIP+ROW_OFFSET,tiles[i],tile_color[j]); _XL_SLOW_DOWN(_XL_SLOW_DOWN_FACTOR); } _XL_SLOW_DOWN(_XL_SLOW_DOWN_FACTOR); _XL_WAIT_FOR_INPUT(); } } _XL_PRINT(COL_OFFSET,YSize-5, "END OF DEMO"); while(1){}; return EXIT_SUCCESS; } ================================================ FILE: src/examples/graphics/shapes/6x8/shape0.txt ================================================ ...... .#..#. #.##.# #.##.# #.##.# #.##.# .#..#. ...... ================================================ FILE: src/examples/graphics/shapes/6x8/shape1.txt ================================================ ...... .#..#. #.###. #.#.#. #.#.#. #.#.#. .#.### ...... ================================================ FILE: src/examples/graphics/shapes/6x8/shape10.txt ================================================ ...... .#..#. ##.#.# .#.#.# .#.#.# .#.#.# ###.#. ...... ================================================ FILE: src/examples/graphics/shapes/6x8/shape11.txt ================================================ ...... .#..#. ##.##. .#..#. .#..#. .#..#. ###### ...... ================================================ FILE: src/examples/graphics/shapes/6x8/shape12.txt ================================================ ...... .#..## ##.#.# .#...# .#..#. .#.#.. ###### ...... ================================================ FILE: src/examples/graphics/shapes/6x8/shape13.txt ================================================ ...... .#.### ##...# .#...# .#.### .#...# ###### ...... ================================================ FILE: src/examples/graphics/shapes/6x8/shape14.txt ================================================ ...... .#.#.# ##.#.# .#.#.# .#.### .#...# ###..# ...... ================================================ FILE: src/examples/graphics/shapes/6x8/shape15.txt ================================================ ...... .#.### ##.#.. .#.#.. .#.### .#...# ###### ...... ================================================ FILE: src/examples/graphics/shapes/6x8/shape16.txt ================================================ ...... .#.### ##.#.. .#.#.. .#.### .#.#.# ###### ...... ================================================ FILE: src/examples/graphics/shapes/6x8/shape17.txt ================================================ ...... .#.### ##...# .#...# .#..#. .#..#. ###.#. ...... ================================================ FILE: src/examples/graphics/shapes/6x8/shape18.txt ================================================ ...... .#.### ##.#.# .#.#.# .#.### .#.#.# ###### ...... ================================================ FILE: src/examples/graphics/shapes/6x8/shape19.txt ================================================ ...... .#.### ##.#.# .#.#.# .#.### .#...# ###..# ...... ================================================ FILE: src/examples/graphics/shapes/6x8/shape2.txt ================================================ ...... .#..## #.##.# #.#..# #.#.#. #.##.. .#.### ...... ================================================ FILE: src/examples/graphics/shapes/6x8/shape20.txt ================================================ ...... .##.#. #.##.# ..##.# .#.#.# #..#.# ###.#. ...... ================================================ FILE: src/examples/graphics/shapes/6x8/shape21.txt ================================================ ...... .##.#. #.###. ..#.#. .#..#. #...#. ###### ...... ================================================ FILE: src/examples/graphics/shapes/6x8/shape22.txt ================================================ ...... .##.## #.##.# ..#..# .#..#. #..#.. ###### ...... ================================================ FILE: src/examples/graphics/shapes/6x8/shape23.txt ================================================ ...... .##### #.#..# ..#..# .#.### #....# ###### ...... ================================================ FILE: src/examples/graphics/shapes/6x8/shape24.txt ================================================ ...... .###.# #.##.# ..##.# .#.### #....# ###..# ...... ================================================ FILE: src/examples/graphics/shapes/6x8/shape25.txt ================================================ ...... .##### #.##.. ..##.. .#.### #....# ###### ...... ================================================ FILE: src/examples/graphics/shapes/6x8/shape26.txt ================================================ ...... .##### #.##.. ..##.. .#.### #..#.# ###### ...... ================================================ FILE: src/examples/graphics/shapes/6x8/shape3.txt ================================================ ...... .#.### #.#..# #.#..# #.#### #.#..# .#.### ...... ================================================ FILE: src/examples/graphics/shapes/6x8/shape4.txt ================================================ ...... .#.#.# #.##.# #.##.# #.#### #.#..# .#...# ...... ================================================ FILE: src/examples/graphics/shapes/6x8/shape5.txt ================================================ ...... .#.### #.##.. #.##.. #.#### #.#..# .#.### ...... ================================================ FILE: src/examples/graphics/shapes/6x8/shape6.txt ================================================ ...... .#.### #.##.. #.##.. #.#### #.##.# .#.### ...... ================================================ FILE: src/examples/graphics/shapes/6x8/shape7.txt ================================================ ...... .#.### #.#..# #.#..# #.#.#. #.#.#. .#..#. ....... ================================================ FILE: src/examples/graphics/shapes/6x8/shape8.txt ================================================ ...... .#.### #.##.# #.##.# #.#### #.##.# .#.### ...... ================================================ FILE: src/examples/graphics/shapes/6x8/shape9.txt ================================================ ...... .#.### #.##.# #.##.# #.#### #.#..# .#...# ...... ================================================ FILE: src/examples/graphics/shapes/6x9/shape0.txt ================================================ ...... ...... .#..#. #.##.# #.##.# #.##.# #.##.# .#..#. ...... ================================================ FILE: src/examples/graphics/shapes/6x9/shape1.txt ================================================ ...... ...... .#..#. #.###. #.#.#. #.#.#. #.#.#. .#.### ...... ================================================ FILE: src/examples/graphics/shapes/6x9/shape10.txt ================================================ ...... ...... .#..#. ##.#.# .#.#.# .#.#.# .#.#.# ###.#. ...... ================================================ FILE: src/examples/graphics/shapes/6x9/shape11.txt ================================================ ...... ...... .#..#. ##.##. .#..#. .#..#. .#..#. ###### ...... ================================================ FILE: src/examples/graphics/shapes/6x9/shape12.txt ================================================ ...... ...... .#..## ##.#.# .#...# .#..#. .#.#.. ###### ...... ================================================ FILE: src/examples/graphics/shapes/6x9/shape13.txt ================================================ ...... ...... .#.### ##...# .#...# .#.### .#...# ###### ...... ================================================ FILE: src/examples/graphics/shapes/6x9/shape14.txt ================================================ ...... ...... .#.#.# ##.#.# .#.#.# .#.### .#...# ###..# ...... ================================================ FILE: src/examples/graphics/shapes/6x9/shape15.txt ================================================ ...... ...... .#.### ##.#.. .#.#.. .#.### .#...# ###### ...... ================================================ FILE: src/examples/graphics/shapes/6x9/shape16.txt ================================================ ...... ...... .#.### ##.#.. .#.#.. .#.### .#.#.# ###### ...... ================================================ FILE: src/examples/graphics/shapes/6x9/shape17.txt ================================================ ...... ...... .#.### ##...# .#...# .#..#. .#..#. ###.#. ...... ================================================ FILE: src/examples/graphics/shapes/6x9/shape18.txt ================================================ ...... ...... .#.### ##.#.# .#.#.# .#.### .#.#.# ###### ...... ================================================ FILE: src/examples/graphics/shapes/6x9/shape19.txt ================================================ ...... ...... .#.### ##.#.# .#.#.# .#.### .#...# ###..# ...... ================================================ FILE: src/examples/graphics/shapes/6x9/shape2.txt ================================================ ...... ...... .#..## #.##.# #.#..# #.#.#. #.##.. .#.### ...... ================================================ FILE: src/examples/graphics/shapes/6x9/shape20.txt ================================================ ...... ...... .##.#. #.##.# ..##.# .#.#.# #..#.# ###.#. ...... ================================================ FILE: src/examples/graphics/shapes/6x9/shape21.txt ================================================ ...... ...... .##.#. #.###. ..#.#. .#..#. #...#. ###### ...... ================================================ FILE: src/examples/graphics/shapes/6x9/shape22.txt ================================================ ...... ...... .##.## #.##.# ..#..# .#..#. #..#.. ###### ...... ================================================ FILE: src/examples/graphics/shapes/6x9/shape23.txt ================================================ ...... ...... .##### #.#..# ..#..# .#.### #....# ###### ...... ================================================ FILE: src/examples/graphics/shapes/6x9/shape24.txt ================================================ ...... ...... .###.# #.##.# ..##.# .#.### #....# ###..# ...... ================================================ FILE: src/examples/graphics/shapes/6x9/shape25.txt ================================================ ...... ...... .##### #.##.. ..##.. .#.### #....# ###### ...... ================================================ FILE: src/examples/graphics/shapes/6x9/shape26.txt ================================================ ...... ...... .##### #.##.. ..##.. .#.### #..#.# ###### ...... ================================================ FILE: src/examples/graphics/shapes/6x9/shape3.txt ================================================ ...... ...... .#.### #.#..# #.#..# #.#### #.#..# .#.### ...... ================================================ FILE: src/examples/graphics/shapes/6x9/shape4.txt ================================================ ...... ...... .#.#.# #.##.# #.##.# #.#### #.#..# .#...# ...... ================================================ FILE: src/examples/graphics/shapes/6x9/shape5.txt ================================================ ...... ...... .#.### #.##.. #.##.. #.#### #.#..# .#.### ...... ================================================ FILE: src/examples/graphics/shapes/6x9/shape6.txt ================================================ ...... ...... .#.### #.##.. #.##.. #.#### #.##.# .#.### ...... ================================================ FILE: src/examples/graphics/shapes/6x9/shape7.txt ================================================ ...... ...... .#.### #.#..# #.#..# #.#.#. #.#.#. .#..#. ....... ================================================ FILE: src/examples/graphics/shapes/6x9/shape8.txt ================================================ ...... ...... .#.### #.##.# #.##.# #.#### #.##.# .#.### ...... ================================================ FILE: src/examples/graphics/shapes/6x9/shape9.txt ================================================ ...... ...... .#.### #.##.# #.##.# #.#### #.#..# .#...# ...... ================================================ FILE: src/examples/graphics/shapes/7x8/shape0.txt ================================================ ....... .#...#. #.#.#.# #.#.#.# #.#.#.# #.#.#.# .#...#. ....... ================================================ FILE: src/examples/graphics/shapes/7x8/shape1.txt ================================================ ....... .#...#. #.#.##. #.#..#. #.#..#. #.#..#. .#..### ....... ================================================ FILE: src/examples/graphics/shapes/7x8/shape10.txt ================================================ ....... .#...#. ##..#.# .#..#.# .#..#.# .#..#.# ###..#. ....... ================================================ FILE: src/examples/graphics/shapes/7x8/shape11.txt ================================================ ....... .#...#. ##..##. .#...#. .#...#. .#...#. ###.### ....... ================================================ FILE: src/examples/graphics/shapes/7x8/shape12.txt ================================================ ....... .#...## ##..#.# .#....# .#...#. .#..#.. ###.### ....... ================================================ FILE: src/examples/graphics/shapes/7x8/shape13.txt ================================================ ....... .#..### ##....# .#....# .#..### .#....# ###.### ....... ================================================ FILE: src/examples/graphics/shapes/7x8/shape14.txt ================================================ ....... .#..#.# ##..#.# .#..#.# .#..### .#....# ###...# ....... ================================================ FILE: src/examples/graphics/shapes/7x8/shape15.txt ================================================ ....... .#..### ##..#.. .#..#.. .#..### .#....# ###.### ....... ================================================ FILE: src/examples/graphics/shapes/7x8/shape16.txt ================================================ ....... .#..### ##..#.. .#..#.. .#..### .#..#.# ###.### ....... ================================================ FILE: src/examples/graphics/shapes/7x8/shape17.txt ================================================ ....... .#..### ##....# .#....# .#...#. .#...#. ###..#. ....... ================================================ FILE: src/examples/graphics/shapes/7x8/shape18.txt ================================================ ....... .#..### ##..#.# .#..#.# .#..### .#..#.# ###.### ....... ================================================ FILE: src/examples/graphics/shapes/7x8/shape19.txt ================================================ ....... .#..### ##..#.# .#..#.# .#..### .#....# ###...# ....... ================================================ FILE: src/examples/graphics/shapes/7x8/shape2.txt ================================================ ....... .#...## #.#.#.# #.#...# #.#..#. #.#.#.. .#..### ....... ================================================ FILE: src/examples/graphics/shapes/7x8/shape20.txt ================================================ ....... .##..#. #.#.#.# ..#.#.# .#..#.# #...#.# ###..#. ....... ================================================ FILE: src/examples/graphics/shapes/7x8/shape21.txt ================================================ ....... .##..#. #.#.##. ..#..#. .#...#. #....#. ###.### ....... ================================================ FILE: src/examples/graphics/shapes/7x8/shape22.txt ================================================ ....... .##..## #.#.#.# ..#...# .#...#. #...#.. ###.### ....... ================================================ FILE: src/examples/graphics/shapes/7x8/shape23.txt ================================================ ....... .##.### #.#...# ..#...# .#..### #.....# ###.### ....... ================================================ FILE: src/examples/graphics/shapes/7x8/shape24.txt ================================================ ....... .##.#.# #.#.#.# ..#.#.# .#..### #.....# ###...# ....... ================================================ FILE: src/examples/graphics/shapes/7x8/shape25.txt ================================================ ....... .##.### #.#.#.. ..#.#.. .#..### #.....# ###.### ....... ================================================ FILE: src/examples/graphics/shapes/7x8/shape26.txt ================================================ ....... .##.### #.#.#.. ..#.#.. .#..### #...#.# ###.### ....... ================================================ FILE: src/examples/graphics/shapes/7x8/shape3.txt ================================================ ....... .#..### #.#...# #.#...# #.#.### #.#...# .#..### ....... ================================================ FILE: src/examples/graphics/shapes/7x8/shape4.txt ================================================ ....... .#..#.# #.#.#.# #.#.#.# #.#.### #.#...# .#....# ....... ================================================ FILE: src/examples/graphics/shapes/7x8/shape5.txt ================================================ ....... .#..### #.#.#.. #.#.#.. #.#.### #.#...# .#..### ....... ================================================ FILE: src/examples/graphics/shapes/7x8/shape6.txt ================================================ ....... .#..### #.#.#.. #.#.#.. #.#.### #.#.#.# .#..### ....... ================================================ FILE: src/examples/graphics/shapes/7x8/shape7.txt ================================================ ....... .#..### #.#...# #.#...# #.#..#. #.#..#. .#...#. ........ ================================================ FILE: src/examples/graphics/shapes/7x8/shape8.txt ================================================ ....... .#..### #.#.#.# #.#.#.# #.#.### #.#.#.# .#..### ....... ================================================ FILE: src/examples/graphics/shapes/7x8/shape9.txt ================================================ ....... .#..### #.#.#.# #.#.#.# #.#.### #.#...# .#....# ....... ================================================ FILE: src/examples/graphics/shapes/8x6/shape0.txt ================================================ .#....#. #.#..#.# #.#..#.# #.#..#.# #.#..#.# .#....#. ================================================ FILE: src/examples/graphics/shapes/8x6/shape1.txt ================================================ .#....#. #.#..##. #.#...#. #.#...#. #.#...#. .#...### ================================================ FILE: src/examples/graphics/shapes/8x6/shape10.txt ================================================ .#....#. ##...#.# .#...#.# .#...#.# .#...#.# ###...#. ================================================ FILE: src/examples/graphics/shapes/8x6/shape11.txt ================================================ .#....#. ##...##. .#....#. .#....#. .#....#. ###..### ================================================ FILE: src/examples/graphics/shapes/8x6/shape12.txt ================================================ .#....## ##...#.# .#.....# .#....#. .#...#.. ###..### ================================================ FILE: src/examples/graphics/shapes/8x6/shape13.txt ================================================ .#...### ##.....# .#.....# .#...### .#.....# ###..### ================================================ FILE: src/examples/graphics/shapes/8x6/shape14.txt ================================================ .#...#.# ##...#.# .#...#.# .#...### .#.....# ###....# ================================================ FILE: src/examples/graphics/shapes/8x6/shape15.txt ================================================ .#...### ##...#.. .#...#.. .#...### .#.....# ###..### ================================================ FILE: src/examples/graphics/shapes/8x6/shape16.txt ================================================ .#...### ##...#.. .#...#.. .#...### .#...#.# ###..### ================================================ FILE: src/examples/graphics/shapes/8x6/shape17.txt ================================================ .#...### ##.....# .#.....# .#....#. .#....#. ###...#. ================================================ FILE: src/examples/graphics/shapes/8x6/shape18.txt ================================================ .#...### ##...#.# .#...#.# .#...### .#...#.# ###..### ================================================ FILE: src/examples/graphics/shapes/8x6/shape19.txt ================================================ .#...### ##...#.# .#...#.# .#...### .#.....# ###....# ================================================ FILE: src/examples/graphics/shapes/8x6/shape2.txt ================================================ .#....## #.#..#.# #.#....# #.#...#. #.#..#.. .#...### ================================================ FILE: src/examples/graphics/shapes/8x6/shape20.txt ================================================ .##...#. #.#..#.# ..#..#.# .#...#.# #....#.# ###...#. ================================================ FILE: src/examples/graphics/shapes/8x6/shape21.txt ================================================ .##...#. #.#..##. ..#...#. .#....#. #.....#. ###..### ================================================ FILE: src/examples/graphics/shapes/8x6/shape22.txt ================================================ .##...## #.#..#.# ..#....# .#....#. #....#.. ###..### ================================================ FILE: src/examples/graphics/shapes/8x6/shape23.txt ================================================ .##..### #.#....# ..#....# .#...### #......# ###..### ================================================ FILE: src/examples/graphics/shapes/8x6/shape24.txt ================================================ .##..#.# #.#..#.# ..#..#.# .#...### #......# ###....# ================================================ FILE: src/examples/graphics/shapes/8x6/shape25.txt ================================================ .##..### #.#..#.. ..#..#.. .#...### #......# ###..### ================================================ FILE: src/examples/graphics/shapes/8x6/shape26.txt ================================================ .##..### #.#..#.. ..#..#.. .#...### #....#.# ###..### ================================================ FILE: src/examples/graphics/shapes/8x6/shape3.txt ================================================ .#...### #.#....# #.#....# #.#..### #.#....# .#...### ================================================ FILE: src/examples/graphics/shapes/8x6/shape4.txt ================================================ .#...#.# #.#..#.# #.#..#.# #.#..### #.#....# .#.....# ================================================ FILE: src/examples/graphics/shapes/8x6/shape5.txt ================================================ .#...### #.#..#.. #.#..#.. #.#..### #.#....# .#...### ================================================ FILE: src/examples/graphics/shapes/8x6/shape6.txt ================================================ .#...### #.#..#.. #.#..#.. #.#..### #.#..#.# .#...### ================================================ FILE: src/examples/graphics/shapes/8x6/shape7.txt ================================================ .#...### #.#....# #.#....# #.#...#. #.#...#. .#....#. ================================================ FILE: src/examples/graphics/shapes/8x6/shape8.txt ================================================ .#...### #.#..#.# #.#..#.# #.#..### #.#..#.# .#...### ================================================ FILE: src/examples/graphics/shapes/8x6/shape9.txt ================================================ .#...### #.#..#.# #.#..#.# #.#..### #.#....# .#.....# ================================================ FILE: src/examples/graphics/shapes/8x8/shape0.txt ================================================ ........ .#....#. #.#..#.# #.#..#.# #.#..#.# #.#..#.# .#....#. ........ ================================================ FILE: src/examples/graphics/shapes/8x8/shape1.txt ================================================ ........ .#....#. #.#..##. #.#...#. #.#...#. #.#...#. .#...### ........ ================================================ FILE: src/examples/graphics/shapes/8x8/shape10.txt ================================================ ........ .#....#. ##...#.# .#...#.# .#...#.# .#...#.# ###...#. ........ ================================================ FILE: src/examples/graphics/shapes/8x8/shape11.txt ================================================ ........ .#....#. ##...##. .#....#. .#....#. .#....#. ###..### ........ ================================================ FILE: src/examples/graphics/shapes/8x8/shape12.txt ================================================ ........ .#....## ##...#.# .#.....# .#....#. .#...#.. ###..### ........ ================================================ FILE: src/examples/graphics/shapes/8x8/shape13.txt ================================================ ........ .#...### ##.....# .#.....# .#...### .#.....# ###..### ........ ================================================ FILE: src/examples/graphics/shapes/8x8/shape14.txt ================================================ ........ .#...#.# ##...#.# .#...#.# .#...### .#.....# ###....# ........ ================================================ FILE: src/examples/graphics/shapes/8x8/shape15.txt ================================================ ........ .#...### ##...#.. .#...#.. .#...### .#.....# ###..### ........ ================================================ FILE: src/examples/graphics/shapes/8x8/shape16.txt ================================================ ........ .#...### ##...#.. .#...#.. .#...### .#...#.# ###..### ........ ================================================ FILE: src/examples/graphics/shapes/8x8/shape17.txt ================================================ ........ .#...### ##.....# .#.....# .#....#. .#....#. ###...#. ........ ================================================ FILE: src/examples/graphics/shapes/8x8/shape18.txt ================================================ ........ .#...### ##...#.# .#...#.# .#...### .#...#.# ###..### ........ ================================================ FILE: src/examples/graphics/shapes/8x8/shape19.txt ================================================ ........ .#...### ##...#.# .#...#.# .#...### .#.....# ###....# ........ ================================================ FILE: src/examples/graphics/shapes/8x8/shape2.txt ================================================ ........ .#....## #.#..#.# #.#....# #.#...#. #.#..#.. .#...### ........ ================================================ FILE: src/examples/graphics/shapes/8x8/shape20.txt ================================================ ........ .##...#. #.#..#.# ..#..#.# .#...#.# #....#.# ###...#. ........ ================================================ FILE: src/examples/graphics/shapes/8x8/shape21.txt ================================================ ........ .##...#. #.#..##. ..#...#. .#....#. #.....#. ###..### ........ ================================================ FILE: src/examples/graphics/shapes/8x8/shape22.txt ================================================ ........ .##...## #.#..#.# ..#....# .#....#. #....#.. ###..### ........ ================================================ FILE: src/examples/graphics/shapes/8x8/shape23.txt ================================================ ........ .##..### #.#....# ..#....# .#...### #......# ###..### ........ ================================================ FILE: src/examples/graphics/shapes/8x8/shape24.txt ================================================ ........ .##..#.# #.#..#.# ..#..#.# .#...### #......# ###....# ........ ================================================ FILE: src/examples/graphics/shapes/8x8/shape25.txt ================================================ ........ .##..### #.#..#.. ..#..#.. .#...### #......# ###..### ........ ================================================ FILE: src/examples/graphics/shapes/8x8/shape26.txt ================================================ ........ .##..### #.#..#.. ..#..#.. .#...### #....#.# ###..### ........ ================================================ FILE: src/examples/graphics/shapes/8x8/shape3.txt ================================================ ........ .#...### #.#....# #.#....# #.#..### #.#....# .#...### ........ ================================================ FILE: src/examples/graphics/shapes/8x8/shape4.txt ================================================ ........ .#...#.# #.#..#.# #.#..#.# #.#..### #.#....# .#.....# ........ ================================================ FILE: src/examples/graphics/shapes/8x8/shape5.txt ================================================ ........ .#...### #.#..#.. #.#..#.. #.#..### #.#....# .#...### ........ ================================================ FILE: src/examples/graphics/shapes/8x8/shape6.txt ================================================ ........ .#...### #.#..#.. #.#..#.. #.#..### #.#..#.# .#...### ........ ================================================ FILE: src/examples/graphics/shapes/8x8/shape7.txt ================================================ ........ .#...### #.#....# #.#....# #.#...#. #.#...#. .#....#. ......... ================================================ FILE: src/examples/graphics/shapes/8x8/shape8.txt ================================================ ........ .#...### #.#..#.# #.#..#.# #.#..### #.#..#.# .#...### ........ ================================================ FILE: src/examples/graphics/shapes/8x8/shape9.txt ================================================ ........ .#...### #.#..#.# #.#..#.# #.#..### #.#....# .#.....# ........ ================================================ FILE: src/examples/graphics/tiles/6x8/tile0.txt ================================================ 0,18,45,45,45,45,18,0 ================================================ FILE: src/examples/graphics/tiles/6x8/tile1.txt ================================================ 0,18,46,42,42,42,23,0 ================================================ FILE: src/examples/graphics/tiles/6x8/tile10.txt ================================================ 0,18,53,21,21,21,58,0 ================================================ FILE: src/examples/graphics/tiles/6x8/tile11.txt ================================================ 0,18,54,18,18,18,63,0 ================================================ FILE: src/examples/graphics/tiles/6x8/tile12.txt ================================================ 0,19,53,17,18,20,63,0 ================================================ FILE: src/examples/graphics/tiles/6x8/tile13.txt ================================================ 0,23,49,17,23,17,63,0 ================================================ FILE: src/examples/graphics/tiles/6x8/tile14.txt ================================================ 0,21,53,21,23,17,57,0 ================================================ FILE: src/examples/graphics/tiles/6x8/tile15.txt ================================================ 0,23,52,20,23,17,63,0 ================================================ FILE: src/examples/graphics/tiles/6x8/tile16.txt ================================================ 0,23,52,20,23,21,63,0 ================================================ FILE: src/examples/graphics/tiles/6x8/tile17.txt ================================================ 0,23,49,17,18,18,58,0 ================================================ FILE: src/examples/graphics/tiles/6x8/tile18.txt ================================================ 0,23,53,21,23,21,63,0 ================================================ FILE: src/examples/graphics/tiles/6x8/tile19.txt ================================================ 0,23,53,21,23,17,57,0 ================================================ FILE: src/examples/graphics/tiles/6x8/tile2.txt ================================================ 0,19,45,41,42,44,23,0 ================================================ FILE: src/examples/graphics/tiles/6x8/tile20.txt ================================================ 0,26,45,13,21,37,58,0 ================================================ FILE: src/examples/graphics/tiles/6x8/tile21.txt ================================================ 0,26,46,10,18,34,63,0 ================================================ FILE: src/examples/graphics/tiles/6x8/tile22.txt ================================================ 0,27,45,9,18,36,63,0 ================================================ FILE: src/examples/graphics/tiles/6x8/tile23.txt ================================================ 0,31,41,9,23,33,63,0 ================================================ FILE: src/examples/graphics/tiles/6x8/tile24.txt ================================================ 0,29,45,13,23,33,57,0 ================================================ FILE: src/examples/graphics/tiles/6x8/tile25.txt ================================================ 0,31,44,12,23,33,63,0 ================================================ FILE: src/examples/graphics/tiles/6x8/tile26.txt ================================================ 0,31,44,12,23,37,63,0 ================================================ FILE: src/examples/graphics/tiles/6x8/tile3.txt ================================================ 0,23,41,41,47,41,23,0 ================================================ FILE: src/examples/graphics/tiles/6x8/tile4.txt ================================================ 0,21,45,45,47,41,17,0 ================================================ FILE: src/examples/graphics/tiles/6x8/tile5.txt ================================================ 0,23,44,44,47,41,23,0 ================================================ FILE: src/examples/graphics/tiles/6x8/tile6.txt ================================================ 0,23,44,44,47,45,23,0 ================================================ FILE: src/examples/graphics/tiles/6x8/tile7.txt ================================================ 0,23,41,41,42,42,18,0 ================================================ FILE: src/examples/graphics/tiles/6x8/tile8.txt ================================================ 0,23,45,45,47,45,23,0 ================================================ FILE: src/examples/graphics/tiles/6x8/tile9.txt ================================================ 0,23,45,45,47,41,17,0 ================================================ FILE: src/examples/graphics/tiles/6x9/tile0.txt ================================================ 0,0,18,45,45,45,45,18,0 ================================================ FILE: src/examples/graphics/tiles/6x9/tile1.txt ================================================ 0,0,18,46,42,42,42,23,0 ================================================ FILE: src/examples/graphics/tiles/6x9/tile10.txt ================================================ 0,0,18,53,21,21,21,58,0 ================================================ FILE: src/examples/graphics/tiles/6x9/tile11.txt ================================================ 0,0,18,54,18,18,18,63,0 ================================================ FILE: src/examples/graphics/tiles/6x9/tile12.txt ================================================ 0,0,19,53,17,18,20,63,0 ================================================ FILE: src/examples/graphics/tiles/6x9/tile13.txt ================================================ 0,0,23,49,17,23,17,63,0 ================================================ FILE: src/examples/graphics/tiles/6x9/tile14.txt ================================================ 0,0,21,53,21,23,17,57,0 ================================================ FILE: src/examples/graphics/tiles/6x9/tile15.txt ================================================ 0,0,23,52,20,23,17,63,0 ================================================ FILE: src/examples/graphics/tiles/6x9/tile16.txt ================================================ 0,0,23,52,20,23,21,63,0 ================================================ FILE: src/examples/graphics/tiles/6x9/tile17.txt ================================================ 0,0,23,49,17,18,18,58,0 ================================================ FILE: src/examples/graphics/tiles/6x9/tile18.txt ================================================ 0,0,23,53,21,23,21,63,0 ================================================ FILE: src/examples/graphics/tiles/6x9/tile19.txt ================================================ 0,0,23,53,21,23,17,57,0 ================================================ FILE: src/examples/graphics/tiles/6x9/tile2.txt ================================================ 0,0,19,45,41,42,44,23,0 ================================================ FILE: src/examples/graphics/tiles/6x9/tile20.txt ================================================ 0,0,26,45,13,21,37,58,0 ================================================ FILE: src/examples/graphics/tiles/6x9/tile21.txt ================================================ 0,0,26,46,10,18,34,63,0 ================================================ FILE: src/examples/graphics/tiles/6x9/tile22.txt ================================================ 0,0,27,45,9,18,36,63,0 ================================================ FILE: src/examples/graphics/tiles/6x9/tile23.txt ================================================ 0,0,31,41,9,23,33,63,0 ================================================ FILE: src/examples/graphics/tiles/6x9/tile24.txt ================================================ 0,0,29,45,13,23,33,57,0 ================================================ FILE: src/examples/graphics/tiles/6x9/tile25.txt ================================================ 0,0,31,44,12,23,33,63,0 ================================================ FILE: src/examples/graphics/tiles/6x9/tile26.txt ================================================ 0,0,31,44,12,23,37,63,0 ================================================ FILE: src/examples/graphics/tiles/6x9/tile3.txt ================================================ 0,0,23,41,41,47,41,23,0 ================================================ FILE: src/examples/graphics/tiles/6x9/tile4.txt ================================================ 0,0,21,45,45,47,41,17,0 ================================================ FILE: src/examples/graphics/tiles/6x9/tile5.txt ================================================ 0,0,23,44,44,47,41,23,0 ================================================ FILE: src/examples/graphics/tiles/6x9/tile6.txt ================================================ 0,0,23,44,44,47,45,23,0 ================================================ FILE: src/examples/graphics/tiles/6x9/tile7.txt ================================================ 0,0,23,41,41,42,42,18,0 ================================================ FILE: src/examples/graphics/tiles/6x9/tile8.txt ================================================ 0,0,23,45,45,47,45,23,0 ================================================ FILE: src/examples/graphics/tiles/6x9/tile9.txt ================================================ 0,0,23,45,45,47,41,17,0 ================================================ FILE: src/examples/graphics/tiles/7x8/tile0.txt ================================================ 0,34,85,85,85,85,34,0 ================================================ FILE: src/examples/graphics/tiles/7x8/tile1.txt ================================================ 0,34,86,82,82,82,39,0 ================================================ FILE: src/examples/graphics/tiles/7x8/tile10.txt ================================================ 0,34,101,37,37,37,114,0 ================================================ FILE: src/examples/graphics/tiles/7x8/tile11.txt ================================================ 0,34,102,34,34,34,119,0 ================================================ FILE: src/examples/graphics/tiles/7x8/tile12.txt ================================================ 0,35,101,33,34,36,119,0 ================================================ FILE: src/examples/graphics/tiles/7x8/tile13.txt ================================================ 0,39,97,33,39,33,119,0 ================================================ FILE: src/examples/graphics/tiles/7x8/tile14.txt ================================================ 0,37,101,37,39,33,113,0 ================================================ FILE: src/examples/graphics/tiles/7x8/tile15.txt ================================================ 0,39,100,36,39,33,119,0 ================================================ FILE: src/examples/graphics/tiles/7x8/tile16.txt ================================================ 0,39,100,36,39,37,119,0 ================================================ FILE: src/examples/graphics/tiles/7x8/tile17.txt ================================================ 0,39,97,33,34,34,114,0 ================================================ FILE: src/examples/graphics/tiles/7x8/tile18.txt ================================================ 0,39,101,37,39,37,119,0 ================================================ FILE: src/examples/graphics/tiles/7x8/tile19.txt ================================================ 0,39,101,37,39,33,113,0 ================================================ FILE: src/examples/graphics/tiles/7x8/tile2.txt ================================================ 0,35,85,81,82,84,39,0 ================================================ FILE: src/examples/graphics/tiles/7x8/tile20.txt ================================================ 0,50,85,21,37,69,114,0 ================================================ FILE: src/examples/graphics/tiles/7x8/tile21.txt ================================================ 0,50,86,18,34,66,119,0 ================================================ FILE: src/examples/graphics/tiles/7x8/tile22.txt ================================================ 0,51,85,17,34,68,119,0 ================================================ FILE: src/examples/graphics/tiles/7x8/tile23.txt ================================================ 0,55,81,17,39,65,119,0 ================================================ FILE: src/examples/graphics/tiles/7x8/tile24.txt ================================================ 0,53,85,21,39,65,113,0 ================================================ FILE: src/examples/graphics/tiles/7x8/tile25.txt ================================================ 0,55,84,20,39,65,119,0 ================================================ FILE: src/examples/graphics/tiles/7x8/tile26.txt ================================================ 0,55,84,20,39,69,119,0 ================================================ FILE: src/examples/graphics/tiles/7x8/tile3.txt ================================================ 0,39,81,81,87,81,39,0 ================================================ FILE: src/examples/graphics/tiles/7x8/tile4.txt ================================================ 0,37,85,85,87,81,33,0 ================================================ FILE: src/examples/graphics/tiles/7x8/tile5.txt ================================================ 0,39,84,84,87,81,39,0 ================================================ FILE: src/examples/graphics/tiles/7x8/tile6.txt ================================================ 0,39,84,84,87,85,39,0 ================================================ FILE: src/examples/graphics/tiles/7x8/tile7.txt ================================================ 0,39,81,81,82,82,34,0 ================================================ FILE: src/examples/graphics/tiles/7x8/tile8.txt ================================================ 0,39,85,85,87,85,39,0 ================================================ FILE: src/examples/graphics/tiles/7x8/tile9.txt ================================================ 0,39,85,85,87,81,33,0 ================================================ FILE: src/examples/graphics/tiles/8x6/tile0.txt ================================================ 66,165,165,165,165,66 ================================================ FILE: src/examples/graphics/tiles/8x6/tile1.txt ================================================ 66,166,162,162,162,71 ================================================ FILE: src/examples/graphics/tiles/8x6/tile10.txt ================================================ 66,197,69,69,69,226 ================================================ FILE: src/examples/graphics/tiles/8x6/tile11.txt ================================================ 66,198,66,66,66,231 ================================================ FILE: src/examples/graphics/tiles/8x6/tile12.txt ================================================ 67,197,65,66,68,231 ================================================ FILE: src/examples/graphics/tiles/8x6/tile13.txt ================================================ 71,193,65,71,65,231 ================================================ FILE: src/examples/graphics/tiles/8x6/tile14.txt ================================================ 69,197,69,71,65,225 ================================================ FILE: src/examples/graphics/tiles/8x6/tile15.txt ================================================ 71,196,68,71,65,231 ================================================ FILE: src/examples/graphics/tiles/8x6/tile16.txt ================================================ 71,196,68,71,69,231 ================================================ FILE: src/examples/graphics/tiles/8x6/tile17.txt ================================================ 71,193,65,66,66,226 ================================================ FILE: src/examples/graphics/tiles/8x6/tile18.txt ================================================ 71,197,69,71,69,231 ================================================ FILE: src/examples/graphics/tiles/8x6/tile19.txt ================================================ 71,197,69,71,65,225 ================================================ FILE: src/examples/graphics/tiles/8x6/tile2.txt ================================================ 67,165,161,162,164,71 ================================================ FILE: src/examples/graphics/tiles/8x6/tile20.txt ================================================ 98,165,37,69,133,226 ================================================ FILE: src/examples/graphics/tiles/8x6/tile21.txt ================================================ 98,166,34,66,130,231 ================================================ FILE: src/examples/graphics/tiles/8x6/tile22.txt ================================================ 99,165,33,66,132,231 ================================================ FILE: src/examples/graphics/tiles/8x6/tile23.txt ================================================ 103,161,33,71,129,231 ================================================ FILE: src/examples/graphics/tiles/8x6/tile24.txt ================================================ 101,165,37,71,129,225 ================================================ FILE: src/examples/graphics/tiles/8x6/tile25.txt ================================================ 103,164,36,71,129,231 ================================================ FILE: src/examples/graphics/tiles/8x6/tile26.txt ================================================ 103,164,36,71,133,231 ================================================ FILE: src/examples/graphics/tiles/8x6/tile3.txt ================================================ 71,161,161,167,161,71 ================================================ FILE: src/examples/graphics/tiles/8x6/tile4.txt ================================================ 69,165,165,167,161,65 ================================================ FILE: src/examples/graphics/tiles/8x6/tile5.txt ================================================ 71,164,164,167,161,71 ================================================ FILE: src/examples/graphics/tiles/8x6/tile6.txt ================================================ 71,164,164,167,165,71 ================================================ FILE: src/examples/graphics/tiles/8x6/tile7.txt ================================================ 71,161,161,162,162,66 ================================================ FILE: src/examples/graphics/tiles/8x6/tile8.txt ================================================ 71,165,165,167,165,71 ================================================ FILE: src/examples/graphics/tiles/8x6/tile9.txt ================================================ 71,165,165,167,161,65 ================================================ FILE: src/examples/graphics/tiles/8x8/tile0.txt ================================================ 0,66,165,165,165,165,66,0 ================================================ FILE: src/examples/graphics/tiles/8x8/tile1.txt ================================================ 0,66,166,162,162,162,71,0 ================================================ FILE: src/examples/graphics/tiles/8x8/tile10.txt ================================================ 0,66,197,69,69,69,226,0 ================================================ FILE: src/examples/graphics/tiles/8x8/tile11.txt ================================================ 0,66,198,66,66,66,231,0 ================================================ FILE: src/examples/graphics/tiles/8x8/tile12.txt ================================================ 0,67,197,65,66,68,231,0 ================================================ FILE: src/examples/graphics/tiles/8x8/tile13.txt ================================================ 0,71,193,65,71,65,231,0 ================================================ FILE: src/examples/graphics/tiles/8x8/tile14.txt ================================================ 0,69,197,69,71,65,225,0 ================================================ FILE: src/examples/graphics/tiles/8x8/tile15.txt ================================================ 0,71,196,68,71,65,231,0 ================================================ FILE: src/examples/graphics/tiles/8x8/tile16.txt ================================================ 0,71,196,68,71,69,231,0 ================================================ FILE: src/examples/graphics/tiles/8x8/tile17.txt ================================================ 0,71,193,65,66,66,226,0 ================================================ FILE: src/examples/graphics/tiles/8x8/tile18.txt ================================================ 0,71,197,69,71,69,231,0 ================================================ FILE: src/examples/graphics/tiles/8x8/tile19.txt ================================================ 0,71,197,69,71,65,225,0 ================================================ FILE: src/examples/graphics/tiles/8x8/tile2.txt ================================================ 0,67,165,161,162,164,71,0 ================================================ FILE: src/examples/graphics/tiles/8x8/tile20.txt ================================================ 0,98,165,37,69,133,226,0 ================================================ FILE: src/examples/graphics/tiles/8x8/tile21.txt ================================================ 0,98,166,34,66,130,231,0 ================================================ FILE: src/examples/graphics/tiles/8x8/tile22.txt ================================================ 0,99,165,33,66,132,231,0 ================================================ FILE: src/examples/graphics/tiles/8x8/tile23.txt ================================================ 0,103,161,33,71,129,231,0 ================================================ FILE: src/examples/graphics/tiles/8x8/tile24.txt ================================================ 0,101,165,37,71,129,225,0 ================================================ FILE: src/examples/graphics/tiles/8x8/tile25.txt ================================================ 0,103,164,36,71,129,231,0 ================================================ FILE: src/examples/graphics/tiles/8x8/tile26.txt ================================================ 0,103,164,36,71,133,231,0 ================================================ FILE: src/examples/graphics/tiles/8x8/tile3.txt ================================================ 0,71,161,161,167,161,71,0 ================================================ FILE: src/examples/graphics/tiles/8x8/tile4.txt ================================================ 0,69,165,165,167,161,65,0 ================================================ FILE: src/examples/graphics/tiles/8x8/tile5.txt ================================================ 0,71,164,164,167,161,71,0 ================================================ FILE: src/examples/graphics/tiles/8x8/tile6.txt ================================================ 0,71,164,164,167,165,71,0 ================================================ FILE: src/examples/graphics/tiles/8x8/tile7.txt ================================================ 0,71,161,161,162,162,66,0 ================================================ FILE: src/examples/graphics/tiles/8x8/tile8.txt ================================================ 0,71,165,165,167,165,71,0 ================================================ FILE: src/examples/graphics/tiles/8x8/tile9.txt ================================================ 0,71,165,165,167,161,65,0 ================================================ FILE: src/examples/graphics/tiles/ASCII/char_tiles.h ================================================ #ifndef _CHAR_TILES_H #define _CHAR_TILES_H #include "cross_lib.h" #define _TILE_0 '*' #define _TILE_1 '*' #define _TILE_2 '-' #define _TILE_3 '-' // Apple #define _TILE_4 'O' // Body #define _TILE_5 'O' #define _TILE_6 'H' #define _TILE_7 '=' #if defined(_XL_NO_COLOR) #define _TILE_8 'R' #else #define _TILE_8 'O' #endif #define _TILE_9 'L' #define _TILE_10 '=' #define _TILE_11 'I' #define _TILE_12 'I' #define _TILE_13 '-' #define _TILE_14 'S' #define _TILE_15 'I' #define _TILE_16 'C' #define _TILE_17 'X' #if defined(_XL_NO_COLOR) #define _TILE_18 'S' #else #define _TILE_18 'O' #endif #define _TILE_26 'J' #endif // _CHAR_TILES_H ================================================ FILE: src/examples/graphics/tools/digit_0.txt ================================================ .... ..#. .#.# .#.# .#.# .#.# ..#. .... ================================================ FILE: src/examples/graphics/tools/digit_1.txt ================================================ .... ..#. .##. ..#. ..#. ..#. .### .... ================================================ FILE: src/examples/graphics/tools/digit_2.txt ================================================ .... ..## .#.# ...# ..#. .#.. .### .... ================================================ FILE: src/examples/graphics/tools/digit_3.txt ================================================ .... .### ...# ...# .### ...# .### .... ================================================ FILE: src/examples/graphics/tools/digit_4.txt ================================================ .... .#.# .#.# .#.# .### ...# ...# .... ================================================ FILE: src/examples/graphics/tools/digit_5.txt ================================================ .... .### .#.. .#.. .### ...# .### .... ================================================ FILE: src/examples/graphics/tools/digit_6.txt ================================================ .... .### .#.. .#.. .### .#.# .### .... ================================================ FILE: src/examples/graphics/tools/digit_7.txt ================================================ .... .### ...# ...# ..#. ..#. ..#. ..... ================================================ FILE: src/examples/graphics/tools/digit_8.txt ================================================ .... .### .#.# .#.# .### .#.# .### .... ================================================ FILE: src/examples/graphics/tools/digit_9.txt ================================================ .... .### .#.# .#.# .### ...# ...# .... ================================================ FILE: src/examples/graphics/tools/extract_least.py ================================================ import sys if __name__ == "__main__": iFile = open(sys.argv[1]) oFile = open(sys.argv[2],'w') counter = 1 for line in iFile: line_len = len(line.strip()) # print(str(counter) + ": " + line) right_part = line[int(line_len/2):] counter+=1 oFile.write(right_part) ================================================ FILE: src/examples/graphics/tools/join_digits.py ================================================ import sys if __name__ == "__main__": iLhsFile = open(sys.argv[1]) lhs = [] lhsLength = 0 for lhsLine in iLhsFile: lhs.append(lhsLine) lhsLength+=1 iLhsFile.close() # print(str(lhs)) iRhsFile = open(sys.argv[2]) rhs = [] rhsLength = 0 for rhsLine in iRhsFile: rhs.append(rhsLine) rhsLength+=1 iRhsFile.close() # print(str(rhs)) oFile = open(sys.argv[3],'w') for counter in range(0,max(lhsLength,rhsLength)): # print(counter) oFile.write(lhs[counter].strip()+rhs[counter]) oFile.close() ================================================ FILE: src/examples/graphics/tools/shape0.txt ================================================ ........ .#....#. #.#..#.# #.#..#.# #.#..#.# #.#..#.# .#....#. ........ ================================================ FILE: src/examples/graphics/tools/shape1.txt ================================================ ........ .#....#. #.#..##. #.#...#. #.#...#. #.#...#. .#...### ........ ================================================ FILE: src/examples/graphics/tools/shape2.txt ================================================ ........ .#....## #.#..#.# #.#....# #.#...#. #.#..#.. .#...### ........ ================================================ FILE: src/examples/graphics/tools/shape3.txt ================================================ ........ .#...### #.#....# #.#....# #.#..### #.#....# .#...### ........ ================================================ FILE: src/examples/graphics/tools/shape4.txt ================================================ ........ .#...#.# #.#..#.# #.#..#.# #.#..### #.#....# .#.....# ........ ================================================ FILE: src/examples/graphics/tools/shape5.txt ================================================ ........ .#...### #.#..#.. #.#..#.. #.#..### #.#....# .#...### ........ ================================================ FILE: src/examples/graphics/tools/shape6.txt ================================================ ........ .#...### #.#..#.. #.#..#.. #.#..### #.#..#.# .#...### ........ ================================================ FILE: src/examples/graphics/tools/shape7.txt ================================================ ........ .#...### #.#....# #.#....# #.#...#. #.#...#. .#....#. ......... ================================================ FILE: src/examples/graphics/tools/shape8.txt ================================================ ........ .#...### #.#..#.# #.#..#.# #.#..### #.#..#.# .#...### ........ ================================================ FILE: src/examples/graphics/tools/shape9.txt ================================================ ........ .#...### #.#..#.# #.#..#.# #.#..### #.#....# .#.....# ........ ================================================ FILE: src/examples/graphics/tools/test.txt ================================================ ........ ..#...#. .#.#.##. .#.#..#. .#.#..#. .#.#..#. ..#..### ........ ================================================ FILE: src/examples/hello/Makefile.hello ================================================ FULL_FILES ?= \ $(BASIC_CROSS_LIB_FILES) \ $(CROSS_LIB_PATH)/sleep/sleep_macros.c \ $(SOURCE_PATH)/main.c GAME_NAME := hello PARENT_DIR = examples include ./$(PARENT_DIR)/$(GAME_NAME)/config/project_config.mk include ./Makefile_common include ./makefiles.common/auxiliary/Makefile_default_values ================================================ FILE: src/examples/hello/config/project_config.mk ================================================ ##################################################################### # SLOWDOWN VALUES # Common factor _COMMON_SLOWDOWN_FACTOR=10 # CC65 _APPLE2_SLOWDOWN=30 _APPLE2ENH_SLOWDOWN=30 _APPLE2_HGR_SLOWDOWN=50 _APPLE2ENH_HGR_SLOWDOWN=50 _ATARI_SLOWDOWN=70 _ATARI5200_SLOWDOWN=70 _C16_SLOWDOWN=55 _C64_SLOWDOWN=45 _CREATIVISION_SLOWDOWN=100 _GAMATE_SLOWDOWN=120 _ORIC_SLOWDOWN=40 _NES_SLOWDOWN=80 _PET_SLOWDOWN=40 _PCE_SLOWDOWN=550 _SUPERVISION_SLOWDOWN=140 _VIC20_SLOWDOWN=55 # Z88DK _AQUARIUS_SLOWDOWN=105 _ACE_SLOWDOWN=100 _C128_Z80_40COL_SLOWDOWN=20 _C128_Z80_80COL_SLOWDOWN=1 _CPC_MODE0_SLOWDOWN=100 _CPC_CPCRSLIB_MODE1_SLOWDOWN=90 _CPC_MODE2_SLOWDOWN=90 _CPM_Z80_SLOWDOWN=90 _CPM_INTEL8080_SLOWDOWN=80 _COLECO_SLOWDOWN=100 _GB_SLOWDOWN=280 _GG_SLOWDOWN=300 _GB_WAIT_VSYNC_SLOWDOWN=150 _LASER500_SLOWDOWN=200 _MC1000_SLOWDOWN=75 _MSX_SLOWDOWN=200 _MSX_FIXED_COLORS_SLOWDOWN=300 _MTX500_SLOWDOWN=200 _MTX512_SLOWDOWN=200 _MZ_SLOWDOWN=200 _SAMCOUPE_SLOWDOWN=300 _SMS_SLOWDOWN=160 _SPECTRUM_SLOWDOWN=160 _VG5K_SLOWDOWN=75 _VZ200_SLOWDOWN=250 _ZX81_SLOWDOWN=10 _ZX81_WRX_SLOWDOWN=1 # CMOC _COCO_SLOWDOWN=160 _DRAGON_SLOWDOWN=160 _MO5_SLOWDOWN=160 _TO7_SLOWDOWN=160 # LCC1802 _COMX_SLOWDOWN=30 _PECOM_SLOWDOWN=30 _TMC600_SLOWDOWN=50 _MICRO_SLOWDOWN=60 _CIDELSA_SLOWDOWN=40 # CC6303 _MC10_SLOWDOWN=12 # GCC _NCURSES_SLOWDOWN=12 ================================================ FILE: src/examples/hello/main.c ================================================ /* --------------------------------------------------------------------------------------- */ // // CROSS SHOOT by Fabrizio Caruso // // Fabrizio_Caruso@hotmail.com // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from // the use of this software. // Permission is granted to anyone to use this software for non-commercial applications, // subject to the following restrictions: // 1. The origin of this software must not be misrepresented; you must not // claim that you wrote the original software. If you use this software in // a product, an acknowledgment in the product documentation would be // appreciated but is not required. // 2. Altered source versions must be plainly marked as such, and must not // be misrepresented as being the original software. // 3. This notice may not be removed or altered from any source distribution. /* --------------------------------------------------------------------------------------- */ #include "cross_lib.h" int main(void) { _XL_INIT_GRAPHICS(); _XL_CLEAR_SCREEN(); _XL_SET_TEXT_COLOR(_XL_WHITE); _XL_PRINT(XSize/2-5,YSize/2,"HELLO WORLD"); _XL_REFRESH(); while(1){}; return EXIT_SUCCESS; } ================================================ FILE: src/examples/hello/tiles/6x8/tile0.txt ================================================ 12,18,12,51,45,12,18,18 ================================================ FILE: src/examples/hello/tiles/6x8/tile1.txt ================================================ 0,0,12,18,12,51,45,12 ================================================ FILE: src/examples/hello/tiles/6x8/tile10.txt ================================================ 0,0,0,32,16,40,8,8 ================================================ FILE: src/examples/hello/tiles/6x8/tile11.txt ================================================ 0,0,0,1,2,5,4,4 ================================================ FILE: src/examples/hello/tiles/6x8/tile12.txt ================================================ 16,56,16,60,18,21,57,41 ================================================ FILE: src/examples/hello/tiles/6x8/tile13.txt ================================================ 0,0,0,15,16,40,39,32 ================================================ FILE: src/examples/hello/tiles/6x8/tile14.txt ================================================ 0,42,42,58,42,42,0,0 ================================================ FILE: src/examples/hello/tiles/6x8/tile15.txt ================================================ 0,37,37,37,37,50,0,0 ================================================ FILE: src/examples/hello/tiles/6x8/tile16.txt ================================================ 0,0,0,60,2,5,57,1 ================================================ FILE: src/examples/hello/tiles/6x8/tile17.txt ================================================ 2,7,2,2,2,2,2,5 ================================================ FILE: src/examples/hello/tiles/6x8/tile18.txt ================================================ 16,56,16,16,16,16,16,40 ================================================ FILE: src/examples/hello/tiles/6x8/tile19.txt ================================================ 45,18,12,51,45,12,18,18 ================================================ FILE: src/examples/hello/tiles/6x8/tile2.txt ================================================ 18,18,0,0,0,0,0,0 ================================================ FILE: src/examples/hello/tiles/6x8/tile20.txt ================================================ 0,0,45,18,12,51,45,12 ================================================ FILE: src/examples/hello/tiles/6x8/tile21.txt ================================================ 0,0,0,0,45,18,12,51 ================================================ FILE: src/examples/hello/tiles/6x8/tile22.txt ================================================ 0,0,0,0,0,0,45,18 ================================================ FILE: src/examples/hello/tiles/6x8/tile23.txt ================================================ 0,4,21,14,27,14,21,4 ================================================ FILE: src/examples/hello/tiles/6x8/tile24.txt ================================================ 63,41,63,37,63,41,63,37 ================================================ FILE: src/examples/hello/tiles/6x8/tile25.txt ================================================ 63,8, 31, 16, 30, 2,62, 63 ================================================ FILE: src/examples/hello/tiles/6x8/tile25_ORIG.txt ================================================ 0,8, 31, 16, 30, 2,62, 4 ================================================ FILE: src/examples/hello/tiles/6x8/tile3.txt ================================================ 0,0,0,0,12,18,12,51 ================================================ FILE: src/examples/hello/tiles/6x8/tile4.txt ================================================ 45,12,18,18,0,0,0,0 ================================================ FILE: src/examples/hello/tiles/6x8/tile5.txt ================================================ 0,0,0,0,0,0,12,18 ================================================ FILE: src/examples/hello/tiles/6x8/tile6.txt ================================================ 12,51,45,12,18,18,0,0 ================================================ FILE: src/examples/hello/tiles/6x8/tile7.txt ================================================ 12,18,12,0,45,0,18,18 ================================================ FILE: src/examples/hello/tiles/6x8/tile8.txt ================================================ 0,12,18,33,33,18,12,0 ================================================ FILE: src/examples/hello/tiles/6x8/tile9.txt ================================================ 2,7,2,15,18,42,39,37 ================================================ FILE: src/examples/hello/tiles/6x9/tile0.txt ================================================ 12,18,12,51,45,12,18,18,18 ================================================ FILE: src/examples/hello/tiles/6x9/tile1.txt ================================================ 0,0,0,12,18,12,51,45,12 ================================================ FILE: src/examples/hello/tiles/6x9/tile10.txt ================================================ 0,0,0,0,32,16,40,8,8 ================================================ FILE: src/examples/hello/tiles/6x9/tile11.txt ================================================ 0,0,0,0,1,2,5,4,4 ================================================ FILE: src/examples/hello/tiles/6x9/tile12.txt ================================================ 0,16,56,16,60,18,21,57,41 ================================================ FILE: src/examples/hello/tiles/6x9/tile13.txt ================================================ 0,0,0,0,15,16,40,39,32 ================================================ FILE: src/examples/hello/tiles/6x9/tile14.txt ================================================ 0,0,42,42,58,42,42,0,0 ================================================ FILE: src/examples/hello/tiles/6x9/tile15.txt ================================================ 0,0,37,37,37,37,50,0,0 ================================================ FILE: src/examples/hello/tiles/6x9/tile16.txt ================================================ 0,0,0,0,60,2,5,57,1 ================================================ FILE: src/examples/hello/tiles/6x9/tile17.txt ================================================ 2,2,7,2,2,2,2,2,5 ================================================ FILE: src/examples/hello/tiles/6x9/tile18.txt ================================================ 16,16,56,16,16,16,16,16,40 ================================================ FILE: src/examples/hello/tiles/6x9/tile19.txt ================================================ 45,18,12,51,45,12,18,18,18 ================================================ FILE: src/examples/hello/tiles/6x9/tile2.txt ================================================ 18,18,18,0,0,0,0,0,0 ================================================ FILE: src/examples/hello/tiles/6x9/tile20.txt ================================================ 0,0,0,45,18,12,51,45,12 ================================================ FILE: src/examples/hello/tiles/6x9/tile21.txt ================================================ 0,0,0,0,0,45,18,12,51 ================================================ FILE: src/examples/hello/tiles/6x9/tile22.txt ================================================ 0,0,0,0,0,0,0,45,18 ================================================ FILE: src/examples/hello/tiles/6x9/tile23.txt ================================================ 0,0,4,21,14,27,14,21,4 ================================================ FILE: src/examples/hello/tiles/6x9/tile24.txt ================================================ 0,63,41,63,37,63,41,63,37 ================================================ FILE: src/examples/hello/tiles/6x9/tile25 _ORIG.txt ================================================ 0,8, 31, 16, 30, 2,62, 4,0 ================================================ FILE: src/examples/hello/tiles/6x9/tile25.txt ================================================ 63,8, 31, 16, 30, 2,62, 4,63 ================================================ FILE: src/examples/hello/tiles/6x9/tile3.txt ================================================ 0,0,0,0,0,12,18,12,51 ================================================ FILE: src/examples/hello/tiles/6x9/tile4.txt ================================================ 45,12,18,18,0,0,0,0,0 ================================================ FILE: src/examples/hello/tiles/6x9/tile5.txt ================================================ 0,0,0,0,0,0,0,12,18 ================================================ FILE: src/examples/hello/tiles/6x9/tile6.txt ================================================ 12,51,45,12,18,18,18,0,0 ================================================ FILE: src/examples/hello/tiles/6x9/tile7.txt ================================================ 12,18,12,0,45,0,18,18 ================================================ FILE: src/examples/hello/tiles/6x9/tile8.txt ================================================ 0,0,12,18,33,33,18,12,0 ================================================ FILE: src/examples/hello/tiles/6x9/tile9.txt ================================================ 0,2,7,2,15,18,42,39,37 ================================================ FILE: src/examples/hello/tiles/7x8/tile0.txt ================================================ 12,18,12,51,45,12,18,18 ================================================ FILE: src/examples/hello/tiles/7x8/tile1.txt ================================================ 0,0,12,18,12,51,45,12 ================================================ FILE: src/examples/hello/tiles/7x8/tile10.txt ================================================ 0,0,0,32,16,40,8,8 ================================================ FILE: src/examples/hello/tiles/7x8/tile11.txt ================================================ 0,0,0,1,2,5,4,4 ================================================ FILE: src/examples/hello/tiles/7x8/tile12.txt ================================================ 16,56,16,60,18,21,57,41 ================================================ FILE: src/examples/hello/tiles/7x8/tile13.txt ================================================ 0,0,0,15,16,40,39,32 ================================================ FILE: src/examples/hello/tiles/7x8/tile14.txt ================================================ 0,42,42,58,42,42,0,0 ================================================ FILE: src/examples/hello/tiles/7x8/tile15.txt ================================================ 0,37,37,37,37,50,0,0 ================================================ FILE: src/examples/hello/tiles/7x8/tile16.txt ================================================ 0,0,0,60,2,5,57,1 ================================================ FILE: src/examples/hello/tiles/7x8/tile17.txt ================================================ 2,7,2,2,2,2,2,5 ================================================ FILE: src/examples/hello/tiles/7x8/tile18.txt ================================================ 16,56,16,16,16,16,16,40 ================================================ FILE: src/examples/hello/tiles/7x8/tile19.txt ================================================ 45,18,12,51,45,12,18,18 ================================================ FILE: src/examples/hello/tiles/7x8/tile2.txt ================================================ 18,18,0,0,0,0,0,0 ================================================ FILE: src/examples/hello/tiles/7x8/tile20.txt ================================================ 0,0,45,18,12,51,45,12 ================================================ FILE: src/examples/hello/tiles/7x8/tile21.txt ================================================ 0,0,0,0,45,18,12,51 ================================================ FILE: src/examples/hello/tiles/7x8/tile22.txt ================================================ 0,0,0,0,0,0,45,18 ================================================ FILE: src/examples/hello/tiles/7x8/tile23.txt ================================================ 0,4,21,14,27,14,21,4 ================================================ FILE: src/examples/hello/tiles/7x8/tile24.txt ================================================ 63,41,63,37,63,41,63,37 ================================================ FILE: src/examples/hello/tiles/7x8/tile25.txt ================================================ $ff,$3e,$60,$3c,$06,$7c,$18,$ff ================================================ FILE: src/examples/hello/tiles/7x8/tile25_ORIG.txt ================================================ $18,$3e,$60,$3c,$06,$7c,$18,$00 ================================================ FILE: src/examples/hello/tiles/7x8/tile3.txt ================================================ 0,0,0,0,12,18,12,51 ================================================ FILE: src/examples/hello/tiles/7x8/tile4.txt ================================================ 45,12,18,18,0,0,0,0 ================================================ FILE: src/examples/hello/tiles/7x8/tile5.txt ================================================ 0,0,0,0,0,0,12,18 ================================================ FILE: src/examples/hello/tiles/7x8/tile6.txt ================================================ 12,51,45,12,18,18,0,0 ================================================ FILE: src/examples/hello/tiles/7x8/tile7.txt ================================================ 12,18,12,0,45,0,18,18 ================================================ FILE: src/examples/hello/tiles/7x8/tile8.txt ================================================ 0,12,18,33,33,18,12,0 ================================================ FILE: src/examples/hello/tiles/7x8/tile9.txt ================================================ 2,7,2,15,18,42,39,37 ================================================ FILE: src/examples/hello/tiles/8x8/tile0.txt ================================================ 24, 36, 24,102,153, 24, 36,36 ================================================ FILE: src/examples/hello/tiles/8x8/tile1.txt ================================================ 0,0,24, 36, 24,102,89, 24 ================================================ FILE: src/examples/hello/tiles/8x8/tile10.txt ================================================ 0,0,0,192,32,80,144,0 ================================================ FILE: src/examples/hello/tiles/8x8/tile11.txt ================================================ 0,0,0,3,4,10,9,0 ================================================ FILE: src/examples/hello/tiles/8x8/tile12.txt ================================================ 32,112,32,252,34,37,249,80 ================================================ FILE: src/examples/hello/tiles/8x8/tile13.txt ================================================ 0, 0, 0,63,64,160,159,0 ================================================ FILE: src/examples/hello/tiles/8x8/tile14.txt ================================================ $2A,$2A,$2A,$3A,$2A,$2A,$2A,$00 ================================================ FILE: src/examples/hello/tiles/8x8/tile15.txt ================================================ 74,74,74,74,74,74,100,0 ================================================ FILE: src/examples/hello/tiles/8x8/tile16.txt ================================================ 0,0,0,252,2,5,249,0 ================================================ FILE: src/examples/hello/tiles/8x8/tile17.txt ================================================ 2,7,2,2,2,2,2,5 ================================================ FILE: src/examples/hello/tiles/8x8/tile18.txt ================================================ 32,112,32,32,32,32,32,80 ================================================ FILE: src/examples/hello/tiles/8x8/tile19.txt ================================================ 90,36, 24,102,153, 24, 36,36 ================================================ FILE: src/examples/hello/tiles/8x8/tile2.txt ================================================ 36,36,0,0,0,0,0,0 ================================================ FILE: src/examples/hello/tiles/8x8/tile20.txt ================================================ 0,0,90,36, 24,102,89, 24 ================================================ FILE: src/examples/hello/tiles/8x8/tile21.txt ================================================ 0,0,0,0,90,36, 24,102 ================================================ FILE: src/examples/hello/tiles/8x8/tile22.txt ================================================ 0,0,0,0,0,0,90,36 ================================================ FILE: src/examples/hello/tiles/8x8/tile23.txt ================================================ 8,42,28,119,28,42,8,0 ================================================ FILE: src/examples/hello/tiles/8x8/tile24.txt ================================================ 240,240,255,133,255,161,255,0 ================================================ FILE: src/examples/hello/tiles/8x8/tile25.txt ================================================ $18,$3e,$60,$3c,$06,$7c,$18,$00 ================================================ FILE: src/examples/hello/tiles/8x8/tile3.txt ================================================ 0,0,0,0,24, 36, 24,102 ================================================ FILE: src/examples/hello/tiles/8x8/tile4.txt ================================================ 153, 24, 36,36,0,0,0,0 ================================================ FILE: src/examples/hello/tiles/8x8/tile5.txt ================================================ 0,0,0,0,0,0,24, 36 ================================================ FILE: src/examples/hello/tiles/8x8/tile6.txt ================================================ 24,102,154, 24, 36,36,0,0 ================================================ FILE: src/examples/hello/tiles/8x8/tile7.txt ================================================ 24, 36, 24, 0,153, 0, 36,36 ================================================ FILE: src/examples/hello/tiles/8x8/tile8.txt ================================================ 60,126,231,195,195,231,126,60 ================================================ FILE: src/examples/hello/tiles/8x8/tile9.txt ================================================ 2,7,2,63,66,162,159,5 ================================================ FILE: src/examples/hello/tiles/ASCII/char_tiles.h ================================================ #ifndef _CHAR_TILES_H #define _CHAR_TILES_H #include "cross_lib.h" #define _TILE_0 (unsigned char) '0' #define _TILE_1 (unsigned char) '1' #define _TILE_2 (unsigned char) '2' #define _TILE_3 (unsigned char) '3' // Apple #define _TILE_4 (unsigned char) '4' // Body #define _TILE_5 (unsigned char) '5' #define _TILE_6 (unsigned char) '6' #define _TILE_7 (unsigned char) '7' #define _TILE_8 (unsigned char) '8' #define _TILE_9 (unsigned char) '9' #define _TILE_10 (unsigned char) 'A' #define _TILE_11 (unsigned char) 'B' #define _TILE_12 (unsigned char) 'C' #define _TILE_13 (unsigned char) 'D' #define _TILE_14 (unsigned char) 'E' #define _TILE_15 (unsigned char) 'F' #define _TILE_16 (unsigned char) 'G' #define _TILE_17 (unsigned char) 'H' #define _TILE_18 (unsigned char) 'I' #define _TILE_19 (unsigned char) 'J' #define _TILE_20 (unsigned char) 'K' #define _TILE_21 (unsigned char) 'L' #define _TILE_22 (unsigned char) 'M' #define _TILE_23 (unsigned char) 'N' #define _TILE_24 (unsigned char) 'O' #define _TILE_25 'P' //#define _TILE_25 '$' #endif // _CHAR_TILES_H ================================================ FILE: src/examples/input/Makefile.input ================================================ FULL_FILES ?= \ $(BASIC_CROSS_LIB_FILES) \ $(CROSS_LIB_PATH)/sleep/sleep_macros.c \ $(SOURCE_PATH)/main.c GAME_NAME := input PARENT_DIR = examples include ./$(PARENT_DIR)/$(GAME_NAME)/config/project_config.mk include ./Makefile_common include ./makefiles.common/auxiliary/Makefile_default_values ================================================ FILE: src/examples/input/config/project_config.mk ================================================ ##################################################################### # SLOWDOWN VALUES # Common factor _COMMON_SLOWDOWN_FACTOR=10 # CC65 _APPLE2_SLOWDOWN=30 _APPLE2ENH_SLOWDOWN=30 _APPLE2_HGR_SLOWDOWN=50 _APPLE2ENH_HGR_SLOWDOWN=50 _ATARI_SLOWDOWN=70 _ATARI5200_SLOWDOWN=70 _C16_SLOWDOWN=55 _C64_SLOWDOWN=45 _CREATIVISION_SLOWDOWN=100 _GAMATE_SLOWDOWN=120 _ORIC_SLOWDOWN=40 _NES_SLOWDOWN=80 _PET_SLOWDOWN=40 _PCE_SLOWDOWN=550 _SUPERVISION_SLOWDOWN=140 _VIC20_SLOWDOWN=55 # Z88DK _AQUARIUS_SLOWDOWN=105 _ACE_SLOWDOWN=100 _C128_Z80_40COL_SLOWDOWN=20 _C128_Z80_80COL_SLOWDOWN=1 _CPC_MODE0_SLOWDOWN=100 _CPC_CPCRSLIB_MODE1_SLOWDOWN=90 _CPC_MODE2_SLOWDOWN=90 _CPM_Z80_SLOWDOWN=90 _CPM_INTEL8080_SLOWDOWN=80 _COLECO_SLOWDOWN=100 _GB_SLOWDOWN=280 _GG_SLOWDOWN=300 _GB_WAIT_VSYNC_SLOWDOWN=150 _LASER500_SLOWDOWN=200 _MC1000_SLOWDOWN=75 _MSX_SLOWDOWN=200 _MSX_FIXED_COLORS_SLOWDOWN=300 _MTX500_SLOWDOWN=200 _MTX512_SLOWDOWN=200 _MZ_SLOWDOWN=200 _SAMCOUPE_SLOWDOWN=300 _SMS_SLOWDOWN=160 _SPECTRUM_SLOWDOWN=160 _VG5K_SLOWDOWN=75 _VZ200_SLOWDOWN=250 _ZX81_SLOWDOWN=10 _ZX81_WRX_SLOWDOWN=1 # CMOC _COCO_SLOWDOWN=160 _DRAGON_SLOWDOWN=160 _MO5_SLOWDOWN=160 _TO7_SLOWDOWN=160 # LCC1802 _COMX_SLOWDOWN=30 _PECOM_SLOWDOWN=30 _TMC600_SLOWDOWN=50 _MICRO_SLOWDOWN=60 _CIDELSA_SLOWDOWN=40 # CC6303 _MC10_SLOWDOWN=12 # GCC _NCURSES_SLOWDOWN=12 ================================================ FILE: src/examples/input/main.c ================================================ /* --------------------------------------------------------------------------------------- */ // // CROSS SHOOT by Fabrizio Caruso // // Fabrizio_Caruso@hotmail.com // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from // the use of this software. // Permission is granted to anyone to use this software for non-commercial applications, // subject to the following restrictions: // 1. The origin of this software must not be misrepresented; you must not // claim that you wrote the original software. If you use this software in // a product, an acknowledgment in the product documentation would be // appreciated but is not required. // 2. Altered source versions must be plainly marked as such, and must not // be misrepresented as being the original software. // 3. This notice may not be removed or altered from any source distribution. /* --------------------------------------------------------------------------------------- */ #include "cross_lib.h" #define PREVIOUS_STATE_X (XSize/2-7) #define CURRENT_STATE_X (XSize/2+2) #define STATE_Y ((YSize)/2-1) void UPDATE_STATE(char *Text) { _XL_PRINT(CURRENT_STATE_X,STATE_Y, Text); _XL_PRINT(PREVIOUS_STATE_X,STATE_Y, Text); } int main(void) { uint8_t input; _XL_INIT_GRAPHICS(); _XL_INIT_INPUT(); _XL_CLEAR_SCREEN(); _XL_SET_TEXT_COLOR(_XL_WHITE); _XL_PRINT(XSize/2-6,0, "INPUT TEST"); _XL_PRINT(CURRENT_STATE_X,STATE_Y-2, "CURRENT"); _XL_PRINT(PREVIOUS_STATE_X-3,STATE_Y-2, "PREVIOUS"); while(1) { input = _XL_INPUT(); _XL_PRINT(CURRENT_STATE_X,STATE_Y, " "); if(_XL_FIRE(input)) { UPDATE_STATE("FIRE "); } else if(_XL_LEFT(input)) { UPDATE_STATE("LEFT "); } else if(_XL_RIGHT(input)) { UPDATE_STATE("RIGHT"); } else if(_XL_DOWN(input)) { UPDATE_STATE("DOWN "); } else if(_XL_UP(input)) { UPDATE_STATE("UP "); } _XL_SLOW_DOWN(_XL_SLOW_DOWN_FACTOR); } return EXIT_SUCCESS; } ================================================ FILE: src/examples/input/tiles/6x8/tile0.txt ================================================ 12,18,12,51,45,12,18,18 ================================================ FILE: src/examples/input/tiles/6x8/tile1.txt ================================================ 0,0,12,18,12,51,45,12 ================================================ FILE: src/examples/input/tiles/6x8/tile10.txt ================================================ 0,0,0,32,16,40,8,8 ================================================ FILE: src/examples/input/tiles/6x8/tile11.txt ================================================ 0,0,0,1,2,5,4,4 ================================================ FILE: src/examples/input/tiles/6x8/tile12.txt ================================================ 16,56,16,60,18,21,57,41 ================================================ FILE: src/examples/input/tiles/6x8/tile13.txt ================================================ 0,0,0,15,16,40,39,32 ================================================ FILE: src/examples/input/tiles/6x8/tile14.txt ================================================ 0,42,42,58,42,42,0,0 ================================================ FILE: src/examples/input/tiles/6x8/tile15.txt ================================================ 0,37,37,37,37,50,0,0 ================================================ FILE: src/examples/input/tiles/6x8/tile16.txt ================================================ 0,0,0,60,2,5,57,1 ================================================ FILE: src/examples/input/tiles/6x8/tile17.txt ================================================ 2,7,2,2,2,2,2,5 ================================================ FILE: src/examples/input/tiles/6x8/tile18.txt ================================================ 16,56,16,16,16,16,16,40 ================================================ FILE: src/examples/input/tiles/6x8/tile19.txt ================================================ 45,18,12,51,45,12,18,18 ================================================ FILE: src/examples/input/tiles/6x8/tile2.txt ================================================ 18,18,0,0,0,0,0,0 ================================================ FILE: src/examples/input/tiles/6x8/tile20.txt ================================================ 0,0,45,18,12,51,45,12 ================================================ FILE: src/examples/input/tiles/6x8/tile21.txt ================================================ 0,0,0,0,45,18,12,51 ================================================ FILE: src/examples/input/tiles/6x8/tile22.txt ================================================ 0,0,0,0,0,0,45,18 ================================================ FILE: src/examples/input/tiles/6x8/tile23.txt ================================================ 0,4,21,14,27,14,21,4 ================================================ FILE: src/examples/input/tiles/6x8/tile24.txt ================================================ 63,41,63,37,63,41,63,37 ================================================ FILE: src/examples/input/tiles/6x8/tile25.txt ================================================ 63,8, 31, 16, 30, 2,62, 63 ================================================ FILE: src/examples/input/tiles/6x8/tile25_ORIG.txt ================================================ 0,8, 31, 16, 30, 2,62, 4 ================================================ FILE: src/examples/input/tiles/6x8/tile3.txt ================================================ 0,0,0,0,12,18,12,51 ================================================ FILE: src/examples/input/tiles/6x8/tile4.txt ================================================ 45,12,18,18,0,0,0,0 ================================================ FILE: src/examples/input/tiles/6x8/tile5.txt ================================================ 0,0,0,0,0,0,12,18 ================================================ FILE: src/examples/input/tiles/6x8/tile6.txt ================================================ 12,51,45,12,18,18,0,0 ================================================ FILE: src/examples/input/tiles/6x8/tile7.txt ================================================ 12,18,12,0,45,0,18,18 ================================================ FILE: src/examples/input/tiles/6x8/tile8.txt ================================================ 0,12,18,33,33,18,12,0 ================================================ FILE: src/examples/input/tiles/6x8/tile9.txt ================================================ 2,7,2,15,18,42,39,37 ================================================ FILE: src/examples/input/tiles/6x9/tile0.txt ================================================ 12,18,12,51,45,12,18,18,18 ================================================ FILE: src/examples/input/tiles/6x9/tile1.txt ================================================ 0,0,0,12,18,12,51,45,12 ================================================ FILE: src/examples/input/tiles/6x9/tile10.txt ================================================ 0,0,0,0,32,16,40,8,8 ================================================ FILE: src/examples/input/tiles/6x9/tile11.txt ================================================ 0,0,0,0,1,2,5,4,4 ================================================ FILE: src/examples/input/tiles/6x9/tile12.txt ================================================ 0,16,56,16,60,18,21,57,41 ================================================ FILE: src/examples/input/tiles/6x9/tile13.txt ================================================ 0,0,0,0,15,16,40,39,32 ================================================ FILE: src/examples/input/tiles/6x9/tile14.txt ================================================ 0,0,42,42,58,42,42,0,0 ================================================ FILE: src/examples/input/tiles/6x9/tile15.txt ================================================ 0,0,37,37,37,37,50,0,0 ================================================ FILE: src/examples/input/tiles/6x9/tile16.txt ================================================ 0,0,0,0,60,2,5,57,1 ================================================ FILE: src/examples/input/tiles/6x9/tile17.txt ================================================ 2,2,7,2,2,2,2,2,5 ================================================ FILE: src/examples/input/tiles/6x9/tile18.txt ================================================ 16,16,56,16,16,16,16,16,40 ================================================ FILE: src/examples/input/tiles/6x9/tile19.txt ================================================ 45,18,12,51,45,12,18,18,18 ================================================ FILE: src/examples/input/tiles/6x9/tile2.txt ================================================ 18,18,18,0,0,0,0,0,0 ================================================ FILE: src/examples/input/tiles/6x9/tile20.txt ================================================ 0,0,0,45,18,12,51,45,12 ================================================ FILE: src/examples/input/tiles/6x9/tile21.txt ================================================ 0,0,0,0,0,45,18,12,51 ================================================ FILE: src/examples/input/tiles/6x9/tile22.txt ================================================ 0,0,0,0,0,0,0,45,18 ================================================ FILE: src/examples/input/tiles/6x9/tile23.txt ================================================ 0,0,4,21,14,27,14,21,4 ================================================ FILE: src/examples/input/tiles/6x9/tile24.txt ================================================ 0,63,41,63,37,63,41,63,37 ================================================ FILE: src/examples/input/tiles/6x9/tile25 _ORIG.txt ================================================ 0,8, 31, 16, 30, 2,62, 4,0 ================================================ FILE: src/examples/input/tiles/6x9/tile25.txt ================================================ 63,8, 31, 16, 30, 2,62, 4,63 ================================================ FILE: src/examples/input/tiles/6x9/tile3.txt ================================================ 0,0,0,0,0,12,18,12,51 ================================================ FILE: src/examples/input/tiles/6x9/tile4.txt ================================================ 45,12,18,18,0,0,0,0,0 ================================================ FILE: src/examples/input/tiles/6x9/tile5.txt ================================================ 0,0,0,0,0,0,0,12,18 ================================================ FILE: src/examples/input/tiles/6x9/tile6.txt ================================================ 12,51,45,12,18,18,18,0,0 ================================================ FILE: src/examples/input/tiles/6x9/tile7.txt ================================================ 12,18,12,0,45,0,18,18 ================================================ FILE: src/examples/input/tiles/6x9/tile8.txt ================================================ 0,0,12,18,33,33,18,12,0 ================================================ FILE: src/examples/input/tiles/6x9/tile9.txt ================================================ 0,2,7,2,15,18,42,39,37 ================================================ FILE: src/examples/input/tiles/7x8/tile0.txt ================================================ 12,18,12,51,45,12,18,18 ================================================ FILE: src/examples/input/tiles/7x8/tile1.txt ================================================ 0,0,12,18,12,51,45,12 ================================================ FILE: src/examples/input/tiles/7x8/tile10.txt ================================================ 0,0,0,32,16,40,8,8 ================================================ FILE: src/examples/input/tiles/7x8/tile11.txt ================================================ 0,0,0,1,2,5,4,4 ================================================ FILE: src/examples/input/tiles/7x8/tile12.txt ================================================ 16,56,16,60,18,21,57,41 ================================================ FILE: src/examples/input/tiles/7x8/tile13.txt ================================================ 0,0,0,15,16,40,39,32 ================================================ FILE: src/examples/input/tiles/7x8/tile14.txt ================================================ 0,42,42,58,42,42,0,0 ================================================ FILE: src/examples/input/tiles/7x8/tile15.txt ================================================ 0,37,37,37,37,50,0,0 ================================================ FILE: src/examples/input/tiles/7x8/tile16.txt ================================================ 0,0,0,60,2,5,57,1 ================================================ FILE: src/examples/input/tiles/7x8/tile17.txt ================================================ 2,7,2,2,2,2,2,5 ================================================ FILE: src/examples/input/tiles/7x8/tile18.txt ================================================ 16,56,16,16,16,16,16,40 ================================================ FILE: src/examples/input/tiles/7x8/tile19.txt ================================================ 45,18,12,51,45,12,18,18 ================================================ FILE: src/examples/input/tiles/7x8/tile2.txt ================================================ 18,18,0,0,0,0,0,0 ================================================ FILE: src/examples/input/tiles/7x8/tile20.txt ================================================ 0,0,45,18,12,51,45,12 ================================================ FILE: src/examples/input/tiles/7x8/tile21.txt ================================================ 0,0,0,0,45,18,12,51 ================================================ FILE: src/examples/input/tiles/7x8/tile22.txt ================================================ 0,0,0,0,0,0,45,18 ================================================ FILE: src/examples/input/tiles/7x8/tile23.txt ================================================ 0,4,21,14,27,14,21,4 ================================================ FILE: src/examples/input/tiles/7x8/tile24.txt ================================================ 63,41,63,37,63,41,63,37 ================================================ FILE: src/examples/input/tiles/7x8/tile25.txt ================================================ $ff,$3e,$60,$3c,$06,$7c,$18,$ff ================================================ FILE: src/examples/input/tiles/7x8/tile25_ORIG.txt ================================================ $18,$3e,$60,$3c,$06,$7c,$18,$00 ================================================ FILE: src/examples/input/tiles/7x8/tile3.txt ================================================ 0,0,0,0,12,18,12,51 ================================================ FILE: src/examples/input/tiles/7x8/tile4.txt ================================================ 45,12,18,18,0,0,0,0 ================================================ FILE: src/examples/input/tiles/7x8/tile5.txt ================================================ 0,0,0,0,0,0,12,18 ================================================ FILE: src/examples/input/tiles/7x8/tile6.txt ================================================ 12,51,45,12,18,18,0,0 ================================================ FILE: src/examples/input/tiles/7x8/tile7.txt ================================================ 12,18,12,0,45,0,18,18 ================================================ FILE: src/examples/input/tiles/7x8/tile8.txt ================================================ 0,12,18,33,33,18,12,0 ================================================ FILE: src/examples/input/tiles/7x8/tile9.txt ================================================ 2,7,2,15,18,42,39,37 ================================================ FILE: src/examples/input/tiles/8x8/tile0.txt ================================================ 24, 36, 24,102,153, 24, 36,36 ================================================ FILE: src/examples/input/tiles/8x8/tile1.txt ================================================ 0,0,24, 36, 24,102,89, 24 ================================================ FILE: src/examples/input/tiles/8x8/tile10.txt ================================================ 0,0,0,192,32,80,144,0 ================================================ FILE: src/examples/input/tiles/8x8/tile11.txt ================================================ 0,0,0,3,4,10,9,0 ================================================ FILE: src/examples/input/tiles/8x8/tile12.txt ================================================ 32,112,32,252,34,37,249,80 ================================================ FILE: src/examples/input/tiles/8x8/tile13.txt ================================================ 0, 0, 0,63,64,160,159,0 ================================================ FILE: src/examples/input/tiles/8x8/tile14.txt ================================================ $2A,$2A,$2A,$3A,$2A,$2A,$2A,$00 ================================================ FILE: src/examples/input/tiles/8x8/tile15.txt ================================================ 74,74,74,74,74,74,100,0 ================================================ FILE: src/examples/input/tiles/8x8/tile16.txt ================================================ 0,0,0,252,2,5,249,0 ================================================ FILE: src/examples/input/tiles/8x8/tile17.txt ================================================ 2,7,2,2,2,2,2,5 ================================================ FILE: src/examples/input/tiles/8x8/tile18.txt ================================================ 32,112,32,32,32,32,32,80 ================================================ FILE: src/examples/input/tiles/8x8/tile19.txt ================================================ 90,36, 24,102,153, 24, 36,36 ================================================ FILE: src/examples/input/tiles/8x8/tile2.txt ================================================ 36,36,0,0,0,0,0,0 ================================================ FILE: src/examples/input/tiles/8x8/tile20.txt ================================================ 0,0,90,36, 24,102,89, 24 ================================================ FILE: src/examples/input/tiles/8x8/tile21.txt ================================================ 0,0,0,0,90,36, 24,102 ================================================ FILE: src/examples/input/tiles/8x8/tile22.txt ================================================ 0,0,0,0,0,0,90,36 ================================================ FILE: src/examples/input/tiles/8x8/tile23.txt ================================================ 8,42,28,119,28,42,8,0 ================================================ FILE: src/examples/input/tiles/8x8/tile24.txt ================================================ 240,240,255,133,255,161,255,0 ================================================ FILE: src/examples/input/tiles/8x8/tile25.txt ================================================ $18,$3e,$60,$3c,$06,$7c,$18,$00 ================================================ FILE: src/examples/input/tiles/8x8/tile3.txt ================================================ 0,0,0,0,24, 36, 24,102 ================================================ FILE: src/examples/input/tiles/8x8/tile4.txt ================================================ 153, 24, 36,36,0,0,0,0 ================================================ FILE: src/examples/input/tiles/8x8/tile5.txt ================================================ 0,0,0,0,0,0,24, 36 ================================================ FILE: src/examples/input/tiles/8x8/tile6.txt ================================================ 24,102,154, 24, 36,36,0,0 ================================================ FILE: src/examples/input/tiles/8x8/tile7.txt ================================================ 24, 36, 24, 0,153, 0, 36,36 ================================================ FILE: src/examples/input/tiles/8x8/tile8.txt ================================================ 60,126,231,195,195,231,126,60 ================================================ FILE: src/examples/input/tiles/8x8/tile9.txt ================================================ 2,7,2,63,66,162,159,5 ================================================ FILE: src/examples/input/tiles/ASCII/char_tiles.h ================================================ #ifndef _CHAR_TILES_H #define _CHAR_TILES_H #include "cross_lib.h" #define _TILE_0 '*' #define _TILE_1 '*' #define _TILE_2 '-' #define _TILE_3 '-' // Apple #define _TILE_4 'O' // Body #define _TILE_5 'O' #define _TILE_6 'H' #define _TILE_7 '=' #if defined(_XL_NO_COLOR) #define _TILE_8 'R' #else #define _TILE_8 'O' #endif #define _TILE_9 'L' #define _TILE_10 '=' #define _TILE_11 'I' #define _TILE_12 'I' #define _TILE_13 '-' #define _TILE_14 'S' #define _TILE_15 'I' #define _TILE_16 'C' #define _TILE_17 'X' #if defined(_XL_NO_COLOR) #define _TILE_18 'S' #else #define _TILE_18 'O' #endif #endif // _CHAR_TILES_H ================================================ FILE: src/examples/invaders/Makefile.invaders ================================================ FULL_FILES ?= \ $(BASIC_CROSS_LIB_FILES) \ $(CROSS_LIB_PATH)/sleep/sleep_macros.c \ $(SOURCE_PATH)/main.c GAME_NAME := invaders PARENT_DIR = examples include ./$(PARENT_DIR)/$(GAME_NAME)/config/project_config.mk include ./Makefile_common include ./makefiles.common/auxiliary/Makefile_default_values ================================================ FILE: src/examples/invaders/config/project_config.mk ================================================ ##################################################################### # SLOWDOWN VALUES # Common factor _COMMON_SLOWDOWN_FACTOR=10 # CC65 _APPLE2_SLOWDOWN=30 _APPLE2ENH_SLOWDOWN=30 _APPLE2_HGR_SLOWDOWN=50 _APPLE2ENH_HGR_SLOWDOWN=50 _ATARI_SLOWDOWN=70 _ATARI5200_SLOWDOWN=70 _C16_SLOWDOWN=55 _C64_SLOWDOWN=45 _CREATIVISION_SLOWDOWN=100 _GAMATE_SLOWDOWN=120 _ORIC_SLOWDOWN=40 _NES_SLOWDOWN=80 _PET_SLOWDOWN=40 _PCE_SLOWDOWN=550 _SUPERVISION_SLOWDOWN=140 _VIC20_SLOWDOWN=55 # Z88DK _AQUARIUS_SLOWDOWN=105 _ACE_SLOWDOWN=100 _C128_Z80_40COL_SLOWDOWN=20 _C128_Z80_80COL_SLOWDOWN=1 _CPC_MODE0_SLOWDOWN=100 _CPC_CPCRSLIB_MODE1_SLOWDOWN=90 _CPC_MODE2_SLOWDOWN=90 _CPM_Z80_SLOWDOWN=90 _CPM_INTEL8080_SLOWDOWN=80 _COLECO_SLOWDOWN=100 _GB_SLOWDOWN=280 _GG_SLOWDOWN=300 _GB_WAIT_VSYNC_SLOWDOWN=150 _LASER500_SLOWDOWN=200 _MC1000_SLOWDOWN=75 _MSX_SLOWDOWN=200 _MSX_FIXED_COLORS_SLOWDOWN=300 _MTX500_SLOWDOWN=200 _MTX512_SLOWDOWN=200 _MZ_SLOWDOWN=200 _SAMCOUPE_SLOWDOWN=300 _SMS_SLOWDOWN=160 _SPECTRUM_SLOWDOWN=160 _VG5K_SLOWDOWN=75 _VZ200_SLOWDOWN=250 _ZX81_SLOWDOWN=10 _ZX81_WRX_SLOWDOWN=1 # CMOC _COCO_SLOWDOWN=160 _DRAGON_SLOWDOWN=160 _MO5_SLOWDOWN=160 _TO7_SLOWDOWN=160 # LCC1802 _COMX_SLOWDOWN=30 _PECOM_SLOWDOWN=30 _TMC600_SLOWDOWN=50 _MICRO_SLOWDOWN=60 _CIDELSA_SLOWDOWN=40 # CC6303 _MC10_SLOWDOWN=12 # GCC _NCURSES_SLOWDOWN=12 ================================================ FILE: src/examples/invaders/main.c ================================================ /* --------------------------------------------------------------------------------------- */ // // CROSS SHOOT by Fabrizio Caruso // // Fabrizio_Caruso@hotmail.com // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from // the use of this software. // Permission is granted to anyone to use this software for non-commercial applications, // subxect to the following restrictions: // 1. The origin of this software must not be misrepresented; you must not // claim that you wrote the original software. If you use this software in // a product, an acknowledgment in the product documentation would be // appreciated but is not required. // 2. Altered source versions must be plainly marked as such, and must not // be misrepresented as being the original software. // 3. This notice may not be removed or altered from any source distribution. /* --------------------------------------------------------------------------------------- */ #include "cross_lib.h" #include "tile_aliases.h" #if !defined(_XL_SLOW_DOWN_FACTOR) #define _XL_SLOW_DOWN_FACTOR 0 #endif # if _XL_SLOW_DOWN_FACTOR<20 #define LEVEL_SPEED_UP 0 #elif _XL_SLOW_DOWN_FACTOR<100 #define LEVEL_SPEED_UP 2 #elif _XL_SLOW_DOWN_FACTOR<200 #define LEVEL_SPEED_UP 4 #elif _XL_SLOW_DOWN_FACTOR<400 #define LEVEL_SPEED_UP 8 #elif _XL_SLOW_DOWN_FACTOR<800 #define LEVEL_SPEED_UP 16 #elif _XL_SLOW_DOWN_FACTOR<1600 #define LEVEL_SPEED_UP 32 #elif _XL_SLOW_DOWN_FACTOR<3200 #define LEVEL_SPEED_UP 64 #else #define LEVEL_SPEED_UP 128 #endif #define MAX_Y ((YSize)+(Y_OFFSET)) #define SPACE_SHIP_Y (MAX_Y-4) #if !defined(_XL_NO_UDG) #define draw_ship_1() \ { \ _XL_DRAW(ship_x/4,SPACE_SHIP_Y,SPACE_SHIP_1_W_TILE, _XL_CYAN); \ _XL_DRAW(ship_x/4+1,SPACE_SHIP_Y,SPACE_SHIP_1_E_TILE, _XL_CYAN); \ } #define draw_ship_2() \ { \ _XL_DRAW(ship_x/4,SPACE_SHIP_Y,SPACE_SHIP_2_W_TILE, _XL_CYAN); \ _XL_DRAW(ship_x/4+1,SPACE_SHIP_Y,SPACE_SHIP_2_E_TILE, _XL_CYAN); \ } #define draw_ship_3() \ { \ _XL_DRAW(ship_x/4,SPACE_SHIP_Y,SPACE_SHIP_3_W_TILE, _XL_CYAN); \ _XL_DRAW(ship_x/4+1,SPACE_SHIP_Y,SPACE_SHIP_3_C_TILE, _XL_CYAN); \ _XL_DRAW(ship_x/4+2,SPACE_SHIP_Y,SPACE_SHIP_3_E_TILE, _XL_CYAN); \ } #define draw_ship_4() \ { \ _XL_DRAW(ship_x/4,SPACE_SHIP_Y,SPACE_SHIP_4_W_TILE, _XL_CYAN); \ _XL_DRAW(ship_x/4+1,SPACE_SHIP_Y,SPACE_SHIP_4_E_TILE, _XL_CYAN); \ } #define delete_at_the_right() \ { \ _XL_DELETE(ship_x/4+2,SPACE_SHIP_Y); \ } #define delete_at_the_left() \ { \ _XL_DELETE(ship_x/4,SPACE_SHIP_Y); \ } #else #define draw_ship() \ _XL_DRAW(ship_x,SPACE_SHIP_Y,SPACE_SHIP_1_W_TILE, _XL_WHITE); \ _XL_DRAW(ship_x+1,SPACE_SHIP_Y,SPACE_SHIP_1_E_TILE, _XL_WHITE); \ #define draw_ship_1() \ draw_ship() #define draw_ship_2() \ draw_ship() #define draw_ship_3() \ draw_ship() #define draw_ship_4() \ draw_ship() #define delete_at_the_left() \ _XL_DELETE(ship_x-1,SPACE_SHIP_Y); \ _XL_DELETE(ship_x,SPACE_SHIP_Y); \ #define delete_at_the_right() \ _XL_DELETE(ship_x+1,SPACE_SHIP_Y); \ _XL_DELETE(ship_x,SPACE_SHIP_Y) #endif uint16_t x; uint8_t invader[5]; uint8_t ship_x; uint8_t ship_fire; #define TOP_INVADER_Y (MAX_Y-21) #define MID_INVADER_Y (MAX_Y-19) #define LOW_INVADER_Y (MAX_Y-15) #if !defined(_XL_NO_UDG) #define draw_mid_invader_closed(x,y) \ { \ _XL_DRAW(x,y,MID_INVADER_CLOSED_W_TILE, _XL_WHITE); \ _XL_DRAW(x+1,y,MID_INVADER_CLOSED_E_TILE, _XL_WHITE); \ } #define draw_mid_invader_open(x,y) \ { \ _XL_DRAW(x,y,MID_INVADER_OPEN_W_TILE, _XL_WHITE); \ _XL_DRAW(x+1,y,MID_INVADER_OPEN_E_TILE, _XL_WHITE); \ } #define delete_mid_invader(x,y) \ { \ _XL_DELETE(x,y); \ } #define draw_low_invader_open(x,y) \ { \ _XL_DRAW(x,y,LOW_INVADER_OPEN_W_TILE, _XL_WHITE); \ _XL_DRAW(x+1,y,LOW_INVADER_OPEN_E_TILE, _XL_WHITE); \ } #define draw_low_invader_closed(x,y) \ { \ _XL_DRAW(x,y,LOW_INVADER_CLOSED_W_TILE, _XL_WHITE); \ _XL_DRAW(x+1,y,LOW_INVADER_CLOSED_E_TILE, _XL_WHITE); \ } #define delete_low_invader(x,y) \ { \ _XL_DELETE(x,y); \ } #define draw_top_invader_closed(x,y) \ { \ _XL_DRAW(x,y,TOP_INVADER_CLOSED_TILE, _XL_WHITE); \ } #define draw_top_invader_open(x,y) \ { \ _XL_DRAW(x,y,TOP_INVADER_OPEN_W_TILE, _XL_WHITE); \ _XL_DRAW(x+1,y,TOP_INVADER_OPEN_E_TILE, _XL_WHITE); \ } #define delete_top_invader(x,y) \ { \ _XL_DELETE(x,y); \ } #else #define draw_top_invader_closed(x,y) \ _XL_DRAW(x,y,TOP_INVADER_CLOSED_TILE, _XL_WHITE) #define draw_top_invader_open(x,y) \ _XL_DRAW(x,y,TOP_INVADER_OPEN_W_TILE, _XL_WHITE) #define draw_mid_invader_closed(x,y) \ _XL_DRAW(x,y,MID_INVADER_CLOSED_W_TILE, _XL_WHITE) #define draw_mid_invader_open(x,y) \ _XL_DRAW(x,y,MID_INVADER_OPEN_W_TILE, _XL_WHITE) #define draw_low_invader_closed(x,y) \ _XL_DRAW(x,y,LOW_INVADER_CLOSED_W_TILE, _XL_WHITE) #define draw_low_invader_open(x,y) \ _XL_DRAW(x,y,LOW_INVADER_OPEN_W_TILE, _XL_WHITE) #define delete_top_invader(x,y) \ _XL_DELETE(x,y) #define delete_mid_invader(x,y) \ _XL_DELETE(x,y) #define delete_low_invader(x,y) \ _XL_DELETE(x,y) #endif #if !defined(INVADERS_PER_LINE) #define INVADERS_PER_LINE (XSize/5) #endif #define SPACE_BETWEEN_INVADERS 2 void redraw(void) { uint8_t i; _XL_CLEAR_SCREEN(); for(i=0;i' // Animated plane #define _TILE_0 '=' #define _TILE_3 _TILE_1 #define _TILE_17 _TILE_2 #define _TILE_6 'H' #define _TILE_9 'L' #define _TILE_14 'S' #define _TILE_16 'C' #define _TILE_12 'I' #define _TILE_10 'O' #define _TILE_13 _TILE_10 #define _TILE_18 '~' #define _TILE_8 '=' #define _TILE_26 'A' #endif // _CHAR_TILES_H ================================================ FILE: src/examples/matrix/Makefile.matrix ================================================ FULL_FILES ?= \ $(BASIC_CROSS_LIB_FILES) \ $(CROSS_LIB_PATH)/sleep/sleep_macros.c \ $(SOURCE_PATH)/main.c GAME_NAME := matrix PARENT_DIR = examples include ./$(PARENT_DIR)/$(GAME_NAME)/config/project_config.mk include ./Makefile_common include ./makefiles.common/auxiliary/Makefile_default_values ================================================ FILE: src/examples/matrix/config/project_config.mk ================================================ ##################################################################### # SLOWDOWN VALUES # Common factor _COMMON_SLOWDOWN_FACTOR=10 # CC65 _APPLE2_SLOWDOWN=30 _APPLE2ENH_SLOWDOWN=30 _APPLE2_HGR_SLOWDOWN=50 _APPLE2ENH_HGR_SLOWDOWN=50 _ATARI_SLOWDOWN=70 _ATARI5200_SLOWDOWN=70 _C16_SLOWDOWN=55 _C64_SLOWDOWN=45 _CREATIVISION_SLOWDOWN=100 _GAMATE_SLOWDOWN=120 _ORIC_SLOWDOWN=40 _NES_SLOWDOWN=80 _PET_SLOWDOWN=40 _PCE_SLOWDOWN=550 _SUPERVISION_SLOWDOWN=140 _VIC20_SLOWDOWN=55 # Z88DK _AQUARIUS_SLOWDOWN=105 _ACE_SLOWDOWN=100 _C128_Z80_40COL_SLOWDOWN=20 _C128_Z80_80COL_SLOWDOWN=1 _CPC_MODE0_SLOWDOWN=100 _CPC_CPCRSLIB_MODE1_SLOWDOWN=90 _CPC_MODE2_SLOWDOWN=90 _CPM_Z80_SLOWDOWN=90 _CPM_INTEL8080_SLOWDOWN=80 _COLECO_SLOWDOWN=100 _GB_SLOWDOWN=280 _GG_SLOWDOWN=300 _GB_WAIT_VSYNC_SLOWDOWN=150 _LASER500_SLOWDOWN=200 _MC1000_SLOWDOWN=75 _MSX_SLOWDOWN=200 _MSX_FIXED_COLORS_SLOWDOWN=300 _MTX500_SLOWDOWN=200 _MTX512_SLOWDOWN=200 _MZ_SLOWDOWN=200 _SAMCOUPE_SLOWDOWN=300 _SMS_SLOWDOWN=160 _SPECTRUM_SLOWDOWN=160 _VG5K_SLOWDOWN=75 _VZ200_SLOWDOWN=250 _ZX81_SLOWDOWN=10 _ZX81_WRX_SLOWDOWN=1 # CMOC _COCO_SLOWDOWN=160 _DRAGON_SLOWDOWN=160 _MO5_SLOWDOWN=160 _TO7_SLOWDOWN=160 # LCC1802 _COMX_SLOWDOWN=30 _PECOM_SLOWDOWN=30 _TMC600_SLOWDOWN=50 _MICRO_SLOWDOWN=60 _CIDELSA_SLOWDOWN=40 #CC6303 _MC10_SLOWDOWN=12 # GCC _NCURSES_SLOWDOWN=12 ================================================ FILE: src/examples/matrix/main.c ================================================ /* --------------------------------------------------------------------------------------- */ // // CROSS SHOOT by Fabrizio Caruso // // Fabrizio_Caruso@hotmail.com // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from // the use of this software. // Permission is granted to anyone to use this software for non-commercial applications, // subject to the following restrictions: // 1. The origin of this software must not be misrepresented; you must not // claim that you wrote the original software. If you use this software in // a product, an acknowledgment in the product documentation would be // appreciated but is not required. // 2. Altered source versions must be plainly marked as such, and must not // be misrepresented as being the original software. // 3. This notice may not be removed or altered from any source distribution. /* --------------------------------------------------------------------------------------- */ #include "cross_lib.h" #include "tile_aliases.h" #if ((YSize)+(Y_OFFSET)-19)>=1 #define MAX_INIT_Y_POS ((YSize)+(Y_OFFSET)-19) #else #define MAX_INIT_Y_POS 1 #endif #if ((YSize)+(Y_OFFSET)-1)>19 #define MAX_TILES 19 #else #define MAX_TILES ((YSize)+(Y_OFFSET)-1) #endif static const uint8_t tiles[19] = { PLAYER_DOWN_TILE, PLAYER_UP_TILE, PLAYER_RIGHT_TILE, PLAYER_LEFT_TILE, GHOST_TILE, BOMB_TILE, DEAD_GHOST_TILE, SKULL_TILE, CALM_DOWN_TILE, FIRE_POWER_TILE, BULLET_TILE, VERTICAL_BRICK_TILE, HORIZONTAL_BRICK_TILE, LEFT_HORIZONTAL_MISSILE_TILE, RIGHT_HORIZONTAL_MISSILE_TILE, ROCKET_TILE, FREEZE_TILE, SUPER_TILE, INVINCIBILITY_TILE }; #if !defined(_XL_NO_COLOR) static const uint8_t tile_colors[19] = { _XL_CYAN, _XL_CYAN, _XL_CYAN, _XL_CYAN, _XL_WHITE, _XL_RED, _XL_RED, _XL_YELLOW, _XL_GREEN, _XL_YELLOW, _XL_WHITE, _XL_YELLOW, _XL_YELLOW, _XL_WHITE, _XL_WHITE, _XL_WHITE, _XL_CYAN, _XL_RED, _XL_YELLOW }; #endif int main(void) { uint8_t i; uint8_t j; uint8_t init_y; uint8_t max_j; _XL_INIT_GRAPHICS(); _XL_INIT_INPUT(); while(1) { _XL_CLEAR_SCREEN(); _XL_SET_TEXT_COLOR(_XL_WHITE); _XL_PRINT(4,0, _XL_P _XL_R _XL_E _XL_S _XL_S _XL_SPACE _XL_F _XL_I _XL_R _XL_E); _XL_WAIT_FOR_INPUT(); _XL_CLEAR_SCREEN(); while(1) { i = (uint8_t) (_XL_RAND() % XSize); max_j = (uint8_t) (_XL_RAND() % (MAX_TILES+1)); init_y = (uint8_t) (_XL_RAND() % MAX_INIT_Y_POS); for(j=0;jMAX_5_DIGIT_NUMBER) { i=MAX_5_DIGIT_NUMBER; } _XL_PRINTD(XSize/2-3,10,5,i); } _XL_WAIT_FOR_INPUT(); } _XL_CLEAR_SCREEN(); _XL_PRINT((XSize-11)/2,YSize/2,"END OF DEMO"); while(1){}; return EXIT_SUCCESS; } ================================================ FILE: src/examples/numbers/tiles/6x8/tile0.txt ================================================ 12,18,12,51,45,12,18,18 ================================================ FILE: src/examples/numbers/tiles/6x8/tile1.txt ================================================ 0,0,12,18,12,51,45,12 ================================================ FILE: src/examples/numbers/tiles/6x8/tile10.txt ================================================ 0,0,0,32,16,40,8,8 ================================================ FILE: src/examples/numbers/tiles/6x8/tile11.txt ================================================ 0,0,0,1,2,5,4,4 ================================================ FILE: src/examples/numbers/tiles/6x8/tile12.txt ================================================ 16,56,16,60,18,21,57,41 ================================================ FILE: src/examples/numbers/tiles/6x8/tile13.txt ================================================ 0,0,0,15,16,40,39,32 ================================================ FILE: src/examples/numbers/tiles/6x8/tile14.txt ================================================ 0,42,42,58,42,42,0,0 ================================================ FILE: src/examples/numbers/tiles/6x8/tile15.txt ================================================ 0,37,37,37,37,50,0,0 ================================================ FILE: src/examples/numbers/tiles/6x8/tile16.txt ================================================ 0,0,0,60,2,5,57,1 ================================================ FILE: src/examples/numbers/tiles/6x8/tile17.txt ================================================ 2,7,2,2,2,2,2,5 ================================================ FILE: src/examples/numbers/tiles/6x8/tile18.txt ================================================ 16,56,16,16,16,16,16,40 ================================================ FILE: src/examples/numbers/tiles/6x8/tile19.txt ================================================ 45,18,12,51,45,12,18,18 ================================================ FILE: src/examples/numbers/tiles/6x8/tile2.txt ================================================ 18,18,0,0,0,0,0,0 ================================================ FILE: src/examples/numbers/tiles/6x8/tile20.txt ================================================ 0,0,45,18,12,51,45,12 ================================================ FILE: src/examples/numbers/tiles/6x8/tile21.txt ================================================ 0,0,0,0,45,18,12,51 ================================================ FILE: src/examples/numbers/tiles/6x8/tile22.txt ================================================ 0,0,0,0,0,0,45,18 ================================================ FILE: src/examples/numbers/tiles/6x8/tile23.txt ================================================ 0,4,21,14,27,14,21,4 ================================================ FILE: src/examples/numbers/tiles/6x8/tile24.txt ================================================ 63,41,63,37,63,41,63,37 ================================================ FILE: src/examples/numbers/tiles/6x8/tile25.txt ================================================ 63,8, 31, 16, 30, 2,62, 63 ================================================ FILE: src/examples/numbers/tiles/6x8/tile25_ORIG.txt ================================================ 0,8, 31, 16, 30, 2,62, 4 ================================================ FILE: src/examples/numbers/tiles/6x8/tile3.txt ================================================ 0,0,0,0,12,18,12,51 ================================================ FILE: src/examples/numbers/tiles/6x8/tile4.txt ================================================ 45,12,18,18,0,0,0,0 ================================================ FILE: src/examples/numbers/tiles/6x8/tile5.txt ================================================ 0,0,0,0,0,0,12,18 ================================================ FILE: src/examples/numbers/tiles/6x8/tile6.txt ================================================ 12,51,45,12,18,18,0,0 ================================================ FILE: src/examples/numbers/tiles/6x8/tile7.txt ================================================ 12,18,12,0,45,0,18,18 ================================================ FILE: src/examples/numbers/tiles/6x8/tile8.txt ================================================ 0,12,18,33,33,18,12,0 ================================================ FILE: src/examples/numbers/tiles/6x8/tile9.txt ================================================ 2,7,2,15,18,42,39,37 ================================================ FILE: src/examples/numbers/tiles/6x9/tile0.txt ================================================ 12,18,12,51,45,12,18,18,18 ================================================ FILE: src/examples/numbers/tiles/6x9/tile1.txt ================================================ 0,0,0,12,18,12,51,45,12 ================================================ FILE: src/examples/numbers/tiles/6x9/tile10.txt ================================================ 0,0,0,0,32,16,40,8,8 ================================================ FILE: src/examples/numbers/tiles/6x9/tile11.txt ================================================ 0,0,0,0,1,2,5,4,4 ================================================ FILE: src/examples/numbers/tiles/6x9/tile12.txt ================================================ 0,16,56,16,60,18,21,57,41 ================================================ FILE: src/examples/numbers/tiles/6x9/tile13.txt ================================================ 0,0,0,0,15,16,40,39,32 ================================================ FILE: src/examples/numbers/tiles/6x9/tile14.txt ================================================ 0,0,42,42,58,42,42,0,0 ================================================ FILE: src/examples/numbers/tiles/6x9/tile15.txt ================================================ 0,0,37,37,37,37,50,0,0 ================================================ FILE: src/examples/numbers/tiles/6x9/tile16.txt ================================================ 0,0,0,0,60,2,5,57,1 ================================================ FILE: src/examples/numbers/tiles/6x9/tile17.txt ================================================ 2,2,7,2,2,2,2,2,5 ================================================ FILE: src/examples/numbers/tiles/6x9/tile18.txt ================================================ 16,16,56,16,16,16,16,16,40 ================================================ FILE: src/examples/numbers/tiles/6x9/tile19.txt ================================================ 45,18,12,51,45,12,18,18,18 ================================================ FILE: src/examples/numbers/tiles/6x9/tile2.txt ================================================ 18,18,18,0,0,0,0,0,0 ================================================ FILE: src/examples/numbers/tiles/6x9/tile20.txt ================================================ 0,0,0,45,18,12,51,45,12 ================================================ FILE: src/examples/numbers/tiles/6x9/tile21.txt ================================================ 0,0,0,0,0,45,18,12,51 ================================================ FILE: src/examples/numbers/tiles/6x9/tile22.txt ================================================ 0,0,0,0,0,0,0,45,18 ================================================ FILE: src/examples/numbers/tiles/6x9/tile23.txt ================================================ 0,0,4,21,14,27,14,21,4 ================================================ FILE: src/examples/numbers/tiles/6x9/tile24.txt ================================================ 0,63,41,63,37,63,41,63,37 ================================================ FILE: src/examples/numbers/tiles/6x9/tile25 _ORIG.txt ================================================ 0,8, 31, 16, 30, 2,62, 4,0 ================================================ FILE: src/examples/numbers/tiles/6x9/tile25.txt ================================================ 63,8, 31, 16, 30, 2,62, 4,63 ================================================ FILE: src/examples/numbers/tiles/6x9/tile3.txt ================================================ 0,0,0,0,0,12,18,12,51 ================================================ FILE: src/examples/numbers/tiles/6x9/tile4.txt ================================================ 45,12,18,18,0,0,0,0,0 ================================================ FILE: src/examples/numbers/tiles/6x9/tile5.txt ================================================ 0,0,0,0,0,0,0,12,18 ================================================ FILE: src/examples/numbers/tiles/6x9/tile6.txt ================================================ 12,51,45,12,18,18,18,0,0 ================================================ FILE: src/examples/numbers/tiles/6x9/tile7.txt ================================================ 12,18,12,0,45,0,18,18 ================================================ FILE: src/examples/numbers/tiles/6x9/tile8.txt ================================================ 0,0,12,18,33,33,18,12,0 ================================================ FILE: src/examples/numbers/tiles/6x9/tile9.txt ================================================ 0,2,7,2,15,18,42,39,37 ================================================ FILE: src/examples/numbers/tiles/7x8/tile0.txt ================================================ 12,18,12,51,45,12,18,18 ================================================ FILE: src/examples/numbers/tiles/7x8/tile1.txt ================================================ 0,0,12,18,12,51,45,12 ================================================ FILE: src/examples/numbers/tiles/7x8/tile10.txt ================================================ 0,0,0,32,16,40,8,8 ================================================ FILE: src/examples/numbers/tiles/7x8/tile11.txt ================================================ 0,0,0,1,2,5,4,4 ================================================ FILE: src/examples/numbers/tiles/7x8/tile12.txt ================================================ 16,56,16,60,18,21,57,41 ================================================ FILE: src/examples/numbers/tiles/7x8/tile13.txt ================================================ 0,0,0,15,16,40,39,32 ================================================ FILE: src/examples/numbers/tiles/7x8/tile14.txt ================================================ 0,42,42,58,42,42,0,0 ================================================ FILE: src/examples/numbers/tiles/7x8/tile15.txt ================================================ 0,37,37,37,37,50,0,0 ================================================ FILE: src/examples/numbers/tiles/7x8/tile16.txt ================================================ 0,0,0,60,2,5,57,1 ================================================ FILE: src/examples/numbers/tiles/7x8/tile17.txt ================================================ 2,7,2,2,2,2,2,5 ================================================ FILE: src/examples/numbers/tiles/7x8/tile18.txt ================================================ 16,56,16,16,16,16,16,40 ================================================ FILE: src/examples/numbers/tiles/7x8/tile19.txt ================================================ 45,18,12,51,45,12,18,18 ================================================ FILE: src/examples/numbers/tiles/7x8/tile2.txt ================================================ 18,18,0,0,0,0,0,0 ================================================ FILE: src/examples/numbers/tiles/7x8/tile20.txt ================================================ 0,0,45,18,12,51,45,12 ================================================ FILE: src/examples/numbers/tiles/7x8/tile21.txt ================================================ 0,0,0,0,45,18,12,51 ================================================ FILE: src/examples/numbers/tiles/7x8/tile22.txt ================================================ 0,0,0,0,0,0,45,18 ================================================ FILE: src/examples/numbers/tiles/7x8/tile23.txt ================================================ 0,4,21,14,27,14,21,4 ================================================ FILE: src/examples/numbers/tiles/7x8/tile24.txt ================================================ 63,41,63,37,63,41,63,37 ================================================ FILE: src/examples/numbers/tiles/7x8/tile25.txt ================================================ $7f,$3e,$60,$3c,$06,$7c,$18,$7f ================================================ FILE: src/examples/numbers/tiles/7x8/tile25_ORIG.txt ================================================ $18,$3e,$60,$3c,$06,$7c,$18,$00 ================================================ FILE: src/examples/numbers/tiles/7x8/tile3.txt ================================================ 0,0,0,0,12,18,12,51 ================================================ FILE: src/examples/numbers/tiles/7x8/tile4.txt ================================================ 45,12,18,18,0,0,0,0 ================================================ FILE: src/examples/numbers/tiles/7x8/tile5.txt ================================================ 0,0,0,0,0,0,12,18 ================================================ FILE: src/examples/numbers/tiles/7x8/tile6.txt ================================================ 12,51,45,12,18,18,0,0 ================================================ FILE: src/examples/numbers/tiles/7x8/tile7.txt ================================================ 12,18,12,0,45,0,18,18 ================================================ FILE: src/examples/numbers/tiles/7x8/tile8.txt ================================================ 0,12,18,33,33,18,12,0 ================================================ FILE: src/examples/numbers/tiles/7x8/tile9.txt ================================================ 2,7,2,15,18,42,39,37 ================================================ FILE: src/examples/numbers/tiles/8x8/tile0.txt ================================================ 24, 36, 24,102,153, 24, 36,36 ================================================ FILE: src/examples/numbers/tiles/8x8/tile1.txt ================================================ 0,0,24, 36, 24,102,89, 24 ================================================ FILE: src/examples/numbers/tiles/8x8/tile10.txt ================================================ 0,0,0,192,32,80,144,0 ================================================ FILE: src/examples/numbers/tiles/8x8/tile11.txt ================================================ 0,0,0,3,4,10,9,0 ================================================ FILE: src/examples/numbers/tiles/8x8/tile12.txt ================================================ 32,112,32,252,34,37,249,80 ================================================ FILE: src/examples/numbers/tiles/8x8/tile13.txt ================================================ 0, 0, 0,63,64,160,159,0 ================================================ FILE: src/examples/numbers/tiles/8x8/tile14.txt ================================================ $2A,$2A,$2A,$3A,$2A,$2A,$2A,$00 ================================================ FILE: src/examples/numbers/tiles/8x8/tile15.txt ================================================ 74,74,74,74,74,74,100,0 ================================================ FILE: src/examples/numbers/tiles/8x8/tile16.txt ================================================ 0,0,0,252,2,5,249,0 ================================================ FILE: src/examples/numbers/tiles/8x8/tile17.txt ================================================ 2,7,2,2,2,2,2,5 ================================================ FILE: src/examples/numbers/tiles/8x8/tile18.txt ================================================ 32,112,32,32,32,32,32,80 ================================================ FILE: src/examples/numbers/tiles/8x8/tile19.txt ================================================ 90,36, 24,102,153, 24, 36,36 ================================================ FILE: src/examples/numbers/tiles/8x8/tile2.txt ================================================ 36,36,0,0,0,0,0,0 ================================================ FILE: src/examples/numbers/tiles/8x8/tile20.txt ================================================ 0,0,90,36, 24,102,89, 24 ================================================ FILE: src/examples/numbers/tiles/8x8/tile21.txt ================================================ 0,0,0,0,90,36, 24,102 ================================================ FILE: src/examples/numbers/tiles/8x8/tile22.txt ================================================ 0,0,0,0,0,0,90,36 ================================================ FILE: src/examples/numbers/tiles/8x8/tile23.txt ================================================ 8,42,28,119,28,42,8,0 ================================================ FILE: src/examples/numbers/tiles/8x8/tile24.txt ================================================ 240,240,255,133,255,161,255,0 ================================================ FILE: src/examples/numbers/tiles/8x8/tile25.txt ================================================ $18,$3e,$60,$3c,$06,$7c,$18,$ff ================================================ FILE: src/examples/numbers/tiles/8x8/tile3.txt ================================================ 0,0,0,0,24, 36, 24,102 ================================================ FILE: src/examples/numbers/tiles/8x8/tile4.txt ================================================ 153, 24, 36,36,0,0,0,0 ================================================ FILE: src/examples/numbers/tiles/8x8/tile5.txt ================================================ 0,0,0,0,0,0,24, 36 ================================================ FILE: src/examples/numbers/tiles/8x8/tile6.txt ================================================ 24,102,154, 24, 36,36,0,0 ================================================ FILE: src/examples/numbers/tiles/8x8/tile7.txt ================================================ 24, 36, 24, 0,153, 0, 36,36 ================================================ FILE: src/examples/numbers/tiles/8x8/tile8.txt ================================================ 60,126,231,195,195,231,126,60 ================================================ FILE: src/examples/numbers/tiles/8x8/tile9.txt ================================================ 2,7,2,63,66,162,159,5 ================================================ FILE: src/examples/numbers/tiles/ASCII/char_tiles.h ================================================ #ifndef _CHAR_TILES_H #define _CHAR_TILES_H #include "cross_lib.h" #define _TILE_0 '*' #define _TILE_1 '*' #define _TILE_2 '-' #define _TILE_3 '-' // Apple #define _TILE_4 'O' // Body #define _TILE_5 'O' #define _TILE_6 'H' #define _TILE_7 '=' #if defined(_XL_NO_COLOR) #define _TILE_8 'R' #else #define _TILE_8 'O' #endif #define _TILE_9 'L' #define _TILE_10 '=' #define _TILE_11 'I' #define _TILE_12 'I' #define _TILE_13 '-' #define _TILE_14 'S' #define _TILE_15 'I' #define _TILE_16 'C' #define _TILE_17 'X' #if defined(_XL_NO_COLOR) #define _TILE_18 'S' #else #define _TILE_18 'O' #endif #endif // _CHAR_TILES_H ================================================ FILE: src/examples/palette/Makefile.palette ================================================ FULL_FILES ?= \ $(BASIC_CROSS_LIB_FILES) \ $(CROSS_LIB_PATH)/sleep/sleep_macros.c \ $(SOURCE_PATH)/main.c GAME_NAME := palette PARENT_DIR = examples include ./$(PARENT_DIR)/$(GAME_NAME)/config/project_config.mk include ./Makefile_common include ./makefiles.common/auxiliary/Makefile_default_values ================================================ FILE: src/examples/palette/config/project_config.mk ================================================ 4COLOR_PALETTE=-D__USE_GREEN #-D__USE_GREEN 5COLOR_PALETTE= -D__USE_GREEN_YELLOW #-D__USE_CYAN_YELLOW #-D__USE_GREEN_YELLOW ##################################################################### # SLOWDOWN VALUES # Common factor _COMMON_SLOWDOWN_FACTOR=10 # CC65 _APPLE2_SLOWDOWN=30 _APPLE2ENH_SLOWDOWN=30 _APPLE2_HGR_SLOWDOWN=50 _APPLE2ENH_HGR_SLOWDOWN=50 _ATARI_SLOWDOWN=70 _ATARI5200_SLOWDOWN=70 _C16_SLOWDOWN=55 _C64_SLOWDOWN=45 _CREATIVISION_SLOWDOWN=100 _GAMATE_SLOWDOWN=120 _ORIC_SLOWDOWN=40 _NES_SLOWDOWN=80 _PET_SLOWDOWN=40 _PCE_SLOWDOWN=550 _SUPERVISION_SLOWDOWN=140 _VIC20_SLOWDOWN=55 # Z88DK _AQUARIUS_SLOWDOWN=105 _ACE_SLOWDOWN=100 _C128_Z80_40COL_SLOWDOWN=20 _C128_Z80_80COL_SLOWDOWN=1 _CPC_MODE0_SLOWDOWN=100 _CPC_CPCRSLIB_MODE1_SLOWDOWN=90 _CPC_MODE2_SLOWDOWN=90 _CPM_Z80_SLOWDOWN=90 _CPM_INTEL8080_SLOWDOWN=80 _COLECO_SLOWDOWN=100 _GB_SLOWDOWN=280 _GG_SLOWDOWN=300 _GB_WAIT_VSYNC_SLOWDOWN=150 _LASER500_SLOWDOWN=200 _MC1000_SLOWDOWN=75 _MSX_SLOWDOWN=200 _MSX_FIXED_COLORS_SLOWDOWN=300 _MTX500_SLOWDOWN=200 _MTX512_SLOWDOWN=200 _MZ_SLOWDOWN=200 _SAMCOUPE_SLOWDOWN=300 _SMS_SLOWDOWN=160 _SPECTRUM_SLOWDOWN=160 _VG5K_SLOWDOWN=75 _VZ200_SLOWDOWN=250 _ZX81_SLOWDOWN=10 _ZX81_WRX_SLOWDOWN=1 # CMOC _COCO_SLOWDOWN=160 _DRAGON_SLOWDOWN=160 _MO5_SLOWDOWN=160 _TO7_SLOWDOWN=160 # LCC1802 _COMX_SLOWDOWN=30 _PECOM_SLOWDOWN=30 _TMC600_SLOWDOWN=50 _MICRO_SLOWDOWN=60 _CIDELSA_SLOWDOWN=40 #CC6303 _MC10_SLOWDOWN=14 # GCC _NCURSES_SLOWDOWN=12 ================================================ FILE: src/examples/palette/main.c ================================================ /* --------------------------------------------------------------------------------------- */ // // CROSS SHOOT by Fabrizio Caruso // // Fabrizio_Caruso@hotmail.com // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from // the use of this software. // Permission is granted to anyone to use this software for non-commercial applications, // subject to the following restrictions: // 1. The origin of this software must not be misrepresented; you must not // claim that you wrote the original software. If you use this software in // a product, an acknowledgment in the product documentation would be // appreciated but is not required. // 2. Altered source versions must be plainly marked as such, and must not // be misrepresented as being the original software. // 3. This notice may not be removed or altered from any source distribution. /* --------------------------------------------------------------------------------------- */ #include "cross_lib.h" #define NUMBER_OF_COLORS 7 #define MAX_STRING_SIZE 10 const uint8_t tile[] = { _TILE_0, _TILE_1, _TILE_2, _TILE_3, _TILE_4, _TILE_5, _TILE_6, _TILE_7, _TILE_8, _TILE_9, _TILE_10, _TILE_11, _TILE_12, _TILE_13, _TILE_14, _TILE_15, _TILE_16, _TILE_17, _TILE_18, _TILE_19, _TILE_20, _TILE_21, _TILE_22, _TILE_23, _TILE_24, _TILE_25, _TILE_26 }; #if !defined(_XL_NO_COLOR) static const uint8_t color_code[NUMBER_OF_COLORS] = {_XL_WHITE, _XL_RED, _XL_CYAN, _XL_GREEN, _XL_YELLOW, _XL_BLUE, _XL_MAGENTA}; #endif #if XSize>=38 const char color_name[NUMBER_OF_COLORS][MAX_STRING_SIZE] = { "WHITE ", "RED ", "CYAN ", "GREEN ", "YELLOW ", "BLUE ", "MAGENTA ", }; #define NAME_SIZE 7 #else const char color_name[NUMBER_OF_COLORS][MAX_STRING_SIZE] = { "WH ", "RE ", "CY ", "GR ", "YE ", "BL ", "MA ", }; #define NAME_SIZE 2 #endif #if YSize<=9 #define SHORT_X_OFFSET 4 #define SHOOT_Y_OFFSET 8 #elif YSize<=14 #define SHORT_X_OFFSET 5 #define SHOOT_Y_OFFSET 5 #else #define SHORT_X_OFFSET 0 #define SHOOT_Y_OFFSET 0 #endif #if _XL_NUMBER_OF_TILES>=XSize-NAME_SIZE #define DISPLAYED_TILES (XSize-NAME_SIZE-1)-SHORT_X_OFFSET #define OFFSET (NAME_SIZE+1) #else #define DISPLAYED_TILES _XL_NUMBER_OF_TILES #define OFFSET (NAME_SIZE+1) #endif int main(void) { uint8_t i; uint8_t j; _XL_INIT_GRAPHICS(); _XL_INIT_SOUND(); _XL_INIT_INPUT(); // for(;;) // { _XL_CLEAR_SCREEN(); for(j=0;j=16 && YSize>=15 _XL_PRINT(XSize-1-1,0,"TX"); _XL_PRINT(XSize-1-1,3,"CL"); #if defined(_XL_NO_TEXT_COLOR) _XL_PRINT(XSize-1-2,1,"OFF"); #else _XL_PRINT(XSize-1-1,1,"ON"); #endif #if defined(_XL_NO_COLOR) _XL_PRINT(XSize-1-2, 4,"OFF"); #else _XL_PRINT(XSize-1-1, 4,"ON"); #endif #endif _XL_SET_TEXT_COLOR(color_code[j]); _XL_PRINT(0,0+j, (char *) color_name[j]); _XL_PRINT(NAME_SIZE+1,0+j,"0123456789"); } for(j=0;j>1), row, Text); } #define PRINT_CENTERED(Text) \ PRINT_CENTERED_ON_ROW((YSize>>1), Text) int main(void) { uint16_t i; uint8_t j; uint8_t k; uint8_t m; _XL_INIT_GRAPHICS(); _XL_INIT_INPUT(); for(j=1;j<5;++j) { _XL_CLEAR_SCREEN(); _XL_SET_TEXT_COLOR(_XL_WHITE); _XL_PRINT(COL_OFFSET ,1,"PAUSE"); _XL_PRINTD(COL_OFFSET+7 ,1,1, j); _XL_PRINT(COL_OFFSET+10 ,1,"SECONDS"); PRINT_CENTERED_ON_ROW(3,"PRESS FIRE"); _XL_WAIT_FOR_INPUT(); PRINT_CENTERED_ON_ROW(3," "); _XL_PRINT(COL_OFFSET ,5,"PAUSING"); _XL_SLEEP(j); _XL_PRINT(COL_OFFSET ,YSize-3,"END OF PAUSE"); PRINT_CENTERED_ON_ROW(YSize-1,"PRESS FIRE"); _XL_WAIT_FOR_INPUT(); _XL_CLEAR_SCREEN(); i = j*_XL_SLOW_DOWN_FACTOR; _XL_PRINT(COL_OFFSET ,1,"PAUSE"); _XL_PRINTD(COL_OFFSET+7 ,1,5, i); _XL_PRINT(COL_OFFSET+14 ,1,"STEPS"); PRINT_CENTERED_ON_ROW(3,"PRESS FIRE"); _XL_WAIT_FOR_INPUT(); PRINT_CENTERED_ON_ROW(3," "); _XL_PRINT(COL_OFFSET ,5,"PAUSING"); for(m=0;m>1), row, Text); } #define PRINT_CENTERED(Text) \ PRINT_CENTERED_ON_ROW((YSize>>1), Text) int main(void) { uint8_t k; _XL_INIT_GRAPHICS(); _XL_INIT_INPUT(); _XL_INIT_SOUND(); for(k=0;k<3;++k) { _XL_CLEAR_SCREEN(); _XL_SET_TEXT_COLOR(_XL_WHITE); PRINT_CENTERED_ON_ROW(0, "SOUND"); _XL_WAIT_FOR_INPUT(); #if defined(_XL_NO_SOUND) _XL_PRINT(XSize-1-9,YSize-1,"SOUND OFF"); #else _XL_PRINT(XSize-1-8,YSize-1,"SOUND ON"); #endif PRINT_CENTERED_ON_ROW(1+1*LINE_SKIP, "PING"); _XL_WAIT_FOR_INPUT(); _XL_PING_SOUND(); _XL_WAIT_FOR_INPUT(); PRINT_CENTERED_ON_ROW(1+2*LINE_SKIP, "TICK"); _XL_WAIT_FOR_INPUT(); _XL_TOCK_SOUND(); _XL_WAIT_FOR_INPUT(); PRINT_CENTERED_ON_ROW(1+3*LINE_SKIP, "TOCK"); _XL_WAIT_FOR_INPUT(); _XL_TICK_SOUND(); _XL_WAIT_FOR_INPUT(); PRINT_CENTERED_ON_ROW(1+4*LINE_SKIP, "ZAP"); _XL_WAIT_FOR_INPUT(); _XL_ZAP_SOUND(); _XL_WAIT_FOR_INPUT(); PRINT_CENTERED_ON_ROW(1+5*LINE_SKIP, "SHOOT"); _XL_WAIT_FOR_INPUT(); _XL_SHOOT_SOUND(); _XL_WAIT_FOR_INPUT(); PRINT_CENTERED_ON_ROW(1+6*LINE_SKIP, "EXPLOSION"); _XL_WAIT_FOR_INPUT(); _XL_EXPLOSION_SOUND(); _XL_WAIT_FOR_INPUT(); } PRINT_CENTERED_ON_ROW(YSize-3, "END OF TEST"); while(1){}; return EXIT_SUCCESS; } ================================================ FILE: src/examples/sounds/tiles/6x8/tile0.txt ================================================ 12,18,12,51,45,12,18,18 ================================================ FILE: src/examples/sounds/tiles/6x8/tile1.txt ================================================ 0,0,12,18,12,51,45,12 ================================================ FILE: src/examples/sounds/tiles/6x8/tile10.txt ================================================ 0,0,0,32,16,40,8,8 ================================================ FILE: src/examples/sounds/tiles/6x8/tile11.txt ================================================ 0,0,0,1,2,5,4,4 ================================================ FILE: src/examples/sounds/tiles/6x8/tile12.txt ================================================ 16,56,16,60,18,21,57,41 ================================================ FILE: src/examples/sounds/tiles/6x8/tile13.txt ================================================ 0,0,0,15,16,40,39,32 ================================================ FILE: src/examples/sounds/tiles/6x8/tile14.txt ================================================ 0,42,42,58,42,42,0,0 ================================================ FILE: src/examples/sounds/tiles/6x8/tile15.txt ================================================ 0,37,37,37,37,50,0,0 ================================================ FILE: src/examples/sounds/tiles/6x8/tile16.txt ================================================ 0,0,0,60,2,5,57,1 ================================================ FILE: src/examples/sounds/tiles/6x8/tile17.txt ================================================ 2,7,2,2,2,2,2,5 ================================================ FILE: src/examples/sounds/tiles/6x8/tile18.txt ================================================ 16,56,16,16,16,16,16,40 ================================================ FILE: src/examples/sounds/tiles/6x8/tile19.txt ================================================ 45,18,12,51,45,12,18,18 ================================================ FILE: src/examples/sounds/tiles/6x8/tile2.txt ================================================ 18,18,0,0,0,0,0,0 ================================================ FILE: src/examples/sounds/tiles/6x8/tile20.txt ================================================ 0,0,45,18,12,51,45,12 ================================================ FILE: src/examples/sounds/tiles/6x8/tile21.txt ================================================ 0,0,0,0,45,18,12,51 ================================================ FILE: src/examples/sounds/tiles/6x8/tile22.txt ================================================ 0,0,0,0,0,0,45,18 ================================================ FILE: src/examples/sounds/tiles/6x8/tile23.txt ================================================ 0,4,21,14,27,14,21,4 ================================================ FILE: src/examples/sounds/tiles/6x8/tile24.txt ================================================ 63,41,63,37,63,41,63,37 ================================================ FILE: src/examples/sounds/tiles/6x8/tile25.txt ================================================ 63,8, 31, 16, 30, 2,62, 63 ================================================ FILE: src/examples/sounds/tiles/6x8/tile25_ORIG.txt ================================================ 0,8, 31, 16, 30, 2,62, 4 ================================================ FILE: src/examples/sounds/tiles/6x8/tile3.txt ================================================ 0,0,0,0,12,18,12,51 ================================================ FILE: src/examples/sounds/tiles/6x8/tile4.txt ================================================ 45,12,18,18,0,0,0,0 ================================================ FILE: src/examples/sounds/tiles/6x8/tile5.txt ================================================ 0,0,0,0,0,0,12,18 ================================================ FILE: src/examples/sounds/tiles/6x8/tile6.txt ================================================ 12,51,45,12,18,18,0,0 ================================================ FILE: src/examples/sounds/tiles/6x8/tile7.txt ================================================ 12,18,12,0,45,0,18,18 ================================================ FILE: src/examples/sounds/tiles/6x8/tile8.txt ================================================ 0,12,18,33,33,18,12,0 ================================================ FILE: src/examples/sounds/tiles/6x8/tile9.txt ================================================ 2,7,2,15,18,42,39,37 ================================================ FILE: src/examples/sounds/tiles/6x9/tile0.txt ================================================ 12,18,12,51,45,12,18,18,18 ================================================ FILE: src/examples/sounds/tiles/6x9/tile1.txt ================================================ 0,0,0,12,18,12,51,45,12 ================================================ FILE: src/examples/sounds/tiles/6x9/tile10.txt ================================================ 0,0,0,0,32,16,40,8,8 ================================================ FILE: src/examples/sounds/tiles/6x9/tile11.txt ================================================ 0,0,0,0,1,2,5,4,4 ================================================ FILE: src/examples/sounds/tiles/6x9/tile12.txt ================================================ 0,16,56,16,60,18,21,57,41 ================================================ FILE: src/examples/sounds/tiles/6x9/tile13.txt ================================================ 0,0,0,0,15,16,40,39,32 ================================================ FILE: src/examples/sounds/tiles/6x9/tile14.txt ================================================ 0,0,42,42,58,42,42,0,0 ================================================ FILE: src/examples/sounds/tiles/6x9/tile15.txt ================================================ 0,0,37,37,37,37,50,0,0 ================================================ FILE: src/examples/sounds/tiles/6x9/tile16.txt ================================================ 0,0,0,0,60,2,5,57,1 ================================================ FILE: src/examples/sounds/tiles/6x9/tile17.txt ================================================ 2,2,7,2,2,2,2,2,5 ================================================ FILE: src/examples/sounds/tiles/6x9/tile18.txt ================================================ 16,16,56,16,16,16,16,16,40 ================================================ FILE: src/examples/sounds/tiles/6x9/tile19.txt ================================================ 45,18,12,51,45,12,18,18,18 ================================================ FILE: src/examples/sounds/tiles/6x9/tile2.txt ================================================ 18,18,18,0,0,0,0,0,0 ================================================ FILE: src/examples/sounds/tiles/6x9/tile20.txt ================================================ 0,0,0,45,18,12,51,45,12 ================================================ FILE: src/examples/sounds/tiles/6x9/tile21.txt ================================================ 0,0,0,0,0,45,18,12,51 ================================================ FILE: src/examples/sounds/tiles/6x9/tile22.txt ================================================ 0,0,0,0,0,0,0,45,18 ================================================ FILE: src/examples/sounds/tiles/6x9/tile23.txt ================================================ 0,0,4,21,14,27,14,21,4 ================================================ FILE: src/examples/sounds/tiles/6x9/tile24.txt ================================================ 0,63,41,63,37,63,41,63,37 ================================================ FILE: src/examples/sounds/tiles/6x9/tile25 _ORIG.txt ================================================ 0,8, 31, 16, 30, 2,62, 4,0 ================================================ FILE: src/examples/sounds/tiles/6x9/tile25.txt ================================================ 63,8, 31, 16, 30, 2,62, 4,63 ================================================ FILE: src/examples/sounds/tiles/6x9/tile3.txt ================================================ 0,0,0,0,0,12,18,12,51 ================================================ FILE: src/examples/sounds/tiles/6x9/tile4.txt ================================================ 45,12,18,18,0,0,0,0,0 ================================================ FILE: src/examples/sounds/tiles/6x9/tile5.txt ================================================ 0,0,0,0,0,0,0,12,18 ================================================ FILE: src/examples/sounds/tiles/6x9/tile6.txt ================================================ 12,51,45,12,18,18,18,0,0 ================================================ FILE: src/examples/sounds/tiles/6x9/tile7.txt ================================================ 12,18,12,0,45,0,18,18 ================================================ FILE: src/examples/sounds/tiles/6x9/tile8.txt ================================================ 0,0,12,18,33,33,18,12,0 ================================================ FILE: src/examples/sounds/tiles/6x9/tile9.txt ================================================ 0,2,7,2,15,18,42,39,37 ================================================ FILE: src/examples/sounds/tiles/7x8/tile0.txt ================================================ 12,18,12,51,45,12,18,18 ================================================ FILE: src/examples/sounds/tiles/7x8/tile1.txt ================================================ 0,0,12,18,12,51,45,12 ================================================ FILE: src/examples/sounds/tiles/7x8/tile10.txt ================================================ 0,0,0,32,16,40,8,8 ================================================ FILE: src/examples/sounds/tiles/7x8/tile11.txt ================================================ 0,0,0,1,2,5,4,4 ================================================ FILE: src/examples/sounds/tiles/7x8/tile12.txt ================================================ 16,56,16,60,18,21,57,41 ================================================ FILE: src/examples/sounds/tiles/7x8/tile13.txt ================================================ 0,0,0,15,16,40,39,32 ================================================ FILE: src/examples/sounds/tiles/7x8/tile14.txt ================================================ 0,42,42,58,42,42,0,0 ================================================ FILE: src/examples/sounds/tiles/7x8/tile15.txt ================================================ 0,37,37,37,37,50,0,0 ================================================ FILE: src/examples/sounds/tiles/7x8/tile16.txt ================================================ 0,0,0,60,2,5,57,1 ================================================ FILE: src/examples/sounds/tiles/7x8/tile17.txt ================================================ 2,7,2,2,2,2,2,5 ================================================ FILE: src/examples/sounds/tiles/7x8/tile18.txt ================================================ 16,56,16,16,16,16,16,40 ================================================ FILE: src/examples/sounds/tiles/7x8/tile19.txt ================================================ 45,18,12,51,45,12,18,18 ================================================ FILE: src/examples/sounds/tiles/7x8/tile2.txt ================================================ 18,18,0,0,0,0,0,0 ================================================ FILE: src/examples/sounds/tiles/7x8/tile20.txt ================================================ 0,0,45,18,12,51,45,12 ================================================ FILE: src/examples/sounds/tiles/7x8/tile21.txt ================================================ 0,0,0,0,45,18,12,51 ================================================ FILE: src/examples/sounds/tiles/7x8/tile22.txt ================================================ 0,0,0,0,0,0,45,18 ================================================ FILE: src/examples/sounds/tiles/7x8/tile23.txt ================================================ 0,4,21,14,27,14,21,4 ================================================ FILE: src/examples/sounds/tiles/7x8/tile24.txt ================================================ 63,41,63,37,63,41,63,37 ================================================ FILE: src/examples/sounds/tiles/7x8/tile25.txt ================================================ $ff,$3e,$60,$3c,$06,$7c,$18,$ff ================================================ FILE: src/examples/sounds/tiles/7x8/tile25_ORIG.txt ================================================ $18,$3e,$60,$3c,$06,$7c,$18,$00 ================================================ FILE: src/examples/sounds/tiles/7x8/tile3.txt ================================================ 0,0,0,0,12,18,12,51 ================================================ FILE: src/examples/sounds/tiles/7x8/tile4.txt ================================================ 45,12,18,18,0,0,0,0 ================================================ FILE: src/examples/sounds/tiles/7x8/tile5.txt ================================================ 0,0,0,0,0,0,12,18 ================================================ FILE: src/examples/sounds/tiles/7x8/tile6.txt ================================================ 12,51,45,12,18,18,0,0 ================================================ FILE: src/examples/sounds/tiles/7x8/tile7.txt ================================================ 12,18,12,0,45,0,18,18 ================================================ FILE: src/examples/sounds/tiles/7x8/tile8.txt ================================================ 0,12,18,33,33,18,12,0 ================================================ FILE: src/examples/sounds/tiles/7x8/tile9.txt ================================================ 2,7,2,15,18,42,39,37 ================================================ FILE: src/examples/sounds/tiles/8x8/tile0.txt ================================================ 24, 36, 24,102,153, 24, 36,36 ================================================ FILE: src/examples/sounds/tiles/8x8/tile1.txt ================================================ 0,0,24, 36, 24,102,89, 24 ================================================ FILE: src/examples/sounds/tiles/8x8/tile10.txt ================================================ 0,0,0,192,32,80,144,0 ================================================ FILE: src/examples/sounds/tiles/8x8/tile11.txt ================================================ 0,0,0,3,4,10,9,0 ================================================ FILE: src/examples/sounds/tiles/8x8/tile12.txt ================================================ 32,112,32,252,34,37,249,80 ================================================ FILE: src/examples/sounds/tiles/8x8/tile13.txt ================================================ 0, 0, 0,63,64,160,159,0 ================================================ FILE: src/examples/sounds/tiles/8x8/tile14.txt ================================================ $2A,$2A,$2A,$3A,$2A,$2A,$2A,$00 ================================================ FILE: src/examples/sounds/tiles/8x8/tile15.txt ================================================ 74,74,74,74,74,74,100,0 ================================================ FILE: src/examples/sounds/tiles/8x8/tile16.txt ================================================ 0,0,0,252,2,5,249,0 ================================================ FILE: src/examples/sounds/tiles/8x8/tile17.txt ================================================ 2,7,2,2,2,2,2,5 ================================================ FILE: src/examples/sounds/tiles/8x8/tile18.txt ================================================ 32,112,32,32,32,32,32,80 ================================================ FILE: src/examples/sounds/tiles/8x8/tile19.txt ================================================ 90,36, 24,102,153, 24, 36,36 ================================================ FILE: src/examples/sounds/tiles/8x8/tile2.txt ================================================ 36,36,0,0,0,0,0,0 ================================================ FILE: src/examples/sounds/tiles/8x8/tile20.txt ================================================ 0,0,90,36, 24,102,89, 24 ================================================ FILE: src/examples/sounds/tiles/8x8/tile21.txt ================================================ 0,0,0,0,90,36, 24,102 ================================================ FILE: src/examples/sounds/tiles/8x8/tile22.txt ================================================ 0,0,0,0,0,0,90,36 ================================================ FILE: src/examples/sounds/tiles/8x8/tile23.txt ================================================ 8,42,28,119,28,42,8,0 ================================================ FILE: src/examples/sounds/tiles/8x8/tile24.txt ================================================ 240,240,255,133,255,161,255,0 ================================================ FILE: src/examples/sounds/tiles/8x8/tile25.txt ================================================ $18,$3e,$60,$3c,$06,$7c,$18,$00 ================================================ FILE: src/examples/sounds/tiles/8x8/tile3.txt ================================================ 0,0,0,0,24, 36, 24,102 ================================================ FILE: src/examples/sounds/tiles/8x8/tile4.txt ================================================ 153, 24, 36,36,0,0,0,0 ================================================ FILE: src/examples/sounds/tiles/8x8/tile5.txt ================================================ 0,0,0,0,0,0,24, 36 ================================================ FILE: src/examples/sounds/tiles/8x8/tile6.txt ================================================ 24,102,154, 24, 36,36,0,0 ================================================ FILE: src/examples/sounds/tiles/8x8/tile7.txt ================================================ 24, 36, 24, 0,153, 0, 36,36 ================================================ FILE: src/examples/sounds/tiles/8x8/tile8.txt ================================================ 60,126,231,195,195,231,126,60 ================================================ FILE: src/examples/sounds/tiles/8x8/tile9.txt ================================================ 2,7,2,63,66,162,159,5 ================================================ FILE: src/examples/sounds/tiles/ASCII/char_tiles.h ================================================ #ifndef _CHAR_TILES_H #define _CHAR_TILES_H #include "cross_lib.h" #define _TILE_0 (unsigned char) '0' #define _TILE_1 (unsigned char) '1' #define _TILE_2 (unsigned char) '2' #define _TILE_3 (unsigned char) '3' // Apple #define _TILE_4 (unsigned char) '4' // Body #define _TILE_5 (unsigned char) '5' #define _TILE_6 (unsigned char) '6' #define _TILE_7 (unsigned char) '7' #define _TILE_8 (unsigned char) '8' #define _TILE_9 (unsigned char) '9' #define _TILE_10 (unsigned char) 'A' #define _TILE_11 (unsigned char) 'B' #define _TILE_12 (unsigned char) 'C' #define _TILE_13 (unsigned char) 'D' #define _TILE_14 (unsigned char) 'E' #define _TILE_15 (unsigned char) 'F' #define _TILE_16 (unsigned char) 'G' #define _TILE_17 (unsigned char) 'H' #define _TILE_18 (unsigned char) 'I' #define _TILE_19 (unsigned char) 'J' #define _TILE_20 (unsigned char) 'K' #define _TILE_21 (unsigned char) 'L' #define _TILE_22 (unsigned char) 'M' #define _TILE_23 (unsigned char) 'N' #define _TILE_24 (unsigned char) 'O' #define _TILE_25 'P' //#define _TILE_25 '$' #endif // _CHAR_TILES_H ================================================ FILE: src/examples/target/Makefile.target ================================================ FULL_FILES ?= \ $(BASIC_CROSS_LIB_FILES) \ $(CROSS_LIB_PATH)/sleep/sleep_macros.c \ $(SOURCE_PATH)/main.c GAME_NAME := target PARENT_DIR = examples include ./$(PARENT_DIR)/$(GAME_NAME)/config/project_config.mk include ./Makefile_common include ./makefiles.common/auxiliary/Makefile_default_values ================================================ FILE: src/examples/target/config/project_config.mk ================================================ ##################################################################### # SLOWDOWN VALUES # Common factor _COMMON_SLOWDOWN_FACTOR=10 # CC65 _APPLE2_SLOWDOWN=30 _APPLE2ENH_SLOWDOWN=30 _APPLE2_HGR_SLOWDOWN=50 _APPLE2ENH_HGR_SLOWDOWN=50 _ATARI_SLOWDOWN=70 _ATARI5200_SLOWDOWN=70 _C16_SLOWDOWN=55 _C64_SLOWDOWN=45 _CREATIVISION_SLOWDOWN=100 _GAMATE_SLOWDOWN=120 _ORIC_SLOWDOWN=40 _NES_SLOWDOWN=80 _PET_SLOWDOWN=40 _PCE_SLOWDOWN=550 _SUPERVISION_SLOWDOWN=140 _VIC20_SLOWDOWN=55 # Z88DK _AQUARIUS_SLOWDOWN=105 _ACE_SLOWDOWN=100 _C128_Z80_40COL_SLOWDOWN=20 _C128_Z80_80COL_SLOWDOWN=1 _CPC_MODE0_SLOWDOWN=100 _CPC_CPCRSLIB_MODE1_SLOWDOWN=90 _CPC_MODE2_SLOWDOWN=90 _CPM_Z80_SLOWDOWN=90 _CPM_INTEL8080_SLOWDOWN=80 _COLECO_SLOWDOWN=100 _GB_SLOWDOWN=280 _GG_SLOWDOWN=300 _GB_WAIT_VSYNC_SLOWDOWN=150 _LASER500_SLOWDOWN=200 _MC1000_SLOWDOWN=75 _MSX_SLOWDOWN=200 _MSX_FIXED_COLORS_SLOWDOWN=300 _MTX500_SLOWDOWN=200 _MTX512_SLOWDOWN=200 _MZ_SLOWDOWN=200 _SAMCOUPE_SLOWDOWN=300 _SMS_SLOWDOWN=160 _SPECTRUM_SLOWDOWN=160 _VG5K_SLOWDOWN=75 _VZ200_SLOWDOWN=250 _ZX81_SLOWDOWN=10 _ZX81_WRX_SLOWDOWN=1 # CMOC _COCO_SLOWDOWN=160 _DRAGON_SLOWDOWN=160 _MO5_SLOWDOWN=160 _TO7_SLOWDOWN=160 # LCC1802 _COMX_SLOWDOWN=30 _PECOM_SLOWDOWN=30 _TMC600_SLOWDOWN=50 _MICRO_SLOWDOWN=60 _CIDELSA_SLOWDOWN=40 # CC6303 _MC10_SLOWDOWN=12 # GCC _NCURSES_SLOWDOWN=12 ================================================ FILE: src/examples/target/main.c ================================================ /* --------------------------------------------------------------------------------------- */ // // CROSS SHOOT by Fabrizio Caruso // // Fabrizio_Caruso@hotmail.com // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from // the use of this software. // Permission is granted to anyone to use this software for non-commercial applications, // subject to the following restrictions: // 1. The origin of this software must not be misrepresented; you must not // claim that you wrote the original software. If you use this software in // a product, an acknowledgment in the product documentation would be // appreciated but is not required. // 2. Altered source versions must be plainly marked as such, and must not // be misrepresented as being the original software. // 3. This notice may not be removed or altered from any source distribution. /* --------------------------------------------------------------------------------------- */ #include "cross_lib.h" #if YSize>=17 #define LINE_SKIP 2 #else #define LINE_SKIP 1 #endif #if XSize<=17 #define ON_OFF_POS 13 #define _TARGET_INFORMATION_STRING "TARGET INFO" #else #define ON_OFF_POS 14 #define _TARGET_INFORMATION_STRING "TARGET INFORMATION" #endif int main(void) { _XL_INIT_GRAPHICS(); _XL_INIT_INPUT(); _XL_CLEAR_SCREEN(); _XL_SET_TEXT_COLOR(_XL_WHITE); _XL_PRINT(0, 0,_TARGET_INFORMATION_STRING); _XL_PRINT(0, 1*LINE_SKIP,"XSIZE"); _XL_PRINTD(6, 1*LINE_SKIP,2,XSize); #if(XSize<=17) _XL_PRINT(8, 1*LINE_SKIP,"YSIZE"); _XL_PRINTD(14, 1*LINE_SKIP,2,YSize); #else _XL_PRINT(10, 1*LINE_SKIP,"YSIZE"); _XL_PRINTD(16, 1*LINE_SKIP,2,YSize); #endif _XL_PRINT(0, 2*LINE_SKIP,"TILES"); _XL_PRINTD(6, 2*LINE_SKIP,2,_XL_NUMBER_OF_TILES); #if defined(_XL_NO_UDG) _XL_PRINT(10, 2*LINE_SKIP,"ASCII"); #else _XL_PRINTD(10, 2*LINE_SKIP,1,_XL_TILE_X_SIZE); _XL_CHAR( 11, 2*LINE_SKIP,'X'); _XL_PRINTD(12, 2*LINE_SKIP,1,_XL_TILE_Y_SIZE); #endif _XL_PRINT(0, 3*LINE_SKIP,"GRAPHICS"); #if !defined(_XL_NO_UDG) _XL_PRINT(ON_OFF_POS,3*LINE_SKIP,"ON"); #else _XL_PRINT(ON_OFF_POS,3*LINE_SKIP,"OFF"); #endif _XL_PRINT(0, 4*LINE_SKIP,"COLOR"); #if !defined(_XL_NO_COLOR) _XL_PRINT(ON_OFF_POS,4*LINE_SKIP,"ON"); #else _XL_PRINT(ON_OFF_POS,4*LINE_SKIP,"OFF"); #endif _XL_PRINT(0, 5*LINE_SKIP,"TEXT COLOR"); #if !defined(_XL_NO_TEXT_COLOR) _XL_PRINT(ON_OFF_POS,5*LINE_SKIP,"ON"); #else _XL_PRINT(ON_OFF_POS,5*LINE_SKIP,"OFF"); #endif _XL_PRINT(0, 6*LINE_SKIP,"JOYSTICK"); #if !defined(_XL_NO_JOYSTICK) _XL_PRINT(ON_OFF_POS,6*LINE_SKIP,"ON"); #else _XL_PRINT(ON_OFF_POS,6*LINE_SKIP,"OFF"); #endif _XL_PRINT(0, 7*LINE_SKIP,"SOUND"); #if !defined(_XL_NO_SOUND) _XL_PRINT(ON_OFF_POS,7*LINE_SKIP,"ON"); #else _XL_PRINT(ON_OFF_POS,7*LINE_SKIP,"OFF"); #endif _XL_PRINT(0, 8*LINE_SKIP,"SMALL CHARS"); #if !defined(_XL_NO_SMALL_LETTERS) _XL_PRINT(ON_OFF_POS,8*LINE_SKIP,"ON"); #else _XL_PRINT(ON_OFF_POS,8*LINE_SKIP,"OFF"); #endif while(1){}; return EXIT_SUCCESS; } ================================================ FILE: src/examples/target/tiles/6x8/tile0.txt ================================================ 12,18,12,51,45,12,18,18 ================================================ FILE: src/examples/target/tiles/6x8/tile1.txt ================================================ 0,0,12,18,12,51,45,12 ================================================ FILE: src/examples/target/tiles/6x8/tile10.txt ================================================ 0,0,0,32,16,40,8,8 ================================================ FILE: src/examples/target/tiles/6x8/tile11.txt ================================================ 0,0,0,1,2,5,4,4 ================================================ FILE: src/examples/target/tiles/6x8/tile12.txt ================================================ 16,56,16,60,18,21,57,41 ================================================ FILE: src/examples/target/tiles/6x8/tile13.txt ================================================ 0,0,0,15,16,40,39,32 ================================================ FILE: src/examples/target/tiles/6x8/tile14.txt ================================================ 0,42,42,58,42,42,0,0 ================================================ FILE: src/examples/target/tiles/6x8/tile15.txt ================================================ 0,37,37,37,37,50,0,0 ================================================ FILE: src/examples/target/tiles/6x8/tile16.txt ================================================ 0,0,0,60,2,5,57,1 ================================================ FILE: src/examples/target/tiles/6x8/tile17.txt ================================================ 2,7,2,2,2,2,2,5 ================================================ FILE: src/examples/target/tiles/6x8/tile18.txt ================================================ 16,56,16,16,16,16,16,40 ================================================ FILE: src/examples/target/tiles/6x8/tile19.txt ================================================ 45,18,12,51,45,12,18,18 ================================================ FILE: src/examples/target/tiles/6x8/tile2.txt ================================================ 18,18,0,0,0,0,0,0 ================================================ FILE: src/examples/target/tiles/6x8/tile20.txt ================================================ 0,0,45,18,12,51,45,12 ================================================ FILE: src/examples/target/tiles/6x8/tile21.txt ================================================ 0,0,0,0,45,18,12,51 ================================================ FILE: src/examples/target/tiles/6x8/tile22.txt ================================================ 0,0,0,0,0,0,45,18 ================================================ FILE: src/examples/target/tiles/6x8/tile23.txt ================================================ 0,4,21,14,27,14,21,4 ================================================ FILE: src/examples/target/tiles/6x8/tile24.txt ================================================ 63,41,63,37,63,41,63,37 ================================================ FILE: src/examples/target/tiles/6x8/tile25.txt ================================================ 63,8, 31, 16, 30, 2,62, 63 ================================================ FILE: src/examples/target/tiles/6x8/tile25_ORIG.txt ================================================ 0,8, 31, 16, 30, 2,62, 4 ================================================ FILE: src/examples/target/tiles/6x8/tile3.txt ================================================ 0,0,0,0,12,18,12,51 ================================================ FILE: src/examples/target/tiles/6x8/tile4.txt ================================================ 45,12,18,18,0,0,0,0 ================================================ FILE: src/examples/target/tiles/6x8/tile5.txt ================================================ 0,0,0,0,0,0,12,18 ================================================ FILE: src/examples/target/tiles/6x8/tile6.txt ================================================ 12,51,45,12,18,18,0,0 ================================================ FILE: src/examples/target/tiles/6x8/tile7.txt ================================================ 12,18,12,0,45,0,18,18 ================================================ FILE: src/examples/target/tiles/6x8/tile8.txt ================================================ 0,12,18,33,33,18,12,0 ================================================ FILE: src/examples/target/tiles/6x8/tile9.txt ================================================ 2,7,2,15,18,42,39,37 ================================================ FILE: src/examples/target/tiles/6x9/tile0.txt ================================================ 12,18,12,51,45,12,18,18,18 ================================================ FILE: src/examples/target/tiles/6x9/tile1.txt ================================================ 0,0,0,12,18,12,51,45,12 ================================================ FILE: src/examples/target/tiles/6x9/tile10.txt ================================================ 0,0,0,0,32,16,40,8,8 ================================================ FILE: src/examples/target/tiles/6x9/tile11.txt ================================================ 0,0,0,0,1,2,5,4,4 ================================================ FILE: src/examples/target/tiles/6x9/tile12.txt ================================================ 0,16,56,16,60,18,21,57,41 ================================================ FILE: src/examples/target/tiles/6x9/tile13.txt ================================================ 0,0,0,0,15,16,40,39,32 ================================================ FILE: src/examples/target/tiles/6x9/tile14.txt ================================================ 0,0,42,42,58,42,42,0,0 ================================================ FILE: src/examples/target/tiles/6x9/tile15.txt ================================================ 0,0,37,37,37,37,50,0,0 ================================================ FILE: src/examples/target/tiles/6x9/tile16.txt ================================================ 0,0,0,0,60,2,5,57,1 ================================================ FILE: src/examples/target/tiles/6x9/tile17.txt ================================================ 2,2,7,2,2,2,2,2,5 ================================================ FILE: src/examples/target/tiles/6x9/tile18.txt ================================================ 16,16,56,16,16,16,16,16,40 ================================================ FILE: src/examples/target/tiles/6x9/tile19.txt ================================================ 45,18,12,51,45,12,18,18,18 ================================================ FILE: src/examples/target/tiles/6x9/tile2.txt ================================================ 18,18,18,0,0,0,0,0,0 ================================================ FILE: src/examples/target/tiles/6x9/tile20.txt ================================================ 0,0,0,45,18,12,51,45,12 ================================================ FILE: src/examples/target/tiles/6x9/tile21.txt ================================================ 0,0,0,0,0,45,18,12,51 ================================================ FILE: src/examples/target/tiles/6x9/tile22.txt ================================================ 0,0,0,0,0,0,0,45,18 ================================================ FILE: src/examples/target/tiles/6x9/tile23.txt ================================================ 0,0,4,21,14,27,14,21,4 ================================================ FILE: src/examples/target/tiles/6x9/tile24.txt ================================================ 0,63,41,63,37,63,41,63,37 ================================================ FILE: src/examples/target/tiles/6x9/tile25 _ORIG.txt ================================================ 0,8, 31, 16, 30, 2,62, 4,0 ================================================ FILE: src/examples/target/tiles/6x9/tile25.txt ================================================ 63,8, 31, 16, 30, 2,62, 4,63 ================================================ FILE: src/examples/target/tiles/6x9/tile3.txt ================================================ 0,0,0,0,0,12,18,12,51 ================================================ FILE: src/examples/target/tiles/6x9/tile4.txt ================================================ 45,12,18,18,0,0,0,0,0 ================================================ FILE: src/examples/target/tiles/6x9/tile5.txt ================================================ 0,0,0,0,0,0,0,12,18 ================================================ FILE: src/examples/target/tiles/6x9/tile6.txt ================================================ 12,51,45,12,18,18,18,0,0 ================================================ FILE: src/examples/target/tiles/6x9/tile7.txt ================================================ 12,18,12,0,45,0,18,18 ================================================ FILE: src/examples/target/tiles/6x9/tile8.txt ================================================ 0,0,12,18,33,33,18,12,0 ================================================ FILE: src/examples/target/tiles/6x9/tile9.txt ================================================ 0,2,7,2,15,18,42,39,37 ================================================ FILE: src/examples/target/tiles/7x8/tile0.txt ================================================ 12,18,12,51,45,12,18,18 ================================================ FILE: src/examples/target/tiles/7x8/tile1.txt ================================================ 0,0,12,18,12,51,45,12 ================================================ FILE: src/examples/target/tiles/7x8/tile10.txt ================================================ 0,0,0,32,16,40,8,8 ================================================ FILE: src/examples/target/tiles/7x8/tile11.txt ================================================ 0,0,0,1,2,5,4,4 ================================================ FILE: src/examples/target/tiles/7x8/tile12.txt ================================================ 16,56,16,60,18,21,57,41 ================================================ FILE: src/examples/target/tiles/7x8/tile13.txt ================================================ 0,0,0,15,16,40,39,32 ================================================ FILE: src/examples/target/tiles/7x8/tile14.txt ================================================ 0,42,42,58,42,42,0,0 ================================================ FILE: src/examples/target/tiles/7x8/tile15.txt ================================================ 0,37,37,37,37,50,0,0 ================================================ FILE: src/examples/target/tiles/7x8/tile16.txt ================================================ 0,0,0,60,2,5,57,1 ================================================ FILE: src/examples/target/tiles/7x8/tile17.txt ================================================ 2,7,2,2,2,2,2,5 ================================================ FILE: src/examples/target/tiles/7x8/tile18.txt ================================================ 16,56,16,16,16,16,16,40 ================================================ FILE: src/examples/target/tiles/7x8/tile19.txt ================================================ 45,18,12,51,45,12,18,18 ================================================ FILE: src/examples/target/tiles/7x8/tile2.txt ================================================ 18,18,0,0,0,0,0,0 ================================================ FILE: src/examples/target/tiles/7x8/tile20.txt ================================================ 0,0,45,18,12,51,45,12 ================================================ FILE: src/examples/target/tiles/7x8/tile21.txt ================================================ 0,0,0,0,45,18,12,51 ================================================ FILE: src/examples/target/tiles/7x8/tile22.txt ================================================ 0,0,0,0,0,0,45,18 ================================================ FILE: src/examples/target/tiles/7x8/tile23.txt ================================================ 0,4,21,14,27,14,21,4 ================================================ FILE: src/examples/target/tiles/7x8/tile24.txt ================================================ 63,41,63,37,63,41,63,37 ================================================ FILE: src/examples/target/tiles/7x8/tile25.txt ================================================ $7f,$3e,$60,$3c,$06,$7c,$18,$7f ================================================ FILE: src/examples/target/tiles/7x8/tile25_ORIG.txt ================================================ $18,$3e,$60,$3c,$06,$7c,$18,$00 ================================================ FILE: src/examples/target/tiles/7x8/tile3.txt ================================================ 0,0,0,0,12,18,12,51 ================================================ FILE: src/examples/target/tiles/7x8/tile4.txt ================================================ 45,12,18,18,0,0,0,0 ================================================ FILE: src/examples/target/tiles/7x8/tile5.txt ================================================ 0,0,0,0,0,0,12,18 ================================================ FILE: src/examples/target/tiles/7x8/tile6.txt ================================================ 12,51,45,12,18,18,0,0 ================================================ FILE: src/examples/target/tiles/7x8/tile7.txt ================================================ 12,18,12,0,45,0,18,18 ================================================ FILE: src/examples/target/tiles/7x8/tile8.txt ================================================ 0,12,18,33,33,18,12,0 ================================================ FILE: src/examples/target/tiles/7x8/tile9.txt ================================================ 2,7,2,15,18,42,39,37 ================================================ FILE: src/examples/target/tiles/8x8/tile0.txt ================================================ 24, 36, 24,102,153, 24, 36,36 ================================================ FILE: src/examples/target/tiles/8x8/tile1.txt ================================================ 0,0,24, 36, 24,102,89, 24 ================================================ FILE: src/examples/target/tiles/8x8/tile10.txt ================================================ 0,0,0,192,32,80,144,0 ================================================ FILE: src/examples/target/tiles/8x8/tile11.txt ================================================ 0,0,0,3,4,10,9,0 ================================================ FILE: src/examples/target/tiles/8x8/tile12.txt ================================================ 32,112,32,252,34,37,249,80 ================================================ FILE: src/examples/target/tiles/8x8/tile13.txt ================================================ 0, 0, 0,63,64,160,159,0 ================================================ FILE: src/examples/target/tiles/8x8/tile14.txt ================================================ $2A,$2A,$2A,$3A,$2A,$2A,$2A,$00 ================================================ FILE: src/examples/target/tiles/8x8/tile15.txt ================================================ 74,74,74,74,74,74,100,0 ================================================ FILE: src/examples/target/tiles/8x8/tile16.txt ================================================ 0,0,0,252,2,5,249,0 ================================================ FILE: src/examples/target/tiles/8x8/tile17.txt ================================================ 2,7,2,2,2,2,2,5 ================================================ FILE: src/examples/target/tiles/8x8/tile18.txt ================================================ 32,112,32,32,32,32,32,80 ================================================ FILE: src/examples/target/tiles/8x8/tile19.txt ================================================ 90,36, 24,102,153, 24, 36,36 ================================================ FILE: src/examples/target/tiles/8x8/tile2.txt ================================================ 36,36,0,0,0,0,0,0 ================================================ FILE: src/examples/target/tiles/8x8/tile20.txt ================================================ 0,0,90,36, 24,102,89, 24 ================================================ FILE: src/examples/target/tiles/8x8/tile21.txt ================================================ 0,0,0,0,90,36, 24,102 ================================================ FILE: src/examples/target/tiles/8x8/tile22.txt ================================================ 0,0,0,0,0,0,90,36 ================================================ FILE: src/examples/target/tiles/8x8/tile23.txt ================================================ 8,42,28,119,28,42,8,0 ================================================ FILE: src/examples/target/tiles/8x8/tile24.txt ================================================ 240,240,255,133,255,161,255,0 ================================================ FILE: src/examples/target/tiles/8x8/tile25.txt ================================================ $18,$3e,$60,$3c,$06,$7c,$18,$ff ================================================ FILE: src/examples/target/tiles/8x8/tile3.txt ================================================ 0,0,0,0,24, 36, 24,102 ================================================ FILE: src/examples/target/tiles/8x8/tile4.txt ================================================ 153, 24, 36,36,0,0,0,0 ================================================ FILE: src/examples/target/tiles/8x8/tile5.txt ================================================ 0,0,0,0,0,0,24, 36 ================================================ FILE: src/examples/target/tiles/8x8/tile6.txt ================================================ 24,102,154, 24, 36,36,0,0 ================================================ FILE: src/examples/target/tiles/8x8/tile7.txt ================================================ 24, 36, 24, 0,153, 0, 36,36 ================================================ FILE: src/examples/target/tiles/8x8/tile8.txt ================================================ 60,126,231,195,195,231,126,60 ================================================ FILE: src/examples/target/tiles/8x8/tile9.txt ================================================ 2,7,2,63,66,162,159,5 ================================================ FILE: src/examples/target/tiles/ASCII/char_tiles.h ================================================ #ifndef _CHAR_TILES_H #define _CHAR_TILES_H #include "cross_lib.h" #define _TILE_0 '*' #define _TILE_1 '*' #define _TILE_2 '-' #define _TILE_3 '-' // Apple #define _TILE_4 'O' // Body #define _TILE_5 'O' #define _TILE_6 'H' #define _TILE_7 '=' #if defined(_XL_NO_COLOR) #define _TILE_8 'R' #else #define _TILE_8 'O' #endif #define _TILE_9 'L' #define _TILE_10 '=' #define _TILE_11 'I' #define _TILE_12 'I' #define _TILE_13 '-' #define _TILE_14 'S' #define _TILE_15 'I' #define _TILE_16 'C' #define _TILE_17 'X' #if defined(_XL_NO_COLOR) #define _TILE_18 'S' #else #define _TILE_18 'O' #endif #endif // _CHAR_TILES_H ================================================ FILE: src/examples/text/Makefile.text ================================================ FULL_FILES ?= \ $(BASIC_CROSS_LIB_FILES) \ $(CROSS_LIB_PATH)/sleep/sleep_macros.c \ $(SOURCE_PATH)/main.c GAME_NAME := text PARENT_DIR = examples include ./$(PARENT_DIR)/$(GAME_NAME)/config/project_config.mk include ./Makefile_common include ./makefiles.common/auxiliary/Makefile_default_values ================================================ FILE: src/examples/text/config/project_config.mk ================================================ ##################################################################### # SLOWDOWN VALUES # Common factor _COMMON_SLOWDOWN_FACTOR=10 # CC65 _APPLE2_SLOWDOWN=30 _APPLE2ENH_SLOWDOWN=30 _APPLE2_HGR_SLOWDOWN=50 _APPLE2ENH_HGR_SLOWDOWN=50 _ATARI_SLOWDOWN=70 _ATARI5200_SLOWDOWN=70 _C16_SLOWDOWN=55 _C64_SLOWDOWN=45 _CREATIVISION_SLOWDOWN=100 _GAMATE_SLOWDOWN=120 _ORIC_SLOWDOWN=40 _NES_SLOWDOWN=80 _PET_SLOWDOWN=40 _PCE_SLOWDOWN=550 _SUPERVISION_SLOWDOWN=140 _VIC20_SLOWDOWN=55 # Z88DK _AQUARIUS_SLOWDOWN=105 _ACE_SLOWDOWN=100 _C128_Z80_40COL_SLOWDOWN=20 _C128_Z80_80COL_SLOWDOWN=1 _CPC_MODE0_SLOWDOWN=100 _CPC_CPCRSLIB_MODE1_SLOWDOWN=90 _CPC_MODE2_SLOWDOWN=90 _CPM_Z80_SLOWDOWN=90 _CPM_INTEL8080_SLOWDOWN=80 _COLECO_SLOWDOWN=100 _GB_SLOWDOWN=280 _GG_SLOWDOWN=300 _GB_WAIT_VSYNC_SLOWDOWN=150 _LASER500_SLOWDOWN=200 _MC1000_SLOWDOWN=75 _MSX_SLOWDOWN=200 _MSX_FIXED_COLORS_SLOWDOWN=300 _MTX500_SLOWDOWN=200 _MTX512_SLOWDOWN=200 _MZ_SLOWDOWN=200 _SAMCOUPE_SLOWDOWN=300 _SMS_SLOWDOWN=160 _SPECTRUM_SLOWDOWN=160 _VG5K_SLOWDOWN=75 _VZ200_SLOWDOWN=250 _ZX81_SLOWDOWN=10 _ZX81_WRX_SLOWDOWN=1 # CMOC _COCO_SLOWDOWN=160 _DRAGON_SLOWDOWN=160 _COCO3_SLOWDOWN=100 _MO5_SLOWDOWN=160 _TO7_SLOWDOWN=160 # LCC1802 _COMX_SLOWDOWN=30 _PECOM_SLOWDOWN=30 _TMC600_SLOWDOWN=50 _MICRO_SLOWDOWN=60 _CIDELSA_SLOWDOWN=40 # CC6303 _MC10_SLOWDOWN=12 # GCC _NCURSES_SLOWDOWN=12 ================================================ FILE: src/examples/text/main.c ================================================ /* --------------------------------------------------------------------------------------- */ // // CROSS SHOOT by Fabrizio Caruso // // Fabrizio_Caruso@hotmail.com // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from // the use of this software. // Permission is granted to anyone to use this software for non-commercial applications, // subject to the following restrictions: // 1. The origin of this software must not be misrepresented; you must not // claim that you wrote the original software. If you use this software in // a product, an acknowledgment in the product documentation would be // appreciated but is not required. // 2. Altered source versions must be plainly marked as such, and must not // be misrepresented as being the original software. // 3. This notice may not be removed or altered from any source distribution. /* --------------------------------------------------------------------------------------- */ #include "cross_lib.h" #define NUMBER_OF_COLORS 6 #define MAX_STRING_SIZE 10 void PRINT_CENTERED_ON_ROW(uint8_t row, char *Text) { _XL_PRINT((uint8_t) (((XSize) - (((uint8_t) strlen(Text))))/2), row, Text); } #define PRINT_CENTERED(Text) \ PRINT_CENTERED_ON_ROW(((YSize)>>1), Text) #if !defined(_XL_NO_TEXT_COLOR) static const uint8_t text_color[NUMBER_OF_COLORS] = {_XL_WHITE, _XL_RED, _XL_CYAN, _XL_GREEN, _XL_YELLOW, _XL_BLUE}; #endif const char color_name[NUMBER_OF_COLORS][MAX_STRING_SIZE] = { "WHITE", "RED", "CYAN", "GREEN", "YELLOW", "BLUE", }; char *small_letters = _XL_a _XL_b _XL_c _XL_d _XL_e _XL_f _XL_g _XL_h _XL_i _XL_j _XL_k _XL_l _XL_m \ _XL_n _XL_o _XL_p _XL_q _XL_r _XL_s _XL_t _XL_u _XL_v _XL_w _XL_x _XL_y _XL_z; void print_text(uint8_t x, uint8_t y, const char *str) { uint8_t i; char ch; i=0; while((ch=str[i])) { if((ch>='a')&&(ch<='z')) { _XL_CHAR(x+i,y,small_letters[ch-'a']); } else { _XL_CHAR(x+i,y,ch); } ++i; } } void small_pause(void) { _XL_SLOW_DOWN(100U); } int main(void) { uint8_t i; uint8_t j; uint8_t k; _XL_INIT_GRAPHICS(); _XL_INIT_INPUT(); for(k=0;k<3;++k) { for(j=0;jXSize-2) { die(); } else { zombie_display(); } if(zombie_pos[zombie_index]=12 #define MIN_BUILDING_HEIGHT 2 #else #define MIN_BUILDING_HEIGHT 2 #endif #if YSize>=18 #define INITIAL_PLANE_Y 2 #else #define INITIAL_PLANE_Y 1 #endif #if YSize>=20 #if XSize>78 #define BUILDINGS_NUMBER (XSize-24) #define FIRST_BULDING_X_POS 12 #elif XSize>63 #define BUILDINGS_NUMBER (XSize-22) #define FIRST_BULDING_X_POS 10 #elif XSize>48 #define BUILDINGS_NUMBER (XSize-18) #define FIRST_BULDING_X_POS 9 #elif XSize>=40 #define BUILDINGS_NUMBER (XSize-16) #define FIRST_BULDING_X_POS 8 #elif XSize>=30 #define BUILDINGS_NUMBER (XSize-14) #define FIRST_BULDING_X_POS 7 #elif XSize>16 #define BUILDINGS_NUMBER (XSize-9) #define FIRST_BULDING_X_POS 5 #else #define BUILDINGS_NUMBER (XSize-7) #define FIRST_BULDING_X_POS 4 #endif #elif YSize>=12 #define BUILDINGS_NUMBER (XSize/2) #define FIRST_BULDING_X_POS (XSize/4) #else #define BUILDINGS_NUMBER 5 #define FIRST_BULDING_X_POS ((XSize/2)-2) #endif // String definitions #define _BOMBER__STRING _XL_B _XL_O _XL_M _XL_B _XL_E _XL_R #if XSize>=18 #define _BY_FABRIZIO_CARUSO__STRING _XL_B _XL_Y _XL_SPACE _XL_F _XL_A _XL_B _XL_R _XL_I _XL_Z _XL_I _XL_O _XL_SPACE _XL_C _XL_A _XL_R _XL_U _XL_S _XL_O #else #define _BY_FABRIZIO_CARUSO__STRING _XL_F _XL_A _XL_B _XL_R _XL_I _XL_Z _XL_I _XL_O _XL_SPACE _XL_C _XL_A _XL_R _XL_U _XL_S _XL_O #endif #define _DESTROY_ALL__STRING _XL_D _XL_E _XL_S _XL_T _XL_R _XL_O _XL_Y _XL_SPACE _XL_A _XL_L _XL_L #define _BUILDINGS__STRING _XL_B _XL_U _XL_I _XL_L _XL_D _XL_I _XL_N _XL_G _XL_S #if !defined(_XL_NO_JOYSTICK) #define _PRESS_FIRE__STRING _XL_P _XL_R _XL_E _XL_S _XL_S _XL_SPACE _XL_F _XL_I _XL_R _XL_E #else #define _PRESS_FIRE__STRING _XL_P _XL_R _XL_E _XL_S _XL_S _XL_SPACE _XL_A _XL_SPACE _XL_K _XL_E _XL_Y #endif #define _LEVEL__STRING _XL_L _XL_E _XL_V _XL_E _XL_L #define _LEVEL_COMPLETED__STRING _XL_L _XL_E _XL_V _XL_E _XL_L _XL_SPACE _XL_C _XL_O _XL_M _XL_P _XL_L _XL_E _XL_T _XL_E _XL_D #define _BONUS__STRING _XL_B _XL_O _XL_N _XL_U _XL_S #define _GAME_COMPLETED__STRING "GAME COMPLETED" #define _DEL_STR _XL_SPACE _XL_SPACE _XL_SPACE _XL_SPACE _XL_SPACE _XL_SPACE _XL_SPACE _XL_SPACE _XL_SPACE _XL_SPACE _XL_SPACE _XL_SPACE _XL_SPACE _XL_SPACE _XL_SPACE #define _NEW_HISCORE__STRING _XL_N _XL_E _XL_W _XL_SPACE _XL_H _XL_I _XL_S _XL_C _XL_O _XL_R _XL_E #define _GAME_OVER__STRING _XL_G _XL_A _XL_M _XL_E _XL_SPACE _XL_O _XL_V _XL_E _XL_R #define drawPlane() \ do { \ _XL_DRAW(x,y,PLANE_BACK_TILE, _PLANE_COLOR); \ _XL_DRAW(x+1,y,PLANE_FRONT_TILE, _PLANE_COLOR); \ } while(0) #define drawPlaneBack() \ _XL_DRAW(x,y,PLANE_BACK_TILE,_PLANE_COLOR); #define deletePlaneBack() \ _XL_DELETE(x,y); #define deletePlaneFront() \ _XL_DELETE(x+1,y); #define deleteAnimatedPlaneBack() \ _XL_DELETE(x-1,y); #define deleteAnimatedPlaneCenter() \ deletePlaneBack(); #define deleteAnimatedBombUp() \ _XL_DELETE(bomb_x,bomb_y-1); #if !defined(NO_ANIMATION) #define drawAnimatedPlane() \ do { \ _XL_DRAW(x-1,y,ANIMATED_PLANE_BACK_TILE,_PLANE_COLOR); \ _XL_DRAW(x,y,ANIMATED_PLANE_CENTER_TILE,_PLANE_COLOR); \ _XL_DRAW(x+1,y,ANIMATED_PLANE_FRONT_TILE, _PLANE_COLOR); \ } while(0) #define drawAnimatedBomb() \ do { \ _XL_DRAW(bomb_x,bomb_y,ANIMATED_BOMB_UP_TILE, _BOMB_COLOR); \ _XL_DRAW(bomb_x,bomb_y+1,ANIMATED_BOMB_DOWN_TILE,_BOMB_COLOR); \ } while(0) #define deletePlane() \ do {\ deletePlaneBack() ; \ deletePlaneFront() ; \ } while(0) #define deleteAnimatedBomb() \ do { \ _XL_DELETE(bomb_x,bomb_y-1); \ _XL_DELETE(bomb_x,bomb_y); \ } while(0) #else #define drawAnimatedPlane() #define drawAnimatedBomb() #define deletePlane() \ deletePlaneFront(); #define deleteAnimatedBomb() // _XL_DELETE(bomb_x,bomb_y-1); #endif #define drawRoad() \ _XL_DRAW(x,MAX_Y-1,ROAD_TILE,_ROAD_COLOR); #define drawBuilding() \ _XL_DRAW(x,MAX_Y-1-y,buildingType,buildingColor); #define drawBomb() \ _XL_DRAW(bomb_x,bomb_y,BOMB_TILE,_BOMB_COLOR); #define drawExplosion() \ _XL_DRAW(bomb_x,bomb_y,EXPLOSION_TILE,_XL_RED); #define deleteExplosion() \ _XL_DELETE(bomb_x,bomb_y); #define displayScore() \ do { \ _XL_SET_TEXT_COLOR(_XL_WHITE); \ _XL_PRINTD(2,0,4,score); \ } while(0) #if XSize<20 #define REMAINING_X 8 #else #define REMAINING_X 9 #endif #if !defined(TINY_GAME) #define displayRemainingBuilings() \ do { \ _XL_SET_TEXT_COLOR(_XL_WHITE); \ _XL_PRINTD(REMAINING_X,0,2,remaining_buildings); \ } while(0) #else #define displayRemainingBuilings() #endif #define displayHiScore(xpos) \ do { \ _XL_SET_TEXT_COLOR(_XL_WHITE); \ _XL_PRINTD(xpos,0,4,hiscore); \ } while(0) #define displayLevel() \ do { \ _XL_SET_TEXT_COLOR(_XL_WHITE); \ _XL_PRINTD(XSize-7,0,1,level); \ } while(0) #define displayLevelMessage() \ do { \ _XL_SET_TEXT_COLOR(_XL_WHITE); \ _XL_PRINTD(XSize/2+2,4,1,level); \ } while(0) #if !defined(TINY_GAME) #define displayNewHiScoreMessage() \ do { \ _XL_SET_TEXT_COLOR(_XL_YELLOW); \ _XL_PRINT(1,4,_NEW_HISCORE__STRING); \ } while(0) #else #define displayNewHiScoreMessage() #endif void PRINT_CENTERED_ON_ROW(uint8_t row, char *Text) { _XL_PRINT(((uint8_t) (XSize - strlen(Text))>>1), row, Text); } #define PRINT_CENTERED(Text) \ PRINT_CENTERED_ON_ROW((YSize>>1), Text) void displayGameOverMessage(void) { _XL_SET_TEXT_COLOR(_XL_RED); PRINT_CENTERED(_GAME_OVER__STRING); } #if !defined(TINY_GAME) #define handle_hiscore() \ do { \ if(score>hiscore) \ { \ hiscore = score; \ displayNewHiScoreMessage(); \ _XL_SLEEP(1); \ } \ } while(0) #else #define handle_hiscore() \ do { \ if(score>hiscore) \ { \ hiscore = score; \ } \ } while(0) #endif #if MAX_Y<24 #if YSize<=16 #define LEVEL_FACTOR_SPEED_UP 4 #else #define LEVEL_FACTOR_SPEED_UP 3 #endif #else #define LEVEL_FACTOR_SPEED_UP 2 #endif #if YSize<12 #define AND_MASK 1 #elif YSize<=17 #define AND_MASK 3 #else #define AND_MASK 7 #endif #define INITIAL_LEVEL 1 #define FINAL_LEVEL 9 uint16_t building_height[XSize]; uint8_t x; uint8_t y; uint8_t bombActive; uint8_t bomb_x; uint8_t bomb_y; uint8_t level; uint16_t score; uint16_t bonus; uint16_t bonus_ind; uint16_t hiscore; uint8_t remaining_buildings; uint8_t alive; uint8_t explosion; uint8_t buildingType; uint8_t tile_index; #if !defined(_XL_NO_COLOR) uint8_t buildingColor; uint8_t color_index; #endif static const uint8_t building_tiles[] = { WALL_1_TILE, WALL_2_TILE, TWO_WINDOW_WALL_1_TILE, TWO_WINDOW_WALL_2_TILE, THREE_WINDOW_WALL_1_TILE, THREE_WINDOW_WALL_2_TILE, SMALL_TWO_WINDOW_WALL_1_TILE, SMALL_TWO_WINDOW_WALL_2_TILE }; #if !defined(_XL_NO_COLOR) static const uint8_t building_colors[] = { _WALL_1_COLOR, _WALL_2_COLOR, _TWO_WINDOW_WALL_1_COLOR, _TWO_WINDOW_WALL_2_COLOR, _THREE_WINDOW_WALL_1_COLOR, _THREE_WINDOW_WALL_2_COLOR, _SMALL_TWO_WINDOW_WALL_1_COLOR, _SMALL_TWO_WINDOW_WALL_2_COLOR }; #endif #if defined(DEBUG) static const uint8_t tiles[] = { _TILE_0, _TILE_1, _TILE_2, _TILE_3, _TILE_4, _TILE_5, _TILE_6, _TILE_7, _TILE_8, _TILE_9, _TILE_10, _TILE_11, _TILE_12, _TILE_13, _TILE_14, _TILE_15, _TILE_16, _TILE_17, _TILE_18, _TILE_19, _TILE_20, _TILE_21, _TILE_22, _TILE_23, _TILE_24, _TILE_25 }; static const static uint8_t tile_color[] = {_XL_WHITE, _XL_RED, _XL_CYAN, _XL_GREEN, _XL_YELLOW, _XL_BLUE}; #endif void intro(void) { _XL_CLEAR_SCREEN(); #if !defined(TINY_GAME) _XL_DRAW(XSize/2-3,0,HI_TEXT_TILE,_XL_RED); #endif displayHiScore(XSize/2-2); _XL_SET_TEXT_COLOR(_XL_GREEN); PRINT_CENTERED_ON_ROW(2, _BOMBER__STRING); _XL_SET_TEXT_COLOR(_XL_WHITE); PRINT_CENTERED_ON_ROW(4, _BY_FABRIZIO_CARUSO__STRING); #if YSize>=16 && !defined(TINY_GAME) _XL_SET_TEXT_COLOR(_XL_YELLOW); PRINT_CENTERED_ON_ROW(YSize/2, _DESTROY_ALL__STRING); PRINT_CENTERED_ON_ROW(YSize/2+1, _BUILDINGS__STRING); _XL_SET_TEXT_COLOR(_XL_WHITE); PRINT_CENTERED_ON_ROW(YSize-2, _PRESS_FIRE__STRING); #endif #if !defined(TINY_GAME) x=XSize/2-1; y=6; drawAnimatedPlane(); _XL_DRAW(XSize/2-2,YSize/2+3,WALL_1_TILE,_XL_RED); _XL_DRAW(XSize/2-1,YSize/2+3,TWO_WINDOW_WALL_1_TILE,_XL_YELLOW); _XL_DRAW(XSize/2-0,YSize/2+3,THREE_WINDOW_WALL_1_TILE,_XL_WHITE); #endif _XL_WAIT_FOR_INPUT(); } #define INITIALIZE_CROSS_LIB() \ _XL_INIT_GRAPHICS(); \ _XL_INIT_INPUT(); \ _XL_INIT_SOUND(); void initialize_game(void) { alive = 1; score = 0; level = INITIAL_LEVEL; explosion = 0; } void initialize_buildings(void) { for(x=0;x=12 building_height[x] = (uint8_t) MIN_BUILDING_HEIGHT+level/LEVEL_FACTOR_SPEED_UP+(_XL_RAND()&AND_MASK); #else building_height[x] = (uint8_t) MIN_BUILDING_HEIGHT+(_XL_RAND()&AND_MASK); #endif tile_index = ((uint8_t) _XL_RAND())&7; buildingType=building_tiles[tile_index]; #if !defined(_XL_NO_COLOR) color_index = ((uint8_t) _XL_RAND())&7; buildingColor=building_colors[color_index]; #endif for(y=1;y=20 && !defined(TINY_GAME) _XL_DRAW(XSize-8,0,LV_TEXT_TILE, _XL_GREEN); displayLevel(); #endif #if XSize>=16 && !defined(TINY_GAME) _XL_DRAW(REMAINING_X-1,0,TWO_WINDOW_WALL_2_TILE, _XL_YELLOW); displayRemainingBuilings(); #endif displayHiScore(XSize-4); } void handle_non_active_bomb(void) { if(explosion) { deleteExplosion(); explosion = 0; } if((yMAX_Y-3) // Bomb reaches the ground { drawBomb(); bombActive = 0; explosion = 1; #if XSize>=16 displayRemainingBuilings(); #endif displayScore(); // Delete animated bomb deleteAnimatedBombUp(); drawExplosion(); _XL_SLOW_DOWN(5+_XL_SLOW_DOWN_FACTOR/4); } } #define handle_bomb_movement() \ do \ { \ if(bombActive) \ { \ drawBomb(); \ deleteAnimatedBombUp(); \ } \ } \ while(0) #define handle_bomb() \ do \ { \ if(!bombActive ) \ { \ handle_non_active_bomb(); \ } \ else \ { \ handle_active_bomb(); \ } \ } \ while(0) void handle_plane_movement(void) { // Land safely if(!remaining_buildings && (y 1800/2-9*32=900-288=612 handle_bomb_movement(); if(xFINAL})) -> restart level if(alive) // Game completed { game_completed(); } } // while(1) -> restart from level 1 return EXIT_SUCCESS; } ================================================ FILE: src/games/bomber/makefiles/Makefile.override ================================================ ================================================ FILE: src/games/bomber/tile_aliases.h ================================================ #ifndef _IMAGES_H #define _IMAGES_H #include "cross_lib.h" #if _XL_NUMBER_OF_TILES<=6 #define ROAD_TILE _TILE_0 #define PLANE_BACK_TILE _TILE_1 #define PLANE_FRONT_TILE _TILE_2 #define BOMB_TILE _TILE_3 #define THREE_WINDOW_WALL_1_TILE _TILE_4 #define SMALL_TWO_WINDOW_WALL_1_TILE _TILE_4 #define WALL_1_TILE _TILE_4 #define TWO_WINDOW_WALL_1_TILE _TILE_4 #define THREE_WINDOW_WALL_2_TILE _TILE_4 #define TWO_WINDOW_WALL_2_TILE _TILE_4 #define SMALL_TWO_WINDOW_WALL_2_TILE _TILE_4 #define WALL_2_TILE _TILE_4 #define EXPLOSION_TILE _TILE_5 #else // Plane #define THREE_WINDOW_WALL_1_TILE _TILE_15 #define PLANE_BACK_TILE _TILE_1 #define PLANE_FRONT_TILE _TILE_2 #define ANIMATED_PLANE_BACK_TILE _TILE_8 #define ANIMATED_PLANE_CENTER_TILE _TILE_10 #define ANIMATED_PLANE_FRONT_TILE _TILE_17 // Bomb #define BOMB_TILE _TILE_3 #define ANIMATED_BOMB_UP_TILE _TILE_12 #define ANIMATED_BOMB_DOWN_TILE _TILE_13 #define ROAD_TILE _TILE_0 // WALL #define SMALL_TWO_WINDOW_WALL_1_TILE _TILE_4 #define WALL_1_TILE _TILE_18 #define TWO_WINDOW_WALL_1_TILE _TILE_7 #define THREE_WINDOW_WALL_2_TILE _TILE_15 #define TWO_WINDOW_WALL_2_TILE _TILE_7 #define SMALL_TWO_WINDOW_WALL_2_TILE _TILE_4 #define WALL_2_TILE _TILE_11 // Score/Hiscore/Level #define SCORE_TEXT_LEFT_TILE _TILE_14 #define SCORE_TEXT_RIGHT_TILE _TILE_16 #define HI_TEXT_TILE _TILE_6 #define LV_TEXT_TILE _TILE_9 // #define EXPLOSION_TILE _TILE_5 #endif #define _PLANE_COLOR _XL_CYAN #define _SMALL_TWO_WINDOW_WALL_1_COLOR _XL_WHITE #define _TWO_WINDOW_WALL_1_COLOR _XL_YELLOW #define _WALL_1_COLOR _XL_RED #define _BOMB_COLOR _XL_WHITE #define _ROAD_COLOR _XL_CYAN #define _BRICK_COLOR _XL_GREEN #define _WALL_2_COLOR _XL_YELLOW #define _THREE_WINDOW_WALL_1_COLOR _XL_WHITE #define _THREE_WINDOW_WALL_2_COLOR _XL_WHITE #define _TWO_WINDOW_WALL_2_COLOR _XL_RED #define _SMALL_TWO_WINDOW_WALL_2_COLOR _XL_YELLOW #endif // _IMAGES_H ================================================ FILE: src/games/bomber/tiles/6x8/tile0.txt ================================================ 63,63,36,9,63,63,0,0 ================================================ FILE: src/games/bomber/tiles/6x8/tile1.txt ================================================ 12,6,51,25,31,15,1,3 ================================================ FILE: src/games/bomber/tiles/6x8/tile10.txt ================================================ 32,48,24,12,63,63,12,24 ================================================ FILE: src/games/bomber/tiles/6x8/tile11.txt ================================================ 31,19,31,19,31,25,31,25 ================================================ FILE: src/games/bomber/tiles/6x8/tile12.txt ================================================ 0,0,0,0,0,33,33,45 ================================================ FILE: src/games/bomber/tiles/6x8/tile13.txt ================================================ 63,30,30,30,12,0,0,0 ================================================ FILE: src/games/bomber/tiles/6x8/tile14.txt ================================================ 0,59,41,41,57,33,0,0 ================================================ FILE: src/games/bomber/tiles/6x8/tile15.txt ================================================ 63,41,63,37,63,41,63,37 ================================================ FILE: src/games/bomber/tiles/6x8/tile16.txt ================================================ 0,46,8,4,2,14,0,0 ================================================ FILE: src/games/bomber/tiles/6x8/tile17.txt ================================================ 0,0,0,0,48,56,0,0 ================================================ FILE: src/games/bomber/tiles/6x8/tile18.txt ================================================ 63,49,63,35,63,49,63,35 ================================================ FILE: src/games/bomber/tiles/6x8/tile19.txt ================================================ 63,63,0,24,24,0,63,63 ================================================ FILE: src/games/bomber/tiles/6x8/tile2.txt ================================================ 0,0,0,32,62,63,32,0 ================================================ FILE: src/games/bomber/tiles/6x8/tile20.txt ================================================ 63,63,0,24,24,0,63,63 ================================================ FILE: src/games/bomber/tiles/6x8/tile21.txt ================================================ 63,63,0,24,24,0,63,63 ================================================ FILE: src/games/bomber/tiles/6x8/tile22.txt ================================================ 63,63,0,24,24,0,63,63 ================================================ FILE: src/games/bomber/tiles/6x8/tile23.txt ================================================ 63,63,0,24,24,0,63,63 ================================================ FILE: src/games/bomber/tiles/6x8/tile24.txt ================================================ 63,63,0,24,24,0,63,63 ================================================ FILE: src/games/bomber/tiles/6x8/tile25.txt ================================================ 0,8, 31, 16, 30, 2,62, 4 ================================================ FILE: src/games/bomber/tiles/6x8/tile3.txt ================================================ 33,33,45,63,30,30,30,12 ================================================ FILE: src/games/bomber/tiles/6x8/tile4.txt ================================================ 31,21,31,21,31,21,31,21 ================================================ FILE: src/games/bomber/tiles/6x8/tile5.txt ================================================ 0,0,0,0,0,18,63,63 ================================================ FILE: src/games/bomber/tiles/6x8/tile6.txt ================================================ 0,21,21,29,21,21,0,0 ================================================ FILE: src/games/bomber/tiles/6x8/tile7.txt ================================================ 63,45,63,45,63,45,63,45 ================================================ FILE: src/games/bomber/tiles/6x8/tile8.txt ================================================ 1,0,6,3,3,1,0,0 ================================================ FILE: src/games/bomber/tiles/6x8/tile9.txt ================================================ 0,37,37,37,37,50,0,0 ================================================ FILE: src/games/bomber/tiles/6x9/tile0.txt ================================================ 63,63,36,9,63,63,0,0,0 ================================================ FILE: src/games/bomber/tiles/6x9/tile1.txt ================================================ 12,6,51,25,31,15,1,3,0 ================================================ FILE: src/games/bomber/tiles/6x9/tile10.txt ================================================ 32,48,24,12,63,63,12,24,0 ================================================ FILE: src/games/bomber/tiles/6x9/tile11.txt ================================================ 31,19,31,19,31,25,31,25,31 ================================================ FILE: src/games/bomber/tiles/6x9/tile12.txt ================================================ 0,0,0,0,0,0,33,33,45 ================================================ FILE: src/games/bomber/tiles/6x9/tile13.txt ================================================ 63,30,30,30,12,0,0,0,0 ================================================ FILE: src/games/bomber/tiles/6x9/tile14.txt ================================================ 0,59,41,41,57,33,0,0,0 ================================================ FILE: src/games/bomber/tiles/6x9/tile15.txt ================================================ 63,41,63,37,63,41,63,37,63 ================================================ FILE: src/games/bomber/tiles/6x9/tile16.txt ================================================ 0,46,8,4,2,14,0,0,0 ================================================ FILE: src/games/bomber/tiles/6x9/tile17.txt ================================================ 0,0,0,0,48,56,0,0,0 ================================================ FILE: src/games/bomber/tiles/6x9/tile18.txt ================================================ 63,49,63,35,63,49,63,35,63 ================================================ FILE: src/games/bomber/tiles/6x9/tile19.txt ================================================ 63,63,0,24,24,24,0,63,63 ================================================ FILE: src/games/bomber/tiles/6x9/tile2.txt ================================================ 0,0,0,32,62,63,32,0,0 ================================================ FILE: src/games/bomber/tiles/6x9/tile20.txt ================================================ 63,63,0,24,24,24,0,63,63 ================================================ FILE: src/games/bomber/tiles/6x9/tile21.txt ================================================ 63,63,0,24,24,24,0,63,63 ================================================ FILE: src/games/bomber/tiles/6x9/tile22.txt ================================================ 63,63,0,24,24,24,0,63,63 ================================================ FILE: src/games/bomber/tiles/6x9/tile23.txt ================================================ 63,63,0,24,24,24,0,63,63 ================================================ FILE: src/games/bomber/tiles/6x9/tile24.txt ================================================ 63,63,0,24,24,24,0,63,63 ================================================ FILE: src/games/bomber/tiles/6x9/tile25.txt ================================================ 0,8, 31, 16, 30, 2,62, 4,0 ================================================ FILE: src/games/bomber/tiles/6x9/tile3.txt ================================================ 0,33,33,45,63,30,30,30,12 ================================================ FILE: src/games/bomber/tiles/6x9/tile4.txt ================================================ 31,21,31,21,31,21,31,21,31 ================================================ FILE: src/games/bomber/tiles/6x9/tile5.txt ================================================ 0,0,0,0,0,0,18,63,63 ================================================ FILE: src/games/bomber/tiles/6x9/tile6.txt ================================================ 0,21,21,29,21,21,0,0,0 ================================================ FILE: src/games/bomber/tiles/6x9/tile7.txt ================================================ 63,45,63,45,63,45,63,45,63 ================================================ FILE: src/games/bomber/tiles/6x9/tile8.txt ================================================ 1,0,6,3,3,1,0,0,0 ================================================ FILE: src/games/bomber/tiles/6x9/tile9.txt ================================================ 0,37,37,37,37,50,0,0,0 ================================================ FILE: src/games/bomber/tiles/7x8/tile0.txt ================================================ 127,127,113,71,127,127,0,0 ================================================ FILE: src/games/bomber/tiles/7x8/tile1.txt ================================================ 12,6,51,25,31,15,1,3 ================================================ FILE: src/games/bomber/tiles/7x8/tile10.txt ================================================ 96,48,24,12,127,127,12,24 ================================================ FILE: src/games/bomber/tiles/7x8/tile11.txt ================================================ 31,19,31,19,31,25,31,25 ================================================ FILE: src/games/bomber/tiles/7x8/tile12.txt ================================================ 0,0,0,0,0,33,33,45 ================================================ FILE: src/games/bomber/tiles/7x8/tile13.txt ================================================ 63,30,30,30,12,0,0,0 ================================================ FILE: src/games/bomber/tiles/7x8/tile14.txt ================================================ 0,59,41,41,57,33,0,0 ================================================ FILE: src/games/bomber/tiles/7x8/tile15.txt ================================================ 63,41,63,37,63,41,63,37 ================================================ FILE: src/games/bomber/tiles/7x8/tile16.txt ================================================ 0,92,16,8,4,28,0,0 ================================================ FILE: src/games/bomber/tiles/7x8/tile17.txt ================================================ 0,0,0,0,112,120,0,0 ================================================ FILE: src/games/bomber/tiles/7x8/tile18.txt ================================================ 63,49,63,35,63,49,63,35 ================================================ FILE: src/games/bomber/tiles/7x8/tile19.txt ================================================ 63,63,0,24,24,0,63,63 ================================================ FILE: src/games/bomber/tiles/7x8/tile2.txt ================================================ 0,0,0,64,126,127,64,0 ================================================ FILE: src/games/bomber/tiles/7x8/tile20.txt ================================================ 63,63,0,24,24,0,63,63 ================================================ FILE: src/games/bomber/tiles/7x8/tile21.txt ================================================ 63,63,0,24,24,0,63,63 ================================================ FILE: src/games/bomber/tiles/7x8/tile22.txt ================================================ 63,63,0,24,24,0,63,63 ================================================ FILE: src/games/bomber/tiles/7x8/tile23.txt ================================================ 63,63,0,24,24,0,63,63 ================================================ FILE: src/games/bomber/tiles/7x8/tile24.txt ================================================ 63,63,0,24,24,0,63,63 ================================================ FILE: src/games/bomber/tiles/7x8/tile25.txt ================================================ 0,8, 31, 16, 30, 2,62, 4 ================================================ FILE: src/games/bomber/tiles/7x8/tile3.txt ================================================ 33,33,45,63,30,30,30,12 ================================================ FILE: src/games/bomber/tiles/7x8/tile4.txt ================================================ 31,21,31,21,31,21,31,21 ================================================ FILE: src/games/bomber/tiles/7x8/tile5.txt ================================================ 0,0,0,0,0,42,127,127 ================================================ FILE: src/games/bomber/tiles/7x8/tile6.txt ================================================ 0,21,21,29,21,21,0,0 ================================================ FILE: src/games/bomber/tiles/7x8/tile7.txt ================================================ 63,45,63,45,63,45,63,45 ================================================ FILE: src/games/bomber/tiles/7x8/tile8.txt ================================================ 0,0,6,3,3,1,0,0 ================================================ FILE: src/games/bomber/tiles/7x8/tile9.txt ================================================ 0,37,37,37,37,50,0,0 ================================================ FILE: src/games/bomber/tiles/8x6/tile0.txt ================================================ 255,255,192,129,255,255 ================================================ FILE: src/games/bomber/tiles/8x6/tile1.txt ================================================ 6,195,97,127,63,1 ================================================ FILE: src/games/bomber/tiles/8x6/tile10.txt ================================================ 96,48,24,255,255,24 ================================================ FILE: src/games/bomber/tiles/8x6/tile11.txt ================================================ 126,102,126,102,126,102 ================================================ FILE: src/games/bomber/tiles/8x6/tile12.txt ================================================ 0,0,0,66,90,126 ================================================ FILE: src/games/bomber/tiles/8x6/tile13.txt ================================================ 60,60,24,0,0,0 ================================================ FILE: src/games/bomber/tiles/8x6/tile14.txt ================================================ $db,$92,$d2,$52,$db,$00 ================================================ FILE: src/games/bomber/tiles/8x6/tile15.txt ================================================ 255,165,255,165,255,165 ================================================ FILE: src/games/bomber/tiles/8x6/tile16.txt ================================================ $b3,$aa,$b3,$aa,$ab,$00 ================================================ FILE: src/games/bomber/tiles/8x6/tile17.txt ================================================ 0,0,0,224,240,0 ================================================ FILE: src/games/bomber/tiles/8x6/tile18.txt ================================================ 126,102,126,102,126,102 ================================================ FILE: src/games/bomber/tiles/8x6/tile19.txt ================================================ 0,48,48,0,255,255 ================================================ FILE: src/games/bomber/tiles/8x6/tile2.txt ================================================ 0,0,128,254,255,128 ================================================ FILE: src/games/bomber/tiles/8x6/tile20.txt ================================================ 0,48,48,0,255,255 ================================================ FILE: src/games/bomber/tiles/8x6/tile21.txt ================================================ 255,0,48,48,0,255 ================================================ FILE: src/games/bomber/tiles/8x6/tile22.txt ================================================ 255,0,48,48,0,255 ================================================ FILE: src/games/bomber/tiles/8x6/tile23.txt ================================================ 255,0,48,48,0,255 ================================================ FILE: src/games/bomber/tiles/8x6/tile24.txt ================================================ 255,0,48,48,0,255 ================================================ FILE: src/games/bomber/tiles/8x6/tile25.txt ================================================ $18,$3e,$60,$3c,$06,$7c ================================================ FILE: src/games/bomber/tiles/8x6/tile3.txt ================================================ 66,90,126,60,60,24 ================================================ FILE: src/games/bomber/tiles/8x6/tile4.txt ================================================ 126,90,126,90,126,90 ================================================ FILE: src/games/bomber/tiles/8x6/tile5.txt ================================================ 0,0,0,170,255,255 ================================================ FILE: src/games/bomber/tiles/8x6/tile6.txt ================================================ $54,$54,$74,$54,$54,$00 ================================================ FILE: src/games/bomber/tiles/8x6/tile7.txt ================================================ 255,153,255,153,255,153 ================================================ FILE: src/games/bomber/tiles/8x6/tile8.txt ================================================ 0,12,6,7,3,0 ================================================ FILE: src/games/bomber/tiles/8x6/tile9.txt ================================================ 37,37,37,37,50,0 ================================================ FILE: src/games/bomber/tiles/8x8/tile0.txt ================================================ 255,255,255,192,129,255,255,255 ================================================ FILE: src/games/bomber/tiles/8x8/tile1.txt ================================================ 12,6,195,97,127,63,1,3 ================================================ FILE: src/games/bomber/tiles/8x8/tile10.txt ================================================ 192,96,48,24,255,255,24,48 ================================================ FILE: src/games/bomber/tiles/8x8/tile11.txt ================================================ 126,102,126,102,126,102,126,102 ================================================ FILE: src/games/bomber/tiles/8x8/tile12.txt ================================================ 0,0,0,0,66,66,90,126 ================================================ FILE: src/games/bomber/tiles/8x8/tile13.txt ================================================ 60,60,60,24,0,0,0,0 ================================================ FILE: src/games/bomber/tiles/8x8/tile14.txt ================================================ $db,$92,$92,$d2,$52,$52,$db,$00 ================================================ FILE: src/games/bomber/tiles/8x8/tile15.txt ================================================ 255,165,255,165,255,165,255,165 ================================================ FILE: src/games/bomber/tiles/8x8/tile16.txt ================================================ $b3,$aa,$aa,$b3,$aa,$aa,$ab,$00 ================================================ FILE: src/games/bomber/tiles/8x8/tile17.txt ================================================ 0,0,0,0,224,240,0,0 ================================================ FILE: src/games/bomber/tiles/8x8/tile18.txt ================================================ 126,102,126,102,126,102,126,102 ================================================ FILE: src/games/bomber/tiles/8x8/tile19.txt ================================================ 255,255,0,48,48,0,255,255 ================================================ FILE: src/games/bomber/tiles/8x8/tile2.txt ================================================ 0,0,0,128,254,255,128,0 ================================================ FILE: src/games/bomber/tiles/8x8/tile20.txt ================================================ 255,255,0,48,48,0,255,255 ================================================ FILE: src/games/bomber/tiles/8x8/tile21.txt ================================================ 255,255,0,48,48,0,255,255 ================================================ FILE: src/games/bomber/tiles/8x8/tile22.txt ================================================ 255,255,0,48,48,0,255,255 ================================================ FILE: src/games/bomber/tiles/8x8/tile23.txt ================================================ 255,255,0,48,48,0,255,255 ================================================ FILE: src/games/bomber/tiles/8x8/tile24.txt ================================================ 255,255,0,48,48,0,255,255 ================================================ FILE: src/games/bomber/tiles/8x8/tile25.txt ================================================ $18,$3e,$60,$3c,$06,$7c,$18,$00 ================================================ FILE: src/games/bomber/tiles/8x8/tile3.txt ================================================ 66,66,90,126,60,60,60,24 ================================================ FILE: src/games/bomber/tiles/8x8/tile4.txt ================================================ 126,90,126,90,126,90,126,90 ================================================ FILE: src/games/bomber/tiles/8x8/tile5.txt ================================================ 0,0,0,0,0,170,255,255 ================================================ FILE: src/games/bomber/tiles/8x8/tile6.txt ================================================ $54,$54,$54,$74,$54,$54,$54,$00 ================================================ FILE: src/games/bomber/tiles/8x8/tile7.txt ================================================ 255,153,255,153,255,153,255,153 ================================================ FILE: src/games/bomber/tiles/8x8/tile8.txt ================================================ 0,0,12,6,7,3,0,0 ================================================ FILE: src/games/bomber/tiles/8x8/tile9.txt ================================================ 37,37,37,37,37,37,50,0 ================================================ FILE: src/games/bomber/tiles/ASCII/aquarius/aquarius_char_tiles.h ================================================ #ifndef _AQUARIUS_CHAR_TILES_H #define _AQUARIUS_CHAR_TILES_H // Plane #define _TILE_1 154 #define _TILE_2 172 // arrow 6 // Animated plane #define _TILE_0 243 #define _TILE_3 135 #define _TILE_17 _TILE_2 // Building #define _TILE_4 134 #define _TILE_5 209 #define _TILE_7 251 #define _TILE_11 191 #define _TILE_15 127 // Road #define _TILE_8 208 // Explosion #define _TILE_18 216 // Score/Hiscore/Level #define _TILE_6 'H' #define _TILE_9 'L' #define _TILE_14 'S' #define _TILE_16 'C' // Bomb #define _TILE_12 208 //'!' #define _TILE_10 _TILE_1 //'o' #define _TILE_13 _TILE_10 #endif // _AQUARIUS_CHAR_TILES_H ================================================ FILE: src/games/bomber/tiles/ASCII/aquarius/aquarius_quad_char_tiles.h ================================================ #ifndef _AQUARIUS_QUAD_CHAR_TILES_H #define _AQUARIUS_QUAD_CHAR_TILES_H // This macros are indices #define _TILE_0 1 #define _TILE_1 2 #define _TILE_2 3 #define _TILE_3 4 #define _TILE_4 5 #define _TILE_5 6 #define _TILE_6 7 #define _TILE_7 8 #define _TILE_8 9 #define _TILE_9 10 #define _TILE_10 11 #define _TILE_11 12 #define _TILE_12 13 #define _TILE_13 14 #define _TILE_14 15 #define _TILE_15 (58-32) #define _TILE_16 (59-32) #define _TILE_17 (60-32) #define _TILE_18 (61-32) #define _TILE_19 (62-32) #define _TILE_20 (63-32) #define _TILE_21 (64-32) #define _TILE_22 (91-32) #define _TILE_23 (92-32) #define _TILE_24 (93-32) #define _TILE_25 (94-32) #define _TILE_26 (95-32) // ------------------------------------------------------------- // Animated Plane #define _TILE_0_0 'a' #define _TILE_0_1 'b' #define _TILE_0_2 'c' #define _TILE_0_3 'd' #define _TILE_3_0 'a' #define _TILE_3_1 'b' #define _TILE_3_2 'c' #define _TILE_3_3 'd' #define _TILE_17_0 'a' #define _TILE_17_1 'b' #define _TILE_17_2 'c' #define _TILE_17_3 'd' // Plane #define _TILE_1_0 'a' #define _TILE_1_1 'b' #define _TILE_1_2 'c' #define _TILE_1_3 'd' #define _TILE_2_0 'a' #define _TILE_2_1 'b' #define _TILE_2_2 'c' #define _TILE_2_3 'd' // Building #define _TILE_4_0 'a' #define _TILE_4_1 'b' #define _TILE_4_2 'c' #define _TILE_4_3 'd' #define _TILE_5_0 'a' #define _TILE_5_1 'b' #define _TILE_5_2 'c' #define _TILE_5_3 'd' #define _TILE_7_0 'a' #define _TILE_7_1 'b' #define _TILE_7_2 'c' #define _TILE_7_3 'd' #define _TILE_11_0 'a' #define _TILE_11_1 'b' #define _TILE_11_2 'c' #define _TILE_11_3 'd' #define _TILE_15_0 'a' #define _TILE_15_1 'b' #define _TILE_15_2 'c' #define _TILE_15_3 'd' // Road #define _TILE_8_0 243 #define _TILE_8_1 243 #define _TILE_8_2 243 #define _TILE_8_3 243 // Explosion #define _TILE_18_0 209 #define _TILE_18_1 209 #define _TILE_18_2 209 #define _TILE_18_3 209 // Bomb #define _TILE_12_0 'a' #define _TILE_12_1 'b' #define _TILE_12_2 'c' #define _TILE_12_3 'd' // Hiscore #define _TILE_6_0 'H' #define _TILE_6_1 'I' #define _TILE_6_2 ' ' #define _TILE_6_3 ' ' // Level #define _TILE_9_0 'L' #define _TILE_9_1 'V' #define _TILE_9_2 ' ' #define _TILE_9_3 ' ' // Score #define _TILE_14_0 'P' #define _TILE_14_1 'T' #define _TILE_14_2 ' ' #define _TILE_14_3 ' ' #define _TILE_16_0 'S' #define _TILE_16_1 ' ' #define _TILE_16_2 ' ' #define _TILE_16_3 ' ' // Unused #define _TILE_10_0 'a' #define _TILE_10_1 'b' #define _TILE_10_2 'c' #define _TILE_10_3 'd' #define _TILE_13_0 'a' #define _TILE_13_1 'b' #define _TILE_13_2 'c' #define _TILE_13_3 'd' #define _TILE_19_0 'a' #define _TILE_19_1 'b' #define _TILE_19_2 'c' #define _TILE_19_3 'd' #define _TILE_20_0 'a' #define _TILE_20_1 'b' #define _TILE_20_2 'c' #define _TILE_20_3 'd' #define _TILE_21_0 'a' #define _TILE_21_1 'b' #define _TILE_21_2 'c' #define _TILE_21_3 'd' #define _TILE_22_0 'a' #define _TILE_22_1 'b' #define _TILE_22_2 'c' #define _TILE_22_3 'd' #define _TILE_23_0 'a' #define _TILE_23_1 'b' #define _TILE_23_2 'c' #define _TILE_23_3 'd' #define _TILE_24_0 'a' #define _TILE_24_1 'b' #define _TILE_24_2 'c' #define _TILE_24_3 'd' #define _TILE_25_0 'a' #define _TILE_25_1 'b' #define _TILE_25_2 'c' #define _TILE_25_3 'd' #define _TILE_26_0 'a' #define _TILE_26_1 'b' #define _TILE_26_2 'c' #define _TILE_26_3 'd' #endif // _AQUARIUS_QUAD_CHAR_TILES_H ================================================ FILE: src/games/bomber/tiles/ASCII/char_tiles.h ================================================ #ifndef _CHAR_TILES_H #define _CHAR_TILES_H #include "cross_lib.h" #if defined(__TARGET_SPECIFIC_ASCII) && defined(__AQUARIUS__) && !defined(__QUAD_MEMORY_MAPPED_GRAPHICS) && !defined(__DUAL_MEMORY_MAPPED_GRAPHICS) #include "aquarius/aquarius_char_tiles.h" #else #if !defined(__CIDELSA__) // Plane #define _TILE_1 '-' #define _TILE_2 '>' // Animated plane #define _TILE_0 '=' #if defined(__MC10__) #define _TILE_5 '*' #elif defined(__CIDELSA__) #define _TILE_5 'X' #else #define _TILE_5 '~' #endif #define _TILE_8 '=' #else // Plane #define _TILE_1 'E' #define _TILE_2 'D' // Animated plane #define _TILE_0 'H' #define _TILE_5 'S' #define _TILE_8 'Z' #endif #define _TILE_10 _TILE_1 #define _TILE_17 _TILE_2 #if defined(__CIDELSA__) #define _TILE_4 'O' #define _TILE_18 'X' #define _TILE_7 'M' #define _TILE_11 'N' #define _TILE_15 'X' #define _TILE_19 'Q' #define _TILE_20 'T' #define _TILE_21 'U' #define _TILE_22 'B' #define _TILE_23 'T' #define _TILE_24 'W' #define _TILE_25 'I' #endif #define _TILE_6 'H' #define _TILE_9 'L' #define _TILE_14 'S' #define _TILE_16 'C' #define _TILE_12 'I' #define _TILE_3 'O' #define _TILE_13 'O' #endif #endif // _CHAR_TILES_H ================================================ FILE: src/games/bomber/tiles/ASCII/quad_char_tiles.h ================================================ #ifndef _CHAR_TILES_H #define _CHAR_TILES_H #include "cross_lib.h" #if defined(__TARGET_SPECIFIC_ASCII) && defined(__AQUARIUS__) && !defined(__QUAD_MEMORY_MAPPED_GRAPHICS) && !defined(__DUAL_MEMORY_MAPPED_GRAPHICS) #include "aquarius/aquarius_char_tiles.h" #elif defined(__TARGET_SPECIFIC_ASCII) && defined(__AQUARIUS__) && defined(__QUAD_MEMORY_MAPPED_GRAPHICS) #include "aquarius/aquarius_quad_char_tiles.h" #else #if !defined(__CIDELSA__) // Plane #define _TILE_1 '-' #define _TILE_2 '>' // Animated plane #define _TILE_0 '=' #define _TILE_5 '~' #define _TILE_8 '=' #else // Plane #define _TILE_1 'E' #define _TILE_2 'D' // Animated plane #define _TILE_0 'H' #define _TILE_5 'S' #define _TILE_8 'Z' #endif #define _TILE_3 'O' #define _TILE_17 _TILE_2 #if defined(__CIDELSA__) #define _TILE_4 'O' #define _TILE_18 'X' #define _TILE_7 'M' #define _TILE_11 'N' #define _TILE_15 'X' #define _TILE_19 'Q' #define _TILE_20 'T' #define _TILE_21 'U' #define _TILE_22 'B' #define _TILE_23 'T' #define _TILE_24 'W' #define _TILE_25 'I' #else #define _TILE_18 'X' #define _TILE_11 'N' #define _TILE_7 'M' #define _TILE_15 'X' #define _TILE_4 'O' #endif #define _TILE_6 'H' #define _TILE_9 'L' #define _TILE_14 'S' #define _TILE_16 'C' #define _TILE_12 'I' #define _TILE_10 _TILE_1 #define _TILE_13 _TILE_10 #endif #endif // _CHAR_TILES_H ================================================ FILE: src/games/chase/Makefile.chase ================================================ ###################################################################### # Cross-Chase files # NO_CHASE_FILES ?= \ $(BASIC_CROSS_LIB_FILES) \ $(CROSS_LIB_PATH)/sleep/sleep_macros.c \ $(SOURCE_PATH)/split_files/move_player.c \ $(SOURCE_PATH)/split_files/ghost.c $(SOURCE_PATH)/split_files/level.c $(SOURCE_PATH)/split_files/character.c $(SOURCE_PATH)/split_files/game_text.c \ $(SOURCE_PATH)/split_files/main.c \ $(SOURCE_PATH)/split_files/init_images.c # TINY_FILES ?= $(NO_CHASE_FILES) $(SOURCE_PATH)/split_files/strategy.c # TEST_FILES ?= $(NO_CHASE_FILES) # LIGHT_ONLY_FILES ?= $(SOURCE_PATH)/split_files/item.c $(SOURCE_PATH)/split_files/skull.c $(SOURCE_PATH)/split_files/bullet.c # FULL_ONLY_FILES ?= $(SOURCE_PATH)/split_files/horizontal_missile.c $(SOURCE_PATH)/split_files/rocket.c # LIGHT_FILES ?= $(TINY_FILES) $(LIGHT_ONLY_FILES) # # FULL_FILES ?= $(LIGHT_FILES) $(FULL_ONLY_FILES) $(SOURCE_PATH)/end_screen.c FULL_FILES ?= \ $(BASIC_CROSS_LIB_FILES) \ $(CROSS_LIB_PATH)/sleep/sleep_macros.c \ $(SOURCE_PATH)/main.c GLOBAL_OPTS = -D_XL_NO_SMALL_LETTERS GAME_NAME := chase PARENT_DIR = games include ./$(PARENT_DIR)/$(GAME_NAME)/config/project_config.mk include ./$(PARENT_DIR)/$(GAME_NAME)/config/game_config.mk include ./Makefile_common ########################################################################################### include ./$(PARENT_DIR)/$(GAME_NAME)/makefiles/Makefile.override include ./makefiles.common/auxiliary/Makefile_default_values ================================================ FILE: src/games/chase/Makefile.chase_BK ================================================ ###################################################################### # Makefile for CROSS-CHASE GAME_NAME = chase include ./games/$(GAME_NAME)/project_config.mk PARENT_DIR = games SOURCE_PATH := $(PARENT_DIR)/$(GAME_NAME) GLOBAL_OPTS = # -D_DEFAULT_ASCII # -D_BACKGROUND_COLOR=_XL_WHITE ################################### SCCZ80_OPTS ?= $(GLOBAL_OPTS) $(Z88DK_MAKEFILE_COMPILATION_OPTS) #-O0 #-O3 SCCZ80_ROM_OPTS ?= $(GLOBAL_OPTS) $(Z88DK_MAKEFILE_COMPILATION_OPTS) #-O0 #-O3 ZSDCC_OPTS ?= $(ZSDCC_MAKEFILE_COMPILATION_OPTS) $(GLOBAL_OPTS) # -SO2 #-SO0 # -SO3 --max-allocs-per-node200000 ZSDCC_ROM_OPTS ?= $(ZSDCC_MAKEFILE_COMPILATION_OPTS) $(GLOBAL_OPTS) # -SO3 # -SO3 --max-allocs-per-node200000 Z88DK_MAKE_OPTS ?= $(ZSDCC_MAKEFILE_THREADS_OPTS) #-j 8 #################################################################################################################### # COMMON INCLUDES include makefiles.common/auxiliary/Makefile_ALL ##################################################################### # Draw skip LIGHT_DRAW_SKIP ?= -DBOMB_DRAW_SKIP=1 -DWALL_DRAW_SKIP=3 DRAW_SKIP ?= -DBOMB_DRAW_SKIP=1 -DWALL_DRAW_SKIP=7 EXTRA_DRAW_SKIP ?= -DBOMB_DRAW_SKIP=3 -DWALL_DRAW_SKIP=15 ULTRA_DRAW_SKIP ?= -DBOMB_DRAW_SKIP=7 -DWALL_DRAW_SKIP=15 -DGHOST_DRAW_SKIP=1 ###################################################################### # Cross-Shoot files # NO_CHASE_FILES ?= \ $(BASIC_CROSS_LIB_FILES) \ $(SOURCE_PATH)/move_player.c \ $(SOURCE_PATH)/ghost.c $(SOURCE_PATH)/level.c $(SOURCE_PATH)/character.c $(SOURCE_PATH)/game_text.c \ $(SOURCE_PATH)/main.c \ $(SOURCE_PATH)/init_images.c # TINY_FILES ?= $(NO_CHASE_FILES) $(SOURCE_PATH)/strategy.c # TEST_FILES ?= $(NO_CHASE_FILES) # LIGHT_ONLY_FILES ?= $(SOURCE_PATH)/item.c $(SOURCE_PATH)/skull.c $(SOURCE_PATH)/bullet.c # FULL_ONLY_FILES ?= $(SOURCE_PATH)/horizontal_missile.c $(SOURCE_PATH)/rocket.c # LIGHT_FILES ?= $(TINY_FILES) $(LIGHT_ONLY_FILES) # FULL_FILES ?= $(LIGHT_FILES) $(FULL_ONLY_FILES) #################################################################################################################### # COMMON INCLUDES # include makefiles.common/auxiliary/Makefile_ALL ############################################################################################################################################# # All vintage and GCC targets that can be compiled under CYGWIN, i.e., not including gcc_z8k_targets and not including emcc_targets all_more: \ cc65_targets \ cmoc_targets \ ack_targets \ lcc1802_targets \ xtc68_targets \ gcc_targets \ gcc_atari_st_targets \ gcc_amiga_targets \ gcc_ti99_targets \ z88dk_targets_more ifeq ($(DO_WIN),1) all: \ cc65_targets \ cmoc_targets \ lcc1802_targets \ z88dk_targets else all: \ cc65_targets \ cmoc_targets \ z88dk_targets endif #################################################################################################################### # TARGETS PER DEV-KIT # ------------------------------------------------------------------------------------------ # - CC65 include games/chase/makefiles.chase/Makefile.cc65_targets # ------------------------------------------------------------------------------------------ # - Z88DK include games/chase/makefiles.chase/Makefile.z88dk_targets # ------------------------------------------------------------------------------------------ # - CMOC include games/chase/makefiles.chase/Makefile.cmoc_targets # ------------------------------------------------------------------------------------------ # - ACK include games/chase/makefiles.chase/Makefile.ack_targets # ------------------------------------------------------------------------------------------ # - GCC include games/chase/makefiles.chase/Makefile.gcc_targets # ------------------------------------------------------------------------------------------ # - VBCC include games/chase/makefiles.chase/Makefile.vbcc_targets # ------------------------------------------------------------------------------------------ # - CC6303 include games/chase/makefiles.chase/Makefile.cc6303_targets # ------------------------------------------------------------------------------------------ # - GCC AMIGA include games/chase/makefiles.chase/Makefile.gcc_amiga_targets # ------------------------------------------------------------------------------------------ # - GCC ATARI_ST include games/chase/makefiles.chase/Makefile.gcc_atari_st_targets # ------------------------------------------------------------------------------------------ # - XTC68 include games/chase/makefiles.chase/Makefile.xtc68_targets # ------------------------------------------------------------------------------------------ # - LCC1802 include games/chase/makefiles.chase/Makefile.lcc1802_targets # ------------------------------------------------------------------------------------------ # - GCC Z8K PCOS include games/chase/makefiles.chase/Makefile.gcc_z8k_pcos_targets # ------------------------------------------------------------------------------------------ # - EMCC include games/chase/makefiles.chase/Makefile.emcc_targets # ------------------------------------------------------------------------------------------ # - GCC TMS9900 include games/chase/makefiles.chase/Makefile.gcc_tms9900_targets #include games/chase/makefiles.chase/Makefile.gcc_tms9900_test # ------------------------------------------------------------------------------------------ # - SDCC include games/chase/makefiles.chase/Makefile.sdcc_targets # ------------------------------------------------------------------------------------------ # - WINCMOC # #include games/chase/makefiles.chase/Makefile.wincmoc_targets ############################################################################################################################################# # Cross dev-kit include games/chase/makefiles.chase/Makefile.cross-dev-kit_targets #################################################################################################################### # Alternative builds # - Z88DK include makefiles.other/chase/alt/Makefile.z88dk_alternative_builds # - CC65 include makefiles.other/chase/alt/Makefile.cc65_alternative_builds #################################################################################################################### # WIP # - Z88DK include makefiles.other/chase/wip/Makefile.z88dk_wip_targets # - CC65 include makefiles.other/chase/wip/Makefile.cc65_wip_targets # - ACK include makefiles.other/chase/wip/Makefile.ack_wip_targets #################################################################################################################### # EXPERIMENTAL include makefiles.other/chase/experimental/Makefile.z88dk_experimental_targets ================================================ FILE: src/games/chase/bullet.h ================================================ /* --------------------------------------------------------------------------------------- */ // // CROSS CHASE by Fabrizio Caruso // // Fabrizio_Caruso@hotmail.com // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from // the use of this software. // Permission is granted to anyone to use this software for non-commercial applications, // subject to the following restrictions: // 1. The origin of this software must not be misrepresented; you must not // claim that you wrote the original software. If you use this software in // a product, an acknowledgment in the product documentation would be // appreciated but is not required. // 2. Altered source versions must be plainly marked as such, and must not // be misrepresented as being the original software. // 3. This notice may not be removed or altered from any source distribution. /* --------------------------------------------------------------------------------------- */ #ifndef _MISSILE_HEADER #define _MISSILE_HEADER #if !defined(TINY_GAME) #include "character.h" #include "settings.h" #include "definitions.h" void handle_bullet(void); void checkBullet(Character *bulletPtr); void bulletVsGhost(Character * bulletPtr, Character * ghostPtr); void bulletVsGhosts(Character * bulletPtr); void bulletVsSkull(register Character *bulletPtr); void _moveBullet(register Character * bulletPtr); void moveBullet(register Character * bulletPtr); void reducePowerUpsCoolDowns(void); #if defined(FULL_GAME) void handle_chasing_bullet(void); #endif #endif // !defined(TINY_GAME) #endif //_MISSILE ================================================ FILE: src/games/chase/character.h ================================================ /* --------------------------------------------------------------------------------------- */ // // CROSS CHASE by Fabrizio Caruso // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from // the use of this software. // Permission is granted to anyone to use this software for non-commercial applications, // subject to the following restrictions: // 1. The origin of this software must not be misrepresented; you must not // claim that you wrote the original software. If you use this software in // a product, an acknowledgment in the product documentation would be // appreciated but is not required. // 2. Altered source versions must be plainly marked as such, and must not // be misrepresented as being the original software. // 3. This notice may not be removed or altered from any source distribution. /* --------------------------------------------------------------------------------------- */ #ifndef _CHARACTER #define _CHARACTER #include "cross_lib.h" #include "settings.h" struct CharacterStruct { // character coordinates uint8_t _x; uint8_t _y; // _status decides whether the character is active uint8_t _status; Image* _imagePtr; }; typedef struct CharacterStruct Character; #if !defined(NO_BLINKING) void _blink_draw(uint8_t x, uint8_t y, Image * image, uint8_t *blinkCounter); #endif #include "settings.h" #if defined(ANIMATE_PLAYER) #define PLAYER_IMAGE PLAYER_DOWN_IMAGE #endif #define playerReachedGhosts() sameLocationAsAnyLocation(player._x, player._y, ghosts, GHOSTS_NUMBER) #define characterReachedBombs(preyPtr) sameLocationAsAnyLocation((preyPtr)->_x, (preyPtr)->_y, bombs, BOMBS_NUMBER) #define areCharctersAtSamePosition(lhs, rhs)isCharacterAtLocation((lhs)->_x, (lhs)->_y,rhs) extern uint16_t points; extern uint8_t ghostCount; extern Image INVINCIBILITY_IMAGE; #if defined(FULL_GAME) uint8_t playerKilledBy(Character *enemyPtr); #endif void displayCharacter(Character * characterPtr); void deleteCharacter(Character * characterPtr); // #if defined(ANIMATE_PLAYER) extern Image PLAYER_LEFT_IMAGE; extern Image PLAYER_RIGHT_IMAGE; extern Image PLAYER_UP_IMAGE; extern Image PLAYER_DOWN_IMAGE; #define SHOW_LEFT() player._imagePtr = (Image *)&PLAYER_LEFT_IMAGE #define SHOW_RIGHT() player._imagePtr = (Image *)&PLAYER_RIGHT_IMAGE #define SHOW_UP() player._imagePtr = (Image *)&PLAYER_UP_IMAGE #define SHOW_DOWN() player._imagePtr = (Image *)&PLAYER_DOWN_IMAGE #else #define SHOW_LEFT() { } #define SHOW_RIGHT() { } #define SHOW_UP() { } #define SHOW_DOWN() { } #endif #define DRAW_CHARACTER(x,y,image) _draw(x,y,image) #define DRAW_PLAYER(x,y,image) DRAW_CHARACTER(x,y,image) #define DRAW_GHOST(x,y,image) DRAW_CHARACTER(x,y,image) #define DRAW_SKULL(x,y,image) DRAW_CHARACTER(x,y,image) #define DRAW_BOMB(x,y,image) DRAW_CHARACTER(x,y,image) #define DRAW_MISSILE(x,y,image) DRAW_CHARACTER(x,y,image) #if defined(FULL_GAME) && !defined(_XL_NO_COLOR) void _DRAW_PLAYER(void); #else #define _DRAW_PLAYER() DRAW_PLAYER(player._x, player._y, player._imagePtr) #endif #define DRAW_BLINKING_PLAYER(x, y, image) _blink_draw(x,y,image, &playerBlink) #if !defined(_XL_NO_COLOR) #define __DRAW(x,y,image) \ _XL_DRAW(x,y, (image)->_imageData,(image)->_color) #else #define __DRAW(x,y,image) \ _XL_DRAW(x,y, (image)->_imageData,0) #endif #define _draw_stat(x, y, image) \ __DRAW((x),(y),(image)) #define _XLIB_DRAW(x,y,image) \ _draw_stat(x, y, image) #define _XLIB_DELETE(x,y) \ _delete_stat(x, y) #define _draw(x, y, image) \ __DRAW((x),Y_OFFSET+(y),(image)) #define _delete_stat(x, y) \ _XL_DELETE((x),(y)) #define _delete(x, y) \ _XL_DELETE((x),Y_OFFSET+(y)) #define DELETE_CHARACTER(x,y) _delete(x,y) #define DELETE_PLAYER(x,y,image) _delete(x,y) #define DELETE_GHOST(x,y,image) _delete(x,y) #define DELETE_SKULL(x,y,image) _delete(x,y) #define DELETE_BOMB(x,y,image) _delete(x,y) #define DELETE_POWERUP(x,y,image) _delete(x,y) #define DELETE_GUN(x,y,image) _delete(x,y) #define DELETE_MISSILE(x,y,image) _delete(x,y) #define DELETE_EXTRA_POINTS(x,y,image) _delete(x,y) #define DELETE_EXTRA_LIFE(x,y,image) _delete(x,y) #define DELETE_INVINCIBILITY(x,y,image) _delete(x,y) // #define displayPlayer(characterPtr) displayCharacter(characterPtr); #define displayGhost(characterPtr) displayCharacter(characterPtr); #define displayBomb(characterPtr) displayCharacter(characterPtr); #define displayHorizontalMissile(characterPtr) displayCharacter(characterPtr); #define displayRocket(characterPtr) displayCharacter(characterPtr); #define displayBullet(characterPtr) displayCharacter(characterPtr); #define displayChasingBullet(characterPtr) displayCharacter(characterPtr); #define displaySkull(characterPtr) displayCharacter(characterPtr); #define deletePlayer(characterPtr) deleteCharacter(characterPtr); #define deleteGhost(characterPtr) deleteCharacter(characterPtr); #define deleteBomb(characterPtr) deleteCharacter(characterPtr); #define deleteHorizontalMissile(characterPtr) deleteCharacter(characterPtr); #define deleteRocket(characterPtr) deleteCharacter(characterPtr); #define deleteBullet(characterPtr) deleteCharacter(characterPtr); #define deleteChasingBullet(characterPtr) deleteCharacter(characterPtr); #define deleteSkull(characterPtr) deleteCharacter(characterPtr); #define deletePowerUp(characterPtr) deleteCharacter(characterPtr); void initializeCharacter(register Character* characterPtr, uint8_t x, uint8_t y, uint8_t status, Image * imagePtr); uint8_t isCharacterAtLocation(uint8_t x, uint8_t y, Character * characterPtr); uint8_t wallReached(register Character *characterPtr); void playerDies(void); void checkBombsVsGhost(register Character * ghostPtr); uint8_t safeLocation(uint8_t x, uint8_t y); void relocateCharacter(register Character * characterPtr); void ghostDies(Character * ghostPtr); uint8_t sameLocationAsAnyLocation(uint8_t x, uint8_t y, Character *characterList, uint8_t length); #if defined(FULL_GAME) uint8_t innerWallReached(register Character *characterPtr); uint8_t horizWallsReached(void); #endif #if defined(FULL_GAME) void DRAW_BROKEN_BRICK(uint8_t x, uint8_t y); #endif #endif // _CHARACTER ================================================ FILE: src/games/chase/config/game_config.mk ================================================ # # COCO_COLOR_GFX_GAME_OPTS ?= -DMAX_ARROWS_ON_SCREEN=7 -DFASTER_WALL_REDRAW -DNUMBER_OF_MISSILES=3 CREATIVISION_GAME_OPTS ?= -DLESS_TEXT GAMATE_GAME_OPTS ?= -DLESS_TEXT -DNO_BLINKING -DSIMPLE_STRATEGY -DNO_HINTS -DNO_CONTROL_INSTRUCTIONS C128_Z80_80COL_GAME_OPTS ?= -DLESS_TEXT -DNO_BLINKING -DNO_HINTS -DBOMB_DRAW_SKIP=3 -DWALL_DRAW_SKIP=15 # ZX81_NO_GFX_GAME_OPTS ?= -DMAX_ARROWS_ON_SCREEN=7 -DNUMBER_OF_MISSILES=4 -DMISSILE_DROP_LOOP_MASK=1 -DSMALL_WALL ZX81_GFX_GAME_OPTS ?= -DLESS_TEXT -DNO_BLINKING -DNO_HINTS -DBOMB_DRAW_SKIP=7 -DWALL_DRAW_SKIP=15 # APPLE2_GAME_OPTS ?= -DMAX_ARROWS_ON_SCREEN=7 -DNUMBER_OF_MISSILES=3 COMX_GAME_OPTS ?= -DNO_BLINKING -DBOMB_DRAW_SKIP=3 -DWALL_DRAW_SKIP=15 -DGHOSTS_NUMBER=7 PECOM_GAME_OPTS ?= -DNO_BLINKING -DBOMB_DRAW_SKIP=3 -DWALL_DRAW_SKIP=15 -DGHOSTS_NUMBER=7 TMC600_GAME_OPTS ?= -DNO_BLINKING -DBOMB_DRAW_SKIP=3 -DWALL_DRAW_SKIP=15 -DGHOSTS_NUMBER=7 MICRO_GAME_OPTS ?= -DNO_BLINKING -DGHOSTS_NUMBER=7 CAMPUTERS_LYNX_GAME_OPTS ?= -DNO_BLINKING -DBOMB_DRAW_SKIP=3 -DWALL_DRAW_SKIP=15 -DGHOSTS_NUMBER=7 VIC20_EXP_3K_GAME_OPTS ?= -DNO_BLINKING -DNO_HINTS -DLESS_TEXT -DGHOSTS_NUMBER=8 VIC20_UNEXPANDED_GAME_OPTS ?= -DNO_EXTRA_TITLE \ -DROUND_ENEMIES \ -DSIMPLE_RANDOM_LEVEL \ -DNO_END_SCREEN \ -DNO_CONTROL_INSTRUCTIONS \ -DLESS_TEXT -DNO_BLINKING \ -DNO_STATS \ -DGHOSTS_NUMBER=8 \ -DNO_DEAD_GHOSTS STDIO_GAME_OPTS ?= -DEVEN_LOOP_MOVE PV1000_GAME_OPTS ?= -DNO_BLINKING -DBOMB_DRAW_SKIP=3 -DWALL_DRAW_SKIP=15 -DGHOSTS_NUMBER=7 PHC25_MONO_GAME_OPTS ?= -DNO_BLINKING -DNO_HINTS -DLESS_TEXT -DGHOSTS_NUMBER=8 -DSIMPLE_STRATEGY -DNO_CONTROL_INSTRUCTIONS PHC25_GAME_OPTS ?= -DNO_BLINKING -DNO_HINTS -DLESS_TEXT -DGHOSTS_NUMBER=8 -DSIMPLE_STRATEGY -DNO_CONTROL_INSTRUCTIONS ================================================ FILE: src/games/chase/config/project_config.mk ================================================ ##################################################################### # SLOWDOWN VALUES # Common factor _COMMON_SLOWDOWN_FACTOR=10 # CC65 _AGAT_SLOWDOWN=280 _APPLE2_SLOWDOWN=30 _APPLE2ENH_SLOWDOWN=30 _APPLE2_HGR_SLOWDOWN=50 _APPLE2ENH_HGR_SLOWDOWN=50 _ATARI_SLOWDOWN=70 _ATARI5200_SLOWDOWN=70 _ATARI7800_SLOWDOWN=210 _ATARI7800_NO_COLOR_SLOWDOWN=150 _ATARI_LYNX_SLOWDOWN=1000 _C128_8502_80COL_SLOWDOWN=90 _C16_SLOWDOWN=55 _C16_CONIO_SLOWDOWN=85 _C64_SLOWDOWN=45 _CX16_SLOWDOWN?=250 _CBM610_SLOWDOWN=300 _CBM510_SLOWDOWN=120 _CREATIVISION_SLOWDOWN=100 _GAMATE_SLOWDOWN=120 _ORIC_SLOWDOWN=40 _MEGA65_SLOWDOWN=700 _NES_SLOWDOWN=280 _PET_SLOWDOWN=100 _PCE_SLOWDOWN=550 _SUPERVISION_SLOWDOWN=700 _VIC20_SLOWDOWN=200 # Z88DK _AGON_SLOWDOWN=2500 _AQUARIUS_SLOWDOWN=105 _ACE_SLOWDOWN=100 _BEE_SLOWDOWN=10 _C128_Z80_40COL_SLOWDOWN=20 _C128_Z80_80COL_SLOWDOWN=1 _CAMPUTERS_LYNX_SLOWDOWN=0 _COLECO_SLOWDOWN=100 _CPC_MODE0_SLOWDOWN=100 _CPC_CPCRSLIB_MODE1_SLOWDOWN=90 _CPC_MODE2_SLOWDOWN=90 _CPM_Z80_SLOWDOWN=90 _CPM_INTEL8080_SLOWDOWN=80 _E200_SLOWDOWN=900 _G850_SLOWDOWN=900 _G815_SLOWDOWN=400 _GAL_SLOWDOWN=100 _GAL_GFX_SLOWDOWN=70 _GB_SLOWDOWN=200 _GG_SLOWDOWN=300 _GB_WAIT_VSYNC_SLOWDOWN=150 _GL6000SL_SLOWDOWN=300 _HECTORHR_SLOWDOWN=45 _LASER500_SLOWDOWN=200 _M100_SLOWDOWN=100 _M5_SLOWDOWN=140 _MC1000_SLOWDOWN=75 _MSX_SLOWDOWN=200 _MSX_FIXED_COLORS_SLOWDOWN=300 _MTX500_SLOWDOWN=200 _MTX512_SLOWDOWN=200 _MZ_SLOWDOWN=200 _PHC25_SLOWDOWN=330 _PV1000_SLOWDOWN=10 _SAMCOUPE_SLOWDOWN=300 _SC3000_SLOWDOWN=200 _SMC777_SLOWDOWN=150 _SMS_SLOWDOWN=160 _SPECTRUM_SLOWDOWN=160 _TRS80_SLOWDOWN=20 _VG5K_SLOWDOWN=75 _VZ200_SLOWDOWN=250 _X07_SLOWDOWN=5 _ZX81_SLOWDOWN=10 _ZX81_WRX_SLOWDOWN=10 _ZX81_WRX128_SLOWDOWN=15 _ZX81_8X6_WRX128_SLOWDOWN=16 _ZX81_WRX64_SLOWDOWN=25 _ZX81_8X6_WRX64_SLOWDOWN=30 # CMOC _COCO_SLOWDOWN=160 _COCO3_SLOWDOWN=300 _DRAGON_SLOWDOWN=160 _MO5_SLOWDOWN=160 _TO7_SLOWDOWN=160 # LCC1802 _COMX_SLOWDOWN=1 _PECOM_SLOWDOWN=1 _TMC600_SLOWDOWN=1 _MICRO_SLOWDOWN=50 _CIDELSA_SLOWDOWN=30 # CC6303 _MC10_SLOWDOWN=60 # TI99 _TI99_SLOWDOWN=240 # GCC _NCURSES_SLOWDOWN=12 _TERMINAL_SLOWDOWN?=15 # VBCC _BBC_SLOWDOWN=330 # ACK _MSDOS86_SLOWDOWN?=300 ================================================ FILE: src/games/chase/definitions.h ================================================ #ifndef _DEFINITIONS #define _DEFINITIONS // Directions #define RIGHT 0 #define DOWN 1 #define LEFT 2 #define UP 3 #endif // _DEFINITIONS ================================================ FILE: src/games/chase/end_screen.h ================================================ #ifndef _THE_END_HEADER #define _THE_END_HEADER #include "character.h" #if defined(END_SCREEN) || defined(DANCE) void dance(Character *characterPtr); #endif #if defined(END_SCREEN) void gameCompleted(void); #endif #endif ================================================ FILE: src/games/chase/game_settings.h ================================================ /* --------------------------------------------------------------------------------------- */ // // CROSS CHASE by Fabrizio Caruso // // Fabrizio_Caruso@hotmail.com // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from // the use of this software. // Permission is granted to anyone to use this software for non-commercial applications, // subject to the following restrictions: // 1. The origin of this software must not be misrepresented; you must not // claim that you wrote the original software. If you use this software in // a product, an acknowledgment in the product documentation would be // appreciated but is not required. // 2. Altered source versions must be plainly marked as such, and must not // be misrepresented as being the original software. // 3. This notice may not be removed or altered from any source distribution. /* --------------------------------------------------------------------------------------- */ #if !defined(_GAME_SETTINGS) #define _GAME_SETTINGS // #define DEBUG_END // #define DEBUG_ITEMS // #define DEBUG_ITEMS_IN_GAME #include "cross_lib.h" #include "speed_game_settings.h" #define INITIAL_LEVEL 1 // Final level #define FINAL_LEVEL 20 #define LIVES_NUMBER 5 #define MAX_TURN_BASES_LOOP 400 #if !defined(BOMBS_NUMBER) #define BOMBS_NUMBER 4 #endif #if !defined(GHOSTS_NUMBER) #if defined(_XL_TURN_BASED) #if !defined(TINY_GAME) #define GHOSTS_NUMBER 9 #else #define GHOSTS_NUMBER 8 #endif #else #if XSize>=32 && YSize>=20 #define GHOSTS_NUMBER 9 #elif XSize>=16 && YSize>=16 #define GHOSTS_NUMBER 8 #else #define GHOSTS_NUMBER 6 #endif #endif #endif #if !defined(ROCKETS_NUMBER) #define ROCKETS_NUMBER 4 #endif #define GUNS_NUMBER 3 #define EXTRA_LIFE_THROUGH_POINTS 2000 #define HORIZONTAL_MISSILE_BONUS 50 #define VERTICAL_MISSILE_BONUS 20 #define SKULL_POINTS 200; // Points given by extra points bonus: // EXTRA_POINTS + level X EXTRA_POINTS_LEVEL_INCREASE #define EXTRA_POINTS 100 #define EXTRA_POINTS_LEVEL_INCREASE 5 // If a ghost bumps into a bomb #define GHOST_VS_BOMBS_BONUS 25 // Points for shooting a ghost #define GHOST_VS_MISSILE 10 // Extra points for the power up #define POWER_UP_BONUS 20 // Extra points for the power up #define GUN_BONUS 30 // Points gained at the end of each level (to be multipled by level) #define LEVEL_BONUS 100 #if defined(WIDE) #define NON_BOSS_SKULL_HITS 4 #else #define NON_BOSS_SKULL_HITS 3 #endif #define BOSS_SKULL_HITS (NON_BOSS_SKULL_HITS + 4) #if defined(_XL_TURN_BASED) #define INITIAL_GHOST_SLOWDOWN 16000 #else #define INITIAL_GHOST_SLOWDOWN 27000 #endif #define FIRST_HORIZONTAL_WALLS_LEVEL 6 #define FIRST_MOVING_BOMBS_LEVEL 11 #if defined(WIDE) #define RELOCATE_RANGE 7 #define HORIZONTAL_WALLS_INITIAL_LENGTH 4 #define HORIZONTAL_WALLS_INCREASE_LOOP 200 #else #define RELOCATE_RANGE 5 #define HORIZONTAL_WALLS_INITIAL_LENGTH 2 #define HORIZONTAL_WALLS_INCREASE_LOOP 300 #endif #define FIRST_ROCKETS_LEVEL 7 // 8 because of check on levels after missile level // Maximum number of ghost that co-exist with rockets (in non-boss levels) #define MAX_GHOST_COUNT_FOR_ROCKETS 4 #if defined(WIDE) #define HORIZONTAL_MISSILE_OFFSET 3 #else #define HORIZONTAL_MISSILE_OFFSET 2 #endif // ----------------------------------------------------------------------------------- #if GHOSTS_NUMBER>=8 #define SKULL_TRIGGER 4 #else #define SKULL_TRIGGER 3 #endif #if !defined(TURN_BASED_EFFECT_SCALE) #define TURN_BASED_EFFECT_SCALE 5 #endif #if !defined(TURN_BASED_WAIT_SCALE) #define TURN_BASED_WAIT_SCALE 4 #endif #define ACTION_EFFECT_SCALE 1 #define ACTION_WAIT_SCALE 1 #if defined(_XL_TURN_BASED) #define EFFECT_SCALE TURN_BASED_EFFECT_SCALE #define WAIT_SCALE TURN_BASED_WAIT_SCALE #else #define EFFECT_SCALE ACTION_EFFECT_SCALE #define WAIT_SCALE ACTION_WAIT_SCALE #endif #define POWER_UP_COOL_DOWN (150/WAIT_SCALE) #define POWER_UP2_COOL_DOWN (400/WAIT_SCALE) #define FREEZE_COOL_DOWN (700/WAIT_SCALE) #define GUN_COOL_DOWN (200/WAIT_SCALE) #define SUPER_COOL_DOWN (150/WAIT_SCALE) #define CONFUSE_COOL_DOWN (250/WAIT_SCALE) #define SECOND_CONFUSE_COOL_DOWN 20000 #define ZOMBIE_COOL_DOWN (600/WAIT_SCALE) #define SECOND_ZOMBIE_COOL_DOWN 20000 #define CHASE_COOL_DOWN (400/WAIT_SCALE) #define EXTRA_POINTS_COOL_DOWN (2000/WAIT_SCALE) #define SECOND_EXTRA_POINTS_COOL_DOWN 20000 #define INVINCIBILITY_COOL_DOWN (3300/WAIT_SCALE) #define EXTRA_LIFE_COOL_DOWN (1300/WAIT_SCALE) #define FROZEN_COUNT_DOWN (22/EFFECT_SCALE) #define INITIAL_FROZEN_COUNT_DOWN FROZEN_COUNT_DOWN #define CONFUSE_COUNT_DOWN (240/EFFECT_SCALE) #define INVINCIBILITY_COUNT_DOWN (120/EFFECT_SCALE) #define INITIAL_INVINCIBILITY_COUNT_DOWN (INVINCIBILITY_COUNT_DOWN/2) #define ZOMBIE_COUNT_DOWN (255/EFFECT_SCALE) #define ZOMBIE_BONUS 5 #define TURN_BASED_SKULL_LOOP_TRIGGER_SCALE 4 #define ACTION_SKULL_LOOP_TRIGGER_SCALE 1 #if defined(_XL_TURN_BASED) #define SKULL_LOOP_TRIGGER_SCALE TURN_BASED_SKULL_LOOP_TRIGGER_SCALE #else #define SKULL_LOOP_TRIGGER_SCALE ACTION_SKULL_LOOP_TRIGGER_SCALE #endif #define SKULL_LOOP_TRIGGER ((280-(level<<2))/SKULL_LOOP_TRIGGER_SCALE) #define SKULL_COUNT_DOWN 50 #if !defined(TURN_BASED_SKULL_MIN_SLOWDOWN_SCALE) #define TURN_BASED_SKULL_MIN_SLOWDOWN_SCALE 4 #endif #if !defined(TURN_BASED_GHOST_MIN_SLOWDOWN_SCALE) #define TURN_BASED_GHOST_MIN_SLOWDOWN_SCALE 3 #endif #define ACTION_SKULL_MIN_SLOWDOWN_SCALE 1 #define ACTION_GHOST_MIN_SLOWDOWN_SCALE 1 #if defined(_XL_TURN_BASED) #define SKULL_MIN_SLOWDOWN_SCALE TURN_BASED_SKULL_MIN_SLOWDOWN_SCALE #define GHOST_MIN_SLOWDOWN_SCALE TURN_BASED_GHOST_MIN_SLOWDOWN_SCALE #else #define SKULL_MIN_SLOWDOWN_SCALE ACTION_SKULL_MIN_SLOWDOWN_SCALE #define GHOST_MIN_SLOWDOWN_SCALE ACTION_GHOST_MIN_SLOWDOWN_SCALE #endif #if !defined(SKULL_MIN_SLOWDOWN) #define SKULL_MIN_SLOWDOWN (3200/SKULL_MIN_SLOWDOWN_SCALE) #endif #if !defined(GHOST_MIN_SLOWDOWN) #define GHOST_MIN_SLOWDOWN (1600/GHOST_MIN_SLOWDOWN_SCALE) #endif #if defined(_XL_TURN_BASED) #define MAX_GHOST_LEVEL_SCALE 3 #define MAX_SKULL_LOOP_SCALE 3 #define MAX_GHOST_LOOP_SCALE 3 #else #define MAX_GHOST_LEVEL_SCALE 1 #define MAX_SKULL_LOOP_SCALE 1 #define MAX_GHOST_LOOP_SCALE 1 #endif #define MAX_GHOST_LEVEL (600/MAX_GHOST_LEVEL_SCALE) #define MAX_SKULL_LOOP (1600/MAX_SKULL_LOOP_SCALE) #define MAX_GHOST_LOOP (1800/MAX_GHOST_LOOP_SCALE) #define TURN_BASED_MAX_LOOP MAX_SKULL_LOOP #define GHOST_LEVEL_DECREASE (MAX_GHOST_LEVEL/20) #define MISSILES_FOR_ZOMBIE 5 #define SKULLS_FOR_SUPER 2 #endif // _GAME_SETTINGS ================================================ FILE: src/games/chase/game_text.h ================================================ /* --------------------------------------------------------------------------------------- */ // // CROSS CHASE by Fabrizio Caruso // // Fabrizio_Caruso@hotmail.com // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from // the use of this software. // Permission is granted to anyone to use this software for non-commercial applications, // subject to the following restrictions: // 1. The origin of this software must not be misrepresented; you must not // claim that you wrote the original software. If you use this software in // a product, an acknowledgment in the product documentation would be // appreciated but is not required. // 2. Altered source versions must be plainly marked as such, and must not // be misrepresented as being the original software. // 3. This notice may not be removed or altered from any source distribution. /* --------------------------------------------------------------------------------------- */ #ifndef _GAME_TEXT #define _GAME_TEXT #include "settings.h" #include "cross_lib.h" void PRINT_CENTERED_ON_ROW(uint8_t row, const char *Text); #define PRINT_CENTERED(Text) \ PRINT_CENTERED_ON_ROW((YSize>>1), Text) // game_stat void displayScore(void); #if !defined(TINY_GAME) void displayStatsTitles(void); void printGunsStats(void); #endif #if !defined(NO_STATS) void printLevelStats(void); void printGhostCountStats(void); void printLivesStats(void); #else #define printLevelStats() #define printGhostCountStats() #define printLivesStats() #endif // game_text #if !defined(LESS_TEXT) void printLevel(void); void printVictoryMessage(void); #endif #if !defined(NO_PRINT) void printGameOver(void); #else #define printGameOver() #endif void printDefeatMessage(void); void printStartMessage(void); #if !defined(NO_PRINT) void gameCompleted(void); #else #define gameCompleted() #endif #if !defined(NO_PRINT) && !defined(TINY_GAME) void printPressKeyToStart(void); #else #define printPressKeyToStart() #endif #if !defined(TINY_GAME) void _printScoreOnRow(uint8_t row, uint16_t score); void _printScore(uint16_t score); void printKillTheSkull(void); #else #define _printScoreOnRow(row, score) #define _printScore(s) #define printKillTheSkull() #endif #if !defined(TINY_GAME) #define _printTopScore() _printScoreOnRow(0,highScore) #endif #if defined(TINY_GAME) #if !defined(NO_PRINT) #define highScoreScreen() _XL_PRINTD((XSize-6)/2, 0, 5, highScore) #else #define highScoreScreen() #endif #elif defined(LESS_TEXT) #define highScoreScreen() #else #define highScoreScreen() _printScore(highScore); #endif #if defined(FULL_GAME) && XSize>=14 void printHints(void); #endif #endif // _GAME_TEXT ================================================ FILE: src/games/chase/ghost.h ================================================ /* --------------------------------------------------------------------------------------- */ // // CROSS CHASE by Fabrizio Caruso // // Fabrizio_Caruso@hotmail.com // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from // the use of this software. // Permission is granted to anyone to use this software for non-commercial applications, // subject to the following restrictions: // 1. The origin of this software must not be misrepresented; you must not // claim that you wrote the original software. If you use this software in // a product, an acknowledgment in the product documentation would be // appreciated but is not required. // 2. Altered source versions must be plainly marked as such, and must not // be misrepresented as being the original software. // 3. This notice may not be removed or altered from any source distribution. /* --------------------------------------------------------------------------------------- */ #ifndef _GHOST_H #define _GHOST_H #include "character.h" uint16_t computeGhostSlowDown(void); #if !defined(TINY_GAME) void decreaseGhostLevel(void); #endif #if !defined(TINY_GAME) void displayBombs(void); #else #define displayBombs() \ do \ { \ uint8_t i; \ \ for(i=0;i>3) void _handle_from_the_left(void); void _handle_from_the_right(void); void handle_missiles(void); #endif // _HORIZONTAL_MISSILE_H ================================================ FILE: src/games/chase/images.h ================================================ #ifndef _IMAGES_H #define _IMAGES_H #include "cross_lib.h" #include "settings.h" #if !defined(ANIMATE_PLAYER) Image PLAYER_IMAGE; #else #if defined(USE_MEMORY_BUFFERS) || defined(USE_TINY_MEMORY_BUFFERS) || defined(USE_LIGHT_MEMORY_BUFFERS) extern Image PLAYER_DOWN_IMAGE; extern Image PLAYER_UP_IMAGE; extern Image PLAYER_RIGHT_IMAGE; extern Image PLAYER_LEFT_IMAGE; #else Image PLAYER_DOWN_IMAGE; Image PLAYER_UP_IMAGE; Image PLAYER_RIGHT_IMAGE; Image PLAYER_LEFT_IMAGE; #endif #endif #if defined(USE_MEMORY_BUFFERS) || defined(USE_TINY_MEMORY_BUFFERS) || defined(USE_LIGHT_MEMORY_BUFFERS) extern Image GHOST_IMAGE; extern Image BOMB_IMAGE; #else Image GHOST_IMAGE; Image BOMB_IMAGE; #endif #if !defined(NO_DEAD_GHOSTS) Image DEAD_GHOST_IMAGE; #endif #if !defined(TINY_GAME) #if defined(USE_MEMORY_BUFFERS) || defined(USE_LIGHT_MEMORY_BUFFERS) extern Image POWERUP_IMAGE; extern Image BULLET_IMAGE; extern Image GUN_IMAGE; extern Image SKULL_IMAGE; extern Image EXTRA_POINTS_IMAGE; extern Image HORIZONTAL_BRICK_IMAGE; extern Image VERTICAL_BRICK_IMAGE; #else Image POWERUP_IMAGE; Image BULLET_IMAGE; Image GUN_IMAGE; Image SKULL_IMAGE; Image EXTRA_POINTS_IMAGE; Image HORIZONTAL_BRICK_IMAGE; Image VERTICAL_BRICK_IMAGE; #endif #endif #if defined(FULL_GAME) #if defined(USE_MEMORY_BUFFERS) extern Image LEFT_HORIZONTAL_MISSILE_IMAGE; extern Image RIGHT_HORIZONTAL_MISSILE_IMAGE; extern Image ROCKET_IMAGE; extern Image FREEZE_IMAGE; extern Image EXTRA_LIFE_IMAGE; extern Image INVINCIBILITY_IMAGE; extern Image CHASE_IMAGE; extern Image SUPER_IMAGE; extern Image CONFUSE_IMAGE; extern Image ZOMBIE_IMAGE; extern Image BROKEN_BRICK_IMAGE; #else Image LEFT_HORIZONTAL_MISSILE_IMAGE; Image RIGHT_HORIZONTAL_MISSILE_IMAGE; Image ROCKET_IMAGE; Image FREEZE_IMAGE; Image EXTRA_LIFE_IMAGE; Image INVINCIBILITY_IMAGE; Image CHASE_IMAGE; Image SUPER_IMAGE; Image CONFUSE_IMAGE; Image ZOMBIE_IMAGE; Image BROKEN_BRICK_IMAGE; #endif #endif #endif // _IMAGES_H ================================================ FILE: src/games/chase/init_images.h ================================================ #ifndef _INIT_IMAGES_H #define _INIT_IMAGES_H #define _PLAYER_DOWN_TILE _TILE_0 #define _PLAYER_UP_TILE _TILE_1 #define _PLAYER_RIGHT_TILE _TILE_2 #define _PLAYER_LEFT_TILE _TILE_3 #define _GHOST_TILE _TILE_4 #define _BOMB_TILE _TILE_5 #define _DEAD_GHOST_TILE _TILE_6 #define _SKULL_TILE _TILE_7 #define _POWERUP_TILE _TILE_8 #define _GUN_TILE _TILE_9 #define _INVINCIBILITY_TILE _TILE_10 #define _BULLET_TILE _TILE_11 #if _XL_NUMBER_OF_TILES<=6 #define _VERTICAL_BRICK_TILE _BOMB_TILE #define _HORIZONTAL_BRICK_TILE _BOMB_TILE #else #define _VERTICAL_BRICK_TILE _TILE_12 #define _HORIZONTAL_BRICK_TILE _TILE_13 #endif #define _LEFT_MISSILE_TILE _TILE_14 #define _RIGHT_MISSILE_TILE _TILE_15 #define _ROCKET_TILE _TILE_16 #define _FREEZE_TILE _TILE_17 #define _SUPER_TILE _TILE_18 #define _EXTRA_POINTS_TILE _TILE_25 #define _PLAYER_COLOR _XL_CYAN #define _GHOST_COLOR _XL_WHITE #define _DEAD_GHOST_COLOR _XL_RED #define _SKULL_COLOR _XL_YELLOW #define _BOMB_COLOR _XL_RED #define _MISSILE_COLOR _XL_WHITE #define _ROCKET_COLOR _XL_WHITE #define _POWERUP_COLOR _XL_GREEN #define _FREEZE_COLOR _XL_CYAN #define _SUPER_COLOR _XL_RED #define _GUN_COLOR _XL_CYAN #define _BULLET_COLOR _XL_WHITE #define _BRICK_COLOR _XL_YELLOW #define _EXTRA_POINTS_COLOR _XL_YELLOW #define _EXTRA_LIFE_COLOR _XL_WHITE #define _INVINCIBILITY_COLOR _XL_YELLOW #define _CONFUSE_COLOR _XL_RED #define _ZOMBIE_COLOR _XL_YELLOW void INIT_IMAGES(void); #endif // _INIT_IMAGES_H ================================================ FILE: src/games/chase/item.h ================================================ #if !defined(_ITEM_HEADER) #define _ITEM_HEADER #include "character.h" #if !defined(TINY_GAME) struct ItemStruct { Character _character; void (*_effect)(void); uint16_t _coolDown; #if !defined(NO_BLINKING) uint8_t _blink; #endif }; typedef struct ItemStruct Item; void handle_count_down(uint8_t * activeItemFlagPtr, uint8_t * countDownPtr); void reducePowerUpsCoolDowns(void); void itemReached(Character * itemPtr); void relocateItem(Character * itemPtr); void _commonPowerUpEffect(void); void powerUpEffect(void); void powerUp2Effect(void); #define handle_freeze_count_down() handle_count_down(&freezeActive,&freeze_count_down) void _gunEffect(void); void gunEffect(void); void extraPointsEffect(void); void handle_item(register Item *itemPtr); #endif // !defined(TINY_GAME) #if defined(FULL_GAME) void _freezeEffect(void); void freezeEffect(void); void extraLifeEffect(void); void _invincibilityEffect(void); void invincibilityEffect(void); void superEffect(void); void confuseEffect(void); void zombieEffect(void); void chaseEffect(void); #endif // defined(FULL_GAME) #if defined(FULL_GAME) #define handle_invincibility_count_down() handle_count_down(&invincibilityActive, &invincibility_count_down) #define handle_confuse_count_down() handle_count_down(&confuseActive, &confuse_count_down) #define handle_zombie_count_down() handle_count_down(&zombieActive,&zombie_count_down) #endif #define handle_gun_item() handle_item(&gun); #define handle_powerup_item() handle_item(&powerUp); #define handle_powerup2_item() handle_item(&powerUp2); #define handle_extraPoints_item() handle_item(&extraPoints); #define handle_freeze_count_down() handle_count_down(&freezeActive,&freeze_count_down) #if defined(FULL_GAME) #define handle_invincibility_count_down() handle_count_down(&invincibilityActive, &invincibility_count_down) #define handle_confuse_count_down() handle_count_down(&confuseActive, &confuse_count_down) #define handle_zombie_count_down() handle_count_down(&zombieActive,&zombie_count_down) #define handle_freeze_item() handle_item(&freeze); #define handle_invincibility_item() handle_item(&invincibility) #define handle_chase_item() handle_item(&chase); #define handle_super_item() handle_item(&super) #define handle_extraLife_item() handle_item(&extraLife) #define handle_confuse_item() handle_item(&confuse); #define handle_zombie_item() handle_item(&zombie); #endif #define handle_gun_item() handle_item(&gun); #define handle_powerup_item() handle_item(&powerUp); #define handle_powerup2_item() handle_item(&powerUp2); #define handle_extraPoints_item() handle_item(&extraPoints); #endif // _item.h ================================================ FILE: src/games/chase/level.h ================================================ /* --------------------------------------------------------------------------------------- */ // // CROSS CHASE by Fabrizio Caruso // // Fabrizio_Caruso@hotmail.com // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from // the use of this software. // Permission is granted to anyone to use this software for non-commercial applications, // subject to the following restrictions: // 1. The origin of this software must not be misrepresented; you must not // claim that you wrote the original software. If you use this software in // a product, an acknowledgment in the product documentation would be // appreciated but is not required. // 2. Altered source versions must be plainly marked as such, and must not // be misrepresented as being the original software. // 3. This notice may not be removed or altered from any source distribution. /* --------------------------------------------------------------------------------------- */ #ifndef _LEVEL #define _LEVEL #include "character.h" #include "cross_lib.h" #include "init_images.h" // DRAW HORIZONTAL AND VERTICAL LINES #if !defined(NO_WALL) && !defined(TINY_GAME) void DRAW_HORIZONTAL_LINE(uint8_t x, uint8_t y, uint8_t length); void DRAW_VERTICAL_LINE(uint8_t x, uint8_t y, uint8_t length); #else #define DRAW_HORIZONTAL_LINE(x,y,length) #define DRAW_VERTICAL_LINE(x,y,length) #endif // VERTICAL AND HORIZONTAL BORDER #if !defined(TINY_GAME) #define DRAW_VERTICAL_BORDER(x) DRAW_VERTICAL_LINE(x,0,YSize-1) #if !defined(FULL_LOWER_BORDER) #define DRAW_HORIZONTAL_BORDER(y) DRAW_HORIZONTAL_LINE(0,y,XSize-1) #else #define DRAW_HORIZONTAL_BORDER(y) DRAW_HORIZONTAL_LINE(0,y,XSize) #endif #else #define DRAW_VERTICAL_BORDER(x) #define DRAW_HORIZONTAL_BORDER(y) #endif #define WALL_COLOR _XL_YELLOW #define DRAW_HORIZONTAL_WALLS(length) \ _XL_SET_TEXT_COLOR(WALL_COLOR); \ DRAW_HORIZONTAL_LINE(1,YSize/2,length); \ DRAW_HORIZONTAL_LINE(XSize-1-length,YSize/2,length); #if defined(NO_DEAD_GHOSTS) #define PLACE_DEAD_GHOST() \ initializeCharacter(&ghosts[count],(uint8_t) (count),(uint8_t) 1,0,&GHOST_IMAGE); #else #define PLACE_DEAD_GHOST() \ initializeCharacter(&ghosts[count],(uint8_t) (GHOSTS_NUMBER-count),(uint8_t) 1,0,&DEAD_GHOST_IMAGE); #endif // Check XSize to avoid overflow #if XSize>48 #define ROUND_X_POS (uint8_t) ((2*j+1)*(uint8_t)(XSize/6)) #else #if defined(OPTIMIZE_ROUND_ENEMIES) #define ROUND_X_POS (uint8_t) (6*j) #else #define ROUND_X_POS (uint8_t) ((2*j+1)*XSize/6) #endif #endif // Check YSize to avoid overflow #if YSize>48 #define ROUND_Y_POS (uint8_t) ((2*i+1)*(uint8_t)(YSize/6)) #else #if defined(OPTIMIZE_ROUND_ENEMIES) #define ROUND_Y_POS (uint8_t) (6*i) #else #define ROUND_Y_POS (uint8_t) ((2*i+1)*YSize/6) #endif #endif #define PLACE_ROUND_GHOST() \ initializeCharacter(&ghosts[count], \ ROUND_X_POS, \ ROUND_Y_POS, \ 1 ,&GHOST_IMAGE); #define PLACE_FLAT_GHOST() \ initializeCharacter(&ghosts[count],(uint8_t) (j*(XSize/5)),(i*(YSize/5)),1,&GHOST_IMAGE); #define PLACE_FLAT_GHOST_6() \ initializeCharacter(&ghosts[count],(uint8_t) (j*(XSize>>2)),(i*(YSize/5)),1,&GHOST_IMAGE); #define PLACE_NINTH_GHOST() \ initializeCharacter(&ghosts[4],(uint8_t) (XSize-4),(uint8_t) (YSize-4),1,&GHOST_IMAGE); #define ROUND_NINE_GHOSTS() \ for(i=0;i<=2;++i) \ { \ for(j=0;j<=2;++j) \ { \ if(ghostCount>count) \ { \ if(count!=4) \ { \ PLACE_ROUND_GHOST(); \ } \ else \ { \ PLACE_NINTH_GHOST(); \ } \ } \ else \ { \ PLACE_DEAD_GHOST(); \ } \ ++count; \ } \ } #if defined(OPTIMIZE_ROUND_ENEMIES) #define OPT_OFFSET 1 #else #define OPT_OFFSET 0 #endif #define ROUND_EIGHT_GHOSTS() \ for(i=0+OPT_OFFSET;i<=2+OPT_OFFSET;++i) \ { \ for(j=0+OPT_OFFSET;j<=2+OPT_OFFSET;++j) \ { \ if(i!=1+OPT_OFFSET || j !=1+OPT_OFFSET) \ { \ if(ghostCount>count) \ { \ PLACE_ROUND_GHOST(); \ } \ else \ { \ PLACE_DEAD_GHOST(); \ } \ ++count; \ } \ } \ } #define ROUND_SEVEN_GHOSTS() \ for(i=0+OPT_OFFSET;i<=2+OPT_OFFSET;++i) \ { \ for(j=0+OPT_OFFSET;j<=2+OPT_OFFSET;++j) \ { \ if(i!=1+OPT_OFFSET || j !=1+OPT_OFFSET) \ { \ if(count<7) \ { \ if(ghostCount>count) \ { \ PLACE_ROUND_GHOST(); \ } \ else \ { \ PLACE_DEAD_GHOST(); \ } \ ++count; \ } \ } \ } \ } #define FLAT_EIGHT_GHOSTS() \ for(j=1;j<=4;++j) \ { \ for(i=1;i<=4;i+=3) \ { \ if(ghostCount>count) \ { \ PLACE_FLAT_GHOST(); \ } \ else \ { \ PLACE_DEAD_GHOST(); \ } \ ++count; \ } \ } #define FLAT_SIX_GHOSTS() \ for(j=1;j<=3;++j) \ { \ for(i=1;i<=4;i+=3) \ { \ if(ghostCount>count) \ { \ PLACE_FLAT_GHOST_6(); \ } \ else \ { \ PLACE_DEAD_GHOST(); \ } \ ++count; \ } \ } #if defined(NO_RANDOM_LEVEL) #define PLACE_BOMB_4() \ initializeCharacter(&bombs[count],(uint8_t) ((XSize/3)*i), (uint8_t) ((YSize/3)*j),0,&BOMB_IMAGE) #elif defined(TINY_GAME) || defined(SIMPLE_RANDOM_LEVEL) #define PLACE_BOMB_4() \ initializeCharacter(&bombs[count],(uint8_t) (((XSize/3)*i)+(uint8_t)(_XL_RAND()&1)), \ (uint8_t) ((YSize/3)*j),0,&BOMB_IMAGE); #else #define PLACE_BOMB_4() \ initializeCharacter(&bombs[count],(uint8_t) (((XSize/3)*i)-(uint8_t)(_XL_RAND()&1)), \ (uint8_t) (((YSize/3)*j)+(uint8_t)(_XL_RAND()&1)),0,&BOMB_IMAGE); #endif #define FOUR_BOMBS() \ do \ { \ count = 0; \ for(i=1;i<=2;++i) \ { \ for(j=1;j<=2;++j) \ { \ PLACE_BOMB_4(); \ ++count; \ } \ } \ } \ while(0) #if defined(NO_RANDOM_LEVEL) #define THREE_BOMBS() \ do \ { \ initializeCharacter(&bombs[0],(XSize>>1), ((YSize/3)<<1),0,&BOMB_IMAGE); \ initializeCharacter(&bombs[1],XSize/3, (YSize/3),0,&BOMB_IMAGE); \ initializeCharacter(&bombs[2],((XSize/3)<<1), (YSize/3),0,&BOMB_IMAGE); \ } \ while(0) #else #define THREE_BOMBS() \ do \ { \ uint8_t rnd = _XL_RAND()&1; \ initializeCharacter(&bombs[0],XSize/3+rnd, (YSize/3)+rnd,0,&BOMB_IMAGE); \ initializeCharacter(&bombs[1],(XSize>>1)+rnd, ((YSize/3)*2)+rnd,0,&BOMB_IMAGE); \ initializeCharacter(&bombs[2],2*(XSize/3)+rnd, (YSize/3)-rnd,0,&BOMB_IMAGE); \ } \ while(0) #endif #if defined(NO_RANDOM_LEVEL) #define TWO_BOMBS() \ do \ { \ initializeCharacter(&bombs[0],(XSize>>1), ((YSize/3)),0,&BOMB_IMAGE); \ initializeCharacter(&bombs[1],(XSize>>1), ((YSize/3)<<1),0,&BOMB_IMAGE); \ } \ while(0) #else #define TWO_BOMBS() \ do \ { \ initializeCharacter(&bombs[0],(XSize>>1), ((YSize/3))+_XL_RAND()%3,0,&BOMB_IMAGE); \ initializeCharacter(&bombs[1],(XSize>>1)-1+_XL_RAND()%3, ((YSize/3)*2)-1+_XL_RAND()%3,0,&BOMB_IMAGE); \ } \ while(0) #endif #if defined(NO_RANDOM_LEVEL) #define ONE_BOMB() \ initializeCharacter(&bombs[0],(XSize>>1), (YSize>>1),0,&BOMB_IMAGE); #else #define ONE_BOMB() \ initializeCharacter(&bombs[0],(XSize>>1)+_XL_RAND()&1, (YSize>>1)+_XL_RAND()&1,0,&BOMB_IMAGE); #endif #if defined(BETWEEN_LEVEL) void spiral(register Character *characterPtr); #endif void fillLevelWithCharacters(void); #if defined(FULL_GAME) void updateInnerWallVerticalData(void); uint8_t oneMissileLevel(void); uint8_t rocketLevel(void); uint8_t missileLevel(void); uint8_t bossLevel(void); uint8_t horizWallsLevel(void); void initializeAwayFromWall(Character * characterPtr, uint8_t x, uint8_t y, uint8_t status, Image *imagePtr); #endif #endif // _LEVEL ================================================ FILE: src/games/chase/makefiles/Makefile.override ================================================ creativision: $(ASSETS_PATH)/8x8_chars.h $(CC65_PATH)$(MYCC65) $(INCLUDE_OPTS) -O -t creativision \ -D__NO_COLOR_INIT -D__CREATIVISION__ \ -D__ALT_SLEEP \ -D__VDP_MODE1_GRAPHICS -DGHOSTS_NUMBER=8 -DLESS_TEXT \ -D_XL_SLOW_DOWN_FACTOR=2000 -DUSE_TINY_MEMORY_BUFFERS \ --config $(CFG_PATH)/cc65/creativision-16k.cfg \ $(CROSS_LIB_PATH)/sound/cc65/creativision/creativision_sounds.c \ $(SOURCE_PATH)/memory/creativision_memory.s \ $(FULL_FILES) \ $(CROSS_LIB_PATH)/display/init_graphics/cc65/creativision/creativision_color_init_graphics.c \ -o $(BUILD_PATH)/X$(GAME_NAME)_creativision_16k.bin dd if=$(BUILD_PATH)/X$(GAME_NAME)_creativision_16k.bin bs=8k skip=1 > $(BUILD_PATH)/X$(GAME_NAME)_creativision_16k_SWAPPED.bin dd if=$(BUILD_PATH)/X$(GAME_NAME)_creativision_16k.bin bs=8k count=1 >> $(BUILD_PATH)/X$(GAME_NAME)_creativision_16k_SWAPPED.bin rm $(BUILD_PATH)/X$(GAME_NAME)_creativision_16k.bin gamate: $(ASSETS_PATH)/cc65_gamate_tiles.s $(TOOLS_PATH)/cc65/gamate/gamate-fixcart$(COMPILEDEXT) $(CC65_PATH)$(MYCC65) $(INCLUDE_OPTS) -Or -Cl -t gamate --config $(CFG_PATH)/cc65/gamate_reduced_stack.cfg \ -D_XL_SLOW_DOWN_FACTOR=6000 \ -D_XL_NO_SLEEP -D__NO_WAIT \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS \ $(GAMATE_GAME_OPTS) -D__NO_COLOR_INIT -D_XL_NO_COLOR \ $(FULL_FILES) \ $(ASSETS_PATH)/cc65_gamate_tiles.s \ $(CROSS_LIB_PATH)/sound/cc65/gamate/gamate_sounds.c \ -o $(BUILD_PATH)/X$(GAME_NAME)_gamate.bin $(TOOLS_PATH)/cc65/gamate/gamate-fixcart$(COMPILEDEXT) $(BUILD_PATH)/X$(GAME_NAME)_gamate.bin vic20_exp_3k: $(ASSETS_PATH)/cc65_udc_vic20_64_chars.s $(CC65_PATH)$(MYCC65) $(INCLUDE_OPTS) -Or -Cl -t vic20 \ --config $(CFG_PATH)/cc65/vic20-3k_GFX.cfg \ -DGHOSTS_NUMBER=8 \ -DNO_END_SCREEN \ -DLIGHT_GAME \ -D__VIC20_EXP_3K \ -D__MEMORY_MAPPED_GRAPHICS \ -DUSE_LIGHT_MEMORY_BUFFERS \ -DNO_HINTS \ -DLESS_TEXT \ -D_XL_NO_TEXT_COLOR \ -DNO_BLINKING \ -D__NO_SLEEP_SEC -DNO_STATS \ -D__ALT_PRINT \ -D__ALT_HIGHSCORE \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_VIC20_SLOWDOWN) \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c \ $(CROSS_LIB_PATH)/display/init_graphics/cc65/vic20/vic20_init_graphics.c \ $(CROSS_LIB_PATH)/sound/cc65/vic20/vic20_sounds.c \ $(LIGHT_FILES) \ $(ASSETS_PATH)/cc65_udc_vic20_64_chars.s \ $(SOURCE_PATH)/memory/vic20_memory.s \ -o $(BUILD_PATH)/X$(GAME_NAME)_LIGHT_$@.prg vic20_exp_8k: $(ASSETS_PATH)/cc65_udc_vic20_27_tiles.s $(CC65_PATH)$(MYCC65) $(INCLUDE_OPTS) -Or -Cl -t vic20 \ --config $(CFG_PATH)/cc65/vic20-8k_memory_mapped_GFX.cfg -DEXTRA_TITLE \ -D_XL_SLOW_DOWN_FACTOR=2800 \ -D__MEMORY_MAPPED_GRAPHICS -D__VIC20__ -D__VIC20_EXP_8K \ \ -DSIMPLE_STRATEGY \ \ -D__ALT_PRINT \ -DNO_HINTS \ -DLESS_TEXT \ -D__DEFAULT_CLEAR_SCREEN \ -D__ALT_SLEEP \ -DUSE_MEMORY_BUFFERS \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_VIC20_SLOWDOWN) \ $(ASSETS_PATH)/cc65_udc_vic20_27_tiles.s \ $(CROSS_LIB_PATH)/display/init_graphics/cc65/vic20/vic20_init_graphics.c \ $(SOURCE_PATH)/split_files/level.c $(SOURCE_PATH)/split_files/character.c \ $(SOURCE_PATH)/split_files/game_text.c \ $(SOURCE_PATH)/split_files/ghost.c $(CROSS_LIB_PATH)/input/input_macros.c \ $(SOURCE_PATH)/split_files/strategy.c $(SOURCE_PATH)/split_files/bullet.c \ $(SOURCE_PATH)/split_files/move_player.c \ $(SOURCE_PATH)/split_files/item.c \ $(SOURCE_PATH)/split_files/skull.c \ $(SOURCE_PATH)/split_files/rocket.c \ $(CROSS_LIB_PATH)/display/display_macros.c \ $(SOURCE_PATH)/split_files/horizontal_missile.c \ --code-name CODE2 \ $(CROSS_LIB_PATH)/sleep/sleep_macros.c \ $(SOURCE_PATH)/split_files/init_images.c \ $(CROSS_LIB_PATH)/sound/cc65/vic20/vic20_sounds.c \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c \ $(SOURCE_PATH)/split_files/main.c \ $(SOURCE_PATH)/memory/vic20_memory.s \ $(SOURCE_PATH)/split_files/end_screen.c \ -o $(BUILD_PATH)/X$(GAME_NAME)_$@.prg # vic20_unexpanded: $(ASSETS_PATH)/cc65_udc_6chars.s # $(CC65_PATH)$(MYCC65) $(INCLUDE_OPTS) -Or -Cl -t vic20 \ # -D_XL_NO_TEXT_COLOR \ # -D__VIC20_UNEXPANDED \ # -D_XL_NO_SLEEP \ # -D__NO_COLOR_INIT \ # -DTINY_GAME -DNO_WALL \ # -D__MEMORY_MAPPED_GRAPHICS \ # -D__ALT_HIGHSCORE \ # -D__ALT_DISPLAY_STATS \ # -D__DEFAULT_CLEAR_SCREEN \ # -DUSE_TINY_MEMORY_BUFFERS \ # $(VIC20_UNEXPANDED_GAME_OPTS) \ # --config $(CFG_PATH)/cc65/vic20_unexpanded_gfx.cfg \ # $(TINY_FILES) \ # $(CROSS_LIB_PATH)/sound/cc65/vic20/vic20_explosion_sound.c \ # $(SOURCE_PATH)/memory/vic20_memory.s \ # $(CROSS_LIB_PATH)/display/init_graphics/cc65/vic20/vic20_init_graphics.c \ # $(CROSS_LIB_PATH)/display/alt_print/simple_alt_stats.c \ # $(ASSETS_PATH)/cc65_udc_6chars.s \ # -o $(BUILD_PATH)/X$(GAME_NAME)_TINY_$@.prg # $(CROSS_LIB_PATH)/sound/cc65/vic20/vic20_explosion_sound.c vic20_unexpanded: $(ASSETS_PATH)/cc65_udc_6chars.s $(CC65_PATH)$(MYCC65) $(INCLUDE_OPTS) -Or -Cl -t vic20 -m mapfile.txt \ -D_XL_NO_TEXT_COLOR -D_XL_NUMBER_OF_TILES=6 \ -D__VIC20_UNEXPANDED \ -D_ALT_SLEEP -D__NO_SLEEP_SEC \ -D__NO_COLOR_INIT -DNO_RANDOM_LEVEL \ -DTINY_GAME -DNO_WALL \ -D__MEMORY_MAPPED_GRAPHICS \ -D__ALT_DISPLAY_STATS \ -D__DEFAULT_CLEAR_SCREEN \ -DUSE_TINY_MEMORY_BUFFERS \ $(VIC20_UNEXPANDED_GAME_OPTS) \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_VIC20_SLOWDOWN) \ --config $(CFG_PATH)/cc65/vic20_unexpanded_gfx_low_stack.cfg \ $(TINY_FILES) \ $(CROSS_LIB_PATH)/sound/cc65/vic20/vic20_explosion_sound.c \ $(SOURCE_PATH)/memory/vic20_memory.s \ $(CROSS_LIB_PATH)/display/init_graphics/cc65/vic20/vic20_init_graphics.c \ $(CROSS_LIB_PATH)/display/alt_print/simple_alt_stats.c \ $(ASSETS_PATH)/cc65_udc_6chars.s \ -o $(BUILD_PATH)/X$(GAME_NAME)_TINY_$@.prg # vic20_test: $(ASSETS_PATH)/cc65_udc_6chars.s # $(CC65_PATH)$(MYCC65) $(INCLUDE_OPTS) -Or -Cl -t vic20 -m mapfile.txt \ # -D_XL_NO_TEXT_COLOR -D_XL_NUMBER_OF_TILES=6 \ # -D__VIC20_UNEXPANDED \ # -D_ALT_SLEEP -D__NO_SLEEP_SEC \ # -D__NO_COLOR_INIT -DNO_RANDOM_LEVEL \ # -DTINY_GAME -DNO_WALL -DGHOSTS_NUMBER=6 \ # -D__MEMORY_MAPPED_GRAPHICS \ # -D__ALT_DISPLAY_STATS \ # -D__DEFAULT_CLEAR_SCREEN \ # -DUSE_TINY_MEMORY_BUFFERS \ # $(VIC20_UNEXPANDED_GAME_OPTS) \ # -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_VIC20_SLOWDOWN) \ # --config $(CFG_PATH)/cc65/vic20_unexpanded_gfx.cfg \ # $(TINY_FILES) \ # $(CROSS_LIB_PATH)/sound/cc65/vic20/vic20_explosion_sound.c \ # $(SOURCE_PATH)/memory/vic20_memory.s \ # $(CROSS_LIB_PATH)/display/init_graphics/cc65/vic20/vic20_init_graphics.c \ # $(CROSS_LIB_PATH)/display/alt_print/simple_alt_stats.c \ # $(ASSETS_PATH)/cc65_udc_6chars.s \ # -o $(BUILD_PATH)/X$(GAME_NAME)_TINY_$@.prg vic20_targets: vic20_unexpanded vic20_exp_3k vic20_exp_8k vic20_exp_16k c16_16k: $(ASSETS_PATH)/cc65_udc_arcade_64_chars.s $(CC65_PATH)$(MYCC65) $(INCLUDE_OPTS) -Or -Cl -t c16 \ --config $(CFG_PATH)/cc65/c16-16k_GFX_64chars.cfg \ \ -D_XL_SLOW_DOWN_FACTOR=2000 \ \ -DGHOSTS_NUMBER=8 \ -DLESS_TEXT \ \ -DNO_HINTS \ -D__ALT_PRINT \ \ -D__MEMORY_MAPPED_GRAPHICS \ -D__DEFAULT_CLEAR_SCREEN \ -D__ALT_SLEEP \ -DDANCE \ -DUSE_MEMORY_BUFFERS \ $(SOURCE_PATH)/memory/c16_memory.s \ $(CROSS_LIB_PATH)/display/init_graphics/cc65/c264/c16_linked_redefined_chars_init_graphics.c \ $(CROSS_LIB_PATH)/sound/cc65/c264/c264_sounds.c \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c \ $(FULL_FILES) \ $(ASSETS_PATH)/cc65_udc_arcade_64_chars.s \ -o $(BUILD_PATH)/X$(GAME_NAME)_$@.prg ############################################################################################################# ================================================ FILE: src/games/chase/makefiles.chase/Makefile.ack_targets ================================================ # ------------------------------------------------------------------------------------------ # ACK # ack_targets: \ pc8086_targets \ linux386_targets \ linux68k_targets \ linuxppc_targets \ linuxmips_targets ############################################################################################ pc8086_tiny_buffered: $(_ACK) $(_ACK_OPTS) $(INCLUDE_OPTS) -mpc86 \ -DXSize=20 \ -DYSize=20 \ -D__ADM3A \ -D_XL_NO_COLOR \ -DACK \ -D__PC8086__ \ -DTINY_GAME \ -DTURN_BASED \ -D__BUFFERED_GRAPHICS \ -D__NO_INIT_GRAPHICS \ -DNO_PRINT \ -D__NO_WAIT \ -D_XL_NO_SLEEP \ -D__DEFAULT_CLEAR_SCREEN \ $(TINY_FILES) mv pc86.img $(BUILD_PATH)/TINY_pc8086_turn_based.img cpm_8080_buffered_ack: $(_ACK) $(_ACK_OPTS) $(INCLUDE_OPTS) -mcpm \ -DXSize=39 \ -DYSize=23 \ -D__ADM3A \ -D_XL_NO_COLOR \ -DACK \ -D__CPM8080__ \ \ -DTURN_BASED \ -D__BUFFERED_GRAPHICS \ -D__STDIO \ -D__NO_INIT_GRAPHICS \ -D__NO_WAIT \ -D_XL_NO_SLEEP \ -D__DEFAULT_CLEAR_SCREEN \ -D__ALT_PRINT \ $(FULL_FILES) \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c mv cpm.com $(BUILD_PATH)/X$(GAME_NAME)_cpm8080_buffered.com rm $(SOURCE_PATH)/../../*.o cpm_8080_adm3a_ack: $(_ACK) $(_ACK_OPTS) $(INCLUDE_OPTS) -mcpm \ -DXSize=78 \ -DYSize=22 \ -D__ADM3A \ -D_XL_NO_COLOR \ -DACK \ -D__CPM8080__ \ \ -DTURN_BASED \ -D__CONIO_GRAPHICS \ -D__NO_INIT_GRAPHICS \ -D__NO_WAIT \ -D_XL_NO_SLEEP \ $(FULL_FILES) mv cpm.com $(BUILD_PATH)/X$(GAME_NAME)_cpm8080_adm3a.com rm $(SOURCE_PATH)/../../*.o cpm_8080_ack_targets: \ cpm_8080_ack_buffered # buffered msdos86: $(_ACK) $(_ACK_OPTS) $(INCLUDE_OPTS) -mmsdos86 \ -DXSize=78 \ -DYSize=22 \ -D__ADM3A \ -D_XL_NO_COLOR \ -DACK \ -D__MSDOS86__ \ \ -DTURN_BASED \ -D__BUFFERED_GRAPHICS \ -D__NO_INIT_GRAPHICS \ -D__NO_WAIT \ -D_XL_NO_SLEEP \ -D__DEFAULT_CLEAR_SCREEN \ -D__ALT_PRINT \ $(FULL_FILES) \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c mv msdos86.exe $(BUILD_PATH)/X$(GAME_NAME)_$@_turn_based.exe rm $(SOURCE_PATH)/../../*.o msdos86_test: $(_ACK) $(_ACK_OPTS) $(INCLUDE_OPTS) -mmsdos86 \ -DXSize=78 \ -DYSize=22 \ -D__ADM3A \ -D_XL_NO_COLOR \ -DACK \ -D__MSDOS86__ \ \ -DTURN_BASED \ -D__BUFFERED_GRAPHICS \ -D__NO_WAIT \ -D_XL_NO_SLEEP \ -D__DEFAULT_CLEAR_SCREEN \ -D__ALT_PRINT \ $(FULL_FILES) \ $(CROSS_LIB_PATH)/display/init_graphics/ack/msdos86/msdos86_init_graphics.c \ $(CROSS_LIB_PATH)/display/init_graphics/ack/msdos86/init_vga.s \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c mv msdos86.exe $(BUILD_PATH)/X$(GAME_NAME)_$@_turn_based.exe rm $(SOURCE_PATH)/../../*.o # buffered pc8086: $(_ACK) $(_ACK_OPTS) $(INCLUDE_OPTS) -mpc86 \ -DXSize=78 \ -DYSize=22 \ -D__ADM3A \ -D_XL_NO_COLOR \ -DACK \ -D__PC8086__ \ \ -DTURN_BASED \ -D__BUFFERED_GRAPHICS \ -D__NO_INIT_GRAPHICS \ -D__NO_WAIT \ -D_XL_NO_SLEEP \ -D__DEFAULT_CLEAR_SCREEN \ -D__ALT_PRINT \ $(FULL_FILES) \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c mv pc86.img $(BUILD_PATH)/X$(GAME_NAME)_pc8086_turn_based.img rm $(SOURCE_PATH)/../../*.o pc8086_targets: \ pc8086 # buffered linuxppc: $(_ACK) $(_ACK_OPTS) $(INCLUDE_OPTS) -mlinuxppc \ -DXSize=78 \ -DYSize=21 \ -D__ADM3A \ -D_XL_NO_COLOR \ -DACK \ -D__LINUXPPC__ \ \ -DTURN_BASED \ -D__BUFFERED_GRAPHICS \ -D__NO_INIT_GRAPHICS \ -D__NO_WAIT \ -D_XL_NO_SLEEP \ -D__DEFAULT_CLEAR_SCREEN \ -D__ALT_PRINT \ $(FULL_FILES) \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c mv linuxppc.exe $(BUILD_PATH)/X$(GAME_NAME)_linuxppc_turn_based.exe rm $(SOURCE_PATH)/../../*.o linuxppc_targets: \ linuxppc #buffered linux68k: $(_ACK) $(_ACK_OPTS) $(INCLUDE_OPTS) -mlinux68k \ -DXSize=78 \ -DYSize=21 \ -D__ADM3A \ -D_XL_NO_COLOR \ -DACK \ -D__LINUX68K__ \ \ -DTURN_BASED \ -D__BUFFERED_GRAPHICS \ -D__NO_INIT_GRAPHICS \ -D__NO_WAIT \ -D_XL_NO_SLEEP \ -D__DEFAULT_CLEAR_SCREEN \ -D__ALT_PRINT \ $(FULL_FILES) \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c mv linux68k.exe $(BUILD_PATH)/X$(GAME_NAME)_linux68k_turn_based.exe rm $(SOURCE_PATH)/../../*.o linux68k_targets: \ linux68k # buffered linux386: $(_ACK) $(_ACK_OPTS) $(INCLUDE_OPTS) -mlinux386 \ -DXSize=78 \ -DYSize=21 \ -D__ADM3A \ -D_XL_NO_COLOR \ -DACK \ -D__LINUX386__ \ \ -DTURN_BASED \ -D__BUFFERED_GRAPHICS \ -D__NO_INIT_GRAPHICS \ -D__NO_WAIT \ -D_XL_NO_SLEEP \ -D__DEFAULT_CLEAR_SCREEN \ -D__ALT_PRINT \ $(FULL_FILES) \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c mv linux386.exe $(BUILD_PATH)/X$(GAME_NAME)_linux386_turn_based.exe rm $(SOURCE_PATH)/../../*.o linux386_targets: \ linux386 # buffered linuxmips: $(_ACK) $(_ACK_OPTS) $(INCLUDE_OPTS) -mlinuxmips \ -DXSize=78 \ -DYSize=21 \ -D__ADM3A \ -D_XL_NO_COLOR \ -DACK \ -D__LINUXPPC__ \ \ -DTURN_BASED \ -D__BUFFERED_GRAPHICS \ -D__NO_INIT_GRAPHICS \ -D__NO_WAIT \ -D_XL_NO_SLEEP \ -D__DEFAULT_CLEAR_SCREEN \ -D__ALT_PRINT \ $(FULL_FILES) \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c mv linuxmips.exe $(BUILD_PATH)/X$(GAME_NAME)_linuxmips_turn_based.exe rm $(SOURCE_PATH)/../../*.o linuxmips_targets: \ linuxmips # no ncurses in ACK dos: $(_ACK) $(_ACK_OPTS) $(INCLUDE_OPTS) -pc86 \ -D__DOS__ \ \ \ -DTURN_BASED \ -D__CONIO_GRAPHICS \ -D__ALT_PRINT \ $(CROSS_LIB_PATH)/display/alt_print/ncurses_alt_print.c \ $(SOURCE_PATH)/end_screen.c \ $(CROSS_LIB_PATH)/display/init_graphics/gcc/ncurses_init_graphics.c \ $(FULL_FILES) \ -lncurses # mv a.exe $(BUILD_PATH)/X$(GAME_NAME)_dos_turn_based.exe dos_targets: \ dos ================================================ FILE: src/games/chase/makefiles.chase/Makefile.cc6303_targets ================================================ # ------------------------------------------------------------------------------------------ # CC6303 # vbcc_targets: \ mc10 ############################################################################################### # mc10: mc10_buffered # mc10_buffered: # cc68 -tmc10 $(CC6303_MC10_OPTS) $(INCLUDE_OPTS) \ # -D__NORMALIZED_RAND -D__MC10__ \ # -DXSize=31 \ # -DYSize=15 \ # -D__STDIO -DEVEN_LOOP_MOVE -DTURN_BASED_SKULL_MIN_SLOWDOWN_SCALE=1 -DTURN_BASED_GHOST_MIN_SLOWDOWN_SCALE=1 \ # -DTURN_BASED_EFFECT_SCALE=1 -DTURN_BASED_WAIT_SCALE=1 \ # -D_XL_NO_COLOR \ # -D_XL_NO_SLEEP \ # -DTURN_BASED \ # -D__BUFFERED_GRAPHICS \ # -D__NO_INIT_GRAPHICS \ # -D__ALT_PRINT \ # -D__DEFAULT_CLEAR_SCREEN \ # $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c \ # $(FULL_FILES) -o xchase # mv xchase $(BUILD_PATH)/ # mv xchase.inf $(BUILD_PATH)/ # -S to produce Assembly mc10: cc68 -tmc10 $(CC6303_MC10_OPTS) $(INCLUDE_OPTS) $(GLOBAL_OPTS) \ -D__MC10__ \ \ -DXSize=32 \ -DYSize=16 \ -D__MEMORY_MAPPED_GRAPHICS \ -D_XL_NO_COLOR \ -D__ALT_SLEEP \ -D__NO_INIT_GRAPHICS \ -D_XL_SLOW_DOWN_FACTOR=1500 \ -D__DEFAULT_CLEAR_SCREEN -D__ALT_PRINT \ $(CROSS_LIB_PATH)/sound/generic/bit_bang_sounds.c \ $(FULL_FILES) \ $(CROSS_LIB_PATH)/sleep/sleep_macros.c \ $(CROSS_LIB_PATH)/rand/rand.c \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c \ -o xchase rm xchase mv xchase.c10 $(BUILD_PATH)/X$(GAME_NAME)_$@.c10 mc10_turn_based: cc68 -tmc10 $(CC6303_MC10_OPTS) $(INCLUDE_OPTS) $(GLOBAL_OPTS) \ -D__MC10__ \ \ -DXSize=32 \ -DYSize=16 \ -D__MEMORY_MAPPED_GRAPHICS \ -D_XL_NO_COLOR \ -D_XL_NO_SLEEP \ -D__NO_INIT_GRAPHICS \ -DNO_PRINT -D__NO_WAIT \ -DTURN_BASED \ -D__DEFAULT_CLEAR_SCREEN \ $(FULL_FILES) \ $(CROSS_LIB_PATH)/rand/rand.c \ -o xchase mv xchase $(BUILD_PATH)/X$(GAME_NAME)_$@ mv xchase.c10 $(BUILD_PATH)/X$(GAME_NAME)_$@.c10 mc10_tiny: mc10_no_print_tiny mc10_no_print_tiny: cc68 -tmc10 $(CC6303_MC10_OPTS) $(INCLUDE_OPTS) $(GLOBAL_OPTS) \ -D__MC10__ \ \ -DXSize=32 \ -DYSize=16 \ -D__MEMORY_MAPPED_GRAPHICS \ -D_XL_NO_COLOR \ -DTINY_GAME -D_XL_NO_SLEEP \ -D__NO_INIT_GRAPHICS \ -DNO_PRINT -D__NO_WAIT \ -DNO_INPUT -DNO_WALL \ -D__DEFAULT_CLEAR_SCREEN \ $(TINY_FILES) \ $(CROSS_LIB_PATH)/rand/rand.c \ -o xchase mv xchase $(BUILD_PATH)/TINY_X$(GAME_NAME)_$@ mv xchase.c10 $(BUILD_PATH)/TINY_X$(GAME_NAME)_$@.c10 ================================================ FILE: src/games/chase/makefiles.chase/Makefile.cc65_targets ================================================ # ------------------------------------------------------------------------------------------ # CC65 # ################################################################################################ # KO: # # OK: # # No. of systems: 19 # ------------ ifeq ($(DO_WIN),1) cc65_targets: \ apple2_targets \ apple2enh_targets \ atari_targets \ atari5200_targets \ atari_lynx_targets \ c128_8502_targets \ c16_targets \ c64_targets \ cbm510_targets \ cbm610_targets \ creativision_targets \ cx16_targets \ gamate_targets \ nes_targets \ pce_targets \ pet_targets \ oric_targets \ osic1p_targets \ supervision_targets \ telestrat_targets \ vic20_targets else cc65_targets: \ apple2_targets \ apple2enh_targets \ atari_targets \ atari5200_targets \ atari_lynx_targets \ c128_8502_targets \ c16_targets \ c64_targets \ cbm510_targets \ cbm610_targets \ creativision_targets \ cx16_targets \ nes_targets \ pce_targets \ pet_targets \ oric_targets \ telestrat_targets \ vic20_targets endif ################################################################################################ apple2_targets: \ apple2_no_gfx apple2_hgr apple2enh_targets: \ apple2enh_no_gfx apple2enh_80col apple2enh_hgr atari_targets: \ atari atari_no_color atari5200_targets: \ atari5200 atari_lynx_targets: \ atari_lynx c128_8502_targets: \ c128_40col c128_80col c16_targets: \ c16_16k c16_32k c64_targets: \ c64 cbm510_targets: \ cbm510 cbm610_targets: \ cbm610 creativision_targets: \ creativision_16k \ creativision_8k_light creativision_16k cx16_targets: \ cx16 gamate_targets: \ gamate nes_targets: \ nes pce_targets: \ pce_8k pce_16k pet_targets: \ pet_8k_light pet_16k oric_targets: \ oric_atmos oric1_16k osic1p_targets: \ osic1p_8k osic1p_32k osic1p_8k_turn_based osic1p_32k_turn_based supervision_targets: \ supervision telestrat_targets: \ telestrat ifeq ($(DO_WIN),1) vic20_targets: \ vic20_unexpanded vic20_exp_3k vic20_exp_8k vic20_exp_16k else vic20_targets: \ vic20_unexpanded vic20_exp_3k vic20_exp_16k endif ####################################################################################### # APPLE2 # -O breaks bit-banging apple2_no_gfx_v1: $(CC65_PATH)$(MYCC65) $(INCLUDE_OPTS) -t apple2 -DEXTRA_TITLE \ -D__ALT_SLEEP \ \ \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS \ $(FULL_FILES) \ $(CROSS_LIB_PATH)/sound/generic/bit_bang_sounds.c \ $(CROSS_LIB_PATH)/sleep/sleep_macros.c \ -o $(BUILD_PATH)/apple2.bin cp $(TOOLS_PATH)/cc65/apple2/MASTER_BOOT_ASCHASE.DSK $(BUILD_PATH)/X$(GAME_NAME)_$@.dsk java -jar $(TOOLS_PATH)/cc65/apple2/ac.jar -as $(BUILD_PATH)/X$(GAME_NAME)_$@.dsk aschase < $(BUILD_PATH)/apple2.bin rm $(BUILD_PATH)/apple2.bin apple2_no_gfx: $(CC65_PATH)$(MYCC65) $(INCLUDE_OPTS) -t apple2 -DEXTRA_TITLE \ -D__ALT_SLEEP \ \ \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS \ $(FULL_FILES) \ $(CROSS_LIB_PATH)/sound/generic/bit_bang_sounds.c \ $(CROSS_LIB_PATH)/sleep/sleep_macros.c \ -o $(BUILD_PATH)/apple2.bin cp $(TOOLS_PATH)/cc65/apple2/MASTER_BOOT_ASCHASE.DSK $(BUILD_PATH)/X$(GAME_NAME)_$@.dsk java -jar $(TOOLS_PATH)/cc65/apple2/ac.jar -as $(BUILD_PATH)/X$(GAME_NAME)_$@.dsk aschase < $(BUILD_PATH)/apple2.bin rm $(BUILD_PATH)/apple2.bin apple2_v1: apple2_hgr_v1 apple2_hgr_v1: $(ASSETS_PATH)/7x8_chars.h $(CC65_PATH)$(MYCC65) $(INCLUDE_OPTS) -O -t apple2 -DEXTRA_TITLE \ --config $(CFG_PATH)/cc65/apple2-hgr.cfg \ -D__ALT_SLEEP \ -DXSize=20 -DYSize=24 \ -D__ALT_PRINT \ -DAPPLE2_HGR -D__DEFAULT_CLEAR_SCREEN \ $(CROSS_LIB_PATH)/display/init_graphics/cc65/apple2/hgr.s \ $(FULL_FILES) \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c \ --code-name LOWCODE \ $(CROSS_LIB_PATH)/sound/generic/bit_bang_sounds.c \ $(CROSS_LIB_PATH)/sleep/sleep_macros.c \ $(CROSS_LIB_PATH)/display/init_graphics/cc65/apple2/apple2_hgr_init_graphics.c \ -o $(BUILD_PATH)/$@.bin cp $(TOOLS_PATH)/cc65/apple2/MASTER_BOOT_ASCHASE.DSK $(BUILD_PATH)/X$(GAME_NAME)_$@.dsk java -jar $(TOOLS_PATH)/cc65/apple2/ac.jar -as $(BUILD_PATH)/X$(GAME_NAME)_$@.dsk aschase < $(BUILD_PATH)/$@.bin rm $(BUILD_PATH)/$@.bin apple2: apple2_hgr apple2_hgr: $(ASSETS_PATH)/7x8_chars.h $(CC65_PATH)$(MYCC65) $(INCLUDE_OPTS) -O -Cl -t apple2 -DEXTRA_TITLE -D_APPLE_YELLOW_IS_PURPLE \ --config $(CFG_PATH)/cc65/apple2-hgr.cfg \ -D__ALT_SLEEP $(LIGHT_DRAW_SKIP) -D_XL_SLOW_DOWN_FACTOR=0 \ -DXSize=20 -DYSize=24 \ -D__ALT_PRINT \ -DAPPLE2_HGR -D__DEFAULT_CLEAR_SCREEN \ $(CROSS_LIB_PATH)/display/init_graphics/cc65/apple2/hgr.s \ $(FULL_FILES) \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c \ --code-name LOWCODE \ $(CROSS_LIB_PATH)/sound/generic/bit_bang_sounds.c \ $(CROSS_LIB_PATH)/sleep/sleep_macros.c \ $(CROSS_LIB_PATH)/display/init_graphics/cc65/apple2/apple2_hgr_init_graphics.c \ -o $(BUILD_PATH)/$@.bin cp $(TOOLS_PATH)/cc65/apple2/MASTER_BOOT_ASCHASE.DSK $(BUILD_PATH)/X$(GAME_NAME)_$@.dsk java -jar $(TOOLS_PATH)/cc65/apple2/ac.jar -as $(BUILD_PATH)/X$(GAME_NAME)_$@.dsk aschase < $(BUILD_PATH)/$@.bin rm $(BUILD_PATH)/$@.bin ####################################################################################### # APPLE2ENH apple2enh_no_gfx: $(CC65_PATH)$(MYCC65) $(INCLUDE_OPTS) -t apple2enh -DEXTRA_TITLE \ -D__ALT_SLEEP \ \ \ -D__CONIO_GRAPHICS \ -D__NO_INIT_GRAPHICS \ $(FULL_FILES) \ $(CROSS_LIB_PATH)/sound/generic/bit_bang_sounds.c \ $(CROSS_LIB_PATH)/sleep/sleep_macros.c \ -o $(BUILD_PATH)/apple2enh.bin cp $(TOOLS_PATH)/cc65/apple2/MASTER_BOOT_ASCHASE.DSK $(BUILD_PATH)/X$(GAME_NAME)_$@.dsk java -jar $(TOOLS_PATH)/cc65/apple2/ac.jar -as $(BUILD_PATH)/X$(GAME_NAME)_$@.dsk aschase < $(BUILD_PATH)/apple2enh.bin rm $(BUILD_PATH)/apple2enh.bin apple2enh_v1: apple2enh_hgr_v1 apple2enh_hgr_v1: $(ASSETS_PATH)/7x8_chars.h $(CC65_PATH)$(MYCC65) $(INCLUDE_OPTS) -O -t apple2enh -DEXTRA_TITLE -D_APPLE_YELLOW_IS_PURPLE \ --config $(CFG_PATH)/cc65/apple2-hgr.cfg \ -D__ALT_SLEEP \ -DXSize=20 -DYSize=24 \ -D__ALT_PRINT $(LIGHT_DRAW_SKIP) -D_XL_SLOW_DOWN_FACTOR=0 \ -DAPPLE2_HGR -D__DEFAULT_CLEAR_SCREEN \ $(CROSS_LIB_PATH)/display/init_graphics/cc65/apple2/hgr.s \ $(FULL_FILES) \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c \ --code-name LOWCODE \ $(CROSS_LIB_PATH)/sound/generic/bit_bang_sounds.c \ $(CROSS_LIB_PATH)/sleep/sleep_macros.c \ $(CROSS_LIB_PATH)/display/init_graphics/cc65/apple2/apple2_hgr_init_graphics.c \ -o $(BUILD_PATH)/$@.bin cp $(TOOLS_PATH)/cc65/apple2/MASTER_BOOT_ASCHASE.DSK $(BUILD_PATH)/X$(GAME_NAME)_$@.dsk java -jar $(TOOLS_PATH)/cc65/apple2/ac.jar -as $(BUILD_PATH)/X$(GAME_NAME)_$@.dsk aschase < $(BUILD_PATH)/$@.bin rm $(BUILD_PATH)/$@.bin apple2enh: apple2enh_hgr apple2enh_hgr: $(ASSETS_PATH)/7x8_chars.h $(CC65_PATH)$(MYCC65) $(INCLUDE_OPTS) -O -t apple2enh -DEXTRA_TITLE -D_APPLE_YELLOW_IS_PURPLE \ --config $(CFG_PATH)/cc65/apple2-hgr.cfg \ -D__ALT_SLEEP \ -DXSize=20 -DYSize=24 \ -D__ALT_PRINT $(LIGHT_DRAW_SKIP) -D_XL_SLOW_DOWN_FACTOR=0 \ -DAPPLE2_HGR -D__DEFAULT_CLEAR_SCREEN \ $(CROSS_LIB_PATH)/display/init_graphics/cc65/apple2/hgr.s \ $(FULL_FILES) \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c \ --code-name LOWCODE \ $(CROSS_LIB_PATH)/sound/generic/bit_bang_sounds.c \ $(CROSS_LIB_PATH)/sleep/sleep_macros.c \ $(CROSS_LIB_PATH)/display/init_graphics/cc65/apple2/apple2_hgr_init_graphics.c \ -o $(BUILD_PATH)/$@.bin cp $(TOOLS_PATH)/cc65/apple2/MASTER_BOOT_ASCHASE.DSK $(BUILD_PATH)/X$(GAME_NAME)_$@.dsk java -jar $(TOOLS_PATH)/cc65/apple2/ac.jar -as $(BUILD_PATH)/X$(GAME_NAME)_$@.dsk aschase < $(BUILD_PATH)/$@.bin rm $(BUILD_PATH)/$@.bin # -O breaks bit-banging apple2enh_80col: $(CC65_PATH)$(MYCC65) $(INCLUDE_OPTS) -t apple2enh -DEXTRA_TITLE \ -D__ALT_SLEEP \ \ \ -D__CONIO_GRAPHICS \ -DXSize=80 \ -DGHOSTS_NUMBER=9 \ -DAPPLE2ENH_80COL_VIDEO_MODE \ $(FULL_FILES) \ $(CROSS_LIB_PATH)/sound/generic/bit_bang_sounds.c \ $(CROSS_LIB_PATH)/display/init_graphics/cc65/apple2enh/apple2enh_80col_init_graphics.c \ $(CROSS_LIB_PATH)/sleep/sleep_macros.c \ -o $(BUILD_PATH)/apple2enh_80col.bin cp $(TOOLS_PATH)/cc65/apple2/MASTER_BOOT_ASCHASE.DSK $(BUILD_PATH)/X$(GAME_NAME)_apple2enh_80col.dsk java -jar $(TOOLS_PATH)/cc65/apple2/ac.jar -as $(BUILD_PATH)/X$(GAME_NAME)_apple2enh_80col.dsk aschase < $(BUILD_PATH)/apple2enh_80col.bin rm $(BUILD_PATH)/apple2enh_80col.bin ####################################################################################### # ATARI atari: $(ASSETS_PATH)/8x8_chars.h $(CC65_PATH)$(MYCC65) $(INCLUDE_OPTS) -O -t atari \ -DEXTRA_TITLE \ --config $(CFG_PATH)/cc65/atari_mode1_redefined_chars.cfg \ -D__ANTIC_MODE6_GRAPHICS \ -D__DEFAULT_CLEAR_SCREEN \ -D__NO_SCREEN_COLOR_INIT \ -D__ALT_PRINT \ $(CROSS_LIB_PATH)/display/alt_print/atari_mode1_alt_print.c \ $(CROSS_LIB_PATH)/display/init_graphics/cc65/atari/disable_setcursor.s \ $(CROSS_LIB_PATH)/display/init_graphics/cc65/atari/atari_mode1_redefined_chars_init_graphics.c \ $(CROSS_LIB_PATH)/sound/cc65/pokey/pokey_sounds.c \ $(FULL_FILES) \ -o $(BUILD_PATH)/X$(GAME_NAME)_$@.xex atari_no_color: $(CC65_PATH)$(MYCC65) $(INCLUDE_OPTS) -O -t atari -DEXTRA_TITLE \ -D_XL_NO_COLOR \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS \ $(CROSS_LIB_PATH)/sound/cc65/pokey/pokey_sounds.c \ $(FULL_FILES) \ -o $(BUILD_PATH)/X$(GAME_NAME)_atari_no_color.xex ####################################################################################### # ATARI5200 atari5200_fixed_colors: $(ASSETS_PATH)/8x8_chars.h $(CC65_PATH)$(MYCC65) $(INCLUDE_OPTS) -O -t atari5200 -DEXTRA_TITLE \ --config $(CFG_PATH)/cc65/atari5200_redefined_chars.cfg \ -D__ATARI5200__ \ -D__MEMORY_MAPPED_GRAPHICS \ $(CROSS_LIB_PATH)/sound/cc65/pokey/pokey_sounds.c \ $(FULL_FILES) \ $(CROSS_LIB_PATH)/display/init_graphics/cc65/atari5200/atari5200_init_graphics.c \ -o $(BUILD_PATH)/X$(GAME_NAME)_atari5200.rom atari5200: $(ASSETS_PATH)/8x8_chars.h $(CC65_PATH)$(MYCC65) $(INCLUDE_OPTS) -O -t atari5200 -DEXTRA_TITLE \ --config $(CFG_PATH)/cc65/atari5200_redefined_chars_32k.cfg \ -D__ATARI5200__ \ -D__ANTIC_MODE6_GRAPHICS \ -D_XL_SLOW_DOWN_FACTOR=200 \ $(CROSS_LIB_PATH)/sound/cc65/pokey/pokey_sounds.c \ $(FULL_FILES) \ $(CROSS_LIB_PATH)/display/init_graphics/cc65/atari5200/atari5200_init_graphics.c \ -o $(BUILD_PATH)/X$(GAME_NAME)_atari5200.rom ################################################################# atari7800: $(CC65_PATH)$(MYCC65) $(INCLUDE_OPTS) -O -t atari7800 --force-import __EXEHDR__ \ -D_XL_NO_UDG \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS -DEXTRA_TITLE -D__NO_SCREEN_COLOR_INIT -D_XL_NO_SLEEP \ -D_XL_SLOW_DOWN_FACTOR=1000 -DXSize=20 -DYSize=28 \ $(FULL_FILES) \ -o $(BUILD_PATH)/X$(GAME_NAME)_$@.a78 atari7800_no_color: $(CC65_PATH)$(MYCC65) $(INCLUDE_OPTS) -O -t atari7800 --force-import __EXEHDR__ atari7800-mono.o \ --config $(CFG_PATH)/cc65/atari7800_more_ram.cfg -D_XL_NO_UDG -D_XL_NO_COLOR \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS -DEXTRA_TITLE -D__NO_SCREEN_COLOR_INIT -D_XL_NO_SLEEP \ -D_XL_SLOW_DOWN_FACTOR=1000 -DXSize=40 -DYSize=28 \ $(FULL_FILES) \ -o $(BUILD_PATH)/X$(GAME_NAME)_$@.a78 ####################################################################################### # ATARI LYNX atari_lynx: atari_lynx_gfx atari_lynx_gfx: $(ASSETS_PATH)/8x6_tiles.s $(CC65_PATH)$(MYCC65) $(INCLUDE_OPTS) -Or -t lynx \ -D__ATARI_LYNX__ -D_XL_SLOW_DOWN_FACTOR=4000 -DEXTRA_TITLE \ -D__NO_SCREEN_COLOR_INIT -DXSize=20 -DYSize=17 -D_XL_NUMBER_OF_TILES=27 \ -D__LYNX_TGI_GRAPHICS \ \ -D__ALT_PRINT \ $(CROSS_LIB_PATH)/display/alt_print/tgi_gfx_print.c \ $(CROSS_LIB_PATH)/sound/cc65/atari_lynx/atari_lynx_sounds.c \ $(CROSS_LIB_PATH)/sound/cc65/atari_lynx/chibisound.asm \ $(ASSETS_PATH)/8x6_tiles.s \ $(CROSS_LIB_PATH)/display/init_graphics/cc65/atari_lynx/atari_lynx_gfx_init_graphics.c \ $(FULL_FILES) \ -o $(BUILD_PATH)/X$(GAME_NAME)_$@.lnx ####################################################################################### # C128 c128: c128_8502 c128_8502: c128_40col c128_40col: $(CC65_PATH)$(MYCC65) $(INCLUDE_OPTS) -O -t c128 -DEXTRA_TITLE \ \ \ -D__CONIO_GRAPHICS \ -D__NO_INIT_GRAPHICS \ $(CROSS_LIB_PATH)/sound/cc65/sid/sid_sounds.c \ $(FULL_FILES) \ -o $(BUILD_PATH)/X$(GAME_NAME)_c128_40col.prg c128_80col: $(CC65_PATH)$(MYCC65) $(INCLUDE_OPTS) -O -t c128 -DEXTRA_TITLE \ \ -DXSize=80 \ \ -D__CONIO_GRAPHICS \ -DGHOSTS_NUMBER=9 \ $(CROSS_LIB_PATH)/display/init_graphics/cc65/c128/c128_80col_init_graphics.c \ $(CROSS_LIB_PATH)/sound/cc65/sid/sid_sounds.c \ $(FULL_FILES) \ -o $(BUILD_PATH)/X$(GAME_NAME)_c128_80col.prg ####################################################################################### # C16 plus4: c16_32k c16_32k: $(ASSETS_PATH)/cc65_udc_arcade_64_chars.s $(CC65_PATH)$(MYCC65) $(INCLUDE_OPTS) -Or -Cl -t c16 \ --config $(CFG_PATH)/cc65/c16-32k_GFX_64chars.cfg \ -DEXTRA_TITLE \ \ \ \ -D__ALT_PRINT \ \ -D__MEMORY_MAPPED_GRAPHICS \ -D__DEFAULT_CLEAR_SCREEN \ -D__ALT_SLEEP \ -D_XL_SLOW_DOWN_FACTOR=2000 \ -DDANCE -D__UDG_BASE_FACTOR=23 \ $(CROSS_LIB_PATH)/display/init_graphics/cc65/c264/c16_linked_redefined_chars_init_graphics.c \ $(CROSS_LIB_PATH)/sound/cc65/c264/c264_sounds.c \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c \ $(CROSS_LIB_PATH)/sleep/sleep_macros.c \ $(FULL_FILES) \ $(ASSETS_PATH)/cc65_udc_arcade_64_chars.s \ -o $(BUILD_PATH)/X$(GAME_NAME)_$@.prg c16_32k_included: $(ASSETS_PATH)/8x8_chars.h $(CC65_PATH)$(MYCC65) $(INCLUDE_OPTS) -Or -t c16 --config $(CFG_PATH)/cc65/c16-32k.cfg \ -DEXTRA_TITLE \ -DGHOSTS_NUMBER=8 -D_XL_SLOW_DOWN_FACTOR=2000 \ \ \ -D__CONIO_GRAPHICS \ -DUSE_MEMORY_BUFFERS \ $(CROSS_LIB_PATH)/display/init_graphics/cc65/c264/c16_redefined_chars_init_graphics.c \ $(CROSS_LIB_PATH)/sound/cc65/c264/c264_sounds.c \ $(FULL_FILES) \ $(SOURCE_PATH)/memory/c16_memory.s \ -o $(BUILD_PATH)/X$(GAME_NAME)_$@.prg c16: c16_16k c16_16k: $(ASSETS_PATH)/cc65_udc_arcade_64_chars.s $(CC65_PATH)$(MYCC65) $(INCLUDE_OPTS) -Or -Cl -t c16 \ --config $(CFG_PATH)/cc65/c16-16k_GFX_64chars.cfg \ \ -D_XL_SLOW_DOWN_FACTOR=2000 \ \ -DGHOSTS_NUMBER=8 \ -DLESS_TEXT \ \ -DNO_HINTS \ -D__ALT_PRINT \ \ -D__MEMORY_MAPPED_GRAPHICS \ -D__DEFAULT_CLEAR_SCREEN \ -D__ALT_SLEEP \ -DDANCE \ -DUSE_MEMORY_BUFFERS \ $(SOURCE_PATH)/memory/c16_memory.s \ $(CROSS_LIB_PATH)/display/init_graphics/cc65/c264/c16_linked_redefined_chars_init_graphics.c \ $(CROSS_LIB_PATH)/sound/cc65/c264/c264_sounds.c \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c \ $(CROSS_LIB_PATH)/sleep/sleep_macros.c \ $(FULL_FILES) \ $(ASSETS_PATH)/cc65_udc_arcade_64_chars.s \ -o $(BUILD_PATH)/X$(GAME_NAME)_$@.prg ####################################################################################### # C64 # -DDEBUG_GHOST_DISPLAY c64_wait_vsync: $(ASSETS_PATH)/cc65_udc_arcade.s $(CC65_PATH)$(MYCC65) $(INCLUDE_OPTS) -Or -Cl -t c64 -DEXTRA_TITLE \ \ --config $(CFG_PATH)/cc65/c64_GFXat0xC000.cfg \ -DCBM_SCREEN_CODES -DGHOSTS_NUMBER=8 \ -D__MEMORY_MAPPED_GRAPHICS -D__USE_WAIT_V_SYNC -DDEBUG_GHOST_DISPLAY \ $(CROSS_LIB_PATH)/sound/cc65/sid/sid_sounds.c \ $(ASSETS_PATH)/cc65_udc_arcade.s \ $(CROSS_LIB_PATH)/display/init_graphics/cc65/c64/c64_init_graphics.c \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c \ $(FULL_FILES) \ -o $(BUILD_PATH)/X$(GAME_NAME)_$@.prg $(TOOLS_PATH)/generic/exomizer sfx basic $(BUILD_PATH)/X$(GAME_NAME)_$@.prg -o $(BUILD_PATH)/X$(GAME_NAME)_$@_exomized.prg python $(TOOLS_PATH)/cc65/c64/prg2crt.py $(BUILD_PATH)/X$(GAME_NAME)_$@_exomized.prg $(BUILD_PATH)/X$(GAME_NAME)_$@_exomized.crt rm $(BUILD_PATH)/X$(GAME_NAME)_$@.prg c64: $(ASSETS_PATH)/cc65_udc_arcade.s $(CC65_PATH)$(MYCC65) $(INCLUDE_OPTS) -Or -Cl -t c64 -DEXTRA_TITLE \ \ --config $(CFG_PATH)/cc65/c64_GFXat0xC000.cfg \ -DCBM_SCREEN_CODES -D__ALT_PRINT \ -D__MEMORY_MAPPED_GRAPHICS \ $(CROSS_LIB_PATH)/sound/cc65/sid/sid_sounds.c \ $(ASSETS_PATH)/cc65_udc_arcade.s \ $(CROSS_LIB_PATH)/display/init_graphics/cc65/c64/c64_init_graphics.c \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c \ $(FULL_FILES) \ -o $(BUILD_PATH)/X$(GAME_NAME)_$@.prg c64_exomized: $(BUILD_PATH)/X$(GAME_NAME)_$@.prg $(TOOLS_PATH)/generic/exomizer sfx basic $(BUILD_PATH)/X$(GAME_NAME)_c64.prg -o $(BUILD_PATH)/X$(GAME_NAME)_c64_exomized.prg # prg2crt not compatible with Python 3 c64_crt: $(BUILD_PATH)/X$(GAME_NAME)_c64_exomized.prg python $(TOOLS_PATH)/cc65/c64/prg2crt.py $(BUILD_PATH)/X$(GAME_NAME)_c64_exomized.prg $(BUILD_PATH)/X$(GAME_NAME)_c64_exomized.crt # /usr/bin/python2 $(TOOLS_PATH)/cc65/c64/prg2crt.py $(BUILD_PATH)/X$(GAME_NAME)_c64_exomized.prg $(BUILD_PATH)/X$(GAME_NAME)_c64_exomized.crt ####################################################################################### # CBM610 cbm610: $(CC65_PATH)$(MYCC65) $(INCLUDE_OPTS) -O -t cbm610 \ \ \ \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS \ $(FULL_FILES) \ -o $(BUILD_PATH)/X$(GAME_NAME)_cbm610.prg ####################################################################################### # CBM510 cbm510: $(CC65_PATH)$(MYCC65) $(INCLUDE_OPTS) -O -t cbm510 -DEXTRA_TITLE \ \ \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS \ $(FULL_FILES) \ -o $(BUILD_PATH)/X$(GAME_NAME)_cbm510.prg ####################################################################################### # CREATIVISION creativision: creativision_16k creativision_16k: creativision_16k_color creativision_16k_fixed_colors: $(ASSETS_PATH)/8x8_chars.h $(CC65_PATH)$(MYCC65) $(INCLUDE_OPTS) -O -t creativision \ -D__NO_SCREEN_COLOR_INIT -D__CREATIVISION__ \ -D__ALT_SLEEP \ -D__MEMORY_MAPPED_GRAPHICS -DLESS_TEXT \ -D_XL_SLOW_DOWN_FACTOR=2000 \ --config $(CFG_PATH)/cc65/creativision-16k.cfg \ $(CROSS_LIB_PATH)/sleep/sleep_macros.c \ $(CROSS_LIB_PATH)/sound/cc65/creativision/creativision_sounds.c \ $(FULL_FILES) \ $(CROSS_LIB_PATH)/display/init_graphics/cc65/creativision/creativision_init_graphics.c \ -o $(BUILD_PATH)/X$(GAME_NAME)_creativision_16k.bin dd if=$(BUILD_PATH)/X$(GAME_NAME)_creativision_16k.bin bs=8k skip=1 > $(BUILD_PATH)/X$(GAME_NAME)_creativision_16k_SWAPPED.bin dd if=$(BUILD_PATH)/X$(GAME_NAME)_creativision_16k.bin bs=8k count=1 >> $(BUILD_PATH)/X$(GAME_NAME)_creativision_16k_SWAPPED.bin rm $(BUILD_PATH)/X$(GAME_NAME)_creativision_16k.bin creativision_16k_color: $(ASSETS_PATH)/8x8_chars.h $(CC65_PATH)$(MYCC65) $(INCLUDE_OPTS) -O -t creativision \ -D__NO_SCREEN_COLOR_INIT -D__CREATIVISION__ \ -D__ALT_SLEEP \ -DCREATIVISION_COLOR -DGHOSTS_NUMBER=8 -DLESS_TEXT \ -D_XL_SLOW_DOWN_FACTOR=2000 -DUSE_TINY_MEMORY_BUFFERS \ --config $(CFG_PATH)/cc65/creativision-16k.cfg \ $(CROSS_LIB_PATH)/sleep/sleep_macros.c \ $(CROSS_LIB_PATH)/sound/cc65/creativision/creativision_sounds.c \ $(SOURCE_PATH)/memory/creativision_memory.s \ $(FULL_FILES) \ $(CROSS_LIB_PATH)/display/init_graphics/cc65/creativision/creativision_color_init_graphics.c \ -o $(BUILD_PATH)/X$(GAME_NAME)_creativision_16k.bin dd if=$(BUILD_PATH)/X$(GAME_NAME)_creativision_16k.bin bs=8k skip=1 > $(BUILD_PATH)/X$(GAME_NAME)_creativision_16k_SWAPPED.bin dd if=$(BUILD_PATH)/X$(GAME_NAME)_creativision_16k.bin bs=8k count=1 >> $(BUILD_PATH)/X$(GAME_NAME)_creativision_16k_SWAPPED.bin rm $(BUILD_PATH)/X$(GAME_NAME)_creativision_16k.bin creativision_test: $(ASSETS_PATH)/8x8_chars.h $(CC65_PATH)$(MYCC65) $(INCLUDE_OPTS) -O -t creativision \ -D__NO_SCREEN_COLOR_INIT -D__CREATIVISION__ \ -D__ALT_SLEEP \ -DCREATIVISION_COLOR -DLESS_TEXT \ -D_XL_SLOW_DOWN_FACTOR=2000 \ --config $(CFG_PATH)/cc65/creativision-16k_less_stack.cfg \ $(CROSS_LIB_PATH)/sleep/sleep_macros.c \ $(FULL_FILES) \ $(CROSS_LIB_PATH)/display/init_graphics/cc65/creativision/creativision_color_init_graphics.c \ -o $(BUILD_PATH)/X$(GAME_NAME)_creativision_16k.bin dd if=$(BUILD_PATH)/X$(GAME_NAME)_creativision_16k.bin bs=8k skip=1 > $(BUILD_PATH)/X$(GAME_NAME)_creativision_16k_SWAPPED.bin dd if=$(BUILD_PATH)/X$(GAME_NAME)_creativision_16k.bin bs=8k count=1 >> $(BUILD_PATH)/X$(GAME_NAME)_creativision_16k_SWAPPED.bin rm $(BUILD_PATH)/X$(GAME_NAME)_creativision_16k.bin # dd if=$(BUILD_PATH)/X$(GAME_NAME)_creativision_16k.bin ibs=1 count=8192 of=$(BUILD_PATH)/X$(GAME_NAME)_creativision_16k_LOW.bin # dd if=$(BUILD_PATH)/X$(GAME_NAME)_creativision_16k.bin ibs=1 skip=8192 of=$(BUILD_PATH)/X$(GAME_NAME)_creativision_16k_HIGH.bin # rm $(BUILD_PATH)/X$(GAME_NAME)_creativision_16k.bin # cat $(BUILD_PATH)/X$(GAME_NAME)_creativision_16k_HIGH.bin $(BUILD_PATH)/X$(GAME_NAME)_creativision_16k_LOW.bin > $(BUILD_PATH)/X$(GAME_NAME)_creativision_16k_SWAPPED.bin # rm $(BUILD_PATH)/X$(GAME_NAME)_creativision_16k_LOW.bin # rm $(BUILD_PATH)/X$(GAME_NAME)_creativision_16k_HIGH.bin creativision_8k_light: $(CC65_PATH)$(MYCC65) $(INCLUDE_OPTS) -Or -Cl -t creativision \ -D__NO_SCREEN_COLOR_INIT \ -DLESS_TEXT \ -D__NO_SCREEN_COLOR_INIT \ -DFLAT_ENEMIES \ -DNO_RANDOM_LEVEL \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS \ \ -D__ALT_SLEEP \ -DGHOSTS_NUMBER=8 \ --config $(CFG_PATH)/cc65/creativision-8k_less_stack.cfg \ $(LIGHT_FILES) \ $(CROSS_LIB_PATH)/sleep/sleep_macros.c \ -o $(BUILD_PATH)/X$(GAME_NAME)_LIGHT_creativision_8k_less_text.bin ####################################################################################### # CX16 cx16: $(CC65_PATH)$(MYCC65) $(INCLUDE_OPTS) -O -t cx16 -DEXTRA_TITLE \ -D__CX16__ \ \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS \ $(FULL_FILES) \ -o $(BUILD_PATH)/X$(GAME_NAME)_cx16.prg ####################################################################################### # GAMATE #sound version is buggy (probably because of a memory issue) gamate: gamate_no_sound gamate_test: $(ASSETS_PATH)/cc65_gamate_tiles.s $(TOOLS_PATH)/cc65/gamate/gamate-fixcart$(COMPILEDEXT) $(CC65_PATH)$(MYCC65) $(INCLUDE_OPTS) -Or -Cl -t gamate --config $(CFG_PATH)/cc65/gamate_reduced_stack.cfg \ -D_XL_SLOW_DOWN_FACTOR=6000 \ \ -DLESS_TEXT \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS \ -DSIMPLE_STRATEGY -DNO_HINTS -DNO_BLINKING -D__NO_SCREEN_COLOR_INIT -D_XL_NO_COLOR \ $(FULL_FILES) \ $(ASSETS_PATH)/cc65_gamate_tiles.s \ -o $(BUILD_PATH)/X$(GAME_NAME)_gamate.bin gamate_no_udg: $(TOOLS_PATH)/cc65/gamate/gamate-fixcart$(COMPILEDEXT) $(CC65_PATH)$(MYCC65) $(INCLUDE_OPTS) -O -t gamate --config $(CFG_PATH)/cc65/gamate_reduced_stack.cfg \ -D_XL_SLOW_DOWN_FACTOR=5000 \ \ -DLESS_TEXT \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS \ -DSIMPLE_STRATEGY \ $(FULL_FILES) \ -o $(BUILD_PATH)/X$(GAME_NAME)_gamate_no_udg.bin $(TOOLS_PATH)/cc65/gamate/gamate-fixcart$(COMPILEDEXT) $(BUILD_PATH)/X$(GAME_NAME)_gamate_no_udg.bin gamate_no_sound: $(ASSETS_PATH)/cc65_gamate_tiles.s $(TOOLS_PATH)/cc65/gamate/gamate-fixcart$(COMPILEDEXT) $(CC65_PATH)$(MYCC65) $(INCLUDE_OPTS) -Or -Cl -t gamate --config $(CFG_PATH)/cc65/gamate_reduced_stack.cfg \ -D_XL_SLOW_DOWN_FACTOR=6000 \ \ -DLESS_TEXT \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS \ -DSIMPLE_STRATEGY -DNO_HINTS -DNO_BLINKING -D__NO_SCREEN_COLOR_INIT -D_XL_NO_COLOR \ $(FULL_FILES) \ $(ASSETS_PATH)/cc65_gamate_tiles.s \ -o $(BUILD_PATH)/X$(GAME_NAME)_gamate.bin $(TOOLS_PATH)/cc65/gamate/gamate-fixcart$(COMPILEDEXT) $(BUILD_PATH)/X$(GAME_NAME)_gamate.bin gamate_sound: $(ASSETS_PATH)/cc65_gamate_tiles.s $(TOOLS_PATH)/cc65/gamate/gamate-fixcart$(COMPILEDEXT) $(CC65_PATH)$(MYCC65) $(INCLUDE_OPTS) -Or -Cl -t gamate --config $(CFG_PATH)/cc65/gamate_reduced_stack.cfg \ -D_XL_SLOW_DOWN_FACTOR=6000 \ -DNO_CONTROL_INSTRUCTIONS -DNO_HINTS -D_XL_NO_SLEEP -D__NO_WAIT \ -DLESS_TEXT \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS \ -DSIMPLE_STRATEGY -DNO_HINTS -DNO_BLINKING -D__NO_SCREEN_COLOR_INIT -D_XL_NO_COLOR \ $(FULL_FILES) \ $(ASSETS_PATH)/cc65_gamate_tiles.s \ $(CROSS_LIB_PATH)/sound/cc65/gamate/gamate_sounds.c \ -o $(BUILD_PATH)/X$(GAME_NAME)_gamate.bin $(TOOLS_PATH)/cc65/gamate/gamate-fixcart$(COMPILEDEXT) $(BUILD_PATH)/X$(GAME_NAME)_gamate.bin ####################################################################################### # NES nes: $(ASSETS_PATH)/cc65_nes_tiles.s $(CC65_PATH)$(MYCC65) $(INCLUDE_OPTS) -O -t nes -DEXTRA_TITLE \ --config $(CFG_PATH)/cc65/nes_fx.cfg \ \ -D_XL_NO_COLOR \ -D__CONIO_GRAPHICS \ \ -D__DEFAULT_CLEAR_SCREEN \ $(CROSS_LIB_PATH)/display/init_graphics/cc65/nes/nes_init_graphics.c \ $(ASSETS_PATH)/cc65_nes_tiles.s \ $(FULL_FILES) \ -o $(BUILD_PATH)/X$(GAME_NAME)_nes.nes ####################################################################################### # PCE pce: pce_16k # -Or breaks the PCE target pce_16k: $(ASSETS_PATH)/cc65_pce_tiles.s $(CC65_PATH)$(MYCC65) $(INCLUDE_OPTS) -O -t pce -DEXTRA_TITLE \ -D_XL_SLOW_DOWN_FACTOR=3500 \ \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS \ --config $(CFG_PATH)/cc65/pce_16k_less_stack.cfg \ $(FULL_FILES) \ $(ASSETS_PATH)/cc65_pce_tiles.s \ -o $(BUILD_PATH)/X$(GAME_NAME)_PCE.bin dd if=$(BUILD_PATH)/X$(GAME_NAME)_PCE.bin ibs=1 count=8192 of=$(BUILD_PATH)/X$(GAME_NAME)_PCE_LOW.bin dd if=$(BUILD_PATH)/X$(GAME_NAME)_PCE.bin ibs=1 skip=8192 of=$(BUILD_PATH)/X$(GAME_NAME)_PCE_HIGH.bin rm $(BUILD_PATH)/X$(GAME_NAME)_PCE.bin cat $(BUILD_PATH)/X$(GAME_NAME)_PCE_HIGH.bin $(BUILD_PATH)/X$(GAME_NAME)_PCE_LOW.bin > $(BUILD_PATH)/X$(GAME_NAME)_PCE_SWAPPED.pce rm $(BUILD_PATH)/X$(GAME_NAME)_PCE_LOW.bin rm $(BUILD_PATH)/X$(GAME_NAME)_PCE_HIGH.bin # -Or breaks the PCE target pce_8k: $(ASSETS_PATH)/cc65_pce_tiles.s $(CC65_PATH)$(MYCC65) $(INCLUDE_OPTS) -O -Cl -t pce \ -DTINY_GAME -DNO_WALL -DNO_BLINKING -D_XL_NO_COLOR \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS \ --config $(CFG_PATH)/cc65/pce_8k_less_stack.cfg \ $(TINY_FILES) \ $(ASSETS_PATH)/cc65_pce_tiles.s \ -o $(BUILD_PATH)/X$(GAME_NAME)_TINY_PCE_8k.pce ####################################################################################### # PET pet: pet_16k pet_16k: $(CC65_PATH)$(MYCC65) $(INCLUDE_OPTS) -O -t pet \ \ \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS \ $(CROSS_LIB_PATH)/sound/cc65/pet/pet_sounds.c \ $(FULL_FILES) \ -o $(BUILD_PATH)/X$(GAME_NAME)_pet_16k.prg pet_8k_light: $(CC65_PATH)$(MYCC65) $(INCLUDE_OPTS) -Or -t pet -Cl \ --config $(CFG_PATH)/cc65/pet_8k.cfg \ -DLESS_TEXT \ -DNO_BLINKING -D_XL_NO_COLOR \ -D__NO_SCREEN_COLOR_INIT \ -DGHOSTS_NUMBER=8 \ -D__ALT_PRINT \ -D__DEFAULT_CLEAR_SCREEN \ -D__MEMORY_MAPPED_GRAPHICS -D__NO_INIT_GRAPHICS \ -DUSE_LIGHT_MEMORY_BUFFERS \ $(LIGHT_FILES) \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c \ $(SOURCE_PATH)/memory/pet_memory.s \ -o $(BUILD_PATH)/X$(GAME_NAME)_LIGHT_pet_8k_less_text.prg ####################################################################################### # ORIC1 oric: oric1 oric1: oric1_16k oric1_16k: $(ASSETS_PATH)/6x8_chars.h $(CC65_PATH)$(MYCC65) $(INCLUDE_OPTS) -Or -Cl -D__ORIC1__ \ \ -DLESS_TEXT -D_XL_NO_SLEEP \ -DSIMPLE_STRATEGY -DNO_HINTS -DGHOSTS_NUMBER=8 \ -DNO_BLINKING \ -t atmos \ -D__ORIC_COLOR_GRAPHICS \ -DUSE_MEMORY_BUFFERS \ --config $(CFG_PATH)/cc65/atmos_better_tap.cfg \ $(CROSS_LIB_PATH)/display/init_graphics/cc65/atmos/atmos_redefined_characters_init_graphics.c \ $(FULL_FILES) \ $(SOURCE_PATH)/memory/oric1_memory.s \ -o $(BUILD_PATH)/X$(GAME_NAME)_oric1_16k_less_text.tap atmos: oric_atmos oric_atmos: $(ASSETS_PATH)/6x8_chars.h $(CC65_PATH)$(MYCC65) $(INCLUDE_OPTS) -O -DEXTRA_TITLE \ -t atmos \ --config $(CFG_PATH)/cc65/atmos_better_tap.cfg \ -D__ORIC_COLOR_GRAPHICS \ $(CROSS_LIB_PATH)/display/init_graphics/cc65/atmos/atmos_redefined_characters_init_graphics.c \ $(FULL_FILES) \ -o $(BUILD_PATH)/X$(GAME_NAME)_atmos_and_oric1_48k.tap ####################################################################################### # OSIC1P osic1p: osic1p_32k osic1p_32k: $(CC65_PATH)$(MYCC65) $(INCLUDE_OPTS) --start-addr 0x200 -Wl -D,__HIMEM__=0x8000 -O -t osic1p \ -D__ALT_SLEEP \ -D__NO_SCREEN_COLOR_INIT \ -DGHOSTS_NUMBER=8 \ \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS \ $(FULL_FILES) \ $(CROSS_LIB_PATH)/sleep/sleep_macros.c \ -o $(BUILD_PATH)/X$(GAME_NAME)_osic1p_32k.lod $(TOOLS_PATH)/cc65/osic1p/srec_cat $(BUILD_PATH)/X$(GAME_NAME)_osic1p_32k.lod -binary -offset 0x200 -o $(BUILD_PATH)/X$(GAME_NAME)_osic1p_32k.c1p -Ohio_Scientific -execution-start-address=0x200 rm $(BUILD_PATH)/X$(GAME_NAME)_osic1p_32k.lod mv $(BUILD_PATH)/X$(GAME_NAME)_osic1p_32k.c1p $(BUILD_PATH)/X$(GAME_NAME)_osic1p_32k.lod osic1p_32k_turn_based: $(CC65_PATH)$(MYCC65) $(INCLUDE_OPTS) --start-addr 0x200 -Wl -D,__HIMEM__=0x8000 -O -t osic1p \ -D__ALT_SLEEP \ -D__NO_SCREEN_COLOR_INIT \ -DTURN_BASED \ -DGHOSTS_NUMBER=9 \ \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS \ $(FULL_FILES) \ $(CROSS_LIB_PATH)/sleep/sleep_macros.c \ -o $(BUILD_PATH)/X$(GAME_NAME)_osic1p_32k_turn_based.lod $(TOOLS_PATH)/cc65/osic1p/srec_cat $(BUILD_PATH)/X$(GAME_NAME)_osic1p_32k_turn_based.lod -binary -offset 0x200 -o $(BUILD_PATH)/X$(GAME_NAME)_osic1p_32k_turn_based.c1p -Ohio_Scientific -execution-start-address=0x200 rm $(BUILD_PATH)/X$(GAME_NAME)_osic1p_32k_turn_based.lod mv $(BUILD_PATH)/X$(GAME_NAME)_osic1p_32k_turn_based.c1p $(BUILD_PATH)/X$(GAME_NAME)_osic1p_32k_turn_based.lod osic1p_8k: $(CC65_PATH)$(MYCC65) $(INCLUDE_OPTS) -Cl --start-addr 0x200 -Wl -D,__HIMEM__=0x2000 -O --config $(CFG_PATH)/cc65/osic1p_less_stack.cfg -t osic1p \ -DROUND_ENEMIES -D_XL_NO_SLEEP -DNO_RANDOM_LEVEL -DLESS_TEXT -D__NO_SCREEN_COLOR_INIT -DTINY_GAME -DNO_WALL -DNO_BLINKING \ -DGHOSTS_NUMBER=8 \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS \ $(TINY_FILES) \ -o $(BUILD_PATH)/X$(GAME_NAME)_TINY_osic1p_8k.lod $(TOOLS_PATH)/cc65/osic1p/srec_cat $(BUILD_PATH)/X$(GAME_NAME)_TINY_osic1p_8k.lod -binary -offset 0x200 -o $(BUILD_PATH)/X$(GAME_NAME)_TINY_osic1p_8k.c1p -Ohio_Scientific -execution-start-address=0x200 rm $(BUILD_PATH)/X$(GAME_NAME)_TINY_osic1p_8k.lod mv $(BUILD_PATH)/X$(GAME_NAME)_TINY_osic1p_8k.c1p $(BUILD_PATH)/X$(GAME_NAME)_TINY_osic1p_8k.lod osic1p_8k_turn_based: $(CC65_PATH)$(MYCC65) $(INCLUDE_OPTS) -Cl --start-addr 0x200 -Wl -D,__HIMEM__=0x2000 -O --config $(CFG_PATH)/cc65/osic1p_less_stack.cfg -t osic1p \ -DROUND_ENEMIES -D_XL_NO_SLEEP -DNO_RANDOM_LEVEL -DLESS_TEXT -D__NO_SCREEN_COLOR_INIT -DTINY_GAME -DNO_WALL -DNO_BLINKING \ -DTURN_BASED \ -DGHOSTS_NUMBER=9 \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS \ $(TINY_FILES) \ -o $(BUILD_PATH)/X$(GAME_NAME)_TINY_osic1p_8k_turn_based.lod $(TOOLS_PATH)/cc65/osic1p/srec_cat $(BUILD_PATH)/X$(GAME_NAME)_TINY_osic1p_8k_turn_based.lod -binary -offset 0x200 -o $(BUILD_PATH)/X$(GAME_NAME)_TINY_osic1p_8k_turn_based.c1p -Ohio_Scientific -execution-start-address=0x200 rm $(BUILD_PATH)/X$(GAME_NAME)_TINY_osic1p_8k_turn_based.lod mv $(BUILD_PATH)/X$(GAME_NAME)_TINY_osic1p_8k_turn_based.c1p $(BUILD_PATH)/X$(GAME_NAME)_TINY_osic1p_8k_turn_based.lod ####################################################################################### # SUPERVISION supervision_reduced: $(ASSETS_PATH)/cc65_udc.s $(CC65_PATH)$(MYCC65) $(INCLUDE_OPTS) -O -t supervision \ --config $(CFG_PATH)/cc65/supervision-16k_GFX.cfg \ $(ASSETS_PATH)/cc65_udc.s \ -DNO_PRINT -D_XL_NO_SLEEP \ -D__BIT_MAPPED_4_GRAPHICS $(LIGHT_DRAW_SKIP) \ -D__DEFAULT_CLEAR_SCREEN \ -D__NO_WAIT \ -D_XL_NO_SLEEP \ $(FULL_FILES) \ $(CROSS_LIB_PATH)/display/init_graphics/cc65/supervision/supervision_init_graphics.c \ -o $(BUILD_PATH)/X$(GAME_NAME)_supervision.sv supervision_no_print: $(ASSETS_PATH)/cc65_udc.s $(CC65_PATH)$(MYCC65) $(INCLUDE_OPTS) -O -t supervision \ --config $(CFG_PATH)/cc65/supervision-16k_GFX.cfg \ $(ASSETS_PATH)/cc65_udc.s \ -DNO_PRINT -D_XL_NO_SLEEP \ -D__BIT_MAPPED_4_GRAPHICS $(LIGHT_DRAW_SKIP) \ -D__DEFAULT_CLEAR_SCREEN \ \ -D__NO_WAIT \ -D_XL_NO_SLEEP \ $(FULL_FILES) \ $(CROSS_LIB_PATH)/display/init_graphics/cc65/supervision/supervision_init_graphics.c \ -o $(BUILD_PATH)/X$(GAME_NAME)_supervision.sv supervision: $(ASSETS_PATH)/cc65_udc.s $(CC65_PATH)$(MYCC65) $(INCLUDE_OPTS) -O -t supervision -DEXTRA_TITLE \ --config $(CFG_PATH)/cc65/supervision-16k_GFX.cfg \ $(ASSETS_PATH)/cc65_udc.s \ -D__ALT_PRINT -D__ALT_SLEEP \ -D__BIT_MAPPED_4_GRAPHICS $(LIGHT_DRAW_SKIP) \ -D__DEFAULT_CLEAR_SCREEN -D_XL_SLOW_DOWN_FACTOR=300 \ \ $(CROSS_LIB_PATH)/sleep/sleep_macros.c \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c \ $(FULL_FILES) \ $(CROSS_LIB_PATH)/display/init_graphics/cc65/supervision/supervision_init_graphics.c \ -o $(BUILD_PATH)/X$(GAME_NAME)_supervision.sv ####################################################################################### # TELESTRAT telestrat: telestrat_buffered telestrat_buffered: $(CC65_PATH)$(MYCC65) $(INCLUDE_OPTS) -O -t telestrat \ -D__TELESTRAT__ \ -D__BUFFERED_GRAPHICS -DTURN_BASED -D__STDIO -DXSize=38 -DYSize=24 \ -D__NO_SCREEN_COLOR_INIT -D_XL_SLOW_DOWN_FACTOR=800 \ -D__NO_WAIT -D_XL_NO_SLEEP \ -D_XL_NO_COLOR -D__ALT_PRINT -D__DEFAULT_CLEAR_SCREEN \ \ -D__NO_INIT_GRAPHICS \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c \ $(FULL_FILES) \ -o $(BUILD_PATH)/X$(GAME_NAME)_$@ # cp $(BUILD_PATH)/X$(GAME_NAME)_$@ /cygdrive/C/Emulation/Computers/Oricutron_win64-20200515/sdcard/bin/xchase telestrat_joy_buffered: $(CC65_PATH)$(MYCC65) $(INCLUDE_OPTS) -O -t telestrat \ -D__TELESTRAT__ -DCC65_JOYSTICK \ -D__BUFFERED_GRAPHICS -DTURN_BASED -D__STDIO -DXSize=38 -DYSize=24 \ -D__NO_SCREEN_COLOR_INIT -D_XL_SLOW_DOWN_FACTOR=800 \ -D__NO_WAIT -D_XL_NO_SLEEP \ -D_XL_NO_COLOR -D__ALT_PRINT -D__DEFAULT_CLEAR_SCREEN \ \ -D__NO_INIT_GRAPHICS \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c \ $(FULL_FILES) \ -o $(BUILD_PATH)/X$(GAME_NAME)_$@ cp $(BUILD_PATH)/X$(GAME_NAME)_$@ /cygdrive/C/Emulation/Computers/Oricutron_win64-20200515/sdcard/bin/xchase telestrat_exp: $(CC65_PATH)$(MYCC65) $(INCLUDE_OPTS) -O -t telestrat \ -D__TELESTRAT__ -D__INCLUDE_CONIO_H \ -D__NO_WAIT -DCC65_JOYSTICK -DXSize=38 -DYSize=24 \ -D__NO_SCREEN_COLOR_INIT \ -D__ALT_SLEEP \ \ -D_XL_NO_COLOR \ \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS \ $(CROSS_LIB_PATH)/sleep/sleep_macros.c \ $(FULL_FILES) \ -o $(BUILD_PATH)/X$(GAME_NAME)_$@ cp $(BUILD_PATH)/X$(GAME_NAME)_$@ /cygdrive/C/Emulation/Computers/Oricutron_win64-20200515/sdcard/bin/xchase ####################################################################################### # VIC20 vic20_wait_vsync: vic20_exp_16k_wait_vsync # broken with VERSION=2 vic20_exp_16k_wait_vsync: $(ASSETS_PATH)/cc65_udc.s $(CC65_PATH)$(MYCC65) $(INCLUDE_OPTS) -Or -Cl -t vic20 \ --config $(CFG_PATH)/cc65/vic20-16k_GFX.cfg \ -D__CONIO_GRAPHICS -D__VIC20_EXP_16K -D_XL_SLOW_DOWN_FACTOR=2600 -DEXTRA_TITLE \ -D__USE_WAIT_V_SYNC -DDEBUG_GHOST_DISPLAY \ \ $(ASSETS_PATH)/cc65_udc.s \ $(CROSS_LIB_PATH)/display/init_graphics/cc65/vic20/vic20_init_graphics.c \ $(CROSS_LIB_PATH)/sound/cc65/vic20/vic20_sounds.c \ $(FULL_FILES) \ -o $(BUILD_PATH)/X$(GAME_NAME)_$@.prg vic20: vic20_exp_8k # broken with VERSION=2 # vic20_exp_16k: $(ASSETS_PATH)/cc65_udc.s # $(CC65_PATH)$(MYCC65) $(INCLUDE_OPTS) -Or -Cl -t vic20 \ # --config $(CFG_PATH)/cc65/vic20-16k_GFX.cfg -DEXTRA_TITLE \ # -D__CONIO_GRAPHICS -D__VIC20_EXP_16K -D_XL_SLOW_DOWN_FACTOR=2800 \ # \ # \ # $(ASSETS_PATH)/cc65_udc.s \ # $(CROSS_LIB_PATH)/display/init_graphics/cc65/vic20/vic20_init_graphics.c \ # $(CROSS_LIB_PATH)/sound/cc65/vic20/vic20_sounds.c \ # $(SOURCE_PATH)/end_screen.c \ # $(FULL_FILES) \ # -o $(BUILD_PATH)/X$(GAME_NAME)_$@.prg # broken with VERSION=2 vic20_exp_16k: $(ASSETS_PATH)/cc65_udc_arcade_v2.s $(CC65_PATH)$(MYCC65) $(INCLUDE_OPTS) -Or -Cl -t vic20 \ --config $(CFG_PATH)/cc65/vic20-16k_CODE2_GFX_ALT_V2.cfg \ -DEXTRA_TITLE \ -D__CONIO_GRAPHICS -D__VIC20_EXP_16K -D_XL_SLOW_DOWN_FACTOR=2800 \ \ \ $(ASSETS_PATH)/cc65_udc_arcade_v2.s \ $(CROSS_LIB_PATH)/display/init_graphics/cc65/vic20/vic20_init_graphics.c \ $(CROSS_LIB_PATH)/sound/cc65/vic20/vic20_sounds.c \ $(FULL_FILES) \ -o $(BUILD_PATH)/X$(GAME_NAME)_$@.prg # vic20_test2: $(ASSETS_PATH)/cc65_udc_arcade_v2.s # $(CC65_PATH)$(MYCC65) $(INCLUDE_OPTS) -Or -Cl -t vic20 \ # --config $(CFG_PATH)/cc65/vic20-16k_CODE2_GFX_ALT_V2.cfg \ # -D__CONIO_GRAPHICS -D__VIC20_EXP_16K -DEXTRA_TITLE -D__ALT_SLEEP \ # -D_XL_SLOW_DOWN_FACTOR=500 -DGHOSTS_NUMBER=8 \ # -DTRANSITION_ANIMATION \ # $(ASSETS_PATH)/cc65_udc_arcade_v2.s \ # $(BASIC_CROSS_LIB_FILES) \ # $(SOURCE_PATH)/move_player.c \ # $(SOURCE_PATH)/ghost.c $(SOURCE_PATH)/level.c $(SOURCE_PATH)/character.c $(SOURCE_PATH)/game_text.c \ # $(SOURCE_PATH)/main.c \ # $(SOURCE_PATH)/init_images.c \ # $(SOURCE_PATH)/strategy.c \ # $(SOURCE_PATH)/item.c $(SOURCE_PATH)/bullet.c \ # $(CROSS_LIB_PATH)/sound/cc65/vic20/vic20_sounds.c \ # $(CROSS_LIB_PATH)/sleep/sleep_macros.c \ # --code-name CODE2 \ # $(SOURCE_PATH)/horizontal_missile.c $(SOURCE_PATH)/rocket.c $(SOURCE_PATH)/skull.c \ # $(CROSS_LIB_PATH)/display/init_graphics/cc65/vic20/vic20_init_graphics.c \ # $(SOURCE_PATH)/end_screen.c $(SOURCE_PATH)/sleep.c \ # -o $(BUILD_PATH)/X$(GAME_NAME)_$@.prg test_vsync: $(CC65_PATH)$(MYCC65) $(INCLUDE_OPTS) -Or -t vic20 $(TEST_PATH)/test_vsync.c -o $(BUILD_PATH)/test_vsync.prg vic20_exp_3k: $(ASSETS_PATH)/cc65_udc_vic20_64_chars.s $(CC65_PATH)$(MYCC65) $(INCLUDE_OPTS) -Or -Cl -t vic20 \ --config $(CFG_PATH)/cc65/vic20-3k_GFX.cfg \ -DGHOSTS_NUMBER=8 \ \ \ \ \ -D__VIC20_EXP_3K \ -D__MEMORY_MAPPED_GRAPHICS \ -DUSE_LIGHT_MEMORY_BUFFERS \ -DNO_HINTS \ -DLESS_TEXT \ -D_XL_NO_TEXT_COLOR \ -DNO_BLINKING \ -D_XL_NO_SLEEP -DNO_STATS \ -D__ALT_DISPLAY_STATS \ -D__ALT_HIGHSCORE \ $(CROSS_LIB_PATH)/display/alt_print/simple_alt_stats.c \ $(CROSS_LIB_PATH)/display/init_graphics/cc65/vic20/vic20_init_graphics.c \ $(CROSS_LIB_PATH)/sound/cc65/vic20/vic20_sounds.c \ $(LIGHT_FILES) \ $(ASSETS_PATH)/cc65_udc_vic20_64_chars.s \ $(SOURCE_PATH)/memory/vic20_memory.s \ -o $(BUILD_PATH)/X$(GAME_NAME)_LIGHT_$@.prg # OK with API version 2 vic20_exp_8k: $(ASSETS_PATH)/cc65_udc_vic20_27_tiles.s $(CC65_PATH)$(MYCC65) $(INCLUDE_OPTS) -Or -Cl -t vic20 \ --config $(CFG_PATH)/cc65/vic20-8k_memory_mapped_GFX.cfg -DEXTRA_TITLE \ \ \ -D_XL_SLOW_DOWN_FACTOR=2800 \ -D__MEMORY_MAPPED_GRAPHICS -D__VIC20__ -D__VIC20_EXP_8K \ \ -DSIMPLE_STRATEGY \ \ -D__ALT_PRINT \ -DNO_HINTS \ -DLESS_TEXT \ -D__DEFAULT_CLEAR_SCREEN \ -D__ALT_SLEEP \ -DUSE_MEMORY_BUFFERS \ \ $(ASSETS_PATH)/cc65_udc_vic20_27_tiles.s \ $(CROSS_LIB_PATH)/display/init_graphics/cc65/vic20/vic20_init_graphics.c \ $(SOURCE_PATH)/level.c $(SOURCE_PATH)/character.c \ $(SOURCE_PATH)/game_text.c \ $(SOURCE_PATH)/ghost.c $(CROSS_LIB_PATH)/input/input_macros.c \ $(SOURCE_PATH)/strategy.c $(SOURCE_PATH)/bullet.c \ $(SOURCE_PATH)/move_player.c \ $(SOURCE_PATH)/item.c \ $(SOURCE_PATH)/skull.c \ $(SOURCE_PATH)/rocket.c \ $(CROSS_LIB_PATH)/display/display_macros.c \ $(SOURCE_PATH)/horizontal_missile.c \ --code-name CODE2 \ $(CROSS_LIB_PATH)/sleep/sleep_macros.c \ $(SOURCE_PATH)/init_images.c \ $(CROSS_LIB_PATH)/sound/cc65/vic20/vic20_sounds.c \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c \ $(SOURCE_PATH)/main.c \ $(SOURCE_PATH)/memory/vic20_memory.s \ -o $(BUILD_PATH)/X$(GAME_NAME)_$@.prg # OK with API version 2 ? vic20_exp_8k_wait_vsync: $(ASSETS_PATH)/cc65_udc_vic20_27_tiles.s $(CC65_PATH)$(MYCC65) $(INCLUDE_OPTS) -Or -Cl -t vic20 \ --config $(CFG_PATH)/cc65/vic20-8k_memory_mapped_GFX.cfg \ \ \ -D_XL_SLOW_DOWN_FACTOR=2300 -D__USE_WAIT_V_SYNC -DDEBUG_GHOST_DISPLAY \ -D__MEMORY_MAPPED_GRAPHICS -D__VIC20__ -D__VIC20_EXP_8K \ \ -DSIMPLE_STRATEGY \ \ -D__ALT_PRINT \ -DNO_HINTS \ -DLESS_TEXT \ -D__DEFAULT_CLEAR_SCREEN \ -D__ALT_SLEEP \ -DUSE_MEMORY_BUFFERS \ \ /$(ASSETS_PATH)/cc65_udc_vic20_27_tiles.s \ $(CROSS_LIB_PATH)/display/init_graphics/cc65/vic20/vic20_init_graphics.c \ $(SOURCE_PATH)/level.c $(SOURCE_PATH)/character.c \ $(SOURCE_PATH)/game_text.c $(CROSS_LIB_PATH)/text/text_macros.c \ $(SOURCE_PATH)/ghost.c $(CROSS_LIB_PATH)/input/input_macros.c \ $(SOURCE_PATH)/strategy.c $(SOURCE_PATH)/bullet.c \ $(SOURCE_PATH)/move_player.c \ $(SOURCE_PATH)/item.c \ $(SOURCE_PATH)/skull.c \ $(SOURCE_PATH)/rocket.c \ $(CROSS_LIB_PATH)/display/display_macros.c \ $(SOURCE_PATH)/horizontal_missile.c \ $(CROSS_LIB_PATH)/sleep/sleep_macros.c \ --code-name CODE2 \ $(SOURCE_PATH)/init_images.c \ $(CROSS_LIB_PATH)/sound/cc65/vic20/vic20_sounds.c \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c \ $(SOURCE_PATH)/main.c \ $(SOURCE_PATH)/memory/vic20_memory.s \ -o $(BUILD_PATH)/X$(GAME_NAME)_$@.prg # broken with API version 2 vic20_unexpanded: $(ASSETS_PATH)/cc65_udc_6chars.s $(CC65_PATH)$(MYCC65) $(INCLUDE_OPTS) -Or -Cl -t vic20 \ \ \ -DNO_CONTROL_INSTRUCTIONS \ -D_XL_NO_TEXT_COLOR \ -D__VIC20_UNEXPANDED \ -D_XL_NO_SLEEP \ -DLESS_TEXT \ -D__NO_SCREEN_COLOR_INIT \ -DTINY_GAME -DNO_WALL -DNO_BLINKING \ -DNO_STATS \ -DGHOSTS_NUMBER=8 \ -DNO_DEAD_GHOSTS \ -DBOMBS_NUMBER=4 \ -D__MEMORY_MAPPED_GRAPHICS \ -D__ALT_HIGHSCORE \ -D__ALT_DISPLAY_STATS \ -D__DEFAULT_CLEAR_SCREEN \ -DUSE_TINY_MEMORY_BUFFERS \ -DROUND_ENEMIES \ -DSIMPLE_RANDOM_LEVEL \ --config $(CFG_PATH)/cc65/vic20_unexpanded_gfx.cfg \ $(TINY_FILES) \ $(CROSS_LIB_PATH)/sound/cc65/vic20/vic20_explosion_sound.c \ $(SOURCE_PATH)/memory/vic20_memory.s \ $(CROSS_LIB_PATH)/display/init_graphics/cc65/vic20/vic20_init_graphics.c \ $(CROSS_LIB_PATH)/display/alt_print/simple_alt_stats.c \ $(ASSETS_PATH)/cc65_udc_6chars.s \ -o $(BUILD_PATH)/X$(GAME_NAME)_TINY_$@.prg ================================================ FILE: src/games/chase/makefiles.chase/Makefile.cmoc_targets ================================================ # ------------------------------------------------------------------------------------------ # CMOC # COCO_OPTS_TINY = $(CMOC_MAKEFILE_COMPILATION_OPTS) -Wno-const -D__COCO__ -DTINY_GAME COCO_OPTS_LIGHT = $(CMOC_MAKEFILE_COMPILATION_OPTS) -Wno-const -D__COCO__ CMOC_OPTS = $(CMOC_MAKEFILE_COMPILATION_OPTS) -Wno-const -D__DEFAULT_CLEAR_SCREEN -D__CMOC__ -D__ALT_SLEEP -D__ALT_PRINT -DLESS_TEXT NO_UDG_OPS = $(CMOC_OPTS) -D__MEMORY_MAPPED_GRAPHICS -D__NO_INIT_GRAPHICS -D_XL_SLOW_DOWN_FACTOR=4000 GFX_OPTS = $(CMOC_OPTS) -D__BIT_MAPPED_GRAPHICS -D_XL_SLOW_DOWN_FACTOR=150 COCO_OPTS = -D__COCO__ $(NO_UDG_OPS) -DEXTRA_TITLE COCO_GFX_OPTS = -D__COCO__ $(GFX_OPTS) -D_XL_NO_COLOR -DEXTRA_TITLE GFX_COLOR_OPTS = $(CMOC_OPTS) -D__ALT_PRINT COCO_COLOR_GFX_OPTS = -D__COCO__ $(GFX_COLOR_OPTS) -D__BIT_MAPPED_4_GRAPHICS -D__BIT_MAPPED_GRAPHICS -DMAX_ARROWS_ON_SCREEN=7 -DFASTER_WALL_REDRAW -DNUMBER_OF_MISSILES=4 -D_XL_SLOW_DOWN_FACTOR=1800 COCO_COLOR_GFX_COMPILE_OPTS = $(COCO_COLOR_GFX_OPTS) -DYSize=24 -DEXTRA_TITLE COCO3_GFX_OPTS = -D__COCO__ $(CMOC_OPTS) DRAGON_OPTS = --dragon -D__DRAGON__ $(COCO_OPTS) DRAGON_GFX_OPTS = -D__DRAGON__ $(GFX_OPTS) -D_XL_NO_COLOR VECTREX_OPTS ?= -O0 --vectrex -D_XL_NO_SLEEP -D__NO_WAIT -DNO_INPUT -DNO_PRINT -Wno-const -D__DEFAULT_CLEAR_SCREEN -D__CMOC__ -D__VECTREX__ -D__VECTORIAL_GRAPHICS -D__NO_INIT_GRAPHICS -D__ALT_PRINT -DLESS_TEXT # -D__DEFAULT_CLEAR_SCREEN MO5_OPTS ?= $(CMOC_MAKEFILE_COMPILATION_OPTS) -DEXTRA_TITLE -D_XL_SLOW_DOWN_FACTOR=800 -D__ALT_SLEEP -Wno-const -D__CMOC__ -D__MO5__ -D__BIT_MAPPED_GRAPHICS -D__ALT_PRINT -DLESS_TEXT TO7_OPTS ?= $(CMOC_MAKEFILE_COMPILATION_OPTS) -D_XL_SLOW_DOWN_FACTOR=1000 -D__ALT_SLEEP -Wno-const -D__CMOC__ -D__TO7__ -D__BIT_MAPPED_GRAPHICS -D__ALT_PRINT -DLESS_TEXT TO7_ORG_DATA ?= --org=a000 # --data=D400 ################################################################################ # cmoc_targets: \ # coco_targets \ # dragon_targets \ # mo5_targets \ # to7_targets ############################################################################################# dragon: dragon_gfx dragon_no_gfx: $(CMOC) \ $(DRAGON_OPTS) $(INCLUDE_OPTS) \ -c $(CROSS_LIB_PATH)/sleep/sleep_macros.c $(CMOC) \ $(DRAGON_OPTS) $(INCLUDE_OPTS) \ -c $(CROSS_LIB_PATH)/sound/generic/dac_sounds.c $(CMOC) \ $(DRAGON_OPTS) $(INCLUDE_OPTS) \ -c $(CROSS_LIB_PATH)/display/display_macros.c $(CMOC) \ $(DRAGON_OPTS) $(INCLUDE_OPTS) \ -c $(SOURCE_PATH)/init_images.c $(CMOC) \ $(DRAGON_OPTS) $(INCLUDE_OPTS) \ -c $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c $(CMOC) \ $(DRAGON_OPTS) $(INCLUDE_OPTS) \ -c $(CROSS_LIB_PATH)/input/input_macros.c $(CMOC) \ $(DRAGON_OPTS) $(INCLUDE_OPTS) \ -c $(SOURCE_PATH)/move_player.c $(CMOC) \ $(DRAGON_OPTS) $(INCLUDE_OPTS) \ -c $(SOURCE_PATH)/ghost.c $(CMOC) \ $(DRAGON_OPTS) $(INCLUDE_OPTS) \ -c $(SOURCE_PATH)/level.c $(CMOC) \ $(DRAGON_OPTS) $(INCLUDE_OPTS) \ -c $(SOURCE_PATH)/character.c $(CMOC) \ $(DRAGON_OPTS) $(INCLUDE_OPTS) \ -c $(SOURCE_PATH)/game_text.c $(CMOC) \ $(DRAGON_OPTS) $(INCLUDE_OPTS) \ -c $(SOURCE_PATH)/strategy.c $(CMOC) \ $(DRAGON_OPTS) $(INCLUDE_OPTS) \ -c $(SOURCE_PATH)/item.c $(CMOC) \ $(DRAGON_OPTS) $(INCLUDE_OPTS) \ -c $(SOURCE_PATH)/bullet.c $(CMOC) \ $(DRAGON_OPTS) $(INCLUDE_OPTS) \ -c $(SOURCE_PATH)/skull.c $(CMOC) \ $(DRAGON_OPTS) $(INCLUDE_OPTS) \ -c $(SOURCE_PATH)/horizontal_missile.c $(CMOC) \ $(DRAGON_OPTS) $(INCLUDE_OPTS) \ -c $(SOURCE_PATH)/rocket.c $(CMOC) \ $(DRAGON_OPTS) $(INCLUDE_OPTS) \ -c $(SOURCE_PATH)/end_screen.c $(CMOC) -o $(BUILD_PATH)/xchase.bin \ $(DRAGON_OPTS) $(INCLUDE_OPTS) \ $(SOURCE_PATH)/main.c sleep_macros.o \ display_macros.o dac_sounds.o \ init_images.o \ memory_mapped_alt_print.o \ ghost.o \ move_player.o \ level.o character.o \ game_text.o \ strategy.o \ input_macros.o \ item.o bullet.o skull.o \ rocket.o horizontal_missile.o end_screen.o rm display_macros.o dac_sounds.o sleep_macros.o \ init_images.o \ memory_mapped_alt_print.o \ ghost.o \ move_player.o \ level.o character.o \ game_text.o \ strategy.o \ input_macros.o \ item.o bullet.o skull.o \ rocket.o horizontal_missile.o end_screen.o $(TOOLS_PATH)/cmoc/dragon/bin2cas.pl -o $(BUILD_PATH)/X$(GAME_NAME)_$@..cas -D $(BUILD_PATH)/xchase.bin -A $(TOOLS_PATH)/cmoc/dragon/File2VDK.exe $(BUILD_PATH)/xchase.bin mv $(BUILD_PATH)/xchase.bin.vdk $(BUILD_PATH)/X$(GAME_NAME)_$@.vdk mv $(BUILD_PATH)/xchase.bin $(BUILD_PATH)/X$(GAME_NAME)_$@.bin dragon_gfx: $(ASSETS_PATH)/cmoc_udc_tiles_and_fonts.s $(CMOC) \ $(DRAGON_GFX_OPTS) $(INCLUDE_OPTS) \ -c $(CROSS_LIB_PATH)/sleep/sleep_macros.c $(CMOC) \ $(DRAGON_GFX_OPTS) $(INCLUDE_OPTS) \ -c $(CROSS_LIB_PATH)/sound/generic/dac_sounds.c $(CMOC) \ $(DRAGON_GFX_OPTS) $(INCLUDE_OPTS) \ -c $(ASSETS_PATH)/cmoc_udc_tiles_and_fonts.s $(CMOC) \ $(DRAGON_GFX_OPTS) $(INCLUDE_OPTS) \ -c $(CROSS_LIB_PATH)/display/display_macros.c $(CMOC) \ $(DRAGON_GFX_OPTS) $(INCLUDE_OPTS) \ -c $(CROSS_LIB_PATH)/display/init_graphics/cmoc/coco/coco_init_graphics.c $(CMOC) \ $(DRAGON_GFX_OPTS) $(INCLUDE_OPTS) \ -c $(SOURCE_PATH)/init_images.c $(CMOC) \ $(DRAGON_GFX_OPTS) $(INCLUDE_OPTS) \ -c $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c $(CMOC) \ $(DRAGON_GFX_OPTS) $(INCLUDE_OPTS) \ -c $(CROSS_LIB_PATH)/input/input_macros.c $(CMOC) \ $(DRAGON_GFX_OPTS) $(INCLUDE_OPTS) \ -c $(SOURCE_PATH)/move_player.c $(CMOC) \ $(DRAGON_GFX_OPTS) $(INCLUDE_OPTS) \ -c $(SOURCE_PATH)/ghost.c $(CMOC) \ $(DRAGON_GFX_OPTS) $(INCLUDE_OPTS) \ -c $(SOURCE_PATH)/level.c $(CMOC) \ $(DRAGON_GFX_OPTS) $(INCLUDE_OPTS) \ -c $(SOURCE_PATH)/character.c $(CMOC) \ $(DRAGON_GFX_OPTS) $(INCLUDE_OPTS) \ -c $(SOURCE_PATH)/game_text.c $(CMOC) \ $(DRAGON_GFX_OPTS) $(INCLUDE_OPTS) \ -c $(SOURCE_PATH)/strategy.c $(CMOC) \ $(DRAGON_GFX_OPTS) $(INCLUDE_OPTS) \ -c $(SOURCE_PATH)/item.c $(CMOC) \ $(DRAGON_GFX_OPTS) $(INCLUDE_OPTS) \ -c $(SOURCE_PATH)/bullet.c $(CMOC) \ $(DRAGON_GFX_OPTS) $(INCLUDE_OPTS) \ -c $(SOURCE_PATH)/skull.c $(CMOC) \ $(DRAGON_GFX_OPTS) $(INCLUDE_OPTS) \ -c $(SOURCE_PATH)/horizontal_missile.c $(CMOC) \ $(DRAGON_GFX_OPTS) $(INCLUDE_OPTS) \ -c $(SOURCE_PATH)/rocket.c $(CMOC) \ $(DRAGON_GFX_OPTS) $(INCLUDE_OPTS) \ -c $(SOURCE_PATH)/end_screen.c $(CMOC) -o $(BUILD_PATH)/xchase.bin \ $(DRAGON_GFX_OPTS) $(INCLUDE_OPTS) \ $(SOURCE_PATH)/main.c sleep_macros.o \ display_macros.o \ init_images.o coco_init_graphics.o \ memory_mapped_alt_print.o \ ghost.o dac_sounds.o \ move_player.o \ level.o character.o \ game_text.o \ strategy.o \ input_macros.o cmoc_udc_tiles_and_fonts.o \ item.o bullet.o skull.o \ rocket.o horizontal_missile.o end_screen.o rm display_macros.o dac_sounds.o sleep_macros.o \ init_images.o coco_init_graphics.o \ memory_mapped_alt_print.o \ ghost.o \ move_player.o \ level.o character.o \ game_text.o \ strategy.o cmoc_udc_tiles_and_fonts.o \ input_macros.o \ item.o bullet.o skull.o \ rocket.o horizontal_missile.o end_screen.o $(TOOLS_PATH)/cmoc/dragon/bin2cas.pl -o $(BUILD_PATH)/X$(GAME_NAME)_$@.cas -D $(BUILD_PATH)/xchase.bin -A ifeq ($(DO_WIN),1) $(TOOLS_PATH)/cmoc/dragon/File2VDK.exe $(BUILD_PATH)/xchase.bin mv $(BUILD_PATH)/xchase.bin.vdk $(BUILD_PATH)/X$(GAME_NAME)_$@.vdk endif rm $(BUILD_PATH)/xchase.bin dragon_targets: \ dragon_gfx coco: coco_gfx coco_no_gfx: $(TOOLS_PATH)/cmoc/coco/file2dsk/file2dsk$(COMPILEDEXT) $(CMOC) \ $(COCO_OPTS) $(INCLUDE_OPTS) \ -c $(CROSS_LIB_PATH)/sleep/sleep_macros.c $(CMOC) \ $(COCO_OPTS) $(INCLUDE_OPTS) \ -c $(CROSS_LIB_PATH)/sound/generic/dac_sounds.c $(CMOC) \ $(COCO_OPTS) $(INCLUDE_OPTS) \ -c $(CROSS_LIB_PATH)/display/display_macros.c $(CMOC) \ $(COCO_OPTS) $(INCLUDE_OPTS) \ -c $(SOURCE_PATH)/init_images.c $(CMOC) \ $(COCO_OPTS) $(INCLUDE_OPTS) \ -c $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c $(CMOC) \ $(COCO_OPTS) $(INCLUDE_OPTS) \ -c $(CROSS_LIB_PATH)/input/input_macros.c $(CMOC) \ $(COCO_OPTS) $(INCLUDE_OPTS) \ -c $(SOURCE_PATH)/move_player.c $(CMOC) \ $(COCO_OPTS) $(INCLUDE_OPTS) \ -c $(SOURCE_PATH)/ghost.c $(CMOC) \ $(COCO_OPTS) $(INCLUDE_OPTS) \ -c $(SOURCE_PATH)/level.c $(CMOC) \ $(COCO_OPTS) $(INCLUDE_OPTS) \ -c $(SOURCE_PATH)/character.c $(CMOC) \ $(COCO_OPTS) $(INCLUDE_OPTS) \ -c $(SOURCE_PATH)/game_text.c $(CMOC) \ $(COCO_OPTS) $(INCLUDE_OPTS) \ -c $(SOURCE_PATH)/strategy.c $(CMOC) \ $(COCO_OPTS) $(INCLUDE_OPTS) \ -c $(SOURCE_PATH)/item.c $(CMOC) \ $(COCO_OPTS) $(INCLUDE_OPTS) \ -c $(SOURCE_PATH)/bullet.c $(CMOC) \ $(COCO_OPTS) $(INCLUDE_OPTS) \ -c $(SOURCE_PATH)/skull.c $(CMOC) \ $(COCO_OPTS) $(INCLUDE_OPTS) \ -c $(SOURCE_PATH)/horizontal_missile.c $(CMOC) \ $(COCO_OPTS) $(INCLUDE_OPTS) \ -c $(SOURCE_PATH)/rocket.c $(CMOC) \ $(COCO_OPTS) $(INCLUDE_OPTS) \ -c $(SOURCE_PATH)/end_screen.c $(CMOC) -o $(BUILD_PATH)/X$(GAME_NAME)_$@.bin \ $(COCO_OPTS) $(INCLUDE_OPTS) \ $(SOURCE_PATH)/main.c sleep_macros.o \ display_macros.o dac_sounds.o \ init_images.o \ memory_mapped_alt_print.o \ ghost.o \ move_player.o \ level.o character.o \ game_text.o \ strategy.o \ input_macros.o \ item.o bullet.o skull.o \ rocket.o horizontal_missile.o end_screen.o rm display_macros.o dac_sounds.o sleep_macros.o \ init_images.o \ memory_mapped_alt_print.o \ ghost.o \ move_player.o \ level.o character.o \ game_text.o \ strategy.o \ input_macros.o \ item.o bullet.o skull.o \ rocket.o horizontal_missile.o end_screen.o rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.dsk cp $(BUILD_PATH)/X$(GAME_NAME)_$@.bin XCHASE.BIN $(TOOLS_PATH)/cmoc/coco/file2dsk/file2dsk$(COMPILEDEXT) XCHASE.BIN mv XCHASE.DSK $(BUILD_PATH)/X$(GAME_NAME)_$@.dsk $(TOOLS_PATH)/cmoc/dragon/bin2cas.pl -o $(BUILD_PATH)/X$(GAME_NAME)_$@.cas -C XCHASE.BIN -A rm XCHASE.BIN coco_gfx: $(ASSETS_PATH)/cmoc_udc_tiles_and_fonts.s $(TOOLS_PATH)/cmoc/coco/file2dsk/file2dsk$(COMPILEDEXT) $(CMOC) \ $(COCO_GFX_OPTS) $(INCLUDE_OPTS) \ -c $(CROSS_LIB_PATH)/sound/generic/dac_sounds.c $(CMOC) \ $(COCO_GFX_OPTS) $(INCLUDE_OPTS) \ -c $(ASSETS_PATH)/cmoc_udc_tiles_and_fonts.s $(CMOC) \ $(COCO_GFX_OPTS) $(INCLUDE_OPTS) \ -c $(CROSS_LIB_PATH)/display/display_macros.c $(CMOC) \ $(COCO_GFX_OPTS) $(INCLUDE_OPTS) \ -c $(CROSS_LIB_PATH)/display/init_graphics/cmoc/coco/coco_init_graphics.c $(CMOC) \ $(COCO_GFX_OPTS) $(INCLUDE_OPTS) \ -c $(SOURCE_PATH)/init_images.c $(CMOC) \ $(COCO_GFX_OPTS) $(INCLUDE_OPTS) \ -c $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c $(CMOC) \ $(COCO_GFX_OPTS) $(INCLUDE_OPTS) \ -c $(CROSS_LIB_PATH)/input/input_macros.c $(CMOC) \ $(COCO_GFX_OPTS) $(INCLUDE_OPTS) \ -c $(SOURCE_PATH)/move_player.c $(CMOC) \ $(COCO_GFX_OPTS) $(INCLUDE_OPTS) \ -c $(SOURCE_PATH)/ghost.c $(CMOC) \ $(COCO_GFX_OPTS) $(INCLUDE_OPTS) \ -c $(SOURCE_PATH)/level.c $(CMOC) \ $(COCO_GFX_OPTS) $(INCLUDE_OPTS) \ -c $(SOURCE_PATH)/character.c $(CMOC) \ $(COCO_GFX_OPTS) $(INCLUDE_OPTS) \ -c $(SOURCE_PATH)/game_text.c $(CMOC) \ $(COCO_GFX_OPTS) $(INCLUDE_OPTS) \ -c $(SOURCE_PATH)/strategy.c $(CMOC) \ $(COCO_GFX_OPTS) $(INCLUDE_OPTS) \ -c $(SOURCE_PATH)/item.c $(CMOC) \ $(COCO_GFX_OPTS) $(INCLUDE_OPTS) \ -c $(SOURCE_PATH)/bullet.c $(CMOC) \ $(COCO_GFX_OPTS) $(INCLUDE_OPTS) \ -c $(SOURCE_PATH)/skull.c $(CMOC) \ $(COCO_GFX_OPTS) $(INCLUDE_OPTS) \ -c $(SOURCE_PATH)/horizontal_missile.c $(CMOC) \ $(COCO_GFX_OPTS) $(INCLUDE_OPTS) \ -c $(SOURCE_PATH)/rocket.c $(CMOC) \ $(COCO_GFX_OPTS) $(INCLUDE_OPTS) \ -c $(SOURCE_PATH)/end_screen.c $(CMOC) \ $(COCO_COLOR_GFX_COMPILE_OPTS) $(INCLUDE_OPTS) \ -c $(CROSS_LIB_PATH)/sleep/sleep_macros.c $(CMOC) -o $(BUILD_PATH)/X$(GAME_NAME)_$@.bin \ $(COCO_GFX_OPTS) $(INCLUDE_OPTS) \ $(SOURCE_PATH)/main.c \ display_macros.o sleep_macros.o \ init_images.o coco_init_graphics.o \ memory_mapped_alt_print.o \ ghost.o dac_sounds.o \ move_player.o \ level.o character.o \ game_text.o \ strategy.o \ input_macros.o cmoc_udc_tiles_and_fonts.o \ item.o bullet.o skull.o \ rocket.o horizontal_missile.o end_screen.o rm display_macros.o dac_sounds.o sleep_macros.o \ init_images.o coco_init_graphics.o \ memory_mapped_alt_print.o \ ghost.o \ move_player.o \ level.o character.o \ game_text.o \ strategy.o cmoc_udc_tiles_and_fonts.o \ input_macros.o \ item.o bullet.o skull.o \ rocket.o horizontal_missile.o end_screen.o rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.dsk cp $(BUILD_PATH)/X$(GAME_NAME)_$@.bin XCHASE.BIN $(TOOLS_PATH)/cmoc/coco/file2dsk/file2dsk$(COMPILEDEXT) XCHASE.BIN mv XCHASE.DSK $(BUILD_PATH)/X$(GAME_NAME)_$@.dsk $(TOOLS_PATH)/cmoc/dragon/bin2cas.pl -o $(BUILD_PATH)/X$(GAME_NAME)_$@.cas -C XCHASE.BIN -A rm XCHASE.BIN rm $(BUILD_PATH)/X$(GAME_NAME)_$@.bin coco_color: $(ASSETS_PATH)/cmoc_udc_tiles_and_fonts.s $(TOOLS_PATH)/cmoc/coco/file2dsk/file2dsk$(COMPILEDEXT) $(CMOC) \ $(COCO_COLOR_GFX_COMPILE_OPTS) $(INCLUDE_OPTS) \ -c $(CROSS_LIB_PATH)/sleep/sleep_macros.c $(CMOC) \ $(COCO_COLOR_GFX_COMPILE_OPTS) $(INCLUDE_OPTS) \ -c $(CROSS_LIB_PATH)/sound/generic/dac_sounds.c $(CMOC) \ $(COCO_COLOR_GFX_COMPILE_OPTS) $(INCLUDE_OPTS) \ -c $(ASSETS_PATH)/cmoc_udc_tiles_and_fonts.s $(CMOC) \ $(COCO_COLOR_GFX_COMPILE_OPTS) $(INCLUDE_OPTS) \ -c $(CROSS_LIB_PATH)/display/display_macros.c $(CMOC) \ $(COCO_COLOR_GFX_COMPILE_OPTS) $(INCLUDE_OPTS) \ -c $(CROSS_LIB_PATH)/display/init_graphics/cmoc/coco/coco_init_graphics.c $(CMOC) \ $(COCO_COLOR_GFX_COMPILE_OPTS) $(INCLUDE_OPTS) \ -c $(SOURCE_PATH)/init_images.c $(CMOC) \ $(COCO_COLOR_GFX_COMPILE_OPTS) $(INCLUDE_OPTS) \ -c $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c $(CMOC) \ $(COCO_COLOR_GFX_COMPILE_OPTS) $(INCLUDE_OPTS) \ -c $(CROSS_LIB_PATH)/input/input_macros.c $(CMOC) \ $(COCO_COLOR_GFX_COMPILE_OPTS) $(INCLUDE_OPTS) \ -c $(SOURCE_PATH)/move_player.c $(CMOC) \ $(COCO_COLOR_GFX_COMPILE_OPTS) $(INCLUDE_OPTS) \ -c $(SOURCE_PATH)/ghost.c $(CMOC) \ $(COCO_COLOR_GFX_COMPILE_OPTS) $(INCLUDE_OPTS) \ -c $(SOURCE_PATH)/level.c $(CMOC) \ $(COCO_COLOR_GFX_COMPILE_OPTS) $(INCLUDE_OPTS) \ -c $(SOURCE_PATH)/character.c $(CMOC) \ $(COCO_COLOR_GFX_COMPILE_OPTS) $(INCLUDE_OPTS) \ -c $(SOURCE_PATH)/game_text.c $(CMOC) \ $(COCO_COLOR_GFX_COMPILE_OPTS) $(INCLUDE_OPTS) \ -c $(SOURCE_PATH)/strategy.c $(CMOC) \ $(COCO_COLOR_GFX_COMPILE_OPTS) $(INCLUDE_OPTS) \ -c $(SOURCE_PATH)/item.c $(CMOC) \ $(COCO_COLOR_GFX_COMPILE_OPTS) $(INCLUDE_OPTS) \ -c $(SOURCE_PATH)/bullet.c $(CMOC) \ $(COCO_COLOR_GFX_COMPILE_OPTS) $(INCLUDE_OPTS) \ -c $(SOURCE_PATH)/skull.c $(CMOC) \ $(COCO_COLOR_GFX_COMPILE_OPTS) $(INCLUDE_OPTS) \ -c $(SOURCE_PATH)/horizontal_missile.c $(CMOC) \ $(COCO_COLOR_GFX_COMPILE_OPTS) $(INCLUDE_OPTS) \ -c $(SOURCE_PATH)/rocket.c $(CMOC) \ $(COCO_COLOR_GFX_COMPILE_OPTS) $(INCLUDE_OPTS) \ -c $(SOURCE_PATH)/end_screen.c $(CMOC) -o $(BUILD_PATH)/X$(GAME_NAME)_$@.bin \ $(COCO_COLOR_GFX_COMPILE_OPTS) $(INCLUDE_OPTS) \ $(SOURCE_PATH)/main.c sleep_macros.o \ display_macros.o \ init_images.o coco_init_graphics.o \ memory_mapped_alt_print.o \ ghost.o dac_sounds.o \ move_player.o \ level.o character.o \ game_text.o \ strategy.o \ input_macros.o cmoc_udc_tiles_and_fonts.o \ item.o bullet.o skull.o \ rocket.o horizontal_missile.o end_screen.o rm display_macros.o dac_sounds.o sleep_macros.o \ init_images.o coco_init_graphics.o \ memory_mapped_alt_print.o \ ghost.o \ move_player.o \ level.o character.o \ game_text.o \ strategy.o cmoc_udc_tiles_and_fonts.o \ input_macros.o \ item.o bullet.o skull.o \ rocket.o horizontal_missile.o end_screen.o rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.dsk cp $(BUILD_PATH)/X$(GAME_NAME)_$@.bin XCHASE.BIN $(TOOLS_PATH)/cmoc/coco/file2dsk/file2dsk$(COMPILEDEXT) XCHASE.BIN mv XCHASE.DSK $(BUILD_PATH)/X$(GAME_NAME)_$@.dsk $(TOOLS_PATH)/cmoc/dragon/bin2cas.pl -o $(BUILD_PATH)/X$(GAME_NAME)_$@.cas -C XCHASE.BIN -A rm XCHASE.BIN rm $(BUILD_PATH)/X$(GAME_NAME)_$@.bin # coco_targets: \ # coco_no_gfx coco3: coco3_gfx coco3_gfx: $(ASSETS_PATH)/cmoc_udc_tiles_and_fonts.s $(TOOLS_PATH)/cmoc/coco/file2dsk/file2dsk$(COMPILEDEXT) $(CMOC) \ $(COCO_GFX_OPTS) $(INCLUDE_OPTS) \ -c $(CROSS_LIB_PATH)/sound/generic/dac_sounds.c $(CMOC) \ $(COCO_GFX_COMPILE_OPTS) $(INCLUDE_OPTS) \ -c $(ASSETS_PATH)/cmoc_udc_tiles_and_fonts.s $(CMOC) \ $(COCO_GFX_OPTS) $(INCLUDE_OPTS) \ -c $(CROSS_LIB_PATH)/display/display_macros.c $(CMOC) \ $(COCO_GFX_OPTS) $(INCLUDE_OPTS) \ -c $(CROSS_LIB_PATH)/display/init_graphics/cmoc/coco3/coco3_init_graphics.c $(CMOC) \ $(COCO_GFX_OPTS) $(INCLUDE_OPTS) \ -c $(SOURCE_PATH)/init_images.c $(CMOC) \ $(COCO_GFX_OPTS) $(INCLUDE_OPTS) \ -c $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c $(CMOC) \ $(COCO_GFX_OPTS) $(INCLUDE_OPTS) \ -c $(CROSS_LIB_PATH)/input/input_macros.c $(CMOC) \ $(COCO_GFX_OPTS) $(INCLUDE_OPTS) \ -c $(SOURCE_PATH)/move_player.c $(CMOC) \ $(COCO_GFX_OPTS) $(INCLUDE_OPTS) \ -c $(SOURCE_PATH)/ghost.c $(CMOC) \ $(COCO_GFX_OPTS) $(INCLUDE_OPTS) \ -c $(SOURCE_PATH)/level.c $(CMOC) \ $(COCO_GFX_OPTS) $(INCLUDE_OPTS) \ -c $(SOURCE_PATH)/character.c $(CMOC) \ $(COCO_GFX_OPTS) $(INCLUDE_OPTS) \ -c $(SOURCE_PATH)/game_text.c $(CMOC) \ $(COCO_GFX_OPTS) $(INCLUDE_OPTS) \ -c $(SOURCE_PATH)/strategy.c $(CMOC) \ $(COCO_GFX_OPTS) $(INCLUDE_OPTS) \ -c $(SOURCE_PATH)/item.c $(CMOC) \ $(COCO_GFX_OPTS) $(INCLUDE_OPTS) \ -c $(SOURCE_PATH)/bullet.c $(CMOC) \ $(COCO_GFX_OPTS) $(INCLUDE_OPTS) \ -c $(SOURCE_PATH)/skull.c $(CMOC) \ $(COCO_GFX_OPTS) $(INCLUDE_OPTS) \ -c $(SOURCE_PATH)/horizontal_missile.c $(CMOC) \ $(COCO_GFX_OPTS) $(INCLUDE_OPTS) \ -c $(SOURCE_PATH)/rocket.c $(CMOC) \ $(COCO_GFX_OPTS) $(INCLUDE_OPTS) \ -c $(SOURCE_PATH)/end_screen.c $(CMOC) -o $(BUILD_PATH)/X$(GAME_NAME)_$@.bin \ $(COCO_GFX_OPTS) $(INCLUDE_OPTS) \ $(SOURCE_PATH)/main.c \ display_macros.o dac_sounds.o \ init_images.o coco3_init_graphics.o \ memory_mapped_alt_print.o \ ghost.o \ move_player.o \ level.o character.o \ game_text.o \ strategy.o \ input_macros.o cmoc_udc_tiles_and_fonts.o \ item.o bullet.o skull.o \ rocket.o horizontal_missile.o end_screen.o rm display_macros.o dac_sounds.o \ init_images.o coco3_init_graphics.o \ memory_mapped_alt_print.o \ ghost.o \ move_player.o \ level.o character.o \ game_text.o \ strategy.o cmoc_udc_tiles_and_fonts.o \ input_macros.o \ item.o bullet.o skull.o \ rocket.o horizontal_missile.o end_screen.o rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.dsk cp $(BUILD_PATH)/X$(GAME_NAME)_$@.bin XCHASE.BIN $(TOOLS_PATH)/cmoc/coco/file2dsk/file2dsk$(COMPILEDEXT) XCHASE.BIN mv XCHASE.DSK $(BUILD_PATH)/X$(GAME_NAME)_$@.dsk $(TOOLS_PATH)/cmoc/dragon/bin2cas.pl -o $(BUILD_PATH)/X$(GAME_NAME)_$@.cas -C XCHASE.BIN -A rm XCHASE.BIN coco3_targets: \ coco3_gfx vectrex: $(CMOC) \ $(VECTREX_OPTS) $(INCLUDE_OPTS) \ -c $(CROSS_LIB_PATH)/display/display_macros.c $(CMOC) \ $(VECTREX_OPTS) $(INCLUDE_OPTS) \ -c $(SOURCE_PATH)/init_images.c $(CMOC) \ $(VECTREX_OPTS) $(INCLUDE_OPTS) \ -c $(CROSS_LIB_PATH)/input/input_macros.c $(CMOC) \ $(VECTREX_OPTS) $(INCLUDE_OPTS) \ -c $(SOURCE_PATH)/move_player.c $(CMOC) \ $(VECTREX_OPTS) $(INCLUDE_OPTS) \ -c $(SOURCE_PATH)/ghost.c $(CMOC) \ $(VECTREX_OPTS) $(INCLUDE_OPTS) \ -c $(SOURCE_PATH)/level.c $(CMOC) \ $(VECTREX_OPTS) $(INCLUDE_OPTS) \ -c $(SOURCE_PATH)/character.c $(CMOC) \ $(VECTREX_OPTS) $(INCLUDE_OPTS) \ -c $(SOURCE_PATH)/game_text.c $(CMOC) \ $(VECTREX_OPTS) $(INCLUDE_OPTS) \ -c $(SOURCE_PATH)/strategy.c $(CMOC) \ $(VECTREX_OPTS) $(INCLUDE_OPTS) \ -c $(SOURCE_PATH)/item.c $(CMOC) \ $(VECTREX_OPTS) $(INCLUDE_OPTS) \ -c $(SOURCE_PATH)/bullet.c $(CMOC) \ $(VECTREX_OPTS) $(INCLUDE_OPTS) \ -c $(SOURCE_PATH)/skull.c $(CMOC) \ $(VECTREX_OPTS) $(INCLUDE_OPTS) \ -c $(SOURCE_PATH)/horizontal_missile.c $(CMOC) \ $(VECTREX_OPTS) $(INCLUDE_OPTS) \ -c $(SOURCE_PATH)/rocket.c $(CMOC) \ $(VECTREX_OPTS) $(INCLUDE_OPTS) \ -c $(SOURCE_PATH)/end_screen.c $(CMOC) -o $(BUILD_PATH)/X$(GAME_NAME)_Vectrex.bin \ $(VECTREX_OPTS) $(INCLUDE_OPTS) \ $(SOURCE_PATH)/main.c \ display_macros.o \ init_images.o \ ghost.o \ move_player.o \ level.o character.o \ game_text.o \ strategy.o \ input_macros.o \ item.o bullet.o skull.o \ rocket.o horizontal_missile.o end_screen.o rm display_macros.o \ init_images.o \ ghost.o \ move_player.o \ level.o character.o \ game_text.o \ strategy.o \ input_macros.o \ item.o bullet.o skull.o \ rocket.o horizontal_missile.o end_screen.o vectrex_targets: \ vectrex mo5: $(ASSETS_PATH)/cmoc_udc_tiles.s $(TOOLS_PATH)/cmoc/mo5/f2k5$(COMPILEDEXT) $(TOOLS_PATH)/cmoc/mo5/sapfs$(COMPILEDEXT) $(CMOC) \ $(MO5_OPTS) $(INCLUDE_OPTS) \ -c $(CROSS_LIB_PATH)/sound/generic/dac_sounds.c $(CMOC) \ $(MO5_OPTS) $(INCLUDE_OPTS) \ -c $(CROSS_LIB_PATH)/display/alt_print/mo5_alt_print.c $(CMOC) \ $(MO5_OPTS) $(INCLUDE_OPTS) \ -c $(CROSS_LIB_PATH)/display/init_graphics/cmoc/mo5/mo5_init_graphics.c $(CMOC) \ $(MO5_OPTS) $(INCLUDE_OPTS) \ -c $(CROSS_LIB_PATH)/display/display_macros.c $(CMOC) \ $(MO5_OPTS) $(INCLUDE_OPTS) \ -c $(SOURCE_PATH)/init_images.c $(CMOC) \ $(MO5_OPTS) $(INCLUDE_OPTS) \ -c $(CROSS_LIB_PATH)/input/input_macros.c $(CMOC) \ $(MO5_OPTS) $(INCLUDE_OPTS) \ -c $(SOURCE_PATH)/move_player.c $(CMOC) \ $(MO5_OPTS) $(INCLUDE_OPTS) \ -c $(SOURCE_PATH)/ghost.c $(CMOC) \ $(MO5_OPTS) $(INCLUDE_OPTS) \ -c $(SOURCE_PATH)/level.c $(CMOC) \ $(MO5_OPTS) $(INCLUDE_OPTS) \ -c $(SOURCE_PATH)/character.c $(CMOC) \ $(MO5_OPTS) $(INCLUDE_OPTS) \ -c $(SOURCE_PATH)/game_text.c $(CMOC) \ $(MO5_OPTS) $(INCLUDE_OPTS) \ -c $(SOURCE_PATH)/strategy.c $(CMOC) \ $(MO5_OPTS) $(INCLUDE_OPTS) \ -c $(SOURCE_PATH)/item.c $(CMOC) \ $(MO5_OPTS) $(INCLUDE_OPTS) \ -c $(SOURCE_PATH)/bullet.c $(CMOC) \ $(MO5_OPTS) $(INCLUDE_OPTS) \ -c $(SOURCE_PATH)/skull.c $(CMOC) \ $(MO5_OPTS) $(INCLUDE_OPTS) \ -c $(SOURCE_PATH)/horizontal_missile.c $(CMOC) \ $(MO5_OPTS) $(INCLUDE_OPTS) \ -c $(SOURCE_PATH)/rocket.c $(CMOC) \ $(MO5_OPTS) $(INCLUDE_OPTS) \ -c $(SOURCE_PATH)/end_screen.c $(CMOC) \ $(MO5_OPTS) $(INCLUDE_OPTS) \ -c $(ASSETS_PATH)/cmoc_udc_tiles.s $(CMOC) -o $(BUILD_PATH)/FULL_MO5.bin \ $(MO5_OPTS) $(INCLUDE_OPTS) \ $(SOURCE_PATH)/main.c \ mo5_alt_print.o dac_sounds.o \ mo5_init_graphics.o \ display_macros.o \ cmoc_udc_tiles.o \ init_images.o \ ghost.o \ move_player.o \ level.o character.o \ game_text.o \ strategy.o \ input_macros.o \ item.o bullet.o skull.o \ rocket.o horizontal_missile.o end_screen.o rm \ mo5_alt_print.o dac_sounds.o \ cmoc_udc_tiles.o \ mo5_init_graphics.o \ display_macros.o \ init_images.o \ ghost.o \ move_player.o \ level.o character.o \ game_text.o \ strategy.o \ input_macros.o \ item.o bullet.o skull.o \ rocket.o horizontal_missile.o end_screen.o $(TOOLS_PATH)/cmoc/mo5/f2k5$(COMPILEDEXT) $(BUILD_PATH)/FULL_MO5.bin mv $(BUILD_PATH)/FULL_MO5.bin . $(TOOLS_PATH)/cmoc/mo5/sapfs$(COMPILEDEXT) -c X$(GAME_NAME)_MO5.sap $(TOOLS_PATH)/cmoc/mo5/sapfs$(COMPILEDEXT) --add X$(GAME_NAME)_MO5.sap FULL_MO5.bin mv ./X$(GAME_NAME)_MO5.sap $(BUILD_PATH) mv ./FILE.K5 $(BUILD_PATH)/X$(GAME_NAME)_MO5.k5 rm ./FULL_MO5.bin to7: $(ASSETS_PATH)/cmoc_udc_tiles.s $(TOOLS_PATH)/cmoc/mo5/sapfs$(COMPILEDEXT) $(CMOC) \ $(TO7_OPTS) $(INCLUDE_OPTS) \ -c $(CROSS_LIB_PATH)/sound/generic/dac_sounds.c $(CMOC) \ $(TO7_OPTS) $(INCLUDE_OPTS) \ -c $(CROSS_LIB_PATH)/display/alt_print/mo5_alt_print.c $(CMOC) \ $(TO7_OPTS) $(INCLUDE_OPTS) \ -c $(CROSS_LIB_PATH)/display/init_graphics/cmoc/mo5/mo5_init_graphics.c $(CMOC) \ $(TO7_OPTS) $(INCLUDE_OPTS) \ -c $(CROSS_LIB_PATH)/display/display_macros.c $(CMOC) \ $(TO7_OPTS) $(INCLUDE_OPTS) \ -c $(SOURCE_PATH)/init_images.c $(CMOC) \ $(TO7_OPTS) $(INCLUDE_OPTS) \ -c $(CROSS_LIB_PATH)/input/input_macros.c $(CMOC) \ $(TO7_OPTS) $(INCLUDE_OPTS) \ -c $(SOURCE_PATH)/move_player.c $(CMOC) \ $(TO7_OPTS) $(INCLUDE_OPTS) \ -c $(SOURCE_PATH)/ghost.c $(CMOC) \ $(TO7_OPTS) $(INCLUDE_OPTS) \ -c $(SOURCE_PATH)/level.c $(CMOC) \ $(TO7_OPTS) $(INCLUDE_OPTS) \ -c $(SOURCE_PATH)/character.c $(CMOC) \ $(TO7_OPTS) $(INCLUDE_OPTS) \ -c $(SOURCE_PATH)/game_text.c $(CMOC) \ $(TO7_OPTS) $(INCLUDE_OPTS) \ -c $(SOURCE_PATH)/strategy.c $(CMOC) \ $(TO7_OPTS) $(INCLUDE_OPTS) \ -c $(SOURCE_PATH)/item.c $(CMOC) \ $(TO7_OPTS) $(INCLUDE_OPTS) \ -c $(SOURCE_PATH)/bullet.c $(CMOC) \ $(TO7_OPTS) $(INCLUDE_OPTS) \ -c $(SOURCE_PATH)/skull.c $(CMOC) \ $(TO7_OPTS) $(INCLUDE_OPTS) \ -c $(SOURCE_PATH)/horizontal_missile.c $(CMOC) \ $(TO7_OPTS) $(INCLUDE_OPTS) \ -c $(SOURCE_PATH)/rocket.c $(CMOC) \ $(TO7_OPTS) $(INCLUDE_OPTS) \ -c $(ASSETS_PATH)/cmoc_udc_tiles.s $(CMOC) $(TO7_ORG_DATA) -o $(BUILD_PATH)/XLIB.bin \ $(TO7_OPTS) $(INCLUDE_OPTS) \ $(SOURCE_PATH)/main.c \ mo5_alt_print.o dac_sounds.o \ mo5_init_graphics.o \ display_macros.o \ cmoc_udc_tiles.o \ init_images.o \ ghost.o \ move_player.o \ level.o character.o \ game_text.o \ strategy.o \ input_macros.o \ item.o bullet.o skull.o \ rocket.o horizontal_missile.o rm \ mo5_alt_print.o dac_sounds.o \ cmoc_udc_tiles.o \ mo5_init_graphics.o \ display_macros.o \ init_images.o \ ghost.o \ move_player.o \ level.o character.o \ game_text.o \ strategy.o \ input_macros.o \ item.o bullet.o skull.o \ rocket.o horizontal_missile.o mv $(BUILD_PATH)/XLIB.bin . $(TOOLS_PATH)/cmoc/mo5/sapfs$(COMPILEDEXT) -c XLIB.sap $(TOOLS_PATH)/cmoc/mo5/sapfs$(COMPILEDEXT) --add XLIB.sap XLIB.bin rm ./XLIB.bin mv ./XLIB.sap $(BUILD_PATH)/X$(GAME_NAME)_TO7.sap to7_targets: \ to7 mo5_targets: \ mo5 ================================================ FILE: src/games/chase/makefiles.chase/Makefile.cross-dev-kit_targets ================================================ # ------------------------------------------------------------------------------------------ # CROSSS-DEV-KIT # c128_targets: \ c128_8502_targets c128_z80_targets cpm_targets: \ cpm_8080_targets cpm_z80_targets ================================================ FILE: src/games/chase/makefiles.chase/Makefile.emcc_targets ================================================ # ------------------------------------------------------------------------------------------ # EMCC EM_CC ?= emcc EM_OPTS = ############################################################################################## emcc_targets: \ emcc_buffered ############################################################################################## emcc: emcc_buffered emcc_buffered: $(EM_CC) $(INCLUDE_OPTS) \ -D__EMCC__ \ -D__NORMALIZED_RAND \ -DXSize=48 \ -DYSize=9 \ -D__STDIO \ -D_XL_NO_COLOR \ -D_XL_NO_SLEEP \ \ -DTURN_BASED \ -D__BUFFERED_GRAPHICS \ -D__NO_INIT_GRAPHICS \ -D__ALT_PRINT -D__NO_WAIT \ -D__DEFAULT_CLEAR_SCREEN \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c \ $(FULL_FILES) \ -o FULL_emcc_buffered.html mv FULL_emcc_buffered.js $(BUILD_PATH) mv FULL_emcc_buffered.wasm $(BUILD_PATH) mv FULL_emcc_buffered.html $(BUILD_PATH) cp $(BUILD_PATH)/X$(GAME_NAME)_emcc_buffered.* /home/fcaruso/build/emsdk emcc_exp: $(EM_CC) $(INCLUDE_OPTS) \ -D__EMCC__ \ -D__NORMALIZED_RAND \ -DXSize=80 \ -DYSize=24 \ -D__STDIO \ -D_XL_NO_COLOR \ -D_XL_NO_SLEEP -DNO_INPUT -D__NO_WAIT \ \ -DTURN_BASED \ -D__BUFFERED_GRAPHICS \ -D__NO_INIT_GRAPHICS \ -D__ALT_PRINT \ -D__DEFAULT_CLEAR_SCREEN \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c \ $(FULL_FILES) \ -o FULL_emcc_buffered.html mv FULL_emcc_buffered.js $(BUILD_PATH) mv FULL_emcc_buffered.wasm $(BUILD_PATH) mv FULL_emcc_buffered.html $(BUILD_PATH) cp $(BUILD_PATH)/X$(GAME_NAME)_emcc_buffered.* /home/fcaruso/build/emsdk ================================================ FILE: src/games/chase/makefiles.chase/Makefile.gcc_amiga_targets ================================================ # ------------------------------------------------------------------------------------------ # GCC AMIGA ############################################################################################## amiga_targets: \ amiga_buffered gcc_amiga_targets: \ amiga_targets # ------------------------------------------------------------------------------------------- amiga_core_test: $(AMIGA_CC) -mcrt=nix13 \ $(SOURCE_PATH)/../test/main_use_amiga_core.c amiga: amiga_buffered amiga_buffered: $(AMIGA_CC) $(INCLUDE_OPTS) -mcrt=nix13 \ -D__AMIGA__ \ -D__NORMALIZED_RAND \ -DXSize=39 \ -DYSize=22 \ -D__STDIO \ -D_XL_NO_COLOR \ -D_XL_NO_SLEEP \ \ -DTURN_BASED \ -D__BUFFERED_GRAPHICS \ -D__NO_INIT_GRAPHICS \ -D__ALT_PRINT \ -D__DEFAULT_CLEAR_SCREEN \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c \ $(FULL_FILES) mv a.out $(BUILD_PATH)/X$(GAME_NAME)_amiga_buffered.exe ================================================ FILE: src/games/chase/makefiles.chase/Makefile.gcc_atari_st_targets ================================================ # ------------------------------------------------------------------------------------------ # GCC ATARI ST ############################################################################################## atari_st_targets: \ atari_st_buffered atari_st_ncurses gcc_atari_st_targets: \ atari_st_targets ############################################################################################# atari_st_buffered: $(ATARI_ST_CC) $(INCLUDE_OPTS) \ -D__ATARI_ST__ \ -D__NORMALIZED_RAND \ -DXSize=39 \ -DYSize=22 \ -D__STDIO \ -D_XL_NO_COLOR \ \ -DTURN_BASED \ -D__BUFFERED_GRAPHICS \ -D__NO_INIT_GRAPHICS \ -D__ALT_PRINT \ -D__DEFAULT_CLEAR_SCREEN \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c \ $(FULL_FILES) mv a.out $(BUILD_PATH)/X$(GAME_NAME)_atari_st_buffered.tos atari_st: atari_st_ncurses atari_st_ncurses: $(ATARI_ST_CC) $(INCLUDE_OPTS) -D__NCURSES__ \ -D__ATARI_ST__ \ \ -DXSize=39 \ -DYSize=22 \ \ -D__CONIO_GRAPHICS \ -D__ALT_PRINT \ \ $(CROSS_LIB_PATH)/display/alt_print/ncurses_alt_print.c \ $(SOURCE_PATH)/end_screen.c \ $(CROSS_LIB_PATH)/display/init_graphics/gcc/ncurses_init_graphics.c \ $(FULL_FILES) \ -lncurses mv a.out $(BUILD_PATH)/X$(GAME_NAME)_atari_st_ncurses.tos atari_st_ncurses_turn_based: $(ATARI_ST_CC) $(INCLUDE_OPTS) -D__NCURSES__ \ -D__ATARI_ST__ \ -DTURN_BASED \ \ -DXSize=39 \ -DYSize=22 \ \ -D__CONIO_GRAPHICS \ -D_XL_NO_SLEEP \ -D__ALT_PRINT \ \ $(CROSS_LIB_PATH)/display/alt_print/ncurses_alt_print.c \ $(SOURCE_PATH)/end_screen.c \ $(CROSS_LIB_PATH)/display/init_graphics/gcc/ncurses_init_graphics.c \ $(FULL_FILES) \ -lncurses mv a.out $(BUILD_PATH)/X$(GAME_NAME)_atari_st_ncurses_turn_based.tos ================================================ FILE: src/games/chase/makefiles.chase/Makefile.gcc_targets ================================================ # ------------------------------------------------------------------------------------------ # GCC # gcc_targets: \ gcc_buffered ncurses_targets ############################################################################################### GCC_386_OPTS ?= -std=gnu99 -O0 -nostdlib -m32 -march=i386 -ffreestanding gcc_386: gcc_386_buffered gcc_386_buffered: $(NATIVE_CC) $(GCC_386_OPTS) $(INCLUDE_OPTS) \ -D__NORMALIZED_RAND \ -DXSize=79 \ -DYSize=22 \ -D__STDIO -DEVEN_LOOP_MOVE -DTURN_BASED_SKULL_MIN_SLOWDOWN_SCALE=1 -DTURN_BASED_GHOST_MIN_SLOWDOWN_SCALE=1 \ -DTURN_BASED_EFFECT_SCALE=1 -DTURN_BASED_WAIT_SCALE=1 \ -D_XL_NO_COLOR \ \ -DTURN_BASED \ -D__BUFFERED_GRAPHICS \ -D__NO_INIT_GRAPHICS \ -D__ALT_PRINT \ -D__DEFAULT_CLEAR_SCREEN \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c \ $(FULL_FILES) mv a$(COMPILEDEXT) $(BUILD_PATH)/X$(GAME_NAME)_gcc_buffered$(COMPILEDEXT) stdio: stdio_buffered stdio_buffered: $(NATIVE_CC) $(GCC_OPTS) $(INCLUDE_OPTS) \ -D__NORMALIZED_RAND \ -DXSize=79 \ -DYSize=22 \ -D__STDIO -DEVEN_LOOP_MOVE -DTURN_BASED_SKULL_MIN_SLOWDOWN_SCALE=1 -DTURN_BASED_GHOST_MIN_SLOWDOWN_SCALE=1 \ -DTURN_BASED_EFFECT_SCALE=1 -DTURN_BASED_WAIT_SCALE=1 \ -D_XL_NO_COLOR \ \ -DTURN_BASED \ -D__BUFFERED_GRAPHICS \ -D__NO_INIT_GRAPHICS \ -D__ALT_PRINT \ -D__DEFAULT_CLEAR_SCREEN \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c \ $(FULL_FILES) mv a$(COMPILEDEXT) $(BUILD_PATH)/X$(GAME_NAME)_$@$(COMPILEDEXT) gcc: stdio gcc_buffered: stdio_buffered gcc_386_no_print: $(NATIVE_CC) $(GCC_386_OPTS) $(INCLUDE_OPTS) \ -I$(SOURCE_PATH) \ -D__NORMALIZED_RAND \ -DXSize=79 \ -DYSize=22 \ -D__STDIO -DNO_CHASE -DNO_INPUT \ -D_XL_NO_COLOR -DNO_WALL -D__NO_GRAPHICS \ -DTINY_GAME \ -DTURN_BASED \ -D__BUFFERED_GRAPHICS \ -D__NO_INIT_GRAPHICS \ -D__ALT_PRINT \ -D__DEFAULT_CLEAR_SCREEN \ -D__NO_WAIT \ -D_XL_NO_SLEEP \ -DNO_RANDOM_LEVEL \ -DNO_PRINT \ $(TINY_FILES) gcc_no_print: $(NATIVE_CC) $(GCC_OPTS) $(INCLUDE_OPTS) \ -I$(SOURCE_PATH) \ -D__NORMALIZED_RAND \ -DXSize=79 \ -DYSize=22 \ -D__STDIO \ -D_XL_NO_COLOR \ -DTINY_GAME \ -DTURN_BASED \ -D__BUFFERED_GRAPHICS \ -D__NO_INIT_GRAPHICS \ -D__ALT_PRINT \ -D__DEFAULT_CLEAR_SCREEN \ -D__NO_WAIT \ -D_XL_NO_SLEEP \ -DNO_RANDOM_LEVEL \ -DNO_PRINT \ $(TINY_FILES) gcc_tiny_buffered: $(NATIVE_CC) $(GCC_OPTS) $(INCLUDE_OPTS) \ -D__NORMALIZED_RAND \ -DXSize=79 \ -DYSize=22 \ -D__STDIO \ -D_XL_NO_COLOR \ -DTINY_GAME \ -DTURN_BASED \ -D__BUFFERED_GRAPHICS \ -D__NO_INIT_GRAPHICS \ -D__ALT_PRINT \ -D__DEFAULT_CLEAR_SCREEN \ -D__NO_WAIT \ -D_XL_NO_SLEEP \ -DNO_RANDOM_LEVEL \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c \ $(TINY_FILES) mv a$(COMPILEDEXT) $(BUILD_PATH)/TINY_X$(GAME_NAME)_gcc_buffered$(COMPILEDEXT) ncurses_turn_based: $(NATIVE_CC) $(GCC_OPTS) $(INCLUDE_OPTS) -D__NCURSES__ \ \ \ -DTURN_BASED \ -D__CONIO_GRAPHICS \ -D__ALT_PRINT \ $(CROSS_LIB_PATH)/display/alt_print/ncurses_alt_print.c \ $(SOURCE_PATH)/end_screen.c \ $(CROSS_LIB_PATH)/display/init_graphics/gcc/ncurses_init_graphics.c \ $(FULL_FILES) \ -lncurses mv a$(COMPILEDEXT) $(BUILD_PATH)/X$(GAME_NAME)_ncurses_turn_based$(COMPILEDEXT) ncurses_debug: $(NATIVE_CC) $(GCC_OPTS) $(INCLUDE_OPTS) -D__NCURSES__ \ \ -DXSize=$(XSIZE) -DYSize=$(YSIZE) -D_DEBUG_FLAG=$(_DEBUG_FLAG) \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_NCURSES_SLOWDOWN) \ -D__CONIO_GRAPHICS -D_XL_NO_UDG \ -D__ALT_PRINT \ \ $(CROSS_LIB_PATH)/display/alt_print/ncurses_alt_print.c \ $(CROSS_LIB_PATH)/display/init_graphics/gcc/ncurses_init_graphics.c \ $(FULL_FILES) \ -lncurses ifeq ($(_DEBUG_FLAG),1) mv a$(COMPILEDEXT) $(BUILD_PATH)/X$(GAME_NAME)_ncurses_debug_$(XSIZE)X$(YSIZE)$(COMPILEDEXT) else mv a$(COMPILEDEXT) $(BUILD_PATH)/X$(GAME_NAME)_ncurses_$(XSIZE)X$(YSIZE)$(COMPILEDEXT) endif ncurses: $(NATIVE_CC) $(GCC_OPTS) $(INCLUDE_OPTS) -D__NCURSES__ \ \ \ -D__CONIO_GRAPHICS \ -D__ALT_PRINT \ \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_NCURSES_SLOWDOWN) \ $(CROSS_LIB_PATH)/display/alt_print/ncurses_alt_print.c \ $(SOURCE_PATH)/end_screen.c \ $(CROSS_LIB_PATH)/display/init_graphics/gcc/ncurses_init_graphics.c \ $(FULL_FILES) \ -lncurses mv a$(COMPILEDEXT) $(BUILD_PATH)/X$(GAME_NAME)_ncurses$(COMPILEDEXT) ## ncurses_targets: \ ncurses ncurses_turn_based ================================================ FILE: src/games/chase/makefiles.chase/Makefile.gcc_tms9900_targets ================================================ # ------------------------------------------------------------------------------------------ # TMS9000-GCC # # Paths to TMS9900 compilation tools # ( Set in environment to override paths ) TMS9900_DIR?=/opt/gcc4ti/bin ELF2EA5_DIR?=/home/fabri/Retro/GCC4TI/elf2ea5 EA5_SPLIT_DIR?=/home/fabri/Retro/GCC4TI/ea5split CLASSIC99_DSK1?=/home/fabri/Retro/GCC4TI/DSK1 # Full paths to the executables used GAS=$(TMS9900_DIR)/tms9900-as LD=$(TMS9900_DIR)/tms9900-ld CC=$(TMS9900_DIR)/tms9900-gcc AR=$(TMS9900_DIR)/tms9900-ar ELF2EA5=$(ELF2EA5_DIR)/elf2ea5 EA5_SPLIT=$(EA5_SPLIT_DIR)/ea5split LDFLAGS_EA5=\ --section-start .text=a000 --section-start .data=2080 -M C_FLAGS=\ -O2 -std=c99 -s -I./ -fno-builtin TI99_CC ?= tms9900-gcc TI99_TINY_OPTS ?= \ $(C_FLAGS) $(GLOBAL_OPTS) \ -D__TI99__ -nostdlib -DNO_RANDOM_LEVEL \ -DXSize=32 \ -DYSize=24 -DBUGGY_MOD5 \ -D__ALT_SLEEP \ -DTINY_GAME -DNO_WALL \ -D__VDP_MODE1_GRAPHICS \ -D__NO_SCREEN_COLOR_INIT \ -D_XL_SLOW_DOWN_FACTOR=900 TI99_OPTS ?= \ $(C_FLAGS) $(GLOBAL_OPTS) \ -D__TI99__ -nostdlib \ -DXSize=32 \ -DYSize=24 -DBUGGY_MOD5 -DBUGGY_VERTICAL_DRAW \ -D__ALT_SLEEP -DEXTRA_TITLE \ -D__VDP_MODE1_GRAPHICS \ -D__NO_SCREEN_COLOR_INIT \ -D_XL_SLOW_DOWN_FACTOR=1200 ################################################################################################## # Paths to TMS9900 compilation tools GAS=tms9900-as LD=tms9900-ld TI99CC=tms9900-gcc CXX=tms9900-c++ OBJCOPY=tms9900-objcopy LIB_TI99_PATH=$(TMS9900-GCC_PATH)/../lib # Flags used during linking # Refer to the linker rules in an external file LDFLAGS=\ --script=$(CFG_PATH)gcc4ti99/linkfile.cfg # List of compiled objects used in executable OBJECT_TINY_LIST= \ $(TOOLS_PATH)/ti99/crt0_ea5.o \ $(CROSS_LIB_PATH)/display/display_macros.o \ $(CROSS_LIB_PATH)/input/input_macros.o \ $(CROSS_LIB_PATH)/text/text_macros.o \ $(CROSS_LIB_PATH)/rand/rand.o \ $(CROSS_LIB_PATH)/sleep/sleep_macros.o \ $(SOURCE_PATH)/init_images.o \ $(SOURCE_PATH)/move_player.o \ $(SOURCE_PATH)/strategy.o \ $(CROSS_LIB_PATH)/display/init_graphics/gcc4ti99/gcc4ti99_init_graphics.o \ $(SOURCE_PATH)/ghost.o $(SOURCE_PATH)/level.o $(SOURCE_PATH)/character.o $(SOURCE_PATH)/game_text.o \ $(SOURCE_PATH)/main.o OBJECT_LIST= \ $(TOOLS_PATH)/ti99/crt0_ea5.o \ $(CROSS_LIB_PATH)/display/display_macros.o \ $(CROSS_LIB_PATH)/input/input_macros.o \ $(CROSS_LIB_PATH)/text/text_macros.o \ $(CROSS_LIB_PATH)/rand/rand.o \ $(CROSS_LIB_PATH)/sleep/sleep_macros.o \ $(SOURCE_PATH)/init_images.o \ $(SOURCE_PATH)/item.o \ $(SOURCE_PATH)/move_player.o \ $(SOURCE_PATH)/rocket.o $(SOURCE_PATH)/skull.o $(SOURCE_PATH)/end_screen.o \ $(SOURCE_PATH)/bullet.o $(SOURCE_PATH)/horizontal_missile.o \ $(SOURCE_PATH)/strategy.o \ $(CROSS_LIB_PATH)/display/init_graphics/gcc4ti99/gcc4ti99_init_graphics.o \ $(CROSS_LIB_PATH)/sound/gcc4ti99/ti99_sounds.o \ $(SOURCE_PATH)/ghost.o $(SOURCE_PATH)/level.o $(SOURCE_PATH)/character.o $(SOURCE_PATH)/game_text.o \ $(SOURCE_PATH)/main.o TI99_INCLUDE_OPTS ?= $(INCLUDE_OPTS) -I$(TMS9900-GCC_PATH)/../include # Recipes to compile individual files %.o: %.asm $(GAS) $< -o $@ %.o: %.c $(TI99CC) $(TI99_INCLUDE_OPTS) $(TI99_OPTS) -c $< -o $@ # $(TI99CC) $(TI99_INCLUDE_OPTS) $(TI99_FULL_OPTS) -c $< -o $@ # List of all files needed in executable TINY_PREREQUISITES=\ $(OBJECT_LIST) PREREQUISITES=\ $(OBJECT_LIST) ##################################################################### xchase.ea5.elf: $(PREREQUISITES) $(LD) $(OBJECT_LIST) $(LDFLAGS_EA5) -L$(LIB_TI99_PATH) -lti99 -o xchase.ea5.elf > xchase.map # $(LD) $(OBJECT_LIST) $(LDFLAGS) -o $@ -allow-multiple-definition # Recipe to compile the executable ti99_tiny: xchase.ea5.elf $(TOOLS_PATH)/ti99/elf2ea5$(COMPILEDEXT) $(TOOLS_PATH)/ti99/ea5split$(COMPILEDEXT) $(TOOLS_PATH)/ti99/elf2ea5$(COMPILEDEXT) xchase.ea5.elf xchase.ea5.bin $(TOOLS_PATH)/ti99/ea5split$(COMPILEDEXT) xchase.ea5.bin rm -rf xchase.map rm -rf ea5.map rm -rf xchase.ea5.elf # mv XCHASE $(BUILD_PATH)/X$(GAME_NAME)_TINY_ti994a mv XCHAS* $(BUILD_PATH)/ rm -rf xchase.ea5.bin xchase_tiny.ea5.elf: $(TINY_PREREQUISITES) $(LD) $(OBJECT_TINY_LIST) $(LDFLAGS_EA5) -L$(LIB_TI99_PATH) -lti99 -o xchase_tiny.ea5.elf > xchase.map # $(LD) $(OBJECT_LIST) $(LDFLAGS) -o $@ -allow-multiple-definition ti99: $(ASSETS_PATH)/8x8_chars.h xchase.ea5.elf $(TOOLS_PATH)/ti99/elf2ea5$(COMPILEDEXT) $(TOOLS_PATH)/ti99/ea5split$(COMPILEDEXT) $(TOOLS_PATH)/ti99/elf2ea5$(COMPILEDEXT) xchase.ea5.elf x$(GAME_NAME)1.ea5.bin $(TOOLS_PATH)/ti99/ea5split$(COMPILEDEXT) x$(GAME_NAME)1.ea5.bin rm -rf xchase.map rm -rf ea5.map rm -rf xchase.ea5.elf mv X$(GAME_NAME,lc)* $(BUILD_PATH)/ rm -rf x$(GAME_NAME)1.ea5.bin ti99_targets: \ ti99 gcc_ti99_targets: \ ti99_targets # $(OBJCOPY) -O binary -j .text -j .data -j .ctors ti99_cross_chase.elf ti99_cross_chase.cart # mv ti99_cross_chase.cart $(BUILD_PATH) # mv ti99_cross_chase.elf $(BUILD_PATH) # Recipe to clean all compiled objects .phony ti99clean: rm -f *.o rm -f *.elf rm -f *.cart ================================================ FILE: src/games/chase/makefiles.chase/Makefile.gcc_z8k_pcos_targets ================================================ # ------------------------------------------------------------------------------------------ # Z8K-PCOS-GCC # # Currently to be compiled in Linux (because the source code of the compiler won't easily compile) olivetti_m20_targets: \ olivetti_m20_buffered gcc_z8k_targets: \ olivetti_m20_targets ################################################################################################### m20: olivetti_m20 olivetti_m20: olivetti_m20_buffered m20_buffered: olivetti_m20_buffered olivetti_m20_buffered: $(TOOLS_PATH)/olivetti_m20/m20$(COMPILEDEXT) $(Z8K-PCOS-GCC) $(Z8K-PCOS-GCC_OPTS) $(INCLUDE_OPTS) \ -D__NORMALIZED_RAND \ -D__OLIVETTI_M20__ \ -DXSize=79 \ -DYSize=22 \ -D__STDIO \ -D_XL_NO_COLOR \ \ -DTURN_BASED \ -D__BUFFERED_GRAPHICS \ -D__NO_INIT_GRAPHICS \ -D__ALT_PRINT \ -D__DEFAULT_CLEAR_SCREEN \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c \ $(FULL_FILES) cp $(TOOLS_PATH)/olivetti_m20/pcos20h_empty.img FULL_m20_buffered.img $(TOOLS_PATH)/olivetti_m20/m20 X$(GAME_NAME)_m20_buffered.img put aout.cmd rm aout.cmd mv FULL_m20_buffered.img $(BUILD_PATH) olivetti_m20_no_graphics: $(TOOLS_PATH)/olivetti_m20/m20$(COMPILEDEXT) $(Z8K-PCOS-GCC) $(Z8K-PCOS-GCC_OPTS) $(INCLUDE_OPTS) \ -D__NORMALIZED_RAND \ -DXSize=79 \ -DYSize=22 \ -D__STDIO \ -D_XL_NO_COLOR \ \ -DTURN_BASED \ -D__NO_GRAPHICS \ -D__NO_INIT_GRAPHICS \ -D__ALT_PRINT \ -D__DEFAULT_CLEAR_SCREEN \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c \ $(FULL_FILES) mv a$(COMPILEDEXT) $(BUILD_PATH)/X$(GAME_NAME)_gcc_buffered$(COMPILEDEXT) ================================================ FILE: src/games/chase/makefiles.chase/Makefile.lcc1802_targets ================================================ # ------------------------------------------------------------------------------------------ # LCC1802 # -target=xr18CX # https://sites.google.com/site/lcc1802/downloads/Quarrantine.zip?attredirects=0&d=1 #/cygdrive/c/lcc42/bat/caCX.bat #/cygdrive/c/lcc42/bin/lcc.exe LCC1802_OPTS ?= -target=xr18CX "-Wf-volatile" -O "-Wp-D nofloats" "-Wa-D LCCNOLONG" BASIC_OPTS ?= $(LCC1802_OPTS) "-Wa-D LCCCX=1" COMX_OPTS ?= $(BASIC_OPTS) "-Wa-D CODELOC=0x4401" PECOM_OPTS ?= $(BASIC_OPTS) "-Wa-D CODELOC=0x201" TMC600_OPTS ?= $(BASIC_OPTS) "-Wa-D CODELOC=0x6300" "-Wf-mulcall" CIDELSA_OPTS ?= $(LCC1802_OPTS) "-Wa-D CODELOC=0" "-Wa-D NOFILLBSS=1" "-Wf-mulcall" DRACO_32K_OPTS ?= $(CIDELSA_OPTS) "-Wa-D DATALOC=0x8000" "-Wa-D STACKLOC=0x83ff" DRACO_16K_OPTS ?= $(CIDELSA_OPTS) "-Wa-D DATALOC=0x4000" "-Wa-D STACKLOC=0x43ff" ALTAIR_24K_OPTS ?= $(CIDELSA_OPTS) "-Wa-D DATALOC=0x6000" "-Wa-D STACKLOC=0x60ff" ALTAIR_12K_OPTS ?= $(CIDELSA_OPTS) "-Wa-D DATALOC=0x3000" "-Wa-D STACKLOC=0x30ff" DESTROYER_12K_OPTS ?= $(CIDELSA_OPTS) "-Wa-D DATALOC=0x3000" "-Wa-D STACKLOC=0x30ff" DESTROYER_8K_OPTS ?= $(CIDELSA_OPTS) "-Wa-D DATALOC=0x2000" "-Wa-D STACKLOC=0x20ff" MICROBOARD_OPTS ?= $(CIDELSA_OPTS) "-Wa-D DATALOC=0x8000" "-Wa-D STACKLOC=0x9fff" MICROBOARD_PAL_2_OPTS ?= $(MICROBOARD_OPTS) "-DPAL=2" ################################################################################ _lcc1802_6x9_targets: \ _comx \ _pecom \ _micro lcc1802_6x9_targets: \ _lcc1802_6x9_targets \ clean_combo_files _lcc1802_ascii_targets: \ _tmc600 \ _cidelsa lcc1802_ascii_targets: \ _lcc1802_ascii_targets \ clean_combo_files lcc1802_targets: \ _lcc1802_ascii_targets \ _lcc1802_6x9_targets \ clean_combo_files ################################################################################ COMX_REDUCED_EXTRA_FILES ?= \ $(CROSS_LIB_PATH)/display/init_graphics/lcc1802/comx/comx_init_graphics.c \ $(CROSS_LIB_PATH)/display/alt_print/comx_alt_print.c COMX_EXTRA_FILES ?= \ $(COMX_REDUCED_EXTRA_FILES) \ $(CROSS_LIB_PATH)/sleep/sleep_macros.c \ $(CROSS_LIB_PATH)/sound/lcc1802/comx/comx_sounds.c COMX_EXTRA_FILES_WTIH_END_SCREEN ?= \ $(COMX_EXTRA_FILES) \ $(SOURCE_PATH)/end_screen.c # tiny_combo.c: cat \ $(TINY_FILES) \ > $(SOURCE_PATH)/../tiny_combo.c light_combo.c: tiny_combo.c cat \ $(SOURCE_PATH)/../tiny_combo.c \ $(LIGHT_ONLY_FILES) \ > $(SOURCE_PATH)/../light_combo.c rm $(SOURCE_PATH)/../tiny_combo.c full_combo.c: light_combo.c cat \ $(SOURCE_PATH)/../light_combo.c \ $(FULL_ONLY_FILES) \ > $(SOURCE_PATH)/../full_combo.c rm $(SOURCE_PATH)/../light_combo.c tiny_combo_rand.c: tiny_combo.c cat \ $(CROSS_LIB_PATH)/rand/rand.c \ $(SOURCE_PATH)/../tiny_combo.c \ > $(SOURCE_PATH)/../tiny_combo_rand.c rm $(SOURCE_PATH)/../tiny_combo.c light_combo_rand.c: light_combo.c cat \ $(CROSS_LIB_PATH)/rand/rand.c \ $(SOURCE_PATH)/../light_combo.c \ > $(SOURCE_PATH)/../light_combo_rand.c rm $(SOURCE_PATH)/../light_combo.c full_combo_rand.c: full_combo.c cat \ $(CROSS_LIB_PATH)/rand/rand.c \ $(SOURCE_PATH)/../full_combo.c \ > $(SOURCE_PATH)/../full_combo_rand.c rm $(SOURCE_PATH)/../full_combo.c # reduced_tiny_lcc1802_combo.c: tiny_combo_rand.c cat \ $(COMX_REDUCED_EXTRA_FILES) \ $(SOURCE_PATH)/../tiny_combo_rand.c > $(SOURCE_PATH)/../reduced_tiny_lcc1802_combo.c # rm $(SOURCE_PATH)/../tiny_combo_rand.c tiny_lcc1802_combo.c: tiny_combo_rand.c cat \ $(COMX_EXTRA_FILES) \ $(SOURCE_PATH)/../tiny_combo_rand.c > $(SOURCE_PATH)/../tiny_lcc1802_combo.c # rm $(SOURCE_PATH)/../tiny_combo_rand.c light_lcc1802_combo.c: light_combo_rand.c cat \ $(COMX_EXTRA_FILES) \ $(SOURCE_PATH)/../light_combo_rand.c > $(SOURCE_PATH)/../light_lcc1802_combo.c # rm $(SOURCE_PATH)/../light_combo_rand.c reduced_full_lcc1802_combo_no_sounds.c: full_combo_rand.c cat \ $(COMX_REDUCED_EXTRA_FILES) \ $(SOURCE_PATH)/../full_combo_rand.c > $(SOURCE_PATH)/../reduced_full_lcc1802_combo_no_sounds.c # rm $(SOURCE_PATH)/../full_combo_rand.c reduced_full_lcc1802_combo.c: full_combo_rand.c cat \ $(COMX_EXTRA_FILES) \ $(SOURCE_PATH)/../full_combo_rand.c > $(SOURCE_PATH)/../reduced_full_lcc1802_combo.c # rm $(SOURCE_PATH)/../full_combo_rand.c full_lcc1802_combo.c: full_combo_rand.c cat \ $(COMX_EXTRA_FILES_WTIH_END_SCREEN) \ $(SOURCE_PATH)/../full_combo_rand.c > $(SOURCE_PATH)/../full_lcc1802_combo.c # rm $(SOURCE_PATH)/../full_combo_rand.c clean_combo_files: rm -rf $(SOURCE_PATH)/../full_combo_rand.c rm -rf $(SOURCE_PATH)/../full_lcc1802_combo.c rm -rf $(SOURCE_PATH)/../reduced_full_lcc1802_combo.c rm -rf $(SOURCE_PATH)/../reduced_full_lcc1802_color_combo.c rm -rf $(SOURCE_PATH)/../reduced_full_lcc1802_micro_combo.c LCC1802_BASIC_C_OPTS ?= \ -D__LCC1802__ \ \ -D__NO_SCREEN_COLOR_INIT \ -DLESS_TEXT \ -D__ALT_RAND \ -DROCKETS_NUMBER=2 \ -D__ALT_PRINT \ LCC1802_C_OPTS ?= \ $(LCC1802_BASIC_C_OPTS) \ \ -D__ALT_SLEEP \ REDUCED_LCC1802_C_OPTS ?= \ $(LCC1802_BASIC_C_OPTS) \ -D_XL__XL_NO_SLEEP \ -DNO_RANDOM_LEVEL ############################################################################### # COMX _tiny_comx: tiny_lcc1802_combo.c $(ASSETS_PATH)/6x9_chars.h $(LCC1802) $(INCLUDE_OPTS) -I$(SOURCE_PATH) $(COMX_OPTS) \ -D__COMX__ \ -DTINY_GAME -D__LCC1802_GRAPHICS -DNO_WALL \ -D_XL_NO_COLOR \ -DNO_BLINKING \ \ \ $(LCC1802_C_OPTS) \ -DGHOSTS_NUMBER=6 \ $(SOURCE_PATH)/../tiny_lcc1802_combo.c # rm -rf $(SOURCE_PATH)/../tiny_lcc1802_combo.c mv $(SOURCE_PATH)/../../a.hex $(BUILD_PATH)/X$(GAME_NAME)_TINY_comx.hex tiny_comx: \ _tiny_comx \ clean_combo_files _light_comx: light_lcc1802_combo.c $(ASSETS_PATH)/6x9_chars.h $(LCC1802) $(INCLUDE_OPTS) -I$(SOURCE_PATH) $(COMX_OPTS) \ -D__COMX__ \ -DLIGHT_GAME -D__LCC1802_GRAPHICS \ -D_XL_NO_COLOR \ -DNO_BLINKING \ \ \ $(LCC1802_C_OPTS) \ -DGHOSTS_NUMBER=6 \ $(SOURCE_PATH)/../light_lcc1802_combo.c # rm -rf $(SOURCE_PATH)/../light_lcc1802_combo.c mv $(SOURCE_PATH)/../a.hex $(BUILD_PATH)/X$(GAME_NAME)_LIGHT_comx.hex light_comx: \ _light_comx \ clean_combo_files _full_comx: _comx _comx: full_lcc1802_combo.c $(ASSETS_PATH)/6x9_chars.h $(LCC1802) $(INCLUDE_OPTS) -I$(SOURCE_PATH) $(COMX_OPTS) \ -D__COMX__ -D__LCC1802_GRAPHICS -DEXTRA_TITLE \ \ -D_XL_NO_COLOR \ -DNO_BLINKING \ \ \ \ $(LCC1802_C_OPTS) \ -DGHOSTS_NUMBER=7 \ $(SOURCE_PATH)/../full_lcc1802_combo.c # rm -rf $(SOURCE_PATH)/../full_lcc1802_combo.c mv $(SOURCE_PATH)/../../a.hex $(BUILD_PATH)/X$(GAME_NAME)_comx.hex comx: \ _comx \ clean_combo_files _comx_int: full_lcc1802_combo.c $(ASSETS_PATH)/6x9_chars.h $(LCC1802) $(INCLUDE_OPTS) -I$(SOURCE_PATH) $(COMX_OPTS) \ -D__COMX__ -D__LCC1802_GRAPHICS -DEXTRA_TITLE -DVIS_INT \ \ -D_XL_NO_COLOR \ -DNO_BLINKING \ \ \ \ $(LCC1802_C_OPTS) \ -DGHOSTS_NUMBER=7 \ $(SOURCE_PATH)/../full_lcc1802_combo.c # rm -rf $(SOURCE_PATH)/../full_lcc1802_combo.c mv $(SOURCE_PATH)/../../a.hex $(BUILD_PATH)/X$(GAME_NAME)_$@.hex comx_int: \ _comx_int \ clean_combo_files ############################################################################### # PECOM _tiny_pecom: tiny_lcc1802_combo.c $(ASSETS_PATH)/6x9_chars.h $(LCC1802) $(INCLUDE_OPTS) -I$(SOURCE_PATH) $(PECOM_OPTS) \ -D__PECOM__ \ -DTINY_GAME -D__LCC1802_GRAPHICS -DNO_WALL \ -D_XL_NO_COLOR \ -DNO_BLINKING \ \ \ $(LCC1802_C_OPTS) \ -DGHOSTS_NUMBER=6 \ $(SOURCE_PATH)/../tiny_lcc1802_combo.c # rm -rf $(SOURCE_PATH)/../tiny_lcc1802_combo.c mv $(SOURCE_PATH)/../../a.hex $(BUILD_PATH)/X$(GAME_NAME)_TINY_pecom.hex tiny_pecom: \ _tiny_comx \ clean_combo_files _light_pecom: light_lcc1802_combo.c $(ASSETS_PATH)/6x9_chars.h $(LCC1802) $(INCLUDE_OPTS) -I$(SOURCE_PATH) $(PECOM_OPTS) \ -D__PECOM__ -D__LCC1802_GRAPHICS \ -DLIGHT_GAME \ -D_XL_NO_COLOR \ -DNO_BLINKING \ \ \ $(LCC1802_C_OPTS) \ -DGHOSTS_NUMBER=6 \ $(SOURCE_PATH)/../light_lcc1802_combo.c # rm -rf $(SOURCE_PATH)/../light_lcc1802_combo.c mv $(SOURCE_PATH)/../../a.hex $(BUILD_PATH)/X$(GAME_NAME)_LIGHT_pecom.hex light_pecom: \ _light_pecom \ clean_combo_files _full_pecom: _pecom _pecom: full_lcc1802_combo.c $(ASSETS_PATH)/6x9_chars.h $(LCC1802) $(INCLUDE_OPTS) -I$(SOURCE_PATH) $(PECOM_OPTS) \ -D__PECOM__ -D__LCC1802_GRAPHICS -DEXTRA_TITLE \ \ -D_XL_NO_COLOR \ -DNO_BLINKING \ \ \ \ $(LCC1802_C_OPTS) \ -DGHOSTS_NUMBER=7 \ $(SOURCE_PATH)/../full_lcc1802_combo.c # rm -rf $(SOURCE_PATH)/../full_lcc1802_combo.c mv $(SOURCE_PATH)/../../a.hex $(BUILD_PATH)/X$(GAME_NAME)_pecom.hex pecom: \ _pecom \ clean_combo_files ############################################################################### # TMC600 _tmc600_8k: reduced_tiny_lcc1802_combo.c $(LCC1802) $(INCLUDE_OPTS) -I$(SOURCE_PATH) $(TMC600_OPTS) \ -D__TMC600__ \ -DTINY_GAME -DSIMPLE_STRATEGY -D__MEMORY_MAPPED_GRAPHICS \ -DNO_STATS -D_XL_NO_COLOR -DNO_INITIAL_SCREEN -DNO_WALL \ \ $(REDUCED_LCC1802_C_OPTS) \ -DGHOSTS_NUMBER=6 \ $(SOURCE_PATH)/../reduced_tiny_lcc1802_combo.c # rm -rf $(SOURCE_PATH)/../reduced_tiny_lcc1802_combo.c mv $(SOURCE_PATH)/../../a.hex $(BUILD_PATH)/X$(GAME_NAME)_TINY_tmc600_8k.hex _tiny_tmc600: tiny_lcc1802_combo.c $(LCC1802) $(INCLUDE_OPTS) -I$(SOURCE_PATH) $(TMC600_OPTS) \ -D__TMC600__ -D__MEMORY_MAPPED_GRAPHICS -DNO_WALL \ -DTINY_GAME \ \ $(LCC1802_C_OPTS) \ -DGHOSTS_NUMBER=6 \ $(SOURCE_PATH)/../tiny_lcc1802_combo.c # rm -rf $(SOURCE_PATH)/../tiny_lcc1802_combo.c mv $(SOURCE_PATH)/../../a.hex $(BUILD_PATH)/X$(GAME_NAME)_TINY_tmc600.hex tiny_tmc600: \ _tiny_tmc600 \ clean_combo_files _light_tmc600: _tmc600_16k _tmc600_16k: light_lcc1802_combo.c $(LCC1802) $(INCLUDE_OPTS) -I$(SOURCE_PATH) $(TMC600_OPTS) \ -D__TMC600__ -D__MEMORY_MAPPED_GRAPHICS \ -DLIGHT_GAME \ \ -D_XL_NO_COLOR \ $(LCC1802_C_OPTS) \ -DGHOSTS_NUMBER=6 \ $(SOURCE_PATH)/../light_lcc1802_combo.c # rm -rf $(SOURCE_PATH)/../light_lcc1802_combo.c mv $(SOURCE_PATH)/../../a.hex $(BUILD_PATH)/X$(GAME_NAME)_LIGHT_tmc600_16k.hex light_tmc600: \ _light_tmc600 \ clean_combo_files _full_tmc600: _tmc600_37k _tmc600: _tmc600_37k _tmc600_37k: full_lcc1802_combo.c $(LCC1802) $(INCLUDE_OPTS) -I$(SOURCE_PATH) $(TMC600_OPTS) \ -D__TMC600__ -D__MEMORY_MAPPED_GRAPHICS -DEXTRA_TITLE \ \ \ $(LCC1802_C_OPTS) \ -DGHOSTS_NUMBER=7 \ \ $(SOURCE_PATH)/../full_lcc1802_combo.c # rm -rf $(SOURCE_PATH)/../full_lcc1802_combo.c mv $(SOURCE_PATH)/../../a.hex $(BUILD_PATH)/X$(GAME_NAME)_tmc600_37k.hex tmc600_37k: \ _tmc600_37k \ clean_combo_files tmc600: \ _tmc600 \ clean_combo_files _tmc600_no_end: _tmc600_24k tmc600_no_end: \ _tmc600_no_end \ clean_combo_files # -DNO_PRINT _tmc600_24k: reduced_full_lcc1802_combo.c $(LCC1802) $(INCLUDE_OPTS) -I$(SOURCE_PATH) $(TMC600_OPTS) \ -D__TMC600__ -D__MEMORY_MAPPED_GRAPHICS \ \ -DNO_BLINKING \ -DNO_HINTS \ $(LCC1802_C_OPTS) \ -DGHOSTS_NUMBER=8 \ $(SOURCE_PATH)/../reduced_full_lcc1802_combo.c # rm -rf $(SOURCE_PATH)/../reduced_full_lcc1802_combo.c mv $(SOURCE_PATH)/../../a.hex $(BUILD_PATH)/X$(GAME_NAME)_tmc600_24k.hex ############################################################################### # CIDELSA DRACO _tiny_cidelsa_draco: tiny_lcc1802_combo.c $(LCC1802) $(INCLUDE_OPTS) -I$(SOURCE_PATH) $(DRACO_16K_OPTS) \ -D__CIDELSA__ -D__DRACO__ -D__MEMORY_MAPPED_GRAPHICS -DNO_WALL \ -DTINY_GAME \ -D_XL_NO_COLOR \ -DNO_BLINKING \ \ $(LCC1802_C_OPTS) \ -DGHOSTS_NUMBER=8 \ $(SOURCE_PATH)/../tiny_lcc1802_combo.c # rm -rf $(SOURCE_PATH)/../tiny_lcc1802_combo.c mv $(SOURCE_PATH)/../../a.hex $(BUILD_PATH)/X$(GAME_NAME)_TINY_cidelsa_draco_16K.hex tiny_cidelsa_draco: \ _tiny_cidelsa_draco \ clean_combo_files _cidelsa_draco_16k: _light_cidelsa_draco _light_cidelsa_draco: light_lcc1802_combo.c $(LCC1802) $(INCLUDE_OPTS) -I$(SOURCE_PATH) $(DRACO_16K_OPTS) \ -D__CIDELSA__ -D__DRACO__ -D__MEMORY_MAPPED_GRAPHICS \ -D_XL_NO_COLOR \ -DNO_BLINKING \ \ $(LCC1802_C_OPTS) \ -DGHOSTS_NUMBER=8 \ $(SOURCE_PATH)/../light_lcc1802_combo.c # rm -rf $(SOURCE_PATH)/../light_lcc1802_combo.c mv $(SOURCE_PATH)/../../a.hex $(BUILD_PATH)/X$(GAME_NAME)_LIGHT_cidelsa_draco_16K.hex light_cidelsa_draco: \ _light_cidelsa_draco \ clean_combo_files _cidelsa: _cidelsa_draco _cidelsa_draco_32k: _cidelsa_draco # _cidelsa_draco: full_lcc1802_combo.c $(LCC1802) $(INCLUDE_OPTS) -I$(SOURCE_PATH) $(DRACO_32K_OPTS) \ -D__CIDELSA__ -D__DRACO__ -D__MEMORY_MAPPED_GRAPHICS -DEXTRA_TITLE \ \ -D_XL_NO_COLOR \ -DNO_BLINKING \ \ \ $(LCC1802_C_OPTS) \ -DGHOSTS_NUMBER=8 \ $(SOURCE_PATH)/../full_lcc1802_combo.c # rm -rf $(SOURCE_PATH)/../full_lcc1802_combo.c mv $(SOURCE_PATH)/../../a.hex $(BUILD_PATH)/X$(GAME_NAME)_cidelsa_draco_32K.hex cidelsa_draco: \ _cidelsa_draco \ clean_combo_files cidelsa: \ _cidelsa \ clean_combo_files ############################################################################### # CIDELSA ALTAIR _cidelsa_altair_12k: _tiny_cidelsa_altair _tiny_cidelsa_altair: tiny_lcc1802_combo.c $(LCC1802) $(INCLUDE_OPTS) -I$(SOURCE_PATH) $(ALTAIR_12K_OPTS) \ -D__CIDELSA__ -D__ALTAIR__ -D__MEMORY_MAPPED_GRAPHICS -DNO_WALL \ -DTINY_GAME \ -D_XL_NO_COLOR \ -DNO_BLINKING \ \ $(LCC1802_C_OPTS) \ -DGHOSTS_NUMBER=8 \ $(SOURCE_PATH)/../tiny_lcc1802_combo.c # rm -rf $(SOURCE_PATH)/../tiny_lcc1802_combo.c mv $(SOURCE_PATH)/../../a.hex $(BUILD_PATH)/X$(GAME_NAME)_TINY_cidelsa_altair_12K.hex cidelsa_altair_12k: \ _cidelsa_altair_12k \ clean_combo_files _cidelsa_altair: _cidelsa_altair_24k _cidelsa_altair_24k: _light_cidelsa_altair _light_cidelsa_altair: light_lcc1802_combo.c $(LCC1802) $(INCLUDE_OPTS) -I$(SOURCE_PATH) $(ALTAIR_24K_OPTS) \ -D__CIDELSA__ -D__ALTAIR__ -D__MEMORY_MAPPED_GRAPHICS \ -D_XL_NO_COLOR \ -DNO_BLINKING \ \ $(LCC1802_C_OPTS) \ -DGHOSTS_NUMBER=8 \ $(SOURCE_PATH)/../light_lcc1802_combo.c # rm -rf $(SOURCE_PATH)/../light_lcc1802_combo.c mv $(SOURCE_PATH)/../../a.hex $(BUILD_PATH)/X$(GAME_NAME)_LIGHT_cidelsa_altair_24K.hex cidelsa_altair_24k: \ _cidelsa_altair_24k \ clean_combo_files # full_altair: full_lcc1802_combo.c # $(LCC1802) $(INCLUDE_OPTS) -I$(SOURCE_PATH) $(ALTAIR_24K_OPTS) \ # -D__CIDELSA__ -D__DRACO__ \ # \ # -D_XL_NO_COLOR \ # -DNO_BLINKING \ # \ # $(LCC1802_C_OPTS) \ # -DGHOSTS_NUMBER=8 \ # $(SOURCE_PATH)/../full_lcc1802_combo.c # rm -rf $(SOURCE_PATH)/../full_lcc1802_combo.c # mv $(SOURCE_PATH)/../a.hex $(BUILD_PATH)/X$(GAME_NAME)_altair.hex ############################################################################### # CIDELSA DESTTOYER _cidelsa_destroyer: _cidelsa_destroyer_12k cidelsa_destroyer: \ _cidelsa_destroyer \ clean_combo_files _cidelsa_destroyer_12k: _tiny_cidelsa_destroyer _tiny_cidelsa_destroyer: tiny_lcc1802_combo.c $(LCC1802) $(INCLUDE_OPTS) -I$(SOURCE_PATH) $(DESTROYER_12K_OPTS) \ -D__CIDELSA__ -D__DESTROYER__ -D__MEMORY_MAPPED_GRAPHICS -DNO_WALL \ -DTINY_GAME \ -D_XL_NO_COLOR \ -DNO_BLINKING \ \ $(LCC1802_C_OPTS) \ -DGHOSTS_NUMBER=8 \ $(SOURCE_PATH)/../tiny_lcc1802_combo.c # rm -rf $(SOURCE_PATH)/../tiny_lcc1802_combo.c mv $(SOURCE_PATH)/../../a.hex $(BUILD_PATH)/X$(GAME_NAME)_TINY_cidelsa_destroyer_12K.hex cidelsa_destroyer_12k: \ _cidelsa_destroyer_12k \ clean_combo_files _reduced_tiny_cidelsa_destroyer: reduced_tiny_lcc1802_combo.c $(LCC1802) $(INCLUDE_OPTS) -I$(SOURCE_PATH) $(DESTROYER_8K_OPTS) \ -D__CIDELSA__ -D__DESTROYER__ -D__MEMORY_MAPPED_GRAPHICS -DNO_WALL \ -DTINY_GAME -DSIMPLE_STRATEGY \ -DNO_STATS -D_XL_NO_COLOR -DNO_INITIAL_SCREEN \ -D_XL_NO_COLOR \ -DNO_BLINKING \ \ $(REDUCED_LCC1802_C_OPTS) \ -DGHOSTS_NUMBER=6 \ $(SOURCE_PATH)/../reduced_tiny_lcc1802_combo.c # rm -rf $(SOURCE_PATH)/../reduced_tiny_lcc1802_combo.c mv $(SOURCE_PATH)/../../a.hex $(BUILD_PATH)/X$(GAME_NAME)_TINY_cidelsa_destroyer_8K.hex _cidelsa_destroyer_8k: _reduced_tiny_cidelsa_destroyer cidelsa_destroyer_8k: \ _cidelsa_destroyer_8k \ clean_combo_files # full_destroyer: full_lcc1802_combo.c # $(LCC1802) $(INCLUDE_OPTS) -I$(SOURCE_PATH) $(DESTROYER_12K_OPTS) \ # -D__CIDELSA__ -D__DRACO__ \ # \ # -D_XL_NO_COLOR \ # -DNO_BLINKING \ # \ # $(LCC1802_C_OPTS) \ # -DGHOSTS_NUMBER=8 \ # $(SOURCE_PATH)/../full_lcc1802_combo.c # rm -rf $(SOURCE_PATH)/../full_lcc1802_combo.c # mv $(SOURCE_PATH)/../a.hex $(BUILD_PATH)/X$(GAME_NAME)_destroyer.hex # light_destroyer: light_lcc1802_combo.c # $(LCC1802) $(INCLUDE_OPTS) -I$(SOURCE_PATH) $(DESTROYER_12K_OPTS) \ # -D__CIDELSA__ -D__DRACO__ \ # -D_XL_NO_COLOR \ # -DNO_BLINKING \ # \ # $(LCC1802_C_OPTS) \ # -DGHOSTS_NUMBER=8 \ # $(SOURCE_PATH)/../light_lcc1802_combo.c # rm -rf $(SOURCE_PATH)/../light_lcc1802_combo.c # mv $(SOURCE_PATH)/../a.hex $(BUILD_PATH)/X$(GAME_NAME)_LIGHT_destroyer.hex ############################################################################### _microboard: _micro _micro: _micro_pal2 _full_micro_pal2: _micro_pal2 _micro_pal2: reduced_full_lcc1802_combo_no_sounds.c $(ASSETS_PATH)/6x9_chars.h $(LCC1802) $(INCLUDE_OPTS) -I$(SOURCE_PATH) $(MICROBOARD_PAL_2_OPTS) -DEXTRA_TITLE \ -D__LCC1802_GRAPHICS \ -D__MICRO__ -D_XL_NUMBER_OF_TILES=19 \ \ -D_XL_NO_COLOR \ -DNO_BLINKING \ \ \ $(REDUCED_LCC1802_C_OPTS) \ -DGHOSTS_NUMBER=8 \ $(SOURCE_PATH)/../reduced_full_lcc1802_combo_no_sounds.c # rm -rf $(SOURCE_PATH)/../reduced_full_lcc1802_combo_no_sounds.c mv $(SOURCE_PATH)/../../a.hex $(BUILD_PATH)/X$(GAME_NAME)_microboard_pal2.hex micro_pal2: \ _micro_pal2 \ clean_combo_files micro: micro_pal2 ############################################################################### comx_targets: comx pecom_targets: pecom tmc600_targets: $(MAKE) tmc600_8k $(MAKE) tmc600_16k $(MAKE) tmc600_24k $(MAKE) tmc600_37k cidelsa_targets: $(MAKE) cidelsa_draco_16k $(MAKE) cidelsa_draco_32k $(MAKE) cidelsa_altair_12k $(MAKE) cidelsa_altair_24k $(MAKE) cidelsa_destroyer_8k $(MAKE) cidelsa_destroyer_12k micro_targets: $(MAKE) micro_pal2 ================================================ FILE: src/games/chase/makefiles.chase/Makefile.sdcc_targets ================================================ # JUST A STUB # ------------------------------------------------------------------------------------------ # SDCC # MACROS___NO_GRAPHICS ?= \ -D__NORMALIZED_RAND \ -DXSize=79 \ -DYSize=22 \ -D__STDIO \ -D_XL_NO_SLEEP \ -D_XL_NO_COLOR \ -DNO_CHASE \ \ -DTURN_BASED \ -D__NO_GRAPHICS \ -D__NO_INIT_GRAPHICS \ -D__ALT_PRINT \ -D__DEFAULT_CLEAR_SCREEN sdcc_display_macros: sdcc -c $(INCLUDE_OPTS) -I$(SOURCE_PATH) $(MACROS___NO_GRAPHICS) $(CROSS_LIB_PATH)/display/display_macros.c ================================================ FILE: src/games/chase/makefiles.chase/Makefile.vbcc_targets ================================================ # ------------------------------------------------------------------------------------------ # VBCC # vbcc_targets: \ bbc_buffered ############################################################################################### bbc: bbc_buffered bbc_test: $(TOOLS_PATH)/bbc/bbcim$(COMPILEDEXT) $(VBCC_COMPILER) +bbc $(VBCC_BBC_OPTS) $(INCLUDE_OPTS) \ -D__NORMALIZED_RAND -D__BBC__ -DVBCC \ -DXSize=39 \ -DYSize=22 \ -D__STDIO -DEVEN_LOOP_MOVE -DTURN_BASED_SKULL_MIN_SLOWDOWN_SCALE=1 -DTURN_BASED_GHOST_MIN_SLOWDOWN_SCALE=1 \ -DTURN_BASED_EFFECT_SCALE=1 -DTURN_BASED_WAIT_SCALE=1 \ -D_XL_NO_COLOR \ -D_XL_NO_SLEEP \ -DTURN_BASED \ -D__BUFFERED_GRAPHICS \ -D__ALT_PRINT \ -D__DEFAULT_CLEAR_SCREEN \ $(CROSS_LIB_PATH)/display/init_graphics/vbcc/bbc_init_graphics.c \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c \ $(FULL_FILES) -o xchase $(TOOLS_PATH)/bbc/bbcim$(COMPILEDEXT) -a X$(GAME_NAME)_$@.img xchase rm -rf xchase rm -rf xchase.inf mv X$(GAME_NAME)_$@.img $(BUILD_PATH) bbc_buffered: $(TOOLS_PATH)/bbc/bbcim$(COMPILEDEXT) $(VBCC_COMPILER) +bbc $(VBCC_BBC_OPTS) $(INCLUDE_OPTS) \ -D__NORMALIZED_RAND -D__BBC__ -DVBCC \ -DXSize=39 \ -DYSize=22 \ -D__STDIO -DEVEN_LOOP_MOVE -DTURN_BASED_SKULL_MIN_SLOWDOWN_SCALE=1 -DTURN_BASED_GHOST_MIN_SLOWDOWN_SCALE=1 \ -DTURN_BASED_EFFECT_SCALE=1 -DTURN_BASED_WAIT_SCALE=1 \ -D_XL_NO_COLOR \ -D_XL_NO_SLEEP \ -DTURN_BASED \ -D__BUFFERED_GRAPHICS \ -D__NO_INIT_GRAPHICS \ -D__ALT_PRINT \ -D__DEFAULT_CLEAR_SCREEN \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c \ $(FULL_FILES) -o xchase $(TOOLS_PATH)/bbc/bbcim$(COMPILEDEXT) -a X$(GAME_NAME)_$@.img xchase rm -rf xchase rm -rf xchase.inf mv X$(GAME_NAME)_$@.img $(BUILD_PATH) bbcmaster: bbcmaster_buffered bbcmaster_buffered: $(TOOLS_PATH)/bbc/bbcim$(COMPILEDEXT) $(VBCC_COMPILER) +bbcmaster $(VBCC_BBC_OPTS) $(INCLUDE_OPTS) \ -D__NORMALIZED_RAND -D__BBCMASTER__ -DVBCC \ -DXSize=39 \ -DYSize=22 \ -D__STDIO -DEVEN_LOOP_MOVE -DTURN_BASED_SKULL_MIN_SLOWDOWN_SCALE=1 -DTURN_BASED_GHOST_MIN_SLOWDOWN_SCALE=1 \ -DTURN_BASED_EFFECT_SCALE=1 -DTURN_BASED_WAIT_SCALE=1 \ -D_XL_NO_COLOR \ -D_XL_NO_SLEEP \ -DTURN_BASED \ -D__BUFFERED_GRAPHICS \ -D__NO_INIT_GRAPHICS \ -D__ALT_PRINT \ -D__DEFAULT_CLEAR_SCREEN \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c \ $(FULL_FILES) -o xchase $(TOOLS_PATH)/bbc/bbcim$(COMPILEDEXT) -a X$(GAME_NAME)_$@.img xchase rm -rf xchase rm -rf xchase.inf mv X$(GAME_NAME)_$@.img $(BUILD_PATH) bbc_buffered_no_print: $(VBCC_COMPILER) +bbc $(VBCC_BBC_OPTS) $(INCLUDE_OPTS) \ -I$(SOURCE_PATH) \ -D__NORMALIZED_RAND \ -DXSize=39 \ -DYSize=22 \ -D__STDIO \ -D_XL_NO_COLOR \ -DTINY_GAME \ -DTURN_BASED \ -D__BUFFERED_GRAPHICS \ -D__NO_INIT_GRAPHICS \ -D__ALT_PRINT \ -D__DEFAULT_CLEAR_SCREEN \ -D__NO_WAIT \ -D_XL_NO_SLEEP \ -DNO_RANDOM_LEVEL \ -DNO_PRINT \ $(TINY_FILES) # ----------------------------------------------------------------------- m65: m65_buffered m65_buffered: $(VBCC_COMPILER) +m65 $(VBCC_BBC_OPTS) $(INCLUDE_OPTS) \ -D__NORMALIZED_RAND -DVBCC -D__MEGA65__ \ -DXSize=39 \ -DYSize=22 \ -D__STDIO -DEVEN_LOOP_MOVE -DTURN_BASED_SKULL_MIN_SLOWDOWN_SCALE=1 -DTURN_BASED_GHOST_MIN_SLOWDOWN_SCALE=1 \ -DTURN_BASED_EFFECT_SCALE=1 -DTURN_BASED_WAIT_SCALE=1 \ -D_XL_NO_COLOR \ -D_XL_NO_SLEEP \ -DTURN_BASED \ -D__BUFFERED_GRAPHICS \ -D__NO_INIT_GRAPHICS \ -D__ALT_PRINT \ -D__DEFAULT_CLEAR_SCREEN \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c \ $(FULL_FILES) -o xchase mv xchase $(BUILD_PATH)/ # mv xchase.inf $(BUILD_PATH)/ # mv xchase $(BUILD_PATH)/X$(GAME_NAME)_bbc_buffered # mv xchase.inf $(BUILD_PATH)/X$(GAME_NAME)_bbc_buffered.inf # ----------------------------------------------------------------------- atari_jaguar: atari_jaguar_buffered atari_jaguar_buffered: $(VBCC_COMPILER) +jaguar $(VBCC_BBC_OPTS) $(INCLUDE_OPTS) \ -D__NORMALIZED_RAND -D__ATARI_JAGUAR__ -DVBCC \ -DXSize=39 \ -DYSize=22 \ -D__STDIO -DEVEN_LOOP_MOVE -DTURN_BASED_SKULL_MIN_SLOWDOWN_SCALE=1 -DTURN_BASED_GHOST_MIN_SLOWDOWN_SCALE=1 \ -DTURN_BASED_EFFECT_SCALE=1 -DTURN_BASED_WAIT_SCALE=1 \ -D_XL_NO_COLOR \ -D_XL_NO_SLEEP \ -DTURN_BASED \ -D__BUFFERED_GRAPHICS \ -D__NO_INIT_GRAPHICS \ -D__ALT_PRINT \ -D__DEFAULT_CLEAR_SCREEN \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c \ $(FULL_FILES) -o xchase mv xchase $(BUILD_PATH)/ # mv xchase.inf $(BUILD_PATH)/ # mv xchase $(BUILD_PATH)/X$(GAME_NAME)_bbc_buffered # mv xchase.inf $(BUILD_PATH)/X$(GAME_NAME)_bbc_buffered.inf # ----------------------------------------------------------------------- amiga_kick13_buffered: $(VBCC_COMPILER) +kick13 $(VBCC_BBC_OPTS) $(INCLUDE_OPTS) \ -D__NORMALIZED_RAND -D__AMIGA_KICK13__ -DVBCC \ -DXSize=39 \ -DYSize=22 \ -D__STDIO -DEVEN_LOOP_MOVE -DTURN_BASED_SKULL_MIN_SLOWDOWN_SCALE=1 -DTURN_BASED_GHOST_MIN_SLOWDOWN_SCALE=1 \ -DTURN_BASED_EFFECT_SCALE=1 -DTURN_BASED_WAIT_SCALE=1 \ -D_XL_NO_COLOR \ -D_XL_NO_SLEEP \ -DTURN_BASED \ -D__BUFFERED_GRAPHICS \ -D__NO_INIT_GRAPHICS \ -D__ALT_PRINT \ -D__DEFAULT_CLEAR_SCREEN \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c \ $(FULL_FILES) -o xchase mv xchase $(BUILD_PATH)/ # mv xchase.inf $(BUILD_PATH)/ # mv xchase $(BUILD_PATH)/X$(GAME_NAME)_bbc_buffered # mv xchase.inf $(BUILD_PATH)/X$(GAME_NAME)_bbc_buffered.inf ================================================ FILE: src/games/chase/makefiles.chase/Makefile.xtc68_targets ================================================ # ------------------------------------------------------------------------------------------ # XTC68 # # xtc86 targets sinclair_ql_targets: \ sinclair_ql_tiny_buffered XTC68_OPTS = -D__XTC68__ -I$(SOURCE_PATH) \ xtc68_targets: sinclair_ql_targets ############################################################################################# XTC68_ALL_OPTS ?= \ $(XTC68_OPTS) $(INCLUDE_OPTS)\ -I$(SOURCE_PATH) \ -D__NORMALIZED_RAND \ -DXSize=79 \ -DYSize=22 \ -D__STDIO \ -D_XL_NO_COLOR \ -DTINY_GAME \ -DTURN_BASED \ -D__BUFFERED_GRAPHICS \ -D__NO_INIT_GRAPHICS \ -D__ALT_PRINT \ -D__DEFAULT_CLEAR_SCREEN \ -D__NO_WAIT \ -D_XL_NO_SLEEP \ -DNO_RANDOM_LEVEL \ -DNO_PRINT sinclair_ql: sinclair_ql_tiny_buffered sinclair_ql_tiny_buffered: $(XTC68) $(XTC68_ALL_OPTS) -c $(SOURCE_PATH)/level.c -o level.o $(XTC68) $(XTC68_ALL_OPTS) -c $(SOURCE_PATH)/init_images.c -o init_images.o $(XTC68) $(XTC68_ALL_OPTS) -c $(CROSS_LIB_PATH)/display/display_macros.c -o display_macros.o $(XTC68) $(XTC68_ALL_OPTS) -c $(CROSS_LIB_PATH)/input/input_macros.c -o input_macros.o $(XTC68) $(XTC68_ALL_OPTS) -c $(CROSS_LIB_PATH)/text/text_macros.c -o text_macros.o $(XTC68) $(XTC68_ALL_OPTS) -c $(SOURCE_PATH)/move_player.c -o move_player.o $(XTC68) $(XTC68_ALL_OPTS) -c $(SOURCE_PATH)/ghost.c -o ghost.o $(XTC68) $(XTC68_ALL_OPTS) -c $(SOURCE_PATH)/character.c -o character.o $(XTC68) $(XTC68_ALL_OPTS) -c $(SOURCE_PATH)/game_text.c -o game_test.o $(XTC68) $(XTC68_ALL_OPTS) -c $(SOURCE_PATH)/strategy.c -o strategy.o $(XTC68) $(XTC68_ALL_OPTS) -c $(SOURCE_PATH)/main.c -o main.o $(XTC68) $(XTC68_ALL_OPTS) /usr/local/qdos/lib/crt.o \ level.o init_images.o display_macros.o input_macros.o text_macros.o move_player.o ghost.o character.o game_test.o strategy.o main.o rm level.o init_images.o display_macros.o input_macros.o text_macros.o move_player.o ghost.o character.o game_test.o strategy.o main.o mv a_out $(BUILD_PATH)/X$(GAME_NAME)_TINY_SinclairQL_buffered.out ================================================ FILE: src/games/chase/makefiles.chase/Makefile.z88dk_targets ================================================ # ------------------------------------------------------------------------------------------ # Z88DK # ################################################################################ # missing: abc800, xo7, c7420, rex # missing 8080: m100 ################################################################## include games/chase/makefiles.chase/makefiles_z88dk/Makefile_z88dk_a-k include games/chase/makefiles.chase/makefiles_z88dk/Makefile_z88dk_l-p include games/chase/makefiles.chase/makefiles_z88dk/Makefile_z88dk_q-z include games/chase/makefiles.chase/makefiles_z88dk/Makefile_z88dk_zsdcc # ---------------------------------------------------------------- z88dk_targets_sccz80: \ z88dk_targets_a-k \ z88dk_targets_l-p \ z88dk_targets_q-z z88dk_targets_sccz80_more: \ z88dk_targets_a-k_more \ z88dk_targets_l-p_more \ z88dk_targets_q-z_more ifeq ($(DO_WIN),1) z88dk_targets: \ z88dk_targets_sccz80 \ z88dk_targets_zsdcc z88dk_targets_more: \ z88dk_targets_sccz80_more \ z88dk_targets_zsdcc_more else z88dk_targets: \ z88dk_targets_sccz80 z88dk_targets_more: \ z88dk_targets_sccz80_more endif # z88dk_targets_sccz80: # make $(Z88DK_MAKE_OPTS) z88dk_targets_a-k # make $(Z88DK_MAKE_OPTS) z88dk_targets_l-p # make $(Z88DK_MAKE_OPTS) z88dk_targets_q-z # z88dk_targets: # make $(Z88DK_MAKE_OPTS) z88dk_targets_sccz80 # make $(Z88DK_MAKE_OPTS) z88dk_targets_zsdcc ================================================ FILE: src/games/chase/makefiles.chase/makefiles_z88dk/Makefile_z88dk_a-k ================================================ # ------------------------------------------------------------------------------------------ # Z88DK A-K # ifeq ($(DO_WIN),1) z88dk_targets_a-k: \ ace_targets \ c128_z80_targets \ coleco_targets \ coleco_adam_targets \ cpc_targets \ cpm_targets \ gb_targets z88dk_targets_a-k_more: \ abc80_targets \ abc800_targets \ ace_targets \ alphatro_targets \ altair8800_targets \ attache_targets \ aussie_targets \ bic_targets \ c128_z80_targets \ camputers_lynx_targets \ coleco_targets \ coleco_adam_targets \ cpc_targets \ cpm_targets \ dai_targets \ dmv_targets \ eg2k_targets \ einstein_targets \ enterprise_targets \ excalibur64_targets \ fp1100_targets \ g800_targets \ gb_targets \ hemc_targets \ hgmc_targets \ homelab_targets \ homelab2_targets \ kaypro_targets \ kc_targets \ kramermc_targets else z88dk_targets_a-k: \ ace_targets \ coleco_targets \ coleco_adam_targets \ cpc_targets \ cpm_targets \ gb_targets z88dk_targets_a-k_more: \ abc80_targets \ abc800_targets \ ace_targets \ alphatro_targets \ altair8800_targets \ attache_targets \ aussie_targets \ bic_targets \ camputers_lynx_targets \ coleco_targets \ coleco_adam_targets \ cpc_targets \ cpm_targets \ dai_targets \ dmv_targets \ eg2k_targets \ einstein_targets \ enterprise_targets \ excalibur64_targets \ fp1100_targets \ g800_targets \ gb_targets \ hemc_targets \ hgmc_targets \ homelab_targets \ homelab2_targets \ kaypro_targets \ kc_targets \ kramermc_targets endif # z88dk_targets_a-k: # $(MAKE) $(Z88DK_MAKE_OPTS) z88dk_targets_a-k_sequential -f games/$(GAME_NAME)/makefiles.chase/makefiles_z88dk/Makefile_z88dk_a-k # ------------------------------------------------------------------------------------------ abc80_targets: \ abc80_light abc80 abc800_targets: \ abc800 ace_targets: \ ace_exp_16k alphatro_targets: \ alphatro altair8800_targets: \ altair8800 attache_targets: \ attache attache_chars aussie_targets: \ aussie bic_targets: \ bic c128_z80_targets: \ c128_z80_40col c128_z80_80col camputers_lynx_targets: \ camputers_lynx coleco_targets: \ coleco bit90 coleco_adam_targets: \ coleco_adam cpc_targets: \ cpc cpm_z80_targets: \ cpm_z80 cpm_8080_targets: \ cpm_8080 dai_targets: \ dai dmv_targets: \ dmv eg2k_targets: \ eg2k einstein_targets: \ einstein enterprise_targets: \ enterprise_buffered excalibur64_targets: \ excalibur64 fp1100_targets: \ fp1100 g800_targets: \ g800_turn_based gb_targets: \ gb hemc_targets: \ hemc hgmc_targets: \ hgmc homelab_targets: \ homelab homelab2_targets: \ homelab2 kaypro_targets: \ kaypro kaypro83 kc_targets: \ kc_tiny kc_light kc kramermc_targets: \ kramermc # ------------------------------------------------------------------------------------------ ############################# # ABC80 abc80: $(Z88DK_PATH)$(MYZ88DK) +abc80 $(SCCZ80_OPTS) -lm -subtype=hex -zorg=49200 \ $(INCLUDE_OPTS) \ -pragma-include:$(CFG_PATH)/z88dk/zpragma_clib.inc \ -D__ABC80__ -clib=ansi -vn \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS \ -DLESS_TEXT \ -DSIMPLE_STRATEGY \ -DNO_BLINKING \ -DNO_HINTS \ -D__NO_WAIT \ -DNO_BORDER \ -DNO_RANDOM_LEVEL \ -D__NO_SCREEN_COLOR_INIT \ -D_XL_NO_SLEEP \ -DFLAT_ENEMIES \ -lndos -create-app -o abc80.bin \ $(FULL_FILES) $(TOOLS_PATH)/z88dk/abc80/bin2bac2$(COMPILEDEXT) abc80.bin $(BUILD_PATH)/xchase.bac 49200 # $(TOOLS_PATH)/z88dk/abc80/bin2abc --bac80 -o $(BUILD_PATH)/xchase.bac -s 49200 abc80.bin $(TOOLS_PATH)/z88dk/abc80/dosgen$(COMPILEDEXT) $(BUILD_PATH)/X$(GAME_NAME)_abc80.dsk $(TOOLS_PATH)/z88dk/abc80/doscopy$(COMPILEDEXT) $(BUILD_PATH)/X$(GAME_NAME)_abc80.dsk -b $(BUILD_PATH)/xchase.bac rm abc80.bin mv $(BUILD_PATH)/xchase.bac $(BUILD_PATH)/X$(GAME_NAME)_abc80.bac mv abc80.ihx $(BUILD_PATH)/X$(GAME_NAME)_abc80.ihx abc80_light: $(Z88DK_PATH)$(MYZ88DK) +abc80 $(SCCZ80_OPTS) -lm \ -subtype=hex \ -zorg=49200 $(INCLUDE_OPTS) \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS \ -D__NO_WAIT \ -D__ABC80__ -clib=ansi -vn -lndos -create-app -o abc80light.bin \ $(LIGHT_FILES) # mv abc80.bin $(BUILD_PATH)/X$(GAME_NAME)_LIGHT_abc80.bin mv abc80light.ihx $(BUILD_PATH)/X$(GAME_NAME)_LIGHT_abc80.ihx $(TOOLS_PATH)/z88dk/abc80/bin2bac2$(COMPILEDEXT) abc80.bin $(BUILD_PATH)/xchase.bac 49200 # $(TOOLS_PATH)/z88dk/abc80/bin2abc --bac80 -o $(BUILD_PATH)/xchase.bac -s 49200 abc80light.bin $(TOOLS_PATH)/z88dk/abc80/dosgen$(COMPILEDEXT) $(BUILD_PATH)/X$(GAME_NAME)_LIGHT_abc80.dsk $(TOOLS_PATH)/z88dk/abc80/doscopy$(COMPILEDEXT) $(BUILD_PATH)/X$(GAME_NAME)_LIGHT_abc80.dsk -b $(BUILD_PATH)/xchase.bac rm abc80light.bin mv $(BUILD_PATH)/xchase.bac $(BUILD_PATH)/X$(GAME_NAME)_LIGHT_abc80.bac # mv abc80light.bin $(BUILD_PATH)/X$(GAME_NAME)_LIGHT_abc80.bin ############################# # ABC800 abc800: abc800_buffered abc800_buffered: $(Z88DK_PATH)$(MYZ88DK) +abc800 $(SCCZ80_OPTS) -lm -subtype=hex -zorg=49200 \ $(INCLUDE_OPTS) \ -pragma-include:$(CFG_PATH)/z88dk/zpragma_clib.inc \ -lndos \ -D__STDIO \ -D_XL_NO_COLOR -DNO_BLINKING -DXSize=39 -DYSize=22 \ -D__BUFFERED_GRAPHICS -D__ALT_PRINT \ -DLESS_TEXT -D_XL_NO_SLEEP -D__NO_WAIT -D__DEFAULT_CLEAR_SCREEN \ -D__NO_INIT_GRAPHICS \ -lndos -create-app -oa800.bin \ $(FULL_FILES) \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c $(TOOLS_PATH)/z88dk/abc80/bin2bac2$(COMPILEDEXT) a800.bin $(BUILD_PATH)/xc800.bac 49200 # $(TOOLS_PATH)/z88dk/abc80/bin2abc --bac800 -o $(BUILD_PATH)/xchase.bac abc80.bin $(TOOLS_PATH)/z88dk/abc80/dosgen$(COMPILEDEXT) $(BUILD_PATH)/X$(GAME_NAME)_$@.dsk $(TOOLS_PATH)/z88dk/abc80/doscopy$(COMPILEDEXT) $(BUILD_PATH)/X$(GAME_NAME)_$@.dsk -b $(BUILD_PATH)/xc800.bac rm a800.bin rm -rf $(BUILD_PATH)/xc800.bac mv a800.ihx $(BUILD_PATH)/X$(GAME_NAME)_$@.ihx ############################# # ACE ace: ace_exp_16k ace_exp_16k: $(ASSETS_PATH)/z88dk_xchase.asm $(Z88DK_PATH)$(MYZ88DK) +ace $(SCCZ80_OPTS) $(INCLUDE_OPTS) \ -D__ACE__ \ \ -D__CONIO_GRAPHICS \ -clib=default \ \ \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/udg/udg_init_graphics.c \ $(ASSETS_PATH)/z88dk_xchase.asm \ $(FULL_FILES) \ -o ace -Cz--audio -create-app cp ace.wav $(BUILD_PATH)/X$(GAME_NAME)_$@.wav cp ace.tap $(BUILD_PATH)/X$(GAME_NAME)_$@.tap rm ace.wav rm ace.tap rm ace ############################# # ALPHATRO # -O3 necessary to build the rom alphatro: $(Z88DK_PATH)$(MYZ88DK) +alphatro $(SCCZ80_ROM_OPTS) $(INCLUDE_OPTS) \ -D__ALPHATRO__ \ -D__VT52 \ -D__CONIO_GRAPHICS \ -D__NO_INIT_GRAPHICS \ -lndos \ -clib=default -pragma-redirect:fputc_cons=fputc_cons_generic \ $(FULL_FILES) \ -create-app -o$(BUILD_PATH)/X$(GAME_NAME)_$@.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@_DATA.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@_BSS.bin ############################# # ATTACHE attache_chars: $(Z88DK_PATH)$(MYZ88DK) +cpm $(SCCZ80_OPTS) -subtype=attache \ $(INCLUDE_OPTS) \ -D__ADM3A \ -D__CPM_80X24__ \ -DLESS_TEXT -D_XL_NO_SLEEP -D__NO_WAIT \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS \ \ -create-app -o$(BUILD_PATH)/X$(GAME_NAME)_$@.bin \ $(FULL_FILES) rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.bin attache: $(ASSETS_PATH)/z88dk_sprites_definitions.h $(Z88DK_PATH)$(MYZ88DK) +cpm $(SCCZ80_OPTS) -subtype=attache \ $(INCLUDE_OPTS) \ -D__ATTACHE__ \ \ -D__ALT_PRINT \ \ -D__Z88DK_SPRITES_GRAPHICS \ -DLESS_TEXT \ \ -DGHOSTS_NUMBER=8 \ -create-app -o$(BUILD_PATH)/X$(GAME_NAME)_$@.bin \ -D__NO_INIT_GRAPHICS \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c \ $(FULL_FILES) rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.bin ############################# # AUSSIE aussie: $(Z88DK_PATH)$(MYZ88DK) +cpm $(SCCZ80_OPTS) -laussie \ $(INCLUDE_OPTS) \ -D__AUSSIE__ \ \ -D__BIT_BANG_SOUND \ -D__ADM3A \ -D__CPM_80X24__ \ -DLESS_TEXT -D_XL_NO_SLEEP -D__NO_WAIT \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS \ -create-app -o$(BUILD_PATH)/X$(GAME_NAME)_$@.bin \ $(FULL_FILES) rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.bin ############################# # ALTAIR 8800 altair8800: altair8800_tiny_buffered altair8800_tiny_buffered: $(Z88DK_PATH)$(MYZ88DK) +altair8800 $(SCCZ80_OPTS) \ $(INCLUDE_OPTS) \ -DXSize=16 \ -DYSize=12 \ -DGHOSTS_NUMBER=6 \ -DBOMBS_NUMBER=4 \ -D__ALTAIR8800__ \ -vn \ -D_XL_NO_COLOR \ -DTINY_GAME -DNO_WALL -DNO_BLINKING \ -DNO_CONTROL_INSTRUCTIONS \ -DNO_DEAD_GHOSTS \ -D_XL_NO_SLEEP \ -DNO_INITIAL_SCREEN \ -D__NO_SCREEN_COLOR_INIT \ -lndos \ -D__BUFFERED_GRAPHICS -D__NO_INIT_GRAPHICS \ \ -DNO_STATS \ -D__ALT_PRINT \ -D__DEFAULT_CLEAR_SCREEN \ -D__STDIO \ -D__NO_WAIT \ -DTURN_BASED \ $(TINY_FILES) \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c \ -create-app -oaltair8800.rom rm -rf altair8800_DATA.bin rm -rf altair8800_BSS.bin mv altair8800.rom $(BUILD_PATH)/X$(GAME_NAME)_TINY_altair8800_buffered.rom mv altair8800.bin $(BUILD_PATH)/X$(GAME_NAME)_TINY_altair8800_buffered.bin ############################# # BIC bic: bic_buffered bic_buffered: $(Z88DK_PATH)$(MYZ88DK) +cpm $(SCCZ80_OPTS) -subtype=bic \ $(INCLUDE_OPTS) \ -DXSize=79 \ -DYSize=21 \ -D_XL_NO_COLOR \ \ -DTURN_BASED \ -D__BUFFERED_GRAPHICS \ -D__STDIO \ -D__NO_INIT_GRAPHICS \ -D__NO_WAIT \ -D_XL_NO_SLEEP \ -D__DEFAULT_CLEAR_SCREEN \ -D__ALT_PRINT \ -create-app -o$(BUILD_PATH)/X$(GAME_NAME)_$@.bin \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c \ $(FULL_FILES) rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.bin ############################# # BIT90 bit90: $(ASSETS_PATH)/z88dk_xchase.asm $(Z88DK_PATH)$(MYZ88DK) +coleco $(SCCZ80_OPTS) $(INCLUDE_OPTS) \ -D__COLECO__ \ -DZ88DK_JOYSTICK \ \ \ -D__VT52 \ -D__CONIO_GRAPHICS \ -lndos \ \ \ -clib=default -pragma-redirect:fputc_cons=fputc_cons_generic \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/udg/udg_init_graphics.c \ $(ASSETS_PATH)/z88dk_xchase.asm \ $(FULL_FILES) \ -create-app -o$(BUILD_PATH)/X$(GAME_NAME)_$@.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@_DATA.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@_BSS.bin ############################# # C128_Z80 c128_z80_80col: $(ASSETS_PATH)/z88dk_sprites_definitions.h $(Z88DK_PATH)$(MYZ88DK) +c128 $(SCCZ80_OPTS) -lgfx128hr \ $(INCLUDE_OPTS) \ -lndos -subtype=disk \ -D__C128_Z80__ -DEXTRA_TITLE \ -D__Z88DK_SPRITES_GRAPHICS \ -DLESS_TEXT \ \ -DNO_BLINKING \ -D__BIT_BANG_SOUND \ -DZ88DK_JOYSTICK \ -DSIMPLE_STRATEGY \ -DGHOSTS_NUMBER=8 \ -D__ALT_PRINT \ -D_XL_NO_COLOR \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/c128/c128_init_graphics.c \ $(FULL_FILES) \ -create-app -oa80.bin $(TOOLS_PATH)/generic/c1541 -format "crosschase,0" d64 FULL_c128_z80_80col.d64 $(TOOLS_PATH)/generic/c1541 -attach FULL_c128_z80_80col.d64 -write a80.ldr $(TOOLS_PATH)/generic/c1541 -attach FULL_c128_z80_80col.d64 -write a80 mv FULL_c128_z80_80col.d64 $(BUILD_PATH)/X$(GAME_NAME)_c128_z80_80col.d64 rm A80.LDR rm A80 rm a80.bin c128_z80: c128_z80_40col c128_z80_40col: $(Z88DK_PATH)$(MYZ88DK) +c128 -compiler=sdcc $(ZSDCC_OPTS) \ $(INCLUDE_OPTS) -DEXTRA_TITLE \ -lndos -subtype=disk \ -D__C128_Z80__ -DXSize=40 \ \ -D__BIT_BANG_SOUND \ -DNO_BLINKING \ -D__INCLUDE_CONIO_H \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS \ $(FULL_FILES) \ -create-app -oa40.bin $(TOOLS_PATH)/generic/c1541 -format "crosschase,0" d64 FULL_c128_z80_40col.d64 $(TOOLS_PATH)/generic/c1541 -attach FULL_c128_z80_40col.d64 -write a40.ldr $(TOOLS_PATH)/generic/c1541 -attach FULL_c128_z80_40col.d64 -write a40 mv FULL_c128_z80_40col.d64 $(BUILD_PATH)/X$(GAME_NAME)_c128_z80_40col.d64 rm A40.LDR rm A40 rm a40.bin ############################# # CAMPUTERS_LYNX camputers_lynx: $(Z88DK_PATH)$(MYZ88DK) +lynx $(SCCZ80_OPTS) $(INCLUDE_OPTS) \ -pragma-redirect:fputc_cons=fputc_cons_generic \ -pragma-redirect:getk=getk_inkey \ -D__CAMPUTERS_LYNX__ \ -vn \ -D__VT52 \ \ \ -lndos \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS \ $(FULL_FILES) \ -create-app -o $(BUILD_PATH)/X$(GAME_NAME)_camputers_lynx.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_camputers_lynx.bin ############################# # COLECO_ADAM coleco_adam: $(Z88DK_PATH)$(MYZ88DK) +cpm $(SCCZ80_OPTS) $(INCLUDE_OPTS) -subtype=adam \ -D__COLECO_ADAM__ \ \ \ -D__VT52 \ -D__CONIO_GRAPHICS -DXSize=29 -DYSize=20 \ -D__NO_INIT_GRAPHICS \ -lndos \ $(FULL_FILES) \ -create-app -oxcadam.bin rm xcadam.bin rm xcadam.com mv xcadam.img $(BUILD_PATH)/X$(GAME_NAME)_$@.img ############################# # COLECO coleco: $(ASSETS_PATH)/z88dk_xchase.asm $(Z88DK_PATH)$(MYZ88DK) +coleco $(SCCZ80_OPTS) $(INCLUDE_OPTS) \ -D__COLECO__ \ -DZ88DK_JOYSTICK \ \ \ -D__VT52 \ -D__CONIO_GRAPHICS \ -lndos \ \ -DEXTRA_TITLE \ -clib=default -pragma-redirect:fputc_cons=fputc_cons_generic \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/udg/udg_init_graphics.c \ $(ASSETS_PATH)/z88dk_xchase.asm \ $(FULL_FILES) \ -create-app -o$(BUILD_PATH)/X$(GAME_NAME)_coleco.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_coleco.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_coleco_DATA.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_coleco_BSS.bin ############################# # CPC cpc: cpc_mode0 # broken because of chasedEnemyPtr cpc_mode0: $(ASSETS_PATH)/z88dk_xchase.asm $(TOOLS_PATH)/z88dk/cpc/nocart/nocart$(COMPILEDEXT) $(Z88DK_PATH)$(MYZ88DK) +cpc -subtype=dsk $(SCCZ80_OPTS) $(INCLUDE_OPTS) \ -pragma-include:$(CFG_PATH)/z88dk/zpragma_clib.inc \ -DYSize=25 -DXSize=20 -D__SCREEN_MODE=0 \ -D__ALT_SLEEP -DEXTRA_TITLE \ \ -DZ88DK_JOYSTICK \ -D_XL_SLOW_DOWN_FACTOR=100 \ -D__CPC__ \ -lndos -create-app \ -D__CONIO_GRAPHICS \ \ -pragma-redirect:fputc_cons=fputc_cons_generic \ -o xbin \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/udg/udg_init_graphics.c \ $(CROSS_LIB_PATH)/sound/z88dk/psg/ay-3-8910_psg_sounds.c \ $(ASSETS_PATH)/z88dk_xchase.asm \ $(CROSS_LIB_PATH)/sleep/sleep_macros.c \ $(FULL_FILES) mv xbin $(BUILD_PATH)/ cp $(TOOLS_PATH)/z88dk/cpc/nocart/*.rom . $(TOOLS_PATH)/z88dk/cpc/nocart/nocart$(COMPILEDEXT) xbin.dsk $(BUILD_PATH)/X$(GAME_NAME)_$@_gx4000.cpr -c 'run"XBIN.CPC' rm os.rom rm amsdos.rom rm basic.rom mv xbin.dsk $(BUILD_PATH)/X$(GAME_NAME)_$@.dsk rm -rf xbin_BANK_7.bin rm -rf xbin.cpc rm -rf $(BUILD_PATH)/xbin cpc_cpcrslib: $(ASSETS_PATH)/z88dk_cpc_Chars8.asm $(Z88DK_PATH)$(MYZ88DK) +cpc -subtype=dsk $(SCCZ80_OPTS) $(INCLUDE_OPTS) -vn -clib=ansi \ -D__CPC__ -DEXTRA_TITLE \ -DZ88DK_JOYSTICK \ -D__PSG_SOUND \ -D__CPCRSLIB_GRAPHICS -D_XL_SLOW_DOWN_FACTOR=600 \ -lndos -create-app -o $(BUILD_PATH)/X$(GAME_NAME)XXX_cpc \ -D__CPCRSLIB_GRAPHICS \ $(ASSETS_PATH)/z88dk_cpc_Chars8.asm \ $(CROSS_LIB_PATH)/sound/z88dk/psg/ay-3-8910_psg_sounds.c \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/cpc/cpc_cpcrslib_init_graphics.c \ $(FULL_FILES) # $(TOOLS_PATH)/z88dk/cpc/2cdt.exe -n -r cross_chase $(BUILD_PATH)/X$(GAME_NAME)XXX_cpc.cpc $(BUILD_PATH)/X$(GAME_NAME)XXX_cpc.cdt # rm -rf X$(GAME_NAME)XXX_cpc.dsk # $(TOOLS_PATH)/z88dk/cpc/cpcxfsw -nd X$(GAME_NAME)XXX_cpc.dsk # $(TOOLS_PATH)/z88dk/cpc/cpcxfsw X$(GAME_NAME)XXX_cpc.dsk -p $(BUILD_PATH)/X$(GAME_NAME)XXX_cpc.cpc xchase # mv X$(GAME_NAME)XXX_cpc.dsk $(BUILD_PATH)/ # cp $(TOOLS_PATH)/z88dk/cpc/nocart/*.rom . # $(TOOLS_PATH)/z88dk/cpc/nocart/nocart.exe $(BUILD_PATH)/X$(GAME_NAME)XXX_cpc.dsk $(BUILD_PATH)/X$(GAME_NAME)XXX_gx4000.cpr -c 'run"xchase' # rm os.rom # rm amsdos.rom # rm basic.rom # rm -rf $(BUILD_PATH)/X$(GAME_NAME)XXX_cpc rm -rf $(BUILD_PATH)/X$(GAME_NAME)XXX_cpc_BANK_7.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)XXX_cpc.cpc rm -rf $(BUILD_PATH)/X$(GAME_NAME)XXX_cpc ############################# # CPM (Z80) cpm_targets: cpm_z80_targets cpm_8080_targets cpm: cpm_z80 cpm_z80_targets: cpm_z80 cpm_z80: cpm_z80_adm3a cpm_z80_adm3a: $(Z88DK_PATH)$(MYZ88DK) +cpm $(SCCZ80_OPTS) \ $(INCLUDE_OPTS) -DEXTRA_TITLE \ -D__ADM3A \ -D__CPM_80X24__ \ -DLESS_TEXT -D__NO_WAIT \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS \ \ -create-app -o$(BUILD_PATH)/X$(GAME_NAME)_$@.bin \ $(FULL_FILES) rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.bin cpm_8080_targets: cpm_8080 cpm_8080_buffered cpm_8080: cpm_8080_adm3a cpm_8080_buffered cpm_8080_adm3a: $(Z88DK_PATH)$(MYZ88DK) +cpm $(SCCZ80_OPTS) -m8080 -clib=8080 \ $(INCLUDE_OPTS) -DEXTRA_TITLE \ -D__ADM3A \ -D__CPM_80X24__ \ -DLESS_TEXT -D__NO_WAIT \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS \ \ -create-app -o$(BUILD_PATH)/X$(GAME_NAME)_$@.bin \ $(FULL_FILES) rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.bin cpm_buffered: cpm_8080_buffered cpm_8080_buffered: $(Z88DK_PATH)$(MYZ88DK) +cpm $(SCCZ80_OPTS) -m8080 -clib=8080 \ $(INCLUDE_OPTS) -DEXTRA_TITLE \ -DXSize=39 \ -DYSize=23 \ -D_XL_NO_COLOR \ \ -DTURN_BASED \ -D__BUFFERED_GRAPHICS \ -D__STDIO \ -D__NO_INIT_GRAPHICS \ -D__NO_WAIT \ -D_XL_NO_SLEEP \ -D__DEFAULT_CLEAR_SCREEN \ -D__ALT_PRINT \ -create-app -o$(BUILD_PATH)/X$(GAME_NAME)_$@.bin \ $(FULL_FILES) \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.bin ############################# # DAI dai: dai_buffered dai_buffered: $(Z88DK_PATH)$(MYZ88DK) +dai $(SCCZ80_OPTS) $(INCLUDE_OPTS) \ -D__DAI__ \ -DXSize=47 \ -DYSize=21 \ -D__NO_SCREEN_COLOR_INIT -D__BUFFERED_GRAPHICS -DTURN_BASED \ -D_XL_NO_COLOR -D__ALT_PRINT -D__STDIO \ -D__NO_WAIT -D_XL_NO_SLEEP -D__DEFAULT_CLEAR_SCREEN \ -D__NO_INIT_GRAPHICS \ $(FULL_FILES) \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c \ -create-app -o$(BUILD_PATH)/X$(GAME_NAME)_$@.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.bin ############################# # DMV dmv: $(Z88DK_PATH)$(MYZ88DK) +cpm $(SCCZ80_OPTS) -subtype=dmv \ $(INCLUDE_OPTS) \ -D__CPM_80X24__ \ -D__ADM3A_WITH_UNDEF \ -D__INCLUDE_CONIO_H \ -D__DMV__ \ -DLESS_TEXT \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS \ \ -create-app -o$(BUILD_PATH)/X$(GAME_NAME)_$@.bin \ $(FULL_FILES) rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.bin ############################# # EG2K eg2k: $(ASSETS_PATH)/z88dk_xchase.asm $(Z88DK_PATH)$(MYZ88DK) +trs80 $(SCCZ80_OPTS) \ $(INCLUDE_OPTS) \ -D__EG2K__ \ -subtype=eg2000disk \ -pragma-redirect:getk=getk_inkey \ $(INCLUDE_OPTS) -D__BIT_BANG_SOUND \ -D__EG2K__ \ \ \ -D__VT52 \ -D__CONIO_GRAPHICS \ -lndos \ \ \ -DLESS_TEXT \ -clib=default -pragma-redirect:fputc_cons=fputc_cons_generic \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/udg/udg_init_graphics.c \ $(ASSETS_PATH)/z88dk_xchase.asm \ $(FULL_FILES) \ $(CROSS_LIB_PATH)/sound/z88dk/psg/ay-3-8910_psg_sounds.c \ -create-app -o$(BUILD_PATH)/X$(GAME_NAME)_$@.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.bin ############################# # EINSTEIN einstein_no_gfx: $(Z88DK_PATH)$(MYZ88DK) +cpm $(SCCZ80_OPTS) -subtype=einstein -leinstein \ -pragma-define:ansicolumns=32 \ $(INCLUDE_OPTS) \ -D__EINSTEIN__ \ -D__INCLUDE_CONIO_H \ -DLESS_TEXT \ -clib=ansi \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS \ -create-app -o$(BUILD_PATH)/X$(GAME_NAME)_$@.bin \ $(FULL_FILES) rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.bin einstein: $(ASSETS_PATH)/z88dk_xchase.asm $(Z88DK_PATH)$(MYZ88DK) +cpm $(SCCZ80_OPTS) -subtype=einstein -leinstein \ -pragma-define:ansicolumns=32 \ $(INCLUDE_OPTS) \ -D__EINSTEIN__ \ -D__INCLUDE_CONIO_H \ -DLESS_TEXT \ -clib=ansi \ -D__CONIO_GRAPHICS \ -create-app -o$(BUILD_PATH)/X$(GAME_NAME)_$@.bin \ $(ASSETS_PATH)/z88dk_xchase.asm \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/udg/udg_init_graphics.c \ $(FULL_FILES) rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.bin ############################# # ENTERPRISE enterprise: enterprise_buffered # TODO: Try -subtype=com enterprise_buffered: $(Z88DK_PATH)$(MYZ88DK) +enterprise $(SCCZ80_OPTS) \ $(INCLUDE_OPTS) \ -vn \ -D__ENTERPRISE__ \ -DXSize=20 \ -DYSize=16 \ -D_XL_NO_COLOR \ \ -DTURN_BASED \ -D__BUFFERED_GRAPHICS \ -D__NO_INIT_GRAPHICS \ -D__ALT_PRINT \ -D__DEFAULT_CLEAR_SCREEN \ -D__STDIO -D__BIT_BANG_SOUND \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c \ $(FULL_FILES) \ -create-app -o enterprise.bin mv enterprise.app FULL_enterprise.app rm enterprise.bin tar czvf FULL_enterprise.tar.zip FULL_enterprise.app rm FULL_enterprise.app mv FULL_enterprise.tar.zip $(BUILD_PATH)/X$(GAME_NAME)_$@.tar.zip ############################# # EXCALIBUR64 excalibur64_turn_bsed: $(Z88DK_PATH)$(MYZ88DK) +cpm $(SCCZ80_OPTS) -subtype=excali64 -pragma-redirect:fputc_cons=fputc_cons_generic \ $(INCLUDE_OPTS) \ -D__CPM_80X24__ \ -D__INCLUDE_CONIO_H \ -D__EXCALI64__ -D_XL_SLOW_DOWN_FACTOR=2000 -DTURN_BASED \ -DLESS_TEXT \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS \ \ -create-app -oxcex64tb.bin \ $(FULL_FILES) mv xcex64tb.img $(BUILD_PATH)/X$(GAME_NAME)_$@.img rm xcex64tb_HIMEM.bin rm xcex64tb.bin excalibur64: $(Z88DK_PATH)$(MYZ88DK) +cpm $(SCCZ80_OPTS) -subtype=excali64 -pragma-redirect:fputc_cons=fputc_cons_generic \ -pragma-redirect:getk=getk_inkey \ $(INCLUDE_OPTS) \ -D__CPM_80X24__ \ -D__INCLUDE_CONIO_H \ -D__EXCALI64__ -D_XL_SLOW_DOWN_FACTOR=1600 \ -DLESS_TEXT \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS \ \ -create-app -oxcexca64.bin \ $(FULL_FILES) mv xcexca64.img $(BUILD_PATH)/X$(GAME_NAME)_$@.img rm xcexca64_HIMEM.bin rm xcexca64.bin rm xcexca64.com ############################# # FP1100 fp1100: $(Z88DK_PATH)$(MYZ88DK) +fp1100 $(SCCZ80_OPTS) $(INCLUDE_OPTS) -pragma-redirect:fputc_cons=fputc_cons_generic \ -D__FP1100__ -vn \ -D__VT52 \ \ \ -lndos \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS \ $(FULL_FILES) \ -create-app -o fp1100.bin mv fp1100.d88 $(BUILD_PATH)/X$(GAME_NAME)_$@.d88 rm fp1100.bin rm fp1100_BOOTSTRAP.bin ############################# # G800 g800: g800_turn_based g800_turn_based: $(Z88DK_PATH)$(MYZ88DK) +g800 $(SCCZ80_ROM_OPTS) -clib=g850b $(INCLUDE_OPTS) \ -D__G800__ \ -DTURN_BASED \ -DNO_BLINKING \ -vn \ \ -lndos \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS \ $(FULL_FILES) \ -create-app -o g800.bin rm g800.bin rm g800.rom mv g800.ihx $(BUILD_PATH)/X$(GAME_NAME)_$@_turn_based.ihx ############################# # GAME GEAR gg: gamegear gamegear: gamegear_gfx gamegear_gfx: $(ASSETS_PATH)/z88dk_xchase.asm $(Z88DK_PATH)$(MYZ88DK) +sms -subtype=gamegear $(SCCZ80_ROM_OPTS) $(INCLUDE_OPTS) -pragma-redirect:fputc_cons=fputc_cons_generic \ -D__SMS__ -D__GAME_GEAR__ -DEXTRA_TITLE \ -DXSize=20 \ -DYSize=18 \ -D__NO_SCREEN_COLOR_INIT \ \ -D__BIT_BANG_SOUND \ -D__CONIO_GRAPHICS -D__INCLUDE_CONIO_H -DZ88DK_JOYSTICK \ -lndos -D_XL_SLOW_DOWN_FACTOR=1600 \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/udg/udg_init_graphics.c \ $(ASSETS_PATH)/z88dk_xchase.asm \ $(FULL_FILES) \ -create-app -o$(BUILD_PATH)/X$(GAME_NAME)_gamegear.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_gamegear.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_gamegear_BSS.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_gamegear_DATA.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_gamegear_BANK_1F.bin gamegear_tiny_buffered: $(Z88DK_PATH)$(MYZ88DK) +sms $(SCCZ80_OPTS) -subtype=gamegear -clib=sdcc_iy -startup=17 \ $(INCLUDE_OPTS) \ -pragma-include:$(CFG_PATH)/z88dk/zpragma_sms.inc \ -DXSize=19 \ -DYSize=15 \ -D__SMS__ \ -D_XL_NO_COLOR \ -DTINY_GAME -DNO_WALL -DNO_BLINKING \ -D__STDIO \ -DLESS_TEXT \ -create-app \ -D__BUFFERED_GRAPHICS \ -DTURN_BASED \ -D__ALT_PRINT \ -D__DEFAULT_CLEAR_SCREEN \ -D_XL_NO_SLEEP \ -D__NO_WAIT \ -o $(BUILD_PATH)/X$(GAME_NAME)_TINY_gamegear_buffered.bin \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/sms/sms_init_graphics.c \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c \ $(TINY_FILES) rm -rf $(BUILD_PATH)/X$(GAME_NAME)_TINY_gamegear_buffered_CODE.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_TINY_gamegear_buffered_DATA.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_TINY_gamegear_buffered_BSS.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_TINY_gamegear_buffered_UNASSIGNED.bin ############################# # GB # $(CROSS_LIB_PATH)/display/init_graphics/z88dk/udg/udg_init_graphics.c # $(ASSETS_PATH)/z88dk_xchase.asm gb: gb_gfx gb_no_gfx: $(Z88DK_PATH)$(MYZ88DK) +gb $(SCCZ80_ROM_OPTS) $(INCLUDE_OPTS) -pragma-redirect:fputc_cons=fputc_cons_generic \ -D__GB__ \ -DXSize=20 \ -DYSize=18 \ -D__NO_SCREEN_COLOR_INIT \ -D_XL_NO_COLOR \ \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS -DZ88DK_JOYSTICK \ -lndos -D_XL_SLOW_DOWN_FACTOR=1200 \ $(FULL_FILES) \ -create-app -o$(BUILD_PATH)/X$(GAME_NAME)_gb_no_gfx.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_gb_no_gfx.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_gb_no_gfx_BSS.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_gb_no_gfx_DATA.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_gb_no_gfx_BANK_1F.bin gb_gfx: $(ASSETS_PATH)/z88dk_gameboy.asm $(Z88DK_PATH)$(MYZ88DK) +gb $(SCCZ80_ROM_OPTS) $(INCLUDE_OPTS) -pragma-redirect:fputc_cons=fputc_cons_generic \ -D__GB__ -DEXTRA_TITLE \ -DXSize=20 \ -DYSize=18 \ -D__NO_SCREEN_COLOR_INIT \ -D_XL_NO_COLOR \ \ -D__CONIO_GRAPHICS -DZ88DK_JOYSTICK \ -lndos -D_XL_SLOW_DOWN_FACTOR=1400 \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/udg/udg_init_graphics.c \ $(ASSETS_PATH)/z88dk_gameboy.asm \ $(FULL_FILES) \ $(CROSS_LIB_PATH)/sound/z88dk/gb/gb_sounds.c \ -create-app -o$(BUILD_PATH)/X$(GAME_NAME)_gb.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_gb.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_gb_BSS.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_gb_DATA.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_gb_BANK_1F.bin ############################# # HOMELAB (4) homelab: $(Z88DK_PATH)$(MYZ88DK) +homelab $(SCCZ80_OPTS) $(INCLUDE_OPTS) \ -D__HOMELAB__ \ -DXSize=64 \ -DYSize=30 \ -D__NO_SCREEN_COLOR_INIT \ -D_XL_NO_COLOR \ \ -D__VT52 \ -D__CONIO_GRAPHICS \ -lndos \ -D__NO_INIT_GRAPHICS \ $(FULL_FILES) \ -create-app -o$(BUILD_PATH)/X$(GAME_NAME)_$@.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.bin ############################# # HOMELAB2 homelab2: $(Z88DK_PATH)$(MYZ88DK) +homelab2 $(SCCZ80_OPTS) $(INCLUDE_OPTS) \ -D__HOMELAB2__ \ -DXSize=40 \ -DYSize=23 \ -D__NO_SCREEN_COLOR_INIT \ -D_XL_NO_COLOR \ \ -D__VT52 \ -D__CONIO_GRAPHICS \ -lndos \ -D__NO_INIT_GRAPHICS \ $(FULL_FILES) \ -create-app -o$(BUILD_PATH)/X$(GAME_NAME)_$@.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.bin ############################# # HEMC hemc: $(Z88DK_PATH)$(MYZ88DK) +hemc $(SCCZ80_OPTS) $(INCLUDE_OPTS) -pragma-redirect:fputc_cons=fputc_cons_generic \ -D__HEMC__ \ -DXSize=64 \ -DYSize=22 \ -D__NO_SCREEN_COLOR_INIT \ \ -D__VT52 \ -D__CONIO_GRAPHICS -D_XL_NO_COLOR \ -lndos \ -D__NO_INIT_GRAPHICS \ $(FULL_FILES) \ -create-app -o$(BUILD_PATH)/X$(GAME_NAME)_$@.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.bin ############################# # HGMC hgmc: $(Z88DK_PATH)$(MYZ88DK) +hgmc $(SCCZ80_OPTS) $(INCLUDE_OPTS) -pragma-redirect:fputc_cons=fputc_cons_generic \ -D__HGMC__ \ -DXSize=32 \ -DYSize=30 \ -D__NO_SCREEN_COLOR_INIT \ \ -D__VT52 \ -D__CONIO_GRAPHICS -D_XL_NO_COLOR \ -lndos \ -D__NO_INIT_GRAPHICS \ $(FULL_FILES) \ -create-app -o$(BUILD_PATH)/X$(GAME_NAME)_$@.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.bin ############################# # KAYPRO kaypro: kaypro2x kaypro84: kaypro2x # kaypro84 (-subtype=kaypro84) kaypro2x: $(ASSETS_PATH)/z88dk_sprites_definitions.h $(Z88DK_PATH)$(MYZ88DK) +cpm $(SCCZ80_OPTS) -subtype=kaypro84 -lgfxkp \ $(INCLUDE_OPTS) \ -D__KAYPRO84__ \ -D__ALT_PRINT \ \ -D__Z88DK_SPRITES_GRAPHICS \ -DLESS_TEXT \ \ -create-app -o$(BUILD_PATH)/X$(GAME_NAME)_$@.bin \ -D__NO_INIT_GRAPHICS \ -DINITIAL_GHOST_FREEZE \ \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c \ $(FULL_FILES) rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.bin # kaypro83 (-subtype=kaypro83) kaypro83: $(ASSETS_PATH)/z88dk_sprites_definitions.h $(Z88DK_PATH)$(MYZ88DK) +cpm $(SCCZ80_OPTS) -subtype=kaypro83 -lgfxkp \ $(INCLUDE_OPTS) \ -D__KAYPRO__ \ -D__ALT_PRINT \ \ -D__Z88DK_SPRITES_GRAPHICS \ -DLESS_TEXT \ \ -create-app -o$(BUILD_PATH)/X$(GAME_NAME)_$@.bin \ -D__NO_INIT_GRAPHICS \ -DINITIAL_GHOST_FREEZE \ \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c \ $(FULL_FILES) rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@_HIMEM.bin ############################# # KC kc_light: $(ASSETS_PATH)/z88dk_xchase.asm $(Z88DK_PATH)$(MYZ88DK) +kc $(SCCZ80_OPTS) -subtype=tap $(INCLUDE_OPTS) \ -D__KC__ \ -D__VT52 \ -D__CONIO_GRAPHICS \ -lndos \ \ \ -clib=default -pragma-redirect:fputc_cons=fputc_cons_generic \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/udg/udg_init_graphics.c \ $(ASSETS_PATH)/z88dk_xchase.asm \ $(LIGHT_FILES) \ -create-app -o$(BUILD_PATH)/X$(GAME_NAME)_LIGHT_kc.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_LIGHT_kc.bin kc_tiny: $(ASSETS_PATH)/z88dk_xchase.asm $(Z88DK_PATH)$(MYZ88DK) +kc $(SCCZ80_OPTS) -subtype=tap $(INCLUDE_OPTS) \ -D__KC__ \ -DTINY_GAME -DNO_WALL -DNO_BLINKING \ -D__VT52 \ -D__CONIO_GRAPHICS \ -lndos \ \ \ -clib=default -pragma-redirect:fputc_cons=fputc_cons_generic \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/udg/udg_init_graphics.c \ $(ASSETS_PATH)/z88dk_xchase.asm \ $(TINY_FILES) \ -create-app -o$(BUILD_PATH)/X$(GAME_NAME)_TINY_kc.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_TINY_kc.bin kc: $(ASSETS_PATH)/z88dk_xchase.asm $(Z88DK_PATH)$(MYZ88DK) +kc $(SCCZ80_OPTS) -subtype=tap $(INCLUDE_OPTS) \ -D__KC__ \ \ \ -D__VT52 \ -D__CONIO_GRAPHICS \ -lndos \ \ \ -clib=default -pragma-redirect:fputc_cons=fputc_cons_generic \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/udg/udg_init_graphics.c \ $(ASSETS_PATH)/z88dk_xchase.asm \ $(FULL_FILES) \ -create-app -o$(BUILD_PATH)/X$(GAME_NAME)_kc.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_kc.bin ############################# # KRAMER-MC kramermc: $(Z88DK_PATH)$(MYZ88DK) +kramermc $(SCCZ80_OPTS) $(INCLUDE_OPTS) \ -clib=default -pragma-redirect:fputc_cons=fputc_cons_generic \ -D__KRAMERMC__ \ -DXSize=64 \ -DYSize=16 \ -D__NO_SCREEN_COLOR_INIT \ \ -D__VT52 \ -D__CONIO_GRAPHICS -D__STDIO -DTURN_BASED \ -lndos \ -D__NO_INIT_GRAPHICS \ $(FULL_FILES) \ -create-app -o$(BUILD_PATH)/X$(GAME_NAME)_$@.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.bin ================================================ FILE: src/games/chase/makefiles.chase/makefiles_z88dk/Makefile_z88dk_l-p ================================================ # ------------------------------------------------------------------------------------------ # Z88DK L-P # z88dk_targets_l-p: \ laser500_targets \ m5_targets \ microbee_targets \ msx_targets \ mtx_targets \ mz_targets z88dk_targets_l-p_more: \ lambda_targets \ laser500_targets \ m5_targets \ microbee_targets \ mikro80_targets \ msx_targets \ mtx_targets \ multi8_targets \ myvision_targets \ mz_targets \ mz2500_targets \ nascom_targets \ nc100_targets \ nc200_targets \ newbrain_targets \ ondra_targets \ osborne1_targets \ osca_targets \ pasopia7_targets \ pencil2_targets \ p2000_targets \ pc6001_targets \ pc88_targets \ pcw_targets \ pmd85_targets \ pps_targets \ primo_targets \ pv2000_targets \ px4_targets \ px8_targets # ------------------------------------------------------------------------------------------ lambda_targets: \ lambda_16k laser500_targets: \ laser500 m5_targets: \ m5 microbee_targets: \ microbee_16k_no_gfx microbee_32k mikro80_targets: \ mikro80 msx_targets: \ msx_32k_rom mtx_targets: \ mtx mtx500 multi8_targets: \ multi8 myvision_targets: \ myvision mz_targets: \ mz mz2500_targets: \ mz2500 nc100_targets: \ nc100 nc200_targets: \ nc200 nascom_targets: \ nascom_16k nascom_32k newbrain_targets: \ newbrain ondra_targets: \ ondra ondra_no_gfx osborne1_targets: \ osborne1 osborne1_chars osca_targets: \ osca p2000_targets: \ p2000_16k p2000_32k pasopia7_targets: \ pasopia7 pencil2_targets: \ pencil2 pencil2_no_gfx pc6001_targets: \ pc6001_16k pc6001_32k pc88_targets: \ pc88 pc88_32k pcw_targets: \ pcw40 pcw80 pmd85_targets: \ pmd85 pmd85_no_gfx pps_targets: \ pps primo_targets: \ primo primo_no_gfx pv2000_targets: \ pv2000 px4_targets: \ px4 px8_targets: \ px8 # ------------------------------------------------------------------------------------------ ############################# # LAMBDA lambda: lambda_16k lambda_16k: $(Z88DK_PATH)$(MYZ88DK) +lambda $(SCCZ80_OPTS) $(INCLUDE_OPTS) \ -vn -D__LAMBDA__ \ \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS \ -lndos -create-app -o $(BUILD_PATH)/X$(GAME_NAME)_$@.prg \ $(FULL_FILES) rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.prg ############################# # LASER500 laser500: laser500_gfx laser500_no_gfx: $(Z88DK_PATH)$(MYZ88DK) +laser500 $(SCCZ80_OPTS) -vn -Cz--audio \ -create-app -o $@.bin \ $(INCLUDE_OPTS) -DEXTRA_TITLE \ -D__LASER500__ \ -D__BIT_BANG_SOUND \ \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS \ -lndos \ $(FULL_FILES) mv laser500.bin $(BUILD_PATH)/X$(GAME_NAME)_$@.bin rm laser500.cas mv laser500.wav $(BUILD_PATH)/X$(GAME_NAME)_$@.wav # -compiler=sdcc laser500_gfx: $(ASSETS_PATH)/z88dk_xchase.asm $(Z88DK_PATH)$(MYZ88DK) +laser500 $(SCCZ80_OPTS) -vn -Cz--audio \ -create-app -o $@.bin -DEXTRA_TITLE \ $(INCLUDE_OPTS) \ -D__LASER500__ -DXSize=40 -DYSize=22 -D__SCREEN_MODE=2 \ -D__BIT_BANG_SOUND \ -DLESS_TEXT \ -D_XL_SLOW_DOWN_FACTOR=400 \ -D__CONIO_GRAPHICS \ \ \ -lndos \ $(FULL_FILES) \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/udg/udg_init_graphics.c \ $(ASSETS_PATH)/z88dk_xchase.asm mv $@.bin $(BUILD_PATH)/X$(GAME_NAME)_laser500.bin rm $@.cas mv $@.wav $(BUILD_PATH)/X$(GAME_NAME)_laser500.wav ############################# # M5 m5: $(ASSETS_PATH)/z88dk_xchase.asm $(Z88DK_PATH)$(MYZ88DK) +m5 $(SCCZ80_OPTS) \ $(INCLUDE_OPTS) -DEXTRA_TITLE \ -lm -create-app -Cz--audio -subtype=tape \ -pragma-define:REGISTER_SP=65000 \ -D__M5__ \ -clib=ansi -pragma-define:ansicolumns=32 \ -DLESS_TEXT \ -D__BIT_BANG_SOUND \ -D__CONIO_GRAPHICS \ \ \ -clib=default -pragma-redirect:fputc_cons=fputc_cons_generic \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/udg/udg_init_graphics.c \ $(ASSETS_PATH)/z88dk_xchase.asm \ $(FULL_FILES) \ -o$(BUILD_PATH)/X$(GAME_NAME)_$@.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.cas ############################# # MICROBEE microbee_16k_no_gfx: $(Z88DK_PATH)$(MYZ88DK) +bee $(SCCZ80_OPTS) $(INCLUDE_OPTS) \ -D__BEE__ -clib=ansi -vn \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS \ -lndos -create-app -o $(BUILD_PATH)/X$(GAME_NAME)_LIGHT_microbee_16k_no_gfx.prg \ $(LIGHT_FILES) rm -rf $(BUILD_PATH)/X$(GAME_NAME)_LIGHT_microbee_16k_no_gfx.prg microbee: microbee_32k microbee_32k: $(ASSETS_PATH)/z88dk_sprites_definitions.h $(Z88DK_PATH)$(MYZ88DK) +bee $(SCCZ80_OPTS) -lgfxnc100 \ $(INCLUDE_OPTS) -DEXTRA_TITLE \ -D__NC100__ \ -D__ALT_PRINT \ \ -D__Z88DK_SPRITES_GRAPHICS \ -DLESS_TEXT \ \ -create-app -o$(BUILD_PATH)/X$(GAME_NAME)_microbee_32k.bin \ -D__NO_INIT_GRAPHICS \ -DINITIAL_GHOST_FREEZE -D__BIT_BANG_SOUND \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c \ $(FULL_FILES) rm -rf $(BUILD_PATH)/X$(GAME_NAME)_microbee_32k.bin ############################# # MIKRO80 mikro80: $(Z88DK_PATH)$(MYZ88DK) +mikro80 $(SCCZ80_OPTS) $(INCLUDE_OPTS) \ -D__MIKRO80__ \ -DXSize=64 \ -DYSize=30 \ -D__NO_SCREEN_COLOR_INIT \ -D_XL_NO_COLOR \ \ -D__VT52 \ -D__CONIO_GRAPHICS \ -lndos \ -D__NO_INIT_GRAPHICS \ $(FULL_FILES) \ -create-app -o$(BUILD_PATH)/X$(GAME_NAME)_$@.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.bin ############################# # MSX msx: msx_32k_rom msx_32k_rom_fixed_colors: $(ASSETS_PATH)/8x8_chars.h $(Z88DK_PATH)$(MYZ88DK) +msx $(SCCZ80_OPTS) $(INCLUDE_OPTS) -lmsxbios \ -DUSE_MSX_BIOS -DEXTRA_TITLE \ \ -D__PSG_SOUND \ -vn -DMSX_VPOKE -D__MSX__ \ -lndos -subtype=rom \ -create-app -o $(BUILD_PATH)/X$(GAME_NAME)_msx_32k.rom \ -D__MEMORY_MAPPED_GRAPHICS \ -D__DEFAULT_CLEAR_SCREEN \ -D__ALT_PRINT \ -DLESS_TEXT \ -DZ88DK_JOYSTICK \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/msx/msx_redefined_chars_init_graphics.c \ $(CROSS_LIB_PATH)/sound/z88dk/psg/ay-3-8910_psg_sounds.c \ $(FULL_FILES) rm -rf $(BUILD_PATH)/X$(GAME_NAME)_msx_32k_BSS.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_msx_32k_DATA.bin msx_32k_rom: $(ASSETS_PATH)/z88dk_xchase.asm $(Z88DK_PATH)$(MYZ88DK) +msx $(SCCZ80_OPTS) $(INCLUDE_OPTS) \ -pragma-redirect:fputc_cons=fputc_cons_generic \ -DEXTRA_TITLE \ -D__PSG_SOUND \ -vn -D__MSX__ \ -lndos -subtype=rom \ -create-app -o $(BUILD_PATH)/X$(GAME_NAME)_msx_32k.rom \ -D__CONIO_GRAPHICS \ -DZ88DK_JOYSTICK \ $(ASSETS_PATH)/z88dk_xchase.asm \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/udg/udg_init_graphics.c \ $(CROSS_LIB_PATH)/sound/z88dk/psg/ay-3-8910_psg_sounds.c \ $(FULL_FILES) rm -rf $(BUILD_PATH)/X$(GAME_NAME)_msx_32k_BSS.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_msx_32k_DATA.bin ############################# # MTX mtx: mtx512 mtx512: mtx512_turn_based mtx512_turn_based: $(ASSETS_PATH)/z88dk_xchase.asm $(Z88DK_PATH)$(MYZ88DK) +mtx $(SCCZ80_OPTS) -clib=ansi -startup=2 $(INCLUDE_OPTS) \ -D__MTX__ -D__SCREEN_MODE=2 \ -create-app -oMTX.bin -vn -DEXTRA_TITLE \ -DTURN_BASED \ -D__CONIO_GRAPHICS -D__BIT_BANG_SOUND \ -lndos \ \ \ -clib=default -pragma-redirect:fputc_cons=fputc_cons_generic \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/udg/udg_init_graphics.c \ $(ASSETS_PATH)/z88dk_xchase.asm \ $(FULL_FILES) rm MTX.bin mv MTX.wav $(BUILD_PATH)/X$(GAME_NAME)_$@.wav mv MTX.mtx $(BUILD_PATH)/X$(GAME_NAME)_$@.mtx # cp $(BUILD_PATH)/X$(GAME_NAME)_$@.mtx /cygdrive/c/Emulation/TEST/memu/tapes/mtx512.mtx mtx500: mtx500_turn_based mtx500_turn_based: $(ASSETS_PATH)/z88dk_xchase.asm $(Z88DK_PATH)$(MYZ88DK) +mtx $(SCCZ80_OPTS) $(INCLUDE_OPTS) \ -D__MTX__ \ -create-app -oMTX500.bin -vn -DEXTRA_TITLE \ -DTURN_BASED \ -D__CONIO_GRAPHICS -D__BIT_BANG_SOUND \ -lndos \ \ \ -clib=default -pragma-redirect:fputc_cons=fputc_cons_generic \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/udg/udg_init_graphics.c \ $(ASSETS_PATH)/z88dk_xchase.asm \ $(FULL_FILES) rm MTX500.bin mv MTX500.wav $(BUILD_PATH)/X$(GAME_NAME)_$@.wav mv MTX500.mtx $(BUILD_PATH)/X$(GAME_NAME)_$@.mtx # cp $(BUILD_PATH)/X$(GAME_NAME)_$@.mtx /cygdrive/c/Emulation/TEST/memu/tapes/mtx500.mtx htron_mtx: zcc +mtx -pragma-redirect:fputc_cons=fputc_cons_generic -clib=ansi -create-app -startup=2 ./test/htron.c ############################# # MULTI8 multi8: $(ASSETS_PATH)/z88dk_xchase.asm $(Z88DK_PATH)$(MYZ88DK) +multi8 $(SCCZ80_OPTS) \ $(INCLUDE_OPTS) \ $(CROSS_LIB_PATH)/boot/multi8/bootstrap.c \ -create-app -o bootstrap rm bootstrap $(Z88DK_PATH)$(MYZ88DK) +multi8 $(SCCZ80_OPTS) -subtype=64k \ $(INCLUDE_OPTS) \ -D__MULTI8__ \ -D__PSG_SOUND \ \ -D__VT52 \ -D__CONIO_GRAPHICS \ -lndos \ \ \ -DNO_HINTS \ -DSIMPLE_STRATEGY \ -DLESS_TEXT \ -clib=default -pragma-redirect:fputc_cons=fputc_cons_generic \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/udg/udg_init_graphics.c \ $(ASSETS_PATH)/z88dk_xchase.asm \ $(FULL_FILES) \ $(CROSS_LIB_PATH)/sound/z88dk/psg/ay-3-8910_psg_sounds.c \ -create-app -o $@ rm $@ cat bootstrap.cas $@.cas > $(BUILD_PATH)/X$(GAME_NAME)_$@.cas rm bootstrap.cas rm $@.cas rm $@_BOOTSTRAP.bin ############################# # MYVISION myvision: $(ASSETS_PATH)/z88dk_xchase.asm $(Z88DK_PATH)$(MYZ88DK) +myvision $(SCCZ80_OPTS) $(INCLUDE_OPTS) \ -D__MYVISION__ \ -DXSize=32 \ -DYSize=22 \ -D__NO_SCREEN_COLOR_INIT \ -DZ88DK_JOYSTICK \ -D__VT52 \ -D__CONIO_GRAPHICS \ -lndos -D__PSG_SOUND \ $(FULL_FILES) $(ASSETS_PATH)/z88dk_xchase.asm \ $(CROSS_LIB_PATH)/sound/z88dk/psg/ay-3-8910_psg_sounds.c \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/udg/udg_init_graphics.c \ -create-app -o$(BUILD_PATH)/X$(GAME_NAME)_$@.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@_BSS.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@_DATA.bin ############################# # MZ mz: $(Z88DK_PATH)$(MYZ88DK) +mz $(SCCZ80_OPTS) $(INCLUDE_OPTS) \ -D__MZ__ -clib=ansi -pragma-define:ansicolumns=32 -vn \ \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS -DEXTRA_TITLE \ -pragma-define:REGISTER_SP=0xd000 \ -lndos -create-app -o $(BUILD_PATH)/X$(GAME_NAME)_mz.prg \ $(FULL_FILES) rm -rf $(BUILD_PATH)/X$(GAME_NAME)_mz.prg mv $(BUILD_PATH)/X$(GAME_NAME)_mz.mzt $(BUILD_PATH)/X$(GAME_NAME)_mz.mzf ############################# # MZ2500 # mz2500: mz2500_tiny_buffered mz2500: $(Z88DK_PATH)$(MYZ88DK) +mz2500 $(SCCZ80_OPTS) $(INCLUDE_OPTS) -vn -lndos \ -clib=default -pragma-redirect:fputc_cons=fputc_cons_generic \ -D__MZ2500__ -DXSize=40 -DFORXE_YSIZE=24 \ -D__CONIO_GRAPHICS -D_XL_NO_COLOR -D__NO_INIT_GRAPHICS -D__INCLUDE_CONIO_H \ -create-app -o $(BUILD_PATH)/X$(GAME_NAME)_$@.prg \ $(FULL_FILES) rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.prg ############################# # NASCOM nascom_16k: $(Z88DK_PATH)$(MYZ88DK) +nascom $(SCCZ80_OPTS) $(INCLUDE_OPTS) -clib=ansi -vn -lndos \ -D__NASCOM__ \ \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS \ -create-app -o $(BUILD_PATH)/X$(GAME_NAME)_LIGHT_nascom_16k.prg \ $(LIGHT_FILES) rm -rf $(BUILD_PATH)/X$(GAME_NAME)_LIGHT_nascom_16k.prg nascom: nascom_32k nascom_32k: $(Z88DK_PATH)$(MYZ88DK) +nascom $(SCCZ80_OPTS) $(INCLUDE_OPTS) -clib=ansi -vn -lndos \ -D__NASCOM__ \ \ \ \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS \ -lndos -create-app -o $(BUILD_PATH)/X$(GAME_NAME)_$@.prg \ $(FULL_FILES) rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.prg ############################# # NC100 nc100: $(ASSETS_PATH)/z88dk_sprites_definitions.h $(Z88DK_PATH)$(MYZ88DK) +nc $(SCCZ80_ROM_OPTS) -lgfxnc100 \ $(INCLUDE_OPTS) \ -D__NC100__ \ -D__ALT_PRINT \ \ -D__Z88DK_SPRITES_GRAPHICS \ -DLESS_TEXT \ \ -create-app -o$(BUILD_PATH)/X$(GAME_NAME)_$@.bin \ -D__NO_INIT_GRAPHICS \ -DINITIAL_GHOST_FREEZE \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c \ $(FULL_FILES) rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.bin ############################# # NC200 nc200: $(ASSETS_PATH)/z88dk_sprites_definitions.h $(Z88DK_PATH)$(MYZ88DK) +nc $(SCCZ80_ROM_OPTS) -lgfxnc200 \ $(INCLUDE_OPTS) \ -D__NC200__ \ -D__ALT_PRINT \ \ -D__Z88DK_SPRITES_GRAPHICS \ -DLESS_TEXT \ \ -create-app -o$(BUILD_PATH)/X$(GAME_NAME)_$@.bin \ -D__NO_INIT_GRAPHICS \ \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c \ $(FULL_FILES) rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.bin ############################# # NEWBRAIN newbrain: $(Z88DK_PATH)$(MYZ88DK) +newbrain $(SCCZ80_OPTS) $(INCLUDE_OPTS) \ -D__NEWBRAIN__ \ -DXSize=20 \ -DYSize=11 \ -DGHOSTS_NUMBER=8 \ -DBOMBS_NUMBER=4 \ -vn \ -D_XL_NO_COLOR \ \ -DNO_BLINKING \ -DNO_CONTROL_INSTRUCTIONS \ -D_XL_NO_SLEEP \ -DNO_INITIAL_SCREEN \ -D__NO_SCREEN_COLOR_INIT \ -lndos \ -D__BUFFERED_GRAPHICS -D__NO_INIT_GRAPHICS \ \ -DNO_STATS \ -D__ALT_PRINT \ -D__DEFAULT_CLEAR_SCREEN \ -D__STDIO \ -D__NO_WAIT \ -DTURN_BASED \ -pragma-include:$(CFG_PATH)/z88dk/zpragma_clib.inc \ $(FULL_FILES) \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c \ -create-app -o newbrain tar czvf FULL_newbrain.tar.zip _dir.txt newbrain.bas newbrain.dat mv FULL_newbrain.tar.zip $(BUILD_PATH)/X$(GAME_NAME)_newbrain.tar.zip rm _dir.txt rm newbrain.bas rm newbrain.dat rm newbrain ############################# # ONDRA ondra: $(ASSETS_PATH)/z88dk_xchase.asm $(Z88DK_PATH)$(MYZ88DK) +ondra $(SCCZ80_OPTS) $(INCLUDE_OPTS) \ -D__ONDRA__ -DXSize=40 -DYSize=30 \ -D__NO_SCREEN_COLOR_INIT \ -DZ88DK_JOYSTICK \ -D__VT52 \ -D__CONIO_GRAPHICS \ -lndos \ $(FULL_FILES) $(ASSETS_PATH)/z88dk_xchase.asm \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/udg/udg_init_graphics.c \ -create-app \ -o FULL_$@ rm FULL_$@ mv FULL_$@.tap $(BUILD_PATH)/X$(GAME_NAME)_$@.tap mv FULL_$@.wav $(BUILD_PATH)/X$(GAME_NAME)_$@.wav ondra_no_gfx: $(Z88DK_PATH)$(MYZ88DK) +ondra $(SCCZ80_OPTS) $(INCLUDE_OPTS) -vn -lndos \ -clib=default -pragma-redirect:fputc_cons=fputc_cons_generic \ -D__ONDRA__ -DXSize=40 -DYSize=30 \ -D__CONIO_GRAPHICS -D_XL_NO_COLOR -D__NO_INIT_GRAPHICS \ $(FULL_FILES) \ -create-app \ -o FULL_$@ rm FULL_$@ mv FULL_$@.tap $(BUILD_PATH)/X$(GAME_NAME)_$@.tap mv FULL_$@.wav $(BUILD_PATH)/X$(GAME_NAME)_$@.wav ############################# # OSCA osca: $(Z88DK_PATH)$(MYZ88DK) +osca $(SCCZ80_OPTS) $(INCLUDE_OPTS) \ -clib=ansi -D__OSCA__ -vn \ \ -lndos \ \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS \ -create-app -o osca \ $(FULL_FILES) rm osca mv OSCA.EXE $(BUILD_PATH)/X$(GAME_NAME)_OSCA.EXE ############################# # OSBORNE1 osborne1_chars: $(Z88DK_PATH)$(MYZ88DK) +cpm $(SCCZ80_OPTS) -lgfxosborne1 -subtype=osborne1 \ $(INCLUDE_OPTS) \ -D__OSBORNE1__ \ -D_XL_NO_COLOR \ -D__INCLUDE_CONIO_H \ -D__ADM3A_WITH_UNDEF \ -D__CPM_80X24__ \ -DLESS_TEXT \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS \ \ -create-app -o$(BUILD_PATH)/X$(GAME_NAME)_$@.bin \ $(FULL_FILES) rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.bin osborne1: $(ASSETS_PATH)/z88dk_sprites_definitions.h $(Z88DK_PATH)$(MYZ88DK) +cpm $(SCCZ80_OPTS) -lgfxosborne1 -subtype=osborne1 \ $(INCLUDE_OPTS) \ -D__OSBORNE1__ \ -D_XL_NO_COLOR \ -D__INCLUDE_CONIO_H \ -DLESS_TEXT \ -D__Z88DK_SPRITES_GRAPHICS -D__NO_INIT_GRAPHICS \ \ -D__ALT_PRINT \ -create-app -o$(BUILD_PATH)/X$(GAME_NAME)_$@.bin \ $(FULL_FILES) \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.bin ############################# # PACMAN pacman: mkdir $(BUILD_PATH)/puckmod $(Z88DK_PATH)$(MYZ88DK) +pacman $(SCCZ80_OPTS) $(INCLUDE_OPTS) \ -D__PACMAN__ \ -DXSize=32 \ -DYSize=24 \ -D__NO_SCREEN_COLOR_INIT -D__BUFFERED_GRAPHICS -DTURN_BASED \ -D_XL_NO_COLOR -D__ALT_PRINT -D__STDIO \ -D__NO_WAIT -D_XL_NO_SLEEP -D__DEFAULT_CLEAR_SCREEN \ -D__NO_INIT_GRAPHICS \ $(FULL_FILES) \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c \ -create-app -o$(BUILD_PATH)/X$(GAME_NAME)_pacman_buffered.bin cp $(TOOLS_PATH)/z88dk/pacman/pacman.5e $(BUILD_PATH)/puckmod cp $(TOOLS_PATH)/z88dk/pacman/pacman.5f $(BUILD_PATH)/puckmod mv $(BUILD_PATH)/X$(GAME_NAME)_pacman_buffered.0a $(BUILD_PATH)/puckmod/namcopac.6e mv $(BUILD_PATH)/X$(GAME_NAME)_pacman_buffered.0b $(BUILD_PATH)/puckmod/namcopac.6f mv $(BUILD_PATH)/X$(GAME_NAME)_pacman_buffered.0c $(BUILD_PATH)/puckmod/namcopac.6h mv $(BUILD_PATH)/X$(GAME_NAME)_pacman_buffered.0d $(BUILD_PATH)/puckmod/npacmod.6j rm -rf $(BUILD_PATH)/X$(GAME_NAME)_pacman_buffered.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_pacman_buffered.rom rm -rf $(BUILD_PATH)/X$(GAME_NAME)_pacman_buffered_BSS.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_pacman_buffered_DATA.bin ############################# # P2000 p2000_16k: $(Z88DK_PATH)$(MYZ88DK) +p2000 $(SCCZ80_OPTS) $(INCLUDE_OPTS) -clib=ansi -D__P2000__ -vn \ \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS \ -lndos -create-app -o $(BUILD_PATH)/X$(GAME_NAME)_LIGHT_p2000.prg \ $(LIGHT_FILES) rm -rf $(BUILD_PATH)/X$(GAME_NAME)_LIGHT_p2000.prg p2000: p2000_32k p2000_32k: $(Z88DK_PATH)$(MYZ88DK) +p2000 $(SCCZ80_OPTS) $(INCLUDE_OPTS) -clib=ansi -D__P2000__ -vn \ \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS -D__BIT_BANG_SOUND \ -lndos -create-app -o $(BUILD_PATH)/X$(GAME_NAME)_$@.prg \ $(FULL_FILES) rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.prg ############################# # PASAPIA7 pasopia7: $(Z88DK_PATH)$(MYZ88DK) +pasopia7 $(SCCZ80_OPTS) $(INCLUDE_OPTS) \ -D__PASOPIA__ \ -D__NO_SCREEN_COLOR_INIT \ -DXSize=40 -DYSize=23 \ \ -D__VT52 \ -D__CONIO_GRAPHICS \ -lndos \ -D__NO_INIT_GRAPHICS \ $(FULL_FILES) \ -create-app -o$(BUILD_PATH)/X$(GAME_NAME)_$@.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@_BOOTSTRAP.bin ############################# # PC6001 pc6001_16k: $(Z88DK_PATH)$(MYZ88DK) +pc6001 $(SCCZ80_OPTS) $(INCLUDE_OPTS) -Cz--audio -clib=ansi \ -D__PC6001__ \ \ -D__ALT_SLEEP \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS \ -lndos -create-app -o $(BUILD_PATH)/X$(GAME_NAME)_LIGHT_pc6001.prg \ $(CROSS_LIB_PATH)/sleep/sleep_macros.c \ $(LIGHT_FILES) rm -rf $(BUILD_PATH)/X$(GAME_NAME)_LIGHT_pc6001.prg rm -rf $(BUILD_PATH)/X$(GAME_NAME)_LIGHT_pc6001.wav mv $(BUILD_PATH)/X$(GAME_NAME)_LIGHT_pc6001.cas $(BUILD_PATH)/X$(GAME_NAME)_LIGHT_pc6001.cp6 pc6001: pc6001_32k pc6001_32k: $(ASSETS_PATH)/z88dk_xchase.asm $(Z88DK_PATH)$(MYZ88DK) +pc6001 $(SCCZ80_OPTS) $(INCLUDE_OPTS) -Cz--audio -clib=ansi -subtype=32k \ -D__PC6001__ \ \ -D__CONIO_GRAPHICS -D__PSG_SOUND \ \ -D__SCREEN_MODE=2 \ -clib=default -pragma-redirect:fputc_cons=fputc_cons_generic \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/udg/udg_init_graphics.c \ $(ASSETS_PATH)/z88dk_xchase.asm \ -lndos -create-app -o $(BUILD_PATH)/X$(GAME_NAME)_$@.prg \ $(FULL_FILES) \ $(CROSS_LIB_PATH)/sound/z88dk/psg/ay-3-8910_psg_sounds.c rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.prg rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.wav mv $(BUILD_PATH)/X$(GAME_NAME)_$@.cas $(BUILD_PATH)/X$(GAME_NAME)_$@.cp6 ############################# # PC88 pc88: pc88_tiny pc88_32k: $(ASSETS_PATH)/z88dk_xchase.asm $(Z88DK_PATH)$(MYZ88DK) +pc88 $(SCCZ80_OPTS) -Cz--audio $(INCLUDE_OPTS) -vn \ -D__PC88__ \ -lndos -DXSize=80 -DYSIZE=25 -D_XL_SLOW_DOWN_FACTOR=2500 \ -clib=default -pragma-redirect:fputc_cons=fputc_cons_generic \ -D__CONIO_GRAPHICS -D__BIT_BANG_SOUND -D__DEFAULT_CLEAR_SCREEN \ $(FULL_FILES) \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/udg/udg_init_graphics.c \ $(ASSETS_PATH)/z88dk_xchase.asm \ -create-app \ -o FULL_$@ rm FULL_$@ mv FULL_$@.wav $(BUILD_PATH)/X$(GAME_NAME)_$@.wav mv FULL_$@.t88 $(BUILD_PATH)/X$(GAME_NAME)_$@.t88 pc88_32k_no_gfx: $(Z88DK_PATH)$(MYZ88DK) +pc88 $(SCCZ80_OPTS) -Cz--audio $(INCLUDE_OPTS) -vn \ -D__PC88__ \ -lndos -DXSize=80 -DYSEIZE=23 -D_XL_SLOW_DOWN_FACTOR=2500 \ -clib=default -pragma-redirect:fputc_cons=fputc_cons_generic \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS -D__BIT_BANG_SOUND -D__DEFAULT_CLEAR_SCREEN \ $(FULL_FILES) \ -create-app \ -o FULL_$@ rm FULL_$@ mv FULL_$@.wav $(BUILD_PATH)/X$(GAME_NAME)_$@.wav mv FULL_$@.t88 $(BUILD_PATH)/X$(GAME_NAME)_$@.t88 pc88_tiny: $(Z88DK_PATH)$(MYZ88DK) +pc88 $(SCCZ80_OPTS) -Cz--audio $(INCLUDE_OPTS) -vn \ -D__PC88__ -DTINY_GAME -DNO_WALL -DNO_BLINKING \ -lndos -DXSize=80 -DYSEIZE=23 -D_XL_SLOW_DOWN_FACTOR=2500 \ -clib=default -pragma-redirect:fputc_cons=fputc_cons_generic \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS -D__DEFAULT_CLEAR_SCREEN \ $(TINY_FILES) \ -create-app \ -o TINY_$@ rm TINY_$@ mv TINY_$@.wav $(BUILD_PATH)/X$(GAME_NAME)_$@.wav mv TINY_$@.t88 $(BUILD_PATH)/X$(GAME_NAME)_$@.t88 # tar czvf FULL_pc88.tar.zip FULL_pc88.t88 FULL_pc88.wav # rm FULL_pc88.t88 # rm FULL_pc88.wav # mv FULL_pc88.tar.zip $(BUILD_PATH) ############################# # PCW pcw40: $(Z88DK_PATH)$(MYZ88DK) +cpm -subtype=pcw40 $(SCCZ80_OPTS) $(INCLUDE_OPTS) \ -D__PC88__ \ -lndos -DXSize=90 -DYSEIZE=32 -D_XL_SLOW_DOWN_FACTOR=2500 \ -clib=default -pragma-redirect:fputc_cons=fputc_cons_generic \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS -D__DEFAULT_CLEAR_SCREEN \ $(FULL_FILES) \ -create-app \ -o FULL_$@ rm FULL_$@ rm -rf FULL_$@_HIMEM.bin mv FULL_$@.dsk $(BUILD_PATH)/X$(GAME_NAME)_$@.dsk mv FULL_$@.com $(BUILD_PATH)/X$(GAME_NAME)_$@.com pcw: pcw80 pcw80: $(Z88DK_PATH)$(MYZ88DK) +cpm -subtype=pcw80 $(SCCZ80_OPTS) $(INCLUDE_OPTS) \ -D__PC88__ \ -lndos -DXSize=90 -DYSEIZE=32 -D_XL_SLOW_DOWN_FACTOR=2500 \ -clib=default -pragma-redirect:fputc_cons=fputc_cons_generic \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS -D__DEFAULT_CLEAR_SCREEN \ $(FULL_FILES) \ -create-app \ -o FULL_$@ rm FULL_$@ rm -rf FULL_$@_HIMEM.bin mv FULL_$@.dsk $(BUILD_PATH)/X$(GAME_NAME)_$@.dsk mv FULL_$@.com $(BUILD_PATH)/X$(GAME_NAME)_$@.com ############################# # PENCIL2 # SOUNDS is broken (sound never stops) pencil2_no_gfx: $(Z88DK_PATH)$(MYZ88DK) +pencil2 $(SCCZ80_OPTS) $(INCLUDE_OPTS) \ -D__PENCIL2__ \ -DXSize=32 \ -DYSize=22 \ -D__NO_SCREEN_COLOR_INIT \ \ -D__VT52 \ -D__CONIO_GRAPHICS \ -lndos \ -D__NO_INIT_GRAPHICS \ $(FULL_FILES) \ -create-app -o$(BUILD_PATH)/X$(GAME_NAME)_$@.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@_BSS.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@_DATA.bin pencil2: $(ASSETS_PATH)/z88dk_xchase.asm $(Z88DK_PATH)$(MYZ88DK) +pencil2 $(SCCZ80_OPTS) $(INCLUDE_OPTS) \ -D__PENCIL2__ \ -DXSize=32 \ -DYSize=24 \ -D__NO_SCREEN_COLOR_INIT \ \ -D__VT52 \ -D__CONIO_GRAPHICS \ -lndos \ $(FULL_FILES) \ $(ASSETS_PATH)/z88dk_xchase.asm \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/udg/udg_init_graphics.c \ -create-app -o$(BUILD_PATH)/X$(GAME_NAME)_$@.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@_BSS.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@_DATA.bin ############################# # PMD85 pmd85_no_gfx: $(Z88DK_PATH)$(MYZ88DK) +pmd85 $(SCCZ80_OPTS) $(INCLUDE_OPTS) \ -D__PMD85__ \ -DXSize=48 \ -DYSize=30 \ -D__NO_SCREEN_COLOR_INIT \ -D_XL_NO_COLOR \ \ -D__VT52 \ -D__CONIO_GRAPHICS \ -lndos \ -D__NO_INIT_GRAPHICS \ $(FULL_FILES) \ -create-app -o$(BUILD_PATH)/X$(GAME_NAME)_pmd85_no_gfx.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_pmd85_no_gfx.bin pmd85: $(ASSETS_PATH)/z88dk_xchase.asm $(Z88DK_PATH)$(MYZ88DK) +pmd85 $(SCCZ80_OPTS) $(INCLUDE_OPTS) \ -D__PMD85__ \ -DXSize=36 \ -DYSize=32 \ -D__NO_SCREEN_COLOR_INIT \ -D_XL_NO_COLOR \ -D__VT52 \ -D__CONIO_GRAPHICS \ -lndos \ $(FULL_FILES) \ $(ASSETS_PATH)/z88dk_xchase.asm \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/udg/udg_init_graphics.c \ -create-app -o$(BUILD_PATH)/X$(GAME_NAME)_$@.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.bin ############################# # PPS pps: $(Z88DK_PATH)$(MYZ88DK) +pps $(SCCZ80_OPTS) $(INCLUDE_OPTS) -pragma-redirect:fputc_cons=fputc_cons_generic \ -D__PPS__ -vn \ -o $@ \ -D__VT52 \ -lndos \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS \ $(FULL_FILES) mv $@ $(BUILD_PATH)/X$(GAME_NAME)_$@.exe ############################# # PRIMO # primo: primo_no_gfx primo_no_gfx: $(Z88DK_PATH)$(MYZ88DK) +primo $(SCCZ80_OPTS) $(INCLUDE_OPTS) \ -D__PRIMO__ \ -DXSize=32 \ -DYSize=22 \ -D__NO_SCREEN_COLOR_INIT \ -D_XL_NO_COLOR \ \ -D__VT52 \ -D__CONIO_GRAPHICS \ -lndos -D__BIT_BANG_SOUND \ -D__NO_INIT_GRAPHICS \ $(FULL_FILES) \ -create-app -o$(BUILD_PATH)/X$(GAME_NAME)_$@.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.bin primo: $(ASSETS_PATH)/z88dk_xchase.asm $(Z88DK_PATH)$(MYZ88DK) +primo $(SCCZ80_OPTS) $(INCLUDE_OPTS) \ -D__PRIMO__ \ -DXSize=32 \ -DYSize=24 \ -D__NO_SCREEN_COLOR_INIT \ -D_XL_NO_COLOR \ \ -D__VT52 \ -D__CONIO_GRAPHICS -D__BIT_BANG_SOUND \ -lndos -D__BIT_BANG_SOUND \ $(FULL_FILES) \ $(ASSETS_PATH)/z88dk_xchase.asm \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/udg/udg_init_graphics.c \ -create-app -o$(BUILD_PATH)/X$(GAME_NAME)_$@.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.bin ############################# # PV2000 # -SO3 necessary to build a 16k rom image pv2000: $(ASSETS_PATH)/z88dk_xchase.asm $(Z88DK_PATH)$(MYZ88DK) +pv2000 $(SCCZ80_ROM_OPTS) \ $(INCLUDE_OPTS) \ -D__PV2000__ \ \ \ -D__VT52 \ -D__CONIO_GRAPHICS \ -lndos \ \ \ -DLESS_TEXT \ -clib=default -pragma-redirect:fputc_cons=fputc_cons_generic \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/udg/udg_init_graphics.c \ $(ASSETS_PATH)/z88dk_xchase.asm \ $(FULL_FILES) \ -create-app -o$(BUILD_PATH)/X$(GAME_NAME)_$@.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@_DATA.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@_BSS.bin ############################# # PX4 px4: $(ASSETS_PATH)/z88dk_sprites_definitions.h $(Z88DK_PATH)$(MYZ88DK) +cpm $(SCCZ80_ROM_OPTS) -lpx4 \ $(INCLUDE_OPTS) \ -D__PX4__ \ \ -subtype=px4 -Cz--32k \ -create-app -o $@ \ -vn -lndos \ -D__ALT_PRINT \ -D__Z88DK_SPRITES_GRAPHICS -D__NO_INIT_GRAPHICS \ -DLESS_TEXT \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c \ $(FULL_FILES) rm $@ mv $@.ROM $(BUILD_PATH)/X$(GAME_NAME)_$@.ROM ############################# # PX8 px8: $(ASSETS_PATH)/z88dk_sprites_definitions.h $(Z88DK_PATH)$(MYZ88DK) +cpm $(SCCZ80_ROM_OPTS) \ $(INCLUDE_OPTS) \ -D__PX8__ \ \ -subtype=px8 \ -create-app -o $@ \ -vn -lndos \ -D__ALT_PRINT \ -D__Z88DK_SPRITES_GRAPHICS -D__NO_INIT_GRAPHICS \ \ -DLESS_TEXT \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c \ $(FULL_FILES) rm $@ mv $@.ROM $(BUILD_PATH)/X$(GAME_NAME)_$@.ROM ================================================ FILE: src/games/chase/makefiles.chase/makefiles_z88dk/Makefile_z88dk_q-z ================================================ # ------------------------------------------------------------------------------------------ # Z88DK Q-Z # z88dk_targets_q-z: \ samcoupe_targets \ sc3000_targets \ sms_targets \ spectrum_targets z88dk_targets_q-z_more: \ qc10_targets \ rc700_targets \ rx78_targets \ samcoupe_targets \ sc3000_targets \ smc777_targets \ sms_targets \ sos_targets \ spc1000_targets \ spectrum_targets \ srr_targets \ super80_targets \ sv8000_targets \ ti82_targets \ ti83_targets \ ti85_targets \ ti86_targets \ ti8x_targets \ tiki100_targets \ trs80_targets \ ts2068_targets \ tvc_targets \ vector06c_targets \ gl_targets \ x1_targets \ z1013_targets \ z80tvgame_targets \ z88_targets \ zx80_targets \ zxn_targets # ------------------------------------------------------------------------------------------ qc10_targets: \ qc10 srr_targets: \ srr sc3000_targets: \ sc3000_16k sc3000_32k sg1000 super80_targets: \ super80 super80r rx78_targets: \ rx78 samcoupe_targets: \ samcoupe sos_targets: \ sos_buffered sos_tiny_buffered sms_targets: \ sms smc777_targets: \ smc777 spc1000_targets: \ spc1000 spectrum_targets: \ spectrum_16k spectrum_48k sv8000_targets: \ sv8000 rc700_targets: \ rc700 ti82_targets: \ ti82 ti83_targets: \ ti83 ti85_targets: \ ti85 ti86_targets: \ ti86_light ti8x_targets: \ ti8x tiki100_targets: \ tiki100 trs80_targets: \ trs80 trs80_chars ts2068_targets: \ ts2068 tvc_targets: \ tvc vector06c_targets: \ vector06c gl_targets: \ gl4000 gl6000sl x1_targets: \ x1 x1_no_gfx z1013_targets: \ z1013 z80tvgame_targets: \ z80tvgame z80tvgame_no_gfx z88_targets: \ z88 zx80_targets: \ zx80_16k_turn_based zxn_targets: \ zxn # ------------------------------------------------------------------------------------------ ############################# # QC10 qc10: qc10_turn_based qc10_turn_based: $(Z88DK_PATH)$(MYZ88DK) +cpm $(SCCZ80_OPTS) -subtype=qc10 \ $(INCLUDE_OPTS) \ -D__CPM_80X24__ \ -D__ADM3A_WITH_UNDEF -D_XL_SLOW_DOWN_FACTOR=1000 -DTURN_BASED \ -D__INCLUDE_CONIO_H \ -D__QC10__ \ -DLESS_TEXT \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS \ \ -create-app -oxcqc10.bin \ $(FULL_FILES) rm xcqc10.bin rm xcqc10.com mv xcqc10.dsk $(BUILD_PATH)/X$(GAME_NAME)_$@.dsk ############################# # RC700 rc700: $(Z88DK_PATH)$(MYZ88DK) +cpm $(SCCZ80_OPTS) -subtype=rc700 $(INCLUDE_OPTS) \ -D__RC700__ \ -DXSize=80 \ -DYSize=23 \ -D__NO_SCREEN_COLOR_INIT \ -D_XL_NO_COLOR \ \ -D__VT52 \ -D__CONIO_GRAPHICS \ -lndos \ -D__NO_INIT_GRAPHICS \ $(FULL_FILES) \ -create-app -o$(BUILD_PATH)/X$(GAME_NAME)_rc700.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_rc700.bin ############################# # RX78 rx78: $(ASSETS_PATH)/z88dk_xchase.asm $(Z88DK_PATH)$(MYZ88DK) +rx78 $(SCCZ80_OPTS) $(INCLUDE_OPTS) \ -D__RX78__ \ \ \ -D__VT52 \ -D__CONIO_GRAPHICS \ -lndos \ \ \ -clib=default -pragma-redirect:fputc_cons=fputc_cons_generic \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/udg/udg_init_graphics.c \ $(ASSETS_PATH)/z88dk_xchase.asm \ $(FULL_FILES) \ -create-app -o$(BUILD_PATH)/X$(GAME_NAME)_rx78.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_rx78.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_rx78_DATA.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_rx78_BSS.bin ############################# # SAMCOUPE samcoupe: samcoupe_gfx # import as data into ram at 32768 - call 32768 samcoupe_gfx: $(ASSETS_PATH)/z88dk_xchase.asm $(Z88DK_PATH)$(MYZ88DK) +sam $(SCCZ80_OPTS) $(INCLUDE_OPTS) \ -D__SAM__ -DEXTRA_TITLE \ -D__CONIO_GRAPHICS -D_XL_SLOW_DOWN_FACTOR=2000 \ -clib=ansi -pragma-define:ansicolumns=32 -vn \ -D__BIT_BANG_SOUND -o $(BUILD_PATH)/FULL_samcoupe.bin -lndos \ $(FULL_FILES) \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/udg/udg_init_graphics.c \ $(ASSETS_PATH)/z88dk_xchase.asm cp $(TOOLS_PATH)/z88dk/samcoupe/samdos2_empty $(TOOLS_PATH)/z88dk/samcoupe/samdos2 $(TOOLS_PATH)/z88dk/samcoupe/pyz80.py -I $(TOOLS_PATH)/z88dk/samcoupe/samdos2 $(TOOLS_PATH)/z88dk/samcoupe/sam_wrapper.asm mv $(TOOLS_PATH)/z88dk/samcoupe/sam_wrapper.dsk $(BUILD_PATH)/X$(GAME_NAME)_samcoupe.dsk rm -rf $(BUILD_PATH)/FULL_samcoupe.bin samcoupe_no_gfx: $(Z88DK_PATH)$(MYZ88DK) +sam $(SCCZ80_OPTS) $(INCLUDE_OPTS) \ -D__SAM__ -DEXTRA_TITLE \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS \ -clib=ansi -pragma-define:ansicolumns=32 -vn \ -o $(BUILD_PATH)/FULL_samcoupe.bin -lndos \ $(FULL_FILES) cp $(TOOLS_PATH)/z88dk/samcoupe/samdos2_empty $(TOOLS_PATH)/z88dk/samcoupe/samdos2 $(TOOLS_PATH)/z88dk/samcoupe/pyz80.py -I $(TOOLS_PATH)/z88dk/samcoupe/samdos2 $(TOOLS_PATH)/z88dk/samcoupe/sam_wrapper.asm mv $(TOOLS_PATH)/z88dk/samcoupe/sam_wrapper.dsk $(BUILD_PATH)/X$(GAME_NAME)_samcoupe.dsk rm -rf $(BUILD_PATH)/FULL_samcoupe.bin ############################# # SC3000 sc3000_16k: $(Z88DK_PATH)$(MYZ88DK) +sc3000 $(SCCZ80_OPTS) \ $(INCLUDE_OPTS) \ -DZ88DK_JOYSTICK \ -clib=ansi \ -D__SC3000__ \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS \ -pragma-define:ansicolumns=32 \ -vn -lndos -create-app -Cz--audio \ -o $(BUILD_PATH)/X$(GAME_NAME)_LIGHT_sc3000_16k.prg \ $(LIGHT_FILES) rm -rf $(BUILD_PATH)/X$(GAME_NAME)_LIGHT_sc3000_16k.prg rm -rf $(BUILD_PATH)/X$(GAME_NAME)_LIGHT_sc3000_16k.tap sc3000: sc3000_32k sc3000_32k: $(ASSETS_PATH)/z88dk_xchase.asm $(Z88DK_PATH)$(MYZ88DK) +sc3000 $(SCCZ80_OPTS) -DEXTRA_TITLE \ $(INCLUDE_OPTS) \ -D__SC3000__ \ \ \ -D__BIT_BANG_SOUND \ \ -DZ88DK_JOYSTICK \ -D__CONIO_GRAPHICS \ -vn -lndos -create-app -Cz--audio \ \ \ -clib=default -pragma-redirect:fputc_cons=fputc_cons_generic \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/udg/udg_init_graphics.c \ $(ASSETS_PATH)/z88dk_xchase.asm \ -o $(BUILD_PATH)/X$(GAME_NAME)_sc3000_32k.prg \ $(FULL_FILES) rm -rf $(BUILD_PATH)/X$(GAME_NAME)_sc3000_32k.prg rm -rf $(BUILD_PATH)/X$(GAME_NAME)_sc3000_32k.tap ############################# # SG1000 sg1000: $(ASSETS_PATH)/z88dk_xchase.asm $(Z88DK_PATH)$(MYZ88DK) +sc3000 $(SCCZ80_ROM_OPTS) -subtype=rom \ $(INCLUDE_OPTS) -DEXTRA_TITLE \ -D__SC3000__ \ -DZ88DK_JOYSTICK \ \ \ -D__BIT_BANG_SOUND \ \ -D__CONIO_GRAPHICS \ -vn -lndos -create-app \ \ \ -clib=default -pragma-redirect:fputc_cons=fputc_cons_generic \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/udg/udg_init_graphics.c \ $(ASSETS_PATH)/z88dk_xchase.asm \ -o $(BUILD_PATH)/X$(GAME_NAME)_sg1000.prg \ $(FULL_FILES) rm -rf $(BUILD_PATH)/X$(GAME_NAME)_sg1000.prg rm -rf $(BUILD_PATH)/X$(GAME_NAME)_sg1000_BSS.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_sg1000_DATA.bin ############################# # SMC777 smc777: smc777_turn_based smc777_turn_based: $(Z88DK_PATH)$(MYZ88DK) +cpm $(SCCZ80_OPTS) -subtype=smc777 $(INCLUDE_OPTS) \ -D__SMC777__ \ -clib=default -pragma-redirect:fputc_cons=fputc_cons_generic \ -D__NO_SCREEN_COLOR_INIT \ -D_XL_NO_COLOR \ \ -D__VT52 -DXSize=80 -DYSize=24 \ -D__CONIO_GRAPHICS -D_XL_SLOW_DOWN_FACTOR=1000 -DTURN_BASED \ -lndos \ -D__NO_INIT_GRAPHICS \ $(FULL_FILES) \ -create-app -oxcsmc777.bin rm xcsmc777.bin rm xcsmc777.com mv xcsmc777.dsk $(BUILD_PATH)/X$(GAME_NAME)_$@.dsk ############################# # SMS sms: sms_gfx sms_gfx: $(ASSETS_PATH)/z88dk_xchase.asm $(Z88DK_PATH)$(MYZ88DK) +sms $(SCCZ80_ROM_OPTS) $(INCLUDE_OPTS) -pragma-redirect:fputc_cons=fputc_cons_generic \ -D__SMS__ -DEXTRA_TITLE \ -DXSize=32 \ -DYSize=22 \ -D__NO_SCREEN_COLOR_INIT \ \ \ -D__CONIO_GRAPHICS -D__INCLUDE_CONIO_H -DZ88DK_JOYSTICK \ -lndos -D_XL_SLOW_DOWN_FACTOR=1400 \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/udg/udg_init_graphics.c \ $(ASSETS_PATH)/z88dk_xchase.asm \ $(FULL_FILES) \ -create-app -o$(BUILD_PATH)/X$(GAME_NAME)_sms.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_sms.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_sms_BSS.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_sms_DATA.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_sms_BANK_1F.bin sms_buffered: $(Z88DK_PATH)$(MYZ88DK) +sms $(SCCZ80_OPTS) -clib=sdcc_iy -startup=17 \ $(INCLUDE_OPTS) \ -pragma-include:$(CFG_PATH)/z88dk/zpragma_sms.inc \ -D__SMS__ -DNEW_LIB \ -D_XL_NO_COLOR \ \ -D__STDIO \ -DLESS_TEXT \ -create-app \ -D__BUFFERED_GRAPHICS \ -DTURN_BASED \ -D__ALT_PRINT \ -D_XL_NO_SLEEP \ -D__NO_WAIT \ -o $(BUILD_PATH)/X$(GAME_NAME)_sms_buffered.bin \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/sms/sms_init_graphics.c \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c \ $(FULL_FILES) rm -rf $(BUILD_PATH)/X$(GAME_NAME)_sms_buffered_CODE.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_sms_buffered_DATA.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_sms_buffered_BSS.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_sms_buffered_UNASSIGNED.bin ############################# # SOS sos: sos_buffered sos_buffered: $(Z88DK_PATH)$(MYZ88DK) +sos $(SCCZ80_OPTS) \ $(INCLUDE_OPTS) \ -lndos \ -D__STDIO \ -D_XL_NO_COLOR \ -D__BUFFERED_GRAPHICS -D__ALT_PRINT \ -DTURN_BASED \ -DLESS_TEXT -D_XL_NO_SLEEP -D__NO_WAIT \ -D__NO_INIT_GRAPHICS \ -create-app -o sos_buffered \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c \ $(FULL_FILES) rm sos_buffered mv sos_buffered.obj $(BUILD_PATH)/X$(GAME_NAME)_sos_buffered.obj sos_tiny_buffered: $(Z88DK_PATH)$(MYZ88DK) +sos $(SCCZ80_OPTS) \ $(INCLUDE_OPTS) \ -lndos \ -D__STDIO \ -D_XL_NO_COLOR \ -D__BUFFERED_GRAPHICS -D__ALT_PRINT \ -DTURN_BASED \ -DTINY_GAME -DNO_WALL -DNO_BLINKING -DLESS_TEXT -D_XL_NO_SLEEP -D__NO_WAIT \ -D__NO_INIT_GRAPHICS \ -create-app -o sos_tiny_buffered \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c \ $(TINY_FILES) rm sos_tiny_buffered mv sos_tiny_buffered.obj $(BUILD_PATH)/X$(GAME_NAME)_TINY_sos_buffered.obj ############################# # SPC1000 spc1000: $(ASSETS_PATH)/z88dk_xchase.asm $(Z88DK_PATH)$(MYZ88DK) +spc1000 $(SCCZ80_OPTS) $(INCLUDE_OPTS) \ -D__SPC1000__ \ \ \ -D__VT52 \ -D__CONIO_GRAPHICS -D__BIT_BANG_SOUND \ -lndos \ \ \ -clib=default -pragma-redirect:fputc_cons=fputc_cons_generic \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/udg/udg_init_graphics.c \ $(ASSETS_PATH)/z88dk_xchase.asm \ $(FULL_FILES) \ -create-app -o$(BUILD_PATH)/X$(GAME_NAME)_spc1000.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_spc1000.bin ############################# # SPECIALIST special: $(Z88DK_PATH)$(MYZ88DK) +special $(SCCZ80_OPTS) $(INCLUDE_OPTS) \ -clib=default -pragma-redirect:fputc_cons=fputc_cons_generic \ -D__SPECIAL__ \ -DXSize=48 \ -DYSize=30 \ -D__NO_SCREEN_COLOR_INIT \ -D_XL_NO_COLOR -D_XL_NO_SLEEP -DTURN_BASED -D__STDIO -D__NO_WAIT \ \ -D__VT52 \ -D__CONIO_GRAPHICS \ -lndos \ -D__NO_INIT_GRAPHICS \ $(FULL_FILES) \ -create-app -o$(BUILD_PATH)/X$(GAME_NAME)_special.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_special.bin ############################# # SPECTRUM spectrum_16k: $(ASSETS_PATH)/z88dk_xchase.asm $(Z88DK_PATH)$(MYZ88DK) +zx $(SCCZ80_OPTS) $(INCLUDE_OPTS) -zorg=24055 \ -pragma-include:$(CFG_PATH)/z88dk/zpragma_clib.inc \ -pragma-redirect:getk=getk_inkey \ -DZ88DK_JOYSTICK \ -DTINY_GAME -DNO_WALL -DNO_BLINKING \ \ \ -D__SPECTRUM__ \ -lndos -create-app \ -D__CONIO_GRAPHICS \ \ -pragma-redirect:fputc_cons=fputc_cons_generic \ -o $(BUILD_PATH)/X$(GAME_NAME)_TINY_spectrum_16k.prg \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/udg/udg_init_graphics.c \ $(ASSETS_PATH)/z88dk_xchase.asm \ $(TINY_FILES) rm -rf $(BUILD_PATH)/X$(GAME_NAME)_TINY_spectrum_16k.prg rm -rf $(BUILD_PATH)/X$(GAME_NAME)_TINY_spectrum_16k_BANK_7.bin spectrum: spectrum_48k spectrum_48k: $(ASSETS_PATH)/z88dk_xchase.asm $(Z88DK_PATH)$(MYZ88DK) +zx $(SCCZ80_OPTS) $(INCLUDE_OPTS) -v \ -pragma-include:$(CFG_PATH)/z88dk/zpragma_clib.inc \ -pragma-redirect:getk=getk_inkey -DEXTRA_TITLE \ \ -DZ88DK_JOYSTICK \ \ -D_XL_SLOW_DOWN_FACTOR=800 \ \ -D__SPECTRUM__ \ -lndos -create-app \ -D__CONIO_GRAPHICS \ \ -pragma-redirect:fputc_cons=fputc_cons_generic \ -o $(BUILD_PATH)/X$(GAME_NAME)_$@.prg \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/udg/udg_init_graphics.c \ $(ASSETS_PATH)/z88dk_xchase.asm \ $(FULL_FILES) rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.prg rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@_BANK_7.bin spectrum_128k: $(ASSETS_PATH)/z88dk_xchase.asm $(Z88DK_PATH)$(MYZ88DK) +zx $(SCCZ80_OPTS) $(INCLUDE_OPTS) -v \ -pragma-include:$(CFG_PATH)/z88dk/zpragma_clib.inc -DEXTRA_TITLE \ -pragma-redirect:getk=getk_inkey \ \ -DZ88DK_JOYSTICK \ \ -D__PSG_SOUND -D_XL_SLOW_DOWN_FACTOR=600 \ \ -D__SPECTRUM__ \ -lndos -create-app \ -D__CONIO_GRAPHICS \ \ -pragma-redirect:fputc_cons=fputc_cons_generic \ -o $(BUILD_PATH)/X$(GAME_NAME)_$@.prg \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/udg/udg_init_graphics.c \ $(ASSETS_PATH)/z88dk_xchase.asm \ $(CROSS_LIB_PATH)/sound/z88dk/psg/ay-3-8910_psg_sounds.c \ $(FULL_FILES) rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.prg rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@_BANK_7.bin ############################# # SRR srr: $(ASSETS_PATH)/z88dk_xchase.asm $(Z88DK_PATH)$(MYZ88DK) +srr $(SCCZ80_OPTS) $(INCLUDE_OPTS) -pragma-redirect:fputc_cons=fputc_cons_generic \ -D__SRR__ -vn \ \ -D__NO_WAIT \ -D__VT52 \ -D__CONIO_GRAPHICS \ -lndos \ \ \ -clib=default -pragma-redirect:fputc_cons=fputc_cons_generic \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/udg/udg_init_graphics.c \ $(ASSETS_PATH)/z88dk_xchase.asm \ -create-app -o srr \ $(FULL_FILES) rm srr rm srr.srr mv srr.wav $(BUILD_PATH)/X$(GAME_NAME)_srr.wav ############################# # SUPER80 super80: super80_no_col super80_no_col: $(Z88DK_PATH)$(MYZ88DK) +super80 $(SCCZ80_OPTS) $(INCLUDE_OPTS) \ -D__SUPER80__ \ -DXSize=32 \ -DYSize=16 \ \ \ -D__CONIO_GRAPHICS -D_XL_NO_COLOR \ -D__VT52 \ -D__NO_INIT_GRAPHICS \ -lndos \ $(FULL_FILES) \ -create-app -o super80 mv super80.ql $(BUILD_PATH)/X$(GAME_NAME)_super80.ql rm super80 ############################# # SUPER80R super80r: super80r_no_gfx_no_col super80r_no_gfx_no_col: $(Z88DK_PATH)$(MYZ88DK) +super80 $(SCCZ80_OPTS) $(INCLUDE_OPTS) -clib=vduem \ -D__SUPER80R__ \ -DXSize=80 \ -DYSize=23 \ \ -D__BIT_BANG_SOUND \ -D_XL_NO_COLOR \ -D__CONIO_GRAPHICS \ -D__VT52 -D__NO_INIT_GRAPHICS \ $(FULL_FILES) \ -lndos \ -create-app -o super80r mv super80r.ql $(BUILD_PATH)/X$(GAME_NAME)_super80r.ql rm super80r super80r_gfx_no_col: $(ASSETS_PATH)/z88dk_xchase.asm $(Z88DK_PATH)$(MYZ88DK) +super80 $(SCCZ80_OPTS) $(INCLUDE_OPTS) -clib=vduem \ -D__SUPER80R__ \ -DXSize=80 \ -DYSize=24 \ \ \ -D__BIT_BANG_SOUND \ -D_XL_NO_COLOR \ -D__CONIO_GRAPHICS \ -D__VT52 \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/udg/udg_init_graphics.c \ $(ASSETS_PATH)/z88dk_xchase.asm \ $(FULL_FILES) \ -lndos \ -create-app -o super80r mv super80r.ql $(BUILD_PATH)/X$(GAME_NAME)_super80r.ql rm super80r ############################# # SV8000 sv8000: sv8000_tiny sv8000_tiny: $(Z88DK_PATH)$(MYZ88DK) +sv8000 $(SCCZ80_OPTS) -O3 -pragma-define:CLIB_DISABLE_MODE0=1 \ $(INCLUDE_OPTS) \ -D__INCLUDE_CONIO_H \ -DZ88DK_JOYSTICK -DXSize=24 -DYSize=16 \ -D__SV8000__ -DDED__SCREEN_MODE -DTINY_GAME -DNO_WALL -DNO_BLINKING -DNO_PRINT \ -D__CONIO_GRAPHICS -D__NO_WAIT -D_XL_SLOW_DOWN_FACTOR=2000 -D__NO_INIT_GRAPHICS \ -create-app -o$(BUILD_PATH)/X$(GAME_NAME)_TINY_$@.bin \ $(TINY_FILES) rm -rf $(BUILD_PATH)/X$(GAME_NAME)_TINY_$@.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_TINY_$@_BSS.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_TINY_$@_DATA.bin # sv8000_tiny: # $(Z88DK_PATH)$(MYZ88DK) +sv8000 $(SCCZ80_OPTS) -O3 $(INCLUDE_OPTS) \ # -D__SV8000__ -pragma-define:CLIB_DISABLE_MODE0=1 \ # -DZ88DK_JOYSTICK \ # -DXSize=23 \ # -DYSize=16 \ # -D__NO_SCREEN_COLOR_INIT -D__BUFFERED_GRAPHICS -DTURN_BASED \ # -D_XL_NO_COLOR -DNO_PRINT -D__STDIO \ # -DTINY_GAME -DNO_WALL -DNO_BLINKING -D__NO_WAIT -D_XL_NO_SLEEP -DDED__SCREEN_MODE # -D__NO_INIT_GRAPHICS \ # $(TINY_FILES) \ # -create-app -o$(BUILD_PATH)/X$(GAME_NAME)_TINY_$@.bin # rm -rf $(BUILD_PATH)/X$(GAME_NAME)_TINY_$@.bin # rm -rf $(BUILD_PATH)/X$(GAME_NAME)_TINY_$@_BSS.bin # rm -rf $(BUILD_PATH)/X$(GAME_NAME)_TINY_$@_DATA.bin sv8000_32k: $(Z88DK_PATH)$(MYZ88DK) +sv8000 $(SCCZ80_OPTS) -subtype=32k \ $(INCLUDE_OPTS) \ -D__INCLUDE_CONIO_H \ -DZ88DK_JOYSTICK \ \ -D__SV8000__ \ -DLESS_TEXT \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS \ \ -create-app -o$(BUILD_PATH)/X$(GAME_NAME)_$@.bin \ $(FULL_FILES) \ $(CROSS_LIB_PATH)/sound/z88dk/psg/ay-3-8910_psg_sounds.c rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@_BSS.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@_DATA.bin ############################# # TI82 ti82: $(ASSETS_PATH)/z88dk_sprites_definitions.h $(Z88DK_PATH)$(MYZ88DK) +ti82 $(SCCZ80_OPTS) \ $(INCLUDE_OPTS) \ -D__TI82__ \ -DZ88DK_JOYSTICK \ \ -vn -lndos \ -D__ALT_PRINT \ \ -D__Z88DK_SPRITES_GRAPHICS -D__NO_INIT_GRAPHICS \ \ -DLESS_TEXT -D__BIT_BANG_SOUND \ -create-app -o ti82 \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c \ $(FULL_FILES) mv $(SOURCE_PATH)/../../ti82.82p $(BUILD_PATH)/X$(GAME_NAME)_ti82.82p rm -rf $(SOURCE_PATH)/../../ti82 ############################# # TI82 ti83: $(ASSETS_PATH)/z88dk_sprites_definitions.h $(Z88DK_PATH)$(MYZ88DK) +ti83 $(SCCZ80_OPTS) \ $(INCLUDE_OPTS) \ -D__TI83__ \ -DZ88DK_JOYSTICK \ \ -vn -lndos \ -D__ALT_PRINT \ \ -D__Z88DK_SPRITES_GRAPHICS -D__NO_INIT_GRAPHICS \ \ -DLESS_TEXT -D__BIT_BANG_SOUND \ -create-app -oxchase \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c \ $(FULL_FILES) mv $(SOURCE_PATH)/../../xchase.83p $(BUILD_PATH)/X$(GAME_NAME)_ti83.83p rm -rf $(SOURCE_PATH)/../../xchase ############################# # TI85 ti85: $(ASSETS_PATH)/z88dk_sprites_definitions.h $(Z88DK_PATH)$(MYZ88DK) +ti85 $(SCCZ80_OPTS) \ $(INCLUDE_OPTS) \ -D__TI85__ \ -DZ88DK_JOYSTICK \ \ -vn -lndos \ -D__ALT_PRINT \ \ -D__Z88DK_SPRITES_GRAPHICS -D__NO_INIT_GRAPHICS \ \ -DLESS_TEXT -D__BIT_BANG_SOUND \ -create-app -oti85 \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c \ $(FULL_FILES) mv $(SOURCE_PATH)/../../ti85.85s $(BUILD_PATH)/X$(GAME_NAME)_ti85.85s rm -rf $(SOURCE_PATH)/../../ti85 ############################# # TI86 ti86: ti86_light ti86_light: $(Z88DK_PATH)$(MYZ88DK) +ti86 $(SCCZ80_OPTS) \ $(INCLUDE_OPTS) \ -D__TI86__ \ -DZ88DK_JOYSTICK \ -DLESS_TEXT \ -D_XL_NO_COLOR \ -DNO_BLINKING \ -DNO_HINTS \ -clib=ansi -pragma-define:ansicolumns=32 \ -vn \ -lndos \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS \ -create-app -oti86 \ $(LIGHT_FILES) mv $(SOURCE_PATH)/../../ti86.86p $(BUILD_PATH)/X$(GAME_NAME)_LIGHT_ti86.86p rm -rf $(SOURCE_PATH)/../../ti86 ############################# # TI8X ti8x: $(ASSETS_PATH)/z88dk_sprites_definitions.h $(Z88DK_PATH)$(MYZ88DK) +ti8x $(SCCZ80_OPTS) -clib=ansi -subtype=ion -Cz--altfmt \ $(INCLUDE_OPTS) \ -D__TI8X__ \ -DZ88DK_JOYSTICK \ \ -vn -lndos \ -D__ALT_PRINT \ \ -D__Z88DK_SPRITES_GRAPHICS -D__NO_INIT_GRAPHICS \ \ -DLESS_TEXT -D__BIT_BANG_SOUND \ -create-app -oxchase8x \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c \ $(FULL_FILES) mv $(SOURCE_PATH)/../../xchase8x.8xp $(BUILD_PATH)/X$(GAME_NAME)_ti8x.8xp mv $(SOURCE_PATH)/../../xchase8x $(BUILD_PATH)/X$(GAME_NAME)_ti8x.bin ti: ti82 ti83 ti85 ti86 ti8x ############################# # TIKI100 tiki100: $(ASSETS_PATH)/z88dk_sprites_definitions.h $(Z88DK_PATH)$(MYZ88DK) +cpm $(SCCZ80_OPTS) -subtype=tiki100 -ltiki100 \ $(INCLUDE_OPTS) \ -D__TIKI100__ \ -D__ALT_PRINT \ \ -D__Z88DK_SPRITES_GRAPHICS \ -DLESS_TEXT \ \ -DINITIAL_GHOST_FREEZE \ -D_XL_NO_COLOR \ -DNO_RANDOM_LEVEL \ -D_XL_NO_SLEEP \ -DNO_HINTS -D__PSG_SOUND \ -D__NO_SCREEN_COLOR_INIT \ -create-app -o tiki100 \ -D__NO_INIT_GRAPHICS \ $(FULL_FILES) \ $(CROSS_LIB_PATH)/sound/z88dk/psg/ay-3-8910_psg_sounds.c \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c mv $(SOURCE_PATH)/../../tiki100.dsk $(BUILD_PATH)/X$(GAME_NAME)_tiki100.dsk rm -rf $(SOURCE_PATH)/../../tiki100 rm -rf $(SOURCE_PATH)/../../tiki100_HIMEM.bin rm -rf $(SOURCE_PATH)/../../tiki100.com ############################# # TRS80 trs80: $(ASSETS_PATH)/z88dk_sprites_definitions.h $(Z88DK_PATH)$(MYZ88DK) +trs80 $(SCCZ80_OPTS) -lndos -subtype=disk \ $(INCLUDE_OPTS) \ -pragma-redirect:getk=getk_inkey \ -pragma-define:REGISTER_SP=0xffb5 \ -D__TRS80__ \ \ -vn -lndos \ -D__ALT_PRINT -D__BIT_BANG_SOUND \ \ -D__Z88DK_SPRITES_GRAPHICS -D__NO_INIT_GRAPHICS \ \ -DLESS_TEXT \ -create-app \ \ -o$(BUILD_PATH)/X$(GAME_NAME)_trs80.bin \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c \ $(FULL_FILES) rm -rf $(BUILD_PATH)/X$(GAME_NAME)_trs80.bin trs80_chars: $(Z88DK_PATH)$(MYZ88DK) +trs80 $(SCCZ80_OPTS) -lndos -subtype=disk \ $(INCLUDE_OPTS) \ -lm -create-app \ -D__TRS80__ \ -pragma-redirect:getk=getk_inkey \ \ -D__VT52 \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS -D__BIT_BANG_SOUND \ -o$(BUILD_PATH)/X$(GAME_NAME)_trs80_chars.bin \ $(FULL_FILES) rm -rf $(BUILD_PATH)/X$(GAME_NAME)_trs80_chars.bin ############################# # TS2068 ts2068: $(ASSETS_PATH)/z88dk_sprites_definitions.h $(Z88DK_PATH)$(MYZ88DK) +ts2068 $(SCCZ80_OPTS) $(INCLUDE_OPTS) \ -clib=ansi \ -D__TS2068__ \ -D_XL_NO_COLOR \ -vn \ \ -DLESS_TEXT -D__BIT_BANG_SOUND \ -lndos \ -D__ALT_PRINT \ -D__Z88DK_SPRITES_GRAPHICS \ \ -D__NO_INIT_GRAPHICS \ \ $(FULL_FILES) \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c \ -create-app -o $(BUILD_PATH)/X$(GAME_NAME)_ts2068.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_ts2068.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_ts2068_BANK_7.bin ############################# # TVC tvc: tvc_buffered tvc_buffered: $(Z88DK_PATH)$(MYZ88DK) +tvc $(SCCZ80_OPTS) $(INCLUDE_OPTS) \ -D__TVC__ \ -DXSize=31 \ -DYSize=23 \ -D__NO_SCREEN_COLOR_INIT -D__BUFFERED_GRAPHICS -DTURN_BASED \ -D_XL_NO_COLOR -D__ALT_PRINT -D__STDIO \ -D__NO_WAIT -D_XL_NO_SLEEP -DDED__SCREEN_MODE -D__NO_INIT_GRAPHICS \ $(FULL_FILES) \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c \ -create-app -o$(BUILD_PATH)/X$(GAME_NAME)_$@.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.bin ############################# # VECTOR06C vector06c: $(Z88DK_PATH)$(MYZ88DK) +vector06c $(SCCZ80_OPTS) $(INCLUDE_OPTS) \ -D__VECTOR06C__ \ -DXSize=32 \ -DYSize=30 \ -D__NO_SCREEN_COLOR_INIT \ \ -D__VT52 \ -D__CONIO_GRAPHICS \ -lndos \ -D__NO_INIT_GRAPHICS \ $(FULL_FILES) \ -create-app -o$(BUILD_PATH)/X$(GAME_NAME)_vector06c.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_vector06c.bin ############################# # V-TECH GENIUS LEADER gl4000: gl4000_buffered gl4000_buffered: $(Z88DK_PATH)$(MYZ88DK) +gl -clib=gl4000 $(SCCZ80_OPTS) $(INCLUDE_OPTS) \ -D__VGL__ \ -DXSize=20 -D_XL_NO_LOWER_BORDER \ -DYSize=6 \ -D__NO_SCREEN_COLOR_INIT -D__BUFFERED_GRAPHICS -DTURN_BASED \ -D_XL_NO_COLOR -D__ALT_PRINT -D__STDIO \ -D__NO_WAIT -D_XL_NO_SLEEP -DDED__SCREEN_MODE -D__NO_INIT_GRAPHICS \ $(FULL_FILES) \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c \ -create-app -o$(BUILD_PATH)/X$(GAME_NAME)_$@.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@_BSS.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@_DATA.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.bin gl6000sl: gl6000sl_buffered gl6000sl_buffered: $(Z88DK_PATH)$(MYZ88DK) +gl -clib=gl6000sl $(SCCZ80_OPTS) $(INCLUDE_OPTS) \ -D__VGL__ \ -DXSize=30 -D_XL_NO_LOWER_BORDER \ -DYSize=12 \ -D__NO_SCREEN_COLOR_INIT -D__BUFFERED_GRAPHICS -DTURN_BASED \ -D_XL_NO_COLOR -D__ALT_PRINT -D__STDIO \ -D__NO_WAIT -D_XL_NO_SLEEP -DDED__SCREEN_MODE -D__NO_INIT_GRAPHICS \ $(FULL_FILES) \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c \ -create-app -o$(BUILD_PATH)/X$(GAME_NAME)_$@.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@_BSS.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@_DATA.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.bin ############################# # X1 x1: $(ASSETS_PATH)/z88dk_xchase.asm $(Z88DK_PATH)$(MYZ88DK) +x1 $(SCCZ80_OPTS) \ $(INCLUDE_OPTS) -DEXTRA_TITLE \ -D__X1__ \ -D__PSG_SOUND \ \ -D__CONIO_GRAPHICS \ -create-app -o $(BUILD_PATH)/X$(GAME_NAME)_$@.bin -vn -lndos \ $(CROSS_LIB_PATH)/sound/z88dk/psg/ay-3-8910_psg_sounds.c \ $(FULL_FILES) \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/udg/udg_init_graphics.c \ $(ASSETS_PATH)/z88dk_xchase.asm rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.bin x1_no_gfx: $(Z88DK_PATH)$(MYZ88DK) +x1 $(SCCZ80_OPTS) \ $(INCLUDE_OPTS) \ -D__X1__ \ -D__PSG_SOUND \ \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS \ -create-app -o $(BUILD_PATH)/X$(GAME_NAME)_$@.bin -vn -lndos \ $(CROSS_LIB_PATH)/sound/z88dk/psg/ay-3-8910_psg_sounds.c \ $(FULL_FILES) rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.bin ############################# # ZX80 zx80: zx80_16k_turn_based zx80_16k_turn_based: $(Z88DK_PATH)$(MYZ88DK) +zx80 $(SCCZ80_OPTS) $(INCLUDE_OPTS) -vn \ -D__ZX80__ \ \ -DTURN_BASED \ -D__ALT_SLEEP \ -D__CONIO_GRAPHICS \ -D__NO_INIT_GRAPHICS \ -lndos \ -create-app -o $(BUILD_PATH)/X$(GAME_NAME)_$@.prg \ $(CROSS_LIB_PATH)/sleep/sleep_macros.c \ $(FULL_FILES) rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.prg zx80_v2: zx80_16k_turn_based_v2 zx80_16k_turn_based_v2: $(Z88DK_PATH)$(MYZ88DK) +zx80 $(SCCZ80_OPTS) $(INCLUDE_OPTS) -vn \ -D__ZX80__ \ -DTURN_BASED \ -D__ALT_SLEEP \ -D__CONIO_GRAPHICS \ -D__NO_INIT_GRAPHICS \ -lndos \ -create-app -o $(BUILD_PATH)/X$(GAME_NAME)_$@.prg \ $(CROSS_LIB_PATH)/sleep/sleep_macros.c \ $(FULL_FILES) rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.prg ############################# # Z1013 z1013: $(Z88DK_PATH)$(MYZ88DK) +z1013 $(SCCZ80_OPTS) $(INCLUDE_OPTS) -clib=ansi \ -vn -lndos \ -D__Z1013__ \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS \ $(FULL_FILES) \ -create-app -o z1013 mv $(SOURCE_PATH)/../../Z1013.Z80 $(BUILD_PATH)/X$(GAME_NAME)_z1013.z80 rm -rf $(SOURCE_PATH)/../../z1013 ############################# # Z80TVGAME z80tvgame_no_gfx: $(Z88DK_PATH)$(MYZ88DK) +z80tvgame $(SCCZ80_OPTS) $(INCLUDE_OPTS) \ -D__Z80TVGAME__ \ -D__NO_SCREEN_COLOR_INIT \ -D_XL_NO_COLOR -DXSize=21 -DYSize=26 -DZ88DK_JOYSTICK \ \ -D__VT52 \ -D__CONIO_GRAPHICS \ -lndos -D__BIT_BANG_SOUND \ -D__NO_INIT_GRAPHICS \ $(FULL_FILES) \ -create-app -o$(BUILD_PATH)/X$(GAME_NAME)_$@.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@_DATA.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@_BSS.bin z80tvgame: $(ASSETS_PATH)/z88dk_xchase.asm $(Z88DK_PATH)$(MYZ88DK) +z80tvgame $(SCCZ80_OPTS) $(INCLUDE_OPTS) \ -D__Z80TVGAME__ \ -D__NO_SCREEN_COLOR_INIT \ -D_XL_NO_COLOR -DXSize=21 -DYSize=26 -DZ88DK_JOYSTICK \ \ -D__VT52 \ -D__CONIO_GRAPHICS \ -lndos -D__BIT_BANG_SOUND \ $(FULL_FILES) \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/udg/udg_init_graphics.c \ $(ASSETS_PATH)/z88dk_xchase.asm \ -create-app -o$(BUILD_PATH)/X$(GAME_NAME)_$@.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@_DATA.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@_BSS.bin ############################# # Z88 z88: $(ASSETS_PATH)/z88dk_sprites_definitions.h $(Z88DK_PATH)$(MYZ88DK) +z88 $(SCCZ80_OPTS) -subtype=app \ $(INCLUDE_OPTS) \ -D__Z88__ \ \ -vn -lndos \ -D__ALT_PRINT \ -D__Z88DK_SPRITES_GRAPHICS \ -D__BIT_BANG_SOUND \ \ -DLESS_TEXT \ -D__NO_WAIT \ -D_XL_NO_SLEEP \ -D_XL_NO_COLOR \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/z88/z88_init_graphics.c \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c \ $(FULL_FILES) \ -create-app -o z88 rm z88 rm z88.ap0 rm z88_BSS.bin rm z88_DATA.bin rm z88_bss_fardata.bin mv z88.63 $(BUILD_PATH)/X$(GAME_NAME)_z88.63 mv z88.epr $(BUILD_PATH)/X$(GAME_NAME)_z88.epr ############################# # ZXN zxn: $(Z88DK_PATH)$(MYZ88DK) +zxn $(SCCZ80_OPTS) -clib=classic -subtype=nex $(INCLUDE_OPTS) \ -D__ZXN__ -DEXTRA_TITLE \ -DXSize=64 \ -DYSize=22 \ -D__NO_SCREEN_COLOR_INIT \ -D_XL_NO_COLOR -D_XL_SLOW_DOWN_FACTOR=9000 \ -D__VT52 \ -D__CONIO_GRAPHICS -D__PSG_SOUND \ -lndos \ -D__NO_INIT_GRAPHICS \ $(FULL_FILES) \ $(CROSS_LIB_PATH)/sound/z88dk/psg/ay-3-8910_psg_sounds.c \ -create-app -o$(BUILD_PATH)/X$(GAME_NAME)_zxn.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_zxn.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_zxn_UNASSIGNED.bin ================================================ FILE: src/games/chase/makefiles.chase/makefiles_z88dk/Makefile_z88dk_zsdcc ================================================ # ------------------------------------------------------------------------------------------ # Z88DK ZSDCC # z88dk_targets_zsdcc: \ aquarius_targets \ gal_targets \ mc1000_targets \ svi_targets \ vg5k_targets \ vz200_targets \ zx81_targets z88dk_targets_zsdcc_more: \ aquarius_targets \ gal_targets \ mc1000_targets \ oz_targets \ pv1000_targets \ svi_targets \ vg5k_targets \ vz200_targets \ z9001_targets \ zx81_targets # ------------------------------------------------------------------------------------------ aquarius_targets: \ aquarius_exp_4k aquarius_exp_16k gal_targets: \ gal_6k gal_22k gal_plus mc1000_targets: \ mc1000_16k mc1000_48k oz_targets: \ oz_tiny_buffered pv1000_targets: \ pv1000 svi_targets: \ svi_318 svi_328 vg5k_targets: \ vg5k vg5k_exp_16k vz200_targets: \ vz200_18k z9001_targets: \ z9001_16k_full z9001_32k_no_gfx z9001_32k zx81_targets_ijkl_spc: \ zx81_16k zx81_32k_wrx_turn_based zx81_targets: \ zx81_targets_ijkl_spc # ------------------------------------------------------------------------------------------ ############################# # AQUARIUS aquarius_exp_4k: $(Z88DK_PATH)$(MYZ88DK) +aquarius $(ZSDCC_OPTS) \ -compiler=sdcc \ $(INCLUDE_OPTS) \ \ -D__AQUARIUS__ -DTINY_GAME -DNO_WALL -DNO_BLINKING \ -DNO_RANDOM_LEVEL \ -D__ALT_PRINT \ -DNO_DEAD_GHOSTS \ \ -D__DEFAULT_CLEAR_SCREEN \ -pragma-include:$(CFG_PATH)/z88dk/zpragma_clib.inc \ -lndos \ -D__MEMORY_MAPPED_GRAPHICS \ $(TINY_FILES) \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/aquarius/aquarius_init_graphics.c \ -create-app -o $(BUILD_PATH)/X$(GAME_NAME)_TINY_$@ rm -rf $(BUILD_PATH)/X$(GAME_NAME)_TINY_$@ aquarius: aquarius_exp_16k aquarius_exp_16k: $(Z88DK_PATH)$(MYZ88DK) +aquarius $(SCCZ80_OPTS) -clib=ansi $(INCLUDE_OPTS) -vn \ -D__AQUARIUS__ -DEXTRA_TITLE \ -lndos \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS \ $(SOURCE_PATH)/end_screen.c \ $(FULL_FILES) \ -create-app \ -o $(BUILD_PATH)/X$(GAME_NAME)_$@ rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@ aquarius_alt: $(Z88DK_PATH)$(MYZ88DK) +aquarius $(SCCZ80_OPTS) -clib=ansi $(INCLUDE_OPTS) -vn \ -D__AQUARIUS__ \ -lndos -D__TARGET_SPECIFIC_ASCII -DEXTRA_TITLE \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS \ $(SOURCE_PATH)/end_screen.c \ $(FULL_FILES) \ -create-app \ -o $(BUILD_PATH)/X$(GAME_NAME)_$@ rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@ aquarius_alt_memory_mapped: $(Z88DK_PATH)$(MYZ88DK) +aquarius $(SCCZ80_OPTS) -clib=ansi $(INCLUDE_OPTS) -vn \ -D__AQUARIUS__ -D_XL_SLOW_DOWN_FACTOR=1500 \ -lndos -D__TARGET_SPECIFIC_ASCII -DEXTRA_TITLE \ -D__MEMORY_MAPPED_GRAPHICS -D__NO_INIT_GRAPHICS \ $(SOURCE_PATH)/end_screen.c \ $(FULL_FILES) \ -create-app \ -o $(BUILD_PATH)/X$(GAME_NAME)_$@ rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@ aquarius_quad: $(Z88DK_PATH)$(MYZ88DK) +aquarius $(SCCZ80_OPTS) -clib=ansi $(INCLUDE_OPTS) -vn \ -D__AQUARIUS__ \ -lndos -D_XL_SLOW_DOWN_FACTOR=1500 -DNO_UDG -DNO_PRINT \ -D__QUAD_MEMORY_MAPPED_GRAPHICS -DXSize=20 -DYSize=12 -D__NO_INIT_GRAPHICS \ $(FULL_FILES) \ -create-app \ -o $(BUILD_PATH)/X$(GAME_NAME)_$@ rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@ ############################# # GAL gal: gal_22k gal_22k: $(Z88DK_PATH)$(MYZ88DK) +gal $(SCCZ80_OPTS) \ $(INCLUDE_OPTS) \ -pragma-need=ansiterminal \ -D__GAL__ \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS \ -vn -lndos -create-app -o $(BUILD_PATH)/X$(GAME_NAME)_galaksija.prg \ $(SOURCE_PATH)/end_screen.c \ $(FULL_FILES) rm -rf $(BUILD_PATH)/X$(GAME_NAME)_galaksija.prg # --opt-code-size gal_6k: $(Z88DK_PATH)$(MYZ88DK) +gal $(ZSDCC_OPTS) \ -compiler=sdcc \ $(INCLUDE_OPTS) \ -pragma-need=ansiterminal \ --reserve-regs-iy \ -pragma-include:$(CFG_PATH)/z88dk/zpragma_clib.inc \ -DTINY_GAME -DNO_WALL -DNO_BLINKING \ -D_XL_NO_SLEEP -DLESS_TEXT \ -D__GAL__ \ -DNO_RANDOM_LEVEL \ -D__NO_SCREEN_COLOR_INIT \ -DBOMBS_NUMBER=4 \ -DGHOSTS_NUMBER=8 \ -DNO_DEAD_GHOSTS \ -D__NO_INIT_GRAPHICS \ -DFLAT_ENEMIES \ -D__ALT_HIGHSCORE \ -D__CONIO_GRAPHICS \ -DUSE_TINY_MEMORY_BUFFERS \ -lndos -create-app -Cz--audio -o $(BUILD_PATH)/X$(GAME_NAME)_TINY_galaksija_6k.prg \ $(TINY_FILES) \ $(SOURCE_PATH)/memory/gal_memory.asm rm -rf $(BUILD_PATH)/X$(GAME_NAME)_TINY_galaksija_6k.prg #rm -rf $(BUILD_PATH)/X$(GAME_NAME)_TINY_galaksija_6k.wav gal_plus_no_gfx: $(Z88DK_PATH)$(MYZ88DK) +gal -subtype=galaxyp $(SCCZ80_OPTS) \ $(INCLUDE_OPTS) \ -pragma-need=ansiterminal -D_XL_SLOW_DOWN_FACTOR=300 \ -D__GAL__ -D__GAL_PLUS__ \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS \ -vn -lndos -create-app -o $(BUILD_PATH)/X$(GAME_NAME)_galaksija_plus.prg \ $(SOURCE_PATH)/end_screen.c \ $(FULL_FILES) rm -rf $(BUILD_PATH)/X$(GAME_NAME)_galaksija_plus.prg gal_plus: gal_plus_no_gfx gal_plus_gfx: $(ASSETS_PATH)/z88dk_xchase.asm $(Z88DK_PATH)$(MYZ88DK) +gal -subtype=galaxyp $(SCCZ80_OPTS) \ $(INCLUDE_OPTS) \ --generic-console -D_XL_SLOW_DOWN_FACTOR=0 -D__SCREEN_MODE=1 -DEXTRA_TITLE -DYSize=26 \ -D__GAL__ -D__GAL_PLUS__ \ -D__CONIO_GRAPHICS -D__BIT_BANG_SOUND \ -vn -lndos -create-app -o $(BUILD_PATH)/X$(GAME_NAME)_galaksija_plus.prg \ $(SOURCE_PATH)/end_screen.c \ $(FULL_FILES) $(ASSETS_PATH)/z88dk_xchase.asm \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/udg/udg_init_graphics.c rm -rf $(BUILD_PATH)/X$(GAME_NAME)_galaksija_plus.prg ############################# # MC1000 # -compiler=sdcc -SO3 -pragma-define:REGISTER_SP=0x3fff mc1000_16k: $(ASSETS_PATH)/z88dk_xchase.asm $(Z88DK_PATH)$(MYZ88DK) +mc1000 -O3 $(SCCZ80_OPTS) $(INCLUDE_OPTS) \ -subtype=gaming -DYSize=24 -DLESS_TEXT \ -DZ88DK_JOYSTICK \ -D_XL_SLOW_DOWN_FACTOR=400 \ \ \ -D__MC1000__ \ -D__CONIO_GRAPHICS \ -vn -lndos -Cz--audio \ -create-app -o $@.bin \ -clib=default -pragma-redirect:fputc_cons=fputc_cons_generic \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/udg/udg_init_graphics.c \ $(ASSETS_PATH)/z88dk_xchase.asm \ $(SOURCE_PATH)/end_screen.c \ $(FULL_FILES) mv $@.wav $(BUILD_PATH)/X$(GAME_NAME)_$@.wav rm $@.bin rm $@.cas mc1000: mc1000_16k mc1000_48k: $(ASSETS_PATH)/z88dk_xchase.asm $(Z88DK_PATH)$(MYZ88DK) +mc1000 $(SCCZ80_OPTS) $(INCLUDE_OPTS) $(INCLUDE_OPTS) \ -subtype=gaming -DYSize=24 \ -DZ88DK_JOYSTICK \ -D_XL_SLOW_DOWN_FACTOR=400 \ \ \ -D__MC1000__ \ -D__CONIO_GRAPHICS \ -vn -lndos -Cz--audio \ -create-app -o $@.bin \ -clib=default -pragma-redirect:fputc_cons=fputc_cons_generic \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/udg/udg_init_graphics.c \ $(ASSETS_PATH)/z88dk_xchase.asm \ $(SOURCE_PATH)/end_screen.c \ $(FULL_FILES) mv $@.wav $(BUILD_PATH)/X$(GAME_NAME)_$@.wav rm $@.bin rm $@.cas ############################# # OZ oz: oz_tiny_buffered oz_tiny_buffered: $(TOOLS_PATH)/z88dk/oz/makewzd$(COMPILEDEXT) $(Z88DK_PATH)$(MYZ88DK) +oz $(ZSDCC_ROM_OPTS) \ $(INCLUDE_OPTS) \ -compiler=sdcc \ -ooz.bin \ -D__OZ__ \ -DTINY_GAME -DNO_WALL -DNO_BLINKING \ -DXSize=59 \ -DYSize=9 \ \ -vn -lndos \ -D__BUFFERED_GRAPHICS -DTURN_BASED -D__NO_INIT_GRAPHICS \ -DLESS_TEXT \ -D_XL_NO_COLOR \ -DSIMPLE_STRATEGY \ -D__NO_SCREEN_COLOR_INIT \ -D__ALT_PRINT \ -D__DEFAULT_CLEAR_SCREEN \ $(TINY_FILES) \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c $(TOOLS_PATH)/z88dk/oz/makewzd$(COMPILEDEXT) $(SOURCE_PATH)/../../oz rm -rf $(SOURCE_PATH)/../../oz.bin mv oz.wzd $(BUILD_PATH)/X$(GAME_NAME)_TINY_oz_buffered.wzd ############################# # PV1000 # UDG can be done but differently # -SO3 necessary to build a 16K rom pv1000: $(Z88DK_PATH)$(MYZ88DK) +pv1000 $(ZSDCC_ROM_OPTS) \ -compiler=sdcc \ $(INCLUDE_OPTS) \ -D__PV1000__ \ -DZ88DK_JOYSTICK \ \ \ -D__VT52 \ -D__CONIO_GRAPHICS \ -D__NO_INIT_GRAPHICS \ -lndos \ -DLESS_TEXT \ -clib=default -pragma-redirect:fputc_cons=fputc_cons_generic \ $(SOURCE_PATH)/end_screen.c \ $(FULL_FILES) \ -create-app -o$(BUILD_PATH)/X$(GAME_NAME)_pv1000.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_pv1000.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_pv1000_DATA.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_pv1000_BSS.bin ############################# # SVI svi_318: $(Z88DK_PATH)$(MYZ88DK) +svi $(ZSDCC_OPTS) \ $(INCLUDE_OPTS) \ -compiler=sdcc \ -D__INCLUDE_CONIO_H \ -zorg=49152 \ -clib=ansi \ -pragma-define:ansicolumns=32 \ -pragma-include:$(CFG_PATH)/z88dk/zpragma_clib.inc \ -vn -lndos \ -D__SVI__ \ \ -D__BIT_BANG_SOUND \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS \ -create-app -o svi_318 \ $(LIGHT_FILES) mv svi_318.cas $(BUILD_PATH)/X$(GAME_NAME)_LIGHT_svi_318.cas rm svi_318 svi: svi_328 svi_328: $(ASSETS_PATH)/z88dk_xchase.asm $(Z88DK_PATH)$(MYZ88DK) +svi $(SCCZ80_OPTS) \ -DZ88DK_JOYSTICK -DEXTRA_TITLE \ \ \ -pragma-redirect:fputc_cons=fputc_cons_generic $(INCLUDE_OPTS) \ -vn -lndos \ \ -D__SVI__ \ -D__CONIO_GRAPHICS \ -D__INCLUDE_CONIO_H \ -pragma-define:ansicolumns=32 \ -create-app -o svi_328 \ $(CROSS_LIB_PATH)/sound/z88dk/psg/ay-3-8910_psg_sounds.c \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/udg/udg_init_graphics.c \ $(ASSETS_PATH)/z88dk_xchase.asm \ $(SOURCE_PATH)/end_screen.c \ $(FULL_FILES) mv svi_328.cas $(BUILD_PATH)/X$(GAME_NAME)_svi_328.cas rm svi_328 ############################# # VG5K vg5k_exp_16k: $(ASSETS_PATH)/z88dk_xchase.asm $(Z88DK_PATH)$(MYZ88DK) +vg5k $(SCCZ80_OPTS) \ $(INCLUDE_OPTS) -DEXTRA_TITLE \ -vn -D__VG5K__ -DASM_DISPLAY \ -lndos -create-app -o $(BUILD_PATH)/X$(GAME_NAME)_vg5k_exp_16k.prg \ -D__CONIO_GRAPHICS \ \ -clib=default \ \ \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/udg/udg_init_graphics.c \ $(ASSETS_PATH)/z88dk_xchase.asm \ $(SOURCE_PATH)/end_screen.c \ $(FULL_FILES) rm -rf $(BUILD_PATH)/X$(GAME_NAME)_vg5k_exp_16k.prg vg5k: $(ASSETS_PATH)/z88dk_xchase.asm $(Z88DK_PATH)$(MYZ88DK) +vg5k $(ZSDCC_OPTS) \ -compiler=sdcc \ $(INCLUDE_OPTS) \ --reserve-regs-iy \ -pragma-include:$(CFG_PATH)/z88dk/zpragma_clib.inc \ -vn -D__VG5K__ \ \ -DLESS_TEXT \ \ \ -DGHOSTS_NUMBER=8 \ -DBOMBS_NUMBER=4 \ \ -DSIMPLE_STRATEGY \ -create-app -o $(BUILD_PATH)/X$(GAME_NAME)_vg5k_less_text.prg \ -D__CONIO_GRAPHICS \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/udg/udg_init_graphics.c \ $(ASSETS_PATH)/z88dk_xchase.asm \ $(FULL_FILES) rm -rf $(BUILD_PATH)/X$(GAME_NAME)_vg5k_less_text.prg ############################# # VZ200 vz200: vz200_18k vz200_18k: $(Z88DK_PATH)$(MYZ88DK) +vz -Cz--audio --hardware-keyboard $(SCCZ80_OPTS) --generic-console -vn \ $(INCLUDE_OPTS) -DEXTRA_TITLE \ -D__VZ__ -DHARDWARE_KEYBOARD \ \ \ -D__CONIO_GRAPHICS \ -lndos \ -create-app -Cz--audio -o $(BUILD_PATH)/X$(GAME_NAME)_vz200_18k.vz \ $(FULL_FILES) \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/vz200/vz200_init_graphics.c rm -rf $(BUILD_PATH)/X$(GAME_NAME)_vz200_18k.cas vz200_8k: $(Z88DK_PATH)$(MYZ88DK) +vz $(ZSDCC_OPTS) \ -DTINY_GAME -DNO_WALL -DNO_BLINKING \ \ -pragma-include:$(CFG_PATH)/z88dk/zpragma.inc \ -compiler=sdcc \ --opt-code-size \ $(INCLUDE_OPTS) \ -D__VZ__ -clib=ansi \ -DLESS_TEXT \ -DNO_BLINKING \ -DNO_RANDOM_LEVEL \ -DNO_DEAD_GHOSTS \ -DGHOSTS_NUMBER=4 \ -DBOMBS_NUMBER=2 \ -D__NO_SCREEN_COLOR_INIT \ -DNO_STATS \ -DNO_INITIAL_SCREEN \ -lndos \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS \ -create-app -o $(BUILD_PATH)/X$(GAME_NAME)_TINY_vz200_8k.vz \ $(TINY_FILES) rm -rf $(BUILD_PATH)/X$(GAME_NAME)_TINY_vz200_8k.cas vz200_sprites_18k: $(ASSETS_PATH)/z88dk_sprites_definitions.h $(Z88DK_PATH)$(MYZ88DK) +vz $(SCCZ80_OPTS) \ $(INCLUDE_OPTS) \ \ \ -D__VZ__ \ \ -create-app -o $(BUILD_PATH)/X$(GAME_NAME)_vz200_sprites_18k.vz \ -vn -lndos \ -D__ALT_PRINT \ \ -D__Z88DK_SPRITES_GRAPHICS -D__NO_INIT_GRAPHICS \ \ -DLESS_TEXT \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c \ $(FULL_FILES) rm -rf $(BUILD_PATH)/X$(GAME_NAME)_vz200_sprites_18k.cas ############################# # ZX81 zx81: zx81_v2_16k zx81_16k: $(Z88DK_PATH)$(MYZ88DK) +zx81 $(ZSDCC_OPTS) \ $(INCLUDE_OPTS) -compiler=sdcc \ --opt-code-size \ -vn \ -D__ZX81__ \ \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS \ -lndos \ -create-app -o $(BUILD_PATH)/X$(GAME_NAME)_$@.prg \ $(SOURCE_PATH)/end_screen.c \ $(FULL_FILES) rm -rf $(BUILD_PATH)/X$(GAME_NAME)_zx81_16k.prg zx81_v2: zx81_v2_16k zx81_v2_16k: $(Z88DK_PATH)$(MYZ88DK) +zx81 $(ZSDCC_OPTS) \ $(INCLUDE_OPTS) -pragma-define:ZX_CHAR_XLATE_MODE=1 \ --opt-code-size \ -vn -D_XL_SLOW_DOWN_FACTOR=0 \ -D__ZX81__ \ \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS \ -lndos \ -create-app -o $(BUILD_PATH)/X$(GAME_NAME)_$@.prg \ $(SOURCE_PATH)/end_screen.c \ $(FULL_FILES) rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.prg zx81_32k_wrx: $(ASSETS_PATH)/z88dk_sprites_definitions.h $(Z88DK_PATH)$(MYZ88DK) +zx81 $(SCCZ80_OPTS) -O3 -subtype=wrx -clib=wrx \ $(INCLUDE_OPTS) \ -pragma-include:$(CFG_PATH)/z88dk/zpragma_clib_no_printf.inc \ -pragma-define:hrgpage=36096 \ -DGHOSTS_NUMBER=6 \ \ \ -DNO_BLINKING \ -DXSize=36 \ -DYSize=35 \ -vn \ -D__ZX81__ \ -D__Z88DK_SPRITES_GRAPHICS \ \ -lndos \ \ -DLESS_TEXT \ -D_XL_NO_COLOR \ -DSIMPLE_STRATEGY \ -D__ALT_MOVE \ -D__NO_SCREEN_COLOR_INIT \ -D__ALT_PRINT \ -DFEWER_SPRITES \ -create-app -o $(BUILD_PATH)/X$(GAME_NAME)_$@.prg \ $(FULL_FILES) \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/zx81/zx81_init_graphics.c \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c rm $(BUILD_PATH)/X$(GAME_NAME)_zx81_32k_wrx.prg zx81_32k_wrx_turn_based: $(ASSETS_PATH)/z88dk_sprites_definitions.h $(Z88DK_PATH)$(MYZ88DK) +zx81 $(SCCZ80_OPTS) -O3 -subtype=wrx -clib=wrx \ $(INCLUDE_OPTS) -D__NO_SPRITE_TRANSPARENCY -DEXTRA_TITLE \ -pragma-include:$(CFG_PATH)/z88dk/zpragma_clib_no_printf.inc \ -pragma-define:hrgpage=36096 \ -DGHOSTS_NUMBER=9 \ \ -DNO_BLINKING \ -DTURN_BASED \ -DXSize=36 \ -DYSize=35 \ -vn \ -D__ZX81__ \ -D__Z88DK_SPRITES_GRAPHICS \ \ -lndos \ \ -DLESS_TEXT \ -D_XL_NO_COLOR \ -DSIMPLE_STRATEGY \ -D__NO_SCREEN_COLOR_INIT \ -D__ALT_PRINT \ -DFEWER_SPRITES \ -create-app -o $(BUILD_PATH)/X$(GAME_NAME)_zx81_$@.prg \ $(FULL_FILES) \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/zx81/zx81_init_graphics.c \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c rm -rf $(BUILD_PATH)/X$(GAME_NAME)_zx81_32k_wrx_turn_based.prg ############################# # Z9001 z9001: z9001_32k_no_gfx z9001_16k_full: $(Z88DK_PATH)$(MYZ88DK) +z9001 $(ZSDCC_OPTS) -compiler=sdcc $(INCLUDE_OPTS) -clib=ansi \ -D__Z9001__ -vn \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS \ -DLESS_TEXT \ -DNO_BLINKING \ -DNO_RANDOM_LEVEL \ -DNO_HINTS \ -DSIMPLE_STRATEGY -D__BIT_BANG_SOUND \ -lndos -create-app -o $(BUILD_PATH)/X$(GAME_NAME)_$@.z80 \ $(FULL_FILES) rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.z80 z9001_32k_no_gfx: $(Z88DK_PATH)$(MYZ88DK) +z9001 $(SCCZ80_OPTS) $(INCLUDE_OPTS) -clib=ansi \ -D__Z9001__ -vn \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS -D__BIT_BANG_SOUND \ -lndos -create-app -o $(BUILD_PATH)/X$(GAME_NAME)_$@.z80 \ $(SOURCE_PATH)/end_screen.c \ $(FULL_FILES) rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.z80 z9001_32k: $(ASSETS_PATH)/z88dk_xchase.asm $(Z88DK_PATH)$(MYZ88DK) +z9001 $(SCCZ80_OPTS) $(INCLUDE_OPTS) -clib=ansi \ -D__Z9001__ -vn \ -D__CONIO_GRAPHICS -D__BIT_BANG_SOUND \ -lndos -create-app -o $(BUILD_PATH)/X$(GAME_NAME)_$@.z80 \ $(SOURCE_PATH)/end_screen.c \ $(FULL_FILES) \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/udg/udg_init_graphics.c \ $(ASSETS_PATH)/z88dk_xchase.asm rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.z80 ================================================ FILE: src/games/chase/memory/c16_memory.s ================================================ ; TAPBUF $0333-03F2 819-1010 Cassette tape buffer ; WRLEN $03F3-03F4 1011-1012 Length of data to be written to tape ; RDCNT $03F5-03F6 1013-1014 Length of data to be read from tape ; INPQUE $03F7-0436 1015-1078 RS-232 input queue ; ESTARL $0437-0454 1079-1108 ; ESTAKH $0455-0472 1109-1138 .export _ghosts; _ghosts = $333 .export _bombs; _bombs = _ghosts + $28 .export _player; _player = _bombs + $14 .export _ghostSlowDown; _ghostSlowDown = _player + $5 .export _points; _points = _ghostSlowDown + $2 .export _highScore; _highScore = _points + $2 .export _lives; _lives = _highScore + $2 .export _level; _level = _lives + $1 .export _skull; _skull = _level + $1 .export _bullet; _bullet = _skull + $5 .export _powerUp; _powerUp = _bullet + $5 .export _powerUp2; _powerUp2 = _powerUp + $A .export _gun; _gun = _powerUp2 + $A .export _extraPoints; _extraPoints = _gun + $A .export _rockets; _rockets = _extraPoints + $A .export _freeze; _freeze = _rockets + $14 .export _invincibility; _invincibility = _freeze + $A .export _extraLife; _extraLife = _invincibility + $A .export _super; _super = _extraLife + $A .export _confuse; _confuse = _super + $A .export _zombie; _zombie = _confuse + $A .export _chase; _chase = _zombie + $A .export _ghostCount; _ghostCount = _chase + $A .export _ghostLevel; _ghostLevel = _ghostCount + $1 .export _leftHorizontalMissile; _leftHorizontalMissile = _ghostLevel + $2 .export _rightHorizontalMissile; _rightHorizontalMissile = _leftHorizontalMissile + $5 .export _chasingBullet; _chasingBullet = _rightHorizontalMissile + $5 .export _invincibility_count_down; _invincibility_count_down = _chasingBullet + $5 .export _confuse_count_down; _confuse_count_down = _invincibility_count_down + $2 .export _zombie_count_down; _zombie_count_down = _confuse_count_down + $2 .export _strategyArray; _strategyArray = _zombie_count_down + $2 ; 241 .export _freeze_count_down; _freeze_count_down = _strategyArray + $8 .export _skullSlowDown; _skullSlowDown = _freeze_count_down + $2 .export _skullXCountDown; _skullXCountDown = _skullSlowDown + $2 .export _skullYCountDown; _skullYCountDown = _skullXCountDown + $1 .export _bulletDirection; _bulletDirection = _skullYCountDown + $1 .export _chasedEnemyPtr; _chasedEnemyPtr = _bulletDirection + $1 .export _chasedByGhosts; _chasedByGhosts = _chasedEnemyPtr + $2 .export _rockets_x; _rockets_x = _chasedByGhosts + $2 .export _extraLife_present_on_level; _extraLife_present_on_level = _rockets_x + $4 .export _super_present_on_level; _super_present_on_level = _extraLife_present_on_level + $1 .export _zombie_present_on_level; _zombie_present_on_level = _super_present_on_level + $1 .export _bases; _bases = _zombie_present_on_level + $1 .export _arrowRange; _arrowRange = _bases + $1 .export _all_skulls_killed_in_completed_levels; _all_skulls_killed_in_completed_levels = _arrowRange + $1 .export _bases_in_completed_levels; _bases_in_completed_levels = _all_skulls_killed_in_completed_levels + $1 .export _horizWallsLength; _horizWallsLength = _bases_in_completed_levels + $1 .export _invincibilityActive; _invincibilityActive = _horizWallsLength + $1 .export _confuseActive; _confuseActive = _invincibilityActive + $1 .export _zombieActive; _zombieActive = _confuseActive + $1 .export _verticalWallY; _verticalWallY = _zombieActive + $1 .export _verticalWallLength; _verticalWallLength = _verticalWallY + $1 .export _playerDirection; _playerDirection = _verticalWallLength + $1 .export _freezeActive; _freezeActive = _playerDirection + $1 .export _extraLifeThroughPointsCounter; _extraLifeThroughPointsCounter = _freezeActive + $1 .export _playerFire; _playerFire = _extraLifeThroughPointsCounter + $1 .export _guns; _guns = _playerFire + $1 .export _skullActive; _skullActive = _guns + $1 .export _loop; _loop = $200 .export _playerBlink; _playerBlink = _loop + $2 .export _arrowYPosition; _arrowYPosition = _playerBlink + $1 .export _PLAYER_DOWN_IMAGE; _PLAYER_DOWN_IMAGE = _arrowYPosition + $1 .export _PLAYER_UP_IMAGE; _PLAYER_UP_IMAGE = _PLAYER_DOWN_IMAGE + $2 .export _PLAYER_LEFT_IMAGE; _PLAYER_LEFT_IMAGE = _PLAYER_UP_IMAGE + $2 .export _PLAYER_RIGHT_IMAGE; _PLAYER_RIGHT_IMAGE = _PLAYER_LEFT_IMAGE + $2 .export _GHOST_IMAGE; _GHOST_IMAGE = _PLAYER_RIGHT_IMAGE + $2 .export _BOMB_IMAGE; _BOMB_IMAGE = _GHOST_IMAGE + $2 .export _ind; _ind = _BOMB_IMAGE + $2 .export _POWERUP_IMAGE; _POWERUP_IMAGE = _ind + 1 .export _BULLET_IMAGE; _BULLET_IMAGE = _POWERUP_IMAGE + $2 .export _GUN_IMAGE; _GUN_IMAGE = _BULLET_IMAGE + $2 .export _SKULL_IMAGE; _SKULL_IMAGE = _GUN_IMAGE + $2 .export _EXTRA_POINTS_IMAGE; _EXTRA_POINTS_IMAGE = _SKULL_IMAGE + $2 .export _HORIZONTAL_BRICK_IMAGE; _HORIZONTAL_BRICK_IMAGE = _EXTRA_POINTS_IMAGE + $2 .export _VERTICAL_BRICK_IMAGE; _VERTICAL_BRICK_IMAGE = _HORIZONTAL_BRICK_IMAGE + $2 .export _LEFT_HORIZONTAL_MISSILE_IMAGE; _LEFT_HORIZONTAL_MISSILE_IMAGE = _VERTICAL_BRICK_IMAGE + $2 .export _RIGHT_HORIZONTAL_MISSILE_IMAGE; _RIGHT_HORIZONTAL_MISSILE_IMAGE = _LEFT_HORIZONTAL_MISSILE_IMAGE + $2 .export _ROCKET_IMAGE; _ROCKET_IMAGE = _RIGHT_HORIZONTAL_MISSILE_IMAGE + $2 .export _FREEZE_IMAGE; _FREEZE_IMAGE = _ROCKET_IMAGE + $2 .export _EXTRA_LIFE_IMAGE; _EXTRA_LIFE_IMAGE = _FREEZE_IMAGE + $2 .export _INVINCIBILITY_IMAGE; _INVINCIBILITY_IMAGE = _EXTRA_LIFE_IMAGE + $2 .export _CHASE_IMAGE; _CHASE_IMAGE = _INVINCIBILITY_IMAGE + $2 .export _SUPER_IMAGE; _SUPER_IMAGE = _CHASE_IMAGE + $2 .export _CONFUSE_IMAGE; _CONFUSE_IMAGE = _SUPER_IMAGE + $2 .export _ZOMBIE_IMAGE; _ZOMBIE_IMAGE = _CONFUSE_IMAGE + $2 .export _BROKEN_BRICK_IMAGE; _BROKEN_BRICK_IMAGE = _ZOMBIE_IMAGE + $2 ================================================ FILE: src/games/chase/memory/creativision_memory.s ================================================ .export _ghosts; _ghosts = $100 .export _bombs; _bombs = _ghosts + $28 .export _player; _player = _bombs + $14 .export _ghostSlowDown; _ghostSlowDown = _player + $5 .export _points; _points = _ghostSlowDown + $2 .export _highScore; _highScore = _points + $2 .export _lives; _lives = _highScore + $2 .export _level; _level = _lives + $1 .export _ghostCount; _ghostCount = _level + $1 .export _GHOST_IMAGE; _GHOST_IMAGE = _ghostCount + $1 .export _BOMB_IMAGE; _BOMB_IMAGE = _GHOST_IMAGE + $2 .export _PLAYER_UP_IMAGE; _PLAYER_UP_IMAGE = _BOMB_IMAGE + $2 .export _PLAYER_DOWN_IMAGE; _PLAYER_DOWN_IMAGE = _PLAYER_UP_IMAGE + $2 .export _PLAYER_LEFT_IMAGE; _PLAYER_LEFT_IMAGE = _PLAYER_DOWN_IMAGE + $2 .export _PLAYER_RIGHT_IMAGE; _PLAYER_RIGHT_IMAGE = _PLAYER_LEFT_IMAGE + $2 .export _ind; _ind = _PLAYER_RIGHT_IMAGE + $2 ================================================ FILE: src/games/chase/memory/gal_memory.asm ================================================ PUBLIC _ghosts, _bombs, _player, _ghostSlowDown, _points, _highScore, _lives, _level, _ghostCount, _GHOST_IMAGE, _BOMB_IMAGE, _ind defc _ghosts = 0x2A00 defc _bombs = _ghosts + $28 defc _player = _bombs + $14 defc _ghostSlowDown = _player + $5 defc _points = _ghostSlowDown + $2 defc _highScore = _points + $2 defc _lives = _highScore + $2 defc _level = _lives + $1 defc _ghostCount = _level + $1 defc _GHOST_IMAGE = _ghostCount + $1 defc _BOMB_IMAGE = _GHOST_IMAGE + $1 defc _ind = _BOMB_IMAGE + $1 ================================================ FILE: src/games/chase/memory/gamate_memory.s ================================================ .export _ghosts; _ghosts = $100 .export _bombs; _bombs = _ghosts + $28 .export _player; _player = _bombs + $14 .export _points; _points = _player + $5 .export _highScore; _highScore = _points + $2 .export _lives; _lives = _highScore + $2 .export _level; _level = _lives + $1 .export _ghostCount; _ghostCount = _level + $1 .export _PLAYER_DOWN_IMAGE; _PLAYER_DOWN_IMAGE = _ghostCount + $1 .export _PLAYER_UP_IMAGE; _PLAYER_UP_IMAGE = _PLAYER_DOWN_IMAGE + $1 .export _PLAYER_LEFT_IMAGE; _PLAYER_LEFT_IMAGE = _PLAYER_UP_IMAGE + $1 .export _PLAYER_RIGHT_IMAGE; _PLAYER_RIGHT_IMAGE = _PLAYER_LEFT_IMAGE + $1 .export _GHOST_IMAGE; _GHOST_IMAGE = _PLAYER_RIGHT_IMAGE + $1 .export _BOMB_IMAGE; _BOMB_IMAGE = _GHOST_IMAGE + $1 .export _ind; _ind = _BOMB_IMAGE + $1 .export _POWERUP_IMAGE; _POWERUP_IMAGE = _ind + 1 .export _BULLET_IMAGE; _BULLET_IMAGE = _POWERUP_IMAGE + $2 .export _GUN_IMAGE; _GUN_IMAGE = _BULLET_IMAGE + $2 .export _SKULL_IMAGE; _SKULL_IMAGE = _GUN_IMAGE + $2 .export _EXTRA_POINTS_IMAGE; _EXTRA_POINTS_IMAGE = _SKULL_IMAGE + $2 .export _HORIZONTAL_BRICK_IMAGE; _HORIZONTAL_BRICK_IMAGE = _EXTRA_POINTS_IMAGE + $2 .export _VERTICAL_BRICK_IMAGE; _VERTICAL_BRICK_IMAGE = _HORIZONTAL_BRICK_IMAGE + $2 .export _LEFT_HORIZONTAL_MISSILE_IMAGE; _LEFT_HORIZONTAL_MISSILE_IMAGE = _VERTICAL_BRICK_IMAGE + $2 .export _RIGHT_HORIZONTAL_MISSILE_IMAGE; _RIGHT_HORIZONTAL_MISSILE_IMAGE = _LEFT_HORIZONTAL_MISSILE_IMAGE + $2 .export _ROCKET_IMAGE; _ROCKET_IMAGE = _RIGHT_HORIZONTAL_MISSILE_IMAGE + $2 .export _FREEZE_IMAGE; _FREEZE_IMAGE = _ROCKET_IMAGE + $2 .export _EXTRA_LIFE_IMAGE; _EXTRA_LIFE_IMAGE = _FREEZE_IMAGE + $2 .export _INVINCIBILITY_IMAGE; _INVINCIBILITY_IMAGE = _EXTRA_LIFE_IMAGE + $2 .export _CHASE_IMAGE; _CHASE_IMAGE = _INVINCIBILITY_IMAGE + $2 .export _SUPER_IMAGE; _SUPER_IMAGE = _CHASE_IMAGE + $4 .export _CONFUSE_IMAGE; _CONFUSE_IMAGE = _SUPER_IMAGE + $2 .export _ZOMBIE_IMAGE; _ZOMBIE_IMAGE = _CONFUSE_IMAGE + $2 .export _freeze_count_down; _freeze_count_down = _ZOMBIE_IMAGE + $8 .export _loop; _loop = $100 .export _bulletDirection; _bulletDirection = _loop + $2 .export _skullXCountDown; _skullXCountDown = _bulletDirection + $1 .export _skullYCountDown; _skullYCountDown = _skullXCountDown + $1 .export _ghostSlowDown; _ghostSlowDown = _skullYCountDown + $1 .export _skullActive; _skullActive = _ghostSlowDown + $2 .export _skull; _skull = _skullActive + $1 .export _bullet; _bullet = _skull + $5 .export _powerUp; _powerUp = _bullet + $5 .export _gun; _gun = _powerUp + $A .export _extraPoints; _extraPoints = _gun + $A .export _playerDirection; _playerDirection = _extraPoints + $A .export _freezeActive; _freezeActive = _playerDirection + $1 .export _extraLifeThroughPointsCounter; _extraLifeThroughPointsCounter = _freezeActive + $1 .export _playerFire; _playerFire = _extraLifeThroughPointsCounter + $1 .export _guns; _guns = _playerFire + $1 .export _skullSlowDown; _skullSlowDown = _guns + $2 ================================================ FILE: src/games/chase/memory/oric1_memory.s ================================================ .export _ghosts; _ghosts = $400 .export _bombs; _bombs = _ghosts + $28 .export _player; _player = _bombs + $14 .export _ghostSlowDown; _ghostSlowDown = _player + $5 .export _points; _points = _ghostSlowDown + $2 .export _highScore; _highScore = _points + $2 .export _lives; _lives = _highScore + $2 .export _level; _level = _lives + $1 .export _skull; _skull = _level + $1 .export _bullet; _bullet = _skull + $5 .export _powerUp; _powerUp = _bullet + $5 .export _powerUp2; _powerUp2 = _powerUp + $A .export _gun; _gun = _powerUp2 + $A .export _extraPoints; _extraPoints = _gun + $A .export _rockets; _rockets = _extraPoints + $A .export _freeze; _freeze = _rockets + $14 .export _invincibility; _invincibility = _freeze + $A .export _extraLife; _extraLife = _invincibility + $A .export _super; _super = _extraLife + $A .export _confuse; _confuse = _super + $A .export _zombie; _zombie = _confuse + $A .export _chase; _chase = _zombie + $A .export _ghostCount; _ghostCount = _chase + $A .export _ghostLevel; _ghostLevel = _ghostCount + $1 .export _leftHorizontalMissile; _leftHorizontalMissile = _ghostLevel + $2 .export _rightHorizontalMissile; _rightHorizontalMissile = _leftHorizontalMissile + $5 .export _chasingBullet; _chasingBullet = _rightHorizontalMissile + $5 .export _invincibility_count_down; _invincibility_count_down = _chasingBullet + $5 .export _confuse_count_down; _confuse_count_down = _invincibility_count_down + $2 .export _zombie_count_down; _zombie_count_down = _confuse_count_down + $2 .export _strategyArray; _strategyArray = _zombie_count_down + $2 .export _freeze_count_down; ;_freeze_count_down = _strategyArray + $8 _freeze_count_down = $B800 .export _skullSlowDown; _skullSlowDown = _freeze_count_down + $2 .export _skullXCountDown; _skullXCountDown = _skullSlowDown + $2 .export _skullYCountDown; _skullYCountDown = _skullXCountDown + $1 .export _bulletDirection; _bulletDirection = _skullYCountDown + $1 .export _chasedEnemyPtr; _chasedEnemyPtr = _bulletDirection + $1 .export _chasedByGhosts; _chasedByGhosts = _chasedEnemyPtr + $2 .export _rockets_x; _rockets_x = _chasedByGhosts + $2 .export _extraLife_present_on_level; _extraLife_present_on_level = _rockets_x + $4 .export _super_present_on_level; _super_present_on_level = _extraLife_present_on_level + $1 .export _zombie_present_on_level; _zombie_present_on_level = _super_present_on_level + $1 .export _bases; _bases = _zombie_present_on_level + $1 .export _arrowRange; _arrowRange = _bases + $1 .export _all_skulls_killed_in_completed_levels; _all_skulls_killed_in_completed_levels = _arrowRange + $1 .export _bases_in_completed_levels; _bases_in_completed_levels = _all_skulls_killed_in_completed_levels + $1 .export _horizWallsLength; _horizWallsLength = _bases_in_completed_levels + $1 .export _invincibilityActive; _invincibilityActive = _horizWallsLength + $1 .export _confuseActive; _confuseActive = _invincibilityActive + $1 .export _zombieActive; _zombieActive = _confuseActive + $1 .export _verticalWallY; _verticalWallY = _zombieActive + $1 .export _verticalWallLength; _verticalWallLength = _verticalWallY + $1 .export _playerDirection; _playerDirection = _verticalWallLength + $1 .export _freezeActive; _freezeActive = _playerDirection + $1 .export _extraLifeThroughPointsCounter; _extraLifeThroughPointsCounter = _freezeActive + $1 .export _playerFire; _playerFire = _extraLifeThroughPointsCounter + $1 .export _guns; _guns = _playerFire + $1 .export _skullActive; _skullActive = _guns + $1 .export _loop; _loop = _skullActive + $1 .export _playerBlink; _playerBlink = _loop + $2 .export _arrowYPosition; _arrowYPosition = _playerBlink + $1 .export _PLAYER_DOWN_IMAGE; _PLAYER_DOWN_IMAGE = _arrowYPosition + $1 .export _PLAYER_UP_IMAGE; _PLAYER_UP_IMAGE = _PLAYER_DOWN_IMAGE + $2 .export _PLAYER_LEFT_IMAGE; _PLAYER_LEFT_IMAGE = _PLAYER_UP_IMAGE + $2 .export _PLAYER_RIGHT_IMAGE; _PLAYER_RIGHT_IMAGE = _PLAYER_LEFT_IMAGE + $2 .export _GHOST_IMAGE; _GHOST_IMAGE = _PLAYER_RIGHT_IMAGE + $2 .export _BOMB_IMAGE; _BOMB_IMAGE = _GHOST_IMAGE + $2 .export _ind; _ind = _BOMB_IMAGE + $2 .export _POWERUP_IMAGE; _POWERUP_IMAGE = _ind + $1 .export _BULLET_IMAGE; _BULLET_IMAGE = _POWERUP_IMAGE + $2 .export _GUN_IMAGE; _GUN_IMAGE = _BULLET_IMAGE + $2 .export _SKULL_IMAGE; ;_SKULL_IMAGE = _GUN_IMAGE + $2 _SKULL_IMAGE = $BFE0 .export _EXTRA_POINTS_IMAGE; _EXTRA_POINTS_IMAGE = _SKULL_IMAGE + $2 .export _HORIZONTAL_BRICK_IMAGE; _HORIZONTAL_BRICK_IMAGE = _EXTRA_POINTS_IMAGE + $2 .export _VERTICAL_BRICK_IMAGE; _VERTICAL_BRICK_IMAGE = _HORIZONTAL_BRICK_IMAGE + $2 .export _LEFT_HORIZONTAL_MISSILE_IMAGE; _LEFT_HORIZONTAL_MISSILE_IMAGE = _VERTICAL_BRICK_IMAGE + $2 .export _RIGHT_HORIZONTAL_MISSILE_IMAGE; _RIGHT_HORIZONTAL_MISSILE_IMAGE = _LEFT_HORIZONTAL_MISSILE_IMAGE + $2 .export _ROCKET_IMAGE; _ROCKET_IMAGE = _RIGHT_HORIZONTAL_MISSILE_IMAGE + $2 .export _FREEZE_IMAGE; _FREEZE_IMAGE = _ROCKET_IMAGE + $2 .export _EXTRA_LIFE_IMAGE; _EXTRA_LIFE_IMAGE = _FREEZE_IMAGE + $2 .export _INVINCIBILITY_IMAGE; _INVINCIBILITY_IMAGE = _EXTRA_LIFE_IMAGE + $2 .export _CHASE_IMAGE; _CHASE_IMAGE = _INVINCIBILITY_IMAGE + $2 .export _SUPER_IMAGE; _SUPER_IMAGE = _CHASE_IMAGE + $2 .export _CONFUSE_IMAGE; _CONFUSE_IMAGE = _SUPER_IMAGE + $2 .export _ZOMBIE_IMAGE; _ZOMBIE_IMAGE = _CONFUSE_IMAGE + $2 .export _BROKEN_BRICK_IMAGE; _BROKEN_BRICK_IMAGE = _ZOMBIE_IMAGE + $2 ================================================ FILE: src/games/chase/memory/pet_memory.s ================================================ .export _ghosts; _ghosts = $33A .export _bombs; _bombs = _ghosts + $28 .export _player; _player = _bombs + $14 .export _points; _points = _player + $5 .export _highScore; _highScore = _points + $2 .export _lives; _lives = _highScore + $2 .export _level; _level = _lives + $1 .export _ghostCount; _ghostCount = _level + $1 .export _PLAYER_DOWN_IMAGE; _PLAYER_DOWN_IMAGE = _ghostCount + $1 .export _PLAYER_UP_IMAGE; _PLAYER_UP_IMAGE = _PLAYER_DOWN_IMAGE + $1 .export _PLAYER_LEFT_IMAGE; _PLAYER_LEFT_IMAGE = _PLAYER_UP_IMAGE + $1 .export _PLAYER_RIGHT_IMAGE; _PLAYER_RIGHT_IMAGE = _PLAYER_LEFT_IMAGE + $1 .export _GHOST_IMAGE; _GHOST_IMAGE = _PLAYER_RIGHT_IMAGE + $1 .export _BOMB_IMAGE; _BOMB_IMAGE = _GHOST_IMAGE + $1 .export _ind; _ind = _BOMB_IMAGE + $1 .export _POWERUP_IMAGE; _POWERUP_IMAGE = _ind + 1 .export _BULLET_IMAGE; _BULLET_IMAGE = _POWERUP_IMAGE + $2 .export _GUN_IMAGE; _GUN_IMAGE = _BULLET_IMAGE + $2 .export _SKULL_IMAGE; _SKULL_IMAGE = _GUN_IMAGE + $2 .export _EXTRA_POINTS_IMAGE; _EXTRA_POINTS_IMAGE = _SKULL_IMAGE + $2 .export _HORIZONTAL_BRICK_IMAGE; _HORIZONTAL_BRICK_IMAGE = _EXTRA_POINTS_IMAGE + $2 .export _VERTICAL_BRICK_IMAGE; _VERTICAL_BRICK_IMAGE = _HORIZONTAL_BRICK_IMAGE + $2 .export _LEFT_HORIZONTAL_MISSILE_IMAGE; _LEFT_HORIZONTAL_MISSILE_IMAGE = _VERTICAL_BRICK_IMAGE + $2 .export _RIGHT_HORIZONTAL_MISSILE_IMAGE; _RIGHT_HORIZONTAL_MISSILE_IMAGE = _LEFT_HORIZONTAL_MISSILE_IMAGE + $2 .export _ROCKET_IMAGE; _ROCKET_IMAGE = _RIGHT_HORIZONTAL_MISSILE_IMAGE + $2 .export _FREEZE_IMAGE; _FREEZE_IMAGE = _ROCKET_IMAGE + $2 .export _EXTRA_LIFE_IMAGE; _EXTRA_LIFE_IMAGE = _FREEZE_IMAGE + $2 .export _INVINCIBILITY_IMAGE; _INVINCIBILITY_IMAGE = _EXTRA_LIFE_IMAGE + $2 .export _CHASE_IMAGE; _CHASE_IMAGE = _INVINCIBILITY_IMAGE + $2 .export _SUPER_IMAGE; _SUPER_IMAGE = _CHASE_IMAGE + $4 .export _CONFUSE_IMAGE; _CONFUSE_IMAGE = _SUPER_IMAGE + $2 .export _ZOMBIE_IMAGE; _ZOMBIE_IMAGE = _CONFUSE_IMAGE + $2 .export _freeze_count_down; _freeze_count_down = _ZOMBIE_IMAGE + $8 .export _loop; _loop = $100 .export _bulletDirection; _bulletDirection = _loop + $2 .export _skullXCountDown; _skullXCountDown = _bulletDirection + $1 .export _skullYCountDown; _skullYCountDown = _skullXCountDown + $1 .export _ghostSlowDown; _ghostSlowDown = _skullYCountDown + $1 .export _skullActive; _skullActive = _ghostSlowDown + $2 .export _skull; _skull = _skullActive + $1 .export _bullet; _bullet = _skull + $5 .export _powerUp; _powerUp = _bullet + $5 .export _gun; _gun = _powerUp + $A .export _extraPoints; _extraPoints = _gun + $A .export _playerDirection; _playerDirection = _extraPoints + $A .export _freezeActive; _freezeActive = _playerDirection + $1 .export _extraLifeThroughPointsCounter; _extraLifeThroughPointsCounter = _freezeActive + $1 .export _playerFire; _playerFire = _extraLifeThroughPointsCounter + $1 .export _guns; _guns = _playerFire + $1 .export _skullSlowDown; _skullSlowDown = _guns + $2 ================================================ FILE: src/games/chase/memory/vic20_memory.s ================================================ ; $334-$3FF (820-1023) ;0334-033B 820-827 ?? ;*033C-03FB 828-1019 Cassette buffer .export _ghosts; _ghosts = $334 .export _bombs; _bombs = _ghosts + $28 .export _player; _player = _bombs + $14 .export _ghostSlowDown; _ghostSlowDown = _player + $5 .export _points; _points = _ghostSlowDown + $2 .export _highScore; _highScore = _points + $2 .export _lives; _lives = _highScore + $2 .export _level; _level = _lives + $1 .export _skull; _skull = _level + $1 .export _bullet; _bullet = _skull + $5 .export _powerUp; _powerUp = _bullet + $5 .export _powerUp2; _powerUp2 = _powerUp + $A .export _gun; _gun = _powerUp2 + $A .export _extraPoints; _extraPoints = _gun + $A .export _rockets; _rockets = _extraPoints + $A .export _freeze; _freeze = _rockets + $14 .export _invincibility; _invincibility = _freeze + $A .export _extraLife; _extraLife = _invincibility + $A .export _super; _super = _extraLife + $A .export _confuse; _confuse = _super + $A .export _zombie; ;_zombie = _confuse + $A ; $200 - $276 (512-630) ;*0200-0258 512-600 Basic input buffer ;*0259-0262 601-610 Logical file table ;*0263-026C 611-620 Device # table ;*026D-0276 621-630 Secondary Address table _zombie = $200 .export _chase; _chase = _zombie + $A .export _ghostCount; _ghostCount = _chase + $A .export _ghostLevel; _ghostLevel = _ghostCount + $1 .export _leftHorizontalMissile; _leftHorizontalMissile = _ghostLevel + $2; .export _rightHorizontalMissile; _rightHorizontalMissile = _leftHorizontalMissile + $5; .export _chasingBullet; _chasingBullet = _rightHorizontalMissile + $5; .export _invincibility_count_down; _invincibility_count_down = _chasingBullet + $5 .export _confuse_count_down; _confuse_count_down = _invincibility_count_down + $2 .export _zombie_count_down; _zombie_count_down = _confuse_count_down + $2 .export _strategyArray; _strategyArray = _zombie_count_down + $2 .export _freeze_count_down; _freeze_count_down = _strategyArray + $8 .export _skullSlowDown; _skullSlowDown = _freeze_count_down + $2 .export _skullXCountDown; _skullXCountDown = _skullSlowDown + $2 .export _skullYCountDown; _skullYCountDown = _skullXCountDown + $1 .export _bulletDirection; _bulletDirection = _skullYCountDown + $1 .export _chasedEnemyPtr; _chasedEnemyPtr = _bulletDirection + $1 .export _chasedByGhosts; _chasedByGhosts = _chasedEnemyPtr + $2 .export _rockets_x; _rockets_x = _chasedByGhosts + $2 .export _extraLife_present_on_level; _extraLife_present_on_level = _rockets_x + $4 .export _super_present_on_level; _super_present_on_level = _extraLife_present_on_level + $1 .export _zombie_present_on_level; _zombie_present_on_level = _super_present_on_level + $1 .export _bases; _bases = _zombie_present_on_level + $1 .export _arrowRange; _arrowRange = _bases + $1 .export _all_skulls_killed_in_completed_levels; _all_skulls_killed_in_completed_levels = _arrowRange + $1 .export _bases_in_completed_levels; _bases_in_completed_levels = _all_skulls_killed_in_completed_levels + $1 .export _horizWallsLength; _horizWallsLength = _bases_in_completed_levels + $1 .export _invincibilityActive; _invincibilityActive = _horizWallsLength + $1 .export _confuseActive; _confuseActive = _invincibilityActive + $1 .export _zombieActive; _zombieActive = _confuseActive + $1 .export _verticalWallY; _verticalWallY = _zombieActive + $1 .export _verticalWallLength; _verticalWallLength = _verticalWallY + $1 .export _playerDirection; _playerDirection = _verticalWallLength + $1 .export _freezeActive; _freezeActive = _playerDirection + $1 .export _extraLifeThroughPointsCounter; _extraLifeThroughPointsCounter = _freezeActive + $1 .export _playerFire; _playerFire = _extraLifeThroughPointsCounter + $1 .export _guns; _guns = _playerFire + $1 .export _skullActive; _skullActive = _guns + $1 .export _loop; _loop = _skullActive + $1 .export _playerBlink; _playerBlink = _loop + $2 .export _arrowYPosition; _arrowYPosition = _playerBlink + $1 .export _PLAYER_DOWN_IMAGE; _PLAYER_DOWN_IMAGE = _arrowYPosition + $1 .export _PLAYER_UP_IMAGE; _PLAYER_UP_IMAGE = _PLAYER_DOWN_IMAGE + $2 .export _PLAYER_LEFT_IMAGE; _PLAYER_LEFT_IMAGE = _PLAYER_UP_IMAGE + $2 .export _PLAYER_RIGHT_IMAGE; _PLAYER_RIGHT_IMAGE = _PLAYER_LEFT_IMAGE + $2 .export _GHOST_IMAGE; _GHOST_IMAGE = _PLAYER_RIGHT_IMAGE + $2 .export _BOMB_IMAGE; _BOMB_IMAGE = _GHOST_IMAGE + $2 .export _ind; _ind = _BOMB_IMAGE + $2 .export _POWERUP_IMAGE; _POWERUP_IMAGE = _ind + 1 .export _BULLET_IMAGE; _BULLET_IMAGE = _POWERUP_IMAGE + $2 .export _GUN_IMAGE; _GUN_IMAGE = _BULLET_IMAGE + $2 .export _SKULL_IMAGE; _SKULL_IMAGE = _GUN_IMAGE + $2 .export _EXTRA_POINTS_IMAGE; _EXTRA_POINTS_IMAGE = _SKULL_IMAGE + $2 .export _HORIZONTAL_BRICK_IMAGE; _HORIZONTAL_BRICK_IMAGE = _EXTRA_POINTS_IMAGE + $2 .export _VERTICAL_BRICK_IMAGE; _VERTICAL_BRICK_IMAGE = _HORIZONTAL_BRICK_IMAGE + $2 .export _LEFT_HORIZONTAL_MISSILE_IMAGE; _LEFT_HORIZONTAL_MISSILE_IMAGE = _VERTICAL_BRICK_IMAGE + $2 ; This is the hardware stack. Is it safe? ; $100-$113 (256-275) ; broken by keyboard if in $200 area? .export _RIGHT_HORIZONTAL_MISSILE_IMAGE; ;_RIGHT_HORIZONTAL_MISSILE_IMAGE = _LEFT_HORIZONTAL_MISSILE_IMAGE + $2 _RIGHT_HORIZONTAL_MISSILE_IMAGE = $100 ; broken by keyboard? .export _ROCKET_IMAGE; _ROCKET_IMAGE = _RIGHT_HORIZONTAL_MISSILE_IMAGE + $2 .export _FREEZE_IMAGE; _FREEZE_IMAGE = _ROCKET_IMAGE + $2 .export _EXTRA_LIFE_IMAGE; _EXTRA_LIFE_IMAGE = _FREEZE_IMAGE + $2 .export _INVINCIBILITY_IMAGE; _INVINCIBILITY_IMAGE = _EXTRA_LIFE_IMAGE + $2 .export _CHASE_IMAGE; _CHASE_IMAGE = _INVINCIBILITY_IMAGE + $2 .export _SUPER_IMAGE; _SUPER_IMAGE = _CHASE_IMAGE + $2 .export _CONFUSE_IMAGE; _CONFUSE_IMAGE = _SUPER_IMAGE + $2 .export _ZOMBIE_IMAGE; _ZOMBIE_IMAGE = _CONFUSE_IMAGE + $2 .export _BROKEN_BRICK_IMAGE; _BROKEN_BRICK_IMAGE = _ZOMBIE_IMAGE + $2 ================================================ FILE: src/games/chase/move_player.h ================================================ #ifndef _MOVE_PLAYER #define _MOVE_PLAYER void MOVE_PLAYER(void); #endif // _MOVE_PLAYER ================================================ FILE: src/games/chase/rocket.h ================================================ #ifndef ROCKETS_HEADER #define ROCKETS_HEADER void handle_rockets(void); #endif // ROCKETS_HEADER ================================================ FILE: src/games/chase/settings.h ================================================ #ifndef _SETTINGS #define _SETTINGS #if defined(_XL_TURN_BASED) #if !defined(NO_BLINKING) #define NO_BLINKING #endif #endif #if !defined(NO_PLAYER_ANIMATION) #define ANIMATE_PLAYER #endif #if !defined(NO_END_SCREEN) && !defined(END_SCREEN) #define END_SCREEN #endif # if !defined(NO_BETWEEN_LEVEL) && !defined(BEWEEN_LEVEL) #define BEWEEN_LEVEL #endif #if !defined(TINY_GAME) && !defined(LIGHT_GAME) #ifndef FULL_GAME #define FULL_GAME #endif #endif #include "cross_lib.h" struct ImageStruct { uint8_t _imageData; #if !defined(_XL_NO_COLOR) uint8_t _color; #endif }; typedef struct ImageStruct Image; #if !defined(NO_BLINKING) void _blink_draw(uint8_t x,uint8_t y,Image * image, uint8_t * blinkCounter); #else #define _blink_draw(x,y,image,blinkCounter) _draw(x,y,image) #endif #include "game_settings.h" #endif // _SETTINGS ================================================ FILE: src/games/chase/shapes/7x8/shape4.txt ================================================ #.....# .#####. #.....# #.#.#.# #.... # #.###.# #.....# .#####. ================================================ FILE: src/games/chase/shapes/7x8/shape5.txt ================================================ .#####. #.....# ##.#.## #.#.#.# #.#.#.# ##.#.## #.....# .#####. ================================================ FILE: src/games/chase/shapes/7x8/shape6.txt ================================================ .#...#. .#####. #.#.#.# #.#.#.# #.... # #.###.# #.....# .#####. ================================================ FILE: src/games/chase/shapes/7x8/shape7.txt ================================================ .#####. #.....# #.#.#.# #.....# #..#..# .#.#.#. .#...#. ..###.. ================================================ FILE: src/games/chase/shapes/8x6/shape0.txt ================================================ ...##... .. ##... .##..##. #.####.# ..#..#.. ..#..#.. ================================================ FILE: src/games/chase/shapes/8x6/shape1.txt ================================================ ...##... ...##... .######. #.####.# ..#..#.. ..#..#.. ================================================ FILE: src/games/chase/shapes/8x6/shape10.txt ================================================ ...##... ........ .##..##. #......# ..#..#.. ..#..#.. ================================================ FILE: src/games/chase/shapes/8x6/shape11.txt ================================================ ........ ....#... ..###... ...###.. ...#.... ........ ================================================ FILE: src/games/chase/shapes/8x6/shape12.txt ================================================ ...#.... ..##.... ...##... ...#.... ..##.... ...##... ================================================ FILE: src/games/chase/shapes/8x6/shape13.txt ================================================ ........ .#...#.. ######## ..#...#. ........ ........ ================================================ FILE: src/games/chase/shapes/8x6/shape14.txt ================================================ ........ ###..... .####### .####### ###..... ........ ================================================ FILE: src/games/chase/shapes/8x6/shape15.txt ================================================ ........ .....### #######. #######. .....### ........ ================================================ FILE: src/games/chase/shapes/8x6/shape17.txt ================================================ .######. ###...## ###.#### ###..### .##.###. ..####.. ================================================ FILE: src/games/chase/shapes/8x6/shape18.txt ================================================ .######. ##.##.## ##.##.## ##....## .#.##.#. ..####.. ================================================ FILE: src/games/chase/shapes/8x6/shape2.txt ================================================ ...##... ...##..# .###.##. #.####.. ...#.#.. ...#..#. ================================================ FILE: src/games/chase/shapes/8x6/shape25.txt ================================================ ....#... ..#####. .##.#... ..####.. ....#.#. .#####.. ================================================ FILE: src/games/chase/shapes/8x6/shape3.txt ================================================ ...##... #..##... .##.###. ..####.# ..#.#... .#..#... ================================================ FILE: src/games/chase/shapes/8x6/shape4.txt ================================================ #.####.# .#....#. #.#..#.# #......# #......# .######. ================================================ FILE: src/games/chase/shapes/8x6/shape5.txt ================================================ .######. #.#..#.# #..##..# #..##..# #.#..#.# .######. ================================================ FILE: src/games/chase/shapes/8x6/shape6.txt ================================================ #.####.# .#....#. #.#..#.# #.#..#.# #......# .######. ================================================ FILE: src/games/chase/shapes/8x6/shape7.txt ================================================ .######. #.#..#.# #......# .#.##.#. .#....#. ..####.. ================================================ FILE: src/games/chase/shapes/8x6/shape8.txt ================================================ .######. ###...## ###.#### ####.### .#...##. ..####.. ================================================ FILE: src/games/chase/shapes/8x6/shape9.txt ================================================ ........ ######## ##..#... ####.... ##...... #....... ================================================ FILE: src/games/chase/skull.h ================================================ /* --------------------------------------------------------------------------------------- */ // // CROSS CHASE by Fabrizio Caruso // // Fabrizio_Caruso@hotmail.com // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from // the use of this software. // Permission is granted to anyone to use this software for non-commercial applications, // subject to the following restrictions: // 1. The origin of this software must not be misrepresented; you must not // claim that you wrote the original software. If you use this software in // a product, an acknowledgment in the product documentation would be // appreciated but is not required. // 2. Altered source versions must be plainly marked as such, and must not // be misrepresented as being the original software. // 3. This notice may not be removed or altered from any source distribution. /* --------------------------------------------------------------------------------------- */ #ifndef SKULL #define SKULL #if !defined(TINY_GAME) void handle_skull(void); uint16_t computeSkullSlowDown(void); void computeSkullParameters(void); #endif #endif // SKULL ================================================ FILE: src/games/chase/speed_game_settings.h ================================================ #ifndef _SPEED_TARGET_SETTINGS #define _SPEED_TARGET_SETTINGS #if defined(TINY_GAME) || defined(_XL_TURN_BASED) || !defined(BOMB_DRAW_SKIP) #define SKIP_BOMB_DRAW #else #define SKIP_BOMB_DRAW if(!(loop&BOMB_DRAW_SKIP)) #endif #if defined(_XL_TURN_BASED) || !defined(WALL_DRAW_SKIP) #define SKIP_WALL_DRAW #else #define SKIP_WALL_DRAW if(!(loop&WALL_DRAW_SKIP)) #endif #if defined(WIDE) && !defined(SLOW_MISSILE) #define ADVANCED_LEFT_MISSILE() ++leftHorizontalMissile._x #define ADVANCED_RIGHT_MISSILE() --rightHorizontalMissile._x #else #define ADVANCED_LEFT_MISSILE() do{if(loop&1)++leftHorizontalMissile._x;}while(0) #define ADVANCED_RIGHT_MISSILE() do{if(loop&1)--rightHorizontalMissile._x;}while(0) #endif #endif // _SPEED_TARGET_SETTINGS ================================================ FILE: src/games/chase/split_files/bullet.c ================================================ /* --------------------------------------------------------------------------------------- */ // // CROSS CHASE by Fabrizio Caruso // // Fabrizio_Caruso@hotmail.com // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from // the use of this software. // Permission is granted to anyone to use this software for non-commercial applications, // subject to the following restrictions: // 1. The origin of this software must not be misrepresented; you must not // claim that you wrote the original software. If you use this software in // a product, an acknowledgment in the product documentation would be // appreciated but is not required. // 2. Altered source versions must be plainly marked as such, and must not // be misrepresented as being the original software. // 3. This notice may not be removed or altered from any source distribution. /* --------------------------------------------------------------------------------------- */ #if !defined(TINY_GAME) #include "settings.h" #include "bullet.h" #include "level.h" #include "game_text.h" #include "character.h" #include "item.h" #include "ghost.h" #include "strategy.h" #include "init_images.h" extern uint16_t points; extern uint8_t ghostCount; extern Character ghosts[GHOSTS_NUMBER]; extern uint8_t level; extern Item extraPoints; extern Character skull; extern uint8_t skullActive; extern uint8_t playerFire; extern uint8_t guns; extern uint8_t playerDirection; extern uint8_t bulletDirection; extern Character bullet; extern Character player; #if defined(FULL_GAME) extern Item freeze; extern Item extraLife; extern Item invincibility; extern Character chasingBullet; extern Character leftHorizontalMissile; extern Character rightHorizontalMissile; extern uint8_t rockets_x[ROCKETS_NUMBER]; extern Character rockets[ROCKETS_NUMBER]; extern uint8_t bases; extern uint8_t bases_in_completed_levels; extern Character *chasedEnemyPtr; extern uint8_t isBossLevel; extern uint8_t isMissileLevel; extern uint8_t isOneMissileLevel; extern uint8_t isRocketLevel; #endif #if defined(FULL_GAME) void handle_chasing_bullet(void) { if(chasingBullet._status) { deleteChasingBullet(&chasingBullet); #if !defined(SIMPLE_STRATEGY) moveTowardCharacter(chasedEnemyPtr, &chasingBullet, 4); #else moveTowardCharacter(chasedEnemyPtr, &chasingBullet); #endif displayChasingBullet(&chasingBullet); checkBullet(&chasingBullet); } } #endif void handle_bullet(void) { // Check if player has fired the gun if(playerFire && bullet._status==0 && guns>0) { _XL_SHOOT_SOUND(); --guns; #if !defined(NO_STATS) printGunsStats(); #endif bulletDirection = playerDirection; bullet._status = 1; bullet._x = player._x; bullet._y = player._y; playerFire = 0; } // Move bullet if fired if(bullet._status==1) { moveBullet(&bullet); checkBullet(&bullet); } } void checkBullet(Character *bulletPtr) { bulletVsSkull(bulletPtr); bulletVsGhosts(bulletPtr); } void bulletVsGhost(Character * bulletPtr, Character * ghostPtr) { if(ghostPtr->_status && areCharctersAtSamePosition(bulletPtr, ghostPtr)) { points+=GHOST_VS_MISSILE; ghostDies(ghostPtr); bulletPtr->_status=0; } } void bulletVsGhosts(Character * bulletPtr) { uint8_t i = 0; for(;i_status=0; #if defined(FULL_GAME) decreaseGhostLevel(); #endif reducePowerUpsCoolDowns(); if(!(--skull._status)) { _XL_EXPLOSION_SOUND(); deleteSkull(&skull); points+=SKULL_POINTS; displayScore(); } } } void _moveBullet(register Character *bulletPtr) { deleteBullet(bulletPtr); switch(bulletDirection) { case RIGHT: ++bulletPtr->_x; break; case DOWN: ++bulletPtr->_y; break; case UP: --bulletPtr->_y; break; default: // case LEFT: --bulletPtr->_x; // break; } } #if defined(FULL_GAME) void destroyHorizontalMissile(Character * horizontalMissilePtr) { horizontalMissilePtr->_status = 0; _XL_EXPLOSION_SOUND(); deleteHorizontalMissile(horizontalMissilePtr); points+=HORIZONTAL_MISSILE_BONUS; displayScore(); ++bases; reducePowerUpsCoolDowns(); } #endif void moveBullet(register Character * bulletPtr) { _moveBullet(bulletPtr); if(wallReached(bulletPtr) && bulletPtr->_status) { bulletPtr->_status=0; deleteBullet(bulletPtr); #if defined(FULL_GAME) if(isOneMissileLevel) { if(bulletPtr->_x==XSize-1 && bulletPtr->_y==YSize/2 && rightHorizontalMissile._status) { goto _destroy; } } else if(isMissileLevel || isBossLevel) { if(bulletPtr->_x==XSize-1 && bulletPtr->_y==HORIZONTAL_MISSILE_OFFSET && rightHorizontalMissile._status) { _destroy: destroyHorizontalMissile(&rightHorizontalMissile); } else if(bulletPtr->_x==0 && bulletPtr->_y==YSize-1-HORIZONTAL_MISSILE_OFFSET && leftHorizontalMissile._status) { destroyHorizontalMissile(&leftHorizontalMissile); } } if((isRocketLevel || isBossLevel) && bulletPtr->_y==YSize-1) { uint8_t i; for(i=0;i_x==rockets_x[i] && rockets[i]._status) { rockets[i]._status = 0; ++bases; _XL_EXPLOSION_SOUND(); deleteRocket(&rockets[i]); points+=VERTICAL_MISSILE_BONUS; displayScore(); } } } DRAW_BROKEN_BRICK(bulletPtr->_x, bulletPtr->_y); #endif } else { displayBullet(bulletPtr); } } #endif ================================================ FILE: src/games/chase/split_files/character.c ================================================ /* --------------------------------------------------------------------------------------- */ // // CROSS CHASE by Fabrizio Caruso // // Fabrizio_Caruso@hotmail.com // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from // the use of this software. // Permission is granted to anyone to use this software for non-commercial applications, // subject to the following restrictions: // 1. The origin of this software must not be misrepresented; you must not // claim that you wrote the original software. If you use this software in // a product, an acknowledgment in the product documentation would be // appreciated but is not required. // 2. Altered source versions must be plainly marked as such, and must not // be misrepresented as being the original software. // 3. This notice may not be removed or altered from any source distribution. /* --------------------------------------------------------------------------------------- */ #include "character.h" #include "settings.h" #include "game_text.h" #include "cross_lib.h" extern uint16_t points; extern uint8_t ghostCount; #if !defined(TINY_GAME) || defined(_XL_TURN_BASED) extern uint16_t loop; #endif extern uint8_t level; extern Image DEAD_GHOST_IMAGE; extern Image GHOST_IMAGE; extern Image BOMB_IMAGE; extern Image SKULL_IMAGE; extern Image BROKEN_BRICK_IMAGE; extern Image HORIZONTAL_BRICK_IMAGE; extern Image VERTICAL_BRICK_IMAGE; extern Character ghosts[GHOSTS_NUMBER]; extern Character bombs[BOMBS_NUMBER]; extern Character player; extern uint8_t invincibilityActive; #if !defined(NO_BLINKING) void _blink_draw(uint8_t x, uint8_t y, Image * image, uint8_t *blinkCounter) { if(*blinkCounter) { _draw(x,y,image); *blinkCounter=0; } else { _delete(x,y); *blinkCounter=1; } } #endif #if defined(FULL_GAME) && !defined(_XL_NO_COLOR) void _DRAW_PLAYER(void) { if(invincibilityActive) { player._imagePtr->_color = _XL_YELLOW; } DRAW_PLAYER(player._x, player._y, player._imagePtr); player._imagePtr->_color = _XL_CYAN; } #endif void displayCharacter(register Character * characterPtr) { DRAW_CHARACTER(characterPtr->_x, characterPtr->_y, characterPtr->_imagePtr); } void deleteCharacter(Character * characterPtr) { DELETE_CHARACTER(characterPtr->_x, characterPtr->_y); } #if defined(FULL_GAME) void DRAW_BROKEN_BRICK(uint8_t x, uint8_t y) { _draw(x,y,&BROKEN_BRICK_IMAGE); } #endif #if defined(FULL_GAME) extern uint8_t invincibilityActive; extern uint8_t verticalWallY; extern uint8_t verticalWallLength; extern uint8_t horizWallsLength; extern uint8_t zombieActive; #endif void playerDies(void) { _XL_EXPLOSION_SOUND(); player._status=0; #if !defined(LESS_TEXT) printDefeatMessage(); #endif _XL_SLEEP(1); } #if defined(FULL_GAME) uint8_t playerKilledBy(Character *enemyPtr) { return !invincibilityActive && areCharctersAtSamePosition(enemyPtr,&player); } #endif void initializeCharacter(register Character* characterPtr, uint8_t x, uint8_t y, uint8_t status, Image * imagePtr) { characterPtr->_x = x; characterPtr->_y = y; characterPtr->_status = status; characterPtr->_imagePtr = imagePtr; } uint8_t isCharacterAtLocation(uint8_t x, uint8_t y, Character * characterPtr) { return(characterPtr->_y==y) && (characterPtr->_x==x); } uint8_t wallReached(register Character *characterPtr) { return (characterPtr->_x==0)||(characterPtr->_x==XSize-1) || (characterPtr->_y==0)||(characterPtr->_y==YSize-1); } void ghostDies(Character * ghostPtr) { _XL_EXPLOSION_SOUND(); ghostPtr->_status=0; displayScore(); #if defined(FULL_GAME) if(level>=FIRST_MOVING_BOMBS_LEVEL) { uint8_t i; for(i=0;i_imagePtr = (Image *)&DEAD_GHOST_IMAGE; #if defined(FULL_GAME) displayCharacter(ghostPtr); #endif #elif !defined(TINY_GAME) ghostPtr->_imagePtr = (Image *)&SKULL_IMAGE; #endif --ghostCount; printGhostCountStats(); } void checkBombsVsGhost(register Character * ghostPtr) { if(ghostPtr->_status && characterReachedBombs(ghostPtr)) { points+=GHOST_VS_BOMBS_BONUS; # if defined(TINY_GAME) && defined(MOVE_DEAD_GHOST) ghostPtr->_y=1; #elif defined(TINY_GAME) && defined(BOMB_DEAD_GHOST) ghostPtr->_imagePtr = &BOMB_IMAGE; #elif defined(TINY_GAME) && defined(HIDE_DEAD_GHOST) // #elif defined(TINY_GAME) ghostPtr->_x=ghostCount; ghostPtr->_y=1; #else ghostPtr->_x=1+GHOSTS_NUMBER-ghostCount; ghostPtr->_y=1; #endif ghostDies(ghostPtr); } } uint8_t sameLocationAsAnyLocation(uint8_t x, uint8_t y, Character *characterList, uint8_t length) { uint8_t i; for(i=0;iXSize-SAFETY) || (y<=SAFETY) || (y>YSize-SAFETY)); } #if !defined(TINY_GAME) void relocateCharacter(register Character * characterPtr) { uint8_t x; uint8_t y; do { x = characterPtr->_x + (uint8_t)(_XL_RAND() % RELOCATE_RANGE) - (uint8_t)(RELOCATE_RANGE/2); y = characterPtr->_y + (uint8_t)(_XL_RAND() % RELOCATE_RANGE) - (uint8_t)(RELOCATE_RANGE/2); } while(!safeLocation(x,y)); characterPtr->_x = x; characterPtr->_y = y; } #endif #if defined(FULL_GAME) uint8_t innerWallReached(register Character *characterPtr) { return (characterPtr->_x==XSize/2) && (characterPtr->_y >= verticalWallY) && (characterPtr->_y<= (verticalWallY + verticalWallLength-1)); } uint8_t horizWallsReached(void) { return (player._y==YSize/2) && ((player._x<=horizWallsLength) || (player._x>=-1+XSize-horizWallsLength)); } #endif ================================================ FILE: src/games/chase/split_files/end_screen.c ================================================ #if !defined(TINY_GAME) #include "settings.h" #include "end_screen.h" #include "game_text.h" #include "text_strings.h" #include "move_player.h" #if defined(END_SCREEN) #include "strategy.h" #include "level.h" #include "character.h" #include "ghost.h" extern Character player; extern Character skull; extern Character ghosts[GHOSTS_NUMBER]; extern Character bullet; extern uint8_t playerFire; extern uint8_t level; extern uint8_t guns; extern uint8_t ind; #endif #if defined(END_SCREEN) || defined(DANCE) extern uint8_t bulletDirection; void dance(Character * characterPtr) { deleteCharacter(characterPtr); if(!(bulletDirection&3)) { ++(characterPtr->_x); } else if((bulletDirection&3)==1) { ++(characterPtr->_y); } else if ((bulletDirection&3)==2) { --(characterPtr->_x); } else { --(characterPtr->_y); } displayCharacter(characterPtr); } #endif #if YSize < 20 #define MESSAGE_START 5 #else #define MESSAGE_START 6 #endif #if defined(END_SCREEN) void gameCompleted(void) { level = 0; _XL_CLEAR_SCREEN(); ghostCount = GHOSTS_NUMBER; fillLevelWithCharacters(); displayScore(); playerFire = 0; skull._x = player._x-4; skull._y = player._y; bullet._status = 0; guns = 1; while(!playerFire && !wallReached(&player)) { ++bulletDirection; displayBombs(); for(ind=0;ind0 for(ind=0;ind<253U;++ind){}; #endif MOVE_PLAYER(); } } #endif #endif ================================================ FILE: src/games/chase/split_files/game_text.c ================================================ /* --------------------------------------------------------------------------------------- */ // // CROSS CHASE by Fabrizio Caruso // // Fabrizio_Caruso@hotmail.com // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from // the use of this software. // Permission is granted to anyone to use this software for non-commercial applications, // subject to the following restrictions: // 1. The origin of this software must not be misrepresented; you must not // claim that you wrote the original software. If you use this software in // a product, an acknowledgment in the product documentation would be // appreciated but is not required. // 2. Altered source versions must be plainly marked as such, and must not // be misrepresented as being the original software. // 3. This notice may not be removed or altered from any source distribution. /* --------------------------------------------------------------------------------------- */ #include "settings.h" #include "game_text.h" #include "character.h" #include "settings.h" #include "text_strings.h" #include "cross_lib.h" #include "init_images.h" #define TEXT_COLOR _XL_WHITE extern uint8_t guns; extern Image GUN_IMAGE; extern Image SKULL_IMAGE; #if !defined(_XL_NO_TEXT_COLOR) || defined(__NO_GRAPHICS) #define SET_COLOR(c) _XL_SET_TEXT_COLOR(c) #else #define SET_COLOR(c) #endif #if XSize<20 #define EXTRA_TINY 1 #else #define EXTRA_TINY 0 #endif #if Y_OFFSET==3 #define SKIP_ROW 1 #else #define SKIP_ROW 0 #endif #if defined(WIDE) && !defined(TINY_GAME) #define GUN_IMAGE_X 17 #define GUN_IMAGE_Y 0 #define GHOST_IMAGE_X 13 #define GHOST_IMAGE_Y 0 #define PLAYER_IMAGE_X 16 #define PLAYER_IMAGE_Y (1+SKIP_ROW) #define LEVEL_X (XSize-2) #define LEVEL_Y (1+SKIP_ROW) #else #define GUN_IMAGE_X (11-EXTRA_TINY) #define GUN_IMAGE_Y 0 #define GHOST_IMAGE_X (8-EXTRA_TINY) #define GHOST_IMAGE_Y 0 #define PLAYER_IMAGE_X (14-EXTRA_TINY) #define PLAYER_IMAGE_Y 0 #define LEVEL_X (XSize-2) #define LEVEL_Y 0 #endif extern uint8_t level; extern uint8_t lives; extern uint16_t points; extern uint8_t ghostCount; extern uint16_t ghostLevel; extern uint16_t highScore; extern Image GHOST_IMAGE; extern Image PLAYER_IMAGE; void PRINT_CENTERED_ON_ROW(uint8_t row, const char *Text) { _XL_PRINT(((uint8_t) (XSize - strlen((char *)Text))>>1), row, Text); } #if defined(FULL_GAME) void printKillTheSkull(void) { PRINT_CENTERED(KILL_THE_SKULL_STRING); PRINT_CENTERED_ON_ROW(((uint8_t)YSize)/2+2,DESTROY_MISSILES_STRING); } #endif // TODO: This is SLOW #if !defined(TINY_GAME) && !defined(NO_STATS) void displayStatsTitles(void) { SET_COLOR(TEXT_COLOR); _draw_stat(GUN_IMAGE_X, GUN_IMAGE_Y, &GUN_IMAGE); _draw_stat(GHOST_IMAGE_X, GHOST_IMAGE_Y, &GHOST_IMAGE); _draw_stat(PLAYER_IMAGE_X, PLAYER_IMAGE_Y, &PLAYER_IMAGE); } void printGunsStats(void) { SET_COLOR(TEXT_COLOR); #if defined(WIDE) _XL_PRINTD(GUN_IMAGE_X+2,GUN_IMAGE_Y,1,guns); #else _XL_PRINTD(GUN_IMAGE_X+1,GUN_IMAGE_Y,1,guns); #endif } #endif #if !defined(NO_STATS) void printLevelStats(void) { SET_COLOR(TEXT_COLOR); #if defined(WIDE) && !defined(TINY_GAME) _XL_PRINTD(LEVEL_X,LEVEL_Y,2,level); #elif XSize>16 _XL_PRINTD(LEVEL_X,LEVEL_Y,2,level); #else // No space for level #endif } void printGhostCountStats(void) { SET_COLOR(TEXT_COLOR); #if defined(WIDE) && !defined(TINY_GAME) _XL_PRINTD(GHOST_IMAGE_X+2,GHOST_IMAGE_Y,1,ghostCount); #else _XL_PRINTD(GHOST_IMAGE_X+1,GHOST_IMAGE_Y,1,ghostCount); #endif } void printLivesStats(void) { SET_COLOR(TEXT_COLOR); #if defined(WIDE) && !defined(TINY_GAME) _XL_PRINTD(PLAYER_IMAGE_X+2,PLAYER_IMAGE_Y,2,lives); #else _XL_PRINTD(PLAYER_IMAGE_X+1,PLAYER_IMAGE_Y,2,lives); #endif } #endif #if !defined(NO_PRINT) && !defined(TINY_GAME) void printPressKeyToStart(void) { _XL_SET_TEXT_COLOR(_XL_WHITE); PRINT_CENTERED(PRESS_STRING); } #endif void displayScore(void) { SET_COLOR(TEXT_COLOR); _XL_PRINTD(!EXTRA_TINY,0,5,points); } #if !defined(LESS_TEXT) void printLevel(void) { _XL_SET_TEXT_COLOR(_XL_WHITE); _XL_PRINT(((XSize -7)>>1), (YSize>>1)-2, START_LEVEL_STRING); _XL_PRINTD(((XSize -7)>>1)+6, (YSize>>1)-2, 2, level); } #endif #if !defined(TINY_GAME) void _printScoreOnRow(uint8_t row, uint16_t score) { _XL_PRINTD((uint8_t) ((XSize)>>1)-3, row, 5, score); } #if !defined(LESS_TEXT) void _printScore(uint16_t score) { _printScoreOnRow((YSize>>1), score); } #endif #endif #if !defined(END_SCREEN) void gameCompleted(void) { _XL_CLEAR_SCREEN(); PRINT_CENTERED(YOU_MADE_IT_STRING); } #endif #if !defined(LESS_TEXT) void printVictoryMessage(void) { SET_COLOR(_XL_RED); PRINT_CENTERED(VICTORY_STRING); } #endif #if !defined(LESS_TEXT) void printDefeatMessage(void) { SET_COLOR(_XL_RED); PRINT_CENTERED(DEFEAT_STRING); } #endif #if !defined(TINY_GAME) void printGameOver(void) { SET_COLOR(_XL_RED); PRINT_CENTERED(GAME_OVER_STRING); } #endif #if YSize>=21 #define AUTHOR_Y_SPACE 1 #else #define AUTHOR_Y_SPACE 0 #endif #if YSize>=20 #define EXTRA_Y 1 #define AUTHOR_Y 4 #define CROSS_CHASE_Y 2 #define INTERLINE 2 #define INSTR_Y_OFFSET 2 #else #define EXTRA_Y 0 #define AUTHOR_Y 3 #define CROSS_CHASE_Y 1 #if defined(__Z88DK_SPRITES_GRAPHICS) #define INTERLINE 2 #else #define INTERLINE 1 #endif #define INSTR_Y_OFFSET 1 #endif #if (defined(FULL_GAME) && !defined(NO_HINTS)) || !defined(NO_INITIAL_SCREEN) #if defined(FULL_GAME) && !defined(NO_HINTS) void _printCrossChase(void) { SET_COLOR(_XL_RED); PRINT_CENTERED_ON_ROW(CROSS_CHASE_Y, CROSS_CHASE_STRING); SET_COLOR(TEXT_COLOR); } #else #define _printCrossChase() \ SET_COLOR(_XL_RED); \ PRINT_CENTERED_ON_ROW(CROSS_CHASE_Y, CROSS_CHASE_STRING); \ SET_COLOR(TEXT_COLOR); #endif #endif #if defined(FULL_GAME) && !defined(NO_HINTS) && XSize>=14 void printHints(void) { _printCrossChase(); PRINT_CENTERED_ON_ROW(AUTHOR_Y+1*INTERLINE+EXTRA_Y, LURE_THE_ENEMIES_STRING); PRINT_CENTERED_ON_ROW(AUTHOR_Y+2*INTERLINE+EXTRA_Y, INTO_THE_MINES_STRING); PRINT_CENTERED_ON_ROW(AUTHOR_Y+3*INTERLINE+EXTRA_Y, USE_THE_GUN_AGAINST_STRING); PRINT_CENTERED_ON_ROW(AUTHOR_Y+4*INTERLINE+EXTRA_Y, THE_SKULL_AND_STRING); PRINT_CENTERED_ON_ROW(AUTHOR_Y+5*INTERLINE+EXTRA_Y, MISSILE_BASES_STRING); #if YSize>=14 PRINT_CENTERED_ON_ROW(AUTHOR_Y+6*INTERLINE+EXTRA_Y, FOR_POINTS_AND___STRING); PRINT_CENTERED_ON_ROW(AUTHOR_Y+7*INTERLINE+EXTRA_Y, EXTRA_POWERUPS__STRING); #endif } #endif #if !defined(NO_EXTRA_TITLE) #define ITEMS_TO_DISPLAY 6 static const uint8_t item_tile[ITEMS_TO_DISPLAY][2] = { { _GHOST_TILE, _GHOST_COLOR }, { _SKULL_TILE, _SKULL_COLOR }, { _BOMB_TILE, _BOMB_COLOR }, { _GUN_TILE, _GUN_COLOR}, { _POWERUP_TILE, _POWERUP_COLOR}, { _FREEZE_TILE, _FREEZE_COLOR}, }; static const char item_name[ITEMS_TO_DISPLAY][7] = { _XL_E _XL_N _XL_E _XL_M _XL_Y, _XL_B _XL_O _XL_S _XL_S, _XL_M _XL_I _XL_N _XL_E, _XL_G _XL_U _XL_N, _XL_S _XL_L _XL_O _XL_W, _XL_F _XL_R _XL_E _XL_E _XL_Z _XL_E, }; #define display_items() \ do \ { \ uint8_t i; \ \ for(i=0;i=16 PRINT_CENTERED_ON_ROW(AUTHOR_Y, AUTHOR_STRING); #endif #if !defined(TINY_GAME) _printTopScore(); #if XSize>=16 #if !defined(NO_EXTRA_TITLE) display_items(); #else SET_COLOR(_XL_CYAN); PRINT_CENTERED_ON_ROW(AUTHOR_Y+1*INTERLINE+EXTRA_Y, LURE_THE_ENEMIES_STRING); PRINT_CENTERED_ON_ROW(AUTHOR_Y+2*INTERLINE+EXTRA_Y, INTO_THE_MINES_STRING); #endif #endif SET_COLOR(TEXT_COLOR); #endif #if !defined(NO_CONTROL_INSTRUCTIONS) && XSize>=14 PRINT_CENTERED_ON_ROW(YSize-INSTR_Y_OFFSET, USE_STRING); #endif } #endif ================================================ FILE: src/games/chase/split_files/ghost.c ================================================ /* --------------------------------------------------------------------------------------- */ // // CROSS CHASE by Fabrizio Caruso // // Fabrizio_Caruso@hotmail.com // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from // the use of this software. // Permission is granted to anyone to use this software for non-commercial applications, // subject to the following restrictions: // 1. The origin of this software must not be misrepresented; you must not // claim that you wrote the original software. If you use this software in // a product, an acknowledgment in the product documentation would be // appreciated but is not required. // 2. Altered source versions must be plainly marked as such, and must not // be misrepresented as being the original software. // 3. This notice may not be removed or altered from any source distribution. /* --------------------------------------------------------------------------------------- */ #include "ghost.h" #include "settings.h" extern uint16_t ghostLevel; extern uint8_t level; extern uint16_t loop; extern Character ghosts[GHOSTS_NUMBER]; extern Character bombs[BOMBS_NUMBER]; #if defined(FULL_GAME) extern uint16_t levelSlowDown; uint16_t computeGhostSlowDown(void) { if((loopGHOST_LEVEL_DECREASE) ghostLevel-=GHOST_LEVEL_DECREASE; else ghostLevel=0; } #endif #if !defined(TINY_GAME) void displayBombs(void) { uint8_t i; for(i=0;i=(arrowYPosition-arrowRange)); } void handle_from_left(void) { if(leftHorizontalMissile._status) { deleteHorizontalMissile(&leftHorizontalMissile); if(leftHorizontalMissile._x==XSize-2) { leftHorizontalMissile._x=0; leftHorizontalMissile._y = arrowYPosition; } else { ADVANCED_LEFT_MISSILE(); if(_playerInArrowRange()) { if(player._x>=leftHorizontalMissile._x) { (void) moveCharacter((uint8_t *)&leftHorizontalMissile+Y_MOVE, (uint8_t *)&player+Y_MOVE); } } } displayHorizontalMissile(&leftHorizontalMissile); if(playerKilledBy(&leftHorizontalMissile)) { playerDies(); } } } void handle_from_right(void) { if(rightHorizontalMissile._status) { deleteHorizontalMissile(&rightHorizontalMissile); if(rightHorizontalMissile._x==1) { rightHorizontalMissile._x= XSize-1; rightHorizontalMissile._y = arrowYPosition; } else { ADVANCED_RIGHT_MISSILE(); if(_playerInArrowRange()) { if(player._x<= rightHorizontalMissile._x) { (void) moveCharacter((uint8_t *)&rightHorizontalMissile+Y_MOVE, (uint8_t *)&player+Y_MOVE); } } } displayHorizontalMissile(&rightHorizontalMissile); if(playerKilledBy(&rightHorizontalMissile)) { playerDies(); } } } void handle_missiles(void) { if(isOneMissileLevel) { arrowYPosition = YSize/2; handle_from_right(); } else if(isMissileLevel || isBossLevel) { arrowYPosition = HORIZONTAL_MISSILE_OFFSET; handle_from_right(); arrowYPosition = YSize-1-HORIZONTAL_MISSILE_OFFSET; handle_from_left(); } } #endif // defined(FULL_GAME) ================================================ FILE: src/games/chase/split_files/init_images.c ================================================ #include "tiles.h" #include "images.h" #include "init_images.h" #include "settings.h" #include "cross_lib.h" #if !defined(ANIMATE_PLAYER) extern Image PLAYER_IMAGE; #else extern Image PLAYER_DOWN_IMAGE; extern Image PLAYER_UP_IMAGE; extern Image PLAYER_RIGHT_IMAGE; extern Image PLAYER_LEFT_IMAGE; #endif extern Image GHOST_IMAGE; extern Image BOMB_IMAGE; #if !defined(NO_DEAD_GHOSTS) extern Image DEAD_GHOST_IMAGE; #endif #if !defined(TINY_GAME) extern Image SKULL_IMAGE; extern Image POWERUP_IMAGE; extern Image GUN_IMAGE; extern Image BULLET_IMAGE; extern Image EXTRA_POINTS_IMAGE; extern Image HORIZONTAL_BRICK_IMAGE; extern Image VERTICAL_BRICK_IMAGE; #endif #if defined(FULL_GAME) extern Image LEFT_HORIZONTAL_MISSILE_IMAGE; extern Image RIGHT_HORIZONTAL_MISSILE_IMAGE; extern Image ROCKET_IMAGE; extern Image FREEZE_IMAGE; extern Image EXTRA_LIFE_IMAGE; extern Image INVINCIBILITY_IMAGE; extern Image SUPER_IMAGE; extern Image CONFUSE_IMAGE; extern Image ZOMBIE_IMAGE; extern Image BROKEN_BRICK_IMAGE; #endif void INIT_IMAGES(void) { # if !defined(__NO_GRAPHICS) // Set color data #if !defined(_XL_NO_COLOR) #if defined(ANIMATE_PLAYER) PLAYER_DOWN_IMAGE._color = _PLAYER_COLOR; PLAYER_UP_IMAGE._color = _PLAYER_COLOR; PLAYER_RIGHT_IMAGE._color = _PLAYER_COLOR; PLAYER_LEFT_IMAGE._color = _PLAYER_COLOR; #else PLAYER_IMAGE._color = _PLAYER_COLOR; #endif BOMB_IMAGE._color = _BOMB_COLOR; GHOST_IMAGE._color = _GHOST_COLOR; #if !defined(NO_DEAD_GHOSTS) DEAD_GHOST_IMAGE._color = _DEAD_GHOST_COLOR; #endif #if !defined(TINY_GAME) SKULL_IMAGE._color = _SKULL_COLOR; POWERUP_IMAGE._color = _POWERUP_COLOR; GUN_IMAGE._color = _GUN_COLOR; EXTRA_POINTS_IMAGE._color = _EXTRA_POINTS_COLOR; BULLET_IMAGE._color = _BULLET_COLOR; VERTICAL_BRICK_IMAGE._color = _BRICK_COLOR; HORIZONTAL_BRICK_IMAGE._color = _BRICK_COLOR; #endif #if defined(FULL_GAME) RIGHT_HORIZONTAL_MISSILE_IMAGE._color = _MISSILE_COLOR; LEFT_HORIZONTAL_MISSILE_IMAGE._color = _MISSILE_COLOR; ROCKET_IMAGE._color = _ROCKET_COLOR; FREEZE_IMAGE._color = _FREEZE_COLOR; EXTRA_LIFE_IMAGE._color = _EXTRA_LIFE_COLOR; INVINCIBILITY_IMAGE._color = _INVINCIBILITY_COLOR; SUPER_IMAGE._color = _SUPER_COLOR; CONFUSE_IMAGE._color = _CONFUSE_COLOR; ZOMBIE_IMAGE._color = _ZOMBIE_COLOR; BROKEN_BRICK_IMAGE._color = _BRICK_COLOR; #endif #endif // Set Image Data #if defined(ANIMATE_PLAYER) PLAYER_DOWN_IMAGE._imageData = _PLAYER_DOWN_TILE; //_TILE_0; PLAYER_UP_IMAGE._imageData = _PLAYER_UP_TILE; // _TILE_1; PLAYER_RIGHT_IMAGE._imageData = _PLAYER_RIGHT_TILE; //_TILE_2; PLAYER_LEFT_IMAGE._imageData = _PLAYER_LEFT_TILE; // _TILE_3; #else PLAYER_IMAGE._imageData = _PLAYER_DOWN_TILE; #endif GHOST_IMAGE._imageData = _GHOST_TILE; BOMB_IMAGE._imageData = _BOMB_TILE; #if !defined(NO_DEAD_GHOSTS) DEAD_GHOST_IMAGE._imageData = _DEAD_GHOST_TILE; #endif #if !defined(TINY_GAME) SKULL_IMAGE._imageData = _SKULL_TILE; POWERUP_IMAGE._imageData = _POWERUP_TILE; GUN_IMAGE._imageData = _GUN_TILE; EXTRA_POINTS_IMAGE._imageData = _EXTRA_POINTS_TILE; BULLET_IMAGE._imageData = _BULLET_TILE; VERTICAL_BRICK_IMAGE._imageData = _VERTICAL_BRICK_TILE; HORIZONTAL_BRICK_IMAGE._imageData = _HORIZONTAL_BRICK_TILE; #endif #if defined(FULL_GAME) LEFT_HORIZONTAL_MISSILE_IMAGE._imageData = _LEFT_MISSILE_TILE; RIGHT_HORIZONTAL_MISSILE_IMAGE._imageData = _RIGHT_MISSILE_TILE; ROCKET_IMAGE._imageData = _ROCKET_TILE; FREEZE_IMAGE._imageData = _FREEZE_TILE; SUPER_IMAGE._imageData = _SUPER_TILE; EXTRA_LIFE_IMAGE._imageData = _PLAYER_DOWN_TILE; INVINCIBILITY_IMAGE._imageData = _INVINCIBILITY_TILE; CONFUSE_IMAGE._imageData = _SKULL_TILE; ZOMBIE_IMAGE._imageData = _GHOST_TILE; BROKEN_BRICK_IMAGE._imageData = _BOMB_TILE; #endif #endif } ================================================ FILE: src/games/chase/split_files/item.c ================================================ #include "settings.h" #include "character.h" #include "item.h" #include "ghost.h" #include "game_text.h" extern uint16_t points; extern uint8_t guns; extern uint8_t lives; extern uint8_t level; extern uint8_t freezeActive; extern uint8_t freeze_count_down; #if defined(FULL_GAME) extern uint8_t invincibilityActive; extern uint8_t confuseActive; extern uint8_t zombieActive; extern uint8_t invincibility_count_down; extern uint8_t confuse_count_down; extern uint8_t zombie_count_down; extern uint8_t bases_in_completed_levels; extern uint8_t all_skulls_killed_in_completed_levels; extern uint8_t extraLife_present_on_level; extern uint8_t zombie_present_on_level; #endif extern Image DEAD_GHOST_IMAGE; extern Character ghosts[GHOSTS_NUMBER]; extern Character bombs[BOMBS_NUMBER]; extern Character skull; extern Character player; extern Item powerUp; extern Item gun; extern Item extraPoints; #if defined(FULL_GAME) extern Character *chasedEnemyPtr; extern Character chasingBullet; extern Item powerUp2; extern Item freeze; extern Item invincibility; extern Item chase; extern Item super; extern Item extraLife; extern Item confuse; extern Item zombie; #endif #if !defined(TINY_GAME) void itemReached(Character * itemPtr) { _XL_ZAP_SOUND(); #if defined(_XL_TURN_BASED) displayPlayer(&player); #endif itemPtr->_status = 0; displayScore(); } void relocateItem(Character * itemPtr) { itemPtr->_status = 1; #if defined(FULL_GAME) do { relocateCharacter(itemPtr); } while(innerWallReached(itemPtr)); #else relocateCharacter(itemPtr); #endif } #if defined(FULL_GAME) void _commonPowerUpEffect(void) { points+=POWER_UP_BONUS; decreaseGhostLevel(); freezeActive = 1; freeze_count_down += FROZEN_COUNT_DOWN; } void powerUpEffect(void) { _commonPowerUpEffect(); powerUp._coolDown = POWER_UP_COOL_DOWN; } void _gunEffect(void) { guns = GUNS_NUMBER; #if !defined(NO_STATS) printGunsStats(); #endif points+=GUN_BONUS; } void gunEffect(void) { _gunEffect(); gun._coolDown = GUN_COOL_DOWN; } #else void powerUpEffect(void) { points+=POWER_UP_BONUS; freezeActive = 1; freeze_count_down += FROZEN_COUNT_DOWN; powerUp._coolDown = POWER_UP_COOL_DOWN; } void gunEffect(void) { guns = GUNS_NUMBER; #if !defined(NO_STATS) printGunsStats(); #endif points+=GUN_BONUS; gun._coolDown = GUN_COOL_DOWN; } #endif void extraPointsEffect(void) { points+=EXTRA_POINTS+level*EXTRA_POINTS_LEVEL_INCREASE; extraPoints._coolDown = SECOND_EXTRA_POINTS_COOL_DOWN;//(EXTRA_POINTS_COOL_DOWN<<4); // second time is harder } void handle_item(register Item *itemPtr) { // Manage item if(itemPtr->_character._status == 1) { if(areCharctersAtSamePosition(&player, (Character *) itemPtr)) { itemPtr->_effect(); itemReached((Character *) itemPtr); } else { _blink_draw(itemPtr->_character._x, itemPtr->_character._y, itemPtr->_character._imagePtr, &(itemPtr->_blink)); } } else if (itemPtr->_coolDown == 0) { relocateItem((Character *) itemPtr); } else { --(itemPtr->_coolDown); } } void handle_count_down(uint8_t * activeItemFlagPtr, uint8_t * countDownPtr) { if(*activeItemFlagPtr) { if(*countDownPtr<=0) { *activeItemFlagPtr=0; } else { --(*countDownPtr); } } } #endif // !defined(TINY_GAME) #if defined(FULL_GAME) void reducePowerUpsCoolDowns(void) { extraPoints._coolDown/=2; invincibility._coolDown/=2; freeze._coolDown/=2; _XL_TICK_SOUND(); } #elif !defined(TINY_GAME) void reducePowerUpsCoolDowns(void) { extraPoints._coolDown/=2; _XL_TICK_SOUND(); } #else #endif #if defined(FULL_GAME) void powerUp2Effect(void) { _commonPowerUpEffect(); powerUp2._coolDown = POWER_UP2_COOL_DOWN; } void _freezeEffect(void) { _commonPowerUpEffect(); _commonPowerUpEffect(); _commonPowerUpEffect(); } void freezeEffect(void) { _freezeEffect(); freeze._coolDown = ((uint16_t) (FREEZE_COOL_DOWN)*2); } void extraLifeEffect(void) { ++lives; all_skulls_killed_in_completed_levels=1; extraLife_present_on_level = 0; printLivesStats(); } void _invincibilityEffect(void) { invincibilityActive = 1; invincibility_count_down = INVINCIBILITY_COUNT_DOWN; } void invincibilityEffect(void) { _invincibilityEffect(); invincibility._coolDown = ((uint16_t) (INVINCIBILITY_COOL_DOWN)*4); } void superEffect(void) { _freezeEffect(); _gunEffect(); _invincibilityEffect(); super._coolDown = ((uint16_t) (SUPER_COOL_DOWN)*8); } void confuseEffect(void) { confuseActive = 1; confuse._coolDown = SECOND_CONFUSE_COOL_DOWN; confuse_count_down = CONFUSE_COUNT_DOWN; } void zombieEffect(void) { uint8_t i; zombieActive = 1; bases_in_completed_levels = 1; zombie._coolDown = SECOND_ZOMBIE_COOL_DOWN; zombie_count_down = ZOMBIE_COUNT_DOWN; for(i=0;i>1)-(verticalWallLength>>1); } uint8_t oneMissileLevel(void) { return ((level%5)==3) || (level==5); } uint8_t rocketLevel(void) { return (level >= FIRST_ROCKETS_LEVEL) && ((level%5)==2 || (level%5)==3); } uint8_t missileLevel(void) { return (level%5)==4; } uint8_t bossLevel(void) { return !(level%5); } uint8_t horizWallsLevel(void) { return ((level >= FIRST_HORIZONTAL_WALLS_LEVEL) && ((level%5==1) || (level%5==4))); } void initializeAwayFromWall(Character * characterPtr, uint8_t x, uint8_t y, uint8_t status, Image *imagePtr) { do{ initializeCharacter(characterPtr, x, y, status, imagePtr); relocateCharacter(characterPtr); } while(innerWallReached(characterPtr)); } #endif #if defined(BETWEEN_LEVEL) #if XSize12 #define SPIRAL_LOOPS (2*MIN_SIZE-21) #else #define SPIRAL_LOOPS (2*MIN_SIZE-18) #endif void spiral(register Character *characterPtr) { uint8_t i; uint8_t j; characterPtr->_x = XSize/2; characterPtr->_y = YSize/2; for(i=0;i0 _XL_SLOW_DOWN(55); #endif } } } #endif #if defined(TINY_GAME) #define DRAW_BORDERS() \ do \ { \ uint8_t i; \ uint8_t j; \ for(i=0;i>2); #if !defined(_XL_NO_COLOR) SKULL_IMAGE._color = _XL_CYAN; BOMB_IMAGE._color = _XL_YELLOW; #endif } #if !defined(_XL_NO_COLOR) else { SKULL_IMAGE._color = _XL_YELLOW; BOMB_IMAGE._color = _XL_RED; } #endif if(isRocketLevel || isBossLevel) { for(i=0;i= 9 ROUND_NINE_GHOSTS(); #elif GHOSTS_NUMBER==8 #if (!defined(TINY_GAME) || defined(ROUND_ENEMIES)) && !defined(FLAT_ENEMIES) ROUND_EIGHT_GHOSTS(); #else FLAT_EIGHT_GHOSTS(); #endif #elif GHOSTS_NUMBER==7 ROUND_SEVEN_GHOSTS(); #else FLAT_SIX_GHOSTS(); #endif #if BOMBS_NUMBER==4 FOUR_BOMBS(); #elif BOMBS_NUMBER==3 THREE_BOMBS(); #elif BOMBS_NUMBER==2 TWO_BOMBS(); #elif BOMBS_NUMBER==1 ONE_BOMB(); #endif #if defined(FULL_GAME) initializeAwayFromWall(&(powerUp._character),(XSize>>1),(YSize>>1),1,&POWERUP_IMAGE); initializeAwayFromWall(&(powerUp2._character),(XSize>>1),(YSize>>1),0,&POWERUP_IMAGE); initializeAwayFromWall(&(freeze._character),(XSize>>1),(YSize>>1),0,&FREEZE_IMAGE); initializeAwayFromWall(&(extraPoints._character), (XSize>>1), (YSize>>1), 0, &EXTRA_POINTS_IMAGE); initializeAwayFromWall(&(super._character), (XSize>>1), (YSize>>1), 0, &SUPER_IMAGE); initializeAwayFromWall(&(confuse._character), (XSize>>1), (YSize>>1), 0, &CONFUSE_IMAGE); initializeAwayFromWall(&(zombie._character), (XSize>>1), (YSize>>1), 0, &ZOMBIE_IMAGE); initializeAwayFromWall(&(gun._character),(XSize>>1), (YSize>>1), (isBossLevel ? 1 : 0), &GUN_IMAGE); initializeAwayFromWall(&player,(uint8_t) ((XSize>>1)+(_XL_RAND()&1)),(uint8_t) ((YSize>>1)+(_XL_RAND()&1)),1,&PLAYER_IMAGE); initializeAwayFromWall(&(extraLife._character), (XSize>>1), (YSize>>1), 0, &EXTRA_LIFE_IMAGE); initializeAwayFromWall(&(invincibility._character), (XSize>>1), (YSize>>1), 0, &INVINCIBILITY_IMAGE); if(isOneMissileLevel) { initializeCharacter(&rightHorizontalMissile, XSize-1, (YSize>>1), 1,&RIGHT_HORIZONTAL_MISSILE_IMAGE); } else if(isMissileLevel || isBossLevel) { initializeCharacter(&rightHorizontalMissile, XSize-1, HORIZONTAL_MISSILE_OFFSET, 1,&RIGHT_HORIZONTAL_MISSILE_IMAGE); initializeCharacter(&leftHorizontalMissile, 0, YSize-1-HORIZONTAL_MISSILE_OFFSET, 1,&LEFT_HORIZONTAL_MISSILE_IMAGE); } initializeAwayFromWall(&(chase._character), (XSize>>1), (YSize>>1),0,&BULLET_IMAGE); initializeCharacter(&chasingBullet, 0,0, 0, &BULLET_IMAGE); #else #if !defined(TINY_GAME) initializeCharacter(&(powerUp._character),(XSize>>1),(YSize>>1),1,&POWERUP_IMAGE); initializeCharacter(&(gun._character),(XSize>>1), (YSize>>1), 0, &GUN_IMAGE); initializeCharacter(&(extraPoints._character), (XSize>>1), (YSize>>1), 0, &EXTRA_POINTS_IMAGE); #endif #if defined(NO_RANDOM_LEVEL) || defined(TINY_GAME) || defined(SIMPLE_RANDOM_LEVEL) initializeCharacter(&player,(uint8_t) ((XSize>>1)),(uint8_t) ((YSize>>1)),1,&PLAYER_IMAGE); #else initializeCharacter(&player,(uint8_t) ((XSize>>1)+(uint8_t) (_XL_RAND()&1)), (uint8_t) ((YSize>>1)+(uint8_t) (_XL_RAND()&1)),1,&PLAYER_IMAGE); #endif #endif #if !defined(TINY_GAME) displayPlayer(&player); initializeCharacter(&bullet, 0, 0,0,&BULLET_IMAGE); #if defined(FULL_GAME) initializeCharacter(&skull,XSize-2,YSize-2, NON_BOSS_SKULL_HITS + (isBossLevel<<3), &SKULL_IMAGE); #else initializeCharacter(&skull,XSize-2,YSize-2, NON_BOSS_SKULL_HITS, &SKULL_IMAGE); #endif #endif } ================================================ FILE: src/games/chase/split_files/main.c ================================================ /* --------------------------------------------------------------------------------------- */ // // CROSS CHASE by Fabrizio Caruso // // Fabrizio_Caruso@hotmail.com // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from // the use of this software. // Permission is granted to anyone to use this software for non-commercial applications, // subject to the following restrictions: // 1. The origin of this software must not be misrepresented; you must not // claim that you wrote the original software. If you use this software in // a product, an acknowledgment in the product documentation would be // appreciated but is not required. // 2. Altered source versions must be plainly marked as such, and must not // be misrepresented as being the original software. // 3. This notice may not be removed or altered from any source distribution. /* --------------------------------------------------------------------------------------- */ #include "settings.h" #include "character.h" #include "item.h" #include "strategy.h" #include "game_text.h" #include "level.h" #include "ghost.h" #include "move_player.h" #include "text_strings.h" #include "init_images.h" #include "end_screen.h" #include "variables.h" #if !defined(TINY_GAME) #include "bullet.h" #include "skull.h" #endif #if defined(FULL_GAME) #include "horizontal_missile.h" #include "rocket.h" #endif #if defined(BENCHMARK) #include #include #endif #include "cross_lib.h" // #define DEBUG_ITEMS #if defined(DEBUG_ITEMS) #if defined(ANIMATE_PLAYER) extern Image PLAYER_DOWN_IMAGE; extern Image PLAYER_UP_IMAGE; extern Image PLAYER_RIGHT_IMAGE; extern Image PLAYER_LEFT_IMAGE; #else extern Image PLAYER_IMAGE; #endif extern Image GHOST_IMAGE; extern Image BOMB_IMAGE; extern Image DEAD_GHOST_IMAGE; extern Image SKULL_IMAGE; extern Image POWERUP_IMAGE; extern Image GUN_IMAGE; extern Image EXTRA_POINTS_IMAGE; extern Image BULLET_IMAGE; extern Image VERTICAL_BRICK_IMAGE; extern Image HORIZONTAL_BRICK_IMAGE; extern Image LEFT_HORIZONTAL_MISSILE_IMAGE; extern Image RIGHT_HORIZONTAL_MISSILE_IMAGE; extern Image ROCKET_IMAGE; extern Image FREEZE_IMAGE; extern Image SUPER_IMAGE; extern Image EXTRA_LIFE_IMAGE; extern Image INVINCIBILITY_IMAGE; extern Image CONFUSE_IMAGE; extern Image ZOMBIE_IMAGE; extern Image BROKEN_BRICK_IMAGE; #endif // Level // The level affects: // 1. powerUpCoolDown (how long before a new powerUp is spawned) // 2. ghostSlowDown (how much the power up slows the enemies down) // 3. skullXCountDown (time needed to activate the skull ghost) // 4. skullYCountDown // 5. skullSlowDown (how much the skull ghost is slowed-down) // 6. skullLoopTrigger (how long before the skull ghost appears) #if !defined(TINY_GAME) void resetItems(void) { gun._coolDown = GUN_COOL_DOWN; powerUp._coolDown = POWER_UP_COOL_DOWN; extraPoints._coolDown = EXTRA_POINTS_COOL_DOWN; #if defined(FULL_GAME) powerUp2._coolDown = POWER_UP2_COOL_DOWN; freeze._coolDown = FREEZE_COOL_DOWN; invincibility._coolDown = INVINCIBILITY_COOL_DOWN; chase._coolDown = CHASE_COOL_DOWN; super._coolDown = SUPER_COOL_DOWN; extraLife._coolDown = EXTRA_LIFE_COOL_DOWN; confuse._coolDown = CONFUSE_COOL_DOWN; zombie._coolDown = ZOMBIE_COOL_DOWN; #endif } // Constructor for all items void constructItems(void) { powerUp._effect = &powerUpEffect; gun._effect = &gunEffect; extraPoints._effect = &extraPointsEffect; #if defined(FULL_GAME) powerUp2._effect = &powerUp2Effect; freeze._effect = &freezeEffect; extraLife._effect = &extraLifeEffect; invincibility._effect = &invincibilityEffect; super._effect = &superEffect; confuse._effect = &confuseEffect; zombie._effect = &zombieEffect; chase._effect = &chaseEffect; #endif } #endif #if !defined(NO_INITIAL_SCREEN) void initialScreen(void) { _XL_CLEAR_SCREEN(); printStartMessage(); #if defined(FULL_GAME) && !defined(NO_HINTS) && XSize>=14 _XL_WAIT_FOR_INPUT(); _XL_CLEAR_SCREEN(); printHints(); #endif } #endif #if defined(FULL_GAME) void handle_special_triggers(void) { // confuse_present_on_level_condition is defined as bases_in_completed_levels zombie_present_on_level = bases_in_completed_levels>=MISSILES_FOR_ZOMBIE; super_present_on_level = all_skulls_killed_in_completed_levels>=SKULLS_FOR_SUPER; // chase_present_on_level_condition is defined as all_skulls_killed_in_completed_levels; extraLife_present_on_level = super_present_on_level && zombie_present_on_level; } #endif #if defined(DEBUG_ITEMS) void DO_DEBUG_ITEMS(void) { #if defined(ANIMATE_PLAYER) _draw_stat(1, 0,&PLAYER_DOWN_IMAGE); _draw_stat(1, 1,&PLAYER_UP_IMAGE); _draw_stat(1, 2,&PLAYER_RIGHT_IMAGE); _draw_stat(1, 3,&PLAYER_LEFT_IMAGE); #else _draw_stat(1, 0,&PLAYER_IMAGE); #endif _draw_stat(1, 4,&GHOST_IMAGE); _draw_stat(1, 5,&BOMB_IMAGE); #if !defined(NO_DEAD_GHOST) _draw_stat(1, 6,&DEAD_GHOST_IMAGE); #endif #if !defined(TINY_GAME) _draw_stat(1, 7,&SKULL_IMAGE); _draw_stat(1, 8,&POWERUP_IMAGE); _draw_stat(1, 9,&GUN_IMAGE); _draw_stat(1,10,&EXTRA_POINTS_IMAGE); _draw_stat(1,11,&BULLET_IMAGE); _draw_stat(1,12,&VERTICAL_BRICK_IMAGE); _draw_stat(1,13,&HORIZONTAL_BRICK_IMAGE); #if defined(FULL_GAME) _draw_stat(1,14,&LEFT_HORIZONTAL_MISSILE_IMAGE); _draw_stat(1,15,&RIGHT_HORIZONTAL_MISSILE_IMAGE); #if (YSize+Y_OFFSET)>18 _draw_stat(1,16,&ROCKET_IMAGE); _draw_stat(1,17,&FREEZE_IMAGE); _draw_stat(1,18,&SUPER_IMAGE); _draw_stat(1,19,&EXTRA_LIFE_IMAGE); _draw_stat(1,20,&INVINCIBILITY_IMAGE); _draw_stat(1,21,&CONFUSE_IMAGE); _draw_stat(1,22,&ZOMBIE_IMAGE); _draw_stat(1,23,&BROKEN_BRICK_IMAGE); #else _draw_stat(3,7,&ROCKET_IMAGE); _draw_stat(3,8,&FREEZE_IMAGE); _draw_stat(3,9,&SUPER_IMAGE); _draw_stat(3,10,&EXTRA_LIFE_IMAGE); _draw_stat(3,11,&INVINCIBILITY_IMAGE); _draw_stat(3,12,&CONFUSE_IMAGE); _draw_stat(3,13,&ZOMBIE_IMAGE); _draw_stat(3,14,&BROKEN_BRICK_IMAGE); #endif #endif #endif _XL_PRINTD(4,3,5, 1234U); _XL_PRINTD(4,5,5,56789U); // PRINT(4,7,"abcdefghijklmnopqrstuvwxyz,./|-"); // PRINT(4,9,"ABCDEFGHIJKLMNOPQRSTUVWXYZ;+{}="); while(1){}; } #endif int main(void) { _XL_INIT_GRAPHICS(); _XL_INIT_INPUT(); _XL_INIT_SOUND(); highScore = 0; while(1) { INIT_IMAGES(); #if !defined(NO_INITIAL_SCREEN) initialScreen(); _XL_REFRESH(); #else printPressKeyToStart(); #endif // _XL_WAIT_FOR_INPUT(); // _XL_CLEAR_SCREEN(); #if !defined(LESS_TEXT) // highScoreScreen(); _XL_REFRESH(); _XL_WAIT_FOR_INPUT(); _XL_CLEAR_SCREEN(); #else highScoreScreen(); // _XL_REFRESH(); _XL_WAIT_FOR_INPUT(); // _XL_CLEAR_SCREEN(); #endif #if !defined(TINY_GAME) extraLifeThroughPointsCounter = 1; #endif points = 0; level = INITIAL_LEVEL; lives = LIVES_NUMBER; ghostCount = GHOSTS_NUMBER; #if defined(FULL_GAME) #if defined(DEBUG_ITEMS_IN_GAME) bases_in_completed_levels = 99; all_skulls_killed_in_completed_levels = 99; #else bases_in_completed_levels = 0; all_skulls_killed_in_completed_levels = 0; #endif #endif do // Level (Re-)Start { #if defined(FULL_GAME) isBossLevel = bossLevel(); isRocketLevel = rocketLevel(); isOneMissileLevel = oneMissileLevel(); isMissileLevel = missileLevel(); ishorizWallsLevel = horizWallsLevel(); #endif #if !defined(TINY_GAME) || defined(_XL_TURN_BASED) loop = 0; #endif #if !defined(TINY_GAME) playerFire = 0; #endif #if defined(FULL_GAME) ghostLevel = 0; bases = 0; invincibilityActive = 1; invincibility_count_down = INITIAL_INVINCIBILITY_COUNT_DOWN; #if !defined(INITIAL_GHOST_FREEZE) freezeActive = 0; freeze_count_down = 0; #endif confuseActive = 0; zombieActive = 0; handle_special_triggers(); #if !defined(SIMPLE_STRATEGY) computeStrategy(); #endif #endif #if !defined(TINY_GAME) skullActive = 0; guns = 0; resetItems(); #if defined(INITIAL_GHOST_FREEZE) freezeActive = 1; freeze_count_down = INITIAL_FROZEN_COUNT_DOWN; #endif skullXCountDown = SKULL_COUNT_DOWN; skullYCountDown = SKULL_COUNT_DOWN; #if !defined(FULL_GAME) skullSlowDown = INITIAL_GHOST_SLOWDOWN; #endif #endif #if !defined(FULL_GAME) #if !defined(TINY_GAME) ghostSlowDown = INITIAL_GHOST_SLOWDOWN-(uint16_t)level*256; #else ghostSlowDown = INITIAL_GHOST_SLOWDOWN; #endif #else levelSlowDown = INITIAL_GHOST_SLOWDOWN-(uint16_t)level*256; ghostSlowDown = computeGhostSlowDown(); #endif _XL_CLEAR_SCREEN(); #if !defined(LESS_TEXT) // Clear the screen, put cursor in upper left corner printLevel(); _XL_SLEEP(1); // _XL_CLEAR_SCREEN(); #endif #if defined(FULL_GAME) arrowRange = computeArrowRange(); if(isBossLevel) { printKillTheSkull(); _XL_SLEEP(1); _XL_WAIT_FOR_INPUT(); } _XL_CLEAR_SCREEN(); updateInnerWallVerticalData(); #endif printPressKeyToStart(); _XL_REFRESH(); #if !defined(TINY_GAME) _XL_WAIT_FOR_INPUT(); #endif #if !defined(TINY_GAME) _XL_CLEAR_SCREEN(); #endif fillLevelWithCharacters(); #if !defined(TINY_GAME) constructItems(); #if !defined(NO_STATS) displayStatsTitles(); #endif #endif displayScore(); #if !defined(NO_STATS) printLevelStats(); printLivesStats(); #endif // #if !defined(TINY_GAME) #if !defined(NO_STATS) printGunsStats(); #endif printGhostCountStats(); #endif #if defined(DEBUG_ITEMS) DO_DEBUG_ITEMS(); #else #if defined(FULL_GAME) #if !defined(BENCHMARK) while(player._status && ((ghostCount>0 && !isBossLevel) || (skull._status && isBossLevel))) // while alive && there are still ghosts #else Ticks = clock(); while(benchmark_count0 && isBossLevel) || (skull._status && isBossLevel))) // while alive && there are still ghosts #endif #else while(player._status && (ghostCount>0) ) #endif { #if defined(BENCHMARK) ++benchmark_count; #endif #if defined(DEBUG_END) //gameCompleted(); #endif #if !defined(_XL_TURN_BASED) MOVE_PLAYER(); _DRAW_PLAYER(); #endif #if defined(FULL_GAME) handle_rockets(); handle_missiles(); #endif #if !defined(TINY_GAME) if(points>(extraLifeThroughPointsCounter*EXTRA_LIFE_THROUGH_POINTS)) { ++extraLifeThroughPointsCounter; _XL_PING_SOUND(); ++lives; printLivesStats(); } #endif #if !defined(FULL_GAME) if(ghostSlowDown) { --ghostSlowDown; } #endif #if !defined(TINY_GAME) handle_bullet(); #endif #if !defined(TINY_GAME) if(!freezeActive) { #if defined(FULL_GAME) if(confuseActive && skullActive && skull._status) { chasedByGhosts=&skull; } else { chasedByGhosts=&player; } chaseCharacter(chasedByGhosts); #if BOMBS_NUMBER==4 if(isBossLevel && ghostCount<=2) { #if defined(SIMPLE_STRATEGY) moveTowardCharacter(chasedByGhosts, &bombs[loop&3]); #else moveTowardCharacter(chasedByGhosts, &bombs[loop&3], (uint8_t) (1+(uint8_t)(loop&3))<<1); #endif } #endif ++ghostLevel; #else chaseCharacter(); #endif } else // Frozen ghosts must be redisplayed anyway { // Display ghosts for(ind=0;ind>4) + (uint8_t) (loop/HORIZONTAL_WALLS_INCREASE_LOOP); DRAW_HORIZONTAL_WALLS(horizWallsLength); } } #else SKIP_BOMB_DRAW { displayBombs(); } #endif #if defined(_XL_TURN_BASED) #if !defined(EVEN_LOOP_MOVE) if((loop0 _XL_SLOW_DOWN(_XL_SLOW_DOWN_FACTOR); #endif _XL_REFRESH(); }; // end inner while [while (player._alive && ghostCount>0), i.e., exit on death or end of level] #if defined(BENCHMARK) TicksDelta = clock() - Ticks; Sec = (uint16_t) (TicksDelta / CLOCKS_PER_SEC); Milli = ((TicksDelta % CLOCKS_PER_SEC) * 1000) / CLOCKS_PER_SEC; printf ("\nTime used: %u.%03u secs = %u ticks\n", Sec, Milli, (uint16_t) TicksDelta); getchar(); #endif if(player._status) // if level finished { #if defined(FULL_GAME) _DRAW_PLAYER(); _XL_SLEEP(1); #endif #if defined(BETWEEN_LEVEL) chasedEnemyPtr = &player; SHOW_DOWN(); #endif #if defined(FULL_GAME) #if !defined(LESS_TEXT) printVictoryMessage(); // #else // _XL_SLEEP(2); // _XL_CLEAR_SCREEN(); #endif points+= LEVEL_BONUS; displayScore(); _XL_SLEEP(1); // _XL_WAIT_FOR_INPUT(); #endif ghostCount = GHOSTS_NUMBER; #if defined(FULL_GAME) if(isBossLevel) { all_skulls_killed_in_completed_levels = 1; bases_in_completed_levels/=2; } else { if(!skull._status) { ++all_skulls_killed_in_completed_levels; } bases_in_completed_levels+=bases; } #endif #if !defined(TINY_GAME) ++level; #endif } else // if dead { #if defined(FULL_GAME) && (defined(END_SCREEN) || defined(DANCE)) for(bulletDirection=0;bulletDirection<30;++bulletDirection) { for(ind=0;ind0) { player._status = 1; } } #if defined(BETWEEN_LEVEL) spiral(chasedEnemyPtr); _XL_SLEEP(2); #endif #endif } while (player._status && (level<(FINAL_LEVEL+1))); // lives left and not completed game game // _XL_SLEEP(2); if(level==FINAL_LEVEL+1) // if completed game { // _XL_WAIT_FOR_INPUT(); #if !defined(NO_GAME_COMPLETED) gameCompleted(); #endif #if !defined(NO_SLEEP) _XL_SLEEP(2); #else _XL_WAIT_FOR_INPUT(); #endif } // GAME OVER _XL_CLEAR_SCREEN(); #if !defined(TINY_GAME) displayScore(); printGameOver(); _XL_WAIT_FOR_INPUT(); #endif if(points>highScore) { highScore = points; } } // while(1) -> restart from the beginning return EXIT_SUCCESS; } ================================================ FILE: src/games/chase/split_files/move_player.c ================================================ #include "settings.h" #include "move_player.h" #include "character.h" #include "skull.h" #include "definitions.h" extern Character player; #if !defined(TINY_GAME) extern uint8_t skullXCountDown; extern uint8_t skullYCountDown; extern uint8_t playerFire; extern Character bullet; extern uint8_t guns; extern uint8_t playerDirection; #endif #if defined(FULL_GAME) extern uint8_t player_invincibility; // extern uint8_t playerBlink; #endif #if !defined(TINY_GAME) #define _DO_MOVE_UP \ deletePlayer(&player); \ --player._y; \ SHOW_UP(); \ skullYCountDown = SKULL_COUNT_DOWN; \ playerDirection = UP; #define _DO_MOVE_DOWN \ deletePlayer(&player); \ ++player._y; \ SHOW_DOWN(); \ skullYCountDown = SKULL_COUNT_DOWN; \ playerDirection = DOWN; #define _DO_MOVE_LEFT \ deletePlayer(&player); \ --player._x; \ SHOW_LEFT(); \ skullXCountDown = SKULL_COUNT_DOWN; \ playerDirection = LEFT; #define _DO_MOVE_RIGHT \ deletePlayer(&player); \ ++player._x; \ SHOW_RIGHT(); \ skullXCountDown = SKULL_COUNT_DOWN; \ playerDirection = RIGHT; #else #define _DO_MOVE_UP \ deletePlayer(&player); \ --player._y; \ SHOW_UP(); #define _DO_MOVE_DOWN \ deletePlayer(&player); \ ++player._y; \ SHOW_DOWN(); #define _DO_MOVE_LEFT \ deletePlayer(&player); \ --player._x; \ SHOW_LEFT(); #define _DO_MOVE_RIGHT \ deletePlayer(&player); \ ++player._x; \ SHOW_RIGHT(); #endif #if defined(__NO_PRINT) void MOVE_PLAYER(void) { } #else void MOVE_PLAYER(void) { uint8_t input = _XL_INPUT(); if(_XL_UP(input)) { _DO_MOVE_UP } else if(_XL_DOWN(input)) { _DO_MOVE_DOWN } else if(_XL_LEFT(input)) { _DO_MOVE_LEFT } else if(_XL_RIGHT(input)) { _DO_MOVE_RIGHT } #if !defined(TINY_GAME) else if(_XL_FIRE(input) && guns>0 && !bullet._status) { playerFire = 1; } #endif } #endif ================================================ FILE: src/games/chase/split_files/rocket.c ================================================ #include "settings.h" #if defined(FULL_GAME) #include "character.h" #include "level.h" #include "cross_lib.h" extern Character rockets[ROCKETS_NUMBER]; extern uint8_t ghostCount; extern uint8_t isRocketLevel; extern uint8_t isBossLevel; void handle_rockets(void) { if((ghostCount<=MAX_GHOST_COUNT_FOR_ROCKETS && isRocketLevel) || isBossLevel) { uint8_t i; for(i=0;i=SKULL_LOOP_TRIGGER) #define NON_BOSS_TRIGGER_REACHED (INACTIVITY_COUNT_DOWN_REACHED || GHOST_COUNT_TRIGGER_REACHED) #define SKULL_RAND_CONDITION (_XL_RAND()>skullSlowDown) void handle_skull(void) { if(!skullActive) { #if defined(FULL_GAME) if(((!isBossLevel && NON_BOSS_TRIGGER_REACHED) || (isBossLevel && BOSS_LOOP_TRIGGER_REACHED))) #else if(NON_BOSS_TRIGGER_REACHED) #endif { skullActive = 1; } else { --skullXCountDown; --skullYCountDown; } } else { #if defined(FULL_GAME) skullSlowDown = computeSkullSlowDown(); #else --skullSlowDown; #endif if(SKULL_RAND_CONDITION) { // _XL_TOCK_SOUND(); #if defined(FULL_GAME) if(!confuseActive || !(loop&3)) { #if !defined(SIMPLE_STRATEGY) moveTowardCharacter(&player, &skull, 4); #else moveTowardCharacter(&player, &skull); #endif } #else moveTowardCharacter(&skull); #endif } #if defined(FULL_GAME) else { displayCharacter(&skull); } #endif #if defined(FULL_GAME) if (playerKilledBy(&skull)) #else if(areCharctersAtSamePosition(&skull, &player)) #endif { playerDies(); } } } #endif ================================================ FILE: src/games/chase/split_files/strategy.c ================================================ /* --------------------------------------------------------------------------------------- */ // // CROSS CHASE by Fabrizio Caruso // // Fabrizio_Caruso@hotmail.com // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from // the use of this software. // Permission is granted to anyone to use this software for non-commercial applications, // subject to the following restrictions: // 1. The origin of this software must not be misrepresented; you must not // claim that you wrote the original software. If you use this software in // a product, an acknowledgment in the product documentation would be // appreciated but is not required. // 2. Altered source versions must be plainly marked as such, and must not // be misrepresented as being the original software. // 3. This notice may not be removed or altered from any source distribution. /* --------------------------------------------------------------------------------------- */ #include "settings.h" #include "character.h" #include "strategy.h" #include "cross_lib.h" extern uint8_t level; #if !defined(TINY_GAME) || defined(_XL_TURN_BASED) extern uint16_t loop; #endif extern uint8_t ghostCount; extern Character player; extern Character ghosts[GHOSTS_NUMBER]; extern uint8_t strategyArray[GHOSTS_NUMBER]; extern uint16_t ghostSlowDown; #if defined(FULL_GAME) extern uint8_t zombieActive; #endif uint8_t moveCharacter(register uint8_t *hunterOffsetPtr, register uint8_t *preyOffsetPtr) { if((uint8_t) *((uint8_t *)hunterOffsetPtr) < (uint8_t) *((uint8_t *)preyOffsetPtr)) { ++(*((uint8_t *) hunterOffsetPtr)); } else if((uint8_t) *((uint8_t *) hunterOffsetPtr) > (uint8_t) *((uint8_t *)preyOffsetPtr)) { --(*((uint8_t *) hunterOffsetPtr)); } else { return 0; } return 1; } #if defined(FULL_GAME) && !defined(SIMPLE_STRATEGY) uint8_t chaseXStrategy(Character* hunterPtr, Character* preyPtr) { // deleteGhost(hunterPtr); uint8_t x = hunterPtr->_x; // uint8_t y = hunterPtr->_y; if(moveCharacter((uint8_t *)hunterPtr + X_MOVE, (uint8_t *)preyPtr + X_MOVE)) { _XL_DELETE(x,hunterPtr->_y); return 1; } else { uint8_t y = hunterPtr->_y; if(moveCharacter((uint8_t *)hunterPtr + Y_MOVE, (uint8_t *)preyPtr + Y_MOVE)) { _XL_DELETE(x,y); return 1; } } return 0; } uint8_t chaseYStrategy(Character* hunterPtr, Character* preyPtr) { // deleteGhost(hunterPtr); uint8_t y = hunterPtr->_y; if(moveCharacter((uint8_t *)hunterPtr + Y_MOVE, (uint8_t *)preyPtr + Y_MOVE)) { _XL_DELETE(hunterPtr->_x,y); return 1; } else { uint8_t x = hunterPtr->_x; if(moveCharacter((uint8_t *)hunterPtr + X_MOVE, (uint8_t *)preyPtr + X_MOVE)) { _XL_DELETE(x,y); return 1; } } return 0; } #endif // strategy: // 4 means do no prefer horizontal to vertical movement // 0 means always horizontal // 9 means always vertical #if defined(FULL_GAME) && !defined(SIMPLE_STRATEGY) uint8_t moveTowardCharacter(Character* preyPtr, Character *hunterPtr, uint8_t strategy) { if((_XL_RAND()&7) > strategy) // Select blind chase strategy { // 0 - 4 if(chaseXStrategy(hunterPtr, preyPtr)) { displayGhost(hunterPtr); } return 1; } else { // 5 - 9 if(chaseYStrategy(hunterPtr, preyPtr)) { displayGhost(hunterPtr); return 1; } } return 0; } #elif defined(FULL_GAME) && defined(SIMPLE_STRATEGY) uint8_t moveTowardCharacter(Character* preyPtr, Character *hunterPtr) { uint8_t offset = (uint8_t) _XL_RAND()&1; uint8_t x = hunterPtr->_x; uint8_t y = hunterPtr->_y; if(moveCharacter((uint8_t *)hunterPtr + offset, (uint8_t *)preyPtr + offset)) { _XL_DELETE(x,y); displayGhost(hunterPtr); return 1; } return 0; } #elif !defined(TINY_GAME) uint8_t moveTowardCharacter(Character *hunterPtr) { uint8_t offset = (uint8_t) _XL_RAND()&1; uint8_t x = hunterPtr->_x; uint8_t y = hunterPtr->_y; if(moveCharacter((uint8_t *)hunterPtr + offset, (uint8_t *)(&player) + offset)) { _XL_DELETE(x,y); displayGhost(hunterPtr); return 1; } return 0; } #else void moveTowardCharacter(Character *hunterPtr) { uint8_t offset = (uint8_t) _XL_RAND()&1; deleteGhost(hunterPtr) moveCharacter((uint8_t *)hunterPtr + offset,(uint8_t *)(&player) + offset); // return 1; // } // return 0; } #endif // #if !defined(TINY_GAME) #if defined(FULL_GAME) && !defined(SIMPLE_STRATEGY) void computeStrategy(void) { uint8_t i; uint8_t skew = level / 8; for(i=5; ighostSlowDown) // #if defined(FULL_GAME) // Ghosts move to new positions if they get their chanche #if defined(FULL_GAME) void chaseCharacter(Character *preyPtr) #else void chaseCharacter(void) #endif { uint8_t i; _XL_WAIT_VSYNC(); #if defined(DEBUG_GHOST_DISPLAY) SET_DEBUG_BORDER(); #endif for(i=0;i' #define _TILE_15 7 // '<' // Rocket #define _TILE_16 25 // ('^') #define _TILE_12 214 // 'I' #define _TILE_13 172 // '-' #endif // _AQUARIUS_CHAR_TILES_H ================================================ FILE: src/games/chase/tiles/ASCII/char_tiles.h ================================================ /* --------------------------------------------------------------------------------------- */ // // CROSS CHASE by Fabrizio Caruso // // Fabrizio_Caruso@hotmail.com // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from // the use of this software. // Permission is granted to anyone to use this software for non-commercial applications, // subject to the following restrictions: // 1. The origin of this software must not be misrepresented; you must not // claim that you wrote the original software. If you use this software in // a product, an acknowledgment in the product documentation would be // appreciated but is not required. // 2. Altered source versions must be plainly marked as such, and must not // be misrepresented as being the original software. // 3. This notice may not be removed or altered from any source distribution. /* --------------------------------------------------------------------------------------- */ #ifndef _CHAR_TILES_H #define _CHAR_TILES_H #if defined(__TARGET_SPECIFIC_ASCII) && defined(__AQUARIUS__) && !defined(__QUAD_MEMORY_MAPPED_GRAPHICS) && !defined(__DUAL_MEMORY_MAPPED_GRAPHICS) #include "aquarius/aquarius_char_tiles.h" #else #if !defined(_TILE_19) #if !defined(__CIDELSA__) #define _TILE_19 '*' #else #define _TILE_19 'H' #endif #endif #if !defined(_TILE_20) #if !defined(__CIDELSA__) #define _TILE_20 '*' #else #define _TILE_20 'H' #endif #endif #if !defined(_TILE_21) #if !defined(__CIDELSA__) #define _TILE_21 '*' #else #define _TILE_21 'H' #endif #endif #if !defined(_TILE_22) #if !defined(__CIDELSA__) #define _TILE_22 '*' #else #define _TILE_22 'H' #endif #endif #if !defined(_TILE_23) #if !defined(__CIDELSA__) #define _TILE_23 '*' #else #define _TILE_23 'H' #endif #endif #if !defined(_TILE_24) #if !defined(__CIDELSA__) #define _TILE_24 'W' #else #define _TILE_24 'W' #endif #endif #if !defined(_TILE_1) #if !defined(__CIDELSA__) #define _TILE_1 '*' #else #define _TILE_1 'H' #endif #endif #if !defined(_TILE_3) #if !defined(__CIDELSA__) #define _TILE_3 '*' #else #define _TILE_3 'H' #endif #endif #if !defined(_TILE_2) #if !defined(__CIDELSA__) #define _TILE_2 '*' #else #define _TILE_2 'H' #endif #endif #if !defined(_TILE_0) #if !defined(__CIDELSA__) #define _TILE_0 '*' #else #define _TILE_0 'H' #endif #endif // RED #if !defined(_TILE_5) #if defined(__ZX81__) || defined(__ZX80__) #define _TILE_5 'x' #else #define _TILE_5 'X' #endif #endif // WHITE #if !defined(_TILE_4) #if defined(__LCC1802__) || defined(__SV8000__) || defined(__CIDELSA__) || defined(__MC10__) #define _TILE_4 'O' #else #define _TILE_4 'o' #endif #endif #if !defined(_TILE_6) #if defined(__ALPHATRO__) #define _TILE_6 'm' #elif defined(__CIDELSA__) #define _TILE_6 'M' #else #define _TILE_6 '#' #endif #endif // BLUE #if !defined(_TILE_9) #if defined(__ZX80__) || defined(__CIDELSA__) #define _TILE_9 'G' #else #define _TILE_9 '!' #endif #endif // YELLOW #if !defined(_TILE_7) #if !defined(__CIDELSA__) #define _TILE_7 '+' #elif defined(__ZX81__) || defined(__ZX80__) #define _TILE_7 'a' #else #define _TILE_7 'A' #endif #endif #if !defined(_TILE_25) #define _TILE_25 '$' #endif // GREEN #if !defined(_TILE_8) #if defined(__ZX81__) || defined(__ZX80__) #define _TILE_8 's' #else #define _TILE_8 'S' #endif #endif #if !defined(_TILE_17) #if defined(__ZX81__) || defined(__ZX80__) #define _TILE_17 'f' #else #define _TILE_17 'F' #endif #endif #if !defined(_TILE_18) #if defined(__ZX81__) || defined(__ZX80__) #define _TILE_18 'h' #else #define _TILE_18 'H' #endif #endif // CYAN #if !defined(_TILE_10) #if defined(__ZX81__) || defined(__ZX80__) #define _TILE_10 'v' #else #define _TILE_10 'V' #endif #endif #if !defined(_TILE_11) #if defined(__CIDELSA__) #define _TILE_11 'O' #else #define _TILE_11 '.' #endif #endif #if !defined(_TILE_14) #define _TILE_14 '>' #endif #if !defined(_TILE_15) #define _TILE_15 '<' #endif #if !defined(_TILE_16) #if defined(__ZX80__) || defined(__ZX81__) #define _TILE_16 'i' #elif defined(__CIDELSA__) || defined(__MC10__) #define _TILE_16 'I' #else #define _TILE_16 ('^') #endif #endif #if !defined(_TILE_12) #if defined(__C128_Z80__) || defined(__GAL__) || defined(__VZ__) || defined(__COCO__) || defined(__DRAGON__) #define _TILE_12 'i' #elif defined(__APPLE2__) || defined(__ATARI_LYNX__) || defined(__ABC80__) || defined(__OSIC1P__) || defined(__TMC600__) \ || defined(__MIKRO80__) || defined(__BIC__) || defined(__SUPER80__) || defined(__CIDELSA__) \ || defined(__ZX80__) || defined(__ZX81__) || defined(__MC10__) #define _TILE_12 'I' #else #define _TILE_12 ('|') #endif #endif #if !defined(_TILE_13) #if defined(__CIDELSA__) #define _TILE_13 'I' #else #define _TILE_13 '-' #endif #endif #if !defined(_TILE_26) #if defined(__C128_Z80__) || defined(__GAL__) || defined(__VZ__) || defined(__COCO__) || defined(__DRAGON__) #define _TILE_26 't' #else #define _TILE_26 'T' #endif #endif #endif #endif // _CHAR_TILES_H ================================================ FILE: src/games/chase/variables.h ================================================ #ifndef _VARIABLES_H #define _VARIABLES_H #if defined(BENCHMARK) #if !defined(BENCHMARK_MAX) #define BENCHMARK_MAX 70 #endif clock_t Ticks, TicksDelta; unsigned int Sec; unsigned int Milli; uint16_t benchmark_count; #endif #if !defined(TINY_GAME) || defined(_XL_TURN_BASED) #if defined(USE_MEMORY_BUFFERS) || defined(USE_LIGHT_MEMORY_BUFFERS) || (defined(USE_TINY_MEMORY_BUFFERS) && defined(_XL_TURN_BASED)) extern uint16_t loop; #else uint16_t loop; #endif #endif // #if defined(FULL_GAME) && !defined(NO_BLINKING) // #if defined(USE_MEMORY_BUFFERS) // extern uint8_t playerBlink; // #else // uint8_t playerBlink; // #endif // #endif #if defined(FULL_GAME) #if defined(USE_MEMORY_BUFFERS) extern uint16_t ghostLevel; #else uint16_t ghostLevel; #endif #endif #if !defined(TINY_GAME) #if defined(USE_MEMORY_BUFFERS) || defined(USE_LIGHT_MEMORY_BUFFERS) extern uint16_t skullSlowDown; extern uint8_t skullXCountDown; extern uint8_t skullYCountDown; extern uint8_t bulletDirection; #else uint16_t skullSlowDown; uint8_t skullXCountDown; uint8_t skullYCountDown; uint8_t bulletDirection; #endif #endif #if !defined(TINY_GAME) extern Image SKULL_IMAGE; extern Image POWERUP_IMAGE; extern Image BULLET_IMAGE; extern Image GUN_IMAGE; extern Image EXTRA_POINTS_IMAGE; extern Image DEAD_GHOST_IMAGE; #endif #if !defined(TINY_GAME) #if defined(USE_MEMORY_BUFFERS) || defined(USE_LIGHT_MEMORY_BUFFERS) extern Character skull; extern Character bullet; extern Item powerUp; extern Item gun; extern Item extraPoints; #else Character skull; Item powerUp; Item gun; Item extraPoints; Character bullet; #endif #endif #if defined(USE_MEMORY_BUFFERS) || defined(USE_TINY_MEMORY_BUFFERS) || defined(USE_LIGHT_MEMORY_BUFFERS) extern Character ghosts[]; extern Character bombs[]; extern Character player; extern uint16_t ghostSlowDown; extern uint16_t points; extern uint16_t highScore; extern uint8_t lives; extern uint8_t level; extern uint8_t ghostCount; // = GHOSTS_NUMBER; extern uint8_t ind; #else Character ghosts[GHOSTS_NUMBER]; Character bombs[BOMBS_NUMBER]; Character player; uint16_t ghostSlowDown; uint16_t points; uint16_t highScore; uint8_t lives; uint8_t level; uint8_t ghostCount; // = GHOSTS_NUMBER; uint8_t ind; #endif #if defined(FULL_GAME) #if defined(USE_MEMORY_BUFFERS) extern Item powerUp2; extern Item freeze; extern Item invincibility; extern Item extraLife; extern Item super; extern Item confuse; extern Item zombie; extern Item chase; extern Character leftHorizontalMissile; extern Character rightHorizontalMissile; extern Character chasingBullet; extern Character * chasedEnemyPtr; extern Character * chasedByGhosts; extern uint8_t rockets_x[]; extern uint8_t extraLife_present_on_level; extern uint8_t super_present_on_level; extern uint8_t zombie_present_on_level; extern uint8_t bases; extern uint8_t arrowRange; extern uint8_t all_skulls_killed_in_completed_levels; extern uint8_t bases_in_completed_levels; extern uint8_t horizWallsLength; extern uint8_t invincibilityActive; extern uint8_t confuseActive; extern uint8_t zombieActive; extern uint8_t verticalWallY; extern uint8_t verticalWallX; extern uint8_t verticalWallLength; #else Item powerUp2; Item freeze; Item invincibility; Item extraLife; Item super; Item confuse; Item zombie; Item chase; Character leftHorizontalMissile; Character rightHorizontalMissile; Character chasingBullet; Character * chasedEnemyPtr; Character * chasedByGhosts; uint8_t rockets_x[ROCKETS_NUMBER]; uint8_t extraLife_present_on_level; uint8_t super_present_on_level; uint8_t zombie_present_on_level; uint8_t bases; uint8_t arrowRange; uint8_t all_skulls_killed_in_completed_levels; uint8_t bases_in_completed_levels; uint8_t horizWallsLength; uint8_t invincibilityActive; uint8_t confuseActive; uint8_t zombieActive; uint8_t verticalWallY; uint8_t verticalWallX; uint8_t verticalWallLength; #endif #define chase_present_on_level_condition all_skulls_killed_in_completed_levels #define confuse_present_on_level_condition bases_in_completed_levels #if defined(USE_MEMORY_BUFFERS) extern Character rockets[]; extern uint8_t invincibility_count_down; extern uint8_t confuse_count_down; extern uint8_t zombie_count_down; #else Character rockets[ROCKETS_NUMBER]; uint8_t invincibility_count_down; uint8_t confuse_count_down; uint8_t zombie_count_down; #endif #endif #if defined(FULL_GAME) && !defined(SIMPLE_STRATEGY) #if defined(USE_MEMORY_BUFFERS) extern uint8_t strategyArray[GHOSTS_NUMBER]; #else uint8_t strategyArray[GHOSTS_NUMBER]; #endif #endif #if !defined(TINY_GAME) #if defined(USE_MEMORY_BUFFERS) || defined(USE_LIGHT_MEMORY_BUFFERS) extern uint8_t freeze_count_down; extern uint8_t playerDirection; // 0: right, 1: down, 2: left, 3: up extern uint8_t freezeActive; // freezeActive extern uint8_t extraLifeThroughPointsCounter; #else uint8_t freeze_count_down; uint8_t playerDirection; // 0: right, 1: down, 2: left, 3: up uint8_t freezeActive; // freezeActive uint8_t extraLifeThroughPointsCounter; #endif #endif #if !defined(TINY_GAME) #if defined(USE_MEMORY_BUFFERS) || defined(USE_LIGHT_MEMORY_BUFFERS) extern uint8_t playerFire; extern uint8_t guns; extern uint8_t skullActive; #else uint8_t playerFire; uint8_t guns; uint8_t skullActive; #endif #endif #if defined(FULL_GAME) #if defined(USE_MEMORY_BUFFERS) extern uint8_t arrowYPosition; #else uint8_t arrowYPosition; #endif #endif #if defined(FULL_GAME) uint8_t isBossLevel; uint8_t isOneMissileLevel; uint8_t isMissileLevel; uint8_t isRocketLevel; uint8_t ishorizWallsLevel; uint16_t levelSlowDown; #endif #endif // _VARIABLES_H ================================================ FILE: src/games/horde/Makefile.horde ================================================ FULL_FILES ?= \ $(BASIC_CROSS_LIB_FILES) \ $(CROSS_LIB_PATH)/sleep/sleep_macros.c \ $(SOURCE_PATH)/main.c GAME_NAME := horde PARENT_DIR = games include ./$(PARENT_DIR)/$(GAME_NAME)/config/project_config.mk include ./$(PARENT_DIR)/$(GAME_NAME)/config/game_config.mk include ./Makefile_common include ./$(PARENT_DIR)/$(GAME_NAME)/makefiles/Makefile.override include ./makefiles.common/auxiliary/Makefile_default_values ================================================ FILE: src/games/horde/config/game_config.mk ================================================ # COCO_COLOR_GFX_GAME_OPTS ?= -DMAX_ARROWS_ON_SCREEN=7 -DFASTER_WALL_REDRAW -DNUMBER_OF_MISSILES=3 CREATIVISION_GAME_OPTS ?= -DNUMBER_OF_MISSILES=2 -DMAX_ARROWS_ON_SCREEN=7 -DNO_BOTTOM_WALL_REDRAW GAMATE_GAME_OPTS ?= -DNUMBER_OF_MISSILES=1 -DMAX_ARROWS_ON_SCREEN=9 -DNO_BOTTOM_WALL_REDRAW -DNO_EXTRA_TITLE C128_Z80_80COL_GAME_OPTS ?= -DMAX_ARROWS_ON_SCREEN=6 -DNUMBER_OF_MISSILES=2 -DSMALL_WALL -DNO_BOTTOM_WALL_REDRAW -DBULLETS_NUMBER=3 ZX81_NO_GFX_GAME_OPTS ?= -DMAX_ARROWS_ON_SCREEN=7 -DNUMBER_OF_MISSILES=4 -DMISSILE_DROP_LOOP_MASK=1 -DSMALL_WALL ZX81_GFX_GAME_OPTS ?= -DMAX_ARROWS_ON_SCREEN=6 -DNUMBER_OF_MISSILES=2 -DMISSILE_DROP_LOOP_MASK=7 -DSMALL_WALL -DNO_BOTTOM_WALL_REDRAW APPLE2_GAME_OPTS ?= -DMAX_ARROWS_ON_SCREEN=7 -DNUMBER_OF_MISSILES=3 COMX_GAME_OPTS ?= -DMAX_ARROWS_ON_SCREEN=6 -DNUMBER_OF_MISSILES=3 -DMISSILE_DROP_LOOP_MASK=1 -DSMALL_WALL -DNO_BOTTOM_WALL_REDRAW -DNORMAL_ZOMBIE_SPEED=1 -DSLOW_ZOMBIE_SPEED=7 PECOM_GAME_OPTS ?= -DMAX_ARROWS_ON_SCREEN=6 -DNUMBER_OF_MISSILES=3 -DSMALL_WALL -DNO_BOTTOM_WALL_REDRAW -DNORMAL_ZOMBIE_SPEED=1 -DSLOW_ZOMBIE_SPEED=7 TMC600_GAME_OPTS ?= -DMAX_ARROWS_ON_SCREEN=6 -DNUMBER_OF_MISSILES=4 -DSMALL_WALL -DNO_BOTTOM_WALL_REDRAW -DNORMAL_ZOMBIE_SPEED=1 -DSLOW_ZOMBIE_SPEED=7 CAMPUTERS_LYNX_GAME_OPTS ?= -DMAX_ARROWS_ON_SCREEN=6 -DNUMBER_OF_MISSILES=3 PV1000_GAME_OPTS ?= -DMAX_ARROWS_ON_SCREEN=6 -DNUMBER_OF_MISSILES=3 -DMISSILE_DROP_LOOP_MASK=1 -DSMALL_WALL -DNO_BOTTOM_WALL_REDRAW -DNORMAL_ZOMBIE_SPEED=1 -DSLOW_ZOMBIE_SPEED=7 ================================================ FILE: src/games/horde/config/project_config.mk ================================================ # ATARI_COLORS=-D__USE_GREEN # ATARI5200_COLORS=-D__USE_GREEN ##################################################################### # SLOWDOWN VALUES # Common factor _COMMON_SLOWDOWN_FACTOR=10 # CC65 _AGAT_SLOWDOWN=70 _APPLE2_SLOWDOWN=30 _APPLE2ENH_SLOWDOWN=30 _APPLE2_HGR_SLOWDOWN=50 _APPLE2ENH_HGR_SLOWDOWN=50 _ATARI_SLOWDOWN=100 _ATARI5200_SLOWDOWN=100 _ATARI7800_SLOWDOWN=130 _ATARI_LYNX_SLOWDOWN=400 _C128_8502_80COL_SLOWDOWN=50 _C16_SLOWDOWN=55 _C16_CONIO_SLOWDOWN=85 _C64_SLOWDOWN=45 _CX16_SLOWDOWN?=100 _CBM610_SLOWDOWN=150 _CBM510_SLOWDOWN=80 _CREATIVISION_SLOWDOWN=100 _GAMATE_SLOWDOWN=120 _ORIC_SLOWDOWN=40 _MEGA65_SLOWDOWN=550 _NES_SLOWDOWN=190 _PET_SLOWDOWN=80 _PCE_SLOWDOWN=550 _SUPERVISION_SLOWDOWN=140 _VIC20_SLOWDOWN=100 # Z88DK _ABC80_SLOWDOWN=70 _AGON_SLOWDOWN=950 _AQUARIUS_SLOWDOWN=105 _ACE_SLOWDOWN=100 _BEE_SLOWDOWN=25 _C128_Z80_40COL_SLOWDOWN=20 _C128_Z80_80COL_SLOWDOWN=1 _CAMPUTERS_LYNX_SLOWDOWN=10 _COLECO_SLOWDOWN=100 _CPC_MODE0_SLOWDOWN=100 _CPC_CPCRSLIB_MODE1_SLOWDOWN=90 _CPC_MODE2_SLOWDOWN=90 _CPM_Z80_SLOWDOWN=90 _CPM_INTEL8080_SLOWDOWN=80 _E200_SLOWDOWN=600 _G850_SLOWDOWN=320 _G815_SLOWDOWN=200 _GAL_SLOWDOWN=1000 _GAL_GFX_SLOWDOWN=500 _GB_SLOWDOWN=80 _GG_SLOWDOWN=300 _GB_WAIT_VSYNC_SLOWDOWN=150 _GL6000SL_SLOWDOWN=70 _HECTORHR_SLOWDOWN=35 _LASER500_SLOWDOWN=200 _M100_SLOWDOWN=100 _M5_SLOWDOWN=35 _MC1000_SLOWDOWN=75 _MSX_SLOWDOWN=35 _MSX_FIXED_COLORS_SLOWDOWN=35 _MTX500_SLOWDOWN=35 _MTX512_SLOWDOWN=35 _MZ_SLOWDOWN=200 _PHC25_SLOWDOWN=150 _PV1000_SLOWDOWN=10 _SAMCOUPE_SLOWDOWN=300 _SC3000_SLOWDOWN=55 _SMC777_SLOWDOWN=40 _SMS_SLOWDOWN=160 _SPECTRUM_SLOWDOWN=40 _TRS80_SLOWDOWN=30 _VG5K_SLOWDOWN=75 _VZ200_SLOWDOWN=250 _X07_SLOWDOWN=10 _ZX81_SLOWDOWN=3 _ZX81_WRX_SLOWDOWN=2 _ZX81_WRX128_SLOWDOWN=6 _ZX81_8X6_WRX128_SLOWDOWN=8 _ZX81_WRX64_SLOWDOWN=14 _ZX81_8X6_WRX64_SLOWDOWN=18 # CMOC _COCO_SLOWDOWN=50 _DRAGON_SLOWDOWN=50 _COCO3_SLOWDOWN=80 _COCO_NO_GFX_SLOWDOWN=4000 _DRAGON_NO_GFX_SLOWDOWN=4000 _MO5_SLOWDOWN=160 _TO7_SLOWDOWN=160 # LCC1802 _COMX_SLOWDOWN=0 _PECOM_SLOWDOWN=0 _TMC600_SLOWDOWN=0 _MICRO_SLOWDOWN=10 _CIDELSA_SLOWDOWN=2 # CC6303 _MC10_SLOWDOWN=50 # TI99 _TI99_SLOWDOWN=100 # GCC _NCURSES_SLOWDOWN=9 _TERMINAL_SLOWDOWN=4 # VBCC _BBC_SLOWDOWN=150 # ACK _MSDOS86_SLOWDOWN?=160 ================================================ FILE: src/games/horde/images.h ================================================ #ifndef _IMAGES_H #define _IMAGES_H #include "cross_lib.h" #define MINION_TILE_0 _TILE_0 #define MINION_TILE_1 _TILE_1 #define MINION_TILE_2 _TILE_2 #define MINION_TILE_3 _TILE_3 #define MINION_TILE_4 _TILE_4 #define MINION_TILE_5 _TILE_5 #define MINION_TILE_6 _TILE_6 #define ZOMBIE_DEATH_TILE _TILE_7 #define POWER_UP_TILE _TILE_8 #define LOADED_BOW_LEFT_TILE_0 _TILE_9 #define LOADED_BOW_RIGHT_TILE_0 _TILE_10 #define LOADED_BOW_LEFT_TILE_1 _TILE_11 #define LOADED_BOW_RIGHT_TILE_1 _TILE_12 #define EMPTY_BOW_LEFT_TILE_0 _TILE_13 #define EMPTY_BOW_RIGHT_TILE_0 _TILE_10 #define EMPTY_BOW_LEFT_TILE_1 _TILE_11 #define EMPTY_BOW_RIGHT_TILE_1 _TILE_16 #define ARROW_TILE_0 _TILE_17 #define ARROW_TILE_1 _TILE_18 #define BOSS_TILE_0 _TILE_19 #define BOSS_TILE_1 _TILE_20 #define BOSS_TILE_2 _TILE_2 #define BOSS_TILE_3 _TILE_21 #define BOSS_TILE_4 _TILE_4 #define BOSS_TILE_5 _TILE_22 #define BOSS_TILE_6 _TILE_6 // #define TOP_BORDER_TILE BOSS_TILE_5 #define BEAM_TILE _TILE_26 #define FREEZE_TILE _TILE_23 #define WALL_TILE _TILE_24 #define EXTRA_POINTS_TILE _TILE_25 #define HI_TILE _TILE_14 #define LV_TILE _TILE_15 #endif // _IMAGES_H ================================================ FILE: src/games/horde/main.c ================================================ /* --------------------------------------------------------------------------------------- */ // // CROSS SHOOT by Fabrizio Caruso // // Fabrizio_Caruso@hotmail.com // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from // the use of this software. // Permission is granted to anyone to use this software for non-commercial applications, // subject to the following restrictions: // 1. The origin of this software must not be misrepresented; you must not // claim that you wrote the original software. If you use this software in // a product, an acknowledgment in the product documentation would be // appreciated but is not required. // 2. Altered source versions must be plainly marked as such, and must not // be misrepresented as being the original software. // 3. This notice may not be removed or altered from any source distribution. /* --------------------------------------------------------------------------------------- */ #include "cross_lib.h" #include "images.h" // #define DEBUG 1 //#define TRAINER 1 #define INITIAL_LEVEL 0 #define LAST_LEVEL 8 #define INITIAL_LIVES 3 #define MAX_LIVES 9 #define NEXT_EXTRA_LIFE 5000U #if YSize>10 #define BOW_Y ((YSize)-3) #define POWER_UPS_Y ((BOW_Y)+2) #define BOTTOM_WALL_Y ((BOW_Y)+1) #else #define BOW_Y ((YSize)-1) // #define POWER_UPS_Y (BOW_Y) // #define BOTTOM_WALL_Y (BOW_Y) #endif #define MAX_BOW_X ((XSize)*2-3) #if YSize<=10 #define WALL_Y ((YSize)/2) #elif YSize<=16 #define WALL_Y ((YSize)-8) #else #define WALL_Y ((YSize)-6) #endif #if YSize>=16 #define INITIAL_ZOMBIE_Y (((YSize)/2)-2) #elif YSize>10 #define INITIAL_ZOMBIE_Y (((YSize)/2)-1) #else #define INITIAL_ZOMBIE_Y 2 #endif #if YSize>=18 #define INITIAL_RESPAWN_ZOMBIE_Y (INITIAL_ZOMBIE_Y)-4 #elif YSize>=16 #define INITIAL_RESPAWN_ZOMBIE_Y (INITIAL_ZOMBIE_Y)-3 #elif YSize>10 #define INITIAL_RESPAWN_ZOMBIE_Y (INITIAL_ZOMBIE_Y)-2 #else #define INITIAL_RESPAWN_ZOMBIE_Y (INITIAL_ZOMBIE_Y) #endif #define POWER_THRESHOLD 4 #if !defined(MAX_ARROWS_ON_SCREEN) #define MAX_ARROWS_ON_SCREEN 12 #endif #define AUTO_RECHARGE_COOL_DOWN 45 #define AUTO_ARROW_RECAHRGE 9 #define MAX_FREEZE 1 #define MINION_POINTS 5 #define BOSS_1_POINTS 10 #define BOSS_2_POINTS 20 #define BOSS_3_POINTS 25 #define EXTRA_POINTS 20 #define RECHARGE_POINTS 25 #define POWERUP_POINTS 30 #define FREEZE_POINTS 50 #define WALL_POINTS 80 #define ZOMBIE_ITEM_POINTS 150 #define POWER_UP_BONUS 25 #define LEVEL_BONUS 200 #define RED_FIRE_POWER_VALUE 2 #define YELLOW_FIRE_POWER_VALUE 3 #define GREEN_FIRE_POWER_VALUE 4 #define INITIAL_BOW_RELOAD_LOOPS 9 #define RED_SPEED_VALUE INITIAL_BOW_RELOAD_LOOPS #define YELLOW_SPEED_VALUE 7 #define GREEN_SPEED_VALUE 4 #define HYPER_SPEED_VALUE 3 #define RED_RANGE_VALUE INITIAL_ARROW_RANGE #define YELLOW_RANGE_VALUE ((INITIAL_ARROW_RANGE)-2) #define GREEN_RANGE_VALUE ((INITIAL_ARROW_RANGE)-4) #define INITIAL_ARROW_RANGE ((INITIAL_ZOMBIE_Y)+1) #define ITEM_SPAWN_CHANCE 11000U #define MINION_ENERGY 6 #define BOSS_ENERGY 14 #define WALL_ENERGY 20 #define MAX_ARROWS 99 #define HYPER_RECHARGE 50 #define ARROW_RECHARGE 30 #define FREEZE_COUNTER_MAX 200; #if XSize<=40 #define MAX_OCCUPIED_COLUMNS (3*(XSize)/4) #else #define MAX_OCCUPIED_COLUMNS (2*(XSize)/3) #endif #define FEW_ZOMBIES (2*(MAX_OCCUPIED_COLUMNS)/3) #if !defined(NUMBER_OF_MISSILES) #define NUMBER_OF_MISSILES 5 #endif #define NUMBER_OF_EXTRA_POINTS NUMBER_OF_MISSILES #if XSize<=80 #define MINIONS_ON_FIRST_LEVEL (XSize) #else #define MINIONS_ON_FIRST_LEVEL 80 #endif #if XSize<=80 #define BOSSES_ON_FIRST_LEVEL ((XSize)/2) #else #define BOSSES_ON_FIRST_LEVEL 40 #endif #define LEVEL_2_ZOMBIE_THRESHOLD MAX_OCCUPIED_COLUMNS #define MAX_HYPER_COUNTER 180 #if YSize>=20 #define HEIGHT_SHOOT_THRESHOLD YSize-10 #else #define HEIGHT_SHOOT_THRESHOLD YSize-11 #endif static uint8_t missile_randomness_mask; static uint8_t active_wall; static uint16_t next_threshold; static uint8_t main_loop_counter; static uint8_t forced_zombie; static uint8_t forced_zombie_x; static uint8_t hyper_counter; static uint8_t item_counter; static const uint8_t zombie_points[] = { MINION_POINTS, // Skeletons BOSS_1_POINTS, // Ogre BOSS_2_POINTS, // Ghosts BOSS_3_POINTS, // Demons }; static uint8_t minions_to_kill; static uint8_t bosses_to_kill; static uint8_t lives; static uint8_t level; static uint8_t killed_minions; static uint8_t killed_bosses; static uint8_t bosses_to_spawn; static uint8_t minions_to_spawn; static uint8_t auto_recharge_counter; #if !defined(_XL_NO_COLOR) static uint8_t arrow_display_color; #else #define arrow_display_color _DUMMY_ #endif #if !defined(_XL_NO_COLOR) && !defined(_XL_NO_TEXT_COLOR) && YSize>10 static const uint8_t power_up_color[3] = {_XL_RED, _XL_YELLOW, _XL_GREEN}; #endif #if !defined(_XL_NO_COLOR) && YSize>10 static const uint8_t arrow_color[3] = {_XL_CYAN, _XL_YELLOW, _XL_WHITE}; #endif static uint8_t freeze; static uint8_t powerUp; static uint8_t number_of_arrows_per_shot; static uint8_t zombie_y[XSize]; static uint8_t zombie_shape[XSize]; static uint8_t zombie_x; static uint8_t zombie_speed; static uint8_t zombie_active[XSize]; static uint8_t energy[XSize]; static uint8_t zombie_level[XSize]; static uint8_t fire_power; static uint8_t wall_appeared; static uint8_t freeze_locked; static uint8_t zombie_locked; #if !defined(_XL_NO_UDG) static const uint8_t zombie_tile[7+1] = { MINION_TILE_0, // 0 MINION_TILE_0, // 1 MINION_TILE_1, // 2 MINION_TILE_2, // 3 MINION_TILE_3, MINION_TILE_4, MINION_TILE_5, MINION_TILE_6 }; static const uint8_t boss_tile[7+1] = { BOSS_TILE_0, BOSS_TILE_0, BOSS_TILE_1, BOSS_TILE_2, BOSS_TILE_3, BOSS_TILE_4, BOSS_TILE_5, BOSS_TILE_6, }; #endif static const uint8_t bow_tile[8] = { EMPTY_BOW_LEFT_TILE_0, EMPTY_BOW_RIGHT_TILE_0, EMPTY_BOW_LEFT_TILE_1, EMPTY_BOW_RIGHT_TILE_1, LOADED_BOW_LEFT_TILE_0, LOADED_BOW_RIGHT_TILE_0, LOADED_BOW_LEFT_TILE_1, LOADED_BOW_RIGHT_TILE_1, }; static const uint8_t arrow_tile[2] = { ARROW_TILE_0, ARROW_TILE_1, }; static uint8_t bow_x; // range: 0..2*XSize-2^M static uint8_t bow_shape_tile; static uint8_t bow_color; static uint8_t input; static uint8_t loaded_bow; static uint8_t active_arrow[MAX_ARROWS_ON_SCREEN]; static uint8_t arrow_shape[MAX_ARROWS_ON_SCREEN]; static uint8_t arrow_x[MAX_ARROWS_ON_SCREEN]; static uint8_t arrow_y[MAX_ARROWS_ON_SCREEN]; static uint8_t remaining_arrows; static uint8_t arrow_range; static uint8_t wall[XSize]; static uint8_t bow_reload_loops; static uint8_t next_arrow; static uint8_t arrows_on_screen; static uint8_t bow_load_counter; static uint8_t alive; static uint16_t score; static uint16_t hiscore; struct ItemStruct { uint8_t _x; uint8_t _y; uint8_t _tile; #if !defined(_XL_NO_COLOR) uint8_t _color; #endif uint8_t _active; uint8_t _counter; void(*_effect)(void); } ; typedef struct ItemStruct Item; typedef struct ItemStruct Missile; static Item rechargeItem; static Item freezeItem; static Item powerUpItem; static Item wallItem; static Item zombieItem; #if !defined(NO_EXTRA_TITLE) && YSize>10 static const uint8_t item_tile[5][2] = { { POWER_UP_TILE, _XL_WHITE }, { ARROW_TILE_1, _XL_YELLOW }, { EXTRA_POINTS_TILE, _XL_GREEN }, { FREEZE_TILE, _XL_CYAN }, { WALL_TILE, _XL_YELLOW }, }; static const char item_name[5][9] = { _XL_P _XL_O _XL_W _XL_E _XL_R _XL_SPACE _XL_U _XL_P, _XL_A _XL_R _XL_R _XL_O _XL_W _XL_S, _XL_P _XL_O _XL_I _XL_N _XL_T _XL_S, _XL_F _XL_R _XL_E _XL_E _XL_Z _XL_E, _XL_W _XL_A _XL_L _XL_L, }; #endif static Missile enemyMissile[NUMBER_OF_MISSILES]; static Item extraPointsItem[NUMBER_OF_MISSILES]; void PRINT_CENTERED_ON_ROW(uint8_t row, char *Text) { _XL_PRINT(((uint8_t) (XSize - strlen(Text))>>1), row, Text); } #define PRINT_CENTERED(Text) \ PRINT_CENTERED_ON_ROW((YSize>>1), Text) void sleep_and_wait_for_input(void) { _XL_SLEEP(1); _XL_WAIT_FOR_INPUT(); } #if XSize>=22 #define POWER_UP_X 10 #elif XSize>=20 #define POWER_UP_X 9 #else #define POWER_UP_X 10 #endif void display_power_up_counter(void) { _XL_SET_TEXT_COLOR(_XL_WHITE); _XL_PRINTD(POWER_UP_X+1,0,2,powerUp); } #if XSize>=32 #define ZOMBIE_COUNTER_X (POWER_UP_X+4) void display_zombie_counter(void) { _XL_SET_TEXT_COLOR(_XL_WHITE); _XL_PRINTD(ZOMBIE_COUNTER_X+1,0,3,minions_to_kill+bosses_to_kill); } #else #define display_zombie_counter() #endif #if !defined(_XL_NO_COLOR) void display_remaining_arrows(void) { uint8_t color; if(remaining_arrows<20) { color = _XL_RED; } else { color = _XL_WHITE; } _XL_SET_TEXT_COLOR(color); _XL_PRINTD(7,0,2,remaining_arrows); } #else void display_remaining_arrows(void) { _XL_PRINTD(7,0,2,remaining_arrows); } #endif void recharge_arrows(uint8_t value) { remaining_arrows+=value; if(remaining_arrows>MAX_ARROWS) { remaining_arrows=MAX_ARROWS; } display_remaining_arrows(); } void display_score(void) { _XL_SET_TEXT_COLOR(_XL_WHITE); _XL_PRINTD(0,0,5,score); } #define LIVES_X (XSize-3) #if YSize<=10 #define display_lives(color) #elif !defined(_XL_NO_TEXT_COLOR) void display_lives(uint8_t color) { _XL_DRAW(LIVES_X,POWER_UPS_Y,bow_tile[4+0+bow_shape_tile],_XL_CYAN); _XL_DRAW(LIVES_X+1,POWER_UPS_Y,bow_tile[1+4+bow_shape_tile],_XL_CYAN); _XL_SET_TEXT_COLOR(color); _XL_PRINTD(LIVES_X+2,POWER_UPS_Y,1,lives); } #else #define display_lives(color) \ { \ _XL_DRAW(LIVES_X,POWER_UPS_Y,bow_tile[4+0+bow_shape_tile],_XL_CYAN); \ _XL_DRAW(LIVES_X+1,POWER_UPS_Y,bow_tile[1+4+bow_shape_tile],_XL_CYAN); \ _XL_PRINTD(LIVES_X+2,POWER_UPS_Y,1,lives); \ } #endif #if !defined(_XL_NO_COLOR) #define _extra_life_color_effect(color) display_lives(color) #else #define _extra_life_color_effect(color) #endif void display_bow(void) { _XL_DRAW((bow_x>>1),BOW_Y,bow_tile[4*loaded_bow+0+bow_shape_tile],bow_color); _XL_DRAW((bow_x>>1)+1,BOW_Y,bow_tile[1+4*loaded_bow+bow_shape_tile],bow_color); } #if !defined(_XL_NO_COLOR) void display_zombie(void) { uint8_t status = zombie_shape[zombie_x]; uint8_t pos = zombie_y[zombie_x]; uint8_t color; uint8_t tile0; tile0 = BOSS_TILE_0; if(zombie_level[zombie_x]==1) { color = _XL_GREEN; } else if(zombie_level[zombie_x]==2) { if(!freeze) { tile0 = ZOMBIE_DEATH_TILE; color = _XL_YELLOW; } } else if(!zombie_level[zombie_x]) { tile0 = MINION_TILE_0; color = _XL_WHITE; } else { color = _XL_RED; } if(freeze) { color = _XL_CYAN; } if(!status) { _XL_DELETE(zombie_x, zombie_y[zombie_x]-1); _XL_DRAW(zombie_x, pos, tile0, color); } else { #if !defined(_XL_NO_UDG) uint8_t tile1; if(!zombie_level[zombie_x]) { tile0 = zombie_tile[status<<1]; tile1 = zombie_tile[1+(status<<1)]; } else { tile0 = boss_tile[status<<1]; tile1 = boss_tile[1+(status<<1)]; } _XL_DRAW(zombie_x, pos, tile0, color); _XL_DRAW(zombie_x,1 + pos, tile1, color); #else // Avoid using the upper border / beam tile in ASCII mode if(!zombie_level[zombie_x]) { tile0 = MINION_TILE_0; } else { if((zombie_y[zombie_x])&1) { tile0 = BOSS_TILE_0; } else { tile0 = BOSS_TILE_1; } } _XL_DRAW(zombie_x, pos, tile0, color); #endif } } #else void display_zombie(void) { uint8_t status = zombie_shape[zombie_x]; uint8_t pos = zombie_y[zombie_x]; uint8_t tile0; tile0 = BOSS_TILE_0; if(zombie_level[zombie_x]==1) { } else if(zombie_level[zombie_x]==2) { if(!freeze) { tile0 = ZOMBIE_DEATH_TILE; } } else if(!zombie_level[zombie_x]) { tile0 = MINION_TILE_0; } else { } if(freeze) { } if(!status) { _XL_DELETE(zombie_x, zombie_y[zombie_x]-1); _XL_DRAW(zombie_x, pos, tile0, color); } else { #if !defined(_XL_NO_UDG) uint8_t tile1; if(!zombie_level[zombie_x]) { tile0 = zombie_tile[status<<1]; tile1 = zombie_tile[1+(status<<1)]; } else { tile0 = boss_tile[status<<1]; tile1 = boss_tile[1+(status<<1)]; } _XL_DRAW(zombie_x, pos, tile0, color); _XL_DRAW(zombie_x,1 + pos, tile1, color); #else // Avoid using the upper border / beam tile in ASCII mode if(!zombie_level[zombie_x]) { tile0 = MINION_TILE_0; } else { if((zombie_y[zombie_x])&1) { tile0 = BOSS_TILE_0; } else { tile0 = BOSS_TILE_1; } } _XL_DRAW(zombie_x, pos, tile0, color); #endif } } #endif #define handle_extra_life() \ do \ { \ uint8_t i; \ if(score>=next_threshold) \ { \ if(lives=32 #define SPEED_X 9 #else #define SPEED_X 8 #endif #if XSize>=32 #define POWER_X ((XSize)-10) #else #define POWER_X ((XSize)-9) #endif #endif #if XSize>=32 #define ARROWS_X POWER_X-6 #else #define ARROWS_X POWER_X-4 #endif uint8_t find_inactive(Item* itemArray) { uint8_t i; for(i=0;i6) { if(powerUp<9) { power_color = power_up_color[powerUp-6]; arrow_display_color = arrow_color[powerUp-6]; } else { power_color = _XL_GREEN; arrow_display_color = _XL_WHITE; } } } } _XL_SET_TEXT_COLOR(range_color); _XL_PRINT(RANGE_X,POWER_UPS_Y,RANGE_STRING); _XL_SET_TEXT_COLOR(speed_color); _XL_PRINT(SPEED_X,POWER_UPS_Y,SPEED_STRING); _XL_SET_TEXT_COLOR(power_color); _XL_PRINT(POWER_X,POWER_UPS_Y,POWER_STRING); for(i=0;i<3;++i) { if(i<=number_of_arrows_per_shot-1) { color = arrow_display_color; } else { color = _XL_RED; } _XL_DRAW(ARROWS_X+i,POWER_UPS_Y,ARROW_TILE_0,color); } } #elif !defined(_XL_NO_COLOR) // COLOR but NO TEXT COLOR void display_power_ups(void) { uint8_t range_value; uint8_t speed_value; uint8_t power_value; uint8_t color; uint8_t i; arrow_display_color = _XL_CYAN; speed_value = 1; power_value = 1; if(powerUp<3) // range { range_value = powerUp+1; } else { range_value = 3; if(powerUp<5) // speed { speed_value = powerUp+1-2; } else { speed_value = 3; if(powerUp>6) { if(powerUp<9) { power_value = powerUp+1-6; arrow_display_color = arrow_color[powerUp-6]; } else { power_value = 3; arrow_display_color = _XL_WHITE; } } } } _XL_PRINT(RANGE_X,POWER_UPS_Y,RANGE_STRING); _XL_PRINTD(RANGE_X+STR_LEN,POWER_UPS_Y,1,range_value); _XL_PRINT(SPEED_X,POWER_UPS_Y,SPEED_STRING); _XL_PRINTD(SPEED_X+STR_LEN,POWER_UPS_Y,1,speed_value); _XL_PRINT(POWER_X,POWER_UPS_Y,POWER_STRING); _XL_PRINTD(POWER_X+STR_LEN,POWER_UPS_Y,1,power_value); for(i=0;i<3;++i) { if(i<=number_of_arrows_per_shot-1) { color = arrow_display_color; } else { color = _XL_RED; } _XL_DRAW(ARROWS_X+i,POWER_UPS_Y,ARROW_TILE_0,color); } } #else // NO COLOR and NO TEXT COLOR void display_power_ups(void) { uint8_t range_value; uint8_t speed_value; uint8_t power_value; uint8_t i; speed_value = 1; power_value = 1; if(powerUp<3) // range { range_value = powerUp+1; } else { range_value = 3; if(powerUp<5) // speed { speed_value = powerUp+1-2; } else { speed_value = 3; if(powerUp>6) { if(powerUp<9) { power_value = powerUp+1-6; } else { power_value = 3; } } } } _XL_PRINT(RANGE_X,POWER_UPS_Y,RANGE_STRING); _XL_PRINTD(RANGE_X+STR_LEN,POWER_UPS_Y,1,range_value); _XL_PRINT(SPEED_X,POWER_UPS_Y,SPEED_STRING); _XL_PRINTD(SPEED_X+STR_LEN,POWER_UPS_Y,1,speed_value); _XL_PRINT(POWER_X,POWER_UPS_Y,POWER_STRING); _XL_PRINTD(POWER_X+STR_LEN,POWER_UPS_Y,1,power_value); for(i=0;i10 #define activate_hyper() \ { \ _XL_ZAP_SOUND(); \ bow_reload_loops=HYPER_SPEED_VALUE; \ recharge_arrows(HYPER_RECHARGE); \ hyper_counter = MAX_HYPER_COUNTER; \ bow_color = _XL_RED; \ _XL_SET_TEXT_COLOR(_XL_RED); \ PRINT_CENTERED_ON_ROW(1," HYPER "); \ } #else #define activate_hyper() \ { \ _XL_ZAP_SOUND(); \ bow_reload_loops=HYPER_SPEED_VALUE; \ recharge_arrows(HYPER_RECHARGE); \ hyper_counter = MAX_HYPER_COUNTER; \ bow_color = _XL_RED; \ } #endif void power_up_effect(void) { uint8_t pmod10; ++powerUp; pmod10 = powerUp%10; switch(pmod10) { case 0: activate_hyper(); #if !defined(_XL_NO_COLOR) powerUpItem._color = _XL_WHITE; #endif break; case 4: #if !defined(_XL_NO_COLOR) powerUpItem._color = _XL_CYAN; #endif break; case 5: freeze_locked=0; #if !defined(_XL_NO_COLOR) powerUpItem._color = _XL_WHITE; #endif break; case 9: #if !defined(_XL_NO_COLOR) powerUpItem._color = _XL_RED; #endif break; } display_power_up_counter(); increase_score(POWERUP_POINTS); switch(powerUp) { #if !defined(TRAINER) case 1: arrow_range=YELLOW_RANGE_VALUE; break; case 2: arrow_range=GREEN_RANGE_VALUE; break; case 3: bow_reload_loops=YELLOW_SPEED_VALUE; break; case 4: bow_reload_loops=GREEN_SPEED_VALUE; break; case 5: number_of_arrows_per_shot = 2; break; case 6: number_of_arrows_per_shot = 3; break; case 7: fire_power = YELLOW_FIRE_POWER_VALUE; break; case 8: fire_power = GREEN_FIRE_POWER_VALUE; #if !defined(_XL_NO_COLOR) powerUpItem._color = _XL_YELLOW; #endif break; #endif case 19: #if !defined(_XL_NO_COLOR) powerUpItem._color = _XL_GREEN; #endif break; case 20: zombie_locked = 0; break; default: break; } display_power_ups(); } void extra_points_effect(void) { increase_score(EXTRA_POINTS); } void wall_effect(void) { uint8_t i; increase_score(WALL_POINTS); #if defined(SMALL_WALL) for(i=7*(XSize)/16;i<1+7*(XSize)/16+(XSize)/8;++i) #else for(i=3*(XSize)/8;i<1+3*(XSize)/8+(XSize)/4;++i) #endif { if(zombie_y[i]>1)+2,BOW_Y); \ } \ display_bow(); \ } #define move_right() \ { \ bow_shape_tile = 2*((++bow_x)&1); \ if(!bow_shape_tile) \ { \ _XL_DELETE((bow_x>>1)-1,BOW_Y); \ } \ display_bow(); \ } void drop_item(register Item *item, uint8_t max_counter) { uint8_t offset; offset = zombie_y[zombie_x]+1; _XL_TICK_SOUND(); item->_active = 1; item->_x = zombie_x; if(zombie_shape[zombie_x]) { ++offset; } item->_y = offset; item->_counter=max_counter; } void handle_item(register Item* item) { if(item->_active) { // TODO: Necessary for GCC for TI99 uint8_t item_tile = item->_tile; if(item->_y_x,item->_y); if(main_loop_counter&1) { ++(item->_y); } #if !defined(_XL_NO_COLOR) // TODO: GCC for TI99 does not display the correct tile with item->_tile _XL_DRAW(item->_x,item->_y,item_tile,item->_color); #else _XL_DRAW(item->_x,item->_y,item_tile,0); #endif } else { if(item->_counter&1) { _XL_DELETE(item->_x,item->_y); } else { #if !defined(_XL_NO_COLOR) _XL_DRAW(item->_x,item->_y,item_tile,item->_color); #else _XL_DRAW(item->_x,item->_y,item_tile,0); #endif } if(item->_x==(bow_x>>1)+(bow_x&1)) { item->_effect(); _XL_PING_SOUND(); item->_active=0; } display_bow(); --(item->_counter); if(!(item->_counter)) { item->_active=0; } } } } #define handle_items() \ { \ uint8_t i; \ \ handle_item(&rechargeItem); \ handle_item(&freezeItem); \ handle_item(&powerUpItem); \ handle_item(&wallItem); \ handle_item(&zombieItem); \ \ for(i=0;i>1); #endif } void spawn_minion(void) { activate_zombie(); zombie_level[zombie_x]=0; energy[zombie_x]=MINION_ENERGY; --minions_to_spawn; } void spawn_boss(void) { uint8_t rank; do { if(!level) // 0 { rank = 1; } else if(level==1) // 1 { rank = (uint8_t) (1 + ((_XL_RAND())&1)); } else if(level<5) // 2, 3, 4 { rank = (uint8_t) (1 + ((_XL_RAND())%3)); } else // 5, 6, 7, 8 { rank = (uint8_t) (2 + ((_XL_RAND())&1)); } } while((rank==2)&&(bosses_to_kill=32 #define NORMAL_ZOMBIE_SPEED 1 #define SLOW_ZOMBIE_SPEED 7 #else #define NORMAL_ZOMBIE_SPEED 3 #define SLOW_ZOMBIE_SPEED 7 #endif #endif void update_zombie_speed(void) { if(minions_to_kill + bosses_to_kill<=FEW_ZOMBIES) { zombie_speed=SLOW_ZOMBIE_SPEED; } else { zombie_speed=NORMAL_ZOMBIE_SPEED; } } void display_wall(uint8_t y) { uint8_t i; for(i=0; i=4)&&(powerUp<=3)) { item_counter&=1; } if(!item_counter) { if(!rechargeItem._active) { drop_item(&rechargeItem,45); } } else if(item_counter==1) { if(!powerUpItem._active) { drop_item(&powerUpItem,35); } } else if((!freeze_locked)&&(!freeze)) { if(!freezeItem._active) { drop_item(&freezeItem,45); } } else if(!wall_appeared&&(powerUp>=9)) { if(!wallItem._active) { drop_item(&wallItem,35); } } else if(!zombie_locked && !zombieItem._active) { drop_item(&zombieItem,50); } else { uint8_t index; index = find_inactive(extraPointsItem); if(index!=NUMBER_OF_EXTRA_POINTS) { drop_item(&extraPointsItem[index],90); } } } } void respawn(void) { if(minions_to_spawn || bosses_to_spawn) { if (minions_to_spawn) { spawn_minion(); } else { spawn_boss(); } display_zombie(); } update_zombie_speed(); } void zombie_dies(void) { uint8_t y_pos = zombie_y[zombie_x]; uint8_t i; // _XL_DELETE(zombie_x,y_pos-1); // _XL_DELETE(zombie_x,y_pos); _XL_DELETE(zombie_x,y_pos+1); _XL_DRAW(zombie_x,y_pos, ZOMBIE_DEATH_TILE, _XL_RED); for(i=0;i<17;++i) { _XL_DRAW(zombie_x,y_pos, ZOMBIE_DEATH_TILE, _XL_RED); display_red_zombie(); } _XL_SHOOT_SOUND(); _XL_DELETE(zombie_x,y_pos); #if defined(NO_BOTTOM_WALL_REDRAW) #elif YSize>10 display_wall(BOTTOM_WALL_Y); #endif display_bow(); if(zombie_level[zombie_x]) { ++killed_bosses; --bosses_to_kill; } else { ++killed_minions; --minions_to_kill; } if(zombie_x==forced_zombie_x) { forced_zombie = 0; } if(y_pos=(arrow_range)) { #if !defined(_XL_NO_COLOR) _XL_DRAW(arrow_x[i],arrow_y[i],arrow_shape[i],arrow_display_color); #else _XL_DRAW(arrow_x[i],arrow_y[i],arrow_shape[i],0); #endif } } } } } #define decrease_energy() \ do \ { \ if(energy[zombie_x]<=fire_power) \ { \ energy[zombie_x]=0; \ } \ else \ { \ energy[zombie_x]-=fire_power; \ } \ } while(0) #if defined(SMALL_WALL) #define redraw_wall() \ do \ { \ uint8_t i; \ \ for(i=7*(XSize)/16;i<1+7*(XSize)/16+(XSize)/8;++i) \ { \ if(wall[i]) \ { \ _XL_DRAW(i,WALL_Y,WALL_TILE,_XL_YELLOW); \ } \ } \ } while(0) #else #define redraw_wall() \ do \ { \ uint8_t i; \ \ for(i=3*(XSize)/8;i<1+3*(XSize)/8+(XSize)/4;++i) \ { \ if(wall[i]) \ { \ _XL_DRAW(i,WALL_Y,WALL_TILE,_XL_YELLOW); \ } \ } \ } while(0) #endif void push_zombie(void) { if(!zombie_shape[zombie_x]) { --zombie_y[zombie_x]; zombie_shape[zombie_x]=3; } else { --zombie_shape[zombie_x]; _XL_DELETE(zombie_x,zombie_y[zombie_x]+1); } } /* uint8_t zombie_hit(void) { uint8_t i; for(i=0;i=arrow_y[i]-1 && zombie_y[zombie_x]<=arrow_y[i]+1) { if(freeze || (zombie_level[zombie_x]!=2) || zombie_shape[zombie_x]) { active_arrow[i]=0; --arrows_on_screen; _XL_DELETE(arrow_x[i],arrow_y[i]); return 1; } else // Arrows goes through ghost !free (non-frozen) && zombie_level==2 (i.e., ghost zombie) && !zombie_shape (i.e. invincible shape) { display_zombie(); // display invincible ghost zombie return 0; // two arrows cannot be at the same place } } } return 0; } void handle_zombie_collisions(void) { for(zombie_x=0;zombie_x=arrow_y[i]-1 && zombie_y[zombie_x]<= arrow_y[i]+1) { if(not_stealth()) { --arrows_on_screen; _XL_DELETE(arrow_x[i],arrow_y[i]); active_arrow[i]=0; decrease_energy(); if(energy[zombie_x]) { display_red_zombie(); _XL_SLOW_DOWN(_XL_SLOW_DOWN_FACTOR); _XL_TOCK_SOUND(); push_zombie(); display_zombie(); #if defined(_XL_NO_UDG) _XL_DELETE(zombie_x,zombie_y[zombie_x]+1); #endif } else { zombie_dies(); increase_score(zombie_points[zombie_level[zombie_x]]); respawn(); } } else { display_zombie(); } } } } } } #define _move_zombie() \ { \ ++zombie_shape[zombie_x]; \ (zombie_shape[zombie_x])&=3; \ if(!zombie_shape[zombie_x]) \ { \ ++zombie_y[zombie_x]; \ } \ } #if !defined(MISSILE_DROP_LOOP_MASK) #define MISSILE_DROP_LOOP_MASK (1) #endif #if !defined(NO_NASTY_DROP) #define handle_missile_drops() \ { \ if((level>=2)&& !freeze) \ { \ uint8_t missile_index; \ if((missile_index = find_inactive(enemyMissile)) < NUMBER_OF_MISSILES) \ { \ if(!(main_loop_counter&missile_randomness_mask)) \ { \ zombie_x = (bow_x>>1)+(bow_x&1); \ } \ else \ { \ zombie_x = (uint8_t) (_XL_RAND())%XSize; \ } \ if((zombie_level[zombie_x]>2) && zombie_active[zombie_x] && zombie_y[zombie_x]=2)&& !freeze) \ { \ uint8_t missile_index; \ if((missile_index = find_inactive(enemyMissile)) < NUMBER_OF_MISSILES) \ { \ zombie_x = (uint8_t) (_XL_RAND())%XSize; \ if((zombie_level[zombie_x]>2) && zombie_active[zombie_x] && zombie_y[zombie_x]>1)+(bow_x&1); for(i=0;i=4) { new_arrow_x-=4; } else { continue; } } if(new_arrow_xhiscore) \ { \ hiscore=score; \ } \ score = 0; \ level = INITIAL_LEVEL; \ killed_bosses = 0; \ killed_minions = 0; \ lives = INITIAL_LIVES; \ next_threshold = NEXT_EXTRA_LIFE; \ } while(0) #if defined(TRAINER) #define level_initialization() \ do \ { \ fire_power = GREEN_FIRE_POWER_VALUE; \ active_wall = 0; \ freeze = 0; \ powerUp = 8; \ next_arrow = 0; \ arrows_on_screen = 0; \ bow_load_counter = 0; \ wall_appeared = 0; \ freeze_locked = 1; \ zombie_locked = 1; \ forced_zombie = 0; \ loaded_bow = 1; \ alive = 1; \ bow_reload_loops = GREEN_SPEED_VALUE; \ auto_recharge_counter = AUTO_RECHARGE_COOL_DOWN; \ remaining_arrows = MAX_ARROWS; \ arrow_range = GREEN_RANGE_VALUE; \ bow_x = XSize; \ bow_shape_tile = 2*((bow_x)&1); \ bow_color = _XL_CYAN; \ number_of_arrows_per_shot = 3; \ initialize_items(); \ hyper_counter = 0; \ missile_randomness_mask = 255; \ _XL_CLEAR_SCREEN(); \ } while(0) #else #define level_initialization() \ do \ { \ fire_power = RED_FIRE_POWER_VALUE; \ freeze = 0; \ powerUp = 0; \ next_arrow = 0; \ arrows_on_screen = 0; \ bow_load_counter = 0; \ wall_appeared = 0; \ hyper_counter = 0; \ forced_zombie = 0; \ freeze_locked = 1; \ zombie_locked = 1; \ loaded_bow = 1; \ alive = 1; \ missile_randomness_mask = (uint8_t) (255U>>(level-1)); \ bow_reload_loops = RED_SPEED_VALUE; \ auto_recharge_counter = AUTO_RECHARGE_COOL_DOWN; \ remaining_arrows = MAX_ARROWS; \ arrow_range = RED_RANGE_VALUE; \ bow_x = XSize; \ bow_shape_tile = (uint8_t) 2*((bow_x)&1); \ bow_color = _XL_CYAN; \ number_of_arrows_per_shot = 1; \ initialize_items(); \ _XL_CLEAR_SCREEN(); \ } while(0) #endif void initialize_zombie_at_level_restart(void) { zombie_y[zombie_x]=INITIAL_ZOMBIE_Y; ++main_loop_counter; display_zombie(); _XL_TOCK_SOUND(); } #define reset_wall_and_zombies() \ do \ { \ for(zombie_x=0;zombie_x=21 #define CONTROLS_STRING "USE CURSORS AND SPACE" #define CONTROLS_LEN 21 #elif XSize>=19 #define CONTROLS_STRING "USE CURSORS AND SPC" #define CONTROLS_LEN 19 #else #define CONTROLS_STRING "CURSORS AND SPC" #define CONTROLS_LEN 15 #endif #else #define CONTROLS_STRING "USE JOYSTICK" #define CONTROLS_LEN 12 #endif #endif #if YSize<=23 #define CONTROLS_Y YSize-2 #else #define CONTROLS_Y YSize-3 #endif #if !defined(NO_EXTRA_TITLE) #if !defined(NO_CONTROL_INSTRUCTIONS) && YSize>=15 #define control_instructions() PRINT_CENTERED_ON_ROW(CONTROLS_Y,\ CONTROLS_STRING) #else #define control_instructions() #endif #define display_items() \ do \ { \ uint8_t i; \ \ for(i=0;i<5;++i) \ { \ _XL_DRAW(XSize/2-5,YSize/3+3+_NEXT_ROW, item_tile[i][0], item_tile[i][1]); \ _XL_SET_TEXT_COLOR(_XL_GREEN); \ _XL_PRINT(XSize/2-5+3,YSize/3+3+_NEXT_ROW, (char *)item_name[i]); \ } \ control_instructions(); \ } while(0) #else #define display_items() #endif #if YSize<=22 #define _HISCORE_Y 1 #else #define _HISCORE_Y 2 #endif #define _HORDE_STRING "HORDE" #if YSize>10 #define display_initial_screen() \ { \ _XL_CLEAR_SCREEN(); \ \ display_wall(0); \ display_wall(BOTTOM_WALL_Y+1); \ \ _XL_SET_TEXT_COLOR(_XL_CYAN); \ PRINT_CENTERED_ON_ROW(_HISCORE_Y, "HISCORE"); \ \ _XL_SET_TEXT_COLOR(_XL_WHITE); \ _XL_PRINTD(XSize/2-3,_HISCORE_Y+1,5,hiscore); \ \ _XL_SET_TEXT_COLOR(_XL_RED); \ PRINT_CENTERED_ON_ROW(YSize/3-2,_HORDE_STRING); \ \ _XL_SET_TEXT_COLOR(_XL_WHITE); \ PRINT_CENTERED_ON_ROW(YSize/3, "FABRIZIO CARUSO"); \ \ display_items(); \ sleep_and_wait_for_input(); \ _XL_CLEAR_SCREEN(); \ } #else #define display_initial_screen() \ { \ _XL_CLEAR_SCREEN(); \ \ _XL_SET_TEXT_COLOR(_XL_CYAN); \ PRINT_CENTERED_ON_ROW(_HISCORE_Y, "HISCORE"); \ \ _XL_SET_TEXT_COLOR(_XL_WHITE); \ _XL_PRINTD(XSize/2-3,_HISCORE_Y+1,5,hiscore); \ \ _XL_SET_TEXT_COLOR(_XL_RED); \ PRINT_CENTERED_ON_ROW(YSize/3-2,_HORDE_STRING); \ \ _XL_SET_TEXT_COLOR(_XL_WHITE); \ PRINT_CENTERED_ON_ROW(YSize/3, "FABRIZIO CARUSO"); \ \ sleep_and_wait_for_input(); \ _XL_CLEAR_SCREEN(); \ } #endif #if XSize>=23 #define HI_X ((XSize-9)) #define HISCORE_STRING _XL_H _XL_I #else #define HI_X ((XSize-8)) #define HISCORE_STRING _XL_H #endif #if XSize>=32 #define draw_zombie_counter_tile() _XL_DRAW(ZOMBIE_COUNTER_X,0,MINION_TILE_0, _XL_WHITE) #else #define draw_zombie_counter_tile() #endif #if XSize>=20 #define display_stats() \ do \ { \ _XL_SET_TEXT_COLOR(_XL_WHITE); \ display_score(); \ _XL_DRAW(HI_X,0,HI_TILE, _XL_GREEN); \ _XL_SET_TEXT_COLOR(_XL_WHITE); \ _XL_PRINTD(HI_X+1,0,5, hiscore); \ _XL_DRAW(6,0,ARROW_TILE_1,_XL_CYAN); \ _XL_DRAW(POWER_UP_X,0,POWER_UP_TILE, _XL_WHITE); \ draw_zombie_counter_tile(); \ display_remaining_arrows(); \ display_power_up_counter(); \ display_level(); \ display_lives(_XL_WHITE); \ display_power_ups(); \ display_zombie_counter(); \ } while(0) #else #define display_stats() \ do \ { \ _XL_SET_TEXT_COLOR(_XL_WHITE); \ display_score(); \ _XL_DRAW(6,0,ARROW_TILE_1,_XL_CYAN); \ _XL_DRAW(POWER_UP_X,0,POWER_UP_TILE, _XL_WHITE); \ draw_zombie_counter_tile(); \ display_remaining_arrows(); \ display_power_up_counter(); \ display_level(); \ display_lives(_XL_WHITE); \ display_power_ups(); \ display_zombie_counter(); \ } while(0) #endif #if YSize>10 void clear_top_border(void) { PRINT_CENTERED_ON_ROW(1," "); display_zombies(); } #else #define clear_top_border() #endif #define handle_auto_recharge() \ do \ { \ if(!remaining_arrows) \ { \ if(auto_recharge_counter) \ { \ --auto_recharge_counter; \ } \ else \ { \ recharge_arrows(AUTO_ARROW_RECAHRGE); \ auto_recharge_counter=AUTO_RECHARGE_COOL_DOWN; \ _XL_PING_SOUND(); \ } \ } \ } while(0) #define display_level_at_start_up() \ do \ { \ _XL_SET_TEXT_COLOR(_XL_YELLOW); \ if(level==LAST_LEVEL) \ { \ _XL_PRINT(XSize/2-4, YSize/2, "F I N A L"); \ } \ _XL_SLEEP(1); \ _XL_SET_TEXT_COLOR(_XL_CYAN); \ _XL_PRINT(XSize/2-4, YSize/2, "LEVEL " ); \ _XL_PRINTD(XSize/2+2,YSize/2,1,level+1); \ sleep_and_wait_for_input(); \ _XL_PRINT(XSize/2-4, YSize/2,_XL_SPACE _XL_SPACE _XL_SPACE _XL_SPACE _XL_SPACE _XL_SPACE _XL_SPACE _XL_SPACE); \ } while(0) #define handle_zombie_movement() \ if(!freeze) \ { \ if(!(main_loop_counter&zombie_speed)) \ { \ move_zombies(); \ } \ } \ else \ { \ --freeze; \ } void display_cleared(void) { _XL_SET_TEXT_COLOR(_XL_CYAN); PRINT_CENTERED(_XL_C _XL_SPACE _XL_L _XL_SPACE _XL_E _XL_SPACE _XL_A _XL_SPACE _XL_R _XL_SPACE _XL_E _XL_SPACE _XL_D); } #define handle_next_level() \ do \ { \ ++level; \ display_cleared(); \ sleep_and_wait_for_input(); \ _XL_TOCK_SOUND(); \ increase_score(LEVEL_BONUS); \ if(powerUp) \ { \ do \ { \ --powerUp; \ increase_score(POWER_UP_BONUS); \ display_power_up_counter(); \ _XL_TICK_SOUND(); \ _XL_SLOW_DOWN(_XL_SLOW_DOWN_FACTOR*4); \ } while(powerUp); \ } \ \ sleep_and_wait_for_input(); \ killed_bosses = 0; \ killed_minions = 0; \ } while(0) #define player_dies() \ do \ { \ --lives; \ bow_color=_XL_RED; \ display_bow(); \ bow_color=_XL_CYAN; \ _XL_EXPLOSION_SOUND(); \ sleep_and_wait_for_input(); \ } while(0) void zombie_animation(void) { zombie_y[zombie_x]=YSize/2-7+(uint8_t) ((_XL_RAND())&15); zombie_level[zombie_x]=0; display_zombie(); _XL_SLOW_DOWN(_XL_SLOW_DOWN_FACTOR); zombie_dies(); display_cleared(); } #define victory() \ do \ { \ uint8_t i; \ \ minions_to_kill = XSize*2; \ display_zombie_counter(); \ for(i=0;i10 #define display_level_screen() \ do \ { \ display_wall(BOTTOM_WALL_Y); \ display_bow(); \ display_stats(); \ display_level_at_start_up(); \ } while(0) #else #define display_level_screen() #endif #define handle_hyper() \ { \ if(hyper_counter) \ { \ --hyper_counter; \ \ if(hyper_counter==1) \ { \ bow_color = _XL_CYAN; \ bow_reload_loops=GREEN_SPEED_VALUE; \ clear_top_border(); \ } \ } \ } #if defined(FASTER_WALL_REDRAW) #define handle_wall() \ do \ { \ if(!(main_loop_counter&3)) \ { \ if(active_wall) \ { \ redraw_wall(); \ } \ } \ } while(0) #else #define handle_wall() \ if(active_wall) \ { \ redraw_wall(); \ } #endif int main(void) { _XL_INIT_GRAPHICS(); _XL_INIT_INPUT() _XL_INIT_SOUND(); hiscore = 0; while(1) // Game (re-)start { global_initialization(); display_initial_screen(); while(lives && level<=LAST_LEVEL) // Level (re)-start { level_initialization(); zombie_initialization(); display_level_screen(); while(alive && (minions_to_kill || bosses_to_kill) ) // Inner game loop { handle_hyper(); handle_bow_move(); handle_bow_load(); handle_arrows(); handle_wall(); handle_auto_recharge(); handle_zombie_movement(); handle_zombie_collisions(); handle_missile_drops(); handle_items(); _XL_SLOW_DOWN(_XL_SLOW_DOWN_FACTOR); ++main_loop_counter; } if(alive) { handle_next_level(); } else { player_dies(); } } if(lives) { victory(); } game_over(); } return EXIT_SUCCESS; } ================================================ FILE: src/games/horde/makefiles/Makefile.override ================================================ c16_16k: $(ASSETS_PATH)/cc65_udc_arcade_64_chars.s $(CC65_PATH)$(MYCC65) $(INCLUDE_OPTS) -Or -Cl -t c16 \ --config $(CFG_PATH)/cc65/c16-16k_GFX_64chars.cfg \ -D__NO_SCREEN_COLOR_INIT \ \ \ -D__ALT_PRINT \ \ -D__MEMORY_MAPPED_GRAPHICS \ -D__KERNAL_CLEAR_SCREEN \ -D__ALT_SLEEP \ -D_XL_SLOW_DOWN_FACTOR=800 \ -D__UDG_BASE_FACTOR=15 \ $(CROSS_LIB_PATH)/display/init_graphics/cc65/c264/c16_linked_redefined_chars_init_graphics.c \ $(CROSS_LIB_PATH)/sound/cc65/c264/c264_sounds.c \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c \ $(FULL_FILES) \ $(ASSETS_PATH)/cc65_udc_arcade_64_chars.s \ -o $(BUILD_PATH)/X$(GAME_NAME)_$@.prg creativision: $(ASSETS_PATH)/8x8_chars.h $(CC65_PATH)$(MYCC65) $(INCLUDE_OPTS) -Or -Cl -t creativision \ -D__NO_SCREEN_COLOR_INIT -D__CREATIVISION__ -DNUMBER_OF_MISSILES=2 -DMAX_ARROWS_ON_SCREEN=7 -DNO_BOTTOM_WALL_REDRAW \ -D__ALT_SLEEP -D__VDP_MODE1_GRAPHICS -DXSize=26 -DX_OFFSET=3 \ -D_XL_SLOW_DOWN_FACTOR=1800 \ --config $(CFG_PATH)/cc65/creativision-16k_less_stack.cfg \ $(CROSS_LIB_PATH)/sound/cc65/creativision/creativision_sounds.c \ $(FULL_FILES) \ $(CROSS_LIB_PATH)/display/init_graphics/cc65/creativision/creativision_color_init_graphics.c \ -o $(BUILD_PATH)/X$(GAME_NAME)_creativision_16k.bin dd if=$(BUILD_PATH)/X$(GAME_NAME)_creativision_16k.bin bs=8k skip=1 > $(BUILD_PATH)/X$(GAME_NAME)_creativision_16k_SWAPPED.bin dd if=$(BUILD_PATH)/X$(GAME_NAME)_creativision_16k.bin bs=8k count=1 >> $(BUILD_PATH)/X$(GAME_NAME)_creativision_16k_SWAPPED.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_creativision_16k.bin ================================================ FILE: src/games/horde/shapes/6x8/shape25.txt ================================================ ...... ...... ...... ..##.. .##.#. ####.# .##.#. ..##.. ================================================ FILE: src/games/horde/shapes/6x8/shape26.txt ================================================ ...... ...#.. ..#... ...#.. ..#... ...#.. ..#... ...... ================================================ FILE: src/games/horde/shapes/6x9/shape25.txt ================================================ ...... ...... ...... ...... ..##.. .##.#. ####.# .##.#. ..##.. ================================================ FILE: src/games/horde/shapes/6x9/shape26.txt ================================================ ...... ...#.. ..#... ...#.. ..#... ...#.. ..#... ...... ...... ================================================ FILE: src/games/horde/shapes/7x8/shape25.txt ================================================ ....... ....... ....... ...##.. ..##.#. .####.# ..##.#. ...##.. ================================================ FILE: src/games/horde/shapes/7x8/shape26.txt ================================================ ....... ....#.. ...#... ....#.. ...#... ....#.. ...#... ....... ================================================ FILE: src/games/horde/shapes/8x6/shape0.txt ================================================ ...##... ...##... .##..##. #.####.# ..#..#.. ..#..#.. ================================================ FILE: src/games/horde/shapes/8x6/shape1.txt ================================================ ........ ...##... ...##... .##..### #.####.. ..#..#.. ================================================ FILE: src/games/horde/shapes/8x6/shape10.txt ================================================ ........ ........ ###..... .#.#.... #..#.... ........ ================================================ FILE: src/games/horde/shapes/8x6/shape11.txt ================================================ ........ ........ .....### ....#.#. ....#..# ........ ================================================ FILE: src/games/horde/shapes/8x6/shape12.txt ================================================ ..#..... ..#..... #######. ..#..#.# #####..# .#.#.... ================================================ FILE: src/games/horde/shapes/8x6/shape13.txt ================================================ ........ ........ .####### #.#..... #..##### ........ ================================================ FILE: src/games/horde/shapes/8x6/shape14.txt ================================================ ..#.#.#. ..#.#.#. ..###.#. ..#.#.#. ..#.#.#. ........ ================================================ FILE: src/games/horde/shapes/8x6/shape15.txt ================================================ .#..#.#. .#..#.#. .#..#.#. .#..#.#. .##..#.. ........ ================================================ FILE: src/games/horde/shapes/8x6/shape16.txt ================================================ ........ ........ #######. .....#.# #####..# ........ ================================================ FILE: src/games/horde/shapes/8x6/shape17.txt ================================================ ......#. ......#. ......#. ......#. ......#. .....#.# ================================================ FILE: src/games/horde/shapes/8x6/shape18.txt ================================================ ..#..... ..#..... ..#..... ..#..... ..#..... .#.#.... ================================================ FILE: src/games/horde/shapes/8x6/shape19.txt ================================================ ..####.. ...##... .##..##. #.####.# ..#..#.. ..#..#.. ================================================ FILE: src/games/horde/shapes/8x6/shape2.txt ================================================ ..#..#.. ........ ........ ........ ........ ........ ================================================ FILE: src/games/horde/shapes/8x6/shape20.txt ================================================ ........ ..####.. ...##... .##..### #.####.. ..#..#.. ================================================ FILE: src/games/horde/shapes/8x6/shape21.txt ================================================ ........ ........ ........ ..####.. ...##... .##..##. ================================================ FILE: src/games/horde/shapes/8x6/shape22.txt ================================================ ........ ........ ........ ........ ..####.. ...##... ================================================ FILE: src/games/horde/shapes/8x6/shape23.txt ================================================ ........ ..#.#.#. ...###.. .###.### ...###.. ..#.#.#. ================================================ FILE: src/games/horde/shapes/8x6/shape24.txt ================================================ ####.... ######## #....#.# ######## #.#....# ######## ================================================ FILE: src/games/horde/shapes/8x6/shape25.txt ================================================ ........ ...#.... ..#.#... .###.#.. ..#.#... ...#.... ================================================ FILE: src/games/horde/shapes/8x6/shape26.txt ================================================ ........ ...#.... ....#... ...#.... ....#... ...#.... ================================================ FILE: src/games/horde/shapes/8x6/shape3.txt ================================================ ........ ........ ........ ...##... ...##... .##..##. ================================================ FILE: src/games/horde/shapes/8x6/shape4.txt ================================================ #.####.# ..#..#.. ..#..#.. ........ ........ ........ ================================================ FILE: src/games/horde/shapes/8x6/shape5.txt ================================================ ........ ........ ........ ........ ...##... ...##... ================================================ FILE: src/games/horde/shapes/8x6/shape6.txt ================================================ ###..##. ..####.# ..#..#.. ..#..#.. ........ ........ ================================================ FILE: src/games/horde/shapes/8x6/shape7.txt ================================================ ...##... ........ .##..##. #......# ..#..#.. ..#..#.. ================================================ FILE: src/games/horde/shapes/8x6/shape8.txt ================================================ ..####.. .##..##. ##....## ##....## .##..##. ..####.. ================================================ FILE: src/games/horde/shapes/8x6/shape9.txt ================================================ ......#. ......#. .####### #.#...#. #..##### .....#.# ================================================ FILE: src/games/horde/shapes/8x8/shape25.txt ================================================ ........ ........ ........ ...##... ..##.#.. .####.#. ..##.#.. ...##... ================================================ FILE: src/games/horde/shapes/8x8/shape26.txt ================================================ ........ ....#... ...#.... ....#... ...#.... ....#... ...#.... ........ ================================================ FILE: src/games/horde/tiles/6x8/tile0.txt ================================================ 12,18,12,51,45,45,18,18 ================================================ FILE: src/games/horde/tiles/6x8/tile1.txt ================================================ 0,0,12,18,12,51,45,44 ================================================ FILE: src/games/horde/tiles/6x8/tile10.txt ================================================ 0,0,0,32,16,40,8,8 ================================================ FILE: src/games/horde/tiles/6x8/tile11.txt ================================================ 0,0,0,1,2,5,4,4 ================================================ FILE: src/games/horde/tiles/6x8/tile12.txt ================================================ 16,56,16,60,18,21,57,41 ================================================ FILE: src/games/horde/tiles/6x8/tile13.txt ================================================ 0,0,0,15,16,40,39,32 ================================================ FILE: src/games/horde/tiles/6x8/tile14.txt ================================================ 0,42,42,58,42,42,0,0 ================================================ FILE: src/games/horde/tiles/6x8/tile15.txt ================================================ 0,37,37,37,37,50,0,0 ================================================ FILE: src/games/horde/tiles/6x8/tile16.txt ================================================ 0,0,0,60,2,5,57,1 ================================================ FILE: src/games/horde/tiles/6x8/tile17.txt ================================================ 2,7,2,2,2,2,2,5 ================================================ FILE: src/games/horde/tiles/6x8/tile18.txt ================================================ 16,56,16,16,16,16,16,40 ================================================ FILE: src/games/horde/tiles/6x8/tile19.txt ================================================ 45,18,12,51,45,45,18,18 ================================================ FILE: src/games/horde/tiles/6x8/tile2.txt ================================================ 18,18,0,0,0,0,0,0 ================================================ FILE: src/games/horde/tiles/6x8/tile20.txt ================================================ 0,0,45,18,12,51,45,44 ================================================ FILE: src/games/horde/tiles/6x8/tile21.txt ================================================ 0,0,0,0,45,18,12,51 ================================================ FILE: src/games/horde/tiles/6x8/tile22.txt ================================================ 0,0,0,0,0,0,45,18 ================================================ FILE: src/games/horde/tiles/6x8/tile23.txt ================================================ 0,4,21,14,27,14,21,4 ================================================ FILE: src/games/horde/tiles/6x8/tile24.txt ================================================ 56,56,63,37,63,41,63,37 ================================================ FILE: src/games/horde/tiles/6x8/tile25.txt ================================================ 0,0,0,12,26,61,26,12 ================================================ FILE: src/games/horde/tiles/6x8/tile26.txt ================================================ 0,4,8,4,8,4,8,0 ================================================ FILE: src/games/horde/tiles/6x8/tile3.txt ================================================ 0,0,0,0,12,18,12,51 ================================================ FILE: src/games/horde/tiles/6x8/tile4.txt ================================================ 45,45,18,18,0,0,0,0 ================================================ FILE: src/games/horde/tiles/6x8/tile5.txt ================================================ 0,0,0,0,0,0,12,18 ================================================ FILE: src/games/horde/tiles/6x8/tile6.txt ================================================ 12,51,45,13,18,18,0,0 ================================================ FILE: src/games/horde/tiles/6x8/tile7.txt ================================================ 12,18,12,0,45,0,18,18 ================================================ FILE: src/games/horde/tiles/6x8/tile8.txt ================================================ 0,12,18,33,33,18,12,0 ================================================ FILE: src/games/horde/tiles/6x8/tile9.txt ================================================ 2,7,2,15,18,42,39,37 ================================================ FILE: src/games/horde/tiles/6x9/tile0.txt ================================================ 12,18,12,51,45,45,18,18,18 ================================================ FILE: src/games/horde/tiles/6x9/tile1.txt ================================================ 0,0,0,12,18,12,51,45,44 ================================================ FILE: src/games/horde/tiles/6x9/tile10.txt ================================================ 0,0,0,0,32,16,40,8,8 ================================================ FILE: src/games/horde/tiles/6x9/tile11.txt ================================================ 0,0,0,0,1,2,5,4,4 ================================================ FILE: src/games/horde/tiles/6x9/tile12.txt ================================================ 0,16,56,16,60,18,21,57,41 ================================================ FILE: src/games/horde/tiles/6x9/tile13.txt ================================================ 0,0,0,0,15,16,40,39,32 ================================================ FILE: src/games/horde/tiles/6x9/tile14.txt ================================================ 0,0,42,42,58,42,42,0,0 ================================================ FILE: src/games/horde/tiles/6x9/tile15.txt ================================================ 0,0,37,37,37,37,50,0,0 ================================================ FILE: src/games/horde/tiles/6x9/tile16.txt ================================================ 0,0,0,0,60,2,5,57,1 ================================================ FILE: src/games/horde/tiles/6x9/tile17.txt ================================================ 2,2,7,2,2,2,2,2,5 ================================================ FILE: src/games/horde/tiles/6x9/tile18.txt ================================================ 16,16,56,16,16,16,16,16,40 ================================================ FILE: src/games/horde/tiles/6x9/tile19.txt ================================================ 45,18,12,51,45,45,18,18,18 ================================================ FILE: src/games/horde/tiles/6x9/tile2.txt ================================================ 18,18,18,0,0,0,0,0,0 ================================================ FILE: src/games/horde/tiles/6x9/tile20.txt ================================================ 0,0,0,45,18,12,51,45,44 ================================================ FILE: src/games/horde/tiles/6x9/tile21.txt ================================================ 0,0,0,0,0,45,18,12,51 ================================================ FILE: src/games/horde/tiles/6x9/tile22.txt ================================================ 0,0,0,0,0,0,0,45,18 ================================================ FILE: src/games/horde/tiles/6x9/tile23.txt ================================================ 0,0,4,21,14,27,14,21,4 ================================================ FILE: src/games/horde/tiles/6x9/tile24.txt ================================================ 56,56,63,37,63,41,63,37,63 ================================================ FILE: src/games/horde/tiles/6x9/tile25.txt ================================================ 0,0,0,0,12,26,61,26,12 ================================================ FILE: src/games/horde/tiles/6x9/tile26.txt ================================================ 0,4,8,4,8,4,8,0,0 ================================================ FILE: src/games/horde/tiles/6x9/tile3.txt ================================================ 0,0,0,0,0,12,18,12,51 ================================================ FILE: src/games/horde/tiles/6x9/tile4.txt ================================================ 45,45,18,18,18,0,0,0,0 ================================================ FILE: src/games/horde/tiles/6x9/tile5.txt ================================================ 0,0,0,0,0,0,0,12,18 ================================================ FILE: src/games/horde/tiles/6x9/tile6.txt ================================================ 12,51,45,13,18,18,18,0,0 ================================================ FILE: src/games/horde/tiles/6x9/tile7.txt ================================================ 12,18,12,0,45,0,18,18 ================================================ FILE: src/games/horde/tiles/6x9/tile8.txt ================================================ 0,0,12,18,33,33,18,12,0 ================================================ FILE: src/games/horde/tiles/6x9/tile9.txt ================================================ 0,2,7,2,15,18,42,39,37 ================================================ FILE: src/games/horde/tiles/7x8/tile0.txt ================================================ 12,18,12,51,45,45,18,18 ================================================ FILE: src/games/horde/tiles/7x8/tile1.txt ================================================ 0,0,12,18,12,51,45,44 ================================================ FILE: src/games/horde/tiles/7x8/tile10.txt ================================================ 0,0,0,96,16,104,8,8 ================================================ FILE: src/games/horde/tiles/7x8/tile11.txt ================================================ 0,0,0,1,2,5,4,4 ================================================ FILE: src/games/horde/tiles/7x8/tile12.txt ================================================ 16,56,16,124,18,85,57,41 ================================================ FILE: src/games/horde/tiles/7x8/tile13.txt ================================================ 0,0,0,15,16,40,39,32 ================================================ FILE: src/games/horde/tiles/7x8/tile14.txt ================================================ 0,42,42,58,42,42,0,0 ================================================ FILE: src/games/horde/tiles/7x8/tile15.txt ================================================ 0,37,37,37,37,50,0,0 ================================================ FILE: src/games/horde/tiles/7x8/tile16.txt ================================================ 0,0,0,124,2,5,121,1 ================================================ FILE: src/games/horde/tiles/7x8/tile17.txt ================================================ 2,7,2,2,2,2,2,5 ================================================ FILE: src/games/horde/tiles/7x8/tile18.txt ================================================ 16,56,16,16,16,16,16,40 ================================================ FILE: src/games/horde/tiles/7x8/tile19.txt ================================================ 45,18,12,51,45,45,18,18 ================================================ FILE: src/games/horde/tiles/7x8/tile2.txt ================================================ 18,18,0,0,0,0,0,0 ================================================ FILE: src/games/horde/tiles/7x8/tile20.txt ================================================ 0,0,45,18,12,51,45,44 ================================================ FILE: src/games/horde/tiles/7x8/tile21.txt ================================================ 0,0,0,0,45,18,12,51 ================================================ FILE: src/games/horde/tiles/7x8/tile22.txt ================================================ 0,0,0,0,0,0,45,18 ================================================ FILE: src/games/horde/tiles/7x8/tile23.txt ================================================ 0,4,21,14,27,14,21,4 ================================================ FILE: src/games/horde/tiles/7x8/tile24.txt ================================================ 120,120,127,101,127,105,127,101 ================================================ FILE: src/games/horde/tiles/7x8/tile25.txt ================================================ 0,0,0,12,26,61,26,12 ================================================ FILE: src/games/horde/tiles/7x8/tile26.txt ================================================ 0,4,8,4,8,4,8,0 ================================================ FILE: src/games/horde/tiles/7x8/tile3.txt ================================================ 0,0,0,0,12,18,12,51 ================================================ FILE: src/games/horde/tiles/7x8/tile4.txt ================================================ 45,45,18,18,0,0,0,0 ================================================ FILE: src/games/horde/tiles/7x8/tile5.txt ================================================ 0,0,0,0,0,0,12,18 ================================================ FILE: src/games/horde/tiles/7x8/tile6.txt ================================================ 12,51,45,13,18,18,0,0 ================================================ FILE: src/games/horde/tiles/7x8/tile7.txt ================================================ 12,18,12,0,45,0,18,18 ================================================ FILE: src/games/horde/tiles/7x8/tile8.txt ================================================ 0,12,18,33,33,18,12,0 ================================================ FILE: src/games/horde/tiles/7x8/tile9.txt ================================================ 2,7,2,15,18,42,39,37 ================================================ FILE: src/games/horde/tiles/8x6/tile0.txt ================================================ 24,24,102,189,36,36 ================================================ FILE: src/games/horde/tiles/8x6/tile1.txt ================================================ 0,24,24,103,188,36 ================================================ FILE: src/games/horde/tiles/8x6/tile10.txt ================================================ 0,0,224,80,144,0 ================================================ FILE: src/games/horde/tiles/8x6/tile11.txt ================================================ 0,0,7,10,9,0 ================================================ FILE: src/games/horde/tiles/8x6/tile12.txt ================================================ 32,32,254,37,249,80 ================================================ FILE: src/games/horde/tiles/8x6/tile13.txt ================================================ 0,0,127,160,159,0 ================================================ FILE: src/games/horde/tiles/8x6/tile14.txt ================================================ 42,42,58,42,42,0 ================================================ FILE: src/games/horde/tiles/8x6/tile15.txt ================================================ 74,74,74,74,100,0 ================================================ FILE: src/games/horde/tiles/8x6/tile16.txt ================================================ 0,0,254,5,249,0 ================================================ FILE: src/games/horde/tiles/8x6/tile17.txt ================================================ 2,2,2,2,2,5 ================================================ FILE: src/games/horde/tiles/8x6/tile18.txt ================================================ 32,32,32,32,32,80 ================================================ FILE: src/games/horde/tiles/8x6/tile19.txt ================================================ 60,24,102,189,36,36 ================================================ FILE: src/games/horde/tiles/8x6/tile2.txt ================================================ 36,0,0,0,0,0 ================================================ FILE: src/games/horde/tiles/8x6/tile20.txt ================================================ 0,60,24,103,188,36 ================================================ FILE: src/games/horde/tiles/8x6/tile21.txt ================================================ 0,0,0,60,24,102 ================================================ FILE: src/games/horde/tiles/8x6/tile22.txt ================================================ 0,0,0,0,60,24 ================================================ FILE: src/games/horde/tiles/8x6/tile23.txt ================================================ 0,42,28,119,28,42 ================================================ FILE: src/games/horde/tiles/8x6/tile24.txt ================================================ 240,255,133,255,161,255 ================================================ FILE: src/games/horde/tiles/8x6/tile25.txt ================================================ 0,16,40,116,40,16 ================================================ FILE: src/games/horde/tiles/8x6/tile26.txt ================================================ 0,16,8,16,8,16 ================================================ FILE: src/games/horde/tiles/8x6/tile3.txt ================================================ 0,0,0,24,24,102 ================================================ FILE: src/games/horde/tiles/8x6/tile4.txt ================================================ 189,36,36,0,0,0 ================================================ FILE: src/games/horde/tiles/8x6/tile5.txt ================================================ 0,0,0,0,24,24 ================================================ FILE: src/games/horde/tiles/8x6/tile6.txt ================================================ 230,61,36,36,0,0 ================================================ FILE: src/games/horde/tiles/8x6/tile7.txt ================================================ 24,0,102,129,36,36 ================================================ FILE: src/games/horde/tiles/8x6/tile8.txt ================================================ 60,102,195,195,102,60 ================================================ FILE: src/games/horde/tiles/8x6/tile9.txt ================================================ 2,2,127,162,159,5 ================================================ FILE: src/games/horde/tiles/8x8/tile0.txt ================================================ 24, 36, 24,102,153, 24, 36,36 ================================================ FILE: src/games/horde/tiles/8x8/tile1.txt ================================================ 0,0,24, 36, 24,102,89, 24 ================================================ FILE: src/games/horde/tiles/8x8/tile10.txt ================================================ 0,0,0,192,32,80,144,0 ================================================ FILE: src/games/horde/tiles/8x8/tile11.txt ================================================ 0,0,0,3,4,10,9,0 ================================================ FILE: src/games/horde/tiles/8x8/tile12.txt ================================================ 32,112,32,252,34,37,249,80 ================================================ FILE: src/games/horde/tiles/8x8/tile13.txt ================================================ 0, 0, 0,63,64,160,159,0 ================================================ FILE: src/games/horde/tiles/8x8/tile14.txt ================================================ $2A,$2A,$2A,$3A,$2A,$2A,$2A,$00 ================================================ FILE: src/games/horde/tiles/8x8/tile15.txt ================================================ 74,74,74,74,74,74,100,0 ================================================ FILE: src/games/horde/tiles/8x8/tile16.txt ================================================ 0,0,0,252,2,5,249,0 ================================================ FILE: src/games/horde/tiles/8x8/tile17.txt ================================================ 2,7,2,2,2,2,2,5 ================================================ FILE: src/games/horde/tiles/8x8/tile18.txt ================================================ 32,112,32,32,32,32,32,80 ================================================ FILE: src/games/horde/tiles/8x8/tile19.txt ================================================ 90,36, 24,102,153, 24, 36,36 ================================================ FILE: src/games/horde/tiles/8x8/tile2.txt ================================================ 36,36,0,0,0,0,0,0 ================================================ FILE: src/games/horde/tiles/8x8/tile20.txt ================================================ 0,0,90,36, 24,102,89, 24 ================================================ FILE: src/games/horde/tiles/8x8/tile21.txt ================================================ 0,0,0,0,90,36, 24,102 ================================================ FILE: src/games/horde/tiles/8x8/tile22.txt ================================================ 0,0,0,0,0,0,90,36 ================================================ FILE: src/games/horde/tiles/8x8/tile23.txt ================================================ 8,42,28,119,28,42,8,0 ================================================ FILE: src/games/horde/tiles/8x8/tile24.txt ================================================ 240,240,255,133,255,161,255,0 ================================================ FILE: src/games/horde/tiles/8x8/tile25.txt ================================================ 0,0,0,24,52,122,52,24 ================================================ FILE: src/games/horde/tiles/8x8/tile26.txt ================================================ 0,8,16,8,16,8,16,0 ================================================ FILE: src/games/horde/tiles/8x8/tile3.txt ================================================ 0,0,0,0,24, 36, 24,102 ================================================ FILE: src/games/horde/tiles/8x8/tile4.txt ================================================ 153, 24, 36,36,0,0,0,0 ================================================ FILE: src/games/horde/tiles/8x8/tile5.txt ================================================ 0,0,0,0,0,0,24, 36 ================================================ FILE: src/games/horde/tiles/8x8/tile6.txt ================================================ 24,102,154, 24, 36,36,0,0 ================================================ FILE: src/games/horde/tiles/8x8/tile7.txt ================================================ 24, 36, 24, 0,153, 0, 36,36 ================================================ FILE: src/games/horde/tiles/8x8/tile8.txt ================================================ 60,126,231,195,195,231,126,60 ================================================ FILE: src/games/horde/tiles/8x8/tile9.txt ================================================ 2,7,2,63,66,162,159,5 ================================================ FILE: src/games/horde/tiles/ASCII/aquarius/aquarius_char_tiles.h ================================================ #ifndef _AQUARIUS_CHAR_TILES_H #define _AQUARIUS_CHAR_TILES_H #define _TILE_0 157 // 'X' #define _TILE_1 157 #define _TILE_2 ' ' #define _TILE_3 157 #define _TILE_4 ' ' #define _TILE_5 157 #define _TILE_6 ' ' #define _TILE_8 'o' //150 //135 //'O' // Bow parts #define _TILE_10 ' ' #define _TILE_11 ' ' // Loaded bow #if defined(__MEMORY_MAPPED_GRAPHICS) #define _TILE_9 8 #define _TILE_12 8 #endif // Empty bow #define _TILE_13 214 #define _TILE_16 214 #define _TILE_14 'H' #define _TILE_15 'L' #define _TILE_17 94 //124 //'I' #define _TILE_18 94 //124 //'I' #define _TILE_19 146 //157 //'V' #define _TILE_20 147 #define _TILE_21 146 // Beam and top border #define _TILE_22 211 // Dead #define _TILE_7 19 //209 //'=' #define _TILE_23 '*' // Wall #define _TILE_24 253 //134 #define _TILE_25 '$' #endif // _AQUARIUS_CHAR_TILES_H ================================================ FILE: src/games/horde/tiles/ASCII/char_tiles.h ================================================ #ifndef _CHAR_TILES_H #define _CHAR_TILES_H #include "cross_lib.h" #if defined(__TARGET_SPECIFIC_ASCII) && defined(__AQUARIUS__) && !defined(__QUAD_MEMORY_MAPPED_GRAPHICS) && !defined(__DUAL_MEMORY_MAPPED_GRAPHICS) #include "aquarius/aquarius_char_tiles.h" #else #define _TILE_0 'X' #define _TILE_1 'X' #define _TILE_2 ' ' #define _TILE_3 'X' #define _TILE_4 ' ' #define _TILE_5 'X' #define _TILE_6 ' ' #define _TILE_8 'O' #define _TILE_9 'I' #define _TILE_10 ' ' #define _TILE_11 ' ' #define _TILE_12 'I' #define _TILE_13 'T' #define _TILE_14 'H' #define _TILE_15 'L' #define _TILE_16 'T' #define _TILE_17 'I' #define _TILE_18 'I' #define _TILE_19 'V' #define _TILE_20 'V' #define _TILE_21 'V' #define _TILE_22 'V' #if !defined(__CIDELSA__) #define _TILE_7 '=' #define _TILE_23 '*' #define _TILE_24 '-' #else #define _TILE_7 'Z' #define _TILE_23 'X' #define _TILE_24 'M' #endif #define _TILE_25 'S' #endif #endif // _CHAR_TILES_H ================================================ FILE: src/games/shoot/Makefile.shoot ================================================ NO_CHASE_FILES ?= \ $(BASIC_CROSS_LIB_FILES) \ $(CROSS_LIB_PATH)/sleep/sleep_macros.c \ $(SOURCE_PATH)/split_files/move_player.c \ $(SOURCE_PATH)/split_files/ghost.c $(SOURCE_PATH)/split_files/level.c $(SOURCE_PATH)/split_files/character.c $(SOURCE_PATH)/split_files/game_text.c \ $(SOURCE_PATH)/split_files/main.c \ $(SOURCE_PATH)/split_files/init_images.c # TINY_FILES ?= $(NO_CHASE_FILES) $(SOURCE_PATH)/split_files/strategy.c # TEST_FILES ?= $(NO_CHASE_FILES) # LIGHT_ONLY_FILES ?= $(SOURCE_PATH)/split_files/item.c $(SOURCE_PATH)/split_files/skull.c $(SOURCE_PATH)/split_files/bullet.c # FULL_ONLY_FILES ?= $(SOURCE_PATH)/split_files/horizontal_missile.c $(SOURCE_PATH)/split_files/rocket.c $(SOURCE_PATH)/split_files/sleep.c # LIGHT_FILES ?= $(TINY_FILES) $(LIGHT_ONLY_FILES) # # FULL_ONLY_FILES ?= \ # $(BASIC_CROSS_LIB_FILES) \ # $(CROSS_LIB_PATH)/sleep/sleep_macros.c \ # $(SOURCE_PATH)/move_player.c \ # $(SOURCE_PATH)/ghost.c $(SOURCE_PATH)/level.c $(SOURCE_PATH)/character.c $(SOURCE_PATH)/game_text.c \ # $(SOURCE_PATH)/main.c \ # $(SOURCE_PATH)/init_images.c \ # $(SOURCE_PATH)/strategy.c \ # $(SOURCE_PATH)/item.c $(SOURCE_PATH)/skull.c $(SOURCE_PATH)/bullet.c \ # $(SOURCE_PATH)/horizontal_missile.c $(SOURCE_PATH)/rocket.c $(SOURCE_PATH)/sleep.c $(SOURCE_PATH)/end_screen.c FULL_FILES ?= \ $(BASIC_CROSS_LIB_FILES) \ $(CROSS_LIB_PATH)/sleep/sleep_macros.c \ $(SOURCE_PATH)/main.c GLOBAL_OPTS = -DFULL_LOWER_BORDER -D_DEFAULT_ASCII -D_XL_NUMBER_OF_TILES=27 GAME_NAME := shoot PARENT_DIR = games include ./$(PARENT_DIR)/$(GAME_NAME)/config/project_config.mk include ./$(PARENT_DIR)/$(GAME_NAME)/config/game_config.mk include ./Makefile_common ############################################################################ include ./$(PARENT_DIR)/$(GAME_NAME)/makefiles/Makefile.override include ./makefiles.common/auxiliary/Makefile_default_values ================================================ FILE: src/games/shoot/bullet.h ================================================ /* --------------------------------------------------------------------------------------- */ // // CROSS SHOOT by Fabrizio Caruso // // Fabrizio_Caruso@hotmail.com // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from // the use of this software. // Permission is granted to anyone to use this software for non-commercial applications, // subject to the following restrictions: // 1. The origin of this software must not be misrepresented; you must not // claim that you wrote the original software. If you use this software in // a product, an acknowledgment in the product documentation would be // appreciated but is not required. // 2. Altered source versions must be plainly marked as such, and must not // be misrepresented as being the original software. // 3. This notice may not be removed or altered from any source distribution. /* --------------------------------------------------------------------------------------- */ #ifndef _MISSILE_HEADER #define _MISSILE_HEADER #include "character.h" #include "settings.h" #include "definitions.h" #include "ghost.h" uint8_t availableBullet(void); void handle_bullet(uint8_t bulletIndex); void handle_bullets(void); void handle_bomb(void); void checkBullet(Character *bulletPtr, uint8_t bulletDirection); void checkBullets(void); void checkBulletVsGhost(Character * bulletPtr, uint8_t bulletDirection, Character * ghostPtr); void checkBulletVsGhosts(Character * bulletPtr, uint8_t bulletDirection); void checkBulletVsSkull(register Character *bulletPtr, Character *skullPtr); void checkBulletVsSkulls(Character *bulletPtr); void _moveBullet(register Character * bulletPtr, uint8_t bulletDirection); void moveBullet(register Character * bulletPtr, uint8_t bulletDirection); void handle_chasing_bullet(void); void pushGhost(Character * ghostPtr, uint8_t bulletDirection); #endif //_MISSILE ================================================ FILE: src/games/shoot/character.h ================================================ /* --------------------------------------------------------------------------------------- */ // // CROSS SHOOT by Fabrizio Caruso // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from // the use of this software. // Permission is granted to anyone to use this software for non-commercial applications, // subject to the following restrictions: // 1. The origin of this software must not be misrepresented; you must not // claim that you wrote the original software. If you use this software in // a product, an acknowledgment in the product documentation would be // appreciated but is not required. // 2. Altered source versions must be plainly marked as such, and must not // be misrepresented as being the original software. // 3. This notice may not be removed or altered from any source distribution. /* --------------------------------------------------------------------------------------- */ #ifndef _CHARACTER #define _CHARACTER #include "../cross_lib/display/display_macros.h" #include "settings.h" struct CharacterStruct { // character coordinates uint8_t _x; uint8_t _y; // _status decides whether the character is active uint8_t _status; Image* _imagePtr; }; typedef struct CharacterStruct Character; #if defined(ANIMATE_PLAYER) #define PLAYER_IMAGE PLAYER_DOWN_IMAGE #endif #define areCharctersAtSamePosition(lhs, rhs)isCharacterAtLocation((lhs)->_x, (lhs)->_y,rhs) #define characterReachedBombs(preyPtr) sameLocationAsAnyActiveLocation((preyPtr)->_x, (preyPtr)->_y, bombs, BOMBS_NUMBER) uint8_t sameLocationAsAnyActiveLocation(uint8_t x, uint8_t y, Character *characterList, uint8_t length); extern uint16_t points; extern uint8_t ghostCount; extern Image BROKEN_BRICK_IMAGE; extern Image DESTROYER_IMAGE; extern Image INVINCIBILITY_IMAGE; uint8_t playerKilledBy(Character *enemyPtr); void displayCharacter(Character * characterPtr); void deleteCharacter(Character * characterPtr); uint8_t onWall(uint8_t x, uint8_t y); // #if defined(ANIMATE_PLAYER) extern Image PLAYER_LEFT_IMAGE; extern Image PLAYER_RIGHT_IMAGE; extern Image PLAYER_UP_IMAGE; extern Image PLAYER_DOWN_IMAGE; #define SHOW_LEFT() player._imagePtr = (Image *)&PLAYER_LEFT_IMAGE #define SHOW_RIGHT() player._imagePtr = (Image *)&PLAYER_RIGHT_IMAGE #define SHOW_UP() player._imagePtr = (Image *)&PLAYER_UP_IMAGE #define SHOW_DOWN() player._imagePtr = (Image *)&PLAYER_DOWN_IMAGE #else #define SHOW_LEFT() { } #define SHOW_RIGHT() { } #define SHOW_UP() { } #define SHOW_DOWN() { } #endif #if !defined(_XL_NO_COLOR) #define __DRAW(x,y,image) \ _XL_DRAW(x,y, (image)->_imageData,(image)->_color) #else #define __DRAW(x,y,image) \ _XL_DRAW(x,y, (image)->_imageData,0) #endif #define _draw_stat(x, y, image) \ __DRAW((x),(y),(image)) #define _XLIB_DRAW(x,y,image) \ _draw_stat(x, y, image) #define _XLIB_DELETE(x,y) \ _delete_stat(x, y) #define _draw(x, y, image) \ __DRAW((x),Y_OFFSET+(y),(image)) #define _delete_stat(x, y) \ _XL_DELETE((x),(y)) #define _delete(x, y) \ _XL_DELETE((x),Y_OFFSET+(y)) #define DRAW_CHARACTER(x,y,image) _draw(x,y,image) #define DRAW_PLAYER(x,y,image) DRAW_CHARACTER(x,y,image) #define DRAW_GHOST(x,y,image) DRAW_CHARACTER(x,y,image) #define DRAW_SKULL(x,y,image) DRAW_CHARACTER(x,y,image) #define DRAW_BOMB(x,y,image) DRAW_CHARACTER(x,y,image) #define DRAW_MISSILE(x,y,image) DRAW_CHARACTER(x,y,image) void _DRAW_PLAYER(void); #if !defined(NO_BLINKING) void _blink_draw(uint8_t x, uint8_t y, Image * image, uint8_t *blinkCounter); #endif #define DRAW_BLINKING_PLAYER(x, y, image) _blink_draw(x,y,image, &playerBlink) #define DELETE_CHARACTER(x,y) _delete(x,y) #if defined(__GAMATE__) #define DELETE_PLAYER(x,y,image) do {textcolor(_XL_CYAN); _delete(x,y);} while(0) #else #define DELETE_PLAYER(x,y,image) _delete(x,y) #endif #define DELETE_GHOST(x,y,image) _delete(x,y) #if defined(__GAMATE__) #define DELETE_SKULL(x,y,image) do {textcolor(_XL_YELLOW); _delete(x,y);} while(0) #else #define DELETE_SKULL(x,y,image) _delete(x,y) #endif #define DELETE_BOMB(x,y,image) _delete(x,y) #define DELETE_ITEM(x,y,image) _delete(x,y) #define DELETE_GUN(x,y,image) _delete(x,y) #define DELETE_MISSILE(x,y,image) _delete(x,y) #define DELETE_EXTRA_POINTS(x,y,image) _delete(x,y) #define DELETE_EXTRA_LIFE(x,y,image) _delete(x,y) #define DELETE_INVINCIBILITY(x,y,image) _delete(x,y) // #define displayPlayer(characterPtr) displayCharacter(characterPtr); #define displayGhost(characterPtr) displayCharacter(characterPtr); #define displayBomb(characterPtr) displayCharacter(characterPtr); #define displayHorizontalMissile(characterPtr) displayCharacter(characterPtr); #define displayRocket(characterPtr) displayCharacter(characterPtr); #define displayBullet(characterPtr) displayCharacter(characterPtr); #define displayChasingBullet(characterPtr) displayCharacter(characterPtr); #define displaySkull(characterPtr) displayCharacter(characterPtr); #define deletePlayer(characterPtr) deleteCharacter(characterPtr); #define deleteGhost(characterPtr) deleteCharacter(characterPtr); #define deleteBomb(characterPtr) deleteCharacter(characterPtr); #define deleteHorizontalMissile(characterPtr) deleteCharacter(characterPtr); #define deleteRocket(characterPtr) deleteCharacter(characterPtr); #define deleteBullet(characterPtr) deleteCharacter(characterPtr); #define deleteChasingBullet(characterPtr) deleteCharacter(characterPtr); #define deleteSkull(characterPtr) deleteCharacter(characterPtr); #define deleteItem(characterPtr) deleteCharacter(characterPtr); void increasePoints(uint8_t score); void initializeCharacter(register Character* characterPtr, uint8_t x, uint8_t y, uint8_t status, Image * imagePtr); uint8_t isCharacterAtLocation(uint8_t x, uint8_t y, Character * characterPtr); uint8_t wallReached(register Character *characterPtr); void playerDies(void); uint8_t handle_player_killed(Character *characterPtr); uint8_t safeLocation(uint8_t x, uint8_t y); void relocateNearBy(register Character * characterPtr); uint8_t sameLocationAsAnyLocation(uint8_t x, uint8_t y, Character *characterList, uint8_t length); uint8_t innerVerticalWallReached(uint8_t x, uint8_t y); uint8_t innerHorizontalWallReached(uint8_t x, uint8_t y); uint8_t nearInnerVerticalWall(register Character *characterPtr); uint8_t nearInnerHorizontalWall(register Character *characterPtr); void DRAW_BROKEN_BRICK(uint8_t x, uint8_t y); #endif // _CHARACTER ================================================ FILE: src/games/shoot/config/game_config.mk ================================================ # # COCO_COLOR_GFX_GAME_OPTS ?= -DMAX_ARROWS_ON_SCREEN=7 -DFASTER_WALL_REDRAW -DNUMBER_OF_MISSILES=3 CREATIVISION_GAME_OPTS ?= -DLESS_TEXT GAMATE_GAME_OPTS ?= -DLESS_TEXT -DNO_BLINKING -DSIMPLE_STRATEGY -DNO_HINTS C128_Z80_80COL_GAME_OPTS ?= -DLESS_TEXT -DNO_BLINKING -DNO_HINTS -DBOMB_DRAW_SKIP=3 -DWALL_DRAW_SKIP=15 # ZX81_NO_GFX_GAME_OPTS ?= -DMAX_ARROWS_ON_SCREEN=7 -DNUMBER_OF_MISSILES=4 -DMISSILE_DROP_LOOP_MASK=1 -DSMALL_WALL ZX81_GFX_GAME_OPTS ?= -DLESS_TEXT -DNO_BLINKING -DNO_HINTS -DBOMB_DRAW_SKIP=3 -DWALL_DRAW_SKIP=15 APPLE2_GAME_OPTS ?= -DMAX_ARROWS_ON_SCREEN=6 -DNUMBER_OF_MISSILES=3 -DLESS_TEXT -DNO_BLINKING -DNO_HINTS -DSIMPLE_STRATEGY COMX_GAME_OPTS ?= -DNO_INITIAL_SCREEN -DBOMB_DRAW_SKIP=3 -DWALL_DRAW_SKIP=15 -DGHOSTS_NUMBER=7 PECOM_GAME_OPTS ?= -DNO_BLINKING -DBOMB_DRAW_SKIP=3 -DWALL_DRAW_SKIP=15 -DGHOSTS_NUMBER=7 TMC600_GAME_OPTS ?= -DNO_BLINKING -DBOMB_DRAW_SKIP=3 -DWALL_DRAW_SKIP=15 -DGHOSTS_NUMBER=7 MICRO_GAME_OPTS ?= -DNO_BLINKING -DBOMB_DRAW_SKIP=3 -DWALL_DRAW_SKIP=15 -DGHOSTS_NUMBER=7 #__VIC20_EXP_3K_GAME_OPTS ?= -DNO_BLINKING -DNO_HINTS -DLESS_TEXT CAMPUTERS_LYNX_GAME_OPTS ?= -DNO_BLINKING -DBOMB_DRAW_SKIP=3 -DWALL_DRAW_SKIP=7 -DGHOSTS_NUMBER=7 -DMAX_ARROWS_ON_SCREEN=7 -DFASTER_WALL_REDRAW -DNUMBER_OF_MISSILES=3 TI99_GAME_OPTS ?= -DLESS_TEXT -DNO_HINTS -DSIMPLE_STRATEGY -DNO_BLINKING -DBOMB_DRAW_SKIP=3 -DWALL_DRAW_SKIP=7 -DGHOSTS_NUMBER=7 -DMAX_ARROWS_ON_SCREEN=7 -DFASTER_WALL_REDRAW -DNUMBER_OF_MISSILES=3 BBC7_GAME_OPTS ?= -DLESS_TEXT BBCMASTER_GAME_OPTS ?= -DLESS_TEXT -DNO_HINTS PV1000_GAME_OPTS ?= -DBOMB_DRAW_SKIP=3 -DWALL_DRAW_SKIP=7 -DGHOSTS_NUMBER=7 -DMAX_ARROWS_ON_SCREEN=6 -DNUMBER_OF_MISSILES=3 -DLESS_TEXT -DNO_BLINKING -DNO_HINTS -DSIMPLE_STRATEGY -DNO_TRANSICTION_ANIMATION PHC25_GAME_OPTS ?= -DNO_INITIAL_SCREEN -DNO_EXTRA_TITLE -DGHOSTS_NUMBER=7 -DMAX_ARROWS_ON_SCREEN=6 -DNUMBER_OF_MISSILES=3 -DLESS_TEXT -DNO_BLINKING -DNO_HINTS -DSIMPLE_STRATEGY -DNO_TRANSICTION_ANIMATION -D_XL_NO_SOUND -DNO_HORIZONTAL_LEVEL PHC25_NO_GFX_GAME_OPTS ?= -DNO_INITIAL_SCREEN -DNO_EXTRA_TITLE -DGHOSTS_NUMBER=7 -DMAX_ARROWS_ON_SCREEN=6 -DNUMBER_OF_MISSILES=3 -DLESS_TEXT -DNO_BLINKING -DNO_HINTS -DSIMPLE_STRATEGY -DNO_TRANSICTION_ANIMATION -D_XL_NO_SOUND -DNO_HORIZONTAL_LEVEL PHC25_MONO_GAME_OPTS ?= -DNO_INITIAL_SCREEN -DNO_EXTRA_TITLE -DGHOSTS_NUMBER=7 -DMAX_ARROWS_ON_SCREEN=6 -DNUMBER_OF_MISSILES=3 -DLESS_TEXT -DNO_BLINKING -DNO_HINTS -DSIMPLE_STRATEGY -DNO_TRANSICTION_ANIMATION -D_XL_NO_SOUND -DNO_HORIZONTAL_LEVEL -DNO_ROCKETS -DNO_PLAYER_ANIMATION -DNO_ACHIEVEMENTS -DNO_BONUS_ANIMATION # VIC_20_EXP_16K_GAME_OPTS ?= -DNO_INITIAL_SCREEN -DNO_EXTRA_TITLE -DGHOSTS_NUMBER=7 -DMAX_ARROWS_ON_SCREEN=6 -DNUMBER_OF_MISSILES=3 -DLESS_TEXT -DNO_BLINKING -DNO_HINTS -DSIMPLE_STRATEGY -DNO_TRANSICTION_ANIMATION -D_XL_NO_SOUND -DNO_HORIZONTAL_LEVEL -DNO_ROCKETS -DNO_PLAYER_ANIMATION -DNO_ACHIEVEMENTS -DNO_BONUS_ANIMATION ================================================ FILE: src/games/shoot/config/project_config.mk ================================================ ##################################################################### # SLOWDOWN VALUES # Common factor _COMMON_SLOWDOWN_FACTOR=8 # CC65 _AGAT_SLOWDOWN=35 _APPLE2_SLOWDOWN=30 _APPLE2ENH_SLOWDOWN=30 _APPLE2_HGR_SLOWDOWN=50 _APPLE2ENH_HGR_SLOWDOWN=50 _ATARI_SLOWDOWN=70 _ATARI5200_SLOWDOWN=70 _ATARI7800_SLOWDOWN=40 _ATARI7800_NO_COLOR_SLOWDOWN=40 _ATARI_LYNX_SLOWDOWN=290 _C16_SLOWDOWN=40 _C16_CONIO_SLOWDOWN=60 _C64_SLOWDOWN=40 _C128_8502_80COL_SLOWDOWN=10 _CX16_SLOWDOWN?=40 _CBM610_SLOWDOWN=80 _CBM510_SLOWDOWN=80 _CREATIVISION_SLOWDOWN=100 _GAMATE_SLOWDOWN=120 _ORIC_SLOWDOWN=40 _MEGA65_SLOWDOWN=200 _NES_SLOWDOWN=80 _PET_SLOWDOWN=40 _PCE_SLOWDOWN=550 _SUPERVISION_SLOWDOWN=140 _VIC20_SLOWDOWN=55 # Z88DK _AGON_SLOWDOWN=800 _AQUARIUS_SLOWDOWN=30 _ACE_SLOWDOWN=100 _BEE_SLOWDOWN=10 _C128_Z80_40COL_SLOWDOWN=20 _C128_Z80_80COL_SLOWDOWN=1 _CAMPUTERS_LYNX_SLOWDOWN=0 _COLECO_SLOWDOWN=100 _CPC_MODE0_SLOWDOWN=100 _CPC_CPCRSLIB_MODE1_SLOWDOWN=90 _CPC_MODE2_SLOWDOWN=20 _CPM_Z80_SLOWDOWN=90 _CPM_INTEL8080_SLOWDOWN=80 _E200_SLOWDOWN=120 _G850_SLOWDOWN=120 _G815_SLOWDOWN=70 _GAL_SLOWDOWN=400 _GAL_GFX_SLOWDOWN=300 _GB_SLOWDOWN=25 _GG_SLOWDOWN=300 _GB_WAIT_VSYNC_SLOWDOWN=150 _GL6000SL_SLOWDOWN=300 _HECTORHR_SLOWDOWN=20 _LASER500_SLOWDOWN=200 _M100_SLOWDOWN=40 _M5_SLOWDOWN=11 _MC1000_SLOWDOWN=75 _MSX_SLOWDOWN=11 _MSX_FIXED_COLORS_SLOWDOWN=300 _MTX500_SLOWDOWN=200 _MTX512_SLOWDOWN=200 _MZ_SLOWDOWN=200 _PHC25_SLOWDOWN=100 _PV1000_SLOWDOWN=10 _SAMCOUPE_SLOWDOWN=300 _SC3000_SLOWDOWN=11 _SMC777_SLOWDOWN=7 _SMS_SLOWDOWN=160 _SPECTRUM_SLOWDOWN=20 _TRS80_SLOWDOWN=1 _VG5K_SLOWDOWN=75 _VZ200_SLOWDOWN=250 _X07_SLOWDOWN=4 _ZX81_SLOWDOWN=10 _ZX81_WRX_SLOWDOWN=10 _ZX81_WRX128_SLOWDOWN=15 _ZX81_8X6_WRX128_SLOWDOWN=16 _ZX81_WRX64_SLOWDOWN=25 _ZX81_8X6_WRX64_SLOWDOWN=30 # CMOC _COCO_SLOWDOWN=5 _DRAGON_SLOWDOWN=5 _COCO3_SLOWDOWN=10 _MO5_SLOWDOWN=160 _TO7_SLOWDOWN=160 # LCC1802 _COMX_SLOWDOWN=0 _PECOM_SLOWDOWN=0 _TMC600_SLOWDOWN=0 _MICRO_SLOWDOWN=2 _CIDELSA_SLOWDOWN=2 # CC6303 _MC10_SLOWDOWN=18 # TI99 _TI99_SLOWDOWN=25 # GCC _NCURSES_SLOWDOWN=1 _TERMINAL_SLOWDOWN=2 # VBCC _BBC_SLOWDOWN=45 # ACK _MSDOS86_SLOWDOWN?=60 ================================================ FILE: src/games/shoot/definitions.h ================================================ /* --------------------------------------------------------------------------------------- */ // // CROSS SHOOT by Fabrizio Caruso // // Fabrizio_Caruso@hotmail.com // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from // the use of this software. // Permission is granted to anyone to use this software for non-commercial applications, // subject to the following restrictions: // 1. The origin of this software must not be misrepresented; you must not // claim that you wrote the original software. If you use this software in // a product, an acknowledgment in the product documentation would be // appreciated but is not required. // 2. Altered source versions must be plainly marked as such, and must not // be misrepresented as being the original software. // 3. This notice may not be removed or altered from any source distribution. /* --------------------------------------------------------------------------------------- */ #ifndef _DEFINITIONS #define _DEFINITIONS // Directions #define RIGHT 0 #define DOWN 1 #define LEFT 2 #define UP 3 #endif // _DEFINITIONS ================================================ FILE: src/games/shoot/doc/items.txt ================================================ Standard Items - Calm-down (decreases enemy speed + very short freeze) - Freeze (freeze enemies) - Fire Power (increases bullet strength) - Fire Charge (+30 bullets) - Bomb Charge (3 mines) Secret items triggered by hitting the skulls/bases/suicide - Invincibility (invincible player) - Extra Points (extra points that depend on level) Secret item triggered by killing 2 times all 4 skulls in non-boss levels - Super (Fire Power + Freeze + Invincibility)\ Secret items triggered by completing levels with destroyed bases - Confuse (Skulls lose some energy and are temporarily much slower) - Suicide (All ghots on screen die + constant point increase + standard and some secret items are spawned) Secret items triggered by both killing 2 times all 4 skulls in non-boss levels and by completing levels with a total of at least 3 destroyed bases - Extra Life (+1 life) Secret item triggered by exploding 6 bombs or by destroying 3 missile/rocket bases - Destroyer (long invincibility, destroy common enemies) ================================================ FILE: src/games/shoot/doc/levels.txt ================================================ --------------------------------------------------------------------------------- level | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | --------------------------------------------------------------------------------- walls | V | H | V | H | V | H |NONE| V | V | H | V | H | V | H |NONE| V | --------------------------------------------------------------------------------- missiles | 0 | 0 | 1 | 2 | 2 | 2 | 1 | 2 | 1 | 0 | 1 | 2 | 2 | 2 | 1 | 2 | --------------------------------------------------------------------------------- rockets | 0 | 0 | 2 | 0 | 0 | 3 | 3 | 4 | 2 | 3 | 2 | 3 | 2 | 3 | 3 | 4 | --------------------------------------------------------------------------------- ghosts | 10 | 14 | 16 | 18 | 20 | 22 | 24 | *8 | 28 | 30 | 32 | 34 | 36 | 38 | 40 | *8 | --------------------------------------------------------------------------------- ================================================ FILE: src/games/shoot/doc/secrets.txt ================================================ - Secret items -- Secret items triggered by hitting the skulls/bases/suicide in current level 1. Invincibility (invincible player) 2. Extra Points (extra points that depend on level) - Secret items triggered by killing all 4 skulls in previous non-boss levels 3. Super (Fire Power + Freeze + 1/2 Invincibility duration)\ - Secret items triggered by completing previous levels with destroyed bases 4. Confuse (Skulls are much slower) 5. Suicide (All ghots on screen die + constant point increase + standard and some secret items are spawned) - Secret items triggered by both killing all 4 skulls in previous non-boss levels and by completing levels with destroyed bases 6. Extra Life (+1 life) - Secret Ability -- Secret ability --- Triggered by destroying 3 missile/rocket bases in current level 7. Missile Destroyer (It spawns a destroyer Item that gives longer invincibility + destroy standard enemies) --- Triggered by exploding 6 bombs in current level 8. Bomb Destroyer (It spawns a destroyer Item that gives longer invincibility + destroy standard enemies) - Secrets activated at the beginning of the next level -- Secret initial level increased if fire power reached more than level 5 9. Fire Power Level (Initial fire power is more than 1) -- Secret triggered by reaching fire power 4 in previous level 9. Fire Power Spawn (Fire Power spawned immediately in next level) Secret triggered by reaching 99 bullets in previous level 10. Fire Charge (Next level starts with 20 bullets instead of zero) - Secrets triggered by killing all 4 skulls in previous non-boss levels and leaving several standard enemies Triggered by leaving 2 ghosts alive: 11. Calm-down Spawn (Calm-down spawned immediately in next level) Triggered by leaving 3 ghosts alive: 12. Extra Points Spawn (Extra Points spawned immediately in next level) Triggered by leaving 4 ghosts alive: 13. Freeze Spawn (Freeze spawned immediately in next level) ================================================ FILE: src/games/shoot/end_screen.h ================================================ #ifndef _THE_END_HEADER #define _THE_END_HEADER #include "character.h" #if defined(END_SCREEN) || defined(DANCE) void dance(Character *characterPtr); #endif #if defined(END_SCREEN) void gameCompleted(void); #endif #endif // _THE_END_HEADER ================================================ FILE: src/games/shoot/game_settings.h ================================================ /* --------------------------------------------------------------------------------------- */ // // CROSS SHOOT by Fabrizio Caruso // // Fabrizio_Caruso@hotmail.com // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from // the use of this software. // Permission is granted to anyone to use this software for non-commercial applications, // subject to the following restrictions: // 1. The origin of this software must not be misrepresented; you must not // claim that you wrote the original software. If you use this software in // a product, an acknowledgment in the product documentation would be // appreciated but is not required. // 2. Altered source versions must be plainly marked as such, and must not // be misrepresented as being the original software. // 3. This notice may not be removed or altered from any source distribution. /* --------------------------------------------------------------------------------------- */ // #define DEBUG_STRATEGY // #define DEBUG_ITEMS // #define DEBUG_END // #define DEBUG_SECRETS // #define DEBUG_LEVEL // #define DEBUG_NO_SKULL // #define SECRET_LEVEL // #define DEBUG_EASY_BOSS_LEVEL #if !defined(_GAME_SETTINGS) #define _GAME_SETTINGS #include "cross_lib.h" #include "speed_game_settings.h" #if !defined(INITIAL_LEVEL) #define INITIAL_LEVEL 1 #endif // Final level #define FINAL_LEVEL 16 #define SKULLS_NUMBER 4 #if !defined(BULLETS_NUMBER) #define BULLETS_NUMBER 5 #endif #define NUMBER_OF_GHOSTS_ON_PART_II 40 #define SECOND_ROUND_GHOST_COUNT_INCREASE 0 #define INITIAL_BULLET_COLOR _XL_WHITE #define FIRST_THRESHOLD_BULLET_COLOR _XL_GREEN #define SECOND_THRESHOLD_BULLET_COLOR _XL_RED //#define FAST_GHOST_COUNT_MAX_THRESHOLD 1 #define COLOR_BULLET_FIRST_THRESHOLD 4 #define COLOR_BULLET_SECOND_THRESHOLD 6 #define FAST_GHOST_GUN_THRESHOLD 9 #define FAST_GHOST_COUNT_MIN_THRESHOLD (FIRST_LEVEL_GHOSTS_NUMBER+4) // #define FAST_GHOST_LEVEL_THRESHOLD 4 #define MAX_GUNS 99 #define SECRET_GUNS 20 #define BULLET_GUNS 30 #define SKULL_BOMB_DAMAGE 25 #define CONFUSE_DAMAGE 20 #define MAX_TURN_BASES_LOOP 400 #define BOMBS_NUMBER 3 #if !defined(GHOSTS_NUMBER) #if defined(WIDE) #define GHOSTS_NUMBER 10 #else #define GHOSTS_NUMBER 9 #endif #endif #if !defined(GHOST_DECREASE) #define GHOST_DECREASE 1 #endif // Bonus for completing the game = number of lives left X LIVES_LEFT_BONUS #define LIVES_LEFT_BONUS 2000U #define FAST_GHOST_EXTRA_POINTS 20U #define BOSS_EXTRA_POINTS 100U #define BOSS_LEVEL_SKULL_EXTRA_POINTS 50U #define FIRST_LEVEL_GHOSTS_NUMBER 10 // 65 is the max value that does not exceed 1000 points // bonus = 20 + 25 * [level] + 15 * [ghosts left] // level 0: 20 + 25* 0 + 15*65 = 20 + 0 + 975 = 995 // level 15: 20 + 25*15 + 15*40 = 20 + 375 + 600 = 995 // level 16: 20 + 25*16 + 15*10 = 20 + 400 + 150 = 570 #define ZERO_LEVEL_GHOSTS_NUMBER 65 #if !defined(MAX_ROCKETS_NUMBER) #if XSize<=22 #define MAX_ROCKETS_NUMBER 4 #elif XSisize<=32 #define MAX_ROCKETS_NUMBER 5 #else #define MAX_ROCKETS_NUMBER 6 #endif #endif #define MISSILE_DESTROYER_TRIGGER 3 #define BOMB_DESTROYER_TRIGGER 6 #define DESTROYER_COUNT_DOWN 120 #define LIVES_NUMBER 5 #define GUNS_NUMBER 40 #define EXTRA_LIFE_THROUGH_POINTS 5000 #define HORIZONTAL_MISSILE_BONUS 30U #define VERTICAL_MISSILE_BONUS 20U #define SKULL_POINTS 50U #define CALM_DOWN_SECRET_THRESHOLD 3 #define EXTRA_POINTS_SECRET_THRESHOLD 4 #define FREEZE_SECRET_THRESHOLD 5 #define SECRET_LEVEL_THRESHOLD 7 #define FIRE_POWER_ITEM_THRESHOLD 4 #define FIRE_POWER_LEVEL_THRESHOLD 7 // #define FAST_GHOST_FIRE_POWER_THRESHOLD 3 // Points given by extra points bonus: // EXTRA_POINTS + level X EXTRA_POINTS_LEVEL_INCREASE #define EXTRA_POINTS 10U #define EXTRA_POINTS_LEVEL_INCREASE 5U #define SECRET_LEVEL_EXTRA_POINTS 25U // Points for shooting a ghost #define GHOST_VS_MISSILE 5U // If a ghost bumps into a bomb #define GHOST_VS_BOMBS_BONUS 15U #define GHOST_VS_WALL_BONUS 30U #define GHOSTS_VS_SUICIDE_BONUS 10U #define GHOSTS_LEFT_BONUS 15U // Extra points for fire charge (more bullets) #define CALM_DOWN_BONUS 10U // Extra points for fire charge (more bullets) #define FIRE_CHARGE_BONUS 20U // Extra points for the fire power (more powerful bullets) #define FIRE_POWER_BONUS 30U #define FREEZE_BONUS 15U #define BASE_LEVEL_BONUS 20U // Points gained at the end of each level (to be multipled by level) #define LEVEL_BONUS 25U #if defined(DEBUG_EASY_BOSS_LEVEL) #define MIN_SKULL_HITS 10 #define BOSS_HITS 30 #define GHOST_LIFE 5 #define FAST_GHOST_LIFE ((GHOST_LIFE)/4) #else #if defined(WIDE) #define MIN_SKULL_HITS 60 #define BOSS_HITS 254 #define GHOST_LIFE 30 #define FAST_GHOST_LIFE ((GHOST_LIFE)/2) #else #define MIN_SKULL_HITS 40 #define BOSS_HITS 170 #define GHOST_LIFE 20 #define FAST_GHOST_LIFE ((GHOST_LIFE)/4) #endif #endif #define BOSS_INDEX 2 #define GHOST_SLOW_DOWN_THRESHOLD 5 #if defined(WIDE) #define BOSS_LEVEL_SKULL_INCREASE 5 #define BOSS_LEVEL_GHOSTS_NUMBER GHOSTS_NUMBER #else #define BOSS_LEVEL_SKULL_INCREASE 4 #define BOSS_LEVEL_GHOSTS_NUMBER (GHOSTS_NUMBER-3) #endif #if !defined(INITIAL_GHOST_SLOWDOWN) #if defined(WIDE) #define INITIAL_GHOST_SLOWDOWN 27000 #else #define INITIAL_GHOST_SLOWDOWN 28000 #endif #endif #if defined(WIDE) #define FAST_GHOST_SLOWDOWN 15000 #else #define FAST_GHOST_SLOWDOWN 19000 #endif #define FIRST_HORIZONTAL_WALLS_LEVEL 6 #define FIRST_MOVING_BOMBS_LEVEL 11 #if XSize>=32 #define RELOCATE_RANGE 7 #define HORIZONTAL_WALLS_INITIAL_LENGTH 2 #define HORIZONTAL_WALLS_INCREASE_LOOP 200 #else #define RELOCATE_RANGE 5 #define HORIZONTAL_WALLS_INITIAL_LENGTH 1 #define HORIZONTAL_WALLS_INCREASE_LOOP 300 #endif #define FIRST_ROCKETS_LEVEL 7 // 8 because of check on levels after missile level // Maximum number of ghost that co-exist with rockets (in non-boss levels) #define MAX_GHOST_COUNT_FOR_ROCKETS 4 #if XSize>=32 #define HORIZONTAL_MISSILE_OFFSET 3 #else #define HORIZONTAL_MISSILE_OFFSET 2 #endif // ----------------------------------------------------------------------------------- #if GHOSTS_NUMBER>=8 #define SKULL_TRIGGER 2 #else #define SKULL_TRIGGER 2 #endif #define FIRE_CHARGE_COOL_DOWN 110 #define BOMB_CHARGE_COOL_DOWN 400 #define CALM_DOWN_COOL_DOWN 240 #define FREEZE_COOL_DOWN 320 #define FIRE_POWER_COOL_DOWN 190 #define SUPER_COOL_DOWN 160 #define CONFUSE_COOL_DOWN 800 #define SECOND_CONFUSE_COOL_DOWN 20000 #define SUICIDE_COOL_DOWN 120 #define SECOND_SUICIDE_COOL_DOWN 800 #define CALM_DOWN_EFFECT_FACTOR 50 #define EXTRA_POINTS_COOL_DOWN 2000 #define SECOND_EXTRA_POINTS_COOL_DOWN 20000 #define INVINCIBILITY_COOL_DOWN 3300 #define SECRET_LEVEL_INVINCIBILITY_COOL_DOWN 100 #define EXTRA_LIFE_COOL_DOWN 1400 #define FREEZE_COUNT_DOWN 28 #define INITIAL_FROZEN_COUNT_DOWN FROZEN_COUNT_DOWN #define CONFUSE_COUNT_DOWN 100 #define INVINCIBILITY_COUNT_DOWN 88 #define INITIAL_INVINCIBILITY_COUNT_DOWN (INVINCIBILITY_COUNT_DOWN/2) #define SUICIDE_COUNT_DOWN 200 #define DESTROYER_COOL_DOWN 32000 #define SUICIDE_BONUS 5 #define SKULL_LOOP_TRIGGER 40 #define SKULL_COUNT_DOWN 130 #if defined(WIDE) #define SKULL_MIN_SLOWDOWN 100 #define GHOST_MIN_SLOWDOWN 500 #else #define SKULL_MIN_SLOWDOWN 8000 #define GHOST_MIN_SLOWDOWN 6000 #endif #if defined(_XL_TURN_BASED) #define MAX_GHOST_LEVEL_SCALE 3 #define MAX_SKULL_LOOP_SCALE 3 #else #define MAX_GHOST_LEVEL_SCALE 1 #define MAX_SKULL_LOOP_SCALE 1 #endif #define MAX_GHOST_LEVEL (1400/MAX_GHOST_LEVEL_SCALE) #define MAX_SKULL_LOOP (2000/MAX_SKULL_LOOP_SCALE) #define TURN_BASED_MAX_LOOP MAX_SKULL_LOOP #define GHOST_LEVEL_DECREASE (MAX_GHOST_LEVEL/560) #define MISSILES_FOR_SUICIDE 5 #define SKULLS_FOR_SUPER 2 #endif // _GAME_SETTINGS ================================================ FILE: src/games/shoot/game_text.h ================================================ /* --------------------------------------------------------------------------------------- */ // // CROSS SHOOT by Fabrizio Caruso // // Fabrizio_Caruso@hotmail.com // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from // the use of this software. // Permission is granted to anyone to use this software for non-commercial applications, // subject to the following restrictions: // 1. The origin of this software must not be misrepresented; you must not // claim that you wrote the original software. If you use this software in // a product, an acknowledgment in the product documentation would be // appreciated but is not required. // 2. Altered source versions must be plainly marked as such, and must not // be misrepresented as being the original software. // 3. This notice may not be removed or altered from any source distribution. /* --------------------------------------------------------------------------------------- */ #ifndef _GAME_TEXT #define _GAME_TEXT #include "settings.h" #include "cross_lib.h" #define BULLET_IMAGE_X 10 #define BULLET_IMAGE_Y 0 #define FIRE_POWER_IMAGE_X 17 #define FIRE_POWER_IMAGE_Y 0 #define GHOST_IMAGE_X 6 #define GHOST_IMAGE_Y 0 #define PLAYER_IMAGE_X 14 #define PLAYER_IMAGE_Y 0 #define LEVEL_X (XSize-2) #define LEVEL_Y 0 void PRINT_CENTERED_ON_ROW(uint8_t row, char *Text); #define PRINT_CENTERED(Text) \ PRINT_CENTERED_ON_ROW((YSize>>1), Text) // game_stat void displayScoreStats(void); void displayStatsTitles(void); void printGunsStats(void); void printFirePowerStats(void); void displayStats(void); #if XSize>20 void printLevelStats(void); #else #define printLevelStats() #endif void printGhostCountStats(void); void printLivesStats(void); void _printCrossShoot(void); // game_text #if !defined(LESS_TEXT) void printLevel(void); void printVictoryMessage(void); // void printSecondRound(void); #endif #if !defined(NO_PRINT) void printGameOver(void); #else #define printGameOver() #endif void printDefeatMessage(void); void printStartMessage(void); #if !defined(END_SCREEN) void gameCompleted(void); #endif #if !defined(NO_PRINT) // void printPressKeyToStart(void); #define printPressKeyToStart() \ do \ { \ _XL_SET_TEXT_COLOR(_XL_WHITE); \ PRINT_CENTERED(PRESS_STRING); \ } while(0) #else #define printPressKeyToStart() #endif #if !defined(LESS_TEXT) void printKillTheSkulls(void); #else #define printKillTheSkulls() #endif #if !defined(_XL_NO_TEXT_COLOR) #define _printTopScore() \ do \ { \ _XL_PRINTD((uint8_t) ((XSize)>>1)-2, 0, 5, highScore); \ _XL_SET_TEXT_COLOR(_XL_CYAN); \ _XL_PRINT(((XSize)>>1)-4,0,"HI"); \ } while(0) #else #define _printTopScore() \ do \ { \ _XL_PRINTD((uint8_t) ((XSize)>>1)-2, 0, 5, highScore); \ } while(0) #endif #if defined(LESS_TEXT) #define handleLevelBonus(bonus) \ do \ { \ points+=(bonus); \ } while(0) #define finalScore() #define highScoreScreen() #else void handleLevelBonus(uint16_t score); // _XL_PRINTD(XSize/2-2,YSize/2,3,bonus) // #define printLevelBonus(bonus) _XL_PRINTD(XSize/2-2,YSize/2,3,bonus) // #define finalScore() _printScore(points) // #define highScoreScreen() _printScore(highScore) #endif #if XSize>=14 void printHints(void); #endif void printAchievements(void); #endif // _GAME_TEXT ================================================ FILE: src/games/shoot/ghost.h ================================================ /* --------------------------------------------------------------------------------------- */ // // CROSS SHOOT by Fabrizio Caruso // // Fabrizio_Caruso@hotmail.com // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from // the use of this software. // Permission is granted to anyone to use this software for non-commercial applications, // subject to the following restrictions: // 1. The origin of this software must not be misrepresented; you must not // claim that you wrote the original software. If you use this software in // a product, an acknowledgment in the product documentation would be // appreciated but is not required. // 2. Altered source versions must be plainly marked as such, and must not // be misrepresented as being the original software. // 3. This notice may not be removed or altered from any source distribution. /* --------------------------------------------------------------------------------------- */ #ifndef _GHOST_H #define _GHOST_H #include "character.h" uint16_t computeGhostSlowDown(void); void spawnGhost(Character *ghostPtr, uint8_t ghostIndex); void ghostDies(Character * ghostPtr); void ghostDiesAndSpawns(Character * ghostPtr); void checkBombsVsGhost(register Character * ghostPtr); void checkBombsVsSkull(register Character * skullPtr); void checkBombsVsGhosts(void); void checkBombsVsSkulls(void); uint8_t sameLocationAsAnyGhostLocation(uint8_t x, uint8_t y, Character *characterList, uint8_t length); void decreaseGhostLevel(void); void displayGhosts(void); void displayBombs(void); #endif // _GHOST_H ================================================ FILE: src/games/shoot/horizontal_missile.h ================================================ /* --------------------------------------------------------------------------------------- */ // // CROSS SHOOT by Fabrizio Caruso // // Fabrizio_Caruso@hotmail.com // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from // the use of this software. // Permission is granted to anyone to use this software for non-commercial applications, // subject to the following restrictions: // 1. The origin of this software must not be misrepresented; you must not // claim that you wrote the original software. If you use this software in // a product, an acknowledgment in the product documentation would be // appreciated but is not required. // 2. Altered source versions must be plainly marked as such, and must not // be misrepresented as being the original software. // 3. This notice may not be removed or altered from any source distribution. /* --------------------------------------------------------------------------------------- */ #ifndef _HORIZONTAL_MISSILE_H #define _HORIZONTAL_MISSILE_H #define computeArrowRange() ((level)>>2) void _handle_from_the_left(void); void _handle_from_the_right(void); void handle_horizontal_missiles(void); #endif // _HORIZONTAL_MISSILE_H ================================================ FILE: src/games/shoot/images.h ================================================ #ifndef _IMAGES_H #define _IMAGES_H #include "settings.h" #if !defined(ANIMATE_PLAYER) Image PLAYER_IMAGE; #else #if defined(USE_MEMORY_BUFFERS) || defined(USE_TINY_MEMORY_BUFFERS) || defined(USE_LIGHT_MEMORY_BUFFERS) extern Image PLAYER_DOWN_IMAGE; extern Image PLAYER_UP_IMAGE; extern Image PLAYER_RIGHT_IMAGE; extern Image PLAYER_LEFT_IMAGE; #else Image PLAYER_DOWN_IMAGE; Image PLAYER_UP_IMAGE; Image PLAYER_RIGHT_IMAGE; Image PLAYER_LEFT_IMAGE; #endif #endif #if defined(USE_MEMORY_BUFFERS) || defined(USE_TINY_MEMORY_BUFFERS) || defined(USE_LIGHT_MEMORY_BUFFERS) extern Image GHOST_IMAGE; extern Image BOMB_IMAGE; #else Image GHOST_IMAGE; Image BOMB_IMAGE; #endif Image BOSS_IMAGE; #if defined(USE_MEMORY_BUFFERS) extern Image CALM_DOWN_IMAGE; Image FIRE_CHARGE_IMAGE; extern Image BULLET_IMAGE; Image FIRE_POWER_IMAGE; extern Image SKULL_IMAGE; extern Image EXTRA_POINTS_IMAGE; extern Image HORIZONTAL_BRICK_IMAGE; extern Image VERTICAL_BRICK_IMAGE; #else Image CALM_DOWN_IMAGE; Image FIRE_CHARGE_IMAGE; Image BULLET_IMAGE; Image FIRE_POWER_IMAGE; Image SKULL_IMAGE; Image EXTRA_POINTS_IMAGE; Image HORIZONTAL_BRICK_IMAGE; Image VERTICAL_BRICK_IMAGE; #endif #if defined(USE_MEMORY_BUFFERS) extern Image LEFT_HORIZONTAL_MISSILE_IMAGE; extern Image RIGHT_HORIZONTAL_MISSILE_IMAGE; extern Image ROCKET_IMAGE; extern Image FREEZE_IMAGE; extern Image EXTRA_LIFE_IMAGE; extern Image INVINCIBILITY_IMAGE; extern Image CHASE_IMAGE; extern Image SUPER_IMAGE; extern Image CONFUSE_IMAGE; Image SUICIDE_IMAGE; extern Image BROKEN_BRICK_IMAGE; Image DESTROYER_IMAGE; Image FAST_GHOST_IMAGE; #else Image LEFT_HORIZONTAL_MISSILE_IMAGE; Image RIGHT_HORIZONTAL_MISSILE_IMAGE; Image ROCKET_IMAGE; Image FREEZE_IMAGE; Image EXTRA_LIFE_IMAGE; Image INVINCIBILITY_IMAGE; Image CHASE_IMAGE; Image SUPER_IMAGE; Image CONFUSE_IMAGE; Image SUICIDE_IMAGE; #if !defined(_XL_NO_COLOR) && defined(NO_BLINKING) Image BROKEN_BRICK_IMAGE; #endif Image DESTROYER_IMAGE; Image FAST_GHOST_IMAGE; #endif #endif // _IMAGES_H ================================================ FILE: src/games/shoot/init_images.h ================================================ #ifndef _INIT_IMAGES_H #define _INIT_IMAGES_H #define _PLAYER_DOWN_TILE _TILE_0 #define _PLAYER_UP_TILE _TILE_1 #define _PLAYER_RIGHT_TILE _TILE_2 #define _PLAYER_LEFT_TILE _TILE_3 #define _GHOST_TILE _TILE_4 #define _BOMB_TILE _TILE_5 #define _BOSS_TILE _TILE_6 #define _SKULL_TILE _TILE_7 #define _CALM_DOWN_TILE _TILE_8 #define _FIRE_POWER_TILE _TILE_9 #define _INVINCIBILITY_TILE _TILE_10 #define _BULLET_TILE _TILE_11 #define _VERTICAL_BRICK_TILE _TILE_12 #define _HORIZONTAL_BRICK_TILE _TILE_13 #define _LEFT_HORIZONTAL_MISSILE_TILE _TILE_14 #define _RIGHT_HORIZONTAL_MISSILE_TILE _TILE_15 #define _ROCKET_TILE _TILE_16 #define _FREEZE_TILE _TILE_17 #define _SUPER_TILE _TILE_18 #define _PLAYER_DOWN_TOP_TILE _TILE_19 #define _PLAYER_BOTTOM_TILE _TILE_20 #define _PLAYER_UP_TOP_TILE _TILE_21 #define _PLAYER_LEFT_MOVE_TILE _TILE_22 #define _PLAYER_RIGHT_MOVE_TILE _TILE_23 #define _DESTROYER_TILE _TILE_24 #define _EXTRA_POINTS_TILE _TILE_25 #define _FAST_GHOST_TILE _TILE_26 #define _PLAYER_COLOR _XL_CYAN #define _GHOST_COLOR _XL_WHITE #define _DEAD_GHOST_COLOR _XL_RED #define _SKULL_COLOR _XL_YELLOW #define _BOMB_COLOR _XL_RED #define _MISSILE_COLOR _XL_WHITE #define _ROCKET_COLOR _XL_WHITE #define _CALM_DOWN_COLOR _XL_GREEN #define _FIRE_CHARGE_COLOR _XL_GREEN #define _FREEZE_COLOR _XL_CYAN #define _SUPER_COLOR _XL_RED #define _FIRE_POWER_COLOR _XL_YELLOW #define _BULLET_COLOR _XL_WHITE #define _BRICK_COLOR _XL_GREEN #define _BROKEN_BRICK_COLOR _XL_YELLOW #define _EXTRA_POINTS_COLOR _XL_YELLOW #define _EXTRA_LIFE_COLOR _XL_WHITE #define _INVINCIBILITY_COLOR _XL_YELLOW #define _CONFUSE_COLOR _XL_RED #define _SUICIDE_COLOR _XL_YELLOW #define _DESTROYER_COLOR _XL_YELLOW #define _FAST_GHOST_COLOR _XL_GREEN void INIT_IMAGES(void); #endif // _INIT_IMAGES_H ================================================ FILE: src/games/shoot/item.h ================================================ /* --------------------------------------------------------------------------------------- */ // // CROSS SHOOT by Fabrizio Caruso // // Fabrizio_Caruso@hotmail.com // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from // the use of this software. // Permission is granted to anyone to use this software for non-commercial applications, // subject to the following restrictions: // 1. The origin of this software must not be misrepresented; you must not // claim that you wrote the original software. If you use this software in // a product, an acknowledgment in the product documentation would be // appreciated but is not required. // 2. Altered source versions must be plainly marked as such, and must not // be misrepresented as being the original software. // 3. This notice may not be removed or altered from any source distribution. /* --------------------------------------------------------------------------------------- */ #if !defined(_ITEM_HEADER) #define _ITEM_HEADER #include "character.h" struct ItemStruct { Character _character; void (*_effect)(void); uint16_t _coolDown; #if !defined(NO_BLINKING) uint8_t _blink; #endif }; typedef struct ItemStruct Item; void handle_count_down(uint8_t * flagPtr, uint8_t * countDownPtr); void reduceItemCoolDowns(void); void itemReached(Character * itemPtr); void relocateAwayFromWalls(Character * itemPtr); void _freezeEffect(void); void fireChargeEffect(void); void bombChargeEffect(void); void _firePowerEffect(void); void firePowerEffect(void); void calmDownEffect(void); void extraPointsEffect(void); void handle_item(register Item *itemPtr); void _freezeEffect(void); void freezeEffect(void); void extraLifeEffect(void); void _invincibilityEffect(void); void invincibilityEffect(void); void superEffect(void); void confuseEffect(void); void suicideEffect(void); void destroyerEffect(void); #define handle_freeze_count_down() handle_count_down(&freezeActive,&freeze_count_down) #define handle_invincibility_count_down() handle_count_down(&invincibilityActive, &invincibility_count_down) #define handle_confuse_count_down() handle_count_down(&confuseActive, &confuse_count_down) #define handle_destroyer_count_down() handle_count_down(&destroyerActive,&destroyer_count_down) // Standard items #define handle_calmDown_item() handle_item(&calmDown); #define handle_freeze_item() handle_item(&freeze); #define handle_firePower_item() handle_item(&firePower); #define handle_fireCharge_item() handle_item(&fireCharge); #define handle_bombCharge_item() handle_item(&bombCharge); // To be Triggered #define handle_invincibility_item() handle_item(&invincibility) #define handle_extraPoints_item() handle_item(&extraPoints); // Secret #define handle_super_item() handle_item(&super) #define handle_confuse_item() handle_item(&confuse) #define handle_suicide_item() handle_item(&suicide) #define handle_extraLife_item() handle_item(&extraLife) #define handle_destroyer_item() handle_item(&destroyer) void handle_destroyer_triggers(void); void setSecret(uint8_t secretIndex); #define SECRETS_NUMBER 16 #define EXTRA_POINTS_EFFECT_SECRET_INDEX 0 #define INVINCIBILITY_EFFECT_SECRET_INDEX 1 #define CONFUSE_EFFECT_SECRET_INDEX 2 #define SUICIDE_EFFECT_SECRET_INDEX 3 #define SUPER_EFFECT_SECRET_INDEX 4 #define EXTRA_LIFE_EFFECT_SECRET_INDEX 5 #define FIRE_CHARGE_AT_START_SECRET_INDEX 6 #define FIRE_POWER_AT_START_SECRET_INDEX 7 #define CALM_DOWN_AT_START_SECRET_INDEX 8 #define EXTRA_POINTS_AT_START_SECRET_INDEX 9 #define FREEZE_AT_START_SECRET_INDEX 10 #define MISSILE_DESTROYER_SECRET_INDEX 11 #define BOMB_DESTROYER_SECRET_INDEX 12 #define FIRE_POWER_LEVEL_SECRET_INDEX 13 #define SKULLS_ACTIVATED_SECRET_INDEX 14 #define ZERO_LEVEL_SECRET_INDEX 15 #endif // _item.h ================================================ FILE: src/games/shoot/level.h ================================================ /* --------------------------------------------------------------------------------------- */ // // CROSS SHOOT by Fabrizio Caruso // // Fabrizio_Caruso@hotmail.com // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from // the use of this software. // Permission is granted to anyone to use this software for non-commercial applications, // subject to the following restrictions: // 1. The origin of this software must not be misrepresented; you must not // claim that you wrote the original software. If you use this software in // a product, an acknowledgment in the product documentation would be // appreciated but is not required. // 2. Altered source versions must be plainly marked as such, and must not // be misrepresented as being the original software. // 3. This notice may not be removed or altered from any source distribution. /* --------------------------------------------------------------------------------------- */ #ifndef _LEVEL #define _LEVEL #include "character.h" #include "ghost.h" #if XSize12 #define SPIRAL_LOOPS (2*MIN_SIZE-21) #else #define SPIRAL_LOOPS (2*MIN_SIZE-18) #endif // DRAW HORIZONTAL AND VERTICAL LINES void DRAW_HORIZONTAL_LINE(uint8_t x, uint8_t y, uint8_t length); void DRAW_VERTICAL_LINE(uint8_t x, uint8_t y, uint8_t length); // VERTICAL AND HORIZONTAL BORDER #if !defined(TINY_GAME) #define DRAW_VERTICAL_BORDER(x) DRAW_VERTICAL_LINE(x,0,YSize-1) #if !defined(FULL_LOWER_BORDER) #define DRAW_HORIZONTAL_BORDER(y) DRAW_HORIZONTAL_LINE(0,y,XSize-1) #else #define DRAW_HORIZONTAL_BORDER(y) DRAW_HORIZONTAL_LINE(0,y,XSize) #endif #else #define DRAW_VERTICAL_BORDER(x) #define DRAW_HORIZONTAL_BORDER(y) #endif #define WALL_COLOR _XL_YELLOW #define DRAW_BORDERS() \ do \ { \ _XL_SET_TEXT_COLOR(WALL_COLOR); \ DRAW_HORIZONTAL_BORDER(0); \ DRAW_HORIZONTAL_BORDER(YSize-1); \ DRAW_VERTICAL_BORDER(0); \ DRAW_VERTICAL_BORDER(XSize-1); \ } while(0) #define PLACE_DEAD_GHOST() \ initializeCharacter(&ghosts[count],(uint8_t) (GHOSTS_NUMBER-count),(uint8_t) 1,0,&DEAD_GHOST_IMAGE); // Check XSize to avoid overflow #if XSize>48 #define ROUND_X_POS (uint8_t) ((2*j-1)*(uint8_t)(XSize/6)) #else #define ROUND_X_POS (uint8_t) ((2*j-1)*XSize/6) #endif // Check YSize to avoid overflow #if YSize>48 #define ROUND_Y_POS (uint8_t) ((2*i-1)*(uint8_t)(YSize/6)) #else #define ROUND_Y_POS (uint8_t) ((2*i-1)*YSize/6) #endif #define PLACE_ROUND_GHOST() \ initializeCharacter(&ghosts[count], \ ROUND_X_POS, \ ROUND_Y_POS, \ GHOST_LIFE ,&GHOST_IMAGE); #define PLACE_FLAT_GHOST() \ initializeCharacter(&ghosts[count],(uint8_t) (j*(XSize/5)),(i*(YSize/5)),GHOST_LIFE,&GHOST_IMAGE); #define PLACE_FLAT_GHOST_6() \ initializeCharacter(&ghosts[count],(uint8_t) (j*(XSize>>2)),(i*(YSize/5)),GHOST_LIFE,&GHOST_IMAGE); #define PLACE_NINTH_GHOST() \ initializeCharacter(&ghosts[4],(uint8_t) (XSize-4),(uint8_t) (YSize-4),GHOST_LIFE,&GHOST_IMAGE); #define ROUND_NINE_GHOSTS() \ for(i=1;i<=3;++i) \ { \ for(j=1;j<=3;++j) \ { \ if(nGhosts>count) \ { \ if(count!=4) \ { \ PLACE_ROUND_GHOST(); \ } \ else \ { \ PLACE_NINTH_GHOST(); \ } \ } \ else \ { \ PLACE_DEAD_GHOST(); \ } \ ++count; \ } \ } #define ROUND_EIGHT_GHOSTS() \ for(i=1;i<=3;++i) \ { \ for(j=1;j<=3;++j) \ { \ if(i!=2 || j !=2) \ { \ if(nGhosts>count) \ { \ PLACE_ROUND_GHOST(); \ } \ else \ { \ PLACE_DEAD_GHOST(); \ } \ ++count; \ } \ } \ } #define FLAT_EIGHT_GHOSTS() \ for(j=1;j<=4;++j) \ { \ for(i=1;i<=4;i+=3) \ { \ if(nGhosts>count) \ { \ PLACE_FLAT_GHOST(); \ } \ else \ { \ PLACE_DEAD_GHOST(); \ } \ ++count; \ } \ } #define FLAT_SIX_GHOSTS() \ for(j=1;j<=3;++j) \ { \ for(i=1;i<=4;i+=3) \ { \ if(nGhosts>count) \ { \ PLACE_FLAT_GHOST_6(); \ } \ else \ { \ PLACE_DEAD_GHOST(); \ } \ ++count; \ } \ } #define INITIALIZE_BOMBS() \ do \ { \ for(i=0;i>1), ((YSize/3)<<1),0,&BOMB_IMAGE); \ initializeCharacter(&bombs[1],XSize/3, (YSize/3),0,&BOMB_IMAGE); \ initializeCharacter(&bombs[2],((XSize/3)<<1), (YSize/3),0,&BOMB_IMAGE); \ } \ while(0) #else #define THREE_BOMBS() \ do \ { \ uint8_t rnd = _XL_RAND()&1; \ initializeCharacter(&bombs[0],XSize/3+rnd, (YSize/3)+rnd,0,&BOMB_IMAGE); \ initializeCharacter(&bombs[1],(XSize>>1)+rnd, ((YSize/3)*2)+rnd,0,&BOMB_IMAGE); \ initializeCharacter(&bombs[2],2*(XSize/3)+rnd, (YSize/3)-rnd,0,&BOMB_IMAGE); \ } \ while(0) #endif #if defined(NO_RANDOM_LEVEL) #define TWO_BOMBS() \ do \ { \ initializeCharacter(&bombs[0],(XSize>>1), ((YSize/3)),0,&BOMB_IMAGE); \ initializeCharacter(&bombs[1],(XSize>>1), ((YSize/3)<<1),0,&BOMB_IMAGE); \ } \ while(0) #else #define TWO_BOMBS() \ do \ { \ initializeCharacter(&bombs[0],(XSize>>1), ((YSize/3))+_XL_RAND()%3,0,&BOMB_IMAGE); \ initializeCharacter(&bombs[1],(XSize>>1)-1+_XL_RAND()%3, ((YSize/3)*2)-1+_XL_RAND()%3,0,&BOMB_IMAGE); \ } \ while(0) #endif #if defined(NO_RANDOM_LEVEL) #define ONE_BOMB() \ initializeCharacter(&bombs[0],(XSize>>1), (YSize>>1),0,&BOMB_IMAGE); #else #define ONE_BOMB() \ initializeCharacter(&bombs[0],(XSize>>1)+_XL_RAND()&1, (YSize>>1)+_XL_RAND()&1,0,&BOMB_IMAGE); #endif #if defined(BETWEEN_LEVEL) void spiral(register Character *characterPtr, uint8_t length); #endif void fillLevelWithCharacters(void); void updateInnerVerticalWall(void); void updateInnerHorizontalWall(void); uint8_t innerHorizontalWallLevel(void); uint8_t oneMissileLevel(void); // uint8_t rocketLevel(void); uint8_t missileLevel(void); uint8_t innerVerticalWallLevel(void); uint8_t bossLevel(void); void initializeAwayFromWall(Character * characterPtr, uint8_t x, uint8_t y, uint8_t status, Image *imagePtr); void initializeBombs(void); void setNumberOfRocketsOnScreen(void); #endif // _LEVEL ================================================ FILE: src/games/shoot/makefiles/Makefile.override ================================================ ####################################################### apple2: apple2_hgr apple2_hgr: $(ASSETS_PATH)/7x8_chars.h $(CC65_PATH)$(MYCC65) $(INCLUDE_OPTS) $(CC65_OPTS) -t apple2 \ --config $(CFG_PATH)/cc65/apple2-hgr.cfg \ -D__ALT_SLEEP $(APPLE2_GAME_OPTS) \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_APPLE2_HGR_SLOWDOWN) -DXSize=20 -DYSize=24 \ -D__ALT_PRINT -D_XL_NO_SOUND -DNO_TRANSICTION_ANIMATION \ -D__APPLE2_HGR_GRAPHICS -D__DEFAULT_CLEAR_SCREEN \ $(CROSS_LIB_PATH)/display/init_graphics/cc65/apple2/hgr.s \ $(FULL_FILES) \ --code-name LOWCODE \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c \ $(CROSS_LIB_PATH)/display/init_graphics/cc65/apple2/apple2_hgr_init_graphics.c \ -o $(BUILD_PATH)/$@.bin ifdef USE_TOOLS cp $(TOOLS_PATH)/cc65/apple2/MASTER_BOOT_ASCHASE.DSK $(BUILD_PATH)/X$(GAME_NAME)_$@.dsk java -jar $(TOOLS_PATH)/cc65/apple2/ac.jar -as $(BUILD_PATH)/X$(GAME_NAME)_$@.dsk aschase < $(BUILD_PATH)/$@.bin rm -rf $(BUILD_PATH)/$@.bin else mv $(BUILD_PATH)/$@.bin $(BUILD_PATH)/X$(GAME_NAME)_$@.bin endif apple2enh: apple2enh_hgr apple2enh_hgr: $(ASSETS_PATH)/7x8_chars.h $(CC65_PATH)$(MYCC65) $(INCLUDE_OPTS) $(CC65_OPTS) -t apple2 \ --config $(CFG_PATH)/cc65/apple2-hgr.cfg \ -D__ALT_SLEEP $(APPLE2_GAME_OPTS) -D_XL_NO_SOUND \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_APPLE2ENH_HGR_SLOWDOWN) -DXSize=20 -DYSize=24 \ -D__ALT_PRINT -DNO_TRANSICTION_ANIMATION \ -D__APPLE2_HGR_GRAPHICS -D__DEFAULT_CLEAR_SCREEN \ $(CROSS_LIB_PATH)/display/init_graphics/cc65/apple2/hgr.s \ $(FULL_FILES) \ --code-name LOWCODE \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c \ $(CROSS_LIB_PATH)/display/init_graphics/cc65/apple2/apple2_hgr_init_graphics.c \ -o $(BUILD_PATH)/$@.bin ifdef USE_TOOLS cp $(TOOLS_PATH)/cc65/apple2/MASTER_BOOT_ASCHASE.DSK $(BUILD_PATH)/X$(GAME_NAME)_$@.dsk java -jar $(TOOLS_PATH)/cc65/apple2/ac.jar -as $(BUILD_PATH)/X$(GAME_NAME)_$@.dsk aschase < $(BUILD_PATH)/$@.bin rm -rf $(BUILD_PATH)/$@.bin else mv $(BUILD_PATH)/$@.bin $(BUILD_PATH)/X$(GAME_NAME)_$@.bin endif vic20: vic20_exp_16k vic20_exp_16k: $(ASSETS_PATH)/cc65_udc_arcade_v2.s $(CC65_PATH)$(MYCC65) $(INCLUDE_OPTS) -Or -Cl -t vic20 -m mapfile.txt \ --config $(CFG_PATH)/cc65/vic20-16k_CODE2_GFX_ALT_V2.cfg \ -D__CONIO_GRAPHICS -D__VIC20_EXP_16K -DEXTRA_TITLE -D__ALT_SLEEP \ -D_XL_SLOW_DOWN_FACTOR=500 -DGHOSTS_NUMBER=8 \ -DTRANSITION_ANIMATION \ $(ASSETS_PATH)/cc65_udc_arcade_v2.s \ $(BASIC_CROSS_LIB_FILES) \ $(SOURCE_PATH)/split_files/move_player.c \ $(SOURCE_PATH)/split_files/ghost.c $(SOURCE_PATH)/split_files/level.c $(SOURCE_PATH)/split_files/character.c $(SOURCE_PATH)/split_files/game_text.c \ $(SOURCE_PATH)/split_files/main.c \ $(SOURCE_PATH)/split_files/init_images.c \ $(SOURCE_PATH)/split_files/strategy.c \ $(SOURCE_PATH)/split_files/item.c $(SOURCE_PATH)/split_files/bullet.c \ $(CROSS_LIB_PATH)/sound/cc65/vic20/vic20_sounds.c \ $(CROSS_LIB_PATH)/sleep/sleep_macros.c \ --code-name CODE2 \ $(SOURCE_PATH)/split_files/horizontal_missile.c $(SOURCE_PATH)/split_files/rocket.c $(SOURCE_PATH)/split_files/skull.c \ $(CROSS_LIB_PATH)/display/init_graphics/cc65/vic20/vic20_init_graphics.c \ $(SOURCE_PATH)/split_files/end_screen.c $(SOURCE_PATH)/split_files/sleep.c \ -o $(BUILD_PATH)/X$(GAME_NAME)_$@.prg # c16: c16_32k # plus4: c16_32k # c16_32k: $(ASSETS_PATH)/cc65_udc_arcade_64_chars.s # $(CC65_PATH)$(MYCC65) $(INCLUDE_OPTS) -Or -Cl -t c16 \ # --config $(CFG_PATH)/cc65/c16-32k_GFX_64chars.cfg \ # -DEXTRA_TITLE -DTRANSITION_ANIMATION \ # -D__ALT_PRINT \ # -D__MEMORY_MAPPED_GRAPHICS \ # -D__DEFAULT_CLEAR_SCREEN \ # -D__ALT_SLEEP \ # -D_XL_SLOW_DOWN_FACTOR=300 \ # -DDANCE -D__UDG_BASE_FACTOR=23 \ # $(CROSS_LIB_PATH)/display/init_graphics/cc65/c264/c16_linked_redefined_chars_init_graphics.c \ # $(CROSS_LIB_PATH)/sound/cc65/c264/c264_sounds.c \ # $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c \ # $(FULL_FILES) \ # $(ASSETS_PATH)/cc65_udc_arcade_64_chars.s \ # -o $(BUILD_PATH)/X$(GAME_NAME)_c16_32k.prg # creativision: creativision_32k creativision: $(ASSETS_PATH)/8x8_chars.h $(CC65_PATH)$(MYCC65) $(INCLUDE_OPTS) -Or -t creativision \ -D__CREATIVISION__ \ -D__ALT_SLEEP \ -D__VDP_MODE1_GRAPHICS -DGHOSTS_NUMBER=8 -DBULLETS_NUMBER=4 -DLESS_TEXT -DTRANSITION_ANIMATION \ -D_XL_SLOW_DOWN_FACTOR=300 -DUSE_LIGHT_MEMORY_BUFFERS -DNO_BLINKING -DEXTRA_TITLE \ --config $(CFG_PATH)/cc65/creativision-32k.cfg \ $(SOURCE_PATH)/memory/creativision_memory_light.s \ $(CROSS_LIB_PATH)/sound/cc65/creativision/creativision_sounds.c \ $(FULL_FILES) \ $(CROSS_LIB_PATH)/display/init_graphics/cc65/creativision/creativision_color_init_graphics.c \ -o $(BUILD_PATH)/X$(GAME_NAME)_$@_32k.bin supervision: $(ASSETS_PATH)/cc65_udc.s $(CC65_PATH)$(MYCC65) $(INCLUDE_OPTS) -Or -Cl -t supervision -DEXTRA_TITLE \ --config $(CFG_PATH)/cc65/supervision-16k_GFX_3.cfg \ $(ASSETS_PATH)/cc65_udc.s \ -D__ALT_PRINT -D__ALT_SLEEP \ -D__BIT_MAPPED_4_GRAPHICS \ -D__DEFAULT_CLEAR_SCREEN -D_XL_SLOW_DOWN_FACTOR=2500 -DTRANSITION_ANIMATION \ -DNO_EXTRA_TITLE \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c \ $(FULL_ONLY_FILES) \ --code-name CODE0 \ $(LIGHT_FILES) \ $(CROSS_LIB_PATH)/display/init_graphics/cc65/supervision/supervision_init_graphics.c \ -o $(BUILD_PATH)/X$(GAME_NAME)_supervision.sv ifdef USE_TOOLS gamate: $(ASSETS_PATH)/cc65_gamate_tiles.s $(TOOLS_PATH)/cc65/gamate/gamate-fixcart$(COMPILEDEXT) else gamate: $(ASSETS_PATH)/cc65_gamate_tiles.s endif $(CC65_PATH)$(MYCC65) $(INCLUDE_OPTS) -O -t gamate --config $(CFG_PATH)/cc65/gamate_reduced_stack_2.cfg \ -D_XL_SLOW_DOWN_FACTOR=1000 -DNO_BLINKING \ -D__ALT_SLEEP -DGHOSTS_NUMBER=5 -DBULLETS_NUMBER=3 -D_XL_NO_COLOR \ -DNO_DISPLAY_LEVEL_ANIMATION \ -DLESS_TEXT -D__NO_COLOR_INIT \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS \ $(CROSS_LIB_PATH)/sound/cc65/gamate/gamate_sounds.c \ -DNO_HINTS -DNO_SECRET_ANIMATION \ -DNO_CONTROL_INSTRUCTIONS -DNO_EXTRA_TITLE -DNO_BONUS_ANIMATION \ $(FULL_FILES) \ $(ASSETS_PATH)/cc65_gamate_tiles.s \ -o $(BUILD_PATH)/X$(GAME_NAME)_gamate.bin ifdef USE_TOOLS $(TOOLS_PATH)/cc65/gamate/gamate-fixcart$(COMPILEDEXT) $(BUILD_PATH)/X$(GAME_NAME)_$@.bin endif ################################################################# # LCC1802 ################################################################# # ------------------------------------------------------------------------------------------ # LCC1802 # -target=xr18CX # https://sites.google.com/site/lcc1802/downloads/Quarrantine.zip?attredirects=0&d=1 # LCC1802_OPTS ?= -target=xr18CX "-Wf-volatile" -O "-Wp-D nofloats" "-Wa-D LCCNOLONG" "-Wf-mulcall" $(GLOBAL_OPTS) # BASIC_OPTS ?= $(LCC1802_OPTS) "-Wa-D LCCCX=1" # COMX_OPTS ?= $(BASIC_OPTS) "-Wa-D CODELOC=0x4401" # PECOM_OPTS ?= $(BASIC_OPTS) "-Wa-D CODELOC=0x201" # TMC600_OPTS ?= $(BASIC_OPTS) "-Wa-D CODELOC=0x6300" # CIDELSA_OPTS ?= $(LCC1802_OPTS) "-Wa-D CODELOC=0" "-Wa-D NOFILLBSS=1" "-Wf-mulcall" # DRACO_32K_OPTS ?= $(CIDELSA_OPTS) "-Wa-D DATALOC=0x8000" "-Wa-D STACKLOC=0x83ff" # DRACO_16K_OPTS ?= $(CIDELSA_OPTS) "-Wa-D DATALOC=0x4000" "-Wa-D STACKLOC=0x43ff" # ALTAIR_24K_OPTS ?= $(CIDELSA_OPTS) "-Wa-D DATALOC=0x6000" "-Wa-D STACKLOC=0x60ff" # ALTAIR_12K_OPTS ?= $(CIDELSA_OPTS) "-Wa-D DATALOC=0x3000" "-Wa-D STACKLOC=0x30ff" # DESTROYER_12K_OPTS ?= $(CIDELSA_OPTS) "-Wa-D DATALOC=0x3000" "-Wa-D STACKLOC=0x30ff" # DESTROYER_8K_OPTS ?= $(CIDELSA_OPTS) "-Wa-D DATALOC=0x2000" "-Wa-D STACKLOC=0x20ff" # MICROBOARD_OPTS ?= $(CIDELSA_OPTS) "-Wa-D DATALOC=0x8000" "-Wa-D STACKLOC=0x9fff" # MICROBOARD_PAL_2_OPTS ?= $(MICROBOARD_OPTS) "-DPAL=2" ################################################################################ # COMX_REDUCED_EXTRA_FILES ?= \ # $(CROSS_LIB_PATH)/display/init_graphics/lcc1802/comx/comx_init_graphics.c \ # $(CROSS_LIB_PATH)/display/alt_print/comx_alt_print.c \ # $(CROSS_LIB_PATH)/sleep/sleep_macros.c # COMX_EXTRA_FILES ?= \ # $(COMX_REDUCED_EXTRA_FILES) \ # $(CROSS_LIB_PATH)/sound/lcc1802/comx/comx_sounds.c # COMX_EXTRA_FILES_WTIH_END_SCREEN ?= \ # $(COMX_EXTRA_FILES) \ # $(SOURCE_PATH)/end_screen.c # tiny_combo.c: # cat \ # $(TINY_FILES) \ # > $(SOURCE_PATH)/../tiny_combo.c # light_combo.c: tiny_combo.c # cat \ # $(SOURCE_PATH)/../tiny_combo.c \ # $(LIGHT_ONLY_FILES) \ # > $(SOURCE_PATH)/../light_combo.c # rm -rf $(SOURCE_PATH)/../tiny_combo.c # full_combo.c: light_combo.c # cat \ # $(SOURCE_PATH)/../light_combo.c \ # $(FULL_ONLY_FILES) \ # > $(SOURCE_PATH)/../full_combo.c # rm -rf $(SOURCE_PATH)/../light_combo.c # tiny_combo_rand.c: tiny_combo.c # cat \ # $(CROSS_LIB_PATH)/rand/rand_lcc1802_devkit_include.c \ # $(SOURCE_PATH)/../tiny_combo.c \ # > $(SOURCE_PATH)/../tiny_combo_rand.c # rm $(SOURCE_PATH)/../tiny_combo.c # light_combo_rand.c: light_combo.c # cat \ # $(CROSS_LIB_PATH)/rand/rand_lcc1802_devkit_include.c \ # $(SOURCE_PATH)/../light_combo.c \ # > $(SOURCE_PATH)/../light_combo_rand.c # rm -rf $(SOURCE_PATH)/../light_combo.c # full_combo_rand.c: full_combo.c # cat \ # $(CROSS_LIB_PATH)/rand/rand_lcc1802_devkit_include.c \ # $(SOURCE_PATH)/../full_combo.c \ # > $(SOURCE_PATH)/../full_combo_rand.c # rm -rf $(SOURCE_PATH)/../full_combo.c # reduced_full_lcc1802_combo.c: full_combo_rand.c # cat \ # $(COMX_REDUCED_EXTRA_FILES) \ # $(SOURCE_PATH)/../full_combo_rand.c > $(SOURCE_PATH)/../reduced_full_lcc1802_combo.c # full_lcc1802_combo.c: full_combo_rand.c # cat \ # $(COMX_EXTRA_FILES_WTIH_END_SCREEN) \ # $(SOURCE_PATH)/../full_combo_rand.c > $(SOURCE_PATH)/../full_lcc1802_combo.c # clean_combo_files: # rm -rf $(SOURCE_PATH)/../full_combo_rand.c # rm -rf $(SOURCE_PATH)/../full_lcc1802_combo.c # rm -rf $(SOURCE_PATH)/../reduced_full_lcc1802_combo.c # rm -rf $(SOURCE_PATH)/../reduced_full_lcc1802_color_combo.c # rm -rf $(SOURCE_PATH)/../reduced_full_lcc1802_micro_combo.c # LCC1802_BASIC_C_OPTS ?= \ # -D__LCC1802__ \ # -D__NO_COLOR_INIT \ # -D__ALT_PRINT # LCC1802_C_OPTS = \ # $(LCC1802_BASIC_C_OPTS) \ # -D__ALT_SLEEP \ # REDUCED_LCC1802_C_OPTS = \ # $(LCC1802_BASIC_C_OPTS) \ # -D_XL_NO_SLEEP -D_XL_NO_SOUND \ # -DNO_RANDOM_LEVEL # -DLESS_TEXT -DNO_HINTS \ # $(REDUCED_LCC1802_C_OPTS) \ # -DGHOSTS_NUMBER=7 \ # $(SOURCE_PATH)/../reduced_full_lcc1802_combo.c # mv $(SOURCE_PATH)/../../a.hex $(BUILD_PATH)/X$(GAME_NAME)_$@.hex _full_comx: _comx _comx_buffered: reduced_full_lcc1802_color_combo.c $(ASSETS_PATH)/6x9_chars.h $(LCC1802) $(INCLUDE_OPTS) -I$(SOURCE_PATH) $(COMX_OPTS) \ -D__COMX__ $(COMX_GAME_OPTS) \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_COMX_SLOWDOWN) \ $(LCC1802_COLOR_C_OPTS) \ -DSIMPLE_STRATEGY -D_XL_NO_SLEEP -D_XL_NO_SOUND \ -DNO_BLINKING -DTINY_TEXT -DNO_TRANSICTION_ANIMATION \ -DGHOSTS_NUMBER=6 \ -DLESS_TEXT -DNO_HINTS -DNO_INITIAL_SCREEN \ $(SOURCE_PATH)/../reduced_full_lcc1802_color_combo.c # rm -rf $(SOURCE_PATH)/../reduced_full_lcc1802_color_combo.c mv $(SOURCE_PATH)/../../a.hex $(BUILD_PATH)/X$(GAME_NAME)_$@.hex comx_buffered: \ _comx_buffered \ clean_combo_files # -D__LCC1802_UNBUFFERED _comx: reduced_full_lcc1802_color_combo.c $(ASSETS_PATH)/6x9_chars.h $(LCC1802) $(INCLUDE_OPTS) -I$(SOURCE_PATH) $(COMX_OPTS) -D__LCC1802_UNBUFFERED \ -D__COMX__ $(COMX_GAME_OPTS) \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_COMX_SLOWDOWN) \ $(LCC1802_COLOR_C_OPTS) \ -DSIMPLE_STRATEGY -D_XL_NO_SLEEP -D_XL_NO_SOUND \ -DNO_BLINKING -DTINY_TEXT -DNO_TRANSICTION_ANIMATION \ -DGHOSTS_NUMBER=7 \ -DLESS_TEXT -DNO_HINTS -DNO_INITIAL_SCREEN \ $(SOURCE_PATH)/../reduced_full_lcc1802_color_combo.c # rm -rf $(SOURCE_PATH)/../reduced_full_lcc1802_color_combo.c mv $(SOURCE_PATH)/../../a.hex $(BUILD_PATH)/X$(GAME_NAME)_$@.hex comx: \ _comx \ clean_combo_files # Interrupt-driver graphics _comx_int: reduced_full_lcc1802_color_combo.c $(ASSETS_PATH)/6x9_chars.h $(LCC1802) $(INCLUDE_OPTS) -I$(SOURCE_PATH) $(COMX_OPTS) -DVIS_INT \ -D__COMX__ \ $(COMX_GAME_OPTS) \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_COMX_SLOWDOWN) \ $(LCC1802_COLOR_C_OPTS) \ -DSIMPLE_STRATEGY -D_XL_NO_SLEEP -D_XL_NO_SOUND \ -DNO_BLINKING -DTINY_TEXT -DNO_TRANSICTION_ANIMATION \ -DGHOSTS_NUMBER=6 \ -DLESS_TEXT -DNO_HINTS -DNO_INITIAL_SCREEN \ $(SOURCE_PATH)/../reduced_full_lcc1802_color_combo.c # rm -rf $(SOURCE_PATH)/../reduced_full_lcc1802_color_combo.c mv $(SOURCE_PATH)/../../a.hex $(BUILD_PATH)/X$(GAME_NAME)_$@.hex comx_int: \ _comx_int \ clean_combo_files _comx_ntsc: reduced_full_lcc1802_color_combo.c $(ASSETS_PATH)/6x8_chars.h $(LCC1802) $(INCLUDE_OPTS) -I$(SOURCE_PATH) $(COMX_OPTS) \ -D__COMX__ -DNTSC $(COMX_GAME_OPTS) \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_COMX_SLOWDOWN) \ $(LCC1802_COLOR_C_OPTS) \ -DSIMPLE_STRATEGY -D_XL_NO_SLEEP -D_XL_NO_SOUND \ -DNO_BLINKING -DTINY_TEXT -DNO_TRANSICTION_ANIMATION \ -DGHOSTS_NUMBER=6 \ -DLESS_TEXT -DNO_HINTS -DNO_INITIAL_SCREEN \ $(SOURCE_PATH)/../reduced_full_lcc1802_color_combo.c # rm -rf $(SOURCE_PATH)/../reduced_full_lcc1802_color_combo.c mv $(SOURCE_PATH)/../../a.hex $(BUILD_PATH)/X$(GAME_NAME)_$@.hex comx_ntsc: \ _comx_ntsc \ clean_combo_files _full_pecom: _pecom _pecom: reduced_full_lcc1802_color_combo.c $(ASSETS_PATH)/6x9_chars.h $(LCC1802) $(INCLUDE_OPTS) -I$(SOURCE_PATH) $(PECOM_OPTS) \ -D__PECOM__ $(PECOM_GAME_OPTS) \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_PECOM_SLOWDOWN) \ $(PECOM_GAME_OPTS) \ $(LCC1802_COLOR_C_OPTS) \ -DSIMPLE_STRATEGY -D_XL_NO_SLEEP -D_XL_NO_SOUND \ -DNO_BLINKING -DTINY_TEXT -DNO_TRANSICTION_ANIMATION \ -DGHOSTS_NUMBER=7 \ -DLESS_TEXT -DNO_HINTS -DNO_INITIAL_SCREEN \ $(SOURCE_PATH)/../reduced_full_lcc1802_color_combo.c # rm -rf $(SOURCE_PATH)/../reduced_full_lcc1802_color_combo.c mv $(SOURCE_PATH)/../../a.hex $(BUILD_PATH)/X$(GAME_NAME)_$@.hex pecom: \ _pecom \ clean_combo_files _micro_pal2: reduced_full_lcc1802_micro_combo.c $(ASSETS_PATH)/6x9_chars.h $(LCC1802) $(INCLUDE_OPTS) -I$(SOURCE_PATH) $(MICROBOARD_PAL_2_OPTS) \ -D__MICRO__ \ -D__COMX_COLOR_GRAPHICS \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_MICRO_SLOWDOWN) \ $(MICRO_GAME_OPTS) \ $(LCC1802_COLOR_C_OPTS) \ -DSIMPLE_STRATEGY -D_XL_NO_SLEEP -D_XL_NO_SOUND \ -DNO_BLINKING -DTINY_TEXT -DNO_TRANSICTION_ANIMATION \ -DGHOSTS_NUMBER=7 \ -DLESS_TEXT -DNO_HINTS -DNO_INITIAL_SCREEN \ $(SOURCE_PATH)/../reduced_full_lcc1802_micro_combo.c # rm -rf $(SOURCE_PATH)/../reduced_full_lcc1802_micro_combo.c mv $(SOURCE_PATH)/../../a.hex $(BUILD_PATH)/X$(GAME_NAME)_$@.hex _micro_pal1: reduced_full_lcc1802_micro_combo.c $(ASSETS_PATH)/6x8_chars.h $(LCC1802) $(INCLUDE_OPTS) -I$(SOURCE_PATH) $(MICROBOARD_PAL_1_OPTS) \ -D__MICRO__ \ -D__COMX_COLOR_GRAPHICS \ $(MICRO_GAME_OPTS) \ \ $(LCC1802_COLOR_C_OPTS) \ -DSIMPLE_STRATEGY -D_XL_NO_SLEEP -D_XL_NO_SOUND \ -DNO_BLINKING -DTINY_TEXT -DNO_TRANSICTION_ANIMATION \ -DGHOSTS_NUMBER=7 \ -DLESS_TEXT -DNO_HINTS -DNO_INITIAL_SCREEN \ $(SOURCE_PATH)/../reduced_full_lcc1802_micro_combo.c # rm -rf $(SOURCE_PATH)/../reduced_full_lcc1802_micro_combo.c mv $(SOURCE_PATH)/../../a.hex $(BUILD_PATH)/X$(GAME_NAME)_$@.hex _micro_ntsc1: reduced_full_lcc1802_micro_combo.c $(ASSETS_PATH)/6x8_chars.h $(LCC1802) $(INCLUDE_OPTS) -I$(SOURCE_PATH) $(MICROBOARD_NTSC1_OPTS) \ -D__MICRO__ -DNTSC \ -D__COMX_COLOR_GRAPHICS \ $(MICRO_GAME_OPTS) \ \ $(LCC1802_COLOR_C_OPTS) \ -DSIMPLE_STRATEGY -D_XL_NO_SLEEP -D_XL_NO_SOUND \ -DNO_BLINKING -DTINY_TEXT -DNO_TRANSICTION_ANIMATION \ -DGHOSTS_NUMBER=7 \ -DLESS_TEXT -DNO_HINTS -DNO_INITIAL_SCREEN \ $(SOURCE_PATH)/../reduced_full_lcc1802_micro_combo.c # rm -rf $(SOURCE_PATH)/../reduced_full_lcc1802_micro_combo.c mv $(SOURCE_PATH)/../../a.hex $(BUILD_PATH)/X$(GAME_NAME)_$@.hex micro_pal1: \ _micro_pal1 \ clean_combo_files micro_ntsc1: \ _micro_ntsc1 \ clean_combo_files micro_pal2: \ _micro_pal2 \ clean_combo_files _micro: _micro_pal2 micro: \ _micro \ clean_combo_files # _cidelsa_draco: full_lcc1802_combo.c # $(LCC1802) $(INCLUDE_OPTS) -I$(SOURCE_PATH) $(DRACO_32K_OPTS) -DEXTRA_TITLE \ # -D__CIDELSA__ -D__DRACO__ -DNO_INITIAL_SCREEN -DNO_HINTS -DLESS_TEXT \ # \ # -D_XL_NO_COLOR -D__MEMORY_MAPPED_GRAPHICS \ # -DNO_BLINKING \ # $(LCC1802_C_OPTS) -D_XL_NO_SLEEP -D_XL_NO_SOUND \ # -DGHOSTS_NUMBER=8 \ # $(SOURCE_PATH)/../full_lcc1802_combo.c # mv $(SOURCE_PATH)/../../a.hex $(BUILD_PATH)/X$(GAME_NAME)_cidelsa_draco_32K.hex # cidelsa: \ # _cidelsa \ # clean_combo_files # comx_targets: comx # pecom_targets: pecom # tmc600_targets: tmc600_37k # cidelsa_targets: cidelsa ##################### # v2 # -DEXTRA_TITLE # -pragma-define:REGISTER_SP=49151 zx81_no_gfx_16k: $(Z88DK_PATH)$(MYZ88DK) +zx81 $(Z88DK_OPTS) \ $(INCLUDE_OPTS) \ -pragma-define:ZX_CHAR_XLATE_MODE=1 \ --opt-code-size -D_XL_SLOW_DOWN_FACTOR=0 \ -vn $(ZX81_NO_GFX_GAME_OPTS) -D__NO_INIT_GRAPHICS \ -D__ZX81__ -D_XL_NO_JOYSTICK \ -D__CONIO_GRAPHICS \ -lndos \ -create-app -o $(BUILD_PATH)/X$(GAME_NAME)_$@.prg \ $(FULL_FILES) rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.prg ############################# # SC3000 # sc3000: sc3000_32k # sc3000_32k: $(ASSETS_PATH)/z88dk_xchase.asm # $(Z88DK_PATH)$(MYZ88DK) +sc3000 $(SCCZ80_OPTS) -DEXTRA_TITLE \ # $(INCLUDE_OPTS) \ # -D__SC3000__ \ # -pragma-define:REGISTER_SP=0xFFFF \ # -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_SC3000_SLOWDOWN) \ # -D__BIT_BANG_SOUND \ # \ # -DZ88DK_JOYSTICK \ # -D__CONIO_GRAPHICS \ # -vn -lndos -create-app -Cz--audio \ # -pragma-define:CRT_ORG_BSS=0x8000 \ # \ # -clib=default -pragma-redirect:fputc_cons=fputc_cons_generic \ # $(CROSS_LIB_PATH)/display/init_graphics/z88dk/udg/udg_init_graphics.c \ # $(ASSETS_PATH)/z88dk_xchase.asm \ # -o $(BUILD_PATH)/X$(GAME_NAME)_sc3000_32k.prg \ # $(FULL_FILES) # rm -rf $(BUILD_PATH)/X$(GAME_NAME)_sc3000_32k.prg # rm -rf $(BUILD_PATH)/X$(GAME_NAME)_sc3000_32k.tap # phc25_no_gfx: # $(Z88DK_PATH)$(MYZ88DK) +phc25 $(SCCZ80_OPTS) $(INCLUDE_OPTS) \ # -D__PHC25__ -pragma-define:CLIB_DISABLE_MODE1=1 -pragma-define:CLIB_DISABLE_MODE2=1 -D__PSG_SOUND \ # -DXSize=32 \ # -DYSize=16 \ # -D__NO_SCREEN_COLOR_INIT -D__CONIO_GRAPHICS -D_XL_NO_COLOR -D_XL_NO_UDG $(PHC25_NO_GFX_GAME_OPTS) \ # -D_XL_NO_JOYSTICK -D__NO_INIT_GRAPHICS \ # $(FULL_FILES) \ # -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_PHC25_SLOWDOWN) \ # $(CROSS_LIB_PATH)/sound/z88dk/psg/ay-3-8910_psg_sounds.c \ # -o$(BUILD_PATH)/X$(GAME_NAME)_$@.phc -create-app ================================================ FILE: src/games/shoot/memory/c16_memory.s ================================================ ; TAPBUF $0333-03F2 819-1010 Cassette tape buffer ; WRLEN $03F3-03F4 1011-1012 Length of data to be written to tape ; RDCNT $03F5-03F6 1013-1014 Length of data to be read from tape ; INPQUE $03F7-0436 1015-1078 RS-232 input queue ; ESTARL $0437-0454 1079-1108 ; ESTAKH $0455-0472 1109-1138 .export _ghosts; _ghosts = $333 .export _bombs; _bombs = _ghosts + $28 .export _player; _player = _bombs + $14 .export _ghostSlowDown; _ghostSlowDown = _player + $5 .export _points; _points = _ghostSlowDown + $2 .export _highScore; _highScore = _points + $2 .export _lives; _lives = _highScore + $2 .export _level; _level = _lives + $1 .export _skull; _skull = _level + $1 .export _bullet; _bullet = _skull + $5 .export _powerUp; _powerUp = _bullet + $5 .export _powerUp2; _powerUp2 = _powerUp + $A .export _gun; _gun = _powerUp2 + $A .export _extraPoints; _extraPoints = _gun + $A .export _rockets; _rockets = _extraPoints + $A .export _freeze; _freeze = _rockets + $14 .export _invincibility; _invincibility = _freeze + $A .export _extraLife; _extraLife = _invincibility + $A .export _super; _super = _extraLife + $A .export _confuse; _confuse = _super + $A .export _zombie; _zombie = _confuse + $A .export _chase; _chase = _zombie + $A .export _ghostCount; _ghostCount = _chase + $A .export _ghostLevel; _ghostLevel = _ghostCount + $1 .export _leftHorizontalMissile; _leftHorizontalMissile = _ghostLevel + $2 .export _rightHorizontalMissile; _rightHorizontalMissile = _leftHorizontalMissile + $5 .export _chasingBullet; _chasingBullet = _rightHorizontalMissile + $5 .export _invincibility_count_down; _invincibility_count_down = _chasingBullet + $5 .export _confuse_count_down; _confuse_count_down = _invincibility_count_down + $2 .export _zombie_count_down; _zombie_count_down = _confuse_count_down + $2 .export _strategyArray; _strategyArray = _zombie_count_down + $2 ; 241 .export _freeze_count_down; _freeze_count_down = _strategyArray + $8 .export _skullSlowDown; _skullSlowDown = _freeze_count_down + $2 .export _skullXCountDown; _skullXCountDown = _skullSlowDown + $2 .export _skullYCountDown; _skullYCountDown = _skullXCountDown + $1 .export _bulletDirection; _bulletDirection = _skullYCountDown + $1 .export _chasedEnemyPtr; _chasedEnemyPtr = _bulletDirection + $1 .export _chasedByGhosts; _chasedByGhosts = _chasedEnemyPtr + $2 .export _rockets_x; _rockets_x = _chasedByGhosts + $2 .export _extraLife_present_on_level; _extraLife_present_on_level = _rockets_x + $4 .export _super_present_on_level; _super_present_on_level = _extraLife_present_on_level + $1 .export _zombie_present_on_level; _zombie_present_on_level = _super_present_on_level + $1 .export _bases; _bases = _zombie_present_on_level + $1 .export _arrowRange; _arrowRange = _bases + $1 .export _all_skulls_killed_in_completed_levels; _all_skulls_killed_in_completed_levels = _arrowRange + $1 .export _bases_in_completed_levels; _bases_in_completed_levels = _all_skulls_killed_in_completed_levels + $1 .export _horizWallsLength; _horizWallsLength = _bases_in_completed_levels + $1 .export _invincibilityActive; _invincibilityActive = _horizWallsLength + $1 .export _confuseActive; _confuseActive = _invincibilityActive + $1 .export _zombieActive; _zombieActive = _confuseActive + $1 .export _verticalWallY; _verticalWallY = _zombieActive + $1 .export _verticalWallLength; _verticalWallLength = _verticalWallY + $1 .export _playerDirection; _playerDirection = _verticalWallLength + $1 .export _freezeActive; _freezeActive = _playerDirection + $1 .export _extraLifeThroughPointsCounter; _extraLifeThroughPointsCounter = _freezeActive + $1 .export _playerFire; _playerFire = _extraLifeThroughPointsCounter + $1 .export _guns; _guns = _playerFire + $1 .export _skullActive; _skullActive = _guns + $1 .export _loop; _loop = $200 .export _playerBlink; _playerBlink = _loop + $2 .export _arrowYPosition; _arrowYPosition = _playerBlink + $1 .export _PLAYER_DOWN_IMAGE; _PLAYER_DOWN_IMAGE = _arrowYPosition + $1 .export _PLAYER_UP_IMAGE; _PLAYER_UP_IMAGE = _PLAYER_DOWN_IMAGE + $2 .export _PLAYER_LEFT_IMAGE; _PLAYER_LEFT_IMAGE = _PLAYER_UP_IMAGE + $2 .export _PLAYER_RIGHT_IMAGE; _PLAYER_RIGHT_IMAGE = _PLAYER_LEFT_IMAGE + $2 .export _GHOST_IMAGE; _GHOST_IMAGE = _PLAYER_RIGHT_IMAGE + $2 .export _BOMB_IMAGE; _BOMB_IMAGE = _GHOST_IMAGE + $2 .export _ind; _ind = _BOMB_IMAGE + $2 .export _POWERUP_IMAGE; _POWERUP_IMAGE = _ind + 1 .export _BULLET_IMAGE; _BULLET_IMAGE = _POWERUP_IMAGE + $2 .export _GUN_IMAGE; _GUN_IMAGE = _BULLET_IMAGE + $2 .export _SKULL_IMAGE; _SKULL_IMAGE = _GUN_IMAGE + $2 .export _EXTRA_POINTS_IMAGE; _EXTRA_POINTS_IMAGE = _SKULL_IMAGE + $2 .export _HORIZONTAL_BRICK_IMAGE; _HORIZONTAL_BRICK_IMAGE = _EXTRA_POINTS_IMAGE + $2 .export _VERTICAL_BRICK_IMAGE; _VERTICAL_BRICK_IMAGE = _HORIZONTAL_BRICK_IMAGE + $2 .export _LEFT_HORIZONTAL_MISSILE_IMAGE; _LEFT_HORIZONTAL_MISSILE_IMAGE = _VERTICAL_BRICK_IMAGE + $2 .export _RIGHT_HORIZONTAL_MISSILE_IMAGE; _RIGHT_HORIZONTAL_MISSILE_IMAGE = _LEFT_HORIZONTAL_MISSILE_IMAGE + $2 .export _ROCKET_IMAGE; _ROCKET_IMAGE = _RIGHT_HORIZONTAL_MISSILE_IMAGE + $2 .export _FREEZE_IMAGE; _FREEZE_IMAGE = _ROCKET_IMAGE + $2 .export _EXTRA_LIFE_IMAGE; _EXTRA_LIFE_IMAGE = _FREEZE_IMAGE + $2 .export _INVINCIBILITY_IMAGE; _INVINCIBILITY_IMAGE = _EXTRA_LIFE_IMAGE + $2 .export _CHASE_IMAGE; _CHASE_IMAGE = _INVINCIBILITY_IMAGE + $2 .export _SUPER_IMAGE; _SUPER_IMAGE = _CHASE_IMAGE + $2 .export _CONFUSE_IMAGE; _CONFUSE_IMAGE = _SUPER_IMAGE + $2 .export _ZOMBIE_IMAGE; _ZOMBIE_IMAGE = _CONFUSE_IMAGE + $2 .export _BROKEN_BRICK_IMAGE; _BROKEN_BRICK_IMAGE = _ZOMBIE_IMAGE + $2 ================================================ FILE: src/games/shoot/memory/creativision_memory.s ================================================ .export _ghosts; _ghosts = $100 .export _bombs; _bombs = _ghosts + $28 .export _player; _player = _bombs + $14 .export _ghostSlowDown; _ghostSlowDown = _player + $5 .export _points; _points = _ghostSlowDown + $2 .export _highScore; _highScore = _points + $2 .export _lives; _lives = _highScore + $2 .export _level; _level = _lives + $1 .export _ghostCount; _ghostCount = _level + $1 .export _GHOST_IMAGE; _GHOST_IMAGE = _ghostCount + $1 .export _BOMB_IMAGE; _BOMB_IMAGE = _GHOST_IMAGE + $2 .export _PLAYER_UP_IMAGE; _PLAYER_UP_IMAGE = _BOMB_IMAGE + $2 .export _PLAYER_DOWN_IMAGE; _PLAYER_DOWN_IMAGE = _PLAYER_UP_IMAGE + $2 .export _PLAYER_LEFT_IMAGE; _PLAYER_LEFT_IMAGE = _PLAYER_DOWN_IMAGE + $2 .export _PLAYER_RIGHT_IMAGE; _PLAYER_RIGHT_IMAGE = _PLAYER_LEFT_IMAGE + $2 .export _ind; _ind = _PLAYER_RIGHT_IMAGE + $2 ================================================ FILE: src/games/shoot/memory/creativision_memory_light.s ================================================ .export _ghosts; _ghosts = $100 .export _bombs; _bombs = _ghosts + $28 .export _player; _player = _bombs + $14 .export _ghostSlowDown; _ghostSlowDown = _player + $5 .export _points; _points = _ghostSlowDown + $2 .export _highScore; _highScore = _points + $2 .export _lives; _lives = _highScore + $2 .export _level; _level = _lives + $1 .export _ghostCount; _ghostCount = _level + $1 .export _GHOST_IMAGE; _GHOST_IMAGE = _ghostCount + $1 .export _BOMB_IMAGE; _BOMB_IMAGE = _GHOST_IMAGE + $2 .export _PLAYER_UP_IMAGE; _PLAYER_UP_IMAGE = _BOMB_IMAGE + $2 .export _PLAYER_DOWN_IMAGE; _PLAYER_DOWN_IMAGE = _PLAYER_UP_IMAGE + $2 .export _PLAYER_LEFT_IMAGE; _PLAYER_LEFT_IMAGE = _PLAYER_DOWN_IMAGE + $2 .export _PLAYER_RIGHT_IMAGE; _PLAYER_RIGHT_IMAGE = _PLAYER_LEFT_IMAGE + $2 .export _ind; _ind = _PLAYER_RIGHT_IMAGE + $2 ; LIGHT .export _skullSlowDown; _skullSlowDown = _ind + $1 .export _skullXCountDown; _skullXCountDown = _skullSlowDown + $2 .export _skullYCountDown; _skullYCountDown = _skullXCountDown + $1 .export _bulletDirection; _bulletDirection = _skullYCountDown + $1 .export _freeze_count_down; _freeze_count_down = _bulletDirection + $4 .export _playerDirection; _playerDirection = _freeze_count_down + $1 .export _freezeActive; _freezeActive = _playerDirection + $1 .export _extraLifeThroughPointsCounter; _extraLifeThroughPointsCounter = _freezeActive + $1 .export _playerFire; _playerFire = _extraLifeThroughPointsCounter + $1 .export _guns; _guns = _playerFire + $1 .export _skullActive; _skullActive = _guns + $1 .export _loop; _loop = _skullActive + $1 ================================================ FILE: src/games/shoot/memory/creativision_memory_tiny.s ================================================ .export _ghosts; _ghosts = $100 .export _bombs; _bombs = _ghosts + $28 .export _player; _player = _bombs + $14 .export _ghostSlowDown; _ghostSlowDown = _player + $5 .export _points; _points = _ghostSlowDown + $2 .export _highScore; _highScore = _points + $2 .export _lives; _lives = _highScore + $2 .export _level; _level = _lives + $1 .export _ghostCount; _ghostCount = _level + $1 .export _GHOST_IMAGE; _GHOST_IMAGE = _ghostCount + $1 .export _BOMB_IMAGE; _BOMB_IMAGE = _GHOST_IMAGE + $2 .export _PLAYER_UP_IMAGE; _PLAYER_UP_IMAGE = _BOMB_IMAGE + $2 .export _PLAYER_DOWN_IMAGE; _PLAYER_DOWN_IMAGE = _PLAYER_UP_IMAGE + $2 .export _PLAYER_LEFT_IMAGE; _PLAYER_LEFT_IMAGE = _PLAYER_DOWN_IMAGE + $2 .export _PLAYER_RIGHT_IMAGE; _PLAYER_RIGHT_IMAGE = _PLAYER_LEFT_IMAGE + $2 .export _ind; _ind = _PLAYER_RIGHT_IMAGE + $2 ================================================ FILE: src/games/shoot/memory/gal_memory.asm ================================================ PUBLIC _ghosts, _bombs, _player, _ghostSlowDown, _points, _highScore, _lives, _level, _ghostCount, _GHOST_IMAGE, _BOMB_IMAGE, _ind defc _ghosts = 0x2A00 defc _bombs = _ghosts + $28 defc _player = _bombs + $14 defc _ghostSlowDown = _player + $5 defc _points = _ghostSlowDown + $2 defc _highScore = _points + $2 defc _lives = _highScore + $2 defc _level = _lives + $1 defc _ghostCount = _level + $1 defc _GHOST_IMAGE = _ghostCount + $1 defc _BOMB_IMAGE = _GHOST_IMAGE + $1 defc _ind = _BOMB_IMAGE + $1 ================================================ FILE: src/games/shoot/memory/gamate_memory.s ================================================ .export _ghosts; _ghosts = $100 .export _bombs; _bombs = _ghosts + $28 .export _player; _player = _bombs + $14 .export _points; _points = _player + $5 .export _highScore; _highScore = _points + $2 .export _lives; _lives = _highScore + $2 .export _level; _level = _lives + $1 .export _ghostCount; _ghostCount = _level + $1 .export _PLAYER_DOWN_IMAGE; _PLAYER_DOWN_IMAGE = _ghostCount + $1 .export _PLAYER_UP_IMAGE; _PLAYER_UP_IMAGE = _PLAYER_DOWN_IMAGE + $1 .export _PLAYER_LEFT_IMAGE; _PLAYER_LEFT_IMAGE = _PLAYER_UP_IMAGE + $1 .export _PLAYER_RIGHT_IMAGE; _PLAYER_RIGHT_IMAGE = _PLAYER_LEFT_IMAGE + $1 .export _GHOST_IMAGE; _GHOST_IMAGE = _PLAYER_RIGHT_IMAGE + $1 .export _BOMB_IMAGE; _BOMB_IMAGE = _GHOST_IMAGE + $1 .export _ind; _ind = _BOMB_IMAGE + $1 .export _POWERUP_IMAGE; _POWERUP_IMAGE = _ind + 1 .export _BULLET_IMAGE; _BULLET_IMAGE = _POWERUP_IMAGE + $2 .export _GUN_IMAGE; _GUN_IMAGE = _BULLET_IMAGE + $2 .export _SKULL_IMAGE; _SKULL_IMAGE = _GUN_IMAGE + $2 .export _EXTRA_POINTS_IMAGE; _EXTRA_POINTS_IMAGE = _SKULL_IMAGE + $2 .export _HORIZONTAL_BRICK_IMAGE; _HORIZONTAL_BRICK_IMAGE = _EXTRA_POINTS_IMAGE + $2 .export _VERTICAL_BRICK_IMAGE; _VERTICAL_BRICK_IMAGE = _HORIZONTAL_BRICK_IMAGE + $2 .export _LEFT_HORIZONTAL_MISSILE_IMAGE; _LEFT_HORIZONTAL_MISSILE_IMAGE = _VERTICAL_BRICK_IMAGE + $2 .export _RIGHT_HORIZONTAL_MISSILE_IMAGE; _RIGHT_HORIZONTAL_MISSILE_IMAGE = _LEFT_HORIZONTAL_MISSILE_IMAGE + $2 .export _ROCKET_IMAGE; _ROCKET_IMAGE = _RIGHT_HORIZONTAL_MISSILE_IMAGE + $2 .export _FREEZE_IMAGE; _FREEZE_IMAGE = _ROCKET_IMAGE + $2 .export _EXTRA_LIFE_IMAGE; _EXTRA_LIFE_IMAGE = _FREEZE_IMAGE + $2 .export _INVINCIBILITY_IMAGE; _INVINCIBILITY_IMAGE = _EXTRA_LIFE_IMAGE + $2 .export _CHASE_IMAGE; _CHASE_IMAGE = _INVINCIBILITY_IMAGE + $2 .export _SUPER_IMAGE; _SUPER_IMAGE = _CHASE_IMAGE + $4 .export _CONFUSE_IMAGE; _CONFUSE_IMAGE = _SUPER_IMAGE + $2 .export _ZOMBIE_IMAGE; _ZOMBIE_IMAGE = _CONFUSE_IMAGE + $2 .export _freeze_count_down; _freeze_count_down = _ZOMBIE_IMAGE + $8 .export _loop; _loop = $100 .export _bulletDirection; _bulletDirection = _loop + $2 .export _skullXCountDown; _skullXCountDown = _bulletDirection + $1 .export _skullYCountDown; _skullYCountDown = _skullXCountDown + $1 .export _ghostSlowDown; _ghostSlowDown = _skullYCountDown + $1 .export _skullActive; _skullActive = _ghostSlowDown + $2 .export _skull; _skull = _skullActive + $1 .export _bullet; _bullet = _skull + $5 .export _powerUp; _powerUp = _bullet + $5 .export _gun; _gun = _powerUp + $A .export _extraPoints; _extraPoints = _gun + $A .export _playerDirection; _playerDirection = _extraPoints + $A .export _freezeActive; _freezeActive = _playerDirection + $1 .export _extraLifeThroughPointsCounter; _extraLifeThroughPointsCounter = _freezeActive + $1 .export _playerFire; _playerFire = _extraLifeThroughPointsCounter + $1 .export _guns; _guns = _playerFire + $1 .export _skullSlowDown; _skullSlowDown = _guns + $2 ================================================ FILE: src/games/shoot/memory/oric1_memory.s ================================================ .export _ghosts; _ghosts = $400 .export _bombs; _bombs = _ghosts + $28 .export _player; _player = _bombs + $14 .export _ghostSlowDown; _ghostSlowDown = _player + $5 .export _points; _points = _ghostSlowDown + $2 .export _highScore; _highScore = _points + $2 .export _lives; _lives = _highScore + $2 .export _level; _level = _lives + $1 .export _skull; _skull = _level + $1 .export _bullet; _bullet = _skull + $5 .export _powerUp; _powerUp = _bullet + $5 .export _powerUp2; _powerUp2 = _powerUp + $A .export _gun; _gun = _powerUp2 + $A .export _extraPoints; _extraPoints = _gun + $A .export _rockets; _rockets = _extraPoints + $A .export _freeze; _freeze = _rockets + $14 .export _invincibility; _invincibility = _freeze + $A .export _extraLife; _extraLife = _invincibility + $A .export _super; _super = _extraLife + $A .export _confuse; _confuse = _super + $A .export _zombie; _zombie = _confuse + $A .export _chase; _chase = _zombie + $A .export _ghostCount; _ghostCount = _chase + $A .export _ghostLevel; _ghostLevel = _ghostCount + $1 .export _leftHorizontalMissile; _leftHorizontalMissile = _ghostLevel + $2 .export _rightHorizontalMissile; _rightHorizontalMissile = _leftHorizontalMissile + $5 .export _chasingBullet; _chasingBullet = _rightHorizontalMissile + $5 .export _invincibility_count_down; _invincibility_count_down = _chasingBullet + $5 .export _confuse_count_down; _confuse_count_down = _invincibility_count_down + $2 .export _zombie_count_down; _zombie_count_down = _confuse_count_down + $2 .export _strategyArray; _strategyArray = _zombie_count_down + $2 .export _freeze_count_down; ;_freeze_count_down = _strategyArray + $8 _freeze_count_down = $B800 .export _skullSlowDown; _skullSlowDown = _freeze_count_down + $2 .export _skullXCountDown; _skullXCountDown = _skullSlowDown + $2 .export _skullYCountDown; _skullYCountDown = _skullXCountDown + $1 .export _bulletDirection; _bulletDirection = _skullYCountDown + $1 .export _chasedEnemyPtr; _chasedEnemyPtr = _bulletDirection + $1 .export _chasedByGhosts; _chasedByGhosts = _chasedEnemyPtr + $2 .export _rockets_x; _rockets_x = _chasedByGhosts + $2 .export _extraLife_present_on_level; _extraLife_present_on_level = _rockets_x + $4 .export _super_present_on_level; _super_present_on_level = _extraLife_present_on_level + $1 .export _zombie_present_on_level; _zombie_present_on_level = _super_present_on_level + $1 .export _bases; _bases = _zombie_present_on_level + $1 .export _arrowRange; _arrowRange = _bases + $1 .export _all_skulls_killed_in_completed_levels; _all_skulls_killed_in_completed_levels = _arrowRange + $1 .export _bases_in_completed_levels; _bases_in_completed_levels = _all_skulls_killed_in_completed_levels + $1 .export _horizWallsLength; _horizWallsLength = _bases_in_completed_levels + $1 .export _invincibilityActive; _invincibilityActive = _horizWallsLength + $1 .export _confuseActive; _confuseActive = _invincibilityActive + $1 .export _zombieActive; _zombieActive = _confuseActive + $1 .export _verticalWallY; _verticalWallY = _zombieActive + $1 .export _verticalWallLength; _verticalWallLength = _verticalWallY + $1 .export _playerDirection; _playerDirection = _verticalWallLength + $1 .export _freezeActive; _freezeActive = _playerDirection + $1 .export _extraLifeThroughPointsCounter; _extraLifeThroughPointsCounter = _freezeActive + $1 .export _playerFire; _playerFire = _extraLifeThroughPointsCounter + $1 .export _guns; _guns = _playerFire + $1 .export _skullActive; _skullActive = _guns + $1 .export _loop; _loop = _skullActive + $1 .export _playerBlink; _playerBlink = _loop + $2 .export _arrowYPosition; _arrowYPosition = _playerBlink + $1 .export _PLAYER_DOWN_IMAGE; _PLAYER_DOWN_IMAGE = _arrowYPosition + $1 .export _PLAYER_UP_IMAGE; _PLAYER_UP_IMAGE = _PLAYER_DOWN_IMAGE + $2 .export _PLAYER_LEFT_IMAGE; _PLAYER_LEFT_IMAGE = _PLAYER_UP_IMAGE + $2 .export _PLAYER_RIGHT_IMAGE; _PLAYER_RIGHT_IMAGE = _PLAYER_LEFT_IMAGE + $2 .export _GHOST_IMAGE; _GHOST_IMAGE = _PLAYER_RIGHT_IMAGE + $2 .export _BOMB_IMAGE; _BOMB_IMAGE = _GHOST_IMAGE + $2 .export _ind; _ind = _BOMB_IMAGE + $2 .export _POWERUP_IMAGE; _POWERUP_IMAGE = _ind + $1 .export _BULLET_IMAGE; _BULLET_IMAGE = _POWERUP_IMAGE + $2 .export _GUN_IMAGE; _GUN_IMAGE = _BULLET_IMAGE + $2 .export _SKULL_IMAGE; ;_SKULL_IMAGE = _GUN_IMAGE + $2 _SKULL_IMAGE = $BFE0 .export _EXTRA_POINTS_IMAGE; _EXTRA_POINTS_IMAGE = _SKULL_IMAGE + $2 .export _HORIZONTAL_BRICK_IMAGE; _HORIZONTAL_BRICK_IMAGE = _EXTRA_POINTS_IMAGE + $2 .export _VERTICAL_BRICK_IMAGE; _VERTICAL_BRICK_IMAGE = _HORIZONTAL_BRICK_IMAGE + $2 .export _LEFT_HORIZONTAL_MISSILE_IMAGE; _LEFT_HORIZONTAL_MISSILE_IMAGE = _VERTICAL_BRICK_IMAGE + $2 .export _RIGHT_HORIZONTAL_MISSILE_IMAGE; _RIGHT_HORIZONTAL_MISSILE_IMAGE = _LEFT_HORIZONTAL_MISSILE_IMAGE + $2 .export _ROCKET_IMAGE; _ROCKET_IMAGE = _RIGHT_HORIZONTAL_MISSILE_IMAGE + $2 .export _FREEZE_IMAGE; _FREEZE_IMAGE = _ROCKET_IMAGE + $2 .export _EXTRA_LIFE_IMAGE; _EXTRA_LIFE_IMAGE = _FREEZE_IMAGE + $2 .export _INVINCIBILITY_IMAGE; _INVINCIBILITY_IMAGE = _EXTRA_LIFE_IMAGE + $2 .export _CHASE_IMAGE; _CHASE_IMAGE = _INVINCIBILITY_IMAGE + $2 .export _SUPER_IMAGE; _SUPER_IMAGE = _CHASE_IMAGE + $2 .export _CONFUSE_IMAGE; _CONFUSE_IMAGE = _SUPER_IMAGE + $2 .export _ZOMBIE_IMAGE; _ZOMBIE_IMAGE = _CONFUSE_IMAGE + $2 .export _BROKEN_BRICK_IMAGE; _BROKEN_BRICK_IMAGE = _ZOMBIE_IMAGE + $2 ================================================ FILE: src/games/shoot/memory/pet_memory.s ================================================ .export _ghosts; _ghosts = $33A .export _bombs; _bombs = _ghosts + $28 .export _player; _player = _bombs + $14 .export _points; _points = _player + $5 .export _highScore; _highScore = _points + $2 .export _lives; _lives = _highScore + $2 .export _level; _level = _lives + $1 .export _ghostCount; _ghostCount = _level + $1 .export _PLAYER_DOWN_IMAGE; _PLAYER_DOWN_IMAGE = _ghostCount + $1 .export _PLAYER_UP_IMAGE; _PLAYER_UP_IMAGE = _PLAYER_DOWN_IMAGE + $1 .export _PLAYER_LEFT_IMAGE; _PLAYER_LEFT_IMAGE = _PLAYER_UP_IMAGE + $1 .export _PLAYER_RIGHT_IMAGE; _PLAYER_RIGHT_IMAGE = _PLAYER_LEFT_IMAGE + $1 .export _GHOST_IMAGE; _GHOST_IMAGE = _PLAYER_RIGHT_IMAGE + $1 .export _BOMB_IMAGE; _BOMB_IMAGE = _GHOST_IMAGE + $1 .export _ind; _ind = _BOMB_IMAGE + $1 .export _POWERUP_IMAGE; _POWERUP_IMAGE = _ind + 1 .export _BULLET_IMAGE; _BULLET_IMAGE = _POWERUP_IMAGE + $2 .export _GUN_IMAGE; _GUN_IMAGE = _BULLET_IMAGE + $2 .export _SKULL_IMAGE; _SKULL_IMAGE = _GUN_IMAGE + $2 .export _EXTRA_POINTS_IMAGE; _EXTRA_POINTS_IMAGE = _SKULL_IMAGE + $2 .export _HORIZONTAL_BRICK_IMAGE; _HORIZONTAL_BRICK_IMAGE = _EXTRA_POINTS_IMAGE + $2 .export _VERTICAL_BRICK_IMAGE; _VERTICAL_BRICK_IMAGE = _HORIZONTAL_BRICK_IMAGE + $2 .export _LEFT_HORIZONTAL_MISSILE_IMAGE; _LEFT_HORIZONTAL_MISSILE_IMAGE = _VERTICAL_BRICK_IMAGE + $2 .export _RIGHT_HORIZONTAL_MISSILE_IMAGE; _RIGHT_HORIZONTAL_MISSILE_IMAGE = _LEFT_HORIZONTAL_MISSILE_IMAGE + $2 .export _ROCKET_IMAGE; _ROCKET_IMAGE = _RIGHT_HORIZONTAL_MISSILE_IMAGE + $2 .export _FREEZE_IMAGE; _FREEZE_IMAGE = _ROCKET_IMAGE + $2 .export _EXTRA_LIFE_IMAGE; _EXTRA_LIFE_IMAGE = _FREEZE_IMAGE + $2 .export _INVINCIBILITY_IMAGE; _INVINCIBILITY_IMAGE = _EXTRA_LIFE_IMAGE + $2 .export _CHASE_IMAGE; _CHASE_IMAGE = _INVINCIBILITY_IMAGE + $2 .export _SUPER_IMAGE; _SUPER_IMAGE = _CHASE_IMAGE + $4 .export _CONFUSE_IMAGE; _CONFUSE_IMAGE = _SUPER_IMAGE + $2 .export _ZOMBIE_IMAGE; _ZOMBIE_IMAGE = _CONFUSE_IMAGE + $2 .export _freeze_count_down; _freeze_count_down = _ZOMBIE_IMAGE + $8 .export _loop; _loop = $100 .export _bulletDirection; _bulletDirection = _loop + $2 .export _skullXCountDown; _skullXCountDown = _bulletDirection + $1 .export _skullYCountDown; _skullYCountDown = _skullXCountDown + $1 .export _ghostSlowDown; _ghostSlowDown = _skullYCountDown + $1 .export _skullActive; _skullActive = _ghostSlowDown + $2 .export _skull; _skull = _skullActive + $1 .export _bullet; _bullet = _skull + $5 .export _powerUp; _powerUp = _bullet + $5 .export _gun; _gun = _powerUp + $A .export _extraPoints; _extraPoints = _gun + $A .export _playerDirection; _playerDirection = _extraPoints + $A .export _freezeActive; _freezeActive = _playerDirection + $1 .export _extraLifeThroughPointsCounter; _extraLifeThroughPointsCounter = _freezeActive + $1 .export _playerFire; _playerFire = _extraLifeThroughPointsCounter + $1 .export _guns; _guns = _playerFire + $1 .export _skullSlowDown; _skullSlowDown = _guns + $2 ================================================ FILE: src/games/shoot/memory/vic20_memory.s ================================================ ; $334-$3FF (820-1023) ;0334-033B 820-827 ?? ;*033C-03FB 828-1019 Cassette buffer .export _ghosts; _ghosts = $334 .export _bombs; _bombs = _ghosts + $28 .export _player; _player = _bombs + $14 .export _ghostSlowDown; _ghostSlowDown = _player + $5 .export _points; _points = _ghostSlowDown + $2 .export _highScore; _highScore = _points + $2 .export _lives; _lives = _highScore + $2 .export _level; _level = _lives + $1 .export _skull; _skull = _level + $1 .export _bullet; _bullet = _skull + $5 .export _powerUp; _powerUp = _bullet + $5 .export _powerUp2; _powerUp2 = _powerUp + $A .export _gun; _gun = _powerUp2 + $A .export _extraPoints; _extraPoints = _gun + $A .export _rockets; _rockets = _extraPoints + $A .export _freeze; _freeze = _rockets + $14 .export _invincibility; _invincibility = _freeze + $A .export _extraLife; _extraLife = _invincibility + $A .export _super; _super = _extraLife + $A .export _confuse; _confuse = _super + $A .export _zombie; ;_zombie = _confuse + $A ; $200 - $276 (512-630) ;*0200-0258 512-600 Basic input buffer ;*0259-0262 601-610 Logical file table ;*0263-026C 611-620 Device # table ;*026D-0276 621-630 Secondary Address table _zombie = $200 .export _chase; _chase = _zombie + $A .export _ghostCount; _ghostCount = _chase + $A .export _ghostLevel; _ghostLevel = _ghostCount + $1 .export _leftHorizontalMissile; _leftHorizontalMissile = _ghostLevel + $2; .export _rightHorizontalMissile; _rightHorizontalMissile = _leftHorizontalMissile + $5; .export _chasingBullet; _chasingBullet = _rightHorizontalMissile + $5; .export _invincibility_count_down; _invincibility_count_down = _chasingBullet + $5 .export _confuse_count_down; _confuse_count_down = _invincibility_count_down + $2 .export _zombie_count_down; _zombie_count_down = _confuse_count_down + $2 .export _strategyArray; _strategyArray = _zombie_count_down + $2 .export _freeze_count_down; _freeze_count_down = _strategyArray + $8 .export _skullSlowDown; _skullSlowDown = _freeze_count_down + $2 .export _skullXCountDown; _skullXCountDown = _skullSlowDown + $2 .export _skullYCountDown; _skullYCountDown = _skullXCountDown + $1 .export _bulletDirection; _bulletDirection = _skullYCountDown + $1 .export _chasedEnemyPtr; _chasedEnemyPtr = _bulletDirection + $1 .export _chasedByGhosts; _chasedByGhosts = _chasedEnemyPtr + $2 .export _rockets_x; _rockets_x = _chasedByGhosts + $2 .export _extraLife_present_on_level; _extraLife_present_on_level = _rockets_x + $6 .export _super_present_on_level; _super_present_on_level = _extraLife_present_on_level + $1 .export _zombie_present_on_level; _zombie_present_on_level = _super_present_on_level + $1 .export _bases; _bases = _zombie_present_on_level + $1 .export _arrowRange; _arrowRange = _bases + $1 .export _all_skulls_killed_in_completed_levels; _all_skulls_killed_in_completed_levels = _arrowRange + $1 .export _bases_in_completed_levels; _bases_in_completed_levels = _all_skulls_killed_in_completed_levels + $1 .export _horizWallsLength; _horizWallsLength = _bases_in_completed_levels + $1 .export _invincibilityActive; _invincibilityActive = _horizWallsLength + $1 .export _confuseActive; _confuseActive = _invincibilityActive + $1 .export _zombieActive; _zombieActive = _confuseActive + $1 .export _verticalWallY; _verticalWallY = _zombieActive + $1 .export _verticalWallLength; _verticalWallLength = _verticalWallY + $1 .export _playerDirection; _playerDirection = _verticalWallLength + $1 .export _freezeActive; _freezeActive = _playerDirection + $1 .export _extraLifeThroughPointsCounter; _extraLifeThroughPointsCounter = _freezeActive + $1 .export _playerFire; _playerFire = _extraLifeThroughPointsCounter + $1 .export _guns; _guns = _playerFire + $1 .export _skullActive; _skullActive = _guns + $1 .export _loop; _loop = _skullActive + $1 .export _playerBlink; _playerBlink = _loop + $2 .export _arrowYPosition; _arrowYPosition = _playerBlink + $1 .export _PLAYER_DOWN_IMAGE; _PLAYER_DOWN_IMAGE = _arrowYPosition + $1 .export _PLAYER_UP_IMAGE; _PLAYER_UP_IMAGE = _PLAYER_DOWN_IMAGE + $2 .export _PLAYER_LEFT_IMAGE; _PLAYER_LEFT_IMAGE = _PLAYER_UP_IMAGE + $2 .export _PLAYER_RIGHT_IMAGE; _PLAYER_RIGHT_IMAGE = _PLAYER_LEFT_IMAGE + $2 .export _GHOST_IMAGE; _GHOST_IMAGE = _PLAYER_RIGHT_IMAGE + $2 .export _BOMB_IMAGE; _BOMB_IMAGE = _GHOST_IMAGE + $2 .export _ind; _ind = _BOMB_IMAGE + $2 .export _CALM_DOWN_IMAGE; _CALM_DOWN_IMAGE = _ind + 1 .export _BULLET_IMAGE; _BULLET_IMAGE = _CALM_DOWN_IMAGE + $2 .export _GUN_IMAGE; _GUN_IMAGE = _BULLET_IMAGE + $2 .export _SKULL_IMAGE; _SKULL_IMAGE = _GUN_IMAGE + $2 .export _EXTRA_POINTS_IMAGE; _EXTRA_POINTS_IMAGE = _SKULL_IMAGE + $2 .export _HORIZONTAL_BRICK_IMAGE; _HORIZONTAL_BRICK_IMAGE = _EXTRA_POINTS_IMAGE + $2 .export _VERTICAL_BRICK_IMAGE; _VERTICAL_BRICK_IMAGE = _HORIZONTAL_BRICK_IMAGE + $2 .export _LEFT_HORIZONTAL_MISSILE_IMAGE; _LEFT_HORIZONTAL_MISSILE_IMAGE = _VERTICAL_BRICK_IMAGE + $2 ; This is the hardware stack. Is it safe? ; $100-$113 (256-275) ; broken by keyboard if in $200 area? .export _RIGHT_HORIZONTAL_MISSILE_IMAGE; ;_RIGHT_HORIZONTAL_MISSILE_IMAGE = _LEFT_HORIZONTAL_MISSILE_IMAGE + $2 _RIGHT_HORIZONTAL_MISSILE_IMAGE = $100 ; broken by keyboard? .export _ROCKET_IMAGE; _ROCKET_IMAGE = _RIGHT_HORIZONTAL_MISSILE_IMAGE + $2 .export _FREEZE_IMAGE; _FREEZE_IMAGE = _ROCKET_IMAGE + $2 .export _EXTRA_LIFE_IMAGE; _EXTRA_LIFE_IMAGE = _FREEZE_IMAGE + $2 .export _INVINCIBILITY_IMAGE; _INVINCIBILITY_IMAGE = _EXTRA_LIFE_IMAGE + $2 .export _CHASE_IMAGE; _CHASE_IMAGE = _INVINCIBILITY_IMAGE + $2 .export _SUPER_IMAGE; _SUPER_IMAGE = _CHASE_IMAGE + $2 .export _CONFUSE_IMAGE; _CONFUSE_IMAGE = _SUPER_IMAGE + $2 .export _ZOMBIE_IMAGE; _ZOMBIE_IMAGE = _CONFUSE_IMAGE + $2 .export _BROKEN_BRICK_IMAGE; _BROKEN_BRICK_IMAGE = _ZOMBIE_IMAGE + $2 ================================================ FILE: src/games/shoot/move_player.h ================================================ /* --------------------------------------------------------------------------------------- */ // // CROSS SHOOT by Fabrizio Caruso // // Fabrizio_Caruso@hotmail.com // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from // the use of this software. // Permission is granted to anyone to use this software for non-commercial applications, // subject to the following restrictions: // 1. The origin of this software must not be misrepresented; you must not // claim that you wrote the original software. If you use this software in // a product, an acknowledgment in the product documentation would be // appreciated but is not required. // 2. Altered source versions must be plainly marked as such, and must not // be misrepresented as being the original software. // 3. This notice may not be removed or altered from any source distribution. /* --------------------------------------------------------------------------------------- */ #ifndef _MOVE_PLAYER #define _MOVE_PLAYER void MOVE_PLAYER(void); #endif // _MOVE_PLAYER ================================================ FILE: src/games/shoot/rocket.h ================================================ /* --------------------------------------------------------------------------------------- */ // // CROSS SHOOT by Fabrizio Caruso // // Fabrizio_Caruso@hotmail.com // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from // the use of this software. // Permission is granted to anyone to use this software for non-commercial applications, // subject to the following restrictions: // 1. The origin of this software must not be misrepresented; you must not // claim that you wrote the original software. If you use this software in // a product, an acknowledgment in the product documentation would be // appreciated but is not required. // 2. Altered source versions must be plainly marked as such, and must not // be misrepresented as being the original software. // 3. This notice may not be removed or altered from any source distribution. /* --------------------------------------------------------------------------------------- */ #ifndef ROCKETS_HEADER #define ROCKETS_HEADER #if !defined(NO_ROCKETS) void handle_rockets(void); #else #define handle_rockets() #endif #endif // ROCKETS_HEADER ================================================ FILE: src/games/shoot/settings.h ================================================ /* --------------------------------------------------------------------------------------- */ // // CROSS SHOOT by Fabrizio Caruso // // Fabrizio_Caruso@hotmail.com // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from // the use of this software. // Permission is granted to anyone to use this software for non-commercial applications, // subject to the following restrictions: // 1. The origin of this software must not be misrepresented; you must not // claim that you wrote the original software. If you use this software in // a product, an acknowledgment in the product documentation would be // appreciated but is not required. // 2. Altered source versions must be plainly marked as such, and must not // be misrepresented as being the original software. // 3. This notice may not be removed or altered from any source distribution. /* --------------------------------------------------------------------------------------- */ #ifndef _SETTINGS #define _SETTINGS #if defined(_XL_TURN_BASED) #if !defined(NO_BLINKING) #define NO_BLINKING #endif #endif #if !defined(NO_PLAYER_ANIMATION) #define ANIMATE_PLAYER #endif #if !defined(_XL_NO_UDG) && !defined(NO_TRANSICTION_ANIMATION) #define TRANSITION_ANIMATION 1 #endif #include "cross_lib.h" struct ImageStruct { uint8_t _imageData; #if !defined(_XL_NO_COLOR) uint8_t _color; #endif }; typedef struct ImageStruct Image; #if !defined(NO_BLINKING) void _blink_draw(uint8_t x,uint8_t y,Image * image, uint8_t * blinkCounter); #else #define _blink_draw(x,y,image,blinkCounter) _draw(x,y,image) #endif #include "game_settings.h" #endif // _SETTINGS ================================================ FILE: src/games/shoot/shapes/6x8/shape19.txt ================================================ ...... ...... ...... ..##.. .#..#. ..##.. ##..## ================================================ FILE: src/games/shoot/shapes/6x8/shape20.txt ================================================ #.##.# ..##.. .#..#. ##..## ...... ...... ...... ...... ================================================ FILE: src/games/shoot/shapes/6x8/shape21.txt ================================================ ...... ...... ...... ...... ..##.. .####. ..##.. ##..## ================================================ FILE: src/games/shoot/shapes/6x8/shape22.txt ================================================ .....# ....## .....# ...### .....# .....# ....#. ....#. ================================================ FILE: src/games/shoot/shapes/6x8/shape23.txt ================================================ #..... ##.... #..... ###... #..... #..... .#.... .#.... ================================================ FILE: src/games/shoot/shapes/6x8/shape24.txt ================================================ #.##.# .#..#. ##..## #.##.# #.##.# ##..## .#..#. #.##.# ================================================ FILE: src/games/shoot/shapes/6x8/shape26.txt ================================================ ..##.. .####. #.##.# #.##.# .####. ..##.. .####. ##..## ================================================ FILE: src/games/shoot/shapes/7x8/shape0.txt ================================================ ..###.. ..#.#.. ...#... .#####. #.#.#.# ...#... ..#.#.. ..#.#.. ================================================ FILE: src/games/shoot/shapes/7x8/shape1.txt ================================================ ..###.. ..###.. ...#... .#####. #.#.#.# ...#... ..#.#.. ..#.#.. ================================================ FILE: src/games/shoot/shapes/7x8/shape10.txt ================================================ ..###.. ..#.#.. ....... .#####. ....... ...#... ....... ..#.#.. ================================================ FILE: src/games/shoot/shapes/7x8/shape19.txt ================================================ ....... ....... ....... ....... ..###.. ..#.#.. ...#... .#####. ================================================ FILE: src/games/shoot/shapes/7x8/shape2.txt ================================================ ..###.. ..##... ...#..# .#####. #.#.#.. .. #... ..#.#.. ..#..#. ================================================ FILE: src/games/shoot/shapes/7x8/shape20.txt ================================================ #.#.#.# ...#... ..#.#.. ..#.#.. ....... ....... ....... ....... ================================================ FILE: src/games/shoot/shapes/7x8/shape21.txt ================================================ ....... ....... ....... ....... ..###.. ..###.. ...#... .#####. ================================================ FILE: src/games/shoot/shapes/7x8/shape22.txt ================================================ ......# ......# ....... ....### ......# ....... ......# ......# ================================================ FILE: src/games/shoot/shapes/7x8/shape23.txt ================================================ ##..... ##..... #...... ####... .#..... #...... .#..... .#..... ================================================ FILE: src/games/shoot/shapes/7x8/shape24.txt ================================================ #.###.# .#...#. #.#.#.# #.###.# #.###.# #.#.#.# .#...#. #.###.# ================================================ FILE: src/games/shoot/shapes/7x8/shape26.txt ================================================ ..###.. .#####. #..#..# #..#..# .#####. ..#.#.. .#####. ##.#.## ================================================ FILE: src/games/shoot/shapes/7x8/shape3.txt ================================================ ..###.. ...##.. #..#... .#####. ..#.#.# .. #... ..#.#.. .#..#.. ================================================ FILE: src/games/shoot/shapes/8x6/shape14.txt ================================================ ........ ###..... .####### .####### ###..... ........ ================================================ FILE: src/games/shoot/shapes/8x6/shape15.txt ================================================ ........ .....### #######. #######. .....### ........ ================================================ FILE: src/games/shoot/shapes/8x6/shape19.txt ================================================ ........ ........ ........ ...##... ...##... .##..##. ================================================ FILE: src/games/shoot/shapes/8x6/shape20.txt ================================================ #.####.# ..#..#.. ..#..#.. ........ ........ ........ ================================================ FILE: src/games/shoot/shapes/8x6/shape21.txt ================================================ ........ ........ ........ ...##... ...##... .######. ================================================ FILE: src/games/shoot/shapes/8x6/shape22.txt ================================================ .......# .......# ....###. ......## ......#. ......#. ================================================ FILE: src/games/shoot/shapes/8x6/shape23.txt ================================================ #....... #..,.... .###.... ##...... .#...... .#...... ================================================ FILE: src/games/shoot/shapes/8x6/shape24.txt ================================================ #.####.# .##..##. #..##..# #..##..# .##..##. #.####.# ================================================ FILE: src/games/shoot/shapes/8x6/shape26.txt ================================================ .######. #..##..# #..##..# .######. ..#..#.. ##.##.## ================================================ FILE: src/games/shoot/shapes/8x6/shape4.txt ================================================ .######. ######## #..##..# .######. ..####.. ##.##.## ================================================ FILE: src/games/shoot/shapes/8x6/shape6.txt ================================================ #.####.# ######## #..##..# .######. ..####.. ##.##.## ================================================ FILE: src/games/shoot/shapes/8x6/shape9.txt ================================================ #......# .#.##.#. ..##.#.. ..#.##.. .#.##.#. #......# ================================================ FILE: src/games/shoot/shapes/8x8/shape19.txt ================================================ ........ ........ ........ ........ ...##... ..#..#.. ...##... .##..##. ================================================ FILE: src/games/shoot/shapes/8x8/shape20.txt ================================================ #..##..# ...##... ..#..#.. .##..##. ........ ........ ........ ........ ================================================ FILE: src/games/shoot/shapes/8x8/shape21.txt ================================================ ........ ........ ........ ........ ...##... ..####.. ...##... .##..##. ================================================ FILE: src/games/shoot/shapes/8x8/shape22.txt ================================================ .......# ......## .......# ....#### .......# .......# ......#. ......#. ================================================ FILE: src/games/shoot/shapes/8x8/shape23.txt ================================================ #....... ##...... #....... ####.... #....... #....... .#...... .#...... ================================================ FILE: src/games/shoot/shapes/8x8/shape26.txt ================================================ ..####.. .######. #..##..# #..##..# .######. ..#..#.. .######. ##.##.## ================================================ FILE: src/games/shoot/shapes/8x8/shape6.txt ================================================ #.####.# .######. #..##..# ##.##.## .######. ..####.. .######. ##.##.## ================================================ FILE: src/games/shoot/skull.h ================================================ /* --------------------------------------------------------------------------------------- */ // // CROSS SHOOT by Fabrizio Caruso // // Fabrizio_Caruso@hotmail.com // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from // the use of this software. // Permission is granted to anyone to use this software for non-commercial applications, // subject to the following restrictions: // 1. The origin of this software must not be misrepresented; you must not // claim that you wrote the original software. If you use this software in // a product, an acknowledgment in the product documentation would be // appreciated but is not required. // 2. Altered source versions must be plainly marked as such, and must not // be misrepresented as being the original software. // 3. This notice may not be removed or altered from any source distribution. /* --------------------------------------------------------------------------------------- */ #ifndef SKULL #define SKULL #include "character.h" void handle_skull(Character *skullPtr, uint8_t strategy); void handle_skulls(void); uint16_t computeSkullSlowDown(void); void computeSkullParameters(void); void checkBombsVsSkull(register Character * skullPtr); void checkBombsVsSkulls(void); void displaySkulls(void); void skullDies(register Character * skullPtr); #endif // SKULL ================================================ FILE: src/games/shoot/sleep.h ================================================ #ifndef _SLEEP_H #define _SLEEP_H #include "standard_libs.h" #if XSize>=32 // SLOWER SECRETS FOUND DISPLAY #define DISPLAY_SPEED_FACTOR 2 // SLOWER BONUS DISPLAY #define DISPLAY_SPEED_RIGHT_SHIFT 5 #else #define DISPLAY_SPEED_FACTOR 1 #define DISPLAY_SPEED_RIGHT_SHIFT 6 #endif // #if defined(_XL_SLOW_DOWN_FACTOR) && _XL_SLOW_DOWN_FACTOR>0 void SHORT_SLEEP(uint8_t t); // #else // #define SHORT_SLEEP(t) // #endif #endif // _SLEEP_H ================================================ FILE: src/games/shoot/speed_game_settings.h ================================================ #ifndef _SPEED_TARGET_SETTINGS #define _SPEED_TARGET_SETTINGS #if defined(_XL_TURN_BASED) || !defined(BOMB_DRAW_SKIP) #define SKIP_BOMB_DRAW #else #define SKIP_BOMB_DRAW if((loop&(BOMB_DRAW_SKIP))==1) #endif #if defined(_XL_TURN_BASED) || !defined(WALL_DRAW_SKIP) #define SKIP_WALL_DRAW #else #define SKIP_WALL_DRAW if((loop&(WALL_DRAW_SKIP))==1) #endif #define ADVANCED_LEFT_MISSILE() ++leftHorizontalMissile._x #define ADVANCED_RIGHT_MISSILE() --rightHorizontalMissile._x #endif // _SPEED_TARGET_SETTINGS ================================================ FILE: src/games/shoot/split_files/bullet.c ================================================ /* --------------------------------------------------------------------------------------- */ // // CROSS SHOOT by Fabrizio Caruso // // Fabrizio_Caruso@hotmail.com // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from // the use of this software. // Permission is granted to anyone to use this software for non-commercial applications, // subject to the following restrictions: // 1. The origin of this software must not be misrepresented; you must not // claim that you wrote the original software. If you use this software in // a product, an acknowledgment in the product documentation would be // appreciated but is not required. // 2. Altered source versions must be plainly marked as such, and must not // be misrepresented as being the original software. // 3. This notice may not be removed or altered from any source distribution. /* --------------------------------------------------------------------------------------- */ #include "settings.h" #include "bullet.h" #include "level.h" #include "game_text.h" #include "character.h" #include "item.h" #include "ghost.h" #include "strategy.h" #include "skull.h" #include "init_images.h" extern uint8_t bombCount; extern Character bombs[BOMBS_NUMBER]; extern uint8_t skullsCount; extern uint8_t bulletStrength; extern uint16_t points; extern uint16_t loop; extern uint8_t isOneMissileLevel; extern uint8_t isMissileLevel; extern uint8_t isBossLevel; // extern uint8_t isRocketLevel; extern Character ghosts[GHOSTS_NUMBER]; extern Image DEAD_GHOST_IMAGE; extern Image VERTICAL_BRICK_IMAGE; extern Image HORIZONTAL_BRICK_IMAGE; extern uint8_t level; extern Item extraPoints; extern Character skulls[SKULLS_NUMBER]; extern uint8_t skullActive; extern uint8_t playerFire; extern uint8_t guns; extern uint8_t playerDirection; extern uint8_t bulletDirection[BULLETS_NUMBER]; extern Character bullets[BULLETS_NUMBER]; extern Character player; extern uint8_t maxGhostsOnScreen; extern uint8_t rocketsOnScreen; extern Item freeze; extern Item extraLife; extern Item invincibility; extern Character leftHorizontalMissile; extern Character rightHorizontalMissile; extern uint8_t rockets_x[MAX_ROCKETS_NUMBER]; extern Character rockets[MAX_ROCKETS_NUMBER]; extern uint8_t destroyed_bases; extern uint8_t destroyed_bases_in_completed_levels; extern uint8_t destroyerActive; uint8_t availableBullet(void) { uint8_t i; for(i=0;i0 && bombCount==BOMBS_NUMBER) { _XL_SHOOT_SOUND(); --guns; printGunsStats(); bulletDirection[bulletIndex] = playerDirection; bullets[bulletIndex]._status = 1; if(playerDirection==LEFT) { bullets[bulletIndex]._x = player._x-1; #if !defined(NO_PLAYER_SHOOT_ANIMATION) && defined(ANIMATE_PLAYER) if(!destroyerActive) { _XL_DRAW(player._x, player._y, _PLAYER_RIGHT_TILE, _PLAYER_COLOR); } #endif } else if(playerDirection==RIGHT) { bullets[bulletIndex]._x = player._x+1; #if !defined(NO_PLAYER_SHOOT_ANIMATION) && defined(ANIMATE_PLAYER) if(!destroyerActive) { _XL_DRAW(player._x, player._y, _PLAYER_LEFT_TILE, _PLAYER_COLOR); } #endif } else { bullets[bulletIndex]._x = player._x; } if(playerDirection==UP) { bullets[bulletIndex]._y = player._y-1; #if !defined(NO_PLAYER_SHOOT_ANIMATION) && defined(ANIMATE_PLAYER) if(!destroyerActive) { _XL_DRAW(player._x, player._y, _PLAYER_DOWN_TILE, _PLAYER_COLOR); } #endif } else if(playerDirection==DOWN) { bullets[bulletIndex]._y = player._y+1; #if !defined(NO_PLAYER_SHOOT_ANIMATION) && defined(ANIMATE_PLAYER) if(!destroyerActive) { _XL_DRAW(player._x, player._y, _PLAYER_UP_TILE, _PLAYER_COLOR); } #endif } else { bullets[bulletIndex]._y = player._y; } displayBullet(&bullets[bulletIndex]); playerFire = 0; checkBullet(&bullets[bulletIndex],playerDirection); // displayCharacter(&player); } } void handle_bullet(uint8_t bulletIndex) { // Move bullet if fired if(bullets[bulletIndex]._status) { moveBullet(&bullets[bulletIndex], bulletDirection[bulletIndex]); checkBullet(&bullets[bulletIndex], bulletDirection[bulletIndex]); } } void handle_bullets(void) { uint8_t i; if(loop&1) { for(i=0;i_y); break; case DOWN: ++(ghostPtr->_y); break; case LEFT: --(ghostPtr->_x); break; default: // case RIGHT: ++(ghostPtr->_x); // break; } } void checkBullets(void) { uint8_t i; for(i=0;i_status) { if(skullActive) { checkBulletVsSkulls(bulletPtr); } checkBulletVsGhosts(bulletPtr, bulletDirection); } } // TODO: Restore missile bases if still active void restoreRocketsOnWall(uint8_t x, uint8_t y) { if((y==0) || (y==YSize-1)) { DRAW_CHARACTER(x,y,&HORIZONTAL_BRICK_IMAGE); if(ghostCount>MAX_GHOST_COUNT_FOR_ROCKETS) { uint8_t i; for(i=0;i_status && areCharctersAtSamePosition(bulletPtr, ghostPtr)) { uint8_t i; deleteBullet(bulletPtr); bulletPtr->_status=0; if((ghostPtr->_status)<=bulletStrength) { ghostDiesAndSpawns(ghostPtr); // points+=GHOST_VS_MISSILE; increasePoints(GHOST_VS_MISSILE); } else { (ghostPtr->_status)-=bulletStrength; displayGhost(ghostPtr); for(i=0;i_x, ghostPtr->_y) || innerHorizontalWallReached(ghostPtr->_x, ghostPtr->_y)) #else if(wallReached(ghostPtr) || innerVerticalWallReached(ghostPtr->_x, ghostPtr->_y)) #endif { // points+=GHOST_VS_WALL_BONUS; increasePoints(GHOST_VS_WALL_BONUS); ghostDies(ghostPtr); restoreRocketsOnWall(ghostPtr->_x, ghostPtr->_y); if((!isBossLevel) && (ghostCount>=maxGhostsOnScreen)) { spawnGhost(ghostPtr,ghostCount); } displayStats(); break; } displayGhost(ghostPtr); } } } } void checkBulletVsGhosts(Character * bulletPtr, uint8_t bulletDirection) { uint8_t i = 0; for(;i_status && areCharctersAtSamePosition(bulletPtr, skullPtr)) { _XL_DRAW(skullPtr->_x,skullPtr->_y,skullPtr->_imagePtr->_imageData, _XL_RED); _XL_PING_SOUND(); bulletPtr->_status=0; deleteBullet(bulletPtr); // bulletPtr->_x = 0; // bulletPtr->_y = 0; decreaseGhostLevel(); reduceItemCoolDowns(); if((skullPtr->_status)<=bulletStrength) { skullDies(skullPtr); } else { (skullPtr->_status)-=bulletStrength; displaySkull(skullPtr); } } } void checkBulletVsSkulls(Character *bulletPtr) { uint8_t i; for(i=0;i_x; break; case DOWN: ++bulletPtr->_y; break; case UP: --bulletPtr->_y; break; default: // case LEFT: --bulletPtr->_x; // break; } } void destroyHorizontalMissile(Character * horizontalMissilePtr) { horizontalMissilePtr->_status = 0; _XL_EXPLOSION_SOUND(); deleteHorizontalMissile(horizontalMissilePtr); // points+=HORIZONTAL_MISSILE_BONUS; increasePoints(HORIZONTAL_MISSILE_BONUS); // displayScoreStats(); ++destroyed_bases; reduceItemCoolDowns(); } void moveBullet(register Character * bulletPtr, uint8_t bulletDirection) { #if !defined(NO_HORIZONTAL_LEVEL) if(bulletPtr->_status && (wallReached(bulletPtr) || innerVerticalWallReached(bulletPtr->_x, bulletPtr->_y) || innerHorizontalWallReached(bulletPtr->_x, bulletPtr->_y))) #else if(bulletPtr->_status && (wallReached(bulletPtr) || innerVerticalWallReached(bulletPtr->_x, bulletPtr->_y))) #endif { bulletPtr->_status=0; if(isOneMissileLevel) { if(bulletPtr->_x==XSize-1 && bulletPtr->_y==YSize/2 && rightHorizontalMissile._status) { destroyHorizontalMissile(&rightHorizontalMissile); } } else if(isMissileLevel) { if(bulletPtr->_x==XSize-1 && bulletPtr->_y==HORIZONTAL_MISSILE_OFFSET && rightHorizontalMissile._status) { destroyHorizontalMissile(&rightHorizontalMissile); } else if(bulletPtr->_x==0 && bulletPtr->_y==YSize-1-HORIZONTAL_MISSILE_OFFSET && leftHorizontalMissile._status) { destroyHorizontalMissile(&leftHorizontalMissile); } } if(bulletPtr->_y==YSize-1) { uint8_t i; for(i=0;i_x==rockets_x[i]) && rockets[i]._status) { rockets[i]._status = 0; ++destroyed_bases; _XL_EXPLOSION_SOUND(); deleteRocket(&rockets[i]); // points+=VERTICAL_MISSILE_BONUS; increasePoints(VERTICAL_MISSILE_BONUS); // displayScoreStats(); } } } restoreRocketsOnWall(bulletPtr->_x, bulletPtr->_y); // displayStatsTitles(); displayStats(); } else { _moveBullet(bulletPtr, bulletDirection); displayBullet(bulletPtr); } } ================================================ FILE: src/games/shoot/split_files/character.c ================================================ /* --------------------------------------------------------------------------------------- */ // // CROSS SHOOT by Fabrizio Caruso // // Fabrizio_Caruso@hotmail.com // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from // the use of this software. // Permission is granted to anyone to use this software for non-commercial applications, // subject to the following restrictions: // 1. The origin of this software must not be misrepresented; you must not // claim that you wrote the original software. If you use this software in // a product, an acknowledgment in the product documentation would be // appreciated but is not required. // 2. Altered source versions must be plainly marked as such, and must not // be misrepresented as being the original software. // 3. This notice may not be removed or altered from any source distribution. /* --------------------------------------------------------------------------------------- */ #include "character.h" #include "settings.h" #include "level.h" #include "../cross_lib/cross_lib.h" #include "game_text.h" extern uint16_t points; extern uint8_t skullsCount; extern uint8_t ghostCount; extern uint16_t loop; extern uint8_t level; extern Image DEAD_GHOST_IMAGE; extern Image GHOST_IMAGE; extern Image BOMB_IMAGE; extern Image BROKEN_BRICK_IMAGE; extern Image HORIZONTAL_BRICK_IMAGE; extern Image VERTICAL_BRICK_IMAGE; extern Character ghosts[GHOSTS_NUMBER]; extern Character bombs[BOMBS_NUMBER]; extern Character skulls[SKULLS_NUMBER]; extern Character player; extern uint8_t maxGhostsOnScreen; extern uint8_t isInnerHorizontalWallLevel; extern uint8_t isInnerVerticalWallLevel; extern uint8_t invincibilityActive; extern uint8_t destroyerActive; void _DRAW_PLAYER(void) { if(destroyerActive) { DRAW_PLAYER(player._x, player._y, &DESTROYER_IMAGE); } #if !defined(_XL_NO_COLOR) // Color case: player gets a different color when invincible else if(invincibilityActive) { player._imagePtr->_color = _XL_YELLOW; DRAW_PLAYER(player._x, player._y, player._imagePtr); player._imagePtr->_color = _XL_CYAN; } #endif else { DRAW_PLAYER(player._x, player._y, player._imagePtr); } } #if !defined(NO_BLINKING) void _blink_draw(uint8_t x, uint8_t y, Image * image, uint8_t *blinkCounter) { if(*blinkCounter) { _draw(x,y,image); *blinkCounter=0; } else { _delete(x,y); *blinkCounter=1; } } #endif void displayCharacter(register Character * characterPtr) { DRAW_CHARACTER(characterPtr->_x, characterPtr->_y, characterPtr->_imagePtr); } void deleteCharacter(Character * characterPtr) { DELETE_CHARACTER(characterPtr->_x, characterPtr->_y); } extern uint8_t invincibilityActive; extern uint8_t innerVerticalWallY; extern uint8_t innerVerticalWallLength; extern uint8_t innerHorizontalWallX; extern uint8_t innerHorizontalWallLength; void increasePoints(uint8_t score) { points+=score; displayStats(); } void playerDies(void) { _XL_EXPLOSION_SOUND(); player._status=0; #if !defined(LESS_TEXT) printDefeatMessage(); #endif _XL_SLEEP(1); } uint8_t playerKilledBy(Character *enemyPtr) { return (!invincibilityActive) && areCharctersAtSamePosition(enemyPtr,&player); } uint8_t handle_player_killed(Character *enemyPtr) { if(playerKilledBy(enemyPtr)) { playerDies(); return 1; } return 0; } void initializeCharacter(register Character* characterPtr, uint8_t x, uint8_t y, uint8_t status, Image * imagePtr) { characterPtr->_x = x; characterPtr->_y = y; characterPtr->_status = status; characterPtr->_imagePtr = imagePtr; #if defined(DEBUG) displayCharacter(characterPtr); #endif } uint8_t isCharacterAtLocation(uint8_t x, uint8_t y, Character * characterPtr) { return(characterPtr->_x==x) && (characterPtr->_y==y); } uint8_t onWall(uint8_t x, uint8_t y) { return(x==0)||(x==XSize-1) || (y==0)||(y==YSize-1); } uint8_t wallReached(Character *characterPtr) { return onWall(characterPtr->_x, characterPtr->_y); } uint8_t sameLocationAsAnyActiveLocation(uint8_t x, uint8_t y, Character *characterList, uint8_t length) { uint8_t i; for(i=0;i=SAFETY) && (x<=XSize-SAFETY) && (y>SAFETY) && (y<=YSize-SAFETY); } void relocateNearBy(register Character * characterPtr) { uint8_t x; uint8_t y; do { x = characterPtr->_x - (uint8_t)(RELOCATE_RANGE/2) + (uint8_t)(_XL_RAND() % RELOCATE_RANGE); y = characterPtr->_y - (uint8_t)(RELOCATE_RANGE/2) + (uint8_t)(_XL_RAND() % RELOCATE_RANGE); } while(!safeLocation(x,y)); characterPtr->_x = x; characterPtr->_y = y; } uint8_t innerVerticalWallReached(uint8_t x, uint8_t y) { return (x==XSize/2) && (y >= innerVerticalWallY) && (y <= (innerVerticalWallY + innerVerticalWallLength-1)); } // uint8_t nearInnerVerticalWall(register Character *characterPtr) // { // return isInnerVerticalWallLevel && (characterPtr->_x>=(XSize/2)-1) && (characterPtr->_x<=(XSize/2)+1) && // (characterPtr->_y >= innerVerticalWallY-1) && (characterPtr->_y<= (innerVerticalWallY + innerVerticalWallLength)); // } #if !defined(NO_HORIZONTAL_LEVEL) uint8_t innerHorizontalWallReached(uint8_t x, uint8_t y) { return (y==(YSize/2)) && (x >= innerHorizontalWallX) && (x<= (innerHorizontalWallX + innerHorizontalWallLength-1)); } #endif // uint8_t nearInnerHorizontalWall(register Character *characterPtr) // { // return isInnerHorizontalWallLevel && (characterPtr->_y>=(YSize/2)-1) && (characterPtr->_y<=(YSize/2)+1) && // (characterPtr->_x >= innerHorizontalWallX-1) && (characterPtr->_x<= (innerHorizontalWallX + innerHorizontalWallLength)); // } // void DRAW_BROKEN_BRICK(uint8_t x, uint8_t y) // { // _draw(x,y,&BROKEN_BRICK_IMAGE); // } ================================================ FILE: src/games/shoot/split_files/end_screen.c ================================================ #include "settings.h" #include "end_screen.h" #include "game_text.h" #include "text_strings.h" #include "move_player.h" #if defined(END_SCREEN) #include "strategy.h" #include "level.h" #include "character.h" #include "ghost.h" extern Character player; extern Character skulls[]; extern Character ghosts[GHOSTS_NUMBER]; extern Character bullet; extern uint8_t playerFire; extern uint8_t level; extern uint8_t guns; extern uint8_t ind; extern uint8_t maxGhostsOnScreen; extern uint8_t isBossLevel; extern uint8_t innerVerticalWallLength; #endif #if YSize < 20 #define MESSAGE_START 3 #define MESSAGE_RANGE 7 #else #define MESSAGE_START 7 #define MESSAGE_RANGE 15 #endif #if defined(END_SCREEN) void gameCompleted(void) { _XL_CLEAR_SCREEN(); ghostCount = 8; maxGhostsOnScreen = 8; isBossLevel = 0; fillLevelWithCharacters(); // skulls[0]._x = player._x-4; // skulls[0]._y = player._y; for(ind=0;ind>1), row, Text); } #if !defined(LESS_TEXT) void print_destroy_missiles(uint8_t row) { _XL_PRINT(XSize/2-9+1,row, DESTROY_MISSILES__STRING); _XL_DRAW(XSize/2-3, row+LINE_SKIP, _LEFT_HORIZONTAL_MISSILE_TILE, _XL_WHITE); _XL_DRAW(XSize/2-1, row+LINE_SKIP, _ROCKET_TILE, _XL_WHITE); _XL_DRAW(XSize/2+1, row+LINE_SKIP, _RIGHT_HORIZONTAL_MISSILE_TILE, _XL_WHITE); } #endif #if !defined(LESS_TEXT) void printKillTheSkulls(void) { uint8_t i; _XL_DRAW(XSize/2-4, YSize/2-4, _BOSS_TILE, _XL_RED); for(i=0;i<3;++i) { _XL_DRAW(XSize/2-2+(i<<1), YSize/2-4, _SKULL_TILE, _XL_CYAN); } _XL_SET_TEXT_COLOR(_XL_WHITE); PRINT_CENTERED_ON_ROW(((uint8_t)YSize)/2-2,KILL_THE_BOSS); PRINT_CENTERED_ON_ROW(((uint8_t)YSize)/2,KILL_THE_SKULLS_STRING); print_destroy_missiles(((uint8_t)YSize)/2+2); } #endif void displayStatsTitles(void) { _draw_stat(GHOST_IMAGE_X, GHOST_IMAGE_Y, &GHOST_IMAGE); _draw_stat(PLAYER_IMAGE_X, PLAYER_IMAGE_Y, &PLAYER_IMAGE); _draw_stat(FIRE_POWER_IMAGE_X, FIRE_POWER_IMAGE_Y, &FIRE_POWER_IMAGE); } void displayStats(void) { #if !defined(_XL_NO_COLOR) if(bulletStrength>=COLOR_BULLET_SECOND_THRESHOLD) { BULLET_IMAGE._color = SECOND_THRESHOLD_BULLET_COLOR; } else if(bulletStrength>=COLOR_BULLET_FIRST_THRESHOLD) { BULLET_IMAGE._color = FIRST_THRESHOLD_BULLET_COLOR; } #endif displayScoreStats(); displayStatsTitles(); #if XSize>=32 _XL_SET_TEXT_COLOR(_XL_RED); _XL_PRINT(XSize-10,0,"HI"); _XL_SET_TEXT_COLOR(_XL_WHITE); _XL_PRINTD(XSize-8, 0, 5, highScore ); #endif printLevelStats(); printLivesStats(); printGunsStats(); printFirePowerStats(); printGhostCountStats(); } void printGunsStats(void) { SET_COLOR(_XL_WHITE); if(bombCount20 void printLevelStats(void) { SET_COLOR(_XL_WHITE); _XL_PRINTD(LEVEL_X,LEVEL_Y,2,level); } #endif void printGhostCountStats(void) { SET_COLOR(_XL_WHITE); #if defined(WIDE) _XL_PRINTD(GHOST_IMAGE_X+1,GHOST_IMAGE_Y,2,ghostCount); #else _XL_PRINTD(GHOST_IMAGE_X+1,GHOST_IMAGE_Y,2,ghostCount); #endif } void printLivesStats(void) { SET_COLOR(_XL_WHITE); _XL_PRINTD(PLAYER_IMAGE_X+1,PLAYER_IMAGE_Y,1,lives); } void displayScoreStats(void) { SET_COLOR(_XL_WHITE); _XL_PRINTD(0,0,5,points); } #if !defined(LESS_TEXT) void printLevel(void) { uint8_t i; SET_COLOR(_XL_YELLOW); if(!level) { _XL_PRINT(((XSize -7)>>1), (YSize>>1)-2, _XL_S _XL_E _XL_C _XL_R _XL_E _XL_T); } else if(level==8)//(!(level&7)) { _XL_PRINT(((XSize -7)>>1), (YSize>>1)-2, _XL_B _XL_SPACE _XL_O _XL_SPACE _XL_S _XL_SPACE _XL_S); } else if(level==16) { _XL_PRINT(((XSize -7)>>1), (YSize>>1)-2, _XL_F _XL_I _XL_N _XL_A _XL_L); } else { for(i=0;i<(level&7);++i) { _draw_stat(((XSize -7)>>1)+i,(YSize>>1)-4,&GHOST_IMAGE); } SET_COLOR(_XL_WHITE); _XL_PRINT(((XSize -7)>>1), (YSize>>1)-2, _XL_P _XL_A _XL_R _XL_T _XL_SPACE _XL_I); if(level>8) { _XL_CHAR(((XSize -7)>>1)+6, (YSize>>1)-2, 'I'); } } SET_COLOR(_XL_WHITE); _XL_PRINT(((XSize -7)>>1), (YSize>>1), LEVEL_STRING); _XL_PRINTD(((XSize -7)>>1)+6, (YSize>>1), 2, level); } #endif #if !defined(END_SCREEN) void gameCompleted(void) { _XL_CLEAR_SCREEN(); PRINT_CENTERED(YOU_MADE_IT_STRING); _XL_WAIT_FOR_INPUT(); } #endif #if !defined(LESS_TEXT) void printVictoryMessage(void) { SET_COLOR(_XL_RED); _XL_PRINT(XSize/2-3,YSize/2-2,VICTORY_STRING); } #endif #if !defined(LESS_TEXT) void printDefeatMessage(void) { SET_COLOR(_XL_RED); PRINT_CENTERED_ON_ROW(YSize/2-2,DEFEAT_STRING); } #endif void printGameOver(void) { SET_COLOR(_XL_RED); PRINT_CENTERED(GAME_OVER_STRING); } #if !defined(NO_INITIAL_SCREEN) void _printCrossShoot(void) { PRINT_CENTERED_ON_ROW(2, CROSS_SHOOT_STRING); SET_COLOR(_XL_WHITE); } #endif #if !defined(NO_HINTS) && !defined(NO_INITIAL_SCREEN) && XSize>=18 void printHints(void) { SET_COLOR(_XL_RED); _printCrossShoot(); _XL_PRINT(XSize/2-7+1,INIT_HINT_LINE+2*LINE_SKIP, KILL_SKULLS__STRING); _XL_PRINT(XSize/2-10+1, INIT_HINT_LINE+3*LINE_SKIP, BEFORE__TO_UNLOCK__STRING); _XL_PRINT(XSize/2-7+1,INIT_HINT_LINE+4*LINE_SKIP, ITEMS__STRING); _XL_PRINT(XSize/2-9+1,INIT_HINT_LINE+5*LINE_SKIP+1, DESTROY_MISSILES__STRING); _XL_DRAW(XSize/2-2, INIT_HINT_LINE+6*LINE_SKIP+1, _LEFT_HORIZONTAL_MISSILE_TILE, _XL_WHITE); _XL_DRAW(XSize/2-0, INIT_HINT_LINE+6*LINE_SKIP+1, _ROCKET_TILE, _XL_WHITE); _XL_DRAW(XSize/2+2, INIT_HINT_LINE+6*LINE_SKIP+1, _RIGHT_HORIZONTAL_MISSILE_TILE, _XL_WHITE); _XL_DRAW(XSize/2+5+1,INIT_HINT_LINE+2*LINE_SKIP, _SKULL_TILE, _XL_YELLOW); _XL_DRAW(XSize/2-3+1,INIT_HINT_LINE+3*LINE_SKIP, _GHOST_TILE, _XL_WHITE); // _XL_DRAW(XSize/2-3+1,INIT_HINT_LINE+3*LINE_SKIP, _FAST_GHOST_TILE, _XL_WHITE); _XL_DRAW(XSize/2-1+1,INIT_HINT_LINE+4*LINE_SKIP, _SUPER_TILE, _XL_RED); _XL_DRAW(XSize/2+1+1,INIT_HINT_LINE+4*LINE_SKIP, _FREEZE_TILE, _XL_CYAN); _XL_DRAW(XSize/2+3+1,INIT_HINT_LINE+4*LINE_SKIP, _INVINCIBILITY_TILE, _XL_YELLOW); } #endif #if !defined(NO_INITIAL_SCREEN) void printStartMessage(void) { SET_COLOR(_XL_GREEN); _printCrossShoot(); #if XSize>=16 PRINT_CENTERED_ON_ROW(5, AUTHOR_STRING); #endif _printTopScore(); #if XSize>= 14 && defined(NO_EXTRA_TITLE) PRINT_CENTERED_ON_ROW((YSize>>1)+1, KILL_THEM_ALL__STRING); #endif SET_COLOR(_XL_WHITE); #if !defined(NO_CONTROL_INSTRUCTIONS) && XSize>=14 #if YSize<25 PRINT_CENTERED_ON_ROW(YSize-1, USE_STRING); #else PRINT_CENTERED_ON_ROW(YSize-2, USE_STRING); #endif #endif } #endif #if !defined(LESS_TEXT) #define MAX_BONUS 995 void handleLevelBonus(uint16_t bonus) { uint16_t i; uint16_t j; const uint8_t delay = (uint8_t) (MAX_BONUS/bonus); // Minimum bonus = 20. So 995/20<255 _XL_SET_TEXT_COLOR(_XL_WHITE); for(i=0;i<=bonus;i+=5) { // delay = (MAX_DELAY+i-bonus)/(bonus-i+1); _XL_PRINTD(XSize/2-1,YSize/2,3,i); increasePoints(5); _XL_TICK_SOUND(); for(j=0;j<(i>>DISPLAY_SPEED_RIGHT_SHIFT);++j) { SHORT_SLEEP(delay); } } } #endif #if !defined(NO_ACHIEVEMENTS) uint8_t countDiscoveredSecrets(void) { uint8_t total; uint8_t i; total = 0; #if defined(DEBUG_SECRETS) SET_COLOR(_XL_WHITE); #endif for(i=0;i>1)-4, HIGH_SCORE_STRING); _XL_PRINT(1, (YSize>>1)-2, SCORE_STRING); if(level<=FINAL_LEVEL) { _XL_PRINT(1, (YSize>>1), LEVEL_STRING); _XL_PRINTD(9, (YSize>>1), 2, level); } else { SET_COLOR(_XL_YELLOW); _XL_PRINT(1, (YSize>>1), GAME_COMPLETED_STRING); SET_COLOR(_XL_RED); } _XL_PRINT(1, (YSize>>1)+2, DISCOVERED_SECRETS_STRING); _XL_PRINT(12, (YSize>>1)+2, OF_STRING ); _XL_PRINTD(15, (YSize>>1)+2, 2, SECRETS_NUMBER); SET_COLOR(_XL_WHITE); _XL_PRINTD(9, (YSize>>1)-4, 5, highScore ); _XL_PRINTD(9, (YSize>>1)-2, 5, points); // if(level<=FINAL_LEVEL) // { // } i=0; do { _XL_PRINTD(9, (YSize>>1)+2, 2, i); for(j=0;j>1)+4, SECRET_LEVEL_FOUND_STRING); } } #endif ================================================ FILE: src/games/shoot/split_files/ghost.c ================================================ /* --------------------------------------------------------------------------------------- */ // // CROSS SHOOT by Fabrizio Caruso // // Fabrizio_Caruso@hotmail.com // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from // the use of this software. // Permission is granted to anyone to use this software for non-commercial applications, // subject to the following restrictions: // 1. The origin of this software must not be misrepresented; you must not // claim that you wrote the original software. If you use this software in // a product, an acknowledgment in the product documentation would be // appreciated but is not required. // 2. Altered source versions must be plainly marked as such, and must not // be misrepresented as being the original software. // 3. This notice may not be removed or altered from any source distribution. /* --------------------------------------------------------------------------------------- */ #include "ghost.h" #include "settings.h" #include "game_text.h" #include "level.h" #include "character.h" #include "init_images.h" extern Image DEAD_GHOST_IMAGE; extern Image GHOST_IMAGE; extern Image FAST_GHOST_IMAGE; extern uint8_t maxGhostsOnScreen; extern uint16_t ghostLevel; extern uint8_t level; extern Character ghosts[GHOSTS_NUMBER]; extern Character bombs[BOMBS_NUMBER]; extern uint8_t guns; extern uint8_t bulletStrength; extern uint8_t isBossLevel; extern uint8_t exploded_bombs; extern uint8_t restart; void checkBombsVsGhost(register Character * ghostPtr) { uint8_t reachedBombInd = characterReachedBombs(ghostPtr); if(ghostPtr->_status && reachedBombInd=FAST_GHOST_COUNT_MIN_THRESHOLD) && (!(ghostIndex % 4)) && (guns>=FAST_GHOST_GUN_THRESHOLD) && !restart) { if(!(ghostIndex % 8)) { initializeCharacter(ghostPtr , 1 , 1, FAST_GHOST_LIFE, &FAST_GHOST_IMAGE); } else { initializeCharacter(ghostPtr ,XSize-2, YSize-2, FAST_GHOST_LIFE, &FAST_GHOST_IMAGE); } } else { switch(ghostIndex % 8) { case 0: initializeCharacter(ghostPtr , 1 , 1, GHOST_LIFE, &GHOST_IMAGE); break; case 1: initializeCharacter(ghostPtr, XSize-2, YSize-2, GHOST_LIFE, &GHOST_IMAGE); break; case 2: initializeCharacter(ghostPtr, 1 , YSize-2, GHOST_LIFE, &GHOST_IMAGE); break; case 3: initializeCharacter(ghostPtr, XSize-2, 1, GHOST_LIFE, &GHOST_IMAGE); break; case 4: initializeCharacter(ghostPtr, XSize-2, YSize/2, GHOST_LIFE, &GHOST_IMAGE); break; case 5: initializeCharacter(ghostPtr , 1 , YSize/2, GHOST_LIFE, &GHOST_IMAGE); break; case 6: initializeCharacter(ghostPtr, XSize/2, 1, GHOST_LIFE, &GHOST_IMAGE); break; case 7: initializeCharacter(ghostPtr, XSize/2, YSize-2, GHOST_LIFE, &GHOST_IMAGE); break; } } } } void ghostDies(register Character * ghostPtr) { _XL_DRAW(ghostPtr->_x, ghostPtr->_y, _GHOST_TILE, _XL_RED); _XL_EXPLOSION_SOUND(); if(ghostPtr->_imagePtr==&FAST_GHOST_IMAGE) { increasePoints(FAST_GHOST_EXTRA_POINTS); } ghostPtr->_status=0; // displayScoreStats(); --ghostCount; deleteGhost(ghostPtr); // printGhostCountStats(); displayStats(); } void ghostDiesAndSpawns(Character * ghostPtr) { ghostDies(ghostPtr); if((!isBossLevel) && (ghostCount>=maxGhostsOnScreen)) { spawnGhost(ghostPtr,ghostCount); } } uint16_t computeGhostSlowDown(void) { if(ghostLevelGHOST_LEVEL_DECREASE) ghostLevel-=GHOST_LEVEL_DECREASE; else ghostLevel=0; } void displayBombs(void) { uint8_t i; for(i=0;i=(arrowYPosition-arrowRange)); } #endif void _handle_from_the_left(void) { if(leftHorizontalMissile._status) { if(handle_player_killed(&leftHorizontalMissile)) { return; } deleteHorizontalMissile(&leftHorizontalMissile); if(leftHorizontalMissile._x==XSize-2) { leftHorizontalMissile._x=0; leftHorizontalMissile._y = arrowYPosition; } else { ADVANCED_LEFT_MISSILE(); #if !defined(NO_ARROW_RANGE_CHECK) if(_playerInArrowRange()) { if(player._x>=leftHorizontalMissile._x) { (void) moveCharacter((uint8_t *)&leftHorizontalMissile+Y_MOVE, (uint8_t *)&player+Y_MOVE); } } #endif } displayHorizontalMissile(&leftHorizontalMissile); handle_player_killed(&leftHorizontalMissile); } } void _handle_from_the_right(void) { if(rightHorizontalMissile._status) { if(handle_player_killed(&rightHorizontalMissile)) { return; } deleteHorizontalMissile(&rightHorizontalMissile); if(rightHorizontalMissile._x==1) { rightHorizontalMissile._x= XSize-1; rightHorizontalMissile._y = arrowYPosition; } else { ADVANCED_RIGHT_MISSILE(); #if !defined(NO_ARROW_RANGE_CHECK) if(_playerInArrowRange()) { if(player._x<= rightHorizontalMissile._x) { (void) moveCharacter((uint8_t *)&rightHorizontalMissile+Y_MOVE, (uint8_t *)&player+Y_MOVE); } } #endif } displayHorizontalMissile(&rightHorizontalMissile); handle_player_killed(&rightHorizontalMissile); } } void handle_horizontal_missiles(void) { if(isOneMissileLevel) { arrowYPosition = YSize/2; _handle_from_the_right(); } else if(isMissileLevel || isBossLevel) { arrowYPosition = HORIZONTAL_MISSILE_OFFSET; _handle_from_the_right(); arrowYPosition = YSize-1-HORIZONTAL_MISSILE_OFFSET; _handle_from_the_left(); } } ================================================ FILE: src/games/shoot/split_files/init_images.c ================================================ #include "display_macros.h" #include "tiles.h" #include "images.h" #include "init_images.h" #if !defined(ANIMATE_PLAYER) extern Image PLAYER_IMAGE; #else extern Image PLAYER_DOWN_IMAGE; extern Image PLAYER_UP_IMAGE; extern Image PLAYER_RIGHT_IMAGE; extern Image PLAYER_LEFT_IMAGE; #endif extern Image GHOST_IMAGE; extern Image BOMB_IMAGE; extern Image DESTROYER_IMAGE; extern Image BOSS_IMAGE; extern Image SKULL_IMAGE; extern Image FIRE_CHARGE_IMAGE; extern Image FIRE_POWER_IMAGE; extern Image BULLET_IMAGE; extern Image EXTRA_POINTS_IMAGE; extern Image HORIZONTAL_BRICK_IMAGE; extern Image VERTICAL_BRICK_IMAGE; extern Image LEFT_HORIZONTAL_MISSILE_IMAGE; extern Image RIGHT_HORIZONTAL_MISSILE_IMAGE; extern Image ROCKET_IMAGE; extern Image FREEZE_IMAGE; extern Image EXTRA_LIFE_IMAGE; extern Image INVINCIBILITY_IMAGE; extern Image SUPER_IMAGE; extern Image CONFUSE_IMAGE; extern Image SUICIDE_IMAGE; extern Image BROKEN_BRICK_IMAGE; void INIT_IMAGES(void) { # if !defined(__NO_GRAPHICS) // Set color data #if !defined(_XL_NO_COLOR) #if defined(ANIMATE_PLAYER) PLAYER_DOWN_IMAGE._color = _PLAYER_COLOR; PLAYER_UP_IMAGE._color = _PLAYER_COLOR; PLAYER_RIGHT_IMAGE._color = _PLAYER_COLOR; PLAYER_LEFT_IMAGE._color = _PLAYER_COLOR; #else PLAYER_IMAGE._color = _PLAYER_COLOR; #endif FAST_GHOST_IMAGE._color = _FAST_GHOST_COLOR; BOMB_IMAGE._color = _BOMB_COLOR; GHOST_IMAGE._color = _GHOST_COLOR; BOSS_IMAGE._color = _DEAD_GHOST_COLOR; // SKULL_IMAGE._color = _SKULL_COLOR; CALM_DOWN_IMAGE._color = _CALM_DOWN_COLOR; FIRE_CHARGE_IMAGE._color = _FIRE_CHARGE_COLOR; FIRE_POWER_IMAGE._color = _FIRE_POWER_COLOR; EXTRA_POINTS_IMAGE._color = _EXTRA_POINTS_COLOR; BULLET_IMAGE._color = _BULLET_COLOR; // VERTICAL_BRICK_IMAGE._color = _BRICK_COLOR; // HORIZONTAL_BRICK_IMAGE._color = _BRICK_COLOR; RIGHT_HORIZONTAL_MISSILE_IMAGE._color = _MISSILE_COLOR; LEFT_HORIZONTAL_MISSILE_IMAGE._color = _MISSILE_COLOR; #if !defined(NO_ROCKETS) ROCKET_IMAGE._color = _ROCKET_COLOR; #endif FREEZE_IMAGE._color = _FREEZE_COLOR; EXTRA_LIFE_IMAGE._color = _EXTRA_LIFE_COLOR; INVINCIBILITY_IMAGE._color = _INVINCIBILITY_COLOR; SUPER_IMAGE._color = _SUPER_COLOR; CONFUSE_IMAGE._color = _CONFUSE_COLOR; SUICIDE_IMAGE._color = _SUICIDE_COLOR; #if !defined(_XL_NO_COLOR) && defined(NO_BLINKING) BROKEN_BRICK_IMAGE._color = _BROKEN_BRICK_COLOR; #endif DESTROYER_IMAGE._color = _DESTROYER_COLOR; #endif // Set Image Data #if defined(ANIMATE_PLAYER) PLAYER_DOWN_IMAGE._imageData = _PLAYER_DOWN_TILE; PLAYER_UP_IMAGE._imageData = _PLAYER_UP_TILE; PLAYER_RIGHT_IMAGE._imageData = _PLAYER_RIGHT_TILE; PLAYER_LEFT_IMAGE._imageData = _PLAYER_LEFT_TILE; #else PLAYER_IMAGE._imageData = _PLAYER_DOWN_TILE; #endif GHOST_IMAGE._imageData = _GHOST_TILE; BOMB_IMAGE._imageData = _BOMB_TILE; BOSS_IMAGE._imageData = _BOSS_TILE; SKULL_IMAGE._imageData = _SKULL_TILE; CALM_DOWN_IMAGE._imageData = _CALM_DOWN_TILE; FIRE_CHARGE_IMAGE._imageData = _BULLET_TILE; FIRE_POWER_IMAGE._imageData = _FIRE_POWER_TILE; EXTRA_POINTS_IMAGE._imageData = _EXTRA_POINTS_TILE; BULLET_IMAGE._imageData = _BULLET_TILE; VERTICAL_BRICK_IMAGE._imageData = _VERTICAL_BRICK_TILE; HORIZONTAL_BRICK_IMAGE._imageData = _HORIZONTAL_BRICK_TILE; LEFT_HORIZONTAL_MISSILE_IMAGE._imageData = _LEFT_HORIZONTAL_MISSILE_TILE; RIGHT_HORIZONTAL_MISSILE_IMAGE._imageData = _RIGHT_HORIZONTAL_MISSILE_TILE; #if !defined(NO_ROCKETS) ROCKET_IMAGE._imageData = _ROCKET_TILE; #endif FREEZE_IMAGE._imageData = _FREEZE_TILE; SUPER_IMAGE._imageData = _SUPER_TILE; EXTRA_LIFE_IMAGE._imageData = _PLAYER_DOWN_TILE; INVINCIBILITY_IMAGE._imageData = _INVINCIBILITY_TILE; CONFUSE_IMAGE._imageData = _SKULL_TILE; SUICIDE_IMAGE._imageData = _GHOST_TILE; #if !defined(_XL_NO_COLOR) && defined(NO_BLINKING) BROKEN_BRICK_IMAGE._imageData = _BOMB_TILE; #endif DESTROYER_IMAGE._imageData = _DESTROYER_TILE; FAST_GHOST_IMAGE._imageData = _FAST_GHOST_TILE; #endif } ================================================ FILE: src/games/shoot/split_files/item.c ================================================ /* --------------------------------------------------------------------------------------- */ // // CROSS SHOOT by Fabrizio Caruso // // Fabrizio_Caruso@hotmail.com // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from // the use of this software. // Permission is granted to anyone to use this software for non-commercial applications, // subject to the following restrictions: // 1. The origin of this software must not be misrepresented; you must not // claim that you wrote the original software. If you use this software in // a product, an acknowledgment in the product documentation would be // appreciated but is not required. // 2. Altered source versions must be plainly marked as such, and must not // be misrepresented as being the original software. // 3. This notice may not be removed or altered from any source distribution. /* --------------------------------------------------------------------------------------- */ #include "settings.h" #include "character.h" #include "item.h" #include "ghost.h" #include "game_text.h" #include "level.h" #include "text_strings.h" #include "sleep.h" #include "cross_lib.h" extern uint16_t points; extern uint8_t guns; extern uint8_t lives; extern uint8_t level; extern uint8_t freezeActive; extern uint8_t freeze_count_down; extern uint8_t bombCount; extern uint8_t bulletStrength; extern uint8_t invincibilityActive; extern uint8_t confuseActive; extern uint8_t invincibility_count_down; extern uint8_t confuse_count_down; extern uint8_t destroyed_bases_in_completed_levels; extern uint8_t all_skulls_killed_in_completed_levels; extern uint8_t extraLife_present_on_level; extern uint8_t suicide_present_on_level; extern Image DEAD_GHOST_IMAGE; extern Character ghosts[GHOSTS_NUMBER]; extern Character bombs[BOMBS_NUMBER]; extern Character skull; extern Character player; extern Item calmDown; extern Item fireCharge; extern Item bombCharge; extern Item firePower; extern Item extraPoints; extern uint8_t maxGhostsOnScreen; extern uint8_t isBossLevel; extern Character *chasedEnemyPtr; extern Item freeze; extern Item invincibility; extern Item super; extern Item extraLife; extern Item confuse; extern Item suicide; extern Item destroyer; extern uint8_t destroyed_bases; extern uint8_t exploded_bombs; extern uint8_t missileDestroyerActivated; extern uint8_t bombDestroyerActivated; extern uint8_t destroyerActive; extern uint8_t destroyer_count_down; extern uint8_t firePowerItemSecret; extern uint8_t firePowerLevelSecret; extern uint8_t fireChargeSecret; extern uint8_t discoveredSecrets[]; extern Character skulls[]; extern Image SKULL_IMAGE; extern Image CONFUSE_IMAGE; extern Image PLAYER_IMAGE; extern Image BULLET_IMAGE; extern uint8_t skullActive; void itemReached(Character * itemPtr) { _XL_ZAP_SOUND(); // deleteItem(itemPtr); // displayPlayer(&player); itemPtr->_status = 0; // displayScoreStats(); } void relocateAwayFromWalls(Character * itemPtr) { do { relocateNearBy(itemPtr); #if !defined(NO_HORIZONTAL_LEVEL) } while(innerVerticalWallReached(itemPtr->_x, itemPtr->_y)||innerHorizontalWallReached(itemPtr->_x,itemPtr->_y)); #else } while(innerVerticalWallReached(itemPtr->_x, itemPtr->_y)); #endif } void _freezeEffect(void) { decreaseGhostLevel(); freezeActive = 1; increasePoints(FREEZE_BONUS); freeze_count_down += FREEZE_COUNT_DOWN; } void _increaseBullets(uint8_t bullets) { uint8_t missing = MAX_GUNS - guns; if(missing>=bullets) { guns+=bullets; } else { guns=MAX_GUNS; fireChargeSecret = 1; } printGunsStats(); } void fireChargeEffect(void) { _increaseBullets(BULLET_GUNS); // points+=FIRE_CHARGE_BONUS; increasePoints(FIRE_CHARGE_BONUS); fireCharge._coolDown = FIRE_CHARGE_COOL_DOWN; } void bombChargeEffect(void) { uint8_t i; for(i=0;i=FIRE_POWER_LEVEL_THRESHOLD) { firePowerLevelSecret = bulletStrength-FIRE_POWER_LEVEL_THRESHOLD+3; } // points+=FIRE_POWER_BONUS; increasePoints(FIRE_POWER_BONUS); // #if !defined(_XL_NO_COLOR) // displayStats(); // #else // printFirePowerStats(); // #endif } void firePowerEffect(void) { _firePowerEffect(); firePower._coolDown = FIRE_POWER_COOL_DOWN*2; } void extraPointsEffect(void) { if(level) { // points+=EXTRA_POINTS+level*EXTRA_POINTS_LEVEL_INCREASE; increasePoints(EXTRA_POINTS+level*EXTRA_POINTS_LEVEL_INCREASE); extraPoints._coolDown = SECOND_EXTRA_POINTS_COOL_DOWN; } else { // points+=SECRET_LEVEL_EXTRA_POINTS; increasePoints(SECRET_LEVEL_EXTRA_POINTS); extraPoints._coolDown = 4; } setSecret(EXTRA_POINTS_EFFECT_SECRET_INDEX); } void handle_item(register Item *itemPtr) { // Manage item if(itemPtr->_character._status) { if(areCharctersAtSamePosition(&player, (Character *) itemPtr)) { itemPtr->_effect(); itemReached((Character *) itemPtr); } else { _blink_draw(itemPtr->_character._x, itemPtr->_character._y, itemPtr->_character._imagePtr, &(itemPtr->_blink)); } } else if (itemPtr->_coolDown == 0) { itemPtr->_character._status = 1; relocateAwayFromWalls((Character *) itemPtr); // TODO: Is this really necessary?? // _blink_draw(itemPtr->_character._x, itemPtr->_character._y, itemPtr->_character._imagePtr, &(itemPtr->_blink)); } else { --itemPtr->_coolDown; } } void handle_count_down(uint8_t * flagPtr, uint8_t * countDownPtr) { if(*flagPtr) { if(*countDownPtr==0) { *flagPtr=0; } else { --(*countDownPtr); } } } void reduceItemCoolDowns(void) { extraPoints._coolDown-=extraPoints._coolDown/4; invincibility._coolDown-=invincibility._coolDown/8; freeze._coolDown-=freeze._coolDown/16; fireCharge._coolDown-=fireCharge._coolDown/32; _XL_TICK_SOUND(); } void freezeEffect(void) { _freezeEffect(); freeze._coolDown = ((uint16_t) (FREEZE_COOL_DOWN)); } void extraLifeEffect(void) { ++lives; // all_skulls_killed_in_completed_levels=1; // destroyed_bases_in_completed_levels = 0; extraLife_present_on_level = 0; // extraLife._coolDown = EXTRA_LIFE_COOL_DOWN*10; // second time must be impossible printLivesStats(); setSecret(EXTRA_LIFE_EFFECT_SECRET_INDEX); } void _invincibilityEffect(void) { invincibilityActive = 1; // Remark: The invincibility count-down could be higher than the standard threshold if the destroyer is active if(invincibility_count_downCONFUSE_DAMAGE) { skulls[i]._status-=CONFUSE_DAMAGE; } // SHORT_SLEEP(3); _XL_EXPLOSION_SOUND(); displaySkull(&skulls[i]); } } } confuseActive = 1; confuse._coolDown = SECOND_CONFUSE_COOL_DOWN; //20000UL;//(CONFUSE_COOL_DOWN<<4); confuse_count_down = CONFUSE_COUNT_DOWN; setSecret(CONFUSE_EFFECT_SECRET_INDEX); } void suicideEffect(void) { uint8_t i; destroyed_bases_in_completed_levels = 1; if(!level) { suicide._coolDown = SECOND_SUICIDE_COOL_DOWN/2; } else { suicide._coolDown = SECOND_SUICIDE_COOL_DOWN; } setSecret(SUICIDE_EFFECT_SECRET_INDEX); for(i=0;i=MISSILE_DESTROYER_TRIGGER)&& !missileDestroyerActivated) { missileDestroyerActivated = 1; destroyer._coolDown = 2; setSecret(MISSILE_DESTROYER_SECRET_INDEX); } if((exploded_bombs>=BOMB_DESTROYER_TRIGGER)&& !bombDestroyerActivated) { bombDestroyerActivated = 1; destroyer._coolDown = 2; setSecret(BOMB_DESTROYER_SECRET_INDEX); } } void setSecret(uint8_t secretIndex) { if(!discoveredSecrets[secretIndex]) { #if !defined(_XL_NO_COLOR) uint8_t i; for(i=0;i<10;++i) { _XL_SET_TEXT_COLOR(_XL_RED); PRINT_CENTERED_ON_ROW(YSize/2-2,SECRET_FOUND_STRING); _XL_TOCK_SOUND(); SHORT_SLEEP(2); _XL_SET_TEXT_COLOR(_XL_YELLOW); PRINT_CENTERED_ON_ROW(YSize/2-2,SECRET_FOUND_STRING); _XL_TICK_SOUND(); } #else _XL_SET_TEXT_COLOR(_XL_YELLOW); PRINT_CENTERED_ON_ROW(YSize/2-2,SECRET_FOUND_STRING); #endif _XL_SLEEP(1); PRINT_CENTERED_ON_ROW(YSize/2-2,EMPTY_STRING); discoveredSecrets[secretIndex] = 1; } } ================================================ FILE: src/games/shoot/split_files/level.c ================================================ /* --------------------------------------------------------------------------------------- */ // // CROSS SHOOT by Fabrizio Caruso // // Fabrizio_Caruso@hotmail.com // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from // the use of this software. // Permission is granted to anyone to use this software for non-commercial applications, // subject to the following restrictions: // 1. The origin of this software must not be misrepresented; you must not // claim that you wrote the original software. If you use this software in // a product, an acknowledgment in the product documentation would be // appreciated but is not required. // 2. Altered source versions must be plainly marked as such, and must not // be misrepresented as being the original software. // 3. This notice may not be removed or altered from any source distribution. /* --------------------------------------------------------------------------------------- */ #include "character.h" #include "item.h" #include "item.h" #include "settings.h" #include "ghost.h" #include "cross_lib.h" #include "level.h" #include "sleep.h" extern uint8_t level; extern uint8_t maxGhostsOnScreen; extern Image PLAYER_IMAGE; extern Image GHOST_IMAGE; extern Image BOMB_IMAGE; extern Image BOSS_IMAGE; extern Image SKULL_IMAGE; extern Image BULLET_IMAGE; extern Image FIRE_CHARGE_IMAGE; extern Image FIRE_POWER_IMAGE; extern Image EXTRA_POINTS_IMAGE; extern Image DESTROYER_IMAGE; extern Character player; extern Character skulls[SKULLS_NUMBER]; extern Item fireCharge; extern Item bombCharge; extern Item firePower; extern Item extraPoints; extern Character bullets[BULLETS_NUMBER]; extern Character ghosts[GHOSTS_NUMBER]; extern Character bombs[BOMBS_NUMBER]; extern Item chase; extern Character chasingBullet; // extern uint8_t innerVerticalWallX; extern uint8_t innerVerticalWallY; extern uint8_t innerVerticalWallLength; extern uint8_t innerHorizontalWallX; // extern uint8_t innerHorizontalWallY; extern uint8_t innerHorizontalWallLength; extern Image ROCKET_IMAGE; extern Image CALM_DOWN_IMAGE; extern Image FREEZE_IMAGE; extern Image LEFT_HORIZONTAL_MISSILE_IMAGE; extern Image RIGHT_HORIZONTAL_MISSILE_IMAGE; extern Image EXTRA_LIFE_IMAGE; extern Image INVINCIBILITY_IMAGE; extern Image SUPER_IMAGE; extern Image CONFUSE_IMAGE; extern Image SUICIDE_IMAGE; extern Image BROKEN_BRICK_IMAGE; extern Image VERTICAL_BRICK_IMAGE; extern Character leftHorizontalMissile; extern Character rightHorizontalMissile; extern Item calmDown; extern Item freeze; extern Item extraLife; extern Item invincibility; extern Item super; extern Item confuse; extern Item suicide; extern Item destroyer; extern Character rockets[MAX_ROCKETS_NUMBER]; extern uint8_t rockets_x[MAX_ROCKETS_NUMBER]; extern uint8_t isBossLevel; extern uint8_t isOneMissileLevel; extern uint8_t isMissileLevel; // extern uint8_t isRocketLevel; extern uint8_t isInnerHorizontalWallLevel; extern uint8_t isInnerVerticalWallLevel; extern uint8_t rocketsOnScreen; extern uint8_t restart; extern Image HORIZONTAL_BRICK_IMAGE; extern Image VERTICAL_BRICK_IMAGE; void DRAW_HORIZONTAL_LINE(uint8_t x,uint8_t y, uint8_t length) { uint8_t i; for(i=0;i17 uint8_t lvmod; lvmod = level&7; #endif if(!isInnerVerticalWallLevel) { innerVerticalWallLength = 0; } else { #if YSize>17 innerVerticalWallLength = YSize-11-lvmod; #elif YSize>9 innerVerticalWallLength = 6; #else innerVerticalWallLength = 3; #endif } // innerVerticalWallX = (XSize>>1); innerVerticalWallY = (YSize>>1)-(innerVerticalWallLength>>1); } void updateInnerHorizontalWall(void) { #if (defined(WIDE) || YSize>12) uint8_t lvmod = level&7; #endif if(!isInnerHorizontalWallLevel) { innerHorizontalWallLength = 0; } else { #if defined(WIDE) innerHorizontalWallLength = XSize-13-lvmod; #elif YSize<=12 innerHorizontalWallLength = 8; #else innerHorizontalWallLength = XSize-11-lvmod; #endif } innerHorizontalWallX = (XSize>>1)-(innerHorizontalWallLength>>1); // innerHorizontalWallY = (YSize>>1); } uint8_t innerHorizontalWallLevel(void) { // 2, 5, 7, 10, 13, 16 return ((level&7)==2) || ((level&7)==5) || ((level&7)==7); // return ((level&7)==2) || ((level&7)==4) || ((level&7)==6); } uint8_t innerVerticalWallLevel(void) { // 0, 1, 4, 8, 9, 12, 16 return ((level&7)==1) || ((level&7)==4) || ((level&7)==0); } uint8_t oneMissileLevel(void) { return (level==3) || (level==4); // return ((level&7)==3) || ((level&7)==7) || (level==9); } // uint8_t rocketLevel(void) // { // return !level || ((level==3) || (level>=6)); // } uint8_t missileLevel(void) { return level>=5; // return ((level&7)==0) || ((level&7)==6) || ((level&7)==5) || ((level&7)==4); } uint8_t bossLevel(void) { return level && !(level&7); } void initializeAwayFromWall(Character * characterPtr, uint8_t x, uint8_t y, uint8_t status, Image *imagePtr) { initializeCharacter(characterPtr, x, y, status, imagePtr); relocateAwayFromWalls(characterPtr); } #if defined(BETWEEN_LEVEL) void spiral(register Character *characterPtr, uint8_t length) { uint8_t i; uint8_t j; characterPtr->_x = XSize/2; characterPtr->_y = YSize/2; for(i=0;i0 if(!level) { #if MAX_ROCKETS_NUMBER<4 rocketsOnScreen = MAX_ROCKETS_NUMBER; #else rocketsOnScreen = 4; #endif } else if(level<=4) { rocketsOnScreen = 0; } else if(level<=9) { rocketsOnScreen = 2; } else if(level<12) { #if MAX_ROCKETS_NUMBER<4 rocketsOnScreen = MAX_ROCKETS_NUMBER; #else rocketsOnScreen = 4; #endif } else { rocketsOnScreen = MAX_ROCKETS_NUMBER; } #endif } // #define DEBUG_LEVEL void fillLevelWithCharacters(void) { uint8_t i; uint8_t count; #if !defined(_XL_NO_COLOR) switch(level&3) { case 0: HORIZONTAL_BRICK_IMAGE._color = _XL_RED; VERTICAL_BRICK_IMAGE._color = _XL_RED; break; case 1: HORIZONTAL_BRICK_IMAGE._color = _XL_GREEN; VERTICAL_BRICK_IMAGE._color = _XL_GREEN; break; case 2: HORIZONTAL_BRICK_IMAGE._color = _XL_YELLOW; VERTICAL_BRICK_IMAGE._color = _XL_YELLOW; break; default: HORIZONTAL_BRICK_IMAGE._color = _XL_CYAN; VERTICAL_BRICK_IMAGE._color = _XL_CYAN; } #endif #if !defined(NO_BORDERS) DRAW_BORDERS(); #endif #if XSize==40 #define NEXT_ROCKET_INDEX (((i+1)*(XSize))/(rocketsOnScreen+1)) #else #define NEXT_ROCKET_INDEX (i+1)*(XSize/(rocketsOnScreen+1)) #endif for(i=0;imaxGhostsOnScreen) { count = maxGhostsOnScreen; } else { count = ghostCount; } restart = 1; for(i=0;i>1),(YSize>>1),0,&CALM_DOWN_IMAGE); initializeAwayFromWall(&(fireCharge._character),(XSize>>1),(YSize>>1),1,&BULLET_IMAGE); #if defined(NO_BLINKING) #if !defined(_XL_NO_COLOR) initializeAwayFromWall(&(bombCharge._character),(XSize>>1),(YSize>>1),0,&BROKEN_BRICK_IMAGE); #else initializeAwayFromWall(&(bombCharge._character),(XSize>>1),(YSize>>1),0,&VERTICAL_BRICK_IMAGE); #endif #else initializeAwayFromWall(&(bombCharge._character),(XSize>>1),(YSize>>1),0,&BOMB_IMAGE); #endif initializeAwayFromWall(&(freeze._character),(XSize>>1),(YSize>>1),0,&FREEZE_IMAGE); initializeAwayFromWall(&(extraPoints._character), (XSize>>1), (YSize>>1), 0, &EXTRA_POINTS_IMAGE); initializeAwayFromWall(&(super._character), (XSize>>1), (YSize>>1), 0, &SUPER_IMAGE); initializeAwayFromWall(&(confuse._character), (XSize>>1), (YSize>>1), 0, &CONFUSE_IMAGE); initializeAwayFromWall(&(suicide._character), (XSize>>1), (YSize>>1), 0, &SUICIDE_IMAGE); initializeAwayFromWall(&(destroyer._character), (XSize>>1), (YSize>>1), 0, &DESTROYER_IMAGE); initializeAwayFromWall(&(firePower._character),(XSize>>1), (YSize>>1), 0, &FIRE_POWER_IMAGE); initializeAwayFromWall(&player,(uint8_t) ((XSize>>1)+(_XL_RAND()&1)),(uint8_t) ((YSize>>1)+(_XL_RAND()&1)),1,&PLAYER_IMAGE); initializeAwayFromWall(&(extraLife._character), (XSize>>1), (YSize>>1), 0, &EXTRA_LIFE_IMAGE); initializeAwayFromWall(&(invincibility._character), (XSize>>1), (YSize>>1), 0, &INVINCIBILITY_IMAGE); if(isOneMissileLevel) { initializeCharacter(&rightHorizontalMissile, XSize-1, (YSize>>1), 1,&RIGHT_HORIZONTAL_MISSILE_IMAGE); } else if(isMissileLevel) { initializeCharacter(&rightHorizontalMissile, XSize-1, HORIZONTAL_MISSILE_OFFSET, 1,&RIGHT_HORIZONTAL_MISSILE_IMAGE); initializeCharacter(&leftHorizontalMissile, 0, YSize-1-HORIZONTAL_MISSILE_OFFSET, 1,&LEFT_HORIZONTAL_MISSILE_IMAGE); } displayPlayer(&player); #if !defined(_XL_NO_COLOR) BULLET_IMAGE._color = _XL_WHITE; #endif for(i=0;i18 _draw_stat(1,16,&ROCKET_IMAGE); _draw_stat(1,17,&FREEZE_IMAGE); _draw_stat(1,18,&SUPER_IMAGE); _draw_stat(1,19,&EXTRA_LIFE_IMAGE); _draw_stat(1,20,&INVINCIBILITY_IMAGE); _draw_stat(1,21,&CONFUSE_IMAGE); _draw_stat(1,22,&SUICIDE_IMAGE); _draw_stat(1,23,&BROKEN_BRICK_IMAGE); #else _draw_stat(3,7,&ROCKET_IMAGE); _draw_stat(3,8,&FREEZE_IMAGE); _draw_stat(3,9,&SUPER_IMAGE); _draw_stat(3,10,&EXTRA_LIFE_IMAGE); _draw_stat(3,11,&INVINCIBILITY_IMAGE); _draw_stat(3,12,&CONFUSE_IMAGE); _draw_stat(3,13,&SUICIDE_IMAGE); _draw_stat(3,14,&BROKEN_BRICK_IMAGE); #endif #endif #endif _XL_PRINTD(4,3,5, 1234U); _XL_PRINTD(4,5,5,56789U); _XL_PRINT(4,7,"abcdefghijklmnopqrstuvwxyz,./|-"); _XL_PRINT(4,9,"ABCDEFGHIJKLMNOPQRSTUVWXYZ;+{}="); while(1){}; } #endif #if !defined(NO_EXTRA_TITLE) && YSize>=17 static const uint8_t item_tile[7][2] = { { _GHOST_TILE , _XL_WHITE }, { _FAST_GHOST_TILE , _XL_GREEN }, { _SKULL_TILE , _XL_YELLOW }, { _BOSS_TILE , _XL_RED }, { _BULLET_TILE , _XL_WHITE}, { _FIRE_POWER_TILE , _FIRE_POWER_COLOR }, { _BOMB_TILE , _XL_RED }, }; static const char item_name[7][9] = { _XL_G _XL_H _XL_O _XL_S _XL_T, _XL_S _XL_P _XL_E _XL_C _XL_T _XL_E _XL_R, _XL_S _XL_K _XL_U _XL_L _XL_L, _XL_B _XL_O _XL_S _XL_S, _XL_B _XL_U _XL_L _XL_L _XL_E _XL_T _XL_S, _XL_P _XL_O _XL_W _XL_E _XL_R _XL_SPACE _XL_U _XL_P, _XL_M _XL_I _XL_N _XL_E, }; #if XSize>16 && YSize>20 #define _NEXT_ROW 2 #define _Y_ITEMS_OFFSET 0 #else #define _NEXT_ROW 1 #define _Y_ITEMS_OFFSET 1 #endif #define display_items() \ do \ { \ uint8_t i; \ \ for(i=0;i<7;++i) \ { \ _XL_DRAW(XSize/2-5,YSize/3+1+i*_NEXT_ROW+_Y_ITEMS_OFFSET, item_tile[i][0], item_tile[i][1]); \ _XL_SET_TEXT_COLOR(_XL_GREEN); \ _XL_PRINT(XSize/2-5+3,YSize/3+1+i*_NEXT_ROW+_Y_ITEMS_OFFSET, (char *)item_name[i]); \ } \ } while(0) #endif #define handle_secret_item_at_start_up(secretFlag, item, secretIndex) \ if(secretFlag) \ { \ item._coolDown = 2; \ setSecret(secretIndex); \ secretFlag = 0; \ }\ void resetSecrets(void) { uint8_t i; for(i=0;i=17 display_items(); #endif _XL_WAIT_FOR_INPUT(); _XL_SET_TEXT_COLOR(_XL_YELLOW); _printCrossShoot(); _XL_ZAP_SOUND(); SHORT_SLEEP(3); #if !defined(NO_HINTS) && XSize>=18 _XL_CLEAR_SCREEN(); printHints(); #endif } #endif void handle_special_triggers(void) { confuse_present_on_level = !level || destroyed_bases_in_completed_levels; suicide_present_on_level = !level || (destroyed_bases_in_completed_levels>=2); super_present_on_level = all_skulls_killed_in_completed_levels>=2; extraLife_present_on_level = super_present_on_level && suicide_present_on_level && !discoveredSecrets[EXTRA_LIFE_EFFECT_SECRET_INDEX]; } void handle_player_killed_by_ghost(void) { uint8_t reachedByGhost = sameLocationAsAnyGhostLocation(player._x, player._y, ghosts, maxGhostsOnScreen); if(destroyerActive && (reachedByGhost < maxGhostsOnScreen)) { points += GHOST_VS_BOMBS_BONUS; ghostDiesAndSpawns(&ghosts[reachedByGhost]); } if((!invincibilityActive && ((reachedByGhost0)&&(skullsCount)) && !isBossLevel) || (skullsCount && isBossLevel))) // while alive && there are still ghosts { #if defined(DEBUG_END) gameCompleted(); #endif #if !defined(_XL_TURN_BASED) MOVE_PLAYER(); #if !defined(TRANSITION_ANIMATION) _DRAW_PLAYER(); #endif #endif handle_rockets(); handle_horizontal_missiles(); ++loop; if(points>(extraLifeThroughPointsCounter*EXTRA_LIFE_THROUGH_POINTS)) { ++extraLifeThroughPointsCounter; _XL_PING_SOUND(); ++lives; printLivesStats(); _XL_TICK_SOUND(); } handle_bullets(); handle_bomb(); handle_player_killed_by_ghost(); #if !defined(NO_CHASE) if(!freezeActive) { if(ghostCount) { chaseCharacter(); } ++ghostLevel; } else // Frozen ghosts have to be displayed anyway { for(ind=0;ind0 SHORT_SLEEP(1); #endif _XL_DELETE(player._x, player._y); } SHORT_SLEEP(3); handle_calmDown_item(); handle_extraPoints_item(); handle_firePower_item(); handle_fireCharge_item(); handle_bombCharge_item(); handle_freeze_count_down(); handle_freeze_item(); handle_invincibility_item(); handle_invincibility_count_down(); handle_destroyer_triggers(); handle_destroyer_item(); handle_destroyer_count_down(); if(super_present_on_level) { handle_super_item(); if(extraLife_present_on_level) { handle_extraLife_item(); } } if(confuse_present_on_level) { handle_confuse_item(); handle_confuse_count_down(); if(suicide_present_on_level) { handle_suicide_item(); } } handle_player_killed_by_ghost(); // reachedByGhost = sameLocationAsAnyGhostLocation(player._x, player._y, ghosts, maxGhostsOnScreen); // if(destroyerActive && (reachedByGhost < maxGhostsOnScreen)) // { // points += GHOST_VS_BOMBS_BONUS; // ghostDiesAndSpawns(&ghosts[reachedByGhost]); // } // if((!invincibilityActive && ((reachedByGhost>1)-(innerHorizontalWallLength>>1), YSize/2, innerHorizontalWallLength); } #else if(isInnerVerticalWallLevel) { DRAW_VERTICAL_LINE(XSize/2, YSize/2-(innerVerticalWallLength/2), innerVerticalWallLength); } #endif displayBombs(); } }; // end inner while [while (player._alive && ghostCount>0), i.e., exit on death or end of level] if(player._status) // if level finished { _DRAW_PLAYER(); #if defined(BETWEEN_LEVEL) chasedEnemyPtr = &player; SHOW_DOWN(); #endif #if !defined(LESS_TEXT) _XL_SLEEP(1); printVictoryMessage(); _XL_WAIT_FOR_INPUT(); // _XL_CLEAR_SCREEN(); #endif handleLevelBonus(((uint16_t)BASE_LEVEL_BONUS)+((uint16_t) LEVEL_BONUS)*((uint16_t) level)+ghostCount*GHOSTS_LEFT_BONUS); if(!isBossLevel) { if(ghostCount>=CALM_DOWN_SECRET_THRESHOLD) { calmDownSecret = 1; if(ghostCount>=EXTRA_POINTS_SECRET_THRESHOLD) { extraPointsSecret = 1; if(ghostCount>=FREEZE_SECRET_THRESHOLD) { freezeSecret = 1; if((ghostCount>=SECRET_LEVEL_THRESHOLD) && !secretLevelActivated) { zeroLevelSecret = 1; } } } } } _XL_SLEEP(1); _XL_WAIT_FOR_INPUT(); if(isBossLevel && level!=FINAL_LEVEL) { all_skulls_killed_in_completed_levels = 1; destroyed_bases_in_completed_levels/=2; } else { if(!skullsCount) { ++all_skulls_killed_in_completed_levels; } destroyed_bases_in_completed_levels+=destroyed_bases; } if(zeroLevelSecret) { nextLevel = level+1; level = 0; secretLevelActivated = 1; zeroLevelSecret = 0; setSecret(ZERO_LEVEL_SECRET_INDEX); ghostCount = ZERO_LEVEL_GHOSTS_NUMBER; } else { if(!level) { // Restart at the next level after the one you left when entering the secret zero level level = nextLevel; } else { ++level; } if(level>8) { ghostCount = NUMBER_OF_GHOSTS_ON_PART_II; } else { ghostCount = FIRST_LEVEL_GHOSTS_NUMBER + 2*level; } } } else // if dead { #if defined(BETWEEN_LEVEL) chasedEnemyPtr = &skulls[0]; #endif _XL_CLEAR_SCREEN(); --lives; if(lives>0) { player._status = 1; } firePowerItemSecret = 0; calmDownSecret = 0; extraPointsSecret = 0; freezeSecret = 0; fireChargeSecret = 0; firePowerLevelSecret = 0; zeroLevelSecret = 0; } #if defined(BETWEEN_LEVEL) spiral(chasedEnemyPtr, SPIRAL_LOOPS); // _XL_SLEEP(1); #endif } while (player._status && (level<(FINAL_LEVEL+1))); // lives left and not completed game game // GAME OVER if(level==FINAL_LEVEL+1) // if completed game { // uint8_t i; // uint8_t lives_left = lives; do { points+=LIVES_LEFT_BONUS; --lives; displayScoreStats(); printLivesStats(); _XL_ZAP_SOUND(); _XL_SLEEP(1); } while(lives); _XL_SLEEP(2); _XL_WAIT_FOR_INPUT(); gameCompleted(); _XL_SLEEP(1); } if(points>highScore) { highScore = points; } _XL_CLEAR_SCREEN(); #if !defined(NO_ACHIEVEMENTS) printAchievements(); _XL_SLEEP(1); _XL_WAIT_FOR_INPUT(); _XL_CLEAR_SCREEN(); #endif printGameOver(); _XL_SLEEP(1); _XL_WAIT_FOR_INPUT(); } // while(1) -> restart from the beginning return EXIT_SUCCESS; } ================================================ FILE: src/games/shoot/split_files/move_player.c ================================================ /* --------------------------------------------------------------------------------------- */ // // CROSS SHOOT by Fabrizio Caruso // // Fabrizio_Caruso@hotmail.com // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from // the use of this software. // Permission is granted to anyone to use this software for non-commercial applications, // subject to the following restrictions: // 1. The origin of this software must not be misrepresented; you must not // claim that you wrote the original software. If you use this software in // a product, an acknowledgment in the product documentation would be // appreciated but is not required. // 2. Altered source versions must be plainly marked as such, and must not // be misrepresented as being the original software. // 3. This notice may not be removed or altered from any source distribution. /* --------------------------------------------------------------------------------------- */ #include "settings.h" #include "move_player.h" #include "character.h" #include "skull.h" #include "definitions.h" #include "bullet.h" extern uint8_t bombCount; extern Character player; extern uint8_t skullXCountDown; extern uint8_t skullYCountDown; extern uint8_t playerFire; extern Character bullet; extern uint8_t guns; extern uint8_t playerDirection; extern uint8_t player_invincibility; extern uint8_t playerBlink; uint8_t innerWallReached(uint8_t x, uint8_t y) { #if !defined(NO_HORIZONTAL_LEVEL) return innerVerticalWallReached(x,y) || innerHorizontalWallReached(x,y); #else return innerVerticalWallReached(x,y); #endif } #if defined(PLAYER_DIRECTION_CHANGE) void up_direction(void) { up_transiction(); playerDirection = UP; SHOW_UP(); } void down_direction(void) { playerDirection = DOWN; SHOW_DOWN(); } void left_direction(void) { playerDirection = LEFT; SHOW_LEFT(); } void right_direction(void) { playerDirection = RIGHT; SHOW_RIGHT(); } #define _DO_MOVE_UP \ deletePlayer(&player); \ --player._y; \ skullYCountDown = SKULL_COUNT_DOWN; \ playerFire = 0; \ up_direction(); #define _DO_MOVE_DOWN \ deletePlayer(&player); \ ++player._y; \ skullYCountDown = SKULL_COUNT_DOWN; \ playerFire = 0; \ down_direction(); #define _DO_MOVE_LEFT \ deletePlayer(&player); \ --player._x; \ skullXCountDown = SKULL_COUNT_DOWN; \ playerFire = 0; \ left_direction(); #define _DO_MOVE_RIGHT \ deletePlayer(&player); \ ++player._x; \ skullXCountDown = SKULL_COUNT_DOWN; \ playerFire = 0; \ right_direction(); #if defined(__NO_PRINT) void MOVE_PLAYER(void) {} #else void MOVE_PLAYER(void) { uint8_t input = _XL_INPUT(); if(_XL_UP(input)) { if(playerDirection != UP) { up_direction(); } else if((player._y>1) && !innerWallReached(player._x,player._y-1)) { _DO_MOVE_UP } } else if(_XL_DOWN(input)) { if(playerDirection != DOWN) { down_direction(); } else if((player._y1) && !innerWallReached(player._x-1,player._y)) { _DO_MOVE_LEFT } } else if(_XL_RIGHT(input)) { if(playerDirection != RIGHT) { right_direction(); } else if((player._x0 && availableBullet()1) && !innerWallReached(player._x,player._y-1)) { _DO_MOVE_UP } else if(_XL_DOWN(input) && (player._y1) && !innerWallReached(player._x-1,player._y)) { _DO_MOVE_LEFT } else if(_XL_RIGHT(input) && (player._x0 && availableBullet()=SKULL_LOOP_TRIGGER) #define NON_BOSS_TRIGGER_REACHED (INACTIVITY_COUNT_DOWN_REACHED || GHOST_COUNT_TRIGGER_REACHED) #define SKULL_RAND_CONDITION (_XL_RAND()>skullSlowDown) void skullDies(register Character * skullPtr) { // DRAW_BROKEN_BRICK(skullPtr->_x, skullPtr->_y); _XL_DRAW(skullPtr->_x, skullPtr->_y,_SKULL_TILE, _XL_RED); skullPtr->_status=0; if(!(--skullsCount)) { skullActive = 0; } _XL_EXPLOSION_SOUND(); // points+=SKULL_POINTS; increasePoints(SKULL_POINTS); if(isBossLevel) { // points+=SKULL_POINTS; increasePoints(BOSS_LEVEL_SKULL_EXTRA_POINTS); if(skullPtr->_imagePtr==&BOSS_IMAGE) { increasePoints(BOSS_EXTRA_POINTS); } } // displayScoreStats(); deleteSkull(skullPtr); } void handle_skull(Character *skullPtr, uint8_t strategy) { if(skullPtr->_status) { if(handle_player_killed(skullPtr)) { return; } if(!freezeActive && SKULL_RAND_CONDITION) { skullMoveTowardCharacter(skullPtr, strategy); } displaySkull(skullPtr); // if (playerKilledBy(skullPtr)) // { // playerDies(); // } handle_player_killed(skullPtr); } } // FAST_SPAWN_SPAWN_AND_MASK: frequency (probability) of spawning a fast ghost vs normal ghost // GHOST_SPAWN_LOOP_END_MASK: frequency of spawning a ghost (or fast ghost) #if defined(WIDE) #define FAST_SPAWN_SPAWN_AND_MASK 1 #define GHOST_SPAWN_LOOP_END_MASK 31 #else #define FAST_SPAWN_SPAWN_AND_MASK 3 #define GHOST_SPAWN_LOOP_END_MASK 63 #endif void handle_skulls(void) { if(!skullActive) { if((!isBossLevel && NON_BOSS_TRIGGER_REACHED) || (isBossLevel && BOSS_LOOP_TRIGGER_REACHED)) { #if !defined(DEBUG_NO_SKULL) skullActive = 1; #endif if(!isBossLevel && INACTIVITY_COUNT_DOWN_REACHED) { setSecret(SKULLS_ACTIVATED_SECRET_INDEX); } } else { --skullXCountDown; --skullYCountDown; } } else { uint8_t i; if(!confuseActive || !(loop&3)) { skullSlowDown = computeSkullSlowDown(); for(i=0;i_status && reachedBombInd_status<=SKULL_BOMB_DAMAGE) { skullDies(skullPtr); } else { skullPtr->_status-=SKULL_BOMB_DAMAGE; } } } void checkBombsVsSkulls(void) { uint8_t i; for(i=0;i0 void SHORT_SLEEP(uint8_t t) { uint8_t i; for(i=0;ighostSlowDown) #define FAST_GHOST_RANDOM_CONDITION() ((_XL_RAND())>FAST_GHOST_SLOWDOWN) uint8_t ghost_move_condition(void) { return GHOST_RANDOM_CONDITION(); } uint8_t fast_ghost_move_condition(void) { return FAST_GHOST_RANDOM_CONDITION(); } // Required by horizontal missile uint8_t moveCharacter(register uint8_t *hunterOffsetPtr, register uint8_t *preyOffsetPtr) { if((uint8_t) *((uint8_t *)hunterOffsetPtr) < (uint8_t) *((uint8_t *)preyOffsetPtr)) { ++(*((uint8_t *) hunterOffsetPtr)); } else if((uint8_t) *((uint8_t *) hunterOffsetPtr) > (uint8_t) *((uint8_t *)preyOffsetPtr)) { --(*((uint8_t *) hunterOffsetPtr)); } else { return 0; } return 1; } void blindChaseCharacterXStrategy(Character* hunterPtr) { deleteGhost(hunterPtr); if(moveCharacter((uint8_t *)hunterPtr + X_MOVE, (uint8_t *)&player + X_MOVE)) { return; } else { (void) moveCharacter((uint8_t *)hunterPtr + Y_MOVE, (uint8_t *)&player + Y_MOVE); } } void blindChaseCharacterYStrategy(Character* hunterPtr) { deleteGhost(hunterPtr); if(moveCharacter((uint8_t *)hunterPtr + Y_MOVE, (uint8_t *)&player + Y_MOVE)) { return; } else { (void) moveCharacter((uint8_t *)hunterPtr + X_MOVE, (uint8_t *)&player + X_MOVE); } } uint8_t inHorizontalCorridor(Character *hunterPtr) { return (hunterPtr->_y_y>YSize-innerVerticalWallY); } uint8_t leftSide(Character *characterPtr) { return characterPtr->_x < (XSize/2); } uint8_t rightSide(Character *characterPtr) { return characterPtr->_x > (XSize/2); } uint8_t sameSide(Character *hunterPtr) { return ((leftSide(&player) && leftSide(hunterPtr)) || (rightSide(&player) && rightSide(hunterPtr))); } // strategy: // 4 means do no prefer horizontal to vertical movement // 0 means always horizontal // 9 means always vertical #if !defined(SIMPLE_STRATEGY) void verticalWallMoveTowardCharacter(register Character *hunterPtr, uint8_t strategy) { if(sameSide(hunterPtr)) // same side { #if defined(DEBUG_STRATEGY) gotoxy(4,1);cprintf("same vertical side "); #endif if((_XL_RAND()&7) > strategy) // Select blind chase strategy { // 0 - 4 blindChaseCharacterXStrategy(hunterPtr); } else { // 5 - 9 blindChaseCharacterYStrategy(hunterPtr); } } else if(inHorizontalCorridor(hunterPtr)) // hunter in vertical corridor { #if defined(DEBUG_STRATEGY) gotoxy(4,1);cprintf("in horizontal corridor "); #endif blindChaseCharacterXStrategy(hunterPtr); } else if((player._x)!=(XSize/2)) // hunter behind the wall { #if defined(DEBUG_STRATEGY) gotoxy(4,1);cprintf("behind the wall "); #endif deleteGhost(hunterPtr); if(hunterPtr->_y>(YSize/2)) { ++(hunterPtr->_y); } else { --(hunterPtr->_y); } } else // prey aligned with the wall { #if defined(DEBUG_STRATEGY) gotoxy(4,1);cprintf("aligned with the wall "); #endif if(hunterPtr->_x==XSize/2) // both aligned with the wall { deleteGhost(hunterPtr); ++(hunterPtr->_x); } else { blindChaseCharacterYStrategy(hunterPtr); } } } #else void verticalWallMoveTowardCharacter(register Character *hunterPtr) { if(sameSide(hunterPtr)) // same side { #if defined(DEBUG_STRATEGY) gotoxy(4,1);cprintf("same vertical side "); #endif if((_XL_RAND()&7) > 3) // Select blind chase strategy { // 0 - 4 blindChaseCharacterXStrategy(hunterPtr); } else { // 5 - 9 blindChaseCharacterYStrategy(hunterPtr); } } else if(inHorizontalCorridor(hunterPtr)) // hunter in vertical corridor { #if defined(DEBUG_STRATEGY) gotoxy(4,1);cprintf("in horizontal corridor "); #endif blindChaseCharacterXStrategy(hunterPtr); } else if((player._x)!=(XSize/2)) // hunter behind the wall { #if defined(DEBUG_STRATEGY) gotoxy(4,1);cprintf("behind the wall "); #endif deleteGhost(hunterPtr); if(hunterPtr->_y>(YSize/2)) { ++(hunterPtr->_y); } else { --(hunterPtr->_y); } } else // prey aligned with the wall { #if defined(DEBUG_STRATEGY) gotoxy(4,1);cprintf("aligned with the wall "); #endif if(hunterPtr->_x==XSize/2) // both aligned with the wall { deleteGhost(hunterPtr); ++(hunterPtr->_x); } else { blindChaseCharacterYStrategy(hunterPtr); } } } #endif #if !defined(NO_HORIZONTAL_LEVEL) uint8_t inVerticalCorridor(Character *hunterPtr) { return (hunterPtr->_x_x>XSize-innerHorizontalWallX+1); // TODO: To check this } uint8_t topSide(Character *characterPtr) { return characterPtr->_y < (YSize/2); } uint8_t bottomSide(Character *characterPtr) { return characterPtr->_y > (YSize/2); } uint8_t sameHorizontalSide(Character *hunterPtr) { return ((topSide(&player) && topSide(hunterPtr)) || (bottomSide(&player) && bottomSide(hunterPtr))); } #if !defined(SIMPLE_STRATEGY) void horizontalWallMoveTowardCharacter(register Character *hunterPtr, uint8_t strategy) { if(sameHorizontalSide(hunterPtr)) { #if defined(DEBUG_STRATEGY) gotoxy(4,1);cprintf("same horizontal side "); #endif if((_XL_RAND()&7) > strategy) // Select blind chase strategy { // 0 - 4 blindChaseCharacterXStrategy(hunterPtr); } else { // 5 - 9 blindChaseCharacterYStrategy(hunterPtr); } } else if(inVerticalCorridor(hunterPtr)) { #if defined(DEBUG_STRATEGY) gotoxy(4,1);cprintf("in vertical corridor "); #endif blindChaseCharacterYStrategy(hunterPtr); } else if((player._y)!=(YSize/2)) { #if defined(DEBUG_STRATEGY) gotoxy(4,1);cprintf("behind the wall "); #endif deleteGhost(hunterPtr); if(hunterPtr->_x>(XSize/2)) { ++(hunterPtr->_x); } else { --(hunterPtr->_x); } } else { #if defined(DEBUG_STRATEGY) gotoxy(4,1);cprintf("aligned with the wall "); #endif if(hunterPtr->_y==YSize/2) { deleteGhost(hunterPtr); ++(hunterPtr->_y); } else { blindChaseCharacterXStrategy(hunterPtr); } } } #else void horizontalWallMoveTowardCharacter(register Character *hunterPtr) { if(sameHorizontalSide(hunterPtr)) { #if defined(DEBUG_STRATEGY) gotoxy(4,1);cprintf("same horizontal side "); #endif if((_XL_RAND()&7) > 3) // Select blind chase strategy { // 0 - 4 blindChaseCharacterXStrategy(hunterPtr); } else { // 5 - 9 blindChaseCharacterYStrategy(hunterPtr); } } else if(inVerticalCorridor(hunterPtr)) { #if defined(DEBUG_STRATEGY) gotoxy(4,1);cprintf("in vertical corridor "); #endif blindChaseCharacterYStrategy(hunterPtr); } else if((player._y)!=(YSize/2)) { #if defined(DEBUG_STRATEGY) gotoxy(4,1);cprintf("behind the wall "); #endif deleteGhost(hunterPtr); if(hunterPtr->_x>(XSize/2)) { ++(hunterPtr->_x); } else { --(hunterPtr->_x); } } else { #if defined(DEBUG_STRATEGY) gotoxy(4,1);cprintf("aligned with the wall "); #endif if(hunterPtr->_y==YSize/2) { deleteGhost(hunterPtr); ++(hunterPtr->_y); } else { blindChaseCharacterXStrategy(hunterPtr); } } } #endif #endif void skullMoveTowardCharacter(Character *hunterPtr, uint8_t strategy) { if((_XL_RAND()&7) > strategy) // Select blind chase strategy { // 0 - 4 blindChaseCharacterXStrategy(hunterPtr); } else { // 5 - 9 blindChaseCharacterYStrategy(hunterPtr); } } #if !defined(SIMPLE_STRATEGY) void computeStrategy(void) { uint8_t i; uint8_t skew = level / 8; for(i=0; i<2; ++i) // 3 (if total=8) { strategyArray[i] = 4+skew; // 5,6,7,8 prefer Y (60%, 70%, 80%, 90) strategyArray[3-i] = 2-skew; // 3,2,1,0 prefer X (60%, 70%, 80%, 90%) } for(i=4;i=20 #define MINI_WALL_SIZE 4 #define MINI_WALL_OFFSET 0 #else #define MINI_WALL_SIZE 3 #define MINI_WALL_OFFSET 1 #endif #define LV_HORIZ_NO_OF_OBJECTS 18 #define LV_HORIZ_OBJECTS \ LV_HORIZ_NO_OF_OBJECTS, \ \ XSize/2-6+MINI_WALL_OFFSET,YSize-2,MINI_WALL_SIZE,1,WALL, \ XSize/2-6+MINI_WALL_OFFSET,2,MINI_WALL_SIZE,1,WALL, \ \ XSize/2+2,YSize-2,MINI_WALL_SIZE,1,WALL, \ XSize/2+2,2,MINI_WALL_SIZE,1,WALL, \ \ XSize-2,2,1,1,FREEZE, \ XSize-2,YSize-2,1,1,RING, \ \ 1,2,1,1,RING, \ 1,YSize-2,1,1,FREEZE, \ \ (XSize-4)/2-2,5,2,1,WALL, \ (XSize-4)/2+4,5,2,1,WALL, \ \ (XSize-4)/2-3,5,1,1,FREEZE, \ (XSize-4)/2+6,5,1,1,RING, \ \ (XSize-4)/2-2,YSize-5,2,1,WALL, \ (XSize-4)/2+4,YSize-5,2,1,WALL, \ \ XSize-2,4,1,YSize-1-2-4,DIAMOND, \ 1,4,1,YSize-1-2-4,DIAMOND, \ \ XSize/2-2,YSize-2,4,1,DIAMOND, \ XSize/2-2,2,4,1,DIAMOND #define LV_HORIZ_OBJECTS_SIZE LV_OBJECTS_SIZE(LV_HORIZ_NO_OF_OBJECTS) // #if !defined(FEWER_SHURIKENS) & XSize>=20 #define LV_HORIZ_SHURIKENS \ 12, 0, 0, \ \ 2,4, \ 2,7, \ 2,10, \ 2,YSize-9, \ 2,YSize-6, \ 2,YSize-3, \ \ XSize-3,3, \ XSize-3,6, \ XSize-3,9, \ XSize-3,YSize-10, \ XSize-3,YSize-7, \ XSize-3,YSize-4 #define LV_HORIZ_SHURIKENS_SIZE LV_SHURIKENS_SIZE(12,0,0) #else #define LV_HORIZ_SHURIKENS \ 8, 0, 0, \ \ 2,4, \ 2,7, \ 2,YSize-9, \ 2,YSize-3, \ \ XSize-3,3, \ XSize-3,6, \ XSize-3,YSize-10, \ XSize-3,YSize-4 #define LV_HORIZ_SHURIKENS_SIZE LV_SHURIKENS_SIZE(8,0,0) #endif // #define LV_HORIZ_WALLS 0 #define LV_HORIZ_WALLS_SIZE LC_WALLS_SIZE(LV_HORIZ_WALLS) ================================================ FILE: src/games/shuriken/level_01_vert_bars.h ================================================ // LEVEL 1 SHOWN AS 2 #if XSize<=20 #define LV_VERT_BARS_WIDTH 2 #elif XSize<32 #define LV_VERT_BARS_WIDTH (XSize/7-1) #else #define LV_VERT_BARS_WIDTH (XSize/4-1) #endif #if XSize>=20 #if YSize>25 #define LV_VERT_BARS_NO_OF_OBJECTS 14 #define LV_VERT_BARS_OBJECTS \ LV_VERT_BARS_NO_OF_OBJECTS, \ \ 5+LV_VERT_BARS_WIDTH,4,1,YSize-7,WALL, \ XSize-6-LV_VERT_BARS_WIDTH,4,1,YSize-7,WALL, \ \ 3,4,1,YSize-7,WALL, \ XSize-4,4,1,YSize-7,WALL, \ \ XSize-3,4,1,1,RING, \ XSize-3,YSize-4,1,1,FREEZE, \ 2,4,1,1,RING, \ 2,YSize-4,1,1,FREEZE, \ \ 2,5,1,YSize-9,DIAMOND, \ 4,5,1,YSize-9,DIAMOND, \ 6+LV_VERT_BARS_WIDTH,7+4,1,YSize-7-6-8,DIAMOND, \ XSize-7-LV_VERT_BARS_WIDTH,7+4,1,YSize-7-6-8,DIAMOND, \ XSize-5,5,1,YSize-9,DIAMOND, \ XSize-3,5,1,YSize-9,DIAMOND #elif YSize>=16 #define LV_VERT_BARS_NO_OF_OBJECTS 14 #define LV_VERT_BARS_OBJECTS \ LV_VERT_BARS_NO_OF_OBJECTS, \ \ 5+LV_VERT_BARS_WIDTH,4,1,YSize-7,WALL, \ XSize-6-LV_VERT_BARS_WIDTH,4,1,YSize-7,WALL, \ \ 3,4,1,YSize-7,WALL, \ XSize-4,4,1,YSize-7,WALL, \ \ XSize-3,4,1,1,RING, \ XSize-3,YSize-4,1,1,FREEZE, \ 2,4,1,1,RING, \ 2,YSize-4,1,1,FREEZE, \ \ 2,5,1,YSize-9,DIAMOND, \ 4,5,1,YSize-9,DIAMOND, \ 6+LV_VERT_BARS_WIDTH,7,1,YSize-7-6,DIAMOND, \ XSize-7-LV_VERT_BARS_WIDTH,7,1,YSize-7-6,DIAMOND, \ XSize-5,5,1,YSize-9,DIAMOND, \ XSize-3,5,1,YSize-9,DIAMOND #else #define LV_VERT_BARS_NO_OF_OBJECTS 14 #define LV_VERT_BARS_OBJECTS \ LV_VERT_BARS_NO_OF_OBJECTS, \ \ 5+LV_VERT_BARS_WIDTH,4,1,YSize-7,WALL, \ XSize-6-LV_VERT_BARS_WIDTH,4,1,YSize-7,WALL, \ \ 3,4,1,YSize-7,WALL, \ XSize-4,4,1,YSize-7,WALL, \ \ XSize-3,4,1,1,RING, \ XSize-3,YSize-4,1,1,FREEZE, \ 2,4,1,1,RING, \ 2,YSize-4,1,1,FREEZE, \ \ 2,5,1,3,DIAMOND, \ 4,5,1,3,DIAMOND, \ 6+LV_VERT_BARS_WIDTH,7,1,3,DIAMOND, \ XSize-7-LV_VERT_BARS_WIDTH,7,1,3,DIAMOND, \ XSize-5,5,1,3,DIAMOND, \ XSize-3,5,1,3,DIAMOND #endif #else #if YSize>=16 #define LV_VERT_BARS_NO_OF_OBJECTS 10 #define LV_VERT_BARS_OBJECTS \ LV_VERT_BARS_NO_OF_OBJECTS, \ \ 3,4,1,YSize-7,WALL, \ XSize-4,4,1,YSize-7,WALL, \ \ XSize-3,4,1,1,RING, \ XSize-3,YSize-4,1,1,FREEZE, \ 2,4,1,1,RING, \ 2,YSize-4,1,1,FREEZE, \ \ 2,5,1,YSize-9,DIAMOND, \ 4,5,1,YSize-9,DIAMOND, \ \ XSize-5,5,1,YSize-9,DIAMOND, \ XSize-3,5,1,YSize-9,DIAMOND #else #define LV_VERT_BARS_NO_OF_OBJECTS 10 #define LV_VERT_BARS_OBJECTS \ LV_VERT_BARS_NO_OF_OBJECTS, \ \ 3,4,1,YSize-7,WALL, \ XSize-4,4,1,YSize-7,WALL, \ \ XSize-3,4,1,1,RING, \ XSize-3,YSize-4,1,1,FREEZE, \ 2,4,1,1,RING, \ 2,YSize-4,1,1,FREEZE, \ \ 2,5,1,2,DIAMOND, \ 4,5,1,2,DIAMOND, \ \ XSize-5,5,1,2,DIAMOND, \ XSize-3,5,1,2,DIAMOND #endif #endif #define LV_VERT_BARS_OBJECTS_SIZE LV_OBJECTS_SIZE(LV_VERT_BARS_NO_OF_OBJECTS) // #define LV_VERT_BARS_SHURIKENS \ 2, 4, 0, \ \ 3,3, \ 3,YSize-3, \ \ \ \ 6,3, \ 1,3, \ XSize-2,6, \ XSize-2-5,6 \ \ \ #define LV_VERT_BARS_SHURIKENS_SIZE LV_SHURIKENS_SIZE(2,4,0) #define LV_VERT_BARS_NO_OF_WALLS 2 #if XSize>=20 #define LV_VERT_BARS_WALLS \ LV_VERT_BARS_NO_OF_WALLS, \ \ 6+LV_VERT_BARS_WIDTH,5, \ XSize-12-2*LV_VERT_BARS_WIDTH, 1, \ \ 6+LV_VERT_BARS_WIDTH,YSize-5, \ XSize-12-2*LV_VERT_BARS_WIDTH,1 #else #define LV_VERT_BARS_WALLS \ LV_VERT_BARS_NO_OF_WALLS, \ \ 5,5, \ XSize-8-2*1, 1, \ \ 5,YSize-5, \ XSize-8-2*1,1 #endif #define LV_VERT_BARS_WALLS_SIZE LC_WALLS_SIZE(LV_VERT_BARS_NO_OF_WALLS) ================================================ FILE: src/games/shuriken/level_02_cross.h ================================================ // LEVEL 2 #define LV_CROSS_OFFSET XSize/3 #if XSize>40 #define LV_CROSS_WIDTH XSize/7 #elif XSize>=20 && YSize>=16 #define LV_CROSS_WIDTH XSize/5 #else #define LV_CROSS_WIDTH (LV_CROSS_OFFSET-2) #endif #if YSize>=22 #define LV_CROSS_HEIGHT YSize/4 #else #define LV_CROSS_HEIGHT YSize/5 #endif #if XSize>=20 && YSize>=17 #define LV_CROSS_NO_OF_OBJECTS 30 #define LV_CROSS_OBJECTS \ LV_CROSS_NO_OF_OBJECTS, \ \ LV_CROSS_OFFSET,4,1,LV_CROSS_HEIGHT,WALL, \ XSize-1-LV_CROSS_OFFSET,4,1,LV_CROSS_HEIGHT,WALL, \ \ LV_CROSS_OFFSET,YSize-4-LV_CROSS_HEIGHT,1,LV_CROSS_HEIGHT+1,WALL, \ XSize-1-LV_CROSS_OFFSET,YSize-4-LV_CROSS_HEIGHT+1,1,LV_CROSS_HEIGHT,WALL, \ \ LV_CROSS_OFFSET-LV_CROSS_WIDTH+1,4+LV_CROSS_HEIGHT,LV_CROSS_WIDTH,1,WALL, \ XSize-1-LV_CROSS_OFFSET,4+LV_CROSS_HEIGHT,LV_CROSS_WIDTH,1,WALL, \ \ LV_CROSS_OFFSET-LV_CROSS_WIDTH+1,YSize-4-LV_CROSS_HEIGHT,LV_CROSS_WIDTH,1,WALL, \ XSize-1-LV_CROSS_OFFSET,YSize-4-LV_CROSS_HEIGHT,LV_CROSS_WIDTH,1,WALL, \ \ \ LV_CROSS_OFFSET+1+1,YSize-4-LV_CROSS_HEIGHT+1+2,2,1,BLOCK, \ LV_CROSS_OFFSET+1+1,4+LV_CROSS_HEIGHT-1-2 ,2,1,BLOCK, \ LV_CROSS_OFFSET+1+1+XSize-2*(LV_CROSS_OFFSET)-6,YSize-4-LV_CROSS_HEIGHT+1+2,2,1,BLOCK, \ LV_CROSS_OFFSET+1+1+XSize-2*(LV_CROSS_OFFSET)-6,4+LV_CROSS_HEIGHT-1-2 ,2,1,BLOCK, \ \ \ LV_CROSS_OFFSET+1+1+2,YSize-4-LV_CROSS_HEIGHT+1+2,XSize-2U*(LV_CROSS_OFFSET)-8U,1,WALL, \ LV_CROSS_OFFSET+1+1+2,4+LV_CROSS_HEIGHT-1-2 ,XSize-2U*(LV_CROSS_OFFSET)-8U,1,WALL, \ \ LV_CROSS_OFFSET-1,4,1,LV_CROSS_HEIGHT,DIAMOND, \ XSize-1-LV_CROSS_OFFSET+1,4,1,LV_CROSS_HEIGHT,DIAMOND, \ \ LV_CROSS_OFFSET-1,YSize-4-LV_CROSS_HEIGHT+1,1,LV_CROSS_HEIGHT,DIAMOND, \ XSize-1-LV_CROSS_OFFSET+1,YSize-4-LV_CROSS_HEIGHT+1,1,LV_CROSS_HEIGHT,DIAMOND, \ \ XSize-2,2,1,1,FREEZE, \ XSize-2,YSize-2,1,1,RING, \ \ 1,2,1,1,RING, \ 1,YSize-2,1,1,FREEZE, \ \ LV_CROSS_OFFSET-LV_CROSS_WIDTH+1,4+LV_CROSS_HEIGHT-1,LV_CROSS_WIDTH-2,1,DIAMOND, \ XSize-1-LV_CROSS_OFFSET+2,4+LV_CROSS_HEIGHT-1,LV_CROSS_WIDTH-2,1,DIAMOND, \ \ LV_CROSS_OFFSET-LV_CROSS_WIDTH+1,YSize-4-LV_CROSS_HEIGHT+1,LV_CROSS_WIDTH-2,1,DIAMOND, \ XSize-1-LV_CROSS_OFFSET+2,YSize-4-LV_CROSS_HEIGHT+1,LV_CROSS_WIDTH-2,1,DIAMOND, \ \ LV_CROSS_OFFSET+1,4,1,LV_CROSS_HEIGHT+1,DIAMOND, \ XSize-1-LV_CROSS_OFFSET-1,4,1,LV_CROSS_HEIGHT+1,DIAMOND, \ \ LV_CROSS_OFFSET+1,YSize-4-LV_CROSS_HEIGHT,1,LV_CROSS_HEIGHT+1,DIAMOND, \ XSize-1-LV_CROSS_OFFSET-1,YSize-4-LV_CROSS_HEIGHT,1,LV_CROSS_HEIGHT+1,DIAMOND \ \ #else #define LV_CROSS_NO_OF_OBJECTS 28 #define LV_CROSS_OBJECTS \ LV_CROSS_NO_OF_OBJECTS, \ \ LV_CROSS_OFFSET,4,1,LV_CROSS_HEIGHT,WALL, \ XSize-1-LV_CROSS_OFFSET,4,1,LV_CROSS_HEIGHT,WALL, \ \ LV_CROSS_OFFSET,YSize-4-LV_CROSS_HEIGHT,1,LV_CROSS_HEIGHT+1,WALL, \ XSize-1-LV_CROSS_OFFSET,YSize-4-LV_CROSS_HEIGHT+1,1,LV_CROSS_HEIGHT,WALL, \ \ LV_CROSS_OFFSET-LV_CROSS_WIDTH+1,4+LV_CROSS_HEIGHT,LV_CROSS_WIDTH,1,WALL, \ XSize-1-LV_CROSS_OFFSET,4+LV_CROSS_HEIGHT,LV_CROSS_WIDTH,1,WALL, \ \ LV_CROSS_OFFSET-LV_CROSS_WIDTH+1,YSize-4-LV_CROSS_HEIGHT,LV_CROSS_WIDTH,1,WALL, \ XSize-1-LV_CROSS_OFFSET,YSize-4-LV_CROSS_HEIGHT,LV_CROSS_WIDTH,1,WALL, \ \ \ LV_CROSS_OFFSET+1+1,YSize-4-LV_CROSS_HEIGHT+1+2,2,1,BLOCK, \ LV_CROSS_OFFSET+1+1,4+LV_CROSS_HEIGHT-1-2 ,2,1,BLOCK, \ LV_CROSS_OFFSET+1+1+XSize-2*(LV_CROSS_OFFSET)-6,YSize-4-LV_CROSS_HEIGHT+1+2,2,1,BLOCK, \ LV_CROSS_OFFSET+1+1+XSize-2*(LV_CROSS_OFFSET)-6,4+LV_CROSS_HEIGHT-1-2 ,2,1,BLOCK, \ \ \ \ LV_CROSS_OFFSET-1,4,1,LV_CROSS_HEIGHT,DIAMOND, \ XSize-1-LV_CROSS_OFFSET+1,4,1,LV_CROSS_HEIGHT,DIAMOND, \ \ LV_CROSS_OFFSET-1,YSize-4-LV_CROSS_HEIGHT+1,1,LV_CROSS_HEIGHT,DIAMOND, \ XSize-1-LV_CROSS_OFFSET+1,YSize-4-LV_CROSS_HEIGHT+1,1,LV_CROSS_HEIGHT,DIAMOND, \ \ XSize-2,2,1,1,FREEZE, \ XSize-2,YSize-2,1,1,RING, \ \ 1,2,1,1,RING, \ 1,YSize-2,1,1,FREEZE, \ \ LV_CROSS_OFFSET-LV_CROSS_WIDTH+1,4+LV_CROSS_HEIGHT-1,LV_CROSS_WIDTH-2,1,DIAMOND, \ XSize-1-LV_CROSS_OFFSET+2,4+LV_CROSS_HEIGHT-1,LV_CROSS_WIDTH-2,1,DIAMOND, \ \ LV_CROSS_OFFSET-LV_CROSS_WIDTH+1,YSize-4-LV_CROSS_HEIGHT+1,LV_CROSS_WIDTH-2,1,DIAMOND, \ XSize-1-LV_CROSS_OFFSET+2,YSize-4-LV_CROSS_HEIGHT+1,LV_CROSS_WIDTH-2,1,DIAMOND, \ \ LV_CROSS_OFFSET+1,4,1,LV_CROSS_HEIGHT+1,DIAMOND, \ XSize-1-LV_CROSS_OFFSET-1,4,1,LV_CROSS_HEIGHT+1,DIAMOND, \ \ LV_CROSS_OFFSET+1,YSize-4-LV_CROSS_HEIGHT,1,LV_CROSS_HEIGHT+1,DIAMOND, \ XSize-1-LV_CROSS_OFFSET-1,YSize-4-LV_CROSS_HEIGHT,1,LV_CROSS_HEIGHT+1,DIAMOND \ \ #endif #define LV_CROSS_OBJECTS_SIZE LV_OBJECTS_SIZE(LV_CROSS_NO_OF_OBJECTS) // #if !defined(FEWER_SHURIKENS) #define LV_CROSS_SHURIKENS \ 4,4,2, \ 2,2,\ XSize-3,3, \ 2,YSize-2, \ XSize-3,YSize-3, \ \ LV_CROSS_OFFSET-3,2, \ XSize-1-LV_CROSS_OFFSET+3,2, \ LV_CROSS_OFFSET-3,YSize-2, \ XSize-1-LV_CROSS_OFFSET+3,YSize-2, \ \ 2, \ XSize-3 #define LV_CROSS_SHURIKENS_SIZE LV_SHURIKENS_SIZE(4,4,2) #else #define LV_CROSS_SHURIKENS \ 2,2,2, \ 2,2,\ XSize-3,YSize-3, \ \ LV_CROSS_OFFSET-3,2, \ XSize-1-LV_CROSS_OFFSET+3,YSize-2, \ \ 2, \ XSize-3 #define LV_CROSS_SHURIKENS_SIZE LV_SHURIKENS_SIZE(2,2,2) #endif #define LV_CROSS_NO_OF_WALLS 4 #define LV_CROSS_WALLS \ LV_CROSS_NO_OF_WALLS, \ LV_CROSS_OFFSET+1+1,YSize-4-YSize/4+1, \ XSize-2*(LV_CROSS_OFFSET)-4,1,\ \ LV_CROSS_OFFSET+1+1,4+YSize/4-1,\ XSize-2*(LV_CROSS_OFFSET)-4,1,\ \ LV_CROSS_OFFSET-LV_CROSS_WIDTH+1,4+YSize/4+1,\ 1,YSize-9-2*(YSize/4),\ \ XSize-1-LV_CROSS_OFFSET+LV_CROSS_WIDTH-1,4+YSize/4+1,\ 1,YSize-9-2*(YSize/4) #define LV_CROSS_WALLS_SIZE LC_WALLS_SIZE(LV_CROSS_NO_OF_WALLS) ================================================ FILE: src/games/shuriken/level_03_07_11_boss.h ================================================ // BOSS LEVELS: 3, 7, 11 SHOWN AS 4, 8, 12 #if YSize>=20 #define LV_CHALLENGE_OBJECTS \ 4, \ \ XSize/2-3,YSize/2-2,1,5,WALL, \ XSize/2+2,YSize/2-2,1,5,WALL, \ \ (XSize-4)/2-3,YSize-5,1,1,RING, \ (XSize-4)/2+6,YSize-5,1,1,FREEZE #elif YSize>=18 #define LV_CHALLENGE_OBJECTS \ 4, \ \ XSize/2-3,YSize/2-1,1,3,WALL, \ XSize/2+2,YSize/2-1,1,3,WALL, \ \ (XSize-4)/2-3,YSize-5,1,1,RING, \ (XSize-4)/2+6,YSize-5,1,1,FREEZE #else #define LV_CHALLENGE_OBJECTS \ 4, \ \ XSize/2-3,YSize/2,1,1,WALL, \ XSize/2+2,YSize/2,1,1,WALL, \ \ (XSize-4)/2-3,YSize-5,1,1,RING, \ (XSize-4)/2+6,YSize-5,1,1,FREEZE #endif #define LV_CHALLENGE_NO_OF_WALLS 2 #define LV_CHALLENGE_WALLS \ LV_CHALLENGE_NO_OF_WALLS, \ \ (XSize-4)/2,5, \ 4, 1, \ \ (XSize-4)/2,YSize-5, \ 4,1 #define LV_CHALLENGE_WALLS_SIZE LC_WALLS_SIZE(LV_CHALLENGE_NO_OF_WALLS) ================================================ FILE: src/games/shuriken/level_04_horiz_walls.h ================================================ // LEVEL 4 SHOWN AS 5 #if YSize>24 #define LV_HORIZ_WALLS_WIDTH ((XSize)/2+2) #define LV_HORIZ_WALLS_ADJUST 1 #elif YSize>21 #define LV_HORIZ_WALLS_WIDTH ((XSize)/2) #define LV_HORIZ_WALLS_ADJUST 0 #else #define LV_HORIZ_WALLS_WIDTH ((XSize)/2-2) #define LV_HORIZ_WALLS_ADJUST 0 #endif #if YSize>=17 #define LV_HORIZ_WALLS_NO_OF_OBJECTS 14 #define LV_HORIZ_WALLS_OBJECTS \ LV_HORIZ_WALLS_NO_OF_OBJECTS, \ \ 1,1+YSize/5,LV_HORIZ_WALLS_WIDTH,1,WALL, \ XSize-1-LV_HORIZ_WALLS_WIDTH,1+2*(YSize/5)-LV_HORIZ_WALLS_ADJUST,LV_HORIZ_WALLS_WIDTH,1,WALL, \ \ XSize-1-LV_HORIZ_WALLS_WIDTH,YSize-1-YSize/5,LV_HORIZ_WALLS_WIDTH,1,WALL, \ 1,YSize-1-2*(YSize/5)+LV_HORIZ_WALLS_ADJUST,LV_HORIZ_WALLS_WIDTH,1,WALL, \ \ 2,YSize-2,1,1,RING, \ XSize-3,2,1,1,FREEZE, \ \ 1,2,1,YSize/5-1,DIAMOND, \ XSize-2,YSize-YSize/5,1,YSize/5-1,DIAMOND, \ 1,2+YSize/5,1,YSize-3*(YSize/5)-3+LV_HORIZ_WALLS_ADJUST,DIAMOND, \ XSize-2,1+2*(YSize/5)-LV_HORIZ_WALLS_ADJUST+1,1,YSize-3*(YSize/5)-3+LV_HORIZ_WALLS_ADJUST,DIAMOND, \ 1,YSize-1-2*(YSize/5)+LV_HORIZ_WALLS_ADJUST+1,1,2*(YSize/5)-LV_HORIZ_WALLS_ADJUST-1,DIAMOND, \ XSize-2,2,1,1+2*(YSize/5)-LV_HORIZ_WALLS_ADJUST-2,DIAMOND, \ 2,YSize-1-2*(YSize/5)+LV_HORIZ_WALLS_ADJUST-1,LV_HORIZ_WALLS_WIDTH/3,1,DIAMOND, \ XSize-1-LV_HORIZ_WALLS_WIDTH/3-1,1+2*(YSize/5)-LV_HORIZ_WALLS_ADJUST-1,LV_HORIZ_WALLS_WIDTH/3,1,DIAMOND #else #define LV_HORIZ_WALLS_NO_OF_OBJECTS 13 #define LV_HORIZ_WALLS_OBJECTS \ LV_HORIZ_WALLS_NO_OF_OBJECTS, \ \ 1,1+YSize/5,LV_HORIZ_WALLS_WIDTH,1,WALL, \ XSize-1-LV_HORIZ_WALLS_WIDTH,1+2*(YSize/5)-LV_HORIZ_WALLS_ADJUST,LV_HORIZ_WALLS_WIDTH,1,WALL, \ \ XSize-1-LV_HORIZ_WALLS_WIDTH,YSize-1-YSize/5,LV_HORIZ_WALLS_WIDTH,1,WALL, \ 1,YSize-1-2*(YSize/5)+LV_HORIZ_WALLS_ADJUST,LV_HORIZ_WALLS_WIDTH,1,WALL, \ \ 2,YSize-2,1,1,RING, \ XSize-3,2,1,1,FREEZE, \ \ 1,2,1,YSize/5-1,DIAMOND, \ XSize-2,YSize-YSize/5,1,YSize/5-1,DIAMOND, \ 1,2+YSize/5,1,YSize-3*(YSize/5)-3+LV_HORIZ_WALLS_ADJUST,DIAMOND, \ XSize-2,1+2*(YSize/5)-LV_HORIZ_WALLS_ADJUST+1,1,YSize-3*(YSize/5)-3+LV_HORIZ_WALLS_ADJUST,DIAMOND, \ 1,YSize-1-2*(YSize/5)+LV_HORIZ_WALLS_ADJUST+1,1,2*(YSize/5)-LV_HORIZ_WALLS_ADJUST-1,DIAMOND, \ XSize-2,2,1,1+2*(YSize/5)-LV_HORIZ_WALLS_ADJUST-2,DIAMOND, \ XSize-1-LV_HORIZ_WALLS_WIDTH/3-1,1+2*(YSize/5)-LV_HORIZ_WALLS_ADJUST-1,LV_HORIZ_WALLS_WIDTH/3,1,DIAMOND #endif #define LV_HORIZ_WALLS_OBJECTS_SIZE LV_OBJECTS_SIZE(LV_HORIZ_WALLS_NO_OF_OBJECTS) // #define LV_HORIZ_WALLS_SHURIKENS \ 4,4,0, \ \ XSize-3,1+YSize/5,\ 2,1+2*(YSize/5)-LV_HORIZ_WALLS_ADJUST+1, \ 2,YSize-1-YSize/5, \ XSize-3,YSize-1-2*(YSize/5)+LV_HORIZ_WALLS_ADJUST-1, \ \ 1+LV_HORIZ_WALLS_WIDTH,2, \ XSize-LV_HORIZ_WALLS_WIDTH-2,YSize-2, \ 1+LV_HORIZ_WALLS_WIDTH/2,1+YSize/5+1, \ XSize-1-1-LV_HORIZ_WALLS_WIDTH/2-LV_HORIZ_WALLS_ADJUST,YSize-1-YSize/5-1 #define LV_HORIZ_WALLS_SHURIKENS_SIZE LV_SHURIKENS_SIZE(4,4,0) #define LV_HORIZ_WALLS_NO_OF_WALLS 0 #define LV_HORIZ_WALLS_WALLS \ LV_HORIZ_WALLS_NO_OF_WALLS #define LV_HORIZ_WALLS_WALLS_SIZE LC_WALLS_SIZE(LV_HORIZ_WALLS_NO_OF_WALLS) ================================================ FILE: src/games/shuriken/level_05_h_barriers.h ================================================ // LEVEL 3 #define LV_H_BARRIERS_NO_OF_OBJECTS 24 #define LV_H_BARRIERS_BAR_SIZE XSize/7 #if YSize>=16 #define LV_H_BARRIERS_OBJECTS \ LV_H_BARRIERS_NO_OF_OBJECTS, \ \ XSize-2,4,1,YSize-1-2-4,WALL, \ 1,4,1,YSize-1-2-4,WALL, \ \ 5,YSize-2,3,1,WALL, \ 5,2,3,1,WALL, \ XSize-8,YSize-2,3,1,WALL, \ XSize-8,2,3,1,WALL, \ \ \ XSize-2,3,1,1,FREEZE, \ XSize-2,YSize-2,1,1,RING, \ 1,3,1,1,FREEZE, \ 1,YSize-2,1,1,RING, \ \ 8,4,1,2,BLOCK, \ XSize-9,4,1,2,BLOCK, \ \ 5,8, 1,1, WALL, \ 6+LV_H_BARRIERS_BAR_SIZE,8, 1,1, WALL, \ 5,YSize-6,1,1,WALL, \ 6+LV_H_BARRIERS_BAR_SIZE,YSize-6,1,1,WALL, \ \ XSize-7-LV_H_BARRIERS_BAR_SIZE,8, 1,1, WALL, \ XSize-6,8, 1,1, WALL, \ XSize-7-LV_H_BARRIERS_BAR_SIZE,YSize-6,1,1,WALL, \ XSize-6,YSize-6,1,1,WALL, \ \ 8,YSize-2,XSize-16,1,DIAMOND, \ 8,2,XSize-16,1,DIAMOND, \ \ XSize-2-1,7,1,YSize-1-2-4-6,DIAMOND, \ 2,7,1,YSize-1-2-4-6,DIAMOND \ #else #define LV_H_BARRIERS_OBJECTS \ LV_H_BARRIERS_NO_OF_OBJECTS, \ \ XSize-2,4,1,YSize-1-2-4,WALL, \ 1,4,1,YSize-1-2-4,WALL, \ \ 5,YSize-2,3,1,WALL, \ 5,2,3,1,WALL, \ XSize-8,YSize-2,3,1,WALL, \ XSize-8,2,3,1,WALL, \ \ \ XSize-2,3,1,1,FREEZE, \ XSize-2,YSize-2,1,1,RING, \ 1,3,1,1,FREEZE, \ 1,YSize-2,1,1,RING, \ \ 8,4,1,2,BLOCK, \ XSize-9,4,1,2,BLOCK, \ \ 5,8, 1,1, WALL, \ 6+LV_H_BARRIERS_BAR_SIZE,8, 1,1, WALL, \ 5,3,1,1,WALL, \ 6+LV_H_BARRIERS_BAR_SIZE,3,1,1,WALL, \ \ XSize-7-LV_H_BARRIERS_BAR_SIZE,8, 1,1, WALL, \ XSize-6,8, 1,1, WALL, \ XSize-7-LV_H_BARRIERS_BAR_SIZE,3,1,1,WALL, \ XSize-6,3,1,1,WALL, \ \ 8,YSize-2,XSize-16,1,DIAMOND, \ 8,2,XSize-16,1,DIAMOND, \ \ XSize-2-1,7,1,3,DIAMOND, \ 2,7,1,3,DIAMOND \ #endif #define LV_H_BARRIERS_OBJECTS_SIZE LV_OBJECTS_SIZE(LV_H_BARRIERS_NO_OF_OBJECTS) // #if XSize>=20 && !defined(FEWER_SHURIKENS) #define LV_H_BARRIERS_SHURIKENS \ 3,8,0, \ \ 3,YSize-3, \ XSize-5,6, \ 5,3, \ \ \ 3,3, \ XSize-4,4, \ 7,5, \ XSize-8,6, \ 6,YSize-3, \ XSize-7,YSize-3, \ 4,7, \ XSize-5,YSize-6 \ \ \ #define LV_H_BARRIERS_SHURIKENS_SIZE LV_SHURIKENS_SIZE(3,8,0) #else #define LV_H_BARRIERS_SHURIKENS \ 3,6,0, \ \ 3,YSize-3, \ XSize-5,6, \ 5,3, \ \ \ 3,3, \ XSize-4,4, \ 6,YSize-3, \ XSize-7,YSize-3, \ 4,7, \ XSize-5,YSize-6 \ \ \ #define LV_H_BARRIERS_SHURIKENS_SIZE LV_SHURIKENS_SIZE(3,6,0) #endif // #define LV_H_BARRIERS_NO_OF_WALLS 4 #define LV_H_BARRIERS_WALLS \ LV_H_BARRIERS_NO_OF_WALLS, \ \ 6,8, \ LV_H_BARRIERS_BAR_SIZE,1, \ \ 6,YSize-6, \ LV_H_BARRIERS_BAR_SIZE,1,\ \ XSize-7-XSize/7+1,8, \ LV_H_BARRIERS_BAR_SIZE,1, \ \ XSize-7-XSize/7+1,YSize-6, \ LV_H_BARRIERS_BAR_SIZE,1 #define LV_H_BARRIERS_WALLS_SIZE LC_WALLS_SIZE(LV_H_BARRIERS_NO_OF_WALLS) ================================================ FILE: src/games/shuriken/level_06_rain.h ================================================ // LEVEL 6 SHOWN AS 7 #define LV_RAIN_NO_OF_OBJECTS 13 #define LV_RAIN_OBJECTS \ LV_RAIN_NO_OF_OBJECTS, \ \ XSize-2,3,1,1,RING, \ XSize-2,YSize-2,1,1,FREEZE, \ \ 1,3,1,1,RING, \ 1,YSize-2,1,1,FREEZE, \ \ 4,YSize-4,4,1,WALL, \ XSize-8,YSize-4,4,1,WALL, \ \ 8,4,1,4,BLOCK, \ XSize-9,4,1,4,BLOCK, \ \ XSize-2,8,1,YSize-1-2-8,DIAMOND, \ 1,8,1,YSize-1-2-8,DIAMOND, \ \ 8,YSize-2,XSize-1-3-12,1,DIAMOND, \ \ 4,YSize-5,4,1,DIAMOND, \ XSize-8,YSize-5,4,1,DIAMOND \ #define LV_RAIN_OBJECTS_SIZE LV_OBJECTS_SIZE(LV_RAIN_NO_OF_OBJECTS) // #if XSize>=20 #define LV_RAIN_SHURIKENS \ 5, 0, 6, \ \ 3,8, \ XSize-3,YSize-6, \ 4,YSize-3, \ 5,YSize/2+3, \ XSize-5,3, \ \ 7, \ 2, \ XSize-3, \ XSize-8, \ 5, \ XSize-6 #define LV_RAIN_SHURIKENS_SIZE LV_SHURIKENS_SIZE(5,0,6) #elif YSize>=20 #define LV_RAIN_SHURIKENS \ 5, 0, 4, \ \ 3,8, \ XSize-3,YSize-6, \ 4,YSize-3, \ 5,YSize/2+3, \ XSize-5,3, \ \ 2, \ XSize-3, \ 4, \ XSize-5 #define LV_RAIN_SHURIKENS_SIZE LV_SHURIKENS_SIZE(5,0,4) #else #define LV_RAIN_SHURIKENS \ 4, 0, 4, \ \ 3,8, \ XSize-3,YSize-6, \ 4,YSize-3, \ XSize-5,3, \ \ 2, \ XSize-3, \ 4, \ XSize-5 #define LV_RAIN_SHURIKENS_SIZE LV_SHURIKENS_SIZE(4,0,4) #endif // #define LV_RAIN_NO_OF_WALLS 0 #define LV_RAIN_WALLS \ 0 #define LV_RAIN_WALLS_SIZE LC_WALLS_SIZE(LV_RAIN_NO_OF_WALLS) ================================================ FILE: src/games/shuriken/level_08_vert_walls.h ================================================ // LEVEL 8 SHOWN AS 9 #define LV_VERT_WALLS_WIDTH (XSize/4) #define LV_VERT_WALLS_NO_OF_OBJECTS 12 #if YSize>=16 #define LV_VERT_WALLS_OBJECTS \ LV_VERT_WALLS_NO_OF_OBJECTS, \ \ LV_VERT_WALLS_WIDTH,2,1,YSize-7,WALL, \ XSize-1-LV_VERT_WALLS_WIDTH,6,1,YSize-7,WALL, \ \ 1,YSize-2,1,1,RING, \ XSize-2,2,1,1,RING, \ \ LV_VERT_WALLS_WIDTH+1,2,1,1,FREEZE, \ XSize-1-LV_VERT_WALLS_WIDTH-1,YSize-2,1,1,FREEZE, \ \ XSize/2+1,YSize/2-1,1,4,BLOCK, \ XSize/2-2,YSize/2-1,1,4,BLOCK, \ \ LV_VERT_WALLS_WIDTH-1,2,1,YSize-7,DIAMOND, \ XSize-1-LV_VERT_WALLS_WIDTH+1,6,1,YSize-7,DIAMOND, \ \ 2,YSize-2,LV_VERT_WALLS_WIDTH-2,1,DIAMOND, \ XSize-1-LV_VERT_WALLS_WIDTH+1,2,LV_VERT_WALLS_WIDTH-2,1,DIAMOND #else #define LV_VERT_WALLS_OBJECTS \ LV_VERT_WALLS_NO_OF_OBJECTS, \ \ LV_VERT_WALLS_WIDTH,2,1,3,WALL, \ XSize-1-LV_VERT_WALLS_WIDTH,6,1,3,WALL, \ \ 1,YSize-2,1,1,RING, \ XSize-2,2,1,1,RING, \ \ LV_VERT_WALLS_WIDTH+1,2,1,1,FREEZE, \ XSize-1-LV_VERT_WALLS_WIDTH-1,YSize-2,1,1,FREEZE, \ \ XSize/2+1,YSize/2-1,1,4,BLOCK, \ XSize/2-2,YSize/2-1,1,4,BLOCK, \ \ LV_VERT_WALLS_WIDTH-1,2,1,3,DIAMOND, \ XSize-1-LV_VERT_WALLS_WIDTH+1,6,1,3,DIAMOND, \ \ 2,YSize-2,LV_VERT_WALLS_WIDTH-2,1,DIAMOND, \ XSize-1-LV_VERT_WALLS_WIDTH+1,2,LV_VERT_WALLS_WIDTH-2,1,DIAMOND #endif #define LV_VERT_WALLS_OBJECTS_SIZE LV_OBJECTS_SIZE(LV_VERT_WALLS_NO_OF_OBJECTS) // #if XSize>=20 #define LV_VERT_WALLS_SHURIKENS \ 4, 6, 0, \ \ XSize-3,3, \ 3,YSize-3, \ XSize-5,4, \ 5,YSize-4, \ \ \ \ 2,3, \ LV_VERT_WALLS_WIDTH+1,3, \ XSize-3,6, \ XSize-1-LV_VERT_WALLS_WIDTH-1,6, \ LV_VERT_WALLS_WIDTH+2,3, \ XSize-1-LV_VERT_WALLS_WIDTH-1-1,6 #define LV_VERT_WALLS_SHURIKENS_SIZE LV_SHURIKENS_SIZE(4,6,0) #else #define LV_VERT_WALLS_SHURIKENS \ 4, 4, 0, \ \ XSize-3,3, \ 3,YSize-3, \ XSize-5,4, \ 5,YSize-4, \ \ \ \ 1,3, \ LV_VERT_WALLS_WIDTH+1,3, \ XSize-2,6, \ XSize-1-LV_VERT_WALLS_WIDTH-1,6 #define LV_VERT_WALLS_SHURIKENS_SIZE LV_SHURIKENS_SIZE(4,4,0) #endif #define LV_VERT_WALLS_NO_OF_WALLS 2 #define LV_VERT_WALLS_WALLS \ LV_VERT_WALLS_NO_OF_WALLS, \ \ LV_VERT_WALLS_WIDTH,YSize-5, \ 1, 4, \ \ XSize-1-LV_VERT_WALLS_WIDTH,2, \ 1, 4 \ #define LV_VERT_WALLS_WALLS_SIZE LC_WALLS_SIZE(LV_VERT_WALLS_NO_OF_WALLS) ================================================ FILE: src/games/shuriken/level_09_squares.h ================================================ // LEVEL 9 SHOWN AS 10 #if XSize>20 #define LV_SQUARES_WIDTH (1+(XSize/3)) #elif XSize>16 #define LV_SQUARES_WIDTH (1+(XSize/4)) #else #define LV_SQUARES_WIDTH XSize/5 #endif #if YSize>40 #define LV_SQUARES_HEIGHT YSize/4 #elif YSize>20 #define LV_SQUARES_HEIGHT YSize/4 #elif YSize>16 #define LV_SQUARES_HEIGHT YSize/5 #else #define LV_SQUARES_HEIGHT YSize/6 #endif #define LV_SQUARES_POS ((XSize-LV_SQUARES_WIDTH)/2) #define LV_SQUARES_NO_OF_OBJECTS 16 #define LV_SQUARES_OBJECTS \ LV_SQUARES_NO_OF_OBJECTS, \ \ LV_SQUARES_POS,2,LV_SQUARES_WIDTH,LV_SQUARES_HEIGHT,WALL, \ LV_SQUARES_POS,YSize-LV_SQUARES_HEIGHT-1,LV_SQUARES_WIDTH,LV_SQUARES_HEIGHT,WALL, \ \ 1,2,1,1,RING, \ XSize-2,2,1,1,RING, \ \ LV_SQUARES_POS-1,YSize-2,1,1,FREEZE, \ LV_SQUARES_POS+LV_SQUARES_WIDTH,YSize-2,1,1,FREEZE, \ LV_SQUARES_POS-1,2,1,1,FREEZE, \ LV_SQUARES_POS+LV_SQUARES_WIDTH,2,1,1,FREEZE, \ \ LV_SQUARES_POS-4,YSize-LV_SQUARES_HEIGHT-1,3,1,BLOCK, \ LV_SQUARES_POS+LV_SQUARES_WIDTH+1,YSize-LV_SQUARES_HEIGHT-1,3,1,BLOCK, \ \ LV_SQUARES_POS-4,YSize-LV_SQUARES_HEIGHT-1-4,3,1,BLOCK, \ LV_SQUARES_POS+LV_SQUARES_WIDTH+1,YSize-LV_SQUARES_HEIGHT-1-4,3,1,BLOCK, \ \ 1,3,1,YSize-4,DIAMOND, \ XSize-2,3,1,YSize-4,DIAMOND, \ \ LV_SQUARES_POS,2+LV_SQUARES_HEIGHT,LV_SQUARES_WIDTH,1,DIAMOND, \ LV_SQUARES_POS,YSize-LV_SQUARES_HEIGHT-2 ,LV_SQUARES_WIDTH,1,DIAMOND #define LV_SQUARES_OBJECTS_SIZE LV_OBJECTS_SIZE(LV_SQUARES_NO_OF_OBJECTS) // #if XSize>=20 #define LV_SQUARES_SHURIKENS \ 4,4,4, \ 3,1+2+LV_SQUARES_HEIGHT, \ XSize-4,YSize-LV_SQUARES_HEIGHT-1-2, \ XSize-4,1+2+LV_SQUARES_HEIGHT+1, \ 3,YSize-LV_SQUARES_HEIGHT-1-2-1, \ \ LV_SQUARES_POS,1+2+LV_SQUARES_HEIGHT, \ LV_SQUARES_POS+LV_SQUARES_WIDTH-1,YSize-LV_SQUARES_HEIGHT-1-2-1, \ LV_SQUARES_POS-1,1+2+LV_SQUARES_HEIGHT, \ LV_SQUARES_POS+1+LV_SQUARES_WIDTH-1,YSize-LV_SQUARES_HEIGHT-1-2-1, \ \ LV_SQUARES_POS-2, \ LV_SQUARES_POS+LV_SQUARES_WIDTH-1+2, \ 2, \ XSize-1-2 #define LV_SQUARES_SHURIKENS_SIZE LV_SHURIKENS_SIZE(4,4,4) #else #define LV_SQUARES_SHURIKENS \ 4,4,2, \ 3,1+2+LV_SQUARES_HEIGHT, \ XSize-4,YSize-LV_SQUARES_HEIGHT-1-2, \ XSize-4,1+2+LV_SQUARES_HEIGHT+1, \ 3,YSize-LV_SQUARES_HEIGHT-1-2-1, \ \ LV_SQUARES_POS,1+2+LV_SQUARES_HEIGHT, \ LV_SQUARES_POS+LV_SQUARES_WIDTH-1,YSize-LV_SQUARES_HEIGHT-1-2-1, \ LV_SQUARES_POS-1,1+2+LV_SQUARES_HEIGHT, \ LV_SQUARES_POS+1+LV_SQUARES_WIDTH-1,YSize-LV_SQUARES_HEIGHT-1-2-1, \ \ 2, \ XSize-1-2 #define LV_SQUARES_SHURIKENS_SIZE LV_SHURIKENS_SIZE(4,4,2) #endif #define LV_SQUARES_NO_OF_WALLS 0 #define LV_SQUARES_WALLS \ LV_SQUARES_NO_OF_WALLS #define LV_SQUARES_WALLS_SIZE LC_WALLS_SIZE(LV_SQUARES_NO_OF_WALLS) ================================================ FILE: src/games/shuriken/level_10_many.h ================================================ // LEVEL 10 SHOWN AS 11 #if XSize>=20 #define _MINI_WALL_OFFSET 0 #define _MINI_WALL_SIZE 4 #else #define _MINI_WALL_OFFSET 2 #define _MINI_WALL_SIZE 2 #endif #define LV_MANY_NO_OF_OBJECTS 18 #define LV_MANY_OBJECTS \ LV_MANY_NO_OF_OBJECTS, \ \ XSize/2-6+_MINI_WALL_OFFSET,YSize-3,_MINI_WALL_SIZE,2,WALL, \ XSize/2-6+_MINI_WALL_OFFSET,2,_MINI_WALL_SIZE,2,WALL, \ \ XSize/2+2,YSize-3,_MINI_WALL_SIZE,2,WALL, \ XSize/2+2,2,_MINI_WALL_SIZE,2,WALL, \ \ XSize/2-5,YSize/2,2,2,WALL, \ XSize/2+3,YSize/2,2,2,WALL, \ \ XSize/2-4,YSize/2-2,2,1,BLOCK, \ XSize/2+2,YSize/2-2,2,1,BLOCK, \ \ XSize/2-5+1,YSize/2+3,2,1,BLOCK, \ XSize/2+2,YSize/2+3,2,1,BLOCK, \ \ XSize-2,2,1,1,FREEZE, \ XSize-2,YSize-2,1,1,RING, \ \ 1,2,1,1,FREEZE, \ 1,YSize-2,1,1,RING, \ \ XSize-2,4,1,YSize-1-2-4,DIAMOND, \ 1,4,1,YSize-1-2-4,DIAMOND, \ \ XSize/2-2,YSize-3,4,2,DIAMOND, \ XSize/2-2,2,4,2,DIAMOND #define LV_MANY_OBJECTS_SIZE LV_OBJECTS_SIZE(LV_MANY_NO_OF_OBJECTS) #if XSize>=20 && YSize>=21 #if !defined(FEWER_SHURIKENS) #define LV_MANY_SHURIKENS \ 8, 4, 4, \ \ 3,1+3, \ 3,1+5, \ XSize-4,1+6, \ 3,YSize-1-6, \ 3,YSize-1-4, \ XSize-4,1+4, \ XSize-4,YSize-1-5, \ XSize-4,YSize-1-3, \ \ 2,4, \ XSize-1-2,4, \ 4,4, \ XSize-1-4,5, \ \ 2, \ XSize-1-2, \ 3, \ XSize-1-3 #define LV_MANY_SHURIKENS_SIZE LV_SHURIKENS_SIZE(8,4,4) #else #define LV_MANY_SHURIKENS \ 4, 2, 4, \ \ 3,1+3, \ 3,YSize-1-6, \ XSize-4,1+4, \ XSize-4,YSize-1-3, \ \ 2,4, \ XSize-1-2,4, \ \ 2, \ XSize-1-2, \ 3, \ XSize-1-3 #define LV_MANY_SHURIKENS_SIZE LV_SHURIKENS_SIZE(4,2,4) #endif #elif YSize>=21 #if !defined(FEWER_SHURIKENS) #define LV_MANY_SHURIKENS \ 8, 2, 4, \ \ 3,1+3, \ 3,1+5, \ XSize-4,1+6, \ 3,YSize-1-6, \ 3,YSize-1-4, \ XSize-4,1+4, \ XSize-4,YSize-1-5, \ XSize-4,YSize-1-3, \ \ 2,4, \ XSize-1-2,4, \ \ 2, \ XSize-1-2, \ 3, \ XSize-1-3 #define LV_MANY_SHURIKENS_SIZE LV_SHURIKENS_SIZE(8,2,4) #else #define LV_MANY_SHURIKENS \ 4, 2, 4, \ \ 3,1+3, \ 3,YSize-1-6, \ XSize-4,1+4, \ XSize-4,YSize-1-3, \ \ 2,4, \ XSize-1-2,4, \ \ 2, \ XSize-1-2, \ 3, \ XSize-1-3 #define LV_MANY_SHURIKENS_SIZE LV_SHURIKENS_SIZE(4,2,4) #endif #elif YSize>=17 #define LV_MANY_SHURIKENS \ 5, 2, 4, \ \ 3,1+3, \ XSize-4,1+6, \ 3,YSize-1-4, \ XSize-4,1+4, \ XSize-4,YSize-1-3, \ \ 2,4, \ XSize-1-2,4, \ \ 2, \ XSize-1-2, \ 3, \ XSize-1-3 #define LV_MANY_SHURIKENS_SIZE LV_SHURIKENS_SIZE(5,2,4) #else #define LV_MANY_SHURIKENS \ 4, 2, 4, \ \ 3,1+3, \ XSize-4,1+6, \ XSize-4,1+4, \ XSize-4,YSize-1-3, \ \ 2,4, \ XSize-1-2,4, \ \ 2, \ XSize-1-2, \ 3, \ XSize-1-3 #define LV_MANY_SHURIKENS_SIZE LV_SHURIKENS_SIZE(4,2,4) #endif // #define LV_MANY_WALLS 0 #define LV_MANY_WALLS_SIZE LC_WALLS_SIZE(LV_MANY_WALLS) ================================================ FILE: src/games/shuriken/levels.h ================================================ #include "cross_lib.h" #include "screen_types.h" #if !defined(FEWER_SHURIKENS) && (YSize<=16 || XSize<=16) #define FEWER_SHURIKENS #endif // ------------------------------------------------------------ // Helper macros to compute sizes and offsets #define LV_OBJECTS_SIZE(no_of_rect) (1+(no_of_rect*5)) #define LV_SHURIKENS_SIZE(horiz,vert,mini) (1+(horiz)*2+ 1+(vert)*2+ 1+(mini)) #define LC_WALLS_SIZE(walls) (1+(walls*4)) // #include "level_00_horiz.h" // level 0 #include "level_01_vert_bars.h" // level 1 #include "level_02_cross.h" // level 2 #include "level_04_horiz_walls.h" // level 4 #include "level_05_h_barriers.h" // level 5 #include "level_06_rain.h" // level 6 #include "level_08_vert_walls.h" // level 8 #include "level_09_squares.h" // level 9 #include "level_10_many.h" // level 10 #include "level_03_07_11_boss.h" // level 3, 7, 11 // Level 0 - shown as 1 #define LV_0_OBJECTS LV_HORIZ_OBJECTS #define LV_0_OBJECTS_SIZE LV_HORIZ_OBJECTS_SIZE #define LV_0_SHURIKENS LV_HORIZ_SHURIKENS #define LV_0_SHURIKENS_SIZE LV_HORIZ_SHURIKENS_SIZE #define LV_0_WALLS LV_HORIZ_WALLS #define LV_0_WALLS_SIZE LV_HORIZ_WALLS_SIZE // Level 1 - shown as 2 #define LV_1_OBJECTS LV_VERT_BARS_OBJECTS #define LV_1_OBJECTS_SIZE LV_VERT_BARS_OBJECTS_SIZE #define LV_1_SHURIKENS LV_VERT_BARS_SHURIKENS #define LV_1_SHURIKENS_SIZE LV_VERT_BARS_SHURIKENS_SIZE #define LV_1_WALLS LV_VERT_BARS_WALLS #define LV_1_WALLS_SIZE LV_VERT_BARS_WALLS_SIZE // Level 2 - shown as 3 #define LV_2_OBJECTS LV_CROSS_OBJECTS #define LV_2_OBJECTS_SIZE LV_CROSS_OBJECTS_SIZE #define LV_2_SHURIKENS LV_CROSS_SHURIKENS #define LV_2_SHURIKENS_SIZE LV_CROSS_SHURIKENS_SIZE #define LV_2_WALLS LV_CROSS_WALLS #define LV_2_WALLS_SIZE LV_CROSS_WALLS_SIZE // [boss level] Level 3 - shown as 4 // // Level 4 - shown as 5 #define LV_4_OBJECTS LV_HORIZ_WALLS_OBJECTS #define LV_4_OBJECTS_SIZE LV_HORIZ_WALLS_OBJECTS_SIZE #define LV_4_SHURIKENS LV_HORIZ_WALLS_SHURIKENS #define LV_4_SHURIKENS_SIZE LV_HORIZ_WALLS_SHURIKENS_SIZE #define LV_4_WALLS LV_HORIZ_WALLS_WALLS #define LV_4_WALLS_SIZE LV_HORIZ_WALLS_WALLS_SIZE // Level 5 - shown as 6 #define LV_5_OBJECTS LV_H_BARRIERS_OBJECTS #define LV_5_OBJECTS_SIZE LV_H_BARRIERS_OBJECTS_SIZE #define LV_5_SHURIKENS LV_H_BARRIERS_SHURIKENS #define LV_5_SHURIKENS_SIZE LV_H_BARRIERS_SHURIKENS_SIZE #define LV_5_WALLS LV_H_BARRIERS_WALLS #define LV_5_WALLS_SIZE LV_H_BARRIERS_WALLS_SIZE // Level 6 - shown as 7 #define LV_6_OBJECTS LV_RAIN_OBJECTS #define LV_6_OBJECTS_SIZE LV_RAIN_OBJECTS_SIZE #define LV_6_SHURIKENS LV_RAIN_SHURIKENS #define LV_6_SHURIKENS_SIZE LV_RAIN_SHURIKENS_SIZE #define LV_6_WALLS LV_RAIN_WALLS #define LV_6_WALLS_SIZE LV_RAIN_WALLS_SIZE // [boss level] Level 7 - shown as 8 // // Level 8 - shown as 9 #define LV_8_OBJECTS LV_VERT_WALLS_OBJECTS #define LV_8_OBJECTS_SIZE LV_VERT_WALLS_OBJECTS_SIZE #define LV_8_SHURIKENS LV_VERT_WALLS_SHURIKENS #define LV_8_SHURIKENS_SIZE LV_VERT_WALLS_SHURIKENS_SIZE #define LV_8_WALLS LV_VERT_WALLS_WALLS #define LV_8_WALLS_SIZE LV_VERT_WALLS_WALLS_SIZE // Level 9 - shown as 10 #define LV_9_OBJECTS LV_SQUARES_OBJECTS #define LV_9_OBJECTS_SIZE LV_SQUARES_OBJECTS_SIZE #define LV_9_SHURIKENS LV_SQUARES_SHURIKENS #define LV_9_SHURIKENS_SIZE LV_SQUARES_SHURIKENS_SIZE #define LV_9_WALLS LV_SQUARES_WALLS #define LV_9_WALLS_SIZE LV_SQUARES_WALLS_SIZE // Level 10 - shown as 11 #define LV_10_OBJECTS LV_MANY_OBJECTS #define LV_10_OBJECTS_SIZE LV_MANY_OBJECTS_SIZE #define LV_10_SHURIKENS LV_MANY_SHURIKENS #define LV_10_SHURIKENS_SIZE LV_MANY_SHURIKENS_SIZE #define LV_10_WALLS LV_MANY_WALLS #define LV_10_WALLS_SIZE LV_MANY_WALLS_SIZE // [boss level] Level 11 - shown as 12 // // ---------------------------------------------------------- // Objects: static walls and collectable items const uint8_t objects_map[] = { LV_0_OBJECTS, LV_1_OBJECTS, LV_2_OBJECTS, LV_4_OBJECTS, LV_5_OBJECTS, LV_6_OBJECTS, LV_8_OBJECTS, LV_9_OBJECTS, LV_10_OBJECTS, LV_CHALLENGE_OBJECTS }; const uint16_t objects_index[] = { 0, // level 0 LV_0_OBJECTS_SIZE, // level 1 LV_0_OBJECTS_SIZE+LV_1_OBJECTS_SIZE, // level 2 0, // level 3 (challenge) LV_0_OBJECTS_SIZE+LV_1_OBJECTS_SIZE+LV_2_OBJECTS_SIZE, // level 4 LV_0_OBJECTS_SIZE+LV_1_OBJECTS_SIZE+LV_2_OBJECTS_SIZE+LV_4_OBJECTS_SIZE, // level 5 LV_0_OBJECTS_SIZE+LV_1_OBJECTS_SIZE+LV_2_OBJECTS_SIZE+LV_4_OBJECTS_SIZE+LV_5_OBJECTS_SIZE, // level 6 0, // level 7 (challenge) LV_0_OBJECTS_SIZE+LV_1_OBJECTS_SIZE+LV_2_OBJECTS_SIZE+LV_4_OBJECTS_SIZE+LV_5_OBJECTS_SIZE+LV_6_OBJECTS_SIZE, // level 8 LV_0_OBJECTS_SIZE+LV_1_OBJECTS_SIZE+LV_2_OBJECTS_SIZE+LV_4_OBJECTS_SIZE+LV_5_OBJECTS_SIZE+LV_6_OBJECTS_SIZE+LV_8_OBJECTS_SIZE, // level 9 LV_0_OBJECTS_SIZE+LV_1_OBJECTS_SIZE+LV_2_OBJECTS_SIZE+LV_4_OBJECTS_SIZE+LV_5_OBJECTS_SIZE+LV_6_OBJECTS_SIZE+LV_8_OBJECTS_SIZE+LV_9_OBJECTS_SIZE, 0, LV_0_OBJECTS_SIZE+LV_1_OBJECTS_SIZE+LV_2_OBJECTS_SIZE+LV_4_OBJECTS_SIZE+LV_5_OBJECTS_SIZE+LV_6_OBJECTS_SIZE+LV_8_OBJECTS_SIZE+LV_9_OBJECTS_SIZE+LV_10_OBJECTS_SIZE, // 0, // level 11 (challenge) }; // ---------------------------------------------------------- // Shurikens: horizontal, vertical and mini-shurikens const uint8_t shurikens_map[] = { LV_0_SHURIKENS, // level=1 LV_1_SHURIKENS, // level=2 LV_2_SHURIKENS, // level=3 LV_4_SHURIKENS, // LV_5_SHURIKENS, // LV_6_SHURIKENS, // LV_8_SHURIKENS, // LV_9_SHURIKENS, // LV_10_SHURIKENS, }; // cross, squares, many const uint8_t shurikens_index[] = { 0, LV_0_SHURIKENS_SIZE, LV_0_SHURIKENS_SIZE+LV_1_SHURIKENS_SIZE, LV_0_SHURIKENS_SIZE+LV_1_SHURIKENS_SIZE, // challenge (same as CROSS level) LV_0_SHURIKENS_SIZE+LV_1_SHURIKENS_SIZE+LV_2_SHURIKENS_SIZE, LV_0_SHURIKENS_SIZE+LV_1_SHURIKENS_SIZE+LV_2_SHURIKENS_SIZE+LV_4_SHURIKENS_SIZE, LV_0_SHURIKENS_SIZE+LV_1_SHURIKENS_SIZE+LV_2_SHURIKENS_SIZE+LV_4_SHURIKENS_SIZE+LV_5_SHURIKENS_SIZE, LV_0_SHURIKENS_SIZE+LV_1_SHURIKENS_SIZE+LV_2_SHURIKENS_SIZE+LV_4_SHURIKENS_SIZE+LV_5_SHURIKENS_SIZE+LV_6_SHURIKENS_SIZE+LV_8_SHURIKENS_SIZE, // challenge (same as squares) LV_0_SHURIKENS_SIZE+LV_1_SHURIKENS_SIZE+LV_2_SHURIKENS_SIZE+LV_4_SHURIKENS_SIZE+LV_5_SHURIKENS_SIZE+LV_6_SHURIKENS_SIZE, LV_0_SHURIKENS_SIZE+LV_1_SHURIKENS_SIZE+LV_2_SHURIKENS_SIZE+LV_4_SHURIKENS_SIZE+LV_5_SHURIKENS_SIZE+LV_6_SHURIKENS_SIZE+LV_8_SHURIKENS_SIZE, LV_0_SHURIKENS_SIZE+LV_1_SHURIKENS_SIZE+LV_2_SHURIKENS_SIZE+LV_4_SHURIKENS_SIZE+LV_5_SHURIKENS_SIZE+LV_6_SHURIKENS_SIZE+LV_8_SHURIKENS_SIZE+LV_9_SHURIKENS_SIZE, LV_0_SHURIKENS_SIZE+LV_1_SHURIKENS_SIZE+LV_2_SHURIKENS_SIZE+LV_4_SHURIKENS_SIZE+LV_5_SHURIKENS_SIZE+LV_6_SHURIKENS_SIZE+LV_8_SHURIKENS_SIZE+LV_9_SHURIKENS_SIZE, // This is CORRECT - challenge // 1+2*12+1+1, // 1+2*12+1+1+ 1+2*2+1+1+4*1, // 1+2*12+1+1+ 1+2*2+1+1+4*1+ 1+2*2+ 1+4*2+ 1, // TODO: .... }; // ---------------------------------------------------------- // Walls: dynamic walls const uint8_t walls_map[] = { LV_0_WALLS, LV_1_WALLS, LV_2_WALLS, LV_4_WALLS, LV_5_WALLS, LV_6_WALLS, LV_8_WALLS, LV_9_WALLS, LV_10_WALLS, LV_CHALLENGE_WALLS, }; const uint8_t walls_index[] = { 0, LV_0_WALLS_SIZE, LV_0_WALLS_SIZE+LV_1_WALLS_SIZE, LV_0_WALLS_SIZE+LV_1_WALLS_SIZE+LV_2_WALLS_SIZE+LV_4_WALLS_SIZE+LV_5_WALLS_SIZE+LV_6_WALLS_SIZE+LV_8_WALLS_SIZE+LV_9_WALLS_SIZE+LV_10_WALLS_SIZE, // challenge walls LV_0_WALLS_SIZE+LV_1_WALLS_SIZE+LV_2_WALLS_SIZE, LV_0_WALLS_SIZE+LV_1_WALLS_SIZE+LV_2_WALLS_SIZE+LV_4_WALLS_SIZE, LV_0_WALLS_SIZE+LV_1_WALLS_SIZE+LV_2_WALLS_SIZE+LV_4_WALLS_SIZE+LV_5_WALLS_SIZE, LV_0_WALLS_SIZE+LV_1_WALLS_SIZE+LV_2_WALLS_SIZE+LV_4_WALLS_SIZE+LV_5_WALLS_SIZE+LV_6_WALLS_SIZE+LV_8_WALLS_SIZE+LV_9_WALLS_SIZE+LV_10_WALLS_SIZE, // challenge walls LV_0_WALLS_SIZE+LV_1_WALLS_SIZE+LV_2_WALLS_SIZE+LV_4_WALLS_SIZE+LV_5_WALLS_SIZE+LV_6_WALLS_SIZE, LV_0_WALLS_SIZE+LV_1_WALLS_SIZE+LV_2_WALLS_SIZE+LV_4_WALLS_SIZE+LV_5_WALLS_SIZE+LV_6_WALLS_SIZE+LV_8_WALLS_SIZE, LV_0_WALLS_SIZE+LV_1_WALLS_SIZE+LV_2_WALLS_SIZE+LV_4_WALLS_SIZE+LV_5_WALLS_SIZE+LV_6_WALLS_SIZE+LV_8_WALLS_SIZE+LV_9_WALLS_SIZE, LV_0_WALLS_SIZE+LV_1_WALLS_SIZE+LV_2_WALLS_SIZE+LV_4_WALLS_SIZE+LV_5_WALLS_SIZE+LV_6_WALLS_SIZE+LV_8_WALLS_SIZE+LV_9_WALLS_SIZE+LV_10_WALLS_SIZE, // challenge walls // 0, // 1, // 1+1+2*8, }; ================================================ FILE: src/games/shuriken/main.c ================================================ /* --------------------------------------------------------------------------------------- */ // // CROSS SHURIKEN by Fabrizio Caruso // // Fabrizio_Caruso@hotmail.com // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from // the use of this software. // Permission is granted to anyone to use this software for non-commercial applications, // subject to the following restrictions: // 1. The origin of this software must not be misrepresented; you must not // claim that you wrote the original software. If you use this software in // a product, an acknowledgment in the product documentation would be // appreciated but is not required. // 2. Altered source versions must be plainly marked as such, and must not // be misrepresented as being the original software. // 3. This notice may not be removed or altered from any source distribution. /* --------------------------------------------------------------------------------------- */ #include "cross_lib.h" #include "screen_types.h" #include "levels.h" #define INITIAL_LEVEL 0 #define FINAL_LEVEL 11 #define INITIAL_LIVES 5 // DEBUG // #define SHOW_LEVELS // #define INVINCIBLE // TILES #if XSize>=20 #define MAX_NUMBER_OF_SHURIKENS 12 #else #define MAX_NUMBER_OF_SHURIKENS 10 #endif #define MAX_TIME 5 // Left low player in the 2x2 multi-tile #define LEFT_LOW_TILE0 _TILE_2 #define LEFT_LOW_TILE1 _TILE_6 #define LEFT_LOW_TILE2 _TILE_10 #define LEFT_LOW_TILE3 _TILE_14 #define RIGHT_LOW_TILE0 _TILE_3 #define RIGHT_LOW_TILE1 _TILE_7 #define RIGHT_LOW_TILE2 _TILE_11 #define RIGHT_LOW_TILE3 _TILE_15 #define LEFT_UP_TILE0 _TILE_0 #define LEFT_UP_TILE1 _TILE_4 #define LEFT_UP_TILE2 _TILE_8 #define LEFT_UP_TILE3 _TILE_12 #define RIGHT_UP_TILE0 _TILE_1 #define RIGHT_UP_TILE1 _TILE_5 #define RIGHT_UP_TILE2 _TILE_9 #define RIGHT_UP_TILE3 _TILE_13 #define SHURIKEN_TILE _TILE_16 #define SHURIKEN_TILE_DOWN _TILE_17 #define SHURIKEN_TILE_UP _TILE_18 #define SHURIKEN_TILE_LEFT _TILE_19 #define SHURIKEN_TILE_RIGHT _TILE_20 #define WALL_TILE _TILE_21 #define BLOCK_TILE _TILE_22 #define FREEZE_TILE _TILE_23 #define MINI_SHURIKEN_TILE _TILE_24 #define RING_TILE _TILE_25 #define DIAMOND_TILE _TILE_26 #define RINGS_X XSize/2-3 #define SHURIKEN_LEFT 0 #define SHURIKEN_RIGHT 1 #define SHURIKEN_UP 0 #define SHURIKEN_DOWN 1 #define PLAYER_LEFT 0 #define PLAYER_RIGHT 1 #define PLAYER_UP 2 #define PLAYER_DOWN 3 #define MIN_PLAYER_Y 3 #define MAX_PLAYER_Y (2*YSize-6) #define MIN_PLAYER_X 2 #define MAX_PLAYER_X (2*XSize-5) #define MOVE_FORCE 3U #define DESTROY_FORCE 14U #if XSize>=20 #define MAX_NUMBER_OF_MINI_SHURIKENS 6 #else #define MAX_NUMBER_OF_MINI_SHURIKENS 4 #endif #define MAX_NUMBER_OF_BARRIERS 4 #define DIAMOND_POINTS 10U #define FREEZE_POINTS 30U #define RING_POINTS 50U #define SHURIKEN_POINTS 100U #define ITEM_BONUS 50U #if XSize<32 #define BASE_RING_EFFECT 40U #else #define BASE_RING_EFFECT 30U #endif #define START_RING_EFFECT 35U #define EXTRA_LIFE_THRESHOLD 5000U #define BARRIER_THRESHOLD 25 uint8_t player_x; uint8_t player_y; uint8_t screen_x; uint8_t screen_y; uint8_t alive; uint8_t lives; uint8_t level; uint8_t remaining_diamonds; uint8_t shuriken_x[MAX_NUMBER_OF_SHURIKENS]; uint8_t shuriken_y[MAX_NUMBER_OF_SHURIKENS]; uint8_t shuriken_direction[MAX_NUMBER_OF_SHURIKENS]; uint8_t shuriken_transition[MAX_NUMBER_OF_SHURIKENS]; #define shuriken_status shuriken_x uint8_t shuriken_axis[MAX_NUMBER_OF_SHURIKENS]; #define SHURIKEN_HORIZONTAL 0 #define SHURIKEN_VERTICAL 1 uint8_t mini_shuriken_x[MAX_NUMBER_OF_MINI_SHURIKENS]; uint8_t mini_shuriken_y[MAX_NUMBER_OF_MINI_SHURIKENS]; uint8_t map[XSize][YSize]; uint8_t force; uint8_t player_cell[4]; uint16_t score; uint16_t hiscore; #if !defined(_XL_NO_COLOR) uint8_t player_color; #else #define player_color 0 #endif uint8_t level_shurikens; uint8_t level_mini_shurikens; uint8_t barrier_x[MAX_NUMBER_OF_BARRIERS]; uint8_t barrier_y[MAX_NUMBER_OF_BARRIERS]; uint8_t barrier_width[MAX_NUMBER_OF_BARRIERS]; uint8_t barrier_height[MAX_NUMBER_OF_BARRIERS]; uint8_t barrier_counter; uint8_t barrier_triggered[MAX_NUMBER_OF_BARRIERS]; uint8_t number_of_barriers; uint8_t freeze_active; uint8_t freeze_counter; uint8_t ring_active; uint8_t ring_counter; uint8_t counter; uint8_t shuriken_counter; uint8_t new_level; uint8_t tile_group; uint8_t time_counter; uint8_t player_direction; uint8_t extra_life_counter; uint8_t shuriken_challenge; uint8_t barrier_type; uint8_t challenge_level; uint8_t remaining_shurikens; uint8_t barrier_threshold; uint8_t input; static const uint8_t screen_tile[7+1] = { 0, // unused RING_TILE, FREEZE_TILE, DIAMOND_TILE, BLOCK_TILE, WALL_TILE, SHURIKEN_TILE, MINI_SHURIKEN_TILE, }; #if !defined(_XL_NO_COLOR) static uint8_t screen_color[7+1] = { 0, // unused _XL_WHITE, _XL_CYAN, _XL_GREEN, _XL_GREEN, _XL_RED, _XL_CYAN, _XL_YELLOW, }; static const uint8_t border_colors[] = { _XL_RED, _XL_CYAN, _XL_YELLOW, _XL_CYAN}; static const uint8_t wall_colors[] = {_XL_YELLOW, _XL_YELLOW, _XL_CYAN, _XL_RED}; #endif #define SHURIKEN_COLOR _XL_CYAN static const uint8_t player_tile[4][4] = { { // left lower 12x12 multi-tile inside a 16x16 quad tile LEFT_UP_TILE0, RIGHT_UP_TILE0, LEFT_LOW_TILE0, RIGHT_LOW_TILE0, }, { // right lower 12x12 multi-tile inside a 16x16 quad tile LEFT_UP_TILE1, RIGHT_UP_TILE1, LEFT_LOW_TILE1, RIGHT_LOW_TILE1, }, { // left upper 12x12 multi-tile inside a 16x16 quad tile LEFT_UP_TILE2, RIGHT_UP_TILE2, LEFT_LOW_TILE2, RIGHT_LOW_TILE2, }, { // right upper 12x12 multi-tile inside a 16x16 quad tile LEFT_UP_TILE3, RIGHT_UP_TILE3, LEFT_LOW_TILE3, RIGHT_LOW_TILE3, }, }; void short_pause(void) { _XL_SLOW_DOWN(_XL_SLOW_DOWN_FACTOR); } void one_second_pause(void) { _XL_SLEEP(1); } void build_element(uint8_t type, uint8_t x, uint8_t y) { map[x][y] = type; #if !defined(_XL_NO_COLOR) _XL_DRAW(x,y,screen_tile[type], screen_color[type]); #else _XL_DRAW(x,y,screen_tile[type], 0); #endif } void delete_element(uint8_t x, uint8_t y) { map[x][y] = EMPTY; _XL_DELETE(x,y); } #define update_screen_xy() \ do { \ screen_x = player_x>>1; \ screen_y = (player_y+1)>>1; \ } while(0) #define update_score_display() \ do \ { \ _XL_SET_TEXT_COLOR(_XL_WHITE); \ _XL_PRINTD(0,0,5,score); \ } while(0) #if XSize>=20 #define update_remaining_display() \ do \ { \ _XL_SET_TEXT_COLOR(_XL_WHITE); \ _XL_PRINTD(7,0,2,remaining_diamonds); \ } while(0) #else #define update_remaining_display() #endif void delete_player_down(void) { _XL_DELETE(screen_x,screen_y+1); _XL_DELETE(screen_x+1,screen_y+1); } void delete_player_up(void) { _XL_DELETE(screen_x,screen_y); _XL_DELETE(screen_x+1,screen_y); } #define delete_player_left() \ do \ { \ _XL_DELETE(screen_x,screen_y); \ _XL_DELETE(screen_x,screen_y+1); \ } while(0) #define delete_player_right() \ do \ { \ _XL_DELETE(screen_x+1,screen_y); \ _XL_DELETE(screen_x+1,screen_y+1); \ } while(0) void delete_player(void) { delete_player_down(); delete_player_up(); } void display_player(void) { // #if !defined(_XL_NO_COLOR) _XL_DRAW(screen_x,screen_y,player_tile[tile_group][2],player_color); _XL_DRAW(screen_x+1,screen_y,player_tile[tile_group][3],player_color); _XL_DRAW(screen_x,screen_y+1,player_tile[tile_group][0],player_color); _XL_DRAW(screen_x+1,screen_y+1,player_tile[tile_group][1],player_color); // #else // if(!ring_active || (counter&1)) // { // _XL_DRAW(screen_x,screen_y,player_tile[tile_group][2],player_color); // _XL_DRAW(screen_x+1,screen_y,player_tile[tile_group][3],player_color); // _XL_DRAW(screen_x,screen_y+1,player_tile[tile_group][0],player_color); // _XL_DRAW(screen_x+1,screen_y+1,player_tile[tile_group][1],player_color); // } // else // { // delete_player(); // } // #endif } #define update_freeze_display() \ _XL_PRINTD(4,YSize-1,1,freeze_counter) #define update_ring_display() \ do \ { \ _XL_SET_TEXT_COLOR(_XL_GREEN); \ _XL_PRINTD(1,YSize-1,1,ring_counter); \ } while(0) #define update_shuriken_display() \ _XL_PRINTD(7,YSize-1,2,shuriken_counter) void update_time_counter_display(void) { _XL_SET_TEXT_COLOR(_XL_WHITE); _XL_PRINTD(11,YSize-1,1,time_counter); } void update_item_display(void) { update_score_display(); update_remaining_display(); update_time_counter_display(); update_freeze_display(); update_shuriken_display(); update_ring_display(); } void increase_time_counter_if_not_max(void) { if(time_counter=DEADLY) { if(ring_active) { display_player(); } else { alive=0; } } else if(cell_value==BLOCK) // Useful in challenge levels to avoid visually deleting blocks { delete_player_cells(); } } } } void update_player(void) { tile_group = (player_x&1)+2*(player_y&1); update_screen_xy(); display_player(); handle_collisions(); delete_player_cells(); } uint8_t allowed(uint8_t cell1, uint8_t cell2, uint8_t beyond_cell1, uint8_t beyond_cell2) { if((cell1==BLOCK)||(cell2==BLOCK)) { ++force; } if((cell1==WALL)||(cell2==WALL)) { return 0; } // From here on, the player is not against any wall if(force>=DESTROY_FORCE) { force=0; _XL_EXPLOSION_SOUND(); return 1; } // If no wall and no block, you can always move if((cell1!=BLOCK) && (cell2!=BLOCK)) { return 1; } // From here on, the player is against at least one block and no wall and force=20 #define _display_diamond_icon_if_possible() \ build_element(DIAMOND,6,0); \ #else #define _display_diamond_icon_if_possible() #endif #define initialize_level_display() \ do \ { \ _XL_DRAW(XSize-10,0,SHURIKEN_TILE,_XL_WHITE); \ \ _XL_SET_TEXT_COLOR(_XL_RED); \ _XL_PRINT(XSize-7,0,"HI"); \ \ _display_diamond_icon_if_possible(); \ \ update_lives_display(); \ \ _XL_SET_TEXT_COLOR(_XL_WHITE); \ _XL_PRINTD(XSize-5,0,5,hiscore); \ _XL_PRINTD(XSize-2,YSize-1,2,level+1); \ \ _XL_DRAW(0,YSize-1,RING_TILE,_XL_WHITE); \ _XL_DRAW(3,YSize-1,FREEZE_TILE,_XL_CYAN); \ _XL_DRAW(6,YSize-1,SHURIKEN_TILE,_XL_CYAN); \ \ _XL_SET_TEXT_COLOR(_XL_GREEN); \ _XL_CHAR(10,YSize-1,'T'); \ \ update_item_display(); \ } while(0) // too many parameters void build_rectangle(uint8_t type, uint8_t x, uint8_t y, uint8_t width, uint8_t height) { uint8_t i; uint8_t j; for(i=x;i=20 #define SHURIKEN_Y 5 #define AUTHOR_Y 8 #define COLLECT_Y YSize-8 #define USE_AGAINST_Y YSize-5 #else #define SHURIKEN_Y 2 #define AUTHOR_Y 5 #define COLLECT_Y YSize-5 #define USE_AGAINST_Y YSize-2 #endif void print_use_block_against_shurikens(uint8_t y) { _XL_PRINT(XSize/2-7,y, "USE AGAINST"); _XL_DRAW(XSize/2-6+3,y,BLOCK_TILE, _XL_GREEN); _XL_DRAW(XSize/2-6+13,y,SHURIKEN_TILE, _XL_CYAN); } void initialize_new_level(void) { initialize_level_parameters(); if(challenge_level) { _XL_SET_TEXT_COLOR(_XL_WHITE); _XL_CLEAR_SCREEN(); print_use_block_against_shurikens(YSize/2); _XL_WAIT_FOR_INPUT(); } init_map(); remaining_diamonds = 0; // build_objects increases remaining_diamonds if(challenge_level) { build_objects(FINAL_LEVEL+1); } build_objects(level); time_counter = MAX_TIME; activate_shurikens(); build_shurikens(); remaining_shurikens = level_shurikens; build_barriers(); // REMARK: Initialize counter *only* at level start (not after losing a life) counter = 0; } void display_horizontal_transition_shuriken(uint8_t x, uint8_t y) { _XL_DRAW(x-1,y,SHURIKEN_TILE_LEFT, SHURIKEN_COLOR); _XL_DRAW(x,y,SHURIKEN_TILE_RIGHT, SHURIKEN_COLOR); } void shuriken_death(uint8_t index) { _XL_SHOOT_SOUND(); score+=SHURIKEN_POINTS; ++shuriken_counter; --remaining_shurikens; increase_time_counter_if_not_max(); shuriken_status[index]=0; } void block_explosion(uint8_t x, uint8_t y) { _XL_DRAW(x,y,BLOCK_TILE,_XL_RED); short_pause(); _XL_SHOOT_SOUND(); short_pause(); delete_element(x,y); } #if XSize<31 #define CHASE_BIT_MASK 15 #else #define CHASE_BIT_MASK 7 #endif uint8_t player_chased(void) { return (challenge_level)&&(!(_XL_RAND()&CHASE_BIT_MASK)); } #define display_shuriken(x,y,index) \ build_element(SHURIKEN,x,y) void chase_vertically(uint8_t index) { shuriken_axis[index]=SHURIKEN_VERTICAL; if(screen_y=63 #define TIME_MASK 127 #else #define TIME_MASK 63 #endif #define handle_time() \ do \ { \ ++counter; \ \ if(!(counter&TIME_MASK)) \ { \ if(time_counter) \ { \ --time_counter; \ update_time_counter_display(); \ } \ } \ } while(0) #define handle_extra_life() \ do \ { \ if(score>=EXTRA_LIFE_THRESHOLD*extra_life_counter) \ { \ ++extra_life_counter; \ _XL_PING_SOUND(); \ ++lives; \ update_lives_display(); \ _XL_PING_SOUND(); \ } \ } while(0) #if defined(SHOW_LEVELS) #define continue_level_condition() 0 #else #define continue_level_condition() \ alive && (remaining_diamonds || (remaining_shurikens && challenge_level)) #endif void animate_shurikens(void) { activate_shurikens(); build_shurikens(); counter=XSize/4; // #if defined(_XL_NO_TEXT_COLOR) // _XL_SET_TEXT_COLOR(_XL_WHITE); // #if !defined(_XL_NO_JOYSTICK) // _XL_PRINT(XSize/2-5,YSize-1,"PRESS FIRE"); // #else // _XL_PRINT(XSize/2-5,YSize-1,"PRESS SPACE"); // #endif // #endif do { if(counter) { --counter; #if defined(_XL_NO_TEXT_COLOR) || defined(_XL_NO_COLOR) if(!counter) { _XL_SET_TEXT_COLOR(_XL_WHITE); #if !defined(_XL_NO_JOYSTICK) _XL_PRINT(XSize/2-5,YSize-1,"PRESS FIRE"); #else _XL_PRINT(XSize/2-5,YSize-1,"PRESS SPACE"); #endif } #endif } else { #if !defined(_XL_NO_TEXT_COLOR) _XL_SET_TEXT_COLOR(_XL_WHITE); #if !defined(_XL_NO_JOYSTICK) _XL_PRINT(XSize/2-5,YSize-1,"PRESS FIRE"); #else _XL_PRINT(XSize/2-5,YSize-1,"PRESS SPACE"); #endif #endif } input = _XL_INPUT(); handle_freeze_and_shurikens(); short_pause(); } while((!_XL_FIRE(input) || counter)); _XL_ZAP_SOUND(); one_second_pause(); } #if !defined(_XL_NO_COLOR) #define title() \ do \ { \ init_map(); \ \ _XL_SET_TEXT_COLOR(_XL_WHITE); \ \ _XL_PRINT(XSize/2-7,AUTHOR_Y, "FABRIZIO CARUSO"); \ \ _XL_PRINTD(XSize/2-2,1,5,hiscore); \ \ _XL_PRINT(XSize/2-8+4,COLLECT_Y, "COLLECT"); \ \ print_use_block_against_shurikens(USE_AGAINST_Y); \ \ _XL_DRAW(XSize/2-7+11,COLLECT_Y,DIAMOND_TILE, _XL_GREEN); \ \ _XL_SET_TEXT_COLOR(_XL_CYAN); \ \ _XL_PRINT(XSize/2-7,SHURIKEN_Y, "S H U R I K E N"); \ \ screen_color[SHURIKEN]=_XL_YELLOW; \ animate_shurikens(); \ } while(0) #define the_end() \ do \ { \ level=2; \ challenge_level=0; \ init_map(); \ screen_color[SHURIKEN]=_XL_GREEN; \ \ _XL_SET_TEXT_COLOR(_XL_WHITE); \ _XL_PRINT(XSize/2-3,YSize/2,"THE END"); \ \ animate_shurikens(); \ } while(0) #else #define title() \ do \ { \ init_map(); \ \ _XL_SET_TEXT_COLOR(_XL_WHITE); \ \ _XL_PRINT(XSize/2-7,AUTHOR_Y, "FABRIZIO CARUSO"); \ \ _XL_PRINTD(XSize/2-2,1,5,hiscore); \ \ _XL_PRINT(XSize/2-8+4,COLLECT_Y, "COLLECT"); \ \ print_use_block_against_shurikens(USE_AGAINST_Y); \ \ _XL_DRAW(XSize/2-7+11,COLLECT_Y,DIAMOND_TILE, _XL_GREEN); \ \ _XL_SET_TEXT_COLOR(_XL_CYAN); \ \ _XL_PRINT(XSize/2-7,SHURIKEN_Y, "S H U R I K E N"); \ \ animate_shurikens(); \ } while(0) #define the_end() \ do \ { \ level=2; \ challenge_level=0; \ init_map(); \ \ _XL_SET_TEXT_COLOR(_XL_WHITE); \ _XL_PRINT(XSize/2-3,YSize/2,"THE END"); \ \ animate_shurikens(); \ } while(0) #endif #define initialize_level() \ do \ { \ initialize_player_achievements(); \ \ if(new_level) \ { \ initialize_new_level(); \ } \ initialize_level_display(); \ initialize_player(); \ update_player(); \ \ new_level = 0; \ one_second_pause(); \ _XL_WAIT_FOR_INPUT(); \ } while(0) #define handle_speed() \ do \ { \ short_pause(); \ } while(0) #define handle_end_game() \ do \ { \ if(alive) \ { \ the_end(); \ } \ _XL_SET_TEXT_COLOR(_XL_RED); \ _XL_PRINT(XSize/2-4,YSize/2,"GAME OVER"); \ \ if(score>hiscore) \ { \ hiscore = score; \ } \ one_second_pause(); \ _XL_WAIT_FOR_INPUT(); \ } while(0) #define initialize_cross_lib() \ _XL_INIT_GRAPHICS(); \ _XL_INIT_INPUT(); \ _XL_INIT_SOUND(); #define continue_game_condition() \ lives && (level<=FINAL_LEVEL) int main(void) { initialize_cross_lib(); hiscore = 0; while(1) { initialize_global_game(); title(); while(continue_game_condition()) { initialize_level(); while(continue_level_condition()) { handle_player(); if(alive) { handle_freeze_and_shurikens(); handle_barriers(); handle_ring(); handle_collisions(); handle_speed(); handle_extra_life(); handle_time(); } } if(alive) { handle_next_level(); } else { handle_lose_life(); } }; handle_end_game(); } return EXIT_SUCCESS; } ================================================ FILE: src/games/shuriken/makefiles/Makefile.override ================================================ ####################################### creativision: $(ASSETS_PATH)/8x8_chars.h $(CC65_PATH)$(MYCC65) $(INCLUDE_OPTS) -O -t creativision \ -D__CREATIVISION__ -DX_OFFSET=7 -DXSize=15 -DY_OFFSET=4 -DYSize=12 \ -D__ALT_SLEEP $(CREATIVISION_GAME_OPTS) \ -D__VDP_MODE1_GRAPHICS \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_CREATIVISION_SLOWDOWN) \ --config $(CFG_PATH)/cc65/creativision-16k_less_stack.cfg \ $(CROSS_LIB_PATH)/sound/cc65/creativision/creativision_sounds.c \ $(FULL_FILES) \ $(CROSS_LIB_PATH)/display/init_graphics/cc65/creativision/creativision_color_init_graphics.c \ -o $(BUILD_PATH)/X$(GAME_NAME)_creativision_16k.bin dd if=$(BUILD_PATH)/X$(GAME_NAME)_creativision_16k.bin bs=8k skip=1 > $(BUILD_PATH)/X$(GAME_NAME)_creativision_16k_SWAPPED.bin dd if=$(BUILD_PATH)/X$(GAME_NAME)_creativision_16k.bin bs=8k count=1 >> $(BUILD_PATH)/X$(GAME_NAME)_creativision_16k_SWAPPED.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_creativision_16k.bin #-DXSize=16 -DX_OFFSET=2 -DY_OFFSET=1 -DYSize=16 # YSize=17 maybe possible ifdef USE_TOOLS gamate: $(ASSETS_PATH)/cc65_gamate_tiles.s $(TOOLS_PATH)/cc65/gamate/gamate-fixcart$(COMPILEDEXT) else gamate: $(ASSETS_PATH)/cc65_gamate_tiles.s endif $(CC65_PATH)$(MYCC65) $(INCLUDE_OPTS) -Or -Cl -t gamate -m mapfile.txt --config $(CFG_PATH)/cc65/gamate_reduced_stack_2.cfg \ -DXSize=16 -DX_OFFSET=2 -DY_OFFSET=1 -DYSize=16 \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_GAMATE_SLOWDOWN) \ $(GAMATE_GAME_OPTS) -D_XL_NO_COLOR \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS \ -D__NO_SCREEN_COLOR_INIT \ $(FULL_FILES) \ $(ASSETS_PATH)/cc65_gamate_tiles.s \ $(CROSS_LIB_PATH)/sound/cc65/gamate/gamate_sounds.c \ -o $(BUILD_PATH)/X$(GAME_NAME)_gamate.bin ifdef USE_TOOLS $(TOOLS_PATH)/cc65/gamate/gamate-fixcart$(COMPILEDEXT) $(BUILD_PATH)/X$(GAME_NAME)_gamate.bin endif c16_16k: $(ASSETS_PATH)/cc65_udc_arcade_64_chars.s $(CC65_PATH)$(MYCC65) $(INCLUDE_OPTS) -Or -Cl -t c16 -m mapfile.txt \ --config $(CFG_PATH)/cc65/c16-16k_GFX_64chars_stack_0x30.cfg \ -D__NO_SCREEN_COLOR_INIT \ -D__ALT_PRINT -DSIMPLE_SLOWDOWN \ -D__MEMORY_MAPPED_GRAPHICS \ -D__ASSEMBLY_CLEAR_SCREEN \ -D__ALT_SLEEP \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_C16_SLOWDOWN) \ -D__UDG_BASE_FACTOR=15 \ $(FULL_FILES) \ $(ASSETS_PATH)/cc65_udc_arcade_64_chars.s \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c \ $(CROSS_LIB_PATH)/sound/cc65/c264/c264_sounds.c \ $(CROSS_LIB_PATH)/display/init_graphics/cc65/c264/c16_linked_redefined_chars_init_graphics.c \ -o $(BUILD_PATH)/X$(GAME_NAME)_$@.prg ################################################################# ############################# # SG1000 sg1000: $(ASSETS_PATH)/z88dk_xchase.asm $(Z88DK_PATH)$(MYZ88DK) +sc3000 $(SCCZ80_ROM_OPTS) -subtype=rom \ $(INCLUDE_OPTS) -DEXTRA_TITLE \ -D__SC3000__ \ -DZ88DK_JOYSTICK \ -DXSize=16 -DX_OFFSET=8 -DYSize=16 -DY_OFFSET=4 \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_SC3000_SLOWDOWN) \ -D__BIT_BANG_SOUND \ \ -D__CONIO_GRAPHICS \ -vn -lndos -create-app \ \ \ -clib=default -pragma-redirect:fputc_cons=fputc_cons_generic \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/udg/udg_init_graphics.c \ $(ASSETS_PATH)/z88dk_xchase.asm \ -o $(BUILD_PATH)/X$(GAME_NAME)_sg1000.prg \ $(FULL_FILES) rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.prg rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@_BSS.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@_DATA.bin ================================================ FILE: src/games/shuriken/screen_types.h ================================================ #ifndef _SCREEN_TYPES_H #define _SCREEN_TYPES_H #define EMPTY 0 #define RING 1 #define FREEZE 2 #define DIAMOND 3 #define BLOCK 4 #define WALL 5 #define SHURIKEN 6 #define MINI_SHURIKEN 7 #define DEADLY 5 #endif // _SCREEN_TYPES_H ================================================ FILE: src/games/shuriken/shapes/6x8/shape0.txt ================================================ ...### ...#.. ..##.. .##### #....# #..... ###... ..#### ================================================ FILE: src/games/shuriken/shapes/6x8/shape1.txt ================================================ #.#... ..#... ..#... ..#... .##... .#.... ##.... ...... ================================================ FILE: src/games/shuriken/shapes/6x8/shape10.txt ================================================ ..#### ###... #....# #....# ..#### .###.. ...#.. ...### ================================================ FILE: src/games/shuriken/shapes/6x8/shape11.txt ================================================ ...... ##.... .#.... .##... ..#... ..#... #.#... ..#... ================================================ FILE: src/games/shuriken/shapes/6x8/shape12.txt ================================================ ...##. ....#. ....## ...... ...... ...... ...... ...... ================================================ FILE: src/games/shuriken/shapes/6x8/shape13.txt ================================================ .##..# ..#..# ...### ####.. ...... ...... ...... ...... ================================================ FILE: src/games/shuriken/shapes/6x8/shape14.txt ================================================ ...... ....## ....#. ...##. ...#.. ...#.. ...#.. ...#.# ================================================ FILE: src/games/shuriken/shapes/6x8/shape15.txt ================================================ ####.. ...### .....# #....# #####. ..##.. ..#... ###... ================================================ FILE: src/games/shuriken/shapes/6x8/shape16.txt ================================================ .#.... .##... .##### .# ## ## #. #####. ...##. ....#. ================================================ FILE: src/games/shuriken/shapes/6x8/shape17.txt ================================================ .# ## .##### .##... ..#... ...... ...... ...... ...... ================================================ FILE: src/games/shuriken/shapes/6x8/shape18.txt ================================================ ...... ...... ...... ...... ...#.. ...##. #####. ## #. ================================================ FILE: src/games/shuriken/shapes/6x8/shape19.txt ================================================ ...... ...... ....## ...### .....# .....# .....# ...... ================================================ FILE: src/games/shuriken/shapes/6x8/shape2.txt ================================================ ...... ...... ...... ...... ..#### ###... #..#.. #..##. ================================================ FILE: src/games/shuriken/shapes/6x8/shape20.txt ================================================ ...... #..... #..... #..... ###... ##.... ...... ...... ================================================ FILE: src/games/shuriken/shapes/6x8/shape21.txt ================================================ ###### ###### ##.### ##...# #...## ###.## ###### ###### ================================================ FILE: src/games/shuriken/shapes/6x8/shape22.txt ================================================ ###### ...### .##### .##### #####. #####. ###... ###### ================================================ FILE: src/games/shuriken/shapes/6x8/shape23.txt ================================================ ..##.. .####. ####.# #####. ####.# .####. ..##.. ...... ================================================ FILE: src/games/shuriken/shapes/6x8/shape24.txt ================================================ ...... ...... ..#... ..###. .###.. ...#.. ...... ...... ================================================ FILE: src/games/shuriken/shapes/6x8/shape25.txt ================================================ .####. ###### ##..## #....# #....# ##..## ###### .####. ================================================ FILE: src/games/shuriken/shapes/6x8/shape26.txt ================================================ ...... ..##.. .##.#. ####.# .##.#. ..##.. ...... ...... ================================================ FILE: src/games/shuriken/shapes/6x8/shape3.txt ================================================ ...... ...... ...... ...... ...... ##.... .#.... .##... ================================================ FILE: src/games/shuriken/shapes/6x8/shape4.txt ================================================ ...#.. ...#.# ...#.. ...#.. ...##. ....#. ....## ...... ================================================ FILE: src/games/shuriken/shapes/6x8/shape5.txt ================================================ ###... ..#... ..###. ####.. #....# #....# ...### ####.. ================================================ FILE: src/games/shuriken/shapes/6x8/shape6.txt ================================================ ...... ...... ...... ...... ...... ....## ....#. ...##. ================================================ FILE: src/games/shuriken/shapes/6x8/shape7.txt ================================================ ...... ...... ...... ...... ####.. ...### .#...# .##..# ================================================ FILE: src/games/shuriken/shapes/6x8/shape8.txt ================================================ #..##. #...#. ###... ..#### ...... ...... ...... ...... ================================================ FILE: src/games/shuriken/shapes/6x8/shape9.txt ================================================ .##... .#.... ##.... ...... ...... ...... ...... ...... ================================================ FILE: src/games/shuriken/shapes/6x9/shape0.txt ================================================ ...### ...#.. ..##.. .##### #....# #..... ###... ..#### ..#### ================================================ FILE: src/games/shuriken/shapes/6x9/shape1.txt ================================================ #.#... ..#... ..#... ..#... .##... .#.... ##.... ...... ...... ================================================ FILE: src/games/shuriken/shapes/6x9/shape10.txt ================================================ ..#### ###... #....# #....# ..#### .###.. ...#.. ...### ...### ================================================ FILE: src/games/shuriken/shapes/6x9/shape11.txt ================================================ ...... ##.... .#.... .##... ..#... ..#... #.#... ..#... ..#... ================================================ FILE: src/games/shuriken/shapes/6x9/shape12.txt ================================================ ...##. ....#. ....## ...... ...... ...... ...... ...... ...... ================================================ FILE: src/games/shuriken/shapes/6x9/shape13.txt ================================================ .##..# ..#..# ...### ####.. ...... ...... ...... ...... ...... ================================================ FILE: src/games/shuriken/shapes/6x9/shape14.txt ================================================ ...... ....## ....#. ...##. ...#.. ...#.. ...#.. ...#.# ...#.# ================================================ FILE: src/games/shuriken/shapes/6x9/shape15.txt ================================================ ####.. ...### .....# #....# #####. ..##.. ..#... ###... ###... ================================================ FILE: src/games/shuriken/shapes/6x9/shape16.txt ================================================ .#.... .##... .##### .# ## ## #. #####. ...##. ....#. ....#. ================================================ FILE: src/games/shuriken/shapes/6x9/shape17.txt ================================================ .# ## .##### .##... ..#... ...... ...... ...... ...... ...... ================================================ FILE: src/games/shuriken/shapes/6x9/shape18.txt ================================================ ...... ...... ...... ...... ...#.. ...##. #####. ## #. ## #. ================================================ FILE: src/games/shuriken/shapes/6x9/shape19.txt ================================================ ...... ...... ....## ...### .....# .....# .....# ...... ...... ================================================ FILE: src/games/shuriken/shapes/6x9/shape2.txt ================================================ ...... ...... ...... ...... ..#### ###... #..#.. #..##. #..##. ================================================ FILE: src/games/shuriken/shapes/6x9/shape20.txt ================================================ ...... #..... #..... #..... ###... ##.... ...... ...... ...... ================================================ FILE: src/games/shuriken/shapes/6x9/shape21.txt ================================================ ###### ###### ##.### ##...# #...## ###.## ###### ###### ###### ================================================ FILE: src/games/shuriken/shapes/6x9/shape22.txt ================================================ ###### ...### .##### .##### #####. #####. ###... ###### ###### ================================================ FILE: src/games/shuriken/shapes/6x9/shape23.txt ================================================ ..##.. .####. ####.# #####. ####.# .####. ..##.. ...... ...... ================================================ FILE: src/games/shuriken/shapes/6x9/shape24.txt ================================================ ...... ...... ..#... ..###. .###.. ...#.. ...... ...... ...... ================================================ FILE: src/games/shuriken/shapes/6x9/shape25.txt ================================================ .####. ###### ##..## #....# #....# ##..## ###### .####. .####. ================================================ FILE: src/games/shuriken/shapes/6x9/shape26.txt ================================================ ...... ..##.. .##.#. ####.# .##.#. ..##.. ...... ...... ...... ================================================ FILE: src/games/shuriken/shapes/6x9/shape3.txt ================================================ ...... ...... ...... ...... ...... ##.... .#.... .##... .##... ================================================ FILE: src/games/shuriken/shapes/6x9/shape4.txt ================================================ ...#.. ...#.# ...#.. ...#.. ...##. ....#. ....## ...... ...... ================================================ FILE: src/games/shuriken/shapes/6x9/shape5.txt ================================================ ###... ..#... ..###. ####.. #....# #....# ...### ####.. ####.. ================================================ FILE: src/games/shuriken/shapes/6x9/shape6.txt ================================================ ...... ...... ...... ...... ...... ....## ....#. ...##. ...##. ================================================ FILE: src/games/shuriken/shapes/6x9/shape7.txt ================================================ ...... ...... ...... ...... ####.. ...### .#...# .##..# .##..# ================================================ FILE: src/games/shuriken/shapes/6x9/shape8.txt ================================================ #..##. #...#. ###... ..#### ...... ...... ...... ...... ...... ================================================ FILE: src/games/shuriken/shapes/6x9/shape9.txt ================================================ .##... .#.... ##.... ...... ...... ...... ...... ...... ...... ================================================ FILE: src/games/shuriken/shapes/7x8/shape0.txt ================================================ #..#### #.###.# #...#.# #...### ##..##. .#...#. .###... ...#### ================================================ FILE: src/games/shuriken/shapes/7x8/shape1.txt ================================================ ...#... ...#... ##.#... #..#... ..##... ..#.... ###.... #...... ================================================ FILE: src/games/shuriken/shapes/7x8/shape10.txt ================================================ ...#### .###... .#..#.. ##..##. #...### #...#.# #..##.# #.##### ================================================ FILE: src/games/shuriken/shapes/7x8/shape11.txt ================================================ #...... ###.... ..#.... ..##... ##.#... #..#... ...#... ...#... ================================================ FILE: src/games/shuriken/shapes/7x8/shape12.txt ================================================ ...##.. ....#.. ....### ......# ....... ....... ....... ....... ================================================ FILE: src/games/shuriken/shapes/7x8/shape13.txt ================================================ ##...## .#...#. ...###. ####... ....... ....... ....... ....... ================================================ FILE: src/games/shuriken/shapes/7x8/shape14.txt ================================================ ......# ....### ....#.. ...##.. ...#..# ...#.## ...#... ...#... ================================================ FILE: src/games/shuriken/shapes/7x8/shape15.txt ================================================ ####... ...###. .#...#. .##..## ###...# #.#...# #.###.# ####..# ================================================ FILE: src/games/shuriken/shapes/7x8/shape16.txt ================================================ ..#.... ..##... ..##### ..#.##. .##.#.. #####.. ...##.. ....#.. ================================================ FILE: src/games/shuriken/shapes/7x8/shape17.txt ================================================ ..#.### ..####. ..##... ...#... ....... ....... ....... ....... ================================================ FILE: src/games/shuriken/shapes/7x8/shape18.txt ================================================ ....... ....... ....... ....... ...#... ...##.. .####.. ###.#.. ================================================ FILE: src/games/shuriken/shapes/7x8/shape19.txt ================================================ ....... ....... .....## ....### ......# ......# ......# ....... ================================================ FILE: src/games/shuriken/shapes/7x8/shape2.txt ================================================ ....... ....... ....... ....... ...#### .###... .#...#. ##...## ================================================ FILE: src/games/shuriken/shapes/7x8/shape20.txt ================================================ #...... ##..... ##..... .#..... .###... ###.... #...... #...... ================================================ FILE: src/games/shuriken/shapes/7x8/shape21.txt ================================================ ####### ####### ###.### ###...# ##...## ####.## ####### ####### ================================================ FILE: src/games/shuriken/shapes/7x8/shape22.txt ================================================ ####### #...### #.##### #.##### #####.# #####.# ###...# ####### ================================================ FILE: src/games/shuriken/shapes/7x8/shape23.txt ================================================ ...#... ..###.. .###.#. #####.# .###.#. ..###.. ...#... ....... ================================================ FILE: src/games/shuriken/shapes/7x8/shape24.txt ================================================ ....... ....... ...#... ...###. ..###.. ....#.. ....... ....... ================================================ FILE: src/games/shuriken/shapes/7x8/shape25.txt ================================================ ....... ..###.. .##.##. ##...## ##...## .##.##. ..###.. ....... ================================================ FILE: src/games/shuriken/shapes/7x8/shape26.txt ================================================ ....... ...##.. ..##.#. .####.# ..##.#. ...##.. ....... ....... ================================================ FILE: src/games/shuriken/shapes/7x8/shape3.txt ================================================ ....... ....... ....... ....... #...... ###.... ..#.... ..##... ================================================ FILE: src/games/shuriken/shapes/7x8/shape4.txt ================================================ ...#... ...#... ...#..# ...#.## ...##.. ....#.. ....### ......# ================================================ FILE: src/games/shuriken/shapes/7x8/shape5.txt ================================================ #####.# #.##..# #.#...# ###...# .##..## ..#..#. ...###. ####... ================================================ FILE: src/games/shuriken/shapes/7x8/shape6.txt ================================================ ....... ....... ....... ....... ......# ....### ....#.. ...##.. ================================================ FILE: src/games/shuriken/shapes/7x8/shape7.txt ================================================ ....... ....... ....... ....... ####... ...###. #....#. ##...## ================================================ FILE: src/games/shuriken/shapes/7x8/shape8.txt ================================================ ##...## .#....# .###... ...#### ....... ....... ....... ....... ================================================ FILE: src/games/shuriken/shapes/7x8/shape9.txt ================================================ ..##... ..#.... ###.... #...... ....... ....... ....... ....... ================================================ FILE: src/games/shuriken/shapes/8x6/shape0.txt ================================================ #...#### #...#..# #..##### ##.....# .###.... ...##### ================================================ FILE: src/games/shuriken/shapes/8x6/shape1.txt ================================================ #..#.... ...#.... ...#.... ..##.... ###..... #....... ================================================ FILE: src/games/shuriken/shapes/8x6/shape10.txt ================================================ ...##### .###.... ##.....# #..##### #...#..# #...#### ================================================ FILE: src/games/shuriken/shapes/8x6/shape11.txt ================================================ #....... ###..... ..##.... ...#.... ...#.... #..#.... ================================================ FILE: src/games/shuriken/shapes/8x6/shape12.txt ================================================ ....##.. .....### .......# ........ ........ ........ ================================================ FILE: src/games/shuriken/shapes/8x6/shape13.txt ================================================ ...#..## ....###. #####... ........ ........ ........ ================================================ FILE: src/games/shuriken/shapes/8x6/shape14.txt ================================================ .......# .....### ....##.. ....#... ....#... ....#..# ================================================ FILE: src/games/shuriken/shapes/8x6/shape15.txt ================================================ #####... ....###. #.....## #####..# #..#...# ####...# ================================================ FILE: src/games/shuriken/shapes/8x6/shape16.txt ================================================ ..##.... ..###### ..# ##. .## #.. ######.. ....##.. ================================================ FILE: src/games/shuriken/shapes/8x6/shape17.txt ================================================ ..# ### ..#####. ..##.... ........ ........ ........ ================================================ FILE: src/games/shuriken/shapes/8x6/shape18.txt ================================================ ........ ........ ........ ....##.. ######.. .## #.. ================================================ FILE: src/games/shuriken/shapes/8x6/shape19.txt ================================================ ........ .....### ....### ......# ......## ......## ================================================ FILE: src/games/shuriken/shapes/8x6/shape2.txt ================================================ ........ ........ ........ ...##### .###.... ##..#... ================================================ FILE: src/games/shuriken/shapes/8x6/shape20.txt ================================================ ##...... ##...... #...... ###.... ###..... ........ ================================================ FILE: src/games/shuriken/shapes/8x6/shape21.txt ================================================ ######## ###.#### ###...## ##...### ####.### ######## ================================================ FILE: src/games/shuriken/shapes/8x6/shape22.txt ================================================ ######## #...#### #.####.# #.####.# ####...# ######## ================================================ FILE: src/games/shuriken/shapes/8x6/shape23.txt ================================================ ...##... ..##.#.. .####.#. .####.#. ..##.#.. ...##... ================================================ FILE: src/games/shuriken/shapes/8x6/shape24.txt ================================================ ........ ...#.... ...###.. ..###... ....#... ........ ================================================ FILE: src/games/shuriken/shapes/8x6/shape25.txt ================================================ ..####.. .##..##. ##....## ##....## .##..##. ..####.. ================================================ FILE: src/games/shuriken/shapes/8x6/shape26.txt ================================================ ...##... ..##.#.. .####.#. ..##.#.. ...##... ........ ================================================ FILE: src/games/shuriken/shapes/8x6/shape3.txt ================================================ ........ ........ ........ #....... ###..... ..##.... ================================================ FILE: src/games/shuriken/shapes/8x6/shape4.txt ================================================ ....#..# ....#... ....#... ....##.. .....### .......# ================================================ FILE: src/games/shuriken/shapes/8x6/shape5.txt ================================================ ####...# #..#...# #####..# #.....## ....###. #####... ================================================ FILE: src/games/shuriken/shapes/8x6/shape6.txt ================================================ ........ ........ ........ .......# .....### ....##.. ================================================ FILE: src/games/shuriken/shapes/8x6/shape7.txt ================================================ ........ ........ ........ #####... ....###. ...#..## ================================================ FILE: src/games/shuriken/shapes/8x6/shape8.txt ================================================ ##..#... .###.... ...##### ........ ........ ........ ================================================ FILE: src/games/shuriken/shapes/8x6/shape9.txt ================================================ ..##.... ###..... #....... ........ ........ ........ ================================================ FILE: src/games/shuriken/shapes/8x8/shape0.txt ================================================ #...#### #...#..# #..##..# #.###### ##....## .#.....# .###.... ...##### ================================================ FILE: src/games/shuriken/shapes/8x8/shape1.txt ================================================ ##.#.... #..#.... ...#.... ...#.... ..##.... ..#..... ###..... #....... ================================================ FILE: src/games/shuriken/shapes/8x8/shape10.txt ================================================ ...##### .###.... .#....#. ##....## #..##### #.###..# #...#..# #...#### ================================================ FILE: src/games/shuriken/shapes/8x8/shape11.txt ================================================ #....... ###..... ..#..... ..##.... ...#.... ...#.... ##.#.... #..#.... ================================================ FILE: src/games/shuriken/shapes/8x8/shape12.txt ================================================ ....##.. .....#.. .....### .......# ........ ........ ........ ........ ================================================ FILE: src/games/shuriken/shapes/8x8/shape13.txt ================================================ ..##..## ...#..#. ....###. #####... ........ ........ ........ ........ ================================================ FILE: src/games/shuriken/shapes/8x8/shape14.txt ================================================ .......# .....### .....#.. ....##.. ....#... ....#... ....#..# ....#.## ================================================ FILE: src/games/shuriken/shapes/8x8/shape15.txt ================================================ #####... ....###. #.....#. ##....## ######.# #..##..# #..#...# ####...# ================================================ FILE: src/games/shuriken/shapes/8x8/shape16.txt ================================================ ..#..... ..##.... ..###### ..# ##. .## #.. ######.. ....##.. .....#.. ================================================ FILE: src/games/shuriken/shapes/8x8/shape17.txt ================================================ ..# ### ..#####. ..##.... ...#.... ........ ........ ........ ........ ================================================ FILE: src/games/shuriken/shapes/8x8/shape18.txt ================================================ ........ ........ ........ ........ ....#... ....##.. .#####.. ### #.. ================================================ FILE: src/games/shuriken/shapes/8x8/shape19.txt ================================================ ........ ........ .....### ....### ......# ......## ......## .......# ================================================ FILE: src/games/shuriken/shapes/8x8/shape2.txt ================================================ ........ ........ ........ ........ ...##### .###.... .#..#... ##..##.. ================================================ FILE: src/games/shuriken/shapes/8x8/shape20.txt ================================================ #....... ##...... ##...... #...... ###.... ###..... ........ ........ ================================================ FILE: src/games/shuriken/shapes/8x8/shape21.txt ================================================ ######## ######## ###.#### ###...## ##...### ####.### ######## ######## ================================================ FILE: src/games/shuriken/shapes/8x8/shape22.txt ================================================ ######## #...#### #.###### #.####.# #.####.# ######.# ####...# ######## ================================================ FILE: src/games/shuriken/shapes/8x8/shape23.txt ================================================ ...##... ..####.. .####.#. ######.# .####.#. ..####.. ...##... ........ ================================================ FILE: src/games/shuriken/shapes/8x8/shape24.txt ================================================ ........ ........ ...#.... ...###.. ..###... ....#... ........ ........ ================================================ FILE: src/games/shuriken/shapes/8x8/shape25.txt ================================================ ..####.. .######. ###..### ##....## ##....## ###..### .######. ..####.. ================================================ FILE: src/games/shuriken/shapes/8x8/shape26.txt ================================================ ........ ...##... ..##.#.. .####.#. ..##.#.. ...##... ........ ........ ================================================ FILE: src/games/shuriken/shapes/8x8/shape3.txt ================================================ ........ ........ ........ ........ #....... ###..... ..#..... ..##.... ================================================ FILE: src/games/shuriken/shapes/8x8/shape4.txt ================================================ ....#..# ....#.## ....#... ....#... ....##.. .....#.. .....### .......# ================================================ FILE: src/games/shuriken/shapes/8x8/shape5.txt ================================================ ####...# #..#...# #..###.# #####..# ##....## .#....#. ....###. #####... ================================================ FILE: src/games/shuriken/shapes/8x8/shape6.txt ================================================ ........ ........ ........ ........ .......# .....### .....#.. ....##.. ================================================ FILE: src/games/shuriken/shapes/8x8/shape7.txt ================================================ ........ ........ ........ ........ #####... ....###. ..#...#. ..##..## ================================================ FILE: src/games/shuriken/shapes/8x8/shape8.txt ================================================ ##..##.. .#...#.. .###.... ...##### ........ ........ ........ ........ ================================================ FILE: src/games/shuriken/shapes/8x8/shape9.txt ================================================ ..##.... ..#..... ###..... #....... ........ ........ ........ ........ ================================================ FILE: src/games/shuriken/tiles/6x9/tile0.txt ================================================ 7,4,12,31,33,32,56,15,15 ================================================ FILE: src/games/shuriken/tiles/6x9/tile1.txt ================================================ 40,8,8,8,24,16,48,0,0 ================================================ FILE: src/games/shuriken/tiles/6x9/tile10.txt ================================================ 15,56,33,33,15,28,4,7,7 ================================================ FILE: src/games/shuriken/tiles/6x9/tile11.txt ================================================ 0,48,16,24,8,8,40,8,8 ================================================ FILE: src/games/shuriken/tiles/6x9/tile12.txt ================================================ 6,2,3,0,0,0,0,0,0 ================================================ FILE: src/games/shuriken/tiles/6x9/tile13.txt ================================================ 25,9,7,60,0,0,0,0,0 ================================================ FILE: src/games/shuriken/tiles/6x9/tile14.txt ================================================ 0,3,2,6,4,4,4,5,5 ================================================ FILE: src/games/shuriken/tiles/6x9/tile15.txt ================================================ 60,7,1,33,62,12,8,56,56 ================================================ FILE: src/games/shuriken/tiles/6x9/tile16.txt ================================================ 16,24,31,19,50,62,6,2,2 ================================================ FILE: src/games/shuriken/tiles/6x9/tile17.txt ================================================ 19,31,24,8,0,0,0,0,0 ================================================ FILE: src/games/shuriken/tiles/6x9/tile18.txt ================================================ 0,0,0,0,4,6,62,50,50 ================================================ FILE: src/games/shuriken/tiles/6x9/tile19.txt ================================================ 0,0,3,7,1,1,1,0,0 ================================================ FILE: src/games/shuriken/tiles/6x9/tile2.txt ================================================ 0,0,0,0,15,56,36,38,38 ================================================ FILE: src/games/shuriken/tiles/6x9/tile20.txt ================================================ 0,32,32,32,56,48,0,0,0 ================================================ FILE: src/games/shuriken/tiles/6x9/tile21.txt ================================================ 63,63,55,49,35,59,63,63,63 ================================================ FILE: src/games/shuriken/tiles/6x9/tile22.txt ================================================ 63,7,31,31,62,62,56,63,63 ================================================ FILE: src/games/shuriken/tiles/6x9/tile23.txt ================================================ 12,30,61,62,61,30,12,0,0 ================================================ FILE: src/games/shuriken/tiles/6x9/tile24.txt ================================================ 0,0,8,14,28,4,0,0,0 ================================================ FILE: src/games/shuriken/tiles/6x9/tile25.txt ================================================ 30,63,51,33,33,51,63,30,30 ================================================ FILE: src/games/shuriken/tiles/6x9/tile26.txt ================================================ 0,12,26,61,26,12,0,0,0 ================================================ FILE: src/games/shuriken/tiles/6x9/tile3.txt ================================================ 0,0,0,0,0,48,16,24,24 ================================================ FILE: src/games/shuriken/tiles/6x9/tile4.txt ================================================ 4,5,4,4,6,2,3,0,0 ================================================ FILE: src/games/shuriken/tiles/6x9/tile5.txt ================================================ 56,8,14,60,33,33,7,60,60 ================================================ FILE: src/games/shuriken/tiles/6x9/tile6.txt ================================================ 0,0,0,0,0,3,2,6,6 ================================================ FILE: src/games/shuriken/tiles/6x9/tile7.txt ================================================ 0,0,0,0,60,7,17,25,25 ================================================ FILE: src/games/shuriken/tiles/6x9/tile8.txt ================================================ 38,34,56,15,0,0,0,0,0 ================================================ FILE: src/games/shuriken/tiles/6x9/tile9.txt ================================================ 24,16,48,0,0,0,0,0,0 ================================================ FILE: src/games/shuriken/tiles/7x8/tile0.txt ================================================ 79,93,69,71,102,34,56,15 ================================================ FILE: src/games/shuriken/tiles/7x8/tile1.txt ================================================ 8,8,104,72,24,16,112,64 ================================================ FILE: src/games/shuriken/tiles/7x8/tile10.txt ================================================ 15,56,36,102,71,69,77,95 ================================================ FILE: src/games/shuriken/tiles/7x8/tile11.txt ================================================ 64,112,16,24,104,72,8,8 ================================================ FILE: src/games/shuriken/tiles/7x8/tile12.txt ================================================ 12,4,7,1,0,0,0,0 ================================================ FILE: src/games/shuriken/tiles/7x8/tile13.txt ================================================ 99,34,14,120,0,0,0,0 ================================================ FILE: src/games/shuriken/tiles/7x8/tile14.txt ================================================ 1,7,4,12,9,11,8,8 ================================================ FILE: src/games/shuriken/tiles/7x8/tile15.txt ================================================ 120,14,34,51,113,81,93,121 ================================================ FILE: src/games/shuriken/tiles/7x8/tile16.txt ================================================ 16,24,31,22,52,124,12,4 ================================================ FILE: src/games/shuriken/tiles/7x8/tile17.txt ================================================ 23,30,24,8,0,0,0,0 ================================================ FILE: src/games/shuriken/tiles/7x8/tile18.txt ================================================ 0,0,0,0,8,12,60,116 ================================================ FILE: src/games/shuriken/tiles/7x8/tile19.txt ================================================ 0,0,3,7,1,1,1,0 ================================================ FILE: src/games/shuriken/tiles/7x8/tile2.txt ================================================ 0,0,0,0,15,56,34,99 ================================================ FILE: src/games/shuriken/tiles/7x8/tile20.txt ================================================ 64,96,96,32,56,112,64,64 ================================================ FILE: src/games/shuriken/tiles/7x8/tile21.txt ================================================ 127,127,119,113,99,123,127,127 ================================================ FILE: src/games/shuriken/tiles/7x8/tile22.txt ================================================ 127,71,95,95,125,125,113,127 ================================================ FILE: src/games/shuriken/tiles/7x8/tile23.txt ================================================ 8,28,58,125,58,28,8,0 ================================================ FILE: src/games/shuriken/tiles/7x8/tile24.txt ================================================ 0,0,8,14,28,4,0,0 ================================================ FILE: src/games/shuriken/tiles/7x8/tile25.txt ================================================ 0,28,54,99,99,54,28,0 ================================================ FILE: src/games/shuriken/tiles/7x8/tile26.txt ================================================ 0,12,26,61,26,12,0,0 ================================================ FILE: src/games/shuriken/tiles/7x8/tile3.txt ================================================ 0,0,0,0,64,112,16,24 ================================================ FILE: src/games/shuriken/tiles/7x8/tile4.txt ================================================ 8,8,9,11,12,4,7,1 ================================================ FILE: src/games/shuriken/tiles/7x8/tile5.txt ================================================ 125,89,81,113,51,18,14,120 ================================================ FILE: src/games/shuriken/tiles/7x8/tile6.txt ================================================ 0,0,0,0,1,7,4,12 ================================================ FILE: src/games/shuriken/tiles/7x8/tile7.txt ================================================ 0,0,0,0,120,14,66,99 ================================================ FILE: src/games/shuriken/tiles/7x8/tile8.txt ================================================ 99,33,56,15,0,0,0,0 ================================================ FILE: src/games/shuriken/tiles/7x8/tile9.txt ================================================ 24,16,112,64,0,0,0,0 ================================================ FILE: src/games/shuriken/tiles/8x6/tile0.txt ================================================ 143,137,159,193,112,31 ================================================ FILE: src/games/shuriken/tiles/8x6/tile1.txt ================================================ 144,16,16,48,224,128 ================================================ FILE: src/games/shuriken/tiles/8x6/tile10.txt ================================================ 31,112,193,159,137,143 ================================================ FILE: src/games/shuriken/tiles/8x6/tile11.txt ================================================ 128,224,48,16,16,144 ================================================ FILE: src/games/shuriken/tiles/8x6/tile12.txt ================================================ 12,7,1,0,0,0 ================================================ FILE: src/games/shuriken/tiles/8x6/tile13.txt ================================================ 19,14,248,0,0,0 ================================================ FILE: src/games/shuriken/tiles/8x6/tile14.txt ================================================ 1,7,12,8,8,9 ================================================ FILE: src/games/shuriken/tiles/8x6/tile15.txt ================================================ 248,14,131,249,145,241 ================================================ FILE: src/games/shuriken/tiles/8x6/tile16.txt ================================================ 48,63,38,100,252,12 ================================================ FILE: src/games/shuriken/tiles/8x6/tile17.txt ================================================ 39,62,48,0,0,0 ================================================ FILE: src/games/shuriken/tiles/8x6/tile18.txt ================================================ 0,0,0,12,252,100 ================================================ FILE: src/games/shuriken/tiles/8x6/tile19.txt ================================================ 0,7,14,2,3,3 ================================================ FILE: src/games/shuriken/tiles/8x6/tile2.txt ================================================ 0,0,0,31,112,200 ================================================ FILE: src/games/shuriken/tiles/8x6/tile20.txt ================================================ 192,192,64,112,224,0 ================================================ FILE: src/games/shuriken/tiles/8x6/tile21.txt ================================================ 255,239,227,199,247,255 ================================================ FILE: src/games/shuriken/tiles/8x6/tile22.txt ================================================ 255,143,189,189,241,255 ================================================ FILE: src/games/shuriken/tiles/8x6/tile23.txt ================================================ 24,52,122,122,52,24 ================================================ FILE: src/games/shuriken/tiles/8x6/tile24.txt ================================================ 0,16,28,56,8,0 ================================================ FILE: src/games/shuriken/tiles/8x6/tile25.txt ================================================ 60,102,195,195,102,60 ================================================ FILE: src/games/shuriken/tiles/8x6/tile26.txt ================================================ 24,52,122,52,24,0 ================================================ FILE: src/games/shuriken/tiles/8x6/tile3.txt ================================================ 0,0,0,128,224,48 ================================================ FILE: src/games/shuriken/tiles/8x6/tile4.txt ================================================ 9,8,8,12,7,1 ================================================ FILE: src/games/shuriken/tiles/8x6/tile5.txt ================================================ 241,145,249,131,14,248 ================================================ FILE: src/games/shuriken/tiles/8x6/tile6.txt ================================================ 0,0,0,1,7,12 ================================================ FILE: src/games/shuriken/tiles/8x6/tile7.txt ================================================ 0,0,0,248,14,19 ================================================ FILE: src/games/shuriken/tiles/8x6/tile8.txt ================================================ 200,112,31,0,0,0 ================================================ FILE: src/games/shuriken/tiles/8x6/tile9.txt ================================================ 48,224,128,0,0,0 ================================================ FILE: src/games/shuriken/tiles/8x8/tile0.txt ================================================ 143,137,153,191,195,65,112,31 ================================================ FILE: src/games/shuriken/tiles/8x8/tile1.txt ================================================ 208,144,16,16,48,32,224,128 ================================================ FILE: src/games/shuriken/tiles/8x8/tile10.txt ================================================ 31,112,66,195,159,185,137,143 ================================================ FILE: src/games/shuriken/tiles/8x8/tile11.txt ================================================ 128,224,32,48,16,16,208,144 ================================================ FILE: src/games/shuriken/tiles/8x8/tile12.txt ================================================ 12,4,7,1,0,0,0,0 ================================================ FILE: src/games/shuriken/tiles/8x8/tile13.txt ================================================ 51,18,14,248,0,0,0,0 ================================================ FILE: src/games/shuriken/tiles/8x8/tile14.txt ================================================ 1,7,4,12,8,8,9,11 ================================================ FILE: src/games/shuriken/tiles/8x8/tile15.txt ================================================ 248,14,130,195,253,153,145,241 ================================================ FILE: src/games/shuriken/tiles/8x8/tile16.txt ================================================ 32,48,63,38,100,252,12,4 ================================================ FILE: src/games/shuriken/tiles/8x8/tile17.txt ================================================ 39,62,48,16,0,0,0,0 ================================================ FILE: src/games/shuriken/tiles/8x8/tile18.txt ================================================ 0,0,0,0,8,12,124,228 ================================================ FILE: src/games/shuriken/tiles/8x8/tile19.txt ================================================ 0,0,7,14,2,3,3,1 ================================================ FILE: src/games/shuriken/tiles/8x8/tile2.txt ================================================ 0,0,0,0,31,112,72,204 ================================================ FILE: src/games/shuriken/tiles/8x8/tile20.txt ================================================ 128,192,192,64,112,224,0,0 ================================================ FILE: src/games/shuriken/tiles/8x8/tile21.txt ================================================ 255,255,239,227,199,247,255,255 ================================================ FILE: src/games/shuriken/tiles/8x8/tile22.txt ================================================ 255,143,191,189,189,253,241,255 ================================================ FILE: src/games/shuriken/tiles/8x8/tile23.txt ================================================ 24,60,122,253,122,60,24,0 ================================================ FILE: src/games/shuriken/tiles/8x8/tile24.txt ================================================ 0,0,16,28,56,8,0,0 ================================================ FILE: src/games/shuriken/tiles/8x8/tile25.txt ================================================ 60,126,231,195,195,231,126,60 ================================================ FILE: src/games/shuriken/tiles/8x8/tile26.txt ================================================ 0,24,52,122,52,24,0,0 ================================================ FILE: src/games/shuriken/tiles/8x8/tile3.txt ================================================ 0,0,0,0,128,224,32,48 ================================================ FILE: src/games/shuriken/tiles/8x8/tile4.txt ================================================ 9,11,8,8,12,4,7,1 ================================================ FILE: src/games/shuriken/tiles/8x8/tile5.txt ================================================ 241,145,157,249,195,66,14,248 ================================================ FILE: src/games/shuriken/tiles/8x8/tile6.txt ================================================ 0,0,0,0,1,7,4,12 ================================================ FILE: src/games/shuriken/tiles/8x8/tile7.txt ================================================ 0,0,0,0,248,14,34,51 ================================================ FILE: src/games/shuriken/tiles/8x8/tile8.txt ================================================ 204,68,112,31,0,0,0,0 ================================================ FILE: src/games/shuriken/tiles/8x8/tile9.txt ================================================ 48,32,224,128,0,0,0,0 ================================================ FILE: src/games/shuriken/tiles/ASCII/char_tiles.h ================================================ #ifndef _CHAR_TILES_H #define _CHAR_TILES_H #include "cross_lib.h" #if defined(__MC10__) || defined(__CIDELSA__) #define _VERTICAL_BAR 'I' #else #define _VERTICAL_BAR '|' #endif #define _TILE_0 _VERTICAL_BAR #define _TILE_1 '-' #define _TILE_2 '-' #define _TILE_3 _VERTICAL_BAR #define _TILE_4 '-' #define _TILE_5 _VERTICAL_BAR #define _TILE_6 _VERTICAL_BAR #define _TILE_7 '-' #define _TILE_8 '-' #define _TILE_9 _VERTICAL_BAR #define _TILE_10 _VERTICAL_BAR #define _TILE_11 '-' #define _TILE_12 _VERTICAL_BAR #define _TILE_13 '-' #define _TILE_14 '-' #define _TILE_15 _VERTICAL_BAR #define _TILE_16 '*' #define _TILE_17 _VERTICAL_BAR #define _TILE_18 _VERTICAL_BAR #define _TILE_19 '-' #define _TILE_20 '-' #define _TILE_21 'X' #if !defined(__ATARI7800__) #define _TILE_22 '=' #else #define _TILE_22 '0' #endif #define _TILE_23 'S' #define _TILE_24 _VERTICAL_BAR #define _TILE_25 'O' #define _TILE_26 '.' #endif // _CHAR_TILES_H ================================================ FILE: src/games/snake/Makefile.snake ================================================ FULL_FILES ?= \ $(BASIC_CROSS_LIB_FILES) \ $(SOURCE_PATH)/main.c \ $(CROSS_LIB_PATH)/sleep/sleep_macros.c # $(SOURCE_PATH)/control_player.c \ # $(SOURCE_PATH)/move_snake.c \ # $(SOURCE_PATH)/snake.c \ # $(SOURCE_PATH)/game_text.c \ # $(SOURCE_PATH)/variables.c \ # FULL_FILES ?= \ # $(BASIC_CROSS_LIB_FILES) \ # $(SOURCE_PATH)/main.c \ # $(SOURCE_PATH)/control_player.c \ # $(SOURCE_PATH)/move_snake.c \ # $(SOURCE_PATH)/snake.c \ # $(SOURCE_PATH)/game_text.c \ # $(SOURCE_PATH)/variables.c \ # $(CROSS_LIB_PATH)/sleep/sleep_macros.c GAME_NAME := snake PARENT_DIR = games GLOBAL_OPTS = -D_XL_NO_SMALL_LETTERS include ./$(PARENT_DIR)/$(GAME_NAME)/config/project_config.mk include ./$(PARENT_DIR)/$(GAME_NAME)/config/game_config.mk include ./Makefile_common include ./$(PARENT_DIR)/$(GAME_NAME)/makefiles/Makefile.override include ./makefiles.common/auxiliary/Makefile_default_values ================================================ FILE: src/games/snake/config/game_config.mk ================================================ # # COCO_COLOR_GFX_GAME_OPTS ?= -DMAX_ARROWS_ON_SCREEN=7 -DFASTER_WALL_REDRAW -DNUMBER_OF_MISSILES=3 # CREATIVISION_GAME_OPTS ?= -DNUMBER_OF_MISSILES=2 -DMAX_ARROWS_ON_SCREEN=7 -DNO_BOTTOM_WALL_REDRAW GAMATE_GAME_OPTS ?= -DLESS_TEXT -DNO_BLINKING -DSIMPLE_STRATEGY -DNO_HINTS GAL_PLUS_GAME_OPTS ?= -DNO_DISPLAY_LEVEL_ANIMATION # C128_Z80_80COL_GAME_OPTS ?= -DMAX_ARROWS_ON_SCREEN=6 -DNUMBER_OF_MISSILES=2 -DSMALL_WALL -DNO_BOTTOM_WALL_REDRAW -DBULLETS_NUMBER=3 # ZX81_NO_GFX_GAME_OPTS ?= -DMAX_ARROWS_ON_SCREEN=7 -DNUMBER_OF_MISSILES=4 -DMISSILE_DROP_LOOP_MASK=1 -DSMALL_WALL # ZX81_GFX_GAME_OPTS ?= -DMAX_ARROWS_ON_SCREEN=6 -DNUMBER_OF_MISSILES=2 -DMISSILE_DROP_LOOP_MASK=7 -DSMALL_WALL -DNO_BOTTOM_WALL_REDRAW # APPLE2_GAME_OPTS ?= -DMAX_ARROWS_ON_SCREEN=7 -DNUMBER_OF_MISSILES=3 # COMX_GAME_OPTS ?= -DMAX_ARROWS_ON_SCREEN=6 -DNUMBER_OF_MISSILES=3 -DMISSILE_DROP_LOOP_MASK=1 -DSMALL_WALL -DNO_BOTTOM_WALL_REDRAW -DNORMAL_ZOMBIE_SPEED=1 -DSLOW_ZOMBIE_SPEED=7 # PECOM_GAME_OPTS ?= -DMAX_ARROWS_ON_SCREEN=6 -DNUMBER_OF_MISSILES=3 -DSMALL_WALL -DNO_BOTTOM_WALL_REDRAW -DNORMAL_ZOMBIE_SPEED=1 -DSLOW_ZOMBIE_SPEED=7 # TMC600_GAME_OPTS ?= -DMAX_ARROWS_ON_SCREEN=6 -DNUMBER_OF_MISSILES=4 -DSMALL_WALL -DNO_BOTTOM_WALL_REDRAW -DNORMAL_ZOMBIE_SPEED=1 -DSLOW_ZOMBIE_SPEED=7 PHC25_GAME_OPTS ?= -DREPEAT_MINES -DNO_DISPLAY_LEVEL_ANIMATION -DLESS_TEXT -DNO_BLINKING -DSIMPLE_STRATEGY -DNO_HINTS -D_XL_NO_SOUND PHC25_MONO_GAME_OPTS ?= -DREPEAT_MINES -DNO_DISPLAY_LEVEL_ANIMATION -DLESS_TEXT -DNO_BLINKING -DSIMPLE_STRATEGY -DNO_HINTS -D_XL_NO_SOUND PHC25_NO_GFX_GAME_OPTS ?= -DREPEAT_MINES -DNO_DISPLAY_LEVEL_ANIMATION -DLESS_TEXT -DNO_BLINKING -DSIMPLE_STRATEGY -DNO_HINTS ================================================ FILE: src/games/snake/config/project_config.mk ================================================ 4COLOR_PALETTE=-D__USE_GREEN ##################################################################### # SLOWDOWN VALUES # Common factor _COMMON_SLOWDOWN_FACTOR=10 # CC65 _AGAT_SLOWDOWN=250 _APPLE2_SLOWDOWN=55 _APPLE2ENH_SLOWDOWN=55 _APPLE2_HGR_SLOWDOWN=200 _APPLE2ENH_HGR_SLOWDOWN=200 _ATARI_SLOWDOWN=170 _ATARI5200_SLOWDOWN=170 _ATARI7800_SLOWDOWN=170 _ATARI7800_NO_COLOR_SLOWDOWN=80 _ATARI_LYNX_SLOWDOWN=1200 _C128_8502_80COL_SLOWDOWN=160 _C16_SLOWDOWN=55 _C16_CONIO_SLOWDOWN=85 _C64_SLOWDOWN=45 _CX16_SLOWDOWN?=260 _CBM610_SLOWDOWN=240 _CBM510_SLOWDOWN=120 _CREATIVISION_SLOWDOWN=100 _GAMATE_SLOWDOWN=120 _ORIC_SLOWDOWN=40 _MEGA65_SLOWDOWN=800 _NES_SLOWDOWN=320 _PET_SLOWDOWN=100 _PCE_SLOWDOWN=550 _SUPERVISION_SLOWDOWN=140 _VIC20_SLOWDOWN=330 # Z88DK _AGON_SLOWDOWN=4200 _AQUARIUS_SLOWDOWN=105 _ACE_SLOWDOWN=100 _BEE_SLOWDOWN=40 _C128_Z80_40COL_SLOWDOWN=20 _C128_Z80_80COL_SLOWDOWN=1 _CAMPUTERS_LYNX_SLOWDOWN=42 _COLECO_SLOWDOWN=100 _CPC_MODE0_SLOWDOWN=100 _CPC_CPCRSLIB_MODE1_SLOWDOWN=90 _CPC_MODE2_SLOWDOWN=90 _CPM_Z80_SLOWDOWN=90 _CPM_INTEL8080_SLOWDOWN=80 _E200_SLOWDOWN=400 _G850_SLOWDOWN=200 _G815_SLOWDOWN=160 _GAL_SLOWDOWN=1800 _GAL_GFX_SLOWDOWN=1400 _GB_SLOWDOWN=280 _GG_SLOWDOWN=300 _GB_WAIT_VSYNC_SLOWDOWN=150 _GL6000SL_SLOWDOWN=300 _HECTORHR_SLOWDOWN=100 _LASER500_SLOWDOWN=200 _M100_SLOWDOWN=100 _M5_SLOWDOWN=140 _MC1000_SLOWDOWN=75 _MSX_SLOWDOWN=200 _MSX_FIXED_COLORS_SLOWDOWN=300 _MTX500_SLOWDOWN=200 _MTX512_SLOWDOWN=200 _MZ_SLOWDOWN=200 _PHC25_SLOWDOWN=300 _PV1000_SLOWDOWN=5 _SAMCOUPE_SLOWDOWN=300 _SC3000_SLOWDOWN=200 _SMC777_SLOWDOWN=90 _SMS_SLOWDOWN=160 _SPECTRUM_SLOWDOWN=160 _TRS80_SLOWDOWN=30 _VG5K_SLOWDOWN=75 _VZ200_SLOWDOWN=250 _X07_SLOWDOWN=4 _ZX81_SLOWDOWN=10 _ZX81_WRX_SLOWDOWN=12 _ZX81_WRX128_SLOWDOWN=20 _ZX81_8X6_WRX128_SLOWDOWN=30 _ZX81_WRX64_SLOWDOWN=40 _ZX81_8X6_WRX64_SLOWDOWN=50 # CMOC _COCO_SLOWDOWN=160 _DRAGON_SLOWDOWN=160 _COCO3_SLOWDOWN=260 _MO5_SLOWDOWN=160 _TO7_SLOWDOWN=160 # LCC1802 _COMX_SLOWDOWN=100 _PECOM_SLOWDOWN=100 _TMC600_SLOWDOWN=120 _MICRO_SLOWDOWN=150 _CIDELSA_SLOWDOWN=130 # CC6303 _MC10_SLOWDOWN=80 # TI99 _TI99_SLOWDOWN=200 # GCC _NCURSES_SLOWDOWN=12 _TERMINAL_SLOWDOWN?=14 # VBCC _BBC_SLOWDOWN=600 # ACK _MSDOS86_SLOWDOWN?=300 ================================================ FILE: src/games/snake/control_player.h ================================================ #ifndef _CONTROL_PLAYER #define _CONTROL_PLAYER #include "cross_lib.h" uint8_t MOVE_PLAYER(void); #endif // _CONTROL_PLAYER ================================================ FILE: src/games/snake/doc/game_play.txt ================================================ GAME PLAY: The game concept is inspired by Nibbler (arcade game by Rock-Ola) and Snake (arcade and cell phone game). 1. GOAL Eat all apples on each level while avoiding being killed by: - biting yourself - consuming all energy (if you do not eat apples for too long) - bumping into mines 2. SUB-GOALS - Collect the rings for points - Collect 3 or more rings on the same level without being killed, to spawn an "energy" item - Find secrets and the secret level Remark: When you die you lose all the collected rings but you keep the apples. 3. ENERGY You start with maximum energy and a slow snake. If you do not eat apples, the snake starts moving faster. Once the snake has reached maximum speed, its energy starts decreasing. Hint: Keep an eye on the energy before you decide to go collect bonus items instead of apples. 4. COLLECTABLE ITEMS - Apple: slows you down and avoids energy from decreasing; - Ring: bonus points + secrets unlocked if you collect many; - $: extra points and maybe some secrets; - Energy: restore 10 points of energy and freeze mines; - Extra life: secret extra life item. IMPORTANT: eating items (usually) makes your snake grow, which may make your life harder. 5. ENEMIES The mines are your enemy. They can be both fixed or moving. Moving mines bounce any time that bump into anything. If the snake's HEAD touches the mine, the snake dies instantly. The body of the snake CAN touch the mines. The snake's body CAN be used as a shield against mines. Hint: collecting several rings may help you against the mines. 6. WALLS Hitting against walls or magic walls (walls that constantly disappear and reappear) pauses the snake and the game. This gives you the time to think about your next move. Your snake does NOT starve while paused on a wall. 7. LEVELS The game has 32 normal levels + 1 secret level. The game has an end. There are 17 different maps. Normal levels use 16 different maps. The secret level has its own map. Levels 17-32 use the same maps as levels 1-16 but have more mines and apples to collect. Completing a level gives you a bonus that depends on: - snake length - energy left - number of rings collected - level 8. SCORE - time : 1 point (score slowly increases by 1 point) - $ : 5 points - Apple : 20 points - first ring : 10 points - second ring : 20 points - third ring : 40 points - energy : 50 points - fourth ring : 80 points - fifth ring : 160 points - level bonus : (snake length X 2) + (energy X 8) + (32 X rings) + (level X 4) 9. EXTRA LIVES Every 5000 points you are awarded an extra life. Hint: Collecting the rings and keeping maximum energy is a good strategy to maximize your score. 10. SECRETS The game has 50 secrets most of which are only found on specific levels. Hint 1: collect rings wihout dying; Hint 2: on bonus levels, collect as many $ items as possible; Hint 3: examine horizontal walls. 11. ACHIEVEMENTS At the end of your match, you get a screen with your achievements: - Points/Record - Number of total items obtained at the end of each completed level - Number of secrets found - Number of completed levels / Secret Level ================================================ FILE: src/games/snake/doc/info.txt ================================================ CROSS SNAKE This is an original concept by Fabrizio Caruso written in C + Cross-Lib for hundreds of different computer and console systems. The game concept is inspired by Nibbler (arcade game by Rock-Ola) and Snake (arcade and cell phone game). For more details on CROSS_LIB, we refer to https://github.com/Fabrizio-Caruso/CROSS-LIB The game-specific source code for ALL 8-bit targets (the VERY SAME code is used for all computers, consoles, handheld consoles and scientific calculators) is in: https://github.com/Fabrizio-Caruso/CROSS-LIB/tree/master/src/games/snake CREDITS: The fonts used are rips taken from CharPad arcade fonts. ================================================ FILE: src/games/snake/doc/levels.txt ================================================ level $ hm vm hw vw 4th O ============================================================ 0 Y 2 1 Y N N ------------------------------------------------------------ 1 N 0 1 N N N 2 N 0 1 Y N N 3 N 2 0 N Y N 4 Y 3 0 N N Y 5 N 0 2 N Y N 6 N 3 1 Y N Y 7 N 0 2 Y N N 8 Y 2 1 Y N N 9 N 1 2 N Y N 10 N 2 1 N N N 11 N 2 0 N N N 12 Y 3 0 N N Y 13 N 2 1 Y N N 14 N 4 0 N Y Y 15 N 3 1 N N Y 16 Y 3 1 N N Y ------------------------------------------------------------ 17 N 2 1 N N N 18 N 2 1 Y N N 19 N 4 0 N Y Y 20 Y 4 0 N N Y 21 N 2 2 N Y N 22 N 4 1 Y N Y 23 N 2 2 Y N N 24 Y 3 1 Y N Y 25 N 2 2 N Y N 26 N 4 1 N N Y 27 N 4 0 N N Y 28 Y 4 0 N N Y 29 N 2 2 Y N N 30 N 4 1 N Y Y 31 N 4 1 N N Y 32 Y 4 2 N N Y ------------------------------------------------------------ $ = bonus level hm = horizontal mines vm = vertical mines hw = transparent horizontal wall vm = transparent vertical wall ================================================ FILE: src/games/snake/doc/whatsnew.txt ================================================ WHAT'S NEW Cross Snake 2.0 - Improved game mechanics: the snake against the wall does not prevent mines from bouncing - 50 secrets to discover (Hint 1: collect many rings and $ items without dying; Hint 2: some horizontal walls are special) - Achievements final screen: game ends with the number of different achievements and secrets obtained during the game - More rings to collect with visible effects after 3, 4 and 5 rings collected without dying - Improved levels (many more mines, some walls have been re-designed) - SECRET and OPEN00 strings shown when a secret is found and when the secret level is unlocked - New secret extra life item can be unlocked on bonus and secret levels ================================================ FILE: src/games/snake/game_text.h ================================================ #ifndef _GAME_TEXT_H #define _GAME_TEXT_H #define MAX_ENERGY 20 void PRINT_CENTERED_ON_ROW(uint8_t row, char *Text); #define PRINT_CENTERED(Text) \ PRINT_CENTERED_ON_ROW((YSize>>1), Text) #if XSize<22 #define HISCORE_OFFSET 2 #else #define HISCORE_OFFSET 0 #endif #define ACHIEVEMENTS_X_OFFSET (((XSize)/2)-5) #define ACHIEVEMENTS_Y_OFFSET ((YSize)/6) #if YSize>=20 #define STAT_OFFSET 4 #else #define STAT_OFFSET 2 #endif #if YSize>=15 #define LEVEL_OFFSET 2 #else #define LEVEL_OFFSET 0 #endif #if !defined(NO_DISPLAY_RINGS) void DISPLAY_RINGS(void); #define DELETE_RINGS() \ _XL_PRINT(ACHIEVEMENTS_X_OFFSET+3, ACHIEVEMENTS_Y_OFFSET+3, " ") #else #define DISPLAY_RINGS() #define DELETE_RINGS() #endif #define _NO_ENERGY_STRING _XL_N _XL_O _XL_SPACE _XL_E _XL_N _XL_E _XL_R _XL_G _XL_Y #define _CLEARED_STRING _XL_C _XL_L _XL_E _XL_A _XL_R _XL_E _XL_D #define _BONUS_STRING _XL_B _XL_O _XL_N _XL_U _XL_S #define _THE_END_STRING _XL_T _XL_H _XL_E _XL_SPACE _XL_E _XL_N _XL_D #define _GAME_OVER_STRING _XL_G _XL_A _XL_M _XL_E _XL_SPACE _XL_O _XL_V _XL_E _XL_R #if XSize<20 #define _SECRET_STRING _XL_W _XL_O _XL_W #define _SECRET_LEN 3 #else #define _SECRET_STRING _XL_S _XL_E _XL_C _XL_R _XL_E _XL_T #define _SECRET_LEN 6 #endif #define _LEVEL_STRING _XL_L _XL_E _XL_V _XL_E _XL_L #define _SNAKE_STRING _XL_S _XL_N _XL_A _XL_K _XL_E #define _Fabrizio_Caruso_STRING _XL_F _XL_a _XL_b _XL_r _XL_i _XL_z _XL_i _XL_o _XL_SPACE _XL_C _XL_a _XL_r _XL_u _XL_s _XL_o #define _PRESS_FIRE_STRING _XL_P _XL_R _XL_E _XL_S _XL_S _XL_SPACE _XL_F _XL_I _XL_R _XL_E #if YSize>=20 #define LINE_SKIP 2 #define LINE_OFFSET 8 #define SNAKE_LINE_OFFSET 5 #else #define SNAKE_LINE_OFFSET 4 #define LINE_OFFSET 6 #define LINE_SKIP 1 #endif // Adding this sensical line _XL_PRINT(0,i,""); fixes a bug for GCC for TI99 #if !defined(NO_EXTRA_TITLE) && YSize>=16 #if !defined(_XL_NO_COLOR) #define extra_title() \ { \ uint8_t i; \ show_intro_snake(); \ _XL_DRAW(XSize/4+XSize/2,YSize/8+SNAKE_LINE_OFFSET,APPLE_TILE,_XL_RED); \ for(i=0;i=12 2, XSize/3, 0, 4*YSize/5, 2*XSize/3, YSize/5, 4*YSize/5, #else 2, XSize/3, 0, 4*YSize/5, 2*XSize/3, YSize/5, YSize-3, #endif 0, // map 3 (27) #if YSize>=13 4, 0, YSize/4, XSize/4, 3*XSize/4, YSize/4, XSize/4, 0, 3*YSize/4, XSize/4, 3*XSize/4, 3*YSize/4, XSize/4, #else 4, 2, YSize/2-1, XSize/4-2, 3*XSize/4, YSize/2-1, XSize/4-2, 2, (YSize/2)+1, XSize/4-2, 3*XSize/4, (YSize/2)+1, XSize/4-2, #endif 2, XSize/2, 1, YSize/4, XSize/2, YSize-1-YSize/4, YSize/4, 0, // map 4 (48) 0, #if YSize>=12 2, XSize/3, 0, YSize-YSize/5, 2*XSize/3, YSize/5, YSize-YSize/5-1, #else 2, XSize/3, 0, YSize-3, 2*XSize/3, 3, YSize-YSize/5-1, #endif 2, 1,1,XSize/8,YSize/8,DEADLY, XSize-1-XSize/8,YSize-1-YSize/8,XSize/8,YSize/8,DEADLY, // map 5 (67) #if YSize>=16 4, 0, YSize/5, XSize/2, XSize-1-XSize/2, 2*YSize/5, XSize/2, 0, 3*YSize/5, XSize/2, XSize-1-XSize/2, 4*YSize/5, XSize/2, #else 4, 2, 2, 3, XSize-5, 2, 3, 2, YSize-3, 3, XSize-5, YSize-3, 3, #endif 0, 0, // map 6 (82) (Z88DK partial work-around for preprocessor bug on division with integer litterals) 4, ((uint8_t) (XSize/4)), ((uint8_t) (YSize/4)), ((uint8_t) (XSize/5))+1, XSize-((uint8_t) (XSize/4))-((uint8_t) (XSize/5)), ((uint8_t) (YSize/4)), ((uint8_t) (XSize/5))+1, // (1) ((uint8_t) (XSize/4)), YSize-1-((uint8_t) (YSize/4)), ((uint8_t) (XSize/5))+1, XSize-((uint8_t) (XSize/4))-((uint8_t) (XSize/5)),YSize-1-((uint8_t) (YSize/4)), ((uint8_t) (XSize/5))+1, // (2) 4, ((uint8_t) (XSize/4)), ((uint8_t) (YSize/4)), ((uint8_t) (YSize/5)), XSize-((uint8_t) (XSize/4)),((uint8_t) (YSize/4)), ((uint8_t) (YSize/5)), // (1) ((uint8_t) (XSize/4)), YSize-((uint8_t) (YSize/4))-((uint8_t) (YSize/5)), ((uint8_t) (YSize/5)), XSize-((uint8_t) (XSize/4)),YSize-((uint8_t) (YSize/4))-((uint8_t) (YSize/5)), ((uint8_t) (YSize/5)), // (2) 0, // map 7 (109) 2, 0, YSize/2, XSize/4, XSize-XSize/4, YSize/2, XSize/4, 0, 2, XSize/2-XSize/10,1,XSize/5,YSize/5,DEADLY, XSize/2-XSize/10,YSize-1-YSize/5,XSize/5,YSize/5,DEADLY, // map 8 0, 4, #if YSize>=12 XSize/6, 3, YSize-1-6, 2*XSize/6, 3, YSize-1-6, XSize-1-2*XSize/6, 3, YSize-1-6, XSize-1-XSize/6, 3, YSize-1-6, #else XSize/6, 3, 2, 2*XSize/6, 3, 2, XSize-1-2*XSize/6, 3, 2, XSize-1-XSize/6, 3, 2, #endif 0, // map 9 (143) 0, 0, #if YSize<12 4, 2,2,XSize/4,1,WALL, 2,YSize-2-YSize/4,XSize/4,1,WALL, XSize-2-XSize/4,YSize-2-YSize/4,XSize/4,1,WALL, XSize-2-XSize/4,2,XSize/4,1,WALL, #elif YSize<20 4, 2,2,XSize/4,YSize/4,WALL, 2,YSize-2-YSize/4,XSize/4,YSize/4,WALL, XSize-2-XSize/4,YSize-2-YSize/4,XSize/4,YSize/4,WALL, XSize-2-XSize/4,2,XSize/4,YSize/4,WALL, #else 4, 2,2,XSize/3,YSize/3,WALL, 2,YSize-2-YSize/3,XSize/3,YSize/3,WALL, XSize-2-XSize/3,YSize-2-YSize/3,XSize/3,YSize/3,WALL, XSize-2-XSize/3,2,XSize/3,YSize/3,WALL, #endif // map 10 2, XSize/3-1, YSize/3, XSize/2-1, XSize/3-1, 2*YSize/3, XSize/2-1, 0, 0, // map 11 #if YSize<12 2, XSize/4, YSize/2-2,2, XSize/4, YSize-3,2, 0, #else 2, XSize/4, YSize/2-2,XSize/2, XSize/4, YSize/2+2,XSize/2, 0, #endif #if YSize<20 4, 2,2,2,2,DEADLY, 2,YSize-2-2,2,2,DEADLY, XSize-4,YSize-2-2,2,2,DEADLY, XSize-4,2,2,2,DEADLY, #else 4, 2,2,XSize/5,YSize/5,DEADLY, 2,YSize-2-YSize/5,XSize/5,YSize/5,DEADLY, XSize-2-XSize/5,YSize-2-YSize/5,XSize/5,YSize/5,DEADLY, XSize-2-XSize/5,2,XSize/5,YSize/5,DEADLY, #endif // map 12(204) 0, #if YSize<16 2, XSize/5, 1, 3, 4*XSize/5, YSize-4, 3, #else 2, XSize/5, 1, YSize-YSize/5, 4*XSize/5, YSize/5, YSize-YSize/5-1, #endif 0, // map 13 (213) 1, #if YSize>=12 2,YSize/2-2,XSize-4, #else XSize/2-2,YSize/2-2,4, #endif 0, 0, // map 14 (219) #if YSize<16 4, 2, 2, 3, XSize-1-5, 2, 3, 2, YSize-3, 3, XSize-1-5, YSize-3, 3, #else 4, 0, YSize/4, XSize/4+1, 3*XSize/4, YSize/4, XSize/4, 0, 3*YSize/4, XSize/4+1, 3*XSize/4, 3*YSize/4, XSize/4, #endif 0, 0, // map 15 (234) 1, 5,YSize/2+1,XSize-10, 0, #if YSize<16 1, XSize/2-1,YSize/2+3,2,2,DEADLY, #elif YSize<20 1, XSize/2-1,YSize/2+3,3,3,DEADLY, #else 1, XSize/2-3,YSize/2+4,6,6,DEADLY, #endif // map 16 (245) 0, 2, XSize/3, YSize-1-YSize/3, YSize/3, XSize-1-XSize/3, YSize-1-YSize/3, YSize/3, 0, }; const uint8_t map_walls_index[] = { 0, // 0 3, // 1 18, // 2 27, // 3 48, // 4 67, // 5 82, // 6 109, // 7 128, // 8 143, // 9 166, // 10 175, // 11 204, // 12 213, // 13 219, // 14 234, // 15 245, // 16 }; // HORIZONTAL MINES const uint8_t horizontal_mines_on_level[] = { 2, // 0 (0) YSize/5, 4*YSize/5, 0, // 1 (3) 0, // 2 (4) 2, // 3 (5) #if YSize>10 YSize/2 - 3, YSize/2 + 3, #else 1, YSize-2, #endif 2, // 4 (8) 2, YSize-3, 3, // 5 (11) YSize/2 - 1, 2, YSize-3, 0, // 6 (15) 0, // 7 (16) 2, // 8 (17) 2, YSize-3, 1, // 9 (20) YSize/2-1, 2, // 10 (22) YSize/3 - 2, 2*YSize/3+2, 2, // 11 (25) YSize/2 - 3, YSize/2 + 3, 2, // 12 (28) 2, YSize-3, 3, // 13 (31) #if YSize>=12 YSize/2 - 5, YSize/2 + 3, YSize/2 + 6, #else 1, YSize-4, YSize-3, #endif 4, // 14 (35) YSize/2 - 2, YSize/2 + 2, YSize/2 - 4, YSize/2 + 4, 3, // 15 (40) #if YSize>=12 YSize/2 - 3, YSize/2 - 4, YSize/2 - 5, #else 1, 2, 3, #endif 3, // 16 (44) #if YSize>=12 YSize/2 - 4, YSize/2 - 5, YSize/2 - 6, #else 1, 2, 3, #endif #if !defined(REPEAT_MINES) 2, // 17 (48) YSize/2 - 3, YSize/2 + 3, 2, // 18 (51) 3, YSize - 3, 4, // 19 (54) YSize/2 - 3, YSize/2 + 3, YSize/2 - 2, YSize/2 + 2, 4, // 20 (59) 2, YSize-3, YSize/2-3, YSize/2+3, 4, // 21(64) YSize/2 - 1, YSize/2 + 1, 2, YSize-3, 2, // 22(69) 3, YSize - 3, 2, // 23 (72) YSize/2 - 3, YSize/2 + 2, 3, // 24 (75) 2, YSize-3, YSize/2 - 3, 2, // 25 (79) YSize/2+1, YSize/2-1, 4, // 26 (82) 2, YSize-3, 4, YSize-5, 4, // 27 (87) YSize/2 - 3, YSize/2-1, YSize/2+1, YSize/2 + 3, 2, // 28 (92) 2, YSize-3, 4, // 29 (95) 3, 3*YSize/5, 5, 4*YSize/5, 4, // 30 (100) YSize/2 - 2, YSize/2 + 2, YSize/2 - 4, YSize/2 + 4, 4, // 31 (105) YSize/2 - 4, YSize/2 - 5, YSize/2 - 6, YSize/2 - 7, 4, // 32 (110) YSize/2 - 5, YSize/2 - 6, YSize/2 - 7, YSize/2 - 8, #endif }; const uint8_t horizontal_mines_on_level_index[] = { 0, // 0 3, // 1 4, // 2 5, // 3 8, // 4 11, // 5 15, // 6 16, // 7 17, // 8 20, // 9 22, // 10 25, // 11 28, // 12 31, // 13 35, // 14 40, // 15 44, // 16 #if !defined(REPEAT_MINES) 48, // 17 51, // 18 54, // 19 59, // 20 64, // 21 69, // 22 72, // 23 75, // 24 79, // 25 82, // 26 87, // 27 92, // 28 95, // 29 100, // 30 105, // 31 110 // 32 #endif }; // VERTICAL MINES const uint8_t vertical_mines_on_level[] = { 1, // 0 (0) XSize/2, 1, // 1 (2) XSize/2-1, 1, // 2 (4) XSize/2-1, 0, // 3 (6) 0, // 6 -> 4(7) 0, // 4 -> 5(8) 2, // 5 -> 6(9) XSize/2, XSize/2-1, 2, // 7 (12) XSize/2+1, XSize/2-2, 1, // 8 (15) XSize/2, 2, // 9 (17) XSize/2+1, XSize/2-1, 1, // 10 (20) XSize/2-1, 0, // 11 (22) 1, // 13 (23) XSize/2+1, 2, // 13 (25) XSize/4, 3*XSize/4, 0, // 14 (28) 1, // 15 (29) XSize/2-1, 1, // 16 (31), XSize/2-1, #if !defined(REPEAT_MINES) 1, // 17 (33) XSize/2-1, 1, // 18 (35) XSize/2, 0, // 19 (37) 1, // 22 -> 20 (38) XSize/2-1, 0, // 20 -> 21 (40) 2, // 21 -> 22 (41) XSize/2, XSize/2-1, 2, // 23 (44) XSize/2+1, XSize/2-1, 1, // 24 (47) XSize/2, 2, // 25 (49) XSize/2, XSize/2-1, 1, // 26 (52) XSize/2, 0, // 27 (54) 2, // 28 (55) XSize/2+1, XSize/2-1, 2, // 29 (58) XSize/4, 3*XSize/4, 1, // 30 (61) XSize/2, 1, // 31 (63) XSize/2, 2, // 32 (65), XSize/6, XSize-1-XSize/6 #endif }; const uint8_t vertical_mines_on_level_index[] = { 0, 2, 4, 6, 7, 8, 9, 12, // 7 15, // 8 17, // 9 20, // 10 22, // 11 23, // 12 25, // 13 28, // 14 29, // 15 31, // 16 #if !defined(REPEAT_MINES) 33, // 17 35, // 18 37, // 19 38, // 20 40, // 21 41, // 22 44, // 23 47, // 24 49, // 25 52, // 26 54, // 27 55, // 28 58, // 29 61, // 30 63, // 31 65 // 32 #endif }; #endif // _LEVELS_H ================================================ FILE: src/games/snake/makefiles/Makefile.override ================================================ creativision: $(ASSETS_PATH)/8x8_chars.h $(CC65_PATH)$(MYCC65) $(INCLUDE_OPTS) -Or -Cl -t creativision -DNO_EXTRA_TITLE \ -D__NO_SCREEN_INIT -D__CREATIVISION__ -DNO_CONTROL_INSTRUCTIONS \ -D__ALT_SLEEP -DX_OFFSET=6 -DXSize=20 -DY_OFFSET=3 -DYSize=16 -DMAX_SNAKE_LENGTH=12 \ -D__VDP_MODE1_GRAPHICS -DLESS_TEXT \ -DNO_SECRET_ANIMATION -DNO_EXTRA_LIFE_ANIMATION -DNO_BONUS_ANIMATION \ -D_XL_SLOW_DOWN_FACTOR=12000 -DNO_DISPLAY_LEVEL_ANIMATION \ --config $(CFG_PATH)/cc65/creativision-16k_less_stack.cfg \ -DUSE_MEMORY_BUFFERS \ $(CROSS_LIB_PATH)/sound/cc65/creativision/creativision_sounds.c \ $(SOURCE_PATH)/memory/creativision_memory.s \ $(FULL_FILES) \ $(CROSS_LIB_PATH)/display/init_graphics/cc65/creativision/creativision_color_init_graphics.c \ -o $(BUILD_PATH)/X$(GAME_NAME)_creativision_16k.bin dd if=$(BUILD_PATH)/X$(GAME_NAME)_creativision_16k.bin bs=8k skip=1 > $(BUILD_PATH)/X$(GAME_NAME)_creativision_16k_SWAPPED.bin dd if=$(BUILD_PATH)/X$(GAME_NAME)_creativision_16k.bin bs=8k count=1 >> $(BUILD_PATH)/X$(GAME_NAME)_creativision_16k_SWAPPED.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_creativision_16k.bin ifdef USE_TOOLS gamate: $(ASSETS_PATH)/cc65_gamate_tiles.s $(TOOLS_PATH)/cc65/gamate/gamate-fixcart$(COMPILEDEXT) else gamate: $(ASSETS_PATH)/cc65_gamate_tiles.s endif $(CC65_PATH)$(MYCC65) $(INCLUDE_OPTS) -Or -Cl -t gamate --config $(CFG_PATH)/cc65/gamate_reduced_stack.cfg \ -D_XL_SLOW_DOWN_FACTOR=10000 \ -D__ALT_SLEEP \ -DXSize=17 -DX_OFFSET=1 -DY_OFFSET=1 -DNO_DISPLAY_LEVEL_ANIMATION -DYSize=16 -DMAX_SNAKE_LENGTH=12 \ -DLESS_TEXT -DUSE_MEMORY_BUFFERS -D__NO_SCREEN_COLOR_INIT \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS \ $(SOURCE_PATH)/memory/gamate_memory.s \ $(CROSS_LIB_PATH)/sound/cc65/gamate/gamate_sounds.c \ -DNO_HINTS -DNO_SECRET_ANIMATION \ -DNO_CONTROL_INSTRUCTIONS -DNO_EXTRA_TITLE -DNO_BONUS_ANIMATION \ $(FULL_FILES) \ $(ASSETS_PATH)/cc65_gamate_tiles.s \ -o $(BUILD_PATH)/X$(GAME_NAME)_gamate.bin ifdef USE_TOOLS $(TOOLS_PATH)/cc65/gamate/gamate-fixcart$(COMPILEDEXT) $(BUILD_PATH)/X$(GAME_NAME)_$@.bin endif # TODO: FIX c16_16k c16_16k: $(ASSETS_PATH)/cc65_udc_arcade_64_chars.s $(CC65_PATH)$(MYCC65) $(INCLUDE_OPTS) -Or -Cl -t c16 \ --config $(CFG_PATH)/cc65/c16-16k_GFX_64chars_stack_0x30.cfg \ -DNO_EXTRA_LIFE_ANIMATION \ -DUSE_MEMORY_BUFFERS \ -DSOUNDS \ -D__ALT_PRINT \ -D__MEMORY_MAPPED_GRAPHICS \ -D__ASSEMBL_CLEAR_SCREEN \ -D__ALT_SLEEP \ -D_XL_SLOW_DOWN_FACTOR=4000 \ -D__UDG_BASE_FACTOR=15 \ $(SOURCE_PATH)/memory/c16_memory.s \ $(CROSS_LIB_PATH)/display/init_graphics/cc65/c264/c16_linked_redefined_chars_init_graphics.c \ $(CROSS_LIB_PATH)/sound/cc65/c264/c264_sounds.c \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c \ $(FULL_FILES) \ $(ASSETS_PATH)/cc65_udc_arcade_64_chars.s \ -o $(BUILD_PATH)/X$(GAME_NAME)_$@.prg vic20_exp_8k: $(ASSETS_PATH)/cc65_udc_vic20_27_tiles.s $(CC65_PATH)$(MYCC65) $(INCLUDE_OPTS) -Or -Cl -t vic20 \ --config $(CFG_PATH)/cc65/vic20-8k_memory_mapped_GFX.cfg \ -DSOUNDS -D__ALT_SLEEP \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_VIC20_SLOWDOWN) \ -D__MEMORY_MAPPED_GRAPHICS -D__VIC20__ -D__VIC20_EXP_8K \ -DSIMPLE_STRATEGY \ \ -D__ALT_PRINT \ -DLESS_TEXT \ -D__DEFAULT_CLEAR_SCREEN \ -D__ALT_SLEEP \ -DUSE_MEMORY_BUFFERS \ $(BASIC_CROSS_LIB_FILES) $(SOURCE_PATH)/split_files/main.c \ $(SOURCE_PATH)/memory/vic20_memory.s \ --code-name CODE2 \ $(SOURCE_PATH)/split_files/game_text.c \ $(SOURCE_PATH)/split_files/variables.c \ $(SOURCE_PATH)/split_files/control_player.c \ $(SOURCE_PATH)/split_files/snake.c \ $(CROSS_LIB_PATH)/sleep/sleep_macros.c \ $(ASSETS_PATH)/cc65_udc_vic20_27_tiles.s \ $(SOURCE_PATH)/split_files/move_snake.c \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c \ $(CROSS_LIB_PATH)/display/init_graphics/cc65/vic20/vic20_init_graphics.c \ $(CROSS_LIB_PATH)/sound/cc65/vic20/vic20_sounds.c \ -o $(BUILD_PATH)/X$(GAME_NAME)_$@.prg ############################# # SC3000 # sc3000: sc3000_32k # sc3000_32k: $(ASSETS_PATH)/z88dk_xchase.asm # $(Z88DK_PATH)$(MYZ88DK) +sc3000 $(SCCZ80_OPTS) -DEXTRA_TITLE \ # $(INCLUDE_OPTS) \ # -D__SC3000__ \ # \ # -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_SC3000_SLOWDOWN) \ # -D__BIT_BANG_SOUND \ # \ # -DZ88DK_JOYSTICK \ # -D__CONIO_GRAPHICS \ # -vn -lndos -create-app -Cz--audio \ # \ # \ # -clib=default -pragma-redirect:fputc_cons=fputc_cons_generic \ # $(CROSS_LIB_PATH)/display/init_graphics/z88dk/udg/udg_init_graphics.c \ # $(ASSETS_PATH)/z88dk_xchase.asm \ # -o $(BUILD_PATH)/X$(GAME_NAME)_sc3000_32k.prg \ # $(FULL_FILES) # rm -rf $(BUILD_PATH)/X$(GAME_NAME)_sc3000_32k.prg # rm -rf $(BUILD_PATH)/X$(GAME_NAME)_sc3000_32k.tap ############################# # SG1000 sg1000: $(ASSETS_PATH)/z88dk_xchase.asm $(Z88DK_PATH)$(MYZ88DK) +sc3000 $(SCCZ80_ROM_OPTS) -subtype=rom \ $(INCLUDE_OPTS) -DEXTRA_TITLE \ -D__SC3000__ \ -DZ88DK_JOYSTICK \ -DXSize=16 -DX_OFFSET=8 -DYSize=13 -DY_OFFSET=4 \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_SC3000_SLOWDOWN) \ -D__BIT_BANG_SOUND \ \ -D__CONIO_GRAPHICS \ -vn -lndos -create-app \ \ \ -clib=default -pragma-redirect:fputc_cons=fputc_cons_generic \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/udg/udg_init_graphics.c \ $(ASSETS_PATH)/z88dk_xchase.asm \ -o $(BUILD_PATH)/X$(GAME_NAME)_sg1000.prg \ $(FULL_FILES) rm -rf $(BUILD_PATH)/X$(GAME_NAME)_sg1000.prg rm -rf $(BUILD_PATH)/X$(GAME_NAME)_sg1000_BSS.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_sg1000_DATA.bin phc25_mono: $(ASSETS_PATH)/z88dk_xchase.asm $(Z88DK_PATH)$(MYZ88DK) +phc25 $(SCCZ80_OPTS) $(INCLUDE_OPTS) \ -D__PHC25__ -pragma-define:CLIB_DISABLE_MODE2=1 -D__SCREEN_MODE=1 \ -pragma-include:$(CFG_PATH)/z88dk/zpragma_clib.inc \ -DX_OFFSET=3 \ -DY_OFFSET=2 \ -DXSize=26 \ -DYSize=20 \ -D_XL_NO_JOYSTICK -D_XL_NO_COLOR -D__NO_SCREEN_COLOR_INIT -D__CONIO_GRAPHICS $(PHC25_MONO_GAME_OPTS) -D__PSG_SOUND \ $(FULL_FILES) \ $(ASSETS_PATH)/z88dk_xchase.asm \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_PHC25_SLOWDOWN) \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/udg/udg_init_graphics.c \ $(CROSS_LIB_PATH)/sound/z88dk/psg/ay-3-8910_psg_sounds.c \ -o$(BUILD_PATH)/X$(GAME_NAME)_$@.phc -create-app ================================================ FILE: src/games/snake/memory/c16_memory.s ================================================ ; TAPBUF $0333-03F2 819-1010 Cassette tape buffer ; WRLEN $03F3-03F4 1011-1012 Length of data to be written to tape ; RDCNT $03F5-03F6 1013-1014 Length of data to be read from tape ; INPQUE $03F7-0436 1015-1078 RS-232 input queue ; ESTARL $0437-0454 1079-1108 ; ESTAKH $0455-0472 1109-1138 ; ZP candidates: $D0-$E8 .export _snake_x; _snake_x = $333 .export _snake_y; _snake_y = _snake_x + 60 .export _snake_copy_x; _snake_copy_x = _snake_y + 60 .export _snake_copy_y; _snake_copy_y = _snake_copy_x + 60 .export _extra_life_achievement; _extra_life_achievement = _snake_copy_y + 60 .export _magic_wall_achievement; _magic_wall_achievement = _extra_life_achievement + 9 .export _coin_achievement; _coin_achievement = _magic_wall_achievement + 9 .export _horizontal_mine_x; _horizontal_mine_x = _coin_achievement + 9 .export _horizontal_mine_y; _horizontal_mine_y = _horizontal_mine_x + 4 .export _horizontal_mine_direction; _horizontal_mine_direction = _horizontal_mine_y + 4 .export _horizontal_mine_transition; _horizontal_mine_transition = _horizontal_mine_direction + 4 .export _secret_passage; _secret_passage = _horizontal_mine_transition + 4 .export _extra_count; _extra_count = $100 .export _third_coin_achievement; _third_coin_achievement = _extra_count + 1 .export _fourth_coin_achievement; _fourth_coin_achievement = _third_coin_achievement + 1 .export _i; _i = _fourth_coin_achievement + 1 .export _j; _j = _i + 1 .segment "ZEROPAGE" .exportzp _snake_head_x; _snake_head_x = 43 .exportzp _snake_head_y; _snake_head_y = 44 .exportzp _speed_increase_counter; _speed_increase_counter = 45 .exportzp _spawned_apples; _spawned_apples = 46 .exportzp _remaining_apples; _remaining_apples = 47 .exportzp _level; _level = 48 .exportzp _energy; _energy = 49 .exportzp _lives; _lives = 50 .exportzp _snake_head; _snake_head = 51 .exportzp _snake_length; _snake_length = 52 .exportzp _snake_direction; _snake_direction = 53 .exportzp _apples_on_screen_count; _apples_on_screen_count = 54 .exportzp _coin_count; _coin_count = 55 .exportzp _extra_life_counter; _extra_life_counter = 56 .exportzp _active_mines; _active_mines = 57 .exportzp _horizontal_mines_on_current_level; _horizontal_mines_on_current_level = 58 .exportzp _vertical_mines_on_current_level; _vertical_mines_on_current_level = 59 .exportzp _transparent_vertical_wall_triggered; _transparent_vertical_wall_triggered = 60 .exportzp _transparent_horizontal_wall_triggered; _transparent_horizontal_wall_triggered = 61 .exportzp _secret_level_active; _secret_level_active = 62 .exportzp _secret_level_never_activated; _secret_level_never_activated = 63 .exportzp _next_level; _next_level = 64 .exportzp _transparent_vertical_wall_level_flag; _transparent_vertical_wall_level_flag = 65 .exportzp _transparent_horizontal_wall_level_flag; _transparent_horizontal_wall_level_flag = 66 .exportzp _head_tile; _head_tile = 67; .exportzp _rings; _rings = 69 .export _vertical_mine_x; _vertical_mine_x = $D0 .exportzp _vertical_mine_y; _vertical_mine_y = $D2 .exportzp _vertical_mine_direction; _vertical_mine_direction = $D4 .exportzp _vertical_mine_transition; _vertical_mine_transition = $D6 .exportzp _points; _points = $D8 .exportzp _slow_down; _slow_down = $DA .exportzp _record; _record = $DC .exportzp _level_bonus; _level_bonus = $DE ================================================ FILE: src/games/snake/memory/creativision_memory.s ================================================ .export _snake_x; _snake_x = $0100 .export _snake_y; _snake_y = _snake_x + 12 .export _snake_copy_x; _snake_copy_x = _snake_y + 12 .export _snake_copy_y; _snake_copy_y = _snake_copy_x + 12 .export _extra_life_achievement; _extra_life_achievement = _snake_copy_y + 12 .export _magic_wall_achievement; _magic_wall_achievement = _extra_life_achievement + 9 .export _coin_achievement; _coin_achievement = _magic_wall_achievement + 9 .export _horizontal_mine_x; _horizontal_mine_x = _coin_achievement + 9 .export _horizontal_mine_y; _horizontal_mine_y = _horizontal_mine_x + 4 .export _horizontal_mine_direction; _horizontal_mine_direction = _horizontal_mine_y + 4 .export _horizontal_mine_transition; _horizontal_mine_transition = _horizontal_mine_direction + 4 .export _secret_passage; _secret_passage = _horizontal_mine_transition + 4 .export _extra_count; _extra_count = _secret_passage + 32 .export _third_coin_achievement; _third_coin_achievement = _extra_count + 1 .export _fourth_coin_achievement; _fourth_coin_achievement = _third_coin_achievement + 1 .export _i; _i = _fourth_coin_achievement + 1 .export _j; _j = _i + 1 .segment "ZEROPAGE" .exportzp _snake_head_x; _snake_head_x = $E9 .exportzp _snake_head_y; _snake_head_y = $E8 .exportzp _speed_increase_counter; _speed_increase_counter = 45 .exportzp _spawned_apples; _spawned_apples = $D5 .exportzp _remaining_apples; _remaining_apples = $EE .exportzp _level; _level = $EF .exportzp _energy; _energy = $ED .exportzp _lives; _lives = 50 .exportzp _snake_head; _snake_head = $EC .exportzp _snake_length; _snake_length = $EB .exportzp _snake_direction; _snake_direction = $EA .exportzp _apples_on_screen_count; _apples_on_screen_count = 54 .exportzp _coin_count; _coin_count = $D6 .exportzp _extra_life_counter; _extra_life_counter = 56 .exportzp _active_mines; _active_mines = $E7 .exportzp _horizontal_mines_on_current_level; _horizontal_mines_on_current_level = $E6 .exportzp _vertical_mines_on_current_level; _vertical_mines_on_current_level = $E5 .exportzp _transparent_vertical_wall_triggered; _transparent_vertical_wall_triggered = $D4 .exportzp _transparent_horizontal_wall_triggered; _transparent_horizontal_wall_triggered = $D3 .exportzp _secret_level_active; _secret_level_active = 62 .exportzp _secret_level_never_activated; _secret_level_never_activated = 63 .exportzp _next_level; _next_level = 64 .exportzp _transparent_vertical_wall_level_flag; _transparent_vertical_wall_level_flag = 65 .exportzp _transparent_horizontal_wall_level_flag; _transparent_horizontal_wall_level_flag = 66 .exportzp _head_tile; _head_tile = 67; .exportzp _rings; _rings = $D7 .export _vertical_mine_x; _vertical_mine_x = $C1 .exportzp _vertical_mine_y; _vertical_mine_y = $C3 .exportzp _vertical_mine_direction; _vertical_mine_direction = $C5 .exportzp _vertical_mine_transition; _vertical_mine_transition = $C7 .exportzp _points; _points = $D8 .exportzp _slow_down; _slow_down = $DA .exportzp _record; _record = $DC .exportzp _level_bonus; _level_bonus = $DE ================================================ FILE: src/games/snake/memory/gamate_memory.s ================================================ .export _snake_x; _snake_x = $0100 .export _snake_y; _snake_y = _snake_x + 12 .export _snake_copy_x; _snake_copy_x = _snake_y + 12 .export _snake_copy_y; _snake_copy_y = _snake_copy_x + 12 .export _extra_life_achievement; _extra_life_achievement = _snake_copy_y + 12 .export _magic_wall_achievement; _magic_wall_achievement = _extra_life_achievement + 9 .export _coin_achievement; _coin_achievement = _magic_wall_achievement + 9 .export _horizontal_mine_x; _horizontal_mine_x = _coin_achievement + 9 .export _horizontal_mine_y; _horizontal_mine_y = _horizontal_mine_x + 4 .export _horizontal_mine_direction; _horizontal_mine_direction = _horizontal_mine_y + 4 .export _horizontal_mine_transition; _horizontal_mine_transition = _horizontal_mine_direction + 4 .export _secret_passage; _secret_passage = _horizontal_mine_transition + 4 .export _extra_count; _extra_count = _secret_passage + 32 .export _third_coin_achievement; _third_coin_achievement = _extra_count + 1 .export _fourth_coin_achievement; _fourth_coin_achievement = _third_coin_achievement + 1 .export _i; _i = _fourth_coin_achievement + 1 .export _j; _j = _i + 1 .segment "ZEROPAGE" .exportzp _snake_head_x; _snake_head_x = $E9 .exportzp _snake_head_y; _snake_head_y = $E8 .exportzp _speed_increase_counter; _speed_increase_counter = $B4 .exportzp _spawned_apples; _spawned_apples = $B3 .exportzp _remaining_apples; _remaining_apples = $B2 .exportzp _level; _level = $EF .exportzp _energy; _energy = $ED .exportzp _lives; _lives = $B5 .exportzp _snake_head; _snake_head = $EC .exportzp _snake_length; _snake_length = $EB .exportzp _snake_direction; _snake_direction = $EA .exportzp _apples_on_screen_count; _apples_on_screen_count = $B0 .exportzp _coin_count; _coin_count = $D6 .exportzp _extra_life_counter; _extra_life_counter = $B1 .exportzp _active_mines; _active_mines = $E7 .exportzp _horizontal_mines_on_current_level; _horizontal_mines_on_current_level = $E6 .exportzp _vertical_mines_on_current_level; _vertical_mines_on_current_level = $E5 .exportzp _transparent_vertical_wall_triggered; _transparent_vertical_wall_triggered = $D4 .exportzp _transparent_horizontal_wall_triggered; _transparent_horizontal_wall_triggered = $D3 .exportzp _secret_level_active; _secret_level_active = $B6 .exportzp _secret_level_never_activated; _secret_level_never_activated = $B7 .exportzp _next_level; _next_level = $B8 .exportzp _transparent_vertical_wall_level_flag; _transparent_vertical_wall_level_flag = $B9 .exportzp _transparent_horizontal_wall_level_flag; _transparent_horizontal_wall_level_flag = $BA .exportzp _head_tile; _head_tile = 67; .exportzp _rings; _rings = $D7 .export _vertical_mine_x; _vertical_mine_x = $C1 .exportzp _vertical_mine_y; _vertical_mine_y = $C3 .exportzp _vertical_mine_direction; _vertical_mine_direction = $C5 .exportzp _vertical_mine_transition; _vertical_mine_transition = $C7 .exportzp _points; _points = $D8 .exportzp _slow_down; _slow_down = $DA .exportzp _record; _record = $DC .exportzp _level_bonus; _level_bonus = $DE ================================================ FILE: src/games/snake/memory/vic20_memory.s ================================================ ; $334-$3FF (820-1023) ;0334-033B 820-827 ?? ;*033C-03FB 828-1019 Cassette buffer ; $200 - $276 (512-630) ;*0200-0258 512-600 Basic input buffer ;*0259-0262 601-610 Logical file table ;*0263-026C 611-620 Device # table ;*026D-0276 621-630 Secondary Address table .export _snake_x; _snake_x = $33C .export _snake_y; _snake_y = _snake_x + 40 .export _snake_copy_x; _snake_copy_x = _snake_y + 40 .export _snake_copy_y; _snake_copy_y = _snake_copy_x + 40 .export _extra_life_achievement; _extra_life_achievement = _snake_copy_y + 40 .export _magic_wall_achievement; _magic_wall_achievement = $200 .export _coin_achievement; _coin_achievement = _magic_wall_achievement + 9 .export _horizontal_mine_x; _horizontal_mine_x = _coin_achievement + 9 .export _horizontal_mine_y; _horizontal_mine_y = _horizontal_mine_x + 4 .export _horizontal_mine_direction; _horizontal_mine_direction = _horizontal_mine_y + 4 .export _horizontal_mine_transition; _horizontal_mine_transition = _horizontal_mine_direction + 4 .export _secret_passage; _secret_passage = _horizontal_mine_transition + 4 .export _extra_count; _extra_count = $100 .export _third_coin_achievement; _third_coin_achievement = _extra_count + 1 .export _fourth_coin_achievement; _fourth_coin_achievement = _third_coin_achievement + 1 .export _i; _i = _fourth_coin_achievement + 1 .export _j; _j = _i + 1 .segment "ZEROPAGE" .exportzp _snake_head_x; _snake_head_x = 43 .exportzp _snake_head_y; _snake_head_y = 44 .exportzp _speed_increase_counter; _speed_increase_counter = 45 .exportzp _spawned_apples; _spawned_apples = 46 .exportzp _remaining_apples; _remaining_apples = 47 .exportzp _level; _level = 48 .exportzp _energy; _energy = 49 .exportzp _lives; _lives = 50 .exportzp _snake_head; _snake_head = 51 .exportzp _snake_length; _snake_length = 52 .exportzp _snake_direction; _snake_direction = 53 .exportzp _apples_on_screen_count; _apples_on_screen_count = 54 .exportzp _coin_count; _coin_count = 55 .exportzp _extra_life_counter; _extra_life_counter = 56 .exportzp _active_mines; _active_mines = 57 .exportzp _horizontal_mines_on_current_level; _horizontal_mines_on_current_level = 58 .exportzp _vertical_mines_on_current_level; _vertical_mines_on_current_level = 59 .exportzp _transparent_vertical_wall_triggered; _transparent_vertical_wall_triggered = 60 .exportzp _transparent_horizontal_wall_triggered; _transparent_horizontal_wall_triggered = 61 .exportzp _secret_level_active; _secret_level_active = 62 .exportzp _secret_level_never_activated; _secret_level_never_activated = 63 .exportzp _next_level; _next_level = 64 .exportzp _transparent_vertical_wall_level_flag; _transparent_vertical_wall_level_flag = 65 .exportzp _transparent_horizontal_wall_level_flag; _transparent_horizontal_wall_level_flag = 66 .exportzp _head_tile; _head_tile = 67; .export _vertical_mine_x; _vertical_mine_x = 69 .exportzp _vertical_mine_y; _vertical_mine_y = 71 .exportzp _vertical_mine_direction; _vertical_mine_direction = 73 .exportzp _vertical_mine_transition; _vertical_mine_transition = 75 .exportzp _points; _points = 77 .exportzp _slow_down; _slow_down = 79 .exportzp _record; _record = 81 .exportzp _level_bonus; _level_bonus = 83 .exportzp _rings; _rings = 85 ================================================ FILE: src/games/snake/move_snake.h ================================================ #ifndef _MOVE_SNAKE_H #define _MOVE_SNAKE_H #include "init_images.h" #define SNAKE_UP 0 #define SNAKE_DOWN 1 #define SNAKE_LEFT 2 #define SNAKE_RIGHT 3 #define HORIZONTAL(movement) ((movement)>SNAKE_DOWN) #define VERTICAL(movement) ((movement)=WALL) #define hits_deadly_item(x,y) \ (map[x][y]==DEADLY) uint8_t move_snake(uint8_t wished_direction); #endif // _MOVE_SNAKE_H ================================================ FILE: src/games/snake/settings.h ================================================ #ifndef _SETTINGS_H #define _SETTINGS_H #define INITIAL_LEVEL 1 // #define DEBUG_LEVELS // #define DEBUG_SLOWDOWN // #define DEBUG_APPLES // #define DEBUG_ACHIEVEMENTS // #define NO_EXTRA_TITLE // #define DEBUG_FREEZE // #define NO_ACHIEVEMENTS_SCREEN // #define NO_DISPLAY_LEVEL_ANIMATION // #define DEBUG_SECRET_HOLE #define FINAL_LEVEL 32 #define INITIAL_LIVES 5U #if XSize>27 #define INITIAL_SNAKE_LENGTH (XSize/7) #else #define INITIAL_SNAKE_LENGTH (XSize/5) #endif #define EXTRA_POINTS 5U #define RING_POINTS 10U #define APPLE_POINTS 20U #define SUPER_RING_POINTS 50U #define EXTRA_LIFE_THRESHOLD 5000U #define INITIAL_APPLE_COUNT 10U #define APPLE_COUNT_INCREASE 2U #define SOME_EXTRA 10 #define MANY_EXTRA (15+(XSize)+(XSize)/2) // #if XSize<=40 // #define SPEED_INCREASE_THRESHOLD 18U // #else // #define SPEED_INCREASE_THRESHOLD 25U // #endif #if XSize<=40 #define SPEED_INCREASE_THRESHOLD 7U #else #define SPEED_INCREASE_THRESHOLD 10U #endif #define SPAWNED_APPLE_START 2U #define EXTRA_RING_SPAWN_THRESHOLD 7U // BONUS/SECRET LEVELS THRESHOLD #define MAGIC_WALL_THRESHOLD 12 #define RING_THRESHOLD ((MAGIC_WALL_THRESHOLD)+((XSize)/3)+15) #define EXTRA_1UP_THRESHOLD ((RING_THRESHOLD)+15+((XSize)/3)) #define TRANSPARENT_TRIGGER 20 #define FEW_MINES_SLOWDOWN ((_XL_SLOW_DOWN_FACTOR)/8) #define MAX_APPLES 24 // This is to accout for extra length gained by eating extra points ($) #define EXTRA_LENGTH 4 #if !defined(MAX_SNAKE_LENGTH) #define MAX_SNAKE_LENGTH ((XSize)-2+(YSize)-2-1) //((XSize/2)+((NUMBER_OF_MAPS-1)/4)+(MAX_APPLES)+((MAX_APPLES)/8)+EXTRA_LENGTH) #endif #define MAX_NUMBER_OF_HORIZONTAL_MINES 4 #define MAX_NUMBER_OF_VERTICAL_MINES 2 #define NUMBER_OF_MAPS 16 #define NUMBER_OF_STRINGS 5 #define MAX_STRING_SIZE (6+1) #define EMPTY 0 #define DEADLY 1 #define SUPER_RING 2 #define RING 3 #define EXTRA 4 #define APPLE 5 #define EXTRA_LIFE 6 #define SECRET 7 #define WALL 8 #define HORIZONTAL_WALL 9 #define VERTICAL_WALL 10 #define TRANSPARENT 11 #endif // _SETTINGS_H ================================================ FILE: src/games/snake/shapes/6x8/shape25.txt ================================================ ...... ...... ...... ..##.. .##.#. ####.# .##.#. ..##.. ================================================ FILE: src/games/snake/shapes/6x9/shape25.txt ================================================ ...... ...... ...... ...... ..##.. .##.#. ####.# .##.#. ..##.. ================================================ FILE: src/games/snake/shapes/7x8/shape25.txt ================================================ ....... ....... ....... ...##.. ..##.#. .####.# ..##.#. ...##.. ================================================ FILE: src/games/snake/shapes/8x6/shape0.txt ================================================ ..####.. .######. ##.##.## ##.##.## .######. ..####.. ================================================ FILE: src/games/snake/shapes/8x6/shape1.txt ================================================ ..####.. .##..##. ######## ######## .##..##. ..####.. ================================================ FILE: src/games/snake/shapes/8x6/shape10.txt ================================================ #.#.#.#. ........ #.#.#.#. ........ #.#.#.#. ........ ================================================ FILE: src/games/snake/shapes/8x6/shape11.txt ================================================ ........ ........ ........ ....#... ..####.. ##...#.. ================================================ FILE: src/games/snake/shapes/8x6/shape12.txt ================================================ .#.##.#. .######. .#.##.#. .######. .#.##.#. .######. ================================================ FILE: src/games/snake/shapes/8x6/shape13.txt ================================================ ######## #.#.#.#. ######## #.#.#.#. ######## ........ ================================================ FILE: src/games/snake/shapes/8x6/shape15.txt ================================================ ..#...## ..####.. ...#.... ........ ........ ........ ================================================ FILE: src/games/snake/shapes/8x6/shape17.txt ================================================ ...#.... ..#.##.. ..#...## ##...#.. ..##.#.. ....#... ================================================ FILE: src/games/snake/shapes/8x6/shape18.txt ================================================ ..####.. .##..##. ##.##.## ##.##.## .##..##. ..####.. ================================================ FILE: src/games/snake/shapes/8x6/shape2.txt ================================================ ........ ......## ....##.. ......#. ......## .......# ================================================ FILE: src/games/snake/shapes/8x6/shape25.txt ================================================ ........ ...#.... ..#.#... .###.#.. ..#.#... ...#.... ================================================ FILE: src/games/snake/shapes/8x6/shape3.txt ================================================ #....... ##...... .#...... ..##.... ##...... ........ ================================================ FILE: src/games/snake/shapes/8x6/shape4.txt ================================================ ..####.. .######. ######## ######## .######. ..####.. ================================================ FILE: src/games/snake/shapes/8x6/shape5.txt ================================================ ..##.... ....#... .######. #####.## #####.## .######. ================================================ FILE: src/games/snake/shapes/8x6/shape7.txt ================================================ #.#.#.#. ######## #.#.#.#. ######## #.#.#.#. ######## ================================================ FILE: src/games/snake/shapes/8x6/shape8.txt ================================================ ..####.. .##..##. ##....## ##....## .##..##. ..####.. ================================================ FILE: src/games/snake/shapes/8x8/shape25.txt ================================================ ........ ........ ........ ...##... ..##.#.. .####.#. ..##.#.. ...##... ================================================ FILE: src/games/snake/snake.h ================================================ #ifndef _SNAKE_H #define _SNAKE_H #include "cross_lib.h" #include "settings.h" void draw_head(void); void draw_body_part(uint8_t i); void delete_body_part(uint8_t i); void draw_snake(void); void init_snake(void); void init_map(void); #if !defined(NO_GROWTH) void snake_grows(void); #else #define snake_grows() #endif #endif // _SNAKE_H ================================================ FILE: src/games/snake/split_files/control_player.c ================================================ #include "cross_lib.h" #include "snake.h" #include "move_snake.h" #include "settings.h" #include "variables.h" uint8_t _MOVE_PLAYER(uint8_t control_input) { if(_XL_LEFT(control_input) && (snake_direction != SNAKE_RIGHT)) { return move_snake(SNAKE_LEFT); } else if(_XL_RIGHT(control_input) && (snake_direction != SNAKE_LEFT)) { return move_snake(SNAKE_RIGHT); } else if(_XL_UP(control_input) && (snake_direction != SNAKE_DOWN)) { return move_snake(SNAKE_UP); } else if(_XL_DOWN(control_input) && (snake_direction != SNAKE_UP)) { return move_snake(SNAKE_DOWN); } else { return move_snake(snake_direction); } } uint8_t MOVE_PLAYER(void) { return _MOVE_PLAYER(_XL_INPUT()); } ================================================ FILE: src/games/snake/split_files/game_text.c ================================================ #include "cross_lib.h" #include "game_text.h" #include "variables.h" #include "init_images.h" void PRINT_CENTERED_ON_ROW(uint8_t row, char *Text) { _XL_PRINT(((uint8_t) (XSize - strlen(Text))>>1), row, Text); } #if !defined(NO_DISPLAY_RINGS) void DISPLAY_RINGS(void) { _XL_DRAW(ACHIEVEMENTS_X_OFFSET+3, ACHIEVEMENTS_Y_OFFSET+3, RING_TILE, _XL_WHITE); _XL_SET_TEXT_COLOR(_XL_WHITE); _XL_PRINTD(ACHIEVEMENTS_X_OFFSET+5,ACHIEVEMENTS_Y_OFFSET+3,3,rings); } #endif #if !defined(NO_EXTRA_TITLE) const char strings[NUMBER_OF_STRINGS][MAX_STRING_SIZE] = { _XL_M _XL_i _XL_n _XL_e, _XL_E _XL_n _XL_e _XL_r _XL_g _XL_y, _XL_B _XL_o _XL_n _XL_u _XL_s, _XL_P _XL_o _XL_i _XL_n _XL_t _XL_s, _XL_A _XL_p _XL_p _XL_l _XL_e, }; #endif void show_intro_snake(void) { for(i=0;i=14 #define CONTROL_INSTRUCTIONS() #else void CONTROL_INSTRUCTIONS(void) { _XL_SET_TEXT_COLOR(_XL_WHITE); PRINT_CENTERED_ON_ROW(CONTROLS_Y, CONTROLS_STRING); _XL_WAIT_FOR_INPUT(); } #endif void DISPLAY_POINTS(void) { _XL_SET_TEXT_COLOR(_XL_WHITE); _XL_PRINTD(2,0,5,points); } void DISPLAY_REMAINING_APPLES_COUNT(void) { _XL_SET_TEXT_COLOR(_XL_WHITE); _XL_PRINTD(9,0,2,remaining_apples); } void DISPLAY_LIVES(void) { _XL_SET_TEXT_COLOR(_XL_WHITE); _XL_PRINTD(XSize-1,0,1,lives); } ================================================ FILE: src/games/snake/split_files/main.c ================================================ /* --------------------------------------------------------------------------------------- */ // // CROSS SHOOT by Fabrizio Caruso // // Fabrizio_Caruso@hotmail.com // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from // the use of this software. // Permission is granted to anyone to use this software for non-commercial applications, // subject to the following restrictions: // 1. The origin of this software must not be misrepresented; you must not // claim that you wrote the original software. If you use this software in // a product, an acknowledgment in the product documentation would be // appreciated but is not required. // 2. Altered source versions must be plainly marked as such, and must not // be misrepresented as being the original software. // 3. This notice may not be removed or altered from any source distribution. /* --------------------------------------------------------------------------------------- */ #include "cross_lib.h" #include "init_images.h" #include "snake.h" #include "move_snake.h" #include "control_player.h" #include "game_text.h" #include "levels.h" #include "settings.h" #include "variables.h" /* #define EMPTY 0 #define DEADLY 1 #define SUPER_RING 2 #define RING 3 #define EXTRA 4 #define APPLE 5 #define EXTRA_LIFE 6 #define WALL 7 #define HORIZONTAL_WALL 8 #define VERTICAL_WALL 9 #define TRANSPARENT 10 */ #if XSize<22 #define SECRET_X 3 #else #define SECRET_X 4 #endif #if !defined(NO_SECRET_ANIMATION) void display_secret_string(void) { _XL_PRINT(SECRET_X,YSize-1,_SECRET_STRING); _XL_SLOW_DOWN(_XL_SLOW_DOWN_FACTOR); } void set_secret(uint8_t *secret_ptr) { if(!(*secret_ptr)) { (*secret_ptr)=1; _XL_EXPLOSION_SOUND(); for(i=0;i<5;++i) { #if defined(_XL_NO_TEXT_COLOR) _XL_PRINT(SECRET_X,YSize-1," "); _XL_SLOW_DOWN(10); #else _XL_SET_TEXT_COLOR(_XL_YELLOW); display_secret_string(); #endif _XL_SET_TEXT_COLOR(_XL_CYAN); display_secret_string(); } } } #else void set_secret(uint8_t *secret_ptr) { if(!(*secret_ptr)) { (*secret_ptr)=1; _XL_SET_TEXT_COLOR(_XL_CYAN); _XL_PRINT(SECRET_X,YSize-1,_SECRET_STRING); _XL_SHOOT_SOUND(); } } #endif static const uint8_t images[] = { 0, MINE_TILE, SUPER_RING_TILE, RING_TILE, EXTRA_TILE, APPLE_TILE, VERTICAL_HEAD_TILE, 0, CENTRAL_BRICK_TILE, HORIZONTAL_BRICK_TILE, VERTICAL_BRICK_TILE, TRANSPARENT_BRICK_TILE, }; #if !defined(_XL_NO_COLOR) static const uint8_t image_colors[] = { 0, _XL_CYAN, _XL_CYAN, _XL_WHITE, _XL_CYAN, _XL_RED, _XL_GREEN, 0, _XL_YELLOW, _XL_YELLOW, _XL_YELLOW, _XL_YELLOW, }; #endif #define transparent_vertical_wall_level() (((level&15)==3)||((level&15)==6)||((level&15)==9)||((level&15)==14)) #define transparent_horizontal_wall_level() (((level&15)==2)||((level&15)==4)||((level&15)==7)||((level&15)== 8)||((level&15)==12)||(!level)) #define hits_coin(x,y) \ (map[x][y]==RING) #define hits_secret(x,y) \ (map[x][y]==SECRET) #define hits_super_coin(x,y) \ (map[x][y]==SUPER_RING) #define hits_apple(x,y) \ (map[x][y]==APPLE) #define hits_extra_points(x,y) \ (map[x][y]==EXTRA) #define hits_extra_life(x,y) \ (map[x][y]==EXTRA_LIFE) #define IF_POSSIBLE_INCREASE_SPEED() \ do \ { \ if(slow_down>(2*_XL_SLOW_DOWN_FACTOR/3)) \ { \ slow_down -= 1 + (_XL_SLOW_DOWN_FACTOR/16); \ } \ else \ { \ --energy; \ DISPLAY_ENERGY(); \ } \ } \ while(0) #define IF_POSSIBLE_DECREASE_SPEED() \ do \ { \ if(slow_down<_XL_SLOW_DOWN_FACTOR) \ { \ slow_down += _XL_SLOW_DOWN_FACTOR/5; \ } \ speed_increase_counter=0; \ } while(0) // TODO: Maybe only horizontal and vertical checks are necessary #define safe_around(i,j) \ (!map[i][j] && \ (map[i][(j)-1]!=DEADLY) && (map[(i)-1][j]!=DEADLY) && (map[(i)+1][j]!=DEADLY) && (map[i][(j)+1]!=DEADLY)) void spawn(uint8_t type) { _XL_PING_SOUND(); while(1) { i = (uint8_t)(_XL_RAND()%(XSize-2)+1); j = (uint8_t)(_XL_RAND()%(YSize-2)+1); if(safe_around(i,j)) { break; } } map[i][j]=type; #if !defined(_XL_NO_COLOR) _XL_DRAW(i,j,images[type],image_colors[type]); #else _XL_DRAW(i,j,images[type],0); #endif } void build_box_wall(uint8_t x, uint8_t y, uint8_t x_length, uint8_t y_length, uint8_t type) { for(i=0;i16)<<4)]; for(j=0;j<2;++j) { number_of_elements = map_walls[index]; // Number of horizontal walls if(number_of_elements) { secret_wall_index = (uint8_t) (_XL_RAND()%(number_of_elements)); for(i=1, wall_index=0;i<3*number_of_elements;i+=3,++wall_index) { x=map_walls[index+i]; y=map_walls[index+1+i]; length=map_walls[index+2+i]; if(j) { build_vertical_wall(x,y,length); } else { build_horizontal_wall(x,y,length); if(secret_wall_index==wall_index) { #if defined(DEBUG_SECRET_HOLE) { // uint8_t k = x+1+_XL_RAND()%(length-2); // map[k][y] = SECRET; // _XL_DRAW(k,y,CENTRAL_BRICK_TILE, _XL_YELLOW); uint8_t k; for(k=0;k16) { level-=16; } #endif build_horizontal_mines(level%16); build_vertical_mines(level%16); } void display_horizontal_transition_mine(uint8_t x, uint8_t y) { _XL_DRAW(x-1,y,LEFT_MINE_TILE, _XL_CYAN); _XL_DRAW(x,y,RIGHT_MINE_TILE, _XL_CYAN); } void handle_horizontal_mine(register uint8_t index) { register uint8_t x = horizontal_mine_x[index]; register uint8_t y = horizontal_mine_y[index]; if(horizontal_mine_direction[index]==MINE_LEFT) { if(!horizontal_mine_transition[index]) // transition not performed, yet { if(!map[x-1][y]) { // Do left transition display_horizontal_transition_mine(x,y); map[x-1][y]=DEADLY; ++horizontal_mine_transition[index]; } else { horizontal_mine_direction[index]=MINE_RIGHT; } } else // transition already performed { horizontal_mine_transition[index]=0; map[x][y]=EMPTY; _XL_DELETE(x,y); --horizontal_mine_x[index]; DRAW_MINE(horizontal_mine_x[index],y); } } else // direction is RIGHT { if(!horizontal_mine_transition[index]) // transition not performed, yet { if(!map[x+1][y]) { // Do right transition display_horizontal_transition_mine(x+1,y); map[x+1][y]=DEADLY; ++horizontal_mine_transition[index]; } else { horizontal_mine_direction[index]=MINE_LEFT; } } else // transition already performed { horizontal_mine_transition[index]=0; map[x][y]=EMPTY; _XL_DELETE(x,y); ++horizontal_mine_x[index]; DRAW_MINE(horizontal_mine_x[index],y); } } } void handle_horizontal_mines(void) { for(i=0;i=TRANSPARENT_VERTICAL_WALL_Y)&&(snake_head_y<=TRANSPARENT_VERTICAL_WALL_Y+TRANSPARENT_VERTICAL_WALL_LENGTH-1)); } uint8_t empty_horizontal_wall_area(void) { i = 0; while(i=TRANSPARENT_HORIZONTAL_WALL_X)&&(snake_head_x<=TRANSPARENT_HORIZONTAL_WALL_X+TRANSPARENT_HORIZONTAL_WALL_LENGTH-1)); } void handle_transparent_vertical_wall(void) { if(!transparent_vertical_wall_triggered) { if(empty_vertical_wall_area()) { _XL_TOCK_SOUND(); transparent_vertical_wall_triggered = TRANSPARENT; } else { return; } } else { transparent_vertical_wall_triggered = EMPTY; } build_box_wall(TRANSPARENT_VERTICAL_WALL_X,TRANSPARENT_VERTICAL_WALL_Y,1,TRANSPARENT_VERTICAL_WALL_LENGTH,transparent_vertical_wall_triggered); } void handle_transparent_horizontal_wall(void) { if(!transparent_horizontal_wall_triggered) { if(empty_horizontal_wall_area()) { _XL_TOCK_SOUND(); transparent_horizontal_wall_triggered = TRANSPARENT; } else { return; } } else { transparent_horizontal_wall_triggered = EMPTY; } build_box_wall(TRANSPARENT_HORIZONTAL_WALL_X,TRANSPARENT_HORIZONTAL_WALL_Y,TRANSPARENT_HORIZONTAL_WALL_LENGTH,1,transparent_horizontal_wall_triggered); } #define handle_transparent_walls() \ if(transparent_vertical_wall_level_flag) \ { \ handle_transparent_vertical_wall(); \ } \ if(transparent_horizontal_wall_level_flag) \ { \ handle_transparent_horizontal_wall(); \ } #if INITIAL_LEVEL!=1 #if INITIAL_LEVEL<8 #define initialize_remaining_apples() \ remaining_apples = INITIAL_APPLE_COUNT + level * APPLE_COUNT_INCREASE; #else #define initialize_remaining_apples() \ remaining_apples = MAX_APPLES; #endif #else #define initialize_remaining_apples() \ remaining_apples = INITIAL_APPLE_COUNT+1*APPLE_COUNT_INCREASE; #endif #define initialize_variables() \ extra_life_counter = 1; \ points = 0; \ rings = 0; \ lives = INITIAL_LIVES; \ level = INITIAL_LEVEL; \ secret_level_never_activated = 1; \ for(i=0;i<9;++i) \ { \ extra_life_achievement[i] = 0; \ coin_achievement[i] = 0; \ magic_wall_achievement[i] = 0; \ } \ for(i=0;i<32;++i) \ { \ secret_passage[i] = 0; \ } \ third_coin_achievement = 0; \ fourth_coin_achievement = 0; \ initialize_remaining_apples(); #define DISPLAY_LEVEL_SCREEN() \ _XL_CLEAR_SCREEN(); \ DISPLAY_RINGS(); \ if(!level) \ { \ _XL_SET_TEXT_COLOR(_XL_YELLOW); \ _XL_PRINT(XSize/2-4,YSize/2, _SECRET_STRING); \ } \ else if(!(level&3)) \ { \ for(i=0;i<10;++i) \ { \ build_box_wall(XSize/2-5,YSize/2,10,1,EXTRA); \ } \ } \ _XL_SET_TEXT_COLOR(_XL_WHITE); \ _XL_PRINT(XSize/2-4,YSize/2+2, _LEVEL_STRING); \ _XL_PRINTD(XSize/2-4+6,YSize/2+2,2,level); \ _XL_WAIT_FOR_INPUT(); \ DELETE_RINGS(); #define initialize_level_variables() \ energy = MAX_ENERGY; \ coin_count = 0; \ speed_increase_counter = 0; \ slow_down = _XL_SLOW_DOWN_FACTOR; \ apples_on_screen_count = 1+(remaining_apples>>3); \ spawned_apples = 0; \ transparent_vertical_wall_level_flag = transparent_vertical_wall_level(); \ transparent_vertical_wall_triggered = EMPTY; \ transparent_horizontal_wall_triggered = EMPTY; \ transparent_horizontal_wall_level_flag = transparent_horizontal_wall_level(); \ secret_level_active = 0; \ extra_count = 0 #define spawn_items_at_level_startup() \ for(i=0;i=EXTRA_RING_SPAWN_THRESHOLD) \ { \ spawn(RING); \ } \ if(!level) \ { \ spawn(RING); \ spawn(RING); \ } #define debug_transparent_walls() \ _XL_WAIT_FOR_INPUT(); \ if(transparent_horizontal_wall_level()) \ { \ build_box_wall(TRANSPARENT_HORIZONTAL_WALL_X,TRANSPARENT_HORIZONTAL_WALL_Y,TRANSPARENT_HORIZONTAL_WALL_LENGTH,1,TRANSPARENT); \ } \ if(transparent_vertical_wall_level()) \ { \ build_box_wall(TRANSPARENT_VERTICAL_WALL_X,TRANSPARENT_VERTICAL_WALL_Y,1,TRANSPARENT_VERTICAL_WALL_LENGTH,TRANSPARENT); \ } #if !defined(NO_EXTRA_LIFE_ANIMATION) void one_up(void) { uint16_t i; ++lives; DISPLAY_LIVES(); for(i=0;i<10;++i) { _XL_TOCK_SOUND(); _XL_SLOW_DOWN(32*i); _XL_DRAW(XSize-2,0,HORIZONTAL_HEAD_TILE,_XL_RED); _XL_TICK_SOUND(); _XL_SLOW_DOWN(32*i); _XL_DRAW(XSize-2,0,VERTICAL_HEAD_TILE, _XL_YELLOW); } _XL_DRAW(XSize-2,0,VERTICAL_HEAD_TILE, _XL_GREEN); } #else void one_up(void) { ++lives; DISPLAY_LIVES(); _XL_PING_SOUND(); _XL_DRAW(XSize-2,0,HORIZONTAL_HEAD_TILE,_XL_RED); _XL_SLOW_DOWN(_XL_SLOW_DOWN_FACTOR*5U); _XL_DRAW(XSize-2,0,VERTICAL_HEAD_TILE, _XL_GREEN); _XL_PING_SOUND(); } #endif #define handle_extra_life() \ if(points>extra_life_counter*EXTRA_LIFE_THRESHOLD) \ { \ ++extra_life_counter; \ one_up(); \ } #define handle_mines() \ if(active_mines) \ { \ handle_horizontal_mines(); \ handle_vertical_mines(); \ } #define handle_items_to_spawn() \ if(!(level&3)) \ { \ spawn(EXTRA); \ spawn(EXTRA); \ } \ if((!apples_on_screen_count || (_XL_RAND()&1)) && (apples_on_screen_count=2) \ { \ set_secret(&third_coin_achievement); \ spawn(SUPER_RING); \ } \ if(coin_count>=3) \ { \ set_secret(&fourth_coin_achievement); \ spawn_extra(SOME_EXTRA); \ } \ if(coin_count>=4) \ { \ if(secret_level_never_activated) \ { \ secret_level_active = 1; \ _XL_SET_TEXT_COLOR(_XL_RED); \ _XL_PRINT(OPEN_X,OPEN_Y,_XL_O _XL_P _XL_E _XL_N "00"); \ } \ } \ ++coin_count; \ } while(0) void spawn_extra(uint8_t quantity) { uint8_t i; for(i=0;i>2]); switch(level) { case 0: spawn_extra(MANY_EXTRA); break; case 4: case 20: build_magic_column(XSize/3, 1, YSize-YSize/5); build_magic_column(2*XSize/3, YSize/5, YSize-YSize/5-1); break; case 8: case 24: build_magic_column(XSize/6,3,YSize-1-6); build_magic_column(XSize-1-XSize/6, 3, YSize-1-6); break; case 12: case 28: build_magic_column(XSize/5, 1, YSize-YSize/5); build_magic_column(4*XSize/5, YSize/5, YSize-YSize/5-1); break; case 16: case 32: build_magic_column(XSize/3, YSize-1-YSize/3,YSize/3); build_magic_column(XSize-1-XSize/3, YSize-1-YSize/3, YSize/3); break; } } #define handle_extra_points_effect() \ do \ { \ snake_grows(); \ _XL_TICK_SOUND(); \ increase_points(EXTRA_POINTS); \ speed_increase_counter = 0; \ if(!(level&3)) \ { \ if(extra_count==MAGIC_WALL_THRESHOLD) \ { \ magic_wall(); \ } \ if(extra_count==RING_THRESHOLD) \ { \ set_secret(&(coin_achievement[level>>2])); \ spawn(RING); \ } \ if(extra_count==EXTRA_1UP_THRESHOLD) \ { \ if(!(extra_life_achievement[level>>2])) \ { \ spawn(EXTRA_LIFE); \ } \ } \ ++extra_count; \ } \ } while(0) #define handle_super_coin_effect() \ _XL_ZAP_SOUND(); \ increase_points(SUPER_RING_POINTS); \ slow_down = _XL_SLOW_DOWN_FACTOR + _XL_SLOW_DOWN_FACTOR/5; \ if(energy>10) \ { \ energy = MAX_ENERGY; \ } \ else \ { \ energy+= 10; \ } \ DISPLAY_ENERGY(); \ active_mines = 0; \ #define handle_apple_effect() \ --apples_on_screen_count; \ snake_grows(); \ --remaining_apples; \ DISPLAY_REMAINING_APPLES_COUNT(); \ increase_points(APPLE_POINTS); \ _XL_ZAP_SOUND(); \ IF_POSSIBLE_DECREASE_SPEED(); #define handle_extra_life_effect() \ _XL_ZAP_SOUND(); \ one_up(); \ set_secret(&extra_life_achievement[level>>2]); #define handle_collisions_with_objects() \ if(hits_coin(snake_head_x,snake_head_y)) \ { \ handle_coin_effect(); \ } \ else if(hits_extra_points(snake_head_x,snake_head_y)) \ { \ handle_extra_points_effect(); \ } \ else if(hits_super_coin(snake_head_x,snake_head_y)) \ { \ handle_super_coin_effect(); \ } \ else if(hits_apple(snake_head_x,snake_head_y)) \ { \ handle_apple_effect(); \ } \ else if(hits_extra_life(snake_head_x,snake_head_y)) \ { \ handle_extra_life_effect(); \ } \ else if(hits_secret(snake_head_x,snake_head_y)) \ { \ handle_secret_hole(); \ } #define update_snake_head() \ snake_head_x = snake_x[snake_head]; \ snake_head_y = snake_y[snake_head]; #define handle_mine_reactivation() \ if(slow_down<_XL_SLOW_DOWN_FACTOR) \ { \ active_mines = 1; \ } #define update_remaining_apples() \ remaining_apples=INITIAL_APPLE_COUNT+level*APPLE_COUNT_INCREASE; \ if(remaining_apples>MAX_APPLES) \ { \ remaining_apples = MAX_APPLES; \ } #define handle_no_energy() \ if(!energy) \ { \ _XL_SET_TEXT_COLOR(_XL_RED); \ PRINT_CENTERED_ON_ROW(YSize/2, _NO_ENERGY_STRING); \ break; \ } #if YSize>=12 #define BONUS_Y YSize/2 #else #define BONUS_Y YSize/6 #endif #define handle_level_cleared() \ _XL_SET_TEXT_COLOR(_XL_RED); \ PRINT_CENTERED_ON_ROW(BONUS_Y, _CLEARED_STRING); \ level_bonus = (uint16_t) (((uint16_t) snake_length)<<1)+(((uint16_t) energy)<<3) +(((uint16_t) coin_count)<<5) + (((uint16_t) level)<<2); \ _XL_SET_TEXT_COLOR(_XL_WHITE); \ PRINT_CENTERED_ON_ROW(BONUS_Y+2, _BONUS_STRING); \ _XL_PRINTD(XSize/2-3,BONUS_Y+4,5,level_bonus); \ rings+=coin_count; void increase_points(uint16_t value) { points+=value; DISPLAY_POINTS(); } #if !defined(NO_BONUS_ANIMATION) void get_level_bonus(uint16_t level_bonus) { uint16_t i; _XL_WAIT_FOR_INPUT(); increase_points(level_bonus%8); for(i=level_bonus%8;irecord) \ { \ record = points; \ _XL_SET_TEXT_COLOR(_XL_RED); \ _XL_PRINT(ACHIEVEMENTS_X_OFFSET+9,ACHIEVEMENTS_Y_OFFSET, _XL_R _XL_E _XL_C _XL_O _XL_R _XL_D); \ } void display_stats(void) { _XL_CLEAR_SCREEN(); _XL_SET_TEXT_COLOR(_XL_GREEN); PRINT_CENTERED_ON_ROW(ACHIEVEMENTS_Y_OFFSET-2, _XL_A _XL_C _XL_H _XL_I _XL_E _XL_V _XL_E _XL_M _XL_E _XL_N _XL_T _XL_S); _XL_SET_TEXT_COLOR(_XL_WHITE); _XL_PRINTD(ACHIEVEMENTS_X_OFFSET+3,ACHIEVEMENTS_Y_OFFSET,5,points); _XL_DRAW(ACHIEVEMENTS_X_OFFSET,ACHIEVEMENTS_Y_OFFSET,SCORE_TEXT_LEFT_TILE,_XL_GREEN); _XL_DRAW(ACHIEVEMENTS_X_OFFSET+1,ACHIEVEMENTS_Y_OFFSET,SCORE_TEXT_RIGHT_TILE, _XL_GREEN); handle_record(); DISPLAY_RINGS(); lives = 0; // re-used variable for(i=0;i<9;++i) { #if defined(DEBUG_ACHIEVEMENTS) _XL_PRINTD(2,1+i,3,extra_life_achievement[i]); _XL_PRINTD(6,1+i,3, coin_achievement[i]); _XL_PRINTD(10,1+i,3,magic_wall_achievement[i]); _XL_WAIT_FOR_INPUT(); #endif lives+=extra_life_achievement[i]+coin_achievement[i]+magic_wall_achievement[i]; } for(i=0;i<32;++i) { lives+=secret_passage[i]; #if defined(DEBUG_ACHIEVEMENTS) _XL_PRINTD(2+i,10,2,secret_passage[i]); #endif } #if defined(DEBUG_ACHIEVEMENTS) _XL_PRINTD(2,12,3,!secret_level_never_activated); _XL_PRINTD(6,1+i,3, third_coin_achievement); _XL_PRINTD(10,1+i,3,fourth_coin_achievement); #endif lives+=(!secret_level_never_activated)+third_coin_achievement+fourth_coin_achievement; _XL_SET_TEXT_COLOR(_XL_YELLOW); _XL_PRINT(ACHIEVEMENTS_X_OFFSET+2,ACHIEVEMENTS_Y_OFFSET+STAT_OFFSET+3,_SECRET_STRING _XL_S); display_achievements(ACHIEVEMENTS_Y_OFFSET+STAT_OFFSET+5,lives, 50); if(!level) { level = next_level; } --level; _XL_DRAW(ACHIEVEMENTS_X_OFFSET, ACHIEVEMENTS_Y_OFFSET+STAT_OFFSET+LEVEL_OFFSET+7,LV_TEXT_TILE,_XL_GREEN); display_achievements(ACHIEVEMENTS_Y_OFFSET+STAT_OFFSET+LEVEL_OFFSET+7,level,32); if(!secret_level_never_activated) { _XL_SET_TEXT_COLOR(_XL_RED); _XL_PRINT(ACHIEVEMENTS_X_OFFSET-1,ACHIEVEMENTS_Y_OFFSET+STAT_OFFSET+LEVEL_OFFSET+8,_SECRET_STRING _XL_SPACE _LEVEL_STRING); } } #endif #define INITIALIZE() \ uint8_t i; \ _XL_INIT_GRAPHICS(); \ _XL_INIT_INPUT(); \ _XL_INIT_SOUND(); \ record = 0; int main(void) { INITIALIZE(); while(1) { title(); initialize_variables(); while(lives && (level=16 DISPLAY_LEVEL_ANIMATION(); #else active_mines = 1; #endif build_level(); initialize_level_variables(); initialize_map(); spawn_items_at_level_startup(); _XL_WAIT_FOR_INPUT(); #if defined(DEBUG_FREEZE) spawn(SUPER_RING); #endif #if defined(DEBUG_LEVELS) debug_transparent_walls(); _XL_WAIT_FOR_INPUT(); ++level; goto debug_levels; #endif while(remaining_apples) { handle_extra_life(); _XL_SLOW_DOWN(slow_down); if(MOVE_PLAYER()) { ++speed_increase_counter; update_snake_head(); if(speed_increase_counter>SPEED_INCREASE_THRESHOLD) { handle_transparent_walls(); handle_mine_reactivation(); speed_increase_counter = 0; handle_items_to_spawn(); increase_points(1); IF_POSSIBLE_INCREASE_SPEED(); } handle_collisions_with_objects(); #if defined(DEBUG_SLOWDOWN) _XL_PRINTD(XSize-1-5,YSize-1,5,slow_down); _XL_PRINTD(XSize-1-5-6,YSize-1,5,speed_increase_counter); #endif } handle_mines(); if(hits_deadly_item(snake_head_x,snake_head_y) || !remaining_apples) { break; } handle_no_energy(); } if(remaining_apples) { handle_lost_life(); } else { handle_level_cleared(); handle_next_level(); } } if(level>FINAL_LEVEL) { handle_final_screen(); } PRINT_CENTERED_ON_ROW(YSize/2, _GAME_OVER_STRING); _XL_WAIT_FOR_INPUT(); #if !defined(NO_ACHIEVEMENTS_SCREEN) display_stats(); #endif _XL_WAIT_FOR_INPUT(); } return EXIT_SUCCESS; } ================================================ FILE: src/games/snake/split_files/move_snake.c ================================================ #include "cross_lib.h" #include "snake.h" #include "move_snake.h" #include "settings.h" #include "variables.h" #include "tiles.h" uint8_t move_snake(uint8_t wished_direction) { uint8_t candidate_x; uint8_t candidate_y; i = (snake_head+snake_length-1)%snake_length; candidate_selection: candidate_x = snake_head_x; candidate_y = snake_head_y; switch(wished_direction) { case SNAKE_RIGHT: ++candidate_x; break; case SNAKE_LEFT: --candidate_x; break; case SNAKE_UP: --candidate_y; break; case SNAKE_DOWN: ++candidate_y; break; } if(!hits_wall(candidate_x,candidate_y)) // can move { snake_direction = wished_direction; delete_body_part(i); snake_x[i] = candidate_x; snake_y[i] = candidate_y; if(HORIZONTAL(snake_direction)) { head_tile = HORIZONTAL_HEAD_TILE; } else { head_tile = VERTICAL_HEAD_TILE; } draw_body_part(snake_head); // Draw old head as body part snake_head = i; // new head uses tail index draw_head(); // draw new head return 1; } if (wished_direction != snake_direction) { wished_direction = snake_direction; goto candidate_selection; } return 0; } ================================================ FILE: src/games/snake/split_files/snake.c ================================================ #include "cross_lib.h" #include "snake.h" #include "move_snake.h" #include "settings.h" #include "variables.h" void draw_head(void) { _XL_DRAW(snake_x[snake_head],snake_y[snake_head],head_tile,_XL_GREEN); } void delete_body_part(uint8_t i) { _XL_DELETE(snake_x[i],snake_y[i]); map[snake_x[i]][snake_y[i]] = EMPTY; } void draw_body_part(uint8_t i) { _XL_DRAW(snake_x[i],snake_y[i],BODY_TILE,_XL_GREEN); map[snake_x[i]][snake_y[i]] = DEADLY; } void init_snake(void) { snake_length = INITIAL_SNAKE_LENGTH; snake_head = 0; for(i=0;i 80 (**) #define RECHARGE_POINTS 25 #define POWERUP_POINTS 30 #define FREEZE_POINTS 60 -> 100 (more than extra points) #define SECRET_ITEM_POINTS 250 -> 500 (to compensate for the loss of points due to conversion) #define POWER_UP_BONUS 25 -> 100 (*) #define LEVEL_BONUS 200 #define LIGHT_TANK_POINTS 10 #define HEAVY_TANK_1_POINTS 15 #define HEAVY_TANK_2_POINTS 25 #define HEAVY_TANK_3_POINTS 30 #define ARTILLERY_POINTS 50 // level 1: 40 = 40 + 0 -> light // level 2: 60 = 32 + 28 -> light, medium 100% // level 3: 70 = 24 + 46 -> light, medium 50%, stealth 50% // level 4: 80 = 16 + 64 -> light, medium 25%, stealth 25%, heavy 50% // level 5: 99 = 8 + 92 -> light, medium 25%, stealth 25%, heavy 25%, artillery 25% // level 6: 99 = 0 + 99 -> light, medium 0%, stealth 25%, heavy 50%, artillery 25% (medium if secret item is taken) medium = 28 + 0.5 46 + 0.25 64 + 0.25 92 = 28 + 23 + 16 + 23 = 90 -> 90 15 = 1350 stealth = 0.5 46 + 0.25 64 + 0.25 92 + 0.25 99 = 23 + 16 + 23 + 24 = 86 -> 86 25 = 2150 heavy = + 0.5 64 + 0.25 92 + 0.50 99 = 32 + 23 + 48 = 103 -> 103 30 = 3090 howitzer = + 0.25 92 + 0.25 99 = 23 + 24 = 47 -> 47 50 = 2350 ---- 8940 heavy-type tanks = 90 + 86 + 103 + 47 = 326 -> 326 / 4 = 81.5 Points from items dropped from heavy-like tanks: 81 100 + 81 100 + 81 25 + 81 30 = 20655 -> 17515 (**) Level bonus from rings: rings: 81 -> 81 25 = 2025 -> 8100 (*) Level bonus = 200 x 6 = 1200 light = 40 + 32 + 24 + 16 + 8 = 120 x 10 = 1200 Total points estimate excluding freeze, secret, final bonus, items dropped from light tanks = 34020 Max possible number of items dropped from light: 120 ----------- #define RED_FIRE_POWER_VALUE 2 #define YELLOW_FIRE_POWER_VALUE 3 #define GREEN_FIRE_POWER_VALUE 4 #define LIGHT_TANK_ENERGY 4 -> 3 (*) const uint8_t rank_energy[5] = {LIGHT_TANK_ENERGY,7,11,17,12}; // RED: Hits: 2, 4, 6, 9, 6 YELLOW: Hits: 1, 3, 4, 6, 4 GREEN: Hits: 1, 2, 3, 5, 3 YELLOW CHANGE: Hits: 2 -> 1 (*), 3, 4, 9 ,6 , 4 ================================================ FILE: src/games/stinger/docs/stinger.txt ================================================ .....##..... ....####.... ....####.... .....##..... ..########.. .#...##..#.# ###..##...#. .#.......#.# .....##..... ....####.... ....####.... .....##..... ..########.. #.#..##...#. .#...##..### #.#.......#. ............ ............ ............ ............ ..########.. .#.......#.# ###.......#. .#.......#.# ............ ............ ............ ............ ..########.. #.#.......#. .#.......### #.#.......#. ================================================ FILE: src/games/stinger/docs/stinger1.txt ================================================ .....##......... ....####........ ....####........ .....##......... ..########...... .#...##..#.#.... ###..##...#..... .#.......#.#.... ================================================ FILE: src/games/stinger/docs/stinger2.txt ================================================ .........##..... ........####.... ........####.... .........##..... ......########.. ....#.#..##...#. .....#...##..### ....#.#.......#. ================================================ FILE: src/games/stinger/images.h ================================================ #ifndef _IMAGES_H #define _IMAGES_H #include "cross_lib.h" #define LIGHT_TANK_TILE_0 _TILE_0 #define LIGHT_TANK_TILE_1 _TILE_1 #define LIGHT_TANK_TILE_2 _TILE_2 #define LIGHT_TANK_TILE_3 _TILE_3 #define LIGHT_TANK_TILE_4 _TILE_4 #define LIGHT_TANK_TILE_5 _TILE_5 #define LIGHT_TANK_TILE_6 _TILE_6 #define TANK_DEATH_TILE _TILE_7 #define POWER_UP_TILE _TILE_8 #define LOADED_STINGER_LEFT_TILE_0 _TILE_9 #define LOADED_STINGER_RIGHT_TILE_0 _TILE_10 #define LOADED_STINGER_LEFT_TILE_1 _TILE_11 #define LOADED_STINGER_RIGHT_TILE_1 _TILE_12 #define EMPTY_STINGER_LEFT_TILE_0 _TILE_13 #define EMPTY_STINGER_RIGHT_TILE_0 _TILE_10 #define EMPTY_STINGER_LEFT_TILE_1 _TILE_11 #define EMPTY_STINGER_RIGHT_TILE_1 _TILE_16 #define ROCKET_TILE_0 _TILE_17 #define ROCKET_TILE_1 _TILE_18 #define HEAVY_TANK_TILE_0 _TILE_19 #define HEAVY_TANK_TILE_1 _TILE_1 #define HEAVY_TANK_TILE_2 _TILE_22 #define HEAVY_TANK_TILE_3 _TILE_3 #define HEAVY_TANK_TILE_4 _TILE_21 #define HEAVY_TANK_TILE_5 _TILE_5 #define HEAVY_TANK_TILE_6 _TILE_20 #define BULLET_TILE _TILE_26 #define FREEZE_TILE _TILE_23 #define WALL_TILE _TILE_24 #define EXTRA_POINTS_TILE _TILE_25 #define SECRET_TILE HEAVY_TANK_TILE_0 #define MORTAR_TILE _TILE_14 #define EXPLOSION_TILE _TILE_15 #endif // _IMAGES_H ================================================ FILE: src/games/stinger/main.c ================================================ /* --------------------------------------------------------------------------------------- */ // // CROSS STINGER by Fabrizio Caruso // // Fabrizio_Caruso@hotmail.com // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from // the use of this software. // Permission is granted to anyone to use this software for non-commercial applications, // subject to the following restrictions: // 1. The origin of this software must not be misrepresented; you must not // claim that you wrote the original software. If you use this software in // a product, an acknowledgment in the product documentation would be // appreciated but is not required. // 2. Altered source versions must be plainly marked as such, and must not // be misrepresented as being the original software. // 3. This notice may not be removed or altered from any source distribution. /* --------------------------------------------------------------------------------------- */ #include "cross_lib.h" #include "images.h" // #define TRAINER 1 //#define BENCHMARK #define INITIAL_LEVEL 0 #define LAST_LEVEL 5 #define INITIAL_LIVES 3 #define MAX_LIVES 9 #if !defined(MAX_NUMBER_OF_MISSILES) #if _XL_SLOW_DOWN_FACTOR<=1 #define MAX_NUMBER_OF_MISSILES 3 #elif _XL_SLOW_DOWN_FACTOR<=30 #define MAX_NUMBER_OF_MISSILES 4 #elif _XL_SLOW_DOWN_FACTOR<=50 #define MAX_NUMBER_OF_MISSILES 5 #else #define MAX_NUMBER_OF_MISSILES 6 #endif #endif #define MAX_NUMBER_OF_EXTRA_POINTS MAX_NUMBER_OF_MISSILES #if !defined(MAX_ROCKETS_ON_SCREEN) #if _XL_SLOW_DOWN_FACTOR<=1 #define MAX_ROCKETS_ON_SCREEN 5 #elif _XL_SLOW_DOWN_FACTOR<=30 #define MAX_ROCKETS_ON_SCREEN 6 #elif _XL_SLOW_DOWN_FACTOR<=50 #define MAX_ROCKETS_ON_SCREEN 7 #else #define MAX_ROCKETS_ON_SCREEN 8 #endif #endif #if !defined(DEATH_LOOP) #if _XL_SLOW_DOWN_FACTOR<=1 #define DEATH_LOOP 1 #elif _XL_SLOW_DOWN_FACTOR<=10 #define DEATH_LOOP 2 #elif _XL_SLOW_DOWN_FACTOR<=30 #define DEATH_LOOP 3 #elif _XL_SLOW_DOWN_FACTOR<=50 #define DEATH_LOOP 4 #else #define DEATH_LOOP 5 #endif #endif #define LIGHT_TANKS_ON_FIRST_LEVEL 40 #define HEAVY_TANKS_0 0 #define HEAVY_TANKS_1 28 #define HEAVY_TANKS_2 46 #define HEAVY_TANKS_3 64 #define HEAVY_TANKS_4 91 #define HEAVY_TANKS_5 99 // #define HEAVY_TANKS_5 1 #define NEXT_EXTRA_LIFE 5000U #if YSize>10 #define STINGER_Y ((YSize)-3) #define POWER_UPS_Y ((STINGER_Y)+2) #define BOTTOM_WALL_Y ((STINGER_Y)+1) #else #define STINGER_Y ((YSize)-1) // #define POWER_UPS_Y ((STINGER_Y)) // #define BOTTOM_WALL_Y ((STINGER_Y)) #endif #define MAX_STINGER_X ((XSize)*2-3) // #define POWER_UPS_Y ((STINGER_Y)+2) // #if YSize<=10 // #define WALL_Y ((YSize)/2) // #elif YSize<=16 // #define WALL_Y ((YSize)-8) // #else // #define WALL_Y ((YSize)-6) // #endif #if YSize>=18 #define INITIAL_RESPAWN_TANK_Y (((YSize)/2)-5) #elif YSize>=16 #define INITIAL_RESPAWN_TANK_Y (((YSize)/2)-4) #elif YSize>10 #define INITIAL_RESPAWN_TANK_Y (((YSize)/2)-3) #else #define INITIAL_RESPAWN_TANK_Y (((YSize)/2)-2) #endif // #define BOTTOM_WALL_Y ((STINGER_Y)+1) #define POWER_THRESHOLD 4 #define AUTO_RECHARGE_COOL_DOWN 50 #define AUTO_ROCKET_RECAHRGE 9 #define MAX_FREEZE 1 #define LIGHT_TANK_POINTS 10 #define HEAVY_TANK_1_POINTS 15 #define HEAVY_TANK_2_POINTS 25 #define HEAVY_TANK_3_POINTS 30 #define ARTILLERY_POINTS 50 #define EXTRA_POINTS 80 #define RECHARGE_POINTS 25 #define POWERUP_POINTS 30 #define FREEZE_POINTS 100 #define SECRET_ITEM_POINTS 250U #define POWER_UP_BONUS 100 // #define LEVEL_BONUS 200 #define RED_FIRE_POWER_VALUE 2 #define YELLOW_FIRE_POWER_VALUE 3 #define GREEN_FIRE_POWER_VALUE 4 #define INITIAL_STINGER_RELOAD_LOOPS 8 #define RED_SPEED_VALUE INITIAL_STINGER_RELOAD_LOOPS #define YELLOW_SPEED_VALUE 5 #define GREEN_SPEED_VALUE 3 // #define HYPER_SPEED_VALUE 2 // #define RED_RANGE_VALUE INITIAL_ROCKET_RANGE // #define YELLOW_RANGE_VALUE ((INITIAL_ROCKET_RANGE)-2) #if YSize>10 #define MAX_RANGE_VALUE ((INITIAL_RESPAWN_TANK_Y)-1) #else #define MAX_RANGE_VALUE ((INITIAL_RESPAWN_TANK_Y)-0) #endif // #define INITIAL_ROCKET_RANGE ((INITIAL_TANK_Y)+1) #define ITEM_SPAWN_CHANCE 11000U // (2 basic hits) #define LIGHT_TANK_ENERGY 3 // Boss energy: 7 (4 basic hits), 9 (5 basic hits), 11 (6 basic hits) #define HEAVY_TANK_BASE_ENERGY 5 #define MAX_ROCKETS 99 #define HYPER_RECHARGE 40 #define ROCKET_RECHARGE 20 #define FREEZE_COUNTER_MAX 150 #define WALL_COLOR _XL_GREEN #define FREEZE_COLOR _XL_CYAN #define SECRET_COLOR _XL_GREEN #define LEFT_DIRECTION 0 #define RIGHT_DIRECTION 1 #define ACCELERATION_THRESHOLD 10 uint8_t fire_pressed; uint8_t time_counter; uint8_t level_count_down; uint8_t max_occupied_columns; uint8_t heavy_tank_counter; uint8_t rank; uint8_t direction; // uint8_t switch_counter // uint8_t acceleration; // uint8_t acceleration_counter; // Re-use variables used in intro #define switch_counter direction #define acceleration fire_pressed #define acceleration_counter time_counter #define speed_value fire_pressed #define power_value time_counter #if !defined(_XL_NO_COLOR) uint8_t wall_color; #endif #if !defined(_XL_NO_COLOR) #define set_wall_color(color) wall_color=color #else #define set_wall_color(color) #endif uint8_t extra_points_counter; const uint8_t level_color[2] = {_XL_GREEN, _XL_YELLOW}; #if XSize<=40 #define MAX_SPARSELY_OCCUPIED_COLUMNS (3*(XSize)/5) #else #define MAX_SPARSELY_OCCUPIED_COLUMNS (2*(XSize)/3) #endif #if XSize<=40 #define MAX_DENSILY_OCCUPIED_COLUMNS ((XSize-2-3)-LAST_LEVEL) #else #define MAX_DENSILY_OCCUPIED_COLUMNS ((XSize-2-6)-LAST_LEVEL) #endif #define HELP_ITEM_LEVEL_THRESHOLD 3 #define HELP_ITEM_POWER_THRESHOLD 1 #define HELP_ITEM_POWER_UPPER_THRESHOLD 15 #if XSize<64 #define HEAVY_TANKS_ON_FIRST_LEVEL (XSize) #else #define HEAVY_TANKS_ON_FIRST_LEVEL 50 #endif // level 1: 40 = 40 + 0 -> light // level 2: 60 = 32 + 28 -> light, medium 100% // level 3: 70 = 24 + 46 -> light, medium 50%, stealth 50% // level 4: 80 = 16 + 64 -> light, medium 25%, stealth 25%, heavy 50% // level 5: 99 = 8 + 92 -> light, medium 25%, stealth 25%, heavy 25%, artillery 25% // level 6: 99 = 0 + 99 -> light, medium 0%, stealth 25%, heavy 50%, artillery 25% (medium if secret item is taken) const uint8_t heavy_tanks_on_level[LAST_LEVEL+1] = {HEAVY_TANKS_0,HEAVY_TANKS_1,HEAVY_TANKS_2,HEAVY_TANKS_3,HEAVY_TANKS_4,HEAVY_TANKS_5};//99};//91,99}; //99}; #define LEVEL_2_TANK_THRESHOLD 8 #define MAX_HYPER_COUNTER 200 #if YSize>=20 #define HEIGHT_SHOOT_THRESHOLD YSize-10 #elif YSize>=16 #define HEIGHT_SHOOT_THRESHOLD YSize-9 #elif YSize>10 #define HEIGHT_SHOOT_THRESHOLD YSize-8 #else #define HEIGHT_SHOOT_THRESHOLD 3 #endif #define VERY_FAST_TANK_SHOOT_MASK 1 #define FAST_TANK_SHOOT_MASK 3 #define SLOW_TANK_SHOOT_MASK 15 #define MAX_TANK_LEVEL 3 #define INITIAL_ARTILLERY_LEVEL 3 uint8_t tank_shoot_speed_mask; uint16_t next_threshold; uint8_t main_loop_counter; uint8_t forced_tank; uint8_t forced_tank_x; uint8_t hyper_counter; uint8_t item_counter; const uint8_t tank_points[] = { LIGHT_TANK_POINTS, // Skeletons HEAVY_TANK_1_POINTS, // Ogre HEAVY_TANK_2_POINTS, // Ghosts HEAVY_TANK_3_POINTS, // Demons ARTILLERY_POINTS, }; uint8_t light_tanks_to_kill; uint8_t heavy_tanks_to_kill; // uint8_t artillery_to_kill; uint8_t lives; uint8_t level; uint8_t killed_light_tanks; uint8_t killed_heavy_tanks; uint8_t killed_artillery; uint8_t heavy_tanks_to_spawn; uint8_t light_tanks_to_spawn; uint8_t auto_recharge_counter; #if !defined(_XL_NO_COLOR) uint8_t rocket_display_color; #endif #if !defined(_XL_NO_COLOR) && !defined(_XL_NO_TEXT_COLOR) const uint8_t power_up_color[3] = {_XL_RED, _XL_YELLOW, _XL_GREEN}; #endif #if !defined(_XL_NO_COLOR) const uint8_t rocket_color[3] = {_XL_CYAN, _XL_WHITE, _XL_YELLOW }; #endif uint8_t freeze; uint8_t powerUp; uint8_t number_of_rockets_per_shot; uint8_t tank_y_array[XSize]; uint8_t tank_shape[XSize]; uint8_t tank_x; // To be used as an index to the current tank // uint8_t tank_active[XSize]; #define tank_active tank_y_array uint8_t energy[XSize]; uint8_t tank_level[XSize]; // Red hits (2): 2, 4, 6, 9, 6 // Yellow hits (3): 1, 3, 4, 6, 4 // Green hits (4): 1, 2, 3, 5, 3 const uint8_t rank_energy[5] = {LIGHT_TANK_ENERGY,7,11,17,12}; uint8_t fire_power; uint8_t freeze_locked; uint8_t secret_locked; uint8_t tank_move_speed_mask; // #if !defined(_XL_NO_UDG) const uint8_t tank_tile[7+1] = { LIGHT_TANK_TILE_0, // 0 LIGHT_TANK_TILE_0, // 1 LIGHT_TANK_TILE_1, // 2 LIGHT_TANK_TILE_2, // 3 LIGHT_TANK_TILE_3, LIGHT_TANK_TILE_4, LIGHT_TANK_TILE_5, LIGHT_TANK_TILE_6 }; const uint8_t heavy_tank_tile[7+1] = { HEAVY_TANK_TILE_0, HEAVY_TANK_TILE_0, HEAVY_TANK_TILE_1, HEAVY_TANK_TILE_2, HEAVY_TANK_TILE_3, HEAVY_TANK_TILE_4, HEAVY_TANK_TILE_5, HEAVY_TANK_TILE_6, }; // #endif const uint8_t stinger_tile[8] = { EMPTY_STINGER_LEFT_TILE_0, EMPTY_STINGER_RIGHT_TILE_0, EMPTY_STINGER_LEFT_TILE_1, EMPTY_STINGER_RIGHT_TILE_1, LOADED_STINGER_LEFT_TILE_0, LOADED_STINGER_RIGHT_TILE_0, LOADED_STINGER_LEFT_TILE_1, LOADED_STINGER_RIGHT_TILE_1, }; const uint8_t rocket_tile[2] = { ROCKET_TILE_0, ROCKET_TILE_1, }; uint8_t stinger_x; // range: 0..2*XSize-2^M uint8_t stinger_shape_tile; uint8_t stinger_color; uint8_t input; uint8_t loaded_stinger; // uint8_t active_rocket[MAX_ROCKETS_ON_SCREEN]; uint8_t rocket_shape[MAX_ROCKETS_ON_SCREEN]; uint8_t rocket_x[MAX_ROCKETS_ON_SCREEN]; uint8_t rocket_y[MAX_ROCKETS_ON_SCREEN]; uint8_t remaining_rockets; #define active_rocket rocket_y // uint8_t rocket_range; uint8_t stinger_reload_loops; uint8_t next_rocket; uint8_t rockets_on_screen; uint8_t stinger_load_counter; uint8_t alive; uint16_t score; uint16_t hiscore; struct ItemStruct { uint8_t _x; uint8_t _y; uint8_t _tile; #if !defined(_XL_NO_COLOR) uint8_t _color; #endif uint8_t _active; uint8_t _counter; void(*_effect)(void); } ; typedef struct ItemStruct Item; typedef struct ItemStruct Missile; Item rechargeItem; Item freezeItem; Item powerUpItem; Item secretItem; // #if !defined(NO_EXTRA_TITLE) #define NUMBER_OF_ITEMS 4 const uint8_t item_tile[NUMBER_OF_ITEMS][2] = { { POWER_UP_TILE, _XL_WHITE }, { ROCKET_TILE_0, _XL_YELLOW }, { EXTRA_POINTS_TILE, _XL_YELLOW }, { FREEZE_TILE, _XL_CYAN }, }; const char item_name[NUMBER_OF_ITEMS][9] = { _XL_P _XL_O _XL_W _XL_E _XL_R _XL_SPACE _XL_U _XL_P, _XL_R _XL_O _XL_C _XL_K _XL_E _XL_T _XL_S, _XL_P _XL_O _XL_I _XL_N _XL_T _XL_S, _XL_F _XL_R _XL_E _XL_E _XL_Z _XL_E, }; // #endif // #if !defined(NO_EXTRA_TITLE) const uint8_t enemy_tile[5][2] = { { LIGHT_TANK_TILE_0, _XL_WHITE }, { HEAVY_TANK_TILE_0, _XL_GREEN }, { TANK_DEATH_TILE, _XL_YELLOW }, { HEAVY_TANK_TILE_0, _XL_RED }, { MORTAR_TILE, _XL_GREEN }, }; const char enemy_name[5][9] = { "LIGHT", "MEDIUM", "STEALTH", "HEAVY", "HOWITZER", }; // #endif Missile enemyMissile[MAX_NUMBER_OF_MISSILES]; Item extraPointsItem[MAX_NUMBER_OF_EXTRA_POINTS]; // uint8_t artillery_shell_active; uint8_t artillery_shell_x; uint8_t artillery_shell_y; #define artillery_shell_active artillery_shell_y void short_sleep(void) { _XL_SLOW_DOWN(_XL_SLOW_DOWN_FACTOR); } void less_short_sleep(void) { _XL_SLOW_DOWN(3*_XL_SLOW_DOWN_FACTOR); } void one_second(void) { _XL_SLEEP(1); } void PRINT_CENTERED_ON_ROW(uint8_t row, char *Text) { _XL_PRINT(((uint8_t) (XSize - strlen(Text))>>1), row, Text); } #define PRINT_CENTERED(Text) \ PRINT_CENTERED_ON_ROW((YSize>>1), Text) void sleep_and_wait_for_input(void) { less_short_sleep(); _XL_WAIT_FOR_INPUT(); } #if XSize>=26 #define POWER_X 8 #else #define POWER_X 6 #endif #if XSize>=22 #define POWER_UP_X 10 #elif XSize>=20 #define POWER_UP_X 9 #else #define POWER_UP_X 10 #endif void display_power_up_counter(void) { _XL_SET_TEXT_COLOR(_XL_WHITE); _XL_PRINTD(POWER_UP_X+1,0,2,powerUp); } #if XSize>=28 #define TANK_COUNTER_X (POWER_UP_X+4) #define TANK_COUNTER_Y 0 #elif XSize>=26 #define TANK_COUNTER_X (POWER_X+7) #define TANK_COUNTER_Y (YSize-1) #elif XSize>=22 #define TANK_COUNTER_X (POWER_X+6) #define TANK_COUNTER_Y (YSize-1) #else #define TANK_COUNTER_X (POWER_X+5) #define TANK_COUNTER_Y (YSize-1) #endif #if XSize>=20 void display_enemy_counter(void) { _XL_SET_TEXT_COLOR(_XL_WHITE); _XL_PRINTD(TANK_COUNTER_X+1,TANK_COUNTER_Y,2,light_tanks_to_kill+heavy_tanks_to_kill); } #else #define display_enemy_counter() #endif void display_remaining_rockets(void) { #if !defined(_XL_NO_COLOR) uint8_t color; if(remaining_rockets<20) { color = _XL_RED; } else { color = _XL_WHITE; } _XL_SET_TEXT_COLOR(color); #endif _XL_PRINTD(7,0,2,remaining_rockets); } void recharge_rockets(uint8_t value) { remaining_rockets+=value; if(remaining_rockets>MAX_ROCKETS) { remaining_rockets=MAX_ROCKETS; } display_remaining_rockets(); } void display_score(void) { _XL_SET_TEXT_COLOR(_XL_WHITE); _XL_PRINTD(0,0,5,score); } #define LIVES_X (XSize-3) #if YSize<=10 #define display_lives(color) #elif !defined(_XL_NO_TEXT_COLOR) void display_lives(uint8_t color) { _XL_DRAW(LIVES_X,POWER_UPS_Y,stinger_tile[4+0+stinger_shape_tile],_XL_CYAN); _XL_DRAW(LIVES_X+1,POWER_UPS_Y,stinger_tile[1+4+stinger_shape_tile],_XL_CYAN); _XL_SET_TEXT_COLOR(color); _XL_PRINTD(LIVES_X+2,POWER_UPS_Y,1,lives); } #else #define display_lives(color) \ { \ _XL_DRAW(LIVES_X,POWER_UPS_Y,stinger_tile[4+0+stinger_shape_tile],_XL_CYAN); \ _XL_DRAW(LIVES_X+1,POWER_UPS_Y,stinger_tile[1+4+stinger_shape_tile],_XL_CYAN); \ _XL_PRINTD(LIVES_X+2,POWER_UPS_Y,1,lives); \ } #endif #if !defined(_XL_NO_COLOR) #define _extra_life_color_effect(color) display_lives(color) #else #define _extra_life_color_effect(color) #endif void display_stinger(void) { _XL_DRAW((stinger_x>>1),STINGER_Y,stinger_tile[4*loaded_stinger+0+stinger_shape_tile],stinger_color); _XL_DRAW((stinger_x>>1)+1,STINGER_Y,stinger_tile[1+4*loaded_stinger+stinger_shape_tile],stinger_color); } #if !defined(_XL_NO_COLOR) #define set_tank_color(tank_color) color=tank_color #else #define set_tank_color(tank_color) #endif void display_tank(void) { uint8_t status = tank_shape[tank_x]; uint8_t pos = tank_y_array[tank_x]; #if !defined(_XL_NO_COLOR) uint8_t color; #endif uint8_t tile0; tile0 = HEAVY_TANK_TILE_0; if(tank_level[tank_x]==1) { set_tank_color(_XL_GREEN); } else if(tank_level[tank_x]==2) { if(!freeze) { tile0 = TANK_DEATH_TILE; set_tank_color(_XL_YELLOW); } } else if(!tank_level[tank_x]) { tile0 = LIGHT_TANK_TILE_0; set_tank_color(_XL_WHITE); } else if(tank_level[tank_x]==3) { set_tank_color(_XL_RED); } else { // tile0 = MORTAR_TILE; if(tank_level[tank_x]==4) { set_tank_color(_XL_GREEN); } else { set_tank_color(_XL_RED); } } if(freeze) { set_tank_color(_XL_CYAN); } if(tank_level[tank_x]<=MAX_TANK_LEVEL) { if(!status) { _XL_DELETE(tank_x, tank_y_array[tank_x]-1); _XL_DRAW(tank_x, pos, tile0, color); } else { // #if !defined(_XL_NO_UDG) uint8_t tile1; if(!tank_level[tank_x]) { tile0 = tank_tile[status<<1]; tile1 = tank_tile[1+(status<<1)]; } else { tile0 = heavy_tank_tile[status<<1]; tile1 = heavy_tank_tile[1+(status<<1)]; } _XL_DRAW(tank_x, pos, tile0, color); _XL_DRAW(tank_x,1 + pos, tile1, color); // #else // if(!tank_level[tank_x]) // { // tile0 = LIGHT_TANK_TILE_0; // } // else // { // if((tank_y_array[tank_x])&1) // { // tile0 = HEAVY_TANK_TILE_0; // } // else // { // tile0 = HEAVY_TANK_TILE_1; // } // } // _XL_DRAW(tank_x, pos, tile0, color); // #endif } } else { _XL_DRAW(tank_x, pos, MORTAR_TILE, color); } } #define handle_extra_life() \ do \ { \ uint8_t i; \ if(score>=next_threshold) \ { \ if(lives10 PRINT_CENTERED_ON_ROW(2," "); #endif } #define RANGE_X 0 #if defined(_XL_NO_TEXT_COLOR) #if XSize<=20 #define SPEED_STRING "SPD" #define POWER_STRING "PWR" #else #define SPEED_STRING "SPEED" #define POWER_STRING "POWER" #endif #else #if XSize<=17 #define SPEED_STRING "SPD" #define POWER_STRING "PWR" #else #define SPEED_STRING "SPEED" #define POWER_STRING "POWER" #endif #endif #if XSize>=31 #define ROCKETS_X (XSize-7) #else #define ROCKETS_X (XSize-6) #endif #define SPEED_X 0 uint8_t find_inactive(Item* itemArray) { uint8_t i; for(i=0;i10 void display_power_ups(void) { uint8_t color; uint8_t i; rocket_display_color = _XL_CYAN; speed_value = 1; power_value = 1; { if(powerUp<2) // speed { speed_value = powerUp+1; } else { speed_value = 3; if(powerUp<4) { power_value = powerUp-1; } else { power_value = 3; } } } _XL_PRINT(SPEED_X,POWER_UPS_Y,SPEED_STRING); _XL_PRINTD(SPEED_X+STR_LEN,POWER_UPS_Y,1,speed_value); _XL_PRINT(POWER_X,POWER_UPS_Y,POWER_STRING); _XL_PRINTD(POWER_X+STR_LEN,POWER_UPS_Y,1,power_value); for(i=0;i<3;++i) { if(i<=number_of_rockets_per_shot-1) { color = rocket_display_color; } else { color = _XL_RED; } _XL_DRAW(ROCKETS_X+i,POWER_UPS_Y,ROCKET_TILE_0,color); } } #endif #else // NO COLOR and NO TEXT COLOR #if XSize<=20 #define STR_LEN 3 #else #define STR_LEN 5 #endif void display_power_ups(void) { uint8_t i; speed_value = 1; power_value = 1; { if(powerUp<2) // speed { speed_value = powerUp+1; } else { speed_value = 3; if(powerUp<4) { power_value = powerUp-1; } else { power_value = 3; } } } _XL_PRINT(SPEED_X,POWER_UPS_Y,SPEED_STRING); _XL_PRINTD(SPEED_X+STR_LEN,POWER_UPS_Y,1,speed_value); _XL_PRINT(POWER_X,POWER_UPS_Y,POWER_STRING); _XL_PRINTD(POWER_X+STR_LEN,POWER_UPS_Y,1,power_value); for(i=0;i<3;++i) { if(i10 #define activate_hyper() \ do \ { \ _XL_ZAP_SOUND(); \ recharge_rockets(HYPER_RECHARGE); \ hyper_counter = MAX_HYPER_COUNTER; \ stinger_color = level_color[(level+1)&1]; \ _XL_SET_TEXT_COLOR(_XL_CYAN); \ if(powerUp>5) \ { \ number_of_rockets_per_shot=3; \ PRINT_CENTERED_ON_ROW(1,"TRIPLE"); \ } \ else \ { \ number_of_rockets_per_shot=2; \ PRINT_CENTERED_ON_ROW(1,"DOUBLE"); \ } \ } while(0) #else #define activate_hyper() \ do \ { \ _XL_ZAP_SOUND(); \ recharge_rockets(HYPER_RECHARGE); \ hyper_counter = MAX_HYPER_COUNTER; \ stinger_color = level_color[(level+1)&1]; \ if(powerUp>5) \ { \ number_of_rockets_per_shot=3; \ } \ else \ { \ number_of_rockets_per_shot=2; \ } \ } while(0) #endif void power_up_effect(void) { ++powerUp; if(!(powerUp%5)) { activate_hyper(); } display_power_up_counter(); increase_score(POWERUP_POINTS); switch(powerUp) { case 1: stinger_reload_loops=YELLOW_SPEED_VALUE; break; case 2: stinger_reload_loops=GREEN_SPEED_VALUE; break; case 3: fire_power = YELLOW_FIRE_POWER_VALUE; break; case 4: fire_power = GREEN_FIRE_POWER_VALUE; break; // case 5: // break; case 17: #if !defined(_XL_NO_COLOR) powerUpItem._color = SECRET_COLOR; #endif break; case 18: secret_locked = 0; #if !defined(_XL_NO_COLOR) powerUpItem._color = _XL_WHITE; #endif break; default: break; } #if YSize>10 display_power_ups(); #endif } void extra_points_effect(void) { increase_score(EXTRA_POINTS); ++extra_points_counter; if(!(extra_points_counter&15)) { freeze_locked=0; } } void display_tanks(void) { for(tank_x=0;tank_xHEAVY_TANK_1_POINTS) { energy[tank_x]=HEAVY_TANK_1_POINTS; } } display_tanks(); secret_locked = 1; increase_score(SECRET_ITEM_POINTS); increase_score(SECRET_ITEM_POINTS); } void player_hit(void) { uint8_t i; uint8_t player_x = (stinger_x>>1)+(stinger_x&1); _XL_DRAW(player_x,STINGER_Y, EXPLOSION_TILE,_XL_RED); _XL_EXPLOSION_SOUND(); for(i=0;i<3;++i) { display_stinger(); short_sleep(); _XL_DRAW(player_x,STINGER_Y, EXPLOSION_TILE,_XL_RED); short_sleep(); } } void bullet_effect(void) { alive=0; player_hit(); } #if !defined(_XL_NO_COLOR) #define initialize_items() \ { \ uint8_t i; \ \ rechargeItem._active = 0; \ rechargeItem._tile = ROCKET_TILE_0; \ rechargeItem._color = _XL_YELLOW; \ rechargeItem._effect = recharge_effect; \ \ freezeItem._active = 0; \ freezeItem._tile = FREEZE_TILE; \ freezeItem._color = FREEZE_COLOR; \ freezeItem._effect = freeze_effect; \ \ powerUpItem._active = 0; \ powerUpItem._tile = POWER_UP_TILE; \ powerUpItem._color = _XL_WHITE; \ powerUpItem._effect = power_up_effect; \ \ secretItem._active = 0; \ secretItem._tile = SECRET_TILE; \ secretItem._color = SECRET_COLOR; \ secretItem._effect = tank_effect; \ \ for(i=0;i>1)+2,STINGER_Y); } display_stinger(); } void move_right(void) { stinger_shape_tile = 2*((++stinger_x)&1); if(!stinger_shape_tile) { _XL_DELETE((stinger_x>>1)-1,STINGER_Y); } display_stinger(); } void drop_item(register Item *item, uint8_t max_counter) { uint8_t offset; offset = tank_y_array[tank_x]+1; // _XL_TICK_SOUND(); item->_active = 1; item->_x = tank_x; if(tank_shape[tank_x]) { ++offset; } item->_y = offset; item->_counter=max_counter; } void artillery_fire(void) { _XL_DRAW(tank_x,tank_y_array[tank_x],MORTAR_TILE,_XL_WHITE); artillery_shell_y = tank_y_array[tank_x]+1; _XL_TOCK_SOUND(); // artillery_shell_active = 1; artillery_shell_x = tank_x; _XL_DRAW(tank_x,tank_y_array[tank_x],MORTAR_TILE,_XL_GREEN); } #define EXPLOSION_THRESHOLD 4U void handle_item(register Item* item) { if(item->_active) { // TODO: Necessary for GCC for TI99 if(item->_y_x,item->_y); if(main_loop_counter&1) { ++(item->_y); } #if !defined(_XL_NO_COLOR) // TODO: GCC for TI99 does not display the correct tile with item->_tile _XL_DRAW(item->_x,item->_y,item->_tile,item->_color); #else _XL_DRAW(item->_x,item->_y,item->_tile,0); #endif } else { if(item->_counter&1) { _XL_DELETE(item->_x,item->_y); } else { uint8_t item_tile; if(item->_counter_tile; } #if !defined(_XL_NO_COLOR) _XL_DRAW(item->_x,item->_y,item_tile,item->_color); #else _XL_DRAW(item->_x,item->_y,item_tile,0); #endif } // TODO: Use uint8_t player_x = (stinger_x>>1)+(stinger_x&1); // TODO: compare item_x with player_x to decide whether the player has to be redisplayed if((item->_counter>=EXPLOSION_THRESHOLD)&&(item->_x==(stinger_x>>1)+(stinger_x&1))) { item->_effect(); _XL_PING_SOUND(); item->_active=0; } --(item->_counter); if(!(item->_counter)) { item->_active=0; _XL_DELETE(item->_x,item->_y); } display_stinger(); } } } void handle_artillery_shell(void) { if(artillery_shell_active) { if(artillery_shell_y<=STINGER_Y-1) { _XL_DELETE(artillery_shell_x,artillery_shell_y); ++artillery_shell_y; #if !defined(_XL_NO_COLOR) // TODO: GCC for TI99 does not display the correct tile with item->_tile _XL_DRAW(artillery_shell_x,artillery_shell_y,BULLET_TILE,_XL_WHITE); #else _XL_DRAW(artillery_shell_x,artillery_shell_y,BULLET_TILE,0); #endif } else { uint8_t player_x = (stinger_x>>1)+(stinger_x&1); // _XL_DRAW(artillery_shell_x-1,artillery_shell_y,EXPLOSION_TILE,_XL_RED); _XL_DRAW(artillery_shell_x,artillery_shell_y,EXPLOSION_TILE,_XL_RED); // _XL_DRAW(artillery_shell_x+1,artillery_shell_y,EXPLOSION_TILE,_XL_RED); less_short_sleep(); if(artillery_shell_x==player_x) // || artillery_shell_x==player_x-1 || artillery_shell_x==player_x+1) { alive=0; player_hit(); } // _XL_DELETE(artillery_shell_x-1,artillery_shell_y); _XL_DELETE(artillery_shell_x,artillery_shell_y); artillery_shell_active = 0; // _XL_DELETE(artillery_shell_x+1,artillery_shell_y); display_stinger(); } } } #define handle_items() \ { \ uint8_t i; \ \ handle_item(&rechargeItem); \ handle_item(&freezeItem); \ handle_item(&powerUpItem); \ handle_item(&secretItem); \ \ for(i=0;i>1); } _XL_DRAW(tank_x, tank_y_array[tank_x], TANK_DEATH_TILE, _XL_WHITE); _XL_TOCK_SOUND(); less_short_sleep(); tank_shape[tank_x]=0; } void spawn_light_tank(void) { rank=0; activate_tank(); tank_level[tank_x]=0; energy[tank_x]=LIGHT_TANK_ENERGY; --light_tanks_to_spawn; } void spawn_heavy_tank(void) { if(!level) // TODO: Not necessary { return; } else if(level==1) { rank = 1; } else if(level==2) { rank = 1+(heavy_tank_counter&1); } else if(level==3) // 3 { switch(heavy_tank_counter&3) { case 0 : rank = 1; break; case 1 : rank = 2; break; default: rank = 3; } } else if(level==4) // 4 { rank = 1+(heavy_tank_counter&3); } else // 5 { switch(heavy_tank_counter&3) { case 0 : rank = 2; break; case 1 : rank = 4; break; default: rank = 3; } } ++heavy_tank_counter; activate_tank(); tank_level[tank_x]=rank; energy[tank_x]=rank_energy[rank];//HEAVY_TANK_BASE_ENERGY+rank*2; --heavy_tanks_to_spawn; } // #if !defined(NORMAL_TANK_SPEED) && !defined(SLOW_TANK_SPEED) // #if XSize>=32 // #define NORMAL_TANK_SPEED 3 // #define SLOW_TANK_SPEED 7 // #else #define NORMAL_TANK_SPEED 3 #define SLOW_TANK_SPEED 7 // #endif // #endif #define FEW_TANKS 5 // #define MANY_TANKS 60 // #define FASTER_TANK_MOVE_LEVEL_THRESHOLD 1 void update_tank_move_speed_mask(void) { if(!powerUp || (light_tanks_to_kill+heavy_tanks_to_kill<=FEW_TANKS)) { tank_move_speed_mask=SLOW_TANK_SPEED; } else { tank_move_speed_mask=NORMAL_TANK_SPEED; } // _XL_PRINTD(0,YSize-1,1,tank_move_speed_mask); } #if YSize>10 void display_wall(uint8_t y) { uint8_t i; for(i=0; i=HELP_ITEM_LEVEL_THRESHOLD)&&(powerUp<=HELP_ITEM_POWER_THRESHOLD))) { item_counter&=1; } if(!item_counter) { if(!rechargeItem._active) { drop_item(&rechargeItem,RECHARGE_COOL_DOWN); } } else if(item_counter==1) { if(!powerUpItem._active) { drop_item(&powerUpItem,POWER_UP_COOL_DOWN); } } else if((!freeze_locked)&&(!freeze)) { if(!freezeItem._active) { drop_item(&freezeItem,FREEZE_COOL_DOWN); } } else if(!secret_locked && !secretItem._active) { drop_item(&secretItem,SECRET_COOL_DOWN); } else { uint8_t index; index = find_inactive(extraPointsItem); if(index!=MAX_NUMBER_OF_EXTRA_POINTS) { drop_item(&extraPointsItem[index],EXTRA_POINTS_COOL_DOWN); } } } } // void handle_tank_shoot_speed_mask(void) // TODO: Necessary?? // { // if(heavy_tanks_to_kill10 display_wall(BOTTOM_WALL_Y); #endif display_stinger(); if(!tank_level[tank_x]) { ++killed_light_tanks; --light_tanks_to_kill; } else //if(tank_level[tank_x]<=MAX_TANK_LEVEL) { ++killed_heavy_tanks; --heavy_tanks_to_kill; } if(tank_x==forced_tank_x) { forced_tank = 0; } if(y_pos=MAX_RANGE_VALUE) { #if !defined(_XL_NO_COLOR) _XL_DRAW(rocket_x[i],rocket_y[i],rocket_shape[i],rocket_display_color); #else _XL_DRAW(rocket_x[i],rocket_y[i],rocket_shape[i],0); #endif } } } } } void decrease_energy(void) { if(energy[tank_x]<=fire_power) { energy[tank_x]=0; } else { energy[tank_x]-=fire_power; } } void push_tank(void) { if(!tank_shape[tank_x]) { --tank_y_array[tank_x]; tank_shape[tank_x]=3; } else { --tank_shape[tank_x]; _XL_DELETE(tank_x,tank_y_array[tank_x]+1); } } void push_display_tank(void) { push_tank(); display_tank(); } #define not_stealth() freeze || (tank_level[tank_x]!=2) || tank_shape[tank_x] void handle_tank_collisions(void) { uint8_t i; for(i=0;i=rocket_y[i]-1 && tank_y_array[tank_x]<= rocket_y[i]+1) { if(not_stealth()) { --rockets_on_screen; _XL_DELETE(rocket_x[i],rocket_y[i]); active_rocket[i]=0; decrease_energy(); if(energy[tank_x]) { display_red_tank(); short_sleep(); _XL_TOCK_SOUND(); if(tank_level[tank_x]<=MAX_TANK_LEVEL) { // push_tank(); // display_tank(); push_display_tank(); // #if defined(_XL_NO_UDG) // _XL_DELETE(tank_x,tank_y_array[tank_x]+1); // #endif } else { display_tank(); } } else { tank_dies(); increase_score(tank_points[tank_level[tank_x]]); respawn(); } } else { display_tank(); } } } } } } // uint8_t tank_hit(void) // { // uint8_t i; // for(i=0;i=rocket_y[i]-1 && tank_y_array[tank_x]<=rocket_y[i]+1) // { // if(freeze || (tank_level[tank_x]!=2) || tank_shape[tank_x]) // { // active_rocket[i]=0; // --rockets_on_screen; // _XL_DELETE(rocket_x[i],rocket_y[i]); // } // else // rockets goes through ghost !free (non-frozen) && tank_level==2 (i.e., ghost tank) && !tank_shape (i.e. invincible shape) // { // display_tank(); // display invincible ghost tank // return 0; // two rockets cannot be at the same place // } // } // } // return 0; // } // void handle_tank_collisions(void) // { // for(tank_x=0;tank_x>1)+(stinger_x&1)-1U+ (uint8_t)(_XL_RAND()%3); if(tank_active[tank_x]) { if(tank_level[tank_x]<=MAX_TANK_LEVEL) { if(tank_y_array[tank_x]MAX_TANK_LEVEL) { // _XL_PRINT(0,YSize-2,"HOWITZER"); return; } // else // { // _XL_PRINT(0,YSize-2,"TANK "); // } if (((tank_level[tank_x]==2)&&(tank_shape[tank_x]&1))&&(tank_y_array[tank_x]!=STINGER_Y-1)) { forced_tank = 0; } else if((tank_y_array[tank_x]>=HEIGHT_SHOOT_THRESHOLD) || (_XL_RAND()&FORCED_TANK_MASK)) { forced_tank = 1; forced_tank_x = tank_x; } else { forced_tank = 0; } move_display_tank(); if(tank_y_array[tank_x]==STINGER_Y) { alive = 0; display_red_tank(); } } #define handle_stinger_load() \ do \ { \ if(!loaded_stinger && rockets_on_screen>1)+(stinger_x&1); for(i=0;i=4) { new_rocket_x-=4; } else { continue; } } if(new_rocket_x2) { if(direction==LEFT_DIRECTION) { ++acceleration_counter; if(acceleration_counter>=ACCELERATION_THRESHOLD) { acceleration=1; } } else { acceleration_counter=0; acceleration=0; } direction = LEFT_DIRECTION; move_left(); if(stinger_x) { move_left(); } if(acceleration && stinger_x>1) { move_left(); } } else if (_XL_RIGHT(input) && stinger_x=ACCELERATION_THRESHOLD) { acceleration=1; } } else { acceleration_counter=0; acceleration=0; } direction = RIGHT_DIRECTION; move_right(); if(stinger_x1) { if(direction==LEFT_DIRECTION) { ++acceleration_counter; if(acceleration_counter>=ACCELERATION_THRESHOLD) { acceleration=1; } } else { acceleration_counter=0; acceleration=0; } direction = LEFT_DIRECTION; move_left(); if(acceleration && stinger_x>1) { move_left(); } } else if (_XL_RIGHT(input) && (stinger_x=ACCELERATION_THRESHOLD) { acceleration=1; } } else { acceleration_counter=0; acceleration=0; } direction = RIGHT_DIRECTION; move_right(); if(acceleration && (stinger_xhiscore) \ { \ hiscore=score; \ } \ score = 0; \ level = INITIAL_LEVEL; \ killed_heavy_tanks = 0; \ killed_light_tanks = 0; \ killed_artillery = 0; \ freeze = 0; \ lives = INITIAL_LIVES; \ next_threshold = NEXT_EXTRA_LIFE; \ } while(0) #if defined(_XL_NO_COLOR) #define init_rocket_display_color() #else #define init_rocket_display_color() \ rocket_display_color = _XL_CYAN; #endif #define level_initialization() \ do \ { \ level_count_down=LEVEL_COUNT_DOWN+level*32; \ extra_points_counter = 6; \ fire_power = RED_FIRE_POWER_VALUE; \ freeze = 0; \ acceleration = 0; \ acceleration_counter = 0; \ powerUp = 0; \ next_rocket = 0; \ rockets_on_screen = 0; \ stinger_load_counter = 0; \ hyper_counter = 0; \ forced_tank = 0; \ freeze_locked = 1; \ secret_locked = 1; \ loaded_stinger = 1; \ alive = 1; \ if(level>=2) \ { \ max_occupied_columns = MAX_DENSILY_OCCUPIED_COLUMNS+level; \ } \ else \ { \ max_occupied_columns = MAX_SPARSELY_OCCUPIED_COLUMNS; \ } \ stinger_reload_loops = RED_SPEED_VALUE; \ auto_recharge_counter = AUTO_RECHARGE_COOL_DOWN; \ remaining_rockets = MAX_ROCKETS; \ stinger_x = XSize; \ stinger_shape_tile = (uint8_t) 2*((stinger_x)&1); \ stinger_color = _XL_CYAN; \ number_of_rockets_per_shot = 1; \ if(level>=4) \ { \ tank_shoot_speed_mask = VERY_FAST_TANK_SHOOT_MASK; \ } \ else if(level>=2) \ { \ tank_shoot_speed_mask = FAST_TANK_SHOOT_MASK; \ } \ else \ { \ tank_shoot_speed_mask = SLOW_TANK_SHOOT_MASK; \ } \ initialize_items(); \ artillery_shell_active = 0; \ heavy_tank_counter = 0; \ _XL_CLEAR_SCREEN(); \ set_wall_color(level_color[level&1]); \ display_wall(BOTTOM_WALL_Y); \ _XL_DRAW(0,HEIGHT_SHOOT_THRESHOLD,WALL_TILE,_XL_CYAN); \ _XL_DRAW(XSize-1,HEIGHT_SHOOT_THRESHOLD,WALL_TILE,_XL_CYAN); \ init_rocket_display_color(); \ } while(0) #define tank_counter main_loop_counter void initialize_tank_at_level_restart(void) { // tank_y_array[tank_x]=INITIAL_RESPAWN_TANK_Y; ++tank_counter; display_tank(); // _XL_TOCK_SOUND(); } void reset_tanks(void) { for(tank_x=0;tank_x=21 #define CONTROLS_STRING "PRESS A KEY" #define CONTROLS_LEN 21 #elif XSize>=19 #define CONTROLS_STRING "PRESS A KEY" #define CONTROLS_LEN 19 #else #define CONTROLS_STRING "PRESS A KEY" #define CONTROLS_LEN 15 #endif #else #define CONTROLS_STRING "PRESS FIRE" #define CONTROLS_LEN 12 #define DELETE_CONTROLS " " #endif #endif // #if YSize<=23 #define CONTROLS_Y YSize-2 // #else // #define CONTROLS_Y YSize-3 // #endif #if YSize<=22 #define _HISCORE_Y 1 #else #define _HISCORE_Y 2 #endif #if XSize>=20 #define _STINGER_STRING \ "S T I N G E R" #else #define _STINGER_STRING \ "STINGER" #endif void display_cleared(void) { _XL_SET_TEXT_COLOR(_XL_CYAN); PRINT_CENTERED("C L E A R E D"); } #if !defined(_XL_NO_TEXT_COLOR) && !defined(_XL_NO_COLOR) void display_stinger_string(uint8_t color) { _XL_SET_TEXT_COLOR(color); PRINT_CENTERED_ON_ROW(YSize/3-2,_STINGER_STRING); } #if !defined(NO_EXTRA_TITLE) void display_enemies_string(uint8_t color) { _XL_SET_TEXT_COLOR(color); PRINT_CENTERED_ON_ROW(YSize/3-2, "ENEMIES"); } #endif void display_victory_string(uint8_t color) { _XL_SET_TEXT_COLOR(color); PRINT_CENTERED_ON_ROW(YSize/2,"V I C T O R Y"); } #else void _display_stinger_string(void) { PRINT_CENTERED_ON_ROW(YSize/3-2,_STINGER_STRING); } #if !defined(NO_EXTRA_TITLE) void _display_enemies_string(void) { PRINT_CENTERED_ON_ROW(YSize/3-2, "ENEMIES"); } #endif void _display_victory_string(void) { PRINT_CENTERED_ON_ROW(YSize/2,"V I C T O R Y"); } #define display_stinger_string(color) \ _display_stinger_string(); #define display_enemies_string(color) \ _display_enemies_string(); #define display_victory_string(color) \ _display_victory_string(); #endif uint8_t fire_pressed_after_time(void) { return (!time_counter) && (fire_pressed = _XL_FIRE(_XL_INPUT())); } #if !defined(NO_EXTRA_TITLE) || YSize<15 // #if YSize>=15 void control_instructions(void) { _XL_SET_TEXT_COLOR(_XL_WHITE); PRINT_CENTERED_ON_ROW(CONTROLS_Y,\ CONTROLS_STRING); } void delete_instructions(void) { PRINT_CENTERED_ON_ROW(CONTROLS_Y,\ DELETE_CONTROLS); } #else #define control_instructions() #define delete_instructions() // #endif #endif #if YSize<=10 || defined(NO_DISPLAY_ITEMS) #define display_items() #else #define display_items() \ do \ { \ uint8_t i; \ \ for(i=0;i=YSize-2) { tank_y_array[1]=2; tank_y_array[XSize-2]=2; _XL_DELETE(1,YSize-2); _XL_DELETE(XSize-2,YSize-2); } delete_instructions(); } else { control_instructions(); } // if(fire_pressed_after_time()) // { // break; // } if(time_counter) { --time_counter; } _XL_DRAW(0,i,BULLET_TILE,_XL_WHITE); _XL_DRAW(XSize-1,i,BULLET_TILE,_XL_WHITE); display_enemies_string(_XL_CYAN); // if(fire_pressed_after_time()) // { // break; // } // short_sleep(); short_sleep(); #if!defined (_XL_NO_TEXT_COLOR) display_enemies_string(_XL_RED); #endif _XL_DELETE(0,i); _XL_DELETE(XSize-1,i); } _XL_DRAW(0,YSize-2,EXPLOSION_TILE,_XL_RED); _XL_DRAW(XSize-1,YSize-2,EXPLOSION_TILE,_XL_RED); less_short_sleep(); _XL_DELETE(0,YSize-2); _XL_DELETE(XSize-1,YSize-2); ++switch_counter; } while(!fire_pressed); _XL_ZAP_SOUND(); one_second(); } #else #define mortar_intro_animation() #endif #if defined(_XL_NO_COLOR) || defined(_XL_NO_TEXT_COLOR) #define display_initial_screen() \ do \ { \ _XL_CLEAR_SCREEN(); \ \ set_wall_color(_XL_GREEN); \ display_wall(0); \ display_wall(BOTTOM_WALL_Y+1); \ \ _XL_SET_TEXT_COLOR(_XL_CYAN); \ PRINT_CENTERED_ON_ROW(_HISCORE_Y, "HISCORE"); \ \ _XL_SET_TEXT_COLOR(_XL_WHITE); \ _XL_PRINTD(XSize/2-3,_HISCORE_Y+1,5,hiscore); \ \ _XL_SET_TEXT_COLOR(_XL_WHITE); \ PRINT_CENTERED_ON_ROW(YSize/3, "FABRIZIO CARUSO"); \ \ display_items(); \ tank_intro_animation(); \ _XL_ZAP_SOUND(); \ one_second(); \ } while(0) #elif XSize>=18 #define display_initial_screen() \ do \ { \ _XL_CLEAR_SCREEN(); \ \ set_wall_color(_XL_GREEN); \ display_wall(0); \ display_wall(BOTTOM_WALL_Y+1); \ \ _XL_SET_TEXT_COLOR(_XL_CYAN); \ PRINT_CENTERED_ON_ROW(_HISCORE_Y, "HISCORE"); \ \ _XL_SET_TEXT_COLOR(_XL_WHITE); \ _XL_PRINTD(XSize/2-3,_HISCORE_Y+1,5,hiscore); \ \ _XL_SET_TEXT_COLOR(_XL_WHITE); \ PRINT_CENTERED_ON_ROW(YSize/3, "FABRIZIO CARUSO"); \ \ display_items(); \ tank_intro_animation(); \ _XL_ZAP_SOUND(); \ display_stinger_string(_XL_CYAN); \ one_second(); \ } while(0) #else #define display_initial_screen() \ do \ { \ _XL_CLEAR_SCREEN(); \ \ set_wall_color(_XL_GREEN); \ display_wall(0); \ display_wall(BOTTOM_WALL_Y+1); \ \ _XL_SET_TEXT_COLOR(_XL_CYAN); \ PRINT_CENTERED_ON_ROW(_HISCORE_Y, "HISCORE"); \ \ _XL_SET_TEXT_COLOR(_XL_WHITE); \ _XL_PRINTD(XSize/2-3,_HISCORE_Y+1,5,hiscore); \ \ _XL_SET_TEXT_COLOR(_XL_WHITE); \ PRINT_CENTERED_ON_ROW(YSize/3, "FABRIZIO"); \ PRINT_CENTERED_ON_ROW(YSize/3+1, "CARUSO"); \ \ display_items(); \ tank_intro_animation(); \ _XL_ZAP_SOUND(); \ display_stinger_string(_XL_CYAN); \ one_second(); \ } while(0) #endif #if defined(NO_TANK_INTRO) #define tank_intro_animation() #else void tank_intro_animation(void) { uint8_t i; switch_counter = 0; fire_pressed = 0; time_counter = 5; reset_tanks(); tank_active[0]=1; tank_shape[0]=0; tank_y_array[0]=2; tank_level[0]=3; tank_active[XSize-1]=1; tank_shape[XSize-1]=0; tank_y_array[XSize-1]=2; tank_level[XSize-1]=3; tank_active[1]=1; tank_shape[1]=0; tank_y_array[1]=YSize-3; tank_level[1]=1; tank_active[XSize-2]=1; tank_shape[XSize-2]=0; tank_y_array[XSize-2]=YSize-3; tank_level[XSize-2]=1; #if defined(_XL_NO_TEXT_COLOR) || defined(_XL_NO_COLOR) display_stinger_string(_XL_RED); #endif do { for(i=3;i<(YSize-5)*4;++i) { #if !defined(_XL_NO_TEXT_COLOR) && !defined(_XL_NO_COLOR) display_stinger_string(_XL_RED); #endif // if(fire_pressed_after_time()) // { // break; // } if(!(i&3)) { delete_instructions(); } else { control_instructions(); } if(time_counter) { --time_counter; } if(fire_pressed_after_time()) { // _XL_PRINT(0,YSize-3,"FIRST"); // _XL_SLEEP(1); break; } if(!(switch_counter&1)) { tank_x=0; move_display_tank(); tank_x=XSize-1; move_display_tank(); // if(fire_pressed_after_time()) // { // break; // } tank_x=1; push_display_tank(); tank_x=XSize-2; push_display_tank(); } else { tank_x=1; move_display_tank(); tank_x=XSize-2; move_display_tank(); // if(fire_pressed_after_time()) // { // break; // } tank_x=0; push_display_tank(); tank_x=XSize-1; push_display_tank(); } #if!defined (_XL_NO_TEXT_COLOR) display_stinger_string(_XL_YELLOW); #endif short_sleep(); if(fire_pressed_after_time()) { // _XL_PRINT(0,YSize-3,"SECOND"); // _XL_SLEEP(1); break; } } ++switch_counter; if(!fire_pressed) { for(i=0;i<3;++i) { _XL_DELETE(0,YSize-3-i); _XL_DELETE(XSize-1,YSize-3-i); _XL_DELETE(1,1+i); _XL_DELETE(XSize-2,1+i); } } } while(!fire_pressed); } #endif #if !defined(NO_EXTRA_TITLE) && YSize>10 void display_second_screen(void) { _XL_CLEAR_SCREEN(); set_wall_color(_XL_YELLOW); display_wall(0); display_wall(BOTTOM_WALL_Y+1); display_enemies(); mortar_intro_animation(); _XL_CLEAR_SCREEN(); \ } #else #define display_second_screen() #endif #if XSize>=31 #define HI_X ((XSize-10)) #elif XSize>=23 #define HI_X ((XSize-9)) #else #define HI_X ((XSize-8)) #endif #if XSize>=20 #define draw_tank_counter_tile() _XL_DRAW(TANK_COUNTER_X,TANK_COUNTER_Y,HEAVY_TANK_TILE_0, level_color[(level+1)&1]) #else #define draw_tank_counter_tile() #endif #if XSize>=31 #define display_stats() \ do \ { \ _XL_SET_TEXT_COLOR(_XL_WHITE); \ display_score(); \ _XL_SET_TEXT_COLOR(_XL_GREEN); \ _XL_PRINT(HI_X,0,"HI"); \ _XL_SET_TEXT_COLOR(_XL_WHITE); \ _XL_PRINTD(HI_X+2,0,5, hiscore); \ _XL_DRAW(6,0,ROCKET_TILE_1,_XL_CYAN); \ _XL_DRAW(POWER_UP_X,0,POWER_UP_TILE, _XL_WHITE); \ draw_tank_counter_tile(); \ display_remaining_rockets(); \ display_power_up_counter(); \ display_level(); \ display_lives(_XL_WHITE); \ display_power_ups(); \ display_enemy_counter(); \ } while(0) #elif XSize>=20 #define display_stats() \ do \ { \ _XL_SET_TEXT_COLOR(_XL_WHITE); \ display_score(); \ _XL_SET_TEXT_COLOR(_XL_GREEN); \ _XL_CHAR(HI_X,0,'H'); \ _XL_SET_TEXT_COLOR(_XL_WHITE); \ _XL_PRINTD(HI_X+1,0,5, hiscore); \ _XL_DRAW(6,0,ROCKET_TILE_1,_XL_CYAN); \ _XL_DRAW(POWER_UP_X,0,POWER_UP_TILE, _XL_WHITE); \ draw_tank_counter_tile(); \ display_remaining_rockets(); \ display_power_up_counter(); \ display_level(); \ display_lives(_XL_WHITE); \ display_power_ups(); \ display_enemy_counter(); \ } while(0) #else #define display_stats() \ do \ { \ _XL_SET_TEXT_COLOR(_XL_WHITE); \ display_score(); \ _XL_DRAW(6,0,ROCKET_TILE_1,_XL_CYAN); \ _XL_DRAW(POWER_UP_X,0,POWER_UP_TILE, _XL_WHITE); \ draw_tank_counter_tile(); \ display_remaining_rockets(); \ display_power_up_counter(); \ display_level(); \ display_lives(_XL_WHITE); \ display_power_ups(); \ display_enemy_counter(); \ } while(0) #endif void handle_auto_recharge(void) { if(!remaining_rockets) { _XL_SET_TEXT_COLOR(_XL_RED); #if YSize>10 PRINT_CENTERED_ON_ROW(2,"RECHARGE"); #endif if(auto_recharge_counter) { --auto_recharge_counter; } else if(!rechargeItem._active) { if(stinger_x10 && !defined(NO_DISPLAY_LEVEL_AT_START_UP) void display_level_at_start_up(void) { _XL_SET_TEXT_COLOR(_XL_CYAN); if(level==LAST_LEVEL) { _XL_PRINT(XSize/2-6, YSize/2, "FINAL LEVEL" ); } else { _XL_PRINT(XSize/2-4, YSize/2, "LEVEL " ); _XL_PRINTD(XSize/2+2,YSize/2,1,level+1); } if(levelBONUS_DROP_THRESHOLD) { uint8_t index; // if(!(level_count_down&7)) // { // _XL_SET_TEXT_COLOR(_XL_RED); // PRINT_CENTERED_ON_ROW(1,"BONUS "); // } // else if(((level_count_down&7)==1)) // { // _XL_SET_TEXT_COLOR(_XL_YELLOW); // PRINT_CENTERED_ON_ROW(1,"BONUS "); // } for(index=0;(index=2) { if((lives>2) && (!freezeItem._active)) { tank_x = 1U+(uint8_t) (_XL_RAND()%(XSize-2)); drop_item(&freezeItem,FREEZE_COOL_DOWN); } if((lives>5) && (!powerUpItem._active)) { tank_x = 1+(uint8_t) (_XL_RAND()%(XSize-2)); drop_item(&powerUpItem,POWER_UP_COOL_DOWN); } if(level==LAST_LEVEL) { if((lives>8) && (!secretItem._active) && (level_count_down $(BUILD_PATH)/X$(GAME_NAME)_creativision_16k_SWAPPED.bin dd if=$(BUILD_PATH)/X$(GAME_NAME)_creativision_16k.bin bs=8k count=1 >> $(BUILD_PATH)/X$(GAME_NAME)_creativision_16k_SWAPPED.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_creativision_16k.bin ifdef USE_TOOLS gamate: $(ASSETS_PATH)/cc65_gamate_tiles.s $(TOOLS_PATH)/cc65/gamate/gamate-fixcart$(COMPILEDEXT) else gamate: $(ASSETS_PATH)/cc65_gamate_tiles.s endif $(CC65_PATH)$(MYCC65) $(INCLUDE_OPTS) $(CC65_OPTS) -t gamate --config $(CFG_PATH)/cc65/gamate_reduced_stack.cfg \ \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_GAMATE_SLOWDOWN) \ $(GAMATE_GAME_OPTS) \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS -DXSize=18 -DX_OFFSET=1 \ -D__NO_SCREEN_COLOR_INIT \ $(FULL_FILES) \ $(ASSETS_PATH)/cc65_gamate_tiles.s \ $(CROSS_LIB_PATH)/sound/cc65/gamate/gamate_sounds.c \ -o $(BUILD_PATH)/X$(GAME_NAME)_gamate.bin ifdef USE_TOOLS $(TOOLS_PATH)/cc65/gamate/gamate-fixcart$(COMPILEDEXT) $(BUILD_PATH)/X$(GAME_NAME)_gamate.bin endif ================================================ FILE: src/games/stinger/shapes/6x8/shape0.txt ================================================ #...#. .###.. #####. .#.#.. ##.##. .###.. .#.#.. ..#... ================================================ FILE: src/games/stinger/shapes/6x8/shape1.txt ================================================ ...... ...... #...#. .###.. #####. .#.#.. ##.##. .###.. ================================================ FILE: src/games/stinger/shapes/6x8/shape10.txt ================================================ ...... ...... ...... ...... ...... #.#... .#.... #.#... ================================================ FILE: src/games/stinger/shapes/6x8/shape11.txt ================================================ ...... ...... ...... ...... .....# ...#.# ....#. ...#.# ================================================ FILE: src/games/stinger/shapes/6x8/shape12.txt ================================================ .#.... ###... ###... .#.... ####.. .#..#. .#.### ....#. ================================================ FILE: src/games/stinger/shapes/6x8/shape13.txt ================================================ ...... ...... ...... ...... ..#### .#.... ###... .#.... ================================================ FILE: src/games/stinger/shapes/6x8/shape14.txt ================================================ #...#. .###.. #...#. #.#.#. .###.. #.#.#. ..#... ..#... ================================================ FILE: src/games/stinger/shapes/6x8/shape15.txt ================================================ ...... ...... ...... ..#... #...#. ..#... .#.#.. ..#... ================================================ FILE: src/games/stinger/shapes/6x8/shape16.txt ================================================ ...... ...... ...... ...... ####.. ....#. ...### ....#. ================================================ FILE: src/games/stinger/shapes/6x8/shape17.txt ================================================ ....#. ...### ...### ....#. ....#. ....#. ...... ...... ================================================ FILE: src/games/stinger/shapes/6x8/shape18.txt ================================================ .#.... ###... ###... .#.... .#.... .#.... ...... ...... ================================================ FILE: src/games/stinger/shapes/6x8/shape19.txt ================================================ #...#. .###.. #####. .#.#.. ##.##. .###.. #.#.#. ..#... ================================================ FILE: src/games/stinger/shapes/6x8/shape2.txt ================================================ .#.#.. ..#... ...... ...... ...... ...... ...... ...... ================================================ FILE: src/games/stinger/shapes/6x8/shape20.txt ================================================ #####. .#.#.. ##.##. .###.. #.#.#. ..#... ...... ...... ================================================ FILE: src/games/stinger/shapes/6x8/shape21.txt ================================================ ##.##. .###.. #.#.#. ..#... ...... ...... ...... ...... ================================================ FILE: src/games/stinger/shapes/6x8/shape22.txt ================================================ #.#.#. ..#... ...... ...... ...... ...... ...... ...... ================================================ FILE: src/games/stinger/shapes/6x8/shape23.txt ================================================ ...... ..##.. .####. ###.## ####.# ###.## .####. ..##.. ================================================ FILE: src/games/stinger/shapes/6x8/shape24.txt ================================================ .###.. #####. ###### #..#.# ###### # #..# ###### ...... ================================================ FILE: src/games/stinger/shapes/6x8/shape25.txt ================================================ ...... ...... ...... ..##.. .##.#. ####.# .##.#. ..##.. ================================================ FILE: src/games/stinger/shapes/6x8/shape26.txt ================================================ ...... ...... ...... ...... ...... ..#... ..#... ..#... ================================================ FILE: src/games/stinger/shapes/6x8/shape3.txt ================================================ ...... ...... ...... ...... #...#. .###.. #####. .#.#.. ================================================ FILE: src/games/stinger/shapes/6x8/shape4.txt ================================================ ##.##. .###.. .#.#.. ..#... ...... ...... ...... ...... ================================================ FILE: src/games/stinger/shapes/6x8/shape5.txt ================================================ ...... ...... ...... ...... ...... ...... #...#. .###.. ================================================ FILE: src/games/stinger/shapes/6x8/shape6.txt ================================================ #####. .#.#.. ##.##. .###.. .#.#.. ..#... ...... ...... ================================================ FILE: src/games/stinger/shapes/6x8/shape7.txt ================================================ #...#. .###.. ...... #.#.#. ...... .###.. #.#.#. ..#... ================================================ FILE: src/games/stinger/shapes/6x8/shape8.txt ================================================ .####. ###### ##..## #....# #....# ##..## ###### .####. ================================================ FILE: src/games/stinger/shapes/6x8/shape9.txt ================================================ ....#. ...### ...### ....#. ..#### .#..#. ###.#. .#.... ================================================ FILE: src/games/stinger/shapes/6x9/shape0.txt ================================================ ...... #...#. .###.. #####. .#.#.. ##.##. .###.. .#.#.. ..#... ================================================ FILE: src/games/stinger/shapes/6x9/shape1.txt ================================================ ...... ...... ...... #...#. .###.. #####. .#.#.. ##.##. .###.. ================================================ FILE: src/games/stinger/shapes/6x9/shape10.txt ================================================ ...... ...... ...... ...... ...... ...... #.#... .#.... #.#... ================================================ FILE: src/games/stinger/shapes/6x9/shape11.txt ================================================ ...... ...... ...... ...... ...... .....# ...#.# ....#. ...#.# ================================================ FILE: src/games/stinger/shapes/6x9/shape12.txt ================================================ ...... .#.... ###... ###... .#.... ####.. .#..#. .#.### ....#. ================================================ FILE: src/games/stinger/shapes/6x9/shape13.txt ================================================ ...... ...... ...... ...... ...... ..#### .#.... ###... .#.... ================================================ FILE: src/games/stinger/shapes/6x9/shape14.txt ================================================ ...... #...#. .###.. #...#. #.#.#. .###.. #.#.#. ..#... ..#... ================================================ FILE: src/games/stinger/shapes/6x9/shape15.txt ================================================ ...... ...... ...... ...... ..#... #...#. ..#... .#.#.. ..#... ================================================ FILE: src/games/stinger/shapes/6x9/shape16.txt ================================================ ...... ...... ...... ...... ...... ####.. ....#. ...### ....#. ================================================ FILE: src/games/stinger/shapes/6x9/shape17.txt ================================================ ...... ....#. ...### ...### ....#. ....#. ....#. ...... ...... ================================================ FILE: src/games/stinger/shapes/6x9/shape18.txt ================================================ ...... .#.... ###... ###... .#.... .#.... .#.... ...... ...... ================================================ FILE: src/games/stinger/shapes/6x9/shape19.txt ================================================ ...... #...#. .###.. #####. .#.#.. ##.##. .###.. #.#.#. ..#... ================================================ FILE: src/games/stinger/shapes/6x9/shape2.txt ================================================ .#.#.. ..#... ...... ...... ...... ...... ...... ...... ...... ================================================ FILE: src/games/stinger/shapes/6x9/shape20.txt ================================================ #####. .#.#.. ##.##. .###.. #.#.#. ..#... ...... ...... ...... ================================================ FILE: src/games/stinger/shapes/6x9/shape21.txt ================================================ ##.##. .###.. #.#.#. ..#... ...... ...... ...... ...... ...... ================================================ FILE: src/games/stinger/shapes/6x9/shape22.txt ================================================ #.#.#. ..#... ...... ...... ...... ...... ...... ...... ...... ================================================ FILE: src/games/stinger/shapes/6x9/shape23.txt ================================================ ...... ...... ..##.. .####. ###.## ####.# ###.## .####. ..##.. ================================================ FILE: src/games/stinger/shapes/6x9/shape24.txt ================================================ ...... .###.. #####. ###### #..#.# ###### # #..# ###### ...... ================================================ FILE: src/games/stinger/shapes/6x9/shape25.txt ================================================ ...... ...... ...... ...... ..##.. .##.#. ####.# .##.#. ..##.. ================================================ FILE: src/games/stinger/shapes/6x9/shape26.txt ================================================ ...... ...... ...... ...... ...... ...... ..#... ..#... ..#... ================================================ FILE: src/games/stinger/shapes/6x9/shape3.txt ================================================ ...... ...... ...... ...... ...... #...#. .###.. #####. .#.#.. ================================================ FILE: src/games/stinger/shapes/6x9/shape4.txt ================================================ ##.##. .###.. .#.#.. ..#... ...... ...... ...... ...... ...... ================================================ FILE: src/games/stinger/shapes/6x9/shape5.txt ================================================ ...... ...... ...... ...... ...... ...... ...... #...#. .###.. ================================================ FILE: src/games/stinger/shapes/6x9/shape6.txt ================================================ #####. .#.#.. ##.##. .###.. .#.#.. ..#... ...... ...... ...... ================================================ FILE: src/games/stinger/shapes/6x9/shape7.txt ================================================ ...... #...#. .###.. ...... #.#.#. ...... .###.. #.#.#. ..#... ================================================ FILE: src/games/stinger/shapes/6x9/shape8.txt ================================================ ...... .####. ###### ##..## #....# #....# ##..## ###### .####. ================================================ FILE: src/games/stinger/shapes/6x9/shape9.txt ================================================ ...... ....#. ...### ...### ....#. ..#### .#..#. ###.#. .#.... ================================================ FILE: src/games/stinger/shapes/7x8/shape0.txt ================================================ ##...## #.###.# ####### #.#.#.# ###.### #.###.# #.#.#.# ...#... ================================================ FILE: src/games/stinger/shapes/7x8/shape1.txt ================================================ ....... ....... ##...## #.###.# ####### #.#.#.# ###.### #.###.# ================================================ FILE: src/games/stinger/shapes/7x8/shape10.txt ================================================ ....... ....... ....... ....... #...... #.#.... .#..... #.#.... ================================================ FILE: src/games/stinger/shapes/7x8/shape11.txt ================================================ ....... ....... ....... ....... ......# ....#.# .....#. ....#.# ================================================ FILE: src/games/stinger/shapes/7x8/shape12.txt ================================================ .#..... ###.... ###.... .#..... #####.. .#...#. .#..### .....#. ================================================ FILE: src/games/stinger/shapes/7x8/shape13.txt ================================================ ....... ....... ....... ....... ..##### .#..... ###.... .#..... ================================================ FILE: src/games/stinger/shapes/7x8/shape14.txt ================================================ ##...## #.###.# .#...#. .#.#.#. #.###.# ##.#.## ...#... ...#... ================================================ FILE: src/games/stinger/shapes/7x8/shape15.txt ================================================ ....... ....... ....... ...#... #.....# ...#... .#.#.#. ...#... ================================================ FILE: src/games/stinger/shapes/7x8/shape16.txt ================================================ ....... ....... ....... ....... #####.. .....#. ....### .....#. ================================================ FILE: src/games/stinger/shapes/7x8/shape17.txt ================================================ .....#. ....### ....### .....#. .....#. .....#. ....... ....... ================================================ FILE: src/games/stinger/shapes/7x8/shape18.txt ================================================ .#..... ###.... ###.... .#..... .#..... .#..... ....... ....... ================================================ FILE: src/games/stinger/shapes/7x8/shape19.txt ================================================ ##...## #.###.# ####### #.#.#.# ###.### #.###.# ##.#.## ...#... ================================================ FILE: src/games/stinger/shapes/7x8/shape2.txt ================================================ #.#.#.# ...#... ....... ....... ....... ....... ....... ....... ================================================ FILE: src/games/stinger/shapes/7x8/shape20.txt ================================================ ####### #.#.#.# ###.### #.###.# ##.#.## ...#... ....... ....... ================================================ FILE: src/games/stinger/shapes/7x8/shape21.txt ================================================ ###.### #.###.# ##.#.## ...#... ....... ....... ....... ....... ================================================ FILE: src/games/stinger/shapes/7x8/shape22.txt ================================================ ##.#.## ...#... ....... ....... ....... ....... ....... ....... ================================================ FILE: src/games/stinger/shapes/7x8/shape23.txt ================================================ ....... ...#... ..###.. .###.#. #####.# .###.#. ..###.. ...#... ================================================ FILE: src/games/stinger/shapes/7x8/shape24.txt ================================================ .####.. ######. ####### #....#. ####### #.#.... ####### ....... ================================================ FILE: src/games/stinger/shapes/7x8/shape25.txt ================================================ ....... ....... ....... ...##.. ..##.#. .####.# ..##.#. ...##.. ================================================ FILE: src/games/stinger/shapes/7x8/shape26.txt ================================================ ....... ....... ....... ....... ....... ...#... ...#... ...#... ================================================ FILE: src/games/stinger/shapes/7x8/shape3.txt ================================================ ....... ....... ....... ....... ##...## #.###.# ####### #.#.#.# ================================================ FILE: src/games/stinger/shapes/7x8/shape4.txt ================================================ ###.### #.###.# #.#.#.# ...#... ....... ....... ....... ....... ================================================ FILE: src/games/stinger/shapes/7x8/shape5.txt ================================================ ....... ....... ....... ....... ....... ....... ##...## #.###.# ================================================ FILE: src/games/stinger/shapes/7x8/shape6.txt ================================================ ####### #.#.#.# ###.### #.###.# #.#.#.# ...#... ....... ....... ================================================ FILE: src/games/stinger/shapes/7x8/shape7.txt ================================================ ##...## #.###.# ....... #.#.#.# ....... #.###.# ##.#.## ...#... ================================================ FILE: src/games/stinger/shapes/7x8/shape8.txt ================================================ ....... ..###.. .#####. ###.### ##...## ###.### .#####. ..###.. ================================================ FILE: src/games/stinger/shapes/7x8/shape9.txt ================================================ .....#. ....### ....### .....#. ..##### .#...#. ###..#. .#..... ================================================ FILE: src/games/stinger/shapes/8x6/shape0.txt ================================================ ##...##. #.###.#. ###.###. #.#.#.#. ...#.... ........ ================================================ FILE: src/games/stinger/shapes/8x6/shape1.txt ================================================ ........ ........ ##...##. #.###.#. ###.###. #.#.#.#. ================================================ FILE: src/games/stinger/shapes/8x6/shape10.txt ================================================ ........ ........ ........ #....... #.#..... .#...... ================================================ FILE: src/games/stinger/shapes/8x6/shape11.txt ================================================ ........ ........ ........ ......## ....#.#. .....#.. ================================================ FILE: src/games/stinger/shapes/8x6/shape12.txt ================================================ .#...... ###..... ###..... #####... .#...#.. .#..###. ================================================ FILE: src/games/stinger/shapes/8x6/shape13.txt ================================================ ........ ........ ........ ..###### .#...... ###..... ================================================ FILE: src/games/stinger/shapes/8x6/shape14.txt ================================================ ##...##. #.###.#. .#.#.#.. #.###.#. ##.#.##. ...#.... ================================================ FILE: src/games/stinger/shapes/8x6/shape15.txt ================================================ ........ ........ ...#.... #.....#. ...#.... .#.#.#.. ================================================ FILE: src/games/stinger/shapes/8x6/shape16.txt ================================================ ........ ........ ........ #####... .....#.. ....###. ================================================ FILE: src/games/stinger/shapes/8x6/shape17.txt ================================================ .....#.. ....###. ....###. .....#.. .....#.. ........ ================================================ FILE: src/games/stinger/shapes/8x6/shape18.txt ================================================ .#...... ###..... ###..... .#...... .#...... ........ ================================================ FILE: src/games/stinger/shapes/8x6/shape19.txt ================================================ ##...##. #.###.#. ###.###. #.#.#.#. ##.#.##. ...#.... ================================================ FILE: src/games/stinger/shapes/8x6/shape2.txt ================================================ ...#.... ........ ........ ........ ........ ........ ================================================ FILE: src/games/stinger/shapes/8x6/shape20.txt ================================================ ###.###. #.#.#.#. ##.#.##. ...#.... ........ ........ ================================================ FILE: src/games/stinger/shapes/8x6/shape21.txt ================================================ #.#.#.#. ##.#.##. ...#.... ........ ........ ........ ================================================ FILE: src/games/stinger/shapes/8x6/shape22.txt ================================================ ##.#.##. ...#.... ........ ........ ........ ........ ================================================ FILE: src/games/stinger/shapes/8x6/shape23.txt ================================================ ........ ...##... ..##.#.. .####.#. ..##.#.. ...##... ================================================ FILE: src/games/stinger/shapes/8x6/shape24.txt ================================================ .#####.. ######## #....#.# ######## #.#....# ######## ================================================ FILE: src/games/stinger/shapes/8x6/shape25.txt ================================================ ........ ...#.... ..#.#... .###.#.. ..#.#... ...#.... ================================================ FILE: src/games/stinger/shapes/8x6/shape26.txt ================================================ ........ ........ ...#.... ...#.... ...#.... ........ ================================================ FILE: src/games/stinger/shapes/8x6/shape3.txt ================================================ ........ ........ ........ ##...##. #.###.#. ###.###. ================================================ FILE: src/games/stinger/shapes/8x6/shape4.txt ================================================ #.#.#.#. ...#.... ........ ........ ........ ........ ================================================ FILE: src/games/stinger/shapes/8x6/shape5.txt ================================================ ........ ........ ........ ........ ##...##. #.###.#. ================================================ FILE: src/games/stinger/shapes/8x6/shape6.txt ================================================ ###.###. #.#.#.#. ...#.... ........ ........ ........ ================================================ FILE: src/games/stinger/shapes/8x6/shape7.txt ================================================ ##...##. ........ ###.###. ........ ##.#.##. ...#.... ================================================ FILE: src/games/stinger/shapes/8x6/shape8.txt ================================================ .######. ###..### ##....## ##....## ###..### .######. ================================================ FILE: src/games/stinger/shapes/8x6/shape9.txt ================================================ .....#.. ....###. ....###. ..###### .#...#.. ###..#.. ================================================ FILE: src/games/stinger/shapes/8x8/shape0.txt ================================================ ##...##. #.###.#. #######. #.#.#.#. ###.###. #.###.#. #.#.#.#. ...#.... ================================================ FILE: src/games/stinger/shapes/8x8/shape1.txt ================================================ ........ ........ ##...##. #.###.#. #######. #.#.#.#. ###.###. #.###.#. ================================================ FILE: src/games/stinger/shapes/8x8/shape10.txt ================================================ ........ ........ ........ ........ #....... #.#..... .#...... #.#..... ================================================ FILE: src/games/stinger/shapes/8x8/shape11.txt ================================================ ........ ........ ........ ........ ......## ....#.#. .....#.. ....#.#. ================================================ FILE: src/games/stinger/shapes/8x8/shape12.txt ================================================ .#...... ###..... ###..... .#...... #####... .#...#.. .#..###. .....#.. ================================================ FILE: src/games/stinger/shapes/8x8/shape13.txt ================================================ ........ ........ ........ ........ ..###### .#...... ###..... .#...... ================================================ FILE: src/games/stinger/shapes/8x8/shape14.txt ================================================ ##...##. #.###.#. .#...#.. .#.#.#.. #.###.#. ##.#.##. ...#.... ...#.... ================================================ FILE: src/games/stinger/shapes/8x8/shape15.txt ================================================ ........ ........ ........ ...#.... #.....#. ...#.... .#.#.#.. ...#.... ================================================ FILE: src/games/stinger/shapes/8x8/shape16.txt ================================================ ........ ........ ........ ........ #####... .....#.. ....###. .....#.. ================================================ FILE: src/games/stinger/shapes/8x8/shape17.txt ================================================ .....#.. ....###. ....###. .....#.. .....#.. .....#.. ........ ........ ================================================ FILE: src/games/stinger/shapes/8x8/shape18.txt ================================================ .#...... ###..... ###..... .#...... .#...... .#...... ........ ........ ================================================ FILE: src/games/stinger/shapes/8x8/shape19.txt ================================================ ##...##. #.###.#. #######. #.#.#.#. ###.###. #.###.#. ##.#.##. ...#.... ================================================ FILE: src/games/stinger/shapes/8x8/shape2.txt ================================================ #.#.#.#. ...#.... ........ ........ ........ ........ ........ ........ ================================================ FILE: src/games/stinger/shapes/8x8/shape20.txt ================================================ #######. #.#.#.#. ###.###. #.###.#. ##.#.##. ...#.... ........ ........ ================================================ FILE: src/games/stinger/shapes/8x8/shape21.txt ================================================ ###.###. #.###.#. ##.#.##. ...#.... ........ ........ ........ ........ ================================================ FILE: src/games/stinger/shapes/8x8/shape22.txt ================================================ ##.#.##. ...#.... ........ ........ ........ ........ ........ ........ ================================================ FILE: src/games/stinger/shapes/8x8/shape23.txt ================================================ ........ ...##... ..####.. .####.#. ######.# .####.#. ..####.. ...##... ================================================ FILE: src/games/stinger/shapes/8x8/shape24.txt ================================================ .####... ######.. ######## #....#.# ######## #.#....# ######## ........ ================================================ FILE: src/games/stinger/shapes/8x8/shape25.txt ================================================ ........ ........ ........ ...##... ..##.#.. .####.#. ..##.#.. ...##... ================================================ FILE: src/games/stinger/shapes/8x8/shape26.txt ================================================ ........ ........ ........ ........ ........ ...#.... ...#.... ...#.... ================================================ FILE: src/games/stinger/shapes/8x8/shape3.txt ================================================ ........ ........ ........ ........ ##...##. #.###.#. #######. #.#.#.#. ================================================ FILE: src/games/stinger/shapes/8x8/shape4.txt ================================================ ###.###. #.###.#. #.#.#.#. ...#.... ........ ........ ........ ........ ================================================ FILE: src/games/stinger/shapes/8x8/shape5.txt ================================================ ........ ........ ........ ........ ........ ........ ##...##. #.###.#. ================================================ FILE: src/games/stinger/shapes/8x8/shape6.txt ================================================ #######. #.#.#.#. ###.###. #.###.#. #.#.#.#. ...#.... ........ ........ ================================================ FILE: src/games/stinger/shapes/8x8/shape7.txt ================================================ ##...##. #.###.#. ........ #.#.#.#. ........ #.###.#. ##.#.##. ...#.... ================================================ FILE: src/games/stinger/shapes/8x8/shape8.txt ================================================ ..####.. .######. ###..### ##....## ##....## ###..### .######. ..####.. ================================================ FILE: src/games/stinger/shapes/8x8/shape9.txt ================================================ .....#.. ....###. ....###. .....#.. ..###### .#...#.. ###..#.. .#...... ================================================ FILE: src/games/stinger/tiles/6x8/tile0.txt ================================================ 34,28,62,20,54,28,20,8 ================================================ FILE: src/games/stinger/tiles/6x8/tile1.txt ================================================ 0,0,34,28,62,20,54,28 ================================================ FILE: src/games/stinger/tiles/6x8/tile10.txt ================================================ 0,0,0,0,0,40,16,40 ================================================ FILE: src/games/stinger/tiles/6x8/tile11.txt ================================================ 0,0,0,0,1,5,2,5 ================================================ FILE: src/games/stinger/tiles/6x8/tile12.txt ================================================ 16,56,56,16,60,18,23,2 ================================================ FILE: src/games/stinger/tiles/6x8/tile13.txt ================================================ 0,0,0,0,15,16,56,16 ================================================ FILE: src/games/stinger/tiles/6x8/tile14.txt ================================================ 34,28,34,42,28,42,8,8 ================================================ FILE: src/games/stinger/tiles/6x8/tile15.txt ================================================ 0,0,0,8,34,8,20,8 ================================================ FILE: src/games/stinger/tiles/6x8/tile16.txt ================================================ 0,0,0,0,60,2,7,2 ================================================ FILE: src/games/stinger/tiles/6x8/tile17.txt ================================================ 2,7,7,2,2,2,0,0 ================================================ FILE: src/games/stinger/tiles/6x8/tile18.txt ================================================ 16,56,56,16,16,16,0,0 ================================================ FILE: src/games/stinger/tiles/6x8/tile19.txt ================================================ 34,28,62,20,54,28,42,8 ================================================ FILE: src/games/stinger/tiles/6x8/tile2.txt ================================================ 20,8,0,0,0,0,0,0 ================================================ FILE: src/games/stinger/tiles/6x8/tile20.txt ================================================ 62,20,54,28,42,8,0,0 ================================================ FILE: src/games/stinger/tiles/6x8/tile21.txt ================================================ 54,28,42,8,0,0,0,0 ================================================ FILE: src/games/stinger/tiles/6x8/tile22.txt ================================================ 42,8,0,0,0,0,0,0 ================================================ FILE: src/games/stinger/tiles/6x8/tile23.txt ================================================ 0,12,30,59,61,59,30,12 ================================================ FILE: src/games/stinger/tiles/6x8/tile24.txt ================================================ 28,62,63,37,63,41,63,0 ================================================ FILE: src/games/stinger/tiles/6x8/tile25.txt ================================================ 0,0,0,12,26,61,26,12 ================================================ FILE: src/games/stinger/tiles/6x8/tile26.txt ================================================ 0,0,0,0,0,8,8,8 ================================================ FILE: src/games/stinger/tiles/6x8/tile3.txt ================================================ 0,0,0,0,34,28,62,20 ================================================ FILE: src/games/stinger/tiles/6x8/tile4.txt ================================================ 54,28,20,8,0,0,0,0 ================================================ FILE: src/games/stinger/tiles/6x8/tile5.txt ================================================ 0,0,0,0,0,0,34,28 ================================================ FILE: src/games/stinger/tiles/6x8/tile6.txt ================================================ 62,20,54,28,20,8,0,0 ================================================ FILE: src/games/stinger/tiles/6x8/tile7.txt ================================================ 34,28,0,42,0,28,42,8 ================================================ FILE: src/games/stinger/tiles/6x8/tile8.txt ================================================ 30,63,51,33,33,51,63,30 ================================================ FILE: src/games/stinger/tiles/6x8/tile9.txt ================================================ 2,7,7,2,15,18,58,16 ================================================ FILE: src/games/stinger/tiles/6x9/tile0.txt ================================================ 0,34,28,62,20,54,28,20,8 ================================================ FILE: src/games/stinger/tiles/6x9/tile1.txt ================================================ 0,0,0,34,28,62,20,54,28 ================================================ FILE: src/games/stinger/tiles/6x9/tile10.txt ================================================ 0,0,0,0,0,0,40,16,40 ================================================ FILE: src/games/stinger/tiles/6x9/tile11.txt ================================================ 0,0,0,0,0,1,5,2,5 ================================================ FILE: src/games/stinger/tiles/6x9/tile12.txt ================================================ 0,16,56,56,16,60,18,23,2 ================================================ FILE: src/games/stinger/tiles/6x9/tile13.txt ================================================ 0,0,0,0,0,15,16,56,16 ================================================ FILE: src/games/stinger/tiles/6x9/tile14.txt ================================================ 0,34,28,34,42,28,42,8,8 ================================================ FILE: src/games/stinger/tiles/6x9/tile15.txt ================================================ 0,0,0,0,8,34,8,20,8 ================================================ FILE: src/games/stinger/tiles/6x9/tile16.txt ================================================ 0,0,0,0,0,60,2,7,2 ================================================ FILE: src/games/stinger/tiles/6x9/tile17.txt ================================================ 0,2,7,7,2,2,2,0,0 ================================================ FILE: src/games/stinger/tiles/6x9/tile18.txt ================================================ 0,16,56,56,16,16,16,0,0 ================================================ FILE: src/games/stinger/tiles/6x9/tile19.txt ================================================ 0,34,28,62,20,54,28,42,8 ================================================ FILE: src/games/stinger/tiles/6x9/tile2.txt ================================================ 20,8,0,0,0,0,0,0,0 ================================================ FILE: src/games/stinger/tiles/6x9/tile20.txt ================================================ 62,20,54,28,42,8,0,0,0 ================================================ FILE: src/games/stinger/tiles/6x9/tile21.txt ================================================ 54,28,42,8,0,0,0,0,0 ================================================ FILE: src/games/stinger/tiles/6x9/tile22.txt ================================================ 42,8,0,0,0,0,0,0,0 ================================================ FILE: src/games/stinger/tiles/6x9/tile23.txt ================================================ 0,0,12,30,59,61,59,30,12 ================================================ FILE: src/games/stinger/tiles/6x9/tile24.txt ================================================ 0,28,62,63,37,63,41,63,0 ================================================ FILE: src/games/stinger/tiles/6x9/tile25.txt ================================================ 0,0,0,0,12,26,61,26,12 ================================================ FILE: src/games/stinger/tiles/6x9/tile26.txt ================================================ 0,0,0,0,0,0,8,8,8 ================================================ FILE: src/games/stinger/tiles/6x9/tile3.txt ================================================ 0,0,0,0,0,34,28,62,20 ================================================ FILE: src/games/stinger/tiles/6x9/tile4.txt ================================================ 54,28,20,8,0,0,0,0,0 ================================================ FILE: src/games/stinger/tiles/6x9/tile5.txt ================================================ 0,0,0,0,0,0,0,34,28 ================================================ FILE: src/games/stinger/tiles/6x9/tile6.txt ================================================ 62,20,54,28,20,8,0,0,0 ================================================ FILE: src/games/stinger/tiles/6x9/tile7.txt ================================================ 0,34,28,0,42,0,28,42,8 ================================================ FILE: src/games/stinger/tiles/6x9/tile8.txt ================================================ 0,30,63,51,33,33,51,63,30 ================================================ FILE: src/games/stinger/tiles/6x9/tile9.txt ================================================ 0,2,7,7,2,15,18,58,16 ================================================ FILE: src/games/stinger/tiles/7x8/tile0.txt ================================================ 99,93,127,85,119,93,85,8 ================================================ FILE: src/games/stinger/tiles/7x8/tile1.txt ================================================ 0,0,99,93,127,85,119,93 ================================================ FILE: src/games/stinger/tiles/7x8/tile10.txt ================================================ 0,0,0,0,64,80,32,80 ================================================ FILE: src/games/stinger/tiles/7x8/tile11.txt ================================================ 0,0,0,0,1,5,2,5 ================================================ FILE: src/games/stinger/tiles/7x8/tile12.txt ================================================ 32,112,112,32,124,34,39,2 ================================================ FILE: src/games/stinger/tiles/7x8/tile13.txt ================================================ 0,0,0,0,31,32,112,32 ================================================ FILE: src/games/stinger/tiles/7x8/tile14.txt ================================================ 99,93,34,42,93,107,8,8 ================================================ FILE: src/games/stinger/tiles/7x8/tile15.txt ================================================ 0,0,0,8,65,8,42,8 ================================================ FILE: src/games/stinger/tiles/7x8/tile16.txt ================================================ 0,0,0,0,124,2,7,2 ================================================ FILE: src/games/stinger/tiles/7x8/tile17.txt ================================================ 2,7,7,2,2,2,0,0 ================================================ FILE: src/games/stinger/tiles/7x8/tile18.txt ================================================ 32,112,112,32,32,32,0,0 ================================================ FILE: src/games/stinger/tiles/7x8/tile19.txt ================================================ 99,93,127,85,119,93,107,8 ================================================ FILE: src/games/stinger/tiles/7x8/tile2.txt ================================================ 85,8,0,0,0,0,0,0 ================================================ FILE: src/games/stinger/tiles/7x8/tile20.txt ================================================ 127,85,119,93,107,8,0,0 ================================================ FILE: src/games/stinger/tiles/7x8/tile21.txt ================================================ 119,93,107,8,0,0,0,0 ================================================ FILE: src/games/stinger/tiles/7x8/tile22.txt ================================================ 107,8,0,0,0,0,0,0 ================================================ FILE: src/games/stinger/tiles/7x8/tile23.txt ================================================ 0,8,28,58,125,58,28,8 ================================================ FILE: src/games/stinger/tiles/7x8/tile24.txt ================================================ 60,126,127,66,127,80,127,0 ================================================ FILE: src/games/stinger/tiles/7x8/tile25.txt ================================================ 0,0,0,12,26,61,26,12 ================================================ FILE: src/games/stinger/tiles/7x8/tile26.txt ================================================ 0,0,0,0,0,8,8,8 ================================================ FILE: src/games/stinger/tiles/7x8/tile3.txt ================================================ 0,0,0,0,99,93,127,85 ================================================ FILE: src/games/stinger/tiles/7x8/tile4.txt ================================================ 119,93,85,8,0,0,0,0 ================================================ FILE: src/games/stinger/tiles/7x8/tile5.txt ================================================ 0,0,0,0,0,0,99,93 ================================================ FILE: src/games/stinger/tiles/7x8/tile6.txt ================================================ 127,85,119,93,85,8,0,0 ================================================ FILE: src/games/stinger/tiles/7x8/tile7.txt ================================================ 99,93,0,85,0,93,107,8 ================================================ FILE: src/games/stinger/tiles/7x8/tile8.txt ================================================ 0,28,62,119,99,119,62,28 ================================================ FILE: src/games/stinger/tiles/7x8/tile9.txt ================================================ 2,7,7,2,31,34,114,32 ================================================ FILE: src/games/stinger/tiles/8x6/tile0.txt ================================================ 198,186,238,170,16,0 ================================================ FILE: src/games/stinger/tiles/8x6/tile1.txt ================================================ 0,0,198,186,238,170 ================================================ FILE: src/games/stinger/tiles/8x6/tile10.txt ================================================ 0,0,0,128,160,64 ================================================ FILE: src/games/stinger/tiles/8x6/tile11.txt ================================================ 0,0,0,3,10,4 ================================================ FILE: src/games/stinger/tiles/8x6/tile12.txt ================================================ 64,224,224,248,68,78 ================================================ FILE: src/games/stinger/tiles/8x6/tile13.txt ================================================ 0,0,0,63,64,224 ================================================ FILE: src/games/stinger/tiles/8x6/tile14.txt ================================================ 198,186,84,186,214,16 ================================================ FILE: src/games/stinger/tiles/8x6/tile15.txt ================================================ 0,0,16,130,16,84 ================================================ FILE: src/games/stinger/tiles/8x6/tile16.txt ================================================ 0,0,0,248,4,14 ================================================ FILE: src/games/stinger/tiles/8x6/tile17.txt ================================================ 4,14,14,4,4,0 ================================================ FILE: src/games/stinger/tiles/8x6/tile18.txt ================================================ 64,224,224,64,64,0 ================================================ FILE: src/games/stinger/tiles/8x6/tile19.txt ================================================ 198,186,238,170,214,16 ================================================ FILE: src/games/stinger/tiles/8x6/tile2.txt ================================================ 16,0,0,0,0,0 ================================================ FILE: src/games/stinger/tiles/8x6/tile20.txt ================================================ 238,170,214,16,0,0 ================================================ FILE: src/games/stinger/tiles/8x6/tile21.txt ================================================ 170,214,16,0,0,0 ================================================ FILE: src/games/stinger/tiles/8x6/tile22.txt ================================================ 214,16,0,0,0,0 ================================================ FILE: src/games/stinger/tiles/8x6/tile23.txt ================================================ 0,24,52,122,52,24 ================================================ FILE: src/games/stinger/tiles/8x6/tile24.txt ================================================ 124,255,133,255,161,255 ================================================ FILE: src/games/stinger/tiles/8x6/tile25.txt ================================================ 0,16,40,116,40,16 ================================================ FILE: src/games/stinger/tiles/8x6/tile26.txt ================================================ 0,0,16,16,16,0 ================================================ FILE: src/games/stinger/tiles/8x6/tile3.txt ================================================ 0,0,0,198,186,238 ================================================ FILE: src/games/stinger/tiles/8x6/tile4.txt ================================================ 170,16,0,0,0,0 ================================================ FILE: src/games/stinger/tiles/8x6/tile5.txt ================================================ 0,0,0,0,198,186 ================================================ FILE: src/games/stinger/tiles/8x6/tile6.txt ================================================ 238,170,16,0,0,0 ================================================ FILE: src/games/stinger/tiles/8x6/tile7.txt ================================================ 198,0,238,0,214,16 ================================================ FILE: src/games/stinger/tiles/8x6/tile8.txt ================================================ 126,231,195,195,231,126 ================================================ FILE: src/games/stinger/tiles/8x6/tile9.txt ================================================ 4,14,14,63,68,228 ================================================ FILE: src/games/stinger/tiles/8x8/tile0.txt ================================================ 198,186,254,170,238,186,170,16 ================================================ FILE: src/games/stinger/tiles/8x8/tile1.txt ================================================ 0,0,198,186,254,170,238,186 ================================================ FILE: src/games/stinger/tiles/8x8/tile10.txt ================================================ 0,0,0,0,128,160,64,160 ================================================ FILE: src/games/stinger/tiles/8x8/tile11.txt ================================================ 0,0,0,0,3,10,4,10 ================================================ FILE: src/games/stinger/tiles/8x8/tile12.txt ================================================ 64,224,224,64,248,68,78,4 ================================================ FILE: src/games/stinger/tiles/8x8/tile13.txt ================================================ 0,0,0,0,63,64,224,64 ================================================ FILE: src/games/stinger/tiles/8x8/tile14.txt ================================================ 198,186,68,84,186,214,16,16 ================================================ FILE: src/games/stinger/tiles/8x8/tile15.txt ================================================ 0,0,0,16,130,16,84,16 ================================================ FILE: src/games/stinger/tiles/8x8/tile16.txt ================================================ 0,0,0,0,248,4,14,4 ================================================ FILE: src/games/stinger/tiles/8x8/tile17.txt ================================================ 4,14,14,4,4,4,0,0 ================================================ FILE: src/games/stinger/tiles/8x8/tile18.txt ================================================ 64,224,224,64,64,64,0,0 ================================================ FILE: src/games/stinger/tiles/8x8/tile19.txt ================================================ 198,186,254,170,238,186,214,16 ================================================ FILE: src/games/stinger/tiles/8x8/tile2.txt ================================================ 170,16,0,0,0,0,0,0 ================================================ FILE: src/games/stinger/tiles/8x8/tile20.txt ================================================ 254,170,238,186,214,16,0,0 ================================================ FILE: src/games/stinger/tiles/8x8/tile21.txt ================================================ 238,186,214,16,0,0,0,0 ================================================ FILE: src/games/stinger/tiles/8x8/tile22.txt ================================================ 214,16,0,0,0,0,0,0 ================================================ FILE: src/games/stinger/tiles/8x8/tile23.txt ================================================ 0,24,60,122,253,122,60,24 ================================================ FILE: src/games/stinger/tiles/8x8/tile24.txt ================================================ 120,252,255,133,255,161,255,0 ================================================ FILE: src/games/stinger/tiles/8x8/tile25.txt ================================================ 0,0,0,24,52,122,52,24 ================================================ FILE: src/games/stinger/tiles/8x8/tile26.txt ================================================ 0,0,0,0,0,16,16,16 ================================================ FILE: src/games/stinger/tiles/8x8/tile3.txt ================================================ 0,0,0,0,198,186,254,170 ================================================ FILE: src/games/stinger/tiles/8x8/tile4.txt ================================================ 238,186,170,16,0,0,0,0 ================================================ FILE: src/games/stinger/tiles/8x8/tile5.txt ================================================ 0,0,0,0,0,0,198,186 ================================================ FILE: src/games/stinger/tiles/8x8/tile6.txt ================================================ 254,170,238,186,170,16,0,0 ================================================ FILE: src/games/stinger/tiles/8x8/tile7.txt ================================================ 198,186,0,170,0,186,214,16 ================================================ FILE: src/games/stinger/tiles/8x8/tile8.txt ================================================ 60,126,231,195,195,231,126,60 ================================================ FILE: src/games/stinger/tiles/8x8/tile9.txt ================================================ 4,14,14,4,63,68,228,64 ================================================ FILE: src/games/stinger/tiles/ASCII/aquarius/aquarius_char_tiles.h ================================================ #ifndef _AQUARIUS_CHAR_TILES_H #define _AQUARIUS_CHAR_TILES_H #define _TILE_0 157 // 'X' #define _TILE_1 157 #define _TILE_2 ' ' #define _TILE_3 157 #define _TILE_4 ' ' #define _TILE_5 157 #define _TILE_6 ' ' #define _TILE_8 'o' //150 //135 //'O' // Bow parts #define _TILE_10 ' ' #define _TILE_11 ' ' // Loaded bow #if defined(__MEMORY_MAPPED_GRAPHICS) #define _TILE_9 8 #define _TILE_12 8 #endif // Empty bow #define _TILE_13 214 #define _TILE_16 214 #define _TILE_14 'H' #define _TILE_15 'L' #define _TILE_17 94 //124 //'I' #define _TILE_18 94 //124 //'I' #define _TILE_19 146 //157 //'V' #define _TILE_20 147 #define _TILE_21 146 // Beam and top border #define _TILE_22 211 // Dead #define _TILE_7 19 //209 //'=' #define _TILE_23 '*' // Wall #define _TILE_24 253 //134 #define _TILE_25 '$' #endif // _AQUARIUS_CHAR_TILES_H ================================================ FILE: src/games/stinger/tiles/ASCII/char_tiles.h ================================================ #ifndef _CHAR_TILES_H #define _CHAR_TILES_H #include "cross_lib.h" #if defined(__TARGET_SPECIFIC_ASCII) && defined(__AQUARIUS__) && !defined(__QUAD_MEMORY_MAPPED_GRAPHICS) && !defined(__DUAL_MEMORY_MAPPED_GRAPHICS) #include "aquarius/aquarius_char_tiles.h" #else #define _TILE_0 'X' #define _TILE_1 ' ' #define _TILE_2 'X' #define _TILE_3 ' ' #define _TILE_4 'X' #define _TILE_5 ' ' #define _TILE_6 'X' #define _TILE_8 'O' #define _TILE_9 'I' #define _TILE_10 ' ' #define _TILE_11 ' ' #define _TILE_12 'I' #define _TILE_13 'T' #define _TILE_14 'H' #define _TILE_16 'T' #define _TILE_19 'V' #define _TILE_20 'V' #define _TILE_21 'V' #define _TILE_22 'V' #define _TILE_23 'F' #if !defined(__CIDELSA__) && !defined(__ATARI7800__) #define _TILE_7 '=' #define _TILE_15 '*' #define _TILE_24 '-' #define _TILE_25 '$' #else #define _TILE_7 'S' #define _TILE_15 'X' #define _TILE_24 'M' #define _TILE_25 'S' #endif #if defined(__CIDELSA__) || defined(__MC10__) #define _TILE_17 'I' #define _TILE_18 'I' #if defined(__MC10__) #define _TILE_26 '.' #else #define _TILE_26 'I' #endif #else #define _TILE_17 '|' #define _TILE_18 '|' #define _TILE_26 '.' #endif #endif #endif // _CHAR_TILES_H ================================================ FILE: src/games/trex/Makefile.trex ================================================ FULL_FILES ?= \ $(BASIC_CROSS_LIB_FILES) \ $(CROSS_LIB_PATH)/sleep/sleep_macros.c \ $(SOURCE_PATH)/main.c GAME_NAME := trex PARENT_DIR = games include ./$(PARENT_DIR)/$(GAME_NAME)/config/project_config.mk include ./$(PARENT_DIR)/$(GAME_NAME)/config/game_config.mk include ./Makefile_common include ./makefiles.common/auxiliary/Makefile_default_values ================================================ FILE: src/games/trex/config/game_config.mk ================================================ # # COCO_COLOR_GFX_GAME_OPTS ?= # CREATIVISION_GAME_OPTS ?= -DMAX_NUMBER_OF_MISSILES=2 -DMAX_ROCKETS_ON_SCREEN=7 -DNO_BOTTOM_WALL_REDRAW # GAMATE_GAME_OPTS ?= -DMAX_NUMBER_OF_MISSILES=3 -DMAX_ROCKETS_ON_SCREEN=4 C128_Z80_80COL_GAME_OPTS ?= -DNO_CACTUS_TRANSITION -DSLOWER_FEET -DFEWER_DISPLAYS # ZX81_NO_GFX_GAME_OPTS ?= -DMAX_ROCKETS_ON_SCREEN=7 -DMAX_NUMBER_OF_MISSILES=4 -DMISSILE_DROP_LOOP_MASK=1 -DSMALL_WALL ZX81_GFX_GAME_OPTS ?= -DNO_CACTUS_TRANSITION -DSLOWER_FEET -DFEWER_DISPLAYS # APPLE2_GAME_OPTS ?= -DMAX_ROCKETS_ON_SCREEN=6 -DMAX_NUMBER_OF_MISSILES=4 COMX_GAME_OPTS ?= -DNO_CACTUS_TRANSITION PECOM_GAME_OPTS ?= -DNO_CACTUS_TRANSITION # TMC600_GAME_OPTS ?= -DMAX_ROCKETS_ON_SCREEN=6 -DMAX_NUMBER_OF_MISSILES=4 -DSMALL_WALL -DNO_BOTTOM_WALL_REDRAW -DNORMAL_ZOMBIE_SPEED=1 -DSLOW_ZOMBIE_SPEED=7 # CPC_GAME_OPTS ?= -DMAX_ROCKETS_ON_SCREEN=6 -DMAX_NUMBER_OF_MISSILES=4 # CAMPUTERS_LYNX_GAME_OPTS ?= -DMAX_ROCKETS_ON_SCREEN=5 -DMAX_NUMBER_OF_MISSILES=3 # NCURSES_GAME_OPTS ?= -DNO_EXTRA_TITLE VIC20_UNEXPANDED_NO_GFX_GAME_OPTS ?= -DTINY_GAME -DNO_CACTUS_TRANSITION -DFEWER_DISPLAYS VIC20_UNEXPANDED_GAME_OPTS ?= -DTINY_GAME -DNO_CACTUS_TRANSITION -DFEWER_DISPLAYS HECTOR1_GAME_OPTS ?= -DTINY_GAME -DNO_CACTUS_TRANSITION -DFEWER_DISPLAYS ================================================ FILE: src/games/trex/config/project_config.mk ================================================ ##################################################################### # DISPLAY FLAGS 4COLOR_PALETTE= # __USE_GREEN ORIC_COLORS= # __MONO_COLORS MC10_COLORS= # __REVERSE_LETTERS ##################################################################### # SLOWDOWN VALUES # Common factor _COMMON_SLOWDOWN_FACTOR=5 # CC65 _AGAT_SLOWDOWN=10 _APPLE2_SLOWDOWN=12 _APPLE2ENH_SLOWDOWN=16 _APPLE2_HGR_SLOWDOWN=12 _APPLE2ENH_HGR_SLOWDOWN=12 _ATARI_SLOWDOWN=44 _ATARI5200_SLOWDOWN=44 _ATARI7800_SLOWDOWN=52 _ATARI7800_NO_COLOR_SLOWDOWN=20 _ATARI_LYNX_SLOWDOWN=100 _C128_8502_80COL_SLOWDOWN=10 _C16_SLOWDOWN=20 _C16_CONIO_SLOWDOWN=24 _C16_DOUBLE_BUFFER_SLOWDOWN=2 _C64_SLOWDOWN=24 _C64_CONIO_SLOWDOWN=30 _CBM610_SLOWDOWN=26 _CBM510_SLOWDOWN=18 _CX16_SLOWDOWN?=38 _CREATIVISION_SLOWDOWN=40 _GAMATE_SLOWDOWN=80 _MEGA65_SLOWDOWN=130 _NES_SLOWDOWN=60 _ORIC_SLOWDOWN=20 _PET_SLOWDOWN=18 _PCE_SLOWDOWN=80 _SUPERVISION_SLOWDOWN=68 _VIC20_SLOWDOWN=48 # Z88DK _ABC80_SLOWDOWN=12 _AQUARIUS_SLOWDOWN=20 _ACE_SLOWDOWN=8 _AGON_SLOWDOWN=100 _BEE_SLOWDOWN=8 _BONDWELL2_SLOWDOWN=12 _C128_Z80_40COL_SLOWDOWN=2 _C128_Z80_80COL_SLOWDOWN=1 _CAMPUTERS_LYNX_SLOWDOWN=2 _COLECO_SLOWDOWN=8 _CPC_MODE0_SLOWDOWN=4 _CPC_CPCRSLIB_MODE1_SLOWDOWN=4 _CPC_MODE2_SLOWDOWN=4 _CPM_Z80_SLOWDOWN=20 _CPM_INTEL8080_SLOWDOWN=8 _E200_SLOWDOWN=40 _G850_SLOWDOWN=40 _G815_SLOWDOWN=10 _GAL_SLOWDOWN=60 _GAL_GFX_SLOWDOWN=40 _GB_SLOWDOWN=8 _GG_SLOWDOWN=8 _GB_WAIT_VSYNC_SLOWDOWN=6 _GL6000SL_SLOWDOWN=6 _HECTOR1_SLOWDOWN=2 _HECTORHR_SLOWDOWN=2 _KC_SLOWDOWN=6 _LASER500_SLOWDOWN=4 _M5_SLOWDOWN=8 _M100_SLOWDOWN=8 _MC1000_SLOWDOWN=150 _MSX_SLOWDOWN=8 _MSX_FIXED_COLORS_SLOWDOWN=16 _MTX500_SLOWDOWN=8 _MTX512_SLOWDOWN=8 _MZ_SLOWDOWN=20 _NC100_SLOWDOWN=12 _NC200_SLOWDOWN=12 _PC88_SLOWDOWN=8 _PHC25_SLOWDOWN=30 _PX4_SLOWDOWN=14 _PX8_SLOWDOWN=22 _SAMCOUPE_SLOWDOWN=10 _SC3000_SLOWDOWN=8 _SMC777_SLOWDOWN=6 _SMS_SLOWDOWN=6 _SPECTRUM_SLOWDOWN=8 _TRS80_SLOWDOWN=40 _VG5K_SLOWDOWN=20 _VZ200_SLOWDOWN=20 _X07_SLOWDOWN=4 _Z1013_SLOWDOWN=24 _Z9001_SLOWDOWN=40 _Z88_SLOWDOWN=8 _ZX81_SLOWDOWN=2 _ZX81_WRX_SLOWDOWN=4 _ZX81_WRX64_SLOWDOWN=6 _ZX81_WRX128_SLOWDOWN=6 _ZX81_8X6_WRX64_SLOWDOWN=6 _ZX81_8X6_WRX128_SLOWDOWN=6 # CMOC _COCO_SLOWDOWN=8 _DRAGON_SLOWDOWN=8 _COCO3_SLOWDOWN=20 _COCO_NO_GFX_SLOWDOWN=18 _DRAGON_NO_GFX_SLOWDOWN=18 _MO5_SLOWDOWN=12 _TO7_SLOWDOWN=12 # LCC1802 _COMX_SLOWDOWN=4 _PECOM_SLOWDOWN=2 _TMC600_SLOWDOWN=3 _MICRO_SLOWDOWN=4 _CIDELSA_SLOWDOWN=4 # MC10 _MC10_SLOWDOWN=20 # TI99 _TI99_SLOWDOWN=24 # GCC _NCURSES_SLOWDOWN=1 _TERMINAL_SLOWDOWN=2 # VBCC _BBC_SLOWDOWN=65 # ACK _MSDOS86_SLOWDOWN?=20 ================================================ FILE: src/games/trex/docs/dino.txt ================================================ ..........#####. .........##.#### .........####### .........###.... .........#####.. ........###..... ##..#########... ##########..#... .#########...... ....#...#....... ....#...#....... ....##..##...... -> tile0 ..#####. .##.#### .####### .###.... .#####.. ###..... tile3 #####... ##..#... ##...... #....... #....... ##...... tile2 ##..#### ######## .####### ....#... ....#... ....##.. --------------------------------- ..........#####. .........##.#### .........####### .........###.... .........#####.. ........###..... ##..#########... ##########..#... .#########...... ....#...#....... ....##..##...... ................ -> tile1 #####... ##..#... ##...... #....... ##...... ........ tile4 ##..#### ######## .####### ....#... ....##.. ........ ------------------------------- ................ ................ ................ ..........#####. .........##.#### .........####### .........###.... .........#####.. ........###..... ##..#########... ##########..#... .#########...... ....#...#....... ....#...#....... ....##..##...... ................ ................ ................ -> tile5 ........ ........ ........ ..#####. .##.#### .####### tile 6 .###.... .#####.. ###..... #####... ##..#... ##...... tile8 ........ ........ ........ ##..#### ######## .####### tile7 #....... #....... ##...... ........ ........ ........ tile9 ....#... ....#... ....##.. ........ ........ ........ ------------------ tile26 ..#####. .##...## .####### .###.... .#####.. ###..... ================================================ FILE: src/games/trex/docs/shape2x8left.txt ================================================ ..#..... .###.... ######## ...##### .....### .....##. ================================================ FILE: src/games/trex/docs/shape2x8right.txt ================================================ ......#. .....### ....#### .......# ........ ........ ================================================ FILE: src/games/trex/docs/tile2x8left.txt ================================================ 0,32,112,255,31,7,6,4 ================================================ FILE: src/games/trex/docs/tile2x8right.txt ================================================ 0,2,7,15,1,0,0,0 ================================================ FILE: src/games/trex/images.h ================================================ #ifndef _IMAGES_H #define _IMAGES_H #include "cross_lib.h" #if !defined(TINY_GAME) // Initial/jump dino #define TOP_DINO_0 _TILE_0 #define TAIL_DINO_0 _TILE_2 #define BOTTOM_DINO_0 _TILE_3 // Dino lower feet #define TAIL_RAISED_DINO _TILE_17 #define BOTTOM_RAISED_DINO _TILE_16 // Dino with +4 pixel offset #define TOP_DINO_1 _TILE_15 #define MIDDLE_DINO_1 _TILE_6 #define BOTTOM_DINO_1 _TILE_7 #define TAIL_DINO_1 _TILE_8 #define FOOT_DINO_1 _TILE_9 #define TERRAIN_2 _TILE_13 #define TERRAIN_3 _TILE_14 #define TOP_CACTUS_2 _TILE_10 #define BOTTOM_CACTUS_2 _TILE_4 #define TOP_LEFT_CACTUS_2 _TILE_11 #define BOTTOM_LEFT_CACTUS_2 _TILE_20 #define TOP_RIGHT_CACTUS_2 _TILE_12 #define BOTTOM_RIGHT_CACTUS_2 _TILE_21 #define TERRAIN _TILE_5 #define TOP_CACTUS _TILE_1 #define BOTTOM_CACTUS _TILE_4 #define TOP_LEFT_CACTUS _TILE_18 #define BOTTOM_LEFT_CACTUS _TILE_20 #define TOP_RIGHT_CACTUS _TILE_19 #define BOTTOM_RIGHT_CACTUS _TILE_21 #define LEFT_BIRD_0 _TILE_22 #define LEFT_BIRD_1 _TILE_23 #define RIGHT_BIRD_0 _TILE_24 #define RIGHT_BIRD_1 _TILE_25 #define TOP_DEAD_DINO_0 _TILE_26 #else // Initial/jump dino #define TOP_DINO_0 _TILE_0 #define TAIL_DINO_0 _TILE_2 #define BOTTOM_DINO_0 _TILE_3 #define TOP_CACTUS _TILE_1 #define BOTTOM_CACTUS _TILE_4 #define TERRAIN _TILE_5 #endif #endif // _IMAGES_H ================================================ FILE: src/games/trex/main.c ================================================ /* --------------------------------------------------------------------------------------- */ // // CROSS SHOOT by Fabrizio Caruso // // Fabrizio_Caruso@hotmail.com // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from // the use of this software. // Permission is granted to anyone to use this software for non-commercial applications, // subject to the following restrictions: // 1. The origin of this software must not be misrepresented; you must not // claim that you wrote the original software. If you use this software in // a product, an acknowledgment in the product documentation would be // appreciated but is not required. // 2. Altered source versions must be plainly marked as such, and must not // be misrepresented as being the original software. // 3. This notice may not be removed or altered from any source distribution. /* --------------------------------------------------------------------------------------- */ #include "cross_lib.h" #include "images.h" #define INITIAL_LEVEL 1 #if XSize<=21 #define LEFT_END_OF_TERRAIN 1 #define SIZE_OF_TERRAIN ((XSize)-2) #elif XSize<=28 #define LEFT_END_OF_TERRAIN 1 #define SIZE_OF_TERRAIN ((XSize)-3) #elif XSize<=40 #define LEFT_END_OF_TERRAIN ((XSize)/6) #define SIZE_OF_TERRAIN (2*((XSize)/3)) #else #define LEFT_END_OF_TERRAIN ((XSize)/4) #define SIZE_OF_TERRAIN (((XSize)/2)) #endif #define RIGHT_END_OF_TERRAIN (LEFT_END_OF_TERRAIN+SIZE_OF_TERRAIN) #if XSize>=22 #define X_DINO ((XSize/8)+LEFT_END_OF_TERRAIN) #else #define X_DINO (1+LEFT_END_OF_TERRAIN) #endif // TODO: ((YSize/2)+4) crashes on the Vic 20 when a cactus reaches LEFT_END_OF_TERRAIN #if YSize>=20 #define Y_DINO ((YSize/2)+4) #elif YSize>=8 #define Y_DINO ((YSize/2)+2) #else #define Y_DINO (YSize-3) #endif #define Y_TERRAIN ((Y_DINO)+2) #define Y_CACTUS ((Y_TERRAIN)-1) #if YSize>17 && XSize>=20 #define LEVEL_Y 5 #else #define LEVEL_Y 3 #endif #if YSize<=10 #define NO_RECORD_LEVEL #endif #define LEVEL_X ((XSize)/2-4) #define NUMBER_OF_CACTI 3 #define MAX_LEVEL 99u #define MAX_POINTS 9999u #if defined(_XL_NO_UDG) && !defined(NO_CACTUS_TRANSITION) #define NO_CACTUS_TRANSITION #endif uint8_t input; uint8_t state; uint8_t x_cactus[NUMBER_OF_CACTI]; uint8_t active_cactus[NUMBER_OF_CACTI]; uint8_t cactus_cooldown[NUMBER_OF_CACTI]; uint8_t number_of_active_cactus; uint8_t last_active_cactus = 1; #if !defined(TINY_GAME) uint8_t x_bird; uint8_t active_bird; uint8_t y_bird; uint8_t bird_cooldown; uint8_t hilevel; #endif uint8_t dead; uint16_t slowdown; uint8_t set_speed; uint16_t score; uint16_t hiscore; uint8_t level; uint8_t level_cacti; uint8_t level_bird; uint16_t slowdown_factor; uint8_t counter; void draw_jump_dino_0(uint8_t height) { // Initial tiles _XL_DRAW(X_DINO+1,Y_DINO-height,TOP_DINO_0,_XL_WHITE); _XL_DRAW(X_DINO+1,Y_DINO+1-height,BOTTOM_DINO_0,_XL_WHITE); _XL_DRAW(X_DINO,Y_DINO+1-height,TAIL_DINO_0,_XL_WHITE); } #if !defined(TINY_GAME) void draw_dead_dino_0(void) { // Initial tiles _XL_DRAW(X_DINO+1,Y_DINO,TOP_DEAD_DINO_0,_XL_WHITE); _XL_DRAW(X_DINO+1,Y_DINO+1,BOTTOM_DINO_0,_XL_WHITE); _XL_DRAW(X_DINO,Y_DINO+1,TAIL_DINO_0,_XL_WHITE); } #else #define draw_dead_dino_0() #endif #if !defined(TINY_GAME) && !defined(_XL_NO_UDG) void draw_jump_dino_1(uint8_t height) { _XL_DRAW(X_DINO+1,Y_DINO-1-height,TOP_DINO_1,_XL_WHITE); _XL_DRAW(X_DINO+1,Y_DINO-height,MIDDLE_DINO_1,_XL_WHITE); _XL_DRAW(X_DINO+1,Y_DINO+1-height,BOTTOM_DINO_1,_XL_WHITE); _XL_DRAW(X_DINO,Y_DINO+1-1-height,TAIL_DINO_1,_XL_WHITE); _XL_DRAW(X_DINO,Y_DINO+1-height,FOOT_DINO_1,_XL_WHITE); } #else #define draw_jump_dino_1(height) #endif void delete_feet(uint8_t height) { _XL_DELETE(X_DINO+1,Y_DINO+1-height); _XL_DELETE(X_DINO,Y_DINO+1-height); } void delete_top(uint8_t height) { _XL_DELETE(X_DINO+1,Y_DINO-1-height); _XL_DELETE(X_DINO,Y_DINO-height); } #if !defined(TINY_GAME) void draw_dino_feet_0(void) { _XL_DRAW(X_DINO+1,Y_DINO+1,BOTTOM_DINO_0,_XL_WHITE); _XL_DRAW(X_DINO,Y_DINO+1,TAIL_RAISED_DINO,_XL_WHITE); } void draw_dino_feet_1(void) { _XL_DRAW(X_DINO+1,Y_DINO+1,BOTTOM_RAISED_DINO,_XL_WHITE); _XL_DRAW(X_DINO,Y_DINO+1,TAIL_DINO_0,_XL_WHITE); } #else void draw_dino_feet_0(void) { _XL_DRAW(X_DINO+1,Y_DINO+1,BOTTOM_DINO_0,_XL_WHITE); _XL_DRAW(X_DINO,Y_DINO+1,TAIL_DINO_0,_XL_WHITE); } #define draw_dino_feet_1() draw_dino_feet_0() #endif // #define RUN_SLOW_DOWN 4 #define JUMP 10 #define END_JUMP 17 void handle_state_behavior(void) { switch(state) { case 0: draw_dino_feet_1(); break; case 1: draw_dino_feet_0(); break; case JUMP+1: delete_feet(0); delete_feet(1); draw_jump_dino_0(1+1); break; case JUMP+2: delete_feet(2); draw_jump_dino_0(2+1); break; case JUMP+3: delete_feet(3); draw_jump_dino_0(3+1); break; case JUMP+4: delete_feet(4); draw_jump_dino_0(4+1); break; case JUMP+5: draw_jump_dino_1(4+1); break; #if YSize<10 case JUMP+6: // delete_feet(5); // draw_jump_dino_0(5+1); break; case JUMP+7: // delete_feet(5); // draw_jump_dino_1(5+1); break; case JUMP+8: break; case JUMP+9: break; case JUMP+10: // 7 // draw_jump_dino_1(5+1); break; case JUMP+11: // 6 // delete_top(6); // draw_jump_dino_0(5+1); break; case JUMP+12: // 5 // draw_jump_dino_1(4+1); break; #else case JUMP+6: delete_feet(5); draw_jump_dino_0(5+1); break; case JUMP+7: delete_feet(5); draw_jump_dino_1(5+1); break; case JUMP+8: break; case JUMP+9: break; case JUMP+10: // 7 draw_jump_dino_1(5+1); break; case JUMP+11: // 6 delete_top(6); draw_jump_dino_0(5+1); break; case JUMP+12: // 5 draw_jump_dino_1(4+1); break; #endif case JUMP+13: // 4 delete_top(5); draw_jump_dino_0(4+1); break; case JUMP+14: // 3 delete_top(4); draw_jump_dino_0(3+1); break; case JUMP+15: // 2 delete_top(3); draw_jump_dino_0(2+1); break; case JUMP+16: delete_top(2); draw_jump_dino_0(1+1); break; case JUMP+END_JUMP: delete_top(0); delete_top(1); draw_jump_dino_0(0); break; case 99: // like case 1 draw_jump_dino_0(0); break; } } void handle_fire(void) { input = _XL_INPUT(); if(_XL_FIRE(input)) { state = JUMP+1; } } void handle_state_transition(void) { switch(state) { case 0: state = 90; handle_fire(); break; case 1: state = 91; handle_fire(); break; case JUMP+END_JUMP: // draw_jump_dino_0(0); state=1; break; case 90: #if !defined(SLOWER_FEET) if(counter&1) #else if(!(counter&7)) #endif { state = 1; } handle_fire(); break; case 91: #if !defined(SLOWER_FEET) if(counter&1) #else if(!(counter&7)) #endif { state = 0; } handle_fire(); break; default: ++state; break; } } #if YSize<10 #define SCORE_X ((LEVEL_X)+1) #else #define SCORE_X 0 #endif void display_score(void) { _XL_SET_TEXT_COLOR(_XL_WHITE); _XL_PRINTD(SCORE_X,0,4,score); } void display_hiscore(void) { _XL_SET_TEXT_COLOR(_XL_WHITE); _XL_PRINT(XSize-4-2,0,"HI"); _XL_PRINTD(XSize-4,0,4,hiscore); } #if YSize >= 19 #define HILEVEL_Y YSize-3 #else #define HILEVEL_Y YSize-2 #endif #if !defined(TINY_GAME) && !defined(NO_RECORD_LEVEL) void display_hilevel(void) { _XL_SET_TEXT_COLOR(_XL_WHITE); _XL_PRINT(XSize/2-8,HILEVEL_Y,"RECORD LEVEL"); _XL_PRINTD(XSize/2-8+13,HILEVEL_Y,2,hilevel); } #else #define display_hilevel() #endif #if !defined(NO_CACTUS_TRANSITION) void handle_cactus_half_transition(uint8_t i) { if(active_cactus[i])// && x_cactus[i]) { if(i&1) { _XL_DRAW(x_cactus[i]-1,Y_CACTUS-1,TOP_LEFT_CACTUS,_XL_WHITE); _XL_DRAW(x_cactus[i],Y_CACTUS-1,TOP_RIGHT_CACTUS,_XL_WHITE); _XL_DRAW(x_cactus[i]-1,Y_CACTUS,BOTTOM_LEFT_CACTUS,_XL_WHITE); _XL_DRAW(x_cactus[i],Y_CACTUS,BOTTOM_RIGHT_CACTUS,_XL_WHITE); } else { _XL_DRAW(x_cactus[i]-1,Y_CACTUS-1,TOP_LEFT_CACTUS_2,_XL_WHITE); _XL_DRAW(x_cactus[i],Y_CACTUS-1,TOP_RIGHT_CACTUS_2,_XL_WHITE); _XL_DRAW(x_cactus[i]-1,Y_CACTUS,BOTTOM_LEFT_CACTUS_2,_XL_WHITE); _XL_DRAW(x_cactus[i],Y_CACTUS,BOTTOM_RIGHT_CACTUS_2,_XL_WHITE); } } } #endif #if !defined(TINY_GAME) void handle_bird_half_transition(void) { if(active_bird) { _XL_DRAW(x_bird,y_bird,LEFT_BIRD_0,_XL_WHITE); _XL_DRAW(x_bird+1,y_bird,LEFT_BIRD_1,_XL_WHITE); } } #else #define handle_bird_half_transition() #endif #define INITIAL_LOW_COLLISION_THRESHOLD (JUMP+3) #define FINAL_LOW_COLLISION_THRESHOLD ((JUMP)+END_JUMP-2) void one_point(void) { if(score<=MAX_POINTS) { ++score; display_score(); } _XL_PING_SOUND(); } #define BIRD_COOLDOWN_MASK 63U #define CACTUS_COOLDOWN_MASK 31U void draw_cactus_1(uint8_t x) { _XL_DRAW(x,Y_CACTUS-1,TOP_CACTUS,_XL_WHITE); _XL_DRAW(x,Y_CACTUS,BOTTOM_CACTUS,_XL_WHITE); } #if !defined(TINY_GAME) void draw_cactus_2(uint8_t x) { _XL_DRAW(x,Y_CACTUS-1,TOP_CACTUS_2,_XL_WHITE); _XL_DRAW(x,Y_CACTUS,BOTTOM_CACTUS_2,_XL_WHITE); } #else #define draw_cactus_2(x) draw_cactus_1(x) #endif void update_cactus(uint8_t i) { if(active_cactus[i]) { _XL_DELETE(x_cactus[i],Y_CACTUS-1); _XL_DELETE(x_cactus[i],Y_CACTUS); if(x_cactus[i]==LEFT_END_OF_TERRAIN) { _XL_DELETE(LEFT_END_OF_TERRAIN-1,Y_CACTUS-1); _XL_DELETE(LEFT_END_OF_TERRAIN-1,Y_CACTUS); x_cactus[i]=0; // while(1){}; one_point(); if(!(_XL_RAND()&3)) { cactus_cooldown[i] = SIZE_OF_TERRAIN; } else { cactus_cooldown[i] = (uint8_t) (_XL_RAND()&CACTUS_COOLDOWN_MASK); } active_cactus[i]=0; --number_of_active_cactus; return; } else { --x_cactus[i]; if(i&1) { draw_cactus_1(x_cactus[i]); } else { draw_cactus_2(x_cactus[i]); } } } } #if !defined(TINY_GAME) void update_bird(void) { if(active_bird) { _XL_DELETE(x_bird,y_bird); _XL_DELETE(x_bird+1,y_bird); if(x_bird == LEFT_END_OF_TERRAIN) { x_bird = 0; one_point(); bird_cooldown = (uint8_t) (_XL_RAND()&BIRD_COOLDOWN_MASK); active_bird = 0; return; } else { --x_bird; _XL_DRAW(x_bird,y_bird,RIGHT_BIRD_0,_XL_WHITE); _XL_DRAW(x_bird+1,y_bird,RIGHT_BIRD_1,_XL_WHITE); } } } #else #define update_bird() #endif void handle_cactus(uint8_t i) { if(cactus_cooldown[i]) { --cactus_cooldown[i]; } else { update_cactus(i); } } #if !defined(TINY_GAME) void handle_bird(void) { if(bird_cooldown) { --bird_cooldown; } else { update_bird(); } } #else #define handle_bird() #endif uint8_t first_non_active_cactus(void) { uint8_t i; for(i=0;i=22 #define CACTUS_SAFE_DISTANCE ((XSize/2)+1) #define BIRD_SAFE_DISTACE (XSize/2) #else #define CACTUS_SAFE_DISTANCE 10 #define BIRD_SAFE_DISTACE 9 #endif #define last_is_far() (x_cactus[last_active_cactus]RIGHT_END_OF_TERRAIN-3) #define is_cactus_available() (first_available_cactusFINAL_LOW_COLLISION_THRESHOLD)) { i=0; while((iFINAL_LOW_COLLISION_THRESHOLD)) { i=0; while((i18 #if !defined(TINY_GAME) #define GAME_OVER_X XSize/2-9 #else #define GAME_OVER_X XSize/2-9 #endif #else #define GAME_OVER_X 0 #endif #define GAME_OVER_Y 4 #if XSize>=20 #define GAME_OVER_STRING "G A M E O V E R" #else #define GAME_OVER_STRING "GAME OVER" #endif #if YSize>=10 #define ABOVE_DINO 8 #elif YSize>=8 #define ABOVE_DINO 6 #else #define ABOVE_DINO 3 #endif void handle_game_over(void) { uint8_t i; uint8_t j; // _XL_DELETE(X_DINO,Y_DINO); for(i=1;ihiscore) { hiscore = score; } #if !defined(TINY_GAME) if(level>hilevel) { hilevel = level; } #endif } void initialize_player(void) { // last_state = 0; state = 0; dead = 0; score = 0; } void display_level(void) { _XL_PRINTD(LEVEL_X+6, LEVEL_Y,2,level); } #if !defined(TINY_GAME) void handle_game_start(void) { uint8_t start; // uint8_t input; start = 0; counter = 0; _XL_CLEAR_SCREEN(); _XL_REFRESH(); display_score(); display_hiscore(); #if YSize>=10 draw_terrain(); #endif draw_cacti(); _XL_SLOW_DOWN(10*_XL_SLOW_DOWN_FACTOR); _XL_SET_TEXT_COLOR(_XL_WHITE); _XL_PRINT(LEVEL_X+1, 0, "TREX"); _XL_PRINT(LEVEL_X+1+1,1, "BY"); _XL_PRINT(LEVEL_X+1-4,2, "FABRIZIO CARUSO"); display_hilevel(); _XL_SLOW_DOWN(10*_XL_SLOW_DOWN_FACTOR); _XL_PRINT(XSize/2-6, YSize/2-3, PRESS_TO_FIRE); _XL_SLOW_DOWN(10*_XL_SLOW_DOWN_FACTOR); draw_jump_dino_0(0); _XL_REFRESH(); x_bird = RIGHT_END_OF_TERRAIN; y_bird = Y_DINO-1; while(!start || x_bird>LEFT_END_OF_TERRAIN) { ++counter; // input = _XL_INPUT(); // if(_XL_FIRE(input)) if(_XL_FIRE(_XL_INPUT())) { start = 1; } if(x_bird>LEFT_END_OF_TERRAIN) { if(counter&1) { --x_bird; } if(counter&1) { _XL_DELETE(x_bird+2,y_bird); _XL_DRAW(x_bird,y_bird,RIGHT_BIRD_0,_XL_WHITE); _XL_DRAW(x_bird+1,y_bird,RIGHT_BIRD_1,_XL_WHITE); } else { _XL_DRAW(x_bird,y_bird,LEFT_BIRD_0,_XL_WHITE); _XL_DRAW(x_bird+1,y_bird,LEFT_BIRD_1,_XL_WHITE); } } else { _XL_DELETE(x_bird,y_bird); _XL_DELETE(x_bird+1,y_bird); x_bird = RIGHT_END_OF_TERRAIN; y_bird = (uint8_t) (Y_DINO-1-2*((_XL_RAND())&1)); } if(start) { _XL_SLOW_DOWN(2*_XL_SLOW_DOWN_FACTOR); } else { _XL_SLOW_DOWN(6*_XL_SLOW_DOWN_FACTOR); } _XL_WAIT_VSYNC(); _XL_REFRESH(); } _XL_DELETE(x_bird,y_bird); _XL_DELETE(x_bird+1,y_bird); delete_cacti(); _XL_PRINT(LEVEL_X+1+1,1, " "); _XL_PRINT(LEVEL_X+1-4,2, " "); _XL_PRINT(XSize/2-6, YSize/2-3, DELETE_PRESS); _XL_PRINT(LEVEL_X,LEVEL_Y, "LEVEL"); display_level(); _XL_REFRESH(); } #else void handle_game_start(void) { _XL_CLEAR_SCREEN(); _XL_REFRESH(); counter = 0; display_score(); display_hiscore(); draw_terrain(); // draw_cacti(); _XL_SLOW_DOWN(10*_XL_SLOW_DOWN_FACTOR); _XL_SET_TEXT_COLOR(_XL_WHITE); _XL_PRINT(LEVEL_X+1, 0, "TREX"); // _XL_PRINT(LEVEL_X+1+1,1, "BY"); _XL_PRINT(LEVEL_X+1-4,2, "FABRIZIO CARUSO"); _XL_PRINT(LEVEL_X,LEVEL_Y, "LEVEL"); display_level(); _XL_WAIT_FOR_INPUT(); _XL_PRINT(LEVEL_X+1+1,1, " "); _XL_PRINT(LEVEL_X+1-4,2, " "); _XL_REFRESH(); } #endif #define LEVEL_SIZE 256U #if !defined(TINY_GAME) void birdAndTwoCacti(void) { level_bird = 1; level_cacti = 2; } void birdAndThreeCacti(void) { level_bird = 1; level_cacti = 3; } #endif #if !defined(TINY_GAME) void activate_level(void) { set_speed = 1; switch(level) { case 1: level_bird = 0; level_cacti = 1; slowdown_factor = 20; break; case 2: level_bird = 1; level_cacti = 1; slowdown_factor = 19; break; case 3: birdAndTwoCacti(); slowdown_factor = 18; break; case 4: birdAndTwoCacti(); slowdown_factor = 16; break; case 5: birdAndTwoCacti(); slowdown_factor = 15; break; case 6: birdAndTwoCacti(); slowdown_factor = 14; break; case 7: birdAndThreeCacti(); slowdown_factor = 14; break; case 8: birdAndThreeCacti(); slowdown_factor = 13; break; case 9: birdAndThreeCacti(); slowdown_factor = 12; break; case 10: birdAndThreeCacti(); slowdown_factor = 11; break; case 11: case 12: birdAndThreeCacti(); slowdown_factor = 10; break; case 13: case 14: case 15: birdAndThreeCacti(); slowdown_factor = 9; break; case 16: case 17: case 18: case 19: birdAndThreeCacti(); slowdown_factor = 8; break; case 20: case 21: case 22: case 23: case 24: birdAndThreeCacti(); slowdown_factor = 7; break; case 25: case 26: case 27: case 28: case 29: birdAndThreeCacti(); slowdown_factor = 6; break; default: birdAndThreeCacti(); slowdown_factor = 5; // counter = 0; } } #else void activate_level(void) { set_speed = 1; if(level<3) { level_cacti = 2; slowdown_factor = 16; } else if(level<=11) { level_cacti = 3; slowdown_factor = 17-level; } else { level_cacti=3; slowdown_factor = 5; } // slowdown_factor = 20; } #endif void handle_level(void) { if(!counter) { if(level=17 #define REMAINING_WORD_X ((LEVEL_X)-4) #else #define REMAINING_WORD_X ((LEVEL_X)-3) #endif #if XSize<17 #define HI_X 6 #elif XSize<22 #define HI_X (REMAINING_WORD_X-6) #else #define HI_X (((REMAINING_WORD_X)/2)) #endif #define HI_Y 0U #define SLOT_X_SPACING 2U #if YSize>=12 #define SLOT_Y_SPACING 2U #else #define SLOT_Y_SPACING 1U #endif #define BONUS_HEIGHT 2U // TODO: Maybe this should depend on the parity of XSize #define SCORE_X 1U #define BONUS_POINTS 100U // remaining = 9 -> max_level_count = INITIAL_MAX_LEVEL_COUNT/level + (remaining x 8) // level 1 with 3 remaining words: (240-72)/1 + (3x8) = 168 + 27 = 195 // level 1 with 1 remaining word : (240-72)/1 + (1x8) = 168 + 9 = 177 // // level 2 with 4 remaining words: (240-72)/2 + (4x8) = 84 + 32 = 116 // level 2 with 1 remaining word : (240-72)/2 + (1x8) = 84 + 9 = 93 // // level 3 with 9 remaining words: (240-72)/3 + (5x8) = 56 + 40 = 106 // level 3 with 1 remaining word : (240-72)/3 + (1x8) = 56 + 9 = 65 // ..... // level 9 with 9 remaining words: (240-72)/9 + (9x8) = 18 + 72 = 90 // level 9 with 1 remaining word : (240-72)/9 + (1x8) = 18 + 9 = 27 #define INITIAL_MAX_LEVEL_COUNT (240U-72U) #define INITIAL_LEVEL 1U #define LAST_LEVEL 9U #include "dictionary.h" uint8_t player_x; uint8_t alive; uint8_t slot_index; uint8_t matrix[WORD_SIZE][MAX_HEIGHT]; uint8_t matrix_height[WORD_SIZE]; uint8_t counter; uint8_t first_index; uint8_t last_index; uint16_t points; uint16_t record; uint8_t level; uint8_t remaining_words; uint8_t max_level_counter; uint8_t low_letter_bonus; uint8_t player_display_refresh; uint8_t precomputed_letter[NO_OF_PRECOMPUTED_LETTERS]; uint8_t next_letter_index; uint8_t aux; // Used to swap values in several functions // First letter position indices extern const uint16_t dictionary_index[ALPHABET_SIZE+1]; const uint8_t border_tile[4] = {BORDER_TILE0, BORDER_TILE1, BORDER_TILE2, BORDER_TILE3}; // 16 most common letters in English 5-letter words // E A R I O T N S L C U D P M H Y const char *letter = "EARIOTNSLCUDPMHY"; const uint8_t LETTER_COLOR[ALPHABET_SIZE/4] = {_XL_WHITE, _XL_YELLOW, _XL_CYAN, _XL_GREEN }; // TODO: Better compute LETTERS_X // #if XSize>=40 // #define LETTERS_X 2 // #else // #define LETTERS_X 2 // #endif #if XSize>17 #define LETTERS_X XSize/2-7 #else #define LETTERS_X 0 #endif #if YSize<=18 #define LETTERS_Y 1 #else #define LETTERS_Y 3 #endif #if XSize>40 #define LETTERS_BIT_MASK 7 #elif XSize>=24 #define LETTERS_BIT_MASK 3 #else #define LETTERS_BIT_MASK 1 #endif #define player_slot() \ player_x-1 void short_pause(void) { _XL_SLOW_DOWN(_XL_SLOW_DOWN_FACTOR); } void tiny_pause(void) { _XL_SLOW_DOWN(_XL_SLOW_DOWN_FACTOR/8); } void one_second_pause(void) { _XL_SLEEP(1); } #if XSize>17 && YSize>16 #define DISPLAY_LETTERS_X 2 void display_letters(void) { uint8_t i; // aux: offset _XL_SET_TEXT_COLOR(_XL_YELLOW); for(i=0;i=12 #define LOWER_SPACING 0 #else #define LOWER_SPACING 1 #endif // uint8_t y_slot(uint8_t y) { return START_Y-SLOT_Y_SPACING*y+LOWER_SPACING; } void draw_letter(uint8_t x, uint8_t y) { uint8_t letter_index = matrix[x][y]; _XL_SET_TEXT_COLOR(LETTER_COLOR[letter_index>>2]); _XL_CHAR(x_slot(x),y_slot(y),letter[letter_index]); } // TODO: Maybe this could be optimized #define draw_cross(x) \ do \ { \ _XL_DRAW(x_slot(x),START_Y+LOWER_SPACING,CROSS_TILE,_XL_RED); \ } while(0) // TODO: Maybe this could be optimized void draw_crosses(void) { uint8_t i; for(i=0;i>3)); height = matrix_height[slot_index]; if(next_letter_index0;--i) { matrix[i][0] = matrix[i-1][0]; } matrix[0][0] = aux; } void up_rotate_column(void) { // uint8_t old_top; // aux: old_top uint8_t i; _XL_TICK_SOUND(); counter+=4; aux = matrix[player_slot()][matrix_height[player_slot()]-1]; for(i=matrix_height[player_slot()]-1;i>0;--i) { matrix[player_slot()][i] = matrix[player_slot()][i-1]; } matrix[player_slot()][0] = aux; } void down_rotate_column(void) { // uint8_t old_bottom; // aux: old_bottom uint8_t i; _XL_TICK_SOUND(); counter+=4; aux = matrix[player_slot()][0]; for(i=0;i 3 point // 'O', 'T', 'N', 'S' , -> 7 points // 'L', 'C', 'U', 'D', -> 11 points // 'P', 'M', 'H', 'Y' -> 15 points uint8_t word_score(void) { uint8_t score = 0; uint8_t i; for(i=0;i>2)<<1); } return score; } uint8_t first_letter(uint16_t index) { uint8_t i=0; while(1) // We know that we will exit with return { if(indexlast_index and it returns 0 uint8_t binary_search(uint16_t search_word, uint16_t first_index, uint16_t last_index) { uint16_t middle_index; uint16_t middle_word; while(last_index>=first_index) { middle_index = (first_index+last_index)/2; middle_word = dictionary[middle_index]; if(dictionary[middle_index]==search_word) { return 1; } else if(middle_word17 #define SCORE_X_OFFSET 2 #else #define SCORE_X_OFFSET 0 #endif void display_score(void) { _XL_SET_TEXT_COLOR(_XL_WHITE); _XL_PRINTD(SCORE_X+SCORE_X_OFFSET,0,4,points); } void increase_score(uint8_t value) { _XL_ZAP_SOUND(); points+=value; display_score(); } void remove_bottom_word(void) { uint8_t i; uint8_t j; // uint8_t height ; low_letter_bonus = remaining_words; for(i=0;iBONUS_HEIGHT) { low_letter_bonus = 0; } // _XL_PRINTD(XSize-3,YSize-1,2,matrix_height[i]); // _XL_WAIT_FOR_INPUT(); } display_matrix(); } void handle_input(void) { uint8_t input; input = _XL_INPUT(); if(_XL_LEFT(input)) { if(player_x > MIN_PLAYER_X) { delete_player(); --player_x; display_player(); tiny_pause(); } else { display_horizontal_left_player(LEFT_ARROW_TILE); right_rotate_row(); display_bottom_row(); } } else if(_XL_RIGHT(input)) { if((player_x < MAX_PLAYER_X)) { delete_player(); ++player_x; display_player(); tiny_pause(); } else { display_horizontal_right_player(RIGHT_ARROW_TILE); left_rotate_row(); display_bottom_row(); } } else if(_XL_UP(input) && player_x>MIN_PLAYER_X && player_xMIN_PLAYER_X && player_x17 #define title_borders() display_borders(BORDER_OFFSET, BORDER_TILE1) #else #define title_borders() #endif #define title_screen() \ do \ { \ _XL_CLEAR_SCREEN(); \ \ display_record((XSize/2)-2); \ \ _XL_SET_TEXT_COLOR(_XL_YELLOW); \ \ _XL_PRINT(XSize/2-5,YSize/2-7,"V E R B I X"); \ \ _XL_SET_TEXT_COLOR(_XL_WHITE); \ _XL_PRINT(XSize/2-7,YSize/2-5,"FABRIZIO CARUSO"); \ \ _XL_SET_TEXT_COLOR(_XL_RED); \ _XL_PRINT(XSize/2-7,YSize/2-1, "FIND WORDS WITH"); \ _XL_SET_TEXT_COLOR(_XL_CYAN); \ _XL_PRINT(LETTERS_X,YSize/2+2,letter); \ \ title_borders(); \ \ _XL_SET_TEXT_COLOR(_XL_WHITE); \ control_instructions(); \ wait_for_input(); \ _XL_CLEAR_SCREEN(); \ display_letter_values(); \ } while(0) #define initialize_input_output() \ do \ { \ _XL_INIT_GRAPHICS(); \ \ _XL_INIT_INPUT(); \ \ _XL_INIT_SOUND(); \ } while(0) #define initialize_game() \ do \ { \ points = 0; \ level = INITIAL_LEVEL; \ alive = 1; \ } while(0) #define display_level() \ do \ { \ _XL_DRAW(LEVEL_X,LEVEL_Y,LV_TILE,_XL_CYAN); \ _XL_SET_TEXT_COLOR(_XL_WHITE); \ _XL_PRINTD(LEVEL_X+1,LEVEL_Y,1,level); \ } while(0) // #if defined(DEBUG) // void print_word(uint8_t x, uint8_t y, uint16_t dictionary_index) // { // uint8_t i; // _XL_CHAR(x,y,letter[first_letter(dictionary_index)]); // for(i=1;i>((4-i)*4))&0x000F]); // } // } // #endif // TODO: check whether XOR trick is better void swap(uint8_t i, uint8_t j) { // aux: swap variable aux = precomputed_letter[i]; precomputed_letter[i] = precomputed_letter[j]; precomputed_letter[j] = aux; } // Shuffle with Fisher-Yates algorithm void shuffle(void) { uint8_t i; for(i=NO_OF_PRECOMPUTED_LETTERS-1;i>0;--i) { swap(i,(uint8_t) (_XL_RAND())%i); } } void display_record(uint8_t x) { _XL_DRAW(x,HI_Y,HI_TILE, _XL_RED); _XL_SET_TEXT_COLOR(_XL_WHITE); _XL_PRINTD(x+1,HI_Y,4,record); } // Score for guessed word (less common letters give more points) // 'E', 'A', 'R', 'I', -> 1 point // 'O', 'T', 'N', 'S' , -> 4 points // 'L', 'C', 'U', 'D', -> 7 points // 'P', 'M', 'H', 'Y' -> 10 points #define INSTRUCTIONS_START_Y ((YSize)/2-3) #define INSTRUCTIONS_START_X ((XSize)/2-3) #if XSize>17 #define letter_values_borders() display_borders(BORDER_OFFSET+4,BORDER_TILE3); #else #define letter_values_borders() display_borders(2,BORDER_TILE3); #endif #if defined(NO_LETTER_VALUES) #define display_letter_values() #else void display_letter_values(void) { letter_values_borders(); _XL_SET_TEXT_COLOR(_XL_WHITE); _XL_PRINTD(INSTRUCTIONS_START_X+6,INSTRUCTIONS_START_Y, 1, 3U); _XL_PRINTD(INSTRUCTIONS_START_X+6,INSTRUCTIONS_START_Y+2,1, 7U); _XL_PRINTD(INSTRUCTIONS_START_X+5,INSTRUCTIONS_START_Y+4,2,11U); _XL_PRINTD(INSTRUCTIONS_START_X+5,INSTRUCTIONS_START_Y+6,2,15U); _XL_PRINT(INSTRUCTIONS_START_X,INSTRUCTIONS_START_Y, "EARI"); _XL_SET_TEXT_COLOR(_XL_YELLOW); _XL_PRINT(INSTRUCTIONS_START_X,INSTRUCTIONS_START_Y+2, "OTNS"); _XL_SET_TEXT_COLOR(_XL_CYAN); _XL_PRINT(INSTRUCTIONS_START_X,INSTRUCTIONS_START_Y+4, "LCUD"); _XL_SET_TEXT_COLOR(_XL_GREEN); _XL_PRINT(INSTRUCTIONS_START_X,INSTRUCTIONS_START_Y+6, "PMHY"); _XL_PRINT(INSTRUCTIONS_START_X, INSTRUCTIONS_START_Y-2, "POINTS"); _XL_WAIT_FOR_INPUT(); _XL_CLEAR_SCREEN(); } #endif #if XSize>17 #define display_score_text() \ do \ { \ _XL_DRAW(SCORE_X,0,SCORE_LHS_TILE,_XL_GREEN); \ _XL_DRAW(SCORE_X+1,0,SCORE_RHS_TILE,_XL_GREEN); \ } while(0) #else #define display_score_text() #endif #define display_score_glyphs() \ do \ { \ display_score_text(); \ _XL_DRAW(REMAINING_WORD_X,REMAINING_WORD_Y,LEFT_LHS_TILE,_XL_YELLOW); \ _XL_DRAW(REMAINING_WORD_X+1,REMAINING_WORD_Y,LEFT_RHS_TILE,_XL_YELLOW); \ } while(0) #if XSize>40 #define BONUS_LINE_SIZE 6 #elif XSize>=40 #define BONUS_LINE_SIZE 5 #elif XSize>=32 #define BONUS_LINE_SIZE 4 #elif XSize>20 #define BONUS_LINE_SIZE 3 #elif XSize>17 #define BONUS_LINE_SIZE 2 #else #define BONUS_LINE_SIZE 1 #endif void display_walls(void) { uint8_t i; #if YSize>=12 uint8_t j; uint8_t horizontal_wall_tile; #endif uint8_t vertical_wall_tile; #if !defined(_XL_NO_COLOR) uint8_t wall_color; #endif #if YSize>=12 #define HEIGHT_FACTOR 2 #else #define HEIGHT_FACTOR 1 #endif for(i=0;i4) { #if YSize>=12 horizontal_wall_tile = HORIZONTAL_WALL_TILE; #endif vertical_wall_tile = VERTICAL_WALL_TILE; #if !defined(_XL_NO_COLOR) wall_color = _XL_GREEN; #endif } else if(i>2) { #if YSize>=12 horizontal_wall_tile = HORIZONTAL_BONUS_WALL_TILE; #endif vertical_wall_tile = VERTICAL_BONUS_WALL_TILE; #if !defined(_XL_NO_COLOR) wall_color = _XL_YELLOW; #endif } else { #if YSize>=12 horizontal_wall_tile = HORIZONTAL_BAR_TILE; #endif vertical_wall_tile = VERTICAL_BAR_TILE; #if !defined(_XL_NO_COLOR) wall_color = _XL_RED; #endif } _XL_DRAW(START_X-1,START_Y-i+1,vertical_wall_tile, wall_color); _XL_DRAW(START_X-1+WORD_SIZE*2,START_Y-i+1,vertical_wall_tile, wall_color); #if YSize>=12 for(j=0;j>((4U-j)*4U))&0x000F); } } for(i=SIZE_OF_PRECOMPUTED_WORDS;i=max_level_counter) \ { \ drop_letter(); \ counter=0; \ } \ } while(0) #define handle_record_update() \ do \ { \ if(points>record) \ { \ record = points; \ } \ } while(0) // CC65 produces broken code with an infinite loop if we use (level>>SMALL_SCREEN_REDUCTION) #define initial_letter_drop() \ do \ { \ uint8_t i; \ \ for(i=0;i<(uint8_t) MIN_INITIAL_DROP + (level/(1+SMALL_SCREEN_REDUCTION));++i) \ { \ drop_letter(); \ short_pause(); \ } \ } while(0) #define handle_level_end() \ do \ { \ \ if(alive) \ { \ if(low_letter_bonus) \ { \ _XL_EXPLOSION_SOUND(); \ _XL_SET_TEXT_COLOR(_XL_WHITE); \ _XL_PRINT(START_X-1, START_Y+2, "EXTRA BONUS"); \ one_second_pause(); \ _XL_WAIT_FOR_INPUT(); \ } \ \ for(aux=0;aux' #define _TILE_5 (unsigned char) '|' #define _TILE_6 (unsigned char) 'H' #define _TILE_7 (unsigned char) '|' #define _TILE_8 (unsigned char) '-' #define _TILE_9 (unsigned char) 'L' #define _TILE_10 (unsigned char) 'W' #define _TILE_11 (unsigned char) '-' #define _TILE_12 (unsigned char) '|' #define _TILE_13 (unsigned char) '-' #define _TILE_14 (unsigned char) 'S' #define _TILE_15 (unsigned char) '|' #define _TILE_16 (unsigned char) 'C' #define _TILE_17 (unsigned char) 'D' #define _TILE_18 (unsigned char) '|' #define _TILE_19 (unsigned char) 'X' #define _TILE_20 (unsigned char) '$' #define _TILE_21 (unsigned char) '-' #define _TILE_22 (unsigned char) '|' #define _TILE_23 (unsigned char) '-' #define _TILE_24 (unsigned char) '|' #define _TILE_25 (unsigned char) '|' #define _TILE_26 (unsigned char) '*' #endif // _ATARI7800_CHAR_TILES_H ================================================ FILE: src/games/verbix/tiles/ASCII/atari7800/atari7800_no_color_char_tiles.h ================================================ #ifndef _ATARI7800_NO_COLOR_CHAR_TILES_H #define _ATARI7800_NO_COLOR_CHAR_TILES_H #define _ATARI_7800_VERTICAL_LINE 179 #define _ATARI_7800_BORDER_0 176 #define _ATARI_7800_BORDER_1 177 #define _ATARI_7800_BORDER_2 178 #define _ATARI_7800_BORDER_3 15 #define _ATARI_7800_EMPTY 240 #define _ATARI_7800_HORIZONTAL_LINE 196 #define DIAMOND 42 #define _TILE_0 (unsigned char) _ATARI_7800_VERTICAL_LINE #define _TILE_1 (unsigned char) _ATARI_7800_EMPTY #define _TILE_2 (unsigned char) '-' #define _TILE_3 (unsigned char) 27 #define _TILE_4 (unsigned char) 26 #define _TILE_5 (unsigned char) 24 //'^' #define _TILE_6 (unsigned char) 'H' #define _TILE_7 (unsigned char) 25 #define _TILE_8 (unsigned char) '-' #define _TILE_9 (unsigned char) 'L' #define _TILE_10 (unsigned char) 'W' #define _TILE_11 (unsigned char) _ATARI_7800_HORIZONTAL_LINE //'-' #define _TILE_12 (unsigned char) _ATARI_7800_VERTICAL_LINE #define _TILE_13 (unsigned char) _ATARI_7800_HORIZONTAL_LINE //'-' #define _TILE_14 (unsigned char) 'S' #define _TILE_15 (unsigned char) _ATARI_7800_VERTICAL_LINE #define _TILE_16 (unsigned char) 'C' #define _TILE_17 (unsigned char) 'D' #define _TILE_18 (unsigned char) _ATARI_7800_BORDER_0 #define _TILE_19 (unsigned char) 'X' #define _TILE_20 (unsigned char) '$' #define _TILE_21 (unsigned char) '-' #define _TILE_22 (unsigned char) _ATARI_7800_VERTICAL_LINE #define _TILE_23 (unsigned char) _ATARI_7800_HORIZONTAL_LINE //'-' #define _TILE_24 (unsigned char) _ATARI_7800_BORDER_1 #define _TILE_25 (unsigned char) _ATARI_7800_BORDER_2 #define _TILE_26 (unsigned char) _ATARI_7800_BORDER_3 #endif // _ATARI7800_NO_COLOR_CHAR_TILES_H ================================================ FILE: src/games/verbix/tiles/ASCII/char_tiles.h ================================================ #ifndef _CHAR_TILES_H #define _CHAR_TILES_H #if defined(__TARGET_SPECIFIC_ASCII) #if defined(__ZX81__) #include "zx81/zx81_char_tiles.h" #elif defined(__MC10__) #include "mc10/mc10_char_tiles.h" #elif defined(__VZ__) #include "vz/vz_char_tiles.h" #elif defined(__ATARI7800__) && !defined(_XL_NO_COLOR) #include "atari7800/atari7800_char_tiles.h" #elif defined(__ATARI7800__) && defined(_XL_NO_COLOR) #include "atari7800/atari7800_no_color_char_tiles.h" #else ERROR #endif #else #define _TILE_0 (unsigned char) '|' #define _TILE_1 (unsigned char) '.' #define _TILE_2 (unsigned char) '-' #define _TILE_3 (unsigned char) '<' #define _TILE_4 (unsigned char) '>' #define _TILE_5 (unsigned char) '^' #define _TILE_6 (unsigned char) 'H' #define _TILE_7 (unsigned char) 'V' #define _TILE_8 (unsigned char) '-' #define _TILE_9 (unsigned char) 'L' #define _TILE_10 (unsigned char) 'W' #define _TILE_11 (unsigned char) '=' #define _TILE_12 (unsigned char) '|' #define _TILE_13 (unsigned char) '-' #define _TILE_14 (unsigned char) 'S' #define _TILE_15 (unsigned char) '|' #define _TILE_16 (unsigned char) 'C' #define _TILE_17 (unsigned char) 'D' #define _TILE_18 (unsigned char) 'I' #define _TILE_19 (unsigned char) 'X' #define _TILE_20 (unsigned char) '$' #define _TILE_21 (unsigned char) '-' #define _TILE_22 (unsigned char) '|' #define _TILE_23 (unsigned char) '=' #define _TILE_24 (unsigned char) '|' #define _TILE_25 (unsigned char) '|' #define _TILE_26 (unsigned char) '|' #endif #endif // _CHAR_TILES_H ================================================ FILE: src/games/verbix/tiles/ASCII/mc10/mc10_char_tiles.h ================================================ #ifndef _MC10_CHAR_TILES_H #define _MC10_CHAR_TILES_H #define MC10_GREEN_OFFSET 0 #define MC10_YELLOW_OFFSET 16 #define MC10_BLUE_OFFSET 32 #define MC10_RED_OFFSET 48 #define MC10_WHITE_OFFSET 64 #define MC10_CYAN_OFFSET 80 #define MC10_PURPLE_OFFSET 96 #define MC10_ORANGE_OFFSET 112 #define CHEQUERED_BASE 137 #define BLOCK_BASE 143 #define GREEN_CHEQUERED (CHEQUERED_BASE+MC10_GREEN_OFFSET) #define YELLOW_CHEQUERED (CHEQUERED_BASE+MC10_YELLOW_OFFSET) #define BLUE_CHEQUERED (CHEQUERED_BASE+MC10_BLUE_OFFSET) #define RED_CHEQUERED (CHEQUERED_BASE+MC10_RED_OFFSET) #define WHITE_CHEQUERED (CHEQUERED_BASE+MC10_WHITE_OFFSET) #define CYAN_CHEQUERED (CHEQUERED_BASE+MC10_CYAN_OFFSET) #define RED_BLOCK (BLOCK_BASE+MC10_RED_OFFSET) #define CYAN_BLOCK (BLOCK_BASE+MC10_CYAN_OFFSET) #define ORANGE_BLOCK (BLOCK_BASE+MC10_ORANGE_OFFSET) #define YELLOW_BLOCK (BLOCK_BASE+MC10_YELLOW_OFFSET) #define T_LETTER 20 #define V_LETTER 22 #define EXPLAMATION_MARK 33 #define DOUBLE_QUOTES 34 #define COLUMNS 58 #define DIAMOND 42 #define _TILE_0 (unsigned char) EXPLAMATION_MARK #define _TILE_1 (unsigned char) COLUMNS #define _TILE_2 (unsigned char) '-' #define _TILE_3 (unsigned char) '<' #define _TILE_4 (unsigned char) '>' #define _TILE_5 (unsigned char) T_LETTER #define _TILE_6 (unsigned char) 'H' #define _TILE_7 (unsigned char) V_LETTER #define _TILE_8 (unsigned char) '-' #define _TILE_9 (unsigned char) 'L' #define _TILE_10 (unsigned char) 'W' #define _TILE_11 (unsigned char) RED_BLOCK #define _TILE_12 (unsigned char) CYAN_BLOCK #define _TILE_13 (unsigned char) CYAN_BLOCK #define _TILE_14 (unsigned char) 'S' #define _TILE_15 (unsigned char) RED_BLOCK #define _TILE_16 (unsigned char) 'C' #define _TILE_17 (unsigned char) 'D' #define _TILE_18 (unsigned char) 217 #define _TILE_19 (unsigned char) ORANGE_BLOCK #define _TILE_20 (unsigned char) DIAMOND #define _TILE_21 (unsigned char) 150 #define _TILE_22 (unsigned char) YELLOW_BLOCK #define _TILE_23 (unsigned char) YELLOW_BLOCK #define _TILE_24 (unsigned char) 137 #define _TILE_25 (unsigned char) 166 #define _TILE_26 (unsigned char) 233 #endif // _MC10_CHAR_TILES_H ================================================ FILE: src/games/verbix/tiles/ASCII/vz/vz_char_tiles.h ================================================ #ifndef _VZ_CHAR_TILES_H #define _VZ_CHAR_TILES_H #define MC10_GREEN_OFFSET 0 #define MC10_YELLOW_OFFSET 16 #define MC10_BLUE_OFFSET 32 #define MC10_RED_OFFSET 48 #define MC10_WHITE_OFFSET 64 #define MC10_CYAN_OFFSET 80 #define MC10_PURPLE_OFFSET 96 #define MC10_ORANGE_OFFSET 112 #define CHEQUERED_BASE 137 #define BLOCK_BASE 143 #define GREEN_CHEQUERED (CHEQUERED_BASE+MC10_GREEN_OFFSET) #define YELLOW_CHEQUERED (CHEQUERED_BASE+MC10_YELLOW_OFFSET) #define BLUE_CHEQUERED (CHEQUERED_BASE+MC10_BLUE_OFFSET) #define RED_CHEQUERED (CHEQUERED_BASE+MC10_RED_OFFSET) #define WHITE_CHEQUERED (CHEQUERED_BASE+MC10_WHITE_OFFSET) #define CYAN_CHEQUERED (CHEQUERED_BASE+MC10_CYAN_OFFSET) #define RED_BLOCK (BLOCK_BASE+MC10_RED_OFFSET) #define CYAN_BLOCK (BLOCK_BASE+MC10_CYAN_OFFSET) #define ORANGE_BLOCK (BLOCK_BASE+MC10_ORANGE_OFFSET) #define YELLOW_BLOCK (BLOCK_BASE+MC10_YELLOW_OFFSET) #define T_LETTER 20 #define V_LETTER 22 #define EXPLAMATION_MARK 33 #define DOUBLE_QUOTES 34 #define COLUMNS 58 #define DIAMOND 42 #define _TILE_0 (unsigned char) EXPLAMATION_MARK #define _TILE_1 (unsigned char) COLUMNS #define _TILE_2 (unsigned char) '-' #define _TILE_3 (unsigned char) '<' #define _TILE_4 (unsigned char) '>' #define _TILE_5 (unsigned char) T_LETTER #define _TILE_6 (unsigned char) 'H' #define _TILE_7 (unsigned char) V_LETTER #define _TILE_8 (unsigned char) '-' #define _TILE_9 (unsigned char) 'L' #define _TILE_10 (unsigned char) 'W' #define _TILE_11 (unsigned char) RED_BLOCK #define _TILE_12 (unsigned char) CYAN_BLOCK #define _TILE_13 (unsigned char) CYAN_BLOCK #define _TILE_14 (unsigned char) 'S' #define _TILE_15 (unsigned char) RED_BLOCK #define _TILE_16 (unsigned char) 'C' #define _TILE_17 (unsigned char) 'D' #define _TILE_18 (unsigned char) 217 #define _TILE_19 (unsigned char) ORANGE_BLOCK #define _TILE_20 (unsigned char) DIAMOND #define _TILE_21 (unsigned char) 150 #define _TILE_22 (unsigned char) YELLOW_BLOCK #define _TILE_23 (unsigned char) YELLOW_BLOCK #define _TILE_24 (unsigned char) 137 #define _TILE_25 (unsigned char) 166 #define _TILE_26 (unsigned char) 233 #endif // _VZ_CHAR_TILES_H ================================================ FILE: src/games/verbix/tiles/ASCII/zx81/zx81_char_tiles.h ================================================ #ifndef _ZX81_CHAR_TILES_H #define _ZX81_CHAR_TILES_H #define _BLACK_BLOCK 64u #define _BOTTOM_GREY_BLOCK 95u #define _GREY_BLOCK 35u #define _INVERSE_PLUS 38u #define _TILE_0 (unsigned char) 'I' #define _TILE_1 (unsigned char) '.' #define _TILE_2 (unsigned char) '-' #define _TILE_3 (unsigned char) '<' #define _TILE_4 (unsigned char) '>' #define _TILE_5 (unsigned char) 'T' #define _TILE_6 (unsigned char) 'H' #define _TILE_7 (unsigned char) 'V' #define _TILE_8 (unsigned char) '-' #define _TILE_9 (unsigned char) 'L' #define _TILE_10 (unsigned char) 'W' #define _TILE_11 (unsigned char) _INVERSE_PLUS #define _TILE_12 (unsigned char) _BLACK_BLOCK #define _TILE_13 (unsigned char) _BLACK_BLOCK #define _TILE_14 (unsigned char) 'S' #define _TILE_15 (unsigned char) _BLACK_BLOCK #define _TILE_16 (unsigned char) 'C' #define _TILE_17 (unsigned char) 'D' #define _TILE_18 (unsigned char) _GREY_BLOCK #define _TILE_19 (unsigned char) 'X' #define _TILE_20 (unsigned char) '$' #define _TILE_21 (unsigned char) '-' #define _TILE_22 (unsigned char) _BLACK_BLOCK #define _TILE_23 (unsigned char) _INVERSE_PLUS #define _TILE_24 (unsigned char) _GREY_BLOCK #define _TILE_25 (unsigned char) _GREY_BLOCK #define _TILE_26 (unsigned char) _GREY_BLOCK #endif // _ZX81_CHAR_TILES_H ================================================ FILE: src/games/verbix/words_16/a.txt ================================================ ached aches achoo acids acmes acned acnes acorn acres acrid acted actin actor acute adapt added adder addle adept adieu adios adman admen admit adopt adore adorn adult aerie ahead ahhhh ahold ahoys aided aider aides ailed aimed aimer aioli aired airer aisle aitch alarm alder aleph alert alias alien allay alley allot alloy aloes aloha alone aloud alpha altar alter altho altos alums amahs amass amend amens amide amine amino amiss amity ammos amour amped ample amply amuse amyls anded anent anile anima anion anise annas annoy annul annum anode anole anted antes antic antis antsy aorta apace apart apers aphid aphis apian apish apnea aport apple apply apron apses apsos aptly arced ardor areal areas arena arias arise arity armed armor aroma arose arras array arses arson artsy arums asana ascot ashen ashes aside aspen aspic assai assay assed asses asset aster astir astro atilt atlas atoll atoms atone atria attar attic audio audit aunts aurae aural auras auric autos ayins ================================================ FILE: src/games/verbix/words_16/c.txt ================================================ cacao cache cacti caddy cadet cadre cairn calla calls calms camel cameo campo camps campy canal candy caned caner canes canna canny canoe canon canst canto cants caped caper capes capon capos carat cards cared carer cares caret carne carny carol carom caron carps carpy carry carte carts casas cased cases caste casts casus catch cater catty cauls cause cease cedar ceded ceder cedes ceils cello cells cento cents chain chair champ chant chaos chaps chard charm chars chart chary chase chasm chats cheap cheat cheep cheer chert chess chest chide child chile chili chill chime chimp china chine chino chins chips chirp chits choir chomp choos chops chord chore chose chump chums churl churn chute cider cilia cills cinch circa cirri cited cites clads claim clamp clams clans claps clash clasp class clays clean clear cleat clime clips clods clomp clone clops close cloth clots cloud clout cloys clued clues clump coach coals coast coati coats cocas cocci cocoa cocos codas coded coder codes codon coeds cohos coils coins colas colds colic colon color colts comas comer comes comet comic comma comps conch condo coned cones coney conic cooch cooed cools coons coops coots coped coper copes copra copse coral cords cordy cored corer cores corms corns cornu corny corps coset costa costs cotes cotta couch could count coupe coups court couth coyer coyly coypu cramp crams crane craps crash crass crate cream credo creed creel creep creme crepe crept cress crest cried crier cries crime crimp crisp crits crocs crone crony croon crops cross croup crude cruds cruel cruet crump cruse crush crust crypt culls culpa cults cumin cunts cupid cuppa cuppy curds curdy cured curer cures curia curie curio curls curly curry curse cushy cusps cuspy cuter cutie cutup cycad cycle cynic cysts ================================================ FILE: src/games/verbix/words_16/compress.py ================================================ import sys def letter_index(letter): if letter=='e': return 0 elif letter=='a': return 1 elif letter=='r': return 2 elif letter=='i': return 3 elif letter=='o': return 4 elif letter=='t': return 5 elif letter=='n': return 6 elif letter=='s': return 7 elif letter=='l': return 8 elif letter=='c': return 9 elif letter=='u': return 10 elif letter=='d': return 11 elif letter=='p': return 12 elif letter=='m': return 13 elif letter=='h': return 14 elif letter=='y': return 15 else: return 16 def compress(word): return letter_index(word[3])+letter_index(word[2])*16+letter_index(word[1])*16*16+letter_index(word[0])*16*16*16 # MAIN FUNCTION if __name__ == '__main__': file_name = sys.argv[1] # Count valid words for example excluding empty lines word_count = 0 words = [] word_strings = [] # res = "" print("file name: " + file_name) with open(file_name) as f: lines = f.readlines() for line in lines: word = line[1:] if(len(word)>=4): compressed_word = compress(word) print(word[0:4] + "->" + str(compressed_word)) # print(compress(word)) # res = res + ", " + str(compressed_word) word_count+=1 words += [compressed_word] #print() print() # print(res[2:]) words.sort() for word in words: word_strings += [str(word)+"u"] print(str(word_strings)[1:-1].replace("'","")+",") print() print("Number of compressed words: " + str(word_count)) ================================================ FILE: src/games/verbix/words_16/d.txt ================================================ dacha daddy dados daily dairy daisy dales dally dames damns damps dance dandy dared darer dares darns darts dashy dated dater dates datum daunt deads deals dealt deans dears deary death decal decay decor decoy decry deeds deems deeps deice deism deist deity delay delis dells delta demit demon demos demur denim dense dents depot depth deter deuce dials diary diced dicer dices dicey dicot dicta dictu dicut diddy didos didot didst diems diest dieth diets dildo dills dilly dimer dimes dimly dinar dined diner dines dints diode dippy dipso direr dirts dirty disco discs dishy ditch ditto ditty dodos doers doest doeth doily dolce doled doles dolls dolly dolor dolts domed domes donee donna donor donut dooms doors doped doper dopes dopey dorms dosed doser doses doted doter dotes dotty douse doyen drain drama drams drape drays dread dream drear dress dried drier dries drill drily drips droid droll drone drool droop drops dross druid drums dryad dryer dryly duals ducal ducat duces duchy ducts duddy dudes duels duets dulls dully dulse dummy dumps dumpy dunce dunes dunno duomo duped duper dupes duple durst dusts dusty dutch dyads dyers dynes ================================================ FILE: src/games/verbix/words_16/e.txt ================================================ eared earls early earns earth eased easel eases easts eaten eater echos eclat edema edict edits educe eerie eider eland elans elate elder elect elide elite elope elude email emcee emend emery emirs emits emote empty enact ended ender endue enema enemy ennui enrol ensue enter entry epact epees ephah ephod epics epoch epsom erase erect erode erred error eruct erupt essay esses ester estop ether ethic ethos ethyl etude eyers eyrie ================================================ FILE: src/games/verbix/words_16/h.txt ================================================ hadda hades hadst hails hairs hairy haled haler hales hallo halls halma halos halts hames hammy hands handy haply happy hardy harem hares harms harps harpy harry harsh harts harum hasps haste hasty hatch hated hater hates hauls haunt haute hayed hayer hayey heads heady heals heaps heard hears heart heath heats heeds heels heerd heirs heist hello hells helms helps hemps hempy hence henna henry herds herem heres heron heros hider hides hilar hills hilly hilts hilum hinds hints hippo hippy hired hirer hires hitch hoard hoars hoary hocus hodad hoers hoist holds holed holer holes holey holly holon homed homer homes homey homme homos honed honer hones honey honor hooch hoods hooey hoops hoots hoped hoper hopes hoppy horde horns horny horse horsy hosed hoses hosts hotel hotly hound houri hours house hulas hullo hulls human humid humor humph humps humpy humus hunch hunts hurls hurly hurry hurts hussy hutch hydra hydro hyena hymen hymns hyped hyper hypes hypos ================================================ FILE: src/games/verbix/words_16/i.txt ================================================ icers ichor icier icily icons ideal ideas idiom idiot idled idler idles idols idyll idyls ileum ileus iliac ilium imams impel imply impro inane inapt incur indie inept inert inlay inlet inner inode input inset inter intra intro inure ioctl iodic ionic iotas irate irons irony isles islet issue itchy items ================================================ FILE: src/games/verbix/words_16/l.txt ================================================ laced lacer laces lacey laded laden lades ladle laird lairs laity lamas lamed lamer lames lamps lanai lance lands lanes lapel lapin lapis lapse larch lards lardy lased laser lases lasso lasts latch later lathe laths latin latus laude lauds layer layup leach leads leans leant leaps leapt learn lease leash least leech leers leery lemma lemme lemon lemur lends lento leper lepta letup liars licit liens liers liest lieth lilac lilts lilty limed limen limes limey limit limns limos limps lined linen liner lines lints linty lions lipid lippy liras lisle lisps lists liter lites lithe litho litre llama loads loams loamy loans loath local lochs locos locus lodes loess loins lolls lolly loner looms loons loony loops loopy loose loots loped loper lopes loppy lords lordy lores lorry loser loses lossy lotsa lotta lotto lotus louis louse lousy louts loyal luaus lucid lucre lulls lulus lumen lumps lumpy lunar lunch lunes lupus lurch lured lurer lures lurid lusts lusty luted lutes lycra lymph lynch lyres lyric ================================================ FILE: src/games/verbix/words_16/m.txt ================================================ maced macer maces macho macro madam madly mahua maids mails maims mains males malls malts malty mamas mamma mammy maned manes mania manic manly manna manor manse manta maple march mares maria marls marry marsh marts maser mashy mason masse masts match mated mater mates matey maths matte mauls mayor mayst meads meals mealy means meant meany meats meaty mecca mecum medal media medic meets melds melee melon melts memes memos mends menus mercy merit merry merse mesas mesne meson messy metal meted meter metes metre metro micas micro middy midis midst miens milch miler miles mills mimed mimeo mimer mimes mimic mimsy minas mince minds mined miner mines minim minis minor mints minus mired mires mirth miser missy mists misty miter mites mitre mitts moans moats mocha modal model modem modes modus mohel moire moist molal molar molas molds moldy moles molls molly molto molts momma mommy monad mondo money monic monte month mooch moods moody mooed moola moons moony moors moose moots moped moper mopes moral moray morel mores morns moron morph morts mosey mossy mosts motel motes motet moths mothy motor motto mould moult mound mount mourn mouse mousy mouth mrads mucho mucus muddy mulch mulct mules muley mulls mummy mumps munch muons mural mused muser muses mushy music musos mussy musta musts musty muted muter mutes mutts mylar mynah mynas myrrh myths ================================================ FILE: src/games/verbix/words_16/missing_words.txt ================================================ HINDI MAMES MAMED DIDNT SAMOA NORSE MORSE SCUMM Country names ================================================ FILE: src/games/verbix/words_16/n.txt ================================================ nacho nadir naiad nails named namer names nanny napes nappy narco narcs nards nares nasal nasty natal natch nates natty nears neath neato needs needy neons nerds nerdy nerts nests nicad nicer niche niece nihil nines ninny ninth nippy nisei niter nitro nitty nodal noddy nodes noels noire noise noisy nomad nonce nones nonny noons noose norms north nosed noses nosey notch noted noter notes nouns nuder nudes nudie nulls nurse nutsy nutty nylon nymph ================================================ FILE: src/games/verbix/words_16/o.txt ================================================ oared oases oasis oaten oaths occur ocean ocher ochre octal octet odder oddly odium odors odour ohhhh ohmic oiled oiler olden older oldie oleos olios omens omits oncet onion onset oodle oomph opals opens opera opine opium opted optic orals orate orcas order orlon ortho osier other otter ounce ousel ousts outdo outen outer outta ================================================ FILE: src/games/verbix/words_16/p.txt ================================================ paced pacer paces pacts paddy padre paean pails pains paint pairs paled paler pales palls pally palms palmy palsy pampa panda paned panel panes panic pansy pants panty papal papas paper pappy paras parch pards pared paren parer pares parry parse parts party pasha passe pasta paste pasts pasty patch paten pater pates paths patio patsy patty pause payed payee payer peace peach peals pearl pears pease peats peaty pecan pedal peels peens peeps peers pelts penal pence pends penes penis penny peons peony peppy perch perdu peril perms pesos pesto pests petal peter petit petri petty phase phial phone phony photo phyla piano picas picot piece piers pieta piety pilau piled piles pills pilot pimps pinch pined pines piney pinto pints pinup pions pious piped piper pipes pipet pismo pitas pitch piths pithy piton place plaid plain plait plane plans plant plash plasm plate plats playa plays plead pleas pleat plein plena plied plies plods plops plots ploys plume plump plums plumy plush plyer poach podia poems poesy poets point poise polar poled poler poles polio polis polls polly polos polyp pomps ponds pones pooch pooey poohs pools poops popes poppy porch pored pores porno ports posed poser poses poset posit posse poste posts potty pouch pound pours pouts prams prate prats prays preen preps press prest preys price pride pried prier pries prima prime primo primp prims print prior prise prism prods proem promo proms prone props prose prosy proud prude prune pruta pryer psalm pseud psoas pssst psych pulls pulps pulpy pulse pumas pumps punch punny punts pupae pupal pupas pupil puppy puree purer purls purrs purse purty pushy pussy putts putty pylon pyres ================================================ FILE: src/games/verbix/words_16/r.txt ================================================ raced racer races radar radii radio radon raids rails rains rainy raise rally ramps ranch rands randy rants raped raper rapes rapid rarer rasae rasps raspy rated rater rates raths ratio ratty rayed rayon reach react reads ready realm reals reams reaps rearm rears recap recta recto recur recut redid redip redly reeds reedy reels reins relay relet relic reman remap remit renal rends rente rents repay repel reply repro reran rerun resay reset resin rests retch retro retry reuse rheas rheum rhino rhyme rials riced ricer rices rider rides riled riles rille rills rimed rimer rimes rinds rinse riots ripen riper risen riser rises rites roach roads roams roans roars roast rodeo roids roils roily roles rolls roman romps rondo roods rooms roomy roost roots rooty roped roper ropes roses rosin rotor round rouse roust route routs royal ruche ruddy ruder ruins ruled ruler rules rumen rummy rumor rumps runes runic runny runts runty rupee rural ruses russe rusts rusty rutty ================================================ FILE: src/games/verbix/words_16/s.txt ================================================ sadly sails saint saith salad sales sally salon salsa salts salty sands sandy saner sappy saran saris sassy sated sates satin satyr sauce saucy sauna saute sayer scads scald scale scalp scaly scamp scams scans scant scare scarp scars scary scats scene scent schmo scion scold scone scoop scoot scope scops score scorn scour scout scram scrap scrim scrip scrod scrum scudi scudo scuds scull scums scuse seals seams seamy sears seats secco sects sedan seder sedum seeds seedy seems seeps seers seest seeth seine selah sells semen semis sends sense sepal sepia sepoy septa serum setup shade shads shady shahs shale shall shalt shame shams shape shard share sharp shays shear sheds sheen sheep sheer sheet shell sherd shied shier shies shill shims shine shins shiny ships shire shirr shirt shish shits shlep shmoo shnor shoal shoat shoed shoer shoes shone shoos shoot shops shore shorn short shots shout shred shuns shunt shush shute shuts shyer shyly sided sides sidle sills silly silos silts silty since sines sinus sired siree siren sires sirup sisal sissy sitar sited sites situs slain slams slant slaps slash slate slats slays sleds sleep sleet slept slice slide slier slily slime slims slimy slips slits sloes slomo sloop slope slops slosh sloth slots slued slues slump slums slurp slurs slush sluts slyer slyly small smart smash smear smell smelt smile smite smith smote smuts snail snaps snare snarl sneer snide snipe snips snits snood snoop snoot snore snort snots snout soaps soapy soars socle sodas soils solar soled soles solid solon solos solum somas sonar sonic sonly sonny sooth soots sooty soppy sorer sores sorry sorta sorts souls sound soups soupy sours souse south soyas space spacy spade spans spare spars spasm spate spats spays spear specs speed spell spelt spend spent sperm spice spics spicy spied spiel spier spies spill spilt spina spine spins spiny spire spite spits splat splay split spoil spool spoon spoor spore sport spots spout sprat spray spree sprit sprue spuds spued spume spumy spurn spurs spurt sputa staid stain stair stale stall stamp stand staph stare stars start stash state stats stays stead steal steam steed steel steep steer stein stela stele stems steno steps stern stets stied sties stile still stilt stint stirs stoae stoas stoat stoic stole stoma stomp stone stony stood stool stoop stops store storm story stoup stout strap stray strep strip strop strum strut studs study stump stuns stunt styes style styli sudsy suede suers suets suety suite suits sully sumac summa sumps sunny sunup super supes supra suras surds surer surly sushi sutra sylph synch syncs synod syrup ================================================ FILE: src/games/verbix/words_16/t.txt ================================================ tacet tacit tacos tacts taels tails taint talcs tales tally talon talus tamed tamer tames tamps tansy taped taper tapes tapir tapis tardy tared tares tarns taros tarot tarps tarry tarts taste tasty tater tatty taunt taupe teach teals teams tears teary tease teats techs techy tecum teddy teems teens teeny teeth tells telly tempi tempo temps tempt tench tends tenet tenon tenor tense tenth tents tepee tepid terce terms terns terra terry terse tesla tests testy tetra thane thats thees their theme thens there therm these theta thine thins third thorn those thous three throe thrum thuds thump thyme tiara tidal tided tides tiers tilde tiled tiler tiles tills tilth tilts timed timer times timid tines tinny tints tippy tipsy tired tires tiros titan titer tithe title titre titty toads toady toast today toddy toile toils tolls tomes tommy tonal toned toner tones tonic tools toons tooth toots toped toper topes topic topoi topos torah torch toric torsi torso torte torts torus total toted totem toter totes totty touch tours touts toyed toyer toyon trace tract trade trail train trait tramp trams trans traps trash trays tread treap treat treed trees trend tress treys triad trial trice tried trier tries trill trims trios tripe trips trite troll tromp troop troth trots trout truce trued truer trues truly trump truss trust truth tryst tsars tuans tulip tulle tummy tumor tunas tuned tuner tunes tunic tunny tuple turds turdy turns turps tutor tutti tutus typal typed types typos tyres tyros ================================================ FILE: src/games/verbix/words_16/u.txt ================================================ udder ulcer ulnar ulnas ultra umped umpty unapt unarc unarm unary unate uncap uncle uncut under undid undue unhip unhit union unite units unity unlit unman unmap unmet unpin unsay unsee unset untie until upend upped upper upset ureas urine users usher usual usurp usury uteri utero utter ================================================ FILE: src/games/verbix/words_16/word_frequency.txt ================================================ https://www3.nd.edu/~busiforc/handouts/cryptography/letterfrequencies.html E 11.1607% 56.88 M 3.0129% 15.36 A 8.4966% 43.31 H 3.0034% 15.31 R 7.5809% 38.64 G 2.4705% 12.59 I 7.5448% 38.45 B 2.0720% 10.56 O 7.1635% 36.51 F 1.8121% 9.24 T 6.9509% 35.43 Y 1.7779% 9.06 N 6.6544% 33.92 W 1.2899% 6.57 S 5.7351% 29.23 K 1.1016% 5.61 L 5.4893% 27.98 V 1.0074% 5.13 C 4.5388% 23.13 X 0.2902% 1.48 U 3.6308% 18.51 Z 0.2722% 1.39 D 3.3844% 17.25 J 0.1965% 1.00 P 3.1671% 16.14 Q 0.1962% (1) E A R I O T N S L C U D P M H (G->Y) [eariotnslcudpmhy]{5} -> 2656 E 3009 A 2348 R 1910 I 1592 U 1089 D 1191 P 955 ---- M 843 H 814 G 679 B 715 F 561 Y 886 W 505 K 596 V 318 ================================================ FILE: src/games/verbix/words_16/words_16letters.txt ================================================ there their these other could three years place sound still small those under house until shall earth since study paper parts story point times heard means music miles today later money lines order learn space early trees short hands state stood comes close heart ready class round horse piece stand start tried least added color third hours plant names ideas cried alone plane spell carry clear named child human party seems sides mouth north death happy tells shape steps areas sense ocean speed metal south scale cells sleep ships needs total ahead reach stars store terms catch stone dance cause radio lands trade meant spent local train homes teeth coast clean steel rules notes units peace month seeds helps sharp cross cases crops sheep nouns plain apart turns touch tired older spend shoes chair cents empty style pairs count score shore roots paint heads dress share noise solid cloth hills types piano upper usual proud court model prime plans yards tools price sheet smell raise match truth roads enemy lunch chart scene topic plate title cloud plays enter steam atoms press taste storm smile hurry sorry trail daily cream teach dream occur ended chord holes apple outer pitch ruler holds costs calls eaten youth tones honor doors poles loose apply tears chest layer minor tests items hoped strip aside depth candy shell rooms ranch aloud dried motor pound chain shirt drops spite shoot slept shade claim theme union hence entry issue rhyme yours noted route uncle royal trial cards opera chose mouse meter inner poems solar truly tense split rises hotel stems pride pilot sales acres steep slide error porch mines marry raced trust mills spots adult nails horns rates drill trace seats ratio minds dirty silly coins hello trips leads hopes shine moral meals shops cycle slope canoe teams shout canal reply ruled crust midst print tales coach march limit reads dairy lists stops rapid lions tries armed treat honey moist penny altar pulls sport drums dates tails pause herds arose hated clues shame races heels coats spare shiny alarm dimes mercy sunny shone pipes suits smart upset rains sandy rainy sadly rider unity rolls crash hatch paths tides admit sails pupil cruel drama patch nests acted arise ropes shots merry phone ideal cries ashes stall yield mayor opens input tooth poets apron spear stamp paste rural chase slice slant noisy sorts stays piled cheer tenth hides comma spoon stern crept maple deeds rides muddy crime dusty tempo humor sends steal tents roses cheap dense linen posts hired salad tires polar tends pearl loads hears loses hosts phase toads alert seams coral puppy spoil macro steer spray decay ports minus tunes stare dared crude pants tonal radar hairs dolls cared scent panel prism lamps peach ruins rally sells cools charm delay array harsh camel purse toast soils sauce ponds pools reeds sheer melts risen armor piles aimed lemon ditch rests chill slain panic cords tuned crisp stole molds yarns stool diary rails trend actor handy haste scope deals moons essay thump dealt palms cones roast tidal chant acids camps males cocoa punch reins ninth noses drain nylon lunar pulse sites moths meats mined attic mount rusty scare traps react cease prior polio loyal salty marsh mound seals mules scout acute stout hilly lords dunes trout halls coals souls elect pumps loans spins pains photo syrup rodeo sands moose pints curly comic onion clams scrap didst couch codes ounce utter alley tiles crest elder yeast erect medal roles hound snail alter relay loops modes realm rayon stray lumps dread masts pours curse plump cedar curls myths pedal anode slash creep chips cares motel clamp alien strap stump idols carts alloy lasts oddly crane slips troop suite tramp atlas odors spine leaps prose snare moods humid dimly china pines lathe scalp adopt clump perch tumor teens tract unite eased darts choir pouch pinch hairy torch heats users madam aided nurse chaos cured ample lease merit colts shear sleds maids meets hymns hints coils spied stead tamed thorn tease arena stunt shady notch otter pears ached spout smote adapt tasty stoop clips lanes imply demon super hardy typed hates timid serum rotor casts plots trait resin slums lyric mourn heaps saint sonar aunts tonic corps repay niece cello needy stony media hurts repel dated hunts mists dries mates spice oasis spurs paces colon strum drier cacao humus piped nasty rinse amuse cited delta laden rents yells spool spill crush snaps stain slits rated eerie smash plums earns scary tutor snout peril yacht liner comet scars chops raids eater slate soles misty urine sleet holly pests trays pails tenor carol canon miner polls nasal scorn chess crate shyly tulip nymph depot oases asses sheds pills thine timed inert trash clash spore madly paced motto spies mucus discs erase posed asset cider taper churn satin slots sloth shale tread curds manor aisle loins stair tapes leans lance panes heirs caste dummy pores poise epoch pelts irony irons diets tally riots roars looms scold dandy pupae ducts lends scoop rouse salts hitch leash dined chute snort melon cheat llama lasso oaths prone stale inlet pinto untie chore stirs onset paddy laced poppy nicer undue snarl doses daddy roost petty colds curry messy cores ripen amino plaid spiny peers pious idiom chili rites hasty latch mirth plead mummy hotly chaps mumps emery drone idiot annoy roped scant lousy spurt easel laces humps rumor aroma horde leapt opium slime pansy mares soaps snips lined piers steed mossy psalm tours laser truss hares creed lilac siren tarry muted cures hoops hoods niche yucca droop mails clasp stint champ piety chirp pleat posse sunup menus erupt olden cramp poses manly slump strut sloop roach dials plume slaps soups dully solos totem mused mains myrrh sisal shuts hoses dryly seeps denim putty spans adorn haunt dares smelt aches claps undid spicy hoist acorn pussy musty tarts hunch truce dryer loser moles lapse autos domes sheen spade slyly studs donor aspen homer tithe halts ruddy ladle taunt snore props prune pesos radii tiled daisy heron cites hyena lusty sonic smith usher molts sects spars dumps scaly sores mince panda plied patio petal polyp tints troll tolls relic phony aptly ulcer soapy diner taped cadet noose mores slimy aides spasm lymph saucy liter enact lured omens nears moody alder sassy prays hauls tilts stomp tempt capes mesas omits tepee harry limes canes lithe loath outdo deter astir spire lucid hulls slats cinch calms coded mason isles clods adept sedan clays manes adore sneer roomy plush paled scamp rarer amend nines pecan pence sills nomad miter domed heath moors aorta cheep lures tunic slams dumpy mania spits trots nosed middy stile sperm copra amiss lurch popes chins tines shoal cache tapir atoll deity toils spree scans shorn hoary reels mimic corny truer torso edict recur surer moldy liars inept leper soars cater sided yearn decoy heals pleas spilt carat chimp sodas clout mites surly purer mired paler mamma teddy moans allot louse erred ardor pored rondo loped hires thuds ester lyres lotus lurid hutch thyme tommy epics trill caper chime leech smite erode hoard conic mushy rumps shalt toots cooed rusts shred clots dents poled reams tepid taint opals miser coyly slosh aphid hydra chide allay altos eases meted chasm impel duets tardy ultra meaty suede arson chums halos scour enema harps coupe molar mints ashen munch acrid clans slurs emits pumas mends plies canny hoots lamed mated ditty thins eider mulch amass damps morns palsy croon conch udder tacos preen aster adder pulpy optic shins totes scoot dears mutes trims doted shuns lulls seers pined mooed dines tripe drips odder antic sidle pithy yelps scram tiers doled irate coped hails elude aired cocci pacts silos dusts yodel terse slays preys assay trite lutes dosed snipe teems upped doped shush rinds slush moron toted saner drape patty tiara homey moped runts rills corns pries loons tsars datum icily lemur silts plods ramps tress earls dudes peons horny pales lairs lynch idler ensue atone scald adios cynic dulls memos dales peels peals sinus crone hinds enrol roams duped cysts mitts spats coops talcs heeds duels lapel cleat edits moats smear prods rasps tames ceded larch doles mamas pried aspic mealy penis pupas peony douse darns chats inane stilt shyer slops dolts drool dells hippy ether cocos trios sirup laths leers pasta lopes alias diced lodes idled plait malts toyed sties racer etude micas copse ailed croup palls mopes doily tamer poach damns daunt heres idles routs remit copes culls dodos shams icons usurp dooms hells soled comas maths limps sours stuns cased musts coeds rummy deans reaps tills toned pared scull punts snoop dames lores marts harms rears satyr colic hurls plops cruet rends loams sires carps muses lisps peeps sorer lolls prude scums dopes scads yeses caned romps dunce crony tunas malls parch crams pares dally leach pooch slyer mires arced acnes neons dints pouts cored yules lilts mutts spuds lames dupes deads noons clued metes cuter maims droll cupid mauls papas loots hilts dices peppy riper cedes alums elope soots mulls hosed cress ruder ousts suets lints teals helms napes icier pyres lards talon medic putts dotes tippy piths heros dirts hemps shoos parry decal cilia sears slues lamer saris purrs dills meany ruses pulps lauds mocha oiled roman ethyl cacti papal elite adieu annum rhino norms setup terns alpha spelt ephod audio modal rosin doers humph mould crepe aloha riser locus lumpy tuner mural timer canst lemme triad tenon amply deeps padre leant pacer octal dolly trans sumac lolly manna salon duple crier inter dilly cults reset loess decor ethic dunno sissy incur reedy piper coons seine piney lemma trams saith ionic heady harem tummy sally shied dross tilde inset sooty credo yella hymen ethos terra scrip aleph tinny itchy trice henry spurn penal sonny tacit hullo hadst uncut aloes louis raped diode matey apace peter cohos sorta nutty natal clomp siree runic rupee staid ochre yummy soupy roper cameo spate theta deems telly tares cumin teeny comer sired mammy deary sprit runes cadre annul anion nodes stein audit echos letup eyrie caped riled petit miler mater manic umped strep slurp pylon puree caret temps seedy treed coups loner circa mommy titer carne motes amity hippo anise imams tulle hallo opted canto idyll curio dotty demur cusps specs laity toner decry saute tipsy natty ducal metre lusts unary sited shies hasps holed melee loamy pimps titan shunt seder honed annas coypu shims nadir monic maned mousy prima picas mecca reals troth testy crimp splat cutie pasty moray ratty islet motet metro chine aerie emirs coati ducat oomph minim stoic synod runty inlay louts peaty orlon humpy radon raspy nappy yipes sitar dyers cotta crass dacha dicta runny unpin nudes sushi hulas achoo nodal spiel lapis coots caddy drear moult arias nosey paean lacey retch tenet rumen cruse sines ennui unset sated odium latin moire scion henna aural tempi hooch rapes harts techs emend ninny scarp sepia tomes emcee prams poser scrim rearm liens lumen chump nanny trump chomp homos purty maser patsy shill ahhhh natch shish tansy snoot payer altho sappy riles ditto septa lorry heerd payee seamy apses chary phyla clime sumps crypt inure nonce outen hooey anole unlit recap synch dicey caron typos rerun polly surds nulls hater pates splay talus porno moola snide horsy creel pater iotas curie nutsy hilum tryst codon rheas mynah donut hayed cushy spacy leery amens tesla intro capos opine coder namer haled chard reuse toons silty cutup nisei neato loony shoed reran epact potty coned upend narco posit clops hocus hammy adman souse nacho mimed melds pinup randy educe auras pesto antsy snits thane mylar esses paned druid octet homed eared anted elide situs scone drily hyper salsa mooch lipid mitre torus dimer recut meson panty roans hones estop sully sooth ahold raper primp emote shahs rutty semis acmes piton hussy torts disco amour soppy durst tutus perms catty nerds sayer molls shard comps corer colas matte droid ploys cairn deism prosy craps clone macho recto drams doyen noels harpy oldie codas deist orcas retro parse rants toddy micro demos antes lulus epees tromp yoyos hales roust pampa mosey unmet cuspy hypes dynes nards lanai sepal prate ayins doper linty mondo stash capon tarot redid mimeo heist tarps lamas sutra dinar spays preps odour dados houri pushy retry chits lotto deuce clads duper scams mimes throe promo coset minis sauna usury stats condo loopy dorms ascot dippy dopey umpty strop slims sonly luaus campy oodle proms touts toady naiad hider sluts narcs tyros delis hyped poset scrod torte tuple carom tamps duals artsy repro modem toped psych tarns drays cloys anded aimer suras limos dutch shire staph layup toper addle sudsy suety pitas deice taupe topes duchy nitro carny limey orals hirer roils elate dolor snots minas manta iliac admen cills lotta donna locos mimsy hilar outta raths renal dyads crocs culpa teats thats ohhhh aphis eclat perdu mayst molly supra plasm semen paras stoat secco carte haute molal shads pions modus rheum parer ephah doest sprue molto dieth choos plumy moony morts yourn spume mucho spued harum laude thrum pappy oncet rimed limed plein redly lites seest plats payed areal tilth youse thees lento sprat cornu amahs mecum edema mrads dicot astro didos summa purls teary masse pssst sylph ortho lucre cooch tyres solon didot rayed chile nippy litre hydro milch inapt casus scrum scuse ohmic orate musta lardy intra epsom neath ocher tared homme corms psoas terry tuans anima mahua scops manse titre curia cycad tapis amide dolce sloes russe tutti pruta tench herem missy merse limen chert unsee tiros ileum noire laird shute poesy uncap costa turps solum coney polis dictu sherd chars slued hades syncs muser hoars passe lotsa lepta shays endue darer nones ileus plash rooty licit terce hayey saran loppy diems polos unman apers roids ulnas tacts treap churl momma arras marls tiler memes midis tided haler duces poste prise spier remap trier steno stoma airer torah apian smuts yurts nuder mothy pards hoppy cotes dishy pismo casas scudi muons ureas ioctl unhip cento lippy lordy shoat carer rater rente unapt poops eyers spina stoae yenta pooey oared pryer titty sepoy penes nihil rille ousel cuppy hames shits tacet coyer idyls lupus snood schmo noter pipet stets seeth riced halma treys mimer caner cuppa unarm styes maces rimes liras scuds aider prier monte pieta campo loper indie tater ichor lochs supes torsi relet therm shnor trued liest roily punny dipso calla pseud lurer atria palmy pends recta nicad pones mosts ulnar cocas eruct oiler dater arums assai lades actin meads creme email duddy hoper lapin petri phial holon duomo musos shier hayer litho maria asana slomo amine plyer niter unate totty honer dicer monad amped shlep yahoo dryad moper lunes nudie limns mynas stoup taels rands oleos maced crits scats sputa acned resay thous haply antis tecum shoer couth trues hurly hodad iodic utero unsay liers cunts anile tatty plena toyer attar aioli anent redip prats mesne muter lossy hoers slier ilium aport mulct canna scudo pease uteri lases paten rasae stoas styli ahoys ammos paren nitty techy lieth somas cants socle slily ricer hadda rices nerts cauls lilty arity pasha tetra picot roods morel elans latus nates donee mohel ceder unmap topoi ceils yores diest pomps turdy poohs muley tunny auric cordy curdy lisle toric soyas reman carpy apish oaten aurae proem impro mashy miens nonny olios sates dashy doser dildo apsos playa selah malty dulse demit rials spics icers suers topos shirr laded lased turds easts unhit pally aitch sedum coper ruche holer doter toter dicut macer peens poler yecch doeth cruds stele pilau lacer inode luted arses crump spoor toyon morph typal mussy rimer molas cirri peats toile holey amyls podia chino apnea prims lycra primo hempy moots unarc direr eland nares noddy atilt ender thens diddy shmoo prest curer pasts taros nerdy stela stied hypos assed spumy osier pupal ================================================ FILE: src/games/verbix/words_16/y.txt ================================================ yacht yahoo yards yarns yearn years yeast yecch yella yells yelps yenta yeses yield yipes yodel yores yourn yours youse youth yoyos yucca yules yummy yurts ================================================ FILE: src/makefiles.common/auxiliary/Makefile_ALL ================================================ ##################################################################### # Auxiliary targets # - Combine source files include makefiles.common/auxiliary/Makefile_combo ##################################################################### # Compilers variables include makefiles.common/auxiliary/Makefile_compilers ##################################################################### # Common includes and targets include makefiles.common/auxiliary/Makefile_common ##################################################################### # Assets include makefiles.common/auxiliary/Makefile_assets # Tools include makefiles.common/auxiliary/Makefile_tools ================================================ FILE: src/makefiles.common/auxiliary/Makefile_assets ================================================ TILES_PATH ?= $(SOURCE_PATH)/tiles 8X8_TILES ?= $(TILES_PATH)/8x8 7X8_TILES_PATH ?= $(TILES_PATH)/7x8 6X8_TILES_PATH ?= $(TILES_PATH)/6x8 6X9_TILES_PATH ?= $(TILES_PATH)/6x9 8x6_TILES_PATH ?= $(TILES_PATH)/8x6 ###################################### ASSETS_PATH := $(SOURCE_PATH)/generated_assets SRC_PATH := . CREATE_ASSET := cd ./assets && python ./generate_assets.py $(GAME_NAME) $(PARENT_DIR) && python ./copy_assets.py $(GAME_NAME) $(PARENT_DIR) game_assets: $(CREATE_ASSET) $(ASSETS_PATH)/formatted_cc65_udc_atari7800_160A.s: $(ASSETS_PATH)/cc65_udc_atari7800_160A.s $(CREATE_ASSET) $(ASSETS_PATH)/cc65_udc_atari7800_160A.s: $(wildcard $(8X8_TILES)/*.txt) $(CREATE_ASSET) $(ASSETS_PATH)/cc65_agat.s: $(wildcard $(8X8_TILES)/*.txt) $(CREATE_ASSET) $(ASSETS_PATH)/z88dk_gameboy.asm: $(wildcard $(8X8_TILES)/*.txt) $(CREATE_ASSET) $(ASSETS_PATH)/6x8_chars.h: $(wildcard $(6X8_TILES)/*.txt) $(CREATE_ASSET) # $(ASSETS_PATH)/z88dk_6x8.asm: $(wildcard $(6X8_TILES)/*.txt) # $(CREATE_ASSET) $(ASSETS_PATH)/z88dk_6x8_pmd85.asm: $(wildcard $(6X8_TILES)/*.txt) $(CREATE_ASSET) $(ASSETS_PATH)/6x9_chars.h: $(wildcard $(6X9_TILES)/*.txt) $(CREATE_ASSET) $(ASSETS_PATH)/7x8_chars.h: $(wildcard $(7X8_TILES)/*.txt) $(CREATE_ASSET) $(ASSETS_PATH)/8x8_chars.h: $(wildcard $(8X8_TILES)/*.txt) $(CREATE_ASSET) $(ASSETS_PATH)/4x4_chars.h: $(wildcard $(4X4_TILES)/*.txt) $(CREATE_ASSET) $(ASSETS_PATH)/cc65_nes_tiles.s: $(wildcard $(8X8_TILES)/*.txt) $(CREATE_ASSET) $(ASSETS_PATH)/cc65_nes_color_tiles.s: $(wildcard $(8X8_TILES)/*.txt) $(CREATE_ASSET) $(ASSETS_PATH)/cc65_pce_tiles.s: $(wildcard $(8X8_TILES)/*.txt) $(CREATE_ASSET) $(ASSETS_PATH)/cc65_gamate_tiles.s: $(wildcard $(8X8_TILES)/*.txt) $(CREATE_ASSET) $(ASSETS_PATH)/cc65_udc.s: $(wildcard $(8X8_TILES)/*.txt) $(CREATE_ASSET) $(ASSETS_PATH)/cc65_udc_arcade.s: $(wildcard $(8X8_TILES)/*.txt) $(CREATE_ASSET) $(ASSETS_PATH)/cc65_udc_arcade_conio.s: $(wildcard $(8X8_TILES)/*.txt) $(CREATE_ASSET) $(ASSETS_PATH)/cc65_udc_arcade_27_tiles_v2.s: $(wildcard $(8X8_TILES)/*.txt) $(CREATE_ASSET) $(ASSETS_PATH)/cc65_udc_arcade_v2.s: $(wildcard $(8X8_TILES)/*.txt) $(CREATE_ASSET) $(ASSETS_PATH)/cc65_udc_vic20_64_chars.s: $(wildcard $(8X8_TILES)/*.txt) $(CREATE_ASSET) $(ASSETS_PATH)/cc65_udc_63_chars.s: $(wildcard $(8X8_TILES)/*.txt) $(CREATE_ASSET) $(ASSETS_PATH)/cc65_udc_64_chars.s: $(wildcard $(8X8_TILES)/*.txt) $(CREATE_ASSET) $(ASSETS_PATH)/cc65_udc_arcade_64_chars.s:$(wildcard $(8X8_TILES)/*.txt) $(CREATE_ASSET) $(ASSETS_PATH)/cc65_udc_6chars.s: $(wildcard $(8X8_TILES)/*.txt) $(CREATE_ASSET) $(ASSETS_PATH)/cc65_udc_vic20_19_tiles.s: $(wildcard $(8X8_TILES)/*.txt) $(CREATE_ASSET) $(ASSETS_PATH)/cc65_udc_vic20_25_tiles.s: $(wildcard $(8X8_TILES)/*.txt) $(CREATE_ASSET) $(ASSETS_PATH)/cc65_udc_vic20_27_tiles.s: $(wildcard $(8X8_TILES)/*.txt) $(CREATE_ASSET) $(ASSETS_PATH)/cmoc_udc_tiles.s: $(wildcard $(8X8_TILES)/*.txt) $(CREATE_ASSET) $(ASSETS_PATH)/cmoc_udc_tiles_and_fonts.s: $(wildcard $(8X8_TILES)/*.txt) $(CREATE_ASSET) $(ASSETS_PATH)/z88dk_cpc_Chars8.asm: $(wildcard $(8X8_TILES)/*.txt) $(CREATE_ASSET) $(ASSETS_PATH)/z88dk_sprites_definitions.h: $(wildcard $(8X8_TILES)/*.txt) $(CREATE_ASSET) $(ASSETS_PATH)/z88dk_xchase.asm: $(wildcard $(8X8_TILES)/*.txt) $(CREATE_ASSET) $(ASSETS_PATH)/cmoc_udc_25_tiles.s: $(wildcard $(8X8_TILES)/*.txt) $(CREATE_ASSET) $(ASSETS_PATH)/z88dk_pv1000.asm: $(wildcard $(8X8_TILES)/*.txt) $(CREATE_ASSET) $(ASSETS_PATH)/8x6_tiles.s: $(wildcard $(8X6_TILES)/*.txt) $(CREATE_ASSET) $(ASSETS_PATH)/8x6_chars.h: $(wildcard $(8X6_TILES)/*.txt) $(CREATE_ASSET) $(ASSETS_PATH)/z88dk_8x6_sprites_definitions.h: $(wildcard $(8X6_TILES)/*.txt) $(CREATE_ASSET) ================================================ FILE: src/makefiles.common/auxiliary/Makefile_combo ================================================ # ------------------------------------------------------------------------------------------ # Combine all .c source files into one for cross-compilers that only handle single files, e.g., LCC1802, WINCMOC ================================================ FILE: src/makefiles.common/auxiliary/Makefile_common ================================================ ########################################################################### ifneq ($(COMSPEC),) DO_WIN:=1 endif ifneq ($(ComSpec),) DO_WIN:=1 endif ifeq ($(DO_WIN),1) EXEEXT = .exe endif # MacOS only has "ncurses" # MSYS2 only has "ncursesw" # Linux, Cygwin, FreeBSD, WSL have both "ncurses" and "ncursesw" ifeq ($(DO_WIN),1) COMPILEDEXT = .exe NCURSES = ncursesw else COMPILEDEXT = .out NCURSES = ncurses IF_POSIX = _posix endif CROSS_LIB_PATH := cross_lib BUILD_PATH ?= ../build ###################################### ####################################################################### # Cross Lib includes + game's graphics data INCLUDE_OPTS ?= \ -I$(CROSS_LIB_PATH) -I$(CROSS_LIB_PATH)/sleep \ -I$(CROSS_LIB_PATH)/display \ -I$(CROSS_LIB_PATH)/display/graphics_mode \ -I$(CROSS_LIB_PATH)/display/alt_print \ -I$(CROSS_LIB_PATH)/include \ -I$(CROSS_LIB_PATH)/sound \ -I$(CROSS_LIB_PATH)/sound/cc65/atmos \ -I$(CROSS_LIB_PATH)/sound/cc65/c264 \ -I$(CROSS_LIB_PATH)/sound/cc65/pokey \ -I$(CROSS_LIB_PATH)/sound/cc65/sid \ -I$(CROSS_LIB_PATH)/sound/cc65/vic20 \ -I$(CROSS_LIB_PATH)/sound/cc65/gamate \ -I$(CROSS_LIB_PATH)/sound/cc65/creativision \ -I$(CROSS_LIB_PATH)/sound/cc65/atari_lynx \ -I$(CROSS_LIB_PATH)/sound/cc65/atari7800 \ -I$(CROSS_LIB_PATH)/sound/cc65/pet \ -I$(CROSS_LIB_PATH)/sound/cc65/supervision \ -I$(CROSS_LIB_PATH)/sound/cc65/cx16 \ -I$(CROSS_LIB_PATH)/sound/z88dk/bit_bang \ -I$(CROSS_LIB_PATH)/sound/z88dk/gb \ -I$(CROSS_LIB_PATH)/sound/z88dk/psg \ -I$(CROSS_LIB_PATH)/sound/lcc1802/comx \ -I$(CROSS_LIB_PATH)/sound/cmoc/mo5 \ -I$(CROSS_LIB_PATH)/sound/generic \ -I$(CROSS_LIB_PATH)/sound/gcc4ti99 \ -I$(CROSS_LIB_PATH)/sound/vbcc/bbc \ -I$(CROSS_LIB_PATH)/sound/ack/msdos86 \ -I$(CROSS_LIB_PATH)/text \ -I$(CROSS_LIB_PATH)/input \ -I$(CROSS_LIB_PATH)/rand \ -I$(CROSS_LIB_PATH)/display/redefine_characters \ -I$(CROSS_LIB_PATH)/display/tiles \ -I$(CROSS_LIB_PATH)/display/init_graphics/vbcc/bbc \ -I$(ASSETS_PATH) \ -I$(SOURCE_PATH) TOOLS_PATH ?= ../tools CFG_PATH ?= $(CROSS_LIB_PATH)/cfg/ ##################################################################### # CrossLib files # BASIC_CROSS_LIB_FILES ?= \ # $(CROSS_LIB_PATH)/display/display_macros.c \ # $(CROSS_LIB_PATH)/input/input_macros.c \ # $(CROSS_LIB_PATH)/text/text_macros.c BASIC_CROSS_LIB_FILES ?= \ $(CROSS_LIB_PATH)/display/display_macros.c \ $(CROSS_LIB_PATH)/input/input_macros.c ################################################################# # Clean targets clean_chase_obj: rm -rf $(SOURCE_PATH)/*.o clean_game_assets: if [ -d $(ASSETS_PATH) ]; then echo "generated assets dir exists"; cd $(ASSETS_PATH); pwd; ls -l; rm -rf *.s; rm -rf *.h; rm -rf *.asm; else echo "generated assets dir does NOT exist"; fi clean_assets: clean_game_assets clean_chase_temp: rm -rf $(SOURCE_PATH)/wincmoc_main.c rm -rf $(SOURCE_PATH)/wincmoc_main.asm rm -rf $(SOURCE_PATH)/wincmoc_main.coco.bin rm -rf $(SOURCE_PATH)/../full_comx_combo.c rm -rf $(SOURCE_PATH)/../light_comx_combo.c rm -rf $(SOURCE_PATH)/../tiny_comx_combo.c rm -rf $(SOURCE_PATH)/../full_comx_combo.asm rm -rf $(SOURCE_PATH)/../light_comx_combo.asm rm -rf $(SOURCE_PATH)/../tiny_comx_combo.asm rm -rf $(SOURCE_PATH)/../full_pecom_combo.c rm -rf $(SOURCE_PATH)/../light_pecom_combo.c rm -rf $(SOURCE_PATH)/../tiny_pecom_combo.c rm -rf $(SOURCE_PATH)/../full_pecom_combo.asm rm -rf $(SOURCE_PATH)/../light_pecom_combo.asm rm -rf $(SOURCE_PATH)/../tiny_pecom_combo.asm clean_lib_obj: find . -type f -name '*.o' -delete clean_i_files: find . -type f -name '*.i' -delete clean_lis: find . -type f -name '*.lis' -delete clean_obj: \ clean_chase_obj \ clean_chase_temp \ clean_lib_obj \ clean_lis clean_build: rm -rf $(BUILD_PATH)/* clean_generic_combo: rm -rf games/reduced_full_lcc1802_color_combo.c rm -rf games/reduced_full_lcc1802_combo_no_sounds.* rm -rf games/full_lcc1802_combo.* rm -rf games/full_combo_rand.c rm -rf examples/reduced_full_lcc1802_color_combo.c rm -rf examples/reduced_full_lcc1802_combo_no_sounds.* rm -rf examples/full_lcc1802_combo.* rm -rf examples/full_combo_rand.c rm -rf *.stackdump clean_generic_no_built_in: \ clean_generic_combo \ clean_lib_obj \ clean_lis clean_generic: \ clean_generic_combo \ clean_build \ clean_lib_obj \ clean_lis clean: \ clean_generic_combo \ clean_obj \ clean_build \ clean_game_assets clean_no_built_in: \ clean_generic_combo \ clean_obj \ clean_game_assets help: cat ../docs/BUILD.md list: cat ../docs/SYSTEMS.md status: cat ../docs/STATUS.md ================================================ FILE: src/makefiles.common/auxiliary/Makefile_compilers ================================================ ########################### ########################### # ACK _ACK ?= ack $(GLOBAL_OPTS) _ACK_OPTS ?= ########################### # CC65 CC65_PATH ?= #/home/fabri/CC65_FIX/cc65/bin/ MYCC65 ?= cl65$(EXEEXT) $(GLOBAL_OPTS) AR65 ?= ar65$(EXEEXT) CA65 ?= ca65$(EXEEXT) ########################### # CMOC CMOC ?= cmoc $(GLOBAL_OPTS) ########################### # GCC AMIGA AMIGA_CC ?= m68k-amigaos-gcc $(GLOBAL_OPTS) AMIGA_OPTS ?= ########################### # GCC ATARI ST ATARI_ST_CC ?= m68k-atari-mint-gcc $(GLOBAL_OPTS) ATARI_ST_OPTS ?= ########################### # GCC # For cygwin build use gcc # For windows build use mingw, e.g., x86_64-w64-mingw32-gcc _CC ?= gcc $(GLOBAL_OPTS) _CC_OPTS ?= ############# # GCC ?= gcc $(GLOBAL_OPTS) # GCC_OPTS ?= -Wpedantic -Wall NATIVE_CC ?= $(_NATIVE_CC) $(GLOBAL_OPTS) # TOOL_CC ?= $(GCC) ############# CC6303_COMPILER ?= cc68 $(GLOBAL_OPTS) CC6303_MC10_OPTS ?= ############# VBCC_COMPILER ?= vc $(GLOBAL_OPTS) VBCC_OPTS ?= +bbc ########################### # GCC TMS9900 TMS9900-GCC_PATH ?= /opt/gcc4ti/bin LIB_TI99_PATH=/opt/gcc4ti/lib ########################### # GCC Z8K_PCOS Z8K-PCOS-GCC ?= /opt/z8kgcc-jan-19-2009/bin/z8k-pcos-gcc $(GLOBAL_OPTS) Z8K-PCOS-GCC_OPTS ?= -Wno-cpg ########################### # LCC1802 # LCC1802_PATH ?= /cygdrive/c/lcc42/bin/ LCC1802_PATH ?= LCC1802_EXE ?= lcc$(EXEEXT) $(GLOBAL_OPTS) LCC1802 ?= $(LCC1802_PATH)$(LCC1802_EXE) ########################### # XTC68 XTC68 ?= qcc $(GLOBAL_OPTS) ########################### # Z88DK # Z88DK_PATH ?= /cygdrive/c/z88dk/bin/ Z88DK_PATH ?= # Z88DK_INCLUDE ?= /cygdrive/c/z88dk/include Z88DK_INCLUDE ?= SCCZ80_OPTS ?= $(GLOBAL_OPTS) #-O0 #-O3 SCCZ80_ROM_OPTS ?= -O2 $(GLOBAL_OPTS) #-O0 #-O3 ZSDCC_OPTS ?= -SO3 $(GLOBAL_OPTS) #-SO0 # -SO3 --max-allocs-per-node200000 ZSDCC_ROM_OPTS ?= -SO3 $(GLOBAL_OPTS) # -SO3 # -SO3 --max-allocs-per-node200000 Z88DK_MAKE_OPTS ?= -j 8 MYZ88DK ?= zcc$(EXEEXT) MYZ88DKASM ?= z80asm$(EXEEXT) # MYZ88DK ?= zcc.exe # MYZ88DKASM ?= z80asm.exe ================================================ FILE: src/makefiles.common/auxiliary/Makefile_default_values ================================================ ###################### # No forced slowdown SLOWDOWN?=-1 # Common factor _COMMON_SLOWDOWN_FACTOR?=10 # CC65 _APPLE2_SLOWDOWN?=0 _APPLE2ENH_SLOWDOWN?=0 _APPLE2_HGR_SLOWDOWN?=0 _APPLE2ENH_HGR_SLOWDOWN?=0 _ATARI_SLOWDOWN?=0 _ATARI5200_SLOWDOWN?=0 _ATARI7800_SLOWDOWN?=0 _ATARI7800_NO_COLOR_SLOWDOWN?=0 _ATARI_LYNX_SLOWDOWN?=0 _C128_8502_40COL_SLOWDOWN?=0 _C128_8502_80COL_SLOWDOWN?=0 _C16_SLOWDOWN?=0 _C64_SLOWDOWN?=0 _C65_SLOWDOWN?=500 _CBM610_SLOWDOWN?=0 _CBM510_SLOWDOWN?=0 _CX16_SLOWDOWN?=200 _CREATIVISION_SLOWDOWN?=0 _GAMATE_SLOWDOWN?=0 _ORIC_SLOWDOWN?=0 _MEGA65_SLOWDOWN?=650 _NES_SLOWDOWN?=0 _PET_SLOWDOWN?=0 _PCE_SLOWDOWN?=0 _SUPERVISION_SLOWDOWN?=0 _TELESTRAT_SLOWDOWN?=0 _VIC20_SLOWDOWN?=0 # Z88DK _ABC80_SLOWDOWN?=0 _ABC800_SLOWDOWN?=0 _ALPHATRO_SLOWDOWN?=$(_CPM_Z80_SLOWDOWN) _ALTAIR8800_SLOWDOWN?=0 _ACE_SLOWDOWN?=0 _ACTRIX_SLOWDOWN?=0 _AGAT_SLOWDOWN?=0 _AGAT_GFX_SLOWDOWN?=0 _AGON_SLOWDOWN?=0 _ALPHATP2_SLOWDOWN?=$(_CPM_Z80_SLOWDOWN) _ALTOS5_SLOWDOWN?=$(_CPM_Z80_SLOWDOWN) _ALTOS580_SLOWDOWN?=$(_CPM_Z80_SLOWDOWN) _AMPRO_SLOWDOWN?=$(_CPM_Z80_SLOWDOWN) _AMUST_SLOWDOWN?=$(_CPM_Z80_SLOWDOWN) _AMUSTOLD_SLOWDOWN?=$(_CPM_Z80_SLOWDOWN) _APPLE2_Z80_SLOWDOWN?=$(_CPM_Z80_SLOWDOWN) _AQUARIUS_SLOWDOWN?=0 _ARCHIVE_SLOWDOWN?=$(_CPM_Z80_SLOWDOWN) _ATMTURBO_SLOWDOWN?=$(_CPM_Z80_SLOWDOWN) _ATTACHE_SLOWDOWN?=$(_CPM_Z80_SLOWDOWN) _ATTACHE_NO_GFX_SLOWDOWN?=$(_CPM_Z80_SLOWDOWN) _AUSSIE_SLOWDOWN?=0 _BEE_SLOWDOWN?=0 _BEEHIVE_SLOWDOWN?=$(_CPM_Z80_SLOWDOWN) _BIC_SLOWDOWN?=0 _BIT90_SLOWDOWN?=0 _BONDWELL_SLOWDOWN?=0 _BONDWELL2_SLOWDOWN?=0 _C128_Z80_40COL_SLOWDOWN?=0 _C128_Z80_80COL_SLOWDOWN?=0 _CAMPUTERS_LYNX_SLOWDOWN?=0 _COLECO_SLOWDOWN?=0 _COLECO_ADAM_SLOWDOWN?=0 _CORVETTE_SLOWDOWN?=0 _CPC_MODE0_SLOWDOWN?=0 _CPC_CPCRSLIB_MODE1_SLOWDOWN?=0 _CPC_MODE2_SLOWDOWN?=0 _CPM_Z80_SLOWDOWN?=0 _CPM_INTEL8080_SLOWDOWN?=0 _DAI_SLOWDOWN?=0 _DISKFACE_SLOWDOWN?=$(_CPM_Z80_SLOWDOWN) _DMV_SLOWDOWN?=0 _EAGLE2_SLOWDOWN?=$(_CPM_Z80_SLOWDOWN) _E200_SLOWDOWN?=0 _EG2K_SLOWDOWN?=0 _EINSTEIN_SLOWDOWN?=0 _ENTERPRISE_SLOWDOWN?=0 _EXCALIBUR64_SLOWDOWN?=0 _FP1100_SLOWDOWN?=0 _G815_SLOWDOWN?=0 _G850_SLOWDOWN?=0 _GNAT10_SLOWDOWN?=$(_CPM_Z80_SLOWDOWN) _GAL_SLOWDOWN?=0 _GAL_GFX_SLOWDOWN?=0 _GB_SLOWDOWN?=0 _GB_WAIT_VSYNC_SLOWDOWN?=0 _GG_SLOWDOWN?=0 _GEMINI_SLOWDOWN?=0 _GL4000_SLOWDOWN?=0 _GL6000SL_SLOWDOWN?=0 _HC2000_SLOWDOWN?=$(_CPM_Z80_SLOWDOWN) _HC91_SLOWDOWN?=$(_CPM_Z80_SLOWDOWN) _HEMC_SLOWDOWN?=0 _HECTOR_SLOWDOWN?=180 _HECTORHR_SLOWDOWN?=180 _HGMC_SLOWDOWN?=0 _HOMELAB_SLOWDOWN?=0 _HOMELAB2_SLOWDOWN?=0 _HP125_SLOWDOWN?=$(_CPM_Z80_SLOWDOWN) _HZ100_SLOWDOWN?=$(_CPM_Z80_SLOWDOWN) _HZ89?=$(_CPM_Z80_SLOWDOWN) _KAYPRO_SLOWDOWN?=0 _KAYPRO83_SLOWDOWN?=0 _KRAMERMC_SLOWDOWN?=0 _KROKHA_SLOWDOWN?=0 _KC_SLOWDOWN?=0 _LASER500_SLOWDOWN?=0 _LAMBDA_SLOWDOWN?=0 _LEC80T_SLOWDOWN?=$(_CPM_Z80_SLOWDOWN) _LM80C_SLOWDOWN?=0 _LVIV_SLOWDOWN?=0 _M5_SLOWDOWN?=0 _M100_SLOWDOWN?=0 _MAGNOLIA_SLOWDOWN?=$(_CPM_Z80_SLOWDOWN) _MICROMATE_SLOWDOWN?=$(_CPM_Z80_SLOWDOWN) _MBC200_SLOWDOWN?=0 _MBC2000_SLOWDOWN?=$(_CPM_Z80_SLOWDOWN) _MC1000_SLOWDOWN?=0 _MICRO8085_SLOWDOWN?=0 _MIKRO80_SLOWDOWN?=0 _MULTI8_SLOWDOWN?=0 _MYVISION_SLOWDOWN?=0 _MSX_SLOWDOWN?=0 _MSX_FIXED_COLORS_SLOWDOWN?=0 _MTX500_SLOWDOWN?=0 _MTX512_SLOWDOWN?=0 _MZ_SLOWDOWN?=0 _MZ2500_SLOWDOWN?=0 _MZ3500_SLOWDOWN?=$(_CPM_Z80_SLOWDOWN) _NABU_SLOWDOWN?=0 _NASCOM_SLOWDOWN?=0 _NC100_SLOWDOWN?=0 _NC200_SLOWDOWN?=0 _NEWBRAIN_SLOWDOWN?=0 _ONDRA_SLOWDOWN?=0 _OZ_SLOWDOWN?=0 _P2000_SLOWDOWN?=0 _PASOPIA7_SLOWDOWN?=0 _PC6001_SLOWDOWN?=0 _PCW40_SLOWDOWN?=0 _PCW80_SLOWDOWN?=0 _PENCIL2_SLOWDOWN?=0 _PHC25_SLOWDOWN?=0 _PMD85_SLOWDOWN?=0 _PPS_SLOWDOWN?=0 _PRIMO_SLOWDOWN?=0 _PV1000_SLOWDOWN?=0 _PV2000_SLOWDOWN?=0 _PC88_SLOWDOWN?=0 _PX4_SLOWDOWN?=0 _PX8_SLOWDOWN?=0 _QC10_SLOWDOWN?=0 _QUORUM_SLOWDOWN?=$(_CPM_Z80_SLOWDOWN) _RADIO86_SLOWDOWN?=0 _RAINBOW_SLOWDOWN?=$(_CPM_Z80_SLOWDOWN) _RC700_SLOWDOWN?=0 _RX78_SLOWDOWN?=0 _SAGAFOX_SLOWDOWN?=$(_CPM_Z80_SLOWDOWN) _SCORPION_SLOWDOWN?=$(_CPM_Z80_SLOWDOWN) _SEEQUA_SLOWDOWN?=$(_CPM_Z80_SLOWDOWN) _SMC777_SLOWDOWN?=0 _SOL20_SLOWDOWN?=0 _SOS_SLOWDOWN?=0 _SPC1000_SLOWDOWN?=0 _SPECIAL_SLOWDOWN?=0 _SRR_SLOWDOWN?=0 _SUPER80_SLOWDOWN?=0 _SUPER80R_SLOWDOWN?=0 _SV8000_SLOWDOWN?=0 _SC3000_SLOWDOWN?=0 _SAMCOUPE_SLOWDOWN?=0 _SMS_SLOWDOWN?=0 _SPECTRUM_SLOWDOWN?=0 _SVI_SLOWDOWN?=0 _TELEVIDEO_SLOWDOWN?=$(_CPM_Z80_SLOWDOWN) _TI82_SLOWDOWN?=0 _TI83_SLOWDOWN?=0 _TI83P_SLOWDOWN?=0 _TI85_SLOWDOWN?=0 _TI86_SLOWDOWN?=0 _TIKI100_SLOWDOWN?=0 _TIM011_SLOWDOWN?=0 _TS2068_SLOWDOWN?=0 _TVC_SLOWDOWN?=0 _V1050_SLOWDOWN?=0 _VECTOR06C_SLOWDOWN?=0 _X1_SLOWDOWN?=0 _TRS80_SLOWDOWN?=250 _VT180_SLOWDOWN?=$(_CPM_Z80_SLOWDOWN) _VG5K_SLOWDOWN?=0 _VZ200_SLOWDOWN?=0 _X07_SLOWDOWN?=0 _X820_SLOWDOWN?=0 _Z80PACK_SLOWDOWN?=$(_CPM_Z80_SLOWDOWN) _ZX80_SLOWDOWN?=0 _Z80TVGAME_SLOWDOWN?=0 _Z88_SLOWDOWN?=0 _ZXN_SLOWDOWN?=0 _Z1013_SLOWDOWN?=0 _Z9001_SLOWDOWN?=0 _ZX81_SLOWDOWN?=0 _ZX81_WRX_SLOWDOWN?=0 _ZX81_8X6_WRX_SLOWDOWN?=0 _ZX81_WRX64_SLOWDOWN?=0 _ZX81_8X6_WRX64_SLOWDOWN?=0 _ZX81_WRX128_SLOWDOWN?=0 _ZX81_8X6_WRX128_SLOWDOWN?=0 # CMOC _COCO_SLOWDOWN?=0 _DRAGON_SLOWDOWN?=0 _COCO3_SLOWDOWN?=0 _COCO_NO_GFX_SLOWDOWN?=0 _DRAGON_NO_GFX_SLOWDOWN?=0 _MO5_SLOWDOWN?=0 _TO7_SLOWDOWN?=0 # LCC1802 _COMX_SLOWDOWN?=0 _PECOM_SLOWDOWN?=0 _TMC600_SLOWDOWN?=0 _MICRO_SLOWDOWN?=0 _CIDELSA_SLOWDOWN?=0 _VIP_SLOWDOWN?=0 # CC6303 _MC10_SLOWDOWN?=0 # GCC FOR TI _TI99_SLOWDOWN?=120 # GCC _NCURSES_SLOWDOWN?=0 _TERMINAL_SLOWDOWN?=10 # MINT ATARI ST GCC _ATARI_ST_SLOWDOWN?=0 # VBCC _BBC_SLOWDOWN?=0 _BBCMASTER_SLOWDOWN?=0 _M65_SLOWDOWN?=0 _AMIGA_SLOWDOWN?=0 _ATARI_JAGUAR_SLOWDOWN?=0 # ACK _MSDOS86_SLOWDOWN?=250 ================================================ FILE: src/makefiles.common/auxiliary/Makefile_tools ================================================ # GCC ?= gcc $(GLOBAL_OPTS) # GCC_OPTS ?= -Wpedantic -Wall # NATIVE_CC ?= $(GCC) # include ./games/chase/Makefile.chase # include ./makefiles.common/auxiliary/Makefile_ALL # include ./makefiles.common/auxiliary/Makefile_common ifneq ($(COMSPEC),) DO_WIN:=1 endif ifneq ($(ComSpec),) DO_WIN:=1 endif ifeq ($(DO_WIN),1) EXEEXT = .exe endif ifeq ($(DO_WIN),1) COMPILEDEXT = .exe else COMPILEDEXT = .out endif TOOLS_PATH ?= ../tools # GNU_MAKE=make # Number of threads used by make MAKE_THREADS = 8 $(TOOLS_PATH)/cc65/gamate/gamate-fixcart$(COMPILEDEXT): $(TOOLS_PATH)/cc65/gamate/gamate-fixcart.c $(TOOL_CC) $(TOOLS_PATH)/cc65/gamate/gamate-fixcart.c -o $(TOOLS_PATH)/cc65/gamate/gamate-fixcart$(COMPILEDEXT) $(TOOLS_PATH)/cmoc/mo5/f2k5$(COMPILEDEXT): $(TOOLS_PATH)/cmoc/mo5/f2k5.c $(TOOL_CC) $(TOOLS_PATH)/cmoc/mo5/f2k5.c -o $(TOOLS_PATH)/cmoc/mo5/f2k5$(COMPILEDEXT) $(TOOLS_PATH)/bbc/bbcim$(COMPILEDEXT): $(TOOLS_PATH)/bbc/bbcim-1.0.1/src/bbcim.c cd $(TOOLS_PATH)/bbc/bbcim-1.0.1/ && $(GNU_MAKE) mv $(TOOLS_PATH)/bbc/bbcim-1.0.1/bbcim$(EXT) $(TOOLS_PATH)/bbc/bbcim$(COMPILEDEXT) $(TOOLS_PATH)/z88dk/oz/makewzd$(COMPILEDEXT): $(TOOLS_PATH)/z88dk/oz/makewzd.c $(TOOL_CC) $(TOOLS_PATH)/z88dk/oz/makewzd.c -o $(TOOLS_PATH)/z88dk/oz/makewzd$(COMPILEDEXT) $(TOOLS_PATH)/cmoc/coco/file2dsk/file2dsk$(COMPILEDEXT): $(TOOLS_PATH)/cmoc/coco/file2dsk/Source/file2dsk.c cd $(TOOLS_PATH)/cmoc/coco/file2dsk/Source && $(GNU_MAKE) mv $(TOOLS_PATH)/cmoc/coco/file2dsk/Source/file2dsk$(COMPILEDEXT) $(TOOLS_PATH)/cmoc/coco/file2dsk/file2dsk$(COMPILEDEXT) $(TOOLS_PATH)/cmoc/mo5/sapfs$(COMPILEDEXT): $(TOOLS_PATH)/cmoc/mo5/sap/sapfs.c cd $(TOOLS_PATH)/cmoc/mo5/sap/ && $(GNU_MAKE) mv $(TOOLS_PATH)/cmoc/mo5/sap/sapfs $(TOOLS_PATH)/cmoc/mo5/sapfs$(COMPILEDEXT) $(TOOLS_PATH)/z88dk/cpc/nocart/nocart$(COMPILEDEXT): $(TOOLS_PATH)/z88dk/cpc/nocart/src/main.cpp cd $(TOOLS_PATH)/z88dk/cpc/nocart/src/ && $(GNU_MAKE) && mv nocart ../nocart$(COMPILEDEXT) $(TOOLS_PATH)/olivetti_m20/m20$(COMPILEDEXT): cd $(TOOLS_PATH)/olivetti_m20/m20floppy-0.61/ && $(GNU_MAKE) && mv m20$(EXEEXT) ../m20$(COMPILEDEXT) $(TOOLS_PATH)/ti99/elf2ea5$(COMPILEDEXT): cd $(TOOLS_PATH)/ti99/elf2ea5/ && $(GNU_MAKE) && mv elf2ea5$(EXEEXT) ../elf2ea5$(COMPILEDEXT) $(TOOLS_PATH)/ti99/ea5split$(COMPILEDEXT): cd $(TOOLS_PATH)/ti99/ea5split/ && $(GNU_MAKE) && mv ea5split$(EXEEXT) ../ea5split$(COMPILEDEXT) # -j$(MAKE_THREADS) $(TOOLS_PATH)/generic/exomizer/exomizer$(EXEEXT): cd $(TOOLS_PATH)/generic/exomizer/src && $(GNU_MAKE) exomizer && mv exomizer$(EXEEXT) .. $(TOOLS_PATH)/generic/CC1541/cc1541$(EXEEXT): cd $(TOOLS_PATH)/generic/CC1541 && $(GNU_MAKE) $(TOOLS_PATH)/z88dk/abc80/abcdisk-2.7/abcwrite$(EXEEXT): cd $(TOOLS_PATH)/z88dk/abc80/abcdisk-2.7/ && ./configure --with-z88dk=z88dk-z80asm && $(GNU_MAKE) CFLAGS=-Wno-error=implicit-function-declaration $(TOOLS_PATH)/z88dk/abc80/abcdisk-2.7/bin2abc$(EXEEXT): $(TOOLS_PATH)/z88dk/abc80/abcdisk-2.7/abcwrite$(EXEEXT) cd $(TOOLS_PATH)/z88dk/abc80/abcdisk-2.7/ && $(GNU_MAKE) bin2abc$(EXEEXT) # -j$(MAKE_THREADS) $(TOOLS_PATH)/cc65/atari/mkatr-master/mkatr$(EXEEXT): cd $(TOOLS_PATH)/cc65/atari/mkatr-master && $(GNU_MAKE) $(TOOLS_PATH)/cc65/telestrat/tap2dsk$(EXEEXT): cd $(TOOLS_PATH)/cc65/telestrat/ && gcc tap2dsk.c -o tap2dsk$(EXEEXT) $(TOOLS_PATH)/cc65/telestrat/old2mfm$(EXEEXT): cd $(TOOLS_PATH)/cc65/telestrat/ && gcc old2mfm.c -o old2mfm$(EXEEXT) tools: \ $(TOOLS_PATH)/cmoc/coco/file2dsk/file2dsk$(COMPILEDEXT) \ $(TOOLS_PATH)/bbc/bbcim$(COMPILEDEXT) \ $(TOOLS_PATH)/cc65/gamate/gamate-fixcart$(COMPILEDEXT) \ $(TOOLS_PATH)/cmoc/mo5/f2k5$(COMPILEDEXT) \ $(TOOLS_PATH)/z88dk/oz/makewzd$(COMPILEDEXT) \ $(TOOLS_PATH)/ti99/elf2ea5$(COMPILEDEXT) \ $(TOOLS_PATH)/ti99/ea5split$(COMPILEDEXT) \ $(TOOLS_PATH)/cmoc/mo5/sapfs$(COMPILEDEXT) \ $(TOOLS_PATH)/cc65/telestrat/tap2dsk$(EXEEXT) \ $(TOOLS_PATH)/cc65/telestrat/old2mfm$(EXEEXT) \ $(TOOLS_PATH)/olivetti_m20/m20$(COMPILEDEXT) \ $(TOOLS_PATH)/generic/exomizer/exomizer$(EXEEXT) \ $(TOOLS_PATH)/generic/CC1541/cc1541$(EXEEXT) \ $(TOOLS_PATH)/z88dk/cpc/nocart/nocart$(COMPILEDEXT) \ $(TOOLS_PATH)/cc65/atari/mkatr-master/mkatr$(EXEEXT) \ $(TOOLS_PATH)/z88dk/abc80/abcdisk-2.7/abcwrite$(EXEEXT) \ $(TOOLS_PATH)/z88dk/abc80/abcdisk-2.7/bin2abc$(EXEEXT) \ # exomizer has several deps # abc80write and bin2abc have several deps # nocart (cpc) requires g++ easy_tools: \ $(TOOLS_PATH)/cmoc/coco/file2dsk/file2dsk$(COMPILEDEXT) \ $(TOOLS_PATH)/bbc/bbcim$(COMPILEDEXT) \ $(TOOLS_PATH)/cc65/gamate/gamate-fixcart$(COMPILEDEXT) \ $(TOOLS_PATH)/cmoc/mo5/f2k5$(COMPILEDEXT) \ $(TOOLS_PATH)/z88dk/oz/makewzd$(COMPILEDEXT) \ $(TOOLS_PATH)/ti99/elf2ea5$(COMPILEDEXT) \ $(TOOLS_PATH)/ti99/ea5split$(COMPILEDEXT) \ $(TOOLS_PATH)/cmoc/mo5/sapfs$(COMPILEDEXT) \ $(TOOLS_PATH)/cc65/telestrat/tap2dsk$(EXEEXT) \ $(TOOLS_PATH)/cc65/telestrat/old2mfm$(EXEEXT) \ $(TOOLS_PATH)/olivetti_m20/m20$(COMPILEDEXT) \ $(TOOLS_PATH)/generic/CC1541/cc1541$(EXEEXT) \ $(TOOLS_PATH)/cc65/atari/mkatr-master/mkatr$(EXEEXT) \ cpc_tools: \ $(TOOLS_PATH)/z88dk/cpc/nocart/nocart$(COMPILEDEXT) \ oric_tools: \ $(TOOLS_PATH)/cc65/telestrat/tap2dsk$(EXEEXT) \ $(TOOLS_PATH)/cc65/telestrat/old2mfm$(EXEEXT) \ atari_tools: \ $(TOOLS_PATH)/cc65/atari/mkatr-master/mkatr$(EXEEXT) \ abc80_tools: \ $(TOOLS_PATH)/z88dk/abc80/abcdisk-2.7/abcwrite$(EXEEXT) \ $(TOOLS_PATH)/z88dk/abc80/abcdisk-2.7/bin2abc$(EXEEXT) \ abcwrite_tools: \ $(TOOLS_PATH)/z88dk/abc80/abcdisk-2.7/abcwrite$(EXEEXT) bin2abc_tools: \ $(TOOLS_PATH)/z88dk/abc80/abcdisk-2.7/bin2abc$(EXEEXT) \ # TODO: $(GNU_MAKE) here seems not to be defined clean_tools: rm -rf $(TOOLS_PATH)/bbc/bbcim$(COMPILEDEXT) rm -rf $(TOOLS_PATH)/cmoc/mo5/f2k5$(COMPILEDEXT) rm -rf $(TOOLS_PATH)/cc65/gamate/gamate-fixcart$(COMPILEDEXT) rm -rf $(TOOLS_PATH)/z88dk/oz/makewzd$(COMPILEDEXT) rm -rf $(TOOLS_PATH)/cmoc/coco/file2dsk/file2dsk$(COMPILEDEXT) rm -rf $(TOOLS_PATH)/cmoc/mo5/sapfs$(COMPILEDEXT) rm -rf $(TOOLS_PATH)/cmoc/mo5/sap/*.o rm -rf $(TOOLS_PATH)/z88dk/cpc/nocart/nocart$(COMPILEDEXT) rm -rf $(TOOLS_PATH)/z88dk/cpc/nocart/src/*.o rm -rf $(TOOLS_PATH)/olivetti_m20/m20$(COMPILEDEXT) rm -rf $(TOOLS_PATH)/olivetti_m20/m20floppy-0.61/*.o rm -rf $(TOOLS_PATH)/ti99/elf2ea5$(COMPILEDEXT) rm -rf $(TOOLS_PATH)/ti99/ea5split$(COMPILEDEXT) rm -rf $(TOOLS_PATH)/ti99/crt0.o rm -rf $(TOOLS_PATH)/ti99/crt0_ea5.o rm -rf $(TOOLS_PATH)/ti99/cart_header.o cd $(TOOLS_PATH)/generic/exomizer/src && $(GNU_MAKE) clean rm -rf $(TOOLS_PATH)/generic/exomizer/exomizer$(COMPILEDEXT) rm -rf $(TOOLS_PATH)/generic/exomizer/exomizer rm -rf $(TOOLS_PATH)/generic/CC1541/cc1541$(COMPILEDEXT) rm -rf $(TOOLS_PATH)/generic/CC1541/cc1541 rm -rf $(TOOLS_PATH)/generic/CC1541/cc1541.out rm -rf $(TOOLS_PATH)/z88dk/abc80/abcdisk-2.7/*.o rm -rf $(TOOLS_PATH)/z88dk/abc80/abcdisk-2.7/abcwrite$(COMPILEDEXT) rm -rf $(TOOLS_PATH)/z88dk/abc80/abcdisk-2.7/abcread$(COMPILEDEXT) rm -rf $(TOOLS_PATH)/z88dk/abc80/abcdisk-2.7/bin2abc$(COMPILEDEXT) rm -rf $(TOOLS_PATH)/z88dk/abc80/abcdisk-2.7/abcwrite rm -rf $(TOOLS_PATH)/z88dk/abc80/abcdisk-2.7/abcread rm -rf $(TOOLS_PATH)/z88dk/abc80/abcdisk-2.7/bin2abc rm -rf $(TOOLS_PATH)/cc65/telestrat/tap2dsk$(EXEEXT) rm -rf $(TOOLS_PATH)/cc65/telestrat/old2mfm$(EXEEXT) cd $(TOOLS_PATH)/cc65/atari/mkatr-master && $(GNU_MAKE) clean rm -rf $(TOOLS_PATH)/cc65/atari/mkatr-master/*.exe rm -rf $(TOOLS_PATH)/cc65/atari/mkatr-master/*.out rm -rf $(TOOLS_PATH)/cc65/atari/mkatr-master/mkatr clean_logs: rm -rf ../logs/*.log ================================================ FILE: src/makefiles.common/debug/Makefile.cc6303_debug ================================================ # CC6303 debugging mc10_test: cc68 -tmc10 -D__MC10__ $(SOURCE_PATH)/../../test/mc10_test1.c -o $(BUILD_PATH)/$@ vic20_test: cl65 -tvic20 -D__VIC20__ $(SOURCE_PATH)/../../test/mc10_test1.c -o$(BUILD_PATH)/$@.prg c64_test: cl65 -D__C64__ $(SOURCE_PATH)/../../test/mc10_test1.c -o$(BUILD_PATH)/$@.prg mc10_test2: cc68 -tmc10 -D__MC10__ $(SOURCE_PATH)/../../test/mc10_test2.c -o $(BUILD_PATH)/$@ vic20_test2: cl65 -tvic20 -D__VIC20__ $(SOURCE_PATH)/../../test/mc10_test2.c -o$(BUILD_PATH)/$@.prg c64_test2: cl65 -D__C64__ $(SOURCE_PATH)/../../test/mc10_test2.c -o$(BUILD_PATH)/$@.prg mc10_test3: cc68 -tmc10 -D__MC10__ $(SOURCE_PATH)/../../test/mc10_test3.c -o $(BUILD_PATH)/$@ vic20_test3: cl65 -tvic20 -D__VIC20__ $(SOURCE_PATH)/../../test/mc10_test3.c -o$(BUILD_PATH)/$@.prg c64_test3: cl65 -D__C64__ $(SOURCE_PATH)/../../test/mc10_test3.c -o$(BUILD_PATH)/$@.prg mc10_test4: cc68 -tmc10 -D__MC10__ $(SOURCE_PATH)/../../test/mc10_test4.c $(SOURCE_PATH)/../../test/mc10_getk.s -o $(BUILD_PATH)/$@ ================================================ FILE: src/makefiles.common/debug/Makefile.cc65_debug ================================================ # CC65 Debugging Tests TEST_PATH ?= $(SOURCE_PATH)/../../test creativision_hello: $(CC65_PATH)$(MYCC65) $(INCLUDE_OPTS) -O -t creativision \ $(SOURCE_PATH)/../experiments/hello.c \ -o $(BUILD_PATH)/creativision_hello.bin pointerToFunction: $(CC65_PATH)$(MYCC65) $(INCLUDE_OPTS) -t pce \ $(SOURCE_PATH)/../experiments/pointerToFunction.c \ -o $(BUILD_PATH)/pointerToFunctions.pce conio: $(CC65_PATH)$(MYCC65) $(INCLUDE_OPTS) -O -t gamate experiments/conio.c -o $(BUILD_PATH)/conio.bin $(TOOLS_PATH)/gamate-fixcart $(BUILD_PATH)/conio.bin c64_joy-test: $(CC65_PATH)$(MYCC65) $(INCLUDE_OPTS) -O -t c64 -DJOYSTICK_DRIVER=c64_hitjoy_joy experiments/joy-test.c -o $(BUILD_PATH)/joy-test.prg joy-test: $(CC65_PATH)$(MYCC65) $(INCLUDE_OPTS) -O -t gamate experiments/joy-test.c -o $(BUILD_PATH)/joy-test.bin $(TOOLS_PATH)/gamate-fixcart $(BUILD_PATH)/joy-test.bin none_no_graphics: $(CC65_PATH)$(MYCC65) $(INCLUDE_OPTS) -t none -c \ -D__BBC__ \ -D__NORMALIZED_RAND \ -DXSize=79 \ -DYSize=22 \ -D_XL_NO_SLEEP \ -D_XL_NO_COLOR \ -D__NO_PRINT \ -DTINY_GAME \ -D__NO_WAIT \ -DTURN_BASED \ -D__NO_GRAPHICS \ -D__NO_PRINT \ -D__NO_INIT_GRAPHICS \ -D__ALT_PRINT \ -D__DEFAULT_CLEAR_SCREEN \ $(TINY_FILES) $(CC65_PATH)/ld65$(EXE) -t none \ --obj-path $(SOURCE_PATH) \ -m $(BUILD_PATH)/none_no_graphics.map \ -o $(BUILD_PATH)/none_no_graphics.bin \ $(TINY_OBJ) supervision_dummy: $(CC65_PATH)$(MYCC65) $(INCLUDE_OPTS) -O -t supervision \ -D__NO_PRINT -D_XL_NO_SLEEP \ -D__BIT_MAPPED_4_GRAPHICS_DUMMY -D__NO_INIT_GRAPHICS \ -D__DEFAULT_CLEAR_SCREEN \ -D__NO_WAIT \ -D_XL_NO_SLEEP \ $(SOURCE_PATH)/end_screen.c \ $(FULL_FILES) \ -o $(BUILD_PATH)/FULL_supervision_dummy.sv atari_lynx_hello_test: $(CC65_PATH)$(MYCC65) $(INCLUDE_OPTS) -O -t lynx $(SOURCE_PATH)/../debug/tgi_lynx_test.c \ -o $(BUILD_PATH)/ATARI_LYNX_HELLO_TEST.lnx atari_lynx_black_test: $(CC65_PATH)$(MYCC65) $(INCLUDE_OPTS) -O -t lynx $(SOURCE_PATH)/../test/tgi_lynx_black_test.c \ -o $(BUILD_PATH)/ATARI_LYNX_BLACK_TEST.lnx atari_lynx_cgetc_test: $(CC65_PATH)$(MYCC65) $(INCLUDE_OPTS) -O -t lynx $(SOURCE_PATH)/../test/tgi_lynx_cgetc_test.c \ -o $(BUILD_PATH)/ATARI_LYNX_CGETC_TEST.lnx error_cc65: $(CC65_PATH)$(MYCC65) $(INCLUDE_OPTS) -t vic20 $(SOURCE_PATH)/../experiments/error.c -o $(BUILD_PATH)/error_cc65.prg supervision_test: $(CC65_PATH)$(MYCC65) $(INCLUDE_OPTS) -O -t supervision \ --config $(CFG_PATH)/cc65/supervision-16k.cfg \ $(SOURCE_PATH)/../test/supervision_test.c \ -o $(BUILD_PATH)/TEST_supervision.sv supervision_cc65_test: $(CC65_PATH)$(MYCC65) $(INCLUDE_OPTS) -O -t supervision \ /home/fabri/CC65_FIX/cc65/samples/supervisionhello.c \ -o $(BUILD_PATH)/TEST_hellosupervision.sv bbc_test: $(CC65_PATH)$(MYCC65) $(INCLUDE_OPTS) -t bbc -c \ -o $(BUILD_PATH)/bbc_test.o \ -D__BBC__ \ -D__NORMALIZED_RAND \ -DXSize=79 \ -DYSize=22 \ -D_XL_NO_SLEEP \ -D_XL_NO_COLOR \ -D__NO_PRINT \ -DTINY_GAME \ -D__NO_WAIT \ -DTURN_BASED \ -D__NO_GRAPHICS \ -D__NO_PRINT \ -D__NO_INIT_GRAPHICS \ -D__ALT_PRINT \ -D__DEFAULT_CLEAR_SCREEN \ $(SOURCE_PATH)/main.c gamate_test: $(CC65_PATH)$(MYCC65) $(INCLUDE_OPTS) -O -t gamate \ $(SOURCE_PATH)/../test/gamate_test.c \ -o $(BUILD_PATH)/gamate_test.bin $(TOOLS_PATH)/cc65/gamate/gamate-fixcart $(BUILD_PATH)/gamate_test.bin c64_hello_test: $(CC65_PATH)$(MYCC65) -O -t c64 \ $(TEST_PATH)/helloworld_getchar.c -o $(BUILD_PATH)/$@.prg telestrat_hello_test: $(CC65_PATH)$(MYCC65) -O -t telestrat \ $(TEST_PATH)/helloworld_getchar.c -o $(BUILD_PATH)/$@ telestrat_hello_cgetc_test: $(CC65_PATH)$(MYCC65) -O -t telestrat \ $(TEST_PATH)/hello_cgetc.c -o $(BUILD_PATH)/$@ telestrat_hello_test0: $(CC65_PATH)$(MYCC65) -O -t telestrat \ $(TEST_PATH)/helloworld.c -o $(BUILD_PATH)/$@ telestrat_conio: $(CC65_PATH)$(MYCC65) -O -t telestrat \ $(TEST_PATH)/conio.c -o $(BUILD_PATH)/$@ telestrat_conio0: $(CC65_PATH)$(MYCC65) -O -t telestrat \ $(TEST_PATH)/conio0.c -o $(BUILD_PATH)/$@ c64_conio: $(CC65_PATH)$(MYCC65) -O -t c64 \ $(TEST_PATH)/conio.c -o $(BUILD_PATH)/$@ ================================================ FILE: src/makefiles.common/debug/Makefile.cmoc_debug ================================================ coco_test_rand: cmoc -O0 -c $(SOURCE_PATH)/../experiments/coco_rand_test.c cmoc -O0 -o $(BUILD_PATH)/coco_rand_test.bin $(SOURCE_PATH)/../coco_rand_test.o hello_vec: cmoc --vectrex -Wno-const -c $(SOURCE_PATH)/../experiments/hello_vec.c cmoc --vectrex -o $(BUILD_PATH)/hello_vec.bin $(SOURCE_PATH)/../hello_vec.o rm $(SOURCE_PATH)/../hello_vec.o hello_coco: cmoc -D__CMOC__ -Wno-const -c $(SOURCE_PATH)/../experiments/hello.c cmoc -o $(BUILD_PATH)/hello_coco.bin $(SOURCE_PATH)/../hello.o rm $(SOURCE_PATH)/../hello.o coco_strings_test: cmoc -c $(MO5_OPTS) $(INCLUDE_OPTS) ./test/coco_strings_test.c cmoc $(MO5_OPTS) $(INCLUDE_OPTS) -o $(BUILD_PATH)/coco_strings_test.bin ./coco_strings_test.o # rm ./mo5.o # $(TOOLS_PATH)/cmoc/mo5/f2k5 $(BUILD_PATH)/mo5.bin # mv $(BUILD_PATH)/mo5.bin . # $(TOOLS_PATH)/cmoc/mo5/sapfs.exe -c mo5.sap # $(TOOLS_PATH)/cmoc/mo5/sapfs.exe --add mo5.sap mo5.bin # mv ./mo5.bin $(BUILD_PATH) # mv ./mo5.sap $(BUILD_PATH) # mv ./FILE.k5 $(BUILD_PATH)/mo5.k5 coco3_test: cmoc -c ./test/coco3_test.c cmoc -o $(BUILD_PATH)/coco3_test.bin coco3_test.o rm coco3_test.o cp $(BUILD_PATH)/coco3_test.bin XCHASE.BIN $(TOOLS_PATH)/cmoc/coco/file2dsk XCHASE.BIN mv XCHASE.DSK $(BUILD_PATH)/$@.dsk rm XCHASE.BIN ================================================ FILE: src/makefiles.common/debug/Makefile.lcc1802_debug ================================================ # ------------------------------------------------------------------------------------------ # LCC1802 # -target=xr18CX # https://sites.google.com/site/lcc1802/downloads/Quarrantine.zip?attredirects=0&d=1 comx_hello0: $(LCC1802) $(LCC1802_OPTS) $(COMX_OPTS) \ $(SOURCE_PATH)/../test/hwcomx.c mv a.hex $(BUILD_PATH)/comx_hello0.hex comx_hello: $(LCC1802) $(LCC1802_OPTS) $(COMX_OPTS) \ $(SOURCE_PATH)/../test/hwcomx.c mv a.hex $(BUILD_PATH)/comx_hello.hex pecom_hello: $(LCC1802) $(LCC1802_OPTS) $(PECOM_OPTS) \ $(SOURCE_PATH)/../test/hwpecom.c mv a.hex $(BUILD_PATH)/pecom_hello.hex comx_hello1: $(LCC1802) $(LCC1802_OPTS) $(COMX_OPTS) \ $(SOURCE_PATH)/../test/hwcomx1.c mv a.hex $(BUILD_PATH)/comx_hello1.hex comx_hello2: $(LCC1802) $(LCC1802_OPTS) $(COMX_OPTS) \ $(SOURCE_PATH)/../test/hwcomx2.c mv a.hex $(BUILD_PATH)/comx_hello2.hex comx_hello_integer: $(LCC1802) $(LCC1802_OPTS) $(COMX_OPTS) \ $(SOURCE_PATH)/../test/comx_hello_integer.c mv a.hex $(BUILD_PATH)/comx_hello_integer.hex comx_gotoxy: $(LCC1802) $(LCC1802_OPTS) $(COMX_OPTS) \ $(SOURCE_PATH)/../test/hwcomx_gotoxy.c mv a.hex $(BUILD_PATH)/hwcomx_gotoxy.hex comx_gotoxy2: $(LCC1802) $(LCC1802_OPTS) $(COMX_OPTS) \ $(SOURCE_PATH)/../test/hwcomx_gotoxy2.c mv a.hex $(BUILD_PATH)/hwcomx_gotoxy2.hex comx_mod: $(LCC1802) $(LCC1802_OPTS) $(COMX_OPTS) \ $(SOURCE_PATH)/../test/comx_mod.c mv a.hex $(BUILD_PATH)/comx_mod.hex comx_pp_debug0: $(LCC1802) $(LCC1802_OPTS) $(COMX_OPTS) -D_FOO_DEF \ $(SOURCE_PATH)/../test/hwcomx_pp_debug.c mv a.hex $(BUILD_PATH)/comx_pp_debug0.hex comx_size_debug: $(LCC1802) $(LCC1802_OPTS) $(COMX_OPTS) -D_FOO_DEF \ $(SOURCE_PATH)/../test/comx_size_debug.c mv a.hex $(BUILD_PATH)/comx_size_debug.hex comx_conv_debug: $(LCC1802) $(LCC1802_OPTS) $(COMX_OPTS) \ $(SOURCE_PATH)/../test/comx_conv_debug.c mv a.hex $(BUILD_PATH)/comx_conv_debug.hex comx_class: $(LCC1802) $(LCC1802_OPTS) $(COMX_OPTS) \ $(SOURCE_PATH)/../test/comx_class.c mv a.hex $(BUILD_PATH)/comx_class.hex comx_simple_class: $(LCC1802) $(LCC1802_OPTS) $(COMX_OPTS) \ $(SOURCE_PATH)/../test/comx_simple_class.c mv a.hex $(BUILD_PATH)/comx_simple_class.hex comx_simplest_class: $(LCC1802) $(LCC1802_OPTS) $(COMX_OPTS) \ $(SOURCE_PATH)/../test/comx_simplest_class.c mv a.hex $(BUILD_PATH)/comx_simplest_class.hex comx_pointer2func: $(LCC1802) $(LCC1802_OPTS) $(COMX_OPTS) \ $(SOURCE_PATH)/../test/comx_pointer2func.c mv a.hex $(BUILD_PATH)/comx_pointer2func.hex comx_pp_debug: $(LCC1802) $(LC1802_OPTS) $(COMX_OPTS) \ -DXSize=40 \ -DYSize=24 \ -D__COMX__ \ \ -D__ALT_CLEAR_SCREEN \ $(COMX_MACROS) \ $(SOURCE_PATH)/../test/comx_pp_debug.c mv a.hex $(BUILD_PATH)/comx_pp_debug.hex lcc1802_debug : tiny_combo_rand.cat mv tiny_combo_rand.cat tiny_combo_rand.c $(LCC1802) $(LC1802_OPTS) $(INCLUDE_OPTS) -Wf-volatile \ $(DEBUG_MACROS) \ -D__ALT_RAND \ tiny_combo_rand.c rm tiny_combo_rand.c mv a.hex $(BUILD_PATH)/TINY_lcc1802_debug.hex draco_hello: $(LCC1802) $(LCC1802_OPTS) $(DRACO_OPTS) -D__CIDELSA__ \ $(SOURCE_PATH)/../test/lcc1802_test.c mv a.hex $(BUILD_PATH)/draco_hello.hex ================================================ FILE: src/makefiles.common/debug/Makefile.z88dk_debug ================================================ # Z88DK Debugging Tests # include ./games/chase/Makefile.chase TEST_PATH ?= $(SOURCE_PATH)/../../debug newbrain_hello: $(Z88DK_PATH)$(MYZ88DK) +newbrain $(SCCZ80_OPTS) $(INCLUDE_OPTS) \ -lndos \ $(TEST_PATH)/helloworld.c \ -create-app tar czvf xchase.tar.zip _dir.txt a.bas a.dat mv xchase.tar.zip $(BUILD_PATH) rm _dir.txt rm a.bas rm a.dat rm a.bin spectrum_litterals: $(Z88DK_PATH)$(MYZ88DK) +zx $(SCCZ80_OPTS) \ -vn \ -lndos \ $(TEST_PATH)/litterals.c \ -create-app spectrum_extern: $(Z88DK_PATH)$(MYZ88DK) +zx -compiler=sdcc \ -vn \ -lndos \ $(TEST_PATH)/foo.c \ $(TEST_PATH)/bar.c \ -create-app msx_mode1_test: $(Z88DK_PATH)$(MYZ88DK) +msx $(SCCZ80_OPTS) -subtype=rom \ -vn \ -lndos \ $(TEST_PATH)//msx_test.c \ -create-app -o $(BUILD_PATH)/TEST_msx.prg rm $(BUILD_PATH)/TEST_msx.prg msx_mode2_test: $(Z88DK_PATH)$(MYZ88DK) +msx $(SCCZ80_OPTS) -subtype=rom \ -pragma-redirect:fputc_cons=fputc_cons_generic \ -vn \ -lndos \ $(TEST_PATH)//msx_test2.c \ -create-app -o $(BUILD_PATH)/TEST_msx2.prg rm $(BUILD_PATH)/TEST_msx2.prg c7420_hello: $(Z88DK_PATH)$(MYZ88DK) +c7420 $(SCCZ80_OPTS) $(INCLUDE_OPTS) \ -lndos \ $(TEST_PATH)/helloworld.c \ -create-app mv a.bin $(BUILD_PATH) mv _a.bas $(BUILD_PATH) oz_hello: $(Z88DK_PATH)$(MYZ88DK) +oz $(SCCZ80_OPTS) $(INCLUDE_OPTS) \ $(TEST_PATH)/helloworld.c $(TOOLS_PATH)/z88dk/oz/makewzd.exe a rm a.bin mv a.wzd $(BUILD_PATH)/oz_hello.wzd z88_hello: $(Z88DK_PATH)$(MYZ88DK) +z88 $(SCCZ80_OPTS) $(INCLUDE_OPTS) -D__Z88__ -create-app -subtype=app \ $(TEST_PATH)/helloworld.c rm a.bin rm a_BSS.bin rm a_DATA.bin mv a.63 $(BUILD_PATH)/ mv a.epr $(BUILD_PATH)/ x07_hello: $(Z88DK_PATH)$(MYZ88DK) +x07 $(SCCZ80_OPTS) $(INCLUDE_OPTS) \ -Cz--audio \ $(TEST_PATH)/helloworld.c \ -create-app cpm_hello: $(Z88DK_PATH)$(MYZ88DK) +cpm $(SCCZ80_OPTS) $(INCLUDE_OPTS) \ $(TEST_PATH)/hello.c \ -create-app rm a.bin mv A.COM $(BUILD_PATH)/CPMHELLO.COM c128_z80_background_color: $(Z88DK_PATH)$(MYZ88DK) +c128 -subtype=disk \ $(TEST_PATH)/helloworld_background_color.c \ -create-app -oa40.bin $(TOOLS_PATH)/generic/c1541 -format "crosschase,0" d64 FULL_c128_z80_40col.d64 $(TOOLS_PATH)/generic/c1541 -attach FULL_c128_z80_40col.d64 -write a40.ldr $(TOOLS_PATH)/generic/c1541 -attach FULL_c128_z80_40col.d64 -write a40 mv FULL_c128_z80_40col.d64 $(BUILD_PATH)/c128_z80_background_color.d64 rm A40.LDR rm A40 rm a40.bin spectrum_background_color: $(Z88DK_PATH)$(MYZ88DK) +zx -lndos \ $(TEST_PATH)/helloworld_background_color.c -create-app rm -f a.bin rm -f a_BANK_7.bin mv a.tap $(BUILD_PATH)/spectrum_background_color.tap aquarius_hello_world: $(Z88DK_PATH)$(MYZ88DK) +aquarius $(SCCZ80_OPTS) -clib=ansi $(INCLUDE_OPTS) -vn \ $(TEST_PATH)/hello_conio.c \ -create-app aquarius_hello_stack: $(Z88DK_PATH)$(MYZ88DK) +aquarius $(SCCZ80_OPTS) -pragma-redirect:fputc_cons=fputc_cons_generic -pragma-output:STACKPTR=20000 $(INCLUDE_OPTS) -vn \ $(TEST_PATH)/hello_fputc.c \ -create-app -o minimal_hello getk_test: $(Z88DK_PATH)$(MYZ88DK) +zx81 $(ZSDCC_OPTS) \ -compiler=sdcc \ -create-app -o $(BUILD_PATH)/getk_test.prg \ $(TEST_PATH)/getk_test.c getk_test_x07: $(Z88DK_PATH)$(MYZ88DK) +x07 $(ZSDCC_OPTS) \ -compiler=sdcc \ -create-app -o $(BUILD_PATH)/getk_test.prg \ $(TEST_PATH)/getk_test.c sms_libctest: $(Z88DK_PATH)$(MYZ88DK) +sms $(SCCZ80_OPTS) \ -vn -lndos \ -create-app \ -o $(BUILD_PATH)/sms_libctest.sms \ $(TEST_PATH)/libctest.c m5_sounds: $(Z88DK_PATH)$(MYZ88DK) +m5 $(SCCZ80_OPTS) -create-app \ -vn -lndos \ $(TEST_PATH)/sounds.c rm -f a.bin rm -f A_BSS.bin rm -f A_DATA.bin mv a.rom $(BUILD_PATH)/m5_sounds.rom mz2500_getchar: $(Z88DK_PATH)$(MYZ88DK) +mz2500 $(SCCZ80_OPTS) -create-app \ -vn -lndos \ $(TEST_PATH)/getchar_test.c rm -f a.bin mv a.2D $(BUILD_PATH)/mz2500_getchar.2D spectrum_sounds: $(Z88DK_PATH)$(MYZ88DK) +zx $(SCCZ80_OPTS) -create-app \ -vn -lndos \ $(TEST_PATH)/sounds.c rm -f a.bin rm -f a_BANK_7.bin mv a.tap $(BUILD_PATH)/spectrum_sounds.tap sms_hello: $(Z88DK_PATH)$(MYZ88DK) +sms $(SCCZ80_OPTS) -startup=1 -clib=new -O3 \ -vn -pragma-include:$(CFG_PATH)/z88dk/zpragma_sms.inc \ -create-app \ $(TEST_PATH)/z88dk_hello.c rm a_BSS.bin rm a_CODE.bin rm a_DATA.bin rm a_UNASSIGNED.bin mv a.sms $(BUILD_PATH) samcoupe_wait_for_key: $(Z88DK_PATH)$(MYZ88DK) +sam $(SCCZ80_OPTS) -O3 \ -vn \ -create-app -o $(BUILD_PATH)/FULL_samcoupe.bin \ $(TEST_PATH)/wait_for_key.c cp $(TOOLS_PATH)/z88dk/samcoupe/samdos2_empty $(TOOLS_PATH)/z88dk/samcoupe/samdos2 $(TOOLS_PATH)/z88dk/samcoupe/pyz80.py -I $(TOOLS_PATH)/z88dk/samcoupe/samdos2 $(TOOLS_PATH)/z88dk/samcoupe/sam_wrapper.asm mv $(TOOLS_PATH)/z88dk/samcoupe/sam_wrapper.dsk $(BUILD_PATH)/X$(GAME_NAME)_samcoupe.dsk rm $(BUILD_PATH)/FULL_samcoupe.bin abc80_hello: $(Z88DK_PATH)$(MYZ88DK) +abc80 $(SCCZ80_OPTS) \ -vn -lndos \ $(TEST_PATH)/hello.c perl $(TOOLS_PATH)/z88dk/abc80/bin2bac.pl $(SOURCE_PATH)/../a.bin > a.bac # $(TOOLS_PATH)/z88dk/abc80/bin2bac2$(COMPILEDEXT) a.bin $(BUILD_PATH)/abc80_hello.bac 49200 rm a.bin abc800_hello: $(Z88DK_PATH)$(MYZ88DK) +abc800 $(SCCZ80_OPTS) -Ca --reloc-info \ -vn -lndos \ $(TEST_PATH)/hello.c perl $(TOOLS_PATH)/z88dk/abc80/bin2bac.pl -800 $(SOURCE_PATH)/../a.bin $(SOURCE_PATH)/../a.reloc > a.bac mv a.bac $(BUILD_PATH)/abc800_hello.bac rm a.reloc rm a.bin rex_hello: $(Z88DK_PATH)$(MYZ88DK) +rex $(SCCZ80_OPTS) \ -vn -lndos \ $(TEST_PATH)/hello.c \ -create-app mtx_hello: $(Z88DK_PATH)$(MYZ88DK) +mtx $(SCCZ80_OPTS) \ -vn -lndos \ $(TEST_PATH)/hello.c \ -create-app mv a.wav $(BUILD_PATH)/hello.wav mv a $(BUILD_PATH)/hello.mtx c128_hello: $(Z88DK_PATH)$(MYZ88DK) +c128 $(SCCZ80_OPTS) \ -vn -lndos \ $(TEST_PATH)/hello.c \ -create-app # -pragma-redirect:getk=getk_inkey trs80_test_getch: $(Z88DK_PATH)$(MYZ88DK) +trs80 $(SCCZ80_OPTS) -lndos \ -lm -create-app \ -pragma-redirect:getk=getk_inkey \ -vn -lndos \ $(SOURCE_PATH)/../../notes/tests/trs80_test.c vg5k_hello: $(Z88DK_PATH)$(MYZ88DK) +vg5k $(ZSDCC_OPTS) -compiler=sdcc \ -vn -lndos \ $(TEST_PATH)/vg5k_hello.c \ -create-app sms_chicken: $(Z88DK_PATH)$(MYZ88DK) +sms $(SCCZ80_OPTS) \ -vn -lndos \ -create-app \ -o $(BUILD_PATH)/sms_chicken.sms \ $(TEST_PATH)/chicken/chicken.c \ $(TEST_PATH)/chicken/chicken_graphics.asm sms_joy_test: $(Z88DK_PATH)$(MYZ88DK) +sms $(SCCZ80_OPTS) -clib=sdcc_iy -startup=17 \ -pragma-include:$(CFG_PATH)/z88dk/zpragma_sms.inc \ -create-app \ $(TEST_PATH)/sms_joy_test.c \ -o $(BUILD_PATH)/sms_joy_test.bin rm $(BUILD_PATH)/sms_joy_test_CODE.bin rm $(BUILD_PATH)/sms_joy_test_DATA.bin rm $(BUILD_PATH)/sms_joy_test_BSS.bin rm $(BUILD_PATH)/sms_joy_test_UNASSIGNED.bin m5_hello: $(Z88DK_PATH)$(MYZ88DK) +m5 $(SCCZ80_OPTS) \ -create-app -vn -o$(BUILD_PATH)/m5_hello -lndos \ $(TEST_PATH)/hello.c trs80_hello: $(Z88DK_PATH)$(MYZ88DK) +trs80 $(SCCZ80_OPTS) \ -create-app -vn -o$(BUILD_PATH)/trs80_hello -lndos \ $(TEST_PATH)/hello.c x1_hello: $(Z88DK_PATH)$(MYZ88DK) +x1 $(SCCZ80_OPTS) \ -o $(BUILD_PATH)/x1_hello.bin -vn -lndos \ $(TEST_PATH)/hello.c x1_wait_press: $(Z88DK_PATH)$(MYZ88DK) +x1 $(SCCZ80_OPTS) \ -o $(BUILD_PATH)/x1_wait_press.bin -vn -lndos \ $(TEST_PATH)/wait_press.c z1013_getk: $(Z88DK_PATH)$(MYZ88DK) +z1013 $(SCCZ80_OPTS) \ -o $(BUILD_PATH)/z1013_getk.bin -vn -lndos \ $(TEST_PATH)/wait_press.c x1_getk: $(Z88DK_PATH)$(MYZ88DK) +x1 $(SCCZ80_OPTS) \ -o $(BUILD_PATH)/x1_getk.bin -vn -lndos \ $(TEST_PATH)/test_getk.c gal_hello: $(Z88DK_PATH)$(MYZ88DK) +gal $(ZSDCC_OPTS) \ -compiler=sdcc \ $(INCLUDE_OPTS) \ -pragma-need=ansiterminal \ -pragma-include:$(SOURCE_PATH)/../cfg/z88dk/zpragma.inc \ -vn -lndos -create-app -Cz--audio \ $(TEST_PATH)/hello.c \ -o $(BUILD_PATH)/hello.prg rm $(BUILD_PATH)/hello.prg ti85_hello: $(Z88DK_PATH)$(MYZ88DK) +ti85 $(SCCZ80_OPTS) $(TEST_PATH)/hello.c \ -lndos \ -create-app -o $(BUILD_PATH)/ti85_hello.bin rm $(BUILD_PATH)/ti85_hello.bin # load "hello.cpc",&1200 cpc_hello: $(Z88DK_PATH)$(MYZ88DK) +cpc -lndos -clib=ansi -create-app -subtype=dsk -o$(BUILD_PATH)/HELLO -vn \ $(TEST_PATH)/helloworld.c # $(TOOLS_PATH)/z88dk/cpc/2cdt.exe -n -r cross_chase $(BUILD_PATH)/HELLO_cpc.cpc $(BUILD_PATH)/HELLO_cpc.cdt # rm -rf HELLO_cpc.dsk # $(TOOLS_PATH)/z88dk/cpc/cpcxfsw -nd HELLO_cpc.dsk # $(TOOLS_PATH)/z88dk/cpc/cpcxfsw HELLO_cpc.dsk -p $(BUILD_PATH)/HELLO_cpc.cpc xchase # mv HELLO_cpc.dsk $(BUILD_PATH)/ # cp $(TOOLS_PATH)/z88dk/cpc/nocart/*.rom . # $(TOOLS_PATH)/z88dk/cpc/nocart/nocart.exe $(BUILD_PATH)/HELLO_cpc.dsk $(BUILD_PATH)/HELLO_gx4000.cpr -c 'run"xchase' # rm os.rom # rm amsdos.rom # rm basic.rom # rm $(BUILD_PATH)/HELLO_cpc.cpc # memory &11ff # load "color.cpc",&1200 # call &1200 cpc_test: $(Z88DK_PATH)$(MYZ88DK) +cpc -lndos -pragma-define:REGISTER_SP=-1 -clib=ansi -create-app -subtype=dsk -o$(BUILD_PATH)/COLOR -vn \ $(TEST_PATH)/cpc_test.c # $(TOOLS_PATH)/z88dk/cpc/2cdt.exe -n -r cross_chase $(BUILD_PATH)/HELLO_cpc.cpc $(BUILD_PATH)/HELLO_cpc.cdt # rm -rf HELLO_cpc.dsk # $(TOOLS_PATH)/z88dk/cpc/cpcxfsw -nd HELLO_cpc.dsk # $(TOOLS_PATH)/z88dk/cpc/cpcxfsw HELLO_cpc.dsk -p $(BUILD_PATH)/HELLO_cpc.cpc xchase # mv HELLO_cpc.dsk $(BUILD_PATH)/ # cp $(TOOLS_PATH)/z88dk/cpc/nocart/*.rom . # $(TOOLS_PATH)/z88dk/cpc/nocart/nocart.exe $(BUILD_PATH)/HELLO_cpc.dsk $(BUILD_PATH)/HELLO_gx4000.cpr -c 'run"xchase' # rm os.rom # rm amsdos.rom # rm basic.rom # rm $(BUILD_PATH)/HELLO_cpc.cpc msx_bgcolor: $(Z88DK_PATH)$(MYZ88DK) +msx -lndos -pragma-redirect:fputc_cons=fputc_cons_generic -create-app -subtype=rom -o$(BUILD_PATH)/bgcolor -vn \ $(TEST_PATH)/helloworld_background_color.c cpc_bgcolor: $(Z88DK_PATH)$(MYZ88DK) +cpc -lndos -pragma-define:REGISTER_SP=-1 -pragma-redirect:fputc_cons=fputc_cons_generic -create-app -subtype=dsk -o$(BUILD_PATH)/bgcolor -vn \ $(TEST_PATH)/helloworld_background_color.c # $(TOOLS_PATH)/z88dk/cpc/2cdt.exe -n -r cross_chase $(BUILD_PATH)/HELLO_cpc.cpc $(BUILD_PATH)/HELLO_cpc.cdt # rm -rf HELLO_cpc.dsk # $(TOOLS_PATH)/z88dk/cpc/cpcxfsw -nd HELLO_cpc.dsk # $(TOOLS_PATH)/z88dk/cpc/cpcxfsw HELLO_cpc.dsk -p $(BUILD_PATH)/HELLO_cpc.cpc xchase # mv HELLO_cpc.dsk $(BUILD_PATH)/ # cp $(TOOLS_PATH)/z88dk/cpc/nocart/*.rom . # $(TOOLS_PATH)/z88dk/cpc/nocart/nocart.exe $(BUILD_PATH)/HELLO_cpc.dsk $(BUILD_PATH)/HELLO_gx4000.cpr -c 'run"xchase' # rm os.rom # rm amsdos.rom # rm basic.rom # rm $(BUILD_PATH)/bgcolor pps_vt52_test: $(Z88DK_PATH)$(MYZ88DK) +pps $(SCCZ80_OPTS) $(INCLUDE_OPTS) \ -pragma-redirect:fputc_cons=fputc_cons_generic \ $(TEST_PATH)/vt52_test.c \ -lndos -vn g800_vt52_test: $(Z88DK_PATH)$(MYZ88DK) +g800 $(SCCZ80_OPTS) $(INCLUDE_OPTS) \ -pragma-redirect:fputc_cons=fputc_cons_generic \ $(TEST_PATH)/vt52_test.c \ -lndos -vn \ -create-app -o srr_vt52_test: $(Z88DK_PATH)$(MYZ88DK) +srr $(SCCZ80_OPTS) $(INCLUDE_OPTS) \ -pragma-redirect:fputc_cons=fputc_cons_generic \ $(TEST_PATH)/vt52_test.c \ -lndos -vn \ -create-app -o rm a.srr mv a.wav $(BUILD_PATH)/srr_vt52_test.wav eg2k_hello: $(Z88DK_PATH)$(MYZ88DK) +trs80 $(SCCZ80_OPTS) -subtype=eg2000disk -create-app $(INCLUDE_OPTS) \ $(TEST_PATH)/hello.c mv a.cmd $(BUILD_PATH)/eg2k_hello.cmd z1013_hello: $(Z88DK_PATH)$(MYZ88DK) +z1013 $(SCCZ80_OPTS) $(INCLUDE_OPTS) $(TEST_PATH)/hello.c \ -lndos -vn -clib=ansi \ -create-app -o mv $(BUILD_PATH)/../A.Z80 $(BUILD_PATH)/z1013_hello.z80 rm $(BUILD_PATH)/../a.bin vg5k_wait_press: $(Z88DK_PATH)$(MYZ88DK) +vg5k $(SCCZ80_OPTS) $(TEST_PATH)/wait_press.c \ -lndos -vn -zorg=19000 \ -create-app -o $(BUILD_PATH)/vg5k_wait_press.prg z1013_wait_press: $(Z88DK_PATH)$(MYZ88DK) +z1013 $(SCCZ80_OPTS) $(TEST_PATH)/wait_press.c \ -lndos -vn -clib=ansi \ -create-app -o mv $(BUILD_PATH)/../A.Z80 $(BUILD_PATH)/z1013_wait_press.z80 rm $(BUILD_PATH)/../a.bin sound_test: $(Z88DK_PATH)$(MYZ88DK) +svi $(SCCZ80_OPTS) \ -clib=ansi -pragma-define:ansicolumns=32 -vn -lndos \ -create-app -o $(BUILD_PATH)/sound_test \ test/sound_test.c conio_nascom: $(Z88DK_PATH)$(MYZ88DK) +nascom $(SCCZ80_OPTS) test/coniotest.c -create-app -o $(BUILD_PATH)/conio.nas error_z88dk: $(Z88DK_PATH)$(MYZ88DK) +vg5k $(SCCZ80_OPTS) $(TEST_PATH)/error.c -o $(BUILD_PATH)/error_z88dk.prg coleco_sound_test: $(Z88DK_PATH)$(MYZ88DK) +cpm -subtype=adam -lndos -create-app -vn \ $(TEST_PATH)/psg_test.c spectrum_sound_test: $(Z88DK_PATH)$(MYZ88DK) +zx -lndos -create-app -vn \ $(TEST_PATH)/psg_test.c rm a.bin rm a_BANK_7.bin mv a.tap $(BUILD_PATH)/spectrum_sound_test.tap cpc_sound_test: $(Z88DK_PATH)$(MYZ88DK) +cpc -lndos -create-app -o$(BUILD_PATH)/SOUND_cpc.cpc -vn \ $(TEST_PATH)/psg_test.c $(TOOLS_PATH)/z88dk/cpc/2cdt.exe -n -r cross_chase $(BUILD_PATH)/SOUND_cpc.cpc $(BUILD_PATH)/SOUND_cpc.cdt rm -rf SOUND_cpc.dsk $(TOOLS_PATH)/z88dk/cpc/cpcxfsw -nd SOUND_cpc.dsk $(TOOLS_PATH)/z88dk/cpc/cpcxfsw SOUND_cpc.dsk -p $(BUILD_PATH)/SOUND_cpc.cpc xchase mv SOUND_cpc.dsk $(BUILD_PATH)/ cp $(TOOLS_PATH)/z88dk/cpc/nocart/*.rom . $(TOOLS_PATH)/z88dk/cpc/nocart/nocart.exe $(BUILD_PATH)/SOUND_cpc.dsk $(BUILD_PATH)/SOUND_gx4000.cpr -c 'run"xchase' rm os.rom rm amsdos.rom rm basic.rom rm $(BUILD_PATH)/SOUND_cpc.cpc spectrum_bitbang: $(Z88DK_PATH)$(MYZ88DK) +zx $(SCCZ80_OPTS) $(INCLUDE_OPTS) \ -pragma-include:$(CFG_PATH)/z88dk/zpragma_clib.inc \ -pragma-redirect:getk=getk_inkey \ \ \ \ -DZ88DK_JOYSTICK \ -D_XL_SLOW_DOWN_FACTOR=200 \ -D__SPECTRUM__ \ -lndos -create-app \ -D__CONIO_GRAPHICS \ \ -pragma-redirect:fputc_cons=fputc_cons_generic \ -o $(BUILD_PATH)/X$(GAME_NAME)_spectrum_48k.prg \ $(SOURCE_PATH)/../../test/bitbang.c \ rm $(BUILD_PATH)/X$(GAME_NAME)_spectrum_48k.prg rm $(BUILD_PATH)/X$(GAME_NAME)_spectrum_48k_BANK_7.bin zx_bit_bang: zcc.exe +zx -clib=default -lndos $(SOURCE_PATH)/../../test/fx.c -create-app sms_bit_bang: zcc.exe +sms -clib=default -lndos $(SOURCE_PATH)/../../test/fx.c -create-app sms_bitbang: $(Z88DK_PATH)$(MYZ88DK) +sms $(SCCZ80_OP TS) -clib=default \ -lndos \ $(SOURCE_PATH)/../../test/bitbang.c -create-app -osms_bitbang.sms c128_bitbang: $(Z88DK_PATH)$(MYZ88DK) +c128 $(SCCZ80_OPTS) \ $(INCLUDE_OPTS) \ -lndos -subtype=disk \ -D__C128_Z80__ -DXSize=40 \ \ -D__BIT_BANG_SOUND \ -D__CONIO_GRAPHICS -D__INCLUDE_CONIO_H \ $(SOURCE_PATH)/../../test/bitbang.c \ -create-app -oa40.bin $(TOOLS_PATH)/generic/c1541 -format "crosschase,0" d64 FULL_c128_z80_40col.d64 $(TOOLS_PATH)/generic/c1541 -attach FULL_c128_z80_40col.d64 -write a40.ldr $(TOOLS_PATH)/generic/c1541 -attach FULL_c128_z80_40col.d64 -write a40 mv FULL_c128_z80_40col.d64 $(BUILD_PATH)/X$(GAME_NAME)_c128_z80_40col.d64 rm A40.LDR rm A40 rm a40.bin ================================================ FILE: src/makefiles.common/targets/ack/Makefile.ack_targets ================================================ # ------------------------------------------------------------------------------------------ # ACK # # TODO: minix68k may required a recent ack version ack_targets: \ pc8086 \ linux386 \ linux68k \ linuxppc \ linuxmips \ msdos86 \ msdos386 \ osx386 \ osxppc ############################################################################################ cpm_8080_buffered_ack: $(_ACK) $(_ACK_OPTS) $(ACK_MAKEFILE_COMPILATION_OPTS) $(INCLUDE_OPTS) -mcpm \ -DXSize=39 \ -DYSize=23 \ -D__ADM3A \ -D_XL_NO_COLOR \ -DACK \ -D__CPM8080__ \ -D_XL_NO_JOYSTICK \ -DTURN_BASED \ -D__BUFFERED_GRAPHICS \ -D__STDIO \ -D__NO_INIT_GRAPHICS \ -D__NO_WAIT \ -D_XL_NO_SLEEP \ -D__DEFAULT_CLEAR_SCREEN \ -D__ALT_PRINT \ $(FULL_FILES) \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c mv cpm.com $(BUILD_PATH)/X$(GAME_NAME)_cpm8080_buffered.com rm $(SOURCE_PATH)/../../*.o cpm_8080_adm3a_ack: $(_ACK) $(_ACK_OPTS) $(ACK_MAKEFILE_COMPILATION_OPTS) $(INCLUDE_OPTS) -mcpm \ -DXSize=78 \ -DYSize=22 \ -D__ADM3A \ -D_XL_NO_COLOR \ -DACK \ -D__CPM8080__ \ -D_XL_NO_JOYSTICK \ -DTURN_BASED \ -D__CONIO_GRAPHICS \ -D__NO_INIT_GRAPHICS \ -D__NO_WAIT \ -D_XL_NO_SLEEP \ $(FULL_FILES) mv cpm.com $(BUILD_PATH)/X$(GAME_NAME)_$@.com rm $(SOURCE_PATH)/../../*.o cpm_8080_ack_targets: \ cpm_8080_buffered_ack # -D__KEY_POLL_FROM_BUFFER msdos: msdos86 msdos86: $(ASSETS_PATH)/8x8_chars.h $(_ACK) $(_ACK_OPTS) $(ACK_MAKEFILE_COMPILATION_OPTS) $(INCLUDE_OPTS) -mmsdos86 \ -DXSize=40 \ -DYSize=25 \ -DACK \ -D__MSDOS86__ \ -D_XL_NO_JOYSTICK \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_MSDOS86_SLOWDOWN) \ -D__VGA_GRAPHICS \ -D__ALT_SLEEP -D__NO_SLEEP_SEC \ -D__ALT_PRINT \ -D_XL_NO_SMALL_LETTERS \ -D__KEY_POLL_FROM_BUFFER \ -D__SPEAKER_SOUNDS \ $(FULL_FILES) \ $(CROSS_LIB_PATH)/display/init_graphics/ack/msdos86/msdos86_init_graphics.c \ $(CROSS_LIB_PATH)/display/init_graphics/ack/msdos86/init_vga.s \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c \ -o ../build/X$(GAME_NAME)_$@.com rm $(SOURCE_PATH)/../../*.o pc8088: pc86 pc8086: pc86 pc86: $(ASSETS_PATH)/8x8_chars.h $(_ACK) $(_ACK_OPTS) $(ACK_MAKEFILE_COMPILATION_OPTS) $(INCLUDE_OPTS) -mpc86 \ -DXSize=40 \ -DYSize=25 \ -DACK \ -D__MSDOS86__ \ -D_XL_NO_JOYSTICK \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_MSDOS86_SLOWDOWN) \ -D__VGA_GRAPHICS \ -D__ALT_SLEEP -D__NO_SLEEP_SEC \ -D__ALT_PRINT \ -D_XL_NO_SMALL_LETTERS \ -D__KEY_POLL_FROM_BUFFER \ -D__SPEAKER_SOUNDS \ $(FULL_FILES) \ $(CROSS_LIB_PATH)/display/init_graphics/ack/msdos86/msdos86_init_graphics.c \ $(CROSS_LIB_PATH)/display/init_graphics/ack/msdos86/init_vga.s \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c \ -o ../build/X$(GAME_NAME)_$@.img rm $(SOURCE_PATH)/../../*.o # BROKEN msdos386: $(ASSETS_PATH)/8x8_chars.h $(_ACK) $(_ACK_OPTS) $(ACK_MAKEFILE_COMPILATION_OPTS) $(INCLUDE_OPTS) -mmsdos386 \ -DXSize=40 \ -DYSize=25 \ -DACK \ -D__MSDOS86__ \ -D_XL_NO_JOYSTICK \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_MSDOS86_SLOWDOWN) \ -D__VGA_GRAPHICS \ -D__ALT_SLEEP -D__NO_SLEEP_SEC \ -D__ALT_PRINT \ -D_XL_NO_SMALL_LETTERS \ -D__KEY_POLL_FROM_BUFFER \ -D__SPEAKER_SOUNDS \ $(FULL_FILES) \ $(CROSS_LIB_PATH)/display/init_graphics/ack/msdos386/msdos386_init_graphics.c \ $(CROSS_LIB_PATH)/display/init_graphics/ack/msdos386/init386_vga.s \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c \ -o ../build/X$(GAME_NAME)_$@.exe rm $(SOURCE_PATH)/../../*.o pc8086_targets: \ pc8086 # buffered linuxppc: $(_ACK) $(_ACK_OPTS) $(ACK_MAKEFILE_COMPILATION_OPTS) $(INCLUDE_OPTS) -mlinuxppc \ -DXSize=78 \ -DYSize=21 \ -D__ADM3A \ -D_XL_NO_COLOR \ -D_XL_TURNED_BASED \ -DACK \ -D__STDIO \ -D__LINUXPPC__ \ -D_XL_NO_JOYSTICK \ -DTURN_BASED \ -D__BUFFERED_GRAPHICS \ -D__NO_INIT_GRAPHICS \ -D__NO_WAIT \ -D_XL_NO_SLEEP \ -D__DEFAULT_CLEAR_SCREEN \ -D__ALT_PRINT \ $(FULL_FILES) \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c \ -o $(BUILD_PATH)/X$(GAME_NAME)_$@.exe rm $(SOURCE_PATH)/../../*.o #buffered linux68k: $(_ACK) $(_ACK_OPTS) $(ACK_MAKEFILE_COMPILATION_OPTS) $(INCLUDE_OPTS) -mlinux68k \ -DXSize=78 \ -DYSize=21 \ -D__ADM3A \ -D_XL_NO_COLOR \ -D_XL_TURNED_BASED \ -DACK \ -D__STDIO \ -D__LINUXPPC__ \ -D_XL_NO_JOYSTICK \ -DTURN_BASED \ -D__BUFFERED_GRAPHICS \ -D__NO_INIT_GRAPHICS \ -D__NO_WAIT \ -D_XL_NO_SLEEP \ -D__DEFAULT_CLEAR_SCREEN \ -D__ALT_PRINT \ $(FULL_FILES) \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c \ -o $(BUILD_PATH)/X$(GAME_NAME)_$@.exe rm $(SOURCE_PATH)/../../*.o # buffered linux386: $(_ACK) $(_ACK_OPTS) $(ACK_MAKEFILE_COMPILATION_OPTS) $(INCLUDE_OPTS) -mlinux386 \ -DXSize=78 \ -DYSize=21 \ -D__ADM3A \ -D_XL_NO_COLOR \ -D_XL_TURNED_BASED \ -DACK \ -D__STDIO \ -D__LINUXPPC__ \ -D_XL_NO_JOYSTICK \ -DTURN_BASED \ -D__BUFFERED_GRAPHICS \ -D__NO_INIT_GRAPHICS \ -D__NO_WAIT \ -D_XL_NO_SLEEP \ -D__DEFAULT_CLEAR_SCREEN \ -D__ALT_PRINT \ $(FULL_FILES) \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c \ -o $(BUILD_PATH)/X$(GAME_NAME)_$@.exe rm $(SOURCE_PATH)/../../*.o linuxmips: $(_ACK) $(_ACK_OPTS) $(ACK_MAKEFILE_COMPILATION_OPTS) $(INCLUDE_OPTS) -mlinuxmips \ -DXSize=78 \ -DYSize=21 \ -D__ADM3A \ -D_XL_NO_COLOR \ -D_XL_TURNED_BASED \ -DACK \ -D__STDIO \ -D__LINUXPPC__ \ -D_XL_NO_JOYSTICK \ -DTURN_BASED \ -D__BUFFERED_GRAPHICS \ -D__NO_INIT_GRAPHICS \ -D__NO_WAIT \ -D_XL_NO_SLEEP \ -D__DEFAULT_CLEAR_SCREEN \ -D__ALT_PRINT \ $(FULL_FILES) \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c \ -o $(BUILD_PATH)/X$(GAME_NAME)_$@.exe rm $(SOURCE_PATH)/../../*.o osx386: $(_ACK) $(_ACK_OPTS) $(ACK_MAKEFILE_COMPILATION_OPTS) $(INCLUDE_OPTS) -mosx386 \ -DXSize=78 \ -DYSize=21 \ -D__ADM3A \ -D_XL_NO_COLOR \ -D_XL_TURNED_BASED \ -DACK \ -D__STDIO \ -D__LINUXPPC__ \ -D_XL_NO_JOYSTICK \ -DTURN_BASED \ -D__BUFFERED_GRAPHICS \ -D__NO_INIT_GRAPHICS \ -D__NO_WAIT \ -D_XL_NO_SLEEP \ -D__DEFAULT_CLEAR_SCREEN \ -D__ALT_PRINT \ $(FULL_FILES) \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c \ -o $(BUILD_PATH)/X$(GAME_NAME)_$@.exe rm $(SOURCE_PATH)/../../*.o osxppc: $(_ACK) $(_ACK_OPTS) $(ACK_MAKEFILE_COMPILATION_OPTS) $(INCLUDE_OPTS) -mosxppc \ -DXSize=78 \ -DYSize=21 \ -D__ADM3A \ -D_XL_NO_COLOR \ -D_XL_TURNED_BASED \ -DACK \ -D__STDIO \ -D__LINUXPPC__ \ -D_XL_NO_JOYSTICK \ -DTURN_BASED \ -D__BUFFERED_GRAPHICS \ -D__NO_INIT_GRAPHICS \ -D__NO_WAIT \ -D_XL_NO_SLEEP \ -D__DEFAULT_CLEAR_SCREEN \ -D__ALT_PRINT \ $(FULL_FILES) \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c \ -o $(BUILD_PATH)/X$(GAME_NAME)_$@.exe rm $(SOURCE_PATH)/../../*.o pdpv7: $(_ACK) $(_ACK_OPTS) $(ACK_MAKEFILE_COMPILATION_OPTS) $(INCLUDE_OPTS) -mpdpv7 \ -DXSize=78 \ -DYSize=21 \ -D__ADM3A \ -D_XL_NO_COLOR \ -D_XL_TURNED_BASED \ -DACK \ -D__STDIO \ -D__LINUXPPC__ \ -D_XL_NO_JOYSTICK \ -DTURN_BASED \ -D__BUFFERED_GRAPHICS \ -D__NO_INIT_GRAPHICS \ -D__NO_WAIT \ -D_XL_NO_SLEEP \ -D__DEFAULT_CLEAR_SCREEN \ -D__ALT_PRINT \ $(FULL_FILES) \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c \ -o $(BUILD_PATH)/X$(GAME_NAME)_$@.exe rm $(SOURCE_PATH)/../../*.o minix68k: $(_ACK) $(_ACK_OPTS) $(ACK_MAKEFILE_COMPILATION_OPTS) $(INCLUDE_OPTS) -mminix68k \ -DXSize=78 \ -DYSize=21 \ -D__ADM3A \ -D_XL_NO_COLOR \ -D_XL_TURNED_BASED \ -DACK \ -D__STDIO \ -D__LINUXPPC__ \ -D_XL_NO_JOYSTICK \ -DTURN_BASED \ -D__BUFFERED_GRAPHICS \ -D__NO_INIT_GRAPHICS \ -D__NO_WAIT \ -D_XL_NO_SLEEP \ -D__DEFAULT_CLEAR_SCREEN \ -D__ALT_PRINT \ $(FULL_FILES) \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c \ -o $(BUILD_PATH)/X$(GAME_NAME)_$@.exe rm $(SOURCE_PATH)/../../*.o rpi: $(_ACK) $(_ACK_OPTS) $(ACK_MAKEFILE_COMPILATION_OPTS) $(INCLUDE_OPTS) -mrpi \ -DXSize=78 \ -DYSize=21 \ -D__ADM3A \ -D_XL_NO_COLOR \ -D_XL_TURNED_BASED \ -DACK \ -D__STDIO \ -D__LINUXPPC__ \ -D_XL_NO_JOYSTICK \ -DTURN_BASED \ -D__BUFFERED_GRAPHICS \ -D__NO_INIT_GRAPHICS \ -D__NO_WAIT \ -D_XL_NO_SLEEP \ -D__DEFAULT_CLEAR_SCREEN \ -D__ALT_PRINT \ $(FULL_FILES) \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c \ -o $(BUILD_PATH)/X$(GAME_NAME)_$@.exe rm $(SOURCE_PATH)/../../*.o ================================================ FILE: src/makefiles.common/targets/amiga_gcc/Makefile.gcc_amiga_targets ================================================ # ------------------------------------------------------------------------------------------ # GCC AMIGA ############################################################################################## amiga_targets: \ amiga_buffered gcc_amiga_targets: \ amiga_targets # ------------------------------------------------------------------------------------------- amiga_core_test: $(AMIGA_CC) -mcrt=nix13 \ $(SOURCE_PATH)/../test/main_use_amiga_core.c amiga: amiga_buffered amiga_buffered: $(AMIGA_CC) $(INCLUDE_OPTS) -mcrt=nix13 \ -D__AMIGA__ \ -D__NORMALIZED_RAND \ -DXSize=39 \ -DYSize=22 \ -D__STDIO \ -D_XL_NO_COLOR \ -D_XL_NO_SLEEP \ \ -DTURN_BASED \ -D__BUFFERED_GRAPHICS \ -D__NO_INIT_GRAPHICS \ -D__ALT_PRINT \ -D__DEFAULT_CLEAR_SCREEN \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c \ $(FULL_FILES) mv a.out $(BUILD_PATH)/X$(GAME_NAME)_amiga_buffered.exe ================================================ FILE: src/makefiles.common/targets/atari_mint_gcc/Makefile_atari_st ================================================ ############################################################################################### atari_st: atari_st_ncurses atari_st_ncurses: $(ATARI_ST_CC) $(INCLUDE_OPTS) -D__NCURSES__ \ -D__ATARI_ST__ \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_ATARI_ST_SLOWDOWN) \ -DXSize=39 \ -DYSize=22 \ -D_XL_NO_JOYSTICK \ -D__CONIO_GRAPHICS \ -D__ALT_PRINT \ \ $(CROSS_LIB_PATH)/display/alt_print/ncurses_alt_print.c \ $(CROSS_LIB_PATH)/display/init_graphics/gcc/ncurses_init_graphics.c \ $(FULL_FILES) \ -lncurses mv a.out $(BUILD_PATH)/X$(GAME_NAME)_atari_st_ncurses.tos ================================================ FILE: src/makefiles.common/targets/cc65/Makefile_c128_8502 ================================================ ####################################################################################### # C128_8502 c128_8502: c128_8502_40col c128_8502_40col: $(CC65_PATH)$(MYCC65) $(INCLUDE_OPTS) -O -t c128 -DEXTRA_TITLE \ -D__CONIO_GRAPHICS \ -D__NO_INIT_GRAPHICS \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_C128_8502_40COL_SLOWDOWN) \ $(CROSS_LIB_PATH)/sound/cc65/sid/sid_sounds.c \ $(FULL_FILES) \ -o $(BUILD_PATH)/X$(GAME_NAME)_$@.prg ================================================ FILE: src/makefiles.common/targets/cc65/Makefile_c65 ================================================ c65: c65_40_col_no_gfx # c65_no_gfx: # $(CC65_PATH)$(MYCC65) $(INCLUDE_OPTS) -O -t c65 \ # -D__C65__ -DXSize=80 -DYSize=25 \ # -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_C65_SLOWDOWN) \ # -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS -D_XL_NO_UDG \ # -D_XL_NO_JOYSTICK -D__NO_SLEEP -D__NO_WAIT -D__NO_INPUT -D_XL_NO_SOUND \ # $(FULL_FILES) \ # -o $(BUILD_PATH)/X$(GAME_NAME)_$@.prg ifdef USE_TOOLS c65_crt: c65_80_col_no_gfx python $(TOOLS_PATH)/cc65/c64/prg2crt.py $(BUILD_PATH)/X$(GAME_NAME)_$<.prg $(BUILD_PATH)/X$(GAME_NAME)_$@.crt endif c65_80_col_no_gfx: $(CC65_PATH)$(MYCC65) $(INCLUDE_OPTS) -O -t c65 \ -D__MEGA16__ -DXSize=80 -DYSize=25 -D__CRAM2K \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_MEGA65_SLOWDOWN) \ -D__CONIO_GRAPHICS -D_XL_NO_UDG -D__ALT_SLEEP -D__NO_SLEEP_SEC -D_XL_NO_JOYSTICK \ $(FULL_FILES) \ $(CROSS_LIB_PATH)/display/init_graphics/cc65/c65/c65_init_graphics.c \ -o $(BUILD_PATH)/X$(GAME_NAME)_$@.prg c65_40_col_no_gfx: $(CC65_PATH)$(MYCC65) $(INCLUDE_OPTS) -O -t c65 \ -D__MEGA16__ -DXSize=40 -DYSize=25 -D__MEGA65_40COL \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_MEGA65_SLOWDOWN) \ -D__CONIO_GRAPHICS -D_XL_NO_UDG -D__ALT_SLEEP -D__NO_SLEEP_SEC -D_XL_NO_JOYSTICK \ $(FULL_FILES) \ $(CROSS_LIB_PATH)/display/init_graphics/cc65/c65/c65_init_graphics.c \ -o $(BUILD_PATH)/X$(GAME_NAME)_$@.prg # mega65: mega65_no_gfx mega65: mega65_40col_no_gfx mega65_40col: mega65_40col_no_gfx mega65_80col: mega65_80col_no_gfx # -D__NO_SLEEP -D__NO_WAIT # -D__DEFAULT_CLEAR_SCREEN # -DXSize=80 -DYSize=25 # -D__NO_CLEAR_SCREEN # -D__NO_SLEEP -D_XL_NO_SLEEP -D__NO_WAIT -D__NO_INPUT -D_XL_NO_COLOR # -D_XL_NO_JOYSTICK \ # -D_XL_NO_SOUND mega65_80col_no_gfx: $(CC65_PATH)$(MYCC65) $(INCLUDE_OPTS) -O -t mega65 \ -D__MEGA16__ -DXSize=80 -DYSize=25 -D__CRAM2K \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_MEGA65_SLOWDOWN) \ -D__CONIO_GRAPHICS -D_XL_NO_UDG -D__ALT_SLEEP -D__NO_SLEEP_SEC -D_XL_NO_JOYSTICK \ $(FULL_FILES) \ $(CROSS_LIB_PATH)/sound/cc65/sid/sid_sounds.c \ $(CROSS_LIB_PATH)/display/init_graphics/cc65/mega65/mega65_init_graphics.c \ -o $(BUILD_PATH)/X$(GAME_NAME)_$@.prg # -D_XL_NO_SOUND mega65_40col_no_gfx: $(CC65_PATH)$(MYCC65) $(INCLUDE_OPTS) -O -t mega65 \ -D__MEGA16__ -DXSize=40 -DYSize=25 -D__MEGA65_40COL \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_MEGA65_SLOWDOWN) \ -D__CONIO_GRAPHICS -D_XL_NO_UDG -D__ALT_SLEEP -D__NO_SLEEP_SEC \ $(CROSS_LIB_PATH)/sound/cc65/sid/sid_sounds.c \ $(FULL_FILES) \ $(CROSS_LIB_PATH)/display/init_graphics/cc65/mega65/mega65_init_graphics.c \ -o $(BUILD_PATH)/X$(GAME_NAME)_$@.prg ================================================ FILE: src/makefiles.common/targets/cc65/Makefile_cx16 ================================================ cx16_no_gfx: $(CC65_PATH)$(MYCC65) $(INCLUDE_OPTS) -O -t cx16 \ -D__CX16__ -DXSize=80 -DYSize=60 \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_CX16_SLOWDOWN) \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS -D_XL_NO_UDG \ $(FULL_FILES) \ -o $(BUILD_PATH)/X$(GAME_NAME)_$@.prg cx16: $(ASSETS_PATH)/8x8_chars.h $(CC65_PATH)$(MYCC65) $(INCLUDE_OPTS) -O -t cx16 \ -D__CX16__ -DXSize=20 -DYSize=30 -D_XL_NO_SMALL_LETTERS \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_CX16_SLOWDOWN) \ -D__CONIO_GRAPHICS \ $(CROSS_LIB_PATH)/sound/cc65/cx16/cx16_sounds.c \ $(CROSS_LIB_PATH)/display/init_graphics/cc65/cx16/cx16_init_graphics.c \ $(FULL_FILES) \ -o $(BUILD_PATH)/X$(GAME_NAME)_$@.prg ================================================ FILE: src/makefiles.common/targets/cc65/Makefile_kim1 ================================================ kim1_buffered: kim1_turn_based # start ay $0200 kim1: $(CC65_PATH)$(MYCC65) $(INCLUDE_OPTS) -O -Cl -t kim1 \ $(INCLUDE_OPTS) -D__VT100 -D__NO_INPUT \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_ALTAIR8800_SLOWDOWN) \ -DXSize=36 -DYSize=16 \ -D_XL_NO_JOYSTICK -D_XL_NO_COLOR -D__NO_SLEEP -D__NO_SLEEP_SEC \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS -D__NO_SCREEN_COLOR_INIT -D__NO_CLEAR_SCREEN -D__NO_PRINT \ $(FULL_FILES) \ -o $(BUILD_PATH)/X$(GAME_NAME)_$@.bin # start at $2000 kim1_60k: $(CC65_PATH)$(MYCC65) $(INCLUDE_OPTS) -O -Cl -t kim1 --config kim1-60k.cfg \ $(INCLUDE_OPTS) -D__VT100 -D__NO_INPUT \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_ALTAIR8800_SLOWDOWN) \ -DXSize=36 -DYSize=16 \ -D_XL_NO_JOYSTICK -D_XL_NO_COLOR -D__NO_SLEEP -D__NO_SLEEP_SEC \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS -D__NO_SCREEN_COLOR_INIT -D__NO_CLEAR_SCREEN -D__NO_PRINT \ $(FULL_FILES) \ -o $(BUILD_PATH)/X$(GAME_NAME)_$@.bin # for expanded KIM-1 w/ K-1008 Graphics and 60K RAM # start at $2000 kim1_mtu60k: $(CC65_PATH)$(MYCC65) $(INCLUDE_OPTS) -O -Cl -t kim1 --config kim1-mtu60k.cfg \ $(INCLUDE_OPTS) -D__VT100 -D__NO_INPUT \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_ALTAIR8800_SLOWDOWN) \ -DXSize=36 -DYSize=16 \ -D_XL_NO_JOYSTICK -D_XL_NO_COLOR -D__NO_SLEEP -D__NO_SLEEP_SEC \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS -D__NO_SCREEN_COLOR_INIT -D__NO_CLEAR_SCREEN -D__NO_PRINT \ $(FULL_FILES) \ -o $(BUILD_PATH)/X$(GAME_NAME)_$@.bin kim1_turn_based: $(CC65_PATH)$(MYCC65) $(INCLUDE_OPTS) -O -Cl -t kim1 \ -D__ALT_SLEEP \ -D__NO_SCREEN_COLOR_INIT \ -DTURN_BASED -D_XL_NO_JOYSTICK -D_XL_NO_COLOR \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS \ $(FULL_FILES) # -o $(BUILD_PATH)/X$(GAME_NAME)_$@.lod # $(TOOLS_PATH)/cc65/osic1p/srec_cat $(BUILD_PATH)/X$(GAME_NAME)_$@.lod -binary -offset 0x200 -o $(BUILD_PATH)/X$(GAME_NAME)_$@.c1p -Ohio_Scientific -execution-start-address=0x200 # rm $(BUILD_PATH)/X$(GAME_NAME)_$@.lod # mv $(BUILD_PATH)/X$(GAME_NAME)_$@.c1p $(BUILD_PATH)/X$(GAME_NAME)_$@.lod ================================================ FILE: src/makefiles.common/targets/cc65/Makefile_osic1p ================================================ osic1p: osic1p_32k osic1p_buffered: osic1p_32k_turn_based osic1p_32k: $(CC65_PATH)$(MYCC65) $(INCLUDE_OPTS) --start-addr 0x200 -Wl -D,__HIMEM__=0x8000 -O -t osic1p \ -D__ALT_SLEEP -D_XL_NO_JOYSTICK \ -D__NO_SCREEN_COLOR_INIT \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS \ $(FULL_FILES) \ -o $(BUILD_PATH)/X$(GAME_NAME)_$@.lod $(TOOLS_PATH)/cc65/osic1p/srec_cat $(BUILD_PATH)/X$(GAME_NAME)_$@.lod -binary -offset 0x200 -o $(BUILD_PATH)/X$(GAME_NAME)_$@.c1p -Ohio_Scientific -execution-start-address=0x200 rm $(BUILD_PATH)/X$(GAME_NAME)_$@.lod mv $(BUILD_PATH)/X$(GAME_NAME)_$@.c1p $(BUILD_PATH)/X$(GAME_NAME)_$@.lod osic1p_32k_turn_based: $(CC65_PATH)$(MYCC65) $(INCLUDE_OPTS) --start-addr 0x200 -Wl -D,__HIMEM__=0x8000 -O -t osic1p \ -D__ALT_SLEEP \ -D__NO_SCREEN_COLOR_INIT \ -DTURN_BASED -D_XL_NO_JOYSTICK \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS \ $(FULL_FILES) \ -o $(BUILD_PATH)/X$(GAME_NAME)_$@.lod $(TOOLS_PATH)/cc65/osic1p/srec_cat $(BUILD_PATH)/X$(GAME_NAME)_$@.lod -binary -offset 0x200 -o $(BUILD_PATH)/X$(GAME_NAME)_$@.c1p -Ohio_Scientific -execution-start-address=0x200 rm $(BUILD_PATH)/X$(GAME_NAME)_$@.lod mv $(BUILD_PATH)/X$(GAME_NAME)_$@.c1p $(BUILD_PATH)/X$(GAME_NAME)_$@.lod ================================================ FILE: src/makefiles.common/targets/cc65/Makefile_sym1 ================================================ sym1_buffered: sym1_turn_based sym1: $(CC65_PATH)$(MYCC65) $(INCLUDE_OPTS) -O -Cl -t sym1 \ $(INCLUDE_OPTS) -D__VT100 -D__NO_INPUT \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_ALTAIR8800_SLOWDOWN) \ -DXSize=36 -DYSize=16 \ -D_XL_NO_JOYSTICK -D_XL_NO_COLOR -D__NO_SLEEP -D__NO_SLEEP_SEC \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS -D__NO_SCREEN_COLOR_INIT -D__NO_CLEAR_SCREEN -D__NO_PRINT \ $(FULL_FILES) \ -o $(BUILD_PATH)/X$(GAME_NAME)_$@.bin sym1_32k: $(CC65_PATH)$(MYCC65) $(INCLUDE_OPTS) -O -Cl -t sym1 --config sym1-32k.cfg \ $(INCLUDE_OPTS) -D__VT100 -D__NO_INPUT \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_ALTAIR8800_SLOWDOWN) \ -DXSize=36 -DYSize=16 \ -D_XL_NO_JOYSTICK -D_XL_NO_COLOR -D__NO_SLEEP -D__NO_SLEEP_SEC \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS -D__NO_SCREEN_COLOR_INIT -D__NO_CLEAR_SCREEN -D__NO_PRINT \ $(FULL_FILES) \ -o $(BUILD_PATH)/X$(GAME_NAME)_$@.bin sym1_turn_based: $(CC65_PATH)$(MYCC65) $(INCLUDE_OPTS) -O -Cl -t sym1 \ -D__ALT_SLEEP \ -D__NO_SCREEN_COLOR_INIT \ -DTURN_BASED -D_XL_NO_JOYSTICK -D_XL_NO_COLOR \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS \ $(FULL_FILES) # -o $(BUILD_PATH)/X$(GAME_NAME)_$@.lod # $(TOOLS_PATH)/cc65/osic1p/srec_cat $(BUILD_PATH)/X$(GAME_NAME)_$@.lod -binary -offset 0x200 -o $(BUILD_PATH)/X$(GAME_NAME)_$@.c1p -Ohio_Scientific -execution-start-address=0x200 # rm $(BUILD_PATH)/X$(GAME_NAME)_$@.lod # mv $(BUILD_PATH)/X$(GAME_NAME)_$@.c1p $(BUILD_PATH)/X$(GAME_NAME)_$@.lod ================================================ FILE: src/makefiles.common/targets/cc65/Makefile_telestrat ================================================ ####################################################################################### # TELESTRAT telestrat: telestrat_buffered telestrat_buffered: $(CC65_PATH)$(MYCC65) $(INCLUDE_OPTS) -O -t telestrat \ -D__TELESTRAT__ \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_TELESTRAT_SLOWDOWN) \ -D__BUFFERED_GRAPHICS -DTURN_BASED -D__STDIO -DXSize=38 -DYSize=24 \ -D__NO_SCREEN_COLOR_INIT \ -D__NO_WAIT -D_XL_NO_SLEEP \ -D_XL_NO_COLOR -D__ALT_PRINT -D__DEFAULT_CLEAR_SCREEN \ -D__NO_INIT_GRAPHICS \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c \ $(FULL_FILES) \ -o $(BUILD_PATH)/X$(GAME_NAME)_$@ # cp $(BUILD_PATH)/X$(GAME_NAME)_$@ /cygdrive/C/Emulation/Computers/Oricutron_win64-20200515/sdcard/bin/xchase telestrat_joy_buffered: $(CC65_PATH)$(MYCC65) $(INCLUDE_OPTS) -O -t telestrat \ -D__TELESTRAT__ -DCC65_JOYSTICK \ -D__BUFFERED_GRAPHICS -DTURN_BASED -D__STDIO -DXSize=38 -DYSize=24 \ -D__NO_SCREEN_COLOR_INIT -D_XL_SLOW_DOWN_FACTOR=800 \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_TELESTRAT_SLOWDOWN) \ -D_XL_NO_COLOR -D__ALT_PRINT -D__DEFAULT_CLEAR_SCREEN \ -D__NO_INIT_GRAPHICS \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c \ $(FULL_FILES) \ -o $(BUILD_PATH)/X$(GAME_NAME)_$@ # cp $(BUILD_PATH)/X$(GAME_NAME)_$@ /cygdrive/C/Emulation/Computers/Oricutron_win64-20200515/sdcard/bin/xchase ================================================ FILE: src/makefiles.common/targets/emcc/Makefile.emcc_targets ================================================ # ------------------------------------------------------------------------------------------ # EMCC EM_CC ?= emcc EM_OPTS = ############################################################################################## emcc_targets: \ emcc_buffered ############################################################################################## emcc: emcc_buffered emcc_buffered: $(EM_CC) $(INCLUDE_OPTS) \ -D__EMCC__ \ -D__NORMALIZED_RAND \ -DXSize=48 \ -DYSize=9 \ -D__STDIO \ -D_XL_NO_COLOR \ -D_XL_NO_SLEEP \ \ -DTURN_BASED \ -D__BUFFERED_GRAPHICS \ -D__NO_INIT_GRAPHICS \ -D__ALT_PRINT -D__NO_WAIT \ -D__DEFAULT_CLEAR_SCREEN \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c \ $(FULL_FILES) \ -o FULL_emcc_buffered.html mv FULL_emcc_buffered.js $(BUILD_PATH) mv FULL_emcc_buffered.wasm $(BUILD_PATH) mv FULL_emcc_buffered.html $(BUILD_PATH) cp $(BUILD_PATH)/X$(GAME_NAME)_emcc_buffered.* /home/fcaruso/build/emsdk emcc_exp: $(EM_CC) $(INCLUDE_OPTS) \ -D__EMCC__ \ -D__NORMALIZED_RAND \ -DXSize=80 \ -DYSize=24 \ -D__STDIO \ -D_XL_NO_COLOR \ -D_XL_NO_SLEEP -D__NO_PRINT -D__NO_WAIT \ \ -DTURN_BASED \ -D__BUFFERED_GRAPHICS \ -D__NO_INIT_GRAPHICS \ -D__ALT_PRINT \ -D__DEFAULT_CLEAR_SCREEN \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c \ $(FULL_FILES) \ -o FULL_emcc_buffered.html mv FULL_emcc_buffered.js $(BUILD_PATH) mv FULL_emcc_buffered.wasm $(BUILD_PATH) mv FULL_emcc_buffered.html $(BUILD_PATH) cp $(BUILD_PATH)/X$(GAME_NAME)_emcc_buffered.* /home/fcaruso/build/emsdk ================================================ FILE: src/makefiles.common/targets/gcc4ti/Makefile_ti99 ================================================ ############################################################################################### # ------------------------------------------------------------------------------------------ # TMS9000-GCC # # Paths to TMS9900 compilation tools # ( Set in environment to override paths ) TMS9900_DIR?=$(TMS9900-GCC_PATH) #/opt/gcc4ti/bin ELF2EA5_DIR?=$(CFG_PATH)gcc4ti99/elf2ea5 EA5_SPLIT_DIR?=$(CFG_PATH)gcc4ti99/ea5split CLASSIC99_DSK1?=$(CFG_PATH)gcc4ti99/DSK1 # ELF2EA5_DIR?=/home/fabri/Retro/GCC4TI/elf2ea5 # EA5_SPLIT_DIR?=/home/fabri/Retro/GCC4TI/ea5split # CLASSIC99_DSK1?=/home/fabri/Retro/GCC4TI/DSK1 # Full paths to the executables used GAS=$(TMS9900_DIR)/tms9900-as LD=$(TMS9900_DIR)/tms9900-ld CC=$(TMS9900_DIR)/tms9900-gcc AR=$(TMS9900_DIR)/tms9900-ar ELF2EA5=$(ELF2EA5_DIR)/elf2ea5 EA5_SPLIT=$(EA5_SPLIT_DIR)/ea5split LDFLAGS_EA5=\ --section-start .text=a000 --section-start .data=2080 -M # -fno-peephole2 -fno-function-cse C_FLAGS=\ -std=c99 $(GCC4TI99_MAKEFILE_COMPILATION_OPTS) $(TI99_GAME_OPTS) -s -I./ -fno-builtin TI99_CC ?= tms9900-gcc # -DBUGGY_MOD5 TI99_TINY_OPTS ?= \ $(C_FLAGS) $(GLOBAL_OPTS) \ -D__TI99__ -nostdlib -DNO_RANDOM_LEVEL \ -DXSize=32 \ -DYSize=24 \ -D__ALT_SLEEP -D__ALT_RAND \ -DTINY_GAME -DNO_WALL \ -D__VDP_MODE1_GRAPHICS \ -D__NO_SCREEN_COLOR_INIT \ -D_XL_SLOW_DOWN_FACTOR=10*$(_TI99_SLOWDOWN) # -DBUGGY_MOD5 -DBUGGY_VERTICAL_DRAW -DBUGGY_GCC_TI99 TI99_OPTS ?= \ $(C_FLAGS) $(GLOBAL_OPTS) \ -D__TI99__ -nostdlib \ -DXSize=32 \ -DYSize=23 \ -D__ALT_SLEEP -D__ALT_RAND \ -D__VDP_MODE1_GRAPHICS \ -D__NO_SCREEN_COLOR_INIT \ -D_XL_SLOW_DOWN_FACTOR=10*$(_TI99_SLOWDOWN) TI99_KEY_OPTS ?= \ $(C_FLAGS) $(GLOBAL_OPTS) \ -D__TI99__ -nostdlib \ -DXSize=32 \ -DYSize=23 \ -D__ALT_SLEEP -D__ALT_RAND \ -D__VDP_MODE1_GRAPHICS -D_XL_NO_JOYSTICK \ -D__NO_SCREEN_COLOR_INIT \ -D_XL_SLOW_DOWN_FACTOR=10*$(_TI99_SLOWDOWN) # TI99_OPTS = TI99_JOY_OPTS TI99_DEBUG_OPTS ?= \ $(C_FLAGS) $(GLOBAL_OPTS) \ -D__TI99__ -nostdlib \ -DXSize=32 -DYSize=23 \ -DBUGGY_MOD5 -DBUGGY_VERTICAL_DRAW -DBUGGY_GCC_TI99 \ -D__ALT_SLEEP -D__ALT_RAND \ -D__VDP_MODE1_GRAPHICS -D_XL_NO_JOYSTICK \ -D__NO_SCREEN_COLOR_INIT \ -D_XL_SLOW_DOWN_FACTOR=10*$(_TI99_SLOWDOWN) ################################################################################################## # Paths to TMS9900 compilation tools GAS=tms9900-as LD=tms9900-ld TI99CC=tms9900-gcc CXX=tms9900-c++ OBJCOPY=tms9900-objcopy # Flags used during linking # Refer to the linker rules in an external file LDFLAGS=\ --script=$(CFG_PATH)gcc4ti99/linkfile.cfg OBJECT_LIST= \ $(TOOLS_PATH)/ti99/crt0_ea5.o \ $(CROSS_LIB_PATH)/display/display_macros.o \ $(CROSS_LIB_PATH)/input/input_macros.o \ $(CROSS_LIB_PATH)/rand/rand.o \ $(CROSS_LIB_PATH)/sleep/sleep_macros.o \ $(CROSS_LIB_PATH)/display/init_graphics/gcc4ti99/gcc4ti99_init_graphics.o \ $(CROSS_LIB_PATH)/sound/gcc4ti99/ti99_sounds.o \ $(SOURCE_PATH)/main.o OBJECT_DEBUG_LIST= \ $(TOOLS_PATH)/ti99/crt0_ea5.o \ $(SOURCE_PATH)/main.o TI99_INCLUDE_OPTS ?= $(INCLUDE_OPTS) -I$(TMS9900-GCC_PATH)/../include # Recipes to compile individual files %.o: %.asm $(GAS) $< -o $@ %.o: %.c $(TI99CC) $(TI99_INCLUDE_OPTS) $(TI99_OPTS) -c $< -o $@ # %.o: # $(GAS) $< -o $@ # %.o: # $(TI99CC) $(TI99_INCLUDE_OPTS) $(TI99_OPTS) -c $< -o $@ .PHONY: %.o xchase.ea5.elf ti99clean: rm -f *.o rm -f *.elf rm -f *.cart # $(TI99CC) $(TI99_INCLUDE_OPTS) $(TI99_FULL_OPTS) -c $< -o $@ # List of all files needed in executable TINY_PREREQUISITES=\ $(OBJECT_LIST) PREREQUISITES=\ $(OBJECT_LIST) PREREQUISITES_DEBUG=\ $(OBJECT_DEBUG_LIST) ##################################################################### xchase.ea5.elf: $(PREREQUISITES) $(LD) $(OBJECT_LIST) $(LDFLAGS_EA5) -L$(LIB_TI99_PATH) -lti99 -o xchase.ea5.elf > xchase.map # $(LD) $(OBJECT_LIST) $(LDFLAGS) -o $@ -allow-multiple-definition xchase.ea5.debug.elf: $(PREREQUISITES_DEBUG) $(LD) $(OBJECT_DEBUG_LIST) $(LDFLAGS_EA5) -L$(LIB_TI99_PATH) -lti99 -o xchase.ea5.debug.elf > xchase.map # $(LD) $(OBJECT_LIST) $(LDFLAGS) -o $@ -allow-multiple-definition ti99: ti # lc = $(subst A,a,$(subst B,b,$(subst C,c,$(subst D,d,$(subst E,e,$(subst F,f,$(subst G,g,$(subst H,h,$(subst I,i,$(subst J,j,$(subst K,k,$(subst L,l,$(subst M,m,$(subst N,n,$(subst O,o,$(subst P,p,$(subst Q,q,$(subst R,r,$(subst S,s,$(subst T,t,$(subst U,u,$(subst V,v,$(subst W,w,$(subst X,x,$(subst Y,y,$(subst Z,z,$1)))))))))))))))))))))))))) # $(shell echo $VAR | tr A-Z a-z) # $(shell echo $VAR | tr a-z A-Z) ti: $(ASSETS_PATH)/8x8_chars.h xchase.ea5.elf $(TOOLS_PATH)/ti99/elf2ea5$(COMPILEDEXT) $(TOOLS_PATH)/ti99/ea5split$(COMPILEDEXT) $(TOOLS_PATH)/ti99/elf2ea5$(COMPILEDEXT) xchase.ea5.elf x$(GAME_NAME)1.ea5.bin $(TOOLS_PATH)/ti99/ea5split$(COMPILEDEXT) x$(GAME_NAME)1.ea5.bin java -jar $(TOOLS_PATH)/ti99/ea5tocart.jar X$(shell echo $(GAME_NAME) | tr a-z A-Z)1 X$(GAME_NAME)_$@ rm -rf xchase.map rm -rf ea5.map rm -rf xchase.ea5.elf rm -rf $(SOURCE_PATH)/main.o $(CROSS_LIB_PATH)/sound/gcc4ti99/ti99_sounds.o $(CROSS_LIB_PATH)/display/display_macros.o $(CROSS_LIB_PATH)/input/input_macros.o $(CROSS_LIB_PATH)/rand/rand.o $(CROSS_LIB_PATH)/sleep/sleep_macros.o $(CROSS_LIB_PATH)/display/init_graphics/gcc4ti99/gcc4ti99_init_graphics.o mv X$(shell echo $(GAME_NAME) | tr a-z A-Z)* $(BUILD_PATH)/ mv $(BUILD_PATH)/X$(shell echo $(GAME_NAME) | tr a-z A-Z)18.bin $(BUILD_PATH)/X$(shell echo $(GAME_NAME) | tr a-z A-Z)ti.bin rm -rf x$(GAME_NAME)1.ea5.bin ti99debug: $(ASSETS_PATH)/8x8_chars.h xchase.ea5.debug.elf $(TOOLS_PATH)/ti99/elf2ea5$(COMPILEDEXT) $(TOOLS_PATH)/ti99/ea5split$(COMPILEDEXT) $(TOOLS_PATH)/ti99/elf2ea5$(COMPILEDEXT) xchase.ea5.debug.elf x$(GAME_NAME)1.ea5.bin $(TOOLS_PATH)/ti99/ea5split$(COMPILEDEXT) x$(GAME_NAME)1.ea5.bin rm -rf xchase.map rm -rf ea5.map rm -rf xchase.ea5.debug.elf mv X$(GAME_NAME)* $(BUILD_PATH)/ rm -rf x$(GAME_NAME)1.ea5.bin ti99_targets: \ ti99 gcc_ti99_targets: \ ti99_targets # $(OBJCOPY) -O binary -j .text -j .data -j .ctors ti99_cross_chase.elf ti99_cross_chase.cart # mv ti99_cross_chase.cart $(BUILD_PATH) # mv ti99_cross_chase.elf $(BUILD_PATH) # Recipe to clean all compiled objects # .phony ti99clean: # rm -f *.o # rm -f *.elf # rm -f *.cart ================================================ FILE: src/makefiles.common/targets/gcc_z8k_pcos/Makefile.gcc_z8k_pcos_targets ================================================ # ------------------------------------------------------------------------------------------ # Z8K-PCOS-GCC # # Currently to be compiled in Linux (because the source code of the compiler won't easily compile) olivetti_m20_targets: \ olivetti_m20_buffered gcc_z8k_targets: \ olivetti_m20_targets ################################################################################################### m20: olivetti_m20 olivetti_m20: olivetti_m20_buffered m20_buffered: olivetti_m20_buffered olivetti_m20_buffered: $(TOOLS_PATH)/olivetti_m20/m20$(COMPILEDEXT) $(Z8K-PCOS-GCC) $(Z8K-PCOS-GCC_OPTS) $(INCLUDE_OPTS) \ -D__NORMALIZED_RAND \ -D__OLIVETTI_M20__ \ -DXSize=79 \ -DYSize=22 \ -D__STDIO \ -D_XL_NO_COLOR \ \ -DTURN_BASED \ -D__BUFFERED_GRAPHICS \ -D__NO_INIT_GRAPHICS \ -D__ALT_PRINT \ -D__DEFAULT_CLEAR_SCREEN \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c \ $(FULL_FILES) cp $(TOOLS_PATH)/olivetti_m20/pcos20h_empty.img FULL_m20_buffered.img $(TOOLS_PATH)/olivetti_m20/m20 X$(GAME_NAME)_m20_buffered.img put aout.cmd rm aout.cmd mv FULL_m20_buffered.img $(BUILD_PATH) olivetti_m20_no_graphics: $(TOOLS_PATH)/olivetti_m20/m20$(COMPILEDEXT) $(Z8K-PCOS-GCC) $(Z8K-PCOS-GCC_OPTS) $(INCLUDE_OPTS) \ -D__NORMALIZED_RAND \ -DXSize=79 \ -DYSize=22 \ -D__STDIO \ -D_XL_NO_COLOR \ \ -DTURN_BASED \ -D__NO_GRAPHICS \ -D__NO_INIT_GRAPHICS \ -D__ALT_PRINT \ -D__DEFAULT_CLEAR_SCREEN \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c \ $(FULL_FILES) mv a$(COMPILEDEXT) $(BUILD_PATH)/X$(GAME_NAME)_gcc_buffered$(COMPILEDEXT) ================================================ FILE: src/makefiles.common/targets/sdcc/Makefile.sdcc_targets ================================================ # JUST A STUB # ------------------------------------------------------------------------------------------ # SDCC # MACROS___NO_GRAPHICS ?= \ -D__NORMALIZED_RAND \ -DXSize=79 \ -DYSize=22 \ -D__STDIO \ -D_XL_NO_SLEEP \ -D_XL_NO_COLOR \ -DNO_CHASE \ \ -DTURN_BASED \ -D__NO_GRAPHICS \ -D__NO_INIT_GRAPHICS \ -D__ALT_PRINT \ -D__DEFAULT_CLEAR_SCREEN sdcc_display_macros: sdcc -c $(INCLUDE_OPTS) -I$(SOURCE_PATH) $(MACROS___NO_GRAPHICS) $(CROSS_LIB_PATH)/display/display_macros.c ================================================ FILE: src/makefiles.common/targets/vbcc/Makefile_amiga ================================================ # ----------------------------------------------------------------------- amiga: amiga_kick13_buffered amiga_kick13_buffered: $(VBCC_COMPILER) +kick13 $(VBCC_BBC_OPTS) $(INCLUDE_OPTS) \ -D__NORMALIZED_RAND -D__AMIGA_KICK13__ -DVBCC \ -DXSize=39 \ -DYSize=22 \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_AMIGA_SLOWDOWN) \ -D__STDIO -DEVEN_LOOP_MOVE -DTURN_BASED_SKULL_MIN_SLOWDOWN_SCALE=1 -DTURN_BASED_GHOST_MIN_SLOWDOWN_SCALE=1 \ -DTURN_BASED_EFFECT_SCALE=1 -DTURN_BASED_WAIT_SCALE=1 \ -D_XL_NO_COLOR \ -D_XL_NO_SLEEP \ -DTURN_BASED \ -D__BUFFERED_GRAPHICS \ -D__NO_INIT_GRAPHICS \ -D__ALT_PRINT \ -D__DEFAULT_CLEAR_SCREEN \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c \ $(FULL_FILES) -o $(BUILD_PATH)/X$(GAME_NAME)_$@ ================================================ FILE: src/makefiles.common/targets/vbcc/Makefile_atari_jaguar ================================================ # ----------------------------------------------------------------------- atari_jaguar: atari_jaguar_buffered atari_jaguar_buffered: $(VBCC_COMPILER) +jaguar $(VBCC_BBC_OPTS) $(INCLUDE_OPTS) \ -D__NORMALIZED_RAND -D__ATARI_JAGUAR__ -DVBCC \ -DXSize=39 \ -DYSize=22 \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_ATARI_JAGUAR_SLOWDOWN) \ -D__STDIO -DEVEN_LOOP_MOVE -DTURN_BASED_SKULL_MIN_SLOWDOWN_SCALE=1 -DTURN_BASED_GHOST_MIN_SLOWDOWN_SCALE=1 \ -DTURN_BASED_EFFECT_SCALE=1 -DTURN_BASED_WAIT_SCALE=1 \ -D_XL_NO_COLOR \ -D_XL_NO_SLEEP \ -DTURN_BASED \ -D__BUFFERED_GRAPHICS \ -D__NO_INIT_GRAPHICS \ -D__ALT_PRINT \ -D__DEFAULT_CLEAR_SCREEN \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c \ $(FULL_FILES) -o xchase mv xchase $(BUILD_PATH)/ # mv xchase.inf $(BUILD_PATH)/ # mv xchase $(BUILD_PATH)/X$(GAME_NAME)_bbc_buffered # mv xchase.inf $(BUILD_PATH)/X$(GAME_NAME)_bbc_buffered.inf ================================================ FILE: src/makefiles.common/targets/vbcc/Makefile_bbc ================================================ bbcmaster: bbcmaster130 bbcmaster130: $(TOOLS_PATH)/bbc/bbcim$(COMPILEDEXT) $(ASSETS_PATH)/8x8_chars.h $(VBCC_COMPILER) +$(CROSS_LIB_PATH)/cfg/vbcc/bbc/bbc7$(IF_POSIX) -v $(VBCC_MAKEFILE_COMPILATION_OPTS) $(VBCC_BBC_OPTS) $(INCLUDE_OPTS) \ -D__NORMALIZED_RAND -D__BBC__ -D_XL_NO_JOYSTICK \ -DXSize=20 -D__BBC_MODE=130 -D__BBC_GRAPHICS \ -DYSize=31 \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_BBC_SLOWDOWN) \ -D__ALT_SLEEP $(4COLOR_PALETTE) \ -D__DEFAULT_CLEAR_SCREEN \ $(CROSS_LIB_PATH)/display/init_graphics/vbcc/bbc/bbc_init_graphics.c \ $(CROSS_LIB_PATH)/sound/vbcc/bbc/bbc_sounds.c \ $(FULL_FILES) -o $(GAME_NAME) $(TOOLS_PATH)/bbc/bbcim$(COMPILEDEXT) -a X$(GAME_NAME)_$@.img $(GAME_NAME) mv $(GAME_NAME).inf $(BUILD_PATH)/X$(GAME_NAME)_$@.inf mv $(GAME_NAME) $(BUILD_PATH)/X$(GAME_NAME)_$@ mv X$(GAME_NAME)_$@.img $(BUILD_PATH) # KO bbcmastertest: $(TOOLS_PATH)/bbc/bbcim$(COMPILEDEXT) $(ASSETS_PATH)/8x8_chars.h $(VBCC_COMPILER) +$(CROSS_LIB_PATH)/cfg/vbcc/bbc/bbc7$(IF_POSIX) -v $(VBCC_BBC_OPTS) $(INCLUDE_OPTS) \ -D__NORMALIZED_RAND -D__BBC__ -D_XL_NO_JOYSTICK \ -DXSize=20 -D__BBC_MODE=130 -D__BBC_GRAPHICS \ -DYSize=31 \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_BBC_SLOWDOWN) \ -D__ALT_SLEEP $(4COLOR_PALETTE) \ -D__DEFAULT_CLEAR_SCREEN \ $(CROSS_LIB_PATH)/display/init_graphics/vbcc/bbc/bbc_init_graphics.c \ $(CROSS_LIB_PATH)/sound/vbcc/bbc/bbc_sounds.c \ $(FULL_FILES) -o $(GAME_NAME) $(TOOLS_PATH)/bbc/bbcim$(COMPILEDEXT) -a X$(GAME_NAME)_$@.img $(GAME_NAME) mv $(GAME_NAME).inf $(BUILD_PATH)/X$(GAME_NAME)_$@.inf mv $(GAME_NAME) $(BUILD_PATH)/X$(GAME_NAME)_$@ mv X$(GAME_NAME)_$@.img $(BUILD_PATH) # OK bbcmastertest1: $(TOOLS_PATH)/bbc/bbcim$(COMPILEDEXT) $(ASSETS_PATH)/8x8_chars.h $(VBCC_COMPILER) +$(CROSS_LIB_PATH)/cfg/vbcc/bbc/bbc7$(IF_POSIX) -O1 -v $(VBCC_BBC_OPTS) $(INCLUDE_OPTS) \ -D__NORMALIZED_RAND -D__BBC__ -D_XL_NO_JOYSTICK \ -DXSize=20 -D__BBC_MODE=130 -D__BBC_GRAPHICS \ -DYSize=31 \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_BBC_SLOWDOWN) \ -D__ALT_SLEEP $(4COLOR_PALETTE) \ -D__DEFAULT_CLEAR_SCREEN \ $(CROSS_LIB_PATH)/display/init_graphics/vbcc/bbc/bbc_init_graphics.c \ $(CROSS_LIB_PATH)/sound/vbcc/bbc/bbc_sounds.c \ $(FULL_FILES) -o $(GAME_NAME) $(TOOLS_PATH)/bbc/bbcim$(COMPILEDEXT) -a X$(GAME_NAME)_$@.img $(GAME_NAME) mv $(GAME_NAME).inf $(BUILD_PATH)/X$(GAME_NAME)_$@.inf mv $(GAME_NAME) $(BUILD_PATH)/X$(GAME_NAME)_$@ mv X$(GAME_NAME)_$@.img $(BUILD_PATH) # OK bbctest1: $(TOOLS_PATH)/bbc/bbcim$(COMPILEDEXT) $(ASSETS_PATH)/8x8_chars.h $(VBCC_COMPILER) +$(CROSS_LIB_PATH)/cfg/vbcc/bbc/bbc5$(IF_POSIX) -O1 -v $(VBCC_BBC_OPTS) $(INCLUDE_OPTS) \ -D__NORMALIZED_RAND -D__BBC__ -D_XL_NO_JOYSTICK \ -DXSize=20 -D__BBC_MODE=5 -D__BBC_GRAPHICS \ -DYSize=31 \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_BBC_SLOWDOWN) \ -D__ALT_SLEEP $(4COLOR_PALETTE) \ -D__DEFAULT_CLEAR_SCREEN \ $(CROSS_LIB_PATH)/display/init_graphics/vbcc/bbc/bbc_init_graphics_test.c \ $(CROSS_LIB_PATH)/sound/vbcc/bbc/bbc_sounds.c \ $(FULL_FILES) -o $(GAME_NAME) $(TOOLS_PATH)/bbc/bbcim$(COMPILEDEXT) -a X$(GAME_NAME)_$@.img $(GAME_NAME) mv $(GAME_NAME).inf $(BUILD_PATH)/X$(GAME_NAME)_$@.inf mv $(GAME_NAME) $(BUILD_PATH)/X$(GAME_NAME)_$@ mv X$(GAME_NAME)_$@.img $(BUILD_PATH) bbc: bbc5 bbc7: $(TOOLS_PATH)/bbc/bbcim$(COMPILEDEXT) $(VBCC_COMPILER) +$(CROSS_LIB_PATH)/cfg/vbcc/bbc/bbc7$(IF_POSIX) -v $(VBCC_MAKEFILE_COMPILATION_OPTS) $(VBCC_BBC_OPTS) $(INCLUDE_OPTS) \ -D__NORMALIZED_RAND -D__BBC__ \ -DXSize=40 -D__BBC_MODE=7 -D__BBC_GRAPHICS -D_XL_NO_UDG \ -DYSize=24 $(4COLOR_PALETTE) $(BBC7_GAME_OPTS) \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_BBC_SLOWDOWN) \ -D_XL_NO_COLOR \ -D__ALT_SLEEP \ -D_XL_NO_JOYSTICK \ -D__DEFAULT_CLEAR_SCREEN \ $(CROSS_LIB_PATH)/display/init_graphics/vbcc/bbc/bbc_init_graphics.c \ $(CROSS_LIB_PATH)/sound/vbcc/bbc/bbc_sounds.c \ $(FULL_FILES) -o $(GAME_NAME) $(TOOLS_PATH)/bbc/bbcim$(COMPILEDEXT) -a X$(GAME_NAME)_$@.img $(GAME_NAME) mv $(GAME_NAME).inf $(BUILD_PATH)/X$(GAME_NAME)_$@.inf mv $(GAME_NAME) $(BUILD_PATH)/X$(GAME_NAME)_$@ mv X$(GAME_NAME)_$@.img $(BUILD_PATH) bbc2: $(TOOLS_PATH)/bbc/bbcim$(COMPILEDEXT) $(ASSETS_PATH)/8x8_chars.h $(VBCC_COMPILER) +$(CROSS_LIB_PATH)/cfg/vbcc/bbc/bbc2$(IF_POSIX) -v $(VBCC_MAKEFILE_COMPILATION_OPTS) $(VBCC_BBC_OPTS) $(INCLUDE_OPTS) \ -D__NORMALIZED_RAND -D__BBC__ -D_XL_NO_JOYSTICK \ -DXSize=20 -D__BBC_MODE=2 -D__BBC_GRAPHICS \ -DYSize=31 $(4COLOR_PALETTE) \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_BBC_SLOWDOWN) \ -D__ALT_SLEEP \ -D__DEFAULT_CLEAR_SCREEN \ $(CROSS_LIB_PATH)/display/init_graphics/vbcc/bbc/bbc_init_graphics.c \ $(CROSS_LIB_PATH)/sound/vbcc/bbc/bbc_sounds.c \ $(FULL_FILES) -o $(GAME_NAME) $(TOOLS_PATH)/bbc/bbcim$(COMPILEDEXT) -a X$(GAME_NAME)_$@.img $(GAME_NAME) mv $(GAME_NAME).inf $(BUILD_PATH)/X$(GAME_NAME)_$@.inf mv $(GAME_NAME) $(BUILD_PATH)/X$(GAME_NAME)_$@ mv X$(GAME_NAME)_$@.img $(BUILD_PATH) bbc5: $(TOOLS_PATH)/bbc/bbcim$(COMPILEDEXT) $(ASSETS_PATH)/8x8_chars.h $(VBCC_COMPILER) +$(CROSS_LIB_PATH)/cfg/vbcc/bbc/bbc5$(IF_POSIX) -v $(VBCC_MAKEFILE_COMPILATION_OPTS) $(VBCC_BBC_OPTS) $(INCLUDE_OPTS) \ -D__NORMALIZED_RAND -D__BBC__ -D_XL_NO_JOYSTICK \ -DXSize=20 -D__BBC_MODE=5 -D__BBC_GRAPHICS \ -DYSize=31 \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_BBC_SLOWDOWN) \ -D__ALT_SLEEP $(4COLOR_PALETTE) \ -D__DEFAULT_CLEAR_SCREEN \ $(CROSS_LIB_PATH)/display/init_graphics/vbcc/bbc/bbc_init_graphics.c \ $(CROSS_LIB_PATH)/sound/vbcc/bbc/bbc_sounds.c \ $(FULL_FILES) -o $(GAME_NAME) $(TOOLS_PATH)/bbc/bbcim$(COMPILEDEXT) -a X$(GAME_NAME)_$@.img $(GAME_NAME) mv $(GAME_NAME).inf $(BUILD_PATH)/X$(GAME_NAME)_$@.inf mv $(GAME_NAME) $(BUILD_PATH)/X$(GAME_NAME)_$@ mv X$(GAME_NAME)_$@.img $(BUILD_PATH) ================================================ FILE: src/makefiles.common/targets/vbcc/Makefile_m65 ================================================ # ----------------------------------------------------------------------- m65: m65_buffered m65_buffered: $(VBCC_COMPILER) +m65 $(VBCC_BBC_OPTS) $(INCLUDE_OPTS) \ -D__NORMALIZED_RAND -DVBCC -D__MEGA65__ \ -DXSize=39 \ -DYSize=22 \ -D__STDIO -DEVEN_LOOP_MOVE -DTURN_BASED_SKULL_MIN_SLOWDOWN_SCALE=1 -DTURN_BASED_GHOST_MIN_SLOWDOWN_SCALE=1 \ -DTURN_BASED_EFFECT_SCALE=1 -DTURN_BASED_WAIT_SCALE=1 \ -D_XL_NO_COLOR \ -D_XL_NO_SLEEP \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_M65_SLOWDOWN) \ -DTURN_BASED \ -D__BUFFERED_GRAPHICS \ -D__NO_INIT_GRAPHICS \ -D__ALT_PRINT \ -D__DEFAULT_CLEAR_SCREEN \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c \ $(FULL_FILES) -o xchase mv xchase $(BUILD_PATH)/ # mv xchase.inf $(BUILD_PATH)/ # mv xchase $(BUILD_PATH)/X$(GAME_NAME)_bbc_buffered # mv xchase.inf $(BUILD_PATH)/X$(GAME_NAME)_bbc_buffered.inf ================================================ FILE: src/makefiles.common/targets/xtc68/Makefile.xtc68_targets ================================================ # ------------------------------------------------------------------------------------------ # XTC68 # # xtc86 targets sinclair_ql_targets: \ sinclair_ql_tiny_buffered XTC68_OPTS = -D__XTC68__ -I$(SOURCE_PATH) \ xtc68_targets: sinclair_ql_targets ############################################################################################# XTC68_ALL_OPTS ?= \ $(XTC68_OPTS) $(INCLUDE_OPTS)\ -I$(SOURCE_PATH) \ -D__NORMALIZED_RAND \ -DXSize=79 \ -DYSize=22 \ -D__STDIO \ -D_XL_NO_COLOR \ -DTINY_GAME \ -DTURN_BASED \ -D__BUFFERED_GRAPHICS \ -D__NO_INIT_GRAPHICS \ -D__ALT_PRINT \ -D__DEFAULT_CLEAR_SCREEN \ -D__NO_WAIT \ -D_XL_NO_SLEEP \ -DNO_RANDOM_LEVEL \ -D__NO_PRINT sinclair_ql: sinclair_ql_tiny_buffered sinclair_ql_tiny_buffered: $(XTC68) $(XTC68_ALL_OPTS) -c $(SOURCE_PATH)/level.c -o level.o $(XTC68) $(XTC68_ALL_OPTS) -c $(SOURCE_PATH)/init_images.c -o init_images.o $(XTC68) $(XTC68_ALL_OPTS) -c $(CROSS_LIB_PATH)/display/display_macros.c -o display_macros.o $(XTC68) $(XTC68_ALL_OPTS) -c $(CROSS_LIB_PATH)/input/input_macros.c -o input_macros.o $(XTC68) $(XTC68_ALL_OPTS) -c $(CROSS_LIB_PATH)/text/text_macros.c -o text_macros.o $(XTC68) $(XTC68_ALL_OPTS) -c $(SOURCE_PATH)/move_player.c -o move_player.o $(XTC68) $(XTC68_ALL_OPTS) -c $(SOURCE_PATH)/ghost.c -o ghost.o $(XTC68) $(XTC68_ALL_OPTS) -c $(SOURCE_PATH)/character.c -o character.o $(XTC68) $(XTC68_ALL_OPTS) -c $(SOURCE_PATH)/game_text.c -o game_test.o $(XTC68) $(XTC68_ALL_OPTS) -c $(SOURCE_PATH)/strategy.c -o strategy.o $(XTC68) $(XTC68_ALL_OPTS) -c $(SOURCE_PATH)/main.c -o main.o $(XTC68) $(XTC68_ALL_OPTS) /usr/local/qdos/lib/crt.o \ level.o init_images.o display_macros.o input_macros.o text_macros.o move_player.o ghost.o character.o game_test.o strategy.o main.o rm level.o init_images.o display_macros.o input_macros.o text_macros.o move_player.o ghost.o character.o game_test.o strategy.o main.o mv a_out $(BUILD_PATH)/X$(GAME_NAME)_TINY_SinclairQL_buffered.out ================================================ FILE: src/makefiles.common/targets/z88dk/Makefile_abc80 ================================================ # $(TOOLS_PATH)/z88dk/abc80/bin2bac2$(COMPILEDEXT) abc80.bin $(BUILD_PATH)/xchase.bac 49200 # abc80_old: # $(Z88DK_PATH)$(MYZ88DK) +abc80 $(SCCZ80_OPTS) -lm -subtype=hex -zorg=49200 \ # $(INCLUDE_OPTS) \ # -pragma-include:$(CFG_PATH)/z88dk/zpragma_clib.inc \ # -D__ABC80__ -clib=ansi -vn \ # -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS \ # -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_ABC80_SLOWDOWN) \ # -D__NO_SCREEN_COLOR_INIT -D_XL_NO_JOYSTICK -D_XL_NO_UDG \ # -lndos -create-app -o abc80.bin \ # $(FULL_FILES) # $(TOOLS_PATH)/z88dk/abc80/bin2abc --bac80 -o $(BUILD_PATH)/xchase.bac -s 49200 abc80.bin # $(TOOLS_PATH)/z88dk/abc80/dosgen$(COMPILEDEXT) $(BUILD_PATH)/X$(GAME_NAME)_abc80.dsk # $(TOOLS_PATH)/z88dk/abc80/doscopy$(COMPILEDEXT) $(BUILD_PATH)/X$(GAME_NAME)_abc80.dsk -b $(BUILD_PATH)/xchase.bac # rm abc80.bin # mv $(BUILD_PATH)/xchase.bac $(BUILD_PATH)/X$(GAME_NAME)_abc80.bac # mv abc80.ihx $(BUILD_PATH)/X$(GAME_NAME)_abc80.ihx # rm -rf $(BUILD_PATH)/X$(GAME_NAME)_abc80 # rm -rf $(BUILD_PATH)/X$(GAME_NAME)_abc80.bin # abc80_test0: $(TOOLS_PATH)/z88dk/abc80/abcdisk-2.7/abcwrite$(COMPILEDEXT) # $(Z88DK_PATH)$(MYZ88DK) +abc80 $(SCCZ80_OPTS) -lm -subtype=hex -zorg=49200 \ # $(INCLUDE_OPTS) \ # -pragma-include:$(CFG_PATH)/z88dk/zpragma_clib.inc \ # -D__ABC80__ -clib=ansi -vn \ # -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS \ # -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_ABC80_SLOWDOWN) \ # -D__NO_SCREEN_COLOR_INIT -D_XL_NO_JOYSTICK -D_XL_NO_UDG \ # -lndos -create-app -o mo0 \ # $(FULL_FILES) # $(TOOLS_PATH)/z88dk/abc80/bin2abc --bac80 -o $(BUILD_PATH)/xchase.bac -s 49200 mo0 # rm -rf mo0 # rm -rf mo0.ihx # $(TOOLS_PATH)/z88dk/abc80/abcdisk-2.7/abcwrite$(COMPILEDEXT) abc830 $(BUILD_PATH) $(BUILD_PATH)/X$(GAME_NAME)_abc80.dsk # rm -rf $(BUILD_PATH)/xchase.bac # TODO: Use a temp directory to create disk images abc80: $(TOOLS_PATH)/z88dk/abc80/abcdisk-2.7/abcwrite$(EXEEXT) $(TOOLS_PATH)/z88dk/abc80/abcdisk-2.7/bin2abc$(EXEEXT) $(Z88DK_PATH)$(MYZ88DK) +abc80 $(SCCZ80_OPTS) -lm -subtype=hex -zorg=49200 \ $(INCLUDE_OPTS) \ -pragma-include:$(CFG_PATH)/z88dk/zpragma_clib.inc \ -D__ABC80__ -clib=ansi -vn \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_ABC80_SLOWDOWN) \ -D__NO_SCREEN_COLOR_INIT -D_XL_NO_JOYSTICK -D_XL_NO_UDG \ -lndos -create-app -o mo0 \ $(FULL_FILES) $(TOOLS_PATH)/z88dk/abc80/abcdisk-2.7/bin2abc --bac80 -o $(BUILD_PATH)/xl.bac -s 49200 mo0 rm -rf mo0 rm -rf mo0.ihx mkdir $(BUILD_PATH)/tmp mv $(BUILD_PATH)/xl.bac $(BUILD_PATH)/tmp $(TOOLS_PATH)/z88dk/abc80/abcdisk-2.7/abcwrite abc830 $(BUILD_PATH)/tmp $(BUILD_PATH)/X$(GAME_NAME)_abc80.dsk rm -rf $(BUILD_PATH)/tmp ================================================ FILE: src/makefiles.common/targets/z88dk/Makefile_abc800 ================================================ ############################################################################## # Can we do unbuffered/conio graphics? abc800: abc800_buffered abc800_buffered: $(Z88DK_PATH)$(MYZ88DK) +abc800 $(SCCZ80_OPTS) -lm -subtype=hex -zorg=49200 \ $(INCLUDE_OPTS) \ -pragma-include:$(CFG_PATH)/z88dk/zpragma_clib.inc \ -lndos \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_ABC800_SLOWDOWN) \ -D__STDIO -D__NO_SCREEN_COLOR_INIT \ -D_XL_NO_COLOR -DNO_BLINKING -DXSize=39 -DYSize=22 \ -D__BUFFERED_GRAPHICS -D__ALT_PRINT \ -D_XL_NO_SLEEP -D__NO_WAIT -D__DEFAULT_CLEAR_SCREEN \ -D__NO_INIT_GRAPHICS \ -lndos -create-app -o a800.bin \ $(FULL_FILES) \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c # $(TOOLS_PATH)/z88dk/abc80/bin2bac2$(COMPILEDEXT) a800.bin $(BUILD_PATH)/xc800.bac 49200 #$(TOOLS_PATH)/z88dk/abc80/bin2abc --bac800 -o $(BUILD_PATH)/xchase.bac abc80.bin # $(TOOLS_PATH)/z88dk/abc80/bin2abc --bac800 -o $(BUILD_PATH)/xc800.bac a800.bin # $(TOOLS_PATH)/z88dk/abc80/dosgen$(COMPILEDEXT) $(BUILD_PATH)/X$(GAME_NAME)_$@.dsk # $(TOOLS_PATH)/z88dk/abc80/doscopy$(COMPILEDEXT) $(BUILD_PATH)/X$(GAME_NAME)_$@.dsk -b $(BUILD_PATH)/xc800.bac rm a800.bin # rm -rf $(BUILD_PATH)/xc800.bac mv a800.ihx $(BUILD_PATH)/X$(GAME_NAME)_$@.ihx ================================================ FILE: src/makefiles.common/targets/z88dk/Makefile_alphatro ================================================ ############################################################################## alphatro: $(Z88DK_PATH)$(MYZ88DK) +alphatro $(SCCZ80_ROM_OPTS) $(INCLUDE_OPTS) \ -D__ALPHATRO__ -DXSize=40 -DYSize=24 \ -D__VT52 \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_ALPHATRO_SLOWDOWN) \ -D__CONIO_GRAPHICS \ -D__NO_INIT_GRAPHICS \ -lndos \ -clib=default -pragma-redirect:fputc_cons=fputc_cons_generic \ $(FULL_FILES) \ -create-app -o$(BUILD_PATH)/X$(GAME_NAME)_$@.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@_DATA.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@_BSS.bin ================================================ FILE: src/makefiles.common/targets/z88dk/Makefile_altair8800 ================================================ ############################# # ALTAIR 8800 # altair8800: altair8800_buffered altair8800_buffered: $(Z88DK_PATH)$(MYZ88DK) +altair8800 $(SCCZ80_OPTS) \ $(INCLUDE_OPTS) \ -DXSize=79 \ -DYSize=23 \ -D__ALTAIR8800__ \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_ALTAIR8800_SLOWDOWN) \ -vn -D_XL_NO_COLOR -D_XL_NO_JOYSTICK \ -D__NO_SCREEN_COLOR_INIT \ -lndos \ -D__BUFFERED_GRAPHICS -D__NO_INIT_GRAPHICS \ -D__ALT_PRINT \ -D__DEFAULT_CLEAR_SCREEN \ -D__STDIO \ -DTURN_BASED \ $(FULL_FILES) \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c \ -create-app -o$@.rom rm -rf $@_DATA.bin rm -rf $@_BSS.bin mv $@.rom $(BUILD_PATH)/X$(GAME_NAME)_$@.rom mv $@.bin $(BUILD_PATH)/X$(GAME_NAME)_$@.bin # pet_16k: # $(CC65_PATH)$(MYCC65) $(INCLUDE_OPTS) $(CC65_OPTS) -t pet -m mapfile.txt \ # -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_PET_SLOWDOWN) \ # -D__NO_INIT_GRAPHICS -D__CONIO_GRAPHICS -D_XL_NO_UDG \ # $(FULL_FILES) \ # $(CROSS_LIB_PATH)/sound/cc65/pet/pet_sounds.c \ # -o $(BUILD_PATH)/X$(GAME_NAME)_pet_16k.prg # altair8800: # $(Z88DK_PATH)$(MYZ88DK) +altair8800 $(SCCZ80_OPTS) -v \ # $(INCLUDE_OPTS) \ # -DXSize=79 \ # -DYSize=23 \ # -D__ALTAIR8800__ \ # -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_ALTAIR8800_SLOWDOWN) \ # -vn -D_XL_NO_COLOR -D_XL_NO_JOYSTICK \ # -D__NO_SCREEN_COLOR_INIT -D_XL_NO_UDG \ # -lndos __VT100 -D__INCLUDE_CONIO \ # -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS \ # -D__INCLUDE_STDIO \ # $(FULL_FILES) \ # -create-app -o$@.rom # rm -rf $@_DATA.bin # rm -rf $@_BSS.bin # mv $@.rom $(BUILD_PATH)/X$(GAME_NAME)_$@.rom # mv $@.bin $(BUILD_PATH)/X$(GAME_NAME)_$@.bin altair8800: $(Z88DK_PATH)$(MYZ88DK) +altair8800 $(SCCZ80_OPTS) \ $(INCLUDE_OPTS) -D__VT100 \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_ALTAIR8800_SLOWDOWN) \ -DXSize=79 -DYSize=23 \ -D_XL_NO_JOYSTICK -D_XL_NO_COLOR \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS -D__NO_SCREEN_COLOR_INIT \ -create-app -o$(BUILD_PATH)/X$(GAME_NAME)_$@.bin \ $(FULL_FILES) ================================================ FILE: src/makefiles.common/targets/z88dk/Makefile_attache ================================================ ############################# # ATTACHE attache_no_gfx: $(Z88DK_PATH)$(MYZ88DK) +cpm $(SCCZ80_OPTS) -subtype=attache \ $(INCLUDE_OPTS) \ -D__ADM3A \ -D__CPM_80X24__ \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_ATTACHE_GFX_SLOWDOWN) \ -create-app -o$(BUILD_PATH)/X$(GAME_NAME)_$@.bin \ $(FULL_FILES) rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.bin attache: $(ASSETS_PATH)/z88dk_sprites_definitions.h $(Z88DK_PATH)$(MYZ88DK) +cpm $(SCCZ80_OPTS) -subtype=attache \ $(INCLUDE_OPTS) -DXSize=40 -DYSize=30 \ -D__ATTACHE__ \ -D__ALT_PRINT \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_ATTACHE_SLOWDOWN) \ -D__Z88DK_SPRITES_GRAPHICS \ -create-app -o$(BUILD_PATH)/X$(GAME_NAME)_$@.bin \ -D__NO_INIT_GRAPHICS \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c \ $(FULL_FILES) rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.bin ================================================ FILE: src/makefiles.common/targets/z88dk/Makefile_aussie ================================================ ############################# # AUSSIE # aussie: # $(Z88DK_PATH)$(MYZ88DK) +cpm $(SCCZ80_OPTS) -laussie \ # $(INCLUDE_OPTS) \ # -D__AUSSIE__ \ # -D__BIT_BANG_SOUND \ # -D__ADM3A \ # -D__CPM_80X24__ \ # -D_XL_NO_SLEEP -D__NO_WAIT \ # -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS \ # -create-app -o$(BUILD_PATH)/X$(GAME_NAME)_$@.bin \ # $(FULL_FILES) # rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.bin aussie: $(Z88DK_PATH)$(MYZ88DK) +cpm $(SCCZ80_OPTS) -laussie \ $(INCLUDE_OPTS) --generic-console \ -pragma-define:CONSOLE_COLUMNS=80 -pragma-define:CONSOLE_ROWS=24 -lndos \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_AUSSIE_SLOWDOWN) \ -D__BIT_BANG_SOUND -DXSize=80 -DYSize=24 \ -D__AUSSIE__ \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS -D__NO_SCREEN_COLOR_INIT -D_XL_NO_COLOR \ -create-app -o$(BUILD_PATH)/X$(GAME_NAME)_$@.bin \ $(FULL_FILES) rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.bin ================================================ FILE: src/makefiles.common/targets/z88dk/Makefile_bee ================================================ ############################# # MICROBEE bee_keyboard: bee_40col_gfx_mode2 bee_standard_keyboard: bee_40col_standard_gfx_mode2 bee_premium: bee bee: bee_40col_gfx_mode2_joystick bee_standard: bee_40col_standard_gfx_mode2_joystick bee_no_gfx: bee_40col_no_gfx bee_no_gfx_wav: bee_40col_no_gfx_wav bee_40col: bee_40col_no_gfx bee_40col_no_gfx: $(Z88DK_PATH)$(MYZ88DK) +bee $(SCCZ80_OPTS) $(INCLUDE_OPTS) \ -D__BEE__ -clib=ansi40 -vn -DXSize=40 -DYSize=25 \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS -D_XL_NO_UDG -D_XL_NO_JOYSTICK \ -lndos -create-app -o $(BUILD_PATH)/X$(GAME_NAME)_$@.prg \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_BEE_SLOWDOWN) \ $(FULL_FILES) rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.prg bee_40col_no_gfx_joystick: $(Z88DK_PATH)$(MYZ88DK) +bee $(SCCZ80_OPTS) $(INCLUDE_OPTS) \ -D__BEE__ -clib=ansi40 -vn -DXSize=40 -DYSize=25 \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS -D_XL_NO_UDG \ -lndos -create-app -o $(BUILD_PATH)/X$(GAME_NAME)_$@.prg \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_BEE_SLOWDOWN) \ $(FULL_FILES) rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.prg bee_80col_no_gfx: $(Z88DK_PATH)$(MYZ88DK) +bee $(SCCZ80_OPTS) $(INCLUDE_OPTS) \ -D__BEE__ --generic-console -DXSize=80 -DYSize=24 -vn \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS -D_XL_NO_UDG -D_XL_NO_JOYSTICK \ -lndos -create-app -o $(BUILD_PATH)/X$(GAME_NAME)_$@.prg \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_BEE_SLOWDOWN) \ $(FULL_FILES) rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.prg bee_80col_no_gfx_wav: $(Z88DK_PATH)$(MYZ88DK) +bee $(SCCZ80_OPTS) $(INCLUDE_OPTS) \ -D__BEE__ --generic-console -DXSize=80 -DYSize=24 -vn -subtype=wav \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS -D_XL_NO_UDG -D_XL_NO_JOYSTICK \ -lndos -create-app -o $(BUILD_PATH)/X$(GAME_NAME)_$@.prg \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_BEE_SLOWDOWN) \ $(FULL_FILES) rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.prg bee_40col_wav: bee_40col_no_gfx_wav bee_40col_no_gfx_wav: $(Z88DK_PATH)$(MYZ88DK) +bee $(SCCZ80_OPTS) $(INCLUDE_OPTS) \ -D__BEE__ -clib=ansi40 -vn -DXSize=40 -DYSize=25 -subtype=wav \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS -D_XL_NO_UDG -D_XL_NO_JOYSTICK \ -lndos -create-app -o $(BUILD_PATH)/X$(GAME_NAME)_$@.prg \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_BEE_SLOWDOWN) \ $(FULL_FILES) rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.prg bee_gfx: bee_40col_gfx_mode2 bee_gfx_wav: bee_40col_gfx_mode2_wav bee_40col_gfx_mode2: $(ASSETS_PATH)/z88dk_xchase.asm $(Z88DK_PATH)$(MYZ88DK) +bee $(SCCZ80_OPTS) $(INCLUDE_OPTS) \ -D__BEE__ --generic-console -vn -DXSize=40 -DYSize=25 -D_XL_NO_JOYSTICK \ -D__CONIO_GRAPHICS -D__SCREEN_MODE=2 \ -lndos -create-app -o $(BUILD_PATH)/X$(GAME_NAME)_$@.prg \ $(FULL_FILES) \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_BEE_SLOWDOWN) \ $(ASSETS_PATH)/z88dk_xchase.asm \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/udg/udg_init_graphics.c rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.prg bee_40col_gfx_mode2_joystick: $(ASSETS_PATH)/z88dk_xchase.asm $(Z88DK_PATH)$(MYZ88DK) +bee $(SCCZ80_OPTS) $(INCLUDE_OPTS) \ -D__BEE__ --generic-console -vn -DXSize=40 -DYSize=25 \ -D__CONIO_GRAPHICS -D__SCREEN_MODE=2 \ -lndos -create-app -o $(BUILD_PATH)/X$(GAME_NAME)_$@.prg \ $(FULL_FILES) \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_BEE_SLOWDOWN) \ $(ASSETS_PATH)/z88dk_xchase.asm \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/udg/udg_init_graphics.c rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.prg bee_40col_standard_gfx_mode2: $(ASSETS_PATH)/z88dk_xchase.asm $(Z88DK_PATH)$(MYZ88DK) +bee $(SCCZ80_OPTS) $(INCLUDE_OPTS) -pragma-define:CLIB_BEE_PREMIUM=0 \ -D__BEE__ --generic-console -vn -DXSize=40 -DYSize=25 -D_XL_NO_JOYSTICK \ -D__CONIO_GRAPHICS -D__SCREEN_MODE=2 \ -lndos -create-app -o $(BUILD_PATH)/X$(GAME_NAME)_$@.prg \ $(FULL_FILES) \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_BEE_SLOWDOWN) \ $(ASSETS_PATH)/z88dk_xchase.asm \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/udg/udg_init_graphics.c rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.prg bee_40col_standard_gfx_mode2_joystick: $(ASSETS_PATH)/z88dk_xchase.asm $(Z88DK_PATH)$(MYZ88DK) +bee $(SCCZ80_OPTS) $(INCLUDE_OPTS) -pragma-define:CLIB_BEE_PREMIUM=0 \ -D__BEE__ --generic-console -vn -DXSize=40 -DYSize=25 \ -D__CONIO_GRAPHICS -D__SCREEN_MODE=2 \ -lndos -create-app -o $(BUILD_PATH)/X$(GAME_NAME)_$@.prg \ $(FULL_FILES) \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_BEE_SLOWDOWN) \ $(ASSETS_PATH)/z88dk_xchase.asm \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/udg/udg_init_graphics.c rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.prg bee_40col_gfx_mode2_wav: $(ASSETS_PATH)/z88dk_xchase.asm $(Z88DK_PATH)$(MYZ88DK) +bee $(SCCZ80_OPTS) $(INCLUDE_OPTS) \ -D__BEE__ --generic-console -vn -subtype=wav -DXSize=40 -DYSize=25 -D_XL_NO_JOYSTICK \ -D__CONIO_GRAPHICS -D__SCREEN_MODE=2 \ -lndos -create-app -o $(BUILD_PATH)/X$(GAME_NAME)_$@.prg \ $(FULL_FILES) \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_BEE_SLOWDOWN) \ $(ASSETS_PATH)/z88dk_xchase.asm \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/udg/udg_init_graphics.c rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.prg ================================================ FILE: src/makefiles.common/targets/z88dk/Makefile_bic ================================================ ############################# # BIC bic_buffered: $(Z88DK_PATH)$(MYZ88DK) +cpm $(SCCZ80_OPTS) -subtype=bic \ $(INCLUDE_OPTS) \ -DXSize=79 \ -DYSize=21 \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_BIC_SLOWDOWN) \ -D__NO_SCREEN_COLOR_INIT \ -DTURN_BASED -D_XL_NO_COLOR -D_XL_NO_JOYSTICK \ -D__BUFFERED_GRAPHICS \ -D__STDIO \ -D__NO_INIT_GRAPHICS \ -D__DEFAULT_CLEAR_SCREEN \ -D__ALT_PRINT \ -create-app -o$(BUILD_PATH)/X$(GAME_NAME)_$@.bin \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c \ $(FULL_FILES) rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.bin bic: $(Z88DK_PATH)$(MYZ88DK) +cpm $(SCCZ80_OPTS) -subtype=bic \ -DXSize=79 \ -DYSize=21 \ $(INCLUDE_OPTS) --generic-console -pragma-define:CONSOLE_COLUMNS=80 -pragma-define:CONSOLE_ROWS=24 -lndos \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_BIC_SLOWDOWN) \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS -D__NO_SCREEN_COLOR_INIT -D_XL_NO_COLOR \ -create-app -o$(BUILD_PATH)/X$(GAME_NAME)_$@.bin \ $(FULL_FILES) rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.bin ================================================ FILE: src/makefiles.common/targets/z88dk/Makefile_bit90 ================================================ ############################# # BIT90 bit90_joystick: $(ASSETS_PATH)/z88dk_xchase.asm $(Z88DK_PATH)$(MYZ88DK) +coleco $(SCCZ80_OPTS) $(INCLUDE_OPTS) -subtype=bit90 \ -D__COLECO__ \ -DZ88DK_JOYSTICK \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_BIT90_SLOWDOWN) \ -D__VT52 \ -D__CONIO_GRAPHICS \ -lndos \ -clib=default -pragma-redirect:fputc_cons=fputc_cons_generic \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/udg/udg_init_graphics.c \ $(ASSETS_PATH)/z88dk_xchase.asm \ $(FULL_FILES) \ -create-app -o$(BUILD_PATH)/X$(GAME_NAME)_$@.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@_DATA.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@_BSS.bin bit90: $(ASSETS_PATH)/z88dk_xchase.asm $(Z88DK_PATH)$(MYZ88DK) +coleco $(SCCZ80_OPTS) $(INCLUDE_OPTS) -subtype=bit90 \ -D__COLECO__ \ -D_XL_NO_JOYSTICK \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_BIT90_SLOWDOWN) \ -D__VT52 \ -D__CONIO_GRAPHICS \ -lndos \ -clib=default -pragma-redirect:fputc_cons=fputc_cons_generic \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/udg/udg_init_graphics.c \ $(ASSETS_PATH)/z88dk_xchase.asm \ $(FULL_FILES) \ -create-app -o$(BUILD_PATH)/X$(GAME_NAME)_$@.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@_DATA.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@_BSS.bin ================================================ FILE: src/makefiles.common/targets/z88dk/Makefile_bondwell ================================================ bondwell: $(Z88DK_PATH)$(MYZ88DK) +cpm $(SCCZ80_OPTS) -subtype=bondwell \ $(INCLUDE_OPTS) --generic-console -pragma-define:CONSOLE_COLUMNS=80 -pragma-define:CONSOLE_ROWS=24 -lndos \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_BONDWELL_SLOWDOWN) \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS -D__NO_SCREEN_COLOR_INIT -D_XL_NO_COLOR \ -create-app -o$(BUILD_PATH)/X$(GAME_NAME)_$@.bin \ $(FULL_FILES) rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.bin ================================================ FILE: src/makefiles.common/targets/z88dk/Makefile_bondwell2 ================================================ # UDG may be possible bondwell2_no_gfx: $(Z88DK_PATH)$(MYZ88DK) +cpm $(SCCZ80_OPTS) -subtype=bondwell2 \ $(INCLUDE_OPTS) --generic-console -pragma-define:CONSOLE_COLUMNS=80 -pragma-define:CONSOLE_ROWS=24 -lndos \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_BONDWELL2_SLOWDOWN) \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS -D__NO_SCREEN_COLOR_INIT -D_XL_NO_COLOR -D_XL_NO_JOYSTICK \ -create-app -o$(BUILD_PATH)/X$(GAME_NAME)_$@.bin \ $(FULL_FILES) rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@_bss_himem.bin bondwell2: $(ASSETS_PATH)/z88dk_xchase.asm $(Z88DK_PATH)$(MYZ88DK) +cpm $(SCCZ80_OPTS) -subtype=bondwell2 \ $(INCLUDE_OPTS) --generic-console -pragma-define:CONSOLE_COLUMNS=80 -pragma-define:CONSOLE_ROWS=24 -lndos \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_BONDWELL2_SLOWDOWN) \ -DXSize=80 -DYSize=24 \ -D__CONIO_GRAPHICS -D__NO_SCREEN_COLOR_INIT -D_XL_NO_COLOR -D_XL_NO_JOYSTICK \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/udg/udg_init_graphics.c \ -create-app -o$(BUILD_PATH)/a.bin \ $(ASSETS_PATH)/z88dk_xchase.asm \ $(FULL_FILES) rm -rf $(BUILD_PATH)/a.bin rm -rf $(BUILD_PATH)/a_HIMEM.bin mv $(BUILD_PATH)/a.com $(BUILD_PATH)/X$(GAME_NAME)_$@.com mv $(BUILD_PATH)/a.dsk $(BUILD_PATH)/X$(GAME_NAME)_$@.dsk ================================================ FILE: src/makefiles.common/targets/z88dk/Makefile_c7420 ================================================ ############################# # VideoPAC - C7420 c7420: c7420_buffered c7420_buffered: $(Z88DK_PATH)$(MYZ88DK) +c7420 $(SCCZ80_OPTS) $(INCLUDE_OPTS) \ -D__VGL__ \ -DXSize=39 -D_XL_NO_LOWER_BORDER \ -DYSize=20 -D_XL_NO_JOYSTICK \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_GL4000_SLOWDOWN) \ -D__NO_SCREEN_COLOR_INIT -D__BUFFERED_GRAPHICS -DTURN_BASED \ -D_XL_NO_COLOR -D__ALT_PRINT -D__STDIO -D__NO_SCREEN_COLOR_INIT \ -D__NO_INIT_GRAPHICS -D__INCLUDE_CONIO_H \ $(FULL_FILES) \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c \ -create-app -o$(BUILD_PATH)/X$(GAME_NAME)_$@.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@_BSS.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@_DATA.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.bin ================================================ FILE: src/makefiles.common/targets/z88dk/Makefile_coleco_adam ================================================ ############################# # COLECO_ADAM coleco_adam_no_gfx: $(Z88DK_PATH)$(MYZ88DK) +cpm $(SCCZ80_OPTS) $(INCLUDE_OPTS) -subtype=adam \ -D__COLECO_ADAM__ \ --generic-console -D_XL_NO_JOYSTICK \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_COLECO_ADAM_SLOWDOWN) \ -D__CONIO_GRAPHICS -DXSize=29 -DYSize=20 \ -D__NO_INIT_GRAPHICS \ -lndos \ $(FULL_FILES) \ -create-app -oxcadam.bin rm xcadam.bin rm xcadam.com mv xcadam.img $(BUILD_PATH)/X$(GAME_NAME)_$@.img coleco_adam: $(ASSETS_PATH)/z88dk_xchase.asm $(Z88DK_PATH)$(MYZ88DK) +cpm $(SCCZ80_OPTS) $(INCLUDE_OPTS) -subtype=adam \ -D__COLECO_ADAM__ \ --generic-console -D_XL_NO_JOYSTICK \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_COLECO_ADAM_SLOWDOWN) \ -D__CONIO_GRAPHICS -DXSize=29 -DYSize=20 \ -lndos \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/udg/udg_init_graphics.c \ $(ASSETS_PATH)/z88dk_xchase.asm \ $(FULL_FILES) \ -create-app -oxcadam.bin rm xcadam.bin rm xcadam.com mv xcadam.img $(BUILD_PATH)/X$(GAME_NAME)_$@.img ================================================ FILE: src/makefiles.common/targets/z88dk/Makefile_corvette ================================================ #TODO: generic console # UDG ???? corvette: $(ASSETS_PATH)/z88dk_xchase.asm $(Z88DK_PATH)$(MYZ88DK) +cpm -subtype=corvette $(SCCZ80_OPTS) \ $(INCLUDE_OPTS) \ -D__RADIO86__ \ -D__VT52 -DXSize=64 -DYSize=16 \ -D__CONIO_GRAPHICS \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_CORVETTE_SLOWDOWN) \ -lndos -D_XL_NO_JOYSTICK \ -clib=default -pragma-redirect:fputc_cons=fputc_cons_generic \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/udg/udg_init_graphics.c \ $(ASSETS_PATH)/z88dk_xchase.asm \ $(FULL_FILES) \ -create-app -o $(BUILD_PATH)/X$(GAME_NAME)_$@ rm $(BUILD_PATH)/X$(GAME_NAME)_$@ # rm $@ # cat bootstrap.cas $@.cas > $(BUILD_PATH)/X$(GAME_NAME)_$@.cas # rm bootstrap.cas # rm $@.cas # rm $@_BOOTSTRAP.bin corvette_buffered: $(Z88DK_PATH)$(MYZ88DK) +cpm -subtype=corvette $(SCCZ80_OPTS) $(INCLUDE_OPTS) \ -D__STDIO $(STDIO_GAME_OPTS) -D_XL_TURN_BASED_SKULL_MIN_SLOWDOWN_SCALE=1 -D_XL_TURN_BASED_GHOST_MIN_SLOWDOWN_SCALE=1 \ -D_XL_TURN_BASED_EFFECT_SCALE=1 -D_XL_TURN_BASED_WAIT_SCALE=1 -D_XL_NO_JOYSTICK \ -DXSize=64 -DYSize=16 -create-app \ -D_XL_NO_COLOR \ -D_XL_TURN_BASED -D__NO_SCREEN_COLOR_INIT \ -D__BUFFERED_GRAPHICS \ -D__NO_INIT_GRAPHICS \ -D__ALT_PRINT \ -D__DEFAULT_CLEAR_SCREEN \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c \ $(FULL_FILES) \ -o $(BUILD_PATH)/X$(GAME_NAME)_$@ rm $(BUILD_PATH)/X$(GAME_NAME)_$@ ================================================ FILE: src/makefiles.common/targets/z88dk/Makefile_dai ================================================ ############################# # DAI dai: dai_buffered dai_buffered: $(Z88DK_PATH)$(MYZ88DK) +dai $(SCCZ80_OPTS) $(INCLUDE_OPTS) \ -D__DAI__ \ -DXSize=47 \ -DYSize=21 \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_DAI_SLOWDOWN) \ -D__NO_SCREEN_COLOR_INIT -D__BUFFERED_GRAPHICS -DTURN_BASED \ -D_XL_NO_COLOR -D__ALT_PRINT -D__STDIO \ -D__NO_WAIT -D_XL_NO_SLEEP -D__DEFAULT_CLEAR_SCREEN \ -D__NO_INIT_GRAPHICS -D_XL_NO_JOYSTICK \ $(FULL_FILES) \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c \ -create-app -o$(BUILD_PATH)/X$(GAME_NAME)_$@.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.bin ================================================ FILE: src/makefiles.common/targets/z88dk/Makefile_dmv ================================================ ############################# # DMV # dmv: # $(Z88DK_PATH)$(MYZ88DK) +cpm $(SCCZ80_OPTS) -subtype=dmv \ # $(INCLUDE_OPTS) \ # -D__CPM_80X24__ \ # -D__ADM3A_WITH_UNDEF \ # -D__INCLUDE_CONIO_H \ # -D__DMV__ \ # -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS \ # \ # -create-app -o$(BUILD_PATH)/X$(GAME_NAME)_$@.bin \ # $(FULL_FILES) # rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.bin # -D__BIT_BANG_SOUND dmv: $(Z88DK_PATH)$(MYZ88DK) +cpm $(SCCZ80_OPTS) -subtype=dmv \ $(INCLUDE_OPTS) --generic-console -pragma-define:CONSOLE_COLUMNS=80 -pragma-define:CONSOLE_ROWS=24 -lndos \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_DMV_SLOWDOWN) \ -D__DMV__ \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS -D__NO_SCREEN_COLOR_INIT -D_XL_NO_COLOR \ -create-app -o$(BUILD_PATH)/X$(GAME_NAME)_$@.bin \ $(FULL_FILES) rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.bin ================================================ FILE: src/makefiles.common/targets/z88dk/Makefile_eg2k ================================================ ############################################################################## eg2k: $(ASSETS_PATH)/z88dk_xchase.asm $(Z88DK_PATH)$(MYZ88DK) +trs80 $(SCCZ80_OPTS) \ $(INCLUDE_OPTS) \ -D__EG2K__ \ -subtype=eg2000disk \ -pragma-redirect:getk=getk_inkey \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_EG2K_SLOWDOWN) \ $(INCLUDE_OPTS) -D__BIT_BANG_SOUND \ -D__EG2K__ \ -D__SCREEN_MODE=0 \ -D_XL_NO_JOYSTICK \ -D__CONIO_GRAPHICS \ -lndos \ --generic-console -pragma-redirect:fputc_cons=fputc_cons_generic \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/udg/udg_init_graphics.c \ $(ASSETS_PATH)/z88dk_xchase.asm \ $(FULL_FILES) \ $(CROSS_LIB_PATH)/sound/z88dk/psg/ay-3-8910_psg_sounds.c \ -create-app -o$(BUILD_PATH)/X$(GAME_NAME)_$@.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.bin eg2k_mono: $(ASSETS_PATH)/z88dk_xchase.asm $(Z88DK_PATH)$(MYZ88DK) +trs80 $(SCCZ80_OPTS) \ $(INCLUDE_OPTS) \ -D__EG2K__ \ -subtype=eg2000disk \ -pragma-redirect:getk=getk_inkey \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_EG2K_SLOWDOWN) \ $(INCLUDE_OPTS) -D__BIT_BANG_SOUND \ -D__EG2K__ \ -D__SCREEN_MODE=0 \ -D_XL_NO_JOYSTICK \ -D__CONIO_GRAPHICS -D_XL_NO_COLOR \ -lndos \ --generic-console -pragma-redirect:fputc_cons=fputc_cons_generic \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/udg/udg_init_graphics.c \ $(ASSETS_PATH)/z88dk_xchase.asm \ $(FULL_FILES) \ $(CROSS_LIB_PATH)/sound/z88dk/psg/ay-3-8910_psg_sounds.c \ -create-app -o$(BUILD_PATH)/X$(GAME_NAME)_$@.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.bin ================================================ FILE: src/makefiles.common/targets/z88dk/Makefile_einstein ================================================ ############################################################################## einstein: $(ASSETS_PATH)/z88dk_xchase.asm $(Z88DK_PATH)$(MYZ88DK) +cpm $(SCCZ80_OPTS) -subtype=einstein -leinstein \ -pragma-define:ansicolumns=32 -DXSize=32 -DYSize=24 \ $(INCLUDE_OPTS) \ -D__EINSTEIN__ \ -D__INCLUDE_CONIO_H \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_EINSTEIN_SLOWDOWN) \ --generic-console -D_XL_NO_JOYSTICK \ -D__CONIO_GRAPHICS \ -create-app -o$(BUILD_PATH)/X$(GAME_NAME)_$@.bin \ $(ASSETS_PATH)/z88dk_xchase.asm \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/udg/udg_init_graphics.c \ $(FULL_FILES) rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.bin einstein256: $(ASSETS_PATH)/z88dk_xchase.asm $(Z88DK_PATH)$(MYZ88DK) +cpm $(SCCZ80_OPTS) -subtype=einstein -leinstein -subtype=einstein256 \ -pragma-define:ansicolumns=32 -DXSize=32 -DYSize=24 \ $(INCLUDE_OPTS) \ -D__EINSTEIN__ \ -D__INCLUDE_CONIO_H \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_EINSTEIN_SLOWDOWN) \ --generic-console -D_XL_NO_JOYSTICK \ -D__CONIO_GRAPHICS \ -create-app -o$(BUILD_PATH)/X$(GAME_NAME)_$@.bin \ $(ASSETS_PATH)/z88dk_xchase.asm \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/udg/udg_init_graphics.c \ $(FULL_FILES) rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.bin ================================================ FILE: src/makefiles.common/targets/z88dk/Makefile_enterprise ================================================ ############################# # ENTERPRISE enterprise: enterprise_buffered # TODO: Try -subtype=com enterprise_buffered: $(Z88DK_PATH)$(MYZ88DK) +enterprise $(SCCZ80_OPTS) \ $(INCLUDE_OPTS) \ -vn \ -D__ENTERPRISE__ \ -DXSize=20 \ -DYSize=16 \ -D_XL_NO_COLOR \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_ENTERPRISE_SLOWDOWN) \ -DTURN_BASED \ -D__BUFFERED_GRAPHICS \ -D__NO_INIT_GRAPHICS \ -D__ALT_PRINT \ -D__DEFAULT_CLEAR_SCREEN -D__NO_SCREEN_COLOR_INIT \ -D__STDIO -D__BIT_BANG_SOUND \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c \ $(FULL_FILES) \ -create-app -o$(BUILD_PATH)/X$(GAME_NAME)_$@.bin rm $(BUILD_PATH)/X$(GAME_NAME)_$@.bin # -create-app -o enterprise.bin # mv enterprise.app FULL_enterprise.app # rm enterprise.bin # tar czvf FULL_enterprise.tar.zip FULL_enterprise.app # rm FULL_enterprise.app # mv FULL_enterprise.tar.zip $(BUILD_PATH)/X$(GAME_NAME)_$@.tar.zip ================================================ FILE: src/makefiles.common/targets/z88dk/Makefile_excalibur64 ================================================ ############################# # EXCALIBUR64 excalibur64_turn_bsed: $(Z88DK_PATH)$(MYZ88DK) +cpm $(SCCZ80_OPTS) -subtype=excali64 -pragma-redirect:fputc_cons=fputc_cons_generic \ $(INCLUDE_OPTS) \ -D__CPM_80X24__ \ -D__EXCALI64__ -DTURN_BASED \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS -D_XL_NO_JOYSTICK \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_EXCALIBUR64_SLOWDOWN) \ -create-app -oxcex64tb.bin \ $(FULL_FILES) mv xcex64tb.img $(BUILD_PATH)/X$(GAME_NAME)_$@.img rm -rf xcex64tb_HIMEM.bin rm -rf xcexca64_bss_himem.bin rm -rf xcex64tb.bin excalibur64_no_gfx: $(Z88DK_PATH)$(MYZ88DK) +cpm $(SCCZ80_OPTS) -subtype=excali64 -pragma-redirect:fputc_cons=fputc_cons_generic \ -pragma-redirect:getk=getk_inkey \ $(INCLUDE_OPTS) \ -D__CPM_80X24__ \ -D__EXCALI64__ \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS -D_XL_NO_JOYSTICK \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_EXCALIBUR64_SLOWDOWN) \ -create-app -oxcexca64.bin \ $(FULL_FILES) mv xcexca64.img $(BUILD_PATH)/X$(GAME_NAME)_$@.img rm -rf xcexca64_HIMEM.bin rm -rf xcexca64_bss_himem.bin rm -rf xcexca64.bin rm -rf xcexca64.com excalibur64: $(ASSETS_PATH)/z88dk_xchase.asm $(Z88DK_PATH)$(MYZ88DK) +cpm $(SCCZ80_OPTS) -subtype=excali64 -pragma-redirect:fputc_cons=fputc_cons_generic \ -pragma-redirect:getk=getk_inkey \ $(INCLUDE_OPTS) \ -DXSize=80 -DYSize=24 \ -D__EXCALI64__ \ -D__CONIO_GRAPHICS -D_XL_NO_JOYSTICK \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_EXCALIBUR64_SLOWDOWN) \ $(FULL_FILES) \ $(ASSETS_PATH)/z88dk_xchase.asm \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/udg/udg_init_graphics.c \ -create-app -oxcexca64.bin mv xcexca64.img $(BUILD_PATH)/X$(GAME_NAME)_$@.img rm -rf xcexca64_HIMEM.bin rm -rf xcexca64_bss_himem.bin rm -rf xcexca64.bin rm -rf xcexca64.com ################# ================================================ FILE: src/makefiles.common/targets/z88dk/Makefile_fp1100 ================================================ ############################# # FP1100 fp1100: $(ASSETS_PATH)/z88dk_xchase.asm $(Z88DK_PATH)$(MYZ88DK) +fp1100 $(SCCZ80_OPTS) $(INCLUDE_OPTS) -pragma-redirect:fputc_cons=fputc_cons_generic \ -D__FP1100__ -vn \ -D__VT52 -DYSize=24 -DXSize=39 \ -lndos \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_FP1100_SLOWDOWN) \ -D__CONIO_GRAPHICS \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/udg/udg_init_graphics.c \ $(FULL_FILES) -D_XL_NO_JOYSTICK \ $(ASSETS_PATH)/z88dk_xchase.asm \ -create-app -o fp1100_X$(GAME_NAME).bin mv fp1100_X$(GAME_NAME).d88 $(BUILD_PATH)/X$(GAME_NAME)_$@.d88 rm -rf fp1100_X$(GAME_NAME).bin rm -rf fp1100_X$(GAME_NAME)_BOOTSTRAP.bin ================================================ FILE: src/makefiles.common/targets/z88dk/Makefile_g800 ================================================ ############################# # G800 g800: g850 e200: $(Z88DK_PATH)$(MYZ88DK) +g800 $(SCCZ80_ROM_OPTS) -clib=e200 $(INCLUDE_OPTS) \ -D__G800__ \ -D_XL_NO_JOYSTICK -D_XL_NO_UDG -D_XL_NO_COLOR \ -DXSize=24 -DYSize=4 \ -vn \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_E200_SLOWDOWN) \ -lndos \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS \ $(FULL_FILES) \ -create-app -o g800$(GAME_NAME).bin rm g800$(GAME_NAME).bin rm g800$(GAME_NAME).rom mv g800$(GAME_NAME).ihx $(BUILD_PATH)/X$(GAME_NAME)_$@.ihx g815: $(Z88DK_PATH)$(MYZ88DK) +g800 $(SCCZ80_ROM_OPTS) -clib=g815c $(INCLUDE_OPTS) \ -D__G800__ \ -D_XL_NO_JOYSTICK -D_XL_NO_UDG -D_XL_NO_COLOR \ -DXSize=28 -DYSize=8 -DX_OFFSET=4 \ -vn \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_G815_SLOWDOWN) \ -lndos \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS \ $(FULL_FILES) \ -create-app -o g800$(GAME_NAME).bin rm g800$(GAME_NAME).bin rm g800$(GAME_NAME).rom mv g800$(GAME_NAME).ihx $(BUILD_PATH)/X$(GAME_NAME)_$@.ihx g850_8: $(Z88DK_PATH)$(MYZ88DK) +g800 $(SCCZ80_ROM_OPTS) -clib=g850 $(INCLUDE_OPTS) \ -D__G800__ \ -D_XL_NO_JOYSTICK -D_XL_NO_UDG -D_XL_NO_COLOR \ -DXSize=28 -DYSize=8 -DX_OFFSET=4 \ -vn \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_G850_SLOWDOWN) \ -lndos \ -D__CONIO_GRAPHICS \ $(FULL_FILES) \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/g850/g850_init_graphics.c \ -create-app -o g800$(GAME_NAME).bin rm g800$(GAME_NAME).bin rm g800$(GAME_NAME).rom mv g800$(GAME_NAME).ihx $(BUILD_PATH)/X$(GAME_NAME)_$@.ihx g850_12: g850 g850: $(Z88DK_PATH)$(MYZ88DK) +g800 $(SCCZ80_ROM_OPTS) -clib=g850c $(INCLUDE_OPTS) \ -D__G800__ \ -D_XL_NO_JOYSTICK -D_XL_NO_UDG -D_XL_NO_COLOR \ -DXSize=28 -DYSize=12 -DX_OFFSET=4 \ -vn \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_G850_SLOWDOWN) \ -lndos \ -D__CONIO_GRAPHICS \ $(FULL_FILES) \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/g850/g850_init_graphics.c \ -create-app -o g800$(GAME_NAME).bin rm g800$(GAME_NAME).bin rm g800$(GAME_NAME).rom mv g800$(GAME_NAME).ihx $(BUILD_PATH)/X$(GAME_NAME)_$@.ihx g850_6: $(Z88DK_PATH)$(MYZ88DK) +g800 $(SCCZ80_ROM_OPTS) -clib=g850b $(INCLUDE_OPTS) \ -D__G800__ \ -D__G800__ \ -D_XL_NO_JOYSTICK -D_XL_NO_UDG -D_XL_NO_COLOR \ -DXSize=36 -DYSize=6 \ -vn \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_G850_SLOWDOWN) \ -lndos \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS \ $(FULL_FILES) \ -create-app -o g800$(GAME_NAME).bin rm g800$(GAME_NAME).bin rm g800$(GAME_NAME).rom mv g800$(GAME_NAME).ihx $(BUILD_PATH)/X$(GAME_NAME)_$@.ihx g815_5: $(Z88DK_PATH)$(MYZ88DK) +g800 $(SCCZ80_ROM_OPTS) -clib=g815 $(INCLUDE_OPTS) \ -D__G800__ \ -D_XL_NO_JOYSTICK -D_XL_NO_UDG -D_XL_NO_COLOR \ -DXSize=18 -DYSize=5 \ -vn \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_G815_SLOWDOWN) \ -lndos \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS \ $(FULL_FILES) \ -create-app -o g800$(GAME_NAME).bin rm g800$(GAME_NAME).bin rm g800$(GAME_NAME).rom mv g800$(GAME_NAME).ihx $(BUILD_PATH)/X$(GAME_NAME)_$@.ihx ================================================ FILE: src/makefiles.common/targets/z88dk/Makefile_gemini ================================================ gemini: $(Z88DK_PATH)$(MYZ88DK) +cpm $(SCCZ80_OPTS) -subtype=gemini \ $(INCLUDE_OPTS) --generic-console -pragma-define:CONSOLE_COLUMNS=80 -pragma-define:CONSOLE_ROWS=24 -lndos \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS -D__NO_SCREEN_COLOR_INIT -D_XL_NO_COLOR \ -create-app -o$(BUILD_PATH)/X$(GAME_NAME)_$@.bin \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_GEMINI_SLOWDOWN) \ $(FULL_FILES) rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.bin ================================================ FILE: src/makefiles.common/targets/z88dk/Makefile_gl4000 ================================================ ############################# # V-TECH GENIUS LEADER gl4000: gl4000_buffered gl4000_buffered: $(Z88DK_PATH)$(MYZ88DK) +gl -clib=gl4000 $(SCCZ80_OPTS) $(INCLUDE_OPTS) \ -D__VGL__ \ -DXSize=20 -D_XL_NO_LOWER_BORDER \ -DYSize=6 \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_GL4000_SLOWDOWN) \ -D__NO_SCREEN_COLOR_INIT -D__BUFFERED_GRAPHICS -DTURN_BASED \ -D_XL_NO_COLOR -D__ALT_PRINT -D__STDIO -D__NO_SCREEN_COLOR_INIT \ -D__NO_INIT_GRAPHICS -D__INCLUDE_CONIO_H \ $(FULL_FILES) \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c \ -create-app -o$(BUILD_PATH)/X$(GAME_NAME)_$@.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@_BSS.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@_DATA.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.bin ================================================ FILE: src/makefiles.common/targets/z88dk/Makefile_gl6000sl ================================================ gl6000sl_buffered: $(Z88DK_PATH)$(MYZ88DK) +gl -clib=gl6000sl $(SCCZ80_OPTS) $(INCLUDE_OPTS) \ -D__VGL__ \ -DXSize=30 -D_XL_NO_LOWER_BORDER \ -DYSize=12 \ -D__NO_SCREEN_COLOR_INIT -D__BUFFERED_GRAPHICS -DTURN_BASED \ -D_XL_NO_COLOR -D__ALT_PRINT -D__STDIO -D__NO_SCREEN_COLOR_INIT \ -D__NO_INIT_GRAPHICS -D__INCLUDE_CONIO_H \ $(FULL_FILES) \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_GL6000SL_SLOWDOWN) \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c \ -create-app -o$(BUILD_PATH)/X$(GAME_NAME)_$@.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@_BSS.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@_DATA.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.bin gl6000sl: $(ASSETS_PATH)/z88dk_xchase.asm $(Z88DK_PATH)$(MYZ88DK) +gl -clib=gl6000sl $(SCCZ80_OPTS) $(INCLUDE_OPTS) \ -D__VGL__ \ -DXSize=30 -D_XL_NO_LOWER_BORDER \ -DYSize=12 \ -D__NO_SCREEN_COLOR_INIT -D__CONIO_GRAPHICS \ -D_XL_NO_COLOR \ $(FULL_FILES) \ $(ASSETS_PATH)/z88dk_xchase.asm \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_GL6000SL_SLOWDOWN) \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/udg/udg_init_graphics.c \ -create-app -o$(BUILD_PATH)/X$(GAME_NAME)_$@.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@_BSS.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@_DATA.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.bin ================================================ FILE: src/makefiles.common/targets/z88dk/Makefile_hemc ================================================ ############################# # HEMC hemc: $(Z88DK_PATH)$(MYZ88DK) +hemc $(SCCZ80_OPTS) $(INCLUDE_OPTS) -pragma-redirect:fputc_cons=fputc_cons_generic \ -D__HEMC__ \ -DXSize=64 \ -DYSize=22 \ -D__NO_SCREEN_COLOR_INIT \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_HEMC_SLOWDOWN) \ -D__VT52 \ -D__CONIO_GRAPHICS -D_XL_NO_COLOR -D_XL_NO_JOYSTICK \ -lndos \ -D__NO_INIT_GRAPHICS \ $(FULL_FILES) \ -create-app -o$(BUILD_PATH)/X$(GAME_NAME)_$@.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.bin ================================================ FILE: src/makefiles.common/targets/z88dk/Makefile_hgmc ================================================ ############################# # HGMC hgmc: $(ASSETS_PATH)/z88dk_xchase.asm $(Z88DK_PATH)$(MYZ88DK) +hgmc $(SCCZ80_OPTS) $(INCLUDE_OPTS) -pragma-redirect:fputc_cons=fputc_cons_generic \ -D__HGMC__ \ -DXSize=32 \ -DYSize=30 \ -D__NO_SCREEN_COLOR_INIT \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_HGMC_SLOWDOWN) \ -D_XL_NO_JOYSTICK \ -D__CONIO_GRAPHICS -D_XL_NO_COLOR \ -lndos \ $(FULL_FILES) \ $(ASSETS_PATH)/z88dk_xchase.asm \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/udg/udg_init_graphics.c \ -create-app -o$(BUILD_PATH)/X$(GAME_NAME)_$@.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.bin hgmc_no_gfx: $(Z88DK_PATH)$(MYZ88DK) +hgmc $(SCCZ80_OPTS) $(INCLUDE_OPTS) -pragma-redirect:fputc_cons=fputc_cons_generic \ -D__HGMC__ \ -DXSize=32 \ -DYSize=30 \ -D_XL_NO_JOYSTICK \ -D__NO_SCREEN_COLOR_INIT \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_HGMC_SLOWDOWN) \ -D__VT52 -D_XL_NO_JOYSTICK \ -D__CONIO_GRAPHICS -D_XL_NO_COLOR \ -lndos \ -D__NO_INIT_GRAPHICS \ $(FULL_FILES) \ -create-app -o$(BUILD_PATH)/X$(GAME_NAME)_$@.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.bin ================================================ FILE: src/makefiles.common/targets/z88dk/Makefile_homelab ================================================ ############################# # HOMELAB (4) homelab: $(Z88DK_PATH)$(MYZ88DK) +homelab $(SCCZ80_OPTS) $(INCLUDE_OPTS) \ -D__HOMELAB__ \ -DXSize=64 \ -DYSize=30 \ -D__NO_SCREEN_COLOR_INIT \ -D_XL_NO_COLOR \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_HOMELAB_SLOWDOWN) \ -D__VT52 \ -D__CONIO_GRAPHICS \ -lndos \ -D__NO_INIT_GRAPHICS \ $(FULL_FILES) \ -create-app -o$(BUILD_PATH)/X$(GAME_NAME)_$@.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.bin ================================================ FILE: src/makefiles.common/targets/z88dk/Makefile_homelab2 ================================================ ############################# # HOMELAB2 homelab2: $(Z88DK_PATH)$(MYZ88DK) +homelab2 $(SCCZ80_OPTS) $(INCLUDE_OPTS) \ -D__HOMELAB2__ \ -DXSize=40 \ -DYSize=23 \ -D__NO_SCREEN_COLOR_INIT \ -D_XL_NO_COLOR \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_HOMELAB2_SLOWDOWN) \ -D__VT52 \ -D__CONIO_GRAPHICS \ -lndos \ -D__NO_INIT_GRAPHICS \ $(FULL_FILES) \ -create-app -o$(BUILD_PATH)/X$(GAME_NAME)_$@.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.bin ================================================ FILE: src/makefiles.common/targets/z88dk/Makefile_kaypro ================================================ ############################# # KAYPRO kaypro: kaypro2x kaypro84: kaypro2x # kaypro84 (-subtype=kaypro84) kaypro2x: $(ASSETS_PATH)/z88dk_sprites_definitions.h $(Z88DK_PATH)$(MYZ88DK) +cpm $(SCCZ80_OPTS) -subtype=kaypro84 -lgfxkp \ $(INCLUDE_OPTS) \ -D__KAYPRO__ \ -D__ALT_PRINT \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_KAYPRO_SLOWDOWN) \ -D__Z88DK_SPRITES_GRAPHICS \ -create-app -o$(BUILD_PATH)/X$(GAME_NAME)_$@.bin \ -D__NO_INIT_GRAPHICS \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c \ $(FULL_FILES) rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.bin ================================================ FILE: src/makefiles.common/targets/z88dk/Makefile_kaypro83 ================================================ # kaypro83 (-subtype=kaypro83) kaypro83: $(ASSETS_PATH)/z88dk_sprites_definitions.h $(Z88DK_PATH)$(MYZ88DK) +cpm $(SCCZ80_OPTS) -subtype=kaypro83 -lgfxkp \ $(INCLUDE_OPTS) \ -D__KAYPRO83__ \ -D__ALT_PRINT \ -D__Z88DK_SPRITES_GRAPHICS \ -create-app -o$(BUILD_PATH)/X$(GAME_NAME)_$@.bin \ -D__NO_INIT_GRAPHICS \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_KAYPRO83_SLOWDOWN) \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c \ $(FULL_FILES) rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@_bss_himem.bin ================================================ FILE: src/makefiles.common/targets/z88dk/Makefile_kramermc ================================================ ############################# # KRAMER-MC kramermc: $(Z88DK_PATH)$(MYZ88DK) +kramermc $(SCCZ80_OPTS) $(INCLUDE_OPTS) \ -clib=default -pragma-redirect:fputc_cons=fputc_cons_generic \ -D__KRAMERMC__ \ -DXSize=64 \ -DYSize=16 \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_KRAMERMC_SLOWDOWN) \ -D__NO_SCREEN_COLOR_INIT \ -D_XL_NO_JOYSTICK \ -D__VT52 -D_XL_NO_COLOR \ -D__CONIO_GRAPHICS -D__STDIO -DTURN_BASED \ -lndos \ -D__NO_INIT_GRAPHICS \ $(FULL_FILES) \ -create-app -o$(BUILD_PATH)/X$(GAME_NAME)_$@.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.bin ================================================ FILE: src/makefiles.common/targets/z88dk/Makefile_krokha ================================================ # -pragma-define:CRT_ENABLE_STDIO=0 krokha: $(Z88DK_PATH)$(MYZ88DK) +krokha $(SCCZ80_OPTS) \ $(INCLUDE_OPTS) --generic-console -DXSize=48 -DYSize=32 -lndos \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS \ -create-app -o$(BUILD_PATH)/X$(GAME_NAME)_$@.bin \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_KROKHA_SLOWDOWN) \ $(FULL_FILES) rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@_BSS.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@_DATA.bin ================================================ FILE: src/makefiles.common/targets/z88dk/Makefile_lambda ================================================ ############################# # LAMBDA lambda: lambda_16k lambda_16k: $(Z88DK_PATH)$(MYZ88DK) +lambda $(SCCZ80_OPTS) $(INCLUDE_OPTS) \ -vn -D__LAMBDA__ \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_LAMBDA_SLOWDOWN) \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS \ -lndos -create-app -o $(BUILD_PATH)/X$(GAME_NAME)_$@.prg \ $(FULL_FILES) rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.prg ================================================ FILE: src/makefiles.common/targets/z88dk/Makefile_lm80c ================================================ lm80c: $(ASSETS_PATH)/z88dk_xchase.asm $(Z88DK_PATH)$(MYZ88DK) +lm80c $(SCCZ80_OPTS) \ $(INCLUDE_OPTS) \ -D__LM80C__ \ -D__VT52 -DXSize=32 -DYSize=24 \ -D__CONIO_GRAPHICS \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_LM80C_SLOWDOWN) \ -lndos -D_XL_NO_JOYSTICK \ -pragma-redirect:fputc_cons=fputc_cons_generic \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/udg/udg_init_graphics.c \ $(ASSETS_PATH)/z88dk_xchase.asm \ $(FULL_FILES) \ -create-app -o $(BUILD_PATH)/X$(GAME_NAME)_$@ rm $(BUILD_PATH)/X$(GAME_NAME)_$@ ================================================ FILE: src/makefiles.common/targets/z88dk/Makefile_lviv ================================================ lviv: $(ASSETS_PATH)/z88dk_xchase.asm $(Z88DK_PATH)$(MYZ88DK) +lviv $(SCCZ80_OPTS) \ $(INCLUDE_OPTS) \ -D__LVIV__ -DXSize=32 -DYSize=32 \ -pragma-redirect:getk=getk_inkey \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_LVIV_SLOWDOWN) \ $(INCLUDE_OPTS) -D_XL_NO_SOUND \ -D_XL_NO_JOYSTICK \ -D__CONIO_GRAPHICS \ -lndos \ --generic-console -pragma-redirect:fputc_cons=fputc_cons_generic \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/udg/udg_init_graphics.c \ $(ASSETS_PATH)/z88dk_xchase.asm \ $(FULL_FILES) \ -create-app -o$(BUILD_PATH)/X$(GAME_NAME)_$@.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@_HIMEM.bin ================================================ FILE: src/makefiles.common/targets/z88dk/Makefile_m5 ================================================ ############################# # M5 m5_4k: $(ASSETS_PATH)/z88dk_xchase.asm $(Z88DK_PATH)$(MYZ88DK) +m5 $(SCCZ80_OPTS) \ $(INCLUDE_OPTS) -DEXTRA_TITLE \ -lm -create-app -Cz--audio -subtype=tape \ -D__M5__ \ -clib=ansi -pragma-define:ansicolumns=32 \ -D__BIT_BANG_SOUND \ -D__CONIO_GRAPHICS \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_M5_SLOWDOWN) \ -clib=default -pragma-redirect:fputc_cons=fputc_cons_generic \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/udg/udg_init_graphics.c \ $(ASSETS_PATH)/z88dk_xchase.asm \ $(FULL_FILES) \ -o$(BUILD_PATH)/X$(GAME_NAME)_$@ rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@ m5: $(ASSETS_PATH)/z88dk_xchase.asm $(Z88DK_PATH)$(MYZ88DK) +m5 $(SCCZ80_OPTS) \ $(INCLUDE_OPTS) -DEXTRA_TITLE \ -lm -create-app -Cz--audio -subtype=tape \ -pragma-define:REGISTER_SP=65000 \ -D__M5__ \ -clib=ansi -pragma-define:ansicolumns=32 \ -D__BIT_BANG_SOUND \ -D__CONIO_GRAPHICS \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_M5_SLOWDOWN) \ -clib=default -pragma-redirect:fputc_cons=fputc_cons_generic \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/udg/udg_init_graphics.c \ $(ASSETS_PATH)/z88dk_xchase.asm \ $(FULL_FILES) \ -o$(BUILD_PATH)/X$(GAME_NAME)_$@ rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@ m5_4k_rom: $(ASSETS_PATH)/z88dk_xchase.asm $(Z88DK_PATH)$(MYZ88DK) +m5 $(SCCZ80_OPTS) \ $(INCLUDE_OPTS) -DEXTRA_TITLE \ -lm -create-app -Cz--audio \ -D__M5__ \ -clib=ansi -pragma-define:ansicolumns=32 \ -D__BIT_BANG_SOUND \ -D__CONIO_GRAPHICS \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_M5_SLOWDOWN) \ -clib=default -pragma-redirect:fputc_cons=fputc_cons_generic \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/udg/udg_init_graphics.c \ $(ASSETS_PATH)/z88dk_xchase.asm \ $(FULL_FILES) \ -o$(BUILD_PATH)/X$(GAME_NAME)_$@ rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@ rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@_DATA.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@_BSS.bin m5_rom: $(ASSETS_PATH)/z88dk_xchase.asm $(Z88DK_PATH)$(MYZ88DK) +m5 $(SCCZ80_OPTS) \ $(INCLUDE_OPTS) -DEXTRA_TITLE \ -lm -create-app -Cz--audio \ -pragma-define:REGISTER_SP=65000 \ -D__M5__ \ -clib=ansi -pragma-define:ansicolumns=32 \ -D__BIT_BANG_SOUND \ -D__CONIO_GRAPHICS \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_M5_SLOWDOWN) \ -clib=default -pragma-redirect:fputc_cons=fputc_cons_generic \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/udg/udg_init_graphics.c \ $(ASSETS_PATH)/z88dk_xchase.asm \ $(FULL_FILES) \ -o$(BUILD_PATH)/X$(GAME_NAME)_$@ rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@ rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@_DATA.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@_BSS.bin m5_keyboard: $(ASSETS_PATH)/z88dk_xchase.asm $(Z88DK_PATH)$(MYZ88DK) +m5 $(SCCZ80_OPTS) \ $(INCLUDE_OPTS) -DEXTRA_TITLE \ -lm -create-app -Cz--audio -subtype=tape \ -pragma-define:REGISTER_SP=65000 \ -D__M5__ -D_XL_NO_JOYSTICK \ -clib=ansi -pragma-define:ansicolumns=32 \ -D__BIT_BANG_SOUND \ -D__CONIO_GRAPHICS \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_M5_SLOWDOWN) \ -clib=default -pragma-redirect:fputc_cons=fputc_cons_generic \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/udg/udg_init_graphics.c \ $(ASSETS_PATH)/z88dk_xchase.asm \ $(FULL_FILES) \ -o$(BUILD_PATH)/X$(GAME_NAME)_$@ rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@ m5_keyboard_rom: $(ASSETS_PATH)/z88dk_xchase.asm $(Z88DK_PATH)$(MYZ88DK) +m5 $(SCCZ80_OPTS) \ $(INCLUDE_OPTS) -DEXTRA_TITLE \ -lm -create-app -Cz--audio \ -pragma-define:REGISTER_SP=65000 \ -D__M5__ -D_XL_NO_JOYSTICK \ -clib=ansi -pragma-define:ansicolumns=32 \ -D__BIT_BANG_SOUND \ -D__CONIO_GRAPHICS \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_M5_SLOWDOWN) \ -clib=default -pragma-redirect:fputc_cons=fputc_cons_generic \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/udg/udg_init_graphics.c \ $(ASSETS_PATH)/z88dk_xchase.asm \ $(FULL_FILES) \ -o$(BUILD_PATH)/X$(GAME_NAME)_$@ rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@ rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@_DATA.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@_BSS.bin ================================================ FILE: src/makefiles.common/targets/z88dk/Makefile_mbc200 ================================================ ############################# # MBC200 mbc200: $(Z88DK_PATH)$(MYZ88DK) +cpm -subtype=mbc200 $(SCCZ80_OPTS) $(INCLUDE_OPTS) \ -D__PC88__ \ -lndos -DXSize=80 -DYSize=33 \ -clib=default -pragma-redirect:fputc_cons=fputc_cons_generic \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS -D__DEFAULT_CLEAR_SCREEN \ $(FULL_FILES) \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_MBC200_SLOWDOWN) \ -create-app \ -o $(BUILD_PATH)/X$(GAME_NAME)_$@ rm $(BUILD_PATH)/X$(GAME_NAME)_$@ ================================================ FILE: src/makefiles.common/targets/z88dk/Makefile_micro8085 ================================================ micro8085: micro8085_buffered micro8085_buffered: $(Z88DK_PATH)$(MYZ88DK) +micro8085 $(SCCZ80_OPTS) $(INCLUDE_OPTS) \ -D__STDIO $(STDIO_GAME_OPTS) -D_XL_TURN_BASED_SKULL_MIN_SLOWDOWN_SCALE=1 -D_XL_TURN_BASED_GHOST_MIN_SLOWDOWN_SCALE=1 \ -D_XL_TURN_BASED_EFFECT_SCALE=1 -D_XL_TURN_BASED_WAIT_SCALE=1 -D_XL_NO_JOYSTICK \ -DXSize=32 -DYSize=24 -create-app \ -D_XL_NO_COLOR \ -D_XL_TURN_BASED -D__NO_SCREEN_COLOR_INIT \ -D__BUFFERED_GRAPHICS \ -D__NO_INIT_GRAPHICS \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_MICRO8085_SLOWDOWN) \ -D__ALT_PRINT \ -D__DEFAULT_CLEAR_SCREEN \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c \ $(FULL_FILES) \ -o $(BUILD_PATH)/X$(GAME_NAME)_$@ rm $(BUILD_PATH)/X$(GAME_NAME)_$@ rm $(BUILD_PATH)/X$(GAME_NAME)_$@.lis rm $(BUILD_PATH)/X$(GAME_NAME)_$@.map rm $(BUILD_PATH)/X$(GAME_NAME)_$@_BSS.bin rm $(BUILD_PATH)/X$(GAME_NAME)_$@_DATA.bin ================================================ FILE: src/makefiles.common/targets/z88dk/Makefile_mikro80 ================================================ ############################# # MIKRO80 mikro80: $(Z88DK_PATH)$(MYZ88DK) +mikro80 $(SCCZ80_OPTS) $(INCLUDE_OPTS) \ -D__MIKRO80__ \ -DXSize=64 \ -DYSize=30 \ -D__NO_SCREEN_COLOR_INIT \ -D_XL_NO_COLOR \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_MIKRO80_SLOWDOWN) \ -D__VT52 \ -D__CONIO_GRAPHICS \ -lndos \ -D__NO_INIT_GRAPHICS \ $(FULL_FILES) \ -create-app -o$(BUILD_PATH)/X$(GAME_NAME)_$@.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.bin ================================================ FILE: src/makefiles.common/targets/z88dk/Makefile_misc_cpm ================================================ ############################# # QC10 and others # https://github.com/z88dk/z88dk/blob/master/lib/config/cpm.cfg qc10_turn_based: $(Z88DK_PATH)$(MYZ88DK) +cpm $(SCCZ80_OPTS) -subtype=qc10 \ $(INCLUDE_OPTS) \ -D__CPM_80X24__ \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_QC10_SLOWDOWN) \ -D__ADM3A_WITH_UNDEF -DTURN_BASED \ -D__QC10__ \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS \ -create-app -oxcqc10.bin \ $(FULL_FILES) rm xcqc10.bin rm xcqc10.com mv xcqc10.dsk $(BUILD_PATH)/X$(GAME_NAME)_$@.dsk qc10: $(Z88DK_PATH)$(MYZ88DK) +cpm $(SCCZ80_OPTS) -subtype=qc10 \ $(INCLUDE_OPTS) --generic-console -pragma-define:CONSOLE_COLUMNS=80 -pragma-define:CONSOLE_ROWS=24 -lndos \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_QC10_SLOWDOWN) \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS -D__NO_SCREEN_COLOR_INIT -D_XL_NO_COLOR \ -create-app -o$(BUILD_PATH)/X$(GAME_NAME)_$@.bin \ $(FULL_FILES) rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.bin actrixss: $(Z88DK_PATH)$(MYZ88DK) +cpm $(SCCZ80_OPTS) -subtype=actrixss \ $(INCLUDE_OPTS) --generic-console -pragma-define:CONSOLE_COLUMNS=80 -pragma-define:CONSOLE_ROWS=24 -lndos \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_ACTRIX_SLOWDOWN) \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS -D__NO_SCREEN_COLOR_INIT -D_XL_NO_COLOR \ -create-app -o$(BUILD_PATH)/X$(GAME_NAME)_$@.bin \ $(FULL_FILES) rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.bin actrix: $(Z88DK_PATH)$(MYZ88DK) +cpm $(SCCZ80_OPTS) -subtype=actrix \ $(INCLUDE_OPTS) --generic-console -pragma-define:CONSOLE_COLUMNS=80 -pragma-define:CONSOLE_ROWS=24 -lndos \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_ACTRIX_SLOWDOWN) \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS -D__NO_SCREEN_COLOR_INIT -D_XL_NO_COLOR \ -create-app -o$(BUILD_PATH)/X$(GAME_NAME)_$@.bin \ $(FULL_FILES) rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.bin # --generic-console -pragma-define:CONSOLE_COLUMNS=80 -pragma-define:CONSOLE_ROWS=24 apple2_z80: $(Z88DK_PATH)$(MYZ88DK) +cpm $(SCCZ80_OPTS) -subtype=apple2 \ $(INCLUDE_OPTS) -lndos \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_APPLE2_Z80_SLOWDOWN) -D__APPLE2_Z80__ \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS -D__NO_SCREEN_COLOR_INIT -D_XL_NO_COLOR \ -D_XL_NO_UDG -D_XL_NO_JOYSTICK -DXSize=79 -DYSize=24 \ -create-app -o$(BUILD_PATH)/X$(GAME_NAME)_$@.bin \ $(FULL_FILES) rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.bin alphatp2: $(Z88DK_PATH)$(MYZ88DK) +cpm $(SCCZ80_OPTS) -subtype=alphatp2 \ $(INCLUDE_OPTS) --generic-console -pragma-define:CONSOLE_COLUMNS=80 -pragma-define:CONSOLE_ROWS=24 -lndos \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_ALPHATP2_SLOWDOWN) \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS -D__NO_SCREEN_COLOR_INIT -D_XL_NO_COLOR \ -create-app -o$(BUILD_PATH)/X$(GAME_NAME)_$@.bin \ $(FULL_FILES) rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.bin altos5: $(Z88DK_PATH)$(MYZ88DK) +cpm $(SCCZ80_OPTS) -subtype=altos5 \ $(INCLUDE_OPTS) --generic-console -pragma-define:CONSOLE_COLUMNS=80 -pragma-define:CONSOLE_ROWS=24 -lndos \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_ALTOS5_SLOWDOWN) \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS -D__NO_SCREEN_COLOR_INIT -D_XL_NO_COLOR \ -create-app -o$(BUILD_PATH)/X$(GAME_NAME)_$@.bin \ $(FULL_FILES) rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.bin altos580: $(Z88DK_PATH)$(MYZ88DK) +cpm $(SCCZ80_OPTS) -subtype=altos580 \ $(INCLUDE_OPTS) --generic-console -pragma-define:CONSOLE_COLUMNS=80 -pragma-define:CONSOLE_ROWS=24 -lndos \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_ALTOS580_SLOWDOWN) \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS -D__NO_SCREEN_COLOR_INIT -D_XL_NO_COLOR \ -create-app -o$(BUILD_PATH)/X$(GAME_NAME)_$@.bin \ $(FULL_FILES) rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.bin ampro: $(Z88DK_PATH)$(MYZ88DK) +cpm $(SCCZ80_OPTS) -subtype=ampro \ $(INCLUDE_OPTS) --generic-console -pragma-define:CONSOLE_COLUMNS=80 -pragma-define:CONSOLE_ROWS=24 -lndos \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_AMPRO_SLOWDOWN) \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS -D__NO_SCREEN_COLOR_INIT -D_XL_NO_COLOR \ -create-app -o$(BUILD_PATH)/X$(GAME_NAME)_$@.bin \ $(FULL_FILES) rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.bin amust: $(Z88DK_PATH)$(MYZ88DK) +cpm $(SCCZ80_OPTS) -subtype=amust \ $(INCLUDE_OPTS) --generic-console -pragma-define:CONSOLE_COLUMNS=80 -pragma-define:CONSOLE_ROWS=24 -lndos \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_AMUST_SLOWDOWN) \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS -D__NO_SCREEN_COLOR_INIT -D_XL_NO_COLOR \ -create-app -o$(BUILD_PATH)/X$(GAME_NAME)_$@.bin \ $(FULL_FILES) rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.bin amustold: $(Z88DK_PATH)$(MYZ88DK) +cpm $(SCCZ80_OPTS) -subtype=amustold \ $(INCLUDE_OPTS) --generic-console -pragma-define:CONSOLE_COLUMNS=80 -pragma-define:CONSOLE_ROWS=24 -lndos \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_AMUSTOLD_SLOWDOWN) \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS -D__NO_SCREEN_COLOR_INIT -D_XL_NO_COLOR \ -create-app -o$(BUILD_PATH)/X$(GAME_NAME)_$@.bin \ $(FULL_FILES) rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.bin archive: $(Z88DK_PATH)$(MYZ88DK) +cpm $(SCCZ80_OPTS) -subtype=archive \ $(INCLUDE_OPTS) --generic-console -pragma-define:CONSOLE_COLUMNS=80 -pragma-define:CONSOLE_ROWS=24 -lndos \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_ARCHIVE_SLOWDOWN) \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS -D__NO_SCREEN_COLOR_INIT -D_XL_NO_COLOR \ -create-app -o$(BUILD_PATH)/X$(GAME_NAME)_$@.bin \ $(FULL_FILES) rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.bin beehive: $(Z88DK_PATH)$(MYZ88DK) +cpm $(SCCZ80_OPTS) -subtype=beehive \ $(INCLUDE_OPTS) --generic-console -pragma-define:CONSOLE_COLUMNS=80 -pragma-define:CONSOLE_ROWS=24 -lndos \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_BEEHIVE_SLOWDOWN) \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS -D__NO_SCREEN_COLOR_INIT -D_XL_NO_COLOR \ -create-app -o$(BUILD_PATH)/X$(GAME_NAME)_$@.bin \ $(FULL_FILES) rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.bin eagle2: $(Z88DK_PATH)$(MYZ88DK) +cpm $(SCCZ80_OPTS) -subtype=eagle2 \ $(INCLUDE_OPTS) --generic-console -pragma-define:CONSOLE_COLUMNS=80 -pragma-define:CONSOLE_ROWS=24 -lndos \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_EAGLE2_SLOWDOWN) \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS -D__NO_SCREEN_COLOR_INIT -D_XL_NO_COLOR \ -create-app -o$(BUILD_PATH)/X$(GAME_NAME)_$@.bin \ $(FULL_FILES) rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.bin gnat10: $(Z88DK_PATH)$(MYZ88DK) +cpm $(SCCZ80_OPTS) -subtype=gnat10 \ $(INCLUDE_OPTS) --generic-console -pragma-define:CONSOLE_COLUMNS=80 -pragma-define:CONSOLE_ROWS=24 -lndos \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_GNAT10_SLOWDOWN) \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS -D__NO_SCREEN_COLOR_INIT -D_XL_NO_COLOR \ -create-app -o$(BUILD_PATH)/X$(GAME_NAME)_$@.bin \ $(FULL_FILES) rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.bin hp125: $(Z88DK_PATH)$(MYZ88DK) +cpm $(SCCZ80_OPTS) -subtype=hp125 \ $(INCLUDE_OPTS) --generic-console -pragma-define:CONSOLE_COLUMNS=80 -pragma-define:CONSOLE_ROWS=24 -lndos \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_HP125_SLOWDOWN) \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS -D__NO_SCREEN_COLOR_INIT -D_XL_NO_COLOR \ -create-app -o$(BUILD_PATH)/X$(GAME_NAME)_$@.bin \ $(FULL_FILES) rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.bin micromate: $(Z88DK_PATH)$(MYZ88DK) +cpm $(SCCZ80_OPTS) -subtype=micromate \ $(INCLUDE_OPTS) --generic-console -pragma-define:CONSOLE_COLUMNS=80 -pragma-define:CONSOLE_ROWS=24 -lndos \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_MICROMATE_SLOWDOWN) \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS -D__NO_SCREEN_COLOR_INIT -D_XL_NO_COLOR \ -create-app -o$(BUILD_PATH)/X$(GAME_NAME)_$@.bin \ $(FULL_FILES) rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.bin mbc2000: $(Z88DK_PATH)$(MYZ88DK) +cpm $(SCCZ80_OPTS) -subtype=mbc2000 \ $(INCLUDE_OPTS) --generic-console -pragma-define:CONSOLE_COLUMNS=80 -pragma-define:CONSOLE_ROWS=24 -lndos \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_MBC2000_SLOWDOWN) \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS -D__NO_SCREEN_COLOR_INIT -D_XL_NO_COLOR \ -create-app -o$(BUILD_PATH)/X$(GAME_NAME)_$@.bin \ $(FULL_FILES) rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.bin mz3500: $(Z88DK_PATH)$(MYZ88DK) +cpm $(SCCZ80_OPTS) -subtype=mz3500 \ $(INCLUDE_OPTS) --generic-console -pragma-define:CONSOLE_COLUMNS=80 -pragma-define:CONSOLE_ROWS=24 -lndos \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_MZ3500_SLOWDOWN) \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS -D__NO_SCREEN_COLOR_INIT -D_XL_NO_COLOR \ -create-app -o$(BUILD_PATH)/X$(GAME_NAME)_$@.bin \ $(FULL_FILES) rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.bin scorpion: $(Z88DK_PATH)$(MYZ88DK) +cpm $(SCCZ80_OPTS) -subtype=scorpion \ $(INCLUDE_OPTS) --generic-console -pragma-define:CONSOLE_COLUMNS=80 -pragma-define:CONSOLE_ROWS=24 -lndos \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_SCORPION_SLOWDOWN) \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS -D__NO_SCREEN_COLOR_INIT -D_XL_NO_COLOR \ -create-app -o$(BUILD_PATH)/X$(GAME_NAME)_$@.bin \ $(FULL_FILES) rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.bin atmturbo: $(Z88DK_PATH)$(MYZ88DK) +cpm $(SCCZ80_OPTS) -subtype=atmturbo \ $(INCLUDE_OPTS) --generic-console -pragma-define:CONSOLE_COLUMNS=80 -pragma-define:CONSOLE_ROWS=24 -lndos \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_ATMTURBO_SLOWDOWN) \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS -D__NO_SCREEN_COLOR_INIT -D_XL_NO_COLOR \ -create-app -o$(BUILD_PATH)/X$(GAME_NAME)_$@.bin \ $(FULL_FILES) rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.bin diskface: $(Z88DK_PATH)$(MYZ88DK) +cpm $(SCCZ80_OPTS) -subtype=diskface \ $(INCLUDE_OPTS) --generic-console -pragma-define:CONSOLE_COLUMNS=80 -pragma-define:CONSOLE_ROWS=24 -lndos \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_DISKFACE_SLOWDOWN) \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS -D__NO_SCREEN_COLOR_INIT -D_XL_NO_COLOR \ -create-app -o$(BUILD_PATH)/X$(GAME_NAME)_$@.bin \ $(FULL_FILES) rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.bin hc91: $(Z88DK_PATH)$(MYZ88DK) +cpm $(SCCZ80_OPTS) -subtype=hc91 \ $(INCLUDE_OPTS) --generic-console -pragma-define:CONSOLE_COLUMNS=80 -pragma-define:CONSOLE_ROWS=24 -lndos \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_HC91_SLOWDOWN) \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS -D__NO_SCREEN_COLOR_INIT -D_XL_NO_COLOR \ -create-app -o$(BUILD_PATH)/X$(GAME_NAME)_$@.bin \ $(FULL_FILES) rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.bin hc2000: $(Z88DK_PATH)$(MYZ88DK) +cpm $(SCCZ80_OPTS) -subtype=hc2000 \ $(INCLUDE_OPTS) --generic-console -pragma-define:CONSOLE_COLUMNS=80 -pragma-define:CONSOLE_ROWS=24 -lndos \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_HC2000_SLOWDOWN) \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS -D__NO_SCREEN_COLOR_INIT -D_XL_NO_COLOR \ -create-app -o$(BUILD_PATH)/X$(GAME_NAME)_$@.bin \ $(FULL_FILES) rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.bin lec80t: $(Z88DK_PATH)$(MYZ88DK) +cpm $(SCCZ80_OPTS) -subtype=lec80t \ $(INCLUDE_OPTS) --generic-console -pragma-define:CONSOLE_COLUMNS=80 -pragma-define:CONSOLE_ROWS=24 -lndos \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_LEC80T_SLOWDOWN) \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS -D__NO_SCREEN_COLOR_INIT -D_XL_NO_COLOR \ -create-app -o$(BUILD_PATH)/X$(GAME_NAME)_$@.bin \ $(FULL_FILES) rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.bin quorum: $(Z88DK_PATH)$(MYZ88DK) +cpm $(SCCZ80_OPTS) -subtype=quorum \ $(INCLUDE_OPTS) --generic-console -pragma-define:CONSOLE_COLUMNS=80 -pragma-define:CONSOLE_ROWS=24 -lndos \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_QUORUM_SLOWDOWN) \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS -D__NO_SCREEN_COLOR_INIT -D_XL_NO_COLOR \ -create-app -o$(BUILD_PATH)/X$(GAME_NAME)_$@.bin \ $(FULL_FILES) rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.bin rainbow: $(Z88DK_PATH)$(MYZ88DK) +cpm $(SCCZ80_OPTS) -subtype=rainbow \ $(INCLUDE_OPTS) --generic-console -pragma-define:CONSOLE_COLUMNS=80 -pragma-define:CONSOLE_ROWS=24 -lndos \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_RAINBOW_SLOWDOWN) \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS -D__NO_SCREEN_COLOR_INIT -D_XL_NO_COLOR \ -create-app -o$(BUILD_PATH)/X$(GAME_NAME)_$@.bin \ $(FULL_FILES) rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.bin sagafox: $(Z88DK_PATH)$(MYZ88DK) +cpm $(SCCZ80_OPTS) -subtype=sagafox \ $(INCLUDE_OPTS) --generic-console -pragma-define:CONSOLE_COLUMNS=80 -pragma-define:CONSOLE_ROWS=24 -lndos \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_SAGAFOX_SLOWDOWN) \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS -D__NO_SCREEN_COLOR_INIT -D_XL_NO_COLOR \ -create-app -o$(BUILD_PATH)/X$(GAME_NAME)_$@.bin \ $(FULL_FILES) rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.bin seequa: $(Z88DK_PATH)$(MYZ88DK) +cpm $(SCCZ80_OPTS) -subtype=seequa \ $(INCLUDE_OPTS) --generic-console -pragma-define:CONSOLE_COLUMNS=80 -pragma-define:CONSOLE_ROWS=24 -lndos \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_SEEQUA_SLOWDOWN) \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS -D__NO_SCREEN_COLOR_INIT -D_XL_NO_COLOR \ -create-app -o$(BUILD_PATH)/X$(GAME_NAME)_$@.bin \ $(FULL_FILES) rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.bin televideo: $(Z88DK_PATH)$(MYZ88DK) +cpm $(SCCZ80_OPTS) -subtype=televideo \ $(INCLUDE_OPTS) --generic-console -pragma-define:CONSOLE_COLUMNS=80 -pragma-define:CONSOLE_ROWS=24 -lndos \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_TELEVIDEO_SLOWDOWN) \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS -D__NO_SCREEN_COLOR_INIT -D_XL_NO_COLOR \ -create-app -o$(BUILD_PATH)/X$(GAME_NAME)_$@.bin \ $(FULL_FILES) rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.bin vt180: $(Z88DK_PATH)$(MYZ88DK) +cpm $(SCCZ80_OPTS) -subtype=vt180 \ $(INCLUDE_OPTS) --generic-console -pragma-define:CONSOLE_COLUMNS=80 -pragma-define:CONSOLE_ROWS=24 -lndos \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_VT180_SLOWDOWN) \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS -D__NO_SCREEN_COLOR_INIT -D_XL_NO_COLOR \ -create-app -o$(BUILD_PATH)/X$(GAME_NAME)_$@.bin \ $(FULL_FILES) rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.bin hz89: $(Z88DK_PATH)$(MYZ88DK) +cpm $(SCCZ80_OPTS) -subtype=hz89 \ $(INCLUDE_OPTS) --generic-console -pragma-define:CONSOLE_COLUMNS=80 -pragma-define:CONSOLE_ROWS=24 -lndos \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_HZ89_SLOWDOWN) \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS -D__NO_SCREEN_COLOR_INIT -D_XL_NO_COLOR \ -create-app -o$(BUILD_PATH)/X$(GAME_NAME)_$@.bin \ $(FULL_FILES) rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.bin hz100: $(Z88DK_PATH)$(MYZ88DK) +cpm $(SCCZ80_OPTS) -subtype=hz100 \ $(INCLUDE_OPTS) --generic-console -pragma-define:CONSOLE_COLUMNS=80 -pragma-define:CONSOLE_ROWS=24 -lndos \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_HZ100_SLOWDOWN) \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS -D__NO_SCREEN_COLOR_INIT -D_XL_NO_COLOR \ -create-app -o$(BUILD_PATH)/X$(GAME_NAME)_$@.bin \ $(FULL_FILES) rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.bin magnolia: $(Z88DK_PATH)$(MYZ88DK) +cpm $(SCCZ80_OPTS) -subtype=magnolia \ $(INCLUDE_OPTS) --generic-console -pragma-define:CONSOLE_COLUMNS=80 -pragma-define:CONSOLE_ROWS=24 -lndos \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_MAGNOLIA_SLOWDOWN) \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS -D__NO_SCREEN_COLOR_INIT -D_XL_NO_COLOR \ -create-app -o$(BUILD_PATH)/X$(GAME_NAME)_$@.bin \ $(FULL_FILES) rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.bin z80pack: $(Z88DK_PATH)$(MYZ88DK) +cpm $(SCCZ80_OPTS) -subtype=z80pack \ $(INCLUDE_OPTS) --generic-console -pragma-define:CONSOLE_COLUMNS=80 -pragma-define:CONSOLE_ROWS=24 -lndos \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_Z80PACK_SLOWDOWN) \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS -D__NO_SCREEN_COLOR_INIT -D_XL_NO_COLOR \ -create-app -o$(BUILD_PATH)/X$(GAME_NAME)_$@.bin \ $(FULL_FILES) rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.bin ================================================ FILE: src/makefiles.common/targets/z88dk/Makefile_multi8 ================================================ ############################# # MULTI8 # TODO: Fix sound multi8: $(ASSETS_PATH)/z88dk_xchase.asm $(Z88DK_PATH)$(MYZ88DK) +multi8 $(SCCZ80_OPTS) \ $(INCLUDE_OPTS) -D_XL_NO_JOYSTICK \ -D__MULTI8__ \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_MULTI8_SLOWDOWN) \ -D__CONIO_GRAPHICS \ -lndos \ -clib=default -pragma-redirect:fputc_cons=fputc_cons_generic \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/udg/udg_init_graphics.c \ $(ASSETS_PATH)/z88dk_xchase.asm \ $(FULL_FILES) \ $(CROSS_LIB_PATH)/sound/z88dk/psg/ay-3-8910_psg_sounds.c \ -create-app -o $@ rm $@ mv $@.cas $(BUILD_PATH)/X$(GAME_NAME)_$@.cas multi8_64k: $(ASSETS_PATH)/z88dk_xchase.asm $(Z88DK_PATH)$(MYZ88DK) +multi8 $(SCCZ80_OPTS) -subtype=64k \ $(INCLUDE_OPTS) -D_XL_NO_JOYSTICK \ -D__MULTI8__ \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_MULTI8_SLOWDOWN) \ -D__CONIO_GRAPHICS \ -lndos \ -clib=default -pragma-redirect:fputc_cons=fputc_cons_generic \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/udg/udg_init_graphics.c \ $(ASSETS_PATH)/z88dk_xchase.asm \ $(FULL_FILES) \ $(CROSS_LIB_PATH)/sound/z88dk/psg/ay-3-8910_psg_sounds.c \ -create-app -o $@ rm $@ mv $@.cas $(BUILD_PATH)/X$(GAME_NAME)_$@.cas ================================================ FILE: src/makefiles.common/targets/z88dk/Makefile_myvision ================================================ ############################# # MYVISION # myvision: $(ASSETS_PATH)/z88dk_xchase.asm $(Z88DK_PATH)$(MYZ88DK) +myvision $(SCCZ80_OPTS) $(INCLUDE_OPTS) \ -D__MYVISION__ \ -DXSize=32 \ -DYSize=22 \ -D__NO_SCREEN_COLOR_INIT \ -DZ88DK_JOYSTICK \ -D__VT52 \ -D__CONIO_GRAPHICS \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_MYVISION_SLOWDOWN) \ -lndos \ $(FULL_FILES) $(ASSETS_PATH)/z88dk_xchase.asm \ $(CROSS_LIB_PATH)/sound/z88dk/psg/ay-3-8910_psg_sounds.c \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/udg/udg_init_graphics.c \ -create-app -o$(BUILD_PATH)/X$(GAME_NAME)_$@.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@_BSS.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@_DATA.bin ================================================ FILE: src/makefiles.common/targets/z88dk/Makefile_mz2500 ================================================ ############################# # MZ2500 mz2500: $(Z88DK_PATH)$(MYZ88DK) +mz2500 $(SCCZ80_OPTS) $(INCLUDE_OPTS) -vn -lndos \ -clib=default -pragma-redirect:fputc_cons=fputc_cons_generic \ -D__MZ2500__ -DXSize=40 -DFORXE_YSIZE=24 \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_MZ2500_SLOWDOWN) \ -D__CONIO_GRAPHICS -D_XL_NO_COLOR -D_XL_NO_JOYSTICK -D__NO_INIT_GRAPHICS -D__INCLUDE_CONIO_H \ -create-app -o $(BUILD_PATH)/X$(GAME_NAME)_$@.prg \ $(FULL_FILES) rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.prg ================================================ FILE: src/makefiles.common/targets/z88dk/Makefile_nabu ================================================ nabu: $(ASSETS_PATH)/z88dk_xchase.asm $(Z88DK_PATH)$(MYZ88DK) +cpm -subtype=nabu $(SCCZ80_ROM_OPTS) \ $(INCLUDE_OPTS) \ -D__NABU__ -DXSize=32 -DYSize=24 \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_NABU_SLOWDOWN) \ -D_XL_NO_JOYSTICK \ -D__CONIO_GRAPHICS \ -lndos -lnabu_int \ --generic-console \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/udg/udg_init_graphics.c \ $(ASSETS_PATH)/z88dk_xchase.asm \ $(FULL_FILES) \ -create-app -o$(BUILD_PATH)/X$(GAME_NAME)_$@ rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@ nabu_no_gfx: $(Z88DK_PATH)$(MYZ88DK) +nabu $(SCCZ80_OPTS) $(INCLUDE_OPTS) \ -D__NABU__ \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_M100_SLOWDOWN) \ -DXSize=32 \ -DYSize=24 \ -D__NO_SCREEN_COLOR_INIT \ -D_XL_NO_COLOR \ -D_XL_NO_JOYSTICK -D_XL_NO_UDG \ -D__VT52 \ -D__CONIO_GRAPHICS \ -lndos \ -D__NO_INIT_GRAPHICS \ $(FULL_FILES) \ -create-app -o$(BUILD_PATH)/X$(GAME_NAME)_$@ rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@ # nabu: $(ASSETS_PATH)/z88dk_xchase.asm # $(Z88DK_PATH)$(MYZ88DK) +nabu $(SCCZ80_OPTS) -Cz--audio $(INCLUDE_OPTS) -vn \ # -D__NABU__ \ # -lndos -DXSize=32 -DYSize=24 -D_XL_NO_JOYSTICK \ # -clib=default -pragma-redirect:fputc_cons=fputc_cons_generic \ # -D__CONIO_GRAPHICS -D_XL_NO_SOUND -D__DEFAULT_CLEAR_SCREEN \ # -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_M100_SLOWDOWN) \ # $(FULL_FILES) \ # $(CROSS_LIB_PATH)/display/init_graphics/z88dk/udg/udg_init_graphics.c \ # $(ASSETS_PATH)/z88dk_xchase.asm \ # -create-app -o$(BUILD_PATH)/X$(GAME_NAME)_$@.bin # rm $(BUILD_PATH)/X$(GAME_NAME)_$@.bin ================================================ FILE: src/makefiles.common/targets/z88dk/Makefile_nascom ================================================ ############################# # NASCOM nascom_16k: $(Z88DK_PATH)$(MYZ88DK) +nascom $(SCCZ80_OPTS) $(INCLUDE_OPTS) -clib=ansi -vn -lndos \ -D__NASCOM__ \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_NASCOM_SLOWDOWN) \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS \ -create-app -o $(BUILD_PATH)/X$(GAME_NAME)_LIGHT_nascom_16k.prg \ $(LIGHT_FILES) rm -rf $(BUILD_PATH)/X$(GAME_NAME)_LIGHT_nascom_16k.prg nascom: nascom_32k nascom_32k: $(Z88DK_PATH)$(MYZ88DK) +nascom $(SCCZ80_OPTS) $(INCLUDE_OPTS) -clib=ansi -vn -lndos \ -D__NASCOM__ \ \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_NASCOM_SLOWDOWN) \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS \ -lndos -create-app -o $(BUILD_PATH)/X$(GAME_NAME)_$@.prg \ $(FULL_FILES) rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.prg ================================================ FILE: src/makefiles.common/targets/z88dk/Makefile_nc100 ================================================ ############################# # NC100 nc100_sprites: $(ASSETS_PATH)/z88dk_sprites_definitions.h $(Z88DK_PATH)$(MYZ88DK) +nc $(SCCZ80_ROM_OPTS) -lgfxnc100 \ $(INCLUDE_OPTS) \ -D__NC100__ \ -D__ALT_PRINT \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_NC100_SLOWDOWN) \ -D__Z88DK_SPRITES_GRAPHICS \ -D__NO_SCREEN_COLOR_INIT \ -create-app -o$(BUILD_PATH)/X$(GAME_NAME)_$@.bin \ -D__NO_INIT_GRAPHICS \ -DINITIAL_GHOST_FREEZE \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c \ $(FULL_FILES) rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.bin nc100: $(ASSETS_PATH)/z88dk_xchase.asm $(Z88DK_PATH)$(MYZ88DK) +nc $(SCCZ80_ROM_OPTS) -lgfxnc100 \ $(INCLUDE_OPTS) \ -D__NC100__ -DXSize=60 -DYSize=8 \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_NC100_SLOWDOWN) \ -D_XL_NO_JOYSTICK \ -D__CONIO_GRAPHICS \ -lndos \ --generic-console \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/udg/udg_init_graphics.c \ $(ASSETS_PATH)/z88dk_xchase.asm \ $(FULL_FILES) \ -create-app -o$(BUILD_PATH)/X$(GAME_NAME)_$@.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@_HIMEM.bin ================================================ FILE: src/makefiles.common/targets/z88dk/Makefile_nc200 ================================================ ############################# # NC200 nc200_sprites: $(ASSETS_PATH)/z88dk_sprites_definitions.h $(Z88DK_PATH)$(MYZ88DK) +nc $(SCCZ80_ROM_OPTS) -lgfxnc200 \ $(INCLUDE_OPTS) \ -D__NC200__ \ -D__ALT_PRINT \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_NC200_SLOWDOWN) \ -D__Z88DK_SPRITES_GRAPHICS \ -D_XL_NO_JOYSTICK -D__NO_SCREEN_COLOR_INIT \ -create-app -o$(BUILD_PATH)/X$(GAME_NAME)_$@.bin \ -D__NO_INIT_GRAPHICS \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c \ $(FULL_FILES) rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.bin nc200: $(ASSETS_PATH)/z88dk_xchase.asm $(Z88DK_PATH)$(MYZ88DK) +nc $(SCCZ80_ROM_OPTS) -lgfxnc200 \ $(INCLUDE_OPTS) \ -D__NC200__ -DXSize=60 -DYSize=16 \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_NC100_SLOWDOWN) \ -D_XL_NO_JOYSTICK \ -D__CONIO_GRAPHICS \ -lndos \ --generic-console \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/udg/udg_init_graphics.c \ $(ASSETS_PATH)/z88dk_xchase.asm \ $(FULL_FILES) \ -create-app -o$(BUILD_PATH)/X$(GAME_NAME)_$@.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@_HIMEM.bin ================================================ FILE: src/makefiles.common/targets/z88dk/Makefile_newbrain ================================================ ############################# # NEWBRAIN newbrain: $(Z88DK_PATH)$(MYZ88DK) +newbrain $(SCCZ80_OPTS) $(INCLUDE_OPTS) \ -D__NEWBRAIN__ \ -DXSize=20 \ -DYSize=11 \ -DGHOSTS_NUMBER=8 \ -DBOMBS_NUMBER=4 \ -vn \ -D_XL_NO_COLOR \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_NEWBRAIN_SLOWDOWN) \ -DNO_BLINKING \ -DNO_CONTROL_INSTRUCTIONS \ -D_XL_NO_SLEEP \ -DNO_INITIAL_SCREEN \ -D__NO_SCREEN_COLOR_INIT \ -lndos \ -D__BUFFERED_GRAPHICS -D__NO_INIT_GRAPHICS \ \ -DNO_STATS \ -D__ALT_PRINT \ -D__DEFAULT_CLEAR_SCREEN \ -D__STDIO \ -D__NO_WAIT \ -DTURN_BASED \ -pragma-include:$(CFG_PATH)/z88dk/zpragma_clib.inc \ $(FULL_FILES) \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c \ -create-app -o$(BUILD_PATH)/X$(GAME_NAME)_$@ rm $(BUILD_PATH)/X$(GAME_NAME)_$@ # tar czvf FULL_newbrain.tar.zip _dir.txt newbrain.bas newbrain.dat # mv FULL_newbrain.tar.zip $(BUILD_PATH)/X$(GAME_NAME)_newbrain.tar.zip rm -rf _dir.txt # rm newbrain.bas # rm newbrain.dat # rm newbrain ================================================ FILE: src/makefiles.common/targets/z88dk/Makefile_ondra ================================================ ############################# # ONDRA ondra: $(ASSETS_PATH)/z88dk_xchase.asm $(Z88DK_PATH)$(MYZ88DK) +ondra $(SCCZ80_OPTS) $(INCLUDE_OPTS) \ -D__ONDRA__ -DXSize=40 -DYSize=30 \ -D__NO_SCREEN_COLOR_INIT \ -DZ88DK_JOYSTICK \ --generic-console -D_XL_NO_JOYSTICK \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_ONDRA_SLOWDOWN) \ -D__CONIO_GRAPHICS \ -lndos \ $(FULL_FILES) $(ASSETS_PATH)/z88dk_xchase.asm \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/udg/udg_init_graphics.c \ -create-app \ -o FULL_$@ rm FULL_$@ mv FULL_$@.tap $(BUILD_PATH)/X$(GAME_NAME)_$@.tap mv FULL_$@.wav $(BUILD_PATH)/X$(GAME_NAME)_$@.wav ondra_no_gfx: $(Z88DK_PATH)$(MYZ88DK) +ondra $(SCCZ80_OPTS) $(INCLUDE_OPTS) -vn -lndos \ -clib=default -pragma-redirect:fputc_cons=fputc_cons_generic \ -D__ONDRA__ -DXSize=40 -DYSize=30 \ -D__CONIO_GRAPHICS -D_XL_NO_COLOR -D__NO_INIT_GRAPHICS \ $(FULL_FILES) \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_ONDRA_SLOWDOWN) \ --generic-console -D_XL_NO_JOYSTICK \ -create-app \ -o FULL_$@ rm FULL_$@ mv FULL_$@.tap $(BUILD_PATH)/X$(GAME_NAME)_$@.tap mv FULL_$@.wav $(BUILD_PATH)/X$(GAME_NAME)_$@.wav ================================================ FILE: src/makefiles.common/targets/z88dk/Makefile_osborne1 ================================================ ############################# # OSBORNE1 osborne1_chars: $(Z88DK_PATH)$(MYZ88DK) +cpm $(SCCZ80_OPTS) -lgfxosborne1 -subtype=osborne1 \ $(INCLUDE_OPTS) \ -D__OSBORNE1__ \ -D_XL_NO_COLOR \ -D__INCLUDE_CONIO_H \ -D__ADM3A_WITH_UNDEF \ -D__CPM_80X24__ \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS \ -create-app -o$(BUILD_PATH)/X$(GAME_NAME)_$@.bin \ $(FULL_FILES) rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.bin osborne1: $(ASSETS_PATH)/z88dk_sprites_definitions.h $(Z88DK_PATH)$(MYZ88DK) +cpm $(SCCZ80_OPTS) -lgfxosborne1 -subtype=osborne1 \ $(INCLUDE_OPTS) \ -D__OSBORNE1__ \ -D_XL_NO_COLOR \ -D__INCLUDE_CONIO_H \ -D__Z88DK_SPRITES_GRAPHICS -D__NO_INIT_GRAPHICS \ -D__ALT_PRINT \ -create-app -o$(BUILD_PATH)/X$(GAME_NAME)_$@.bin \ $(FULL_FILES) \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.bin ================================================ FILE: src/makefiles.common/targets/z88dk/Makefile_osca ================================================ ############################# # OSCA osca: $(Z88DK_PATH)$(MYZ88DK) +osca $(SCCZ80_OPTS) $(INCLUDE_OPTS) \ -clib=ansi -D__OSCA__ -vn \ \ -lndos \ \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS \ -create-app -o osca \ $(FULL_FILES) rm osca mv OSCA.EXE $(BUILD_PATH)/X$(GAME_NAME)_OSCA.EXE ================================================ FILE: src/makefiles.common/targets/z88dk/Makefile_oz ================================================ ############################# # OZ oz: oz_buffered oz_buffered: $(TOOLS_PATH)/z88dk/oz/makewzd$(COMPILEDEXT) $(Z88DK_PATH)$(MYZ88DK) +oz $(ZSDCC_ROM_OPTS) \ $(INCLUDE_OPTS) \ -compiler=sdcc \ -o$@.bin \ -D__OZ__ \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_OZ_SLOWDOWN) \ -DXSize=59 \ -DYSize=9 \ -vn -lndos \ -D__BUFFERED_GRAPHICS -DTURN_BASED -D__NO_INIT_GRAPHICS \ -D_XL_NO_COLOR \ -D__NO_SCREEN_COLOR_INIT \ -D__ALT_PRINT \ -D__DEFAULT_CLEAR_SCREEN \ $(FULL_FILES) \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c $(TOOLS_PATH)/z88dk/oz/makewzd$(COMPILEDEXT) $(SOURCE_PATH)/../../$@ rm -rf $(SOURCE_PATH)/../../$@.bin mv $@.wzd $(BUILD_PATH)/X$(GAME_NAME)_$@.wzd ================================================ FILE: src/makefiles.common/targets/z88dk/Makefile_p2000 ================================================ ############################# # P2000 p2000_16k: $(Z88DK_PATH)$(MYZ88DK) +p2000 $(SCCZ80_OPTS) $(INCLUDE_OPTS) -clib=ansi -D__P2000__ -vn \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_P2000_SLOWDOWN) \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS \ -lndos -create-app -o $(BUILD_PATH)/X$(GAME_NAME)_LIGHT_p2000.prg \ $(LIGHT_FILES) rm -rf $(BUILD_PATH)/X$(GAME_NAME)_LIGHT_p2000.prg p2000: p2000_32k p2000_32k: $(Z88DK_PATH)$(MYZ88DK) +p2000 $(SCCZ80_OPTS) $(INCLUDE_OPTS) -clib=ansi -D__P2000__ -vn \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_P2000_SLOWDOWN) \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS -D__BIT_BANG_SOUND \ -lndos -create-app -o $(BUILD_PATH)/X$(GAME_NAME)_$@.prg \ $(FULL_FILES) rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.prg ================================================ FILE: src/makefiles.common/targets/z88dk/Makefile_pasopia7 ================================================ ############################# # PASAPIA7 pasopia7: $(Z88DK_PATH)$(MYZ88DK) +pasopia7 $(SCCZ80_OPTS) $(INCLUDE_OPTS) \ -D__PASOPIA__ \ -D__NO_SCREEN_COLOR_INIT \ -DXSize=40 -DYSize=23 \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_PASOPIA7_SLOWDOWN) \ -D__VT52 \ -D__CONIO_GRAPHICS \ -lndos \ -D__NO_INIT_GRAPHICS \ $(FULL_FILES) \ -create-app -o$(BUILD_PATH)/X$(GAME_NAME)_$@.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@_BOOTSTRAP.bin ================================================ FILE: src/makefiles.common/targets/z88dk/Makefile_pc6001 ================================================ ############################# # PC6001 pc6001_16k: $(Z88DK_PATH)$(MYZ88DK) +pc6001 $(SCCZ80_OPTS) $(INCLUDE_OPTS) -Cz--audio -clib=ansi \ -D__PC6001__ \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_PC6001_SLOWDOWN) \ -D__ALT_SLEEP \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS \ -lndos -create-app -o $(BUILD_PATH)/X$(GAME_NAME)_LIGHT_pc6001.prg \ $(CROSS_LIB_PATH)/sleep/sleep_macros.c \ $(LIGHT_FILES) rm -rf $(BUILD_PATH)/X$(GAME_NAME)_LIGHT_pc6001.prg rm -rf $(BUILD_PATH)/X$(GAME_NAME)_LIGHT_pc6001.wav mv $(BUILD_PATH)/X$(GAME_NAME)_LIGHT_pc6001.cas $(BUILD_PATH)/X$(GAME_NAME)_LIGHT_pc6001.cp6 pc6001: pc6001_32k pc6001_32k: $(ASSETS_PATH)/z88dk_xchase.asm $(Z88DK_PATH)$(MYZ88DK) +pc6001 $(SCCZ80_OPTS) $(INCLUDE_OPTS) -Cz--audio -clib=ansi -subtype=32k \ -D__PC6001__ \ -D__CONIO_GRAPHICS -D__PSG_SOUND \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_PC6001_SLOWDOWN) \ -D__SCREEN_MODE=2 -D_XL_NO_JOYSTICK \ -clib=default -pragma-redirect:fputc_cons=fputc_cons_generic \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/udg/udg_init_graphics.c \ $(ASSETS_PATH)/z88dk_xchase.asm \ -lndos -create-app -o $(BUILD_PATH)/X$(GAME_NAME)_$@.prg \ $(FULL_FILES) \ $(CROSS_LIB_PATH)/sound/z88dk/psg/ay-3-8910_psg_sounds.c rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.prg rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.wav mv $(BUILD_PATH)/X$(GAME_NAME)_$@.cas $(BUILD_PATH)/X$(GAME_NAME)_$@.cp6 ================================================ FILE: src/makefiles.common/targets/z88dk/Makefile_pcw40 ================================================ ############################# # PCW pcw40: $(Z88DK_PATH)$(MYZ88DK) +cpm -subtype=pcw40 $(SCCZ80_OPTS) $(INCLUDE_OPTS) \ -D__PCW40__ \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_PCW40_SLOWDOWN) \ -lndos -DXSize=90 -DYSize=32 \ -clib=default -pragma-redirect:fputc_cons=fputc_cons_generic \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS -D__DEFAULT_CLEAR_SCREEN \ $(FULL_FILES) \ -create-app \ -o FULL_$@ rm FULL_$@ rm -rf FULL_$@_HIMEM.bin mv FULL_$@.dsk $(BUILD_PATH)/X$(GAME_NAME)_$@.dsk mv FULL_$@.com $(BUILD_PATH)/X$(GAME_NAME)_$@.com ================================================ FILE: src/makefiles.common/targets/z88dk/Makefile_pcw80 ================================================ pcw: pcw80 pcw80: $(Z88DK_PATH)$(MYZ88DK) +cpm -subtype=pcw80 $(SCCZ80_OPTS) $(INCLUDE_OPTS) \ -D__PCW80__ \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_PCW80_SLOWDOWN) \ -lndos -DXSize=90 -DYSize=32 \ -clib=default -pragma-redirect:fputc_cons=fputc_cons_generic \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS -D__DEFAULT_CLEAR_SCREEN \ $(FULL_FILES) \ -create-app \ -o FULL_$@ rm FULL_$@ rm -rf FULL_$@_HIMEM.bin mv FULL_$@.dsk $(BUILD_PATH)/X$(GAME_NAME)_$@.dsk mv FULL_$@.com $(BUILD_PATH)/X$(GAME_NAME)_$@.com ================================================ FILE: src/makefiles.common/targets/z88dk/Makefile_pencil2 ================================================ ############################# # PENCIL2 # SOUNDS is broken (sound never stops) pencil2_no_gfx: $(Z88DK_PATH)$(MYZ88DK) +pencil2 $(SCCZ80_OPTS) $(INCLUDE_OPTS) \ -D__PENCIL2__ \ -DXSize=32 \ -DYSize=22 \ -D__NO_SCREEN_COLOR_INIT \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_PENCIL2_SLOWDOWN) \ -D__VT52 -D_XL_NO_JOYSTICK \ -D__CONIO_GRAPHICS \ -lndos \ -D__NO_INIT_GRAPHICS \ $(FULL_FILES) \ -create-app -o$(BUILD_PATH)/X$(GAME_NAME)_$@.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@_BSS.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@_DATA.bin pencil2: $(ASSETS_PATH)/z88dk_xchase.asm $(Z88DK_PATH)$(MYZ88DK) +pencil2 $(SCCZ80_OPTS) $(INCLUDE_OPTS) \ -D__PENCIL2__ \ -DXSize=32 \ -DYSize=24 \ -D__NO_SCREEN_COLOR_INIT \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_PENCIL2_SLOWDOWN) \ -D__VT52 -D_XL_NO_JOYSTICK \ -D__CONIO_GRAPHICS \ -lndos \ $(FULL_FILES) \ $(ASSETS_PATH)/z88dk_xchase.asm \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/udg/udg_init_graphics.c \ -create-app -o$(BUILD_PATH)/X$(GAME_NAME)_$@.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@_BSS.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@_DATA.bin ================================================ FILE: src/makefiles.common/targets/z88dk/Makefile_phc25 ================================================ phc25_mono: $(ASSETS_PATH)/z88dk_xchase.asm $(Z88DK_PATH)$(MYZ88DK) +phc25 $(SCCZ80_OPTS) $(INCLUDE_OPTS) \ -D__PHC25__ -pragma-define:CLIB_DISABLE_MODE2=1 -D__SCREEN_MODE=1 \ -pragma-include:$(CFG_PATH)/z88dk/zpragma_clib.inc \ -DXSize=32 \ -DYSize=24 \ -D_XL_NO_JOYSTICK -D_XL_NO_COLOR -D__NO_SCREEN_COLOR_INIT -D__CONIO_GRAPHICS $(PHC25_MONO_GAME_OPTS) -D__PSG_SOUND \ $(FULL_FILES) \ $(ASSETS_PATH)/z88dk_xchase.asm \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_PHC25_SLOWDOWN) \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/udg/udg_init_graphics.c \ $(CROSS_LIB_PATH)/sound/z88dk/psg/ay-3-8910_psg_sounds.c \ -o$(BUILD_PATH)/X$(GAME_NAME)_$@.phc -create-app phc25: $(ASSETS_PATH)/z88dk_xchase.asm $(Z88DK_PATH)$(MYZ88DK) +phc25 $(SCCZ80_OPTS) $(INCLUDE_OPTS) \ -D__PHC25__ -pragma-define:CLIB_DISABLE_MODE1=1 \ -pragma-include:$(CFG_PATH)/z88dk/zpragma_clib.inc \ -DXSize=16 \ -DYSize=24 \ -D_XL_NO_JOYSTICK -D__NO_SCREEN_COLOR_INIT -D__CONIO_GRAPHICS $(PHC25_GAME_OPTS) -D__PSG_SOUND \ $(FULL_FILES) \ $(ASSETS_PATH)/z88dk_xchase.asm \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_PHC25_SLOWDOWN) \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/udg/udg_init_graphics.c \ $(CROSS_LIB_PATH)/sound/z88dk/psg/ay-3-8910_psg_sounds.c \ -o$(BUILD_PATH)/X$(GAME_NAME)_$@.phc -create-app phc25_no_gfx: $(Z88DK_PATH)$(MYZ88DK) +phc25 $(SCCZ80_OPTS) $(INCLUDE_OPTS) \ -D__PHC25__ -pragma-define:CLIB_DISABLE_MODE1=1 -pragma-define:CLIB_DISABLE_MODE2=1 -D__PSG_SOUND \ -pragma-include:$(CFG_PATH)/z88dk/zpragma_clib.inc \ -DXSize=32 \ -DYSize=16 \ -D__NO_SCREEN_COLOR_INIT -D__CONIO_GRAPHICS -D_XL_NO_COLOR -D_XL_NO_UDG $(PHC25_NO_GFX_GAME_OPTS) \ -D_XL_NO_JOYSTICK -D__NO_INIT_GRAPHICS \ $(FULL_FILES) \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_PHC25_SLOWDOWN) \ $(CROSS_LIB_PATH)/sound/z88dk/psg/ay-3-8910_psg_sounds.c \ -o$(BUILD_PATH)/X$(GAME_NAME)_$@.phc -create-app map1010_mono: $(ASSETS_PATH)/z88dk_xchase.asm $(Z88DK_PATH)$(MYZ88DK) +phc25 -clib=map1010 $(SCCZ80_OPTS) $(INCLUDE_OPTS) \ -D__PHC25__ -pragma-define:CLIB_DISABLE_MODE2=1 -D__SCREEN_MODE=1 \ -pragma-include:$(CFG_PATH)/z88dk/zpragma_clib.inc \ -DXSize=32 \ -DYSize=24 \ -D_XL_NO_JOYSTICK -D_XL_NO_COLOR -D__NO_SCREEN_COLOR_INIT -D__CONIO_GRAPHICS $(PHC25_MONO_GAME_OPTS) -D__PSG_SOUND \ $(FULL_FILES) \ $(ASSETS_PATH)/z88dk_xchase.asm \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_PHC25_SLOWDOWN) \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/udg/udg_init_graphics.c \ $(CROSS_LIB_PATH)/sound/z88dk/psg/ay-3-8910_psg_sounds.c \ -o$(BUILD_PATH)/X$(GAME_NAME)_$@.phc -create-app map1010: $(ASSETS_PATH)/z88dk_xchase.asm $(Z88DK_PATH)$(MYZ88DK) +phc25 -clib=map1010 $(SCCZ80_OPTS) $(INCLUDE_OPTS) \ -D__PHC25__ -pragma-define:CLIB_DISABLE_MODE1=1 \ -pragma-include:$(CFG_PATH)/z88dk/zpragma_clib.inc \ -DXSize=16 \ -DYSize=24 \ -D_XL_NO_JOYSTICK -D__NO_SCREEN_COLOR_INIT -D__CONIO_GRAPHICS $(PHC25_GAME_OPTS) -D__PSG_SOUND \ $(FULL_FILES) \ $(ASSETS_PATH)/z88dk_xchase.asm \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_PHC25_SLOWDOWN) \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/udg/udg_init_graphics.c \ $(CROSS_LIB_PATH)/sound/z88dk/psg/ay-3-8910_psg_sounds.c \ -o$(BUILD_PATH)/X$(GAME_NAME)_$@.phc -create-app map1010_no_gfx: $(Z88DK_PATH)$(MYZ88DK) +phc25 -clib=map1010 $(SCCZ80_OPTS) $(INCLUDE_OPTS) \ -D__PHC25__ -pragma-define:CLIB_DISABLE_MODE1=1 -pragma-define:CLIB_DISABLE_MODE2=1 -D__PSG_SOUND \ -pragma-include:$(CFG_PATH)/z88dk/zpragma_clib.inc \ -DXSize=32 \ -DYSize=16 \ -D__NO_SCREEN_COLOR_INIT -D__CONIO_GRAPHICS -D_XL_NO_COLOR -D_XL_NO_UDG $(PHC25_NO_GFX_GAME_OPTS) \ -D_XL_NO_JOYSTICK -D__NO_INIT_GRAPHICS \ $(FULL_FILES) \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_PHC25_SLOWDOWN) \ $(CROSS_LIB_PATH)/sound/z88dk/psg/ay-3-8910_psg_sounds.c \ -o$(BUILD_PATH)/X$(GAME_NAME)_$@.phc -create-app phc20: phc20_no_gfx phc20_no_gfx: $(Z88DK_PATH)$(MYZ88DK) +phc20 $(SCCZ80_OPTS) $(INCLUDE_OPTS) \ -D__PHC25__ -pragma-define:CLIB_DISABLE_MODE1=1 -pragma-define:CLIB_DISABLE_MODE2=1 -D__PSG_SOUND \ -pragma-include:$(CFG_PATH)/z88dk/zpragma_clib.inc \ -D__NO_INPUT \ -DXSize=32 \ -DYSize=16 \ -D__NO_SCREEN_COLOR_INIT -D__CONIO_GRAPHICS -D_XL_NO_COLOR -D_XL_NO_UDG $(PHC25_NO_GFX_GAME_OPTS) \ -D_XL_NO_JOYSTICK -D__NO_INIT_GRAPHICS \ $(FULL_FILES) \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_PHC25_SLOWDOWN) \ -o$(BUILD_PATH)/X$(GAME_NAME)_$@.phc ================================================ FILE: src/makefiles.common/targets/z88dk/Makefile_pmd85 ================================================ ############################# # PMD85 pmd85_no_gfx: $(Z88DK_PATH)$(MYZ88DK) +pmd85 $(SCCZ80_OPTS) $(INCLUDE_OPTS) \ -D__PMD85__ \ -DXSize=48 \ -DYSize=30 \ -D__NO_SCREEN_COLOR_INIT \ -D_XL_NO_COLOR \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_PMD85_SLOWDOWN) \ -D__CONIO_GRAPHICS \ -lndos -D_XL_NO_JOYSTICK \ -D__NO_INIT_GRAPHICS \ $(FULL_FILES) \ -create-app -o$(BUILD_PATH)/X$(GAME_NAME)_pmd85_no_gfx.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_pmd85_no_gfx.bin pmd85: $(ASSETS_PATH)/z88dk_6x8_pmd85.asm $(Z88DK_PATH)$(MYZ88DK) +pmd85 $(SCCZ80_OPTS) $(INCLUDE_OPTS) \ -D__PMD85__ \ -DXSize=48 \ -DYSize=32 \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_PMD85_SLOWDOWN) \ -D__NO_SCREEN_COLOR_INIT \ -D_XL_NO_JOYSTICK \ -D__CONIO_GRAPHICS \ -lndos \ $(FULL_FILES) \ $(ASSETS_PATH)/z88dk_6x8_pmd85.asm \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/udg/udg_init_graphics.c \ -create-app -o$(BUILD_PATH)/X$(GAME_NAME)_$@.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.bin pmd85_mono: $(ASSETS_PATH)/z88dk_6x8_pmd85.asm $(Z88DK_PATH)$(MYZ88DK) +pmd85 $(SCCZ80_OPTS) $(INCLUDE_OPTS) \ -D__PMD85__ \ -DXSize=48 \ -DYSize=32 \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_PMD85_SLOWDOWN) \ -D__NO_SCREEN_COLOR_INIT \ -D_XL_NO_COLOR \ -D_XL_NO_JOYSTICK \ -D__CONIO_GRAPHICS \ -lndos \ $(FULL_FILES) \ $(ASSETS_PATH)/z88dk_6x8_pmd85.asm \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/udg/udg_init_graphics.c \ -create-app -o$(BUILD_PATH)/X$(GAME_NAME)_$@.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.bin ================================================ FILE: src/makefiles.common/targets/z88dk/Makefile_pps ================================================ ############################# # PPS pps: $(Z88DK_PATH)$(MYZ88DK) +pps $(SCCZ80_OPTS) $(INCLUDE_OPTS) -pragma-redirect:fputc_cons=fputc_cons_generic \ -D__PPS__ -vn \ -o $@ \ -D__VT52 \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_PPS_SLOWDOWN) \ -lndos \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS \ $(FULL_FILES) mv $@ $(BUILD_PATH)/X$(GAME_NAME)_$@.exe ================================================ FILE: src/makefiles.common/targets/z88dk/Makefile_primo ================================================ ############################# # PRIMO # primo: primo_no_gfx primo_no_gfx: $(Z88DK_PATH)$(MYZ88DK) +primo $(SCCZ80_OPTS) $(INCLUDE_OPTS) \ -D__PRIMO__ \ -DXSize=32 \ -DYSize=22 --generic-console \ -D__NO_SCREEN_COLOR_INIT \ -D_XL_NO_COLOR \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_PRIMO_SLOWDOWN) \ -D__VT52 -D_XL_NO_JOYSTICK \ -D__CONIO_GRAPHICS \ -lndos -D__BIT_BANG_SOUND \ -D__NO_INIT_GRAPHICS \ $(FULL_FILES) \ -create-app -o$(BUILD_PATH)/X$(GAME_NAME)_$@.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.bin primo: $(ASSETS_PATH)/z88dk_xchase.asm $(Z88DK_PATH)$(MYZ88DK) +primo $(SCCZ80_OPTS) $(INCLUDE_OPTS) \ -D__PRIMO__ \ -DXSize=32 \ -DYSize=22 --generic-console \ -D__NO_SCREEN_COLOR_INIT \ -D_XL_NO_COLOR \ -D__VT52 -D_XL_NO_JOYSTICK \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_PRIMO_SLOWDOWN) \ -D__CONIO_GRAPHICS \ -D__CONIO_GRAPHICS -D__BIT_BANG_SOUND \ -lndos -D__BIT_BANG_SOUND \ $(FULL_FILES) \ $(ASSETS_PATH)/z88dk_xchase.asm \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/udg/udg_init_graphics.c \ -create-app -o$(BUILD_PATH)/X$(GAME_NAME)_$@.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.bin ================================================ FILE: src/makefiles.common/targets/z88dk/Makefile_pv1000 ================================================ ############################# # PV1000 # UDG can be done but differently # -SO3 necessary to build a 16K rom pv1000_no_gfx: $(Z88DK_PATH)$(MYZ88DK) +pv1000 $(SCCZ80_OPTS) \ $(INCLUDE_OPTS) $(PV1000_GAME_OPTS) \ -D__PV1000__ \ -DZ88DK_JOYSTICK -DYSize=23 \ -D__VT52 -D_XL_NO_COLOR -D_XL_NO_UDG \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_PV1000_SLOWDOWN) \ -D__CONIO_GRAPHICS \ -D__NO_INIT_GRAPHICS \ -lndos \ -clib=default -pragma-redirect:fputc_cons=fputc_cons_generic \ $(FULL_FILES) \ -create-app -o$(BUILD_PATH)/X$(GAME_NAME)_$@.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@_DATA.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@_BSS.bin pv1000: $(ASSETS_PATH)/z88dk_pv1000.asm $(Z88DK_PATH)$(MYZ88DK) +pv1000 $(SCCZ80_OPTS) \ $(INCLUDE_OPTS) $(PV1000_GAME_OPTS) -pragma-define:PV1000_CUSTOM_TILESET=2 -s $(ASSETS_PATH)/z88dk_pv1000.asm -subtype=32k \ -D__PV1000__ \ -DZ88DK_JOYSTICK -DYSize=23 \ -D__VT52 \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_PV1000_SLOWDOWN) \ -D__PV1000_GRAPHICS \ -D__NO_INIT_GRAPHICS \ -lndos \ -clib=default -pragma-redirect:fputc_cons=fputc_cons_generic \ $(FULL_FILES) \ -create-app -o$(BUILD_PATH)/X$(GAME_NAME)_$@.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.sym rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@_DATA.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@_BSS.bin ================================================ FILE: src/makefiles.common/targets/z88dk/Makefile_pv2000 ================================================ ############################# # PV2000 # -SO3 necessary to build a 16k rom image pv2000: $(ASSETS_PATH)/z88dk_xchase.asm $(Z88DK_PATH)$(MYZ88DK) +pv2000 $(SCCZ80_ROM_OPTS) \ $(INCLUDE_OPTS) \ -D__PV2000__ \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_PV2000_SLOWDOWN) \ -D__VT52 \ -D__CONIO_GRAPHICS \ -lndos \ -clib=default -pragma-redirect:fputc_cons=fputc_cons_generic \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/udg/udg_init_graphics.c \ $(ASSETS_PATH)/z88dk_xchase.asm \ $(FULL_FILES) \ -create-app -o$(BUILD_PATH)/X$(GAME_NAME)_$@.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@_DATA.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@_BSS.bin ================================================ FILE: src/makefiles.common/targets/z88dk/Makefile_px4 ================================================ ############################# # PX4 px4: $(ASSETS_PATH)/z88dk_sprites_definitions.h $(Z88DK_PATH)$(MYZ88DK) +cpm $(SCCZ80_ROM_OPTS) -lpx4 \ $(INCLUDE_OPTS) \ -D__PX4__ \ -D__NO_SPRITE_TRANSPARENCY \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_PX4_SLOWDOWN) \ -subtype=px4 -Cz--32k \ -create-app -o $@ -D__SPRITE_X_STEP=8 -D__SPRITE_Y_STEP=8 -DYSize=8 \ -vn -lndos \ -D__ALT_PRINT \ -D__Z88DK_SPRITES_GRAPHICS -D__NO_INIT_GRAPHICS \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c \ $(FULL_FILES) rm $@ mv $@.ROM $(BUILD_PATH)/X$(GAME_NAME)_$@.ROM px4k: $(ASSETS_PATH)/z88dk_sprites_definitions.h $(Z88DK_PATH)$(MYZ88DK) +cpm $(SCCZ80_ROM_OPTS) -lpx4 \ $(INCLUDE_OPTS) \ -D__PX4__ -D_XL_NO_JOYSTICK \ -D__NO_SPRITE_TRANSPARENCY \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_PX4_SLOWDOWN) \ -subtype=px4 -Cz--32k \ -create-app -o $@ -D__SPRITE_X_STEP=8 -D__SPRITE_Y_STEP=8 -DYSize=8 \ -vn -lndos \ -D__ALT_PRINT \ -D__Z88DK_SPRITES_GRAPHICS -D__NO_INIT_GRAPHICS \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c \ $(FULL_FILES) rm $@ mv $@.ROM $(BUILD_PATH)/X$(GAME_NAME)_$@.ROM ================================================ FILE: src/makefiles.common/targets/z88dk/Makefile_px8 ================================================ ############################# # PX8 px8: $(ASSETS_PATH)/z88dk_sprites_definitions.h $(Z88DK_PATH)$(MYZ88DK) +cpm $(SCCZ80_ROM_OPTS) \ $(INCLUDE_OPTS) \ -D__PX8__ \ -D__NO_SPRITE_TRANSPARENCY \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_PX8_SLOWDOWN) \ -subtype=px8 \ -create-app -o $@ -D__SPRITE_X_STEP=8 -D__SPRITE_Y_STEP=8 -DYSize=8 \ -vn -lndos \ -D__ALT_PRINT \ -D__Z88DK_SPRITES_GRAPHICS -D__NO_INIT_GRAPHICS \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c \ $(FULL_FILES) rm $@ mv $@.ROM $(BUILD_PATH)/X$(GAME_NAME)_$@.ROM px8k: $(ASSETS_PATH)/z88dk_sprites_definitions.h $(Z88DK_PATH)$(MYZ88DK) +cpm $(SCCZ80_ROM_OPTS) \ $(INCLUDE_OPTS) \ -D__PX8__ -D_XL_NO_JOYSTICK \ -D__NO_SPRITE_TRANSPARENCY \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_PX8_SLOWDOWN) \ -subtype=px8 \ -create-app -o $@ -D__SPRITE_X_STEP=8 -D__SPRITE_Y_STEP=8 -DYSize=8 \ -vn -lndos \ -D__ALT_PRINT \ -D__Z88DK_SPRITES_GRAPHICS -D__NO_INIT_GRAPHICS \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c \ $(FULL_FILES) rm $@ mv $@.ROM $(BUILD_PATH)/X$(GAME_NAME)_$@.ROM ================================================ FILE: src/makefiles.common/targets/z88dk/Makefile_radio86 ================================================ #TODO: generic console radio86: $(ASSETS_PATH)/z88dk_xchase.asm $(Z88DK_PATH)$(MYZ88DK) +radio86 $(SCCZ80_OPTS) \ $(INCLUDE_OPTS) \ -D__RADIO86__ \ -D__VT52 -DXSize=64 -DYSize=25 \ -D__CONIO_GRAPHICS \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_RADIO86_SLOWDOWN) \ -lndos -D_XL_NO_JOYSTICK \ -clib=default -pragma-redirect:fputc_cons=fputc_cons_generic \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/udg/udg_init_graphics.c \ $(ASSETS_PATH)/z88dk_xchase.asm \ $(FULL_FILES) \ -create-app -o $(BUILD_PATH)/X$(GAME_NAME)_$@ rm $(BUILD_PATH)/X$(GAME_NAME)_$@ # cat bootstrap.cas $@.cas > $(BUILD_PATH)/X$(GAME_NAME)_$@.cas # rm bootstrap.cas # rm $@.cas # rm $@_BOOTSTRAP.bin radio86_buffered: $(Z88DK_PATH)$(MYZ88DK) +radio86 $(SCCZ80_OPTS) $(INCLUDE_OPTS) \ -D__STDIO $(STDIO_GAME_OPTS) -D_XL_TURN_BASED_SKULL_MIN_SLOWDOWN_SCALE=1 -D_XL_TURN_BASED_GHOST_MIN_SLOWDOWN_SCALE=1 \ -D_XL_TURN_BASED_EFFECT_SCALE=1 -D_XL_TURN_BASED_WAIT_SCALE=1 -D_XL_NO_JOYSTICK \ -DXSize=64 -DYSize=25 -create-app \ -D_XL_NO_COLOR \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_RADIO86_SLOWDOWN) \ -D_XL_TURN_BASED -D__NO_SCREEN_COLOR_INIT \ -D__BUFFERED_GRAPHICS \ -D__NO_INIT_GRAPHICS \ -D__ALT_PRINT \ -D__DEFAULT_CLEAR_SCREEN \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c \ $(FULL_FILES) \ -o $(BUILD_PATH)/X$(GAME_NAME)_$@ rm $(BUILD_PATH)/X$(GAME_NAME)_$@ ================================================ FILE: src/makefiles.common/targets/z88dk/Makefile_rc700 ================================================ ############################# # RC700 rc700: $(Z88DK_PATH)$(MYZ88DK) +cpm $(SCCZ80_OPTS) -subtype=rc700 $(INCLUDE_OPTS) \ -D__RC700__ \ -DXSize=80 \ -DYSize=23 \ -D__NO_SCREEN_COLOR_INIT \ -D_XL_NO_COLOR \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_RC700_SLOWDOWN) \ -D__VT52 \ -D__CONIO_GRAPHICS \ -lndos \ -D__NO_INIT_GRAPHICS \ $(FULL_FILES) \ -create-app -o$(BUILD_PATH)/X$(GAME_NAME)_rc700.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_rc700.bin ================================================ FILE: src/makefiles.common/targets/z88dk/Makefile_rx78 ================================================ ############################# # RX78 rx78: $(ASSETS_PATH)/z88dk_xchase.asm $(Z88DK_PATH)$(MYZ88DK) +rx78 $(SCCZ80_OPTS) $(INCLUDE_OPTS) \ -D__RX78__ \ -D__VT52 \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_RX78_SLOWDOWN) \ -D__CONIO_GRAPHICS \ -lndos -D__BIT_BANG_SOUND \ -clib=default -pragma-redirect:fputc_cons=fputc_cons_generic \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/udg/udg_init_graphics.c \ $(ASSETS_PATH)/z88dk_xchase.asm \ $(FULL_FILES) \ -create-app -o$(BUILD_PATH)/X$(GAME_NAME)_rx78.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_rx78.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_rx78_DATA.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_rx78_BSS.bin ================================================ FILE: src/makefiles.common/targets/z88dk/Makefile_smc777 ================================================ ############################# # SMC777 smc777_turn_based: $(Z88DK_PATH)$(MYZ88DK) +cpm $(SCCZ80_OPTS) -subtype=smc777 $(INCLUDE_OPTS) \ -D__SMC777__ \ -clib=default -pragma-redirect:fputc_cons=fputc_cons_generic \ -D__NO_SCREEN_COLOR_INIT \ -D_XL_NO_COLOR \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_SMC777_SLOWDOWN) \ -D__VT52 -DXSize=80 -DYSize=24 \ -D__CONIO_GRAPHICS -DTURN_BASED \ -lndos \ -D__NO_INIT_GRAPHICS \ $(FULL_FILES) \ -create-app -oxcsmc777.bin rm xcsmc777.bin rm xcsmc777.com mv xcsmc777.dsk $(BUILD_PATH)/X$(GAME_NAME)_$@.dsk smc777_80: $(ASSETS_PATH)/z88dk_xchase.asm $(Z88DK_PATH)$(MYZ88DK) +smc777 $(SCCZ80_OPTS) $(INCLUDE_OPTS) -pragma-redirect:fputc_cons=fputc_cons_generic \ -D__SMC777__ -vn \ -D__VT52 -DYSize=25 -DXSize=80 -D__SCREEN_MODE=4 \ -lndos \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_SMC777_SLOWDOWN) \ -D__CONIO_GRAPHICS \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/udg/udg_init_graphics.c \ $(FULL_FILES) -D_XL_NO_JOYSTICK \ $(ASSETS_PATH)/z88dk_xchase.asm \ -create-app -o fp1100_X$(GAME_NAME).bin mv fp1100_X$(GAME_NAME).d88 $(BUILD_PATH)/X$(GAME_NAME)_$@.d88 rm -rf fp1100_X$(GAME_NAME).bin rm -rf fp1100_X$(GAME_NAME)_BOOTSTRAP.bin smc777: $(ASSETS_PATH)/z88dk_xchase.asm $(Z88DK_PATH)$(MYZ88DK) +smc777 $(SCCZ80_OPTS) $(INCLUDE_OPTS) -pragma-redirect:fputc_cons=fputc_cons_generic \ -D__SMC777__ -vn \ -D__VT52 -DYSize=25 -DXSize=40 -D__SCREEN_MODE=3 \ -lndos \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_SMC777_SLOWDOWN) \ -D__CONIO_GRAPHICS \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/udg/udg_init_graphics.c \ $(FULL_FILES) -D_XL_NO_JOYSTICK \ $(ASSETS_PATH)/z88dk_xchase.asm \ -create-app -o fp1100_X$(GAME_NAME).bin mv fp1100_X$(GAME_NAME).d88 $(BUILD_PATH)/X$(GAME_NAME)_$@.d88 rm -rf fp1100_X$(GAME_NAME).bin rm -rf fp1100_X$(GAME_NAME)_BOOTSTRAP.bin ================================================ FILE: src/makefiles.common/targets/z88dk/Makefile_sol20 ================================================ sol20: $(Z88DK_PATH)$(MYZ88DK) +sol20 $(SCCZ80_OPTS) $(INCLUDE_OPTS) \ -D__SOL20__ \ -lndos -DXSize=64 -DYSize=16 \ -clib=default -pragma-redirect:fputc_cons=fputc_cons_generic \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS -D__DEFAULT_CLEAR_SCREEN \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_SOL20_SLOWDOWN) \ $(FULL_FILES) \ -create-app \ -o $(BUILD_PATH)/X$(GAME_NAME)_$@ rm $(BUILD_PATH)/X$(GAME_NAME)_$@ ================================================ FILE: src/makefiles.common/targets/z88dk/Makefile_sos ================================================ # SOS sos: sos_buffered sos_buffered: $(Z88DK_PATH)$(MYZ88DK) +sos $(SCCZ80_OPTS) \ $(INCLUDE_OPTS) \ -lndos \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_SOS_SLOWDOWN) \ -D__STDIO -D__INCLUDE_CONIO_H \ -D_XL_NO_COLOR -D__NO_SCREEN_COLOR_INIT \ -D__BUFFERED_GRAPHICS -D__ALT_PRINT \ -DTURN_BASED -D_XL_NO_JOYSTICK \ -D_XL_NO_SLEEP -D__NO_WAIT \ -D__NO_INIT_GRAPHICS \ -create-app -o sos_buffered \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c \ $(FULL_FILES) rm sos_buffered mv sos_buffered.obj $(BUILD_PATH)/X$(GAME_NAME)_sos_buffered.obj sos_tiny_buffered: $(Z88DK_PATH)$(MYZ88DK) +sos $(SCCZ80_OPTS) \ $(INCLUDE_OPTS) \ -lndos \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_SOS_SLOWDOWN) \ -D__STDIO -D__NO_SCREEN_COLOR_INIT \ -D_XL_NO_COLOR \ -D__BUFFERED_GRAPHICS -D__ALT_PRINT \ -DTURN_BASED \ -DTINY_GAME -D_XL_NO_SLEEP -D__NO_WAIT \ -D__NO_INIT_GRAPHICS -D_XL_NO_JOYSTICK \ -create-app -o sos_tiny_buffered \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c \ $(TINY_FILES) rm sos_tiny_buffered mv sos_tiny_buffered.obj $(BUILD_PATH)/X$(GAME_NAME)_TINY_sos_buffered.obj ================================================ FILE: src/makefiles.common/targets/z88dk/Makefile_spc1000 ================================================ ############################# # SPC1000 spc1000: $(ASSETS_PATH)/z88dk_xchase.asm $(Z88DK_PATH)$(MYZ88DK) +spc1000 $(SCCZ80_OPTS) $(INCLUDE_OPTS) \ -D__SPC1000__ \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_SPC1000_SLOWDOWN) \ -D__VT52 -D_XL_NO_JOYSTICK \ -D__CONIO_GRAPHICS -D__BIT_BANG_SOUND \ -lndos \ -clib=default -pragma-redirect:fputc_cons=fputc_cons_generic \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/udg/udg_init_graphics.c \ $(ASSETS_PATH)/z88dk_xchase.asm \ $(FULL_FILES) \ -create-app -o$(BUILD_PATH)/X$(GAME_NAME)_spc1000.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_spc1000.bin ================================================ FILE: src/makefiles.common/targets/z88dk/Makefile_special ================================================ ############################# # SPECIALIST special: $(Z88DK_PATH)$(MYZ88DK) +special $(SCCZ80_OPTS) $(INCLUDE_OPTS) \ -clib=default -pragma-redirect:fputc_cons=fputc_cons_generic \ -D__SPECIAL__ \ -DXSize=48 \ -DYSize=30 \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_SPECIAL_SLOWDOWN) \ -D__NO_SCREEN_COLOR_INIT \ -D_XL_NO_COLOR -D_XL_NO_SLEEP -DTURN_BASED -D__STDIO -D__NO_WAIT \ -D_XL_NO_JOYSTICK \ -D__VT52 \ -D__CONIO_GRAPHICS \ -lndos \ -D__NO_INIT_GRAPHICS \ $(FULL_FILES) \ -create-app -o$(BUILD_PATH)/X$(GAME_NAME)_special.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_special.bin ================================================ FILE: src/makefiles.common/targets/z88dk/Makefile_srr ================================================ ############################# # SRR srr: $(ASSETS_PATH)/z88dk_xchase.asm $(Z88DK_PATH)$(MYZ88DK) +srr $(SCCZ80_OPTS) $(INCLUDE_OPTS) -pragma-redirect:fputc_cons=fputc_cons_generic \ -D__SRR__ -vn \ -D__NO_WAIT -D__NO_SCREEN_COLOR_INIT \ -D__VT52 \ -D__CONIO_GRAPHICS \ -lndos \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_SRR_SLOWDOWN) \ -clib=default -pragma-redirect:fputc_cons=fputc_cons_generic \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/udg/udg_init_graphics.c \ $(ASSETS_PATH)/z88dk_xchase.asm \ -create-app -o srr \ $(FULL_FILES) rm srr rm srr.srr mv srr.wav $(BUILD_PATH)/X$(GAME_NAME)_srr.wav ================================================ FILE: src/makefiles.common/targets/z88dk/Makefile_super80 ================================================ ############################# # SUPER80 super80: super80_no_col super80_no_col: $(Z88DK_PATH)$(MYZ88DK) +super80 $(SCCZ80_OPTS) $(INCLUDE_OPTS) \ -D__SUPER80__ \ -DXSize=32 \ -DYSize=16 \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_SUPER80_SLOWDOWN) \ -D__CONIO_GRAPHICS -D_XL_NO_COLOR \ -D__VT52 \ -D__NO_INIT_GRAPHICS \ -lndos \ $(FULL_FILES) \ -create-app -o super80 mv super80.ql $(BUILD_PATH)/X$(GAME_NAME)_super80.ql rm super80 ================================================ FILE: src/makefiles.common/targets/z88dk/Makefile_super80r ================================================ ############################# # SUPER80R super80r: super80r_no_gfx_no_col super80r_no_gfx_no_col: $(Z88DK_PATH)$(MYZ88DK) +super80 $(SCCZ80_OPTS) $(INCLUDE_OPTS) -clib=vduem \ -D__SUPER80R__ \ -DXSize=80 \ -DYSize=23 \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_SUPER80R_SLOWDOWN) \ -D__BIT_BANG_SOUND \ -D_XL_NO_COLOR \ -D__CONIO_GRAPHICS \ -D__VT52 -D__NO_INIT_GRAPHICS \ $(FULL_FILES) \ -lndos \ -create-app -o super80r mv super80r.ql $(BUILD_PATH)/X$(GAME_NAME)_super80r.ql rm super80r super80r_gfx_no_col: $(ASSETS_PATH)/z88dk_xchase.asm $(Z88DK_PATH)$(MYZ88DK) +super80 $(SCCZ80_OPTS) $(INCLUDE_OPTS) -clib=vduem \ -D__SUPER80R__ \ -DXSize=80 \ -DYSize=24 \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_SUPER80R_SLOWDOWN) \ -D__BIT_BANG_SOUND \ -D_XL_NO_COLOR \ -D__CONIO_GRAPHICS \ -D__VT52 \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/udg/udg_init_graphics.c \ $(ASSETS_PATH)/z88dk_xchase.asm \ $(FULL_FILES) \ -lndos \ -create-app -o super80r mv super80r.ql $(BUILD_PATH)/X$(GAME_NAME)_super80r.ql rm super80r ================================================ FILE: src/makefiles.common/targets/z88dk/Makefile_sv8000 ================================================ ############################# # SV8000 sv8000: sv8000_mode1 sv8000_tiny: $(Z88DK_PATH)$(MYZ88DK) +sv8000 $(SCCZ80_OPTS) -O3 -pragma-define:CLIB_DISABLE_MODE0=1 \ $(INCLUDE_OPTS) \ -D__INCLUDE_CONIO_H \ -DZ88DK_JOYSTICK -DXSize=24 -DYSize=16 \ -D__SV8000__ \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_SV8000_SLOWDOWN) \ -DTINY_GAME -DNO_WALL -DNO_BLINKING -D__NO_PRINT \ -D__CONIO_GRAPHICS -D__NO_WAIT -D__NO_INIT_GRAPHICS \ -create-app -o$(BUILD_PATH)/X$(GAME_NAME)_TINY_$@.bin \ $(TINY_FILES) rm -rf $(BUILD_PATH)/X$(GAME_NAME)_TINY_$@.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_TINY_$@_BSS.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_TINY_$@_DATA.bin sv8000_32k_no_gfx: $(Z88DK_PATH)$(MYZ88DK) +sv8000 $(SCCZ80_OPTS) -subtype=32k \ $(INCLUDE_OPTS) \ -DZ88DK_JOYSTICK \ -D__SV8000__ \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_SV8000_SLOWDOWN) \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS \ -create-app -o$(BUILD_PATH)/X$(GAME_NAME)_$@.bin \ $(FULL_FILES) \ $(CROSS_LIB_PATH)/sound/z88dk/psg/ay-3-8910_psg_sounds.c rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@_BSS.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@_DATA.bin sv8000_mode0: sv8000_32k_mode0 sv8000_32k_mode0: $(Z88DK_PATH)$(MYZ88DK) +sv8000 $(SCCZ80_OPTS) -subtype=32k \ $(INCLUDE_OPTS) \ -DZ88DK_JOYSTICK \ -D__SV8000__ \ -D__SCREEN_MODE=0 -D__NO_INIT_GRAPHICS \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_SV8000_SLOWDOWN) \ -D__CONIO_GRAPHICS \ -create-app -o$(BUILD_PATH)/X$(GAME_NAME)_$@.bin \ $(FULL_FILES) \ $(ASSETS_PATH)/z88dk_xchase.asm \ $(CROSS_LIB_PATH)/sound/z88dk/psg/ay-3-8910_psg_sounds.c rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@_BSS.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@_DATA.bin sv8000_mode1: sv8000_32k_mode1 sv8000_32k_mode1: $(ASSETS_PATH)/z88dk_xchase.asm $(Z88DK_PATH)$(MYZ88DK) +sv8000 $(SCCZ80_OPTS) -compiler=sdcc -SO3 --max-allocs-per-node200000 -subtype=32k -pragma-define:CLIB_DISABLE_MODE0=1 \ $(INCLUDE_OPTS) \ -DZ88DK_JOYSTICK \ -D__SV8000__ \ -D__SCREEN_MODE=1 \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_SV8000_SLOWDOWN) \ -D__CONIO_GRAPHICS \ -create-app -o$(BUILD_PATH)/X$(GAME_NAME)_$@.bin \ -pragma-redirect:CRT_FONT=_font_8x8_zx_system \ $(FULL_FILES) \ $(ASSETS_PATH)/z88dk_xchase.asm \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/udg/udg_init_graphics.c \ $(CROSS_LIB_PATH)/sound/z88dk/psg/ay-3-8910_psg_sounds.c rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@_BSS.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@_DATA.bin sv8000_4k: $(ASSETS_PATH)/z88dk_xchase.asm $(Z88DK_PATH)$(MYZ88DK) +sv8000 $(SCCZ80_OPTS) -compiler=sdcc -SO3 --max-allocs-per-node200000 -pragma-define:CLIB_DISABLE_MODE0=1 \ $(INCLUDE_OPTS) \ -DZ88DK_JOYSTICK \ -D__SV8000__ \ -D__SCREEN_MODE=1 \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_SV8000_SLOWDOWN) \ -D__CONIO_GRAPHICS -D_XL_NO_SOUND \ -create-app -o$(BUILD_PATH)/X$(GAME_NAME)_$@.bin \ $(FULL_FILES) \ $(ASSETS_PATH)/z88dk_xchase.asm \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/udg/udg_init_graphics.c rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@_BSS.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@_DATA.bin sv8000_4k_mode0: $(Z88DK_PATH)$(MYZ88DK) +sv8000 $(SCCZ80_OPTS) -compiler=sdcc -SO3 --max-allocs-per-node200000 -pragma-define:CLIB_DISABLE_MODE1=1 \ $(INCLUDE_OPTS) \ -DZ88DK_JOYSTICK \ -D__SV8000__ \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_SV8000_SLOWDOWN) \ -D__CONIO_GRAPHICS -D_XL_NO_SOUND \ -create-app -o$(BUILD_PATH)/X$(GAME_NAME)_$@.bin \ $(FULL_FILES) \ -D__NO_INIT_GRAPHICS rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@_BSS.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@_DATA.bin ================================================ FILE: src/makefiles.common/targets/z88dk/Makefile_svi ================================================ ############################# # SVI svi_light: $(Z88DK_PATH)$(MYZ88DK) +svi $(ZSDCC_OPTS) \ $(INCLUDE_OPTS) \ -compiler=sdcc \ -D__INCLUDE_CONIO_H \ -zorg=49152 \ -clib=ansi \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_SVI_SLOWDOWN) \ -pragma-define:ansicolumns=32 \ -pragma-include:$(CFG_PATH)/z88dk/zpragma_clib.inc \ -vn -lndos \ -D__SVI__ \ \ -D__BIT_BANG_SOUND \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS \ -create-app -o $(BUILD_PATH)/X$(GAME_NAME)_$@ \ $(LIGHT_FILES) rm $(BUILD_PATH)/X$(GAME_NAME)_$@ svi: svi_328 svi_328: $(ASSETS_PATH)/z88dk_xchase.asm $(Z88DK_PATH)$(MYZ88DK) +svi $(SCCZ80_OPTS) \ -DZ88DK_JOYSTICK \ -pragma-redirect:fputc_cons=fputc_cons_generic $(INCLUDE_OPTS) \ -vn -lndos \ -D__SVI__ \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_SVI_SLOWDOWN) \ -D__CONIO_GRAPHICS \ -D__INCLUDE_CONIO_H \ -pragma-define:ansicolumns=32 \ -create-app -o $(BUILD_PATH)/X$(GAME_NAME)_$@ \ $(CROSS_LIB_PATH)/sound/z88dk/psg/ay-3-8910_psg_sounds.c \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/udg/udg_init_graphics.c \ $(ASSETS_PATH)/z88dk_xchase.asm \ $(FULL_FILES) rm $(BUILD_PATH)/X$(GAME_NAME)_$@ ================================================ FILE: src/makefiles.common/targets/z88dk/Makefile_ti82 ================================================ ############################# # TI82 ti82: $(ASSETS_PATH)/z88dk_sprites_definitions.h $(Z88DK_PATH)$(MYZ88DK) +ti82 $(SCCZ80_OPTS) \ $(INCLUDE_OPTS) \ -D__TI82__ \ -DZ88DK_JOYSTICK \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_TI82_SLOWDOWN) \ -vn -lndos -D__NO_SCREEN_COLOR_INIT -D_XL_NO_COLOR \ -D__ALT_PRINT \ -D__Z88DK_SPRITES_GRAPHICS -D__NO_INIT_GRAPHICS \ -D__BIT_BANG_SOUND \ -create-app -o ti82 \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c \ $(FULL_FILES) mv $(SOURCE_PATH)/../../ti82.82p $(BUILD_PATH)/X$(GAME_NAME)_ti82.82p rm -rf $(SOURCE_PATH)/../../ti82 ================================================ FILE: src/makefiles.common/targets/z88dk/Makefile_ti83 ================================================ ############################# # TI83 ti83: $(ASSETS_PATH)/z88dk_sprites_definitions.h $(Z88DK_PATH)$(MYZ88DK) +ti83 $(SCCZ80_OPTS) \ $(INCLUDE_OPTS) \ -D__TI83__ \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_TI83_SLOWDOWN) \ -DZ88DK_JOYSTICK \ -vn -lndos -D__NO_SCREEN_COLOR_INIT -D_XL_NO_COLOR \ -D__ALT_PRINT \ -D__Z88DK_SPRITES_GRAPHICS -D__NO_INIT_GRAPHICS \ -D__BIT_BANG_SOUND \ -create-app -oxchase \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c \ $(FULL_FILES) mv $(SOURCE_PATH)/../../xchase.83p $(BUILD_PATH)/X$(GAME_NAME)_ti83.83p rm -rf $(SOURCE_PATH)/../../xchase ================================================ FILE: src/makefiles.common/targets/z88dk/Makefile_ti83p ================================================ ############################# # TI83P ti83p: $(ASSETS_PATH)/z88dk_sprites_definitions.h $(Z88DK_PATH)$(MYZ88DK) +ti83p $(SCCZ80_OPTS) -clib=ansi -subtype=ion -Cz--altfmt \ $(INCLUDE_OPTS) \ -D__TI83P__ \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_TI83P_SLOWDOWN) \ -DZ88DK_JOYSTICK \ -vn -lndos -D__NO_SCREEN_COLOR_INIT -D_XL_NO_COLOR \ -D__ALT_PRINT \ -D__Z88DK_SPRITES_GRAPHICS -D__NO_INIT_GRAPHICS \ -D__BIT_BANG_SOUND \ -create-app -oxchase8x \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c \ $(FULL_FILES) mv $(SOURCE_PATH)/../../xchase8x.8xp $(BUILD_PATH)/X$(GAME_NAME)_$@.8xp rm $(SOURCE_PATH)/../../xchase8x ================================================ FILE: src/makefiles.common/targets/z88dk/Makefile_ti85 ================================================ ############################# # TI85 ti85: $(ASSETS_PATH)/z88dk_sprites_definitions.h $(Z88DK_PATH)$(MYZ88DK) +ti85 $(SCCZ80_OPTS) \ $(INCLUDE_OPTS) \ -D__TI85__ \ -DZ88DK_JOYSTICK \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_TI85_SLOWDOWN) \ -vn -lndos -D__NO_SCREEN_COLOR_INIT -D_XL_NO_COLOR \ -D__ALT_PRINT \ -D__Z88DK_SPRITES_GRAPHICS -D__NO_INIT_GRAPHICS \ -D__BIT_BANG_SOUND \ -create-app -oti85 \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c \ $(FULL_FILES) mv $(SOURCE_PATH)/../../ti85.85s $(BUILD_PATH)/X$(GAME_NAME)_ti85.85s rm -rf $(SOURCE_PATH)/../../ti85 ================================================ FILE: src/makefiles.common/targets/z88dk/Makefile_ti86 ================================================ ############################# # TI86 ti86: ti86_light ti86_light: $(Z88DK_PATH)$(MYZ88DK) +ti86 $(SCCZ80_OPTS) \ $(INCLUDE_OPTS) \ -D__TI86__ \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_TI86_SLOWDOWN) \ -DZ88DK_JOYSTICK \ -clib=ansi -pragma-define:ansicolumns=32 \ -vn -lndos -D__NO_SCREEN_COLOR_INIT -D_XL_NO_COLOR \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS \ -create-app -oti86 \ $(FULL_FILES) mv $(SOURCE_PATH)/../../ti86.86p $(BUILD_PATH)/X$(GAME_NAME)_LIGHT_ti86.86p rm -rf $(SOURCE_PATH)/../../ti86 ================================================ FILE: src/makefiles.common/targets/z88dk/Makefile_tiki100 ================================================ ############################# # TIKI100 tiki100: $(ASSETS_PATH)/z88dk_sprites_definitions.h $(Z88DK_PATH)$(MYZ88DK) +cpm $(SCCZ80_OPTS) -subtype=tiki100 -ltiki100 \ $(INCLUDE_OPTS) \ -D__TIKI100__ \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_TIKI100_SLOWDOWN) \ -D__ALT_PRINT \ -D__Z88DK_SPRITES_GRAPHICS \ -D_XL_NO_COLOR \ -D__PSG_SOUND \ -D__NO_SCREEN_COLOR_INIT \ -create-app -o $(BUILD_PATH)/X$(GAME_NAME)_$@ \ -D__NO_INIT_GRAPHICS \ $(FULL_FILES) \ $(CROSS_LIB_PATH)/sound/z88dk/psg/ay-3-8910_psg_sounds.c \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@ rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@_bss_himem.bin ================================================ FILE: src/makefiles.common/targets/z88dk/Makefile_tim011 ================================================ #TODO: generic console tim011: $(ASSETS_PATH)/z88dk_xchase.asm $(Z88DK_PATH)$(MYZ88DK) +cpm -subtype=tim011 $(SCCZ80_OPTS) \ $(INCLUDE_OPTS) \ -D__TIM011__ \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_TIM011_SLOWDOWN) \ -D__VT52 -DXSize=64 -DYSize=32 \ -D__CONIO_GRAPHICS \ -lndos -D_XL_NO_JOYSTICK \ -clib=default -pragma-redirect:fputc_cons=fputc_cons_generic \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/udg/udg_init_graphics.c \ $(ASSETS_PATH)/z88dk_xchase.asm \ $(FULL_FILES) \ -create-app -o $(BUILD_PATH)/X$(GAME_NAME)_$@ rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@ ================================================ FILE: src/makefiles.common/targets/z88dk/Makefile_ts2068 ================================================ ############################# # TS2068 ts2068_sprites: $(ASSETS_PATH)/z88dk_sprites_definitions.h $(Z88DK_PATH)$(MYZ88DK) +ts2068 $(SCCZ80_OPTS) $(INCLUDE_OPTS) \ -clib=ansi \ -D__TS2068__ \ -vn \ -lndos \ -D_XL_NO_JOYSTICK \ -D__ALT_PRINT \ -D__Z88DK_SPRITES_GRAPHICS \ -D__NO_INIT_GRAPHICS \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_TS2068_SLOWDOWN) \ $(FULL_FILES) \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c \ -create-app -o $(BUILD_PATH)/X$(GAME_NAME)_$@.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@_BANK_7.bin ts2068: $(ASSETS_PATH)/z88dk_xchase.asm $(Z88DK_PATH)$(MYZ88DK) +ts2068 $(SCCZ80_OPTS) \ $(INCLUDE_OPTS) \ -D__TS2068__ \ -vn \ -D__BIT_BANG_SOUND \ -lndos \ --generic-console -DXSize=32 -DYSize=24 \ -D_XL_NO_JOYSTICK \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_TS2068_SLOWDOWN) \ -D__CONIO_GRAPHICS \ -D__NO_SCREEN_COLOR_INIT \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/udg/udg_init_graphics.c \ $(ASSETS_PATH)/z88dk_xchase.asm \ $(FULL_FILES) \ -create-app -o $(BUILD_PATH)/X$(GAME_NAME)_$@.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@_BANK_7.bin ts2068_mode1: $(ASSETS_PATH)/z88dk_xchase.asm $(Z88DK_PATH)$(MYZ88DK) +ts2068 $(SCCZ80_OPTS) \ $(INCLUDE_OPTS) \ -D__TS2068__ -D__SCREEN_MODE=1 \ -vn \ -D__BIT_BANG_SOUND \ -lndos \ --generic-console -DXSize=32 -DYSize=24 \ -D_XL_NO_JOYSTICK \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_TS2068_SLOWDOWN) \ -D__CONIO_GRAPHICS \ -D__NO_SCREEN_COLOR_INIT \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/udg/udg_init_graphics.c \ $(ASSETS_PATH)/z88dk_xchase.asm \ $(FULL_FILES) \ -create-app -o $(BUILD_PATH)/X$(GAME_NAME)_$@.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@_BANK_7.bin ts2068_mode6: $(ASSETS_PATH)/z88dk_xchase.asm $(Z88DK_PATH)$(MYZ88DK) +ts2068 $(SCCZ80_OPTS) \ $(INCLUDE_OPTS) \ -D__TS2068__ -D__SCREEN_MODE=6 \ -vn -D_XL_NO_COLOR \ -D__BIT_BANG_SOUND \ -lndos \ --generic-console -DXSize=64 -DYSize=24 \ -D_XL_NO_JOYSTICK \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_TS2068_SLOWDOWN) \ -D__CONIO_GRAPHICS \ -D__NO_SCREEN_COLOR_INIT \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/udg/udg_init_graphics.c \ $(ASSETS_PATH)/z88dk_xchase.asm \ $(FULL_FILES) \ -create-app -o $(BUILD_PATH)/X$(GAME_NAME)_$@.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@_BANK_7.bin ================================================ FILE: src/makefiles.common/targets/z88dk/Makefile_tvc ================================================ ############################# # TVC tvc: tvc_buffered # TODO: Non-buffered may be possible tvc_buffered: $(Z88DK_PATH)$(MYZ88DK) +tvc $(SCCZ80_OPTS) $(INCLUDE_OPTS) \ -D__TVC__ \ -DXSize=31 \ -DYSize=23 \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_TVC_SLOWDOWN) \ -D__NO_SCREEN_COLOR_INIT -D__BUFFERED_GRAPHICS -DTURN_BASED \ -D_XL_NO_COLOR -D__ALT_PRINT -D__STDIO \ -D__NO_WAIT -D_XL_NO_SLEEP -D_XL_NO_JOYSTICK \ -D__NO_INIT_GRAPHICS -D__INCLUDE_CONIO_H \ $(FULL_FILES) \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c \ -create-app -o$(BUILD_PATH)/X$(GAME_NAME)_$@.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.bin tvc_test: $(Z88DK_PATH)$(MYZ88DK) +tvc $(SCCZ80_OPTS) $(INCLUDE_OPTS) \ -D__TVC__ --generic-console \ -DXSize=31 \ -DYSize=23 \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_TVC_SLOWDOWN) \ -D__NO_SCREEN_COLOR_INIT \ -D_XL_NO_COLOR -D__VT52 \ -D__NO_WAIT -D_XL_NO_JOYSTICK -D__CONIO_GRAPHICS \ -D__NO_INIT_GRAPHICS \ $(FULL_FILES) \ -create-app -o$(BUILD_PATH)/X$(GAME_NAME)_$@.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.bin ================================================ FILE: src/makefiles.common/targets/z88dk/Makefile_v1050 ================================================ v1050: $(ASSETS_PATH)/z88dk_xchase.asm $(Z88DK_PATH)$(MYZ88DK) +cpm -subtype=v1050 $(SCCZ80_OPTS) \ $(INCLUDE_OPTS) \ -D__V1050__ \ -D__VT52 -DXSize=80 -DYSize=25 \ -D__CONIO_GRAPHICS \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_V1050_SLOWDOWN) \ -lndos -D_XL_NO_JOYSTICK \ --generic-console -pragma-redirect:fputc_cons=fputc_cons_generic \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/udg/udg_init_graphics.c \ $(ASSETS_PATH)/z88dk_xchase.asm \ $(FULL_FILES) \ -create-app -o $(BUILD_PATH)/X$(GAME_NAME)_$@ rm $(BUILD_PATH)/X$(GAME_NAME)_$@ ================================================ FILE: src/makefiles.common/targets/z88dk/Makefile_vector06c ================================================ ############################# # VECTOR06C vector06c: $(Z88DK_PATH)$(MYZ88DK) +vector06c $(SCCZ80_OPTS) $(INCLUDE_OPTS) \ -D__VECTOR06C__ \ -DXSize=32 \ -DYSize=30 \ -D__NO_SCREEN_COLOR_INIT \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_VECTOR06C_SLOWDOWN) \ -D__VT52 \ -D__CONIO_GRAPHICS \ -lndos \ -D__NO_INIT_GRAPHICS \ $(FULL_FILES) \ -create-app -o$(BUILD_PATH)/X$(GAME_NAME)_vector06c.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_vector06c.bin ================================================ FILE: src/makefiles.common/targets/z88dk/Makefile_x07 ================================================ ############################# # Canon X-07 # x07: x07_buffered x07_buffered: $(Z88DK_PATH)$(MYZ88DK) +x07 $(SCCZ80_OPTS) $(INCLUDE_OPTS) \ -D__X07__ \ -DXSize=20 -D_XL_NO_LOWER_BORDER \ -DYSize=4 -D_XL_NO_JOYSTICK \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_X07_SLOWDOWN) \ -D__NO_SCREEN_COLOR_INIT -D__BUFFERED_GRAPHICS -DTURN_BASED \ -D_XL_NO_COLOR -D__ALT_PRINT -D__STDIO -D__NO_SCREEN_COLOR_INIT \ -D__NO_INIT_GRAPHICS -D__INCLUDE_CONIO_H \ $(FULL_FILES) \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c \ -create-app -o$(BUILD_PATH)/X$(GAME_NAME)_$@.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@_BSS.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@_DATA.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.bin # -pragma-redirect:getk=getk_inkey x07: $(Z88DK_PATH)$(MYZ88DK) +x07 $(SCCZ80_OPTS) $(INCLUDE_OPTS) \ -D__X07__ --generic-console -D_XL_NO_JOYSTICK \ -DXSize=30 -D_XL_NO_UDG \ -DYSize=8 \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_X07_SLOWDOWN) \ -D__NO_SCREEN_COLOR_INIT -D__CONIO_GRAPHICS \ -D_XL_NO_COLOR -D__NO_SCREEN_COLOR_INIT \ $(FULL_FILES) \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/x07/x07_init_graphics.c \ -create-app -o$(BUILD_PATH)/X$(GAME_NAME)_$@.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@_BSS.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@_DATA.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.bin x07_Size4: $(Z88DK_PATH)$(MYZ88DK) +x07 $(SCCZ80_OPTS) $(INCLUDE_OPTS) \ -D__X07__ -pragma-redirect:fputc_cons=fputc_cons_generic \ -DXSize=20 -D_XL_NO_LOWER_BORDER -D_XL_NO_UDG \ -DYSize=4 -D_XL_NO_JOYSTICK \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_X07_SLOWDOWN) \ -D__NO_SCREEN_COLOR_INIT -D__CONIO_GRAPHICS \ -D_XL_NO_COLOR -D__NO_SCREEN_COLOR_INIT \ -D__NO_INIT_GRAPHICS \ $(FULL_FILES) \ -create-app -o$(BUILD_PATH)/X$(GAME_NAME)_$@.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@_BSS.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@_DATA.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.bin x07_test: $(Z88DK_PATH)$(MYZ88DK) +x07 $(SCCZ80_OPTS) $(INCLUDE_OPTS) \ -D__X07__ -pragma-redirect:fputc_cons=fputc_cons_generic \ -DXSize=16 -D__NO_PRINT -D_XL_NO_LOWER_BORDER \ -DYSize=5 -D_XL_NO_JOYSTICK -D_XL_NO_UDG \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_X07_SLOWDOWN) \ -D__NO_SCREEN_COLOR_INIT -D__CONIO_GRAPHICS \ -D_XL_NO_COLOR -D__NO_SCREEN_COLOR_INIT \ -D__NO_INIT_GRAPHICS \ $(FULL_FILES) \ -create-app -o$(BUILD_PATH)/X$(GAME_NAME)_$@.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@_BSS.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@_DATA.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.bin ================================================ FILE: src/makefiles.common/targets/z88dk/Makefile_x1 ================================================ x1: $(ASSETS_PATH)/z88dk_xchase.asm $(Z88DK_PATH)$(MYZ88DK) +x1 $(SCCZ80_OPTS) \ $(INCLUDE_OPTS) -DEXTRA_TITLE \ -D__X1__ \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_X1_SLOWDOWN) \ -D__PSG_SOUND -D_XL_NO_JOYSTICK \ -D__CONIO_GRAPHICS \ -create-app -o $(BUILD_PATH)/X$(GAME_NAME)_$@.bin -vn -lndos \ $(CROSS_LIB_PATH)/sound/z88dk/psg/ay-3-8910_psg_sounds.c \ $(FULL_FILES) \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/udg/udg_init_graphics.c \ $(ASSETS_PATH)/z88dk_xchase.asm rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.bin ================================================ FILE: src/makefiles.common/targets/z88dk/Makefile_x820 ================================================ # TODO: This target does not have graphics x820: $(Z88DK_PATH)$(MYZ88DK) +cpm -subtype=x820 $(SCCZ80_OPTS) \ $(INCLUDE_OPTS) \ -D__X820__ \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_X820_SLOWDOWN) \ -D__VT52 -DXSize=80 -DYSize=24 \ -D__CONIO_GRAPHICS -D_XL_NO_UDG \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_X820_SLOWDOWN) \ -lndos -D_XL_NO_JOYSTICK \ -clib=default -pragma-redirect:fputc_cons=fputc_cons_generic \ -D__NO_INIT_GRAPHICS \ $(ASSETS_PATH)/z88dk_xchase.asm \ $(FULL_FILES) \ -create-app -o $(BUILD_PATH)/X$(GAME_NAME)_$@ rm $(BUILD_PATH)/X$(GAME_NAME)_$@ rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@_bss_himem.bin # x820_gfx: $(ASSETS_PATH)/z88dk_xchase.asm # $(Z88DK_PATH)$(MYZ88DK) +cpm -subtype=x820 $(SCCZ80_OPTS) \ # $(INCLUDE_OPTS) \ # -D__X820__ \ # -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_X820_SLOWDOWN) \ # -D__VT52 -DXSize=80 -DYSize=24 \ # -D__CONIO_GRAPHICS \ # -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_X820_SLOWDOWN) \ # -lndos -D_XL_NO_JOYSTICK \ # -clib=default -pragma-redirect:fputc_cons=fputc_cons_generic \ # $(CROSS_LIB_PATH)/display/init_graphics/z88dk/udg/udg_init_graphics.c \ # $(ASSETS_PATH)/z88dk_xchase.asm \ # $(FULL_FILES) \ # -create-app -o $(BUILD_PATH)/X$(GAME_NAME)_$@ # rm $(BUILD_PATH)/X$(GAME_NAME)_$@ # rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@_bss_himem.bin ================================================ FILE: src/makefiles.common/targets/z88dk/Makefile_z80tvgame ================================================ ############################# # Z80TVGAME z80tvgame_no_gfx: $(Z88DK_PATH)$(MYZ88DK) +z80tvgame $(SCCZ80_OPTS) $(INCLUDE_OPTS) \ -D__Z80TVGAME__ \ -D__NO_SCREEN_COLOR_INIT \ -D_XL_NO_COLOR -DXSize=21 -DYSize=26 -DZ88DK_JOYSTICK \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_Z80TVGAME_SLOWDOWN) \ -D__VT52 \ -D__CONIO_GRAPHICS \ -lndos -D__BIT_BANG_SOUND \ -D__NO_INIT_GRAPHICS \ $(FULL_FILES) \ -create-app -o$(BUILD_PATH)/X$(GAME_NAME)_$@.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@_DATA.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@_BSS.bin z80tvgame: $(ASSETS_PATH)/z88dk_xchase.asm $(Z88DK_PATH)$(MYZ88DK) +z80tvgame $(SCCZ80_OPTS) $(INCLUDE_OPTS) \ -D__Z80TVGAME__ \ -D__NO_SCREEN_COLOR_INIT \ -D_XL_NO_COLOR -DXSize=21 -DYSize=26 -DZ88DK_JOYSTICK \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_Z80TVGAME_SLOWDOWN) \ -D__VT52 \ -D__CONIO_GRAPHICS \ -lndos -D__BIT_BANG_SOUND \ $(FULL_FILES) \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/udg/udg_init_graphics.c \ $(ASSETS_PATH)/z88dk_xchase.asm \ -create-app -o$(BUILD_PATH)/X$(GAME_NAME)_$@.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@_DATA.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@_BSS.bin ================================================ FILE: src/makefiles.common/targets/z88dk/Makefile_z88 ================================================ ############################# # Z88 z88_sprites: $(ASSETS_PATH)/z88dk_sprites_definitions.h $(Z88DK_PATH)$(MYZ88DK) +z88 $(SCCZ80_OPTS) -subtype=app \ $(INCLUDE_OPTS) \ -D__Z88__ \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_Z88_SLOWDOWN) \ -vn -lndos -D__NO_SCREEN_COLOR_INIT \ -D__ALT_PRINT \ -D__Z88DK_SPRITES_GRAPHICS \ -D__BIT_BANG_SOUND \ -D_XL_NO_COLOR \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/z88/z88_init_graphics.c \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c \ $(FULL_FILES) \ -create-app -o z88 rm z88 rm z88.ap0 rm z88_BSS.bin rm z88_DATA.bin rm z88_bss_fardata.bin mv z88.63 $(BUILD_PATH)/X$(GAME_NAME)_$@.63 mv z88.epr $(BUILD_PATH)/X$(GAME_NAME)_$@.epr z88: z88_mode2 z88_mode1: $(ASSETS_PATH)/z88dk_xchase.asm $(Z88DK_PATH)$(MYZ88DK) +z88 $(SCCZ80_ROM_OPTS) -subtype=app \ $(INCLUDE_OPTS) \ -D__Z88__ -DXSize=60 -DYSize=8 \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_Z88_SLOWDOWN) \ -D_XL_NO_JOYSTICK -D__SCREEN_MODE=1 \ -D__CONIO_GRAPHICS \ -pragma-redirect:CRT_FONT=_font_8x8_zx_system \ -vn -lndos \ --generic-console \ -D__BIT_BANG_SOUND \ -D_XL_NO_COLOR \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/z88/z88_udg_init_graphics.c \ $(ASSETS_PATH)/z88dk_xchase.asm \ $(FULL_FILES) \ -create-app -o z88 rm z88 rm z88.ap0 rm z88_BSS.bin rm z88_DATA.bin rm z88_bss_fardata.bin mv z88.63 $(BUILD_PATH)/X$(GAME_NAME)_$@.63 mv z88.epr $(BUILD_PATH)/X$(GAME_NAME)_$@.epr z88_mode2: $(ASSETS_PATH)/z88dk_xchase.asm $(Z88DK_PATH)$(MYZ88DK) +z88 $(SCCZ80_ROM_OPTS) -subtype=app \ $(INCLUDE_OPTS) \ -D__Z88__ -DXSize=60 -DYSize=8 \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_Z88_SLOWDOWN) \ -D_XL_NO_JOYSTICK -D__SCREEN_MODE=2 \ -D__CONIO_GRAPHICS \ -pragma-redirect:CRT_FONT=_font_8x8_zx_system \ -vn -lndos \ -D__BIT_BANG_SOUND \ -D_XL_NO_COLOR \ --generic-console \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/z88/z88_udg_init_graphics.c \ $(ASSETS_PATH)/z88dk_xchase.asm \ $(FULL_FILES) \ -create-app -o z88 rm z88 rm z88.ap0 rm z88_BSS.bin rm z88_DATA.bin rm z88_bss_fardata.bin mv z88.63 $(BUILD_PATH)/X$(GAME_NAME)_$@.63 mv z88.epr $(BUILD_PATH)/X$(GAME_NAME)_$@.epr ================================================ FILE: src/makefiles.common/targets/z88dk/Makefile_zx80 ================================================ ############################# # ZX80 zx80: zx80_16k_turn_based zx80_16k_turn_based: $(Z88DK_PATH)$(MYZ88DK) +zx80 $(SCCZ80_OPTS) \ $(INCLUDE_OPTS) -DZX80_GEN_TV_FIELD -DTURN_BASED -DTURN_BASED \ --opt-code-size -pragma-define:ZX_CHAR_XLATE_MODE=1 \ -vn \ -D__ZX80__ \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_ZX81_SLOWDOWN) $(ZX81_NO_GFX_GAME_OPTS) \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS -D_XL_NO_JOYSTICK \ -lndos \ -create-app -o $(BUILD_PATH)/X$(GAME_NAME)_$@.prg \ $(FULL_FILES) rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.prg ================================================ FILE: src/makefiles.common/targets/z88dk/Makefile_zxn ================================================ ############################# # ZXN zxn: zxn_mode66 zxn_mono: zxn_mode67 zxn_mode64: $(ASSETS_PATH)/z88dk_xchase.asm $(Z88DK_PATH)$(MYZ88DK) +zxn $(SCCZ80_OPTS) -clib=classic -subtype=nex $(INCLUDE_OPTS) \ -D__ZXN__ --generic-console \ -DXSize=40 \ -DYSize=32 -D__SCREEN_MODE=64 \ -D__NO_SCREEN_COLOR_INIT -D_XL_NO_JOYSTICK \ -D__CONIO_GRAPHICS -D__PSG_SOUND \ -lndos \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_ZXN_SLOWDOWN) \ $(FULL_FILES) \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/udg/udg_init_graphics.c \ $(ASSETS_PATH)/z88dk_xchase.asm \ $(CROSS_LIB_PATH)/sound/z88dk/psg/ay-3-8910_psg_sounds.c \ -create-app -o$(BUILD_PATH)/X$(GAME_NAME)_$@.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@_UNASSIGNED.bin zxn_mode65: $(ASSETS_PATH)/z88dk_xchase.asm $(Z88DK_PATH)$(MYZ88DK) +zxn $(SCCZ80_OPTS) -clib=classic -subtype=nex $(INCLUDE_OPTS) \ -D__ZXN__ --generic-console \ -DXSize=40 -D_XL_NO_COLOR \ -DYSize=32 -D__SCREEN_MODE=65 \ -D__NO_SCREEN_COLOR_INIT -D_XL_NO_JOYSTICK \ -D__CONIO_GRAPHICS -D__PSG_SOUND \ -lndos \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_ZXN_SLOWDOWN) \ $(FULL_FILES) \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/udg/udg_init_graphics.c \ $(ASSETS_PATH)/z88dk_xchase.asm \ $(CROSS_LIB_PATH)/sound/z88dk/psg/ay-3-8910_psg_sounds.c \ -create-app -o$(BUILD_PATH)/X$(GAME_NAME)_$@.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@_UNASSIGNED.bin zxn_mode66: $(ASSETS_PATH)/z88dk_xchase.asm $(Z88DK_PATH)$(MYZ88DK) +zxn $(SCCZ80_OPTS) -clib=classic -subtype=nex $(INCLUDE_OPTS) \ -D__ZXN__ --generic-console \ -DXSize=80 \ -DYSize=32 -D__SCREEN_MODE=66 \ -D__NO_SCREEN_COLOR_INIT -D_XL_NO_JOYSTICK \ -D__CONIO_GRAPHICS -D__PSG_SOUND \ -lndos \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_ZXN_SLOWDOWN) \ $(FULL_FILES) \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/udg/udg_init_graphics.c \ $(ASSETS_PATH)/z88dk_xchase.asm \ $(CROSS_LIB_PATH)/sound/z88dk/psg/ay-3-8910_psg_sounds.c \ -create-app -o$(BUILD_PATH)/X$(GAME_NAME)_$@.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@_UNASSIGNED.bin zxn_mode67: $(ASSETS_PATH)/z88dk_xchase.asm $(Z88DK_PATH)$(MYZ88DK) +zxn $(SCCZ80_OPTS) -clib=classic -subtype=nex $(INCLUDE_OPTS) \ -D__ZXN__ --generic-console \ -DXSize=80 -D_XL_NO_COLOR \ -DYSize=32 -D__SCREEN_MODE=67 \ -D__NO_SCREEN_COLOR_INIT -D_XL_NO_JOYSTICK \ -D__CONIO_GRAPHICS -D__PSG_SOUND \ -lndos \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_ZXN_SLOWDOWN) \ $(FULL_FILES) \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/udg/udg_init_graphics.c \ $(ASSETS_PATH)/z88dk_xchase.asm \ $(CROSS_LIB_PATH)/sound/z88dk/psg/ay-3-8910_psg_sounds.c \ -create-app -o$(BUILD_PATH)/X$(GAME_NAME)_$@.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@_UNASSIGNED.bin ================================================ FILE: src/makefiles.common/targets/z88dk/extras/Makefile_agon ================================================ agon_mode0: $(ASSETS_PATH)/z88dk_xchase.asm $(Z88DK_PATH)$(MYZ88DK) +agon $(SCCZ80_OPTS) $(INCLUDE_OPTS) \ -D__AGON__ -D_XL_NO_JOYSTICK \ -D__SCREEN_MODE=0 -pragma-define:CRT_ENABLE_COMMANDLINE=0 \ -D__CONIO_GRAPHICS -DXSize=128 -DYSize=97 -D_XL_NO_COLOR \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_AGON_SLOWDOWN) \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/udg/udg_init_graphics.c \ $(ASSETS_PATH)/z88dk_xchase.asm \ $(FULL_FILES) \ -o $(BUILD_PATH)/X$(GAME_NAME)_$@ agon_mode1: $(ASSETS_PATH)/z88dk_xchase.asm $(Z88DK_PATH)$(MYZ88DK) +agon $(SCCZ80_OPTS) $(INCLUDE_OPTS) \ -D__AGON__ -D_XL_NO_JOYSTICK \ -D__SCREEN_MODE=1 -pragma-define:CRT_ENABLE_COMMANDLINE=0 \ -D__CONIO_GRAPHICS -DXSize=64 -DYSize=47 \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_AGON_SLOWDOWN) \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/udg/udg_init_graphics.c \ $(ASSETS_PATH)/z88dk_xchase.asm \ $(FULL_FILES) \ -o $(BUILD_PATH)/X$(GAME_NAME)_$@ agon_mode3: $(ASSETS_PATH)/z88dk_xchase.asm $(Z88DK_PATH)$(MYZ88DK) +agon $(SCCZ80_OPTS) $(INCLUDE_OPTS) \ -D__AGON__ -D_XL_NO_JOYSTICK -pragma-redirect:fputc_cons=fputc_cons_generic \ -D__SCREEN_MODE=3 -pragma-define:CRT_ENABLE_COMMANDLINE=0 \ -D__CONIO_GRAPHICS -DXSize=80 -DXSize=59 \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_AGON_SLOWDOWN) \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/udg/udg_init_graphics.c \ $(ASSETS_PATH)/z88dk_xchase.asm \ $(FULL_FILES) \ -o $(BUILD_PATH)/X$(GAME_NAME)_$@ ================================================ FILE: src/makefiles.common/targets/z88dk/extras/Makefile_c128 ================================================ c128_z80_40col_zsdcc: $(ASSETS_PATH)/z88dk_xchase.asm $(Z88DK_PATH)$(MYZ88DK) +c128 -compiler=sdcc $(ZSDCC_OPTS) \ $(INCLUDE_OPTS) \ -lndos -subtype=disk -clib=gencon \ -D__C128_Z80__ -DXSize=40 \ \ -D__BIT_BANG_SOUND \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_C128_Z80_40COL_SLOWDOWN) \ -D__CONIO_GRAPHICS \ $(FULL_FILES) \ $(ASSETS_PATH)/z88dk_xchase.asm \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/udg/udg_init_graphics.c \ -create-app -o"a40.bin" ifdef USE_TOOLS $(C1541) -format "crosschase,0" d64 FULL_$@.d64 $(C1541) -attach FULL_$@.d64 -write a40.ldr $(C1541) -attach FULL_$@.d64 -write a40 mv FULL_$@.d64 $(BUILD_PATH)/X$(GAME_NAME)_$@.d64 rm a40.bin else mv a40.bin $(BUILD_PATH)/X$(GAME_NAME)_$@.bin endif rm a40.ldr rm a40 ================================================ FILE: src/makefiles.common/targets/z88dk/extras/Makefile_camputers_lynx ================================================ camputers_lynx_no_gfx: $(Z88DK_PATH)$(MYZ88DK) +lynx $(SCCZ80_OPTS) $(INCLUDE_OPTS) \ -pragma-redirect:fputc_cons=fputc_cons_generic \ -pragma-redirect:getk=getk_inkey \ -D__CAMPUTERS_LYNX__ -D_XL_NO_UDG -D_XL_NO_JOYSTICK -D__BIT_BANG_SOUND \ -vn \ $(CAMPUTERS_LYNX_GAME_OPTS) \ -D__VT52 \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_CAMPUTERS_LYNX_SLOWDOWN) \ -lndos \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS \ $(FULL_FILES) \ -create-app -o $(BUILD_PATH)/X$(GAME_NAME)_$@.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.bin camputers_lynx_zsdcc: $(ASSETS_PATH)/z88dk_xchase.asm $(Z88DK_PATH)$(MYZ88DK) +lynx $(ZSDCC_OPTS) -compiler=sdcc $(INCLUDE_OPTS) \ -pragma-redirect:fputc_cons=fputc_cons_generic \ -pragma-redirect:getk=getk_inkey \ -D__CAMPUTERS_LYNX__ -D_XL_NO_JOYSTICK -D__BIT_BANG_SOUND \ -vn \ $(CAMPUTERS_LYNX_GAME_OPTS) \ -D__VT52 \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_CAMPUTERS_LYNX_SLOWDOWN) \ -lndos \ -D__CONIO_GRAPHICS \ $(FULL_FILES) \ $(ASSETS_PATH)/z88dk_xchase.asm \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/udg/udg_init_graphics.c \ -create-app -o $(BUILD_PATH)/X$(GAME_NAME)_$@.bin rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.bin ================================================ FILE: src/makefiles.common/targets/z88dk/extras/Makefile_cpc ================================================ ifdef USE_TOOLS cpc_cpcrslib_mode1: $(ASSETS_PATH)/z88dk_cpc_Chars8.asm $(TOOLS_PATH)/z88dk/cpc/nocart/nocart$(COMPILEDEXT) else cpc_cpcrslib_mode1: $(ASSETS_PATH)/z88dk_cpc_Chars8.asm endif $(Z88DK_PATH)$(MYZ88DK) +cpc $(SCCZ80_OPTS) $(INCLUDE_OPTS) -vn -clib=ansi \ -D__CPC__ \ -D__CPCRSLIB_GRAPHICS \ \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_CPC_CPCRSLIB_MODE1_SLOWDOWN) \ -pragma-define:REGISTER_SP=-1 \ -lndos -create-app -o $(BUILD_PATH)/X$(GAME_NAME)XXX_cpc.prg \ -D__CPCRSLIB_GRAPHICS \ $(ASSETS_PATH)/z88dk_cpc_Chars8.asm \ $(CROSS_LIB_PATH)/sound/z88dk/psg/ay-3-8910_psg_sounds.c \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/cpc/cpc_cpcrslib_init_graphics.c \ $(FULL_FILES) ifdef USE_TOOLS $(TOOLS_PATH)/z88dk/cpc/2cdt.exe -n -r cross_$(GAME_NAME)XXX $(BUILD_PATH)/X$(GAME_NAME)XXX_cpc.cpc $(BUILD_PATH)/X$(GAME_NAME)XXX_cpc.cdt rm -rf X$(GAME_NAME)XXX_cpc.dsk $(TOOLS_PATH)/z88dk/cpc/cpcxfsw -nd X$(GAME_NAME)XXX_cpc.dsk $(TOOLS_PATH)/z88dk/cpc/cpcxfsw X$(GAME_NAME)XXX_cpc.dsk -p $(BUILD_PATH)/X$(GAME_NAME)XXX_cpc.cpc x$(GAME_NAME)XXX mv X$(GAME_NAME)XXX_cpc.dsk $(BUILD_PATH)/ cp $(TOOLS_PATH)/z88dk/cpc/nocart/*.rom . $(TOOLS_PATH)/z88dk/cpc/nocart/nocart$(COMPILEDEXT) $(BUILD_PATH)/X$(GAME_NAME)XXX_cpc.dsk $(BUILD_PATH)/X$(GAME_NAME)XXX_gx4000.cpr -c 'run"x$(GAME_NAME)XXX' rm os.rom rm amsdos.rom rm basic.rom rm -rf $(BUILD_PATH)/X$(GAME_NAME)XXX_cpc.cpc rm -rf $(BUILD_PATH)/X$(GAME_NAME)XXX_cpc.prg endif ifdef USE_TOOLS cpc_mode2: $(ASSETS_PATH)/z88dk_xchase.asm $(TOOLS_PATH)/z88dk/cpc/nocart/nocart$(COMPILEDEXT) else cpc_mode2: $(ASSETS_PATH)/z88dk_xchase.asm endif $(Z88DK_PATH)$(MYZ88DK) +cpc -subtype=dsk $(SCCZ80_OPTS) $(INCLUDE_OPTS) \ -pragma-include:$(CFG_PATH)/z88dk/zpragma_clib.inc \ -DYSize=25 -DXSize=80 -D__SCREEN_MODE=2 -D_XL_NO_COLOR \ \ \ $(CPC_GAME_OPTS) \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_CPC_MODE0_SLOWDOWN) \ -D__CPC__ \ -lndos -create-app \ -D__CONIO_GRAPHICS \ \ -pragma-redirect:fputc_cons=fputc_cons_generic \ -o xbin \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/udg/udg_init_graphics.c \ $(CROSS_LIB_PATH)/sound/z88dk/psg/ay-3-8910_psg_sounds.c \ $(ASSETS_PATH)/z88dk_xchase.asm \ $(FULL_FILES) mv xbin $(BUILD_PATH)/ ifdef USE_TOOLS cp $(TOOLS_PATH)/z88dk/cpc/nocart/*.rom . $(TOOLS_PATH)/z88dk/cpc/nocart/nocart$(COMPILEDEXT) xbin.dsk $(BUILD_PATH)/X$(GAME_NAME)_$@_gx4000.cpr -c 'run"XBIN.CPC' rm os.rom rm amsdos.rom rm basic.rom endif mv xbin.dsk $(BUILD_PATH)/X$(GAME_NAME)_$@.dsk rm -rf xbin_BANK_7.bin rm -rf xbin.cpc rm -rf $(BUILD_PATH)/xbin rm -rf xbin ifdef USE_TOOLS cpc_mode1: $(ASSETS_PATH)/z88dk_xchase.asm $(TOOLS_PATH)/z88dk/cpc/nocart/nocart$(COMPILEDEXT) else cpc_mode1: $(ASSETS_PATH)/z88dk_xchase.asm endif $(Z88DK_PATH)$(MYZ88DK) +cpc -subtype=dsk $(SCCZ80_OPTS) $(INCLUDE_OPTS) \ -pragma-include:$(CFG_PATH)/z88dk/zpragma_clib.inc \ -DYSize=25 -DXSize=40 -D__SCREEN_MODE=1 \ \ \ $(CPC_GAME_OPTS) \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_CPC_MODE0_SLOWDOWN) \ -D__CPC__ \ -lndos -create-app \ -D__CONIO_GRAPHICS \ \ -pragma-redirect:fputc_cons=fputc_cons_generic \ -o xbin \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/udg/udg_init_graphics.c \ $(CROSS_LIB_PATH)/sound/z88dk/psg/ay-3-8910_psg_sounds.c \ $(ASSETS_PATH)/z88dk_xchase.asm \ $(FULL_FILES) mv xbin $(BUILD_PATH)/ ifdef USE_TOOLS cp $(TOOLS_PATH)/z88dk/cpc/nocart/*.rom . $(TOOLS_PATH)/z88dk/cpc/nocart/nocart$(COMPILEDEXT) xbin.dsk $(BUILD_PATH)/X$(GAME_NAME)_$@_gx4000.cpr -c 'run"XBIN.CPC' rm os.rom rm amsdos.rom rm basic.rom endif mv xbin.dsk $(BUILD_PATH)/X$(GAME_NAME)_$@.dsk rm -rf xbin_BANK_7.bin rm -rf xbin.cpc rm -rf $(BUILD_PATH)/xbin rm -rf xbin ================================================ FILE: src/makefiles.common/targets/z88dk/extras/Makefile_gal ================================================ # --opt-code-size gal_6k: $(Z88DK_PATH)$(MYZ88DK) +gal $(ZSDCC_OPTS) \ -compiler=sdcc \ $(INCLUDE_OPTS) \ -pragma-need=ansiterminal \ --reserve-regs-iy \ -pragma-include:$(CFG_PATH)/z88dk/zpragma_clib.inc \ -DTINY_GAME -DNO_WALL -DNO_BLINKING \ -D_XL_NO_SLEEP -DLESS_TEXT \ -D__GAL__ \ -DNO_RANDOM_LEVEL \ -D__NO_SCREEN_COLOR_INIT \ -DBOMBS_NUMBER=4 \ -DGHOSTS_NUMBER=8 \ -DNO_DEAD_GHOSTS \ -D__NO_INIT_GRAPHICS \ -DFLAT_ENEMIES \ -D__ALT_HIGHSCORE \ -D__CONIO_GRAPHICS \ -DUSE_TINY_MEMORY_BUFFERS \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_GAL_SLOWDOWN) \ -lndos -create-app -Cz--audio -o $(BUILD_PATH)/X$(GAME_NAME)_TINY_galaksija_6k.prg \ $(TINY_FILES) \ $(SOURCE_PATH)/memory/gal_memory.asm rm -rf $(BUILD_PATH)/X$(GAME_NAME)_TINY_$@.prg ================================================ FILE: src/makefiles.common/targets/z88dk/extras/Makefile_gal_plus ================================================ gal_plus_no_gfx: $(Z88DK_PATH)$(MYZ88DK) +gal -subtype=galaxyp $(SCCZ80_OPTS) \ $(INCLUDE_OPTS) \ -pragma-need=ansiterminal \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_GAL_SLOWDOWN) \ -D__GAL__ -D__GAL_PLUS__ \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS \ -vn -lndos -create-app -o $(BUILD_PATH)/X$(GAME_NAME)_galaksija_plus.prg \ $(FULL_FILES) rm -rf $(BUILD_PATH)/X$(GAME_NAME)_$@.prg ================================================ FILE: src/makefiles.common/targets/z88dk/extras/Makefile_pc88 ================================================ ############################# # PC88 # pc88: pc88_32k # pc88_wav: $(ASSETS_PATH)/z88dk_xchase.asm # pc88_no_gfx: # $(Z88DK_PATH)$(MYZ88DK) +pc88 $(SCCZ80_OPTS) -Cz--audio $(INCLUDE_OPTS) -vn \ # -D__PC88__ \ # -lndos -DXSize=80 -DYSize=23 -D_XL_SLOW_DOWN_FACTOR=2500 \ # -clib=default -pragma-redirect:fputc_cons=fputc_cons_generic \ # -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS -D__BIT_BANG_SOUND -D__DEFAULT_CLEAR_SCREEN \ # $(FULL_FILES) \ # -create-app \ # -o FULL_$@ # rm FULL_$@ # mv FULL_$@.wav $(BUILD_PATH)/X$(GAME_NAME)_$@.wav # mv FULL_$@.t88 $(BUILD_PATH)/X$(GAME_NAME)_$@.t88 pc88_tiny: $(Z88DK_PATH)$(MYZ88DK) +pc88 $(SCCZ80_OPTS) -Cz--audio $(INCLUDE_OPTS) -vn \ -D__PC88__ -DTINY_GAME -DNO_WALL -DNO_BLINKING \ -D_XL_SLOW_DOWN_FACTOR=$(_COMMON_SLOWDOWN_FACTOR)*$(_PC88_SLOWDOWN) \ -lndos -DXSize=80 -DYSize=23 -DTINY_GAME \ -clib=default -pragma-redirect:fputc_cons=fputc_cons_generic \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS -D__DEFAULT_CLEAR_SCREEN \ $(TINY_FILES) \ -create-app \ -o TINY_$@ rm TINY_$@ mv TINY_$@.wav $(BUILD_PATH)/X$(GAME_NAME)_$@.wav mv TINY_$@.t88 $(BUILD_PATH)/X$(GAME_NAME)_$@.t88 ================================================ FILE: src/makefiles.other/chase/alt/Makefile.cc65_alternative_builds ================================================ # ----------------------------------------------- # CC65 # oric1_alt_targets cc65_alt_targets: \ atari_alt_targets \ atari_lynx_alt_targets \ c16_alt_targets \ creativision_alt_targets \ gamate_alt_targets \ nes_alt_targets \ pet_alt_targets \ vic20_alt_targets ############################# # ATARI 8-bit atari_alt_targets: \ atari_no_color_16k_full \ atari_no_color_16k ############################# # ATARI LYNX atari_lynx_alt_targets: \ atari_lynx_light ############################# # C16 # All tested OK # except INIT overflow by 21 for c16_16k_full_no_gfx c16_alt_targets: \ c16_16k_light ############################# # C64 # Tested OK c64_alt_targets: \ c64_8k_cart ############################# # CREATIVISION creativision_alt_targets: \ creativision_24k \ creativision_8k_tiny \ creativision_16k_no_gfx ############################# # GAMATE gamate_alt_targets: \ gamate_tiny \ gamate_light ############################# # CREATIVISION nes_alt_targets: \ nes_no_fx ############################# # ORIC1 # KO: undefined tiles 17 and 18 oric1_alt_targets: \ oric1_16k_light ############################# # PET # All tested OK pet_alt_targets: \ pet_8k \ ############################# # VIC 20 # All tested OK # vic20_unexpanded_turn_based vic20_alt_targets: \ vic20_exp_3k_tiny \ vic20_exp_3k_light_no_gfx \ vic20_exp_8k_full \ vic20_unexpanded_no_gfx ############################################################### ############################# # ATARI 8-BIT atari_no_color_16k_full: $(CC65_PATH)$(MYCC65) $(INCLUDE_OPTS) -O -Cl -t atari \ \ -DNO_HINTS \ \ -DLESS_TEXT \ -DFLAT_ENEMIES \ -D__ALT_SLEEP \ -DNO_RANDOM_LEVEL \ -D__NO_PRINT -D__CONIO_GRAPHICS \ -D__NO_INIT_GRAPHICS \ $(CROSS_LIB_PATH)/sleep/sleep_macros.c \ $(FULL_FILES) -o $(BUILD_PATH)/ALT_FULL_atari_no_color_16k.xex atari_no_color_16k: $(CC65_PATH)$(MYCC65) $(INCLUDE_OPTS) -O -Cl -t atari \ -DLESS_TEXT \ \ -DNO_RANDOM_LEVEL \ -D__NO_PRINT \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS \ $(LIGHT_FILES) \ -o $(BUILD_PATH)/ALT_LIGHT_atari_no_color_16k.xex ############################# # C16 c16_16k_full_no_gfx: $(CC65_PATH)$(MYCC65) $(INCLUDE_OPTS) -Or -t c16 -Cl \ --config $(CFG_PATH)/cc65/c16-16k.cfg \ \ -D__NO_INIT_GRAPHICS \ -DLESS_TEXT \ -DUSE_MEMORY_BUFFERS \ -D_XL_NO_SLEEP \ \ -D__MEMORY_MAPPED_GRAPHICS \ \ -DGHOSTS_NUMBER=8 \ $(CROSS_LIB_PATH)/sound/cc65/c264/c264_sounds.c \ $(SOURCE_PATH)/memory/c16_memory.s \ $(FULL_FILES) -o $(BUILD_PATH)/ALT_FULL_c16_16k_no_gfx.prg c16_16k_light: $(ASSETS_PATH)/8x8_chars.h $(CC65_PATH)$(MYCC65) $(INCLUDE_OPTS) -Or -t c16 \ --config $(CFG_PATH)/cc65/c16-32k.cfg \ \ -DGHOSTS_NUMBER=8 \ \ -D__CONIO_GRAPHICS \ -DUSE_MEMORY_BUFFERS \ $(CROSS_LIB_PATH)/sound/cc65/c264/c264_sounds.c \ $(CROSS_LIB_PATH)/display/init_graphics/cc65/c264/c16_redefined_chars_init_graphics.c \ $(LIGHT_FILES) \ $(SOURCE_PATH)/memory/c16_memory.s \ -o $(BUILD_PATH)/ALT_LIGHT_c16_16k.prg ############################# # C64 c64_8k_cart: $(ASSETS_PATH)/cc65_udc.s $(CC65_PATH)$(MYCC65) $(INCLUDE_OPTS) -O -t c64 \ \ -DLESS_TEXT \ -DGHOSTS_NUMBER=9 \ \ -D__ALT_PRINT \ \ -DROUND_ENEMIES \ -DCBM_SCREEN_CODES \ -D__MEMORY_MAPPED_GRAPHICS \ --config $(CFG_PATH)/cc65/c64_GFXat0xC000.cfg \ $(CROSS_LIB_PATH)/sound/cc65/sid/sid_sounds.c \ $(ASSETS_PATH)/cc65_udc.s \ $(CROSS_LIB_PATH)/display/init_graphics/cc65/c64/c64_init_graphics.c \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c \ $(SOURCE_PATH)/end_screen.c \ $(FULL_FILES) \ -o $(BUILD_PATH)/ALT_FULL_c64_8k_cart.prg $(TOOLS_PATH)/generic/exomizer sfx basic $(BUILD_PATH)/ALT_FULL_c64_8k_cart.prg -o $(BUILD_PATH)/ALT_FULL_c64_8k_exomized.prg python $(TOOLS_PATH)/cc65/c64/prg2crt.py $(BUILD_PATH)/ALT_FULL_c64_8k_exomized.prg $(BUILD_PATH)/ALT_FULL_c64_8k_exomized.crt rm $(BUILD_PATH)/ALT_FULL_c64_8k_cart.prg rm $(BUILD_PATH)/ALT_FULL_c64_8k_exomized.prg ############################# # CREATIVISION creativision_16k_no_gfx: $(CC65_PATH)$(MYCC65) $(INCLUDE_OPTS) -O -t creativision \ -D__NO_SCREEN_COLOR_INIT \ -D__ALT_SLEEP \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS \ --config $(CFG_PATH)/cc65/creativision-16k.cfg \ $(CROSS_LIB_PATH)/sleep/sleep_macros.c \ $(SOURCE_PATH)/end_screen.c \ $(FULL_FILES) \ -o $(BUILD_PATH)/ALT_FULL_creativision_16k.bin dd if=$(BUILD_PATH)/ALT_FULL_creativision_16k.bin ibs=1 count=8192 of=$(BUILD_PATH)/ALT_FULL_creativision_16k_LOW.bin dd if=$(BUILD_PATH)/ALT_FULL_creativision_16k.bin ibs=1 skip=8192 of=$(BUILD_PATH)/ALT_FULL_creativision_16k_HIGH.bin rm $(BUILD_PATH)/ALT_FULL_creativision_16k.bin cat $(BUILD_PATH)/ALT_FULL_creativision_16k_HIGH.bin $(BUILD_PATH)/ALT_FULL_creativision_16k_LOW.bin > $(BUILD_PATH)/ALT_FULL_creativision_16k_SWAPPED.bin rm $(BUILD_PATH)/ALT_FULL_creativision_16k_LOW.bin rm $(BUILD_PATH)/ALT_FULL_creativision_16k_HIGH.bin creativision_18k: $(CC65_PATH)$(MYCC65) $(INCLUDE_OPTS) -O -t creativision \ -D__NO_SCREEN_COLOR_INIT -D__CREATIVISION__ \ -D__ALT_SLEEP \ -D__MEMORY_MAPPED_GRAPHICS -DLESS_TEXT \ --config $(CFG_PATH)/cc65/creativision-18k.cfg \ $(CROSS_LIB_PATH)/sleep/sleep_macros.c \ $(SOURCE_PATH)/end_screen.c \ $(FULL_FILES) \ $(CROSS_LIB_PATH)/display/init_graphics/cc65/creativision/creativision_init_graphics.c \ -o $(BUILD_PATH)/ALT_FULL_creativision_18k.bin dd if=$(BUILD_PATH)/ALT_FULL_creativision_18k.bin bs=8k skip=1 > $(BUILD_PATH)/ALT_FULL_creativision_18k_SWAPPED.bin dd if=$(BUILD_PATH)/ALT_FULL_creativision_18k.bin bs=8k count=1 >> $(BUILD_PATH)/ALT_FULL_creativision_18k_SWAPPED.bin rm $(BUILD_PATH)/ALT_FULL_creativision_18k.bin creativision_24k: $(CC65_PATH)$(MYCC65) $(INCLUDE_OPTS) -O -t creativision \ -D_XL_NO_SLEEP -DLESS_TEXT -D__MEMORY_MAPPED_GRAPHICS -D__NO_INIT_GRAPHICS \ --config $(CFG_PATH)/cc65/creativision-24k.cfg \ $(FULL_FILES) \ $(SOURCE_PATH)/end_screen.c \ -o $(BUILD_PATH)/ALT_FULL_creativision_24k.bin dd if=$(BUILD_PATH)/ALT_FULL_creativision_24k.bin bs=8k skip=1 > $(BUILD_PATH)/ALT_FULL_creativision_24k_SWAPPED.bin dd if=$(BUILD_PATH)/ALT_FULL_creativision_24k.bin bs=8k count=1 >> $(BUILD_PATH)/ALT_FULL_creativision_24k_SWAPPED.bin rm $(BUILD_PATH)/ALT_FULL_creativision_24k.bin creativision_32k: $(CC65_PATH)$(MYCC65) $(INCLUDE_OPTS) -O -t creativision \ -D_XL_NO_SLEEP -DLESS_TEXT -D__MEMORY_MAPPED_GRAPHICS -D__NO_INIT_GRAPHICS \ --config $(CFG_PATH)/cc65/creativision-32k.cfg \ $(FULL_FILES) \ $(SOURCE_PATH)/end_screen.c \ -o $(BUILD_PATH)/ALT_FULL_creativision_32k.bin dd if=$(BUILD_PATH)/ALT_FULL_creativision_32k.bin bs=16k skip=1 > $(BUILD_PATH)/ALT_FULL_creativision_32k_SWAPPED.bin dd if=$(BUILD_PATH)/ALT_FULL_creativision_32k.bin bs=16k count=1 >> $(BUILD_PATH)/ALT_FULL_creativision_32k_SWAPPED.bin rm $(BUILD_PATH)/ALT_FULL_creativision_32k.bin creativision_8k_tiny: $(CC65_PATH)$(MYCC65) $(INCLUDE_OPTS) -O -t creativision \ --config $(CFG_PATH)/cc65/creativision-8k.cfg \ -DTINY_GAME -D_XL_NO_SLEEP \ -D__NO_SCREEN_COLOR_INIT \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS \ $(CROSS_LIB_PATH)/sleep/sleep_macros.c \ $(TINY_FILES) \ -o $(BUILD_PATH)/ALT_TINY_creativision_8k.bin ############################# # GAMATE gamate_light: $(CC65_PATH)$(MYCC65) $(INCLUDE_OPTS) -O -t gamate \ -DLESS_TEXT \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS \ -DGHOSTS_NUMBER=7 \ -DSIMPLE_STRATEGY \ $(LIGHT_FILES) \ -o $(BUILD_PATH)/ALT_LIGHT_gamate.bin $(TOOLS_PATH)/cc65/gamate/gamate-fixcart $(BUILD_PATH)/ALT_LIGHT_gamate.bin gamate_tiny: $(CC65_PATH)$(MYCC65) $(INCLUDE_OPTS) -O -t gamate \ -DTINY_GAME \ -DLESS_TEXT \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS \ -DGHOSTS_NUMBER=7 \ -DSIMPLE_STRATEGY \ $(TINY_FILES) \ -o $(BUILD_PATH)/ALT_TINY_gamate.bin $(TOOLS_PATH)/cc65/gamate/gamate-fixcart $(BUILD_PATH)/ALT_TINY_gamate.bin ############################# # NES nes_no_fx: $(CC65_PATH)$(MYCC65) $(INCLUDE_OPTS) -O -t nes \ \ \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS \ $(SOURCE_PATH)/end_screen.c \ $(FULL_FILES) \ -o $(BUILD_PATH)/ALT_FULL_nes_no_fx.nes ############################# # ORIC1 oric1_16k_light: $(ASSETS_PATH)/6x8_chars.h $(CC65_PATH)$(MYCC65) $(INCLUDE_OPTS) -O -D__ORIC1__ \ -t atmos \ --config $(CFG_PATH)/cc65/atmos_better_tap.cfg \ -D__MEMORY_MAPPED_GRAPHICS \ -D__ALT_MOVE \ $(CROSS_LIB_PATH)/display/init_graphics/cc65/atmos/atmos_redefined_characters_init_graphics.c \ $(LIGHT_FILES) \ -o $(BUILD_PATH)/ALT_LIGHT_oric1_16k.tap ############################# # PET pet_8k: $(CC65_PATH)$(MYCC65) $(INCLUDE_OPTS) -O -t pet -Cl \ -DTINY_GAME -D__NO_INIT_GRAPHICS -D__CONIO_GRAPHICS \ -DUSE_TINY_MEMORY_BUFFERS \ $(TINY_FILES) \ $(SOURCE_PATH)/memory/pet_memory.s \ -o $(BUILD_PATH)/ALT_TINY_pet_8k.prg ############################# # VIC 20 vic20_exp_3k_light_no_gfx: $(CC65_PATH)$(MYCC65) $(INCLUDE_OPTS) -Or -Cl -t vic20 \ --config $(CFG_PATH)/cc65/alt/vic20-3k.cfg \ -DGHOSTS_NUMBER=8 \ \ \ -D__VIC20_EXP_3K \ -D__MEMORY_MAPPED_GRAPHICS \ -DCBM_SCREEN_CODES \ -DUSE_LIGHT_MEMORY_BUFFERS \ -DNO_HINTS \ -DLESS_TEXT \ -D_XL_NO_TEXT_COLOR \ \ -D__ALT_SLEEP \ -D__ALT_DISPLAY_STATS \ -D__ALT_HIGHSCORE \ -D__DEFAULT_CLEAR_SCREEN \ $(CROSS_LIB_PATH)/display/alt_print/simple_alt_stats.c \ $(CROSS_LIB_PATH)/display/init_graphics/cc65/vic20/vic20_init_graphics.c \ $(CROSS_LIB_PATH)/sound/cc65/vic20/vic20_sounds.c \ $(LIGHT_FILES) \ $(SOURCE_PATH)/memory/vic20_memory.s \ $(CROSS_LIB_PATH)/sleep/sleep_macros.c \ -o $(BUILD_PATH)/ALT_LIGHT_vic20_exp_3k_no_gfx.prg vic20_exp_3k_tiny: $(ASSETS_PATH)/cc65_udc_vic20_64_chars.s $(CC65_PATH)$(MYCC65) $(INCLUDE_OPTS) -Or -Cl -t vic20 \ \ -DLESS_TEXT -D__NO_SCREEN_COLOR_INIT -DNO_DEAD_GHOSTS -DGHOSTS_NUMBER=8 \ -DROUND_ENEMIES \ -DTINY_GAME \ --config $(CFG_PATH)/cc65/vic20-3k_GFX.cfg \ -D__MEMORY_MAPPED_GRAPHICS \ -D__VIC20_EXP_3K \ -D__ALT_PRINT \ -DCBM_SCREEN_CODES \ -DUSE_TINY_MEMORY_BUFFERS \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c \ $(CROSS_LIB_PATH)/sound/cc65/vic20/vic20_sounds_3k.c \ $(ASSETS_PATH)/cc65_udc_vic20_64_chars.s \ $(CROSS_LIB_PATH)/display/init_graphics/cc65/vic20/vic20_init_graphics.c \ $(TINY_FILES) \ $(SOURCE_PATH)/memory/vic20_memory.s \ -o $(BUILD_PATH)/ALT_TINY_vic20_exp_3k.prg vic20_exp_8k_full: $(CC65_PATH)$(MYCC65) $(INCLUDE_OPTS) -Or -Cl -t vic20 --config $(CFG_PATH)/cc65/alt/vic20-8k.cfg \ \ -DGHOSTS_NUMBER=8 \ -DSIMPLE_STRATEGY \ -DLESS_TEXT \ -D__ALT_PRINT \ -DNO_HINTS \ \ -D__ALT_SLEEP \ \ -D__MEMORY_MAPPED_GRAPHICS \ -D__VIC20_EXP_8K \ \ -DUSE_MEMORY_BUFFERS \ $(CROSS_LIB_PATH)/sleep/sleep_macros.c \ $(CROSS_LIB_PATH)/sound/cc65/vic20/vic20_sounds.c \ $(CROSS_LIB_PATH)/display/init_graphics/cc65/vic20/vic20_init_graphics.c \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c \ $(FULL_FILES) \ $(SOURCE_PATH)/memory/vic20_memory.s \ $(SOURCE_PATH)/end_screen.c \ -o $(BUILD_PATH)/ALT_FULL_vic20_exp_8k_no_gfx.prg vic20_unexpanded_no_gfx: $(CC65_PATH)$(MYCC65) $(INCLUDE_OPTS) -Or -Cl -t vic20 \ \ \ -DNO_CONTROL_INSTRUCTIONS \ -D_XL_NO_TEXT_COLOR \ -D__VIC20_UNEXPANDED \ -D_XL_NO_SLEEP \ -DLESS_TEXT \ -D__NO_SCREEN_COLOR_INIT \ -DTINY_GAME \ -DGHOSTS_NUMBER=8 \ -DNO_DEAD_GHOSTS \ -DBOMBS_NUMBER=4 \ -D__MEMORY_MAPPED_GRAPHICS \ -D__ALT_DISPLAY_STATS \ -D__ALT_HIGHSCORE \ -DROUND_ENEMIES \ -DUSE_TINY_MEMORY_BUFFERS \ --config $(CFG_PATH)/cc65/alt/vic20_unexpanded.cfg \ $(TINY_FILES) \ $(SOURCE_PATH)/memory/vic20_memory.s \ $(CROSS_LIB_PATH)/sound/cc65/vic20/vic20_sounds_3k.c \ $(CROSS_LIB_PATH)/display/init_graphics/cc65/vic20/vic20_init_graphics.c \ $(CROSS_LIB_PATH)/display/alt_print/simple_alt_stats.c \ -o $(BUILD_PATH)/ALT_TINY_vic20_unexpanded_no_gfx.prg vic20_unexpanded_turn_based: $(CC65_PATH)$(MYCC65) $(INCLUDE_OPTS) -Or -Cl -t vic20 \ \ -D_XL_NO_JOYSTICK \ -DTURN_BASED \ -DNO_CONTROL_INSTRUCTIONS \ -D_XL_NO_TEXT_COLOR \ -D__VIC20_UNEXPANDED \ -D_XL_NO_SLEEP \ -DLESS_TEXT \ -D__NO_SCREEN_COLOR_INIT \ -DTINY_GAME \ -DNO_RANDOM_LEVEL \ -DNO_STATS \ -DGHOSTS_NUMBER=8 \ -DNO_DEAD_GHOSTS \ -DBOMBS_NUMBER=4 \ -D__MEMORY_MAPPED_GRAPHICS \ -D__ALT_DISPLAY_STATS \ -DFLAT_ENEMIES \ -DUSE_TINY_MEMORY_BUFFERS \ --config $(CFG_PATH)/cc65/alt/vic20_unexpanded.cfg \ $(TINY_FILES) \ $(SOURCE_PATH)/memory/vic20_memory.s \ $(CROSS_LIB_PATH)/sound/cc65/vic20/vic20_sounds_3k.c \ $(CROSS_LIB_PATH)/display/init_graphics/cc65/vic20/vic20_init_graphics.c \ $(CROSS_LIB_PATH)/display/alt_print/simple_alt_stats.c \ -o $(BUILD_PATH)/ALT_TINY_vic20_unexpanded_turn_based.prg ================================================ FILE: src/makefiles.other/chase/alt/Makefile.z88dk_alternative_builds ================================================ # ALTERNATIVE VERSIONS # ----------------------------------------------------- # Z88DK include makefiles.other/chase/alt/z88dk_alternative_builds/Makefile.z88dk_alternative_builds_a-n include makefiles.other/chase/alt/z88dk_alternative_builds/Makefile.z88dk_alternative_builds_o-z include makefiles.other/chase/alt/z88dk_alternative_builds/Makefile.z88dk_alternative_builds_zsdcc include makefiles.other/chase/alt/z88dk_alternative_builds/Makefile.z88dk_alternative_builds_qaopm z88dk_alt_targets_sccz80: make $(Z88DK_MAKE_OPTS) z88dk_alt_targets_a-n make $(Z88DK_MAKE_OPTS) z88dk_alt_targets_o-z z88dk_alt_targets: make $(Z88DK_MAKE_OPTS) z88dk_alt_targets_zsdcc make $(Z88DK_MAKE_OPTS) z88dk_alt_targets_sccz80 ================================================ FILE: src/makefiles.other/chase/alt/z88dk_alternative_builds/Makefile.z88dk_alternative_builds_a-n ================================================ # ----------------------------------------------- # Z88DK z88dk_alt_targets_a-n: \ abc80_alt_targets \ ace_alt_targets \ aussie_alt_targets \ c128_z80_alt_targets \ camputers_alt_targets \ cpm_z80_alt_targets \ eg2k_alt_targets \ fp1100_alt_targets \ g800_alt_targets \ lambda_alt_targets \ m5_alt_targets \ mc1000_alt_targets \ microbee_alt_targets \ msx_alt_targets \ mtx_alt_targets \ multi8_alt_targets \ nascom_alt_targets ############################# abc80_alt_targets: \ abc80_tiny ace_alt_targets: \ ace_exp_16k_no_gfx aussie_alt_targets: \ aussie_buffered c128_z80_alt_targets: \ c128_z80_40col_turn_based camputers_alt_targets: \ camputers_lynx_tiny cpm_z80_alt_targets: \ cpm_z80_tiny_buffered \ cpm_z80_buffered \ cpm_z80_vt52 \ cpm_z80_vt100 cpc_alt_targets: \ cpc_no_udg eg2k_alt_targets: \ eg2k_no_gfx fp1100_alt_targets: \ fp1100_tiny g800_alt_targets: \ g800_tiny_turn_based lambda_alt_targets: \ lambda_8k \ lambda_light m5_alt_targets: \ m5_no_gfx \ m5_tiny_no_gfx mc1000_alt_targets: \ mc1000_16k_light microbee_alt_targets: \ microbee_32k_no_gfx \ microbee_32k_wav msx_alt_targets: \ msx_32k_cas mtx_alt_targets: \ mtx_no_gfx \ mtx_16k_no_gfx multi8_alt_targets: \ multi8_light_udg \ multi8_tiny_udg nascom_alt_targets: \ nascom_32k_turn_based ############################# # ABC80 abc80_tiny: $(Z88DK_PATH)$(MYZ88DK) +abc80 $(SCCZ80_OPTS) -lm -subtype=hex -zorg=49200 $(INCLUDE_OPTS) \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS \ -DTINY_GAME -DNO_WALL \ -D__NO_WAIT \ -D__ABC80__ -clib=ansi -vn -lndos -create-app -o abc80t.bin \ $(TINY_FILES) rm abc80t.bin mv abc80t.ihx $(BUILD_PATH)/ALT_TINY_abc80.ihx ############################# # ACE ace_exp_16k_no_gfx: $(Z88DK_PATH)$(MYZ88DK) +ace $(SCCZ80_OPTS) $(INCLUDE_OPTS) \ -D__ACE__ \ \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS \ -clib=ansi -o acengfx.bin -Cz--audio -create-app \ $(SOURCE_PATH)/end_screen.c \ $(FULL_FILES) cp acengfx.wav $(BUILD_PATH)/ALT_FULL_ace_exp_16k_no_gfx.wav rm acengfx.wav rm acengfx.tap rm acengfx.bin ############################# # AUSSIE aussie_buffered: $(Z88DK_PATH)$(MYZ88DK) +cpm $(SCCZ80_OPTS) -laussie \ $(INCLUDE_OPTS) \ -vn \ -D__AUSSIE__ \ \ -D__BIT_BANG_SOUND \ -DXSize=16 \ -DYSize=12 \ -D_XL_NO_COLOR \ \ -DTURN_BASED \ -D__BUFFERED_GRAPHICS \ -D__NO_INIT_GRAPHICS \ -D__ALT_PRINT \ -D__DEFAULT_CLEAR_SCREEN \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c \ $(FULL_FILES) \ -create-app -o aussieb.bin rm aussieb.bin mv aussieb.COM $(BUILD_PATH)/ALT_FULL_aussie_buffered.COM ############################# # C128 Z80 c128_z80_40col_turn_based: $(Z88DK_PATH)$(MYZ88DK) +c128 $(SCCZ80_OPTS) $(INCLUDE_OPTS) \ -lndos -subtype=disk \ -D__C128_Z80__ -DXSize=40 \ \ -DTURN_BASED \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS \ $(SOURCE_PATH)/end_screen.c \ $(FULL_FILES) \ -create-app -oa80tb.bin $(TOOLS_PATH)/generic/c1541 -format "crosschase,0" d64 ALT_FULL_c128_z80_40col_turn_based.d64 $(TOOLS_PATH)/generic/c1541 -attach ALT_FULL_c128_z80_40col_turn_based.d64 -write a80tb.ldr $(TOOLS_PATH)/generic/c1541 -attach ALT_FULL_c128_z80_40col_turn_based.d64 -write a80tb mv ALT_FULL_c128_z80_40col_turn_based.d64 $(BUILD_PATH)/ rm A80TB.LDR rm A80TB rm a80tb.bin ############################# # CAMPUTERS LYNX camputers_lynx_tiny: $(Z88DK_PATH)$(MYZ88DK) +lynx $(SCCZ80_OPTS) $(INCLUDE_OPTS) \ -pragma-redirect:fputc_cons=fputc_cons_generic \ -pragma-redirect:getk=getk_inkey \ -D__CAMPUTERS_LYNX__ \ -vn \ -D__VT52 \ -D_XL_NO_COLOR \ -DTINY_GAME -DNO_WALL \ -lndos \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS \ $(TINY_FILES) \ -create-app -o $(BUILD_PATH)/ALT_TINY_camputers_lynx.bin rm $(BUILD_PATH)/ALT_TINY_camputers_lynx.bin ############################# # CPM cpm_z80_tiny_buffered: $(Z88DK_PATH)$(MYZ88DK) +cpm $(SCCZ80_OPTS) \ $(INCLUDE_OPTS) \ -D__STDIO \ -DXSize=24 \ -DYSize=16 \ -D_XL_NO_COLOR \ -DTINY_GAME -DNO_WALL \ -DTURN_BASED \ -D__BUFFERED_GRAPHICS \ -D__NO_INIT_GRAPHICS \ -D__ALT_PRINT \ -D__DEFAULT_CLEAR_SCREEN \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c \ $(TINY_FILES) \ -create-app -o$(BUILD_PATH)/ALT_FULL_cpm_z80_tiny_buffered.bin rm $(BUILD_PATH)/ALT_FULL_cpm_z80_tiny_buffered.bin # cannot run in Mame (Kaypro 2x) cpm_z80_buffered: $(Z88DK_PATH)$(MYZ88DK) +cpm $(SCCZ80_OPTS) \ $(INCLUDE_OPTS) \ -D__STDIO \ -DXSize=24 \ -DYSize=16 \ -D_XL_NO_COLOR \ \ -DTURN_BASED \ -D__BUFFERED_GRAPHICS \ -D__NO_INIT_GRAPHICS \ -D__ALT_PRINT \ -D__DEFAULT_CLEAR_SCREEN \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c \ $(FULL_FILES) \ -create-app -o$(BUILD_PATH)/ALT_FULL_cpm_z80_buffered.bin rm $(BUILD_PATH)/ALT_FULL_cpm_z80_buffered.bin cpm_z80_vt52: $(Z88DK_PATH)$(MYZ88DK) +cpm $(SCCZ80_OPTS) \ $(INCLUDE_OPTS) \ -D__VT52 \ -D__CPM_80X24__ \ -DLESS_TEXT -D_XL_NO_SLEEP -D__NO_WAIT \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS \ \ -create-app -o$(BUILD_PATH)/ALT_FULL_cpm_vt52.bin \ $(SOURCE_PATH)/end_screen.c \ $(FULL_FILES) rm $(BUILD_PATH)/ALT_FULL_cpm_vt52.bin cpm_z80_vt100: $(Z88DK_PATH)$(MYZ88DK) +cpm $(SCCZ80_OPTS) \ $(INCLUDE_OPTS) \ -D__VT100 \ -D__CPM_80X24__ \ -DLESS_TEXT -D_XL_NO_SLEEP -D__NO_WAIT \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS \ \ -create-app -o$(BUILD_PATH)/ALT_FULL_cpm_vt100.bin \ $(SOURCE_PATH)/end_screen.c \ $(FULL_FILES) rm $(BUILD_PATH)/ALT_FULL_cpm_vt100.bin ############################# # EG2K eg2k_no_gfx: $(Z88DK_PATH)$(MYZ88DK) +trs80 $(SCCZ80_OPTS) \ $(INCLUDE_OPTS) \ -D__EG2K__ \ -subtype=eg2000disk \ -lndos \ -lm \ -D__TRS80__ \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS \ \ -D__VT52 \ -create-app -o eg2kngfx.bin \ $(SOURCE_PATH)/end_screen.c \ $(FULL_FILES) mv eg2kngfx.cmd $(BUILD_PATH)/ALT_FULL_eg2k_no_gfx.cmd rm eg2kngfx.bin ############################# # FP1100 fp1100_tiny: $(Z88DK_PATH)$(MYZ88DK) +fp1100 $(SCCZ80_OPTS) $(INCLUDE_OPTS) \ -pragma-redirect:fputc_cons=fputc_cons_generic \ -D__FP1100__ -vn \ -D__VT52 \ -DTINY_GAME -DNO_WALL \ -lndos \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS \ $(TINY_FILES) \ -create-app -o fp1100t.bin mv fp1100t.d88 $(BUILD_PATH)/ALT_TINY_fp1100.d88 rm fp1100t.bin rm fp1100t_BOOTSTRAP.bin ############################# # G800 g800_tiny_turn_based: $(Z88DK_PATH)$(MYZ88DK) +g800 $(SCCZ80_OPTS) -clib=g850b $(INCLUDE_OPTS) \ -D__G800__ \ -DTURN_BASED \ \ -vn \ -D__INCLUDE_CONIO_H \ -DTINY_GAME -DNO_WALL \ -lndos \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS \ $(TINY_FILES) \ -create-app -o g800ttb.bin rm g800ttb.bin rm g800ttb.rom mv g800ttb.ihx $(BUILD_PATH)/ALT_TINY_g800_turn_based.ihx ############################# # LAMBDA lambda_8k: $(Z88DK_PATH)$(MYZ88DK) +lambda $(SCCZ80_OPTS) $(INCLUDE_OPTS) -vn -D__LAMBDA__ -DTINY_GAME -DNO_WALL -D__NO_SCREEN_COLOR_INIT \ -DLESS_TEXT -D_XL_NO_SLEEP -lndos -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS \ -create-app -o $(BUILD_PATH)/ALT_TINY_lambda_8k.prg \ $(TINY_FILES) rm $(BUILD_PATH)/ALT_TINY_lambda_8k.prg lambda_light: $(Z88DK_PATH)$(MYZ88DK) +lambda $(SCCZ80_OPTS) -vn -D__LAMBDA__ -lndos -create-app -o $(BUILD_PATH)/ALT_LIGHT_lambda.prg \ $(INCLUDE_OPTS) $(LIGHT_FILES) -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS rm $(BUILD_PATH)/ALT_LIGHT_lambda.prg ############################# # M5 m5_no_gfx: $(Z88DK_PATH)$(MYZ88DK) +m5 $(SCCZ80_OPTS) \ $(INCLUDE_OPTS) \ -lm -create-app -Cz--audio -subtype=tape \ -pragma-define:REGISTER_SP=65000 \ -D__M5__ \ -clib=ansi -pragma-define:ansicolumns=32 \ -DLESS_TEXT -D_XL_NO_SLEEP -D__NO_WAIT \ \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS \ -o$(BUILD_PATH)/ALT_FULL_m5_no_gfx.bin \ $(SOURCE_PATH)/end_screen.c \ $(FULL_FILES) rm $(BUILD_PATH)/ALT_FULL_m5_no_gfx.bin rm $(BUILD_PATH)/ALT_FULL_m5_no_gfx.cas m5_tiny_no_gfx: $(Z88DK_PATH)$(MYZ88DK) +m5 $(SCCZ80_OPTS) \ $(INCLUDE_OPTS) \ -lm -create-app -Cz--audio -subtype=tape \ -D__M5__ \ -clib=ansi -pragma-define:ansicolumns=32 \ -DTINY_GAME -DNO_WALL -DLESS_TEXT \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS \ -o$(BUILD_PATH)/ALT_TINY_m5_no_gfx.bin \ $(TINY_FILES) rm $(BUILD_PATH)/ALT_TINY_m5_no_gfx.bin rm $(BUILD_PATH)/ALT_TINY_m5_no_gfx.cas ############################# # MC1000 mc1000_16k_light: $(Z88DK_PATH)$(MYZ88DK) +mc1000 $(SCCZ80_OPTS) $(INCLUDE_OPTS) \ -pragma-define:ansicolumns=32 -subtype=gaming -clib=ansi -D__MC1000__ -vn \ -lndos \ -create-app -o mc1000l.bin \ -Cz--audio -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS \ $(LIGHT_FILES) mv mc1000l.wav $(BUILD_PATH)/ALT_LIGHT_mc1000_16k.wav rm mc1000l.bin rm mc1000l.cas ############################# # MICRO microbee_32k_no_gfx: $(Z88DK_PATH)$(MYZ88DK) +bee $(SCCZ80_OPTS) $(INCLUDE_OPTS) \ -D__BEE__ \ -clib=ansi \ -vn \ \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS \ -lndos -create-app -o $(BUILD_PATH)/ALT_FULL_microbee_32k_no_gfx.prg \ $(SOURCE_PATH)/end_screen.c \ $(FULL_FILES) rm $(BUILD_PATH)/ALT_FULL_microbee_32k_no_gfx.prg microbee_32k_wav: $(Z88DK_PATH)$(MYZ88DK) +bee $(SCCZ80_OPTS) $(INCLUDE_OPTS) -subtype=wav \ -D__BEE__ \ -clib=ansi \ -vn \ \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS \ -lndos -create-app -o $(BUILD_PATH)/ALT_FULL_microbee_32k_wav.prg \ $(SOURCE_PATH)/end_screen.c \ $(FULL_FILES) rm $(BUILD_PATH)/ALT_FULL_microbee_32k_wav.prg ############################# # MSX msx_32k_cas: $(ASSETS_PATH)/8x8_chars.h $(Z88DK_PATH)$(MYZ88DK) +msx $(SCCZ80_ROM_OPTS) $(INCLUDE_OPTS) -lmsxbios \ -DUSE_MSX_BIOS \ -vn -DMSX_VPOKE -D__MSX__ \ -lndos \ -create-app -o $(BUILD_PATH)/ALT_FULL_msx_32k.prg \ -D__MEMORY_MAPPED_GRAPHICS \ -D__ALT_PRINT \ -D__DEFAULT_CLEAR_SCREEN \ -DLESS_TEXT \ -DZ88DK_JOYSTICK \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/msx/msx_redefined_chars_init_graphics.c \ $(CROSS_LIB_PATH)/sound/z88dk/psg/ay-3-8910_psg_sounds.c \ $(SOURCE_PATH)/end_screen.c \ $(FULL_FILES) rm $(BUILD_PATH)/ALT_FULL_msx_32k.prg ############################# # MTX mtx_no_gfx: $(Z88DK_PATH)$(MYZ88DK) +mtx $(SCCZ80_OPTS) -startup=2 $(INCLUDE_OPTS) \ -D__MTX__ -clib=ansi -pragma-define:ansicolumns=32 -create-app -o ALT_FULL_mtx_no_gfx.bin \ \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS \ -lndos \ $(SOURCE_PATH)/end_screen.c \ $(FULL_FILES) rm ALT_FULL_mtx_no_gfx rm ALT_FULL_mtx_no_gfx.bin mv ALT_FULL_mtx_no_gfx.wav $(BUILD_PATH)/ # it may work mtx_16k_no_gfx: $(Z88DK_PATH)$(MYZ88DK) +mtx $(SCCZ80_OPTS) -startup=2 $(INCLUDE_OPTS) -D__MTX__ \ -clib=ansi -pragma-define:ansicolumns=32 -vn -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS -lndos -create-app -o ALT_LIGHT_mtx_no_gfx.bin \ $(LIGHT_FILES) rm ALT_LIGHT_mtx_no_gfx rm ALT_LIGHT_mtx_no_gfx.bin mv ALT_LIGHT_mtx_no_gfx.wav $(BUILD_PATH) ############################# # MULTI multi8_light_udg: $(ASSETS_PATH)/z88dk_xchase.asm $(Z88DK_PATH)$(MYZ88DK) +multi8 $(SCCZ80_OPTS) $(INCLUDE_OPTS) \ -D__MULTI8__ \ -D__VT52 \ -D__CONIO_GRAPHICS \ -lndos \ \ \ -clib=default -pragma-redirect:fputc_cons=fputc_cons_generic \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/udg/udg_init_graphics.c \ $(ASSETS_PATH)/z88dk_xchase.asm \ $(LIGHT_FILES) \ -create-app -o$(BUILD_PATH)/ALT_LIGHT_multi8.bin rm $(BUILD_PATH)/ALT_LIGHT_multi8.bin multi8_tiny_udg: $(ASSETS_PATH)/z88dk_xchase.asm $(Z88DK_PATH)$(MYZ88DK) +multi8 $(SCCZ80_OPTS) $(INCLUDE_OPTS) \ -D__MULTI8__ \ -DTINY_GAME -DNO_WALL \ -D__VT52 \ -D__CONIO_GRAPHICS \ -lndos \ \ \ -clib=default -pragma-redirect:fputc_cons=fputc_cons_generic \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/udg/udg_init_graphics.c \ $(ASSETS_PATH)/z88dk_xchase.asm \ $(TINY_FILES) \ -create-app -o$(BUILD_PATH)/ALT_TINY_multi8.bin rm $(BUILD_PATH)/ALT_TINY_multi8.bin ############################# # NASCOM nascom_32k_turn_based: $(Z88DK_PATH)$(MYZ88DK) +nascom $(SCCZ80_OPTS) $(INCLUDE_OPTS) -clib=ansi -vn -lndos \ -D__NASCOM__ \ -DTURN_BASED \ \ \ \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS \ -lndos -create-app -o $(BUILD_PATH)/ALT_FULL_nascom_32k_turn_based.prg \ $(SOURCE_PATH)/end_screen.c \ $(FULL_FILES) rm $(BUILD_PATH)/ALT_FULL_nascom_32k_turn_based.prg ================================================ FILE: src/makefiles.other/chase/alt/z88dk_alternative_builds/Makefile.z88dk_alternative_builds_o-z ================================================ # ----------------------------------------------- # Z88DK z88dk_alt_targets_o-z: \ oz_alt_targets \ pc6001_alt_targets \ pps_alt_targets \ pv1000_alt_targets \ px4_alt_targets \ px8_alt_targets \ ti82_alt_targets \ ti83_alt_targets \ ti85_alt_targets \ ti86_alt_targets \ trs80_alt_targets \ ts2068_alt_targets \ vz200_alt_targets \ z88_alt_targets \ z9001_alt_targets \ ############################# oz_alt_targets: \ oz_tiny pc6001_alt_targets: \ pc6001_32k_no_gfx pps_alt_targets: \ pps_turn_based pv1000_alt_targets: \ pv1000_light px4_alt_targets: \ px4_chars px8_alt_targets: \ px8_chars \ px8_chars_ansi ti82_alt_targets: \ ti82_chars ti83_alt_targets: \ ti83_chars \ ti83_turn_based ti85_alt_targets: \ ti85_chars \ ti85_turn_based ti86_alt_targets: \ ti86_full trs80_alt_targets: \ trs80_chars_cas \ trs80_tiny_cas \ trs80_wav ts2068_alt_targets: \ ts2068_turn_based vz200_alt_targets: \ vz200_24k z88_alt_targets: \ z88_tiny \ z88_tiny_buffered z9001_alt_targets: \ z9001_16k ############################# # OZ oz_tiny: $(ASSETS_PATH)/z88dk_sprites_definitions.h $(Z88DK_PATH)$(MYZ88DK) +oz $(SCCZ80_OPTS) \ $(INCLUDE_OPTS) \ -D__OZ__ \ -DTINY_GAME -DNO_WALL \ -vn -lndos \ -DXSize=59 \ -DYSize=9 \ -D__Z88DK_SPRITES_GRAPHICS -D__NO_INIT_GRAPHICS \ \ -DLESS_TEXT \ -D_XL_NO_COLOR \ -DNO_RANDOM_LEVEL \ -DSIMPLE_STRATEGY \ -D__ALT_MOVE \ -DNO_CONTROL_INSTRUCTIONS \ -D__NO_SCREEN_COLOR_INIT \ -D__NO_WAIT \ -D_XL_NO_SLEEP \ -D__DEFAULT_CLEAR_SCREEN \ -D__ALT_PRINT \ -o ozt.bin \ $(TINY_FILES) \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c $(TOOLS_PATH)/z88dk/oz/makewzd.exe ozt rm ozt.bin mv ozt.wzd $(BUILD_PATH)/ALT_TINY_oz.wzd ############################# # PC6001 pc6001_32k_no_gfx: $(Z88DK_PATH)$(MYZ88DK) +pc6001 $(SCCZ80_OPTS) $(INCLUDE_OPTS) -Cz--audio -clib=ansi -subtype=32k \ -D__PC6001__ \ -D__ALT_SLEEP \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS \ -lndos -create-app -o $(BUILD_PATH)/ALT_FULL_pc6001_32k_no_gfx.prg \ $(CROSS_LIB_PATH)/sleep/sleep_macros.c \ $(FULL_FILES) rm $(BUILD_PATH)/ALT_FULL_pc6001_32k_no_gfx.prg rm $(BUILD_PATH)/ALT_FULL_pc6001_32k_no_gfx.wav mv $(BUILD_PATH)/ALT_FULL_pc6001_32k_no_gfx.cas $(BUILD_PATH)/ALT_FULL_pc6001_32k_no_gfx.cp6 ############################# # PPS pps_turn_based: $(Z88DK_PATH)$(MYZ88DK) +pps $(SCCZ80_OPTS) $(INCLUDE_OPTS) -pragma-redirect:fputc_cons=fputc_cons_generic \ -D__PPS__ -vn \ -D__VT52 \ -DTURN_BASED \ \ \ -lndos \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS \ -o ppstb.bin \ $(SOURCE_PATH)/end_screen.c \ $(FULL_FILES) mv ppstb.bin $(BUILD_PATH)/ALT_FULL_pps_turn_based.exe ############################# # PV1000 # UDG can be done but differently pv1000_light: $(Z88DK_PATH)$(MYZ88DK) +pv1000 $(SCCZ80_OPTS) $(INCLUDE_OPTS) \ -D__PV1000__ \ -DZ88DK_JOYSTICK \ -D__VT52 \ -D__CONIO_GRAPHICS \ -D__NO_INIT_GRAPHICS \ -lndos \ -clib=default -pragma-redirect:fputc_cons=fputc_cons_generic \ $(LIGHT_FILES) \ -create-app -o$(BUILD_PATH)/ALT_LIGHT_pv1000.bin rm $(BUILD_PATH)/ALT_LIGHT_pv1000.bin rm $(BUILD_PATH)/ALT_LIGHT_pv1000_DATA.bin rm $(BUILD_PATH)/ALT_LIGHT_pv1000_BSS.bin ############################# # PX4 px4_chars: $(Z88DK_PATH)$(MYZ88DK) +cpm $(SCCZ80_OPTS) -lpx4 \ $(INCLUDE_OPTS) \ -D__PX4__ \ -D__ADM3A_WITH_UNDEF \ \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS \ -D__DEFAULT_CLEAR_SCREEN \ -create-app -o px4ch.bin \ $(FULL_FILES) rm px4ch.bin mv PX4CH.COM $(BUILD_PATH)/ALT_FULL_px4.ROM ############################# # PX8 px8_chars: $(Z88DK_PATH)$(MYZ88DK) +cpm $(SCCZ80_OPTS) -subtype=px8 \ $(INCLUDE_OPTS) \ -D__PX8__ \ -D__ADM3A_WITH_UNDEF \ \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS \ -D__DEFAULT_CLEAR_SCREEN \ -create-app -o px8ch.bin \ $(FULL_FILES) rm px8ch.bin mv PX8CH.ROM $(BUILD_PATH)/ALT_FULL_px8_chars.ROM px8_chars_ansi: $(Z88DK_PATH)$(MYZ88DK) +cpm $(SCCZ80_OPTS) -subtype=px8ansi \ $(INCLUDE_OPTS) \ -D__PX8__ \ \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS \ -D__DEFAULT_CLEAR_SCREEN \ -create-app -o px8cha.bin \ $(FULL_FILES) rm px8cha.bin mv PX8CHA.ROM $(BUILD_PATH)/ALT_FULL_px8_chars.ROM ############################# # TI82 ti82_chars: $(Z88DK_PATH)$(MYZ88DK) +ti82 $(SCCZ80_OPTS) \ -DZ88DK_JOYSTICK \ $(INCLUDE_OPTS) -D__TI82__ \ -clib=ansi -pragma-define:ansicolumns=32 \ -vn \ \ -DLESS_TEXT -DSIMPLE_STRATEGY -DNO_HINTS \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS \ -lndos \ -create-app -o ti82ch.bin \ $(FULL_FILES) mv ti82ch.82p $(BUILD_PATH)/ALT_FULL_ti82_chars.82p rm ti82ch.bin ############################# # TI83 ti83_chars: $(Z88DK_PATH)$(MYZ88DK) +ti83 $(SCCZ80_OPTS) \ $(INCLUDE_OPTS) -D__TI83__ \ -DZ88DK_JOYSTICK \ -DXSize=32 \ -clib=ansi -pragma-define:ansicolumns=32 \ -vn \ \ -lndos \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS \ -create-app -oxchasetc \ $(FULL_FILES) mv xchasetc.83p $(BUILD_PATH)/ALT_FULL_ti83_chars.83p rm xchasetc ti83_turn_based: $(Z88DK_PATH)$(MYZ88DK) +ti83 $(SCCZ80_OPTS) \ $(INCLUDE_OPTS) -D__TI83__ \ -DZ88DK_JOYSTICK \ -clib=ansi -pragma-define:ansicolumns=32 \ -vn \ \ -DTURN_BASED \ -D__NO_WAIT \ -DLESS_TEXT -DNO_HINTS -D_XL_NO_COLOR \ -lndos \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS \ $(FULL_FILES) \ -create-app -oxchasett mv xchasett.83p $(BUILD_PATH)/ALT_FULL_ti83_turn_based.83p rm xchasett ############################# # TI85 ti85_chars: $(Z88DK_PATH)$(MYZ88DK) +ti85 $(SCCZ80_OPTS) \ $(INCLUDE_OPTS) -D__TI85__ \ -DZ88DK_JOYSTICK \ -DXSize=32 \ -clib=ansi -pragma-define:ansicolumns=32 \ -vn \ \ -lndos \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS \ -create-app -o ti85ch \ $(FULL_FILES) mv ti85ch.85s $(BUILD_PATH)/ALT_FULL_ti85_chars.85s rm ti85ch ti85_turn_based: $(ASSETS_PATH)/z88dk_sprites_definitions.h $(Z88DK_PATH)$(MYZ88DK) +ti85 $(SCCZ80_OPTS) \ $(INCLUDE_OPTS) \ -D__TI85__ \ -DZ88DK_JOYSTICK \ \ -DTURN_BASED \ -vn -lndos \ -D__ALT_PRINT \ \ -D__Z88DK_SPRITES_GRAPHICS -D__NO_INIT_GRAPHICS \ \ -DLESS_TEXT \ -create-app -o ti85tb \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c \ $(FULL_FILES) mv ti85tb.85s $(BUILD_PATH)/ALT_FULL_ti85_turn_based.85s rm ti85tb ############################# # TI86 ti86_full: $(Z88DK_PATH)$(MYZ88DK) +ti86 $(SCCZ80_OPTS) \ $(INCLUDE_OPTS) \ -D__TI86__ \ \ -DZ88DK_JOYSTICK \ -DLESS_TEXT \ -D_XL_NO_COLOR \ \ -DNO_HINTS \ -clib=ansi -pragma-define:ansicolumns=32 \ -vn \ -lndos \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS \ -create-app -o ti86fu \ $(FULL_FILES) mv ti86fu.86p $(BUILD_PATH)/ALT_FULL_ti86.86p rm ti86fu ############################# # TRS80 trs80_chars_cas: $(Z88DK_PATH)$(MYZ88DK) +trs80 $(SCCZ80_OPTS) -lndos \ $(INCLUDE_OPTS) \ -pragma-redirect:getk=getk_inkey \ -pragma-define:REGISTER_SP=0xffb5 \ -lm -create-app \ -D__TRS80__ \ \ -D__VT52 \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS \ -o$(BUILD_PATH)/ALT_FULL_trs80_chars.bin \ $(SOURCE_PATH)/end_screen.c \ $(FULL_FILES) rm $(BUILD_PATH)/ALT_FULL_trs80_chars.bin trs80_tiny_cas: $(Z88DK_PATH)$(MYZ88DK) +trs80 $(SCCZ80_OPTS) -lndos \ $(INCLUDE_OPTS) \ -pragma-redirect:getk=getk_inkey \ -lm -create-app \ -D__TRS80__ \ -D__VT52 \ -DTINY_GAME -DNO_WALL -DLESS_TEXT -D_XL_NO_SLEEP \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS \ -o$(BUILD_PATH)/ALT_TINY_trs80.bin \ $(TINY_FILES) rm $(BUILD_PATH)/ALT_TINY_trs80.bin trs80_wav: $(Z88DK_PATH)$(MYZ88DK) +trs80 $(SCCZ80_OPTS) -lndos -subtype=wav \ $(INCLUDE_OPTS) \ -pragma-redirect:getk=getk_inkey \ -pragma-define:REGISTER_SP=0xffb5 \ -lm -create-app \ -D__TRS80__ \ \ -D__VT52 \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS \ -o$(BUILD_PATH)/ALT_FULL_trs80.bin \ $(SOURCE_PATH)/end_screen.c \ $(FULL_FILES) rm $(BUILD_PATH)/ALT_FULL_trs80.bin ############################# # TS2068 ts2068_turn_based: $(Z88DK_PATH)$(MYZ88DK) +ts2068 $(SCCZ80_OPTS) $(INCLUDE_OPTS) \ -clib=ansi \ -DTURN_BASED \ -D__TS2068__ \ -D_XL_NO_COLOR \ -vn \ \ -lndos \ -D__INCLUDE_CONIO_H \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS \ $(FULL_FILES) \ -create-app -o $(BUILD_PATH)/ALT_FULL_ts2068_turn_based.bin rm $(BUILD_PATH)/ALT_FULL_ts2068_turn_based.bin rm $(BUILD_PATH)/ALT_FULL_ts2068_turn_based_BANK_7.bin ############################# # VZ200 vz200_24k: $(Z88DK_PATH)$(MYZ88DK) +vz $(SCCZ80_OPTS) $(INCLUDE_OPTS) -vn \ -D__VZ__ \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS \ -clib=ansi -lndos -create-app -o $(BUILD_PATH)/ALT_FULL_vz200_24k.vz \ $(SOURCE_PATH)/end_screen.c \ $(FULL_FILES) rm $(BUILD_PATH)/ALT_FULL_vz200_24k.cas ############################# # Z88 z88_tiny: $(ASSETS_PATH)/z88dk_sprites_definitions.h $(Z88DK_PATH)$(MYZ88DK) +z88 $(SCCZ80_OPTS) -subtype=app \ $(INCLUDE_OPTS) \ -D__Z88__ \ -DTINY_GAME -DNO_WALL \ -vn -lndos \ -D__ALT_PRINT \ -D__Z88DK_SPRITES_GRAPHICS \ \ -DLESS_TEXT \ -D__NO_WAIT -DBAD_PAGES=1 \ -D_XL_NO_SLEEP \ -D_XL_NO_COLOR \ -DBOMBS_NUMBER=2 \ -DGHOSTS_NUMBER=6 \ -D__DEFAULT_CLEAR_SCREEN \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/z88/z88_init_graphics.c \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c \ $(TINY_FILES) \ -create-app -o z88tiny.bin rm -rf z88tiny_bss_fardata.bin rm z88tiny.bin rm z88tiny_BSS.bin rm z88tiny_DATA.bin mv z88tiny.63 $(BUILD_PATH)/ALT_TINY_z88.63 mv z88tiny.epr $(BUILD_PATH)/ALT_TINY_z88.epr # it fails with sdcc z88_tiny_buffered: $(Z88DK_PATH)$(MYZ88DK) +z88 $(SCCZ80_OPTS) -subtype=app \ $(INCLUDE_OPTS) \ -D__Z88__ \ -DTINY_GAME -DNO_WALL \ -DXSize=79 \ -DYSize=6 \ \ -vn -lndos \ -D__BUFFERED_GRAPHICS -DTURN_BASED \ -DLESS_TEXT \ -D_XL_NO_COLOR \ -DSIMPLE_STRATEGY \ -D__NO_SCREEN_COLOR_INIT \ -D__ALT_PRINT \ -D__DEFAULT_CLEAR_SCREEN \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/z88/z88_init_graphics.c \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c \ $(TINY_FILES) \ -create-app -o z88tinyt.bin rm z88tinyt.bin rm z88tinyt_BSS.bin rm z88tinyt_DATA.bin rm -rf z88tinyt_bss_fardata.bin mv z88tinyt.63 $(BUILD_PATH)/ALT_TINY_z88_buffered.63 mv z88tinyt.epr $(BUILD_PATH)/ALT_TINY_z88_buffered.epr ############################# # Z9001 z9001_16k: $(Z88DK_PATH)$(MYZ88DK) +z9001 $(SCCZ80_OPTS) $(INCLUDE_OPTS) -clib=ansi \ -D__Z9001__ -vn \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS \ -lndos -create-app -o $(BUILD_PATH)/ALT_LIGHT_z9001.z80 \ $(LIGHT_FILES) rm $(BUILD_PATH)/ALT_LIGHT_z9001.z80 ================================================ FILE: src/makefiles.other/chase/alt/z88dk_alternative_builds/Makefile.z88dk_alternative_builds_qaopm ================================================ # ------------------------------------------------------------------------------------------ # Z88DK QAOPM # z88dk_alt_targets_qaopm: \ zx80_alt_targets_qaopm \ zx81_alt_targets_qaopm # ------------------------------------------------------------------------------------------ zx80_alt_targets_qaopm: \ zx80_16k_turn_based_qaopm zx81_alt_targets_qaopm: \ zx81_16k_qaopm \ zx81_16k_turn_based_qaopm \ zx81_16k_wrx_qaopm \ zx81_32k_wrx_qaopm \ zx81_32k_wrx_turn_based_qaopm ################################################################### # ZX80 QAOPM zx80_16k_turn_based_qaopm: $(Z88DK_PATH)$(MYZ88DK) +zx80 $(SCCZ80_OPTS) $(INCLUDE_OPTS) -vn \ -D__ZX80__ \ -DZ88DK_JOYSTICK \ -DTURN_BASED \ -D__ALT_SLEEP \ -D__CONIO_GRAPHICS \ -D__NO_INIT_GRAPHICS \ -lndos \ -create-app -o $(BUILD_PATH)/ALT_FULL_zx80_16k_turn_based_qaopm.prg \ $(CROSS_LIB_PATH)/sleep/sleep_macros.c \ $(SOURCE_PATH)/end_screen.c \ $(FULL_FILES) rm $(BUILD_PATH)/ALT_FULL_zx80_16k_turn_based_qaopm.prg ################################################################### # ZX81 QAOPM zx81_16k_turn_based_qaopm: $(Z88DK_PATH)$(MYZ88DK) +zx81 $(ZSDCC_OPTS) \ -compiler=sdcc \ $(INCLUDE_OPTS) \ \ -D__ZX81__ \ -DZ88DK_JOYSTICK \ -DTURN_BASED \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS \ -lndos \ -create-app -o $(BUILD_PATH)/ALT_FULL_zx81_16k_turn_based_qaopm.prg \ $(SOURCE_PATH)/end_screen.c \ $(FULL_FILES) rm $(BUILD_PATH)/ALT_FULL_zx81_16k_turn_based_qaopm.prg zx81_16k_qaopm: $(Z88DK_PATH)$(MYZ88DK) +zx81 $(ZSDCC_OPTS) \ $(INCLUDE_OPTS) \ -compiler=sdcc \ --opt-code-size \ -vn \ -D__ZX81__ \ -DZ88DK_JOYSTICK \ -DQAOPM \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS \ -lndos \ -create-app -o $(BUILD_PATH)/ALT_FULL_zx81_16k_qaopm.prg \ $(SOURCE_PATH)/end_screen.c \ $(FULL_FILES) rm $(BUILD_PATH)/ALT_FULL_zx81_16k_qaopm.prg zx81_16k_wrx_qaopm: $(ASSETS_PATH)/z88dk_sprites_definitions.h $(Z88DK_PATH)$(MYZ88DK) +zx81 $(SCCZ80_OPTS) -subtype=wrx -clib=wrx \ $(INCLUDE_OPTS) -O3 \ -pragma-include:$(CFG_PATH)/z88dk/zpragma_clib_no_printf.inc \ -DZ88DK_JOYSTICK \ \ -DGHOSTS_NUMBER=6 \ -DXSize=36 \ -DYSize=35 \ -vn \ -D__ZX81__ \ -D__Z88DK_SPRITES_GRAPHICS \ -DQAOPM \ -lndos \ -DLESS_TEXT \ -D_XL_NO_COLOR \ -DSIMPLE_STRATEGY \ -D__NO_SCREEN_COLOR_INIT \ -D__ALT_PRINT \ -DFEWER_SPRITES \ -create-app -o $(BUILD_PATH)/ALT_LIGHT_zx81_16k_wrx_qaopm.prg \ $(LIGHT_FILES) \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/zx81/zx81_init_graphics.c \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c rm $(BUILD_PATH)/ALT_LIGHT_zx81_16k_wrx_qaopm.prg zx81_32k_wrx_qaopm: $(ASSETS_PATH)/z88dk_sprites_definitions.h $(Z88DK_PATH)$(MYZ88DK) +zx81 $(SCCZ80_OPTS) -subtype=wrx -clib=wrx \ $(INCLUDE_OPTS) -O3 \ -pragma-include:$(CFG_PATH)/z88dk/zpragma_clib_no_printf.inc \ -pragma-define:hrgpage=36096 \ -DGHOSTS_NUMBER=6 \ \ -DXSize=36 \ -DYSize=35 \ -DZ88DK_JOYSTICK \ -DQAOPM \ -vn \ -D__ZX81__ \ -D__Z88DK_SPRITES_GRAPHICS \ -lndos \ -DLESS_TEXT \ -D_XL_NO_COLOR \ -DSIMPLE_STRATEGY \ -D__NO_SCREEN_COLOR_INIT \ -D__ALT_PRINT \ -DFEWER_SPRITES \ -create-app -o $(BUILD_PATH)/ALT_FULL_zx81_32k_wrx_qaopm.prg \ $(FULL_FILES) \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/zx81/zx81_init_graphics.c \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c rm $(BUILD_PATH)/ALT_FULL_zx81_32k_wrx_qaopm.prg zx81_32k_wrx_turn_based_qaopm: $(ASSETS_PATH)/z88dk_sprites_definitions.h $(Z88DK_PATH)$(MYZ88DK) +zx81 $(SCCZ80_OPTS) -subtype=wrx -clib=wrx \ $(INCLUDE_OPTS) -O3 \ -pragma-include:$(CFG_PATH)/z88dk/zpragma_clib_no_printf.inc \ -pragma-define:hrgpage=36096 \ -DZ88DK_JOYSTICK \ -DQAOPM \ -DGHOSTS_NUMBER=9 \ -DTURN_BASED \ -DXSize=36 \ -DYSize=35 \ -vn \ -D__ZX81__ \ -D__Z88DK_SPRITES_GRAPHICS \ -lndos \ -DLESS_TEXT \ -D_XL_NO_COLOR \ -DSIMPLE_STRATEGY \ -D__NO_SCREEN_COLOR_INIT \ -D__ALT_PRINT \ -DFEWER_SPRITES \ -create-app -o $(BUILD_PATH)/ALT_FULL_zx81_32k_wrx_turn_based_qaopm.prg \ $(FULL_FILES) \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/zx81/zx81_init_graphics.c \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c rm $(BUILD_PATH)/ALT_FULL_zx81_32k_wrx_turn_based_qaopm.prg ================================================ FILE: src/makefiles.other/chase/alt/z88dk_alternative_builds/Makefile.z88dk_alternative_builds_zsdcc ================================================ # ------------------------------------------------------------------------------------------ # Z88DK ALT ZSDCC # z88dk_alt_targets_zsdcc: \ zx81_alt_targets # ------------------------------------------------------------------------------------------ zx81_alt_targets: \ zx81_light \ zx81_8k \ zx81_16k_turn_based \ zx81_16k_wrx \ zx81_32k_wrx \ ################################################################### # ZX81 zx81_16k_wrx: $(ASSETS_PATH)/z88dk_sprites_definitions.h $(Z88DK_PATH)$(MYZ88DK) +zx81 $(SCCZ80_OPTS) -subtype=wrx -clib=wrx \ $(INCLUDE_OPTS) \ -pragma-include:$(CFG_PATH)/z88dk/zpragma_clib_no_printf.inc \ -D__ALT_MODE \ -DGHOSTS_NUMBER=6 \ -DXSize=36 \ -DYSize=35 \ -vn \ -D__ZX81__ \ -D__Z88DK_SPRITES_GRAPHICS \ -DLESS_PRINT \ -lndos \ \ -DLESS_TEXT \ -D_XL_NO_COLOR \ -DSIMPLE_STRATEGY \ -D__NO_SCREEN_COLOR_INIT \ -D__ALT_PRINT \ -DFEWER_SPRITES \ -create-app -o $(BUILD_PATH)/ALT_LIGHT_zx81_16k_wrx.prg \ $(LIGHT_FILES) \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/zx81/zx81_init_graphics.c \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c rm $(BUILD_PATH)/ALT_LIGHT_zx81_16k_wrx.prg zx81_light: $(Z88DK_PATH)$(MYZ88DK) +zx81 $(ZSDCC_OPTS) \ -compiler=sdcc \ $(INCLUDE_OPTS) \ -vn \ -D__ZX81__ -DLIGHT_GAME \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS \ -D_XL_NO_SLEEP \ -lndos \ -create-app -o $(BUILD_PATH)/ALT_LIGHT_zx81_8k.prg \ $(LIGHT_FILES) rm $(BUILD_PATH)/ALT_LIGHT_zx81_8k.prg zx81_8k: $(Z88DK_PATH)$(MYZ88DK) +zx81 $(ZSDCC_OPTS) \ -compiler=sdcc \ $(INCLUDE_OPTS) \ -vn \ -D__ZX81__ -DTINY_GAME -DROUND_ENEMIES \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS \ -D__ALT_SLEEP \ -D__ALT_SLEEP \ -lndos \ -create-app -o $(BUILD_PATH)/ALT_TINY_zx81_8k.prg \ $(TINY_FILES) rm $(BUILD_PATH)/ALT_TINY_zx81_8k.prg # ZX81_IJKL EXTRA zx81_16k_turn_based: $(Z88DK_PATH)$(MYZ88DK) +zx81 $(ZSDCC_OPTS) \ -compiler=sdcc \ $(INCLUDE_OPTS) \ \ -D__ZX81__ \ -DTURN_BASED \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS \ -lndos \ -create-app -o $(BUILD_PATH)/ALT_FULL_zx81_16k_turn_based.prg \ $(SOURCE_PATH)/end_screen.c \ $(FULL_FILES) rm $(BUILD_PATH)/ALT_FULL_zx81_16k_turn_based.prg ================================================ FILE: src/makefiles.other/chase/bench/Makefile.cc65_bench ================================================ c64_bench: $(CC65_PATH)$(MYCC65) $(INCLUDE_OPTS) -O -t c64 \ -DBENCHMARK -DBENCHMARK_MAX=40 \ \ --config $(CFG_PATH)/cc65/c64_GFXat0xC000.cfg \ -DCBM_SCREEN_CODES \ -D__MEMORY_MAPPED_GRAPHICS \ $(CROSS_LIB_PATH)/sound/cc65/sid/sid_sounds.c \ $(CROSS_LIB_PATH)/display/init_graphics/cc65/c64/udc.s \ $(CROSS_LIB_PATH)/display/init_graphics/cc65/c64/c64_init_graphics.c \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c \ $(SOURCE_PATH)/end_screen.c \ $(FULL_FILES) \ -o $(BUILD_PATH)/FULL_c64.prg $(TOOLS_PATH)/generic/exomizer sfx basic $(BUILD_PATH)/FULL_c64.prg -o $(BUILD_PATH)/FULL_c64_exomized.prg python $(TOOLS_PATH)/cc65/c64/prg2crt.py $(BUILD_PATH)/FULL_c64_exomized.prg $(BUILD_PATH)/FULL_c64_exomized.crt rm $(BUILD_PATH)/FULL_c64.prg ================================================ FILE: src/makefiles.other/chase/experimental/Makefile.z88dk_experimental_targets ================================================ # ----------------------------------------------------------------------- # EXPERIMENTAL # Targets which are either impossible to test or that are known to be broken because of bugs in their respective dev-kit DEBUG_MACROS ?= \ -D__NORMALIZED_RAND \ -DXSize=79 \ -DYSize=22 \ -D__STDIO \ -DNO_RANDOM_LEVEL \ -D__NO_WAIT \ -D__NO_SCREEN_COLOR_INIT \ -D__NO_PRINT \ -D__NO_PRINT \ -D_XL_NO_SLEEP \ -D_XL_NO_COLOR \ -DNO_CHASE \ -DTINY_GAME \ -DTURN_BASED \ -D__NO_GRAPHICS \ -D__NO_INIT_GRAPHICS \ -D__DEFAULT_CLEAR_SCREEN # # No full support in Z88DK / Untestable abc800_tiny: $(Z88DK_PATH)$(MYZ88DK) +abc800 $(SCCZ80_OPTS) -zorg=40000 \ -D__ABC800__ \ -D__ADM3A \ -DTINY_GAME -DLESS_TEXT -D_XL_NO_SLEEP \ -o$(BUILD_PATH)/TINY_abc800.bin \ $(SOURCE_PATH)/display_macros.c \ $(SOURCE_PATH)/enemy.c \ $(SOURCE_PATH)/level.c $(SOURCE_PATH)/character.c $(SOURCE_PATH)/game_text.c \ $(SOURCE_PATH)/strategy.c $(SOURCE_PATH)/input_macros.c \ $(SOURCE_PATH)/main.c # No full support in Z88DK / Untestable abc800_light: $(Z88DK_PATH)$(MYZ88DK) +abc800 $(SCCZ80_OPTS) -lm \ -zorg=49200 $(INCLUDE_OPTS) \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS \ -D__VT100 \ -D__NO_WAIT \ -D__ABC80__ -vn -lndos \ $(LIGHT_FILES) $(TOOLS_PATH)/z88dk/abc80/bin2bac2$(COMPILEDEXT) -800 a.bin $(BUILD_PATH)/LIGHT_ABC800.bac 49200 mv a.bin $(BUILD_PATH)/LIGHT_abc800.bin # No full support in Z88DK / Untestable hello_abc800: $(Z88DK_PATH)$(MYZ88DK) +abc800 $(SCCZ80_OPTS) -lm -subtype=hex -zorg=49200 \ -lndos -create-app \ ./test/helloworld_getchar.c $(TOOLS_PATH)/z88dk/abc80/bin2bac2$(COMPILEDEXT) a.bin $(BUILD_PATH)/hello.bac 49200 $(TOOLS_PATH)/z88dk/abc80/dosgen$(COMPILEDEXT) $(BUILD_PATH)/HELLO_abc800.dsk $(TOOLS_PATH)/z88dk/abc80/doscopy$(COMPILEDEXT) $(BUILD_PATH)/HELLO_abc800.dsk -b $(BUILD_PATH)/hello.bac # hello_mtx512: # $(Z88DK_PATH)$(MYZ88DK) +mtx -clib=ansi -startup=2 $(SCCZ80_OPTS) \ # -lndos -create-app \ # ./test/helloworld_getchar.c # mv a $(BUILD_PATH) # mv a.wav $(BUILD_PATH) # rm a.bin # zcc +mtx world.c -startup=2 -create-app hello_mtx512: $(Z88DK_PATH)$(MYZ88DK) +mtx -startup=2 $(SCCZ80_OPTS) \ ./test/helloworld.c \ -create-app mv a $(BUILD_PATH) mv a.wav $(BUILD_PATH) rm a.bin cp $(BUILD_PATH)/a /cygdrive/c/Emulation/TEST/memu/tapes/HELLO512.MTX cp $(BUILD_PATH)/a /cygdrive/c/Emulation/TEST/mess0118b/A hello_mtx500: $(Z88DK_PATH)$(MYZ88DK) +mtx $(SCCZ80_OPTS) \ ./test/helloworld.c \ -create-app mv a $(BUILD_PATH) mv a.wav $(BUILD_PATH) rm a.bin cp $(BUILD_PATH)/a /cygdrive/c/Emulation/TEST/memu/tapes/HELLO500.MTX cp $(BUILD_PATH)/a /cygdrive/c/Emulation/TEST/mess0118b/A abc800_conio: $(Z88DK_PATH)$(MYZ88DK) +abc800 $(SCCZ80_OPTS) -lm -subtype=hex -zorg=49200 \ $(INCLUDE_OPTS) \ -pragma-include:$(CFG_PATH)/z88dk/zpragma_clib.inc \ -D__INCLUDE_CONIO_H \ -D__ABC800__ -vn \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS \ -DLESS_TEXT \ -DSIMPLE_STRATEGY \ \ -DNO_HINTS \ -D__NO_WAIT \ -DNO_BORDER \ -DNO_CONTROL_INSTRUCTIONS \ -DNO_RANDOM_LEVEL \ -D__NO_SCREEN_COLOR_INIT \ -D_XL_NO_SLEEP \ -DFLAT_ENEMIES \ -lndos -create-app \ $(FULL_FILES) $(TOOLS_PATH)/z88dk/abc80/bin2bac2$(COMPILEDEXT) a.bin $(BUILD_PATH)/xchase.bac 49200 $(TOOLS_PATH)/z88dk/abc80/dosgen$(COMPILEDEXT) $(BUILD_PATH)/FULL_$@.dsk $(TOOLS_PATH)/z88dk/abc80/doscopy$(COMPILEDEXT) $(BUILD_PATH)/FULL_$@.dsk -b $(BUILD_PATH)/xchase.bac rm a.bin rm $(BUILD_PATH)/xchase.bac mv a.ihx $(BUILD_PATH)/FULL_$@.ihx # No full support in Z88DK / Untestable abc800_32k: $(Z88DK_PATH)$(MYZ88DK) +abc800 $(SCCZ80_OPTS) -lm $(INCLUDE_OPTS) \ -D__ABC80__ -vn \ -D__CONIO_GRAPHICS -D__INCLUDE_CONIO_H -D__NO_INIT_GRAPHICS \ -lndos \ $(SOURCE_PATH)/end_screen.c \ $(FULL_FILES) # No resl support in CC65 atari2600_graphics_test: $(CC65_PATH)$(MYCC65) $(INCLUDE_OPTS) -O -t atari2600 \ -D__ATARI2600__ \ $(DEBUG_MACROS) \ -DTINY_GAME \ $(SOURCE_PATH)/../test/atari2600_graphics_test.c \ -o $(BUILD_PATH)/atari2600_graphics_test.rom # No resl support in CC65 atari2600_tiny: $(CC65_PATH)$(MYCC65) $(INCLUDE_OPTS) -O -t atari2600 \ -D__ATARI2600__ \ $(DEBUG_MACROS) \ -DTINY_GAME \ $(TINY_FILES) \ -o $(BUILD_PATH)/TINY_atari2600.rom # Z88DK target is broken c7420: $(Z88DK_PATH)$(MYZ88DK) +c7420 $(SCCZ80_OPTS) \ $(INCLUDE_OPTS) \ -lndos \ -D__STDIO \ -D_XL_NO_COLOR \ -D__BUFFERED_GRAPHICS -D__ALT_PRINT \ -DLESS_TEXT -D_XL_NO_SLEEP -D__NO_WAIT \ -D__NO_INIT_GRAPHICS \ -create-app \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c \ $(FULL_FILES) rm a.bin mv _a.bas $(BUILD_PATH)/FULL_c7420.bas # Z88DK target is broken c7420_tiny: $(Z88DK_PATH)$(MYZ88DK) +c7420 $(SCCZ80_OPTS) \ $(INCLUDE_OPTS) \ -lndos \ -D__STDIO \ -D_XL_NO_COLOR \ -D__BUFFERED_GRAPHICS -D__ALT_PRINT \ -DTINY_GAME -DLESS_TEXT -D_XL_NO_SLEEP -D__NO_WAIT \ -D__NO_INIT_GRAPHICS \ -create-app \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c \ $(TINY_FILES) rm a.bin mv _a.bas $(BUILD_PATH)/TINY_c7420.bas # Z88DK target is broken m100: $(Z88DK_PATH)$(MYZ88DK) +m100 $(SCCZ80_OPTS) $(INCLUDE_OPTS) \ -D__M100__ \ -DXSize=32 \ -DYSize=24 \ -D__NO_SCREEN_COLOR_INIT \ -D_XL_NO_COLOR \ \ -D__VT52 \ -D__CONIO_GRAPHICS \ -lndos \ -D__NO_INIT_GRAPHICS \ $(FULL_FILES) \ -create-app -o$(BUILD_PATH)/FULL_m100.bin rm $(BUILD_PATH)/FULL_m100.bin # No emulator exixts rex: $(Z88DK_PATH)$(MYZ88DK) +rex -O0 $(SCCZ80_OPTS) $(INCLUDE_OPTS) \ -D__REX__ \ -DTURN_BASED \ -v \ -D__REX_GRAPHICS \ -D__STDIO \ -D_XL_NO_COLOR \ \ -lndos \ -D__NO_PRINT \ -D__NO_WAIT \ -D_XL_NO_SLEEP \ -D__NO_PRINT \ -D__DEFAULT_CLEAR_SCREEN \ $(FULL_FILES) \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/rex/rex_init_graphics.c \ -create-app -o $(BUILD_PATH)/FULL_rex.bin rm $(BUILD_PATH)/FULL_rex_BSS.bin rm $(BUILD_PATH)/FULL_rex.bin # 'fputc_callee' not defined rex_buffered: $(Z88DK_PATH)$(MYZ88DK) +rex $(SCCZ80_OPTS) $(INCLUDE_OPTS) \ -D__REX__ \ -DTURN_BASED \ -vn \ -D__BUFFERED_GRAPHICS \ -D__STDIO \ -D_XL_NO_COLOR \ \ -lndos \ -D__NO_PRINT \ -D__NO_WAIT \ -D_XL_NO_SLEEP \ -D__NO_PRINT \ -D__NO_INIT_GRAPHICS \ -D__DEFAULT_CLEAR_SCREEN \ $(FULL_FILES) \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/rex/rex_init_graphics.c \ -create-app -o $(BUILD_PATH)/FULL_rex_buffered.bin rm $(BUILD_PATH)/FULL_rex_buffered_BSS.bin rm $(BUILD_PATH)/FULL_rex_buffered.bin # Z88DK target is broken x07: x07_tiny x07_tiny: $(Z88DK_PATH)$(MYZ88DK) +x07 $(SCCZ80_OPTS) $(INCLUDE_OPTS) \ -Cz--audio \ -DBOMBS_NUMBER=2 \ -DGHOSTS_NUMBER=6 \ -DLESS_TEXT \ \ -DNO_CONTROL_INSTRUCTIONS \ -DNO_RANDOM_LEVEL \ -D__NO_SCREEN_COLOR_INIT \ -D__X07__ \ -vn \ -D__VT52 \ -D_XL_NO_COLOR \ -DTINY_GAME \ -lndos \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS \ $(TINY_FILES) \ -create-app -o $(BUILD_PATH)/TINY_x07.bin rm $(BUILD_PATH)/TINY_x07.bin ================================================ FILE: src/makefiles.other/chase/tests/Makefile.tests ================================================ ######################################################### # (FAST) SIMPLE TESTS include ./makefiles.common/auxiliary/Makefile_compilers include ./games/chase/Makefile.chase ####################################################### # (LONG) TESTS # Compilers and Dev-kits covered: # - gcc # TODO: gcc_buffered no longer available simple_test: gcc_buffered test_stdio_extra: gcc_full_tests ####################################################### # TESTS EXCLUDING Z88DK # Compilers and Dev-kits covered: # - gcc # - cmoc # - cc65 # - ack # - gcc_amiga # - gcc_atari_st # - xtc68 # - lcc1802 no_z88dk_test: \ gcc_full_tests \ cc65_full_tests \ cmoc_full_tests \ ack_full_tests \ lcc1802_full_tests \ mod_gcc_full_tests \ xtc68_full_tests mod_gcc_full_tests: \ gcc_amiga_extra \ gcc_atari_st_extra \ test_xtc68_extra: \ xtc68_extra test_cmoc_extra: \ coco \ coco3 \ mo5 # to fix # oric_extra # gamate_extra test_cc65_extra: \ vic20 \ supervision \ atari \ atari_lynx \ creativision \ pet \ c64 \ oric test_ack_extra: \ pc8086_extra \ cpm_8080_adm3a test_ncurses_extra: \ ncurses gcc_full_tests: \ ncurses test_lcc1802_extra: \ comx ####################################################### # (LONG) TESTS # Compilers and Dev-kits covered: # - gcc # - cmoc # - cc65 # - ack # - gcc_amiga # - gcc_atari_st # - xtc68 # - lcc1802 # - z88dk .PHONY: test z88dk_test # gal_6k # msx_32k_rom # spectrum_48k # zx81_32k_wrx_turn_based # tiki100 test_z88dk_extra: \ c128_z80_80col \ cpm_z80_adm3a \ spectrum_48k \ msx \ zx81_32k_wrx test: make z88dk_test make no_z88dk_test #################################################################################################################### # Z88DK Compilation Tests with several minimal versions of the game # # include makefiles.other/chase/tests/Makefile.z88dk_quick_tests ================================================ FILE: src/makefiles.other/chase/tests/Makefile.z88dk_quick_tests ================================================ #################################################################################################################### # TESTS FAST_TEST_OPTS ?= \ -D_DEFAULT_ASCII \ -DTINY_GAME -DLESS_TEXT -D_XL_NO_SLEEP \ -DNO_CHASE -DNO_GAME_COMPLETED \ -DNO_INITIAL_SCREEN -D__NO_SCREEN_COLOR_INIT \ -DNO_DEAD_GHOSTS \ -DNO_RANDOM_LEVEL -DFLAT_ENEMIES -DGHOSTS_NUMBER=8 \ -DNO_STATS -DNO_WALL FAST_SCCZ80_TEST_OPTS ?= -O0 $(FAST_TEST_OPTS) FAST_ZSDCC_TEST_OPTS ?= -SO0 $(FAST_TEST_OPTS) # include makefiles.common/auxiliary/Makefile_ALL NO_CHASE_FILES ?= \ $(BASIC_CROSS_LIB_FILES) \ $(SOURCE_PATH)/split_files/move_player.c \ $(SOURCE_PATH)/split_files/ghost.c $(SOURCE_PATH)/split_files/level.c $(SOURCE_PATH)/split_files/character.c $(SOURCE_PATH)/split_files/game_text.c \ $(SOURCE_PATH)/split_files/main.c \ $(SOURCE_PATH)/split_files/init_images.c # TINY_FILES ?= $(NO_CHASE_FILES) $(SOURCE_PATH)/strategy.c # TEST_FILES ?= $(NO_CHASE_FILES) include ./games/chase/Makefile.chase # include Makefile #################################################################################################################### # TODO: Fix # c128_z80_zsdcc_quick_test # aquarius_zsdcc_quick_test zsdcc_quick_test: \ mc1000_zsdcc_quick_test \ spectrum_zsdcc_quick_test \ svi_zsdcc_quick_test \ vz200_zsdcc_quick_test \ vg5k_zsdcc_quick_test \ zx81_zsdcc_quick_test # TODO: Fix # c128_z80_quick_test # msx_quick_test # nc100_quick_test # cpm_quick_test # x1_quick_test # cpc_quick_test (Unix) sccz80_quick_test: \ abc80_quick_test \ ace_quick_test \ aquarius_quick_test \ eg2k_quick_test \ einstein_quick_test \ gal_quick_test \ kc_quick_test \ lambda_quick_test \ m5_quick_test \ mc1000_quick_test \ microbee_quick_test \ mtx_quick_test \ mz_quick_test \ nascom_quick_test \ p2000_quick_test \ pc6001_quick_test \ pps_quick_test \ pv2000_quick_test \ px4_quick_test \ px8_quick_test \ samcoupe_quick_test \ sc3000_quick_test \ sg1000_quick_test \ spectrum_quick_test \ srr_quick_test \ svi_quick_test \ ti82_quick_test \ ti83_quick_test \ ti85_quick_test \ trs80_quick_test \ vg5k_quick_test \ vz200_quick_test \ z1013_quick_test \ z9001_quick_test \ zx80_quick_test \ zx81_quick_test # zsdcc_quick_test z88dk_quick_test: \ sccz80_quick_test #################################################################################################################### abc80_quick_test: $(Z88DK_PATH)$(MYZ88DK) +abc80 -lm -subtype=hex -zorg=49200 \ -D__ABC80__ -clib=ansi -vn -lndos \ $(FAST_SCCZ80_TEST_OPTS) $(INCLUDE_OPTS) \ -D__CONIO_GRAPHICS \ -D__NO_INIT_GRAPHICS \ -create-app -o abc80t.bin \ -lndos \ $(TEST_FILES) rm -rf abc80t.bin mv abc80t.ihx $(BUILD_PATH)/TEST_abc80.ihx ace_quick_test: $(Z88DK_PATH)$(MYZ88DK) +ace \ -D__ACE__ \ \ -D__CONIO_GRAPHICS \ -clib=default -o acet.bin \ -D__NO_INIT_GRAPHICS \ $(FAST_SCCZ80_TEST_OPTS) $(INCLUDE_OPTS) \ -Cz--audio -create-app \ $(TEST_FILES) cp acet.wav $(BUILD_PATH)/TEST_ace_exp_16k.wav rm acet.wav rm acet.tap rm acet.bin aquarius_quick_test: $(Z88DK_PATH)$(MYZ88DK) +aquarius -clib=ansi -vn \ -D__AQUARIUS__ -DTINY_GAME \ $(FAST_SCCZ80_TEST_OPTS) $(INCLUDE_OPTS) \ -D__CONIO_GRAPHICS \ -D__NO_INIT_GRAPHICS \ -lndos \ -o TEST_aquarius -create-app \ $(TEST_FILES) rm TEST_aquarius mv TEST_aquarius.caq $(BUILD_PATH) mv _TEST_aquarius.caq $(BUILD_PATH) c128_z80_quick_test: $(Z88DK_PATH)$(MYZ88DK) +c128 \ -lndos -subtype=disk \ -D__C128_Z80__ -DXSize=40 \ $(FAST_SCCZ80_TEST_OPTS) $(INCLUDE_OPTS) \ -D__INCLUDE_CONIO_H \ -D__CONIO_GRAPHICS \ -D__NO_INIT_GRAPHICS \ $(TEST_FILES) \ -create-app -o c128t.bin $(TOOLS_PATH)/generic/c1541 -format "crosschase,0" d64 TEST_c128_z80.d64 $(TOOLS_PATH)/generic/c1541 -attach TEST_c128_z80.d64 -write c128t.ldr $(TOOLS_PATH)/generic/c1541 -attach TEST_c128_z80.d64 -write c128t mv TEST_c128_z80.d64 $(BUILD_PATH)/ rm C128T.LDR rm C128T rm c128t.bin cpc_quick_test: $(ASSETS_PATH)/z88dk_cpc_Chars8.asm $(Z88DK_PATH)$(MYZ88DK) +cpc -vn -clib=ansi \ -D__CPC__ \ $(FAST_SCCZ80_TEST_OPTS) $(INCLUDE_OPTS) \ -D__CPCRSLIB_GRAPHICS \ -pragma-define:REGISTER_SP=-1 \ -lndos -create-app -o $(BUILD_PATH)/TEST_cpc.prg \ $(CROSS_LIB_PATH)/sound/z88dk/psg/ay-3-8910_psg_sounds.c \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/cpc/cpc_cpcrslib_init_graphics.c \ $(TEST_FILES) $(ASSETS_PATH)/z88dk_cpc_Chars8.asm $(TOOLS_PATH)/z88dk/cpc/2cdt.exe -n -r cross_chase $(BUILD_PATH)/TEST_cpc.cpc $(BUILD_PATH)/TEST_cpc.cdt # $(TOOLS_PATH)/z88dk/cpc/cpcxfsw -nd TEST_cpc.dsk # $(TOOLS_PATH)/z88dk/cpc/cpcxfsw TEST_cpc.dsk -p $(BUILD_PATH)/TEST_cpc.cpc xchase # mv TEST_cpc.dsk $(BUILD_PATH)/ rm $(BUILD_PATH)/TEST_cpc.cpc rm $(BUILD_PATH)/TEST_cpc.prg cpm_quick_test: $(Z88DK_PATH)$(MYZ88DK) +cpm \ -D__ADM3A \ -D__CONIO_GRAPHICS \ -D__NO_INIT_GRAPHICS \ -D__CPM_80X24__ \ -D_XL_NO_SLEEP -D__NO_WAIT \ $(FAST_SCCZ80_TEST_OPTS) $(INCLUDE_OPTS) \ -create-app -o$(BUILD_PATH)/TEST_cpm.bin \ $(TEST_FILES) rm $(BUILD_PATH)/TEST_cpm.bin eg2k_quick_test: $(Z88DK_PATH)$(MYZ88DK) +trs80 \ -D__EG2K__ \ -D__CONIO_GRAPHICS \ -D__NO_INIT_GRAPHICS \ -subtype=eg2000disk \ -lndos \ -lm \ -D__TRS80__ \ $(FAST_SCCZ80_TEST_OPTS) $(INCLUDE_OPTS) \ -create-app -o eg2kt.bin \ -D__VT52 \ $(TEST_FILES) mv eg2kt.cmd $(BUILD_PATH)/TEST_eg2k.cmd rm eg2kt.bin einstein_quick_test: $(Z88DK_PATH)$(MYZ88DK) +cpm -leinstein \ -D__EINSTEIN__ \ -D__INCLUDE_CONIO_H \ -D__CONIO_GRAPHICS \ -D__NO_INIT_GRAPHICS \ $(FAST_SCCZ80_TEST_OPTS) $(INCLUDE_OPTS) \ -clib=ansi \ -create-app -o$(BUILD_PATH)/TEST_einstein.bin \ $(TEST_FILES) rm $(BUILD_PATH)/TEST_einstein.bin gal_quick_test: $(Z88DK_PATH)$(MYZ88DK) +gal \ -pragma-need=ansiterminal \ -D__GAL__ \ -D__CONIO_GRAPHICS \ -D__NO_INIT_GRAPHICS \ $(FAST_SCCZ80_TEST_OPTS) $(INCLUDE_OPTS) \ -vn -lndos -create-app -o $(BUILD_PATH)/TEST_galaksija.prg \ $(TEST_FILES) rm $(BUILD_PATH)/TEST_galaksija.prg rm $(BUILD_PATH)/TEST_galaksija.wav kc_quick_test: $(ASSETS_PATH)/z88dk_xchase.asm $(Z88DK_PATH)$(MYZ88DK) +kc -subtype=tap \ -D__KC__ \ -D__NO_INIT_GRAPHICS \ $(FAST_SCCZ80_TEST_OPTS) $(INCLUDE_OPTS) \ \ -D__VT52 \ -D__CONIO_GRAPHICS \ -D_XL_NO_SLEEP \ -D__NO_WAIT \ \ -create-app -o$(BUILD_PATH)/TEST_kc_sprites.bin \ $(TEST_FILES) $(ASSETS_PATH)/z88dk_xchase.asm rm $(BUILD_PATH)/TEST_kc_sprites.bin lambda_quick_test: $(Z88DK_PATH)$(MYZ88DK) +lambda \ -vn -D__LAMBDA__ \ -D__CONIO_GRAPHICS \ -D__NO_INIT_GRAPHICS \ $(FAST_SCCZ80_TEST_OPTS) $(INCLUDE_OPTS) \ -lndos -create-app -o $(BUILD_PATH)/TEST_lambda.prg \ $(TEST_FILES) rm $(BUILD_PATH)/TEST_lambda.prg m5_quick_test: $(Z88DK_PATH)$(MYZ88DK) +m5 \ -D__CONIO_GRAPHICS \ -D__NO_INIT_GRAPHICS \ -lm -create-app -Cz--audio -subtype=tape \ -D__M5__ \ -clib=ansi -pragma-define:ansicolumns=32 \ $(FAST_SCCZ80_TEST_OPTS) $(INCLUDE_OPTS) \ -o$(BUILD_PATH)/TEST_m5.bin \ $(TEST_FILES) rm $(BUILD_PATH)/TEST_m5.bin rm $(BUILD_PATH)/TEST_m5.cas mc1000_quick_test: $(Z88DK_PATH)$(MYZ88DK) +mc1000 \ -subtype=gaming -pragma-define:ansicolumns=32 \ $(FAST_SCCZ80_TEST_OPTS) $(INCLUDE_OPTS) \ -D__CONIO_GRAPHICS \ -D__NO_INIT_GRAPHICS \ -clib=ansi \ -D__MC1000__ \ -vn -lndos -create-app -Cz--audio -o mc1kt.bin \ $(CROSS_LIB_PATH)/sound/z88dk/psg/ay-3-8910_psg_sounds.c \ $(TEST_FILES) mv mc1kt.wav $(BUILD_PATH)/TEST_mc1000.wav rm mc1kt.bin rm mc1kt.cas microbee_quick_test: $(Z88DK_PATH)$(MYZ88DK) +bee \ -D__BEE__ -clib=ansi -vn \ -D__CONIO_GRAPHICS \ -D__NO_INIT_GRAPHICS \ $(FAST_SCCZ80_TEST_OPTS) $(INCLUDE_OPTS) \ -lndos -create-app -o $(BUILD_PATH)/TEST_microbee.prg \ $(TEST_FILES) rm $(BUILD_PATH)/TEST_microbee.prg msx_quick_test: $(ASSETS_PATH)/8x8_chars.h $(Z88DK_PATH)$(MYZ88DK) +msx -zorg=49200 \ -create-app -vn -DMSX_VPOKE -D__MSX__ -lndos \ $(FAST_SCCZ80_TEST_OPTS) $(INCLUDE_OPTS) \ -D__MEMORY_MAPPED_GRAPHICS -D__INCLUDE_CONIO_H \ -DUSE_MSX_BIOS \ \ -vn \ -lndos \ -DZ88DK_JOYSTICK \ -create-app -o $(BUILD_PATH)/TEST_msx.prg \ $(CROSS_LIB_PATH)/sound/z88dk/psg/ay-3-8910_psg_sounds.c \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/msx/msx_redefined_chars_init_graphics.c \ $(TEST_FILES) rm $(BUILD_PATH)/TEST_msx.prg mtx_quick_test: $(Z88DK_PATH)$(MYZ88DK) +mtx -startup=2 \ -D__MTX__ -clib=ansi -pragma-define:ansicolumns=32 -create-app -o TEST_mtx.bin -vn \ \ -D__CONIO_GRAPHICS \ -D__NO_INIT_GRAPHICS \ $(FAST_SCCZ80_TEST_OPTS) $(INCLUDE_OPTS) \ -lndos \ $(TEST_FILES) rm TEST_mtx.bin mv TEST_mtx.wav $(BUILD_PATH)/TEST_mtx.wav mv TEST_mtx.mtx $(BUILD_PATH)/TEST_mtx.mtx mz_quick_test: $(Z88DK_PATH)$(MYZ88DK) +mz \ -D__MZ__ -clib=ansi -pragma-define:ansicolumns=32 -vn \ \ -D__CONIO_GRAPHICS \ -D__NO_INIT_GRAPHICS \ $(FAST_SCCZ80_TEST_OPTS) $(INCLUDE_OPTS) \ -lndos -create-app -o $(BUILD_PATH)/TEST_mz.prg \ $(TEST_FILES) rm $(BUILD_PATH)/TEST_mz.prg mv $(BUILD_PATH)/TEST_mz.mzt $(BUILD_PATH)/TEST_mz.mzf nascom_quick_test: $(Z88DK_PATH)$(MYZ88DK) +nascom -clib=ansi -vn -lndos \ -D__NASCOM__ \ -D__CONIO_GRAPHICS \ -D__NO_INIT_GRAPHICS \ \ $(FAST_SCCZ80_TEST_OPTS) $(INCLUDE_OPTS) \ -create-app -o $(BUILD_PATH)/TEST_nascom.prg \ $(TEST_FILES) rm $(BUILD_PATH)/TEST_nascom.prg nc100_quick_test: $(Z88DK_PATH)$(MYZ88DK) +nc -lgfxnc100 \ -D__NO_INIT_GRAPHICS \ -D__NC100__ \ -D__NO_PRINT \ -D__Z88DK_SPRITES_GRAPHICS \ -DLESS_TEXT \ -D_XL_NO_SLEEP \ -D__NO_WAIT \ \ $(FAST_SCCZ80_TEST_OPTS) $(INCLUDE_OPTS) \ -create-app -o$(BUILD_PATH)/TEST_nc100.bin \ $(TEST_FILES) rm $(BUILD_PATH)/TEST_nc100.bin p2000_quick_test: $(Z88DK_PATH)$(MYZ88DK) +p2000 -clib=ansi -D__P2000__ -vn \ \ -D__CONIO_GRAPHICS \ -D__NO_INIT_GRAPHICS \ $(FAST_SCCZ80_TEST_OPTS) $(INCLUDE_OPTS) \ -lndos -create-app -o $(BUILD_PATH)/TEST_p2000.prg \ $(TEST_FILES) rm $(BUILD_PATH)/TEST_p2000.prg pc6001_quick_test: $(Z88DK_PATH)$(MYZ88DK) +pc6001 -Cz--audio -clib=ansi -subtype=32k \ -D__PC6001__ \ -D__CONIO_GRAPHICS \ -D__NO_INIT_GRAPHICS \ $(FAST_SCCZ80_TEST_OPTS) $(INCLUDE_OPTS) \ -lndos -create-app -o $(BUILD_PATH)/TEST_pc6001_32k.prg \ $(CROSS_LIB_PATH)/sound/z88dk/psg/ay-3-8910_psg_sounds.c \ $(TEST_FILES) rm $(BUILD_PATH)/TEST_pc6001_32k.prg rm $(BUILD_PATH)/TEST_pc6001_32k.wav mv $(BUILD_PATH)/TEST_pc6001_32k.cas $(BUILD_PATH)/TEST_pc6001_32k.cp6 pps_quick_test: $(Z88DK_PATH)$(MYZ88DK) +pps -pragma-redirect:fputc_cons=fputc_cons_generic \ -D__PPS__ -vn \ -D__VT52 \ -D__CONIO_GRAPHICS \ -D__NO_INIT_GRAPHICS \ $(FAST_SCCZ80_TEST_OPTS) $(INCLUDE_OPTS) \ -D__NO_WAIT \ -lndos -o ppst.bin \ $(TEST_FILES) mv ppst.bin $(BUILD_PATH)/TEST_pps.exe pv2000_quick_test: $(Z88DK_PATH)$(MYZ88DK) +pv2000 -pragma-redirect:fputc_cons=fputc_cons_generic \ -D__SRR__ -vn \ -D__CONIO_GRAPHICS \ -D__NO_INIT_GRAPHICS \ \ -D__NO_WAIT \ -D__VT52 \ -lndos \ $(FAST_SCCZ80_TEST_OPTS) $(INCLUDE_OPTS) \ -create-app -o pv2kt.bin \ $(TEST_FILES) mv pv2kt.rom $(BUILD_PATH)/TEST_pv2000.rom rm pv2kt.bin rm pv2kt_BSS.bin rm pv2kt_DATA.bin px4_quick_test: $(Z88DK_PATH)$(MYZ88DK) +cpm -lpx4 \ $(FAST_SCCZ80_TEST_OPTS) $(INCLUDE_OPTS) \ -D__PX4__ \ -subtype=px4 -Cz--32k \ -create-app \ -vn -lndos -o px4.bin \ -D__ALT_PRINT \ -D__Z88DK_SPRITES_GRAPHICS -D__NO_INIT_GRAPHICS \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c \ $(TEST_FILES) rm px4.bin mv PX4.ROM $(BUILD_PATH)/TEST_px4.ROM px8_quick_test: $(Z88DK_PATH)$(MYZ88DK) +cpm -subtype=px8 \ $(FAST_SCCZ80_TEST_OPTS) $(INCLUDE_OPTS) \ -D__PX8__ \ -create-app \ -vn -lndos -o px8.bin \ -D__ALT_PRINT \ -D__Z88DK_SPRITES_GRAPHICS -D__NO_INIT_GRAPHICS \ $(TEST_FILES) \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c rm px8.bin mv PX8.ROM $(BUILD_PATH)/TEST_px8.ROM samcoupe_quick_test: $(Z88DK_PATH)$(MYZ88DK) +sam \ -D__SAM__ \ -D__CONIO_GRAPHICS \ -D__NO_INIT_GRAPHICS \ $(FAST_SCCZ80_TEST_OPTS) $(INCLUDE_OPTS) \ -clib=ansi -pragma-define:ansicolumns=32 -vn \ -o $(BUILD_PATH)/FULL_samcoupe.bin -lndos \ $(TEST_FILES) cp $(TOOLS_PATH)/z88dk/samcoupe/samdos2_empty $(TOOLS_PATH)/z88dk/samcoupe/samdos2 $(TOOLS_PATH)/z88dk/samcoupe/pyz80.py -I $(TOOLS_PATH)/z88dk/samcoupe/samdos2 $(TOOLS_PATH)/z88dk/samcoupe/sam_wrapper.asm mv $(TOOLS_PATH)/z88dk/samcoupe/sam_wrapper.dsk $(BUILD_PATH)/TEST_samcoupe.dsk rm $(BUILD_PATH)/FULL_samcoupe.bin sc3000_quick_test: $(Z88DK_PATH)$(MYZ88DK) +sc3000 \ $(FAST_SCCZ80_TEST_OPTS) $(INCLUDE_OPTS) \ -D__CONIO_GRAPHICS \ -D__NO_INIT_GRAPHICS \ -clib=ansi \ -pragma-define:ansicolumns=32 \ -vn -lndos -create-app -Cz--audio \ -o $(BUILD_PATH)/TEST_sc3000_16k.prg \ $(TEST_FILES) rm $(BUILD_PATH)/TEST_sc3000_16k.prg rm $(BUILD_PATH)/TEST_sc3000_16k.tap sg1000_quick_test: $(Z88DK_PATH)$(MYZ88DK) +sc3000 -subtype=rom \ $(FAST_SCCZ80_TEST_OPTS) $(INCLUDE_OPTS) \ -D__CONIO_GRAPHICS \ -D__NO_INIT_GRAPHICS \ -clib=ansi \ -pragma-define:ansicolumns=32 \ -vn -lndos -create-app -Cz--audio \ -o $(BUILD_PATH)/TEST_sg1000.prg \ $(TEST_FILES) rm $(BUILD_PATH)/TEST_sg1000.prg rm $(BUILD_PATH)/TEST_sg1000_BSS.bin rm $(BUILD_PATH)/TEST_sg1000_DATA.bin spectrum_quick_test: $(Z88DK_PATH)$(MYZ88DK) +zx -clib=ansi -vn \ -pragma-define:ansicolumns=32 \ -DCLIB_ANSI -D__SPECTRUM__ \ -D__NO_INIT_GRAPHICS \ -D__CONIO_GRAPHICS \ -lndos -create-app -o $(BUILD_PATH)/TEST_spectrum.prg \ $(FAST_SCCZ80_TEST_OPTS) $(INCLUDE_OPTS) \ $(TEST_FILES) rm $(BUILD_PATH)/TEST_spectrum.prg rm -rf $(BUILD_PATH)/TEST_spectrum_BANK_7.bin srr_quick_test: $(Z88DK_PATH)$(MYZ88DK) +srr -pragma-redirect:fputc_cons=fputc_cons_generic \ -D__SRR__ -vn \ -D__CONIO_GRAPHICS \ -D__NO_INIT_GRAPHICS \ \ -D__NO_WAIT \ -D__VT52 \ $(FAST_SCCZ80_TEST_OPTS) $(INCLUDE_OPTS) \ -lndos \ -create-app -o srrt.bin \ $(TEST_FILES) rm srrt.srr rm srrt.bin mv srrt.wav $(BUILD_PATH)/TEST_srr.wav svi_quick_test: $(Z88DK_PATH)$(MYZ88DK) +svi \ -vn -lndos \ \ -D__SVI__ -o svit.bin \ -D__CONIO_GRAPHICS \ -D__INCLUDE_CONIO_H \ -pragma-define:ansicolumns=32 \ -clib=ansi -pragma-define:ansicolumns=32 -vn -lndos \ \ -D__CONIO_GRAPHICS \ -D__NO_INIT_GRAPHICS \ -D__SVI__ \ $(FAST_SCCZ80_TEST_OPTS) $(INCLUDE_OPTS) \ -create-app \ $(CROSS_LIB_PATH)/sound/z88dk/psg/ay-3-8910_psg_sounds.c \ $(TEST_FILES) mv svit.cas $(BUILD_PATH)/TEST_svi.cas rm svit.bin ti82_quick_test: $(Z88DK_PATH)$(MYZ88DK) +ti82 \ $(FAST_SCCZ80_TEST_OPTS) $(INCLUDE_OPTS) -D__TI82__ \ -D__CONIO_GRAPHICS \ -D__NO_INIT_GRAPHICS \ -clib=ansi -pragma-define:ansicolumns=32 \ -vn \ -DTURN_BASED -D__NO_WAIT \ -lndos \ -create-app -o ti82t.bin \ $(TEST_FILES) mv ti82t.82p $(BUILD_PATH)/TEST_ti82.82p rm ti82t.bin ti83_quick_test: $(Z88DK_PATH)$(MYZ88DK) +ti83 \ $(FAST_SCCZ80_TEST_OPTS) $(INCLUDE_OPTS) -D__TI83__ \ -D__CONIO_GRAPHICS \ -D__NO_INIT_GRAPHICS \ -clib=ansi -pragma-define:ansicolumns=32 \ -vn \ -DTURN_BASED -D__NO_WAIT \ -lndos \ -create-app -o ti83t.bin \ $(TEST_FILES) mv ti83t.83p $(BUILD_PATH)/TEST_ti83.83p rm ti83t.bin ti85_quick_test: $(Z88DK_PATH)$(MYZ88DK) +ti85 \ $(FAST_SCCZ80_TEST_OPTS) $(INCLUDE_OPTS) -D__TI85__ \ -D__CONIO_GRAPHICS \ -D__NO_INIT_GRAPHICS \ -clib=ansi -pragma-define:ansicolumns=32 \ -vn \ -DTURN_BASED -D__NO_WAIT \ -lndos \ -create-app -o ti85t.bin \ $(TEST_FILES) mv ti85t.85s $(BUILD_PATH)/TEST_ti85.85s rm ti85t.bin trs80_quick_test: $(Z88DK_PATH)$(MYZ88DK) +trs80 -lndos \ -lm -create-app \ -D__TRS80__ \ -D__CONIO_GRAPHICS \ -D__NO_INIT_GRAPHICS \ $(FAST_SCCZ80_TEST_OPTS) $(INCLUDE_OPTS) \ -D_XL_NO_SLEEP \ -D__VT52 \ -o$(BUILD_PATH)/TEST_trs80.bin \ $(TEST_FILES) rm $(BUILD_PATH)/TEST_trs80.bin vg5k_quick_test: $(Z88DK_PATH)$(MYZ88DK) +vg5k \ $(FAST_SCCZ80_TEST_OPTS) $(INCLUDE_OPTS) \ -D__CONIO_GRAPHICS \ -D__NO_INIT_GRAPHICS \ -vn -D__VG5K__ -DASM_DISPLAY \ -lndos -create-app -o $(BUILD_PATH)/TEST_vg5k.prg \ $(TEST_FILES) rm $(BUILD_PATH)/TEST_vg5k.prg vz200_quick_test: $(Z88DK_PATH)$(MYZ88DK) +vz -vn \ -pragma-include:$(CFG_PATH)/z88dk/zpragma.inc \ -D__VZ__ -clib=ansi \ -D__CONIO_GRAPHICS \ -D__NO_INIT_GRAPHICS \ $(FAST_SCCZ80_TEST_OPTS) $(INCLUDE_OPTS) \ -lndos \ -create-app -o $(BUILD_PATH)/TEST_vz200.vz \ $(TEST_FILES) rm $(BUILD_PATH)/TEST_vz200.cas x1_quick_test: $(Z88DK_PATH)$(MYZ88DK) +x1 \ -D__X1__ \ -D__CONIO_GRAPHICS \ -D__NO_INIT_GRAPHICS \ -D_XL_NO_SLEEP \ $(FAST_SCCZ80_TEST_OPTS) $(INCLUDE_OPTS) \ -create-app -o $(BUILD_PATH)/TEST_x1.bin -vn -lndos \ $(TEST_FILES) rm $(BUILD_PATH)/TEST_x1.bin z1013_quick_test: $(Z88DK_PATH)$(MYZ88DK) +z1013 -clib=ansi \ -D__CONIO_GRAPHICS \ -D__NO_INIT_GRAPHICS \ -vn -lndos \ -D__Z1013__ \ $(FAST_SCCZ80_TEST_OPTS) $(INCLUDE_OPTS) \ $(TEST_FILES) \ -create-app -o z1013t.bin mv Z1013T.Z80 $(BUILD_PATH)/TEST_z1013.z80 rm z1013t.bin z9001_quick_test: $(Z88DK_PATH)$(MYZ88DK) +z9001 -clib=ansi \ -D__Z9001__ -vn \ -D__CONIO_GRAPHICS \ -D__NO_INIT_GRAPHICS \ $(FAST_SCCZ80_TEST_OPTS) $(INCLUDE_OPTS) \ -lndos -create-app -o $(BUILD_PATH)/TEST_z9001.z80 \ $(TEST_FILES) rm $(BUILD_PATH)/TEST_z9001.z80 zx80_quick_test: $(Z88DK_PATH)$(MYZ88DK) +zx80 -vn \ -D__ZX80__ \ -D__CONIO_GRAPHICS \ -D__NO_INIT_GRAPHICS \ -DTURN_BASED \ $(FAST_SCCZ80_TEST_OPTS) $(INCLUDE_OPTS) \ -D__ALT_SLEEP \ -lndos \ -create-app -o $(BUILD_PATH)/TEST_zx80.prg \ $(CROSS_LIB_PATH)/sleep/sleep_macros.c \ $(TEST_FILES) rm $(BUILD_PATH)/TEST_zx80.prg zx81_quick_test: $(Z88DK_PATH)$(MYZ88DK) +zx81 -vn \ -D__ZX81__ \ -DTURN_BASED \ -D__CONIO_GRAPHICS \ -D__NO_INIT_GRAPHICS \ $(FAST_SCCZ80_TEST_OPTS) $(INCLUDE_OPTS) \ -D__ALT_SLEEP \ -lndos \ -create-app -o $(BUILD_PATH)/TEST_zx81.prg \ $(CROSS_LIB_PATH)/sleep/sleep_macros.c \ $(TEST_FILES) rm $(BUILD_PATH)/TEST_zx81.prg ############################################################################### zx81_zsdcc_quick_test: $(Z88DK_PATH)$(MYZ88DK) +zx81 \ -compiler=sdcc \ -vn \ -D__ZX81__ -DTINY_GAME \ -D__ALT_SLEEP \ -D__CONIO_GRAPHICS \ -D__NO_INIT_GRAPHICS \ $(FAST_ZSDCC_TEST_OPTS) $(INCLUDE_OPTS) \ -lndos \ -create-app -o $(BUILD_PATH)/TEST_ZSDCC_zx81.prg \ $(CROSS_LIB_PATH)/sleep/sleep_macros.c \ $(TEST_FILES) rm $(BUILD_PATH)/TEST_ZSDCC_zx81.prg aquarius_zsdcc_quick_test: $(Z88DK_PATH)$(MYZ88DK) +aquarius \ -pragma-include:$(CFG_PATH)/z88dk/zpragma.inc \ -compiler=sdcc \ $(FAST_ZSDCC_TEST_OPTS) $(INCLUDE_OPTS) \ -vn \ -D__ALT_PRINT -D__AQUARIUS__ -DTINY_GAME \ -pragma-include:$(CFG_PATH)/z88dk/zpragma_clib.inc \ -lndos -o TEST_ZSDCC_aquarius -create-app \ -D__MEMORY_MAPPED_GRAPHICS \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/aquarius/aquarius_init_graphics.c \ $(TEST_FILES) rm TEST_ZSDCC_aquarius mv TEST_ZSDCC_aquarius.caq $(BUILD_PATH) mv _TEST_ZSDCC_aquarius.caq $(BUILD_PATH) vz200_zsdcc_quick_test: $(Z88DK_PATH)$(MYZ88DK) +vz -vn \ -DTINY_GAME \ -pragma-include:$(CFG_PATH)/z88dk/zpragma.inc \ -compiler=sdcc \ -D__CONIO_GRAPHICS \ -D__NO_INIT_GRAPHICS \ $(FAST_ZSDCC_TEST_OPTS) $(INCLUDE_OPTS) \ -D__VZ__ -clib=ansi \ -DLESS_TEXT \ \ -DNO_RANDOM_LEVEL \ -DNO_DEAD_GHOSTS \ -D__NO_SCREEN_COLOR_INIT \ -DNO_STATS \ -DNO_INITIAL_SCREEN \ -lndos \ -create-app -o $(BUILD_PATH)/TEST_ZSDCC_vz200.vz \ $(TEST_FILES) rm $(BUILD_PATH)/TEST_ZSDCC_vz200.cas spectrum_zsdcc_quick_test: $(ASSETS_PATH)/z88dk_xchase.asm $(Z88DK_PATH)$(MYZ88DK) +zx -zorg=24055 \ -compiler=sdcc \ -pragma-include:$(CFG_PATH)/z88dk/zpragma_clib.inc \ -pragma-redirect:getk=getk_inkey \ -DZ88DK_JOYSTICK \ -DTINY_GAME \ \ \ -D__SPECTRUM__ \ -lndos -create-app \ -D__CONIO_GRAPHICS \ \ -pragma-redirect:fputc_cons=fputc_cons_generic \ -create-app -o $(BUILD_PATH)/TEST_ZSDCC_spectrum.prg \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/udg/udg_init_graphics.c \ $(ASSETS_PATH)/z88dk_xchase.asm \ $(FAST_ZSDCC_TEST_OPTS) $(INCLUDE_OPTS) \ -D__CONIO_GRAPHICS \ $(TEST_FILES) rm $(BUILD_PATH)/TEST_ZSDCC_spectrum.prg # rm $(BUILD_PATH)/TEST_ZSDCC_spectrum_BANK_7.bin svi_zsdcc_quick_test: $(Z88DK_PATH)$(MYZ88DK) +svi \ -compiler=sdcc \ $(FAST_ZSDCC_TEST_OPTS) $(INCLUDE_OPTS) \ -compiler=sdcc \ -D__INCLUDE_CONIO_H \ -zorg=49152 \ -clib=ansi \ -pragma-define:ansicolumns=32 \ -pragma-include:$(CFG_PATH)/z88dk/zpragma_clib.inc \ -vn -lndos -o svizt.bin \ -D__SVI__ \ \ -D__BIT_BANG_SOUND \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS \ -create-app \ -create-app \ $(TEST_FILES) mv svizt.cas $(BUILD_PATH)/TEST_ZSDCC_svi.cas rm svizt.bin vg5k_zsdcc_quick_test: $(Z88DK_PATH)$(MYZ88DK) +vg5k \ -compiler=sdcc \ --reserve-regs-iy \ -pragma-include:$(CFG_PATH)/z88dk/zpragma_clib.inc \ \ -vn -D__VG5K__ \ -DLESS_TEXT \ \ -D__CONIO_GRAPHICS \ -D__NO_INIT_GRAPHICS \ $(FAST_ZSDCC_TEST_OPTS) $(INCLUDE_OPTS) \ -create-app -o $(BUILD_PATH)/TEST_ZSDCC_vg5k.prg \ $(TEST_FILES) rm $(BUILD_PATH)/TEST_ZSDCC_vg5k.prg mc1000_zsdcc_quick_test: $(Z88DK_PATH)$(MYZ88DK) +mc1000 -compiler=sdcc \ -subtype=gaming -pragma-define:ansicolumns=32 \ -DLESS_TEXT \ \ -DNO_HINTS \ -clib=ansi \ $(FAST_ZSDCC_TEST_OPTS) $(INCLUDE_OPTS) \ -D__CONIO_GRAPHICS \ -D__NO_INIT_GRAPHICS \ -D__MC1000__ \ -D__ALT_SLEEP \ -vn -lndos -create-app -Cz--audio -o mc1kzt.bin \ $(CROSS_LIB_PATH)/sound/z88dk/psg/ay-3-8910_psg_sounds.c \ $(CROSS_LIB_PATH)/sleep/sleep_macros.c \ $(TEST_FILES) mv mc1kzt.wav $(BUILD_PATH)/TEST_ZSDCC_mc1000.wav rm mc1kzt.bin rm mc1kzt.cas c128_z80_zsdcc_quick_test: $(Z88DK_PATH)$(MYZ88DK) +c128 \ -compiler=sdcc \ -lndos -subtype=disk \ -D__C128_Z80__ -DXSize=40 \ -D__INCLUDE_CONIO_H \ -D__CONIO_GRAPHICS \ -D__NO_INIT_GRAPHICS \ $(FAST_ZSDCC_TEST_OPTS) $(INCLUDE_OPTS) \ $(TEST_FILES) \ -create-app -o c128zt.bin $(TOOLS_PATH)/generic/c1541 -format "crosschase,0" d64 TEST_c128_z80.d64 $(TOOLS_PATH)/generic/c1541 -attach TEST_c128_z80.d64 -write c128zt.ldr $(TOOLS_PATH)/generic/c1541 -attach TEST_c128_z80.d64 -write c128zt mv TEST_c128_z80.d64 $(BUILD_PATH)/ rm C128ZT.LDR rm C128ZT rm c128zt.bin ================================================ FILE: src/makefiles.other/chase/wip/Makefile.ack_wip_targets ================================================ # ----------------------------------------------- # ACK ack_wip_targets: \ pdp11v7 \ pdp11v7_buffered pdp11v7_wip_targets: \ pdp11v7 \ pdp11v7_buffered # buffered pdp11v7_buffered: $(_ACK) $(_ACK_OPTS) $(INCLUDE_OPTS) -mpdpv7 \ -DXSize=78 \ -DYSize=22 \ -D__PDP \ -D_XL_NO_COLOR \ -DACK \ -D__PDP11V7__ \ \ -DTURN_BASED \ -D__BUFFERED_GRAPHICS -D__STDIO \ -D__NO_INIT_GRAPHICS \ -D__NO_WAIT \ -D_XL_NO_SLEEP \ -D__DEFAULT_CLEAR_SCREEN \ $(FULL_FILES) mv a.out $(BUILD_PATH)/WIP_FULL_pdp11v7_turn_based.bin rm $(SOURCE_PATH)/../../*.o pdp11v7: $(_ACK) $(_ACK_OPTS) $(INCLUDE_OPTS) -mpdpv7 \ -DXSize=78 \ -DYSize=22 \ -D__PDP \ -D__CONIO_GRAPHICS \ -D_XL_NO_COLOR \ -DACK \ -D__PDP11V7__ \ \ -D__NO_INIT_GRAPHICS \ -D__NO_PRINT \ -D__NO_WAIT \ -D_XL_NO_SLEEP \ -D__DEFAULT_CLEAR_SCREEN \ $(FULL_FILES) mv a.out $(BUILD_PATH)/WIP_FULL_pdp11v7.bin rm $(SOURCE_PATH)/../../*.o ================================================ FILE: src/makefiles.other/chase/wip/Makefile.cc65_wip_targets ================================================ TINY_OBJ ?= character.o game_text.o level.o main.o move_player.o strategy.o bbc_no_graphics: $(CC65_PATH)$(MYCC65) $(INCLUDE_OPTS) -t bbc -c \ -D__BBC__ \ -D__NORMALIZED_RAND \ -DXSize=79 \ -DYSize=22 \ -D_XL_NO_SLEEP \ -D_XL_NO_COLOR \ -D__NO_PRINT \ -DTINY_GAME \ -D__NO_WAIT \ -DTURN_BASED \ -D__NO_GRAPHICS \ -D__NO_PRINT \ -D__NO_INIT_GRAPHICS \ -D__ALT_PRINT \ -D__DEFAULT_CLEAR_SCREEN \ $(TINY_FILES) $(CC65_PATH)/ld65$(EXE) -t bbc \ --obj-path $(SOURCE_PATH) \ -m $(BUILD_PATH)/bbc_no_graphics.map \ -o $(BUILD_PATH)/WIP_bbc_no_graphics.bin \ $(TINY_OBJ) pce_light: $(CC65_PATH)$(MYCC65) $(INCLUDE_OPTS) -Or -t pce -Cl \ --config $(CFG_PATH)cc65/pce_8k_less_stack.cfg \ -DLESS_TEXT -D__NO_PRINT \ \ -DNO_CONTROL_INSTRUCTIONS -DNO_INITIAL_SCREEN \ -DNO_DEAD_GHOSTS -D__NO_SCREEN_COLOR_INIT -DNO_RANDOM_LEVEL \ -DGHOSTS_NUMBER=6 \ \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS \ -DNO_STATS \ $(LIGHT_FILES) \ -o $(BUILD_PATH)/WIP_LIGHT_pce.pce pet_8k_buffered: $(CC65_PATH)$(MYCC65) $(INCLUDE_OPTS) -Or -t pet -Cl \ -DTINY_GAME -D__NO_INIT_GRAPHICS \ -D__BUFFERED_GRAPHICS \ -D__ALT_PRINT \ -DUSE_TINY_MEMORY_BUFFERS \ $(TINY_FILES) \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c \ $(SOURCE_PATH)/memory/pet_memory.s \ -o $(BUILD_PATH)/WIP_TINY_pet_8k_buffered.prg ================================================ FILE: src/makefiles.other/chase/wip/Makefile.z88dk_wip_targets ================================================ # ----------------------------------------------------------------------- # WIP # Targets that are in a work in progress status ############################# # CPC cpc_no_gfx: $(Z88DK_PATH)$(MYZ88DK) +cpc $(SCCZ80_OPTS) $(INCLUDE_OPTS) -vn -clib=ansi \ -D__CPC__ -D__NO_INIT_GRAPHICS -D__CONIO_GRAPHICS \ -pragma-define:REGISTER_SP=-1 \ -lndos -create-app -o $(BUILD_PATH)/WIP_FULL_cpc_no_gfx.prg \ $(CROSS_LIB_PATH)/sound/z88dk/psg/ay-3-8910_psg_sounds.c \ $(FULL_FILES) $(TOOLS_PATH)/z88dk/cpc/2cdt.exe -n -r cross_chase $(BUILD_PATH)/WIP_FULL_cpc_no_gfx.cpc $(BUILD_PATH)/WIP_FULL_cpc_no_gfx.cdt rm -rf WIP_FULL_cpc_no_gfx.dsk $(TOOLS_PATH)/z88dk/cpc/cpcxfsw -nd WIP_FULL_cpc_no_gfx.dsk $(TOOLS_PATH)/z88dk/cpc/cpcxfsw WIP_FULL_cpc_no_gfx.dsk -p $(BUILD_PATH)/WIP_FULL_cpc_no_gfx.cpc xchase mv WIP_FULL_cpc_no_gfx.dsk $(BUILD_PATH)/ cp $(TOOLS_PATH)/z88dk/cpc/nocart/*.rom . $(TOOLS_PATH)/z88dk/cpc/nocart/nocart.exe $(BUILD_PATH)/WIP_FULL_cpc_no_gfx.dsk $(BUILD_PATH)/FULL_gx4000_no_gfx.cpr -c 'run"xchase' rm os.rom rm amsdos.rom rm basic.rom rm $(BUILD_PATH)/WIP_FULL_cpc_no_gfx.cpc rm $(BUILD_PATH)/WIP_FULL_cpc_no_gfx.prg kc_tiny_putc4x6: $(Z88DK_PATH)$(MYZ88DK) +kc $(SCCZ80_OPTS) $(INCLUDE_OPTS) -subtype=tap \ \ -D__KC__ \ -DTINY_GAME -DLESS_TEXT -D_XL_NO_SLEEP \ -DZ88DK_PUTC4X6 \ -D__CONIO_GRAPHICS \ -D__ALT_PRINT \ -D__NO_INIT_GRAPHICS \ -create-app -o$(BUILD_PATH)/WIP_TINY_kc_putc4x6_.bin \ $(TINY_FILES) \ $(CROSS_LIB_PATH)/display/alt_print/z88dk_putc4x6_alt_print.c rm $(BUILD_PATH)/WIP_TINY_kc_putc4x6_.bin mz2500_buffered: $(Z88DK_PATH)$(MYZ88DK) +mz2500 $(ZSDCC_OPTS) \ $(INCLUDE_OPTS) \ -compiler=sdcc \ -DXSize=16 \ -DYSize=12 \ -DGHOSTS_NUMBER=8 \ -D__MZ2500__ \ -v \ \ -D__NO_SCREEN_COLOR_INIT \ -lndos \ -D__NO_INIT_GRAPHICS \ \ -D__INCLUDE_CONIO_H -D__CONIO_GRAPHICS \ -pragma-include:$(CFG_PATH)/z88dk/zpragma_clib.inc \ $(FULL_FILES) \ -create-app mv a.dsk $(BUILD_PATH)/WIP_FULL_mz2500_buffered.dsk rm a.bin px4_putc4x6: $(Z88DK_PATH)$(MYZ88DK) +cpm $(SCCZ80_OPTS) -lpx4 \ $(INCLUDE_OPTS) \ -pragma-define:ansicolumns=40 \ -pragma-define:ansipixels=240 -pragma-define:ansicolumns=60 \ -subtype=px4ansi \ -D__PX4__ \ \ -D__NO_WAIT \ -DZ88DK_PUTC4X6 \ -D__NO_PRINT \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS \ -Cz–-32k \ -create-app \ -vn -lndos \ $(SOURCE_PATH)/end_screen.c \ $(FULL_FILES) rm a.bin mv A.ROM $(BUILD_PATH)/WIP_FULL_px4_putc4x6.ROM px4_tiny_putc4x6: $(Z88DK_PATH)$(MYZ88DK) +cpm $(SCCZ80_OPTS) -lpx4 \ $(INCLUDE_OPTS) \ -pragma-define:ansicolumns=40 \ -pragma-define:ansipixels=240 -pragma-define:ansicolumns=60 \ -subtype=px4ansi \ -D__PX4__ \ -DTINY_GAME \ -D__NO_WAIT \ -DZ88DK_PUTC4X6 \ -D__CONIO_GRAPHICS -D__NO_INIT_GRAPHICS \ -Cz–-32k \ -create-app \ -vn -lndos \ $(TINY_FILES) rm a.bin mv A.ROM $(BUILD_PATH)/WIP_TINY_px4_putc4x6.ROM new_retro_targets: rc2014 yaz180 hbios rcmx000 scz180 rc2014: $(Z88DK_PATH)$(MYZ88DK) +rc2014 $(SCCZ80_OPTS) $(INCLUDE_OPTS) \ -D__RC2014__ \ -DXSize=32 \ -DYSize=22 \ -D__NO_SCREEN_COLOR_INIT -D__BUFFERED_GRAPHICS -DTURN_BASED \ -D_XL_NO_COLOR -D__ALT_PRINT -D__STDIO \ -D__NO_WAIT -D_XL_NO_SLEEP -D__DEFAULT_CLEAR_SCREEN \ -D__NO_INIT_GRAPHICS \ $(FULL_FILES) \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c \ -create-app -o$(BUILD_PATH)/FULL_$@_buffered.bin rm $(BUILD_PATH)/FULL_$@_buffered_BSS.bin rm $(BUILD_PATH)/FULL_$@_buffered_CODE.bin rm $(BUILD_PATH)/FULL_$@_buffered_UNASSIGNED.bin yaz180: $(Z88DK_PATH)$(MYZ88DK) +yaz180 $(SCCZ80_OPTS) $(INCLUDE_OPTS) \ -D__YAZ80__ \ -DXSize=32 \ -DYSize=22 \ -D__NO_SCREEN_COLOR_INIT -D__BUFFERED_GRAPHICS -DTURN_BASED \ -D_XL_NO_COLOR -D__ALT_PRINT -D__STDIO \ -D__NO_WAIT -D_XL_NO_SLEEP -D__DEFAULT_CLEAR_SCREEN \ -D__NO_INIT_GRAPHICS \ $(FULL_FILES) \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c \ -create-app -o$(BUILD_PATH)/FULL_$@_buffered.bin rm $(BUILD_PATH)/FULL_$@_buffered_BSS.bin rm $(BUILD_PATH)/FULL_$@_buffered_CODE.bin rm $(BUILD_PATH)/FULL_$@_buffered_UNASSIGNED.bin hbios: $(Z88DK_PATH)$(MYZ88DK) +hbios $(SCCZ80_OPTS) $(INCLUDE_OPTS) \ -D__HBIOS__ \ -DXSize=32 \ -DYSize=22 \ -D__NO_SCREEN_COLOR_INIT -D__BUFFERED_GRAPHICS -DTURN_BASED \ -D_XL_NO_COLOR -D__ALT_PRINT -D__STDIO \ -D__NO_WAIT -D_XL_NO_SLEEP -D__DEFAULT_CLEAR_SCREEN \ -D__NO_INIT_GRAPHICS \ $(FULL_FILES) \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c \ -create-app -o$(BUILD_PATH)/FULL_$@_buffered.bin rm $(BUILD_PATH)/FULL_$@_buffered_BSS.bin rm $(BUILD_PATH)/FULL_$@_buffered_CODE.bin rm $(BUILD_PATH)/FULL_$@_buffered_UNASSIGNED.bin rcmx000: $(Z88DK_PATH)$(MYZ88DK) +rcmx000 $(SCCZ80_OPTS) $(INCLUDE_OPTS) \ -D__RCMX000__ \ -DXSize=32 \ -DYSize=22 \ -D__NO_SCREEN_COLOR_INIT -D__BUFFERED_GRAPHICS -DTURN_BASED \ -D_XL_NO_COLOR -D__ALT_PRINT -D__STDIO \ -D__NO_WAIT -D_XL_NO_SLEEP -D__DEFAULT_CLEAR_SCREEN \ -D__NO_INIT_GRAPHICS \ $(FULL_FILES) \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c \ -create-app -o$(BUILD_PATH)/FULL_rcmx000_buffered.bin scz180: $(Z88DK_PATH)$(MYZ88DK) +scz180 $(SCCZ80_OPTS) $(INCLUDE_OPTS) \ -D__SCZ180__ \ -DXSize=32 \ -DYSize=22 \ -D__NO_SCREEN_COLOR_INIT -D__BUFFERED_GRAPHICS -DTURN_BASED \ -D_XL_NO_COLOR -D__ALT_PRINT -D__STDIO \ -D__NO_WAIT -D_XL_NO_SLEEP -D__DEFAULT_CLEAR_SCREEN \ -D__NO_INIT_GRAPHICS \ $(FULL_FILES) \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c \ -create-app -o$(BUILD_PATH)/FULL_$@_buffered.bin rm $(BUILD_PATH)/FULL_$@_buffered_BSS.bin rm $(BUILD_PATH)/FULL_$@_buffered_CODE.bin rm $(BUILD_PATH)/FULL_$@_buffered_UNASSIGNED.bin hello_s1mp3: $(Z88DK_PATH)$(MYZ88DK) +s1mp3 \ ./test/helloworld.c \ -o$(BUILD_PATH)/hello_s1mp3.bin hello_getchar_pacman: $(Z88DK_PATH)$(MYZ88DK) +pacman \ ./test/helloworld_getchar.c \ -o$(BUILD_PATH)/$@.bin hello_getchar_s1mp3: $(Z88DK_PATH)$(MYZ88DK) +s1mp3 \ ./test/helloworld_getchar.c \ -o$(BUILD_PATH)/hello_getchar_s1mp3.bin s1mp3: $(Z88DK_PATH)$(MYZ88DK) +s1mp3 $(SCCZ80_OPTS) $(INCLUDE_OPTS) \ -D__S1MP3__ \ -DXSize=12 \ -DYSize=9 \ -D__NO_SCREEN_COLOR_INIT -D__BUFFERED_GRAPHICS -DTURN_BASED \ -D_XL_NO_COLOR -D__ALT_PRINT -D__STDIO \ -D__NO_WAIT -D_XL_NO_SLEEP -D__NO_WAIT -D__NO_PRINT -D__DEFAULT_CLEAR_SCREEN \ -D__NO_INIT_GRAPHICS \ $(FULL_FILES) \ $(CROSS_LIB_PATH)/display/alt_print/memory_mapped_alt_print.c \ -o$(BUILD_PATH)/FULL_s1mp3_buffered.bin # --list -m --c-code-in-asm # -compiler=sdcc -SO0 # --peep-file "" --list -m --c-code-in-asm # -compiler=sdcc -SO0 #spectrum_16k_light spectrum_test_sdcc: $(ASSETS_PATH)/z88dk_xchase.asm $(Z88DK_PATH)$(MYZ88DK) +zx -v -compiler=sdcc -SO0 \ $(INCLUDE_OPTS) \ -zorg=24055 --reserve-regs-iy \ -pragma-include:$(CFG_PATH)/z88dk/zpragma_clib.inc \ -pragma-redirect:getk=getk_inkey \ -DLESS_TEXT \ \ -DGHOSTS_NUMBER=8 \ -D_XL_NO_SLEEP -DNO_WALL \ -DNO_HINTS -DNO_CONTROL_INSTRUCTIONS -D__NO_SCREEN_COLOR_INIT \ -DNO_INITIAL_SCREEN \ -DNO_RANDOM_LEVEL \ -DSIMPLE_STRATEGY \ -D__SPECTRUM__ \ -D__ALT_MOVE \ -lndos -create-app \ -D__CONIO_GRAPHICS \ \ -pragma-redirect:fputc_cons=fputc_cons_generic \ -o $(BUILD_PATH)/WIP_LIGHT_$@.prg \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/udg/udg_init_graphics.c \ $(ASSETS_PATH)/z88dk_xchase.asm \ $(LIGHT_FILES) rm $(BUILD_PATH)/WIP_LIGHT_$@.prg rm $(BUILD_PATH)/WIP_LIGHT_$@_BANK_7.bin spectrum_test_sccz80: $(ASSETS_PATH)/z88dk_xchase.asm $(Z88DK_PATH)$(MYZ88DK) +zx -v \ $(INCLUDE_OPTS) \ -zorg=24055 \ -pragma-include:$(CFG_PATH)/z88dk/zpragma_clib.inc \ -pragma-redirect:getk=getk_inkey \ -DLESS_TEXT \ \ -DGHOSTS_NUMBER=8 \ -D_XL_NO_SLEEP -DNO_WALL \ -DNO_HINTS -DNO_CONTROL_INSTRUCTIONS -D__NO_SCREEN_COLOR_INIT \ -DNO_INITIAL_SCREEN \ -DNO_RANDOM_LEVEL \ -DSIMPLE_STRATEGY \ -D__SPECTRUM__ \ -D__ALT_MOVE \ -lndos -create-app \ -D__CONIO_GRAPHICS \ \ -pragma-redirect:fputc_cons=fputc_cons_generic \ -o $(BUILD_PATH)/WIP_LIGHT_$@.prg \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/udg/udg_init_graphics.c \ $(ASSETS_PATH)/z88dk_xchase.asm \ $(LIGHT_FILES) rm $(BUILD_PATH)/WIP_LIGHT_$@.prg rm $(BUILD_PATH)/WIP_LIGHT_$@_BANK_7.bin spectrum_buffered: $(Z88DK_PATH)$(MYZ88DK) +zx $(SCCZ80_OPTS) $(INCLUDE_OPTS) -vn \ -DTINY_GAME \ -pragma-include:$(CFG_PATH)/z88dk/zpragma_clib.inc \ -pragma-redirect:getk=getk_inkey \ -D__BUFFERED_GRAPHICS \ -DXSize=29 \ -DYSize=19 \ -DTURN_BASED \ -D__NO_INIT_GRAPHICS \ -D__SPECTRUM__ \ -lndos -create-app \ -pragma-redirect:fputc_cons=fputc_cons_generic \ -o $(BUILD_PATH)/WIP_TINY_spectrum_buffered.prg \ $(TINY_FILES) rm $(BUILD_PATH)/WIP_TINY_spectrum_buffered.prg rm $(BUILD_PATH)/WIP_TINY_spectrum_buffered_BANK_7.bin zx80_16k: $(Z88DK_PATH)$(MYZ88DK) +zx80 $(SCCZ80_OPTS) $(INCLUDE_OPTS) -vn \ -D__ZX80__ \ -D__ALT_SLEEP \ -D__CONIO_GRAPHICS \ -DZX80_GEN_TV_FIELD \ -lndos \ -create-app -o $(BUILD_PATH)/FULL_zx80_16k.prg \ $(CROSS_LIB_PATH)/display/init_graphics/z88dk/zx80/zx80_init_graphics.c \ $(CROSS_LIB_PATH)/sleep/sleep_macros.c \ $(SOURCE_PATH)/end_screen.c \ $(FULL_FILES) rm $(BUILD_PATH)/WIP_FULL_zx80_16k.prg ================================================ FILE: src/modules/LoggerSingleton.py ================================================ import logging import datetime # global logger # logger = None class LoggerSingleton: @staticmethod def initLogger(name, path): if name in logging.Logger.manager.loggerDict: logger = logging.getLogger(name) # print("Logger already exists") # print(str(logging.Logger.manager.loggerDict)) else: # print("Logger does not exists, yet") # print(str(logging.Logger.manager.loggerDict)) logger = logging.getLogger(name) logger.setLevel(logging.DEBUG) if not logger.handlers: # file_name='/cygdrive/c/Retro/CROSS-LIB/logs/log_'+datetime.datetime.now().strftime("%Y-%m-%d_%H_%M_%S")+'.log' # file_name=path+'/log_'+name+'_'+datetime.datetime.now().strftime("%Y-%m-%d_%H_%M_%S")+'.log' file_name=path+'/log.log' file_handler = logging.FileHandler(file_name,mode='a+', encoding="utf-8") formatter = logging.Formatter('%(asctime)s - %(filename)s:%(lineno)s - %(message)s') file_handler.setFormatter(formatter) logger.addHandler(file_handler) return logger # @staticmethod # def initConsoleLogger(name): # if name in logging.Logger.manager.loggerDict: # logger = logging.getLogger(name) # else: # logger = logging.getLogger(name) # logger.setLevel(logging.DEBUG) # if not logger.handlers: # console_handler = logging.StreamHandler() # formatter = logging.Formatter('%(asctime)s - %(filename)s:%(lineno)s - %(message)s') # console_handler.setFormatter(formatter) # logger.addHandler(console_handler) # return logger ================================================ FILE: src/modules/__init__.py ================================================ # assets ================================================ FILE: src/modules/build_functions.py ================================================ #!/usr/bin/env python from __future__ import print_function import datetime import shutil import os import sys import time from os import walk sys.path.append("modules") from modules.strings import * from modules.import_from_source import * from modules.tiles import * from modules.LoggerSingleton import LoggerSingleton from modules.init import * from modules.default_values import insert_default_sizes from modules.params import \ handle_two_letter_params, full_params, COMMANDS_LIST, get_size_params from modules.help_functions import help_command, manual from modules.file_functions import files, convert_makefile, files_in_path, dirs_in_path, built_files_in_path, list_of_projects, list_projects from modules.tests import * from modules.split_projects import * from modules.run import run_command, run from modules.commands import commands from modules.input_functions import generic_input, are_you_sure from modules.option_functions import * from modules.project_functions import rename, clone, create, delete from modules.target_defs import * from modules.shape_functions import * from modules.clean_functions import clean, clean_test DEFAULT_COMPILATION_THREADS = 4 logger = LoggerSingleton.initLogger('xl', '../logs') logger.info('Started') def multiple_project_reset(option_config, mypath): projects = [] for (_, dirnames, _) in walk(mypath): projects.extend(dirnames) break for project_name in projects: print("PROJECT: " + project_name) reset(option_config, [mypath, project_name]) print("\n") def multiple_size_build(option_config, mypath,target,xsize,ysize,debug): GNU_MAKE, \ compilation_threads, \ compilation_threads_string, \ parallelize_multi_build, \ z88dk_compiler, \ z88dk_compiler_opts, \ sccz80_compiler_opts, \ zsdcc_compiler_opts, \ cmoc_compiler_opts, \ cc65_compiler_opts, \ lcc1802_compiler_opts, \ gcc4ti99_compiler_opts, \ vbcc_compiler_opts, \ ack_compiler_opts, \ native_compiler_opts, \ native_compiler, \ tool_compiler, \ use_tools \ = option_config.build_config.get_opts() if option_config.build_config.parallelize_multi_build: # print("Parallelize_multi_build is ON") logger.info("Parallelize_multi_build is ON") from multiprocessing import Pool else: logger.info("Parallelize_multi_build is OFF") projects = [] for (_, dirnames, _) in walk(mypath): projects.extend(dirnames) break if use_tools: use_tools_str = " USE_TOOLS=1 " else: use_tools_str = "" target_to_check = target.replace("_sized", "") if (parallelize_multi_build==1) and (target_to_check in PARALLEL_TARGETS): logger.info("Parallelize multi build with %s", compilation_threads) pool = Pool(processes=int(compilation_threads)) for project_name in projects: if is_project_split(project_name): project_type = project_category(project_name) create_main(project_name,project_type) make_command = \ GNU_MAKE + " " + target + use_tools_str + " XSIZE=" + xsize + \ " YSIZE=" + ysize + " _DEBUG_FLAG=" + str(debug) + \ " _NATIVE_CC=" + native_compiler + " " + all_compilers_opts(option_config, "","") + \ " GNU_MAKE=" + GNU_MAKE + \ " TOOL_CC=" + tool_compiler + \ " -f " + mypath+"/"+project_name+"/Makefile."+project_name # run_command(option_config, make_command) # if is_project_split(project_name): # delete_main(option_config, project_name,project_type) pool.apply_async(run_command, [option_config, make_command]) pool.close() pool.join() for project_name in projects: if is_project_split(project_name): delete_main(option_config, project_name,project_type) else: for project_name in projects: if is_project_split(project_name): project_type = project_category(project_name) create_main(project_name,project_type) make_command = \ GNU_MAKE + " " + target + use_tools_str + " XSIZE=" + xsize + \ " YSIZE=" + ysize + " _DEBUG_FLAG=" + str(debug) + \ " _NATIVE_CC=" + native_compiler + " " + all_compilers_opts(option_config, "","") + \ " GNU_MAKE=" + GNU_MAKE + \ " TOOL_CC=" + tool_compiler + \ " -f " + mypath+"/"+project_name+"/Makefile."+project_name run_command(option_config, make_command) if is_project_split(project_name): delete_main(option_config, project_name,project_type) def multiple_build(option_config, mypath,target,threads,zsdcc_extra_optimization, reset_flag=False): GNU_MAKE = option_config.build_config.gnu_make if option_config.build_config.parallelize_multi_build: # print("Parallelize_multi_build is ON") logger.info("Parallelize_multi_build is ON") from multiprocessing import Pool else: logger.info("Parallelize_multi_build is OFF") projects = [] verbose = option_config.terminal_config.verbose gnu_make, \ compilation_threads, \ compilation_threads_string, \ parallelize_multi_build, \ z88dk_compiler, \ z88dk_compiler_opts, \ sccz80_compiler_opts, \ zsdcc_compiler_opts, \ cmoc_compiler_opts, \ cc65_compiler_opts, \ lcc1802_compiler_opts, \ gcc4ti99_compiler_opts, \ vbcc_compiler_opts, \ ack_compiler_opts, \ native_compiler_opts, \ native_compiler, \ tool_compiler, \ use_tools \ = option_config.build_config.get_opts() if use_tools: use_tools_str = " USE_TOOLS=1 " else: use_tools_str = "" for (_, dirnames, _) in walk(mypath): projects.extend(dirnames) break projects_to_build = len(projects) if verbose: print("Building " + str(projects_to_build) + " projects: ", end="") for project_name in projects: printc(option_config, bcolors.OKCYAN,project_name+" ") print("") if (parallelize_multi_build==1) and (target in PARALLEL_TARGETS): logger.info("Parallelize multi build with %s", threads) pool = Pool(processes=int(threads)) for project_name in projects: if verbose: print("project name: " + project_name) if reset_flag: reset(option_config, ["",project_name]) if is_project_split(project_name): project_type = project_category(project_name) create_main(project_name,project_type) make_command = \ GNU_MAKE + " " + target + use_tools_str + \ " ZSDCC_MAKEFILE_THREADS_OPTS=\'-j " + threads + "'" \ + all_compilers_opts(option_config, zsdcc_extra_optimization, "") + \ " _NATIVE_CC=" + native_compiler + \ " TOOL_CC=" + tool_compiler + " GNU_MAKE=" + GNU_MAKE + \ " -f " + mypath+"/"+project_name+"/Makefile."+project_name pool.apply_async(run_command, [option_config, make_command]) pool.close() pool.join() for project_name in projects: if is_project_split(project_name): delete_main(option_config, project_name,project_type) else: for project_name in projects: if reset_flag: reset(option_config, ["",project_name]) if verbose: print("project name: " + project_name) if is_project_split(project_name): project_type = project_category(project_name) create_main(project_name,project_type) make_command = \ GNU_MAKE + " " + target + use_tools_str + \ " ZSDCC_MAKEFILE_THREADS_OPTS=\'-j " + threads + "'" \ + all_compilers_opts(option_config, zsdcc_extra_optimization, "") + \ " _NATIVE_CC=" + native_compiler + \ " TOOL_CC=" + tool_compiler + " GNU_MAKE=" + GNU_MAKE + \ " -f " + mypath+"/"+project_name+"/Makefile."+project_name run_command(option_config, make_command) if is_project_split(project_name): delete_main(option_config, project_name,project_type) # Run a project natively (terminal with ncurses) with a given XSize and YSize def size(option_config, params, debug = False): GNU_MAKE = option_config.build_config.gnu_make verbose = option_config.terminal_config.verbose if len(params)<2: game_dir = "helloworld" else: game_dir = params[1] project_type = project_category(game_dir) parent_dir = project_type + "s" target, xsize, ysize = get_size_params(params) if verbose: print("Project name : " + game_dir) print("Project type : " + project_type) print("XSize: " + xsize) print("YSize: " + ysize) print("target: " + target) parent_and_game_dir = parent_dir + "/" + game_dir files_before = len(files_in_path("../build"))-1 if game_dir not in ["games", "examples", "projects", "all"]: if not os.path.exists(parent_and_game_dir): print("Project not found!") return native_compiler = option_config.build_config.native_compiler tool_compiler = option_config.build_config.tool_compiler if is_project_split(game_dir): if verbose: printc(option_config, bcolors.OKBLUE,"Create main.c from split source files\n") create_main(game_dir, project_type) make_command = \ GNU_MAKE + " " + target + " XSIZE=" + xsize + " YSIZE=" + ysize + \ " _DEBUG_FLAG=" + str(debug) + " " \ + all_compilers_opts(option_config, "","") + \ " _NATIVE_CC=" + native_compiler + \ " TOOL_CC=" + tool_compiler + \ " -f " + parent_dir+"/"+game_dir+"/Makefile."+game_dir run_command(option_config, make_command) if is_project_split(game_dir): if verbose: printc(option_config, bcolors.OKBLUE,"Delete main.c (because of split source files)\n") delete_main(option_config, game_dir, project_type) else: if game_dir in["games","examples","projects"]: multiple_size_build(option_config, game_dir,target,xsize,ysize,debug) elif game_dir in["new"]: multiple_size_build(option_config, "projects",target,xsize,ysize,debug) elif game_dir in["builtin","built-in"]: multiple_size_build(option_config, "games",target,xsize,ysize,debug) multiple_size_build(option_config, "examples",target,xsize,ysize,debug) elif game_dir=="all": multiple_size_build(option_config, "games",target,xsize,ysize,debug) multiple_size_build(option_config, "examples",target,xsize,ysize,debug) multiple_size_build(option_config, "projects",target,xsize,ysize,debug) else: return files_after = len(files_in_path("../build"))-1 if verbose: print("New binaries built: " + str(files_after-files_before)+"\n") # Rebuild a project, i.e., also rebuilds assets def rebuild(option_config, params): build(option_config, params, reset_flag=True) BUILD_TOOLS_THREADS = str(1) # Generate tools from source code def tools(option_config): GNU_MAKE = option_config.build_config.gnu_make # compilation_threads = option_config.build_config.compilation_threads tool_compiler = option_config.build_config.tool_compiler make_command = \ GNU_MAKE + " -j " + BUILD_TOOLS_THREADS + " tools TOOL_CC=" + tool_compiler + \ " GNU_MAKE=" + GNU_MAKE + " -f makefiles.common/auxiliary/Makefile_tools" run_command(option_config, make_command) def partial_tools(option_config, tools_to_build): GNU_MAKE = option_config.build_config.gnu_make # compilation_threads = option_config.build_config.compilation_threads tool_compiler = option_config.build_config.tool_compiler make_command = \ GNU_MAKE + " " + tools_to_build + " -j " + BUILD_TOOLS_THREADS + " TOOL_CC=" + tool_compiler + \ " GNU_MAKE=" + GNU_MAKE + " -f makefiles.common/auxiliary/Makefile_tools" run_command(option_config, make_command) # Build a project (for a target or multiple targets) def build(option_config, params, reset_flag = False): GNU_MAKE = option_config.build_config.gnu_make params = insert_default_sizes(option_config, params) # sized terminal if len(params)>=4 and params[2].startswith("terminal") and params[3].isnumeric() \ and params[4].isnumeric(): if reset_flag: reset(option_config, params) size(option_config, ["size"] + params[1:],0) return if len(params)<2: game_dir = "helloworld" else: game_dir = params[1] if len(params)>=1 and game_dir=="tools": tools(option_config) elif len(params)>=1 and game_dir.endswith("_tools"): partial_tools(option_config, game_dir) else: files_before = len(files_in_path("../build"))-1 project_type = project_category(game_dir) parent_dir = project_type + "s" if len(params)<3: target = "ncurses" else: target = params[2] if target in ["cc65", "z88dk", "cmoc", "lcc1802", "cc6303", "gcc4ti", "vbcc"]: target = target + "_targets" gnu_make, \ compilation_threads, \ compilation_threads_string, \ parallelize_multi_build, \ z88dk_compiler, \ z88dk_compiler_opts, \ sccz80_compiler_opts, \ zsdcc_compiler_opts, \ cmoc_compiler_opts, \ cc65_compiler_opts, \ lcc1802_compiler_opts, \ gcc4ti99_compiler_opts, \ vbcc_compiler_opts, \ ack_compiler_opts, \ native_compiler_opts, \ native_compiler, \ tool_compiler, \ use_tools \ = option_config.build_config.get_opts() # compilation_threads = option_config.build_config.compilation_threads if len(params)<4: threads = str(compilation_threads) else: threads = params[3] # zsdcc_extra_optimization = option_config.build_config.zsdcc_extra_optimization if len(params)>=5 and params[4]=="on": zsdcc_extra_optimization = "--max-allocs-per-node200000" else: zsdcc_extra_optimization = "" # compiler_opts = option_config.build_config.compiler_opts if len(params)>=6: compiler_opts = " " + params[5] else: compiler_opts = "" color_terminal = option_config.terminal_config.color_terminal verbose = option_config.terminal_config.verbose if verbose: print("Project name : ", end="") printc(option_config, bcolors.BOLD, game_dir+"\n") print("Target name : ", end="") printc(option_config, bcolors.UNDERLINE, target+"\n") print("Project type : " + project_type) print("Number of threads : " + threads) print("Extra optimization : " + zsdcc_extra_optimization) print("Compiler's options : " + compiler_opts) print("--------------------------") print("z88dk_compiler_opts : " + z88dk_compiler_opts) print("zsdcc_compiler_opts : " + zsdcc_compiler_opts) print("cmoc_compiler_opts : " + cmoc_compiler_opts) print("cc65_compiler_opts : " + cc65_compiler_opts) print("lcc1802_compiler_opts : " + lcc1802_compiler_opts) print("gcc4ti99_compiler_opts : " + gcc4ti99_compiler_opts) print("vbcc_compiler_opts : " + vbcc_compiler_opts) print("ack_compiler_opts : " + ack_compiler_opts) print("native_compiler_opts : " + native_compiler_opts) print("") parent_and_game_dir = parent_dir + "/" + game_dir if os.path.exists(parent_and_game_dir + "/config.ini"): print("Local config.ini detected") read_config(parent_and_game_dir + "/config.ini") if game_dir not in ["games", "examples", "projects", "all"]: if reset_flag: reset(option_config, params) if not os.path.exists(parent_and_game_dir): print("Project not found!") return if use_tools: use_tools_str = " USE_TOOLS=1 " else: use_tools_str = "" if is_project_split(game_dir): if verbose: printc(option_config, bcolors.OKBLUE,"Create main.c from split source files\n") create_main(game_dir, project_type) # print("DEBUG: " + target) # short_target = target.replace("_targets","") # if short_target in ["cc65","z88dk","ncurses"]: # print(get_targets("cc65")) # print(len(get_targets("cc65"))) make_command = \ GNU_MAKE + " " + target + \ use_tools_str + \ " ZSDCC_MAKEFILE_THREADS_OPTS=\'-j " + threads + "' " \ + all_compilers_opts(option_config, zsdcc_extra_optimization, compiler_opts) + \ " _NATIVE_CC=" + native_compiler + \ " TOOL_CC=" + tool_compiler + " GNU_MAKE=" + GNU_MAKE + \ " -f " + parent_dir+"/"+game_dir+"/Makefile."+game_dir run_command(option_config, make_command) if is_project_split(game_dir): if verbose: printc(option_config, bcolors.OKBLUE,"Delete main.c because of split source files\n") delete_main(option_config, game_dir, project_type) else: if game_dir in ["games","examples","projects"]: multiple_build(option_config, game_dir,target,threads,zsdcc_extra_optimization, reset_flag) elif game_dir=="new": multiple_build(option_config, "projects",target,threads,zsdcc_extra_optimization, reset_flag) elif game_dir in ["builtin","built-in"]: multiple_build(option_config, "games",target,threads,zsdcc_extra_optimization, reset_flag) multiple_build(option_config, "examples",target,threads,zsdcc_extra_optimization, reset_flag) elif game_dir=="all": multiple_build(option_config, "games",target,threads,zsdcc_extra_optimization, reset_flag) multiple_build(option_config, "examples",target,threads,zsdcc_extra_optimization, reset_flag) multiple_build(option_config, "projects",target,threads,zsdcc_extra_optimization, reset_flag) else: return files_after = len(files_in_path("../build"))-1 if verbose: printc(option_config, bcolors.OKBLUE, "New binaries built: " + str(files_after-files_before)+"\n") def slow(option_config, params): GNU_MAKE = option_config.build_config.gnu_make verbose = option_config.terminal_config.verbose game_dir = params[1] project_type = project_category(game_dir) parent_dir = project_type + "s" if len(params)>=4: target = params[2] slowdown = params[3] elif len(params)==3: target = NATIVE_TARGET slowdown = params[2] else: printc(option_config, bcolors.FAIL, "Wrong number of arguments") sys.exit(-1) parent_and_game_dir = parent_dir + "/" + game_dir if os.path.exists(parent_and_game_dir + "/config.ini"): print("Local config.ini detected") read_config(parent_and_game_dir + "/config.ini") if not os.path.exists(parent_and_game_dir): print("Project not found!") return if is_project_split(game_dir): if verbose: printc(option_config, bcolors.OKBLUE,"Create main.c from split source files\n") create_main(game_dir, project_type) make_command = \ GNU_MAKE + " " + target + \ " SLOWDOWN=" + slowdown + \ all_compilers_opts(option_config, "", "") + \ " -f " + parent_dir+"/"+game_dir+"/Makefile."+game_dir run_command(option_config, make_command) if is_project_split(game_dir): if verbose: printc(option_config, bcolors.OKBLUE,"Delete main.c because of split source files\n") delete_main(option_config, game_dir, project_type) # Delete temporary project files If a project is specified, it also deletes generated assets. def reset(option_config, params): GNU_MAKE = option_config.build_config.gnu_make verbose = option_config.terminal_config.verbose par_len = len(params) if par_len>1: game_dir = params[1] else: game_dir="" if game_dir in ["games","examples","projects"]: multiple_project_reset(option_config, game_dir) return if game_dir=="new": multiple_project_reset(option_config, "projects") return if game_dir in ["builtin","built-in"]: multiple_project_reset(option_config, "games") multiple_project_reset(option_config, "examples") return if game_dir=="all": multiple_project_reset(option_config, "games") multiple_project_reset(option_config, "examples") multiple_project_reset(option_config, "projects") return if len(params)<2: make_command = GNU_MAKE + \ " clean_generic_no_built_in -f makefiles.common/auxiliary/Makefile_common" if verbose: print("Delete all non-project-specific temporary files") run_command(option_config, make_command) return game_dir = params[1] project_type = project_category(game_dir) parent_dir = project_type + "s" if verbose: print("Project name: " + game_dir) parent_and_game_dir = parent_dir + "/" + game_dir if not os.path.exists(parent_and_game_dir): print("Project not found!") return if verbose: print("Delete all temporary files including generated assets for '"+game_dir+"'") make_command = GNU_MAKE + " clean_no_built_in -f " + \ parent_dir+"/"+game_dir+"/Makefile."+game_dir run_command(option_config,make_command) def make(option_config, params): tiles(option_config, params) rebuild(option_config, params) def assets(option_config, params): tiles(option_config, params) make_assets_from_tiles(option_config, params) ================================================ FILE: src/modules/clean_functions.py ================================================ import os from print_functions import printc, bcolors from project_functions import project_category from file_functions import files_in_path from modules.init import * from run import run_command def clean_test(option_config): clean(option_config, ["clean"]) files_after_clean = len(files_in_path("../build")) if files_after_clean>1: # printc(option_config, bcolors.FAIL, "[xl clean] KO\n") return 0 # printc(option_config, bcolors.OKGREEN, "[xl clean] OK\n") return 1 # Clean project data def clean(option_config, params): GNU_MAKE = option_config.build_config.gnu_make verbose = option_config.terminal_config.verbose if len(params)>=2: if params[1]=="tools": make_command = GNU_MAKE + " clean_tools GNU_MAKE=" + GNU_MAKE + " -f makefiles.common/auxiliary/Makefile_tools" run_command(option_config, make_command) return if params[1]=="log" or params[1]=="logs": make_command = GNU_MAKE + " clean_logs GNU_MAKE=" + GNU_MAKE + " -f makefiles.common/auxiliary/Makefile_tools" run_command(option_config, make_command) return if len(params)<2: make_command = GNU_MAKE + " clean_generic -f makefiles.common/auxiliary/Makefile_common" if verbose: print("Delete all built binaries and non-project-specific temporary files") run_command(option_config, make_command) return game_dir = params[1] project_type = project_category(game_dir) parent_dir = project_type + "s" print("Project name: " + game_dir) parent_and_game_dir = parent_dir + "/" + game_dir if not os.path.exists(parent_and_game_dir): print("Project not found!") return print("Delete all built binaries and temporary files (also specific to '"+ \ game_dir+"', e.g., generated assets)") make_command = GNU_MAKE + " clean -f " + parent_dir+"/"+game_dir+"/Makefile."+game_dir run_command(option_config, make_command) ================================================ FILE: src/modules/commands.py ================================================ from __future__ import print_function from collections import OrderedDict from print_functions import printc, bcolors COMMANDS_DESCRIPTIONS = OrderedDict( \ { "assets": "builds assets from tile and/or shape files", \ "build": "builds a project", \ "check": "it checks dependencies", \ "clean": "cleans binary files generated by a project", \ "clone": "clones a project", \ "commands" :"list all commands", \ "compilers": "check present compilers", \ "config": "displays the configuration", \ "create": "creates a new project", \ "delete": "completely deletes a project", \ "extend": "generates non-8x8 shapes from 8x8 shapes", \ "files": "shows all generated binary files", \ "help": "provides help on a command or topic", \ "import": "imports tiles from (Assembly/BASIC) files", \ "info": "displays some target info", \ "list": "lists all projects", \ "make": "build project using shape files", \ "manual": "prints the manual", \ "rebuild": "generates assets and builds a project", \ "rename": "renames a project", \ "reset": "deletes graphics assets", \ "rip": "rips Assembly or BASIC listings to produce tiles", \ "rotate": "rips Assembly or BASIC listings to produce rotated tiles", \ "run": "runs a project", \ "self": "test xl script", \ "show": "shows tiles of a project as shapes", \ "size": "builds the native version of a project with a given size", \ "slow": "builds a project for a target with a given slowdown", \ "split": "splits a shape file in left and right shape", \ "string": "produces case-sensitive strings as Cross-Lib characters macros", \ "test": "runs some tests", \ "tile": "converts a shape file into a tile", \ "tiles": "generates all tiles from shapes", \ "tools": "builds the tools", \ "unit_tests": "run unit-tests", }) COMMANDS_LIST = COMMANDS_DESCRIPTIONS.keys() SHORT_COMMANDS_LIST = OrderedDict( \ { \ "c": "clean", \ "f": "files", \ "h": "help", \ "l": "list", \ "m": "make", \ "r": "rebuild", \ "s": "slow", \ "t": "test", \ "u": "unit_tests", \ "x": "run", }) # Show all commands def commands(option_config): # Show full length commands for command, description in COMMANDS_DESCRIPTIONS.items(): printc(option_config, bcolors.BOLD, command) spaces = " " * (10-len(command)) print(spaces + " -> " + description) # Show short-hands print("") for short_command in SHORT_COMMANDS_LIST.items(): printc(option_config, bcolors.BOLD, short_command[0]) print(" -> ",end="") printc(option_config, bcolors.BOLD, short_command[1]+"\n") ================================================ FILE: src/modules/default_values.py ================================================ DEFAULT_TERMINAL_X_SIZE = 20 DEFAULT_TERMINAL_Y_SIZE = 17 def default_tile_size(target): if target in ["atari_lynx", "terminal8x6"]: xtile = 8 ytile = 6 elif target in ["apple2", "apple2enh", "terminal7x8"]: xtile = 7 ytile = 8 elif target in ["oric1", "atmos", "oric", "comx_ntsc", "terminal6x8"]: xtile = 6 ytile = 8 elif target in ['comx', 'pecom', 'micro', "terminal6x9"]: xtile = 6 ytile = 9 else: xtile = 8 ytile = 8 return xtile, ytile # TODO: mz def default_screen_size(target): if target in ("terminal", "terminal8x8", "terminal8x6", "atari_lynx"): xsize = 20 ysize = 17 elif target == "pc6001": xsize = 24 ysize = 16 elif target in ['ti82', 'ti83', 'ti8x']: xsize = 12 ysize = 8 elif target in ['ti85', 'ti86','z88']: xsize = 16 ysize = 8 elif target in ("oric1", "oric", "atmos"): xsize = 38 ysize = 28 elif target == "supervision": xsize = 20 ysize = 20 elif target == "gamate": xsize = 20 ysize = 19 elif target in ["apple2", "apple2enh", "atari", "atari5200", "terminal7x8"]: xsize = 20 ysize = 24 elif target in ['comx', 'comx_ntsc', 'pecom', 'micro', 'comc_ntsc', 'laser500', "terminal6x9", "terminal6x8", "aquarius"]: xsize = 40 ysize = 24 elif target in ["c64", "c16", "plus4", "c128", "vg5k", "cbm510", "msdos", "bee"]: xsize = 40 ysize = 25 elif target in ["sam"]: xsize = 32 ysize = 22 elif target in ["camputers_lynx"]: xsize = 32 ysize = 32 elif target == "vic20": xsize = 22 ysize = 23 elif target in ["mo5","to7"]: xsize = 39 ysize = 25 elif target in ["coco","dragon", "mc1000"]: xsize = 16 ysize = 24 elif target in ["sms", "spectrum", "creativision", "msx", "mtx", \ "zx81", "zx80", "mtx512", "mtx500", "svi", "sg1000", \ "sc3000", "einstein", "m5", "ace", "coleco", \ "vz", "vz200", "coco3"]: xsize = 32 ysize = 24 elif target in ["nes"]: xsize = 32 ysize = 28 elif target in ["pet", "cbm610"]: xsize = 80 ysize = 25 elif target in ["ncurses", "cpm"]: xsize = 80 ysize = 24 elif target in ["pce"]: xsize = 60 ysize = 25 elif target in ["ti99"]: xsize = 32 ysize = 23 elif target == "cpc": xsize = 20 ysize = 25 elif target in ["gb", "gg", "gamegear"]: xsize = 20 ysize = 18 elif target == "atari7800": xsize = 20 ysize = 28 else: xsize = None ysize = None return xsize, ysize def default_terminal_size_string(target): xsize, ysize = default_screen_size(target) if xsize == None: xsize = DEFAULT_TERMINAL_X_SIZE ysize = DEFAULT_TERMINAL_Y_SIZE xsize = str(xsize) ysize = str(ysize) return xsize, ysize def get_terminal_target(target): xtile, ytile = default_tile_size(target) return "terminal"+str(xtile)+'x'+str(ytile) def insert_default_sizes(option_config, params): if len(params)==4 and params[2].startswith('terminal'): target = params[3] terminal_target = get_terminal_target(target) xsize, ysize = default_terminal_size_string(target) return [params[0], params[1], terminal_target, xsize, ysize] if len(params)==3 and params[2].startswith('terminal'): terminal_target = params[2] xsize, ysize = default_terminal_size_string(terminal_target) return [params[0], params[1], terminal_target, xsize, ysize] return params ================================================ FILE: src/modules/execute.py ================================================ from __future__ import print_function try: from inspect import signature except: # from inspect import name_of # import inspect2 # signature = inspect2.signature(initializer) # import funcsigs # signature = funcsigs.signature(initializer) # Dummy signature to get xl build to work under Python 2.7 from collections import namedtuple Param = namedtuple('Param', 'parameters') def signature(name): return Param([1,2]) from modules.strings import * from modules.import_from_source import * from modules.tiles import * from modules.LoggerSingleton import LoggerSingleton from modules.init import * from modules.params import handle_two_letter_params, full_params, COMMANDS_LIST, get_size_params, get_params from modules.help_functions import help_command, manual from modules.file_functions import files, convert_makefile, files_in_path, dirs_in_path, built_files_in_path, list_of_projects, list_projects from modules.tests import * from modules.split_projects import * from modules.run import run_command, run from modules.commands import commands from modules.input_functions import generic_input, are_you_sure from modules.option_functions import * from modules.project_functions import rename, clone, create, delete from modules.target_defs import * from modules.clean_functions import clean, clean_test from modules.build_functions import * from modules.print_functions import bcolors, printc def normalize_command(command_name): return command_name.replace("list","list_projects").replace("help", "help_command").replace("import", "import_from_source") def execute_command(option_config, params): command_name = params[1] if command_name in COMMANDS_LIST: normalized_name = normalize_command(command_name) params_string = ", params[1:]" if len(signature(eval(normalized_name)).parameters)>1 else "" print(normalized_name+"(option_config" + params_string + ")") print(params[1:]) eval(normalized_name+"(option_config" + params_string + ")") elif command_name in list_of_projects("all") + ["examples"] + ["games"] + ["projects"] + ["all"]: build(option_config, params) else: manual(option_config, params) def execute_command(option_config, params): command_name = params[1] if command_name in COMMANDS_LIST: normalized_name = normalize_command(command_name) params_string = ", params[1:]" if len(signature(eval(normalized_name)).parameters)>1 else "" eval(normalized_name+"(option_config" + params_string + ")") elif command_name in list_of_projects("all") + ["examples"] + ["games"] + ["projects"] + ["all"]: build(option_config, params) else: manual(option_config, params) def execute_string(option_config, command_line, silent = True): params = command_line.split() max_command_length = 0 for command in COMMANDS_LIST: if len(command)>max_command_length: max_command_length = len(command) if not silent: spaces_before = max_command_length + 1 - len(params[1]) spaces_after = 40 - len(command_line) printc(option_config, bcolors.OKBLUE, "["+ params[1] +"] ") printc(option_config, bcolors.OKCYAN, (spaces_before * " ") + command_line + (spaces_after * " ") + "\n") execute_command(option_config, params) ================================================ FILE: src/modules/file_functions.py ================================================ from os import walk import os from print_functions import printc, bcolors def files_in_path(mypath): files = [] for (_, _, filenames) in walk(mypath): files.extend(filenames) break return files def dirs_in_path(mypath): dirs = [] for (dirpath, dirnames, filenames) in walk(mypath): dirs.extend(dirnames) break return dirs def built_files_in_path(mypath): files = [] for (_, _, filenames) in walk(mypath): built_files = [] for filename in filenames: if not filename.startswith('.'): built_files.append(filename) files.extend(built_files) break return files def list_of_projects(project_category): if project_category in ["examples", "projects", "games"]: res = dirs_in_path("./"+project_category) else: res = dirs_in_path("./examples")+dirs_in_path("./games")+dirs_in_path("./projects") return res # List all projects def list_projects(option_config, params): if len(params)<2: project_dirs = ["examples", "games", "projects"] elif params[1]=="all": project_dirs = ["examples", "games", "projects"] elif params[1] in ["games", "examples", "projects"]: project_dirs = [params[1]] elif params[1] in ["new"]: project_dirs = ["projects"] elif params[1] in ["built-in", "builtin"]: project_dirs = ["games", "examples"] else: return count = 0 for mypath in project_dirs: if not option_config.terminal_config.test: printc(option_config, bcolors.BOLD, "["+mypath+"]\n") for (_, dirnames, _) in walk(mypath): # projects.extend(dirnames) for project in dirnames: if not option_config.terminal_config.test: print(" "+str(project)) count+=1 break if not option_config.terminal_config.test: print("") if option_config.terminal_config.verbose: print("Projects found: " + str(count)) print("") return count def convert_makefile(option_config, dir,old_type,old_name,new_name): dest_path = "projects/"+dir source_game_dir = old_name target_game_dir = new_name source_parent_dir = old_type target_parent_dir = "projects" if option_config.terminal_config.verbose: print("- dir: " + dir) print("- old_type: " + old_type) print("- old_name: " + old_name) print("- new_game: " + new_name) fin = open("./"+dest_path+"/Makefile."+source_game_dir, "rt") data = fin.read() data = data.replace('CROSS-' + source_game_dir.upper(),'CROSS-'+target_game_dir.upper()) data = data.replace('GAME_NAME := ' + source_game_dir, 'GAME_NAME := '+target_game_dir) data = data.replace('PARENT_DIR = ' + source_parent_dir + "s", \ 'PARENT_DIR = ' + target_parent_dir) data = data.replace('include ./' + old_type + "s/" + source_game_dir, \ 'include ./projects/' + target_game_dir) fin.close() fin = open("./"+dest_path+"/Makefile."+target_game_dir, "wt") fin.write(data) fin.close() os.remove("./"+dest_path+"/Makefile."+source_game_dir) # Show all generated files def files(option_config): make_command = "ls -ls ../build" os.system(make_command) ================================================ FILE: src/modules/help_functions.py ================================================ from __future__ import print_function import os from params import COMMANDS_LIST, COMMANDS_DESCRIPTIONS, commands, full_params from import_from_source import printc, bcolors from file_functions import * from input_functions import generic_input import time import sys def list_of_documented_routines(): manual_files = files_in_path("../docs/manual/") documented_routines = [] for manual_file in manual_files: documented_routines.append(manual_file.replace(".txt","")) return documented_routines def list_documented_routines(): documented_routines = list_of_documented_routines() for documented_routine in documented_routines: print(documented_routine) def manual(option_config, params): if len(params)==1: printc(option_config, bcolors.OKCYAN, "DOCUMENTED ROUTINES\n") list_documented_routines() print("") print("Use") printc(option_config, bcolors.BOLD,"xl manual \n") return if params[1].startswith("_XL") or params[1] in ["XSize", "YSize"]: command_string = "cat ../docs/manual/" + params[1] + ".txt" else: command_string = "cat ../docs/manual/_XL_" + params[1] + ".txt" res = os.system(command_string) if res: printc(option_config, bcolors.WARNING,"\nCommand/topic not found\n") def help_help(option_config): print("Possible values for :") print(' '.join(str(cmd) for cmd in COMMANDS_LIST)) print("") printc(option_config, bcolors.BOLD,"xl help \n") print("for -specific help") print("\nExample:") print("\nxl help create \n It displays the help page for the 'create' xl script command") print("") print("\nxl help _XL_DRAW \n It displays the help page for the '_XL_DRAW' C routine") print("") printc(option_config, bcolors.OKCYAN,"POSSIBLE COMMANDS") print("") commands(option_config) print("\nUse") printc(option_config, bcolors.BOLD,"xl help manual") print("\nto get the list of documented C routines.") print("\nUse") printc(option_config, bcolors.BOLD,"xl manual") print("\nto get the full manual for the C routines.") def help_command(option_config, params): if len(params)<2: printc(option_config, bcolors.BOLD,"\nxl <[optional] parameters>") print("\n(or xl <[optional] parameters> as a shorthand for \n xl build <[optional] parameters>)") print("") help_help(option_config) elif params[1] in COMMANDS_DESCRIPTIONS.keys(): print("Help on ", end="") printc(option_config, bcolors.OKCYAN, params[1]+"\n") print("It " + COMMANDS_DESCRIPTIONS[params[1]] + "\n") params = full_params(params) if params[1]=="assets": printc(option_config, bcolors.BOLD,"\nxl assets \n") print("") print("It generates assets files for (new or existing project) by using tile or shape files.") print("") print("Example:") print("Edit any shape file in ./projects/foo/shapes/8x8/") print("xl assets foo") print("xl show foo (to check the result)") print("The output will be in ./projects/foo/generated_assets/") elif params[1]=="split": printc(option_config, bcolors.BOLD,"\nxl split \n") print("") print("It displays a shape file as two shapes, one for the left and one for the right side.") print("Example:") print("xl split games/shuriken/docs/16x12_multi_tile.txt") print("") print("...#####") print(".###....") print("##.....#") print("#..#####") print("#...#..#") print("#...####") print("##..#...") print(".###....") print("...#####") print("........") print("........") print("........") print("") print("#.......") print("###.....") print("..##....") print("...#....") print("...#....") print("#..#....") print("..##....") print("###.....") print("#.......") print("........") print("........") print("........") elif params[1]=="config": printc(option_config, bcolors.BOLD,"\nxl config\n") print("") print("It displays the configuration as read from config.ini") print("Example:") print("xl config") elif params[1]=="extend": printc(option_config, bcolors.BOLD,"\nxl extend \n") print("") print("It generates candidate shapes of different sizes from the 8x8 shapes of .") print("Example:") print("In order to generate candidate shapes for foo using 8x8 shapes, you can do:") print("xl extend foo") elif params[1]=="make": printc(option_config, bcolors.BOLD,"\nxl make \n") print("") print("It re-builds for and its assets by using the pictorial text files in the shapes directory.") print("It is equivalent to:") print("xl tiles ") print("xl rebuild ") print("") print("Example:") print("xl make foo vic20") print("builds the project foo and its assets from the pictorial text file for the Vic 20") elif params[1]=="tools": printc(option_config, bcolors.BOLD,"\nxl tools\n") print("\n(or xl build tools)") print("") print("It builds some post-processing tools from their source code.") print("") print("This command has to be run only once to build the tools. The tools are used by few targets to generate ready to use images.") elif params[1]=="rename": printc(option_config, bcolors.BOLD,"\nxl rename \n") print("It renames an existing user-defined project to .") print("") print("Remark: No matter the type of source project, the target project will be in the 'src/projects' directory") print("") print("Example:") print("If you have previously created a new project 'foo'") print("(e.g., by cloning it with 'xl clone bomber foo'),") print("then you can rename it to 'bar' with") print("xl rename foo bar") elif params[1]=="clone": printc(option_config, bcolors.BOLD,"\nxl clone \n") print("It clones an existing project of any type to create a new user-defined project.") print("") print("Remark: No matter the type of source project, the target project will be in the 'src/projects' directory") print("") print("Example:") print("If you want to clone the built-in game Cross Horde you can just do:") print("xl clone horde foo") print("") print("If you have previously created a user-defined project 'foo',") print("you can further clone it with:") print("xl clone foo bar") elif params[1]=="show": printc(option_config, bcolors.BOLD,"xl show <[optional] TileIndex> <[optional] XTileSize> <[optional] YTileSize> .\n") print("It displays the shape of graphics tiles of a given project.") print("") print("") print("Use this mandatory parameter to specify the project whose tiles you want to display") print("") print("") print("This optional parameter specifies which tile we want to display.") print("When no index is specified, then all tiles of the given shape are displayed.") print("") print(" ") print("These optional parameters specify the size of the tiles we want to see") print("") print("Example:") print("xl show chase 5 8 8") print("Decoding file tile: ./games/chase/tiles/8x6/tile5.txt") print("") print(".######.") print("#.#..#.#") print("#..##..#") print("#..##..#") print("#.#..#.#") print(".######.") elif params[1]=="size": printc(option_config, bcolors.BOLD,"xl size \n") print("It builds for the native host with screen size provided by and .") print("The built binaries will be in the 'build' directory.") print("\n") print(" can also be 'games'/'examples'/'projects'/'all' to build multiple projects.") print("\nxl size bomber 20 20 \n It builds Cross Bomber for the native host with screen size 20x20.") print("\nxl size examples 16 12 \n It builds all examples for the native host with screen size 16x12.") elif params[1]=="run": printc(option_config, bcolors.BOLD,"xl run <[optional] xsize> <[optional] ysize>\n") printc(option_config, bcolors.BOLD,"xl run <[optional] target>\n") print("If no target is specified, it runs the previously compiled native version of .") print("If integer parameters and are provided, then it runs the version of those sizes.") print("") print("") print("This parameter is the name of the project that we want to run.") print("") print(" ") print("These parameters are the size of the native version that we want to run.") print("") print("") print("This parameter is the target for which we want to run .") print("This parameter only works for a restricted set of targets and it requires an emulator.") print("") print("Examples:") print("xl run snake") print("It runs the previously built (e.g., with 'xl build snake') native version of Cross Snake.") print("") print("xl run snake 16 16") print("It runs the previously built with size 16X16 (with 'xl size snake 16 16') native version of Cross Snake.") elif params[1]=="manual": printc(option_config, bcolors.BOLD,"xl manual <[optional] routine>\n") print("If no optional parameter is passed it displays a list of documented CROSS-LIB APIs.") print("If a Cross-Lib C rouine is passed as an optional parameter, it displays its description and usage") print("") print("Documented commands:") list_documented_routines() elif params[1]=="string": printc(option_config, bcolors.BOLD,"xl string \n") print("It converts a string litteral into a concatenation of") print('_XL_A,..., _XL_Z, _XL_a, ..., _XL_z, _XL_SPACE, "0", ..., "9"') print("") print("This parameter is the string to convert. It has to match the regular expression '[A-Za-z0-9 ]*'.") print("") print("Example:") print('xl string "1 Hello World 2"') print('"1" _XL_SPACE _XL_H _XL_e _XL_l _XL_l _XL_o _XL_SPACE _XL_W _XL_o _XL_r _XL_l _XL_d _XL_SPACE "2"') elif params[1]=="rebuild": printc(option_config, bcolors.BOLD,"xl rebuild <[optional] target>\n") print("It rebuilds .") # print("Remark: The 'build' command can be omitted.") print("It is equivalent to 'xl reset' followed by 'xl build '") print("Use 'xl help reset' and 'xl help build' for more information") elif params[1]=="import": printc(option_config, bcolors.BOLD,"xl import <[optional] project>\n") print("") print("") print("It is an Assembly or BASIC file (e.g., an Assembly file exported from CharPad or VChar64).") print("For example in CharPad you can export the tile data with:") print("File->Import/Export->Text/Asm->Export All or File->Import/Export->Text/Asm->Export All") print("") print("") print("If a project name is passed then the tiles are imported into as 8x8 tiles") print("") print("Remark: For extra heuristics useful on some BASIC files use 'xl rip'") print("") print("Example:") print("If you create a new project 'myname' with") print("xl create myname") print("You can import a tile into it from an Assembly file with something like this:") print("xl import ./assets/examples/tile_sets/asm/tile_8x6_shapeA.txt myname") elif params[1]=="rip": printc(option_config, bcolors.BOLD,"xl rip <[optional] project>\n") print("") print("") print("It is an Assembly or BASIC file (e.g., an Assembly file exported from CharPad or VChar64).") print("For example in CharPad you can export the tile data with:") print("File->Import/Export->Text/Asm->Export All or File->Import/Export->Text/Asm->Export All") print("") print("") print("If a project name is passed then the tiles are imported into as 8x8 tiles") print("") print("Example:") print("If you create a new project 'myname' with") print("xl create myname") print("You can import a tile into it from an Assembly file with something like this:") print("xl rip ./assets/examples/tile_sets/asm/tile_8x6_shapeA.txt myname") elif params[1]=="info": printc(option_config, bcolors.BOLD,"xl info /\n") print("") print("If the parameter is a target, it displays some information on the target and how it is supported in `terminal` mode.") print("") print("If the parameter is a project, it displays some information on the project .") elif params[1]=="rotate": printc(option_config, bcolors.BOLD,"xl rotate <[optional] project>\n") print("") print("It works similarly to 'xl import <[optional] project>' but rotates the result.") print("") print("") print("It is an Assembly or BASIC file (e.g., an Assembly file exported from CharPad or VChar64).") print("For example in CharPad you can export the tile data with:") print("File->Import/Export->Text/Asm->Export All or File->Import/Export->Text/Asm->Export All") print("") print("") print("If a project name is passed then the tiles are imported into as 8x8 tiles") print("") print("Example:") print("If you create a new project 'myname' with") print("xl create myname") print("You can import a tile into it from an Assembly file with something like this:") print("xl rotate ./modules/examples/tile_sets/asm/tile_8x6_shapeA.txt myname") elif params[1]=="tile": printc(option_config, bcolors.BOLD,"xl tile <[optional] project> <[optional] tile_index>\n") print("It converts the pictorial text file file into a line that can be used as an asset file.") print("") print("") print("The file describes with '#' and '.' the shape of a tile.") print("") print("") print("This optional parameter specifies the project whose tile we want to modify") print("") print("") print("This parameter is the index of the tile we want to modify") print("\nPress ENTER to continue...") time.sleep(1) generic_input("") print("\nExample in 'src/examples/tiles/tile_shape0.txt':") print("...##...") print("..#..#..") print("...##...") print(".##..##.") print("#.####.#") print("# ####.#") print("..#..#..") print("..#..#..") print("") print("xl tile ./modules/examples/single_tiles/tile_shape0.txt") print("produces: ") print("24,36,24,102,189,189,36,36") print("") print("To be copied in 'tile_.txt' in '/tiles/8x8' to modify the shape.") print("Remark: run 'xl reset ' before rebuilding with modified tiles.") elif params[1]=="tiles": printc(option_config, bcolors.BOLD,"xl tiles <[optional] xsize> <[optional] ysize>\n") printc(option_config, bcolors.BOLD,"xl tiles <[optional] target>\n") print("It converts all shape files into tiles and stores them as such in the project.") print("It imports from files named 'shape.txt' inside the directories in the 'shapes' directory of a given project") print("The shape file format is the one used by 'xl tile'. Run 'xl help tile' for more information.") print("If no optional parameter is passed, then 8x8 shape is assumed") print("If a target is passed as parameter it will guess xsize and ysize for that target.") print("") print("Example: ") print("Provided that you have a project named 'foo', the command") print("xl tiles foo 6 8") print("will import as tiles from all shape files 'shape.txt' (found in './projects/foo/shapes/6x8') into './projects/foo/tiles/6x8/'") elif params[1]=="self": printc(option_config, bcolors.BOLD,"xl self\n") print("It tests itself by performing a sequence of 'xl' commands.") print("") elif params[1]=="unit-tests": printc(option_config, bcolors.BOLD,"xl self\n") print("It runs unit-tests on the script code.") elif params[1]=="compilers": printc(option_config, bcolors.BOLD,"xl self\n") print("It checks the presence of the most common compilers.") elif params[1]=="check": printc(option_config, bcolors.BOLD,"xl check <[optional] params>\n") print("It runs some check on the dependencies.") print("") print("") print("If nothing is passed to , then it performs several checks.") print("If is 'compilers', then it checks the presence of the most common compilers.") print("If is 'tools', then it checks the presence of the most common tools.") print("If is 'emulators', then it checks the presence of the emulators used by xl.") print("If is 'interpreters', then it checks the presence of the interpreters used by xl.") print("If is 'libraries', then it checks the presence of the libraries used by xl.") elif params[1]=="test": printc(option_config, bcolors.BOLD,"xl test <[optional] params> <[optional] target>\n") print("It runs some operations to test 'xl'.") print("") print("") print("If nothing is passed to , then it performs several tests including the self-test.") print("If 'self' is passed to , then it tests itself by performing a sequence of 'xl' commands.") print("If is 'compilers', then it checks the presence of the most common compilers.") print("If is 'tools', then it checks the presence of the most common tools.") print("If is 'emulators', then it checks the presence of the emulators used by xl.") print("If is 'interpreters', then it checks the presence of the interpreters used by xl.") print("If is 'libraries', then it checks the presence of the libraries used by xl.") print("If is a game/example/project, it checks if a binary for (native if no ), can be built for the project.") print('If is "games" or "examples", it checks if binaries for (native if no ) can be built for all games/examples.') print("If 'cc65', 'z88dk, 'cmoc', 'ack', 'cc6303', 'vbcc', 'lcc1802' or 'native' is passed to , it compiles a test program using the corresponding compiler.") print("If 'z88dk_alt' is passed to , then it compiles a different test program using both Z88DK compilers.") print("If 'unit-tests' is passed to , then it runs unit-tests on the script code.") elif params[1]=="files" or params[1]=="f": printc(option_config, bcolors.BOLD,"xl files\n") print("It shows the built binary files (the conent of the `build` directory).\n") print("Remark: 'xl files' can be shorten with `xl f`.") elif params[1]=="slow": printc(option_config, bcolors.BOLD,"xl slow \n") print("It builds for with (total) slowdown given by ") print("\nExamples:") print("\nxl slow horde vic20 800 \n It builds Horde for the Commodore Vic 20 using CC65 with (total) slowdown equal to 800.") elif params[1]=="build": printc(option_config, bcolors.BOLD,"xl build <[optional] target> or xl <[optional] target>\n") print("It builds for .") print("The built binaries will be in the 'build' directory.") print("\n") print(" can also be 'games'/'examples'/'projects'/'all' to build multiple projects") print("\n") print("REMARK 1: If no is passed, then the native target 'ncurses' (terminal console with ASCII tiles) is considered.") print("REMARK 2: If 'terminal' or 'terminal' is passed as target, then the native terminal 'graphics' is considered with tiles with NxM pixels.\nThis target requires you to reduce the font size to discern the graphics.") print("The 'terminal' keyword can be followed by and to specify the screen shape.") print("\nIf '_targets' is passed as (e.g., 'cc65_targets'), \nthen the given project/s is/are built for all targets that use to be compiled.") print("Possible dev-kits are: 'cc65', 'z88dk', 'cmoc', 'lcc1802'.") print("\n[NOT recommended] If 'all' is passed as , then the given project/s is/are built for all targets (it may take very long and it requires all supported compilers.") print("\nPress ENTER to continue...") time.sleep(1) generic_input("") print("\nExamples:") print("\nxl build bomber vic20 \n It builds Cross Bomber for the Commodore Vic 20 using CC65.") print("\nxl snake \n It builds Cross Snake for the native target (terminal console).") print("\nxl chase cc65_targets \n It builds Cross Chase for all targets that use CC65 to be built.") print("\nxl games cpc \n It builds all games for the Amstrad CPC using Z88DK.") print("\nxl examples c64 \n It builds all examples for the Commodore 64 using CC65.") print("\nxl horde all \n It builds Cross Horde for all its supported targets using all supported necessary compilers.") print("\nxl projects all \n It builds all built-in projects for all supported targets using all supported necessary compilers.") print("\nxl all c16 \n It builds all projects (games and examples and user-defined projects) for the Commodore 264 series using CC65.") elif params[1]=="create": printc(option_config, bcolors.BOLD,"xl create <[optional] type>\n") print("It creates .") print("\n") print("If no is passed, then the initial code will just display 'hello world'") print("If 'game' is passed as , then the project is build with some initial template game code.") print("If 'apis' is passed as , then the project is build with some code that shows how to use all APIs.") print("\nExamples:") print("\nxl create foo \n It builds a new project 'foo' with some initial code that display 'hello world' on the screen.") print("\nxl create bar game \n It builds a new project 'bar' with some initial game code (main loop, level loop, etc.).") elif params[1]=="delete": printc(option_config, bcolors.BOLD,"xl delete <[optiona] interactive>\n") print("It removes , i.e., it deletes its folder with its content (source code, graphics assets, makefile).") print("\n") print(" cannot be a built-in project.") print("\n") print("If '-y' is passed as , then the command won't ask for confirmation.") print("\nExample:") print("\nxl delete foo \n It deletes the project 'foo'.") print("\nxl delete foo -y \n Same as above but no confirmation is asked.") elif params[1]=="reset": printc(option_config, bcolors.BOLD,"xl reset <[optional] project>\n") print("It deletes temporary files created during the build process.") print("\n") print("If no is passed, only non-project specific temporary files are deleted.") print("If the parameter is used, then also project-specific temporary files are deleted (and in particular generated graphics assets).") print("\nExamples:") print("\nxl reset \n It deletes non-project specific temporary files.") print("\nxl reset foo \n It deletes all temporary files (both generic and project-specific).") elif params[1]=="clean": printc(option_config, bcolors.BOLD,"xl clean <[optional] project>\n") print("It deletes both built binaries and temporary files created during the build process.") print("\n") print("If no is passed, only built binaries and non-project specific temporary files are deleted.") print("If the parameter is used, then also project-specific temporary files are deleted (e.g., generated graphics assets).") print("\nExamples:") print("\nxl clean \n It deletes all built binaries and non-project specific temporary files.") print("\nxl clean foo \n It deletes all built-in binaries and all temporary files (both generic and project-specific).") elif params[1]=="list" or params[1]=="l": printc(option_config, bcolors.BOLD,"xl list <[optional] params>\n") print("It lists current projects in a given category or all projects.") print("") print("") print("If nothing is passed as then all projects are built") print("If 'games','examples' or 'projects' is passed as then only projects in the respective directory are listed") print("\nExamples:") print("xl list \n It lists all projects (games, examples and new projects)") print("xl list projects \n It lists all user-defined projects") elif params[1]=="commands": printc(option_config, bcolors.BOLD,"xl commands\n") print("It displays the available commands.") elif params[1]=="help" or params[1]=="h": printc(option_config, bcolors.BOLD,"xl help <[optional] command>\n") print("It displays help instructions.") print("\n") help_help(option_config) elif params[1] in list_of_documented_routines(): manual(option_config, params) else: print("Command not recognized") help_help(option_config) ================================================ FILE: src/modules/import_from_source.py ================================================ from __future__ import print_function import sys import os from print_functions import * from project_functions import project_category from shape_functions import read_shape, compute_shape, compute_rotated_shape from init import NUMBER_OF_TILES # Patterns used to rip and import tile data ONE_REPPRESENTATIONS = ["#","*","X","x","1","+","@","$","O","o"] ASSEMBLY_EXTENSIONS = [".s",".asm",".a99",".as", ".acme"] BASIC_EXTENSIONS = [".bas", ".lb", ".b", ".lst"] BYTE_PATTERN_LIST = [".byte","!byte","defb","fcb","db","dc.b","byte",".BYTE","!BYTE","DEFB","FCB","DB","DC.B","BYTE","!Byte",".Byte"] WORD_PATTERN_LIST = [".word","!word","defw","fcw","dw","dc.w","data",".WORD","!WORD","DEFW","FCW","DW","DC.W","DATA","!Word",".Word"] ASSEMBLY_PATTERN_LIST = BYTE_PATTERN_LIST + WORD_PATTERN_LIST BASIC_ONLY_NO_SKIP_PATTERN_LIST = ["dA", "BIN", "d.", "D."] BASIC_ONLY_SKIP_PATTERN_LIST = [ "symbol", "SYMBOL", "vdu 23,", "VDU 23,", "vdu23,", "VDU23,"] BASIC_ONLY_PATTERN_LIST = BASIC_ONLY_NO_SKIP_PATTERN_LIST + BASIC_ONLY_SKIP_PATTERN_LIST PATTERN_LIST = ASSEMBLY_PATTERN_LIST + BASIC_ONLY_PATTERN_LIST SKIP_PATTERN_LIST = BASIC_ONLY_SKIP_PATTERN_LIST # Detect Assembly extension def has_extension(string, patterns): for i in range(len(patterns)): if string.endswith(patterns[i]) or string.endswith(patterns[i].upper()): return True return False # BASIC if nothing is found between commas in BASIC than insert a "0" character def fill_empty_slots_with_zero(data_list): new_list = [] for i in range(len(data_list)): if data_list[i]=="": new_list.append("0") else: new_list.append(data_list[i]) return new_list # Try to detect hex data without hex prefixes def has_headless_hex(trimmed_lines): if "$" not in str(trimmed_lines) and "&" not in str(trimmed_lines): for i in range(len(trimmed_lines)): data = trimmed_lines[i].split(",") for j in range(len(data)): if len(data[j])!=2: return False return True else: return False def has_nine_byte_lines(trimmed_lines): for i in range(len(trimmed_lines)): length = len(trimmed_lines[i].split(",")) if length!=9: return False return True def normalize_basic_line(line): # Convert hex notation to $ line = line.replace("&H","$").replace("&h","$") # Capture binary BIN UDG in Sinclair BASIC line = line.replace("BIN", "\nBIN@") if("symbolafter" in line) or ("symbol after" in line): line = "" if("SYMBOLAFTER" in line) or ("SYMBOL AFTER" in line): line = "" return line def normalize_assembly_line(line): # Convert hex notation to $ line = line.replace(">","$").replace("#","$").replace("0x","$").replace("&H","$").replace("&h","$") # Convert bin notation to @ line = line.replace("%","@").replace("0b","@") return line def normalize_line(line, basic_extension, assembly_extension): # Remove spaces and new lines line = line.replace(" ","").replace("\n","") if assembly_extension: return normalize_assembly_line(line) elif basic_extension: return normalize_basic_line(line) else: return normalize_assembly_line(normalize_basic_line(line)) def remove_basic_comments(line): line = line.split(":REM")[0] line = line.split(":rem")[0] line = line.split(": REM")[0] line = line.split(": rem")[0] line = line.split(":'")[0] line = line.split(": '")[0] line = line.split("'")[0] line = line.replace("{","").replace('}"',"").replace("}",",").replace('"',"") return line def remove_assembly_comments(line): line = line.split(" ;")[0] line = line.split(";")[0] return line def display_data_type(word_data, verbose=False): if verbose: if word_data: data_type = "16-bit" else: data_type = "8-bit" print("Data type detected : " + data_type) def display_code_type(basic_code, verbose=False): if verbose: if basic_code: code_type = "BASIC" else: code_type = "Assembly" print("Code type : " + code_type) def display_extension_type(assembly_extension, basic_code, verbose=False): if verbose: if assembly_extension: extension_type = "Assembly" elif basic_code: extension_type = "BASIC" else: extension_type = "Undefined" print("\nFile extension type : " + extension_type) def is_basic_code(directive,assembly_extension): return (directive in BASIC_ONLY_PATTERN_LIST) or ((directive=="data" or directive=="DATA") and not assembly_extension) # Which if any pattern is the line matching? def line_pattern(line): for i in range(len(PATTERN_LIST)): if PATTERN_LIST[i] in line: return i return -1 def remove_comments(line,basic_code): if basic_code: line = remove_basic_comments(line) else: # Remove comments line = remove_assembly_comments(line) return line def split(option_config, params): import_split_tiles(option_config, params[1]) def rip_tiles(option_config, filename, xsize, ysize, rip = False, rotate = False): try: fin = open(filename, "rt") assembly_extension = has_extension(filename,ASSEMBLY_EXTENSIONS) basic_extension = has_extension(filename,BASIC_EXTENSIONS) lines = fin.readlines() # Only take patten lines if Magellan extension is detected if has_extension(filename, ['a99','A99']): filtered_lines = [] for line in lines: if line.startswith("PAT"): filtered_lines.append(line) lines = filtered_lines return aux_rip_tiles(option_config, lines, assembly_extension, basic_extension, xsize, ysize, rip, rotate) except ValueError as valueError: print(str(valueError.args[0])) except Exception as exception: print("Sorry! Failed to extract tile data from file: \n" + str(exception.args)) # It rips `xsize` X `ysize` tiles from an Assembly or BASIC source file def aux_rip_tiles(option_config, lines, assembly_extension, basic_extension, xsize, ysize, rip = False, rotate = False, verbose = False): # fin = open(filename, "rt") # assembly_extension = has_extension(filename,ASSEMBLY_EXTENSIONS) # basic_extension = has_extension(filename,BASIC_EXTENSIONS) # lines = fin.readlines() # print("DEBUG"+str(lines)) trimmed_lines = [] filtered_lines = [] pattern_count = [0] * len(PATTERN_LIST) # Do some filtering and count most common candidate directive for line in lines: line = normalize_line(line, basic_extension, assembly_extension) trimmed_lines.append(line) pattern_index = line_pattern(line) if pattern_index>=0: pattern_count[pattern_index]+=1 max_directive_count = max(pattern_count) if max_directive_count==0: raise ValueError("No pattern found") display_extension_type(assembly_extension,basic_extension) max_index = pattern_count.index(max_directive_count) directive = PATTERN_LIST[max_index] # Guess if file is BASIC and if data are 8-bit or 16-bit values # Remark: DATA can be both an Assembly (TMS9900) directive or a BASIC command basic_code = is_basic_code(directive, assembly_extension) word_data = directive in WORD_PATTERN_LIST and not basic_code # print("Pattern count: " + str(pattern_count)) if verbose: print("Detected pattern : " + directive) display_data_type(word_data) display_code_type(basic_code) for line in trimmed_lines: if (directive in line or directive.upper() in line): line = remove_comments(line,basic_code) filtered_lines.append(line) res = "" tiles = [] tile_count = 0 line_index = 0 new_tile="" single_byte_count = 0 trimmed_lines = [] while line_index8: print("WARNING: more than 8 bits detected in line " + line_index) number_of_bits=8 value = 0 for i in range(number_of_bits): if trimmed_lines[line_index][i] in ONE_REPPRESENTATIONS: value+=2**(number_of_bits-1-i) tile += str(value) if line_index!=ysize-1: tile += "," return tile, xsize, ysize def import_tile(file_name): fin = open(file_name, "rt") lines = fin.readlines() tile,xsize,ysize = compute_tile(lines) fin.close() return tile,xsize,ysize # It should be able to import from # - Assembly files that use byte directives with either decimal and hex notation # - Assembly files that use word directives with ONLY hex notation def _import_from_source(option_config, params, rotate = False, rip_option = False): filename = params[1] xsize = 8 ysize = 8 tiles = rip_tiles(option_config, filename, xsize, ysize, rip_option, rotate) try: if(len(params)>=3) and "-" not in params[2]: store_tiles(option_config, params[2],tiles, xsize, ysize) except Exception as exception: print("Sorry! Failed to store tiles: \n" + str(exception.args)) def rotate(option_config, params): _import_from_source(option_config, params, rotate = True, rip_option = False) def import_from_source(option_config, params): _import_from_source(option_config, params, rotate = False, rip_option = False) # It should be able to import from # - Assembly files that use byte directives with either decimal and hex notation # - Assembly files that use word directives with ONLY hex notation # - BASIC files that use decimal, hex notation or "headless" hex notation (by guessing) # Remark: This function is like "import_from_source" with the "-rip" option def rip(option_config, params, rotate = False): _import_from_source(option_config, params, rotate = False, rip_option = True) ================================================ FILE: src/modules/init.py ================================================ from __future__ import print_function from os import walk import sys from file_functions import dirs_in_path from LoggerSingleton import LoggerSingleton platform = sys.platform NUMBER_OF_TILES = 27 if(platform in ["cygwin", "msys"]): NATIVE_EXTENSION="exe" else: NATIVE_EXTENSION="out" python_version = sys.version_info[0] python_subversion = sys.version_info[1] game_projects = dirs_in_path("./games") example_projects = dirs_in_path("./examples") class bcolors: HEADER = '\033[95m' OKBLUE = '\033[94m' OKCYAN = '\033[96m' OKGREEN = '\033[92m' WARNING = '\033[93m' FAIL = '\033[91m' ENDC = '\033[0m' BOLD = '\033[1m' UNDERLINE = '\033[4m' logger = LoggerSingleton.initLogger('xl', '../logs') def handle_parallelism(option_config): if option_config.build_config.parallelize_multi_build: if option_config.terminal_config.verbose: print("Parallelize_multi_build is ON") logger.info("Parallelize_multi_build is ON") from multiprocessing import Pool else: logger.info("Parallelize_multi_build is OFF") def show_python_version(option_config): if option_config.terminal_config.verbose: logger.info("Verbose mode ON") print("----------------------------") print("----------------------------") print("Platform: " + platform) print("Python: " + str(python_version) + "." + str(python_subversion)) logger.info("Using Python version %s.%s", str(python_version), str(python_subversion)) print("GNU MAKE command: " + option_config.build_config.gnu_make) print("----------------------------") print("") ================================================ FILE: src/modules/input_functions.py ================================================ import sys def generic_input(string): if sys.version_info[0] < 3: return raw_input(string) return input(string) def are_you_sure(): return generic_input("Are you sure [Y/N]? ").lower() ================================================ FILE: src/modules/option_functions.py ================================================ from __future__ import print_function import sys import os from print_functions import printc, bcolors from LoggerSingleton import LoggerSingleton from init import * logger = LoggerSingleton.initLogger('xl', '../logs') class TerminalConfig(): def __init__( self, verbose = "0", color_terminal = "0", test = "0", native_console = "", fast_test = "1", interactive_test = "0" ): # terminal self.verbose = verbose self.color_terminal = color_terminal self.test = test self.native_console = native_console self.fast_test = fast_test self.interactive_test = interactive_test class RomConfig(): def __init__( self, vice_path = "", vice_rom_path = "", mame_path = "", mame_rom_path = "" ): self.vice_path = vice_path self.vice_rom_path = vice_rom_path self.mame_path = mame_path self.mame_rom_path = mame_rom_path class ExtendConfig(): def __init__( self, extend_algorithm = "", replace_shapes = "" ): self.extend_algorithm = extend_algorithm self.replace_shapes = replace_shapes class BuildConfig(): def __init__( self, gnu_make = "make", compilation_threads = "4", compilation_threads_string = "", parallelize_multi_build = "0", z88dk_compiler = "sccz80", z88dk_compiler_opts = "", sccz80_compiler_opts = "", zsdcc_compiler_opts = "zsdcc", cmoc_compiler_opts = "", cc65_compiler_opts = "", lcc1802_compiler_opts = "", gcc4ti99_compiler_opts = "", vbcc_compiler_opts = "", ack_compiler_opts = "", native_compiler_opts = "", native_compiler = "gcc", tool_compiler = "gcc", use_tools = "1" ): # build self.gnu_make = gnu_make self.compilation_threads = compilation_threads self.compilation_threads_string = compilation_threads_string self.parallelize_multi_build = parallelize_multi_build self.z88dk_compiler = z88dk_compiler self.z88dk_compiler_opts = z88dk_compiler_opts self.sccz80_compiler_opts = sccz80_compiler_opts self.zsdcc_compiler_opts = zsdcc_compiler_opts self.cmoc_compiler_opts = cmoc_compiler_opts self.cc65_compiler_opts = cc65_compiler_opts self.lcc1802_compiler_opts = lcc1802_compiler_opts self.gcc4ti99_compiler_opts = gcc4ti99_compiler_opts self.vbcc_compiler_opts = vbcc_compiler_opts self.ack_compiler_opts = ack_compiler_opts self.native_compiler_opts = native_compiler_opts self.native_compiler = native_compiler self.tool_compiler = tool_compiler self.use_tools = use_tools def get_opts(self): return \ self.gnu_make, \ self.compilation_threads, \ self.compilation_threads_string, \ self.parallelize_multi_build, \ self.z88dk_compiler, \ self.z88dk_compiler_opts, \ self.sccz80_compiler_opts, \ self.zsdcc_compiler_opts, \ self.cmoc_compiler_opts, \ self.cc65_compiler_opts, \ self.lcc1802_compiler_opts, \ self.gcc4ti99_compiler_opts, \ self.vbcc_compiler_opts, \ self.ack_compiler_opts, \ self.native_compiler_opts, \ self.native_compiler, \ self.tool_compiler, \ self.use_tools class OptionConfig: def __init__( self, terminal_config = TerminalConfig(), build_config = BuildConfig(), rom_config = RomConfig(), extend_config = ExtendConfig(), ): self.terminal_config = terminal_config self.build_config = build_config # rom self.rom_config = rom_config # extend self.extend_config = extend_config def all_compilers_opts(option_config, zsdcc_extra_optimization, compiler_opts): gnu_make, \ compilation_threads, \ compilation_threads_string, \ parallelize_multi_build, \ z88dk_compiler, \ z88dk_compiler_opts, \ sccz80_compiler_opts, \ zsdcc_compiler_opts, \ cmoc_compiler_opts, \ cc65_compiler_opts, \ lcc1802_compiler_opts, \ gcc4ti99_compiler_opts, \ vbcc_compiler_opts, \ ack_compiler_opts, \ native_compiler_opts, \ native_compiler, \ tool_compiler, \ use_tools \ = option_config.build_config.get_opts() if z88dk_compiler in ('zsdcc','sdcc'): compiler_selection = " -compiler=sdcc " compiler_opts = compiler_opts + " " + zsdcc_compiler_opts elif z88dk_compiler in ('ez80clang', 'clang'): compiler_selection = " -compiler=ez80clang " else: compiler_selection = "" compiler_opts = compiler_opts + " " + sccz80_compiler_opts return " ZSDCC_MAKEFILE_COMPILATION_OPTS='" + zsdcc_compiler_opts + " " + \ zsdcc_extra_optimization + "'" + \ " Z88DK_MAKEFILE_COMPILATION_OPTS='" + z88dk_compiler_opts + compiler_opts + \ compiler_selection + "'" + \ " GCC4TI99_MAKEFILE_COMPILATION_OPTS='" + gcc4ti99_compiler_opts + "'" + \ " VBCC_MAKEFILE_COMPILATION_OPTS='" + vbcc_compiler_opts + "'" + \ " ACK_MAKEFILE_COMPILATION_OPTS='" + ack_compiler_opts + "'" + \ " NATIVE_MAKEFILE_COMPILATION_OPTS='" + native_compiler_opts + "'" + \ " CMOC_MAKEFILE_COMPILATION_OPTS='" + cmoc_compiler_opts + "'" + \ " CC65_MAKEFILE_COMPILATION_OPTS='" + cc65_compiler_opts + "'" + \ " LCC1802_MAKEFILE_COMPILATION_OPTS='" + lcc1802_compiler_opts + "'" def config(option_config): printc(option_config, bcolors.BOLD,"[terminal]\n") verbose = option_config.terminal_config.verbose color_terminal = option_config.terminal_config.color_terminal fast_test = option_config.terminal_config.fast_test interactive_test = option_config.terminal_config.interactive_test print("verbose: " + str(verbose)) print("color_terminal: " + str(color_terminal)) print("fast_test: " + str(fast_test)) print("interactive_test: " + str(interactive_test)) print("") gnu_make, \ compilation_threads, \ compilation_threads_string, \ parallelize_multi_build, \ z88dk_compiler, \ z88dk_compiler_opts, \ sccz80_compiler_opts, \ zsdcc_compiler_opts, \ cmoc_compiler_opts, \ cc65_compiler_opts, \ lcc1802_compiler_opts, \ gcc4ti99_compiler_opts, \ vbcc_compiler_opts, \ ack_compiler_opts, \ native_compiler_opts, \ native_compiler, \ tool_compiler, \ use_tools \ = option_config.build_config.get_opts() compilation_threads = option_config.build_config.compilation_threads printc(option_config, bcolors.BOLD,"[build]\n") if not compilation_threads_string.isnumeric(): print("compilation_threads: " + str(compilation_threads_string) + " (" + compilation_threads + ")" ) else: print("compilation_threads: " + str(compilation_threads)) print("parallelize_multi_build: " + str(parallelize_multi_build)) print("z88dk_compiler: " + z88dk_compiler) print("z88dk_compiler_opts: " + z88dk_compiler_opts) print("sccz80_compiler_opts: " + sccz80_compiler_opts) print("zsdcc_compiler_opts: " + zsdcc_compiler_opts) print("cmoc_compiler_opts: " + cmoc_compiler_opts) print("cc65_compiler_opts: " + cc65_compiler_opts) print("lcc1802_compiler_opts: " + lcc1802_compiler_opts) print("gcc4ti99_compiler_opts: " + gcc4ti99_compiler_opts) print("vbcc_compiler_opts: " + vbcc_compiler_opts) print("ack_compiler_opts: " + ack_compiler_opts) print("native_compiler_opts: " + native_compiler_opts) print("native_compiler: " + native_compiler) print("use_tools: " + str(use_tools)) print("tool_compiler: " + tool_compiler) print("") printc(option_config, bcolors.BOLD,"[run]\n") print("vice_path: " + option_config.rom_config.vice_path) print("vice_rom_path: " + option_config.rom_config.vice_rom_path) print("mame_path: " + option_config.rom_config.mame_path) print("mame_rom_path: " + option_config.rom_config.mame_rom_path) print("") printc(option_config, bcolors.BOLD,"[extend]\n") print("extend_algorithm: " + option_config.extend_config.extend_algorithm) print("replace_shapes: " + str(option_config.extend_config.replace_shapes)) # --------------------------------------------- # --------------------------------------------- # System Value # --------------------------------------------- # Linux linux or linux2 (*) # Windows win32 # Windows/Cygwin cygwin # Windows/MSYS2 msys # Mac OS X darwin # OS/2 os2 # OS/2 EMX os2emx # RiscOS riscos # AtheOS atheos # FreeBSD 7 freebsd7 # FreeBSD 8 freebsd8 # FreeBSD N freebsdN # OpenBSD 6 openbsd6 # --------------------------------------------- def read_config_option(config, section, option): if config.has_option(section,option): return config.get(section,option) return "" def read_config(config_file="./config.ini"): if not os.path.exists(config_file): raise Exception try: import configparser except ImportError: # Python 2.x fallback print("Python 2.x configuration") import ConfigParser as configparser config = configparser.ConfigParser() try: config.read(config_file) verbose = read_config_option(config,"terminal","verbose") if verbose!="": verbose=int(verbose) else: verbose=0 if verbose: print("----------------------------") print("Verbose Mode ON") color_terminal = read_config_option(config,"terminal","color_terminal") if color_terminal!="": color_terminal=int(color_terminal) else: color_terminal=0 logger.info("Color terminal: %s", str(color_terminal)) fast_test = read_config_option(config,"terminal","fast_test") if fast_test!="": fast_test=int(fast_test) else: fast_test=1 interactive_test = read_config_option(config,"terminal","interactive_test") if interactive_test!="": interactive_test=int(interactive_test) else: interactive_test=0 terminal_config = TerminalConfig(verbose=verbose, color_terminal=color_terminal, test=0, native_console=0, fast_test=fast_test, interactive_test=interactive_test) if verbose: print("Config file found with: " + str(config.sections())) gnu_make = read_config_option(config,"build","gnu_make") compilation_threads_string = read_config_option(config,"build","compilation_threads") if compilation_threads_string in ("auto", "automatic"): if verbose: print("----------------------------") import multiprocessing compilation_threads = str(multiprocessing.cpu_count()) if verbose: print("Detected " + compilation_threads + " threads...") print("----------------------------") elif compilation_threads_string == "default": compilation_threads = str(DEFAULT_COMPILATION_THREADS) else: compilation_threads = compilation_threads_string logger.info("Compilation threads: %s", str(compilation_threads)) parallelize_multi_build = read_config_option(config,"build","parallelize_multi_build") if parallelize_multi_build!="": parallelize_multi_build=int(parallelize_multi_build) else: parallelize_multi_build=0 z88dk_compiler_opts = read_config_option(config,"build","z88dk_compiler_opts") z88dk_compiler = read_config_option(config,"build","z88dk_compiler") sccz80_compiler_opts = read_config_option(config,"build","sccz80_compiler_opts") zsdcc_compiler_opts = read_config_option(config,"build","zsdcc_compiler_opts") cmoc_compiler_opts = read_config_option(config,"build","cmoc_compiler_opts") cc65_compiler_opts = read_config_option(config,"build","cc65_compiler_opts") lcc1802_compiler_opts = read_config_option(config,"build","lcc1802_compiler_opts") gcc4ti99_compiler_opts = read_config_option(config,"build","gcc4ti99_compiler_opts") vbcc_compiler_opts = read_config_option(config,"build","vbcc_compiler_opts") ack_compiler_opts = read_config_option(config,"build","ack_compiler_opts") native_compiler_opts = read_config_option(config,"build","native_compiler_opts") native_compiler = read_config_option(config,"build", "native_compiler") tool_compiler = read_config_option(config,"build", "tool_compiler") vice_path = read_config_option(config,"run", "vice_path") vice_rom_path = read_config_option(config,"run", "vice_rom_path") mame_path = read_config_option(config,"run", "mame_path") mame_rom_path = read_config_option(config,"run", "mame_rom_path") rom_config = RomConfig(vice_path=vice_path, vice_rom_path=vice_rom_path, mame_path=mame_path, mame_rom_path=mame_rom_path) extend_algorithm = read_config_option(config,"extend", "extend_algorithm") replace_shapes = read_config_option(config,"extend", "replace_shapes") use_tools = read_config_option(config,"build", "use_tools") if replace_shapes!="": replace_shapes = int(replace_shapes) extend_config = ExtendConfig(extend_algorithm=extend_algorithm, replace_shapes=replace_shapes) if use_tools!="": use_tools = int(use_tools) build_config = BuildConfig( \ gnu_make, compilation_threads, compilation_threads_string, parallelize_multi_build, z88dk_compiler, z88dk_compiler_opts, sccz80_compiler_opts, zsdcc_compiler_opts, cmoc_compiler_opts, cc65_compiler_opts, lcc1802_compiler_opts, gcc4ti99_compiler_opts, vbcc_compiler_opts, ack_compiler_opts, native_compiler_opts, native_compiler, tool_compiler, use_tools ) option_config = OptionConfig(terminal_config, build_config, rom_config, extend_config) if verbose: if color_terminal: print("Color terminal ON\n") # printc(option_config, bcolors.OKCYAN, "Color terminal ON\n") else: print("Color terminal OFF") return option_config except Exception as e: print("An exception occurred while reading the configuration: " + str(e)) logger.debug("Error while reading configuration file") exc_type, exc_obj, exc_tb = sys.exc_info() fname = os.path.split(exc_tb.tb_frame.f_code.co_filename)[1] print("exc_type: %s, fname: %s, exc_tb.tb_lineno: %s", exc_type, fname, exc_tb.tb_lineno) raise e def default_config(): try: terminal_config = TerminalConfig( \ verbose=0, color_terminal=0, test=0, native_console=0, fast_test=1, interactive_test=0 ) rom_config = RomConfig( \ vice_path="", vice_rom_path="../roms/vice/", mame_path="", mame_rom_path="../roms/mame/" ) extend_config = ExtendConfig( \ extend_algorithm="duplicate", replace_shapes=1 ) build_config = BuildConfig( \ gnu_make = "make", compilation_threads = str(DEFAULT_COMPILATION_THREADS), compilation_threads_string = "default", parallelize_multi_build = "0", z88dk_compiler = "sccz80", z88dk_compiler_opts = "", sccz80_compiler_opts = "", zsdcc_compiler_opts = "", cmoc_compiler_opts = "", cc65_compiler_opts = "-Or -Cl", lcc1802_compiler_opts = '"-Wf-volatile" -O "-Wp-D nofloats" "-Wa-D LCCNOLONG" "-Wf-mulcall"', gcc4ti99_compiler_opts = "-O2 -fno-peephole2 -fno-function-cse", vbcc_compiler_opts = "", ack_compilers_opts = "", native_compiler_opts = "", native_compiler = "gcc", tool_compiler = "gcc", use_tools = "0" ) option_config = OptionConfig(terminal_config, build_config, rom_config, extend_config) except: logger.warning("Error in default config") print("Error in default config") sys.exit(-1) return option_config def get_config(): if python_version<2 or (python_version<=2 and python_subversion<7): print("Python version not supported") logger.error("Python version not supported") sys.exit(-1) try: option_config = read_config() logger.info("(read_config) Configuration file read") except: if option_config.terminal_config.verbose: print("Failed to read config.ini") logger.warning("Reverting to default configuration") option_config = default_config() print("WARNING: Using default config") return option_config def handle_make(option_config, make_test): if option_config.build_config.gnu_make == "auto": if option_config.terminal_config.verbose: print("automatic detection of GNU make") if make_test['gmake']: option_config.build_config.gnu_make = "gmake" else: option_config.build_config.gnu_make = "make" return option_config.build_config.gnu_make ================================================ FILE: src/modules/params.py ================================================ from init import * from collections import OrderedDict from import_from_source import printc, bcolors from commands import * from target_defs import * from LoggerSingleton import LoggerSingleton from file_functions import list_of_projects from input_functions import generic_input logger = LoggerSingleton.initLogger('xl', '../logs') DEFAULT_PROJECT = "hello" def full_params(params): full_command = SHORT_COMMANDS_LIST.get(params[1]) if full_command is not None: return ["", full_command] + params[2:] return params def handle_two_letter_params(params): command = params[1] if (len(command)==2) and command not in COMMANDS_LIST and command not in SHORT_COMMANDS_LIST: first_short_command = params[1][0] second_short_command = params[1][1] first_command = SHORT_COMMANDS_LIST[first_short_command] second_command = SHORT_COMMANDS_LIST[second_short_command] new_params = ['', first_command, second_command] if len(params)>2: new_params.extend(params[2:]) # print("Interpreting two-letter command as: " + str(new_params)) return new_params return params def get_size_params(params): if len(params)<5: xsize = params[2] ysize = params[3] target = NATIVE_TARGET else: xsize = params[3] ysize = params[4] target = params[2] if target == 'terminal': target = 'terminal8x8' if target in [NATIVE_TARGET,'stdio'] or target.startswith('terminal'): target = target + '_sized' return target, xsize, ysize def get_params_from_keyboard_input(option_config): logger.info("Interactive mode ON") print("For more commands, use the non-interactive mode.") printc(option_config, bcolors.BOLD, "xl help") print(" for instructions.") print("") print("--------------------------------------------------") printc(option_config, bcolors.OKCYAN, "Interactive mode\n") print("--------------------------------------------------") print("") project_name = generic_input("Insert project to build\n") if project_name in ("", "\n"): project_name=DEFAULT_PROJECT printc(option_config, bcolors.WARNING,"Defaulting to helloworld\n") print("") target_name = generic_input("Insert target name\n") if target_name in ("", "\n"): target_name="ncurses" printc(option_config, bcolors.WARNING, "Defaulting to ncurses\n") print("") return ["", "rebuild", project_name, target_name] def get_params_from_command_line(): logger.info("Interactive mode OFF") params = sys.argv params = handle_two_letter_params(params) if params[1] in list_of_projects("all") + ["examples"] + ["games"] + ["projects"] + ["all"]: params = ["","build"]+params[1:] return full_params(params) def get_params(option_config): return get_params_from_keyboard_input(option_config) if (len(sys.argv)<2) else get_params_from_command_line() ================================================ FILE: src/modules/print_functions.py ================================================ from __future__ import print_function class bcolors: HEADER = '\033[95m' OKBLUE = '\033[94m' OKCYAN = '\033[96m' OKGREEN = '\033[92m' WARNING = '\033[93m' FAIL = '\033[91m' ENDC = '\033[0m' BOLD = '\033[1m' UNDERLINE = '\033[4m' def printc(option_config, print_color,text): if(option_config.terminal_config.color_terminal): print(print_color + text + bcolors.ENDC, end="") else: print(text, end="") def print_shape(option_config, items): if not option_config.terminal_config.test: for i in range(len(items)): printc(option_config, bcolors.BOLD,items[i]+"\n") # + " ") # + "{:3d}".format(values[i])) print("") print("") # It displays a shape from a list of strings (rows) def display_shape(option_config, tile_vect): for row in tile_vect: printc(option_config, bcolors.BOLD, row) print("") def display_simple_shape(tile_vect): for row in tile_vect: print(row) ================================================ FILE: src/modules/project_functions.py ================================================ import os import shutil from file_functions import convert_makefile from init import game_projects, example_projects from strings import only_upper_digits_and_space, no_space from commands import COMMANDS_LIST from input_functions import are_you_sure # It computes the type of project def project_category(game_dir): if(game_dir in example_projects): return "example" elif game_dir in game_projects: return "game" else: return "project" # Rename a project def rename(option_config, params): if len(params)<2: source_game_dir = "helloworld" else: source_game_dir = params[1] if len(params)<3: print("ERROR: You need to provide more paramaters") return target_game_dir = params[2] source_project_type = project_category(source_game_dir) if source_project_type != "project": print("This is a built-in project.") return target_project_type = "project" target_parent_dir = target_project_type + "s" target_parent_dir_and_game_dir = target_parent_dir + "/" + target_game_dir if option_config.terminal_config.verbose: print("source_project_type: " + source_project_type) convert_makefile(option_config, source_game_dir, source_project_type, source_game_dir, target_game_dir) os.rename(target_parent_dir + "/" +source_game_dir, target_parent_dir_and_game_dir) # Clone a project to create a new one def clone(option_config, params): verbose = option_config.terminal_config.verbose if len(params)<2: source_game_dir = "helloworld" else: source_game_dir = params[1] if len(params)<3: return target_game_dir = params[2] source_project_type = project_category(source_game_dir) if verbose: print("source project category: " + source_project_type) source_parent_dir = source_project_type + "s" source_parent_and_game_dir = source_parent_dir + "/" + source_game_dir target_project_type = "project" target_parent_dir = target_project_type + "s" target_parent_dir_and_game_dir = target_parent_dir + "/" + target_game_dir if verbose: print("Source project name : " + source_game_dir) print("Source Project type : " + source_project_type) print("Path to source project : " + source_parent_and_game_dir) print("") print("Target project name : " + target_game_dir) print("target Project type : " + target_project_type) print("Path to target project : " + target_parent_dir_and_game_dir) source_path = source_parent_and_game_dir if verbose: print("source_path: " + source_path) dest_path = target_parent_dir_and_game_dir if verbose: print("dest_path: " + dest_path) if not os.path.exists(dest_path+"/tiles"): if verbose: print("Copying tiles...") shutil.copytree(source_path, dest_path) if not os.path.exists(dest_path+"/generated_assets"): if verbose: print("Create empty generated_assets directory...") os.makedirs(dest_path+"/generated_assets") convert_makefile(option_config, target_game_dir, source_project_type, source_game_dir, target_game_dir) # Create a new project def create(option_config, params): verbose = option_config.terminal_config.verbose if len(params)<2: game_dir = "helloworld" else: game_dir = params[1] game_dir_capital = game_dir.upper() game_dir_capital_without_special_chars = \ only_upper_digits_and_space(game_dir.upper().replace("-"," ").replace("_"," ")) game_dir = no_space(game_dir) if game_dir in example_projects or game_dir in game_projects or game_dir in COMMANDS_LIST: print("invalid name!") return if len(params)<3: project_type = "helloworld" else: if params[2]=="game" or params[2]=="arcade": project_type = "arcade_game" elif params[2]=="text": project_type = "text_game" elif params[2]=="test": project_type = "test" else: if params[2] in ["apis","show_apis","example","show","demo"]: project_type = "demo" else: project_type = "helloworld" parent_dir = "projects" if verbose: print("New project name: " + game_dir) print("Project type: " + project_type) parent_and_game_dir = parent_dir + "/" + game_dir if not os.path.exists(parent_and_game_dir): if verbose: print("Creating project dir...") os.makedirs(parent_and_game_dir) source_path = "./template_projects/"+project_type+"_code.template" if verbose: print("source_path: " + source_path) dest_path = parent_and_game_dir if verbose: print("dest_path: " + dest_path) if not os.path.exists(dest_path+"/tiles"): if verbose: print("Copying tiles...") shutil.copytree(source_path+"/tiles", dest_path+"/tiles") if not os.path.exists(dest_path+"/shapes"): if verbose: print("Copying shapes...") if not os.path.exists(source_path+"/shapes"): os.makedirs(dest_path+"/shapes") else: shutil.copytree(source_path+"/shapes", dest_path+"/shapes") if not os.path.exists(dest_path+"/generated_assets"): if verbose: print("Create empty generated_assets directory...") os.makedirs(dest_path+"/generated_assets") if not os.path.exists(dest_path+"/config"): if verbose: print("Create empty config directory...") os.makedirs(dest_path+"/config") file_names = ["main.c"] for file_name in file_names: if verbose: print("Copying file_name: " + file_name) shutil.copy(source_path+"/"+file_name, dest_path) # Replace _GAME_NAME_CAPITAL with the capitalized game name without special characters fin = open("./"+dest_path+"/main.c", "rt") data = fin.read() data = data.replace('_GAME_NAME_CAPITAL',game_dir_capital_without_special_chars) fin.close() fin = open("./"+dest_path+"/main.c", "wt") #overrite the input file with the resulting data fin.write(data) templated_makefile_path = "./template_projects" shutil.copy(templated_makefile_path+"/"+"Makefile_game.template", \ "./"+dest_path+"/Makefile."+game_dir) shutil.copy(templated_makefile_path+"/"+"/config/project_config.mk.template", \ "./"+dest_path+"/config/project_config.mk") shutil.copy(templated_makefile_path+"/"+"/config/game_config.mk.template", \ "./"+dest_path+"/config/game_config.mk") #read input file fin = open("./"+dest_path+"/Makefile."+game_dir, "rt") #read file contents to string data = fin.read() #replace all occurrences of the required string data = data.replace('_GAME_NAME_CAPITAL',game_dir_capital) data = data.replace('_GAME_NAME_', game_dir) data = data.replace('_PARENT_DIR_', parent_dir) #close the input file fin.close() #open the file in write mode fin = open("./"+dest_path+"/Makefile."+game_dir, "wt") #overrite the input file with the resulting data fin.write(data) #close the file fin.close() # Delete project def delete(option_config, params): if(len(params)>=2) and params[1]=="tools": make_command = GNU_MAKE + " clean_tools" run_command(option_config, make_command) return if len(params)<2: game_dir="helloworld" else: candidate_name = params[1] if candidate_name in example_projects or candidate_name in game_projects or \ candidate_name in COMMANDS_LIST: print("invalid name!") return game_dir = candidate_name if (len(params)>2) and (params[2]=="-y"): interactive = False else: interactive = True parent_dir = "projects" verbose = option_config.terminal_config.verbose if verbose: print("Project name: " + game_dir) parent_and_game_dir = parent_dir + "/" + game_dir if verbose: print("Remove the project '"+game_dir+ \ "' with all its files (source, graphics assets, makefile)") if (not interactive) or (are_you_sure()=="y"): if os.path.exists(parent_and_game_dir): if verbose: print("Deleting directory " + parent_and_game_dir) shutil.rmtree(parent_and_game_dir) makefile_name = "Makefile."+game_dir if os.path.exists(makefile_name): if verbose: print("Deleting..." + makefile_name) os.remove(makefile_name) if verbose: print("'" + game_dir + "' deleted") else: return ================================================ FILE: src/modules/run.py ================================================ import os from import_from_source import printc, bcolors from LoggerSingleton import LoggerSingleton from default_values import insert_default_sizes from target_defs import * from init import NATIVE_EXTENSION C64_EMULATOR = "x64" VIC20_EMULATOR = "xvic" PLUS4_EMULATOR = "xplus4" PET_EMULATOR = "xpet" MAME_EMULATOR = "mame" logger = LoggerSingleton.initLogger('xl', '../logs') def run_command(option_config, command_string): logger.info("Running command: %s", command_string) test = option_config.terminal_config.test # run instde test_self makes test = False verbose = option_config.terminal_config.verbose native_console = option_config.terminal_config.native_console # run inside test_self makes native_console = False if verbose: printc(option_config, bcolors.BOLD, command_string+"\n") if not native_console and (test or not verbose): command_string+= " > /dev/null 2>&1" res = os.system(command_string) if not native_console and res: printc(option_config, bcolors.FAIL, "return code: " + str(res)+"\n") def run_native(option_config, params, target): command_prefix = "../build/X" + params[1] + "_" + target if len(params)>=4: xsize = params[2] ysize = params[3] command_string = command_prefix + "_" + xsize + "X" + ysize + "." + NATIVE_EXTENSION else: command_string = command_prefix + "." + NATIVE_EXTENSION option_config.terminal_config.native_console = 1 run_command(option_config, command_string) option_config.terminal_config.native_console = 0 def run_stdio(option_config, params): run_native(option_config, params, "stdio") # Run a project by using an emulator if necessary. Only few emulators are supported. def run(option_config, params): if len(params)==2: run_native(option_config, params, "ncurses") if len(params)>=3: params = insert_default_sizes(option_config, params) target = params[2] if target in DEFAULT_TARGET_MAP: target = DEFAULT_TARGET_MAP[target] if option_config.terminal_config.verbose: print("defaulting to target: " + target) if target=="stdio": run_stdio(option_config, params) elif target=="ncurses": run_native(option_config, params[0:2]+params[3:], "ncurses") elif target=="terminal": run_native(option_config, params[0:2]+params[3:], "terminal8x8") elif target.startswith("terminal"): run_native(option_config, params[0:2]+params[3:], target) # e.g. xl run bomber 20 30 elif(len(params)>=3 and params[2].isnumeric() and params[3].isnumeric()): run_native(option_config, params, "ncurses") # TODO: replace this with a check on prefixes elif target in VICE_TARGETS: extension = "prg" rom_directory = option_config.rom_config.vice_rom_path if target=="c64": rom_directory += "c64" emulator = C64_EMULATOR elif target.startswith("vic20"): rom_directory += "vic20" if target=="vic20_exp_3k": emulator = VIC20_EMULATOR + " -memory 3k" elif target=="vic20_unexpanded": emulator = VIC20_EMULATOR + " -memory none" else: emulator = VIC20_EMULATOR + " -memory 24k" elif target.startswith("c16") or target=="plus4": rom_directory += "plus4" emulator = PLUS4_EMULATOR elif target.startswith("pet"): rom_directory += "pet" emulator = PET_EMULATOR else: print("'xl run' does not support this target") return command_string = option_config.rom_config.vice_path + emulator + " -directory " + \ rom_directory + " -autostartprgmode 1 ../build/X" + \ params[1] + "_" + target + "." + extension run_command(option_config, command_string) elif target in MAME_TARGETS: emulator = MAME_EMULATOR if target.startswith("msx"): extension = "rom" mame_sub_target = "canonv20" command_string = option_config.rom_config.mame_path + emulator + " " + mame_sub_target + \ " -rompath " + option_config.rom_config.mame_rom_path + \ " -window -uimodekey DEL -skip_gameinfo -cart1 ../build/X" + \ params[1] + "_" + target + "." + extension run_command(option_config, command_string) else: print("'xl run' does not support this target") return ================================================ FILE: src/modules/shape_functions.py ================================================ import os import sys from project_functions import project_category from file_functions import files_in_path from print_functions import display_shape, print_shape from init import NUMBER_OF_TILES # from import_from_source import import_split_tiles # General strategies: # xsize or ysize < 8 -> cut left/right or top/bottom columns/rows # ysize > 8 -> repeat top/bottom rows def resize_shape(tile_vect,xsize,ysize, extend_algorithm): if xsize==7: tile_vect = [vect[:-1] for vect in tile_vect] if xsize==6: tile_vect = [(vect[:-1])[1:] for vect in tile_vect] if(ysize==6): tile_vect = (tile_vect[:-1])[1:] # TODO: Implement zero if extend_algorithm=="duplicate": if(ysize==9): tile_vect = tile_vect + [ tile_vect[-1]] if(ysize==10): tile_vect = tile_vect[0:1] + tile_vect + [ tile_vect[-1]] elif extend_algorithm=="zero": zero_row = [ "." * xsize ] if(ysize==9): tile_vect = tile_vect + zero_row if(ysize==10): tile_vect = zero_row + tile_vect + zero_row return tile_vect def trim_newline_from_shape(lines): tile = "" filtered_lines = [] for line in lines: if not(line=="\n" or line=="\r" or line== "\r\n"): filtered_lines.append(line.replace('\n','').replace('\r','')) xsize = 8 for line in filtered_lines: xsize = min(xsize,len(line)) trimmed_lines = [] for line in filtered_lines: trimmed_lines.append(line[:xsize]) return trimmed_lines,xsize,len(trimmed_lines) def read_shape(file_name): fin = open(file_name, "rt") lines = fin.readlines() # print(lines) trimmed_lines = trim_newline_from_shape(lines) fin.close() return trimmed_lines # It returns the path to the shape directory for a given project and dimension def path_to_shapes(project, xsize, ysize): project_cat = project_category(project) # print(project_cat) return project_cat + "s/" + project + "/shapes/" + str(xsize) + "x" + str(ysize) + "/" # replace_shapes: # 0 -> write in _shapes directory, # 1 -> write in shapes directory but avoid overwriting existing shapes or tiles def write_shapes(option_config, project, shapes, xsize,ysize): verbose = option_config.terminal_config.verbose replace_shapes = option_config.extend_config.replace_shapes path = path_to_shapes(project,xsize,ysize) if not replace_shapes: path = path.replace("shapes","_shapes") if verbose: print("Writing shapes in: " + path) if os.path.exists(path): if verbose: print("Directory exists") else: if verbose: print("Directory does not exist") os.makedirs(path) for tile_number, shape in shapes.items(): #print(tile_number,shape) path_to_shape = path+"shape"+tile_number+".txt" if verbose: print("Path to shape file: " + path_to_shape) path_to_tile = path.replace("shapes","tiles")+"tile"+tile_number+".txt" if verbose: print("Path to tile file: " + path_to_tile) if replace_shapes and (os.path.exists(path_to_shape) or \ os.path.exists(path_to_tile)): if os.path.exists(path_to_shape): if verbose: print("shape "+ tile_number +" already exists") elif os.path.exists(path_to_tile): if verbose: print("tile "+ tile_number +" already exists") else: with open(path_to_shape,"w") as file: for row in shape: if verbose: print(row) file.write(row+"\n") if verbose: print("") # Extand 8x8 shapes by reshaping them into shapes with other dimensions def extend(option_config, params): verbose = option_config.terminal_config.verbose extend_algorithm = option_config.extend_config.extend_algorithm project = params[1] path_to_8x8_files = path_to_shapes(project,8,8) if verbose: print("Path to shape files: " + path_to_8x8_files) print("") shape_files = files_in_path(path_to_8x8_files) dict7x8 = {} dict6x8 = {} dict8x6 = {} dict6x9 = {} for shape_file in shape_files: path_to_shape_file = path_to_8x8_files + "/" + shape_file if verbose: print("shape file: " + shape_file) tile_number_str = shape_file[5:].replace(".txt","") if verbose: print("---tile number: " + tile_number_str) print("") tile,xsize,ysize = read_shape(path_to_shape_file) if xsize!=8 or ysize!=8: print("Shape in file " + path_to_shape_file + " has wrong dimensions!") print(tile) return if verbose: print(tile) if verbose: print("") print("7x8") shape7x8 = resize_shape(tile,7,8,extend_algorithm) if verbose: display_shape(option_config, shape7x8) dict7x8[tile_number_str]=shape7x8 if verbose: print("") print("6x8") shape6x8 = resize_shape(tile,6,8,extend_algorithm) if verbose: display_shape(option_config, shape6x8) dict6x8[tile_number_str]=shape6x8 if verbose: print("") print("8x6") shape8x6 = resize_shape(tile,8,6,extend_algorithm) if verbose: display_shape(option_config, shape8x6) dict8x6[tile_number_str]=shape8x6 if verbose: print("") print("6x9") shape6x9 = resize_shape(tile,6,9,extend_algorithm) if verbose: display_shape(option_config, shape6x9) dict6x9[tile_number_str]=shape6x9 if verbose: print("") # print(str(dict7x8)) write_shapes(option_config, project,dict7x8,7,8) write_shapes(option_config, project,dict6x8,6,8) write_shapes(option_config, project,dict8x6,8,6) write_shapes(option_config, project,dict6x9,6,9) return # Show tile shapes of a given project def show(option_config, params): parent_dir = project_category(params[1])+"s" if len(params)<3: xsize = "8" ysize = "8" index = "" elif len(params)<4: index = params[2] xsize = "8" ysize = "8" elif len(params)==4: xsize = params[2] ysize = params[3] index = "" else: xsize = params[3] ysize = params[4] if len(params)>=5: index = params[2] else: index = "" if index!="": print_shape_from_file(option_config, parent_dir, params[1], xsize, ysize, index) else: for i in range(NUMBER_OF_TILES): if not option_config.terminal_config.test: print(i) print_shape_from_file(option_config, parent_dir, params[1], xsize, ysize, i) # It computes the shape from the tile file (not directly from the shapes if available) def print_shape_from_file(option_config, parent_dir, project_name, xsize, ysize, index): dir = xsize+"x"+ysize dest = "./" + parent_dir + "/" + project_name + "/tiles/" + dir + "/tile" + str(index) + ".txt" if option_config.terminal_config.verbose: print("Decoding file tile: " + dest) print("") try: if os.path.exists(dest): fin = open(dest, "rt") tile_data = fin.read() # computed_shape = compute_shape(tile_data,xsize) # print("computed shape: " + str(computed_shape)) print_shape(option_config, compute_shape(tile_data,xsize)) else: print("NOT FOUND") except Exception as error: print("File skipped") print("An exception occurred:", type(error).__name__, error) exc_type, exc_obj, exc_tb = sys.exc_info() fname = os.path.split(exc_tb.tb_frame.f_code.co_filename)[1] print(exc_type, fname, exc_tb.tb_lineno) # It outputs a list of strings def compute_shape(string, xsize): string_items = string.split(",") items = [] values = [] for string_item in string_items: string_item = string_item.replace("$","0x").replace(" ","") if string_item.startswith("0x"): base = 16 elif string_item.startswith("@"): string_item = string_item[1:] base = 2 else: base = 10 value = int(string_item,base) values.append(value) bin_string=bin(value)[2:] missing_zeros = int(xsize) - len(bin_string) padded_bin_string = "" for i in range(missing_zeros): padded_bin_string += "0" padded_bin_string+=bin_string padded_bin_string = padded_bin_string.replace("0",".").replace("1","#") items.append(padded_bin_string) # print("items :" + str(items)) return(items) # It takes the output of print_shape def compute_rotated_shape(items): # print(str(items)) # return(items) xsize = len(items[0]) ysize = len(items) val = [0]*xsize for j in range(xsize): tmp = 0 for i in range(ysize): if(items[i][j]=='#'): tmp+=2**i val[j] = tmp str_res = [] for i in range(xsize): str_res.append(val[i]) return(str_res) ================================================ FILE: src/modules/split_projects.py ================================================ import os from project_functions import project_category from run import run_command DELETE_MERGED_MAIN = True def create_main(game_dir, project_type): parent_dir_path = "./" + project_type + "s/" project_dir_path = parent_dir_path + game_dir + "/" split_dir_path = project_dir_path + "split_files/" os.system("cat " + split_dir_path + "*.c > " + project_dir_path + "main.c") # TODO: Implement flag to keep main.c def delete_main(option_config, game_dir, project_type): if DELETE_MERGED_MAIN: parent_dir_path = "./" + project_type + "s/" project_dir_path = parent_dir_path + game_dir + "/" run_command(option_config, "rm -rf " + project_dir_path + "main.c") else: print("Keeping merged main.c") def is_project_split(game_dir): project_type = project_category(game_dir) parent_dir_path = "./" + project_type + "s/" project_dir_path = parent_dir_path + game_dir + "/" return os.path.isdir(project_dir_path+"split_files") ================================================ FILE: src/modules/strings.py ================================================ import re # def only_upper_and_digits(s): # return "".join(c for c in s if c.isupper() or c in ["0","1","2","3","4","5","6","7","8","9"]) def only_upper_digits_and_space(s): return "".join(c for c in s if c.isupper() or c in [" ", "0","1","2","3","4","5","6","7","8","9"]) def no_space(s): return "".join(c for c in s if c!=" ") # Convert a string into a sequence of macros that can be used in the code (only necessary for small letters) def compute_string(string): # string = params[1] m = re.search('[a-zA-Z0-9 ]*',string) string = m.group(0) string = string.replace(" ", "@") converted_string = "" for ch in string: converted_string+= "_XL_"+ch+" " converted_string = converted_string.replace("_XL_@", "_XL_SPACE") for i in range(9): converted_string = converted_string.replace("_XL_"+str(i),'"'+str(i)+'"') converted_string = converted_string[:-1] return converted_string def string(option_config, params): if not option_config.terminal_config.test: print(compute_string(params[1])) ================================================ FILE: src/modules/target_defs.py ================================================ from __future__ import print_function import os import sys from default_values import default_tile_size, default_screen_size, default_terminal_size_string, get_terminal_target from file_functions import list_of_projects from project_functions import project_category from print_functions import bcolors, printc DEBUG_TARGET = "ncurses_debug" NATIVE_TARGET = "ncurses" def binary_factor(target): platform = sys.platform if platform in ["cygwin", "msys"]: TARGETS_WITH_2_BINARIES = ['atari', 'aquarius', 'cpc', 'coco3', 'mo5', 'ace', 'mtx500', \ 'mtx512', 'laser500'] TARGETS_WITH_3_BINARIES = ['bbc', 'bbcmaster', 'coco'] else: TARGETS_WITH_2_BINARIES = ['atari', 'aquarius', 'cpc', 'coco3', 'mo5', 'ace', 'mtx500', \ 'mtx512', 'laser500', 'coco'] TARGETS_WITH_3_BINARIES = ['bbc', 'bbcmaster'] if target in TARGETS_WITH_2_BINARIES: return 2 elif target in TARGETS_WITH_3_BINARIES: return 3 else: return 1 def retrieve_targets(): with open("../docs/STATUS.md", "r") as f: raw_lines = [line for line in f if line.lstrip().startswith("*")] lines = [] for raw_line in raw_lines: line = raw_line.replace('\n','').split('|') lines.append(line) return lines def filter_targets(lines, compiler="", cpu="", working=""): if compiler!='': lines = [line for line in lines if line[4].lower().strip()==compiler] if cpu!='': lines = [line for line in lines if cpu.lower() in line[3].lower().strip()] if working!='': lines = [line for line in lines if working.lower() in line[2].lower().strip()] return lines def display_targets(lines): print("target name | long target name | working | CPU family | dev-kit | real-time input | graphics | sound | notes ") for line in lines: print(line[0], line[1], line[2], line[3], line[4], line[5], line[6], line[7], line[8]) print("Targets found: " + str(len(lines))) def display_filtered_targets(lines, compiler="", cpu="", working=""): lines = filter_targets(lines, compiler, cpu, working) display_targets(lines) def get_targets(compiler="", cpu="", working=""): lines = retrieve_targets() filtered_lines=filter_targets(lines,compiler, cpu, working) target_map = get_target_map(filtered_lines) return target_map.keys() def get_target_map(lines): target_map = {} for line in lines: target_map[line[0].replace('*','').strip()]=[line[1].strip(), line[2].strip(), line[3].strip(), line[4].strip(), line[5].strip(), line[6].strip(), line[7].strip(), line[8].strip()] return target_map def info(option_config, params): lines = retrieve_targets() target_map = get_target_map(lines) # target= params[1].lstrip() # print(target_map[target][0].lstrip()) # print(str(target_map)) if len(params)==1 or params[1]=="targets": display_filtered_targets(lines) return if params[1] in ("cc65", "z88dk", "cmoc", "lcc1802", "cc6303", "ack", "tms9900-gcc", "vbcc", "xtc68"): display_filtered_targets(lines, params[1]) return if params[1] in ("6502", "z80", "6809", "1802", "6803", "8080", "8085", "8086", "8088", "386", "tms9900", "68000", "68020", "gbz80"): to_check = params[1].replace("z80", "Zilog 80").replace("8088","8086").replace("tms9900", "TMS 9900").replace("6502","MOS 6502") display_filtered_targets(lines, "", cpu=to_check) return if params[1] in("yes","ok","no","ko","?"): to_check = params[1].replace("ok", "yes").replace("ko","no") display_filtered_targets(lines, "", cpu="", working=to_check) return if params[1] in list_of_projects("all"): project = params[1] category = project_category(project) project_dir = category+"s/"+project split = os.path.exists(project_dir+"/split_files") shapes = os.path.exists(project_dir+"/shapes") if shapes: shape_dirs = str(os.listdir(project_dir+"/shapes"))[:-1][1:] else: shape_dirs = None game_config = os.path.exists(project_dir+"/config/game_config.mk") tiles = os.listdir(project_dir+"/tiles/8x8") override = os.path.exists(project_dir+"/makefiles") and os.path.exists(project_dir+"/makefiles/Makefile.override") memory = os.path.exists(project_dir+"/memory") print("project : ", end=""); printc(option_config, bcolors.BOLD, project); print("") print("") print("category : ", end=""); printc(option_config, bcolors.OKBLUE, category); print("") print("") print("split project : " + str(split)) print("") print("no. of tiles : " + str(len(tiles))) print("shapes : " + str(shape_dirs)) print("") print("code configuration : " + str(game_config)) print("override : " + str(override)) print("memory optimizer : " + str(memory)) elif params[1] in target_map.keys(): target = params[1] xsize, ysize = default_screen_size(target) xtile, ytile = default_tile_size(target) if xsize==None: xsize = "not available" ysize = "not available" else: xsize = str(xsize) ysize = str(ysize) xtile = str(xtile) ytile = str(ytile) if target in PARALLEL_TARGETS: parallel = "supported" else: parallel = "not supported" print("target : ", end=""); printc(option_config, bcolors.BOLD,target); print("") print("name : " + target_map[target][0]) print("working : " + target_map[target][1]) print("cpu : " + target_map[target][2]) print("compiler : " + target_map[target][3]) print("real-time : " + target_map[target][4]) print("graphics : " + target_map[target][5]) print("sound : " + target_map[target][6]) print("") print("x size : " + xsize) print("y size : " + ysize) print("") print("x tile : " + xtile) print("y tile : " + ytile) print("") print("parallelism : " + parallel) print("") print("no. of binaries : " + str(binary_factor(target))) else: print("No information found") #TODO: cc65 targets #TODO: cmoc targets #TODO: lcc1802 targets #TODO: mc10 (6303) #TODO: c128 (complicated because of c1541) #TODO: cpc (complicated because of nocart) PARALLEL_TARGETS = \ [ 'stdio', 'atari', 'atari_lynx', 'atari5200', 'atari7800', 'atmos', 'c16', 'c64', 'c65', 'cbm610', 'cbm510', 'creativision', 'cx16', 'gamate', 'oric', 'oric1', 'mega65', 'nes', 'pet', 'pce', 'supervision', 'vic20', 'ncurses', 'terminal', 'terminal8x8', 'terminal8x6', 'terminal7x8', 'terminal6x9', 'terminal6x8', 'ace', 'agon', 'aquarius', 'aussie', 'bit90', 'camputers_lynx', 'cpm', 'coleco', 'eg2k', 'einstein', 'fp1100', 'g850', 'g815', 'g800', 'e200', 'g815', 'gb', 'gal', 'gl6000sl', 'gamegear', 'hector', 'hector1', 'hectorhr', 'interact', 'kaypro', 'kaypro83', 'kc', 'kc85', 'lambda', 'laser500', 'm5', 'm5_rom', 'm5_keyboard', 'm5_keyboard_rom', 'm100', 'map1010', 'map1010_mono', 'map1010_no_gfx', 'mc1000', 'mc1000_mono', 'microbee', 'msx', 'mtx500', 'mtx512', 'mz', 'mz2500', 'newbrain', 'nc100', 'nc200', 'pc8201', 'pc88', 'phc25', 'phc25_mono', 'phc25_no_gfx', 'pv1000', 'pv1000_no_gfx', 'px4', 'px8', 'samcoupe', 'sc3000', 'sc3000_rom', 'sg1000', 'smc777', 'sms', 'spectrum', 'svi', 't200', 'trs80', 'vg5k', 'vz', 'vz200', 'x1', 'zx81', 'zx81_wrx', 'zx81_8x6', 'zx81_wrx64', 'zx81_8x6_wrx64', 'zx81_wrx128', 'zx81_8x6_wrx128', 'z9001', 'x07', 'z1013', 'zx80', 'zxn' ] DEFAULT_TARGET_MAP = {\ "vic20":"vic20_exp_16k", \ "c16":"c16_16k", \ "plus4":"c16_32k", \ "pet":"pet_16k", \ "msx": "msx_16k" \ } VICE_TARGETS = ["c64", "vic20", "vic20_unexpanded", "vic20_exp_3k", "vic20_exp_8k", "vic20_exp_16k", "c16", "plus4", "c16_16k", "c16_32k", "pet", "pet_8k", "pet_16k" ] MAME_TARGETS = ["msx", "msx_16k"] ================================================ FILE: src/modules/test_self_defs.py ================================================ DEFAULT_CLEANUP_COMMANDS = \ [ \ "xl clean tools", \ "xl clean", \ ] NO_CLEANUP = [] # --------------------------------------------------------- CLEAN_TEST = \ [ \ "xl delete _cloned_test_project -y", \ "xl delete _foo_test -y", \ "xl clean", \ ] # --------------------------------------------------------- TOOLS_TEST = \ [ \ "xl clean tools", \ "xl build easy_tools", \ ] CLEANUP_TOOLS_TEST = \ [ \ "xl clean tools", ] # --------------------------------------------------------- CREATE_TEST = \ [ \ "xl create _test_project1 game", \ "xl create _test_project2 demo", \ "xl create _test_project3 text", \ "xl create _test_project4 helloworld", \ "xl build _test_project1 __target__ ", \ "xl build _test_project2 __target__ ", \ "xl build _test_project3 __target__ ", \ "xl build _test_project4 __target__ ", \ ] CLEANUP_CREATE_TEST = \ [ \ "xl delete _test_project1 -y", \ "xl delete _test_project2 -y", \ "xl delete _test_project3 -y", \ "xl delete _test_project4 -y", \ ] # --------------------------------------------------------- COMPLEX_TEST = \ [ \ "xl delete _foo_test -y", \ "xl clean tools", \ "xl delete _test_project -y", \ "xl clean", \ "xl create _foo_test", \ "xl slow _foo_test __target__ 42", \ "xl clean" , \ "xl tiles _foo_test", \ "xl size _foo_test stdio_sized 12 12", \ "xl reset", \ "xl size _foo_test stdio_sized 32 24", \ "xl reset", \ "xl tiles _foo_test 8 8", \ "xl tiles _foo_test 6 8", \ "xl tiles _foo_test 6 9", \ "xl tiles _foo_test 7 8", \ "xl tiles _foo_test 8 8", \ ] CLEANUP_COMPLEX_TEST = \ [ \ "xl delete _foo_test -y" ] # --------------------------------------------------------- RENAME_TEST = \ [ \ "xl delete _test_project -y", \ "xl delete _foo_test -y", \ "xl create _test_project test", \ "xl list", \ "xl clean", \ "xl build _test_project __target__", \ "xl rename _test_project _foo_test", \ "xl build _foo_test __target__", \ "xl rename _foo_test _test_project", \ ] CLEANUP_RENAME_TEST = \ [ \ "xl delete _test_project -y", \ ] # --------------------------------------------------------- MAKE_TEST = \ [ \ "xl create _foo_test", \ "xl make _foo_test __target__", \ "xl reset _foo_test", \ "xl rebuild _foo_test __target__", \ "xl show _foo_test", \ "xl extend _foo_test", \ ] # --------------------------------------------------------- EXAMPLES_TEST = \ [ \ "xl examples __target__", \ ] # --------------------------------------------------------- GAMES_TEST = \ [ \ "xl games __target__", \ ] # --------------------------------------------------------- RUN_TEST = \ [ \ "xl create _test_project", \ "xl build _test_project __target__", \ "xl run _test_project __target__", \ "xl clone _test_project _cloned_test_project", \ "xl build _cloned_test_project __target__", \ "xl run _cloned_test_project __target__", \ ] CLEANUP_RUN_TEST = \ [ \ "xl delete _test_project -y", \ "xl delete _cloned_test_project -y", \ ] # --------------------------------------------------------- # No clean-up necessary DEV_TOOLS_TEST = \ [ \ "xl tile ./assets/examples/single_tiles/tile_shape0.txt", \ "xl string abcdefghijklmnopqrstuvwxyz1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ", \ "xl split games/shuriken/docs/16x12_multi_tile.txt", \ "xl import ./assets/examples/tile_sets/asm/tile_8x6_shapeA.txt", \ "xl rip ./assets/examples/tile_sets/asm/tile_8x6_shapeA.txt", \ "xl rotate ./assets/examples/tile_sets/asm/tile_8x6_shapeA.txt", \ ] # --------------------------------------------------------- GAMES_TERMINAL_TEST = \ [ \ "xl games terminal __target__", \ ] ================================================ FILE: src/modules/tests.py ================================================ import sys import os from init import * from import_from_source import printc from file_functions import files_in_path from run import run_command from print_functions import printc, bcolors from test_self_defs import * from build_functions import * from execute import execute_string TERMINAL_TESTS = False CROSS_COMPILER_COMMAND = \ { 'cc65' : 'cl65', 'z88dk' : 'zcc', 'cmoc' : 'cmoc', 'cc6303' : 'cc68 -h', 'lcc1802' : 'lcc', 'vbcc' : 'vc -h', 'ack' : 'ack -h', 'tms9900-gcc' : 'tms9900-gcc -h' } CROSS_COMPILER_COMMAND_EXPECTED = \ { 'cc65' : 0, 'z88dk' : 0, 'cmoc' : 256, 'cc6303' : 256, 'lcc1802': 0, 'vbcc' : 256, 'ack' : 0, 'tms9900-gcc': 256 } NATIVE_COMPILER_COMMAND = \ { 'gcc' : 'gcc', 'g++' : 'g++', } NATIVE_COMPILER_COMMAND_EXPECTED = \ { 'gcc' : 256, 'g++' : 256, } TOOL_COMMAND = \ { 'abcwrite' : '../tools/z88dk/abc80/abcdisk-2.7/abcwrite -h', 'bbcim' : '../tools/bbc/bbcim.' + NATIVE_EXTENSION + ' -h', 'bin2abc' : '../tools/z88dk/abc80/abcdisk-2.7/bin2abc -h', 'cc1541' : '../tools/generic/CC1541/cc1541 -h', 'f2k5' : '../tools/cmoc/mo5/f2k5.' + NATIVE_EXTENSION + '', 'file2dsk' : '../tools/cmoc/coco/file2dsk/file2dsk.' + NATIVE_EXTENSION + ' -h', 'fixcart' : '../tools/cc65/gamate/gamate-fixcart.' + NATIVE_EXTENSION + '', 'm20' : '../tools/olivetti_m20/m20.' + NATIVE_EXTENSION + ' -h', 'mkatr' : '../tools/cc65/atari/mkatr-master/mkatr -h', 'makewzd' : '../tools/z88dk/oz/makewzd.' + NATIVE_EXTENSION + ' -h', 'nocart' : '../tools/z88dk/cpc/nocart/nocart.' + NATIVE_EXTENSION + ' -h', 'old2mfm' : '../tools/cc65/telestrat/old2mfm', 'ea5split' : '../tools/ti99/ea5split.' + NATIVE_EXTENSION + ' -h', 'elf2ea5' : '../tools/ti99/elf2ea5.' + NATIVE_EXTENSION + ' -h', 'exomizer' : '../tools/generic/exomizer/exomizer -h', 'sapfs' : '../tools/cmoc/mo5/sapfs.' + NATIVE_EXTENSION + '', 'tap2dsk' : '../tools/cc65/telestrat/tap2dsk', } TOOL_COMMAND_EXPECTED = \ { 'abcwrite' : 256, 'bin2abc' : 0, 'cc1541' : 65280, 'f2k5' : 0, 'sapfs' : 256, 'file2dsk' : 256, 'makewzd' : 256, 'fixcart' : 65280, 'bbcim' : 256, 'nocart' : 256, 'm20' : 256, 'mkatr' : 0, 'elf2ea5' : 256, 'ea5split' : 256, 'exomizer' : 256, 'tap2dsk' : 256, 'old2mfm' : 256, } EMULATOR_COMMAND = \ { 'c1541' : 'c1541 -h', 'x64' : 'x64 -h', 'xvic' : 'xvic -h', 'xplus4' : 'xplus4 -h', 'xpet' : 'xpet -h', 'mame' : 'mame -h', } EMULATOR_COMMAND_EXPECTED = \ { 'java' : 0, 'perl' : 0, 'c1541' : 0, 'x64' : 0, 'xvic' : 0, 'xplus4' : 0, 'xpet' : 0, 'mame' : 0, } BUILDABLE_TOOLS = \ { 'abcwrite', 'bin2abc', 'cc1541', 'f2k5', 'sapfs', 'file2dsk', 'makewzd', 'mkatr', 'fixcart', 'bbcim', 'nocart', 'm20', 'elf2ea5', 'ea5split', 'exomizer', 'tap2dsk', 'old2mfm', } INTERPRETER_COMMAND = \ { 'java' : 'java -h', 'perl' : 'perl -h', } INTERPRETER_COMMAND_EXPECTED = \ { 'java' : 0, 'perl' : 0, } LIBRARY_COMMAND = \ { 'ncurses' : "ls /usr/include/ncurses.h", } LIBRARY_COMMAND_EXPECTED = \ { 'ncurses' : 0, } ROM_COMMAND = \ { 'msx/msx.zip' : 'ls ../roms/mame/msx.zip', 'msx/canon20.zip' : 'ls ../roms/mame/canonv20.zip', 'c16/kernal' : 'ls ../roms/vice/plus4/kernal', 'c16/basic' : 'ls ../roms/vice/plus4/basic', 'c16/3plus1hi' : 'ls ../roms/vice/plus4/3plus1hi', 'c16/3plus1lo' : 'ls ../roms/vice/plus4/3plus1lo', 'c64/basic' : 'ls ../roms/vice/c64/basic', 'c64/chargen' : 'ls ../roms/vice/c64/chargen', 'c64/kernal' : 'ls ../roms/vice/c64/kernal', 'pet/basic1' : 'ls ../roms/vice/pet/basic1', 'pet/kernal1' : 'ls ../roms/vice/pet/kernal1', 'pet/basic2' : 'ls ../roms/vice/pet/basic2', 'pet/kernal2' : 'ls ../roms/vice/pet/kernal2', 'pet/basic4' : 'ls ../roms/vice/pet/basic4', 'pet/kernal4' : 'ls ../roms/vice/pet/kernal4', 'pet/chargen' : 'ls ../roms/vice/pet/chargen', 'pet/characters.901640-01.bin' : 'ls ../roms/vice/pet/characters.901640-01.bin', 'pet/edit1g' :'ls ../roms/vice/pet/edit1g', 'pet/edit2b' :'ls ../roms/vice/pet/edit2b', 'pet/edit2g' :'ls ../roms/vice/pet/edit2g', 'pet/edit4b40' :'ls ../roms/vice/pet/edit4b40', 'pet/edit4b80' :'ls ../roms/vice/pet/edit4b80', 'pet/edit4g40' :'ls ../roms/vice/pet/edit4g40', 'vic20/basic' : 'ls ../roms/vice/vic20/basic', 'vic20/chargen' : 'ls ../roms/vice/vic20/chargen', 'vic20/kernal' : 'ls ../roms/vice/vic20/kernal', } ROM_COMMAND_EXPECTED = \ { 'msx/msx.zip' : 0, 'msx/canon20.zip' : 0, 'c16/kernal' : 0, 'c16/basic' : 0, 'c16/3plus1hi' : 0, 'c16/3plus1lo' : 0, 'c64/kernal' : 0, 'c64/chargen' :0, 'c64/basic' : 0, 'pet/kernal1' : 0, 'pet/basic1' : 0, 'pet/kernal2' : 0, 'pet/basic2' : 0, 'pet/kernal4' : 0, 'pet/basic4' : 0, 'pet/chargen' :0, 'pet/characters.901640-01.bin' :0, 'pet/chargen' :0, 'pet/edit1g' :0, 'pet/edit2b' :0, 'pet/edit2g' :0, 'pet/edit4b40' :0, 'pet/edit4b80' :0, 'pet/edit4g40' :0, 'vic20/kernal' : 0, 'vic20/chargen' :0, 'vic20/basic' : 0, } MAKE_COMMAND = \ { 'make' : 'make -h', 'gmake' : 'gmake -h', } MAKE_COMMAND_EXPECTED = \ { 'make' : 0, 'gmake' : 0, } def check_programs(option_config, title, command_list, expected_list, silent=False): total_result = {} max_len = 0 for compiler in command_list.keys(): if len(compiler)>max_len: max_len = len(compiler) max_len = 28 for compiler in command_list.keys(): # print("Executing: " + command_list[compiler]) result = os.system(command_list[compiler] + " > /dev/null 2>&1") # print("result: " + str(result)) spaces = " " * (max_len+1-len(compiler)) if result==expected_list[compiler]: # print("[" + compiler + "] found") res = "found\n" res_color = bcolors.OKGREEN res_color2 = bcolors.OKGREEN total_result[compiler]=True else: total_result[compiler]=False if compiler in BUILDABLE_TOOLS: res = "NOT built\n" res_color = bcolors.OKBLUE res_color2 = bcolors.OKCYAN else: res = "NOT found\n" res_color = bcolors.WARNING res_color2 = bcolors.WARNING if not silent: printc(option_config, res_color,"[" + compiler + "]") printc(option_config, res_color2, spaces + res) return total_result def test_cross_compilers(option_config): return check_programs(option_config, "CROSS_COMPILERS", CROSS_COMPILER_COMMAND, \ CROSS_COMPILER_COMMAND_EXPECTED) def test_native_compilers(option_config): return check_programs(option_config, "NATIVE_COMPILERS", NATIVE_COMPILER_COMMAND, \ NATIVE_COMPILER_COMMAND_EXPECTED) def test_make(option_config, silent): return check_programs(option_config, "MAKE", MAKE_COMMAND,MAKE_COMMAND_EXPECTED, silent) def test_tools(option_config, silent=False): return check_programs(option_config, "TOOLS", TOOL_COMMAND, TOOL_COMMAND_EXPECTED, silent) def test_emulators(option_config): return check_programs(option_config, "EMULATORS", EMULATOR_COMMAND,EMULATOR_COMMAND_EXPECTED) def test_interpreters(option_config): return check_programs(option_config, "INTERPRETERS", INTERPRETER_COMMAND,INTERPRETER_COMMAND_EXPECTED) def test_libraries(option_config): return check_programs(option_config, "LIBRARIES", LIBRARY_COMMAND, LIBRARY_COMMAND_EXPECTED) def test_roms(option_config): return check_programs(option_config, "ROMS", ROM_COMMAND, ROM_COMMAND_EXPECTED) def test_compilers(option_config): test_native_compilers(option_config) test_cross_compilers(option_config) def run_single_unit_test(option_config, test_file_name, path="unit_tests"): command_string = "python -t " + path + "/" + test_file_name printc(option_config, bcolors.OKBLUE,"----------------------------------------\n") printc(option_config, bcolors.OKCYAN,test_file_name + "\n") printc(option_config, bcolors.OKBLUE,"--------------------------------\n") verbosity = option_config.terminal_config.verbose option_config.terminal_config.verbose = 1 run_command(option_config, command_string) option_config.terminal_config.verbose = verbosity def _unit_tests(option_config, path="./"): printc(option_config, bcolors.OKBLUE,"----------------------------------------\n") printc(option_config, bcolors.OKCYAN, "UNIT-TESTS") printc(option_config, bcolors.OKBLUE,"\n----------------------------------------\n") assets_tests = files_in_path("assets/unit_tests") for test in assets_tests: run_single_unit_test(option_config, test, "assets/unit_tests") main_tests = files_in_path("./unit_tests") for test in main_tests: run_single_unit_test(option_config, test) # TODO: Handle aliases such as dragon->coco # TODO: Handle Windows vs Linux and targets with 3 binaries # LoggerSingleton.initLogger(__name__) logger = LoggerSingleton.initLogger('xl', '../logs') # console_logger = LoggerSingleton.initConsoleLogger('console') # console_logger.info('Console logger started') logger.info('Started') def test_projects(option_config, projects, target="stdio"): compilation_threads = option_config.build_config.compilation_threads verbose = option_config.terminal_config.verbose clean_test(option_config) if projects in ["examples", "projects", "games"]: number_of_projects = len(dirs_in_path("./"+projects)) elif projects == "all": number_of_projects = \ len(dirs_in_path("./examples")) + \ len(dirs_in_path("./games")) + \ len(dirs_in_path("./projects")) else: number_of_projects = 1 if verbose: print("number of projects: " + str(number_of_projects)) #multiple_build build(option_config, ["build",projects,target,compilation_threads,""]) built_files = built_files_in_path("../build") # TODO: Handle target=*_targets and all if target.endswith("_targets") or target=="all": if verbose: print("Test on the number of binaries for all these targets is not supported") files_per_project = binary_factor(target) if verbose: print("Expected binaries per project: " + str(files_per_project)) if len(built_files)=3: par1 = params[1] par2 = params[2] else: par1 = params[1] par2 = "stdio" if test_projects(option_config, par1,par2): printc(option_config, bcolors.OKGREEN, "TEST OK\n") else: printc(option_config, bcolors.FAIL, "TEST KO\n") else: test_all(option_config, params[1]) return # Self-test xl and native build def check(option_config, params, silent=False): if len(params)<=1: tools = test_tools(option_config, silent) native_compilers =test_native_compilers(option_config) cross_compilers = test_cross_compilers(option_config) libraries = test_libraries(option_config) make = test_make(option_config, silent=True) emulators = test_emulators(option_config) roms = test_roms(option_config) print("") printc(option_config, bcolors.BOLD, "SUMMARY\n") tools = True xl_run_cross_target = True native_target = True cross_target = True if not make['make'] and not make['gmake']: printc(option_config, bcolors.FAIL, "No make command detected!\n") if not native_compilers['gcc']: tools = False native_target = False if not native_compilers['g++']: xl_run_cross_target = True tools = False if not libraries['ncurses']: printc(option_config, bcolors.WARNING, \ "No ncurses library detected -> Native target impacted\n") native_target = False for _, present in cross_compilers.items(): if not present: cross_target = False for _, present in emulators.items(): if not present: xl_run_cross_target = False break for _, present in roms.items(): if not present: xl_run_cross_target = False break if not tools: printc(option_config, bcolors.WARNING, "'xl tools' may be KO for some targets\n") if not native_target: printc(option_config, bcolors.WARNING, "'xl build ' may be KO (no native build)\n") if not cross_target: printc(option_config, bcolors.WARNING, "'xl build ' may be KO for some targets\n") if not xl_run_cross_target: printc(option_config, bcolors.WARNING, "'xl run ' may be KO for some targets\n") if tools and native_target and xl_run_cross_target and cross_target: printc(option_config, bcolors.OKCYAN, "No issue found\n") elif params[1]=="compilers": test_compilers(option_config) elif params[1]=="tools": test_tools(option_config) elif params[1]=="emulators": test_emulators(option_config) elif params[1]=="cross-compilers" or params[1]=="cross_compilers": test_cross_compilers(option_config) elif params[1]=="native_compilers" or params[1]=="native-compilers": test_native_compilers(option_config) elif params[1]=="libraries": test_libraries(option_config) elif params[1]=="interpreters": test_interpreters(option_config) elif params[1]=="make": test_make(option_config, silent=False) elif params[1]=="roms": test_roms(option_config) def compilers(option_config): test(option_config, ["test","compilers"]) def unit_tests(option_config): # test(option_config, ["test","unit-tests"]) _unit_tests(option_config) def self(option_config, params): if len(params)<2: test_self(option_config, ) else: test_self(option_config, params[1]) ================================================ FILE: src/modules/tiles.py ================================================ from print_functions import printc, bcolors, print_shape from project_functions import project_category from file_functions import files_in_path from import_from_source import import_tile, store_tile, compute_shape from run import run_command # global extend_algorithm TARGETS_WITH_XSIZE_6 = {"oric", "atmos", "comx_ntsc", "comx", "pecom", "micro"} TARGETS_WITH_XSIZE_7 = {"apple2", "apple2enh"} TARGETS_WITH_YSIZE_6 = {"atari_lynx"} TARGETS_WITH_YSIZE_9 = {"comx", "micro", "pecom"} TARGETS_WITH_YSIZE_8 = {"comx_ntsc", "micro_ntsc"} # Necessary to avoid comx and micro def detect_xsize(target): for target_6_xsize in TARGETS_WITH_XSIZE_6: if target.startswith(target_6_xsize): return 6 for target_7_xsize in TARGETS_WITH_XSIZE_7: if target.startswith(target_7_xsize): return 7 return 8 # TODO: VG-5000 has 8x10 characters but it is currently treated as 8x8 # TODO: Cidelsa has 8x6 (rotated 6x8 in reality) # comx_ntsc : 6x8 # comx (pal): 6x9 def detect_ysize(target): for target_8_ysize in TARGETS_WITH_YSIZE_8: # Necessary to have this before size 9 for NTSC case (comx, micro) if target.startswith(target_8_ysize): return 8 for target_6_ysize in TARGETS_WITH_YSIZE_6: if target.startswith(target_6_ysize): return 6 for target_9_ysize in TARGETS_WITH_YSIZE_9: if target.startswith(target_9_ysize): return 9 return 8 # Import a shape as single tile from a text file that describes its shape with characters def tile(option_config, params): tile,xsize,ysize = import_tile(params[1]) if option_config.terminal_config.verbose: print_shape(option_config, compute_shape(tile,xsize)) if len(params)>=3: store_tile(option_config, params[2], tile, xsize, ysize, params[3]) elif not option_config.terminal_config.test: printc(option_config, bcolors.OKCYAN, tile+"\n") # Import as tiles all shapes from files named "shape.txt" inside the directories in the "shapes" directory of a given project def tiles(option_config, params): verbose = option_config.terminal_config.verbose project_name = params[1] project_cat = project_category(project_name) if len(params)>3: # xsize, ysize parameters xsize_str,ysize_str = params[2:] elif len(params)==3: # target parameter detected_xsize = detect_xsize(params[2]) detected_ysize = detect_ysize(params[2]) xsize_str = str(detected_xsize) ysize_str = str(detected_ysize) else: # no parameter xsize_str = "8" ysize_str = "8" if verbose: print("xsize: " + xsize_str) print("ysize: " + ysize_str) path_to_files = project_cat + "s/" + params[1] + \ "/shapes/" + xsize_str + "x" + ysize_str + "/" if verbose: print("Path to shape files: " + path_to_files) shape_files = files_in_path(path_to_files) if verbose: print("shape files: ", shape_files) for shape_file in shape_files: if verbose: print("processing file: ", shape_file) path_to_shape_file = path_to_files + str(shape_file) if verbose: print("processing path file: ", path_to_shape_file) tile_number_str = shape_file[5:].replace(".txt","") if verbose: print("tile number: " + tile_number_str) tile,xsize,ysize = import_tile(path_to_shape_file) if str(xsize)!=xsize_str or str(ysize)!=ysize_str: print("Shape in file " + path_to_shape_file + " has wrong dimensions!") print(tile) return if not option_config.terminal_config.test: print(tile) if verbose: print_shape(option_config, compute_shape(tile,xsize)) store_tile(option_config, project_name, tile, xsize, ysize, tile_number_str) if verbose: print("") def make_assets_from_tiles(option_config, params): GNU_MAKE = option_config.build_config.gnu_make game_dir = params[1] project_type = project_category(game_dir) parent_dir = project_type + "s" run_command(option_config, GNU_MAKE+" GAME_NAME=" + game_dir + \ " PARENT_DIR=" + parent_dir + \ " -f ./makefiles.common/auxiliary/Makefile_assets") ================================================ FILE: src/patches/move_globals.py ================================================ #!/bin/python import shutil import os,sys import re if len(sys.argv)<2: game_dir = "chase" else: game_dir = sys.argv[1] if len(sys.argv)<3: parent_dir = "games" else: parent_dir = sys.argv[2] file_name = "../"+parent_dir+"/"+game_dir+"/main.c" file = open(file_name) file_content = file.read() file.close() # print(file_content) pattern = '(.*)' init_code = re.search(pattern, file_content, re.DOTALL).group(1) without_global_init = re.sub(pattern, '', file_content, flags=re.DOTALL) print(without_global_init) print(init_code) index = without_global_init.find('main(void)')+14 print(without_global_init[:index]+init_code+without_global_init[index:]) ================================================ FILE: src/template_projects/Makefile_game.template ================================================ ###################################################################### # Makefile for CROSS-_GAME_NAME_CAPITAL FULL_FILES ?= \ $(BASIC_CROSS_LIB_FILES) \ $(CROSS_LIB_PATH)/sleep/sleep_macros.c \ $(SOURCE_PATH)/main.c GAME_NAME := _GAME_NAME_ PARENT_DIR = projects SOURCE_PATH := $(PARENT_DIR)/$(GAME_NAME) #-D_DEFAULT_ASCII DEFAULT_ASCII= GLOBAL_OPTS = $(DEFAULT_ASCII) include ./$(PARENT_DIR)/$(GAME_NAME)/config/project_config.mk include ./$(PARENT_DIR)/$(GAME_NAME)/config/game_config.mk include ./Makefile_common include ./makefiles.common/auxiliary/Makefile_default_values ================================================ FILE: src/template_projects/arcade_game_code.template/main.c ================================================ /* --------------------------------------------------------------------------------------- */ // // CROSS SHOOT by Fabrizio Caruso // // Fabrizio_Caruso@hotmail.com // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from // the use of this software. // Permission is granted to anyone to use this software for non-commercial applications, // subxect to the following restrictions: // 1. The origin of this software must not be misrepresented; you must not // claim that you wrote the original software. If you use this software in // a product, an acknowledgment in the product documentation would be // appreciated but is not required. // 2. Altered source versions must be plainly marked as such, and must not // be misrepresented as being the original software. // 3. This notice may not be removed or altered from any source distribution. /* --------------------------------------------------------------------------------------- */ #include "cross_lib.h" #define INITIAL_LEVEL 1 #define FINAL_LEVEL 8 uint16_t hiscore; uint16_t score; uint8_t level; uint8_t alive; uint8_t lives; uint8_t input; uint8_t level_completed; uint8_t counter; uint8_t x; uint8_t y; void PRINT_CENTERED_ON_ROW(uint8_t row, char *Text) { _XL_PRINT(((uint8_t) (XSize - strlen(Text))>>1), row, Text); } #define PRINT_CENTERED(Text) \ PRINT_CENTERED_ON_ROW((YSize>>1), Text) void display_xy(void) { _XL_SET_TEXT_COLOR(_XL_WHITE); _XL_PRINTD(0,YSize-1,2,x); _XL_PRINTD(4,YSize-1,2,y); } int main(void) { _XL_INIT_GRAPHICS(); _XL_INIT_INPUT(); _XL_INIT_SOUND(); hiscore = 0; // MAIN END-LESS LOOP while(1) { score = 0; level = INITIAL_LEVEL; lives = 3; _XL_CLEAR_SCREEN(); _XL_SET_TEXT_COLOR(_XL_RED); PRINT_CENTERED_ON_ROW(4, "_GAME_NAME_CAPITAL"); _XL_SET_TEXT_COLOR(_XL_CYAN); PRINT_CENTERED_ON_ROW(6, "BY AUTHOR"); _XL_SET_TEXT_COLOR(_XL_WHITE); PRINT_CENTERED_ON_ROW(0, "HISCORE"); _XL_PRINTD(XSize/2-3,1,5,hiscore); PRINT_CENTERED_ON_ROW(YSize-1, "PRESS FIRE"); _XL_WAIT_FOR_INPUT(); _XL_CLEAR_SCREEN(); // GAME LOOP while(lives && (level XSize-2 || y<2 || y>YSize-3) { alive=0; _XL_EXPLOSION_SOUND(); } _XL_DRAW(x,y,_TILE_0, _XL_WHITE); _XL_SLEEP(1); if(_XL_DOWN(input)) { _XL_DELETE(x,y); ++y; display_xy(); } else if (_XL_RIGHT(input)) { _XL_DELETE(x,y); ++x; display_xy(); } else if (_XL_LEFT(input)) { _XL_DELETE(x,y); --x; display_xy(); } else if (_XL_UP(input)) { _XL_DELETE(x,y); --y; display_xy(); } else if(_XL_FIRE(input)) { _XL_TOCK_SOUND(); ++counter; score+=50; _XL_PRINTD(7,0,5,score); _XL_PRINTD(XSize-6,YSize-1,5,counter); } if(counter>=100) { level_completed = 1; _XL_ZAP_SOUND(); } } // ALIVE OR LEVEL_COMPLETED? if(alive) { ++level; PRINT_CENTERED("LEVEL COMPLETED"); } else { --lives; PRINT_CENTERED("YOU DIED"); _XL_SLEEP(1); } } // (lives && (levelhiscore) { hiscore = score; } } // while(1) -> restart from level 1 return EXIT_SUCCESS; } ================================================ FILE: src/template_projects/arcade_game_code.template/shapes/6x8/shape0.txt ================================================ ...... .#..#. #.##.# #.##.# #.##.# #.##.# .#..#. ...... ================================================ FILE: src/template_projects/arcade_game_code.template/shapes/6x8/shape1.txt ================================================ ...... .#..#. #.###. #.#.#. #.#.#. #.#.#. .#.### ...... ================================================ FILE: src/template_projects/arcade_game_code.template/shapes/6x8/shape10.txt ================================================ ...... .#..#. ##.#.# .#.#.# .#.#.# .#.#.# ###.#. ...... ================================================ FILE: src/template_projects/arcade_game_code.template/shapes/6x8/shape11.txt ================================================ ...... .#..#. ##.##. .#..#. .#..#. .#..#. ###### ...... ================================================ FILE: src/template_projects/arcade_game_code.template/shapes/6x8/shape12.txt ================================================ ...... .#..## ##.#.# .#...# .#..#. .#.#.. ###### ...... ================================================ FILE: src/template_projects/arcade_game_code.template/shapes/6x8/shape13.txt ================================================ ...... .#.### ##...# .#...# .#.### .#...# ###### ...... ================================================ FILE: src/template_projects/arcade_game_code.template/shapes/6x8/shape14.txt ================================================ ...... .#.#.# ##.#.# .#.#.# .#.### .#...# ###..# ...... ================================================ FILE: src/template_projects/arcade_game_code.template/shapes/6x8/shape15.txt ================================================ ...... .#.### ##.#.. .#.#.. .#.### .#...# ###### ...... ================================================ FILE: src/template_projects/arcade_game_code.template/shapes/6x8/shape16.txt ================================================ ...... .#.### ##.#.. .#.#.. .#.### .#.#.# ###### ...... ================================================ FILE: src/template_projects/arcade_game_code.template/shapes/6x8/shape17.txt ================================================ ...... .#.### ##...# .#...# .#..#. .#..#. ###.#. ...... ================================================ FILE: src/template_projects/arcade_game_code.template/shapes/6x8/shape18.txt ================================================ ...... .#.### ##.#.# .#.#.# .#.### .#.#.# ###### ...... ================================================ FILE: src/template_projects/arcade_game_code.template/shapes/6x8/shape19.txt ================================================ ...... .#.### ##.#.# .#.#.# .#.### .#...# ###..# ...... ================================================ FILE: src/template_projects/arcade_game_code.template/shapes/6x8/shape2.txt ================================================ ...... .#..## #.##.# #.#..# #.#.#. #.##.. .#.### ...... ================================================ FILE: src/template_projects/arcade_game_code.template/shapes/6x8/shape20.txt ================================================ ...... .##.#. #.##.# ..##.# .#.#.# #..#.# ###.#. ...... ================================================ FILE: src/template_projects/arcade_game_code.template/shapes/6x8/shape21.txt ================================================ ...... .##.#. #.###. ..#.#. .#..#. #...#. ###### ...... ================================================ FILE: src/template_projects/arcade_game_code.template/shapes/6x8/shape22.txt ================================================ ...... .##.## #.##.# ..#..# .#..#. #..#.. ###### ...... ================================================ FILE: src/template_projects/arcade_game_code.template/shapes/6x8/shape23.txt ================================================ ...... .##### #.#..# ..#..# .#.### #....# ###### ...... ================================================ FILE: src/template_projects/arcade_game_code.template/shapes/6x8/shape24.txt ================================================ ...... .###.# #.##.# ..##.# .#.### #....# ###..# ...... ================================================ FILE: src/template_projects/arcade_game_code.template/shapes/6x8/shape25.txt ================================================ ...... .##### #.##.. ..##.. .#.### #....# ###### ...... ================================================ FILE: src/template_projects/arcade_game_code.template/shapes/6x8/shape26.txt ================================================ ...... .##### #.##.. ..##.. .#.### #..#.# ###### ...... ================================================ FILE: src/template_projects/arcade_game_code.template/shapes/6x8/shape3.txt ================================================ ...... .#.### #.#..# #.#..# #.#### #.#..# .#.### ...... ================================================ FILE: src/template_projects/arcade_game_code.template/shapes/6x8/shape4.txt ================================================ ...... .#.#.# #.##.# #.##.# #.#### #.#..# .#...# ...... ================================================ FILE: src/template_projects/arcade_game_code.template/shapes/6x8/shape5.txt ================================================ ...... .#.### #.##.. #.##.. #.#### #.#..# .#.### ...... ================================================ FILE: src/template_projects/arcade_game_code.template/shapes/6x8/shape6.txt ================================================ ...... .#.### #.##.. #.##.. #.#### #.##.# .#.### ...... ================================================ FILE: src/template_projects/arcade_game_code.template/shapes/6x8/shape7.txt ================================================ ...... .#.### #.#..# #.#..# #.#.#. #.#.#. .#..#. ....... ================================================ FILE: src/template_projects/arcade_game_code.template/shapes/6x8/shape8.txt ================================================ ...... .#.### #.##.# #.##.# #.#### #.##.# .#.### ...... ================================================ FILE: src/template_projects/arcade_game_code.template/shapes/6x8/shape9.txt ================================================ ...... .#.### #.##.# #.##.# #.#### #.#..# .#...# ...... ================================================ FILE: src/template_projects/arcade_game_code.template/shapes/6x9/shape0.txt ================================================ ...... ...... .#..#. #.##.# #.##.# #.##.# #.##.# .#..#. ...... ================================================ FILE: src/template_projects/arcade_game_code.template/shapes/6x9/shape1.txt ================================================ ...... ...... .#..#. #.###. #.#.#. #.#.#. #.#.#. .#.### ...... ================================================ FILE: src/template_projects/arcade_game_code.template/shapes/6x9/shape10.txt ================================================ ...... ...... .#..#. ##.#.# .#.#.# .#.#.# .#.#.# ###.#. ...... ================================================ FILE: src/template_projects/arcade_game_code.template/shapes/6x9/shape11.txt ================================================ ...... ...... .#..#. ##.##. .#..#. .#..#. .#..#. ###### ...... ================================================ FILE: src/template_projects/arcade_game_code.template/shapes/6x9/shape12.txt ================================================ ...... ...... .#..## ##.#.# .#...# .#..#. .#.#.. ###### ...... ================================================ FILE: src/template_projects/arcade_game_code.template/shapes/6x9/shape13.txt ================================================ ...... ...... .#.### ##...# .#...# .#.### .#...# ###### ...... ================================================ FILE: src/template_projects/arcade_game_code.template/shapes/6x9/shape14.txt ================================================ ...... ...... .#.#.# ##.#.# .#.#.# .#.### .#...# ###..# ...... ================================================ FILE: src/template_projects/arcade_game_code.template/shapes/6x9/shape15.txt ================================================ ...... ...... .#.### ##.#.. .#.#.. .#.### .#...# ###### ...... ================================================ FILE: src/template_projects/arcade_game_code.template/shapes/6x9/shape16.txt ================================================ ...... ...... .#.### ##.#.. .#.#.. .#.### .#.#.# ###### ...... ================================================ FILE: src/template_projects/arcade_game_code.template/shapes/6x9/shape17.txt ================================================ ...... ...... .#.### ##...# .#...# .#..#. .#..#. ###.#. ...... ================================================ FILE: src/template_projects/arcade_game_code.template/shapes/6x9/shape18.txt ================================================ ...... ...... .#.### ##.#.# .#.#.# .#.### .#.#.# ###### ...... ================================================ FILE: src/template_projects/arcade_game_code.template/shapes/6x9/shape19.txt ================================================ ...... ...... .#.### ##.#.# .#.#.# .#.### .#...# ###..# ...... ================================================ FILE: src/template_projects/arcade_game_code.template/shapes/6x9/shape2.txt ================================================ ...... ...... .#..## #.##.# #.#..# #.#.#. #.##.. .#.### ...... ================================================ FILE: src/template_projects/arcade_game_code.template/shapes/6x9/shape20.txt ================================================ ...... ...... .##.#. #.##.# ..##.# .#.#.# #..#.# ###.#. ...... ================================================ FILE: src/template_projects/arcade_game_code.template/shapes/6x9/shape21.txt ================================================ ...... ...... .##.#. #.###. ..#.#. .#..#. #...#. ###### ...... ================================================ FILE: src/template_projects/arcade_game_code.template/shapes/6x9/shape22.txt ================================================ ...... ...... .##.## #.##.# ..#..# .#..#. #..#.. ###### ...... ================================================ FILE: src/template_projects/arcade_game_code.template/shapes/6x9/shape23.txt ================================================ ...... ...... .##### #.#..# ..#..# .#.### #....# ###### ...... ================================================ FILE: src/template_projects/arcade_game_code.template/shapes/6x9/shape24.txt ================================================ ...... ...... .###.# #.##.# ..##.# .#.### #....# ###..# ...... ================================================ FILE: src/template_projects/arcade_game_code.template/shapes/6x9/shape25.txt ================================================ ...... ...... .##### #.##.. ..##.. .#.### #....# ###### ...... ================================================ FILE: src/template_projects/arcade_game_code.template/shapes/6x9/shape26.txt ================================================ ...... ...... .##### #.##.. ..##.. .#.### #..#.# ###### ...... ================================================ FILE: src/template_projects/arcade_game_code.template/shapes/6x9/shape3.txt ================================================ ...... ...... .#.### #.#..# #.#..# #.#### #.#..# .#.### ...... ================================================ FILE: src/template_projects/arcade_game_code.template/shapes/6x9/shape4.txt ================================================ ...... ...... .#.#.# #.##.# #.##.# #.#### #.#..# .#...# ...... ================================================ FILE: src/template_projects/arcade_game_code.template/shapes/6x9/shape5.txt ================================================ ...... ...... .#.### #.##.. #.##.. #.#### #.#..# .#.### ...... ================================================ FILE: src/template_projects/arcade_game_code.template/shapes/6x9/shape6.txt ================================================ ...... ...... .#.### #.##.. #.##.. #.#### #.##.# .#.### ...... ================================================ FILE: src/template_projects/arcade_game_code.template/shapes/6x9/shape7.txt ================================================ ...... ...... .#.### #.#..# #.#..# #.#.#. #.#.#. .#..#. ....... ================================================ FILE: src/template_projects/arcade_game_code.template/shapes/6x9/shape8.txt ================================================ ...... ...... .#.### #.##.# #.##.# #.#### #.##.# .#.### ...... ================================================ FILE: src/template_projects/arcade_game_code.template/shapes/6x9/shape9.txt ================================================ ...... ...... .#.### #.##.# #.##.# #.#### #.#..# .#...# ...... ================================================ FILE: src/template_projects/arcade_game_code.template/shapes/7x8/shape0.txt ================================================ ....... .#...#. #.#.#.# #.#.#.# #.#.#.# #.#.#.# .#...#. ....... ================================================ FILE: src/template_projects/arcade_game_code.template/shapes/7x8/shape1.txt ================================================ ....... .#...#. #.#.##. #.#..#. #.#..#. #.#..#. .#..### ....... ================================================ FILE: src/template_projects/arcade_game_code.template/shapes/7x8/shape10.txt ================================================ ....... .#...#. ##..#.# .#..#.# .#..#.# .#..#.# ###..#. ....... ================================================ FILE: src/template_projects/arcade_game_code.template/shapes/7x8/shape11.txt ================================================ ....... .#...#. ##..##. .#...#. .#...#. .#...#. ###.### ....... ================================================ FILE: src/template_projects/arcade_game_code.template/shapes/7x8/shape12.txt ================================================ ....... .#...## ##..#.# .#....# .#...#. .#..#.. ###.### ....... ================================================ FILE: src/template_projects/arcade_game_code.template/shapes/7x8/shape13.txt ================================================ ....... .#..### ##....# .#....# .#..### .#....# ###.### ....... ================================================ FILE: src/template_projects/arcade_game_code.template/shapes/7x8/shape14.txt ================================================ ....... .#..#.# ##..#.# .#..#.# .#..### .#....# ###...# ....... ================================================ FILE: src/template_projects/arcade_game_code.template/shapes/7x8/shape15.txt ================================================ ....... .#..### ##..#.. .#..#.. .#..### .#....# ###.### ....... ================================================ FILE: src/template_projects/arcade_game_code.template/shapes/7x8/shape16.txt ================================================ ....... .#..### ##..#.. .#..#.. .#..### .#..#.# ###.### ....... ================================================ FILE: src/template_projects/arcade_game_code.template/shapes/7x8/shape17.txt ================================================ ....... .#..### ##....# .#....# .#...#. .#...#. ###..#. ....... ================================================ FILE: src/template_projects/arcade_game_code.template/shapes/7x8/shape18.txt ================================================ ....... .#..### ##..#.# .#..#.# .#..### .#..#.# ###.### ....... ================================================ FILE: src/template_projects/arcade_game_code.template/shapes/7x8/shape19.txt ================================================ ....... .#..### ##..#.# .#..#.# .#..### .#....# ###...# ....... ================================================ FILE: src/template_projects/arcade_game_code.template/shapes/7x8/shape2.txt ================================================ ....... .#...## #.#.#.# #.#...# #.#..#. #.#.#.. .#..### ....... ================================================ FILE: src/template_projects/arcade_game_code.template/shapes/7x8/shape20.txt ================================================ ....... .##..#. #.#.#.# ..#.#.# .#..#.# #...#.# ###..#. ....... ================================================ FILE: src/template_projects/arcade_game_code.template/shapes/7x8/shape21.txt ================================================ ....... .##..#. #.#.##. ..#..#. .#...#. #....#. ###.### ....... ================================================ FILE: src/template_projects/arcade_game_code.template/shapes/7x8/shape22.txt ================================================ ....... .##..## #.#.#.# ..#...# .#...#. #...#.. ###.### ....... ================================================ FILE: src/template_projects/arcade_game_code.template/shapes/7x8/shape23.txt ================================================ ....... .##.### #.#...# ..#...# .#..### #.....# ###.### ....... ================================================ FILE: src/template_projects/arcade_game_code.template/shapes/7x8/shape24.txt ================================================ ....... .##.#.# #.#.#.# ..#.#.# .#..### #.....# ###...# ....... ================================================ FILE: src/template_projects/arcade_game_code.template/shapes/7x8/shape25.txt ================================================ ....... .##.### #.#.#.. ..#.#.. .#..### #.....# ###.### ....... ================================================ FILE: src/template_projects/arcade_game_code.template/shapes/7x8/shape26.txt ================================================ ....... .##.### #.#.#.. ..#.#.. .#..### #...#.# ###.### ....... ================================================ FILE: src/template_projects/arcade_game_code.template/shapes/7x8/shape3.txt ================================================ ....... .#..### #.#...# #.#...# #.#.### #.#...# .#..### ....... ================================================ FILE: src/template_projects/arcade_game_code.template/shapes/7x8/shape4.txt ================================================ ....... .#..#.# #.#.#.# #.#.#.# #.#.### #.#...# .#....# ....... ================================================ FILE: src/template_projects/arcade_game_code.template/shapes/7x8/shape5.txt ================================================ ....... .#..### #.#.#.. #.#.#.. #.#.### #.#...# .#..### ....... ================================================ FILE: src/template_projects/arcade_game_code.template/shapes/7x8/shape6.txt ================================================ ....... .#..### #.#.#.. #.#.#.. #.#.### #.#.#.# .#..### ....... ================================================ FILE: src/template_projects/arcade_game_code.template/shapes/7x8/shape7.txt ================================================ ....... .#..### #.#...# #.#...# #.#..#. #.#..#. .#...#. ........ ================================================ FILE: src/template_projects/arcade_game_code.template/shapes/7x8/shape8.txt ================================================ ....... .#..### #.#.#.# #.#.#.# #.#.### #.#.#.# .#..### ....... ================================================ FILE: src/template_projects/arcade_game_code.template/shapes/7x8/shape9.txt ================================================ ....... .#..### #.#.#.# #.#.#.# #.#.### #.#...# .#....# ....... ================================================ FILE: src/template_projects/arcade_game_code.template/shapes/8x6/shape0.txt ================================================ .#....#. #.#..#.# #.#..#.# #.#..#.# #.#..#.# .#....#. ================================================ FILE: src/template_projects/arcade_game_code.template/shapes/8x6/shape1.txt ================================================ .#....#. #.#..##. #.#...#. #.#...#. #.#...#. .#...### ================================================ FILE: src/template_projects/arcade_game_code.template/shapes/8x6/shape10.txt ================================================ .#....#. ##...#.# .#...#.# .#...#.# .#...#.# ###...#. ================================================ FILE: src/template_projects/arcade_game_code.template/shapes/8x6/shape11.txt ================================================ .#....#. ##...##. .#....#. .#....#. .#....#. ###..### ================================================ FILE: src/template_projects/arcade_game_code.template/shapes/8x6/shape12.txt ================================================ .#....## ##...#.# .#.....# .#....#. .#...#.. ###..### ================================================ FILE: src/template_projects/arcade_game_code.template/shapes/8x6/shape13.txt ================================================ .#...### ##.....# .#.....# .#...### .#.....# ###..### ================================================ FILE: src/template_projects/arcade_game_code.template/shapes/8x6/shape14.txt ================================================ .#...#.# ##...#.# .#...#.# .#...### .#.....# ###....# ================================================ FILE: src/template_projects/arcade_game_code.template/shapes/8x6/shape15.txt ================================================ .#...### ##...#.. .#...#.. .#...### .#.....# ###..### ================================================ FILE: src/template_projects/arcade_game_code.template/shapes/8x6/shape16.txt ================================================ .#...### ##...#.. .#...#.. .#...### .#...#.# ###..### ================================================ FILE: src/template_projects/arcade_game_code.template/shapes/8x6/shape17.txt ================================================ .#...### ##.....# .#.....# .#....#. .#....#. ###...#. ================================================ FILE: src/template_projects/arcade_game_code.template/shapes/8x6/shape18.txt ================================================ .#...### ##...#.# .#...#.# .#...### .#...#.# ###..### ================================================ FILE: src/template_projects/arcade_game_code.template/shapes/8x6/shape19.txt ================================================ .#...### ##...#.# .#...#.# .#...### .#.....# ###....# ================================================ FILE: src/template_projects/arcade_game_code.template/shapes/8x6/shape2.txt ================================================ .#....## #.#..#.# #.#....# #.#...#. #.#..#.. .#...### ================================================ FILE: src/template_projects/arcade_game_code.template/shapes/8x6/shape20.txt ================================================ .##...#. #.#..#.# ..#..#.# .#...#.# #....#.# ###...#. ================================================ FILE: src/template_projects/arcade_game_code.template/shapes/8x6/shape21.txt ================================================ .##...#. #.#..##. ..#...#. .#....#. #.....#. ###..### ================================================ FILE: src/template_projects/arcade_game_code.template/shapes/8x6/shape22.txt ================================================ .##...## #.#..#.# ..#....# .#....#. #....#.. ###..### ================================================ FILE: src/template_projects/arcade_game_code.template/shapes/8x6/shape23.txt ================================================ .##..### #.#....# ..#....# .#...### #......# ###..### ================================================ FILE: src/template_projects/arcade_game_code.template/shapes/8x6/shape24.txt ================================================ .##..#.# #.#..#.# ..#..#.# .#...### #......# ###....# ================================================ FILE: src/template_projects/arcade_game_code.template/shapes/8x6/shape25.txt ================================================ .##..### #.#..#.. ..#..#.. .#...### #......# ###..### ================================================ FILE: src/template_projects/arcade_game_code.template/shapes/8x6/shape26.txt ================================================ .##..### #.#..#.. ..#..#.. .#...### #....#.# ###..### ================================================ FILE: src/template_projects/arcade_game_code.template/shapes/8x6/shape3.txt ================================================ .#...### #.#....# #.#....# #.#..### #.#....# .#...### ================================================ FILE: src/template_projects/arcade_game_code.template/shapes/8x6/shape4.txt ================================================ .#...#.# #.#..#.# #.#..#.# #.#..### #.#....# .#.....# ================================================ FILE: src/template_projects/arcade_game_code.template/shapes/8x6/shape5.txt ================================================ .#...### #.#..#.. #.#..#.. #.#..### #.#....# .#...### ================================================ FILE: src/template_projects/arcade_game_code.template/shapes/8x6/shape6.txt ================================================ .#...### #.#..#.. #.#..#.. #.#..### #.#..#.# .#...### ================================================ FILE: src/template_projects/arcade_game_code.template/shapes/8x6/shape7.txt ================================================ .#...### #.#....# #.#....# #.#...#. #.#...#. .#....#. ================================================ FILE: src/template_projects/arcade_game_code.template/shapes/8x6/shape8.txt ================================================ .#...### #.#..#.# #.#..#.# #.#..### #.#..#.# .#...### ================================================ FILE: src/template_projects/arcade_game_code.template/shapes/8x6/shape9.txt ================================================ .#...### #.#..#.# #.#..#.# #.#..### #.#....# .#.....# ================================================ FILE: src/template_projects/arcade_game_code.template/shapes/8x8/shape0.txt ================================================ ........ .#....#. #.#..#.# #.#..#.# #.#..#.# #.#..#.# .#....#. ........ ================================================ FILE: src/template_projects/arcade_game_code.template/shapes/8x8/shape1.txt ================================================ ........ .#....#. #.#..##. #.#...#. #.#...#. #.#...#. .#...### ........ ================================================ FILE: src/template_projects/arcade_game_code.template/shapes/8x8/shape10.txt ================================================ ........ .#....#. ##...#.# .#...#.# .#...#.# .#...#.# ###...#. ........ ================================================ FILE: src/template_projects/arcade_game_code.template/shapes/8x8/shape11.txt ================================================ ........ .#....#. ##...##. .#....#. .#....#. .#....#. ###..### ........ ================================================ FILE: src/template_projects/arcade_game_code.template/shapes/8x8/shape12.txt ================================================ ........ .#....## ##...#.# .#.....# .#....#. .#...#.. ###..### ........ ================================================ FILE: src/template_projects/arcade_game_code.template/shapes/8x8/shape13.txt ================================================ ........ .#...### ##.....# .#.....# .#...### .#.....# ###..### ........ ================================================ FILE: src/template_projects/arcade_game_code.template/shapes/8x8/shape14.txt ================================================ ........ .#...#.# ##...#.# .#...#.# .#...### .#.....# ###....# ........ ================================================ FILE: src/template_projects/arcade_game_code.template/shapes/8x8/shape15.txt ================================================ ........ .#...### ##...#.. .#...#.. .#...### .#.....# ###..### ........ ================================================ FILE: src/template_projects/arcade_game_code.template/shapes/8x8/shape16.txt ================================================ ........ .#...### ##...#.. .#...#.. .#...### .#...#.# ###..### ........ ================================================ FILE: src/template_projects/arcade_game_code.template/shapes/8x8/shape17.txt ================================================ ........ .#...### ##.....# .#.....# .#....#. .#....#. ###...#. ........ ================================================ FILE: src/template_projects/arcade_game_code.template/shapes/8x8/shape18.txt ================================================ ........ .#...### ##...#.# .#...#.# .#...### .#...#.# ###..### ........ ================================================ FILE: src/template_projects/arcade_game_code.template/shapes/8x8/shape19.txt ================================================ ........ .#...### ##...#.# .#...#.# .#...### .#.....# ###....# ........ ================================================ FILE: src/template_projects/arcade_game_code.template/shapes/8x8/shape2.txt ================================================ ........ .#....## #.#..#.# #.#....# #.#...#. #.#..#.. .#...### ........ ================================================ FILE: src/template_projects/arcade_game_code.template/shapes/8x8/shape20.txt ================================================ ........ .##...#. #.#..#.# ..#..#.# .#...#.# #....#.# ###...#. ........ ================================================ FILE: src/template_projects/arcade_game_code.template/shapes/8x8/shape21.txt ================================================ ........ .##...#. #.#..##. ..#...#. .#....#. #.....#. ###..### ........ ================================================ FILE: src/template_projects/arcade_game_code.template/shapes/8x8/shape22.txt ================================================ ........ .##...## #.#..#.# ..#....# .#....#. #....#.. ###..### ........ ================================================ FILE: src/template_projects/arcade_game_code.template/shapes/8x8/shape23.txt ================================================ ........ .##..### #.#....# ..#....# .#...### #......# ###..### ........ ================================================ FILE: src/template_projects/arcade_game_code.template/shapes/8x8/shape24.txt ================================================ ........ .##..#.# #.#..#.# ..#..#.# .#...### #......# ###....# ........ ================================================ FILE: src/template_projects/arcade_game_code.template/shapes/8x8/shape25.txt ================================================ ........ .##..### #.#..#.. ..#..#.. .#...### #......# ###..### ........ ================================================ FILE: src/template_projects/arcade_game_code.template/shapes/8x8/shape26.txt ================================================ ........ .##..### #.#..#.. ..#..#.. .#...### #....#.# ###..### ........ ================================================ FILE: src/template_projects/arcade_game_code.template/shapes/8x8/shape3.txt ================================================ ........ .#...### #.#....# #.#....# #.#..### #.#....# .#...### ........ ================================================ FILE: src/template_projects/arcade_game_code.template/shapes/8x8/shape4.txt ================================================ ........ .#...#.# #.#..#.# #.#..#.# #.#..### #.#....# .#.....# ........ ================================================ FILE: src/template_projects/arcade_game_code.template/shapes/8x8/shape5.txt ================================================ ........ .#...### #.#..#.. #.#..#.. #.#..### #.#....# .#...### ........ ================================================ FILE: src/template_projects/arcade_game_code.template/shapes/8x8/shape6.txt ================================================ ........ .#...### #.#..#.. #.#..#.. #.#..### #.#..#.# .#...### ........ ================================================ FILE: src/template_projects/arcade_game_code.template/shapes/8x8/shape7.txt ================================================ ........ .#...### #.#....# #.#....# #.#...#. #.#...#. .#....#. ......... ================================================ FILE: src/template_projects/arcade_game_code.template/shapes/8x8/shape8.txt ================================================ ........ .#...### #.#..#.# #.#..#.# #.#..### #.#..#.# .#...### ........ ================================================ FILE: src/template_projects/arcade_game_code.template/shapes/8x8/shape9.txt ================================================ ........ .#...### #.#..#.# #.#..#.# #.#..### #.#....# .#.....# ........ ================================================ FILE: src/template_projects/arcade_game_code.template/tiles/6x8/tile0.txt ================================================ 0,18,45,45,45,45,18,0 ================================================ FILE: src/template_projects/arcade_game_code.template/tiles/6x8/tile1.txt ================================================ 0,18,46,42,42,42,23,0 ================================================ FILE: src/template_projects/arcade_game_code.template/tiles/6x8/tile10.txt ================================================ 0,18,53,21,21,21,58,0 ================================================ FILE: src/template_projects/arcade_game_code.template/tiles/6x8/tile11.txt ================================================ 0,18,54,18,18,18,63,0 ================================================ FILE: src/template_projects/arcade_game_code.template/tiles/6x8/tile12.txt ================================================ 0,19,53,17,18,20,63,0 ================================================ FILE: src/template_projects/arcade_game_code.template/tiles/6x8/tile13.txt ================================================ 0,23,49,17,23,17,63,0 ================================================ FILE: src/template_projects/arcade_game_code.template/tiles/6x8/tile14.txt ================================================ 0,21,53,21,23,17,57,0 ================================================ FILE: src/template_projects/arcade_game_code.template/tiles/6x8/tile15.txt ================================================ 0,23,52,20,23,17,63,0 ================================================ FILE: src/template_projects/arcade_game_code.template/tiles/6x8/tile16.txt ================================================ 0,23,52,20,23,21,63,0 ================================================ FILE: src/template_projects/arcade_game_code.template/tiles/6x8/tile17.txt ================================================ 0,23,49,17,18,18,58,0 ================================================ FILE: src/template_projects/arcade_game_code.template/tiles/6x8/tile18.txt ================================================ 0,23,53,21,23,21,63,0 ================================================ FILE: src/template_projects/arcade_game_code.template/tiles/6x8/tile19.txt ================================================ 0,23,53,21,23,17,57,0 ================================================ FILE: src/template_projects/arcade_game_code.template/tiles/6x8/tile2.txt ================================================ 0,19,45,41,42,44,23,0 ================================================ FILE: src/template_projects/arcade_game_code.template/tiles/6x8/tile20.txt ================================================ 0,26,45,13,21,37,58,0 ================================================ FILE: src/template_projects/arcade_game_code.template/tiles/6x8/tile21.txt ================================================ 0,26,46,10,18,34,63,0 ================================================ FILE: src/template_projects/arcade_game_code.template/tiles/6x8/tile22.txt ================================================ 0,27,45,9,18,36,63,0 ================================================ FILE: src/template_projects/arcade_game_code.template/tiles/6x8/tile23.txt ================================================ 0,31,41,9,23,33,63,0 ================================================ FILE: src/template_projects/arcade_game_code.template/tiles/6x8/tile24.txt ================================================ 0,29,45,13,23,33,57,0 ================================================ FILE: src/template_projects/arcade_game_code.template/tiles/6x8/tile25.txt ================================================ 0,31,44,12,23,33,63,0 ================================================ FILE: src/template_projects/arcade_game_code.template/tiles/6x8/tile26.txt ================================================ 0,31,44,12,23,37,63,0 ================================================ FILE: src/template_projects/arcade_game_code.template/tiles/6x8/tile3.txt ================================================ 0,23,41,41,47,41,23,0 ================================================ FILE: src/template_projects/arcade_game_code.template/tiles/6x8/tile4.txt ================================================ 0,21,45,45,47,41,17,0 ================================================ FILE: src/template_projects/arcade_game_code.template/tiles/6x8/tile5.txt ================================================ 0,23,44,44,47,41,23,0 ================================================ FILE: src/template_projects/arcade_game_code.template/tiles/6x8/tile6.txt ================================================ 0,23,44,44,47,45,23,0 ================================================ FILE: src/template_projects/arcade_game_code.template/tiles/6x8/tile7.txt ================================================ 0,23,41,41,42,42,18,0 ================================================ FILE: src/template_projects/arcade_game_code.template/tiles/6x8/tile8.txt ================================================ 0,23,45,45,47,45,23,0 ================================================ FILE: src/template_projects/arcade_game_code.template/tiles/6x8/tile9.txt ================================================ 0,23,45,45,47,41,17,0 ================================================ FILE: src/template_projects/arcade_game_code.template/tiles/6x9/tile0.txt ================================================ 0,0,18,45,45,45,45,18,0 ================================================ FILE: src/template_projects/arcade_game_code.template/tiles/6x9/tile1.txt ================================================ 0,0,18,46,42,42,42,23,0 ================================================ FILE: src/template_projects/arcade_game_code.template/tiles/6x9/tile10.txt ================================================ 0,0,18,53,21,21,21,58,0 ================================================ FILE: src/template_projects/arcade_game_code.template/tiles/6x9/tile11.txt ================================================ 0,0,18,54,18,18,18,63,0 ================================================ FILE: src/template_projects/arcade_game_code.template/tiles/6x9/tile12.txt ================================================ 0,0,19,53,17,18,20,63,0 ================================================ FILE: src/template_projects/arcade_game_code.template/tiles/6x9/tile13.txt ================================================ 0,0,23,49,17,23,17,63,0 ================================================ FILE: src/template_projects/arcade_game_code.template/tiles/6x9/tile14.txt ================================================ 0,0,21,53,21,23,17,57,0 ================================================ FILE: src/template_projects/arcade_game_code.template/tiles/6x9/tile15.txt ================================================ 0,0,23,52,20,23,17,63,0 ================================================ FILE: src/template_projects/arcade_game_code.template/tiles/6x9/tile16.txt ================================================ 0,0,23,52,20,23,21,63,0 ================================================ FILE: src/template_projects/arcade_game_code.template/tiles/6x9/tile17.txt ================================================ 0,0,23,49,17,18,18,58,0 ================================================ FILE: src/template_projects/arcade_game_code.template/tiles/6x9/tile18.txt ================================================ 0,0,23,53,21,23,21,63,0 ================================================ FILE: src/template_projects/arcade_game_code.template/tiles/6x9/tile19.txt ================================================ 0,0,23,53,21,23,17,57,0 ================================================ FILE: src/template_projects/arcade_game_code.template/tiles/6x9/tile2.txt ================================================ 0,0,19,45,41,42,44,23,0 ================================================ FILE: src/template_projects/arcade_game_code.template/tiles/6x9/tile20.txt ================================================ 0,0,26,45,13,21,37,58,0 ================================================ FILE: src/template_projects/arcade_game_code.template/tiles/6x9/tile21.txt ================================================ 0,0,26,46,10,18,34,63,0 ================================================ FILE: src/template_projects/arcade_game_code.template/tiles/6x9/tile22.txt ================================================ 0,0,27,45,9,18,36,63,0 ================================================ FILE: src/template_projects/arcade_game_code.template/tiles/6x9/tile23.txt ================================================ 0,0,31,41,9,23,33,63,0 ================================================ FILE: src/template_projects/arcade_game_code.template/tiles/6x9/tile24.txt ================================================ 0,0,29,45,13,23,33,57,0 ================================================ FILE: src/template_projects/arcade_game_code.template/tiles/6x9/tile25.txt ================================================ 0,0,31,44,12,23,33,63,0 ================================================ FILE: src/template_projects/arcade_game_code.template/tiles/6x9/tile26.txt ================================================ 0,0,31,44,12,23,37,63,0 ================================================ FILE: src/template_projects/arcade_game_code.template/tiles/6x9/tile3.txt ================================================ 0,0,23,41,41,47,41,23,0 ================================================ FILE: src/template_projects/arcade_game_code.template/tiles/6x9/tile4.txt ================================================ 0,0,21,45,45,47,41,17,0 ================================================ FILE: src/template_projects/arcade_game_code.template/tiles/6x9/tile5.txt ================================================ 0,0,23,44,44,47,41,23,0 ================================================ FILE: src/template_projects/arcade_game_code.template/tiles/6x9/tile6.txt ================================================ 0,0,23,44,44,47,45,23,0 ================================================ FILE: src/template_projects/arcade_game_code.template/tiles/6x9/tile7.txt ================================================ 0,0,23,41,41,42,42,18,0 ================================================ FILE: src/template_projects/arcade_game_code.template/tiles/6x9/tile8.txt ================================================ 0,0,23,45,45,47,45,23,0 ================================================ FILE: src/template_projects/arcade_game_code.template/tiles/6x9/tile9.txt ================================================ 0,0,23,45,45,47,41,17,0 ================================================ FILE: src/template_projects/arcade_game_code.template/tiles/7x8/tile0.txt ================================================ 0,34,85,85,85,85,34,0 ================================================ FILE: src/template_projects/arcade_game_code.template/tiles/7x8/tile1.txt ================================================ 0,34,86,82,82,82,39,0 ================================================ FILE: src/template_projects/arcade_game_code.template/tiles/7x8/tile10.txt ================================================ 0,34,101,37,37,37,114,0 ================================================ FILE: src/template_projects/arcade_game_code.template/tiles/7x8/tile11.txt ================================================ 0,34,102,34,34,34,119,0 ================================================ FILE: src/template_projects/arcade_game_code.template/tiles/7x8/tile12.txt ================================================ 0,35,101,33,34,36,119,0 ================================================ FILE: src/template_projects/arcade_game_code.template/tiles/7x8/tile13.txt ================================================ 0,39,97,33,39,33,119,0 ================================================ FILE: src/template_projects/arcade_game_code.template/tiles/7x8/tile14.txt ================================================ 0,37,101,37,39,33,113,0 ================================================ FILE: src/template_projects/arcade_game_code.template/tiles/7x8/tile15.txt ================================================ 0,39,100,36,39,33,119,0 ================================================ FILE: src/template_projects/arcade_game_code.template/tiles/7x8/tile16.txt ================================================ 0,39,100,36,39,37,119,0 ================================================ FILE: src/template_projects/arcade_game_code.template/tiles/7x8/tile17.txt ================================================ 0,39,97,33,34,34,114,0 ================================================ FILE: src/template_projects/arcade_game_code.template/tiles/7x8/tile18.txt ================================================ 0,39,101,37,39,37,119,0 ================================================ FILE: src/template_projects/arcade_game_code.template/tiles/7x8/tile19.txt ================================================ 0,39,101,37,39,33,113,0 ================================================ FILE: src/template_projects/arcade_game_code.template/tiles/7x8/tile2.txt ================================================ 0,35,85,81,82,84,39,0 ================================================ FILE: src/template_projects/arcade_game_code.template/tiles/7x8/tile20.txt ================================================ 0,50,85,21,37,69,114,0 ================================================ FILE: src/template_projects/arcade_game_code.template/tiles/7x8/tile21.txt ================================================ 0,50,86,18,34,66,119,0 ================================================ FILE: src/template_projects/arcade_game_code.template/tiles/7x8/tile22.txt ================================================ 0,51,85,17,34,68,119,0 ================================================ FILE: src/template_projects/arcade_game_code.template/tiles/7x8/tile23.txt ================================================ 0,55,81,17,39,65,119,0 ================================================ FILE: src/template_projects/arcade_game_code.template/tiles/7x8/tile24.txt ================================================ 0,53,85,21,39,65,113,0 ================================================ FILE: src/template_projects/arcade_game_code.template/tiles/7x8/tile25.txt ================================================ 0,55,84,20,39,65,119,0 ================================================ FILE: src/template_projects/arcade_game_code.template/tiles/7x8/tile26.txt ================================================ 0,55,84,20,39,69,119,0 ================================================ FILE: src/template_projects/arcade_game_code.template/tiles/7x8/tile3.txt ================================================ 0,39,81,81,87,81,39,0 ================================================ FILE: src/template_projects/arcade_game_code.template/tiles/7x8/tile4.txt ================================================ 0,37,85,85,87,81,33,0 ================================================ FILE: src/template_projects/arcade_game_code.template/tiles/7x8/tile5.txt ================================================ 0,39,84,84,87,81,39,0 ================================================ FILE: src/template_projects/arcade_game_code.template/tiles/7x8/tile6.txt ================================================ 0,39,84,84,87,85,39,0 ================================================ FILE: src/template_projects/arcade_game_code.template/tiles/7x8/tile7.txt ================================================ 0,39,81,81,82,82,34,0 ================================================ FILE: src/template_projects/arcade_game_code.template/tiles/7x8/tile8.txt ================================================ 0,39,85,85,87,85,39,0 ================================================ FILE: src/template_projects/arcade_game_code.template/tiles/7x8/tile9.txt ================================================ 0,39,85,85,87,81,33,0 ================================================ FILE: src/template_projects/arcade_game_code.template/tiles/8x6/tile0.txt ================================================ 66,165,165,165,165,66 ================================================ FILE: src/template_projects/arcade_game_code.template/tiles/8x6/tile1.txt ================================================ 66,166,162,162,162,71 ================================================ FILE: src/template_projects/arcade_game_code.template/tiles/8x6/tile10.txt ================================================ 66,197,69,69,69,226 ================================================ FILE: src/template_projects/arcade_game_code.template/tiles/8x6/tile11.txt ================================================ 66,198,66,66,66,231 ================================================ FILE: src/template_projects/arcade_game_code.template/tiles/8x6/tile12.txt ================================================ 67,197,65,66,68,231 ================================================ FILE: src/template_projects/arcade_game_code.template/tiles/8x6/tile13.txt ================================================ 71,193,65,71,65,231 ================================================ FILE: src/template_projects/arcade_game_code.template/tiles/8x6/tile14.txt ================================================ 69,197,69,71,65,225 ================================================ FILE: src/template_projects/arcade_game_code.template/tiles/8x6/tile15.txt ================================================ 71,196,68,71,65,231 ================================================ FILE: src/template_projects/arcade_game_code.template/tiles/8x6/tile16.txt ================================================ 71,196,68,71,69,231 ================================================ FILE: src/template_projects/arcade_game_code.template/tiles/8x6/tile17.txt ================================================ 71,193,65,66,66,226 ================================================ FILE: src/template_projects/arcade_game_code.template/tiles/8x6/tile18.txt ================================================ 71,197,69,71,69,231 ================================================ FILE: src/template_projects/arcade_game_code.template/tiles/8x6/tile19.txt ================================================ 71,197,69,71,65,225 ================================================ FILE: src/template_projects/arcade_game_code.template/tiles/8x6/tile2.txt ================================================ 67,165,161,162,164,71 ================================================ FILE: src/template_projects/arcade_game_code.template/tiles/8x6/tile20.txt ================================================ 98,165,37,69,133,226 ================================================ FILE: src/template_projects/arcade_game_code.template/tiles/8x6/tile21.txt ================================================ 98,166,34,66,130,231 ================================================ FILE: src/template_projects/arcade_game_code.template/tiles/8x6/tile22.txt ================================================ 99,165,33,66,132,231 ================================================ FILE: src/template_projects/arcade_game_code.template/tiles/8x6/tile23.txt ================================================ 103,161,33,71,129,231 ================================================ FILE: src/template_projects/arcade_game_code.template/tiles/8x6/tile24.txt ================================================ 101,165,37,71,129,225 ================================================ FILE: src/template_projects/arcade_game_code.template/tiles/8x6/tile25.txt ================================================ 103,164,36,71,129,231 ================================================ FILE: src/template_projects/arcade_game_code.template/tiles/8x6/tile26.txt ================================================ 103,164,36,71,133,231 ================================================ FILE: src/template_projects/arcade_game_code.template/tiles/8x6/tile3.txt ================================================ 71,161,161,167,161,71 ================================================ FILE: src/template_projects/arcade_game_code.template/tiles/8x6/tile4.txt ================================================ 69,165,165,167,161,65 ================================================ FILE: src/template_projects/arcade_game_code.template/tiles/8x6/tile5.txt ================================================ 71,164,164,167,161,71 ================================================ FILE: src/template_projects/arcade_game_code.template/tiles/8x6/tile6.txt ================================================ 71,164,164,167,165,71 ================================================ FILE: src/template_projects/arcade_game_code.template/tiles/8x6/tile7.txt ================================================ 71,161,161,162,162,66 ================================================ FILE: src/template_projects/arcade_game_code.template/tiles/8x6/tile8.txt ================================================ 71,165,165,167,165,71 ================================================ FILE: src/template_projects/arcade_game_code.template/tiles/8x6/tile9.txt ================================================ 71,165,165,167,161,65 ================================================ FILE: src/template_projects/arcade_game_code.template/tiles/8x8/tile0.txt ================================================ 0,66,165,165,165,165,66,0 ================================================ FILE: src/template_projects/arcade_game_code.template/tiles/8x8/tile1.txt ================================================ 0,66,166,162,162,162,71,0 ================================================ FILE: src/template_projects/arcade_game_code.template/tiles/8x8/tile10.txt ================================================ 0,66,197,69,69,69,226,0 ================================================ FILE: src/template_projects/arcade_game_code.template/tiles/8x8/tile11.txt ================================================ 0,66,198,66,66,66,231,0 ================================================ FILE: src/template_projects/arcade_game_code.template/tiles/8x8/tile12.txt ================================================ 0,67,197,65,66,68,231,0 ================================================ FILE: src/template_projects/arcade_game_code.template/tiles/8x8/tile13.txt ================================================ 0,71,193,65,71,65,231,0 ================================================ FILE: src/template_projects/arcade_game_code.template/tiles/8x8/tile14.txt ================================================ 0,69,197,69,71,65,225,0 ================================================ FILE: src/template_projects/arcade_game_code.template/tiles/8x8/tile15.txt ================================================ 0,71,196,68,71,65,231,0 ================================================ FILE: src/template_projects/arcade_game_code.template/tiles/8x8/tile16.txt ================================================ 0,71,196,68,71,69,231,0 ================================================ FILE: src/template_projects/arcade_game_code.template/tiles/8x8/tile17.txt ================================================ 0,71,193,65,66,66,226,0 ================================================ FILE: src/template_projects/arcade_game_code.template/tiles/8x8/tile18.txt ================================================ 0,71,197,69,71,69,231,0 ================================================ FILE: src/template_projects/arcade_game_code.template/tiles/8x8/tile19.txt ================================================ 0,71,197,69,71,65,225,0 ================================================ FILE: src/template_projects/arcade_game_code.template/tiles/8x8/tile2.txt ================================================ 0,67,165,161,162,164,71,0 ================================================ FILE: src/template_projects/arcade_game_code.template/tiles/8x8/tile20.txt ================================================ 0,98,165,37,69,133,226,0 ================================================ FILE: src/template_projects/arcade_game_code.template/tiles/8x8/tile21.txt ================================================ 0,98,166,34,66,130,231,0 ================================================ FILE: src/template_projects/arcade_game_code.template/tiles/8x8/tile22.txt ================================================ 0,99,165,33,66,132,231,0 ================================================ FILE: src/template_projects/arcade_game_code.template/tiles/8x8/tile23.txt ================================================ 0,103,161,33,71,129,231,0 ================================================ FILE: src/template_projects/arcade_game_code.template/tiles/8x8/tile24.txt ================================================ 0,101,165,37,71,129,225,0 ================================================ FILE: src/template_projects/arcade_game_code.template/tiles/8x8/tile25.txt ================================================ 0,103,164,36,71,129,231,0 ================================================ FILE: src/template_projects/arcade_game_code.template/tiles/8x8/tile26.txt ================================================ 0,103,164,36,71,133,231,0 ================================================ FILE: src/template_projects/arcade_game_code.template/tiles/8x8/tile3.txt ================================================ 0,71,161,161,167,161,71,0 ================================================ FILE: src/template_projects/arcade_game_code.template/tiles/8x8/tile4.txt ================================================ 0,69,165,165,167,161,65,0 ================================================ FILE: src/template_projects/arcade_game_code.template/tiles/8x8/tile5.txt ================================================ 0,71,164,164,167,161,71,0 ================================================ FILE: src/template_projects/arcade_game_code.template/tiles/8x8/tile6.txt ================================================ 0,71,164,164,167,165,71,0 ================================================ FILE: src/template_projects/arcade_game_code.template/tiles/8x8/tile7.txt ================================================ 0,71,161,161,162,162,66,0 ================================================ FILE: src/template_projects/arcade_game_code.template/tiles/8x8/tile8.txt ================================================ 0,71,165,165,167,165,71,0 ================================================ FILE: src/template_projects/arcade_game_code.template/tiles/8x8/tile9.txt ================================================ 0,71,165,165,167,161,65,0 ================================================ FILE: src/template_projects/arcade_game_code.template/tiles/ASCII/char_tiles.h ================================================ #ifndef _CHAR_TILES_H #define _CHAR_TILES_H #include "cross_lib.h" #define _TILE_0 '*' #define _TILE_1 '*' #define _TILE_2 '-' #define _TILE_3 '-' // Apple #define _TILE_4 'O' // Body #define _TILE_5 'O' #define _TILE_6 'H' #define _TILE_7 '=' #if defined(_XL_NO_COLOR) #define _TILE_8 'R' #else #define _TILE_8 'O' #endif #define _TILE_9 'L' #define _TILE_10 '=' #define _TILE_11 'I' #define _TILE_12 'I' #define _TILE_13 '-' #define _TILE_14 'S' #define _TILE_15 'I' #define _TILE_16 'C' #define _TILE_17 'X' #if defined(_XL_NO_COLOR) #define _TILE_18 'S' #else #define _TILE_18 'O' #endif #define _TILE_26 'J' #endif // _CHAR_TILES_H ================================================ FILE: src/template_projects/config/game_config.mk.template ================================================ # COCO_COLOR_GFX_GAME_OPTS ?= CREATIVISION_GAME_OPTS ?= GAMATE_GAME_OPTS ?= C128_Z80_80COL_GAME_OPTS ?= ZX81_NO_GFX_GAME_OPTS ?= ZX81_GFX_GAME_OPTS ?= APPLE2_GAME_OPTS ?= COMX_GAME_OPTS ?= PECOM_GAME_OPTS ?= TMC600_GAME_OPTS ?= MICRO_GAME_OPTS ?= CAMPUTERS_LYNX_GAME_OPTS ?= VIC_20_EXP_3K_GAME_OPTS ?= VIC20_UNEXPANDED_GAME_OPTS ?= STDIO_GAME_OPTS ?= BBC7_GAME_OPTS ?= ================================================ FILE: src/template_projects/config/project_config.mk.template ================================================ ##################################################################### # DISPLAY FLAGS 4COLOR_PALETTE= # As of 2024/11/24, impacted targets are: bbc, nes, atari7800, hectorhr # Default: Black, White, Red, Cyan #-D__USE_GREEN 5COLOR_PALETTE= # As of 2024/11/24, impacted targets are: atari, atari5200 # Default: Black, White, Red, Cyan, Green #-D__USE_CYAN_YELLOW #-D__USE_GREEN_YELLOW ORIC_COLORS= # -D__MONO_COLORS MC10_COLORS= # -D__REVERSE_LETTERS ##################################################################### # SLOWDOWN VALUES # Common factor _COMMON_SLOWDOWN_FACTOR=10 # CC65 _APPLE2_SLOWDOWN=30 _APPLE2ENH_SLOWDOWN=70 _APPLE2_HGR_SLOWDOWN=70 _APPLE2ENH_HGR_SLOWDOWN=70 _ATARI_SLOWDOWN=120 _ATARI5200_SLOWDOWN=120 _ATARI_LYNX_SLOWDOWN=230 _ATARI7800_NO_COLOR_SLOWDOWN=300 _ATARI7800_SLOWDOWN=400 _ATARI_LYNX_SLOWDOWN=400 _C16_SLOWDOWN=55 _C16_CONIO_SLOWDOWN=85 _C64_SLOWDOWN=45 _CREATIVISION_SLOWDOWN=100 _GAMATE_SLOWDOWN=800 _ORIC_SLOWDOWN=90 _NES_SLOWDOWN=80 _PET_SLOWDOWN=60 _PCE_SLOWDOWN=550 _SUPERVISION_SLOWDOWN=1400 _VIC20_SLOWDOWN=500 # Z88DK _AQUARIUS_SLOWDOWN=150 _ACE_SLOWDOWN=130 _AGON_SLOWDOWN=600 _BEE_SLOWDOWN=150 _C128_Z80_40COL_SLOWDOWN=200 _C128_Z80_80COL_SLOWDOWN=50 _CAMPUTERS_LYNX_SLOWDOWN=0 _COLECO_SLOWDOWN=230 _CPC_MODE0_SLOWDOWN=250 _CPC_CPCRSLIB_MODE1_SLOWDOWN=240 _CPC_MODE2_SLOWDOWN=240 _CPM_Z80_SLOWDOWN=90 _CPM_INTEL8080_SLOWDOWN=80 _GAL_SLOWDOWN=100 _GAL_GFX_SLOWDOWN=50 _GB_SLOWDOWN=280 _GG_SLOWDOWN=260 _GB_WAIT_VSYNC_SLOWDOWN=150 _KC_SLOWDOWN=200 _LASER500_SLOWDOWN=250 _MC1000_SLOWDOWN=220 _MSX_SLOWDOWN=250 _MSX_FIXED_COLORS_SLOWDOWN=300 _MTX500_SLOWDOWN=250 _MTX512_SLOWDOWN=250 _MZ_SLOWDOWN=250 _SAMCOUPE_SLOWDOWN=300 _SC3000_SLOWDOWN=250 _SMS_SLOWDOWN=260 _SPECTRUM_SLOWDOWN=160 _VG5K_SLOWDOWN=220 _VZ200_SLOWDOWN=220 _Z1013_SLOWDOWN=100 _Z9001_SLOWDOWN=100 _ZX81_SLOWDOWN=60 _ZX81_WRX_SLOWDOWN=1 # CMOC _COCO_SLOWDOWN=150 _COCO3_SLOWDOWN=300 _DRAGON_SLOWDOWN=150 _MO5_SLOWDOWN=180 _TO7_SLOWDOWN=180 # LCC1802 _COMX_SLOWDOWN=100 _PECOM_SLOWDOWN=100 _TMC600_SLOWDOWN=120 _MICRO_SLOWDOWN=130 _CIDELSA_SLOWDOWN=100 # MC10 _MC10_SLOWDOWN=110 # GCC FOR TI99 _TI99_SLOWDOWN=120 # GCC _NCURSES_SLOWDOWN=12 _TERMINAL_SLOWDOWN=8 ================================================ FILE: src/template_projects/demo_code.template/main.c ================================================ /* --------------------------------------------------------------------------------------- */ // // CROSS SHOOT by Fabrizio Caruso // // Fabrizio_Caruso@hotmail.com // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from // the use of this software. // Permission is granted to anyone to use this software for non-commercial applications, // subject to the following restrictions: // 1. The origin of this software must not be misrepresented; you must not // claim that you wrote the original software. If you use this software in // a product, an acknowledgment in the product documentation would be // appreciated but is not required. // 2. Altered source versions must be plainly marked as such, and must not // be misrepresented as being the original software. // 3. This notice may not be removed or altered from any source distribution. /* --------------------------------------------------------------------------------------- */ #include "cross_lib.h" #if ((YSize)+(Y_OFFSET)-1)>19 #define MAX_TILES 19 #else #define MAX_TILES ((YSize)+(Y_OFFSET)-1) #endif #define NUMBER_OF_COLORS 6 #define MAX_STRING_SIZE 10 void PRINT_CENTERED_ON_ROW(uint8_t row, char *Text) { _XL_PRINT(((uint8_t) (XSize - strlen(Text))>>1), row, Text); } #define PRINT_CENTERED(Text) \ PRINT_CENTERED_ON_ROW((YSize>>1), Text) const uint8_t tiles[] = { _TILE_0, _TILE_1, _TILE_2, _TILE_3, _TILE_4, _TILE_5, _TILE_6, _TILE_7, _TILE_8, _TILE_9, _TILE_10, _TILE_11, _TILE_12, _TILE_13, _TILE_14, _TILE_15, _TILE_16, _TILE_17, _TILE_18, _TILE_19, _TILE_20, _TILE_21, _TILE_22, _TILE_23, _TILE_24, _TILE_25, _TILE_26 }; #if !defined(_XL_NO_COLOR) static const uint8_t tile_color[NUMBER_OF_COLORS] = {_XL_WHITE, _XL_RED, _XL_CYAN, _XL_GREEN, _XL_YELLOW, _XL_BLUE}; #endif const char color_name[NUMBER_OF_COLORS][MAX_STRING_SIZE] = { "WHITE", "RED", "CYAN", "GREEN", "YELLOW", "BLUE", }; #define COL_OFFSET ((XSize-16)/2-1) #define ROW_OFFSET 3 int main(void) { uint8_t i; uint8_t j; uint8_t k; uint8_t counter; uint8_t input; _XL_INIT_GRAPHICS(); _XL_INIT_INPUT(); _XL_INIT_SOUND(); for(k=0;k<3;++k) { for(j=0;j<6;++j) { _XL_CLEAR_SCREEN(); _XL_SET_TEXT_COLOR(_XL_WHITE); _XL_PRINT(COL_OFFSET, 4, "PRINTD"); _XL_PRINTD(COL_OFFSET ,5,5, 1234U); _XL_PRINTD(COL_OFFSET+5,5,5,56789U); _XL_SET_TEXT_COLOR(tile_color[j]); _XL_PRINT(COL_OFFSET, 7, (char *) color_name[j]); _XL_PRINT(COL_OFFSET, 9, _XL_a _XL_b _XL_c _XL_d _XL_e _XL_f _XL_g _XL_h _XL_i _XL_j); _XL_PRINT(COL_OFFSET,10, _XL_k _XL_l _XL_m _XL_n _XL_o _XL_p _XL_q _XL_r _XL_s _XL_t); _XL_PRINT(COL_OFFSET,11, _XL_u _XL_v _XL_w _XL_x _XL_y _XL_z); _XL_PRINT(COL_OFFSET,13, _XL_A _XL_B _XL_C _XL_D _XL_E _XL_F _XL_G _XL_H _XL_I _XL_J); _XL_PRINT(COL_OFFSET,14, _XL_K _XL_L _XL_M _XL_N _XL_O _XL_P _XL_Q _XL_R _XL_S _XL_T); _XL_PRINT(COL_OFFSET,15, _XL_U _XL_V _XL_W _XL_X _XL_Y _XL_Z); _XL_WAIT_FOR_INPUT(); _XL_CLEAR_SCREEN(); _XL_SET_TEXT_COLOR(_XL_WHITE); PRINT_CENTERED_ON_ROW(0, "SOUND"); _XL_WAIT_FOR_INPUT(); PRINT_CENTERED_ON_ROW(3, "PING"); _XL_WAIT_FOR_INPUT(); _XL_PING_SOUND(); _XL_WAIT_FOR_INPUT(); PRINT_CENTERED_ON_ROW(5, "TICK"); _XL_WAIT_FOR_INPUT(); _XL_TOCK_SOUND(); _XL_WAIT_FOR_INPUT(); PRINT_CENTERED_ON_ROW(7, "TOCK"); _XL_WAIT_FOR_INPUT(); _XL_TICK_SOUND(); _XL_WAIT_FOR_INPUT(); PRINT_CENTERED_ON_ROW(9, "ZAP"); _XL_WAIT_FOR_INPUT(); _XL_ZAP_SOUND(); _XL_WAIT_FOR_INPUT(); PRINT_CENTERED_ON_ROW(11, "SHOOT"); _XL_WAIT_FOR_INPUT(); _XL_SHOOT_SOUND(); _XL_WAIT_FOR_INPUT(); PRINT_CENTERED_ON_ROW(13, "EXPLOSITION"); _XL_WAIT_FOR_INPUT(); _XL_EXPLOSION_SOUND(); _XL_WAIT_FOR_INPUT(); _XL_CLEAR_SCREEN(); for(i=0;i<_XL_NUMBER_OF_TILES;++i) { _XL_DRAW((i&7)*2+COL_OFFSET,(i/8)*2+ROW_OFFSET,tiles[i],tile_color[j]); _XL_TICK_SOUND(); _XL_WAIT_FOR_INPUT(); } _XL_SET_TEXT_COLOR(_XL_WHITE); _XL_PRINT(COL_OFFSET,YSize-5, "PRESS FIRE"); _XL_WAIT_FOR_INPUT(); _XL_CLEAR_SCREEN(); _XL_SET_TEXT_COLOR(_XL_WHITE); PRINT_CENTERED_ON_ROW(0, "INPUT"); counter = 0; while(counter<200) { input = _XL_INPUT(); if(_XL_FIRE(input)) { PRINT_CENTERED("FIRE "); ++counter; } else if(_XL_LEFT(input)) { PRINT_CENTERED("LEFT "); ++counter; } else if(_XL_RIGHT(input)) { PRINT_CENTERED("RIGHT"); ++counter; } else if(_XL_DOWN(input)) { PRINT_CENTERED("DOWN "); ++counter; } else if(_XL_UP(input)) { PRINT_CENTERED("UP "); ++counter; } _XL_SLOW_DOWN(_XL_SLOW_DOWN_FACTOR); } } } _XL_PRINT(COL_OFFSET,YSize-5, "END OF DEMO"); while(1){}; return EXIT_SUCCESS; } ================================================ FILE: src/template_projects/demo_code.template/shapes/6x8/shape0.txt ================================================ ...... .#..#. #.##.# #.##.# #.##.# #.##.# .#..#. ...... ================================================ FILE: src/template_projects/demo_code.template/shapes/6x8/shape1.txt ================================================ ...... .#..#. #.###. #.#.#. #.#.#. #.#.#. .#.### ...... ================================================ FILE: src/template_projects/demo_code.template/shapes/6x8/shape10.txt ================================================ ...... .#..#. ##.#.# .#.#.# .#.#.# .#.#.# ###.#. ...... ================================================ FILE: src/template_projects/demo_code.template/shapes/6x8/shape11.txt ================================================ ...... .#..#. ##.##. .#..#. .#..#. .#..#. ###### ...... ================================================ FILE: src/template_projects/demo_code.template/shapes/6x8/shape12.txt ================================================ ...... .#..## ##.#.# .#...# .#..#. .#.#.. ###### ...... ================================================ FILE: src/template_projects/demo_code.template/shapes/6x8/shape13.txt ================================================ ...... .#.### ##...# .#...# .#.### .#...# ###### ...... ================================================ FILE: src/template_projects/demo_code.template/shapes/6x8/shape14.txt ================================================ ...... .#.#.# ##.#.# .#.#.# .#.### .#...# ###..# ...... ================================================ FILE: src/template_projects/demo_code.template/shapes/6x8/shape15.txt ================================================ ...... .#.### ##.#.. .#.#.. .#.### .#...# ###### ...... ================================================ FILE: src/template_projects/demo_code.template/shapes/6x8/shape16.txt ================================================ ...... .#.### ##.#.. .#.#.. .#.### .#.#.# ###### ...... ================================================ FILE: src/template_projects/demo_code.template/shapes/6x8/shape17.txt ================================================ ...... .#.### ##...# .#...# .#..#. .#..#. ###.#. ...... ================================================ FILE: src/template_projects/demo_code.template/shapes/6x8/shape18.txt ================================================ ...... .#.### ##.#.# .#.#.# .#.### .#.#.# ###### ...... ================================================ FILE: src/template_projects/demo_code.template/shapes/6x8/shape19.txt ================================================ ...... .#.### ##.#.# .#.#.# .#.### .#...# ###..# ...... ================================================ FILE: src/template_projects/demo_code.template/shapes/6x8/shape2.txt ================================================ ...... .#..## #.##.# #.#..# #.#.#. #.##.. .#.### ...... ================================================ FILE: src/template_projects/demo_code.template/shapes/6x8/shape20.txt ================================================ ...... .##.#. #.##.# ..##.# .#.#.# #..#.# ###.#. ...... ================================================ FILE: src/template_projects/demo_code.template/shapes/6x8/shape21.txt ================================================ ...... .##.#. #.###. ..#.#. .#..#. #...#. ###### ...... ================================================ FILE: src/template_projects/demo_code.template/shapes/6x8/shape22.txt ================================================ ...... .##.## #.##.# ..#..# .#..#. #..#.. ###### ...... ================================================ FILE: src/template_projects/demo_code.template/shapes/6x8/shape23.txt ================================================ ...... .##### #.#..# ..#..# .#.### #....# ###### ...... ================================================ FILE: src/template_projects/demo_code.template/shapes/6x8/shape24.txt ================================================ ...... .###.# #.##.# ..##.# .#.### #....# ###..# ...... ================================================ FILE: src/template_projects/demo_code.template/shapes/6x8/shape25.txt ================================================ ...... .##### #.##.. ..##.. .#.### #....# ###### ...... ================================================ FILE: src/template_projects/demo_code.template/shapes/6x8/shape26.txt ================================================ ...... .##### #.##.. ..##.. .#.### #..#.# ###### ...... ================================================ FILE: src/template_projects/demo_code.template/shapes/6x8/shape3.txt ================================================ ...... .#.### #.#..# #.#..# #.#### #.#..# .#.### ...... ================================================ FILE: src/template_projects/demo_code.template/shapes/6x8/shape4.txt ================================================ ...... .#.#.# #.##.# #.##.# #.#### #.#..# .#...# ...... ================================================ FILE: src/template_projects/demo_code.template/shapes/6x8/shape5.txt ================================================ ...... .#.### #.##.. #.##.. #.#### #.#..# .#.### ...... ================================================ FILE: src/template_projects/demo_code.template/shapes/6x8/shape6.txt ================================================ ...... .#.### #.##.. #.##.. #.#### #.##.# .#.### ...... ================================================ FILE: src/template_projects/demo_code.template/shapes/6x8/shape7.txt ================================================ ...... .#.### #.#..# #.#..# #.#.#. #.#.#. .#..#. ....... ================================================ FILE: src/template_projects/demo_code.template/shapes/6x8/shape8.txt ================================================ ...... .#.### #.##.# #.##.# #.#### #.##.# .#.### ...... ================================================ FILE: src/template_projects/demo_code.template/shapes/6x8/shape9.txt ================================================ ...... .#.### #.##.# #.##.# #.#### #.#..# .#...# ...... ================================================ FILE: src/template_projects/demo_code.template/shapes/6x9/shape0.txt ================================================ ...... ...... .#..#. #.##.# #.##.# #.##.# #.##.# .#..#. ...... ================================================ FILE: src/template_projects/demo_code.template/shapes/6x9/shape1.txt ================================================ ...... ...... .#..#. #.###. #.#.#. #.#.#. #.#.#. .#.### ...... ================================================ FILE: src/template_projects/demo_code.template/shapes/6x9/shape10.txt ================================================ ...... ...... .#..#. ##.#.# .#.#.# .#.#.# .#.#.# ###.#. ...... ================================================ FILE: src/template_projects/demo_code.template/shapes/6x9/shape11.txt ================================================ ...... ...... .#..#. ##.##. .#..#. .#..#. .#..#. ###### ...... ================================================ FILE: src/template_projects/demo_code.template/shapes/6x9/shape12.txt ================================================ ...... ...... .#..## ##.#.# .#...# .#..#. .#.#.. ###### ...... ================================================ FILE: src/template_projects/demo_code.template/shapes/6x9/shape13.txt ================================================ ...... ...... .#.### ##...# .#...# .#.### .#...# ###### ...... ================================================ FILE: src/template_projects/demo_code.template/shapes/6x9/shape14.txt ================================================ ...... ...... .#.#.# ##.#.# .#.#.# .#.### .#...# ###..# ...... ================================================ FILE: src/template_projects/demo_code.template/shapes/6x9/shape15.txt ================================================ ...... ...... .#.### ##.#.. .#.#.. .#.### .#...# ###### ...... ================================================ FILE: src/template_projects/demo_code.template/shapes/6x9/shape16.txt ================================================ ...... ...... .#.### ##.#.. .#.#.. .#.### .#.#.# ###### ...... ================================================ FILE: src/template_projects/demo_code.template/shapes/6x9/shape17.txt ================================================ ...... ...... .#.### ##...# .#...# .#..#. .#..#. ###.#. ...... ================================================ FILE: src/template_projects/demo_code.template/shapes/6x9/shape18.txt ================================================ ...... ...... .#.### ##.#.# .#.#.# .#.### .#.#.# ###### ...... ================================================ FILE: src/template_projects/demo_code.template/shapes/6x9/shape19.txt ================================================ ...... ...... .#.### ##.#.# .#.#.# .#.### .#...# ###..# ...... ================================================ FILE: src/template_projects/demo_code.template/shapes/6x9/shape2.txt ================================================ ...... ...... .#..## #.##.# #.#..# #.#.#. #.##.. .#.### ...... ================================================ FILE: src/template_projects/demo_code.template/shapes/6x9/shape20.txt ================================================ ...... ...... .##.#. #.##.# ..##.# .#.#.# #..#.# ###.#. ...... ================================================ FILE: src/template_projects/demo_code.template/shapes/6x9/shape21.txt ================================================ ...... ...... .##.#. #.###. ..#.#. .#..#. #...#. ###### ...... ================================================ FILE: src/template_projects/demo_code.template/shapes/6x9/shape22.txt ================================================ ...... ...... .##.## #.##.# ..#..# .#..#. #..#.. ###### ...... ================================================ FILE: src/template_projects/demo_code.template/shapes/6x9/shape23.txt ================================================ ...... ...... .##### #.#..# ..#..# .#.### #....# ###### ...... ================================================ FILE: src/template_projects/demo_code.template/shapes/6x9/shape24.txt ================================================ ...... ...... .###.# #.##.# ..##.# .#.### #....# ###..# ...... ================================================ FILE: src/template_projects/demo_code.template/shapes/6x9/shape25.txt ================================================ ...... ...... .##### #.##.. ..##.. .#.### #....# ###### ...... ================================================ FILE: src/template_projects/demo_code.template/shapes/6x9/shape26.txt ================================================ ...... ...... .##### #.##.. ..##.. .#.### #..#.# ###### ...... ================================================ FILE: src/template_projects/demo_code.template/shapes/6x9/shape3.txt ================================================ ...... ...... .#.### #.#..# #.#..# #.#### #.#..# .#.### ...... ================================================ FILE: src/template_projects/demo_code.template/shapes/6x9/shape4.txt ================================================ ...... ...... .#.#.# #.##.# #.##.# #.#### #.#..# .#...# ...... ================================================ FILE: src/template_projects/demo_code.template/shapes/6x9/shape5.txt ================================================ ...... ...... .#.### #.##.. #.##.. #.#### #.#..# .#.### ...... ================================================ FILE: src/template_projects/demo_code.template/shapes/6x9/shape6.txt ================================================ ...... ...... .#.### #.##.. #.##.. #.#### #.##.# .#.### ...... ================================================ FILE: src/template_projects/demo_code.template/shapes/6x9/shape7.txt ================================================ ...... ...... .#.### #.#..# #.#..# #.#.#. #.#.#. .#..#. ....... ================================================ FILE: src/template_projects/demo_code.template/shapes/6x9/shape8.txt ================================================ ...... ...... .#.### #.##.# #.##.# #.#### #.##.# .#.### ...... ================================================ FILE: src/template_projects/demo_code.template/shapes/6x9/shape9.txt ================================================ ...... ...... .#.### #.##.# #.##.# #.#### #.#..# .#...# ...... ================================================ FILE: src/template_projects/demo_code.template/shapes/7x8/shape0.txt ================================================ ....... .#...#. #.#.#.# #.#.#.# #.#.#.# #.#.#.# .#...#. ....... ================================================ FILE: src/template_projects/demo_code.template/shapes/7x8/shape1.txt ================================================ ....... .#...#. #.#.##. #.#..#. #.#..#. #.#..#. .#..### ....... ================================================ FILE: src/template_projects/demo_code.template/shapes/7x8/shape10.txt ================================================ ....... .#...#. ##..#.# .#..#.# .#..#.# .#..#.# ###..#. ....... ================================================ FILE: src/template_projects/demo_code.template/shapes/7x8/shape11.txt ================================================ ....... .#...#. ##..##. .#...#. .#...#. .#...#. ###.### ....... ================================================ FILE: src/template_projects/demo_code.template/shapes/7x8/shape12.txt ================================================ ....... .#...## ##..#.# .#....# .#...#. .#..#.. ###.### ....... ================================================ FILE: src/template_projects/demo_code.template/shapes/7x8/shape13.txt ================================================ ....... .#..### ##....# .#....# .#..### .#....# ###.### ....... ================================================ FILE: src/template_projects/demo_code.template/shapes/7x8/shape14.txt ================================================ ....... .#..#.# ##..#.# .#..#.# .#..### .#....# ###...# ....... ================================================ FILE: src/template_projects/demo_code.template/shapes/7x8/shape15.txt ================================================ ....... .#..### ##..#.. .#..#.. .#..### .#....# ###.### ....... ================================================ FILE: src/template_projects/demo_code.template/shapes/7x8/shape16.txt ================================================ ....... .#..### ##..#.. .#..#.. .#..### .#..#.# ###.### ....... ================================================ FILE: src/template_projects/demo_code.template/shapes/7x8/shape17.txt ================================================ ....... .#..### ##....# .#....# .#...#. .#...#. ###..#. ....... ================================================ FILE: src/template_projects/demo_code.template/shapes/7x8/shape18.txt ================================================ ....... .#..### ##..#.# .#..#.# .#..### .#..#.# ###.### ....... ================================================ FILE: src/template_projects/demo_code.template/shapes/7x8/shape19.txt ================================================ ....... .#..### ##..#.# .#..#.# .#..### .#....# ###...# ....... ================================================ FILE: src/template_projects/demo_code.template/shapes/7x8/shape2.txt ================================================ ....... .#...## #.#.#.# #.#...# #.#..#. #.#.#.. .#..### ....... ================================================ FILE: src/template_projects/demo_code.template/shapes/7x8/shape20.txt ================================================ ....... .##..#. #.#.#.# ..#.#.# .#..#.# #...#.# ###..#. ....... ================================================ FILE: src/template_projects/demo_code.template/shapes/7x8/shape21.txt ================================================ ....... .##..#. #.#.##. ..#..#. .#...#. #....#. ###.### ....... ================================================ FILE: src/template_projects/demo_code.template/shapes/7x8/shape22.txt ================================================ ....... .##..## #.#.#.# ..#...# .#...#. #...#.. ###.### ....... ================================================ FILE: src/template_projects/demo_code.template/shapes/7x8/shape23.txt ================================================ ....... .##.### #.#...# ..#...# .#..### #.....# ###.### ....... ================================================ FILE: src/template_projects/demo_code.template/shapes/7x8/shape24.txt ================================================ ....... .##.#.# #.#.#.# ..#.#.# .#..### #.....# ###...# ....... ================================================ FILE: src/template_projects/demo_code.template/shapes/7x8/shape25.txt ================================================ ....... .##.### #.#.#.. ..#.#.. .#..### #.....# ###.### ....... ================================================ FILE: src/template_projects/demo_code.template/shapes/7x8/shape26.txt ================================================ ....... .##.### #.#.#.. ..#.#.. .#..### #...#.# ###.### ....... ================================================ FILE: src/template_projects/demo_code.template/shapes/7x8/shape3.txt ================================================ ....... .#..### #.#...# #.#...# #.#.### #.#...# .#..### ....... ================================================ FILE: src/template_projects/demo_code.template/shapes/7x8/shape4.txt ================================================ ....... .#..#.# #.#.#.# #.#.#.# #.#.### #.#...# .#....# ....... ================================================ FILE: src/template_projects/demo_code.template/shapes/7x8/shape5.txt ================================================ ....... .#..### #.#.#.. #.#.#.. #.#.### #.#...# .#..### ....... ================================================ FILE: src/template_projects/demo_code.template/shapes/7x8/shape6.txt ================================================ ....... .#..### #.#.#.. #.#.#.. #.#.### #.#.#.# .#..### ....... ================================================ FILE: src/template_projects/demo_code.template/shapes/7x8/shape7.txt ================================================ ....... .#..### #.#...# #.#...# #.#..#. #.#..#. .#...#. ........ ================================================ FILE: src/template_projects/demo_code.template/shapes/7x8/shape8.txt ================================================ ....... .#..### #.#.#.# #.#.#.# #.#.### #.#.#.# .#..### ....... ================================================ FILE: src/template_projects/demo_code.template/shapes/7x8/shape9.txt ================================================ ....... .#..### #.#.#.# #.#.#.# #.#.### #.#...# .#....# ....... ================================================ FILE: src/template_projects/demo_code.template/shapes/8x6/shape0.txt ================================================ .#....#. #.#..#.# #.#..#.# #.#..#.# #.#..#.# .#....#. ================================================ FILE: src/template_projects/demo_code.template/shapes/8x6/shape1.txt ================================================ .#....#. #.#..##. #.#...#. #.#...#. #.#...#. .#...### ================================================ FILE: src/template_projects/demo_code.template/shapes/8x6/shape10.txt ================================================ .#....#. ##...#.# .#...#.# .#...#.# .#...#.# ###...#. ================================================ FILE: src/template_projects/demo_code.template/shapes/8x6/shape11.txt ================================================ .#....#. ##...##. .#....#. .#....#. .#....#. ###..### ================================================ FILE: src/template_projects/demo_code.template/shapes/8x6/shape12.txt ================================================ .#....## ##...#.# .#.....# .#....#. .#...#.. ###..### ================================================ FILE: src/template_projects/demo_code.template/shapes/8x6/shape13.txt ================================================ .#...### ##.....# .#.....# .#...### .#.....# ###..### ================================================ FILE: src/template_projects/demo_code.template/shapes/8x6/shape14.txt ================================================ .#...#.# ##...#.# .#...#.# .#...### .#.....# ###....# ================================================ FILE: src/template_projects/demo_code.template/shapes/8x6/shape15.txt ================================================ .#...### ##...#.. .#...#.. .#...### .#.....# ###..### ================================================ FILE: src/template_projects/demo_code.template/shapes/8x6/shape16.txt ================================================ .#...### ##...#.. .#...#.. .#...### .#...#.# ###..### ================================================ FILE: src/template_projects/demo_code.template/shapes/8x6/shape17.txt ================================================ .#...### ##.....# .#.....# .#....#. .#....#. ###...#. ================================================ FILE: src/template_projects/demo_code.template/shapes/8x6/shape18.txt ================================================ .#...### ##...#.# .#...#.# .#...### .#...#.# ###..### ================================================ FILE: src/template_projects/demo_code.template/shapes/8x6/shape19.txt ================================================ .#...### ##...#.# .#...#.# .#...### .#.....# ###....# ================================================ FILE: src/template_projects/demo_code.template/shapes/8x6/shape2.txt ================================================ .#....## #.#..#.# #.#....# #.#...#. #.#..#.. .#...### ================================================ FILE: src/template_projects/demo_code.template/shapes/8x6/shape20.txt ================================================ .##...#. #.#..#.# ..#..#.# .#...#.# #....#.# ###...#. ================================================ FILE: src/template_projects/demo_code.template/shapes/8x6/shape21.txt ================================================ .##...#. #.#..##. ..#...#. .#....#. #.....#. ###..### ================================================ FILE: src/template_projects/demo_code.template/shapes/8x6/shape22.txt ================================================ .##...## #.#..#.# ..#....# .#....#. #....#.. ###..### ================================================ FILE: src/template_projects/demo_code.template/shapes/8x6/shape23.txt ================================================ .##..### #.#....# ..#....# .#...### #......# ###..### ================================================ FILE: src/template_projects/demo_code.template/shapes/8x6/shape24.txt ================================================ .##..#.# #.#..#.# ..#..#.# .#...### #......# ###....# ================================================ FILE: src/template_projects/demo_code.template/shapes/8x6/shape25.txt ================================================ .##..### #.#..#.. ..#..#.. .#...### #......# ###..### ================================================ FILE: src/template_projects/demo_code.template/shapes/8x6/shape26.txt ================================================ .##..### #.#..#.. ..#..#.. .#...### #....#.# ###..### ================================================ FILE: src/template_projects/demo_code.template/shapes/8x6/shape3.txt ================================================ .#...### #.#....# #.#....# #.#..### #.#....# .#...### ================================================ FILE: src/template_projects/demo_code.template/shapes/8x6/shape4.txt ================================================ .#...#.# #.#..#.# #.#..#.# #.#..### #.#....# .#.....# ================================================ FILE: src/template_projects/demo_code.template/shapes/8x6/shape5.txt ================================================ .#...### #.#..#.. #.#..#.. #.#..### #.#....# .#...### ================================================ FILE: src/template_projects/demo_code.template/shapes/8x6/shape6.txt ================================================ .#...### #.#..#.. #.#..#.. #.#..### #.#..#.# .#...### ================================================ FILE: src/template_projects/demo_code.template/shapes/8x6/shape7.txt ================================================ .#...### #.#....# #.#....# #.#...#. #.#...#. .#....#. ================================================ FILE: src/template_projects/demo_code.template/shapes/8x6/shape8.txt ================================================ .#...### #.#..#.# #.#..#.# #.#..### #.#..#.# .#...### ================================================ FILE: src/template_projects/demo_code.template/shapes/8x6/shape9.txt ================================================ .#...### #.#..#.# #.#..#.# #.#..### #.#....# .#.....# ================================================ FILE: src/template_projects/demo_code.template/shapes/8x8/shape0.txt ================================================ ........ .#....#. #.#..#.# #.#..#.# #.#..#.# #.#..#.# .#....#. ........ ================================================ FILE: src/template_projects/demo_code.template/shapes/8x8/shape1.txt ================================================ ........ .#....#. #.#..##. #.#...#. #.#...#. #.#...#. .#...### ........ ================================================ FILE: src/template_projects/demo_code.template/shapes/8x8/shape10.txt ================================================ ........ .#....#. ##...#.# .#...#.# .#...#.# .#...#.# ###...#. ........ ================================================ FILE: src/template_projects/demo_code.template/shapes/8x8/shape11.txt ================================================ ........ .#....#. ##...##. .#....#. .#....#. .#....#. ###..### ........ ================================================ FILE: src/template_projects/demo_code.template/shapes/8x8/shape12.txt ================================================ ........ .#....## ##...#.# .#.....# .#....#. .#...#.. ###..### ........ ================================================ FILE: src/template_projects/demo_code.template/shapes/8x8/shape13.txt ================================================ ........ .#...### ##.....# .#.....# .#...### .#.....# ###..### ........ ================================================ FILE: src/template_projects/demo_code.template/shapes/8x8/shape14.txt ================================================ ........ .#...#.# ##...#.# .#...#.# .#...### .#.....# ###....# ........ ================================================ FILE: src/template_projects/demo_code.template/shapes/8x8/shape15.txt ================================================ ........ .#...### ##...#.. .#...#.. .#...### .#.....# ###..### ........ ================================================ FILE: src/template_projects/demo_code.template/shapes/8x8/shape16.txt ================================================ ........ .#...### ##...#.. .#...#.. .#...### .#...#.# ###..### ........ ================================================ FILE: src/template_projects/demo_code.template/shapes/8x8/shape17.txt ================================================ ........ .#...### ##.....# .#.....# .#....#. .#....#. ###...#. ........ ================================================ FILE: src/template_projects/demo_code.template/shapes/8x8/shape18.txt ================================================ ........ .#...### ##...#.# .#...#.# .#...### .#...#.# ###..### ........ ================================================ FILE: src/template_projects/demo_code.template/shapes/8x8/shape19.txt ================================================ ........ .#...### ##...#.# .#...#.# .#...### .#.....# ###....# ........ ================================================ FILE: src/template_projects/demo_code.template/shapes/8x8/shape2.txt ================================================ ........ .#....## #.#..#.# #.#....# #.#...#. #.#..#.. .#...### ........ ================================================ FILE: src/template_projects/demo_code.template/shapes/8x8/shape20.txt ================================================ ........ .##...#. #.#..#.# ..#..#.# .#...#.# #....#.# ###...#. ........ ================================================ FILE: src/template_projects/demo_code.template/shapes/8x8/shape21.txt ================================================ ........ .##...#. #.#..##. ..#...#. .#....#. #.....#. ###..### ........ ================================================ FILE: src/template_projects/demo_code.template/shapes/8x8/shape22.txt ================================================ ........ .##...## #.#..#.# ..#....# .#....#. #....#.. ###..### ........ ================================================ FILE: src/template_projects/demo_code.template/shapes/8x8/shape23.txt ================================================ ........ .##..### #.#....# ..#....# .#...### #......# ###..### ........ ================================================ FILE: src/template_projects/demo_code.template/shapes/8x8/shape24.txt ================================================ ........ .##..#.# #.#..#.# ..#..#.# .#...### #......# ###....# ........ ================================================ FILE: src/template_projects/demo_code.template/shapes/8x8/shape25.txt ================================================ ........ .##..### #.#..#.. ..#..#.. .#...### #......# ###..### ........ ================================================ FILE: src/template_projects/demo_code.template/shapes/8x8/shape26.txt ================================================ ........ .##..### #.#..#.. ..#..#.. .#...### #....#.# ###..### ........ ================================================ FILE: src/template_projects/demo_code.template/shapes/8x8/shape3.txt ================================================ ........ .#...### #.#....# #.#....# #.#..### #.#....# .#...### ........ ================================================ FILE: src/template_projects/demo_code.template/shapes/8x8/shape4.txt ================================================ ........ .#...#.# #.#..#.# #.#..#.# #.#..### #.#....# .#.....# ........ ================================================ FILE: src/template_projects/demo_code.template/shapes/8x8/shape5.txt ================================================ ........ .#...### #.#..#.. #.#..#.. #.#..### #.#....# .#...### ........ ================================================ FILE: src/template_projects/demo_code.template/shapes/8x8/shape6.txt ================================================ ........ .#...### #.#..#.. #.#..#.. #.#..### #.#..#.# .#...### ........ ================================================ FILE: src/template_projects/demo_code.template/shapes/8x8/shape7.txt ================================================ ........ .#...### #.#....# #.#....# #.#...#. #.#...#. .#....#. ......... ================================================ FILE: src/template_projects/demo_code.template/shapes/8x8/shape8.txt ================================================ ........ .#...### #.#..#.# #.#..#.# #.#..### #.#..#.# .#...### ........ ================================================ FILE: src/template_projects/demo_code.template/shapes/8x8/shape9.txt ================================================ ........ .#...### #.#..#.# #.#..#.# #.#..### #.#....# .#.....# ........ ================================================ FILE: src/template_projects/demo_code.template/tiles/6x8/tile0.txt ================================================ 0,18,45,45,45,45,18,0 ================================================ FILE: src/template_projects/demo_code.template/tiles/6x8/tile1.txt ================================================ 0,18,46,42,42,42,23,0 ================================================ FILE: src/template_projects/demo_code.template/tiles/6x8/tile10.txt ================================================ 0,18,53,21,21,21,58,0 ================================================ FILE: src/template_projects/demo_code.template/tiles/6x8/tile11.txt ================================================ 0,18,54,18,18,18,63,0 ================================================ FILE: src/template_projects/demo_code.template/tiles/6x8/tile12.txt ================================================ 0,19,53,17,18,20,63,0 ================================================ FILE: src/template_projects/demo_code.template/tiles/6x8/tile13.txt ================================================ 0,23,49,17,23,17,63,0 ================================================ FILE: src/template_projects/demo_code.template/tiles/6x8/tile14.txt ================================================ 0,21,53,21,23,17,57,0 ================================================ FILE: src/template_projects/demo_code.template/tiles/6x8/tile15.txt ================================================ 0,23,52,20,23,17,63,0 ================================================ FILE: src/template_projects/demo_code.template/tiles/6x8/tile16.txt ================================================ 0,23,52,20,23,21,63,0 ================================================ FILE: src/template_projects/demo_code.template/tiles/6x8/tile17.txt ================================================ 0,23,49,17,18,18,58,0 ================================================ FILE: src/template_projects/demo_code.template/tiles/6x8/tile18.txt ================================================ 0,23,53,21,23,21,63,0 ================================================ FILE: src/template_projects/demo_code.template/tiles/6x8/tile19.txt ================================================ 0,23,53,21,23,17,57,0 ================================================ FILE: src/template_projects/demo_code.template/tiles/6x8/tile2.txt ================================================ 0,19,45,41,42,44,23,0 ================================================ FILE: src/template_projects/demo_code.template/tiles/6x8/tile20.txt ================================================ 0,26,45,13,21,37,58,0 ================================================ FILE: src/template_projects/demo_code.template/tiles/6x8/tile21.txt ================================================ 0,26,46,10,18,34,63,0 ================================================ FILE: src/template_projects/demo_code.template/tiles/6x8/tile22.txt ================================================ 0,27,45,9,18,36,63,0 ================================================ FILE: src/template_projects/demo_code.template/tiles/6x8/tile23.txt ================================================ 0,31,41,9,23,33,63,0 ================================================ FILE: src/template_projects/demo_code.template/tiles/6x8/tile24.txt ================================================ 0,29,45,13,23,33,57,0 ================================================ FILE: src/template_projects/demo_code.template/tiles/6x8/tile25.txt ================================================ 0,31,44,12,23,33,63,0 ================================================ FILE: src/template_projects/demo_code.template/tiles/6x8/tile25_ORIG.txt ================================================ 0,8, 31, 16, 30, 2,62, 4 ================================================ FILE: src/template_projects/demo_code.template/tiles/6x8/tile26.txt ================================================ 0,31,44,12,23,37,63,0 ================================================ FILE: src/template_projects/demo_code.template/tiles/6x8/tile3.txt ================================================ 0,23,41,41,47,41,23,0 ================================================ FILE: src/template_projects/demo_code.template/tiles/6x8/tile4.txt ================================================ 0,21,45,45,47,41,17,0 ================================================ FILE: src/template_projects/demo_code.template/tiles/6x8/tile5.txt ================================================ 0,23,44,44,47,41,23,0 ================================================ FILE: src/template_projects/demo_code.template/tiles/6x8/tile6.txt ================================================ 0,23,44,44,47,45,23,0 ================================================ FILE: src/template_projects/demo_code.template/tiles/6x8/tile7.txt ================================================ 0,23,41,41,42,42,18,0 ================================================ FILE: src/template_projects/demo_code.template/tiles/6x8/tile8.txt ================================================ 0,23,45,45,47,45,23,0 ================================================ FILE: src/template_projects/demo_code.template/tiles/6x8/tile9.txt ================================================ 0,23,45,45,47,41,17,0 ================================================ FILE: src/template_projects/demo_code.template/tiles/6x9/tile0.txt ================================================ 0,0,18,45,45,45,45,18,0 ================================================ FILE: src/template_projects/demo_code.template/tiles/6x9/tile1.txt ================================================ 0,0,18,46,42,42,42,23,0 ================================================ FILE: src/template_projects/demo_code.template/tiles/6x9/tile10.txt ================================================ 0,0,18,53,21,21,21,58,0 ================================================ FILE: src/template_projects/demo_code.template/tiles/6x9/tile11.txt ================================================ 0,0,18,54,18,18,18,63,0 ================================================ FILE: src/template_projects/demo_code.template/tiles/6x9/tile12.txt ================================================ 0,0,19,53,17,18,20,63,0 ================================================ FILE: src/template_projects/demo_code.template/tiles/6x9/tile13.txt ================================================ 0,0,23,49,17,23,17,63,0 ================================================ FILE: src/template_projects/demo_code.template/tiles/6x9/tile14.txt ================================================ 0,0,21,53,21,23,17,57,0 ================================================ FILE: src/template_projects/demo_code.template/tiles/6x9/tile15.txt ================================================ 0,0,23,52,20,23,17,63,0 ================================================ FILE: src/template_projects/demo_code.template/tiles/6x9/tile16.txt ================================================ 0,0,23,52,20,23,21,63,0 ================================================ FILE: src/template_projects/demo_code.template/tiles/6x9/tile17.txt ================================================ 0,0,23,49,17,18,18,58,0 ================================================ FILE: src/template_projects/demo_code.template/tiles/6x9/tile18.txt ================================================ 0,0,23,53,21,23,21,63,0 ================================================ FILE: src/template_projects/demo_code.template/tiles/6x9/tile19.txt ================================================ 0,0,23,53,21,23,17,57,0 ================================================ FILE: src/template_projects/demo_code.template/tiles/6x9/tile2.txt ================================================ 0,0,19,45,41,42,44,23,0 ================================================ FILE: src/template_projects/demo_code.template/tiles/6x9/tile20.txt ================================================ 0,0,26,45,13,21,37,58,0 ================================================ FILE: src/template_projects/demo_code.template/tiles/6x9/tile21.txt ================================================ 0,0,26,46,10,18,34,63,0 ================================================ FILE: src/template_projects/demo_code.template/tiles/6x9/tile22.txt ================================================ 0,0,27,45,9,18,36,63,0 ================================================ FILE: src/template_projects/demo_code.template/tiles/6x9/tile23.txt ================================================ 0,0,31,41,9,23,33,63,0 ================================================ FILE: src/template_projects/demo_code.template/tiles/6x9/tile24.txt ================================================ 0,0,29,45,13,23,33,57,0 ================================================ FILE: src/template_projects/demo_code.template/tiles/6x9/tile25 _ORIG.txt ================================================ 0,8, 31, 16, 30, 2,62, 4,0 ================================================ FILE: src/template_projects/demo_code.template/tiles/6x9/tile25.txt ================================================ 0,0,31,44,12,23,33,63,0 ================================================ FILE: src/template_projects/demo_code.template/tiles/6x9/tile26.txt ================================================ 0,0,31,44,12,23,37,63,0 ================================================ FILE: src/template_projects/demo_code.template/tiles/6x9/tile3.txt ================================================ 0,0,23,41,41,47,41,23,0 ================================================ FILE: src/template_projects/demo_code.template/tiles/6x9/tile4.txt ================================================ 0,0,21,45,45,47,41,17,0 ================================================ FILE: src/template_projects/demo_code.template/tiles/6x9/tile5.txt ================================================ 0,0,23,44,44,47,41,23,0 ================================================ FILE: src/template_projects/demo_code.template/tiles/6x9/tile6.txt ================================================ 0,0,23,44,44,47,45,23,0 ================================================ FILE: src/template_projects/demo_code.template/tiles/6x9/tile7.txt ================================================ 0,0,23,41,41,42,42,18,0 ================================================ FILE: src/template_projects/demo_code.template/tiles/6x9/tile8.txt ================================================ 0,0,23,45,45,47,45,23,0 ================================================ FILE: src/template_projects/demo_code.template/tiles/6x9/tile9.txt ================================================ 0,0,23,45,45,47,41,17,0 ================================================ FILE: src/template_projects/demo_code.template/tiles/7x8/tile0.txt ================================================ 0,34,85,85,85,85,34,0 ================================================ FILE: src/template_projects/demo_code.template/tiles/7x8/tile1.txt ================================================ 0,34,86,82,82,82,39,0 ================================================ FILE: src/template_projects/demo_code.template/tiles/7x8/tile10.txt ================================================ 0,34,101,37,37,37,114,0 ================================================ FILE: src/template_projects/demo_code.template/tiles/7x8/tile11.txt ================================================ 0,34,102,34,34,34,119,0 ================================================ FILE: src/template_projects/demo_code.template/tiles/7x8/tile12.txt ================================================ 0,35,101,33,34,36,119,0 ================================================ FILE: src/template_projects/demo_code.template/tiles/7x8/tile13.txt ================================================ 0,39,97,33,39,33,119,0 ================================================ FILE: src/template_projects/demo_code.template/tiles/7x8/tile14.txt ================================================ 0,37,101,37,39,33,113,0 ================================================ FILE: src/template_projects/demo_code.template/tiles/7x8/tile15.txt ================================================ 0,39,100,36,39,33,119,0 ================================================ FILE: src/template_projects/demo_code.template/tiles/7x8/tile16.txt ================================================ 0,39,100,36,39,37,119,0 ================================================ FILE: src/template_projects/demo_code.template/tiles/7x8/tile17.txt ================================================ 0,39,97,33,34,34,114,0 ================================================ FILE: src/template_projects/demo_code.template/tiles/7x8/tile18.txt ================================================ 0,39,101,37,39,37,119,0 ================================================ FILE: src/template_projects/demo_code.template/tiles/7x8/tile19.txt ================================================ 0,39,101,37,39,33,113,0 ================================================ FILE: src/template_projects/demo_code.template/tiles/7x8/tile2.txt ================================================ 0,35,85,81,82,84,39,0 ================================================ FILE: src/template_projects/demo_code.template/tiles/7x8/tile20.txt ================================================ 0,50,85,21,37,69,114,0 ================================================ FILE: src/template_projects/demo_code.template/tiles/7x8/tile21.txt ================================================ 0,50,86,18,34,66,119,0 ================================================ FILE: src/template_projects/demo_code.template/tiles/7x8/tile22.txt ================================================ 0,51,85,17,34,68,119,0 ================================================ FILE: src/template_projects/demo_code.template/tiles/7x8/tile23.txt ================================================ 0,55,81,17,39,65,119,0 ================================================ FILE: src/template_projects/demo_code.template/tiles/7x8/tile24.txt ================================================ 0,53,85,21,39,65,113,0 ================================================ FILE: src/template_projects/demo_code.template/tiles/7x8/tile25.txt ================================================ 0,55,84,20,39,65,119,0 ================================================ FILE: src/template_projects/demo_code.template/tiles/7x8/tile25_ORIG.txt ================================================ $18,$3e,$60,$3c,$06,$7c,$18,$00 ================================================ FILE: src/template_projects/demo_code.template/tiles/7x8/tile26.txt ================================================ 0,55,84,20,39,69,119,0 ================================================ FILE: src/template_projects/demo_code.template/tiles/7x8/tile3.txt ================================================ 0,39,81,81,87,81,39,0 ================================================ FILE: src/template_projects/demo_code.template/tiles/7x8/tile4.txt ================================================ 0,37,85,85,87,81,33,0 ================================================ FILE: src/template_projects/demo_code.template/tiles/7x8/tile5.txt ================================================ 0,39,84,84,87,81,39,0 ================================================ FILE: src/template_projects/demo_code.template/tiles/7x8/tile6.txt ================================================ 0,39,84,84,87,85,39,0 ================================================ FILE: src/template_projects/demo_code.template/tiles/7x8/tile7.txt ================================================ 0,39,81,81,82,82,34,0 ================================================ FILE: src/template_projects/demo_code.template/tiles/7x8/tile8.txt ================================================ 0,39,85,85,87,85,39,0 ================================================ FILE: src/template_projects/demo_code.template/tiles/7x8/tile9.txt ================================================ 0,39,85,85,87,81,33,0 ================================================ FILE: src/template_projects/demo_code.template/tiles/8x6/tile0.txt ================================================ 66,165,165,165,165,66 ================================================ FILE: src/template_projects/demo_code.template/tiles/8x6/tile1.txt ================================================ 66,166,162,162,162,71 ================================================ FILE: src/template_projects/demo_code.template/tiles/8x6/tile10.txt ================================================ 66,197,69,69,69,226 ================================================ FILE: src/template_projects/demo_code.template/tiles/8x6/tile11.txt ================================================ 66,198,66,66,66,231 ================================================ FILE: src/template_projects/demo_code.template/tiles/8x6/tile12.txt ================================================ 67,197,65,66,68,231 ================================================ FILE: src/template_projects/demo_code.template/tiles/8x6/tile13.txt ================================================ 71,193,65,71,65,231 ================================================ FILE: src/template_projects/demo_code.template/tiles/8x6/tile14.txt ================================================ 69,197,69,71,65,225 ================================================ FILE: src/template_projects/demo_code.template/tiles/8x6/tile15.txt ================================================ 71,196,68,71,65,231 ================================================ FILE: src/template_projects/demo_code.template/tiles/8x6/tile16.txt ================================================ 71,196,68,71,69,231 ================================================ FILE: src/template_projects/demo_code.template/tiles/8x6/tile17.txt ================================================ 71,193,65,66,66,226 ================================================ FILE: src/template_projects/demo_code.template/tiles/8x6/tile18.txt ================================================ 71,197,69,71,69,231 ================================================ FILE: src/template_projects/demo_code.template/tiles/8x6/tile19.txt ================================================ 71,197,69,71,65,225 ================================================ FILE: src/template_projects/demo_code.template/tiles/8x6/tile2.txt ================================================ 67,165,161,162,164,71 ================================================ FILE: src/template_projects/demo_code.template/tiles/8x6/tile20.txt ================================================ 98,165,37,69,133,226 ================================================ FILE: src/template_projects/demo_code.template/tiles/8x6/tile21.txt ================================================ 98,166,34,66,130,231 ================================================ FILE: src/template_projects/demo_code.template/tiles/8x6/tile22.txt ================================================ 99,165,33,66,132,231 ================================================ FILE: src/template_projects/demo_code.template/tiles/8x6/tile23.txt ================================================ 103,161,33,71,129,231 ================================================ FILE: src/template_projects/demo_code.template/tiles/8x6/tile24.txt ================================================ 101,165,37,71,129,225 ================================================ FILE: src/template_projects/demo_code.template/tiles/8x6/tile25.txt ================================================ 103,164,36,71,129,231 ================================================ FILE: src/template_projects/demo_code.template/tiles/8x6/tile26.txt ================================================ 103,164,36,71,133,231 ================================================ FILE: src/template_projects/demo_code.template/tiles/8x6/tile3.txt ================================================ 71,161,161,167,161,71 ================================================ FILE: src/template_projects/demo_code.template/tiles/8x6/tile4.txt ================================================ 69,165,165,167,161,65 ================================================ FILE: src/template_projects/demo_code.template/tiles/8x6/tile5.txt ================================================ 71,164,164,167,161,71 ================================================ FILE: src/template_projects/demo_code.template/tiles/8x6/tile6.txt ================================================ 71,164,164,167,165,71 ================================================ FILE: src/template_projects/demo_code.template/tiles/8x6/tile7.txt ================================================ 71,161,161,162,162,66 ================================================ FILE: src/template_projects/demo_code.template/tiles/8x6/tile8.txt ================================================ 71,165,165,167,165,71 ================================================ FILE: src/template_projects/demo_code.template/tiles/8x6/tile9.txt ================================================ 71,165,165,167,161,65 ================================================ FILE: src/template_projects/demo_code.template/tiles/8x8/tile0.txt ================================================ 0,66,165,165,165,165,66,0 ================================================ FILE: src/template_projects/demo_code.template/tiles/8x8/tile1.txt ================================================ 0,66,166,162,162,162,71,0 ================================================ FILE: src/template_projects/demo_code.template/tiles/8x8/tile10.txt ================================================ 0,66,197,69,69,69,226,0 ================================================ FILE: src/template_projects/demo_code.template/tiles/8x8/tile11.txt ================================================ 0,66,198,66,66,66,231,0 ================================================ FILE: src/template_projects/demo_code.template/tiles/8x8/tile12.txt ================================================ 0,67,197,65,66,68,231,0 ================================================ FILE: src/template_projects/demo_code.template/tiles/8x8/tile13.txt ================================================ 0,71,193,65,71,65,231,0 ================================================ FILE: src/template_projects/demo_code.template/tiles/8x8/tile14.txt ================================================ 0,69,197,69,71,65,225,0 ================================================ FILE: src/template_projects/demo_code.template/tiles/8x8/tile15.txt ================================================ 0,71,196,68,71,65,231,0 ================================================ FILE: src/template_projects/demo_code.template/tiles/8x8/tile16.txt ================================================ 0,71,196,68,71,69,231,0 ================================================ FILE: src/template_projects/demo_code.template/tiles/8x8/tile17.txt ================================================ 0,71,193,65,66,66,226,0 ================================================ FILE: src/template_projects/demo_code.template/tiles/8x8/tile18.txt ================================================ 0,71,197,69,71,69,231,0 ================================================ FILE: src/template_projects/demo_code.template/tiles/8x8/tile19.txt ================================================ 0,71,197,69,71,65,225,0 ================================================ FILE: src/template_projects/demo_code.template/tiles/8x8/tile2.txt ================================================ 0,67,165,161,162,164,71,0 ================================================ FILE: src/template_projects/demo_code.template/tiles/8x8/tile20.txt ================================================ 0,98,165,37,69,133,226,0 ================================================ FILE: src/template_projects/demo_code.template/tiles/8x8/tile21.txt ================================================ 0,98,166,34,66,130,231,0 ================================================ FILE: src/template_projects/demo_code.template/tiles/8x8/tile22.txt ================================================ 0,99,165,33,66,132,231,0 ================================================ FILE: src/template_projects/demo_code.template/tiles/8x8/tile23.txt ================================================ 0,103,161,33,71,129,231,0 ================================================ FILE: src/template_projects/demo_code.template/tiles/8x8/tile24.txt ================================================ 0,101,165,37,71,129,225,0 ================================================ FILE: src/template_projects/demo_code.template/tiles/8x8/tile25.txt ================================================ 0,103,164,36,71,129,231,0 ================================================ FILE: src/template_projects/demo_code.template/tiles/8x8/tile26.txt ================================================ 0,103,164,36,71,133,231,0 ================================================ FILE: src/template_projects/demo_code.template/tiles/8x8/tile3.txt ================================================ 0,71,161,161,167,161,71,0 ================================================ FILE: src/template_projects/demo_code.template/tiles/8x8/tile4.txt ================================================ 0,69,165,165,167,161,65,0 ================================================ FILE: src/template_projects/demo_code.template/tiles/8x8/tile5.txt ================================================ 0,71,164,164,167,161,71,0 ================================================ FILE: src/template_projects/demo_code.template/tiles/8x8/tile6.txt ================================================ 0,71,164,164,167,165,71,0 ================================================ FILE: src/template_projects/demo_code.template/tiles/8x8/tile7.txt ================================================ 0,71,161,161,162,162,66,0 ================================================ FILE: src/template_projects/demo_code.template/tiles/8x8/tile8.txt ================================================ 0,71,165,165,167,165,71,0 ================================================ FILE: src/template_projects/demo_code.template/tiles/8x8/tile9.txt ================================================ 0,71,165,165,167,161,65,0 ================================================ FILE: src/template_projects/demo_code.template/tiles/ASCII/char_tiles.h ================================================ #ifndef _CHAR_TILES_H #define _CHAR_TILES_H #include "cross_lib.h" #define _TILE_0 '*' #define _TILE_1 '*' #define _TILE_2 '-' #define _TILE_3 '-' // Apple #define _TILE_4 'O' // Body #define _TILE_5 'O' #define _TILE_6 'H' #define _TILE_7 '=' #if defined(_XL_NO_COLOR) #define _TILE_8 'R' #else #define _TILE_8 'O' #endif #define _TILE_9 'L' #define _TILE_10 '=' #define _TILE_11 'I' #define _TILE_12 'I' #define _TILE_13 '-' #define _TILE_14 'S' #define _TILE_15 'I' #define _TILE_16 'C' #define _TILE_17 'X' #if defined(_XL_NO_COLOR) #define _TILE_18 'S' #else #define _TILE_18 'O' #endif #define _TILE_26 'J' #endif // _CHAR_TILES_H ================================================ FILE: src/template_projects/helloworld_code.template/main.c ================================================ /* --------------------------------------------------------------------------------------- */ // // CROSS SHOOT by Fabrizio Caruso // // Fabrizio_Caruso@hotmail.com // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from // the use of this software. // Permission is granted to anyone to use this software for non-commercial applications, // subject to the following restrictions: // 1. The origin of this software must not be misrepresented; you must not // claim that you wrote the original software. If you use this software in // a product, an acknowledgment in the product documentation would be // appreciated but is not required. // 2. Altered source versions must be plainly marked as such, and must not // be misrepresented as being the original software. // 3. This notice may not be removed or altered from any source distribution. /* --------------------------------------------------------------------------------------- */ #include "cross_lib.h" void PRINT_CENTERED_ON_ROW(uint8_t row, char *Text) { _XL_PRINT(((uint8_t) (XSize - strlen(Text))>>1), row, Text); } #define PRINT_CENTERED(Text) \ PRINT_CENTERED_ON_ROW((YSize>>1), Text) int main(void) { _XL_INIT_GRAPHICS(); _XL_INIT_INPUT(); _XL_INIT_SOUND(); _XL_CLEAR_SCREEN(); _XL_SET_TEXT_COLOR(_XL_WHITE); PRINT_CENTERED("HELLO WORLD"); _XL_REFRESH(); while(1){}; return EXIT_SUCCESS; } ================================================ FILE: src/template_projects/helloworld_code.template/shapes/6x8/shape0.txt ================================================ ...... .#..#. #.##.# #.##.# #.##.# #.##.# .#..#. ...... ================================================ FILE: src/template_projects/helloworld_code.template/shapes/6x8/shape1.txt ================================================ ...... .#..#. #.###. #.#.#. #.#.#. #.#.#. .#.### ...... ================================================ FILE: src/template_projects/helloworld_code.template/shapes/6x8/shape10.txt ================================================ ...... .#..#. ##.#.# .#.#.# .#.#.# .#.#.# ###.#. ...... ================================================ FILE: src/template_projects/helloworld_code.template/shapes/6x8/shape11.txt ================================================ ...... .#..#. ##.##. .#..#. .#..#. .#..#. ###### ...... ================================================ FILE: src/template_projects/helloworld_code.template/shapes/6x8/shape12.txt ================================================ ...... .#..## ##.#.# .#...# .#..#. .#.#.. ###### ...... ================================================ FILE: src/template_projects/helloworld_code.template/shapes/6x8/shape13.txt ================================================ ...... .#.### ##...# .#...# .#.### .#...# ###### ...... ================================================ FILE: src/template_projects/helloworld_code.template/shapes/6x8/shape14.txt ================================================ ...... .#.#.# ##.#.# .#.#.# .#.### .#...# ###..# ...... ================================================ FILE: src/template_projects/helloworld_code.template/shapes/6x8/shape15.txt ================================================ ...... .#.### ##.#.. .#.#.. .#.### .#...# ###### ...... ================================================ FILE: src/template_projects/helloworld_code.template/shapes/6x8/shape16.txt ================================================ ...... .#.### ##.#.. .#.#.. .#.### .#.#.# ###### ...... ================================================ FILE: src/template_projects/helloworld_code.template/shapes/6x8/shape17.txt ================================================ ...... .#.### ##...# .#...# .#..#. .#..#. ###.#. ...... ================================================ FILE: src/template_projects/helloworld_code.template/shapes/6x8/shape18.txt ================================================ ...... .#.### ##.#.# .#.#.# .#.### .#.#.# ###### ...... ================================================ FILE: src/template_projects/helloworld_code.template/shapes/6x8/shape19.txt ================================================ ...... .#.### ##.#.# .#.#.# .#.### .#...# ###..# ...... ================================================ FILE: src/template_projects/helloworld_code.template/shapes/6x8/shape2.txt ================================================ ...... .#..## #.##.# #.#..# #.#.#. #.##.. .#.### ...... ================================================ FILE: src/template_projects/helloworld_code.template/shapes/6x8/shape20.txt ================================================ ...... .##.#. #.##.# ..##.# .#.#.# #..#.# ###.#. ...... ================================================ FILE: src/template_projects/helloworld_code.template/shapes/6x8/shape21.txt ================================================ ...... .##.#. #.###. ..#.#. .#..#. #...#. ###### ...... ================================================ FILE: src/template_projects/helloworld_code.template/shapes/6x8/shape22.txt ================================================ ...... .##.## #.##.# ..#..# .#..#. #..#.. ###### ...... ================================================ FILE: src/template_projects/helloworld_code.template/shapes/6x8/shape23.txt ================================================ ...... .##### #.#..# ..#..# .#.### #....# ###### ...... ================================================ FILE: src/template_projects/helloworld_code.template/shapes/6x8/shape24.txt ================================================ ...... .###.# #.##.# ..##.# .#.### #....# ###..# ...... ================================================ FILE: src/template_projects/helloworld_code.template/shapes/6x8/shape25.txt ================================================ ...... .##### #.##.. ..##.. .#.### #....# ###### ...... ================================================ FILE: src/template_projects/helloworld_code.template/shapes/6x8/shape26.txt ================================================ ...... .##### #.##.. ..##.. .#.### #..#.# ###### ...... ================================================ FILE: src/template_projects/helloworld_code.template/shapes/6x8/shape3.txt ================================================ ...... .#.### #.#..# #.#..# #.#### #.#..# .#.### ...... ================================================ FILE: src/template_projects/helloworld_code.template/shapes/6x8/shape4.txt ================================================ ...... .#.#.# #.##.# #.##.# #.#### #.#..# .#...# ...... ================================================ FILE: src/template_projects/helloworld_code.template/shapes/6x8/shape5.txt ================================================ ...... .#.### #.##.. #.##.. #.#### #.#..# .#.### ...... ================================================ FILE: src/template_projects/helloworld_code.template/shapes/6x8/shape6.txt ================================================ ...... .#.### #.##.. #.##.. #.#### #.##.# .#.### ...... ================================================ FILE: src/template_projects/helloworld_code.template/shapes/6x8/shape7.txt ================================================ ...... .#.### #.#..# #.#..# #.#.#. #.#.#. .#..#. ....... ================================================ FILE: src/template_projects/helloworld_code.template/shapes/6x8/shape8.txt ================================================ ...... .#.### #.##.# #.##.# #.#### #.##.# .#.### ...... ================================================ FILE: src/template_projects/helloworld_code.template/shapes/6x8/shape9.txt ================================================ ...... .#.### #.##.# #.##.# #.#### #.#..# .#...# ...... ================================================ FILE: src/template_projects/helloworld_code.template/shapes/6x9/shape0.txt ================================================ ...... ...... .#..#. #.##.# #.##.# #.##.# #.##.# .#..#. ...... ================================================ FILE: src/template_projects/helloworld_code.template/shapes/6x9/shape1.txt ================================================ ...... ...... .#..#. #.###. #.#.#. #.#.#. #.#.#. .#.### ...... ================================================ FILE: src/template_projects/helloworld_code.template/shapes/6x9/shape10.txt ================================================ ...... ...... .#..#. ##.#.# .#.#.# .#.#.# .#.#.# ###.#. ...... ================================================ FILE: src/template_projects/helloworld_code.template/shapes/6x9/shape11.txt ================================================ ...... ...... .#..#. ##.##. .#..#. .#..#. .#..#. ###### ...... ================================================ FILE: src/template_projects/helloworld_code.template/shapes/6x9/shape12.txt ================================================ ...... ...... .#..## ##.#.# .#...# .#..#. .#.#.. ###### ...... ================================================ FILE: src/template_projects/helloworld_code.template/shapes/6x9/shape13.txt ================================================ ...... ...... .#.### ##...# .#...# .#.### .#...# ###### ...... ================================================ FILE: src/template_projects/helloworld_code.template/shapes/6x9/shape14.txt ================================================ ...... ...... .#.#.# ##.#.# .#.#.# .#.### .#...# ###..# ...... ================================================ FILE: src/template_projects/helloworld_code.template/shapes/6x9/shape15.txt ================================================ ...... ...... .#.### ##.#.. .#.#.. .#.### .#...# ###### ...... ================================================ FILE: src/template_projects/helloworld_code.template/shapes/6x9/shape16.txt ================================================ ...... ...... .#.### ##.#.. .#.#.. .#.### .#.#.# ###### ...... ================================================ FILE: src/template_projects/helloworld_code.template/shapes/6x9/shape17.txt ================================================ ...... ...... .#.### ##...# .#...# .#..#. .#..#. ###.#. ...... ================================================ FILE: src/template_projects/helloworld_code.template/shapes/6x9/shape18.txt ================================================ ...... ...... .#.### ##.#.# .#.#.# .#.### .#.#.# ###### ...... ================================================ FILE: src/template_projects/helloworld_code.template/shapes/6x9/shape19.txt ================================================ ...... ...... .#.### ##.#.# .#.#.# .#.### .#...# ###..# ...... ================================================ FILE: src/template_projects/helloworld_code.template/shapes/6x9/shape2.txt ================================================ ...... ...... .#..## #.##.# #.#..# #.#.#. #.##.. .#.### ...... ================================================ FILE: src/template_projects/helloworld_code.template/shapes/6x9/shape20.txt ================================================ ...... ...... .##.#. #.##.# ..##.# .#.#.# #..#.# ###.#. ...... ================================================ FILE: src/template_projects/helloworld_code.template/shapes/6x9/shape21.txt ================================================ ...... ...... .##.#. #.###. ..#.#. .#..#. #...#. ###### ...... ================================================ FILE: src/template_projects/helloworld_code.template/shapes/6x9/shape22.txt ================================================ ...... ...... .##.## #.##.# ..#..# .#..#. #..#.. ###### ...... ================================================ FILE: src/template_projects/helloworld_code.template/shapes/6x9/shape23.txt ================================================ ...... ...... .##### #.#..# ..#..# .#.### #....# ###### ...... ================================================ FILE: src/template_projects/helloworld_code.template/shapes/6x9/shape24.txt ================================================ ...... ...... .###.# #.##.# ..##.# .#.### #....# ###..# ...... ================================================ FILE: src/template_projects/helloworld_code.template/shapes/6x9/shape25.txt ================================================ ...... ...... .##### #.##.. ..##.. .#.### #....# ###### ...... ================================================ FILE: src/template_projects/helloworld_code.template/shapes/6x9/shape26.txt ================================================ ...... ...... .##### #.##.. ..##.. .#.### #..#.# ###### ...... ================================================ FILE: src/template_projects/helloworld_code.template/shapes/6x9/shape3.txt ================================================ ...... ...... .#.### #.#..# #.#..# #.#### #.#..# .#.### ...... ================================================ FILE: src/template_projects/helloworld_code.template/shapes/6x9/shape4.txt ================================================ ...... ...... .#.#.# #.##.# #.##.# #.#### #.#..# .#...# ...... ================================================ FILE: src/template_projects/helloworld_code.template/shapes/6x9/shape5.txt ================================================ ...... ...... .#.### #.##.. #.##.. #.#### #.#..# .#.### ...... ================================================ FILE: src/template_projects/helloworld_code.template/shapes/6x9/shape6.txt ================================================ ...... ...... .#.### #.##.. #.##.. #.#### #.##.# .#.### ...... ================================================ FILE: src/template_projects/helloworld_code.template/shapes/6x9/shape7.txt ================================================ ...... ...... .#.### #.#..# #.#..# #.#.#. #.#.#. .#..#. ....... ================================================ FILE: src/template_projects/helloworld_code.template/shapes/6x9/shape8.txt ================================================ ...... ...... .#.### #.##.# #.##.# #.#### #.##.# .#.### ...... ================================================ FILE: src/template_projects/helloworld_code.template/shapes/6x9/shape9.txt ================================================ ...... ...... .#.### #.##.# #.##.# #.#### #.#..# .#...# ...... ================================================ FILE: src/template_projects/helloworld_code.template/shapes/7x8/shape0.txt ================================================ ....... .#...#. #.#.#.# #.#.#.# #.#.#.# #.#.#.# .#...#. ....... ================================================ FILE: src/template_projects/helloworld_code.template/shapes/7x8/shape1.txt ================================================ ....... .#...#. #.#.##. #.#..#. #.#..#. #.#..#. .#..### ....... ================================================ FILE: src/template_projects/helloworld_code.template/shapes/7x8/shape10.txt ================================================ ....... .#...#. ##..#.# .#..#.# .#..#.# .#..#.# ###..#. ....... ================================================ FILE: src/template_projects/helloworld_code.template/shapes/7x8/shape11.txt ================================================ ....... .#...#. ##..##. .#...#. .#...#. .#...#. ###.### ....... ================================================ FILE: src/template_projects/helloworld_code.template/shapes/7x8/shape12.txt ================================================ ....... .#...## ##..#.# .#....# .#...#. .#..#.. ###.### ....... ================================================ FILE: src/template_projects/helloworld_code.template/shapes/7x8/shape13.txt ================================================ ....... .#..### ##....# .#....# .#..### .#....# ###.### ....... ================================================ FILE: src/template_projects/helloworld_code.template/shapes/7x8/shape14.txt ================================================ ....... .#..#.# ##..#.# .#..#.# .#..### .#....# ###...# ....... ================================================ FILE: src/template_projects/helloworld_code.template/shapes/7x8/shape15.txt ================================================ ....... .#..### ##..#.. .#..#.. .#..### .#....# ###.### ....... ================================================ FILE: src/template_projects/helloworld_code.template/shapes/7x8/shape16.txt ================================================ ....... .#..### ##..#.. .#..#.. .#..### .#..#.# ###.### ....... ================================================ FILE: src/template_projects/helloworld_code.template/shapes/7x8/shape17.txt ================================================ ....... .#..### ##....# .#....# .#...#. .#...#. ###..#. ....... ================================================ FILE: src/template_projects/helloworld_code.template/shapes/7x8/shape18.txt ================================================ ....... .#..### ##..#.# .#..#.# .#..### .#..#.# ###.### ....... ================================================ FILE: src/template_projects/helloworld_code.template/shapes/7x8/shape19.txt ================================================ ....... .#..### ##..#.# .#..#.# .#..### .#....# ###...# ....... ================================================ FILE: src/template_projects/helloworld_code.template/shapes/7x8/shape2.txt ================================================ ....... .#...## #.#.#.# #.#...# #.#..#. #.#.#.. .#..### ....... ================================================ FILE: src/template_projects/helloworld_code.template/shapes/7x8/shape20.txt ================================================ ....... .##..#. #.#.#.# ..#.#.# .#..#.# #...#.# ###..#. ....... ================================================ FILE: src/template_projects/helloworld_code.template/shapes/7x8/shape21.txt ================================================ ....... .##..#. #.#.##. ..#..#. .#...#. #....#. ###.### ....... ================================================ FILE: src/template_projects/helloworld_code.template/shapes/7x8/shape22.txt ================================================ ....... .##..## #.#.#.# ..#...# .#...#. #...#.. ###.### ....... ================================================ FILE: src/template_projects/helloworld_code.template/shapes/7x8/shape23.txt ================================================ ....... .##.### #.#...# ..#...# .#..### #.....# ###.### ....... ================================================ FILE: src/template_projects/helloworld_code.template/shapes/7x8/shape24.txt ================================================ ....... .##.#.# #.#.#.# ..#.#.# .#..### #.....# ###...# ....... ================================================ FILE: src/template_projects/helloworld_code.template/shapes/7x8/shape25.txt ================================================ ....... .##.### #.#.#.. ..#.#.. .#..### #.....# ###.### ....... ================================================ FILE: src/template_projects/helloworld_code.template/shapes/7x8/shape26.txt ================================================ ....... .##.### #.#.#.. ..#.#.. .#..### #...#.# ###.### ....... ================================================ FILE: src/template_projects/helloworld_code.template/shapes/7x8/shape3.txt ================================================ ....... .#..### #.#...# #.#...# #.#.### #.#...# .#..### ....... ================================================ FILE: src/template_projects/helloworld_code.template/shapes/7x8/shape4.txt ================================================ ....... .#..#.# #.#.#.# #.#.#.# #.#.### #.#...# .#....# ....... ================================================ FILE: src/template_projects/helloworld_code.template/shapes/7x8/shape5.txt ================================================ ....... .#..### #.#.#.. #.#.#.. #.#.### #.#...# .#..### ....... ================================================ FILE: src/template_projects/helloworld_code.template/shapes/7x8/shape6.txt ================================================ ....... .#..### #.#.#.. #.#.#.. #.#.### #.#.#.# .#..### ....... ================================================ FILE: src/template_projects/helloworld_code.template/shapes/7x8/shape7.txt ================================================ ....... .#..### #.#...# #.#...# #.#..#. #.#..#. .#...#. ........ ================================================ FILE: src/template_projects/helloworld_code.template/shapes/7x8/shape8.txt ================================================ ....... .#..### #.#.#.# #.#.#.# #.#.### #.#.#.# .#..### ....... ================================================ FILE: src/template_projects/helloworld_code.template/shapes/7x8/shape9.txt ================================================ ....... .#..### #.#.#.# #.#.#.# #.#.### #.#...# .#....# ....... ================================================ FILE: src/template_projects/helloworld_code.template/shapes/8x6/shape0.txt ================================================ .#....#. #.#..#.# #.#..#.# #.#..#.# #.#..#.# .#....#. ================================================ FILE: src/template_projects/helloworld_code.template/shapes/8x6/shape1.txt ================================================ .#....#. #.#..##. #.#...#. #.#...#. #.#...#. .#...### ================================================ FILE: src/template_projects/helloworld_code.template/shapes/8x6/shape10.txt ================================================ .#....#. ##...#.# .#...#.# .#...#.# .#...#.# ###...#. ================================================ FILE: src/template_projects/helloworld_code.template/shapes/8x6/shape11.txt ================================================ .#....#. ##...##. .#....#. .#....#. .#....#. ###..### ================================================ FILE: src/template_projects/helloworld_code.template/shapes/8x6/shape12.txt ================================================ .#....## ##...#.# .#.....# .#....#. .#...#.. ###..### ================================================ FILE: src/template_projects/helloworld_code.template/shapes/8x6/shape13.txt ================================================ .#...### ##.....# .#.....# .#...### .#.....# ###..### ================================================ FILE: src/template_projects/helloworld_code.template/shapes/8x6/shape14.txt ================================================ .#...#.# ##...#.# .#...#.# .#...### .#.....# ###....# ================================================ FILE: src/template_projects/helloworld_code.template/shapes/8x6/shape15.txt ================================================ .#...### ##...#.. .#...#.. .#...### .#.....# ###..### ================================================ FILE: src/template_projects/helloworld_code.template/shapes/8x6/shape16.txt ================================================ .#...### ##...#.. .#...#.. .#...### .#...#.# ###..### ================================================ FILE: src/template_projects/helloworld_code.template/shapes/8x6/shape17.txt ================================================ .#...### ##.....# .#.....# .#....#. .#....#. ###...#. ================================================ FILE: src/template_projects/helloworld_code.template/shapes/8x6/shape18.txt ================================================ .#...### ##...#.# .#...#.# .#...### .#...#.# ###..### ================================================ FILE: src/template_projects/helloworld_code.template/shapes/8x6/shape19.txt ================================================ .#...### ##...#.# .#...#.# .#...### .#.....# ###....# ================================================ FILE: src/template_projects/helloworld_code.template/shapes/8x6/shape2.txt ================================================ .#....## #.#..#.# #.#....# #.#...#. #.#..#.. .#...### ================================================ FILE: src/template_projects/helloworld_code.template/shapes/8x6/shape20.txt ================================================ .##...#. #.#..#.# ..#..#.# .#...#.# #....#.# ###...#. ================================================ FILE: src/template_projects/helloworld_code.template/shapes/8x6/shape21.txt ================================================ .##...#. #.#..##. ..#...#. .#....#. #.....#. ###..### ================================================ FILE: src/template_projects/helloworld_code.template/shapes/8x6/shape22.txt ================================================ .##...## #.#..#.# ..#....# .#....#. #....#.. ###..### ================================================ FILE: src/template_projects/helloworld_code.template/shapes/8x6/shape23.txt ================================================ .##..### #.#....# ..#....# .#...### #......# ###..### ================================================ FILE: src/template_projects/helloworld_code.template/shapes/8x6/shape24.txt ================================================ .##..#.# #.#..#.# ..#..#.# .#...### #......# ###....# ================================================ FILE: src/template_projects/helloworld_code.template/shapes/8x6/shape25.txt ================================================ .##..### #.#..#.. ..#..#.. .#...### #......# ###..### ================================================ FILE: src/template_projects/helloworld_code.template/shapes/8x6/shape26.txt ================================================ .##..### #.#..#.. ..#..#.. .#...### #....#.# ###..### ================================================ FILE: src/template_projects/helloworld_code.template/shapes/8x6/shape3.txt ================================================ .#...### #.#....# #.#....# #.#..### #.#....# .#...### ================================================ FILE: src/template_projects/helloworld_code.template/shapes/8x6/shape4.txt ================================================ .#...#.# #.#..#.# #.#..#.# #.#..### #.#....# .#.....# ================================================ FILE: src/template_projects/helloworld_code.template/shapes/8x6/shape5.txt ================================================ .#...### #.#..#.. #.#..#.. #.#..### #.#....# .#...### ================================================ FILE: src/template_projects/helloworld_code.template/shapes/8x6/shape6.txt ================================================ .#...### #.#..#.. #.#..#.. #.#..### #.#..#.# .#...### ================================================ FILE: src/template_projects/helloworld_code.template/shapes/8x6/shape7.txt ================================================ .#...### #.#....# #.#....# #.#...#. #.#...#. .#....#. ================================================ FILE: src/template_projects/helloworld_code.template/shapes/8x6/shape8.txt ================================================ .#...### #.#..#.# #.#..#.# #.#..### #.#..#.# .#...### ================================================ FILE: src/template_projects/helloworld_code.template/shapes/8x6/shape9.txt ================================================ .#...### #.#..#.# #.#..#.# #.#..### #.#....# .#.....# ================================================ FILE: src/template_projects/helloworld_code.template/shapes/8x8/shape0.txt ================================================ ........ .#....#. #.#..#.# #.#..#.# #.#..#.# #.#..#.# .#....#. ........ ================================================ FILE: src/template_projects/helloworld_code.template/shapes/8x8/shape1.txt ================================================ ........ .#....#. #.#..##. #.#...#. #.#...#. #.#...#. .#...### ........ ================================================ FILE: src/template_projects/helloworld_code.template/shapes/8x8/shape10.txt ================================================ ........ .#....#. ##...#.# .#...#.# .#...#.# .#...#.# ###...#. ........ ================================================ FILE: src/template_projects/helloworld_code.template/shapes/8x8/shape11.txt ================================================ ........ .#....#. ##...##. .#....#. .#....#. .#....#. ###..### ........ ================================================ FILE: src/template_projects/helloworld_code.template/shapes/8x8/shape12.txt ================================================ ........ .#....## ##...#.# .#.....# .#....#. .#...#.. ###..### ........ ================================================ FILE: src/template_projects/helloworld_code.template/shapes/8x8/shape13.txt ================================================ ........ .#...### ##.....# .#.....# .#...### .#.....# ###..### ........ ================================================ FILE: src/template_projects/helloworld_code.template/shapes/8x8/shape14.txt ================================================ ........ .#...#.# ##...#.# .#...#.# .#...### .#.....# ###....# ........ ================================================ FILE: src/template_projects/helloworld_code.template/shapes/8x8/shape15.txt ================================================ ........ .#...### ##...#.. .#...#.. .#...### .#.....# ###..### ........ ================================================ FILE: src/template_projects/helloworld_code.template/shapes/8x8/shape16.txt ================================================ ........ .#...### ##...#.. .#...#.. .#...### .#...#.# ###..### ........ ================================================ FILE: src/template_projects/helloworld_code.template/shapes/8x8/shape17.txt ================================================ ........ .#...### ##.....# .#.....# .#....#. .#....#. ###...#. ........ ================================================ FILE: src/template_projects/helloworld_code.template/shapes/8x8/shape18.txt ================================================ ........ .#...### ##...#.# .#...#.# .#...### .#...#.# ###..### ........ ================================================ FILE: src/template_projects/helloworld_code.template/shapes/8x8/shape19.txt ================================================ ........ .#...### ##...#.# .#...#.# .#...### .#.....# ###....# ........ ================================================ FILE: src/template_projects/helloworld_code.template/shapes/8x8/shape2.txt ================================================ ........ .#....## #.#..#.# #.#....# #.#...#. #.#..#.. .#...### ........ ================================================ FILE: src/template_projects/helloworld_code.template/shapes/8x8/shape20.txt ================================================ ........ .##...#. #.#..#.# ..#..#.# .#...#.# #....#.# ###...#. ........ ================================================ FILE: src/template_projects/helloworld_code.template/shapes/8x8/shape21.txt ================================================ ........ .##...#. #.#..##. ..#...#. .#....#. #.....#. ###..### ........ ================================================ FILE: src/template_projects/helloworld_code.template/shapes/8x8/shape22.txt ================================================ ........ .##...## #.#..#.# ..#....# .#....#. #....#.. ###..### ........ ================================================ FILE: src/template_projects/helloworld_code.template/shapes/8x8/shape23.txt ================================================ ........ .##..### #.#....# ..#....# .#...### #......# ###..### ........ ================================================ FILE: src/template_projects/helloworld_code.template/shapes/8x8/shape24.txt ================================================ ........ .##..#.# #.#..#.# ..#..#.# .#...### #......# ###....# ........ ================================================ FILE: src/template_projects/helloworld_code.template/shapes/8x8/shape25.txt ================================================ ........ .##..### #.#..#.. ..#..#.. .#...### #......# ###..### ........ ================================================ FILE: src/template_projects/helloworld_code.template/shapes/8x8/shape26.txt ================================================ ........ .##..### #.#..#.. ..#..#.. .#...### #....#.# ###..### ........ ================================================ FILE: src/template_projects/helloworld_code.template/shapes/8x8/shape3.txt ================================================ ........ .#...### #.#....# #.#....# #.#..### #.#....# .#...### ........ ================================================ FILE: src/template_projects/helloworld_code.template/shapes/8x8/shape4.txt ================================================ ........ .#...#.# #.#..#.# #.#..#.# #.#..### #.#....# .#.....# ........ ================================================ FILE: src/template_projects/helloworld_code.template/shapes/8x8/shape5.txt ================================================ ........ .#...### #.#..#.. #.#..#.. #.#..### #.#....# .#...### ........ ================================================ FILE: src/template_projects/helloworld_code.template/shapes/8x8/shape6.txt ================================================ ........ .#...### #.#..#.. #.#..#.. #.#..### #.#..#.# .#...### ........ ================================================ FILE: src/template_projects/helloworld_code.template/shapes/8x8/shape7.txt ================================================ ........ .#...### #.#....# #.#....# #.#...#. #.#...#. .#....#. ......... ================================================ FILE: src/template_projects/helloworld_code.template/shapes/8x8/shape8.txt ================================================ ........ .#...### #.#..#.# #.#..#.# #.#..### #.#..#.# .#...### ........ ================================================ FILE: src/template_projects/helloworld_code.template/shapes/8x8/shape9.txt ================================================ ........ .#...### #.#..#.# #.#..#.# #.#..### #.#....# .#.....# ........ ================================================ FILE: src/template_projects/helloworld_code.template/tiles/6x8/tile0.txt ================================================ 0,18,45,45,45,45,18,0 ================================================ FILE: src/template_projects/helloworld_code.template/tiles/6x8/tile1.txt ================================================ 0,18,46,42,42,42,23,0 ================================================ FILE: src/template_projects/helloworld_code.template/tiles/6x8/tile10.txt ================================================ 0,18,53,21,21,21,58,0 ================================================ FILE: src/template_projects/helloworld_code.template/tiles/6x8/tile11.txt ================================================ 0,18,54,18,18,18,63,0 ================================================ FILE: src/template_projects/helloworld_code.template/tiles/6x8/tile12.txt ================================================ 0,19,53,17,18,20,63,0 ================================================ FILE: src/template_projects/helloworld_code.template/tiles/6x8/tile13.txt ================================================ 0,23,49,17,23,17,63,0 ================================================ FILE: src/template_projects/helloworld_code.template/tiles/6x8/tile14.txt ================================================ 0,21,53,21,23,17,57,0 ================================================ FILE: src/template_projects/helloworld_code.template/tiles/6x8/tile15.txt ================================================ 0,23,52,20,23,17,63,0 ================================================ FILE: src/template_projects/helloworld_code.template/tiles/6x8/tile16.txt ================================================ 0,23,52,20,23,21,63,0 ================================================ FILE: src/template_projects/helloworld_code.template/tiles/6x8/tile17.txt ================================================ 0,23,49,17,18,18,58,0 ================================================ FILE: src/template_projects/helloworld_code.template/tiles/6x8/tile18.txt ================================================ 0,23,53,21,23,21,63,0 ================================================ FILE: src/template_projects/helloworld_code.template/tiles/6x8/tile19.txt ================================================ 0,23,53,21,23,17,57,0 ================================================ FILE: src/template_projects/helloworld_code.template/tiles/6x8/tile2.txt ================================================ 0,19,45,41,42,44,23,0 ================================================ FILE: src/template_projects/helloworld_code.template/tiles/6x8/tile20.txt ================================================ 0,26,45,13,21,37,58,0 ================================================ FILE: src/template_projects/helloworld_code.template/tiles/6x8/tile21.txt ================================================ 0,26,46,10,18,34,63,0 ================================================ FILE: src/template_projects/helloworld_code.template/tiles/6x8/tile22.txt ================================================ 0,27,45,9,18,36,63,0 ================================================ FILE: src/template_projects/helloworld_code.template/tiles/6x8/tile23.txt ================================================ 0,31,41,9,23,33,63,0 ================================================ FILE: src/template_projects/helloworld_code.template/tiles/6x8/tile24.txt ================================================ 0,29,45,13,23,33,57,0 ================================================ FILE: src/template_projects/helloworld_code.template/tiles/6x8/tile25.txt ================================================ 0,31,44,12,23,33,63,0 ================================================ FILE: src/template_projects/helloworld_code.template/tiles/6x8/tile25_ORIG.txt ================================================ 0,8, 31, 16, 30, 2,62, 4 ================================================ FILE: src/template_projects/helloworld_code.template/tiles/6x8/tile26.txt ================================================ 0,31,44,12,23,37,63,0 ================================================ FILE: src/template_projects/helloworld_code.template/tiles/6x8/tile3.txt ================================================ 0,23,41,41,47,41,23,0 ================================================ FILE: src/template_projects/helloworld_code.template/tiles/6x8/tile4.txt ================================================ 0,21,45,45,47,41,17,0 ================================================ FILE: src/template_projects/helloworld_code.template/tiles/6x8/tile5.txt ================================================ 0,23,44,44,47,41,23,0 ================================================ FILE: src/template_projects/helloworld_code.template/tiles/6x8/tile6.txt ================================================ 0,23,44,44,47,45,23,0 ================================================ FILE: src/template_projects/helloworld_code.template/tiles/6x8/tile7.txt ================================================ 0,23,41,41,42,42,18,0 ================================================ FILE: src/template_projects/helloworld_code.template/tiles/6x8/tile8.txt ================================================ 0,23,45,45,47,45,23,0 ================================================ FILE: src/template_projects/helloworld_code.template/tiles/6x8/tile9.txt ================================================ 0,23,45,45,47,41,17,0 ================================================ FILE: src/template_projects/helloworld_code.template/tiles/6x9/tile0.txt ================================================ 0,0,18,45,45,45,45,18,0 ================================================ FILE: src/template_projects/helloworld_code.template/tiles/6x9/tile1.txt ================================================ 0,0,18,46,42,42,42,23,0 ================================================ FILE: src/template_projects/helloworld_code.template/tiles/6x9/tile10.txt ================================================ 0,0,18,53,21,21,21,58,0 ================================================ FILE: src/template_projects/helloworld_code.template/tiles/6x9/tile11.txt ================================================ 0,0,18,54,18,18,18,63,0 ================================================ FILE: src/template_projects/helloworld_code.template/tiles/6x9/tile12.txt ================================================ 0,0,19,53,17,18,20,63,0 ================================================ FILE: src/template_projects/helloworld_code.template/tiles/6x9/tile13.txt ================================================ 0,0,23,49,17,23,17,63,0 ================================================ FILE: src/template_projects/helloworld_code.template/tiles/6x9/tile14.txt ================================================ 0,0,21,53,21,23,17,57,0 ================================================ FILE: src/template_projects/helloworld_code.template/tiles/6x9/tile15.txt ================================================ 0,0,23,52,20,23,17,63,0 ================================================ FILE: src/template_projects/helloworld_code.template/tiles/6x9/tile16.txt ================================================ 0,0,23,52,20,23,21,63,0 ================================================ FILE: src/template_projects/helloworld_code.template/tiles/6x9/tile17.txt ================================================ 0,0,23,49,17,18,18,58,0 ================================================ FILE: src/template_projects/helloworld_code.template/tiles/6x9/tile18.txt ================================================ 0,0,23,53,21,23,21,63,0 ================================================ FILE: src/template_projects/helloworld_code.template/tiles/6x9/tile19.txt ================================================ 0,0,23,53,21,23,17,57,0 ================================================ FILE: src/template_projects/helloworld_code.template/tiles/6x9/tile2.txt ================================================ 0,0,19,45,41,42,44,23,0 ================================================ FILE: src/template_projects/helloworld_code.template/tiles/6x9/tile20.txt ================================================ 0,0,26,45,13,21,37,58,0 ================================================ FILE: src/template_projects/helloworld_code.template/tiles/6x9/tile21.txt ================================================ 0,0,26,46,10,18,34,63,0 ================================================ FILE: src/template_projects/helloworld_code.template/tiles/6x9/tile22.txt ================================================ 0,0,27,45,9,18,36,63,0 ================================================ FILE: src/template_projects/helloworld_code.template/tiles/6x9/tile23.txt ================================================ 0,0,31,41,9,23,33,63,0 ================================================ FILE: src/template_projects/helloworld_code.template/tiles/6x9/tile24.txt ================================================ 0,0,29,45,13,23,33,57,0 ================================================ FILE: src/template_projects/helloworld_code.template/tiles/6x9/tile25 _ORIG.txt ================================================ 0,8, 31, 16, 30, 2,62, 4,0 ================================================ FILE: src/template_projects/helloworld_code.template/tiles/6x9/tile25.txt ================================================ 0,0,31,44,12,23,33,63,0 ================================================ FILE: src/template_projects/helloworld_code.template/tiles/6x9/tile26.txt ================================================ 0,0,31,44,12,23,37,63,0 ================================================ FILE: src/template_projects/helloworld_code.template/tiles/6x9/tile3.txt ================================================ 0,0,23,41,41,47,41,23,0 ================================================ FILE: src/template_projects/helloworld_code.template/tiles/6x9/tile4.txt ================================================ 0,0,21,45,45,47,41,17,0 ================================================ FILE: src/template_projects/helloworld_code.template/tiles/6x9/tile5.txt ================================================ 0,0,23,44,44,47,41,23,0 ================================================ FILE: src/template_projects/helloworld_code.template/tiles/6x9/tile6.txt ================================================ 0,0,23,44,44,47,45,23,0 ================================================ FILE: src/template_projects/helloworld_code.template/tiles/6x9/tile7.txt ================================================ 0,0,23,41,41,42,42,18,0 ================================================ FILE: src/template_projects/helloworld_code.template/tiles/6x9/tile8.txt ================================================ 0,0,23,45,45,47,45,23,0 ================================================ FILE: src/template_projects/helloworld_code.template/tiles/6x9/tile9.txt ================================================ 0,0,23,45,45,47,41,17,0 ================================================ FILE: src/template_projects/helloworld_code.template/tiles/7x8/tile0.txt ================================================ 0,34,85,85,85,85,34,0 ================================================ FILE: src/template_projects/helloworld_code.template/tiles/7x8/tile1.txt ================================================ 0,34,86,82,82,82,39,0 ================================================ FILE: src/template_projects/helloworld_code.template/tiles/7x8/tile10.txt ================================================ 0,34,101,37,37,37,114,0 ================================================ FILE: src/template_projects/helloworld_code.template/tiles/7x8/tile11.txt ================================================ 0,34,102,34,34,34,119,0 ================================================ FILE: src/template_projects/helloworld_code.template/tiles/7x8/tile12.txt ================================================ 0,35,101,33,34,36,119,0 ================================================ FILE: src/template_projects/helloworld_code.template/tiles/7x8/tile13.txt ================================================ 0,39,97,33,39,33,119,0 ================================================ FILE: src/template_projects/helloworld_code.template/tiles/7x8/tile14.txt ================================================ 0,37,101,37,39,33,113,0 ================================================ FILE: src/template_projects/helloworld_code.template/tiles/7x8/tile15.txt ================================================ 0,39,100,36,39,33,119,0 ================================================ FILE: src/template_projects/helloworld_code.template/tiles/7x8/tile16.txt ================================================ 0,39,100,36,39,37,119,0 ================================================ FILE: src/template_projects/helloworld_code.template/tiles/7x8/tile17.txt ================================================ 0,39,97,33,34,34,114,0 ================================================ FILE: src/template_projects/helloworld_code.template/tiles/7x8/tile18.txt ================================================ 0,39,101,37,39,37,119,0 ================================================ FILE: src/template_projects/helloworld_code.template/tiles/7x8/tile19.txt ================================================ 0,39,101,37,39,33,113,0 ================================================ FILE: src/template_projects/helloworld_code.template/tiles/7x8/tile2.txt ================================================ 0,35,85,81,82,84,39,0 ================================================ FILE: src/template_projects/helloworld_code.template/tiles/7x8/tile20.txt ================================================ 0,50,85,21,37,69,114,0 ================================================ FILE: src/template_projects/helloworld_code.template/tiles/7x8/tile21.txt ================================================ 0,50,86,18,34,66,119,0 ================================================ FILE: src/template_projects/helloworld_code.template/tiles/7x8/tile22.txt ================================================ 0,51,85,17,34,68,119,0 ================================================ FILE: src/template_projects/helloworld_code.template/tiles/7x8/tile23.txt ================================================ 0,55,81,17,39,65,119,0 ================================================ FILE: src/template_projects/helloworld_code.template/tiles/7x8/tile24.txt ================================================ 0,53,85,21,39,65,113,0 ================================================ FILE: src/template_projects/helloworld_code.template/tiles/7x8/tile25.txt ================================================ 0,55,84,20,39,65,119,0 ================================================ FILE: src/template_projects/helloworld_code.template/tiles/7x8/tile25_ORIG.txt ================================================ $18,$3e,$60,$3c,$06,$7c,$18,$00 ================================================ FILE: src/template_projects/helloworld_code.template/tiles/7x8/tile26.txt ================================================ 0,55,84,20,39,69,119,0 ================================================ FILE: src/template_projects/helloworld_code.template/tiles/7x8/tile3.txt ================================================ 0,39,81,81,87,81,39,0 ================================================ FILE: src/template_projects/helloworld_code.template/tiles/7x8/tile4.txt ================================================ 0,37,85,85,87,81,33,0 ================================================ FILE: src/template_projects/helloworld_code.template/tiles/7x8/tile5.txt ================================================ 0,39,84,84,87,81,39,0 ================================================ FILE: src/template_projects/helloworld_code.template/tiles/7x8/tile6.txt ================================================ 0,39,84,84,87,85,39,0 ================================================ FILE: src/template_projects/helloworld_code.template/tiles/7x8/tile7.txt ================================================ 0,39,81,81,82,82,34,0 ================================================ FILE: src/template_projects/helloworld_code.template/tiles/7x8/tile8.txt ================================================ 0,39,85,85,87,85,39,0 ================================================ FILE: src/template_projects/helloworld_code.template/tiles/7x8/tile9.txt ================================================ 0,39,85,85,87,81,33,0 ================================================ FILE: src/template_projects/helloworld_code.template/tiles/8x6/tile0.txt ================================================ 66,165,165,165,165,66 ================================================ FILE: src/template_projects/helloworld_code.template/tiles/8x6/tile1.txt ================================================ 66,166,162,162,162,71 ================================================ FILE: src/template_projects/helloworld_code.template/tiles/8x6/tile10.txt ================================================ 66,197,69,69,69,226 ================================================ FILE: src/template_projects/helloworld_code.template/tiles/8x6/tile11.txt ================================================ 66,198,66,66,66,231 ================================================ FILE: src/template_projects/helloworld_code.template/tiles/8x6/tile12.txt ================================================ 67,197,65,66,68,231 ================================================ FILE: src/template_projects/helloworld_code.template/tiles/8x6/tile13.txt ================================================ 71,193,65,71,65,231 ================================================ FILE: src/template_projects/helloworld_code.template/tiles/8x6/tile14.txt ================================================ 69,197,69,71,65,225 ================================================ FILE: src/template_projects/helloworld_code.template/tiles/8x6/tile15.txt ================================================ 71,196,68,71,65,231 ================================================ FILE: src/template_projects/helloworld_code.template/tiles/8x6/tile16.txt ================================================ 71,196,68,71,69,231 ================================================ FILE: src/template_projects/helloworld_code.template/tiles/8x6/tile17.txt ================================================ 71,193,65,66,66,226 ================================================ FILE: src/template_projects/helloworld_code.template/tiles/8x6/tile18.txt ================================================ 71,197,69,71,69,231 ================================================ FILE: src/template_projects/helloworld_code.template/tiles/8x6/tile19.txt ================================================ 71,197,69,71,65,225 ================================================ FILE: src/template_projects/helloworld_code.template/tiles/8x6/tile2.txt ================================================ 67,165,161,162,164,71 ================================================ FILE: src/template_projects/helloworld_code.template/tiles/8x6/tile20.txt ================================================ 98,165,37,69,133,226 ================================================ FILE: src/template_projects/helloworld_code.template/tiles/8x6/tile21.txt ================================================ 98,166,34,66,130,231 ================================================ FILE: src/template_projects/helloworld_code.template/tiles/8x6/tile22.txt ================================================ 99,165,33,66,132,231 ================================================ FILE: src/template_projects/helloworld_code.template/tiles/8x6/tile23.txt ================================================ 103,161,33,71,129,231 ================================================ FILE: src/template_projects/helloworld_code.template/tiles/8x6/tile24.txt ================================================ 101,165,37,71,129,225 ================================================ FILE: src/template_projects/helloworld_code.template/tiles/8x6/tile25.txt ================================================ 103,164,36,71,129,231 ================================================ FILE: src/template_projects/helloworld_code.template/tiles/8x6/tile26.txt ================================================ 103,164,36,71,133,231 ================================================ FILE: src/template_projects/helloworld_code.template/tiles/8x6/tile3.txt ================================================ 71,161,161,167,161,71 ================================================ FILE: src/template_projects/helloworld_code.template/tiles/8x6/tile4.txt ================================================ 69,165,165,167,161,65 ================================================ FILE: src/template_projects/helloworld_code.template/tiles/8x6/tile5.txt ================================================ 71,164,164,167,161,71 ================================================ FILE: src/template_projects/helloworld_code.template/tiles/8x6/tile6.txt ================================================ 71,164,164,167,165,71 ================================================ FILE: src/template_projects/helloworld_code.template/tiles/8x6/tile7.txt ================================================ 71,161,161,162,162,66 ================================================ FILE: src/template_projects/helloworld_code.template/tiles/8x6/tile8.txt ================================================ 71,165,165,167,165,71 ================================================ FILE: src/template_projects/helloworld_code.template/tiles/8x6/tile9.txt ================================================ 71,165,165,167,161,65 ================================================ FILE: src/template_projects/helloworld_code.template/tiles/8x8/tile0.txt ================================================ 0,66,165,165,165,165,66,0 ================================================ FILE: src/template_projects/helloworld_code.template/tiles/8x8/tile1.txt ================================================ 0,66,166,162,162,162,71,0 ================================================ FILE: src/template_projects/helloworld_code.template/tiles/8x8/tile10.txt ================================================ 0,66,197,69,69,69,226,0 ================================================ FILE: src/template_projects/helloworld_code.template/tiles/8x8/tile11.txt ================================================ 0,66,198,66,66,66,231,0 ================================================ FILE: src/template_projects/helloworld_code.template/tiles/8x8/tile12.txt ================================================ 0,67,197,65,66,68,231,0 ================================================ FILE: src/template_projects/helloworld_code.template/tiles/8x8/tile13.txt ================================================ 0,71,193,65,71,65,231,0 ================================================ FILE: src/template_projects/helloworld_code.template/tiles/8x8/tile14.txt ================================================ 0,69,197,69,71,65,225,0 ================================================ FILE: src/template_projects/helloworld_code.template/tiles/8x8/tile15.txt ================================================ 0,71,196,68,71,65,231,0 ================================================ FILE: src/template_projects/helloworld_code.template/tiles/8x8/tile16.txt ================================================ 0,71,196,68,71,69,231,0 ================================================ FILE: src/template_projects/helloworld_code.template/tiles/8x8/tile17.txt ================================================ 0,71,193,65,66,66,226,0 ================================================ FILE: src/template_projects/helloworld_code.template/tiles/8x8/tile18.txt ================================================ 0,71,197,69,71,69,231,0 ================================================ FILE: src/template_projects/helloworld_code.template/tiles/8x8/tile19.txt ================================================ 0,71,197,69,71,65,225,0 ================================================ FILE: src/template_projects/helloworld_code.template/tiles/8x8/tile2.txt ================================================ 0,67,165,161,162,164,71,0 ================================================ FILE: src/template_projects/helloworld_code.template/tiles/8x8/tile20.txt ================================================ 0,98,165,37,69,133,226,0 ================================================ FILE: src/template_projects/helloworld_code.template/tiles/8x8/tile21.txt ================================================ 0,98,166,34,66,130,231,0 ================================================ FILE: src/template_projects/helloworld_code.template/tiles/8x8/tile22.txt ================================================ 0,99,165,33,66,132,231,0 ================================================ FILE: src/template_projects/helloworld_code.template/tiles/8x8/tile23.txt ================================================ 0,103,161,33,71,129,231,0 ================================================ FILE: src/template_projects/helloworld_code.template/tiles/8x8/tile24.txt ================================================ 0,101,165,37,71,129,225,0 ================================================ FILE: src/template_projects/helloworld_code.template/tiles/8x8/tile25.txt ================================================ 0,103,164,36,71,129,231,0 ================================================ FILE: src/template_projects/helloworld_code.template/tiles/8x8/tile26.txt ================================================ 0,103,164,36,71,133,231,0 ================================================ FILE: src/template_projects/helloworld_code.template/tiles/8x8/tile3.txt ================================================ 0,71,161,161,167,161,71,0 ================================================ FILE: src/template_projects/helloworld_code.template/tiles/8x8/tile4.txt ================================================ 0,69,165,165,167,161,65,0 ================================================ FILE: src/template_projects/helloworld_code.template/tiles/8x8/tile5.txt ================================================ 0,71,164,164,167,161,71,0 ================================================ FILE: src/template_projects/helloworld_code.template/tiles/8x8/tile6.txt ================================================ 0,71,164,164,167,165,71,0 ================================================ FILE: src/template_projects/helloworld_code.template/tiles/8x8/tile7.txt ================================================ 0,71,161,161,162,162,66,0 ================================================ FILE: src/template_projects/helloworld_code.template/tiles/8x8/tile8.txt ================================================ 0,71,165,165,167,165,71,0 ================================================ FILE: src/template_projects/helloworld_code.template/tiles/8x8/tile9.txt ================================================ 0,71,165,165,167,161,65,0 ================================================ FILE: src/template_projects/helloworld_code.template/tiles/ASCII/char_tiles.h ================================================ #ifndef _CHAR_TILES_H #define _CHAR_TILES_H #include "cross_lib.h" #define _TILE_0 '*' #define _TILE_1 '*' #define _TILE_2 '-' #define _TILE_3 '-' // Apple #define _TILE_4 'O' // Body #define _TILE_5 'O' #define _TILE_6 'H' #define _TILE_7 '=' #if defined(_XL_NO_COLOR) #define _TILE_8 'R' #else #define _TILE_8 'O' #endif #define _TILE_9 'L' #define _TILE_10 '=' #define _TILE_11 'I' #define _TILE_12 'I' #define _TILE_13 '-' #define _TILE_14 'S' #define _TILE_15 'I' #define _TILE_16 'C' #define _TILE_17 'X' #if defined(_XL_NO_COLOR) #define _TILE_18 'S' #else #define _TILE_18 'O' #endif #define _TILE_26 'J' #endif // _CHAR_TILES_H ================================================ FILE: src/template_projects/test_code.template/main.c ================================================ /* --------------------------------------------------------------------------------------- */ // // CROSS SHOOT by Fabrizio Caruso // // Fabrizio_Caruso@hotmail.com // // This software is provided 'as-is', without any express or implied warranty. // In no event will the authors be held liable for any damages arising from // the use of this software. // Permission is granted to anyone to use this software for non-commercial applications, // subject to the following restrictions: // 1. The origin of this software must not be misrepresented; you must not // claim that you wrote the original software. If you use this software in // a product, an acknowledgment in the product documentation would be // appreciated but is not required. // 2. Altered source versions must be plainly marked as such, and must not // be misrepresented as being the original software. // 3. This notice may not be removed or altered from any source distribution. /* --------------------------------------------------------------------------------------- */ #include "cross_lib.h" #if ((YSize)+(Y_OFFSET)-1)>19 #define MAX_TILES 19 #else #define MAX_TILES ((YSize)+(Y_OFFSET)-1) #endif #define NUMBER_OF_COLORS 6 #define MAX_STRING_SIZE 10 void PRINT_CENTERED_ON_ROW(uint8_t row, char *Text) { _XL_PRINT(((uint8_t) (XSize - strlen(Text))>>1), row, Text); } #define PRINT_CENTERED(Text) \ PRINT_CENTERED_ON_ROW((YSize>>1), Text) const uint8_t tiles[] = { _TILE_0, _TILE_1, _TILE_2, _TILE_3, _TILE_4, _TILE_5, _TILE_6, _TILE_7, _TILE_8, _TILE_9, _TILE_10, _TILE_11, _TILE_12, _TILE_13, _TILE_14, _TILE_15, _TILE_16, _TILE_17, _TILE_18, _TILE_19, _TILE_20, _TILE_21, _TILE_22, _TILE_23, _TILE_24, _TILE_25, _TILE_26 }; #if !defined(_XL_NO_COLOR) static const uint8_t tile_color[NUMBER_OF_COLORS] = {_XL_WHITE, _XL_RED, _XL_CYAN, _XL_GREEN, _XL_YELLOW, _XL_BLUE}; #endif const char color_name[NUMBER_OF_COLORS][MAX_STRING_SIZE] = { "WHITE", "RED", "CYAN", "GREEN", "YELLOW", "BLUE", }; #define COL_OFFSET 4 #define ROW_OFFSET 12 int main(void) { uint8_t i; _XL_INIT_GRAPHICS(); _XL_INIT_INPUT(); _XL_INIT_SOUND(); _XL_CLEAR_SCREEN(); _XL_SET_TEXT_COLOR(_XL_WHITE); _XL_PRINT(COL_OFFSET, 1, "PRINTD"); _XL_PRINTD(COL_OFFSET ,2,5, 1234U); _XL_PRINTD(COL_OFFSET+5,2,5,56789U); _XL_PRINT(COL_OFFSET, 4, _XL_a _XL_b _XL_c _XL_d _XL_e _XL_f _XL_g _XL_h _XL_i _XL_j); _XL_PRINT(COL_OFFSET, 5, _XL_k _XL_l _XL_m _XL_n _XL_o _XL_p _XL_q _XL_r _XL_s _XL_t); _XL_PRINT(COL_OFFSET, 6, _XL_u _XL_v _XL_w _XL_x _XL_y _XL_z); _XL_PRINT(COL_OFFSET, 8, _XL_A _XL_B _XL_C _XL_D _XL_E _XL_F _XL_G _XL_H _XL_I _XL_J); _XL_PRINT(COL_OFFSET, 9, _XL_K _XL_L _XL_M _XL_N _XL_O _XL_P _XL_Q _XL_R _XL_S _XL_T); _XL_PRINT(COL_OFFSET,10, _XL_U _XL_V _XL_W _XL_X _XL_Y _XL_Z); for(i=0;i<_XL_NUMBER_OF_TILES;++i) { _XL_DRAW((i&7)*2+COL_OFFSET,(i/8)+ROW_OFFSET,tiles[i],tile_color[i%NUMBER_OF_COLORS]); } for(i=0;i>1), row, Text); } #define PRINT_CENTERED(Text) \ PRINT_CENTERED_ON_ROW((YSize>>1), Text) void print_text(uint8_t x, uint8_t y, const char *str) { uint8_t i; char ch; i=0; while((ch=str[i])) { if((ch>='a')&&(ch<='z')) { _XL_CHAR(x+i,y,small_letters[ch-'a']); } else { _XL_CHAR(x+i,y,ch); } ++i; } } int main(void) { _XL_INIT_GRAPHICS(); _XL_INIT_INPUT(); _XL_INIT_SOUND(); // MAIN END-LESS LOOP while(1) { score = 0; alive = 1; level = INITIAL_LEVEL; _XL_CLEAR_SCREEN(); _XL_SET_TEXT_COLOR(_XL_RED); PRINT_CENTERED_ON_ROW(4, "_GAME_NAME_CAPITAL"); _XL_SET_TEXT_COLOR(_XL_CYAN); print_text(XSize/2-5,6, "by author"); _XL_SET_TEXT_COLOR(_XL_WHITE); print_text(XSize/2-6,YSize-1, "Press FIRE"); _XL_WAIT_FOR_INPUT(); _XL_CLEAR_SCREEN(); alive = 1; // GAME LOOP while(alive && (level restart from level 1 return EXIT_SUCCESS; } ================================================ FILE: src/template_projects/text_game_code.template/shapes/6x8/shape0.txt ================================================ ...... .#..#. #.##.# #.##.# #.##.# #.##.# .#..#. ...... ================================================ FILE: src/template_projects/text_game_code.template/shapes/6x8/shape1.txt ================================================ ...... .#..#. #.###. #.#.#. #.#.#. #.#.#. .#.### ...... ================================================ FILE: src/template_projects/text_game_code.template/shapes/6x8/shape10.txt ================================================ ...... .#..#. ##.#.# .#.#.# .#.#.# .#.#.# ###.#. ...... ================================================ FILE: src/template_projects/text_game_code.template/shapes/6x8/shape11.txt ================================================ ...... .#..#. ##.##. .#..#. .#..#. .#..#. ###### ...... ================================================ FILE: src/template_projects/text_game_code.template/shapes/6x8/shape12.txt ================================================ ...... .#..## ##.#.# .#...# .#..#. .#.#.. ###### ...... ================================================ FILE: src/template_projects/text_game_code.template/shapes/6x8/shape13.txt ================================================ ...... .#.### ##...# .#...# .#.### .#...# ###### ...... ================================================ FILE: src/template_projects/text_game_code.template/shapes/6x8/shape14.txt ================================================ ...... .#.#.# ##.#.# .#.#.# .#.### .#...# ###..# ...... ================================================ FILE: src/template_projects/text_game_code.template/shapes/6x8/shape15.txt ================================================ ...... .#.### ##.#.. .#.#.. .#.### .#...# ###### ...... ================================================ FILE: src/template_projects/text_game_code.template/shapes/6x8/shape16.txt ================================================ ...... .#.### ##.#.. .#.#.. .#.### .#.#.# ###### ...... ================================================ FILE: src/template_projects/text_game_code.template/shapes/6x8/shape17.txt ================================================ ...... .#.### ##...# .#...# .#..#. .#..#. ###.#. ...... ================================================ FILE: src/template_projects/text_game_code.template/shapes/6x8/shape18.txt ================================================ ...... .#.### ##.#.# .#.#.# .#.### .#.#.# ###### ...... ================================================ FILE: src/template_projects/text_game_code.template/shapes/6x8/shape19.txt ================================================ ...... .#.### ##.#.# .#.#.# .#.### .#...# ###..# ...... ================================================ FILE: src/template_projects/text_game_code.template/shapes/6x8/shape2.txt ================================================ ...... .#..## #.##.# #.#..# #.#.#. #.##.. .#.### ...... ================================================ FILE: src/template_projects/text_game_code.template/shapes/6x8/shape20.txt ================================================ ...... .##.#. #.##.# ..##.# .#.#.# #..#.# ###.#. ...... ================================================ FILE: src/template_projects/text_game_code.template/shapes/6x8/shape21.txt ================================================ ...... .##.#. #.###. ..#.#. .#..#. #...#. ###### ...... ================================================ FILE: src/template_projects/text_game_code.template/shapes/6x8/shape22.txt ================================================ ...... .##.## #.##.# ..#..# .#..#. #..#.. ###### ...... ================================================ FILE: src/template_projects/text_game_code.template/shapes/6x8/shape23.txt ================================================ ...... .##### #.#..# ..#..# .#.### #....# ###### ...... ================================================ FILE: src/template_projects/text_game_code.template/shapes/6x8/shape24.txt ================================================ ...... .###.# #.##.# ..##.# .#.### #....# ###..# ...... ================================================ FILE: src/template_projects/text_game_code.template/shapes/6x8/shape25.txt ================================================ ...... .##### #.##.. ..##.. .#.### #....# ###### ...... ================================================ FILE: src/template_projects/text_game_code.template/shapes/6x8/shape26.txt ================================================ ...... .##### #.##.. ..##.. .#.### #..#.# ###### ...... ================================================ FILE: src/template_projects/text_game_code.template/shapes/6x8/shape3.txt ================================================ ...... .#.### #.#..# #.#..# #.#### #.#..# .#.### ...... ================================================ FILE: src/template_projects/text_game_code.template/shapes/6x8/shape4.txt ================================================ ...... .#.#.# #.##.# #.##.# #.#### #.#..# .#...# ...... ================================================ FILE: src/template_projects/text_game_code.template/shapes/6x8/shape5.txt ================================================ ...... .#.### #.##.. #.##.. #.#### #.#..# .#.### ...... ================================================ FILE: src/template_projects/text_game_code.template/shapes/6x8/shape6.txt ================================================ ...... .#.### #.##.. #.##.. #.#### #.##.# .#.### ...... ================================================ FILE: src/template_projects/text_game_code.template/shapes/6x8/shape7.txt ================================================ ...... .#.### #.#..# #.#..# #.#.#. #.#.#. .#..#. ....... ================================================ FILE: src/template_projects/text_game_code.template/shapes/6x8/shape8.txt ================================================ ...... .#.### #.##.# #.##.# #.#### #.##.# .#.### ...... ================================================ FILE: src/template_projects/text_game_code.template/shapes/6x8/shape9.txt ================================================ ...... .#.### #.##.# #.##.# #.#### #.#..# .#...# ...... ================================================ FILE: src/template_projects/text_game_code.template/shapes/6x9/shape0.txt ================================================ ...... ...... .#..#. #.##.# #.##.# #.##.# #.##.# .#..#. ...... ================================================ FILE: src/template_projects/text_game_code.template/shapes/6x9/shape1.txt ================================================ ...... ...... .#..#. #.###. #.#.#. #.#.#. #.#.#. .#.### ...... ================================================ FILE: src/template_projects/text_game_code.template/shapes/6x9/shape10.txt ================================================ ...... ...... .#..#. ##.#.# .#.#.# .#.#.# .#.#.# ###.#. ...... ================================================ FILE: src/template_projects/text_game_code.template/shapes/6x9/shape11.txt ================================================ ...... ...... .#..#. ##.##. .#..#. .#..#. .#..#. ###### ...... ================================================ FILE: src/template_projects/text_game_code.template/shapes/6x9/shape12.txt ================================================ ...... ...... .#..## ##.#.# .#...# .#..#. .#.#.. ###### ...... ================================================ FILE: src/template_projects/text_game_code.template/shapes/6x9/shape13.txt ================================================ ...... ...... .#.### ##...# .#...# .#.### .#...# ###### ...... ================================================ FILE: src/template_projects/text_game_code.template/shapes/6x9/shape14.txt ================================================ ...... ...... .#.#.# ##.#.# .#.#.# .#.### .#...# ###..# ...... ================================================ FILE: src/template_projects/text_game_code.template/shapes/6x9/shape15.txt ================================================ ...... ...... .#.### ##.#.. .#.#.. .#.### .#...# ###### ...... ================================================ FILE: src/template_projects/text_game_code.template/shapes/6x9/shape16.txt ================================================ ...... ...... .#.### ##.#.. .#.#.. .#.### .#.#.# ###### ...... ================================================ FILE: src/template_projects/text_game_code.template/shapes/6x9/shape17.txt ================================================ ...... ...... .#.### ##...# .#...# .#..#. .#..#. ###.#. ...... ================================================ FILE: src/template_projects/text_game_code.template/shapes/6x9/shape18.txt ================================================ ...... ...... .#.### ##.#.# .#.#.# .#.### .#.#.# ###### ...... ================================================ FILE: src/template_projects/text_game_code.template/shapes/6x9/shape19.txt ================================================ ...... ...... .#.### ##.#.# .#.#.# .#.### .#...# ###..# ...... ================================================ FILE: src/template_projects/text_game_code.template/shapes/6x9/shape2.txt ================================================ ...... ...... .#..## #.##.# #.#..# #.#.#. #.##.. .#.### ...... ================================================ FILE: src/template_projects/text_game_code.template/shapes/6x9/shape20.txt ================================================ ...... ...... .##.#. #.##.# ..##.# .#.#.# #..#.# ###.#. ...... ================================================ FILE: src/template_projects/text_game_code.template/shapes/6x9/shape21.txt ================================================ ...... ...... .##.#. #.###. ..#.#. .#..#. #...#. ###### ...... ================================================ FILE: src/template_projects/text_game_code.template/shapes/6x9/shape22.txt ================================================ ...... ...... .##.## #.##.# ..#..# .#..#. #..#.. ###### ...... ================================================ FILE: src/template_projects/text_game_code.template/shapes/6x9/shape23.txt ================================================ ...... ...... .##### #.#..# ..#..# .#.### #....# ###### ...... ================================================ FILE: src/template_projects/text_game_code.template/shapes/6x9/shape24.txt ================================================ ...... ...... .###.# #.##.# ..##.# .#.### #....# ###..# ...... ================================================ FILE: src/template_projects/text_game_code.template/shapes/6x9/shape25.txt ================================================ ...... ...... .##### #.##.. ..##.. .#.### #....# ###### ...... ================================================ FILE: src/template_projects/text_game_code.template/shapes/6x9/shape26.txt ================================================ ...... ...... .##### #.##.. ..##.. .#.### #..#.# ###### ...... ================================================ FILE: src/template_projects/text_game_code.template/shapes/6x9/shape3.txt ================================================ ...... ...... .#.### #.#..# #.#..# #.#### #.#..# .#.### ...... ================================================ FILE: src/template_projects/text_game_code.template/shapes/6x9/shape4.txt ================================================ ...... ...... .#.#.# #.##.# #.##.# #.#### #.#..# .#...# ...... ================================================ FILE: src/template_projects/text_game_code.template/shapes/6x9/shape5.txt ================================================ ...... ...... .#.### #.##.. #.##.. #.#### #.#..# .#.### ...... ================================================ FILE: src/template_projects/text_game_code.template/shapes/6x9/shape6.txt ================================================ ...... ...... .#.### #.##.. #.##.. #.#### #.##.# .#.### ...... ================================================ FILE: src/template_projects/text_game_code.template/shapes/6x9/shape7.txt ================================================ ...... ...... .#.### #.#..# #.#..# #.#.#. #.#.#. .#..#. ....... ================================================ FILE: src/template_projects/text_game_code.template/shapes/6x9/shape8.txt ================================================ ...... ...... .#.### #.##.# #.##.# #.#### #.##.# .#.### ...... ================================================ FILE: src/template_projects/text_game_code.template/shapes/6x9/shape9.txt ================================================ ...... ...... .#.### #.##.# #.##.# #.#### #.#..# .#...# ...... ================================================ FILE: src/template_projects/text_game_code.template/shapes/7x8/shape0.txt ================================================ ....... .#...#. #.#.#.# #.#.#.# #.#.#.# #.#.#.# .#...#. ....... ================================================ FILE: src/template_projects/text_game_code.template/shapes/7x8/shape1.txt ================================================ ....... .#...#. #.#.##. #.#..#. #.#..#. #.#..#. .#..### ....... ================================================ FILE: src/template_projects/text_game_code.template/shapes/7x8/shape10.txt ================================================ ....... .#...#. ##..#.# .#..#.# .#..#.# .#..#.# ###..#. ....... ================================================ FILE: src/template_projects/text_game_code.template/shapes/7x8/shape11.txt ================================================ ....... .#...#. ##..##. .#...#. .#...#. .#...#. ###.### ....... ================================================ FILE: src/template_projects/text_game_code.template/shapes/7x8/shape12.txt ================================================ ....... .#...## ##..#.# .#....# .#...#. .#..#.. ###.### ....... ================================================ FILE: src/template_projects/text_game_code.template/shapes/7x8/shape13.txt ================================================ ....... .#..### ##....# .#....# .#..### .#....# ###.### ....... ================================================ FILE: src/template_projects/text_game_code.template/shapes/7x8/shape14.txt ================================================ ....... .#..#.# ##..#.# .#..#.# .#..### .#....# ###...# ....... ================================================ FILE: src/template_projects/text_game_code.template/shapes/7x8/shape15.txt ================================================ ....... .#..### ##..#.. .#..#.. .#..### .#....# ###.### ....... ================================================ FILE: src/template_projects/text_game_code.template/shapes/7x8/shape16.txt ================================================ ....... .#..### ##..#.. .#..#.. .#..### .#..#.# ###.### ....... ================================================ FILE: src/template_projects/text_game_code.template/shapes/7x8/shape17.txt ================================================ ....... .#..### ##....# .#....# .#...#. .#...#. ###..#. ....... ================================================ FILE: src/template_projects/text_game_code.template/shapes/7x8/shape18.txt ================================================ ....... .#..### ##..#.# .#..#.# .#..### .#..#.# ###.### ....... ================================================ FILE: src/template_projects/text_game_code.template/shapes/7x8/shape19.txt ================================================ ....... .#..### ##..#.# .#..#.# .#..### .#....# ###...# ....... ================================================ FILE: src/template_projects/text_game_code.template/shapes/7x8/shape2.txt ================================================ ....... .#...## #.#.#.# #.#...# #.#..#. #.#.#.. .#..### ....... ================================================ FILE: src/template_projects/text_game_code.template/shapes/7x8/shape20.txt ================================================ ....... .##..#. #.#.#.# ..#.#.# .#..#.# #...#.# ###..#. ....... ================================================ FILE: src/template_projects/text_game_code.template/shapes/7x8/shape21.txt ================================================ ....... .##..#. #.#.##. ..#..#. .#...#. #....#. ###.### ....... ================================================ FILE: src/template_projects/text_game_code.template/shapes/7x8/shape22.txt ================================================ ....... .##..## #.#.#.# ..#...# .#...#. #...#.. ###.### ....... ================================================ FILE: src/template_projects/text_game_code.template/shapes/7x8/shape23.txt ================================================ ....... .##.### #.#...# ..#...# .#..### #.....# ###.### ....... ================================================ FILE: src/template_projects/text_game_code.template/shapes/7x8/shape24.txt ================================================ ....... .##.#.# #.#.#.# ..#.#.# .#..### #.....# ###...# ....... ================================================ FILE: src/template_projects/text_game_code.template/shapes/7x8/shape25.txt ================================================ ....... .##.### #.#.#.. ..#.#.. .#..### #.....# ###.### ....... ================================================ FILE: src/template_projects/text_game_code.template/shapes/7x8/shape26.txt ================================================ ....... .##.### #.#.#.. ..#.#.. .#..### #...#.# ###.### ....... ================================================ FILE: src/template_projects/text_game_code.template/shapes/7x8/shape3.txt ================================================ ....... .#..### #.#...# #.#...# #.#.### #.#...# .#..### ....... ================================================ FILE: src/template_projects/text_game_code.template/shapes/7x8/shape4.txt ================================================ ....... .#..#.# #.#.#.# #.#.#.# #.#.### #.#...# .#....# ....... ================================================ FILE: src/template_projects/text_game_code.template/shapes/7x8/shape5.txt ================================================ ....... .#..### #.#.#.. #.#.#.. #.#.### #.#...# .#..### ....... ================================================ FILE: src/template_projects/text_game_code.template/shapes/7x8/shape6.txt ================================================ ....... .#..### #.#.#.. #.#.#.. #.#.### #.#.#.# .#..### ....... ================================================ FILE: src/template_projects/text_game_code.template/shapes/7x8/shape7.txt ================================================ ....... .#..### #.#...# #.#...# #.#..#. #.#..#. .#...#. ........ ================================================ FILE: src/template_projects/text_game_code.template/shapes/7x8/shape8.txt ================================================ ....... .#..### #.#.#.# #.#.#.# #.#.### #.#.#.# .#..### ....... ================================================ FILE: src/template_projects/text_game_code.template/shapes/7x8/shape9.txt ================================================ ....... .#..### #.#.#.# #.#.#.# #.#.### #.#...# .#....# ....... ================================================ FILE: src/template_projects/text_game_code.template/shapes/8x6/shape0.txt ================================================ .#....#. #.#..#.# #.#..#.# #.#..#.# #.#..#.# .#....#. ================================================ FILE: src/template_projects/text_game_code.template/shapes/8x6/shape1.txt ================================================ .#....#. #.#..##. #.#...#. #.#...#. #.#...#. .#...### ================================================ FILE: src/template_projects/text_game_code.template/shapes/8x6/shape10.txt ================================================ .#....#. ##...#.# .#...#.# .#...#.# .#...#.# ###...#. ================================================ FILE: src/template_projects/text_game_code.template/shapes/8x6/shape11.txt ================================================ .#....#. ##...##. .#....#. .#....#. .#....#. ###..### ================================================ FILE: src/template_projects/text_game_code.template/shapes/8x6/shape12.txt ================================================ .#....## ##...#.# .#.....# .#....#. .#...#.. ###..### ================================================ FILE: src/template_projects/text_game_code.template/shapes/8x6/shape13.txt ================================================ .#...### ##.....# .#.....# .#...### .#.....# ###..### ================================================ FILE: src/template_projects/text_game_code.template/shapes/8x6/shape14.txt ================================================ .#...#.# ##...#.# .#...#.# .#...### .#.....# ###....# ================================================ FILE: src/template_projects/text_game_code.template/shapes/8x6/shape15.txt ================================================ .#...### ##...#.. .#...#.. .#...### .#.....# ###..### ================================================ FILE: src/template_projects/text_game_code.template/shapes/8x6/shape16.txt ================================================ .#...### ##...#.. .#...#.. .#...### .#...#.# ###..### ================================================ FILE: src/template_projects/text_game_code.template/shapes/8x6/shape17.txt ================================================ .#...### ##.....# .#.....# .#....#. .#....#. ###...#. ================================================ FILE: src/template_projects/text_game_code.template/shapes/8x6/shape18.txt ================================================ .#...### ##...#.# .#...#.# .#...### .#...#.# ###..### ================================================ FILE: src/template_projects/text_game_code.template/shapes/8x6/shape19.txt ================================================ .#...### ##...#.# .#...#.# .#...### .#.....# ###....# ================================================ FILE: src/template_projects/text_game_code.template/shapes/8x6/shape2.txt ================================================ .#....## #.#..#.# #.#....# #.#...#. #.#..#.. .#...### ================================================ FILE: src/template_projects/text_game_code.template/shapes/8x6/shape20.txt ================================================ .##...#. #.#..#.# ..#..#.# .#...#.# #....#.# ###...#. ================================================ FILE: src/template_projects/text_game_code.template/shapes/8x6/shape21.txt ================================================ .##...#. #.#..##. ..#...#. .#....#. #.....#. ###..### ================================================ FILE: src/template_projects/text_game_code.template/shapes/8x6/shape22.txt ================================================ .##...## #.#..#.# ..#....# .#....#. #....#.. ###..### ================================================ FILE: src/template_projects/text_game_code.template/shapes/8x6/shape23.txt ================================================ .##..### #.#....# ..#....# .#...### #......# ###..### ================================================ FILE: src/template_projects/text_game_code.template/shapes/8x6/shape24.txt ================================================ .##..#.# #.#..#.# ..#..#.# .#...### #......# ###....# ================================================ FILE: src/template_projects/text_game_code.template/shapes/8x6/shape25.txt ================================================ .##..### #.#..#.. ..#..#.. .#...### #......# ###..### ================================================ FILE: src/template_projects/text_game_code.template/shapes/8x6/shape26.txt ================================================ .##..### #.#..#.. ..#..#.. .#...### #....#.# ###..### ================================================ FILE: src/template_projects/text_game_code.template/shapes/8x6/shape3.txt ================================================ .#...### #.#....# #.#....# #.#..### #.#....# .#...### ================================================ FILE: src/template_projects/text_game_code.template/shapes/8x6/shape4.txt ================================================ .#...#.# #.#..#.# #.#..#.# #.#..### #.#....# .#.....# ================================================ FILE: src/template_projects/text_game_code.template/shapes/8x6/shape5.txt ================================================ .#...### #.#..#.. #.#..#.. #.#..### #.#....# .#...### ================================================ FILE: src/template_projects/text_game_code.template/shapes/8x6/shape6.txt ================================================ .#...### #.#..#.. #.#..#.. #.#..### #.#..#.# .#...### ================================================ FILE: src/template_projects/text_game_code.template/shapes/8x6/shape7.txt ================================================ .#...### #.#....# #.#....# #.#...#. #.#...#. .#....#. ================================================ FILE: src/template_projects/text_game_code.template/shapes/8x6/shape8.txt ================================================ .#...### #.#..#.# #.#..#.# #.#..### #.#..#.# .#...### ================================================ FILE: src/template_projects/text_game_code.template/shapes/8x6/shape9.txt ================================================ .#...### #.#..#.# #.#..#.# #.#..### #.#....# .#.....# ================================================ FILE: src/template_projects/text_game_code.template/shapes/8x8/shape0.txt ================================================ ........ .#....#. #.#..#.# #.#..#.# #.#..#.# #.#..#.# .#....#. ........ ================================================ FILE: src/template_projects/text_game_code.template/shapes/8x8/shape1.txt ================================================ ........ .#....#. #.#..##. #.#...#. #.#...#. #.#...#. .#...### ........ ================================================ FILE: src/template_projects/text_game_code.template/shapes/8x8/shape10.txt ================================================ ........ .#....#. ##...#.# .#...#.# .#...#.# .#...#.# ###...#. ........ ================================================ FILE: src/template_projects/text_game_code.template/shapes/8x8/shape11.txt ================================================ ........ .#....#. ##...##. .#....#. .#....#. .#....#. ###..### ........ ================================================ FILE: src/template_projects/text_game_code.template/shapes/8x8/shape12.txt ================================================ ........ .#....## ##...#.# .#.....# .#....#. .#...#.. ###..### ........ ================================================ FILE: src/template_projects/text_game_code.template/shapes/8x8/shape13.txt ================================================ ........ .#...### ##.....# .#.....# .#...### .#.....# ###..### ........ ================================================ FILE: src/template_projects/text_game_code.template/shapes/8x8/shape14.txt ================================================ ........ .#...#.# ##...#.# .#...#.# .#...### .#.....# ###....# ........ ================================================ FILE: src/template_projects/text_game_code.template/shapes/8x8/shape15.txt ================================================ ........ .#...### ##...#.. .#...#.. .#...### .#.....# ###..### ........ ================================================ FILE: src/template_projects/text_game_code.template/shapes/8x8/shape16.txt ================================================ ........ .#...### ##...#.. .#...#.. .#...### .#...#.# ###..### ........ ================================================ FILE: src/template_projects/text_game_code.template/shapes/8x8/shape17.txt ================================================ ........ .#...### ##.....# .#.....# .#....#. .#....#. ###...#. ........ ================================================ FILE: src/template_projects/text_game_code.template/shapes/8x8/shape18.txt ================================================ ........ .#...### ##...#.# .#...#.# .#...### .#...#.# ###..### ........ ================================================ FILE: src/template_projects/text_game_code.template/shapes/8x8/shape19.txt ================================================ ........ .#...### ##...#.# .#...#.# .#...### .#.....# ###....# ........ ================================================ FILE: src/template_projects/text_game_code.template/shapes/8x8/shape2.txt ================================================ ........ .#....## #.#..#.# #.#....# #.#...#. #.#..#.. .#...### ........ ================================================ FILE: src/template_projects/text_game_code.template/shapes/8x8/shape20.txt ================================================ ........ .##...#. #.#..#.# ..#..#.# .#...#.# #....#.# ###...#. ........ ================================================ FILE: src/template_projects/text_game_code.template/shapes/8x8/shape21.txt ================================================ ........ .##...#. #.#..##. ..#...#. .#....#. #.....#. ###..### ........ ================================================ FILE: src/template_projects/text_game_code.template/shapes/8x8/shape22.txt ================================================ ........ .##...## #.#..#.# ..#....# .#....#. #....#.. ###..### ........ ================================================ FILE: src/template_projects/text_game_code.template/shapes/8x8/shape23.txt ================================================ ........ .##..### #.#....# ..#....# .#...### #......# ###..### ........ ================================================ FILE: src/template_projects/text_game_code.template/shapes/8x8/shape24.txt ================================================ ........ .##..#.# #.#..#.# ..#..#.# .#...### #......# ###....# ........ ================================================ FILE: src/template_projects/text_game_code.template/shapes/8x8/shape25.txt ================================================ ........ .##..### #.#..#.. ..#..#.. .#...### #......# ###..### ........ ================================================ FILE: src/template_projects/text_game_code.template/shapes/8x8/shape26.txt ================================================ ........ .##..### #.#..#.. ..#..#.. .#...### #....#.# ###..### ........ ================================================ FILE: src/template_projects/text_game_code.template/shapes/8x8/shape3.txt ================================================ ........ .#...### #.#....# #.#....# #.#..### #.#....# .#...### ........ ================================================ FILE: src/template_projects/text_game_code.template/shapes/8x8/shape4.txt ================================================ ........ .#...#.# #.#..#.# #.#..#.# #.#..### #.#....# .#.....# ........ ================================================ FILE: src/template_projects/text_game_code.template/shapes/8x8/shape5.txt ================================================ ........ .#...### #.#..#.. #.#..#.. #.#..### #.#....# .#...### ........ ================================================ FILE: src/template_projects/text_game_code.template/shapes/8x8/shape6.txt ================================================ ........ .#...### #.#..#.. #.#..#.. #.#..### #.#..#.# .#...### ........ ================================================ FILE: src/template_projects/text_game_code.template/shapes/8x8/shape7.txt ================================================ ........ .#...### #.#....# #.#....# #.#...#. #.#...#. .#....#. ......... ================================================ FILE: src/template_projects/text_game_code.template/shapes/8x8/shape8.txt ================================================ ........ .#...### #.#..#.# #.#..#.# #.#..### #.#..#.# .#...### ........ ================================================ FILE: src/template_projects/text_game_code.template/shapes/8x8/shape9.txt ================================================ ........ .#...### #.#..#.# #.#..#.# #.#..### #.#....# .#.....# ........ ================================================ FILE: src/template_projects/text_game_code.template/tiles/6x8/tile0.txt ================================================ 0,18,45,45,45,45,18,0 ================================================ FILE: src/template_projects/text_game_code.template/tiles/6x8/tile1.txt ================================================ 0,18,46,42,42,42,23,0 ================================================ FILE: src/template_projects/text_game_code.template/tiles/6x8/tile10.txt ================================================ 0,18,53,21,21,21,58,0 ================================================ FILE: src/template_projects/text_game_code.template/tiles/6x8/tile11.txt ================================================ 0,18,54,18,18,18,63,0 ================================================ FILE: src/template_projects/text_game_code.template/tiles/6x8/tile12.txt ================================================ 0,19,53,17,18,20,63,0 ================================================ FILE: src/template_projects/text_game_code.template/tiles/6x8/tile13.txt ================================================ 0,23,49,17,23,17,63,0 ================================================ FILE: src/template_projects/text_game_code.template/tiles/6x8/tile14.txt ================================================ 0,21,53,21,23,17,57,0 ================================================ FILE: src/template_projects/text_game_code.template/tiles/6x8/tile15.txt ================================================ 0,23,52,20,23,17,63,0 ================================================ FILE: src/template_projects/text_game_code.template/tiles/6x8/tile16.txt ================================================ 0,23,52,20,23,21,63,0 ================================================ FILE: src/template_projects/text_game_code.template/tiles/6x8/tile17.txt ================================================ 0,23,49,17,18,18,58,0 ================================================ FILE: src/template_projects/text_game_code.template/tiles/6x8/tile18.txt ================================================ 0,23,53,21,23,21,63,0 ================================================ FILE: src/template_projects/text_game_code.template/tiles/6x8/tile19.txt ================================================ 0,23,53,21,23,17,57,0 ================================================ FILE: src/template_projects/text_game_code.template/tiles/6x8/tile2.txt ================================================ 0,19,45,41,42,44,23,0 ================================================ FILE: src/template_projects/text_game_code.template/tiles/6x8/tile20.txt ================================================ 0,26,45,13,21,37,58,0 ================================================ FILE: src/template_projects/text_game_code.template/tiles/6x8/tile21.txt ================================================ 0,26,46,10,18,34,63,0 ================================================ FILE: src/template_projects/text_game_code.template/tiles/6x8/tile22.txt ================================================ 0,27,45,9,18,36,63,0 ================================================ FILE: src/template_projects/text_game_code.template/tiles/6x8/tile23.txt ================================================ 0,31,41,9,23,33,63,0 ================================================ FILE: src/template_projects/text_game_code.template/tiles/6x8/tile24.txt ================================================ 0,29,45,13,23,33,57,0 ================================================ FILE: src/template_projects/text_game_code.template/tiles/6x8/tile25.txt ================================================ 0,31,44,12,23,33,63,0 ================================================ FILE: src/template_projects/text_game_code.template/tiles/6x8/tile26.txt ================================================ 0,31,44,12,23,37,63,0 ================================================ FILE: src/template_projects/text_game_code.template/tiles/6x8/tile3.txt ================================================ 0,23,41,41,47,41,23,0 ================================================ FILE: src/template_projects/text_game_code.template/tiles/6x8/tile4.txt ================================================ 0,21,45,45,47,41,17,0 ================================================ FILE: src/template_projects/text_game_code.template/tiles/6x8/tile5.txt ================================================ 0,23,44,44,47,41,23,0 ================================================ FILE: src/template_projects/text_game_code.template/tiles/6x8/tile6.txt ================================================ 0,23,44,44,47,45,23,0 ================================================ FILE: src/template_projects/text_game_code.template/tiles/6x8/tile7.txt ================================================ 0,23,41,41,42,42,18,0 ================================================ FILE: src/template_projects/text_game_code.template/tiles/6x8/tile8.txt ================================================ 0,23,45,45,47,45,23,0 ================================================ FILE: src/template_projects/text_game_code.template/tiles/6x8/tile9.txt ================================================ 0,23,45,45,47,41,17,0 ================================================ FILE: src/template_projects/text_game_code.template/tiles/6x9/tile0.txt ================================================ 0,0,18,45,45,45,45,18,0 ================================================ FILE: src/template_projects/text_game_code.template/tiles/6x9/tile1.txt ================================================ 0,0,18,46,42,42,42,23,0 ================================================ FILE: src/template_projects/text_game_code.template/tiles/6x9/tile10.txt ================================================ 0,0,18,53,21,21,21,58,0 ================================================ FILE: src/template_projects/text_game_code.template/tiles/6x9/tile11.txt ================================================ 0,0,18,54,18,18,18,63,0 ================================================ FILE: src/template_projects/text_game_code.template/tiles/6x9/tile12.txt ================================================ 0,0,19,53,17,18,20,63,0 ================================================ FILE: src/template_projects/text_game_code.template/tiles/6x9/tile13.txt ================================================ 0,0,23,49,17,23,17,63,0 ================================================ FILE: src/template_projects/text_game_code.template/tiles/6x9/tile14.txt ================================================ 0,0,21,53,21,23,17,57,0 ================================================ FILE: src/template_projects/text_game_code.template/tiles/6x9/tile15.txt ================================================ 0,0,23,52,20,23,17,63,0 ================================================ FILE: src/template_projects/text_game_code.template/tiles/6x9/tile16.txt ================================================ 0,0,23,52,20,23,21,63,0 ================================================ FILE: src/template_projects/text_game_code.template/tiles/6x9/tile17.txt ================================================ 0,0,23,49,17,18,18,58,0 ================================================ FILE: src/template_projects/text_game_code.template/tiles/6x9/tile18.txt ================================================ 0,0,23,53,21,23,21,63,0 ================================================ FILE: src/template_projects/text_game_code.template/tiles/6x9/tile19.txt ================================================ 0,0,23,53,21,23,17,57,0 ================================================ FILE: src/template_projects/text_game_code.template/tiles/6x9/tile2.txt ================================================ 0,0,19,45,41,42,44,23,0 ================================================ FILE: src/template_projects/text_game_code.template/tiles/6x9/tile20.txt ================================================ 0,0,26,45,13,21,37,58,0 ================================================ FILE: src/template_projects/text_game_code.template/tiles/6x9/tile21.txt ================================================ 0,0,26,46,10,18,34,63,0 ================================================ FILE: src/template_projects/text_game_code.template/tiles/6x9/tile22.txt ================================================ 0,0,27,45,9,18,36,63,0 ================================================ FILE: src/template_projects/text_game_code.template/tiles/6x9/tile23.txt ================================================ 0,0,31,41,9,23,33,63,0 ================================================ FILE: src/template_projects/text_game_code.template/tiles/6x9/tile24.txt ================================================ 0,0,29,45,13,23,33,57,0 ================================================ FILE: src/template_projects/text_game_code.template/tiles/6x9/tile25.txt ================================================ 0,0,31,44,12,23,33,63,0 ================================================ FILE: src/template_projects/text_game_code.template/tiles/6x9/tile26.txt ================================================ 0,0,31,44,12,23,37,63,0 ================================================ FILE: src/template_projects/text_game_code.template/tiles/6x9/tile3.txt ================================================ 0,0,23,41,41,47,41,23,0 ================================================ FILE: src/template_projects/text_game_code.template/tiles/6x9/tile4.txt ================================================ 0,0,21,45,45,47,41,17,0 ================================================ FILE: src/template_projects/text_game_code.template/tiles/6x9/tile5.txt ================================================ 0,0,23,44,44,47,41,23,0 ================================================ FILE: src/template_projects/text_game_code.template/tiles/6x9/tile6.txt ================================================ 0,0,23,44,44,47,45,23,0 ================================================ FILE: src/template_projects/text_game_code.template/tiles/6x9/tile7.txt ================================================ 0,0,23,41,41,42,42,18,0 ================================================ FILE: src/template_projects/text_game_code.template/tiles/6x9/tile8.txt ================================================ 0,0,23,45,45,47,45,23,0 ================================================ FILE: src/template_projects/text_game_code.template/tiles/6x9/tile9.txt ================================================ 0,0,23,45,45,47,41,17,0 ================================================ FILE: src/template_projects/text_game_code.template/tiles/7x8/tile0.txt ================================================ 0,34,85,85,85,85,34,0 ================================================ FILE: src/template_projects/text_game_code.template/tiles/7x8/tile1.txt ================================================ 0,34,86,82,82,82,39,0 ================================================ FILE: src/template_projects/text_game_code.template/tiles/7x8/tile10.txt ================================================ 0,34,101,37,37,37,114,0 ================================================ FILE: src/template_projects/text_game_code.template/tiles/7x8/tile11.txt ================================================ 0,34,102,34,34,34,119,0 ================================================ FILE: src/template_projects/text_game_code.template/tiles/7x8/tile12.txt ================================================ 0,35,101,33,34,36,119,0 ================================================ FILE: src/template_projects/text_game_code.template/tiles/7x8/tile13.txt ================================================ 0,39,97,33,39,33,119,0 ================================================ FILE: src/template_projects/text_game_code.template/tiles/7x8/tile14.txt ================================================ 0,37,101,37,39,33,113,0 ================================================ FILE: src/template_projects/text_game_code.template/tiles/7x8/tile15.txt ================================================ 0,39,100,36,39,33,119,0 ================================================ FILE: src/template_projects/text_game_code.template/tiles/7x8/tile16.txt ================================================ 0,39,100,36,39,37,119,0 ================================================ FILE: src/template_projects/text_game_code.template/tiles/7x8/tile17.txt ================================================ 0,39,97,33,34,34,114,0 ================================================ FILE: src/template_projects/text_game_code.template/tiles/7x8/tile18.txt ================================================ 0,39,101,37,39,37,119,0 ================================================ FILE: src/template_projects/text_game_code.template/tiles/7x8/tile19.txt ================================================ 0,39,101,37,39,33,113,0 ================================================ FILE: src/template_projects/text_game_code.template/tiles/7x8/tile2.txt ================================================ 0,35,85,81,82,84,39,0 ================================================ FILE: src/template_projects/text_game_code.template/tiles/7x8/tile20.txt ================================================ 0,50,85,21,37,69,114,0 ================================================ FILE: src/template_projects/text_game_code.template/tiles/7x8/tile21.txt ================================================ 0,50,86,18,34,66,119,0 ================================================ FILE: src/template_projects/text_game_code.template/tiles/7x8/tile22.txt ================================================ 0,51,85,17,34,68,119,0 ================================================ FILE: src/template_projects/text_game_code.template/tiles/7x8/tile23.txt ================================================ 0,55,81,17,39,65,119,0 ================================================ FILE: src/template_projects/text_game_code.template/tiles/7x8/tile24.txt ================================================ 0,53,85,21,39,65,113,0 ================================================ FILE: src/template_projects/text_game_code.template/tiles/7x8/tile25.txt ================================================ 0,55,84,20,39,65,119,0 ================================================ FILE: src/template_projects/text_game_code.template/tiles/7x8/tile26.txt ================================================ 0,55,84,20,39,69,119,0 ================================================ FILE: src/template_projects/text_game_code.template/tiles/7x8/tile3.txt ================================================ 0,39,81,81,87,81,39,0 ================================================ FILE: src/template_projects/text_game_code.template/tiles/7x8/tile4.txt ================================================ 0,37,85,85,87,81,33,0 ================================================ FILE: src/template_projects/text_game_code.template/tiles/7x8/tile5.txt ================================================ 0,39,84,84,87,81,39,0 ================================================ FILE: src/template_projects/text_game_code.template/tiles/7x8/tile6.txt ================================================ 0,39,84,84,87,85,39,0 ================================================ FILE: src/template_projects/text_game_code.template/tiles/7x8/tile7.txt ================================================ 0,39,81,81,82,82,34,0 ================================================ FILE: src/template_projects/text_game_code.template/tiles/7x8/tile8.txt ================================================ 0,39,85,85,87,85,39,0 ================================================ FILE: src/template_projects/text_game_code.template/tiles/7x8/tile9.txt ================================================ 0,39,85,85,87,81,33,0 ================================================ FILE: src/template_projects/text_game_code.template/tiles/8x6/tile0.txt ================================================ 66,165,165,165,165,66 ================================================ FILE: src/template_projects/text_game_code.template/tiles/8x6/tile1.txt ================================================ 66,166,162,162,162,71 ================================================ FILE: src/template_projects/text_game_code.template/tiles/8x6/tile10.txt ================================================ 66,197,69,69,69,226 ================================================ FILE: src/template_projects/text_game_code.template/tiles/8x6/tile11.txt ================================================ 66,198,66,66,66,231 ================================================ FILE: src/template_projects/text_game_code.template/tiles/8x6/tile12.txt ================================================ 67,197,65,66,68,231 ================================================ FILE: src/template_projects/text_game_code.template/tiles/8x6/tile13.txt ================================================ 71,193,65,71,65,231 ================================================ FILE: src/template_projects/text_game_code.template/tiles/8x6/tile14.txt ================================================ 69,197,69,71,65,225 ================================================ FILE: src/template_projects/text_game_code.template/tiles/8x6/tile15.txt ================================================ 71,196,68,71,65,231 ================================================ FILE: src/template_projects/text_game_code.template/tiles/8x6/tile16.txt ================================================ 71,196,68,71,69,231 ================================================ FILE: src/template_projects/text_game_code.template/tiles/8x6/tile17.txt ================================================ 71,193,65,66,66,226 ================================================ FILE: src/template_projects/text_game_code.template/tiles/8x6/tile18.txt ================================================ 71,197,69,71,69,231 ================================================ FILE: src/template_projects/text_game_code.template/tiles/8x6/tile19.txt ================================================ 71,197,69,71,65,225 ================================================ FILE: src/template_projects/text_game_code.template/tiles/8x6/tile2.txt ================================================ 67,165,161,162,164,71 ================================================ FILE: src/template_projects/text_game_code.template/tiles/8x6/tile20.txt ================================================ 98,165,37,69,133,226 ================================================ FILE: src/template_projects/text_game_code.template/tiles/8x6/tile21.txt ================================================ 98,166,34,66,130,231 ================================================ FILE: src/template_projects/text_game_code.template/tiles/8x6/tile22.txt ================================================ 99,165,33,66,132,231 ================================================ FILE: src/template_projects/text_game_code.template/tiles/8x6/tile23.txt ================================================ 103,161,33,71,129,231 ================================================ FILE: src/template_projects/text_game_code.template/tiles/8x6/tile24.txt ================================================ 101,165,37,71,129,225 ================================================ FILE: src/template_projects/text_game_code.template/tiles/8x6/tile25.txt ================================================ 103,164,36,71,129,231 ================================================ FILE: src/template_projects/text_game_code.template/tiles/8x6/tile26.txt ================================================ 103,164,36,71,133,231 ================================================ FILE: src/template_projects/text_game_code.template/tiles/8x6/tile3.txt ================================================ 71,161,161,167,161,71 ================================================ FILE: src/template_projects/text_game_code.template/tiles/8x6/tile4.txt ================================================ 69,165,165,167,161,65 ================================================ FILE: src/template_projects/text_game_code.template/tiles/8x6/tile5.txt ================================================ 71,164,164,167,161,71 ================================================ FILE: src/template_projects/text_game_code.template/tiles/8x6/tile6.txt ================================================ 71,164,164,167,165,71 ================================================ FILE: src/template_projects/text_game_code.template/tiles/8x6/tile7.txt ================================================ 71,161,161,162,162,66 ================================================ FILE: src/template_projects/text_game_code.template/tiles/8x6/tile8.txt ================================================ 71,165,165,167,165,71 ================================================ FILE: src/template_projects/text_game_code.template/tiles/8x6/tile9.txt ================================================ 71,165,165,167,161,65 ================================================ FILE: src/template_projects/text_game_code.template/tiles/8x8/tile0.txt ================================================ 0,66,165,165,165,165,66,0 ================================================ FILE: src/template_projects/text_game_code.template/tiles/8x8/tile1.txt ================================================ 0,66,166,162,162,162,71,0 ================================================ FILE: src/template_projects/text_game_code.template/tiles/8x8/tile10.txt ================================================ 0,66,197,69,69,69,226,0 ================================================ FILE: src/template_projects/text_game_code.template/tiles/8x8/tile11.txt ================================================ 0,66,198,66,66,66,231,0 ================================================ FILE: src/template_projects/text_game_code.template/tiles/8x8/tile12.txt ================================================ 0,67,197,65,66,68,231,0 ================================================ FILE: src/template_projects/text_game_code.template/tiles/8x8/tile13.txt ================================================ 0,71,193,65,71,65,231,0 ================================================ FILE: src/template_projects/text_game_code.template/tiles/8x8/tile14.txt ================================================ 0,69,197,69,71,65,225,0 ================================================ FILE: src/template_projects/text_game_code.template/tiles/8x8/tile15.txt ================================================ 0,71,196,68,71,65,231,0 ================================================ FILE: src/template_projects/text_game_code.template/tiles/8x8/tile16.txt ================================================ 0,71,196,68,71,69,231,0 ================================================ FILE: src/template_projects/text_game_code.template/tiles/8x8/tile17.txt ================================================ 0,71,193,65,66,66,226,0 ================================================ FILE: src/template_projects/text_game_code.template/tiles/8x8/tile18.txt ================================================ 0,71,197,69,71,69,231,0 ================================================ FILE: src/template_projects/text_game_code.template/tiles/8x8/tile19.txt ================================================ 0,71,197,69,71,65,225,0 ================================================ FILE: src/template_projects/text_game_code.template/tiles/8x8/tile2.txt ================================================ 0,67,165,161,162,164,71,0 ================================================ FILE: src/template_projects/text_game_code.template/tiles/8x8/tile20.txt ================================================ 0,98,165,37,69,133,226,0 ================================================ FILE: src/template_projects/text_game_code.template/tiles/8x8/tile21.txt ================================================ 0,98,166,34,66,130,231,0 ================================================ FILE: src/template_projects/text_game_code.template/tiles/8x8/tile22.txt ================================================ 0,99,165,33,66,132,231,0 ================================================ FILE: src/template_projects/text_game_code.template/tiles/8x8/tile23.txt ================================================ 0,103,161,33,71,129,231,0 ================================================ FILE: src/template_projects/text_game_code.template/tiles/8x8/tile24.txt ================================================ 0,101,165,37,71,129,225,0 ================================================ FILE: src/template_projects/text_game_code.template/tiles/8x8/tile25.txt ================================================ 0,103,164,36,71,129,231,0 ================================================ FILE: src/template_projects/text_game_code.template/tiles/8x8/tile26.txt ================================================ 0,103,164,36,71,133,231,0 ================================================ FILE: src/template_projects/text_game_code.template/tiles/8x8/tile3.txt ================================================ 0,71,161,161,167,161,71,0 ================================================ FILE: src/template_projects/text_game_code.template/tiles/8x8/tile4.txt ================================================ 0,69,165,165,167,161,65,0 ================================================ FILE: src/template_projects/text_game_code.template/tiles/8x8/tile5.txt ================================================ 0,71,164,164,167,161,71,0 ================================================ FILE: src/template_projects/text_game_code.template/tiles/8x8/tile6.txt ================================================ 0,71,164,164,167,165,71,0 ================================================ FILE: src/template_projects/text_game_code.template/tiles/8x8/tile7.txt ================================================ 0,71,161,161,162,162,66,0 ================================================ FILE: src/template_projects/text_game_code.template/tiles/8x8/tile8.txt ================================================ 0,71,165,165,167,165,71,0 ================================================ FILE: src/template_projects/text_game_code.template/tiles/8x8/tile9.txt ================================================ 0,71,165,165,167,161,65,0 ================================================ FILE: src/template_projects/text_game_code.template/tiles/ASCII/char_tiles.h ================================================ #ifndef _CHAR_TILES_H #define _CHAR_TILES_H #include "cross_lib.h" #define _TILE_0 '*' #define _TILE_1 '*' #define _TILE_2 '-' #define _TILE_3 '-' // Apple #define _TILE_4 'O' // Body #define _TILE_5 'O' #define _TILE_6 'H' #define _TILE_7 '=' #if defined(_XL_NO_COLOR) #define _TILE_8 'R' #else #define _TILE_8 'O' #endif #define _TILE_9 'L' #define _TILE_10 '=' #define _TILE_11 'I' #define _TILE_12 'I' #define _TILE_13 '-' #define _TILE_14 'S' #define _TILE_15 'I' #define _TILE_16 'C' #define _TILE_17 'X' #if defined(_XL_NO_COLOR) #define _TILE_18 'S' #else #define _TILE_18 'O' #endif #define _TILE_26 'J' #endif // _CHAR_TILES_H ================================================ FILE: src/unit_tests/testDefaults.py ================================================ import unittest import sys sys.path.append("modules") from option_functions import OptionConfig from default_values import * default_option_config = OptionConfig() class testDefaults(unittest.TestCase): # no_default def test_no_defaults_1(self): params = ("build", "helloworld") result = insert_default_sizes(default_option_config, params) self.assertEqual(result,params) def test_no_defaults_2(self): params = ("build", "tiles", "vic20") result = insert_default_sizes(default_option_config, params) self.assertEqual(result,params) def test_terminal_1(self): params = ("build", "helloworld", "terminal") result = insert_default_sizes(default_option_config, params) self.assertEqual(result,['build', 'helloworld', 'terminal', '20', '17']) def test_terminal_2(self): params = ("build", "helloworld","terminal", "vic20") result = insert_default_sizes(default_option_config, params) self.assertEqual(result,['build', 'helloworld', 'terminal8x8', '22', '23']) def test_terminal_3(self): params = ("build", "helloworld","terminal", "atari") result = insert_default_sizes(default_option_config, params) self.assertEqual(result,['build', 'helloworld', 'terminal8x8', '20', '24']) def test_terminal_4(self): params = ("build", "helloworld","terminal6x8") result = insert_default_sizes(default_option_config, params) self.assertEqual(result,['build', 'helloworld', 'terminal6x8', '40', '24']) def test_terminal_5(self): params = ("build", "helloworld","terminal8x6") result = insert_default_sizes(default_option_config, params) self.assertEqual(result,['build', 'helloworld', 'terminal8x6', '20', '17']) def test_terminal_6(self): params = ("build", "helloworld","terminal7x8") result = insert_default_sizes(default_option_config, params) self.assertEqual(result,['build', 'helloworld', 'terminal7x8', '20', '24']) def test_terminal_7(self): params = ("build", "helloworld","terminal6x9") result = insert_default_sizes(default_option_config, params) self.assertEqual(result,['build', 'helloworld', 'terminal6x9', '40', '24']) def test_terminal_8(self): params = ("build", "helloworld","terminal8x8") result = insert_default_sizes(default_option_config, params) self.assertEqual(result,['build', 'helloworld', 'terminal8x8', '20', '17']) def test_terminal_9(self): params = ("build", "helloworld","terminal8x6", "atari_lynx") result = insert_default_sizes(default_option_config, params) self.assertEqual(result,['build', 'helloworld', 'terminal8x6', '20', '17']) def test_terminal_10(self): params = ("build", "helloworld", "terminal", "c64") result = insert_default_sizes(default_option_config, params) self.assertEqual(result,['build', 'helloworld', 'terminal8x8', '40', '25']) def test_terminal_11(self): params = ("build", "helloworld","terminal", "msx") result = insert_default_sizes(default_option_config, params) self.assertEqual(result,['build', 'helloworld', 'terminal8x8', '32', '24']) def test_terminal_12(self): params = ("build", "helloworld","terminal", "cpc") result = insert_default_sizes(default_option_config, params) self.assertEqual(result,['build', 'helloworld', 'terminal8x8', '20', '25']) def test_terminal_13(self): params = ("build", "helloworld","terminal", "spectrum") result = insert_default_sizes(default_option_config, params) self.assertEqual(result,['build', 'helloworld', 'terminal8x8', '32', '24']) if __name__ == '__main__': unittest.main() ================================================ FILE: src/unit_tests/testImport.py ================================================ import unittest import sys sys.path.append("modules") from option_functions import * from import_from_source import * option_config = OptionConfig() class testImport(unittest.TestCase): # fill_empty_slots_with_zero def test_fill_empty_slots_with_zero_1(self): filled_slots = fill_empty_slots_with_zero(["","1","2","", "3","",""]) self.assertEqual(filled_slots,['0', '1', '2', '0', '3', '0', '0']) # has_headless_hex def test_has_headless_hex_1(self): has_headless_hex_check = has_headless_hex(["AB,CD,EF,01,23,45,67,89","AF"]) self.assertTrue(has_headless_hex_check) def test_has_headless_hex_2(self): has_headless_hex_check = has_headless_hex(["ABC,CD,EF,01,23,45,67,89","AF"]) self.assertFalse(has_headless_hex_check) def test_has_headless_hex_2(self): has_headless_hex_check = has_headless_hex(["AB,$CD,EF,01,23,45,67,89","AF"]) self.assertFalse(has_headless_hex_check) # has_nine_byte_lines def test_has_nine_byte_lines_1(self): has_headless_hex_check = has_nine_byte_lines(["AB,CD,EF,01,23,45,67,89,AF"]) self.assertTrue(has_headless_hex_check) def test_has_nine_byte_lines_2(self): has_headless_hex_check = has_nine_byte_lines(["AB,CD,EF,01,23,45,67,89"]) self.assertFalse(has_headless_hex_check) def test_has_nine_byte_lines_3(self): has_headless_hex_check = has_nine_byte_lines(["A,CD,EF,1,23,45,67,89,AF"]) self.assertTrue(has_headless_hex_check) # remove_basic_comments def test_remove_basic_comments_1(self): cleaned_string = remove_basic_comments('10 PRINT 42:REM ABC') self.assertEqual(cleaned_string,"10 PRINT 42") def test_remove_basic_comments_2(self): cleaned_string = remove_basic_comments('10 ? 42:rem ABC') self.assertEqual(cleaned_string,"10 ? 42") def test_remove_basic_comments_3(self): cleaned_string = remove_basic_comments('10 PRINT 42: REM DEF') self.assertEqual(cleaned_string,"10 PRINT 42") def test_remove_basic_comments_4(self): cleaned_string = remove_basic_comments('10 ? 42: rem DEF') self.assertEqual(cleaned_string,"10 ? 42") def test_remove_basic_comments_5(self): cleaned_string = remove_basic_comments("10 ? 42:' DEF") self.assertEqual(cleaned_string,"10 ? 42") def test_remove_basic_comments_6(self): cleaned_string = remove_basic_comments("10 ? 42: ' DEF") self.assertEqual(cleaned_string,"10 ? 42") # remove_assembly_comments def test_remove_assembly_comments_1(self): cleaned_string = remove_assembly_comments("!BYTE $FF ; FOO") self.assertEqual(cleaned_string,"!BYTE $FF") # normalize_assembly_line def test_normalize_assembly_line_1(self): normalized_line = normalize_assembly_line("0x2A") self.assertEqual(normalized_line,"$2A") def test_normalize_assembly_line_2(self): normalized_line = normalize_assembly_line("#2A") self.assertEqual(normalized_line,"$2A") def test_normalize_assembly_line_3(self): normalized_line = normalize_assembly_line(">2A") self.assertEqual(normalized_line,"$2A") def test_normalize_assembly_line_4(self): normalized_line = normalize_assembly_line("&H2A &h2B") self.assertEqual(normalized_line,"$2A $2B") def test_normalize_assembly_line_5(self): normalized_line = normalize_assembly_line("#2A") self.assertEqual(normalized_line,"$2A") def test_normalize_assembly_line_6(self): normalized_line = normalize_assembly_line("0b01010101") self.assertEqual(normalized_line,"@01010101") def test_normalize_assembly_line_7(self): normalized_line = normalize_assembly_line("%10101010") self.assertEqual(normalized_line,"@10101010") # normalize_basic_line def test_normalize_basic_line_1(self): normalized_line = normalize_basic_line("20 SYMBOL AFTER 32") self.assertEqual(normalized_line,"") def test_normalize_basic_line_2(self): normalized_line = normalize_basic_line("20 SYMBOL 32") self.assertEqual(normalized_line,"20 SYMBOL 32") def test_normalize_basic_line_3(self): normalized_line = normalize_basic_line('30 POKE USR "a"+3,BIN 0111110') self.assertEqual(normalized_line,'30 POKE USR "a"+3,\nBIN@ 0111110') # compute_shape def test_compute_shape_xsize_8_1(self): csv_string = "255,255,255,255,255,255,255,255" self.assertEqual(compute_shape(csv_string, 8),["########","########","########","########","########","########","########","########",]) def test_compute_shape_xsize_8_2(self): csv_string = "0,0,0,0,0,0,0,0" self.assertEqual(compute_shape(csv_string, 8),["........","........","........","........","........","........","........","........",]) def test_compute_shape_xsize_8_3(self): csv_string = "1,2,3,4,5,6,7,8" self.assertEqual(compute_shape(csv_string, 8),[".......#","......#.","......##",".....#..",".....#.#",".....##.",".....###","....#...",]) def test_compute_shape_xsize_8_4(self): csv_string = "1, 2,3,4, 5,6 ,7,8" self.assertEqual(compute_shape(csv_string, 8),[".......#","......#.","......##",".....#..",".....#.#",".....##.",".....###","....#...",]) def test_compute_shape_xsize_8_5(self): csv_string = "254,253,252,251,250,249,248,247" self.assertEqual(compute_shape(csv_string, 8),["#######.","######.#","######..","#####.##","#####.#.","#####..#","#####...","####.###",]) def test_compute_shape_xsize_7_1(self): csv_string = "127,127,127,127,127,127,127,127" self.assertEqual(compute_shape(csv_string, 7),["#######","#######","#######","#######","#######","#######","#######","#######",]) def test_compute_shape_xsize_7_2(self): csv_string = "0,0,0,0,0,0,0,0" self.assertEqual(compute_shape(csv_string, 7),[".......",".......",".......",".......",".......",".......",".......",".......",]) def test_compute_shape_xsize_7_3(self): csv_string = "1,2,3,4,5,6,7,8" self.assertEqual(compute_shape(csv_string, 7),["......#",".....#.",".....##","....#..","....#.#","....##.","....###","...#...",]) def test_compute_shape_xsize_7_4(self): csv_string = "1, 2,3,4, 5,6 ,7,8" self.assertEqual(compute_shape(csv_string, 7),["......#",".....#.",".....##","....#..","....#.#","....##.","....###","...#...",]) def test_compute_shape_xsize_7_5(self): csv_string = "126,125,124,123,122,121,120,119" self.assertEqual(compute_shape(csv_string, 7),["######.","#####.#","#####..","####.##","####.#.","####..#","####...","###.###",]) def test_compute_shape_xsize_6_1(self): csv_string = "63,63,63,63,63,63,63,63" self.assertEqual(compute_shape(csv_string, 6),["######","######","######","######","######","######","######","######",]) def test_compute_shape_xsize_6_2(self): csv_string = "0,0,0,0,0,0,0,0" self.assertEqual(compute_shape(csv_string, 6),["......","......","......","......","......","......","......","......",]) def test_compute_shape_xsize_6_3(self): csv_string = "1,2,3,4,5,6,7,8" self.assertEqual(compute_shape(csv_string, 6),[".....#","....#.","....##","...#..","...#.#","...##.","...###","..#...",]) def test_compute_shape_xsize_6_4(self): csv_string = "1, 2,3,4, 5,6 ,7,8" self.assertEqual(compute_shape(csv_string, 6),[".....#","....#.","....##","...#..","...#.#","...##.","...###","..#...",]) def test_compute_shape_xsize_6_5(self): csv_string = "62,61,60,59,58,57,56,55" self.assertEqual(compute_shape(csv_string, 6),["#####.","####.#","####..","###.##","###.#.","###..#","###...","##.###",]) # compute_rotated_shape @staticmethod def intListToString(intList): res = "" for value in intList: res+=str(value)+"," res=res[:-1] return res # compute_rotated_shape def test_compute_rotated_shape_1(self): initial_list = [1,2,3,4,5,6,7,8] # .......# # ......#. # ......## # .....#.. # .....#.# # .....##. # .....### #....#... initial_list_string = testImport.intListToString(initial_list) shape0 = compute_shape(initial_list_string,8) expected_result = [0, 0, 0, 0, 128, 120, 102, 85] self.assertEqual(compute_rotated_shape(shape0),expected_result) expected_result_string = testImport.intListToString(expected_result) shape1 = compute_shape(expected_result_string,8) expected_result = [16, 224, 96, 160, 32, 192, 64, 128] self.assertEqual(compute_rotated_shape(shape1), expected_result) expected_result_string = testImport.intListToString(expected_result) shape2 = compute_shape(expected_result_string,8) expected_result = [170, 102, 30, 1, 0, 0, 0, 0] self.assertEqual(compute_rotated_shape(shape2), expected_result) expected_result_string = testImport.intListToString(expected_result) shape3 = compute_shape(expected_result_string,8) expected_result = initial_list self.assertEqual(compute_rotated_shape(shape3), expected_result) expected_result_string = testImport.intListToString(expected_result) def test_compute_rotated_shape_2(self): initial_list = [255,0,255,0,255,0,255,0] initial_list_string = testImport.intListToString(initial_list) shape0 = compute_shape(initial_list_string,8) expected_result = [85, 85, 85, 85, 85, 85, 85, 85] self.assertEqual(compute_rotated_shape(shape0),expected_result) expected_result_string = testImport.intListToString(expected_result) shape1 = compute_shape(expected_result_string,8) expected_result = [0,255,0,255,0,255,0,255] self.assertEqual(compute_rotated_shape(shape1), expected_result) expected_result_string = testImport.intListToString(expected_result) shape2 = compute_shape(expected_result_string,8) expected_result = [170, 170, 170, 170, 170, 170, 170, 170] self.assertEqual(compute_rotated_shape(shape2), expected_result) expected_result_string = testImport.intListToString(expected_result) shape3 = compute_shape(expected_result_string,8) expected_result = initial_list self.assertEqual(compute_rotated_shape(shape3), expected_result) expected_result_string = testImport.intListToString(expected_result) # aux_rip_tiles def test_rip_tiles_asm_1(self): source_lines = ['!byte 0,0,60,98,126,98,98,98\n'] ripped_lines = aux_rip_tiles(option_config, source_lines,False,False,8,8,False,False) self.assertEqual(ripped_lines,['0,0,60,98,126,98,98,98']) def test_rip_tiles_asm_2(self): source_lines = ['!byte 0x00, 0x1F, 0x28, 0x28, 0x28, 0x3F, 0x1F, 0x00\n'] ripped_lines = aux_rip_tiles(option_config, source_lines,False,False,8,8,False,False) self.assertEqual(ripped_lines,['$00,$1F,$28,$28,$28,$3F,$1F,$00']) def test_rip_tiles_asm_3(self): rip_flag = True self.maxDiff = None source_lines = [ \ '; CHARSET IMAGE DATA...', '; 48 images, 8 bytes per image, total size is 384 ($180) bytes.', '\n', 'charset_data', '\n', '.byte $00,$00,$00,$00,$00,$00,$00,$00,$7C,$EE,$C6,$C6,$FE,$C6,$C6,$00', '.byte $FC,$C6,$C6,$FC,$C6,$C6,$FE,$00,$7E,$E6,$C0,$C0,$C0,$E6,$7E,$00', '.byte $FC,$CE,$C6,$C6,$C6,$CE,$FC,$00,$FE,$C6,$C0,$F8,$C0,$C6,$FE,$00', '.byte $FE,$C6,$C0,$F8,$C0,$C0,$C0,$00,$7E,$E6,$C0,$CE,$C6,$E6,$7E,$00', '.byte $C6,$C6,$C6,$C6,$FE,$C6,$C6,$00,$3C,$18,$18,$18,$18,$18,$3C,$00', '.byte $06,$06,$06,$06,$C6,$EE,$7C,$00,$CE,$DC,$F8,$F8,$DC,$CE,$C6,$00', '.byte $C0,$C0,$C0,$C0,$C0,$C6,$FE,$00,$C6,$EE,$FE,$FE,$C6,$C6,$C6,$00', '.byte $C6,$E6,$F6,$FE,$DE,$CE,$C6,$00,$FC,$CE,$C6,$C6,$C6,$E6,$7E,$00', '.byte $FC,$CE,$C6,$C6,$FE,$C0,$C0,$00,$FC,$CE,$C6,$C6,$E6,$7C,$0E,$00', '.byte $FC,$CE,$C6,$C6,$FE,$DC,$CE,$00,$FE,$C6,$C0,$7C,$06,$C6,$FE,$00', '.byte $FE,$36,$30,$30,$30,$30,$30,$00,$C6,$C6,$C6,$C6,$C6,$EE,$7C,$00', '.byte $C6,$C6,$C6,$EE,$7C,$38,$10,$00,$C6,$C6,$C6,$C6,$FE,$EE,$C6,$00', '.byte $C6,$6C,$38,$38,$6C,$C6,$C6,$00,$C6,$EC,$78,$30,$30,$30,$30,$00', '.byte $FE,$CE,$1C,$38,$70,$E6,$FE,$00,$7C,$EE,$C6,$C6,$C6,$EE,$7C,$00', '.byte $38,$18,$18,$18,$18,$18,$18,$00,$FC,$C6,$06,$1C,$70,$E0,$FE,$00', '.byte $FC,$C6,$06,$3C,$06,$C6,$FC,$00,$C0,$C0,$C0,$D8,$FE,$18,$18,$00', '.byte $FE,$C6,$C0,$FE,$06,$C6,$7C,$00,$1C,$38,$70,$EC,$C6,$E6,$7E,$00', '.byte $FE,$C6,$0C,$18,$30,$30,$30,$00,$7C,$C6,$C6,$7C,$C6,$C6,$7C,$00', '.byte $7E,$67,$63,$37,$0E,$1C,$38,$00,$00,$00,$00,$00,$00,$30,$30,$00', '.byte $00,$00,$00,$00,$00,$18,$30,$00,$7E,$66,$06,$1C,$18,$00,$18,$00', '.byte $18,$18,$18,$18,$18,$00,$18,$00,$18,$18,$18,$00,$00,$00,$00,$00', '.byte $6C,$6C,$6C,$00,$00,$00,$00,$00,$18,$30,$30,$30,$30,$30,$18,$00', '.byte $18,$0C,$0C,$0C,$0C,$0C,$18,$00,$00,$00,$FC,$7E,$00,$00,$00,$00', '.byte $00,$18,$18,$7E,$18,$18,$00,$00,$00,$00,$18,$00,$00,$18,$00,$00', '\n', '\n', '; CHARSET IMAGE ATTRIBUTE DATA...', '; 48 attributes, 1 attribute per image, 8 bits per attribute, total size is 48 ($30) bytes.', '; nb. Upper nybbles = material, lower nybbles = colour.', '\n', 'charset_attrib_data', '\n', '.byte $03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03', '.byte $03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03', '.byte $03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03', ] ripped_lines = aux_rip_tiles(option_config, source_lines,False,False,8,8,rip_flag,False) self.assertEqual(ripped_lines, \ [ \ '$00,$00,$00,$00,$00,$00,$00,$00', '$7C,$EE,$C6,$C6,$FE,$C6,$C6,$00', '$FC,$C6,$C6,$FC,$C6,$C6,$FE,$00', '$7E,$E6,$C0,$C0,$C0,$E6,$7E,$00', '$FC,$CE,$C6,$C6,$C6,$CE,$FC,$00', '$FE,$C6,$C0,$F8,$C0,$C6,$FE,$00', '$FE,$C6,$C0,$F8,$C0,$C0,$C0,$00', '$7E,$E6,$C0,$CE,$C6,$E6,$7E,$00', '$C6,$C6,$C6,$C6,$FE,$C6,$C6,$00', '$3C,$18,$18,$18,$18,$18,$3C,$00', '$06,$06,$06,$06,$C6,$EE,$7C,$00', '$CE,$DC,$F8,$F8,$DC,$CE,$C6,$00', '$C0,$C0,$C0,$C0,$C0,$C6,$FE,$00', '$C6,$EE,$FE,$FE,$C6,$C6,$C6,$00', '$C6,$E6,$F6,$FE,$DE,$CE,$C6,$00', '$FC,$CE,$C6,$C6,$C6,$E6,$7E,$00', '$FC,$CE,$C6,$C6,$FE,$C0,$C0,$00', '$FC,$CE,$C6,$C6,$E6,$7C,$0E,$00', '$FC,$CE,$C6,$C6,$FE,$DC,$CE,$00', '$FE,$C6,$C0,$7C,$06,$C6,$FE,$00', '$FE,$36,$30,$30,$30,$30,$30,$00', '$C6,$C6,$C6,$C6,$C6,$EE,$7C,$00', '$C6,$C6,$C6,$EE,$7C,$38,$10,$00', '$C6,$C6,$C6,$C6,$FE,$EE,$C6,$00', '$C6,$6C,$38,$38,$6C,$C6,$C6,$00', '$C6,$EC,$78,$30,$30,$30,$30,$00', '$FE,$CE,$1C,$38,$70,$E6,$FE,$00', '$7C,$EE,$C6,$C6,$C6,$EE,$7C,$00' ] ) def test_rip_tiles_asm_4(self): rip_flag = True assembly_extension = True self.maxDiff = None source_lines = [ \ "PAT0 DATA >1824,>1866,>BD3C,>2424" "PAT1 DATA >0000,>0000,>0000,>0000" ] ripped_lines = aux_rip_tiles(option_config, source_lines,assembly_extension,False,8,8,rip_flag,False) self.assertEqual(ripped_lines, \ [ \ '$18,$24,$18,$66,$BD,$3C,$24,$24', ] ) def test_rip_tiles_asm_5(self): rip_flag = True assembly_extension = False self.maxDiff = None source_lines = [ \ '.byte %01010101', '.byte %11111111', '.byte %10101010', '.byte %00110011', '.byte %11001100', '.byte %01010101', '.byte %10101010', '.byte %11111111', ] ripped_lines = aux_rip_tiles(option_config, source_lines,assembly_extension,False,8,8,rip_flag,False) self.assertEqual(ripped_lines, \ [ \ '85,255,170,51,204,85,170,255', ] ) def test_rip_tiles_asm_6(self): rip_flag = True assembly_extension = False self.maxDiff = None source_lines = [ \ '; Exported using VChar64 v0.2.4', '; Total bytes: 2048', 'charset:', 'foo .byte $3c,$66,$6e,$6e,$60,$62,$3c', '.byte $00,$18,$3c,$66,$7e,$66,$66,$66,$00 ; 0', 'bar .byte $7c,$66,$66,$7c,$66,$66,$7c,$00,$3c,$66,$60,$60,$60,$66,$3c,$00 ; 16', 'toto .byte $78,$6c,$66,$66,$66,$6c,$78,$00,$7e,$60,$60,$78,$60,$60,$7e,$00 ; 32', '.byte $7e,$60,$60,$78,$60,$60,$60,$00,$3c,$66,$60,$6e,$66,$66,$3c,$00 ; 48', '.byte $66,$66,$66,$7e,$66,$66,$66,$00,$3c,$18,$18,$18,$18,$18,$3c,$00 ; 64', '.byte $1e,$0c,$0c,$0c,$0c,$6c,$38,$00,$66,$6c,$78,$70,$78,$6c,$66,$00 ; 80', '.byte $60,$60,$60,$60,$60,$60,$7e,$00,$63,$77,$7f,$6b,$63,$63,$63,$00 ; 96', ] ripped_lines = aux_rip_tiles(option_config, source_lines,assembly_extension,False,8,8,rip_flag,False) self.assertEqual(ripped_lines, \ [ \ '$3c,$66,$6e,$6e,$60,$62,$3c,$00', '$18,$3c,$66,$7e,$66,$66,$66,$00', '$7c,$66,$66,$7c,$66,$66,$7c,$00', '$3c,$66,$60,$60,$60,$66,$3c,$00', '$78,$6c,$66,$66,$66,$6c,$78,$00', '$7e,$60,$60,$78,$60,$60,$7e,$00', '$7e,$60,$60,$78,$60,$60,$60,$00', '$3c,$66,$60,$6e,$66,$66,$3c,$00', '$66,$66,$66,$7e,$66,$66,$66,$00', '$3c,$18,$18,$18,$18,$18,$3c,$00', '$1e,$0c,$0c,$0c,$0c,$6c,$38,$00', '$66,$6c,$78,$70,$78,$6c,$66,$00', '$60,$60,$60,$60,$60,$60,$7e,$00', '$63,$77,$7f,$6b,$63,$63,$63,$00' ] ) def test_rip_tiles_cbm_basic_1(self): rip_flag = False source_lines = [ \ '000 REM ** USER DEFINED GRAPHICS **', '001 REM ** BY SHANE JOLLY **', '100 PRINT CHR$(147): PRINT TAB(12)"PLEASE WAIT..."', '110 PRINT CHR$(142)', '120 POKE 52, 48: POKE 56, 48', '130 POKE UG=12288;CG=53248', '140 POKE 56334, PEEK(56334) AND 254', '150 POKE 1, PEEK(1) AND 251', '160 FOR K=1 TO 2047', '170 POKE UG+K, PEEK(CG+K)', '180 NEXT', '190 POKE 1, PEEK(1) OR 4', '200 POKE 56334, PEEK(6334) OR 1', '210 POKE 53272, (PEEK(53272) AND 240)+12', '220 FOR CC=1 TO 9', '230 FOR J=0 TO 7', '240 READ A: POKE UG+8*CC+J, A', '250 NEXT J', '260 NEXT CC', '270 FOR N=65 TO 90', '280 PRINT CHR$(N);" ";', '290 NEXT N', '300 DATA 000, 016, 040, 068, 124, 068, 068, 000', '310 DATA 000, 120, 072, 124, 068, 068, 124, 000', '320 DATA 000, 124, 068, 064, 064, 068, 124, 000', '330 DATA 000, 120, 068, 068, 068, 068, 120, 000', '340 DATA 000, 124, 068, 112, 112, 068, 124, 000', '350 DATA 000, 124, 068, 112, 064, 064, 064, 000', '360 DATA 000, 124, 068, 064, 064, 078, 124, 000', '370 DATA 000, 068, 068, 124, 124, 068, 068, 000', '380 DATA 000, 056, 016, 016, 016, 016, 056, 000', ] ripped_lines = aux_rip_tiles(option_config, source_lines,False,False,8,8,rip_flag,False) self.assertEqual(ripped_lines, \ [ \ '000,016,040,068,124,068,068,000', '000,120,072,124,068,068,124,000', '000,124,068,064,064,068,124,000', '000,120,068,068,068,068,120,000', '000,124,068,112,112,068,124,000', '000,124,068,112,064,064,064,000', '000,124,068,064,064,078,124,000', '000,068,068,124,124,068,068,000', '000,056,016,016,016,016,056,000' \ ] \ ) def test_rip_tiles_cbm_basic_2(self): rip_flag = False source_lines = [ \ '0l=32:v=36878:fOk=.to4:rEb$:fOi=1to8:pO7167+i+k*8,aS(mI(b$,i)):pO7421+i,.:nE:nE', '1pO52,26:pO56,26:n=1:t=30720:pOv-9,255:pOv+1,8:?"{clear}{reverse on}{yellow}ijkl":x=3:p=7955:ifj>rtHr=j', '2wA198,1:g(0)=211:g(1)=209:g(2)=215:g(3)=218:pO650,128:u=22:k=7745:y=7732:z=y-8', '3gEa$:b=z+rN(.)*464:q=rN(1)*4:pOb,g(q):pOb+t,q+2:ifj>=100*ntHx=x-(x<9):n=n+1', '4pOk+i,l:pOy+i*u,l:i=i+1:ifi<=utHpOk+i,4:pOk+i+t,6:pOy+i*u,4:pOy+i*u+t,7:m=pE(p)', '5g=.:x=x+(m=4):e=saN1:c=s-1+e:ifi>utHi=.:y=z+rN(.)*u-1:k=z+u*int((p-z)/u)-1', '6ifc=sG(c)tHg=1:h=s+1:pOp,l:p=p+c*21*e+c:d=pE(p):ifd=ftHw=w-(d>l):j=j-(w>1)*w', '7pOp+t,7:?"{home}{reverse on}{red}g{green}e{cyan}m{purple}s{white}"j" {blue}hi{cyan}"r" {yellow}{reverse off}b{green}{reverse on}"x:ifd>ltHifgtHpOv,9:pOv,.:dA"{24}{60}{24}{102}{153}{24}{36}{102}"', '8pOp,h:w=-w*(d=f):s=aS(a$+"@")-74:dA"{24}{44}{152}{110}{25}{24}{40}{40}","{24}{36}{24}{102}{153}{24}{36}{102}","{24}{52}{25}{118}{152}{24}{40}{40}","{ 24}{ 36}{ 90}{189}{189}{ 90}{ 36}{ 24}"', '9f=d:on-(x>.aNp<8186aNp>=z)gO3:?sP7)"{reverse on}{red}game over":fOa=.tov/9:nE:pO198,0:j=.:gO1', ] ripped_lines = aux_rip_tiles(option_config, source_lines,False,False,8,8,rip_flag,False) self.assertEqual(ripped_lines, \ [ \ '24,60,24,102,153,24,36,102', '24,44,152,110,25,24,40,40', '24,36,24,102,153,24,36,102', '24,52,25,118,152,24,40,40', '24,36,90,189,189,90,36,24' ] \ ) def test_rip_tiles_cbm_basic_3(self): rip_flag = False source_lines = [ \ '0pO56,26:pO52,26:v=36878:x=132:pOv-9,255:fOp=.to39:rEb:pO7168+p,b:pO7421+p,.:nE', '1e=22:z=218:o=4:y=3:b=7:p=8174:pO650,z:?"{clear}{black}{reverse on}jl":l$="{green}{68*2}{black}{66}":r$="{black}{67}{green}{68*2}":ifi>rtHr=i', '2n=v+1:t=30720:pOn,59:wA198,1:?"{clear}":fOi=3toe:?tA4)"{green}{68}{black}{reverse on}{230}{191}"sP8)"{191}{230}{reverse off}{green}{68}":nE:d=1:i=.', '3b=b+f:i=i+1:if(iaNy)=ytHd=int(rN(.)*3):ifb<4tHifo<6tHb=4:y=7:dA24,189,255,165', '4s=int(rN(.)*(b+1)):ifpE(p-e)<>32tHpOn,42:pOv,15:pOv,.:l=l+1:fOf=-9tox:nE:pOn,59', '5c$=" ":gEa$:ifiaN1tHc$="{31}@":ifl<.tHl=.:dA36,189,255,165,90,102,90,60,36,219,255', '6?"{home}{down}{left}{148}":pOz,x:pOp+t,2:pOp,1:ifpE(p-e)=4tHl=9:dA195,93,114,101,66,93,114,101,66', '7?sPo)l$sPs)c$sPb-s)r$:ifa$<>""tHk=aS(a$):p=p+(k=74)-(k=76):dA93,39,83,33,93,39', '8?"{home}{red}a{reverse on}"l" {purple}"i" {black}"r:f=(iaN127)=.:l=l+f:ifo>1-dtHifo+d+b<17tHo=o-1+d:dA83,33,8,28', '9on-(l<9)gO3:?"{home}{down*2}"sP8)"{black}{reverse on}{191} {red}end {black}{191}":fOs=ttov:nE:l=.:pO198,0:gO1:dA62,28,62,8,8,', ] ripped_lines = aux_rip_tiles(option_config, source_lines,False,False,8,8,rip_flag,False) self.assertEqual(ripped_lines, \ [ '24,189,255,165,36,189,255,165', '90,102,90,60,36,219,255,195', '93,114,101,66,93,114,101,66', '93,39,83,33,93,39,83,33', '8,28,62,28,62,8,8,0' ] ) def test_rip_tiles_oric_basic_1(self): rip_flag = True source_lines = [ \ '10 REM Golf', '20 CH=46080', '30 FOR Q=1 TO 3', '40 READ C', '50 FOR I=0 TO 7', '60 READ D', '70 POKE CH+C+I,D', '80 NEXT I', '90 NEXT Q', '100 DATA 264,8,12,14,8,8,8,8,62', '110 DATA 512,12,30,45,30,12,18,18,33', '120 DATA 280,12,30,31,46,62,60,28,24', '130 DIM T(9)', '140 XH =0:XC=0', '150 YH=0:HT=0:YC=0', '170 FOR H=1 TO 9', ] ripped_lines = aux_rip_tiles(option_config, source_lines,False,False,8,8,rip_flag,False) self.assertEqual(ripped_lines, \ [ \ '8,12,14,8,8,8,8,62', '12,30,45,30,12,18,18,33', '12,30,31,46,62,60,28,24' ] ) def test_rip_tiles_msx_basic_1(self): rip_flag = True self.maxDiff = None source_lines = [ \ "490 DATA 22,63,F7,B7,FF,7E,3C,3C ' a", "491 DATA 38,6C,FF,3F,0F,3F,FC,38 ' b", "492 DATA 3C,3C,7E,FF,ED,EF,C6,44 ' c", "493 DATA 1C,36,FF,FC,F0,FC,3F,1C ' d", "494 DATA 3C,7E,FF,FF,FF,FF,7E,3C ' e", "495 DATA 08,10,54,FE,FE,FE,FE,7C ' f", "496 DATA 06,08,10,10,38,7C,7C,38 ' g", "497 DATA 00,28,FE,AA,FE,54,38,10 ' h", "500 DATA 08,1C,2A,7F,77,3E,36,63 ' i", "501 DATA FF,D5,AB,D5,AB,D5,AB,FF ' j", "502 DATA 00,00,00,18,18,00,00,00 ' k", "503 DATA 00,00,18,24,24,18,00,00 ' l", "504 DATA 00,18,3C,66,66,3C,18,00 ' m", "505 DATA 3C,7E,E7,C3,C3,E7,7E,3C ' n", "510 DATA 00,01,06,1D,2A,2A,2A,1F ' o", "511 DATA 1B,8F,65,11,C9,A9,B1,F3 ' p", "512 DATA 4C,F7,F0,18,07,02,3E,FE ' q", "513 DATA 7F,9F,31,41,81,81,F9,FD ' r", "515 DATA 7E,C3,9F,9F,9F,C3,7E,00 ' s", '520 FORF%=&H2000+ASC("a")*8TO&H2097+ASC("a")*8:READA$:VPOKEF%,VAL("&H"+A$):NEXTF%:F%=USR2(0):F%=USR3(0)', "530 DATA C1,C1,C1,C1,C1,C1,C1,C1 ' a", "531 DATA C1,C1,C1,C1,C1,C1,C1,C1 ' b", "532 DATA C1,C1,C1,C1,C1,C1,C1,C1 ' c", "533 DATA C1,C1,C1,C1,C1,C1,C1,C1 ' d", "534 DATA D1,D1,41,71,71,41,D1,D1 ' e", "535 DATA A1,A1,A1,A1,A1,A1,A1,A1 ' f", "536 DATA F1,F1,F1,F1,D1,D1,D1,D1 ' g", "537 DATA D1,D1,D1,D1,D1,D1,D1,D1 ' h", "540 DATA D1,D1,21,21,21,21,41,41 ' i", "541 DATA 31,31,D1,D1,81,81,51,51 ' j", "542 DATA F1,F1,F1,21,21,F1,F1,F1 ' k", "543 DATA F1,F1,F1,F1,F1,F1,F1,F1 ' l", "544 DATA F1,41,41,F1,F1,41,41,F1 ' m", "545 DATA D1,D1,81,81,81,81,D1,D1 ' n", "546 DATA 21,21,21,21,21,21,21,21 ' o", "547 DATA 21,21,21,21,21,21,21,21 ' p", "548 DATA 21,21,21,21,21,21,21,21 ' q", "550 DATA 21,21,21,21,21,21,21,21 ' r", "551 DATA 90,90,90,90,90,90,90,00 ' s", "552 DATA 91,91,91,91,91,91,91,91 ' t", ] ripped_lines = aux_rip_tiles(option_config, source_lines,False,False,8,8,rip_flag,False) self.assertEqual(ripped_lines, \ [ '$22,$63,$F7,$B7,$FF,$7E,$3C,$3C', '$38,$6C,$FF,$3F,$0F,$3F,$FC,$38', '$3C,$3C,$7E,$FF,$ED,$EF,$C6,$44', '$1C,$36,$FF,$FC,$F0,$FC,$3F,$1C', '$3C,$7E,$FF,$FF,$FF,$FF,$7E,$3C', '$08,$10,$54,$FE,$FE,$FE,$FE,$7C', '$06,$08,$10,$10,$38,$7C,$7C,$38', '$00,$28,$FE,$AA,$FE,$54,$38,$10', '$08,$1C,$2A,$7F,$77,$3E,$36,$63', '$FF,$D5,$AB,$D5,$AB,$D5,$AB,$FF', '$00,$00,$00,$18,$18,$00,$00,$00', '$00,$00,$18,$24,$24,$18,$00,$00', '$00,$18,$3C,$66,$66,$3C,$18,$00', '$3C,$7E,$E7,$C3,$C3,$E7,$7E,$3C', '$00,$01,$06,$1D,$2A,$2A,$2A,$1F', '$1B,$8F,$65,$11,$C9,$A9,$B1,$F3', '$4C,$F7,$F0,$18,$07,$02,$3E,$FE', '$7F,$9F,$31,$41,$81,$81,$F9,$FD', '$7E,$C3,$9F,$9F,$9F,$C3,$7E,$00', '$C1,$C1,$C1,$C1,$C1,$C1,$C1,$C1', '$C1,$C1,$C1,$C1,$C1,$C1,$C1,$C1', '$C1,$C1,$C1,$C1,$C1,$C1,$C1,$C1', '$C1,$C1,$C1,$C1,$C1,$C1,$C1,$C1', '$D1,$D1,$41,$71,$71,$41,$D1,$D1', '$A1,$A1,$A1,$A1,$A1,$A1,$A1,$A1', '$F1,$F1,$F1,$F1,$D1,$D1,$D1,$D1', '$D1,$D1,$D1,$D1,$D1,$D1,$D1,$D1' ] ) def test_rip_tiles_cpc_basic_1(self): rip_flag = True self.maxDiff = None source_lines = [ \ "20 SYMBOL AFTER 32", "30 REM Upper case chars", "40 SYMBOL 65,126,66,66,126,98,98,98,0", "50 SYMBOL 66,126,66,66,126,98,98,126,0", "60 SYMBOL 67,126,64,64,96,96,96,126,0", "70 SYMBOL 68,254,66,66,98,98,98,254,0", "80 SYMBOL 69,126,64,64, 120,96,96,126,0", "90 SYMBOL 70,126,64,64,120,96,96,96,0", "100 SYMBOL 71,126,64,64,102,98,98,126,0", "110 SYMBOL 72,66,66,66,126,98,98,98,0", "120 SYMBOL 73,60,16,16,24,24,24,60,0", "130 SYMBOL 74,126,8,8,24,24,24,120,0", "140 SYMBOL 75,68,68,68, 120,100,100,100,0", "150 SYMBOL 76,64,64,64,96,96,96, 126,0", "160 SYMBOL 77,126,74,74,98,98,98,98,0", "170 SYMBOL 78,98,82,74,102,98,98,98,0", "180 SYMBOL 79,126,66,66,98,98,98,126,0", "190 SYMBOL 80,126,66,66,126,96,96,96,0", "200 SYMBOL 81,126,66,66,98,98,106,126,4", "210 SYMBOL 82,126,66,66,126,106,100,98,0", "220 SYMBOL 83,126,64,64,126,6,6,126,0", "230 SYMBOL 84,126,16,16,24,24,24,24,0", "240 SYMBOL 85,66,66,66,98,98,98,126,0", "250 SYMBOL 86,66,66,66,66,66,36,24,0", "260 SYMBOL 87,66,66,66,98,106,106,126,0", "270 SYMBOL 88,102,102,36,24,36,102,102,0", "280 SYMBOL 89,66,66,126,16,24,24,24,0", "290 SYMBOL 90,126,4,8,16,32,64,126,0", "295 REM Lower case chars", "300 SYMBOL 97,0,0,126,6,126,70,126,0", "310 SYMBOL 98,96,96,96,126,98,98,126,0", "320 SYMBOL 99,0,0,126,96,96,96,126,0", "330 SYMBOL 100,6,6,6,126,70,70,126,0", "340 SYMBOL 101,0,0,126,98,126,96,126,0", "350 SYMBOL 102,60,48,48,120,48,48,48,0", "360 SYMBOL 103,0,0,126,70,70,126,6,126", "370 SYMBOL 104,96,96,96,126,98,98,98,0", "380 SYMBOL 105,24,0,24,24,24,24,24,0", "390 SYMBOL 106,6,0,6,6,6,6,6,126", "400 SYMBOL 107,96,96,102,108,120,108, 102,0", "410 SYMBOL 108,24,24,24,24,24,24,24,0", "420 SYMBOL 109,0,0,126,90,90,66,66,0", "430 SYMBOL 110,0,0,108,114,98,98,98,0", "440 SYMBOL 111,0,0,126,102,102,102,126,0", "450 SYMBOL 112,0,0,126,98,98,126,96,96", "460 SYMBOL 113,8,0,126,70,70,126,6,6", "470 SYMBOL 114,0,0,108,114,96,96,96,0", "480 SYMBOL 115,0,0,126,96,126,6,126,0", "490 SYMBOL 116,24,62,24,24,24,24,30,0", "500 SYMBOL 117,0,0,102,102,102,102,126,0", "510 SYMBOL 118,0,0,102,102,102,60,24,0", "520 SYMBOL 119,0,0,66,66,90,90,126,0", "530 SYMBOL 120,0,0,198,104,16,104,198,0", "540 SYMBOL 121,0,0,102,102,102,126,6,126", "550 SYMBOL 122,0,0,126,12,24,48,126,0", "555 REM Numbers", "560 SYMBOL 48,126,102,110,118,102,102,126,0", "570 SYMBOL 49,24,56,24,24,24,24,126,0", "580 SYMBOL 50,126,2,2,126,96,96,126,0", "590 SYMBOL 51,126,2,2,30,6,6,126,0", "600 SYMBOL 52,96,96,96,96,104,126,8,8", "610 SYMBOL 53,126,64,126,6,6,6,126,0", "620 SYMBOL 54,126,64,64,126,98,98,126,0", "630 SYMBOL 55,126,2,4,62,16,32,64,0", "640 SYMBOL 56,126,66,66,126,66,66,126,0", "650 SYMBOL 57,126,66,66,126,6,6,6,0", "680 SYMBOL 95,0,255,0,0,0,0,0,0", ] ripped_lines = aux_rip_tiles(option_config, source_lines,False,False,8,8,rip_flag,False) self.assertEqual(ripped_lines, \ [ '126,66,66,126,98,98,98,0', '126,66,66,126,98,98,126,0', '126,64,64,96,96,96,126,0', '254,66,66,98,98,98,254,0', '126,64,64,120,96,96,126,0', '126,64,64,120,96,96,96,0', '126,64,64,102,98,98,126,0', '66,66,66,126,98,98,98,0', '60,16,16,24,24,24,60,0', '126,8,8,24,24,24,120,0', '68,68,68,120,100,100,100,0', '64,64,64,96,96,96,126,0', '126,74,74,98,98,98,98,0', '98,82,74,102,98,98,98,0', '126,66,66,98,98,98,126,0', '126,66,66,126,96,96,96,0', '126,66,66,98,98,106,126,4', '126,66,66,126,106,100,98,0', '126,64,64,126,6,6,126,0', '126,16,16,24,24,24,24,0', '66,66,66,98,98,98,126,0', '66,66,66,66,66,36,24,0', '66,66,66,98,106,106,126,0', '102,102,36,24,36,102,102,0', '66,66,126,16,24,24,24,0', '126,4,8,16,32,64,126,0', '0,0,126,6,126,70,126,0' ] ) def test_rip_tiles_atari_basic_1(self): rip_flag = True self.maxDiff = None source_lines = [ \ '0A=PEEK(106)-4:POK.106,A:GR.17:U=256*A:F.I=28TO432:POK.U+I,PEEK(57344+I):N.I:F.I=64TO79:REA.J:POK.U+I,J:N.I:H=400', '1DIMN(255):POK.756,A:M=47:F.I=0TO4:REA.L:POK.708+I,L:N.I:B=PEEK(88)+PEEK(89)*256:O=B+59:Z=125:D=B+460:T=B+210:E=10', '2P=T:L=26:?#6;CHR$(Z);"USE IJKL SPC":K=1:Q=.9:G=B:U=3:J=0:F.I=0TO127:N(I)=0:N(I+128)=0:POK.O+1+INT(RND(0)*H),M:N.I', '3N(0)=1:N(5)=20:N(13)=-20:N(1)=-1:W=132:POS.6,1:?#6;" MINES+ ":F.I=0TO19:POK.O-I,73:POK.D+I,73:N.I:D.0,60,126,126', '4R=J*(J>R)+R*(J<=R):POS.1,0:?#6;9-F;" ";CHR$(136);U;" ";J;" hi ";R:IFPEEK(P)=W THENJ=J+9:F=F-(F>0):SO.0,Z,E,E', '5SE.4,0,0:Y=0:IFQ=K*500 THENU=U+(U<9):K=K+1:F=0:L=74', '6POK.P,200:S=PEEK(764):SO.0,0,0,0:IFS<>9THENPOK.764,9:IFN(S)THENPOK.P,M:P=P+N(S):J=J+1:Y=1:Q=Q-.0005:SO.0,99,E,E', '7POK.G,W:G=B:POK.729,0:IFY*(INT(J/4)=J/4)THENG=O+1+INT(RND(1)*H):POK.G,68:D.126,126,60,0,0,170,85,170,85,170,85', '8U=(P>O)*(PM)*(U>0))GOTO4:SO.0,99,8,9:POK.P,138:U=U-1:F=0:ON(U>0)GOTO4:SO.0,0,0,0:F.I=0TO2600:N.I:G.2', ] ripped_lines = aux_rip_tiles(option_config, source_lines,False,False,8,8,rip_flag,False) self.assertEqual(ripped_lines, \ [ '0,60,126,126,126,126,60,0', '0,170,85,170,85,170,85,0' ] ) def test_rip_tiles_bbc_basic_1(self): rip_flag = True self.maxDiff = None source_lines = [ \ '10 REM Walking alien', '20 MODE 6', '30 VDU 23,240,153,189,219,126,36,60,36,36', '40 PRINT TAB(0,10);CHR$(240)', '50 FOR I%=1 TO 19', '60 PRINT TAB(I%-1,10);" "', '70 PRINT TAB(I%,10);CHR$(240)', '80 FOR J%=1 TO 500: NEXT J%', '90 NEXT I%', '100 END', ] ripped_lines = aux_rip_tiles(option_config, source_lines,False,False,8,8,rip_flag,False) self.assertEqual(ripped_lines, \ [ '153,189,219,126,36,60,36,36' ] ) def test_rip_tiles_sinclair_basic_1(self): rip_flag = True self.maxDiff = None source_lines = [ \ '5 POKE USR "a"+0,BIN 0000000', '10 POKE USR "a"+1,BIN 0001000', '20 POKE USR "a"+2,BIN 0011100', '30 POKE USR "a"+3,BIN 0111110', '40 POKE USR "a"+4,BIN 1111111', '50 POKE USR "a"+5,BIN 0111110', '60 POKE USR "a"+6,BIN 0011100', '70 POKE USR "a"+7,BIN 0001000', ] ripped_lines = aux_rip_tiles(option_config, source_lines,False,False,8,8,rip_flag,False) self.assertEqual(ripped_lines, \ [ '0,8,28,62,127,62,28,8' ] ) # compute tile def test_compute_tile_1(self): source_lines = [ \ '...##...\n', '..#..#..\n', '...##...\n', '.##..##.\n', '#.####.#\n', '# ####.#\n', '..#..#..\n', '..#..#..\n' ] tile,xsize,ysize = compute_tile(source_lines) self.assertEqual(tile, \ '24,36,24,102,189,189,36,36' ) self.assertEqual(xsize,8) self.assertEqual(ysize,8) # compute split tile def test_compute_split_tile_1(self): self.maxDiff = None source_lines = [ \ '...######.......\n', '.###....###.....\n', '##.....#..##....\n', '#..#####...#....\n', '#...#..#...#....\n', '#...#####..#....\n', '##..#.....##....\n', '.###....###.....\n', '...######.......\n', '................\n', '................\n', '................' ] split_tiles = compute_split_tiles(option_config, source_lines,False) self.assertEqual(split_tiles, \ [ [ '...#####', '.###....', '##.....#', '#..#####', '#...#..#', '#...####', '##..#...', '.###....', '...#####', '........', '........', '........' ], [ '#.......', '###.....', '..##....', '...#....', '...#....', '#..#....', '..##....', '###.....', '#.......', '........', '........', '........' ] ] ) def test_compute_split_tile_2(self): self.maxDiff = None source_lines = [ \ '...######.......\n', '.###....###.....\n', '.#..#.....#.....\n', '##..##....##....\n', '#...######.#....\n', '#...#..##..#....\n', '#..##..#...#....\n', '#.######...#....\n', '##....##..##....\n', '.#.....#..#.....\n', '.###....###.....\n', '...######.......\n', '................\n', '................\n', '................\n', '................' ] split_tiles = compute_split_tiles(option_config, source_lines,False) self.assertEqual(split_tiles, \ [ [ '...#####', '.###....', '.#..#...', '##..##..', '#...####', '#...#..#', '#..##..#', '#.######', '##....##', '.#.....#', '.###....', '...#####', '........', '........', '........', '........' ], [ '#.......', '###.....', '..#.....', '..##....', '##.#....', '#..#....', '...#....', '...#....', '..##....', '..#.....', '###.....', '#.......', '........', '........', '........', '........' ] ] ) if __name__ == '__main__': unittest.main() ================================================ FILE: src/unit_tests/testParams.py ================================================ import unittest import sys sys.path.append("modules") from params import * class testParams(unittest.TestCase): def test_handle_two_letter_params_1(self): params = ("./xl", "tu") result = handle_two_letter_params(params) self.assertEqual(result,['', 'test', 'unit_tests']) def test_handle_two_letter_params_2(self): params = ("./xl", "hu") result = handle_two_letter_params(params) self.assertEqual(result,['', 'help', 'unit_tests']) def test_get_size_params_1(self): params = ("size", "helloworld", "25", "32") result = get_size_params(params) self.assertEqual(result,("ncurses_sized", "25", "32")) def test_get_size_params_2(self): params = ['size', 'helloworld', 'terminal', '20', '40'] result = get_size_params(params) self.assertEqual(result,('terminal8x8_sized', '20', '40') ) if __name__ == '__main__': unittest.main() ================================================ FILE: src/unit_tests/testShapes.py ================================================ import unittest import sys sys.path.append("modules") from shape_functions import * class testShapes(unittest.TestCase): # trim_newline_from_shape def test_trim_newline_from_shape_1(self): source_lines = ['#.####.#\n', '.######.\n', '#..##..#\n', '##.##.##\n', '.######.\n', '..####..\n', '.######.\n', '##.##.##\n'] trimmed_lines,xsize,ysize = trim_newline_from_shape(source_lines) self.assertEqual(trimmed_lines, ['#.####.#', '.######.', '#..##..#', '##.##.##', '.######.', '..####..', '.######.', '##.##.##']) self.assertEqual(xsize,8) self.assertEqual(ysize,8) def test_trim_newline_from_shape_2(self): source_lines = ['\n', '#.####.#\n', '.######.\n', '#..##..#\n', '##.##.##\n', '.######.\n', '..####..\n', '.######.\n', '##.##.##\n', '\n', '#############'] trimmed_lines,xsize,ysize = trim_newline_from_shape(source_lines) self.assertEqual(trimmed_lines, ['#.####.#', '.######.', '#..##..#', '##.##.##', '.######.', '..####..', '.######.', '##.##.##','########']) self.assertEqual(xsize,8) self.assertEqual(ysize,9) # convert def test_convert_1(self): tile_shape = \ [ "...##...", "..#..#..", "...##...", ".##..##.", "#..##..#", "...##...", "..#..#..", ".##..##." ] res = resize_shape(tile_shape,8,6,"zero") expected = \ [ '..#..#..', '...##...', '.##..##.', '#..##..#', '...##...', '..#..#..' ] self.assertEqual(res,expected) def test_convert_2(self): tile_shape = \ [ "...##...", "..#..#..", "...##...", ".##..##.", "#..##..#", "...##...", "..#..#..", ".##..##." ] res = resize_shape(tile_shape,8,6,"duplicate") expected = \ [ '..#..#..', '...##...', '.##..##.', '#..##..#', '...##...', '..#..#..' ] self.assertEqual(res,expected) def test_convert_3(self): tile_shape = \ [ "...##...", "..#..#..", "...##...", ".##..##.", "#..##..#", "...##...", "..#..#..", ".##..##." ] res = resize_shape(tile_shape,6,9,"zero") expected = \ [ '..##..', '.#..#.', '..##..', '##..##', '..##..', '..##..', '.#..#.', '##..##', '......' ] self.assertEqual(res,expected) def test_convert_4(self): tile_shape = \ [ "...##...", "..#..#..", "...##...", ".##..##.", "#..##..#", "...##...", "..#..#..", ".##..##." ] res = resize_shape(tile_shape,6,9,"duplicate") expected = \ [ '..##..', '.#..#.', '..##..', '##..##', '..##..', '..##..', '.#..#.', '##..##', '##..##' ] self.assertEqual(res,expected) def test_convert_5(self): tile_shape = \ [ "...##...", "..#..#..", "...##...", ".##..##.", "#..##..#", "...##...", "..#..#..", ".##..##." ] res = resize_shape(tile_shape,6,8,"duplicate") expected = \ [ '..##..', '.#..#.', '..##..', '##..##', '..##..', '..##..', '.#..#.', '##..##', ] self.assertEqual(res,expected) def test_convert_6(self): tile_shape = \ [ "...##...", "..#..#..", "...##...", ".##..##.", "#..##..#", "...##...", "..#..#..", ".##..##." ] res = resize_shape(tile_shape,7,8,"duplicate") expected = \ [ '...##..', '..#..#.', '...##..', '.##..##', '#..##..', '...##..', '..#..#.', '.##..##' ] self.assertEqual(res,expected) def test_convert_7(self): tile_shape = \ [ "...##...", "..#..#..", "...##...", ".##..##.", "#..##..#", "...##...", "..#..#..", ".##..##." ] res = resize_shape(tile_shape,6,10,"duplicate") expected = \ [ '..##..', '..##..', '.#..#.', '..##..', '##..##', '..##..', '..##..', '.#..#.', '##..##', '##..##' ] self.assertEqual(res,expected) def test_convert_8(self): tile_shape = \ [ "...##...", "..#..#..", "...##...", ".##..##.", "#..##..#", "...##...", "..#..#..", ".##..##." ] res = resize_shape(tile_shape,6,10,"zero") expected = \ [ '......', '..##..', '.#..#.', '..##..', '##..##', '..##..', '..##..', '.#..#.', '##..##', '......' ] self.assertEqual(res,expected) def test_convert_9(self): tile_shape = \ [ "...##...", "..#..#..", "...##...", ".##..##.", "#..##..#", "...##...", "..#..#..", ".##..##." ] res = resize_shape(tile_shape,8,10,"duplicate") expected = \ [ '...##...', "...##...", "..#..#..", "...##...", ".##..##.", "#..##..#", "...##...", "..#..#..", ".##..##.", '.##..##.' ] self.assertEqual(res,expected) def test_convert_10(self): tile_shape = \ [ "...##...", "..#..#..", "...##...", ".##..##.", "#..##..#", "...##...", "..#..#..", ".##..##." ] res = resize_shape(tile_shape,8,10,"zero") expected = \ [ '........', "...##...", "..#..#..", "...##...", ".##..##.", "#..##..#", "...##...", "..#..#..", ".##..##.", '........' ] self.assertEqual(res,expected) if __name__ == '__main__': unittest.main() ================================================ FILE: src/unit_tests/testStrings.py ================================================ import unittest import sys sys.path.append("modules") from strings import * class testStrings(unittest.TestCase): # no_space def test_no_space_1(self): res = no_space(" ABCDEF GH IJ K L MNOP Q R STUVWXYZ ") expected = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" self.assertEqual(res,expected) # only_upper_digits_and_space def test_only_upper_digits_and_space_1(self): res = only_upper_digits_and_space(" ABCDEF GH IJ K L MNOP Q R STUVWXYZ ") expected = " ABCDEF GH IJ K L MNOP Q R STUVWXYZ " self.assertEqual(res,expected) def test_only_upper_digits_and_space_2(self): res = only_upper_digits_and_space(" AB45678CDEF GH I0123J K L MNOP Q R STUVWXYZ 9 ") expected = " AB45678CDEF GH I0123J K L MNOP Q R STUVWXYZ 9 " self.assertEqual(res,expected) def test_only_upper_digits_and_space_3(self): res = only_upper_digits_and_space("123") expected = "123" self.assertEqual(res,expected) def test_only_upper_digits_and_space_4(self): res = only_upper_digits_and_space("ABC") expected = "ABC" self.assertEqual(res,expected) def test_only_upper_digits_and_space_5(self): res = only_upper_digits_and_space("1_23") expected = "123" self.assertEqual(res,expected) def test_only_upper_digits_and_space_6(self): res = only_upper_digits_and_space("ABabcC") expected = "ABC" self.assertEqual(res,expected) # compute_string def test_compute_string_1(self): res = compute_string("ABC") expected = "_XL_A _XL_B _XL_C" self.assertEqual(res,expected) def test_compute_string_2(self): res = compute_string("abc") expected = "_XL_a _XL_b _XL_c" self.assertEqual(res,expected) def test_compute_string_3(self): res = compute_string("A 1 b") expected = '_XL_A _XL_SPACE "1" _XL_SPACE _XL_b' self.assertEqual(res,expected) def test_compute_string_4(self): res = compute_string("123") expected = '"1" "2" "3"' self.assertEqual(res,expected) def test_compute_string_5(self): res = compute_string(" A 1 b 7") expected = '_XL_SPACE _XL_A _XL_SPACE "1" _XL_SPACE _XL_b _XL_SPACE "7"' self.assertEqual(res,expected) if __name__ == '__main__': unittest.main() ================================================ FILE: src/unit_tests/testTiles.py ================================================ import unittest import sys sys.path.append("modules") from tiles import * class testTiles(unittest.TestCase): # detect_xsize def test_detect_xsize_1(self): res = detect_xsize("vic20") self.assertEqual(res,8) def test_detect_xsize_2(self): res = detect_xsize("oric") self.assertEqual(res,6) def test_detect_xsize_3(self): res = detect_xsize("pecom") self.assertEqual(res,6) def test_detect_xsize_4(self): res = detect_xsize("comx") self.assertEqual(res,6) def test_detect_xsize_5(self): res = detect_xsize("micro") self.assertEqual(res,6) def test_detect_xsize_6(self): res = detect_xsize("atari_lynx") self.assertEqual(res,8) def test_detect_xsize_7(self): res = detect_xsize("apple2") self.assertEqual(res,7) def test_detect_xsize_8(self): res = detect_xsize("apple2enh") self.assertEqual(res,7) def test_detect_xsize_9(self): res = detect_xsize("comx_ntsc") self.assertEqual(res,6) def test_detect_xsize_10(self): res = detect_xsize("micro_ntsc") self.assertEqual(res,6) def test_detect_xsize_11(self): res = detect_xsize("atmos") self.assertEqual(res,6) # detect_ysize def test_detect_ysize_1(self): res = detect_ysize("vic20") self.assertEqual(res,8) def test_detect_ysize_2(self): res = detect_ysize("oric") self.assertEqual(res,8) def test_detect_ysize_3(self): res = detect_ysize("pecom") self.assertEqual(res,9) def test_detect_ysize_4(self): res = detect_ysize("comx") self.assertEqual(res,9) def test_detect_ysize_5(self): res = detect_ysize("micro") self.assertEqual(res,9) def test_detect_ysize_6(self): res = detect_ysize("atari_lynx") self.assertEqual(res,6) def test_detect_ysize_7(self): res = detect_ysize("apple2") self.assertEqual(res,8) def test_detect_ysize_8(self): res = detect_ysize("apple2enh") self.assertEqual(res,8) def test_detect_ysize_9(self): res = detect_ysize("comx_ntsc") self.assertEqual(res,8) def test_detect_ysize_10(self): res = detect_ysize("micro_ntsc") self.assertEqual(res,8) def test_detect_ysize_11(self): res = detect_ysize("atmos") self.assertEqual(res,8) if __name__ == '__main__': unittest.main() ================================================ FILE: src/xl ================================================ #!/usr/bin/env python ''' Main script: - It initialize the configuration object. - It reads the parameters from either the command line or keyboard - It executes the received command ''' import sys import datetime import os #pylint: disable=wrong-import-position sys.path.append("modules") from modules.LoggerSingleton import LoggerSingleton from modules.params import get_params from modules.commands import COMMANDS_LIST from modules.tests import test_make from modules.option_functions import get_config, handle_make from modules.init import handle_parallelism, show_python_version from modules.execute import execute_command from modules.file_functions import list_of_projects from modules.build_functions import build from modules.help_functions import manual #pylint: enable=wrong-import-position logger = LoggerSingleton.initLogger('xl', '../logs') logger.info('Started') def get_gnu_make(config): ''' It determines which make command is available. It modifies the config object. It returns the name of the make executable ''' make_test = test_make(config, silent=True) handle_make(config, make_test) return config.build_config.gnu_make if __name__ == "__main__": option_config = get_config() GNU_MAKE = get_gnu_make(option_config) handle_parallelism(option_config) show_python_version(option_config) params = get_params(option_config) execute_command(option_config, params) logger.info('Finished') os.system('mv ../logs/log.log ../logs/log_' + \ datetime.datetime.now().strftime("%Y-%m-%d_%H_%M_%S")+'.log 2>/dev/null' ) ================================================ FILE: tools/README.txt ================================================ TOOLS All the programs here are third-party tools: - cc65/apple2 ac.jar https://github.com/AppleCommander - cc65/c64 prg2crt.py http://www.frank-buss.de/c64/prg2crt/index.html - cc65/gamate gamate-fixcart.exe https://github.com/cc65/cc65/blob/master/util/gamate/gamate-fixcart.c - cc65/osic1p srec_cat.exe http://srecord.sourceforge.net/ - cmoc/coco file2dsk.exe http://www.colorcomputerarchive.com/coco/Utilities/?fbclid=IwAR2BOfF9KYC1hE8OaBU2vad_Y1iWDCbtX6lvLNIpns7OcpgJlWuqguybH5U - cmoc/dragon bin2cas.pl https://www.6809.org.uk/dragon/ File2VDK.exe https://github.com/rolfmichelsen/dragontools - cmoc/mo5 f2k5.exe http://pulkomandy.tk/projects/thomson/browser/Thomson/tools/ sapfs.exe https://sourceforge.net/p/teoemulator/code/ci/default/tree/tools/sap/ (also in http://pulkomandy.tk/projects/thomson/browser/Thomson/tools/) - gcc libncurses https://www.gnu.org/software/ncurses/ - generic exomizer.exe (my Magnus Lind) https://bitbucket.org/magli143/exomizer/wiki/Home c1541.exe http://vice-emu.sourceforge.net/ - olivetti_m20 m20 ftp://ftp.groessler.org/pub/chris/olivetti_m20/imgtools/m20floppy-0.61.tar.gz - xtc68 424frun1.zip http://www.dilwyn.me.uk/c/index.html - z88dk/abc80 bin2bac2.exe dosgen doscopy - z88dk/cpc nocart/nocart.exe http://www.cpcwiki.eu/index.php/Nocart - z88dk/oz makewzd.exe https://github.com/z88dk/z88dk/blob/master/support/oz/makewzd.c - z88dk/samcoupe pyz80.py https://github.com/simonowen/pyz80 - ea5tocart ea5tocart by Asmusr (from AtariAge) ================================================ FILE: tools/bbc/bbcim-1.0.1/Makefile ================================================ SHELL=/bin/sh # bbcim (Acorn BBC computer disk image manipulation) # # This file is public domain, by W.H.Scholten 1996 - 2001, 2014, 2017 # # -Wall -Wfatal-errors -Wstrict-prototypes -Wmissing-prototypes ALL_CFLAGS=-O2 -g -w INSTALL=$(HOME) all: bbcim bbcim: src/*.c src/*.h $(CC) $(ALL_CFLAGS) -o bbcim src/bbcim.c clean: rm -f bbcim src/*.o doc/bbcim.ps doc/bbcim.pdf rm -f *~ src/*~ doc/*~ core *.core install: all mkdir -p $(INSTALL)/bin/ cp -f bbcim $(INSTALL)/bin/ mkdir -p $(INSTALL)/man/man1/ cp -fp doc/bbcim.1 $(INSTALL)/man/man1/ uninstall: rm -f $(INSTALL)/bin/bbcim $(INSTALL)/man/man1/bbcim.1 postscript: doc/bbcim.ps pdf: doc/bbcim.pdf # // Compile C files to object files. .c.o: $(CC) $(ALL_CFLAGS) -c -o $@ $< # // Compile man pages to postscript/pdf .SUFFIXES: .1 .2 .3 .4 .5 .6 .7 .8 .9 .ps .pdf .1.ps: groff -t -e -mandoc -Tps $< > $@ .ps.pdf: doc/bbcim.ps ps2pdf $< $@ # EOF ================================================ FILE: tools/bbc/bbcim-1.0.1/READ_ME ================================================ bbcim: BBC microcomputer diskimage manipulation program ------------------------------------------------------- Version 1.0.1, 16-4-2017. This is the final version of the original bbcim program that was released way back in 1996, and which was based on a combination of a few separate utility programs that I had released in 1995 to do BBC micro computer diskimage manipulation on a PC which when combined into a single program I expanded with lots of functions. In 2009 I revised the old and trusted 0.95-beta 5 to fix several small issues, the last update being bbcim 0.95-beta 11 which I released on 20 May 2009. After those 6 updates I should have named it 1.0, which after some more cleanups is what I did in 2014, and now I finally decided to support long filenames in the 1.0 branch of bbcim, so this is version 1.0.1 See the file src/bbcim.c for a version history and you can select some compile time changes there too, such as to give messages in Dutch instead of English. For a unix like OS you don't need to change anything there. Making and installing the program: ---------------------------------- To make the program, type: make To make a postscript version of the manual page (directory doc/), type: make postscript To make a pdf version of the manual page (directory doc/), type: make pdf To install in $(HOME)/bin, $(HOME)/man/man1, type: make install To install in a system location such as /usr/local/bin, /usr/local/man, change the Makefile or copy things by hand (e.g.: cp bbcim /usr/local/bin/) Licence: -------- Basically you can do what you want with it as long as you keep the copyright notices in tact, see doc/LICENCE. Email & website: ---------------- W.H.Scholten (swhs-web@xs4all.nl) website: http://wouter.bbcmicro.net/ ================================================ FILE: tools/bbc/bbcim-1.0.1/doc/ARCHIVE_FORMAT-0.83 ================================================ ../../../_shared/_archive_format/ARCHIVE_FORMAT-0.83 ================================================ FILE: tools/bbc/bbcim-1.0.1/doc/LICENCE ================================================ All files not explicitly licenced otherwise are licenced thus: // Copyright (c) W.H. Scholten 1996, 1997, 2009, 2014 // // Permission to use, copy, modify, distribute, and sell this software // and its documentation for any purpose is hereby granted without fee, // provided that the above copyright notice appear in all copies and // that both that copyright notice and this permission notice appear in // supporting documentation, and that the name of the copyright holder // not be used in advertising or publicity pertaining to distribution // of the software without specific, written prior permission. The // copyright holder makes no representations about the suitability of // this software for any purpose. It is provided "as is" without express // or implied warranty. // // THE COPYRIGHT HOLDER DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS // SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND // FITNESS, IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY // SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER // RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF // CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN // CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ================================================ FILE: tools/bbc/bbcim-1.0.1/doc/bbcim.1 ================================================ .\" -*- nroff -*- .\" .\" bbcim. .\" Copyright (C) 1996,2009,2014,2017 W.H.Scholten. .\" .\" This program is free; you may redistribute it and/or modified .\" versions of it if you give me due credit. .\" You may not use part or whole of the source code for any commercial product. .\" .\" 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. .\" .\" .\" bbcim.1 - nroff -man source for bbcim man page. .\" .\" .\" .TH bbcim 1 "1 Sept 1996 - 16 April 2017" "Version 1.0.1" "Utilities" .\" .\"------------------------------------------------------------------ .\" .SH NAME bbcim - bbc computer file conversion utility .\" .\"------------------------------------------------------------------ .\" .SH SYNOPSIS .B bbcim [options] [file(s)] .\" .\"------------------------------------------------------------------ .\" .SH DESCRIPTION bbcim is a file conversion utility to help in transferring files and for use with emulators (Acorn DFS disk image manipulation and more) .SH USE bbcim option [file [{filelist}]] Note that any extension is allowed for disk images. options: .TP .B \-e[s/d,#,b,r] [{list}] extracts files. Without the d or s or # the option -e extracts files from a disk image with filenames like 'imagefile.$.!BOOT'. With every 'bare' file an info file is created containing load- and execution addresses (archive format). .B d extracts the files in a directory named after the disk image: eg. 'imagefile/$.ELITE'. .B s gives short filenames (no leading disk image name). .B # removes the bbc root directory $ and glues other directories to the filename. (name clash is possible but unlikely, eg. E.E and EE, in that case you will be asked whether to rename, overwrite, etc.). Note that I've chosen # instead of $ as this is used as a wildcard character in unix. .B b with this option -e only produces the bare files, and no info files. .B r removes the disk image after extracting files. In all cases a catalogue file 'imagefile.cat' is made except when a list of file names is given, in which case: - only the files in the list are extracted from the disk image - .B r is ignored (change? only remove that file from the disk image?) - a catalogue is not produced. .TP .B -c show catalogue (files in image). .TP .B \-40 expand a disk image to 40 tracks (if current size is smaller than 40 tracks). This changes the disk image size, but more importantly also the DFS filing system size (the number with the number of sectors that's stored in the disk image). So shrinking an 80 track image to 40 track is possible by first using -min, then -40 (if the files fit on 40 tracks). .TP .B \-80 expand a disk image to 80 tracks (if current size is smaller than 80 tracks). This changes the disk image size, but more importantly also the DFS filing system size (see above). .TP .B \-max expand disk image to (almost) 256 K. This changes the disk image size, but more importantly also the DFS filing system size (see above). .TP .B \-min minimise disk image (equal to *COMPACT and cutting off after the last used sector). .TP .B \-crc calculates crc's for all the files in the disk image. .TP .B \-new makes a new (empty) disk image (512 bytes, bootoption EXEC). OBSOLETE (-a creates a new disk image if needed). .TP .B \-a[b,r] {list} add files (in archive format) to the disk image: Automatically skips '.inf' files so bbcim -a disk.bbc * (unix) gives no problems. If the disk image didn't exist a new one will be created. The option 'r' removes the archive files after adding them to the disk image. .I The option 'b' adds files without .inf file (setting load/exec addresses to 0). .TP .B \-d {list} delete the list of files from the disk image. NOTE: files without a bbcdir are assumed to have the root dir, eg. ELITE is assumed to be $.ELITE .TP .B \-interss (sd,dd) interleaves single sided disk images image_0 and image_1 to image_2. .TP .B \-splitds (sd,dd) splits interleaved disk image image to image.0 & image.1. The new names are made by appending .0 and .1. .TP .B \-ddos2dfs splits a single sided DDOS diskdump into several DFS disk images. Eg. myfiles.dd > myfilesA.bbc,..., myfilesH.bbc. The new names are made by appending .A ... .H .TP .B \-w62dfs file[.ext] splits a single sided watford 62 file disk image into 2 DFS disk images (one image if there are less than 32 files on the image) file.w1 & file.w2. .TP .B \-x {list} xbeeb conversion of archive files in the list. .TP .B \-s[#] splits a text file with file information similar to a DFS catalogue, into .inf files. Lines not starting with a bbc (DFS) file name (i.e. dir.name) are skipped. The option # removes the DFS directory $ and glues others to the file name. This can be used to make archive files from an xbeeb directory. .TP .B \-y {list} renames archive/info files to standard format (as produced with # in -e), add's crc's if not found, checks crc's if found. .TP .B \-icrc {list} check crc's of given archive files. .TP .B \-xcrc check crc's of Xbeeb files? .TP .B \-V print version no. .TP .B \-H help (command overview). .SH CURRENT VERSION 1.0.1 .SH NOTES 1. options and files can be entered after starting the programs for all options that do not require a file list. 2. for option -d and -e with a list: 2.1 wildcards are not possible 2.2 names are case sensitive. 3. (see also 2) several files in a disk image can have the same name when using -a (actually useful to get things back to a beeb, no need to rename). .SH POSSIBLE FEATURES OF LATER VERSIONS: .TP .B -e with suboption r should suboption 'r' remove the extracted files? (using -d) .TP .B -id identify diskformat (single/doublesided, dfs/ddos). It's not possible to do this foolproof so I'm not sure. .TP .B -ren rename a file in a diskimage. .TP .B -boot Set the bootoption (to one of: none, LOAD, RUN, EXEC) .TP .B -sect : custom disksize (for DDOS) .P See the website mentioned at the end of this document, for later versions of bbcim. This 1.0 version is the final version of the older 0.95b5 and has been updated to fix a few bugs and cleanup the documentation, esp. the current email address and website, but it will not be enhanced with new features. For those see the later branch 1.1 which is less well tested but has some neat improvements. .SH DESCRIPTION OF THE ARCHIVE FORMAT I.e. the standard format for/of files in the BBC micro archive of software on my website. [ N.B. At the time of writing this down (1997), my BBC archive of software was almost all the software for the BBC micro available on the internet (Robert Schmidt's archive was mostly a mirror of what I put up), and I wanted to get rid of diskimages so you could pick and choose software to put into a disk yourself. So, 'the archive' was my archive of BBC software. ] Complementing the bare bbc file .B $.ELITE is the info file .B $.ELITE.inf , a text file containing '$.ELITE FF0E00 FF8023 Locked CRC=XXXX NEXT $.ELITE2' The name $.ELITE in the info file is optional but if present the files may be renamed to say a and a.inf and $.ELITE is then the real filename. A CRC is included for various reasons (to check fileconversion software, serial- or disk- file transfer to/from a bbc, etc.) The CRC is calculated with the algorithm from the BBC user guide p. 399 (The same algorithm as used in the cassettte and rom filing system). 'Locked' may be abbreviated to 'L'. NEXT may be used for CHAIN"" or *RUN as used on cassette systems. Cassette names are translated to $.cassette_name, (i.e. max 12 chars), otherwise a tape identifier would be needed (e.g. TAPE= at the start of the info file) file length may be included (after the execution address) but is unnecessary. i.e.: [TAPE=tfs_filename / dfs_filename] loadaddress exec address [locked] crc=xxxx [NEXT name]] as tape emulation is only implemented by 6502em (with custom cassette formats?) and as custom cassette formats should be possible (eg. ELITE, FORTRESS), the tape section is mostly irrelevant for the moment (useful for preservation of real names though). .SH BUGS hmm, none? ;-) .SH AUTHOR Wouter Scholten (swhs-web@xs4all.nl) Web page: http://wouter.bbcmicro.net/ ================================================ FILE: tools/bbc/bbcim-1.0.1/doc/bbcim.ps ================================================ %!PS-Adobe-3.0 %%Creator: groff version 1.19.2 %%CreationDate: Sun Apr 16 15:05:12 2017 %%DocumentNeededResources: font Times-Roman %%+ font Times-Bold %%+ font Times-Italic %%DocumentSuppliedResources: procset grops 1.19 2 %%Pages: 4 %%PageOrder: Ascend %%DocumentMedia: Default 612 792 0 () () %%Orientation: Portrait %%EndComments %%BeginDefaults %%PageMedia: Default %%EndDefaults %%BeginProlog %%BeginResource: procset grops 1.19 2 /setpacking where{ pop currentpacking true setpacking }if /grops 120 dict dup begin /SC 32 def /A/show load def /B{0 SC 3 -1 roll widthshow}bind def /C{0 exch ashow}bind def /D{0 exch 0 SC 5 2 roll awidthshow}bind def /E{0 rmoveto show}bind def /F{0 rmoveto 0 SC 3 -1 roll widthshow}bind def /G{0 rmoveto 0 exch ashow}bind def /H{0 rmoveto 0 exch 0 SC 5 2 roll awidthshow}bind def /I{0 exch rmoveto show}bind def /J{0 exch rmoveto 0 SC 3 -1 roll widthshow}bind def /K{0 exch rmoveto 0 exch ashow}bind def /L{0 exch rmoveto 0 exch 0 SC 5 2 roll awidthshow}bind def /M{rmoveto show}bind def /N{rmoveto 0 SC 3 -1 roll widthshow}bind def /O{rmoveto 0 exch ashow}bind def /P{rmoveto 0 exch 0 SC 5 2 roll awidthshow}bind def /Q{moveto show}bind def /R{moveto 0 SC 3 -1 roll widthshow}bind def /S{moveto 0 exch ashow}bind def /T{moveto 0 exch 0 SC 5 2 roll awidthshow}bind def /SF{ findfont exch [exch dup 0 exch 0 exch neg 0 0]makefont dup setfont [exch/setfont cvx]cvx bind def }bind def /MF{ findfont [5 2 roll 0 3 1 roll neg 0 0]makefont dup setfont [exch/setfont cvx]cvx bind def }bind def /level0 0 def /RES 0 def /PL 0 def /LS 0 def /MANUAL{ statusdict begin/manualfeed true store end }bind def /PLG{ gsave newpath clippath pathbbox grestore exch pop add exch pop }bind def /BP{ /level0 save def 1 setlinecap 1 setlinejoin 72 RES div dup scale LS{ 90 rotate }{ 0 PL translate }ifelse 1 -1 scale }bind def /EP{ level0 restore showpage }def /DA{ newpath arcn stroke }bind def /SN{ transform .25 sub exch .25 sub exch round .25 add exch round .25 add exch itransform }bind def /DL{ SN moveto SN lineto stroke }bind def /DC{ newpath 0 360 arc closepath }bind def /TM matrix def /DE{ TM currentmatrix pop translate scale newpath 0 0 .5 0 360 arc closepath TM setmatrix }bind def /RC/rcurveto load def /RL/rlineto load def /ST/stroke load def /MT/moveto load def /CL/closepath load def /Fr{ setrgbcolor fill }bind def /setcmykcolor where{ pop /Fk{ setcmykcolor fill }bind def }if /Fg{ setgray fill }bind def /FL/fill load def /LW/setlinewidth load def /Cr/setrgbcolor load def /setcmykcolor where{ pop /Ck/setcmykcolor load def }if /Cg/setgray load def /RE{ findfont dup maxlength 1 index/FontName known not{1 add}if dict begin { 1 index/FID ne{def}{pop pop}ifelse }forall /Encoding exch def dup/FontName exch def currentdict end definefont pop }bind def /DEFS 0 def /EBEGIN{ moveto DEFS begin }bind def /EEND/end load def /CNT 0 def /level1 0 def /PBEGIN{ /level1 save def translate div 3 1 roll div exch scale neg exch neg exch translate 0 setgray 0 setlinecap 1 setlinewidth 0 setlinejoin 10 setmiterlimit []0 setdash /setstrokeadjust where{ pop false setstrokeadjust }if /setoverprint where{ pop false setoverprint }if newpath /CNT countdictstack def userdict begin /showpage{}def /setpagedevice{}def }bind def /PEND{ countdictstack CNT sub{end}repeat level1 restore }bind def end def /setpacking where{ pop setpacking }if %%EndResource %%BeginFeature: *PageSize Default << /PageSize [ 612 792 ] /ImagingBBox null >> setpagedevice %%EndFeature %%IncludeResource: font Times-Roman %%IncludeResource: font Times-Bold %%IncludeResource: font Times-Italic grops begin/DEFS 1 dict def DEFS begin/u{.001 mul}bind def end/RES 72 def/PL 792 def/LS false def/ENC0[/asciicircum/asciitilde/Scaron/Zcaron /scaron/zcaron/Ydieresis/trademark/quotesingle/Euro/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/space/exclam/quotedbl/numbersign/dollar/percent /ampersand/quoteright/parenleft/parenright/asterisk/plus/comma/hyphen /period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon /semicolon/less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O /P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright/circumflex /underscore/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y /z/braceleft/bar/braceright/tilde/.notdef/quotesinglbase/guillemotleft /guillemotright/bullet/florin/fraction/perthousand/dagger/daggerdbl /endash/emdash/ff/fi/fl/ffi/ffl/dotlessi/dotlessj/grave/hungarumlaut /dotaccent/breve/caron/ring/ogonek/quotedblleft/quotedblright/oe/lslash /quotedblbase/OE/Lslash/.notdef/exclamdown/cent/sterling/currency/yen /brokenbar/section/dieresis/copyright/ordfeminine/guilsinglleft /logicalnot/minus/registered/macron/degree/plusminus/twosuperior /threesuperior/acute/mu/paragraph/periodcentered/cedilla/onesuperior /ordmasculine/guilsinglright/onequarter/onehalf/threequarters /questiondown/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE /Ccedilla/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex /Idieresis/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis /multiply/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn /germandbls/agrave/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla /egrave/eacute/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis /eth/ntilde/ograve/oacute/ocircumflex/otilde/odieresis/divide/oslash /ugrave/uacute/ucircumflex/udieresis/yacute/thorn/ydieresis]def /Times-Italic@0 ENC0/Times-Italic RE/Times-Bold@0 ENC0/Times-Bold RE /Times-Roman@0 ENC0/Times-Roman RE %%EndProlog %%Page: 1 1 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF 178.725(bbcim\(1\) Utilities bbcim\(1\))72 48 R /F1 10.95/Times-Bold@0 SF -.219(NA)72 84 S(ME).219 E F0 (bbcim - bbc computer \214le con)108 96 Q -.15(ve)-.4 G(rsion utility) .15 E F1(SYNOPSIS)72 112.8 Q/F2 10/Times-Bold@0 SF -.1(bb)108 124.8 S (cim [options] [\214le\(s\)]).1 E F1(DESCRIPTION)72 141.6 Q F0 .823 (bbcim is a \214le con)108 153.6 R -.15(ve)-.4 G .822(rsion utility to \ help in transferring \214les and for use with emulators \(Acorn DFS dis\ k).15 F(image manipulation and more\))108 165.6 Q F1(USE)72 182.4 Q F0 2.5(bbcim option)108 194.4 R([\214le [{\214lelist}]])2.5 E(Note that an) 108 218.4 Q 2.5(ye)-.15 G(xtension is allo)-2.65 E(wed for disk images.) -.25 E(options:)108 242.4 Q F2(\255e[s/d,#,b,r] [{list}]) 108 259.2 Q F0 -.15(ex)144 271.2 S .34(tracts \214les.).15 F -.4(Wi)5.34 G .34(thout the d or s or # the option -e e).4 F .34 (xtracts \214les from a disk image with \214lenames)-.15 F(lik)144 283.2 Q 2.792(e')-.1 G(image\214le.$.!BOO)-2.792 E .292(T'. W)-.4 F .292 (ith e)-.4 F -.15(ve)-.25 G .291 (ry 'bare' \214le an info \214le is created containing load- and e).15 F -.15(xe)-.15 G(cu-).15 E .51(tion addresses \(archi)144 295.2 R .81 -.15 (ve f)-.25 H(ormat\).).15 E F2(d)5.51 E F0 -.15(ex)3.01 G .511 (tracts the \214les in a directory named after the disk image: e).15 F (g.)-.15 E('image\214le/$.ELITE'.)144 307.2 Q F2(s)6.118 E F0(gi)3.618 E -.15(ve)-.25 G 3.618(ss).15 G 1.118 (hort \214lenames \(no leading disk image name\).)-3.618 F F2(#)6.117 E F0(remo)3.617 E -.15(ve)-.15 G 3.617(st).15 G 1.117(he bbc)-3.617 F .929 (root directory $ and glues other directories to the \214lename. \(name\ clash is possible b)144 319.2 R .93(ut unlik)-.2 F(ely)-.1 E(,)-.65 E -.15(eg)144 331.2 S 3.075(.E).15 G .575 (.E and EE, in that case you will be ask)-3.075 F .575 (ed whether to rename, o)-.1 F -.15(ve)-.15 G .575 (rwrite, etc.\). Note that I').15 F -.15(ve)-.5 G .036 (chosen # instead of $ as this is used as a wildcard character in unix.) 144 343.2 R F2(b)5.037 E F0 .037(with this option -e only pro-)2.537 F (duces the bare \214les, and no info \214les.)144 355.2 Q F2(r)5 E F0 (remo)2.5 E -.15(ve)-.15 G 2.5(st).15 G(he disk image after e)-2.5 E (xtracting \214les.)-.15 E 1.109 (In all cases a catalogue \214le 'image\214le.cat' is made e)144 379.2 R 1.108(xcept when a list of \214le names is gi)-.15 F -.15(ve)-.25 G 1.108(n, in).15 F(which case:)144 391.2 Q 2.5(-o)146.5 403.2 S (nly the \214les in the list are e)-2.5 E(xtracted from the disk image) -.15 E(-)146.5 415.2 Q F2(r)2.5 E F0(is ignored \(change? only remo)2.5 E .3 -.15(ve t)-.15 H(hat \214le from the disk image?\)).15 E 2.5(-ac) 146.5 427.2 S(atalogue is not produced.)-2.5 E F2(-c )108 444 Q F0(sho)144 456 Q 2.5(wc)-.25 G(atalogue \(\214les in image\).)-2.5 E F2(\25540 )108 472.8 Q F0 -.15(ex)144 484.8 S .546(pand a\ disk image to 40 tracks \(if current size is smaller than 40 tracks\).\ This changes the disk).15 F .476(image size, b)144 496.8 R .476(ut mor\ e importantly also the DFS \214ling system size \(the number with the n\ umber of)-.2 F .597(sectors that')144 508.8 R 3.097(ss)-.55 G .597(tore\ d in the disk image\). So shrinking an 80 track image to 40 track is po\ ssible by)-3.097 F (\214rst using -min, then -40 \(if the \214les \214t on 40 tracks\).)144 520.8 Q F2(\25580 )108 537.6 Q F0 -.15(ex)144 549.6 S .546(\ pand a disk image to 80 tracks \(if current size is smaller than 80 tra\ cks\). This changes the disk).15 F(image size, b)144 561.6 Q (ut more importantly also the DFS \214ling system size \(see abo)-.2 E -.15(ve)-.15 G(\).).15 E F2(\255max )108 578.4 Q F0 -.15(ex) 144 590.4 S .191(pand disk image to \(almost\) 256 K. This changes the \ disk image size, b).15 F .191(ut more importantly also)-.2 F (the DFS \214ling system size \(see abo)144 602.4 Q -.15(ve)-.15 G(\).) .15 E F2(\255min )108 619.2 Q F0 (minimise disk image \(equal to *COMP)144 631.2 Q -.4(AC)-.92 G 2.5(Ta) .4 G(nd cutting of)-2.5 E 2.5(fa)-.25 G(fter the last used sector\).) -2.5 E F2(\255cr)108 648 Q 2.5(c<)-.18 G(disk image>)-2.5 E F0 (calculates crc')144 660 Q 2.5(sf)-.55 G (or all the \214les in the disk image.)-2.5 E F2(\255new ) 108 676.8 Q F0(mak)144 688.8 Q .814(es a ne)-.1 F 3.314(w\()-.25 G .814 (empty\) disk image \(512 bytes, bootoption EXEC\).)-3.314 F .813 (OBSOLETE \(-a creates a ne)5.813 F(w)-.25 E(disk image if needed\).)144 700.8 Q -1.11(Ve)72 768 S(rsion 1.0.1)1.11 E 2.5(1S)124.84 G (ept 1996 - 16 April 2017)-2.5 E(1)172.89 E 0 Cg EP %%Page: 2 2 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF 178.725(bbcim\(1\) Utilities bbcim\(1\))72 48 R /F1 10/Times-Bold@0 SF(\255a[b,r] {list})108 84 Q F0 .02 (add \214les \(in archi)144 96 R .32 -.15(ve f)-.25 H .021 (ormat\) to the disk image: Automatically skips '.inf).15 F 2.521<278c> .55 G .021(les so bbcim -a disk.bbc)-2.521 F 2.707(*\()144 108 S .207 (unix\) gi)-2.707 F -.15(ve)-.25 G 2.707(sn).15 G 2.707(op)-2.707 G .207 (roblems. If the disk image didn')-2.707 F 2.707(te)-.18 G .207 (xist a ne)-2.857 F 2.707(wo)-.25 G .207 (ne will be created. The option ')-2.707 F(r')-.5 E(remo)144 120 Q -.15 (ve)-.15 G 2.508(st).15 G .008(he archi)-2.508 F .308 -.15(ve \214)-.25 H .009(les after adding them to the disk image.).15 F/F2 10 /Times-Italic@0 SF .009(The option 'b' adds \214les without .inf)4.919 F (\214le)144 132 Q F0(\(setting load/e)2.68 E -.15(xe)-.15 G 2.5(ca).15 G (ddresses to 0\).)-2.5 E F1(\255d {list})108 148.8 Q F0 .47 (delete the list of \214les from the disk image.)144 160.8 R(NO)5.47 E .47(TE: \214les without a bbcdir are assumed to ha)-.4 F .77 -.15(ve t) -.2 H(he).15 E(root dir)144 172.8 Q 2.5(,e)-.4 G (g. ELITE is assumed to be $.ELITE)-2.65 E F1 (\255interss \(sd,dd\) )108 189.6 Q F0 (interlea)144 201.6 Q -.15(ve)-.2 G 2.5(ss).15 G (ingle sided disk images image_0 and image_1 to image_2.)-2.5 E F1 (\255splitds \(sd,dd\) )108 218.4 Q F0 .184(splits interlea)144 230.4 R -.15(ve)-.2 G 2.684(dd).15 G .185 (isk image image to image.0 & image.1. The ne)-2.684 F 2.685(wn)-.25 G .185(ames are made by appending)-2.685 F(.0 and .1.)144 242.4 Q F1 (\255ddos2dfs )108 259.2 Q F0 4.096 (splits a single sided DDOS diskdump into se)144 271.2 R -.15(ve)-.25 G 4.096(ral DFS disk images.).15 F 4.096(Eg. my\214les.dd >)9.096 F (my\214lesA.bbc,..., my\214lesH.bbc. The ne)144 283.2 Q 2.5(wn)-.25 G (ames are made by appending .A ... .H)-2.5 E F1(\255w62dfs \214le[.ext]) 108 300 Q F0 .191(splits a single sided w)144 312 R .191(atford 62 \214\ le disk image into 2 DFS disk images \(one image if there are less)-.1 F (than 32 \214les on the image\) \214le.w1 & \214le.w2.)144 324 Q F1 (\255x {list})108 352.8 Q F0(xbeeb con)144 364.8 Q -.15(ve)-.4 G (rsion of archi).15 E .3 -.15(ve \214)-.25 H(les in the list.).15 E F1 (\255s[#] <\214le>)108 381.6 Q F0 .59(splits a te)144 393.6 R .59(xt \ \214le with \214le information similar to a DFS catalogue, into .inf \ \214les. Lines not starting)-.15 F .39 (with a bbc \(DFS\) \214le name \(i.e. dir)144 405.6 R .39 (.name\) are skipped. The option # remo)-.55 F -.15(ve)-.15 G 2.89(st) .15 G .39(he DFS directory $)-2.89 F (and glues others to the \214le name. This can be used to mak)144 417.6 Q 2.5(ea)-.1 G(rchi)-2.5 E .3 -.15(ve \214)-.25 H (les from an xbeeb directory).15 E(.)-.65 E F1(\255y {list})108 434.4 Q F0 .752(renames archi)144 446.4 R -.15(ve)-.25 G .752 (/info \214les to standard format \(as produced with # in -e\), add').15 F 3.252(sc)-.55 G(rc')-3.252 E 3.252(si)-.55 G 3.251(fn)-3.252 G .751 (ot found,)-3.251 F(checks crc')144 458.4 Q 2.5(si)-.55 G 2.5(ff)-2.5 G (ound.)-2.5 E F1(\255icr)108 475.2 Q 2.5(c{)-.18 G(list})-2.5 E F0 (check crc')144 487.2 Q 2.5(so)-.55 G 2.5(fg)-2.5 G -2.15 -.25(iv e)-2.5 H 2.5(na).25 G(rchi)-2.5 E .3 -.15(ve \214)-.25 H(les.).15 E F1(\255xcr) 108 504 Q(c)-.18 E F0(check crc')12.16 E 2.5(so)-.55 G 2.5(fX)-2.5 G (beeb \214les?)-2.5 E F1108 520.8 Q F0(print v)23.08 E(ersion no.) -.15 E F1108 537.6 Q F0(help \(command o)22.52 E -.15(ve)-.15 G (rvie).15 E(w\).)-.25 E/F3 10.95/Times-Bold@0 SF(CURRENT VERSION)72 578.4 Q F0(1.0)110.5 590.4 Q F3(NO)72 619.2 Q(TES)-.438 E F0(1. options\ and \214les can be entered after starting the programs for all options\ that do not require a \214le list.)108 631.2 Q (2. for option -d and -e with a list:)108 655.2 Q (2.1 wildcards are not possible)113 667.2 Q(2.2 names are case sensiti) 113 679.2 Q -.15(ve)-.25 G(.).15 E .77(3. \(see also 2\) se)108 703.2 R -.15(ve)-.25 G .77(ral \214les in a disk image can ha).15 F 1.07 -.15 (ve t)-.2 H .77(he same name when using -a \(actually useful to get).15 F(things back to a beeb, no need to rename\).)108 715.2 Q -1.11(Ve)72 768 S(rsion 1.0.1)1.11 E 2.5(1S)124.84 G(ept 1996 - 16 April 2017)-2.5 E (2)172.89 E 0 Cg EP %%Page: 3 3 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF 178.725(bbcim\(1\) Utilities bbcim\(1\))72 48 R /F1 10.95/Times-Bold@0 SF(POSSIBLE FEA)72 84 Q(TURES OF LA)-1.04 E (TER VERSIONS:)-1.04 E/F2 10/Times-Bold@0 SF(-e with suboption r)108 96 Q F0(should suboption ')144 108 Q(r' remo)-.5 E .3 -.15(ve t)-.15 H (he e).15 E(xtracted \214les? \(using -d\))-.15 E F2(-id)108 124.8 Q F0 .313(identify diskformat \(single/doublesided, dfs/ddos\). It')24.33 F 2.812(sn)-.55 G .312(ot possible to do this foolproof so I'm not)-2.812 F(sure.)144 136.8 Q F2(-r)108 153.6 Q(en)-.18 E F0 (rename a \214le in a diskimage.)18.41 E F2(-boot )108 170.4 Q F0(Set the bootoption \(to one of: none, LO)144 182.4 Q(AD, R)-.35 E (UN, EXEC\))-.4 E F2(-sect : custom disksize \(f)108 199.2 Q (or DDOS\))-.25 E F0 .503 (See the website mentioned at the end of this document, for later v)108 228 R .504(ersions of bbcim. This 1.0 v)-.15 F .504(ersion is the)-.15 F .951(\214nal v)108 240 R .951 (ersion of the older 0.95b5 and has been updated to \214x a fe)-.15 F 3.45(wb)-.25 G .95(ugs and cleanup the documentation,)-3.65 F .345 (esp. the current email address and website, b)108 252 R .346 (ut it will not be enhanced with ne)-.2 F 2.846(wf)-.25 G .346 (eatures. F)-2.846 F .346(or those see the)-.15 F (later branch 1.1 which is less well tested b)108 264 Q (ut has some neat impro)-.2 E -.15(ve)-.15 G(ments.).15 E F1 (DESCRIPTION OF THE ARCHIVE FORMA)72 304.8 Q(T)-1.04 E F0 (I.e. the standard format for/of \214les in the BBC micro archi)108 316.8 Q .3 -.15(ve o)-.25 H 2.5(fs).15 G(oftw)-2.5 E(are on my website.) -.1 E 2.57([N)108 340.8 S 2.57(.B. At)-2.57 F 2.57(the time)2.57 F .07 (of writing)2.57 F .07(this do)5.07 F 2.57(wn \(1997\),)-.25 F .07 (my BBC)2.57 F(archi)5.07 E .37 -.15(ve o)-.25 H 2.57(fs).15 G(oftw) -2.57 E .07(are w)-.1 F 2.57(as almost)-.1 F .07(all the softw)2.57 F (are)-.1 E .428(for the BBC)108 352.8 R .429(micro a)5.429 F -.25(va)-.2 G .429(ilable on the internet \(Robert).25 F(Schmidt')5.429 E 2.929(sa) -.55 G(rchi)-2.929 E .729 -.15(ve w)-.25 H .429(as mostly a).05 F .429 (mirror of what I put)5.429 F .316(up\), and I)108 364.8 R -.1(wa)5.316 G .315(nted to get rid of diskimages so).1 F .315 (you could pick and choose softw)5.315 F .315(are to put into a)-.1 F .315(disk your)5.315 F(-)-.2 E(self. So, ')108 376.8 Q(the archi)-.18 E -.15(ve)-.25 G 2.5('w).15 G(as my archi)-2.6 E .3 -.15(ve o)-.25 H 2.5 (fB).15 G(BC softw)-2.5 E(are. ])-.1 E 1.088 (Complementing the bare bbc \214le)108 400.8 R F2($.ELITE)3.589 E F0 1.089(is the info \214le)3.589 F F2($.ELITE.inf)3.589 E F0 3.589(,at) 3.589 G -.15(ex)-3.589 G 3.589<748c>.15 G 1.089(le containing '$.ELITE) -3.589 F(FF0E00 FF8023 Lock)108 412.8 Q(ed CRC=XXXX NEXT $.ELITE2')-.1 E .28(The name $.ELITE in the info \214le is optional b)108 436.8 R .279 (ut if present the \214les may be renamed to say a and a.inf and)-.2 F ($.ELITE is then the real \214lename.)108 448.8 Q 4.587(AC)108 472.8 S 2.087(RC is included for v)-4.587 F 2.087 (arious reasons \(to check \214lecon)-.25 F -.15(ve)-.4 G 2.087 (rsion softw).15 F 2.088(are, serial- or disk- \214le transfer)-.1 F .605(to/from a bbc, etc.\) The CRC is calculated with the algorithm fro\ m the BBC user guide p. 399 \(The same)108 484.8 R (algorithm as used in the cassettte and rom \214ling system\).)108 496.8 Q .744(NEXT may be used for CHAIN"" or *R)108 532.8 R .744 (UN as used on cassette systems. Cassette names are translated to)-.4 F .048($.cassette_name, \(i.e. max 12 chars\), otherwise a tape identi\ \214er w)108 544.8 R .048(ould be needed \(e.g. T)-.1 F .048 (APE= at the start of)-.93 F(the info \214le\))108 556.8 Q (\214le length may be included \(after the e)108 580.8 Q -.15(xe)-.15 G (cution address\) b).15 E(ut is unnecessary)-.2 E(.)-.65 E 1.483 (i.e.: [T)108 604.8 R 1.483 (APE=tfs_\214lename / dfs_\214lename] loadaddress e)-.93 F -.15(xe)-.15 G 3.984(ca).15 G 1.484(ddress [lock)-3.984 F 1.484 (ed] crc=xxxx [NEXT name]] as)-.1 F 1.198(tape emulation is only implem\ ented by 6502em \(with custom cassette formats?\))108 616.8 R 1.197 (and as custom cassette)6.198 F .459(formats should)108 628.8 R .459 (be possible \(e)5.459 F .459(g. ELITE, FOR)-.15 F .459 (TRESS\), the tape section is mostly irrele)-.6 F -.25(va)-.25 G .46 (nt for the moment).25 F(\(useful for preserv)108 640.8 Q (ation of real names though\).)-.25 E F1 -.11(BU)72 693.6 S(GS).11 E F0 (hmm, none? ;-\))108 705.6 Q -1.11(Ve)72 768 S(rsion 1.0.1)1.11 E 2.5 (1S)124.84 G(ept 1996 - 16 April 2017)-2.5 E(3)172.89 E 0 Cg EP %%Page: 4 4 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF 178.725(bbcim\(1\) Utilities bbcim\(1\))72 48 R /F1 10.95/Times-Bold@0 SF -.548(AU)72 84 S(THOR).548 E F0 -.8(Wo)108 96 S(uter Scholten \(swhs-web@xs4all.nl\)).8 E -.8(We)108 120 S 2.5(bp).8 G (age: http://w)-2.5 E(outer)-.1 E(.bbcmicro.net/)-.55 E -1.11(Ve)72 768 S(rsion 1.0.1)1.11 E 2.5(1S)124.84 G(ept 1996 - 16 April 2017)-2.5 E(4) 172.89 E 0 Cg EP %%Trailer end %%EOF ================================================ FILE: tools/bbc/bbcim-1.0.1/src/archief.c ================================================ /* archief.c, Copyright (c) W.H.Scholten 1996-2014, 2017 * Deel van bbcim >=0.80 * cleans up the info file and renames (should rename be optional?) *last update 23/6/96. */ void cleanup(int argc, char *argv[], int options) { FILE *fpadd, *fpinfo; char infofile[256]; unsigned long loadaddress, execaddress; int addfiles,l, antwoord; char bbcfile_naam[13], unix_bbcfile_naam[13], nieuwe_info[256]; char nieuwe_naam[256]; char rest_string[256]; int found, len_s, i; unsigned int crc; /* archive file conversion without list not implemented: // if ((argc-options)<3) // { // #ifdef MESSAGES_NL // printf("Naam van het om te zetten archief bestand?"); // #else // printf("Name of the archive file to be ?"); // #endif // scanf("%50s", addfile); // } else strcpy(addfile, argv[2+options]); */ if ((argc-options) < 2) { #ifdef MESSAGES_NL printf("Geen lijst van archief bestanden meegegeven\n"); #else printf("No archive file list given\n"); #endif exit(1); } for(addfiles=2; addfiles4) { if (!strncmp(argv[addfiles]+l-4,".inf",4)) continue; } strcpy(infofile,argv[addfiles]); strcat(infofile,".inf"); /* BESTAAT HET INFO BESTAND? */ fpinfo=fopen(infofile, "r"); if (fpinfo==NULL) { #ifdef MESSAGES_NL printf("Info bestand %s kan niet geopend worden, sla over\n", infofile); #else printf("Info file %s cannot be opened, skipping file\n", infofile); #endif continue; } /* BESTAAT HET ARCHIEF BESTAND? */ fpadd=fopen(argv[addfiles], "rb"); if (fpadd==NULL) { #ifdef MESSAGES_NL printf("Archief bestand %s kan niet geopend worden\n", argv[addfiles]); #else printf("Archive file %s cannot be opened\n", argv[addfiles]); #endif continue; } fclose(fpadd); /* UIT HET inf BESTAND (EVT) DE BESTANDSNAAM HALEN. */ #if 0 fscanf(fpinfo,"%12s %lx %lx", bbcfile_naam, &loadaddress, &execaddress); fseek(fpinfo,0L,0); fgets(rest_string, 99, fpinfo); fclose(fpinfo); bbcfile_naam[9]=0; if (bbcfile_naam[1]!='.') { strcpy(bbcfile_naam, argv[addfiles]); fseek(fpinfo, 0L, SEEK_SET); fscanf(fpinfo,"%lx %lx", &loadaddress, &execaddress); } #else fscanf(fpinfo,"%12s", bbcfile_naam); if (bbcfile_naam[1]!='.') { strncpy(bbcfile_naam, argv[addfiles],12); fseek(fpinfo, 0L, SEEK_SET); } bbcfile_naam[9]=0; fscanf(fpinfo,"%lx %lx", &loadaddress, &execaddress); fgets(rest_string, 99, fpinfo); fclose(fpinfo); #endif reduceer_unix_naam(unix_bbcfile_naam, bbcfile_naam); /* HERNOEMEN ETC ALS NAAM AL BESTAAT */ strcpy(nieuwe_naam, unix_bbcfile_naam); if (strcmp(argv[addfiles], unix_bbcfile_naam)) { if ((fpadd=fopen(unix_bbcfile_naam, "rb"))!=NULL) { fclose(fpadd); antwoord=overschrijf_vraag(argv[addfiles], nieuwe_naam); switch(antwoord) { case OVERSCHRIJVEN: rename(argv[addfiles], unix_bbcfile_naam); break; case HERNOEM_NIEUW: strcpy(unix_bbcfile_naam, nieuwe_naam); rename(argv[addfiles], unix_bbcfile_naam); break; case HERNOEM_BESTAAND: rename(unix_bbcfile_naam, nieuwe_naam); strcat(nieuwe_naam, ".inf"); rename(infofile, nieuwe_naam); rename(argv[addfiles], unix_bbcfile_naam); break; case SLA_OVER: continue; } /*switch*/ } else rename(argv[addfiles], unix_bbcfile_naam); } /*if*/ strcpy(nieuwe_info,unix_bbcfile_naam); strcat(nieuwe_info,".inf"); found=0; len_s=strlen(rest_string); printf("Bestand %-9s (%-9s) CRC ", argv[addfiles], bbcfile_naam); for (i=0; i4) if (!strncmp(argv[archivefile]+l-4,".inf",4)) continue; strcpy(infofile,argv[archivefile]); strcat(infofile,".inf"); /* Bestaat het info bestand? */ fpinfo=fopen(infofile, "r"); if (fpinfo==NULL) { #ifdef MESSAGES_NL printf("Info bestand %s kan niet geopend worden, sla over\n", infofile); #else printf("Info file %s cannot be opened, skipping file\n", infofile); #endif continue; } /* Bestaat het archief bestand? */ fparchive=fopen(argv[archivefile], "rb"); if (fparchive==NULL) { #ifdef MESSAGES_NL printf("Archief bestand %s kan niet geopend worden\n", argv[archivefile]); #else printf("Archive file %s cannot be opened\n", argv[archivefile]); #endif continue; } fclose(fparchive); /* uit het .inf bestand de bestandsnaam halen. */ fscanf(fpinfo,"%12s", bbc_naam); if (bbc_naam[1]!='.') strncpy(bbc_naam, argv[archivefile],12); bbc_naam[9]=0; /* CRC zoeken */ fseek(fpinfo,0L,0); fgets(read_line, 99, fpinfo); found=0; len_s=strlen(read_line); printf("bestand %-9s (%-9s) CRC ", argv[archivefile],bbc_naam); for (i=0; i0;i--) { if (bbc_file[i]!=' ') break; bbc_file[i]=0; } found=0; len_s=strlen(read_line); #ifdef MESSAGES_NL printf("bestand %-9s CRC ", bbc_file); for (i=0; is, info file is now added by default, b=bare. Changes in 0.93-beta (9-3-97): + code cleaned up with explicit type conversions + added code to replace characters in filenames (usually not needed in linux); e.g. '/' gives problems. + Help in english Changes in 0.94-beta (16-3-97): c w62 conversion now included in bbcim. Changes in 0.95-beta (30-6-97 - 4-7-97): c w62 conversion: if there are less than 32 files, only one diskimage is made. c disknames without a . didn't extract with -ed (as the dir name was equal to the diskimage name). Added a rename. c cleaned up 'mkdir' selection. You now have 3 choices. + Config additions: bbcim now compiles on other OS'es without changes. c bugfix: -s# works again (no idea when it got broken). Bugs and 'features': - several files in a diskimage can have the same name (can be useful) (i.e. -a doesn't overwrite) - -e: name checking in diskimage is case dependant. If in doubt: it's not a bug, it is a feature! 0.95-beta6 (20-4-2009): c various message/documentation cleanups and references to the new webpages, some fixes for newer compilers, etc.: + Makefile added c naming scheme as in bbcim 0.105. No more removal of a file extension to be replaced by a new one, which was useful for DOS. E.g. 'bbcim -ed alpha.ssd' puts files in a directory 'alpha.ssd.d/'. bbcim -e alpha.ssd gives names such as alpha.ssd.$.!BOOT c source code indentation cleanups (from old gnu style 2-spaces to 1 tab) and some message changes. 0.95-beta7 (21-4-2009): c -splitds checks for the correct density (sectors/track) argument. 0.95-beta8 (3-5-2009): c small improvements to the man page and cleanup of the source code (all re-indented with tabs). c Makefile target 'install' also includes 'all' so 'make install' works if you haven't done a 'make' first. 0.95-beta9 (6-5-2009): c small source cleanups. 0.95-beta10 (14-5-2009): c a few changes using string literals in fprintf as suggested by clang's output. 0.95-beta11 (21-5-2009): c a few changes in the Makefile. Installation locations are now local in $(HOME)/bin/ and $(HOME)/man/man1/ 1.0 (26-1-2014): c Put the source code files into a directory src/ c Added a note about the experimental branch (renamed the latest version at this time from 0.107 to 1.1) in the man page. c Changed the define NL to MESSAGES_NL in case you want the text output in Dutch. c Licence is now MIT type, so basically you can do what you want with the software. See doc/LICENCE. c Cleaned up some of the comments in the code and translated a few from Dutch to English. c Before an error print the BBCIM version number and website. c Changed the version number from 0.95b11 to 1.0 1.0.1 (16-4-2017): c support long filenames (up to 255 chars) */ #define VERSION "1.0.1 (16 April 2017)" /*************** CONFIGURATION *********************/ /* Set this define for Dutch messages: */ /*#define MESSAGES_NL*/ #define UNIX_MKDIR /* Make directory: UNIX_MKDIR, MAC_MKDIR, or SYSTEM_MKDIR (using system("mkdir.."); ) */ /* #define NO_COMMAND_LINE */ /* If you can't give parameters on the command line use this (this was meant, in 1997) for Macs. However now that Macs use a unix-like system with terminals available, this may be useless. */ /* Characters to be replaced in filenames (on the host system, not the original BBC filenames in the .inf files): Most filing systems can't handle all characters from bbc filenames (esp. '/' and '\'). Replacing them and a few more to make it easier seems prudent :) Add whatever you need for your system. */ char filenamechar_bad[] = { '\\', '/', ':', '*', '?', '\"', '<', '>', '|', '`', '\'' }; char filenamechar_replace[] = { '_' , '_', '_', '_', '_', '_' , '_', '_', '_', '_', '_' }; /************ END OF CONFIGURATION ***********************/ #include #include #include #ifdef MAC_MKDIR #include #endif #ifdef UNIX_MKDIR #include // #include // #include #endif #ifdef SYSTEM_MKDIR #endif /* Should use this in various places: #include struct stat file_stat; if (stat(filename, file_stat)<0) perror("can't open file\n"); */ /* Defines */ /* Byte offsets in disk image */ #define DFStitle0_7 0 #define DFStitle8_11 256 #define DFSaccessct (256+4) #define DFSentries (256+5) #define DFSbootsec (256+6) #define DFSsectondiskL (256+7) /*next offsets +n*8 for each file */ #define DFSfilename 8 #define DFSdirectory 0x0f #define DFSloadaddrL (256+8) #define DFSloadaddrM (256+9) #define DFSexecaddrL (256+0x0a) #define DFSexecaddrM (256+0x0b) #define DFSlengthL (256+0x0c) #define DFSlengthM (256+0x0d) #define DFSeellddss (256+0x0e) #define DFSstartsecL (256+0x0f) /* Prototypes: */ int rename_sequential(char *naam); int overschrijf_vraag(char *oude_naam, char *nieuwe_naam); void cleanup(int argc, char *argv[], int options); unsigned int fcrc(char *bestand); void icrc(int argc, char *argv[], int options); void xcrc(int argc, char *argv[], int options); void ddos2dfs(int argc, char *argv[], int options); void add_to_image(char *disk, int options, int argc, char *argv[], int remove_file, int use_infofiles); void del_from_image(int argc, char *argv[], int options); void expand_image(char *disk, int expand); void interss(int argc, char *argv[], int options); void splitds(int argc, char *argv[], int options); void minimise_image(char *disk); void new_image(char *disk, unsigned int size); void split_cat(int argc, char *argv[],int options, char *optread_line); int w62dfs(int argc, char *argv[], int options); void xbeeb(int argc, char *argv[], int options); /* NB invoer en bbcnaam mogen niet zelfde string zijn */ /* void invoer_naar_bbcnaam(char *invoer, char *bbcnaam) { if (invoer[1]=='.') strncpy(bbcnaam, invoer,9); else { bbcnaam[0]='$'; bbcnaam[1]='.'; strncpy(bbcnaam+2, invoer, 7); } bbcnaam[9]=0; } */ void reduceer_unix_naam(char *unixnaam, char *bbcnaam); void reduceer_unix_naam(char *unixnaam, char *bbcnaam) { if (bbcnaam[0]=='$') strcpy(unixnaam,bbcnaam+2); else { unixnaam[0]=bbcnaam[0]; strcpy(unixnaam+1,bbcnaam+2); } } #include "overschrijf.c" #include "nieuw_diskb.c" #include "diskb_add.c" #include "diskb_del.c" #include "expand_im.c" #include "minimaliseer.c" #include "intersplits.c" #include "ddos2dfs.c" #include "w62.c" #include "splits_cat.c" #include "bbc_crc.c" #include "xbeeb.c" #include "archief.c" int filenamechar_no=sizeof(filenamechar_bad)/sizeof(char); /* number of char's to be checked for replacement */ void print_version(void); void use(void); void print_version(void) { printf("\nbbcim "VERSION" (C) W.H.Scholten 1996-2014 (http://wouter.bbcmicro.net/)\n"); } void use(void) { print_version(); #ifdef MESSAGES_NL printf("Opties: -e[s/d,#,b,r] -a[b,r] -d -c -crc -min -40/80/max\n" \ " -y -icrc -s[#]\n" \ " -x -xcrc\n" \ " -splitds -interss -ddos2dfs -w62dfs\n" \ " -V -H\n" "Doe bbcim -H voor nadere informatie of zie de 'man' pagina\n" ); #else printf("Options: -e[s/d,#,b,r] -a[b,r] -d -c -crc -min -40/80/max\n" \ " -y -icrc -s[#]\n" \ " -x -xcrc\n" \ " -splitds -interss -ddos2dfs -w62dfs\n" \ " -V -H\n" "Try bbcim -H for more information or see the man page\n" ); #endif } int main(int argc, char *argv[]) { FILE *fpdisk, *fpcat, *fpextract, *fpinfo; char disk[256], catalogus[256], extract[256], info_naam[256], basisnaam[256]; char bbcdisk_naam[15], bbcfile_naam[15]; char unix_bbcfile_naam[15]; char testnaam[15]; char optstring[20]; unsigned char byte,H; long filesizesum=0; int extr=0, extr_dir=0, cat=0, expand=0, min=0, bcrc=0, short_name=0; int add=0, info=0 /* don't use info files */, no_bbc_dir=0, remove_file=0, remove_disk=0; int extr_list=0; int bad_option=1; int options=1; int i, j, rfiles, bootoption, antwoord, k; unsigned char files=0; unsigned int sectorsondisk; long file; int locked; unsigned char eellddss; long startsector; unsigned long loadaddress, execaddress, length; unsigned int crc; #ifdef UNIX_MKDIR mode_t dir_mode; #endif #if defined(MAC_MKDIR) || defined(SYSTEM_MKDIR) char actie[256]; #endif #ifdef NO_COMMAND_LINE argc=1; #endif if (argc < 2) { char optstring2 [ 21 ]; print_version(); #ifdef MESSAGES_NL printf("Interactive modus (meer informatie over de opties: bbcim -H of zie de man pagina)\n"); printf("Welke optie?"); #else printf("Interactive mode (for more information on the options: bbcim -H or see the man page)\n"); printf("Which option?"); #endif scanf("%20s", optstring2); if (optstring2[0]=='-') strcpy(optstring, optstring2); else { strcpy(optstring, "-"); strcat(optstring, optstring2); } options=0; } else strcpy(optstring, argv[1]); /* 1e selectie */ if (!strcmp(optstring,"-V")){ print_version(); exit(0); } if (!strcmp(optstring,"-H")) { #define CONSOLE_INVERT "\033[7m" #define CONSOLE_RESTORE "\033[m" #ifdef MESSAGES_NL printf("bbcim "VERSION"\nCommando overzicht:\n" \ " -c : toon bestanden in diskbeeld\n" \ " -e[s/d,#,b,r] [{lijst}]: bestanden uit diskbeeld halen\n" \ " -a[b,r] {lijst} : bestanden in diskbeeld plaatsen\n" \ " -d {lijst} : verwijder bestanden uit diskbeeld\n" \ " -40/-80/-max : wijzig grootte van diskbeeld\n" \ " -min : minimaliseer diskbeeld\n" \ " -crc : bereken CRC's van bestanden in diskbeeld\n" \ " -y {lijst} : archief bestanden bijwerken\n" \ " -s[#] : splits DFS catalogue-achtig tekst bestand in .inf bestanden\n" \ " -x {lijst} : archief bestanden omzetten naar xbeeb formaat\n" \ " -icrc {lijst} : controleer CRC's van archief bestanden\n"\ " -xcrc : controleer CRC's in xbeeb dir (de huidige dir)\n"\ " -interss (sd/dd) : combineer 2 enkelzijdige diskbeelden to 1 dubbelzijdig diskbeeld (B0+B1 -> B2)\n"\ " -splitds (sd/dd) : splits een dubbelzijdig diskbeeld naar 2 enkelzijdige diskbeelden\n"\ " -ddos2dfs : splits enkelzijdig DDOS diskbeeld in DFS diskbeelden\n"\ " -w62dfs : splits een watford 62 bestanden diskbeeld in 2 DFS diskbeelden\n"\ " -V : toon versie\n" CONSOLE_INVERT"Zie http://wouter.bbcmicro.net/ voor de nieuwste versie van bbcim.\n"CONSOLE_RESTORE ); #else printf("bbcim "VERSION"\nCommand overview:\n" \ " -c : show files in disk image\n" \ " -e[s/d,#,b,r] [{list}]: extract files from disk image\n" \ " -a[b,r] {list} : put files in disk image\n" \ " -d {list} : remove files from disk image\n" \ " -40/-80/-max : change size of disk image\n" \ " -min : minimise disk image\n" \ " -crc : calculate CRC's of files in disk image\n" \ " -y {list} : cleanup archive file information\n" \ " -s[#] : split a DFS catalogue-like text file in .inf files\n" \ " -x {list} : convert archive files to xbeeb format\n" \ " -icrc {list} : check CRC's of archive files\n"\ " -xcrc : check CRC's in xbeeb dir (the current dir)\n"\ " -interss (sd/dd) B0 B1 B2 : combine 2 single sided disk images to a double sided disk image (B0+B1 -> B2)\n"\ " -splitds (sd/dd) B : split a double sided disk image into 2 single sided disk images\n"\ " -ddos2dfs : split a single sided DDOS disk image into DFS disk images\n"\ " -w62dfs : split a watford 62 file disk image into 2 DFS disk images\n"\ " -V : show version\n" CONSOLE_INVERT"See http://wouter.bbcmicro.net/ for the latest version of bbcim.\n"CONSOLE_RESTORE ); #endif exit(0); } if (!strcmp(optstring,"-interss")) {interss(argc, argv, options); exit(0);} if (!strcmp(optstring,"-splitds")) {splitds(argc, argv, options); exit(0);} if (!strcmp(optstring,"-ddos2dfs")) {ddos2dfs(argc, argv, options); exit(0);} if (!strcmp(optstring,"-w62dfs")) {w62dfs(argc, argv, options); exit(0);} if (!strcmp(optstring,"-d")) {del_from_image(argc, argv, options); exit(0);} if (!strncmp(optstring,"-s",2)) {split_cat(argc, argv, options, optstring); exit(0);} if (!strcmp(optstring,"-x")) {xbeeb(argc, argv, options); exit(0);} if (!strcmp(optstring,"-y")) {cleanup(argc, argv, options); exit(0);} if (!strcmp(optstring,"-icrc")) {icrc(argc, argv, options); exit(0);} if (!strcmp(optstring,"-xcrc")) {xcrc(argc, argv, options); exit(0);} /* Bekijk nu de resterende opties */ if (!strcmp(optstring,"-c")) { cat=1; bad_option=0; } if (!strncmp(optstring,"-e", 2)) { extr=1; bad_option=0; info=1; for (i=2; i2)); fread(&byte,1,1,fpdisk); bootoption=byte >> 4; H=byte & 3; fread(&byte,1,1,fpdisk); sectorsondisk=byte+H*256L; if (extr && !extr_list) fpcat=fopen(catalogus,"w"); else fpcat=stdout; /*if (extr_list) fpcat=NULL;*/ if (extr_list) goto skip_diskinfo; #ifdef MESSAGES_NL fprintf(fpcat,"\nDiskette :%s",bbcdisk_naam); if (strlen(bbcdisk_naam)==0) fprintf(fpcat, "(geen naam)"); fprintf(fpcat,"\n%d sectoren op de diskette\n",sectorsondisk); #else fprintf(fpcat,"\nDisk :%s",bbcdisk_naam); if (strlen(bbcdisk_naam)==0) fprintf(fpcat, "(no name)"); fprintf(fpcat,"\n%d sectors on disk\n",sectorsondisk); #endif #ifdef MESSAGES_NL fprintf(fpcat, "bootoptie: "); #else fprintf(fpcat, "bootoption: "); #endif switch(bootoption) { case 0 : #ifdef MESSAGES_NL fprintf(fpcat, "geen"); #else fprintf(fpcat, "none"); #endif break; case 1 : fprintf(fpcat, "*LOAD !BOOT");break; case 2 : fprintf(fpcat, "*RUN !BOOT");break; case 3 : fprintf(fpcat, "*EXEC !BOOT"); } fprintf(fpcat,"\n"); #ifdef MESSAGES_NL fprintf(fpcat, "Bestand Laad Start Lengte Toegang startsector\n"); #else fprintf(fpcat, "File Load Exec Length Access startsector\n"); #endif skip_diskinfo: /* Main loop: find all files */ if (files>0) { int extr_list_no=0; for(file=0;file>7; bbcfile_naam[0]=(byte & 0x7F); bbcfile_naam[1]='.'; fseek(fpdisk,file+8L,SEEK_SET); /* for(i=0; i<7; i++) { fread(&byte,1,1,fpdisk); bbcfile_naam[i+2]=byte; } */ fread(bbcfile_naam+2,1,7,fpdisk); bbcfile_naam[9]=0; /* spaties aan het einde van bbc naam weghalen: geeft anders bestands namen met spaties (in linux). */ for (i=8;i>0 && (bbcfile_naam[i]==' '); i--); bbcfile_naam[i+1]=0; #if DEBUG printf(bbcfile_naam); #endif /* If a file list is given, see if the name is in the disk image */ if (extr_list) { int found=0; for (i=options+2; i1, but this disallows viewing dos cat of vol 0A with standard dfs routines. */ /* Load address */ fseek(fpdisk,file+256L+8L,0); fread(&byte,1,1,fpdisk); fread(&H,1,1,fpdisk); loadaddress=H*256L+byte+(eellddss & 0x0C)*16384L; if (loadaddress & 0x30000) loadaddress |=0xFF0000; /* Exec address */ fread(&byte,1,1,fpdisk); fread(&H,1,1,fpdisk); execaddress=H*256L+byte+(eellddss & 0xC0)*4L*256L; if (execaddress & 0x30000) execaddress |=0xFF0000; /* File length */ fread(&byte,1,1,fpdisk); fread(&H,1,1,fpdisk); length=H*256L+byte+(eellddss & 0x30)*16L*256L; filesizesum +=length; /* Uitvoer van deze gegevens naar catalogus */ if (!extr_list) { fprintf(fpcat,"%-9s %6lX %6lX %6lX", bbcfile_naam, loadaddress, execaddress, length); if (locked) fprintf(fpcat," Locked"); else fprintf(fpcat," "); /* Voor crc uitlijnen */ } strcpy(unix_bbcfile_naam, bbcfile_naam); /* Name check: replace certain characters in filenames (most filesystems can't handle all characters from bbc filenames) */ for (i=0; i=0.70 */ #ifdef MESSAGES_NL #define fout byte=ddos_no+65; printf("onverwacht einde van het diskbeeld" \ " bij ddos drive %c ",byte); #else #define fout byte=ddos_no+65; printf("Unexpected end of DDOS disk image" \ " at ddos drive %c ",byte); #endif void ddos2dfs(int argc, char *argv[], int options) { FILE *fpdfs, *fpdisk; char dfs_image[256], disk[256], basisnaam[256]; unsigned char byte=0,H=0; long ddos_no, i, sectors_on_volume, length; int starttrack, startsector, l; if (argc-options==1) { #ifdef MESSAGES_NL printf("Naam van het DD bbc diskbeeld?"); #else printf("Name of the DD bbc disk image?"); #endif scanf("%50s", disk); } else strcpy(disk, argv[2]); strcpy(basisnaam, disk); l=strlen(disk); if (!strcmp(disk+l-3,".dd")) basisnaam[l-3]=0; fpdisk=fopen(disk,"rb"); if (fpdisk==NULL) { #ifdef MESSAGES_NL printf("Bestand %s is niet te openen\n", disk); #else printf("File %s cannot be opened\n", disk); #endif exit(1); } /* bestand_open_fout(disk); */ /* Hoofdlus: alle catalogi */ for (ddos_no=0; ddos_no<8; ddos_no++) { fseek(fpdisk,16*256L+8L+2*ddos_no,SEEK_SET); fread(&byte,1,1,fpdisk); starttrack=byte; if (starttrack !=0) { strcpy(dfs_image, basisnaam); byte=ddos_no+65; l=strlen(basisnaam); dfs_image[l]=byte; strcpy(dfs_image+l+1, ".bbc"); /* Nu een test of er ueberhaupt iets op de DDOS catalogus staat: */ fseek(fpdisk, (ddos_no*2+1)*256+5, SEEK_SET); fread(&byte,1,1,fpdisk); if (byte==0) { byte=65+ddos_no; printf(" Catalogus %c is leeg\n", byte); continue; } /* (dus geen lege diskbeelden) */ printf("%s\n",dfs_image); /* Uitvoer bestand openen. */ fpdfs=fopen(dfs_image, "wb"); fseek(fpdisk, (ddos_no*2+1)*256+6, SEEK_SET); fread(&byte,1,1,fpdisk); H=byte & 0x03; fread(&byte,1,1,fpdisk); /*long*/ sectors_on_volume=byte+H*256; /*long*/ length=sectors_on_volume*256; /* First sector & second sector: */ fseek(fpdisk, (ddos_no*2+0)*256, SEEK_SET); for(i=0; i<512; i++) { fread(&byte,1,1,fpdisk); if (feof(fpdisk)) { fout exit(1); } fwrite(&byte,1,1,fpdfs); } /* In the second sector, adjust the sector start addresses. */ /* NB: mag voor allemaal?? (ook als bv 2 best. gebruikt?) Denk wel. */ for(i=0; i<31; i++) { fseek(fpdisk, (ddos_no*2+1)*256+14L+i*8, SEEK_SET); fseek(fpdfs, 256L+i*8+14, SEEK_SET); fread(&byte,1,1,fpdisk); H=byte; /* printf("H=%X",H); */ fread(&byte,1,1,fpdisk); /* printf("byte=%X",byte); */ startsector=byte+H*256+2; H=startsector >>8; byte=startsector & 0xFF; fwrite(&H,1,1,fpdfs); fwrite(&byte,1,1,fpdfs); } /* Nu de rest: */ fseek(fpdisk,starttrack*18*256, SEEK_SET); for (i=0; i4) if (!strncmp(argv[addfiles]+l-4,".inf",4)) continue; strcpy(infofile,argv[addfiles]); strcat(infofile,".inf"); /* Archief bestand & bijbehorend info bestand moeten bestaan: */ fpinfo=NULL; if (use_infofiles) { fpinfo=fopen(infofile, "r"); if (fpinfo==NULL) { #ifdef MESSAGES_NL printf("%s: attributenbestand %s kan niet geopend worden. Gebruik -ab om toevoegen te forceren.\n", argv[addfiles], infofile); #else printf("%s: attribute file %s cannot be opened. Use -ab to force inclusion of bare files.\n", argv[addfiles], infofile); #endif continue; } } fpadd=fopen(argv[addfiles], "rb"); if (fpadd==NULL) { #ifdef MESSAGES_NL printf("Archief bestand %s kan niet geopend worden\n", argv[addfiles]); #else printf("Archive file %s cannot be opened\n", argv[addfiles]); #endif if (fpinfo) fclose(fpinfo); continue; } /* uit het inf bestand de bestandsnaam halen en de adressen. */ locked=0; if (use_infofiles) { // fscanf(fpinfo,"%12s %x %x", bbcfile_naam, (int*) &loadaddress, (int*) &execaddress); #if 1 fscanf(fpinfo,"%12s", bbcfile_naam); if (bbcfile_naam[1]!='.') { strncpy(bbcfile_naam, argv[addfiles], 12); fseek(fpinfo, 0L, SEEK_SET); } bbcfile_naam[9]=0; fscanf(fpinfo,"%lx %lx", &loadaddress, &execaddress); #else fscanf(fpinfo,"%12s %lx %lx", bbcfile_naam, &loadaddress, &execaddress); if (bbcfile_naam[1]!='.') { strncpy(bbcfile_naam, argv[addfiles],12); fseek(fpinfo, 0L, SEEK_SET); fscanf(fpinfo," %lx %lx", &loadaddress, &execaddress); } bbcfile_naam[9]=0; #endif fgets(read_line, 99, fpinfo); len_s=strlen(read_line); for (i=0; i=0; i--) bbcfile_naam[i+2]=bbcfile_naam[i]; bbcfile_naam[0]='$'; bbcfile_naam[1]='.'; } bbcfile_naam[9]=0; /* Get previous startsector and file length */ if (afiles) { fseek(fpdisk,256L+14L,SEEK_SET); fread(&eellddss,1,1,fpdisk); /* Start sector */ fread(&byte,1,1,fpdisk); startsector=byte+(long)(eellddss & 0x3)*256L; /* File length */ fseek(fpdisk,256L+12L,SEEK_SET); fread(&byte,1,1,fpdisk); fread(&H,1,1,fpdisk); length=H*256L+byte+(eellddss & 0x30)*16L*256L; startsector +=(length +255)>>8; } else startsector=2; /* Nu testen of bestanden binnen sectors-on-disk blijft: */ fseek(fpdisk,256+6L,SEEK_SET); fread(&byte,1,1,fpdisk); H=byte & 3; fread(&byte,1,1,fpdisk); sectorsondisk=byte+H*256L; fseek(fpadd, 0L, SEEK_END); length=ftell(fpadd); if (startsector+((length+255)>>8)> sectorsondisk) { fclose(fpadd); #ifdef MESSAGES_NL printf("Niet genoeg ruimte op het diskbeeld\n"); #else printf("Not enough space on the disk image\n"); #endif break; } #ifdef MESSAGES_NL printf("bestand %s toegevoegd\n", argv[addfiles]); #else printf("adding file %s\n", argv[addfiles]); #endif /* fseek(fpadd, 0L, SEEK_SET); */ /* fseek(fpdisk,startsector*256L,SEEK_SET); */ /* Copy file: */ {long j; for(j=0; j<(((length+255) >>8)*256); j++) { fseek(fpadd, j, SEEK_SET); if (!fread(&byte,1,1,fpadd)) byte=0; /* 2009: This superfluous seek was to prevent segmentation faults (ca. 1996, * using at that time Linux 1.2.x and gcc 2.7.2 IIRC). I'm keeping it as * I don't want to change the code. */ fseek(fpdisk,startsector*256L+j,SEEK_SET); fwrite(&byte,1,1,fpdisk); } } fclose(fpadd); if (remove_file) { remove(argv[addfiles]); remove(infofile); } /* add filename to catalogue */ /* Eerst de catalogus ingangen verplaatsen (8 bytes opschuiven) */ { long j; for (j=255-8; j>7; j--) { fseek(fpdisk, j, SEEK_SET); fread(&byte,1,1,fpdisk); fseek(fpdisk, j+8, SEEK_SET); fwrite(&byte,1,1,fpdisk); fseek(fpdisk, j+256L, SEEK_SET); fread(&byte,1,1,fpdisk); fseek(fpdisk, j+8+256L, SEEK_SET); fwrite(&byte,1,1,fpdisk); } } byte=bbcfile_naam[0]+(locked<<7); fseek(fpdisk,15L,SEEK_SET); fwrite(&byte,1,1,fpdisk); fseek(fpdisk,8L,SEEK_SET); for(i=0; i<7; i++) { byte=bbcfile_naam[i+2]; if (byte==0) {byte=' '; bbcfile_naam[i+3]=0;} fwrite(&byte,1,1,fpdisk); } afiles +=8; fseek(fpdisk,256+5L,SEEK_SET); fwrite(&afiles,1,1,fpdisk); /* load/exec adressen + lengte schrijven */ fseek(fpdisk,256L+14L,SEEK_SET); eellddss=((startsector >>8) & 0x3)+((loadaddress >>14) &0xC); eellddss +=((execaddress >>10) &0xC0); eellddss +=((length >>12) &0x30); fwrite(&eellddss,1,1,fpdisk); /* Start sector */ byte=startsector & 0xFF; fwrite(&byte,1,1,fpdisk); /* Load address */ fseek(fpdisk,256L+8L,0); byte=loadaddress & 0xFF; H=(loadaddress >>8) & 0xFF; fwrite(&byte,1,1,fpdisk); fwrite(&H,1,1,fpdisk); /* Exec address */ byte=execaddress & 0xFF; H=(execaddress >>8) & 0xFF; fwrite(&byte,1,1,fpdisk); fwrite(&H,1,1,fpdisk); /* File length */ byte= length & 0xFF; H=(length >>8) & 0xFF; fwrite(&byte,1,1,fpdisk); fwrite(&H,1,1,fpdisk); }/* for */ printf("\n"); fclose(fpdisk); } ================================================ FILE: tools/bbc/bbcim-1.0.1/src/diskb_del.c ================================================ /* diskb_del.c, Copyright (C) W.H.Scholten 1996-2014 * * Remove a file from a disk image * * 16-4-1996 * For bbcim version >=0.60 */ void del_from_image(int argc, char *argv[], int options) { FILE *fpdisk; char bbcfile_naam[15]; unsigned char byte; unsigned char files; int rfiles; long file,k; int locked; int removed; int i,j; char testnaam[15]; /* DEL moet met lijst */ if ((argc-options)<2) { #ifdef MESSAGES_NL printf("niet voldoende argumenten\n"); #else printf("Not enough arguments (interactive mode not finished for -d)\n"); #endif exit(1); } /* #ifdef MESSAGES_NL printf("Naam van het bbc diskbeeld?"); #else printf("Name of the bbc disk image?"); #endif scanf("%50s", disk); } else {strcpy(disk, argv[1+options]); options++;} */ fpdisk=fopen(argv[1+options],"rb+"); if (fpdisk==NULL) { #ifdef MESSAGES_NL printf("Bestand %s is niet te openen\n",argv[1+options]); #else printf("File %s cannot be opened\n",argv[1+options]); #endif exit(1); } /*Doe alleen iets als het diskbeeld meer dan 2 sectoren bevat. */ fseek(fpdisk,0L, SEEK_END); if (ftell(fpdisk)<512) { #ifdef MESSAGES_NL printf("niets op het diskbeeld\n"); #else printf("Nothing on the disk image\n"); #endif exit(1); } fseek(fpdisk,256+5L,SEEK_SET); fread(&files,1,1,fpdisk); rfiles=files/8; #ifdef MESSAGES_NL printf("aantal bestanden: %d\n",rfiles); #else printf("number of files: %d\n",rfiles); #endif removed=0; /*Hoofdlus: alle bestanden opzoeken. */ if (files>0) { /* EVT om backup te maken: // {fclose(fpdisk); // strcpy(backupnaam, disk);strcat(backupnaam,"%"); // remove(backupnaam); // rename(disk,backupnaam); // fpdisk=fopen(backupnaam,"r"); // fpdisk2=fopen(disk,"w"); */ for(file=0;file>7; bbcfile_naam[0]=(byte & 0x7F); bbcfile_naam[1]='.'; fseek(fpdisk,file+8L,SEEK_SET); /* for(i=0; i<7; i++) { fread(&byte,1,1,fpdisk); bbcfile_naam[i+2]=byte; } */ fread(bbcfile_naam+2,1,7,fpdisk); bbcfile_naam[9]=0; /*spaties aan het einde van extract weghalen: geeft anders bestands namen met spaties aan het einde */ for(i=8; i>0 && (bbcfile_naam[i]==' '); i--); bbcfile_naam[i+1]=0; for (j=options+1; j0 */ } ================================================ FILE: tools/bbc/bbcim-1.0.1/src/expand_im.c ================================================ /* expand_im.c, Copyright (C) 1996-2014 W.H. Scholten * * Part of bbcim. */ void expand_image(char *disk, int expand) { FILE *fpdisk; unsigned char byte, bootoption; long i, length, expand_length; fpdisk=fopen(disk,"rb+"); fseek(fpdisk,0,SEEK_END); length=ftell(fpdisk); expand_length=expand*256; if (expand_length>=length) { byte=0; for (i=0; i<(expand_length-length); i++) fwrite(&byte,1,1,fpdisk); /* 'sectors on disk' aanpassen */ fseek(fpdisk,256L+6L,SEEK_SET); fread(&bootoption,1,1,fpdisk); /*rescue bootoption*/ bootoption &=3<<4; byte=((expand >>8)&3)|bootoption; fseek(fpdisk,256L+6L,SEEK_SET); fwrite(&byte,1,1,fpdisk); byte=(expand & 0xFF); fwrite(&byte,1,1,fpdisk); } /* Netjes afsluiten */ fclose(fpdisk); } ================================================ FILE: tools/bbc/bbcim-1.0.1/src/intersplits.c ================================================ /* intersplit.c, Copyright (C) W.H.Scholten 1996-2014, 2017 * * make or split an interleaved disk image, single/double density * functions: interss & splitds * * original version 11-3-1996 * * Deel van bbcim. */ /* Samenvoegen van 2 enkelzijdige diskbeelden tot een dubbelzijdig om-en-om diskbeeld */ void interss(int argc, char *argv[], int options) { char side0[256], side1[256], interleaved[256]; char option2[5]; unsigned char byte; FILE *fp0, *fp1, *fp_inter; int sec_per_track, track, i; int dd=0; if ((argc-options)==1) { #ifdef MESSAGES_NL printf("Single density (sd) of double density (dd)?"); #else printf("Single density (sd) or double density (dd)?"); #endif scanf("%2s", option2); } else {strcpy(option2, argv[1+options]); options++;} if (!strcmp(option2, "dd")) dd=1; if ((argc-options)==1) { #ifdef MESSAGES_NL printf("Naam van het diskbeeld voor zijde 0?"); #else printf("Name of the disk image for side 0?"); #endif scanf("%50s", side0); } else strcpy(side0, argv[1+options]); if ((argc-options)<=2) { #ifdef MESSAGES_NL printf("Naam van het diskbeeld voor zijde 1?"); #else printf("Name of the disk image for side 1?"); #endif scanf("%50s", side1); } else strcpy(side1, argv[2+options]); if ((argc-options)<=3) { #ifdef MESSAGES_NL printf("Naam van om-en-om beeld?"); #else printf("Name of the interleaved disk image?"); #endif scanf("%50s", interleaved); } else strcpy(interleaved, argv[3+options]); fp0=fopen(side0,"rb"); if (fp0==NULL) { #ifdef MESSAGES_NL printf("Bestand %s is niet te openen\n", side0); #else printf("File %s cannot be opened\n", side0); #endif exit(1); } if (strcmp(side0,side1)) { /*alleen als twee verschillende bestanden */ fp1=fopen(side1,"rb"); if (fp1==NULL) { #ifdef MESSAGES_NL printf("Bestand %s is niet te openen\n", side1); #else printf("File %s cannot be opened\n", side1); #endif exit(1); } } else fp1=fp0; fp_inter=fopen(interleaved, "wb"); printf(" %s + %s > %s\n", side0, side1, interleaved); sec_per_track=10; if (dd) sec_per_track=18; fseek(fp0, 0L, SEEK_SET); fseek(fp1, 0L, SEEK_SET); fseek(fp_inter,0L, SEEK_SET); for (track=0; track<80;track++) { fseek(fp0,0L+track*256L*sec_per_track, SEEK_SET); for (i=0; i<256*sec_per_track; i++) { if (feof(fp0) && feof(fp1)) exit(0); if (feof(fp0)) byte=0; else fread(&byte,1,1,fp0); fwrite(&byte,1,1,fp_inter); } fseek(fp1,0L+track*256L*sec_per_track, SEEK_SET); for (i=0; i<256*sec_per_track; i++) { if (feof(fp1) && feof(fp0)) exit(0); if (feof(fp1)) byte=0; else fread(&byte,1,1,fp1); fwrite(&byte,1,1,fp_inter); } } } /*einde samenvoegen*/ /* Splits om-en-om diskbeeld: */ void splitds(int argc, char *argv[], int options) { char side0[250], side1[250], interleaved[250]; char option2[5]; unsigned char byte; FILE *fp0, *fp1, *fp_inter; int sec_per_track, track; int dd=0; if ((argc-options)==1) { #ifdef MESSAGES_NL printf("Single density (sd) of double density 18 sectoren per track (dd)?"); #else printf("Single density (sd) or double density 18 sectors per track (dd)?"); #endif scanf("%2s", option2); } else { strncpy(option2, argv[1+options], 4); option2[4] = 0; if (strcmp(option2, "sd") && strcmp(option2, "dd")) { fprintf(stderr, "-splitds {sd|dd} \n"); exit(1); } options++; } if (!strcmp(option2, "dd")) dd=1; if ((argc-options)==1) { #ifdef MESSAGES_NL printf("Naam van de om-en-om diskdump?"); #else printf("Name of the interleaved diskdump?"); #endif scanf("%50s", interleaved); } else strcpy(interleaved, argv[1+options]); strcpy(side0, interleaved); /* side0[strcspn(side0,".")]=0; */ /* This was useful for DOS, but that's irrelevant these days */ strcpy(side1, interleaved); strcat(side0,".0"); strcat(side1,".1"); printf(" %s > %s + %s\n",interleaved, side0, side1); fp_inter=fopen(interleaved, "rb"); if (fp_inter==NULL) { #ifdef MESSAGES_NL printf("Bestand %s is niet te openen\n", interleaved); #else printf("File %s cannot be opened\n", interleaved); #endif exit(1); } fp0=fopen(side0,"wb"); fp1=fopen(side1,"wb"); sec_per_track=10; if (dd) sec_per_track=18; fseek(fp_inter,0L, SEEK_SET); for (track=0; track<80;track++) { int i; for (i=0; i<256*sec_per_track; i++) { if (!fread(&byte,1,1,fp_inter)) exit(0); fwrite(&byte,1,1,fp0); } for (i=0; i<256*sec_per_track; i++) { if (!fread(&byte,1,1,fp_inter)) exit(0); fwrite(&byte,1,1,fp1); } } } /*einde splitsen */ ================================================ FILE: tools/bbc/bbcim-1.0.1/src/minimaliseer.c ================================================ /* minimaliseer.c, Copyright (C) W.H.Scholten 1996-2014, 2017 * * minimse a bbc disk image (single density) * first version: 17-4-1996 for bbcim versie >=0.61 */ void minimise_image(char *disk) { FILE *fpdisk, *fpdisk2; char backupnaam[256]; char bbcfile_naam[12]; unsigned char byte, H, eellddss; long startsector, file; long startsector2=2; unsigned char files; long length; int i; fpdisk=fopen(disk, "rb"); fseek(fpdisk,256L+5L,SEEK_SET); fread(&files,1,1,fpdisk); /* // int rfiles=files/8; // #ifdef MESSAGES_NL // printf("aantal bestanden: %d\n",rfiles); // #else // printf("number of files: %d\n",rfiles); // #endif */ if (files>0){ fclose(fpdisk); strcpy(backupnaam, disk);strcat(backupnaam,"~"); remove(backupnaam); rename(disk,backupnaam); fpdisk=fopen(backupnaam,"rb"); fpdisk2=fopen(disk,"wb"); /* Catalogus kopieeren */ for(i=0;i<512;i++){ fread (&byte,1,1,fpdisk); fwrite (&byte,1,1,fpdisk2); } /* Hoofdlus: alle bestanden opzoeken. */ for(file=files;file>0; file -=8){ /* The following is only needed for filename printing */ fseek(fpdisk,file+15L,SEEK_SET); fread(&byte,1,1,fpdisk); bbcfile_naam[0]=(byte & 0x7F); bbcfile_naam[1]='.'; fseek(fpdisk,file,SEEK_SET); for(i=0; i<7; i++){ fread(&byte,1,1,fpdisk); bbcfile_naam[i+2]=byte; } /* fread(bbcfile_naam+2,1,7,fpdisk);*/ bbcfile_naam[9]=0; /* File lengte */ fseek(fpdisk,file+256L+4L,0); fread(&byte,1,1,fpdisk); fread(&H,1,1,fpdisk); fread(&eellddss,1,1,fpdisk); length=H*256L+byte+(eellddss & 0x30)*16L*256L; /* Start sector */ fread(&byte,1,1,fpdisk); startsector=byte+(eellddss & 3)*256L; /* nieuwe startsector */ fseek(fpdisk2,256+file+6,SEEK_SET); eellddss =(eellddss & 0xFC)+(startsector2>>8); fwrite(&eellddss,1,1,fpdisk2); byte=startsector2 & 0xFF; fwrite(&byte,1,1,fpdisk2); printf("startsector %3d > %3d\n", (int) startsector, (int) startsector2); fseek(fpdisk,startsector*256, SEEK_SET); fseek(fpdisk2,startsector2*256, SEEK_SET); for (i=0; i<((length+255)>>8)*256; i++){ fread(&byte,1,1,fpdisk); if (feof(fpdisk) && (i>8); } /* FOR file */ }/* if */ } ================================================ FILE: tools/bbc/bbcim-1.0.1/src/nieuw_diskb.c ================================================ /* nieuw_diskb.c, Copyright (c) 1996-2014 W.H. Scholten * * Deel van bbcim. */ void new_image(char *disk, unsigned int size) { FILE *fpdisk; unsigned char byte; long i; size &=0xFFF; /* not allowed in true DFS but might be useful for big disks in beebem. */ fpdisk=fopen(disk,"wb"); byte=0; for (i=0; i<512; i++) fwrite(&byte,1,1,fpdisk); /* Set default disk size to 80 track */ byte=(size>>8); fseek(fpdisk,256+6L,SEEK_SET); byte |=3<<4; fwrite(&byte,1,1,fpdisk); /*i.e. bootoption=*EXEC, sect on disk='size' */ byte=(size & 0xFF); fwrite(&byte,1,1,fpdisk); /* Netjes afsluiten*/ fclose(fpdisk); } ================================================ FILE: tools/bbc/bbcim-1.0.1/src/overschrijf.c ================================================ /* overschrijf.c, Copyright (C) W.H.Scholten 1996,1997,2014, 2017 * * Part of bbcim. */ #include "overschrijf.h" int rename_sequential(char *naam) { FILE *fp; static char new_name[256]; int i=0; strcpy(new_name, naam); for(;;) { fp=fopen(new_name, "r"); if (fp == NULL) break; fclose(fp); strcpy(new_name, naam); sprintf(new_name+strlen(new_name), "%d", i); i++; } strcpy(naam,new_name); return 1; } int overschrijf_vraag(char *oude_naam, char *nieuwe_naam) { char string; int antwoord=0; printf("bestand %s -> %s:\n", oude_naam, nieuwe_naam); while (!antwoord) { #ifdef MESSAGES_NL printf(" overschrijven/hernoem nieuw/hernoem bestaand/sla over?(o/n/b/s)"); scanf(" %c",&string); switch(string) { case 'o': antwoord=OVERSCHRIJVEN;break; case 'n': antwoord=HERNOEM_NIEUW;break; case 'b': antwoord=HERNOEM_BESTAAND;break; case 's': antwoord=SLA_OVER;} #else printf(" overwrite/rename new file/rename existing file/skip?(o/n/e/s)"); scanf(" %c",&string); switch(string) { case 'o': antwoord=OVERSCHRIJVEN;break; case 'n': antwoord=HERNOEM_NIEUW;break; case 'b': antwoord=HERNOEM_BESTAAND;break; case 's': antwoord=SLA_OVER;} #endif } if (antwoord==HERNOEM_NIEUW || antwoord==HERNOEM_BESTAAND) { #ifdef MESSAGES_NL printf("nieuwe naam?"); #else printf("new name?"); #endif scanf("%49s", nieuwe_naam); } return antwoord; } ================================================ FILE: tools/bbc/bbcim-1.0.1/src/overschrijf.h ================================================ /* overschrijf.h, Copyright (C) W.H.Scholten 1996-2014 * * Part of bbcim. */ #define OVERSCHRIJVEN 1 #define HERNOEM_NIEUW 2 #define HERNOEM_BESTAAND 3 #define SLA_OVER 4 ================================================ FILE: tools/bbc/bbcim-1.0.1/src/splits_cat.c ================================================ /* splits_cat.c, Copyright (C) W.H.Scholten 1996-2014, 2017 * * Part of bbcim */ void split_cat(int argc, char *argv[],int options, char *optread_line) { FILE *fpcat, *fpinfo; char infofile[256]; char read_line[256], bbcfile_naam[15]; char cat_naam[256], nieuwe_naam[256]; int i, args; int no_bbc_dir=0; int antwoord; unsigned int load, exec, crc; if ((argc-options)<2) { #ifdef MESSAGES_NL printf("Naam van de te splitsen catalogus?"); #else printf("Name of the catalogue to be split?"); #endif scanf("%50s", cat_naam); } else strcpy(cat_naam, argv[1+options]); if (optread_line[2]=='#') no_bbc_dir=1; fpcat=fopen(cat_naam,"r"); if (fpcat == NULL) { #ifdef MESSAGES_NL fprintf(stderr, "Bestand niet gevonden\n"); #else fprintf(stderr, "File not found\n"); #endif return; } while (fscanf(fpcat,"%12s", bbcfile_naam)!=EOF) { bbcfile_naam[9]=0; #if DEBUG printf("bbcfile=%s", bbcfile_naam); #endif fgets(read_line, 99, fpcat); /* Get remainder of line */ if (bbcfile_naam[1]=='.') { if (no_bbc_dir) /* {if (bbcfile_naam[0]=='$') strcpy(infofile,bbcfile_naam+2); else {infofile[0]=bbcfile_naam[0]; strcpy(infofile+1,bbcfile_naam+2); } } */ reduceer_unix_naam(infofile, bbcfile_naam); else strcpy(infofile,bbcfile_naam); strcat(infofile,".inf"); /* Check if file exists (can be opened) */ if ((fpinfo=fopen(infofile, "r"))!=NULL) { fclose(fpinfo); antwoord=overschrijf_vraag(bbcfile_naam, infofile); switch(antwoord) { case OVERSCHRIJVEN: break; case HERNOEM_NIEUW: strcpy(infofile, nieuwe_naam); break; case HERNOEM_BESTAAND: rename(infofile, nieuwe_naam); break; case SLA_OVER: continue; /*next in while loop*/ } /* switch */ } /* End name check */ fpinfo=fopen(infofile, "w"); fprintf(fpinfo, "%s", bbcfile_naam); for (i=0; i<99; i++) { if (read_line[i]>' ') break; } args =sscanf(read_line,"%*[ L\x09]%x %x %*[^=]=%x", &load, &exec, (unsigned int *) &crc); fprintf(fpinfo, " %6X %6X", load, exec); if (read_line[i]=='L') fprintf(fpinfo, " Locked"); if (args==3) fprintf(fpinfo, " CRC=%4X", (unsigned int) crc); fclose(fpinfo); } } /* netjes afsluiten */ fclose(fpcat); } ================================================ FILE: tools/bbc/bbcim-1.0.1/src/w62.c ================================================ /* w62.c, Copyright (C) 1996-2014,2017 W.H. Scholten * * Converts a Watford 62 file diskimage into 2 Acorn DFS diskimages * * Part of bbcim. */ #include #include #include int w62dfs(int argc, char *argv[], int options) { FILE *fpdisk, *fpdisk2; unsigned char byte; char disk1[256], disk2[256]; int i; if (argc<3) { #ifdef MESSAGES_NL printf("Diskbeeld naam afwezig\n"); #else printf("Diskimage name missing\n"); #endif return 1; } strcpy(disk1, argv[2]); disk1[strcspn(disk1,".")]=0; strcpy(disk2, disk1); strcat(disk1,".w1"); strcat(disk2,".w2"); fpdisk=fopen(argv[2],"rb"); if (!fpdisk) { #ifdef MESSAGES_NL printf("Watford 62 bestand diskbeeld niet te openen\n"); #else printf("Failed to open watford 62 file image\n"); #endif exit(1); } /* are there files on image 2? */ fseek(fpdisk,512+DFSentries,SEEK_SET); fread(&byte,1,1,fpdisk); if (byte) { fpdisk2=fopen(disk2,"wb"); /* Move 2 sectors down */ for (i=0; i<512; i++) { fseek(fpdisk,512+i,SEEK_SET); fread(&byte,1,1,fpdisk); fseek(fpdisk,0+i,SEEK_SET); fwrite(&byte,1,1,fpdisk2); } fseek(fpdisk,512,SEEK_SET); for (i=512; i<200*1024; i++) { fread(&byte,1,1,fpdisk); if (feof(fpdisk)) break; fwrite(&byte,1,1,fpdisk2); } fclose(fpdisk2); } /* Netjes afsluiten */ fclose(fpdisk); rename(argv[2], disk1); return 0; } ================================================ FILE: tools/bbc/bbcim-1.0.1/src/xbeeb.c ================================================ /* xbeeb.c, Copyright (C) W.H.Scholten 1996-2014, 2017 * * Laatste verandering: 30-6-96 * Alles werkt maar code is zeer lelijk (dubbel etc). VERBETER. * * part of bbcim. */ #include "overschrijf.h" void xbeeb(int argc, char *argv[], int options) { FILE *fparchief, *fpinfo, *fpcat, *fp_oude_cat; char infofile[256]; const char* catalogus="__CATALOG__"; const char* oude_catalogus="__CATALOG__%"; int archief_bestand, l; char bbcfile_naam[15], xbeeb_naam[15]; unsigned int loadaddress, execaddress; char read_line[256]; char locked; char nieuwe_naam[256]; int antwoord, len_s,i; int length; unsigned int crc; /* Conversion without command line list not implemented: // if ((argc-options)<3) // { // #ifdef MESSAGES_NL // printf("Naam van het toe te voegen archief bestand?"); // #else // printf("Name of the archive file to be added?"); // #endif // scanf("%50s", addfile); // } else strcpy(addfile, argv[2+options]); */ if ((argc-options)<2) { #ifdef MESSAGES_NL printf("Geen lijst van archief bestanden meegegeven\n"); #else printf("No archive file list given\n"); #endif exit(1); } for(archief_bestand=2; archief_bestand4) { if (!strncmp(argv[archief_bestand]+l-4,".inf",4)) continue; } strcpy(infofile,argv[archief_bestand]); strcat(infofile,".inf"); /* Bestaat het archief bestand? */ fparchief=fopen(argv[archief_bestand], "rb"); if (fparchief==NULL) { #ifdef MESSAGES_NL printf("Archief bestand %s kan niet geopend worden\n", argv[archief_bestand]); #else printf("Archive file %s cannot be opened\n", argv[archief_bestand]); #endif continue; } fclose(fparchief); /* Bestaat het .inf bestand? */ fpinfo=fopen(infofile, "r"); if (fpinfo==NULL) { #ifdef MESSAGES_NL printf("Info bestand %s kan niet geopend worden, sla over\n", infofile); #else printf("Info file %s cannot be opened, skipping file\n", infofile); #endif continue; } /* Uit het inf bestand de bestandsnaam halen en de adressen. */ #if 1 fscanf(fpinfo,"%12s", bbcfile_naam); if (bbcfile_naam[1]!='.') { strncpy(bbcfile_naam, argv[archief_bestand], 12); fseek(fpinfo, 0L, SEEK_SET); } bbcfile_naam[9]=0; fscanf(fpinfo,"%x %x", &loadaddress, &execaddress); #else fscanf(fpinfo,"%12s %x %x", bbcfile_naam, &loadaddress, &execaddress); bbcfile_naam[9]=0; if (bbcfile_naam[1]!='.') { strcpy(bbcfile_naam, argv[archief_bestand]); fseek(fpinfo, 0L, SEEK_SET); fscanf(fpinfo," %x %x", &loadaddress, &execaddress); } #endif /* 'Locked' wordt nu behandeld: */ fgets(read_line, 49, fpinfo); fclose(fpinfo); len_s=strlen(read_line); /* NOTE: 'Locked' may be abbreviated to 'L':*/ locked=' '; for (i=0; i1; i--) nieuwe_naam[i]=nieuwe_naam[i-2]; nieuwe_naam[0]='$'; nieuwe_naam[1]='.'; } nieuwe_naam[9]=0; /*maximale naam lengte*/ switch(antwoord) { case OVERSCHRIJVEN: rename(catalogus, oude_catalogus); fp_oude_cat=fopen(oude_catalogus,"r"); if (fp_oude_cat != NULL) { /*EXISTS ??*/ /* verwijder oude catalogus ingang: */ fpcat=fopen(catalogus,"w"); while (fgets(read_line, 49, fp_oude_cat)) { sscanf(read_line, "%12s", xbeeb_naam); if (!strcmp(bbcfile_naam, xbeeb_naam)) continue; fputs(read_line, fpcat); } fclose(fpcat); fclose(fp_oude_cat); } /* if (exists) */ break; case HERNOEM_NIEUW: strcpy(bbcfile_naam, nieuwe_naam); break; case HERNOEM_BESTAAND: /* verander oude catalogus ingang: */ rename(catalogus, oude_catalogus); fp_oude_cat=fopen(oude_catalogus,"r"); if (fp_oude_cat != NULL) { /*exists ??? */ /* it might not if creating an xbeeb dir and files have xbeeb like names */ fpcat=fopen(catalogus,"w"); while(fgets(read_line, 49, fp_oude_cat)) { sscanf(read_line, "%9s", xbeeb_naam); if (!strcmp(bbcfile_naam, xbeeb_naam)) { fprintf(fpcat, "%-9s", nieuwe_naam); fputs(read_line+9, fpcat); } else fputs(read_line, fpcat); } fclose(fpcat); fclose(fp_oude_cat); }/*if (exists) */ rename(bbcfile_naam, nieuwe_naam); break; case SLA_OVER: continue; } /*switch*/ } /*if*/ #ifdef MESSAGES_NL printf("bestand %s hernoemd tot %s\n", argv[archief_bestand], bbcfile_naam); #else printf("renamed file %s to %s\n", argv[archief_bestand], bbcfile_naam); #endif } /*einde test of de 'hernoem naam' anders is.*/ fparchief=fopen(argv[archief_bestand], "rb"); fseek(fparchief, 0L, SEEK_END); length=ftell(fparchief); fclose(fparchief); rename(argv[archief_bestand], bbcfile_naam); remove(infofile); /* if CRC was bad, should that one be put in the __CATALOG__ ?? Probably. For now, I recalculate. FIX (if crc is bad say so in __CATALOG__) */ crc=fcrc(bbcfile_naam); /* Add filename & information to __CATALOG__ */ fpcat=fopen(catalogus,"a"); fprintf(fpcat,"%-9s %c %6X %6X %6X CRC=%04X\n", bbcfile_naam, locked, loadaddress, execaddress, length, (unsigned int) crc); fclose(fpcat); } /* FOR */ } ================================================ FILE: tools/cc65/atari/mkatr-master/.clang-format ================================================ # We'll use defaults from the LLVM style, but with 4 columns indentation. BasedOnStyle: LLVM IndentWidth: 4 AlignAfterOpenBracket: true AllowShortFunctionsOnASingleLine: Inline AllowShortCaseLabelsOnASingleLine: true AlignConsecutiveAssignments: true BreakBeforeBraces: Allman SpaceBeforeParens: Never ColumnLimit: 90 SpacesInConditionalStatement: true ================================================ FILE: tools/cc65/atari/mkatr-master/.gitignore ================================================ obj/ mkatr lsatr ================================================ FILE: tools/cc65/atari/mkatr-master/LICENSE ================================================ GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Lesser General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) 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. Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) year name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. , 1 April 1989 Ty Coon, President of Vice This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. ================================================ FILE: tools/cc65/atari/mkatr-master/Makefile ================================================ # # Copyright (C) 2016 Daniel Serpell # # 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, see # # Folder to place compiled programs PROG_DIR=. # Folder to place the build files BUILD_DIR=obj PROGS=\ mkatr\ lsatr\ SOURCES_mkatr=\ crc32.c\ compat.c\ darray.c\ flist.c\ mkatr.c\ msg.c\ spartafs.c\ SOURCES_lsatr=\ atr.c\ compat.c\ crc32.c\ lsatr.c\ lssfs.c\ lsdos.c\ lsextra.c\ lshowfen.c\ msg.c\ CFLAGS=-O2 -w # -Wall LDFLAGS= # Default rule all: $(PROGS:%=$(PROG_DIR)/%) # Rule template define PROG_template # Objects from sources OBJS_$(1)=$(addprefix $(BUILD_DIR)/,$(SOURCES_$(1):%.c=%.o)) # All SOURCES/OBJECTS SOURCES+=$$(SOURCES_$(1)) OBJS+=$$(OBJS_$(1)) # Link rule $(PROG_DIR)/$(1): $$(OBJS_$(1)) $$(CC) $$(CFLAGS) $$(LDFLAGS) $$^ $$(LDLIBS) -o $$@ endef # Generate all rules $(foreach prog,$(PROGS),$(eval $(call PROG_template,$(prog)))) DEPS=$(OBJS:%.o=%.d) # Cleanup .PHONY: clean clean: -rm -f $(OBJS) $(DEPS) -rmdir $(BUILD_DIR) .PHONY: distclean distclean: clean -rm -f $(PROGS:%=$(PROG_DIR)/%) # Create output dirs $(BUILD_DIR): mkdir -p $@ $(OBJS): | $(BUILD_DIR) $(DEPS): | $(BUILD_DIR) # Compilation $(BUILD_DIR)/%.o: src/%.c $(CC) $(CFLAGS) $(CPPFLAGS) -c -o $@ $< # Dependencies $(BUILD_DIR)/%.d: src/%.c @$(CC) -MM -MP -MF $@ -MT "$(@:.d=.o) $@" $(CFLAGS) $(CPPFLAGS) $< ifneq "$(MAKECMDGOALS)" "clean" ifneq "$(MAKECMDGOALS)" "distclean" -include $(DEPS) endif endif ================================================ FILE: tools/cc65/atari/mkatr-master/README.md ================================================ Atri ATR disk image tools ------------------------- Tools to create, list and extract Atari `ATR` disk images. mkatr: Create ATR images from list of files ------------------------------------------- This program creates Atari `ATR` disk images from a list of files given in the command line, in the SpartaDOS / BW-DOS disk format. Usage: mkatr [options] output [+attributes] filenames Options: - `-b` Selects the next file in the command line as the _boot_ file, the file will be loaded when the computer boots, and must be in the standard Atari binary file format. The bootloader for 128 bytes per sector needs 613 bytes, from $700 to $965, and the bootloader for 256 bytes per sector needs 848 bytes, from $700 to $A50, both can be relocated with the `-B` option. - `-x` Output image with exact sector count for all available content. This will use non-standard sector counts, and return images with 128 bytes per sector if the image is smaller than about 8MB. - `-s` Specify the minimum size of the output image, in bytes. The image will be of this size or larger instead of the smaller possible. This allows creating images with available free space. Using this option with the `-x` option allows generating images of specific sizes (up to the sector size). - `-B` Specify the page (high part of address) of the start of the bootloader. Use this option to load games or other software with a low loading address that conflicts with the standard address of the bootloader. A safe value is from page 6 instead of the default page 7, but page 4 or 5 is also possible. - `-h` Shows a brief help. - `-v` Shows version information. Also, in front of each file name you can optionally add a list of attributes to be set for that file: - `+p` Marks this file as protected (read-only). - `+h` Hide file from directory. This only works in SpartaDOS-X. - `+a` Marks the file as "archived". This only works in SpartaDOS-X. To place files inside a sub-directory, simply add the directory *before* all the files inside that directory. The resulting image will be the smaller size that fits all the given files (or the minimum specified with `-s`), from the following list (except when the `-x` option is used): | Sector Count | Sector Size | Total Size | Name | | ---: | ---: | ---: | :--- | | 720 | 128 | 90k | SD | | 1040 | 128 | 130k | ED | | 720 | 256 | 180k | DD | | 1440 | 256 | 360k | DSDD | | 2048 | 256 | 512k | hard disk | | 4096 | 256 | 1M | hard disk | | 8192 | 256 | 2M | hard disk | | 16384 | 256 | 4M | hard disk | | 32768 | 256 | 8M | hard disk | | 65535 | 256 | 16M | biggest possible image | lsatr: List and extract contents of ATR images ---------------------------------------------- This program list or extracts the contents of an Atari `ATR` disk image. The supported formats are: - Atari DOS 1, single density. - Atari DOS 2.0, single and double density. - Atari DOS 2.5, enhanced density. - MyDOS, up to 16MB images. - SpartaDOS and BW-DOS, up to 16MB images. - LiteDOS 2.x and LiteDOS-SE. - BAS2BOOT images, extracts the BAS file inside. - Howfen DOS images, extracting the raw BOOT images. - K-file boot images, extracts the XEX file inside. Usage: lsatr [options] filenames.atr Options: - `-a` Shows the listing in the same format of native Atari tools, this is the file name separated by spaces to the file extension, followed by the size, date and time (if available), and each sub-directory in a separate listing. Standard listing format shows the size, the date, time (if available) and the full path at the end. - `-l` Show or extract all filenames in lowercase. - `-x` Extract all files in the current directory. - `-X` Extract all files in the directory given as argument to the option. If the directory does not exists, it will be created first. - `-h` Shows a brief help. - `-v` Shows version information. Usage Examples -------------- To create an image named `disk1.atr` with all the files in the "atari" directory: mkatr disk1.atr atari/* To create a bootable BW-DOS image with a hidden and protected DOS file inside a subdirectory and a protected `startup.bat` file outside: mkatr bwdos.atr dos/ -b +ph dos/xbw130.dos +p startup.bat To create an image with only one file that will be loaded at boot: mkatr game.atr -b mygame.com To list the files inside an image: lsatr bwdos.atr To extract all files from the image to a folder `out`: lsatr -X out/ bwdos.atr Compilation ----------- Compile with `make` and copy the resulting `mkatr` and `lsatr` programs to your bin folder. ================================================ FILE: tools/cc65/atari/mkatr-master/src/asm/boot128.asm ================================================ ; Bootloader for 128byte sectors ; opt h- DATA_INDEX equ $0043 MAP_INDEX equ $0044 IO_ADDRESS equ $0045 IO_LENGTH equ $0047 PTR equ $0049 RUNAD equ $02E0 INITAD equ $02E2 DCB equ $0300 ICCOM equ $0342 ICSTA equ $0343 ICBAL equ $0344 ICBAH equ $0345 ICBLL equ $0348 ICBLH equ $0349 ICAX1 equ $034A ICAX2 equ $034B CIOV equ $E456 SIOV equ $E459 ; Specify BASE_ADDRESS in command line, as -d:BASE_ADDRESS=\$2100 ;BASE_ADDRESS equ $2000 MAP_BUFFER equ BASE_ADDRESS DATA_BUFFER equ BASE_ADDRESS + $80 LOAD_ADDRESS equ BASE_ADDRESS + $100 org LOAD_ADDRESS .byte 0 .byte 3 ; Number of sectors to load .word LOAD_ADDRESS ; Load address .word $0000 jmp START ; Jump to START (must be XX80 for SDX compatibility) .word $0000 ; MAIN DIR MAP SECTOR .word $0000 ; MAX SECTOR .word $0000 ; FREE SECTORS .byte $00 ; SECTORS PER BITMAP .word $0000 ; BITMAP START SECTOR .word $0000 ; LAST ALLOCATED FILE SECTOR .word $0000 ; LAST ALLOCATED DIR SECTOR .byte 'DSKLABEL' ; DISK LABEL .byte 40 ; NUMBER OF TRACKS .byte $80 ; SECTOR SIZE .byte $20 ; DISK FORMAT VERSION (2.0) .byte $00,$00,$00,$00,$00 ; RESERVED .byte $00 ; DISK SEQ NUMBER .byte $00 ; DISK RANDOM ID BOOT_MAP: .word $0000 ; BOOT FILE MAP SECTOR .byte $00,$00,$00,$00,$00,$00 ; RESERVED ERROR_MSG: .byte 'DOS Error', $9B ERROR_MSG_LEN equ * - ERROR_MSG SIO_READ_BUF: .if >MAP_BUFFER != >DATA_BUFFER .error "Error, MAP_BUFFER and DATA_BUFFER must be on same page" .endif ldx #>MAP_BUFFER SIO_READ: sty DCB+4 ; Store address stx DCB+5 sta DCB+10 ; Store and check sector number ora DCB+11 beq READ_BLANK ; If sector == 0, read zeroes lda #$40 sta DCB+3 jsr SIOV bpl RTS_OK DOS_ERROR: lda #ERROR_MSG sta ICBAH lda #$09 sta ICCOM ldx #$00 jsr CIOV @loop: jmp @loop READ_BLANK: stx PTR+1 ; Store destination address sty PTR tay ; A is already 0 @copy: sta (PTR),y iny bpl @copy RTS_OK: rts GO_INITAD: jmp (INITAD) END_LOAD: jmp (RUNAD) ; START must be at $XX80 .align $80, $ea .if START != LOAD_ADDRESS + $80 .error "Error, START symbol must be at $XX80, currently at ", START .endif START: ; Set index to end of sector data lda #$80 sta MAP_INDEX sta DATA_INDEX ; Set read size to sector size sta DCB+8 asl sta DCB+9 ; Read binary header: "FF FF" jsr GET_2_BYTES inx bne DOS_ERROR cmp #$FF bne DOS_ERROR ; Read first address, copy to RUNAD jsr GET_2_BYTES sta RUNAD stx RUNAD+1 jmp FIRST_SEG ; Reads a data block READ_DATA_BLOCK: ; Get start address jsr GET_2_BYTES FIRST_SEG: sta IO_ADDRESS stx IO_ADDRESS+1 ora IO_ADDRESS+1 beq END_LOAD ; Skip $FFFF header in the middle of file txa and IO_ADDRESS cmp #$FF beq READ_DATA_BLOCK ; Get end address jsr GET_2_BYTES sec sbc IO_ADDRESS sta IO_LENGTH txa sbc IO_ADDRESS+1 sta IO_LENGTH+1 ; Setup INITAD to an "rts" instruction. lda #RTS_OK sta INITAD+1 ; Read data jsr GET_DATA ; Execute INITAD jsr GO_INITAD ; GO to next block jmp READ_DATA_BLOCK GET_2_BYTES: jsr GET_BYTE pha jsr GET_BYTE tax pla rts DEC_IO_LENGTH_1: dec IO_LENGTH+1 DEC_IO_LENGTH: dec IO_LENGTH GET_DATA: jsr GET_BYTES ldy #$00 sta (IO_ADDRESS),y inc IO_ADDRESS bne @skip inc IO_ADDRESS+1 @skip: lda IO_LENGTH bne DEC_IO_LENGTH lda IO_LENGTH+1 bne DEC_IO_LENGTH_1 rts GET_BYTE: lda #$00 sta IO_LENGTH+1 sta IO_LENGTH GET_BYTES: ldx DATA_INDEX bmi NEXT_SECTOR GET_BYTE_X: lda DATA_BUFFER,x inx stx DATA_INDEX rts GET_FULL_SECTOR: ldy IO_ADDRESS ldx IO_ADDRESS+1 jsr SIO_READ lda IO_ADDRESS eor #$80 sta IO_ADDRESS bmi @skip1 inc IO_ADDRESS+1 @skip1: lda IO_LENGTH eor #$80 sta IO_LENGTH bpl @skip2 dec IO_LENGTH+1 @skip2: ; Fall through ;;; jmp NEXT_SECTOR NEXT_SECTOR: ldy MAP_INDEX bmi NEXT_MAP NEXT_SECTOR_Y: lda MAP_BUFFER,y ldx MAP_BUFFER+1,y stx DCB+11 iny iny sty MAP_INDEX ldy IO_LENGTH+1 bne GET_FULL_SECTOR ldy IO_LENGTH bmi GET_FULL_SECTOR ldy #ERROR_MSG sta ICBAH lda #$09 sta ICCOM ldx #$00 jsr CIOV @loop: jmp @loop READ_BLANK: stx PTR+1 ; Store destination address sty PTR tay ; A is already 0 @copy: sta (PTR),y iny bne @copy RTS_OK: rts GO_INITAD: jmp (INITAD) END_LOAD: jmp (RUNAD) ; START must be at $XX80 .align $80, $ea .if START != LOAD_ADDRESS + $80 .error "Error, START symbol must be at $XX80, currently at ", START .endif START: ; Set index to end of sector data ldx #$0 stx MAP_INDEX stx DATA_INDEX ; Set read size to sector size stx DCB+8 inx stx DCB+9 ; Read binary header: "FF FF" jsr GET_2_BYTES inx bne DOS_ERROR cmp #$FF bne DOS_ERROR ; Read first address, copy to RUNAD jsr GET_2_BYTES sta RUNAD stx RUNAD+1 jmp FIRST_SEG ; Reads a data block READ_DATA_BLOCK: ; Get start address jsr GET_2_BYTES FIRST_SEG: sta IO_ADDRESS stx IO_ADDRESS+1 ora IO_ADDRESS+1 beq END_LOAD ; Skip $FFFF header in the middle of file txa and IO_ADDRESS cmp #$FF beq READ_DATA_BLOCK ; Get end address jsr GET_2_BYTES sec sbc IO_ADDRESS sta IO_LENGTH txa sbc IO_ADDRESS+1 sta IO_LENGTH+1 ; Setup INITAD to an "rts" instruction. lda #RTS_OK sta INITAD+1 ; Read data jsr GET_DATA ; Execute INITAD jsr GO_INITAD ; GO to next block jmp READ_DATA_BLOCK GET_2_BYTES: jsr GET_BYTE pha jsr GET_BYTE tax pla rts DEC_IO_LENGTH_1: dec IO_LENGTH+1 DEC_IO_LENGTH: dec IO_LENGTH GET_DATA: jsr GET_BYTES ldy #$00 sta (IO_ADDRESS),y inc IO_ADDRESS bne @skip inc IO_ADDRESS+1 @skip: lda IO_LENGTH bne DEC_IO_LENGTH lda IO_LENGTH+1 bne DEC_IO_LENGTH_1 rts GET_BYTE: lda #$00 sta IO_LENGTH+1 sta IO_LENGTH GET_BYTES: ldx DATA_INDEX beq NEXT_SECTOR GET_BYTE_X: lda DATA_BUFFER,x inc DATA_INDEX rts GET_FULL_SECTOR: ldy IO_ADDRESS ldx IO_ADDRESS+1 jsr SIO_READ inc IO_ADDRESS+1 dec IO_LENGTH+1 ; Fall through ;;; jmp NEXT_SECTOR NEXT_SECTOR: ldy MAP_INDEX beq NEXT_MAP NEXT_SECTOR_Y: lda MAP_BUFFER,y ldx MAP_BUFFER+1,y stx DCB+11 iny iny sty MAP_INDEX ldy IO_LENGTH+1 bne GET_FULL_SECTOR ldx #>DATA_BUFFER jsr SIO_READ_BUF ldx #0 beq GET_BYTE_X NEXT_MAP: lda BOOT_MAP ldx BOOT_MAP+1 stx DCB+11 ldx #>MAP_BUFFER jsr SIO_READ_BUF lda MAP_BUFFER sta BOOT_MAP lda MAP_BUFFER+1 sta BOOT_MAP+1 ldy #$04 bne NEXT_SECTOR_Y ================================================ FILE: tools/cc65/atari/mkatr-master/src/asm/boot256.h ================================================ #pragma once /* * Autogenerated file from boot256.asm * Do not edit. */ static unsigned char boot256_bin[384] = { 0, 3, 0, 18, 0, 0, 76, 128, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 83, 75, 76, 65, 66, 69, 76, 40, 128, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 79, 83, 32, 69, 114, 114, 111, 114, 155, 160, 0, 140, 4, 3, 142, 5, 3, 141, 10, 3, 13, 11, 3, 240, 36, 169, 64, 141, 3, 3, 32, 89, 228, 16, 36, 169, 48, 141, 68, 3, 141, 72, 3, 169, 18, 141, 69, 3, 169, 9, 141, 66, 3, 162, 0, 32, 86, 228, 76, 107, 18, 134, 74, 132, 73, 168, 145, 73, 200, 208, 251, 96, 108, 226, 2, 108, 224, 2, 234, 162, 0, 134, 68, 134, 67, 142, 8, 3, 232, 142, 9, 3, 32, 213, 18, 232, 208, 193, 201, 255, 208, 189, 32, 213, 18, 141, 224, 2, 142, 225, 2, 76, 166, 18, 32, 213, 18, 133, 69, 134, 70, 5, 70, 240, 206, 138, 37, 69, 201, 255, 240, 238, 32, 213, 18, 56, 229, 69, 133, 71, 138, 229, 70, 133, 72, 169, 120, 141, 226, 2, 169, 18, 141, 227, 2, 32, 227, 18, 32, 121, 18, 76, 163, 18, 32, 249, 18, 72, 32, 249, 18, 170, 104, 96, 198, 72, 198, 71, 32, 255, 18, 160, 0, 145, 69, 230, 69, 208, 2, 230, 70, 165, 71, 208, 237, 165, 72, 208, 231, 96, 169, 0, 133, 72, 133, 71, 166, 67, 240, 17, 189, 0, 17, 230, 67, 96, 164, 69, 166, 70, 32, 60, 18, 230, 70, 198, 72, 164, 68, 240, 26, 185, 0, 16, 190, 1, 16, 142, 11, 3, 200, 200, 132, 68, 164, 72, 208, 224, 162, 17, 32, 58, 18, 162, 0, 240, 209, 173, 40, 18, 174, 41, 18, 142, 11, 3, 162, 16, 32, 58, 18, 173, 0, 16, 141, 40, 18, 173, 1, 16, 141, 41, 18, 160, 4, 208, 200, }; static unsigned boot256_reloc[] = { 4, 9, 94,110,144,154,163,166,184,201,207,210,213,216,220,230,262,272,283,286,299,302,309,312,317,320,323,326,329,332 }; ================================================ FILE: tools/cc65/atari/mkatr-master/src/asm/get_boot.sh ================================================ #!/bin/sh # Assemble bootloaders and generate C code # BOOTASM="$1.asm" BOOTBIN1="$1.10.bin" BOOTBIN2="$1.20.bin" BOOTH="$1.h" if [ ! -f "$BOOTASM" ]; then echo "ERROR, specify bootloader file name" exit 1 fi # Assemble at two different addresses: mads $BOOTASM -d:BASE_ADDRESS='$1000' -l -o:$BOOTBIN1 mads $BOOTASM -d:BASE_ADDRESS='$2000' -l -o:$BOOTBIN2 # Generate header file cat > $BOOTH < */ /* * Load ATR files. */ #include "atr.h" #include "msg.h" #include #include #include #include // Load disk image from file struct atr_image *load_atr_image(const char *file_name) { FILE *f = fopen(file_name, "rb"); if( !f ) { show_error("can´t open disk image '%s': %s", file_name, strerror(errno)); return 0; } // Get header uint8_t hdr[16]; if( 1 != fread(hdr, 16, 1, f) ) { show_error("%s: can´t read ATR header", file_name); fclose(f); return 0; } if( hdr[0] != 0x96 || hdr[1] != 0x02 ) { // Check if we can open as a raw SS/SD or SD/ED image uint8_t *data = check_calloc(1, 128 * 1040 + 16); // Move header memcpy(data, hdr, 16); // Read the rest of the file size_t num = 16 + fread(data + 16, 1, 1040 * 128, f); // Accept only exact sizes if( num != 720 * 128 && num != 1040 * 128 ) { show_error("%s: not an ATR image", file_name); fclose(f); free(data); return 0; } fclose(f); struct atr_image *atr = check_malloc(sizeof(struct atr_image)); atr->data = data; atr->sec_size = 128; atr->sec_count = num / 128; return atr; } unsigned ssz = hdr[4] | (hdr[5] << 8); if( ssz != 128 && ssz != 256 ) { show_error("%s: unsupported ATR sector size (%d)", file_name, ssz); fclose(f); return 0; } unsigned isz = (hdr[2] << 4) | (hdr[3] << 12) | (hdr[6] << 20); // Some images store full size fo the first 3 sectors, others store // 128 bytes for those: unsigned pad_size = isz % ssz == 0 ? 0 : (ssz - 128) * 3; unsigned num_sectors = (isz + pad_size) / ssz; if( isz >= 0x1000000 || num_sectors * ssz - pad_size != isz ) { // If image size is invalid, assume sector padding: pad_size = 3 * (ssz - 128); num_sectors = (isz + pad_size) / ssz; if( num_sectors > 65535 ) num_sectors = 65535; if( num_sectors < 3 ) show_error("%s: invalid ATR image size (%d), too small.", file_name, isz); show_msg("%s: invalid ATR image size (%d), rounding down to (%d)", file_name, isz, num_sectors * ssz - pad_size); } // Allocate new storage uint8_t *data = check_calloc(ssz, num_sectors); // Read 3 first sectors for( unsigned i = 0; i < num_sectors; i++ ) { if( 1 != fread(data + ssz * i, (i < 3 && pad_size) ? 128 : ssz, 1, f) ) { show_msg("%s: ATR file too short at sector %d", file_name, i + 1); break; } } // Check that sector paddings are 0 if( ssz == 256 && num_sectors > 3 ) { int chk = 0; for( unsigned i = 0; i < 3; i++ ) { chk = 0; for( unsigned j = 0; j < 128; j++ ) chk += data[i * 256 + j + 128]; if( chk != 0 ) { show_msg("%s: ATR suspect - sector %d has data over 128 bytes, fixing.", file_name, i + 1); break; } } if( chk ) { // Try to detect and fixing bad image // Check zeros at end: int chk1 = 0; for( unsigned i = 0; i < 384; i++ ) chk1 += data[ssz * num_sectors - 384 + i]; // Check zeros after first 3 sectors: int chk2 = 0; for( unsigned i = 0; i < 384; i++ ) chk2 += data[384 + i]; if( !chk1 && chk2 ) { memmove(data + 3 * 256, data + 3 * 128, ssz * (num_sectors - 3)); memmove(data + 2 * 256, data + 2 * 128, 128); memmove(data + 1 * 256, data + 1 * 128, 128); } else if( !chk2 ) { memmove(data + 3 * 256, data + 3 * 128, 128); memmove(data + 2 * 256, data + 2 * 128, 128); memmove(data + 1 * 256, data + 1 * 128, 128); } // Clear remaining space memset(data + 2 * 256 + 128, 0, 128); memset(data + 1 * 256 + 128, 0, 128); memset(data + 0 * 256 + 128, 0, 128); } } fclose(f); // Ok, copy to image struct atr_image *atr = check_malloc(sizeof(struct atr_image)); atr->data = data; atr->sec_size = ssz; atr->sec_count = num_sectors; return atr; } void atr_free(struct atr_image *atr) { if( atr->data ) free((uint8_t *)(atr->data)); free(atr); } const uint8_t *atr_data(const struct atr_image *atr, unsigned sector) { if( sector < 1 || sector > atr->sec_count ) return 0; else return atr->data + (sector - 1) * atr->sec_size; } ================================================ FILE: tools/cc65/atari/mkatr-master/src/atr.h ================================================ /* * Copyright (C) 2023 Daniel Serpell * * 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, see */ /* * Load ATR files. */ #pragma once #include struct atr_image { const uint8_t *data; unsigned sec_size; unsigned sec_count; }; struct atr_image *load_atr_image(const char *file_name); void atr_free(struct atr_image *atr); const uint8_t *atr_data(const struct atr_image *atr, unsigned sector); ================================================ FILE: tools/cc65/atari/mkatr-master/src/compat.c ================================================ /* * Copyright (C) 2023 Daniel Serpell * * 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, see */ /* * Common compatibility functions. */ #include int compat_mkdir(const char *path) { #if( defined(_WIN32) || defined(__WIN32__) ) return mkdir(path); #else return mkdir(path, 0777); #endif } int is_separator(char c) { #if( defined(_WIN32) || defined(__WIN32__) ) return c == '/' || c == '\\' || c == ':'; #else return c == '/'; #endif } ================================================ FILE: tools/cc65/atari/mkatr-master/src/compat.h ================================================ /* * Copyright (C) 2023 Daniel Serpell * * 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, see */ /* * Common compatibility functions. */ #pragma once // Checks if given character is a PATH separator int is_separator(char c); // Wrapper for mkdir int compat_mkdir(const char *path); ================================================ FILE: tools/cc65/atari/mkatr-master/src/crc32.c ================================================ /* * Copyright (C) 2016 Daniel Serpell * * 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, see */ /* * CRC32 */ #include "crc32.h" const unsigned crc_table[256] = { 0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419, 0x706af48f, 0xe963a535, 0x9e6495a3, 0x0edb8832, 0x79dcb8a4, 0xe0d5e91e, 0x97d2d988, 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, 0x90bf1d91, 0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de, 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7, 0x136c9856, 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9, 0xfa0f3d63, 0x8d080df5, 0x3b6e20c8, 0x4c69105e, 0xd56041e4, 0xa2677172, 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b, 0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940, 0x32d86ce3, 0x45df5c75, 0xdcd60dcf, 0xabd13d59, 0x26d930ac, 0x51de003a, 0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423, 0xcfba9599, 0xb8bda50f, 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924, 0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d, 0x76dc4190, 0x01db7106, 0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f, 0x9fbfe4a5, 0xe8b8d433, 0x7807c9a2, 0x0f00f934, 0x9609a88e, 0xe10e9818, 0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01, 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e, 0x6c0695ed, 0x1b01a57b, 0x8208f4c1, 0xf50fc457, 0x65b0d9c6, 0x12b7e950, 0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, 0xfbd44c65, 0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2, 0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb, 0x4369e96a, 0x346ed9fc, 0xad678846, 0xda60b8d0, 0x44042d73, 0x33031de5, 0xaa0a4c5f, 0xdd0d7cc9, 0x5005713c, 0x270241aa, 0xbe0b1010, 0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f, 0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17, 0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad, 0xedb88320, 0x9abfb3b6, 0x03b6e20c, 0x74b1d29a, 0xead54739, 0x9dd277af, 0x04db2615, 0x73dc1683, 0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8, 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1, 0xf00f9344, 0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb, 0x196c3671, 0x6e6b06e7, 0xfed41b76, 0x89d32be0, 0x10da7a5a, 0x67dd4acc, 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5, 0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252, 0xd1bb67f1, 0xa6bc5767, 0x3fb506dd, 0x48b2364b, 0xd80d2bda, 0xaf0a1b4c, 0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55, 0x316e8eef, 0x4669be79, 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236, 0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, 0xc5ba3bbe, 0xb2bd0b28, 0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31, 0x2cd99e8b, 0x5bdeae1d, 0x9b64c2b0, 0xec63f226, 0x756aa39c, 0x026d930a, 0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713, 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38, 0x92d28e9b, 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21, 0x86d3d2d4, 0xf1d4e242, 0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1, 0x18b74777, 0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c, 0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45, 0xa00ae278, 0xd70dd2ee, 0x4e048354, 0x3903b3c2, 0xa7672661, 0xd06016f7, 0x4969474d, 0x3e6e77db, 0xaed16a4a, 0xd9d65adc, 0x40df0b66, 0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9, 0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605, 0xcdd70693, 0x54de5729, 0x23d967bf, 0xb3667a2e, 0xc4614ab8, 0x5d681b02, 0x2a6f2b94, 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d}; unsigned crc32(unsigned crc, const uint8_t *buf, unsigned len) { crc = crc ^ 0xffffffffL; while( len-- ) crc = crc_table[(crc ^ (*buf++)) & 0xff] ^ (crc >> 8); return crc ^ 0xffffffffL; } ================================================ FILE: tools/cc65/atari/mkatr-master/src/crc32.h ================================================ /* * Copyright (C) 2016 Daniel Serpell * * 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, see */ /* * CRC32 */ #pragma once #include unsigned crc32(unsigned crc, const uint8_t *buf, unsigned len); ================================================ FILE: tools/cc65/atari/mkatr-master/src/darray.c ================================================ /* * Copyright (C) 2016 Daniel Serpell * * 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, see */ #include "darray.h" #include "msg.h" #include void darray_fill_ptr(void *arr, size_t sz, size_t init) { darray(char) *ret = arr; if( !ret ) memory_error(); ret->data = check_malloc(sz * init); ret->len = 0; ret->size = init; } void *darray_alloc(size_t sz, size_t init) { darray(char) *ret = check_malloc(sizeof(darray(char))); darray_fill_ptr(ret, sz, init); return ret; } void darray_grow(void *arr, size_t sz, size_t newsize) { darray(char) *p = arr; while( newsize > p->size ) { p->size *= 2; if( !p->size || !(p->data = check_realloc(p->data, sz * p->size)) ) memory_error(); } } void darray_free(void *arr) { darray(char) *p = arr; free(p->data); free(p); } void darray_delete_ptr(void *arr) { darray(char) *p = arr; free(p->data); } ================================================ FILE: tools/cc65/atari/mkatr-master/src/darray.h ================================================ /* * Copyright (C) 2016 Daniel Serpell * * 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, see */ #pragma once #include // This code is inspired by "darray.h" by Joseph Adams // Define a dynamic array with struct name, of the given element type. #define darray_struct(type, name) \ struct name \ { \ type *data; \ size_t len; \ size_t size; \ } // Define a dynamic array as unnamed struct, with the given element type. #define darray(type) darray_struct(type, ) // Internal interface - don't call those directly. void darray_fill_ptr(void *, size_t, size_t); void *darray_alloc(size_t, size_t); void darray_grow(void *, size_t, size_t); void darray_delete_ptr(void *); // Allocate a new dynamic array of the given type with the given initial size #define darray_new(type, init_size) darray_alloc(sizeof(type), init_size) // Frees a dynamic array allocated with darray_new() void darray_free(void *); // Initialize an already allocated dynamic array with the given initial size #define darray_init(arr, init_size) \ darray_fill_ptr(&(arr), sizeof((arr).data[0]), init_size) // Deallocates memory for a dynamic array initialized with darray_init() #define darray_delete(arr) darray_delete_ptr(&(arr)) // Adds one element "val" to the dynamic array "arr". #define darray_add(arr, val) \ do \ { \ darray_grow((arr), sizeof((arr)->data[0]), (arr)->len + 1); \ (arr)->data[(arr)->len] = val; \ (arr)->len++; \ } while( 0 ) // Returns the current length (number of elements) of the dynamic array. #define darray_len(arr) ((arr)->len) // Access the i-eth element of the dynamic array. #define darray_i(arr, i) ((arr)->data[i]) // Traverses all elements in the array #define darray_foreach(itm, arr) \ for( (itm) = &darray_i(arr, 0); (itm) < &darray_i(arr, darray_len(arr)); (itm)++ ) ================================================ FILE: tools/cc65/atari/mkatr-master/src/disksizes.h ================================================ /* * Copyright (C) 2016 Daniel Serpell * * 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, see */ #pragma once // Standard disk sizes static struct { int size; int num; } sectors[] = {{128, 720}, // 720 sectors of 128 bytes, 90k (SD) {128, 1040}, // 1040 sectors of 128 bytes, 130k (ED) {256, 720}, // 720 sectors of 256 bytes, 180k (DD) {256, 1440}, // 1440 sectors of 256 bytes, 360k (HD) {256, 2048}, // 2048 sectors of 256 bytes, 512k (hard disk) {256, 4096}, // 4096 sectors of 256 bytes, 1M (hard disk) {256, 8192}, // 8192 sectors of 256 bytes, 2M (hard disk) {256, 16384}, // 16384 sectors of 256 bytes, 4M (hard disk) {256, 32768}, // 32768 sectors of 256 bytes, 8M (hard disk) {256, 65535}, // 65536 sectors of 256 bytes, 16M (biggest possible image) {0, 0}}; ================================================ FILE: tools/cc65/atari/mkatr-master/src/flist.c ================================================ /* * Copyright (C) 2016 Daniel Serpell * * 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, see */ /* * Manages the list of files & directories */ #include "flist.h" #include "msg.h" #include #include #include #include #include #include #include #include static char *read_file(const char *fname, size_t size) { char *data; FILE *f = fopen(fname, "rb"); if( !f ) show_error("can't open file '%s': %s", fname, strerror(errno)); data = check_malloc(size); if( size != fread(data, 1, size, f) ) show_error("error reading file '%s': %s", fname, strerror(errno)); fclose(f); return data; } // Checks if given character is a PATH separator static int is_separator(char c) { #ifdef _WIN32 return c == '/' || c == '\\' || c == ':'; #else return c == '/'; #endif } static char *atari_name(const char *fname) { // Convert to 8+3 filename char *out = strdup(" "); if( !out ) memory_error(); // Search last part of filename (similar to "basename") const char *in, *p; in = p = fname; while( p[0] && p[1] ) { while( is_separator(p[0]) && p[1] ) p++; if( p[0] && !is_separator(p[0]) ) in = p; while( p[0] && !is_separator(p[0]) ) p++; } // Copy up to 8 characters int pos = 0, dot = 0; while( *in ) { char c = *in++; if( !c ) break; else if( c == '.' && !dot ) { pos = 8; dot = 1; continue; } else if( pos > 7 && !dot ) continue; else if( pos > 10 ) break; else if( is_separator(c) ) break; else if( c >= 'a' && c <= 'z' ) out[pos] = c - 'a' + 'A'; else if( (c >= 'A' && c <= 'Z') || (c >= '0' && c <= '9') ) out[pos] = c; else out[pos] = '_'; pos++; } return out; } static char *path_name(const char *dir, const char *name) { size_t n = strlen(dir); char *ret = check_malloc(n + 14); strcpy(ret, dir); ret[n++] = '>'; int i; for( i = 0; i < 11; i++ ) { if( name[i] != ' ' ) { if( i == 8 ) ret[n++] = '.'; ret[n++] = name[i]; } } ret[n] = 0; return ret; } void flist_add_main_dir(file_list *flist) { // Creates MAIN directory struct afile *dir = check_malloc(sizeof(struct afile)); // Convert time to broken time time_t ttim = time(0); struct tm *tim = localtime(&ttim); dir->date[0] = tim->tm_mday; dir->date[1] = tim->tm_mon + 1; dir->date[2] = tim->tm_year % 100; dir->time[0] = tim->tm_hour; dir->time[1] = tim->tm_min; dir->time[2] = tim->tm_sec; dir->fname = ""; dir->aname = "MAIN "; dir->pname = ""; dir->dir = 0; dir->size = 23; dir->is_dir = 1; dir->boot_file = 0; dir->data = check_malloc(SFS_MAX_DIR_SIZE); dir->level = 0; darray_add(flist, dir); } void flist_add_file(file_list *flist, const char *fname, int boot_file, enum fattr attribs) { struct stat st; if( 0 != stat(fname, &st) ) show_error("reading input file '%s': %s", fname, strerror(errno)); if( S_ISREG(st.st_mode) || S_ISDIR(st.st_mode) ) { struct afile *f = check_malloc(sizeof(struct afile)); // Search in the file list if the path is inside an added directory struct afile *dir = 0, **ptr; darray_foreach(ptr, flist) { struct afile *af = *ptr; if( af->is_dir && fname == strstr(fname, af->fname) && (!dir || strlen(dir->fname) < strlen(af->fname)) ) dir = af; } if( !dir ) show_error("internal error - no main directory"); // Convert time to broken time struct tm *tim = localtime(&st.st_mtime); f->date[0] = tim->tm_mday; f->date[1] = tim->tm_mon + 1; f->date[2] = tim->tm_year % 100; f->time[0] = tim->tm_hour; f->time[1] = tim->tm_min; f->time[2] = tim->tm_sec; f->fname = fname; f->aname = atari_name(fname); f->pname = path_name(dir->pname, f->aname); f->dir = dir; f->level = dir->level + 1; f->attribs = attribs; if( !f->aname || !strcmp(f->aname, " ") ) show_error("can't add file/directory named '%s'", fname); // Search for repeated files darray_foreach(ptr, flist) { struct afile *af = *ptr; if( af->dir == f->dir && !strncmp(af->aname, f->aname, 11) ) show_error("repeated file/directory named '%s'", f->pname); } if( S_ISDIR(st.st_mode) ) { f->size = 23; f->is_dir = 1; f->boot_file = 0; f->data = check_malloc(SFS_MAX_DIR_SIZE); show_msg("added dir '%-20s', from '%s'.", f->pname, f->fname); } else { if( st.st_size > 0x1000000 ) show_error("file size too big '%s'", fname); f->size = st.st_size; f->is_dir = 0; f->boot_file = boot_file; f->data = read_file(f->fname, f->size); show_msg("added file '%-20s', %5ld bytes, from '%s'%s%s%s%s.", f->pname, (long)f->size, f->fname, attribs & at_protected ? ", +p" : "", attribs & at_hidden ? ", +h" : "", attribs & at_archived ? ", +a" : "", boot_file ? ", (boot)" : ""); } darray_add(flist, f); } else show_error("invalid file type '%s'", fname); } ================================================ FILE: tools/cc65/atari/mkatr-master/src/flist.h ================================================ /* * Copyright (C) 2016 Daniel Serpell * * 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, see */ /* * List of files to add. */ #pragma once #include "darray.h" /* File attributes */ enum fattr { at_protected = 1, at_hidden = 2, at_archived = 4 }; /* One file or directory */ struct afile { const char *fname; const char *aname; const char *pname; // Full path name char *data; size_t size; struct afile *dir; // Parent directory int level; // Level inside directory structure, 0 = root int is_dir; enum fattr attribs; int boot_file; int map_sect; char date[3]; char time[3]; }; /* Max directory size in bytes, 32kb */ #define SFS_MAX_DIR_SIZE 32768 typedef darray(struct afile *) file_list; void flist_add_main_dir(file_list *flist); void flist_add_file(file_list *flist, const char *fname, int boot_file, enum fattr attribs); ================================================ FILE: tools/cc65/atari/mkatr-master/src/lsatr.c ================================================ /* * Copyright (C) 2023 Daniel Serpell * * 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, see */ /* * Loads an ATR with a SpartaDOS file-system and list contents. */ #include "atr.h" #include "compat.h" #include "lsdos.h" #include "lsextra.h" #include "lshowfen.h" #include "lssfs.h" #include "msg.h" #include #include #include #include #include //--------------------------------------------------------------------- static void show_usage(void) { printf("Usage: %s [options] \n" "Options:\n" "\t-a\tShow listing in Atari instead of UNIX format.\n" "\t-l\tConvert filenames to lower-case.\n" "\t-x\tExtract listed files to current path.\n" "\t-X path\tExtract listed files to given path.\n" "\t-h\tShow this help.\n" "\t-v\tShow version information.\n", prog_name); exit(EXIT_SUCCESS); } //--------------------------------------------------------------------- int main(int argc, char **argv) { const char *atr_name = 0; const char *ext_path = 0; int lower_case = 0; int atari_list = 0; int extract_files = 0; prog_name = argv[0]; for( int i = 1; i < argc; i++ ) { char *arg = argv[i]; if( arg[0] == '-' ) { char op; while( 0 != (op = *++arg) ) { if( op == 'h' || op == '?' ) show_usage(); else if( op == 'l' ) lower_case = 1; else if( op == 'a' ) atari_list = 1; else if( op == 'x' ) extract_files = 1; else if( op == 'X' ) { if( i + 1 >= argc ) show_opt_error("option '-X' needs an argument"); i++; extract_files = 1; ext_path = argv[i]; } else if( op == 'v' ) show_version(); else show_opt_error("invalid command line option '-%c'", op); } } else if( !atr_name ) atr_name = arg; else show_opt_error("multiple ATR files in command line"); } if( !atr_name ) show_opt_error("ATR file name expected"); if( extract_files && atari_list ) show_opt_error("options '-x' and '-a' not compatible"); // Load ATR image file struct atr_image *atr = load_atr_image(atr_name); // Open target directory if( ext_path && chdir(ext_path) ) { // If path does not exists, check if we can make it if( errno == ENOENT ) { // Try to create the path show_msg("creating output path '%s'.", ext_path); if( compat_mkdir(ext_path) || chdir(ext_path) ) show_error("can't create path, '%s': %s", ext_path, strerror(errno)); } else show_error("%s: invalid extract path, %s", ext_path, strerror(errno)); } int e = sfs_read(atr, atr_name, atari_list, lower_case, extract_files); if( e ) e = howfen_read(atr, atr_name, atari_list, lower_case, extract_files); if( e ) e = dos_read(atr, atr_name, atari_list, lower_case, extract_files); if( e ) e = extra_read(atr, atr_name, atari_list, lower_case, extract_files); if( e ) show_msg("%s: ATR image format not supported.", atr_name); atr_free(atr); return e; } ================================================ FILE: tools/cc65/atari/mkatr-master/src/lsdos.c ================================================ /* * Copyright (C) 2023 Daniel Serpell * * 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, see */ /* * Reads a DOS 2 or DOS 2.5 file-system. */ #define _GNU_SOURCE #include "lsdos.h" #include "atr.h" #include "compat.h" #include "msg.h" #include #include #include #include #include #include #include #include #include //--------------------------------------------------------------------- // Global state struct lsdos { struct atr_image *atr; int atari_list; int lower_case; int extract_files; int dir_size; int ldos_csize; int fix_bibo; }; //--------------------------------------------------------------------- static uint16_t read16(const uint8_t *p) { return p[0] | (p[1] << 8); } // Read data and write a UNIX filename and an "Atari" filename. static unsigned get_name(char *name, char *aname, const uint8_t *data, int max, int lower_case) { unsigned l = 0; int dot = 0; memset(aname, ' ', max + 1); aname[max + 1] = 0; for( int i = 0; i < max; i++ ) { uint8_t c = data[i]; if( (c >= 0xB0 && c <= 0xB9) || (c >= 0xC1 && c <= 0xDA) || (c >= 0xE1 && c <= 0xFA) ) c = c & 0x7F; if( c >= 'A' && c <= 'Z' && lower_case ) c = c - 'A' + 'a'; if( c < ' ' || c == '/' || c == '.' || c == '?' || c == '\\' || c == 96 || c > 'z' ) c = '_'; else if( c == ' ' ) continue; if( i > 7 && !dot ) { dot = 1; name[l++] = '.'; } name[l++] = c; aname[i + dot] = c; } name[l] = 0; return l; } // Read up to size bytes from file at given map sector static unsigned read_file(struct atr_image *atr, unsigned sect, unsigned size, uint8_t *data, int dos2, int mdos) { // To avoid circular references, keep a bitmap with all the sectors already used uint8_t *visited = check_calloc(65536, 1); unsigned lst = atr->sec_size - 3; unsigned pos = 0; while( sect ) { const uint8_t *m = atr_data(atr, sect); if( sect < 2 || !m ) { show_msg("invalid sector link"); break; } unsigned len = m[lst + 2]; unsigned link = (m[lst] << 8) | m[lst + 1]; // DOS 1.0, only last sector has a size field if( !dos2 && !mdos ) { len = (len & 0x80) ? len & 0x7F : lst; link = (len & 0x80) ? 0 : link; } // Only MyDOS stores full sector number if( !mdos || atr->sec_count < 1023 ) link = link & 0x3FF; if( visited[sect & 0xFFFF] ) { show_msg("loop in sector link at sector %d", sect); break; } else visited[sect & 0xFFFF] = 1; if( size > pos ) { unsigned rem = size - pos > len ? len : size - pos; memcpy(data + pos, m, rem); } pos += len; sect = link; } free(visited); return pos; } static const uint8_t *dir_data(struct lsdos *ls, unsigned dir, unsigned fn) { if( ls->ldos_csize ) { int cluster = dir / ls->ldos_csize; int pos = (dir + fn / 8) % ls->ldos_csize; int sector = cluster * ls->ldos_csize + pos; return atr_data(ls->atr, sector); } else if( ls->fix_bibo ) { const uint8_t *data = atr_data(ls->atr, dir + fn / 16); return fn & 8 ? data + 0x80 : data; } else return atr_data(ls->atr, dir + fn / 8); } static void read_dir(struct lsdos *ls, unsigned dir, const char *name) { unsigned ssize = ls->atr->sec_size; if( ls->atari_list ) printf("Directory of %s\n\n", *name ? name : "/"); for( int fn = 0; fn < ls->dir_size; fn++ ) { const uint8_t *data = dir_data(ls, dir, fn); if( !data ) break; const uint8_t *entry = data + (fn & 7) * 16; int flags = entry[0]; unsigned size = read16(entry + 1); unsigned sect = read16(entry + 3); if( !flags ) // End of directory break; if( flags & 0x80 ) // Deleted continue; char fname[32], aname[32]; if( !get_name(fname, aname, entry + 5, 11, ls->lower_case) || !*fname ) { show_msg("%s: invalid file name, skip", name); continue; } if( sect < 2 ) { show_msg("%s: invalid file sector, skip", name); continue; } char *new_name; asprintf(&new_name, "%s/%s", name, fname); if( flags == 0x10 ) { if( ls->extract_files ) { struct stat st; const char *path = new_name + 1; fprintf(stderr, "%s/\n", path); // Check if directory already exists: if( stat(path, &st) || !S_ISDIR(st.st_mode) ) { // Create new directory if( compat_mkdir(path) ) show_error("%s: can´t create directory, %s", path, strerror(errno)); } // Extract files inside read_dir(ls, sect, new_name); } else if( ls->atari_list ) { // Print entry, but don´t recurse printf("%-12s \n", aname); } else { printf("%8u\t\t%s/\n", size * ssize, new_name); read_dir(ls, sect, new_name); } } else if( 0 != (flags & 0x41) ) { int mdos = flags & 0x04; int dos2 = flags & 0x02; int max_size = size * ssize; uint8_t *fdata = check_malloc(max_size); unsigned fsize = 0; // Skip files of size 0 if( max_size > 0 ) { fsize = read_file(ls->atr, sect, max_size, fdata, dos2, mdos); if( fsize > max_size ) show_msg("%s: file too long in disk", new_name); } if( ls->extract_files ) { struct stat st; const char *path = new_name + 1; fprintf(stderr, "%s\n", path); // Check if file already exists: if( 0 == stat(path, &st) ) show_error("%s: file already exists.", path); // Create new file int fd = creat(path, 0666); if( fd == -1 ) show_error("%s: can´t create file, %s", path, strerror(errno)); if( fsize != write(fd, fdata, fsize) ) show_error("%s: can´t write file, %s", path, strerror(errno)); if( close(fd) ) show_error("%s: can´t write file, %s", path, strerror(errno)); } else if( ls->atari_list ) printf("%-12s %7u\n", aname, fsize); else printf("%8u\t\t%s\n", fsize, new_name); free(fdata); } else { show_msg("%s: invalid file type %02x", new_name, flags); } free(new_name); } // traverse dir again if listing in Atari format, to show sub directories if( ls->atari_list ) { printf("\n"); for( int fn = 0; fn < ls->dir_size; fn++ ) { const uint8_t *data = dir_data(ls, dir, fn); if( !data ) break; const uint8_t *entry = data + (fn & 7) * 16; int flags = entry[0]; unsigned sect = read16(entry + 3); if( !flags ) break; // End of directory if( flags != 0x10 ) // Not directory continue; char fname[32], aname[32]; if( !get_name(fname, aname, entry + 5, 11, ls->lower_case) || !*fname ) continue; char *new_name; asprintf(&new_name, "%s/%s", name, fname); read_dir(ls, sect, new_name); free(new_name); } } } // Detect Bibo-DOS directory format, it uses the full sector in DD for the // directory data, instead of the first 128 bytes of MyDOS and DOS 2.0D. // Note that Bibo-DOS 7.0 fixes this, so it will be detected ad MyDOS. int detect_bibo(struct atr_image *atr, int dir_sect) { const uint8_t *data = atr_data(atr, dir_sect); if( !data ) return 0; // Check if this directory has any entries above 128 bytes for( int i = 0; i < 16; i++ ) { int flags = data[i * 16]; // End of directory? if( !flags ) break; // Invalid entry? if( 0 == (flags & 0xC1) ) continue; if( flags == 0xFF ) continue; int siz = read16(data + i * 16 + 1); int sec = read16(data + i * 16 + 3); if( sec < 1 || sec > atr->sec_count || siz < 1 || siz + 12 > atr->sec_count ) continue; // Valid and more than 7, it is Bibo-DOS if( i > 7 ) return 1; } // Bibo-DOS does not support sub-directories, so we only need to examine // the main directory. return 0; } int dos_read(struct atr_image *atr, const char *atr_name, int atari_list, int lower_case, int extract_files) { // Check DOS filesystem // Read VTOC const uint8_t *vtoc = atr_data(atr, 360); if( !vtoc ) return 1; unsigned signature = vtoc[0]; unsigned alloc_sect = read16(vtoc + 1); unsigned free_sect = read16(vtoc + 3); unsigned bitmap_0 = vtoc[10]; // Bitmap for sectors 0 to 7 unsigned bitmap_360 = vtoc[55]; // Bitmap for sectors 360 to 367 unsigned dir_size = 64; // Entries per directory unsigned ldos_csize = 0; // LiteDOS cluster size unsigned fix_bibo = 0; // Fix Bibo-DOS DD directories. char *bad_sig = ""; // Message for corrected bad signature // Calculate signature for MyDOS image format: unsigned mydos_sig = 2; if( (atr->sec_size == 128 && atr->sec_count > 943) || (atr->sec_size == 256 && atr->sec_count > 1023) ) mydos_sig = 2 + (atr->sec_count / 8 + 266) / 256; // Check for LiteDOS if( signature & 0x80 ) { // Check rest of signature if( memcmp(vtoc + 3, "LiteDOS", 7) ) return 1; free_sect = read16(vtoc + 0x71); ldos_csize = 1 + (signature & 0x7F); dir_size = 8 * ldos_csize - 8; } else if( 0x40 == (signature & 0xC0) ) { // Check rest of signature if( memcmp(vtoc + 5, "\0\0\0\0\0", 5) ) return 1; if( bitmap_0 & 0x80 ) return 1; ldos_csize = 2 + 2 * (signature & 0x3F); dir_size = 8 * ldos_csize - 8; } else { // Check for malformed signatures if( !signature ) { if( 0 != (bitmap_0 & 0xC0) || 0 != (bitmap_360 & 0xC0) ) return 1; if( memcmp(vtoc + 5, "\0\0\0\0\0", 5) ) return 1; if( atr->sec_count > 720 || free_sect > alloc_sect || (alloc_sect < 707 || alloc_sect > 709) ) return 1; // Assume DOS 2 signature = alloc_sect != 709 ? 2 : 1; bad_sig = " (with bad signature)"; } // Detect MyDOS images with bad signature, this happens in 720 DD images if( signature == 3 && mydos_sig == 2 && ((alloc_sect == 707 && atr->sec_size == 128) || (alloc_sect == 708 && atr->sec_size == 256)) ) { // Detect as MyDOS signature to 3 mydos_sig = 3; bad_sig = " (with bad signature)"; } // Patch bad VTOC if( !*bad_sig && signature == 2 && (alloc_sect == 707 || alloc_sect == 708) && alloc_sect >= free_sect && 0 != (bitmap_0 & 0xF0) ) { bitmap_0 &= 0x0F; bitmap_360 = 0x7F; bad_sig = " (with bad VTOC)"; } if( (signature == 1 && atr->sec_size != 128) || // DOS 1 only supports SD, (signature == 1 && atr->sec_count > 720) || // 720 sectors of 128 bytes. (signature > 2 && signature != mydos_sig) || // MyDOS signature for >944 secs (signature == 2 && atr->sec_count > 1120) || // DOS 2.x only up to 1040 // sectors, but there are images // with 1120 sectors. 0 != (bitmap_0 & 0x80) ) // Sector 0 allocated { return 1; } // DOS 1 bitmap should reserve sector 1, DOS 2 reserves 1, 2 and 3 if( 0 != (bitmap_0 & 0xC0) || (signature == 2 && 0 != (bitmap_0 & 0xF0)) || 0 != (bitmap_360 & 0x80) ) { show_msg("%s: invalid DOS file system, bitmap not ok.", atr_name); return 1; } } if( alloc_sect > atr->sec_count ) show_msg("%s: DOS sectors (%d) more than ATR image (%d).", atr_name, alloc_sect, atr->sec_count); if( free_sect > alloc_sect ) show_msg("%s: DOS free sectors more than allocated.", atr_name); const char *dosver = "DOS 1"; if( signature == 2 && atr->sec_count > 943 ) dosver = "DOS 2.5"; else if( signature == 2 && atr->sec_size == 128 ) dosver = "DOS 2.0s"; else if( signature == 2 ) dosver = "DOS 2.0D"; else if( signature & 0x80 ) dosver = "LiteDOS"; else if( signature & 0x40 ) dosver = "LiteDOS-SE"; else if( signature > 2 ) dosver = "MyDOS"; if( atr->sec_size == 256 && !ldos_csize && detect_bibo(atr, 361) ) { dosver = "Bibo-DOS"; fix_bibo = 1; } if( atari_list ) printf("ATR image: %s\n" "Image size: %u sectors of %u bytes\n" "DOS size: %u sectors free of %u total\n" "Volume: %s%s\n", atr_name, atr->sec_count, atr->sec_size, free_sect, alloc_sect, dosver, bad_sig); else printf("%s: %u sectors of %u bytes, %s%s, %d sectors free of %d total.\n", atr_name, atr->sec_count, atr->sec_size, dosver, bad_sig, free_sect, alloc_sect); struct lsdos *ls = check_malloc(sizeof(struct lsdos)); ls->atr = atr; ls->atari_list = atari_list; ls->lower_case = lower_case; ls->extract_files = extract_files; ls->dir_size = dir_size; ls->ldos_csize = ldos_csize; ls->fix_bibo = fix_bibo; read_dir(ls, 361, ""); free(ls); return 0; } ================================================ FILE: tools/cc65/atari/mkatr-master/src/lsdos.h ================================================ /* * Copyright (C) 2023 Daniel Serpell * * 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, see */ /* * Reads an Atari DOS file-system. */ #pragma once #include "atr.h" int dos_read(struct atr_image *atr, const char *atr_name, int atari_list, int lower_case, int extract_files); ================================================ FILE: tools/cc65/atari/mkatr-master/src/lsextra.c ================================================ /* * Copyright (C) 2023 Daniel Serpell * * 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, see */ /* * Extracts various simple boot formats. */ #define _GNU_SOURCE #include "crc32.h" #include "lsextra.h" #include "msg.h" #include #include #include #include #include #include #include static unsigned get_name(char *name, char *aname, const uint8_t *data, int max, int lower_case) { unsigned l = 0; unsigned a = 0; int dot = 0; memset(aname, ' ', max + 1); aname[max + 1] = 0; for( int i = 0; i < max; i++ ) { uint8_t c = data[i]; if( c >= 'A' && c <= 'Z' && lower_case ) c = c - 'A' + 'a'; if( c == '.' ) { // Store dot dot = 1; name[l++] = c; while( a < 8 ) aname[a++] = ' '; continue; } if( c < ' ' || c == '/' || c == '.' || c == '?' || c == '\\' || c == 96 || c > 'z' ) c = '_'; else if( c == ' ' ) continue; if( i > 7 && !dot ) { dot = 1; name[l++] = '.'; aname[a++] = ' '; } name[l++] = c; aname[a++] = c; } name[l] = 0; return l; } static uint16_t read16(const uint8_t *p) { return (p == NULL) ? 0 : (p[0] | (p[1] << 8)); } static int check_bas2boot(struct atr_image *atr) { // BAS2BOOT only supports 128 bytes per sector, and we must have // at least one data sector if( atr->sec_size != 128 || atr->sec_count < 2 ) return 0; const uint8_t *sec1 = atr_data(atr, 1); const uint8_t *sec2 = atr_data(atr, 2); // Check boot count == 2 and load address == $700 if( read16(sec1) != 0x200 || read16(sec1 + 2) != 0x700 ) return 0; // Check ID if( memcmp(sec2 + 0x3C, "BAS2BOOT", 8) ) return 0; // Ok, we have a BAS2BOOT file return 1; } static void extract_bas2boot(struct atr_image *atr, int atari_list, int lower_case, int extract_files) { // Get headers const uint8_t *sec1 = atr_data(atr, 1); const uint8_t *sec2 = atr_data(atr, 2); // Get filename char path[32], aname[32]; if( !get_name(path, aname, sec2 + 0x60, 12, lower_case) || !*path ) { strcpy(path, "noname.bas"); strcpy(aname, "NONAME BAS"); } // Adds '.BAS' if no extension is present if( !strchr(path, '.') ) { const char *ext = lower_case ? ".bas" : ".BAS"; strcat(path, ext); memcpy(aname + 9, ext + 1, 3); } // Get data and length unsigned fsize = read16(sec1 + 8); uint8_t *fdata = check_malloc(fsize < 16 ? 16 : fsize); // Read header and undo bad conversion for certain files memcpy(fdata, sec2 + 0x72, 14); for( int i = 2; i < 14; i += 2 ) { int x = fdata[0] + fdata[1] * 256; int y = fdata[i] + fdata[i + 1] * 256 + x; fdata[i] = y & 0xFF; fdata[i + 1] = y >> 8; } // Read rest of file unsigned secnum = 3; for( unsigned pos = 14; pos < fsize; pos += 128, secnum++ ) { unsigned len = fsize - pos < 128 ? fsize - pos : 128; const uint8_t *s = atr_data(atr, secnum); if( !s ) memset(fdata + pos, 0, len); else memcpy(fdata + pos, s, len); } if( extract_files ) { struct stat st; fprintf(stderr, "%s\n", path); // Check if file already exists: if( 0 == stat(path, &st) ) show_error("%s: file already exists.", path); // Create new file int fd = creat(path, 0666); if( fd == -1 ) show_error("%s: can´t create file, %s", path, strerror(errno)); if( fsize != write(fd, fdata, fsize) ) show_error("%s: can´t write file, %s", path, strerror(errno)); if( close(fd) ) show_error("%s: can´t write file, %s", path, strerror(errno)); } else if( atari_list ) printf("%-12s %7u\n", aname, fsize); else printf("%8u\t\t%s\n", fsize, path); free(fdata); } static int check_kboot(struct atr_image *atr) { // K-File stucture: // 0000 : $00 / $03 / $00 / $07 / $14 / $07 / $4c / $14 / $07 // 0009 : LSB / MSB / HSB (24 bits) of file length // 000C : 00 // 000D : a9 46 8d c6 02 d0 fe ... // Only supports 128 bytes per sector, and the first 3 sectors are the boot // loader: if( atr->sec_size != 128 || atr->sec_count < 3 ) return 0; const uint8_t *sec = atr_data(atr, 1); // Check "signature" return 0 == memcmp("\x00\x03\x00\x07\x14\x07\x4c\x14\x07", sec, 9); } static void extract_kboot(struct atr_image *atr, const char *atr_name, int atari_list, int lower_case, int extract_files) { const uint8_t *sec = atr_data(atr, 1); unsigned fsize = sec[9] + (sec[10] << 8) + (sec[11] << 16); if( !fsize ) { if( atari_list ) printf("\n"); else printf("%8u\t\t/\n", 0); return; } // Get file data unsigned max_len = atr->sec_count * 128 - 3 * 128; const uint8_t *fdata = atr_data(atr, 4); if( !fdata ) { show_error("%s: missing file data", atr_name); return; } if( max_len < fsize ) { show_msg("%s: data shorter than expected, truncating", atr_name); fsize = max_len; } unsigned crc = crc32(0, fdata, fsize); if( extract_files ) { char *path; asprintf(&path, "kboot-%08x.xex", crc); struct stat st; fprintf(stderr, "%s\n", path); // Check if file already exists: if( 0 == stat(path, &st) ) show_error("%s: file already exists.", path); // Create new file int fd = creat(path, 0666); if( fd == -1 ) show_error("%s: can´t create file, %s", path, strerror(errno)); if( fsize != write(fd, fdata, fsize) ) show_error("%s: can´t write file, %s", path, strerror(errno)); if( close(fd) ) show_error("%s: can´t write file, %s", path, strerror(errno)); free(path); } else if( atari_list ) printf("%08X COM %7u\n", crc, fsize); else { printf("%8u\t\t/kboot-%08x.xex\n", fsize, crc); } } static void show_header(struct atr_image *atr, const char *atr_name, int atari_list, const char *volname) { if( atari_list ) printf("ATR image: %s\n" "Image size: %u sectors of %u bytes\n" "Volume: %s\n", atr_name, atr->sec_count, atr->sec_size, volname); else printf("%s: %u sectors of %u bytes, %s.\n", atr_name, atr->sec_count, atr->sec_size, volname); } int extra_read(struct atr_image *atr, const char *atr_name, int atari_list, int lower_case, int extract_files) { // Check BAS2BOOT if( check_bas2boot(atr) ) { show_header(atr, atr_name, atari_list, "BAS2BOOT"); extract_bas2boot(atr, atari_list, lower_case, extract_files); return 0; } else if( check_kboot(atr) ) { show_header(atr, atr_name, atari_list, "K-BOOT"); extract_kboot(atr, atr_name, atari_list, lower_case, extract_files); return 0; } return 1; } ================================================ FILE: tools/cc65/atari/mkatr-master/src/lsextra.h ================================================ /* * Copyright (C) 2024 Daniel Serpell * * 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, see */ /* * Extracts various simple boot formats. */ #pragma once #include "atr.h" int extra_read(struct atr_image *atr, const char *atr_name, int atari_list, int lower_case, int extract_files); ================================================ FILE: tools/cc65/atari/mkatr-master/src/lshowfen.c ================================================ /* * Copyright (C) 2024 Daniel Serpell * * 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, see */ /* * Reads a HOWFEN DOS menu disk. */ #define _GNU_SOURCE #include "lshowfen.h" #include "atr.h" #include "compat.h" #include "msg.h" #include #include #include #include #include #include #include // Read data and write a UNIX filename and an "Atari" filename. static unsigned get_name(char *name, char *aname, const uint8_t *data, int max, int lower_case) { unsigned len = 0, last = 0; memset(aname, ' ', max + 1); for( int i = 0; i < max; i++ ) { uint8_t c = data[i]; if( (c & 0x40) == 0 ) c = c + 0x20; else if( (c & 0x60) == 0x40 ) c = c - 0x40; if( (c >= 0xB0 && c <= 0xB9) || (c >= 0xC1 && c <= 0xDA) || (c >= 0xE1 && c <= 0xFA) ) c = c & 0x7F; if( c >= 'A' && c <= 'Z' && lower_case ) c = c - 'A' + 'a'; if( c < ' ' || c == '/' || c == '.' || c == '?' || c == '\\' || c == 96 || c > 'z' ) c = '_'; name[len++] = c; aname[i] = c; if( c != ' ' ) last = len; } name[last] = 0; aname[last] = 0; return last; } // Decode decimal length int get_len(const uint8_t *p) { int len = 0; for( int i = 0; i < 4; i++ ) { if( p[i] > 0x0F && p[i] < 0x1A ) len = len * 10 + p[i] - 0x10; } return len; } int howfen_read(struct atr_image *atr, const char *atr_name, int atari_list, int lower_case, int extract_files) { const uint8_t *sec1 = atr_data(atr, 1); if( !sec1 ) return 1; // Minimal number of sectors is 10 if( atr->sec_count < 10 ) return 1; // Check signature: ' HOWFEN DOS ', in internal codes if( memcmp(sec1 + 0x58, "\x80\x28\x2f\x37\x26\x25\x2e\x00\x24\x2f\x33\x00", 12) ) return 1; // Get menu version char ver[6]; memcpy(ver, sec1 + 0x64, 5); if( ver[0] == 0x36 ) { for( int i = 0; i < 5; i++ ) ver[i] = (ver[i] & 0x3F) + 0x20; ver[5] = 0; } else { ver[0] = 0; } if( atari_list ) printf("ATR image: %s\n" "Image size: %u sectors of %u bytes\n" "Volume: HOWFEN DOS %s\n", atr_name, atr->sec_count, atr->sec_size, ver); else printf("%s: %u sectors of %u bytes, HOWFEN DOS %s.\n", atr_name, atr->sec_count, atr->sec_size, ver); // This is the actual tables in the loader: // $89 + N*$20 : line with letter, name and size // $329 : number of files in the menu // $32A + N : LSB of starting sector of file N // $33E + N : MSB of starting sector of file N // // Files are stored ass boot sectors: // $00 : if 1, high part of number of sectors, ignored otherwise. // $01 : number of sectors // $02/$03 : Load address // $04/$05 : Address copied to DOSINI // $06 ... : Run data // Read directory char fname[32]; char aname[32]; for( int i = 0; i < 20; i++ ) { const uint8_t *pos = sec1 + 0x8A + i * 0x20; if( *pos == (0x21 + i) ) { // Get file size int slen = get_len(pos + 0x1B); // Check filename if( get_name(fname, aname, pos + 2, 25, lower_case) ) { // Get sector number uint16_t snum = sec1[0x32A + i] + (sec1[0x33E + i] << 8); // Data is contiguos on disk, just read const uint8_t *fdata = atr_data(atr, snum); if( fdata ) { int ilen = fdata[1] + (fdata[0] == 1 ? 0x100 : 0); if( ilen != slen ) show_msg("length does not match"); // Check that we have all the data if( snum + slen - 1 > atr->sec_count ) { show_msg("truncated file"); slen = atr->sec_count - snum + 1; } } else { show_msg("invalid sector number"); slen = 0; } unsigned fsize = slen * atr->sec_size; if( extract_files ) { struct stat st; fprintf(stderr, "%s\n", fname); // Check if file already exists: if( 0 == stat(fname, &st) ) show_error("%s: file already exists.", fname); // Create new file int fd = creat(fname, 0666); if( fd == -1 ) show_error("%s: can´t create file, %s", fname, strerror(errno)); if( fsize != write(fd, fdata, fsize) ) show_error("%s: can´t write file, %s", fname, strerror(errno)); if( close(fd) ) show_error("%s: can´t write file, %s", fname, strerror(errno)); } else if( atari_list ) printf("%-20s %7u\n", aname, fsize); else printf("%8u\t\t/%s\n", fsize, fname); } } else show_msg("invalid entry at pos %c", 'A' + i); } return 0; } ================================================ FILE: tools/cc65/atari/mkatr-master/src/lshowfen.h ================================================ /* * Copyright (C) 2023 Daniel Serpell * * 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, see */ /* * Reads a HOWFEN DOS menu disk. */ #pragma once #include "atr.h" int howfen_read(struct atr_image *atr, const char *atr_name, int atari_list, int lower_case, int extract_files); ================================================ FILE: tools/cc65/atari/mkatr-master/src/lssfs.c ================================================ /* * Copyright (C) 2023 Daniel Serpell * * 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, see */ /* * Reads a SpartaDOS file-system. */ #define _GNU_SOURCE #include "lssfs.h" #include "atr.h" #include "compat.h" #include "msg.h" #include #include #include #include #include #include #include #include #include //--------------------------------------------------------------------- // Global state struct lssfs { struct atr_image *atr; int atari_list; int lower_case; int extract_files; }; //--------------------------------------------------------------------- static uint16_t read16(const uint8_t *p) { return p[0] | (p[1] << 8); } static unsigned read24(const uint8_t *p) { return p[0] | (p[1] << 8) | (p[2] << 16); } // Get maximum size of file at given map sector static unsigned file_msize(struct atr_image *atr, unsigned map) { if( map < 2 || map > atr->sec_count ) { show_msg("invalid sector map"); return 0; } unsigned size = 0; const uint8_t *m; while( 0 != (m = atr_data(atr, map)) ) { // Iterate all sectors of map for( unsigned s = 4; s < atr->sec_size; s += 2 ) if( read16(m + s) ) size += atr->sec_size; // next map map = read16(m); } return size; } // Read up to size bytes from file at given map sector static unsigned read_file(struct atr_image *atr, unsigned map, unsigned size, uint8_t *data) { const uint8_t *m = atr_data(atr, map); unsigned s = 4; unsigned pos = 0; if( map < 2 || !m ) { show_msg("invalid sector map"); return 0; } while( size ) { if( s >= atr->sec_size ) { // next map map = read16(m); if( !map ) return pos; m = atr_data(atr, map); s = 4; if( map < 2 || !m ) { show_msg("invalid next sector map"); return pos; } } unsigned rem = size > atr->sec_size ? atr->sec_size : size; unsigned sec = read16(m + s); s += 2; if( !sec ) memset(data + pos, 0, rem); else if( sec < 2 || sec > atr->sec_count ) { show_msg("invalid data sector"); return pos; } else memcpy(data + pos, atr_data(atr, sec), rem); pos += rem; size -= rem; } return pos; } // Read data and write a UNIX filename and an "Atari" filename. static unsigned get_name(char *name, char *aname, const uint8_t *data, int max, int lower_case) { unsigned l = 0; int dot = 0; memset(aname, ' ', max + 1); aname[max + 1] = 0; for( int i = 0; i < max; i++ ) { uint8_t c = data[i]; if( c >= 'A' && c <= 'Z' && lower_case ) c = c - 'A' + 'a'; if( c < ' ' || c == '/' || c == '.' || c == '?' || c == '\\' || c == 96 || c > 'z' ) c = '_'; else if( c == ' ' ) continue; if( i > 7 && !dot ) { dot = 1; name[l++] = '.'; } name[l++] = c; aname[i + dot] = c; } name[l] = 0; return l; } static void set_times(const char *path, int d_day, int d_mon, int d_yea, int t_hh, int t_mm, int t_ss) { struct utimbuf tb; struct tm t; memset(&t, 0, sizeof(t)); t.tm_sec = t_ss; t.tm_min = t_mm; t.tm_hour = t_hh; t.tm_mday = d_day; t.tm_mon = d_mon; t.tm_year = d_yea > 83 ? d_yea : d_yea + 100; t.tm_isdst = -1; tb.actime = tb.modtime = mktime(&t); utime(path, &tb); } static void read_dir(struct lssfs *ls, unsigned map, const char *name) { if( ls->atari_list ) printf("Directory of %s\n\n", *name ? name : "/"); uint8_t *data = check_malloc(65536); // max directory size (2848 entries) unsigned len = read_file(ls->atr, map, 65536, data); if( !len ) { show_msg("%s: can´t get directory data", name); free(data); return; } else if( len == 65536 ) show_msg("%s: directory too big", name); // traverse dir for( unsigned i = 23; i < len; i += 23 ) { unsigned flags = data[i]; if( !flags ) break; // no more entries if( 0 == (flags & 0x08) ) continue; // unused if( 0x10 == (flags & 0x10) ) continue; // erased int is_dir = flags & 0x20; unsigned fmap = read16(data + i + 1); unsigned fsize = read24(data + i + 3); int fd_day = data[i + 17]; int fd_mon = data[i + 18]; int fd_yea = data[i + 19]; int ft_hh = data[i + 20]; int ft_mm = data[i + 21]; int ft_ss = data[i + 22]; char fname[32], aname[32]; if( !get_name(fname, aname, data + i + 6, 11, ls->lower_case) || !*fname ) { show_msg("%s: invalid file name, skip", name); continue; } char *new_name; asprintf(&new_name, "%s/%s", name, fname); if( is_dir ) { if( ls->extract_files ) { struct stat st; const char *path = new_name + 1; fprintf(stderr, "%s/\n", path); // Check if directory already exists: if( stat(path, &st) || !S_ISDIR(st.st_mode) ) { // Create new directory if( compat_mkdir(path) ) show_error("%s: can´t create directory, %s", path, strerror(errno)); } // Extract files inside read_dir(ls, fmap, new_name); // Set time/date set_times(path, fd_day, fd_mon, fd_yea, ft_hh, ft_mm, ft_ss); } else if( ls->atari_list ) { // Print entry, but don´t recurse printf("%-12s %02d-%02d-%02d %02d:%02d\n", aname, fd_day, fd_mon, fd_yea, ft_hh, ft_mm); } else { unsigned dirsz = file_msize(ls->atr, fmap); printf("%8u\t%02d-%02d-%02d %02d:%02d:%02d\t%s/\n", dirsz, fd_day, fd_mon, fd_yea, ft_hh, ft_mm, ft_ss, new_name); read_dir(ls, fmap, new_name); } } else { uint8_t *fdata = check_malloc(fsize); unsigned r = read_file(ls->atr, fmap, fsize, fdata); if( r != fsize ) show_msg("%s: short file in disk", new_name); if( ls->extract_files ) { struct stat st; const char *path = new_name + 1; fprintf(stderr, "%s\n", path); // Check if file already exists: if( 0 == stat(path, &st) ) show_error("%s: file already exists.", path); // Create new file int fd = creat(path, 0666); if( fd == -1 ) show_error("%s: can´t create file, %s", path, strerror(errno)); if( fsize != write(fd, fdata, fsize) ) show_error("%s: can´t write file, %s", path, strerror(errno)); if( close(fd) ) show_error("%s: can´t write file, %s", path, strerror(errno)); // Set time/date set_times(path, fd_day, fd_mon, fd_yea, ft_hh, ft_mm, ft_ss); } else if( ls->atari_list ) printf("%-12s %7u %02d-%02d-%02d %02d:%02d\n", aname, fsize, fd_day, fd_mon, fd_yea, ft_hh, ft_mm); else printf("%8u\t%02d-%02d-%02d %02d:%02d:%02d\t%s\n", fsize, fd_day, fd_mon, fd_yea, ft_hh, ft_mm, ft_ss, new_name); free(fdata); } free(new_name); } // traverse dir again if listing in Atari format, to show sub directories if( ls->atari_list ) { printf("\n"); for( unsigned i = 23; i < len; i += 23 ) { unsigned flags = data[i]; if( !flags ) break; // no more entries if( 0 == (flags & 0x08) ) continue; // unused if( 0x10 == (flags & 0x10) ) continue; // erased if( 0 == (flags & 0x20) ) continue; // not directory unsigned fmap = read16(data + i + 1); char fname[32], aname[32]; if( !get_name(fname, aname, data + i + 6, 11, ls->lower_case) ) continue; char *new_name; asprintf(&new_name, "%s/%s", name, fname); read_dir(ls, fmap, new_name); free(new_name); } } free(data); } int sfs_read(struct atr_image *atr, const char *atr_name, int atari_list, int lower_case, int extract_files) { // Check SFS filesystem // Read superblock const uint8_t *boot = atr_data(atr, 1); unsigned signature = boot[7]; unsigned rootdir_map = read16(boot + 9); unsigned num_sect = read16(boot + 11); unsigned bitmap_sect = read16(boot + 16); unsigned sector_size = boot[31] ? boot[31] : 256; char vol_name[32], aname[32]; if( !get_name(vol_name, aname, boot + 22, 8, lower_case) ) vol_name[0] = 0; if( signature != 0x80 ) return 1; if( sector_size != atr->sec_size ) { show_msg("%s: invalid SpartaDOS file system, mismatch sector sizes (%d!=%d).", atr_name, sector_size, atr->sec_size); return 1; } if( num_sect < atr->sec_count ) show_msg("%s: ATR image is bigger than file system.", atr_name); if( num_sect > atr->sec_count ) show_msg("%s: WARNING: ATR image is smaller than file system.", atr_name); if( rootdir_map < 2 || rootdir_map > atr->sec_count ) { show_msg("%s: invalid SpartaDOS file system, root dir map outside disk.", atr_name); return 1; } if( bitmap_sect < 2 || bitmap_sect > atr->sec_count ) { show_msg("%s: invalid SpartaDOS file system, bitmap outside disk.", atr_name); return 1; } if( atr->sec_count < 6 ) { show_msg("%s: ATR image with too few sectors.", atr_name); return 1; } if( atari_list ) printf("ATR image: %s\n" "Image size: %u sectors of %u bytes\n" "Volume Name: %s\n", atr_name, atr->sec_count, atr->sec_size, *vol_name ? vol_name : "NONE"); else printf("%s: %u sectors of %u bytes, volume name '%s'.\n", atr_name, atr->sec_count, atr->sec_size, vol_name); struct lssfs *ls = check_malloc(sizeof(struct lssfs)); ls->atr = atr; ls->atari_list = atari_list; ls->lower_case = lower_case; ls->extract_files = extract_files; read_dir(ls, rootdir_map, ""); free(ls); return 0; } ================================================ FILE: tools/cc65/atari/mkatr-master/src/lssfs.h ================================================ /* * Copyright (C) 2023 Daniel Serpell * * 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, see */ /* * Reads a SpartaDOS file-system. */ #pragma once #include "atr.h" int sfs_read(struct atr_image *atr, const char *atr_name, int atari_list, int lower_case, int extract_files); ================================================ FILE: tools/cc65/atari/mkatr-master/src/mkatr.c ================================================ /* * Copyright (C) 2016 Daniel Serpell * * 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, see */ /* * Creates an ATR with the given files as contents. */ #include "disksizes.h" #include "flist.h" #include "msg.h" #include "spartafs.h" #include #include #include static void show_usage(void) { printf("Usage: %s [options] [+attributes] [... ]\n" "Options:\n" "\t-b\tNext file added will be loaded at boot.\n" "\t-x\tOutput image with exact sector count for all available content.\n" "\t \tThis will use non-standard sector counts and 128 byte sector size.\n" "\t-s size\tSpecify the minimal image size to the given size in bytes.\n" "\t-B page\tRelocate the bootloader to this page address. Please, read\n" "\t \tthe documentation before using this option.\n" "\t-h\tShow this help.\n" "\t-v\tShow version information.\n" "\n" "In front of each file, you can also add attributes:\n" "\t+h\tHidden from directory.\n" "\t+p\tRead-only (protected) file.\n" "\t+a\tArchived file.\n", prog_name); exit(EXIT_SUCCESS); } static void write_atr(const char *out, const uint8_t *data, int ssec, int nsec) { int size = (nsec > 3) ? ssec * (nsec - 3) + 128 * 3 : 128 * nsec; show_msg("writing image with %d sectors of %d bytes, total %d bytes.", nsec, ssec, size); FILE *f = fopen(out, "wb"); if( !f ) show_error("can't open output file '%s': %s", out, strerror(errno)); putc(0x96, f); putc(0x02, f); putc(size >> 4, f); putc(size >> 12, f); putc(ssec, f); putc(ssec >> 8, f); putc(size >> 20, f); putc(0, f); putc(0, f); putc(0, f); putc(0, f); putc(0, f); putc(0, f); putc(0, f); putc(0, f); putc(0, f); for( int i = 0; i < nsec; i++ ) { // First three sectors are 128 bytes if( i < 3 ) fwrite(data + ssec * i, 128, 1, f); else fwrite(data + ssec * i, ssec, 1, f); } if( 0 != fclose(f) ) show_error("can't write output fil '%s': %s", out, strerror(errno)); } // Get image size given number of sectors and sector size, taking account for // first 3 sectors of 128 bytes. static int image_size(int nsec, int ssec) { if( ssec == 256 ) { if( nsec < 3 ) return nsec * 128; else return nsec * ssec - 3 * 128; } else return nsec * ssec; } // Get number of sectors needed to hold the given size. static int image_sect(int size, int ssec) { if( ssec == 256 ) { if( size < 3 * 128 ) return (size + 127) / 128; else return (size + 3 * 128 + 255) / 256; } else return (size + ssec - 1) / ssec; } int main(int argc, char **argv) { char *out = 0; int i; unsigned boot_addr = 0x07; // Standard boot address: $800 int boot_file = 0; // Next file is boot file enum fattr attribs = 0; // Next file attributes int exact_size = 0; // Use image of exact size int min_size = 0; // Minimum image size const int max_size = image_size(65535, 256); // Maximum image size prog_name = argv[0]; file_list flist; darray_init(flist, 1); flist_add_main_dir(&flist); for( i = 1; i < argc; i++ ) { char *arg = argv[i]; if( arg[0] == '-' ) { char op; while( 0 != (op = *++arg) ) { if( op == 'h' || op == '?' ) show_usage(); else if( op == 'b' ) { if( boot_file ) show_error("can specify only one boot file."); boot_file = 1; } else if( op == 'x' ) exact_size = 1; else if( op == 'B' ) { char *ep; if( i + 1 >= argc ) show_opt_error("option '-B' needs an argument"); i++; boot_addr = strtol(argv[i], &ep, 0); if( boot_addr <= 3 || boot_addr >= 0xF0 || !ep || *ep ) show_error("argument for option '-B' must be from 3 to 240."); } else if( op == 's' ) { char *ep; if( i + 1 >= argc ) show_opt_error("option '-s' needs an argument"); i++; min_size = strtol(argv[i], &ep, 0); if( min_size <= 0 || !ep || *ep ) show_error("argument for option '-s' must be positive."); if( min_size > max_size ) show_error("maximum image size is %d bytes.", max_size); } else if( op == 'v' ) show_version(); else show_opt_error("invalid command line option '-%c'", op); } } else if( arg[0] == '+' ) { char op; while( 0 != (op = *++arg) ) { if( op == '+' ) continue; if( op == 'h' || op == 'H' ) attribs |= at_hidden; else if( op == 'p' || op == 'P' ) attribs |= at_protected; else if( op == 'a' || op == 'A' ) attribs |= at_archived; else show_opt_error("invalid attribute '+%c'", op); } } else if( !out && boot_file != 1 ) out = arg; else { flist_add_file(&flist, arg, boot_file == 1, attribs); if( boot_file ) boot_file = -1; attribs = 0; } } if( !out ) show_opt_error("missing output file name"); struct sfs *sfs = 0; if( exact_size ) { // Try biggest size and the try reducing: if( min_size <= image_size(65535, 128) ) sfs = build_spartafs(128, 65535, boot_addr, &flist); if( !sfs ) sfs = build_spartafs(256, 65535, boot_addr, &flist); if( sfs ) { int nsec = 65535 - sfs_get_free_sectors(sfs); int ssec = sfs_get_sector_size(sfs); if( image_size(nsec, ssec) < min_size ) nsec = image_sect(min_size, ssec); for( ; nsec > 5 && image_size(nsec, ssec) >= min_size; nsec-- ) { struct sfs *n = build_spartafs(ssec, nsec, boot_addr, &flist); if( !n ) break; sfs_free(sfs); sfs = n; if( sfs_get_free_sectors(sfs) > 0 && image_size(nsec - 1, ssec) > min_size ) { nsec = nsec - sfs_get_free_sectors(sfs) + 1; if( image_size(nsec, ssec) < min_size ) nsec = 1 + image_sect(min_size, ssec); } } } } else { for( i = 0; !sfs && sectors[i].size; i++ ) { if( image_size(sectors[i].size, sectors[i].num) < min_size ) continue; sfs = build_spartafs(sectors[i].size, sectors[i].num, boot_addr, &flist); } } if( sfs ) write_atr(out, sfs_get_data(sfs), sfs_get_sector_size(sfs), sfs_get_num_sectors(sfs)); else show_error("can't create an image big enough."); return 0; } ================================================ FILE: tools/cc65/atari/mkatr-master/src/msg.c ================================================ /* * Copyright (C) 2016 Daniel Serpell * * 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, see */ /* * Shows error messages. */ #include "msg.h" #include "version.h" #include #include #include const char *prog_name; void show_error(const char *format, ...) { va_list ap; fprintf(stderr, "%s: Error, ", prog_name); va_start(ap, format); vfprintf(stderr, format, ap); va_end(ap); fprintf(stderr, "\n"); exit(EXIT_FAILURE); } void show_msg(const char *format, ...) { va_list ap; fprintf(stderr, "%s: ", prog_name); va_start(ap, format); vfprintf(stderr, format, ap); va_end(ap); fprintf(stderr, "\n"); } void show_opt_error(const char *format, ...) { va_list ap; fprintf(stderr, "%s: Error, ", prog_name); va_start(ap, format); vfprintf(stderr, format, ap); va_end(ap); fprintf(stderr, ". Try '%s -h' for help.\n", prog_name); exit(EXIT_FAILURE); } void show_version(void) { printf("mkatr version %s, Copyright (C) 2016-2023 Daniel Serpell\n\n" "This is free software under the GNU GENERAL PUBLIC LICENSE.\n" "There is NO warranty; not even for MERCHANTABILITY or FITNESS\n" "FOR A PARTICULAR PURPOSE.\n", prog_version); exit(EXIT_SUCCESS); } void memory_error(void) { show_error("memory error!\n"); } void *check_malloc(size_t size) { void *ret = malloc(size); if( !ret ) memory_error(); return ret; } void *check_calloc(size_t nmemb, size_t size) { void *ret = calloc(nmemb, size); if( !ret ) memory_error(); return ret; } void *check_realloc(void *ptr, size_t size) { void *ret = realloc(ptr, size); if( !ret ) memory_error(); return ret; } ================================================ FILE: tools/cc65/atari/mkatr-master/src/msg.h ================================================ /* * Copyright (C) 2016 Daniel Serpell * * 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, see */ /* * Shows error messages. */ #pragma once #include extern const char *prog_name; void show_error(const char *format, ...) __attribute__((noreturn, format(printf, 1, 2))); void show_opt_error(const char *format, ...) __attribute__((noreturn, format(printf, 1, 2))); void show_msg(const char *format, ...) __attribute__((format(printf, 1, 2))); void show_version(void); void memory_error(void) __attribute__((noreturn)); void *check_malloc(size_t size); void *check_calloc(size_t nmemb, size_t size); void *check_realloc(void *ptr, size_t size); ================================================ FILE: tools/cc65/atari/mkatr-master/src/spartafs.c ================================================ /* * Copyright (C) 2016 Daniel Serpell * * 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, see */ /* * Sparta FS */ #include "spartafs.h" #include "asm/boot128.h" #include "asm/boot256.h" #include "crc32.h" #include "msg.h" #include #include static char hex(int x) { return ("0123456789ABCDEF")[x & 0x0F]; } struct sfs { uint8_t *data; int nsec; int bmap; int nbmp; int csec; int boot_map; int sec_size; }; static uint8_t *sfs_ptr(struct sfs *sfs, int sec) { return sfs->data + sfs->sec_size * (sec - 1); } static void sfs_free_sec(struct sfs *sfs, int sec) { sfs_ptr(sfs, sfs->bmap)[sec >> 3] |= (128 >> (sec & 7)); } static int sfs_used(struct sfs *sfs, int sec) { return 0 == (sfs_ptr(sfs, sfs->bmap)[sec >> 3] & (128 >> (sec & 7))); } static int sfs_alloc(struct sfs *sfs) { int sec = sfs->csec; while( sec <= sfs->nsec && sfs_used(sfs, sec) ) sec++; if( sec <= sfs->nsec ) { sfs_ptr(sfs, sfs->bmap)[sec >> 3] &= ~(128 >> (sec & 7)); sfs->csec = sec + 1; return sec; } else return -1; } static int get_word(const uint8_t *data) { return (data[0] & 0xFF) + ((data[1] & 0xFF) << 8); } static int sfs_patch_byte(struct sfs *sfs, int smap, int pos, int byte) { int mpos = 4; while( pos >= sfs->sec_size ) { pos -= sfs->sec_size; mpos += 2; if( mpos >= sfs->sec_size ) { mpos = 4; smap = get_word(sfs_ptr(sfs, smap)); if( smap < 1 || smap > sfs->nsec ) return -1; } } int sect = get_word(sfs_ptr(sfs, smap) + mpos); if( sect < 1 || sect > sfs->nsec ) return -1; uint8_t *data = sfs_ptr(sfs, sect); data[pos] = byte; return 0; } static int sfs_add_data(struct sfs *sfs, char *data, int size) { int sec_size = sfs->sec_size; int last = 0, first = 0; uint8_t *pmap = 0; do { // Alloc a sector map int smap = sfs_alloc(sfs); if( smap < 0 ) return smap; if( pmap ) { pmap[0] = smap & 0xFF; pmap[1] = smap >> 8; } else first = smap; pmap = sfs_ptr(sfs, smap); pmap[2] = last & 0xFF; pmap[3] = last >> 8; // Copy data int i; for( i = 4; i < sec_size && size > 0; i += 2 ) { int num = size > sec_size ? sec_size : size; int sec = sfs_alloc(sfs); if( sec < 0 ) return sec; pmap[i] = sec & 0xFF; pmap[i + 1] = sec >> 8; memcpy(sfs_ptr(sfs, sec), data, num); size -= num; data += num; } last = smap; } while( size ); return first; } // Write the boot sectors, relocated to the given address static void write_boot(struct sfs *sfs, int address) { unsigned char data[384]; unsigned char *boot; unsigned *reloc; unsigned rsize, i; if( sfs->nsec < 3 ) return; if( sfs->sec_size == 128 ) { boot = boot128_bin; reloc = boot128_reloc; rsize = sizeof(boot128_reloc) / sizeof(boot128_reloc[0]); } else if( sfs->sec_size == 256 ) { boot = boot256_bin; reloc = boot256_reloc; rsize = sizeof(boot256_reloc) / sizeof(boot256_reloc[0]); } else return; // Relocate code using reloc table: memcpy(data, boot, 384); for( i = 0; i < rsize; i++ ) data[reloc[i] - 1] = data[reloc[i] - 1] + address - 16; // Copy boot sectors, always 128 byte size: for( i = 0; i < 3; i++ ) memcpy(sfs->data + sfs->sec_size * i, data + 128 * i, 128); } // Sorting function: sort by level, then directories first and last by file name static int compare_level(const void *a, const void *b) { const struct afile *fa = *(const struct afile *const *)a; const struct afile *fb = *(const struct afile *const *)b; if( fb->level != fa->level ) return fb->level - fa->level; if( fb->is_dir != fa->is_dir ) return fb->is_dir - fa->is_dir; return strncmp(fa->aname, fb->aname, 11); } struct sfs *build_spartafs(int sector_size, int num_sectors, unsigned boot_addr, file_list *flist) { struct sfs *sfs = check_malloc(sizeof(struct sfs)); sfs->data = check_calloc(sector_size, num_sectors); sfs->nsec = num_sectors; sfs->bmap = 4; sfs->nbmp = ((num_sectors + 8) / 8 + sector_size - 1) / sector_size; sfs->csec = 4 + sfs->nbmp; sfs->sec_size = sector_size; write_boot(sfs, boot_addr); int i; for( i = sfs->csec; i <= sfs->nsec; i++ ) sfs_free_sec(sfs, i); // Sort the entries by the level - higher level first qsort(&darray_i(flist, 0), darray_len(flist), sizeof(darray_i(flist, 0)), compare_level); // Cleanup all directories struct afile **ptr; darray_foreach(ptr, flist) { struct afile *af = *ptr; if( af->is_dir ) { af->size = 23; memset(af->data, 0, 23); } } // Add each file int dsec = -1; darray_foreach(ptr, flist) { struct afile *af = *ptr; if( af->is_dir ) { int dsize = af->size; af->data[0] = 0x28; af->data[1] = 0; // Parent dir map, af->data[2] = 0; // written later af->data[3] = dsize & 0xFF; af->data[4] = (dsize >> 8) & 0xFF; af->data[5] = dsize >> 16; memcpy(&af->data[6], af->aname, 11); memcpy(&af->data[17], &af->date, 3); memcpy(&af->data[20], &af->time, 3); } // Add data int msec = sfs_add_data(sfs, af->data, af->size); if( msec < 0 ) { sfs_free(sfs); return 0; } // Set map sector af->map_sect = msec; // Add to directory struct afile *dir = af->dir; if( dir ) { char *cdir = dir->data + dir->size; cdir[0] = 0x08 | (af->is_dir ? 0x20 : 0x00) | af->attribs; cdir[1] = msec & 0xFF; cdir[2] = msec >> 8; cdir[3] = af->size & 0xFF; cdir[4] = (af->size >> 8) & 0xFF; cdir[5] = af->size >> 16; memcpy(&cdir[6], af->aname, 11); memcpy(&cdir[17], &af->date, 3); memcpy(&cdir[20], &af->time, 3); dir->size += 23; if( dir->size > SFS_MAX_DIR_SIZE ) show_error("too many files in directory %s.", dir->pname); } else // This is the main directory, remember location dsec = msec; if( af->boot_file ) sfs->boot_map = msec; } // Set the "parent" directory to all sub-directories darray_foreach(ptr, flist) { struct afile *af = *ptr; if( af->is_dir && af->dir ) { int parent = af->dir->map_sect; sfs_patch_byte(sfs, af->map_sect, 1, parent & 0xFF); sfs_patch_byte(sfs, af->map_sect, 2, parent >> 8); } } // Check main directory if( dsec < 0 ) show_error("internal error - no main directory."); // Get's CRC32 of current data unsigned crc = crc32(0, sfs->data, sfs->sec_size * sfs->nsec); sfs->data[1] = 0x03; sfs->data[7] = 0x80; sfs->data[9] = dsec & 0xFF; sfs->data[10] = dsec >> 8; sfs->data[11] = sfs->nsec & 0xFF; sfs->data[12] = sfs->nsec >> 8; sfs->data[13] = (sfs->nsec - sfs->csec + 1) & 0xFF; sfs->data[14] = (sfs->nsec - sfs->csec + 1) >> 8; sfs->data[15] = sfs->nbmp; sfs->data[16] = sfs->bmap & 0xFF; sfs->data[17] = sfs->bmap >> 8; sfs->data[18] = sfs->csec & 0xFF; sfs->data[19] = sfs->csec >> 8; sfs->data[20] = sfs->csec & 0xFF; sfs->data[21] = sfs->csec >> 8; sfs->data[22] = 'D'; sfs->data[23] = 'S'; sfs->data[24] = 'K'; sfs->data[25] = '_'; sfs->data[26] = hex(crc >> 8); sfs->data[27] = hex(crc >> 12); sfs->data[28] = hex(crc >> 16); sfs->data[29] = hex(crc >> 20); sfs->data[30] = 0x28; sfs->data[31] = sfs->sec_size > 128 ? 0 : 128; sfs->data[32] = 0x20; sfs->data[39] = crc & 0xFF; sfs->data[40] = sfs->boot_map & 0xFF; sfs->data[41] = sfs->boot_map >> 8; return sfs; } uint8_t *sfs_get_data(const struct sfs *sfs) { return sfs->data; } int sfs_get_num_sectors(const struct sfs *sfs) { return sfs->nsec; } int sfs_get_sector_size(const struct sfs *sfs) { return sfs->sec_size; } int sfs_get_free_sectors(const struct sfs *sfs) { return sfs->nsec - sfs->csec + 1; } void sfs_free(struct sfs *sfs) { if( sfs ) { free(sfs->data); free(sfs); } } ================================================ FILE: tools/cc65/atari/mkatr-master/src/spartafs.h ================================================ /* * Copyright (C) 2016 Daniel Serpell * * 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, see */ /* * Sparta FS */ #pragma once #include "flist.h" #include struct sfs; struct sfs *build_spartafs(int sector_size, int num_sectors, unsigned boot_addr, file_list *flist); uint8_t *sfs_get_data(const struct sfs *); int sfs_get_num_sectors(const struct sfs *); int sfs_get_sector_size(const struct sfs *); int sfs_get_free_sectors(const struct sfs *); void sfs_free(struct sfs *); ================================================ FILE: tools/cc65/atari/mkatr-master/src/version.h ================================================ #pragma once const char *prog_version = "1.4~beta"; ================================================ FILE: tools/cc65/atari7800/extzp.inc ================================================ ; ; extzp.inc for the Atari 7800 ; ; Karri Kaksonen, 2022-04-05 ; ; Assembler include file that imports the runtime zero page locations used ; by the atari7800 runtime, ready for usage in asm code. ; ; .global ptr7800: zp ; .global ptrtmp: zp ; .global cursorzone: zp .global sfxptr: zp ================================================ FILE: tools/cc65/atari7800/extzp.s ================================================ ; ; Karri Kaksonen, 2022-04-05 ; ; zeropage locations for exclusive use by the library ; .include "extzp.inc" .segment "EXTZP" : zeropage ptr7800: .res 2 ptrtmp: .res 2 cursorzone: .res 2 sfxptr: .res 2 ================================================ FILE: tools/cc65/atari7800/sfx.s ================================================ .include "atari7800.inc" .include "extzp.inc" .interruptor playsfx .constructor silence .export _playsfx0 .import _zonecounter .bss frames: .res 1 cnt: .res 1 .code _playsfx0: sta sfxptr stx sfxptr+1 inc sfxptr bne @L11 inc sfxptr+1 @L11: inc sfxptr bne @L12 inc sfxptr+1 @L12: ldy #0 lda (sfxptr),y sta frames tya sta cnt inc sfxptr bne @L13 inc sfxptr+1 @L13: rts silence: lda #0 sta sfxptr sta sfxptr+1 rts playsfx: lda _zonecounter and #$01 beq @L9 ; Process audio while MARIA draws on screen lda sfxptr+1 beq @L9 ; Skip audio if high byte of address is zero lda cnt bne @L1 lda frames sta cnt jmp @L2 @L1: sec sbc #1 sta cnt jmp @L9 @L2: ldx #0 ; Use X to detect end of sfx ldy #0 ; freq lda (sfxptr),y sta AUDF0 beq @L3 inx ; Not end of sfx @L3: iny ; Channel lda (sfxptr),y sta AUDC0 beq @L4 inx ; Not end of sfx @L4: iny ; Volume lda (sfxptr),y sta AUDV0 beq @L5 inx ; Not end of sfx @L5: txa ; Check for end of sfx beq @L8 lda sfxptr ; Increment sfx pointer by 3 ldx sfxptr+1 clc adc #3 bcc @L6 inx @L6: sta sfxptr stx sfxptr+1 jmp @L9 @L8: sta sfxptr+1 ; Stop sfx processing @L9: clc rts ================================================ FILE: tools/cc65/atari7800/sfx_monolythic.s ================================================ .include "atari7800.inc" .include "extzp.inc" .interruptor playsfx .constructor silence .export _playsfx0 .import _zonecounter .include "extzp.inc" .segment "EXTZP" : zeropage ptr7800: .res 2 ptrtmp: .res 2 cursorzone: .res 2 sfxptr: .res 2 .bss frames: .res 1 cnt: .res 1 .code _playsfx0: sta sfxptr stx sfxptr+1 inc sfxptr bne @L11 inc sfxptr+1 @L11: inc sfxptr bne @L12 inc sfxptr+1 @L12: ldy #0 lda (sfxptr),y sta frames tya sta cnt inc sfxptr bne @L13 inc sfxptr+1 @L13: rts silence: lda #0 sta sfxptr sta sfxptr+1 rts playsfx: lda _zonecounter and #$01 beq @L9 ; Process audio while MARIA draws on screen lda sfxptr+1 beq @L9 ; Skip audio if high byte of address is zero lda cnt bne @L1 lda frames sta cnt jmp @L2 @L1: sec sbc #1 sta cnt jmp @L9 @L2: ldx #0 ; Use X to detect end of sfx ldy #0 ; freq lda (sfxptr),y sta AUDF0 beq @L3 inx ; Not end of sfx @L3: iny ; Channel lda (sfxptr),y sta AUDC0 beq @L4 inx ; Not end of sfx @L4: iny ; Volume lda (sfxptr),y sta AUDV0 beq @L5 inx ; Not end of sfx @L5: txa ; Check for end of sfx beq @L8 lda sfxptr ; Increment sfx pointer by 3 ldx sfxptr+1 clc adc #3 bcc @L6 inx @L6: sta sfxptr stx sfxptr+1 jmp @L9 @L8: sta sfxptr+1 ; Stop sfx processing @L9: clc rts ================================================ FILE: tools/cc65/atari7800/sfxlib/sfx_70stvcomputer.s ================================================ .rodata .export _sfx_70stvcomputer _sfx_70stvcomputer: .byte $10,$10,$01 ; version, priority, frames per chunk .byte $01,$08,$06 .byte $01,$08,$08 .byte $0c,$01,$08 .byte $0b,$09,$06 .byte $03,$01,$08 .byte $04,$0f,$08 .byte $10,$01,$08 .byte $16,$04,$08 .byte $06,$07,$08 .byte $01,$08,$08 .byte $1f,$04,$08 .byte $01,$06,$08 .byte $0b,$0c,$08 .byte $01,$08,$08 .byte $0e,$09,$08 .byte $0e,$0c,$08 .byte $00,$0e,$08 .byte $01,$08,$08 .byte $08,$09,$08 .byte $0c,$09,$08 .byte $0c,$0c,$08 .byte $0c,$01,$08 .byte $01,$08,$08 .byte $0a,$0c,$08 .byte $06,$01,$08 .byte $0c,$09,$08 .byte $10,$04,$08 .byte $0f,$09,$08 .byte $03,$01,$08 .byte $1c,$01,$08 .byte $15,$01,$08 .byte $0c,$09,$08 .byte $07,$07,$08 .byte $01,$08,$08 .byte $00,$07,$08 .byte $01,$08,$08 .byte $01,$0f,$08 .byte $0d,$0c,$08 .byte $0b,$0c,$08 .byte $01,$08,$08 .byte $01,$0f,$08 .byte $0d,$0c,$08 .byte $0b,$0c,$08 .byte $01,$08,$08 .byte $1a,$01,$08 .byte $0d,$09,$06 .byte $08,$01,$06 .byte $1b,$01,$06 .byte $04,$0f,$06 .byte $02,$0f,$06 .byte $08,$01,$06 .byte $04,$07,$06 .byte $1f,$04,$06 .byte $1a,$01,$06 .byte $02,$07,$06 .byte $04,$01,$06 .byte $04,$01,$04 .byte $07,$07,$04 .byte $0c,$0c,$02 .byte $0a,$0c,$02 .byte $0a,$0c,$01 .byte 0,0,0 ================================================ FILE: tools/cc65/atari7800/sfxlib/sfx_activate.s ================================================ .rodata .export _sfx_activate _sfx_activate: .byte $10,$10,$00 ; version, priority, frames per chunk .byte $0b, $07, $01 ; first chunk of freq,channel,volume .byte $1f, $07, $06 .byte $13, $0c, $07 .byte $15, $04, $0d .byte $1c, $04, $0e .byte $16, $04, $0d .byte $0d, $0c, $0d .byte $12, $0c, $0b .byte $14, $04, $0d .byte $1f, $04, $0f .byte $1b, $04, $0d .byte $1b, $04, $0d .byte $1b, $04, $06 .byte $15, $0c, $05 .byte $1e, $07, $07 .byte $0e, $07, $0d .byte $01, $06, $0e .byte $13, $04, $0d .byte $1e, $07, $0d .byte $10, $0c, $0b .byte $14, $04, $0d .byte $0b, $0c, $0e .byte $1b, $04, $0d .byte $1a, $04, $0c .byte $12, $0f, $05 .byte $00,$00,$00 ================================================ FILE: tools/cc65/atari7800/sfxlib/sfx_advbite.s ================================================ .rodata .export _sfx_advbite _sfx_advbite: .byte $10,$10,$02 ; version, priority, frames per chunk .byte $1F,$03,$0F ; first chunk of freq,channel,volume data .byte $1F,$08,$0E .byte $1F,$03,$0D .byte $1F,$08,$0C .byte $1F,$03,$0B .byte $1F,$08,$0A .byte $1F,$03,$09 .byte $1F,$08,$08 .byte $1F,$03,$07 .byte $1F,$08,$06 .byte $1F,$03,$05 .byte $1F,$08,$04 .byte $1F,$03,$03 .byte $1F,$08,$02 .byte $1F,$03,$01 .byte $00,$00,$00 ================================================ FILE: tools/cc65/atari7800/sfxlib/sfx_advdragonslain.s ================================================ .rodata .export _sfx_advdragonslain _sfx_advdragonslain: .byte $10,$10,$02 ; version, priority, frames per chunk .byte $10,$04,$0F ; first chunk of freq,channel,volume data .byte $11,$04,$0E .byte $12,$04,$0D .byte $13,$04,$0C .byte $14,$04,$0B .byte $15,$04,$0A .byte $16,$04,$09 .byte $17,$04,$08 .byte $18,$04,$07 .byte $19,$04,$06 .byte $1A,$04,$05 .byte $1B,$04,$04 .byte $1C,$04,$03 .byte $1D,$04,$02 .byte $1E,$04,$01 .byte $00,$00,$00 ================================================ FILE: tools/cc65/atari7800/sfxlib/sfx_advdrop.s ================================================ .rodata .export _sfx_advdrop _sfx_advdrop: .byte $10,$04,$02 ; version, priority, frames per chunk .byte $00,$06,$08 ; first chunk of freq,channel,volume data .byte $01,$06,$08 .byte $02,$06,$08 .byte $03,$06,$08 .byte $00,$00,$00 ================================================ FILE: tools/cc65/atari7800/sfxlib/sfx_advpickup.s ================================================ .rodata .export _sfx_advpickup _sfx_advpickup: .byte $10,$04,$02 ; version, priority, frames per chunk .byte $03,$06,$08 ; first chunk of freq,channel,volume data .byte $02,$06,$08 .byte $01,$06,$08 .byte $00,$06,$08 .byte $00,$00,$00 ================================================ FILE: tools/cc65/atari7800/sfxlib/sfx_alienaggressor.s ================================================ .rodata .export _sfx_alienaggressor _sfx_alienaggressor: .byte $10,$10,$00 ; version, priority, frames per chunk .byte $1b,$0c,$01 .byte $0f,$06,$02 .byte $0f,$06,$03 .byte $1e,$06,$02 .byte $1e,$06,$01 .byte $1b,$0c,$02 .byte $17,$0c,$06 .byte $17,$0c,$09 .byte $17,$0c,$0d .byte $07,$06,$0d .byte $16,$04,$06 .byte $17,$0c,$0d .byte $17,$0c,$0f .byte $1c,$04,$0d .byte $1c,$04,$0f .byte $07,$0c,$08 .byte $18,$04,$0f .byte $18,$04,$09 .byte $03,$0c,$0a .byte $03,$0c,$0c .byte $0c,$04,$0f .byte $0c,$04,$0f .byte $06,$0c,$08 .byte $18,$04,$0c .byte $0a,$0c,$09 .byte $07,$06,$05 .byte $07,$06,$05 .byte $08,$06,$03 .byte $09,$06,$01 .byte $00,$06,$00 .byte $07,$06,$02 .byte $08,$06,$01 .byte $00,$00,$00 ================================================ FILE: tools/cc65/atari7800/sfxlib/sfx_alienbuzz.s ================================================ .rodata .export _sfx_alienbuzz _sfx_alienbuzz: .byte $10,$10,$00 ; version, priority, frames per chunk .byte $0d,$0c,$04 ; first chunk of freq,channel,volume .byte $0c,$0c,$08 .byte $0c,$0c,$0b .byte $12,$0c,$05 .byte $12,$0c,$0a .byte $0d,$0c,$0f .byte $0c,$0c,$0f .byte $0c,$0c,$0f .byte $0b,$0c,$0f .byte $0c,$0c,$0e .byte $0c,$0c,$0f .byte $0d,$0c,$0f .byte $0c,$0c,$0f .byte $0c,$0c,$0f .byte $0c,$0c,$0f .byte $0f,$0c,$0f .byte $0c,$0c,$0f .byte $0c,$0c,$0f .byte $0c,$0c,$0d .byte $0d,$0c,$09 .byte $0d,$0c,$0f .byte $0d,$0c,$06 .byte $0c,$0c,$0f .byte $0c,$0c,$05 .byte $0d,$0c,$01 .byte $0d,$0c,$01 .byte $0c,$0c,$01 .byte $0d,$0c,$00 .byte $0c,$0c,$01 .byte $00,$00,$00 ================================================ FILE: tools/cc65/atari7800/sfxlib/sfx_aliencoo.s ================================================ .rodata .export _sfx_aliencoo _sfx_aliencoo: .byte $10,$10,$00 ; version, priority, frames per chunk .byte $1e,$04,$0f ; first chunk of freq,channel,volume .byte $1c,$04,$0f .byte $1e,$04,$0f .byte $1c,$04,$0e .byte $1e,$04,$0f .byte $1e,$04,$05 .byte $1c,$04,$0f .byte $1e,$04,$03 .byte $1c,$04,$0f .byte $1c,$04,$04 .byte $1e,$04,$0f .byte $1c,$04,$02 .byte $1e,$04,$0e .byte $1e,$04,$03 .byte $1e,$04,$05 .byte $1e,$04,$01 .byte $00,$00,$00 ================================================ FILE: tools/cc65/atari7800/sfxlib/sfx_alienkitty.s ================================================ .rodata .export _sfx_alienkitty _sfx_alienkitty: .byte $10,$10,$00 ; version, priority, frames per chunk .byte $01, $06, $01 .byte $16, $01, $03 .byte $18, $04, $06 .byte $19, $04, $0f .byte $0e, $07, $0e .byte $19, $04, $0c .byte $19, $04, $0c .byte $18, $04, $0c .byte $17, $04, $0a .byte $15, $01, $0a .byte $06, $04, $0a .byte $19, $0f, $0a .byte $06, $04, $06 .byte $17, $04, $04 .byte $17, $04, $04 .byte $17, $04, $03 .byte $1a, $0c, $03 .byte $0c, $04, $02 .byte $19, $04, $02 .byte $17, $04, $01 .byte $00,$00,$00 ================================================ FILE: tools/cc65/atari7800/sfxlib/sfx_alienklaxon.s ================================================ .rodata .export _sfx_alienklaxon _sfx_alienklaxon: .byte $10,$10,$00 ; version, priority, frames per chunk .byte $1e,$06,$0f ; first chunk of freq,channel,volume .byte $1e,$06,$0f .byte $1e,$06,$0f .byte $1e,$06,$0e .byte $1e,$06,$07 .byte $1c,$04,$0c .byte $00,$06,$0c .byte $1e,$04,$0f .byte $0a,$0c,$0f .byte $0a,$0c,$0f .byte $1e,$06,$0d .byte $16,$04,$09 .byte $1e,$06,$0f .byte $1e,$06,$0b .byte $1e,$06,$0f .byte $0b,$0c,$0f .byte $1e,$06,$0a .byte $0c,$0c,$0d .byte $13,$04,$0c .byte $0d,$0c,$0f .byte $1e,$06,$08 .byte $02,$0c,$04 .byte $12,$04,$07 .byte $07,$06,$03 .byte $0e,$0c,$0f .byte $0e,$0c,$0f .byte $0e,$0c,$0e .byte $10,$0c,$0f .byte $10,$0c,$0f .byte $10,$0c,$0d .byte $1e,$06,$07 .byte $1e,$06,$06 .byte $1e,$06,$08 .byte $1e,$06,$07 .byte $12,$0c,$0f .byte $03,$06,$0f .byte $1e,$04,$07 .byte $12,$0c,$0f .byte $12,$0c,$0d .byte $0e,$0c,$07 .byte $1e,$06,$01 .byte $1e,$06,$02 .byte $1e,$06,$04 .byte $0a,$0c,$04 .byte $0a,$0c,$09 .byte $1e,$04,$08 .byte $1c,$04,$08 .byte $1b,$04,$06 .byte $19,$04,$05 .byte $1e,$06,$02 .byte $04,$04,$01 .byte $1e,$06,$00 .byte $04,$04,$01 .byte $06,$0c,$02 .byte $06,$0c,$04 .byte $06,$0c,$01 .byte $12,$04,$04 .byte $1e,$06,$02 .byte $05,$0c,$01 .byte $04,$04,$00 .byte $1e,$06,$01 .byte $1e,$06,$00 .byte $00,$06,$00 .byte $04,$0c,$01 .byte $04,$0c,$01 .byte $04,$0c,$01 .byte $00,$00,$00 ================================================ FILE: tools/cc65/atari7800/sfxlib/sfx_alienlife.s ================================================ .rodata .export _sfx_alienlife _sfx_alienlife: .byte $10,$10,$01 ; version, priority, frames per chunk .byte $16,$04,$04 ; first chunk of freq,channel,volume .byte $16,$04,$07 .byte $16,$04,$0f .byte $16,$04,$0e .byte $04,$0c,$07 .byte $0d,$04,$07 .byte $03,$0c,$04 .byte $03,$0c,$04 .byte $04,$0c,$02 .byte $05,$0c,$04 .byte $12,$04,$04 .byte $12,$04,$02 .byte $05,$0c,$04 .byte $05,$0c,$02 .byte $05,$0c,$02 .byte $10,$04,$02 .byte $00,$06,$01 .byte $00,$00,$00 ================================================ FILE: tools/cc65/atari7800/sfxlib/sfx_alientrill1.s ================================================ .rodata .export _sfx_alientrill1 _sfx_alientrill1: .byte $10,$05,$01 ; version, priority, frames per chunk .byte $1B,$04,$08 ; first chunk of freq,channel,volume data .byte $1E,$04,$08 .byte $1B,$04,$08 .byte $1E,$04,$08 .byte $18,$04,$08 .byte $00,$00,$00 ================================================ FILE: tools/cc65/atari7800/sfxlib/sfx_alientrill2.s ================================================ .rodata .export _sfx_alientrill2 _sfx_alientrill2: .byte $10,$05,$01 ; version, priority, frames per chunk .byte $18,$04,$08 ; first chunk of freq,channel,volume data .byte $1E,$04,$08 .byte $18,$04,$08 .byte $1E,$04,$08 .byte $14,$04,$08 .byte $00,$00,$00 ================================================ FILE: tools/cc65/atari7800/sfxlib/sfx_anotherjumpdies.s ================================================ .rodata .export _sfx_anotherjumpdies _sfx_anotherjumpdies: .byte $10,$10,$00 ; version, priority, frames per chunk .byte $0f,$04,$03 .byte $10,$04,$07 .byte $10,$04,$05 .byte $0f,$04,$02 .byte $0a,$04,$02 .byte $0c,$04,$06 .byte $0c,$04,$03 .byte $0d,$04,$05 .byte $0d,$04,$04 .byte $07,$06,$02 .byte $04,$0c,$04 .byte $04,$0c,$07 .byte $04,$0c,$03 .byte $09,$04,$02 .byte $09,$04,$01 .byte $10,$04,$03 .byte $0f,$04,$07 .byte $0f,$04,$04 .byte $0a,$04,$02 .byte $0a,$04,$02 .byte $10,$04,$06 .byte $10,$04,$06 .byte $05,$0c,$02 .byte $03,$0c,$01 .byte $03,$0c,$01 .byte $12,$04,$03 .byte $12,$04,$04 .byte $12,$04,$04 .byte $0c,$04,$04 .byte $0c,$04,$05 .byte $13,$04,$07 .byte $13,$04,$07 .byte $13,$04,$01 .byte $0c,$04,$02 .byte $0d,$04,$03 .byte $15,$04,$08 .byte $15,$04,$06 .byte $16,$04,$04 .byte $0d,$04,$02 .byte $04,$0c,$06 .byte $04,$0c,$05 .byte $07,$0c,$05 .byte $07,$0c,$0f .byte $07,$0c,$09 .byte $07,$06,$03 .byte $00,$06,$02 .byte $04,$0c,$02 .byte $18,$04,$03 .byte $18,$04,$0b .byte $18,$04,$0a .byte $1b,$04,$03 .byte $10,$04,$04 .byte $10,$04,$05 .byte $10,$04,$03 .byte $19,$04,$08 .byte $1b,$04,$0a .byte $1b,$04,$08 .byte $05,$0c,$02 .byte $12,$04,$07 .byte $12,$04,$06 .byte $1c,$04,$07 .byte $1c,$04,$0d .byte $1e,$04,$09 .byte $13,$04,$05 .byte $13,$04,$0c .byte $13,$04,$06 .byte $0b,$0c,$04 .byte $1e,$04,$0e .byte $1e,$04,$0d .byte $0a,$0c,$06 .byte $15,$04,$04 .byte $15,$04,$0c .byte $15,$04,$0a .byte $15,$04,$02 .byte $00,$00,$00 ================================================ FILE: tools/cc65/atari7800/sfxlib/sfx_anotherjumpman.s ================================================ .rodata .export _sfx_anotherjumpman _sfx_anotherjumpman: .byte $10,$10,$00 ; version, priority, frames per chunk .byte $0c,$0c,$0f ; first chunk of freq,channel,volume .byte $0e,$0c,$0f .byte $0e,$0c,$0f .byte $0d,$0c,$0f .byte $1c,$04,$0f .byte $1b,$04,$0f .byte $1b,$04,$0c .byte $18,$04,$0f .byte $1c,$04,$0f .byte $0a,$0c,$0f .byte $0b,$0c,$0f .byte $0b,$0c,$0f .byte $1e,$04,$0f .byte $1b,$04,$0f .byte $1b,$04,$0d .byte $18,$04,$09 .byte $1b,$04,$0e .byte $1e,$04,$0f .byte $0a,$0c,$0f .byte $0b,$0c,$07 .byte $0a,$0c,$0f .byte $1b,$04,$0e .byte $19,$04,$0d .byte $18,$04,$0f .byte $18,$04,$0f .byte $1e,$04,$0f .byte $1e,$04,$0a .byte $0b,$0c,$0f .byte $0b,$0c,$0f .byte $1c,$04,$0b .byte $19,$04,$08 .byte $18,$04,$09 .byte $18,$04,$07 .byte $1e,$04,$04 .byte $1e,$04,$03 .byte $0c,$0c,$01 .byte $0c,$0c,$01 .byte $00,$00,$00 ================================================ FILE: tools/cc65/atari7800/sfxlib/sfx_anotherup.s ================================================ .rodata .export _sfx_anotherup _sfx_anotherup: .byte $10,$10,$00 ; version, priority, frames per chunk .byte $06,$0c,$0f ; first chunk of freq,channel,volume .byte $06,$0c,$08 .byte $06,$0c,$0f .byte $06,$0c,$0f .byte $06,$0c,$0a .byte $15,$04,$0a .byte $06,$0c,$09 .byte $10,$04,$0f .byte $02,$0c,$07 .byte $10,$04,$0f .byte $10,$04,$0d .byte $10,$04,$09 .byte $10,$04,$0b .byte $0d,$04,$0d .byte $06,$04,$06 .byte $0d,$04,$0c .byte $0d,$04,$0a .byte $0d,$04,$06 .byte $0d,$04,$0c .byte $06,$0c,$0c .byte $06,$0c,$0f .byte $06,$0c,$0f .byte $06,$0c,$0a .byte $06,$0c,$06 .byte $06,$0c,$0f .byte $10,$04,$0d .byte $10,$04,$0d .byte $10,$04,$0a .byte $10,$04,$0a .byte $10,$04,$06 .byte $04,$0c,$04 .byte $0d,$04,$08 .byte $0d,$04,$08 .byte $06,$04,$03 .byte $0d,$04,$09 .byte $0d,$04,$05 .byte $04,$0c,$04 .byte $06,$0c,$05 .byte $06,$0c,$05 .byte $06,$0c,$09 .byte $06,$0c,$0b .byte $06,$0c,$09 .byte $06,$0c,$04 .byte $10,$04,$04 .byte $10,$04,$03 .byte $10,$04,$02 .byte $10,$04,$04 .byte $10,$04,$03 .byte $10,$04,$02 .byte $00,$00,$00 ================================================ FILE: tools/cc65/atari7800/sfxlib/sfx_arfarf.s ================================================ .rodata .export _sfx_arfarf _sfx_arfarf: .byte $10,$10,$00 ; version, priority, frames per chunk .byte $0d, $0c, $01 ; first chunk of freq,channel,volume .byte $0c, $0c, $07 .byte $12, $04, $0d .byte $08, $07, $0c .byte $1b, $04, $0c .byte $1b, $04, $0d .byte $19, $04, $0f .byte $12, $04, $0d .byte $12, $04, $0e .byte $12, $04, $0e .byte $07, $01, $0d .byte $0a, $0c, $0d .byte $1f, $04, $02 .byte $09, $01, $00 .byte $0b, $0c, $03 .byte $0b, $0c, $09 .byte $12, $0f, $0d .byte $0f, $04, $0d .byte $1c, $04, $0c .byte $1b, $04, $0d .byte $1a, $04, $0e .byte $19, $04, $0d .byte $19, $04, $0e .byte $06, $01, $0d .byte $01, $06, $0d .byte $0a, $0c, $0d .byte $00,$00,$00 ================================================ FILE: tools/cc65/atari7800/sfxlib/sfx_babyribbit.s ================================================ .rodata .export _sfx_babyribbit _sfx_babyribbit: .byte $10,$10,$00 ; version, priority, frames per chunk .byte $1e,$04,$0f ; first chunk of freq,channel,volume .byte $1c,$04,$0f .byte $1c,$04,$0e .byte $0c,$04,$0e .byte $1c,$04,$0e .byte $0a,$0c,$06 .byte $0e,$0c,$00 .byte $1e,$06,$00 .byte $18,$04,$06 .byte $18,$04,$0b .byte $16,$04,$0b .byte $08,$04,$07 .byte $04,$04,$04 .byte $00,$04,$02 .byte $00,$04,$01 .byte $00,$00,$00 ================================================ FILE: tools/cc65/atari7800/sfxlib/sfx_babyribbithop.s ================================================ .rodata .export _sfx_babyribbithop _sfx_babyribbithop: .byte $10,$10,$00 ; version, priority, frames per chunk .byte $0c,$0c,$04 ; first chunk of freq,channel,volume .byte $17,$0c,$04 .byte $04,$0c,$06 .byte $0d,$04,$0d .byte $0d,$04,$0c .byte $0a,$04,$0f .byte $09,$04,$09 .byte $1e,$06,$0f .byte $1e,$06,$0f .byte $09,$04,$0d .byte $10,$0c,$09 .byte $09,$04,$07 .byte $0a,$06,$06 .byte $00,$00,$00 ================================================ FILE: tools/cc65/atari7800/sfxlib/sfx_babywah.s ================================================ .rodata .export _sfx_babywah _sfx_babywah: .byte $10,$10,$00 ; version, priority, frames per chunk .byte $0d,$04,$0b ; first chunk of freq,channel,volume .byte $0d,$04,$0f .byte $0d,$04,$05 .byte $19,$04,$0c .byte $19,$04,$0d .byte $0c,$04,$0f .byte $19,$04,$0f .byte $0c,$04,$07 .byte $18,$04,$0f .byte $18,$04,$0f .byte $03,$0c,$0f .byte $07,$0c,$0f .byte $07,$0c,$0f .byte $07,$0c,$0f .byte $07,$0c,$0f .byte $03,$0c,$07 .byte $03,$0c,$09 .byte $03,$0c,$06 .byte $18,$04,$0c .byte $18,$04,$0c .byte $18,$04,$0c .byte $1b,$04,$04 .byte $0d,$04,$06 .byte $1c,$04,$04 .byte $0a,$06,$03 .byte $12,$04,$02 .byte $10,$04,$05 .byte $05,$0c,$06 .byte $12,$04,$07 .byte $06,$0c,$04 .byte $07,$0c,$03 .byte $19,$04,$02 .byte $1c,$04,$01 .byte $00,$00,$00 ================================================ FILE: tools/cc65/atari7800/sfxlib/sfx_bassbump.s ================================================ .rodata .export _sfx_bassbump _sfx_bassbump: .byte $10,$10,$00 ; version, priority, frames per chunk .byte $1b,$0c,$0f ; first chunk of freq,channel,volume .byte $0f,$06,$0c .byte $07,$06,$0e .byte $0f,$06,$0f .byte $0f,$06,$0f .byte $0f,$06,$0f .byte $07,$06,$06 .byte $0f,$06,$0f .byte $1b,$0c,$04 .byte $0f,$06,$05 .byte $0f,$06,$06 .byte $07,$06,$01 .byte $0f,$06,$03 .byte $00,$00,$00 ================================================ FILE: tools/cc65/atari7800/sfxlib/sfx_bassbump2.s ================================================ .rodata .export _sfx_bassbump2 _sfx_bassbump2: .byte $10,$10,$00 ; version, priority, frames per chunk .byte $1e,$06,$0f ; first chunk of freq,channel,volume .byte $1e,$06,$0f .byte $1e,$06,$0f .byte $1e,$06,$0f .byte $1e,$06,$0f .byte $17,$0c,$05 .byte $1e,$06,$0c .byte $1e,$06,$08 .byte $07,$06,$07 .byte $1e,$0c,$06 .byte $12,$0c,$03 .byte $1e,$06,$00 .byte $1e,$06,$01 .byte $1e,$06,$01 .byte $1e,$06,$01 .byte $1e,$06,$01 .byte $00,$00,$00 ================================================ FILE: tools/cc65/atari7800/sfxlib/sfx_berzerkrobotdeath.s ================================================ .rodata .export _sfx_berzerkrobotdeath _sfx_berzerkrobotdeath: .byte $10,$10,$00 ; version, priority, frames per chunk .byte $00,$08,$0F ; first chunk of freq,channel,volume data .byte $01,$08,$0E .byte $02,$08,$0D .byte $03,$08,$0C .byte $04,$08,$0B .byte $05,$08,$0A .byte $06,$08,$09 .byte $07,$08,$08 .byte $08,$08,$07 .byte $09,$08,$06 .byte $0a,$08,$05 .byte $0b,$08,$04 .byte $0c,$08,$03 .byte $0d,$08,$02 .byte $0e,$08,$01 .byte $00,$00,$00 ================================================ FILE: tools/cc65/atari7800/sfxlib/sfx_bling.s ================================================ .rodata .export _sfx_bling _sfx_bling: .byte $10,$10,$00 ; version, priority, frames per chunk .byte $1c,$04,$07 .byte $1b,$04,$07 .byte $04,$0f,$05 .byte $15,$04,$09 .byte $16,$04,$07 .byte $03,$0f,$04 .byte $11,$04,$08 .byte $11,$04,$08 .byte $11,$04,$04 .byte $0e,$04,$09 .byte $0e,$04,$07 .byte $0e,$04,$04 .byte $1c,$04,$07 .byte $1b,$04,$05 .byte $1c,$04,$04 .byte $1b,$04,$02 .byte $00,$00,$00 ================================================ FILE: tools/cc65/atari7800/sfxlib/sfx_bubbleup.s ================================================ .rodata .export _sfx_bubbleup _sfx_bubbleup: .byte $10,$10,$00 ; version, priority, frames per chunk .byte $1e,$04,$0f ; first chunk of freq,channel,volume .byte $1e,$04,$0f .byte $12,$0c,$0e .byte $19,$04,$06 .byte $10,$0c,$0f .byte $10,$0c,$0d .byte $1c,$04,$0f .byte $1c,$04,$0e .byte $10,$0c,$0f .byte $10,$0c,$0f .byte $10,$0c,$0f .byte $1b,$04,$0a .byte $1b,$04,$0e .byte $1b,$04,$0b .byte $0e,$0c,$0f .byte $0e,$0c,$0e .byte $10,$0c,$07 .byte $19,$04,$0c .byte $19,$04,$08 .byte $0d,$0c,$07 .byte $0e,$0c,$07 .byte $0d,$0c,$0d .byte $0d,$0c,$08 .byte $18,$04,$06 .byte $07,$0c,$04 .byte $0d,$0c,$07 .byte $0d,$0c,$0b .byte $13,$04,$01 .byte $16,$04,$04 .byte $16,$04,$06 .byte $16,$04,$03 .byte $0c,$0c,$04 .byte $0c,$0c,$06 .byte $0c,$0c,$04 .byte $15,$04,$03 .byte $15,$04,$03 .byte $06,$0c,$01 .byte $0b,$0c,$02 .byte $0b,$0c,$04 .byte $0b,$0c,$02 .byte $00,$00,$00 ================================================ FILE: tools/cc65/atari7800/sfxlib/sfx_buzzbomb.s ================================================ .rodata .export _sfx_buzzbomb _sfx_buzzbomb: .byte $10,$10,$00 ; version, priority, frames per chunk .byte $03,$06,$05 ; first chunk of freq,channel,volume .byte $0f,$06,$0f .byte $0f,$06,$0f .byte $07,$06,$0b .byte $07,$06,$0f .byte $0f,$06,$0f .byte $07,$06,$0e .byte $0f,$06,$0f .byte $0f,$06,$0a .byte $0f,$06,$0f .byte $1b,$0c,$0a .byte $0f,$06,$08 .byte $03,$06,$07 .byte $07,$06,$06 .byte $03,$06,$07 .byte $0f,$06,$05 .byte $07,$06,$05 .byte $0f,$06,$04 .byte $07,$06,$04 .byte $07,$06,$02 .byte $0f,$06,$02 .byte $1b,$0c,$01 .byte $00,$00,$00 ================================================ FILE: tools/cc65/atari7800/sfxlib/sfx_cabwhistle.s ================================================ .rodata .export _sfx_cabwhistle _sfx_cabwhistle: .byte $10,$10,$00 ; version, priority, frames per chunk .byte $0a,$04,$03 ; first chunk of freq,channel,volume .byte $09,$04,$04 .byte $02,$0c,$04 .byte $07,$04,$04 .byte $06,$04,$05 .byte $06,$04,$05 .byte $06,$04,$06 .byte $06,$04,$07 .byte $06,$04,$06 .byte $06,$04,$05 .byte $07,$04,$06 .byte $02,$0c,$04 .byte $02,$0c,$0a .byte $09,$04,$0a .byte $0a,$04,$0b .byte $0a,$04,$0b .byte $0a,$04,$0f .byte $03,$0c,$0b .byte $03,$0c,$0f .byte $03,$0c,$0f .byte $03,$0c,$0f .byte $03,$0c,$0f .byte $03,$0c,$08 .byte $03,$0c,$0f .byte $03,$0c,$0f .byte $03,$0c,$0f .byte $03,$0c,$0f .byte $03,$0c,$09 .byte $0a,$04,$0d .byte $0a,$04,$0a .byte $09,$04,$06 .byte $09,$04,$07 .byte $02,$0c,$04 .byte $02,$0c,$03 .byte $07,$04,$03 .byte $07,$04,$02 .byte $06,$04,$03 .byte $06,$04,$03 .byte $06,$04,$06 .byte $06,$04,$06 .byte $06,$04,$02 .byte $00,$00,$00 ================================================ FILE: tools/cc65/atari7800/sfxlib/sfx_cavalry.s ================================================ .rodata .export _sfx_cavalry _sfx_cavalry: .byte $10,$07,$05 ; version, priority, frames per chunk .byte $1D,$04,$08 ; first chunk of freq,channel,volume data .byte $1A,$04,$08 .byte $17,$04,$08 .byte $13,$04,$08 .byte $17,$04,$08 .byte $13,$04,$08 .byte $13,$04,$08 .byte $00,$00,$00 ================================================ FILE: tools/cc65/atari7800/sfxlib/sfx_chirp.s ================================================ .rodata .export _sfx_chirp _sfx_chirp: .byte $10,$10,$00 ; version, priority, frames per chunk .byte $07, $04, $0e ; first chunk of freq,channel,volume .byte $0a, $04, $0e .byte $0c, $04, $0e .byte $09, $04, $0f .byte $0a, $04, $0e .byte $07, $04, $01 .byte $09, $04, $00 .byte $00,$00,$00 ================================================ FILE: tools/cc65/atari7800/sfxlib/sfx_crystalchimes.s ================================================ .rodata .export _sfx_crystalchimes _sfx_crystalchimes: .byte $10,$10,$00 ; version, priority, frames per chunk .byte $03,$04,$05 ; first chunk of freq,channel,volume .byte $03,$04,$0f .byte $0c,$04,$05 .byte $0c,$04,$0d .byte $0c,$04,$0f .byte $0c,$04,$0b .byte $0c,$04,$0f .byte $0c,$04,$0f .byte $06,$04,$0b .byte $0c,$04,$0c .byte $0c,$04,$0b .byte $06,$04,$0a .byte $03,$0c,$0d .byte $03,$0c,$0b .byte $03,$0c,$0a .byte $03,$0c,$08 .byte $06,$04,$09 .byte $03,$0c,$0f .byte $03,$0c,$0d .byte $06,$04,$08 .byte $03,$0c,$0c .byte $0a,$04,$07 .byte $0a,$04,$0a .byte $0a,$04,$0d .byte $03,$0c,$04 .byte $0a,$04,$07 .byte $06,$04,$06 .byte $0a,$04,$08 .byte $0a,$04,$0c .byte $06,$04,$07 .byte $0a,$04,$04 .byte $0a,$04,$05 .byte $06,$04,$06 .byte $1e,$06,$02 .byte $06,$04,$05 .byte $0a,$04,$06 .byte $0a,$04,$06 .byte $06,$04,$05 .byte $0a,$04,$07 .byte $06,$04,$04 .byte $0a,$04,$05 .byte $0a,$04,$06 .byte $06,$04,$05 .byte $1e,$06,$01 .byte $06,$04,$04 .byte $0a,$04,$04 .byte $0a,$04,$04 .byte $0a,$04,$02 .byte $0a,$04,$02 .byte $06,$04,$03 .byte $0a,$04,$03 .byte $0a,$04,$05 .byte $06,$04,$02 .byte $0a,$04,$04 .byte $0a,$04,$03 .byte $0a,$04,$02 .byte $0a,$04,$03 .byte $0a,$04,$02 .byte $0a,$04,$03 .byte $0a,$04,$03 .byte $06,$04,$01 .byte $0a,$04,$03 .byte $0a,$04,$01 .byte $0a,$04,$02 .byte $0a,$04,$01 .byte $06,$04,$01 .byte $0a,$04,$01 .byte $0a,$04,$01 .byte $00,$00,$00 ================================================ FILE: tools/cc65/atari7800/sfxlib/sfx_deeproar.s ================================================ .rodata .export _sfx_deeproar _sfx_deeproar: .byte $10,$10,$00 ; version, priority, frames per chunk .byte $0f,$06,$02 ; first chunk of freq,channel,volume .byte $0b,$06,$0a .byte $1f,$06,$0f .byte $14,$0f,$0f .byte $0c,$06,$0f .byte $13,$06,$0f .byte $0d,$06,$0f .byte $17,$06,$0f .byte $16,$06,$0f .byte $17,$06,$0f .byte $14,$0f,$0f .byte $13,$06,$0f .byte $16,$06,$0f .byte $13,$0f,$0f .byte $16,$06,$0f .byte $13,$06,$0f .byte $17,$06,$0f .byte $13,$0f,$0f .byte $13,$06,$0f .byte $13,$06,$0f .byte $14,$0f,$0f .byte $16,$06,$0f .byte $0d,$06,$0f .byte $17,$06,$0f .byte $13,$0f,$0f .byte $13,$06,$0f .byte $13,$06,$0f .byte $14,$0f,$0f .byte $17,$06,$0f .byte $0d,$06,$0f .byte $14,$0f,$0f .byte $14,$0f,$0f .byte $0d,$06,$0f .byte $17,$06,$0f .byte $14,$0f,$0f .byte $13,$06,$0f .byte $13,$06,$0f .byte $0d,$06,$0f .byte $17,$06,$0f .byte $17,$06,$0f .byte $13,$0f,$0c .byte $14,$0f,$0a .byte $14,$0f,$0a .byte $17,$06,$0a .byte $17,$06,$0a .byte $13,$0f,$0a .byte $0d,$06,$07 .byte $13,$06,$07 .byte $17,$06,$07 .byte $13,$06,$07 .byte $13,$06,$07 .byte $0d,$06,$07 .byte $0d,$06,$05 .byte $17,$06,$05 .byte $17,$06,$02 .byte $0d,$06,$02 .byte $0d,$06,$02 .byte $0d,$06,$02 .byte $1c,$0f,$02 .byte $1d,$0f,$02 .byte $0d,$06,$02 .byte $0d,$06,$02 .byte $0c,$06,$02 .byte $0d,$06,$02 .byte $1b,$0f,$02 .byte $17,$06,$02 .byte $0d,$06,$02 .byte $13,$0f,$02 .byte $13,$0f,$02 .byte $0c,$06,$02 .byte $00,$00,$00 ================================================ FILE: tools/cc65/atari7800/sfxlib/sfx_denied.s ================================================ .rodata .export _sfx_denied _sfx_denied: .byte $10,$10,$00 ; version, priority, frames per chunk .byte $0e,$0c,$0d ; first chunk of freq,channel,volume .byte $10,$0c,$0a .byte $10,$0c,$0c .byte $1e,$06,$05 .byte $1e,$06,$09 .byte $12,$0c,$07 .byte $12,$0c,$0b .byte $12,$0c,$0f .byte $12,$0c,$0b .byte $12,$0c,$07 .byte $03,$06,$05 .byte $03,$06,$04 .byte $03,$06,$09 .byte $1e,$06,$03 .byte $12,$0c,$07 .byte $12,$0c,$07 .byte $12,$0c,$05 .byte $1e,$06,$05 .byte $1f,$0c,$03 .byte $1f,$0c,$02 .byte $1f,$0c,$01 .byte $00,$00,$00 ================================================ FILE: tools/cc65/atari7800/sfxlib/sfx_distressed.s ================================================ .rodata .export _sfx_distressed _sfx_distressed: .byte $10,$10,$00 ; version, priority, frames per chunk .byte $00,$06,$02 ; first chunk of freq,channel,volume .byte $00,$06,$01 .byte $0f,$04,$09 .byte $00,$06,$0a .byte $04,$0c,$0b .byte $0f,$04,$0b .byte $12,$04,$09 .byte $0c,$04,$0b .byte $15,$04,$0f .byte $15,$04,$0f .byte $03,$0c,$0e .byte $0c,$04,$0f .byte $0c,$0c,$0f .byte $0d,$04,$0b .byte $04,$0c,$07 .byte $00,$06,$05 .byte $00,$06,$04 .byte $00,$06,$03 .byte $00,$06,$02 .byte $00,$00,$00 ================================================ FILE: tools/cc65/atari7800/sfxlib/sfx_distressed2.s ================================================ .rodata .export _sfx_distressed2 _sfx_distressed2: .byte $10,$10,$00 ; version, priority, frames per chunk .byte $12,$0c,$0f ; first chunk of freq,channel,volume .byte $12,$0c,$0f .byte $1e,$06,$0f .byte $03,$0c,$0f .byte $1e,$06,$0b .byte $1e,$06,$0c .byte $03,$0c,$08 .byte $0c,$04,$0e .byte $0c,$04,$0a .byte $0c,$04,$0a .byte $1e,$06,$08 .byte $1e,$06,$08 .byte $1e,$06,$09 .byte $1e,$06,$05 .byte $04,$0c,$09 .byte $1e,$06,$03 .byte $00,$06,$06 .byte $0f,$04,$03 .byte $10,$04,$03 .byte $10,$04,$01 .byte $05,$0c,$01 .byte $12,$04,$01 .byte $12,$04,$01 .byte $13,$04,$01 .byte $00,$00,$00 ================================================ FILE: tools/cc65/atari7800/sfxlib/sfx_distressed3.s ================================================ .rodata .export _sfx_distressed3 _sfx_distressed3: .byte $10,$10,$00 ; version, priority, frames per chunk .byte $05,$0c,$0c ; first chunk of freq,channel,volume .byte $1b,$04,$0e .byte $1b,$04,$0d .byte $1b,$04,$06 .byte $0d,$04,$07 .byte $1b,$04,$05 .byte $1b,$04,$0b .byte $1b,$04,$06 .byte $1c,$04,$09 .byte $0d,$04,$07 .byte $1c,$04,$0b .byte $1c,$04,$0e .byte $1c,$04,$09 .byte $07,$06,$08 .byte $07,$06,$07 .byte $1c,$04,$05 .byte $1e,$04,$0b .byte $1e,$04,$0b .byte $1e,$04,$0a .byte $1e,$04,$09 .byte $0a,$06,$04 .byte $1e,$04,$03 .byte $0a,$0c,$03 .byte $0a,$06,$03 .byte $0a,$0c,$02 .byte $0a,$0c,$03 .byte $0b,$0c,$01 .byte $0a,$0c,$01 .byte $00,$00,$00 ================================================ FILE: tools/cc65/atari7800/sfxlib/sfx_distressed4.s ================================================ .rodata .export _sfx_distressed4 _sfx_distressed4: .byte $10,$10,$00 ; version, priority, frames per chunk .byte $1b,$04,$04 ; first chunk of freq,channel,volume .byte $1c,$04,$0a .byte $1c,$04,$0f .byte $1b,$04,$0f .byte $1c,$04,$0f .byte $1c,$04,$0f .byte $19,$04,$0f .byte $1c,$04,$0f .byte $1c,$04,$0f .byte $1c,$04,$0f .byte $1c,$04,$09 .byte $1c,$04,$0f .byte $1c,$04,$0f .byte $1c,$04,$0f .byte $1c,$04,$09 .byte $1c,$04,$0f .byte $1c,$04,$0f .byte $1c,$04,$0f .byte $1c,$04,$09 .byte $1c,$04,$0f .byte $1c,$04,$0f .byte $1d,$04,$08 .byte $1d,$04,$02 .byte $1d,$04,$01 .byte $1d,$04,$00 .byte $1d,$04,$02 .byte $1d,$04,$01 .byte $00,$00,$00 ================================================ FILE: tools/cc65/atari7800/sfxlib/sfx_doorpound.s ================================================ .rodata .export _sfx_doorpound _sfx_doorpound: .byte $10,$10,$00 ; version, priority, frames per chunk .byte $0f,$06,$0f ; first chunk of freq,channel,volume .byte $1e,$0c,$0f .byte $0f,$06,$0f .byte $1e,$06,$0f .byte $0a,$06,$0f .byte $07,$06,$0b .byte $0f,$06,$0f .byte $0f,$06,$0c .byte $07,$06,$0a .byte $07,$06,$09 .byte $0f,$06,$0b .byte $1e,$06,$07 .byte $0a,$06,$06 .byte $0a,$06,$08 .byte $0f,$06,$06 .byte $0a,$06,$05 .byte $1e,$06,$03 .byte $0f,$06,$02 .byte $00,$00,$00 ================================================ FILE: tools/cc65/atari7800/sfxlib/sfx_downthepipe.s ================================================ .rodata .export _sfx_downthepipe _sfx_downthepipe: .byte $10,$10,$00 ; version, priority, frames per chunk .byte $1e,$06,$0f ; first chunk of freq,channel,volume .byte $1e,$06,$0f .byte $18,$04,$08 .byte $0c,$0c,$0d .byte $12,$0c,$0b .byte $0a,$06,$06 .byte $18,$04,$0a .byte $0c,$0c,$0b .byte $03,$06,$0f .byte $1e,$0c,$0e .byte $1e,$06,$0f .byte $0f,$06,$0f .byte $1e,$06,$02 .byte $1e,$06,$00 .byte $1e,$06,$00 .byte $07,$06,$00 .byte $1e,$06,$0f .byte $1e,$06,$0f .byte $18,$04,$08 .byte $0c,$0c,$0d .byte $12,$0c,$0b .byte $0a,$06,$06 .byte $18,$04,$0a .byte $0c,$0c,$0b .byte $03,$06,$0f .byte $1e,$0c,$0e .byte $1e,$06,$0f .byte $0f,$06,$0f .byte $1e,$06,$02 .byte $1e,$06,$00 .byte $1e,$06,$00 .byte $07,$06,$00 .byte $1e,$06,$0f .byte $1e,$06,$0f .byte $18,$04,$08 .byte $0c,$0c,$0d .byte $12,$0c,$0b .byte $0a,$06,$06 .byte $18,$04,$0a .byte $0c,$0c,$0b .byte $03,$06,$0f .byte $1e,$0c,$0e .byte $1e,$06,$0f .byte $0f,$06,$0f .byte $1e,$06,$02 .byte $1e,$06,$00 .byte $1e,$06,$00 .byte $07,$06,$00 .byte $00,$00,$00 ================================================ FILE: tools/cc65/atari7800/sfxlib/sfx_dragit.s ================================================ .rodata .export _sfx_dragit _sfx_dragit: .byte $10,$10,$00 ; version, priority, frames per chunk .byte $1c,$07,$02 ; first chunk of freq,channel,volume .byte $02,$07,$06 .byte $1e,$08,$09 .byte $11,$08,$09 .byte $1e,$08,$09 .byte $11,$07,$06 .byte $1e,$08,$09 .byte $11,$07,$06 .byte $0e,$07,$03 .byte $06,$07,$02 .byte $00,$00,$00 ================================================ FILE: tools/cc65/atari7800/sfxlib/sfx_drip.s ================================================ .rodata .export _sfx_drip _sfx_drip: .byte $10,$10,$00 ; version, priority, frames per chunk .byte $17,$0c,$0f ; first chunk of freq,channel,volume .byte $17,$0c,$0a .byte $0d,$0c,$0a .byte $1e,$06,$07 .byte $12,$0c,$01 .byte $1e,$06,$00 .byte $1e,$06,$02 .byte $03,$06,$00 .byte $1e,$06,$00 .byte $1e,$06,$00 .byte $03,$06,$01 .byte $03,$06,$02 .byte $12,$0c,$01 .byte $10,$0c,$00 .byte $1e,$06,$00 .byte $1e,$06,$01 .byte $00,$00,$00 ================================================ FILE: tools/cc65/atari7800/sfxlib/sfx_dropmedium.s ================================================ .rodata .export _sfx_dropmedium _sfx_dropmedium: .byte $10,$10,$00 ; version, priority, frames per chunk .byte $00,$04,$00 ; first chunk of freq,channel,volume .byte $03,$06,$0c .byte $0d,$0c,$0f .byte $1b,$04,$04 .byte $06,$0c,$00 .byte $00,$06,$00 .byte $07,$06,$00 .byte $10,$0c,$00 .byte $0d,$0c,$00 .byte $10,$0c,$00 .byte $03,$06,$00 .byte $10,$0c,$00 .byte $1b,$04,$00 .byte $10,$0c,$00 .byte $10,$0c,$00 .byte $03,$06,$00 .byte $00,$00,$00 ================================================ FILE: tools/cc65/atari7800/sfxlib/sfx_dropped.s ================================================ .rodata .export _sfx_dropped _sfx_dropped: .byte $10,$10,$00 ; version, priority, frames per chunk .byte $0a,$06,$0f ; first chunk of freq,channel,volume .byte $0a,$06,$0f .byte $0a,$06,$06 .byte $0c,$04,$02 .byte $1b,$0c,$01 .byte $07,$06,$0f .byte $0a,$06,$0f .byte $0a,$06,$0f .byte $0a,$06,$07 .byte $07,$04,$06 .byte $07,$04,$04 .byte $07,$06,$0f .byte $07,$06,$0d .byte $07,$04,$0e .byte $07,$04,$06 .byte $07,$04,$03 .byte $0a,$06,$09 .byte $0a,$06,$0f .byte $07,$04,$0f .byte $07,$04,$05 .byte $07,$04,$05 .byte $1b,$0c,$08 .byte $07,$04,$0d .byte $07,$04,$07 .byte $07,$04,$07 .byte $07,$04,$03 .byte $07,$04,$07 .byte $07,$04,$05 .byte $07,$04,$03 .byte $07,$04,$01 .byte $00,$00,$00 ================================================ FILE: tools/cc65/atari7800/sfxlib/sfx_dunno.s ================================================ .rodata .export _sfx_dunno _sfx_dunno: .byte $10,$10,$00 ; version, priority, frames per chunk .byte $0b,$0c,$04 ; first chunk of freq,channel,volume .byte $0a,$0c,$0b .byte $0a,$0c,$0f .byte $0a,$0c,$0f .byte $0a,$0c,$0f .byte $0a,$0c,$0d .byte $0a,$0c,$0f .byte $0b,$0c,$0c .byte $0b,$0c,$0f .byte $0b,$0c,$0d .byte $0b,$0c,$07 .byte $0b,$0c,$0b .byte $0b,$0c,$08 .byte $08,$0c,$03 .byte $0b,$0c,$06 .byte $0b,$0c,$08 .byte $0b,$0c,$09 .byte $0b,$0c,$06 .byte $0c,$0c,$05 .byte $0b,$0c,$04 .byte $0b,$0c,$03 .byte $0b,$0c,$02 .byte $00,$00,$00 ================================================ FILE: tools/cc65/atari7800/sfxlib/sfx_echo1.s ================================================ .rodata .export _sfx_echo1 _sfx_echo1: .byte $10,$08,$08 ; version, priority, frames per chunk .byte $18,$06,$0a ; first chunk of freq,channel,volume data .byte $08,$06,$0a .byte $01,$00,$00 .byte $18,$06,$05 .byte $08,$06,$05 .byte $01,$00,$00 .byte $18,$06,$02 .byte $08,$06,$02 .byte $00,$00,$00 ================================================ FILE: tools/cc65/atari7800/sfxlib/sfx_echo2.s ================================================ .rodata .export _sfx_echo2 _sfx_echo2: .byte $10,$05,$04 ; version, priority, frames per chunk .byte $1F,$04,$0A ; first chunk of freq,channel,volume data .byte $01,$00,$00 .byte $1F,$04,$05 .byte $01,$00,$00 .byte $1F,$04,$02 .byte $00,$00,$00 ================================================ FILE: tools/cc65/atari7800/sfxlib/sfx_echobang.s ================================================ .rodata .export _sfx_echobang _sfx_echobang: .byte $10,$10,$00 ; version, priority, frames per chunk .byte $19,$07,$0f ; first chunk of freq,channel,volume .byte $13,$07,$0f .byte $1a,$06,$0f .byte $1a,$01,$0f .byte $17,$07,$0f .byte $10,$0c,$0f .byte $14,$07,$0f .byte $04,$07,$0f .byte $0e,$07,$0f .byte $1b,$01,$0f .byte $1b,$01,$0f .byte $1e,$07,$0f .byte $12,$07,$0f .byte $09,$06,$0f .byte $17,$0f,$0f .byte $11,$06,$0f .byte $09,$07,$0b .byte $09,$07,$0e .byte $0b,$0f,$0b .byte $0e,$0f,$0c .byte $1a,$07,$09 .byte $13,$0f,$09 .byte $14,$0f,$0b .byte $0c,$0e,$07 .byte $18,$07,$07 .byte $19,$07,$07 .byte $0b,$0f,$06 .byte $1a,$07,$07 .byte $1a,$07,$03 .byte $1f,$07,$03 .byte $18,$06,$06 .byte $17,$06,$04 .byte $14,$06,$04 .byte $15,$07,$01 .byte $00,$00,$00 ================================================ FILE: tools/cc65/atari7800/sfxlib/sfx_eek.s ================================================ .rodata .export _sfx_eek _sfx_eek: .byte $10,$10,$00 ; version, priority, frames per chunk .byte $1e,$06,$04 ; first chunk of freq,channel,volume .byte $10,$0c,$03 .byte $1e,$04,$0b .byte $1c,$04,$0f .byte $0d,$04,$0f .byte $03,$0c,$0f .byte $03,$0c,$0f .byte $03,$0c,$0f .byte $0a,$04,$0f .byte $0a,$04,$0f .byte $0a,$04,$0f .byte $0a,$04,$0f .byte $0a,$04,$0f .byte $0a,$04,$0f .byte $0a,$04,$08 .byte $0a,$04,$0f .byte $0a,$04,$07 .byte $0a,$04,$0f .byte $0a,$04,$0c .byte $03,$0c,$0f .byte $03,$0c,$0f .byte $0c,$04,$0f .byte $04,$0c,$06 .byte $0c,$04,$02 .byte $06,$0c,$01 .byte $06,$0c,$01 .byte $00,$00,$00 ================================================ FILE: tools/cc65/atari7800/sfxlib/sfx_eek2.s ================================================ .rodata .export _sfx_eek2 _sfx_eek2: .byte $10,$10,$00 ; version, priority, frames per chunk .byte $1e,$06,$01 ; first chunk of freq,channel,volume .byte $0a,$04,$0a .byte $0a,$04,$0f .byte $09,$04,$0f .byte $13,$04,$0e .byte $09,$04,$0f .byte $09,$04,$0f .byte $09,$04,$0f .byte $09,$04,$0a .byte $09,$04,$0f .byte $09,$04,$0c .byte $09,$04,$0f .byte $0a,$04,$0f .byte $0a,$04,$0c .byte $03,$0c,$0f .byte $0c,$04,$0a .byte $0d,$04,$05 .byte $09,$04,$02 .byte $03,$0c,$01 .byte $00,$00,$00 ================================================ FILE: tools/cc65/atari7800/sfxlib/sfx_electrobump.s ================================================ .rodata .export _sfx_electrobump _sfx_electrobump: .byte $10,$10,$01 ; version, priority, frames per chunk .byte $08,$08,$0a .byte $08,$0c,$0a .byte $08,$06,$0a .byte $08,$0e,$0a .byte $08,$06,$08 .byte $08,$06,$08 .byte $08,$0e,$06 .byte $08,$06,$04 .byte $08,$06,$02 .byte 0,0,0 ================================================ FILE: tools/cc65/atari7800/sfxlib/sfx_electropunch.s ================================================ .rodata .export _sfx_electropunch _sfx_electropunch: .byte $10,$10,$00 ; version, priority, frames per chunk .byte $07,$06,$0f ; first chunk of freq,channel,volume .byte $0f,$06,$08 .byte $1e,$04,$0a .byte $0f,$06,$08 .byte $12,$04,$06 .byte $0f,$06,$05 .byte $0f,$06,$06 .byte $0c,$04,$03 .byte $07,$06,$01 .byte $0a,$04,$03 .byte $02,$0c,$01 .byte $00,$00,$00 ================================================ FILE: tools/cc65/atari7800/sfxlib/sfx_electrosplosion.s ================================================ .rodata .export _sfx_electrosplosion _sfx_electrosplosion: .byte $10,$10,$01 ; version, priority, frames per chunk .byte $0f,$06,$0f ; first chunk of freq,channel,volume .byte $07,$06,$0a .byte $07,$06,$0f .byte $03,$06,$06 .byte $07,$06,$0f .byte $0f,$06,$08 .byte $07,$06,$06 .byte $0f,$06,$0a .byte $0f,$06,$0f .byte $0f,$06,$06 .byte $07,$06,$05 .byte $0f,$06,$0d .byte $0f,$06,$0a .byte $1b,$0c,$05 .byte $0f,$06,$0c .byte $0f,$06,$09 .byte $0f,$06,$0d .byte $0f,$06,$0f .byte $0f,$06,$04 .byte $0f,$06,$06 .byte $0f,$06,$0f .byte $07,$06,$05 .byte $0f,$06,$06 .byte $0f,$06,$01 .byte $07,$06,$01 .byte $0f,$06,$00 .byte $0f,$06,$03 .byte $0f,$06,$01 .byte $0f,$06,$01 .byte $00,$00,$00 ================================================ FILE: tools/cc65/atari7800/sfxlib/sfx_electroswitch.s ================================================ .rodata .export _sfx_electroswitch _sfx_electroswitch: .byte $10,$01,$02 ; version, priority, frames per chunk .byte $06,$04,$0F ; first chunk of freq,channel,volume data .byte $0C,$04,$08 ; first chunk of freq,channel,volume data .byte $18,$04,$04 ; first chunk of freq,channel,volume data .byte $31,$04,$02 ; first chunk of freq,channel,volume data .byte $00,$00,$00 ================================================ FILE: tools/cc65/atari7800/sfxlib/sfx_electroswitch2.s ================================================ .rodata .export _sfx_electroswitch2 _sfx_electroswitch2: .byte $10,$10,$00 ; version, priority, frames per chunk .byte $05,$0c,$0b ; first chunk of freq,channel,volume .byte $17,$0c,$0c .byte $0c,$04,$0b .byte $07,$04,$0b .byte $0c,$04,$0f .byte $0c,$04,$08 .byte $12,$04,$09 .byte $12,$04,$0f .byte $1b,$0c,$08 .byte $0a,$06,$09 .byte $0a,$06,$02 .byte $1b,$0c,$01 .byte $00,$00,$00 ================================================ FILE: tools/cc65/atari7800/sfxlib/sfx_explosion.s ================================================ .rodata .export _sfx_explosion _sfx_explosion: .byte $10,$10,$00 ; version, priority, frames per chunk .byte $01,$08,$02 .byte $0b,$0c,$05 .byte $04,$06,$08 .byte $03,$0e,$0f .byte $09,$06,$0f .byte $0d,$06,$0f .byte $04,$0e,$0f .byte $0f,$06,$08 .byte $09,$06,$04 .byte $16,$01,$03 .byte $0c,$06,$04 .byte $09,$06,$05 .byte $0a,$06,$03 .byte $09,$06,$05 .byte $0d,$06,$08 .byte $09,$06,$04 .byte $04,$0e,$06 .byte $0f,$06,$05 .byte $0f,$06,$07 .byte $04,$0e,$07 .byte $08,$06,$06 .byte $03,$0e,$08 .byte $0f,$06,$06 .byte $09,$06,$05 .byte $06,$06,$05 .byte $03,$0e,$05 .byte $0e,$06,$06 .byte $02,$0e,$05 .byte $0f,$06,$03 .byte $0e,$06,$06 .byte $09,$06,$05 .byte $0c,$06,$05 .byte $0f,$06,$03 .byte $04,$0e,$08 .byte $0c,$06,$03 .byte $0f,$06,$03 .byte $0c,$06,$06 .byte $0f,$06,$04 .byte $0f,$06,$05 .byte $0f,$06,$03 .byte $0a,$06,$04 .byte $0f,$06,$03 .byte $08,$06,$03 .byte $0c,$06,$03 .byte $0e,$06,$03 .byte $08,$06,$03 .byte 0,0,0 ================================================ FILE: tools/cc65/atari7800/sfxlib/sfx_falling.s ================================================ .rodata .export _sfx_falling _sfx_falling: .byte $10,$10,$00 ; version, priority, frames per chunk .byte $0f,$04,$00 ; first chunk of freq,channel,volume .byte $03,$0c,$03 .byte $0c,$04,$04 .byte $0c,$04,$0b .byte $0c,$04,$0b .byte $0d,$04,$0a .byte $0d,$04,$0f .byte $04,$0c,$0f .byte $04,$0c,$0f .byte $04,$0c,$0a .byte $00,$06,$0f .byte $0f,$04,$0b .byte $10,$04,$08 .byte $00,$06,$0c .byte $04,$0c,$0f .byte $04,$0c,$0d .byte $0d,$04,$08 .byte $04,$0c,$0c .byte $05,$0c,$0b .byte $05,$0c,$07 .byte $06,$0c,$06 .byte $12,$04,$0c .byte $12,$04,$0f .byte $12,$04,$0f .byte $10,$04,$0f .byte $10,$04,$0f .byte $10,$04,$09 .byte $13,$04,$07 .byte $13,$04,$07 .byte $15,$04,$0b .byte $06,$0c,$0f .byte $13,$04,$0f .byte $13,$04,$0f .byte $12,$04,$08 .byte $05,$0c,$0c .byte $05,$0c,$07 .byte $16,$04,$06 .byte $16,$04,$05 .byte $07,$0c,$02 .byte $07,$0c,$05 .byte $15,$04,$08 .byte $15,$04,$0f .byte $15,$04,$0b .byte $13,$04,$07 .byte $16,$04,$06 .byte $16,$04,$04 .byte $18,$04,$06 .byte $19,$04,$05 .byte $1b,$04,$02 .byte $18,$04,$01 .byte $16,$04,$02 .byte $16,$04,$06 .byte $06,$0c,$01 .byte $16,$04,$05 .byte $16,$04,$01 .byte $1c,$04,$01 .byte $00,$00,$00 ================================================ FILE: tools/cc65/atari7800/sfxlib/sfx_gooditem.s ================================================ .rodata .export _sfx_gooditem _sfx_gooditem: .byte $10,$10,$00 ; version, priority, frames per chunk .byte $07,$0c,$0f ; first chunk of freq,channel,volume .byte $06,$0c,$04 .byte $07,$0c,$0f .byte $07,$0c,$0f .byte $07,$0c,$0f .byte $06,$0c,$08 .byte $06,$0c,$09 .byte $06,$0c,$0c .byte $07,$0c,$0d .byte $06,$0c,$0e .byte $06,$0c,$0c .byte $12,$04,$0d .byte $12,$04,$0d .byte $1b,$04,$04 .byte $06,$0c,$06 .byte $12,$04,$0c .byte $12,$04,$0b .byte $10,$04,$04 .byte $04,$0c,$04 .byte $12,$04,$0c .byte $12,$04,$0c .byte $10,$04,$0a .byte $12,$04,$03 .byte $06,$0c,$09 .byte $12,$04,$0e .byte $10,$04,$0d .byte $04,$0c,$07 .byte $04,$0c,$06 .byte $0d,$04,$07 .byte $10,$04,$0a .byte $10,$04,$0a .byte $10,$04,$05 .byte $04,$0c,$04 .byte $10,$04,$06 .byte $10,$04,$0b .byte $10,$04,$05 .byte $0d,$04,$08 .byte $03,$0c,$07 .byte $04,$0c,$09 .byte $04,$0c,$05 .byte $0c,$04,$0a .byte $0a,$04,$07 .byte $09,$04,$04 .byte $0d,$04,$08 .byte $0d,$04,$05 .byte $03,$0c,$07 .byte $00,$00,$00 ================================================ FILE: tools/cc65/atari7800/sfxlib/sfx_gotthecoin.s ================================================ .rodata .export _sfx_gotthecoin _sfx_gotthecoin: .byte $10,$10,$00 ; version, priority, frames per chunk .byte $04,$0c,$0f ; first chunk of freq,channel,volume .byte $04,$0c,$0f .byte $0a,$04,$0e .byte $0a,$04,$0f .byte $0a,$04,$0f .byte $0a,$04,$0d .byte $0a,$04,$09 .byte $0a,$04,$09 .byte $0a,$04,$08 .byte $0a,$04,$07 .byte $0a,$04,$06 .byte $0a,$04,$05 .byte $0a,$04,$03 .byte $0a,$04,$07 .byte $0a,$04,$09 .byte $0a,$04,$03 .byte $0a,$04,$01 .byte $0a,$04,$01 .byte $0a,$04,$01 .byte $0a,$04,$00 .byte $0a,$04,$01 .byte $0a,$04,$01 .byte $0a,$04,$01 .byte $00,$00,$00 ================================================ FILE: tools/cc65/atari7800/sfxlib/sfx_gotthering.s ================================================ .rodata .export _sfx_gotthering _sfx_gotthering: .byte $10,$10,$00 ; version, priority, frames per chunk .byte $09,$04,$0f ; first chunk of freq,channel,volume .byte $09,$04,$0a .byte $09,$04,$08 .byte $09,$04,$04 .byte $0a,$04,$0a .byte $0a,$04,$08 .byte $0a,$04,$04 .byte $0a,$04,$02 .byte $0a,$04,$01 .byte $0a,$04,$01 .byte $06,$04,$0a .byte $06,$04,$0f .byte $06,$04,$0f .byte $06,$04,$0f .byte $06,$04,$0f .byte $06,$04,$0b .byte $06,$04,$0f .byte $06,$04,$09 .byte $06,$04,$04 .byte $06,$04,$0c .byte $06,$04,$0f .byte $06,$04,$05 .byte $06,$04,$0f .byte $06,$04,$03 .byte $06,$04,$0a .byte $06,$04,$08 .byte $06,$04,$01 .byte $06,$04,$05 .byte $06,$04,$0a .byte $06,$04,$01 .byte $06,$04,$0a .byte $06,$04,$05 .byte $06,$04,$04 .byte $06,$04,$05 .byte $06,$04,$01 .byte $00,$00,$00 ================================================ FILE: tools/cc65/atari7800/sfxlib/sfx_hahaha.s ================================================ .rodata .export _sfx_hahaha _sfx_hahaha: .byte $10,$10,$00 ; version, priority, frames per chunk .byte $0a, $07, $01 ; first chunk of freq,channel,volume .byte $07, $01, $01 .byte $09, $07, $02 .byte $1f, $0f, $01 .byte $07, $07, $01 .byte $12, $0f, $01 .byte $08, $07, $01 .byte $0b, $04, $01 .byte $08, $06, $01 .byte $12, $04, $01 .byte $0b, $04, $01 .byte $16, $06, $01 .byte $07, $06, $01 .byte $12, $04, $0c .byte $11, $04, $0d .byte $10, $04, $0d .byte $13, $04, $0d .byte $15, $04, $05 .byte $07, $07, $03 .byte $13, $04, $01 .byte $1c, $04, $06 .byte $17, $04, $0b .byte $15, $04, $08 .byte $17, $01, $08 .byte $01, $06, $09 .byte $0a, $07, $05 .byte $0d, $0c, $04 .byte $16, $07, $01 .byte $04, $01, $07 .byte $1d, $04, $0b .byte $00, $06, $09 .byte $1b, $0f, $0d .byte $04, $01, $0d .byte $19, $01, $06 .byte $0a, $0f, $01 .byte $02, $06, $03 .byte $0c, $0c, $07 .byte $0a, $0c, $0c .byte $1f, $04, $0f .byte $11, $04, $07 .byte $0b, $0c, $0a .byte $09, $01, $0b .byte $0a, $0c, $07 .byte $12, $01, $01 .byte $0a, $07, $00 .byte $0c, $0c, $08 .byte $11, $04, $0d .byte $0a, $0c, $0c .byte $11, $04, $0a .byte $0b, $0c, $09 .byte $12, $04, $09 .byte $04, $01, $09 .byte $1c, $0f, $07 .byte $13, $04, $08 .byte $14, $04, $07 .byte $14, $04, $07 .byte $0c, $0c, $06 .byte $14, $04, $06 .byte $0c, $0c, $05 .byte $09, $01, $06 .byte $02, $07, $08 .byte $09, $07, $04 .byte $02, $06, $02 .byte $00,$00,$00 ================================================ FILE: tools/cc65/atari7800/sfxlib/sfx_hahaha2.s ================================================ .rodata .export _sfx_hahaha2 _sfx_hahaha2: .byte $10,$10,$01 ; version, priority, frames per chunk .byte $14,$0f,$00 ; first chunk of freq,channel,volume .byte $06,$07,$02 .byte $0a,$04,$0e .byte $0b,$04,$0f .byte $00,$06,$0f .byte $0b,$04,$07 .byte $10,$04,$04 .byte $0d,$04,$02 .byte $10,$04,$02 .byte $10,$04,$0f .byte $0f,$04,$0f .byte $0d,$04,$07 .byte $00,$06,$02 .byte $10,$04,$04 .byte $00,$06,$02 .byte $00,$06,$0f .byte $00,$06,$0f .byte $00,$06,$0f .byte $10,$04,$09 .byte $0c,$04,$08 .byte $00,$06,$07 .byte $11,$04,$06 .byte $10,$04,$05 .byte $00,$06,$04 .byte $10,$04,$03 .byte $00,$06,$02 .byte $0b,$04,$01 .byte $00,$00,$00 ================================================ FILE: tools/cc65/atari7800/sfxlib/sfx_hophip.s ================================================ .rodata .export _sfx_hophip _sfx_hophip: .byte $10,$10,$00 ; version, priority, frames per chunk .byte $1e,$04,$0f ; first chunk of freq,channel,volume .byte $12,$04,$0d .byte $12,$04,$0f .byte $05,$0c,$0c .byte $10,$04,$0a .byte $05,$0c,$0f .byte $05,$0c,$0f .byte $05,$0c,$04 .byte $05,$0c,$07 .byte $05,$0c,$0f .byte $05,$0c,$0f .byte $05,$0c,$03 .byte $10,$04,$0c .byte $10,$04,$01 .byte $10,$04,$09 .byte $10,$04,$0b .byte $10,$04,$05 .byte $10,$04,$02 .byte $10,$04,$07 .byte $10,$04,$07 .byte $10,$04,$03 .byte $10,$04,$02 .byte $10,$04,$01 .byte $00,$00,$00 ================================================ FILE: tools/cc65/atari7800/sfxlib/sfx_hophipquick.s ================================================ .rodata .export _sfx_hophipquick _sfx_hophipquick: .byte $10,$10,$00 ; version, priority, frames per chunk .byte $1e,$04,$0f ; first chunk of freq,channel,volume .byte $12,$04,$0f .byte $05,$0c,$0c .byte $05,$0c,$0f .byte $05,$0c,$0f .byte $05,$0c,$07 .byte $05,$0c,$0f .byte $05,$0c,$03 .byte $10,$04,$0c .byte $10,$04,$09 .byte $10,$04,$0b .byte $10,$04,$02 .byte $10,$04,$07 .byte $10,$04,$03 .byte $10,$04,$02 .byte $00,$00,$00 ================================================ FILE: tools/cc65/atari7800/sfxlib/sfx_hophop.s ================================================ .rodata .export _sfx_hophop _sfx_hophop: .byte $10,$10,$00 ; version, priority, frames per chunk .byte $04,$0c,$02 ; first chunk of freq,channel,volume .byte $0f,$06,$03 .byte $10,$04,$06 .byte $04,$0c,$09 .byte $00,$06,$09 .byte $1e,$06,$0b .byte $1e,$06,$09 .byte $0c,$0c,$09 .byte $15,$04,$0b .byte $03,$0c,$07 .byte $04,$0c,$0a .byte $15,$04,$0c .byte $0c,$04,$0f .byte $1e,$06,$0f .byte $1e,$06,$0c .byte $1e,$06,$09 .byte $13,$04,$0c .byte $10,$04,$0f .byte $10,$04,$0f .byte $10,$04,$0f .byte $0c,$0c,$0a .byte $0c,$0c,$08 .byte $0e,$0c,$02 .byte $1e,$06,$04 .byte $1e,$06,$02 .byte $1e,$06,$01 .byte $00,$00,$00 ================================================ FILE: tools/cc65/atari7800/sfxlib/sfx_humanoid.s ================================================ .rodata .export _sfx_humanoid _sfx_humanoid: .byte $10,$10,$00 ; version, priority, frames per chunk .byte $01,$02,$05 .byte $0f,$06,$03 .byte $15,$04,$06 .byte $19,$04,$06 .byte $0a,$01,$05 .byte $14,$04,$08 .byte $17,$04,$08 .byte $04,$0f,$07 .byte $13,$04,$07 .byte $16,$04,$0a .byte $1b,$04,$09 .byte $15,$01,$07 .byte $15,$04,$09 .byte $18,$04,$09 .byte $15,$04,$07 .byte $14,$04,$08 .byte $17,$04,$08 .byte $1b,$04,$07 .byte $13,$04,$09 .byte $16,$04,$0b .byte $1a,$04,$09 .byte $03,$0f,$06 .byte $15,$04,$06 .byte $18,$04,$06 .byte $04,$0f,$05 .byte $09,$04,$04 .byte $0b,$04,$06 .byte $0d,$04,$06 .byte $09,$04,$05 .byte $0b,$04,$05 .byte $0d,$04,$05 .byte $0a,$04,$06 .byte $15,$04,$06 .byte $18,$04,$06 .byte $1c,$04,$06 .byte $00,$00,$00 ================================================ FILE: tools/cc65/atari7800/sfxlib/sfx_jump1.s ================================================ .rodata .export _sfx_jump1 _sfx_jump1: .byte $10,$10,$00 ; version, priority, frames per chunk .byte $03,$06,$0f ; first chunk of freq,channel,volume .byte $12,$0c,$0f .byte $12,$0c,$0f .byte $10,$0c,$0f .byte $10,$0c,$0f .byte $10,$0c,$05 .byte $0d,$0c,$09 .byte $0e,$0c,$05 .byte $0c,$0c,$0f .byte $0c,$0c,$0c .byte $0b,$0c,$0c .byte $0b,$0c,$03 .byte $1e,$04,$05 .byte $1c,$04,$04 .byte $1c,$04,$03 .byte $1c,$04,$02 .byte $19,$04,$02 .byte $18,$04,$02 .byte $07,$0c,$01 .byte $00,$00,$00 ================================================ FILE: tools/cc65/atari7800/sfxlib/sfx_jump2.s ================================================ .rodata .export _sfx_jump2 _sfx_jump2: .byte $10,$10,$00 ; version, priority, frames per chunk .byte $10,$0c,$0c ; first chunk of freq,channel,volume .byte $10,$0c,$0f .byte $0f,$0c,$0f .byte $0f,$0c,$0f .byte $00,$06,$07 .byte $0e,$0c,$0f .byte $0e,$0c,$0d .byte $0e,$0c,$07 .byte $0f,$0c,$0f .byte $0f,$0c,$08 .byte $11,$0c,$08 .byte $12,$0c,$06 .byte $03,$06,$08 .byte $15,$0c,$07 .byte $15,$0c,$04 .byte $17,$0c,$06 .byte $04,$06,$06 .byte $04,$06,$01 .byte $17,$0c,$01 .byte $00,$00,$00 ================================================ FILE: tools/cc65/atari7800/sfxlib/sfx_jump3.s ================================================ .rodata .export _sfx_jump3 _sfx_jump3: .byte $10,$10,$01 ; version, priority, frames per chunk .byte $17,$0c,$07 ; first chunk of freq,channel,volume .byte $1b,$0c,$0f .byte $1b,$0c,$09 .byte $17,$0c,$0d .byte $17,$0c,$0f .byte $0d,$0c,$0b .byte $0c,$0c,$0d .byte $0a,$0c,$0a .byte $1c,$04,$09 .byte $1b,$04,$0f .byte $1b,$04,$07 .byte $18,$04,$04 .byte $1b,$04,$0c .byte $0a,$0c,$04 .byte $0b,$0c,$03 .byte $0c,$0c,$03 .byte $0d,$0c,$01 .byte $00,$00,$00 ================================================ FILE: tools/cc65/atari7800/sfxlib/sfx_jumpman.s ================================================ .rodata .export _sfx_jumpman _sfx_jumpman: .byte $10,$05,$04 ; version, priority, frames per chunk .byte $1E,$04,$08 ; first chunk of freq,channel,volume data .byte $1B,$04,$08 .byte $18,$04,$08 .byte $11,$04,$08 .byte $16,$04,$08 .byte $00,$00,$00 ================================================ FILE: tools/cc65/atari7800/sfxlib/sfx_jumpo.s ================================================ .rodata .export _sfx_jumpo _sfx_jumpo: .byte $10,$10,$00 ; version, priority, frames per chunk .byte $1e,$0c,$03 ; first chunk of freq,channel,volume .byte $1e,$0c,$01 .byte $1e,$0c,$06 .byte $1e,$0c,$06 .byte $1e,$0c,$04 .byte $1e,$06,$03 .byte $1e,$0c,$05 .byte $1e,$0c,$0a .byte $1e,$0c,$06 .byte $1e,$06,$06 .byte $1e,$0c,$06 .byte $1b,$0c,$04 .byte $1b,$0c,$02 .byte $1b,$0c,$08 .byte $1b,$0c,$0b .byte $1b,$0c,$0c .byte $1b,$0c,$0a .byte $1b,$0c,$04 .byte $1b,$0c,$05 .byte $1e,$0c,$07 .byte $1e,$0c,$07 .byte $10,$0c,$02 .byte $1e,$0c,$04 .byte $1e,$0c,$03 .byte $10,$0c,$01 .byte $1e,$0c,$06 .byte $1e,$0c,$06 .byte $07,$06,$04 .byte $07,$06,$05 .byte $07,$06,$0b .byte $07,$06,$0e .byte $07,$06,$0e .byte $07,$06,$0a .byte $17,$0c,$05 .byte $00,$00,$00 ================================================ FILE: tools/cc65/atari7800/sfxlib/sfx_laserrecoil.s ================================================ .rodata .export _sfx_laserrecoil _sfx_laserrecoil: .byte $10,$10,$00 ; version, priority, frames per chunk .byte $06,$0c,$0f ; first chunk of freq,channel,volume .byte $16,$04,$0f .byte $16,$04,$0f .byte $1e,$04,$0f .byte $0b,$0c,$0f .byte $0b,$0c,$0f .byte $1e,$06,$0f .byte $1e,$06,$0c .byte $16,$04,$09 .byte $1e,$04,$09 .byte $1e,$04,$0f .byte $0b,$0c,$0f .byte $0e,$0c,$0f .byte $0d,$0c,$04 .byte $07,$0c,$05 .byte $1b,$04,$03 .byte $0b,$0c,$02 .byte $10,$0c,$03 .byte $03,$06,$02 .byte $00,$00,$00 ================================================ FILE: tools/cc65/atari7800/sfxlib/sfx_longgongsilver.s ================================================ .rodata .export _sfx_longgongsilver _sfx_longgongsilver: .byte $10,$10,$00 ; version, priority, frames per chunk .byte $1b,$0c,$0b ; first chunk of freq,channel,volume .byte $06,$0c,$07 .byte $1b,$0c,$0f .byte $0a,$06,$0d .byte $1b,$0c,$0b .byte $0a,$06,$0f .byte $0a,$06,$0c .byte $12,$0c,$0a .byte $1b,$0c,$0f .byte $12,$0c,$0b .byte $1b,$0c,$0f .byte $1b,$0c,$0f .byte $12,$0c,$0c .byte $1b,$0c,$0f .byte $0a,$06,$0d .byte $12,$0c,$07 .byte $0a,$06,$0f .byte $1b,$0c,$0f .byte $0a,$06,$07 .byte $1b,$0c,$0f .byte $0a,$06,$06 .byte $1b,$0c,$0f .byte $0a,$06,$0f .byte $06,$0c,$07 .byte $0a,$06,$0e .byte $1b,$0c,$0f .byte $12,$0c,$08 .byte $1b,$0c,$0f .byte $1b,$0c,$0c .byte $1b,$0c,$0f .byte $1b,$0c,$0e .byte $12,$0c,$08 .byte $0a,$06,$0c .byte $1b,$0c,$0d .byte $12,$0c,$08 .byte $1b,$0c,$0f .byte $1b,$0c,$0f .byte $1b,$0c,$0a .byte $1b,$0c,$0f .byte $0a,$06,$0a .byte $0a,$06,$08 .byte $0a,$06,$0f .byte $1b,$0c,$09 .byte $0a,$06,$0c .byte $1b,$0c,$0f .byte $06,$0c,$05 .byte $1b,$0c,$0f .byte $0a,$06,$0b .byte $12,$0c,$06 .byte $0a,$06,$0c .byte $1b,$0c,$08 .byte $12,$0c,$0a .byte $1b,$0c,$0d .byte $1b,$0c,$06 .byte $1b,$0c,$0c .byte $1b,$0c,$0b .byte $1b,$0c,$04 .byte $0a,$06,$06 .byte $0a,$06,$07 .byte $0a,$06,$04 .byte $1b,$0c,$09 .byte $1b,$0c,$07 .byte $1b,$0c,$06 .byte $1b,$0c,$07 .byte $12,$0c,$07 .byte $1b,$0c,$06 .byte $12,$0c,$07 .byte $12,$0c,$05 .byte $0a,$06,$05 .byte $1b,$0c,$06 .byte $0a,$0c,$02 .byte $1b,$0c,$08 .byte $0a,$06,$03 .byte $1b,$0c,$04 .byte $0a,$06,$06 .byte $12,$0c,$02 .byte $1b,$0c,$02 .byte $1b,$0c,$05 .byte $12,$0c,$02 .byte $1b,$0c,$05 .byte $0a,$06,$04 .byte $1b,$0c,$02 .byte $1b,$0c,$04 .byte $1b,$0c,$01 .byte $12,$0c,$03 .byte $0a,$06,$04 .byte $1b,$0c,$02 .byte $1b,$0c,$01 .byte $1b,$0c,$04 .byte $0a,$06,$02 .byte $1b,$0c,$02 .byte $0a,$06,$02 .byte $00,$00,$00 ================================================ FILE: tools/cc65/atari7800/sfxlib/sfx_maser.s ================================================ .rodata .export _sfx_maser _sfx_maser: .byte $10,$10,$00 ; version, priority, frames per chunk .byte $14, $04, $0a .byte $16, $04, $0f .byte $19, $04, $0d .byte $0b, $07, $0f .byte $0c, $07, $0f .byte $00, $07, $0d .byte $0f, $04, $0e .byte $06, $01, $0a .byte $17, $04, $0b .byte $0a, $07, $0a .byte $16, $01, $0a .byte $19, $07, $03 .byte $10, $0c, $02 .byte $17, $0c, $00 .byte $15, $0f, $02 .byte $1f, $07, $02 .byte $00,$00,$00 ================================================ FILE: tools/cc65/atari7800/sfxlib/sfx_nonobounce.s ================================================ .rodata .export _sfx_nonobounce _sfx_nonobounce: .byte $10,$10,$01 ; version, priority, frames per chunk .byte $0f,$0c,$04 .byte $00,$0e,$08 .byte $10,$0c,$08 .byte $02,$06,$06 .byte $10,$0c,$06 .byte $02,$06,$06 .byte $00,$0e,$08 .byte $10,$0c,$08 .byte $02,$06,$08 .byte $0f,$0c,$06 .byte $10,$0c,$06 .byte $02,$06,$06 .byte $10,$0c,$06 .byte $0f,$0c,$04 .byte $10,$0c,$04 .byte $0f,$0c,$04 .byte $00,$0e,$04 .byte $10,$0c,$04 .byte $10,$0c,$02 .byte 0,0,0 ================================================ FILE: tools/cc65/atari7800/sfxlib/sfx_oneup.s ================================================ .rodata .export _sfx_oneup _sfx_oneup: .byte $10,$10,$00 ; version, priority, frames per chunk .byte $16,$04,$0f ; first chunk of freq,channel,volume .byte $16,$04,$0f .byte $16,$04,$08 .byte $13,$04,$04 .byte $13,$04,$02 .byte $12,$06,$01 .byte $12,$06,$01 .byte $12,$04,$0f .byte $12,$04,$0f .byte $12,$04,$08 .byte $11,$04,$04 .byte $10,$04,$02 .byte $10,$04,$01 .byte $10,$04,$01 .byte $0a,$04,$08 .byte $0a,$04,$08 .byte $1e,$06,$00 .byte $1e,$06,$00 .byte $1e,$06,$00 .byte $1e,$06,$00 .byte $0d,$04,$08 .byte $0d,$04,$08 .byte $0d,$04,$08 .byte $0d,$04,$06 .byte $1e,$06,$00 .byte $1e,$06,$00 .byte $1e,$06,$00 .byte $0c,$04,$08 .byte $0c,$04,$04 .byte $1e,$06,$00 .byte $1e,$06,$00 .byte $1e,$06,$00 .byte $1e,$06,$00 .byte $09,$04,$06 .byte $01,$04,$02 .byte $09,$04,$04 .byte $09,$04,$02 .byte $09,$04,$04 .byte $09,$04,$04 .byte $01,$04,$02 .byte $09,$04,$04 .byte $01,$04,$00 .byte $09,$04,$04 .byte $01,$04,$02 .byte $09,$04,$04 .byte $09,$04,$02 .byte $09,$04,$02 .byte $09,$04,$04 .byte $01,$04,$02 .byte $01,$04,$01 .byte $00,$00,$00 ================================================ FILE: tools/cc65/atari7800/sfxlib/sfx_ouch.s ================================================ .rodata .export _sfx_ouch _sfx_ouch: .byte $10,$10,$00 ; version, priority, frames per chunk .byte $07,$0c,$0f ; first chunk of freq,channel,volume .byte $07,$0c,$0f .byte $07,$0c,$0f .byte $18,$04,$07 .byte $19,$04,$04 .byte $07,$0c,$09 .byte $19,$04,$0f .byte $19,$04,$0d .byte $19,$04,$0f .byte $19,$04,$0f .byte $1b,$04,$0f .byte $1b,$04,$0f .byte $1b,$04,$0f .byte $1b,$04,$0f .byte $1b,$04,$09 .byte $1b,$04,$05 .byte $1b,$04,$03 .byte $1b,$04,$02 .byte $1c,$04,$01 .byte $1c,$04,$01 .byte $1c,$04,$01 .byte $1b,$04,$02 .byte $19,$04,$00 .byte $1b,$04,$00 .byte $19,$04,$01 .byte $00,$00,$00 ================================================ FILE: tools/cc65/atari7800/sfxlib/sfx_pewpew.s ================================================ .rodata .export _sfx_pewpew _sfx_pewpew: .byte $10,$10,$00 ; version, priority, frames per chunk .byte $1c,$04,$0f ; first chunk of freq,channel,volume .byte $1c,$04,$0f .byte $09,$04,$0b .byte $03,$0c,$0a .byte $04,$0c,$0e .byte $12,$04,$0c .byte $19,$04,$0f .byte $1c,$04,$0f .byte $07,$04,$05 .byte $09,$04,$05 .byte $0d,$04,$06 .byte $0c,$04,$05 .byte $18,$04,$06 .byte $1c,$04,$05 .byte $1e,$04,$03 .byte $07,$04,$03 .byte $09,$04,$03 .byte $0c,$04,$02 .byte $04,$0c,$02 .byte $06,$0c,$01 .byte $00,$00,$00 ================================================ FILE: tools/cc65/atari7800/sfxlib/sfx_pickupprize.s ================================================ .rodata .export _sfx_pickupprize _sfx_pickupprize: .byte $10,$10,$00 ; version, priority, frames per chunk .byte $0a,$0c,$0c ; first chunk of freq,channel,volume .byte $1e,$06,$0f .byte $0b,$0c,$0e .byte $1e,$06,$0d .byte $0c,$0c,$0f .byte $1e,$06,$0e .byte $1e,$06,$0c .byte $0b,$0c,$05 .byte $16,$04,$05 .byte $13,$04,$0a .byte $09,$04,$03 .byte $13,$04,$0a .byte $13,$04,$06 .byte $13,$04,$03 .byte $09,$04,$02 .byte $12,$04,$0a .byte $12,$04,$06 .byte $12,$04,$07 .byte $12,$04,$02 .byte $09,$04,$01 .byte $13,$04,$03 .byte $12,$04,$01 .byte $00,$00,$00 ================================================ FILE: tools/cc65/atari7800/sfxlib/sfx_pitfalljump.s ================================================ .rodata .export _sfx_pitfalljump _sfx_pitfalljump: .byte $10,$05,$03 ; version, priority, frames per chunk .byte $06,$01,$04 ; first chunk of freq,channel,volume data .byte $04,$01,$04 ; first chunk of freq,channel,volume data .byte $03,$01,$04 ; first chunk of freq,channel,volume data .byte $02,$01,$04 ; first chunk of freq,channel,volume data .byte $04,$01,$04 ; first chunk of freq,channel,volume data .byte $00,$00,$00 ================================================ FILE: tools/cc65/atari7800/sfxlib/sfx_plainlaser.s ================================================ .rodata .export _sfx_plainlaser _sfx_plainlaser: .byte $10,$10,$00 ; version, priority, frames per chunk .byte $10,$04,$06 ; first chunk of freq,channel,volume .byte $13,$04,$08 .byte $16,$04,$08 .byte $16,$04,$07 .byte $1c,$04,$09 .byte $0b,$0c,$0f .byte $0d,$0c,$0f .byte $0e,$0c,$0f .byte $0e,$0c,$0f .byte $12,$0c,$0f .byte $03,$06,$0d .byte $1e,$0c,$0a .byte $1e,$0c,$0c .byte $0a,$06,$04 .byte $00,$00,$00 ================================================ FILE: tools/cc65/atari7800/sfxlib/sfx_plonk.s ================================================ .rodata .export _sfx_plonk _sfx_plonk: .byte $10,$10,$00 ; version, priority, frames per chunk .byte $13, $01, $0d ; first chunk of freq,channel,volume .byte $12, $01, $0f .byte $0d, $04, $0d .byte $12, $01, $0b .byte $12, $01, $05 .byte $06, $07, $03 .byte $0a, $0f, $02 .byte $09, $07, $01 .byte $10, $0f, $00 .byte $1b, $0c, $00 .byte $0b, $0e, $00 .byte $09, $06, $00 .byte $12, $01, $01 .byte $0a, $07, $01 .byte $00,$00,$00 ================================================ FILE: tools/cc65/atari7800/sfxlib/sfx_poof1.s ================================================ .rodata .export _sfx_poof1 _sfx_poof1: .byte $10,$10,$00 ; version, priority, frames per chunk .byte $07,$08,$04 ; first chunk of freq,channel,volume .byte $07,$08,$06 .byte $07,$08,$08 .byte $09,$08,$08 .byte $0c,$08,$0a .byte $09,$08,$0a .byte $0c,$08,$0a .byte $09,$08,$0a .byte $0d,$08,$08 .byte $0e,$08,$06 .byte $09,$08,$04 .byte $09,$08,$02 .byte $00,$00,$00 ================================================ FILE: tools/cc65/atari7800/sfxlib/sfx_poof2.s ================================================ .rodata .export _sfx_poof2 _sfx_poof2: .byte $10,$10,$00 ; version, priority, frames per chunk .byte $0a,$08,$04 ; first chunk of freq,channel,volume .byte $12,$08,$06 .byte $09,$08,$08 .byte $11,$08,$08 .byte $08,$08,$0a .byte $10,$08,$0a .byte $07,$08,$0a .byte $0F,$08,$0a .byte $06,$08,$08 .byte $0E,$08,$06 .byte $05,$08,$04 .byte $0D,$08,$02 .byte $00,$00,$00 ================================================ FILE: tools/cc65/atari7800/sfxlib/sfx_powerup.s ================================================ .rodata .export _sfx_powerup _sfx_powerup: .byte $10,$10,$00 ; version, priority, frames per chunk .byte $1e,$06,$0f ; first chunk of freq,channel,volume .byte $1c,$04,$0f .byte $0c,$0c,$0f .byte $0c,$0c,$0f .byte $0c,$0c,$0f .byte $1c,$04,$0f .byte $1b,$04,$0a .byte $16,$04,$09 .byte $12,$04,$07 .byte $12,$04,$0e .byte $12,$04,$08 .byte $0d,$04,$03 .byte $12,$04,$08 .byte $12,$04,$0f .byte $0b,$0c,$0f .byte $0b,$0c,$0f .byte $0b,$0c,$0c .byte $1c,$04,$06 .byte $1c,$04,$0c .byte $07,$0c,$0f .byte $07,$0c,$09 .byte $05,$0c,$0a .byte $18,$04,$07 .byte $07,$0c,$0f .byte $07,$0c,$0a .byte $05,$0c,$0c .byte $05,$0c,$05 .byte $1e,$06,$03 .byte $03,$0c,$04 .byte $03,$0c,$04 .byte $03,$0c,$04 .byte $02,$0c,$08 .byte $03,$0c,$04 .byte $1e,$06,$02 .byte $0a,$0c,$0e .byte $0a,$0c,$0f .byte $1e,$04,$0d .byte $19,$04,$08 .byte $15,$04,$0b .byte $15,$04,$0f .byte $15,$04,$08 .byte $0f,$04,$07 .byte $15,$04,$07 .byte $15,$04,$0c .byte $06,$0c,$07 .byte $0f,$04,$02 .byte $00,$06,$04 .byte $01,$0c,$00 .byte $0a,$04,$04 .byte $0a,$04,$08 .byte $0a,$04,$03 .byte $07,$04,$03 .byte $0a,$04,$03 .byte $00,$00,$00 ================================================ FILE: tools/cc65/atari7800/sfxlib/sfx_pulsecannon.s ================================================ .rodata .export _sfx_pulsecannon _sfx_pulsecannon: .byte $10,$10,$00 ; version, priority, frames per chunk .byte $1e,$0c,$0a ; first chunk of freq,channel,volume .byte $07,$06,$0f .byte $07,$06,$0f .byte $1e,$06,$0f .byte $17,$0c,$0b .byte $1b,$0c,$0b .byte $1e,$0c,$0f .byte $07,$06,$0f .byte $07,$06,$0f .byte $1e,$06,$08 .byte $17,$0c,$06 .byte $1b,$0c,$0f .byte $1e,$0c,$0f .byte $07,$06,$0f .byte $07,$06,$0f .byte $0a,$06,$0a .byte $17,$0c,$0a .byte $1e,$0c,$04 .byte $1e,$06,$09 .byte $1b,$04,$05 .byte $07,$06,$0f .byte $0a,$06,$09 .byte $17,$0c,$0d .byte $1b,$0c,$09 .byte $0a,$06,$05 .byte $17,$0c,$03 .byte $00,$00,$00 ================================================ FILE: tools/cc65/atari7800/sfxlib/sfx_quack.s ================================================ .rodata .export _sfx_quack _sfx_quack: .byte $10,$10,$00 ; version, priority, frames per chunk .byte $15, $06, $08 ; first chunk of freq,channel,volume .byte $15, $06, $09 .byte $15, $06, $0A .byte $14, $06, $0B .byte $14, $06, $0C .byte $14, $06, $0D .byte $14, $06, $0E .byte $13, $06, $0F .byte $13, $06, $0F .byte $13, $06, $0F .byte $13, $06, $0F .byte $13, $06, $0F .byte $00, $00, $00 ================================================ FILE: tools/cc65/atari7800/sfxlib/sfx_ribbit.s ================================================ .rodata .export _sfx_ribbit _sfx_ribbit: .byte $10,$10,$00 ; version, priority, frames per chunk .byte $0c,$06,$04 ; first chunk of freq,channel,volume .byte $19,$06,$0f .byte $19,$06,$0f .byte $19,$06,$0f .byte $0c,$06,$09 .byte $19,$06,$0f .byte $19,$06,$0f .byte $08,$06,$06 .byte $19,$06,$0f .byte $19,$06,$0f .byte $19,$06,$0f .byte $19,$06,$0f .byte $08,$06,$07 .byte $19,$06,$0f .byte $19,$06,$0d .byte $19,$06,$0f .byte $19,$06,$0c .byte $19,$06,$0d .byte $19,$06,$05 .byte $19,$06,$09 .byte $19,$06,$03 .byte $19,$06,$04 .byte $00,$00,$00 ================================================ FILE: tools/cc65/atari7800/sfxlib/sfx_roarcheep.s ================================================ .rodata .export _sfx_roarcheep _sfx_roarcheep: .byte $10,$10,$00 ; version, priority, frames per chunk .byte $0a,$06,$00 ; first chunk of freq,channel,volume .byte $0e,$0f,$01 .byte $12,$0e,$09 .byte $0a,$0e,$07 .byte $0a,$0f,$0e .byte $1b,$07,$0f .byte $1b,$06,$0c .byte $13,$0f,$0e .byte $15,$0f,$0d .byte $0f,$0e,$0f .byte $19,$0f,$0f .byte $0d,$0f,$07 .byte $0e,$0e,$08 .byte $0f,$0f,$08 .byte $0a,$01,$09 .byte $0d,$0e,$0b .byte $19,$07,$0c .byte $10,$0f,$0f .byte $16,$07,$0f .byte $10,$04,$0f .byte $17,$04,$0f .byte $15,$04,$0e .byte $1b,$07,$0f .byte $1f,$06,$0c .byte $12,$0f,$0b .byte $1a,$06,$04 .byte $1f,$01,$04 .byte $0a,$0e,$09 .byte $0f,$0e,$0b .byte $0f,$0e,$07 .byte $0f,$0e,$06 .byte $0f,$0e,$05 .byte $0f,$0e,$03 .byte $0f,$0e,$01 .byte $00,$00,$00 ================================================ FILE: tools/cc65/atari7800/sfxlib/sfx_roarroar.s ================================================ .rodata .export _sfx_roarroar _sfx_roarroar: .byte $10,$10,$00 ; version, priority, frames per chunk .byte $1d,$0f,$00 ; first chunk of freq,channel,volume .byte $07,$06,$03 .byte $13,$0f,$06 .byte $05,$06,$09 .byte $1e,$0c,$0c .byte $06,$06,$0f .byte $1e,$0c,$0f .byte $1e,$0c,$0f .byte $05,$06,$0f .byte $1e,$0c,$0f .byte $1f,$0c,$0f .byte $1f,$0c,$0f .byte $1f,$0c,$0f .byte $0f,$0f,$0f .byte $05,$06,$0f .byte $1e,$0c,$0f .byte $1a,$07,$0f .byte $05,$06,$0f .byte $17,$0c,$0f .byte $0a,$0f,$0f .byte $18,$0c,$0f .byte $18,$0c,$0f .byte $05,$06,$0f .byte $08,$06,$0f .byte $04,$06,$0f .byte $05,$06,$0c .byte $1d,$0c,$06 .byte $05,$06,$03 .byte $17,$0c,$03 .byte $17,$0c,$03 .byte $17,$0c,$03 .byte $1c,$0c,$02 .byte $1c,$0c,$02 .byte $17,$0c,$02 .byte $06,$06,$01 .byte $0c,$0f,$01 .byte $00,$00,$00 ================================================ FILE: tools/cc65/atari7800/sfxlib/sfx_rubberhammer.s ================================================ .rodata .export _sfx_rubberhammer _sfx_rubberhammer: .byte $10,$10,$00 ; version, priority, frames per chunk .byte $00,$06,$08 ; first chunk of freq,channel,volume .byte $1c,$04,$0f .byte $1e,$06,$0f .byte $1b,$04,$0f .byte $1e,$04,$0f .byte $1e,$04,$0f .byte $0c,$0c,$0f .byte $0c,$0c,$0f .byte $1e,$06,$0b .byte $0a,$0c,$08 .byte $0a,$0c,$05 .byte $1e,$04,$06 .byte $1c,$04,$05 .byte $1c,$04,$03 .byte $0e,$0c,$01 .byte $1b,$04,$01 .byte $00,$00,$00 ================================================ FILE: tools/cc65/atari7800/sfxlib/sfx_rubbermallet.s ================================================ .rodata .export _sfx_rubbermallet _sfx_rubbermallet: .byte $10,$10,$00 ; version, priority, frames per chunk .byte $1c, $07, $0f .byte $1b, $07, $0f .byte $1c, $07, $0f .byte $1a, $0c, $0f .byte $12, $0c, $0f .byte $1e, $07, $0e .byte $17, $0c, $0e .byte $1d, $07, $08 .byte $12, $0c, $08 .byte $18, $07, $09 .byte $17, $0c, $08 .byte $12, $0c, $07 .byte $1b, $0c, $04 .byte $14, $0c, $01 .byte $13, $01, $01 .byte $00,$00,$00 ================================================ FILE: tools/cc65/atari7800/sfxlib/sfx_salvolasershot.s ================================================ .rodata .export _sfx_salvolasershot _sfx_salvolasershot: .byte $10,$18,$01 ; version, priority, frames per chunk .byte $04,$08,$08 ; first chunk of freq,channel,volume data .byte $05,$08,$07 .byte $04,$08,$07 .byte $05,$08,$07 .byte $06,$08,$07 .byte $07,$08,$06 .byte $06,$08,$06 .byte $07,$08,$06 .byte $08,$08,$06 .byte $09,$08,$06 .byte $08,$08,$06 .byte $09,$08,$06 .byte $0a,$08,$04 .byte $09,$08,$04 .byte $0a,$08,$04 .byte $0b,$08,$04 .byte $0a,$08,$04 .byte $0b,$08,$04 .byte $0c,$08,$04 .byte $0b,$08,$02 .byte $0c,$08,$02 .byte $0d,$08,$02 .byte $00,$00,$00 ================================================ FILE: tools/cc65/atari7800/sfxlib/sfx_simplebuzz.s ================================================ .rodata .export _sfx_simplebuzz _sfx_simplebuzz: .byte $10,$10,$00 ; version, priority, frames per chunk .byte $1e,$06,$00 ; first chunk of freq,channel,volume .byte $0a,$06,$01 .byte $1e,$06,$02 .byte $1e,$06,$04 .byte $1e,$06,$05 .byte $0f,$06,$0f .byte $0f,$06,$0f .byte $0f,$06,$0f .byte $0f,$06,$0d .byte $0f,$06,$0f .byte $0f,$06,$0f .byte $0f,$06,$0f .byte $0f,$06,$0f .byte $07,$06,$08 .byte $07,$06,$06 .byte $0f,$06,$06 .byte $0f,$06,$04 .byte $0f,$06,$02 .byte $00,$00,$00 ================================================ FILE: tools/cc65/atari7800/sfxlib/sfx_snore.s ================================================ .rodata .export _sfx_snore _sfx_snore: .byte $10,$10,$00 ; version, priority, frames per chunk .byte $0c,$0c,$01 ; first chunk of freq,channel,volume .byte $17,$0c,$03 .byte $03,$06,$06 .byte $0a,$06,$04 .byte $0a,$06,$04 .byte $07,$06,$03 .byte $1e,$06,$0c .byte $0f,$06,$0f .byte $0f,$06,$0f .byte $0a,$06,$0f .byte $0f,$06,$0f .byte $0d,$04,$0f .byte $0f,$06,$0f .byte $0f,$06,$0f .byte $0a,$06,$0e .byte $00,$06,$0c .byte $0d,$04,$0d .byte $0a,$06,$04 .byte $0f,$06,$03 .byte $0a,$06,$04 .byte $1e,$06,$01 .byte $0a,$06,$01 .byte $00,$00,$00 ================================================ FILE: tools/cc65/atari7800/sfxlib/sfx_spaceinvshoot.s ================================================ .rodata .export _sfx_spaceinvshoot _sfx_spaceinvshoot: .byte $10,$10,$03 ; version, priority, frames per chunk .byte $18,$08,$08 ; first chunk of freq,channel,volume data .byte $19,$08,$05 .byte $19,$08,$05 .byte $19,$08,$05 .byte $19,$08,$05 .byte $1C,$08,$02 .byte $1C,$08,$02 .byte $1C,$08,$02 .byte $1C,$08,$02 .byte $1C,$08,$02 .byte $1E,$08,$01 .byte $1E,$08,$01 .byte $1E,$08,$01 .byte $1E,$08,$01 .byte $1E,$08,$01 .byte $00,$00,$00 ================================================ FILE: tools/cc65/atari7800/sfxlib/sfx_spawn.s ================================================ .rodata .export _sfx_spawn _sfx_spawn: .byte $10,$10,$01 ; version, priority, frames per chunk .byte $16, $04, $0e .byte $15, $04, $0e .byte $15, $04, $0e .byte $12, $04, $0e .byte $0e, $04, $0e .byte $0c, $04, $0e .byte $0e, $04, $0e .byte $12, $04, $0e .byte $15, $04, $0a .byte $15, $04, $08 .byte $00,$00,$00 ================================================ FILE: tools/cc65/atari7800/sfxlib/sfx_spring.s ================================================ .rodata .export _sfx_spring _sfx_spring: .byte $10,$10,$00 ; version, priority, frames per chunk .byte $0d,$0c,$0f ; first chunk of freq,channel,volume .byte $0d,$0c,$0d .byte $10,$0c,$0b .byte $10,$0c,$0f .byte $1e,$0c,$06 .byte $0e,$0c,$05 .byte $0e,$0c,$0c .byte $12,$0c,$0f .byte $12,$0c,$0d .byte $10,$0c,$0f .byte $0e,$0c,$0f .byte $0d,$0c,$0f .byte $12,$0c,$0a .byte $07,$06,$0b .byte $1e,$0c,$07 .byte $10,$0c,$0f .byte $10,$0c,$0e .byte $0e,$0c,$0d .byte $17,$0c,$07 .byte $07,$06,$08 .byte $1e,$0c,$07 .byte $10,$0c,$08 .byte $0e,$0c,$0a .byte $0d,$0c,$0d .byte $0d,$0c,$06 .byte $1e,$0c,$05 .byte $1c,$04,$03 .byte $0d,$0c,$08 .byte $0c,$0c,$0b .byte $0c,$0c,$06 .byte $0e,$0c,$08 .byte $1b,$0c,$04 .byte $0c,$0c,$0a .byte $0c,$0c,$03 .byte $0a,$0c,$07 .byte $0d,$0c,$04 .byte $0d,$0c,$07 .byte $0b,$0c,$05 .byte $0a,$0c,$05 .byte $1e,$04,$03 .byte $00,$00,$00 ================================================ FILE: tools/cc65/atari7800/sfxlib/sfx_squeek.s ================================================ .rodata .export _sfx_squeek _sfx_squeek: .byte $10,$10,$00 ; version, priority, frames per chunk .byte $06,$0c,$0f ; first chunk of freq,channel,volume .byte $15,$04,$0f .byte $06,$0c,$0f .byte $06,$0c,$0f .byte $0a,$04,$0f .byte $0a,$04,$0f .byte $0c,$04,$0f .byte $0d,$04,$0f .byte $03,$0c,$0f .byte $06,$0c,$0d .byte $03,$0c,$07 .byte $0d,$04,$06 .byte $06,$0c,$04 .byte $15,$04,$08 .byte $06,$0c,$03 .byte $06,$0c,$05 .byte $15,$04,$04 .byte $15,$04,$04 .byte $06,$0c,$04 .byte $06,$0c,$03 .byte $03,$0c,$01 .byte $15,$04,$02 .byte $06,$0c,$03 .byte $06,$0c,$03 .byte $0c,$04,$00 .byte $15,$04,$02 .byte $15,$04,$01 .byte $00,$00,$00 ================================================ FILE: tools/cc65/atari7800/sfxlib/sfx_strum.s ================================================ .rodata .export _sfx_strum _sfx_strum: .byte $10,$10,$00 ; version, priority, frames per chunk .byte $0c,$0c,$09 ; first chunk of freq,channel,volume .byte $0c,$0c,$0f .byte $0c,$0c,$0f .byte $0c,$0c,$0f .byte $0c,$0c,$0f .byte $1e,$04,$0f .byte $1e,$04,$0e .byte $07,$0c,$0f .byte $07,$0c,$0f .byte $07,$0c,$0b .byte $1e,$04,$0b .byte $07,$0c,$0c .byte $0c,$0c,$09 .byte $07,$0c,$07 .byte $07,$0c,$06 .byte $07,$0c,$05 .byte $07,$0c,$04 .byte $07,$0c,$04 .byte $07,$0c,$03 .byte $07,$0c,$03 .byte $07,$0c,$02 .byte $07,$0c,$02 .byte $07,$0c,$01 .byte $07,$0c,$01 .byte $00,$00,$00 ================================================ FILE: tools/cc65/atari7800/sfxlib/sfx_teleported.s ================================================ .rodata .export _sfx_teleported _sfx_teleported: .byte $10,$10,$00 ; version, priority, frames per chunk .byte $1c,$04,$0f ; first chunk of freq,channel,volume .byte $00,$06,$0f .byte $0c,$04,$0f .byte $03,$0c,$0f .byte $0a,$04,$0f .byte $0a,$04,$0f .byte $04,$0c,$0f .byte $10,$04,$0f .byte $07,$04,$0f .byte $06,$0c,$0f .byte $06,$0c,$0f .byte $05,$0c,$0f .byte $0f,$04,$0f .byte $01,$0c,$0d .byte $15,$04,$0f .byte $0d,$04,$0d .byte $03,$0c,$0f .byte $03,$0c,$0d .byte $03,$0c,$0d .byte $0d,$04,$0f .byte $04,$0c,$0e .byte $10,$04,$0f .byte $10,$04,$0f .byte $05,$0c,$0a .byte $15,$04,$0f .byte $12,$04,$0f .byte $12,$04,$0f .byte $05,$0c,$0d .byte $16,$04,$0b .byte $16,$04,$0b .byte $0d,$04,$0b .byte $12,$04,$0a .byte $10,$04,$07 .byte $0d,$04,$09 .byte $03,$0c,$0a .byte $0d,$04,$0c .byte $0d,$04,$0a .byte $05,$0c,$0a .byte $0f,$04,$09 .byte $12,$04,$09 .byte $00,$06,$09 .byte $10,$04,$0c .byte $10,$04,$0b .byte $15,$04,$06 .byte $15,$04,$08 .byte $1c,$04,$05 .byte $03,$0c,$05 .byte $03,$0c,$05 .byte $0a,$04,$04 .byte $03,$0c,$04 .byte $0d,$04,$06 .byte $0d,$04,$06 .byte $02,$0c,$03 .byte $07,$04,$04 .byte $06,$0c,$04 .byte $12,$04,$05 .byte $12,$04,$03 .byte $01,$0c,$02 .byte $01,$0c,$03 .byte $0d,$04,$04 .byte $0d,$04,$05 .byte $07,$04,$01 .byte $02,$0c,$01 .byte $0a,$04,$01 .byte $03,$0c,$02 .byte $03,$0c,$03 .byte $0d,$04,$02 .byte $02,$0c,$00 .byte $03,$0c,$01 .byte $0a,$04,$01 .byte $07,$04,$01 .byte $02,$0c,$01 .byte $07,$04,$01 .byte $01,$0c,$01 .byte $0d,$04,$01 .byte $0d,$04,$01 .byte $00,$00,$00 ================================================ FILE: tools/cc65/atari7800/sfxlib/sfx_tom.s ================================================ .rodata .export _sfx_tom _sfx_tom: .byte $10,$10,$00 ; version, priority, frames per chunk .byte $19,$06,$04 ; first chunk of freq,channel,volume .byte $0b,$0e,$04 .byte $1a,$06,$08 .byte $18,$0f,$0f .byte $15,$0f,$0f .byte $1e,$0c,$0f .byte $1e,$0c,$0f .byte $1e,$0c,$0f .byte $10,$0f,$0f .byte $12,$0f,$0f .byte $1e,$0c,$0c .byte $1e,$0c,$08 .byte $1e,$0c,$08 .byte $1e,$0c,$04 .byte $1e,$0c,$04 .byte $06,$06,$04 .byte $00,$00,$00 ================================================ FILE: tools/cc65/atari7800/sfxlib/sfx_transporter.s ================================================ .rodata .export _sfx_transporter _sfx_transporter: .byte $10,$10,$00 ; version, priority, frames per chunk .byte $00,$04,$00 ; first chunk of freq,channel,volume .byte $09,$04,$02 .byte $02,$0c,$01 .byte $02,$0c,$04 .byte $02,$0c,$02 .byte $06,$04,$0a .byte $06,$04,$04 .byte $01,$0c,$03 .byte $04,$04,$03 .byte $04,$04,$06 .byte $0a,$04,$04 .byte $03,$04,$04 .byte $01,$0c,$05 .byte $06,$04,$08 .byte $01,$0c,$04 .byte $06,$04,$02 .byte $04,$04,$04 .byte $04,$04,$09 .byte $0a,$04,$05 .byte $03,$04,$07 .byte $06,$04,$06 .byte $06,$04,$07 .byte $06,$04,$03 .byte $04,$04,$08 .byte $03,$04,$0a .byte $03,$04,$06 .byte $00,$0c,$06 .byte $0a,$04,$05 .byte $00,$0c,$05 .byte $02,$0c,$0f .byte $07,$04,$05 .byte $09,$04,$07 .byte $07,$04,$0a .byte $0d,$04,$04 .byte $10,$04,$0c .byte $02,$0c,$0a .byte $07,$04,$02 .byte $00,$06,$05 .byte $02,$0c,$0b .byte $0c,$04,$06 .byte $0c,$04,$03 .byte $00,$0c,$01 .byte $06,$04,$04 .byte $07,$04,$02 .byte $06,$04,$01 .byte $06,$04,$02 .byte $04,$0c,$01 .byte $07,$04,$03 .byte $01,$0c,$01 .byte $06,$04,$01 .byte $06,$04,$01 .byte $07,$04,$01 .byte $07,$04,$00 .byte $05,$0c,$00 .byte $07,$04,$00 .byte $0c,$04,$00 .byte $0f,$06,$00 .byte $00,$04,$00 .byte $00,$04,$00 .byte $00,$04,$00 .byte $00,$04,$00 .byte $00,$04,$00 .byte $00,$04,$00 .byte $00,$00,$00 ================================================ FILE: tools/cc65/atari7800/sfxlib/sfx_twinkle.s ================================================ .rodata .export _sfx_twinkle _sfx_twinkle: .byte $10,$10,$00 ; version, priority, frames per chunk .byte $00,$04,$00 ; first chunk of freq,channel,volume .byte $02,$0c,$03 .byte $0d,$04,$0e .byte $10,$04,$0d .byte $1b,$04,$08 .byte $04,$0c,$0d .byte $0a,$04,$0a .byte $09,$04,$0f .byte $0c,$04,$0b .byte $10,$04,$0d .byte $02,$0c,$02 .byte $1b,$04,$07 .byte $1b,$04,$06 .byte $0c,$04,$08 .byte $02,$0c,$08 .byte $0a,$04,$0b .byte $00,$06,$09 .byte $16,$04,$07 .byte $1b,$04,$0b .byte $18,$04,$08 .byte $03,$0c,$05 .byte $09,$04,$0b .byte $09,$04,$0a .byte $00,$06,$07 .byte $16,$04,$0c .byte $1b,$04,$0a .byte $18,$04,$0b .byte $04,$0c,$07 .byte $09,$04,$08 .byte $0c,$04,$05 .byte $05,$0c,$0f .byte $06,$0c,$0d .byte $0b,$0c,$08 .byte $12,$04,$0b .byte $0d,$04,$0c .byte $09,$04,$0b .byte $0c,$04,$07 .byte $05,$0c,$0b .byte $06,$0c,$08 .byte $0b,$0c,$04 .byte $12,$04,$06 .byte $0c,$04,$05 .byte $09,$04,$02 .byte $0c,$04,$04 .byte $12,$04,$02 .byte $18,$04,$02 .byte $1e,$04,$01 .byte $12,$04,$01 .byte $00,$00,$00 ================================================ FILE: tools/cc65/atari7800/sfxlib/sfx_uhoh.s ================================================ .rodata .export _sfx_uhoh _sfx_uhoh: .byte $10,$10,$00 ; version, priority, frames per chunk .byte $07,$06,$01 ; first chunk of freq,channel,volume .byte $1e,$0c,$03 .byte $1e,$0c,$04 .byte $17,$0c,$04 .byte $0a,$06,$06 .byte $0a,$0c,$0a .byte $07,$06,$0f .byte $1e,$04,$0f .byte $19,$04,$0f .byte $19,$04,$0f .byte $1b,$04,$07 .byte $18,$04,$07 .byte $18,$04,$04 .byte $07,$0c,$02 .byte $16,$04,$00 .byte $16,$04,$00 .byte $16,$04,$00 .byte $0f,$06,$00 .byte $1e,$06,$00 .byte $1e,$06,$00 .byte $1e,$06,$00 .byte $19,$04,$00 .byte $1e,$04,$01 .byte $1e,$04,$0a .byte $1c,$04,$0f .byte $1c,$04,$0f .byte $1e,$04,$0f .byte $1b,$0c,$0f .byte $0d,$0c,$0f .byte $0d,$0c,$0e .byte $0e,$0c,$0f .byte $0e,$0c,$0f .byte $0e,$0c,$0f .byte $0e,$0c,$0f .byte $0e,$0c,$0f .byte $0e,$0c,$0d .byte $1b,$0c,$0a .byte $04,$0c,$0a .byte $1b,$0c,$0b .byte $0e,$0c,$0a .byte $0e,$0c,$0a .byte $1b,$0c,$0a .byte $0d,$0c,$0a .byte $0d,$0c,$06 .byte $0e,$0c,$04 .byte $0e,$0c,$04 .byte $0e,$0c,$02 .byte $00,$00,$00 ================================================ FILE: tools/cc65/atari7800/sfxlib/sfx_uncovered.s ================================================ .rodata .export _sfx_uncovered _sfx_uncovered: .byte $10,$10,$00 ; version, priority, frames per chunk .byte $1e,$0c,$02 ; first chunk of freq,channel,volume .byte $1b,$0c,$06 .byte $1b,$0c,$0c .byte $1b,$0c,$0e .byte $1b,$0c,$0c .byte $0c,$0c,$04 .byte $17,$0c,$0f .byte $17,$0c,$05 .byte $1b,$0c,$07 .byte $17,$0c,$05 .byte $17,$0c,$0f .byte $17,$0c,$0f .byte $17,$0c,$0f .byte $03,$06,$0f .byte $03,$06,$0f .byte $1e,$06,$0a .byte $17,$0c,$0c .byte $10,$0c,$0f .byte $10,$0c,$0f .byte $10,$0c,$07 .byte $10,$0c,$03 .byte $17,$0c,$03 .byte $12,$0c,$07 .byte $03,$06,$04 .byte $03,$06,$02 .byte $0e,$0c,$01 .byte $12,$0c,$02 .byte $12,$0c,$03 .byte $03,$06,$01 .byte $03,$06,$01 .byte $10,$0c,$01 .byte $12,$0c,$01 .byte $10,$0c,$01 .byte $10,$0c,$01 .byte $00,$00,$00 ================================================ FILE: tools/cc65/atari7800/sfxlib/sfx_warcry.s ================================================ .rodata .export _sfx_warcry _sfx_warcry: .byte $10,$10,$00 ; version, priority, frames per chunk .byte $0f,$06,$04 ; first chunk of freq,channel,volume .byte $0a,$0c,$03 .byte $1c,$04,$0f .byte $1e,$04,$0f .byte $1e,$04,$0f .byte $1c,$04,$0f .byte $1b,$04,$0f .byte $02,$0c,$0b .byte $0c,$04,$08 .byte $18,$04,$0f .byte $0c,$04,$0f .byte $02,$0c,$0f .byte $18,$04,$0f .byte $18,$04,$0f .byte $0c,$04,$0f .byte $07,$04,$0f .byte $0c,$04,$0c .byte $02,$0c,$0f .byte $18,$04,$0f .byte $02,$0c,$0f .byte $0c,$04,$0f .byte $0c,$04,$09 .byte $19,$04,$0f .byte $02,$0c,$0f .byte $1b,$04,$0f .byte $1b,$04,$0f .byte $02,$0c,$0f .byte $1c,$04,$0f .byte $0d,$04,$0b .byte $09,$04,$0f .byte $04,$0c,$08 .byte $1e,$04,$0e .byte $1e,$04,$0f .byte $1e,$04,$0b .byte $1e,$04,$0a .byte $1e,$04,$08 .byte $1e,$04,$07 .byte $1e,$04,$06 .byte $1f,$04,$04 .byte $1f,$04,$03 .byte $1f,$04,$02 .byte $1f,$04,$01 .byte $00,$00,$00 ================================================ FILE: tools/cc65/atari7800/sfxlib/sfx_whoa.s ================================================ .rodata .export _sfx_whoa _sfx_whoa: .byte $10,$10,$00 ; version, priority, frames per chunk .byte $10,$0c,$06 ; first chunk of freq,channel,volume .byte $0e,$0c,$07 .byte $0c,$0c,$0a .byte $0b,$0c,$0e .byte $1e,$04,$0f .byte $04,$0c,$0c .byte $1b,$04,$0e .byte $0d,$04,$09 .byte $0d,$04,$0b .byte $19,$04,$08 .byte $0c,$04,$0b .byte $18,$04,$05 .byte $0c,$04,$0e .byte $0c,$04,$09 .byte $07,$0c,$0a .byte $03,$0c,$08 .byte $16,$04,$0d .byte $16,$04,$0a .byte $0a,$04,$0b .byte $16,$04,$0f .byte $16,$04,$0c .byte $16,$04,$0c .byte $07,$0c,$0d .byte $07,$0c,$0f .byte $07,$0c,$09 .byte $0c,$04,$0a .byte $19,$04,$0e .byte $1b,$04,$0b .byte $1c,$04,$0b .byte $1e,$04,$0f .byte $0a,$0c,$08 .byte $0c,$0c,$09 .byte $0d,$0c,$0f .byte $0d,$0c,$09 .byte $10,$0c,$0d .byte $12,$0c,$0f .byte $03,$06,$0c .byte $03,$06,$04 .byte $1e,$06,$02 .byte $17,$0c,$01 .byte $1e,$0c,$02 .byte $1b,$0c,$01 .byte $00,$00,$00 ================================================ FILE: tools/cc65/atari7800/sfxlib/sfx_wilhelm.s ================================================ .rodata .export _sfx_wilhelm _sfx_wilhelm: .byte $10,$10,$00 ; version, priority, frames per chunk .byte $1d,$07,$02 ; first chunk of freq,channel,volume .byte $05,$06,$0c .byte $07,$07,$0f .byte $17,$06,$0f .byte $08,$07,$0f .byte $07,$06,$0f .byte $00,$06,$0f .byte $02,$07,$0f .byte $06,$07,$0f .byte $0b,$04,$0f .byte $17,$06,$0f .byte $0e,$01,$0f .byte $07,$07,$0f .byte $0d,$06,$0f .byte $0c,$07,$0f .byte $07,$07,$0f .byte $03,$07,$0f .byte $0a,$04,$0f .byte $0a,$01,$0f .byte $05,$07,$0f .byte $0a,$04,$0f .byte $0c,$06,$0f .byte $0a,$04,$0f .byte $0a,$04,$0f .byte $09,$01,$0f .byte $0a,$04,$0f .byte $1b,$06,$0f .byte $0a,$04,$0f .byte $0a,$01,$0f .byte $0a,$04,$0f .byte $0a,$04,$0f .byte $13,$0f,$0f .byte $00,$06,$0f .byte $0a,$04,$0f .byte $10,$01,$0f .byte $13,$04,$0f .byte $08,$07,$0f .byte $09,$01,$0f .byte $18,$01,$0f .byte $0a,$04,$0f .byte $15,$04,$0f .byte $13,$04,$0f .byte $15,$04,$0f .byte $15,$04,$0f .byte $15,$04,$0f .byte $15,$04,$0f .byte $16,$04,$0f .byte $17,$04,$0f .byte $0e,$01,$0f .byte $19,$04,$09 .byte $0a,$07,$07 .byte $15,$04,$07 .byte $00,$06,$04 .byte $13,$04,$09 .byte $12,$04,$0c .byte $12,$04,$04 .byte $16,$04,$04 .byte $08,$07,$04 .byte $07,$07,$04 .byte $08,$07,$04 .byte $1b,$0f,$02 .byte $13,$04,$02 .byte $09,$07,$02 .byte $0b,$07,$02 .byte $00,$00,$00 ================================================ FILE: tools/cc65/atari7800/sfxlib/sfx_wolfwhistle.s ================================================ .rodata .export _sfx_wolfwhistle _sfx_wolfwhistle: .byte $10,$10,$00 ; version, priority, frames per chunk .byte $12,$04,$02 ; first chunk of freq,channel,volume .byte $12,$04,$04 .byte $12,$04,$03 .byte $12,$04,$05 .byte $05,$0c,$06 .byte $10,$04,$07 .byte $0f,$04,$05 .byte $0f,$04,$06 .byte $0d,$04,$07 .byte $0c,$04,$06 .byte $03,$0c,$08 .byte $0a,$04,$06 .byte $09,$04,$09 .byte $09,$04,$09 .byte $02,$0c,$09 .byte $02,$0c,$0c .byte $02,$0c,$08 .byte $02,$0c,$0d .byte $07,$04,$0a .byte $07,$04,$0a .byte $07,$04,$0b .byte $07,$04,$0f .byte $07,$04,$0a .byte $06,$04,$0f .byte $06,$04,$08 .byte $06,$04,$05 .byte $06,$04,$04 .byte $06,$04,$04 .byte $06,$04,$01 .byte $1e,$06,$00 .byte $1e,$06,$00 .byte $1e,$06,$00 .byte $1e,$06,$00 .byte $1e,$06,$00 .byte $1e,$06,$00 .byte $1c,$04,$0b .byte $0b,$0c,$0f .byte $0d,$0c,$0f .byte $0d,$0c,$04 .byte $0c,$0c,$0f .byte $0a,$0c,$0f .byte $0a,$0c,$0f .byte $1e,$04,$0f .byte $1b,$04,$0f .byte $16,$04,$0f .byte $13,$04,$0f .byte $10,$04,$0e .byte $0c,$04,$0b .byte $0a,$04,$09 .byte $0a,$04,$09 .byte $02,$0c,$08 .byte $02,$0c,$0a .byte $02,$0c,$0a .byte $02,$0c,$08 .byte $02,$0c,$01 .byte $02,$0c,$07 .byte $02,$0c,$07 .byte $02,$0c,$08 .byte $02,$0c,$04 .byte $09,$04,$03 .byte $03,$0c,$03 .byte $04,$0c,$03 .byte $13,$04,$02 .byte $18,$04,$02 .byte $0b,$0c,$02 .byte $1b,$0c,$02 .byte $0a,$06,$02 .byte $00,$00,$00 ================================================ FILE: tools/cc65/atari7800/sfxlib/sfx_yahoo.s ================================================ .rodata .export _sfx_yahoo _sfx_yahoo: .byte $10,$10,$00 ; version, priority, frames per chunk .byte $01,$0c,$02 ; first chunk of freq,channel,volume .byte $18,$04,$08 .byte $07,$0c,$0f .byte $16,$04,$0f .byte $03,$0c,$05 .byte $0a,$04,$06 .byte $15,$04,$08 .byte $18,$04,$04 .byte $18,$04,$04 .byte $1c,$04,$04 .byte $1c,$04,$04 .byte $1c,$04,$02 .byte $0b,$0c,$02 .byte $19,$04,$01 .byte $19,$04,$00 .byte $1c,$04,$01 .byte $1b,$04,$03 .byte $19,$04,$06 .byte $18,$04,$04 .byte $1e,$04,$06 .byte $19,$04,$0f .byte $18,$04,$0f .byte $18,$04,$0f .byte $18,$04,$0b .byte $18,$04,$0f .byte $18,$04,$0f .byte $18,$04,$0f .byte $18,$04,$05 .byte $18,$04,$08 .byte $19,$04,$0f .byte $1b,$04,$08 .byte $1b,$04,$06 .byte $1c,$04,$0f .byte $1c,$04,$0f .byte $1e,$04,$08 .byte $1e,$04,$0e .byte $1e,$04,$0b .byte $0a,$0c,$08 .byte $0a,$0c,$0f .byte $0b,$0c,$0f .byte $0b,$0c,$0e .byte $0b,$0c,$09 .byte $0c,$0c,$06 .byte $0c,$0c,$02 .byte $0d,$0c,$03 .byte $0d,$0c,$03 .byte $0d,$0c,$01 .byte $0e,$0c,$00 .byte $17,$0c,$00 .byte $00,$00,$00 ================================================ FILE: tools/cc65/atari7800/sfxlib/sfx_yeah.s ================================================ .rodata .export _sfx_yeah _sfx_yeah: .byte $10,$10,$00 ; version, priority, frames per chunk .byte $15, $0c, $03 ; first chunk of freq,channel,volume .byte $12, $0c, $03 .byte $14, $0c, $03 .byte $1a, $07, $04 .byte $02, $06, $0a .byte $1c, $04, $0e .byte $18, $04, $0e .byte $17, $04, $0f .byte $13, $06, $0f .byte $0d, $06, $0e .byte $0e, $07, $0e .byte $0f, $0e, $0d .byte $12, $06, $0b .byte $11, $07, $09 .byte $0e, $07, $07 .byte $09, $07, $02 .byte $02, $06, $03 .byte $16, $0c, $03 .byte $17, $0c, $03 .byte $15, $0c, $02 .byte $17, $0c, $02 .byte $18, $0c, $01 .byte $18, $0c, $01 .byte $00,$00,$00 ================================================ FILE: tools/cc65/bbc/INSTALL/bbcim-1.2/Makefile ================================================ SHELL=/bin/sh # bbcim (Acorn BBC computer disk image manipulation) # # This file is public domain, by W.H.Scholten 1996 - 2009 # INSTALL=$(HOME) all: libbbcim bbcim bbcim: cd prog; $(MAKE) all libbbcim: cd lib; $(MAKE) all postscript: doc/bbcim.ps libtest: cd test; $(MAKE) all clean: rm -f *~ doc/*~ cd lib; $(MAKE) clean cd prog; $(MAKE) clean rm -f doc/bbcim.ps rm -f core *.core cd test; $(MAKE) clean install.lib: cd lib; $(MAKE) INSTALL=$(HOME) install.lib install: all cd prog; $(MAKE) INSTALL=$(HOME) install mkdir -p $(INSTALL)/man/man1/ cp -fp doc/bbcim.1 $(INSTALL)/man/man1/ uninstall: cd prog; $(MAKE) INSTALL=$(HOME) uninstall rm -f $(INSTALL)/man/man1/bbcim.1 # // Compile man pages to postscript .SUFFIXES: .1 .2 .3 .4 .5 .6 .7 .8 .9 .ps .1.ps: groff -t -e -mandoc -Tps $< > $@ # EOF ================================================ FILE: tools/cc65/bbc/INSTALL/bbcim-1.2/READ_ME ================================================ bbcim (BBC computer file conversion utility) (C) 1995-2016 W.H.Scholten ----------------------------------------------------------------------- This is version 1.2 bbcim is a file conversion utility to help in transferring files and for use with emulators, like creating disk images (Acorn DFS and other formats), adding files to them, extracting files from them, minimise the size of these images etc. For more information, see the manual page: 'man bbcim'. The manual page is also included in the help function. Start with 'bbcim -h' and then e.g. 'bbcim -help -c' will give more information on the catalogue option -c. Compiling and installing bbcim: ------------------------------- You need an ansi C-compiler. I used: pcc 1.1.0, clang 3.4.1 and gcc 4.8.5. Set the environment variable CC to the compiler you want to use, e.g. export CC=pcc Edit prog/_config.h and lib/_config.h before compiling, then: 'make' compiles bbcim, linked against a static library. 'make clean' removes objects, libraries and executables. 'make install' installs bbcim in $(HOME)/bin/, and the manpage in $(HOME)/man/. 'make uninstall' removes bbcim from $(HOME)/bin/, and the manpage from $(HOME)/man/. If you want to make/install shared libraries, go to the directory lib: 'make shared' compiles the shared library. 'make install.lib' installs the shared library libbbcim.so.1.0 and the header file bbcim.h 'make uninstall.lib' removes the library and header file. ================================================ FILE: tools/cc65/bbc/INSTALL/bbcim-1.2/doc/ARCHIVE_FORMAT-0.83 ================================================ Standard formats for BBC files and disk images v 0.83 ----------------------------------------------------- [ N.B. This specification was originally included with bbcim v0.83 ] Note: optional arguments are in square brackets, '|' denotes a choice between arguments. THE ARCHIVE FILE FORMAT: ------------------------ (i.e. the standard format for/of files in the BBC micro archive of software on my website) [ N.B. At the time of writing this down (1997), my BBC archive of software was almost all the software for the BBC micro available on the internet (Robert Schmidt's archive was mostly a mirror of what I put up), and I wanted to get rid of diskimages so you could pick and choose software to put into a disk yourself. So, 'the archive' was my archive of BBC software. ] Complementing a bare BBC file 'ELITE' is the attribute file 'ELITE.inf' , which is a text file containing '$.ELITE FF0E00 FF8023 Locked CRC=XXXX NEXT ELITEdata'. ELITE is just the name used on the host system (as BBC files often contain characters that other filesystems can't handle such as '/') and $.ELITE in the attribute file is the real name. In general we have: - A BBC file, 'myprog' - A text file 'myprog.inf' which contains: {TAPE | } [] ['Locked'] CRC= [NEXT ] Arguments are separated by spaces. Cassette names can be used in 2 ways; 1. translated to $. (i.e. max 12 chars) 2. TAPE Note that for complete accuracy, TAPE is preferable as it identifies a file as a TAPE file, where 'Locked' has a different meaning to that for disks, and NEXT can be used (see below). Programs handling archive format files should be aware of 12 character filenames from tapes ($.tape-name) and should rename them if necessary. NEXT gives the next expected filename on the tape, which may be used for CHAIN"" or *RUN as used on cassette systems, or to put the programs back on a tape in the correct order, so a file containing TAPE should contain NEXT too (unless it's the last file). Note that used for NEXT must be a host filename, as several files can have the same name on tape! and are hexadecimal strings (without a language dependant identifier), e.g. FFFF8023. is also a hexadecimal string and may be included after ) but is unnecessary. The file attribute 'Locked' may be abbreviated to 'L'. After 'CRC=' follows the bare file's CRC, as a hexadecimal string of up to four digits. The CRC is calculated with the algorithm from the BBC user guide p. 399 (The same algorithm as used in the cassette and rom filing system). It is included for various reasons (to check file conversion software, serial- or disk- file transfer to/from a BBC, etc.). See the appendix for a sample implementation. Host filenames: It is recommended that files only use ASCII and none of the following characters (due to the way they are used in various operating systems): \ / : * ? " < > | . ` ' THE ARCHIVE DISK FORMAT: ------------------------ Given a BBC disk image, e.g. 'games', we have an accompanying file ('games.dsk'), which contains the following information: ' T S B' e.g. DFS SS 40T 10S 256B. After this line, any information about the disk image can be placed. This should be ignored by utilities that only need the disk format. => Suggestions of useful standard information to put there? If there's no '.dsk' file, utilities should consider the disk image to be 'DFS SS 80T 10S 256B', i.e. standard Acorn DFS. Appendix: The CRC algorithm, example C code: -------------------------------------------- long bbcim_data_crc(void *data, int length) { int i; unsigned char *d = (unsigned char *) data; unsigned int crc; crc = 0; for (i=0; is, info file is now added by default, b=bare. Changes in 0.93-beta (9-3-97): + code cleaned up with explicit type conversions + added code to replace characters in filenames (usually not needed in linux); e.g. '/' gives problems. + Help in english Changes in 0.94 (16-3-97): c w62 conversion now included in bbcim. Changes in 0.95 (30-6-97 - 4-7-97): c w62 conversion to Acorn DFS: if there are less than 32 files, only one disk image is made. c disknames without a . didn't extract with -ed (as the dir name was equal to the disk image name). Added a rename. c Cleaned up 'mkdir' selection. You now have 3 choices. + Config additions: bbcim now compiles on other OS'es without changes. c bugfix: -s# works again (no idea when it got broken). Changes in 0.96 (31-7-1997 & 1-8-1997): c char's 1-31 are replaced by _ in the check for bad char's. + ADFS catalogue & file extraction. + ADFS interleaved disk image into usable linear disk image conversion. c option decoding separated from functions. + set bootoption (unfinished). + identify disk type (unfinished). + compilable as a separate library. Changes in 0.97-a28 (ca. 25-10-1997): c uniform format of functions for use with any disk image type. c files and functions renamed for the lib. c ADFS code debugged. + standard disk format: file + file.dsk. Changes in 0.98 (dd 1999, 2000, 2001; Not released): c proper library organisation. c removed need for gmake. c cleaned up the code. c cleaned up the man page. Changes in 0.99 (2001, 2003; Not released): - removed xbeeb support. c large parts rewritten, e.g. for use of -c/-e/-a/-d with double sided disk images. c disk attributes are set with -type/-sides/-tracks/-sectors/-bytes. c side of double sided image is selected with -side. c no more considerations for short host file names or 16 bit compilers. c path lengths increased to 256. Changes in 0.100 (2003; Not released): c DFS: extract doesn't produce a catalogue file. c Various code sections tested. Changes in 0.101 (6 jun 2003; yes that's nearly 6 YEARS after 0.97-a28!): c ADFS cat/extract fixed for double sided (interleaved) images. Changes in 0.102 (10 jun 2003): + -e and -s: suboption '@' implemented. + disk attributes created for interleave/split/ddos->dfs/w62->dfs. c updated various documentation and Makefiles. c ADFS: extract doesn't produce a catalogue file. + more error messages, esp. for as yet unsupported actions (e.g. -c on a W62/DDOS format disk). c renamed the options ddos2dfs / w62dfs / ds2ss to ddos_dfs / w62_dfs / adfs_ss. + -help