3 CONSTS $ff00 RS_ADDR $fffa PS_ADDR 0 HERESTART RS_ADDR $80 - CONSTANT SYSVARS SYSVARS $409 - CONSTANT BLK_MEM ARCHM XCOMP Z80A XCOMPC Z80C COREL CODE (emit) A 1 LDri, 1 OUTiA, A C LDrr, 0 OUTiA, BC POP, ;CODE CODE (key?) ( TODO: make non-blocking ) BC PUSH, BEGIN, 1 INAi, A INCr, BR JRZ, A DECr, PUSHA, C 1 LDri, ;CODE : _sel ( sec -- ) ( 32 sectors per track, 512 tracks per disk ) 32 /MOD ( addr sec trk ) $0a ( seltrk ) 1 PC! 0 PC! 0 0 PC! ( addr sec ) $0b ( selsec ) 1 PC! 0 PC! ( addr ) ; : _ ( addr -- ) ( get 512 bytes ) $86 ( readsec ) 1 PC! 512 >R BEGIN 0 PC@ SWAP C!+ NEXT DROP ; : (blk@) ( blkno blk( -- ) SWAP << ( 2x ) 2DUP ( a b a b ) _sel _ 1+ _sel 512 + _ ; : _ ( addr ) ( write 512 bytes ) $0c ( writesec ) 1 PC! 512 >R BEGIN C@+ 0 PC! NEXT DROP ; : (blk!) ( blkno blk( -- ) SWAP << ( 2x ) 2DUP ( a b a b ) _sel _ 1+ _sel 512 + _ ; BLKSUB : FD$ ( select disk 0 ) $09 ( seldisk ) 1 PC! 0 0 PC! ( sel disk 0 ) ; : INIT BLK$ FD$ ; XWRAP