mirror of
https://github.com/holub/mame
synced 2025-10-05 08:41:31 +03:00
(nw) uts20 : added graphics for corner characters, SOE and cursor.
This commit is contained in:
parent
f3236fc081
commit
23b127fc64
@ -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 */
|
||||||
|
Loading…
Reference in New Issue
Block a user