1
0
mirror of https://github.com/hsoft/collapseos.git synced 2024-09-21 11:08:46 +10:00
collapseos/recipes/z80mbc2/xcomp.fs
Virgil Dupras 705d68deec Move most of the high layer of comp core into the low one
With KEY and EMIT being switch words, most of the high layer can
be defined before drivers.

In addition to this change, I've compacted core blocks which were
becoming quite sparse.
2020-10-28 18:18:00 -04:00

44 lines
1.1 KiB
Forth

0xff00 CONSTANT RS_ADDR 0xfffa CONSTANT PS_ADDR
RS_ADDR 0x80 - 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)
BEGIN, 1 INAi, A INCr, JRZ, AGAIN,
A DECr, PUSHA,
;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 @ 256 /MOD 2 PC! 2 PC!
H@ 256 /MOD 2 PC! 2 PC!