StartUp sound, fixes with atapi detects, new in settings
This commit is contained in:
		
							parent
							
								
									a3aef23cd6
								
							
						
					
					
						commit
						5069c5941e
					
				| @ -1 +1 @@ | ||||
| Subproject commit 83c2b69b4af0a36475fa42378000fb6e57c59021 | ||||
| Subproject commit 63faf9f0823649cfb52e9fcaad430170a05b31a7 | ||||
										
											Binary file not shown.
										
									
								
							| @ -624,18 +624,20 @@ EXEC_PACKET_COMMAND: | ||||
| 		POP	BC | ||||
| 		OUT	(C),B | ||||
| 		; pause | ||||
| 		LD	B,0 | ||||
| 		DJNZ	$ | ||||
| 		; LD	B,0 | ||||
| 		; DJNZ	$ | ||||
| 		; DJNZ	$ | ||||
| 		; | ||||
| 		EX	AF,AF' | ||||
| 		 LD	XH,A	; áâà ¨æ  ¤«ï R/W_LONG | ||||
| 		 LD	XL,0 | ||||
| 		EX	AF,AF' | ||||
| 		;A=0 | ||||
| 		LD	XL,A | ||||
| 		EX	DE,HL | ||||
| 		; | ||||
| .AP_LOOP:	;LD	B,128 | ||||
| 		;DJNZ	$ | ||||
| .AP_LOOP:	;CALL	ATAPI_WAITPRT.wait_NZ | ||||
| 		LD	B,128 | ||||
| 		DJNZ	$ | ||||
| 		CALL	ATAPI_CHECK_DRV | ||||
| 		JP	C,.error;_APLOOP | ||||
| 		RET	Z | ||||
| @ -680,12 +682,19 @@ EXEC_PACKET_COMMAND: | ||||
| 		JR	NZ,.write_loop | ||||
| 		JR	.return_rw | ||||
| 	;	; | ||||
| .END_BUFFER:	CALL	ATAPI_CHECK_DRV | ||||
| .END_BUFFER:	;CALL	ATAPI_WAITPRT.wait_NZ | ||||
| 		LD	B,128 | ||||
| 		DJNZ	$ | ||||
| 		CALL	ATAPI_CHECK_DRV | ||||
| 		JP	C,.error | ||||
| 		JR	NZ,ATAPI_IdlePasses.Enter | ||||
| 		RET | ||||
| ;;;;;;;;;;;;;;;;; | ||||
| 		; | ||||
| ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | ||||
| ATAPI_IdlePasses: | ||||
| 		;CALL	ATAPI_WAITPRT.wait_NZ | ||||
| 		LD	B,128 | ||||
| 		DJNZ	$ | ||||
| 		CALL	ATAPI_CHECK_DRV | ||||
| 		JP	C,EXEC_PACKET_COMMAND.error | ||||
| 		JP	Z,EXEC_PACKET_COMMAND.error_fail | ||||
| @ -711,9 +720,7 @@ ATAPI_IdlePasses: | ||||
| 		OR	E | ||||
| 		JR	NZ,.write_loop | ||||
| 		JR	ATAPI_IdlePasses | ||||
| ; | ||||
| 
 | ||||
| 
 | ||||
