|
|
1.1 root 1: /* Mini-monitor for testing boot code.
2: *
3: * La Monte H. Yarroll <[email protected]>, September 1991
4: */
5:
6:
7: #include <ctype.h>
8: #include <canon.h>
9: #include <sys/types.h>
10: #include <sys/ino.h>
11: #include <sys/inode.h>
12: #include <sys/dir.h>
13: #include "tboot.h"
14:
15: #define PROMPT ": "
16:
17: void
18: monitor()
19: {
20: int i, j;
21: uint16 segment, offset;
22:
23: char buff[LINESIZE]; /* Buffer for outputing numbers. */
24: unsigned char localdata[BLOCK];
25:
26: /* Value of ds register, initialized in Startup.s. */
27: extern uint16 myds;
28:
29:
30: puts("\r\nWelcome to the tboot mini-monitor!\r\n");
31: puts("g to continue, ? for help.\r\n");
32:
33: puts(PROMPT);
34: gets(buff);
35: puts("\r\n");
36:
37: while (buff[0] != 'g') {
38: switch (buff[0]) {
39: case 'd': /* Display the next 16 bytes. */
40: case 'D':
41: /* Fetch the memory we want to examine. */
42: ffcopy(localdata, myds, offset, segment, BLOCK);
43:
44: for (j=0; j < 8; ++j) {
45: /* Format is segm:offs 00 00 00 00 etc... */
46:
47: /* Print the segm:offs part for each line. */
48: print16(segment);
49: putchar(':');
50: print16(offset);
51: putchar(' ');
52:
53: /* Print one line worth of numbers. */
54: for (i=0; i < 16; ++i) {
55: print8(localdata[(j*16) + i]);
56:
57: /* Put in a dash after the eigth byte. */
58: if (7 == i) {
59: putchar('-');
60: } else {
61: putchar(' ');
62: }
63: }
64:
65: /* Print the characters for the numbers. */
66: puts(" ");
67: for (i=0; i < 16; ++i) {
68: if (isprint(localdata[(j*16) +i])) {
69: putchar(localdata[(j*16) +i]);
70: } else {
71: putchar('.');
72: }
73: }
74:
75: puts("\r\n");
76: /* Position for next line. */
77: seginc(&offset, &segment, 16);
78: }
79:
80: break;
81:
82: case 'o': /* Set/print offset. */
83: case 'O':
84: if ('\0' != buff[1]) {
85: offset = basetoi(buff+1, 16);
86: }
87: puts("Offset: ");
88: print16(offset);
89: puts("\r\n");
90: break;
91:
92: case 's': /* Set/print segment. */
93: case 'S':
94: if ('\0' != buff[1]) {
95: segment = basetoi(buff+1, 16);
96: }
97: puts("Segment: ");
98: print16(segment);
99: puts("\r\n");
100: break;
101:
102: case '?':
103: puts("g go (return to program).\r\n");
104: puts("oxxxx set offset to xxxx.\r\n");
105: puts("sxxxx set segment to xxxx.\r\n");
106: puts("d display next 16 bytes.\r\n");
107: break;
108: default:
109: break;
110: }
111:
112: puts(PROMPT);
113: gets(buff);
114: puts("\r\n");
115: }
116: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.