(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 Univac Terminals
2009-05-25 Skeleton driver
The terminals are models UTS20, UTS30, UTS40, UTS50 and SVT1120, The terminals are models UTS20, UTS30, UTS40, UTS50 and SVT1120,
however only the UTS20 is dumped (program roms only). 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 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 buttons. Thus the user can have two sessions open at once, to different
@ -43,7 +47,7 @@ Notes:
#include "speaker.h" #include "speaker.h"
#define LOG_GENERAL (1U << 0) #define LOG_GENERAL (1U << 0)
#define LOG_PARITY (1U << 1) #define LOG_PARITY (1U << 1)
//#define VERBOSE (LOG_GENERAL | LOG_PARITY) //#define VERBOSE (LOG_GENERAL | LOG_PARITY)
#include "logmacro.h" #include "logmacro.h"
@ -88,7 +92,7 @@ protected:
virtual void device_post_load() override; virtual void device_post_load() override;
private: private:
required_device<cpu_device> m_maincpu; required_device<cpu_device> m_maincpu;
required_device<nvram_device> m_nvram; required_device<nvram_device> m_nvram;
required_device<z80ctc_device> m_ctc; required_device<z80ctc_device> m_ctc;
required_device<z80sio_device> m_uart; 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) uint32_t univac_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{ {
uint8_t y,ra,chr,gfx; uint8_t y,ra,chr,gfx;
uint16_t sy=0,ma=0,x; uint16_t sy=0,x,ma=0; //m_bank_mask; (it isn't port43 that selects the screen)
uint8_t *videoram = m_p_videoram;//^ m_bank_mask;
m_framecnt++; 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++) for (x = ma; x < ma + 80; x++)
{ {
chr = videoram[x]; chr = m_p_videoram[x];
/* Take care of 'corner' characters */ /* Take care of 'corner' characters */
if (((chr == 0x1c) || (chr == 0x1d)) && (m_framecnt & 16)) 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; 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[] = static const z80_daisy_config daisy_chain[] =
{ {
{ "uart" }, { "uart" },
@ -301,6 +322,7 @@ static MACHINE_CONFIG_START( uts20 )
MCFG_SCREEN_VISIBLE_AREA(0, 639, 0, 249) MCFG_SCREEN_VISIBLE_AREA(0, 639, 0, 249)
MCFG_SCREEN_PALETTE("palette") MCFG_SCREEN_PALETTE("palette")
MCFG_PALETTE_ADD_MONOCHROME("palette") MCFG_PALETTE_ADD_MONOCHROME("palette")
MCFG_GFXDECODE_ADD("gfxdecode", "palette", c10)
MCFG_NVRAM_ADD_1FILL("nvram") 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, trg2))
MCFG_DEVCB_CHAIN_OUTPUT(DEVWRITELINE("ctc", z80ctc_device, trg3)) 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_DEVICE_ADD("ctc", Z80CTC, XTAL_4MHz)
MCFG_Z80CTC_INTR_CB(INPUTLINE("maincpu", INPUT_LINE_IRQ0)) MCFG_Z80CTC_INTR_CB(INPUTLINE("maincpu", INPUT_LINE_IRQ0))
MCFG_Z80CTC_ZC1_CB(DEVWRITELINE("uart", z80sio_device, txca_w)) MCFG_Z80CTC_ZC1_CB(DEVWRITELINE("uart", z80sio_device, txca_w))
@ -330,7 +348,7 @@ static MACHINE_CONFIG_START( uts20 )
/* Sound */ /* Sound */
MCFG_SPEAKER_STANDARD_MONO("mono") MCFG_SPEAKER_STANDARD_MONO("mono")
MCFG_SOUND_ADD("beeper", BEEP, 950) // guess 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 MACHINE_CONFIG_END
@ -346,6 +364,40 @@ ROM_START( uts20 )
/* character generator not dumped, using the one from 'c10' for now */ /* character generator not dumped, using the one from 'c10' for now */
ROM_REGION( 0x2000, "chargen", 0 ) ROM_REGION( 0x2000, "chargen", 0 )
ROM_LOAD("c10_char.bin", 0x0000, 0x2000, BAD_DUMP CRC(cb530b6f) SHA1(95590bbb433db9c4317f535723b29516b9b9fcbf) ) 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 ROM_END
/* Driver */ /* Driver */