r8621 Sunday 25th July, 2010 at 15:19:50 UTC by Angelo Salese
[MULTI8]: Added some bare-bones gfxs, implemented basic keyboard inputs
[src/mess/drivers]multi8.c

src/mess/drivers/multi8.c
r8620r8621
1010#include "cpu/z80/z80.h"
1111#include "sound/2203intf.h"
1212#include "video/mc6845.h"
13#include "machine/i8255a.h"
1314
15static UINT8 *vram;
16static UINT8 mcu_init;
17static UINT8 keyb_press,keyb_press_flag;
18static UINT16 cursor_addr,cursor_raster;
19
1420static VIDEO_START( multi8 )
1521{
1622}
1723
1824static VIDEO_UPDATE( multi8 )
1925{
26   int x,y,count;
27   count = 0x0000;
28
29   for(y=0;y<25;y++)
30   {
31      for(x=0;x<40;x++)
32      {
33         int tile = vram[count];
34         int color = vram[count+0x800] & 0x20;
35
36         drawgfx_opaque(bitmap, cliprect, screen->machine->gfx[0], tile,color >> 5, 0, 0, x*8, y*8);
37
38         // draw cursor
39         if(cursor_addr == count)
40         {
41            int xc,yc,cursor_on;
42
43            cursor_on = 0;
44            switch(cursor_raster & 0x60)
45            {
46               case 0x00: cursor_on = 1; break; //always on
47               case 0x20: cursor_on = 0; break; //always off
48               case 0x40: if(screen->machine->primary_screen->frame_number() & 0x10) { cursor_on = 1; } break; //fast blink
49               case 0x60: if(screen->machine->primary_screen->frame_number() & 0x20) { cursor_on = 1; } break; //slow blink
50            }
51
52            if(cursor_on)
53            {
54               for(yc=0;yc<(8-(cursor_raster & 7));yc++)
55               {
56                  for(xc=0;xc<8;xc++)
57                  {
58                     *BITMAP_ADDR16(bitmap, y*8+yc+7, x*8+xc) = screen->machine->pens[0x1];
59                  }
60               }
61            }
62         }
63         count+=2;
64      }
65   }
2066    return 0;
2167}
2268
r8620r8621
2773   if(offset == 0)
2874   {
2975      addr_latch = data;
30      mc6845_address_w(space->machine->device("crtc"), 0,data);
76      //mc6845_address_w(space->machine->device("crtc"), 0,data);
3177   }
3278   else
3379   {
34      mc6845_register_w(space->machine->device("crtc"), 0,data);
80      if(addr_latch == 0x0a)
81         cursor_raster = data;
82      if(addr_latch == 0x0e)
83         cursor_addr = ((data<<8) & 0x3f00) | (cursor_addr & 0xff);
84      else if(addr_latch == 0x0f)
85         cursor_addr = (cursor_addr & 0x3f00) | (data & 0xff);
86
87      //mc6845_register_w(space->machine->device("crtc"), 0,data);
3588   }
3689}
3790
91static READ8_HANDLER( key_input_r )
92{
93   if(mcu_init == 0){ mcu_init++;   return 3; }
3894
95   keyb_press_flag &= 0xfe;
96
97   return keyb_press;
98}
99
100static READ8_HANDLER( key_status_r )
101{
102   if(mcu_init == 0){             return 1; }
103   if(mcu_init == 1){ mcu_init++;   return 1; }
104   if(mcu_init == 2){ mcu_init++;   return 0; }
105
106   return keyb_press_flag;
107}
108
39109static ADDRESS_MAP_START(multi8_mem, ADDRESS_SPACE_PROGRAM, 8)
40110   ADDRESS_MAP_UNMAP_HIGH
41   AM_RANGE(0x0000, 0x7FFF) AM_ROM
42   AM_RANGE(0x8000, 0xFFFF) AM_RAM
111   AM_RANGE(0x0000, 0x7fff) AM_ROM
112   AM_RANGE(0x8000, 0x8fff) AM_RAM AM_BASE(&vram)
113   AM_RANGE(0x9000, 0xffff) AM_RAM
43114ADDRESS_MAP_END
44115
45116static ADDRESS_MAP_START( multi8_io , ADDRESS_SPACE_IO, 8)
46117   ADDRESS_MAP_UNMAP_HIGH
47118   ADDRESS_MAP_GLOBAL_MASK(0xff)
48
49//   AM_RANGE(0x00, 0x01) //keyboard line
119   AM_RANGE(0x00, 0x00) AM_READ(key_input_r) AM_WRITENOP//keyboard
120   AM_RANGE(0x01, 0x01) AM_READ(key_status_r) AM_WRITENOP//keyboard
50121   AM_RANGE(0x18, 0x19) AM_DEVWRITE("ymsnd", ym2203_w)
51122//   AM_RANGE(0x18, 0x18) //opn read 0
52123//   AM_RANGE(0x1a, 0x1a) //opn read 1
53124   AM_RANGE(0x1c, 0x1d) AM_WRITE(multi8_6845_w)
54125//   AM_RANGE(0x20, 0x21) //sio, cmt
55126//   AM_RANGE(0x24, 0x27) //pit
56//   AM_RANGE(0x28, 0x2b) //i8255 0
127   AM_RANGE(0x28, 0x2b) AM_DEVREADWRITE("ppi8255_0", i8255a_r, i8255a_w)
57128//   AM_RANGE(0x2c, 0x2d) //i8259
58129//   AM_RANGE(0x30, 0x37) //vdp regs
59130//   AM_RANGE(0x40, 0x41) //kanji regs
60131//   AM_RANGE(0x70, 0x74) //upd765a fdc
132//   AM_RANGE(0x78, 0x78) //memory banking
61133ADDRESS_MAP_END
62134
63135/* Input ports */
64136static INPUT_PORTS_START( multi8 )
137   PORT_START("VBLANK")
138   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_VBLANK)
139
140   PORT_START("key1") //0x00-0x1f
141   PORT_BIT(0x00000001,IP_ACTIVE_HIGH,IPT_UNUSED) //0x00 null
142   PORT_BIT(0x00000002,IP_ACTIVE_HIGH,IPT_UNUSED) //0x01 soh
143   PORT_BIT(0x00000004,IP_ACTIVE_HIGH,IPT_UNUSED) //0x02 stx
144   PORT_BIT(0x00000008,IP_ACTIVE_HIGH,IPT_UNUSED) //0x03 etx
145   PORT_BIT(0x00000010,IP_ACTIVE_HIGH,IPT_UNUSED) //0x04 etx
146   PORT_BIT(0x00000020,IP_ACTIVE_HIGH,IPT_UNUSED) //0x05 eot
147   PORT_BIT(0x00000040,IP_ACTIVE_HIGH,IPT_UNUSED) //0x06 enq
148   PORT_BIT(0x00000080,IP_ACTIVE_HIGH,IPT_UNUSED) //0x07 ack
149   PORT_BIT(0x00000100,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("Backspace") PORT_CODE(KEYCODE_BACKSPACE) PORT_CHAR(8)
150   PORT_BIT(0x00000200,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("Tab") PORT_CODE(KEYCODE_TAB) PORT_CHAR(9)
151   PORT_BIT(0x00000400,IP_ACTIVE_HIGH,IPT_UNUSED) //0x0a
152   PORT_BIT(0x00000800,IP_ACTIVE_HIGH,IPT_UNUSED) //0x0b lf
153   PORT_BIT(0x00001000,IP_ACTIVE_HIGH,IPT_UNUSED) //0x0c vt
154   PORT_BIT(0x00002000,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("RETURN") PORT_CODE(KEYCODE_ENTER) PORT_CHAR(27)
155   PORT_BIT(0x00004000,IP_ACTIVE_HIGH,IPT_UNUSED) //0x0e cr
156   PORT_BIT(0x00008000,IP_ACTIVE_HIGH,IPT_UNUSED) //0x0f so
157
158   PORT_BIT(0x00010000,IP_ACTIVE_HIGH,IPT_UNUSED) //0x10 si
159   PORT_BIT(0x00020000,IP_ACTIVE_HIGH,IPT_UNUSED) //0x11 dle
160   PORT_BIT(0x00040000,IP_ACTIVE_HIGH,IPT_UNUSED) //0x12 dc1
161   PORT_BIT(0x00080000,IP_ACTIVE_HIGH,IPT_UNUSED) //0x13 dc2
162   PORT_BIT(0x00100000,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("HOME") PORT_CODE(KEYCODE_HOME)
163   PORT_BIT(0x00200000,IP_ACTIVE_HIGH,IPT_UNUSED) //0x15 dc4
164   PORT_BIT(0x00400000,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("Left") PORT_CODE(KEYCODE_LEFT)
165   PORT_BIT(0x00800000,IP_ACTIVE_HIGH,IPT_UNUSED) //0x17 syn
166   PORT_BIT(0x01000000,IP_ACTIVE_HIGH,IPT_UNUSED) //0x18 etb
167   PORT_BIT(0x02000000,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("Right") PORT_CODE(KEYCODE_RIGHT)
168   PORT_BIT(0x04000000,IP_ACTIVE_HIGH,IPT_UNUSED) //0x1a em
169   PORT_BIT(0x08000000,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("ESC") PORT_CHAR(27)
170   PORT_BIT(0x10000000,IP_ACTIVE_HIGH,IPT_UNUSED) //0x1c ???
171   PORT_BIT(0x20000000,IP_ACTIVE_HIGH,IPT_UNUSED) //0x1d fs
172   PORT_BIT(0x40000000,IP_ACTIVE_HIGH,IPT_UNUSED) //0x1e gs
173   PORT_BIT(0x80000000,IP_ACTIVE_HIGH,IPT_UNUSED) //0x1f us
174
175   PORT_START("key2") //0x20-0x3f
176   PORT_BIT(0x00000001,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("Space") PORT_CODE(KEYCODE_SPACE) PORT_CHAR(' ')
177   PORT_BIT(0x00000002,IP_ACTIVE_HIGH,IPT_UNUSED) //0x21 !
178   PORT_BIT(0x00000004,IP_ACTIVE_HIGH,IPT_UNUSED) //0x22 "
179   PORT_BIT(0x00000008,IP_ACTIVE_HIGH,IPT_UNUSED) //0x23 #
180   PORT_BIT(0x00000010,IP_ACTIVE_HIGH,IPT_UNUSED) //0x24 $
181   PORT_BIT(0x00000020,IP_ACTIVE_HIGH,IPT_UNUSED) //0x25 %
182   PORT_BIT(0x00000040,IP_ACTIVE_HIGH,IPT_UNUSED) //0x26 &
183   PORT_BIT(0x00000080,IP_ACTIVE_HIGH,IPT_UNUSED) //0x27 '
184   PORT_BIT(0x00000100,IP_ACTIVE_HIGH,IPT_UNUSED) //0x28 (
185   PORT_BIT(0x00000200,IP_ACTIVE_HIGH,IPT_UNUSED) //0x29 )
186   PORT_BIT(0x00000400,IP_ACTIVE_HIGH,IPT_UNUSED) //0x2a *
187   PORT_BIT(0x00000800,IP_ACTIVE_HIGH,IPT_UNUSED) //0x2b +
188   PORT_BIT(0x00001000,IP_ACTIVE_HIGH,IPT_UNUSED) //0x2c ,
189   PORT_BIT(0x00002000,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("-") PORT_CODE(KEYCODE_MINUS) PORT_CHAR('-')
190   PORT_BIT(0x00004000,IP_ACTIVE_HIGH,IPT_UNUSED) //0x2e .
191   PORT_BIT(0x00008000,IP_ACTIVE_HIGH,IPT_UNUSED) //0x2f /
192
193   PORT_BIT(0x00010000,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("0") PORT_CODE(KEYCODE_0) PORT_CHAR('0')
194   PORT_BIT(0x00020000,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("1") PORT_CODE(KEYCODE_1) PORT_CHAR('1')
195   PORT_BIT(0x00040000,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("2") PORT_CODE(KEYCODE_2) PORT_CHAR('2')
196   PORT_BIT(0x00080000,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("3") PORT_CODE(KEYCODE_3) PORT_CHAR('3')
197   PORT_BIT(0x00100000,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("4") PORT_CODE(KEYCODE_4) PORT_CHAR('4')
198   PORT_BIT(0x00200000,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("5") PORT_CODE(KEYCODE_5) PORT_CHAR('5')
199   PORT_BIT(0x00400000,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("6") PORT_CODE(KEYCODE_6) PORT_CHAR('6')
200   PORT_BIT(0x00800000,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("7") PORT_CODE(KEYCODE_7) PORT_CHAR('7')
201   PORT_BIT(0x01000000,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("8") PORT_CODE(KEYCODE_8) PORT_CHAR('8')
202   PORT_BIT(0x02000000,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("9") PORT_CODE(KEYCODE_9) PORT_CHAR('9')
203   PORT_BIT(0x04000000,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME(":") PORT_CODE(KEYCODE_QUOTE) PORT_CHAR(':')
204   PORT_BIT(0x08000000,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME(";") PORT_CODE(KEYCODE_COLON) PORT_CHAR(';')
205   PORT_BIT(0x10000000,IP_ACTIVE_HIGH,IPT_UNUSED) //0x3c <
206   PORT_BIT(0x20000000,IP_ACTIVE_HIGH,IPT_UNUSED) //0x3d =
207   PORT_BIT(0x40000000,IP_ACTIVE_HIGH,IPT_UNUSED) //0x3e >
208   PORT_BIT(0x80000000,IP_ACTIVE_HIGH,IPT_UNUSED) //0x3f ?
209
210   PORT_START("key3") //0x40-0x5f
211   PORT_BIT(0x00000001,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("@") PORT_CODE(KEYCODE_OPENBRACE) PORT_CHAR('@')
212   PORT_BIT(0x00000002,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("A") PORT_CODE(KEYCODE_A) PORT_CHAR('A')
213   PORT_BIT(0x00000004,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("B") PORT_CODE(KEYCODE_B) PORT_CHAR('B')
214   PORT_BIT(0x00000008,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("C") PORT_CODE(KEYCODE_C) PORT_CHAR('C')
215   PORT_BIT(0x00000010,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("D") PORT_CODE(KEYCODE_D) PORT_CHAR('D')
216   PORT_BIT(0x00000020,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("E") PORT_CODE(KEYCODE_E) PORT_CHAR('E')
217   PORT_BIT(0x00000040,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("F") PORT_CODE(KEYCODE_F) PORT_CHAR('F')
218   PORT_BIT(0x00000080,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("G") PORT_CODE(KEYCODE_G) PORT_CHAR('G')
219   PORT_BIT(0x00000100,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("H") PORT_CODE(KEYCODE_H) PORT_CHAR('H')
220   PORT_BIT(0x00000200,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("I") PORT_CODE(KEYCODE_I) PORT_CHAR('I')
221   PORT_BIT(0x00000400,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("J") PORT_CODE(KEYCODE_J) PORT_CHAR('J')
222   PORT_BIT(0x00000800,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("K") PORT_CODE(KEYCODE_K) PORT_CHAR('K')
223   PORT_BIT(0x00001000,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("L") PORT_CODE(KEYCODE_L) PORT_CHAR('L')
224   PORT_BIT(0x00002000,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("M") PORT_CODE(KEYCODE_M) PORT_CHAR('M')
225   PORT_BIT(0x00004000,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("N") PORT_CODE(KEYCODE_N) PORT_CHAR('N')
226   PORT_BIT(0x00008000,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("O") PORT_CODE(KEYCODE_O) PORT_CHAR('O')
227   PORT_BIT(0x00010000,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("P") PORT_CODE(KEYCODE_P) PORT_CHAR('P')
228   PORT_BIT(0x00020000,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("Q") PORT_CODE(KEYCODE_Q) PORT_CHAR('Q')
229   PORT_BIT(0x00040000,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("R") PORT_CODE(KEYCODE_R) PORT_CHAR('R')
230   PORT_BIT(0x00080000,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("S") PORT_CODE(KEYCODE_S) PORT_CHAR('S')
231   PORT_BIT(0x00100000,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("T") PORT_CODE(KEYCODE_T) PORT_CHAR('T')
232   PORT_BIT(0x00200000,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("U") PORT_CODE(KEYCODE_U) PORT_CHAR('U')
233   PORT_BIT(0x00400000,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("V") PORT_CODE(KEYCODE_V) PORT_CHAR('V')
234   PORT_BIT(0x00800000,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("W") PORT_CODE(KEYCODE_W) PORT_CHAR('W')
235   PORT_BIT(0x01000000,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("X") PORT_CODE(KEYCODE_X) PORT_CHAR('X')
236   PORT_BIT(0x02000000,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("Y") PORT_CODE(KEYCODE_Y) PORT_CHAR('Y')
237   PORT_BIT(0x04000000,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("Z") PORT_CODE(KEYCODE_Z) PORT_CHAR('Z')
238   PORT_BIT(0x08000000,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("[") PORT_CODE(KEYCODE_CLOSEBRACE) PORT_CHAR('[')
239   PORT_BIT(0x10000000,IP_ACTIVE_HIGH,IPT_UNUSED)
240   PORT_BIT(0x20000000,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("]") PORT_CODE(KEYCODE_BACKSLASH) PORT_CHAR(']')
241   PORT_BIT(0x40000000,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("^") PORT_CODE(KEYCODE_EQUALS) PORT_CHAR('^')
242   PORT_BIT(0x80000000,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("_")
243
244   PORT_START("key_modifiers")
245   PORT_BIT(0x00000001,IP_ACTIVE_LOW,IPT_KEYBOARD) PORT_NAME("CTRL") PORT_CODE(KEYCODE_LCONTROL)
246   PORT_BIT(0x00000002,IP_ACTIVE_LOW,IPT_KEYBOARD) PORT_NAME("SHIFT") PORT_CODE(KEYCODE_LSHIFT)
247   PORT_BIT(0x00000004,IP_ACTIVE_LOW,IPT_KEYBOARD) PORT_NAME("KANA") PORT_CODE(KEYCODE_RCONTROL)
248   PORT_BIT(0x00000008,IP_ACTIVE_LOW,IPT_KEYBOARD) PORT_NAME("CAPS") PORT_CODE(KEYCODE_CAPSLOCK) PORT_TOGGLE
249   PORT_BIT(0x00000010,IP_ACTIVE_LOW,IPT_KEYBOARD) PORT_NAME("GRPH") PORT_CODE(KEYCODE_LALT)
65250INPUT_PORTS_END
66251
252static TIMER_CALLBACK( keyboard_callback )
253{
254   const char* portnames[3] = { "key1","key2","key3" };
255   int i,port_i,scancode;
256   UINT8 keymod = input_port_read(machine,"key_modifiers") & 0x1f;
257   scancode = 0;
67258
259   for(port_i=0;port_i<3;port_i++)
260   {
261      for(i=0;i<32;i++)
262      {
263         if((input_port_read(machine,portnames[port_i])>>i) & 1)
264         {
265            //key_flag = 1;
266            if(keymod & 0x02)  // shift not pressed
267            {
268               if(scancode >= 0x41 && scancode < 0x5a)
269                  scancode += 0x20;  // lowercase
270            }
271            else
272            {
273               if(scancode >= 0x31 && scancode < 0x3a)
274                  scancode -= 0x10;
275               if(scancode == 0x30)
276               {
277                  scancode = 0x3d;
278               }
279            }
280            keyb_press = scancode;
281            keyb_press_flag = 1;
282            return;
283         }
284         scancode++;
285      }
286   }
287}
288
289static MACHINE_START(multi8)
290{
291   timer_pulse(machine, ATTOTIME_IN_HZ(240/32), NULL, 0, keyboard_callback);
292}
293
68294static MACHINE_RESET(multi8)
69295{
296   mcu_init = 0;
70297}
71298
72299/* F4 Character Displayer */
r8620r8621
84311};
85312
86313static GFXDECODE_START( multi8 )
87   GFXDECODE_ENTRY( "chargen", 0x0000, multi8_charlayout, 0, 1 )
314   GFXDECODE_ENTRY( "chargen", 0x0000, multi8_charlayout, 0, 2 )
88315GFXDECODE_END
89316
90317static const mc6845_interface mc6845_intf =
r8620r8621
101328   NULL      /* update address callback */
102329};
103330
331static PALETTE_INIT( multi8 )
332{
333   palette_set_color_rgb(machine, 0, 0x00,0x00,0x00);
334   palette_set_color_rgb(machine, 1, 0xff,0xff,0xff);
335   palette_set_color_rgb(machine, 2, 0xff,0xff,0xff);
336   palette_set_color_rgb(machine, 3, 0x00,0x00,0x00);
104337
338}
339
340static READ8_DEVICE_HANDLER( porta_r )
341{
342   int vsync = (input_port_read(device->machine, "VBLANK") & 0x1) << 5;
343
344   return 0xdf | vsync;
345}
346
347static READ8_DEVICE_HANDLER( portb_r )
348{
349//   printf("Port B r\n");
350
351   return 0xff;
352}
353
354static READ8_DEVICE_HANDLER( portc_r )
355{
356//   printf("Port C r\n");
357
358   return 0xff;
359}
360
361static WRITE8_DEVICE_HANDLER( porta_w )
362{
363//   printf("Port A w = %02x\n",data);
364}
365
366static WRITE8_DEVICE_HANDLER( portb_w )
367{
368//   printf("Port B w = %02x\n",data);
369}
370
371static WRITE8_DEVICE_HANDLER( portc_w )
372{
373//   printf("Port C w = %02x\n",data);
374}
375
376
377static I8255A_INTERFACE( ppi8255_intf_0 )
378{
379   DEVCB_HANDLER(porta_r),         /* Port A read */
380   DEVCB_HANDLER(portb_r),         /* Port B read */
381   DEVCB_HANDLER(portc_r),         /* Port C read */
382   DEVCB_HANDLER(porta_w),         /* Port A write */
383   DEVCB_HANDLER(portb_w),         /* Port B write */
384   DEVCB_HANDLER(portc_w)         /* Port C write */
385};
386
105387static MACHINE_DRIVER_START( multi8 )
106388    /* basic machine hardware */
107389    MDRV_CPU_ADD("maincpu",Z80, XTAL_4MHz)
108390    MDRV_CPU_PROGRAM_MAP(multi8_mem)
109391    MDRV_CPU_IO_MAP(multi8_io)
110392
393    MDRV_MACHINE_START(multi8)
111394    MDRV_MACHINE_RESET(multi8)
112395
396   MDRV_I8255A_ADD( "ppi8255_0", ppi8255_intf_0 )
397
113398    /* video hardware */
114399    MDRV_SCREEN_ADD("screen", RASTER)
115    MDRV_SCREEN_REFRESH_RATE(50)
400    MDRV_SCREEN_REFRESH_RATE(60)
116401    MDRV_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) /* not accurate */
117402    MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16)
118403    MDRV_SCREEN_SIZE(640, 200)
119    MDRV_SCREEN_VISIBLE_AREA(0, 640-1, 0, 200-1)
120    MDRV_PALETTE_LENGTH(2)
121    MDRV_PALETTE_INIT(black_and_white)
404    MDRV_SCREEN_VISIBLE_AREA(0, 320-1, 0, 200-1)
405    MDRV_PALETTE_LENGTH(4)
406    MDRV_PALETTE_INIT(multi8)
122407   MDRV_GFXDECODE(multi8)
123408
124409   MDRV_MC6845_ADD("crtc", H46505, XTAL_3_579545MHz/2, mc6845_intf)   /* unknown clock, hand tuned to get ~60 fps */

Previous 509070 RevisionsNext 50


© 1998-2010 The MESS Team