Browse Source

Start of new geometry/capacity functions in HBIOS

pull/3/head
Wayne Warthen 11 years ago
parent
commit
522b061fe6
  1. 109
      Source/CBIOS/cbios.asm
  2. 6
      Source/CBIOS/util.asm
  3. 82
      Source/HBIOS/hbios.asm
  4. 22
      Source/HBIOS/hdsk.asm
  5. 8
      Source/HBIOS/ide.asm
  6. 14
      Source/HBIOS/md.asm
  7. 8
      Source/HBIOS/ppide.asm
  8. 6
      Source/HBIOS/ppp.asm
  9. 8
      Source/HBIOS/prp.asm
  10. 4
      Source/HBIOS/rf.asm
  11. 8
      Source/HBIOS/sd.asm

109
Source/CBIOS/cbios.asm

@ -1276,7 +1276,7 @@ DSK_IO2:
ADD A,D ; ADD WITH D ADD A,D ; ADD WITH D
LD D,A ; PUT IT BACK IN D LD D,A ; PUT IT BACK IN D
LD A,(HSTOFF+1) ; MSB OF SLICE OFFSET TO A LD A,(HSTOFF+1) ; MSB OF SLICE OFFSET TO A
CALL ADDHLA ; ADD OFFSET
CALL ADCHLA ; ADD OFFSET
POP BC ; RECOVER FUNCTION IN B POP BC ; RECOVER FUNCTION IN B
LD A,(HSTDU) ; GET THE DEVICE/UNIT VALUE LD A,(HSTDU) ; GET THE DEVICE/UNIT VALUE
LD C,A ; PUT IT IN C LD C,A ; PUT IT IN C
@ -1293,61 +1293,70 @@ DSK_IO2:
LD B,E ; UNIT TO B LD B,E ; UNIT TO B
LD DE,(BUFADR) ; SET BUFFER ADDRESS LD DE,(BUFADR) ; SET BUFFER ADDRESS
LD HL,1 ; 1 SECTOR LD HL,1 ; 1 SECTOR
; DISPATCH TO UBIOS
RST 08 RST 08
CALL NZ,PANIC
XOR A ; SET FLAGS BASED ON RESULT
OR A ; SET FLAGS BASED ON RESULT
RET RET
#ELSE #ELSE
DSK_IO: DSK_IO:
LD A,(HSTDU) ; GET ACTIVE DEVICE/UNIT BYTE
AND $F0 ; ISOLATE DEVICE PORTION
CP DIODEV_FD ; FLOPPY?
JR NZ,DSK_IO1 ; NO, USE LBA HANDLING
; SET HL=TRACK (ADD IN TRACK OFFSET)
LD DE,(HSTOFF) ; DE = TRACK OFFSET FOR LU SUPPORT
LD HL,(HSTTRK) ; HL = TRACK #
ADD HL,DE ; APPLY OFFSET FOR ACTIVE SLICE
; SET DE=SECTOR
LD DE,(HSTSEC) ; DE = SECTOR #
; SET C = DEVICE/UNIT
LD A,(HSTDU) ; LOAD DEVICE/UNIT VALUE
LD C,A ; SAVE IN C
; DISPATCH TO DRIVER
RST 08
OR A ; SET FLAGS BASED ON RESULT
RET
; NEW LBA HANDLING
; COERCE TRACK/SECTOR INTO HL:DE AS 0000:TTTS
DSK_IO1:
PUSH BC
LD DE,(HSTTRK) ; GET TRACK INTO HL
LD B,4 ; PREPARE TO LEFT SHIFT BY 4 BITS
DSK_IO2:
SLA E ; SHIFT DE LEFT BY 4 BITS
RL D
DJNZ DSK_IO2 ; LOOP TILL ALL BITS DONE
LD A,(HSTSEC) ; GET THE SECTOR INTO A
AND $0F ; GET RID OF TOP NIBBLE
OR E ; COMBINE WITH E
LD E,A ; BACK IN E
LD HL,0 ; HL:DE NOW HAS SLICE RELATIVE LBA
; APPLY OFFSET NOW
; OFFSET IS EXPRESSED AS NUMBER OF BLOCKS * 256 TO OFFSET!
LD A,(HSTOFF) ; LSB OF SLICE OFFSET TO A
ADD A,D ; ADD WITH D
LD D,A ; PUT IT BACK IN D
LD A,(HSTOFF+1) ; MSB OF SLICE OFFSET TO A
CALL ADDHLA ; ADD OFFSET
POP BC ; RECOVER FUNCTION IN B
LD A,(HSTDU) ; GET THE DEVICE/UNIT VALUE
LD C,A ; PUT IT IN C
; DISPATCH TO DRIVER
RST 08
OR A ; SET FLAGS BASED ON RESULT
RET
;
; TRANSLATE CP/M TRACK/SECTOR -> HBIOS TRACK/HEAD/SECTOR
; NEEDS TO HANDLE FLOPPY SEPARATE FROM HARD DISK
;
CHS:
LD A,(HSTDU) ; GET DEVICE/UNIT
LD C,A ; PUT IT IN C FOR HBIOS CALL
AND $F0
CP DIODEV_FD ; FLOPPY?
JR NZ,CHSHD ; IF NOT, DO HD CHS XLAT
;
; FLOPPY SPECIFIC TRANSLATION
; CURRENTLY LEAVES HEAD VALUE IMBEDDED IN
; TRACK WHICH HBIOS FD DRIVER HANDLES
;
LD DE,(HSTSEC) ; SECTOR DE, HEAD(D) BECOMES ZERO
LD HL,(HSTTRK) ; TRACK -> TRACK (LOW BIT HAS HEAD)
JR CHS2
;
; HARD DISK SPECIFIC TRANSLATION
; ASSUMES 16 HEADS PER CYLINDER AND 16 SECTORS PER TRACK
;
CHSHD:
LD HL,(HSTTRK) ; GET TRACK VALUE
LD A,L ; LSB OF TRACK TO A
AND $0F ; ISOLATE HEAD IN LOW 4 BITS
LD D,A ; STUFF IT IN D
LD A,(HSTSEC) ; GET SECTOR
LD E,A ; STUFF IT IN E
LD A,B ; SAVE B (HBIOS FUNC)
LD B,4 ; PREPARE TO SHIFT OUT 4 BIT HEAD VALUE
CHSHD1:
SRL H ; SHIFT ONE BIT OUT
RR L ; ... OF HL
DJNZ CHSHD1 ; DO ALL 4 BITS
LD B,A ; RESTORE B (HBIOS FUNC)
; FALL THRU TO CHS2
;
; ALL TYPES OF TRANSLATION WIND UP HERE TO
; MAKE THE ACTUAL HBIOS CALL
;
CHS2:
PUSH DE ; SAVE HEAD/SECTOR + COULD MOVE
LD DE,(HSTOFF) ; NOW GET SLICE OFFSET | TO CHSHD,
ADD HL,DE ; ADD IT TO TRACK VALUE | NO SLICES
POP DE ; RECOVER HEAD/SECTOR + FOR FLOPPY
EX DE,HL ; HL <-> DE FOR HBIOS CALL
;
; MAKE HBIOS CALL
; HBIOS FUNC SHOULD STILL BE IN B
; DEVICE/UNIT SHOULD STILL BE IN C
;
RST 08 ; DO IT
OR A ; SET FLAGS
RET ; DONE
#ENDIF #ENDIF
; ;

