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 - ®¬Ąŕ ăáâனá⢠, 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
|
|
||||||
;=======================================================================
|
;=======================================================================
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -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
|
||||||
;
|
;
|
||||||
|
|||||||
@ -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
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user