diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/Makefile | 6 | ||||
-rw-r--r-- | src/casm.c | 1 | ||||
-rw-r--r-- | src/cbmtapout.c | 282 | ||||
-rw-r--r-- | src/cbmtapout.h | 56 | ||||
-rw-r--r-- | src/output.c | 4 | ||||
-rw-r--r-- | src/output.h | 1 |
6 files changed, 2 insertions, 348 deletions
diff --git a/src/Makefile b/src/Makefile index f80f535..0d06ee0 100644 --- a/src/Makefile +++ b/src/Makefile @@ -52,8 +52,7 @@ SOURCE = casm.c \ nesout.c \ cpcout.c \ prgout.c \ - hexout.c \ - cbmtapout.c + hexout.c OBJECTS = casm.o \ expr.o \ @@ -83,8 +82,7 @@ OBJECTS = casm.o \ nesout.o \ cpcout.o \ prgout.o \ - hexout.o \ - cbmtapout.o + hexout.o $(TARGET): $(OBJECTS) $(CC) $(CLAGS) -o $(TARGET) $(OBJECTS) @@ -697,7 +697,6 @@ int main(int argc, char *argv[]) PushValTableHandler(CPCOutputOptions(), CPCOutputSetOption); PushValTableHandler(PRGOutputOptions(), PRGOutputSetOption); PushValTableHandler(HEXOutputOptions(), HEXOutputSetOption); - PushValTableHandler(CBMTAPOutputOptions(), CBMTAPOutputSetOption); ClearState(); diff --git a/src/cbmtapout.c b/src/cbmtapout.c deleted file mode 100644 index b220794..0000000 --- a/src/cbmtapout.c +++ /dev/null @@ -1,282 +0,0 @@ -/* - - casm - Simple, portable assembler - - Copyright (C) 2003-2024 Ian Cowburn (ianc@noddybox.co.uk) - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. - - ------------------------------------------------------------------------- - - Commodore TAP output handler. - -*/ -#include <stdlib.h> -#include <stdio.h> -#include <string.h> - -#include "global.h" -#include "codepage.h" -#include "cbmtapout.h" -#include "expr.h" - - -/* ---------------------------------------- MACROS & TYPES -*/ - -/* ---------------------------------------- PRIVATE TYPES AND VARS -*/ -enum option_t -{ - OPT_START_ADDR, - OPT_SYSTEM_TYPE -}; - -static const ValueTable option_set[]= -{ - {"cbm-tap-start", OPT_START_ADDR}, - {"cbm-tap-system", OPT_SYSTEM_TYPE}, - {NULL} -}; - -typedef enum -{ - SYS_C64, - SYS_VIC20, - SYS_VIC20_8K -} system_t; - -static ValueTable system_table[]= -{ - {"c64", SYS_C64}, - {"vic20", SYS_VIC20}, - {"vic20+8k",SYS_VIC20_8K}, - {NULL} -}; - -typedef struct -{ - int start_addr; - system_t system; -} Options; - -static Options options = -{ - -1, - SYS_C64 -}; - - -/* ---------------------------------------- PRIVATE FUNCTIONS -*/ -static int PokeB(Byte *mem, int addr, Byte b) -{ - mem[addr++] = b; - return (addr % 0x10000); -} - - -static int PokeW(Byte *mem, int addr, int w) -{ - addr = PokeB(mem, addr, w & 0xff); - return PokeB(mem, addr, (w & 0xff00) >> 8); -} - - -static int PokeS(Byte *mem, int addr, const char *str) -{ - while(*str) - { - addr = PokeB(mem, addr, CodeFromNative(CP_CBM, *str++)); - } - - return addr; -} - - -static void WriteByte(FILE *fp, Byte b) -{ - putc(b, fp); -} - - -static void WriteWord(FILE *fp, int w) -{ - WriteByte(fp, w & 0xff); - WriteByte(fp, (w & 0xff00) >> 8); -} - - -static void WriteLongWord(FILE *fp, unsigned long l) -{ - WriteByte(fp, l & 0xfflu); - WriteByte(fp, (l & 0xff00lu) >> 8); - WriteByte(fp, (l & 0xff0000lu) >> 16); - WriteByte(fp, (l & 0xff000000lu) >> 24); -} - -static void WriteASCII(FILE *fp, const char *str) -{ - while(*str) - { - WriteByte(fp, CodeFromNative(CP_ASCII, *str++)); - } -} - - -/* ---------------------------------------- INTERFACES -*/ -const ValueTable *CBMTAPOutputOptions(void) -{ - return option_set; -} - -CommandStatus CBMTAPOutputSetOption(int opt, int argc, char *argv[], - int quoted[], char *err, size_t errsize) -{ - const ValueTable *val; - CommandStatus stat = CMD_OK; - - CMD_ARGC_CHECK(1); - - switch(opt) - { - case OPT_START_ADDR: - CMD_EXPR(argv[0], options.start_addr); - break; - - case OPT_SYSTEM_TYPE: - CMD_TABLE(argv[0], system_table, val); - options.system = val->value; - break; - - default: - break; - } - - return stat; -} - -int CBMTAPOutput(const char *filename, const char *filename_bank, - MemoryBank **bank, int count, char *error, size_t error_size) -{ - int f; - - for(f = 0; f < count; f++) - { - FILE *fp; - char buff[4096]; - const char *name; - Byte *mem; - int min, max; - unsigned long len; - char sys[16]; - int addr; - int start_addr; - int next; - int i; - - if (count == 1) - { - name = filename; - } - else - { - snprintf(buff, sizeof buff, filename_bank, bank[f]->number); - name = buff; - } - - if (!(fp = fopen(name, "wb"))) - { - snprintf(error, error_size, "Failed to open %s", name); - return FALSE; - } - - switch(options.system) - { - case SYS_C64: - addr = 0x803; - start_addr = 0x801; - break; - case SYS_VIC20: - addr = 0x1003; - start_addr = 0x1001; - break; - case SYS_VIC20_8K: - addr = 0x1203; - start_addr = 0x1201; - break; - } - - mem = bank[f]->memory; - min = bank[f]->min_address_used; - max = bank[f]->max_address_used; - - if (min < (addr + 0x10)) - { - snprintf(error, error_size, "Bank starts below a safe " - "area to add BASIC loader"); - - return FALSE; - } - - /* We're going to prepend some BASIC - */ - if (options.start_addr == -1) - { - snprintf(sys, sizeof sys, "%d", bank[f]->min_address_used); - } - else - { - snprintf(sys, sizeof sys, "%d", options.start_addr); - } - - addr = PokeW(mem, addr, 10); - addr = PokeB(mem, addr, 0x9e); - addr = PokeS(mem, addr, sys); - addr = PokeB(mem, addr, 0x00); - - next = addr; - - addr = PokeW(mem, addr, 0x00); - - PokeW(mem, start_addr, next); - - min = start_addr; /* Start of BASIC */ - - len = max - min + 1; - - /* Write out TAP file header - */ - WriteASCII(fp, "C64-TAPE-RAW"); - WriteByte(fp, 0); - WriteByte(fp, 0); - WriteByte(fp, 0); - WriteByte(fp, 0); - WriteLongWord(fp, len); - - /* Output file data - */ - fwrite(mem + min, len, 1, fp); - - fclose(fp); - } - - return TRUE; -} - - -/* -vim: ai sw=4 ts=8 expandtab -*/ diff --git a/src/cbmtapout.h b/src/cbmtapout.h deleted file mode 100644 index 8169d58..0000000 --- a/src/cbmtapout.h +++ /dev/null @@ -1,56 +0,0 @@ -/* - - casm - Simple, portable assembler - - Copyright (C) 2003-2015 Ian Cowburn (ianc@noddybox.co.uk) - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. - - ------------------------------------------------------------------------- - - Commodore TAP tape output - -*/ - -#ifndef CASM_CBMTAPOUT_H -#define CASM_CBMTAPOUT_H - -#include "parse.h" -#include "state.h" -#include "cmd.h" - -/* ---------------------------------------- INTERFACES -*/ - - -/* CBMTAP Output options -*/ -const ValueTable *CBMTAPOutputOptions(void); - -CommandStatus CBMTAPOutputSetOption(int opt, int argc, char *argv[], - int quoted[], char *error, - size_t error_size); - - -/* C64 CBMTAP output of assembly. Returns TRUE if OK, FALSE for failure. -*/ -int CBMTAPOutput(const char *filename, const char *filename_bank, - MemoryBank **bank, int count, - char *error, size_t error_size); - -#endif - -/* -vim: ai sw=4 ts=8 expandtab -*/ diff --git a/src/output.c b/src/output.c index 93abd72..827c51a 100644 --- a/src/output.c +++ b/src/output.c @@ -186,10 +186,6 @@ int OutputCode(void) return HEXOutput(output, output_bank, bank, count, error, sizeof error); - case CBM_TAP: - return CBMTAPOutput(output, output_bank, bank, count, - error, sizeof error); - default: break; } diff --git a/src/output.h b/src/output.h index 527e044..90cda5c 100644 --- a/src/output.h +++ b/src/output.h @@ -42,7 +42,6 @@ #include "cpcout.h" #include "prgout.h" #include "hexout.h" -#include "cbmtapout.h" /* ---------------------------------------- INTERFACES */ |