mirror of
https://github.com/holub/mame
synced 2025-10-07 17:27:06 +03:00
Machine promoted to working
------------ Novag Diablo 68000 [hap]
This commit is contained in:
parent
446532b332
commit
c69c144013
@ -57,8 +57,6 @@ instead of magnet sensors.
|
||||
#include "bus/rs232/rs232.h"
|
||||
#include "machine/mos6551.h"
|
||||
#include "machine/nvram.h"
|
||||
#include "sound/beep.h"
|
||||
#include "video/hd44780.h"
|
||||
|
||||
// internal artwork
|
||||
#include "novag_sexpert.lh" // clickable
|
||||
@ -70,13 +68,9 @@ class novag6502_state : public novagbase_state
|
||||
{
|
||||
public:
|
||||
novag6502_state(const machine_config &mconfig, device_type type, const char *tag)
|
||||
: novagbase_state(mconfig, type, tag),
|
||||
m_lcd(*this, "hd44780")
|
||||
: novagbase_state(mconfig, type, tag)
|
||||
{ }
|
||||
|
||||
// devices/pointers
|
||||
optional_device<hd44780_device> m_lcd;
|
||||
|
||||
TIMER_DEVICE_CALLBACK_MEMBER(irq_on) { m_maincpu->set_input_line(M6502_IRQ_LINE, ASSERT_LINE); }
|
||||
TIMER_DEVICE_CALLBACK_MEMBER(irq_off) { m_maincpu->set_input_line(M6502_IRQ_LINE, CLEAR_LINE); }
|
||||
|
||||
@ -93,8 +87,6 @@ public:
|
||||
DECLARE_WRITE8_MEMBER(sexpert_lcd_data_w);
|
||||
DECLARE_READ8_MEMBER(sexpert_input1_r);
|
||||
DECLARE_READ8_MEMBER(sexpert_input2_r);
|
||||
DECLARE_PALETTE_INIT(sexpert);
|
||||
HD44780_PIXEL_UPDATE(sexpert_pixel_update);
|
||||
DECLARE_MACHINE_RESET(sexpert);
|
||||
DECLARE_DRIVER_INIT(sexpert);
|
||||
DECLARE_INPUT_CHANGED_MEMBER(sexpert_cpu_freq);
|
||||
@ -247,6 +239,29 @@ void novagbase_state::display_matrix(int maxx, int maxy, u32 setx, u32 sety, boo
|
||||
}
|
||||
|
||||
|
||||
// LCD
|
||||
|
||||
PALETTE_INIT_MEMBER(novagbase_state, novag_lcd)
|
||||
{
|
||||
palette.set_pen_color(0, rgb_t(138, 146, 148)); // background
|
||||
palette.set_pen_color(1, rgb_t(92, 83, 88)); // lcd pixel on
|
||||
palette.set_pen_color(2, rgb_t(131, 136, 139)); // lcd pixel off
|
||||
}
|
||||
|
||||
HD44780_PIXEL_UPDATE(novagbase_state::novag_lcd_pixel_update)
|
||||
{
|
||||
// char size is 5x8
|
||||
if (x > 4 || y > 7)
|
||||
return;
|
||||
|
||||
if (line < 2 && pos < 8)
|
||||
{
|
||||
// internal: (8+8)*1, external: 1*16
|
||||
bitmap.pix16(1 + y, 1 + line*8*6 + pos*6 + x) = state ? 1 : 2;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// generic input handlers
|
||||
|
||||
u16 novagbase_state::read_inputs(int columns)
|
||||
@ -308,34 +323,14 @@ READ8_MEMBER(novag6502_state::supercon_input2_r)
|
||||
Super Expert
|
||||
******************************************************************************/
|
||||
|
||||
// LCD
|
||||
|
||||
PALETTE_INIT_MEMBER(novag6502_state, sexpert)
|
||||
{
|
||||
palette.set_pen_color(0, rgb_t(138, 146, 148)); // background
|
||||
palette.set_pen_color(1, rgb_t(92, 83, 88)); // lcd pixel on
|
||||
palette.set_pen_color(2, rgb_t(131, 136, 139)); // lcd pixel off
|
||||
}
|
||||
|
||||
HD44780_PIXEL_UPDATE(novag6502_state::sexpert_pixel_update)
|
||||
{
|
||||
// char size is 5x8
|
||||
if (x > 4 || y > 7)
|
||||
return;
|
||||
|
||||
if (line < 2 && pos < 8)
|
||||
{
|
||||
// internal: (8+8)*1, external: 1*16
|
||||
bitmap.pix16(1 + y, 1 + line*8*6 + pos*6 + x) = state ? 1 : 2;
|
||||
}
|
||||
}
|
||||
// TTL/generic
|
||||
|
||||
WRITE8_MEMBER(novag6502_state::sexpert_lcd_control_w)
|
||||
{
|
||||
// d0: HD44780 RS
|
||||
// d1: HD44780 R/W
|
||||
// d2: HD44780 E
|
||||
m_lcd_control = data;
|
||||
m_lcd_control = data & 7;
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(novag6502_state::sexpert_lcd_data_w)
|
||||
@ -345,8 +340,6 @@ WRITE8_MEMBER(novag6502_state::sexpert_lcd_data_w)
|
||||
m_lcd->write(space, m_lcd_control & 1, data);
|
||||
}
|
||||
|
||||
// TTL/generic
|
||||
|
||||
WRITE8_MEMBER(novag6502_state::sexpert_leds_w)
|
||||
{
|
||||
// d0-d7: chessboard leds
|
||||
@ -825,11 +818,11 @@ static MACHINE_CONFIG_START( sexpert, novag6502_state )
|
||||
MCFG_SCREEN_UPDATE_DEVICE("hd44780", hd44780_device, screen_update)
|
||||
MCFG_SCREEN_PALETTE("palette")
|
||||
MCFG_PALETTE_ADD("palette", 3)
|
||||
MCFG_PALETTE_INIT_OWNER(novag6502_state, sexpert)
|
||||
MCFG_PALETTE_INIT_OWNER(novagbase_state, novag_lcd)
|
||||
|
||||
MCFG_HD44780_ADD("hd44780")
|
||||
MCFG_HD44780_LCD_SIZE(2, 8)
|
||||
MCFG_HD44780_PIXEL_UPDATE_CB(novag6502_state, sexpert_pixel_update)
|
||||
MCFG_HD44780_PIXEL_UPDATE_CB(novagbase_state, novag_lcd_pixel_update)
|
||||
|
||||
MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", novagbase_state, display_decay_tick, attotime::from_msec(1))
|
||||
MCFG_DEFAULT_LAYOUT(layout_novag_sexpert)
|
||||
|
@ -10,17 +10,24 @@
|
||||
such as Arena(in editmode).
|
||||
|
||||
TODO:
|
||||
- x
|
||||
- verify irq/beeper timing
|
||||
- RS232 port
|
||||
|
||||
******************************************************************************
|
||||
|
||||
Diablo 68000:
|
||||
- x
|
||||
- M68000 @ 16MHz, IRQ ~256Hz
|
||||
- 2*8KB RAM TC5565 battery-backed, 2*32KB hashtable RAM TC55257 3*32KB ROM
|
||||
- HD44780 LCD controller (16x1)
|
||||
- R65C51P2 ACIA @ 1.8432MHz, RS232
|
||||
- magnetic sensors, 8*8 chessboard leds
|
||||
|
||||
******************************************************************************/
|
||||
|
||||
#include "includes/novagbase.h"
|
||||
#include "cpu/m68000/m68000.h"
|
||||
#include "machine/mos6551.h"
|
||||
#include "machine/nvram.h"
|
||||
|
||||
// internal artwork
|
||||
#include "novag_diablo68k.lh" // clickable
|
||||
@ -33,9 +40,12 @@ public:
|
||||
: novagbase_state(mconfig, type, tag)
|
||||
{ }
|
||||
|
||||
// devices/pointers
|
||||
|
||||
// Diablo 68000
|
||||
DECLARE_WRITE8_MEMBER(diablo68k_control_w);
|
||||
DECLARE_WRITE8_MEMBER(diablo68k_lcd_data_w);
|
||||
DECLARE_WRITE8_MEMBER(diablo68k_leds_w);
|
||||
DECLARE_READ8_MEMBER(diablo68k_input1_r);
|
||||
DECLARE_READ8_MEMBER(diablo68k_input2_r);
|
||||
};
|
||||
|
||||
|
||||
@ -46,6 +56,49 @@ public:
|
||||
Diablo 68000
|
||||
******************************************************************************/
|
||||
|
||||
// TTL
|
||||
|
||||
WRITE8_MEMBER(novag68k_state::diablo68k_control_w)
|
||||
{
|
||||
// d1: HD44780 RS
|
||||
// other: ?
|
||||
m_lcd_control = data & 7;
|
||||
|
||||
// d7: enable beeper
|
||||
m_beeper->set_state(data >> 7 & 1);
|
||||
|
||||
// d4-d6: input mux, led select
|
||||
m_inp_mux = 1 << (data >> 4 & 0x7) & 0xff;
|
||||
display_matrix(8, 8, m_led_data, m_inp_mux);
|
||||
m_led_data = 0; // ?
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(novag68k_state::diablo68k_lcd_data_w)
|
||||
{
|
||||
// d0-d7: HD44780 data
|
||||
m_lcd->write(space, m_lcd_control >> 1 & 1, data);
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(novag68k_state::diablo68k_leds_w)
|
||||
{
|
||||
// d0-d7: chessboard leds
|
||||
m_led_data = data;
|
||||
}
|
||||
|
||||
READ8_MEMBER(novag68k_state::diablo68k_input1_r)
|
||||
{
|
||||
// d0-d7: multiplexed inputs (chessboard squares)
|
||||
return ~read_inputs(8) & 0xff;
|
||||
}
|
||||
|
||||
READ8_MEMBER(novag68k_state::diablo68k_input2_r)
|
||||
{
|
||||
// d0-d2: multiplexed inputs (side panel)
|
||||
// other: ?
|
||||
return ~read_inputs(8) >> 8 & 7;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/******************************************************************************
|
||||
Address Maps
|
||||
@ -54,8 +107,15 @@ public:
|
||||
// Diablo 68000
|
||||
|
||||
static ADDRESS_MAP_START( diablo68k_map, AS_PROGRAM, 16, novag68k_state )
|
||||
AM_RANGE( 0x000000, 0x00ffff ) AM_ROM
|
||||
AM_RANGE( 0xff8000, 0xffffff ) AM_RAM
|
||||
AM_RANGE(0x000000, 0x00ffff) AM_ROM
|
||||
AM_RANGE(0x200000, 0x20ffff) AM_ROM AM_REGION("maincpu", 0x10000)
|
||||
AM_RANGE(0x280000, 0x28ffff) AM_RAM
|
||||
AM_RANGE(0x300000, 0x300007) AM_DEVREADWRITE8("acia", mos6551_device, read, write, 0xff00)
|
||||
AM_RANGE(0x380000, 0x380001) AM_WRITE8(diablo68k_leds_w, 0xff00) AM_READNOP
|
||||
AM_RANGE(0x3a0000, 0x3a0001) AM_WRITE8(diablo68k_lcd_data_w, 0xff00)
|
||||
AM_RANGE(0x3c0000, 0x3c0001) AM_READWRITE8(diablo68k_input2_r, diablo68k_control_w, 0xff00)
|
||||
AM_RANGE(0x3e0000, 0x3e0001) AM_READ8(diablo68k_input1_r, 0xff00)
|
||||
AM_RANGE(0xff8000, 0xffbfff) AM_RAM AM_SHARE("nvram")
|
||||
ADDRESS_MAP_END
|
||||
|
||||
|
||||
@ -200,16 +260,36 @@ INPUT_PORTS_END
|
||||
static MACHINE_CONFIG_START( diablo68k, novag68k_state )
|
||||
|
||||
/* basic machine hardware */
|
||||
MCFG_CPU_ADD("maincpu", M68000, XTAL_8MHz/2)
|
||||
MCFG_CPU_PERIODIC_INT_DRIVER(novag68k_state, irq2_line_hold, 250) // guessed
|
||||
MCFG_CPU_ADD("maincpu", M68000, XTAL_16MHz)
|
||||
MCFG_CPU_PERIODIC_INT_DRIVER(novag68k_state, irq2_line_hold, 256) // guessed
|
||||
MCFG_CPU_PROGRAM_MAP(diablo68k_map)
|
||||
|
||||
MCFG_DEVICE_ADD("acia", MOS6551, 0)
|
||||
MCFG_MOS6551_XTAL(XTAL_1_8432MHz)
|
||||
|
||||
MCFG_NVRAM_ADD_0FILL("nvram")
|
||||
|
||||
/* video hardware */
|
||||
MCFG_SCREEN_ADD("screen", LCD)
|
||||
MCFG_SCREEN_REFRESH_RATE(60) // arbitrary
|
||||
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500))
|
||||
MCFG_SCREEN_SIZE(6*16+1, 10)
|
||||
MCFG_SCREEN_VISIBLE_AREA(0, 6*16, 0, 10-1)
|
||||
MCFG_SCREEN_UPDATE_DEVICE("hd44780", hd44780_device, screen_update)
|
||||
MCFG_SCREEN_PALETTE("palette")
|
||||
MCFG_PALETTE_ADD("palette", 3)
|
||||
MCFG_PALETTE_INIT_OWNER(novagbase_state, novag_lcd)
|
||||
|
||||
MCFG_HD44780_ADD("hd44780")
|
||||
MCFG_HD44780_LCD_SIZE(2, 8)
|
||||
MCFG_HD44780_PIXEL_UPDATE_CB(novagbase_state, novag_lcd_pixel_update)
|
||||
|
||||
MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", novagbase_state, display_decay_tick, attotime::from_msec(1))
|
||||
MCFG_DEFAULT_LAYOUT(layout_novag_diablo68k)
|
||||
|
||||
/* sound hardware */
|
||||
MCFG_SPEAKER_STANDARD_MONO("mono")
|
||||
MCFG_SOUND_ADD("beeper", BEEP, 1000) // guessed
|
||||
MCFG_SOUND_ADD("beeper", BEEP, 1024) // guessed
|
||||
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25)
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
@ -223,7 +303,7 @@ ROM_START( diablo68 )
|
||||
ROM_REGION16_BE( 0x20000, "maincpu", 0 )
|
||||
ROM_LOAD16_BYTE("evenurom.bin", 0x00000, 0x8000, CRC(03477746) SHA1(8bffcb159a61e59bfc45411e319aea6501ebe2f9) )
|
||||
ROM_LOAD16_BYTE("oddlrom.bin", 0x00001, 0x8000, CRC(e182dbdd) SHA1(24dacbef2173fa737636e4729ff22ec1e6623ca5) )
|
||||
ROM_LOAD16_BYTE("book.bin", 0x10000, 0x8000, CRC(553a5c8c) SHA1(ccb5460ff10766a5ca8008ae2cffcff794318108) )
|
||||
ROM_LOAD16_BYTE("book.bin", 0x10000, 0x8000, CRC(553a5c8c) SHA1(ccb5460ff10766a5ca8008ae2cffcff794318108) ) // no odd rom
|
||||
ROM_END
|
||||
|
||||
|
||||
@ -233,4 +313,4 @@ ROM_END
|
||||
******************************************************************************/
|
||||
|
||||
/* YEAR NAME PARENT COMPAT MACHINE INPUT INIT COMPANY, FULLNAME, FLAGS */
|
||||
CONS( 1991, diablo68, 0, 0, diablo68k, diablo68k, driver_device, 0, "Novag", "Diablo 68000", MACHINE_NOT_WORKING | MACHINE_CLICKABLE_ARTWORK )
|
||||
CONS( 1991, diablo68, 0, 0, diablo68k, diablo68k, driver_device, 0, "Novag", "Diablo 68000", MACHINE_CLICKABLE_ARTWORK )
|
||||
|
@ -8,6 +8,7 @@
|
||||
|
||||
#include "emu.h"
|
||||
#include "sound/beep.h"
|
||||
#include "video/hd44780.h"
|
||||
|
||||
class novagbase_state : public driver_device
|
||||
{
|
||||
@ -16,6 +17,7 @@ public:
|
||||
: driver_device(mconfig, type, tag),
|
||||
m_maincpu(*this, "maincpu"),
|
||||
m_beeper(*this, "beeper"),
|
||||
m_lcd(*this, "hd44780"),
|
||||
m_inp_matrix(*this, "IN.%u", 0),
|
||||
m_display_wait(33),
|
||||
m_display_maxy(1),
|
||||
@ -25,6 +27,7 @@ public:
|
||||
// devices/pointers
|
||||
required_device<cpu_device> m_maincpu;
|
||||
optional_device<beep_device> m_beeper;
|
||||
optional_device<hd44780_device> m_lcd;
|
||||
optional_ioport_array<8> m_inp_matrix;
|
||||
|
||||
// misc common
|
||||
@ -51,6 +54,9 @@ public:
|
||||
void set_display_segmask(u32 digits, u32 mask);
|
||||
void display_matrix(int maxx, int maxy, u32 setx, u32 sety, bool update = true);
|
||||
|
||||
DECLARE_PALETTE_INIT(novag_lcd);
|
||||
HD44780_PIXEL_UPDATE(novag_lcd_pixel_update);
|
||||
|
||||
protected:
|
||||
virtual void machine_start() override;
|
||||
virtual void machine_reset() override;
|
||||
|
@ -329,7 +329,7 @@
|
||||
<bezel element="hl" inputtag="IN.0" inputmask="0x01"><bounds x="73" y="73" width="10" height="10" /><color alpha="0.4" /></bezel>
|
||||
|
||||
<!-- lcd panel -->
|
||||
<!--
|
||||
|
||||
<screen index="0">
|
||||
<bounds x="86.5" y="9.5" width="24.25" height="2.5" />
|
||||
</screen>
|
||||
@ -338,7 +338,7 @@
|
||||
<bezel element="static_lcd"><bounds x="86" y="11.9" width="25.25" height="1.1" /></bezel>
|
||||
<bezel element="static_lcd"><bounds x="86" y="8.5" width="0.6" height="3.5" /></bezel>
|
||||
<bezel element="static_lcd"><bounds x="110.65" y="8.5" width="0.6" height="3.5" /></bezel>
|
||||
-->
|
||||
|
||||
<!-- right side buttons -->
|
||||
|
||||
<bezel element="but" inputtag="IN.7" inputmask="0x400"><bounds x="87.75" y="24.00" width="2.5" height="2.5" /></bezel>
|
||||
|
Loading…
Reference in New Issue
Block a user