6
Source/CBIOS/util.asm

@ -183,12 +183,16 @@ STR_SP .DB " SP=$"
JPHL: JP (HL) JPHL: JP (HL)
; ;
; ADD HL,A ; ADD HL,A
; ADC HL,A
; ;
; A REGISTER IS DESTROYED! ; A REGISTER IS DESTROYED!
; ;
ADCHLA:
ADC A,L
JR ADDHLA1
ADDHLA: ADDHLA:
ADD A,L ADD A,L
ADDHLA1:
LD L,A LD L,A
RET NC RET NC
INC H INC H

82
Source/HBIOS/hbios.asm

@ -797,6 +797,9 @@ CIO_GETINF1:
; ROUTE CALL TO SPECIFIED DISK I/O DRIVER ; ROUTE CALL TO SPECIFIED DISK I/O DRIVER
; B: FUNCTION ; B: FUNCTION
; C: DEVICE/UNIT ; C: DEVICE/UNIT
; H:7: INDICATES LBA MODE
; CHS MODE: DE:HL==TT:HS
; LBA MODE: HL:DE==NN:NN (32 BIT ADDRESS)
; ;
DIO_DISPATCH: DIO_DISPATCH:
; GET THE REQUESTED FUNCTION TO SEE IF SPECIAL HANDLING ; GET THE REQUESTED FUNCTION TO SEE IF SPECIAL HANDLING
@ -813,8 +816,56 @@ DIO_DISPATCH:
; ULTIMATELY, HSTTRK AND HSTSEC ARE TO BE REMOVED ; ULTIMATELY, HSTTRK AND HSTSEC ARE TO BE REMOVED
CP BF_DIOST ; BEYOND READ/WRITE FUNCTIONS ? CP BF_DIOST ; BEYOND READ/WRITE FUNCTIONS ?
JR NC,DIO_DISPATCH1 ; YES, BYPASS JR NC,DIO_DISPATCH1 ; YES, BYPASS
LD (HSTTRK),HL ; RECORD TRACK
LD (HSTSEC),DE ; RECORD SECTOR
LD (HSTSEC),HL ; RECORD HEAD/SECTOR (OR LBA HIGH)
LD (HSTTRK),DE ; RECORD TRACK (OR LBA LOW)
;
; PUSH BC
; CALL NEWLINE
; PUSH DE
; POP BC
; CALL PRTHEXWORD
; CALL PC_COLON
; PUSH HL
; POP BC
; CALL PRTHEXWORD
; POP BC
;
; HACK TO CONVERT INCOMING CHS TO LBA IFF HD ACCESS (NOT FLOPPY)
; FIRST CHECK FOR FLOPPY DEVICE AND BYPASS IF SO
LD A,C ; GET REQUEST DEVICE/UNIT FROM C
AND $F0 ; ISOLATE THE DEVICE PORTION
CP DIODEV_FD ; FLOPPY?
JR Z,DIO_DISPATCH1 ; YES, BYPASS
;
; NOW CHECK IF INCOMING IS ALREADY LBA AND BYPASS IF SO
BIT 7,H ; TEST HIGH BIT OF HEAD/LBA
RES 7,H ; CLEAR LBA INDICATOR BIT
JR NZ,DIO_DISPATCH1 ; IF NZ, ALREADY LBA, BYPASS
;
; WE HAVE INCOMING HARDDISK CHS, CONVERT TO LBA
; DE=TRACK (0..N), H=HEAD (0..15), L=SECTOR (0..15)
; XLAT DE:HL (TT:HS) --> 32 BIT LBA (LBAHI:LBALO)
LD A,H ; HEAD TO A
RLCA ; LEFT SHIFT TO HIGH NIBBLE
RLCA ; ... DEPENDS ON HIGH
RLCA ; ... NIBBLE BEING 0 SINCE
RLCA ; ... IT ROTATES INTO LOW NIBBLE
OR L ; COMBINE WITH SECTOR (HIGH NIBBLE MUST BE ZERO)
LD L,A ; THIS IS LBA LOW LSB
LD H,E ; LBA LOW MSB, E -> H
LD (HSTLBALO),HL ; SAVE FINAL LBA LOW
LD L,D ; LBA HIGH LSB, D -> L
LD H,0 ; LBA HIGH MSB, ZERO FILL
LD (HSTLBAHI),HL ; SAVE FINAL LBA HIGH
;
; PUSH BC
; CALL PC_SPACE
; LD BC,(HSTLBAHI)
; CALL PRTHEXWORD
; CALL PC_COLON
; LD BC,(HSTLBALO)
; CALL PRTHEXWORD
; POP BC
; ;
DIO_DISPATCH1: DIO_DISPATCH1:
; START OF THE ACTUAL DRIVER DISPATCHING LOGIC ; START OF THE ACTUAL DRIVER DISPATCHING LOGIC
@ -1680,9 +1731,30 @@ PRTD3M3:
; ;
IDLECOUNT .DB 0 IDLECOUNT .DB 0
; ;
HSTDSK .DB 0 ; DISK IN BUFFER
HSTTRK .DW 0 ; TRACK IN BUFFER
HSTSEC .DW 0 ; SECTOR IN BUFFER
;HSTTRK .DW 0 ; TRACK IN BUFFER
;HSTSEC .DW 0 ; SECTOR IN BUFFER
;
; THE HOST (HST) VALUES BELOW INDICATE THE DISK AND BLOCK CURRENTLY
; ADDRESSED FOR READ/WRITE OPERATIONS.
; THE 32-BIT BLOCK ADDRESS CAN BE TREADED AS EITHER CHS OR LBA, HIGH ORDER BIT ON SIGNIFIES LBA
; CHS:
; .DW 0 ; TRACK (0-65535)
; .DB 0 ; SECTOR (0-255)
; .DB 0 ; HEAD (0-127)
;
; LBA:
; .DW 0 ; LBA LOW WORD
; .DW 0 ; LBA HIGH WORD
;
; DISK DEVICE/UNIT ID
HSTDSK .DB 0 ; DISK DEVICE/UNIT ID
; LBA LOW WORD -OR- TRACK
HSTLBALO .EQU $ ; BLOCK ADDRESS LBA LOW WORD
HSTTRK .DW 0 ; BLOCK ADDRESS TRACK
; LBA HIGH WORD -OR- HEAD/SECTOR
HSTLBAHI .EQU $ ; BLOCK ADDRESS LBA HIGH WORD
HSTSEC .DB 0 ; BLOCK ADDRESS SECTOR
HSTHEAD .DB 0 ; BLOCK ADDRESS HEAD
; ;
DIOBUF .DW HB_BUF ; PTR TO 1024 BYTE DISK XFR BUFFER DIOBUF .DW HB_BUF ; PTR TO 1024 BYTE DISK XFR BUFFER
; ;

22
Source/HBIOS/hdsk.asm

@ -121,16 +121,26 @@ HDSK_RW:
AND $0F AND $0F
LD (HDSK_DEVICE),A LD (HDSK_DEVICE),A
; INCOMING TRK:SEC ACTUALLY REPRESENTS 32 BIT LBA
; MAP TRK:SEC TO HDSK DRIVER AS TTSS:SS
; ; INCOMING TRK:SEC ACTUALLY REPRESENTS 32 BIT LBA
; ; MAP TRK:SEC TO HDSK DRIVER AS TTSS:SS
;
; LD A,(HSTTRK) ; LSB OF TRACK
; LD (HDSK_TRK + 1),A ; MAPS TO MSB OF HDSK TRK
; LD A,(HSTSEC + 1) ; MSB OF SECTOR
; LD (HDSK_TRK),A ; MAPS TO LSB OF HDSK TRK
; LD A,(HSTSEC) ; LSB OF SECTOR
; LD (HDSK_SEC),A ; MAPS TO LSB OF HDSK SEC
; INCOMING ADDRESS IS LBA
; MAP HHHH:LLLL TO HDSK DRIVER AS HHLL:LL
LD A,(HSTTRK) ; LSB OF TRACK
LD A,(HSTLBAHI) ; LSB OF LBA HIGH
LD (HDSK_TRK + 1),A ; MAPS TO MSB OF HDSK TRK LD (HDSK_TRK + 1),A ; MAPS TO MSB OF HDSK TRK
LD A,(HSTSEC + 1) ; MSB OF SECTOR
LD A,(HSTLBALO + 1) ; MSB OF LBA LOW
LD (HDSK_TRK),A ; MAPS TO LSB OF HDSK TRK LD (HDSK_TRK),A ; MAPS TO LSB OF HDSK TRK
LD A,(HSTSEC) ; LSB OF SECTOR
LD A,(HSTLBALO) ; LSB OF LBA LOW
LD (HDSK_SEC),A ; MAPS TO LSB OF HDSK SEC LD (HDSK_SEC),A ; MAPS TO LSB OF HDSK SEC
; SET TRANSFER ADDRESS ; SET TRANSFER ADDRESS
LD BC,(DIOBUF) LD BC,(DIOBUF)
LD (HDSK_DMA),BC LD (HDSK_DMA),BC

