start of tape loading. hw works and have a generation script

This commit is contained in:
Joppe Blondel
2026-10-03 16:29:41 +02:00
parent 47fffc2e71
commit 5897e55094
16 changed files with 784 additions and 106 deletions
+49 -1
View File
@@ -1,5 +1,6 @@
#include <stdint.h>
#include "bios.h"
#include "rom_layout.h"
#define LINE_SIZE 80
#define MAX_ARGS 40
@@ -97,8 +98,11 @@ static void print_help(void)
" W addr byte... Write memory\r\n"
" I port Read I/O\r\n"
" O port byte Write I/O\r\n"
" K bank Bank: 0=split, 1=upper 64K\r\n"
" R ON|OFF Enable or disable ROM\r\n"
" G addr Execute\r\n"
" B Tiny BASIC\r\n"
" T Tape loader\r\n"
" H Help\r\n");
}
@@ -204,6 +208,35 @@ static void command_out(uint8_t argc, char **argv)
bios_puts("OK\r\n");
}
static void command_bank(uint8_t argc, char **argv)
{
uint16_t bank;
if (argc != 2 || !parse_hex(argv[1], &bank) || bank > 1) {
bios_puts("Usage: BANK 0|1\r\n");
return;
}
bios_bank((uint8_t)bank);
bios_puts("OK\r\n");
}
static void command_rom(uint8_t argc, char **argv)
{
if (argc != 2) {
bios_puts("Usage: ROM ON|OFF\r\n");
return;
}
if (strings_equal(argv[1], "on")) {
bios_rom_enable();
} else if (strings_equal(argv[1], "off")) {
bios_rom_disable();
} else {
bios_puts("Usage: ROM ON|OFF\r\n");
return;
}
bios_puts("OK\r\n");
}
static void execute_address(uint16_t address)
{
bios_puts("Executing at ");
@@ -231,7 +264,16 @@ static void command_basic(uint8_t argc)
bios_puts("Usage: B\r\n");
return;
}
execute_address(0x1000);
execute_address(TINYBASIC_ROM_ADDRESS);
}
static void command_tape(uint8_t argc)
{
if (argc != 1) {
bios_puts("Usage: T\r\n");
return;
}
execute_address(TAPE_LOADER_ROM_ADDRESS);
}
static void execute_line(char *line)
@@ -253,10 +295,16 @@ static void execute_line(char *line)
command_in(argc, argv);
} else if (strings_equal(argv[0], "o") || strings_equal(argv[0], "out")) {
command_out(argc, argv);
} else if (strings_equal(argv[0], "k") || strings_equal(argv[0], "bank")) {
command_bank(argc, argv);
} else if (strings_equal(argv[0], "r") || strings_equal(argv[0], "rom")) {
command_rom(argc, argv);
} else if (strings_equal(argv[0], "g") || strings_equal(argv[0], "go")) {
command_go(argc, argv);
} else if (strings_equal(argv[0], "b") || strings_equal(argv[0], "basic")) {
command_basic(argc);
} else if (strings_equal(argv[0], "t") || strings_equal(argv[0], "tape")) {
command_tape(argc);
} else {
bios_puts("Unknown command; type HELP\r\n");
}