summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author Robbbert <Robbbert@users.noreply.github.com>2018-09-17 01:02:53 +1000
committer Robbbert <Robbbert@users.noreply.github.com>2018-09-17 01:02:53 +1000
commit0116ffbc713d96ac9967b9aab9a8be52622d4ef6 (patch)
tree27ede6989ac0a9d150d2cd5d317a2d89156f87b1
parente63b75da08458c36afe2702851dfb781cbe2c187 (diff)
(nw) jtc : all 4 machines are pretty much working now
-rw-r--r--src/mame/drivers/jtc.cpp92
1 files changed, 57 insertions, 35 deletions
diff --git a/src/mame/drivers/jtc.cpp b/src/mame/drivers/jtc.cpp
index 7a93142b2d5..f93296a91c7 100644
--- a/src/mame/drivers/jtc.cpp
+++ b/src/mame/drivers/jtc.cpp
@@ -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 (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 (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*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)