2020-06-22 19:08:19 -04:00
|
|
|
0xff00 CONSTANT RS_ADDR 0xfffa CONSTANT PS_ADDR
|
2021-01-02 14:20:50 -05:00
|
|
|
RS_ADDR 0xa0 - CONSTANT SYSVARS
|
2020-06-28 19:45:28 -04:00
|
|
|
0 CONSTANT HERESTART
|
2020-09-21 17:51:08 -04:00
|
|
|
5 LOAD ( z80 assembler )
|
2020-06-26 21:41:17 -04:00
|
|
|
262 LOAD ( xcomp )
|
|
|
|
282 LOAD ( boot.z80.decl )
|
|
|
|
270 LOAD ( xcomp overrides )
|
|
|
|
283 335 LOADR ( boot.z80 )
|
|
|
|
353 LOAD ( xcomp core low )
|
2020-06-22 19:08:19 -04:00
|
|
|
CODE (emit)
|
2020-09-20 09:01:11 -04:00
|
|
|
A 1 LDri, 1 OUTiA, HL POP, A L LDrr, 0 OUTiA,
|
2020-06-22 19:08:19 -04:00
|
|
|
;CODE
|
Make KEY non-blocking
... and rename it to KEY?. Then, add KEY from KEY? for its blocking
version.
I need this for an upcoming Remote Shell feature. If a Collapse OS
system remotely controls another shell, it needs to be able to poll
both the remote system and the local keyboard at the same time. A
blocking KEY is incompatible with this.
In some places, the polling mechanism doesn't make sense, so this
new KEY? always returns a character. In some places, I just haven't
implemented the mechanism yet, so I kept the old blocking code and
added a "always 1" flag as a temporary shim.
I have probably broken something, but in emulators, Collapse OS runs
fine. It's an important reminder of what will be lost with the new
"dogfooding" approach (see recent mailing list message): without
emulators, it's much harder to to sweeping changes like this without
breaking stuff.
It's fine, I don't expect many more of these core changes to the
system. It's nearly feature-complete.
2021-01-01 08:05:29 -05:00
|
|
|
CODE (key?) ( TODO: make non-blocking )
|
2020-09-20 09:01:11 -04:00
|
|
|
BEGIN, 1 INAi, A INCr, JRZ, AGAIN,
|
Make KEY non-blocking
... and rename it to KEY?. Then, add KEY from KEY? for its blocking
version.
I need this for an upcoming Remote Shell feature. If a Collapse OS
system remotely controls another shell, it needs to be able to poll
both the remote system and the local keyboard at the same time. A
blocking KEY is incompatible with this.
In some places, the polling mechanism doesn't make sense, so this
new KEY? always returns a character. In some places, I just haven't
implemented the mechanism yet, so I kept the old blocking code and
added a "always 1" flag as a temporary shim.
I have probably broken something, but in emulators, Collapse OS runs
fine. It's an important reminder of what will be lost with the new
"dogfooding" approach (see recent mailing list message): without
emulators, it's much harder to to sweeping changes like this without
breaking stuff.
It's fine, I don't expect many more of these core changes to the
system. It's nearly feature-complete.
2021-01-01 08:05:29 -05:00
|
|
|
A DECr, PUSHA, PUSH1,
|
2020-06-22 19:08:19 -04:00
|
|
|
;CODE
|
2020-06-22 21:21:24 -04:00
|
|
|
: _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 )
|
|
|
|
;
|
2020-10-28 18:06:58 -04:00
|
|
|
390 LOAD ( xcomp core high )
|
2020-06-22 19:08:19 -04:00
|
|
|
(entry) _
|
|
|
|
( Update LATEST )
|
|
|
|
PC ORG @ 8 + !
|
2020-06-28 19:45:28 -04:00
|
|
|
," BLK$ FD$ ' FD@ BLK@* ! ' FD! BLK!* ! " EOT,
|
2020-12-07 20:08:45 -05:00
|
|
|
ORG @ |M 2 PC! 2 PC!
|
|
|
|
H@ |M 2 PC! 2 PC!
|