This commit is contained in:
Joppe Blondel
2026-10-01 12:44:11 +02:00
parent d19ffc70a1
commit 47fffc2e71
9 changed files with 467 additions and 19 deletions
+33 -8
View File
@@ -91,14 +91,15 @@ static uint8_t split_line(char *line, char **argv)
static void print_help(void)
{
bios_puts(
"Commands (hexadecimal numbers):\r\n"
" D|DUMP address [length] Dump memory (default 0040, max 0100)\r\n"
" W|WRITE address byte ... Write one or more memory bytes\r\n"
" 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 ROM Tiny BASIC at 1000\r\n"
" H|HELP|? Show this help\r\n");
"Commands (hex numbers):\r\n"
" D addr [len] Dump memory\r\n"
" C start end 16-bit checksum, inclusive\r\n"
" W addr byte... Write memory\r\n"
" I port Read I/O\r\n"
" O port byte Write I/O\r\n"
" G addr Execute\r\n"
" B Tiny BASIC\r\n"
" H Help\r\n");
}
static void command_dump(uint8_t argc, char **argv)
@@ -131,6 +132,28 @@ static void command_dump(uint8_t argc, char **argv)
}
}
static void command_checksum(uint8_t argc, char **argv)
{
uint16_t address;
uint16_t end;
uint16_t checksum = 0;
if (argc != 3 || !parse_hex(argv[1], &address) ||
!parse_hex(argv[2], &end) || end < address) {
bios_puts("Usage: C start end\r\n");
return;
}
for (;;) {
checksum = (uint16_t)(checksum + *(volatile uint8_t *)address);
if (address == end) break;
++address;
}
print_hex16(checksum);
bios_puts("\r\n");
}
static void command_write(uint8_t argc, char **argv)
{
uint16_t address;
@@ -222,6 +245,8 @@ static void execute_line(char *line)
print_help();
} else if (strings_equal(argv[0], "d") || strings_equal(argv[0], "dump")) {
command_dump(argc, argv);
} else if (strings_equal(argv[0], "c") || strings_equal(argv[0], "checksum")) {
command_checksum(argc, argv);
} else if (strings_equal(argv[0], "w") || strings_equal(argv[0], "write")) {
command_write(argc, argv);
} else if (strings_equal(argv[0], "i") || strings_equal(argv[0], "in")) {