📄 tone.c
字号:
#include "pccdef.h"
#include "predef.h"
#include "Madevdrv.h"
#include "Machdep.h"
int test_tone(void)
{
UINT16 base_time;
UINT8 packet[5];
UINT8 packet_buf[40];
UINT8 vo_volume, num=0;
UINT32 reg_index, pitch;
UINT8 data, i;
UINT16 voice_address=0x0400;
/* Allocate sequencer */
base_time = 0x0D80; /* 4ms */
packet[0] = (UINT8)( MA_SEQUENCE & 0x7F ); /* address */
packet[1] = (UINT8)( (MA_SEQUENCE >> 7) | 0x80 );
packet[2] = (UINT8)( (base_time >> 7) & 0x7F ); /* data */
packet[3] = (UINT8)( base_time & 0x7F );
packet[4] = (UINT8)( MA_INT_POINT | 0x80 );
MaDevDrv_SendDirectPacket( packet, 5 );
data = (UINT8)MaDevDrv_ReceiveData( (UINT32)(MA_SEQUENCE+2), 2 );
printf_uart2("\nMA_INT_POINT = %x", data);
/* Allocate Timer#1 */
packet[0] = (UINT8)( MA_TIMER_1_TIME & 0x7F ); /* address */
packet[1] = (UINT8)( (MA_TIMER_1_TIME >> 7) | 0x80 );
packet[2] = (UINT8)( 100 & 0x7F ); /* time count = 100 */
/* mode=1(for sequencer) oneshot=0(continous counting) star=1 */
packet[3] = (UINT8)( 0x5 | 0x80 );
MaDevDrv_SendDirectPacket( packet, 4 );
data = (UINT8)MaDevDrv_ReceiveData( (UINT32)(MA_TIMER_1_TIME+1), 2 );
printf_uart2("\nMA_TIMER1_CTRL = %x", data);
reg_index = (UINT32)(MA_FM_VOICE_ADDRESS);
pitch = 0x1951;
vo_volume = 127;
packet_buf[num++] = (UINT8)( 0x80 ); /* delta time */
packet_buf[num++] = (UINT8)( (UINT16)MA_NOP_2 & 0x7F ); /* reg adrs */
packet_buf[num++] = (UINT8)( ((UINT16)MA_NOP_2 >> 7) | 0x80 );
packet_buf[num++] = (UINT8)( 0x00 | 0x80 ); /* data */
packet_buf[num++] = (UINT8)( 0x80 ); /* delta time */
/* KeyOn */
reg_index += 5;
/*MAKE_ADDRESS_PART( seq_id, num, reg_index )*/
packet_buf[num++] = (UINT8)( reg_index & 0x7F );
packet_buf[num++] = (UINT8)( (reg_index >> 7) | 0x80 );
/*MAKE_RST( seq_id, num, old_ch )*/
packet_buf[num++] = (UINT8)( (0x10 + 0) | 0x80 );
/*MAKE_TIMER_PART( seq_id, num, delta_time )*/
packet_buf[num++] = (UINT8)( 0x80 );
/*MAKE_NOP( seq_id, num, (UINT16)MA_NOP_2 )*/
packet_buf[num++] = (UINT8)( (UINT16)MA_NOP_2 & 0x7F );
packet_buf[num++] = (UINT8)( ((UINT16)MA_NOP_2 >> 7) | 0x80 );
packet_buf[num++] = (UINT8)( 0x00 | 0x80 );
/*MAKE_TIMER_PART( seq_id, num, delta_time )*/
packet_buf[num++] = (UINT8)( 0x80 );
reg_index -= 5;
/*MAKE_ADDRESS_PART( seq_id, num, reg_index )*/
packet_buf[num++] = (UINT8)( reg_index & 0x7F );
packet_buf[num++] = (UINT8)( (reg_index >> 7) | 0x80 );
/*MAKE_KEY_ON( seq_id, num, voice_info.address, vo_volume, pitch, ch )*/
packet_buf[num++] = (UINT8)( (voice_address >> 7) & 0x7F );
packet_buf[num++] = (UINT8)( voice_address & 0x7F );
packet_buf[num++] = (UINT8)( vo_volume & 0x7C );
packet_buf[num++] = (UINT8)( (pitch >> 7) & 0x7F );
packet_buf[num++] = (UINT8)( pitch & 0x7F );
packet_buf[num++] = (UINT8)( (0x40 + 0) | 0x80 );
/*machdep_WriteStatusFlagReg( MA_DELAYED_WRITE_REG );
for(i = 0; i < num ; i++)
{
machdep_WriteDataReg( packet_buf[i] );
}
machdep_WriteStatusFlagReg( 0x80 );*/
data = machdep_ReadStatusFlagReg();
printf_uart2("\nStatus Flag = %x", data);
MaDevDrv_SendDelayedPacket( packet_buf, num );
for(i = 0; i < 6 ; i++)
{
data = (UINT8)MaDevDrv_ReceiveData( (UINT32)(i), 2 );
printf_uart2("\nFM_Voice #%d = %x", i, data);
}
/* start sequencer */
packet[0] = (UINT8)( MA_START_SEQ & 0x7F ); /* address */
packet[1] = (UINT8)( (MA_START_SEQ >> 7) | 0x80 );
packet[2] = (UINT8)( 0x81 ); /* data */
MaDevDrv_SendDirectPacket( packet, 3 );
data = (UINT8)MaDevDrv_ReceiveData( (UINT32)(MA_START_SEQ), 2 );
printf_uart2("\nMA_SEQ_START = %x", data);
return 1;
}
int state_scan(void)
{
UINT8 data;
UINT8 packet[3];
data = machdep_ReadStatusFlagReg();
printf_uart2("\nStatus Flag = %x", data);
data = (UINT8)MaDevDrv_ReceiveData( (UINT32)(MA_START_SEQ), 2 );
printf_uart2("\nMA_SEQ_START = %x", data);
/* start sequencer */
packet[0] = (UINT8)( MA_START_SEQ & 0x7F ); /* address */
packet[1] = (UINT8)( (MA_START_SEQ >> 7) | 0x80 );
packet[2] = (UINT8)( 0x81 ); /* data */
MaDevDrv_SendDirectPacket( packet, 3 );
data = (UINT8)MaDevDrv_ReceiveData( (UINT32)(MA_START_SEQ), 2 );
printf_uart2("\nMA_SEQ_START = %x", data);
data = (UINT8)MaDevDrv_ReceiveData( (UINT32)(MA_TIMER_1_TIME+1), 2 );
printf_uart2("\nMA_TIMER1_CTRL = %x", data);
data = (UINT8)MaDevDrv_ReceiveData( (UINT32)(MA_SEQUENCE+2), 2 );
printf_uart2("\nMA_INT_POINT = %x", data);
return 1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -