Browse Source

Cleanup

pull/123/head
Wayne Warthen 6 years ago
parent
commit
a1be614279
  1. 105
      Source/CBIOS/cbios.asm
  2. 2
      Source/CPM3/diskio.z80
  3. 1
      Source/HBIOS/romldr.asm

105
Source/CBIOS/cbios.asm

@ -1247,6 +1247,10 @@ DSK_SELECT:
LD HL,0 ; ZERO
LD (SEKLBA),HL ; CLEAR FIRST WORD
LD (SEKLBA+2),HL ; CLEAR SECOND WORD
;
; SET LEGACY SECTORS PER SLICE
LD HL,16640 ; LEGACY SECTORS PER SLICE
LD (SPS),HL ; SAVE IT
;
; CHECK MBR OF PHYSICAL DISK BEING SELECTED
; WILL UPDATE MEDID AND LBAOFF IF VALID CP/M PARTITION EXISTS
@ -1273,7 +1277,7 @@ DSK_SELECT:
INC HL ; BUMP TO MSB
LD (HL),D ; SET MSB OF DPB IN DPH
;
; ; PLUG LBA OFFSET INTO ACTIVE DPH
; PLUG LBA OFFSET INTO ACTIVE DPH
LD HL,(SEKDPH) ; POINT TO START OF DPH
LD BC,16 ; OFFSET OF LBA OFFSET IN DPH
ADD HL,BC ; HL := DPH.LBAOFF PTR
@ -1364,6 +1368,9 @@ DSK_MBR3:
LD DE,SEKLBA ; LOC TO STORE LBA OFFSET
LD BC,4 ; 4 BYTES (32 BITS)
LDIR ; COPY IT
; IF BOOT FROM PARTITION, USE NEW SECTORS PER SLICE VALUE
LD HL,16384 ; NEW SECTORS PER SLICE
LD (SPS),HL ; SAVE IT
;
DSK_MBR4:
; RESTORE BANK
@ -1371,46 +1378,73 @@ DSK_MBR4:
CALL HB_BNKSEL ; SELECT IT
;
DSK_MBR5:
;
; DIFFERENT ALGORITHM FOR NEW HD FORMAT
LD A,(MEDID) ; GET MEDIA ID
CP MID_HDNEW ; NEW FORMAT?
JR Z,DSK_MBR6 ; IF SO, GO THERE
;
; OLD HD FORMAT, 65 TRACKS PER SLICE
LD A,(SLICE) ; GET SLICE
LD E,A ; E = SLICE NO
LD H,65 ; H = TRACKS PER SLICE
CALL MULT8 ; HL := H * E (TOTAL TRACK OFFSET)
LD DE,0 ; CLEAR HI WORD
LD B,8 ; 16 SPT, SHIFT 4 BITS
CALL RL32 ; DO IT
JR DSK_MBR7 ; DONE
;
DSK_MBR6:
; NEW HD FORMAT, MULTIPLY SLICE BY 8MB
LD DE,0 ; CLEAR HIWORD
LD H,0 ; CLEAR HI BYTE OR LOWORD
LD A,(SLICE) ; GET SLICE
LD L,A ; PUT SLICE IN LOW BYTE
LD B,14
CALL RL32 ; MULTIPLY BY 16384 SECTORS (8MB)
;
DSK_MBR7:
; ADD IN LBA OFFSET
LD BC,(SEKLBA) ; LBA OFFSET LOWORD
ADD HL,BC
EX DE,HL
LD BC,(SEKLBA+2) ; LBA OFFSET HIWORD
ADC HL,BC
EX DE,HL
SET 7,D ; SET LBA ACCESS BIT
; ADJUST LBA OFFSET BASED ON TARGET SLICE
LD A,(SLICE) ; GET SLICE, A IS LOOP CNT
LD HL,(SEKLBA) ; SET DE:HL
LD DE,(SEKLBA+2) ; ... TO STARTING LBA
LD BC,(SPS) ; SECTORS PER SLICE
BOOT6:
OR A ; SET FLAGS TO CHECK LOOP CNTR
JR Z,BOOT8 ; DONE IF COUNTER EXHAUSTED
ADD HL,BC ; ADD ONE SLICE TO LOW WORD
JR NC,BOOT7 ; CHECK FOR CARRY
INC DE ; IF SO, BUMP HIGH WORD
BOOT7:
DEC A ; DEC LOOP DOWNCOUNTER
JR BOOT6 ; AND LOOP
BOOT8:
LD (LBA),HL ; SAVE NEW LBA, LOW WORD
LD (LBA+2),DE ; SAVE NEW LBA, HIGH WORD
; RESAVE IT
LD (SEKLBA),HL ; LOWORD
LD (SEKLBA+2),DE ; HIWORD
; SUCCESSFUL FINISH
XOR A ; SUCCESS
RET ; DONE
; ; DIFFERENT ALGORITHM FOR NEW HD FORMAT
; LD A,(MEDID) ; GET MEDIA ID
; CP MID_HDNEW ; NEW FORMAT?
; JR Z,DSK_MBR6 ; IF SO, GO THERE
;;
; ; OLD HD FORMAT, 65 TRACKS PER SLICE
; LD A,(SLICE) ; GET SLICE
; LD E,A ; E = SLICE NO
; LD H,65 ; H = TRACKS PER SLICE
; CALL MULT8 ; HL := H * E (TOTAL TRACK OFFSET)
; LD DE,0 ; CLEAR HI WORD
; LD B,8 ; 16 SPT, SHIFT 4 BITS
; CALL RL32 ; DO IT
; JR DSK_MBR7 ; DONE
;;
;DSK_MBR6:
; ; NEW HD FORMAT, MULTIPLY SLICE BY 8MB
; LD DE,0 ; CLEAR HIWORD
; LD H,0 ; CLEAR HI BYTE OR LOWORD
; LD A,(SLICE) ; GET SLICE
; LD L,A ; PUT SLICE IN LOW BYTE
; LD B,14
; CALL RL32 ; MULTIPLY BY 16384 SECTORS (8MB)
;;
;DSK_MBR7:
; ; ADD IN LBA OFFSET
; LD BC,(SEKLBA) ; LBA OFFSET LOWORD
; ADD HL,BC
; EX DE,HL
; LD BC,(SEKLBA+2) ; LBA OFFSET HIWORD
; ADC HL,BC
; EX DE,HL
; SET 7,D ; SET LBA ACCESS BIT
; ; RESAVE IT
; LD (SEKLBA),HL ; LOWORD
; LD (SEKLBA+2),DE ; HIWORD
; ; SUCCESSFUL FINISH
; XOR A ; SUCCESS
; RET ; DONE
;
#ENDIF
;
@ -1654,6 +1688,7 @@ DEFDRIVE .DB 0 ; DEFAULT DRIVE
CCPBUF .DW 0 ; ADDRESS OF CCP BUF IN BIOS BANK
MEDID .DB 0 ; TEMP STORAGE FOR MEDIA ID
SLICE .DB 0 ; CURRENT SLICE
SPS .DW 0 ; SECTORS PER SLICE
;
#IFDEF PLTWBW
BNKBIOS .DB 0 ; BIOS BANK ID

2
Source/CPM3/diskio.z80

@ -499,7 +499,7 @@ media4:
media5:
; Adjust LBA offset based on target slice
ld a,(slice) ; get boot slice, A is loop cnt
ld a,(slice) ; get slice, A is loop cnt
ld hl,(lba) ; set DE:HL
ld de,(lba+2) ; ... to starting LBA
ld bc,(sps) ; sectors per slice

1
Source/HBIOS/romldr.asm

@ -632,7 +632,6 @@ diskboot:
#if (BIOS == BIOS_WBW)
;
; Check that drive actually exists
;ld c,a ; put in C for func call
ld b,BF_SYSGET ; HBIOS func: sys get
ld c,BF_SYSGET_DIOCNT ; HBIOS sub-func: disk count
rst 08 ; do it, E=disk count

Loading…
Cancel
Save