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

@ -131,7 +131,7 @@ ATAPI_5x_SET_PAR:
LD (IY+IDE.HDD_INIT_TABLE.MediaParameters),B
EX AF,AF
OUT (SLOT3),A
RET
RET
;[]================================================================[#59]

View File

@ -3,66 +3,60 @@
; ‚室: A - ­®¬Ąŕ ăáâனá⢠, C - DriveType
; ‚ë室: A - MediaParameters, C - DriveType
; ­Ą Ż®ŕâ¨â L
SELECT_DRIVE:
AND #0F
LD IY,IDE.INIT_TBL_IDE0
JR Z,.channel
DEC A
LD IY,IDE.INIT_TBL_IDE1
;R02
JR Z,.channel
DEC A
LD IY,IDE.INIT_TBL_IDE2
JR Z,.channel
DEC A
LD IY,IDE.INIT_TBL_IDE3
;
JR Z,.channel
LD A,BIOS.Error.BadNumber
SCF
RET
;
.channel:
EXX
IN A,(SLOT3)
PUSH AF
LD A,SYS_PAGE
OUT (SLOT3),A
;
LD H,(IY + IDE.HDD_INIT_TABLE.MediaParameters)
LD C,(IY + IDE.HDD_INIT_TABLE.DriveType)
LD B,(IY + IDE.HDD_INIT_TABLE.DRV_Flags)
POP AF
OUT (SLOT3),A ;¢®§¢à â áâà ­¨æë
;
LD A,C
EXX
;
CP C
;
EXX
SCF
LD A,BIOS.Error.BadNumber
RET NZ
;
LD A,B
RRA
LD A,IDE.Chanel.Secondary
JR C,.device
LD A,IDE.Chanel.Primary
.device: OUT (IDE.Chanel.Set),A ;R02
LD A,B
AND #F0
LD BC,IDE.Write.DeviceHead
OUT (C),A
LD A,H
EXX
RET
;
; NODRIVE:
; LD A,BIOS.Error.BadDrvNumber
; SCF
; RET
SELECT_DRIVE: AND #0F
LD IY,IDE.INIT_TBL_IDE0
JR Z,.channel
DEC A
LD IY,IDE.INIT_TBL_IDE1
;R02
JR Z,.channel
DEC A
LD IY,IDE.INIT_TBL_IDE2
JR Z,.channel
DEC A
LD IY,IDE.INIT_TBL_IDE3
;
JR NZ,.error
;
.channel: EXX
IN A,(SLOT3)
PUSH AF
LD A,SYS_PAGE
OUT (SLOT3),A
;
LD H,(IY + IDE.HDD_INIT_TABLE.MediaParameters)
LD C,(IY + IDE.HDD_INIT_TABLE.DriveType)
LD B,(IY + IDE.HDD_INIT_TABLE.DRV_Flags)
POP AF
OUT (SLOT3),A ;¢®§¢à â áâà ­¨æë
;
LD A,C
EXX
;
CP C
;
EXX
SCF
LD A,BIOS.Error.BadNumber
RET NZ
;
LD A,B
RRA
LD A,IDE.Chanel.Secondary
JR C,.device
LD A,IDE.Chanel.Primary
.device: OUT (IDE.Chanel.Set),A ;R02
LD A,B
AND #F0
LD BC,IDE.Write.DeviceHead
OUT (C),A
LD A,H
EXX
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,9 +74,10 @@
;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
MEMMAP2 EQU TEMP ; ¤®«¦­® ¡ëâì ¢ë஢­¥­® ¯® ALIGN 256
TPOINTD EQU TEMP - SYS_PAGE.RAMD_KEYS.NUM; - SYS_PAGE.Sp_RAMD_KEYS.NUM ; [x] 4/11/2023
ASSERT (low TEMP = 0) or (low MEMMAP2 = 0), "ERROR Align 256!!!"
@ -1059,132 +1060,140 @@ PrepareToBOOT: ;CALL INT_ON
; Error
SCF
RET
FDSTART:
PUSH BC
PUSH BC
LD A,msgStrings.bootFdd
CALL POSTMSG
POP AF
CALL FDD_5x_RESET
POP BC
RET C
JP OS_LOAD
;!TODO
CDSTART:
PUSH BC
LD A,msgStrings.bootCd
CALL POSTMSG
POP AF
PUSH AF
CALL PRINT_CHANEL
;
POP BC
SET 6,B
SCF
RET
RDSTART:
LD A,msgStrings.bootRamDrv
CALL POSTMSG
LD B,DRIVE_CODES.SPRINTER.RAM ; 6 - ⨯ ¤à ©¢  RAM-DRV, 0 - ­®¬¥à ¤à ©¢ 
.loop: PUSH BC
CALL OS_LOAD
POP BC
INC B
LD A,DRIVE_CODES.SPRINTER.RAM + SYS_PAGE.RAMD_KEYS.NUM-1 ; ¬ ªá¨¬ «ì­ë© ­®¬¥à à ¬¤¨áª 
SUB B
JR NC,.loop
RET
;
FDSTART: PUSH BC
PUSH BC
LD A,msgStrings.bootFdd
CALL POSTMSG
POP AF
CALL FDD_5x_RESET
POP BC
RET C
JP OS_LOAD
;
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
POP AF
PUSH AF
CALL PRINT_CHANEL
;
POP BC
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
CALL OS_LOAD
POP BC
INC B
LD A,DRIVE_CODES.SPRINTER.RAM + SYS_PAGE.RAMD_KEYS.NUM-1 ; ¬ ªá¨¬ «ì­ë© ­®¬¥à à ¬¤¨áª 
SUB B
JR NC,.loop
RET
HDSTART:
IN A,(SLOT3)
EX AF,AF'
LD A,SYS_PAGE
OUT (SLOT3),A
LD A,B
;
AND #03 ;R02 %00000011
LD IY,IDE.INIT_TBL_IDE0
JR Z,.next
;
LD IY,IDE.INIT_TBL_IDE1
CP 1 ;R02
JR Z,.next
;
LD IY,IDE.INIT_TBL_IDE2 ;R02
CP 2 ;R02
JR Z,.next
;
LD IY,IDE.INIT_TBL_IDE3 ;R02
;
.next: LD A,(IY+IDE.HDD_INIT_TABLE.DriveType)
EX AF,AF'
OUT (SLOT3),A
EX AF,AF'
CP IDE.Device.ATAPI
JP Z,CDSTART
PUSH AF
PUSH BC
LD A,msgStrings.bootHdd
CALL POSTMSG
POP AF
PUSH AF
CALL PRINT_CHANEL
HDSTART: IN A,(SLOT3)
EX AF,AF'
LD A,SYS_PAGE
OUT (SLOT3),A
LD A,B
;
AND #03 ;R02 %00000011
LD IY,IDE.INIT_TBL_IDE0
JR Z,.next
;
LD IY,IDE.INIT_TBL_IDE1
CP 1 ;R02
JR Z,.next
;
LD IY,IDE.INIT_TBL_IDE2 ;R02
CP 2 ;R02
JR Z,.next
;
LD IY,IDE.INIT_TBL_IDE3 ;R02
;
.next: LD A,(IY+IDE.HDD_INIT_TABLE.DriveType)
EX AF,AF'
OUT (SLOT3),A
EX AF,AF'
CP IDE.Device.ATAPI
JP Z,CDSTART
PUSH AF
PUSH BC
LD A,msgStrings.bootHdd
CALL POSTMSG
POP AF
PUSH AF
CALL PRINT_CHANEL
;
POP BC
POP AF
CP #FF
SCF
RET Z
;
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
EX AF,AF'
LD HL,TEMP
LD DE,SYSID
LD B,SYSID.length
.loop: LD A,(DE)
CP (HL)
SCF
RET NZ
INC HL
INC DE
DJNZ .loop
EX AF,AF'
PUSH AF
LD A,msgStrings.bootOk
LD E,COLORS.CGA.INK.LGREEN
CALL POSTMSC
CALL ScreenPOS.CRLF
POP AF ; 䨧¨ç¥áª¨© ­®¬¥à ¤¨áª 
POP HL
.MOVE0: DI
IM 1
LD HL,MOVE1
LD DE,OS_LOAD.SectorSizeAddr - MOVE1.length ; !HARDCODE
LD BC,MOVE1.length
LDIR
JP OS_LOAD.SectorSizeAddr - MOVE1.length
;
MOVE1: LD HL,#8000 ; !HARDCODE
LD SP,HL
EX DE,HL
LD HL,TEMP
LD BC,(OS_LOAD.SectorSizeAddr)
LDIR
JP #8000+SYSID.length ;#800C ; !HARDCODE
;
.length EQU $-MOVE1
POP BC
POP AF
CP #FF
SCF
RET Z
OS_LOAD:
LD HL,#0000
LD IX,#0001
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
EX AF,AF'
LD HL,TEMP
LD DE,SYSID
LD B,SYSID.length
.loop: LD A,(DE)
CP (HL)
SCF
RET NZ
INC HL
INC DE
DJNZ .loop
EX AF,AF'
PUSH AF
LD A,msgStrings.bootOk
LD E,COLORS.CGA.INK.LGREEN
;CALL POSTMSG
CALL POSTMSC
CALL ScreenPOS.CRLF
POP AF
POP HL
; JP MOVE0
MOVE0: DI
IM 1
LD HL,MOVE1
LD DE,#7C00 ; !HARDCODE
LD BC,MOVE1.length
LDIR
JP #7C00
MOVE1: LD SP,#7FFF ; !HARDCODE
LD HL,TEMP
LD DE,#8000 ; !HARDCODE
LD BC,#0200 ; !HARDCODE
LDIR
JP #8000+SYSID.length ;#800C ; !HARDCODE
.length EQU $-MOVE1
SYSID: DZ "Starting..."
.length EQU $-SYSID