;********************************************************************* ;* Title: code-opl3-v00.asm ;********************************************************************* ;* Author: R. Allen Murphey ;* ;* License: Copyright (c) 2020-2022 R. Allen Murphey. All Rights Reserved. ;* ;* Description: YAMAHA YMF-262 FM OPERATOR L3 (OPL3) DRIVER ;* ;* Documentation: ;* ;* Include Files: none ;* ;* Assembler: lwasm 1.4.2 ;* ;* Revision History: ;* Rev # Date Who Comments ;* ----- ----------- ------ --------------------------------------- ;* 00 2020-2021 RAM Created initial file ;********************************************************************* ; REGISTER ARRAY 0 (OPL, OPLII, OPL3) OPL3TEST00: equ $0000 ; RA0 00[7:0] LSI TEST OPL3TEST01: equ $0001 ; RA0 01[7:0] LSI TEST OPL3TIMER1: equ $0002 ; RA0 02[7:0] TIMER1 PRESET (8-bit 80microsec) OPL3TIMER2: equ $0003 ; RA0 03[7:0] TIMER2 PRESET (8-bit 320microsec) OPL3CNTRL: equ $0004 ; RA0 04 RESET / MASK TIMERS / START TIMERS ; Bit 7 RESET (RST) 1=reset ; Bit 6 MASK TIMER 1 (MT1) 1=Mask (no) /IRQ on Timer1 overflow ; Bit 5 MASK TIMER 2 (MT2) 1=Mask (no) /IRQ on Timer2 overflow ; Bit 4-2 unused ; Bit 1 START TIMER 2 (ST2) 1=Timer 2 runs ; Bit 0 START TIMER 1 (ST1) 1=Timer 1 runs OPL3NTS: equ $0008 ; RA0 08 NOTE SPLIT (NTS) OPL3AM00: equ $0020 ; RA0 20[7] AMPLITUDE MODULATION (TREMELO) OPL3VIB00: equ $0020 ; RA0 20[6] FREQUENCY MODULATION (VIBRATO) OPL3EGT00: equ $0020 ; RA0 20[5] ENVELOPE GENERATOR TYPE (EGT) PERCUSSIVE / NONPERCUSSIVE OPL3KSR00: equ $0020 ; RA0 20[4] KEY SCALE RATE (KSR) OPL3MUL00: equ $0020 ; RA0 20[3:0] MULTIPLIER for Frequency set by block / F-number OPL3KSL00: equ $0040 ; RA0 40[7:6] KEY SCALE LEVEL (KSL) OPL3LEV00: equ $0040 ; RA0 40[5:0] TOTAL LEVEL (TL) damping/attenuation for envelope OPL3AR00: equ $0060 ; RA0 60[7:4] ATTACK RATE (AR) OPL3DR00: equ $0060 ; RA0 60[3:0] DECAY RATE (DR) OPL3SL00: equ $0080 ; RA0 80[7:4] SUSTAIN LEVEL (SL) OPL3RR00: equ $0080 ; RA0 80[3:0] RELEASE RATE (RR) OPL3FNL00: equ $00A0 ; RA0 A0[7:0] FREQUENCY NUMBER LOW BITS 7-0 OPL3FNH00: equ $00B0 ; RA0 B0[1:0] FREQUENCY NUMBER HIGH BITS 9-8 OPL3BLK00: equ $00B0 ; RA0 B0[4:2] BLOCK 0-7 OPL3KON00: equ $00B0 ; RA0 B0[5] KEY ON (KON) OPL3RYT00: equ $00BD ; RA0 BD[5] RHYTHM (RHY) OPL3BD00: equ $00BD ; RA0 BD[4] BASS DRUM (BD) OPL3SD00: equ $00BD ; RA0 BD[3] SNARE DRUM (SD) OPL3TOM00: equ $00BD ; RA0 BD[2] TOM-TOM (TOM) OPL3TC00: equ $00BD ; RA0 BD[1] TOP CYMBAL (TC) OPL3HH00: equ $00BD ; RA0 BD[0] HIGH HAT (HH) OPL3CNT00: equ $00C0 ; RA0 C0[0] CONNECTOR (CNT) 0=ALGORITHM 1 (FM) 1=ALGORITHM2 (ADDITIVE) ; 4-OPERATOR MODE 00=ALGORITHM 1 01=ALGORITHM 2 10=ALGORITHM 3 11=ALGORITHM 4 OPL3FB00: equ $00C0 ; RA0 C0[3:1] FEEDBACK 0-7 OPL3CHD00: equ $00C0 ; RA0 C0[7] CHANNEL D 1=OUTPUT 0=NOT OUTPUT OPL3CHC00: equ $00C0 ; RA0 C0[6] CHANNEL C 1=OUTPUT 0=NOT OUTPUT OPL3CHB00: equ $00C0 ; RA0 C0[5] CHANNEL B 1=OUTPUT 0=NOT OUTPUT OPL3CHA00: equ $00C0 ; RA0 C0[4] CHANNEL A 1=OUTPUT 0=NOT OUTPUT OPL3WS00: equ $00E0 ; RA0 E0[2:0] WAVE SELECT ; REGISTER ARRAY 1 (OPL3 ONLY) OPL3TEST10: equ $0100 ; RA1 00[7:0] LSI TEST OPL3TEST11: equ $0101 ; RA1 01[5:0] LSI TEST OPL3CONSEL: equ $0104 ; RA1 04[5:0] CONNECTION SEL ; Bit 5 1=Channel 6 4-operator mode on ; Bit 4 1=Channel 5 4-operator mode on ; Bit 3 1=Channel 4 4-operator mode on ; Bit 2 1=Channel 3 4-operator mode on ; Bit 1 1=Channel 2 4-operator mode on ; Bit 0 1=Channel 1 4-operator mode on OPL3NEW: equ $0105 ; RA1 05[0] NEW EXPANSION REGISTER ; Bit 0 1=OPL3 mode 0=OPLII mode OPL3: rts ;********************************************************************* ;* Title: code-opl3-v00.asm ;*********************************************************************