-mc68328: Cleaned up register handlers and structure. [Ryan Holtz] (#8771)

This commit is contained in:
MooglyGuy 2021-10-29 15:41:16 +02:00 committed by GitHub
parent 766619f983
commit fcd99ff769
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 2559 additions and 2622 deletions

File diff suppressed because it is too large Load Diff

View File

@ -132,198 +132,400 @@ protected:
virtual void device_reset() override;
private:
struct mc68328_regs_t
{
// $(FF)FFF000
uint8_t scr; // System Control Register
uint8_t unused0[255];
void scr_w(uint8_t data); // 0x000
// $(FF)FFF100
uint16_t grpbasea; // Chip Select Group A Base Register
uint16_t grpbaseb; // Chip Select Group B Base Register
uint16_t grpbasec; // Chip Select Group C Base Register
uint16_t grpbased; // Chip Select Group D Base Register
uint16_t grpmaska; // Chip Select Group A Mask Register
uint16_t grpmaskb; // Chip Select Group B Mask Register
uint16_t grpmaskc; // Chip Select Group C Mask Register
uint16_t grpmaskd; // Chip Select Group D Mask Register
uint32_t csa0; // Group A Chip Select 0 Register
uint32_t csa1; // Group A Chip Select 1 Register
uint32_t csa2; // Group A Chip Select 2 Register
uint32_t csa3; // Group A Chip Select 3 Register
uint32_t csb0; // Group B Chip Select 0 Register
uint32_t csb1; // Group B Chip Select 1 Register
uint32_t csb2; // Group B Chip Select 2 Register
uint32_t csb3; // Group B Chip Select 3 Register
uint32_t csc0; // Group C Chip Select 0 Register
uint32_t csc1; // Group C Chip Select 1 Register
uint32_t csc2; // Group C Chip Select 2 Register
uint32_t csc3; // Group C Chip Select 3 Register
uint32_t csd0; // Group D Chip Select 0 Register
uint32_t csd1; // Group D Chip Select 1 Register
uint32_t csd2; // Group D Chip Select 2 Register
uint32_t csd3; // Group D Chip Select 3 Register
uint8_t unused1[176];
void grpbasea_w(uint16_t data); // 0x100
void grpbaseb_w(uint16_t data); // 0x102
void grpbasec_w(uint16_t data); // 0x104
void grpbased_w(uint16_t data); // 0x106
void grpmaska_w(uint16_t data); // 0x108
void grpmaskb_w(uint16_t data); // 0x10a
void grpmaskc_w(uint16_t data); // 0x10c
void grpmaskd_w(uint16_t data); // 0x10e
template<int ChipSelect> void csa_msw_w(offs_t offset, uint16_t data, uint16_t mem_mask); // 0x110, 0x114, 0x118, 0x11c
template<int ChipSelect> void csa_lsw_w(offs_t offset, uint16_t data, uint16_t mem_mask); // 0x112, 0x116, 0x11a, 0x11e
template<int ChipSelect> void csb_msw_w(offs_t offset, uint16_t data, uint16_t mem_mask); // 0x120, 0x124, 0x128, 0x12c
template<int ChipSelect> void csb_lsw_w(offs_t offset, uint16_t data, uint16_t mem_mask); // 0x122, 0x126, 0x12a, 0x12e
template<int ChipSelect> void csc_msw_w(offs_t offset, uint16_t data, uint16_t mem_mask); // 0x130, 0x134, 0x138, 0x13c
template<int ChipSelect> void csc_lsw_w(offs_t offset, uint16_t data, uint16_t mem_mask); // 0x132, 0x136, 0x13a, 0x13e
template<int ChipSelect> void csd_msw_w(offs_t offset, uint16_t data, uint16_t mem_mask); // 0x140, 0x144, 0x148, 0x14c
template<int ChipSelect> void csd_lsw_w(offs_t offset, uint16_t data, uint16_t mem_mask); // 0x142, 0x146, 0x14a, 0x14e
// $(FF)FFF200
uint16_t pllcr; // PLL Control Register
uint16_t pllfsr; // PLL Frequency Select Register
uint8_t pad2[3];
uint8_t pctlr; // Power Control Register
uint8_t unused3[248];
void pllcr_w(uint16_t data); // 0x200
void pllfsr_w(uint16_t data); // 0x202
void pctlr_w(uint8_t data); // 0x207
void ivr_w(uint8_t data); // 0x300
void icr_w(uint8_t data); // 0x302
void imr_msw_w(offs_t offset, uint16_t data, uint16_t mem_mask); // 0x304
void imr_lsw_w(offs_t offset, uint16_t data, uint16_t mem_mask); // 0x306
void iwr_msw_w(offs_t offset, uint16_t data, uint16_t mem_mask); // 0x308
void iwr_lsw_w(offs_t offset, uint16_t data, uint16_t mem_mask); // 0x30a
void isr_msw_w(offs_t offset, uint16_t data, uint16_t mem_mask); // 0x30c
void isr_lsw_w(offs_t offset, uint16_t data, uint16_t mem_mask); // 0x30e
void ipr_msw_w(offs_t offset, uint16_t data, uint16_t mem_mask); // 0x310
void ipr_lsw_w(offs_t offset, uint16_t data, uint16_t mem_mask); // 0x312
// $(FF)FFF300
uint8_t ivr; // Interrupt Vector Register
uint8_t unused4[1];
uint16_t icr; // Interrupt Control Register
uint32_t imr; // Interrupt Mask Register
uint32_t iwr; // Interrupt Wakeup Enable Register
uint32_t isr; // Interrupt Status Register
uint32_t ipr; // Interrupt Pending Register
uint8_t unused5[236];
void padir_w(uint8_t data); // 0x400
void padata_w(uint8_t data); // 0x401
void pasel_w(uint8_t data); // 0x403
void pbdir_w(uint8_t data); // 0x408
void pbdata_w(uint8_t data); // 0x409
void pbsel_w(uint8_t data); // 0x40b
void pcdir_w(uint8_t data); // 0x410
void pcdata_w(uint8_t data); // 0x411
void pcsel_w(uint8_t data); // 0x413
void pddir_w(uint8_t data); // 0x418
void pddata_w(uint8_t data); // 0x419
void pdpuen_w(uint8_t data); // 0x41a
void pdpol_w(uint8_t data); // 0x41c
void pdirqen_w(uint8_t data); // 0x41d
void pdirqedge_w(uint8_t data); // 0x41f
void pedir_w(uint8_t data); // 0x420
void pedata_w(uint8_t data); // 0x421
void pepuen_w(uint8_t data); // 0x422
void pesel_w(uint8_t data); // 0x423
void pfdir_w(uint8_t data); // 0x428
void pfdata_w(uint8_t data); // 0x429
void pfpuen_w(uint8_t data); // 0x42a
void pfsel_w(uint8_t data); // 0x42b
void pgdir_w(uint8_t data); // 0x430
void pgdata_w(uint8_t data); // 0x431
void pgpuen_w(uint8_t data); // 0x432
void pgsel_w(uint8_t data); // 0x433
void pjdir_w(uint8_t data); // 0x438
void pjdata_w(uint8_t data); // 0x439
void pjsel_w(uint8_t data); // 0x43b
void pkdir_w(uint8_t data); // 0x440
void pkdata_w(uint8_t data); // 0x441
void pkpuen_w(uint8_t data); // 0x442
void pksel_w(uint8_t data); // 0x443
void pmdir_w(uint8_t data); // 0x448
void pmdata_w(uint8_t data); // 0x449
void pmpuen_w(uint8_t data); // 0x44a
void pmsel_w(uint8_t data); // 0x44b
// $(FF)FFF400
uint8_t padir; // Port A Direction Register
uint8_t padata; // Port A Data Register
uint8_t unused6[1];
uint8_t pasel; // Port A Select Register
uint8_t unused7[4];
void pwmc_w(uint16_t data); // 0x500
void pwmp_w(uint16_t data); // 0x502
void pwmw_w(uint16_t data); // 0x504
void pwmcnt_w(uint16_t data); // 0x506
uint8_t pbdir; // Port B Direction Register
uint8_t pbdata; // Port B Data Register
uint8_t unused8[1];
uint8_t pbsel; // Port B Select Register
uint8_t unused9[4];
template <int Timer> void tctl_w(uint16_t data); // 0x600, 0x60c
template <int Timer> void tprer_w(uint16_t data); // 0x602, 0x60e
template <int Timer> void tcmp_w(uint16_t data); // 0x604, 0x610
template <int Timer> void tcr_w(uint16_t data); // 0x606, 0x612
template <int Timer> void tcn_w(uint16_t data); // 0x608, 0x614
template <int Timer> void tstat_w(uint16_t data); // 0x60a, 0x616
void wctlr_w(uint16_t data); // 0x618
void wcmpr_w(uint16_t data); // 0x61a
void wcn_w(uint16_t data); // 0x61c
uint8_t pcdir; // Port C Direction Register
uint8_t pcdata; // Port C Data Register
uint8_t unused10[1];
uint8_t pcsel; // Port C Select Register
uint8_t unused11[4];
void spisr_w(uint16_t data); // 0x700
uint8_t pddir; // Port D Direction Register
uint8_t pddata; // Port D Data Register
uint8_t pdpuen; // Port D Pullup Enable Register
uint8_t unused12[1];
uint8_t pdpol; // Port D Polarity Register
uint8_t pdirqen; // Port D IRQ Enable Register
uint8_t pddataedge; // Port D Data Edge Level
uint8_t pdirqedge; // Port D IRQ Edge Register
void spimdata_w(uint16_t data); // 0x800
void spimcont_w(uint16_t data); // 0x802
uint8_t pedir; // Port E Direction Register
uint8_t pedata; // Port E Data Register
uint8_t pepuen; // Port E Pullup Enable Register
uint8_t pesel; // Port E Select Register
uint8_t unused14[4];
void ustcnt_w(uint16_t data); // 0x900
void ubaud_w(uint16_t data); // 0x902
void urx_w(uint16_t data); // 0x904
void utx_w(uint16_t data); // 0x906
void umisc_w(uint16_t data); // 0x908
uint8_t pfdir; // Port F Direction Register
uint8_t pfdata; // Port F Data Register
uint8_t pfpuen; // Port F Pullup Enable Register
uint8_t pfsel; // Port F Select Register
uint8_t unused15[4];
void lssa_msw_w(offs_t offset, uint16_t data, uint16_t mem_mask); // 0xa00
void lssa_lsw_w(offs_t offset, uint16_t data, uint16_t mem_mask); // 0xa02
void lvpw_w(uint8_t data); // 0xa05
void lxmax_w(uint16_t data); // 0xa08
void lymax_w(uint16_t data); // 0xa0a
void lcxp_w(uint16_t data); // 0xa18
void lcyp_w(uint16_t data); // 0xa1a
void lcwch_w(uint16_t data); // 0xa1c
void lblkc_w(uint8_t data); // 0xa1f
void lpicf_w(uint8_t data); // 0xa20
void lpolcf_w(uint8_t data); // 0xa21
void lacdrc_w(uint8_t data); // 0xa23
void lpxcd_w(uint8_t data); // 0xa25
void lckcon_w(uint8_t data); // 0xa27
void llbar_w(uint8_t data); // 0xa29
void lotcr_w(uint8_t data); // 0xa2b
void lposr_w(uint8_t data); // 0xa2d
void lfrcm_w(uint8_t data); // 0xa31
void lgpmr_w(uint8_t data); // 0xa32
uint8_t pgdir; // Port G Direction Register
uint8_t pgdata; // Port G Data Register
uint8_t pgpuen; // Port G Pullup Enable Register
uint8_t pgsel; // Port G Select Register
uint8_t unused16[4];
void hmsr_msw_w(offs_t offset, uint16_t data, uint16_t mem_mask); // 0xb00
void hmsr_lsw_w(offs_t offset, uint16_t data, uint16_t mem_mask); // 0xb02
void alarm_msw_w(offs_t offset, uint16_t data, uint16_t mem_mask); // 0xb04
void alarm_lsw_w(offs_t offset, uint16_t data, uint16_t mem_mask); // 0xb06
void rtcctl_w(offs_t offset, uint16_t data, uint16_t mem_mask); // 0xb0c
void rtcisr_w(offs_t offset, uint16_t data, uint16_t mem_mask); // 0xb0e
void rtcienr_w(offs_t offset, uint16_t data, uint16_t mem_mask); // 0xb10
void stpwtch_w(offs_t offset, uint16_t data, uint16_t mem_mask); // 0xb12
uint8_t pjdir; // Port J Direction Register
uint8_t pjdata; // Port J Data Register
uint8_t unused17[1];
uint8_t pjsel; // Port J Select Register
uint8_t unused18[4];
uint8_t pkdir; // Port K Direction Register
uint8_t pkdata; // Port K Data Register
uint8_t pkpuen; // Port K Pullup Enable Register
uint8_t pksel; // Port K Select Register
uint8_t unused19[4];
uint8_t scr_r(); // 0x000
uint8_t pmdir; // Port M Direction Register
uint8_t pmdata; // Port M Data Register
uint8_t pmpuen; // Port M Pullup Enable Register
uint8_t pmsel; // Port M Select Register
uint8_t unused20[180];
uint16_t grpbasea_r(); // 0x100
uint16_t grpbaseb_r(); // 0x102
uint16_t grpbasec_r(); // 0x104
uint16_t grpbased_r(); // 0x106
uint16_t grpmaska_r(); // 0x108
uint16_t grpmaskb_r(); // 0x10a
uint16_t grpmaskc_r(); // 0x10c
uint16_t grpmaskd_r(); // 0x10e
// $(FF)FFF500
uint16_t pwmc; // PWM Control Register
uint16_t pwmp; // PWM Period Register
uint16_t pwmw; // PWM Width Register
uint16_t pwmcnt; // PWN Counter
uint8_t unused21[248];
template<int ChipSelect> uint16_t csa_msw_r(); // 0x110, 0x114, 0x118, 0x11c
template<int ChipSelect> uint16_t csa_lsw_r(); // 0x112, 0x116, 0x11a, 0x11e
template<int ChipSelect> uint16_t csb_msw_r(); // 0x120, 0x124, 0x128, 0x12c
template<int ChipSelect> uint16_t csb_lsw_r(); // 0x122, 0x126, 0x12a, 0x12e
template<int ChipSelect> uint16_t csc_msw_r(); // 0x130, 0x134, 0x138, 0x13c
template<int ChipSelect> uint16_t csc_lsw_r(); // 0x132, 0x136, 0x13a, 0x13e
template<int ChipSelect> uint16_t csd_msw_r(); // 0x140, 0x144, 0x148, 0x14c
template<int ChipSelect> uint16_t csd_lsw_r(); // 0x142, 0x146, 0x14a, 0x14e
// $(FF)FFF600
uint16_t tctl[2]; // Timer Control Register
uint16_t tprer[2]; // Timer Prescaler Register
uint16_t tcmp[2]; // Timer Compare Register
uint16_t tcr[2]; // Timer Capture Register
uint16_t tcn[2]; // Timer Counter
uint16_t tstat[2]; // Timer Status
uint16_t wctlr; // Watchdog Control Register
uint16_t wcmpr; // Watchdog Compare Register
uint16_t wcn; // Watchdog Counter
uint8_t tclear[2]; // Timer Clearable Status
uint8_t unused22[224];
uint16_t pllcr_r(); // 0x200
uint16_t pllfsr_r(); // 0x202
uint8_t pctlr_r(); // 0x207
// $(FF)FFF700
uint16_t spisr; // SPIS Register
uint8_t unused23[254];
uint8_t ivr_r(); // 0x300
uint16_t icr_r(); // 0x302
uint16_t imr_msw_r(); // 0x304
uint16_t imr_lsw_r(); // 0x306
uint16_t iwr_msw_r(); // 0x308
uint16_t iwr_lsw_r(); // 0x30a
uint16_t isr_msw_r(); // 0x30c
uint16_t isr_lsw_r(); // 0x30e
uint16_t ipr_msw_r(); // 0x310
uint16_t ipr_lsw_r(); // 0x312
// $(FF)FFF800
uint16_t spimdata; // SPIM Data Register
uint16_t spimcont; // SPIM Control/Status Register
uint8_t unused24[252];
uint8_t padir_r(); // 0x400
uint8_t padata_r(); // 0x401
uint8_t pasel_r(); // 0x403
uint8_t pbdir_r(); // 0x408
uint8_t pbdata_r(); // 0x409
uint8_t pbsel_r(); // 0x40b
uint8_t pcdir_r(); // 0x410
uint8_t pcdata_r(); // 0x411
uint8_t pcsel_r(); // 0x413
uint8_t pddir_r(); // 0x418
uint8_t pddata_r(); // 0x419
uint8_t pdpuen_r(); // 0x41a
uint8_t pdpol_r(); // 0x41c
uint8_t pdirqen_r(); // 0x41d
uint8_t pdirqedge_r(); // 0x41f
uint8_t pedir_r(); // 0x420
uint8_t pedata_r(); // 0x421
uint8_t pepuen_r(); // 0x422
uint8_t pesel_r(); // 0x423
uint8_t pfdir_r(); // 0x428
uint8_t pfdata_r(); // 0x429
uint8_t pfpuen_r(); // 0x42a
uint8_t pfsel_r(); // 0x42b
uint8_t pgdir_r(); // 0x430
uint8_t pgdata_r(); // 0x431
uint8_t pgpuen_r(); // 0x432
uint8_t pgsel_r(); // 0x433
uint8_t pjdir_r(); // 0x438
uint8_t pjdata_r(); // 0x439
uint8_t pjsel_r(); // 0x43b
uint8_t pkdir_r(); // 0x440
uint8_t pkdata_r(); // 0x441
uint8_t pkpuen_r(); // 0x442
uint8_t pksel_r(); // 0x443
uint8_t pmdata_r(); // 0x449
uint8_t pmdir_r(); // 0x448
uint8_t pmpuen_r(); // 0x44a
uint8_t pmsel_r(); // 0x44b
// $(FF)FFF900
uint16_t ustcnt; // UART Status/Control Register
uint16_t ubaud; // UART Baud Control Register
uint16_t urx; // UART RX Register
uint16_t utx; // UART TX Register
uint16_t umisc; // UART Misc Register
uint8_t unused25[246];
uint16_t pwmc_r(); // 0x500
uint16_t pwmp_r(); // 0x502
uint16_t pwmw_r(); // 0x504
uint16_t pwmcnt_r(); // 0x506
// $(FF)FFFA00
uint32_t lssa; // Screen Starting Address Register
uint8_t unused26[1];
uint8_t lvpw; // Virtual Page Width Register
uint8_t unused27[2];
uint16_t lxmax; // Screen Width Register
uint16_t lymax; // Screen Height Register
uint8_t unused28[12];
uint16_t lcxp; // Cursor X Position
uint16_t lcyp; // Cursor Y Position
uint16_t lcwch; // Cursor Width & Height Register
uint8_t unused29[1];
uint8_t lblkc; // Blink Control Register
uint8_t lpicf; // Panel Interface Config Register
uint8_t lpolcf; // Polarity Config Register
uint8_t unused30[1];
uint8_t lacdrc; // ACD (M) Rate Control Register
uint8_t unused31[1];
uint8_t lpxcd; // Pixel Clock Divider Register
uint8_t unused32[1];
uint8_t lckcon; // Clocking Control Register
uint8_t unused33[1];
uint8_t llbar; // Last Buffer Address Register
uint8_t unused34[1];
uint8_t lotcr; // Octet Terminal Count Register
uint8_t unused35[1];
uint8_t lposr; // Panning Offset Register
uint8_t unused36[3];
uint8_t lfrcm; // Frame Rate Control Modulation Register
uint16_t lgpmr; // Gray Palette Mapping Register
uint8_t unused37[204];
template <int Timer> uint16_t tctl_r(); // 0x600, 0x60c
template <int Timer> uint16_t tprer_r(); // 0x602, 0x60e
template <int Timer> uint16_t tcmp_r(); // 0x604, 0x610
template <int Timer> uint16_t tcr_r(); // 0x606, 0x612
template <int Timer> uint16_t tcn_r(); // 0x608, 0x614
template <int Timer> uint16_t tstat_r(); // 0x60a, 0x616
uint16_t wctlr_r(); // 0x618
uint16_t wcmpr_r(); // 0x61a
uint16_t wcn_r(); // 0x61c
// $(FF)FFFB00
uint32_t hmsr; // RTC Hours Minutes Seconds Register
uint32_t alarm; // RTC Alarm Register
uint8_t unused38[4];
uint16_t rtcctl; // RTC Control Register
uint16_t rtcisr; // RTC Interrupt Status Register
uint16_t rtcienr; // RTC Interrupt Enable Register
uint16_t stpwtch; // Stopwatch Minutes
uint8_t unused42[1260];
};
uint16_t spisr_r(); // 0x700
uint16_t spimdata_r(); // 0x800
uint16_t spimcont_r(); // 0x802
uint16_t ustcnt_r(); // 0x900
uint16_t ubaud_r(); // 0x902
uint16_t urx_r(); // 0x904
uint16_t utx_r(); // 0x906
uint16_t umisc_r(); // 0x908
uint16_t lssa_msw_r(); // 0xa00
uint16_t lssa_lsw_r(); // 0xa02
uint8_t lvpw_r(); // 0xa05
uint16_t lxmax_r(); // 0xa08
uint16_t lymax_r(); // 0xa0a
uint16_t lcxp_r(); // 0xa18
uint16_t lcyp_r(); // 0xa1a
uint16_t lcwch_r(); // 0xa1c
uint8_t lblkc_r(); // 0xa1f
uint8_t lpicf_r(); // 0xa20
uint8_t lpolcf_r(); // 0xa21
uint8_t lacdrc_r(); // 0xa23
uint8_t lpxcd_r(); // 0xa25
uint8_t lckcon_r(); // 0xa27
uint8_t llbar_r(); // 0xa29
uint8_t lotcr_r(); // 0xa2b
uint8_t lposr_r(); // 0xa2d
uint8_t lfrcm_r(); // 0xa31
uint16_t lgpmr_r(); // 0xa32
uint16_t hmsr_msw_r(); // 0xb00
uint16_t hmsr_lsw_r(); // 0xb02
uint16_t alarm_msw_r(); // 0xb04
uint16_t alarm_lsw_r(); // 0xb06
uint16_t rtcctl_r(); // 0xb0c
uint16_t rtcisr_r(); // 0xb0e
uint16_t rtcienr_r(); // 0xb10
uint16_t stpwtch_r(); // 0xb12
// $(FF)FFF000
uint8_t m_scr; // System Control Register
// $(FF)FFF100
uint16_t m_grpbasea; // Chip Select Group A Base Register
uint16_t m_grpbaseb; // Chip Select Group B Base Register
uint16_t m_grpbasec; // Chip Select Group C Base Register
uint16_t m_grpbased; // Chip Select Group D Base Register
uint16_t m_grpmaska; // Chip Select Group A Mask Register
uint16_t m_grpmaskb; // Chip Select Group B Mask Register
uint16_t m_grpmaskc; // Chip Select Group C Mask Register
uint16_t m_grpmaskd; // Chip Select Group D Mask Register
uint32_t m_csa[4]; // Group A Chip Select Registers
uint32_t m_csb[4]; // Group B Chip Select Registers
uint32_t m_csc[4]; // Group C Chip Select Registers
uint32_t m_csd[4]; // Group D Chip Select Registers
// $(FF)FFF200
uint16_t m_pllcr; // PLL Control Register
uint16_t m_pllfsr; // PLL Frequency Select Register
uint8_t m_pctlr; // Power Control Register
// $(FF)FFF300
uint8_t m_ivr; // Interrupt Vector Register
uint16_t m_icr; // Interrupt Control Register
uint32_t m_imr; // Interrupt Mask Register
uint32_t m_iwr; // Interrupt Wakeup Enable Register
uint32_t m_isr; // Interrupt Status Register
uint32_t m_ipr; // Interrupt Pending Register
// $(FF)FFF400
uint8_t m_padir; // Port A Direction Register
uint8_t m_padata; // Port A Data Register
uint8_t m_pasel; // Port A Select Register
uint8_t m_pbdir; // Port B Direction Register
uint8_t m_pbdata; // Port B Data Register
uint8_t m_pbsel; // Port B Select Register
uint8_t m_pcdir; // Port C Direction Register
uint8_t m_pcdata; // Port C Data Register
uint8_t m_pcsel; // Port C Select Register
uint8_t m_pddir; // Port D Direction Register
uint8_t m_pddata; // Port D Data Register
uint8_t m_pdpuen; // Port D Pullup Enable Register
uint8_t m_pdpol; // Port D Polarity Register
uint8_t m_pdirqen; // Port D IRQ Enable Register
uint8_t m_pddataedge; // Port D Data Edge Level
uint8_t m_pdirqedge; // Port D IRQ Edge Register
uint8_t m_pedir; // Port E Direction Register
uint8_t m_pedata; // Port E Data Register
uint8_t m_pepuen; // Port E Pullup Enable Register
uint8_t m_pesel; // Port E Select Register
uint8_t m_pfdir; // Port F Direction Register
uint8_t m_pfdata; // Port F Data Register
uint8_t m_pfpuen; // Port F Pullup Enable Register
uint8_t m_pfsel; // Port F Select Register
uint8_t m_pgdir; // Port G Direction Register
uint8_t m_pgdata; // Port G Data Register
uint8_t m_pgpuen; // Port G Pullup Enable Register
uint8_t m_pgsel; // Port G Select Register
uint8_t m_pjdir; // Port J Direction Register
uint8_t m_pjdata; // Port J Data Register
uint8_t m_pjsel; // Port J Select Register
uint8_t m_pkdir; // Port K Direction Register
uint8_t m_pkdata; // Port K Data Register
uint8_t m_pkpuen; // Port K Pullup Enable Register
uint8_t m_pksel; // Port K Select Register
uint8_t m_pmdir; // Port M Direction Register
uint8_t m_pmdata; // Port M Data Register
uint8_t m_pmpuen; // Port M Pullup Enable Register
uint8_t m_pmsel; // Port M Select Register
// $(FF)FFF500
uint16_t m_pwmc; // PWM Control Register
uint16_t m_pwmp; // PWM Period Register
uint16_t m_pwmw; // PWM Width Register
uint16_t m_pwmcnt; // PWN Counter
// $(FF)FFF600
uint16_t m_tctl[2]; // Timer Control Register
uint16_t m_tprer[2]; // Timer Prescaler Register
uint16_t m_tcmp[2]; // Timer Compare Register
uint16_t m_tcr[2]; // Timer Capture Register
uint16_t m_tcn[2]; // Timer Counter
uint16_t m_tstat[2]; // Timer Status
uint16_t m_wctlr; // Watchdog Control Register
uint16_t m_wcmpr; // Watchdog Compare Register
uint16_t m_wcn; // Watchdog Counter
uint16_t m_tclear[2]; // Timer Clearable Status
// $(FF)FFF700
uint16_t m_spisr; // SPIS Register
// $(FF)FFF800
uint16_t m_spimdata; // SPIM Data Register
uint16_t m_spimcont; // SPIM Control/Status Register
// $(FF)FFF900
uint16_t m_ustcnt; // UART Status/Control Register
uint16_t m_ubaud; // UART Baud Control Register
uint16_t m_urx; // UART RX Register
uint16_t m_utx; // UART TX Register
uint16_t m_umisc; // UART Misc Register
// $(FF)FFFA00
uint32_t m_lssa; // Screen Starting Address Register
uint8_t m_lvpw; // Virtual Page Width Register
uint16_t m_lxmax; // Screen Width Register
uint16_t m_lymax; // Screen Height Register
uint16_t m_lcxp; // Cursor X Position
uint16_t m_lcyp; // Cursor Y Position
uint16_t m_lcwch; // Cursor Width & Height Register
uint8_t m_lblkc; // Blink Control Register
uint8_t m_lpicf; // Panel Interface Config Register
uint8_t m_lpolcf; // Polarity Config Register
uint8_t m_lacdrc; // ACD (M) Rate Control Register
uint8_t m_lpxcd; // Pixel Clock Divider Register
uint8_t m_lckcon; // Clocking Control Register
uint8_t m_llbar; // Last Buffer Address Register
uint8_t m_lotcr; // Octet Terminal Count Register
uint8_t m_lposr; // Panning Offset Register
uint8_t m_lfrcm; // Frame Rate Control Modulation Register
uint16_t m_lgpmr; // Gray Palette Mapping Register
// $(FF)FFFB00
uint32_t m_hmsr; // RTC Hours Minutes Seconds Register
uint32_t m_alarm; // RTC Alarm Register
uint16_t m_rtcctl; // RTC Control Register
uint16_t m_rtcisr; // RTC Interrupt Status Register
uint16_t m_rtcienr; // RTC Interrupt Enable Register
uint16_t m_stpwtch; // Stopwatch Minutes
void internal_map(address_map &map);
@ -332,9 +534,10 @@ private:
void poll_port_d_interrupts();
void cpu_space_map(address_map &map);
uint8_t irq_callback(offs_t offset);
uint32_t get_timer_frequency(uint32_t index);
void maybe_start_timer(uint32_t index, uint32_t new_enable);
void timer_compare_event(uint32_t index);
template<int Timer> uint32_t get_timer_frequency();
template<int Timer> void maybe_start_timer(uint32_t new_enable);
template<int Timer> void timer_compare_event();
void register_state_save();
@ -343,11 +546,6 @@ private:
TIMER_CALLBACK_MEMBER(pwm_transition);
TIMER_CALLBACK_MEMBER(rtc_tick);
void internal_write(offs_t offset, uint16_t data, uint16_t mem_mask = 0xffff);
uint16_t internal_read(offs_t offset, uint16_t mem_mask = 0xffff);
mc68328_regs_t m_regs;
emu_timer *m_gptimer[2];
emu_timer *m_rtc;
emu_timer *m_pwm;
@ -374,7 +572,7 @@ private:
devcb_read8 m_in_port_k_cb; /* 8-bit input */
devcb_read8 m_in_port_m_cb; /* 8-bit input */
devcb_write8 m_out_pwm_cb; /* 1-bit output */
devcb_write_line m_out_pwm_cb; /* 1-bit output */
devcb_write16 m_out_spim_cb; /* 16-bit output */
devcb_read16 m_in_spim_cb; /* 16-bit input */