8
Source/HBIOS/ide.asm

@ -355,14 +355,14 @@ IDE_SETUP1:
LD (IDE_DEVICE),A LD (IDE_DEVICE),A
OUT (IDEDEVICE),A OUT (IDEDEVICE),A
; SEND 3 BYTES OF LBA (HSTTRK:HSTSEC) T:SS -> CYL:SEC (CC:S)
LD A,(HSTTRK) ; HSTTRK LSB
; SEND 3 BYTES OF LBA T:SS -> CYL:SEC (CC:S)
LD A,(HSTLBAHI) ; LBA HIGH LSB
LD (IDE_CYLHI),A ; SAVE IT LD (IDE_CYLHI),A ; SAVE IT
OUT (IDECYLHI),A ; -> CYLINDER HI OUT (IDECYLHI),A ; -> CYLINDER HI
LD A,(HSTSEC + 1) ; HSTSEC MSB
LD A,(HSTLBALO + 1) ; LBA LOW MSB
LD (IDE_CYLLO),A ; SAVE IT LD (IDE_CYLLO),A ; SAVE IT
OUT (IDECYLLO),A ; -> CYLINDER LO OUT (IDECYLLO),A ; -> CYLINDER LO
LD A,(HSTSEC) ; HSTSEC LSB
LD A,(HSTLBALO) ; LBA LOW LSB
LD (IDE_SEC),A ; SAVE IT LD (IDE_SEC),A ; SAVE IT
OUT (IDESECTN),A ; -> SECTOR NUM OUT (IDESECTN),A ; -> SECTOR NUM

