#include "hexfile.h"
#include "keyboard.h"
-/* Maximum number of BreakPoints */
-#define MAXBP 32
-
-static int RunningState;
-static int NbBreakpoints;
-static unsigned int Breakpoints[MAXBP];
-
/* Capitalize all letters in buffer */
static void
Capitalize(char *buffer)
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)
" 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]]",
}
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':
cpu8051_init();
- RunningState = 0;
- NbBreakpoints = 0;
-
hex_file = get_hex_filename();
if (hex_file != NULL)
LoadHexFile(hex_file);
console_main();
+
+#ifdef EMU8051_DEBUG
printf("End of program.\n");
+#endif
return 0;
}