Improve ROMs handling for the emulator, add CG ROM (not used yet)
authorNick Downing <nick@ndcode.org>
Thu, 2 Jun 2022 23:33:38 +0000 (09:33 +1000)
committerNick Downing <nick@ndcode.org>
Thu, 2 Jun 2022 23:33:52 +0000 (09:33 +1000)
.gitignore
orig/Makefile
terminal/Makefile
terminal/busybox.sh
terminal/emu_65c02.c
terminal/monitor_rom_obj_header.txt [deleted file]
terminal/ribbit.sh

index f72ea74..1411d1e 100644 (file)
@@ -21,8 +21,7 @@ __pycache__
 /little_brick_out/little_brick_out_tone.asm
 /little_brick_out/little_brick_out_patched.bas
 /little_brick_out/little_brick_out_patched.dsk
-/orig/apple2.rom
-/orig/apple_ii+_rom.zip
+/orig/APPLE\ Computer\ and\ Peripheral\ Card\ Roms\ Collection.zip
 /orig/Apple_DOS_3.3_Master.dsk
 /orig/Apple_DOS_v3.3_1980_Apple.do
 /orig/DOS_Tool_Kit_v1.0_1980_Apple.do
index 75fb7b6..7ade8b4 100644 (file)
@@ -1,10 +1,16 @@
 .PHONY: all
 all: \
+APPLE\ Computer\ and\ Peripheral\ Card\ Roms\ Collection.zip \
 Apple_DOS_3.3_Master.dsk \
 Apple_DOS_v3.3_1980_Apple.do \
 DOS_Tool_Kit_v1.0_1980_Apple.do \
 Lemonade_Stand_1979_Apple.do \
-apple2.rom
+
+# Apple II+ - 341-0020 - Applesoft BASIC Autostart Monitor F800 - 2716.bin
+# Apple II+ - 7341-0036 - Character Generator Rev7+ - 2716.bin
+APPLE\ Computer\ and\ Peripheral\ Card\ Roms\ Collection.zip:
+       rm -f $@
+       wget https://mirrors.apple2.org.za/ftp.apple.asimov.net/emulators/rom_images/APPLE%20Computer%20and%20Peripheral%20Card%20Roms%20Collection.zip
 
 # little brick out
 Apple_DOS_3.3_Master.dsk:
@@ -16,6 +22,7 @@ Apple_DOS_v3.3_1980_Apple.do:
        rm -f $@
        wget https://archive.org/download/a2_Apple_DOS_v3.3_1980_Apple/$@
 
+# edasm, ribbit
 DOS_Tool_Kit_v1.0_1980_Apple.do:
        rm -f $@
        wget https://archive.org/download/a2_DOS_Tool_Kit_v1.0_1980_Apple/$@
@@ -24,22 +31,13 @@ Lemonade_Stand_1979_Apple.do:
        rm -f $@
        wget https://archive.org/download/Lemonade_Stand_1979_Apple/$@
 
-apple2.rom: apple_ii+_rom.zip
-       rm -f $@
-       unzip -L $< $@
-       touch $@
-
-apple_ii+_rom.zip:
-       rm -f $@
-       wget -O $@ https://mirrors.apple2.org.za/ftp.apple.asimov.net/emulators/rom_images/apple_ii%2B_rom.zip
-
+# avoid hitting archive.org every time, use "make realclean" to really delete
 clean:
-       # avoid hitting archive.org every time
-       # they can be deleted manually if needed
+
+realclean:
        rm -f \
-apple2.rom \
-#Apple_DOS_3.3_Master.dsk \
-#Apple_DOS_v3.3_1980_Apple.do \
-#DOS_Tool_Kit_v1.0_1980_Apple.do \
-#Lemonade_Stand_1979_Apple.do \
-#apple_ii+_rom.zip
+APPLE\ Computer\ and\ Peripheral\ Card\ Roms\ Collection.zip \
+Apple_DOS_3.3_Master.dsk \
+Apple_DOS_v3.3_1980_Apple.do \
+DOS_Tool_Kit_v1.0_1980_Apple.do \
+Lemonade_Stand_1979_Apple.do
index 6288b3b..0941a63 100644 (file)
@@ -12,15 +12,37 @@ BAS_TO_TOK=../bas_to_tok.py
 all: \
 emu_65c02 \
 hrcg.obj \
