This is the routine that plays a SFX; This routine is used for the in game sound fx (like shooting) <<<<<<<<<<<< In SCC-BLAFFER I use ONLY channel 3 for PSG (drums) channel 1 and 2 are unused. What do I need to change in the routine below to let it leave channel 3 untouched ? ;+----- Set all PSG regs.-----+ ;SEE (Sound Effects Editor) SETPSG: LD IX,PSGREG LD E,0 ;Start reg.0 INC HL ;[skip event byte] ; LD B,3 ;First 6 reg. [sound frequency] STPS.0: PUSH BC LD C,(HL) ;reg. $00, $02 or $04 -> Fine tune : A,B & C channels INC HL LD B,(HL) ;reg. $01, $03 or $05 -> Coarse tune : A,B & C channels BIT 7,(HL) ;check and handle Tuning CALL NZ,TUNWUP BIT 6,(HL) CALL NZ,TUNWDW INC HL LD A,C CALL WRTPSG LD A,B AND $0F CALL WRTPSG POP BC DJNZ STPS.0 LD A,(HL) ;reg. $06 [Rustle frequency] -> Noise channel ? INC HL BIT 7,A CALL NZ,TUN_UP BIT 6,A CALL NZ,TUN_DW AND $1F CALL WRTPSG LD A,(HL) ;reg. $07 [set channel ON/OFF] ->Mixer :/EN noise /EN A /EN B /EN C AND $3F OR $80 ;set bit 7 is necessary to write the PSG!! ---> pour SSG/YM2610 : idem ??? pas sur ! INC HL CALL WRTPSG LD B,3 ;reg. $08-$0A [Volume Channels A,B & C] STPS.1: PUSH BC LD A,(HL) INC HL BIT 5,A JP NZ,STPS.2 ;Volume pattern is set. LD C,A AND $0F BIT 7,C CALL NZ,TUN_UP BIT 6,C CALL NZ,VOL_DW CALL FIXVOL ; Volume est paramétrable !! STPS.2: AND $1F CALL WRTPSG POP BC DJNZ STPS.1 LD B,3 ; reg $0B-$0D [volume effect] ->Volume envelope period fine tune/coarse tune & Volume envelop shape STPS_2: LD A,(HL) INC HL CALL WRTPSG DJNZ STPS_2 RET ; Tuning ;- byte TUN_UP: ADD A,(IX) ; Up RET TUN_DW: SUB (IX) ; Down NEG RET ;- word TUNWUP: PUSH HL LD L,(IX) LD H,(IX+1) ADD HL,BC PUSH HL POP BC POP HL RET TUNWDW: PUSH HL LD L,(IX) LD H,(IX+1) XOR A SBC HL,BC PUSH HL POP BC POP HL RET ; Volume Down VOL_DW: AND $0F LD B,A LD A,(IX+0) SUB B RET NC XOR A RET ; Make relative volume (depending on "SEEVOL" ; In: A, volume ; Out: A, new volume [seevol - (15-volume)] FIXVOL: AND $0F LD B,A LD A,15 SUB B LD C,A LD A,(SEEVOL) AND $0F SUB C RET NC XOR A RET ; Write PSG (not ROM-BIOS compatible!) ; In: A, data ; E, port ; IX, PSG store table ; Out: E+1 ; IX+1 WRTPSG: LD (IX),A INC IX PUSH AF LD A,E OUT ($A0),A ; pour MSX /port $A0(write) register Write port -> A modifier NEOGEO :OUT ($4),A INC E POP AF OUT ($A1),A ; pour MSX /port $A1(write) Value Write port -> A modifier NEOGEO :OUT ($5),A RET ;+----------------------------< Work Area >------------------------------------+ ; reg. 0 1 2 3 4 5 6 7 8 9 A B C D PSGREG: DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; - PSG port store buffer -