Browse Source

Merge pull request #33 from wwarthen/dev

Minor IDE/CF/SD Disk Handling Updates
pull/317/head
b1ackmai1er 3 years ago
committed by GitHub
parent
commit
3aed60afe2
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 22
      Source/HBIOS/hbios.asm
  2. 19
      Source/HBIOS/ide.asm
  3. 19
      Source/HBIOS/ppide.asm
  4. 3
      Source/HBIOS/ppp.asm
  5. 3
      Source/HBIOS/prp.asm
  6. 3
      Source/HBIOS/sd.asm
  7. 224
      Source/HBIOS/util.asm
  8. 2
      Source/ver.inc
  9. 2
      Source/ver.lib

22
Source/HBIOS/hbios.asm

@ -6564,7 +6564,8 @@ PS_PRTDC:
RES 7,D ; CLEAR LBA BIT
LD B,11 ; 11 BIT SHIFT TO CONVERT BLOCKS --> MB
CALL SRL32 ; RIGHT SHIFT
CALL PRTDEC ; PRINT LOW WORD IN DECIMAL (HIGH WORD DISCARDED)
;CALL PRTDEC ; PRINT LOW WORD IN DECIMAL (HIGH WORD DISCARDED)
CALL PRTDEC32 ; PRINT DWORD IN DECIMAL
PRTS("MB$") ; PRINT SUFFIX
CALL PC_COMMA
PRTS("LBA$") ; FOR NOW, WE ASSUME HARD DISK DOES LBA
@ -6578,7 +6579,8 @@ PS_PRTDC1:
RES 7,D ; CLEAR LBA BIT
LD B,1 ; 11 BIT SHIFT TO CONVERT BLOCKS --> MB
CALL SRL32 ; RIGHT SHIFT
CALL PRTDEC ; PRINT LOW WORD IN DECIMAL (HIGH WORD DISCARDED)
;CALL PRTDEC ; PRINT LOW WORD IN DECIMAL (HIGH WORD DISCARDED)
CALL PRTDEC32 ; PRINT DWORD IN DECIMAL
PRTS("KB$") ; PRINT SUFFIX
CALL PC_COMMA
PRTS("LBA$") ; FOR NOW, WE ASSUME HARD DISK DOES LBA
@ -6821,7 +6823,7 @@ PS_SOUND:
; DEVICE COLUMN
PUSH BC ;
PUSH BC
LD E,C
XOR A
LD DE,PS_SDSND ; POINT TO DEVICE TYPE NAME TABLE
@ -6829,12 +6831,10 @@ PS_SOUND:
LD A,C ; MOVE UNIT NUM TO A
CALL PRTDECB ; PRINT IT
CALL PC_COLON
CP 10 ; CHECK FOR MULTIPLE DIGITS
CALL C,PC_SPACE ; EXTRA SPACE IF NEEDED
LD A,(PRTIDXCNT)
SUB 9+1
CPL
CALL PS_PAD
SUB 12-1 ; SUBTRACT FIELD WIDTH (LESS THE COLON)
NEG ; MAKE IT A POSITIVE NUMBER
CALL PS_PAD ; PAD AS NEEDED
POP BC
; DEVICE TYPE
@ -6851,9 +6851,9 @@ PS_SOUND:
LD DE,PS_SDSN76489
CALL PRTIDXDEA
LD A,(PRTIDXCNT)
SUB 18+1
CPL
CALL PS_PAD ; PAD N SPACES (SPECIFIED IN A)
SUB 18 ; SUBTRACT FIELD WIDTH
NEG ; MAKE IT A POSITIVE NUMBER
CALL PS_PAD ; PAD AS NEEDED
; DEVICE CHARACTERISTICS
;

19
Source/HBIOS/ide.asm

