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 INC_SECTOR_NUM: PUSH DE
CALL CLUSTER_TO_SECTOR CALL CLUSTER_TO_SECTOR
CALL GET_ABSOLUTE_SECTOR
LD DE,#20 ;!HARDCODE ª®«¨ç¥á⢮ ¯à®ç¨â ­­ëå ᥪâ®à®¢ LD DE,#20 ;!HARDCODE ª®«¨ç¥á⢮ ¯à®ç¨â ­­ëå ᥪâ®à®¢
ADD IX,DE ADD IX,DE
JR NC,.no_inc JR NC,.no_inc

View File

@ -192,6 +192,7 @@ OPENDSK: ;!TEST DRV.Open
RST ToDSS.DRV RST ToDSS.DRV
POP BC POP BC
JR Z,.exit JR Z,.exit
JR .skip_open ;!FIXIT ª®£¤  DRV.MediaCheck ¨ DRV.Open ¡ã¤ã⠮⫨ç âìáï
; ;
.open: LD A,C .open: LD A,C
; ;
@ -201,7 +202,7 @@ OPENDSK: ;!TEST DRV.Open
POP BC POP BC
JP C,.error JP C,.error
;[x] 29/02/2024 fix "open drive 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 LD D,A
PUSH DE PUSH DE
; ;
@ -217,12 +218,13 @@ OPENDSK: ;!TEST DRV.Open
.exit: LD A,(LDRIVE) .exit: LD A,(LDRIVE)
AND A AND A
RET RET
; ; !FIXIT ª®áâë«ì ¤«ï Flex Navigator ; [ ] media change
.error: CP DSS_Error.sys.INVALID_DRIVE .error: CP DSS_Error.sys.INVALID_DRIVE
SCF SCF
RET Z RET Z
LD A,DSS_Error.sys.NOT_READY LD A,DSS_Error.sys.NOT_READY
RET RET
;
;[x] 29/02/2024 fix "open drive error"; 20/06/2024 fixed ;[x] 29/02/2024 fix "open drive error"; 20/06/2024 fixed
.error_bpb: PUSH AF ; á®å࠭塞 ­®¬¥à ®è¨¡ª¨ .error_bpb: PUSH AF ; á®å࠭塞 ­®¬¥à ®è¨¡ª¨
LD A,(CORE_BUFFERS.FatBuffer.DRIVE) 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 ;+10 WORD Sector Size
;+12 BYTE Removable Media Byte flags ;+12 BYTE Removable Media Byte flags
;+13_15 FREE ;+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 SelectDrive: PUSH DE
PUSH HL PUSH HL
; ;
LD L,A 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 LOGDRV_ENTRY_FIND LOGDRV
; ;
; [ ] custom sector size ; [ ] custom sector size
CALL CHECK_IDE_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) LD E,(IY+LOGDRV.SECTOR_OFFSET)
@ -313,15 +346,17 @@ SelectDrive: PUSH DE
LD D,(IY+LOGDRV.SECTOR_OFFSET+3) LD D,(IY+LOGDRV.SECTOR_OFFSET+3)
POP HL POP HL
ADC HL,DE ADC HL,DE
; [ ] custom sector size
;JR C,.exit
RRA
;
.exit: LD A,(IY+LOGDRV.PHISICAL_DRV_NUMBER)
POP DE POP DE
RET NC LD A,DSS_Error.drv.SECTOR_NOT_FOUND
LD A,DSS_Error.drv.UNKNOWN_FORMAT RET C
;
LD A,(IY+LOGDRV.PHISICAL_DRV_NUMBER)
RET RET
;
.error_pop: POP HL
POP DE
RET
; 00 - GET DEVICE PARAMETERS ; 00 - GET DEVICE PARAMETERS
; 01 - READ TRACK ; 01 - READ TRACK
@ -509,17 +544,55 @@ Close: XOR A
;!TODO ¯®ª  Open ­¨ç¥£® ­¥ ¤¥« ¥â ªà®¬¥ ¯à®¢¥àª¨ MediaCheck ;!TODO ¯®ª  Open ­¨ç¥£® ­¥ ¤¥« ¥â ªà®¬¥ ¯à®¢¥àª¨ MediaCheck
Open: ;CALL MediaCheck Open: CALL MediaCheck
;RET ;!TODO
; JP MediaCheck ;RET
;CALL READ_PARTITION_PARAMETERS
RET
; ;
;[ ] media changed - bios 5x DETECT ;[ ] media changed - bios 5x DETECT
; ¢ë室 A=#FF - changed, A=0 - not changed, ZF=1 - not changed ; ¢ë室 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 MediaCheck: PUSH IY
CALL SelectDrive CALL SelectDrive
JR C,.exit JR NC,.next_step
; ;
CP DSS_Error.drv.UNKNOWN_FORMAT
SCF
JR NZ,.exit
; [ ] media changed ; [ ] media changed
.next_step: PUSH AF ; ‘®å࠭塞 CF ¨ ª®¤ ®è¨¡ª¨ UNKNOWN_FORMAT, ¥á«¨ CF=1
LD A,(IY + LOGDRV.PHISICAL_DRV_NUMBER) LD A,(IY + LOGDRV.PHISICAL_DRV_NUMBER)
LD C,BIOS.DRV_DETECT ;[ ] media change ¯¥à¥¤¥« âì «®£¨ªã âãâ ¨ ¢ ¡¨®á? ; !FIXIT LD C,BIOS.DRV_DETECT ;[ ] media change ¯¥à¥¤¥« âì «®£¨ªã âãâ ¨ ¢ ¡¨®á? ; !FIXIT
PUSH IY PUSH IY
@ -529,13 +602,18 @@ MediaCheck: PUSH IY
; ;
CP BIOS.Error.ATAPI.UnitAttention CP BIOS.Error.ATAPI.UnitAttention
JR Z,.Reinit JR Z,.Reinit
JR .exit SCF
POP BC ; <20> « ­á á⥪ 
.exit: POP IY
RET
; ;
.next_check: BIT 1,(IY + LOGDRV.MediaParameters) .next_check: BIT 1,(IY + LOGDRV.MediaParameters)
JR NZ,.Reinit JR NZ,.Reinit
; ;
POP AF ; ‚®ááâ ­ ¢«¨¢ ¥¬ CF ¨ ª®¤ ®è¨¡ª¨ UNKNOWN_FORMAT, ¥á«¨ CF=1
POP IY
RET C
XOR A XOR A
.exit: POP IY
RET RET
; ;
.Reinit: LD A,(IY + LOGDRV.PHISICAL_DRV_NUMBER) .Reinit: LD A,(IY + LOGDRV.PHISICAL_DRV_NUMBER)
@ -543,13 +621,14 @@ MediaCheck: PUSH IY
LD (LOGDRV_OFFSET),IY LD (LOGDRV_OFFSET),IY
;RES 1,(IY + LOGDRV.MediaParameters) ;RES 1,(IY + LOGDRV.MediaParameters)
CALL DEFINE_PARTITIONS CALL DEFINE_PARTITIONS
POP AF
POP IY
RET C ; ‚®ááâ ­ ¢«¨¢ ¥¬ CF ¨ ª®¤ ®è¨¡ª¨ UNKNOWN_FORMAT, ¥á«¨ CF=1
LD A,#FF ;!HARDCODE drive changed LD A,#FF ;!HARDCODE drive changed
OR A OR A
POP IY
RET RET
; [ ] custorm sector size ; [ ] custorm sector size
CHECK_IDE_SECTOR_SIZE: CHECK_IDE_SECTOR_SIZE:
LD E,(IY+LOGDRV.SECTOR_SIZE) LD E,(IY+LOGDRV.SECTOR_SIZE)

View File

@ -1 +1 @@
451 452