亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? seta11.c

?? linux下的任天堂模擬器代碼。供大家參考。
?? C
字號:
// ST-011 SNES DSP adapted from Morita Shogi 64//// notes:// - the SNES uses DMA to/from 60:0000 and maybe 68:0xxx// - some code redundancy (helper subroutines for movement projection)//// - OPS04/05 have unknown output values (!)// - OPS06/07 have unknown purposes//// - plenty of missing opcodes that don't show up in the only known binary log (st011-demo)//   (play the game until captured/promoted pieces, king checked, endgame)// - minus emulation cycles (busy signals), bit-perfect to 'st011-demo'//#define DEBUG_DSP#ifdef DEBUG_DSP#include <stdio.h>int debug1, debug2;int line_count;#endifvoid (*RunST011)();void ST011_Command();unsigned char ST011_DR;unsigned char ST011_SR;int ST011_input_length;#define ST011_ram setaramdataextern unsigned char *setaramdata;#define ST011_board ( ST011_ram+0x130 )int ST011_dma_count;int ST011_dma_index;int ST011_king1;int ST011_king2;// (x,y)#define MOVE_UUL   -1,-20#define MOVE_UL		 -1,-10#define MOVE_ULAll -9,- 9#define MOVE_U		  0,-10#define MOVE_UAll   0,- 9#define MOVE_UR		  1,-10#define MOVE_URAll  9,- 9#define MOVE_UUR    1,-20#define MOVE_L		 -1,  0#define MOVE_LAll	 -9,  0#define MOVE_R		  1,  0#define MOVE_RAll	  9,  0#define MOVE_DDL	 -1, 20#define MOVE_DL		 -1, 10#define MOVE_DLAll -9,  9#define MOVE_D		  0, 10#define MOVE_DAll   0,  9#define MOVE_DR		  1, 10#define MOVE_DRAll  9,  9#define MOVE_DDR	  1, 20#define MOVE_STOP 127,127#define MOVE_NOP	  0,  0const int ST011_move_table[8*2][9*2] ={	// Pawn: one step forward	// - Promoted: same as Gold	{ MOVE_D, MOVE_STOP, MOVE_NOP, MOVE_NOP, MOVE_NOP, MOVE_NOP, MOVE_NOP, MOVE_NOP, MOVE_NOP },	{ MOVE_DR, MOVE_D, MOVE_DL, MOVE_R, MOVE_L, MOVE_U, MOVE_STOP, MOVE_NOP, MOVE_NOP },	// Lance: all steps forward	// - Promoted: same as Gold	{ MOVE_DAll, MOVE_STOP, MOVE_NOP, MOVE_NOP, MOVE_NOP, MOVE_NOP, MOVE_NOP, MOVE_NOP, MOVE_NOP },	{ MOVE_DR, MOVE_D, MOVE_DL, MOVE_R, MOVE_L, MOVE_U, MOVE_STOP, MOVE_NOP, MOVE_NOP },	// Knight: one step side, two forward	// - Promoted: same as Gold	{ MOVE_DDR, MOVE_DDL, MOVE_STOP, MOVE_NOP, MOVE_NOP, MOVE_NOP, MOVE_NOP, MOVE_NOP, MOVE_NOP },	{ MOVE_DR, MOVE_D, MOVE_DL, MOVE_R, MOVE_L, MOVE_U, MOVE_STOP, MOVE_NOP, MOVE_NOP },	// Silver general: one any diagonal, one step forward	// - Promoted: same as Gold	{ MOVE_DR, MOVE_D, MOVE_DL, MOVE_UR, MOVE_UL, MOVE_STOP, MOVE_NOP, MOVE_NOP, MOVE_NOP },	{ MOVE_DR, MOVE_D, MOVE_DL, MOVE_R, MOVE_L, MOVE_U, MOVE_STOP, MOVE_NOP, MOVE_NOP },	// Gold general: one any forward, one sideways or one backward	// - Promoted: N/A	{ MOVE_DR, MOVE_D, MOVE_DL, MOVE_R, MOVE_L, MOVE_U, MOVE_STOP, MOVE_NOP, MOVE_NOP },	{ MOVE_STOP, MOVE_NOP, MOVE_NOP, MOVE_NOP, MOVE_NOP, MOVE_NOP, MOVE_NOP, MOVE_NOP, MOVE_NOP },	// Bishop: any diagonal	// - Promoted: Bishop + King	{ MOVE_DRAll, MOVE_DLAll, MOVE_URAll, MOVE_ULAll, MOVE_STOP, MOVE_NOP, MOVE_NOP, MOVE_NOP, MOVE_NOP },	{ MOVE_DRAll, MOVE_D, MOVE_DLAll, MOVE_R, MOVE_L, MOVE_URAll, MOVE_U, MOVE_ULAll, MOVE_STOP },	// Rook: any vertical, horizontal	// - Promoted: Rook + King	{ MOVE_DAll, MOVE_RAll, MOVE_LAll, MOVE_UAll, MOVE_STOP, MOVE_NOP, MOVE_NOP, MOVE_NOP, MOVE_NOP },	{ MOVE_DR, MOVE_DAll, MOVE_DL, MOVE_RAll, MOVE_LAll, MOVE_UR, MOVE_UAll, MOVE_UL, MOVE_STOP },	// King: one any direction	// - Promoted: N/A	{ MOVE_DR, MOVE_D, MOVE_DL, MOVE_R, MOVE_L, MOVE_UR, MOVE_U, MOVE_UL, MOVE_STOP },	{ MOVE_STOP, MOVE_NOP, MOVE_NOP, MOVE_NOP, MOVE_NOP, MOVE_NOP, MOVE_NOP, MOVE_NOP, MOVE_NOP },};void ST011_Reset(){	RunST011 = &ST011_Command;  ST011_SR=0xff;}void ST011_OP01_A(){	if( ST011_dma_count-- )	{		ST011_board[ ST011_dma_index++ ] = ST011_DR;	}	if( ST011_dma_count == 0 )	{#ifdef DEBUG_DSP		int lcv1, lcv2;#endif		int lcv;		for( lcv = 0; lcv < 11; lcv++ )		{			ST011_board[ lcv ] = 0;		}		for( lcv = 11; lcv < 21; lcv++ )		{			ST011_board[ lcv ] = 0x80;		}		ST011_king1 = ST011_board[ 126+21 ];		ST011_king2 = ST011_board[ 127+21 ];		RunST011 = &ST011_Command;		ST011_SR = 0xc4;#ifdef DEBUG_DSP		// Debug		printf( "OP01\n" );		for( lcv1 = 0; lcv1 < 9; lcv1++ )		{			for( lcv2 = 0; lcv2 < 10; lcv2++ )			{				printf( "%02x ", ST011_board[ lcv1*10 + lcv2 + 21 ] );			}			printf( "\n" );		}		printf( "OP01 END\n\n" );#endif	}}void ST011_OP01(){	ST011_dma_count = 128;	ST011_dma_index = 0+21;	RunST011 = &ST011_OP01_A;	ST011_SR = 0xa4;}void ST011_OP02_A(){	if( ST011_dma_count-- )	{		ST011_DR = ST011_ram[ ST011_dma_index-- ];	}	if( ST011_dma_count == 0 )	{#ifdef DEBUG_DSP		int lcv1, lcv2;#endif		RunST011 = &ST011_Command;		ST011_SR = 0xc4;#ifdef DEBUG_DSP		// Debug#define OP02_ROW 10		printf( "OP02\n" );		for( lcv1 = 0; lcv1 < 0x83 / OP02_ROW; lcv1++ )		{			for( lcv2 = 0; lcv2 < OP02_ROW; lcv2++ )			{				printf( "%02x ", ST011_ram[ debug1 - lcv1 * OP02_ROW - lcv2 ] );			}			printf( "\n" );		}		printf( "OP02 END\n\n" );#endif	}}void ST011_OP02(){	switch( ST011_input_length-- )	{		case 4: ST011_dma_index = ST011_DR;	break;		case 3: ST011_dma_index |= ST011_DR << 8;	break;		case 2: ST011_dma_count = ST011_DR;	break;		case 1:			ST011_dma_count |= ST011_DR << 8;#ifdef DEBUG_DSP			debug1 = ST011_dma_index;			debug2 = 0;#endif			RunST011 = &ST011_OP02_A;			ST011_SR = 0xa4;			break;	}}void ST011_Project_Moves( int color ){	int row, col, lcv, index;	int dir;	index = 0x121;	for( lcv = 0; lcv < 0x83; lcv++ )	{		ST011_ram[ index-- ] = 0;	}	index = 0x121 - 21;	if( color == 0x20 )	{		dir = 1;	}	else	{		dir = -1;	}	for( row = 0; row < 9; row++ )	{		for( col = 0; col < 10; col++ )		{			int shogi_piece;			int piece_id;			int lcv_steps, lcv_move;			int move_list[ 9*2 ];			shogi_piece = ST011_board[ row*10+col+21 ];			piece_id = shogi_piece & 0x1f;			if( col == 9 ) continue;			if( shogi_piece == 0x00 ) continue;			if( ( shogi_piece & ~0x1f ) != color ) continue;			for( lcv = 0; lcv < 9*2; lcv++ )			{				move_list[ lcv ] = ST011_move_table[ piece_id >> 1 ][ lcv ];			}			lcv_move = 0;			while( move_list[ lcv_move ] != 0x7f )			{				int pos_x, pos_y;				lcv_steps = 1;				if( move_list[ lcv_move ] == 9 || move_list[ lcv_move ] == -9 )				{					lcv_steps = 9;					if( move_list[ lcv_move ] == 9 )					{						move_list[ lcv_move ] = 1;					}					else					{						move_list[ lcv_move ] = -1;					}				}				if( move_list[ lcv_move+1 ] == 9 || move_list[ lcv_move+1 ] == -9 )				{					lcv_steps = 9;					if( move_list[ lcv_move+1 ] == 9 )					{						move_list[ lcv_move+1 ] = 1;					}					else					{						move_list[ lcv_move+1 ] = -1;					}				}				else				{					move_list[ lcv_move+1 ] /= 10;				}				pos_x = col;				pos_y = row;				while( lcv_steps-- )				{					pos_x += move_list[ lcv_move+0 ];					pos_y += ( move_list[ lcv_move+1 ] * dir );					ST011_ram[ index - pos_y*10 - pos_x ] = 0x80;					if( ST011_board[ pos_y*10 + pos_x + 21 ] ) break;				}				lcv_move += 2;			}		} // end col	} // end row}int ST011_Project_Valid_Moves( int color ){	int row, col, lcv, index;	int dir;	index = 0x556;	if( color == 0x20 )	{		dir = 1;	}	else	{		dir = -1;	}	for( row = 0; row < 9; row++ )	{		for( col = 0; col < 10; col++ )		{			int shogi_piece;			int piece_id;			int lcv_steps, lcv_move;			int move_list[ 9*2 ];			shogi_piece = ST011_board[ row*10+col+21 ];			piece_id = shogi_piece & 0x1f;			if( col == 9 ) continue;			if( shogi_piece == 0x00 ) continue;			if( ( shogi_piece & ~0x1f ) != color ) continue;			for( lcv = 0; lcv < 9*2; lcv++ )			{				move_list[ lcv ] = ST011_move_table[ piece_id >> 1 ][ lcv ];			}			lcv_move = 0;			while( move_list[ lcv_move ] != 0x7f )			{				int pos_x, pos_y;				lcv_steps = 1;				if( move_list[ lcv_move ] == 9 || move_list[ lcv_move ] == -9 )				{					lcv_steps = 9;					if( move_list[ lcv_move ] == 9 )					{						move_list[ lcv_move ] = 1;					}					else					{						move_list[ lcv_move ] = -1;					}				}				if( move_list[ lcv_move+1 ] == 9 || move_list[ lcv_move+1 ] == -9 )				{					lcv_steps = 9;					if( move_list[ lcv_move+1 ] == 9 )					{						move_list[ lcv_move+1 ] = 1;					}					else					{						move_list[ lcv_move+1 ] = -1;					}				}				else				{					move_list[ lcv_move+1 ] /= 10;				}				pos_x = col;				pos_y = row;				while( lcv_steps-- )				{					pos_x += move_list[ lcv_move+0 ];					pos_y += ( move_list[ lcv_move+1 ] * dir );					if( pos_x < 0 ) break;					if( pos_x > 8 ) break;					if( pos_y < 0 ) break;					if( pos_y > 8 ) break;					if( ( ST011_board[ pos_y*10 + pos_x + 21 ] & ~0x1f ) == color ) break;					ST011_ram[ index + 0x000 ] = 21 + row*10 + col;					ST011_ram[ index + 0x001 ] = 0;					ST011_ram[ index + 0x418 ] = 21 + pos_y*10 + pos_x;					ST011_ram[ index + 0x419 ] = 0;					if( pos_y >= 6 )					{						ST011_ram[ index + 0x418 ] |= 0x80;					}					index += 2;					if( ST011_board[ pos_y*10+pos_x+21 ] ) break;				}				lcv_move += 2;			}		} // end col	} // end row	return ( index-0x556 ) >> 1;}void ST011_OP04(){	ST011_Project_Moves( 0x40 );	// unknown outputs	ST011_ram[ 0x12c ] = 0;	ST011_ram[ 0x12d ] = 0;	ST011_ram[ 0x12e ] = 0;	ST011_ram[ 0x12f ] = 0;	RunST011 = &ST011_Command;	ST011_SR = 0xc4;}void ST011_OP05(){	ST011_Project_Moves( 0x20 );	// unknown outputs	ST011_ram[ 0x12c ] = 0;	ST011_ram[ 0x12d ] = 0;	ST011_ram[ 0x12e ] = 0;	ST011_ram[ 0x12f ] = 0;	RunST011 = &ST011_Command;	ST011_SR = 0xc4;}void ST011_OP0E(){	int valid_moves;	valid_moves = ST011_Project_Valid_Moves( 0x20 );	ST011_ram[ 0x12c ] = valid_moves & 0xff;	ST011_ram[ 0x12d ] = ( valid_moves >> 8 ) & 0xff;	RunST011 = &ST011_Command;	ST011_SR = 0xc4;}void ST011_Command(){#ifdef DEBUG_DSP	printf( "OP%02X @ line %d\n", ST011_DR, line_count );#endif	// busy	ST011_SR = 0x84;	switch( ST011_DR )	{		// Download shogi playboard to on-board memory		case 0x01:			ST011_OP01();			break;		// Upload shogi analysis data to outside memory		case 0x02:			ST011_input_length = 4;			RunST011 = ST011_OP02;			break;		// Project all moves of player color $40		case 0x04:			ST011_OP04();			break;		// Project all moves of player color $20		case 0x05:			ST011_OP05();			break;		// Unknown - seems to set flags $00,$20,$40,..$e0 for restricted movement lists		case 0x06:			//ST011_OP06();			ST011_SR = 0xc4;			break;		// Unknown - seems to set flags $00,$20,$40,..$e0 for restricted movement lists		case 0x07:			//ST011_OP07();			ST011_SR = 0xc4;			break;		// List valid moves of player color $20		case 0x0E:			ST011_OP0E();			break;		default:#ifdef DEBUG_DSP			printf( "Unknown OP @ line %d\n", line_count );#endif			break;	}}unsigned short seta11_address;unsigned char seta11_byte;void ST011_MapR_68(){  if (seta11_address < 0x1000)  {    ST011_DR = ST011_ram[seta11_address & 0xfff];  }  seta11_byte = ST011_DR;}void ST011_MapW_68(){  ST011_DR = seta11_byte;  if (seta11_address < 0x1000)  {    ST011_ram[seta11_address & 0xfff] = ST011_DR;  }}void ST011_MapR_60(){  if (seta11_address == 0)  {    RunST011();  }  if (seta11_address == 1)  {    seta11_byte = ST011_SR;    return;  }  seta11_byte = ST011_DR;}void ST011_MapW_60(){  ST011_DR = seta11_byte;  if (seta11_address == 0)  {    RunST011();  }}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩精品每日更新| 在线免费视频一区二区| 91蜜桃免费观看视频| 91精品国产高清一区二区三区| 亚洲自拍欧美精品| 国产一区二区三区| 88在线观看91蜜桃国自产| 欧美激情一区二区三区全黄| 免费观看一级欧美片| 欧美午夜一区二区| 亚洲日本乱码在线观看| 国产精一品亚洲二区在线视频| 欧美日韩精品一区视频| 一区二区三区欧美亚洲| 丁香六月久久综合狠狠色| 日韩欧美国产一区二区在线播放| 亚洲欧美二区三区| 99r国产精品| 中文一区二区在线观看| 国产精品综合二区| 日韩欧美中文一区| 蜜臂av日日欢夜夜爽一区| 欧美在线影院一区二区| 一区二区三区四区蜜桃| 91免费版在线看| 欧美精彩视频一区二区三区| 丁香五精品蜜臀久久久久99网站| 精品播放一区二区| 国产一区不卡视频| 久久亚洲精品小早川怜子| 国产综合色视频| 久久久久久久国产精品影院| 激情久久五月天| 久久综合九色综合久久久精品综合| 老司机免费视频一区二区 | 92国产精品观看| 国产精品无人区| 成人国产精品视频| √…a在线天堂一区| 一本大道av一区二区在线播放 | 成人一区在线看| 国产精品久久二区二区| 91丝袜呻吟高潮美腿白嫩在线观看| 中文字幕五月欧美| 99热在这里有精品免费| 亚洲午夜日本在线观看| 日韩欧美在线影院| 成人手机电影网| 一区二区三区四区五区视频在线观看| 欧美性感一类影片在线播放| 日韩精彩视频在线观看| 26uuu亚洲综合色欧美| a在线欧美一区| 亚洲国产精品嫩草影院| 日韩欧美中文字幕精品| 成人精品国产免费网站| 一区二区高清免费观看影视大全 | 久久九九99视频| 成人av免费在线播放| 亚洲国产成人av网| 精品久久久久久久久久久久久久久 | 久久综合九色综合欧美就去吻| 成人一二三区视频| 亚洲一区二区五区| 精品人在线二区三区| 99久久精品国产一区二区三区| 一区二区三区在线影院| 精品国产露脸精彩对白| 97se亚洲国产综合自在线观| 三级成人在线视频| 中文一区一区三区高中清不卡| 欧美视频完全免费看| 精品伊人久久久久7777人| 国产精品国产自产拍高清av | 91免费观看在线| 久久成人久久鬼色| 一区二区三区在线视频免费| 精品对白一区国产伦| 欧美午夜寂寞影院| 国产91精品在线观看| 五月激情六月综合| 中文无字幕一区二区三区| 欧美精品第1页| 99re热视频精品| 国产九九视频一区二区三区| 三级影片在线观看欧美日韩一区二区 | 亚洲视频免费观看| 精品伦理精品一区| 欧美日韩免费一区二区三区视频| 国产传媒久久文化传媒| 男男成人高潮片免费网站| 亚洲欧美日本韩国| 亚洲国产精品ⅴa在线观看| 91麻豆精品国产91久久久更新时间 | 国产精品久久久久影院色老大| 91精品国产91热久久久做人人 | 亚洲国产精品影院| 亚洲视频一二三| 欧美国产综合色视频| 久久欧美一区二区| 精品成a人在线观看| 欧美一级生活片| 这里只有精品免费| 欧美男生操女生| 欧美中文字幕不卡| 在线视频你懂得一区| 91首页免费视频| 91在线视频观看| 91小视频在线免费看| 成人av免费在线观看| av在线这里只有精品| 9i在线看片成人免费| 99在线精品免费| 91香蕉视频污| 色琪琪一区二区三区亚洲区| 一本大道久久精品懂色aⅴ| 91亚洲精品久久久蜜桃| 99精品一区二区| 91色九色蝌蚪| 欧美专区亚洲专区| 在线播放中文一区| 精品免费日韩av| 久久久久久久国产精品影院| 日本一区二区三区四区| 国产精品国产自产拍高清av | 美女在线一区二区| 美美哒免费高清在线观看视频一区二区| 爽好多水快深点欧美视频| 天天综合天天综合色| 奇米精品一区二区三区在线观看| 久久精品国产精品亚洲红杏| 极品销魂美女一区二区三区| 国产精品一区二区视频| av电影在线观看完整版一区二区| 99re这里都是精品| 欧美午夜免费电影| 日韩午夜三级在线| 国产日韩欧美不卡| 一区二区三区在线免费播放| 日日夜夜精品视频免费| 国产乱子伦视频一区二区三区| 丁香亚洲综合激情啪啪综合| 在线观看日韩精品| 日韩一级完整毛片| 欧美国产精品一区二区三区| 亚洲老妇xxxxxx| 日韩和欧美一区二区三区| 国产精品中文字幕欧美| 91国产免费看| 精品国产乱码久久久久久夜甘婷婷 | 午夜精品福利一区二区三区蜜桃| 精品午夜一区二区三区在线观看| 懂色av噜噜一区二区三区av| 欧美日本在线看| 久久综合狠狠综合久久激情| 一区二区三区中文在线观看| 理论电影国产精品| 在线视频你懂得一区| 精品国产一区二区三区久久影院 | 一本大道久久精品懂色aⅴ| 欧美一区二区成人6969| 国产精品欧美久久久久无广告| 亚洲va欧美va人人爽午夜| 国产精品小仙女| 在线不卡的av| 亚洲美女精品一区| 国产专区综合网| 91精品国产福利| 一个色综合av| av电影天堂一区二区在线| 精品国产乱码久久久久久老虎| 亚洲国产成人av| 91影视在线播放| 国产精品久久久久三级| 久久精品国产亚洲高清剧情介绍 | 亚洲一卡二卡三卡四卡| 成人午夜在线视频| 精品国产精品一区二区夜夜嗨| 久久精品二区亚洲w码| 99久久国产综合精品麻豆| 欧美大片在线观看一区二区| 亚洲国产精品一区二区久久| 91一区一区三区| 国产精品乱人伦中文| 国产经典欧美精品| 久久亚区不卡日本| 美洲天堂一区二卡三卡四卡视频| 欧美色精品天天在线观看视频| 亚洲欧美在线aaa| 福利一区二区在线| xnxx国产精品| 激情深爱一区二区| 精品久久久久久无| 久久电影网电视剧免费观看| 91精品国模一区二区三区| 亚洲夂夂婷婷色拍ww47| 91麻豆免费观看| 一区二区三区.www| 欧美性高清videossexo| 亚洲第一久久影院|