summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/includes/jpmimpct.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/includes/jpmimpct.h')
-rw-r--r--src/mame/includes/jpmimpct.h225
1 files changed, 135 insertions, 90 deletions
diff --git a/src/mame/includes/jpmimpct.h b/src/mame/includes/jpmimpct.h
index c11aaab8c24..dcf5d1104e0 100644
--- a/src/mame/includes/jpmimpct.h
+++ b/src/mame/includes/jpmimpct.h
@@ -10,94 +10,104 @@
#include "machine/steppers.h"
#include "machine/timer.h"
#include "cpu/tms34010/tms34010.h"
+#include "video/bt47x.h"
+#include "machine/i8255.h"
+#include "machine/mc68681.h"
#include "sound/upd7759.h"
+#include "diserial.h"
+#include "machine/bacta_datalogger.h"
#include "emupal.h"
-struct duart_t
-{
- uint8_t MR1A, MR2A;
- uint8_t SRA, CSRA;
- uint8_t CRA;
- uint8_t RBA, TBA;
- uint8_t IPCR;
- uint8_t ACR;
- uint8_t ISR, IMR;
- union
- {
- uint8_t CUR, CLR;
- uint16_t CR;
- };
- union
- {
- uint8_t CTUR, CTLR;
- uint16_t CT;
- };
-
- int tc;
-
- uint8_t MR1B, MR2B;
- uint8_t SRB, CSRB;
- uint8_t CRB;
- uint8_t RBB, TBB;
-
- uint8_t IVR;
- uint8_t IP;
- uint8_t OP;
- uint8_t OPR;
- uint8_t OPCR;
-};
-struct bt477_t
+class jpmtouch_device : public device_t,
+ public device_serial_interface
{
- uint8_t address;
- uint8_t addr_cnt;
- uint8_t pixmask;
- uint8_t command;
- rgb_t color;
+public:
+ jpmtouch_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0);
+
+ auto rxd_handler() { return m_rxd_handler.bind(); }
+
+ DECLARE_WRITE_LINE_MEMBER( output_rxd ) { m_rxd_handler(state); }
+
+ void touched(uint8_t x, uint8_t y);
+
+protected:
+ jpmtouch_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);
+
+ virtual void device_start() override;
+ virtual void device_reset() override;
+
+ virtual void tra_callback() override;
+ virtual void tra_complete() override;
+
+private:
+ void tx_queue();
+
+ devcb_write_line m_rxd_handler;
+ int8_t m_sending;
+ uint8_t m_touch_data[3];
+ uint8_t m_sendpos;
};
+DECLARE_DEVICE_TYPE(JPM_TOUCHSCREEN, jpmtouch_device)
+
class jpmimpct_state : public driver_device
{
public:
jpmimpct_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag)
- , m_duart_1_timer(*this, "duart_1_timer")
- , m_vfd(*this, "vfd")
- , m_vram(*this, "vram")
, m_maincpu(*this, "maincpu")
- , m_upd7759(*this, "upd")
- , m_palette(*this, "palette")
- , m_dsp(*this, "dsp")
- , m_reel(*this, "reel%u", 0U)
, m_meters(*this, "meters")
+ , m_datalogger(*this, "datalogger")
+ , m_testdemo(*this, "TEST_DEMO")
, m_digits(*this, "digit%u", 0U)
+ , m_ppi(*this, "ppi8255")
+ , m_duart(*this, "main_duart")
+ , m_vfd(*this, "vfd")
+ , m_upd7759(*this, "upd")
+ , m_reel(*this, "reel%u", 0U)
, m_lamp_output(*this, "lamp%u", 0U)
{ }
- void impctawp(machine_config &config);
- void jpmimpct(machine_config &config);
+ void impact_nonvideo(machine_config &config);
+
+protected:
+ void base(machine_config &config);
+
+ required_device<cpu_device> m_maincpu;
+ required_device<meters_device> m_meters;
+ required_device<bacta_datalogger_device> m_datalogger;
+ required_ioport m_testdemo;
+ output_finder<300> m_digits;
+
+ uint16_t jpmio_r();
-private:
- template <unsigned N> DECLARE_WRITE_LINE_MEMBER(reel_optic_cb) { if (state) m_optic_pattern |= (1 << N); else m_optic_pattern &= ~(1 << N); }
- uint16_t duart_1_r(offs_t offset);
- void duart_1_w(offs_t offset, uint16_t data);
- uint16_t duart_2_r(offs_t offset);
- void duart_2_w(uint16_t data);
- uint16_t inputs1_r(offs_t offset);
uint16_t unk_r();
void unk_w(uint16_t data);
- uint16_t jpmio_r();
- void jpmio_w(offs_t offset, uint16_t data);
- uint16_t inputs1awp_r(offs_t offset);
+
+ void common_map(address_map &map);
+
+ int m_lamp_strobe;
+
+ void set_duart_1_hack_ip(bool state);
+
+ void jpm_draw_lamps(uint16_t data, int lamp_strobe);
+
+ TIMER_DEVICE_CALLBACK_MEMBER(duart_set_ip5);
+
+ virtual void update_irqs();
+protected:
+ virtual void machine_start() override;
+ virtual void machine_reset() override;
+
+private:
+ template <unsigned N> DECLARE_WRITE_LINE_MEMBER(reel_optic_cb) { if (state) m_optic_pattern |= (1 << N); else m_optic_pattern &= ~(1 << N); }
uint16_t optos_r();
uint16_t prot_1_r();
uint16_t prot_0_r();
- void jpmioawp_w(offs_t offset, uint16_t data);
uint16_t ump_r();
- void jpmimpct_bt477_w(offs_t offset, uint16_t data);
- uint16_t jpmimpct_bt477_r(offs_t offset);
void volume_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0);
void upd7759_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0);
uint16_t upd7759_r(offs_t offset, uint16_t mem_mask = ~0);
@@ -105,26 +115,20 @@ private:
uint8_t hopper_c_r();
void payen_a_w(uint8_t data);
void display_c_w(uint8_t data);
- DECLARE_WRITE_LINE_MEMBER(tms_irq);
- TMS340X0_TO_SHIFTREG_CB_MEMBER(to_shiftreg);
- TMS340X0_FROM_SHIFTREG_CB_MEMBER(from_shiftreg);
- TMS340X0_SCANLINE_RGB32_CB_MEMBER(scanline_update);
- DECLARE_MACHINE_START(jpmimpct);
- DECLARE_MACHINE_RESET(jpmimpct);
- DECLARE_VIDEO_START(jpmimpct);
- DECLARE_MACHINE_START(impctawp);
- DECLARE_MACHINE_RESET(impctawp);
- TIMER_DEVICE_CALLBACK_MEMBER(duart_1_timer_event);
- void awp68k_program_map(address_map &map);
- void m68k_program_map(address_map &map);
- void tms_program_map(address_map &map);
- uint8_t m_tms_irq;
- uint8_t m_duart_1_irq;
- struct duart_t m_duart_1;
- uint8_t m_touch_cnt;
- uint8_t m_touch_data[3];
- int m_lamp_strobe;
+ void pwrled_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0);
+ void reels_0123_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0);
+ void reels_45_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0);
+ void slides_non_video_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0);
+ void lamps_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0);
+ void digits_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0);
+ void lampstrobe_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0);
+
+
+
+ DECLARE_WRITE_LINE_MEMBER(duart_irq_handler);
+ void impact_non_video_map(address_map &map);
+
uint8_t m_Lamps[256];
int m_optic_pattern;
int m_payen;
@@ -133,19 +137,60 @@ private:
int m_slidesout;
int m_hopper[3];
int m_motor[3];
- struct bt477_t m_bt477;
- void jpm_draw_lamps(int data, int lamp_strobe);
- void update_irqs();
- required_device<timer_device> m_duart_1_timer;
+ required_device<i8255_device> m_ppi;
+ required_device<mc68681_device> m_duart;
optional_device<s16lf01_device> m_vfd;
- optional_shared_ptr<uint16_t> m_vram;
- required_device<cpu_device> m_maincpu;
required_device<upd7759_device> m_upd7759;
- optional_device<palette_device> m_palette;
- optional_device<tms34010_device> m_dsp;
optional_device_array<stepper_device, 6> m_reel;
- required_device<meters_device> m_meters;
- output_finder<300> m_digits;
output_finder<256> m_lamp_output;
};
+
+class jpmimpct_video_state : public jpmimpct_state
+{
+public:
+ jpmimpct_video_state(const machine_config &mconfig, device_type type, const char *tag)
+ : jpmimpct_state(mconfig, type, tag)
+ , m_vidduart(*this, "vid_duart")
+ , m_touch(*this, "touch")
+ , m_dsp(*this, "dsp")
+ , m_vram(*this, "vram")
+ , m_ramdac(*this, "ramdac")
+ , m_touchx(*this, "TOUCH_X")
+ , m_touchy(*this, "TOUCH_Y")
+ {
+ }
+
+ void impact_video(machine_config &config);
+ void impact_video_touch(machine_config &config);
+
+ DECLARE_INPUT_CHANGED_MEMBER(touch_port_changed);
+
+protected:
+ virtual void machine_start() override;
+ virtual void machine_reset() override;
+
+ void impact_video_map(address_map &map);
+
+ void slides_video_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0);
+
+ void tms_program_map(address_map &map);
+
+ DECLARE_WRITE_LINE_MEMBER(tms_irq);
+ TMS340X0_TO_SHIFTREG_CB_MEMBER(to_shiftreg);
+ TMS340X0_FROM_SHIFTREG_CB_MEMBER(from_shiftreg);
+ TMS340X0_SCANLINE_RGB32_CB_MEMBER(scanline_update);
+ uint8_t m_tms_irq;
+
+ virtual void update_irqs() override;
+
+protected:
+ required_device<mc68681_device> m_vidduart;
+ optional_device<jpmtouch_device> m_touch;
+private:
+ optional_device<tms34010_device> m_dsp;
+ optional_shared_ptr<uint16_t> m_vram;
+ required_device<bt477_device> m_ramdac;
+ optional_ioport m_touchx;
+ optional_ioport m_touchy;
+};