+ загрузка с любого активного Primary раздела

This commit is contained in:
Anatoliy Belyanskiy 2023-12-18 04:14:12 +10:00
parent f58a3d681b
commit 22efbb84c7
14 changed files with 268 additions and 105 deletions

View File

@ -40,7 +40,7 @@ DRIVE: _mSYSID
LD A,INCORR LD A,INCORR
JR C,FAIL JR C,FAIL
GOOD_DRIVE: GOOD_DRIVE:
LD DE,#8200 LD DE,#8200 ;!HARDCODE
LD HL,0 LD HL,0
LD IX,2 LD IX,2
LD BC,2*256 + BIOS.DRV_READ LD BC,2*256 + BIOS.DRV_READ
@ -174,8 +174,11 @@ CONTINUE:
;DOS LOADED ;DOS LOADED
IF UNIVERSAL_BOOT IF UNIVERSAL_BOOT
;[ ] 17.12.2023 § £à㧪  á  ªâ¨¢­®£® à §¤¥« ,   ­¥ á ¯¥à¢®£®
LD A,(DRIVE) LD A,(DRIVE+1) ; ­®¬¥à à §¤¥« 
LD L,A
;
LD A,(DRIVE) ; ­®¬¥à ãáâனá⢠
LD C,Dss.Version LD C,Dss.Version
RST ToDSS RST ToDSS
jp c,XFAIL.fail jp c,XFAIL.fail
@ -187,7 +190,8 @@ CONTINUE:
LD BC,Dss.BootDSK.Set LD BC,Dss.BootDSK.Set
RST ToDSS RST ToDSS
LD B,high Dss.BootDSK.Get ;LD B,high Dss.BootDSK.Get
LD BC,Dss.BootDSK.Get
ELSE ELSE
IF ORIGINAL_DSS IF ORIGINAL_DSS
@ -198,25 +202,28 @@ CONTINUE:
LD C,Dss.Version LD C,Dss.Version
RST ToDSS RST ToDSS
jp c,XFAIL.fail jp c,XFAIL.fail
ENDIF
LD A,STARTDO
CALL DOSMESS
IF ORIGINAL_DSS
LD A,(DRIVE)
LD BC,Dss.BootDSK.Set
RST ToDSS
LD B,high Dss.BootDSK.Get
ENDIF
ENDIF
LD C,Dss.BootDSK LD C,Dss.BootDSK
ENDIF
LD A,STARTDO
CALL DOSMESS
IF ORIGINAL_DSS
LD A,(DRIVE)
LD BC,Dss.BootDSK.Set
RST ToDSS
;LD B,high Dss.BootDSK.Get
LD B,Dss.BootDSK.Get
ENDIF
ENDIF
;LD C,Dss.BootDSK
RST ToDSS RST ToDSS
ADD A,"A" ADD A,"A"
LD HL,ROOT LD HL,ROOT
LD (HL),A LD (HL),A
LD C,Dss.ChDir LD C,Dss.ChDir
@ -250,23 +257,31 @@ PART_TB: PUSH BC
SBC HL,DE SBC HL,DE
JR NZ,ERRP JR NZ,ERRP
LD IX,BOOT+#01BE LD IX,BOOT+#01BE
LD B,4 LD B,4 ;!HARDCODE áç¥â稪 § ¯¨á¥© ¯ àâ¨æ¨© ¢ MBR
DOSAGA: LD A,(IX+4) DOSAGA: LD A,(IX+4)
CP #0E CP PartitionSysTypes.FAT16_LBA
JR Z,YEPDOS JR Z,YEPDOS
CP 6 CP PartitionSysTypes.FAT16
JR Z,YEPDOS JR Z,YEPDOS
CP 4 CP PartitionSysTypes.FAT16_32Mb
JR Z,YEPDOS JR Z,YEPDOS
CP 1 CP PartitionSysTypes.FAT12
JR Z,YEPDOS JR Z,YEPDOS
LD DE,#10 .next: LD DE,#10
ADD IX,DE ADD IX,DE
DJNZ DOSAGA DJNZ DOSAGA
ERRP: LD A,ERRPART ERRP: LD A,ERRPART
JP FAIL JP FAIL
YEPDOS: LD E,(IX+08) YEPDOS: ;[ ] 17.12.2023 § £à㧪  á  ªâ¨¢­®£® à §¤¥« ,   ­¥ á ¯¥à¢®£®
LD A,#80
CP (IX+0)
JR NZ,DOSAGA.next
LD A,4 ;!HARDCODE áç¥â稪 § ¯¨á¥© ¯ àâ¨æ¨© ¢ MBR
SUB B
PUSH AF ; ­®¬¥à § £à㧮筮£® à §¤¥« 
;
LD E,(IX+08)
LD D,(IX+09) LD D,(IX+09)
LD L,(IX+10) LD L,(IX+10)
LD H,(IX+11) LD H,(IX+11)
@ -278,8 +293,13 @@ YEPDOS: LD E,(IX+08)
LD DE,BOOT LD DE,BOOT
LD BC,1*256 + BIOS.DRV_READ LD BC,1*256 + BIOS.DRV_READ
RST ToBIOS_18 RST ToBIOS_18
;[ ] 17.12.2023 § £à㧪  á  ªâ¨¢­®£® à §¤¥« ,   ­¥ á ¯¥à¢®£®
POP AF
POP BC POP BC
LD L,A ; ­®¬¥à § £à㧮筮£® à §¤¥« 
LD A,C LD A,C
;LD A,C
;
RET RET
SET_PRM: PUSH BC SET_PRM: PUSH BC
@ -311,6 +331,9 @@ GET_BPB: LD IX,#0000
JR NZ,NX1 JR NZ,NX1
CALL PART_TB ;HDD CALL PART_TB ;HDD
RET C RET C
;[ ] 17.12.2023 § £à㧪  á  ªâ¨¢­®£® à §¤¥« ,   ­¥ á ¯¥à¢®£®
LD (DRIVE+1),HL
;
NX1: CP #00 NX1: CP #00
JR NZ,NX2 JR NZ,NX2
CALL SET_PRM ;FDD CALL SET_PRM ;FDD

