This commit is contained in:
Anatoliy Belyanskiy 2024-01-06 00:55:03 +10:00
parent d6ed41730c
commit f734b2a361
2 changed files with 78 additions and 92 deletions

@ -1 +1 @@
Subproject commit d1ce63928bdbb44e48b311f9d4a0005c2f44fcd4 Subproject commit 24e062942e2c89a1bcd5817cc82316b52186f86c

View File

@ -6,25 +6,25 @@
; MS-DOS utilites ; MS-DOS utilites
;******************************************** ;********************************************
;************************************************
;* <09>ணࠬ¬  ç⥭¨ï/§ ¯¨á¨ MS-DOS ¤¨áª®¢ *
;* 1. €¤à¥á ¡ãä¥à  - HL *
;* 2. <20>®¬¥à ᥪâ®à  - DE *
;* 3. —¨á«® ᥪâ®à®¢ - B *
;* 4. Š®¬ ­¤  - C *
;* 5. ‘âà ­¨æ  އ“ - A *
;************************************************
HDD_REDIR:
POP AF
CALL HD_CMD
RET NC
JP HDD_ERROR
MSD_R_W_UT: MSD_R_W_UT:
PUSH AF PUSH AF
CALL DISK_REDIR CALL DISK_REDIR
CP #40 CP #40
JR NC,HDD_REDIR JR C,.NOT_HDD
;************************************************
;* <20>®¤¯à®£à ¬¬  ç⥭¨ï/§ ¯¨á¨ MS-DOS ¤¨áª®¢ *
;* 1. €¤à¥á ¡ãä¥à  - HL *
;* 2. <20>®¬¥à ᥪâ®à  - DE *
;* 3. —¨á«® ᥪâ®à®¢ - B *
;* 4. Š®¬ ­¤  - C *
;* 5. ‘âà ­¨æ  އ“ - A *
;************************************************
.HDD: POP AF
CALL HD_CMD
RET NC
JP HDD_ERROR
;************************************************
.NOT_HDD:
POP AF POP AF
EX AF,AF' EX AF,AF'
LD A,C LD A,C
@ -417,21 +417,19 @@ SET_1440:
READ_BPB: READ_BPB:
CALL DISK_REDIR CALL DISK_REDIR
CP #40 CP #40
JR NC,HDD_REDIR2 JR NC,.HDD_REDIR2
CP 4 CP 4
JP NC,ERROR_MSDOS JP NC,.ERROR_MSDOS
CALL SET_DISK CALL SET_DISK
CALL MAIN_BPB CALL .MAIN
RET NC RET NC
JP ERROR_MSDOS JP .ERROR_MSDOS
.HDD_REDIR2:
HDD_REDIR2: CALL .MAIN
CALL MAIN_BPB
RET NC RET NC
.SPACIAL:
SPACIAL_BPB:
LD IX,0 LD IX,0
LD DE,63 LD DE,63
LD A,SYS_PAGE LD A,SYS_PAGE
@ -439,43 +437,38 @@ SPACIAL_BPB:
LD C,BIOS.HDD_READ and #BF LD C,BIOS.HDD_READ and #BF
LD B,1 LD B,1
CALL MSD_R_W_UT CALL MSD_R_W_UT
CALL BPB_PARAMS CALL READ_BPB.PARAMS
RET NC RET NC
JP ERROR_MSDOS JP .ERROR_MSDOS
.MAIN: LD A,SYS_PAGE
MAIN_BPB:
;LD IX,0
;LD DE,0
LD A,SYS_PAGE
LD HL,MS_BPB LD HL,MS_BPB
LD C,BIOS.HDD_READ_BPB and #BF LD C,BIOS.HDD_READ_BPB and #BF
;LD B,1
CALL MSD_R_W_UT CALL MSD_R_W_UT
CALL BPB_PARAMS ;CALL BPB_PARAMS
RET ;RET
; LD C,18H ; LD C,18H
; LD A,(OPER_DISK) ; LD A,(OPER_DISK)
; CALL HD_CMD ; CALL HD_CMD
; ;
; DI
; IN A,(PAGE3)
; EX AF,AF'
; LD A,SYS_PAGE
; OUT (PAGE3),A
; ;
; LD A,(MS_BPB+S_P_T) ; Š®«¨ç¥á⢮ ᥪâ®à®¢ ­  â४
; LD L,A
; ;
; EX AF,AF'
; OUT (PAGE3),A
; EI
; ;
; LD A,(OPER_DISK)
; LD C,19H
; CALL HD_CMD
; DI .PARAMS:
; IN A,(PAGE3)
; EX AF,AF'
; LD A,SYS_PAGE
; OUT (PAGE3),A
;
; LD A,(MS_BPB+S_P_T) ; Š®«¨ç¥á⢮ ᥪâ®à®¢ ­  â४
; LD L,A
;
; EX AF,AF'
; OUT (PAGE3),A
; EI
;
; LD A,(OPER_DISK)
; LD C,19H
; CALL HD_CMD
BPB_PARAMS:
DI DI
IN A,(PAGE3) IN A,(PAGE3)
EX AF,AF' EX AF,AF'
@ -484,35 +477,32 @@ BPB_PARAMS:
LD A,(MS_BPB+FORM_CODE) LD A,(MS_BPB+FORM_CODE)
CP #F0 CP #F0
JP C,ERROR_BPB JP C,.ERROR_BPB
LD HL,MS_BPB+FAT_ID LD HL,MS_BPB+FAT_ID
LD DE,FAT1_MSG LD DE,.FAT1_MSG
LD B,4 LD B,4
R_BPB_L1: .L1: LD A,(DE)
LD A,(DE)
CP ' ' CP ' '
JR NZ,R_BPB_L11 JR NZ,.L11
INC DE INC DE
JR R_BPB_L1 JR .L1
R_BPB_L11: .L11: CP (HL)
CP (HL) JR NZ,.PC_DOS
JR NZ,PC_DOS_BPB
INC HL INC HL
INC DE INC DE
DJNZ R_BPB_L1 DJNZ .L1
LD A,(HL) LD A,(HL)
CP '6' CP '6'
LD HL,#81FF ; FAT16 ä« £ LD HL,#81FF ; FAT16 ä« £
JR Z,BPB_FAT JR Z,.FAT
CP '2' CP '2'
JP NZ,ERROR_BPB JP NZ,.ERROR_BPB
PC_DOS_BPB: .PC_DOS:
LD HL,#01FF ; FAT12 ä« £ LD HL,#01FF ; FAT12 ä« £
BPB_FAT: .FAT: LD (FAT_FLAG),HL
LD (FAT_FLAG),HL
LD A,(MS_BPB+S_P_T) ; Š®«¨ç¥á⢮ ᥪâ®à®¢ ­  â४ LD A,(MS_BPB+S_P_T) ; Š®«¨ç¥á⢮ ᥪâ®à®¢ ­  â४
LD (MSD_SECS),A LD (MSD_SECS),A
@ -522,11 +512,10 @@ BPB_FAT:
LD IX,0 LD IX,0
LD HL,0 ; ¢ëç¨á«¨âì ­ ç «ì­ë© ᥪâ®à FAT LD HL,0 ; ¢ëç¨á«¨âì ­ ç «ì­ë© ᥪâ®à FAT
JR Z,NO_LD_SPECIAL JR Z,.NO_LD_SPECIAL
LD IX,(MS_BPB+SPECIAL_SECS) LD IX,(MS_BPB+SPECIAL_SECS)
LD HL,(MS_BPB+SPECIAL_SECS+2) LD HL,(MS_BPB+SPECIAL_SECS+2)
NO_LD_SPECIAL: .NO_LD_SPECIAL:
LD BC,0 LD BC,0
LD DE,(MS_BPB+RESERV_SECS) LD DE,(MS_BPB+RESERV_SECS)
@ -540,11 +529,11 @@ NO_LD_SPECIAL:
LD BC,0 LD BC,0
LD A,(MS_BPB+FATS_NUM) ; ª®«¨ç¥á⢮ FATs LD A,(MS_BPB+FATS_NUM) ; ª®«¨ç¥á⢮ FATs
NEXT_ADD: .NEXT_ADD:
ADD IX,DE ADD IX,DE
ADC HL,BC ADC HL,BC
DEC A DEC A
JR NZ,NEXT_ADD JR NZ,.NEXT_ADD
LD (MSD_CAT_SEC),IX ; ­ ç «ì­ë© ᥪâ®à DIR LD (MSD_CAT_SEC),IX ; ­ ç «ì­ë© ᥪâ®à DIR
LD (MSD_CAT_SEC2),HL ; ­ ç «ì­ë© ᥪâ®à DIR LD (MSD_CAT_SEC2),HL ; ­ ç «ì­ë© ᥪâ®à DIR
@ -566,11 +555,11 @@ NEXT_ADD:
EX DE,HL EX DE,HL
DEC HL DEC HL
XOR A XOR A
NEXT_ADD2: .NEXT_ADD2:
INC A INC A
JR Z,ERROR_BPB JR Z,.ERROR_BPB
SBC HL,BC SBC HL,BC
JR NC,NEXT_ADD2 JR NC,.NEXT_ADD2
EX DE,HL EX DE,HL
LD E,A ; A - ç¨á«® ᥪâ®à®¢ ¢ DIR LD E,A ; A - ç¨á«® ᥪâ®à®¢ ¢ DIR
@ -589,11 +578,11 @@ NEXT_ADD2:
LD A,(MS_BPB+CLAST_SIZE) LD A,(MS_BPB+CLAST_SIZE)
LD D,A LD D,A
LD A,0 LD A,0
NEXT_ADD3: .NEXT_ADD3:
ADD HL,BC ; ‚ëç¨á«¥­¨¥ ¤«¨­ë ª« áâ¥à  ADD HL,BC ; ‚ëç¨á«¥­¨¥ ¤«¨­ë ª« áâ¥à 
ADC A,0 ADC A,0
DEC D DEC D
JR NZ,NEXT_ADD3 JR NZ,.NEXT_ADD3
LD (CLASTER_LEN),HL LD (CLASTER_LEN),HL
LD B,0 LD B,0
@ -603,31 +592,28 @@ NEXT_ADD3:
LD HL,0 LD HL,0
LD BC,(MS_BPB+S_P_T) LD BC,(MS_BPB+S_P_T)
LD A,(MS_BPB+H_P_S) LD A,(MS_BPB+H_P_S)
BPB_L1: ; ‚›—ˆ‘‹ˆ’œ ŠŽ‹ˆ—…‘’‚Ž …ŠŽ<E28099>Ž <20>ˆˆ<E280B9><EFBFBD> .BPB_L1:; ‚›—ˆ‘‹ˆ’œ ŠŽ‹ˆ—…‘’‚Ž …ŠŽ<E28099>Ž <20>ˆˆ<E280B9><EFBFBD>
ADD HL,BC ADD HL,BC
DEC A DEC A
JR NZ,BPB_L1 JR NZ,.BPB_L1
LD (S_X_H),HL LD (S_X_H),HL
;
EX AF,AF' EX AF,AF'
OUT (PAGE3),A OUT (PAGE3),A
EI EI
AND A AND A
RET RET
.ERROR_BPB:
ERROR_BPB:
EX AF,AF' EX AF,AF'
OUT (PAGE3),A OUT (PAGE3),A
SCF SCF
EI EI
RET RET
.ERROR_MSDOS:
ERROR_MSDOS:
LD HL,MSG_3 LD HL,MSG_3
JP AUTO_03E4 JP AUTO_03E4
.FAT1_MSG:
FAT1_MSG: DB 'FAT1' DB 'FAT1'
;******************************************** ;********************************************
READ_NEXT_DIR: READ_NEXT_DIR:
DI DI
@ -713,7 +699,7 @@ LOOP_TRK:
INC A INC A
JR NZ,LOOP_TRK JR NZ,LOOP_TRK
POP BC POP BC
JP ERROR_BPB JP READ_BPB.ERROR_BPB
SEC_ENDER: SEC_ENDER:
ADD HL,BC ADD HL,BC