From 23b127fc6413eaea87304a6decbdcf82ef79873a Mon Sep 17 00:00:00 2001 From: Robbbert Date: Fri, 24 Nov 2017 02:44:31 +1100 Subject: [PATCH] (nw) uts20 : added graphics for corner characters, SOE and cursor. --- src/mame/drivers/univac.cpp | 74 +++++++++++++++++++++++++++++++------ 1 file changed, 63 insertions(+), 11 deletions(-) diff --git a/src/mame/drivers/univac.cpp b/src/mame/drivers/univac.cpp index 875f25495c7..74b79251466 100644 --- a/src/mame/drivers/univac.cpp +++ b/src/mame/drivers/univac.cpp @@ -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 m_maincpu; + required_device m_maincpu; required_device m_nvram; required_device m_ctc; required_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 */