0xff00 CONSTANT RS_ADDR 0xfffa CONSTANT PS_ADDR RS_ADDR 0x80 - CONSTANT RAMSTART 750 LOAD ( 8086 asm ) 262 LOAD ( xcomp ) 270 LOAD ( xcomp overrides ) 812 829 LOADR 353 LOAD ( xcomp core low ) CODE (emit) 1 chkPS, AX POPx, AH 0x0e MOVri, ( print char ) 0x10 INT, ;CODE CODE (key) AH AH XORrr, 0x16 INT, AH AH XORrr, AX PUSHx, ;CODE CODE 13H08H ( driveno -- cx dx ) DI POPx, DX PUSHx, ( protect ) DX DI MOVxx, AX 0x800 MOVxI, DI DI XORxx, ES DI MOVsx, 0x13 INT, DI DX MOVxx, DX POPx, ( unprotect ) CX PUSHx, DI PUSHx, DI 0x800 MOVxI, ES DI MOVsx, ;CODE CODE 13H ( ax bx cx dx -- ax bx cx dx ) SI POPx, ( DX ) CX POPx, BX POPx, AX POPx, DX PUSHx, ( protect ) DX SI MOVxx, DI DI XORxx, 0x13 INT, SI DX MOVxx, DX POPx, ( unprotect ) AX PUSHx, BX PUSHx, CX PUSHx, SI PUSHx, ;CODE : FDSPT 0x70 RAM+ ; : FDHEADS 0x71 RAM+ ; : _ ( dest secno ) ( AH=read sectors, AL=1 sector, BX=dest, CH=trackno CL=secno DH=head DL=drive ) 0x0201 ROT ROT ( AX BX sec ) FDSPT C@ /MOD ( AX BX sec trk ) FDHEADS C@ /MOD ( AX BX sec head trk ) 8 LSHIFT ROT OR 1+ ( AX BX head CX ) SWAP 8 LSHIFT 0x03 C@ ( boot drive ) OR ( AX BX CX DX ) 13H 2DROP 2DROP ; : FD@ 2 * 16 + ( blkfs starts at sector 16 ) BLK( OVER _ BLK( 0x200 + SWAP 1+ _ ; : FD! DROP ; : FD$ ( get number of sectors per track with command 08H. ) 0x03 ( boot drive ) C@ 13H08H 8 RSHIFT 1+ FDHEADS C! 0x3f AND FDSPT C! ; 380 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!