new non-working driver: Scopus Sagitta 150/180 serial terminal

This commit is contained in:
Felipe Corrêa da Silva Sanches 2017-11-05 03:47:41 -02:00
parent 6a09da3141
commit 3a96290b5f
3 changed files with 193 additions and 0 deletions

View File

@ -3569,6 +3569,7 @@ files {
MAME_DIR .. "src/mame/drivers/seattlecmp.cpp",
MAME_DIR .. "src/mame/drivers/sh4robot.cpp",
MAME_DIR .. "src/mame/drivers/sansa_fuze.cpp",
MAME_DIR .. "src/mame/drivers/scopus.cpp",
MAME_DIR .. "src/mame/drivers/softbox.cpp",
MAME_DIR .. "src/mame/includes/softbox.h",
MAME_DIR .. "src/mame/drivers/squale.cpp",

189
src/mame/drivers/scopus.cpp Normal file
View File

@ -0,0 +1,189 @@
// license:GPL2+
// copyright-holders:Felipe Sanches
/********************************************************************
Scopus Sagitta 150 / 180
Serial terminal
*********************************************************************/
#include "emu.h"
#include "cpu/i8085/i8085.h"
#include "machine/i8251.h"
#include "machine/i8257.h"
#include "machine/i8212.h"
#include "video/i8275.h"
#include "screen.h"
class sagitta180_state : public driver_device
{
public:
sagitta180_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag),
m_palette(*this, "palette"),
m_crtc(*this, "crtc"),
m_dma8257(*this, "dma8257"),
m_maincpu(*this, "maincpu"){ }
/* devices */
required_device<palette_device> m_palette;
required_device<i8275_device> m_crtc;
required_device<i8257_device> m_dma8257;
required_device<cpu_device> m_maincpu;
DECLARE_DRIVER_INIT(sagitta180);
DECLARE_WRITE_LINE_MEMBER(hrq_w);
DECLARE_READ8_MEMBER(memory_read_byte);
I8275_DRAW_CHARACTER_MEMBER(crtc_display_pixels);
// Character generator
const uint8_t *m_chargen;
virtual void machine_start() override;
virtual void machine_reset() override;
};
void sagitta180_state::machine_start()
{
m_palette->set_pen_color(0, rgb_t(0x00,0x00,0x00)); // black
m_palette->set_pen_color(1, rgb_t(0x00,0xa0,0x00)); // normal
m_palette->set_pen_color(2, rgb_t(0x00,0xff,0x00)); // highlight
m_chargen = memregion("chargen")->base();
}
const gfx_layout sagitta180_charlayout =
{
8, 8, /* 8x16 characters - the last 8 lines are always blank */
128, /* 128 characters */
1, /* 1 bits per pixel */
{0}, /* no bitplanes; 1 bit per pixel */
{0,1,2,3,4,5,6,7},
{0, 8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8 },
8*16 /* space between characters */
};
static GFXDECODE_START( sagitta180 )
GFXDECODE_ENTRY( "chargen", 0x0000, sagitta180_charlayout, 0, 1 )
GFXDECODE_END
I8275_DRAW_CHARACTER_MEMBER(sagitta180_state::crtc_display_pixels)
{
unsigned i;
const rgb_t *palette = m_palette->palette()->entry_list_raw();
uint8_t chargen_byte = m_chargen[ (linecount & 7) | ((unsigned)charcode << 3) ];
uint8_t pixels;
if (lten) {
pixels = ~0;
} else if (vsp != 0 || (linecount & 8) != 0) {
pixels = 0;
} else {
pixels = chargen_byte;
}
if (rvv) {
pixels = ~pixels;
}
for (i = 0; i < 7; i++) {
bitmap.pix32(y, x + i) = palette[ (pixels & (1U << (7 - i))) != 0 ];
}
}
void sagitta180_state::machine_reset()
{
}
static ADDRESS_MAP_START( maincpu_map, AS_PROGRAM, 8, sagitta180_state )
ADDRESS_MAP_GLOBAL_MASK(0xffff)
AM_RANGE(0x0000, 0x07ff) AM_ROM
// AM_RANGE(0x0800, 0x17ff) AM_ROM
AM_RANGE(0x1800, 0xffff) AM_RAM
ADDRESS_MAP_END
static ADDRESS_MAP_START( maincpu_io_map, AS_IO, 8, sagitta180_state )
AM_RANGE(0x0030, 0x0031) AM_DEVREADWRITE("crtc", i8275_device, read, write)
AM_RANGE(0x0040, 0x0048) AM_DEVREADWRITE("dma8257", i8257_device, read, write)
ADDRESS_MAP_END
static INPUT_PORTS_START( sagitta180 )
INPUT_PORTS_END
WRITE_LINE_MEMBER(sagitta180_state::hrq_w)
{
m_maincpu->set_input_line(INPUT_LINE_HALT, state);
m_dma8257->hlda_w(state);
}
READ8_MEMBER(sagitta180_state::memory_read_byte)
{
address_space& prog_space = m_maincpu->space(AS_PROGRAM);
return prog_space.read_byte(offset);
}
static MACHINE_CONFIG_START( sagitta180 )
/* basic machine hardware */
MCFG_CPU_ADD("maincpu", I8080, XTAL_10MHz) /* guessed ! */
MCFG_CPU_PROGRAM_MAP(maincpu_map)
MCFG_CPU_IO_MAP(maincpu_io_map)
// MCFG_CPU_IRQ_ACKNOWLEDGE_DEVICE("intlatch", i8212_device, inta_cb)
MCFG_DEVICE_ADD("dma8257", I8257, XTAL_14_7456MHz) /* guessed xtal */
MCFG_I8257_OUT_IOW_2_CB(DEVWRITE8("crtc", i8275_device, dack_w))
MCFG_I8257_OUT_HRQ_CB(WRITELINE(sagitta180_state, hrq_w))
MCFG_I8257_IN_MEMR_CB(READ8(sagitta180_state, memory_read_byte))
MCFG_DEVICE_ADD( "upd8251a", I8251, 0)
// MCFG_I8251_TXD_HANDLER(DEVWRITELINE("rs232a", rs232_port_device, write_txd))
// MCFG_I8251_DTR_HANDLER(DEVWRITELINE("rs232a", rs232_port_device, write_dtr))
// MCFG_I8251_RTS_HANDLER(DEVWRITELINE("rs232a", rs232_port_device, write_rts))
// MCFG_I8251_RXRDY_HANDLER(DEVWRITELINE("pic8259", pic8259_device, ir2_w))
// MCFG_I8251_TXRDY_HANDLER(DEVWRITELINE("pic8259", pic8259_device, ir2_w))
// MCFG_DEVICE_ADD("intlatch", I8212, 0)
// MCFG_I8212_MD_CALLBACK(GND) // guessed !
// MCFG_I8212_DI_CALLBACK(DEVREAD8("picu", i8214_device, vector_r))
// MCFG_I8212_INT_CALLBACK(INPUTLINE("maincpu", I8085_INTR_LINE)) // guessed !
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
MCFG_SCREEN_UPDATE_DEVICE("crtc", i8275_device, screen_update)
MCFG_SCREEN_REFRESH_RATE(60)
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) /* not accurate */
MCFG_SCREEN_SIZE(80*5, 26*8)
MCFG_SCREEN_VISIBLE_AREA(0, 80*5-1, 0, 26*8-1)
MCFG_GFXDECODE_ADD("gfxdecode", "palette", sagitta180 )
MCFG_DEVICE_ADD("crtc", I8275, 12480000 / 8) /* guessed xtal */
MCFG_I8275_CHARACTER_WIDTH(8)
MCFG_I8275_DRAW_CHARACTER_CALLBACK_OWNER(sagitta180_state, crtc_display_pixels)
MCFG_I8275_DRQ_CALLBACK(DEVWRITELINE("dma8257" , i8257_device , dreq2_w))
MCFG_I8275_IRQ_CALLBACK(INPUTLINE("maincpu" , I8085_INTR_LINE))
MCFG_VIDEO_SET_SCREEN("screen")
MCFG_PALETTE_ADD("palette", 3)
MACHINE_CONFIG_END
ROM_START( sagitta180 )
ROM_REGION( 0x10000, "maincpu", 0 )
ROM_LOAD( "sagitta180.u25", 0x0000, 0x0800, CRC(be21a153) SHA1(c1351cda839e0873e8d969e45502530bc26105fd) )
ROM_LOAD( "180_2763_1.u40", 0x1000, 0x1000, CRC(45839a05) SHA1(875ec4db37bcacdc9c1d62ed7c0757b6e9c45b34) )
ROM_LOAD( "180_2763_2.u46", 0x2000, 0x1000, CRC(10093151) SHA1(a474207c8f8505e41e4a3c0429fc4a308a282b26) )
ROM_LOAD( "180_2763_0.u60", 0x3000, 0x1000, CRC(6be85799) SHA1(b1b76740b418d7bd1efd4d405b6fe770797b072a) )
ROM_REGION( 0x1000, "chargen", 0 ) /* data copied from ibm-pc-jr driver */
ROM_LOAD("cga.chr", 0x00000, 0x01000, BAD_DUMP CRC(42009069) SHA1(ed08559ce2d7f97f68b9f540bddad5b6295294dd)) // from an unknown clone cga card (Actual IC is a 2708 that I was not able to dump yet)
ROM_END
// YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS */
COMP( 1979?, sagitta180, 0, 0, sagitta180, sagitta180, sagitta180_state, 0, "Scopus", "Sagitta 180", MACHINE_NOT_WORKING | MACHINE_NO_SOUND_HW )

View File

@ -33119,6 +33119,9 @@ strongx // bootleg
tazmani2 // (c) 1982 Stern
tazmani3 // bootleg (Rodmar)
@source:scopus.cpp
sagitta180 // 1979?
@source:scorpion.cpp
bestzx //
kay1024 //