Merge pull request #206 from felipesanches/i7000

New driver : Itautec I7000 [Felipe Sanches]
This commit is contained in:
Miodrag Milanović 2015-06-10 14:14:56 +02:00
commit a0e8c2703c
4 changed files with 351 additions and 0 deletions

145
hash/i7000_card.xml Normal file
View File

@ -0,0 +1,145 @@
<?xml version="1.0"?>
<!DOCTYPE softwarelist SYSTEM "softwarelist.dtd">
<!--
Thanks to Alexandre Souza (Tabajara) for contributing the initial
cartridges data available in this softlist.
-->
<softwarelist name="i7000_card" description="Itautec I-7000 cartridges">
<software name="set78">
<description>I-7101 SET 78 COML v1.3 R01</description>
<year>198?</year>
<publisher>Itautec</publisher>
<part name="card" interface="i7000_card">
<dataarea name="rom" size="0x2000">
<rom name="i-7101_set_78_coml_v1.3_r01_703d.rom" size="0x2000" crc="12da1687" sha1="b370c2b7718cf89d69e37fc7d1d3c4d80dc5f1cc" offset="0" />
</dataarea>
</part>
</software>
<software name="telex">
<description>I-7104 TELEX v1.0 R4 (Aug 31st, 1987)</description>
<year>1987</year>
<publisher>Itautec</publisher>
<part name="card" interface="i7000_card">
<dataarea name="rom" size="0x8000">
<rom name="i-7104_cart_telex_v1.0_r4_a5e5_31_08_87_1.rom" size="0x2000" crc="5ae6b20d" sha1="f3cbfa81bdc828872790290a53e62750d720b457" offset="0x0000" />
<rom name="i-7104_cart_telex_v1.0_r4_632c_31_08_87_2.rom" size="0x2000" crc="e95dd757" sha1="f90886b8c36063643509fcad4df1061de1dc7a90" offset="0x2000" />
<rom name="i-7104_cart_telex_v1.0_r4_a3b4_31_08_87_3.rom" size="0x2000" crc="ef884b22" sha1="bbc3688a64292dd15fe8103bf6cadfd4a991abb9" offset="0x4000" />
<rom name="i-7104_cart_telex_v1.0_r4_fdcc_31_08_87_4.rom" size="0x2000" crc="82202eb9" sha1="ee2018b5b58a656630c5057b3a65316f38099265" offset="0x6000" />
</dataarea>
</part>
</software>
<software name="redator">
<description>I-7105 REDATOR v1.2 R02 (Sept 16th, 1983)</description>
<year>1983</year>
<publisher>Itautec</publisher>
<part name="card" interface="i7000_card">
<dataarea name="rom" size="0x8000">
<rom name="i-7105_redator_v1.2_r02_16_09_83_1.rom" size="0x2000" crc="2b5bf15f" sha1="1384cab00e1596619e1ae5ae072bd23af6fe6b2e" offset="0x0000" />
<rom name="i-7105_redator_v1.2_r02_16_09_83_2.rom" size="0x2000" crc="22c64fc2" sha1="ef4fbe93deeea65f1705e9b5fb2ad4d376650215" offset="0x2000" />
<rom name="i-7105_redator_v1.2_r02_16_09_83_3.rom" size="0x2000" crc="cfb8e70b" sha1="08683feafbe28e009458a0cfb1301bedd7e03aaa" offset="0x4000" />
<rom name="i-7105_redator_v1.2_r02_16_09_83_4.rom" size="0x2000" crc="f8510fee" sha1="275528441d4c4a410e6be45d0ecbe465aef2afe1" offset="0x6000" />
</dataarea>
</part>
</software>
<software name="set3278">
<description>I-7106 SET 3278 v1.2 R00 (Mar 21st, 1985)</description>
<year>1985</year>
<publisher>Itautec</publisher>
<part name="card" interface="i7000_card">
<dataarea name="rom" size="0x2000">
<rom name="i-7106_set_3278_v1.2_r00_21_03_85.rom" size="0x2000" crc="004275c8" sha1="ff42eb526f6142cff0d6ecfef8e41ef17bfac2c7" offset="0" />
</dataarea>
</part>
</software>
<software name="setvt52">
<description>I-7107 SET VT52 v1.0 R02 (Feb 25th, 1986)</description>
<year>1986</year>
<publisher>Itautec</publisher>
<part name="card" interface="i7000_card">
<dataarea name="rom" size="0x4000">
<rom name="i-7107_set_vt52_v1.0_r02_25_02_86_1.rom" size="0x2000" crc="ead3f48e" sha1="ec7951591cab8e8c2cb22f7e6352c709d24b9706" offset="0x0000" />
<rom name="i-7107_set_vt52_v1.0_r02_25_02_86_2.rom" size="0x2000" crc="da848ec0" sha1="7ed1898de94c7382c081ec3a78f60a6850daa25a" offset="0x2000" />
</dataarea>
</part>
</software>
<software name="i7113">
<description>I-7113 v1.2 R02 (Mar 4th, 1986)</description>
<year>1986</year>
<publisher>Itautec</publisher>
<part name="card" interface="i7000_card">
<dataarea name="rom" size="0x2000">
<rom name="i-7113_v1.2_r02_04_03_86.rom" size="0x2000" crc="865da8b7" sha1="da65dc6d65bbe0b8e84c0eeda15021e2575fd696" offset="0" />
</dataarea>
</part>
</software>
<software name="redelocal">
<description>I-7119 REDE LOCAL v1.0 R01 (Mar 21st, 1987)</description>
<year>1987</year>
<publisher>Itautec</publisher>
<part name="card" interface="i7000_card">
<dataarea name="rom" size="0x4000">
<rom name="i-7119_rede_local_v1.0_r01_21_03_87_1.rom" size="0x2000" crc="f0e95bc4" sha1="fa4482b005d8647dca411911b0f7048c940632c8" offset="0x0000" />
<rom name="i-7119_rede_local_v1.0_r01_21_03_87_2.rom" size="0x2000" crc="3b9461bf" sha1="958a71e61a91433645d402c31955fe4f64efcba0" offset="0x2000" />
</dataarea>
</part>
</software>
<software name="telex2">
<description>I-7120 TELEX II v1.0 R04 (Aug 31st, 1987)</description>
<year>1987</year>
<publisher>Itautec</publisher>
<part name="card" interface="i7000_card">
<dataarea name="rom" size="0x8000">
<rom name="i-7120_telex_ii_v1.0_r04_31_08_87_1.rom" size="0x2000" crc="5ae6b20d" sha1="f3cbfa81bdc828872790290a53e62750d720b457" offset="0x0000" />
<rom name="i-7120_telex_ii_v1.0_r04_31_08_87_2.rom" size="0x2000" crc="e95dd757" sha1="f90886b8c36063643509fcad4df1061de1dc7a90" offset="0x2000" />
<rom name="i-7120_telex_ii_v1.0_r04_31_08_87_3.rom" size="0x2000" crc="ef884b22" sha1="bbc3688a64292dd15fe8103bf6cadfd4a991abb9" offset="0x4000" />
<rom name="i-7120_telex_ii_v1.0_r04_31_08_87_4.rom" size="0x2000" crc="82202eb9" sha1="ee2018b5b58a656630c5057b3a65316f38099265" offset="0x6000" />
</dataarea>
</part>
</software>
<software name="redatorv12">
<description>I-71XX REDATOR v1.2 R04</description>
<year>198?</year>
<publisher>Itautec</publisher>
<part name="card" interface="i7000_card">
<dataarea name="rom" size="0x8000">
<rom name="i-71xx_redator_v1.2_r04_1.rom" size="0x2000" crc="98105005" sha1="3cbd9de8c7e37e16d1dd143a7e735f582cf303c8" offset="0x0000" />
<rom name="i-71xx_redator_v1.2_r04_2.rom" size="0x2000" crc="848d665c" sha1="2095c9007f090d4510265fd3da6ef0d037c7ee86" offset="0x2000" />
<rom name="i-71xx_redator_v1.2_r04_3.rom" size="0x2000" crc="1e61ff21" sha1="d8e28264e7020e912774fd9bda6bacd4b227a14d" offset="0x4000" />
<rom name="i-71xx_redator_v1.2_r04_4.rom" size="0x2000" crc="6c6b96a6" sha1="26bac8e902d40490fcd2e9021a5de3753c0fc26a" offset="0x6000" />
</dataarea>
</part>
</software>
<software name="setdisc">
<description>I-71XX SETDISC</description>
<year>198?</year>
<publisher>Itautec</publisher>
<part name="card" interface="i7000_card">
<dataarea name="rom" size="0x4000">
<rom name="i-71xx_setdisc_1.rom" size="0x2000" crc="0ad7d534" sha1="aecf5f01b8ffb4120f3cd4752705f6538ef70f4e" offset="0x0000" />
<rom name="i-71xx_setdisc_2.rom" size="0x2000" crc="51e24c2b" sha1="172699394690ee46096d9395f6894ebaa26ea6ac" offset="0x2000" />
</dataarea>
</part>
</software>
<software name="videotexto">
<description>I-71XX VIDEOTEXTO</description>
<year>198?</year>
<publisher>Itautec</publisher>
<part name="card" interface="i7000_card">
<dataarea name="rom" size="0x6000">
<rom name="i-71xx_videotexto_1.rom" size="0x2000" crc="28dda7db" sha1="ced755c40fcdf2dc2cd5263a494d51917e1010d1" offset="0x0000" />
<rom name="i-71xx_videotexto_2.rom" size="0x2000" crc="b4293435" sha1="5e2b96c19c4f5c63a5afa2de504d29fe64a4c908" offset="0x2000" />
<rom name="i-71xx_videotexto_3.rom" size="0x2000" crc="07486b26" sha1="e54e32a789e73b772516759ac26badf5805abd95" offset="0x4000" />
</dataarea>
</part>
</software>
</softwarelist>

