Banking
This commit is contained in:
@@ -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")) {
|
||||
|
||||
Reference in New Issue
Block a user