📄 genint.c
字号:
#include "config.h"
#include "global.h"
#include "regmap.h"
#include "memmap.h"
#include "avd.h"
#include "dma.h"
#include "func.h"
#include "sio.h"
#include "epp.h"
#include "cpu.h"
#include "fifo.h"
#include "intdef.h"
#include "stc.h"
#include "uart.h"
#include "vpp.h"
#include "fs9660.h"
//#define VERBOSE
#ifndef SIMULATION_FAST
//#define MONE_INTR
#endif
#if 0
#ifdef MONE_INTR
#define INTR_epp_write(x) epp_write(x)
#else
#define INTR_epp_write(x) (void)0
#endif
#endif
void exception_panic(void)
{
#if 0
UINT32 REG;
// epp_write_wait("EXCEPTION PANIC\n");
asm volatile ("mfc0 $16, $12; nop; move %0, $16":"=r" (REG)::"$16");
// psprintf(linebuf, "STATUS %08x\n", REG);
//epp_write_wait(linebuf);
asm volatile ("mfc0 $16, $13; nop; move %0, $16":"=r" (REG)::"$16");
//psprintf(linebuf, "CAUSE %08x %s\n", REG, exception_list[(REG&0x3c)>>2]);
// epp_write_wait(linebuf);
asm volatile ("mfc0 $16, $14; nop; move %0, $16":"=r" (REG)::"$16");
// psprintf(linebuf, "EPC %08x\n", REG);
//epp_write_wait(linebuf);
asm volatile ("mfc0 $16, $8; nop; move %0, $16":"=r" (REG)::"$16");
//psprintf(linebuf, "BadVA %08x\n", REG);
//epp_write_wait(linebuf);
#if 1
asm volatile ("move %0, $29":"=r" (REG));
//psprintf(linebuf, "SP %08x\n", REG);
//epp_write_wait(linebuf);
#endif
//psprintf(linebuf, "INTRF %08x\n", regs0->intr_status);
//epp_write_wait(linebuf);
while(1)
regs0->stamp = 0xdead;
#endif
}
/*
**
*/
/*
**
*/
void intr_decerr(void)
{
//epp_write("DECERR\n");
//psprintf(linebuf, "decode $%x parsing $%x\n", picture_decoding_entry, picture_parsing_entry);
//epp_write(linebuf);
//psprintf(linebuf, "vbv_y $%x barrier $%x\n", vbv_y, video_parsing_barrier);
//epp_write(linebuf);
//psprintf(linebuf, "VLD status %04x\n", regs0->vld_status);
//epp_write(linebuf);
}
/*
**
*/
void intr_pic_end(void)
{
/*
** update barrier
*/
#if 0
// int barrier = video_parsing_barrier;
// if (!IsRPicStart)
if(!IsRPicStart && IsVPicEnd) /* no-picture-pending.. */
video_parsing_barrier = video_parsing_barrier_saved;
#endif
#if 0
{
char lbuf[64];
psprintf(lbuf, "\t\t\t\t\t\t\tPICEND %04x %04x\n",
video_parsing_barrier, barrier);
epp_write(lbuf);
}
#endif
}
/*
**
*/
void intr_field_end(void)
{
/*
** Update VPP register
**
** Caution : please do not fill too much code here, long executive time in
** interrupt sub-routine will lead to some error condition.
**
*/
#if CONFIG == CONFIG_COMBO_SVCD
int abnormal_play;
#endif
UINT16 pic_wait_time;
if(!MENU_SLIST() && !MENU_PSEG()) /*selection list or segement don't need,or Menu disappear */
{
//charles 2002/4/22 for stop -> no logo problem
if(!IsRPicStart && !IsVPicEnd /*&& (show_logo==0) */ )
{
pic_end_count++;
if(adv_search_time != 0)
pic_wait_time = 180;
else
pic_wait_time = 60;
if(pic_end_count > pic_wait_time)
{ // FW/BW need 60 (1 second) // stop->logo 20 (1/3 second)
// maybe we need to set a variable to distinguish them...
regs0->vld_ctrl = 1;
regs0->vld_ctrl = 0;
pic_end_count = 0;
if(IsAVDRealTime())
{
regs0->reset = 0x30;
regs0->reset = 0;
}
}
}
else
pic_end_count = 0;
}
if(vpp_disable_video)
return;
#ifdef SUPPORT_OGT
Intr_Decode_OGT();
#endif
#if VIDEO_COMPRESS==MEM_411666
// SNR improvement
if((play_hires ==1) || ((gettrkcna(cd_trk_now)&0x40)==0))
{ /*氨
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -