diff --git a/games/lemm/Makefile b/games/lemm/Makefile index 9feadbbe..d25d84c2 100644 --- a/games/lemm/Makefile +++ b/games/lemm/Makefile @@ -40,9 +40,17 @@ qboot_sector.o: qboot_sector.s qboot_stage2.s QLOAD: qload.o ld65 -o QLOAD qload.o -C $(LINKER_SCRIPTS)/apple2_1200.inc -qload.o: qload.s qboot.inc +qload.o: qload.s qboot.inc \ + audio.s decompress_fast_v2.s gr_offsets.s ca65 -o qload.o qload.s -l qload.lst +### + +qload.inc: generate_common QLOAD + ./generate_common -a 0x1200 -s play_audio qload.lst > qload.inc + ./generate_common -a 0x1200 -s decompress_lzsa2_fast qload.lst >> qload.inc + ./generate_common -a 0x1200 -s getsrc_smc qload.lst >> qload.inc + ### @@ -64,7 +72,7 @@ lemm_test.o: lemm_test.s zp.inc hardware.inc \ LEMM: lemm.o ld65 -o LEMM lemm.o -C ../../linker_scripts/apple2_6000.inc -lemm.o: lemm.s zp.inc hardware.inc \ +lemm.o: lemm.s zp.inc hardware.inc qload.inc \ graphics/graphics_test.inc graphics/sprites.inc \ intro_level1.s update_time.s hgr_sprite.s draw_flames.s \ draw_door.s move_lemming.s draw_lemming.s \ @@ -75,6 +83,15 @@ lemm.o: lemm.s zp.inc hardware.inc \ ca65 -o lemm.o lemm.s -l lemm.lst +#### + +generate_common: generate_common.o + $(CC) $(LFLAGS) -o generate_common generate_common.o + +generate_common.o: generate_common.c + $(CC) $(CFLAGS) -c generate_common.c + + #### graphics/graphics_test.inc: diff --git a/games/lemm/NOTES b/games/lemm/NOTES new file mode 100644 index 00000000..bef4c3a4 --- /dev/null +++ b/games/lemm/NOTES @@ -0,0 +1 @@ +LEMM: 23782 (original v0.01) diff --git a/games/lemm/TODO b/games/lemm/TODO index 7426b53b..b5046a33 100644 --- a/games/lemm/TODO +++ b/games/lemm/TODO @@ -5,3 +5,6 @@ + fill in some of the ground so we don't get stuck when digging + Update credits? + "Out" counter is only printed to page1 so gets erased by cursor ++ Level2 ++ Falling too far and you go splat ++ Have loadable levels diff --git a/games/lemm/generate_common.c b/games/lemm/generate_common.c new file mode 100644 index 00000000..aa8e095c --- /dev/null +++ b/games/lemm/generate_common.c @@ -0,0 +1,77 @@ +#include +#include +#include +#include + + + +static FILE *fff; + + +static void find_address(char *symbol_name, int routine_offset) { + + unsigned int addr=0; + char string[BUFSIZ],*result; + char temp_name[BUFSIZ]; + + strncpy(temp_name,symbol_name,BUFSIZ); + strncat(temp_name,":",2); + + while(1) { + + result=fgets(string,BUFSIZ,fff); + if (result==NULL) { + fprintf(stderr,"Error: %s not found!\n",symbol_name); + exit(-1); + } + + result=strstr(string,temp_name); + if (result!=NULL) { + string[6]=0; + sscanf(string,"%x",&addr); + break; + } + } + + + printf("%s\t=$%04x\n",symbol_name,addr+routine_offset); +} + +int main(int argc, char **argv) { + + int c; + char *filename; + char symbol[BUFSIZ]; + int routine_offset=0xd000; + + while ( (c=getopt(argc, argv, "a:s:") ) != -1) { + + switch(c) { + + case 'a': + routine_offset=strtol(optarg, NULL, 0); + break; + case 's': + strncpy(symbol,optarg,BUFSIZ-1); + break; + default: + fprintf(stderr,"Unknown option %c\n",c); + exit(-1); + break; + } + } + + filename=strdup(argv[optind]); + + fff=fopen(filename,"r"); + if (fff==NULL) { + fprintf(stderr,"ERROR! could not open %s\n",filename); + return -1; + } + + find_address(symbol,routine_offset); + + fclose(fff); + + return 0; +} diff --git a/games/lemm/lemm.s b/games/lemm/lemm.s index 4de8910c..d3cbac41 100644 --- a/games/lemm/lemm.s +++ b/games/lemm/lemm.s @@ -5,6 +5,7 @@ ; Zero Page .include "zp.inc" .include "hardware.inc" + .include "qload.inc" lemm_test_start: @@ -288,7 +289,7 @@ load_song_chunk_good: ;========================== .include "gr_offsets.s" - .include "decompress_fast_v2.s" +; .include "decompress_fast_v2.s" .include "wait_keypress.s" @@ -324,7 +325,7 @@ load_song_chunk_good: .include "update_menu.s" .include "wait_a_bit.s" .include "title.s" - .include "audio.s" +; .include "audio.s" .include "letsgo.s" .include "particle_hgr.s" .include "wait.s" diff --git a/games/lemm/qload.s b/games/lemm/qload.s index 53d58b0c..628ea3aa 100644 --- a/games/lemm/qload.s +++ b/games/lemm/qload.s @@ -180,70 +180,55 @@ error_string: .endif which_disk_array: - .byte 1,1,3,3 ; MIST_TITLE,MIST,MECHE,SELENA - .byte 1,1,3,2 ; OCTAGON,VIEWER,STONEY,CHANNEL - .byte 2,1,2,2 ; CABIN,DENTIST,ARBOR,NIBEL - .byte 1,1,1,3 ; SHIP,GENERATOR,D'NI,SUB - .byte 1 ; TEXT_TITLE - .byte 1,1,1,1,1 ; SAVE1,SAVE2,SAVE3,SAVE4,SAVE5 - .byte $f ; FIRST_SECTOR + .byte 1,1,3,3 ; LEMM + .byte 1,1,3,2 ; + .byte 2,1,2,2 ; + .byte 1,1,1,3 ; + .byte 1 ; + .byte 1,1,1,1,1 ; + .byte $f ; load_address_array: - .byte $60,$20,$20,$20 ; MIST_TITLE,MIST,MECHE,SELENA - .byte $20,$20,$20,$20 ; OCTAGON,VIEWER,STONEY,CHANNEL - .byte $20,$20,$20,$20 ; CABIN,DENTIST,ARBOR,NIBEL - .byte $20,$20,$20,$20 ; SHIP,GENERATOR,D'NI,SUB - .byte $08 ; TEXT_TITLE - .byte $0E,$0E,$0E,$0E - .byte $0E ; SAVE1,SAVE2,SAVE3,SAVE4,SAVE5 - .byte $0C ; FIRST_SECTOR + .byte $60,$20,$20,$20 ; LEMM + .byte $20,$20,$20,$20 ; + .byte $20,$20,$20,$20 ; + .byte $20,$20,$20,$20 ; + .byte $08 ; + .byte $0E,$0E,$0E,$0E ; + .byte $0E ; + .byte $0C ; track_array: - .byte 3, 8, 1,21 ; MIST_TITLE,MIST,MECHE,SELENA - .byte 18,31,11, 1 ; OCTAGON,VIEWER,STONEY,CHANNEL - .byte 27,26,10,20 ; CABIN,DENTIST,ARBOR,NIBEL - .byte 30,32,28,30 ; SHIP,GENERATOR,D'NI,SUB - .byte 0 ; TEXT_TITLE - .byte 0, 0, 0, 0, 0 ; SAVE1,SAVE2,SAVE3,SAVE4,SAVE5 - .byte 0 ; FIRST_SECTOR + .byte 3, 8, 1,21 ; LEMM + .byte 18,31,11, 1 ; + .byte 27,26,10,20 ; + .byte 30,32,28,30 ; + .byte 0 ; + .byte 0, 0, 0, 0, 0 ; + .byte 0 ; sector_array: - .byte 0, 0, 0, 0 ; MIST_TITLE,MIST,MECHE,SELENA - .byte 0, 8, 0, 0 ; OCTAGON,VIEWER,STONEY,CHANNEL - .byte 0, 0, 0, 0 ; CABIN,DENTIST,ARBOR,NIBEL - .byte 0,13, 0, 1 ; SHIP,GENERATOR,D'NI,SUB - .byte 6 ; TEXT_TITLE - .byte 11,12,13,14,15 ; SAVE1,SAVE2,SAVE3,SAVE4,SAVE5 - .byte 0 ; FIRST_SECTOR + .byte 0, 0, 0, 0 ; LEMM + .byte 0, 8, 0, 0 ; + .byte 0, 0, 0, 0 ; + .byte 0,13, 0, 1 ; + .byte 6 ; + .byte 11,12,13,14,15 ; + .byte 0 ; length_array: - .byte 96,159,157,145 ; MIST_TITLE,MIST,MECHE,SELENA - .byte 128, 20,158,135 ; OCTAGON,VIEWER,STONEY,CHANNEL - .byte 61, 31,159,109 ; CABIN,DENTIST,ARBOR,NIBEL - .byte 20, 33, 27, 78 ; SHIP,GENERATOR,D'NI,SUB - .byte 3 ; TEXT_TITLE - .byte 1,1,1,1,1 ; SAVE1,SAVE2,SAVE3,SAVE4,SAVE5 - .byte 1 ; FIRST_SECTOR + .byte 96,159,157,145 ; LEMM + .byte 128, 20,158,135 ; + .byte 61, 31,159,109 ; + .byte 20, 33, 27, 78 ; + .byte 3 ; + .byte 1,1,1,1,1 ; + .byte 1 ; -; .include "audio.s" -; .include "linking_noise.s" - ; .include "decompress_fast_v2.s" - ; .include "draw_pointer.s" - ; .include "end_level.s" -; .include "gr_copy.s" -; .include "gr_fast_clear.s" - ; .include "gr_offsets.s" - ; .include "gr_pageflip.s" - ; .include "gr_putsprite_crop.s" - ; .include "keyboard.s" - ; .include "text_print.s" -; .include "loadstore.s" -; .include "joystick.s" + .include "audio.s" + .include "decompress_fast_v2.s" + .include "gr_offsets.s" - ; .include "page_sprites.inc" -; .include "common_sprites.inc" - -; .include "qkumba_popwr.s" qload_end: