+ загрузка с любого активного 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

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

View File

@ -64,16 +64,24 @@ BEGIN: in a,(SLOT3)
ld c,Dss.Version ; ã§­ âì ¢¥àá¨î „Ž‘
RST ToDSS
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
sbc hl,de
jr nc,version_ok
pop hl
ld a,11 ; ¨­¤¥ªá áâப¨ "Error: Need DSS version 1.60..."
;[ ] 17.12.2023 § £à㧪  á  ªâ¨¢­®£® à §¤¥« ,   ­¥ á ¯¥à¢®£®
;jr nc,version_ok
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
ld a,-1
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 ; ¨­¤¥ªá áâப¨ â¨â« 
call print_string
pop hl ; ª®¬-áâப 
@ -82,7 +90,7 @@ version_ok: xor a ;
jp c,help ; ­¥â ¯ à ¬¥â஢
ld (disk),a ; § ¤ ­­ë© ­®¬¥à ¤¨áª 
; ã§­ âì ­®¬¥à boot-¤¨áª  á¨á⥬ë
ld bc,0009h
ld bc,Dss.BootDSK.Get
RST ToDSS
ld (boot_disk),a ; ¤¨áª (A=0,B=1,..)
; ¯à®¢¥à¨âì ­  ᮢ¯ ¤¥­¨¥ ¤¨áª®¢
@ -258,16 +266,16 @@ write_boot_loader:
rst 18h
ret c ; ®è¨¡ª  ç⥭¨ï
ld a,(buffer+21) ; ¡ ©â ä®à¬ â 
cp 0F0h ; 1.44Mb
cp #F0 ; 1.44Mb
ret c ; ­¥§­ ª®¬ë© ä®à¬ â
jr z,write_to_floppy
cp 0F9h ; 720kB
cp #F9 ; 720kB
jr z,write_to_floppy
cp 0FAh ; RAM disk
cp #FA ; RAM disk
jr z,write_to_ram_disk
; pop hl ; ¢®ááâ. ¡ « ­á á⥪ 
; call close_device
cp 0F8h ; ¢¨­â
cp #F8 ; ¢¨­â
jr z,write_to_hard_disk
scf ; ­¥§­ ª®¬ë© ä®à¬ â
ret
@ -329,22 +337,77 @@ overwrite_floppy:
; ¢å®¤: ­¥â
; ¢ë室: CF-®è¨¡ª  § ¯¨á¨
;-------------------------------------------------
write_to_ram_disk:
write_to_hard_disk:
ld a,(disk) ; ­®¬¥à § ¤ ­­®£® ¤¨áª 
write_to_: ld a,(disk) ; ­®¬¥à § ¤ ­­®£® ¤¨áª 
ld de,#55AA
ld bc,0 * 256 + 8
rst #18
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 ix,1 ; ¬«. à §àï¤
ld de,code_loader ; ®âªã¤  (ª®¤ § £àã§ç¨ª )
ld bc,3*256 + BIOS.DRV_WRITE ; § ¯¨á âì 3 ᥪâ®à  (à §¬¥à § £à.)
rst 08h
rst ToBIOS
;[ ] 17.12.2023 § £à㧪  á  ªâ¨¢­®£® à §¤¥« ,   ­¥ á ¯¥à¢®£®
pop bc
;
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
;
;-------------------------------------------------
; ‚뤥«¨âì § ¤ ­­ë© ¤¨áª ¨§ ª®¬-áâப¨
;
@ -467,14 +530,14 @@ lett2: db "X:",0Dh,0Ah
lett3: db "X:",0Dh,0Ah
db "and strike any key when ready ...",0Dh,0Ah,0Ah,0
;
db "Can't install boot on this disk",0Dh,0Ah,0Ah,0 ;7
db "Invalid drive specification",0Dh,0Ah,0Ah,0 ;8
db " Error: Can't open file",0Dh,0Ah,0Ah,0 ;9
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: Reading error",0Dh,0Ah,0Ah,0 ;12
db " Error: Can't create file",0Dh,0Ah,0Ah,0 ;13
db " Error: Writing error",0Dh,0Ah,0Ah,0 ;14
db "Can't install boot on this disk",0Dh,0Ah,0Ah,0 ;7
db "Invalid drive specification",0Dh,0Ah,0Ah,0 ;8
db " Error: Can't open file",0Dh,0Ah,0Ah,0 ;9
db " Error: Can't allocate memory",0Dh,0Ah,0Ah,0 ;10
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: Can't create file",0Dh,0Ah,0Ah,0 ;13
db " Error: Writing error",0Dh,0Ah,0Ah,0 ;14
endmess: db 0

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -1 +1 @@
810
825

View File

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

View File

@ -1 +1 @@
289
295

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