DSSBOOT: исправлена ошибка с загрузкой ядра

This commit is contained in:
Tolik 2025-02-06 03:34:12 +10:00
parent 371e93f6ba
commit 4bde8c738c
5 changed files with 104 additions and 22 deletions

View File

@ -263,6 +263,7 @@ RUN_CORE: DI
;
INC_SECTOR_NUM: PUSH DE
CALL CLUSTER_TO_SECTOR
CALL GET_ABSOLUTE_SECTOR
LD DE,#20 ;!HARDCODE ª®«¨ç¥á⢮ ¯à®ç¨â ­­ëå ᥪâ®à®¢
ADD IX,DE
JR NC,.no_inc

View File

@ -192,6 +192,7 @@ OPENDSK: ;!TEST DRV.Open
RST ToDSS.DRV
POP BC
JR Z,.exit
JR .skip_open ;!FIXIT ª®£¤  DRV.MediaCheck ¨ DRV.Open ¡ã¤ã⠮⫨ç âìáï
;
.open: LD A,C
;
@ -201,7 +202,7 @@ OPENDSK: ;!TEST DRV.Open
POP BC
JP C,.error
;[x] 29/02/2024 fix "open drive error"
LD A,(CORE_BUFFERS.FatBuffer.DRIVE)
.skip_open: LD A,(CORE_BUFFERS.FatBuffer.DRIVE)
LD D,A
PUSH DE
;
@ -217,12 +218,13 @@ OPENDSK: ;!TEST DRV.Open
.exit: LD A,(LDRIVE)
AND A
RET
;
; !FIXIT ª®áâë«ì ¤«ï Flex Navigator ; [ ] media change
.error: CP DSS_Error.sys.INVALID_DRIVE
SCF
RET Z
LD A,DSS_Error.sys.NOT_READY
RET
;
;[x] 29/02/2024 fix "open drive error"; 20/06/2024 fixed
.error_bpb: PUSH AF ; á®å࠭塞 ­®¬¥à ®è¨¡ª¨
LD A,(CORE_BUFFERS.FatBuffer.DRIVE)

View File

@ -1 +1 @@
8
9

View File

