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

📄 custom.c

📁 树大根深三棱尽所标杆ssfsfsa fdsafs
💻 C
📖 第 1 页 / 共 3 页
字号:
	case GRPMASKC:		return db_GRPMASKC.x;	case PLLCR:		return db_PLLCR.x;	case PLLFSR:		db_PLLFSR.anon.CLK32 ^= 1;		return db_PLLFSR.x;	case ICR:		return db_ICR.x;	case IMR:		return db_IMR.x >> 16;	case IMR + 2:		return db_IMR.x;	case IWR:		return db_IWR.x >> 16;	case IWR + 2:		return db_IWR.x;	case ISR:		return db_ISR.x >> 16;	case ISR + 2:		return db_ISR.x;	case IPR:		db_IPR.anon.PEN = CustShptr->pen;		return db_IPR.x >> 16;	case PWMC:		return db_PWMC.x;	case PWMP:		return db_PWMP.x;	case PWMW:		return db_PWMW.x;	case TCTL1:		return db_TCTL1.x;	case TPRER1:		return db_TPRER1.x;	case TCMP1:		return db_TCMP1.x;	case TSTAT1:		db_TCN1.anon.COUNT += 16;		if (db_TCN1.anon.COUNT - db_TCMP1.anon.COMPARE < 16) {			db_TSTAT1.anon.COMP = 1;			if (db_TCTL1.anon.FRR == 0) {				db_TCN1.anon.COUNT = 0;			}		}		db_TSTAT1_lastseen |= db_TSTAT1.x;		return db_TSTAT1.x;	case TCTL2:		return db_TCTL2.x;	case TPRER2:		return db_TPRER2.x;	case TCMP2:		return db_TCMP2.x;	case TSTAT2:		db_TSTAT2_lastseen |= db_TSTAT2.x;		return db_TSTAT2.x;	case WCSR:		return db_WCSR.x;	case WCN:		return db_WCN.x;	case SPIMDATA:		return db_SPIMDATA.x;	case SPIMCONT:		return db_SPIMCONT.x;	case USTCNT:		return db_USTCNT.x;	case UBAUD:		return db_UBAUD.x;	case URX:		if (DEBUGGER_READING) {			db_URXdb.anon.DATA_READY = 0;			return db_URXdb.x;		} else {			db_URX.anon.DATA_READY = 0;			db_IPR.anon.UART = 0;			updateisr();			return db_URX.x;		}	case UTX:		db_UTX.anon.FIFO_EMPTY = 1;		db_UTX.anon.FIFO_HALF = 1;		db_UTX.anon.TX_AVAIL = 1;		db_UTX.anon.CTS_STATUS = 1;		return db_UTX.x;	case UMISC:		return db_UMISC.x;	case LXMAX:		return db_LXMAX.x;	case LYMAX:		return db_LYMAX.x;	case LCXP:		return db_LCXP.x;	case LCYP:		return db_LCYP.x;	case LCWCH:		return db_LCWCH.x;	case LGPMR:		return db_LGPMR.x;	case RTCCTL:		return db_RTCCTL.x;	case RTCISR:		return db_RTCISR.x;	case RTCIENR:		return db_RTCIENR.x;	default:		fprintf(stderr, "%s(0x%x) - %x\r\n",__FUNCTION__,addr,MC68000_getpc());		fatal(__FILE__, __LINE__);		return 0;	}}static voidcustom_wput(CPTR addr, UWORD value){	switch (addr & 0xffff) {	case GRPBASEA:		db_GRPBASEA.x = value;		break;	case GRPBASEC:		db_GRPBASEC.x = value;		break;	case GRPMASKA:		db_GRPMASKA.x = value;		break;	case GRPMASKC:		db_GRPMASKC.x = value;		break;	case PLLCR:		db_PLLCR.x = value;		break;	case PLLFSR:		db_PLLFSR.x = value;		break;	case ICR:		db_ICR.x = value;		break;	case IMR:		db_IMR.x &= 0x0000ffff;		db_IMR.x |= value << 16;		updateisr();		break;	case IMR + 2:		db_IMR.x &= 0xffff0000;		db_IMR.x |= value;		updateisr();		break;	case IWR:		db_IWR.x &= 0x0000ffff;		db_IWR.x |= value << 16;		break;	case IWR + 2:		db_IWR.x &= 0xffff0000;		db_IWR.x |= value;		break;	case ISR:		if (db_ICR.anon.ET1 && (value & 0x0001)) {			db_IPR.anon.IRQ1 = 0;			updateisr();		}		if (db_ICR.anon.ET2 && (value & 0x0002)) {			db_IPR.anon.IRQ2 = 0;			updateisr();		}		if (db_ICR.anon.ET3 && (value & 0x0004)) {			db_IPR.anon.IRQ3 = 0;			updateisr();		}		if (db_ICR.anon.ET6 && (value & 0x0008)) {			db_IPR.anon.IRQ6 = 0;			updateisr();		}		if (value & 0x0080) {			db_IPR.anon.IRQ7 = 0;			updateisr();		}		break;	case ISR + 2:		/* updateisr(); */		break;	case PWMC:		db_PWMC.x = value;		break;	case PWMP:		db_PWMP.x = value;		break;	case PWMW:		db_PWMW.x = value;		break;	case TCTL1:		db_TCTL1.x = value;		break;	case TPRER1:		db_TPRER1.x = value;		break;	case TCMP1:		db_TCMP1.x = value;		break;	case TSTAT1:		db_TSTAT1.x = db_TSTAT1.x & (value | ~db_TSTAT1_lastseen);		db_TSTAT1_lastseen = 0;		if (db_TSTAT1.anon.COMP == 0) {			db_IPR.anon.TMR1 = 0;			updateisr();		}		break;	case TCTL2:		db_TCTL2.x = value;		break;	case TPRER2:		db_TPRER2.x = value;		break;	case TCMP2:		db_TCMP2.x = value;		break;	case TSTAT2:		db_TSTAT2.x = db_TSTAT2.x & (value | ~db_TSTAT2_lastseen);		db_TSTAT2_lastseen = 0;		if (db_TSTAT2.anon.COMP == 0) {			db_IPR.anon.TMR2 = 0;			updateisr();		}		break;	case WCSR:		db_WCSR.x = value;		break;	case WCN:		db_WCN.x = 0;		break;	case SPIMDATA:		db_SPIMDATA.x = value;		break;	case SPIMCONT:		db_SPIMCONT.x = value;		if (db_SPIMCONT.anon.XCH && db_SPIMCONT.anon.IRQEN) {			db_SPIMCONT.anon.SPIMIRQ = 1;			db_SPIMCONT.anon.XCH = 0;			switch (db_PFDATA.x & 0x0f) {			case 0x6:				db_SPIMDATA.x = (0xff - CustShptr->penx) * 2;				break;			case 0x9:				db_SPIMDATA.x = (0xff - CustShptr->peny) * 2;				break;			}		}		break;	case USTCNT:		db_USTCNT.x = value;		CustShptr->serial_flags = (db_USTCNT.anon.PARITY_ENABLE << 3) |			(db_USTCNT.anon.ODD_EVEN << 2) | (db_USTCNT.anon.STOP_BITS << 1) |			(db_USTCNT.anon.BITS_8);		break;	case UBAUD:		db_UBAUD.x = value;		CustShptr->serial_baud = 1036800 / (1 << db_UBAUD.anon.DIVIDE) /			(65 - db_UBAUD.anon.PRESCALER);		break;	case URX:		/* ignore db_URX.x = value; */		break;	case UTX:		db_UTX.x = value;		if (db_UMISC.anon.LOOP) {			if (DEBUGGER_WRITING) {				db_URXdb.anon.DATA = db_UTX.anon.DATA;				db_URXdb.anon.DATA_READY = 1;			} else {				db_URX.anon.DATA = db_UTX.anon.DATA;				db_URX.anon.DATA_READY = 1;				if (db_USTCNT.anon.RX_READY_ENABLE) {					db_IPR.anon.UART = 1;					updateisr();				}			}		} else {			unsigned char	outbuf = value & 0xff;			int		fd = (DEBUGGER_WRITING) ? CustShptr->gdb_writefd : CustShptr->serial_writefd;			write(fd, &outbuf, 1);		}		break;	case UMISC:		db_UMISC.x = value;		break;	case LXMAX:		db_LXMAX.x = value;		break;	case LYMAX:		db_LYMAX.x = value;		break;	case LCXP:		db_LCXP.x = value;		break;	case LCYP:		db_LCYP.x = value;		break;	case LCWCH:		db_LCWCH.x = value;		break;	case LGPMR:		db_LGPMR.x = value;		CustShptr->grpalette[0] = db_LGPMR.anon.G0;		CustShptr->grpalette[1] = db_LGPMR.anon.G1;		CustShptr->grpalette[2] = db_LGPMR.anon.G2;		CustShptr->grpalette[3] = db_LGPMR.anon.G3;		break;	case RTCCTL:		db_RTCCTL.x = (UBYTE) value;		break;	case RTCISR:		db_RTCISR.x &= ~(UBYTE) value;		break;	case RTCIENR:		db_RTCIENR.x = (UBYTE) value;		break;	default:		fprintf(stderr, "%s(0x%x, 0x%x) - %x\r\n", __FUNCTION__, addr, value,				MC68000_getpc());		fatal(__FILE__, __LINE__);		break;	}}static UBYTEcustom_bget(CPTR addr){	switch (addr & 0xffff) {	case SCR:		return db_SCR.x;	case PCTLR:		return db_PCTLR.x;	case IVR:		return db_IVR.x;	case PCDIR:		return db_PCDIR.x;	case PCDATA:		db_PCDATA.anon.NMI = 1;	/* who knows, this makes the power on key work */		return db_PCDATA.x;	case PCSEL:		return db_PCSEL.x;	case PDDIR:		return db_PDDIR.x;	case PDDATA:		return db_PDDATA.x;	case PDPUEN:		return db_PDPUEN.x;	case PDPOL:		return db_PDPOL.x;	case PDIRQEN:		return db_PDIRQEN.x;	case PDIRQEDGE:		return db_PDIRQEDGE.x;	case PEDIR:		return db_PEDIR.x;	case PEDATA:		return db_PEDATA.x;	case PEPUEN:		return db_PEPUEN.x;	case PESEL:		return db_PESEL.x;	case PFDIR:		return db_PFDIR.x;	case PFDATA:		return db_PFDATA.x;	case PFPUEN:		return db_PFPUEN.x;	case PFSEL:		return db_PFSEL.x;	case PGDIR:		return db_PGDIR.x;	case PGDATA:		return db_PGDATA.x;	case PGPUEN:		return db_PGPUEN.x;	case PGSEL:		return db_PGSEL.x;	case PJDIR:		return db_PJDIR.x;	case PJDATA:		return db_PJDATA.x;	case PJSEL:		return db_PJSEL.x;	case PKDIR:		return db_PKDIR.x;	case PKDATA:		return db_PKDATA.x;	case PKPUEN:		return db_PKPUEN.x;	case PKSEL:		return db_PKSEL.x;	case PMDIR:		return db_PMDIR.x;	case PMDATA:		return db_PMDATA.x;	case PMPUEN:		return db_PMPUEN.x;	case PMSEL:		return db_PMSEL.x;	case PWMC:		return db_PWMC.x >> 8;	case PWMC + 1:		return db_PWMC.x;	case URX:		if (DEBUGGER_READING) {			return db_URXdb.x >> 8;		} else {			return db_URX.x >> 8;		}	case UTX:		db_UTX.anon.FIFO_EMPTY = 1;		db_UTX.anon.FIFO_HALF = 1;		db_UTX.anon.TX_AVAIL = 1;		db_UTX.anon.CTS_STATUS = 1;		return db_UTX.x;			case UTX + 1:		db_UTX.anon.FIFO_EMPTY = 1;		db_UTX.anon.FIFO_HALF = 1;		db_UTX.anon.TX_AVAIL = 1;		db_UTX.anon.CTS_STATUS = 1;		return db_UTX.x;			case LVPW:		return db_LVPW.x;	case LBLKC:		return db_LBLKC.x;	case LPICF:		return db_LPICF.x;	case LPXCD:		return db_LPXCD.x;	case LCKCON:		return db_LCKCON.x;	case LLBAR:		return db_LLBAR.x;	case LOTCR:		return db_LOTCR.x;	case LPOSR:		return db_LPOSR.x;	case LFRCM:		return db_LFRCM.x;	case RTCCTL:		return db_RTCCTL.x;	case RTCISR:		return db_RTCISR.x;	case RTCIENR:		return db_RTCIENR.x;	default:		fprintf(stderr, "%s(0x%x) - %x\r\n",__FUNCTION__,addr,MC68000_getpc());		fatal(__FILE__, __LINE__);		return 0;	}}static voidcustom_bput(CPTR addr, UBYTE value){	switch (addr & 0xffff) {	case SCR:		db_SCR.x = value & ~(value & 0xe0);		break;	case PCTLR:		db_PCTLR.x = value;		break;	case IVR:		db_IVR.x = value;		break;	case PCDIR:		db_PCDIR.x = value;		break;	case PCDATA:		db_PCDATA.x = value;		break;	case PCSEL:		db_PCSEL.x = value;		break;	case PDDIR:		db_PDDIR.x = value;		break;	case PDDATA:		db_PDDATA_edge &= ~value;		db_IPR.anon.PEN = CustShptr->pen;		db_IPR.x = (db_IPR.x & 0xffff00ff) |			((((db_PDDATA_edge & db_PDIRQEDGE.x) |			(db_PDDATA.x & ~db_PDIRQEDGE.x)) & db_PDIRQEN.x) << 8);		updateisr();		break;	case PDPUEN:		db_PDPUEN.x = value;		break;	case PDPOL:		db_PDPOL.x = value;		break;	case PDIRQEN:		db_PDIRQEN.x = value;		db_IPR.anon.PEN = CustShptr->pen;		db_IPR.x = (db_IPR.x & 0xffff00ff) |			((((db_PDDATA_edge & db_PDIRQEDGE.x) |			(db_PDDATA.x & ~db_PDIRQEDGE.x)) & db_PDIRQEN.x) << 8);		updateisr();		break;	case PDIRQEDGE:		db_PDIRQEDGE.x = value;		break;	case PEDIR:		db_PEDIR.x = value;		break;	case PEDATA:		db_PEDATA.x = value;		break;	case PEPUEN:		db_PEPUEN.x = value;		break;	case PESEL:		db_PESEL.x = value;		break;	case PFDIR:		db_PFDIR.x = value;		break;	case PFDATA:		db_PFDATA.x = value;		break;	case PFPUEN:		db_PFPUEN.x = value;		break;	case PFSEL:		db_PFSEL.x = value;		break;	case PGDIR:		db_PGDIR.x = value;		break;	case PGDATA:		db_PGDATA.x = value;		CustShptr->Backlight = (value & 0x80);		break;	case PGPUEN:		db_PGPUEN.x = value;		break;	case PGSEL:		db_PGSEL.x = value;		break;	case PJDIR:		db_PJDIR.x = value;		break;	case PJDATA:		db_PJDATA.x = value;		break;	case PJSEL:		db_PJSEL.x = value;		break;	case PKDIR:		db_PKDIR.x = value;		break;	case PKDATA:		db_PKDATA.x = value;		break;	case PKPUEN:		db_PKPUEN.x = value;		break;	case PKSEL:		db_PKSEL.x = value;		break;	case PMDIR:		db_PMDIR.x = value;		break;	case PMDATA:		db_PMDATA.x = value;		break;	case PMPUEN:		db_PMPUEN.x = value;		break;	case PMSEL:		db_PMSEL.x = value;		break;	case PWMC:		db_PWMC.x &= 0x00ff;		db_PWMC.x |= value << 8;		break;	case PWMC + 1:		db_PWMC.x &= 0xff00;		db_PWMC.x |= value;		break;	case UTX:		abort();		break;	case UTX + 1:		db_UTX.anon.DATA = value;		if (db_UMISC.anon.LOOP) {			if (DEBUGGER_WRITING) {				db_URXdb.anon.DATA = db_UTX.anon.DATA;				db_URXdb.anon.DATA_READY = 1;			} else {				db_URX.anon.DATA = db_UTX.anon.DATA;				db_URX.anon.DATA_READY = 1;				if (db_USTCNT.anon.RX_READY_ENABLE) {					db_IPR.anon.UART = 1;					updateisr();				}			}		} else {			unsigned char	outbuf = value & 0xff;			int		fd = (DEBUGGER_WRITING) ? CustShptr->gdb_writefd : CustShptr->serial_writefd;			write(fd, &outbuf, 1);		}		break;	case LVPW:		db_LVPW.x = value;		CustShptr->VPW = value;		break;	case LBLKC:		db_LBLKC.x = value;		break;	case LPICF:		db_LPICF.x = value;		CustShptr->PICF = value;		break;	case LPXCD:		db_LPXCD.x = value;		break;	case LCKCON:		db_LCKCON.x = value;		CustShptr->LcdPower = db_LCKCON.anon.LCDCON ? lcdOn : lcdOff;		break;	case LLBAR:		db_LLBAR.x = value;		break;	case LOTCR:		db_LOTCR.x = value;		break;	case LPOSR:		db_LPOSR.x = value;		CustShptr->POSR = value;		break;	case LFRCM:		db_LFRCM.x = value;		break;	case RTCCTL:		db_RTCCTL.x = value;		break;	case RTCISR:		db_RTCISR.x &= ~value;		break;	case RTCIENR:		db_RTCIENR.x = value;		break;	default:		fprintf(stderr, "%s(0x%x, 0x%x) - %x\r\n", __FUNCTION__, addr, value,				MC68000_getpc());		fatal(__FILE__, __LINE__);		break;	}}addrbank custom_bank = {	custom_lget, custom_wget, custom_bget,	custom_lput, custom_wput, custom_bput,	default_xlate, default_check};

⌨️ 快捷键说明

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