📄 sound_hd.c
字号:
//*******************************************************
//* *
//* REMOCON OF MASSAGE MACHINE FOR FAMILY *
//* *
//* DEVICE : uPD784218 *
//* *
//* Copyright (C) 2000 K.K NUMATA *
//* *
//*******************************************************
//* SOUND HANDLER *
//*******************************************************
//* 2000.02.04 V1.00 *
//* 2001.11.27 V4104 *
//*******************************************************
#pragma interrupt INTTM5 Send_pcm_data rb4
#pragma ei
#pragma sfr
#include <stdio.h>
#include "sound.h"
#include "mode.h"
#include "vfd.h"
#include "slcd.h"
#include "trm.h"
#include "test.h"
//#define CHIP_AON P3.5
#define TM90US 68
#define TM500MS 5
//*******************************************************
// function prototype
//*******************************************************
void Snd_out(unsigned char number);
//void Snd_cancel(void);
void Snd_init(void);
//void Snd_beep(char);
void Sound_prc( void) ;
//void Sound_test(void );
//unsigned char Flash_rom_test (void) ;
unsigned char Read_pcm_data (void ) ;
void Sure_p30_p31(void) ;
void Set_macro(unsigned long int actual_addr,unsigned long int area_limit_data);
extern unsigned char *sound_addr ;
extern unsigned char *sound_end_addr ;
unsigned long int send_addr,send_number ;
void Bgm_sound_prc(void) ;
//******************************************************
// sound address table
//******************************************************
const unsigned long int music[][2] = {
//bank 0
{0x00000400,0x0006b2d0}, // {start_addr,end_addr} 0
{0x0006b6d0,0x0000a000}, //START_SOUND 1 bc0c
{0x000772dc,0x0000422b}, //LING CHECK_OVER_SUND 2
{0x0007b508,0x000003f8}, //insert sound 3
//bank 1
{0x00080000,0x0006b6a8}, //long music no use 4
// {0x000eb6a8,0x00005e62}, //gelin lin lin 5
{0x000eb6a8,0x00005d00}, //
{0x000f150a,0x000021cc}, //dududu ERR_SOUND 6
{0x000f36d6,0x0000036c}, //ji key KEY_SOUND 7
//bank 2
{0x00100000,0x0006b5d2}, //long music 8
// {0x0016b5d2,0x0001172d}, //finger CHECK_SOUND 9
{0x0016b5d2,0x0001034e},
//bank 3
{0x00180000,0x0006b670}, //happy music 10
{0x00000000,0x00000000}
};
//*******************************************************
// sound handler initialize
//*******************************************************
void Snd_init(void)
{
FLASH_CE = 0 ;
FLASH_RD = 0 ;
CHIP_AON = AOFF ; // AON sound enable(NJM2113 foot1 )
// play_sound = SOUND_OFF ; // don't play music
DAM0 = 0 ; // D/A normal mode
DACE0 = 1 ; // enable D/A
TMC5 = 0x80 ; //enable interrupt
PRM5 = 0x04 ; // fxx/16 = 0.75MHz
CR50 = TM90US ; // 90US
// TMIC5 = 0x40 ; // Highest priority
TMPR51 = 1 ; //priority 2
TMPR50 = 0 ;
TMMK5 = 1 ;
SOUND_H = 0x00;
SOUND_L= 0x0000;
SFPR1 = 0x84 ; //SFR: DACS0
CMMD5 = 0x08 ; //type b marco server
CCHP5 = 0x8a ;
TMISM5 = 0 ;
MSC1 = 0x0000;
sound_no = BGM_NO ;
}
//******************************************************
// sound_process
//******************************************************
void Sound_prc ( void)
{
if(MSC1 != 0)
{
/* if(ac_mode != 0)
{
// if((play_sound_F == 0)||((yn_mode == 1)&&(play_sound_F == 1))||(yn_mode==2)||(yn_mode ==3))
{
if(sound_prc_F == 0)
{
sound_prc_F = 1;
TMISM5 = 1 ;
CHIP_AON = AON ;
TMMK5 = 0 ;
TCE5 = 1; //start
}
}
} */
if(sound_prc_F == 0)
{
sound_prc_F = 1;
TMISM5 = 1 ;
CHIP_AON = AON ;
TMMK5 = 0 ;
TCE5 = 1; //start
}
}
}
//******************************************************
// sound_select
//******************************************************
void Snd_out (unsigned char music_no )
{
TCE5 = 0 ; //stop timer 5 /no output
TMIF5 = 0 ;
TMISM5 = 0 ;
sound_prc_F = 0 ;
MSC1 = 0 ;
P3.0 = 0 ;
P3.1 = 0 ;
SOUND_H = 0x00 ;
SOUND_L = 0x0000 ;
if((music_no >=0)&&(music_no<=10))
{
send_addr = music[music_no][0] ;
send_number = music[music_no][1] ;
Sure_p30_p31();
if ((music_no == 0)||(music_no == 4)||(music_no == 8)||(music_no == 10))
sound_break_F = 0;
else
sound_break_F = 1 ;
/* TMISM5 = 1 ;
CHIP_AON = AON ;
TMMK5 = 0 ;
TCE5 = 1; */
}
}
/*******************************************/
/*******************************************/
//**************************************************
// INTTM5 send pcm data to speaker
//**************************************************
void Send_pcm_data(void)
{
EI();
TCE5 = 0 ;
TMIF5 = 0 ;
if(send_number >= 1)
{
Sure_p30_p31();
TMISM5 = 1 ;
TCE5 = 1 ;
}
else
{
sound_prc_F = 0 ;
TMMK5 = 1 ;
TMISM5 = 0;
SOUND_H = 0x00;
CHIP_AON = AOFF ;
}
}
/****************************************/
/****************************************/
void Sure_p30_p31(void)
{
unsigned long int actual_addr,area_limit_data;
if((send_addr > 0x7ffff)&&(send_addr <= 0xfccff)) //flash:80000-fccff
{
actual_addr = send_addr-(unsigned long)0x80000 ;
area_limit_data =(unsigned long)0xfccff-send_addr ; //value1 is one area limited data
Set_macro(actual_addr,area_limit_data) ;
}
else if((send_addr> 0xfffff)&&(send_addr <= 0x17cd00)) //flash: 100000-17ccff
{
actual_addr = send_addr -(unsigned long)0x100000;
area_limit_data =(unsigned long)0x17ccff-send_addr ;
Set_macro(actual_addr,area_limit_data);
}
else if((send_addr >(unsigned long)0x17ffff)&&(send_addr <= (unsigned long)0x1fcd00))
{ //0x180000--0x1fccff
actual_addr = send_addr -(unsigned long)0x180000;
area_limit_data =(unsigned long)0x1fccff-send_addr ;
Set_macro(actual_addr,area_limit_data);
}
else if(send_addr <= 0x7ccff) //flash:00000-7ccff
{
P3.0 = 0;
P3.1 = 0 ;
actual_addr = send_addr ; //<512k
area_limit_data = 0x7ccff-send_addr ;
Set_macro(actual_addr,area_limit_data);
}
}
/**************************************/
/**************************************/
void Set_macro(unsigned long int actual_addr,unsigned long int area_limit_data)
{
unsigned char mp_h ;
mp_h =(unsigned char)(send_addr>>16)+8 ;
if((mp_h >= 8)&&(mp_h <= 15)) //0x00000-0x7ccff BANK0
{
P3.0 = 0 ;
P3.1 = 0 ;
SOUND_H = mp_h ;
}
else if((mp_h >= 16)&&(mp_h <= 23)) //0x80000--0xfccff BANK1
{
P3.0 = 1;
P3.1 = 0 ;
SOUND_H = mp_h - 8 ;
}
else if((mp_h >= 24)&&(mp_h <= 31)) //0x100000--0x17ccff BANK2
{
P3.0 = 0;
P3.1 = 1;
SOUND_H = mp_h - 16 ;
}
else if((mp_h >= 32)&&(mp_h <= 39)) //0x180000--0x1fccff BANK3
{
P3.0 = 1;
P3.1 = 1;
SOUND_H = mp_h - 24 ;
}
SOUND_L = (unsigned int)actual_addr ;
if(send_number <= area_limit_data) //no through bank
{
if(send_number <= 0xffff) //<64k
{
MSC1 = (unsigned int)send_number;
send_addr += send_number ;
send_number = 0 ;
}
else
{
MSC1 = 0xffff;
send_number -= 0xffff;
send_addr += 0xffff;
}
}
/* else //through bank
{
if(area_limit_data <= 0xffff)
{
MSC1 =(unsigned int)area_limit_data ;
send_number -= area_limit_data;
send_addr += (area_limit_data+0x3300) ;
}
else
{
MSC1 = 0xffff;
send_number -= 0xffff;
send_addr += 0xffff;
}
} */
}
/****************************************************************/
/*************************** bgm prc ************************/
/****************************************************************/
void Bgm_sound_prc(void)
{
if((ac_mode == BGM1)&&(yn_mode ==3 ))
{
if (sound_break_F == 1 )
{
if(sound_prc_F == 0)
{
Snd_out(sound_no);
sound_break_F = 0 ;
}
return ;
}
else if(sound_break_F == 0)
{
if((sound_prc_F == 0)&&(sound_no ==BGM_NO))
{
Snd_out(BGM1_SOUND_1) ;
sound_no = BGM1_SOUND_1 ;
}
else if((sound_prc_F == 0)&&(sound_no ==BGM1_SOUND_1))
{
Snd_out(BGM1_SOUND_2) ;
sound_no = BGM1_SOUND_2 ;
}
else if((sound_prc_F == 0)&&(sound_no == BGM1_SOUND_2))
sound_no = BGM_NO;
}
}
else if((ac_mode == BGM2)&&(yn_mode ==3))
{
if (sound_break_F == 1 )
{
if(sound_prc_F == 0)
{
Snd_out(sound_no);
sound_break_F = 0 ;
}
return ;
}
else if(sound_break_F == 0)
{
if((sound_prc_F == 0)&&(sound_no ==BGM_NO))
{
Snd_out(BGM2_SOUND_1) ;
sound_no = BGM2_SOUND_1 ;
}
else if((sound_prc_F == 0)&&(sound_no ==BGM2_SOUND_1))
{
Snd_out(BGM2_SOUND_2) ;
sound_no = BGM2_SOUND_2 ;
}
else if((sound_prc_F == 0)&&(sound_no == BGM2_SOUND_2))
sound_no = BGM_NO;
}
}
else if((ac_mode == 0)&&(yn_mode>3)&&((sound_no ==0)||(sound_no == 4)||(sound_no == 8)||(sound_no == 10)))
{
sound_no = BGM_NO ;
Snd_out(BGM_NO) ;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -