l00e8: DEC HL LD (HL),00H DEC HL LD A,(0B82EH) OR A JR NZ,L00FE LD (0B82DH),HL LD (0B82FH),HL LD HL,0B831H SET 6,(HL) RET l00fe: LD DE,(0B82FH) LD (0B82FH),HL EX DE,HL LD (HL),E INC HL LD (HL),D RET ;;========================================================================== ;; KL INIT EVENT l01d2: DI INC HL INC HL LD (HL),00H INC HL LD (HL),B INC HL LD (HL),E INC HL LD (HL),D INC HL LD (HL),C INC HL EI RET ;;========================================================================== ;; KL EVENT l01e2: INC HL INC HL DI LD A,(HL) INC (HL) JP M,L0201 OR A JR NZ,L0202 INC HL LD A,(HL) DEC HL OR A JP P,L022E EX AF,AF' JR NC,L0208 EX AF,AF' ADD A,A JP P,L00E8 DEC (HL) INC HL INC HL JR L0222 l0201: DEC (HL) l0202: EX AF,AF' JR C,L0206 EI l0206: EX AF,AF' RET l0208: EX AF,AF' l0209: EI LD A,(HL) DEC A RET M l020d: PUSH HL CALL L021B POP HL DEC (HL) RET Z JP P,L020D INC (HL) RET ;;========================================================================== ;; KL DO SYNC INC HL INC HL l021b: INC HL LD A,(HL) INC HL RRA JP NC,LB9C1 l0222: LD E,(HL) INC HL LD D,(HL) EX DE,HL JP (HL) ;;========================================================================== ;; KL SYNC RESET LD HL,0000 LD (0B8C1H),HL RET l022e: PUSH HL LD B,A LD DE,0B8C3H l0233: EX DE,HL DEC HL DEC HL LD D,(HL) DEC HL LD E,(HL) LD A,D OR A JR Z,L0244 INC DE INC DE INC DE LD A,(DE) CP B JR NC,L0233 l0244: POP DE DEC DE INC HL LD A,(HL) LD (DE),A DEC DE LD (HL),D DEC HL LD A,(HL) LD (DE),A LD (HL),E EX AF,AF' JR C,L0253 EI l0253: EX AF,AF' RET ;;==================================================================== ;; MC SOUND REGISTER ;; ;; entry: ;; A = register index ;; C = register data ;; l0863: DI LD B,0F4H ; PPI port A I/O address OUT (C),A ; write register index LD B,0F6H ; PPI port C I/O address IN A,(C) ; get current outputs of PPI port C I/O port OR 0C0H ; bit 7,6: PSG register select OUT (C),A ; write control to PSG. PSG will select register ; referenced by data at PPI port A output AND 3FH ; bit 7,6: PSG inactive OUT (C),A ; write control to PSG. LD B,0F4H ; PPI port A I/O address OUT (C),C ; write register data LD B,0F6H ; PPI port C I/O address LD C,A OR 80H ; bit 7,6: PSG write data to selected register OUT (C),A ; write control to PSG. PSG will write the data ; at PPI port A into the currently selected register ; bit 7,6: PSG inactive OUT (C),C ; write control to PSG EI RET ;;============================================================================ ;; SOUND RESET l1fe9: LD HL,0B1EDH LD B,04H l1fee: LD (HL),00H INC HL DJNZ L1FEE LD DE,208BH LD B,81H CALL L01D2 ; KL INIT EVENT LD A,3FH LD (0B2B5H),A LD HL,0B1F8H LD BC,003DH LD DE,0108H XOR A l200a: LD (HL),A INC HL LD (HL),D INC HL LD (HL),E ADD HL,BC INC A EX DE,HL ADD HL,HL EX DE,HL CP 03H JR NZ,L200A LD C,07H l201a: PUSH IX PUSH HL LD HL,0B1F0H INC (HL) PUSH HL LD IX,0B1B9H LD A,C l2027: CALL L2209 PUSH AF PUSH BC CALL L2286 CALL L23E7 PUSH IX POP DE INC DE INC DE INC DE LD L,E LD H,D INC DE LD BC,003BH LD (HL),00H LDIR LD (IX+1CH),04H POP BC POP AF JR NZ,L2027 POP HL DEC (HL) POP HL POP IX RET ;;========================================================================== ;; SOUND HOLD l2050: LD HL,0B1EEH DI LD A,(HL) LD (HL),00H EI OR A RET Z DEC HL LD (HL),A LD L,03H LD C,00H l2060: LD A,07H ADD A,L CALL L0863 ; MC SOUND REGISTER DEC L JR NZ,L2060 SCF RET ;;========================================================================== ;; SOUND CONTINUE l206b: LD DE,0B1EDH LD A,(DE) OR A RET Z PUSH DE LD IX,0B1B9H l2076: CALL L2209 PUSH AF LD A,(IX+0FH) CALL C,L23DE POP AF JR NZ,L2076 EX (SP),HL LD A,(HL) LD (HL),00H INC HL LD (HL),A POP HL RET PUSH IX LD A,(0B1EEH) OR A JR Z,L20D0 PUSH AF LD IX,0B1B9H l2098: LD BC,003FH l209b: ADD IX,BC SRL A JR NC,L209B PUSH AF LD A,(IX+04H) RRA CALL C,L241F LD A,(IX+07H) RRA CALL C,L231F CALL C,L2213 POP AF JR NZ,L2098 POP BC LD A,(0B1EEH) CPL AND B JR Z,L20D0 LD IX,0B1B9H LD DE,003FH l20c5: ADD IX,DE SRL A PUSH AF CALL C,L23E7 POP AF JR NZ,L20C5 l20d0: XOR A LD (0B1F0H),A POP IX RET l20d7: LD HL,0B1EEH LD A,(HL) OR A RET Z INC HL DEC (HL) RET NZ LD B,A INC (HL) INC HL LD A,(HL) OR A RET NZ DEC HL LD (HL),03H LD HL,0B1BEH LD DE,003FH XOR A l20f0: ADD HL,DE SRL B JR NC,L20F0 DEC (HL) JR NZ,L20FD DEC HL RLC (HL) ADC A,D INC HL l20fd: INC HL DEC (HL) JR NZ,L2106 INC HL RLC (HL) ADC A,D DEC HL l2106: DEC HL INC B DJNZ L20F0 OR A RET Z LD HL,0B1F0H LD (HL),A INC HL JP L01E2 ; KL EVENT ;;============================================================================ ;; SOUND QUEUE l2114: CALL L206B ; SOUND CONTINUE LD A,(HL) AND 07H SCF RET Z LD C,A OR (HL) CALL M,L201A LD B,C LD IX,0B1B9H LD DE,003FH XOR A l212a: ADD IX,DE SRL B JR NC,L212A LD (IX+1EH),D CP (IX+1CH) CCF SBC A,A INC B DJNZ L212A OR A RET NZ LD B,C LD A,(HL) RRA RRA RRA OR B AND 0FH LD C,A PUSH HL LD HL,0B1F0H INC (HL) EX (SP),HL INC HL LD IX,0B1B9H l2151: LD DE,003FH l2154: ADD IX,DE SRL B JR NC,L2154 PUSH HL PUSH BC LD A,(IX+1BH) INC (IX+1BH) DEC (IX+1CH) EX DE,HL CALL L219C PUSH HL EX DE,HL LD A,(IX+01H) CPL AND C LD (DE),A INC DE LD A,(HL) INC HL ADD A,A ADD A,A ADD A,A ADD A,A LD B,A LD A,(HL) INC HL AND 0FH OR B LD (DE),A INC DE LD BC,0006H LDIR POP HL LD A,(IX+1AH) INC (IX+1AH) OR (IX+03H) CALL Z,L221F POP BC POP HL INC B DJNZ L2151 EX (SP),HL DEC (HL) POP HL SCF RET l219c: AND 03H ADD A,A ADD A,A ADD A,A ADD A,1FH PUSH IX POP HL ADD A,L LD L,A ADC A,H SUB L LD H,A RET ;;========================================================================== ;; SOUND RELEASE l21ac: LD L,A CALL L206B ; SOUND CONTINU LD A,L AND 07H RET Z LD HL,0B1F0H INC (HL) PUSH HL LD IX,0B1B9H l21bd: CALL L2209 PUSH AF BIT 3,(IX+03H) CALL NZ,L2219 POP AF JR NZ,L21BD POP HL DEC (HL) RET ;;============================================================================ ;; SOUND CHECK l21ce: AND 07H RET Z LD HL,0B1BCH LD DE,003FH l21d7: ADD HL,DE RRA JR NC,L21D7 DI LD A,(HL) ADD A,A ADD A,A ADD A,A LD DE,0019H ADD HL,DE OR (HL) INC HL INC HL LD (HL),00H EI RET ;;============================================================================ ;; SOUND ARM EVENT l21eb: AND 07H RET Z EX DE,HL LD HL,0B1D5H LD BC,003FH l21f5: ADD HL,BC RRA JR NC,L21F5 XOR A DI CP (HL) JR NZ,L21FF LD A,D l21ff: INC HL LD (HL),E INC HL LD (HL),A EI RET Z EX DE,HL JP L01E2 ; KL EVENT ;;================================================================================== l2209: LD DE,003FH l220c: ADD IX,DE SRL A RET C JR L220C l2213: LD A,(IX+1AH) OR A JR Z,L2286 l2219: LD A,(IX+19H) CALL L219C l221f: LD A,(HL) OR A JR Z,L2230 BIT 3,A JR NZ,L2280 PUSH HL LD (HL),00H CALL L2290 POP HL JR NC,L2286 l2230: LD (IX+03H),10H INC HL LD A,(HL) AND 0F0H PUSH AF XOR (HL) LD E,A INC HL LD C,(HL) INC HL LD D,(HL) INC HL OR D OR C JR Z,L224C PUSH HL CALL L2408 LD D,(IX+01H) POP HL l224c: LD C,(HL) INC HL LD E,(HL) INC HL LD A,(HL) INC HL LD H,(HL) LD L,A POP AF CALL L22DE LD HL,0B1EEH LD B,(IX+01H) LD A,(HL) OR B LD (HL),A XOR B JR NZ,L2267 INC HL LD (HL),03H l2267: INC (IX+19H) DEC (IX+1AH) INC (IX+1CH) LD A,(IX+1EH) LD (IX+1EH),00H OR A RET Z LD H,A LD L,(IX+1DH) JP L01E2 ; KL EVENT l2280: RES 3,(HL) LD (IX+03H),08H l2286: LD HL,0B1EEH LD A,(IX+01H) CPL AND (HL) LD (HL),A RET l2290: PUSH IX LD B,A LD C,(IX+01H) LD IX,0B1F8H BIT 0,A JR NZ,L22AA LD IX,0B237H BIT 1,A JR NZ,L22AA LD IX,0B276H l22aa: LD A,(IX+03H) AND C JR Z,L22D7 LD A,B CP (IX+01H) JR Z,L22CF PUSH IX LD IX,0B276H BIT 2,A JR NZ,L22C4 LD IX,0B237H l22c4: LD A,(IX+03H) AND C JR Z,L22D6 CALL L2219 POP IX l22cf: CALL L2219 POP IX SCF RET l22d6: POP HL l22d7: POP IX LD (IX+03H),B OR A RET l22de: SET 7,E LD (IX+0FH),E LD E,A LD A,L OR H JR NZ,L22E9 DEC HL l22e9: LD (IX+08H),L LD (IX+09H),H LD A,C OR A JR Z,L22FB LD A,06H ; PSG noise register CALL L0863 ; MC SOUND REGISTER LD A,(IX+02H) l22fb: OR D CALL L23E8 LD A,E OR A JR Z,L230D LD HL,0B2A6H LD D,00H ADD HL,DE LD A,(HL) OR A JR NZ,L2310 l230d: LD HL,231BH l2310: LD (IX+0AH),L LD (IX+0BH),H CALL L23CD JR L2328 LD BC,0001H RET Z l231f: LD L,(IX+0DH) LD H,(IX+0EH) LD E,(IX+10H) l2328: LD A,E CP 0FFH JR Z,L23A2 ADD A,A LD A,(HL) INC HL JR C,L237B JR Z,L2340 DEC E LD C,(IX+0FH) OR A JR NZ,L233F BIT 7,C JR Z,L2345 l233f: ADD A,C l2340: AND 0FH CALL L23DB l2345: LD C,(HL) LD A,(IX+09H) LD B,A ADD A,A JR C,L2368 XOR A SUB C ADD A,(IX+08H) JR C,L2360 DEC B JP P,L235D LD C,(IX+08H) XOR A LD B,A l235d: LD (IX+09H),B l2360: LD (IX+08H),A OR B JR NZ,L2368 LD E,0FFH l2368: LD A,E OR A CALL Z,L23AE LD (IX+10H),E DI LD (IX+06H),C LD (IX+07H),80H EI OR A RET l237b: LD D,A LD C,E LD A,0DH ; PSG hardware volume shape register CALL L0863 ; MC SOUND REGISTER LD C,D LD A,0BH ; PSG hardware volume period low CALL L0863 ; MC SOUND REGISTER LD C,(HL) LD A,0CH ; PSG hardware volume period high CALL L0863 ; MC SOUND REGISTER LD A,10H CALL L23DB CALL L23AE LD A,E INC A JR NZ,L2328 LD HL,231BH CALL L23CD JR L2328 l23a2: XOR A LD (IX+03H),A LD (IX+07H),A LD (IX+04H),A SCF RET l23ae: DEC (IX+0CH) JR NZ,L23D1 LD A,(IX+09H) ADD A,A LD HL,231BH JR NC,L23CD INC (IX+08H) JR NZ,L23C7 INC (IX+09H) LD E,0FFH RET Z l23c7: LD L,(IX+0AH) LD H,(IX+0BH) l23cd: LD A,(HL) LD (IX+0CH),A l23d1: INC HL LD E,(HL) INC HL LD (IX+0DH),L LD (IX+0EH),H RET l23db: LD (IX+0FH),A l23de: LD C,A LD A,(IX+00H) ADD A,08H ; PSG volume register for channel A JP L0863 ; MC SOUND REGISTER l23e7: XOR A l23e8: LD B,A LD A,(IX+01H) OR (IX+02H) LD HL,0B2B5H DI OR (HL) XOR B CP (HL) LD (HL),A EI JR NZ,L23FD LD A,B OR A RET NZ l23fd: XOR A CALL L23DE DI LD C,(HL) LD A,07H ; PSG mixer register JP L0863 ; MC SOUND REGISTER l2408: CALL L2481 LD A,E CALL L24AB ; SOUND T ADDRESS RET NC LD A,(HL) AND 7FH RET Z LD (IX+11H),L LD (IX+12H),H CALL L2470 JR L2428 l241f: LD L,(IX+14H) LD H,(IX+15H) LD E,(IX+18H) l2428: LD C,(HL) INC HL LD A,E SUB 0F0H JR C,L2433 LD E,00H JR L2441 l2433: DEC E LD A,C ADD A,A SBC A,A LD D,A LD A,(IX+16H) ADD A,C LD C,A LD A,(IX+17H) ADC A,D l2441: LD D,A CALL L2481 LD C,(HL) LD A,E OR A JR NZ,L2463 LD A,(IX+13H) DEC A JR NZ,L2460 LD L,(IX+11H) LD H,(IX+12H) LD A,(HL) ADD A,80H JR C,L2460 LD (IX+04H),00H RET l2460: CALL L2470 l2463: LD (IX+18H),E DI LD (IX+05H),C LD (IX+04H),80H EI RET l2470: LD (IX+13H),A INC HL LD E,(HL) INC HL LD (IX+14H),L LD (IX+15H),H LD A,E OR A RET NZ INC E RET ;;=========================================================================== l2481: LD A,(IX+00H) ADD A,A PUSH AF LD (IX+16H),C CALL L0863 ; MC SOUND REGISTER POP AF INC A LD C,D LD (IX+17H),C JP L0863 ; MC SOUND REGISTER ;;========================================================================== ;; SOUND AMPL ENVELOPE l2495: LD DE,0B2A6H JR L249D ;;========================================================================== ;; SOUND TONE ENVELOPE l249a: LD DE,0B396H l249d: EX DE,HL CALL L24AE EX DE,HL RET NC LDIR RET ;;========================================================================== ;; SOUND A ADDRESS l24a6: LD HL,0B2A6H JR L24AE ;;========================================================================== ;; SOUND T ADDRESS l24ab: LD HL,0B396H l24ae: OR A RET Z CP 10H RET NC LD BC,0010H l24b6: ADD HL,BC DEC A JR NZ,L24B6 SCF RET