start of tape loading. hw works and have a generation script
This commit is contained in:
@@ -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");
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user