14
Source/HBIOS/md.asm

@ -110,30 +110,30 @@ MD_WRITE:
; ASSUMES A "READ" OPERATION. HL AND DE CAN BE SWAPPED ; ASSUMES A "READ" OPERATION. HL AND DE CAN BE SWAPPED
; AFTERWARDS TO ACHIEVE A WRITE OPERATION ; AFTERWARDS TO ACHIEVE A WRITE OPERATION
; ;
; ON INPUT, WE HAVE LBA ADDRESSING IN TRK:SEC
; ON INPUT, WE HAVE LBA ADDRESSING IN HSTLBAHI:HSTLBALO
; BUT WE NEVER HAVE MORE THAN $FFFF BLOCKS IN A RAM/ROM DISK, ; BUT WE NEVER HAVE MORE THAN $FFFF BLOCKS IN A RAM/ROM DISK,
; SO THE HIGH WORD (TRK) IS IGNORED
; SO THE HIGH WORD (HSTLBAHI) IS IGNORED
; ;
; EACH RAM/ROM BANK IS 32K BY DEFINITION AND EACH SECTOR IS 512 ; EACH RAM/ROM BANK IS 32K BY DEFINITION AND EACH SECTOR IS 512
; BYTES BY DEFINITION. SO, EACH RAM/ROM BANK CONTAINS 64 SECTORS ; BYTES BY DEFINITION. SO, EACH RAM/ROM BANK CONTAINS 64 SECTORS
; (32,768 / 512 = 64). THEREFORE, YOU CAN THINK OF HSTSEC AS
; (32,768 / 512 = 64). THEREFORE, YOU CAN THINK OF LBA AS
; 00000BBB:BBOOOOOO IS WHERE THE 'B' BITS REPRESENT THE BANK NUMBER ; 00000BBB:BBOOOOOO IS WHERE THE 'B' BITS REPRESENT THE BANK NUMBER
; AND THE 'O' BITS REPRESENT THE SECTOR NUMBER.
; AND THE 'O' BITS REPRESENT THE SECTOR NUMBER WITHIN THE BANK.
; ;
; TO EXTRACT THE BANK NUMBER, WE CAN LEFT SHIFT TWICE TO GIVE US: ; TO EXTRACT THE BANK NUMBER, WE CAN LEFT SHIFT TWICE TO GIVE US:
; 000BBBBB:OOOOOOOO:OOOOOOO. FROM THIS WE CAN EXTRACT THE MSB OF HSTTRK
; 000BBBBB:OOOOOOOO. FROM THIS WE CAN EXTRACT THE MSB
; TO USE AS THE BANK NUMBER. NOTE THAT THE "RAW" BANK NUMBER MUST THEN ; TO USE AS THE BANK NUMBER. NOTE THAT THE "RAW" BANK NUMBER MUST THEN
; BE OFFSET TO THE START OF THE ROM/RAM BANKS. ; BE OFFSET TO THE START OF THE ROM/RAM BANKS.
; ALSO NOTE THAT THE HIGH BIT OF THE BANK NUMBER REPRESENTS "RAM" SO THIS ; ALSO NOTE THAT THE HIGH BIT OF THE BANK NUMBER REPRESENTS "RAM" SO THIS
; BIT MUST ALSO BE SET ACCORDING TO THE UNIT BEING ADDRESSED. ; BIT MUST ALSO BE SET ACCORDING TO THE UNIT BEING ADDRESSED.
; ;
; TO GET THE BYTE OFFSET, WE THEN RIGHT SHIFT THE LSB BY 1 TO GIVE US: ; TO GET THE BYTE OFFSET, WE THEN RIGHT SHIFT THE LSB BY 1 TO GIVE US:
; 0OOOOOOO AND EXTRACT THE LSB OF THE HSTTRK TO REPRESENT THE MSB OF
; 0OOOOOOO AND EXTRACT THE LSB TO REPRESENT THE MSB OF
; THE BYTE OFFSET. THE LSB OF THE BYTE OFFSET IS ALWAYS 0 SINCE WE ARE ; THE BYTE OFFSET. THE LSB OF THE BYTE OFFSET IS ALWAYS 0 SINCE WE ARE
; DEALING WITH 512 BYTE BOUNDARIES. ; DEALING WITH 512 BYTE BOUNDARIES.
; ;
MD_IOSETUP: MD_IOSETUP:
LD HL,(HSTSEC) ; HL := LOW WORD OF LBA
LD HL,(HSTLBALO) ; HL := LOW WORD OF LBA
; ALIGN BITS TO EXTRACT BANK NUMBER FROM H ; ALIGN BITS TO EXTRACT BANK NUMBER FROM H
SLA L ; LEFT SHIFT ONE BIT SLA L ; LEFT SHIFT ONE BIT
RL H ; FULL WORD RL H ; FULL WORD

