Previous 15994 Revisions Next

r5249 Thursday 16th July, 2009 at 09:03:04 UTC by Miodrag Milanović
[EC65] New driver, some devices added
[docs]messnew.txt
[src/mess]mess.mak messdriv.c
[src/mess/drivers]ec65.c*

src/mess/messdriv.c
r5248r5249
14411441    DRIVER( jtces88 )
14421442    DRIVER( jtces23 )
14431443    DRIVER( jtces40 )
1444    DRIVER( ec65 )
1445    DRIVER( ec65k )
14441446
14451447#endif /* DRIVER_RECURSIVE */
src/mess/mess.mak
r5248r5249
14521452   $(MESS_DRIVERS)/unior.o      \
14531453   $(MESS_DRIVERS)/tvc.o      \
14541454   $(MESS_DRIVERS)/mmd1.o      \
1455   $(MESS_DRIVERS)/ec65.o      \
14551456
14561457#-------------------------------------------------
14571458# layout dependencies
src/mess/drivers/ec65.c
r0r5249
1/***************************************************************************
2   
3        EC-65
4
5        16/07/2009 Initial driver.
6
7****************************************************************************/
8
9#include "driver.h"
10#include "cpu/m6502/m6502.h"
11#include "cpu/g65816/g65816.h"
12#include "video/mc6845.h"
13#include "machine/6821pia.h"
14#include "machine/6522via.h"
15#include "machine/6551.h"
16#include "machine/6850acia.h"
17
18#define PIA6821_TAG "pia6821"
19#define ACIA6850_TAG "acia6850"
20#define ACIA6551_TAG "acia6551"
21#define VIA6522_0_TAG "via6522_0"
22#define VIA6522_1_TAG "via6522_1"
23#define MC6845_TAG "mc6845"
24
25UINT8 *video_ram;
26
27static ADDRESS_MAP_START(ec65_mem, ADDRESS_SPACE_PROGRAM, 8)
28   ADDRESS_MAP_UNMAP_HIGH
29   AM_RANGE(0x0000, 0xdfff) AM_RAM
30   AM_RANGE(0xe000, 0xe003) AM_DEVREADWRITE(PIA6821_TAG, pia6821_r, pia6821_w)
31   AM_RANGE(0xe010, 0xe010) AM_DEVREADWRITE(ACIA6850_TAG, acia6850_stat_r, acia6850_ctrl_w)
32   AM_RANGE(0xe011, 0xe011) AM_DEVREADWRITE(ACIA6850_TAG, acia6850_data_r, acia6850_data_w)
33   AM_RANGE(0xe100, 0xe10f) AM_DEVREADWRITE(VIA6522_0_TAG, via_r, via_w)
34   AM_RANGE(0xe110, 0xe11f) AM_DEVREADWRITE(VIA6522_1_TAG, via_r, via_w)
35   AM_RANGE(0xe130, 0xe133) AM_DEVREADWRITE(ACIA6551_TAG,  acia_6551_r, acia_6551_w )
36   AM_RANGE(0xe140, 0xe140) AM_DEVWRITE(MC6845_TAG, mc6845_address_w)
37   AM_RANGE(0xe141, 0xe141) AM_DEVREADWRITE(MC6845_TAG, mc6845_register_r , mc6845_register_w)   
38   AM_RANGE(0xe400, 0xe7ff) AM_RAM // 1KB on-board RAM
39   AM_RANGE(0xe800, 0xefff) AM_RAM AM_BASE(&video_ram)
40   AM_RANGE(0xf000, 0xffff) AM_ROM
41ADDRESS_MAP_END
42
43static ADDRESS_MAP_START(ec65k_mem, ADDRESS_SPACE_PROGRAM, 8)
44   ADDRESS_MAP_UNMAP_HIGH
45   AM_RANGE(0x0000, 0xefff) AM_RAM
46   AM_RANGE(0xf000, 0xffff) AM_ROM
47ADDRESS_MAP_END
48
49static const pia6821_interface ec65_pia_interface=
50{
51   DEVCB_NULL,      /* port A input */
52   DEVCB_NULL,      /* port B input */
53   DEVCB_NULL,      /* CA1 input */
54   DEVCB_NULL,      /* CB1 input */
55   DEVCB_NULL,      /* CA2 input */
56   DEVCB_NULL,      /* CB2 input */
57   DEVCB_NULL,    /* port A output */
58   DEVCB_NULL,      /* port B output */
59   DEVCB_NULL,      /* CA2 output */
60   DEVCB_NULL,      /* CB2 output */
61   DEVCB_NULL,      /* IRQA output */
62   DEVCB_NULL      /* IRQB output */
63};
64
65static ACIA6850_INTERFACE( ec65_acia_intf )
66{
67   0,
68   0,
69   DEVCB_NULL,
70   DEVCB_NULL,
71   DEVCB_NULL,
72   DEVCB_NULL,
73   DEVCB_NULL,
74   DEVCB_NULL
75};
76
77static READ8_DEVICE_HANDLER(ec65_via_read_a)
78{
79   return 0;
80}
81static READ8_DEVICE_HANDLER( ec65_read_ca1 )
82{
83   return 0;
84}
85static READ8_DEVICE_HANDLER(ec65_via_read_b)
86{
87   return 0xff;
88}
89static WRITE8_DEVICE_HANDLER( ec65_via_write_a )
90{
91}
92static WRITE8_DEVICE_HANDLER( ec65_via_write_b )
93{
94}
95
96const via6522_interface ec65_via_1_intf=
97{
98   DEVCB_NULL,   /* in_a_func */   
99   DEVCB_HANDLER(ec65_via_read_b),   /* in_b_func */   
100   DEVCB_NULL,     /* in_ca1_func */
101   DEVCB_NULL,                       /* in_cb1_func */
102   DEVCB_NULL,                       /* in_ca2_func */
103   DEVCB_NULL,                       /* in_cb2_func */
104   DEVCB_HANDLER(ec65_via_write_a),  /* out_a_func */ 
105   DEVCB_HANDLER(ec65_via_write_b),  /* out_b_func */ 
106   DEVCB_NULL,                       /* out_ca1_func */
107   DEVCB_NULL,                       /* out_cb1_func */
108   DEVCB_NULL,                       /* out_ca2_func */
109   DEVCB_NULL,                       /* out_cb2_func */
110   DEVCB_NULL,                       /* irq_func */   
111};
112
113const via6522_interface ec65_via_0_intf=
114{
115   DEVCB_HANDLER(ec65_via_read_a),      /* in_a_func */   
116   DEVCB_NULL,      /* in_b_func */   
117   DEVCB_HANDLER(ec65_read_ca1),      /* in_ca1_func */
118   DEVCB_NULL,      /* in_cb1_func */
119   DEVCB_NULL,      /* in_ca2_func */
120   DEVCB_NULL,      /* in_cb2_func */
121   DEVCB_NULL,      /* out_a_func */ 
122   DEVCB_NULL,      /* out_b_func */ 
123   DEVCB_NULL,      /* out_ca1_func */
124   DEVCB_NULL,      /* out_cb1_func */
125   DEVCB_NULL,      /* out_ca2_func */
126   DEVCB_NULL,      /* out_cb2_func */
127   DEVCB_NULL,      /* irq_func */   
128};
129
130/* Input ports */
131INPUT_PORTS_START( ec65 )
132
133INPUT_PORTS_END
134
135
136static MACHINE_RESET(ec65)
137{
138}
139
140static VIDEO_START( ec65 )
141{
142}
143
144static VIDEO_UPDATE( ec65 )
145{
146   const device_config *mc6845 = devtag_get_device(screen->machine, MC6845_TAG);
147   mc6845_update(mc6845, bitmap, cliprect);
148   return 0;
149}
150
151static MC6845_UPDATE_ROW( ec65_update_row )
152{
153   UINT8 *charrom = memory_region(device->machine, "chargen");
154   int column, bit;
155
156   for (column = 0; column < x_count; column++)
157   {
158      UINT8 code = video_ram[ma + column];
159      UINT16 addr = code << 4 | (ra & 0x0f);
160      UINT8 data = charrom[(addr & 0xfff)];
161      if (column == cursor_x)
162      {
163         data = 0xff;
164      }
165     
166      for (bit = 0; bit < 8; bit++)
167      {
168         int x = (column * 8) + bit;
169         int color = BIT(data, 7) ? 1 : 0;
170           
171         *BITMAP_ADDR16(bitmap, y, x) = color;
172
173         data <<= 1;
174      }
175   }
176}
177static const mc6845_interface ec65_crtc6845_interface =
178{
179   "screen",
180   8 /*?*/,
181   NULL,
182   ec65_update_row,
183   NULL,
184   DEVCB_NULL,
185   DEVCB_NULL,
186   DEVCB_NULL,
187   DEVCB_NULL,
188   NULL
189};
190
191
192static MACHINE_DRIVER_START( ec65 )
193    /* basic machine hardware */
194    MDRV_CPU_ADD("maincpu",M6502, XTAL_4MHz / 4)
195    MDRV_CPU_PROGRAM_MAP(ec65_mem)
196
197    MDRV_MACHINE_RESET(ec65)
198   
199    /* video hardware */
200   MDRV_SCREEN_ADD("screen", RASTER)
201   MDRV_SCREEN_REFRESH_RATE(60)
202   MDRV_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) /* not accurate */
203   MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16)
204   MDRV_SCREEN_SIZE(640, 200)
205   MDRV_SCREEN_VISIBLE_AREA(0, 640 - 1, 0, 200 - 1)
206   MDRV_PALETTE_LENGTH(2)
207   MDRV_PALETTE_INIT(black_and_white)
208
209   MDRV_MC6845_ADD(MC6845_TAG, MC6845, XTAL_16MHz / 8, ec65_crtc6845_interface)
210   
211    MDRV_VIDEO_START(ec65)
212    MDRV_VIDEO_UPDATE(ec65)
213   
214    /* devices */
215   MDRV_PIA6821_ADD( PIA6821_TAG, ec65_pia_interface )
216   MDRV_ACIA6850_ADD(ACIA6850_TAG, ec65_acia_intf)
217   MDRV_VIA6522_ADD(VIA6522_0_TAG, XTAL_4MHz / 4, ec65_via_0_intf)
218   MDRV_VIA6522_ADD(VIA6522_1_TAG, XTAL_4MHz / 4, ec65_via_1_intf)
219   MDRV_ACIA6551_ADD(ACIA6551_TAG)     // have XTAL of 1.8432MHz connected
220MACHINE_DRIVER_END
221
222static MACHINE_DRIVER_START( ec65k )
223    /* basic machine hardware */
224    MDRV_CPU_ADD("maincpu",G65816, XTAL_4MHz) // can use 4,2 or 1 MHz
225    MDRV_CPU_PROGRAM_MAP(ec65k_mem)
226
227    MDRV_MACHINE_RESET(ec65)
228   
229    /* video hardware */
230   MDRV_SCREEN_ADD("screen", RASTER)
231   MDRV_SCREEN_REFRESH_RATE(60)
232   MDRV_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) /* not accurate */
233   MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16)
234   MDRV_SCREEN_SIZE(640, 200)
235   MDRV_SCREEN_VISIBLE_AREA(0, 640 - 1, 0, 200 - 1)
236   MDRV_PALETTE_LENGTH(2)
237   MDRV_PALETTE_INIT(black_and_white)
238
239   MDRV_MC6845_ADD(MC6845_TAG, MC6845, XTAL_16MHz / 8, ec65_crtc6845_interface)
240   
241    MDRV_VIDEO_START(ec65)
242    MDRV_VIDEO_UPDATE(ec65)
243MACHINE_DRIVER_END
244
245static SYSTEM_CONFIG_START(ec65)
246SYSTEM_CONFIG_END
247
248/* ROM definition */
249ROM_START( ec65 )
250   ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASEFF )
251   ROM_LOAD( "ec65.ic6", 0xf000, 0x1000, CRC(acd928ed) SHA1(e02a688a057ff77294717cf7b887425fed0b1153))
252   ROM_REGION( 0x1000, "chargen", 0 )
253   ROM_LOAD( "chargen.ic19", 0x0000, 0x1000, CRC(9b56a28d) SHA1(41c04fd9fb542c50287bc0e366358a61fc4b0cd4))   // Located on VDU card
254ROM_END
255
256ROM_START( ec65k )
257   ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASEFF )
258     ROM_LOAD( "ec65k.ic19",  0xf000, 0x1000, CRC(5e5a890a) SHA1(daa006f2179fd156833e11c73b37881cafe5dede))
259   ROM_REGION( 0x1000, "chargen", 0 )
260   ROM_LOAD( "chargen.ic19", 0x0000, 0x1000, CRC(9b56a28d) SHA1(41c04fd9fb542c50287bc0e366358a61fc4b0cd4))   // Located on VDU card
261ROM_END
262/* Driver */
263
264/*    YEAR  NAME    PARENT  COMPAT   MACHINE    INPUT    INIT    CONFIG COMPANY   FULLNAME       FLAGS */
265COMP( 1985, ec65,  0,       0,       ec65,    ec65,     0,       ec65,      "Elektor Electronics",   "EC-65",      GAME_NOT_WORKING)
266COMP( 1985, ec65k, ec65,    0,       ec65k,    ec65,     0,       ec65,      "Elektor Electronics",   "EC-65K",      GAME_NOT_WORKING)
267
docs/messnew.txt
r5248r5249
3333- DEC VT220
3434- DEC VT320
3535- DEC VT520
36- EC-65
37- EC-65K
3638- Epson LX-800
3739- Intel SDK-86
3840- Jugend+Technik CompJU+TEr

Previous 15994 Revisions Next


© 1998-2018 The MESS Team