Cleaned up autotyping and made code closer to original repo style

This commit is contained in:
Frederic Stark 2024-10-06 14:49:16 +02:00
parent 0e328339d4
commit 13baf1a6a7
7 changed files with 48 additions and 40 deletions

1
AUTOTYPING.TXT Normal file
View File

@ -0,0 +1 @@
280.28f

View File

@ -1 +0,0 @@
Change content of the "kbd.txt" file to change auto-keyboard input.

12
README
View File

@ -1,15 +1,7 @@
# Fork of napple1 # Fork of napple1
This forks enables to emulate keyboard entry on the apple1 This forks enables to emulate keyboard entry on the apple1. When pressing "shift-K",
the keyboard I/O will be replaced by the content of the 'AUTOTYPING.TXT' file. (note: this have been done to be able to type in basic programs and use the 'dump" features to transfer them to binary files).
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 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. Pom1 emulafor. If you have some questions, please report it as an issue.

View File

@ -27,7 +27,40 @@
#include <stdio.h> #include <stdio.h>
FILE *kbd_txt; FILE *autotyping_file = NULL;
int startAutotyping(const char *filename)
{
if (autotyping_file)
stopAutotyping();
autotyping_file = fopen(filename, "r");
return !!autotyping_file;
}
int nextAutotyping(void)
{
if (!autotyping_file)
return -1;
int c = fgetc(autotyping_file);
if (c!=EOF) {
if (c=='\n')
c = 0x0d;
if (c>='a' && c<='z')
c = c - 'a' + 'A';
writeKbd((unsigned char)(c + 0x80));
writeKbdCr(0xA7);
}
else
stopAutotyping();
return c;
}
void stopAutotyping(void)
{
if (autotyping_file)
fclose(autotyping_file);
autotyping_file = NULL;
}
int handleInput(void) int handleInput(void)
{ {
@ -36,13 +69,11 @@ int handleInput(void)
tmp = '\0'; tmp = '\0';
while ( (tmp = getch_screen()) == '\0' ) while ( (tmp = getch_screen()) == '\0' )
; ;
if (tmp=='K') if (tmp=='K') {
{ if (startAutotyping("AUTOTYPING.TXT"))
/* We open the "KBD.TXT" file if it exists */
kbd_txt = fopen("KBD.TXT", "r");
return 1; return 1;
} }
if (tmp == 'B') { else if (tmp == 'B') {
loadBasic(); loadBasic();
resetPia6820(); resetPia6820();
resetM6502(); resetM6502();

View File

@ -20,3 +20,6 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/ */
int handleInput(void); int handleInput(void);
int startAutotyping(const char *filename);
int nextAutotyping(void);
void stopAutotyping(void);

View File

@ -1,8 +1,7 @@
# napple1 makefile # napple1 makefile
# Nobu Hatano <nobuhatano@gmail.com> # Nobu Hatano <nobuhatano@gmail.com>
CC = gcc CC = gcc
CFLAGS = -Wall CFLAGS = -Wall -ansi
# CFLAGS = -Wall -ansi
THREAD = -lpthread THREAD = -lpthread
# Support Linux and Cygwin # Support Linux and Cygwin

View File

@ -82,6 +82,7 @@
#include "memory.h" #include "memory.h"
#include "screen.h" #include "screen.h"
#include "msgbuf.h" #include "msgbuf.h"
#include "keyboard.h"
#define MEMMAX 0xFFFF #define MEMMAX 0xFFFF
#define FNAME_LEN_MAX 1024 #define FNAME_LEN_MAX 1024
@ -164,26 +165,8 @@ unsigned char memRead(unsigned short address)
if (address == 0xD011) if (address == 0xD011)
{ {
unsigned char v = readKbdCr(); unsigned char v = readKbdCr();
extern FILE *kbd_txt; if (!(v & 0x80))
if (!(v & 0x80) && kbd_txt) nextAutotyping();
{
// 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; return v;
} }
if (address == 0xD010) if (address == 0xD010)