summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/machine/s3c44b0.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/machine/s3c44b0.h')
-rw-r--r--src/devices/machine/s3c44b0.h105
1 files changed, 67 insertions, 38 deletions
diff --git a/src/devices/machine/s3c44b0.h b/src/devices/machine/s3c44b0.h
index f4f194ce3c8..b78dc2e20d6 100644
--- a/src/devices/machine/s3c44b0.h
+++ b/src/devices/machine/s3c44b0.h
@@ -13,6 +13,7 @@
#pragma once
+#include <algorithm>
/*******************************************************************************
MACROS & CONSTANTS
@@ -125,50 +126,50 @@ public:
auto adc_data_r_cb() { return m_data_r_cb.bind(); }
auto i2s_data_w_cb() { return m_data_w_cb.bind(); }
- DECLARE_READ32_MEMBER(lcd_r);
- DECLARE_READ32_MEMBER(clkpow_r);
- DECLARE_READ32_MEMBER(irq_r);
- DECLARE_READ32_MEMBER(pwm_r);
- DECLARE_READ32_MEMBER(iic_r);
- DECLARE_READ32_MEMBER(gpio_r);
- DECLARE_READ32_MEMBER(uart_0_r);
- DECLARE_READ32_MEMBER(uart_1_r);
- DECLARE_READ32_MEMBER(wdt_r);
- DECLARE_READ32_MEMBER(cpuwrap_r);
- DECLARE_READ32_MEMBER(adc_r);
- DECLARE_READ32_MEMBER(sio_r);
- DECLARE_READ32_MEMBER(iis_r);
- DECLARE_READ32_MEMBER(zdma_0_r);
- DECLARE_READ32_MEMBER(zdma_1_r);
- DECLARE_READ32_MEMBER(bdma_0_r);
- DECLARE_READ32_MEMBER(bdma_1_r);
-
- DECLARE_WRITE32_MEMBER(lcd_w);
- DECLARE_WRITE32_MEMBER(clkpow_w);
- DECLARE_WRITE32_MEMBER(irq_w);
- DECLARE_WRITE32_MEMBER(pwm_w);
- DECLARE_WRITE32_MEMBER(iic_w);
- DECLARE_WRITE32_MEMBER(gpio_w);
- DECLARE_WRITE32_MEMBER(uart_0_w);
- DECLARE_WRITE32_MEMBER(uart_1_w);
- DECLARE_WRITE32_MEMBER(wdt_w);
- DECLARE_WRITE32_MEMBER(cpuwrap_w);
- DECLARE_WRITE32_MEMBER(adc_w);
- DECLARE_WRITE32_MEMBER(sio_w);
- DECLARE_WRITE32_MEMBER(iis_w);
- DECLARE_WRITE32_MEMBER(zdma_0_w);
- DECLARE_WRITE32_MEMBER(zdma_1_w);
- DECLARE_WRITE32_MEMBER(bdma_0_w);
- DECLARE_WRITE32_MEMBER(bdma_1_w);
+ uint32_t lcd_r(offs_t offset, uint32_t mem_mask = ~0);
+ uint32_t clkpow_r(offs_t offset, uint32_t mem_mask = ~0);
+ uint32_t irq_r(offs_t offset, uint32_t mem_mask = ~0);
+ uint32_t pwm_r(offs_t offset, uint32_t mem_mask = ~0);
+ uint32_t iic_r(offs_t offset, uint32_t mem_mask = ~0);
+ uint32_t gpio_r(offs_t offset, uint32_t mem_mask = ~0);
+ uint32_t uart_0_r(offs_t offset, uint32_t mem_mask = ~0);
+ uint32_t uart_1_r(offs_t offset, uint32_t mem_mask = ~0);
+ uint32_t wdt_r(offs_t offset, uint32_t mem_mask = ~0);
+ uint32_t cpuwrap_r(offs_t offset, uint32_t mem_mask = ~0);
+ uint32_t adc_r(offs_t offset, uint32_t mem_mask = ~0);
+ uint32_t sio_r(offs_t offset, uint32_t mem_mask = ~0);
+ uint32_t iis_r(offs_t offset, uint32_t mem_mask = ~0);
+ uint32_t zdma_0_r(offs_t offset, uint32_t mem_mask = ~0);
+ uint32_t zdma_1_r(offs_t offset, uint32_t mem_mask = ~0);
+ uint32_t bdma_0_r(offs_t offset, uint32_t mem_mask = ~0);
+ uint32_t bdma_1_r(offs_t offset, uint32_t mem_mask = ~0);
+
+ void lcd_w(offs_t offset, uint32_t data, uint32_t mem_mask = ~0);
+ void clkpow_w(offs_t offset, uint32_t data, uint32_t mem_mask = ~0);
+ void irq_w(offs_t offset, uint32_t data, uint32_t mem_mask = ~0);
+ void pwm_w(offs_t offset, uint32_t data, uint32_t mem_mask = ~0);
+ void iic_w(offs_t offset, uint32_t data, uint32_t mem_mask = ~0);
+ void gpio_w(offs_t offset, uint32_t data, uint32_t mem_mask = ~0);
+ void uart_0_w(offs_t offset, uint32_t data, uint32_t mem_mask = ~0);
+ void uart_1_w(offs_t offset, uint32_t data, uint32_t mem_mask = ~0);
+ void wdt_w(offs_t offset, uint32_t data, uint32_t mem_mask = ~0);
+ void cpuwrap_w(offs_t offset, uint32_t data, uint32_t mem_mask = ~0);
+ void adc_w(offs_t offset, uint32_t data, uint32_t mem_mask = ~0);
+ void sio_w(offs_t offset, uint32_t data, uint32_t mem_mask = ~0);
+ void iis_w(offs_t offset, uint32_t data, uint32_t mem_mask = ~0);
+ void zdma_0_w(offs_t offset, uint32_t data, uint32_t mem_mask = ~0);
+ void zdma_1_w(offs_t offset, uint32_t data, uint32_t mem_mask = ~0);
+ void bdma_0_w(offs_t offset, uint32_t data, uint32_t mem_mask = ~0);
+ void bdma_1_w(offs_t offset, uint32_t data, uint32_t mem_mask = ~0);
void request_eint(uint32_t number);
uint32_t video_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
protected:
// device-level overrides
- virtual void device_start() override;
+ virtual void device_start() override ATTR_COLD;
virtual void device_post_load() override;
- virtual void device_reset() override;
+ virtual void device_reset() override ATTR_COLD;
private:
struct s3c44b0_memcon_regs_t
@@ -214,6 +215,16 @@ private:
struct s3c44b0_lcd_regs_t
{
+ void clear()
+ {
+ lcdcon1 = lcdcon2 = 0;
+ lcdsaddr1 = lcdsaddr2 = lcdsaddr3 = 0;
+ redlut = greenlut = bluelut = 0;
+ std::fill(std::begin(reserved), std::end(reserved), 0);
+ lcdcon3 = 0;
+ dithmode = 0;
+ }
+
uint32_t lcdcon1;
uint32_t lcdcon2;
uint32_t lcdsaddr1;
@@ -390,6 +401,22 @@ private:
struct s3c44b0_lcd_t
{
+ void clear()
+ {
+ regs.clear();
+ timer = nullptr;
+ vramaddr_cur = vramaddr_max = 0;
+ offsize = 0;
+ pagewidth_cur = pagewidth_max = 0;
+ modesel = 0;
+ bswp = 0;
+ vpos = hpos = 0;
+ framerate = 0;
+ hpos_min = hpos_max = hpos_end = vpos_min = vpos_max = vpos_end = 0;
+ frame_time = attotime::zero;
+ frame_period = pixeltime = scantime = 0;
+ }
+
s3c44b0_lcd_regs_t regs;
emu_timer *timer;
std::unique_ptr<uint8_t[]> bitmap;
@@ -553,7 +580,7 @@ private:
TIMER_CALLBACK_MEMBER(sio_timer_exp);
// IIS
- inline void iface_i2s_data_w(address_space &space, int ch, uint16_t data);
+ inline void iface_i2s_data_w(int ch, uint16_t data);
void iis_start();
void iis_stop();
TIMER_CALLBACK_MEMBER(iis_timer_exp);
@@ -599,6 +626,8 @@ private:
devcb_write_line m_sda_w_cb;
devcb_read32 m_data_r_cb;
devcb_write16 m_data_w_cb;
+
+ memory_access<32, 2, 0, ENDIANNESS_LITTLE>::cache m_cache;
};
DECLARE_DEVICE_TYPE(S3C44B0, s3c44b0_device)