mirror of
https://github.com/holub/mame
synced 2025-04-24 17:30:55 +03:00
novag6502: hooked up hlcd0538 to cforte (nw)
This commit is contained in:
parent
99be1d93b8
commit
d166c9712c
@ -94,6 +94,9 @@ public:
|
||||
DECLARE_READ8_MEMBER(supercon_input2_r);
|
||||
|
||||
// Constellation Forte
|
||||
void cforte_prepare_display();
|
||||
DECLARE_WRITE64_MEMBER(cforte_lcd_output_w);
|
||||
DECLARE_WRITE8_MEMBER(cforte_mux_w);
|
||||
DECLARE_WRITE8_MEMBER(cforte_control_w);
|
||||
|
||||
// Super Expert
|
||||
@ -339,22 +342,63 @@ READ8_MEMBER(novag6502_state::supercon_input2_r)
|
||||
Constellation Forte
|
||||
******************************************************************************/
|
||||
|
||||
// TTL
|
||||
// TTL/generic
|
||||
|
||||
void novag6502_state::cforte_prepare_display()
|
||||
{
|
||||
// 3 led rows
|
||||
display_matrix(8, 3, m_led_data, m_led_select, false);
|
||||
|
||||
// lcd panel (mostly handled in cforte_lcd_output_w)
|
||||
set_display_segmask(0x3ff0, 0xff);
|
||||
set_display_size(8, 3+13);
|
||||
display_update();
|
||||
}
|
||||
|
||||
WRITE64_MEMBER(novag6502_state::cforte_lcd_output_w)
|
||||
{
|
||||
// 4 rows used
|
||||
u32 rowdata[4];
|
||||
for (int i = 0; i < 4; i++)
|
||||
rowdata[i] = (data >> i & 1) ? u32(data >> 8) : 0;
|
||||
|
||||
// 2 segments per row
|
||||
for (int dig = 0; dig < 13; dig++)
|
||||
{
|
||||
m_display_state[dig+3] = 0;
|
||||
for (int i = 0; i < 4; i++)
|
||||
m_display_state[dig+3] |= ((rowdata[i] >> (2*dig) & 3) << (2*i));
|
||||
|
||||
m_display_state[dig+3] = BITSWAP8(m_display_state[dig+3],7,2,0,4,6,5,3,1);
|
||||
}
|
||||
|
||||
cforte_prepare_display();
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(novag6502_state::cforte_mux_w)
|
||||
{
|
||||
// d0-d7: input mux, led data
|
||||
m_inp_mux = m_led_data = data;
|
||||
cforte_prepare_display();
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(novag6502_state::cforte_control_w)
|
||||
{
|
||||
// d0: lcd data
|
||||
// d1: lcd clk
|
||||
// d1: lcd clock
|
||||
// d2: lcd interrupt
|
||||
m_hlcd0538->write_data(data & 1);
|
||||
m_hlcd0538->write_clk(data >> 1 & 1);
|
||||
m_hlcd0538->write_int(data >> 2 & 1);
|
||||
|
||||
// d3: unused?
|
||||
m_lcd_control = data;
|
||||
|
||||
// here's a hacky workaround for now
|
||||
for (int i = 0; i < 10; i++)
|
||||
output().set_digit_value(i, BITSWAP8(m_nvram[i + 0xc2d],3,5,4,6,7,2,1,0));
|
||||
|
||||
// other: same as supercon
|
||||
supercon_control_w(space, offset, data);
|
||||
|
||||
// d4-d6: select led row
|
||||
m_led_select = data >> 4 & 7;
|
||||
cforte_prepare_display();
|
||||
|
||||
// d7: enable beeper
|
||||
m_beeper->set_state(data >> 7 & 1);
|
||||
}
|
||||
|
||||
|
||||
@ -485,6 +529,7 @@ static ADDRESS_MAP_START( supercon_map, AS_PROGRAM, 8, novag6502_state )
|
||||
ADDRESS_MAP_END
|
||||
|
||||
static ADDRESS_MAP_START( cforte_map, AS_PROGRAM, 8, novag6502_state )
|
||||
AM_RANGE(0x1e00, 0x1e00) AM_READWRITE(supercon_input2_r, cforte_mux_w)
|
||||
AM_RANGE(0x1f00, 0x1f00) AM_READWRITE(supercon_input1_r, cforte_control_w)
|
||||
AM_IMPORT_FROM( supercon_map )
|
||||
ADDRESS_MAP_END
|
||||
@ -853,6 +898,10 @@ static MACHINE_CONFIG_START( cforte, novag6502_state )
|
||||
|
||||
MCFG_NVRAM_ADD_1FILL("nvram")
|
||||
|
||||
/* video hardware */
|
||||
MCFG_DEVICE_ADD("hlcd0538", HLCD0538, 0)
|
||||
MCFG_HLCD0538_WRITE_COLS_CB(WRITE64(novag6502_state, cforte_lcd_output_w))
|
||||
|
||||
MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", novagbase_state, display_decay_tick, attotime::from_msec(1))
|
||||
MCFG_DEFAULT_LAYOUT(layout_novag_cforte)
|
||||
|
||||
|
@ -17,7 +17,6 @@ public:
|
||||
m_maincpu(*this, "maincpu"),
|
||||
m_beeper(*this, "beeper"),
|
||||
m_lcd(*this, "hd44780"),
|
||||
m_nvram(*this, "nvram"),
|
||||
m_inp_matrix(*this, "IN.%u", 0),
|
||||
m_display_wait(33),
|
||||
m_display_maxy(1),
|
||||
@ -28,7 +27,6 @@ public:
|
||||
required_device<cpu_device> m_maincpu;
|
||||
optional_device<beep_device> m_beeper;
|
||||
optional_device<hd44780_device> m_lcd;
|
||||
optional_shared_ptr<uint8_t> m_nvram;
|
||||
optional_ioport_array<8> m_inp_matrix; // max 8
|
||||
|
||||
// misc common
|
||||
|
@ -10,6 +10,14 @@
|
||||
<element name="digit" defstate="0">
|
||||
<led7seg><color red="1.0" green="1.0" blue="1.0" /></led7seg>
|
||||
</element>
|
||||
<element name="seg_m" defstate="0">
|
||||
<text state="1" string="M"><color red="1.0" green="1.0" blue="1.0" /></text>
|
||||
<text state="0" string="M"><color red="0.12" green="0.12" blue="0.12" /></text>
|
||||
</element>
|
||||
<element name="seg_ap" defstate="0">
|
||||
<text state="1" string="'"><color red="1.0" green="1.0" blue="1.0" /></text>
|
||||
<text state="0" string="'"><color red="0.12" green="0.12" blue="0.12" /></text>
|
||||
</element>
|
||||
|
||||
<element name="ledr" defstate="0">
|
||||
<rect state="1"><color red="1.0" green="0.1" blue="0.15" /></rect>
|
||||
@ -161,7 +169,7 @@
|
||||
<!-- build screen -->
|
||||
|
||||
<view name="Internal Layout">
|
||||
<bounds left="-3" right="110" top="-2" bottom="89" />
|
||||
<bounds left="-3" right="111" top="-2" bottom="89" />
|
||||
|
||||
<!-- chessboard coords -->
|
||||
|
||||
@ -324,16 +332,19 @@
|
||||
|
||||
<!-- right side lcd panel/leds -->
|
||||
|
||||
<bezel name="digit0" element="digit"><bounds x="87.125" y="9" width="2" height="3" /></bezel>
|
||||
<bezel name="digit1" element="digit"><bounds x="89.125" y="9" width="2" height="3" /></bezel>
|
||||
<bezel name="digit2" element="digit"><bounds x="91.125" y="9" width="2" height="3" /></bezel>
|
||||
<bezel name="digit3" element="digit"><bounds x="93.125" y="9" width="2" height="3" /></bezel>
|
||||
<bezel name="digit4" element="digit"><bounds x="95.125" y="9" width="2" height="3" /></bezel>
|
||||
<bezel name="digit5" element="digit"><bounds x="97.125" y="9" width="2" height="3" /></bezel>
|
||||
<bezel name="digit6" element="digit"><bounds x="99.125" y="9" width="2" height="3" /></bezel>
|
||||
<bezel name="digit7" element="digit"><bounds x="101.125" y="9" width="2" height="3" /></bezel>
|
||||
<bezel name="digit8" element="digit"><bounds x="103.125" y="9" width="2" height="3" /></bezel>
|
||||
<bezel name="digit9" element="digit"><bounds x="105.125" y="9" width="2" height="3" /></bezel>
|
||||
<bezel name="digit4" element="digit"><bounds x="88.125" y="9" width="2" height="3" /></bezel>
|
||||
<bezel name="digit5" element="digit"><bounds x="90.125" y="9" width="2" height="3" /></bezel>
|
||||
<bezel name="digit6" element="digit"><bounds x="92.125" y="9" width="2" height="3" /></bezel>
|
||||
<bezel name="digit7" element="digit"><bounds x="94.125" y="9" width="2" height="3" /></bezel>
|
||||
<bezel name="digit8" element="digit"><bounds x="96.125" y="9" width="2" height="3" /></bezel>
|
||||
<bezel name="digit9" element="digit"><bounds x="98.125" y="9" width="2" height="3" /></bezel>
|
||||
<bezel name="digit10" element="digit"><bounds x="100.125" y="9" width="2" height="3" /></bezel>
|
||||
<bezel name="digit11" element="digit"><bounds x="102.125" y="9" width="2" height="3" /></bezel>
|
||||
<bezel name="digit12" element="digit"><bounds x="104.125" y="9" width="2" height="3" /></bezel>
|
||||
<bezel name="digit13" element="digit"><bounds x="106.125" y="9" width="2" height="3" /></bezel>
|
||||
|
||||
<bezel name="3.6" element="seg_m"><bounds x="86" y="8.75" width="2" height="1.5" /></bezel>
|
||||
<bezel name="14.0" element="seg_ap"><bounds x="97.75" y="8.25" width="1" height="1.5" /></bezel>
|
||||
|
||||
<bezel element="text_l7"><bounds x="87" y="68.64" width="14" height="1.4" /></bezel>
|
||||
<bezel element="text_l8"><bounds x="87" y="76.35" width="14" height="1.4" /></bezel>
|
||||
|
Loading…
Reference in New Issue
Block a user