From 0e328339d46c06c0b80dbc15ab2ff226532629a7 Mon Sep 17 00:00:00 2001 From: Frederic Stark Date: Sun, 29 Sep 2024 13:39:21 +0200 Subject: [PATCH] Added 'K' feature: press 'Shift-K' to 'type' file KBD.TXT --- KBD.TXT | 1 + README | 13 +++++++++++++ src/keyboard.c | 10 ++++++++++ src/makefile | 3 ++- src/memory.c | 25 ++++++++++++++++++++++++- 5 files changed, 50 insertions(+), 2 deletions(-) create mode 100644 KBD.TXT diff --git a/KBD.TXT b/KBD.TXT new file mode 100644 index 0000000..ef3da74 --- /dev/null +++ b/KBD.TXT @@ -0,0 +1 @@ +Change content of the "kbd.txt" file to change auto-keyboard input. diff --git a/README b/README index 61c40d5..1fbba43 100644 --- a/README +++ b/README @@ -1,3 +1,16 @@ +# Fork of napple1 + +This forks enables to emulate keyboard entry on the apple1 + +This kludge is done by creating a "KBD.TXT" file. When pressing "shift-K", +the keyboard I/O will be replaced by the content of this file. + +This have been done to be able to load basic programs and use the 'dump" +features to transfer them to binary files. + + + + napple1 is an Apple 1 emulator using ncurses, ported from the SDL version Pom1 emulafor. If you have some questions, please report it as an issue. diff --git a/src/keyboard.c b/src/keyboard.c index f66628a..398c6bc 100644 --- a/src/keyboard.c +++ b/src/keyboard.c @@ -25,6 +25,10 @@ #include "keyboard.h" #include "screen.h" +#include + +FILE *kbd_txt; + int handleInput(void) { char tmp; @@ -32,6 +36,12 @@ int handleInput(void) tmp = '\0'; while ( (tmp = getch_screen()) == '\0' ) ; + if (tmp=='K') + { + /* We open the "KBD.TXT" file if it exists */ + kbd_txt = fopen("KBD.TXT", "r"); + return 1; + } if (tmp == 'B') { loadBasic(); resetPia6820(); diff --git a/src/makefile b/src/makefile index eeac56d..e7af123 100644 --- a/src/makefile +++ b/src/makefile @@ -1,7 +1,8 @@ # napple1 makefile # Nobu Hatano CC = gcc -CFLAGS = -Wall -ansi +CFLAGS = -Wall +# CFLAGS = -Wall -ansi THREAD = -lpthread # Support Linux and Cygwin diff --git a/src/memory.c b/src/memory.c index fd43898..9109113 100644 --- a/src/memory.c +++ b/src/memory.c @@ -162,7 +162,30 @@ unsigned char memRead(unsigned short address) if (address == 0xD012) return readDsp(); if (address == 0xD011) - return readKbdCr(); + { + unsigned char v = readKbdCr(); + extern FILE *kbd_txt; + if (!(v & 0x80) && kbd_txt) + { + // Read on char from file + int c = fgetc(kbd_txt); + if (c!=EOF) + { + if (c=='\n') + c = 0x0d; + if (v>='a' && v<='z') + c = c - 'a' + 'A'; + writeKbd((unsigned char)(c + 0x80)); + writeKbdCr(0xA7); + } + else + { + fclose(kbd_txt); + kbd_txt = NULL; + } + } + return v; + } if (address == 0xD010) return readKbd();