⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 6821pia.c

📁 这个是延伸mame的在wince平台下的游戏模拟器的代码
💻 C
📖 第 1 页 / 共 2 页
字号:
				if (p->out_cb2 ^ temp)
					if (p->out_cb2_func) p->out_cb2_func (0, temp);

				/* set the new value */
				p->out_cb2 = temp;
			}

			/* update the control register */
			p->ctl_b = data;
			break;
	}
}


/******************* interface setting PIA port A input *******************/

void pia_set_input_a (int which, int data)
{
	struct pia6821 *p = pia + which;

	/* set the input, what could be easier? */
	p->in_a = data;
}



/******************* interface setting PIA port CA1 input *******************/

void pia_set_input_ca1 (int which, int data)
{
	struct pia6821 *p = pia + which;

	/* limit the data to 0 or 1 */
	data = data ? 1 : 0;

	/* the new state has caused a transition */
	if (p->in_ca1 ^ data)
	{
		/* handle the active transition */
		if ((data && C1_LOW_TO_HIGH (p->ctl_a)) || (!data && C1_HIGH_TO_LOW (p->ctl_a)))
		{
			/* mark the IRQ */
			p->irq_a1 = 1;

			/* call the IRQ function if enabled */
			if (IRQ1_ENABLED (p->ctl_a))
				if (p->irq_a_func) p->irq_a_func ();

			/* CA2 is configured as output and in read strobe mode and cleared by a CA1 transition */
			if (C2_OUTPUT (p->ctl_a) && C2_STROBE_MODE (p->ctl_a) && STROBE_C1_RESET (p->ctl_a))
			{
				/* call the CA2 output function */
				if (!p->out_ca2)
					if (p->out_ca2_func) p->out_ca2_func (0, 1);

				/* clear CA2 */
				p->out_ca2 = 1;
			}
		}
	}

	/* set the new value for CA1 */
	p->in_ca1 = data;
}



/******************* interface setting PIA port CA2 input *******************/

void pia_set_input_ca2 (int which, int data)
{
	struct pia6821 *p = pia + which;

	/* limit the data to 0 or 1 */
	data = data ? 1 : 0;

	/* CA2 is in input mode */
	if (C2_INPUT (p->ctl_a))
	{
		/* the new state has caused a transition */
		if (p->in_ca2 ^ data)
		{
			/* handle the active transition */
			if ((data && C2_LOW_TO_HIGH (p->ctl_a)) || (!data && C2_HIGH_TO_LOW (p->ctl_a)))
			{
				/* mark the IRQ */
				p->irq_a2 = 1;

				/* call the IRQ function if enabled */
				if (IRQ2_ENABLED (p->ctl_a))
					if (p->irq_a_func) p->irq_a_func ();
			}
		}
	}

	/* set the new value for CA2 */
	p->in_ca2 = data;
}



/******************* interface setting PIA port B input *******************/

void pia_set_input_b (int which, int data)
{
	struct pia6821 *p = pia + which;

	/* set the input, what could be easier? */
	p->in_b = data;
}



/******************* interface setting PIA port CB1 input *******************/

void pia_set_input_cb1 (int which, int data)
{
	struct pia6821 *p = pia + which;

	/* limit the data to 0 or 1 */
	data = data ? 1 : 0;

	/* the new state has caused a transition */
	if (p->in_cb1 ^ data)
	{
		/* handle the active transition */
		if ((data && C1_LOW_TO_HIGH (p->ctl_b)) || (!data && C1_HIGH_TO_LOW (p->ctl_b)))
		{
			/* mark the IRQ */
			p->irq_b1 = 1;

			/* call the IRQ function if enabled */
			if (IRQ1_ENABLED (p->ctl_b))
				if (p->irq_b_func) p->irq_b_func ();

			/* CB2 is configured as output and in write strobe mode and cleared by a CA1 transition */
			if (C2_OUTPUT (p->ctl_b) && C2_STROBE_MODE (p->ctl_b) && STROBE_C1_RESET (p->ctl_b))
			{
				/* the IRQ1 flag must have also been cleared */
				if (!p->irq_b1)
				{
					/* call the CB2 output function */
					if (!p->out_cb2)
						if (p->out_cb2_func) p->out_cb2_func (0, 1);

					/* clear CB2 */
					p->out_cb2 = 1;
				}
			}
		}
	}

	/* set the new value for CB1 */
	p->in_cb1 = data;
}



/******************* interface setting PIA port CB2 input *******************/

void pia_set_input_cb2 (int which, int data)
{
	struct pia6821 *p = pia + which;

	/* limit the data to 0 or 1 */
	data = data ? 1 : 0;

	/* CB2 is in input mode */
	if (C2_INPUT (p->ctl_b))
	{
		/* the new state has caused a transition */
		if (p->in_cb2 ^ data)
		{
			/* handle the active transition */
			if ((data && C2_LOW_TO_HIGH (p->ctl_b)) || (!data && C2_HIGH_TO_LOW (p->ctl_b)))
			{
				/* mark the IRQ */
				p->irq_b2 = 1;

				/* call the IRQ function if enabled */
				if (IRQ2_ENABLED (p->ctl_b))
					if (p->irq_b_func) p->irq_b_func ();
			}
		}
	}

	/* set the new value for CA2 */
	p->in_cb2 = data;
}



/******************* Standard 8-bit CPU interfaces, D0-D7 *******************/

int pia_1_r (int offset) { return pia_read (0, offset); }
int pia_2_r (int offset) { return pia_read (1, offset); }
int pia_3_r (int offset) { return pia_read (2, offset); }
int pia_4_r (int offset) { return pia_read (3, offset); }
int pia_5_r (int offset) { return pia_read (4, offset); }
int pia_6_r (int offset) { return pia_read (5, offset); }
int pia_7_r (int offset) { return pia_read (6, offset); }
int pia_8_r (int offset) { return pia_read (7, offset); }

void pia_1_w (int offset, int data) { pia_write (0, offset, data); }
void pia_2_w (int offset, int data) { pia_write (1, offset, data); }
void pia_3_w (int offset, int data) { pia_write (2, offset, data); }
void pia_4_w (int offset, int data) { pia_write (3, offset, data); }
void pia_5_w (int offset, int data) { pia_write (4, offset, data); }
void pia_6_w (int offset, int data) { pia_write (5, offset, data); }
void pia_7_w (int offset, int data) { pia_write (6, offset, data); }
void pia_8_w (int offset, int data) { pia_write (7, offset, data); }

/******************* 8-bit A/B port interfaces *******************/

void pia_1_porta_w (int offset, int data) { pia_set_input_a (0, data); }
void pia_2_porta_w (int offset, int data) { pia_set_input_a (1, data); }
void pia_3_porta_w (int offset, int data) { pia_set_input_a (2, data); }
void pia_4_porta_w (int offset, int data) { pia_set_input_a (3, data); }
void pia_5_porta_w (int offset, int data) { pia_set_input_a (4, data); }
void pia_6_porta_w (int offset, int data) { pia_set_input_a (5, data); }
void pia_7_porta_w (int offset, int data) { pia_set_input_a (6, data); }
void pia_8_porta_w (int offset, int data) { pia_set_input_a (7, data); }

void pia_1_portb_w (int offset, int data) { pia_set_input_b (0, data); }
void pia_2_portb_w (int offset, int data) { pia_set_input_b (1, data); }
void pia_3_portb_w (int offset, int data) { pia_set_input_b (2, data); }
void pia_4_portb_w (int offset, int data) { pia_set_input_b (3, data); }
void pia_5_portb_w (int offset, int data) { pia_set_input_b (4, data); }
void pia_6_portb_w (int offset, int data) { pia_set_input_b (5, data); }
void pia_7_portb_w (int offset, int data) { pia_set_input_b (6, data); }
void pia_8_portb_w (int offset, int data) { pia_set_input_b (7, data); }

int pia_1_porta_r (int offset) { return pia[0].in_a; }
int pia_2_porta_r (int offset) { return pia[1].in_a; }
int pia_3_porta_r (int offset) { return pia[2].in_a; }
int pia_4_porta_r (int offset) { return pia[3].in_a; }
int pia_5_porta_r (int offset) { return pia[4].in_a; }
int pia_6_porta_r (int offset) { return pia[5].in_a; }
int pia_7_porta_r (int offset) { return pia[6].in_a; }
int pia_8_porta_r (int offset) { return pia[7].in_a; }

int pia_1_portb_r (int offset) { return pia[0].in_b; }
int pia_2_portb_r (int offset) { return pia[1].in_b; }
int pia_3_portb_r (int offset) { return pia[2].in_b; }
int pia_4_portb_r (int offset) { return pia[3].in_b; }
int pia_5_portb_r (int offset) { return pia[4].in_b; }
int pia_6_portb_r (int offset) { return pia[5].in_b; }
int pia_7_portb_r (int offset) { return pia[6].in_b; }
int pia_8_portb_r (int offset) { return pia[7].in_b; }

/******************* 1-bit CA1/CA2/CB1/CB2 port interfaces *******************/

