mirror of
https://github.com/holub/mame
synced 2025-04-23 08:49:55 +03:00
(nw) jtc : all 4 machines are pretty much working now
This commit is contained in:
parent
e63b75da08
commit
0116ffbc71
@ -1,12 +1,23 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders:Curt Coder
|
||||
// copyright-holders:Curt Coder, Robbbert
|
||||
/***************************************************************************
|
||||
|
||||
Jugend+Technik CompJU+TEr
|
||||
Jugend+Technik CompJU+TEr
|
||||
|
||||
15/07/2009 Skeleton driver.
|
||||
2009-07-15 Skeleton driver.
|
||||
|
||||
****************************************************************************/
|
||||
2018-09: Made mostly working
|
||||
|
||||
To Do:
|
||||
- Add quickload of jtc files
|
||||
- Find out if cassette works
|
||||
- Figure out how to use the so-called "Basic", all documents are in German.
|
||||
- Fix any remaining CPU bugs
|
||||
- On jtces40, the use of ALT key will usually freeze the system. Normal, or a bug?
|
||||
- On jtces40, no backspace?
|
||||
- On jtces40, is there a way to type lower case?
|
||||
|
||||
****************************************************************************************/
|
||||
|
||||
#include "emu.h"
|
||||
#include "bus/centronics/ctronics.h"
|
||||
@ -19,7 +30,6 @@
|
||||
#include "screen.h"
|
||||
#include "speaker.h"
|
||||
|
||||
#define SCREEN_TAG "screen"
|
||||
#define UB8830D_TAG "ub8830d"
|
||||
#define CENTRONICS_TAG "centronics"
|
||||
|
||||
@ -35,7 +45,7 @@ public:
|
||||
, m_cassette(*this, "cassette")
|
||||
, m_speaker(*this, "speaker")
|
||||
, m_centronics(*this, CENTRONICS_TAG)
|
||||
, m_video_ram(*this, "video_ram")
|
||||
, m_video_ram(*this, "videoram")
|
||||
{ }
|
||||
|
||||
required_device<cpu_device> m_maincpu;
|
||||
@ -68,8 +78,8 @@ public:
|
||||
jtces88_state(const machine_config &mconfig, device_type type, const char *tag)
|
||||
: jtc_state(mconfig, type, tag)
|
||||
{ }
|
||||
|
||||
void jtces88(machine_config &config);
|
||||
void jtc_es1988_mem(address_map &map);
|
||||
};
|
||||
|
||||
|
||||
@ -80,8 +90,9 @@ public:
|
||||
: jtc_state(mconfig, type, tag)
|
||||
{ }
|
||||
|
||||
uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
|
||||
void jtces23(machine_config &config);
|
||||
private:
|
||||
uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
|
||||
void jtc_es23_mem(address_map &map);
|
||||
};
|
||||
|
||||
@ -93,6 +104,8 @@ public:
|
||||
: jtc_state(mconfig, type, tag)
|
||||
{ }
|
||||
|
||||
void jtces40(machine_config &config);
|
||||
private:
|
||||
virtual void video_start() override;
|
||||
uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
|
||||
|
||||
@ -104,7 +117,6 @@ public:
|
||||
std::unique_ptr<uint8_t[]> m_color_ram_r;
|
||||
std::unique_ptr<uint8_t[]> m_color_ram_g;
|
||||
std::unique_ptr<uint8_t[]> m_color_ram_b;
|
||||
void jtces40(machine_config &config);
|
||||
void jtc_es40_mem(address_map &map);
|
||||
};
|
||||
|
||||
@ -179,10 +191,11 @@ WRITE8_MEMBER( jtc_state::p3_w )
|
||||
*/
|
||||
|
||||
/* tape */
|
||||
m_cassette->output( BIT(data, 6) ? +1.0 : -1.0);
|
||||
|
||||
if (BIT(data, 7))
|
||||
m_cassette->output( BIT(data, 6) ? +1.0 : -1.0);
|
||||
else
|
||||
/* speaker */
|
||||
m_speaker->level_w(BIT(data, 7));
|
||||
m_speaker->level_w(BIT(data, 6));
|
||||
}
|
||||
|
||||
READ8_MEMBER( jtces40_state::videoram_r )
|
||||
@ -207,7 +220,7 @@ WRITE8_MEMBER( jtces40_state::videoram_w )
|
||||
|
||||
WRITE8_MEMBER( jtces40_state::banksel_w )
|
||||
{
|
||||
m_video_bank = offset & 0xf0;
|
||||
m_video_bank = data;
|
||||
}
|
||||
|
||||
/* Memory Maps */
|
||||
@ -233,7 +246,7 @@ void jtc_state::jtc_mem(address_map &map)
|
||||
map(0x700e, 0x700e).mirror(0x0ff0).portr("Y14");
|
||||
map(0x700f, 0x700f).mirror(0x0ff0).portr("Y15");
|
||||
map(0xe000, 0xfdff).ram();
|
||||
map(0xfe00, 0xffff).ram().share("video_ram");
|
||||
map(0xfe00, 0xffff).ram().share("videoram");
|
||||
}
|
||||
|
||||
void jtces23_state::jtc_es23_mem(address_map &map)
|
||||
@ -257,7 +270,7 @@ void jtces23_state::jtc_es23_mem(address_map &map)
|
||||
map(0x700e, 0x700e).mirror(0x0ff0).portr("Y14");
|
||||
map(0x700f, 0x700f).mirror(0x0ff0).portr("Y15");
|
||||
map(0xe000, 0xf7ff).ram();
|
||||
map(0xf800, 0xffff).ram().share("video_ram");
|
||||
map(0xf800, 0xffff).ram().share("videoram");
|
||||
}
|
||||
|
||||
void jtces40_state::jtc_es40_mem(address_map &map)
|
||||
@ -493,11 +506,12 @@ INPUT_PORTS_END
|
||||
|
||||
static INPUT_PORTS_START( jtces40 )
|
||||
PORT_START("Y0")
|
||||
|
||||
PORT_START("Y1")
|
||||
PORT_BIT( 0x0f, IP_ACTIVE_HIGH, IPT_UNUSED )
|
||||
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD )
|
||||
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNUSED )
|
||||
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("SHT3") PORT_CODE(KEYCODE_LALT) PORT_CHAR(UCHAR_MAMEKEY(LALT))
|
||||
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("SHT2") PORT_CODE(KEYCODE_LCONTROL) PORT_CHAR(UCHAR_MAMEKEY(LCONTROL))
|
||||
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("SHT2") PORT_CODE(KEYCODE_LCONTROL) PORT_CHAR(UCHAR_SHIFT_2)
|
||||
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("SHT1") PORT_CODE(KEYCODE_LSHIFT) PORT_CHAR(UCHAR_SHIFT_1)
|
||||
|
||||
PORT_START("Y2")
|
||||
@ -505,7 +519,7 @@ static INPUT_PORTS_START( jtces40 )
|
||||
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_1) PORT_CHAR('1') PORT_CHAR('!')
|
||||
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_Q) PORT_CHAR('q') PORT_CHAR('Q')
|
||||
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_A) PORT_CHAR('a') PORT_CHAR('A')
|
||||
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_Y) PORT_CHAR('y') PORT_CHAR('Y')
|
||||
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_Z) PORT_CHAR('z') PORT_CHAR('Z')
|
||||
|
||||
PORT_START("Y3")
|
||||
PORT_BIT( 0x0f, IP_ACTIVE_HIGH, IPT_UNUSED )
|
||||
@ -538,7 +552,7 @@ static INPUT_PORTS_START( jtces40 )
|
||||
PORT_START("Y7")
|
||||
PORT_BIT( 0x0f, IP_ACTIVE_HIGH, IPT_UNUSED )
|
||||
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_6) PORT_CHAR('6') PORT_CHAR('&')
|
||||
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_Z) PORT_CHAR('z') PORT_CHAR('Z')
|
||||
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_Y) PORT_CHAR('y') PORT_CHAR('Y')
|
||||
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_H) PORT_CHAR('h') PORT_CHAR('H')
|
||||
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_N) PORT_CHAR('n') PORT_CHAR('N')
|
||||
|
||||
@ -572,7 +586,8 @@ static INPUT_PORTS_START( jtces40 )
|
||||
|
||||
PORT_START("Y12")
|
||||
PORT_BIT( 0x0f, IP_ACTIVE_HIGH, IPT_UNUSED )
|
||||
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("CLR") PORT_CODE(KEYCODE_BACKSPACE) PORT_CHAR(8)
|
||||
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_CLOSEBRACE) PORT_CHAR('<') PORT_CHAR('>') PORT_CHAR('^')
|
||||
// can't find this: PORT_NAME("CLR") PORT_CODE(KEYCODE_BACKSPACE) PORT_CHAR(8)
|
||||
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_OPENBRACE) PORT_CHAR('+') PORT_CHAR('-') PORT_CHAR('\\')
|
||||
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_QUOTE) PORT_CHAR('*') PORT_CHAR('/') PORT_CHAR('|')
|
||||
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("RET") PORT_CODE(KEYCODE_ENTER) PORT_CHAR(13) PORT_CHAR('?') PORT_CHAR('~')
|
||||
@ -622,6 +637,8 @@ uint32_t jtces23_state::screen_update(screen_device &screen, bitmap_ind16 &bitma
|
||||
|
||||
PALETTE_INIT_MEMBER(jtc_state,jtc_es40)
|
||||
{
|
||||
for (u8 i = 8; i < 16; i++)
|
||||
palette.set_pen_color(i, rgb_t(BIT(i, 0) ? 0xc0 : 0, BIT(i, 1) ? 0xc0 : 0, BIT(i, 2) ? 0xc0 : 0));
|
||||
}
|
||||
|
||||
void jtces40_state::video_start()
|
||||
@ -643,21 +660,26 @@ void jtces40_state::video_start()
|
||||
|
||||
uint32_t jtces40_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
|
||||
{
|
||||
u8 i, y, sx;
|
||||
u8 i, y, z, x;
|
||||
u16 ma = 0;
|
||||
|
||||
for (y = 0; y < 192; y++)
|
||||
for (y = 0; y < 64; y++)
|
||||
{
|
||||
for (sx = 0; sx < 40; sx++)
|
||||
for (z = 0; z < 3; z++)
|
||||
{
|
||||
u8 data = m_video_ram[(y * 40) + sx];
|
||||
u8 r = m_color_ram_r[(y * 40) + sx];
|
||||
u8 g = m_color_ram_g[(y * 40) + sx];
|
||||
u8 b = m_color_ram_b[(y * 40) + sx];
|
||||
for (x = 0; x < 40; x++)
|
||||
{
|
||||
u8 data = m_video_ram[ma + x];
|
||||
u8 r = ~m_color_ram_r[ma + x];
|
||||
u8 g = ~m_color_ram_g[ma + x];
|
||||
u8 b = ~m_color_ram_b[ma + x];
|
||||
|
||||
for (i = 0; i < 8; i++)
|
||||
//bitmap.pix16(y, (sx * 8) + 7 - i) = (BIT(r, i) << 3) | (BIT(g, i) << 2) | (BIT(b, i) << 1) | BIT(data, i);
|
||||
bitmap.pix16(y, (sx * 8) + 7 - i) = BIT(data, i) ? 0 : (BIT(r, i) << 0) | (BIT(g, i) << 1) | (BIT(b, i) << 2);
|
||||
for (i = 0; i < 8; i++)
|
||||
bitmap.pix16(y*3+z, (x * 8) + 7 - i) = (BIT(r, i) << 0) | (BIT(g, i) << 1) | (BIT(b, i) << 2) | (BIT(data, i) << 3);
|
||||
}
|
||||
ma+=40;
|
||||
}
|
||||
ma+=8;
|
||||
}
|
||||
|
||||
return 0;
|
||||
@ -688,7 +710,7 @@ static const gfx_layout jtces23_charlayout =
|
||||
|
||||
static const gfx_layout jtces40_charlayout =
|
||||
{
|
||||
8, 8, /* 8 x 16 characters */
|
||||
8, 8, /* 8 x 8 characters */
|
||||
128, /* 128 characters */
|
||||
1, /* 1 bits per pixel */
|
||||
{ 0 }, /* no bitplanes */
|
||||
@ -733,7 +755,7 @@ MACHINE_CONFIG_END
|
||||
MACHINE_CONFIG_START(jtc_state::jtc)
|
||||
basic(config);
|
||||
/* video hardware */
|
||||
MCFG_SCREEN_ADD(SCREEN_TAG, RASTER)
|
||||
MCFG_SCREEN_ADD("screen", RASTER)
|
||||
MCFG_SCREEN_REFRESH_RATE(50)
|
||||
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) /* not accurate */
|
||||
MCFG_SCREEN_UPDATE_DRIVER(jtc_state, screen_update)
|
||||
@ -761,7 +783,7 @@ MACHINE_CONFIG_START(jtces23_state::jtces23)
|
||||
MCFG_DEVICE_PROGRAM_MAP(jtc_es23_mem)
|
||||
|
||||
/* video hardware */
|
||||
MCFG_SCREEN_ADD(SCREEN_TAG, RASTER)
|
||||
MCFG_SCREEN_ADD("screen", RASTER)
|
||||
MCFG_SCREEN_REFRESH_RATE(50)
|
||||
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) /* not accurate */
|
||||
MCFG_SCREEN_UPDATE_DRIVER(jtces23_state, screen_update)
|
||||
@ -783,7 +805,7 @@ MACHINE_CONFIG_START(jtces40_state::jtces40)
|
||||
MCFG_DEVICE_PROGRAM_MAP(jtc_es40_mem)
|
||||
|
||||
/* video hardware */
|
||||
MCFG_SCREEN_ADD(SCREEN_TAG, RASTER)
|
||||
MCFG_SCREEN_ADD("screen", RASTER)
|
||||
MCFG_SCREEN_REFRESH_RATE(50)
|
||||
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) /* not accurate */
|
||||
MCFG_SCREEN_UPDATE_DRIVER(jtces40_state, screen_update)
|
||||
|
Loading…
Reference in New Issue
Block a user