add boot from ATAPI
This commit is contained in:
parent
1cb8ee9e78
commit
65a2957424
@ -1 +1 @@
|
||||
Subproject commit 237dd36651b4af124f12d3f1eaee3688467f8fa3
|
||||
Subproject commit 831b2da8a66ee3bd78a7c73ef3592609e5f02902
|
||||
@ -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
|
||||
;=======================================================================
|
||||
|
||||
|
||||
|
||||
@ -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
|
||||
;
|
||||
|
||||
@ -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
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user