add boot from ATAPI

This commit is contained in:
Tolik 2025-02-15 01:58:14 +10:00
parent 1cb8ee9e78
commit 65a2957424
5 changed files with 193 additions and 190 deletions

@ -1 +1 @@
Subproject commit 237dd36651b4af124f12d3f1eaee3688467f8fa3
Subproject commit 831b2da8a66ee3bd78a7c73ef3592609e5f02902

View File

@ -3,8 +3,7 @@
; ‚室: A - ­®¬¥à ãáâனá⢠, C - DriveType
; ‚ë室: A - MediaParameters, C - DriveType
; ­¥ ¯®àâ¨â L
SELECT_DRIVE:
AND #0F
SELECT_DRIVE: AND #0F
LD IY,IDE.INIT_TBL_IDE0
JR Z,.channel
DEC A
@ -17,13 +16,9 @@ SELECT_DRIVE:
DEC A
LD IY,IDE.INIT_TBL_IDE3
;
JR Z,.channel
LD A,BIOS.Error.BadNumber
SCF
RET
JR NZ,.error
;
.channel:
EXX
.channel: EXX
IN A,(SLOT3)
PUSH AF
LD A,SYS_PAGE
@ -59,10 +54,9 @@ SELECT_DRIVE:
EXX
RET
;
; NODRIVE:
; LD A,BIOS.Error.BadDrvNumber
; SCF
; RET
.error: LD A,BIOS.Error.BadNumber
SCF
RET
;=======================================================================

View File

@ -457,9 +457,9 @@ IDESPEC: IN A,(SLOT3)
CP BIOS.Error.ATAPI.UnitAttention
JR Z,IDESPEC.END
;
CP BIOS.Error.ATAPI.NotReady
SCF
JR NZ,.set_sector ; «î¡ ï ­¥¯®­ïâ­ ï ®è¨¡ª  - ­¥â ­®á¨â¥«ï
;CP BIOS.Error.ATAPI.NotReady
;SCF
;JR NZ,.set_sector ; «î¡ ï ­¥¯®­ïâ­ ï ®è¨¡ª  - ­¥â ­®á¨â¥«ï
HALT
DJNZ .get_error_loop
;

View File

@ -74,7 +74,8 @@
;FDD EQU #03
;!FIXIT ­®à¬ «ì­® ¯à®¯¨á âì
TEMP EQU #7E00 ; !HARDCODE
TEMP EQU #7800 ; !HARDCODE
OS_LOAD.SectorSizeAddr EQU TEMP-2
IDENTIFY_DEVICE_BUFFER _ATA_IDENTIFY_DEVICE_DATA = TEMP
MEMMAP2 EQU TEMP ; ¤®«¦­® ¡ëâì ¢ë஢­¥­® ¯® ALIGN 256
TPOINTD EQU TEMP - SYS_PAGE.RAMD_KEYS.NUM; - SYS_PAGE.Sp_RAMD_KEYS.NUM ; [x] 4/11/2023
@ -1059,9 +1060,8 @@ PrepareToBOOT: ;CALL INT_ON
; Error
SCF
RET
FDSTART:
PUSH BC
;
FDSTART: PUSH BC
PUSH BC
LD A,msgStrings.bootFdd
CALL POSTMSG
@ -1070,8 +1070,10 @@ FDSTART:
POP BC
RET C
JP OS_LOAD
;!TODO
CDSTART:
;
CDSTART: LD A,B ; [ ] 15/02/2025 boot from ATAPI
OR DRIVE_CODES.SPRINTER.ATAPI
LD B,A
PUSH BC
LD A,msgStrings.bootCd
CALL POSTMSG
@ -1080,12 +1082,15 @@ CDSTART:
CALL PRINT_CHANEL
;
POP BC
SET 6,B
SCF
RET
RDSTART:
LD A,msgStrings.bootRamDrv
PUSH BC
CALL OS_LOAD
POP BC
RET NC
LD HL,2048 ;!HARDCODE sector size
LD IX,#0011
JR OS_LOAD.CD
;
RDSTART: LD A,msgStrings.bootRamDrv
CALL POSTMSG
LD B,DRIVE_CODES.SPRINTER.RAM ; 6 - ⨯ ¤à ©¢  RAM-DRV, 0 - ­®¬¥à ¤à ©¢ 
.loop: PUSH BC
@ -1098,8 +1103,7 @@ RDSTART:
RET
HDSTART:
IN A,(SLOT3)
HDSTART: IN A,(SLOT3)
EX AF,AF'
LD A,SYS_PAGE
OUT (SLOT3),A
@ -1132,21 +1136,23 @@ HDSTART:
POP AF
PUSH AF
CALL PRINT_CHANEL
;
POP BC
POP AF
CP #FF
SCF
RET Z
OS_LOAD:
LD HL,#0000
;
OS_LOAD: LD HL,512 ;!HARDCODE
LD IX,#0001
.CD: LD (.SectorSizeAddr),HL
LD HL,#0000
LD DE,TEMP
LD A,B
LD BC,1*256 + BIOS.DRV_READ
PUSH AF
RST ToBIOS_18
;
POP BC
RET C
LD A,B
@ -1165,26 +1171,29 @@ OS_LOAD:
PUSH AF
LD A,msgStrings.bootOk
LD E,COLORS.CGA.INK.LGREEN
;CALL POSTMSG
CALL POSTMSC
CALL ScreenPOS.CRLF
POP AF
POP AF ; 䨧¨ç¥áª¨© ­®¬¥à ¤¨áª 
POP HL
; JP MOVE0
MOVE0: DI
.MOVE0: DI
IM 1
LD HL,MOVE1
LD DE,#7C00 ; !HARDCODE
LD DE,OS_LOAD.SectorSizeAddr - MOVE1.length ; !HARDCODE
LD BC,MOVE1.length
LDIR
JP #7C00
MOVE1: LD SP,#7FFF ; !HARDCODE
JP OS_LOAD.SectorSizeAddr - MOVE1.length
;
MOVE1: LD HL,#8000 ; !HARDCODE
LD SP,HL
EX DE,HL
LD HL,TEMP
LD DE,#8000 ; !HARDCODE
LD BC,#0200 ; !HARDCODE
LD BC,(OS_LOAD.SectorSizeAddr)
LDIR
JP #8000+SYSID.length ;#800C ; !HARDCODE
;
.length EQU $-MOVE1
SYSID: DZ "Starting..."
.length EQU $-SYSID