#include "hexfile.h"
#include "keyboard.h"
-/* Maximum number of BreakPoints */
-#define MAXBP 32
-
-static int RunningState;
-static int NbBreakpoints;
-static unsigned int Breakpoints[MAXBP];
+extern struct options_t options;
/* Capitalize all letters in buffer */
static void
strcpy(buffer, &buffer[k]);
}
-/* Is the a breakpoint at Address */
-static int
-IsBreakpoint(unsigned int Address)
-{
- int Index = 0;
- while (Index < NbBreakpoints && (Breakpoints[Index] != Address))
- Index++;
-
- return ((Breakpoints[Index] == Address) && (Index < NbBreakpoints));
-}
-
-/* Show Breakpoints list */
-static void
-ShowBreakpoints(void)
-{
- int Index;
-
- for (Index = 0; Index < NbBreakpoints ; Index++)
- printf("Breakpoint at Address = %.4X\n", Breakpoints[Index]);
-}
-
-/* Clear Breakpoint at Address from list */
-static void
-ClearBreakpoint(unsigned int Address)
-{
- int Index = 0;
- while ((Index < NbBreakpoints) && (Breakpoints[Index] != Address))
- Index++;
- if (Breakpoints[Index] != Address)
- return;
- Breakpoints[Index] = Breakpoints[NbBreakpoints - 1];
- NbBreakpoints--;
-}
-
-/* Set Breakpoint at Address from list */
-static void
-SetBreakpoint(unsigned int Address)
-{
- if (IsBreakpoint(Address))
- return;
- if (NbBreakpoints < MAXBP)
- Breakpoints[NbBreakpoints++] = Address;
-}
-
/* CPU exec and Console UI update */
static void
console_exec(char *Address, char *NumberInst)
{
- char dummy;
int NbInst = -1; /* -1 is infinity */
if (strlen(Address) == 0) {
printf("Invalid address\n");
NbInst--;
} while (!IsBreakpoint(cpu8051.pc) && (NbInst != 0) && !kbhit());
if (kbhit()) {
- dummy = getch(); /* Flush key */
+ (void) getch(); /* Flush key */
printf("Caught break signal!\n");
}
if (NbInst == 0)
" Set Breakpoint.............. SB [address]",
" Remove Breakpoint........... RB [address]",
" Display Breakpoint(s)....... DB",
- " Dump External Data Memory... DE [address]",
- " Dump Internal Data Memory... DI [address]",
- " Dump Program Memory......... DP [address]",
+ " Dump External Data Memory... DE [address] [size]",
+ " Dump Internal Data Memory... DI [address] [size]",
+ " Dump Program Memory......... DP [address] [size]",
" Display Registers content... DR",
" Execute..................... EM [address"
" [number of instructions]]",
while (!QuitRequest) {
int slen;
size_t len = 0;
- ssize_t bytes_read;
char Command[256];
char Args[256];
char Parameter1[256];
Parameter2[0] = '\0';
printf(prompt);
- bytes_read = getline(&line, &len, stdin);
+ (void) getline(&line, &len, stdin);
Capitalize(line);
RemoveSpaces(line);
}
switch (Command[0]) {
- case 'D':
- if (strlen(Parameter2) == 0) {
- char buf[1024];
-
- if (STREQ(Command, "DB") &&
- (strlen(Parameter1) == 0))
- ShowBreakpoints();
- else if (STREQ(Command, "DE")) {
- DumpMem(buf, Parameter1, EXT_MEM_ID);
- printf(buf);
- } else if (STREQ(Command, "DI")) {
- DumpMem(buf, Parameter1, INT_MEM_ID);
- printf(buf);
- } else if (STREQ(Command, "DP")) {
- if ((strlen(Parameter1) == 0))
- strcpy(Parameter1, "PC");
- DumpMem(buf, Parameter1, PGM_MEM_ID);
- printf(buf);
- } else if (STREQ(Command, "DR") &&
- (strlen(Parameter1) == 0))
- console_show_registers();
- else
- goto syntax_error;
- } else
+ case 'D':
+ if (STREQ(Command, "DB") &&
+ (strlen(Parameter1) == 0))
+ ShowBreakpoints();
+ else if (STREQ(Command, "DE"))
+ DumpMem(Parameter1, Parameter2, EXT_MEM_ID);
+ else if (STREQ(Command, "DI"))
+ DumpMem(Parameter1, Parameter2, INT_MEM_ID);
+ else if (STREQ(Command, "DP")) {
+ if ((strlen(Parameter1) == 0))
+ strcpy(Parameter1, "PC");
+ DumpMem(Parameter1, Parameter2, PGM_MEM_ID);
+ } else if (STREQ(Command, "DR") &&
+ (strlen(Parameter1) == 0))
+ console_show_registers();
+ else
goto syntax_error;
break;
case 'E':
int
main(int argc, char **argv)
{
- char *hex_file;
-
- ParseCommandLineOptions(argc, argv);
+ parse_command_line_options(argc, argv);
cpu8051_init();
- RunningState = 0;
- NbBreakpoints = 0;
-
- hex_file = get_hex_filename();
-
- if (hex_file != NULL)
- LoadHexFile(hex_file);
+ if (options.filename != NULL)
+ LoadHexFile(options.filename);
console_main();
- printf("End of program.\n");
+
+ log_info("Terminate");
return 0;
}