new NOT WORKING machine : Sperry Univac UTS-10

This commit is contained in:
Robbbert 2018-11-08 17:03:04 +11:00
parent ca045e5708
commit bc75c78010
2 changed files with 43 additions and 54 deletions

View File

@ -6,8 +6,7 @@ Univac Terminals
2009-05-25 Skeleton driver
The terminals are models UTS20, UTS30, UTS40, UTS50 and SVT1120,
however only the UTS20 is dumped (program roms only).
The terminals are models UTS10, UTS20, UTS30, UTS40, UTS50 and SVT1120.
There were other terminals (Uniscope 100/200/300/400) and UTS60, but
they had different hardware. Uniscope models are believed to use the i8080,
@ -33,6 +32,10 @@ Notes:
- On boot it reads (0x81) & 0x10, and if set preserves 0xd831 to 0xd863
- This has to be some kind of warm boot detection, but how does it work?
You can use a debug trick to get UTS10 to boot:
- When it stops @0157 halt, pc = 158 and g
- When it loops at @0B33, pc = B35 and g
****************************************************************************/
#include "emu.h"
@ -257,19 +260,24 @@ uint32_t univac_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap
for (y = 0; y < 25; y++)
{
for (ra = 0; ra < 10; ra++)
for (ra = 0; ra < 14; ra++)
{
uint16_t *p = &bitmap.pix16(sy++);
for (x = ma; x < ma + 80; x++)
{
chr = m_p_videoram[x];
chr = m_p_videoram[x]; // bit 7 = rv attribute (or dim, depending on control-page setting)
/* Take care of 'corner' characters */
if (((chr == 0x1c) || (chr == 0x1d)) && (m_framecnt & 16))
chr = 0x20;
gfx = m_p_chargen[((chr & 0x7f)<<4) | ra] ^ (BIT(chr, 7) ? 0xff : 0);
gfx = (ra ? m_p_chargen[((chr & 0x7f)<<4) | (ra-1) ] : 0) ^ (BIT(chr, 7) ? 0xff : 0);
// chars 1C, 1D, 1F need special handling
if ((chr >= 0x1c) && (chr <= 0x1f) && BIT(gfx, 7))
{
gfx &= 0x7f;
// They also blink
if (m_framecnt & 16)
gfx = 0;
}
/* Display a scanline of a character */
*p++ = BIT(gfx, 7);
@ -288,21 +296,21 @@ uint32_t univac_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap
}
/* F4 Character Displayer */
static const gfx_layout c10_charlayout =
static const gfx_layout uts_charlayout =
{
8, 9, /* 8 x 9 characters */
512, /* 512 characters */
8, 14, /* 8 x 14 characters */
128, /* 128 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 },
{ 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8, 8*8, 9*8, 10*8, 11*8, 12*8, 13*8 },
8*16 /* every char takes 16 bytes */
};
static GFXDECODE_START( gfx_c10 )
GFXDECODE_ENTRY( "chargen", 0x0000, c10_charlayout, 0, 1 )
static GFXDECODE_START( gfx_uts )
GFXDECODE_ENTRY( "chargen", 0x0000, uts_charlayout, 0, 1 )
GFXDECODE_END
static const z80_daisy_config daisy_chain[] =
@ -324,11 +332,11 @@ MACHINE_CONFIG_START(univac_state::uts20)
MCFG_SCREEN_REFRESH_RATE(50)
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) /* not accurate */
MCFG_SCREEN_UPDATE_DRIVER(univac_state, screen_update)
MCFG_SCREEN_SIZE(640, 250)
MCFG_SCREEN_VISIBLE_AREA(0, 639, 0, 249)
MCFG_SCREEN_SIZE(640, 25*14)
MCFG_SCREEN_VISIBLE_AREA(0, 639, 0, 25*14-1)
MCFG_SCREEN_PALETTE("palette")
MCFG_PALETTE_ADD_MONOCHROME("palette")
MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_c10)
MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_uts)
NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_1);
@ -359,6 +367,19 @@ MACHINE_CONFIG_END
/* ROM definition */
ROM_START( uts10 )
ROM_REGION( 0x5000, "roms", ROMREGION_ERASEFF )
ROM_LOAD( "f3577_1.bin", 0x0000, 0x0800, CRC(f7d47484) SHA1(84c01d054df19e8da44c242a67d97f643bdabc4c) )
ROM_LOAD( "f3577_2.bin", 0x0800, 0x0800, CRC(7c1045f0) SHA1(732e8c111a346476c59bcfda73f0f826cdcd7eb3) )
ROM_LOAD( "f3577_3.bin", 0x1000, 0x0800, CRC(10f47af2) SHA1(a61b693af264bfa6565c43b4fe473833f8aba046) )
ROM_LOAD( "f3577_4.bin", 0x1800, 0x0800, CRC(bed8924c) SHA1(1fe3e118cc1c17f4c8b9c0025257822b99fcde38) )
ROM_LOAD( "f3577_5.bin", 0x2000, 0x0800, CRC(38d671b5) SHA1(3fb3feaaddb08af5ba50a9c08511cbb3949a7985) )
ROM_LOAD( "f3577_6.bin", 0x2800, 0x0800, CRC(6dbe9c4a) SHA1(11bc4b7c99811bd26423a15b33d02a86fa0bfd17) )
ROM_REGION( 0x0800, "chargen", 0 ) // possibly some bitrot, see h and m in F4 displayer
ROM_LOAD( "chr_5565.bin", 0x0000, 0x0800, CRC(7d99744f) SHA1(2db330ca94a91f7b2ac2ac088ae9255f5bb0a7b4) )
ROM_END
ROM_START( uts20 )
ROM_REGION( 0x5000, "roms", ROMREGION_ERASEFF )
ROM_LOAD( "uts20a.rom", 0x0000, 0x1000, CRC(1a7b4b4e) SHA1(c3732e25b4b7c7a80172e3fe55c77b923cf511eb) )
@ -367,46 +388,13 @@ ROM_START( uts20 )
ROM_LOAD( "uts20d.rom", 0x3000, 0x1000, CRC(76757cf7) SHA1(b0509d9a35366b21955f83ec3685163844c4dbf1) )
ROM_LOAD( "uts20e.rom", 0x4000, 0x1000, CRC(0dfc8062) SHA1(cd681020bfb4829d4cebaf1b5bf618e67b55bda3) )
/* character generator not dumped, using the one from 'c10' for now */
ROM_REGION( 0x2000, "chargen", 0 )
ROM_LOAD("c10_char.bin", 0x0000, 0x2000, BAD_DUMP CRC(cb530b6f) SHA1(95590bbb433db9c4317f535723b29516b9b9fcbf) )
// create special unisys gfx
ROM_FILL(0x1C0, 0x30, 0)
// left corner
ROM_FILL(0x1C0, 1, 0xF8)
ROM_FILL(0x1C1, 1, 0xF0)
ROM_FILL(0x1C2, 1, 0xE0)
ROM_FILL(0x1C3, 1, 0xC0)
ROM_FILL(0x1C4, 1, 0x80)
// right corner
ROM_FILL(0x1D0, 1, 0x1F)
ROM_FILL(0x1D1, 1, 0x0F)
ROM_FILL(0x1D2, 1, 0x07)
ROM_FILL(0x1D3, 1, 0x03)
ROM_FILL(0x1D4, 1, 0x01)
// SOE
ROM_FILL(0x1E0, 1, 0x80)
ROM_FILL(0x1E1, 1, 0xC0)
ROM_FILL(0x1E2, 1, 0xE0)
ROM_FILL(0x1E3, 1, 0xF0)
ROM_FILL(0x1E4, 1, 0xF8)
ROM_FILL(0x1E5, 1, 0xF0)
ROM_FILL(0x1E6, 1, 0xE0)
ROM_FILL(0x1E7, 1, 0xC0)
ROM_FILL(0x1E8, 1, 0x80)
// cursor
ROM_FILL(0x000, 1, 0x7F)
ROM_FILL(0x001, 1, 0x7E)
ROM_FILL(0x002, 1, 0x7C)
ROM_FILL(0x003, 1, 0x79)
ROM_FILL(0x004, 1, 0x73)
ROM_FILL(0x005, 1, 0x67)
ROM_FILL(0x006, 1, 0x4F)
ROM_FILL(0x007, 1, 0x1F)
ROM_FILL(0x008, 1, 0x7F)
/* character generator not dumped, using the one from 'UTS10' for now */
ROM_REGION( 0x0800, "chargen", 0 )
ROM_LOAD( "chr_5565.bin", 0x0000, 0x0800, BAD_DUMP CRC(7d99744f) SHA1(2db330ca94a91f7b2ac2ac088ae9255f5bb0a7b4) )
ROM_END
/* Driver */
// YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS
COMP( 1979?, uts10, uts20, 0, uts20, uts20, univac_state, empty_init, "Sperry Univac", "UTS-10", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE )
COMP( 1980, uts20, 0, 0, uts20, uts20, univac_state, empty_init, "Sperry Univac", "UTS-20", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE )

View File

@ -38069,6 +38069,7 @@ unior //
unistar //
@source:univac.cpp
uts10 //
uts20 //
@source:unixpc.cpp