From 522b061fe697180feb1e321eb4a4609518dca2de Mon Sep 17 00:00:00 2001 From: Wayne Warthen Date: Sat, 5 Sep 2015 15:35:06 -0700 Subject: [PATCH] Start of new geometry/capacity functions in HBIOS --- Source/CBIOS/cbios.asm | 109 ++++++++++++++++++++++------------------- Source/CBIOS/util.asm | 6 ++- Source/HBIOS/hbios.asm | 82 +++++++++++++++++++++++++++++-- Source/HBIOS/hdsk.asm | 22 ++++++--- Source/HBIOS/ide.asm | 8 +-- Source/HBIOS/md.asm | 14 +++--- Source/HBIOS/ppide.asm | 8 +-- Source/HBIOS/ppp.asm | 6 +-- Source/HBIOS/prp.asm | 8 +-- Source/HBIOS/rf.asm | 4 +- Source/HBIOS/sd.asm | 8 +-- 11 files changed, 185 insertions(+), 90 deletions(-) diff --git a/Source/CBIOS/cbios.asm b/Source/CBIOS/cbios.asm index e32bfabc..7c694d25 100644 --- a/Source/CBIOS/cbios.asm +++ b/Source/CBIOS/cbios.asm @@ -1276,7 +1276,7 @@ DSK_IO2: 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 + CALL ADCHLA ; ADD OFFSET POP BC ; RECOVER FUNCTION IN B LD A,(HSTDU) ; GET THE DEVICE/UNIT VALUE LD C,A ; PUT IT IN C @@ -1293,61 +1293,70 @@ DSK_IO2: LD B,E ; UNIT TO B LD DE,(BUFADR) ; SET BUFFER ADDRESS LD HL,1 ; 1 SECTOR - + ; DISPATCH TO UBIOS RST 08 - CALL NZ,PANIC - XOR A ; SET FLAGS BASED ON RESULT + OR A ; SET FLAGS BASED ON RESULT RET #ELSE 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 ; diff --git a/Source/CBIOS/util.asm b/Source/CBIOS/util.asm index cdcaf9a6..6e590e7f 100644 --- a/Source/CBIOS/util.asm +++ b/Source/CBIOS/util.asm @@ -183,12 +183,16 @@ STR_SP .DB " SP=$" JPHL: JP (HL) ; ; ADD HL,A +; ADC HL,A ; ; A REGISTER IS DESTROYED! ; - +ADCHLA: + ADC A,L + JR ADDHLA1 ADDHLA: ADD A,L +ADDHLA1: LD L,A RET NC INC H diff --git a/Source/HBIOS/hbios.asm b/Source/HBIOS/hbios.asm index 703da21b..91cf50db 100644 --- a/Source/HBIOS/hbios.asm +++ b/Source/HBIOS/hbios.asm @@ -797,6 +797,9 @@ CIO_GETINF1: ; ROUTE CALL TO SPECIFIED DISK I/O DRIVER ; B: FUNCTION ; 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: ; GET THE REQUESTED FUNCTION TO SEE IF SPECIAL HANDLING @@ -813,8 +816,56 @@ DIO_DISPATCH: ; ULTIMATELY, HSTTRK AND HSTSEC ARE TO BE REMOVED CP BF_DIOST ; BEYOND READ/WRITE FUNCTIONS ? 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: ; START OF THE ACTUAL DRIVER DISPATCHING LOGIC @@ -1680,9 +1731,30 @@ PRTD3M3: ; 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 ; diff --git a/Source/HBIOS/hdsk.asm b/Source/HBIOS/hdsk.asm index 6085adba..37be8015 100644 --- a/Source/HBIOS/hdsk.asm +++ b/Source/HBIOS/hdsk.asm @@ -121,16 +121,26 @@ HDSK_RW: AND $0F 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 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 A,(HSTSEC) ; LSB OF SECTOR + LD A,(HSTLBALO) ; LSB OF LBA LOW LD (HDSK_SEC),A ; MAPS TO LSB OF HDSK SEC - + ; SET TRANSFER ADDRESS LD BC,(DIOBUF) LD (HDSK_DMA),BC diff --git a/Source/HBIOS/ide.asm b/Source/HBIOS/ide.asm index 92bb6bdf..a89a4248 100644 --- a/Source/HBIOS/ide.asm +++ b/Source/HBIOS/ide.asm @@ -355,14 +355,14 @@ IDE_SETUP1: LD (IDE_DEVICE),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 OUT (IDECYLHI),A ; -> CYLINDER HI - LD A,(HSTSEC + 1) ; HSTSEC MSB + LD A,(HSTLBALO + 1) ; LBA LOW MSB LD (IDE_CYLLO),A ; SAVE IT OUT (IDECYLLO),A ; -> CYLINDER LO - LD A,(HSTSEC) ; HSTSEC LSB + LD A,(HSTLBALO) ; LBA LOW LSB LD (IDE_SEC),A ; SAVE IT OUT (IDESECTN),A ; -> SECTOR NUM diff --git a/Source/HBIOS/md.asm b/Source/HBIOS/md.asm index bcf78aaa..b160c533 100644 --- a/Source/HBIOS/md.asm +++ b/Source/HBIOS/md.asm @@ -110,30 +110,30 @@ MD_WRITE: ; ASSUMES A "READ" OPERATION. HL AND DE CAN BE SWAPPED ; 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, -; 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 ; 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 -; 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: -; 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 ; BE OFFSET TO THE START OF THE ROM/RAM BANKS. ; 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. ; ; 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 ; DEALING WITH 512 BYTE BOUNDARIES. ; 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 SLA L ; LEFT SHIFT ONE BIT RL H ; FULL WORD diff --git a/Source/HBIOS/ppide.asm b/Source/HBIOS/ppide.asm index ee35d806..ac6d16a2 100644 --- a/Source/HBIOS/ppide.asm +++ b/Source/HBIOS/ppide.asm @@ -466,16 +466,16 @@ PPIDE_SETUP1: LD (PPIDEP_HEAD),A ; SAVE HEAD VALUE 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 C,PPIDE_CYL_MSB ; IDE CYL MSB REGISTER 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 C,PPIDE_CYL_LSB ; IDE CYL LSB REGISTER CALL PPIDE_WRITE ; -> CYLINDER HI - LD A,(HSTSEC) ; HSTSEC LSB + LD A,(HSTLBALO) ; LBA LOW LSB LD (PPIDEP_SEC),A ; SAVE IT LD C,PPIDE_SECTOR ; IDE CYL LSB REGISTER CALL PPIDE_WRITE ; -> CYLINDER HI diff --git a/Source/HBIOS/ppp.asm b/Source/HBIOS/ppp.asm index 131dedc2..efa333cf 100644 --- a/Source/HBIOS/ppp.asm +++ b/Source/HBIOS/ppp.asm @@ -304,7 +304,7 @@ PPPSD_CHKCARD: CALL NZ,PPPSD_INITCARD ; INIT CARD IF NOT READY 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! ; PPPSD_SETBLK: @@ -319,9 +319,9 @@ PPPSD_SETBLK: ; DEC HL ; POINT TO NEXT BYTE ; LD A,(HSTSEC) ; 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 HL,(HSTTRK) ; GET TRACK + LD HL,(HSTLBAHI) ; GET LBA HIGH WORD LD (PPP_LBAHI),HL ; SAVE IT IN LBA BUFFER HI RET ; diff --git a/Source/HBIOS/prp.asm b/Source/HBIOS/prp.asm index 4c27bff7..5dbb66d1 100644 --- a/Source/HBIOS/prp.asm +++ b/Source/HBIOS/prp.asm @@ -270,13 +270,13 @@ PRPSD_SETBLK: ; CALL PRPSD_SETBLK1 ; XOR A ; A = 0, NOT USED ; CALL PRPSD_SETBLK1 - LD A,(HSTSEC) ; SECTOR LSB + LD A,(HSTLBALO) ; LBA LOW LSB CALL PRPSD_SETBLK1 - LD A,(HSTSEC + 1) ; SECTOR MSB + LD A,(HSTLBALO + 1) ; LBA LOW MSB CALL PRPSD_SETBLK1 - LD A,(HSTTRK) ; TRACK LSB + LD A,(HSTLBAHI) ; LBA HIGH LSB CALL PRPSD_SETBLK1 - LD A,(HSTTRK + 1) ; TRACK MSB + LD A,(HSTLBAHI + 1) ; LBA HIGH MSB CALL PRPSD_SETBLK1 RET PRPSD_SETBLK1: diff --git a/Source/HBIOS/rf.asm b/Source/HBIOS/rf.asm index 48fd39ea..043dca70 100644 --- a/Source/HBIOS/rf.asm +++ b/Source/HBIOS/rf.asm @@ -118,9 +118,9 @@ RF_SETADR: LD A,(RF_IO) OR RF_AL LD C,A - LD A,(HSTSEC) + LD A,(HSTLBALO) OUT (C),A - LD A,(HSTTRK) + LD A,(HSTLBALO+1) INC C OUT (C),A RET diff --git a/Source/HBIOS/sd.asm b/Source/HBIOS/sd.asm index c5350aac..9138637c 100644 --- a/Source/HBIOS/sd.asm +++ b/Source/HBIOS/sd.asm @@ -1111,8 +1111,8 @@ SD_SETADDR: ; ; TT:SS = BC:DE -> TS:S0, THEN LEFT SHIFT ONE BIT SD_SETADDRSDSC: - LD BC,(HSTTRK) - LD DE,(HSTSEC) + LD BC,(HSTLBAHI) + LD DE,(HSTLBALO) LD B,C LD C,D LD D,E @@ -1126,8 +1126,8 @@ SD_SETADDRSDSC: ; SDHC CARDS USE SIMPLE LBA, NO TRANSLATION NEEDED ; 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 ; ; HANDLE READY TIMEOUT ERROR