Previous 15994 Revisions Next

r7017 Tuesday 12th January, 2010 at 13:24:39 UTC by Curt Coder
[STUDIO2] Fixed system clock, split ROMs properly, separated ETI-660 to its own driver since it is not a Studio II clone.
[src/emu/drivers]xtal.h
[src/mess]mess.mak messdriv.c
[src/mess/drivers]eti660.c* studio2.c vip.c
[src/mess/includes]eti660.h*

src/emu/drivers/xtal.h
r7016r7017
7272   XTAL_8MHz         = 8000000,      /* Extremely common, used on 100's of PCBs */
7373   XTAL_8_4672MHz      = 8467200,      /* Subsino's Ying Hua Lian */
7474   XTAL_8_664MHz      = 8664000,      /* Touchmaster */
75   XTAL_8_867238MHz   = 8867238,      /* ETI-660 */
7576   XTAL_8_945MHz      = 8945000,      /* Hit Me */
7677   XTAL_9_828MHz      = 9828000,      /* Universal PCBs */
7778   XTAL_9_8304MHz      = 9830400,      /* Epson PX-8 */
src/mess/includes/eti660.h
r0r7017
1#ifndef __ETI660__
2#define __ETI660__
3
4#include "cpu/cdp1802/cdp1802.h"
5
6#define SCREEN_TAG   "screen"
7#define CDP1802_TAG "ic3"
8#define CDP1864_TAG "ic4"
9#define MC6821_TAG   "ic5"
10#define CASSETTE_TAG   "cassette"
11
12enum
13{
14   LED_POWER = 0,
15   LED_PULSE
16};
17
18typedef struct _eti660_state eti660_state;
19struct _eti660_state
20{
21   /* cpu state */
22   cdp1802_control_mode cdp1802_mode;
23
24   /* keyboard state */
25   UINT8 keylatch;
26
27   /* video state */
28   int cdp1864_efx;
29   UINT8 *color_ram;
30   UINT8 color;
31
32   /* devices */
33   const device_config *cdp1864;
34   const device_config *cassette;
35};
36
37#endif
src/mess/messdriv.c
r7016r7017
144144    DRIVER( vp111 )     /* 1977 Cosmac VIP VP-111                           */
145145    DRIVER( studio2 )   /* 1977 Studio II                                   */
146146    DRIVER( visicom )
147   DRIVER( mpt02s )
147   DRIVER( mpt02 )
148148   DRIVER( eti660 )
149//  DRIVER( mpt02h )
150//  DRIVER( mtc9016 )   /* 1978 Mustang 9016 Telespiel Computer             */
151//  DRIVER( shmc1200 )
149   DRIVER( mpt02h )
150   DRIVER( mtc9016 )   /* 1978 Mustang 9016 Telespiel Computer             */
151   DRIVER( shmc1200 )
152152
153153    /* Ensoniq */
154154    DRIVER( esq1 )   /* 1986 ESQ-1 Digital Wave Synthesizer */
src/mess/mess.mak
r7016r7017
15841584   $(MESS_DRIVERS)/zsbc3.o      \
15851585   $(MESS_DRIVERS)/dms5000.o   \
15861586   $(MESS_DRIVERS)/dms86.o      \
1587   $(MESS_DRIVERS)/codata.o      \
1587   $(MESS_DRIVERS)/codata.o   \
1588   $(MESS_DRIVERS)/eti660.o   \
15881589
15891590
15901591
src/mess/drivers/vip.c
r7016r7017
798798   MDRV_RAM_EXTRA_OPTIONS("2K,4K")
799799MACHINE_DRIVER_END
800800
801
802801/* ROMs */
803802
804803ROM_START( vip )
src/mess/drivers/eti660.c
r0r7017
1#include "driver.h"
2#include "includes/eti660.h"
3#include "cpu/cdp1802/cdp1802.h"
4#include "devices/cassette.h"
5#include "devices/messram.h"
6#include "machine/6821pia.h"
7#include "machine/rescap.h"
8#include "sound/cdp1864.h"
9
10/* Read/Write Handlers */
11
12static WRITE8_HANDLER( eti660_colorram_w )
13{
14}
15
16/* Memory Maps */
17
18static ADDRESS_MAP_START( eti660_map, ADDRESS_SPACE_PROGRAM, 8 )
19   AM_RANGE(0x0000, 0x03ff) AM_ROM
20   AM_RANGE(0x0400, 0x0fff) AM_RAM
21ADDRESS_MAP_END
22
23static ADDRESS_MAP_START( eti660_io_map, ADDRESS_SPACE_IO, 8 )
24   AM_RANGE(0x01, 0x01) AM_DEVREADWRITE(CDP1864_TAG, cdp1864_dispon_r, cdp1864_step_bgcolor_w)
25   AM_RANGE(0x03, 0x03) AM_WRITE(eti660_colorram_w)
26   AM_RANGE(0x04, 0x04) AM_DEVREADWRITE(CDP1864_TAG, cdp1864_dispoff_r, cdp1864_tone_latch_w)
27ADDRESS_MAP_END
28
29/* Input Ports */
30
31static INPUT_PORTS_START( eti660 )
32INPUT_PORTS_END
33
34/* Video */
35
36static WRITE_LINE_DEVICE_HANDLER( eti660_efx_w )
37{
38   eti660_state *driver_state = device->machine->driver_data;
39
40   driver_state->cdp1864_efx = state;
41}
42
43static VIDEO_UPDATE( eti660 )
44{
45   eti660_state *state = screen->machine->driver_data;
46
47   cdp1864_update(state->cdp1864, bitmap, cliprect);
48
49   return 0;
50}
51
52static CDP1864_INTERFACE( eti660_cdp1864_intf )
53{
54   CDP1802_TAG,
55   SCREEN_TAG,
56   CDP1864_INTERLACED,
57   DEVCB_LINE_VCC,
58   DEVCB_LINE_VCC,
59   DEVCB_LINE_VCC,
60   DEVCB_CPU_INPUT_LINE(CDP1802_TAG, CDP1802_INPUT_LINE_INT),
61   DEVCB_CPU_INPUT_LINE(CDP1802_TAG, CDP1802_INPUT_LINE_DMAOUT),
62   DEVCB_LINE(eti660_efx_w),
63   RES_K(2.2), /* R7 */
64   RES_K(1),   /* R5 */
65   RES_K(4.7), /* R6 */
66   RES_K(4.7)   /* R4 */
67};
68
69/* CDP1802 Interface */
70
71static CDP1802_MODE_READ( eti660_mode_r )
72{
73   eti660_state *state = device->machine->driver_data;
74
75   return state->cdp1802_mode;
76}
77
78static CDP1802_EF_READ( eti660_ef_r )
79{
80   eti660_state *state = device->machine->driver_data;
81
82   int ef = 0x0f;
83
84   /* CDP1864 EFx */
85   if (state->cdp1864_efx) ef -= EF1;
86
87   /* tape input */
88   if (cassette_input(state->cassette) < 0) ef -= EF2;
89
90   return ef;
91}
92
93static WRITE_LINE_DEVICE_HANDLER( eti660_q_w )
94{
95   eti660_state *driver_state = device->machine->driver_data;
96
97   /* CDP1864 audio output enable */
98   cdp1864_aoe_w(driver_state->cdp1864, state);
99
100   /* PULSE led */
101   set_led_status(device->machine, LED_PULSE, state);
102
103   /* tape output */
104   cassette_output(driver_state->cassette, state ? 1.0 : -1.0);
105}
106
107static WRITE8_DEVICE_HANDLER( eti660_dma_w )
108{
109   eti660_state *state = device->machine->driver_data;
110
111   state->color = state->color_ram[offset / 4];
112
113   cdp1864_con_w(state->cdp1864, 0); // HACK
114   cdp1864_dma_w(state->cdp1864, offset, data);
115}
116
117static CDP1802_INTERFACE( eti660_config )
118{
119   eti660_mode_r,
120   eti660_ef_r,
121   NULL,
122   DEVCB_LINE(eti660_q_w),
123   DEVCB_NULL,
124   DEVCB_HANDLER(eti660_dma_w)
125};
126
127/* PIA6821 Interface */
128
129static READ8_DEVICE_HANDLER( eti660_pia_a_r )
130{
131   /*
132
133        bit     description
134
135        PA0     keyboard row 0
136        PA1     keyboard row 1
137        PA2     keyboard row 2
138        PA3     keyboard row 3
139        PA4     keyboard column 0
140        PA5     keyboard column 1
141        PA6     keyboard column 2
142        PA7     keyboard column 3
143
144    */
145
146//   eti660_state *state = device->machine->driver_data;
147
148   return 0xf0;
149}
150
151static WRITE8_DEVICE_HANDLER( eti660_pia_a_w )
152{
153   /*
154
155        bit     description
156
157        PA0     keyboard row 0
158        PA1     keyboard row 1
159        PA2     keyboard row 2
160        PA3     keyboard row 3
161        PA4     keyboard column 0
162        PA5     keyboard column 1
163        PA6     keyboard column 2
164        PA7     keyboard column 3
165
166    */
167
168   eti660_state *state = device->machine->driver_data;
169
170   state->keylatch = data & 0x0f;
171}
172
173static const pia6821_interface bw12_pia_config =
174{
175   DEVCB_HANDLER(eti660_pia_a_r),                        /* port A input */
176   DEVCB_NULL,                                       /* port B input */
177   DEVCB_NULL,                                       /* CA1 input */
178   DEVCB_NULL,                                       /* CB1 input */
179   DEVCB_NULL,                                       /* CA2 input */
180   DEVCB_NULL,                                       /* CB2 input */
181   DEVCB_HANDLER(eti660_pia_a_w),                        /* port A output */
182   DEVCB_NULL,                                       /* port B output */
183   DEVCB_NULL,                                       /* CA2 output */
184   DEVCB_NULL,                                       /* CB2 output */
185   DEVCB_NULL,DEVCB_NULL
186//   DEVCB_CPU_INPUT_LINE(Z80_TAG, INPUT_LINE_IRQ0),            /* IRQA output */
187//   DEVCB_CPU_INPUT_LINE(Z80_TAG, INPUT_LINE_IRQ0)            /* IRQB output */
188};
189
190/* Machine Initialization */
191
192static MACHINE_START( eti660 )
193{
194   eti660_state *state = machine->driver_data;
195
196   /* find devices */
197   state->cdp1864 = devtag_get_device(machine, CDP1864_TAG);
198   state->cassette = devtag_get_device(machine, CASSETTE_TAG);
199
200   /* register for state saving */
201   state_save_register_global(machine, state->cdp1802_mode);
202   state_save_register_global(machine, state->cdp1864_efx);
203}
204
205/* Machine Drivers */
206
207static const cassette_config eti660_cassette_config =
208{
209   cassette_default_formats,
210   NULL,
211   CASSETTE_STOPPED | CASSETTE_MOTOR_ENABLED | CASSETTE_SPEAKER_MUTED
212};
213
214static MACHINE_DRIVER_START( eti660 )
215   MDRV_DRIVER_DATA(eti660_state)
216
217   /* basic machine hardware */
218   MDRV_CPU_ADD(CDP1802_TAG, CDP1802, XTAL_8_867238MHz/5)
219   MDRV_CPU_PROGRAM_MAP(eti660_map)
220   MDRV_CPU_IO_MAP(eti660_io_map)
221   MDRV_CPU_CONFIG(eti660_config)
222
223   MDRV_MACHINE_START(eti660)
224
225    /* video hardware */
226   MDRV_CDP1864_SCREEN_ADD(SCREEN_TAG, XTAL_8_867238MHz/5)
227
228   MDRV_PALETTE_LENGTH(8+8)
229   MDRV_VIDEO_UPDATE(eti660)
230
231   /* sound hardware */
232   MDRV_SPEAKER_STANDARD_MONO("mono")
233   MDRV_CDP1864_ADD(CDP1864_TAG, XTAL_8_867238MHz/5, eti660_cdp1864_intf)
234   MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25)
235
236   /* devices */
237//   MDRV_PIA6821_ADD(MC6821_TAG, eti660_mc6821_intf)
238   MDRV_CASSETTE_ADD("cassette", eti660_cassette_config)
239   
240   /* internal ram */
241   MDRV_RAM_ADD("messram")
242   MDRV_RAM_DEFAULT_SIZE("1K")
243   MDRV_RAM_EXTRA_OPTIONS("3K")
244MACHINE_DRIVER_END
245
246/* ROMs */
247
248ROM_START( eti660 )
249   ROM_REGION( 0x10000, CDP1802_TAG, 0 )
250   ROM_LOAD( "eti660.bin", 0x0000, 0x0400, CRC(811dfa62) SHA1(c0c4951e02f873f15560bdc3f35cdf3f99653922) )
251ROM_END
252
253/*    YEAR  NAME        PARENT  COMPAT  MACHINE     INPUT       INIT        COMPANY                        FULLNAME            FLAGS */
254COMP( 1978, eti660,      0,      0,      eti660,      eti660,      0,         "Electronics Today International",   "ETI-660 (Australia)",   GAME_NOT_WORKING )
src/mess/drivers/studio2.c
r7016r7017
186186
187187    TODO:
188188
189   - disable ic13/14 when cartridge plugged in
189190    - studio2 cpu clock from schematics
190191    - visicom alternate videoram @ 0x1300 ?
191192    - mpt02/mustang cdp1864 colors
r7016r7017
229230/* Memory Maps */
230231
231232static ADDRESS_MAP_START( studio2_map, ADDRESS_SPACE_PROGRAM, 8 )
233   ADDRESS_MAP_UNMAP_HIGH
232234   AM_RANGE(0x0000, 0x07ff) AM_ROM
233235   AM_RANGE(0x0800, 0x09ff) AM_MIRROR(0xf400) AM_RAM
234236ADDRESS_MAP_END
235237
236238static ADDRESS_MAP_START( studio2_io_map, ADDRESS_SPACE_IO, 8 )
239   ADDRESS_MAP_UNMAP_HIGH
237240   AM_RANGE(0x01, 0x01) AM_DEVREAD(CDP1861_TAG, studio2_cdp1861_dispon_r)
238241   AM_RANGE(0x02, 0x02) AM_WRITE(keylatch_w)
239242ADDRESS_MAP_END
r7016r7017
535538static MACHINE_DRIVER_START( studio2 )
536539   MDRV_DRIVER_DATA(studio2_state)
537540
538   // basic machine hardware
539   MDRV_CPU_ADD(CDP1802_TAG, CDP1802, 3579545/2) // the real clock is derived from an oscillator circuit
541   /* basic machine hardware */
542   MDRV_CPU_ADD(CDP1802_TAG, CDP1802, 1760000) /* the real clock is derived from an oscillator circuit */
540543   MDRV_CPU_PROGRAM_MAP(studio2_map)
541544   MDRV_CPU_IO_MAP(studio2_io_map)
542545   MDRV_CPU_CONFIG(studio2_config)
r7016r7017
544547   MDRV_MACHINE_START(studio2)
545548   MDRV_MACHINE_RESET(studio2)
546549
547    // video hardware
548   MDRV_CDP1861_SCREEN_ADD(SCREEN_TAG, 3579545/2)
550    /* video hardware */
551   MDRV_CDP1861_SCREEN_ADD(SCREEN_TAG, 1760000)
549552
550553   MDRV_PALETTE_LENGTH(2)
551554   MDRV_PALETTE_INIT(black_and_white)
552555   MDRV_VIDEO_UPDATE(studio2)
553556
554   MDRV_CDP1861_ADD(CDP1861_TAG, 3579545/2, studio2_cdp1861_intf)
557   MDRV_CDP1861_ADD(CDP1861_TAG, 1760000, studio2_cdp1861_intf)
555558
556   // sound hardware
559   /* sound hardware */
557560   MDRV_SPEAKER_STANDARD_MONO("mono")
558561   MDRV_SOUND_ADD("beep", BEEP, 0)
559562   MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.00)
r7016r7017
564567static MACHINE_DRIVER_START( visicom )
565568   MDRV_DRIVER_DATA(studio2_state)
566569
567   // basic machine hardware
570   /* basic machine hardware */
568571   MDRV_CPU_ADD(CDP1802_TAG, CDP1802, XTAL_3_579545MHz/2)
569572   MDRV_CPU_PROGRAM_MAP(visicom_map)
570573   MDRV_CPU_IO_MAP(visicom_io_map)
r7016r7017
573576   MDRV_MACHINE_START(studio2)
574577   MDRV_MACHINE_RESET(studio2)
575578
576    // video hardware
579    /* video hardware */
577580   MDRV_CDP1864_SCREEN_ADD(SCREEN_TAG, XTAL_3_579545MHz/2)
578581
579582   MDRV_PALETTE_LENGTH(2)
r7016r7017
582585
583586   MDRV_CDP1861_ADD(CDP1861_TAG, XTAL_3_579545MHz/2/8, studio2_cdp1861_intf)
584587
585   // sound hardware
588   /* sound hardware */
586589   MDRV_SPEAKER_STANDARD_MONO("mono")
587590   MDRV_SOUND_ADD("beep", BEEP, 0)
588591   MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.00)
r7016r7017
593596static MACHINE_DRIVER_START( mpt02 )
594597   MDRV_DRIVER_DATA(studio2_state)
595598
596   // basic machine hardware
599   /* basic machine hardware */
597600   MDRV_CPU_ADD(CDP1802_TAG, CDP1802, CDP1864_CLOCK)
598601   MDRV_CPU_PROGRAM_MAP(mpt02_map)
599602   MDRV_CPU_IO_MAP(mpt02_io_map)
r7016r7017
602605   MDRV_MACHINE_START(mpt02)
603606   MDRV_MACHINE_RESET(mpt02)
604607
605    // video hardware
608    /* video hardware */
606609   MDRV_CDP1864_SCREEN_ADD(SCREEN_TAG, CDP1864_CLOCK)
607610
608611   MDRV_PALETTE_LENGTH(8+8)
609612   MDRV_VIDEO_UPDATE(mpt02)
610613
611   // sound hardware
614   /* sound hardware */
612615   MDRV_SPEAKER_STANDARD_MONO("mono")
613616   MDRV_SOUND_ADD("beep", BEEP, 0)
614617   MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.00)
r7016r7017
623626
624627ROM_START( studio2 )
625628   ROM_REGION( 0x10000, CDP1802_TAG, 0 )
626   ROM_LOAD( "84932", 0x0000, 0x0200, NO_DUMP )
627   ROM_LOAD( "84933", 0x0200, 0x0200, NO_DUMP )
628   ROM_LOAD( "85456", 0x0400, 0x0200, NO_DUMP )
629   ROM_LOAD( "85457", 0x0600, 0x0200, NO_DUMP )
630   ROM_LOAD( "studio2.rom", 0x0000, 0x0800, BAD_DUMP CRC(a494b339) SHA1(f2650dacc9daab06b9fdf0e7748e977b2907010c) )
629   ROM_LOAD( "84932.ic11", 0x0000, 0x0200, CRC(283b7e65) SHA1(4b6d21cde59712ecb5941ff63d8eb161420b0aac) )
630   ROM_LOAD( "84933.ic12", 0x0200, 0x0200, CRC(a396b77c) SHA1(023517f67af61790e6916b6c4dbe2d9dc07ae3ff) )
631   ROM_LOAD( "85456.ic13", 0x0400, 0x0200, CRC(d25cf97f) SHA1(d489f41f1125c76cc8ed9defa82a877ae014ef21) )
632   ROM_LOAD( "85457.ic14", 0x0600, 0x0200, CRC(74aa724f) SHA1(085832f29e0d2a387c75463d66c54fb6c1e9e72c) )
631633ROM_END
632634
633635ROM_START( visicom )
r7016r7017
635637   ROM_LOAD( "visicom.q003", 0x0000, 0x0800, CRC(23d22074) SHA1(a0a8be23f70621a2bd8010b1134e8a0019075bf1) )
636638ROM_END
637639
638ROM_START( mtc9016 )
640ROM_START( mpt02 )
639641   ROM_REGION( 0x10000, CDP1802_TAG, 0 )
640   ROM_LOAD( "86676.ic13",  0x0000, 0x0400, NO_DUMP )
641   ROM_LOAD( "86677b.ic14", 0x0400, 0x0400, NO_DUMP )
642   ROM_LOAD( "87201.ic12",  0x0a00, 0x0400, NO_DUMP )
643ROM_END
644
645ROM_START( shmc1200 )
646   ROM_REGION( 0x10000, CDP1802_TAG, 0 )
647   ROM_LOAD( "shmc1200.bin",  0x0000, 0x0800, NO_DUMP )
648ROM_END
649
650ROM_START( mpt02s )
651   ROM_REGION( 0x10000, CDP1802_TAG, 0 )
652642   ROM_LOAD( "86676.ic13",  0x0000, 0x0400, CRC(a7d0dd3b) SHA1(e1881ab4d67a5d735dd2c8d7e924e41df6f2aeec) )
653643   ROM_LOAD( "86677b.ic14", 0x0400, 0x0400, CRC(82a2d29e) SHA1(37e02089d611db10bad070d89c8801de41521189) )
654644   ROM_LOAD( "87201.ic12",  0x0c00, 0x0400, CRC(8006a1e3) SHA1(b67612d98231485fce55d604915abd19b6d64eac) )
655645ROM_END
656646
657ROM_START( mpt02h )
658   ROM_REGION( 0x10000, CDP1802_TAG, 0 )
659ROM_END
647#define rom_mpt02h rom_mpt02
648#define rom_mtc9016 rom_mpt02
649#define rom_shmc1200 rom_mpt02
660650
661ROM_START( eti660 )
662   ROM_REGION( 0x10000, CDP1802_TAG, 0 )
663   ROM_LOAD( "eti660.bin", 0x0000, 0x0400, CRC(811dfa62) SHA1(c0c4951e02f873f15560bdc3f35cdf3f99653922) )
664ROM_END
665
666651/* Driver Initialization */
667652
668653static TIMER_CALLBACK( setup_beep )
r7016r7017
682667/*    YEAR  NAME        PARENT  COMPAT  MACHINE     INPUT       INIT        COMPANY   FULLNAME */
683668CONS( 1977,   studio2,   0,      0,      studio2,   studio2,   studio2,   "RCA",      "Studio II", GAME_SUPPORTS_SAVE )
684669CONS( 1978, visicom,   studio2,0,      visicom,   studio2,   studio2,   "Toshiba",   "Visicom (Japan)", GAME_IMPERFECT_GRAPHICS | GAME_WRONG_COLORS | GAME_SUPPORTS_SAVE )
685CONS( 1978,   mpt02s,      studio2,0,      mpt02,      studio2,   studio2,   "Soundic",   "MPT-02 Victory Home TV Programmer (Austria)", GAME_NOT_WORKING )
670CONS( 1978,   mpt02,      studio2,0,      mpt02,      studio2,   studio2,   "Soundic",   "MPT-02 Victory Home TV Programmer (Austria)", GAME_NOT_WORKING )
686671CONS( 1978,   mpt02h,      studio2,0,      mpt02,      studio2,   studio2,   "Hanimex",   "MPT-02 Jeu TV Programmable (France)", GAME_NOT_WORKING )
687672CONS( 1978,   mtc9016,   studio2,0,      mpt02,      studio2,   studio2,   "Mustang",   "9016 Telespiel Computer (Germany)", GAME_NOT_WORKING )
688673CONS( 1978, shmc1200,   studio2,0,      mpt02,      studio2,   studio2,   "Sheen",   "1200 Micro Computer (Australia)", GAME_NOT_WORKING )
689CONS( 1978, eti660,      studio2,0,      mpt02,      studio2,   studio2,   "Electronics Today International",   "ETI-660 (Australia)", GAME_NOT_WORKING )

Previous 15994 Revisions Next


© 1998-2018 The MESS Team