View File

@ -64,16 +64,24 @@ BEGIN: in a,(SLOT3)
ld c,Dss.Version ; ã§­ âì ¢¥àá¨î „Ž‘ ld c,Dss.Version ; ã§­ âì ¢¥àá¨î „Ž‘
RST ToDSS RST ToDSS
ex de,hl ; hl=⥪. ¢¥àá¨ï ex de,hl ; hl=⥪. ¢¥àá¨ï
ld de,#013C ; 1.60 d=¢¥àá¨ï, e=¬®¤¨ä¨ª æ¨ï, bc - ­®¬¥à ᡮન. de = #013E, bc = #0064 dos ver 1.62.100 ld de,#0146 ; 1.70.810 d=¢¥àá¨ï, e=¬®¤¨ä¨ª æ¨ï, bc - ­®¬¥à ᡮન. de = #0146, bc = 810 dos ver 1.70.810
and a and a
sbc hl,de sbc hl,de
jr nc,version_ok ;[ ] 17.12.2023 § £à㧪  á  ªâ¨¢­®£® à §¤¥« ,   ­¥ á ¯¥à¢®£®
pop hl ;jr nc,version_ok
ld a,11 ; ¨­¤¥ªá áâப¨ "Error: Need DSS version 1.60..." jr z,.check_build ; ¥á«¨ ­®¬¥à ¢¥àᨨ 1.70
jr nc,version_ok ; ¥á«¨ ­®¬¥à ¢¥àᨨ ¡®«ìè¥ 1.70
;
.old_ver: pop hl
ld a,11 ; ¨­¤¥ªá áâப¨ "Error: Need DSS version 1.70..."
call print_string call print_string
ld a,-1 ld a,-1
jp exit jp exit
;[ ] 17.12.2023 § £à㧪  á  ªâ¨¢­®£® à §¤¥« ,   ­¥ á ¯¥à¢®£®
.check_build: ld hl,810 ; 1.70.810 d=¢¥àá¨ï, e=¬®¤¨ä¨ª æ¨ï, bc - ­®¬¥à ᡮન. de = #0146, bc = 810 dos ver 1.70.810
sbc hl,bc
jr nc,BEGIN.old_ver
;
version_ok: xor a ; ¨­¤¥ªá áâப¨ â¨â«  version_ok: xor a ; ¨­¤¥ªá áâப¨ â¨â« 
call print_string call print_string
pop hl ; ª®¬-áâப  pop hl ; ª®¬-áâப 
@ -82,7 +90,7 @@ version_ok: xor a ;
jp c,help ; ­¥â ¯ à ¬¥â஢ jp c,help ; ­¥â ¯ à ¬¥â஢
ld (disk),a ; § ¤ ­­ë© ­®¬¥à ¤¨áª  ld (disk),a ; § ¤ ­­ë© ­®¬¥à ¤¨áª 
; ã§­ âì ­®¬¥à boot-¤¨áª  á¨á⥬ë ; ã§­ âì ­®¬¥à boot-¤¨áª  á¨á⥬ë
ld bc,0009h ld bc,Dss.BootDSK.Get
RST ToDSS RST ToDSS
ld (boot_disk),a ; ¤¨áª (A=0,B=1,..) ld (boot_disk),a ; ¤¨áª (A=0,B=1,..)
; ¯à®¢¥à¨âì ­  ᮢ¯ ¤¥­¨¥ ¤¨áª®¢ ; ¯à®¢¥à¨âì ­  ᮢ¯ ¤¥­¨¥ ¤¨áª®¢
@ -258,16 +266,16 @@ write_boot_loader:
rst 18h rst 18h
ret c ; ®è¨¡ª  ç⥭¨ï ret c ; ®è¨¡ª  ç⥭¨ï
ld a,(buffer+21) ; ¡ ©â ä®à¬ â  ld a,(buffer+21) ; ¡ ©â ä®à¬ â 
cp 0F0h ; 1.44Mb cp #F0 ; 1.44Mb
ret c ; ­¥§­ ª®¬ë© ä®à¬ â ret c ; ­¥§­ ª®¬ë© ä®à¬ â
jr z,write_to_floppy jr z,write_to_floppy
cp 0F9h ; 720kB cp #F9 ; 720kB
jr z,write_to_floppy jr z,write_to_floppy
cp 0FAh ; RAM disk cp #FA ; RAM disk
jr z,write_to_ram_disk jr z,write_to_ram_disk
; pop hl ; ¢®ááâ. ¡ « ­á á⥪  ; pop hl ; ¢®ááâ. ¡ « ­á á⥪ 
; call close_device ; call close_device
cp 0F8h ; ¢¨­â cp #F8 ; ¢¨­â
jr z,write_to_hard_disk jr z,write_to_hard_disk
scf ; ­¥§­ ª®¬ë© ä®à¬ â scf ; ­¥§­ ª®¬ë© ä®à¬ â
ret ret
@ -329,22 +337,77 @@ overwrite_floppy:
; ¢å®¤: ­¥â ; ¢å®¤: ­¥â
; ¢ë室: CF-®è¨¡ª  § ¯¨á¨ ; ¢ë室: CF-®è¨¡ª  § ¯¨á¨
;------------------------------------------------- ;-------------------------------------------------
write_to_ram_disk: write_to_ram_disk:
write_to_hard_disk: write_to_: ld a,(disk) ; ­®¬¥à § ¤ ­­®£® ¤¨áª 
ld a,(disk) ; ­®¬¥à § ¤ ­­®£® ¤¨áª 
ld de,#55AA ld de,#55AA
ld bc,0 * 256 + 8 ld bc,0 * 256 + 8
rst #18 rst #18
ex af,af' ex af,af'
;[ ] 17.12.2023 § £à㧪  á  ªâ¨¢­®£® à §¤¥« ,   ­¥ á ¯¥à¢®£®
ld b,a
inc c
scf
ret z ; !TODO § £à㧪  á à áè¨à¥­­®£® à §¤¥«  ­¥ ¯®¤¤¥à¦¨¢ ¥âáï
dec c
push bc ; B - PHISICAL DRIVE NUMBER, C - PARTITION RECORD NUMBER IN DRIVE MBR
;
ld hl,0 ; áâ. à §àï¤ «®£. ᥪâ®à  ld hl,0 ; áâ. à §àï¤ «®£. ᥪâ®à 
ld ix,1 ; ¬«. à §àï¤ ld ix,1 ; ¬«. à §àï¤
ld de,code_loader ; ®âªã¤  (ª®¤ § £àã§ç¨ª ) ld de,code_loader ; ®âªã¤  (ª®¤ § £àã§ç¨ª )
ld bc,3*256 + BIOS.DRV_WRITE ; § ¯¨á âì 3 ᥪâ®à  (à §¬¥à § £à.) ld bc,3*256 + BIOS.DRV_WRITE ; § ¯¨á âì 3 ᥪâ®à  (à §¬¥à § £à.)
rst 08h rst ToBIOS
;[ ] 17.12.2023 § £à㧪  á  ªâ¨¢­®£® à §¤¥« ,   ­¥ á ¯¥à¢®£®
pop bc
;
ret ret
write_to_hard_disk:
;[ ] 17.12.2023 § £à㧪  á  ªâ¨¢­®£® à §¤¥« ,   ­¥ á ¯¥à¢®£®
CALL write_to_
RET C
;
PUSH BC ; B - PHISICAL DRIVE NUMBER, C - PARTITION RECORD NUMBER IN DRIVE MBR
LD A,B
LD HL,0
LD IX,0
LD DE,buffer
LD BC,1*256 + BIOS.DRV_READ
RST ToBIOS
; check signature
LD HL,(buffer+510) ;!HARDCODE Signature word
LD DE,#AA55
AND A
SBC HL,DE
POP BC ; B - PHISICAL DRIVE NUMBER, C - PARTITION RECORD NUMBER IN DRIVE MBR
SCF
RET NZ
PUSH BC
; set active in buffer
INC C
LD HL,buffer + #01BE + #30 ;!HARDCODE MBR: Offset of last record of partition table in the MBR
LD DE,#10 ; à §¬¥à ®¤­®© § ¯¨á¨ MBR
LD B,4 ;!HARDCODE MBR: Number of entries in the partition table
.loop: XOR A
LD (HL),A
;
LD A,C
CP B
JR NZ,.next
;
LD A,#80
LD (HL),A
;
.next: AND A
SBC HL,DE
DJNZ .loop
; save buffer to disk
POP BC ; B - PHISICAL DRIVE NUMBER, C - PARTITION RECORD NUMBER IN DRIVE MBR
ld a,b
ld hl,0 ; áâ. à §àï¤ «®£. ᥪâ®à 
ld ix,0 ; ¬«. à §àï¤
ld de,buffer ; ®âªã¤  (ª®¤ § £àã§ç¨ª )
ld bc,1*256 + BIOS.DRV_WRITE ; § ¯¨á âì 3 ᥪâ®à  (à §¬¥à § £à.)
JP ToBIOS
;
;------------------------------------------------- ;-------------------------------------------------
; ‚뤥«¨âì § ¤ ­­ë© ¤¨áª ¨§ ª®¬-áâப¨ ; ‚뤥«¨âì § ¤ ­­ë© ¤¨áª ¨§ ª®¬-áâப¨
; ;
@ -471,7 +534,7 @@ lett3: db "X:",0Dh,0Ah
db "Invalid drive specification",0Dh,0Ah,0Ah,0 ;8 db "Invalid drive specification",0Dh,0Ah,0Ah,0 ;8
db " Error: Can't open file",0Dh,0Ah,0Ah,0 ;9 db " Error: Can't open file",0Dh,0Ah,0Ah,0 ;9
db " Error: Can't allocate memory",0Dh,0Ah,0Ah,0 ;10 db " Error: Can't allocate memory",0Dh,0Ah,0Ah,0 ;10
db " Error: Need DOS version 1.60 or higher",0Dh,0Ah,0Ah,0;11 db " Error: Need DOS version 1.70.811 or higher",0Dh,0Ah,0Ah,0 ;11
db " Error: Reading error",0Dh,0Ah,0Ah,0 ;12 db " Error: Reading error",0Dh,0Ah,0Ah,0 ;12
db " Error: Can't create file",0Dh,0Ah,0Ah,0 ;13 db " Error: Can't create file",0Dh,0Ah,0Ah,0 ;13
db " Error: Writing error",0Dh,0Ah,0Ah,0 ;14 db " Error: Writing error",0Dh,0Ah,0Ah,0 ;14

View File

@ -20,18 +20,33 @@ BOOTDSK:
RET RET
; ‘®®¡é¨âì DSS á ª ª®£® ¤¨áª  § £à㦠¥âáï á¨á⥬ . ; ‘®®¡é¨âì DSS á ª ª®£® ¤¨áª  § £à㦠¥âáï á¨á⥬ .
; ˆá¯. § £àã§ç¨ª á¨áâ¥¬ë ¤«ï ¨­¨æ. ï祩ª¨ "boot_disk". ; ˆá¯. § £àã§ç¨ª á¨áâ¥¬ë ¤«ï ¨­¨æ. ï祩ª¨ "boot_disk".
.SET: LD B,A ;SET BOOT DISK
.SET: ;[ ] 17.12.2023 § £à㧪  á  ªâ¨¢­®£® à §¤¥« ,   ­¥ á ¯¥à¢®£®
;LD B,A ;SET BOOT DISK
;LD C,0
LD B,A
LD C,0 LD C,0
LD (.part),HL
;
.loop: PUSH BC .loop: PUSH BC
LD A,C LD A,C
LD DE,#55AA LD DE,#55AA
LD BC,256*0 + Dss.DRV.GenIOCTL LD BC,256*0 + Dss.DRV.GenIOCTL
RST ToDSS.DRV RST ToDSS.DRV
;[ ] 17.12.2023 § £à㧪  á  ªâ¨¢­®£® à §¤¥« ,   ­¥ á ¯¥à¢®£®
LD A,C ; ­®¬¥à ¯ àâ¨æ¨¨ ¢ MBR ¤¨áª 
;
POP BC POP BC
JR C,.NoSupport JR C,.NoSupport
EX AF,AF' ;PHISICAL DRIVE NUMBER EX AF,AF' ;PHISICAL DRIVE NUMBER
CP B CP B
JR NZ,.NoSupport JR NZ,.NoSupport
;[ ] 17.12.2023 § £à㧪  á  ªâ¨¢­®£® à §¤¥« ,   ­¥ á ¯¥à¢®£®
EX AF,AF' ; ­®¬¥à ¯ àâ¨æ¨¨ ¢ MBR ¤¨áª 
.part+1: LD HL,0
CP L
JR NZ,.NoSupport
;
;R13 ;R13
LD A,#38 ; opcode for JR C,addr LD A,#38 ; opcode for JR C,addr
LD (BOOTDSK.chg),A LD (BOOTDSK.chg),A

View File

@ -200,7 +200,7 @@ PORTAL.out_DRV: PUSH BC ;
LD (.RETBANK),A ; LD (.RETBANK),A ;
POP BC ; POP BC ;
POP AF ; POP AF ;
ADCALL+1: CALL DISPATCH ; ¯ âç¨âáï ­  INTDISK .ADCALL+1: CALL DISPATCH ; ¯ âç¨âáï ­  INTDISK
JP PORTAL.out_DRV ; JP PORTAL.out_DRV ;
;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '; ;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ';
; ;
@ -224,7 +224,7 @@ DRV_PAGE.LDRIVE: DB #00
DISPATCH: DISPATCH:
LD HL,INTDISK LD HL,INTDISK
LD (ADCALL),HL LD (PORTAL.out_DRV.ADCALL),HL
INITDVC_RET_DRIVE: INITDVC_RET_DRIVE:
CALL INITDVC CALL INITDVC
LD A,(DRV_PAGE.LDRIVE) LD A,(DRV_PAGE.LDRIVE)
@ -251,11 +251,17 @@ DEVICE EQU $
;+00 BYTE MASTER/SLAVE PHISICAL DRIVE NUMBER #80/#81/... ;+00 BYTE MASTER/SLAVE PHISICAL DRIVE NUMBER #80/#81/...
;+01 LONG SECTOR OFFSET ;+01 LONG SECTOR OFFSET
;+05 LONG SIZE IN SECTORS ;+05 LONG SIZE IN SECTORS
;+09 BYTE PARTITION RECORD NUMBER (in drive MBR)
;+09 FREE ;+09 FREE
;+15 ;+15
LOGDRV EQU DEVICE + DEVICE.End LOGDRV EQU DEVICE + DEVICE.End
.TBL_Entry EQU 16 .TBL_Entry EQU 16
.Size EQU DSS_MAX_DRIVES_AMOUNT * .TBL_Entry .Size EQU DSS_MAX_DRIVES_AMOUNT * .TBL_Entry
;!TODO ᤥ« âì áâàãªâãன
.PHISICAL_DRV_NUMBER EQU 0
.SECTOR_OFFSET EQU 1
.SIZE_IN_SECTORS EQU 5
.PARTITION_RECORD_NUM EQU 9
; ‚•Ž„: L - «®£¨ç¥áª¨© ­®¬¥à ¢ â ¡«¨æ¥ ; ‚•Ž„: L - «®£¨ç¥áª¨© ­®¬¥à ¢ â ¡«¨æ¥
; ‚›•Ž„: IY - ­ ç «® § ¯¨á¨ ; ‚›•Ž„: IY - ­ ç «® § ¯¨á¨
; <20>Ž<EFBFBD>ˆ: HL, IY. HL<-->DE ; <20>Ž<EFBFBD>ˆ: HL, IY. HL<-->DE

View File

@ -265,7 +265,11 @@ PORTAL.out_MAIN: ;
; <20>¥à¢ë© áâ àâ á¨á⥬ë, ¯®á«¥ ¨­¨æ¨ «¨§ æ¨¨  ¤à¥á ¢ â ¡«¨æ¥ ¬¥­ï¥âáï ­  VERSION ; <20>¥à¢ë© áâ àâ á¨á⥬ë, ¯®á«¥ ¨­¨æ¨ «¨§ æ¨¨  ¤à¥á ¢ â ¡«¨æ¥ ¬¥­ï¥âáï ­  VERSION
F_START: DI F_START: DI
LD (.saveDRV),A ;[ ] 17.12.2023 § £à㧪  á  ªâ¨¢­®£® à §¤¥« ,   ­¥ á ¯¥à¢®£®
;LD (.saveDRV),A
LD H,A
LD (.saveDRV),HL ; H - ­®¬¥à ãáâனá⢠, L - ­®¬¥à à §¤¥«  ­  ãáâனá⢥
;
;R12 ;R12
LD C,BIOS.DRV_VERSION LD C,BIOS.DRV_VERSION
@ -297,10 +301,12 @@ F_START: DI
RST ToDSS.DRV RST ToDSS.DRV
LD (LDRIVE),A LD (LDRIVE),A
;R05 ;R05
.saveDRV+1:
.saveDRV+1: LD A,0 ;[ ] 17.12.2023 § £à㧪  á  ªâ¨¢­®£® à §¤¥« ,   ­¥ á ¯¥à¢®£®
;LD BC,1*256 + Dss.BootDSK LD HL,0 ; H - ­®¬¥à ãáâனá⢠, L - ­®¬¥à à §¤¥«  ­  ãáâனá⢥
;RST ToDSS LD A,H
;LD A,0
;
LD B,1 LD B,1
CALL BOOTDSK CALL BOOTDSK

View File

@ -649,18 +649,17 @@ READ_M: IN A,(PORT_MOUSE.Ctrl)
CCF CCF
RET Z RET Z
;!TEST mouse freeeeezzzz ;[x] mouse freeeeezzzz
LD BC,#2000 LD BC,#2000
; ;
TST_01: IN A,(PORT_MOUSE.Ctrl) TST_01: IN A,(PORT_MOUSE.Ctrl)
RRCA RRCA
;!TEST mouse freeeeezzzz ;[x] mouse freeeeezzzz
JR C,.NXT JR C,.NXT
DEC BC DEC BC
LD A,B LD A,B
OR C OR C
JR NZ,TST_01 JR NZ,TST_01
SCF
RET RET
;JR NC,TST_01 ;JR NC,TST_01
; ;
@ -671,12 +670,12 @@ TST_01: IN A,(PORT_MOUSE.Ctrl)
CCF CCF
RET NZ RET NZ
;[x] mouse freeeeezzzz !TEST ;[x] mouse freeeeezzzz
LD BC,#2000 LD BC,#2000
; ;
TST_02: IN A,(PORT_MOUSE.Ctrl) TST_02: IN A,(PORT_MOUSE.Ctrl)
RRCA RRCA
;[x] mouse freeeeezzzz !TEST ;[x] mouse freeeeezzzz
JR C,.NXT JR C,.NXT
DEC BC DEC BC
LD A,B LD A,B

View File

@ -41,7 +41,6 @@ ReScanDRV:
INC HL INC HL
LD H,(HL) LD H,(HL)
LD L,A LD L,A
; [¨é¥¬ çâ® §  ¤à ©¢] ; [¨é¥¬ çâ® §  ¤à ©¢]
EX DE,HL EX DE,HL
; FDD? ; FDD?
@ -276,6 +275,7 @@ Find_Record:
;-----------------------[] ;-----------------------[]
ERROR_BOOTDRV_DIES: ERROR_BOOTDRV_DIES:
DI
LD BC,BIOS.LP_OPEN_S.TXT_80x32_Default LD BC,BIOS.LP_OPEN_S.TXT_80x32_Default
LD E,1 LD E,1
RST ToBIOS RST ToBIOS
@ -370,17 +370,23 @@ HARD_DRV:
LD DE,LOGDRV.TBL_Entry LD DE,LOGDRV.TBL_Entry
LD B,DSS_MAX_DRIVES_AMOUNT LD B,DSS_MAX_DRIVES_AMOUNT
; ;
.loop: LD A,(IY+0) .loop: LD A,(IY+LOGDRV.PHISICAL_DRV_NUMBER)
;CP #FF ;CP #FF
;JR Z,.skip ;JR Z,.skip
CP (IX+0) CP (IX+LOGDRV.PHISICAL_DRV_NUMBER)
JR NZ,.skip JR NZ,.skip
; ;
LD A,(IY+1) LD A,(IY+LOGDRV.SECTOR_OFFSET)
CP (IX+1) CP (IX+LOGDRV.SECTOR_OFFSET)
JR NZ,.skip JR NZ,.skip
LD A,(IY+2) LD A,(IY+LOGDRV.SECTOR_OFFSET+1)
CP (IX+2) CP (IX+LOGDRV.SECTOR_OFFSET+1)
JR NZ,.skip
LD A,(IY+LOGDRV.SECTOR_OFFSET+2)
CP (IX+LOGDRV.SECTOR_OFFSET+2)
JR NZ,.skip
LD A,(IY+LOGDRV.SECTOR_OFFSET+3)
CP (IX+LOGDRV.SECTOR_OFFSET+3)
JR Z,.found JR Z,.found
; ;
.skip: ADD IX,DE .skip: ADD IX,DE
@ -388,7 +394,7 @@ HARD_DRV:
; ‡€<E280A1>ˆœ <20><20>€‰„…<E2809E> ; ‡€<E280A1>ˆœ <20><20>€‰„…<E2809E>
; ƒà®å ¥¬ áâ àãî § ¯¨áì ¢ OLD_TABLES.LOGDRV ; ƒà®å ¥¬ áâ àãî § ¯¨áì ¢ OLD_TABLES.LOGDRV
LD A,#FF LD A,#FF
LD (IY+0),A LD (IY+LOGDRV.PHISICAL_DRV_NUMBER),A
; „®áâ ñ¬ ¯®«®¦¥­¨¥ ¢ OLD_TABLES.DEVICE ; „®áâ ñ¬ ¯®«®¦¥­¨¥ ¢ OLD_TABLES.DEVICE
POP HL POP HL
; „®áâ ñ¬ è £ ®¡é¥£® 横«  ¤«ï ¯®«ã祭¨ï «®£.­®¬¥à  ¤à ©¢  ¢ KILL_FM ; „®áâ ñ¬ è £ ®¡é¥£® 横«  ¤«ï ¯®«ã祭¨ï «®£.­®¬¥à  ¤à ©¢  ¢ KILL_FM
@ -400,7 +406,7 @@ HARD_DRV:
JP ReScanDRV.nextN2 JP ReScanDRV.nextN2
; ;
.found: ; § â¨à ¥¬ ¢ ­®¢®© â ¡«¨æ¥ ᮢ¯ ¢è¨© ¤à ©¢ (ç⮡ «¥£ç¥ ¡ë«® ¯ àá¨âì ®á⠢襥áï) .found: ; § â¨à ¥¬ ¢ ­®¢®© â ¡«¨æ¥ ᮢ¯ ¢è¨© ¤à ©¢ (ç⮡ «¥£ç¥ ¡ë«® ¯ àá¨âì ®á⠢襥áï)
LD (IX+0),#FF LD (IX+LOGDRV.PHISICAL_DRV_NUMBER),#FF
JP ReScanDRV.nextN JP ReScanDRV.nextN
; ;
; CD_ROM: ; CD_ROM:

View File

@ -250,6 +250,7 @@ FDDRIVE:
RET RET
; C - PARTITION RECORD NUMBER IN DRIVE MBR must be 0 here ;[ ] 17.12.2023 § £à㧪  á  ªâ¨¢­®£® à §¤¥« ,   ­¥ á ¯¥à¢®£®
; HL:DE - SECTORS ON LOGICAL DISK ; HL:DE - SECTORS ON LOGICAL DISK
; HL' - CYLINDERS ON PHISICAL DISK ; HL' - CYLINDERS ON PHISICAL DISK
; DE' - HEADS ON PHISICAL DISK ; DE' - HEADS ON PHISICAL DISK
@ -312,6 +313,7 @@ FDDRIVE:
LD H,B LD H,B
EX DE,HL EX DE,HL
EXX EXX
LD C,0 ;[ ] 17.12.2023 § £à㧪  á  ªâ¨¢­®£® à §¤¥« ,   ­¥ á ¯¥à¢®£®
AND A AND A
RET RET

View File

@ -210,9 +210,10 @@ RESR_H LD A,DSS_Error.drv.INVALID_COMMAND
;--------------------------------------------------------------------[v] ;--------------------------------------------------------------------[v]
; c=0 Initialization ; c=0 Initialization
INIT_H: PUSH IY INIT_H: PUSH IY
;!TEST ;[ ] ;!TEST ;[ ] ¤«ï rescanDRV
XOR A XOR A
LD (DRVCLC.count),A LD (DRVCLC.count),A
;
LD HL,LOGDRV LD HL,LOGDRV
LD (OFFSECT),HL LD (OFFSECT),HL
@ -348,6 +349,7 @@ HFRTRAC LD A,DSS_Error.drv.GENERAL_FAILURE
SCF SCF
RET RET
; C - PARTITION RECORD NUMBER IN DRIVE MBR. if #FF - then not supported ;[ ] 17.12.2023 § £à㧪  á  ªâ¨¢­®£® à §¤¥« ,   ­¥ á ¯¥à¢®£®
; HL:DE - SECTORS ON LOGICAL DISK ; HL:DE - SECTORS ON LOGICAL DISK
; HL' - CYLINDERS ON PHISICAL DISK ; HL' - CYLINDERS ON PHISICAL DISK
; DE' - HEADS ON PHISICAL DISK ; DE' - HEADS ON PHISICAL DISK
@ -377,7 +379,7 @@ HGETPRM:
; ;
LOGDRV_ENTRY_FIND LOGDRV LOGDRV_ENTRY_FIND LOGDRV
; ;
LD A,(IY+0) ;MASTER/SLAVE PHISICAL DRIVE NUMBER #80/#81/... LD A,(IY+LOGDRV.PHISICAL_DRV_NUMBER) ;MASTER/SLAVE PHISICAL DRIVE NUMBER #80/#81/...
PUSH IY PUSH IY
LD C,BIOS.DRV_GET_PAR LD C,BIOS.DRV_GET_PAR
RST ToBIOS RST ToBIOS
@ -393,13 +395,16 @@ HGETPRM:
LD B,D LD B,D
EXX EXX
; SECTORS ON LOGICAL DISK ; SECTORS ON LOGICAL DISK
LD E,(IY+5) LD E,(IY+LOGDRV.SIZE_IN_SECTORS+0)
LD D,(IY+6) LD D,(IY+LOGDRV.SIZE_IN_SECTORS+1)
LD L,(IY+7) LD L,(IY+LOGDRV.SIZE_IN_SECTORS+2)
LD H,(IY+8) LD H,(IY+LOGDRV.SIZE_IN_SECTORS+3)
;
;[ ] 17.12.2023 § £à㧪  á  ªâ¨¢­®£® à §¤¥« ,   ­¥ á ¯¥à¢®£®
LD C,(IY+LOGDRV.PARTITION_RECORD_NUM) ; ­®¬¥à ¯ àâ¨æ¨¨ ¢ MBR ¤¨áª 
; ;
EX AF,AF' EX AF,AF'
LD A,(IY+0) ;MASTER/SLAVE PHISICAL DRIVE NUMBER #80/#81/... LD A,(IY+LOGDRV.PHISICAL_DRV_NUMBER) ;MASTER/SLAVE PHISICAL DRIVE NUMBER #80/#81/...
EX AF,AF' EX AF,AF'
; ;
AND A AND A
@ -525,18 +530,32 @@ HIGHDOS:
LD D,XH LD D,XH
LD E,XL LD E,XL
LD IX,(OFFSECT) LD IX,(OFFSECT)
LD (IX+1),E ;BPB SECTOR LD (IX+LOGDRV.SECTOR_OFFSET+0),E ;BPB SECTOR
LD (IX+2),D LD (IX+LOGDRV.SECTOR_OFFSET+1),D
LD (IX+3),L LD (IX+LOGDRV.SECTOR_OFFSET+2),L
LD (IX+4),H LD (IX+LOGDRV.SECTOR_OFFSET+3),H
LD E,(IY+12) LD E,(IY+12)
LD D,(IY+13) LD D,(IY+13)
LD L,(IY+14) LD L,(IY+14)
LD H,(IY+15) LD H,(IY+15)
LD (IX+5),E ;SIZE DISK LD (IX+LOGDRV.SIZE_IN_SECTORS+0),E ;SIZE DISK
LD (IX+6),D LD (IX+LOGDRV.SIZE_IN_SECTORS+1),D
LD (IX+7),L LD (IX+LOGDRV.SIZE_IN_SECTORS+2),L
LD (IX+8),H LD (IX+LOGDRV.SIZE_IN_SECTORS+3),H
;[ ] 17.12.2023 § £à㧪  á  ªâ¨¢­®£® à §¤¥« ,   ­¥ á ¯¥à¢®£®
ExtendedPartitionFlag+1:
LD A,0
OR A ; !TODO § £à㧪  á à áè¨à¥­­®£® à §¤¥«  ­¥ ¯®¤¤¥à¦¨¢ ¥âáï
LD A,#FF
JR NZ,.not_supported ; ¥á«¨ à áè¨à¥­­ë© à §¤¥«, â® ®¡«®¬
;
POP BC
PUSH BC
LD A,4 ;!HARDCODE MBR: Number of entries in the partition table
SUB B
.not_supported:
LD (IX+LOGDRV.PARTITION_RECORD_NUM),A
;
;!TEST <09>®¤áâà å®¢ª  ®â ¯¥à¥¯®«­¥­¨ï â ¡«¨æë LOGDRV ;!TEST <09>®¤áâà å®¢ª  ®â ¯¥à¥¯®«­¥­¨ï â ¡«¨æë LOGDRV
LD A,(DRVCLC.count) LD A,(DRVCLC.count)
INC A INC A
@ -545,17 +564,18 @@ HIGHDOS:
LD (DRVCLC.count),A LD (DRVCLC.count),A
; ;
LD A,(DRV_NUM) LD A,(DRV_NUM)
LD (IX+0),A LD (IX+LOGDRV.PHISICAL_DRV_NUMBER),A
LD DE,LOGDRV.TBL_Entry ;DSKITEM LD DE,LOGDRV.TBL_Entry ;DSKITEM
ADD IX,DE ADD IX,DE
LD (OFFSECT),IX LD (OFFSECT),IX
NXTPART: JP NXTPART
LD DE,#10 ;!HARDCODE SZ_PTE - Size of a partition table entry ; NXTPART:
ADD IY,DE ; LD DE,#10 ;!HARDCODE SZ_PTE - Size of a partition table entry
POP BC ; ADD IY,DE
DJNZ DOSAGA ; POP BC
AND A ; DJNZ DOSAGA
RET ; AND A
; RET
; ;
@ -564,17 +584,18 @@ NOEXTDS:
JR Z,HIGHDOS JR Z,HIGHDOS
CP PartitionSysTypes.FAT16_LBA CP PartitionSysTypes.FAT16_LBA
JR Z,HIGHDOS JR Z,HIGHDOS
CP PartitionSysTypes.FAT16_32M CP PartitionSysTypes.FAT16_32Mb
JR Z,MEDIDOS JR Z,MEDIDOS
CP PartitionSysTypes.FAT12 CP PartitionSysTypes.FAT12
JR Z,EASYDOS JR Z,EASYDOS
CP PartitionSysTypes.Win_Ext_LBA CP PartitionSysTypes.Win_Ext_LBA
JR Z,SUBLEV JR Z,SUBLEV
;[x] 17/12/23 ¯à®¯ã᪠ࠧ¤¥«®¢ á ­¥¨§¢¥áâ­ë¬¨ ”‘, ®¯â¨¬¨§ æ¨ï ¤¥â¥ªâ  ;[x] 17/12/23 ¯à®¯ã᪠ࠧ¤¥«®¢ á ­¥¨§¢¥áâ­ë¬¨ ”‘, ®¯â¨¬¨§ æ¨ï ¤¥â¥ªâ 
OR A ;PartitionSysTypes.Empty ;OR A ;PartitionSysTypes.Empty
JR NZ,NXTPART ;JR NZ,NXTPART
POP BC ; ¡ « ­á á⥪  JR NXTPART ; à §¤¥« ­¥ ¯®¤¤¥à¦¨¢ ¥âáï
RET ;POP BC ; ¡ « ­á á⥪ 
;RET
;POP BC ;POP BC
;OR A ;OR A
;RET Z ;RET Z
@ -583,7 +604,6 @@ NOEXTDS:
;RET ;RET
; ;
PARTIT: IN A,(SLOT3) PARTIT: IN A,(SLOT3)
PUSH AF PUSH AF
LD A,SHARED_PAGE LD A,SHARED_PAGE
@ -623,14 +643,30 @@ SUBLEV: PUSH IY
LD IX,(CURSECH) LD IX,(CURSECH)
PUSH DE PUSH DE
PUSH IX PUSH IX
;[ ] 17/12/23 ¯à®¯ã᪠ࠧ¤¥«®¢ á ­¥¨§¢¥áâ­ë¬¨ ”‘, ®¯â¨¬¨§ æ¨ï ¯¥à¥¡®à  à §¤¥«®¢
LD A,(ExtendedPartitionFlag)
INC A
LD (ExtendedPartitionFlag),A ; !TODO § £à㧪  á à áè¨à¥­­®£® à §¤¥«  ­¥ ¯®¤¤¥à¦¨¢ ¥âáï
;
CALL EXTDOS CALL EXTDOS
;[ ] 17/12/23 ¯à®¯ã᪠ࠧ¤¥«®¢ á ­¥¨§¢¥áâ­ë¬¨ ”‘, ®¯â¨¬¨§ æ¨ï ¯¥à¥¡®à  à §¤¥«®¢
LD A,(ExtendedPartitionFlag)
DEC A
LD (ExtendedPartitionFlag),A ; !TODO § £à㧪  á à áè¨à¥­­®£® à §¤¥«  ­¥ ¯®¤¤¥à¦¨¢ ¥âáï
;
POP IX POP IX
POP DE POP DE
LD (CURSECL),DE LD (CURSECL),DE
LD (CURSECH),IX LD (CURSECH),IX
CALL LOADSEC CALL LOADSEC
POP IY POP IY
JP NXTPART NXTPART:
LD DE,#10 ;!HARDCODE SZ_PTE - Size of a partition table entry
ADD IY,DE
POP BC
DJNZ DOSAGA
AND A
RET
; ;
EXTDOS: LD HL,(EXTDOSL) EXTDOS: LD HL,(EXTDOSL)
LD DE,(EXTDOSH) LD DE,(EXTDOSH)

