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

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
EXP_FNS_RST18:
PUSH HL
LD L,C
LD H,high TAB_FNS
LD C,(HL)
INC H
LD H,(HL)
LD L,C
EX (SP),HL
RET
EXP_FNS_RST18: PUSH HL
LD L,C
LD H,high TAB_FNS
LD C,(HL)
INC H
LD H,(HL)
LD L,C
EX (SP),HL
RET
; ATA_5x_RESET
; ATA_5x_LONG_READ
@ -704,50 +703,39 @@ EXP_FNS_RST18:
; FN_RESERVED_5x
; DRV_LIST
FN_5x_Parser_1: ; ATA_5x_RESET
LD C,#01
JP FN_5x_Parser
FN_5x_Parser_2: ; ATA_5x_LONG_READ
LD C,#02
JP FN_5x_Parser
FN_5x_Parser_3: ; ATA_5x_LONG_WRITE
LD C,#03
JP FN_5x_Parser
FN_5x_Parser_4: ; ATA_5x_VERIFY
LD C,#04
JP FN_5x_Parser
FN_5x_Parser_6: ; ATA_5x_WRITE
LD C,#06
JP FN_5x_Parser
FN_5x_Parser_7: ; ATA_5x_DETECT
LD C,#07
JP FN_5x_Parser
FN_5x_Parser_8: ; ATA_5x_GET_PAR
LD C,#08
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
AND #F0
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
FN_5x_Parser_1: LD C,#01 ; ATA_5x_RESET
JR FN_5x_Parser
FN_5x_Parser_2: LD C,#02 ; ATA_5x_LONG_READ
JR FN_5x_Parser
FN_5x_Parser_3: LD C,#03 ; ATA_5x_LONG_WRITE
JR FN_5x_Parser
FN_5x_Parser_4: LD C,#04 ; ATA_5x_VERIFY
JR FN_5x_Parser
FN_5x_Parser_6: LD C,#06 ; ATA_5x_WRITE
JR FN_5x_Parser
FN_5x_Parser_7: LD C,#07 ; ATA_5x_DETECT
JR FN_5x_Parser
FN_5x_Parser_8: LD C,#08 ; ATA_5x_GET_PAR
JR FN_5x_Parser
FN_5x_Parser_9: LD C,#09 ; ATA_5x_SET_PAR
JR FN_5x_Parser
FN_5x_Parser_E: LD C,#0E ; DRV_EXTENDED
JR FN_5x_Parser
FN_5x_Parser_5: LD C,5 ; ATA_5x_READ
FN_5x_Parser: PUSH HL
LD H,A
AND #F0
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
EXP_FNS:; ®âª«îç ¥¬ § ¯¨áì ¢ íªà ­ ᯥªâà㬠

View File

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

View File

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

View File

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

View File

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

View File

@ -397,7 +397,8 @@ SETUP_FROM_CMOS:
; RET
/////////////////////////////////////////////////////////////////////[^]
/////////////////////////////////////////////////////////////////////[v]
IDESPEC: IN A,(SLOT3)
PARSE_IdentifyDevice:
IN A,(SLOT3)
EX AF,AF'
LD A,SYS_PAGE
OUT (SLOT3),A
@ -440,11 +441,7 @@ IDESPEC: IN A,(SLOT3)
;
LD A,(IDENTIFY_DEVICE_BUFFER.NumSectorsPerTrack)
LD (IY+IDE.HDD_INIT_TABLE.SectorsPerTrack),A
IF IDE_Optimization
LD B,high IDE.Write.Counter
ELSE
LD BC,IDE.Write.Counter
ENDIF
LD B,high IDE.Write.Counter
OUT (C),A
LD A,IDE.CMD.ATA.InitializeDeviceParameters
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.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
;
EX AF,AF'
@ -474,19 +472,22 @@ IDESPEC: IN A,(SLOT3)
LD HL,ICHANEL
OR (HL)
LD (IY+IDE.HDD_INIT_TABLE.DRV_Flags),A
;
;
; ­  ¢á直© á«ãç ©
LD (IY+IDE.HDD_INIT_TABLE.MediaParameters),%0000'0001
LD B,100 ; áçñâ稪 ¯®¯ë⮪ (1 ¯®¯ë⪠ - 1 HALT)
.get_error_loop: PUSH BC
;LD HL,ATAPI_CMD_PACKET.TEST_UNIT_READY
;CALL EXEC_PACKET_COMMAND.start
CALL EXEC_TEST_CMD
CALL EXEC_TEST_CMD
POP BC
JR NC,.s_size
;
RES 1,(IY + IDE.HDD_INIT_TABLE.MediaParameters) ; [ ] removable media
CP BIOS.Error.ATAPI.UnitAttention
JR Z,IDESPEC.END
JR Z,PARSE_IdentifyDevice.END ;!TEST ;!FIXIT ZIP bug
;JR Z,.TEST_SET
;
HALT
DJNZ .get_error_loop
@ -508,9 +509,59 @@ IDESPEC: IN A,(SLOT3)
;
.No_Media: LD (IY+IDE.HDD_INIT_TABLE.SectorSize),H
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
INIR
INIR
CALL IDESPEC
CALL PARSE_IdentifyDevice
; [x] save hdd parameters to cmos for "setup" in settings
CALL SaveToCMOS
AND A

View File

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

View File

@ -554,15 +554,17 @@ RESTART_ID:
.str: DZ "RESTART"
.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
; RST_to_BIOS_18
; XOR A
@ -1598,7 +1600,9 @@ ElementsBuffer:
.DownCenter: BYTE "Á" ; DC - DownCenter
.Size EQU $-ElementsBuffer
;
IF STARTUP_SND
INCLUDE 'startup_sound.asm'
ENDIF
INCLUDE 'VIDEO_IO.asm'
INCLUDE 'AUTOIDE.asm'
INCLUDE 'SETTINGS.asm'

View File

@ -290,22 +290,33 @@ PRSYM: LD B,1
//////////////////// 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
CALL GET_CMOS_VALUE
OR A
JR Z,.EASYDLY ; Delay average
JR Z,.MinDelay
DEC A
JR Z,.SKIPDLY ; Delay disabled
JR Z,.AverageDelay
; Delay enabled
LD B,LOGO_DELAY_NORM
.loop EI
push bc
HALT
CALL go_setup
CALL go_setup
pop bc
DJNZ .loop
; Delay average
.SKIPDLY: LD B,LOGO_DELAY_MAX
.AverageDelay: LD B,LOGO_DELAY_MAX
.MMA: PUSH BC
EI
HALT
@ -323,12 +334,17 @@ LOGOTYPE: CALL SHOW_LOGO
DI
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 HL,#0920 ;!HARDCODE LOGOTYPE SIZE
LD B,7
JP LP_CLS_WIN
; Delay disabled
.EASYDLY: LD B,LOGO_DELAY_MIN
.MinDelay: LD B,LOGO_DELAY_MIN
.loop2: EI
HALT
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_MAX 130 ;
;----------------------------[ TEST ]---------------------------;
DEFINE STARTUP_SND 1 ;
DEFINE ERROR_POST_5 0 ; ¢¨á­ãâì ­  ®è¨¡ª¥ ¢ POST 5
DEFINE TEST_INT 1 ; ’¥áâ®¢ë© ®¡à ¡®â稪 ¯®«ì§®¢ â¥«ì᪮£® INT
DEFINE NEW_FEATURE 0 ; !TODO ¯ã­ªâë ¢ á¥â ¯

Binary file not shown.