@ -415,7 +415,8 @@ IDE_INIT5:
PRTS(" SIZE=$") ; PRINT FIELD LABEL
LD B,11 ; 11 BIT SHIFT TO CONVERT BLOCKS --> MB
CALL SRL32 ; RIGHT SHIFT
CALL PRTDEC ; PRINT LOW WORD IN DECIMAL (HIGH WORD DISCARDED)
;CALL PRTDEC ; PRINT LOW WORD IN DECIMAL (HIGH WORD DISCARDED)
CALL PRTDEC32 ; PRINT DWORD IN DECIMAL
PRTS("MB$") ; PRINT SUFFIX
;
RET
@ -1251,12 +1252,22 @@ IDE_INITDEV00:
; THEY ARE NOT RECOMMENDED BY THE CF CARD SPEC AND MIGHT
; OVERLAP WITH "REAL" HARD DISK SIGNATURES. I HAVE NEVER
; SEEN A CF CARD THAT DID NOT USE ONE OF THE BELOW.
; CREDIT TO LASZLO SZOLNOKI
; CREDIT TO LASZLO SZOLNOKI
;
#IF (IDETRACE >= 3)
CALL IDE_PRTPREFIX
PRTS("SIG=0x$")
LD BC,(HB_WRKBUF)
CALL PRTHEXWORD
#ENDIF
;
LD BC,$848A ; STANDARD CF CARD SIGNATURE
CALL IDE_INITDEV000 ; TEST & SET
LD BC,$044A ; ALT SIG FOR NON-REMOVABLE
LD BC,$044A ; ALT SIG FOR CF
CALL IDE_INITDEV000 ; TEST & SET
LD BC,$045A ; ALT SIG FOR CF
CALL IDE_INITDEV000 ; TEST & SET
LD BC,$0040 ; ALT SIG FOR NON-REMOVABLE
LD BC,$0040 ; ALT SIG FOR CF NON-REMOVABLE
CALL IDE_INITDEV000 ; TEST & SET
JR IDE_INITDEV1 ; CONTINUE INIT
;

19
Source/HBIOS/ppide.asm

@ -411,7 +411,8 @@ PPIDE_INIT5:
PRTS(" SIZE=$") ; PRINT FIELD LABEL
LD B,11 ; 11 BIT SHIFT TO CONVERT BLOCKS --> MB
CALL SRL32 ; RIGHT SHIFT
CALL PRTDEC ; PRINT LOW WORD IN DECIMAL (HIGH WORD DISCARDED)
; CALL PRTDEC ; PRINT LOW WORD IN DECIMAL (HIGH WORD DISCARDED)
CALL PRTDEC32 ; PRINT DWORD IN DECIMAL
PRTS("MB$") ; PRINT SUFFIX
;
RET
@ -1276,12 +1277,22 @@ PPIDE_INITDEV00:
; THEY ARE NOT RECOMMENDED BY THE CF CARD SPEC AND MIGHT
; OVERLAP WITH "REAL" HARD DISK SIGNATURES. I HAVE NEVER
; SEEN A CF CARD THAT DID NOT USE ONE OF THE BELOW.
; CREDIT TO LASZLO SZOLNOKI
; CREDIT TO LASZLO SZOLNOKI
;
#IF (PPIDETRACE >= 3)
CALL IDE_PRTPREFIX
PRTS("SIG=0x$")
LD BC,(HB_WRKBUF)
CALL PRTHEXWORD
#ENDIF
;
LD BC,$848A ; STANDARD CF CARD SIGNATURE
CALL PPIDE_INITDEV000 ; TEST & SET
LD BC,$044A ; ALT SIG FOR NON-REMOVABLE
LD BC,$044A ; ALT SIG FOR CF
CALL PPIDE_INITDEV000 ; TEST & SET
LD BC,$045A ; ALT SIG FOR CF
CALL PPIDE_INITDEV000 ; TEST & SET
LD BC,$0040 ; ALT SIG FOR NON-REMOVABLE
LD BC,$0040 ; ALT SIG FOR CF NON-REMOVABLE
CALL PPIDE_INITDEV000 ; TEST & SET
JR PPIDE_INITDEV1 ; CONTINUE INIT
;

