Added tinybasic
This commit is contained in:
@@ -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");
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user