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 LD (IY+IDE.HDD_INIT_TABLE.MediaParameters),B
EX AF,AF EX AF,AF
OUT (SLOT3),A OUT (SLOT3),A
RET RET
;[]================================================================[#59] ;[]================================================================[#59]

View File

@ -3,66 +3,60 @@
; ‚室: A - ­®¬Ąŕ ăáâனá⢠, C - DriveType ; ‚室: A - ­®¬Ąŕ ăáâனá⢠, C - DriveType
; ‚ë室: A - MediaParameters, C - DriveType ; ‚ë室: A - MediaParameters, C - DriveType
; ­Ą Ż®ŕâ¨â L ; ­Ą Ż®ŕâ¨â L
SELECT_DRIVE: SELECT_DRIVE: AND #0F
AND #0F LD IY,IDE.INIT_TBL_IDE0
LD IY,IDE.INIT_TBL_IDE0 JR Z,.channel
JR Z,.channel DEC A
DEC A LD IY,IDE.INIT_TBL_IDE1
LD IY,IDE.INIT_TBL_IDE1 ;R02
;R02 JR Z,.channel
JR Z,.channel DEC A
DEC A LD IY,IDE.INIT_TBL_IDE2
LD IY,IDE.INIT_TBL_IDE2 JR Z,.channel
JR Z,.channel DEC A
DEC A LD IY,IDE.INIT_TBL_IDE3
LD IY,IDE.INIT_TBL_IDE3 ;
; JR NZ,.error
JR Z,.channel ;
LD A,BIOS.Error.BadNumber .channel: EXX
SCF IN A,(SLOT3)
RET PUSH AF
; LD A,SYS_PAGE
.channel: OUT (SLOT3),A
EXX ;
IN A,(SLOT3) LD H,(IY + IDE.HDD_INIT_TABLE.MediaParameters)
PUSH AF LD C,(IY + IDE.HDD_INIT_TABLE.DriveType)
LD A,SYS_PAGE LD B,(IY + IDE.HDD_INIT_TABLE.DRV_Flags)
OUT (SLOT3),A POP AF
; OUT (SLOT3),A ;¢®§¢à â áâà ­¨æë
LD H,(IY + IDE.HDD_INIT_TABLE.MediaParameters) ;
LD C,(IY + IDE.HDD_INIT_TABLE.DriveType) LD A,C
LD B,(IY + IDE.HDD_INIT_TABLE.DRV_Flags) EXX
POP AF ;
OUT (SLOT3),A ;¢®§¢à â áâà ­¨æë CP C
; ;
LD A,C EXX
EXX SCF
; LD A,BIOS.Error.BadNumber
CP C RET NZ
; ;
EXX LD A,B
SCF RRA
LD A,BIOS.Error.BadNumber LD A,IDE.Chanel.Secondary
RET NZ JR C,.device
; LD A,IDE.Chanel.Primary
LD A,B .device: OUT (IDE.Chanel.Set),A ;R02
RRA LD A,B
LD A,IDE.Chanel.Secondary AND #F0
JR C,.device LD BC,IDE.Write.DeviceHead
LD A,IDE.Chanel.Primary OUT (C),A
.device: OUT (IDE.Chanel.Set),A ;R02 LD A,H
LD A,B EXX
AND #F0 RET
LD BC,IDE.Write.DeviceHead ;
OUT (C),A .error: LD A,BIOS.Error.BadNumber
LD A,H SCF
EXX RET
RET
;
; NODRIVE:
; LD A,BIOS.Error.BadDrvNumber
; SCF
; RET
;======================================================================= ;=======================================================================

View File

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

View File

@ -74,9 +74,10 @@
;FDD EQU #03 ;FDD EQU #03
;!FIXIT ­®à¬ «ì­® ¯à®¯¨á âì ;!FIXIT ­®à¬ «ì­® ¯à®¯¨á âì
TEMP EQU #7E00 ; !HARDCODE TEMP EQU #7800 ; !HARDCODE
OS_LOAD.SectorSizeAddr EQU TEMP-2
IDENTIFY_DEVICE_BUFFER _ATA_IDENTIFY_DEVICE_DATA = TEMP 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 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!!!" ASSERT (low TEMP = 0) or (low MEMMAP2 = 0), "ERROR Align 256!!!"
@ -1059,132 +1060,140 @@ PrepareToBOOT: ;CALL INT_ON
; Error ; Error
SCF SCF
RET RET
;
FDSTART: FDSTART: PUSH BC
PUSH BC PUSH BC
PUSH BC LD A,msgStrings.bootFdd
LD A,msgStrings.bootFdd CALL POSTMSG
CALL POSTMSG POP AF
POP AF CALL FDD_5x_RESET
CALL FDD_5x_RESET POP BC
POP BC RET C
RET C JP OS_LOAD
JP OS_LOAD ;
;!TODO CDSTART: LD A,B ; [ ] 15/02/2025 boot from ATAPI
CDSTART: OR DRIVE_CODES.SPRINTER.ATAPI
PUSH BC LD B,A
LD A,msgStrings.bootCd PUSH BC
CALL POSTMSG LD A,msgStrings.bootCd
POP AF CALL POSTMSG
PUSH AF POP AF
CALL PRINT_CHANEL PUSH AF
; CALL PRINT_CHANEL
POP BC ;
SET 6,B POP BC
SCF PUSH BC
RET CALL OS_LOAD
POP BC
RDSTART: RET NC
LD A,msgStrings.bootRamDrv LD HL,2048 ;!HARDCODE sector size
CALL POSTMSG LD IX,#0011
LD B,DRIVE_CODES.SPRINTER.RAM ; 6 - ⨯ ¤à ©¢  RAM-DRV, 0 - ­®¬¥à ¤à ©¢  JR OS_LOAD.CD
.loop: PUSH BC ;
CALL OS_LOAD RDSTART: LD A,msgStrings.bootRamDrv
POP BC CALL POSTMSG
INC B LD B,DRIVE_CODES.SPRINTER.RAM ; 6 - ⨯ ¤à ©¢  RAM-DRV, 0 - ­®¬¥à ¤à ©¢ 
LD A,DRIVE_CODES.SPRINTER.RAM + SYS_PAGE.RAMD_KEYS.NUM-1 ; ¬ ªá¨¬ «ì­ë© ­®¬¥à à ¬¤¨áª  .loop: PUSH BC
SUB B CALL OS_LOAD
JR NC,.loop POP BC
RET INC B
LD A,DRIVE_CODES.SPRINTER.RAM + SYS_PAGE.RAMD_KEYS.NUM-1 ; ¬ ªá¨¬ «ì­ë© ­®¬¥à à ¬¤¨áª 
SUB B
JR NC,.loop
RET
HDSTART: HDSTART: IN A,(SLOT3)
IN A,(SLOT3) EX AF,AF'
EX AF,AF' LD A,SYS_PAGE
LD A,SYS_PAGE OUT (SLOT3),A
OUT (SLOT3),A LD A,B
LD A,B ;
; AND #03 ;R02 %00000011
AND #03 ;R02 %00000011 LD IY,IDE.INIT_TBL_IDE0
LD IY,IDE.INIT_TBL_IDE0 JR Z,.next
JR Z,.next ;
; LD IY,IDE.INIT_TBL_IDE1
LD IY,IDE.INIT_TBL_IDE1 CP 1 ;R02
CP 1 ;R02 JR Z,.next
JR Z,.next ;
; LD IY,IDE.INIT_TBL_IDE2 ;R02
LD IY,IDE.INIT_TBL_IDE2 ;R02 CP 2 ;R02
CP 2 ;R02 JR Z,.next
JR Z,.next ;
; LD IY,IDE.INIT_TBL_IDE3 ;R02
LD IY,IDE.INIT_TBL_IDE3 ;R02 ;
; .next: LD A,(IY+IDE.HDD_INIT_TABLE.DriveType)
.next: LD A,(IY+IDE.HDD_INIT_TABLE.DriveType) EX AF,AF'
EX AF,AF' OUT (SLOT3),A
OUT (SLOT3),A EX AF,AF'
EX AF,AF' CP IDE.Device.ATAPI
CP IDE.Device.ATAPI JP Z,CDSTART
JP Z,CDSTART PUSH AF
PUSH AF PUSH BC
PUSH BC LD A,msgStrings.bootHdd
LD A,msgStrings.bootHdd CALL POSTMSG
CALL POSTMSG POP AF
POP AF PUSH AF
PUSH AF CALL PRINT_CHANEL
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..." SYSID: DZ "Starting..."
.length EQU $-SYSID .length EQU $-SYSID