int main(void) { VGA_Init(); USART_Init(); PS2_Init(); ANSI_Init(); while(1) { if(FIFO_ReadAvail((FIFO*)RxBuf)) ANSI_FSM(Getc((FIFO*)RxBuf)); if(FIFO_ReadAvail((FIFO*)PS2_Buf)) PS2_Task(); if(Cursor.Update) Cursor_Task(); } }
/*envia dato y comprueba su recepcion correcta, si no reenvia o resetea y reenvia*/ void PS2_send(unsigned char data){ unsigned char ack_byte; PS2_write(data); PS2_read(&ack_byte); switch (ack_byte){ case PS2_ACK: { break; } case PS2_RESEND: { PS2_send(data); break; } case PS2_ERROR: { PS2_Init(); PS2_send(data); break; } default: break; } }
///////////////////////////////////////////////////////////// // MAIN // ///////////////////////////////////////////////////////////// int main(int argc, char **argv) { PS2_Init(); audsrv_init(); format.bits = 16; format.freq = 44100; format.channels = 2; audsrv_set_format(&format); guiFadeOut(4); DisplayIntroBox(APP_NAME); guiFadeIn(4); guiFadeOut(4); for ( int i = 0; i < 160*144; i++ ) g_BitmapData[i] = 0; PS2_LoadButtonsConfig(ButtonsConfigPath); Load_CNF(ConfigPath); if ( SoundEnabled ) audsrv_set_volume(MAX_VOLUME); else audsrv_set_volume(MIN_VOLUME); // Main Loop while ( true ) { g_SamplePos = 0; dwKeyPad1 = 0; dwKeyPad2 = 0; if ( !auto_ROM_flag ) { MenuBrowser(); } else { // KarasQ: Here preselected ROM path is already // copied to g_FilePath (look function Load_CNF) auto_ROM_flag = 0; } int res = infogb_load_rom(g_FilePath); // KarasQ: display error and return to // browser if ROM is not loaded successfully if ( res < 1 ) { infogb_close(); } switch ( res ) { case 0: DisplayMessageBox ( "\nERROR!\n\n" "Could not load ROM\n" "Failed opening file\n" "File not found!", MSG_VOID ); continue; case -1: DisplayMessageBox ( "\nWARNING!\n\n" "Could not load ROM\n" "Unknown ROM type!", MSG_VOID ); continue; case -2: DisplayMessageBox ( "\nWARNING!\n\n" "Could not load ROM\n" "Unknown ROM size!", MSG_VOID ); continue; case -3: DisplayMessageBox ( "\nWARNING!\n\n" "Could not load ROM\n" "Unknown RAM size!", MSG_VOID ); continue; case -4: DisplayMessageBox ( "\nWARNING!\n\n" "File name of this ROM is longer\n" "than 32 characters! It's better\n" "to change it before playing!", MSG_VOID ); continue; case -5: DisplayMessageBox ( "\nERROR!\n\n" "Could not extract file archive\n", MSG_VOID ); continue; } CDVD_Stop(); infogb_init(); gameboy_cpu_hardreset(); gameboy_cpu_run(); audsrv_stop_audio(); infogb_close(); } return 0; }
/* ********************************************************************************************************* * 函 数 名: Init_Mouse * 功能说明: 用于初始化鼠标 * 形 参:无 * 返 回 值: 返回0表示成功返回 否则没有成功 ********************************************************************************************************* */ u8 Init_Mouse(void) { u8 t; PS2_Init(); delay_ms(800); /* 等待上电复位完成 */ PS2_Status=CMDMODE; /* 进入命令模式 */ /* 复位鼠标 */ t=PS2_Send_Cmd(PS_RESET); if(t!=0) return 1; t=PS2_Get_Byte(); if(t!=0XFA) return 2; t=0; /* 等待复位完毕 */ while((PS2_Status&0x80)==0) { t++; delay_ms(10); if(t>50)return 3; } PS2_Get_Byte(); /* 得到0XAA */ PS2_Get_Byte(); /* 得到ID 0X00 */ /* 进入滚轮模式的特殊初始化序列 分别设置200,100,80采样率 */ PS2_Send_Cmd(SET_SAMPLE_RATE); /* 进入设置采样率 */ if(PS2_Get_Byte()!=0XFA)return 4; /* 传输失败 */ PS2_Send_Cmd(0XC8); /* 采样率200 */ if(PS2_Get_Byte()!=0XFA)return 5; /* 传输失败 */ PS2_Send_Cmd(SET_SAMPLE_RATE); /* 进入设置采样率 */ if(PS2_Get_Byte()!=0XFA)return 6; /* 传输失败 */ PS2_Send_Cmd(0X64); /* 采样率100 */ if(PS2_Get_Byte()!=0XFA)return 7; /* 传输失败 */ PS2_Send_Cmd(SET_SAMPLE_RATE); /* 进入设置采样率 */ if(PS2_Get_Byte()!=0XFA)return 8; /* 传输失败 */ PS2_Send_Cmd(0X50); /* 采样率80 */ if(PS2_Get_Byte()!=0XFA)return 9; /* 传输失败 */ /* 序列完成 */ PS2_Send_Cmd(GET_DEVICE_ID); /* 读取ID */ if(PS2_Get_Byte()!=0XFA)return 10; /* 传输失败 */ MOUSE_ID=PS2_Get_Byte(); /* 得到MOUSE ID */ PS2_Send_Cmd(SET_SAMPLE_RATE); /* 再次进入设置采样率 */ if(PS2_Get_Byte()!=0XFA)return 11; /* 传输失败 */ PS2_Send_Cmd(0X0A); /* 采样率10 */ if(PS2_Get_Byte()!=0XFA)return 12; /* 传输失败 */ PS2_Send_Cmd(GET_DEVICE_ID); /* 读取ID */ if(PS2_Get_Byte()!=0XFA)return 13; /* 传输失败 */ MOUSE_ID=PS2_Get_Byte(); /* 得到MOUSE ID */ PS2_Send_Cmd(SET_RESOLUTION); /* 设置分辨率 */ if(PS2_Get_Byte()!=0XFA)return 14; /* 传输失败 */ PS2_Send_Cmd(0X03); /* 8点/mm */ if(PS2_Get_Byte()!=0XFA)return 15; /* 传输失败 */ PS2_Send_Cmd(SET_SCALING11); /* 设置缩放比率为1:1*/ if(PS2_Get_Byte()!=0XFA)return 16; /* 传输失败 */ PS2_Send_Cmd(SET_SAMPLE_RATE); /* 设置采样率 */ if(PS2_Get_Byte()!=0XFA)return 17; /* 传输失败 */ PS2_Send_Cmd(0X28); /* 40 */ if(PS2_Get_Byte()!=0XFA)return 18; /* 传输失败 */ PS2_Send_Cmd(EN_DATA_REPORT); /* 使能数据报告 */ if(PS2_Get_Byte()!=0XFA)return 19; /* 传输失败 */ PS2_Status=MOUSE; /* 进入鼠标模式 */ return 0; /* 无错误,初始化成功 */ }
//初始化鼠标 //返回:0,初始化成功 //其他:错误代码 //CHECK OK 2010/5/2 u8 Init_Mouse(void) { u8 t; PS2_Init(); delay_ms(800); //等待上电复位完成 PS2_Status=CMDMODE; //进入命令模式 t=PS2_Send_Cmd(PS_RESET); //复位鼠标 if(t!=0)return 1; t=PS2_Get_Byte(); if(t!=0XFA)return 2; t=0; while((PS2_Status&0x80)==0)//等待复位完毕 { t++; delay_ms(10); if(t>50)return 3; } PS2_Get_Byte();//得到0XAA PS2_Get_Byte();//得到ID 0X00 //进入滚轮模式的特殊初始化序列 PS2_Send_Cmd(SET_SAMPLE_RATE);//进入设置采样率 if(PS2_Get_Byte()!=0XFA)return 4;//传输失败 PS2_Send_Cmd(0XC8);//采样率200 if(PS2_Get_Byte()!=0XFA)return 5;//传输失败 PS2_Send_Cmd(SET_SAMPLE_RATE);//进入设置采样率 if(PS2_Get_Byte()!=0XFA)return 6;//传输失败 PS2_Send_Cmd(0X64);//采样率100 if(PS2_Get_Byte()!=0XFA)return 7;//传输失败 PS2_Send_Cmd(SET_SAMPLE_RATE);//进入设置采样率 if(PS2_Get_Byte()!=0XFA)return 8;//传输失败 PS2_Send_Cmd(0X50);//采样率80 if(PS2_Get_Byte()!=0XFA)return 9;//传输失败 //序列完成 PS2_Send_Cmd(GET_DEVICE_ID); //读取ID if(PS2_Get_Byte()!=0XFA)return 10;//传输失败 MOUSE_ID=PS2_Get_Byte();//得到MOUSE ID PS2_Send_Cmd(SET_SAMPLE_RATE);//再次进入设置采样率 if(PS2_Get_Byte()!=0XFA)return 11;//传输失败 PS2_Send_Cmd(0X0A);//采样率10 if(PS2_Get_Byte()!=0XFA)return 12;//传输失败 PS2_Send_Cmd(GET_DEVICE_ID); //读取ID if(PS2_Get_Byte()!=0XFA)return 13;//传输失败 MOUSE_ID=PS2_Get_Byte();//得到MOUSE ID PS2_Send_Cmd(SET_RESOLUTION); //设置分辨率 if(PS2_Get_Byte()!=0XFA)return 14;//传输失败 PS2_Send_Cmd(0X03);//8点/mm if(PS2_Get_Byte()!=0XFA)return 15;//传输失败 PS2_Send_Cmd(SET_SCALING11); //设置缩放比率为1:1 if(PS2_Get_Byte()!=0XFA)return 16;//传输失败 PS2_Send_Cmd(SET_SAMPLE_RATE); //设置采样率 if(PS2_Get_Byte()!=0XFA)return 17;//传输失败 PS2_Send_Cmd(0X28);//40 if(PS2_Get_Byte()!=0XFA)return 18;//传输失败 PS2_Send_Cmd(EN_DATA_REPORT); //使能数据报告 if(PS2_Get_Byte()!=0XFA)return 19;//传输失败 PS2_Status=MOUSE;//进入鼠标模式 return 0;//无错误,初始化成功 }