@ -294,16 +294,49 @@ Init: PUSH IY
;+10 WORD Sector Size
;+12 BYTE Removable Media Byte flags
;+13_15 FREE
; SelectDrive: PUSH DE
; PUSH HL
; ;
; LD L,A
; ;
; LOGDRV_ENTRY_FIND LOGDRV
; ;
; ; [ ] custorm sector size
; CALL CHECK_IDE_SECTOR_SIZE
; RLA
; ;
; ;
; LD E,(IY+LOGDRV.SECTOR_OFFSET)
; LD D,(IY+LOGDRV.SECTOR_OFFSET+1)
; ADD IX,DE
; LD E,(IY+LOGDRV.SECTOR_OFFSET+2)
; LD D,(IY+LOGDRV.SECTOR_OFFSET+3)
; POP HL
; ADC HL,DE
; ; [ ] custom sector size
; ;JR C,.exit
; RRA
; ;
; .exit: LD A,(IY+LOGDRV.PHISICAL_DRV_NUMBER)
; POP DE
; RET NC
; LD A,DSS_Error.drv.UNKNOWN_FORMAT
; RET
; ¯¥à¥¤¥« âì âã⠯஢¥àªã ­  à §¬¥à ᥪâ®à ?
SelectDrive: PUSH DE
PUSH HL
;
LD L,A
ADD 0 - DSS_MAX_DRIVES_AMOUNT - 1
LD A,DSS_Error.sys.INVALID_DRIVE
JR C,.error_pop
;
LOGDRV_ENTRY_FIND LOGDRV
;
; [ ] custom sector size
CALL CHECK_IDE_SECTOR_SIZE
RLA
LD A,DSS_Error.drv.UNKNOWN_FORMAT
JR C,.error_pop
;
;
LD E,(IY+LOGDRV.SECTOR_OFFSET)
@ -313,15 +346,17 @@ SelectDrive: PUSH DE
LD D,(IY+LOGDRV.SECTOR_OFFSET+3)
POP HL
ADC HL,DE
; [ ] custom sector size
;JR C,.exit
RRA
;
.exit: LD A,(IY+LOGDRV.PHISICAL_DRV_NUMBER)
POP DE
RET NC
LD A,DSS_Error.drv.UNKNOWN_FORMAT
LD A,DSS_Error.drv.SECTOR_NOT_FOUND
RET C
;
LD A,(IY+LOGDRV.PHISICAL_DRV_NUMBER)
RET
;
.error_pop: POP HL
POP DE
RET
; 00 - GET DEVICE PARAMETERS
; 01 - READ TRACK
@ -509,17 +544,55 @@ Close: XOR A
;!TODO ¯®ª  Open ­¨ç¥£® ­¥ ¤¥« ¥â ªà®¬¥ ¯à®¢¥àª¨ MediaCheck
Open: ;CALL MediaCheck
;RET
; JP MediaCheck
Open: CALL MediaCheck
;!TODO
;RET
;CALL READ_PARTITION_PARAMETERS
RET
;
;[ ] media changed - bios 5x DETECT
; ¢ë室 A=#FF - changed, A=0 - not changed, ZF=1 - not changed
; MediaCheck: PUSH IY
; CALL SelectDrive
; JR C,.exit
; ;
; ; [ ] media changed
; LD A,(IY + LOGDRV.PHISICAL_DRV_NUMBER)
; LD C,BIOS.DRV_DETECT ;[ ] media change ¯¥à¥¤¥« âì «®£¨ªã âãâ ¨ ¢ ¡¨®á? ; !FIXIT
; PUSH IY
; RST ToBIOS
; POP IY
; JR NC,.next_check
; ;
; CP BIOS.Error.ATAPI.UnitAttention
; JR Z,.Reinit
; JR .exit
; ;
; .next_check: BIT 1,(IY + LOGDRV.MediaParameters)
; JR NZ,.Reinit
; ;
; XOR A
; .exit: POP IY
; RET
; ;
; .Reinit: LD A,(IY + LOGDRV.PHISICAL_DRV_NUMBER)
; LD (CURRENT_DRIVE.Number),A
; LD (LOGDRV_OFFSET),IY
; ;RES 1,(IY + LOGDRV.MediaParameters)
; CALL DEFINE_PARTITIONS
; LD A,#FF ;!HARDCODE drive changed
; OR A
; POP IY
; RET
MediaCheck: PUSH IY
CALL SelectDrive
JR C,.exit
JR NC,.next_step
;
CP DSS_Error.drv.UNKNOWN_FORMAT
SCF
JR NZ,.exit
; [ ] media changed
.next_step: PUSH AF ; ‘®å࠭塞 CF ¨ ª®¤ ®è¨¡ª¨ UNKNOWN_FORMAT, ¥á«¨ CF=1
LD A,(IY + LOGDRV.PHISICAL_DRV_NUMBER)
LD C,BIOS.DRV_DETECT ;[ ] media change ¯¥à¥¤¥« âì «®£¨ªã âãâ ¨ ¢ ¡¨®á? ; !FIXIT
PUSH IY
@ -529,13 +602,18 @@ MediaCheck: PUSH IY
;
CP BIOS.Error.ATAPI.UnitAttention
JR Z,.Reinit
JR .exit
SCF
POP BC ; <20> « ­á á⥪ 
.exit: POP IY
RET
;
.next_check: BIT 1,(IY + LOGDRV.MediaParameters)
JR NZ,.Reinit
;
POP AF ; ‚®ááâ ­ ¢«¨¢ ¥¬ CF ¨ ª®¤ ®è¨¡ª¨ UNKNOWN_FORMAT, ¥á«¨ CF=1
POP IY
RET C
XOR A
.exit: POP IY
RET
;
.Reinit: LD A,(IY + LOGDRV.PHISICAL_DRV_NUMBER)
@ -543,13 +621,14 @@ MediaCheck: PUSH IY
LD (LOGDRV_OFFSET),IY
;RES 1,(IY + LOGDRV.MediaParameters)
CALL DEFINE_PARTITIONS
POP AF
POP IY
RET C ; ‚®ááâ ­ ¢«¨¢ ¥¬ CF ¨ ª®¤ ®è¨¡ª¨ UNKNOWN_FORMAT, ¥á«¨ CF=1
LD A,#FF ;!HARDCODE drive changed
OR A
POP IY
RET
; [ ] custorm sector size
CHECK_IDE_SECTOR_SIZE:
LD E,(IY+LOGDRV.SECTOR_SIZE)

View File

@ -1 +1 @@
451
452