Previous 15994 Revisions Next

r9048 Sunday 5th September, 2010 at 16:42:43 UTC by Sandro Ronco
[CC10] Added display and keyboard
[src/mess]mess.mak
[src/mess/drivers]cc10.c
[src/mess/layout]cc10.lay*

src/mess/layout/cc10.lay
r0r9048
1<?xml version="1.0"?>
2<mamelayout version="2">
3   <element name="digit" defstate="0">
4      <led7seg>
5         <color red="0.75" green="0.0" blue="0.0" />
6      </led7seg>
7   </element>
8   <element name="led" defstate="0">
9      <disk state="1">
10         <color red="0.75" green="0.0" blue="0.0" />
11      </disk>
12      <disk state="0">
13         <color red="0.09375" green="0.0" blue="0.0" />
14      </disk>
15   </element>
16   <element name="background">
17      <rect>
18         <bounds left="0" top="0" right="1" bottom="1" />
19         <color red="0.0" green="0.0" blue="0.0" />
20      </rect>
21   </element>
22 
23   <view name="Simple LCD/LEDs">
24      <!-- Black background -->
25      <bezel element="background">
26         <bounds left="00" top="00" right="240" bottom="95" />
27      </bezel>
28 
29      <bezel name="digit0" element="digit">
30         <bounds x="10" y="15" width="50" height="80" />
31      </bezel>
32      <bezel name="digit1" element="digit">
33         <bounds x="70" y="15" width="50" height="80" />
34      </bezel>
35      <bezel name="digit2" element="digit">
36         <bounds x="130" y="15" width="50" height="80" />
37      </bezel>
38      <bezel name="digit3" element="digit">
39         <bounds x="190" y="15" width="50" height="80" />
40      </bezel>
41      <bezel name="led0" element="led">
42         <bounds x="10" y="00" width="10" height="10" />
43      </bezel>
44      <bezel name="led1" element="led">
45         <bounds x="130" y="00" width="10" height="10" />
46      </bezel>
47 
48   </view>
49</mamelayout>
src/mess/mess.mak
r9047r9048
17531753$(MESS_DRIVERS)/amico2k.o:   $(MESS_LAYOUT)/amico2k.lh
17541754$(MESS_DRIVERS)/beta.o:      $(MESS_LAYOUT)/beta.lh
17551755$(MESS_DRIVERS)/bob85.o:   $(MESS_LAYOUT)/bob85.lh
1756$(MESS_DRIVERS)/cc10.o:      $(MESS_LAYOUT)/cc10.lh
17561757$(MESS_DRIVERS)/cdi.o:      $(MESS_LAYOUT)/cdi.lh
17571758$(MESS_DRIVERS)/coco.o:      $(MESS_LAYOUT)/coco3.lh
17581759$(MESS_DRIVERS)/cosmicos.o:   $(MESS_LAYOUT)/cosmicos.lh
src/mess/drivers/cc10.c
r9047r9048
1111
1212#include "emu.h"
1313#include "cpu/z80/z80.h"
14#include "machine/i8255a.h"
15#include "debugger.h"
16#include "sound/beep.h"
17#include "cc10.lh"
1418
19class cc10_state : public driver_device
20{
21public:
22   cc10_state(running_machine &machine, const driver_device_config_base &config)
23      : driver_device(machine, config) { }
24
25   UINT8 kb_matrix;
26   UINT8 out_index;
27   UINT8 out_state;
28
29   device_t *beep;
30};
31
1532static ADDRESS_MAP_START(cc10_mem, ADDRESS_SPACE_PROGRAM, 8)
1633   ADDRESS_MAP_UNMAP_HIGH
1734   AM_RANGE(0x0000, 0x0fff) AM_ROM
18   AM_RANGE(0x1000, 0xffff) AM_RAM
35   AM_RANGE(0x3000, 0x31ff) AM_RAM
1936ADDRESS_MAP_END
2037
2138static ADDRESS_MAP_START( cc10_io, ADDRESS_SPACE_IO, 8 )
2239   ADDRESS_MAP_GLOBAL_MASK(0xff)
40   AM_RANGE(0xf4, 0xf7) AM_DEVREADWRITE("i8255", i8255a_r, i8255a_w)
2341ADDRESS_MAP_END
2442
2543/* Input ports */
2644INPUT_PORTS_START( cc10 )
45   PORT_START("LEVEL")
46      PORT_CONFNAME( 0x80, 0x00, "Number of levels" )
47      PORT_CONFSETTING( 0x00, "10" )
48      PORT_CONFSETTING( 0x80, "3" )
49
50   PORT_START("LINE1")
51      PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("RE") PORT_CODE(KEYCODE_R)
52      PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("LV") PORT_CODE(KEYCODE_V)
53      PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("A1") PORT_CODE(KEYCODE_1)
54      PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("E5") PORT_CODE(KEYCODE_5)
55
56   PORT_START("LINE2")
57      PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("CB") PORT_CODE(KEYCODE_C)
58      PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("DM") PORT_CODE(KEYCODE_D)
59      PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("B2") PORT_CODE(KEYCODE_2)
60      PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("F6") PORT_CODE(KEYCODE_6)
61
62   PORT_START("LINE3")
63      PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("CL") PORT_CODE(KEYCODE_L)
64      PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("PB") PORT_CODE(KEYCODE_B)
65      PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("C3") PORT_CODE(KEYCODE_3)
66      PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("G7") PORT_CODE(KEYCODE_7)
67
68   PORT_START("LINE4")
69      PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("EN") PORT_CODE(KEYCODE_E)
70      PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("PV") PORT_CODE(KEYCODE_O)
71      PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("D4") PORT_CODE(KEYCODE_4)
72      PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("H8") PORT_CODE(KEYCODE_8)
2773INPUT_PORTS_END
2874
75static MACHINE_START(cc10)
76{
77   cc10_state *state = machine->driver_data<cc10_state>();
78
79   state->beep = machine->device("beep");
80}
81
2982static MACHINE_RESET(cc10)
3083{
84   cc10_state *state = machine->driver_data<cc10_state>();
85
86   state->kb_matrix = 0;
87   state->out_index = 0;
88   state->out_state = 0;
3189}
3290
33static VIDEO_START( cc10 )
91static WRITE8_DEVICE_HANDLER( cc10_out_data_w )
3492{
93   cc10_state *state = device->machine->driver_data<cc10_state>();
94   UINT8 digit_value = BITSWAP8( data,7,0,1,2,3,4,5,6 ) & 0x7f;
95
96   switch (state->out_index)
97   {
98      case 0x00:
99         output_set_digit_value(0, digit_value);
100         break;
101      case 0x04:
102         output_set_digit_value(1, digit_value);
103         break;
104      case 0x08:
105         output_set_digit_value(2, digit_value);
106         break;
107      case 0x10:
108         output_set_digit_value(3, digit_value);
109         break;
110      case 0x20:
111         beep_set_state(state->beep, (data & 0x80) ? 0 : 1);
112         break;
113      case 0x01:
114      case 0x02:
115      case 0x40:
116      case 0x80:
117         // unknown, probably two bit are used for the LEDs
118         break;
119   }
35120}
36121
37static VIDEO_UPDATE( cc10 )
122static WRITE8_DEVICE_HANDLER( cc10_out_index_w )
38123{
39   return 0;
124   cc10_state *state = device->machine->driver_data<cc10_state>();
125
126   if (!state->out_state)
127      state->out_index = data;
128
129   state->out_state = data;
40130}
41131
42static MACHINE_CONFIG_START( cc10, driver_device )
132static READ8_DEVICE_HANDLER( cc10_kb_r )
133{
134   cc10_state *state = device->machine->driver_data<cc10_state>();
135
136   UINT8 data = 0;
137
138   switch (state->kb_matrix & 0xf0)
139   {
140      case 0xe0:
141         data = input_port_read(device->machine, "LINE1");
142         break;
143      case 0xd0:
144         data = input_port_read(device->machine, "LINE2");
145         break;
146      case 0xb0:
147         data = input_port_read(device->machine, "LINE3");
148         break;
149      case 0x70:
150         data = input_port_read(device->machine, "LINE4");
151         break;
152   }
153
154   return data;
155}
156
157static WRITE8_DEVICE_HANDLER( cc10_kb_matrix_w )
158{
159   cc10_state *state = device->machine->driver_data<cc10_state>();
160
161   state->kb_matrix = data;
162}
163
164static READ8_DEVICE_HANDLER( cc10_level_r )
165{
166   /*
167   x--- ---- level select
168   -xxx xxxx ??
169   */
170   return input_port_read(device->machine, "LEVEL");
171}
172
173static const i8255a_interface cc10_i8255a_intf =
174{
175   DEVCB_NULL,
176   DEVCB_HANDLER(cc10_level_r),
177   DEVCB_HANDLER(cc10_kb_r),
178   DEVCB_HANDLER(cc10_out_data_w),
179   DEVCB_HANDLER(cc10_out_index_w),
180   DEVCB_HANDLER(cc10_kb_matrix_w)
181};
182
183static MACHINE_CONFIG_START( cc10, cc10_state )
43184    /* basic machine hardware */
44185    MDRV_CPU_ADD("maincpu", Z80, XTAL_16MHz / 4)
45186    MDRV_CPU_PROGRAM_MAP(cc10_mem)
46187   MDRV_CPU_IO_MAP(cc10_io)
47188
189   MDRV_MACHINE_START(cc10)
48190    MDRV_MACHINE_RESET(cc10)
49191
192   MDRV_I8255A_ADD("i8255", cc10_i8255a_intf)
193
50194    /* video hardware */
51   MDRV_SCREEN_ADD("screen", RASTER)
52   MDRV_SCREEN_REFRESH_RATE(60)
53   MDRV_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) /* not accurate */
54   MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16)
55   MDRV_SCREEN_SIZE(256, 192) /* border size not accurate */
56   MDRV_SCREEN_VISIBLE_AREA(0, 256 - 1, 0, 192 - 1)
195   MDRV_DEFAULT_LAYOUT(layout_cc10)
57196
58    MDRV_PALETTE_LENGTH(2)
59    MDRV_PALETTE_INIT(black_and_white)
60
61    MDRV_VIDEO_START(cc10)
62    MDRV_VIDEO_UPDATE(cc10)
197   /* sound hardware */
198   MDRV_SPEAKER_STANDARD_MONO( "mono" )
199   MDRV_SOUND_ADD( "beep", BEEP, 0 )
200   MDRV_SOUND_ROUTE( ALL_OUTPUTS, "mono", 1.00 )
63201MACHINE_CONFIG_END
64202
65203

Previous 15994 Revisions Next


© 1998-2018 The MESS Team