mirror of
https://github.com/hsoft/collapseos.git
synced 2024-12-25 04:58:05 +11:00
Streamline initialization process
Instead of letting each configuration taking care of RDLN$ and "CollapseOS" prompt, move this to BOOT to simplify xcomp units. Initialization source code is now only for driver initialization.
This commit is contained in:
parent
0163af470a
commit
ca60685067
23
blk/090
23
blk/090
@ -1,15 +1,10 @@
|
|||||||
4. Call INTERPRET
|
4. Call INTERPRET which interprets boot source code until
|
||||||
|
ASCII EOT (4) is met. This usually init drivers.
|
||||||
|
5. Initialize rdln buffer, _sys entry (for EMPTY), prints
|
||||||
|
"CollapseOS" and then calls (main).
|
||||||
|
6. (main) interprets from rdln input (usually from KEY) until
|
||||||
|
EOT is met, then calls BYE.
|
||||||
|
|
||||||
In other words, BOOT interprets bytes directly following
|
In RAM-only environment, we will typically have a
|
||||||
CURRENT as Forth source code. This code will typically
|
"CURRENT @ HERE !" line during init to have HERE begin at the
|
||||||
initialize all subsystems and then call RDLN$. As soon as
|
end of the binary instead of RAMEND.
|
||||||
this is called, INTERPRET will begin reading from RDLN< which
|
|
||||||
reads from KEY.
|
|
||||||
|
|
||||||
In the "/emul" binaries, "HERE" is readjusted to "CURRENT @" so
|
|
||||||
that we don't have to relocate compiled dicts. Note that in
|
|
||||||
this context, the initialization code is fighting for space
|
|
||||||
with HERE: New entries to the dict will overwrite that code!
|
|
||||||
Also, because we're barebone, we can't have comments. This can
|
|
||||||
lead to peculiar code in this area where we try to "waste"
|
|
||||||
space in initialization code.
|
|
||||||
|
1
blk/405
1
blk/405
@ -1,5 +1,6 @@
|
|||||||
: WS? 33 < ;
|
: WS? 33 < ;
|
||||||
: EOT? 4 = ; ( 4 == ASCII EOT, CTRL+D )
|
: EOT? 4 = ; ( 4 == ASCII EOT, CTRL+D )
|
||||||
|
: EOT, 4 C, ;
|
||||||
|
|
||||||
: TOWORD
|
: TOWORD
|
||||||
0 ( dummy ) BEGIN
|
0 ( dummy ) BEGIN
|
||||||
|
4
blk/417
4
blk/417
@ -2,8 +2,8 @@
|
|||||||
H@ 0x3c ( BLK(* ) RAM+ !
|
H@ 0x3c ( BLK(* ) RAM+ !
|
||||||
1024 ALLOT
|
1024 ALLOT
|
||||||
( LOAD detects end of block with ASCII EOT. This is why
|
( LOAD detects end of block with ASCII EOT. This is why
|
||||||
we write it there. EOT == 0x04 )
|
we write it there. )
|
||||||
4 C,
|
EOT,
|
||||||
0 BLKDTY !
|
0 BLKDTY !
|
||||||
-1 BLK> !
|
-1 BLK> !
|
||||||
;
|
;
|
||||||
|
1
blk/421
1
blk/421
@ -11,6 +11,5 @@
|
|||||||
: BS 8 EMIT ; : LF 10 EMIT ; : CR 13 EMIT ;
|
: BS 8 EMIT ; : LF 10 EMIT ; : CR 13 EMIT ;
|
||||||
: CRLF CR LF ; : SPC 32 EMIT ;
|
: CRLF CR LF ; : SPC 32 EMIT ;
|
||||||
: NL 0x0a RAM+ @ ( NLPTR ) DUP IF EXECUTE ELSE DROP CRLF THEN ;
|
: NL 0x0a RAM+ @ ( NLPTR ) DUP IF EXECUTE ELSE DROP CRLF THEN ;
|
||||||
: (ok) SPC LIT" ok" (print) NL ;
|
|
||||||
: (uflw) LIT" stack underflow" ERR ;
|
: (uflw) LIT" stack underflow" ERR ;
|
||||||
: (wnf) (print) SPC LIT" word not found" ERR ;
|
: (wnf) (print) SPC LIT" word not found" ERR ;
|
||||||
|
2
blk/432
2
blk/432
@ -2,7 +2,7 @@
|
|||||||
BEGIN
|
BEGIN
|
||||||
WORD DUP C@ EOT? IF DROP EXIT THEN
|
WORD DUP C@ EOT? IF DROP EXIT THEN
|
||||||
(find) NOT IF (parse) ELSE EXECUTE THEN
|
(find) NOT IF (parse) ELSE EXECUTE THEN
|
||||||
C<? NOT IF (ok) THEN
|
C<? NOT IF SPC LIT< ok (print) NL THEN
|
||||||
AGAIN ;
|
AGAIN ;
|
||||||
( Read from BOOT C< PTR and inc it. )
|
( Read from BOOT C< PTR and inc it. )
|
||||||
: (boot<)
|
: (boot<)
|
||||||
|
4
blk/436
4
blk/436
@ -9,4 +9,6 @@
|
|||||||
( 0c == C<* )
|
( 0c == C<* )
|
||||||
['] (boot<) 0x0c RAM+ !
|
['] (boot<) 0x0c RAM+ !
|
||||||
( boot< always has a char waiting. 06 == C<?* )
|
( boot< always has a char waiting. 06 == C<?* )
|
||||||
1 0x06 RAM+ ! (main) ;
|
1 0x06 RAM+ ! INTERPRET
|
||||||
|
RDLN$ LIT< _sys [entry]
|
||||||
|
LIT< CollapseOS (print) NL (main) ;
|
||||||
|
2
blk/618
2
blk/618
@ -12,4 +12,4 @@ RAMSTART 0x70 + CONSTANT ACIA_MEM
|
|||||||
(entry) _
|
(entry) _
|
||||||
( Update LATEST )
|
( Update LATEST )
|
||||||
PC ORG @ 8 + !
|
PC ORG @ 8 + !
|
||||||
," : _ ACIA$ RDLN$ (ok) ; _ "
|
," ACIA$ " EOT,
|
||||||
|
BIN
emul/forth.bin
BIN
emul/forth.bin
Binary file not shown.
@ -28,13 +28,9 @@
|
|||||||
( Update LATEST )
|
( Update LATEST )
|
||||||
PC ORG @ 8 + !
|
PC ORG @ 8 + !
|
||||||
," CURRENT @ HERE ! "
|
," CURRENT @ HERE ! "
|
||||||
," : INIT "
|
|
||||||
," BLK$ "
|
," BLK$ "
|
||||||
," ['] EFS@ BLK@* ! "
|
," ' EFS@ BLK@* ! "
|
||||||
," ['] EFS! BLK!* ! "
|
," ' EFS! BLK!* ! "
|
||||||
," RDLN$ "
|
EOT,
|
||||||
," LIT< _sys [entry] "
|
|
||||||
," LIT< CollapseOS (print) NL "
|
|
||||||
," ; INIT "
|
|
||||||
ORG @ 256 /MOD 2 PC! 2 PC!
|
ORG @ 256 /MOD 2 PC! 2 PC!
|
||||||
H@ 256 /MOD 2 PC! 2 PC!
|
H@ 256 /MOD 2 PC! 2 PC!
|
||||||
|
@ -68,6 +68,6 @@ CREATE ~FNT CPFNT3x5
|
|||||||
(entry) _
|
(entry) _
|
||||||
( Update LATEST )
|
( Update LATEST )
|
||||||
PC ORG @ 8 + !
|
PC ORG @ 8 + !
|
||||||
," : _ LCD$ KBD$ (ok) RDLN$ ; _ "
|
," LCD$ KBD$ " EOT,
|
||||||
ORG @ 0x100 - 256 /MOD 2 PC! 2 PC!
|
ORG @ 0x100 - 256 /MOD 2 PC! 2 PC!
|
||||||
H@ 256 /MOD 2 PC! 2 PC!
|
H@ 256 /MOD 2 PC! 2 PC!
|
||||||
|
@ -15,6 +15,6 @@ RS_ADDR 0x80 - CONSTANT RAMSTART
|
|||||||
PC ORG @ 8 + !
|
PC ORG @ 8 + !
|
||||||
," CURRENT @ HERE ! "
|
," CURRENT @ HERE ! "
|
||||||
( 0x0a == NLPTR. TRS-80 wants CR-only newlines )
|
( 0x0a == NLPTR. TRS-80 wants CR-only newlines )
|
||||||
," : _ ['] CR 0x0a RAM+ ! BLK$ FD$ (ok) RDLN$ ; _ "
|
," ' CR 0x0a RAM+ ! BLK$ FD$ " EOT,
|
||||||
ORG @ 256 /MOD 2 PC! 2 PC!
|
ORG @ 256 /MOD 2 PC! 2 PC!
|
||||||
H@ 256 /MOD 2 PC! 2 PC!
|
H@ 256 /MOD 2 PC! 2 PC!
|
||||||
|
Loading…
Reference in New Issue
Block a user