Previous 15994 Revisions Next

r11090 Wednesday 6th April, 2011 at 13:19:40 UTC by Robbbert
Modernised and / or minor adjustments.
[src/mess/drivers]68ksbc.c altair.c ccs2422.c cd2650.c k8915.c mccpm.c pcm.c pdp11.c phunsy.c qtsbc.c sun1.c univac.c

src/mess/drivers/phunsy.c
r11089r11090
3737   DECLARE_WRITE8_MEMBER( phunsy_1800_w );
3838   DECLARE_WRITE8_MEMBER( phunsy_ctrl_w );
3939   DECLARE_WRITE8_MEMBER( phunsy_data_w );
40   DECLARE_WRITE8_MEMBER( phunsy_kbd_put );
40   DECLARE_WRITE8_MEMBER( kbd_put );
4141   const UINT8   *m_p_videoram;
4242   const UINT8   *m_p_chargen;
4343   UINT8      m_data_out;
r11089r11090
170170INPUT_PORTS_END
171171
172172
173WRITE8_MEMBER( phunsy_state::phunsy_kbd_put )
173WRITE8_MEMBER( phunsy_state::kbd_put )
174174{
175175   m_keyboard_input = data;
176176}
177177
178178
179static GENERIC_TERMINAL_INTERFACE( phunsy_terminal_intf )
179static GENERIC_TERMINAL_INTERFACE( terminal_intf )
180180{
181   DEVCB_DRIVER_MEMBER(phunsy_state, phunsy_kbd_put)
181   DEVCB_DRIVER_MEMBER(phunsy_state, kbd_put)
182182};
183183
184184
r11089r11090
303303   MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50)
304304
305305   /* Devices */
306   MCFG_GENERIC_TERMINAL_ADD(TERMINAL_TAG,phunsy_terminal_intf)
306   MCFG_GENERIC_TERMINAL_ADD(TERMINAL_TAG, terminal_intf)
307307MACHINE_CONFIG_END
308308
309309
src/mess/drivers/qtsbc.c
r11089r11090
77    It expects a rom or similar at E377-up, so currently it crashes.
88
99****************************************************************************/
10#define ADDRESS_MAP_MODERN
1011
1112#include "emu.h"
1213#include "cpu/z80/z80.h"
1314#include "machine/terminal.h"
1415
16#define MACHINE_RESET_MEMBER(name) void name::machine_reset()
1517
1618class qtsbc_state : public driver_device
1719{
1820public:
1921   qtsbc_state(running_machine &machine, const driver_device_config_base &config)
20      : driver_device(machine, config) { }
22      : driver_device(machine, config),
23   m_maincpu(*this, "maincpu"),
24   m_terminal(*this, TERMINAL_TAG)
25   { }
2126
27   required_device<cpu_device> m_maincpu;
28   required_device<device_t> m_terminal;
29   DECLARE_READ8_MEMBER( qtsbc_06_r );
30   DECLARE_READ8_MEMBER( qtsbc_43_r );
31   DECLARE_WRITE8_MEMBER( kbd_put );
2232   UINT8 *m_ram;
2333   UINT8 m_term_data;
34   virtual void machine_reset();
2435};
2536
2637
27
28static WRITE8_HANDLER( qtsbc_06_w )
38READ8_MEMBER( qtsbc_state::qtsbc_06_r )
2939{
30   device_t *terminal = space->machine().device(TERMINAL_TAG);
31
32   terminal_write(terminal, 0, data);
33}
34
35static READ8_HANDLER( qtsbc_06_r )
36{
37   qtsbc_state *state = space->machine().driver_data<qtsbc_state>();
38   UINT8 ret = state->m_term_data;
39   state->m_term_data = 0;
40   UINT8 ret = m_term_data;
41   m_term_data = 0;
4042   return ret;
4143}
4244
43static READ8_HANDLER( qtsbc_43_r )
45READ8_MEMBER( qtsbc_state::qtsbc_43_r )
4446{
4547   return 0;
4648}
4749
48static ADDRESS_MAP_START(qtsbc_mem, AS_PROGRAM, 8)
50static ADDRESS_MAP_START(qtsbc_mem, AS_PROGRAM, 8, qtsbc_state)
4951   ADDRESS_MAP_UNMAP_HIGH
50   AM_RANGE( 0x0000, 0xffff ) AM_RAM AM_BASE_MEMBER(qtsbc_state, m_ram) AM_REGION("maincpu",0)
52   AM_RANGE( 0x0000, 0xffff ) AM_RAM AM_BASE(m_ram) AM_REGION("maincpu", 0)
5153ADDRESS_MAP_END
5254
53static ADDRESS_MAP_START( qtsbc_io , AS_IO, 8)
55static ADDRESS_MAP_START( qtsbc_io, AS_IO, 8, qtsbc_state)
5456   ADDRESS_MAP_UNMAP_HIGH
5557   ADDRESS_MAP_GLOBAL_MASK(0xff)
56   AM_RANGE(0x06, 0x06) AM_READWRITE(qtsbc_06_r,qtsbc_06_w)
58   AM_RANGE(0x06, 0x06) AM_READ(qtsbc_06_r) AM_DEVWRITE_LEGACY(TERMINAL_TAG, terminal_write)
5759   AM_RANGE(0x43, 0x43) AM_READ(qtsbc_43_r)
5860ADDRESS_MAP_END
5961
r11089r11090
6264INPUT_PORTS_END
6365
6466
65static MACHINE_RESET(qtsbc)
67MACHINE_RESET_MEMBER(qtsbc_state)
6668{
67   qtsbc_state *state = machine.driver_data<qtsbc_state>();
68   UINT8* bios = machine.region("maincpu")->base()+0x10000;
69   memcpy(state->m_ram,bios, 0x800);
69   UINT8* bios = m_machine.region("maincpu")->base()+0x10000;
70   memcpy(m_ram, bios, 0x800);
7071}
7172
72static WRITE8_DEVICE_HANDLER( qtsbc_kbd_put )
73WRITE8_MEMBER( qtsbc_state::kbd_put )
7374{
74   qtsbc_state *state = device->machine().driver_data<qtsbc_state>();
75   state->m_term_data = data;
75   m_term_data = data;
7676}
7777
78static GENERIC_TERMINAL_INTERFACE( qtsbc_terminal_intf )
78static GENERIC_TERMINAL_INTERFACE( terminal_intf )
7979{
80   DEVCB_HANDLER(qtsbc_kbd_put)
80   DEVCB_DRIVER_MEMBER(qtsbc_state, kbd_put)
8181};
8282
8383static MACHINE_CONFIG_START( qtsbc, qtsbc_state )
r11089r11090
8686   MCFG_CPU_PROGRAM_MAP(qtsbc_mem)
8787   MCFG_CPU_IO_MAP(qtsbc_io)
8888
89   MCFG_MACHINE_RESET(qtsbc)
90
9189   /* video hardware */
9290   MCFG_FRAGMENT_ADD( generic_terminal )
93
94   MCFG_GENERIC_TERMINAL_ADD(TERMINAL_TAG, qtsbc_terminal_intf)
91   MCFG_GENERIC_TERMINAL_ADD(TERMINAL_TAG, terminal_intf)
9592MACHINE_CONFIG_END
9693
9794/* ROM definition */
src/mess/drivers/ccs2422.c
r11089r11090
55        11/12/2009 Skeleton driver.
66
77****************************************************************************/
8#define ADDRESS_MAP_MODERN
89
910#include "emu.h"
1011#include "cpu/z80/z80.h"
1112#include "machine/terminal.h"
1213
14#define MACHINE_RESET_MEMBER(name) void name::machine_reset()
1315
1416class ccs2422_state : public driver_device
1517{
1618public:
1719   ccs2422_state(running_machine &machine, const driver_device_config_base &config)
18      : driver_device(machine, config) { }
20      : driver_device(machine, config),
21   m_maincpu(*this, "maincpu"),
22   m_terminal(*this, TERMINAL_TAG)
23   { }
1924
25   required_device<cpu_device> m_maincpu;
26   required_device<device_t> m_terminal;
27   DECLARE_READ8_MEMBER( ccs2422_10_r );
28   DECLARE_READ8_MEMBER( ccs2422_11_r );
29   DECLARE_WRITE8_MEMBER( ccs2422_10_w );
30   DECLARE_WRITE8_MEMBER( kbd_put );
2031   UINT8 *m_ccs_ram;
2132   UINT8 m_term_data;
33   virtual void machine_reset();
2234};
2335
2436
25static READ8_HANDLER( ccs2422_10_r )
37READ8_MEMBER( ccs2422_state::ccs2422_10_r )
2638{
27   ccs2422_state *state = space->machine().driver_data<ccs2422_state>();
28   UINT8 ret = state->m_term_data;
29   state->m_term_data = 0;
39   UINT8 ret = m_term_data;
40   m_term_data = 0;
3041   return ret;
3142}
3243
33static READ8_HANDLER( ccs2422_11_r )
44READ8_MEMBER( ccs2422_state::ccs2422_11_r )
3445{
35   ccs2422_state *state = space->machine().driver_data<ccs2422_state>();
36   return 4 | ((state->m_term_data) ? 1 : 0);
46   return 4 | (m_term_data ? 1 : 0);
3747}
3848
39static WRITE8_HANDLER(ccs2422_10_w)
49WRITE8_MEMBER( ccs2422_state::ccs2422_10_w )
4050{
41   device_t *devconf = space->machine().device(TERMINAL_TAG);
42   terminal_write(devconf,0,data & 0x7f);
51   terminal_write(m_terminal, 0, data & 0x7f);
4352}
4453
45static ADDRESS_MAP_START(ccs2422_mem, AS_PROGRAM, 8)
54static ADDRESS_MAP_START(ccs2422_mem, AS_PROGRAM, 8, ccs2422_state)
4655   ADDRESS_MAP_UNMAP_HIGH
47   AM_RANGE(0x0000, 0xffff) AM_RAM AM_BASE_MEMBER(ccs2422_state, m_ccs_ram)
56   AM_RANGE(0x0000, 0xffff) AM_RAM AM_BASE(m_ccs_ram)
4857ADDRESS_MAP_END
4958
50static ADDRESS_MAP_START( ccs2422_io , AS_IO, 8)
59static ADDRESS_MAP_START( ccs2422_io, AS_IO, 8, ccs2422_state)
5160   ADDRESS_MAP_UNMAP_HIGH
5261   ADDRESS_MAP_GLOBAL_MASK(0xff)
5362   AM_RANGE(0x10, 0x10) AM_READWRITE(ccs2422_10_r,ccs2422_10_w)
r11089r11090
5968INPUT_PORTS_END
6069
6170
62static MACHINE_RESET(ccs2422)
71MACHINE_RESET_MEMBER(ccs2422_state)
6372{
64   ccs2422_state *state = machine.driver_data<ccs2422_state>();
65   UINT8* user1 = machine.region("user1")->base();
66   memcpy((UINT8*)state->m_ccs_ram,user1,0x0800);
73   UINT8* user1 = m_machine.region("user1")->base();
74   memcpy((UINT8*)m_ccs_ram, user1, 0x0800);
6775
6876   // this should be rom/ram banking
6977}
7078
71static WRITE8_DEVICE_HANDLER( ccs2422_kbd_put )
79WRITE8_MEMBER( ccs2422_state::kbd_put )
7280{
73   ccs2422_state *state = device->machine().driver_data<ccs2422_state>();
74   state->m_term_data = data;
81   m_term_data = data;
7582}
7683
77static GENERIC_TERMINAL_INTERFACE( ccs2422_terminal_intf )
84static GENERIC_TERMINAL_INTERFACE( terminal_intf )
7885{
79   DEVCB_HANDLER(ccs2422_kbd_put)
86   DEVCB_DRIVER_MEMBER(ccs2422_state, kbd_put)
8087};
8188
8289static MACHINE_CONFIG_START( ccs2422, ccs2422_state )
r11089r11090
8592   MCFG_CPU_PROGRAM_MAP(ccs2422_mem)
8693   MCFG_CPU_IO_MAP(ccs2422_io)
8794
88   MCFG_MACHINE_RESET(ccs2422)
89
9095   /* video hardware */
9196   MCFG_FRAGMENT_ADD( generic_terminal )
92   MCFG_GENERIC_TERMINAL_ADD(TERMINAL_TAG,ccs2422_terminal_intf)
97   MCFG_GENERIC_TERMINAL_ADD(TERMINAL_TAG, terminal_intf)
9398MACHINE_CONFIG_END
9499
95100/* ROM definition */
src/mess/drivers/mccpm.c
r11089r11090
66        18/11/2010 Connected to a terminal
77
88****************************************************************************/
9#define ADDRESS_MAP_MODERN
910
1011#include "emu.h"
1112#include "cpu/z80/z80.h"
1213#include "machine/terminal.h"
1314
15#define MACHINE_RESET_MEMBER(name) void name::machine_reset()
1416
1517class mccpm_state : public driver_device
1618{
1719public:
1820   mccpm_state(running_machine &machine, const driver_device_config_base &config)
19      : driver_device(machine, config) { }
21      : driver_device(machine, config),
22   m_maincpu(*this, "maincpu"),
23   m_terminal(*this, TERMINAL_TAG)
24   { }
2025
26   required_device<cpu_device> m_maincpu;
27   required_device<device_t> m_terminal;
28   DECLARE_READ8_MEMBER( mccpm_f0_r );
29   DECLARE_WRITE8_MEMBER( kbd_put );
2130   UINT8 *m_ram;
2231   UINT8 m_term_data;
32   virtual void machine_reset();
2333};
2434
2535
2636
27static WRITE8_HANDLER( mccpm_f0_w )
37READ8_MEMBER( mccpm_state::mccpm_f0_r )
2838{
29   device_t *terminal = space->machine().device(TERMINAL_TAG);
30
31   terminal_write(terminal, 0, data);
32}
33
34static READ8_HANDLER( mccpm_f0_r )
35{
36   mccpm_state *state = space->machine().driver_data<mccpm_state>();
37   UINT8 ret = state->m_term_data;
38   state->m_term_data = 0;
39   UINT8 ret = m_term_data;
40   m_term_data = 0;
3941   return ret;
4042}
4143
42static ADDRESS_MAP_START(mccpm_mem, AS_PROGRAM, 8)
44static ADDRESS_MAP_START(mccpm_mem, AS_PROGRAM, 8, mccpm_state)
4345   ADDRESS_MAP_UNMAP_HIGH
44   AM_RANGE(0x0000, 0xffff) AM_RAM AM_BASE_MEMBER(mccpm_state, m_ram)
46   AM_RANGE(0x0000, 0xffff) AM_RAM AM_BASE(m_ram)
4547ADDRESS_MAP_END
4648
47static ADDRESS_MAP_START( mccpm_io , AS_IO, 8)
49static ADDRESS_MAP_START( mccpm_io, AS_IO, 8, mccpm_state)
4850   ADDRESS_MAP_UNMAP_HIGH
4951   ADDRESS_MAP_GLOBAL_MASK(0xff)
50   AM_RANGE(0xf0, 0xf0) AM_READWRITE(mccpm_f0_r,mccpm_f0_w)
52   AM_RANGE(0xf0, 0xf0) AM_READ(mccpm_f0_r) AM_DEVWRITE_LEGACY(TERMINAL_TAG, terminal_write)
5153ADDRESS_MAP_END
5254
5355/* Input ports */
r11089r11090
5557INPUT_PORTS_END
5658
5759
58static MACHINE_RESET(mccpm)
60MACHINE_RESET_MEMBER(mccpm_state)
5961{
60   mccpm_state *state = machine.driver_data<mccpm_state>();
61   UINT8* bios = machine.region("maincpu")->base();
62
63   memcpy(state->m_ram,bios, 0x1000);
62   UINT8* bios = m_machine.region("maincpu")->base();
63   memcpy(m_ram, bios, 0x1000);
6464}
6565
66static WRITE8_DEVICE_HANDLER( mccpm_kbd_put )
66WRITE8_MEMBER( mccpm_state::kbd_put )
6767{
68   mccpm_state *state = device->machine().driver_data<mccpm_state>();
69   state->m_term_data = data;
68   m_term_data = data;
7069}
7170
72static GENERIC_TERMINAL_INTERFACE( mccpm_terminal_intf )
71static GENERIC_TERMINAL_INTERFACE( terminal_intf )
7372{
74   DEVCB_HANDLER(mccpm_kbd_put)
73   DEVCB_DRIVER_MEMBER(mccpm_state, kbd_put)
7574};
7675
7776static MACHINE_CONFIG_START( mccpm, mccpm_state )
r11089r11090
8079   MCFG_CPU_PROGRAM_MAP(mccpm_mem)
8180   MCFG_CPU_IO_MAP(mccpm_io)
8281
83   MCFG_MACHINE_RESET(mccpm)
84
8582   /* video hardware */
8683   MCFG_FRAGMENT_ADD( generic_terminal )
87
88   MCFG_GENERIC_TERMINAL_ADD(TERMINAL_TAG, mccpm_terminal_intf)
84   MCFG_GENERIC_TERMINAL_ADD(TERMINAL_TAG, terminal_intf)
8985MACHINE_CONFIG_END
9086
9187/* ROM definition */
r11089r11090
9793/* Driver */
9894
9995/*    YEAR  NAME    PARENT  COMPAT   MACHINE    INPUT    INIT    COMPANY   FULLNAME       FLAGS */
100COMP( 1981, mccpm,  0,       0,       mccpm,   mccpm,    0,     "GRAF Elektronik Systeme GmbH",   "mc-CP/M-Computer",      GAME_NOT_WORKING | GAME_NO_SOUND)
96COMP( 1981, mccpm,  0,       0,      mccpm,     mccpm,    0, "GRAF Elektronik Systeme GmbH", "mc-CP/M-Computer",   GAME_NOT_WORKING | GAME_NO_SOUND)
10197
src/mess/drivers/k8915.c
r11089r11090
77        When it says DIAGNOSTIC RAZ P, press enter.
88
99****************************************************************************/
10#define ADDRESS_MAP_MODERN
1011
1112#include "emu.h"
1213#include "cpu/z80/z80.h"
1314#include "machine/terminal.h"
1415
16#define MACHINE_RESET_MEMBER(name) void name::machine_reset()
17#define VIDEO_START_MEMBER(name) void name::video_start()
18#define SCREEN_UPDATE_MEMBER(name) bool name::screen_update(screen_device &screen, bitmap_t &bitmap, const rectangle &cliprect)
1519
1620class k8915_state : public driver_device
1721{
1822public:
1923   k8915_state(running_machine &machine, const driver_device_config_base &config)
20      : driver_device(machine, config) { }
24      : driver_device(machine, config),
25   m_maincpu(*this, "maincpu"),
26   m_terminal(*this, TERMINAL_TAG)
27   { }
2128
22   UINT8 *m_videoram;
23   UINT8 *m_charrom;
29   required_device<cpu_device> m_maincpu;
30   required_device<device_t> m_terminal;
31   DECLARE_READ8_MEMBER( k8915_52_r );
32   DECLARE_READ8_MEMBER( k8915_53_r );
33   DECLARE_WRITE8_MEMBER( k8915_a8_w );
34   DECLARE_WRITE8_MEMBER( kbd_put );
35   UINT8 *m_p_videoram;
36   UINT8 *m_p_chargen;
2437   UINT8 m_framecnt;
2538   UINT8 m_term_data;
26   UINT8 m_k8915_53;
39   virtual void machine_reset();
40   virtual void video_start();
41   virtual bool screen_update(screen_device &screen, bitmap_t &bitmap, const rectangle &cliprect);
2742};
2843
29static READ8_HANDLER( k8915_52_r )
44READ8_MEMBER( k8915_state::k8915_52_r )
3045{
3146// get data from ascii keyboard
32   k8915_state *state = space->machine().driver_data<k8915_state>();
33   state->m_k8915_53 = 0;
34   return state->m_term_data;
47   UINT8 ret = m_term_data;
48   m_term_data = 0;
49   return ret;
3550}
3651
37static READ8_HANDLER( k8915_53_r )
52READ8_MEMBER( k8915_state::k8915_53_r )
3853{
3954// keyboard status
40   k8915_state *state = space->machine().driver_data<k8915_state>();
41   return state->m_k8915_53;
55   return m_term_data ? 1 : 0;
4256}
4357
44static WRITE8_HANDLER( k8915_a8_w )
58WRITE8_MEMBER( k8915_state::k8915_a8_w )
4559{
4660// seems to switch ram and rom around.
4761   if (data == 0x87)
48      memory_set_bank(space->machine(), "boot", 0); // ram at 0000
62      memory_set_bank(machine(), "boot", 0); // ram at 0000
4963   else
50      memory_set_bank(space->machine(), "boot", 1); // rom at 0000
64      memory_set_bank(machine(), "boot", 1); // rom at 0000
5165}
5266
53static ADDRESS_MAP_START(k8915_mem, AS_PROGRAM, 8)
67static ADDRESS_MAP_START(k8915_mem, AS_PROGRAM, 8, k8915_state)
5468   ADDRESS_MAP_UNMAP_HIGH
5569   AM_RANGE(0x0000, 0x0fff) AM_RAMBANK("boot")
56   AM_RANGE(0x1000, 0x17ff) AM_RAM AM_BASE_MEMBER(k8915_state, m_videoram)
70   AM_RANGE(0x1000, 0x17ff) AM_RAM AM_BASE(m_p_videoram)
5771   AM_RANGE(0x1800, 0xffff) AM_RAM
5872ADDRESS_MAP_END
5973
60static ADDRESS_MAP_START( k8915_io, AS_IO, 8 )
74static ADDRESS_MAP_START(k8915_io, AS_IO, 8, k8915_state)
6175   ADDRESS_MAP_GLOBAL_MASK(0xff)
6276   AM_RANGE(0x52, 0x52) AM_READ(k8915_52_r)
6377   AM_RANGE(0x53, 0x53) AM_READ(k8915_53_r)
r11089r11090
6882static INPUT_PORTS_START( k8915 )
6983INPUT_PORTS_END
7084
71static MACHINE_RESET(k8915)
85MACHINE_RESET_MEMBER(k8915_state)
7286{
73   memory_set_bank(machine, "boot", 1);
87   memory_set_bank(m_machine, "boot", 1);
7488}
7589
7690static DRIVER_INIT(k8915)
r11089r11090
7993   memory_configure_bank(machine, "boot", 0, 2, &RAM[0x0000], 0x10000);
8094}
8195
82static VIDEO_START( k8915 )
96VIDEO_START_MEMBER( k8915_state )
8397{
84   k8915_state *state = machine.driver_data<k8915_state>();
85   state->m_charrom = machine.region("chargen")->base();
98   m_p_chargen = m_machine.region("chargen")->base();
8699}
87100
88static SCREEN_UPDATE( k8915 )
101SCREEN_UPDATE_MEMBER( k8915_state )
89102{
90   k8915_state *state = screen->machine().driver_data<k8915_state>();
91103   UINT8 y,ra,chr,gfx;
92104   UINT16 sy=0,ma=0,x;
93105
94   state->m_framecnt++;
106   m_framecnt++;
95107
96108   for (y = 0; y < 25; y++)
97109   {
98110      for (ra = 0; ra < 10; ra++)
99111      {
100         UINT16 *p = BITMAP_ADDR16(bitmap, sy++, 0);
112         UINT16 *p = BITMAP_ADDR16(&bitmap, sy++, 0);
101113
102114         for (x = ma; x < ma + 80; x++)
103115         {
r11089r11090
105117
106118            if (ra < 9)
107119            {
108               chr = state->m_videoram[x];
120               chr = m_p_videoram[x];
109121
110122               /* Take care of flashing characters */
111               if ((chr & 0x80) && (state->m_framecnt & 0x08))
123               if ((chr & 0x80) && (m_framecnt & 0x08))
112124                  chr = 0x20;
113125
114126               chr &= 0x7f;
115127
116               gfx = state->m_charrom[(chr<<4) | ra ];
128               gfx = m_p_chargen[(chr<<4) | ra ];
117129            }
118130
119131            /* Display a scanline of a character */
120            *p++ = ( gfx & 0x80 ) ? 1 : 0;
121            *p++ = ( gfx & 0x40 ) ? 1 : 0;
122            *p++ = ( gfx & 0x20 ) ? 1 : 0;
123            *p++ = ( gfx & 0x10 ) ? 1 : 0;
124            *p++ = ( gfx & 0x08 ) ? 1 : 0;
125            *p++ = ( gfx & 0x04 ) ? 1 : 0;
126            *p++ = ( gfx & 0x02 ) ? 1 : 0;
127            *p++ = ( gfx & 0x01 ) ? 1 : 0;
132            *p++ = BIT(gfx, 7);
133            *p++ = BIT(gfx, 6);
134            *p++ = BIT(gfx, 5);
135            *p++ = BIT(gfx, 4);
136            *p++ = BIT(gfx, 3);
137            *p++ = BIT(gfx, 2);
138            *p++ = BIT(gfx, 1);
139            *p++ = BIT(gfx, 0);
128140         }
129141      }
130142      ma+=80;
r11089r11090
132144   return 0;
133145}
134146
135PALETTE_INIT( k8915 )
147WRITE8_MEMBER( k8915_state::kbd_put )
136148{
137   palette_set_color(machine, 0, RGB_BLACK); /* black */
138   palette_set_color(machine, 1, MAKE_RGB(0, 220, 0)); /* green */
149   m_term_data = data;
139150}
140151
141static WRITE8_DEVICE_HANDLER( k8915_kbd_put )
152static GENERIC_TERMINAL_INTERFACE( terminal_intf )
142153{
143   k8915_state *state = device->machine().driver_data<k8915_state>();
144   state->m_term_data = data;
145   state->m_k8915_53 = 1;
146}
147
148static GENERIC_TERMINAL_INTERFACE( k8915_terminal_intf )
149{
150   DEVCB_HANDLER(k8915_kbd_put)
154   DEVCB_DRIVER_MEMBER(k8915_state, kbd_put)
151155};
152156
153157static MACHINE_CONFIG_START( k8915, k8915_state )
r11089r11090
156160   MCFG_CPU_PROGRAM_MAP(k8915_mem)
157161   MCFG_CPU_IO_MAP(k8915_io)
158162
159   MCFG_MACHINE_RESET(k8915)
160
161163   /* video hardware */
162164   MCFG_SCREEN_ADD("screen", RASTER)
163165   MCFG_SCREEN_REFRESH_RATE(60)
r11089r11090
165167   MCFG_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16)
166168   MCFG_SCREEN_SIZE(640, 250)
167169   MCFG_SCREEN_VISIBLE_AREA(0, 639, 0, 249)
168   MCFG_SCREEN_UPDATE(k8915)
169
170170   MCFG_PALETTE_LENGTH(2)
171   MCFG_PALETTE_INIT(k8915)
171   MCFG_PALETTE_INIT(monochrome_green)
172172
173   MCFG_VIDEO_START(k8915)
174
175   MCFG_GENERIC_TERMINAL_ADD(TERMINAL_TAG, k8915_terminal_intf) // keyboard only
173   MCFG_GENERIC_TERMINAL_ADD(TERMINAL_TAG, terminal_intf) // keyboard only
176174MACHINE_CONFIG_END
177175
178176
r11089r11090
189187/* Driver */
190188
191189/*   YEAR  NAME    PARENT  COMPAT   MACHINE  INPUT  INIT        COMPANY   FULLNAME       FLAGS */
192COMP( 1982, k8915,  0,       0,    k8915,   k8915,    k8915,      "Robotron",   "K8915",      GAME_NOT_WORKING | GAME_NO_SOUND)
190COMP( 1982, k8915,  0,       0,    k8915,   k8915,    k8915, "Robotron",   "K8915", GAME_NOT_WORKING | GAME_NO_SOUND)
src/mess/drivers/pdp11.c
r11089r11090
55        23/02/2009 Skeleton driver.
66
77****************************************************************************/
8#define ADDRESS_MAP_MODERN
89
910#include "emu.h"
1011#include "cpu/t11/t11.h"
r11089r11090
1415{
1516public:
1617   pdp11_state(running_machine &machine, const driver_device_config_base &config)
17      : driver_device(machine, config) { }
18     
18      : driver_device(machine, config),
19   m_maincpu(*this, "maincpu"),
20   m_terminal(*this, TERMINAL_TAG)
21   { }
22
23   required_device<cpu_device> m_maincpu;
24   required_device<device_t> m_terminal;
25   DECLARE_READ16_MEMBER( term_r );
26   DECLARE_READ16_MEMBER( term_tx_status_r );
27   DECLARE_READ16_MEMBER( term_rx_status_r );
28   DECLARE_WRITE16_MEMBER( term_w );
29   DECLARE_WRITE8_MEMBER( kbd_put );
1930   UINT8 m_term_data;
2031   UINT16 m_term_status;
2132};
2233
23static WRITE16_HANDLER(term_w)
34WRITE16_MEMBER(pdp11_state::term_w)
2435{
25   device_t *devconf = space->machine().device("terminal");
26   terminal_write(devconf,0,data);
36   terminal_write(m_terminal, 0, data);
2737}
2838
29static READ16_HANDLER(term_r)
39READ16_MEMBER(pdp11_state::term_r)
3040{
31   pdp11_state *state = space->machine().driver_data<pdp11_state>();
32   state->m_term_status = 0x0000;
33   return state->m_term_data;
41   m_term_status = 0x0000;
42   return m_term_data;
3443}
3544
36static READ16_HANDLER(term_tx_status_r)
45READ16_MEMBER(pdp11_state::term_tx_status_r)
3746{   // always ready
3847   return 0xffff;
3948}
4049
41static READ16_HANDLER(term_rx_status_r)
50READ16_MEMBER(pdp11_state::term_rx_status_r)
4251{   
43   pdp11_state *state = space->machine().driver_data<pdp11_state>();
44   return state->m_term_status;
52   return m_term_status;
4553}
4654
47static ADDRESS_MAP_START(pdp11_mem, AS_PROGRAM, 16)
55static ADDRESS_MAP_START(pdp11_mem, AS_PROGRAM, 16, pdp11_state)
4856   ADDRESS_MAP_UNMAP_HIGH
4957   AM_RANGE( 0x0000, 0xdfff ) AM_RAM  // RAM
5058   AM_RANGE( 0xea00, 0xfeff ) AM_ROM
r11089r11090
5462   AM_RANGE( 0xff76, 0xff77 ) AM_WRITE(term_w)
5563ADDRESS_MAP_END
5664
57static ADDRESS_MAP_START(pdp11qb_mem, AS_PROGRAM, 16)
65static ADDRESS_MAP_START(pdp11qb_mem, AS_PROGRAM, 16, pdp11_state)
5866   ADDRESS_MAP_UNMAP_HIGH
5967   AM_RANGE( 0x0000, 0xe9ff ) AM_RAM  // RAM
6068   AM_RANGE( 0xea00, 0xefff ) AM_ROM
r11089r11090
6270ADDRESS_MAP_END
6371
6472/* Input ports */
65INPUT_PORTS_START( pdp11 )
66   PORT_INCLUDE(generic_terminal)
73static INPUT_PORTS_START( pdp11 )
6774INPUT_PORTS_END
6875
6976
r11089r11090
133140{
134141   0 << 13
135142};
136static WRITE8_DEVICE_HANDLER( pdp_kbd_put )
143
144WRITE8_MEMBER( pdp11_state::kbd_put )
137145{
138   pdp11_state *state = device->machine().driver_data<pdp11_state>();
139   state->m_term_data = data;
140   state->m_term_status = 0xffff;
146   m_term_data = data;
147   m_term_status = 0xffff;
141148}
142149
143static GENERIC_TERMINAL_INTERFACE( pdp_terminal_intf )
150static GENERIC_TERMINAL_INTERFACE( terminal_intf )
144151{
145   DEVCB_HANDLER(pdp_kbd_put)
152   DEVCB_DRIVER_MEMBER(pdp11_state, kbd_put)
146153};
147154
148155static MACHINE_CONFIG_START( pdp11, pdp11_state )
149    /* basic machine hardware */
150    MCFG_CPU_ADD("maincpu",T11, XTAL_4MHz) // Need proper CPU here
156   /* basic machine hardware */
157   MCFG_CPU_ADD("maincpu",T11, XTAL_4MHz) // Need proper CPU here
151158   MCFG_CPU_CONFIG(pdp11_data)
152    MCFG_CPU_PROGRAM_MAP(pdp11_mem)
159   MCFG_CPU_PROGRAM_MAP(pdp11_mem)
153160
154    MCFG_MACHINE_RESET(pdp11)
161   MCFG_MACHINE_RESET(pdp11)
155162   
156    /* video hardware */
163   /* video hardware */
157164   MCFG_FRAGMENT_ADD( generic_terminal )
158   MCFG_GENERIC_TERMINAL_ADD(TERMINAL_TAG,pdp_terminal_intf)
165   MCFG_GENERIC_TERMINAL_ADD(TERMINAL_TAG, terminal_intf)
159166MACHINE_CONFIG_END
160167
161168static MACHINE_CONFIG_DERIVED( pdp11ub2, pdp11 )
162    MCFG_MACHINE_RESET(pdp11ub2)
169   MCFG_MACHINE_RESET(pdp11ub2)
163170MACHINE_CONFIG_END
164171
165172static MACHINE_CONFIG_DERIVED( pdp11qb, pdp11 )
166    MCFG_MACHINE_RESET(pdp11qb)
173   MCFG_MACHINE_RESET(pdp11qb)
167174   
168175   MCFG_CPU_MODIFY("maincpu")
169176   MCFG_CPU_CONFIG(mxv11_data)
r11089r11090
172179
173180/* ROM definition */
174181ROM_START( pdp11ub )
175    ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASEFF )   
182   ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASEFF )   
176183   ROM_REGION( 0x1000, "user1", ROMREGION_ERASEFF )
177184   ROM_LOAD( "23-034a9.bin", 0x0000, 0x0200, CRC(01c5d78d) SHA1(b447c67bfd5134c142240a919f23a949e1953fb2))
178185   ROM_LOAD( "23-035a9.bin", 0x0200, 0x0200, CRC(c456df6c) SHA1(188c8ece6a2d67911016f55dd22b698a40aff515))
r11089r11090
181188ROM_END
182189
183190ROM_START( pdp11ub2 )
184    ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASEFF )   
191   ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASEFF )   
185192   ROM_REGION( 0x1000, "user1", ROMREGION_ERASEFF )
186193   ROM_LOAD( "23-248f1.bin", 0x0000, 0x0400, CRC(ecda1a6d) SHA1(b2bf770dda349fdd469235871564280baf06301d))
187194   //ROM_LOAD( "23-616f1-1666.bin", 0x0000, 0x0400, CRC(a3dfb5aa) SHA1(7f06c624ae3fbb49535258b8722b5a3c548da3ba))
188195ROM_END
189196
190197ROM_START( pdp11qb )
191    ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASEFF )   
198   ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASEFF )   
192199   ROM_LOAD16_BYTE( "m7195fa.1", 0xc000, 0x2000, CRC(0fa58752) SHA1(4bcd006790a60f2998ee8377ac5e2c18ef330930))
193200   ROM_LOAD16_BYTE( "m7195fa.2", 0xc001, 0x2000, CRC(15b6f60c) SHA1(80dd4f8ca3c27babb5e75111b04241596a07c53a))
194201ROM_END
src/mess/drivers/univac.c
r11089r11090
55    The terminals are models UTS20, UTS30, UTS40, UTS50 and SVT1120,
66    however only the UTS20 is dumped (program roms only).
77
8    25/05/2009 Skeleton driver [Robbbert].
8    25/05/2009 Skeleton driver
99
1010    The terminal has 2 screens selectable by the operator with the Fn + 1-2
1111    buttons. Thus the user can have two sessions open at once, to different
src/mess/drivers/68ksbc.c
r11089r11090
4545   DECLARE_READ16_MEMBER( c68ksbc_status_r );
4646   DECLARE_READ16_MEMBER( c68ksbc_terminal_r );
4747   DECLARE_WRITE16_MEMBER( c68ksbc_terminal_w );
48   DECLARE_WRITE8_MEMBER( c68ksbc_kbd_put );
48   DECLARE_WRITE8_MEMBER( kbd_put );
4949   UINT8 m_term_data;
5050};
5151
r11089r11090
8989{
9090}
9191
92WRITE8_MEMBER( c68ksbc_state::c68ksbc_kbd_put )
92WRITE8_MEMBER( c68ksbc_state::kbd_put )
9393{
9494   m_term_data = data;
9595}
9696
97static GENERIC_TERMINAL_INTERFACE( c68ksbc_terminal_intf )
97static GENERIC_TERMINAL_INTERFACE( terminal_intf )
9898{
99   DEVCB_DRIVER_MEMBER(c68ksbc_state, c68ksbc_kbd_put)
99   DEVCB_DRIVER_MEMBER(c68ksbc_state, kbd_put)
100100};
101101
102102static MACHINE_CONFIG_START( c68ksbc, c68ksbc_state )
r11089r11090
105105   MCFG_CPU_PROGRAM_MAP(c68ksbc_mem)
106106   MCFG_MACHINE_RESET(c68ksbc)
107107   MCFG_FRAGMENT_ADD( generic_terminal )
108   MCFG_GENERIC_TERMINAL_ADD(TERMINAL_TAG, c68ksbc_terminal_intf)
108   MCFG_GENERIC_TERMINAL_ADD(TERMINAL_TAG, terminal_intf)
109109MACHINE_CONFIG_END
110110
111111/* ROM definition */
src/mess/drivers/altair.c
r11089r11090
3636   DECLARE_READ8_MEMBER( sio_data_r );
3737   DECLARE_READ8_MEMBER( sio_key_status_r );
3838   DECLARE_WRITE8_MEMBER( sio_command_w );
39   DECLARE_WRITE8_MEMBER( altair_kbd_put );
39   DECLARE_WRITE8_MEMBER( kbd_put );
4040   UINT8 m_term_data;
4141   UINT8* m_ram;
4242};
r11089r11090
7777   ADDRESS_MAP_UNMAP_HIGH
7878   ADDRESS_MAP_GLOBAL_MASK(0xff)
7979   AM_RANGE( 0x00, 0x00 ) AM_READ(sio_key_status_r)
80   AM_RANGE( 0x01, 0x01 ) AM_MIRROR(0x10) AM_READ(sio_data_r)
81   AM_RANGE( 0x01, 0x01 ) AM_MIRROR(0x10) AM_DEVWRITE_LEGACY(TERMINAL_TAG, terminal_write)
80   AM_RANGE( 0x01, 0x01 ) AM_MIRROR(0x10) AM_READ(sio_data_r) AM_DEVWRITE_LEGACY(TERMINAL_TAG, terminal_write)
8281   AM_RANGE( 0x10, 0x10 ) AM_READWRITE(sio_status_r,sio_command_w)
8382ADDRESS_MAP_END
8483
r11089r11090
112111   state->m_term_data = 0;
113112}
114113
115WRITE8_MEMBER( altair_state::altair_kbd_put )
114WRITE8_MEMBER( altair_state::kbd_put )
116115{
117116   m_term_data = data;
118117}
119118
120119static GENERIC_TERMINAL_INTERFACE( altair_terminal_intf )
121120{
122   DEVCB_DRIVER_MEMBER(altair_state, altair_kbd_put)
121   DEVCB_DRIVER_MEMBER(altair_state, kbd_put)
123122};
124123
125124static MACHINE_CONFIG_START( altair, altair_state )
src/mess/drivers/cd2650.c
r11089r11090
2525        might possibly look like, but we DID NOT read the source code.
2626
2727****************************************************************************/
28#define ADDRESS_MAP_MODERN
2829
2930#include "emu.h"
3031#include "cpu/s2650/s2650.h"
3132#include "machine/terminal.h"
3233
34#define MACHINE_RESET_MEMBER(name) void name::machine_reset()
35#define VIDEO_START_MEMBER(name) void name::video_start()
36#define SCREEN_UPDATE_MEMBER(name) bool name::screen_update(screen_device &screen, bitmap_t &bitmap, const rectangle &cliprect)
3337
3438class cd2650_state : public driver_device
3539{
3640public:
3741   cd2650_state(running_machine &machine, const driver_device_config_base &config)
38      : driver_device(machine, config) { }
42      : driver_device(machine, config),
43   m_maincpu(*this, "maincpu"),
44   m_terminal(*this, TERMINAL_TAG)
45   { }
3946
40   const UINT8 *m_charrom;
41   const UINT8 *m_videoram;
47   required_device<cpu_device> m_maincpu;
48   required_device<device_t> m_terminal;
49   DECLARE_READ8_MEMBER( cd2650_keyin_r );
50   DECLARE_WRITE8_MEMBER( kbd_put );
51   const UINT8 *m_p_chargen;
52   const UINT8 *m_p_videoram;
4253   UINT8 m_term_data;
54   virtual void machine_reset();
55   virtual void video_start();
56   virtual bool screen_update(screen_device &screen, bitmap_t &bitmap, const rectangle &cliprect);
4357};
4458
4559
46static READ8_HANDLER( cd2650_keyin_r )
60READ8_MEMBER( cd2650_state::cd2650_keyin_r )
4761{
48   cd2650_state *state = space->machine().driver_data<cd2650_state>();
49   UINT8 ret = state->m_term_data;
50   state->m_term_data = 0x80;
62   UINT8 ret = m_term_data;
63   m_term_data = 0x80;
5164   if ((ret > 0x60) && (ret < 0x7b))
5265      ret -= 0x20; // upper case only
5366   return ret;
5467}
5568
56static ADDRESS_MAP_START(cd2650_mem, AS_PROGRAM, 8)
69static ADDRESS_MAP_START(cd2650_mem, AS_PROGRAM, 8, cd2650_state)
5770   ADDRESS_MAP_UNMAP_HIGH
5871   AM_RANGE( 0x0000, 0x03ff) AM_ROM
5972   AM_RANGE( 0x0400, 0x0fff) AM_RAM
60   AM_RANGE( 0x1000, 0x17ff) AM_RAM AM_BASE_MEMBER(cd2650_state, m_videoram)
73   AM_RANGE( 0x1000, 0x17ff) AM_RAM AM_BASE(m_p_videoram)
6174   AM_RANGE( 0x1800, 0x7fff) AM_RAM // expansion ram? the system doesn't use it
6275ADDRESS_MAP_END
6376
64static ADDRESS_MAP_START( cd2650_io , AS_IO, 8)
77static ADDRESS_MAP_START( cd2650_io, AS_IO, 8, cd2650_state)
6578   ADDRESS_MAP_UNMAP_HIGH
6679   AM_RANGE(S2650_DATA_PORT,S2650_DATA_PORT) AM_READ(cd2650_keyin_r)
6780   //AM_RANGE(S2650_SENSE_PORT, S2650_FO_PORT) AM_READWRITE(cd2650_cass_in,cd2650_cass_out)
r11089r11090
7285INPUT_PORTS_END
7386
7487
75static MACHINE_RESET(cd2650)
88MACHINE_RESET_MEMBER(cd2650_state)
7689{
77   cd2650_state *state = machine.driver_data<cd2650_state>();
78   state->m_term_data = 0x80;
90   m_term_data = 0x80;
7991}
8092
81static VIDEO_START( cd2650 )
93VIDEO_START_MEMBER(cd2650_state)
8294{
83   cd2650_state *state = machine.driver_data<cd2650_state>();
84   state->m_charrom = machine.region("chargen")->base();
95   m_p_chargen = m_machine.region("chargen")->base();
8596}
8697
87static SCREEN_UPDATE( cd2650 )
98SCREEN_UPDATE_MEMBER(cd2650_state)
8899{
89100/* The video is unusual in that the characters in each line are spaced at 16 bytes in memory,
90101    thus line 1 starts at 1000, line 2 at 1001, etc. There are 16 lines of 80 characters.
r11089r11090
92103    When the bottom of the screen is reached, it does not scroll, it just wraps around.
93104    There is no scroll register or any indication of how scrolling might be accomplished. */
94105
95   cd2650_state *state = screen->machine().driver_data<cd2650_state>();
96106   UINT16 offset = 0; // if we figure out how the scrolling works, that calculation goes here
97107   UINT8 y,ra,chr,gfx;
98108   UINT16 sy=0,x,mem;
r11089r11090
101111   {
102112      for (ra = 0; ra < 10; ra++)
103113      {
104         UINT16 *p = BITMAP_ADDR16(bitmap, sy++, 0);
114         UINT16 *p = BITMAP_ADDR16(&bitmap, sy++, 0);
105115
106116         for (x = 0; x < 80; x++)
107117         {
r11089r11090
113123               if (mem > 0x4ff)
114124                  mem -= 0x500;
115125
116               chr = state->m_videoram[mem];
126               chr = m_p_videoram[mem];
117127
118128               if (chr < 0x20)
119129                  chr |= 0x40;
120130
121               gfx = state->m_charrom[(chr<<4) | ra ];
131               gfx = m_p_chargen[(chr<<4) | ra ];
122132            }
123133
124134            /* Display a scanline of a character */
125            *p++ = ( gfx & 0x80 ) ? 1 : 0;
126            *p++ = ( gfx & 0x40 ) ? 1 : 0;
127            *p++ = ( gfx & 0x20 ) ? 1 : 0;
128            *p++ = ( gfx & 0x10 ) ? 1 : 0;
129            *p++ = ( gfx & 0x08 ) ? 1 : 0;
130            *p++ = ( gfx & 0x04 ) ? 1 : 0;
131            *p++ = ( gfx & 0x02 ) ? 1 : 0;
132            *p++ = ( gfx & 0x01 ) ? 1 : 0;
135            *p++ = BIT(gfx, 7);
136            *p++ = BIT(gfx, 6);
137            *p++ = BIT(gfx, 5);
138            *p++ = BIT(gfx, 4);
139            *p++ = BIT(gfx, 3);
140            *p++ = BIT(gfx, 2);
141            *p++ = BIT(gfx, 1);
142            *p++ = BIT(gfx, 0);
133143         }
134144      }
135145   }
136146   return 0;
137147}
138148
139static WRITE8_DEVICE_HANDLER( cd2650_kbd_put )
149WRITE8_MEMBER( cd2650_state::kbd_put )
140150{
141   cd2650_state *state = device->machine().driver_data<cd2650_state>();
142   state->m_term_data = data;
151   m_term_data = data;
143152}
144153
145static GENERIC_TERMINAL_INTERFACE( cd2650_terminal_intf )
154static GENERIC_TERMINAL_INTERFACE( terminal_intf )
146155{
147   DEVCB_HANDLER(cd2650_kbd_put)
156   DEVCB_DRIVER_MEMBER(cd2650_state, kbd_put)
148157};
149158
150159static MACHINE_CONFIG_START( cd2650, cd2650_state )
r11089r11090
153162   MCFG_CPU_PROGRAM_MAP(cd2650_mem)
154163   MCFG_CPU_IO_MAP(cd2650_io)
155164
156   MCFG_MACHINE_RESET(cd2650)
157
158165   /* video hardware */
159166   MCFG_SCREEN_ADD("screen", RASTER)
160167   MCFG_SCREEN_REFRESH_RATE(50)
r11089r11090
162169   MCFG_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16)
163170   MCFG_SCREEN_SIZE(640, 160)
164171   MCFG_SCREEN_VISIBLE_AREA(0, 639, 0, 159)
165   MCFG_SCREEN_UPDATE(cd2650)
166
167172   MCFG_PALETTE_LENGTH(2)
168173   MCFG_PALETTE_INIT(black_and_white)
169174
170   MCFG_VIDEO_START(cd2650)
171
172   MCFG_GENERIC_TERMINAL_ADD(TERMINAL_TAG, cd2650_terminal_intf) // keyboard only
175   MCFG_GENERIC_TERMINAL_ADD(TERMINAL_TAG, terminal_intf) // keyboard only
173176MACHINE_CONFIG_END
174177
175178/* ROM definition */
src/mess/drivers/sun1.c
r11089r11090
3333   required_device<device_t> m_terminal;
3434   DECLARE_READ16_MEMBER( sun1_upd7201_r );
3535   DECLARE_WRITE16_MEMBER( sun1_upd7201_w );
36   DECLARE_WRITE8_MEMBER( sun1_kbd_put );
36   DECLARE_WRITE8_MEMBER( kbd_put );
3737   virtual void machine_reset();
3838   UINT16* m_ram;
3939   UINT8 m_term_data;
r11089r11090
8686}
8787
8888
89WRITE8_MEMBER( sun1_state::sun1_kbd_put )
89WRITE8_MEMBER( sun1_state::kbd_put )
9090{
9191   m_term_data = data;
9292}
9393
94static GENERIC_TERMINAL_INTERFACE( sun1_terminal_intf )
94static GENERIC_TERMINAL_INTERFACE( terminal_intf )
9595{
96   DEVCB_DRIVER_MEMBER(sun1_state, sun1_kbd_put)
96   DEVCB_DRIVER_MEMBER(sun1_state, kbd_put)
9797};
9898
9999
r11089r11090
104104
105105   /* video hardware */
106106   MCFG_FRAGMENT_ADD( generic_terminal )
107   MCFG_GENERIC_TERMINAL_ADD(TERMINAL_TAG,sun1_terminal_intf)
107   MCFG_GENERIC_TERMINAL_ADD(TERMINAL_TAG, terminal_intf)
108108MACHINE_CONFIG_END
109109
110110/* ROM definition */
src/mess/drivers/pcm.c
r11089r11090
6464#include "sound/wave.h"
6565#include "machine/terminal.h"
6666
67#define MACHINE_RESET_MEMBER(name) void name::machine_reset()
68#define VIDEO_START_MEMBER(name) void name::video_start()
69#define SCREEN_UPDATE_MEMBER(name) bool name::screen_update(screen_device &screen, bitmap_t &bitmap, const rectangle &cliprect)
6770
6871class pcm_state : public driver_device
6972{
r11089r11090
9497   DECLARE_READ8_MEMBER( pcm_85_r );
9598   DECLARE_WRITE_LINE_MEMBER( pcm_82_w );
9699   DECLARE_WRITE8_MEMBER( pcm_85_w );
97   DECLARE_WRITE8_MEMBER( pcm_kbd_put );
98   UINT8 *m_videoram;
100   DECLARE_WRITE8_MEMBER( kbd_put );
101   UINT8 *m_p_chargen;
102   UINT8 *m_p_videoram;
99103   UINT8 m_term_data;
100104   UINT8 m_step;
101105   UINT8 m_85;
106   virtual void machine_reset();
107   virtual void video_start();
108   virtual bool screen_update(screen_device &screen, bitmap_t &bitmap, const rectangle &cliprect);
102109};
103110
104111
r11089r11090
165172   ADDRESS_MAP_UNMAP_HIGH
166173   AM_RANGE( 0x0000, 0x1fff ) AM_ROM  // ROM
167174   AM_RANGE( 0x2000, 0xf7ff ) AM_RAM  // RAM
168   AM_RANGE( 0xf800, 0xffff ) AM_RAM AM_BASE(m_videoram) // Video RAM
175   AM_RANGE( 0xf800, 0xffff ) AM_RAM AM_BASE(m_p_videoram) // Video RAM
169176ADDRESS_MAP_END
170177
171static ADDRESS_MAP_START( pcm_io, AS_IO, 8, pcm_state)
178static ADDRESS_MAP_START(pcm_io, AS_IO, 8, pcm_state)
172179   ADDRESS_MAP_UNMAP_HIGH
173180   ADDRESS_MAP_GLOBAL_MASK(0xff)
174181   AM_RANGE(0x80, 0x83) AM_DEVREADWRITE_LEGACY("z80ctc_s", z80ctc_r, z80ctc_w) // system CTC
r11089r11090
186193static INPUT_PORTS_START( pcm )
187194INPUT_PORTS_END
188195
189WRITE8_MEMBER( pcm_state::pcm_kbd_put )
196WRITE8_MEMBER( pcm_state::kbd_put )
190197{
191198   m_term_data = data;
192199   m_step = 0;
193200}
194201
195static GENERIC_TERMINAL_INTERFACE( pcm_terminal_intf )
202static GENERIC_TERMINAL_INTERFACE( terminal_intf )
196203{
197   DEVCB_DRIVER_MEMBER(pcm_state, pcm_kbd_put)
204   DEVCB_DRIVER_MEMBER(pcm_state, kbd_put)
198205};
199206
200static MACHINE_RESET(pcm)
207MACHINE_RESET_MEMBER(pcm_state)
201208{
202209}
203210
204static VIDEO_START( pcm )
211VIDEO_START_MEMBER( pcm_state )
205212{
213   m_p_chargen = machine().region("chargen")->base();
206214}
207215
208static SCREEN_UPDATE( pcm )
216SCREEN_UPDATE_MEMBER( pcm_state )
209217{
210   pcm_state *state = screen->machine().driver_data<pcm_state>();
211   UINT8 code;
212   UINT8 line;
213   int y, x, j, b;
218   UINT8 y,ra,chr,gfx;
219   UINT16 sy=0,ma=0x400,x;
214220
215   UINT8 *gfx = screen->machine().region("chargen")->base();
216
217221   for (y = 0; y < 32; y++)
218222   {
219      for (x = 0; x < 64; x++)
223      for (ra = 0; ra < 8; ra++)
220224      {
221         code = state->m_videoram[(0x400 + y*64 + x) & 0x7ff];
222         for(j = 0; j < 8; j++ )
225         UINT16 *p = BITMAP_ADDR16(&bitmap, sy++, 0);
226
227         for (x = ma; x < ma + 64; x++)
223228         {
224            line = gfx[code*8 + j];
225            for (b = 0; b < 8; b++)
226            {
227               *BITMAP_ADDR16(bitmap, y*8+j, x * 8 + (7 - b)) =  ((line >> b) & 0x01);
228            }
229            chr = m_p_videoram[x & 0x7ff];
230
231            gfx = m_p_chargen[(chr<<3) | ra];
232
233            *p++ = BIT(gfx, 7);
234            *p++ = BIT(gfx, 6);
235            *p++ = BIT(gfx, 5);
236            *p++ = BIT(gfx, 4);
237            *p++ = BIT(gfx, 3);
238            *p++ = BIT(gfx, 2);
239            *p++ = BIT(gfx, 1);
240            *p++ = BIT(gfx, 0);
229241         }
230242      }
243      ma+=64;
231244   }
232245   return 0;
233246}
r11089r11090
321334   MCFG_CPU_IO_MAP(pcm_io)
322335   MCFG_CPU_CONFIG(pcm_daisy_chain)
323336
324   MCFG_MACHINE_RESET(pcm)
325
326337   /* video hardware */
327338   MCFG_SCREEN_ADD("screen", RASTER)
328339   MCFG_SCREEN_REFRESH_RATE(50)
r11089r11090
330341   MCFG_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16)
331342   MCFG_SCREEN_SIZE(64*8, 32*8)
332343   MCFG_SCREEN_VISIBLE_AREA(0, 64*8-1, 0, 32*8-1)
333   MCFG_SCREEN_UPDATE(pcm)
334344   MCFG_GFXDECODE(pcm)
335345   MCFG_PALETTE_LENGTH(2)
336346   MCFG_PALETTE_INIT(black_and_white)
337347
338   MCFG_VIDEO_START(pcm)
339
340348   /* Sound */
341349   MCFG_SPEAKER_STANDARD_MONO("mono")
342350   MCFG_SOUND_WAVE_ADD("wave", "cassette")
r11089r11090
345353   MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50)
346354
347355   /* Devices */
348   MCFG_GENERIC_TERMINAL_ADD(TERMINAL_TAG, pcm_terminal_intf)
356   MCFG_GENERIC_TERMINAL_ADD(TERMINAL_TAG, terminal_intf)
349357   MCFG_CASSETTE_ADD( "cassette", default_cassette_config )
350358   MCFG_Z80PIO_ADD( "z80pio_u", XTAL_10MHz /4, pio_u_intf )
351359   MCFG_Z80PIO_ADD( "z80pio_s", XTAL_10MHz /4, pio_s_intf )

Previous 15994 Revisions Next


© 1998-2018 The MESS Team