mirror of
https://github.com/Tolik-Trek/Crazy-Blaster.git
synced 2026-06-15 09:31:37 +03:00
780 lines
16 KiB
NASM
780 lines
16 KiB
NASM
;ÛÛÛÛÛÛÛ ¨¨æ¨ «¨§ æ¨ï á¨á⥬ëå ¯®à⮢ Z84C15 ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ;
|
||
DI
|
||
LD BC,#FF*256 + Z84.SYS.Control
|
||
XOR A ; Z84.REG.WaitState_Ctrl
|
||
OUT (C),A ; Z84.SYS.Control
|
||
INC C ; Z84.REG.WaitState_MemBound
|
||
OUT (C),A ; Z84.SYS.Data ; set 0 Waits
|
||
;
|
||
DEC C
|
||
LD A,3 ; Z84.REG.Misc_Ctrl
|
||
OUT (C),A ; Z84.SYS.Control
|
||
INC C
|
||
; boundary set!
|
||
LD A,1 ; enable CS0, disable CS1
|
||
OUT (C),A ; Z84.SYS.Data
|
||
;ÛÛÛÛÛÛÛ ¨¨æ¨ «¨§ æ¨ï DCP ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ;
|
||
LD HL,ADD_PORTS.Code
|
||
DCP_INIT: LD C,XL
|
||
LD B,XH
|
||
LD E,YL
|
||
LD D,YH
|
||
EXX
|
||
;
|
||
LD HL,#C000
|
||
LD DE,#C001
|
||
LD BC,#3FFF
|
||
LD (HL),L
|
||
LDIR
|
||
;
|
||
LD IY,DCP_DATA
|
||
LD IX,.ret
|
||
;
|
||
.loop: LD L,(IY)
|
||
LD H,(IY+1)
|
||
LD E,(IY+2)
|
||
LD D,(IY+3)
|
||
LD B,(IY+4)
|
||
JP .PARSE_TABLE
|
||
;
|
||
.ret: LD BC,5
|
||
ADD IY,BC
|
||
LD A,(IY+2)
|
||
OR (IY+3)
|
||
JR NZ,.loop
|
||
;
|
||
EXX
|
||
LD XL,C
|
||
LD XH,B
|
||
LD YL,E
|
||
LD YH,D
|
||
; First IN command - OPEN DCP
|
||
IN A,(SLOT3)
|
||
JP (HL)
|
||
;
|
||
.PARSE_TABLE: LD A,L
|
||
AND E
|
||
LD L,A
|
||
;
|
||
LD A,H
|
||
AND D
|
||
OR #C0
|
||
LD H,A
|
||
;
|
||
LD A,D
|
||
OR #C0
|
||
LD D,A
|
||
;
|
||
.loop_parse: LD (HL),B
|
||
;
|
||
LD A,L ; § ¬ ᪨஢ âì ¥¨§¬¥ï¥¬ë¥ ¡¨âë 1-¬¨
|
||
OR E ; ¤«ï ¯à®å®¦¤¥¨ï ¯¥à¥®á
|
||
INC A ; 㢥«¨ç¨âì ¤à¥á
|
||
JR Z,.carry ; ¢®§¨ª ¯¥à¥®á
|
||
;
|
||
OR E
|
||
XOR E ; ®¡ã«¨âì ¥¨§¬¥ï¥¬ë¥ ¡¨âë
|
||
LD C,A ; ¨§¬¥ï¥¬ ï ç áâì
|
||
;
|
||
LD A,L
|
||
AND E ; ¢ë¤¥«¨âì ¥¨§¬¥ï¥¬ãî
|
||
OR C
|
||
LD L,A ; ¤®¡ ¢¨âì ¨§¬¥ï¥¬ãî ç áâì
|
||
;
|
||
JR .loop_parse ; 横«
|
||
; A = 0
|
||
.carry: LD A,L ; § ¡¨âì ¨§¬¥ï¥¬ë¥ ¡¨âë ã«ï¬¨
|
||
AND E
|
||
LD L,A
|
||
;
|
||
LD A,H ; § ¬ ᪨஢ âì ¥¨§¬¥ï¥¬ë¥ ¡¨âë 1-¬¨
|
||
OR D ; ¤«ï ¯à®å®¦¤¥¨ï ¯¥à¥®á
|
||
INC A ; 㢥«¨ç¨âì ¤à¥á
|
||
JR Z,.return
|
||
;
|
||
OR D
|
||
XOR D
|
||
LD C,A ; ¨§¬¥ï¥¬ ï ç áâì
|
||
;
|
||
LD A,H
|
||
AND D ; ¢ë¤¥«¨âì ¥¨§¬¥ï¥¬ãî
|
||
OR C
|
||
LD H,A ; ¤®¡ ¢¨âì ¨§¬¥ï¥¬ãî ç áâì
|
||
JR .loop_parse
|
||
.return: JP (IX)
|
||
;ÛÛÛÛÛÛÛ „®¡ ¢«¥¨¥ ¯®à⮢ #4000..#4004 ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ;
|
||
ADD_PORTS: ; ¢ãâ२¥ ¯®àâë í¬ã«ïâ®à <20>‡“ ¬ ¯ïâáï ¢¥è¨¥
|
||
.Data: DB #EB ; ¢¥è¨© #4000
|
||
DB #EF ; ¢¥è¨© #4001
|
||
DB #E6 ; ¢¥è¨© #4002
|
||
DB #E7 ; ¢¥è¨© #4003
|
||
DB #E4 ; ¢¥è¨© #4004
|
||
.Data.Size EQU $ - .Data
|
||
;
|
||
.Code: LD HL,ADD_PORTS.Data
|
||
LD DE,#C480
|
||
LD BC,ADD_PORTS.Data.Size
|
||
LDIR
|
||
;ÛÛÛÛÛÛÛ ˆ¨æ¨ «¨§ æ¨ï áâà ¨æ ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ;
|
||
INIT_SLOTS: LD BC,#1FFD
|
||
LD A,1
|
||
OUT (C),A
|
||
LD B,#7F
|
||
OUT (C),A
|
||
;
|
||
XOR A
|
||
OUT (SLOT0),A
|
||
OUT (SLOT1),A
|
||
LD A,2
|
||
OUT (SLOT2),A
|
||
LD A,SYS_PAGE
|
||
OUT (SLOT3),A
|
||
;ÛÛÛÛÛÛÛ ˆ¨æ¨ «¨§ æ¨ï ¯®à⮢ ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ;
|
||
LD A,CNF_PORT.CNF_0 + CNF_PORT.TURBO.ON
|
||
OUT (SYS_PORT.ROM),A
|
||
;ÛÛÛÛÛÛÛ ˆ¨æ¨ «¨§ æ¨ï á⥪ ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ;
|
||
LD SP,#4000
|
||
;ÛÛÛÛÛÛÛ <20>¥à¥¡à®á ®á⠢襣®áï ª®¤ ¢ RAM ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ;
|
||
LD HL,0
|
||
LD DE,#4000
|
||
LD BC,END_CB
|
||
LDIR
|
||
XOR A
|
||
OUT (FastRAM.SLOT0),A
|
||
OUT (SYS_PORT.RAM),A
|
||
INC A
|
||
OUT (SLOT1),A
|
||
;
|
||
IN A,(FastRAM.OFF)
|
||
; ’“’ Œ› “†… ‚ އ“ ‚ ’ŽŒ †… ŠŽ„… ˆ €„<E282AC>…‘…
|
||
; áâà ¨æë 0,1,2,#FE
|
||
;ÛÛÛÛÛÛÛ ˆ¨æ¨ «¨§ æ¨ï áâà ¨æ vROM ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ;
|
||
vROM_MAP: LD BC,#4000
|
||
LD HL,RESERVED_PAGES.BIOS
|
||
LD A,RESERVED_PAGES.Size
|
||
.loop: LD E,(HL)
|
||
OUT (C),E
|
||
INC C
|
||
INC HL
|
||
DEC A
|
||
JR NZ,.loop
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ;
|
||
;ÛÛÛÛÛÛÛ <20> ¡®ç¨© ª®¤ ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ;
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ;
|
||
; ¤à¥á ¯à®æ¥¤ãàë ®è¨¡ª¨
|
||
LD HL,ERROR
|
||
PUSH HL
|
||
;ÛÛÛÛÛÛÛ ˆ¨æ¨ «¨§ æ¨ï HDD ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ;
|
||
CALL HDD_INIT
|
||
RET C
|
||
;ÛÛÛÛÛÛ “áâ ®¢ª áâà ¨æ ¤«ï § £à㧪¨ ¤ ëå ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ;
|
||
CALL Init_Mem
|
||
;ÛÛÛÛÛÛ ‡ £à㧪 ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ;
|
||
; ¤®¯®«¨â¥«ìë¥ äãªæ¨¨
|
||
CHECK_IMG: ;LD A,(RESERVED_PAGES.SYS_FN) ; áâà ¨æ ¡ãä¥à , ¥á«¨ ¤à¥á ¢ ®ª¥ #C000 (BLOCK_ID)
|
||
LD B,1 ; ç¨á«® ç¨â ¥¬ëå ᥪâ®à®¢
|
||
LD HL,#8000 ; ¤à¥á ¡ãä¥à ¤ ëå
|
||
LD IX,0 ; ¡á®«îâë© ®¬¥à ᥪâ®à áâ àè ï ç áâì
|
||
LD DE,0 ; ¡á®«îâë© ®¬¥à ᥪâ®à ¬« ¤è ï ç áâì
|
||
PUSH HL
|
||
CALL FN_HDD_READ
|
||
POP HL
|
||
;ÛÛÛÛÛÛ ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ;
|
||
LD DE,CHECKING_LABEL
|
||
LD B,CHECKING_LABEL.Size
|
||
.loop: LD A,(DE)
|
||
CP (HL)
|
||
RET NZ ; error
|
||
INC DE
|
||
INC HL
|
||
DJNZ .loop
|
||
; Ž¡à § BIOS
|
||
LOAD_DATA: LD A,(RESERVED_PAGES.BIOS)
|
||
LD HL,#C000
|
||
LD B,RESERVED_PAGES.Size * #4000 / 512
|
||
LD DE,1
|
||
CALL FN_HDD_READ_NEXT
|
||
XOR A
|
||
OUT (SLOT1),A
|
||
JP .IN_RAM + #4000
|
||
; ªã᮪ ¢ 1 á«®â¥
|
||
.IN_RAM: LD BC,#1FFD
|
||
XOR A
|
||
OUT (C),A
|
||
;
|
||
XOR A ;CNF_PORT.BIOS
|
||
OUT (CNF_PORT.vBIOS),A
|
||
LD A,#40
|
||
OUT (SLOT3),A
|
||
;
|
||
RST 0
|
||
;JP BEGIN_CB_IMG
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ;
|
||
|
||
|
||
;°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°;
|
||
;°°°°°° <09>à®æ¥¤ãàë °°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°;
|
||
;°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°;
|
||
; FOR LBA ONLY - NEXT_READ
|
||
; HL - bufer, A - page
|
||
; B - numer of sectors
|
||
; DE - add_par (next+DE) (d.b. 1 for NEXT)
|
||
FN_HDD_READ_NEXT:
|
||
AND A
|
||
INC B
|
||
DEC B
|
||
RET Z ; ret if 0 sectors
|
||
CALL HD_WAIT
|
||
RET C
|
||
CALL NEXT_ADD_SEC
|
||
JR FN_HDD_READ.L1
|
||
;
|
||
; HL - BUFER, A - PAGE,
|
||
FN_HDD_READ: AND A
|
||
INC B
|
||
DEC B
|
||
RET Z
|
||
CALL HD_WAIT
|
||
CALL NC,HD_PREPARE
|
||
RET C
|
||
.L1: EXX
|
||
LD C,SLOT3
|
||
IN B,(C)
|
||
EXX
|
||
OUT (SLOT3),A
|
||
EX AF,AF'
|
||
;
|
||
LD BC,IDE.Write.Command
|
||
LD A,IDE.ATA.ReadSectorsWithRetry
|
||
OUT (C),A
|
||
.L2: CALL WAIT_HDD
|
||
AND IDE.ControlByte.DataRequest
|
||
JR Z,.HD_RET
|
||
;
|
||
LD BC,IDE.Read.Data
|
||
INIR
|
||
INIR
|
||
;
|
||
LD A,H
|
||
OR L
|
||
JR NZ,.L2
|
||
;
|
||
LD A,SYS_PAGE
|
||
OUT (SLOT3),A
|
||
EX AF,AF'
|
||
LD H,high SYS_PAGE.RAMD_FAT ;!FIXIT ç¨â âì ¨§ â ¡«¨æë âãâ
|
||
LD L,A
|
||
LD A,(HL)
|
||
OUT (SLOT3),A
|
||
EX AF,AF'
|
||
LD HL,#C000
|
||
JR .L2
|
||
;
|
||
.HD_RET: EXX
|
||
OUT (C),B
|
||
EXX
|
||
LD BC,IDE.Read.Error
|
||
IN A,(C)
|
||
AND A
|
||
SCF
|
||
RET NZ
|
||
;
|
||
EX AF,AF'
|
||
AND A
|
||
RET
|
||
;°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°;
|
||
|
||
;°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°;
|
||
NEXT_ADD_SEC: PUSH AF
|
||
;
|
||
LD A,B
|
||
LD BC,IDE.Write.Counter ; “áâ ®¢¨âì ç¨á«® ᥪâ®à®¢ ¤«ï § ¯¨á¨
|
||
OUT (C),A
|
||
;
|
||
DEC B
|
||
INC C
|
||
IN A,(C) ; IDE.Read.Sector
|
||
ADC A,E
|
||
INC B
|
||
OUT (C),A ; IDE.Write.Sector
|
||
;
|
||
DEC B
|
||
INC C
|
||
IN A,(C) ; IDE.Read.CylinderLow
|
||
ADC A,D
|
||
INC B
|
||
OUT (C),A ; IDE.Write.CylinderLow
|
||
;
|
||
DEC B
|
||
INC C
|
||
IN A,(C) ; IDE.Read.CylinderHigh
|
||
ADC A,0
|
||
INC B
|
||
OUT (C),A ; IDE.Write.CylinderHigh
|
||
;
|
||
LD BC,IDE.Read.Control
|
||
IN A,(C)
|
||
LD D,A
|
||
ADC A,0
|
||
AND #0F
|
||
LD E,A
|
||
LD A,D
|
||
AND #F0
|
||
OR E
|
||
INC B
|
||
OUT (C),A ; IDE.Write.DeviceHead
|
||
;
|
||
POP AF
|
||
RET
|
||
;°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°;
|
||
|
||
;°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°;
|
||
HD_PREPARE: PUSH AF
|
||
PUSH HL
|
||
; HD_CALC_SECS
|
||
LD L,E
|
||
LD E,D
|
||
LD D,XL
|
||
LD A,XH
|
||
AND #0F ; LBA 28
|
||
LD H,A
|
||
;
|
||
LD A,B
|
||
LD BC,IDE.Write.Counter ; “áâ ®¢¨âì ç¨á«® ᥪâ®à®¢ ¤«ï § ¯¨á¨
|
||
OUT (C),A
|
||
;
|
||
INC C
|
||
OUT (C),L
|
||
INC C
|
||
OUT (C),E
|
||
INC C
|
||
OUT (C),D
|
||
;
|
||
LD BC,IDE.Read.Control
|
||
IN A,(C)
|
||
AND #F0 ; !!!!! ¯®á¬®âà¥âì
|
||
OR H
|
||
INC B ; IDE.Write.DeviceHead
|
||
OUT (C),A
|
||
POP HL ; BUFER & PAGE
|
||
POP AF
|
||
AND A
|
||
RET
|
||
;°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°;
|
||
|
||
;°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°;
|
||
HDD_INIT: LD A,IDE.Chanel.Primary
|
||
OUT (IDE.Chanel.Set),A
|
||
CALL TEST_HDD_DRV
|
||
SCF
|
||
RET NZ
|
||
;
|
||
CALL WAIT_HDD
|
||
LD BC,IDE.Write.Command
|
||
LD A,IDE.ATA.IdentifyDevice ;!FIXIT ¯¥à¥¤¥« âì
|
||
OUT (C),A
|
||
CALL WAIT_HDD
|
||
AND IDE.ControlByte.DataRequest
|
||
SCF
|
||
RET Z
|
||
;
|
||
LD BC,IDE.Read.Data
|
||
LD HL,SYS_PAGE.HD_IDF_ADR
|
||
INIR
|
||
INIR
|
||
; B = 0
|
||
LD H,B
|
||
LD L,B
|
||
LD A,(SYS_PAGE.HD_IDF_ADR.sectors) ; ç¨á«® ᥪâ®à®¢
|
||
LD C,A
|
||
LD A,(SYS_PAGE.HD_IDF_ADR.heads) ; ç¨á«® £®«®¢®ª
|
||
.loop: ADD HL,BC
|
||
DEC A
|
||
JR NZ,.loop
|
||
LD (SYS_PAGE.HD_IDF_ADR.sec_cyl),HL
|
||
CALL WAIT_HDD
|
||
LD BC,IDE.Read.Control
|
||
IN A,(C)
|
||
AND #10
|
||
LD B,A
|
||
LD A,(SYS_PAGE.HD_IDF_ADR.heads) ; ç¨á«® £®«®¢®ª
|
||
DEC A
|
||
AND #0F
|
||
OR IDE.Drive.Master
|
||
OR B
|
||
;
|
||
LD H,A
|
||
LD A,(SYS_PAGE.HD_IDF_ADR.LBA_CHS)
|
||
AND %0000'0010
|
||
SCF
|
||
RET Z ; NO_LBA
|
||
;
|
||
SET 6,H
|
||
LD BC,IDE.Write.DeviceHead
|
||
OUT (C),H
|
||
LD A,(SYS_PAGE.HD_IDF_ADR.sectors) ; ç¨á«® ᥪâ®à®¢
|
||
.HDD_CONFIGURED:
|
||
LD BC,IDE.Write.Counter
|
||
OUT (C),A
|
||
LD A,IDE.ATA.InitializeDeviceParameters ; SET HDD PARAMETERS
|
||
HD_CMD_EXE: CALL HD_WAIT
|
||
RET C
|
||
LD BC,IDE.Write.Command
|
||
OUT (C),A
|
||
HD_WAIT: PUSH DE
|
||
PUSH BC
|
||
PUSH AF
|
||
LD DE,0
|
||
.loop: LD BC,IDE.Read.Status
|
||
IN A,(C)
|
||
AND IDE.ControlByte.Busy
|
||
JR Z,.EXIT
|
||
DEC DE
|
||
LD A,D
|
||
OR E
|
||
JR NZ,.loop
|
||
POP AF
|
||
POP BC
|
||
POP DE
|
||
SCF
|
||
RET ; error
|
||
;
|
||
.EXIT: POP AF
|
||
POP BC
|
||
POP DE
|
||
AND A
|
||
RET
|
||
;°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°;
|
||
|
||
;°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°;
|
||
WAIT_HDD: LD BC,IDE.Read.Status
|
||
.loop: IN A,(C)
|
||
BIT IDE.ControlBit.Busy,A
|
||
JR NZ,.loop
|
||
RET
|
||
;°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°;
|
||
|
||
;°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°;
|
||
Init_Mem: LD HL,SYS_PAGE.RAMD_FAT; ; €¤à¥á RAM FAT ¢ އ“.
|
||
; ®¡ã«ï¥¬ â ¡«¨æã
|
||
XOR A
|
||
.loopFree: LD (HL),A
|
||
INC L
|
||
JR NZ,.loopFree
|
||
; १¥à¢¨à㥬 ᯥæ.áâà ¨æë ¨ áâà ¨æë ZX
|
||
LD B,RESERVED_PAGES.Blocks
|
||
LD DE,RESERVED_PAGES ; â ¡«¨æ § ïâëå á¨á⥬ëå áâà ¨æ
|
||
.loop: LD A,(DE)
|
||
CP #FF
|
||
JR Z,.exitLoop
|
||
.loopBlk: INC DE
|
||
LD L,A
|
||
LD A,(DE)
|
||
LD (HL),A
|
||
CP #FF
|
||
JR NZ,.loopBlk
|
||
.exitLoop: INC DE
|
||
DJNZ .loop
|
||
LD L,A
|
||
LD (HL),A
|
||
RET
|
||
;°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°;
|
||
|
||
;°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°;
|
||
TEST_HDD_DRV: ;LD HL,#01FE
|
||
LD BC,IDE.Write.Counter
|
||
OUT (C),L
|
||
INC C
|
||
OUT (C),H ; IDE.Write.Sector
|
||
;
|
||
DEC C
|
||
DEC B
|
||
IN A,(C) ; IDE.Read.Counter
|
||
CP L
|
||
RET NZ
|
||
INC C
|
||
IN A,(C) ; IDE.Read.Sector
|
||
CP H
|
||
RET
|
||
;°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°;
|
||
|
||
ERROR: ;°°°°°°° Œ¨£ ¨¥ « ¬¯®çª®© âãà¡ë °°°°°°°°°°°°°°°°°°°°°°°°°°°°°°;
|
||
LD A,SYS_PORT.TURBO.OFF
|
||
.big_loop: LD BC,0
|
||
OUT (SYS_PORT.ROM),A
|
||
.loop: DEC BC
|
||
INC B
|
||
DJNZ .loop
|
||
XOR 1
|
||
JR .big_loop
|
||
;°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°;
|
||
|
||
;°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°;
|
||
RESERVED_PAGES: ; Ž¡à § <20>ˆŽ‘ ¤«ï à¥áâ àâ
|
||
|
||
.BIOS: DB #46 ; BIOS Acex port: #EB
|
||
DB #47 ; EXTENSION Acex port: #EF
|
||
DB #48 ; Recovery_1 Acex port: #E6
|
||
DB #49 ; Recovery_2 Acex port: #E7
|
||
DB #4B ; LOGO Acex port: #E4
|
||
.Size EQU $-RESERVED_PAGES.BIOS
|
||
DB #FF ; End of the block
|
||
.Blocks EQU 1
|
||
|
||
CHECKING_LABEL: SET_IMG_LABEL
|
||
.Size EQU $ - CHECKING_LABEL
|
||
;°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°;
|
||
END_CB EQU $
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ;
|
||
|
||
|
||
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ;
|
||
;ÛÛÛÛÛÛÛ ’ ¡«¨æ DCP ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ;
|
||
DCP_DATA: DW %00'000'0'0100'0000
|
||
DW %11'000'0'0110'1111
|
||
DB ACEX.IDE_DATA_1F0
|
||
DW %01'000'0'0100'0000
|
||
DW %11'010'0'0110'1111
|
||
DB ACEX.IDE_DATA_1F0
|
||
DW %10'000'0'0100'0000
|
||
DW %11'010'0'0110'1111
|
||
DB ACEX.IDE_DATA_1F0
|
||
DW %11'000'0'0100'0000
|
||
DW %11'000'0'0110'1111
|
||
DB ACEX.IDE_DATA_1F0
|
||
;
|
||
DW %00'000'0'0100'0001
|
||
DW %00'010'1'1110'1111
|
||
DB ACEX.IDE_ERROR_1F1
|
||
DW %00'010'0'0100'0001
|
||
DW %11'010'1'1110'1111
|
||
DB ACEX.IDE_ERROR_1F1
|
||
DW %11'010'0'0100'0001
|
||
DW %11'010'1'1110'1111
|
||
DB ACEX.IDE_ERROR_1F1
|
||
;
|
||
DW %00'000'0'0100'0010
|
||
DW %00'010'1'1110'1111
|
||
DB ACEX.IDE_COUNTER_1F2
|
||
DW %00'010'0'0100'0010
|
||
DW %11'010'1'1110'1111
|
||
DB ACEX.IDE_COUNTER_1F2
|
||
DW %11'010'0'0100'0010
|
||
DW %11'010'1'1110'1111
|
||
DB ACEX.IDE_COUNTER_1F2
|
||
;
|
||
DW %00'000'0'0100'0011
|
||
DW %00'010'1'1110'1111
|
||
DB ACEX.IDE_SECTOR_1F3
|
||
DW %00'010'0'0100'0011
|
||
DW %11'010'1'1110'1111
|
||
DB ACEX.IDE_SECTOR_1F3
|
||
DW %11'010'0'0100'0011
|
||
DW %11'010'1'1110'1111
|
||
DB ACEX.IDE_SECTOR_1F3
|
||
;
|
||
DW %00'000'0'0100'0100
|
||
DW %00'010'1'1110'1111
|
||
DB ACEX.IDE_CYLINDER_L_1F4
|
||
DW %00'010'0'0100'0100
|
||
DW %11'010'1'1110'1111
|
||
DB ACEX.IDE_CYLINDER_L_1F4
|
||
DW %11'010'0'0100'0100
|
||
DW %11'010'1'1110'1111
|
||
DB ACEX.IDE_CYLINDER_L_1F4
|
||
;
|
||
DW %00'000'0'0100'0101
|
||
DW %00'010'1'1110'1111
|
||
DB ACEX.IDE_CYLINDER_H_1F5
|
||
DW %00'010'0'0100'0101
|
||
DW %11'010'1'1110'1111
|
||
DB ACEX.IDE_CYLINDER_H_1F5
|
||
DW %11'010'0'0100'0101
|
||
DW %11'010'1'1110'1111
|
||
DB ACEX.IDE_CYLINDER_H_1F5
|
||
;
|
||
DW %00'000'0'1100'0010
|
||
DW %00'010'1'1110'1111
|
||
DB ACEX.IDE_DEVICE_HEAD_1F6
|
||
DW %00'010'0'1100'0010
|
||
DW %11'010'1'1110'1111
|
||
DB ACEX.IDE_DEVICE_HEAD_1F6
|
||
DW %11'010'0'1100'0010
|
||
DW %11'010'1'1110'1111
|
||
DB ACEX.IDE_DEVICE_HEAD_1F6
|
||
;
|
||
DW %00'000'0'1100'0011
|
||
DW %00'010'1'1110'1111
|
||
DB ACEX.IDE_STATUS_CMD_1F7
|
||
DW %00'010'0'1100'0011
|
||
DW %11'010'1'1110'1111
|
||
DB ACEX.IDE_STATUS_CMD_1F7
|
||
DW %11'010'0'1100'0011
|
||
DW %11'010'1'1110'1111
|
||
DB ACEX.IDE_STATUS_CMD_1F7
|
||
;
|
||
DW %00'000'0'1100'0100
|
||
DW %00'010'1'1110'1111
|
||
DB ACEX.IDE_CONTROL_3F6
|
||
DW %00'010'0'1100'0100
|
||
DW %11'010'1'1110'1111
|
||
DB ACEX.IDE_CONTROL_3F6
|
||
DW %11'010'0'1100'0100
|
||
DW %11'010'1'1110'1111
|
||
DB ACEX.IDE_CONTROL_3F6
|
||
;
|
||
DW %00'000'0'1100'0101
|
||
DW %00'010'1'1110'1111
|
||
DB ACEX.IDE_STATUS_3F7
|
||
DW %00'010'0'1100'0101
|
||
DW %11'010'1'1110'1111
|
||
DB ACEX.IDE_STATUS_3F7
|
||
DW %11'010'0'1100'0101
|
||
DW %11'010'1'1110'1111
|
||
DB ACEX.IDE_STATUS_3F7
|
||
;
|
||
DW %00'000'0'0010'1100
|
||
DW %11'001'1'1111'1111
|
||
DB ACEX.IDE_CHANEL_1
|
||
DW %11'000'0'0010'1100
|
||
DW %11'001'1'1111'1111
|
||
DB ACEX.IDE_CHANEL_1
|
||
;
|
||
DW %00'000'0'0011'1100
|
||
DW %11'001'1'1111'1111
|
||
DB ACEX.IDE_CHANEL_2
|
||
DW %11'000'0'0011'1100
|
||
DW %11'001'1'1111'1111
|
||
DB ACEX.IDE_CHANEL_2
|
||
;
|
||
DW %00'000'0'1010'1100
|
||
DW %11'001'1'1111'1111
|
||
DB ACEX.RESET
|
||
DW %11'000'0'1010'1100
|
||
DW %11'001'1'1111'1111
|
||
DB ACEX.RESET
|
||
;
|
||
DW %00'000'0'0110'1101
|
||
DW %10'000'1'1111'1111
|
||
DB ACEX.Scorp_1FFD
|
||
DW %11'000'0'0110'1101
|
||
DW %11'000'1'1111'1111
|
||
DB ACEX.Scorp_1FFD
|
||
;
|
||
DW %00'000'0'1110'1101
|
||
DW %00'100'1'1110'1111
|
||
DB ACEX.Pent_7FFD
|
||
DW %00'100'0'1110'1101
|
||
DW %11'110'1'1110'1111
|
||
DB ACEX.Pent_7FFD
|
||
DW %11'100'0'1110'1101
|
||
DW %11'100'1'1110'1111
|
||
DB ACEX.Pent_7FFD
|
||
DW %10'000'0'0110'1101
|
||
DW %11'100'1'1110'1111
|
||
DB ACEX.Pent_7FFD
|
||
;
|
||
DW %00'000'0'0101'0110
|
||
DW %11'001'1'1111'1111
|
||
DB ACEX.ALL_MODE
|
||
DW %11'000'0'0101'0110
|
||
DW %11'001'1'1111'1111
|
||
DB ACEX.ALL_MODE
|
||
;
|
||
DW %00'000'0'0010'0100
|
||
DW %00'000'0'0010'1111
|
||
DB ACEX.CNF_PORT
|
||
;
|
||
DW %00'000'0'0000'1010
|
||
DW %00'010'0'0110'1111
|
||
DB ACEX.SLOT0
|
||
DW %00'010'0'0000'1010
|
||
DW %11'010'0'0110'1111
|
||
DB ACEX.SLOT0
|
||
DW %11'010'0'0000'1010
|
||
DW %11'010'0'0110'1111
|
||
DB ACEX.SLOT0
|
||
;
|
||
DW %00'000'0'0010'1010
|
||
DW %00'010'0'0110'1111
|
||
DB ACEX.SLOT1
|
||
DW %00'010'0'0010'1010
|
||
DW %11'010'0'0110'1111
|
||
DB ACEX.SLOT1
|
||
DW %11'010'0'0010'1010
|
||
DW %11'010'0'0110'1111
|
||
DB ACEX.SLOT1
|
||
;
|
||
DW %00'000'0'0100'1010
|
||
DW %00'010'0'0110'1111
|
||
DB ACEX.SLOT2
|
||
DW %00'010'0'0100'1010
|
||
DW %11'010'0'0110'1111
|
||
DB ACEX.SLOT2
|
||
DW %11'010'0'0100'1010
|
||
DW %11'010'0'0110'1111
|
||
DB ACEX.SLOT2
|
||
;
|
||
DW %00'000'0'0110'1010
|
||
DW %00'010'0'0110'1111
|
||
DB ACEX.SLOT3
|
||
DW %00'010'0'0110'1010
|
||
DW %11'010'0'0110'1111
|
||
DB ACEX.SLOT3
|
||
DW %11'010'0'0110'1010
|
||
DW %11'010'0'0110'1111
|
||
DB ACEX.SLOT3
|
||
; DCP END MARKER
|
||
DW 0,0,0
|
||
;-----------------------------------------------------------------------;
|
||
; RESERVED_PAGES:; [x] Block #1 - ¬®¦® ®á¢®¡®¤¨âì ¯® ID 1
|
||
; ; „®¯®«¨â¥«ìë¥ ¯à®æ¥¤ãàë
|
||
; .SYS_FN: DB SYS_FN_PAGE
|
||
; ; Ž¡à § <20>ˆŽ‘ ¤«ï ¯à®è¨¢ª¨
|
||
; .BIOS: DB #10,#11,#12,#13
|
||
; DB #14,#15,#16,#17
|
||
; DB #18,#19,#1A,#1B
|
||
; DB #1C,#1D,#1E,#1F
|
||
; ; Š à⨪
|
||
; .PICTURE: DB 2,3,4,5,6
|
||
; ; Ž¡à § ¯ ¬ïâ¨ á ¯à®è¨¢ «ì騪®¬
|
||
; .FLASHER_RAM: DB 7,8
|
||
; DB #FF ; End of the block
|
||
; .Blocks EQU 1
|
||
; .Size EQU $-RESERVED_PAGES
|
||
;-----------------------------------------------------------------------;
|
||
; ;ÛÛÛÛÛÛ ‡ £à㧪 ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ;
|
||
; ; ¤®¯®«¨â¥«ìë¥ äãªæ¨¨
|
||
; LOAD_FNs: LD A,(RESERVED_PAGES.SYS_FN) ; áâà ¨æ ¡ãä¥à , ¥á«¨ ¤à¥á ¢ ®ª¥ #C000 (BLOCK_ID)
|
||
; LD B,sys_fn_in_sectors ; ç¨á«® ç¨â ¥¬ëå ᥪâ®à®¢
|
||
; LD HL,bufer_adr ; ¤à¥á ¡ãä¥à ¤ ëå
|
||
; LD IX,sec_high ; ¡á®«îâë© ®¬¥à ᥪâ®à áâ àè ï ç áâì
|
||
; LD DE,sec_low ; ¡á®«îâë© ®¬¥à ᥪâ®à ¬« ¤è ï ç áâì
|
||
; PUSH HL
|
||
; CALL FN_HDD_READ
|
||
; ; Ž¡à § BIOS
|
||
; LOAD_DATA: LD B,4
|
||
; LD IY,RESERVED_PAGES.BIOS
|
||
; POP HL
|
||
; CALL .LOADER
|
||
; ; Š à⨪ ¨ €¯¤¥©â¥à
|
||
; LD B,2
|
||
; CALL .LOADER
|
||
; JP BEGIN_CB_IMG
|
||
; .LOADER: ; § £à㧪 ¯® 128 ᥪâ®à®¢
|
||
; .loop: PUSH HL
|
||
; PUSH BC
|
||
; LD A,(IY)
|
||
; LD B,128
|
||
; LD DE,1
|
||
; CALL FN_HDD_READ_NEXT
|
||
; LD BC,4
|
||
; ADD IY,BC
|
||
; POP BC
|
||
; POP HL
|
||
; DJNZ .loop
|
||
; RET
|
||
;-----------------------------------------------------------------------; |