mirror of
https://github.com/holub/mame
synced 2025-04-20 15:32:45 +03:00
(MESS) gl3000s: added LCD and keyboard emulation. [Sandro Ronco]
This commit is contained in:
parent
76aa042a3a
commit
4c6c27ec0d
2
.gitattributes
vendored
2
.gitattributes
vendored
@ -2678,6 +2678,8 @@ src/emu/video/saa5050.c svneol=native#text/plain
|
||||
src/emu/video/saa5050.h svneol=native#text/plain
|
||||
src/emu/video/sed1330.c svneol=native#text/plain
|
||||
src/emu/video/sed1330.h svneol=native#text/plain
|
||||
src/emu/video/sed1520.c svneol=native#text/plain
|
||||
src/emu/video/sed1520.h svneol=native#text/plain
|
||||
src/emu/video/stvvdp1.c svneol=native#text/plain
|
||||
src/emu/video/stvvdp2.c svneol=native#text/plain
|
||||
src/emu/video/tlc34076.c svneol=native#text/plain
|
||||
|
164
src/emu/video/sed1520.c
Normal file
164
src/emu/video/sed1520.c
Normal file
@ -0,0 +1,164 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders:Sandro Ronco
|
||||
/***************************************************************************
|
||||
|
||||
SED1520 LCD controller
|
||||
|
||||
TODO:
|
||||
- busy flag
|
||||
|
||||
***************************************************************************/
|
||||
|
||||
#include "emu.h"
|
||||
#include "video/sed1520.h"
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
// DEVICE DEFINITIONS
|
||||
//**************************************************************************
|
||||
|
||||
const device_type SED1520 = &device_creator<sed1520_device>;
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
// live device
|
||||
//**************************************************************************
|
||||
|
||||
//-------------------------------------------------
|
||||
// sed1520_device - constructor
|
||||
//-------------------------------------------------
|
||||
|
||||
sed1520_device::sed1520_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) :
|
||||
device_t(mconfig, SED1520, "SED1520", tag, owner, clock, "sed1520", __FILE__),
|
||||
m_screen_update_func(NULL)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// device_start - device-specific startup
|
||||
//-------------------------------------------------
|
||||
|
||||
void sed1520_device::device_start()
|
||||
{
|
||||
// state saving
|
||||
save_item(NAME(m_lcd_on));
|
||||
save_item(NAME(m_busy));
|
||||
save_item(NAME(m_page));
|
||||
save_item(NAME(m_column));
|
||||
save_item(NAME(m_old_column));
|
||||
save_item(NAME(m_start_line));
|
||||
save_item(NAME(m_adc));
|
||||
save_item(NAME(m_static_drive));
|
||||
save_item(NAME(m_modify_write));
|
||||
save_item(NAME(m_vram));
|
||||
}
|
||||
|
||||
//-------------------------------------------------
|
||||
// device_reset - device-specific reset
|
||||
//-------------------------------------------------
|
||||
|
||||
void sed1520_device::device_reset()
|
||||
{
|
||||
m_lcd_on = 0;
|
||||
m_busy = 0;
|
||||
m_page = 3;
|
||||
m_column = 0;
|
||||
m_old_column = 0;
|
||||
m_start_line = 0;
|
||||
m_adc = 1;
|
||||
m_static_drive = 0;
|
||||
m_modify_write = false;
|
||||
memset(m_vram, 0x00, sizeof(m_vram));
|
||||
}
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
// device interface
|
||||
//**************************************************************************
|
||||
|
||||
UINT32 sed1520_device::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
|
||||
{
|
||||
if (m_lcd_on)
|
||||
{
|
||||
if (m_screen_update_func)
|
||||
m_screen_update_func(*this, bitmap, cliprect, m_vram, m_start_line, m_adc);
|
||||
}
|
||||
else if (m_static_drive)
|
||||
return UPDATE_HAS_NOT_CHANGED;
|
||||
else
|
||||
bitmap.fill(0, cliprect);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
READ8_MEMBER(sed1520_device::read)
|
||||
{
|
||||
if (offset & 0x01)
|
||||
return data_read(space, 0);
|
||||
else
|
||||
return status_read(space, 0);
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(sed1520_device::write)
|
||||
{
|
||||
if (offset & 0x01)
|
||||
data_write(space, 0, data);
|
||||
else
|
||||
control_write(space, 0, data);
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(sed1520_device::control_write)
|
||||
{
|
||||
if((data & 0xfe) == 0xae) // display on/off
|
||||
m_lcd_on = data & 0x01;
|
||||
else if((data & 0xe0) == 0xc0) // set start line
|
||||
m_start_line = data & 0x1f;
|
||||
else if((data & 0xfc) == 0xb8) // set page address
|
||||
m_page = data & 0x03;
|
||||
else if((data & 0x80) == 0x00) // set column address
|
||||
m_column = data % 80;
|
||||
else if((data & 0xfe) == 0xa0) // select ADC
|
||||
m_adc = data & 0x01;
|
||||
else if((data & 0xfe) == 0xa4) // static drive on/off
|
||||
m_static_drive = data & 0x01;
|
||||
else if((data & 0xfe) == 0xa8) // select duty
|
||||
;
|
||||
else if(data == 0xe0) // read-modify-write on
|
||||
{
|
||||
m_modify_write = true;
|
||||
m_old_column = m_column;
|
||||
}
|
||||
else if(data == 0xee) // read-modify-write off
|
||||
{
|
||||
m_modify_write = false;
|
||||
m_column = m_old_column;
|
||||
}
|
||||
else if(data == 0xe2) // reset
|
||||
{
|
||||
m_start_line = m_column = 0;
|
||||
m_page = 3;
|
||||
}
|
||||
else
|
||||
logerror("%s: invalid SED1520 command: %x\n", tag(), data);
|
||||
}
|
||||
|
||||
READ8_MEMBER(sed1520_device::status_read)
|
||||
{
|
||||
UINT8 data = (m_busy << 7) | (m_adc << 6) | (m_lcd_on << 5);
|
||||
return data;
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(sed1520_device::data_write)
|
||||
{
|
||||
m_vram[(m_page * 80 + m_column) % sizeof(m_vram)] = data;
|
||||
m_column = (m_column + 1) % 80;
|
||||
}
|
||||
|
||||
READ8_MEMBER(sed1520_device::data_read)
|
||||
{
|
||||
UINT8 data = m_vram[(m_page * 80 + m_column) % sizeof(m_vram)];
|
||||
if (!m_modify_write)
|
||||
m_column = (m_column + 1) % 80;
|
||||
return data;
|
||||
}
|
72
src/emu/video/sed1520.h
Normal file
72
src/emu/video/sed1520.h
Normal file
@ -0,0 +1,72 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders:Sandro Ronco
|
||||
/***************************************************************************
|
||||
|
||||
SED1520 LCD controller
|
||||
|
||||
***************************************************************************/
|
||||
|
||||
#pragma once
|
||||
|
||||
#ifndef __SED1520_H__
|
||||
#define __SED1520_H__
|
||||
|
||||
|
||||
#define MCFG_SED1520_ADD( _tag, _cb ) \
|
||||
MCFG_DEVICE_ADD( _tag, SED1520, 0 ) \
|
||||
sed1520_device::static_set_screen_update_cb(*device, _cb);
|
||||
|
||||
//**************************************************************************
|
||||
// TYPE DEFINITIONS
|
||||
//**************************************************************************
|
||||
|
||||
typedef UINT32 (*sed1520_screen_update_func)(device_t &device, bitmap_ind16 &bitmap, const rectangle &cliprect, UINT8 *vram, int start_line, int adc);
|
||||
#define SED1520_UPDATE_CB(name) UINT32 name(device_t &device, bitmap_ind16 &bitmap, const rectangle &cliprect, UINT8 *vram, int start_line, int adc)
|
||||
|
||||
|
||||
// ======================> sed1520_device
|
||||
|
||||
class sed1520_device : public device_t
|
||||
{
|
||||
public:
|
||||
// construction/destruction
|
||||
sed1520_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
|
||||
|
||||
// static configuration helpers
|
||||
static void static_set_screen_update_cb(device_t &device, sed1520_screen_update_func _cb) { downcast<sed1520_device &>(device).m_screen_update_func = _cb; }
|
||||
|
||||
// device interface
|
||||
virtual DECLARE_WRITE8_MEMBER(write);
|
||||
virtual DECLARE_READ8_MEMBER(read);
|
||||
virtual DECLARE_WRITE8_MEMBER(control_write);
|
||||
virtual DECLARE_READ8_MEMBER(status_read);
|
||||
virtual DECLARE_WRITE8_MEMBER(data_write);
|
||||
virtual DECLARE_READ8_MEMBER(data_read);
|
||||
UINT32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
|
||||
|
||||
protected:
|
||||
// device-level overrides
|
||||
virtual void device_start();
|
||||
virtual void device_reset();
|
||||
|
||||
private:
|
||||
// internal state
|
||||
UINT8 m_lcd_on;
|
||||
UINT8 m_busy;
|
||||
UINT8 m_page;
|
||||
UINT8 m_column;
|
||||
UINT8 m_old_column;
|
||||
UINT8 m_start_line;
|
||||
UINT8 m_adc;
|
||||
UINT8 m_static_drive;
|
||||
bool m_modify_write;
|
||||
sed1520_screen_update_func m_screen_update_func;
|
||||
|
||||
UINT8 m_vram[0x140];
|
||||
};
|
||||
|
||||
|
||||
// device type definition
|
||||
extern const device_type SED1520;
|
||||
|
||||
#endif
|
@ -399,6 +399,14 @@ ifneq ($(filter SED1330,$(VIDEOS)),)
|
||||
VIDEOOBJS+= $(VIDEOOBJ)/sed1330.o
|
||||
endif
|
||||
|
||||
#-------------------------------------------------
|
||||
#
|
||||
#@src/emu/video/sed1520.h,VIDEOS += SED1520
|
||||
#-------------------------------------------------
|
||||
ifneq ($(filter SED1520,$(VIDEOS)),)
|
||||
VIDEOOBJS+= $(VIDEOOBJ)/sed1520.o
|
||||
endif
|
||||
|
||||
#-------------------------------------------------
|
||||
#
|
||||
#@src/emu/video/stvvdp1.h,VIDEOS += STVVDP
|
||||
|
@ -17,6 +17,7 @@
|
||||
#include "emu.h"
|
||||
#include "cpu/z80/z80.h"
|
||||
#include "video/hd44780.h"
|
||||
#include "video/sed1520.h"
|
||||
#include "sound/beep.h"
|
||||
#include "imagedev/cartslot.h"
|
||||
#include "rendlay.h"
|
||||
@ -35,7 +36,7 @@ public:
|
||||
{ }
|
||||
|
||||
required_device<cpu_device> m_maincpu;
|
||||
required_device<hd44780_device> m_lcdc;
|
||||
optional_device<hd44780_device> m_lcdc;
|
||||
required_device<beep_device> m_beep;
|
||||
required_memory_bank m_bank1;
|
||||
optional_memory_bank m_bank2;
|
||||
@ -56,6 +57,21 @@ public:
|
||||
virtual void palette_init();
|
||||
};
|
||||
|
||||
class gl3000s_state : public pc2000_state
|
||||
{
|
||||
public:
|
||||
gl3000s_state(const machine_config &mconfig, device_type type, const char *tag)
|
||||
: pc2000_state(mconfig, type, tag),
|
||||
m_lcdc_r(*this, "sed1520_r"),
|
||||
m_lcdc_l(*this, "sed1520_l")
|
||||
{ }
|
||||
|
||||
required_device<sed1520_device> m_lcdc_r;
|
||||
required_device<sed1520_device> m_lcdc_l;
|
||||
|
||||
UINT32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
|
||||
};
|
||||
|
||||
class pc1000_state : public pc2000_state
|
||||
{
|
||||
public:
|
||||
@ -106,13 +122,9 @@ WRITE8_MEMBER( pc2000_state::rombank1_w )
|
||||
WRITE8_MEMBER( pc2000_state::rombank2_w )
|
||||
{
|
||||
if (data & 0x80)
|
||||
{
|
||||
m_bank2->set_entry(data & 0x8f); //cartridge
|
||||
}
|
||||
else
|
||||
{
|
||||
m_bank2->set_entry(data & 0x0f);
|
||||
}
|
||||
}
|
||||
|
||||
READ8_MEMBER( pc2000_state::beep_r )
|
||||
@ -144,6 +156,58 @@ static ADDRESS_MAP_START( pc2000_io , AS_IO, 8, pc2000_state)
|
||||
AM_RANGE(0x12, 0x12) AM_READWRITE(beep_r, beep_w)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
|
||||
UINT32 gl3000s_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
|
||||
{
|
||||
m_lcdc_l->screen_update(screen, bitmap, cliprect);
|
||||
m_lcdc_r->screen_update(screen, bitmap, cliprect);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int gl3000s_sed1520_screen_update(device_t &device, bitmap_ind16 &bitmap, const rectangle &cliprect, UINT8 *vram, int start_line, int adc, int start_x)
|
||||
{
|
||||
for (int y=0; y<2; y++)
|
||||
{
|
||||
int row_pos = 0;
|
||||
for (int x=0; x<61; x++)
|
||||
{
|
||||
int addr = (y + (start_line >> 3)) * 80 + row_pos;
|
||||
for (int yi=0; yi<8; yi++)
|
||||
{
|
||||
int px = start_x - (adc ? (80 - x) : x);
|
||||
int py = y*8 + yi;
|
||||
|
||||
if (cliprect.contains(px, py))
|
||||
bitmap.pix16(py, px) = (vram[addr % 0x140] >> yi) & 1;
|
||||
}
|
||||
|
||||
row_pos++;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
SED1520_UPDATE_CB(gl3000s_screen_update_right)
|
||||
{
|
||||
return gl3000s_sed1520_screen_update(device, bitmap, cliprect, vram, start_line, adc, 119);
|
||||
}
|
||||
|
||||
SED1520_UPDATE_CB(gl3000s_screen_update_left)
|
||||
{
|
||||
return gl3000s_sed1520_screen_update(device, bitmap, cliprect, vram, start_line, adc, 58);
|
||||
}
|
||||
|
||||
|
||||
static ADDRESS_MAP_START( gl3000s_io , AS_IO, 8, gl3000s_state)
|
||||
ADDRESS_MAP_UNMAP_HIGH
|
||||
ADDRESS_MAP_GLOBAL_MASK(0xff)
|
||||
AM_RANGE(0x01, 0x01) AM_WRITE(rombank1_w)
|
||||
AM_RANGE(0x03, 0x03) AM_WRITE(rombank2_w)
|
||||
AM_RANGE(0x08, 0x09) AM_DEVREADWRITE("sed1520_r", sed1520_device, read, write)
|
||||
AM_RANGE(0x0a, 0x0b) AM_DEVREADWRITE("sed1520_l", sed1520_device, read, write)
|
||||
AM_RANGE(0x10, 0x11) AM_READWRITE(key_matrix_r, key_matrix_w)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
READ8_MEMBER( pc1000_state::kb_r )
|
||||
{
|
||||
static const char *const bitnames[9] =
|
||||
@ -458,6 +522,145 @@ static INPUT_PORTS_START( pc1000 )
|
||||
PORT_BIT(0xfc, IP_ACTIVE_LOW, IPT_UNUSED)
|
||||
INPUT_PORTS_END
|
||||
|
||||
static INPUT_PORTS_START( gl3000s )
|
||||
PORT_START("IN0")
|
||||
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_1) PORT_CHAR('1')
|
||||
PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_ESC)
|
||||
PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_E) PORT_CHAR('E')
|
||||
PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_CAPSLOCK)
|
||||
PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD)
|
||||
PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Einstellen Antwort")
|
||||
PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_RIGHT)
|
||||
PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_LSHIFT) PORT_CODE(KEYCODE_RSHIFT)
|
||||
|
||||
PORT_START("IN1")
|
||||
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_2) PORT_CHAR('2')
|
||||
PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_Q) PORT_CHAR('Q')
|
||||
PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_R) PORT_CHAR('R')
|
||||
PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_A) PORT_CHAR('A')
|
||||
PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_X) PORT_CHAR('X')
|
||||
PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Hilfe")
|
||||
PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_SPACE) PORT_CHAR(' ')
|
||||
PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_M) PORT_CHAR('M')
|
||||
|
||||
PORT_START("IN2")
|
||||
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_3) PORT_CHAR('3')
|
||||
PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_W) PORT_CHAR('W')
|
||||
PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_T) PORT_CHAR('T')
|
||||
PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_S) PORT_CHAR('S')
|
||||
PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_Y) PORT_CHAR('Y')
|
||||
PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Druck Symbol")
|
||||
PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_LEFT)
|
||||
PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_MINUS) PORT_CHAR('-')
|
||||
|
||||
PORT_START("IN3")
|
||||
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_4) PORT_CHAR('4')
|
||||
PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD)
|
||||
PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_Z) PORT_CHAR('Z')
|
||||
PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_D) PORT_CHAR('D')
|
||||
PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_K) PORT_CHAR('K')
|
||||
PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_SLASH) PORT_NAME("\xc3\x84")
|
||||
PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_DOWN)
|
||||
PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_UP)
|
||||
|
||||
PORT_START("IN4")
|
||||
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_5) PORT_CHAR('5')
|
||||
PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD)
|
||||
PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_U) PORT_CHAR('U')
|
||||
PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_F) PORT_CHAR('F')
|
||||
PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_J) PORT_CHAR('J')
|
||||
PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_C) PORT_CHAR('C')
|
||||
PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_INSERT)
|
||||
PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_N) PORT_CHAR('N')
|
||||
|
||||
PORT_START("IN5")
|
||||
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_6) PORT_CHAR('6')
|
||||
PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_EQUALS) PORT_NAME("\xc3\x9f")
|
||||
PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_P) PORT_CHAR('P')
|
||||
PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_QUOTE) PORT_CHAR('\'')
|
||||
PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_CLOSEBRACE) PORT_NAME("\xc3\x96")
|
||||
PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_BACKSPACE)
|
||||
PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD)
|
||||
PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_STOP) PORT_CHAR('.')
|
||||
|
||||
PORT_START("IN6")
|
||||
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_7) PORT_CHAR('7')
|
||||
PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_0) PORT_CHAR('0')
|
||||
PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_O) PORT_CHAR('O')
|
||||
PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_OPENBRACE) PORT_NAME("\xc3\x9c")
|
||||
PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_L) PORT_CHAR('L')
|
||||
PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_PLUS_PAD) PORT_CHAR('+')
|
||||
PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_LALT) PORT_CODE(KEYCODE_RALT)
|
||||
PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_COMMA) PORT_CHAR(',')
|
||||
|
||||
PORT_START("IN7")
|
||||
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_8) PORT_CHAR('8')
|
||||
PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_9) PORT_CHAR('9')
|
||||
PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_I) PORT_CHAR('I')
|
||||
PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_G) PORT_CHAR('G')
|
||||
PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_H) PORT_CHAR('H')
|
||||
PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_V) PORT_CHAR('V')
|
||||
PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_ENTER) PORT_CHAR(13)
|
||||
PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_B) PORT_CHAR('B')
|
||||
|
||||
PORT_START("IN8")
|
||||
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Off")
|
||||
PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("BASIC") PORT_CODE(KEYCODE_DEL_PAD)
|
||||
PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Logische Folgen")
|
||||
PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Bruch / Dezimalrechnen")
|
||||
PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Addition")
|
||||
PORT_BIT(0xe0, IP_ACTIVE_LOW, IPT_UNUSED)
|
||||
|
||||
PORT_START("IN9")
|
||||
PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Textverarbeitung") PORT_CODE(KEYCODE_ENTER_PAD)
|
||||
PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Buchstabenschl" "\xc3\xbc" "ssel")
|
||||
PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Bruch / Prozentrechnen") PORT_CODE(KEYCODE_DEL)
|
||||
PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Subtraktion") PORT_CODE(KEYCODE_HOME)
|
||||
PORT_BIT(0xe1, IP_ACTIVE_LOW, IPT_UNUSED)
|
||||
|
||||
PORT_START("INA")
|
||||
PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Taschenrechner") PORT_CODE(KEYCODE_ASTERISK)
|
||||
PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Gleitpfeile") PORT_CODE(KEYCODE_MINUS_PAD)
|
||||
PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Algebra") PORT_CODE(KEYCODE_SLASH_PAD)
|
||||
PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Multiplikation") PORT_CODE(KEYCODE_9_PAD)
|
||||
PORT_BIT(0xe1, IP_ACTIVE_LOW, IPT_UNUSED)
|
||||
|
||||
PORT_START("INB")
|
||||
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("ZusatzKassette") PORT_CODE(KEYCODE_8_PAD)
|
||||
PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Stufe") PORT_CODE(KEYCODE_7_PAD)
|
||||
PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Spieler") PORT_CODE(KEYCODE_6_PAD)
|
||||
PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Zeichensuche") PORT_CODE(KEYCODE_5_PAD)
|
||||
PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Division") PORT_CODE(KEYCODE_4_PAD)
|
||||
PORT_BIT(0xe0, IP_ACTIVE_LOW, IPT_UNUSED)
|
||||
|
||||
PORT_START("INC")
|
||||
PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Pr" "\xc3\xa4" "teritum") PORT_CODE(KEYCODE_3_PAD)
|
||||
PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Synonyme") PORT_CODE(KEYCODE_2_PAD)
|
||||
PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Tipp Dich Fit") PORT_CODE(KEYCODE_1_PAD)
|
||||
PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Super Schlau-Quiz") PORT_CODE(KEYCODE_0_PAD)
|
||||
PORT_BIT(0xe1, IP_ACTIVE_LOW, IPT_UNUSED)
|
||||
|
||||
PORT_START("IND")
|
||||
PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Silbentrennung") PORT_CODE(KEYCODE_F12)
|
||||
PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Knifflige Grammatik") PORT_CODE(KEYCODE_F11)
|
||||
PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Textaufgaben") PORT_CODE(KEYCODE_F10)
|
||||
PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Geographie-Quiz") PORT_CODE(KEYCODE_F9)
|
||||
PORT_BIT(0xe1, IP_ACTIVE_LOW, IPT_UNUSED)
|
||||
|
||||
PORT_START("INE")
|
||||
PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Wortr" "\xc3\xa4" "tsel") PORT_CODE(KEYCODE_F8)
|
||||
PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Verdrehte S" "\xc3\xa4" "tze") PORT_CODE(KEYCODE_F7)
|
||||
PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Blitz-S" "\xc3\xa4" "tze") PORT_CODE(KEYCODE_F6)
|
||||
PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Geschichte-Quiz") PORT_CODE(KEYCODE_F5)
|
||||
PORT_BIT(0xe1, IP_ACTIVE_LOW, IPT_UNUSED)
|
||||
|
||||
PORT_START("INF")
|
||||
PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Verr" "\xc3\xbc" "ckte R" "\xc3\xa4" "tsel") PORT_CODE(KEYCODE_F4)
|
||||
PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Wortarten") PORT_CODE(KEYCODE_F3)
|
||||
PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Wortschlange") PORT_CODE(KEYCODE_F2)
|
||||
PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Naturwissenschaften-Quiz") PORT_CODE(KEYCODE_F1)
|
||||
PORT_BIT(0xe1, IP_ACTIVE_LOW, IPT_UNUSED)
|
||||
INPUT_PORTS_END
|
||||
|
||||
DEVICE_IMAGE_LOAD_MEMBER(pc2000_state, cart_load)
|
||||
{
|
||||
@ -536,6 +739,9 @@ static GFXDECODE_START( pc2000 )
|
||||
GFXDECODE_ENTRY( "hd44780:cgrom", 0x0000, hd44780_charlayout, 0, 1 )
|
||||
GFXDECODE_END
|
||||
|
||||
static GFXDECODE_START( gl3000s )
|
||||
GFXDECODE_END
|
||||
|
||||
static MACHINE_CONFIG_START( pc2000, pc2000_state )
|
||||
/* basic machine hardware */
|
||||
MCFG_CPU_ADD("maincpu",Z80, XTAL_4MHz) /* probably not accurate */
|
||||
@ -591,6 +797,22 @@ static HD44780_PIXEL_UPDATE(gl4000_pixel_update)
|
||||
}
|
||||
}
|
||||
|
||||
static MACHINE_CONFIG_DERIVED_CLASS( gl3000s, pc2000, gl3000s_state )
|
||||
MCFG_CPU_MODIFY("maincpu")
|
||||
MCFG_CPU_IO_MAP(gl3000s_io)
|
||||
|
||||
MCFG_DEVICE_REMOVE("hd44780")
|
||||
MCFG_SED1520_ADD("sed1520_l", gl3000s_screen_update_left) // left panel is 59 pixels (0-58)
|
||||
MCFG_SED1520_ADD("sed1520_r", gl3000s_screen_update_right) // right panel is 61 pixels (59-119)
|
||||
|
||||
MCFG_SCREEN_MODIFY("screen")
|
||||
MCFG_SCREEN_SIZE(120, 16)
|
||||
MCFG_SCREEN_VISIBLE_AREA(0, 120-1, 0, 16-1)
|
||||
MCFG_SCREEN_UPDATE_DRIVER( gl3000s_state, screen_update )
|
||||
|
||||
MCFG_GFXDECODE(gl3000s)
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
static MACHINE_CONFIG_DERIVED( gl4000, pc2000 )
|
||||
MCFG_SCREEN_MODIFY("screen")
|
||||
MCFG_SCREEN_SIZE(120, 36) // 4x20 chars
|
||||
@ -713,7 +935,7 @@ COMP( 1988, misterx, 0, 0, misterx, pc1000, driver_device, 0, "V
|
||||
COMP( 1993, pc2000, 0, 0, pc2000, pc2000, driver_device, 0, "Video Technology", "PreComputer 2000", GAME_NOT_WORKING)
|
||||
COMP( 1993, gl2000, 0, 0, gl2000, pc2000, driver_device, 0, "Video Technology", "Genius Leader 2000", GAME_NOT_WORKING)
|
||||
COMP( 1995, gl2000p, gl2000, 0, gl2000, pc2000, driver_device, 0, "Video Technology", "Genius Leader 2000 Plus", GAME_NOT_WORKING)
|
||||
COMP( 1996, gl3000s, 0, 0, pc2000, pc2000, driver_device, 0, "Video Technology", "Genius Leader 3000S (Germany)", GAME_IS_SKELETON)
|
||||
COMP( 1996, gl3000s, 0, 0, gl3000s, gl3000s,driver_device, 0, "Video Technology", "Genius Leader 3000S (Germany)", GAME_NOT_WORKING)
|
||||
COMP( 1994, gl4000, 0, 0, gl4000, pc2000, driver_device, 0, "Video Technology", "Genius Leader 4000 Quadro (Germany)", GAME_NOT_WORKING)
|
||||
COMP( 1996, gl4004, 0, 0, gl4000, pc2000, driver_device, 0, "Video Technology", "Genius Leader 4004 Quadro L (Germany)", GAME_NOT_WORKING)
|
||||
COMP( 1997, gl5000, 0, 0, pc2000, pc2000, driver_device, 0, "Video Technology", "Genius Leader 5000 (Germany)", GAME_IS_SKELETON)
|
||||
|
@ -296,6 +296,7 @@ VIDEOS += RAMDAC
|
||||
VIDEOS += S2636
|
||||
VIDEOS += SAA5050
|
||||
VIDEOS += SED1330
|
||||
VIDEOS += SED1520
|
||||
VIDEOS += STVVDP
|
||||
#VIDEOS += TLC34076
|
||||
#VIDEOS += TMS34061
|
||||
|
Loading…
Reference in New Issue
Block a user