3
Source/HBIOS/ppp.asm

@ -474,7 +474,8 @@ PPPSD_INITUNIT:
PRTS(" SIZE=$") ; PRINT FIELD LABEL
LD B,11 ; 11 BIT SHIFT TO CONVERT BLOCKS --> MB
CALL SRL32 ; RIGHT SHIFT
CALL PRTDEC ; PRINT LOW WORD IN DECIMAL (HIGH WORD DISCARDED)
;CALL PRTDEC ; PRINT LOW WORD IN DECIMAL (HIGH WORD DISCARDED)
CALL PRTDEC32 ; PRINT DWORD IN DECIMAL
PRTS("MB$") ; PRINT SUFFIX
;
XOR A ; SIGNAL SUCCESS

3
Source/HBIOS/prp.asm

@ -371,7 +371,8 @@ PRPSD_INITUNIT:
PRTS(" SIZE=$") ; PRINT FIELD LABEL
LD B,11 ; 11 BIT SHIFT TO CONVERT BLOCKS --> MB
CALL SRL32 ; RIGHT SHIFT
CALL PRTDEC ; PRINT LOW WORD IN DECIMAL (HIGH WORD DISCARDED)
;CALL PRTDEC ; PRINT LOW WORD IN DECIMAL (HIGH WORD DISCARDED)
CALL PRTDEC32 ; PRINT DWORD IN DECIMAL
PRTS("MB$") ; PRINT SUFFIX
;
XOR A ; SIGNAL SUCCESS

3
Source/HBIOS/sd.asm

@ -639,7 +639,8 @@ SD_INITUNIT2:
PRTS(" SIZE=$") ; PRINT FIELD LABEL
LD B,11 ; 11 BIT SHIFT TO CONVERT BLOCKS --> MB
CALL SRL32 ; RIGHT SHIFT
CALL PRTDEC ; PRINT LOW WORD IN DECIMAL (HIGH WORD DISCARDED)
;CALL PRTDEC ; PRINT LOW WORD IN DECIMAL (HIGH WORD DISCARDED)
CALL PRTDEC32 ; PRINT DWORD IN DECIMAL
PRTS("MB$") ; PRINT SUFFIX
;
; CHECK FOR WRITE PROTECT AND NOTIFY USER IF SO

224
Source/HBIOS/util.asm

