diff options
Diffstat (limited to 'src/mame/drivers/hazeltin.cpp')
-rw-r--r-- | src/mame/drivers/hazeltin.cpp | 238 |
1 files changed, 119 insertions, 119 deletions
diff --git a/src/mame/drivers/hazeltin.cpp b/src/mame/drivers/hazeltin.cpp index b8f1ff8ee03..6c4a20110d1 100644 --- a/src/mame/drivers/hazeltin.cpp +++ b/src/mame/drivers/hazeltin.cpp @@ -34,7 +34,7 @@ References: #include "netlist/devices/net_lib.h" #define CPU_TAG "maincpu" -#define NETLIST_TAG "videobrd" +#define NETLIST_TAG "videobrd" #define UART_TAG "uart" #define BAUDGEN_TAG "baudgen" #define KBDC_TAG "ay53600" @@ -44,16 +44,16 @@ References: #define MISCKEYS_TAG "misc_keys" #define SCREEN_TAG "screen" #define BAUD_PROM_TAG "u39" -#define NL_PROM_TAG "videobrd:u71" -#define NL_EPROM_TAG "videobrd:u78" -#define VIDEO_PROM_TAG "u71" -#define CHAR_EPROM_TAG "u78" -#define VIDEO_OUT_TAG "videobrd:video_out" -#define VBLANK_OUT_TAG "videobrd:vblank" +#define NL_PROM_TAG "videobrd:u71" +#define NL_EPROM_TAG "videobrd:u78" +#define VIDEO_PROM_TAG "u71" +#define CHAR_EPROM_TAG "u78" +#define VIDEO_OUT_TAG "videobrd:video_out" +#define VBLANK_OUT_TAG "videobrd:vblank" #define TVINTERQ_OUT_TAG "videobrd:tvinterq" -#define VIDEO_CLOCK (XTAL_33_264MHz/2) -#define VIDEOBRD_CLOCK (XTAL_33_264MHz*30) +#define VIDEO_CLOCK (XTAL_33_264MHz/2) +#define VIDEOBRD_CLOCK (XTAL_33_264MHz*30) #define SR2_FULL_DUPLEX (0x01) #define SR2_UPPER_ONLY (0x08) @@ -97,28 +97,28 @@ public: , m_u27(*this, "videobrd:u27") , m_u28(*this, "videobrd:u28") , m_u29(*this, "videobrd:u29") - , m_cpu_db0(*this, "videobrd:cpu_db0") - , m_cpu_db1(*this, "videobrd:cpu_db1") - , m_cpu_db2(*this, "videobrd:cpu_db2") - , m_cpu_db3(*this, "videobrd:cpu_db3") - , m_cpu_db4(*this, "videobrd:cpu_db4") - , m_cpu_db5(*this, "videobrd:cpu_db5") - , m_cpu_db6(*this, "videobrd:cpu_db6") - , m_cpu_db7(*this, "videobrd:cpu_db7") - , m_cpu_ba4(*this, "videobrd:cpu_ba4") - , m_cpu_iowq(*this, "videobrd:cpu_iowq") - , m_video_out(*this, VIDEO_OUT_TAG) - , m_vblank_out(*this, VBLANK_OUT_TAG) - , m_tvinterq_out(*this, TVINTERQ_OUT_TAG) - , m_uart(*this, UART_TAG) + , m_cpu_db0(*this, "videobrd:cpu_db0") + , m_cpu_db1(*this, "videobrd:cpu_db1") + , m_cpu_db2(*this, "videobrd:cpu_db2") + , m_cpu_db3(*this, "videobrd:cpu_db3") + , m_cpu_db4(*this, "videobrd:cpu_db4") + , m_cpu_db5(*this, "videobrd:cpu_db5") + , m_cpu_db6(*this, "videobrd:cpu_db6") + , m_cpu_db7(*this, "videobrd:cpu_db7") + , m_cpu_ba4(*this, "videobrd:cpu_ba4") + , m_cpu_iowq(*this, "videobrd:cpu_iowq") + , m_video_out(*this, VIDEO_OUT_TAG) + , m_vblank_out(*this, VBLANK_OUT_TAG) + , m_tvinterq_out(*this, TVINTERQ_OUT_TAG) + , m_uart(*this, UART_TAG) , m_kbdc(*this, KBDC_TAG) , m_baud_dips(*this, BAUDPORT_TAG) , m_baud_prom(*this, BAUD_PROM_TAG) , m_misc_dips(*this, MISCPORT_TAG) , m_kbd_misc_keys(*this, MISCKEYS_TAG) , m_screen(*this, SCREEN_TAG) - , m_iowq_timer(nullptr) - , m_status_reg_3(0) + , m_iowq_timer(nullptr) + , m_status_reg_3(0) , m_kbd_status_latch(0) , m_refresh_address(0) , m_screen_buf(nullptr) @@ -126,16 +126,16 @@ public: , m_last_hpos(0) , m_last_vpos(0) , m_last_fraction(0.0) - { + { } virtual void machine_start() override; virtual void machine_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; - static const device_timer_id TIMER_IOWQ = 0; + static const device_timer_id TIMER_IOWQ = 0; - uint32_t screen_update_hazl1500(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); + uint32_t screen_update_hazl1500(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); DECLARE_WRITE_LINE_MEMBER(com5016_fr_w); @@ -157,9 +157,9 @@ public: DECLARE_WRITE8_MEMBER(refresh_address_w); - NETDEV_ANALOG_CALLBACK_MEMBER(video_out_cb); - NETDEV_ANALOG_CALLBACK_MEMBER(vblank_cb); - NETDEV_ANALOG_CALLBACK_MEMBER(tvinterq_cb); + NETDEV_ANALOG_CALLBACK_MEMBER(video_out_cb); + NETDEV_ANALOG_CALLBACK_MEMBER(vblank_cb); + NETDEV_ANALOG_CALLBACK_MEMBER(tvinterq_cb); private: required_device<cpu_device> m_maincpu; @@ -182,20 +182,20 @@ private: required_device<netlist_ram_pointer_t> m_u27; required_device<netlist_ram_pointer_t> m_u28; required_device<netlist_ram_pointer_t> m_u29; - required_device<netlist_mame_logic_input_t> m_cpu_db0; - required_device<netlist_mame_logic_input_t> m_cpu_db1; - required_device<netlist_mame_logic_input_t> m_cpu_db2; - required_device<netlist_mame_logic_input_t> m_cpu_db3; - required_device<netlist_mame_logic_input_t> m_cpu_db4; - required_device<netlist_mame_logic_input_t> m_cpu_db5; - required_device<netlist_mame_logic_input_t> m_cpu_db6; - required_device<netlist_mame_logic_input_t> m_cpu_db7; - required_device<netlist_mame_logic_input_t> m_cpu_ba4; - required_device<netlist_mame_logic_input_t> m_cpu_iowq; - required_device<netlist_mame_analog_output_t> m_video_out; - required_device<netlist_mame_analog_output_t> m_vblank_out; - required_device<netlist_mame_analog_output_t> m_tvinterq_out; - required_device<ay31015_device> m_uart; + required_device<netlist_mame_logic_input_t> m_cpu_db0; + required_device<netlist_mame_logic_input_t> m_cpu_db1; + required_device<netlist_mame_logic_input_t> m_cpu_db2; + required_device<netlist_mame_logic_input_t> m_cpu_db3; + required_device<netlist_mame_logic_input_t> m_cpu_db4; + required_device<netlist_mame_logic_input_t> m_cpu_db5; + required_device<netlist_mame_logic_input_t> m_cpu_db6; + required_device<netlist_mame_logic_input_t> m_cpu_db7; + required_device<netlist_mame_logic_input_t> m_cpu_ba4; + required_device<netlist_mame_logic_input_t> m_cpu_iowq; + required_device<netlist_mame_analog_output_t> m_video_out; + required_device<netlist_mame_analog_output_t> m_vblank_out; + required_device<netlist_mame_analog_output_t> m_tvinterq_out; + required_device<ay31015_device> m_uart; required_device<ay3600_device> m_kbdc; required_ioport m_baud_dips; required_region_ptr<uint8_t> m_baud_prom; @@ -204,16 +204,16 @@ private: required_device<screen_device> m_screen; - emu_timer* m_iowq_timer; + emu_timer* m_iowq_timer; - uint8_t m_status_reg_3; + uint8_t m_status_reg_3; uint8_t m_kbd_status_latch; uint8_t m_refresh_address; std::unique_ptr<float[]> m_screen_buf; - double m_last_beam; + double m_last_beam; int m_last_hpos; int m_last_vpos; double m_last_fraction; @@ -223,10 +223,10 @@ void hazl1500_state::machine_start() { m_screen_buf = std::make_unique<float[]>(SCREEN_HTOTAL * SCREEN_VTOTAL); - m_iowq_timer = timer_alloc(TIMER_IOWQ); - m_iowq_timer->adjust(attotime::never); + m_iowq_timer = timer_alloc(TIMER_IOWQ); + m_iowq_timer->adjust(attotime::never); - save_item(NAME(m_status_reg_3)); + save_item(NAME(m_status_reg_3)); save_item(NAME(m_kbd_status_latch)); save_item(NAME(m_refresh_address)); save_item(NAME(m_last_beam)); @@ -243,8 +243,8 @@ void hazl1500_state::machine_reset() void hazl1500_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) { - m_cpu_iowq->write(1); - m_cpu_ba4->write(1); + m_cpu_iowq->write(1); + m_cpu_ba4->write(1); } WRITE_LINE_MEMBER( hazl1500_state::com5016_fr_w ) @@ -269,9 +269,9 @@ uint32_t hazl1500_state::screen_update_hazl1500(screen_device &screen, bitmap_rg uint32_t *scanline = &bitmap.pix32(y); pixindex = y * SCREEN_HTOTAL; for (int x = 0; x < SCREEN_HTOTAL; x++) - //*scanline++ = 0xff000000 | (uint8_t(m_screen_buf[pixindex++] * 0.5) * 0x010101); - *scanline++ = 0xff000000 | (uint8_t(m_screen_buf[pixindex++] * 63.0) * 0x010101); - } + //*scanline++ = 0xff000000 | (uint8_t(m_screen_buf[pixindex++] * 0.5) * 0x010101); + *scanline++ = 0xff000000 | (uint8_t(m_screen_buf[pixindex++] * 63.0) * 0x010101); + } return 0; } @@ -297,11 +297,11 @@ READ8_MEMBER( hazl1500_state::ram_r ) WRITE8_MEMBER( hazl1500_state::ram_w ) { - uint8_t* chips[2][8] = - { - { m_u29->ptr(), m_u28->ptr(), m_u27->ptr(), m_u26->ptr(), m_u25->ptr(), m_u24->ptr(), m_u23->ptr(), m_u22->ptr() }, - { m_u16->ptr(), m_u15->ptr(), m_u14->ptr(), m_u13->ptr(), m_u12->ptr(), m_u11->ptr(), m_u10->ptr(), m_u9->ptr() } - }; + uint8_t* chips[2][8] = + { + { m_u29->ptr(), m_u28->ptr(), m_u27->ptr(), m_u26->ptr(), m_u25->ptr(), m_u24->ptr(), m_u23->ptr(), m_u22->ptr() }, + { m_u16->ptr(), m_u15->ptr(), m_u14->ptr(), m_u13->ptr(), m_u12->ptr(), m_u11->ptr(), m_u10->ptr(), m_u9->ptr() } + }; int bank = ((offset & 0x400) != 0 ? 1 : 0); const int byte_pos = (offset >> 3) & 0x7f; @@ -388,30 +388,30 @@ WRITE_LINE_MEMBER(hazl1500_state::ay3600_data_ready_w) NETDEV_ANALOG_CALLBACK_MEMBER(hazl1500_state::vblank_cb) { - synchronize(); - if (int(data) > 1) - { - m_kbd_status_latch &= ~KBD_STATUS_TV_UB; - } - else - { - m_kbd_status_latch |= KBD_STATUS_TV_UB; - } + synchronize(); + if (int(data) > 1) + { + m_kbd_status_latch &= ~KBD_STATUS_TV_UB; + } + else + { + m_kbd_status_latch |= KBD_STATUS_TV_UB; + } } NETDEV_ANALOG_CALLBACK_MEMBER(hazl1500_state::tvinterq_cb) { - synchronize(); - if (int(data) > 1) - { - m_kbd_status_latch &= ~KBD_STATUS_TV_INT; - m_maincpu->set_input_line(INPUT_LINE_IRQ0, CLEAR_LINE); - } - else - { - m_kbd_status_latch |= KBD_STATUS_TV_INT; - m_maincpu->set_input_line(INPUT_LINE_IRQ0, ASSERT_LINE); - } + synchronize(); + if (int(data) > 1) + { + m_kbd_status_latch &= ~KBD_STATUS_TV_INT; + m_maincpu->set_input_line(INPUT_LINE_IRQ0, CLEAR_LINE); + } + else + { + m_kbd_status_latch |= KBD_STATUS_TV_INT; + m_maincpu->set_input_line(INPUT_LINE_IRQ0, ASSERT_LINE); + } } NETDEV_ANALOG_CALLBACK_MEMBER(hazl1500_state::video_out_cb) @@ -426,8 +426,8 @@ NETDEV_ANALOG_CALLBACK_MEMBER(hazl1500_state::video_out_cb) pixel_index -= 16; // take back 16 clock cycles to honor the circuitry god whose ark this is if (pixel_index < 0) { - m_last_beam = float(data); - m_last_hpos = 0; + m_last_beam = float(data); + m_last_hpos = 0; m_last_vpos = 0; m_last_fraction = 0.0; return; @@ -447,27 +447,27 @@ NETDEV_ANALOG_CALLBACK_MEMBER(hazl1500_state::video_out_cb) m_screen_buf[last_index++] = float(m_last_beam); } - m_last_beam = float(data); - m_last_hpos = hpos; + m_last_beam = float(data); + m_last_hpos = hpos; m_last_vpos = vpos; m_last_fraction = pixel_fraction; } WRITE8_MEMBER(hazl1500_state::refresh_address_w) { - synchronize(); - //printf("refresh: %02x, %d, %d\n", data, m_screen->hpos(), m_screen->vpos()); - m_iowq_timer->adjust(attotime::from_hz(XTAL_18MHz/9)); - m_cpu_iowq->write(0); - m_cpu_ba4->write(0); - m_cpu_db0->write((data >> 0) & 1); - m_cpu_db1->write((data >> 1) & 1); - m_cpu_db2->write((data >> 2) & 1); - m_cpu_db3->write((data >> 3) & 1); - m_cpu_db4->write((data >> 4) & 1); - m_cpu_db5->write((data >> 5) & 1); - m_cpu_db6->write((data >> 6) & 1); - m_cpu_db7->write((data >> 7) & 1); + synchronize(); + //printf("refresh: %02x, %d, %d\n", data, m_screen->hpos(), m_screen->vpos()); + m_iowq_timer->adjust(attotime::from_hz(XTAL_18MHz/9)); + m_cpu_iowq->write(0); + m_cpu_ba4->write(0); + m_cpu_db0->write((data >> 0) & 1); + m_cpu_db1->write((data >> 1) & 1); + m_cpu_db2->write((data >> 2) & 1); + m_cpu_db3->write((data >> 3) & 1); + m_cpu_db4->write((data >> 4) & 1); + m_cpu_db5->write((data >> 5) & 1); + m_cpu_db6->write((data >> 6) & 1); + m_cpu_db7->write((data >> 7) & 1); } static ADDRESS_MAP_START(hazl1500_mem, AS_PROGRAM, 8, hazl1500_state) @@ -694,12 +694,12 @@ static MACHINE_CONFIG_START( hazl1500, hazl1500_state ) /* video hardware */ MCFG_SCREEN_ADD(SCREEN_TAG, RASTER) MCFG_SCREEN_UPDATE_DRIVER(hazl1500_state, screen_update_hazl1500) - //MCFG_SCREEN_RAW_PARAMS(XTAL_33_264MHz / 2, - // SCREEN_HTOTAL, SCREEN_HSTART, SCREEN_HSTART + SCREEN_HDISP, - // SCREEN_VTOTAL, SCREEN_VSTART, SCREEN_VSTART + SCREEN_VDISP); // TODO: Figure out exact visibility - MCFG_SCREEN_RAW_PARAMS(XTAL_33_264MHz / 2, - SCREEN_HTOTAL, 0, SCREEN_HTOTAL, - SCREEN_VTOTAL, 0, SCREEN_VTOTAL); + //MCFG_SCREEN_RAW_PARAMS(XTAL_33_264MHz / 2, + // SCREEN_HTOTAL, SCREEN_HSTART, SCREEN_HSTART + SCREEN_HDISP, + // SCREEN_VTOTAL, SCREEN_VSTART, SCREEN_VSTART + SCREEN_VDISP); // TODO: Figure out exact visibility + MCFG_SCREEN_RAW_PARAMS(XTAL_33_264MHz / 2, + SCREEN_HTOTAL, 0, SCREEN_HTOTAL, + SCREEN_VTOTAL, 0, SCREEN_VTOTAL); MCFG_PALETTE_ADD_MONOCHROME("palette") MCFG_GFXDECODE_ADD("gfxdecode", "palette", hazl1500) @@ -735,20 +735,20 @@ static MACHINE_CONFIG_START( hazl1500, hazl1500_state ) MCFG_NETLIST_RAM_POINTER(NETLIST_TAG, "u15", "u15") MCFG_NETLIST_RAM_POINTER(NETLIST_TAG, "u16", "u16") - MCFG_NETLIST_LOGIC_INPUT(NETLIST_TAG, "cpu_iowq", "cpu_iowq.IN", 0) - MCFG_NETLIST_LOGIC_INPUT(NETLIST_TAG, "cpu_ba4", "cpu_ba4.IN", 0) - MCFG_NETLIST_LOGIC_INPUT(NETLIST_TAG, "cpu_db0", "cpu_db0.IN", 0) - MCFG_NETLIST_LOGIC_INPUT(NETLIST_TAG, "cpu_db1", "cpu_db1.IN", 0) - MCFG_NETLIST_LOGIC_INPUT(NETLIST_TAG, "cpu_db2", "cpu_db2.IN", 0) - MCFG_NETLIST_LOGIC_INPUT(NETLIST_TAG, "cpu_db3", "cpu_db3.IN", 0) - MCFG_NETLIST_LOGIC_INPUT(NETLIST_TAG, "cpu_db4", "cpu_db4.IN", 0) - MCFG_NETLIST_LOGIC_INPUT(NETLIST_TAG, "cpu_db5", "cpu_db5.IN", 0) - MCFG_NETLIST_LOGIC_INPUT(NETLIST_TAG, "cpu_db6", "cpu_db6.IN", 0) - MCFG_NETLIST_LOGIC_INPUT(NETLIST_TAG, "cpu_db7", "cpu_db7.IN", 0) - - MCFG_NETLIST_ANALOG_OUTPUT(NETLIST_TAG, "video_out", "video_out", hazl1500_state, video_out_cb, "") - MCFG_NETLIST_ANALOG_OUTPUT(NETLIST_TAG, "vblank", "vblank", hazl1500_state, vblank_cb, "") - MCFG_NETLIST_ANALOG_OUTPUT(NETLIST_TAG, "tvinterq", "tvinterq", hazl1500_state, tvinterq_cb, "") + MCFG_NETLIST_LOGIC_INPUT(NETLIST_TAG, "cpu_iowq", "cpu_iowq.IN", 0) + MCFG_NETLIST_LOGIC_INPUT(NETLIST_TAG, "cpu_ba4", "cpu_ba4.IN", 0) + MCFG_NETLIST_LOGIC_INPUT(NETLIST_TAG, "cpu_db0", "cpu_db0.IN", 0) + MCFG_NETLIST_LOGIC_INPUT(NETLIST_TAG, "cpu_db1", "cpu_db1.IN", 0) + MCFG_NETLIST_LOGIC_INPUT(NETLIST_TAG, "cpu_db2", "cpu_db2.IN", 0) + MCFG_NETLIST_LOGIC_INPUT(NETLIST_TAG, "cpu_db3", "cpu_db3.IN", 0) + MCFG_NETLIST_LOGIC_INPUT(NETLIST_TAG, "cpu_db4", "cpu_db4.IN", 0) + MCFG_NETLIST_LOGIC_INPUT(NETLIST_TAG, "cpu_db5", "cpu_db5.IN", 0) + MCFG_NETLIST_LOGIC_INPUT(NETLIST_TAG, "cpu_db6", "cpu_db6.IN", 0) + MCFG_NETLIST_LOGIC_INPUT(NETLIST_TAG, "cpu_db7", "cpu_db7.IN", 0) + + MCFG_NETLIST_ANALOG_OUTPUT(NETLIST_TAG, "video_out", "video_out", hazl1500_state, video_out_cb, "") + MCFG_NETLIST_ANALOG_OUTPUT(NETLIST_TAG, "vblank", "vblank", hazl1500_state, vblank_cb, "") + MCFG_NETLIST_ANALOG_OUTPUT(NETLIST_TAG, "tvinterq", "tvinterq", hazl1500_state, tvinterq_cb, "") /* keyboard controller */ MCFG_DEVICE_ADD(KBDC_TAG, AY3600, 0) |