TESTS: PSG, OPN, OPM changes

Added support for testing internal and external PSG implementations. Switch OPN and OPM tests to Stefany's code.
This commit is contained in:
Peter Weingartner 2021-12-18 19:27:57 -05:00
parent 4bfc65d631
commit c50e9cda19
10 changed files with 6500 additions and 4444 deletions

View file

@ -2,6 +2,8 @@
* Commands to work with the sound devices
*/
#include <string.h>
#include "timers.h"
#include "sound_cmds.h"
#include "sound_reg.h"
@ -11,37 +13,52 @@
#include "dev/midi.h"
#include "syscalls.h"
#include "include/A2560K/YM2151.h"
#include "include/A2560K/YM2612_Ext.h"
/*
* Play a sound on the PSG
* TEST PGS [EXT|INTL|INTR|INTS]
*/
short psg_test(short channel, int argc, const char * argv[]) {
int i;
long target_time;
short chip = 0; /* Default to external PSG */
psg_tone(0, 34923);
psg_attenuation(0, 0);
if (argc > 1) {
if ((strcmp(argv[1], "intl") == 0) || (strcmp(argv[1], "INTL") == 0)) {
chip = 1;
} else if ((strcmp(argv[1], "intr") == 0) || (strcmp(argv[1], "INTR") == 0)) {
chip = 2;
} else if ((strcmp(argv[1], "ints") == 0) || (strcmp(argv[1], "INTS") == 0)) {
chip = 3;
}
}
psg_tone(chip, 0, 34923);
psg_attenuation(chip, 0, 0);
target_time = sys_time_jiffies() + 6;
while (target_time > sys_time_jiffies()) ;
psg_tone(1, 44000);
psg_attenuation(1, 0);
psg_tone(chip, 1, 44000);
psg_attenuation(chip, 1, 0);
target_time = sys_time_jiffies() + 6;
while (target_time > sys_time_jiffies()) ;
psg_tone(2, 52325);
psg_attenuation(2, 0);
psg_tone(chip, 2, 52325);
psg_attenuation(chip, 2, 0);
target_time = sys_time_jiffies() + 60;
while (target_time > sys_time_jiffies()) ;
psg_attenuation(0, 15);
psg_tone(0, 0);
psg_attenuation(1, 15);
psg_tone(1, 0);
psg_attenuation(2, 15);
psg_tone(2, 0);
psg_attenuation(chip, 0, 15);
psg_tone(chip, 0, 0);
psg_attenuation(chip, 1, 15);
psg_tone(chip, 1, 0);
psg_attenuation(chip, 2, 15);
psg_tone(chip, 2, 0);
return 0;
}
@ -68,6 +85,368 @@ short sid_test(short channel, int argc, char * argv[]) {
return 0;
}
void Test_EXT_FM2151( void ) {
unsigned char i;
unsigned int j;
*EXT_OPM_0F_NE_NFREQ = 0x90;
*EXT_OPM_18_LFRQ = 0x55;
i = 0xD7;
* EXT_OPM_20_A_RL_FR_CONNECT = i;
* EXT_OPM_21_B_RL_FR_CONNECT = i;
* EXT_OPM_22_C_RL_FR_CONNECT = i;
* EXT_OPM_23_D_RL_FR_CONNECT = i;
* EXT_OPM_24_E_RL_FR_CONNECT = i;
* EXT_OPM_25_F_RL_FR_CONNECT = i;
* EXT_OPM_26_G_RL_FR_CONNECT = i;
* EXT_OPM_27_H_RL_FR_CONNECT = i;
i = 0xD7;
* EXT_OPM_24_E_RL_FR_CONNECT = i;
* EXT_OPM_25_F_RL_FR_CONNECT = i;
* EXT_OPM_26_G_RL_FR_CONNECT = i;
* EXT_OPM_27_H_RL_FR_CONNECT = i;
//; ADSR
//; Note on Note off
//; -------------------------------------------------------
//; ¦ ¦
//; ¦ ¦
//;--- -----------
//;
//; * -V MAX
//; * *
//; * *
//; * * - D1L
//; * *
//; * *
//; * *
//; * *
//;--- AT ¦ DT1 ¦ DT2 ¦ TR ----
i = 0x00;
* EXT_OPM_60_A_M1_TL = i;
* EXT_OPM_61_B_M1_TL = i;
* EXT_OPM_68_A_M2_TL = i;
* EXT_OPM_69_B_M2_TL = i;
* EXT_OPM_70_A_C1_TL = i;
* EXT_OPM_71_B_C1_TL = i;
* EXT_OPM_78_A_C2_TL = i;
* EXT_OPM_79_B_C2_TL = i;
* EXT_OPM_40_A_M1_DT1_MUL = 0x55;
* EXT_OPM_41_B_M1_DT1_MUL = 0x18;
* EXT_OPM_80_A_M1_KS_AR = 0xC4;
* EXT_OPM_81_B_M1_KS_AR = 0xC4;
* EXT_OPM_A0_A_M1_AMS_EN_D1R = 0x84;
* EXT_OPM_A1_B_M1_AMS_EN_D1R = 0x85;
i = 0x42;
* EXT_OPM_C0_A_M1_DT2_D2R = i;
* EXT_OPM_C8_A_M2_DT2_D2R = i;
* EXT_OPM_D0_A_C1_DT2_D2R = i;
* EXT_OPM_D8_A_C2_DT2_D2R = i;
i = 0x43;
* EXT_OPM_C1_B_M1_DT2_D2R = i;
* EXT_OPM_C9_B_M2_DT2_D2R = i;
* EXT_OPM_D1_B_C1_DT2_D2R = i;
* EXT_OPM_D9_B_C2_DT2_D2R = i;
i = 0x24;
* EXT_OPM_E0_A_M1_D1L_RR = i;
* EXT_OPM_E1_B_M1_D1L_RR = i;
* EXT_OPM_E8_A_M2_D1L_RR = 0x14;
* EXT_OPM_E9_B_M2_D1L_RR = 0x14;
* EXT_OPM_F0_A_C1_D1L_RR = i;
* EXT_OPM_F1_B_C1_D1L_RR = i;
* EXT_OPM_F8_A_C2_D1L_RR = 0x44;
* EXT_OPM_F9_B_C2_D1L_RR = 0x44;
* EXT_OPM_28_A_KC = 0x96;
* EXT_OPM_29_B_KC = 0x1A;
* EXT_OPM_2A_C_KC = 0x26;
* EXT_OPM_2B_D_KC = 0x2A;
* EXT_OPM_2C_E_KC = 0x36;
* EXT_OPM_2D_F_KC = 0x2A;
* EXT_OPM_2E_G_KC = 0x46;
* EXT_OPM_2F_H_KC = 0x4A;
* EXT_OPM_30_A_KF = 0x45;
* EXT_OPM_31_B_KF = 0x80;
* EXT_OPM_32_C_KF = 0x45;
* EXT_OPM_33_D_KF = 0x80;
* EXT_OPM_08_KEY_ON_OFF = 0x78;
* EXT_OPM_08_KEY_ON_OFF = 0x79;
* EXT_OPM_08_KEY_ON_OFF = 0x7A;
* EXT_OPM_08_KEY_ON_OFF = 0x7C;
* EXT_OPM_08_KEY_ON_OFF = 0x7D;
* EXT_OPM_08_KEY_ON_OFF = 0x7E;
* EXT_OPM_08_KEY_ON_OFF = 0x7F;
for (j=0 ; j<65536; j++);
* EXT_OPM_08_KEY_ON_OFF = 0x00;
* EXT_OPM_08_KEY_ON_OFF = 0x01;
* EXT_OPM_08_KEY_ON_OFF = 0x02;
* EXT_OPM_08_KEY_ON_OFF = 0x03;
* EXT_OPM_08_KEY_ON_OFF = 0x04;
* EXT_OPM_08_KEY_ON_OFF = 0x05;
* EXT_OPM_08_KEY_ON_OFF = 0x06;
* EXT_OPM_08_KEY_ON_OFF = 0x07;
for (j=0 ; j<262144; j++);
* EXT_OPM_08_KEY_ON_OFF = 0x00;
}
void Test_EXT_FM2612( void ) {
unsigned char i;
unsigned int j;
* EXT_OPN2_22_LFO = 0x00;
* EXT_OPN2_27_CHANEL_3_MODE = 0x00;
* EXT_OPN2_28_KEY_ON_OFF = 0x00;
* EXT_OPN2_28_KEY_ON_OFF = 0x01;
* EXT_OPN2_28_KEY_ON_OFF = 0x02;
* EXT_OPN2_28_KEY_ON_OFF = 0x04;
* EXT_OPN2_28_KEY_ON_OFF = 0x05;
* EXT_OPN2_28_KEY_ON_OFF = 0x06;
* EXT_OPN2_2B_ADC_EN = 0x00;
i = 0x71;
* EXT_OPN2_30_ADSR__DT1_MUL__CH1_OP1 = i;
* EXT_OPN2_31_ADSR__DT1_MUL__CH2_OP1 = i;
* EXT_OPN2_32_ADSR__DT1_MUL__CH3_OP1 = i;
* EXT_OPN2_30_ADSR__DT1_MUL__CH1_OP5 = i;
* EXT_OPN2_31_ADSR__DT1_MUL__CH2_OP5 = i;
* EXT_OPN2_32_ADSR__DT1_MUL__CH3_OP5 = i;
i = 0x0D;
* EXT_OPN2_35_ADSR__DT1_MUL__CH2_OP2 = i;
* EXT_OPN2_36_ADSR__DT1_MUL__CH3_OP2 = i;
* EXT_OPN2_38_ADSR__DT1_MUL__CH1_OP3 = i;
* EXT_OPN2_34_ADSR__DT1_MUL__CH1_OP6 = i;
* EXT_OPN2_35_ADSR__DT1_MUL__CH2_OP6 = i;
* EXT_OPN2_36_ADSR__DT1_MUL__CH3_OP6 = i;
i = 0x33;
* EXT_OPN2_38_ADSR__DT1_MUL__CH1_OP3 = i;
* EXT_OPN2_39_ADSR__DT1_MUL__CH2_OP3 = i;
* EXT_OPN2_3A_ADSR__DT1_MUL__CH3_OP3 = i;
* EXT_OPN2_38_ADSR__DT1_MUL__CH1_OP7 = i;
* EXT_OPN2_39_ADSR__DT1_MUL__CH2_OP7 = i;
* EXT_OPN2_3A_ADSR__DT1_MUL__CH3_OP7 = i;
i = 0x01;
* EXT_OPN2_3C_ADSR__DT1_MUL__CH1_OP4 = i;
* EXT_OPN2_3D_ADSR__DT1_MUL__CH2_OP4 = i;
* EXT_OPN2_3E_ADSR__DT1_MUL__CH3_OP4 = i;
* EXT_OPN2_3C_ADSR__DT1_MUL__CH1_OP8 = i;
* EXT_OPN2_3D_ADSR__DT1_MUL__CH2_OP8 = i;
* EXT_OPN2_3E_ADSR__DT1_MUL__CH3_OP8 = i;
i = 0x23;
* EXT_OPN2_40_ADSR__LT__CH1_OP1 = i;
* EXT_OPN2_41_ADSR__LT__CH2_OP1 = i;
* EXT_OPN2_42_ADSR__LT__CH3_OP1 = i;
* EXT_OPN2_40_ADSR__LT__CH1_OP5 = i;
* EXT_OPN2_41_ADSR__LT__CH2_OP5 = i;
* EXT_OPN2_42_ADSR__LT__CH3_OP5 = i;
i = 0x2D;
* EXT_OPN2_44_ADSR__LT__CH1_OP2 = i;
* EXT_OPN2_45_ADSR__LT__CH2_OP2 = i;
* EXT_OPN2_46_ADSR__LT__CH3_OP2 = i;
* EXT_OPN2_44_ADSR__LT__CH1_OP6 = i;
* EXT_OPN2_45_ADSR__LT__CH2_OP6 = i;
* EXT_OPN2_46_ADSR__LT__CH3_OP6 = i;
i = 0x26;
* EXT_OPN2_48_ADSR__LT__CH1_OP3 = i;
* EXT_OPN2_49_ADSR__LT__CH2_OP3 = i;
* EXT_OPN2_4A_ADSR__LT__CH3_OP3 = i;
* EXT_OPN2_48_ADSR__LT__CH1_OP7 = i;
* EXT_OPN2_49_ADSR__LT__CH2_OP7 = i;
* EXT_OPN2_4A_ADSR__LT__CH3_OP7 = i;
i = 0x00;
* EXT_OPN2_4C_ADSR__LT__CH1_OP4 = i;
* EXT_OPN2_4D_ADSR__LT__CH2_OP4 = i;
* EXT_OPN2_4E_ADSR__LT__CH3_OP4 = i;
* EXT_OPN2_4C_ADSR__LT__CH1_OP8 = i;
* EXT_OPN2_4D_ADSR__LT__CH2_OP8 = i;
* EXT_OPN2_4E_ADSR__LT__CH3_OP8 = i;
i = 0x5F;
* EXT_OPN2_50_ADSR__SR_AR__CH1_OP1 = i;
* EXT_OPN2_51_ADSR__SR_AR__CH2_OP1 = i;
* EXT_OPN2_52_ADSR__SR_AR__CH3_OP1 = i;
* EXT_OPN2_50_ADSR__SR_AR__CH1_OP5 = i;
* EXT_OPN2_51_ADSR__SR_AR__CH2_OP5 = i;
* EXT_OPN2_52_ADSR__SR_AR__CH3_OP5 = i;
i = 0x99;
* EXT_OPN2_54_ADSR__SR_AR__CH1_OP2 = i;
* EXT_OPN2_55_ADSR__SR_AR__CH2_OP2 = i;
* EXT_OPN2_56_ADSR__SR_AR__CH3_OP2 = i;
* EXT_OPN2_54_ADSR__SR_AR__CH1_OP6 = i;
* EXT_OPN2_55_ADSR__SR_AR__CH2_OP6 = i;
* EXT_OPN2_56_ADSR__SR_AR__CH3_OP6 = i;
i = 0x5F;
* EXT_OPN2_58_ADSR__SR_AR__CH1_OP3 = i;
* EXT_OPN2_59_ADSR__SR_AR__CH2_OP3 = i;
* EXT_OPN2_5A_ADSR__SR_AR__CH3_OP3 = i;
* EXT_OPN2_58_ADSR__SR_AR__CH1_OP7 = i;
* EXT_OPN2_59_ADSR__SR_AR__CH2_OP7 = i;
* EXT_OPN2_5A_ADSR__SR_AR__CH3_OP7 = i;
i = 0x94;
* EXT_OPN2_5C_ADSR__SR_AR__CH1_OP4 = i;
* EXT_OPN2_5D_ADSR__SR_AR__CH2_OP4 = i;
* EXT_OPN2_5E_ADSR__SR_AR__CH3_OP4 = i;
* EXT_OPN2_5C_ADSR__SR_AR__CH1_OP8 = i;
* EXT_OPN2_5D_ADSR__SR_AR__CH2_OP8 = i;
* EXT_OPN2_5E_ADSR__SR_AR__CH3_OP8 = i;
i = 0x07;
* EXT_OPN2_60_ADSR__AM_D1R__CH1_OP1 = i;
* EXT_OPN2_61_ADSR__AM_D1R__CH2_OP1 = i;
* EXT_OPN2_62_ADSR__AM_D1R__CH3_OP1 = i;
* EXT_OPN2_60_ADSR__AM_D1R__CH1_OP5 = i;
* EXT_OPN2_61_ADSR__AM_D1R__CH2_OP5 = i;
* EXT_OPN2_62_ADSR__AM_D1R__CH3_OP5 = i;
i = 0x07;
* EXT_OPN2_64_ADSR__AM_D1R__CH1_OP2 = i;
* EXT_OPN2_65_ADSR__AM_D1R__CH2_OP2 = i;
* EXT_OPN2_66_ADSR__AM_D1R__CH3_OP2 = i;
* EXT_OPN2_64_ADSR__AM_D1R__CH1_OP6 = i;
* EXT_OPN2_65_ADSR__AM_D1R__CH2_OP6 = i;
* EXT_OPN2_66_ADSR__AM_D1R__CH3_OP6 = i;
i = 0x05;
* EXT_OPN2_68_ADSR__AM_D1R__CH1_OP3 = i;
* EXT_OPN2_69_ADSR__AM_D1R__CH2_OP3 = i;
* EXT_OPN2_6A_ADSR__AM_D1R__CH3_OP3 = i;
* EXT_OPN2_68_ADSR__AM_D1R__CH1_OP7 = i;
* EXT_OPN2_69_ADSR__AM_D1R__CH2_OP7 = i;
* EXT_OPN2_6A_ADSR__AM_D1R__CH3_OP7 = i;
i = 0x07;
* EXT_OPN2_6C_ADSR__AM_D1R__CH1_OP4 = i;
* EXT_OPN2_6D_ADSR__AM_D1R__CH2_OP4 = i;
* EXT_OPN2_6E_ADSR__AM_D1R__CH3_OP4 = i;
* EXT_OPN2_6C_ADSR__AM_D1R__CH1_OP8 = i;
* EXT_OPN2_6D_ADSR__AM_D1R__CH2_OP8 = i;
* EXT_OPN2_6E_ADSR__AM_D1R__CH3_OP8 = i;
i = 0x02;
* EXT_OPN2_70_ADSR__D2R__CH1_OP1 = i;
* EXT_OPN2_71_ADSR__D2R__CH2_OP1 = i;
* EXT_OPN2_72_ADSR__D2R__CH3_OP1 = i;
* EXT_OPN2_70_ADSR__D2R__CH1_OP5 = i;
* EXT_OPN2_71_ADSR__D2R__CH2_OP5 = i;
* EXT_OPN2_72_ADSR__D2R__CH3_OP5 = i;
i = 0x02;
* EXT_OPN2_74_ADSR__D2R__CH1_OP2 = i;
* EXT_OPN2_75_ADSR__D2R__CH2_OP2 = i;
* EXT_OPN2_76_ADSR__D2R__CH3_OP2 = i;
* EXT_OPN2_74_ADSR__D2R__CH1_OP6 = i;
* EXT_OPN2_75_ADSR__D2R__CH2_OP6 = i;
* EXT_OPN2_76_ADSR__D2R__CH3_OP6 = i;
i = 0x02;
* EXT_OPN2_78_ADSR__D2R__CH1_OP3 = i;
* EXT_OPN2_79_ADSR__D2R__CH2_OP3 = i;
* EXT_OPN2_7A_ADSR__D2R__CH3_OP3 = i;
* EXT_OPN2_78_ADSR__D2R__CH1_OP7 = i;
* EXT_OPN2_79_ADSR__D2R__CH2_OP7 = i;
* EXT_OPN2_7A_ADSR__D2R__CH3_OP7 = i;
i = 0x02;
* EXT_OPN2_7C_ADSR__D2R__CH1_OP4 = i;
* EXT_OPN2_7D_ADSR__D2R__CH2_OP4 = i;
* EXT_OPN2_7E_ADSR__D2R__CH3_OP4 = i;
* EXT_OPN2_7C_ADSR__D2R__CH1_OP8 = i;
* EXT_OPN2_7D_ADSR__D2R__CH2_OP8 = i;
* EXT_OPN2_7E_ADSR__D2R__CH3_OP8 = i;
i = 0x11;
* EXT_OPN2_80_ADSR__D1L_RR__CH1_OP1 = i;
* EXT_OPN2_81_ADSR__D1L_RR__CH2_OP1 = i;
* EXT_OPN2_82_ADSR__D1L_RR__CH3_OP1 = i;
* EXT_OPN2_80_ADSR__D1L_RR__CH1_OP5 = i;
* EXT_OPN2_81_ADSR__D1L_RR__CH2_OP5 = i;
* EXT_OPN2_82_ADSR__D1L_RR__CH3_OP5 = i;
i = 0x11;
* EXT_OPN2_84_ADSR__D1L_RR__CH1_OP2 = i;
* EXT_OPN2_85_ADSR__D1L_RR__CH2_OP2 = i;
* EXT_OPN2_86_ADSR__D1L_RR__CH3_OP2 = i;
* EXT_OPN2_84_ADSR__D1L_RR__CH1_OP6 = i;
* EXT_OPN2_85_ADSR__D1L_RR__CH2_OP6 = i;
* EXT_OPN2_86_ADSR__D1L_RR__CH3_OP6 = i;
i = 0x11;
* EXT_OPN2_88_ADSR__D1L_RR__CH1_OP3 = i;
* EXT_OPN2_89_ADSR__D1L_RR__CH2_OP3 = i;
* EXT_OPN2_8A_ADSR__D1L_RR__CH3_OP3 = i;
* EXT_OPN2_88_ADSR__D1L_RR__CH1_OP7 = i;
* EXT_OPN2_89_ADSR__D1L_RR__CH2_OP7 = i;
* EXT_OPN2_8A_ADSR__D1L_RR__CH3_OP7 = i;
i = 0xA6;
* EXT_OPN2_8C_ADSR__D1L_RR__CH1_OP4 = i;
* EXT_OPN2_8D_ADSR__D1L_RR__CH2_OP4 = i;
* EXT_OPN2_8E_ADSR__D1L_RR__CH3_OP4 = i;
* EXT_OPN2_8C_ADSR__D1L_RR__CH1_OP8 = i;
* EXT_OPN2_8D_ADSR__D1L_RR__CH2_OP8 = i;
* EXT_OPN2_8E_ADSR__D1L_RR__CH3_OP8 = i;
i = 0x00;
* EXT_OPN2_90_ADSR__D1L_RR__CH1_OP1 = i;
* EXT_OPN2_91_ADSR__D1L_RR__CH2_OP1 = i;
* EXT_OPN2_92_ADSR__D1L_RR__CH3_OP1 = i;
* EXT_OPN2_94_ADSR__D1L_RR__CH1_OP2 = i;
* EXT_OPN2_95_ADSR__D1L_RR__CH2_OP2 = i;
* EXT_OPN2_96_ADSR__D1L_RR__CH3_OP2 = i;
* EXT_OPN2_98_ADSR__D1L_RR__CH1_OP3 = i;
* EXT_OPN2_99_ADSR__D1L_RR__CH2_OP3 = i;
* EXT_OPN2_9A_ADSR__D1L_RR__CH3_OP3 = i;
* EXT_OPN2_9C_ADSR__D1L_RR__CH1_OP4 = i;
* EXT_OPN2_9D_ADSR__D1L_RR__CH2_OP4 = i;
* EXT_OPN2_9E_ADSR__D1L_RR__CH3_OP4 = i;
* EXT_OPN2_90_ADSR__D1L_RR__CH4_OP1 = i;
* EXT_OPN2_91_ADSR__D1L_RR__CH5_OP1 = i;
* EXT_OPN2_92_ADSR__D1L_RR__CH6_OP1 = i;
* EXT_OPN2_94_ADSR__D1L_RR__CH4_OP2 = i;
* EXT_OPN2_95_ADSR__D1L_RR__CH5_OP2 = i;
* EXT_OPN2_96_ADSR__D1L_RR__CH6_OP2 = i;
* EXT_OPN2_98_ADSR__D1L_RR__CH4_OP3 = i;
* EXT_OPN2_99_ADSR__D1L_RR__CH5_OP3 = i;
* EXT_OPN2_9A_ADSR__D1L_RR__CH6_OP3 = i;
* EXT_OPN2_9C_ADSR__D1L_RR__CH4_OP4 = i;
* EXT_OPN2_9D_ADSR__D1L_RR__CH5_OP4 = i;
* EXT_OPN2_9E_ADSR__D1L_RR__CH6_OP4 = i;
i = 0x32;
* EXT_OPN2_B0_CH1_FEEDBACK_ALGO = i;
* EXT_OPN2_B1_CH2_FEEDBACK_ALGO = i;
* EXT_OPN2_B2_CH3_FEEDBACK_ALGO = i;
i = 0xC0;
* EXT_OPN2_B4_CH4_L_R_AMS_FMS = i;
* EXT_OPN2_B5_CH5_L_R_AMS_FMS = i;
* EXT_OPN2_B6_CH6_L_R_AMS_FMS = i;
* EXT_OPN2_A4_CH1_OCTAVE_FREQ_H = 0x23;
* EXT_OPN2_A5_CH2_OCTAVE_FREQ_H = 0x22;
* EXT_OPN2_A6_CH3_OCTAVE_FREQ_H = 0x22;
* EXT_OPN2_A0_CH1_FREQ_L = 0x9C;
* EXT_OPN2_A1_CH2_FREQ_L = 0x9C;
* EXT_OPN2_A2_CH3_FREQ_L = 0x24;
*EXT_OPN2_28_KEY_ON_OFF = 0x00;
*EXT_OPN2_28_KEY_ON_OFF = 0xF0;
*EXT_OPN2_28_KEY_ON_OFF = 0xF1;
*EXT_OPN2_28_KEY_ON_OFF = 0xF2;
*EXT_OPN2_28_KEY_ON_OFF = 0xF4;
*EXT_OPN2_28_KEY_ON_OFF = 0xF5;
*EXT_OPN2_28_KEY_ON_OFF = 0xF6;
// 400ms Delay (prolly not quite the time it needs)
for (j=0 ; j<262144; j++);
* EXT_OPN2_28_KEY_ON_OFF = 0x00;
* EXT_OPN2_28_KEY_ON_OFF = 0x01;
* EXT_OPN2_28_KEY_ON_OFF = 0x02;
* EXT_OPN2_28_KEY_ON_OFF = 0x04;
* EXT_OPN2_28_KEY_ON_OFF = 0x05;
* EXT_OPN2_28_KEY_ON_OFF = 0x06;
// 400ms Delay (prolly not quite the time it needs)
for (j=0 ; j<262144; j++);
}
/*
* Test tone for OPM: register, value
*/
@ -109,42 +488,44 @@ short opm_test(short channel, int argc, char * argv[]) {
long target_time;
unsigned char * opm_base = OPM_INT_BASE;
if (argc >= 2) {
/* Allow the user to select the external OPM */
if ((strcmp(argv[1], "ext") == 0) || (strcmp(argv[1], "EXT") == 0)) {
opm_base = OPM_EXT_BASE;
}
}
/* Clear all the OPM registers */
for (i = 0; i < 0x100; i++) {
opm_base[reg] = 0;
}
i = 0;
while (1) {
reg = opm_tone_on[i++];
if (reg == 0x00) {
break;
} else {
data = opm_tone_on[i++];
opm_base[reg] = data;
}
}
target_time = sys_time_jiffies() + 60;
while (target_time > sys_time_jiffies()) ;
i = 0;
while (1) {
reg = opm_tone_off[i++];
if (reg == 0x00) {
break;
} else {
data = opm_tone_off[i++];
opm_base[reg] = data;
}
}
Test_EXT_FM2151();
//
// if (argc >= 2) {
// /* Allow the user to select the external OPM */
// if ((strcmp(argv[1], "ext") == 0) || (strcmp(argv[1], "EXT") == 0)) {
// opm_base = OPM_EXT_BASE;
// }
// }
//
// /* Clear all the OPM registers */
// for (i = 0; i < 0x100; i++) {
// opm_base[reg] = 0;
// }
//
// i = 0;
// while (1) {
// reg = opm_tone_on[i++];
// if (reg == 0x00) {
// break;
// } else {
// data = opm_tone_on[i++];
// opm_base[reg] = data;
// }
// }
//
// target_time = sys_time_jiffies() + 60;
// while (target_time > sys_time_jiffies()) ;
//
// i = 0;
// while (1) {
// reg = opm_tone_off[i++];
// if (reg == 0x00) {
// break;
// } else {
// data = opm_tone_off[i++];
// opm_base[reg] = data;
// }
// }
return 0;
}
@ -231,37 +612,39 @@ short opn_test(short channel, int argc, char * argv[]) {
long target_time;
unsigned char * opn_base = OPN2_INT_BASE;
if (argc >= 2) {
/* Allow the user to select the external OPM */
if ((strcmp(argv[1], "ext") == 0) || (strcmp(argv[1], "EXT") == 0)) {
opn_base = OPN2_EXT_BASE;
}
}
i = 0;
while (1) {
reg = opn_tone_on[i++];
if (reg == 0x00) {
break;
} else {
data = opn_tone_on[i++];
opn_base[reg] = data;
}
}
target_time = sys_time_jiffies() + 60;
while (target_time > sys_time_jiffies()) ;
i = 0;
while (1) {
reg = opn_tone_off[i++];
if (reg == 0x00) {
break;
} else {
data = opn_tone_off[i++];
opn_base[reg] = data;
}
}
Test_EXT_FM2612();
//
// if (argc >= 2) {
// /* Allow the user to select the external OPM */
// if ((strcmp(argv[1], "ext") == 0) || (strcmp(argv[1], "EXT") == 0)) {
// opn_base = OPN2_EXT_BASE;
// }
// }
//
// i = 0;
// while (1) {
// reg = opn_tone_on[i++];
// if (reg == 0x00) {
// break;
// } else {
// data = opn_tone_on[i++];
// opn_base[reg] = data;
// }
// }
//
// target_time = sys_time_jiffies() + 60;
// while (target_time > sys_time_jiffies()) ;
//
// i = 0;
// while (1) {
// reg = opn_tone_off[i++];
// if (reg == 0x00) {
// break;
// } else {
// data = opn_tone_off[i++];
// opn_base[reg] = data;
// }
// }
return 0;
}

View file

@ -587,11 +587,11 @@ const t_cli_test_feature cli_test_features[] = {
{"MIDIRX", "MIDIRX: perform a receive test on the MIDI ports", midi_rx_test},
{"MIDITX", "MIDITX: send a note to a MIDI keyboard", midi_tx_test},
{"OPL3", "OPL3: test the OPL3 sound chip", opl3_test},
{"OPN", "OPN [EXT|INT]: test the OPN sound chip", opm_test},
{"OPN", "OPN [EXT|INT]: test the OPN sound chip", opn_test},
{"OPM", "OPM [EXT|INT]: test the OPM sound chip", opm_test},
{"PANIC", "PANIC: test the kernel panic mechanism", cli_test_panic},
{"PS2", "PS2: test the PS/2 keyboard", cli_test_ps2},
{"PSG", "PSG: test the PSG sound chip", psg_test},
{"PSG", "PSG [EXT|INTL|INTR|INTS]: test the PSG sound chip", psg_test},
{"PRINT", "PRINT: sent text to the printer", cmd_test_print},
#if MODEL == MODEL_FOENIX_A2560K
{"RECALIBRATE", "RECALIBRATE: recalibrate the floppy drive", cli_test_recalibrate},

File diff suppressed because it is too large Load diff

496
src/include/A2560K/YM2151.h Normal file
View file

@ -0,0 +1,496 @@
#ifndef YM2151_H_ /* Include guard */
#define YM2151_H_
//;--------------------------------------------------------------------------------------
//;--------------------------------------------------------------------------------------
//;--------------------------------------------------------------------------------------
// External OPM
unsigned char * EXT_OPM_01_TEST = (void *) 0xFEC20601;
unsigned char * EXT_OPM_08_KEY_ON_OFF = (void *) 0xFEC20608;
unsigned char * EXT_OPM_0F_NE_NFREQ = (void *) 0xFEC2060F;
unsigned char * EXT_OPM_10_CLK_A1 = (void *) 0xFEC20610;
unsigned char * EXT_OPM_11_CLK_A2 = (void *) 0xFEC20611;
unsigned char * EXT_OPM_12_CLK_B = (void *) 0xFEC20612;
unsigned char * EXT_OPM_14_CMS_FLAG_RST_IRQEN_LD = (void *) 0xFEC20614;
unsigned char * EXT_OPM_18_LFRQ = (void *) 0xFEC20618;
unsigned char * EXT_OPM_19_PMD_AMD = (void *) 0xFEC20619;
unsigned char * EXT_OPM_1B_CT_W = (void *) 0xFEC2061B;
unsigned char * EXT_OPM_20_A_RL_FR_CONNECT = (void *) 0xFEC20620;
unsigned char * EXT_OPM_21_B_RL_FR_CONNECT = (void *) 0xFEC20621;
unsigned char * EXT_OPM_22_C_RL_FR_CONNECT = (void *) 0xFEC20622;
unsigned char * EXT_OPM_23_D_RL_FR_CONNECT = (void *) 0xFEC20623;
unsigned char * EXT_OPM_24_E_RL_FR_CONNECT = (void *) 0xFEC20624;
unsigned char * EXT_OPM_25_F_RL_FR_CONNECT = (void *) 0xFEC20625;
unsigned char * EXT_OPM_26_G_RL_FR_CONNECT = (void *) 0xFEC20626;
unsigned char * EXT_OPM_27_H_RL_FR_CONNECT = (void *) 0xFEC20627;
unsigned char * EXT_OPM_28_A_KC = (void *) 0xFEC20628;
unsigned char * EXT_OPM_29_B_KC = (void *) 0xFEC20629;
unsigned char * EXT_OPM_2A_C_KC = (void *) 0xFEC2062A;
unsigned char * EXT_OPM_2B_D_KC = (void *) 0xFEC2062B;
unsigned char * EXT_OPM_2C_E_KC = (void *) 0xFEC2062C;
unsigned char * EXT_OPM_2D_F_KC = (void *) 0xFEC2062D;
unsigned char * EXT_OPM_2E_G_KC = (void *) 0xFEC2062E;
unsigned char * EXT_OPM_2F_H_KC = (void *) 0xFEC2062F;
unsigned char * EXT_OPM_30_A_KF = (void *) 0xFEC20630;
unsigned char * EXT_OPM_31_B_KF = (void *) 0xFEC20631;
unsigned char * EXT_OPM_32_C_KF = (void *) 0xFEC20632;
unsigned char * EXT_OPM_33_D_KF = (void *) 0xFEC20633;
unsigned char * EXT_OPM_34_E_KF = (void *) 0xFEC20634;
unsigned char * EXT_OPM_35_F_KF = (void *) 0xFEC20635;
unsigned char * EXT_OPM_36_G_KF = (void *) 0xFEC20636;
unsigned char * EXT_OPM_37_H_KF = (void *) 0xFEC20637;
unsigned char * EXT_OPM_38_A_PMS_AMS = (void *) 0xFEC20638;
unsigned char * EXT_OPM_39_B_PMS_AMS = (void *) 0xFEC20639;
unsigned char * EXT_OPM_3A_C_PMS_AMS = (void *) 0xFEC2063A;
unsigned char * EXT_OPM_3B_D_PMS_AMS = (void *) 0xFEC2063B;
unsigned char * EXT_OPM_3C_E_PMS_AMS = (void *) 0xFEC2063C;
unsigned char * EXT_OPM_3D_F_PMS_AMS = (void *) 0xFEC2063D;
unsigned char * EXT_OPM_3E_G_PMS_AMS = (void *) 0xFEC2063E;
unsigned char * EXT_OPM_3F_H_PMS_AMS = (void *) 0xFEC2063F;
unsigned char * EXT_OPM_40_A_M1_DT1_MUL = (void *) 0xFEC20640;
unsigned char * EXT_OPM_41_B_M1_DT1_MUL = (void *) 0xFEC20641;
unsigned char * EXT_OPM_42_C_M1_DT1_MUL = (void *) 0xFEC20642;
unsigned char * EXT_OPM_43_D_M1_DT1_MUL = (void *) 0xFEC20643;
unsigned char * EXT_OPM_44_E_M1_DT1_MUL = (void *) 0xFEC20644;
unsigned char * EXT_OPM_45_F_M1_DT1_MUL = (void *) 0xFEC20645;
unsigned char * EXT_OPM_46_G_M1_DT1_MUL = (void *) 0xFEC20646;
unsigned char * EXT_OPM_47_H_M1_DT1_MUL = (void *) 0xFEC20647;
unsigned char * EXT_OPM_48_A_M2_DT1_MUL = (void *) 0xFEC20648;
unsigned char * EXT_OPM_49_B_M2_DT1_MUL = (void *) 0xFEC20649;
unsigned char * EXT_OPM_4A_C_M2_DT1_MUL = (void *) 0xFEC2064A;
unsigned char * EXT_OPM_4B_D_M2_DT1_MUL = (void *) 0xFEC2064B;
unsigned char * EXT_OPM_4C_E_M2_DT1_MUL = (void *) 0xFEC2064C;
unsigned char * EXT_OPM_4D_F_M2_DT1_MUL = (void *) 0xFEC2064D;
unsigned char * EXT_OPM_4E_G_M2_DT1_MUL = (void *) 0xFEC2064E;
unsigned char * EXT_OPM_4F_H_M2_DT1_MUL = (void *) 0xFEC2064F;
unsigned char * EXT_OPM_50_A_C1_DT1_MUL = (void *) 0xFEC20650;
unsigned char * EXT_OPM_51_B_C1_DT1_MUL = (void *) 0xFEC20651;
unsigned char * EXT_OPM_52_C_C1_DT1_MUL = (void *) 0xFEC20652;
unsigned char * EXT_OPM_53_D_C1_DT1_MUL = (void *) 0xFEC20653;
unsigned char * EXT_OPM_54_E_C1_DT1_MUL = (void *) 0xFEC20654;
unsigned char * EXT_OPM_55_F_C1_DT1_MUL = (void *) 0xFEC20655;
unsigned char * EXT_OPM_56_G_C1_DT1_MUL = (void *) 0xFEC20656;
unsigned char * EXT_OPM_57_H_C1_DT1_MUL = (void *) 0xFEC20657;
unsigned char * EXT_OPM_58_A_C2_DT1_MUL = (void *) 0xFEC20658;
unsigned char * EXT_OPM_59_B_C2_DT1_MUL = (void *) 0xFEC20659;
unsigned char * EXT_OPM_5A_C_C2_DT1_MUL = (void *) 0xFEC2065A;
unsigned char * EXT_OPM_5B_D_C2_DT1_MUL = (void *) 0xFEC2065B;
unsigned char * EXT_OPM_5C_E_C2_DT1_MUL = (void *) 0xFEC2065C;
unsigned char * EXT_OPM_5D_F_C2_DT1_MUL = (void *) 0xFEC2065D;
unsigned char * EXT_OPM_5E_G_C2_DT1_MUL = (void *) 0xFEC2065E;
unsigned char * EXT_OPM_5F_H_C2_DT1_MUL = (void *) 0xFEC2065F;
unsigned char * EXT_OPM_60_A_M1_TL = (void *) 0xFEC20660;
unsigned char * EXT_OPM_61_B_M1_TL = (void *) 0xFEC20661;
unsigned char * EXT_OPM_62_C_M1_TL = (void *) 0xFEC20662;
unsigned char * EXT_OPM_63_D_M1_TL = (void *) 0xFEC20663;
unsigned char * EXT_OPM_64_E_M1_TL = (void *) 0xFEC20664;
unsigned char * EXT_OPM_65_F_M1_TL = (void *) 0xFEC20665;
unsigned char * EXT_OPM_66_G_M1_TL = (void *) 0xFEC20666;
unsigned char * EXT_OPM_67_H_M1_TL = (void *) 0xFEC20667;
unsigned char * EXT_OPM_68_A_M2_TL = (void *) 0xFEC20668;
unsigned char * EXT_OPM_69_B_M2_TL = (void *) 0xFEC20669;
unsigned char * EXT_OPM_6A_C_M2_TL = (void *) 0xFEC2066A;
unsigned char * EXT_OPM_6B_D_M2_TL = (void *) 0xFEC2066B;
unsigned char * EXT_OPM_6C_E_M2_TL = (void *) 0xFEC2066C;
unsigned char * EXT_OPM_6D_F_M2_TL = (void *) 0xFEC2066D;
unsigned char * EXT_OPM_6E_G_M2_TL = (void *) 0xFEC2066E;
unsigned char * EXT_OPM_6F_H_M2_TL = (void *) 0xFEC2066F;
unsigned char * EXT_OPM_70_A_C1_TL = (void *) 0xFEC20670;
unsigned char * EXT_OPM_71_B_C1_TL = (void *) 0xFEC20671;
unsigned char * EXT_OPM_72_C_C1_TL = (void *) 0xFEC20672;
unsigned char * EXT_OPM_73_D_C1_TL = (void *) 0xFEC20673;
unsigned char * EXT_OPM_74_E_C1_TL = (void *) 0xFEC20674;
unsigned char * EXT_OPM_75_F_C1_TL = (void *) 0xFEC20675;
unsigned char * EXT_OPM_76_G_C1_TL = (void *) 0xFEC20676;
unsigned char * EXT_OPM_77_H_C1_TL = (void *) 0xFEC20677;
unsigned char * EXT_OPM_78_A_C2_TL = (void *) 0xFEC20678;
unsigned char * EXT_OPM_79_B_C2_TL = (void *) 0xFEC20679;
unsigned char * EXT_OPM_7A_C_C2_TL = (void *) 0xFEC2067A;
unsigned char * EXT_OPM_7B_D_C2_TL = (void *) 0xFEC2067B;
unsigned char * EXT_OPM_7C_E_C2_TL = (void *) 0xFEC2067C;
unsigned char * EXT_OPM_7D_F_C2_TL = (void *) 0xFEC2067D;
unsigned char * EXT_OPM_7E_G_C2_TL = (void *) 0xFEC2067E;
unsigned char * EXT_OPM_7F_H_C2_TL = (void *) 0xFEC2067F;
unsigned char * EXT_OPM_80_A_M1_KS_AR = (void *) 0xFEC20680;
unsigned char * EXT_OPM_81_B_M1_KS_AR = (void *) 0xFEC20681;
unsigned char * EXT_OPM_82_C_M1_KS_AR = (void *) 0xFEC20682;
unsigned char * EXT_OPM_83_D_M1_KS_AR = (void *) 0xFEC20683;
unsigned char * EXT_OPM_84_E_M1_KS_AR = (void *) 0xFEC20684;
unsigned char * EXT_OPM_85_F_M1_KS_AR = (void *) 0xFEC20685;
unsigned char * EXT_OPM_86_G_M1_KS_AR = (void *) 0xFEC20686;
unsigned char * EXT_OPM_87_H_M1_KS_AR = (void *) 0xFEC20687;
unsigned char * EXT_OPM_88_A_M2_KS_AR = (void *) 0xFEC20688;
unsigned char * EXT_OPM_89_B_M2_KS_AR = (void *) 0xFEC20689;
unsigned char * EXT_OPM_8A_C_M2_KS_AR = (void *) 0xFEC2068A;
unsigned char * EXT_OPM_8B_D_M2_KS_AR = (void *) 0xFEC2068B;
unsigned char * EXT_OPM_8C_E_M2_KS_AR = (void *) 0xFEC2068C;
unsigned char * EXT_OPM_8D_F_M2_KS_AR = (void *) 0xFEC2068D;
unsigned char * EXT_OPM_8E_G_M2_KS_AR = (void *) 0xFEC2068E;
unsigned char * EXT_OPM_8F_H_M2_KS_AR = (void *) 0xFEC2068F;
unsigned char * EXT_OPM_90_A_C1_KS_AR = (void *) 0xFEC20690;
unsigned char * EXT_OPM_91_B_C1_KS_AR = (void *) 0xFEC20691;
unsigned char * EXT_OPM_92_C_C1_KS_AR = (void *) 0xFEC20692;
unsigned char * EXT_OPM_93_D_C1_KS_AR = (void *) 0xFEC20693;
unsigned char * EXT_OPM_94_E_C1_KS_AR = (void *) 0xFEC20694;
unsigned char * EXT_OPM_95_F_C1_KS_AR = (void *) 0xFEC20695;
unsigned char * EXT_OPM_96_G_C1_KS_AR = (void *) 0xFEC20696;
unsigned char * EXT_OPM_97_H_C1_KS_AR = (void *) 0xFEC20697;
unsigned char * EXT_OPM_98_A_C2_KS_AR = (void *) 0xFEC20698;
unsigned char * EXT_OPM_99_B_C2_KS_AR = (void *) 0xFEC20699;
unsigned char * EXT_OPM_9A_C_C2_KS_AR = (void *) 0xFEC2069A;
unsigned char * EXT_OPM_9B_D_C2_KS_AR = (void *) 0xFEC2069B;
unsigned char * EXT_OPM_9C_E_C2_KS_AR = (void *) 0xFEC2069C;
unsigned char * EXT_OPM_9D_F_C2_KS_AR = (void *) 0xFEC2069D;
unsigned char * EXT_OPM_9E_G_C2_KS_AR = (void *) 0xFEC2069E;
unsigned char * EXT_OPM_9F_H_C2_KS_AR = (void *) 0xFEC2069F;
unsigned char * EXT_OPM_A0_A_M1_AMS_EN_D1R = (void *) 0xFEC206A0;
unsigned char * EXT_OPM_A1_B_M1_AMS_EN_D1R = (void *) 0xFEC206A1;
unsigned char * EXT_OPM_A2_C_M1_AMS_EN_D1R = (void *) 0xFEC206A2;
unsigned char * EXT_OPM_A3_D_M1_AMS_EN_D1R = (void *) 0xFEC206A3;
unsigned char * EXT_OPM_A4_E_M1_AMS_EN_D1R = (void *) 0xFEC206A4;
unsigned char * EXT_OPM_A5_F_M1_AMS_EN_D1R = (void *) 0xFEC206A5;
unsigned char * EXT_OPM_A6_G_M1_AMS_EN_D1R = (void *) 0xFEC206A6;
unsigned char * EXT_OPM_A7_H_M1_AMS_EN_D1R = (void *) 0xFEC206A7;
unsigned char * EXT_OPM_A8_A_M2_AMS_EN_D1R = (void *) 0xFEC206A8;
unsigned char * EXT_OPM_A9_B_M2_AMS_EN_D1R = (void *) 0xFEC206A9;
unsigned char * EXT_OPM_AA_C_M2_AMS_EN_D1R = (void *) 0xFEC206AA;
unsigned char * EXT_OPM_AB_D_M2_AMS_EN_D1R = (void *) 0xFEC206AB;
unsigned char * EXT_OPM_AC_E_M2_AMS_EN_D1R = (void *) 0xFEC206AC;
unsigned char * EXT_OPM_AD_F_M2_AMS_EN_D1R = (void *) 0xFEC206AD;
unsigned char * EXT_OPM_AE_G_M2_AMS_EN_D1R = (void *) 0xFEC206AE;
unsigned char * EXT_OPM_AF_H_M2_AMS_EN_D1R = (void *) 0xFEC206AF;
unsigned char * EXT_OPM_B0_A_C1_AMS_EN_D1R = (void *) 0xFEC206B0;
unsigned char * EXT_OPM_B1_B_C1_AMS_EN_D1R = (void *) 0xFEC206B1;
unsigned char * EXT_OPM_B2_C_C1_AMS_EN_D1R = (void *) 0xFEC206B2;
unsigned char * EXT_OPM_B3_D_C1_AMS_EN_D1R = (void *) 0xFEC206B3;
unsigned char * EXT_OPM_B4_E_C1_AMS_EN_D1R = (void *) 0xFEC206B4;
unsigned char * EXT_OPM_B5_F_C1_AMS_EN_D1R = (void *) 0xFEC206B5;
unsigned char * EXT_OPM_B6_G_C1_AMS_EN_D1R = (void *) 0xFEC206B6;
unsigned char * EXT_OPM_B7_H_C1_AMS_EN_D1R = (void *) 0xFEC206B7;
unsigned char * EXT_OPM_B8_A_C2_AMS_EN_D1R = (void *) 0xFEC206B8;
unsigned char * EXT_OPM_B9_B_C2_AMS_EN_D1R = (void *) 0xFEC206B9;
unsigned char * EXT_OPM_BA_C_C2_AMS_EN_D1R = (void *) 0xFEC206BA;
unsigned char * EXT_OPM_BB_D_C2_AMS_EN_D1R = (void *) 0xFEC206BB;
unsigned char * EXT_OPM_BC_E_C2_AMS_EN_D1R = (void *) 0xFEC206BC;
unsigned char * EXT_OPM_BD_F_C2_AMS_EN_D1R = (void *) 0xFEC206BD;
unsigned char * EXT_OPM_BE_G_C2_AMS_EN_D1R = (void *) 0xFEC206BE;
unsigned char * EXT_OPM_BF_H_C2_AMS_EN_D1R = (void *) 0xFEC206BF;
unsigned char * EXT_OPM_C0_A_M1_DT2_D2R = (void *) 0xFEC206C0;
unsigned char * EXT_OPM_C1_B_M1_DT2_D2R = (void *) 0xFEC206C1;
unsigned char * EXT_OPM_C2_C_M1_DT2_D2R = (void *) 0xFEC206C2;
unsigned char * EXT_OPM_C3_D_M1_DT2_D2R = (void *) 0xFEC206C3;
unsigned char * EXT_OPM_C4_E_M1_DT2_D2R = (void *) 0xFEC206C4;
unsigned char * EXT_OPM_C5_F_M1_DT2_D2R = (void *) 0xFEC206C5;
unsigned char * EXT_OPM_C6_G_M1_DT2_D2R = (void *) 0xFEC206C6;
unsigned char * EXT_OPM_C7_H_M1_DT2_D2R = (void *) 0xFEC206C7;
unsigned char * EXT_OPM_C8_A_M2_DT2_D2R = (void *) 0xFEC206C8;
unsigned char * EXT_OPM_C9_B_M2_DT2_D2R = (void *) 0xFEC206C9;
unsigned char * EXT_OPM_CA_C_M2_DT2_D2R = (void *) 0xFEC206CA;
unsigned char * EXT_OPM_CB_D_M2_DT2_D2R = (void *) 0xFEC206CB;
unsigned char * EXT_OPM_CC_E_M2_DT2_D2R = (void *) 0xFEC206CC;
unsigned char * EXT_OPM_CD_F_M2_DT2_D2R = (void *) 0xFEC206CD;
unsigned char * EXT_OPM_CE_G_M2_DT2_D2R = (void *) 0xFEC206CE;
unsigned char * EXT_OPM_CF_H_M2_DT2_D2R = (void *) 0xFEC206CF;
unsigned char * EXT_OPM_D0_A_C1_DT2_D2R = (void *) 0xFEC206D0;
unsigned char * EXT_OPM_D1_B_C1_DT2_D2R = (void *) 0xFEC206D1;
unsigned char * EXT_OPM_D2_C_C1_DT2_D2R = (void *) 0xFEC206D2;
unsigned char * EXT_OPM_D3_D_C1_DT2_D2R = (void *) 0xFEC206D3;
unsigned char * EXT_OPM_D4_E_C1_DT2_D2R = (void *) 0xFEC206D4;
unsigned char * EXT_OPM_D5_F_C1_DT2_D2R = (void *) 0xFEC206D5;
unsigned char * EXT_OPM_D6_G_C1_DT2_D2R = (void *) 0xFEC206D6;
unsigned char * EXT_OPM_D7_H_C1_DT2_D2R = (void *) 0xFEC206D7;
unsigned char * EXT_OPM_D8_A_C2_DT2_D2R = (void *) 0xFEC206D8;
unsigned char * EXT_OPM_D9_B_C2_DT2_D2R = (void *) 0xFEC206D9;
unsigned char * EXT_OPM_DA_C_C2_DT2_D2R = (void *) 0xFEC206DA;
unsigned char * EXT_OPM_DB_D_C2_DT2_D2R = (void *) 0xFEC206DB;
unsigned char * EXT_OPM_DC_E_C2_DT2_D2R = (void *) 0xFEC206DC;
unsigned char * EXT_OPM_DD_F_C2_DT2_D2R = (void *) 0xFEC206DD;
unsigned char * EXT_OPM_DE_G_C2_DT2_D2R = (void *) 0xFEC206DE;
unsigned char * EXT_OPM_DF_H_C2_DT2_D2R = (void *) 0xFEC206DF;
unsigned char * EXT_OPM_E0_A_M1_D1L_RR = (void *) 0xFEC206E0;
unsigned char * EXT_OPM_E1_B_M1_D1L_RR = (void *) 0xFEC206E1;
unsigned char * EXT_OPM_E2_C_M1_D1L_RR = (void *) 0xFEC206E2;
unsigned char * EXT_OPM_E3_D_M1_D1L_RR = (void *) 0xFEC206E3;
unsigned char * EXT_OPM_E4_E_M1_D1L_RR = (void *) 0xFEC206E4;
unsigned char * EXT_OPM_E5_F_M1_D1L_RR = (void *) 0xFEC206E5;
unsigned char * EXT_OPM_E6_G_M1_D1L_RR = (void *) 0xFEC206E6;
unsigned char * EXT_OPM_E7_H_M1_D1L_RR = (void *) 0xFEC206E7;
unsigned char * EXT_OPM_E8_A_M2_D1L_RR = (void *) 0xFEC206E8;
unsigned char * EXT_OPM_E9_B_M2_D1L_RR = (void *) 0xFEC206E9;
unsigned char * EXT_OPM_EA_C_M2_D1L_RR = (void *) 0xFEC206EA;
unsigned char * EXT_OPM_EB_D_M2_D1L_RR = (void *) 0xFEC206EB;
unsigned char * EXT_OPM_EC_E_M2_D1L_RR = (void *) 0xFEC206EC;
unsigned char * EXT_OPM_ED_F_M2_D1L_RR = (void *) 0xFEC206ED;
unsigned char * EXT_OPM_EE_G_M2_D1L_RR = (void *) 0xFEC206EE;
unsigned char * EXT_OPM_EF_H_M2_D1L_RR = (void *) 0xFEC206EF;
unsigned char * EXT_OPM_F0_A_C1_D1L_RR = (void *) 0xFEC206F0;
unsigned char * EXT_OPM_F1_B_C1_D1L_RR = (void *) 0xFEC206F1;
unsigned char * EXT_OPM_F2_C_C1_D1L_RR = (void *) 0xFEC206F2;
unsigned char * EXT_OPM_F3_D_C1_D1L_RR = (void *) 0xFEC206F3;
unsigned char * EXT_OPM_F4_E_C1_D1L_RR = (void *) 0xFEC206F4;
unsigned char * EXT_OPM_F5_F_C1_D1L_RR = (void *) 0xFEC206F5;
unsigned char * EXT_OPM_F6_G_C1_D1L_RR = (void *) 0xFEC206F6;
unsigned char * EXT_OPM_F7_H_C1_D1L_RR = (void *) 0xFEC206F7;
unsigned char * EXT_OPM_F8_A_C2_D1L_RR = (void *) 0xFEC206F8;
unsigned char * EXT_OPM_F9_B_C2_D1L_RR = (void *) 0xFEC206F9;
unsigned char * EXT_OPM_FA_C_C2_D1L_RR = (void *) 0xFEC206FA;
unsigned char * EXT_OPM_FB_D_C2_D1L_RR = (void *) 0xFEC206FB;
unsigned char * EXT_OPM_FC_E_C2_D1L_RR = (void *) 0xFEC206FC;
unsigned char * EXT_OPM_FD_F_C2_D1L_RR = (void *) 0xFEC206FD;
unsigned char * EXT_OPM_FE_G_C2_D1L_RR = (void *) 0xFEC206FE;
unsigned char * EXT_OPM_FF_H_C2_D1L_RR = (void *) 0xFEC206FF;
///////////////////////////////////////////////////
// Internal OPM 0xFEC20C00
unsigned char * INT_OPM_01_TEST = (void *) 0xFEC20C01;
unsigned char * INT_OPM_08_KEY_ON_OFF = (void *) 0xFEC20C08;
unsigned char * INT_OPM_0F_NE_NFREQ = (void *) 0xFEC20C0F;
unsigned char * INT_OPM_10_CLK_A1 = (void *) 0xFEC20C10;
unsigned char * INT_OPM_11_CLK_A2 = (void *) 0xFEC20C11;
unsigned char * INT_OPM_12_CLK_B = (void *) 0xFEC20C12;
unsigned char * INT_OPM_14_CMS_FLAG_RST_IRQEN_LD = (void *) 0xFEC20C14;
unsigned char * INT_OPM_18_LFRQ = (void *) 0xFEC20C18;
unsigned char * INT_OPM_19_PMD_AMD = (void *) 0xFEC20C19;
unsigned char * INT_OPM_1B_CT_W = (void *) 0xFEC20C1B;
unsigned char * INT_OPM_20_A_RL_FR_CONNECT = (void *) 0xFEC20C20;
unsigned char * INT_OPM_21_B_RL_FR_CONNECT = (void *) 0xFEC20C21;
unsigned char * INT_OPM_22_C_RL_FR_CONNECT = (void *) 0xFEC20C22;
unsigned char * INT_OPM_23_D_RL_FR_CONNECT = (void *) 0xFEC20C23;
unsigned char * INT_OPM_24_E_RL_FR_CONNECT = (void *) 0xFEC20C24;
unsigned char * INT_OPM_25_F_RL_FR_CONNECT = (void *) 0xFEC20C25;
unsigned char * INT_OPM_26_G_RL_FR_CONNECT = (void *) 0xFEC20C26;
unsigned char * INT_OPM_27_H_RL_FR_CONNECT = (void *) 0xFEC20C27;
unsigned char * INT_OPM_28_A_KC = (void *) 0xFEC20C28;
unsigned char * INT_OPM_29_B_KC = (void *) 0xFEC20C29;
unsigned char * INT_OPM_2A_C_KC = (void *) 0xFEC20C2A;
unsigned char * INT_OPM_2B_D_KC = (void *) 0xFEC20C2B;
unsigned char * INT_OPM_2C_E_KC = (void *) 0xFEC20C2C;
unsigned char * INT_OPM_2D_F_KC = (void *) 0xFEC20C2D;
unsigned char * INT_OPM_2E_G_KC = (void *) 0xFEC20C2E;
unsigned char * INT_OPM_2F_H_KC = (void *) 0xFEC20C2F;
unsigned char * INT_OPM_30_A_KF = (void *) 0xFEC20C30;
unsigned char * INT_OPM_31_B_KF = (void *) 0xFEC20C31;
unsigned char * INT_OPM_32_C_KF = (void *) 0xFEC20C32;
unsigned char * INT_OPM_33_D_KF = (void *) 0xFEC20C33;
unsigned char * INT_OPM_34_E_KF = (void *) 0xFEC20C34;
unsigned char * INT_OPM_35_F_KF = (void *) 0xFEC20C35;
unsigned char * INT_OPM_36_G_KF = (void *) 0xFEC20C36;
unsigned char * INT_OPM_37_H_KF = (void *) 0xFEC20C37;
unsigned char * INT_OPM_38_A_PMS_AMS = (void *) 0xFEC20C38;
unsigned char * INT_OPM_39_B_PMS_AMS = (void *) 0xFEC20C39;
unsigned char * INT_OPM_3A_C_PMS_AMS = (void *) 0xFEC20C3A;
unsigned char * INT_OPM_3B_D_PMS_AMS = (void *) 0xFEC20C3B;
unsigned char * INT_OPM_3C_E_PMS_AMS = (void *) 0xFEC20C3C;
unsigned char * INT_OPM_3D_F_PMS_AMS = (void *) 0xFEC20C3D;
unsigned char * INT_OPM_3E_G_PMS_AMS = (void *) 0xFEC20C3E;
unsigned char * INT_OPM_3F_H_PMS_AMS = (void *) 0xFEC20C3F;
unsigned char * INT_OPM_40_A_M1_DT1_MUL = (void *) 0xFEC20C40;
unsigned char * INT_OPM_41_B_M1_DT1_MUL = (void *) 0xFEC20C41;
unsigned char * INT_OPM_42_C_M1_DT1_MUL = (void *) 0xFEC20C42;
unsigned char * INT_OPM_43_D_M1_DT1_MUL = (void *) 0xFEC20C43;
unsigned char * INT_OPM_44_E_M1_DT1_MUL = (void *) 0xFEC20C44;
unsigned char * INT_OPM_45_F_M1_DT1_MUL = (void *) 0xFEC20C45;
unsigned char * INT_OPM_46_G_M1_DT1_MUL = (void *) 0xFEC20C46;
unsigned char * INT_OPM_47_H_M1_DT1_MUL = (void *) 0xFEC20C47;
unsigned char * INT_OPM_48_A_M2_DT1_MUL = (void *) 0xFEC20C48;
unsigned char * INT_OPM_49_B_M2_DT1_MUL = (void *) 0xFEC20C49;
unsigned char * INT_OPM_4A_C_M2_DT1_MUL = (void *) 0xFEC20C4A;
unsigned char * INT_OPM_4B_D_M2_DT1_MUL = (void *) 0xFEC20C4B;
unsigned char * INT_OPM_4C_E_M2_DT1_MUL = (void *) 0xFEC20C4C;
unsigned char * INT_OPM_4D_F_M2_DT1_MUL = (void *) 0xFEC20C4D;
unsigned char * INT_OPM_4E_G_M2_DT1_MUL = (void *) 0xFEC20C4E;
unsigned char * INT_OPM_4F_H_M2_DT1_MUL = (void *) 0xFEC20C4F;
unsigned char * INT_OPM_50_A_C1_DT1_MUL = (void *) 0xFEC20C50;
unsigned char * INT_OPM_51_B_C1_DT1_MUL = (void *) 0xFEC20C51;
unsigned char * INT_OPM_52_C_C1_DT1_MUL = (void *) 0xFEC20C52;
unsigned char * INT_OPM_53_D_C1_DT1_MUL = (void *) 0xFEC20C53;
unsigned char * INT_OPM_54_E_C1_DT1_MUL = (void *) 0xFEC20C54;
unsigned char * INT_OPM_55_F_C1_DT1_MUL = (void *) 0xFEC20C55;
unsigned char * INT_OPM_56_G_C1_DT1_MUL = (void *) 0xFEC20C56;
unsigned char * INT_OPM_57_H_C1_DT1_MUL = (void *) 0xFEC20C57;
unsigned char * INT_OPM_58_A_C2_DT1_MUL = (void *) 0xFEC20C58;
unsigned char * INT_OPM_59_B_C2_DT1_MUL = (void *) 0xFEC20C59;
unsigned char * INT_OPM_5A_C_C2_DT1_MUL = (void *) 0xFEC20C5A;
unsigned char * INT_OPM_5B_D_C2_DT1_MUL = (void *) 0xFEC20C5B;
unsigned char * INT_OPM_5C_E_C2_DT1_MUL = (void *) 0xFEC20C5C;
unsigned char * INT_OPM_5D_F_C2_DT1_MUL = (void *) 0xFEC20C5D;
unsigned char * INT_OPM_5E_G_C2_DT1_MUL = (void *) 0xFEC20C5E;
unsigned char * INT_OPM_5F_H_C2_DT1_MUL = (void *) 0xFEC20C5F;
unsigned char * INT_OPM_60_A_M1_TL = (void *) 0xFEC20C60;
unsigned char * INT_OPM_61_B_M1_TL = (void *) 0xFEC20C61;
unsigned char * INT_OPM_62_C_M1_TL = (void *) 0xFEC20C62;
unsigned char * INT_OPM_63_D_M1_TL = (void *) 0xFEC20C63;
unsigned char * INT_OPM_64_E_M1_TL = (void *) 0xFEC20C64;
unsigned char * INT_OPM_65_F_M1_TL = (void *) 0xFEC20C65;
unsigned char * INT_OPM_66_G_M1_TL = (void *) 0xFEC20C66;
unsigned char * INT_OPM_67_H_M1_TL = (void *) 0xFEC20C67;
unsigned char * INT_OPM_68_A_M2_TL = (void *) 0xFEC20C68;
unsigned char * INT_OPM_69_B_M2_TL = (void *) 0xFEC20C69;
unsigned char * INT_OPM_6A_C_M2_TL = (void *) 0xFEC20C6A;
unsigned char * INT_OPM_6B_D_M2_TL = (void *) 0xFEC20C6B;
unsigned char * INT_OPM_6C_E_M2_TL = (void *) 0xFEC20C6C;
unsigned char * INT_OPM_6D_F_M2_TL = (void *) 0xFEC20C6D;
unsigned char * INT_OPM_6E_G_M2_TL = (void *) 0xFEC20C6E;
unsigned char * INT_OPM_6F_H_M2_TL = (void *) 0xFEC20C6F;
unsigned char * INT_OPM_70_A_C1_TL = (void *) 0xFEC20C70;
unsigned char * INT_OPM_71_B_C1_TL = (void *) 0xFEC20C71;
unsigned char * INT_OPM_72_C_C1_TL = (void *) 0xFEC20C72;
unsigned char * INT_OPM_73_D_C1_TL = (void *) 0xFEC20C73;
unsigned char * INT_OPM_74_E_C1_TL = (void *) 0xFEC20C74;
unsigned char * INT_OPM_75_F_C1_TL = (void *) 0xFEC20C75;
unsigned char * INT_OPM_76_G_C1_TL = (void *) 0xFEC20C76;
unsigned char * INT_OPM_77_H_C1_TL = (void *) 0xFEC20C77;
unsigned char * INT_OPM_78_A_C2_TL = (void *) 0xFEC20C78;
unsigned char * INT_OPM_79_B_C2_TL = (void *) 0xFEC20C79;
unsigned char * INT_OPM_7A_C_C2_TL = (void *) 0xFEC20C7A;
unsigned char * INT_OPM_7B_D_C2_TL = (void *) 0xFEC20C7B;
unsigned char * INT_OPM_7C_E_C2_TL = (void *) 0xFEC20C7C;
unsigned char * INT_OPM_7D_F_C2_TL = (void *) 0xFEC20C7D;
unsigned char * INT_OPM_7E_G_C2_TL = (void *) 0xFEC20C7E;
unsigned char * INT_OPM_7F_H_C2_TL = (void *) 0xFEC20C7F;
unsigned char * INT_OPM_80_A_M1_KS_AR = (void *) 0xFEC20C80;
unsigned char * INT_OPM_81_B_M1_KS_AR = (void *) 0xFEC20C81;
unsigned char * INT_OPM_82_C_M1_KS_AR = (void *) 0xFEC20C82;
unsigned char * INT_OPM_83_D_M1_KS_AR = (void *) 0xFEC20C83;
unsigned char * INT_OPM_84_E_M1_KS_AR = (void *) 0xFEC20C84;
unsigned char * INT_OPM_85_F_M1_KS_AR = (void *) 0xFEC20C85;
unsigned char * INT_OPM_86_G_M1_KS_AR = (void *) 0xFEC20C86;
unsigned char * INT_OPM_87_H_M1_KS_AR = (void *) 0xFEC20C87;
unsigned char * INT_OPM_88_A_M2_KS_AR = (void *) 0xFEC20C88;
unsigned char * INT_OPM_89_B_M2_KS_AR = (void *) 0xFEC20C89;
unsigned char * INT_OPM_8A_C_M2_KS_AR = (void *) 0xFEC20C8A;
unsigned char * INT_OPM_8B_D_M2_KS_AR = (void *) 0xFEC20C8B;
unsigned char * INT_OPM_8C_E_M2_KS_AR = (void *) 0xFEC20C8C;
unsigned char * INT_OPM_8D_F_M2_KS_AR = (void *) 0xFEC20C8D;
unsigned char * INT_OPM_8E_G_M2_KS_AR = (void *) 0xFEC20C8E;
unsigned char * INT_OPM_8F_H_M2_KS_AR = (void *) 0xFEC20C8F;
unsigned char * INT_OPM_90_A_C1_KS_AR = (void *) 0xFEC20C90;
unsigned char * INT_OPM_91_B_C1_KS_AR = (void *) 0xFEC20C91;
unsigned char * INT_OPM_92_C_C1_KS_AR = (void *) 0xFEC20C92;
unsigned char * INT_OPM_93_D_C1_KS_AR = (void *) 0xFEC20C93;
unsigned char * INT_OPM_94_E_C1_KS_AR = (void *) 0xFEC20C94;
unsigned char * INT_OPM_95_F_C1_KS_AR = (void *) 0xFEC20C95;
unsigned char * INT_OPM_96_G_C1_KS_AR = (void *) 0xFEC20C96;
unsigned char * INT_OPM_97_H_C1_KS_AR = (void *) 0xFEC20C97;
unsigned char * INT_OPM_98_A_C2_KS_AR = (void *) 0xFEC20C98;
unsigned char * INT_OPM_99_B_C2_KS_AR = (void *) 0xFEC20C99;
unsigned char * INT_OPM_9A_C_C2_KS_AR = (void *) 0xFEC20C9A;
unsigned char * INT_OPM_9B_D_C2_KS_AR = (void *) 0xFEC20C9B;
unsigned char * INT_OPM_9C_E_C2_KS_AR = (void *) 0xFEC20C9C;
unsigned char * INT_OPM_9D_F_C2_KS_AR = (void *) 0xFEC20C9D;
unsigned char * INT_OPM_9E_G_C2_KS_AR = (void *) 0xFEC20C9E;
unsigned char * INT_OPM_9F_H_C2_KS_AR = (void *) 0xFEC20C9F;
unsigned char * INT_OPM_A0_A_M1_AMS_EN_D1R = (void *) 0xFEC20CA0;
unsigned char * INT_OPM_A1_B_M1_AMS_EN_D1R = (void *) 0xFEC20CA1;
unsigned char * INT_OPM_A2_C_M1_AMS_EN_D1R = (void *) 0xFEC20CA2;
unsigned char * INT_OPM_A3_D_M1_AMS_EN_D1R = (void *) 0xFEC20CA3;
unsigned char * INT_OPM_A4_E_M1_AMS_EN_D1R = (void *) 0xFEC20CA4;
unsigned char * INT_OPM_A5_F_M1_AMS_EN_D1R = (void *) 0xFEC20CA5;
unsigned char * INT_OPM_A6_G_M1_AMS_EN_D1R = (void *) 0xFEC20CA6;
unsigned char * INT_OPM_A7_H_M1_AMS_EN_D1R = (void *) 0xFEC20CA7;
unsigned char * INT_OPM_A8_A_M2_AMS_EN_D1R = (void *) 0xFEC20CA8;
unsigned char * INT_OPM_A9_B_M2_AMS_EN_D1R = (void *) 0xFEC20CA9;
unsigned char * INT_OPM_AA_C_M2_AMS_EN_D1R = (void *) 0xFEC20CAA;
unsigned char * INT_OPM_AB_D_M2_AMS_EN_D1R = (void *) 0xFEC20CAB;
unsigned char * INT_OPM_AC_E_M2_AMS_EN_D1R = (void *) 0xFEC20CAC;
unsigned char * INT_OPM_AD_F_M2_AMS_EN_D1R = (void *) 0xFEC20CAD;
unsigned char * INT_OPM_AE_G_M2_AMS_EN_D1R = (void *) 0xFEC20CAE;
unsigned char * INT_OPM_AF_H_M2_AMS_EN_D1R = (void *) 0xFEC20CAF;
unsigned char * INT_OPM_B0_A_C1_AMS_EN_D1R = (void *) 0xFEC20CB0;
unsigned char * INT_OPM_B1_B_C1_AMS_EN_D1R = (void *) 0xFEC20CB1;
unsigned char * INT_OPM_B2_C_C1_AMS_EN_D1R = (void *) 0xFEC20CB2;
unsigned char * INT_OPM_B3_D_C1_AMS_EN_D1R = (void *) 0xFEC20CB3;
unsigned char * INT_OPM_B4_E_C1_AMS_EN_D1R = (void *) 0xFEC20CB4;
unsigned char * INT_OPM_B5_F_C1_AMS_EN_D1R = (void *) 0xFEC20CB5;
unsigned char * INT_OPM_B6_G_C1_AMS_EN_D1R = (void *) 0xFEC20CB6;
unsigned char * INT_OPM_B7_H_C1_AMS_EN_D1R = (void *) 0xFEC20CB7;
unsigned char * INT_OPM_B8_A_C2_AMS_EN_D1R = (void *) 0xFEC20CB8;
unsigned char * INT_OPM_B9_B_C2_AMS_EN_D1R = (void *) 0xFEC20CB9;
unsigned char * INT_OPM_BA_C_C2_AMS_EN_D1R = (void *) 0xFEC20CBA;
unsigned char * INT_OPM_BB_D_C2_AMS_EN_D1R = (void *) 0xFEC20CBB;
unsigned char * INT_OPM_BC_E_C2_AMS_EN_D1R = (void *) 0xFEC20CBC;
unsigned char * INT_OPM_BD_F_C2_AMS_EN_D1R = (void *) 0xFEC20CBD;
unsigned char * INT_OPM_BE_G_C2_AMS_EN_D1R = (void *) 0xFEC20CBE;
unsigned char * INT_OPM_BF_H_C2_AMS_EN_D1R = (void *) 0xFEC20CBF;
unsigned char * INT_OPM_C0_A_M1_DT2_D2R = (void *) 0xFEC20CC0;
unsigned char * INT_OPM_C1_B_M1_DT2_D2R = (void *) 0xFEC20CC1;
unsigned char * INT_OPM_C2_C_M1_DT2_D2R = (void *) 0xFEC20CC2;
unsigned char * INT_OPM_C3_D_M1_DT2_D2R = (void *) 0xFEC20CC3;
unsigned char * INT_OPM_C4_E_M1_DT2_D2R = (void *) 0xFEC20CC4;
unsigned char * INT_OPM_C5_F_M1_DT2_D2R = (void *) 0xFEC20CC5;
unsigned char * INT_OPM_C6_G_M1_DT2_D2R = (void *) 0xFEC20CC6;
unsigned char * INT_OPM_C7_H_M1_DT2_D2R = (void *) 0xFEC20CC7;
unsigned char * INT_OPM_C8_A_M2_DT2_D2R = (void *) 0xFEC20CC8;
unsigned char * INT_OPM_C9_B_M2_DT2_D2R = (void *) 0xFEC20CC9;
unsigned char * INT_OPM_CA_C_M2_DT2_D2R = (void *) 0xFEC20CCA;
unsigned char * INT_OPM_CB_D_M2_DT2_D2R = (void *) 0xFEC20CCB;
unsigned char * INT_OPM_CC_E_M2_DT2_D2R = (void *) 0xFEC20CCC;
unsigned char * INT_OPM_CD_F_M2_DT2_D2R = (void *) 0xFEC20CCD;
unsigned char * INT_OPM_CE_G_M2_DT2_D2R = (void *) 0xFEC20CCE;
unsigned char * INT_OPM_CF_H_M2_DT2_D2R = (void *) 0xFEC20CCF;
unsigned char * INT_OPM_D0_A_C1_DT2_D2R = (void *) 0xFEC20CD0;
unsigned char * INT_OPM_D1_B_C1_DT2_D2R = (void *) 0xFEC20CD1;
unsigned char * INT_OPM_D2_C_C1_DT2_D2R = (void *) 0xFEC20CD2;
unsigned char * INT_OPM_D3_D_C1_DT2_D2R = (void *) 0xFEC20CD3;
unsigned char * INT_OPM_D4_E_C1_DT2_D2R = (void *) 0xFEC20CD4;
unsigned char * INT_OPM_D5_F_C1_DT2_D2R = (void *) 0xFEC20CD5;
unsigned char * INT_OPM_D6_G_C1_DT2_D2R = (void *) 0xFEC20CD6;
unsigned char * INT_OPM_D7_H_C1_DT2_D2R = (void *) 0xFEC20CD7;
unsigned char * INT_OPM_D8_A_C2_DT2_D2R = (void *) 0xFEC20CD8;
unsigned char * INT_OPM_D9_B_C2_DT2_D2R = (void *) 0xFEC20CD9;
unsigned char * INT_OPM_DA_C_C2_DT2_D2R = (void *) 0xFEC20CDA;
unsigned char * INT_OPM_DB_D_C2_DT2_D2R = (void *) 0xFEC20CDB;
unsigned char * INT_OPM_DC_E_C2_DT2_D2R = (void *) 0xFEC20CDC;
unsigned char * INT_OPM_DD_F_C2_DT2_D2R = (void *) 0xFEC20CDD;
unsigned char * INT_OPM_DE_G_C2_DT2_D2R = (void *) 0xFEC20CDE;
unsigned char * INT_OPM_DF_H_C2_DT2_D2R = (void *) 0xFEC20CDF;
unsigned char * INT_OPM_E0_A_M1_D1L_RR = (void *) 0xFEC20CE0;
unsigned char * INT_OPM_E1_B_M1_D1L_RR = (void *) 0xFEC20CE1;
unsigned char * INT_OPM_E2_C_M1_D1L_RR = (void *) 0xFEC20CE2;
unsigned char * INT_OPM_E3_D_M1_D1L_RR = (void *) 0xFEC20CE3;
unsigned char * INT_OPM_E4_E_M1_D1L_RR = (void *) 0xFEC20CE4;
unsigned char * INT_OPM_E5_F_M1_D1L_RR = (void *) 0xFEC20CE5;
unsigned char * INT_OPM_E6_G_M1_D1L_RR = (void *) 0xFEC20CE6;
unsigned char * INT_OPM_E7_H_M1_D1L_RR = (void *) 0xFEC20CE7;
unsigned char * INT_OPM_E8_A_M2_D1L_RR = (void *) 0xFEC20CE8;
unsigned char * INT_OPM_E9_B_M2_D1L_RR = (void *) 0xFEC20CE9;
unsigned char * INT_OPM_EA_C_M2_D1L_RR = (void *) 0xFEC20CEA;
unsigned char * INT_OPM_EB_D_M2_D1L_RR = (void *) 0xFEC20CEB;
unsigned char * INT_OPM_EC_E_M2_D1L_RR = (void *) 0xFEC20CEC;
unsigned char * INT_OPM_ED_F_M2_D1L_RR = (void *) 0xFEC20CED;
unsigned char * INT_OPM_EE_G_M2_D1L_RR = (void *) 0xFEC20CEE;
unsigned char * INT_OPM_EF_H_M2_D1L_RR = (void *) 0xFEC20CEF;
unsigned char * INT_OPM_F0_A_C1_D1L_RR = (void *) 0xFEC20CF0;
unsigned char * INT_OPM_F1_B_C1_D1L_RR = (void *) 0xFEC20CF1;
unsigned char * INT_OPM_F2_C_C1_D1L_RR = (void *) 0xFEC20CF2;
unsigned char * INT_OPM_F3_D_C1_D1L_RR = (void *) 0xFEC20CF3;
unsigned char * INT_OPM_F4_E_C1_D1L_RR = (void *) 0xFEC20CF4;
unsigned char * INT_OPM_F5_F_C1_D1L_RR = (void *) 0xFEC20CF5;
unsigned char * INT_OPM_F6_G_C1_D1L_RR = (void *) 0xFEC20CF6;
unsigned char * INT_OPM_F7_H_C1_D1L_RR = (void *) 0xFEC20CF7;
unsigned char * INT_OPM_F8_A_C2_D1L_RR = (void *) 0xFEC20CF8;
unsigned char * INT_OPM_F9_B_C2_D1L_RR = (void *) 0xFEC20CF9;
unsigned char * INT_OPM_FA_C_C2_D1L_RR = (void *) 0xFEC20CFA;
unsigned char * INT_OPM_FB_D_C2_D1L_RR = (void *) 0xFEC20CFB;
unsigned char * INT_OPM_FC_E_C2_D1L_RR = (void *) 0xFEC20CFC;
unsigned char * INT_OPM_FD_F_C2_D1L_RR = (void *) 0xFEC20CFD;
unsigned char * INT_OPM_FE_G_C2_D1L_RR = (void *) 0xFEC20CFE;
unsigned char * INT_OPM_FF_H_C2_D1L_RR = (void *) 0xFEC20CFF;
#endif

View file

@ -0,0 +1,297 @@
#ifndef YM2612_Ext_H_
#define YM2612_Ext_H_
// External Registers $00C20400..$00C20BFF
unsigned char * EXT_OPN2_22_LFO = (void *)0xFEC20422; // LFO enable | LFO frequency
unsigned char * EXT_OPN2_23_TIMER_A_H = (void *)0xFEC20423; // Timer A MSBs
unsigned char * EXT_OPN2_24_TIMER_A_L = (void *)0xFEC20424; // Timer A LSBs
unsigned char * EXT_OPN2_25_TIMER_B = (void *)0xFEC20425; // Timer B
unsigned char * EXT_OPN2_27_CHANEL_3_MODE = (void *)0xFEC20427; // Ch3 mode Reset B Reset A Enable B Enable A Load B Load A
unsigned char * EXT_OPN2_27_TIMER_CONF = (void *)0xFEC20427; // Ch3 mode Reset B Reset A Enable B Enable A Load B Load A
unsigned char * EXT_OPN2_28_KEY_ON_OFF = (void *)0xFEC20428; // Operator Channel
unsigned char * EXT_OPN2_29 = (void *)0xFEC20429;
unsigned char * EXT_OPN2_2A_ADC = (void *)0xFEC2042A; // DAC
unsigned char * EXT_OPN2_2B_ADC_EN = (void *)0xFEC2042B; // DAC en
//;--------------------------------------------------------------------------------------
//;------------------- DT1 (detune) and MUL (multiple) ----------------------------------
//;--------------------------------------------------------------------------------------
//;
//; MUL ranges from 0 to 15 (decimal), and multiplies the overall frequency, with the
//; exception that 0 results in multiplication by 1/2. That is, MUL=0 to 15 gives ×1/2,
//; ×1, ×2, ... ×15.
//;
//; DT1 gives small variations from the overall frequency × MUL. The MSB of DT1 is a
//; primitive sign bit, and the two LSBs are magnitude bits. See the next page for a
//; diagram.
//;
//;--------------------------------------------------------------------------------------
unsigned char * EXT_OPN2_30_ADSR__DT1_MUL__CH1_OP1 = (void *) 0xFEC20430;
unsigned char * EXT_OPN2_31_ADSR__DT1_MUL__CH2_OP1 = (void *) 0xFEC20431;
unsigned char * EXT_OPN2_32_ADSR__DT1_MUL__CH3_OP1 = (void *) 0xFEC20432;
unsigned char * EXT_OPN2_34_ADSR__DT1_MUL__CH1_OP2 = (void *) 0xFEC20434;
unsigned char * EXT_OPN2_35_ADSR__DT1_MUL__CH2_OP2 = (void *) 0xFEC20435;
unsigned char * EXT_OPN2_36_ADSR__DT1_MUL__CH3_OP2 = (void *) 0xFEC20436;
unsigned char * EXT_OPN2_38_ADSR__DT1_MUL__CH1_OP3 = (void *) 0xFEC20438;
unsigned char * EXT_OPN2_39_ADSR__DT1_MUL__CH2_OP3 = (void *) 0xFEC20439;
unsigned char * EXT_OPN2_3A_ADSR__DT1_MUL__CH3_OP3 = (void *) 0xFEC2043A;
unsigned char * EXT_OPN2_3C_ADSR__DT1_MUL__CH1_OP4 = (void *) 0xFEC2043C;
unsigned char * EXT_OPN2_3D_ADSR__DT1_MUL__CH2_OP4 = (void *) 0xFEC2043D;
unsigned char * EXT_OPN2_3E_ADSR__DT1_MUL__CH3_OP4 = (void *) 0xFEC2043E;
unsigned char * EXT_OPN2_30_ADSR__DT1_MUL__CH1_OP5 = (void *) 0xFEC20530;
unsigned char * EXT_OPN2_31_ADSR__DT1_MUL__CH2_OP5 = (void *) 0xFEC20531;
unsigned char * EXT_OPN2_32_ADSR__DT1_MUL__CH3_OP5 = (void *) 0xFEC20532;
unsigned char * EXT_OPN2_34_ADSR__DT1_MUL__CH1_OP6 = (void *) 0xFEC20534;
unsigned char * EXT_OPN2_35_ADSR__DT1_MUL__CH2_OP6 = (void *) 0xFEC20535;
unsigned char * EXT_OPN2_36_ADSR__DT1_MUL__CH3_OP6 = (void *) 0xFEC20536;
unsigned char * EXT_OPN2_38_ADSR__DT1_MUL__CH1_OP7 = (void *) 0xFEC20538;
unsigned char * EXT_OPN2_39_ADSR__DT1_MUL__CH2_OP7 = (void *) 0xFEC20539;
unsigned char * EXT_OPN2_3A_ADSR__DT1_MUL__CH3_OP7 = (void *) 0xFEC2053A;
unsigned char * EXT_OPN2_3C_ADSR__DT1_MUL__CH1_OP8 = (void *) 0xFEC2053C;
unsigned char * EXT_OPN2_3D_ADSR__DT1_MUL__CH2_OP8 = (void *) 0xFEC2053D;
unsigned char * EXT_OPN2_3E_ADSR__DT1_MUL__CH3_OP8 = (void *) 0xFEC2053E;
//;--------------------------------------------------------------------------------------
//;---------------------------------- TL (total level) ----------------------------------
//;--------------------------------------------------------------------------------------
//;
//; TL (total level) represents the envelopes highest amplitude, with 0 being the largest
//; and 127 (decimal) the smallest. A change of one unit is about 0.75 dB.
//;
//; To make a note softer, only change the TL of the slots (the output operators).
//; Changing the other operators will affect the flavor of the note.
//;
//;--------------------------------------------------------------------------------------
unsigned char * EXT_OPN2_40_ADSR__LT__CH1_OP1 = (void *) 0xFEC20440;
unsigned char * EXT_OPN2_41_ADSR__LT__CH2_OP1 = (void *) 0xFEC20441;
unsigned char * EXT_OPN2_42_ADSR__LT__CH3_OP1 = (void *) 0xFEC20442;
unsigned char * EXT_OPN2_44_ADSR__LT__CH1_OP2 = (void *) 0xFEC20444;
unsigned char * EXT_OPN2_45_ADSR__LT__CH2_OP2 = (void *) 0xFEC20445;
unsigned char * EXT_OPN2_46_ADSR__LT__CH3_OP2 = (void *) 0xFEC20446;
unsigned char * EXT_OPN2_48_ADSR__LT__CH1_OP3 = (void *) 0xFEC20448;
unsigned char * EXT_OPN2_49_ADSR__LT__CH2_OP3 = (void *) 0xFEC20449;
unsigned char * EXT_OPN2_4A_ADSR__LT__CH3_OP3 = (void *) 0xFEC2044A;
unsigned char * EXT_OPN2_4C_ADSR__LT__CH1_OP4 = (void *) 0xFEC2044C;
unsigned char * EXT_OPN2_4D_ADSR__LT__CH2_OP4 = (void *) 0xFEC2044D;
unsigned char * EXT_OPN2_4E_ADSR__LT__CH3_OP4 = (void *) 0xFEC2044E;
unsigned char * EXT_OPN2_40_ADSR__LT__CH1_OP5 = (void *) 0xFEC20540;
unsigned char * EXT_OPN2_41_ADSR__LT__CH2_OP5 = (void *) 0xFEC20541;
unsigned char * EXT_OPN2_42_ADSR__LT__CH3_OP5 = (void *) 0xFEC20542;
unsigned char * EXT_OPN2_44_ADSR__LT__CH1_OP6 = (void *) 0xFEC20544;
unsigned char * EXT_OPN2_45_ADSR__LT__CH2_OP6 = (void *) 0xFEC20545;
unsigned char * EXT_OPN2_46_ADSR__LT__CH3_OP6 = (void *) 0xFEC20546;
unsigned char * EXT_OPN2_48_ADSR__LT__CH1_OP7 = (void *) 0xFEC20548;
unsigned char * EXT_OPN2_49_ADSR__LT__CH2_OP7 = (void *) 0xFEC20549;
unsigned char * EXT_OPN2_4A_ADSR__LT__CH3_OP7 = (void *) 0xFEC2054A;
unsigned char * EXT_OPN2_4C_ADSR__LT__CH1_OP8 = (void *) 0xFEC2054C;
unsigned char * EXT_OPN2_4D_ADSR__LT__CH2_OP8 = (void *) 0xFEC2054D;
unsigned char * EXT_OPN2_4E_ADSR__LT__CH3_OP8 = (void *) 0xFEC2054E;
//;--------------------------------------------------------------------------------------
//;------------------- RS (rate scaling) and AR (attack rate) ---------------------------
//;--------------------------------------------------------------------------------------
//;
//; AR is the steepness of the initial amplitude rise, shown on page 5.
//;
//; RS affects AR, D1R, D2R and RR in the same way. RS is the degree to which the envelope
//; becomes narrower as the frequency becomes higher.
//;
//;--------------------------------------------------------------------------------------
unsigned char * EXT_OPN2_50_ADSR__SR_AR__CH1_OP1 = (void *) 0xFEC20450;
unsigned char * EXT_OPN2_51_ADSR__SR_AR__CH2_OP1 = (void *) 0xFEC20451;
unsigned char * EXT_OPN2_52_ADSR__SR_AR__CH3_OP1 = (void *) 0xFEC20452;
unsigned char * EXT_OPN2_54_ADSR__SR_AR__CH1_OP2 = (void *) 0xFEC20454;
unsigned char * EXT_OPN2_55_ADSR__SR_AR__CH2_OP2 = (void *) 0xFEC20455;
unsigned char * EXT_OPN2_56_ADSR__SR_AR__CH3_OP2 = (void *) 0xFEC20456;
unsigned char * EXT_OPN2_58_ADSR__SR_AR__CH1_OP3 = (void *) 0xFEC20458;
unsigned char * EXT_OPN2_59_ADSR__SR_AR__CH2_OP3 = (void *) 0xFEC20459;
unsigned char * EXT_OPN2_5A_ADSR__SR_AR__CH3_OP3 = (void *) 0xFEC2045A;
unsigned char * EXT_OPN2_5C_ADSR__SR_AR__CH1_OP4 = (void *) 0xFEC2045C;
unsigned char * EXT_OPN2_5D_ADSR__SR_AR__CH2_OP4 = (void *) 0xFEC2045D;
unsigned char * EXT_OPN2_5E_ADSR__SR_AR__CH3_OP4 = (void *) 0xFEC2045E;
unsigned char * EXT_OPN2_50_ADSR__SR_AR__CH1_OP5 = (void *) 0xFEC20550;
unsigned char * EXT_OPN2_51_ADSR__SR_AR__CH2_OP5 = (void *) 0xFEC20551;
unsigned char * EXT_OPN2_52_ADSR__SR_AR__CH3_OP5 = (void *) 0xFEC20552;
unsigned char * EXT_OPN2_54_ADSR__SR_AR__CH1_OP6 = (void *) 0xFEC20554;
unsigned char * EXT_OPN2_55_ADSR__SR_AR__CH2_OP6 = (void *) 0xFEC20555;
unsigned char * EXT_OPN2_56_ADSR__SR_AR__CH3_OP6 = (void *) 0xFEC20556;
unsigned char * EXT_OPN2_58_ADSR__SR_AR__CH1_OP7 = (void *) 0xFEC20558;
unsigned char * EXT_OPN2_59_ADSR__SR_AR__CH2_OP7 = (void *) 0xFEC20559;
unsigned char * EXT_OPN2_5A_ADSR__SR_AR__CH3_OP7 = (void *) 0xFEC2055A;
unsigned char * EXT_OPN2_5C_ADSR__SR_AR__CH1_OP8 = (void *) 0xFEC2055C;
unsigned char * EXT_OPN2_5D_ADSR__SR_AR__CH2_OP8 = (void *) 0xFEC2055D;
unsigned char * EXT_OPN2_5E_ADSR__SR_AR__CH3_OP8 = (void *) 0xFEC2055E;
//;--------------------------------------------------------------------------------------
//;-------------- AM modulation enable amd D1R (first decay rate) -----------------------
//;--------------------------------------------------------------------------------------
//;
//; D1R (first decay rate) is the initial steep amplitude decay rate (see page 4). It is,
//; like all rates, 0-31 in value and affected by RS.
//;
//; AM is the amplitude modulation enable, whether of not this operator will be subject to
//; amplitude modulation by the LFO. This bit is not relevant unless both the LFO is
//; enabled and register B4s AMS (amplitude modulation sensitivity) is non-zero.
//;
//;--------------------------------------------------------------------------------------
unsigned char * EXT_OPN2_60_ADSR__AM_D1R__CH1_OP1 = (void *) 0xFEC20460;
unsigned char * EXT_OPN2_61_ADSR__AM_D1R__CH2_OP1 = (void *) 0xFEC20461;
unsigned char * EXT_OPN2_62_ADSR__AM_D1R__CH3_OP1 = (void *) 0xFEC20462;
unsigned char * EXT_OPN2_64_ADSR__AM_D1R__CH1_OP2 = (void *) 0xFEC20464;
unsigned char * EXT_OPN2_65_ADSR__AM_D1R__CH2_OP2 = (void *) 0xFEC20465;
unsigned char * EXT_OPN2_66_ADSR__AM_D1R__CH3_OP2 = (void *) 0xFEC20466;
unsigned char * EXT_OPN2_68_ADSR__AM_D1R__CH1_OP3 = (void *) 0xFEC20468;
unsigned char * EXT_OPN2_69_ADSR__AM_D1R__CH2_OP3 = (void *) 0xFEC20469;
unsigned char * EXT_OPN2_6A_ADSR__AM_D1R__CH3_OP3 = (void *) 0xFEC2046A;
unsigned char * EXT_OPN2_6C_ADSR__AM_D1R__CH1_OP4 = (void *) 0xFEC2046C;
unsigned char * EXT_OPN2_6D_ADSR__AM_D1R__CH2_OP4 = (void *) 0xFEC2046D;
unsigned char * EXT_OPN2_6E_ADSR__AM_D1R__CH3_OP4 = (void *) 0xFEC2046E;
unsigned char * EXT_OPN2_60_ADSR__AM_D1R__CH1_OP5 = (void *) 0xFEC20560;
unsigned char * EXT_OPN2_61_ADSR__AM_D1R__CH2_OP5 = (void *) 0xFEC20561;
unsigned char * EXT_OPN2_62_ADSR__AM_D1R__CH3_OP5 = (void *) 0xFEC20562;
unsigned char * EXT_OPN2_64_ADSR__AM_D1R__CH1_OP6 = (void *) 0xFEC20564;
unsigned char * EXT_OPN2_65_ADSR__AM_D1R__CH2_OP6 = (void *) 0xFEC20565;
unsigned char * EXT_OPN2_66_ADSR__AM_D1R__CH3_OP6 = (void *) 0xFEC20566;
unsigned char * EXT_OPN2_68_ADSR__AM_D1R__CH1_OP7 = (void *) 0xFEC20568;
unsigned char * EXT_OPN2_69_ADSR__AM_D1R__CH2_OP7 = (void *) 0xFEC20569;
unsigned char * EXT_OPN2_6A_ADSR__AM_D1R__CH3_OP7 = (void *) 0xFEC2056A;
unsigned char * EXT_OPN2_6C_ADSR__AM_D1R__CH1_OP8 = (void *) 0xFEC2056C;
unsigned char * EXT_OPN2_6D_ADSR__AM_D1R__CH2_OP8 = (void *) 0xFEC2056D;
unsigned char * EXT_OPN2_6E_ADSR__AM_D1R__CH3_OP8 = (void *) 0xFEC2056E;
//;--------------------------------------------------------------------------------------
//;-------------------------- D2R (secondary decay rate) --------------------------------
//;--------------------------------------------------------------------------------------
//;
//; D2R (secondary decay rate) is the long tail off of the sound that continues as long
//; as the key is depressed.
//;
//;--------------------------------------------------------------------------------------
unsigned char * EXT_OPN2_70_ADSR__D2R__CH1_OP1 = (void *) 0xFEC20470;
unsigned char * EXT_OPN2_71_ADSR__D2R__CH2_OP1 = (void *) 0xFEC20471;
unsigned char * EXT_OPN2_72_ADSR__D2R__CH3_OP1 = (void *) 0xFEC20472;
unsigned char * EXT_OPN2_74_ADSR__D2R__CH1_OP2 = (void *) 0xFEC20474;
unsigned char * EXT_OPN2_75_ADSR__D2R__CH2_OP2 = (void *) 0xFEC20475;
unsigned char * EXT_OPN2_76_ADSR__D2R__CH3_OP2 = (void *) 0xFEC20476;
unsigned char * EXT_OPN2_78_ADSR__D2R__CH1_OP3 = (void *) 0xFEC20478;
unsigned char * EXT_OPN2_79_ADSR__D2R__CH2_OP3 = (void *) 0xFEC20479;
unsigned char * EXT_OPN2_7A_ADSR__D2R__CH3_OP3 = (void *) 0xFEC2047A;
unsigned char * EXT_OPN2_7C_ADSR__D2R__CH1_OP4 = (void *) 0xFEC2047C;
unsigned char * EXT_OPN2_7D_ADSR__D2R__CH2_OP4 = (void *) 0xFEC2047D;
unsigned char * EXT_OPN2_7E_ADSR__D2R__CH3_OP4 = (void *) 0xFEC2047E;
unsigned char * EXT_OPN2_70_ADSR__D2R__CH1_OP5 = (void *) 0xFEC20570;
unsigned char * EXT_OPN2_71_ADSR__D2R__CH2_OP5 = (void *) 0xFEC20571;
unsigned char * EXT_OPN2_72_ADSR__D2R__CH3_OP5 = (void *) 0xFEC20572;
unsigned char * EXT_OPN2_74_ADSR__D2R__CH1_OP6 = (void *) 0xFEC20574;
unsigned char * EXT_OPN2_75_ADSR__D2R__CH2_OP6 = (void *) 0xFEC20575;
unsigned char * EXT_OPN2_76_ADSR__D2R__CH3_OP6 = (void *) 0xFEC20576;
unsigned char * EXT_OPN2_78_ADSR__D2R__CH1_OP7 = (void *) 0xFEC20578;
unsigned char * EXT_OPN2_79_ADSR__D2R__CH2_OP7 = (void *) 0xFEC20579;
unsigned char * EXT_OPN2_7A_ADSR__D2R__CH3_OP7 = (void *) 0xFEC2057A;
unsigned char * EXT_OPN2_7C_ADSR__D2R__CH1_OP8 = (void *) 0xFEC2057C;
unsigned char * EXT_OPN2_7D_ADSR__D2R__CH2_OP8 = (void *) 0xFEC2057D;
unsigned char * EXT_OPN2_7E_ADSR__D2R__CH3_OP8 = (void *) 0xFEC2057E;
//;--------------------------------------------------------------------------------------
//;-------------------------- D2R (secondary decay rate) --------------------------------
//;--------------------------------------------------------------------------------------
//;
//; D2R (secondary decay rate) is the long tail off of the sound that continues as long
//; as the key is depressed.
//;
//;--------------------------------------------------------------------------------------
unsigned char * EXT_OPN2_80_ADSR__D1L_RR__CH1_OP1 = (void *) 0xFEC20480;
unsigned char * EXT_OPN2_81_ADSR__D1L_RR__CH2_OP1 = (void *) 0xFEC20481;
unsigned char * EXT_OPN2_82_ADSR__D1L_RR__CH3_OP1 = (void *) 0xFEC20482;
unsigned char * EXT_OPN2_84_ADSR__D1L_RR__CH1_OP2 = (void *) 0xFEC20484;
unsigned char * EXT_OPN2_85_ADSR__D1L_RR__CH2_OP2 = (void *) 0xFEC20485;
unsigned char * EXT_OPN2_86_ADSR__D1L_RR__CH3_OP2 = (void *) 0xFEC20486;
unsigned char * EXT_OPN2_88_ADSR__D1L_RR__CH1_OP3 = (void *) 0xFEC20488;
unsigned char * EXT_OPN2_89_ADSR__D1L_RR__CH2_OP3 = (void *) 0xFEC20489;
unsigned char * EXT_OPN2_8A_ADSR__D1L_RR__CH3_OP3 = (void *) 0xFEC2048A;
unsigned char * EXT_OPN2_8C_ADSR__D1L_RR__CH1_OP4 = (void *) 0xFEC2048C;
unsigned char * EXT_OPN2_8D_ADSR__D1L_RR__CH2_OP4 = (void *) 0xFEC2048D;
unsigned char * EXT_OPN2_8E_ADSR__D1L_RR__CH3_OP4 = (void *) 0xFEC2048E;
unsigned char * EXT_OPN2_80_ADSR__D1L_RR__CH1_OP5 = (void *) 0xFEC20580;
unsigned char * EXT_OPN2_81_ADSR__D1L_RR__CH2_OP5 = (void *) 0xFEC20581;
unsigned char * EXT_OPN2_82_ADSR__D1L_RR__CH3_OP5 = (void *) 0xFEC20582;
unsigned char * EXT_OPN2_84_ADSR__D1L_RR__CH1_OP6 = (void *) 0xFEC20584;
unsigned char * EXT_OPN2_85_ADSR__D1L_RR__CH2_OP6 = (void *) 0xFEC20585;
unsigned char * EXT_OPN2_86_ADSR__D1L_RR__CH3_OP6 = (void *) 0xFEC20586;
unsigned char * EXT_OPN2_88_ADSR__D1L_RR__CH1_OP7 = (void *) 0xFEC20588;
unsigned char * EXT_OPN2_89_ADSR__D1L_RR__CH2_OP7 = (void *) 0xFEC20589;
unsigned char * EXT_OPN2_8A_ADSR__D1L_RR__CH3_OP7 = (void *) 0xFEC2058A;
unsigned char * EXT_OPN2_8C_ADSR__D1L_RR__CH1_OP8 = (void *) 0xFEC2058C;
unsigned char * EXT_OPN2_8D_ADSR__D1L_RR__CH2_OP8 = (void *) 0xFEC2058D;
unsigned char * EXT_OPN2_8E_ADSR__D1L_RR__CH3_OP8 = (void *) 0xFEC2058E;
//;--------------------------------------------------------------------------------------
//;------------------------------------ SSG-EG ------------------------------------------
//;--------------------------------------------------------------------------------------
//;
//; This register is proprietary and should be set to zero.
//;
//;--------------------------------------------------------------------------------------
unsigned char * EXT_OPN2_90_ADSR__D1L_RR__CH1_OP1 = (void *) 0xFEC20490;
unsigned char * EXT_OPN2_91_ADSR__D1L_RR__CH2_OP1 = (void *) 0xFEC20491;
unsigned char * EXT_OPN2_92_ADSR__D1L_RR__CH3_OP1 = (void *) 0xFEC20492;
unsigned char * EXT_OPN2_94_ADSR__D1L_RR__CH1_OP2 = (void *) 0xFEC20494;
unsigned char * EXT_OPN2_95_ADSR__D1L_RR__CH2_OP2 = (void *) 0xFEC20495;
unsigned char * EXT_OPN2_96_ADSR__D1L_RR__CH3_OP2 = (void *) 0xFEC20496;
unsigned char * EXT_OPN2_98_ADSR__D1L_RR__CH1_OP3 = (void *) 0xFEC20498;
unsigned char * EXT_OPN2_99_ADSR__D1L_RR__CH2_OP3 = (void *) 0xFEC20499;
unsigned char * EXT_OPN2_9A_ADSR__D1L_RR__CH3_OP3 = (void *) 0xFEC2049A;
unsigned char * EXT_OPN2_9C_ADSR__D1L_RR__CH1_OP4 = (void *) 0xFEC2049C;
unsigned char * EXT_OPN2_9D_ADSR__D1L_RR__CH2_OP4 = (void *) 0xFEC2049D;
unsigned char * EXT_OPN2_9E_ADSR__D1L_RR__CH3_OP4 = (void *) 0xFEC2049E;
unsigned char * EXT_OPN2_90_ADSR__D1L_RR__CH4_OP1 = (void *) 0xFEC20590;
unsigned char * EXT_OPN2_91_ADSR__D1L_RR__CH5_OP1 = (void *) 0xFEC20591;
unsigned char * EXT_OPN2_92_ADSR__D1L_RR__CH6_OP1 = (void *) 0xFEC20592;
unsigned char * EXT_OPN2_94_ADSR__D1L_RR__CH4_OP2 = (void *) 0xFEC20594;
unsigned char * EXT_OPN2_95_ADSR__D1L_RR__CH5_OP2 = (void *) 0xFEC20595;
unsigned char * EXT_OPN2_96_ADSR__D1L_RR__CH6_OP2 = (void *) 0xFEC20596;
unsigned char * EXT_OPN2_98_ADSR__D1L_RR__CH4_OP3 = (void *) 0xFEC20598;
unsigned char * EXT_OPN2_99_ADSR__D1L_RR__CH5_OP3 = (void *) 0xFEC20599;
unsigned char * EXT_OPN2_9A_ADSR__D1L_RR__CH6_OP3 = (void *) 0xFEC2059A;
unsigned char * EXT_OPN2_9C_ADSR__D1L_RR__CH4_OP4 = (void *) 0xFEC2059C;
unsigned char * EXT_OPN2_9D_ADSR__D1L_RR__CH5_OP4 = (void *) 0xFEC2059D;
unsigned char * EXT_OPN2_9E_ADSR__D1L_RR__CH6_OP4 = (void *) 0xFEC2059E;
//;--------------------------------------------------------------------------------------
unsigned char * EXT_OPN2_A0_CH1_FREQ_L = (void *) 0xFEC204A0; //Frequency number LSB
unsigned char * EXT_OPN2_A1_CH2_FREQ_L = (void *) 0xFEC204A1; //Frequency number LSB
unsigned char * EXT_OPN2_A2_CH3_FREQ_L = (void *) 0xFEC204A2; //Frequency number LSB
unsigned char * EXT_OPN2_A2_CH3_FREQ_OP1_L = (void *) 0xFEC204A2; //Frequency number LSB Chanel 3 Operator 1 if special mode
unsigned char * EXT_OPN2_A8_CH3_FREQ_OP2_L = (void *) 0xFEC204A8; //Frequency number LSB Chanel 3 Operator 2 if special mode
unsigned char * EXT_OPN2_A9_CH3_FREQ_OP3_L = (void *) 0xFEC204A9; //Frequency number LSB Chanel 3 Operator 3 if special mode
unsigned char * EXT_OPN2_AA_CH3_FREQ_OP4_L = (void *) 0xFEC204AA; //Frequency number LSB Chanel 3 Operator 4 if special mode
unsigned char * EXT_OPN2_A0_CH4_FREQ_L = (void *) 0xFEC205A0; //Frequency number LSB
unsigned char * EXT_OPN2_A1_CH5_FREQ_L = (void *) 0xFEC205A1; //Frequency number LSB
unsigned char * EXT_OPN2_A2_CH6_FREQ_L = (void *) 0xFEC205A2; //Frequency number LSB
unsigned char * EXT_OPN2_A4_CH1_OCTAVE_FREQ_H = (void *) 0xFEC204A4; //OCTAVE and Frequency number MSB
unsigned char * EXT_OPN2_A5_CH2_OCTAVE_FREQ_H = (void *) 0xFEC204A5; //OCTAVE and Frequency number MSB
unsigned char * EXT_OPN2_A6_CH3_OCTAVE_FREQ_H = (void *) 0xFEC204A6; //OCTAVE and Frequency number MSB
unsigned char * EXT_OPN2_A6_CH3_OCTAVE_FREQ_OP1_H = (void *) 0xFEC204A6; //OCTAVE and Frequency number MSB Chanel 3 Operator 1 if special mode
unsigned char * EXT_OPN2_AC_CH3_OCTAVE_FREQ_OP2_H = (void *) 0xFEC204AC; //OCTAVE and Frequency number MSB Chanel 3 Operator 2 if special mode
unsigned char * EXT_OPN2_AD_CH3_OCTAVE_FREQ_OP3_H = (void *) 0xFEC204AD; //OCTAVE and Frequency number MSB Chanel 3 Operator 3 if special mode
unsigned char * EXT_OPN2_AE_CH3_OCTAVE_FREQ_OP4_H = (void *) 0xFEC204AE; //OCTAVE and Frequency number MSB Chanel 3 Operator 4 if special mode
unsigned char * EXT_OPN2_A4_CH4_OCTAVE_FREQ_H = (void *) 0xFEC205A4; //OCTAVE and Frequency number MSB
unsigned char * EXT_OPN2_A5_CH5_OCTAVE_FREQ_H = (void *) 0xFEC205A5; //OCTAVE and Frequency number MSB
unsigned char * EXT_OPN2_A6_CH6_OCTAVE_FREQ_H = (void *) 0xFEC205A6; //OCTAVE and Frequency number MSB
//; Feedback is the degree to which operator 1 feeds back into itself.
//; The algorithm is the type of inter-operator connection used
unsigned char * EXT_OPN2_B0_CH1_FEEDBACK_ALGO = (void *)0xFEC204B0;
unsigned char * EXT_OPN2_B1_CH2_FEEDBACK_ALGO = (void *)0xFEC204B1;
unsigned char * EXT_OPN2_B2_CH3_FEEDBACK_ALGO = (void *)0xFEC204B2;
unsigned char * EXT_OPN2_B0_CH4_FEEDBACK_ALGO = (void *)0xFEC205B0;
unsigned char * EXT_OPN2_B1_CH5_FEEDBACK_ALGO = (void *)0xFEC205B1;
unsigned char * EXT_OPN2_B2_CH6_FEEDBACK_ALGO = (void *)0xFEC205B2;
//; Register B4H contains stereo output control and LFO sensitivity control.
unsigned char * EXT_OPN2_B4_CH1_L_R_AMS_FMS = (void *)0xFEC204B0;
unsigned char * EXT_OPN2_B5_CH2_L_R_AMS_FMS = (void *)0xFEC204B1;
unsigned char * EXT_OPN2_B6_CH3_L_R_AMS_FMS = (void *)0xFEC204B2;
unsigned char * EXT_OPN2_B4_CH4_L_R_AMS_FMS = (void *)0xFEC205B0;
unsigned char * EXT_OPN2_B5_CH5_L_R_AMS_FMS = (void *)0xFEC205B1;
unsigned char * EXT_OPN2_B6_CH6_L_R_AMS_FMS = (void *)0xFEC205B2;
#endif

View file

@ -6,6 +6,9 @@
#define __SOUND_A2560K_H
#define PSG_PORT ((volatile unsigned char *)0xFEC20100) /* Control register for the SN76489 */
#define PSG_INT_L_PORT ((volatile unsigned char *)0xFEC20110) /* Control register for the SN76489 */
#define PSG_INT_R_PORT ((volatile unsigned char *)0xFEC20120) /* Control register for the SN76489 */
#define PSG_INT_S_PORT ((volatile unsigned char *)0xFEC20130) /* Control register for the SN76489 */
#define OPL3_PORT ((volatile unsigned char *)0xFEC20200) /* Access port for the OPL3 */
#define OPM_EXT_BASE ((volatile unsigned char *)0xFEC20600) /* External OPM base address */
#define OPN2_EXT_BASE ((volatile unsigned char *)0xFEC20400) /* External OPN2 base address */

File diff suppressed because it is too large Load diff

View file

@ -9,11 +9,14 @@
* Mute all voices on the PSG
*/
void psg_mute_all() {
short chip;
short voice;
/* Set attenuation on all voices to full */
for (voice = 0; voice < 3; voice++) {
psg_attenuation(voice, 15);
for (chip = 0; chip < 4; chip++) {
/* Set attenuation on all voices to full */
for (voice = 0; voice < 3; voice++) {
psg_attenuation(chip, voice, 15);
}
}
}
@ -21,17 +24,39 @@ void psg_mute_all() {
* Set the frequency of one of the three tone voices
*
* Inputs:
* voice = the number of the voice (0 - 2)
* frequency = the frequency in Hz * 100
* chip = the chip to use (0 = external, 1 = internal left, 2 = internal right, 3 = internal stereo)
* voice = the number of the voice (0 - 3)
* frequency = the frequency
*/
void psg_tone(unsigned short voice, int frequency) {
void psg_tone(short chip, unsigned short voice, int frequency) {
volatile unsigned char * port = PSG_PORT; /* By default: external */
if (voice < 3) {
#if MODEL == MODEL_FOENIX_A2560K
switch (chip) {
case 1:
port = PSG_INT_L_PORT;
break;
case 2:
port = PSG_INT_R_PORT;
break;
case 3:
port = PSG_INT_S_PORT;
break;
default:
break;
}
#endif
int n = 0;
if (frequency != 0) {
n = 357954500 / (32 * frequency);
}
*PSG_PORT = (unsigned char)(0x80 | ((voice & 0x03) << 5) | (n & 0x0f));
*PSG_PORT = (unsigned char)((n & 0x3f0) >> 4);
*port = (unsigned char)(0x80 | ((voice & 0x03) << 5) | (n & 0x0f));
*port = (unsigned char)((n & 0x3f0) >> 4);
}
}
@ -39,9 +64,31 @@ void psg_tone(unsigned short voice, int frequency) {
* Set the attenuation of a voice
*
* Inputs:
* chip = the chip to use (0 = external, 1 = internal left, 2 = internal right, 3 = internal stereo)
* voice = the number of the voice (0 - 3)
* attenuation = volume level 0: loudest, 15: silent
* attenuation = volume level 0 = loudest, 15 = silent
*/
void psg_attenuation(unsigned short voice, short attenuation) {
*PSG_PORT = (unsigned char)(0x90 | ((voice & 0x03) << 5) | (attenuation & 0x0f));
void psg_attenuation(short chip, unsigned short voice, short attenuation) {
volatile unsigned char * port = PSG_PORT; /* By default: external */
#if MODEL == MODEL_FOENIX_A2560K
switch (chip) {
case 1:
port = PSG_INT_L_PORT;
break;
case 2:
port = PSG_INT_R_PORT;
break;
case 3:
port = PSG_INT_S_PORT;
break;
default:
break;
}
#endif
*port = (unsigned char)(0x90 | ((voice & 0x03) << 5) | (attenuation & 0x0f));
}

View file

@ -14,18 +14,20 @@ extern void psg_mute_all();
* Set the frequency of one of the three tone voices
*
* Inputs:
* chip = the chip to use (0 = external, 1 = internal left, 2 = internal right, 3 = internal stereo)
* voice = the number of the voice (0 - 3)
* frequency = the frequency
*/
extern void psg_tone(unsigned short voice, int frequency);
extern void psg_tone(short chip, unsigned short voice, int frequency);
/*
* Set the attenuation of a voice
*
* Inputs:
* chip = the chip to use (0 = external, 1 = internal left, 2 = internal right, 3 = internal stereo)
* voice = the number of the voice (0 - 3)
* attenuation = volume level 0 = loudest, 15 = silent
*/
extern void psg_attenuation(unsigned short voice, short attenuation);
extern void psg_attenuation(short chip, unsigned short voice, short attenuation);
#endif

View file

@ -154,14 +154,6 @@ void sid_test_external() {
unsigned int j;
long jiffies;
#if MODEL == MODEL_FOENIX_A2560K
// Clear all Channels
// for (i = 0; i<24 ; i++) {
// SID_INT_L_V1_FREQ_LO[i] = 0x00;
// SID_INT_R_V1_FREQ_LO[i] = 0x00;
// }
// Attack = 2, Decay = 9
*SID_EXT_L_V1_ATCK_DECY = 0x29;
*SID_EXT_L_V2_ATCK_DECY = 0x29;
@ -242,5 +234,4 @@ void sid_test_external() {
*SID_EXT_L_MODE_VOL = 0;
*SID_EXT_R_MODE_VOL = 0;
#endif
}