@ -486,13 +486,15 @@ STR_TSTPT .TEXT "\r\n+++ TSTPT: $"
;STR_PC .DB " PC=$"
;STR_SP .DB " SP=$"
;
; INDIRECT JUMP TO ADDRESS IN HL
; INDIRECT JUMP TO ADDRESS IN HL,IX, OR IY
;
; MOSTLY USEFUL TO PERFORM AN INDIRECT CALL LIKE:
; LD HL,xxxx
; CALL JPHL
;
JPHL: JP (HL)
JPIX: JP (IX)
JPIY: JP (IY)
;
; ADD HL,A
;
@ -829,54 +831,155 @@ BITLOC1:
DJNZ BITLOC1 ; LOOP AS NEEDED
RET ; DONE
;
; PRINT VALUE OF A IN DECIMAL WITH LEADING ZERO SUPPRESSION
; DECIMAL NUMBER PRINTING ROUTINES
;
PRTDECB:
PUSH HL
PUSH AF
LD L,A
LD H,0
CALL PRTDEC
POP AF
POP HL
PRTDEC8: ; PRINT VALUE OF A REGISTER IN DECIMAL
PUSH IY
LD IY,B2D8
CALL PRTDECSTR
POP IY
RET
;
; PRINT VALUE OF HL IN DECIMAL WITH LEADING ZERO SUPPRESSION
PRTDEC16: ; PRINT VALUE OF HL REGISGTER IN DECIMAL
PUSH IY
LD IY,B2D16
CALL PRTDECSTR
POP IY
RET
;
PRTDEC:
PRTDEC32: ; PRINT VALUE OF DE:HL REGISTERS IN DECIMAL
PUSH IY
LD IY,B2D32
CALL PRTDECSTR
POP IY
RET
;
PRTDECSTR:
PUSH AF
PUSH BC
PUSH DE
PUSH HL
LD E,'0'
LD BC,-10000
CALL PRTDEC1
LD BC,-1000
CALL PRTDEC1
LD BC,-100
CALL PRTDEC1
LD C,-10
CALL PRTDEC1
LD E,0
LD C,-1
CALL PRTDEC1
PUSH IX
CALL JPIY ; CALL (IY)
EX DE,HL
LD A,'$'
LD (B2DEND),A
CALL WRITESTR
POP IX
POP HL
POP DE
POP BC
POP AF
RET
PRTDEC1:
LD A,'0' - 1
PRTDEC2:
INC A
ADD HL,BC
JR C,PRTDEC2
;
; Combined routine for conversion of different sized binary numbers into
; directly printable ASCII(Z)-string
; Input value in registers, number size and -related to that- registers to fill
; is selected by calling the correct entry:
;
; entry inputregister(s) decimal value 0 to:
; B2D8 A 255 (3 digits)
; B2D16 HL 65535 5 "
; B2D24 E:HL 16777215 8 "
; B2D32 DE:HL 4294967295 10 "
; B2D48 BC:DE:HL 281474976710655 15 "
; B2D64 IX:BC:DE:HL 18446744073709551615 20 "
;
; The resulting string is placed into a small buffer attached to this routine,
; this buffer needs no initialization and can be modified as desired.
; The number is aligned to the right, and leading 0's are replaced with spaces.
; On exit HL points to the first digit, (B)C = number of decimals
; This way any re-alignment / postprocessing is made easy.
; Changes: AF,BC,DE,HL,IX
; P.S. some examples below
;
; by Alwin Henseler
;
B2D8: LD H,0
LD L,A
B2D16: LD E,0
B2D24: LD D,0
B2D32: LD BC,0
B2D48: LD IX,0 ; zero all non-used bits
B2D64: LD (B2DINV),HL
LD (B2DINV+2),DE
LD (B2DINV+4),BC
LD (B2DINV+6),IX ; place full 64-bit input value in buffer
LD HL,B2DBUF
LD DE,B2DBUF+1
LD (HL),' '
B2DFILC .EQU $-1 ; address of fill-character
LD BC,18
LDIR ; fill 1st 19 bytes of buffer with spaces
LD (B2DEND-1),BC ;set BCD value to "0" & place terminating 0
LD E,1 ; no. of bytes in BCD value
LD HL,B2DINV+8 ; (address MSB input)+1
LD BC,$0909
XOR A
B2DSKP0:DEC B
JR Z,B2DSIZ ; all 0: continue with postprocessing
DEC HL
OR (HL) ; find first byte <>0
JR Z,B2DSKP0
B2DFND1:DEC C
RLA
JR NC,B2DFND1 ; determine no. of most significant 1-bit
RRA
LD D,A ; byte from binary input value
B2DLUS2:PUSH HL
PUSH BC
B2DLUS1:LD HL,B2DEND-1 ; address LSB of BCD value
LD B,E ; current length of BCD value in bytes
RL D ; highest bit from input value -> carry
B2DLUS0:LD A,(HL)
ADC A,A
DAA
LD (HL),A ; double 1 BCD byte from intermediate result
DEC HL
DJNZ B2DLUS0 ; and go on to double entire BCD value (+carry!)
JR NC,B2DNXT
INC E ; carry at MSB -> BCD value grew 1 byte larger
LD (HL),1 ; initialize new MSB of BCD value
B2DNXT: DEC C
JR NZ,B2DLUS1 ; repeat for remaining bits from 1 input byte
POP BC ; no. of remaining bytes in input value
LD C,8 ; reset bit-counter
POP HL ; pointer to byte from input value
DEC HL
LD D,(HL) ; get next group of 8 bits
DJNZ B2DLUS2 ; and repeat until last byte from input value
B2DSIZ: LD HL,B2DEND ; address of terminating 0
LD C,E ; size of BCD value in bytes
OR A
SBC HL,BC ; calculate address of MSB BCD
LD D,H
LD E,L
SBC HL,BC
CP E
JR Z,PRTDEC3
LD E,0
CALL COUT
PRTDEC3:
EX DE,HL ; HL=address BCD value, DE=start of decimal value
LD B,C ; no. of bytes BCD
SLA C ; no. of bytes decimal (possibly 1 too high)
LD A,'0'
RLD ; shift bits 4-7 of (HL) into bit 0-3 of A
CP '0' ; (HL) was > 9h?
JR NZ,B2DEXPH ; if yes, start with recording high digit
DEC C ; correct number of decimals
INC DE ; correct start address
JR B2DEXPL ; continue with converting low digit
B2DEXP: RLD ; shift high digit (HL) into low digit of A
B2DEXPH:LD (DE),A ; record resulting ASCII-code
INC DE
B2DEXPL:RLD
LD (DE),A
INC DE
INC HL ; next BCD-byte
DJNZ B2DEXP ; and go on to convert each BCD-byte into 2 ASCII
SBC HL,BC ; return with HL pointing to 1st decimal
RET
;
B2DINV .FILL 8 ; space for 64-bit input value (LSB first)
B2DBUF .FILL 20 ; space for 20 decimal digits
B2DEND .DB 1 ; space for terminating 0
;
; SHIFT HL:DE BY B BITS
;
SRL32:
@ -897,6 +1000,57 @@ SLA32:
DJNZ SLA32
RET
;
; PRINT VALUE OF A IN DECIMAL WITH LEADING ZERO SUPPRESSION
; BELOW ARE NOW OBSOLETE AND MAPPED TO NEW ROUTINES
;
PRTDECB .EQU PRTDEC8
;;;PRTDECB:
;;; PUSH HL
;;; PUSH AF
;;; LD L,A
;;; LD H,0
;;; CALL PRTDEC
;;; POP AF
;;; POP HL
;;; RET
;
; PRINT VALUE OF HL IN DECIMAL WITH LEADING ZERO SUPPRESSION
;
PRTDEC .EQU PRTDEC16
;;;PRTDEC:
;;; PUSH BC
;;; PUSH DE
;;; PUSH HL
;;; LD E,'0'
;;; LD BC,-10000
;;; CALL PRTDEC1
;;; LD BC,-1000
;;; CALL PRTDEC1
;;; LD BC,-100
;;; CALL PRTDEC1
;;; LD C,-10
;;; CALL PRTDEC1
;;; LD E,0
;;; LD C,-1
;;; CALL PRTDEC1
;;; POP HL
;;; POP DE
;;; POP BC
;;; RET
;;;PRTDEC1:
;;; LD A,'0' - 1
;;;PRTDEC2:
;;; INC A
;;; ADD HL,BC
;;; JR C,PRTDEC2
;;; SBC HL,BC
;;; CP E
;;; JR Z,PRTDEC3
;;; LD E,0
;;; CALL COUT
;;;PRTDEC3:
;;; RET
;
; LOAD OR STORE DE:HL
;
LD32:

2
Source/ver.inc

@ -2,4 +2,4 @@
#DEFINE RMN 1
#DEFINE RUP 1
#DEFINE RTP 0
#DEFINE BIOSVER "3.1.1-pre.188"
#DEFINE BIOSVER "3.1.1-pre.189"

2
Source/ver.lib

@ -3,5 +3,5 @@ rmn equ 1
rup equ 1
rtp equ 0
biosver macro
db "3.1.1-pre.188"
db "3.1.1-pre.189"
endm

Loading…
Cancel
Save