Added tinybasic

This commit is contained in:
Joppe Blondel
2026-09-28 15:42:07 +02:00
parent 53b44adcef
commit 9b1fcac8ee
5 changed files with 2026 additions and 25 deletions
+40 -6
View File
@@ -45,6 +45,23 @@ static void uart_putc(char c)
uart_kick();
}
/* Stable monitor ABI implementations, reached through the jump table at C050. */
void monitor_uart_putc(char c)
{
uart_putc(c);
}
uint8_t monitor_uart_getc(void)
{
char c;
uint8_t received;
disable_interrupts();
received = buffer_dequeue(&rx_buf, &c);
enable_interrupts();
return received ? (uint8_t)c : 0;
}
static void uart_puts(const char *s)
{
while (*s) uart_putc(*s++);
@@ -182,6 +199,7 @@ static void print_help(void)
" I|IN port Read an I/O port\r\n"
" O|OUT port byte Write an I/O port\r\n"
" G|GO address Execute code; RET returns here\r\n"
" B|BASIC Start Tiny BASIC at D000\r\n"
" H|HELP|? Show this help\r\n");
}
@@ -265,6 +283,16 @@ static void command_out(uint8_t argc, char **argv)
uart_puts("OK\r\n");
}
static void execute_address(uint16_t address)
{
uart_puts("Executing at ");
print_hex16(address);
uart_puts("...\r\n");
uart_flush();
jump_to(address);
uart_puts("Returned to monitor\r\n");
}
static void command_go(uint8_t argc, char **argv)
{
uint16_t address;
@@ -273,12 +301,16 @@ static void command_go(uint8_t argc, char **argv)
uart_puts("Usage: G address\r\n");
return;
}
uart_puts("Executing at ");
print_hex16(address);
uart_puts("...\r\n");
uart_flush();
jump_to(address);
uart_puts("Returned to monitor\r\n");
execute_address(address);
}
static void command_basic(uint8_t argc)
{
if (argc != 1) {
uart_puts("Usage: B\r\n");
return;
}
execute_address(0xd000);
}
static void execute_line(char *line)
@@ -300,6 +332,8 @@ static void execute_line(char *line)
command_out(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 {
uart_puts("Unknown command; type HELP\r\n");
}