(nw) uts20 : added graphics for corner characters, SOE and cursor.

This commit is contained in:
Robbbert 2017-11-24 02:44:31 +11:00
parent f3236fc081
commit 23b127fc64

View File

@ -4,10 +4,14 @@
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).
2009-05-25 Skeleton driver
There were other terminals (Uniscope 100/200/300/400) and UTS60, but
they had different hardware. Uniscope models are believed to use the i8080,
and the UTS60 was a colour graphics terminal with a MC68000 and 2 floppy drives.
The terminal has 2 screens selectable by the operator with the Fn + 1-2
buttons. Thus the user can have two sessions open at once, to different
@ -43,7 +47,7 @@ Notes:
#include "speaker.h"
#define LOG_GENERAL (1U << 0)
#define LOG_PARITY (1U << 1)
#define LOG_PARITY (1U << 1)
//#define VERBOSE (LOG_GENERAL | LOG_PARITY)
#include "logmacro.h"
@ -88,7 +92,7 @@ protected:
virtual void device_post_load() override;
private:
required_device<cpu_device> m_maincpu;
required_device<cpu_device> m_maincpu;
required_device<nvram_device> m_nvram;
required_device<z80ctc_device> m_ctc;
required_device<z80sio_device> m_uart;
@ -241,8 +245,7 @@ void univac_state::device_post_load()
uint32_t univac_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{
uint8_t y,ra,chr,gfx;
uint16_t sy=0,ma=0,x;
uint8_t *videoram = m_p_videoram;//^ m_bank_mask;
uint16_t sy=0,x,ma=0; //m_bank_mask; (it isn't port43 that selects the screen)
m_framecnt++;
@ -254,7 +257,7 @@ uint32_t univac_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap
for (x = ma; x < ma + 80; x++)
{
chr = videoram[x];
chr = m_p_videoram[x];
/* Take care of 'corner' characters */
if (((chr == 0x1c) || (chr == 0x1d)) && (m_framecnt & 16))
@ -278,6 +281,24 @@ uint32_t univac_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap
return 0;
}
/* F4 Character Displayer */
static const gfx_layout c10_charlayout =
{
8, 9, /* 8 x 9 characters */
512, /* 512 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 },
8*16 /* every char takes 16 bytes */
};
static GFXDECODE_START( c10 )
GFXDECODE_ENTRY( "chargen", 0x0000, c10_charlayout, 0, 1 )
GFXDECODE_END
static const z80_daisy_config daisy_chain[] =
{
{ "uart" },
@ -301,6 +322,7 @@ static MACHINE_CONFIG_START( uts20 )
MCFG_SCREEN_VISIBLE_AREA(0, 639, 0, 249)
MCFG_SCREEN_PALETTE("palette")
MCFG_PALETTE_ADD_MONOCHROME("palette")
MCFG_GFXDECODE_ADD("gfxdecode", "palette", c10)
MCFG_NVRAM_ADD_1FILL("nvram")
@ -310,10 +332,6 @@ static MACHINE_CONFIG_START( uts20 )
MCFG_DEVCB_CHAIN_OUTPUT(DEVWRITELINE("ctc", z80ctc_device, trg2))
MCFG_DEVCB_CHAIN_OUTPUT(DEVWRITELINE("ctc", z80ctc_device, trg3))
//MCFG_DEVICE_ADD("uart_clock", CLOCK, 307200)
//MCFG_DEVCB_CHAIN_OUTPUT(DEVWRITELINE("uart", z80sio_device, txcb_w))
//MCFG_DEVCB_CHAIN_OUTPUT(DEVWRITELINE("uart", z80sio_device, rxcb_w))
MCFG_DEVICE_ADD("ctc", Z80CTC, XTAL_4MHz)
MCFG_Z80CTC_INTR_CB(INPUTLINE("maincpu", INPUT_LINE_IRQ0))
MCFG_Z80CTC_ZC1_CB(DEVWRITELINE("uart", z80sio_device, txca_w))
@ -330,7 +348,7 @@ static MACHINE_CONFIG_START( uts20 )
/* Sound */
MCFG_SPEAKER_STANDARD_MONO("mono")
MCFG_SOUND_ADD("beeper", BEEP, 950) // guess
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.10)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.05)
MACHINE_CONFIG_END
@ -346,6 +364,40 @@ ROM_START( uts20 )
/* 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)
ROM_END
/* Driver */