?? custom.c
字號:
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 + -