| 		; | ||||
| ; ¢ë室: | ||||
| ;	CF,ZF	ATAPI_WAITPRT Error ¨«¨ Check Condition á® ¢¥è¥© ®¡à ¡®âª®© | ||||
| ;	ZF	No errors, no data request | ||||
| @ -838,13 +845,14 @@ ATAPI_GET_ERROR_REG: | ||||
| ; !!! ¥ª®â®àë¥ äãªæ¨¨  ¤¥îâáï, çâ®   ¢ë室¥ ¢á¥£¤  ZF | ||||
| ; ¥ ¤®«¦  âண âì ॣ. C | ||||
| ATAPI_WAITPRT:	LD	DE,256*IDE.CtrlByte.Busy + 0 | ||||
| .Custom:	LD	B,6		; 3 = ®¡é ï § ¤¥à¦ª  ®ª®«® ᥪã¤ë | ||||
| .Custom:	LD	B,9		; 3 = ®¡é ï § ¤¥à¦ª  ®ª®«® ᥪã¤ë | ||||
| 		LD	HL,#0000 | ||||
| 	; 4ÿ128ÿ768 | ||||
| .LOOP:		LD	A,high IDE.Read.Status | ||||
| 		IN	A,(low IDE.Read.Status) | ||||
| 		CP	#FF | ||||
| 		JR	Z,.error | ||||
| 		SCF | ||||
| 		RET	Z | ||||
| 		; | ||||
| 		AND	D | ||||
| 		CP	E | ||||
| @ -871,10 +879,96 @@ ATAPI_WAITPRT:	LD	DE,256*IDE.CtrlByte.Busy + 0 | ||||
| 		; RET	Z | ||||
| 		; | ||||
| 		LD	A,BIOS.Error.Busy | ||||
| 		SCF | ||||
| 		RET | ||||
| 		; | ||||
| .error:		SCF | ||||
| 		RET | ||||
| ; .wait_NZ:	LD	B,2		; 50 - § ¤¥à¦ª  ®¯à¥¤¥«ñ ï â¥áâ ¬¨   IOMEGA ZIP Drive | ||||
| ; .NZ_loop:	LD	A,high IDE.Read.Status | ||||
| ; 		IN	A,(low IDE.Read.Status) | ||||
| ; 		LD	C,A | ||||
| ; 		AND	A | ||||
| ; 		CALL	NZ,PutHexNumb | ||||
| ; 		;INC	A | ||||
| ; 		;RET	NZ | ||||
| ; 		;AND	IDE.CtrlByte.Busy + IDE.CtrlByte.DataRequest + IDE.CtrlByte.CheckCondition | ||||
| ; 		;INC	A | ||||
| ; 		;AND	A | ||||
| ; 		;RET	NZ | ||||
| ; 		DJNZ	.NZ_loop | ||||
| ; 		RET | ||||
| ;----------------------------------------------------------------------; | ||||
| 
 | ||||
| 
 | ||||
| ;----------------------------------------------------------------------; | ||||
| ;<3B>à®æ¥¤ãà  ¯à¥®¡à §®¢ ¨ï 8¡¨â®¢ëå ç¨á¥« ¢ è¥áâ ¤æ. ⥪áâ | ||||
| ;<3B>  ¢å®¤: | ||||
| ;	 HL -  ¤à¥á ¡ãä¥à  | ||||
| ;	  € - ¡ ©â | ||||
| ;<3B>  ¢ë室: | ||||
| ;	  DE - ¤¢  ¡ ©â  è¥áâ ¤æ â¥à¨ç®£® ⥪áâ  | ||||
| ; PutHexNumb:	PUSH	IX | ||||
| ; 		PUSH	IY | ||||
| ; 		PUSH	AF | ||||
| ; 		EX	AF,AF' | ||||
| ; 		 PUSH	AF | ||||
| ; 		EX	AF,AF' | ||||
| ; 		PUSH	DE | ||||
| ; 		PUSH	HL | ||||
| ; 		PUSH	BC | ||||
| ; 		LD	A,C | ||||
| ; 		EXX | ||||
| ; 		PUSH	DE | ||||
| ; 		PUSH	HL | ||||
| ; 		PUSH	BC | ||||
| ; 		; | ||||
| ; 		PUSH	AF | ||||
| ; 		RRCA  | ||||
| ; 		RRCA  | ||||
| ; 		RRCA  | ||||
| ; 		RRCA  | ||||
| ; 		AND	#0F | ||||
| ; 		ADD	A,#90 | ||||
| ; 		DAA  | ||||
| ; 		ADC	A,#40 | ||||
| ; 		DAA  | ||||
| ; 		LD	E,A | ||||
| ; 		POP	AF | ||||
| ; 		AND	#0F | ||||
| ; 		ADD	A,#90 | ||||
| ; 		DAA  | ||||
| ; 		ADC	A,#40 | ||||
| ; 		DAA  | ||||
| ; 		LD	D,A | ||||
| ; 		; | ||||
| ; 		LD	HL," " | ||||
| ; 		PUSH	HL | ||||
| ; 		PUSH	DE | ||||
| ; 		LD	L,0 | ||||
| ; 		ADD	HL,SP | ||||
| ; 		; | ||||
| ; 		SCF | ||||
| ; 		LD	B,COLORS.CGA.INK.LGRAY + COLORS.CGA.PAPER.BLACK | ||||
| ; 		EX	AF,AF' | ||||
| ; 		AND	A | ||||
| ; 		LD	A,B | ||||
| ; 		CALL	LP_PR_LINE_DIR.START | ||||
| ; 		POP	HL | ||||
| ; 		POP	HL | ||||
| ; 		; | ||||
| ; 		POP	BC | ||||
| ; 		POP	HL | ||||
| ; 		POP	DE | ||||
| ; 		EXX | ||||
| ; 		POP	BC	 | ||||
| ; 		POP	HL | ||||
| ; 		POP	DE | ||||
| ; 		POP	AF | ||||
| ; 		EX	AF,AF' | ||||
| ; 		POP	AF | ||||
| ; 		POP	IY | ||||
| ; 		POP	IX | ||||
| ; 		RET | ||||
| 		; | ||||
| ;----------------------------------------------------------------------; | ||||
| 
 | ||||
