recipes/rc2014/selfhost: add verification instructions

This commit is contained in:
Virgil Dupras 2020-04-27 09:24:40 -04:00
parent 6c51ea1ebb
commit efed0e249e
2 changed files with 14 additions and 4 deletions

View File

@ -77,3 +77,14 @@ You're looking at the offset of the last wordref of the *previous* LOAD
operation. That offset is going in `XCURRENT`. Then, you're looking at the end operation. That offset is going in `XCURRENT`. Then, you're looking at the end
of that word. That offset goes in `HERE`. Once you've done that, relaunch your of that word. That offset goes in `HERE`. Once you've done that, relaunch your
LOAD. LOAD.
### Verifying
You can use `/tools/memdump` to dump the memory between your start/stop offsets
so that you can compare against your reference stage 1. Before you do, you have
to take yourself out of xcomp mode. First, run `XCOFF` to go back to your
regular dict. Then, run `FORGET CODE` to undo the xcomp overrides you've added
before. That will rewind `HERE`. You don't want that. Put `HERE` back to after
your ending offset so that you don't overwrite your binary.
Then, you can run `/tools/memdump`.

View File

@ -5,7 +5,7 @@
#include "common.h" #include "common.h"
/* Read specified number of bytes at specified memory address through a BASIC /* Read specified number of bytes at specified memory address through a Forth
* remote shell and dump it to stdout. * remote shell and dump it to stdout.
*/ */
@ -29,9 +29,7 @@ int main(int argc, char **argv)
int fd = open(argv[1], O_RDWR|O_NOCTTY); int fd = open(argv[1], O_RDWR|O_NOCTTY);
char s[0x30]; char s[0x30];
sprintf(s, "m=0x%04x", memptr); sprintf(s, ": _ 0x%04x 0x%04x DO I @ .x LOOP ; _", memptr+bytecount, memptr);
sendcmdp(fd, s);
sprintf(s, "while m<0x%04x peek m:puth a:m=m+1", memptr+bytecount);
sendcmd(fd, s); sendcmd(fd, s);
for (int i=0; i<bytecount; i++) { for (int i=0; i<bytecount; i++) {
@ -41,5 +39,6 @@ int main(int argc, char **argv)
putchar(c); putchar(c);
} }
read(fd, s, 2); // read prompt read(fd, s, 2); // read prompt
sendcmdp(fd, "FORGET _");
return 0; return 0;
} }