View File

@ -455,6 +455,7 @@ IOCTL_RD:
SCF SCF
RET RET
; C - PARTITION RECORD NUMBER IN DRIVE MBR must be 0 here ;[ ] 17.12.2023 § £à㧪  á  ªâ¨¢­®£® à §¤¥« ,   ­¥ á ¯¥à¢®£®
; HL:DE - SECTORS ON LOGICAL DISK ; HL:DE - SECTORS ON LOGICAL DISK
; HL' - CYLINDERS ON PHISICAL DISK ; HL' - CYLINDERS ON PHISICAL DISK
; DE' - HEADS ON PHISICAL DISK ; DE' - HEADS ON PHISICAL DISK
@ -515,6 +516,7 @@ IOCTL_RD:
XOR A XOR A
LD L,A LD L,A
LD H,L LD H,L
LD C,A ;[ ] 17.12.2023 § £à㧪  á  ªâ¨¢­®£® à §¤¥« ,   ­¥ á ¯¥à¢®£®
LD A,%10100000 LD A,%10100000
RET RET

View File

@ -1 +1 @@
810 825

View File

@ -70,6 +70,11 @@ cmd_dir:
call MESSAGE ; ¢ë¢¥á⨠áâபã call MESSAGE ; ¢ë¢¥á⨠áâபã
ld c,Dss.WaitKey ld c,Dss.WaitKey
rst ToDSS rst ToDSS
dec d
jr nz,.skip_esc
xor a
ld (.key_p),a ; ®â¬¥­ï¥¬ ESC
.skip_esc:
ld a,32-1 ld a,32-1
.skip_wait: .skip_wait:
PUSH AF PUSH AF
@ -135,9 +140,9 @@ cmd_dir:
.next: ld de,work_buffer1 ; 80 ¡ãä¥à .next: ld de,work_buffer1 ; 80 ¡ãä¥à
ld c,Dss.F_Next ; ¯®¨áª á«¥¤. ld c,Dss.F_Next ; ¯®¨áª á«¥¤.
RST ToDSS RST ToDSS
jr nc,.loop ; ­ § ¤ ¢ 横«, ¥á«¨ ­¥ ª®­¥æ ᯨ᪠ jp nc,.loop ; ­ § ¤ ¢ 横«, ¥á«¨ ­¥ ª®­¥æ ᯨ᪠
pop af ; «¨è­¥¥ ;
pop af ; ¡ « ­á á⥪ 
; „¥áïâ¨ç­ë© ¢ë¢®¤ ; „¥áïâ¨ç­ë© ¢ë¢®¤
.print: ld hl,(D88DC) .print: ld hl,(D88DC)
ld ix,PRM1 ; ¡ãä¥à ld ix,PRM1 ; ¡ãä¥à

View File

@ -1 +1 @@
289 295

@ -1 +1 @@
Subproject commit b9ca4f484d074cc80c221ad37a2a40e7ee670a16 Subproject commit f112b1359045d7fe7aa47f843011fddc5e03eba2