FoenixMCP/src/cli/mem_cmds.c
Peter Weingartner 5f1c0f92a5 TEST command
Moved all of the CLI test commands under a master TEST command.
2021-11-01 15:02:20 -04:00

161 lines
3.4 KiB
C

/*
* Memory commands
*/
#include "log.h"
#include "cli.h"
#include "simpleio.h"
#include "sys_general.h"
#include "syscalls.h"
#include "mem_cmds.h"
/*
* Print out the contents of a block of memory
*
* DUMP <address> [<count>]
*/
short mem_cmd_dump(short channel, int argc, char * argv[]) {
unsigned char * address = 0;
long count = 16;
long i;
TRACE("mem_cmd_dump");
if (argc >= 2) {
address = (unsigned char *)cli_eval_number(argv[1]);
if (argc > 2) {
count = cli_eval_number(argv[2]);
}
dump_buffer(channel, address, count, 2);
return 0;
} else {
log(LOG_ERROR, "USAGE: DUMP <address> <count>");
return -1;
}
}
/*
* Write an 8-bit byte to memory
*
* POKE8 <address> <value>
*/
short mem_cmd_poke8(short channel, int argc, char * argv[]) {
TRACE("mem_cmd_poke8");
if (argc == 3) {
unsigned char * address = (unsigned char *)cli_eval_number(argv[1]);
unsigned char c = (unsigned char)cli_eval_number(argv[2]);
*address = c;
return 0;
} else {
log(LOG_ERROR, "USAGE: POKE8 <address> <value>");
return -1;
}
}
/*
* Read an 8-bit byte from memory and display it
*
* PEEK8 <address>
*/
short mem_cmd_peek8(short channel, int argc, char * argv[]) {
TRACE("mem_cmd_peek8");
if (argc == 2) {
unsigned char * address = (unsigned char *)cli_eval_number(argv[1]);
unsigned char c = *address;
print_hex_8(channel, c);
return c;
} else {
log(LOG_ERROR, "USAGE: PEEK8 <address>");
return -1;
}
}
/*
* Write an 16-bit word to memory
*
* POKE16 <address> <value>
*/
short mem_cmd_poke16(short channel, int argc, char * argv[]) {
TRACE("mem_cmd_poke16");
if (argc == 3) {
unsigned short * address = (unsigned short *)cli_eval_number(argv[1]);
unsigned short c = (unsigned short)cli_eval_number(argv[2]);
*address = c;
return 0;
} else {
log(LOG_ERROR, "USAGE: POKE16 <address> <value>");
return -1;
}
}
/*
* Read an 16-bit word from memory and display it
*
* PEEK16 <address>
*/
short mem_cmd_peek16(short channel, int argc, char * argv[]) {
TRACE("mem_cmd_peek16");
if (argc == 2) {
unsigned short * address = (unsigned char *)cli_eval_number(argv[1]);
unsigned short c = *address;
print_hex_16(channel, c);
return c;
} else {
log(LOG_ERROR, "USAGE: PEEK16 <address>");
return -1;
}
}
/*
* Write an 32-bit long word to memory
*
* POKE32 <address> <value>
*/
short mem_cmd_poke32(short channel, int argc, char * argv[]) {
TRACE("mem_cmd_poke32");
if (argc == 3) {
unsigned long * address = (unsigned long *)cli_eval_number(argv[1]);
unsigned long c = (unsigned long)cli_eval_number(argv[2]);
*address = c;
return 0;
} else {
log(LOG_ERROR, "USAGE: POKE32 <address> <value>");
return -1;
}
}
/*
* Read an 32-bit long word from memory and display it
*
* PEEK32 <address>
*/
short mem_cmd_peek32(short channel, int argc, char * argv[]) {
TRACE("mem_cmd_peek32");
if (argc == 2) {
unsigned long * address = (unsigned char *)cli_eval_number(argv[1]);
unsigned long c = *address;
print_hex_32(channel, c);
return 0;
} else {
log(LOG_ERROR, "USAGE: PEEK32 <address>");
return -1;
}
}