From 3778c95e95a7eefd3054fa5da530f048ad59a5b8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Felipe=20Corr=C3=AAa=20da=20Silva=20Sanches?= Date: Mon, 8 Jun 2015 00:34:58 -0300 Subject: [PATCH 1/4] Initial minimal skeleton driver for Itautec I7000 computer. Thanks to Alexandre Souza (a.k.a. Tabajara). --- scripts/target/mame/mess.lua | 1 + src/mame/mess.lst | 1 + src/mess/drivers/i7000.c | 69 ++++++++++++++++++++++++++++++++++++ 3 files changed, 71 insertions(+) create mode 100644 src/mess/drivers/i7000.c diff --git a/scripts/target/mame/mess.lua b/scripts/target/mame/mess.lua index 79e85e7f938..a9aabf019af 100644 --- a/scripts/target/mame/mess.lua +++ b/scripts/target/mame/mess.lua @@ -2611,6 +2611,7 @@ files { MAME_DIR .. "src/mess/drivers/hunter2.c", MAME_DIR .. "src/emu/machine/nsc810.c", MAME_DIR .. "src/emu/machine/nsc810.h", + MAME_DIR .. "src/mess/drivers/i7000.c", MAME_DIR .. "src/mess/drivers/ibm6580.c", MAME_DIR .. "src/mess/drivers/ie15.c", MAME_DIR .. "src/mess/machine/ie15_kbd.c", diff --git a/src/mame/mess.lst b/src/mame/mess.lst index f3250b67668..316f8a4d2aa 100644 --- a/src/mame/mess.lst +++ b/src/mame/mess.lst @@ -2281,6 +2281,7 @@ elwro800 fk1 et3400 amu880 +i7000 interact jr100 jr100u diff --git a/src/mess/drivers/i7000.c b/src/mess/drivers/i7000.c new file mode 100644 index 00000000000..44479b3d5a8 --- /dev/null +++ b/src/mess/drivers/i7000.c @@ -0,0 +1,69 @@ +// license:GPL-2.0+ +// copyright-holders: Felipe Sanches +/*************************************************************************** + + Itautec I7000 + + driver by Felipe C. da S. Sanches + with tech info provided by Alexandre Souza (a.k.a. Tabajara). + +****************************************************************************/ + +#include "emu.h" +#include "cpu/z80/z80.h" //CPU was actually a NSC800 (Z80 compatible) + + +class i7000_state : public driver_device +{ +public: + i7000_state(const machine_config &mconfig, device_type type, const char *tag) + : driver_device(mconfig, type, tag) { } + +// DECLARE_READ8_MEMBER( i7000_io_r ); +// DECLARE_WRITE8_MEMBER( i7000_io_w ); + + DECLARE_DRIVER_INIT(i7000); +}; + +DRIVER_INIT_MEMBER(i7000_state, i7000) +{ +} + +static ADDRESS_MAP_START(i7000_mem, AS_PROGRAM, 8, i7000_state) + AM_RANGE(0x0000, 0x0fff) AM_ROM AM_REGION("maincpu", 0) + AM_RANGE(0x1000, 0xffff) AM_RAM +ADDRESS_MAP_END + +/* +static ADDRESS_MAP_START( i7000_io , AS_IO, 8, i7000_state) + ADDRESS_MAP_UNMAP_HIGH + ADDRESS_MAP_GLOBAL_MASK (0xff) + AM_RANGE(0x00, 0xff) AM_READWRITE(i7000_io_r, i7000_io_w) +ADDRESS_MAP_END +*/ + +static MACHINE_CONFIG_START( i7000, i7000_state ) + + /* basic machine hardware */ + MCFG_CPU_ADD("maincpu", NSC800, XTAL_4MHz) + MCFG_CPU_PROGRAM_MAP(i7000_mem) +// MCFG_CPU_IO_MAP(i7000_io) + +MACHINE_CONFIG_END + +ROM_START( i7000 ) + ROM_REGION( 0x1000, "maincpu", 0 ) + ROM_LOAD( "i7000_boot_v1_4r02_15_10_85_d52d.rom", 0x0000, 0x1000, CRC(622412e5) SHA1(bf187a095600fd46a739c35132a85b5f39b2f867) ) + + ROM_REGION( 0x0800, "gfx1", 0 ) + ROM_LOAD( "i7000_chargen.rom", 0x0000, 0x0800, CRC(7ba75183) SHA1(4af799f4a8bd385e1e4e5ece378df93e1133dc12) ) + + ROM_REGION( 0x1000, "drive", 0 ) + ROM_LOAD( "i7000_drive_ci01.rom", 0x0000, 0x1000, CRC(d8d6e5c1) SHA1(93e7db42fbfaa8243973321c7fc8c51ed80780be) ) + + ROM_REGION( 0x1000, "telex", 0 ) + ROM_LOAD( "i7000_telex_ci09.rom", 0x0000, 0x1000, CRC(c1c8fcc8) SHA1(cbf5fb600e587b998f190a9e3fb398a51d8a5e87) ) +ROM_END + +/* YEAR NAME PARENT COMPAT MACHINE INPUT INIT COMPANY FULLNAME FLAGS */ +COMP( 1982, i7000, 0, 0, i7000, 0, i7000_state, i7000, "Itautec", "I-7000", GAME_NOT_WORKING | GAME_NO_SOUND) From 3490c921c310ba34ea787b4186f3d401577e706d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Felipe=20Corr=C3=AAa=20da=20Silva=20Sanches?= Date: Tue, 9 Jun 2015 09:24:58 -0300 Subject: [PATCH 2/4] Adding a cartridge interface and a cartridges softlist for the Itautec I7000 computer. Thanks Alexandre Souza (Tabajara) for all of the cartridges data. --- hash/i7000_card.xml | 145 +++++++++++++++++++++++++++++++++++++++ src/mess/drivers/i7000.c | 26 ++++++- 2 files changed, 169 insertions(+), 2 deletions(-) create mode 100644 hash/i7000_card.xml diff --git a/hash/i7000_card.xml b/hash/i7000_card.xml new file mode 100644 index 00000000000..974258b0fbd --- /dev/null +++ b/hash/i7000_card.xml @@ -0,0 +1,145 @@ + + + + + + I-7101 SET 78 COML v1.3 R01 + 198? + Itautec + + + + + + + + + I-7104 TELEX v1.0 R4 (Aug 31st, 1987) + 1987 + Itautec + + + + + + + + + + + + I-7105 REDATOR v1.2 R02 (Sept 16th, 1983) + 1983 + Itautec + + + + + + + + + + + + I-7106 SET 3278 v1.2 R00 (Mar 21st, 1985) + 1985 + Itautec + + + + + + + + + I-7107 SET VT52 v1.0 R02 (Feb 25th, 1986) + 1986 + Itautec + + + + + + + + + + I-7113 v1.2 R02 (Mar 4th, 1986) + 1986 + Itautec + + + + + + + + + I-7119 REDE LOCAL v1.0 R01 (Mar 21st, 1987) + 1987 + Itautec + + + + + + + + + + I-7120 TELEX II v1.0 R04 (Aug 31st, 1987) + 1987 + Itautec + + + + + + + + + + + + I-71XX REDATOR v1.2 R04 + 198? + Itautec + + + + + + + + + + + + I-71XX SETDISC + 198? + Itautec + + + + + + + + + + I-71XX VIDEOTEXTO + 198? + Itautec + + + + + + + + + diff --git a/src/mess/drivers/i7000.c b/src/mess/drivers/i7000.c index 44479b3d5a8..eacbec67efc 100644 --- a/src/mess/drivers/i7000.c +++ b/src/mess/drivers/i7000.c @@ -11,18 +11,23 @@ #include "emu.h" #include "cpu/z80/z80.h" //CPU was actually a NSC800 (Z80 compatible) - +#include "bus/generic/carts.h" class i7000_state : public driver_device { public: i7000_state(const machine_config &mconfig, device_type type, const char *tag) - : driver_device(mconfig, type, tag) { } + : driver_device(mconfig, type, tag), + m_card(*this, "cardslot") + { } + + required_device m_card; // DECLARE_READ8_MEMBER( i7000_io_r ); // DECLARE_WRITE8_MEMBER( i7000_io_w ); DECLARE_DRIVER_INIT(i7000); + DECLARE_DEVICE_IMAGE_LOAD_MEMBER( i7000_card ); }; DRIVER_INIT_MEMBER(i7000_state, i7000) @@ -42,6 +47,16 @@ static ADDRESS_MAP_START( i7000_io , AS_IO, 8, i7000_state) ADDRESS_MAP_END */ +DEVICE_IMAGE_LOAD_MEMBER( i7000_state, i7000_card ) +{ + UINT32 size = m_card->common_get_size("rom"); + + m_card->rom_alloc(size, GENERIC_ROM8_WIDTH, ENDIANNESS_BIG); + m_card->common_load_rom(m_card->get_rom_base(), size, "rom"); + + return IMAGE_INIT_PASS; +} + static MACHINE_CONFIG_START( i7000, i7000_state ) /* basic machine hardware */ @@ -49,6 +64,13 @@ static MACHINE_CONFIG_START( i7000, i7000_state ) MCFG_CPU_PROGRAM_MAP(i7000_mem) // MCFG_CPU_IO_MAP(i7000_io) + /* Cartridge slot */ + MCFG_GENERIC_CARTSLOT_ADD("cardslot", generic_romram_plain_slot, "i7000_card") + MCFG_GENERIC_EXTENSIONS("rom") + MCFG_GENERIC_LOAD(i7000_state, i7000_card) + + /* Software lists */ + MCFG_SOFTWARE_LIST_ADD("card_list", "i7000_card") MACHINE_CONFIG_END ROM_START( i7000 ) From bbe27d0884e6bb9cff21c3bbc0715c41af6df23a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Felipe=20Corr=C3=AAa=20da=20Silva=20Sanches?= Date: Tue, 9 Jun 2015 09:58:09 -0300 Subject: [PATCH 3/4] Adding all of the Itautec I-7000 technical specs that are available up-to-now. --- src/mess/drivers/i7000.c | 39 +++++++++++++++++++++++++++++++++++++-- 1 file changed, 37 insertions(+), 2 deletions(-) diff --git a/src/mess/drivers/i7000.c b/src/mess/drivers/i7000.c index eacbec67efc..cd0148b17ef 100644 --- a/src/mess/drivers/i7000.c +++ b/src/mess/drivers/i7000.c @@ -7,6 +7,39 @@ driver by Felipe C. da S. Sanches with tech info provided by Alexandre Souza (a.k.a. Tabajara). + The portuguese Wikipedia article available at + http://pt.wikipedia.org/wiki/Itautec_I-7000 + also provides a technical overview of this machine: + + The I-7000 was the first computer manufactured by Itautec + (http://www.itautec.com.br/pt-br/produtos). It was originally an 8 bit CP/M + computer that became an IBM PC-XT clone in later hardware revisions which + took the "I-7000 PC-XT" name. + + * Released in 1982 + * Operating System: SIM/M / BASIC + * CPU: National NSC800 D-4 at 4,00 MHz + * Memory: 64KB to 128KB + * keyboards: 80 keys (with a reduced numerical keypad and function keys) + * display: + - 40 X 25 text + - 80 X 25 text + - 160 X 100 (8 colors) + - 640 X 200 (monochrome, with an expansion board) + - 320 X 200 (16 colors, with an expansion board) + * Expansion slots: + - 1 frontal cart slot + - 4 internal expansion slots + * Ports: + - 1 composite video output for a color monitor + - 2 cassete interfaces + - 1 RS-232C serial port + - 1 parallel interface + * Storage: + - Cassetes recorder + - Up to 4 external floppy drives: 8" (FD/DD, 1,1MB) or 5" 1/4 + - Up to 1 external 10 MB hard-drive + ****************************************************************************/ #include "emu.h" @@ -34,9 +67,11 @@ DRIVER_INIT_MEMBER(i7000_state, i7000) { } +/*FIXME: we still need to figure out the proper memory map + for the maincpu and where the cartridge slot maps to. */ static ADDRESS_MAP_START(i7000_mem, AS_PROGRAM, 8, i7000_state) - AM_RANGE(0x0000, 0x0fff) AM_ROM AM_REGION("maincpu", 0) - AM_RANGE(0x1000, 0xffff) AM_RAM +/* guessed */ AM_RANGE(0x0000, 0x0fff) AM_ROM AM_REGION("maincpu", 0) +/* guessed */ AM_RANGE(0x1000, 0xffff) AM_RAM ADDRESS_MAP_END /* From 038c9ddde33ac208f8cfda2530322f718ba01c62 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Felipe=20Corr=C3=AAa=20da=20Silva=20Sanches?= Date: Wed, 10 Jun 2015 02:17:11 -0300 Subject: [PATCH 4/4] Initial 40x25 monochrom text-mode video emulation for the Itautec I-7000 computer. --- src/mess/drivers/i7000.c | 86 ++++++++++++++++++++++++++++++++++++++-- 1 file changed, 82 insertions(+), 4 deletions(-) diff --git a/src/mess/drivers/i7000.c b/src/mess/drivers/i7000.c index cd0148b17ef..e0f160ed985 100644 --- a/src/mess/drivers/i7000.c +++ b/src/mess/drivers/i7000.c @@ -51,15 +51,22 @@ class i7000_state : public driver_device public: i7000_state(const machine_config &mconfig, device_type type, const char *tag) : driver_device(mconfig, type, tag), - m_card(*this, "cardslot") - { } + m_card(*this, "cardslot"), + m_videoram(*this, "videoram") + { } + + virtual void video_start(); required_device m_card; + required_shared_ptr m_videoram; + UINT32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); + UINT8 *m_char_rom; // DECLARE_READ8_MEMBER( i7000_io_r ); // DECLARE_WRITE8_MEMBER( i7000_io_w ); DECLARE_DRIVER_INIT(i7000); + DECLARE_PALETTE_INIT(i7000); DECLARE_DEVICE_IMAGE_LOAD_MEMBER( i7000_card ); }; @@ -67,11 +74,49 @@ DRIVER_INIT_MEMBER(i7000_state, i7000) { } +PALETTE_INIT_MEMBER(i7000_state, i7000) +{ + palette.set_pen_color(0, rgb_t(0x33, 0x33, 0x33)); + palette.set_pen_color(1, rgb_t(0xBB, 0xBB, 0xBB)); +} + +void i7000_state::video_start() +{ + // find memory regions + m_char_rom = memregion("gfx1")->base(); +} + +UINT32 i7000_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) +{ + offs_t addr = 0; + + for (int sy = 0; sy < 25; sy++) + { + for (int sx = 0; sx < 40; sx++) + { + UINT8 data = m_videoram[addr++]; + for (int y = 0; y < 8; y++) + { + int color = m_char_rom[data*8 + y]; + for (int x = 0; x < 8; x++) + { + bitmap.pix16(sy*8 + y, sx*8 + 7 - x) = (color & 1); + color >>= 1; + } + } + } + } + + return 0; +} + /*FIXME: we still need to figure out the proper memory map for the maincpu and where the cartridge slot maps to. */ static ADDRESS_MAP_START(i7000_mem, AS_PROGRAM, 8, i7000_state) -/* guessed */ AM_RANGE(0x0000, 0x0fff) AM_ROM AM_REGION("maincpu", 0) -/* guessed */ AM_RANGE(0x1000, 0xffff) AM_RAM + AM_RANGE(0x0000, 0x0fff) AM_ROM AM_REGION("maincpu", 0) + AM_RANGE(0x1000, 0x1fff) AM_RAM + AM_RANGE(0x2000, 0xffff) AM_RAM AM_SHARE("videoram") +// AM_RANGE(0x8000, 0xffff) AM_ROM AM_REGION("cardslot", 0) ADDRESS_MAP_END /* @@ -92,6 +137,25 @@ DEVICE_IMAGE_LOAD_MEMBER( i7000_state, i7000_card ) return IMAGE_INIT_PASS; } +#if 0 +static const gfx_layout i7000_charlayout = +{ + 8, 8, /* 8 x 8 characters */ + 256, /* 256 characters */ + 1, /* 1 bits per pixel */ + { 0 }, /* no bitplanes */ + /* x offsets */ + { 0, 1, 2, 3, 4, 5, 6, 7 }, + /* y offsets */ + { 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8 }, + 8*8 /* every char takes 8 bytes */ +}; + +static GFXDECODE_START( i7000 ) + GFXDECODE_ENTRY( "gfx1", 0x0000, i7000_charlayout, 0, 8 ) +GFXDECODE_END +#endif + static MACHINE_CONFIG_START( i7000, i7000_state ) /* basic machine hardware */ @@ -99,6 +163,20 @@ static MACHINE_CONFIG_START( i7000, i7000_state ) MCFG_CPU_PROGRAM_MAP(i7000_mem) // MCFG_CPU_IO_MAP(i7000_io) + /* video hardware */ + MCFG_SCREEN_ADD("screen", RASTER) + MCFG_SCREEN_REFRESH_RATE(60) + MCFG_SCREEN_SIZE(320, 200) /* 40x25 8x8 chars */ + MCFG_SCREEN_VISIBLE_AREA(0, 320-1, 0, 200-1) + + MCFG_SCREEN_UPDATE_DRIVER(i7000_state, screen_update) + MCFG_SCREEN_PALETTE("palette") + + MCFG_PALETTE_ADD("palette", 2) + MCFG_PALETTE_INIT_OWNER(i7000_state, i7000) + +// MCFG_GFXDECODE_ADD("gfxdecode", "palette", i7000) + /* Cartridge slot */ MCFG_GENERIC_CARTSLOT_ADD("cardslot", generic_romram_plain_slot, "i7000_card") MCFG_GENERIC_EXTENSIONS("rom")