aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIan C <ianc@noddybox.co.uk>2024-11-30 07:53:44 +0000
committerIan C <ianc@noddybox.co.uk>2024-11-30 07:53:44 +0000
commit2e82a0eb6e13f209a2a4492dc348c9d4f8509753 (patch)
tree08cc69b152f6413f3bfb8884bafe2003ff9006fd
parentc086f055ef676ca96e948340386cb04725916db3 (diff)
Removed CBM TAP output. Couldn't find enough documentation and we already
have PRG output for those platforms, plut T64.
-rw-r--r--src/Makefile6
-rw-r--r--src/casm.c1
-rw-r--r--src/cbmtapout.c282
-rw-r--r--src/cbmtapout.h56
-rw-r--r--src/output.c4
-rw-r--r--src/output.h1
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)
diff --git a/src/casm.c b/src/casm.c
index 200114d..54c3f73 100644
--- a/src/casm.c
+++ b/src/casm.c
@@ -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
*/