mirror of
https://github.com/holub/mame
synced 2025-04-23 00:39:36 +03:00
microvsn: use pwm device for lcd (nw)
This commit is contained in:
parent
b3a1002dd2
commit
0d5363ba2f
@ -10,7 +10,7 @@ Fidelity CSC(and derived) hardware
|
||||
- Reversi Sensory Challenger
|
||||
|
||||
TODO:
|
||||
- verify csce original roms (current set came from an overclock mod)
|
||||
- dump/add original csce
|
||||
- hook up csce I/O properly, it doesn't have PIAs
|
||||
|
||||
*******************************************************************************
|
||||
@ -663,7 +663,7 @@ void csc_state::csce(machine_config &config)
|
||||
csc(config);
|
||||
|
||||
/* basic machine hardware */
|
||||
m_maincpu->set_clock(4_MHz_XTAL);
|
||||
m_maincpu->set_clock(5_MHz_XTAL);
|
||||
m_maincpu->set_addrmap(AS_PROGRAM, &csc_state::su9_map);
|
||||
}
|
||||
|
||||
@ -718,11 +718,11 @@ void csc_state::rsc(machine_config &config)
|
||||
|
||||
ROM_START( csc )
|
||||
ROM_REGION( 0x10000, "maincpu", 0 )
|
||||
ROM_LOAD("101-64019", 0x2000, 0x2000, CRC(08a3577c) SHA1(69fe379d21a9d4b57c84c3832d7b3e7431eec341) )
|
||||
ROM_LOAD("1025a03", 0xa000, 0x2000, CRC(63982c07) SHA1(5ed4356323d5c80df216da55994abe94ba4aa94c) )
|
||||
ROM_LOAD("1025a02", 0xc000, 0x2000, CRC(9e6e7c69) SHA1(4f1ed9141b6596f4d2b1217d7a4ba48229f3f1b0) )
|
||||
ROM_LOAD("1025a01", 0xe000, 0x2000, CRC(57f068c3) SHA1(7d2ac4b9a2fba19556782863bdd89e2d2d94e97b) )
|
||||
ROM_LOAD("74s474", 0xfe00, 0x0200, CRC(4511ba31) SHA1(e275b1739f8c3aa445cccb6a2b597475f507e456) )
|
||||
ROM_LOAD("101-64019", 0x2000, 0x2000, CRC(08a3577c) SHA1(69fe379d21a9d4b57c84c3832d7b3e7431eec341) )
|
||||
ROM_LOAD("101-1025a03", 0xa000, 0x2000, CRC(63982c07) SHA1(5ed4356323d5c80df216da55994abe94ba4aa94c) )
|
||||
ROM_LOAD("101-1025a02", 0xc000, 0x2000, CRC(9e6e7c69) SHA1(4f1ed9141b6596f4d2b1217d7a4ba48229f3f1b0) )
|
||||
ROM_LOAD("101-1025a01", 0xe000, 0x2000, CRC(57f068c3) SHA1(7d2ac4b9a2fba19556782863bdd89e2d2d94e97b) )
|
||||
ROM_LOAD("74s474", 0xfe00, 0x0200, CRC(4511ba31) SHA1(e275b1739f8c3aa445cccb6a2b597475f507e456) )
|
||||
|
||||
// speech ROM
|
||||
ROM_DEFAULT_BIOS("en")
|
||||
@ -822,7 +822,7 @@ ROM_END
|
||||
|
||||
// YEAR NAME PARENT CMP MACHINE INPUT STATE INIT COMPANY, FULLNAME, FLAGS
|
||||
CONS( 1981, csc, 0, 0, csc, csc, csc_state, empty_init, "Fidelity Electronics", "Champion Sensory Chess Challenger", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
|
||||
CONS( 1981, csce, 0, 0, csce, csc, csc_state, empty_init, "Fidelity Electronics", "Elite Champion Challenger", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
|
||||
CONS( 1981, csce, 0, 0, csce, csc, csc_state, empty_init, "Fidelity Electronics", "Elite Champion Challenger (Travemuende version)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
|
||||
|
||||
CONS( 1983, super9cc, 0, 0, su9, su9, su9_state, empty_init, "Fidelity Electronics", "Super 9 Sensory Chess Challenger", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
|
||||
|
||||
|
@ -36,14 +36,13 @@ TODO:
|
||||
#include "sound/dac.h"
|
||||
#include "sound/volt_reg.h"
|
||||
#include "video/hlcd0488.h"
|
||||
#include "video/pwm.h"
|
||||
|
||||
#include "emupal.h"
|
||||
#include "softlist.h"
|
||||
#include "screen.h"
|
||||
#include "speaker.h"
|
||||
|
||||
#include <algorithm>
|
||||
|
||||
//#define VERBOSE 1
|
||||
#include "logmacro.h"
|
||||
|
||||
@ -57,6 +56,7 @@ public:
|
||||
m_i8021( *this, "i8021_cpu" ),
|
||||
m_tms1100( *this, "tms1100_cpu" ),
|
||||
m_lcd(*this, "lcd"),
|
||||
m_lcd_pwm(*this, "lcd_pwm"),
|
||||
m_cart(*this, "cartslot"),
|
||||
m_inputs(*this, "COL%u", 0),
|
||||
m_paddle(*this, "PADDLE"),
|
||||
@ -76,11 +76,8 @@ protected:
|
||||
virtual void machine_reset() override;
|
||||
|
||||
private:
|
||||
uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
|
||||
uint32_t screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
|
||||
|
||||
void microvision_palette(palette_device &palette) const;
|
||||
|
||||
DECLARE_WRITE_LINE_MEMBER(screen_vblank);
|
||||
DECLARE_DEVICE_IMAGE_LOAD_MEMBER(cart_load);
|
||||
|
||||
// i8021 interface
|
||||
@ -100,6 +97,7 @@ private:
|
||||
optional_device<i8021_device> m_i8021;
|
||||
optional_device<tms1100_cpu_device> m_tms1100;
|
||||
required_device<hlcd0488_device> m_lcd;
|
||||
required_device<pwm_display_device> m_lcd_pwm;
|
||||
required_device<generic_slot_device> m_cart;
|
||||
required_ioport_array<3> m_inputs;
|
||||
required_ioport m_paddle;
|
||||
@ -119,7 +117,6 @@ private:
|
||||
uint16_t m_o;
|
||||
|
||||
// generic variables
|
||||
void update_lcd();
|
||||
DECLARE_WRITE16_MEMBER(lcd_output_w);
|
||||
|
||||
void apply_settings(void);
|
||||
@ -129,34 +126,9 @@ private:
|
||||
u16 m_button_mask;
|
||||
bool m_paddle_auto;
|
||||
bool m_paddle_on;
|
||||
|
||||
uint8_t m_lcd_data[16][16];
|
||||
u16 m_lcd_row;
|
||||
u16 m_lcd_col;
|
||||
};
|
||||
|
||||
|
||||
void microvision_state::microvision_palette(palette_device &palette) const
|
||||
{
|
||||
palette.set_pen_color( 15, 0x00, 0x00, 0x00 );
|
||||
palette.set_pen_color( 14, 0x11, 0x11, 0x11 );
|
||||
palette.set_pen_color( 13, 0x22, 0x22, 0x22 );
|
||||
palette.set_pen_color( 12, 0x33, 0x33, 0x33 );
|
||||
palette.set_pen_color( 11, 0x44, 0x44, 0x44 );
|
||||
palette.set_pen_color( 10, 0x55, 0x55, 0x55 );
|
||||
palette.set_pen_color( 9, 0x66, 0x66, 0x66 );
|
||||
palette.set_pen_color( 8, 0x77, 0x77, 0x77 );
|
||||
palette.set_pen_color( 7, 0x88, 0x88, 0x88 );
|
||||
palette.set_pen_color( 6, 0x99, 0x99, 0x99 );
|
||||
palette.set_pen_color( 5, 0xaa, 0xaa, 0xaa );
|
||||
palette.set_pen_color( 4, 0xbb, 0xbb, 0xbb );
|
||||
palette.set_pen_color( 3, 0xcc, 0xcc, 0xcc );
|
||||
palette.set_pen_color( 2, 0xdd, 0xdd, 0xdd );
|
||||
palette.set_pen_color( 1, 0xee, 0xee, 0xee );
|
||||
palette.set_pen_color( 0, 0xff, 0xff, 0xff );
|
||||
}
|
||||
|
||||
|
||||
void microvision_state::machine_start()
|
||||
{
|
||||
m_paddle_timer = timer_alloc(TIMER_PADDLE);
|
||||
@ -174,9 +146,6 @@ void microvision_state::machine_reset()
|
||||
{
|
||||
apply_settings();
|
||||
|
||||
for (auto &elem : m_lcd_data)
|
||||
std::fill(std::begin(elem), std::end(elem), 0);
|
||||
|
||||
m_o = 0;
|
||||
m_r = 0;
|
||||
m_p0 = 0;
|
||||
@ -187,36 +156,18 @@ void microvision_state::machine_reset()
|
||||
}
|
||||
|
||||
|
||||
void microvision_state::update_lcd()
|
||||
|
||||
uint32_t microvision_state::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
|
||||
{
|
||||
uint16_t row = m_lcd_row;
|
||||
uint16_t col = m_lcd_col;
|
||||
|
||||
LOG( "row = %04x, col = %04x\n", row, col );
|
||||
for ( int i = 0; i < 16; i++ )
|
||||
for (int y = 0; y < 16; y++)
|
||||
{
|
||||
uint16_t temp = row;
|
||||
|
||||
for (auto & elem : m_lcd_data)
|
||||
for (int x = 0; x < 16; x++)
|
||||
{
|
||||
if ( ( temp & col ) & 0x8000 )
|
||||
{
|
||||
elem[i] = 15;
|
||||
}
|
||||
temp <<= 1;
|
||||
}
|
||||
col <<= 1;
|
||||
}
|
||||
}
|
||||
// simulate LCD persistence
|
||||
int p = m_lcd_pwm->read_element_bri(y ^ 15, x ^ 15) * 25000;
|
||||
p = (p > 255) ? 0 : p ^ 255;
|
||||
|
||||
|
||||
uint32_t microvision_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
|
||||
{
|
||||
for ( uint8_t i = 0; i < 16; i++ )
|
||||
{
|
||||
for ( uint8_t j = 0; j < 16; j++ )
|
||||
{
|
||||
bitmap.pix16(i,j) = m_lcd_data [i] [j];
|
||||
bitmap.pix32(y, x) = p << 16 | p << 8 | p;
|
||||
}
|
||||
}
|
||||
|
||||
@ -224,29 +175,10 @@ uint32_t microvision_state::screen_update(screen_device &screen, bitmap_ind16 &b
|
||||
}
|
||||
|
||||
|
||||
WRITE_LINE_MEMBER(microvision_state::screen_vblank)
|
||||
{
|
||||
if ( state )
|
||||
{
|
||||
for (auto & elem : m_lcd_data)
|
||||
{
|
||||
for ( int j= 0; j < 16; j++ )
|
||||
{
|
||||
if ( elem[j] )
|
||||
{
|
||||
elem[j]--;
|
||||
}
|
||||
}
|
||||
}
|
||||
update_lcd();
|
||||
}
|
||||
}
|
||||
|
||||
WRITE16_MEMBER( microvision_state::lcd_output_w )
|
||||
{
|
||||
m_lcd_row = offset;
|
||||
m_lcd_col = data;
|
||||
update_lcd();
|
||||
m_lcd_pwm->matrix(offset, data);
|
||||
}
|
||||
|
||||
|
||||
@ -604,16 +536,14 @@ void microvision_state::microvision(machine_config &config)
|
||||
HLCD0488(config, m_lcd);
|
||||
m_lcd->write_cols().set(FUNC(microvision_state::lcd_output_w));
|
||||
|
||||
PWM_DISPLAY(config, m_lcd_pwm).set_size(16, 16);
|
||||
|
||||
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_LCD));
|
||||
screen.set_refresh_hz(60);
|
||||
screen.set_vblank_time(0);
|
||||
screen.set_screen_update(FUNC(microvision_state::screen_update));
|
||||
screen.screen_vblank().set(FUNC(microvision_state::screen_vblank));
|
||||
screen.set_size(16, 16);
|
||||
screen.set_visarea_full();
|
||||
screen.set_palette("palette");
|
||||
|
||||
PALETTE(config, "palette", FUNC(microvision_state::microvision_palette), 16);
|
||||
|
||||
/* sound hardware */
|
||||
SPEAKER(config, "speaker").front_center();
|
||||
|
Loading…
Reference in New Issue
Block a user