From ec44509313632ee275c2104a0328db7d7f4a21ed Mon Sep 17 00:00:00 2001 From: Vince Weaver Date: Sun, 26 Sep 2021 00:46:35 -0400 Subject: [PATCH] peasant: change up how generate_common symbol extraction works more scriptable in Makefile --- games/peasant/Makefile | 11 ++++- games/peasant/generate_common.c | 77 +++++++++++++-------------------- 2 files changed, 40 insertions(+), 48 deletions(-) diff --git a/games/peasant/Makefile b/games/peasant/Makefile index 28578545..a6953727 100644 --- a/games/peasant/Makefile +++ b/games/peasant/Makefile @@ -78,7 +78,14 @@ generate_common.o: generate_common.c #### music.inc: generate_common MUSIC - ./generate_common > music.inc + ./generate_common -a 0xd000 -s pt3_init_song music.lst > music.inc + ./generate_common -a 0xd000 -s mockingboard_init music.lst >> music.inc + ./generate_common -a 0xd000 -s reset_ay_both music.lst >> music.inc + ./generate_common -a 0xd000 -s clear_ay_both music.lst >> music.inc + ./generate_common -a 0xd000 -s mockingboard_setup_interrupt music.lst >> music.inc + ./generate_common -a 0xd000 -s mockingboard_disable_interrupt music.lst >> music.inc + ./generate_common -a 0xd000 -s done_pt3_irq_handler music.lst >> music.inc + ./generate_common -a 0xd000 -s PT3_LOC music.lst >> music.inc ### @@ -311,3 +318,5 @@ clean: PEASANT1 PEASANT2 PEASANT3 PEASANT4 \ TROGDOR ENDING MUSIC + + diff --git a/games/peasant/generate_common.c b/games/peasant/generate_common.c index dd10a7ab..11e5c857 100644 --- a/games/peasant/generate_common.c +++ b/games/peasant/generate_common.c @@ -1,21 +1,21 @@ #include #include +#include +#include -/* music */ -static char filename[]="music.lst"; -static int routine_offset=0xD000; static FILE *fff; -static void find_address(char *symbol_name) { +static void find_address(char *symbol_name, int routine_offset) { unsigned int addr=0; char string[BUFSIZ],*result; char temp_name[BUFSIZ]; - sprintf(temp_name,"%s:",symbol_name); + strncpy(temp_name,symbol_name,BUFSIZ); + strncat(temp_name,":",2); while(1) { @@ -36,54 +36,37 @@ static void find_address(char *symbol_name) { 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; } - printf(";=============================\n"); - printf("; external routines\n"); - printf("\n"); - -// printf("; loader.s\n"); -// find_address("opendir_filename"); -// printf("\n"); - -// printf("; audio.s\n"); -// find_address("play_audio"); -// printf("\n"); - - printf(";\n"); - find_address("pt3_init_song"); - printf("\n"); - - printf(";\n"); - find_address("mockingboard_init"); - printf("\n"); - - printf(";\n"); - find_address("reset_ay_both"); - printf("\n"); - - printf(";\n"); - find_address("clear_ay_both"); - printf("\n"); - - printf(";\n"); - find_address("mockingboard_setup_interrupt"); - printf("\n"); - - printf(";\n"); - find_address("mockingboard_disable_interrupt"); - printf("\n"); - - printf(";\n"); - find_address("done_pt3_irq_handler"); - printf("\n"); - - printf(";\n"); - find_address("PT3_LOC"); + find_address(symbol,routine_offset); printf("\n"); fclose(fff);