8
Source/HBIOS/ppide.asm

@ -466,16 +466,16 @@ PPIDE_SETUP1:
LD (PPIDEP_HEAD),A ; SAVE HEAD VALUE LD (PPIDEP_HEAD),A ; SAVE HEAD VALUE
CALL PPIDE_WRITE ; WRITE IT CALL PPIDE_WRITE ; WRITE IT
; SEND 3 BYTES OF LBA (HSTTRK:HSTSEC) T:SS -> CYL:SEC (CC:S)
LD A,(HSTTRK) ; HSTTRK LSB
; SEND 3 BYTES OF LBA T:SS -> CYL:SEC (CC:S)
LD A,(HSTLBAHI) ; LBA HIGH LSB
LD (PPIDEP_CYLHI),A ; SAVE IT LD (PPIDEP_CYLHI),A ; SAVE IT
LD C,PPIDE_CYL_MSB ; IDE CYL MSB REGISTER LD C,PPIDE_CYL_MSB ; IDE CYL MSB REGISTER
CALL PPIDE_WRITE ; -> CYLINDER HI CALL PPIDE_WRITE ; -> CYLINDER HI
LD A,(HSTSEC + 1) ; HSTSEC MSB
LD A,(HSTLBALO + 1) ; LBA LOW MSB
LD (PPIDEP_CYLLO),A ; SAVE IT LD (PPIDEP_CYLLO),A ; SAVE IT
LD C,PPIDE_CYL_LSB ; IDE CYL LSB REGISTER LD C,PPIDE_CYL_LSB ; IDE CYL LSB REGISTER
CALL PPIDE_WRITE ; -> CYLINDER HI CALL PPIDE_WRITE ; -> CYLINDER HI
LD A,(HSTSEC) ; HSTSEC LSB
LD A,(HSTLBALO) ; LBA LOW LSB
LD (PPIDEP_SEC),A ; SAVE IT LD (PPIDEP_SEC),A ; SAVE IT
LD C,PPIDE_SECTOR ; IDE CYL LSB REGISTER LD C,PPIDE_SECTOR ; IDE CYL LSB REGISTER
CALL PPIDE_WRITE ; -> CYLINDER HI CALL PPIDE_WRITE ; -> CYLINDER HI

6
Source/HBIOS/ppp.asm