| 
 | ||||
|  | ||||
| @ -476,7 +476,7 @@ PARSE_IdentifyDevice: | ||||
| 		; | ||||
| 		;   ¢á直© á«ãç © | ||||
| 		 LD	(IY+IDE.HDD_INIT_TABLE.MediaParameters),%0000'0001 | ||||
| 		 LD	B,100	; áçñâ稪 ¯®¯ë⮪ (1 ¯®¯ë⪠ - 1 HALT) | ||||
| 		 LD	B,200	; áçñâ稪 ¯®¯ë⮪ (1 ¯®¯ë⪠ - 1 HALT) | ||||
| .get_error_loop: PUSH	BC | ||||
| 		 ;LD	HL,ATAPI_CMD_PACKET.TEST_UNIT_READY | ||||
| 		 ;CALL	EXEC_PACKET_COMMAND.start | ||||
| @ -486,10 +486,10 @@ PARSE_IdentifyDevice: | ||||
| 		 ; | ||||
| 		 CP	BIOS.Error.ATAPI.UnitAttention | ||||
| 		 JR	Z,PARSE_IdentifyDevice.END	;!TEST ;!FIXIT ZIP bug | ||||
| 		 ;JR	Z,.TEST_SET | ||||
| 
 | ||||
| 		 ; | ||||
| 		 CP	BIOS.Error.ATAPI.NotReady | ||||
| 		 HALT | ||||
| 		 JR	Z,.get_error_loop | ||||
| 		 DJNZ	.get_error_loop | ||||
| 		; | ||||
| 		; [ ] sector size ATAPI | ||||
|  | ||||
| @ -865,9 +865,10 @@ setInt: ld a,CMOS_CELL.ScreenSET | ||||
| ; | ||||
| ;-----------------------------------------------------------------------; | ||||
| ;!FIXIT ¯à¨¡à âìáï âãâ | ||||
| MEMTEST	        EQU     #80 | ||||
| SAVERAM	        EQU     #40 | ||||
| EXTBIOS	        EQU     #20 | ||||
| SETBOOTSOUND	EQU	high CMOS_CELL.BootUpParams.Mask.BootSound | ||||
| MEMTEST	        EQU	high CMOS_CELL.BootUpParams.Mask.MemTest | ||||
| SAVERAM	        EQU	high CMOS_CELL.BootUpParams.Mask.SaveRAMdisks | ||||
| EXTBIOS	        EQU	high CMOS_CELL.BootUpParams.Mask.UpdBios | ||||
| 
 | ||||
| SDELAY2         EQU     #10 | ||||
| SDELAY1         EQU     #08 | ||||
| @ -1009,9 +1010,9 @@ STYLES: | ||||
| 	DB	COLORS.CGA.PAPER.LGRAY   + COLORS.CGA.INK.RED | ||||
| 	DB	COLORS.CGA.PAPER.BLACK   + COLORS.CGA.INK.RED | ||||
| 
 | ||||
| DEFVAL: DB	SAVERAM + EXTBIOS + SDELAY1				;#0E - OPTIONS | ||||
| DEFVAL: DB	SAVERAM + SETBOOTSOUND + SDELAY1			;#0E - OPTIONS | ||||
| 	DB	TDL250 + TRATE30					;#0F - KEYBOARD | ||||
| 	DB	SDIDE1 + SDFDD1						;#10 - SYSTEM DISKS | ||||
| 	DB	SDIDE1 + ASDFDD1					;#10 - SYSTEM DISKS | ||||
| 	DB	FD1720 + FD2720+HD1AUTO+HD2AUTO				;#11 - FDD & Primary HDD's | ||||
| 	DB	0							;#12 - CYLINDERS LOW MASTER | ||||
| 	DB	0							;#13 - CYLINDERS HIGH MASTER | ||||
| @ -1036,9 +1037,9 @@ DEFVAL: DB	SAVERAM + EXTBIOS + SDELAY1				;#0E - OPTIONS | ||||
| CMOSARE: | ||||
| 	DS	14 | ||||
| 	; | ||||
| 	DB	SAVERAM+EXTBIOS						;#0E - OPTIONS | ||||
| 	DB	SAVERAM + SETBOOTSOUND + SDELAY1			;#0E - OPTIONS | ||||
| 	DB	TDL250+TRATE30						;#0F - KEYBOARD | ||||
| 	DB	SDIDE1+ASDFDD2						;#10 - SYSTEM DISKS | ||||
| 	DB	SDIDE1 + ASDFDD1					;#10 - SYSTEM DISKS | ||||
| 	DB	FD1720+FD2720+HD1AUTO+HD2AUTO				;#11 - FDD & HDD | ||||
| 	DB	0							;#12 - CYLINDERS LOW MASTER | ||||
| 	DB	0							;#13 - CYLINDERS HIGH MASTER | ||||
| @ -1086,6 +1087,6 @@ CMOSARE: | ||||
| 	DB	%0000'0000						;#3D | ||||
| 	DB	%0000'0000						;#3E | ||||
| 	DB	%0000'0000						;#3F - CHECKSUM | ||||
|  BLOCK   #100 - low $                                                   ; ¤®¡¨¢ª  CMOSARE ¤® à §¬¥à  ¢ 256 ¡ ©â®¢ | ||||
|  BLOCK   #100 - low $							; ¤®¡¨¢ª  CMOSARE ¤® à §¬¥à  ¢ 256 ¡ ©â®¢ | ||||
| ;DONT MOVE !!! ADDRESS | ||||
| ; | ||||
| @ -296,6 +296,10 @@ LOGOTYPE:	CALL	SHOW_LOGO | ||||
| 		 RLA | ||||
| 		 JR	NC,.noSound | ||||
| 		 ; | ||||
| 		 LD	BC,CMOS_CELL.BootUpParams.Mask.BootSound | ||||
| 		 CALL	GET_CMOS_VALUE | ||||
| 		 OR	A | ||||
| 		 JR	Z,.noSound | ||||
| 		 LD	A,#37		; opcode SCF, play sound on | ||||
| 		 LD	(INT_HANDLER.sndSwitch),A | ||||
| .noSound:	 ; | ||||
| @ -336,7 +340,8 @@ LOGOTYPE:	CALL	SHOW_LOGO | ||||
| 		; | ||||
| 		IF	STARTUP_SND | ||||
| 		 LD	A,#3F		; opcode CCF, play sound off | ||||
| 		 LD	(INT_HANDLER.sndSwitch),A		 | ||||
| 		 LD	(INT_HANDLER.sndSwitch),A | ||||
| 		 CALL	STARTUP_SOUND.mute | ||||
| 		ENDIF | ||||
| 		; | ||||
| 		LD	DE,0 | ||||
|  | ||||
							
								
								
									
										403
									
								
								src/bios/rom/SETUP/ayfxplay.asm
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										403
									
								
								src/bios/rom/SETUP/ayfxplay.asm
									
									
									
									
									
										Executable file
									
								
							| @ -0,0 +1,403 @@ | ||||
| ; -Minimal ayFX player (Improved)  v2.05  25/01/21--------------; | ||||
| ; https://github.com/Threetwosevensixseven/ayfxedit-improved    ; | ||||
| ; Zeus format (http://www.desdes.com/products/oldfiles)         ; | ||||
| ;                                                               ; | ||||
| ; Forked from  v0.15  06/05/06                                  ; | ||||
| ; https://shiru.untergrund.net/software.shtml                   ; | ||||
| ;                                                               ; | ||||
| ; The simplest effects player. Plays effects on one AY,         ; | ||||
| ; without music in the background.                              ; | ||||
| ; Priority of the choice of channels: if there are free         ; | ||||
| ; channels, one of them is selected if free.                    ; | ||||
| ; If there are are no free channels, the longest-sounding       ; | ||||
| ; one is selected.                                              ; | ||||
| ; Procedure plays registers AF, BC, DE, HL, IX.                 ; | ||||
| ;                                                               ; | ||||
| ; Initialization:                                               ; | ||||
| ;   ld hl, the address of the effects bank                      ; | ||||
| ;   call AFXInit                                                ; | ||||
| ;                                                               ; | ||||
| ; Start the effect:                                             ; | ||||
| ;   ld a, the number of the effect (0..255)                     ; | ||||
| ;   call AFXPlay                                                ; | ||||
| ;                                                               ; | ||||
| ; In the interrupt handler:                                     ; | ||||
| ;   call AFXFrame                                               ; | ||||
| ;                                                               ; | ||||
| ; Start the effect on a specified channel:                      ; | ||||
| ;   ld a, the number of the effect (0..255)                     ; | ||||
| ;   ld e, the number of the channel (A=0, B=1, C=2)             ; | ||||
| ;   call AFXPlayChannel                                         ; | ||||
| ;                                                               ; | ||||
| ; Start the effect with sustain loop enabled:                   ; | ||||
| ;   ld a, the number of the effect (0..255)                     ; | ||||
| ;   ld e, the number of the channel (A=0, B=1, C=2)             ; | ||||
| ;   ld bc, the bank address + the release address offset        ; | ||||
| ;   call AFXPlayChannel                                         ; | ||||
| ;                                                               ; | ||||
| ; Notify AFX.Frame that the should be should be looped back to  ; | ||||
| ; the sustain point once the release point has been reached:    ; | ||||
| ;   ld a, the number of the effect (0..255)                     ; | ||||
| ;   ld e, the number of the channel (A=0, B=1, C=2)             ; | ||||
| ;   ld bc, the bank address + the sustain address offset        ; | ||||
| ;   call AFXSustain                                             ; | ||||
| ;                                                               ; | ||||
| ; Change log: | ||||
| ;   v2.05  25/01/21  Bug fix: AFXInit was overwriting itself    ; | ||||
| ;                    the first time it was called, so it        ; | ||||
| ;                    couldn't ever be called a second time.     ;       												; | ||||
| ;   v2.04  22/10/17  Bug fix: EffectTime was not fully          ; | ||||
| ;                    initialised.                               ; | ||||
| ;   v2.03  22/10/17  Bug fix: disabled loop markers should have ; | ||||
| ;                    MSB $00, as $FF could be a valid address.  ; | ||||
| ;                    Backported Zeus player to Pasmo format.    ; | ||||
| ;   v2.02  21/10/17  Added the ability to loop a sound while    ; | ||||
| ;                    receiving sustain messages.                ; | ||||
| ;   v2.01  21/10/17  Added the ability to play a sound on a     ; | ||||
| ;                    specific channel.                          ; | ||||
| ;   v2.00  27/08/17  Converted Z80 player to Zeus format.       ; | ||||
| ; --------------------------------------------------------------; | ||||
| 
 | ||||
| ; Channel descriptors, 4 bytes per channel: | ||||
| ; +0 (2) current address (channel is free if high byte=$00) | ||||
| ; +2 (2) sound effect time | ||||
| ; +2 (2) start address of sustain loop (disabled if high byte=$00) | ||||
| ; +2 (2) end address of sustain loop (disabled if high byte=$00) | ||||
| afxChDescCount  equ 3 | ||||
| afxChDesc       DS afxChDescCount*8 | ||||
| AFXSMC    	    equ 0 | ||||
| 
 | ||||
| ; --------------------------------------------------------------; | ||||
| ; Initialize the effects player.                                ; | ||||
| ; Turns off all channels, sets variables.                       ; | ||||
| ;                                                               ; | ||||
| ; Input: HL = bank address with effects                         ; | ||||
| ; --------------------------------------------------------------; | ||||
| 
 | ||||
| AFXInit: | ||||
|                         inc hl | ||||
|                         ld (afxBnkAdr1+1), hl           ; Save the address of the table of offsets | ||||
|                         ld (afxBnkAdr2+1), hl           ; Save the address of the table of offsets | ||||
|                         ld hl, afxChDesc                ; Mark all channels as empty | ||||
|                         ld de, $00ff | ||||
|                         ld bc, afxChDescCount*256+$fd | ||||
| afxInit0: | ||||
|                         ld (hl), d | ||||
|                         inc hl | ||||
|                         ld (hl), d | ||||
|                         inc hl | ||||
|                         ld (hl), e | ||||
|                         inc hl | ||||
|                         ld (hl), e | ||||
|                         inc hl | ||||
|                         ld (hl), d | ||||
|                         inc hl | ||||
|                         ld (hl), d | ||||
|                         inc hl | ||||
|                         ld (hl), d | ||||
|                         inc hl | ||||
|                         ld (hl), d | ||||
|                         inc hl | ||||
|                         djnz afxInit0 | ||||
| 
 | ||||
|                         ld hl, $ffbf                    ; Initialize  AY | ||||
|                         ld e, $15 | ||||
| afxInit1: | ||||
|                         dec e | ||||
|                         ld b, h | ||||
|                         out (c), e | ||||
|                         ld b,l | ||||
|                         out (c), d | ||||
|                         jr nz, afxInit1 | ||||
| 
 | ||||
|                         ld (afxNseMix+1), de            ; Reset the player variables | ||||
| 
 | ||||
|                         ret | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| ; --------------------------------------------------------------; | ||||
| ; Play the current frame.                                       ; | ||||
| ;                                                               ; | ||||
| ; No parameters.                                                ; | ||||
| ; --------------------------------------------------------------; | ||||
| AFXFrame: | ||||
|                         ld bc, $03fd | ||||
|                         ld ix, afxChDesc | ||||
| afxFrame0: | ||||
|                         push bc | ||||
| 
 | ||||
|                         ld a,11 | ||||
|                         ld h,(ix+1)                     ; Compare high-order byte of address to <11 | ||||
|                         cp h | ||||
|                         jr nc, afxFrame7                ; The channel does not play, we skip | ||||
|                         ld l, (ix+0) | ||||
|                         ld e, (hl)                      ; We take the value of the information byte | ||||
|                         inc hl | ||||
| 
 | ||||
|                         sub b                           ; Select the volume register: | ||||
|                         ld d, b                         ; (11-3=8, 11-2=9, 11-1=10) | ||||
| 
 | ||||
|                         ld b, $ff                       ; Output the volume value | ||||
|                         out (c), a | ||||
|                         ld b, $bf | ||||
|                         ld a, e | ||||
|                         and $0f | ||||
|                         out (c), a | ||||
| 
 | ||||
|                         bit 5, e                        ; Will the tone change? | ||||
|                         jr z, afxFrame1                 ; Tone does not change | ||||
| 
 | ||||
|                         ld a, 3                         ; Select the tone registers: | ||||
|                         sub d                           ; 3-3=0, 3-2=1, 3-1=2 | ||||
|                         add a, a                        ; 0*2=0, 1*2=2, 2*2=4 | ||||
| 
 | ||||
|                         ld b, $ff                       ; Output the tone values | ||||
|                         out (c), a | ||||
|                         ld b, $bf | ||||
|                         ld d, (hl) | ||||
|                         inc hl | ||||
|                         out (c), d | ||||
|                         ld b, $ff | ||||
|                         inc a | ||||
|                         out (c), a | ||||
|                         ld b, $bf | ||||
|                         ld d, (hl) | ||||
|                         inc hl | ||||
|                         out (c), d | ||||
| 
 | ||||
| afxFrame1: | ||||
|                         bit 6, e                        ; Will the noise change? | ||||
|                         jr z, afxFrame3                 ; Noise does not change | ||||
| 
 | ||||
|                         ld a, (hl)                      ; Read the meaning of noise | ||||
|                         sub $20 | ||||
|                         jr c, afxFrame2                 ; Less than $20, play on | ||||
|                         ld h, a                         ; Otherwise the end of the effect | ||||
|                         ld c,$ff | ||||
|                         ld b, c                         ; In BC we record the most time | ||||
|                         jr afxFrame6 | ||||
| 
 | ||||
| afxFrame2: | ||||
|                         inc hl | ||||
|                         ld (afxNseMix+1), a             ; Keep the noise value | ||||
| 
 | ||||
| afxFrame3: | ||||
|                         pop bc                          ; Restore the value of the cycle in B | ||||
|                         push bc | ||||
|                         inc b                           ; Number of shifts for flags TN | ||||
| 
 | ||||
|                         ld a, %01101111                 ; Mask for flags TN | ||||
| afxFrame4: | ||||
|                         rrc e                           ; Shift flags and mask | ||||
|                         rrca | ||||
|                         djnz afxFrame4 | ||||
|                         ld d, a | ||||
| 
 | ||||
|                         ld bc, afxNseMix+2              ; Store the values of the flags | ||||
|                         ld a, (bc) | ||||
|                         xor e | ||||
|                         and d | ||||
|                         xor e                           ; E is masked with D | ||||
|                         ld (bc), a | ||||
| 
 | ||||
| afxFrame5: | ||||
|                         ld c, (ix+2)                    ; Increase the time counter | ||||
|                         ld b, (ix+3) | ||||
|                         inc bc | ||||
| 
 | ||||
| afxFrame6: | ||||
|                         ld (ix+2), c | ||||
|                         ld (ix+3), b | ||||
| 
 | ||||
|                         ld (ix+0), l                    ; Save the changed address | ||||
|                         ld (ix+1), h | ||||
| 
 | ||||
|                         call CheckRelease | ||||
| afxFrame7: | ||||
|                         ld bc, 8                        ; Go to the next channel | ||||
|                         add ix, bc | ||||
|                         pop bc | ||||
|                         djnz afxFrame0 | ||||
| 
 | ||||
|                         ld hl, $ffbf                    ; Output the value of noise and mixer | ||||
| afxNseMix: | ||||
|                         ld de, 0                        ; +1(E)=noise, +2(D)=mixer | ||||
|                         ld a, 6 | ||||
|                         ld b, h | ||||
|                         out (c), a | ||||
|                         ld b, l | ||||
|                         out (c), e | ||||
|                         inc a | ||||
|                         ld b, h | ||||
|                         out (c), a | ||||
|                         ld b, l | ||||
|                         out (c), d | ||||
|                         ret | ||||
| CheckRelease: | ||||
|                         ld a, (ix+6)                    ; get release LSB | ||||
|                         cp l | ||||
|                         ret nz                          ; Carry on if no MLB match | ||||
|                         ld a, (ix+7)                    ; get release MSB | ||||
|                         or a | ||||
|                         ret z                           ; Carry on if release disabled | ||||
|                         cp h | ||||
|                         ret nz                          ; Carry on if no MSB match | ||||
|                         push bc | ||||
|                         ld a, (ix+4) | ||||
|                         or a | ||||
|                         jp z, NoLoop | ||||
|                         ld a, (ix+5)                    ; Set CurrentAddrCh[N] back | ||||
|                         ld (ix+1), a                    ; to  SustainAddrCh[N] LSB | ||||
|                         ld a, (ix+4)                    ; | ||||
|                         ld (ix+0), a                    ; and                  MSB | ||||
|                         xor a | ||||
|                         ld (ix+4), a                    ; then toggle off the sustain | ||||
|                         ld (ix+5), a                    ; to require it to be resent | ||||
| NoLoop: | ||||
|                         pop bc | ||||
|                         ret | ||||
| 
 | ||||
| ; --------------------------------------------------------------; | ||||
| ; Launch the effect on a specific channel. Any sound currently  ; | ||||
| ; playing on that channel is terminated next frame.             ; | ||||
| ;                                                               ; | ||||
| ; Input: A = Effect number 0..255                               ; | ||||
| ;        E = Channel (A=0, B=1, C=2)                            ; | ||||
| ; --------------------------------------------------------------; | ||||
| AFXPlayChannel: | ||||
|                         ld bc, $0000 | ||||
| 
 | ||||
| ; --------------------------------------------------------------; | ||||
| ; Launch the effect on a specific channel. Any sound currently  ; | ||||
| ; playing on that channel is terminated next frame.             ; | ||||
| ; During playback, when reaching ReleaseAddrCh[N], if an        ; | ||||
| ; AFXSustain call has been received since this AFXPlayLooped    ; | ||||
| ; returned, the playback time frame will loop back to           ; | ||||
| ; SustainAddrCh[N].                                             ; | ||||
| ;                                                               ; | ||||
| ; Input: A = Effect number 0..255                               ; | ||||
| ;        E = Channel (A=0, B=1, C=2)                            ; | ||||
| ;       BC = ReleaseAddrCh[N]                                   ; | ||||
| ; --------------------------------------------------------------; | ||||
| AFXPlayLooped: | ||||
|                         push af | ||||
|                         ld a, c | ||||
|                         ld (ReleaseLoSMC), a            ; SMC> | ||||
|                         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               ; <SMC Release LSB | ||||
| ReleaseHiSMC equ $+3 | ||||
| 						ld (ix+4), AFXSMC               ; <SMC Release MSB | ||||
|                         xor a | ||||
|                         ld (ix+1), a                    ; Reset sustain LSB | ||||
|                         ld (ix+2), a                    ; Reset sustain MSB | ||||
|                         ret | ||||
| 
 | ||||
| ; --------------------------------------------------------------; | ||||
| ; Notify AFX.Frame that the sound in channel E should be looped ; | ||||
| ; back to SustainAddrCh[N] once ReleaseAddrCh[N] has been       ; | ||||
| ; reached,provided playback was started with AFX.PlayLooped     ; | ||||
| ;                                                               ; | ||||
| ; Input: E = Channel (A=0, B=1, C=2)                            ; | ||||
| ;       BC = SustainAddrCh[N]                                   ; | ||||
| ; --------------------------------------------------------------; | ||||
| AFXSustain: | ||||
|                         ld a, e | ||||
|                         add a, a | ||||
|                         add a, a | ||||
|                         add a, a | ||||
|                         ld e, 4 | ||||
|                         add a, e | ||||
|                         ld hl, afxChDesc | ||||
|                         add a, l						; Add(hl, a) } | ||||
|                         ld l, a							;			 } | ||||
|                         adc a, h						;			 } | ||||
|                         sub l							;			 } | ||||
|                         ld h, a							;			 }	 | ||||
|                         ld (hl), c | ||||
|                         inc hl | ||||
|                         ld (hl), b | ||||
|                         ret | ||||
| @ -50,16 +50,16 @@ | ||||
| 			"TypDelay",	 -- 	DEFINES.INC --> 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						; <20> §¢ ¨¥ ¯ à ¬¥âà  | ||||
| 	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 <EFBFBD>‡“    : ' | ||||
|  _mSetStrRus valLoadZXromsManually, tmp_Counter	:	DZ	'‚àãçãî     ' | ||||
|  _mSetStrRus valLoadZXromsFlag, tmp_Counter	:	DZ	'<EFBFBD>® ä« £ã 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	'<27>ਠ¢ë§®¢¥  ' | ||||
|  IF NEW_FEATURE | ||||
|  _mSetStrRus parSetTime, tmp_Counter		:	DZ	'„ â  ¨ ¢à¥¬ï        : ' | ||||
|  | ||||
							
								
								
									
										
											BIN
										
									
								
								src/bios/rom/SETUP/netherworld_8.afx
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								src/bios/rom/SETUP/netherworld_8.afx
									
									
									
									
									
										Executable file
									
								
							
										
											Binary file not shown.
										
									
								
							| @ -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 | ||||
| */ | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 Tolik
						Tolik