diff --git a/Source/HBIOS/fd.asm b/Source/HBIOS/fd.asm index dc3d7f9a..284a37e4 100644 --- a/Source/HBIOS/fd.asm +++ b/Source/HBIOS/fd.asm @@ -106,18 +106,18 @@ FD_CFGTBL: .DB 0 ; DEVICE STATUS .DB FDMEDIA ; MEDIA TYPE .DB $FF ; CURRENT TRACK - .DB 0 ; HOST TRACK + .DW 0 ; HOST TRACK .DB 0 ; HOST SECTOR - .DW 0 ; HOST HEAD + .DB 0 ; HOST HEAD #IF (FD_DEVCNT >= 2) ; DEVICE 1, PRIMARY SLAVE .DB 1 ; DRIVER DEVICE NUMBER .DB 0 ; DEVICE STATUS .DB FDMEDIA ; MEDIA TYPE .DB $FF ; CURRENT TRACK - .DB 0 ; HOST TRACK + .DW 0 ; HOST TRACK .DB 0 ; HOST SECTOR - .DW 0 ; HOST HEAD + .DB 0 ; HOST HEAD #ENDIF ; #IF ($ - FD_CFGTBL) != (FD_DEVCNT * FD_CFGSIZ) @@ -615,7 +615,7 @@ FD_GEOM: LD A,(HL) ; GET TRACKS INC HL ; POINT TO HEADS LD D,(HL) ; GET HEADS - ;SET 7,D ; SET LBA CAPABILITY BIT (FUTURE) + SET 7,D ; SET LBA CAPABILITY BIT INC HL ; POINT TO SECTORS LD E,(HL) ; GET SECTORS LD L,A ; L := TRACKS @@ -811,6 +811,36 @@ FD_DRIVERESET: ; ; FD_SEEK: + ; DE:HL CONTAINS EITHER LBA OR CHS + BIT 7,D ; TEST LBA BIT + JR Z,FD_SEEK9 ; IF NOT LBA, JUST SAVE INCOMING VALUE + ; NEED TO CONVERT LBA IN DE:HL TO CHS + ; NOTE: FLOPPY LBA WILL NEVER EXCEED 16 BITS, SO WE IGNORE DE ENTIRELY + PUSH HL ; SAVE HL + CALL FD_GEOM ; E := SPT, D := HDS + POP HL ; RESTORE HL + RET NZ ; BAIL OUT ON ERROR + RES 7,D ; MAKE SURE LBA BIT IS CLEARED + LD (FD_CURGEOM),DE ; SAVE AS FD_CURSPT & FD_CURHDS + LD A,(FD_CURSPT) ; A := SECTORS PER TRACK + LD D,0 ; DE := SPT + LD E,A + CALL DIV16 ; DIVIDE, REMAINDER (SECTOR #) IN HL + PUSH HL ; SAVE SECTOR # + PUSH BC ; CYLINDERS AND HEADS BACK TO HL + POP HL + LD A,(FD_CURHDS) ; A := HEADS PER CYLINDER + LD D,0 ; DE : = HEADS PER CYLINDER + LD E,A + CALL DIV16 ; DIVIDE, BC := TRACK, REMAINDER (HEAD #) IN HL + PUSH HL ; SAVE HEAD # + PUSH BC ; COPY TRACK # TO HL + POP HL + POP BC ; RECOVER HEAD # + LD D,C ; HEAD # TO D + POP BC ; RECOVER SECTOR # + LD E,C ; SECTOR # TO E +FD_SEEK9: ; NOT LBA, JUST SAVE THE CHS VALUE IN CFG ENTRY PUSH HL ; SAVE INCOMING HL TO (SP) LD A,FD_HST ; A := HST OFFSET IN CFG ENTRY CALL LDHLIYA ; HL := HST VALUE ADR diff --git a/Source/HBIOS/hbios.asm b/Source/HBIOS/hbios.asm index 18101f7b..cf3fd11d 100644 --- a/Source/HBIOS/hbios.asm +++ b/Source/HBIOS/hbios.asm @@ -1585,7 +1585,9 @@ RTC_DISPATCH: #IF (DSRTCENABLE) JP DSRTC_DISPATCH #ENDIF - CALL PANIC + ;CALL PANIC + OR $FF + RET ; ;================================================================================================== ; VIDEO DISPLAY ADAPTER DEVICE DISPATCHER @@ -3132,7 +3134,7 @@ PSPRTPC4: PS_PRTSC1: ; PRINT TERMINAL CONFIG LD A,C ; GET ATTRIBUTE VALUE - CP $FF ; NO ATTACHED VDA + CP $BF ; NO ATTACHED VDA JR Z,PS_PRTSC2 PRTS("Video $") ; FORMATTING AND $0F ; ISOLATE VIDEO UNIT NUM diff --git a/Source/HBIOS/ppp.asm b/Source/HBIOS/ppp.asm index 79881377..79d4f4da 100644 --- a/Source/HBIOS/ppp.asm +++ b/Source/HBIOS/ppp.asm @@ -353,7 +353,7 @@ PPPCON_QUERY: PPPCON_DEVICE: LD D,CIODEV_PPPCON ; D := DEVICE TYPE LD E,0 ; E := DEVICE NUM, ALWAYS 0 - LD C,$80 ; C := DEVICE TYPE, 0x80 IS TERMINAL + LD C,$BF ; C := DEVICE TYPE, 0xBF IS PROP TERM XOR A ; SIGNAL SUCCESS RET ; diff --git a/Source/HBIOS/prp.asm b/Source/HBIOS/prp.asm index 11518311..c9f18bff 100644 --- a/Source/HBIOS/prp.asm +++ b/Source/HBIOS/prp.asm @@ -226,7 +226,7 @@ PRPCON_QUERY: PRPCON_DEVICE: LD D,CIODEV_PRPCON ; D := DEVICE TYPE LD E,0 ; E := DEVICE NUM, ALWAYS 0 - LD C,$80 ; C := DEVICE TYPE, 0x80 IS TERMINAL + LD C,$BF ; C := DEVICE TYPE, 0xBF IS PROP TERM XOR A ; SIGNAL SUCCESS RET ;