@ -304,7 +304,7 @@ PPPSD_CHKCARD:
CALL NZ,PPPSD_INITCARD ; INIT CARD IF NOT READY CALL NZ,PPPSD_INITCARD ; INIT CARD IF NOT READY
RET ; RETURN WITH STATUS IN A RET ; RETURN WITH STATUS IN A
; ;
; SET UP LBA BLOCK INDEX BASED ON HSTTRK AND HSTSEC
; SET UP LBA BLOCK INDEX
; NOTE THAT BYTE ORDER IS LITTLE ENDIAN FOR PROPLELLER! ; NOTE THAT BYTE ORDER IS LITTLE ENDIAN FOR PROPLELLER!
; ;
PPPSD_SETBLK: PPPSD_SETBLK:
@ -319,9 +319,9 @@ PPPSD_SETBLK:
; DEC HL ; POINT TO NEXT BYTE ; DEC HL ; POINT TO NEXT BYTE
; LD A,(HSTSEC) ; A = HSTSEC:LSB ; LD A,(HSTSEC) ; A = HSTSEC:LSB
; LD (HL),A ; LBALO:LSB = A = HSTSEC:LSB ; LD (HL),A ; LBALO:LSB = A = HSTSEC:LSB
LD HL,(HSTSEC) ; GET SECTOR
LD HL,(HSTLBALO) ; GET LBA LOW WORD
LD (PPP_LBALO),HL ; SAVE IT IN LBA BUFFER LO LD (PPP_LBALO),HL ; SAVE IT IN LBA BUFFER LO
LD HL,(HSTTRK) ; GET TRACK
LD HL,(HSTLBAHI) ; GET LBA HIGH WORD
LD (PPP_LBAHI),HL ; SAVE IT IN LBA BUFFER HI LD (PPP_LBAHI),HL ; SAVE IT IN LBA BUFFER HI
RET RET
; ;

8
Source/HBIOS/prp.asm

@ -270,13 +270,13 @@ PRPSD_SETBLK:
; CALL PRPSD_SETBLK1 ; CALL PRPSD_SETBLK1
; XOR A ; A = 0, NOT USED ; XOR A ; A = 0, NOT USED
; CALL PRPSD_SETBLK1 ; CALL PRPSD_SETBLK1
LD A,(HSTSEC) ; SECTOR LSB
LD A,(HSTLBALO) ; LBA LOW LSB
CALL PRPSD_SETBLK1 CALL PRPSD_SETBLK1
LD A,(HSTSEC + 1) ; SECTOR MSB
LD A,(HSTLBALO + 1) ; LBA LOW MSB
CALL PRPSD_SETBLK1 CALL PRPSD_SETBLK1
LD A,(HSTTRK) ; TRACK LSB
LD A,(HSTLBAHI) ; LBA HIGH LSB
CALL PRPSD_SETBLK1 CALL PRPSD_SETBLK1
LD A,(HSTTRK + 1) ; TRACK MSB
LD A,(HSTLBAHI + 1) ; LBA HIGH MSB
CALL PRPSD_SETBLK1 CALL PRPSD_SETBLK1
RET RET
PRPSD_SETBLK1: PRPSD_SETBLK1:

4
Source/HBIOS/rf.asm

@ -118,9 +118,9 @@ RF_SETADR:
LD A,(RF_IO) LD A,(RF_IO)
OR RF_AL OR RF_AL
LD C,A LD C,A
LD A,(HSTSEC)
LD A,(HSTLBALO)
OUT (C),A OUT (C),A
LD A,(HSTTRK)
LD A,(HSTLBALO+1)
INC C INC C
OUT (C),A OUT (C),A
RET RET

8
Source/HBIOS/sd.asm

@ -1111,8 +1111,8 @@ SD_SETADDR:
; ;
; TT:SS = BC:DE -> TS:S0, THEN LEFT SHIFT ONE BIT ; TT:SS = BC:DE -> TS:S0, THEN LEFT SHIFT ONE BIT
SD_SETADDRSDSC: SD_SETADDRSDSC:
LD BC,(HSTTRK)
LD DE,(HSTSEC)
LD BC,(HSTLBAHI)
LD DE,(HSTLBALO)
LD B,C LD B,C
LD C,D LD C,D
LD D,E LD D,E
@ -1126,8 +1126,8 @@ SD_SETADDRSDSC:
; SDHC CARDS USE SIMPLE LBA, NO TRANSLATION NEEDED ; SDHC CARDS USE SIMPLE LBA, NO TRANSLATION NEEDED
; ;
SD_SETADDRSDHC: SD_SETADDRSDHC:
LD BC,(HSTTRK) ; LBA HIGH WORD
LD DE,(HSTSEC) ; LBA LOW WORD
LD BC,(HSTLBAHI) ; LBA HIGH WORD
LD DE,(HSTLBALO) ; LBA LOW WORD
RET ; DONE RET ; DONE
; ;
; HANDLE READY TIMEOUT ERROR ; HANDLE READY TIMEOUT ERROR

Loading…
Cancel
Save