|
|
coherent
/* Mini-monitor for testing boot code.
*
* La Monte H. Yarroll <[email protected]>, September 1991
*/
#include <ctype.h>
#include <canon.h>
#include <sys/types.h>
#include <sys/ino.h>
#include <sys/inode.h>
#include <sys/dir.h>
#include "tboot.h"
#define PROMPT ": "
void
monitor()
{
int i, j;
uint16 segment, offset;
char buff[LINESIZE]; /* Buffer for outputing numbers. */
unsigned char localdata[BLOCK];
/* Value of ds register, initialized in Startup.s. */
extern uint16 myds;
puts("\r\nWelcome to the tboot mini-monitor!\r\n");
puts("g to continue, ? for help.\r\n");
puts(PROMPT);
gets(buff);
puts("\r\n");
while (buff[0] != 'g') {
switch (buff[0]) {
case 'd': /* Display the next 16 bytes. */
case 'D':
/* Fetch the memory we want to examine. */
ffcopy(localdata, myds, offset, segment, BLOCK);
for (j=0; j < 8; ++j) {
/* Format is segm:offs 00 00 00 00 etc... */
/* Print the segm:offs part for each line. */
print16(segment);
putchar(':');
print16(offset);
putchar(' ');
/* Print one line worth of numbers. */
for (i=0; i < 16; ++i) {
print8(localdata[(j*16) + i]);
/* Put in a dash after the eigth byte. */
if (7 == i) {
putchar('-');
} else {
putchar(' ');
}
}
/* Print the characters for the numbers. */
puts(" ");
for (i=0; i < 16; ++i) {
if (isprint(localdata[(j*16) +i])) {
putchar(localdata[(j*16) +i]);
} else {
putchar('.');
}
}
puts("\r\n");
/* Position for next line. */
seginc(&offset, &segment, 16);
}
break;
case 'o': /* Set/print offset. */
case 'O':
if ('\0' != buff[1]) {
offset = basetoi(buff+1, 16);
}
puts("Offset: ");
print16(offset);
puts("\r\n");
break;
case 's': /* Set/print segment. */
case 'S':
if ('\0' != buff[1]) {
segment = basetoi(buff+1, 16);
}
puts("Segment: ");
print16(segment);
puts("\r\n");
break;
case '?':
puts("g go (return to program).\r\n");
puts("oxxxx set offset to xxxx.\r\n");
puts("sxxxx set segment to xxxx.\r\n");
puts("d display next 16 bytes.\r\n");
break;
default:
break;
}
puts(PROMPT);
gets(buff);
puts("\r\n");
}
}
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.