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

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
EXP_FNS_RST18:
PUSH HL
EXP_FNS_RST18: PUSH HL
LD L,C
LD H,high TAB_FNS
LD C,(HL)
@ -704,37 +703,26 @@ 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
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

View File

@ -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
@ -887,7 +887,7 @@ Set_ALL_Mode: LD A,Port_All_Mode.DEFAULT
Set_Default_Screen:
CALL FN_SYNC.INT_DEF ; set default int
ld a,128+4 ; !HARDCODE
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
@ -898,7 +898,7 @@ Setup_to_RAM: LD HL,Setup_Starter.Start
;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
;
EX AF,AF'
.main: EX AF,AF'
AND A ;read
EX AF,AF'
CALL RW_ATAPI_SECTORs
; [ ] sector size. media changed
JP ATA_5x_LONG_READ.shared
JR ATAPI_BEGIN_RW
;
; 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,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
;
EX AF,AF'
.main: EX AF,AF'
SCF ;write
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]
;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
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
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,6 +472,8 @@ 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)
@ -484,9 +484,10 @@ IDESPEC: IN A,(SLOT3)
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,8 +17,7 @@ INT_POINTER: WORD 0
ENDIF
ENDIF
INT_HANDLER:
PUSH AF
INT_HANDLER: PUSH AF
EX AF,AF'
PUSH AF
PUSH BC
@ -31,6 +30,13 @@ INT_HANDLER:
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

View File

@ -554,15 +554,17 @@ RESTART_ID:
.str: DZ "RESTART"
.size EQU $ - RESTART_ID.str
Start_again:
ld sp,STACK-2
START:
DI
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,12 +290,23 @@ 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
@ -305,7 +316,7 @@ LOGOTYPE: CALL SHOW_LOGO
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.