void pia_1_ca1_w (int offset, int data) { pia_set_input_ca1 (0, data); }
void pia_2_ca1_w (int offset, int data) { pia_set_input_ca1 (1, data); }
void pia_3_ca1_w (int offset, int data) { pia_set_input_ca1 (2, data); }
void pia_4_ca1_w (int offset, int data) { pia_set_input_ca1 (3, data); }
void pia_5_ca1_w (int offset, int data) { pia_set_input_ca1 (4, data); }
void pia_6_ca1_w (int offset, int data) { pia_set_input_ca1 (5, data); }
void pia_7_ca1_w (int offset, int data) { pia_set_input_ca1 (6, data); }
void pia_8_ca1_w (int offset, int data) { pia_set_input_ca1 (7, data); }
void pia_1_ca2_w (int offset, int data) { pia_set_input_ca2 (0, data); }
void pia_2_ca2_w (int offset, int data) { pia_set_input_ca2 (1, data); }
void pia_3_ca2_w (int offset, int data) { pia_set_input_ca2 (2, data); }
void pia_4_ca2_w (int offset, int data) { pia_set_input_ca2 (3, data); }
void pia_5_ca2_w (int offset, int data) { pia_set_input_ca2 (4, data); }
void pia_6_ca2_w (int offset, int data) { pia_set_input_ca2 (5, data); }
void pia_7_ca2_w (int offset, int data) { pia_set_input_ca2 (6, data); }
void pia_8_ca2_w (int offset, int data) { pia_set_input_ca2 (7, data); }

void pia_1_cb1_w (int offset, int data) { pia_set_input_cb1 (0, data); }
void pia_2_cb1_w (int offset, int data) { pia_set_input_cb1 (1, data); }
void pia_3_cb1_w (int offset, int data) { pia_set_input_cb1 (2, data); }
void pia_4_cb1_w (int offset, int data) { pia_set_input_cb1 (3, data); }
void pia_5_cb1_w (int offset, int data) { pia_set_input_cb1 (4, data); }
void pia_6_cb1_w (int offset, int data) { pia_set_input_cb1 (5, data); }
void pia_7_cb1_w (int offset, int data) { pia_set_input_cb1 (6, data); }
void pia_8_cb1_w (int offset, int data) { pia_set_input_cb1 (7, data); }
void pia_1_cb2_w (int offset, int data) { pia_set_input_cb2 (0, data); }
void pia_2_cb2_w (int offset, int data) { pia_set_input_cb2 (1, data); }
void pia_3_cb2_w (int offset, int data) { pia_set_input_cb2 (2, data); }
void pia_4_cb2_w (int offset, int data) { pia_set_input_cb2 (3, data); }
void pia_5_cb2_w (int offset, int data) { pia_set_input_cb2 (4, data); }
void pia_6_cb2_w (int offset, int data) { pia_set_input_cb2 (5, data); }
void pia_7_cb2_w (int offset, int data) { pia_set_input_cb2 (6, data); }
void pia_8_cb2_w (int offset, int data) { pia_set_input_cb2 (7, data); }

int pia_1_ca1_r (int offset) { return pia[0].in_ca1; }
int pia_2_ca1_r (int offset) { return pia[1].in_ca1; }
int pia_3_ca1_r (int offset) { return pia[2].in_ca1; }
int pia_4_ca1_r (int offset) { return pia[3].in_ca1; }
int pia_5_ca1_r (int offset) { return pia[4].in_ca1; }
int pia_6_ca1_r (int offset) { return pia[5].in_ca1; }
int pia_7_ca1_r (int offset) { return pia[6].in_ca1; }
int pia_8_ca1_r (int offset) { return pia[7].in_ca1; }
int pia_1_ca2_r (int offset) { return pia[0].in_ca2; }
int pia_2_ca2_r (int offset) { return pia[1].in_ca2; }
int pia_3_ca2_r (int offset) { return pia[2].in_ca2; }
int pia_4_ca2_r (int offset) { return pia[3].in_ca2; }
int pia_5_ca2_r (int offset) { return pia[4].in_ca2; }
int pia_6_ca2_r (int offset) { return pia[5].in_ca2; }
int pia_7_ca2_r (int offset) { return pia[6].in_ca2; }
int pia_8_ca2_r (int offset) { return pia[7].in_ca2; }

int pia_1_cb1_r (int offset) { return pia[0].in_cb1; }
int pia_2_cb1_r (int offset) { return pia[1].in_cb1; }
int pia_3_cb1_r (int offset) { return pia[2].in_cb1; }
int pia_4_cb1_r (int offset) { return pia[3].in_cb1; }
int pia_5_cb1_r (int offset) { return pia[4].in_cb1; }
int pia_6_cb1_r (int offset) { return pia[5].in_cb1; }
int pia_7_cb1_r (int offset) { return pia[6].in_cb1; }
int pia_8_cb1_r (int offset) { return pia[7].in_cb1; }
int pia_1_cb2_r (int offset) { return pia[0].in_cb2; }
int pia_2_cb2_r (int offset) { return pia[1].in_cb2; }
int pia_3_cb2_r (int offset) { return pia[2].in_cb2; }
int pia_4_cb2_r (int offset) { return pia[3].in_cb2; }
int pia_5_cb2_r (int offset) { return pia[4].in_cb2; }
int pia_6_cb2_r (int offset) { return pia[5].in_cb2; }
int pia_7_cb2_r (int offset) { return pia[6].in_cb2; }
int pia_8_cb2_r (int offset) { return pia[7].in_cb2; }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -