тестирование задержек

This commit is contained in:
Tolik 2025-06-07 04:30:14 +10:00
parent f8fe84be7e
commit a3aef23cd6
14 changed files with 522 additions and 195 deletions

@ -1 +1 @@
Subproject commit be5eed466fa1c0e442b828a42ffc1b9abda23ac9 Subproject commit 83c2b69b4af0a36475fa42378000fb6e57c59021

View File

@ -677,16 +677,15 @@ TAB_5xFNS:
;************************************ ;************************************
; ‚室 ¢ äã­ªæ¨î ¯® RST18 ¨ RST8 ; ‚室 ¢ äã­ªæ¨î ¯® RST18 ¨ RST8
EXP_FNS_RST18: EXP_FNS_RST18: PUSH HL
PUSH HL LD L,C
LD L,C LD H,high TAB_FNS
LD H,high TAB_FNS LD C,(HL)
LD C,(HL) INC H
INC H LD H,(HL)
LD H,(HL) LD L,C
LD L,C EX (SP),HL
EX (SP),HL RET
RET
; ATA_5x_RESET ; ATA_5x_RESET
; ATA_5x_LONG_READ ; ATA_5x_LONG_READ
@ -704,50 +703,39 @@ EXP_FNS_RST18:
; FN_RESERVED_5x ; FN_RESERVED_5x
; DRV_LIST ; DRV_LIST
FN_5x_Parser_1: ; ATA_5x_RESET FN_5x_Parser_1: LD C,#01 ; ATA_5x_RESET
LD C,#01 JR FN_5x_Parser
JP FN_5x_Parser FN_5x_Parser_2: LD C,#02 ; ATA_5x_LONG_READ
FN_5x_Parser_2: ; ATA_5x_LONG_READ JR FN_5x_Parser
LD C,#02 FN_5x_Parser_3: LD C,#03 ; ATA_5x_LONG_WRITE
JP FN_5x_Parser JR FN_5x_Parser
FN_5x_Parser_3: ; ATA_5x_LONG_WRITE FN_5x_Parser_4: LD C,#04 ; ATA_5x_VERIFY
LD C,#03 JR FN_5x_Parser
JP FN_5x_Parser FN_5x_Parser_6: LD C,#06 ; ATA_5x_WRITE
FN_5x_Parser_4: ; ATA_5x_VERIFY JR FN_5x_Parser
LD C,#04 FN_5x_Parser_7: LD C,#07 ; ATA_5x_DETECT
JP FN_5x_Parser JR FN_5x_Parser
FN_5x_Parser_6: ; ATA_5x_WRITE FN_5x_Parser_8: LD C,#08 ; ATA_5x_GET_PAR
LD C,#06 JR FN_5x_Parser
JP FN_5x_Parser FN_5x_Parser_9: LD C,#09 ; ATA_5x_SET_PAR
FN_5x_Parser_7: ; ATA_5x_DETECT JR FN_5x_Parser
LD C,#07 FN_5x_Parser_E: LD C,#0E ; DRV_EXTENDED
JP FN_5x_Parser JR FN_5x_Parser
FN_5x_Parser_8: ; ATA_5x_GET_PAR FN_5x_Parser_5: LD C,5 ; ATA_5x_READ
LD C,#08 FN_5x_Parser: PUSH HL
JP FN_5x_Parser LD H,A
FN_5x_Parser_9: ; ATA_5x_SET_PAR AND #F0
LD C,#09 OR C
JP FN_5x_Parser ; âãâ ¢ A ­®¬¥à “<E28098>މ€ + <20>ŽŒ…<C592> ”“<E2809D>Šˆˆ
FN_5x_Parser_E: ; DRV_EXTENDED LD L,A
LD C,#0E LD A,H
JP FN_5x_Parser LD H,high TAB_5xFNS
FN_5x_Parser_5: ; ATA_5x_READ LD C,(HL)
LD C,5 INC H
FN_5x_Parser: LD H,(HL)
PUSH HL LD L,C
LD H,A EX (SP),HL
AND #F0 RET
OR C
; âãâ ¢ A ­®¬¥à “<E28098>މ€ + <20>ŽŒ…<C592> ”“<E2809D>Šˆˆ
LD L,A
LD A,H
LD H,high TAB_5xFNS
LD C,(HL)
INC H
LD H,(HL)
LD L,C
EX (SP),HL
RET
; ‚室 ¢ ä㭪樨 <20>ˆŽ ¨§ TR-DOS ; ‚室 ¢ ä㭪樨 <20>ˆŽ ¨§ TR-DOS
EXP_FNS:; ®âª«îç ¥¬ § ¯¨áì ¢ íªà ­ ᯥªâà㬠 EXP_FNS:; ®âª«îç ¥¬ § ¯¨áì ¢ íªà ­ ᯥªâà㬠

View File

@ -767,7 +767,7 @@ POST_5_OK:
; Don't use IY before this point if it`s normal booting!!! ; Don't use IY before this point if it`s normal booting!!!
LD IX,0 LD IX,0
XOR A XOR A
ADD IX,SP ; ¢®ááâ ­®¢¨âì §­ ç¥­¨¥ ¯¥à¥¤ ­­®¥ § £àã§ç¨ª®¬ ª®­äë (¥á«¨ áâ àâ ¯®á«¥ à¥á¥â ) ADD IX,SP ; ¢®ááâ ­®¢¨âì §­ ç¥­¨¥ ¯¥à¥¤ ­­®¥ § £àã§ç¨ª®¬ ª®­äë (¥á«¨ áâ àâ ¯®á«¥ à¥á¥â )
; í⮬ ¬¥á⥠㠭 á IX:IY ¨§ Loader.asm ; í⮬ ¬¥á⥠㠭 á IX:IY ¨§ Loader.asm
; „®â é¨«¨ ¤® á ¬¥âªã ®â «® ¤¥à  ; „®â é¨«¨ ¤® á ¬¥âªã ®â «® ¤¥à 
;[x] 31/12/2023 ¯®¤áâà å®¢ª  ®â ­¥¤®ãâ¥çª¨ ¯ ¬ï⨠;[x] 31/12/2023 ¯®¤áâà å®¢ª  ®â ­¥¤®ãâ¥çª¨ ¯ ¬ïâ¨
@ -788,7 +788,7 @@ POST_5_OK:
JR NZ,.no_conf_reload JR NZ,.no_conf_reload
LD A,#80 LD A,#80
.no_conf_reload: .no_conf_reload:
LD R,A ; reg R bit7 - ¯à¨§­ ª à ¡®âë «® ¤¥à  LD R,A ; reg R bit7 - ¯à¨§­ ª § ¯ã᪠ á ®âà ¡®âª®© «® ¤¥à  ª®­äë
; ;
; ­  ¢á直© á«ãç © ; ­  ¢á直© á«ãç ©
LD HL,ACEX.Config_ID.Sp2000 LD HL,ACEX.Config_ID.Sp2000
@ -881,24 +881,24 @@ No_Reset_handlers:
;-----------------------------------------------------------------------; ;-----------------------------------------------------------------------;
MODULE Prepare_For_Setup MODULE Prepare_For_Setup
Set_ALL_Mode: LD A,Port_All_Mode.DEFAULT Set_ALL_Mode: LD A,Port_All_Mode.DEFAULT
LD BC,Port_All_Mode LD BC,Port_All_Mode
OUT (C),A OUT (C),A
Set_Default_Screen: Set_Default_Screen:
CALL FN_SYNC.INT_DEF ; set default int CALL FN_SYNC.INT_DEF ; set default int
ld a,128+4 ; !HARDCODE LD A,128+4 ; !HARDCODE
CALL FN_SYNC ; set default vsync CALL FN_SYNC ; set default vsync
Setup_to_RAM: LD HL,Setup_Starter.Start Setup_to_RAM: LD HL,Setup_Starter.Start
LD DE,COMPILE_ADDR.SETUP_STARTER LD DE,COMPILE_ADDR.SETUP_STARTER
LD BC,Setup_Starter.Size LD BC,Setup_Starter.Size
LDIR LDIR
; ­  á⥪ ª« ¤ñâáï  ¤à¥á ¢®§¢à â  ¨ ¤ «ìè¥ â é¨âáï ¢á直¬¨ ª®áâë«ï¬¨, ç⮡ ¢¥à­ãâìáï ­ § ¤ ; ­  á⥪ ª« ¤ñâáï  ¤à¥á ¢®§¢à â  ¨ ¤ «ìè¥ â é¨âáï ¢á直¬¨ ª®áâë«ï¬¨, ç⮡ ¢¥à­ãâìáï ­ § ¤
CALL Setup_Starter.Exec ; #C000 CALL Setup_Starter.Exec ; #C000
;JP PrepareToZX ;JP PrepareToZX
ENDMODULE ENDMODULE
PrepareToZX: ; Setup HDD drives for ZX Spectrum mode ;PrepareToZX: ; Setup HDD drives for ZX Spectrum mode
; DI ; DI
; LD D,CMOS_CELL.TRDOSmount ; LD D,CMOS_CELL.TRDOSmount
; CALL CMOS_RD ; CALL CMOS_RD
@ -1052,8 +1052,8 @@ PORTS_INIT:
OUT (C),A OUT (C),A
; £«ã訬 ª®¢®ªá ; £«ã訬 ª®¢®ªá
XOR A XOR A
OUT (CBL.SYS_PORT),A OUT (SP_SND.CBL.SYS_PORT),A
LD BC,CBL.OUT LD BC,SP_SND.CBL.OUT
LD A,#80 LD A,#80
.CBL_MUTE: OUT (C),A .CBL_MUTE: OUT (C),A
DJNZ .CBL_MUTE DJNZ .CBL_MUTE
@ -1556,7 +1556,7 @@ BEEP: LD A,#10
JR NZ,BEEP JR NZ,BEEP
RET RET
; ;
.beep_loop: OUT (ZX_Beeper),A .beep_loop: OUT (SP_SND.Beeper),A
LD B,D LD B,D
LD C,E LD C,E
; ;

View File

@ -181,7 +181,7 @@ ATAPI_5x_READ: ;PUSH IY ; !FIXIT
EX AF,AF' EX AF,AF'
IN A,(SLOT3) IN A,(SLOT3)
EX AF,AF' EX AF,AF'
JP ATAPI_5x_LONG_READ.main JR ATAPI_5x_LONG_READ.main
;[]================================================================[#52] ;[]================================================================[#52]
;Function: Long Read Sectors ;Function: Long Read Sectors
; A - Disk ; A - Disk
@ -198,17 +198,19 @@ ATAPI_5x_LONG_READ:
; ;
;PUSH IY ; !FIXIT § ç¥¬? ;PUSH IY ; !FIXIT § ç¥¬?
LD C,1 ; ¯à¨§­ ª long LD C,1 ; ¯à¨§­ ª long
.main: SAFE_PORTY_2 .main: EX AF,AF'
PUSH BC AND A ;read
PUSH IX EX AF,AF'
PUSH HL JR ATAPI_BEGIN_RW
; ;
EX AF,AF' ; SAFE_PORTY_2
AND A ;read ; PUSH BC
EX AF,AF' ; PUSH IX
CALL RW_ATAPI_SECTORs ; PUSH HL
; [ ] sector size. media changed ; ;
JP ATA_5x_LONG_READ.shared ; CALL RW_ATAPI_SECTORs
; ; [ ] sector size. media changed
; JP ATA_5x_LONG_READ.shared
; JP NC,ATA_5x_LONG_READ.shared ; JP NC,ATA_5x_LONG_READ.shared
; CP BIOS.Error.UnitAttention ; CP BIOS.Error.UnitAttention
; JR Z,ATAPI_MEDIA_ERROR ; JR Z,ATAPI_MEDIA_ERROR
@ -278,6 +280,15 @@ RW_ATAPI_SECTORs:
;[]===========================================================[#52, #55] ;[]===========================================================[#52, #55]
ATAPI_BEGIN_RW: SAFE_PORTY_2
PUSH BC
PUSH IX
PUSH HL
;
CALL RW_ATAPI_SECTORs
;
JP ATA_5x_LONG_READ.shared
;[]================================================================[#56] ;[]================================================================[#56]
;Function: Write Sectors ;Function: Write Sectors
; A - Disk ; A - Disk
@ -289,11 +300,14 @@ RW_ATAPI_SECTORs:
; DE - Address + (Sector counter * Size sector) ; DE - Address + (Sector counter * Size sector)
;WRITE SECTOR(S) ;WRITE SECTOR(S)
ATAPI_5x_WRITE: ;PUSH IY ; !FIXIT § ç¥¬? ATAPI_5x_WRITE: ;PUSH IY ; !FIXIT § ç¥¬?
LD C,0 ; ¯à¨§­ ª short ; ¯à®¡  ¡ £ 
LD C,0 ; ¯à¨§­ ª short
;LD C,1 ; ¯à¨§­ ª long
;
EX AF,AF' EX AF,AF'
IN A,(SLOT3) IN A,(SLOT3)
EX AF,AF' EX AF,AF'
JP ATAPI_5x_LONG_WRITE.main JR ATAPI_5x_LONG_WRITE.main
;[]================================================================[#53] ;[]================================================================[#53]
;Function: Long Write Sectors ;Function: Long Write Sectors
; A - Disk ; A - Disk
@ -310,17 +324,19 @@ ATAPI_5x_LONG_WRITE:
; ;
;PUSH IY ; !FIXIT § ç¥¬? ;PUSH IY ; !FIXIT § ç¥¬?
LD C,1 ; ¯à¨§­ ª long LD C,1 ; ¯à¨§­ ª long
.main: SAFE_PORTY_2 .main: EX AF,AF'
PUSH BC SCF ;write
PUSH IX EX AF,AF'
PUSH HL JR ATAPI_BEGIN_RW
; ;
EX AF,AF' ; SAFE_PORTY_2
SCF ;write ; PUSH BC
EX AF,AF' ; PUSH IX
CALL RW_ATAPI_SECTORs ; PUSH HL
; ; ;
JP ATA_5x_LONG_READ.shared ; CALL RW_ATAPI_SECTORs
; ;
; JP ATA_5x_LONG_READ.shared
;[]================================================================[#57] ;[]================================================================[#57]
;Function: Detect Disk ;Function: Detect Disk
@ -607,9 +623,10 @@ EXEC_PACKET_COMMAND:
; ;
POP BC POP BC
OUT (C),B OUT (C),B
; ; pause
LD B,#80 LD B,0
.pause2: DJNZ .pause2 DJNZ $
; DJNZ $
; ;
EX AF,AF' EX AF,AF'
LD XH,A ; áâà ­¨æ  ¤«ï R/W_LONG LD XH,A ; áâà ­¨æ  ¤«ï R/W_LONG
@ -617,7 +634,9 @@ EXEC_PACKET_COMMAND:
EX AF,AF' EX AF,AF'
EX DE,HL EX DE,HL
; ;
.AP_LOOP: CALL ATAPI_CHECK_DRV .AP_LOOP: ;LD B,128
;DJNZ $
CALL ATAPI_CHECK_DRV
JP C,.error;_APLOOP JP C,.error;_APLOOP
RET Z RET Z
;====== IF DATA REQUEST ===============================================; ;====== IF DATA REQUEST ===============================================;
@ -626,23 +645,6 @@ EXEC_PACKET_COMMAND:
; ;
LD A,XH LD A,XH
OUT (SLOT3),A OUT (SLOT3),A
;
;LD BC,IDE.Read.ByteCountLow
;IN E,(C)
;INC C ;LD BC,IDE.Read.ByteCountHigh
;IN D,(C) ;TRANSFER BLOCK SIZE
;;
;LD A,D
;OR E
;RET Z ;BLOCK = 0
;; 㬥­ìè ¥¬ áçñâ稪 § £à㦠¥¬ëå ¡ ©â®¢ ¢ 2 à § . —¨â ¥¬ ¯® 2 ¡ ©â 
;SRL D
;RR E
;;
;LD BC,IDE.Read.InterruptReason
;IN A,(C)
;AND IDE.InterruptReasonByte.IO
;LD BC,IDE.Read.Data
CALL ATAPI_PREPARE_RW CALL ATAPI_PREPARE_RW
RET NC RET NC
JR Z,.WRITE_DATA JR Z,.WRITE_DATA
@ -688,24 +690,7 @@ ATAPI_IdlePasses:
JP C,EXEC_PACKET_COMMAND.error JP C,EXEC_PACKET_COMMAND.error
JP Z,EXEC_PACKET_COMMAND.error_fail JP Z,EXEC_PACKET_COMMAND.error_fail
; ;
.Enter: ;LD BC,IDE.Read.ByteCountLow .Enter: CALL ATAPI_PREPARE_RW
;IN E,(C)
;INC C ;LD BC,IDE.Read.ByteCountHigh
;IN D,(C) ;TRANSFER BLOCK SIZE
;;
;LD A,D
;OR E
;RET Z ;BLOCK = 0
;;
;; 㬥­ìè ¥¬ áçñâ稪 § £à㦠¥¬ëå ¡ ©â®¢ ¢ 2 à § . —¨â ¥¬ ¯® 2 ¡ ©â 
;SRL D
;RR E
;;
;LD BC,IDE.Read.InterruptReason
;IN A,(C)
;AND IDE.InterruptReasonByte.IO
;LD BC,IDE.Read.Data
CALL ATAPI_PREPARE_RW
RET NC RET NC
JR Z,.write_data JR Z,.write_data
; ;
@ -737,6 +722,7 @@ ATAPI_IdlePasses:
ATAPI_CHECK_DRV: ATAPI_CHECK_DRV:
;EX DE,HL ;EX DE,HL
EXX EXX
;CALL .zeroWait
CALL ATAPI_WAITPRT CALL ATAPI_WAITPRT
EXX EXX
; ZF=1 ; ZF=1
@ -764,9 +750,25 @@ ATAPI_CHECK_DRV:
JP Z,ATAPI_MEDIA_ERROR JP Z,ATAPI_MEDIA_ERROR
CP BIOS.Error.ATAPI.UnitAttention CP BIOS.Error.ATAPI.UnitAttention
JP Z,ATAPI_MEDIA_ERROR JP Z,ATAPI_MEDIA_ERROR
;
;CP BIOS.Error.ATAPI.IllegalRequest
;RET Z
;
SCF SCF
RET RET
; ;
; .zeroWait: ;LD B,2
; LD HL,#800
; .loop: LD A,high IDE.Read.Status
; IN A,(low IDE.Read.Status)
; AND A
; RET NZ
; DEC HL
; LD A,H
; OR L
; JR NZ,.loop
; ;DJNZ .loop
; RET
ATAPI_PREPARE_RW: ATAPI_PREPARE_RW:
LD BC,IDE.Read.ByteCountLow LD BC,IDE.Read.ByteCountLow
@ -836,9 +838,9 @@ ATAPI_GET_ERROR_REG:
; !!! ­¥ª®â®àë¥ ä㭪樨 ­ ¤¥îâáï, çâ® ­  ¢ë室¥ ¢á¥£¤  ZF ; !!! ­¥ª®â®àë¥ ä㭪樨 ­ ¤¥îâáï, çâ® ­  ¢ë室¥ ¢á¥£¤  ZF
; ­¥ ¤®«¦­  âண âì ॣ. C ; ­¥ ¤®«¦­  âண âì ॣ. C
ATAPI_WAITPRT: LD DE,256*IDE.CtrlByte.Busy + 0 ATAPI_WAITPRT: LD DE,256*IDE.CtrlByte.Busy + 0
.Custom: LD B,100 .Custom: LD B,6 ; 3 = ®¡é ï § ¤¥à¦ª  ®ª®«® ᥪ㭤ë
LD HL,#0000 LD HL,#0000
; ; 4ÿ128ÿ768
.LOOP: LD A,high IDE.Read.Status .LOOP: LD A,high IDE.Read.Status
IN A,(low IDE.Read.Status) IN A,(low IDE.Read.Status)
CP #FF CP #FF
@ -852,13 +854,59 @@ ATAPI_WAITPRT: LD DE,256*IDE.CtrlByte.Busy + 0
LD A,H LD A,H
OR L OR L
JR NZ,.LOOP JR NZ,.LOOP
;
; LD A,high IDE.Read.Status
; IN A,(low IDE.Read.Status)
; CP #FF
; SCF
; RET Z
;
; 1ÿ392ÿ512ÿ256
DJNZ .LOOP DJNZ .LOOP
;
; LD A,high IDE.Read.Status
; IN A,(low IDE.Read.Status)
; INC A ;CP #FF
; SCF
; RET Z
;
LD A,BIOS.Error.Busy LD A,BIOS.Error.Busy
RET
;
.error: SCF .error: SCF
RET RET
;----------------------------------------------------------------------; ;----------------------------------------------------------------------;
;----------------------------------------------------------------------;
; D - MASK, E - PATTERN
; !!! ­¥ª®â®àë¥ ä㭪樨 ­ ¤¥îâáï, çâ® ­  ¢ë室¥ ¢á¥£¤  ZF
; ­¥ ¤®«¦­  âண âì ॣ. C
; ATAPI_WAITPRT: LD DE,256*IDE.CtrlByte.Busy + 0
; .Custom:
; .LOOP: LD A,high IDE.Read.Status
; IN A,(low IDE.Read.Status)
; CP #FF
; JR Z,.error
; ;
; AND D
; CP E
; RET Z
; JR .LOOP
; ;
; ; LD A,high IDE.Read.Status
; ; IN A,(low IDE.Read.Status)
; ; INC A ;CP #FF
; ; SCF
; ; RET Z
; ; ;
; ; LD A,BIOS.Error.Busy
; ; RET
; ;
; .error: SCF
; RET
;----------------------------------------------------------------------;
;----------------------------------------------------------------------; ;----------------------------------------------------------------------;
; DE - buffer ; DE - buffer
ATAPI_READ_CAPACITY_DATA: ATAPI_READ_CAPACITY_DATA:

View File

@ -119,7 +119,7 @@ RESERVED_PAGES: ;[x] free zx pages!
DB #58,#59,#5A,#5B,#5C,#5D,#5E,#5F DB #58,#59,#5A,#5B,#5C,#5D,#5E,#5F
; ;
;DB MODE_PAGE ; ????? ;DB MODE_PAGE ; ?????
DB CBL.BUFFER_PAGE ; Page for CBL audio DB SP_SND.CBL.BUFFER_PAGE ; Page for CBL audio
DB SYS_PAGE ; Page for system (BIOS) variables DB SYS_PAGE ; Page for system (BIOS) variables
DB #FF ; End of the block DB #FF ; End of the block
; ;

View File

@ -72,7 +72,7 @@ RST_CONF:
LD A,#80 LD A,#80
JR Z,.YES_CBL JR Z,.YES_CBL
XOR A XOR A
.YES_CBL: LD BC,CBL.SYS_PORT .YES_CBL: LD BC,SP_SND.CBL.SYS_PORT
OUT (C),A OUT (C),A
; ;
LD A,E ; config-byte LD A,E ; config-byte

View File

@ -163,12 +163,10 @@ EMM.CheckColdInit:
INC HL INC HL
INC DE INC DE
DJNZ .loop DJNZ .loop
; Disable user IM address in SYS_PAGE ; Disable user IM address in SYS_PAGE
XOR A XOR A
LD (SYS_PAGE.INT_ID - #4000),A LD (SYS_PAGE.INT_ID - #4000),A
; ;
EX AF,AF' EX AF,AF'
OUT (SLOT2),A OUT (SLOT2),A
RET RET

View File

@ -397,7 +397,8 @@ SETUP_FROM_CMOS:
; RET ; RET
/////////////////////////////////////////////////////////////////////[^] /////////////////////////////////////////////////////////////////////[^]
/////////////////////////////////////////////////////////////////////[v] /////////////////////////////////////////////////////////////////////[v]
IDESPEC: IN A,(SLOT3) PARSE_IdentifyDevice:
IN A,(SLOT3)
EX AF,AF' EX AF,AF'
LD A,SYS_PAGE LD A,SYS_PAGE
OUT (SLOT3),A OUT (SLOT3),A
@ -440,11 +441,7 @@ IDESPEC: IN A,(SLOT3)
; ;
LD A,(IDENTIFY_DEVICE_BUFFER.NumSectorsPerTrack) LD A,(IDENTIFY_DEVICE_BUFFER.NumSectorsPerTrack)
LD (IY+IDE.HDD_INIT_TABLE.SectorsPerTrack),A LD (IY+IDE.HDD_INIT_TABLE.SectorsPerTrack),A
IF IDE_Optimization LD B,high IDE.Write.Counter
LD B,high IDE.Write.Counter
ELSE
LD BC,IDE.Write.Counter
ENDIF
OUT (C),A OUT (C),A
LD A,IDE.CMD.ATA.InitializeDeviceParameters LD A,IDE.CMD.ATA.InitializeDeviceParameters
CALL IDE_CMD CALL IDE_CMD
@ -460,7 +457,8 @@ IDESPEC: IN A,(SLOT3)
; ;
LD (IY+IDE.HDD_INIT_TABLE.SectorsPerCylinderLow),L LD (IY+IDE.HDD_INIT_TABLE.SectorsPerCylinderLow),L
LD (IY+IDE.HDD_INIT_TABLE.SectorsPerCylinderHigh),H LD (IY+IDE.HDD_INIT_TABLE.SectorsPerCylinderHigh),H
.END: ; [x] save hdd parameters to cmos for "setup" in settings .END: RES 1,(IY + IDE.HDD_INIT_TABLE.MediaParameters) ; [ ] removable media
; [x] save hdd parameters to cmos for "setup" in settings
LD A,(IY+IDE.HDD_INIT_TABLE.DRV_Flags) ; for save to cmos in GETPARM LD A,(IY+IDE.HDD_INIT_TABLE.DRV_Flags) ; for save to cmos in GETPARM
; ;
EX AF,AF' EX AF,AF'
@ -474,6 +472,8 @@ IDESPEC: IN A,(SLOT3)
LD HL,ICHANEL LD HL,ICHANEL
OR (HL) OR (HL)
LD (IY+IDE.HDD_INIT_TABLE.DRV_Flags),A LD (IY+IDE.HDD_INIT_TABLE.DRV_Flags),A
;
;
; ­  ¢á直© á«ãç © ; ­  ¢á直© á«ãç ©
LD (IY+IDE.HDD_INIT_TABLE.MediaParameters),%0000'0001 LD (IY+IDE.HDD_INIT_TABLE.MediaParameters),%0000'0001
LD B,100 ; áçñâ稪 ¯®¯ë⮪ (1 ¯®¯ë⪠ - 1 HALT) LD B,100 ; áçñâ稪 ¯®¯ë⮪ (1 ¯®¯ë⪠ - 1 HALT)
@ -484,9 +484,10 @@ IDESPEC: IN A,(SLOT3)
POP BC POP BC
JR NC,.s_size JR NC,.s_size
; ;
RES 1,(IY + IDE.HDD_INIT_TABLE.MediaParameters) ; [ ] removable media
CP BIOS.Error.ATAPI.UnitAttention CP BIOS.Error.ATAPI.UnitAttention
JR Z,IDESPEC.END JR Z,PARSE_IdentifyDevice.END ;!TEST ;!FIXIT ZIP bug
;JR Z,.TEST_SET
; ;
HALT HALT
DJNZ .get_error_loop DJNZ .get_error_loop
@ -508,9 +509,59 @@ IDESPEC: IN A,(SLOT3)
; ;
.No_Media: LD (IY+IDE.HDD_INIT_TABLE.SectorSize),H .No_Media: LD (IY+IDE.HDD_INIT_TABLE.SectorSize),H
LD (IY+IDE.HDD_INIT_TABLE.SectorSize + 1),L LD (IY+IDE.HDD_INIT_TABLE.SectorSize + 1),L
RES 1,(IY + IDE.HDD_INIT_TABLE.MediaParameters) ; [ ] removable media
; ;
JR IDESPEC.END JR PARSE_IdentifyDevice.END ;!TEST ;!FIXIT ZIP bug
;
/*
;====; ;!TEST ;!FIXIT ZIP bug
.TEST_SET: LD HL,.MODE_SENSE
LD DE,SYS_PAGE.MS_BPB ; ¯à®áâ® ­ã¦¥­ ¡ë« ¡ãä¥à
LD BC,BIOS.DRV_EXTENDED.ATAPI_Custom_PCMD
CALL ATAPI_CUSTOM_CMD
JR NC,.OK_DONE
;
LD A,COLORS.CGA.BORDER.CYAN
OUT (BorderColor),A
JR .go_exit
;
.OK_DONE: LD A,(SYS_PAGE.MS_BPB + 2)
AND A
JR NZ,.go_exit
;
LD (SYS_PAGE.MS_BPB + 10),A
LD HL,(SYS_PAGE.MS_BPB)
LD (.MODE_SELECT.Size),HL
LD HL,.MODE_SELECT
LD DE,SYS_PAGE.MS_BPB ; ¯à®áâ® ­ã¦¥­ ¡ë« ¡ãä¥à
LD BC,BIOS.DRV_EXTENDED.ATAPI_Custom_PCMD
CALL ATAPI_CUSTOM_CMD
JR NC,.go_exit
;
LD A,COLORS.CGA.BORDER.GREEN
OUT (BorderColor),A
;JR .go_exit
;
.go_exit: AND A
JP PARSE_IdentifyDevice.END
;
;
.MODE_SENSE: BYTE #5A
BYTE #08
.MODE_SENSE.Page: BYTE #08 ;bit7..6 - Page Control, bit5..0 - Page Code
BLOCK 4,0
BYTE #02,#00
BLOCK 3,0
;
.MODE_SELECT: BYTE #55
BYTE #08
.MODE_SELECT.Page: BYTE #08 ;bit7..6 - Page Control, bit5..0 - Page Code
BLOCK 4,0
.MODE_SELECT.Size: BYTE #02,#00
BLOCK 3,0
;
;====; ;!TEST
*/ ;
/////////////////////////////////////////////////////////////////////[^] /////////////////////////////////////////////////////////////////////[^]
@ -761,7 +812,7 @@ GETPARAM: LD HL,PAUSES.WAIT.IDE
LD HL,IDENTIFY_DEVICE_BUFFER LD HL,IDENTIFY_DEVICE_BUFFER
INIR INIR
INIR INIR
CALL IDESPEC CALL PARSE_IdentifyDevice
; [x] save hdd parameters to cmos for "setup" in settings ; [x] save hdd parameters to cmos for "setup" in settings
CALL SaveToCMOS CALL SaveToCMOS
AND A AND A

View File

@ -17,32 +17,38 @@ INT_POINTER: WORD 0
ENDIF ENDIF
ENDIF ENDIF
INT_HANDLER: INT_HANDLER: PUSH AF
PUSH AF EX AF,AF'
EX AF,AF' PUSH AF
PUSH AF PUSH BC
PUSH BC PUSH DE
PUSH DE PUSH HL
PUSH HL EXX
EXX PUSH BC
PUSH BC PUSH DE
PUSH DE PUSH HL
PUSH HL PUSH IX
PUSH IX PUSH IY
PUSH IY CALL KEYSCAN
CALL KEYSCAN ;
POP IY IF STARTUP_SND
POP IX SCF
POP HL .sndSwitch: CCF ; SCF/CCF
POP DE CALL C,STARTUP_SOUND
POP BC ENDIF
EXX ;
POP HL POP IY
POP DE POP IX
POP BC POP HL
POP AF POP DE
EX AF,AF' POP BC
POP AF EXX
EI POP HL
RETI POP DE
POP BC
POP AF
EX AF,AF'
POP AF
EI
RETI
; ;

View File

@ -554,15 +554,17 @@ RESTART_ID:
.str: DZ "RESTART" .str: DZ "RESTART"
.size EQU $ - RESTART_ID.str .size EQU $ - RESTART_ID.str
Start_again:
ld sp,STACK-2
START:
DI
PUSH AF
XOR A
LD (ERRSUM),A
LD (ERRSUM.ErrDateTime),A
Start_again: LD SP,STACK-2
START: DI
PUSH AF
XOR A
LD (ERRSUM),A
LD (ERRSUM.ErrDateTime),A
;
LD A,R ; reg R bit7 - ¯à¨§­ ª § ¯ã᪠ á ®âà ¡®âª®© «® ¤¥à  ª®­äë (¨§ SET_CONFIG_ID)
LD (LOGOTYPE.playSnd),A
;
; LD C,#97 ; LD C,#97
; RST_to_BIOS_18 ; RST_to_BIOS_18
; XOR A ; XOR A
@ -1598,7 +1600,9 @@ ElementsBuffer:
.DownCenter: BYTE "Á" ; DC - DownCenter .DownCenter: BYTE "Á" ; DC - DownCenter
.Size EQU $-ElementsBuffer .Size EQU $-ElementsBuffer
; ;
IF STARTUP_SND
INCLUDE 'startup_sound.asm'
ENDIF
INCLUDE 'VIDEO_IO.asm' INCLUDE 'VIDEO_IO.asm'
INCLUDE 'AUTOIDE.asm' INCLUDE 'AUTOIDE.asm'
INCLUDE 'SETTINGS.asm' INCLUDE 'SETTINGS.asm'

View File

@ -290,22 +290,33 @@ PRSYM: LD B,1
//////////////////// LOGO \\\\\\\\\\\\\\\\\\\\ //////////////////// LOGO \\\\\\\\\\\\\\\\\\\\
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
LOGOTYPE: CALL SHOW_LOGO LOGOTYPE: CALL SHOW_LOGO
;
IF STARTUP_SND
.playSnd+1: LD A,#80
RLA
JR NC,.noSound
;
LD A,#37 ; opcode SCF, play sound on
LD (INT_HANDLER.sndSwitch),A
.noSound: ;
ENDIF
;
LD BC,CMOS_CELL.BootUpParams.Mask.StartDelay LD BC,CMOS_CELL.BootUpParams.Mask.StartDelay
CALL GET_CMOS_VALUE CALL GET_CMOS_VALUE
OR A OR A
JR Z,.EASYDLY ; Delay average JR Z,.MinDelay
DEC A DEC A
JR Z,.SKIPDLY ; Delay disabled JR Z,.AverageDelay
; Delay enabled ; Delay enabled
LD B,LOGO_DELAY_NORM LD B,LOGO_DELAY_NORM
.loop EI .loop EI
push bc push bc
HALT HALT
CALL go_setup CALL go_setup
pop bc pop bc
DJNZ .loop DJNZ .loop
; Delay average ; Delay average
.SKIPDLY: LD B,LOGO_DELAY_MAX .AverageDelay: LD B,LOGO_DELAY_MAX
.MMA: PUSH BC .MMA: PUSH BC
EI EI
HALT HALT
@ -323,12 +334,17 @@ LOGOTYPE: CALL SHOW_LOGO
DI DI
CALL WIN_OPEN.SCR1 CALL WIN_OPEN.SCR1
; ;
IF STARTUP_SND
LD A,#3F ; opcode CCF, play sound off
LD (INT_HANDLER.sndSwitch),A
ENDIF
;
LD DE,0 LD DE,0
LD HL,#0920 ;!HARDCODE LOGOTYPE SIZE LD HL,#0920 ;!HARDCODE LOGOTYPE SIZE
LD B,7 LD B,7
JP LP_CLS_WIN JP LP_CLS_WIN
; Delay disabled ; Delay disabled
.EASYDLY: LD B,LOGO_DELAY_MIN .MinDelay: LD B,LOGO_DELAY_MIN
.loop2: EI .loop2: EI
HALT HALT
DJNZ .loop2 DJNZ .loop2

View File

@ -0,0 +1,215 @@
; CODE BY €«¥ªá ­¤à -=TmK deMarche=-
; play frame
; use: af,hl,de,bc 251
STARTUP_SOUND: LD HL,.BYTE_POS
LD A,(HL)
LD C,SP_SND.AY
CP .toneDataSize + 1
JR C,.play
;-- mus off
XOR A
LD E,A
.offLp: LD B,high SP_SND.AY.CTRL
OUT (C),A
LD B,high SP_SND.AY.DATA
OUT (C),E
INC A
CP 15
JR NZ,.offLp
RET
;
.play: LD DE,#0700+56
LD B,high SP_SND.AY.CTRL
OUT (C),D
LD B,high SP_SND.AY.DATA
OUT (C),E
CP 33
JR NC,.playVol
AND 3
JR NZ,.playVol
;--- play tone
LD HL,(.WORD_TONE)
;A=0
.playToneLp: LD B,high SP_SND.AY.CTRL
OUT (C),A
LD B,high SP_SND.AY.DATA
OUTI
INC A
CP 6
JR NZ,.playToneLp
;
LD (.WORD_TONE),HL
.playVol: LD HL,(.WORD_VOL)
LD A,8
LD E,(HL)
INC HL
.playVolLp: LD B,high SP_SND.AY.CTRL
OUT (C),A
LD B,high SP_SND.AY.DATA
OUT (C),E
INC A
CP 11
JR NZ,.playVolLp
;
LD (.WORD_VOL),HL
LD HL,.BYTE_POS
INC (HL)
RET
;-----------------------------------------------------------------------
.BYTE_POS: DB 0
.WORD_VOL: DW .volData
.WORD_TONE: DW .toneData
;-----------------------------------------------------------------------
.volData: ;DB 11,10,08,06,08,07,06,05
;DB 12,11,09,07,09,08,07,06
DB 13,12,10,08,09,08,07,06
DB 13,12,10,08,09,08,07,06
DB 13,12,10,08,09,08,07,06
DB 12,12,10,08,07,06,05,04
DB 07,06,05,04,03,02,01,00
DB 05,04,03,02,01,00,00,00
DB 04,03,02,02,01,00,00,00
DB 02,02,01,01,00,00,00,00
.toneData: DB 68,3,136,6,162,1
DB 136,6,136,6,68,3
DB 57,1,229,4,114,2
;DB 68,3,229,4,162,1
;DB 46,2,92,4,23,1
;DB 57,1,92,4,114,2
;DB 209,0,68,3,162,1
;DB 46,2,68,3,23,1
;DB 209,0,68,3,162,1
.toneDataSize EQU $ - .toneData
.codeEnd: DISPLAY "StartUp Sound size: ",/A,.codeEnd - STARTUP_SOUND
; savesna "startup_sound.sna", #8000
/*
MODULE STARTUP_SOUND
DEFINE SND_VARIANT 2 ; 0, 1, 2
IF SND_VARIANT == 0
DEFINE SND_Const1 15
DEFINE SND_Const2 7
;
ELSEIF SND_VARIANT == 1
DEFINE SND_Const1 15
DEFINE SND_Const2 7
;
ELSEIF SND_VARIANT == 2
DEFINE SND_Const1 14
DEFINE SND_Const2 6
ENDIF
codeBegin: LD A,SND_Const1
LD HL,.volData
LD DE,.sndData
.lp: CALL .snd
CALL .vol
CALL .vol
CALL .vol
DEC A
JP NZ,.lp
;--
LD DE,#07ff
LD B,E
OUT (C),D
LD B,#bf
OUT (C),E
RET
;----------------
.snd: CALL .vol
CP SND_Const2
RET C
;
.sndEnd: EX AF,AF
EX DE,HL
PUSH DE
XOR A
.sndLp: LD B,#ff
OUT (C),A
LD B,#bf
OUTI
INC A
CP 6
JR NZ,.sndLp
POP DE
EX DE,HL
EX AF,AF
RET
;----------------
.vol: ;EI
;HALT
EX AF,AF
PUSH DE
LD BC,#fffd
LD DE,#0700+56
OUT (C),D
LD B,#bf
OUT (C),E
LD A,8
LD E,(HL)
INC HL
.volLp: LD B,#ff
OUT (C),A
LD B,#bf
OUT (C),E
INC A
CP 11
JR NZ,.volLp
POP DE
EX AF,AF
RET
;----------------
.volData:
IF SND_VARIANT == 0
DB 13,12,10,08,09,08,07,06
DB 13,12,10,08,09,08,07,06
DB 13,12,10,08,09,08,07,06
DB 12,12,10,08,07,06,05,04
DB 07,06,05,04,03,02,01,00
DB 05,04,03,02,01,00,00,00
DB 04,03,02,02,01,00,00,00
DB 02,02,01,01,00,00,00,00
;
ELSEIF SND_VARIANT == 1
DB 11,10,08,06,08,07,06,05
DB 12,11,09,07,09,08,07,06
DB 13,12,10,08,09,08,07,06
DB 13,12,10,08,07,06,05,04
DB 08,07,06,05,04,03,02,01
DB 06,05,04,03,02,01,00,00
DB 04,04,03,02,01,00,00,00
DB 02,02,01,01,00,00,00,00
;
ELSEIF SND_VARIANT == 2
DB 15,14,13,10,10,09,09,07
DB 15,14,13,10,10,09,09,07
DB 15,14,13,10,10,09,09,07
DB 15,14,13,10,07,06,05,04
DB 08,07,06,05,04,03,02,01
DB 06,05,04,03,02,01,00,00
DB 04,03,02,01,00,00,00,00
ENDIF
.sndData: DB 68,3,136,6,162,1
DB 136,6,136,6,68,3
DB 57,1,229,4,114,2
DB 68,3,229,4,162,1
DB 46,2,92,4,23,1
DB 57,1,92,4,114,2
DB 209,0,68,3,162,1
DB 46,2,68,3,23,1
DB 209,0,68,3,162,1
codeEnd: DISPLAY "StartUp Sound size: ",/A,codeEnd-codeBegin
ENDMODULE
*/

View File

@ -17,6 +17,7 @@ BETA_RC EQU 2 ;
DEFINE LOGO_DELAY_NORM 100 ; DEFINE LOGO_DELAY_NORM 100 ;
DEFINE LOGO_DELAY_MAX 130 ; DEFINE LOGO_DELAY_MAX 130 ;
;----------------------------[ TEST ]---------------------------; ;----------------------------[ TEST ]---------------------------;
DEFINE STARTUP_SND 1 ;
DEFINE ERROR_POST_5 0 ; ¢¨á­ãâì ­  ®è¨¡ª¥ ¢ POST 5 DEFINE ERROR_POST_5 0 ; ¢¨á­ãâì ­  ®è¨¡ª¥ ¢ POST 5
DEFINE TEST_INT 1 ; ’¥áâ®¢ë© ®¡à ¡®â稪 ¯®«ì§®¢ â¥«ì᪮£® INT DEFINE TEST_INT 1 ; ’¥áâ®¢ë© ®¡à ¡®â稪 ¯®«ì§®¢ â¥«ì᪮£® INT
DEFINE NEW_FEATURE 0 ; !TODO ¯ã­ªâë ¢ á¥â ¯ DEFINE NEW_FEATURE 0 ; !TODO ¯ã­ªâë ¢ á¥â ¯

Binary file not shown.