Compare commits
4 Commits
1c6e979028
...
521ff84ca4
Author | SHA1 | Date | |
---|---|---|---|
|
521ff84ca4 | ||
|
71d1350143 | ||
|
a09e552ccc | ||
|
400f0ab0b0 |
Binary file not shown.
Binary file not shown.
@ -9,3 +9,7 @@ Run `make` to build.
|
||||
|
||||
Run `./classic /path/to/rom` (for example, `os.bin` from RC2014's recipe).
|
||||
Serial I/O is hooked to stdin/stdout. `CTRL+D` to quit.
|
||||
|
||||
## Memory dump
|
||||
|
||||
You can press `CTRL+E` to dump the whole 64K of memory into `memdump`.
|
||||
|
@ -101,6 +101,13 @@ int main(int argc, char *argv[])
|
||||
if (!tosend) {
|
||||
char c;
|
||||
if (read(fileno(stdin), &c, 1) == 1) {
|
||||
if (c == 5) {
|
||||
fprintf(stderr, "Dumping memory to memdump\n");
|
||||
FILE *fp = fopen("memdump", "w");
|
||||
fwrite(m->mem, 0x10000, 1, fp);
|
||||
fclose(fp);
|
||||
c = 0; // don't send to RC2014
|
||||
}
|
||||
if (c == 4) { // CTRL+D
|
||||
// Stop here
|
||||
break;
|
||||
|
@ -218,7 +218,7 @@ PC ORG @ 0x29 + ! ( flagsToBC )
|
||||
BC 0 LDddnn,
|
||||
CZ RETcc, ( equal )
|
||||
BC INCss,
|
||||
CM RETcc, ( > )
|
||||
CC RETcc, ( > )
|
||||
( < )
|
||||
BC DECss,
|
||||
BC DECss,
|
||||
|
@ -196,17 +196,17 @@
|
||||
( system c< simply reads source from binary, starting at
|
||||
LATEST. Convenient way to bootstrap a new system. )
|
||||
: (c<)
|
||||
( 51 == SYSTEM SCRATCHPAD )
|
||||
0x51 _c RAM+ _c @ ( a )
|
||||
( 60 == SYSTEM SCRATCHPAD )
|
||||
0x60 _c RAM+ _c @ ( a )
|
||||
_c DUP _c C@ ( a c )
|
||||
_c SWAP 1 _c + ( c a+1 )
|
||||
0x51 _c RAM+ _c ! ( c )
|
||||
0x60 _c RAM+ _c ! ( c )
|
||||
;
|
||||
|
||||
: BOOT
|
||||
LIT< (parse) _c (find) _c DROP _c (parse*) _c !
|
||||
( 51 == SYSTEM SCRATCHPAD )
|
||||
_c CURRENT _c @ 0x51 _c RAM+ _c !
|
||||
( 60 == SYSTEM SCRATCHPAD )
|
||||
_c CURRENT _c @ 0x60 _c RAM+ _c !
|
||||
( 0c == CINPTR )
|
||||
LIT< (c<) _c (find) _c DROP 0x0c _c RAM+ _c !
|
||||
LIT< INIT _c (find)
|
||||
|
@ -1,11 +1,13 @@
|
||||
( depends: cmp
|
||||
( depends: cmp, parse
|
||||
Relink a dictionary by applying offsets to all word
|
||||
references in words of the "compiled" type.
|
||||
|
||||
A typical usage of this unit would be to, right after a
|
||||
bootstrap-from-icore-from-source operation, to copy the
|
||||
dictionary from '< H@ to CURRENT, and then call RLDICT on
|
||||
that new range, with "ol" set to ' H@.
|
||||
bootstrap-from-icore-from-source operation, identify the
|
||||
root word of the source part, probably "H@", and run
|
||||
" ' thatword COMPACT ". Then, take the resulting relinked
|
||||
binary, concatenate it to the boot binary, and write to
|
||||
boot media.
|
||||
)
|
||||
|
||||
( Skip atom, considering special atom types. )
|
||||
@ -21,7 +23,8 @@
|
||||
( a )
|
||||
1 + ( we skip by 2, but the loop below is pre-inc... )
|
||||
BEGIN 1 + DUP C@ NOT UNTIL
|
||||
( a+1 )
|
||||
( skip null char )
|
||||
1 +
|
||||
;
|
||||
|
||||
( Get word header length from wordref. That is, name length
|
||||
@ -78,6 +81,7 @@
|
||||
2OVER ( ol o a2 a1 ol o )
|
||||
SWAP ( ol o a2 a1 o ol )
|
||||
RLATOM ( ol o a2 a+n )
|
||||
2DUP < IF ABORT THEN ( Something is very wrong )
|
||||
2DUP = ( ol o a2 a+n f )
|
||||
IF
|
||||
( unwind )
|
||||
|
@ -247,8 +247,7 @@ CODE @
|
||||
E (HL) LDrr,
|
||||
HL INCss,
|
||||
D (HL) LDrr,
|
||||
EXDEHL,
|
||||
HL PUSHqq,
|
||||
DE PUSHqq,
|
||||
;CODE
|
||||
|
||||
CODE C!
|
||||
|
@ -88,8 +88,9 @@ RAMSTART INITIAL_SP
|
||||
+0e WORDBUF
|
||||
+2e SYSVNXT
|
||||
+4e INTJUMP
|
||||
+51 SYSTEM SCRATCHPAD
|
||||
+60 RAMEND
|
||||
+51 RESERVED
|
||||
+60 SYSTEM SCRATCHPAD
|
||||
+80 RAMEND
|
||||
|
||||
INITIAL_SP holds the initial Stack Pointer value so that we know where to reset
|
||||
it on ABORT
|
||||
@ -119,8 +120,8 @@ SYSTEM SCRATCHPAD is reserved for temporary system storage or can be reserved
|
||||
by low-level drivers. These are the current usages of this space throughout the
|
||||
project:
|
||||
|
||||
* 0x51-0x53: (c<) pointer during in-memory initialization (see below)
|
||||
* 0x53-0x5b: ACIA buffer pointers in RC2014 recipes.
|
||||
* 0x60-0x62: (c<) pointer during in-memory initialization (see below)
|
||||
* 0x62-0x6a: ACIA buffer pointers in RC2014 recipes.
|
||||
|
||||
*** Initialization sequence
|
||||
|
||||
|
@ -2,5 +2,5 @@
|
||||
0xf000 CONSTANT RS_ADDR
|
||||
0x80 CONSTANT ACIA_CTL
|
||||
0x81 CONSTANT ACIA_IO
|
||||
RAMSTART 0x53 + CONSTANT ACIA_MEM
|
||||
RAMSTART 0x62 + CONSTANT ACIA_MEM
|
||||
|
||||
|
@ -2,3 +2,4 @@
|
||||
0x71 <>{ 0x70 &= 0x58 |= 0x20 |= <>} NOT #
|
||||
0x42 <>{ 0x40 &> 0x44 &< <>} #
|
||||
0x44 <>{ 0x40 &> 0x44 &< <>} NOT #
|
||||
0x22 0x8065 < #
|
||||
|
Loading…
Reference in New Issue
Block a user