View File

@ -2613,6 +2613,7 @@ files {
MAME_DIR .. "src/mess/drivers/hunter2.c", MAME_DIR .. "src/mess/drivers/hunter2.c",
MAME_DIR .. "src/emu/machine/nsc810.c", MAME_DIR .. "src/emu/machine/nsc810.c",
MAME_DIR .. "src/emu/machine/nsc810.h", 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/ibm6580.c",
MAME_DIR .. "src/mess/drivers/ie15.c", MAME_DIR .. "src/mess/drivers/ie15.c",
MAME_DIR .. "src/mess/machine/ie15_kbd.c", MAME_DIR .. "src/mess/machine/ie15_kbd.c",

View File

@ -2282,6 +2282,7 @@ elwro800
fk1 fk1
et3400 et3400
amu880 amu880
i7000
interact interact
jr100 jr100
jr100u jr100u

204
src/mess/drivers/i7000.c Normal file
View File

@ -0,0 +1,204 @@
// license:GPL-2.0+
// copyright-holders: Felipe Sanches
/***************************************************************************
Itautec I7000
driver by Felipe C. da S. Sanches <juca@members.fsf.org>
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"
#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),
m_card(*this, "cardslot"),
m_videoram(*this, "videoram")
{ }
virtual void video_start();
required_device<generic_slot_device> m_card;
required_shared_ptr<UINT8> 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 );
};
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)
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
/*
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
*/
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;
}
#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 */
MCFG_CPU_ADD("maincpu", NSC800, XTAL_4MHz)
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")
MCFG_GENERIC_LOAD(i7000_state, i7000_card)
/* Software lists */
MCFG_SOFTWARE_LIST_ADD("card_list", "i7000_card")
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)