-monitor_rom.obj \
+gr_terminal.obj \
 hrcg_terminal.obj \
 frogs1.set \
 frogs2.set \
-lily_pad.pic
+lily_pad.pic \
+Apple\ II+\ -\ 341-0020\ -\ Applesoft\ BASIC\ Autostart\ Monitor\ F800\ -\ 2716.bin \
+Apple\ II+\ -\ 7341-0036\ -\ Character\ Generator\ Rev7+\ -\ 2716.bin
 
 emu_65c02: emu_65c02.o stty_sane.o vrEmu6502/src/vrEmu6502.o
        ${CC} ${LDFLAGS} -o $@ $^ -lSDL2
 
+gr_terminal.obj: \
+gr_terminal.asm \
+gr_terminal_asm.txt \
+bootable.dsk \
+../orig/DOS_Tool_Kit_v1.0_1980_Apple.do
+       cp ../orig/DOS_Tool_Kit_v1.0_1980_Apple.do .
+       tr '\t\na-z' ' \rA-Z' <gr_terminal.asm |\
+LC_ALL=C tr '\000-\177' '\200-\377' >__temp__.asm
+       ${MKDOS33FS} __temp__.dsk
+       ${DOS33} __temp__.dsk SAVE T __temp__.asm "GR TERMINAL.ASM"
+       rm -f ../linapple-pie/Printer.txt
+       tr '\n' '\r' <gr_terminal_asm.txt |\
+( \
+  cd ../linapple-pie && \
+  ./linapple -b -1 ../terminal/DOS_Tool_Kit_v1.0_1980_Apple.do -2 ../terminal/__temp__.dsk \
+)
+       tr -d '\r' <../linapple-pie/Printer.txt >gr_terminal.lst
+       ${DOS33} __temp__.dsk LOAD "GR TERMINAL.OBJ" $@
+       rm DOS_Tool_Kit_v1.0_1980_Apple.do __temp__.asm __temp__.dsk
+
 hrcg.obj: \
 bootable.dsk \
 ../orig/DOS_Tool_Kit_v1.0_1980_Apple.do
@@ -33,12 +55,6 @@ bootable.dsk \
        ${DOS33} __temp__.dsk LOAD HRCG.OBJ $@
        rm __temp__.dsk
 
-monitor_rom.obj: ../orig/apple2.rom monitor_rom_obj_header.txt
-       ( \
-  xxd -r <monitor_rom_obj_header.txt; \
-  dd if=$< bs=1024 skip=18 count=2 \
-) >$@
-
 hrcg_terminal.obj: \
 hrcg_terminal.asm \
 hrcg_terminal_asm.txt \
@@ -79,16 +95,29 @@ bootable.dsk: ../orig/Apple_DOS_v3.3_1980_Apple.do bootable.txt
   ./linapple -b -1 ../orig/Apple_DOS_v3.3_1980_Apple.do -2 ../terminal/$@ \
 )
 
