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

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,8 +677,7 @@ 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)
@ -704,37 +703,26 @@ 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
FN_5x_Parser_9: ; ATA_5x_SET_PAR
LD C,#09
JP FN_5x_Parser
FN_5x_Parser_E: ; DRV_EXTENDED
LD C,#0E
JP FN_5x_Parser
FN_5x_Parser_5: ; ATA_5x_READ
LD C,5
FN_5x_Parser:
PUSH HL
LD H,A LD H,A
AND #F0 AND #F0
OR C OR C

View File

@ -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
@ -887,7 +887,7 @@ Set_ALL_Mode: LD A,Port_All_Mode.DEFAULT
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
@ -898,7 +898,7 @@ Setup_to_RAM: LD HL,Setup_Starter.Start
;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
PUSH IX
PUSH HL
;
EX AF,AF'
AND A ;read AND A ;read
EX AF,AF' EX AF,AF'
CALL RW_ATAPI_SECTORs JR ATAPI_BEGIN_RW
; [ ] sector size. media changed ;
JP ATA_5x_LONG_READ.shared ; SAFE_PORTY_2
; PUSH BC
; PUSH IX
; PUSH HL
; ;
; 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
PUSH IX
PUSH HL
;
EX AF,AF'
SCF ;write SCF ;write
EX AF,AF' EX AF,AF'
CALL RW_ATAPI_SECTORs JR ATAPI_BEGIN_RW
; ;
JP ATA_5x_LONG_READ.shared ; SAFE_PORTY_2
; PUSH BC
; PUSH IX
; PUSH HL
; ;
; 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,8 +17,7 @@ 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
@ -31,6 +30,13 @@ INT_HANDLER:
PUSH IX PUSH IX
PUSH IY PUSH IY
CALL KEYSCAN CALL KEYSCAN
;
IF STARTUP_SND
SCF
.sndSwitch: CCF ; SCF/CCF
CALL C,STARTUP_SOUND
ENDIF
;
POP IY POP IY
POP IX POP IX
POP HL POP HL

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_again: LD SP,STACK-2
START: START: DI
DI
PUSH AF PUSH AF
XOR A XOR A
LD (ERRSUM),A LD (ERRSUM),A
LD (ERRSUM.ErrDateTime),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,12 +290,23 @@ 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
@ -305,7 +316,7 @@ LOGOTYPE: CALL SHOW_LOGO
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.