d09de0a0d3
In the beginning of Collapse OS' Forth version, the readline sub- system was optional. This is why we had this separate RDLN$ routine and that the input buffer was allocated at boot time. It's been a while since the RDLN system has been made mandatory, but we still paid the complexity tax of this separation. Not anymore.
44 lines
1.1 KiB
Forth
44 lines
1.1 KiB
Forth
0xff00 CONSTANT RS_ADDR 0xfffa CONSTANT PS_ADDR
|
|
RS_ADDR 0xa0 - CONSTANT SYSVARS
|
|
0 CONSTANT HERESTART
|
|
5 LOAD ( z80 assembler )
|
|
262 LOAD ( xcomp )
|
|
282 LOAD ( boot.z80.decl )
|
|
270 LOAD ( xcomp overrides )
|
|
283 335 LOADR ( boot.z80 )
|
|
353 LOAD ( xcomp core low )
|
|
CODE (emit)
|
|
A 1 LDri, 1 OUTiA, HL POP, A L LDrr, 0 OUTiA,
|
|
;CODE
|
|
CODE (key?) ( TODO: make non-blocking )
|
|
BEGIN, 1 INAi, A INCr, JRZ, AGAIN,
|
|
A DECr, PUSHA, PUSH1,
|
|
;CODE
|
|
: _sel ( sec )
|
|
( 32 sectors per track, 512 tracks per disk )
|
|
32 /MOD ( addr sec trk )
|
|
0x0a ( seltrk ) 1 PC! 0 PC! 0 0 PC! ( addr sec )
|
|
0x0b ( selsec ) 1 PC! 0 PC! ( addr ) ;
|
|
: _ ( addr )
|
|
( get 512 bytes )
|
|
0x86 ( readsec ) 1 PC!
|
|
512 0 DO 0 PC@ SWAP C!+ LOOP DROP
|
|
;
|
|
: FD@ 2 * DUP _sel BLK( _ 1+ _sel BLK( 512 + _ ;
|
|
: _ ( addr )
|
|
( write 512 bytes )
|
|
0x0c ( writesec ) 1 PC!
|
|
512 0 DO C@+ 0 PC! LOOP DROP
|
|
;
|
|
: FD! 2 * DUP _sel BLK( _ 1+ _sel BLK( 512 + _ ;
|
|
: FD$ ( select disk 0 )
|
|
0x09 ( seldisk ) 1 PC! 0 0 PC! ( sel disk 0 )
|
|
;
|
|
390 LOAD ( xcomp core high )
|
|
(entry) _
|
|
( Update LATEST )
|
|
PC ORG @ 8 + !
|
|
," BLK$ FD$ ' FD@ BLK@* ! ' FD! BLK!* ! " EOT,
|
|
ORG @ |M 2 PC! 2 PC!
|
|
H@ |M 2 PC! 2 PC!
|