+Apple\ II+\ -\ 341-0020\ -\ Applesoft\ BASIC\ Autostart\ Monitor\ F800\ -\ 2716.bin: \
+../orig/APPLE\ Computer\ and\ Peripheral\ Card\ Roms\ Collection.zip
+       rm -f "$@"
+       unzip "$<" "$@"
+       touch "$@"
+
+Apple\ II+\ -\ 7341-0036\ -\ Character\ Generator\ Rev7+\ -\ 2716.bin: \
+../orig/APPLE\ Computer\ and\ Peripheral\ Card\ Roms\ Collection.zip
+       rm -f "$@"
+       unzip "$<" "$@"
+       touch "$@"
+
 clean:
        rm -f \
 *.o \
 vrEmu6502/src/*.o \
 emu_65c02 \
 hrcg.obj \
-monitor_rom.obj \
 hrcg_terminal.obj \
 bootable.dsk \
 __temp__.asm \
 __temp__.dsk \
 __defs__.txt \
-__refs__.txt
+__refs__.txt \
+Apple\ II+\ -\ 341-0020\ -\ Applesoft\ BASIC\ Autostart\ Monitor\ F800\ -\ 2716.bin \
+Apple\ II+\ -\ 7341-0036\ -\ Character\ Generator\ Rev7+\ -\ 2716.bin
index 5af7b9c..f0fdbb3 100755 (executable)
@@ -1,2 +1,2 @@
 #!/bin/sh
-./emu_65c02 monitor_rom.obj hrcg.obj terminal.obj -- /bin/busybox sh
+./emu_65c02 hrcg.obj terminal.obj -- /bin/busybox sh
index d35fbe8..7a53c1e 100644 (file)
@@ -98,6 +98,11 @@ uint32_t palette[0x10] = {
 
 VrEmu6502 *cpu;
 
+#define ROM_SIZE 0x800
+
+#define CG_ROM_SIZE 0x800
+uint8_t cg_rom[CG_ROM_SIZE];
+
 #define MEM_SIZE 0x10000
 uint8_t mem[MEM_SIZE];
 
@@ -129,7 +134,20 @@ uint8_t dos_lo;
 int hires = APPLE_HIRES0;
 int usleep_count, exit_flag;
 
-int bload(char *name) {
+void rom_load(char *name, uint8_t *data, int size) {
+  int fd = open(name, O_RDONLY);
+  if (fd == -1) {
+    perror(name);
+    exit(EXIT_FAILURE);
+  }
+  if (read(fd, data, size) != size) {
+    perror("read()");
+    exit(EXIT_FAILURE);
+  }
+  close(fd);
+}
+
+int obj_load(char *name) {
   int load_address = -1;
   char *p;
   for (p = name; *p && *p != ','; ++p)
@@ -191,7 +209,7 @@ void dos(char *line) {
           *q = '_';
         else if (*q >= 'A' && *q <= 'Z')
           *q += 'a' - 'A';
-      bload(p);
+      obj_load(p);
     }
   }
   else {
@@ -356,23 +374,37 @@ void termios_atexit(void) {
 
 int main(int argc, char **argv) {
   int argn = 1;
+  char *cg_rom_file =
+    "Apple II+ - 7341-0036 - Character Generator Rev7+ - 2716.bin";
+  char *f8_rom_file =
+    "Apple II+ - 341-0020 - Applesoft BASIC Autostart Monitor F800 - 2716.bin";
   bool timing = false;
-  if (argn < argc && strcmp(argv[argn], "-t") == 0) {
-    timing = true;
+  while (argn < argc) {
+    if (memcmp(argv[argn], "--cg_rom=", 9) == 0)
+      cg_rom_file = argv[argn] + 9;
+    else if (memcmp(argv[argn], "--f8_rom=", 9) == 0)
+      f8_rom_file = argv[argn] + 9;
+    else if (strcmp(argv[argn], "--timing") == 0)
+      timing = true;
+    else
+      break;
     ++argn;
   }
 
   if (argn >= argc) {
-    printf("usage: %s [-t] [utility.obj ...] program.obj [-- child_executable [child_argument ...]]\n", argv[0]);
+    printf("usage: %s [--cg_rom=file.bin] [--f8_rom=file.bin] [--timing] [utility.obj[,aNNNN] ...] program.obj[,aNNNN] [-- child_executable [child_argument ...]]\n", argv[0]);
     exit(EXIT_FAILURE);
   }
 
+  rom_load(cg_rom_file, cg_rom, CG_ROM_SIZE);
+  rom_load(f8_rom_file, mem + 0xf800, ROM_SIZE);
+
   int load_address = 0;
   while (argn < argc) {
     char *p = argv[argn++];
     if (strcmp(p, "--") == 0)
       break;
-    load_address = bload(p);
+    load_address = obj_load(p);
   }
 
   // open pty and child process if requested
diff --git a/terminal/monitor_rom_obj_header.txt b/terminal/monitor_rom_obj_header.txt
deleted file mode 100644 (file)
index 705f3d1..0000000
+++ /dev/null
@@ -1 +0,0 @@
-00000000: 00f8 0008
index 16a723d..388447a 100755 (executable)
@@ -1,2 +1,2 @@
 #!/bin/sh
-./emu_65c02 monitor_rom.obj hrcg.obj terminal.obj -- ../applesoft_basic.py --hrcg --joystick=/dev/input/by-id/usb-Madcatz_Mad_Catz_V.1_Stick-event-joystick,flip_y,swap_buttons ../ribbit/ribbit_patched.tok
+./emu_65c02 hrcg.obj terminal.obj -- ../applesoft_basic.py --hrcg --joystick=/dev/input/by-id/usb-Madcatz_Mad_Catz_V.1_Stick-event-joystick,flip_y,swap_buttons ../ribbit/ribbit_patched.tok