diff options
author | hap <happppp@users.noreply.github.com> | 2017-01-18 21:51:27 +0100 |
---|---|---|
committer | hap <happppp@users.noreply.github.com> | 2017-01-18 21:51:46 +0100 |
commit | c69c1440133e5bcfbe8d9aed3ec1ce23ed8a5a44 (patch) | |
tree | 42bd45d2dc36a24069d2cf43f34864784bd3ee7c /src/mame/drivers/novag68k.cpp | |
parent | 446532b332e7c41d9c8d51d77041e82302b7eb0e (diff) |
Machine promoted to working
------------
Novag Diablo 68000 [hap]
Diffstat (limited to 'src/mame/drivers/novag68k.cpp')
-rw-r--r-- | src/mame/drivers/novag68k.cpp | 102 |
1 files changed, 91 insertions, 11 deletions
diff --git a/src/mame/drivers/novag68k.cpp b/src/mame/drivers/novag68k.cpp index e76b6e79863..7319344d262 100644 --- a/src/mame/drivers/novag68k.cpp +++ b/src/mame/drivers/novag68k.cpp @@ -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 ) |