From 5069c5941ecd0c1c0a0fb279ab4c363db18e2ead Mon Sep 17 00:00:00 2001 From: Tolik <85737314+Tolik-Trek@users.noreply.github.com> Date: Fri, 13 Jun 2025 05:25:52 +1000 Subject: [PATCH] StartUp sound, fixes with atapi detects, new in settings --- Shared_Includes | 2 +- src/ZX_ROMS/new/SP_TRDOS.bin | Bin 16384 -> 16384 bytes src/bios/exp/EXTENDED/IDE/ATAPI_DRV.ASM | 122 ++++++- src/bios/rom/SETUP/AUTOIDE.asm | 6 +- src/bios/rom/SETUP/SETTINGS.asm | 17 +- src/bios/rom/SETUP/VIDEO_IO.asm | 7 +- src/bios/rom/SETUP/ayfxplay.asm | 403 ++++++++++++++++++++++++ src/bios/rom/SETUP/messages.z80 | 107 ++++--- src/bios/rom/SETUP/netherworld_8.afx | Bin 0 -> 29 bytes src/bios/rom/SETUP/startup_sound.asm | 267 +++++++--------- 10 files changed, 697 insertions(+), 234 deletions(-) create mode 100755 src/bios/rom/SETUP/ayfxplay.asm create mode 100755 src/bios/rom/SETUP/netherworld_8.afx diff --git a/Shared_Includes b/Shared_Includes index 83c2b69..63faf9f 160000 --- a/Shared_Includes +++ b/Shared_Includes @@ -1 +1 @@ -Subproject commit 83c2b69b4af0a36475fa42378000fb6e57c59021 +Subproject commit 63faf9f0823649cfb52e9fcaad430170a05b31a7 diff --git a/src/ZX_ROMS/new/SP_TRDOS.bin b/src/ZX_ROMS/new/SP_TRDOS.bin index a52623caaa3e1e4fa4dec5cd4c6a0f618b1c64fc..ed19383843d81be47be29003ef5abd042e765072 100644 GIT binary patch delta 513 zcmXAlPiPZS5XRrjOWaL$v)$Umnv3skE+Ke`0i|r3wOT~M28td;y8D_fXs8kcD#XNQ zlao1l%DKlV_%|Am_7({)v@u=^f+z9dDng3Tf|`<7U+TvUGxHsO%uKZkt5w*{pgBEc zJ=y$>c4A>m^Gs4eTG;Ar!I)?AhTMVN)P9&f7$!+eyJ8YCsU$7<2lSidk_=0u`jl$d z%)L$www|M5u>M*~i-Fm>^Jg#LJk?@S8dd^+zh9ME5F@`TGJC4C9&cZ`&+NF*u-B)2 z#Z=;%)p=;01YjdutJU%=f*^Q;JDpX)j3d8|OiWHpmOKIPls<`9AGmnY!}xnFM^|K7 zcIUGOD0KVVut0Luaf$b((2h8+Sl9pn?2lBxflj{}Z-_9{daN#K6#&P;-*!9%z;z2q zz?XslCzJyEPyM&Hl+WM8T$t#9NHF@1?xQ& z`5)hPS2?UWVipRLS&&12vI2+f<~7WJIXPIJeOw)bvP>th + ld a, b + ld (ReleaseHiSMC), a ; SMC> + ld a, e + add a, a + add a, a + add a, a + ld e, a + ld d, 0 + ld ix, afxChDesc + add ix, de + ld e, 3 + add ix, de + pop af + ld de, 0 ; In DE the longest time in search + ld h, e + ld l, a + add hl, hl +afxBnkAdr2: + ld bc, 0 ; Address of the effect offsets table + add hl, bc + ld c, (hl) + inc hl + ld b, (hl) + add hl, bc ; The effect address is obtained in hl + push hl ; Save the effect address on the stack + jp DoPlay + +; --------------------------------------------------------------; +; Launch the effect on a free channel. If no free channels, ; +; the longest sounding is selected. ; +; ; +; Input: A = Effect number 0..255 ; +; --------------------------------------------------------------; +AFXPlay: + push af + ld a, c + ld (ReleaseLoSMC), a ; SMC> + ld a, b + ld (ReleaseHiSMC), a ; SMC> + pop af + ld de, 0 ; In DE the longest time in search + ld h, e + ld l, a + add hl, hl +afxBnkAdr1: + ld bc, 0 ; Address of the effect offsets table + add hl, bc + ld c, (hl) + inc hl + ld b, (hl) + add hl, bc ; The effect address is obtained in hl + push hl ; Save the effect address on the stack + ld hl, afxChDesc ; Empty channel search + ld b, 3 +afxPlay0: + inc hl + inc hl + ld a, (hl) ; Compare the channel time with the largest + inc hl + cp e + jr c, afxPlay1 + ld c, a + ld a, (hl) + cp d + jr c, afxPlay1 + ld e, c ; Remember the longest time + ld d, a + push hl ; Remember the channel address+3 in IX + pop ix +afxPlay1: + ld a, 5 + add a, l ; Add(hl, a) } + ld l, a ; } + adc a, h ; } + sub l ; } + ld h, a ; } + djnz afxPlay0 +DoPlay: + pop de ; Take the effect address from the stack + ld (ix-3), e ; Put in the channel descriptor + ld (ix-2), d + ld (ix-1), b ; Zero the playing time + ld (ix-0), b +ReleaseLoSMC equ $+3 + ld (ix+3), AFXSMC ; UnusedSettingsFeatures }, [2]={ - "LoadZXroms", -- 1 - "QS_SetUpHardware", -- 2 - "QS_SetUpZxRom", -- 3 - "TrDosA", -- 4 - "TrDosB", -- 5 - "TrDosC", -- 6 - "TrDosD", -- 7 - "SetTime", -- 8 DEFINES.INC --> NEW_FEATURE - --"HddWrPr", -- 9 DEFINES.INC --> HDDwriteProtect - -- 10 + "PlayStartUpSound", -- 1 + "LoadZXroms", -- 2 + "QS_SetUpHardware", -- 3 + "QS_SetUpZxRom", -- 4 + "TrDosA", -- 5 + "TrDosB", -- 6 + "TrDosC", -- 7 + "TrDosD", -- 8 + "SetTime", -- 9 DEFINES.INC --> NEW_FEATUREDEFINES.INC --> HDDwriteProtect + --"HddWrPr", -- 10 DEFINES.INC --> HDDwriteProtect -- 11 -- 12 -- 13 @@ -156,7 +156,7 @@ SettingsItemsTabs: _mSETitemParams Lang DW OnChangeAction.setLang ; действие при изменении - IF NEW_FEATURE : DB paramLine : ENDIF ; тип параметра (строка со значением или каталог) + IF NEW_FEATURE : DB paramLine : ENDIF ; тип параметра (строка со значением или каталог) DB columnNum,lineNum ; столбец, строка DB paramName ; Название параметра DW CMOS_CELL.BootUpParams.Mask.Language : DB %0000'0100 ; CMOS : MASK @@ -167,7 +167,7 @@ SettingsItemsTabs: IF UnusedSettingsFeatures ; !TODO _mSETitemParams MemTest DW OnChangeAction.nothing - IF NEW_FEATURE : DB paramLine : ENDIF + IF NEW_FEATURE : DB paramLine : ENDIF DB columnNum,lineNum DB paramName DW CMOS_CELL.BootUpParams.Mask.MemTest : DB %1000'0000 @@ -177,7 +177,7 @@ SettingsItemsTabs: _mSETitemParams SaveRAMdrvs DW OnChangeAction.nothing - IF NEW_FEATURE : DB paramLine : ENDIF + IF NEW_FEATURE : DB paramLine : ENDIF DB columnNum,lineNum DB paramName DW CMOS_CELL.BootUpParams.Mask.SaveRAMdisks : DB %0100'0000 @@ -187,7 +187,7 @@ SettingsItemsTabs: IF UnusedSettingsFeatures ; !TODO _mSETitemParams UpdBios DW OnChangeAction.nothing - IF NEW_FEATURE : DB paramLine : ENDIF + IF NEW_FEATURE : DB paramLine : ENDIF DB columnNum,lineNum DB paramName DW CMOS_CELL.BootUpParams.Mask.UpdBios : DB %0010'0000 @@ -197,7 +197,7 @@ SettingsItemsTabs: _mSETitemParams StartDelay DW OnChangeAction.nothing - IF NEW_FEATURE : DB paramLine : ENDIF + IF NEW_FEATURE : DB paramLine : ENDIF DB columnNum,lineNum DB paramName DW CMOS_CELL.BootUpParams.Mask.StartDelay : DB %0001'0000 @@ -208,7 +208,7 @@ SettingsItemsTabs: IF UnusedSettingsFeatures ; !TODO _mSETitemParams TypRate DW OnChangeAction.nothing - IF NEW_FEATURE : DB paramLine : ENDIF + IF NEW_FEATURE : DB paramLine : ENDIF DB columnNum,lineNum DB paramName DW CMOS_CELL.Typematic.Mask.Rate : DB %0000'0111 @@ -225,7 +225,7 @@ SettingsItemsTabs: IF UnusedSettingsFeatures ; !TODO _mSETitemParams TypDelay DW OnChangeAction.nothing - IF NEW_FEATURE : DB paramLine : ENDIF + IF NEW_FEATURE : DB paramLine : ENDIF DB columnNum,lineNum DB paramName DW CMOS_CELL.Typematic.Mask.Delay : DB %0110'0000 @@ -237,7 +237,7 @@ SettingsItemsTabs: _mSETitemParams RebootMsg DW OnChangeAction.nothing - IF NEW_FEATURE : DB paramLine : ENDIF + IF NEW_FEATURE : DB paramLine : ENDIF DB columnNum,lineNum DB paramName DW CMOS_CELL.Options.Mask.RebootMSG : DB %0000'0010 @@ -246,7 +246,7 @@ SettingsItemsTabs: _mSETitemParams SysDsk DW OnChangeAction.nothing - IF NEW_FEATURE : DB paramLine : ENDIF + IF NEW_FEATURE : DB paramLine : ENDIF DB columnNum,lineNum DB paramName DW CMOS_CELL.BootDrives.Mask.SysDisk : DB %0000'0111 @@ -261,7 +261,7 @@ SettingsItemsTabs: _mSETitemParams AltSysDsk DW OnChangeAction.nothing - IF NEW_FEATURE : DB paramLine : ENDIF + IF NEW_FEATURE : DB paramLine : ENDIF DB columnNum,lineNum DB paramName DW CMOS_CELL.BootDrives.Mask.AltSysDisk : DB %0111'0000 @@ -276,7 +276,7 @@ SettingsItemsTabs: _mSETitemParams FddFirst DW OnChangeAction.nothing - IF NEW_FEATURE : DB paramLine : ENDIF + IF NEW_FEATURE : DB paramLine : ENDIF DB columnNum,lineNum DB paramName DW CMOS_CELL.DrivesSetup_1.Mask.FirstFDD : DB %0000'0000 @@ -287,7 +287,7 @@ SettingsItemsTabs: _mSETitemParams FddSecond DW OnChangeAction.nothing - IF NEW_FEATURE : DB paramLine : ENDIF + IF NEW_FEATURE : DB paramLine : ENDIF DB columnNum,lineNum DB paramName DW CMOS_CELL.DrivesSetup_1.Mask.SecondFDD : DB %0000'0000 @@ -298,7 +298,7 @@ SettingsItemsTabs: _mSETitemParams PriIdeMA DW OnChangeAction.nothing - IF NEW_FEATURE : DB paramLine : ENDIF + IF NEW_FEATURE : DB paramLine : ENDIF DB columnNum,lineNum DB paramName DW CMOS_CELL.DrivesSetup_1.Mask.PriIDEmaster : DB %0011'0000 @@ -309,7 +309,7 @@ SettingsItemsTabs: _mSETitemParams PriIdeSl DW OnChangeAction.nothing - IF NEW_FEATURE : DB paramLine : ENDIF + IF NEW_FEATURE : DB paramLine : ENDIF DB columnNum,lineNum DB paramName DW CMOS_CELL.DrivesSetup_1.Mask.PriIDEslave : DB %1100'0000 @@ -320,7 +320,7 @@ SettingsItemsTabs: _mSETitemParams SecIdeMA DW OnChangeAction.nothing - IF NEW_FEATURE : DB paramLine : ENDIF + IF NEW_FEATURE : DB paramLine : ENDIF DB columnNum,lineNum DB paramName DW CMOS_CELL.DrivesSetup_2.Mask.SecIDEmaster : DB %0011'0000 @@ -331,7 +331,7 @@ SettingsItemsTabs: _mSETitemParams SecIdeSl DW OnChangeAction.nothing - IF NEW_FEATURE : DB paramLine : ENDIF + IF NEW_FEATURE : DB paramLine : ENDIF DB columnNum,lineNum DB paramName DW CMOS_CELL.DrivesSetup_2.Mask.SecIDEslave : DB %1100'0000 @@ -353,7 +353,7 @@ SettingsItemsTabs: _mSETitemParams ScreenY DW OnChangeAction.setXYpos - IF NEW_FEATURE : DB paramLine : ENDIF + IF NEW_FEATURE : DB paramLine : ENDIF DB columnNum,lineNum DB paramName DW CMOS_CELL.ScreenPosition.Mask.X : DB %1110'0000 @@ -375,7 +375,7 @@ SettingsItemsTabs: _mSETitemParams ScreenX DW OnChangeAction.setXYpos - IF NEW_FEATURE : DB paramLine : ENDIF + IF NEW_FEATURE : DB paramLine : ENDIF DB columnNum,lineNum DB paramName DW CMOS_CELL.ScreenPosition.Mask.Y : DB %0000'1110 @@ -397,7 +397,7 @@ SettingsItemsTabs: _mSETitemParams FrameInt DW OnChangeAction.setInt - IF NEW_FEATURE : DB paramLine : ENDIF + IF NEW_FEATURE : DB paramLine : ENDIF DB columnNum,lineNum DB paramName DW CMOS_CELL.ScreenSET.Mask.Int : DB %0011'0000 @@ -408,7 +408,7 @@ SettingsItemsTabs: _mSETitemParams VSync DW OnChangeAction.setVsinc - IF NEW_FEATURE : DB paramLine : ENDIF + IF NEW_FEATURE : DB paramLine : ENDIF DB columnNum,lineNum DB paramName DW CMOS_CELL.ScreenSET.Mask.Sinc : DB %1000'0000 @@ -418,7 +418,7 @@ SettingsItemsTabs: _mSETitemParams QuickStartROM DW OnChangeAction.nothing - IF NEW_FEATURE : DB paramLine : ENDIF + IF NEW_FEATURE : DB paramLine : ENDIF DB columnNum,lineNum DB paramName DW CMOS_CELL.BootUpParams.Mask.QuickStartROM : DB %0000'0001 @@ -456,7 +456,7 @@ SettingsItemsTabs: _mSETitemParams TrDosA DW OnChangeAction.nothing - IF NEW_FEATURE : DB paramLine : ENDIF + IF NEW_FEATURE : DB paramLine : ENDIF DB columnNum,lineNum DB paramName DW CMOS_CELL.TRDOSmount.Mask.A : DB %0000'0010 @@ -466,7 +466,7 @@ SettingsItemsTabs: _mSETitemParams TrDosB DW OnChangeAction.nothing - IF NEW_FEATURE : DB paramLine : ENDIF + IF NEW_FEATURE : DB paramLine : ENDIF DB columnNum,lineNum DB paramName DW CMOS_CELL.TRDOSmount.Mask.B : DB %0000'1000 @@ -476,7 +476,7 @@ SettingsItemsTabs: _mSETitemParams TrDosC DW OnChangeAction.nothing - IF NEW_FEATURE : DB paramLine : ENDIF + IF NEW_FEATURE : DB paramLine : ENDIF DB columnNum,lineNum DB paramName DW CMOS_CELL.TRDOSmount.Mask.C : DB %0010'0000 @@ -486,7 +486,7 @@ SettingsItemsTabs: _mSETitemParams TrDosD DW OnChangeAction.nothing - IF NEW_FEATURE : DB paramLine : ENDIF + IF NEW_FEATURE : DB paramLine : ENDIF DB columnNum,lineNum DB paramName DW CMOS_CELL.TRDOSmount.Mask.D : DB %1000'0000 @@ -496,7 +496,7 @@ SettingsItemsTabs: _mSETitemParams LoadZXroms DW OnChangeAction.nothing - IF NEW_FEATURE : DB paramLine : ENDIF + IF NEW_FEATURE : DB paramLine : ENDIF DB columnNum,lineNum DB paramName DW CMOS_CELL.Options.Mask.LoadZXroms : DB %0000'1000 @@ -504,6 +504,15 @@ SettingsItemsTabs: DB msgStrings.valLoadZXromsFlag DB msgStrings.valLoadZXromsCAD + _mSETitemParams PlayStartUpSound + DW OnChangeAction.nothing + IF NEW_FEATURE : DB paramLine : ENDIF + DB columnNum,lineNum + DB paramName + DW CMOS_CELL.BootUpParams.Mask.BootSound : DB %0000'0010 + DB msgStrings.valDisabled + DB msgStrings.valEnabled + IF NEW_FEATURE _mSETitemParams SetTime DW OnChangeAction.SetTime @@ -689,6 +698,7 @@ msgStrings: _mSetStr parTrDosB, tmp_Counter : DZ 'TR DOS B:> : ' _mSetStr parTrDosC, tmp_Counter : DZ 'TR DOS C:> : ' _mSetStr parTrDosD, tmp_Counter : DZ 'TR DOS D:> : ' + _mSetStr parPlayStartUpSound, tmp_Counter : DZ 'Startup sound : ' _mSetStr parLoadZXroms, tmp_Counter : DZ 'Load ZX ROMs : ' _mSetStr valLoadZXromsManually, tmp_Counter : DZ 'Manually ' _mSetStr valLoadZXromsFlag, tmp_Counter : DZ 'By ZX flag' @@ -704,12 +714,12 @@ msgStrings: _mSetStr valZXSpectrum128, tmp_Counter : DZ 'Spectrum 128' ; _mSetStr parQS_SetUpZxRom, tmp_Counter : DZ 'ZX Mode start in : ' - _mSetStr valQS_SetUpBasic128, tmp_Counter : DZ 'Basic 128 ' - _mSetStr valQS_SetUpBasic48p, tmp_Counter : DZ 'Basic 48+ ' - _mSetStr valQS_SetUpTrDos, tmp_Counter : DZ 'TR-DOS ' - _mSetStr valQS_SetUpExp, tmp_Counter : DZ 'Expansion ' - _mSetStr valQS_SetUpTrDos48, tmp_Counter : DZ 'TR-DOS 48 ' - _mSetStr valQS_SetUpBasic48, tmp_Counter : DZ 'Basic 48 ' + _mSetStr valQS_SetUpBasic128, tmp_Counter : DZ 'Basic 128' + _mSetStr valQS_SetUpBasic48p, tmp_Counter : DZ 'Basic 48+' + _mSetStr valQS_SetUpTrDos, tmp_Counter : DZ 'TR-DOS ' + _mSetStr valQS_SetUpExp, tmp_Counter : DZ 'Expansion' + _mSetStr valQS_SetUpTrDos48, tmp_Counter : DZ 'TR-DOS 48' + _mSetStr valQS_SetUpBasic48, tmp_Counter : DZ 'Basic 48 ' ; _mSetStrRus valLoadZXromsAuto, tmp_Counter : DZ 'On call ' IF NEW_FEATURE _mSetStr parSetTime, tmp_Counter : DZ 'Date and time setup : ' @@ -865,6 +875,7 @@ msgRusStrings: _mSetStrRus parTrDosB, tmp_Counter : DZ 'TR DOS B:> : ' _mSetStrRus parTrDosC, tmp_Counter : DZ 'TR DOS C:> : ' _mSetStrRus parTrDosD, tmp_Counter : DZ 'TR DOS D:> : ' + _mSetStrRus parPlayStartUpSound, tmp_Counter : DZ 'Стартовый звук : ' _mSetStrRus parLoadZXroms, tmp_Counter : DZ 'Загружать ZX ПЗУ : ' _mSetStrRus valLoadZXromsManually, tmp_Counter : DZ 'Вручную ' _mSetStrRus valLoadZXromsFlag, tmp_Counter : DZ 'По флагу ZX ' @@ -880,12 +891,12 @@ msgRusStrings: _mSetStrRus valZXSpectrum128, tmp_Counter : DZ 'Спектрум 128' ; _mSetStrRus parQS_SetUpZxRom, tmp_Counter : DZ 'Старт режима ZX в : ' - _mSetStrRus valQS_SetUpBasic128, tmp_Counter : DZ 'Basic 128 ' - _mSetStrRus valQS_SetUpBasic48p, tmp_Counter : DZ 'Basic 48+ ' - _mSetStrRus valQS_SetUpTrDos, tmp_Counter : DZ 'TR-DOS ' - _mSetStrRus valQS_SetUpExp, tmp_Counter : DZ 'Expansion ' - _mSetStrRus valQS_SetUpTrDos48, tmp_Counter : DZ 'TR-DOS 48 ' - _mSetStrRus valQS_SetUpBasic48, tmp_Counter : DZ 'Basic 48 ' + _mSetStrRus valQS_SetUpBasic128, tmp_Counter : DZ 'Basic 128' + _mSetStrRus valQS_SetUpBasic48p, tmp_Counter : DZ 'Basic 48+' + _mSetStrRus valQS_SetUpTrDos, tmp_Counter : DZ 'TR-DOS ' + _mSetStrRus valQS_SetUpExp, tmp_Counter : DZ 'Expansion' + _mSetStrRus valQS_SetUpTrDos48, tmp_Counter : DZ 'TR-DOS 48' + _mSetStrRus valQS_SetUpBasic48, tmp_Counter : DZ 'Basic 48 ' ; _mSetStrRus valLoadZXromsAuto, tmp_Counter : DZ 'При вызове ' IF NEW_FEATURE _mSetStrRus parSetTime, tmp_Counter : DZ 'Дата и время : ' diff --git a/src/bios/rom/SETUP/netherworld_8.afx b/src/bios/rom/SETUP/netherworld_8.afx new file mode 100755 index 0000000000000000000000000000000000000000..f673babd572677220dfb813e85295a63b66dafc3 GIT binary patch literal 29 dcmaFw#30(gUWlQ;zkj_Ln3MvOat!?!6acCm3wQtk literal 0 HcmV?d00001 diff --git a/src/bios/rom/SETUP/startup_sound.asm b/src/bios/rom/SETUP/startup_sound.asm index f4417a0..f4980ea 100644 --- a/src/bios/rom/SETUP/startup_sound.asm +++ b/src/bios/rom/SETUP/startup_sound.asm @@ -4,212 +4,161 @@ 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 + AND A + JR NZ,.no_init + ; + LD DE,7*256 + %0011'1011 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 + ; +.no_init: CP .volDataSize + JR C,.play + ;-- mus off +.mute: XOR A + LD E,A +.offLp: CALL .set_regs + CP 14 + JR NZ,.offLp + ; + LD A,7 + DEC E + CALL .set_regs + RET + ; +.play: ; + ;--- set tone LD HL,(.WORD_TONE) ;A=0 + LD A,4 ;REG C .playToneLp: LD B,high SP_SND.AY.CTRL OUT (C),A - LD B,high SP_SND.AY.DATA + LD B,high SP_SND.AY.DATA + 1 OUTI INC A CP 6 JR NZ,.playToneLp ; LD (.WORD_TONE),HL + ;--- set volume .playVol: LD HL,(.WORD_VOL) - LD A,8 + LD A,10 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 +.playVolLp: CALL .set_regs ; LD (.WORD_VOL),HL LD HL,.BYTE_POS INC (HL) RET + ; ; +.set_regs: LD B,high SP_SND.AY.CTRL + OUT (C),A + LD B,high SP_SND.AY.DATA + OUT (C),E + INC A + 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 +.toneData: DW #022, #044, #088, #110, #220, #440 + DW #880, #440, #220, #110, #088, #044 + DW #022, #044, #088, #110, #220, #440 + DW #880, #440, #220, #110, #088, #044 + DW #022 +.volData: DB #02, #04, #06, #08, #0A, #0C + DB #0E, #0D, #0C, #0B, #0A, #09 + DB #08, #07, #06, #05, #04, #03 + DB #02, #06, #08, #0A, #0C, #0E + DB #0F +.volDataSize EQU $ - .volData .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 +; 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 ; - ELSEIF SND_VARIANT == 1 - DEFINE SND_Const1 15 - DEFINE SND_Const2 7 + AND A + JR NZ,.no_init ; - 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 + LD DE,7*256 + %0011'1011 + LD B,high SP_SND.AY.CTRL OUT (C),D - LD B,#bf + LD B,high SP_SND.AY.DATA 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 +.no_init: CP .volDataSize + JR C,.play + ;-- mus off +.mute: XOR A + LD E,A +.offLp: CALL .set_regs + CP 14 + JR NZ,.offLp + ; + LD A,7 + DEC E + CALL .set_regs + RET + ; +.play: ; + ;--- set tone + LD HL,(.WORD_TONE) + ;A=0 + LD A,4 ;REG C +.playToneLp: LD B,high SP_SND.AY.CTRL OUT (C),A - LD B,#bf + LD B,high SP_SND.AY.DATA + 1 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 + JR NZ,.playToneLp + ; + LD (.WORD_TONE),HL + ;--- set volume +.playVol: LD HL,(.WORD_VOL) + LD A,10 LD E,(HL) INC HL -.volLp: LD B,#ff +.playVolLp: CALL .set_regs + ; + LD (.WORD_VOL),HL + LD HL,.BYTE_POS + INC (HL) + RET + ; ; +.set_regs: LD B,high SP_SND.AY.CTRL OUT (C),A - LD B,#bf + LD B,high SP_SND.AY.DATA 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 +;----------------------------------------------------------------------- +.BYTE_POS: DB 0 +.WORD_VOL: DW .volData +.WORD_TONE: DW .toneData +;----------------------------------------------------------------------- +.toneData: DW #022, #044, #088, #110, #220, #440 + DW #880, #440, #220, #110, #088, #044 + DW #022, #044, #088, #110, #220, #440 + DW #880, #440, #220, #110, #088, #044 + DW #022 +.volData: DB #02, #04, #06, #08, #0A, #0C + DB #0E, #0D, #0C, #0B, #0A, #09 + DB #08, #07, #06, #05, #04, #03 + DB #02, #06, #08, #0A, #0C, #0E + DB #0F +.volDataSize EQU $ - .volData - -.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 +.codeEnd: DISPLAY "StartUp Sound size: ",/A,.codeEnd - STARTUP_SOUND */ \ No newline at end of file