Previous 15994 Revisions Next

r3285 Thursday 18th September, 2008 at 15:11:32 UTC by Curt Coder
[SG1000] Removed omv from messdriv, fixed pcb layout.
[STUDIO2] Added clones.
[VIP] Added preliminary CDP1862 NTSC color video.
[src/mess]mess.mak messdriv.c
[src/mess/drivers]sg1000.c studio2.c tmc2000e.c vip.c
[src/mess/includes]vip.h
[src/mess/video]cdp1861.c cdp1861.h cdp1862.c* cdp1862.h* cdp1864.c cdp1864.h tmc1800.c

src/mess/video/cdp1862.c
r0r3285
1/*
2 
3    TODO:
4 
5   - NTSC output, currently using RGB
6 
7*/
8 
9#include "driver.h"
10#include "cdp1862.h"
11 
12typedef struct _cdp1862_t cdp1862_t;
13struct _cdp1862_t
14{
15   const cdp1862_interface *intf;
16 
17   const device_config *screen;   /* screen */
18   bitmap_t *bitmap;            /* bitmap */
19 
20   int bgcolor;               /* background color */
21   int con;                  /* color on */
22};
23 
24static const int CDP1862_BACKGROUND_COLOR_SEQUENCE[] = { 2, 0, 1, 4 };
25 
26INLINE cdp1862_t *get_safe_token(const device_config *device)
27{
28   assert(device != NULL);
29   assert(device->token != NULL);
30 
31   return (cdp1862_t *)device->token;
32}
33 
34/* Palette Initialization */
35 
36static void cdp1862_init_palette(const device_config *device)
37{
38   cdp1862_t *cdp1862 = get_safe_token(device);
39   int i;
40 
41   double res_total = cdp1862->intf->res_r + cdp1862->intf->res_g + cdp1862->intf->res_b + cdp1862->intf->res_bkg;
42 
43   int weight_r = (cdp1862->intf->res_r / res_total) * 100;
44   int weight_g = (cdp1862->intf->res_g / res_total) * 100;
45   int weight_b = (cdp1862->intf->res_b / res_total) * 100;
46   int weight_bkg = (cdp1862->intf->res_bkg / res_total) * 100;
47 
48   for (i = 0; i < 16; i++)
49   {
50      int r, g, b, luma = 0;
51 
52      luma += (i & 4) ? weight_r : 0;
53      luma += (i & 1) ? weight_g : 0;
54      luma += (i & 2) ? weight_b : 0;
55      luma += (i & 8) ? 0 : weight_bkg;
56 
57      luma = (luma * 0xff) / 100;
58 
59      r = (i & 4) ? luma : 0;
60      g = (i & 1) ? luma : 0;
61      b = (i & 2) ? luma : 0;
62 
63      palette_set_color_rgb( device->machine, i, r, g, b );
64   }
65}
66 
67/* Step Background Color */
68 
69WRITE8_DEVICE_HANDLER( cdp1862_bkg_w )
70{
71   cdp1862_t *cdp1862 = get_safe_token(device);
72 
73   if (++cdp1862->bgcolor > 3) cdp1862->bgcolor = 0;
74}
75 
76/* DMA write */
77 
78void cdp1862_dma_w(const device_config *device, UINT8 data, int color_on, int rdata, int gdata, int bdata)
79{
80   cdp1862_t *cdp1862 = get_safe_token(device);
81 
82   int sx = video_screen_get_hpos(cdp1862->screen) + 4;
83   int y = video_screen_get_vpos(cdp1862->screen);
84   int x;
85 
86   if (color_on == ASSERT_LINE)
87   {
88      /* enable color data input latch */
89      cdp1862->con = ASSERT_LINE;
90   }
91   
92   if (cdp1862->con == CLEAR_LINE)
93   {
94      /* latch white dot color */
95      rdata = 1;
96      gdata = 1;
97      bdata = 1;
98   }
99 
100   for (x = 0; x < 8; x++)
101   {
102      int color = CDP1862_BACKGROUND_COLOR_SEQUENCE[cdp1862->bgcolor] + 8;
103 
104      if (BIT(data, 7))
105      {
106         color = (gdata << 2) | (bdata << 1) | rdata;
107      }
108 
109      *BITMAP_ADDR16(cdp1862->bitmap, y, sx + x) = color;
110 
111      data <<= 1;
112   }
113}
114 
115/* Screen Update */
116 
117void cdp1862_update(const device_config *device, bitmap_t *bitmap, const rectangle *cliprect)
118{
119   cdp1862_t *cdp1862 = get_safe_token(device);
120 
121   copybitmap(bitmap, cdp1862->bitmap, 0, 0, 0, 0, cliprect);
122   fillbitmap(cdp1862->bitmap, CDP1862_BACKGROUND_COLOR_SEQUENCE[cdp1862->bgcolor] + 8, cliprect);
123}
124 
125/* Device Interface */
126 
127static DEVICE_START( cdp1862 )
128{
129   cdp1862_t *cdp1862 = get_safe_token(device);
130   char unique_tag[30];
131 
132   /* validate arguments */
133   assert(device != NULL);
134   assert(device->tag != NULL);
135   assert(strlen(device->tag) < 20);
136 
137   cdp1862->intf = device->static_config;
138 
139   assert(cdp1862->intf != NULL);
140   assert(cdp1862->intf->clock > 0);
141 
142   /* get the screen device */
143   cdp1862->screen = device_list_find_by_tag(device->machine->config->devicelist, VIDEO_SCREEN, cdp1862->intf->screen_tag);
144   assert(cdp1862->screen != NULL);
145 
146   /* allocate the temporary bitmap */
147   cdp1862->bitmap = auto_bitmap_alloc(video_screen_get_width(cdp1862->screen), video_screen_get_height(cdp1862->screen), video_screen_get_format(cdp1862->screen));
148 
149   /* initialize the palette */
150   cdp1862_init_palette(device);
151 
152   /* register for state saving */
153   state_save_combine_module_and_tag(unique_tag, "cdp1862", device->tag);
154 
155   state_save_register_item(unique_tag, 0, cdp1862->bgcolor);
156   state_save_register_item(unique_tag, 0, cdp1862->con);
157 
158   state_save_register_bitmap(unique_tag, 0, "cdp1862->bitmap", cdp1862->bitmap);
159 
160   return DEVICE_START_OK;
161}
162 
163static DEVICE_RESET( cdp1862 )
164{
165   cdp1862_t *cdp1862 = get_safe_token(device);
166 
167   cdp1862->bgcolor = 0;
168   cdp1862->con = CLEAR_LINE;
169}
170 
171static DEVICE_SET_INFO( cdp1862 )
172{
173   switch (state)
174   {
175      /* no parameters to set */
176   }
177}
178 
179DEVICE_GET_INFO( cdp1862 )
180{
181   switch (state)
182   {
183      /* --- the following bits of info are returned as 64-bit signed integers --- */
184      case DEVINFO_INT_TOKEN_BYTES:               info->i = sizeof(cdp1862_t);            break;
185      case DEVINFO_INT_INLINE_CONFIG_BYTES:         info->i = 0;                        break;
186      case DEVINFO_INT_CLASS:                     info->i = DEVICE_CLASS_PERIPHERAL;         break;
187 
188      /* --- the following bits of info are returned as pointers to data or functions --- */
189      case DEVINFO_FCT_SET_INFO:                  info->set_info = DEVICE_SET_INFO_NAME(cdp1862); break;
190      case DEVINFO_FCT_START:                     info->start = DEVICE_START_NAME(cdp1862);   break;
191      case DEVINFO_FCT_STOP:                     /* Nothing */                        break;
192      case DEVINFO_FCT_RESET:                     info->reset = DEVICE_RESET_NAME(cdp1862);   break;
193 
194      /* --- the following bits of info are returned as NULL-terminated strings --- */
195      case DEVINFO_STR_NAME:                     info->s = "RCA CDP1862";               break;
196      case DEVINFO_STR_FAMILY:                  info->s = "RCA CDP1800";               break;
197      case DEVINFO_STR_VERSION:                  info->s = "1.0";                     break;
198      case DEVINFO_STR_SOURCE_FILE:               info->s = __FILE__;                     break;
199      case DEVINFO_STR_CREDITS:                  info->s = "Copyright MESS Team";         break;
200   }
201}
src/mess/video/cdp1862.h
r0r3285
1/*
2 
3            RCA CDP1862 COS/MOS Color Generator Controller
4 
5                        _______  _______
6               RD    1   ---|      \/      |---  24  Vdd
7             _RESET    2   ---|            |---  23  R LUM
8               _CON    3   ---|            |---  22  G LUM
9             B CHR    4   ---|            |---  21  GD
10             B LUM    5   ---|            |---  20  BLG LUM
11               BKG    6   ---|   CDP1862C   |---  19  G CHR
12            _LD CLK    7   ---|   top view   |---  18  R CHR
13               STP    8   ---|            |---  17  BKG CHR
14            CLK OUT    9   ---|            |---  16  BD
15              _SYNC   10   ---|             |---  15  BURST
16             LUM IN   11   ---|            |---  14  _XTAL
17               Vss   12   ---|________________|---  13  XTAL
18 
19 
20            http://homepage.mac.com/ruske/cosmacelf/cdp1862.pdf
21 
22*/
23 
24#ifndef __CDP1862__
25#define __CDP1862__
26 
27#define CPD1862_CLOCK   XTAL_7_15909MHz
28 
29#define CDP1862      DEVICE_GET_INFO_NAME(cdp1862)
30 
31/* interface */
32typedef struct _cdp1862_interface cdp1862_interface;
33struct _cdp1862_interface
34{
35   const char *screen_tag;      /* screen we are acting on */
36   int clock;               /* the clock (pin 14) of the chip */
37 
38   double res_r;            /* red output resistor value */
39   double res_g;            /* green output resistor value */
40   double res_b;            /* blue output resistor value */
41   double res_bkg;            /* background output resistor value */
42};
43#define CDP1862_INTERFACE(name) const cdp1862_interface (name)=
44 
45/* device interface */
46DEVICE_GET_INFO( cdp1862 );
47 
48/* step background color */
49WRITE8_DEVICE_HANDLER( cdp1862_bkg_w );
50 
51/* DMA write */
52void cdp1862_dma_w(const device_config *device, UINT8 data, int color_on, int rdata, int gdata, int bdata);
53 
54/* screen update */
55void cdp1862_update(const device_config *device, bitmap_t *bitmap, const rectangle *cliprect);
56 
57#endif
src/mess/video/tmc1800.c
r3284r3285
6464static CDP1864_INTERFACE( tmc2000_cdp1864_intf )
6565{
6666   SCREEN_TAG,
67   CDP1864_CLK_FREQ,
67   XTAL_1_75MHz,
6868   CDP1864_INTERLACED,
6969   tmc2000_int_w,
7070   tmc2000_dmao_w,
r3284r3285
106106static CDP1864_INTERFACE( oscnano_cdp1864_intf )
107107{
108108   SCREEN_TAG,
109   CDP1864_CLK_FREQ,
109   XTAL_1_75MHz,
110110   CDP1864_INTERLACED,
111111   oscnano_int_w,
112112   oscnano_dmao_w,
r3284r3285
168168MACHINE_DRIVER_START( tmc2000_video )
169169   MDRV_SCREEN_ADD(SCREEN_TAG, RASTER)
170170   MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16)
171   MDRV_SCREEN_RAW_PARAMS(CDP1864_CLK_FREQ, CDP1864_SCREEN_WIDTH, CDP1864_HBLANK_END, CDP1864_HBLANK_START, CDP1864_TOTAL_SCANLINES, CDP1864_SCANLINE_VBLANK_END, CDP1864_SCANLINE_VBLANK_START)
171   MDRV_SCREEN_RAW_PARAMS(XTAL_1_75MHz, CDP1864_SCREEN_WIDTH, CDP1864_HBLANK_END, CDP1864_HBLANK_START, CDP1864_TOTAL_SCANLINES, CDP1864_SCANLINE_VBLANK_END, CDP1864_SCANLINE_VBLANK_START)
172172
173173   MDRV_PALETTE_LENGTH(8+8)
174174   MDRV_VIDEO_UPDATE(tmc2000)
r3284r3285
180180MACHINE_DRIVER_START( oscnano_video )
181181   MDRV_SCREEN_ADD(SCREEN_TAG, RASTER)
182182   MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16)
183   MDRV_SCREEN_RAW_PARAMS(CDP1864_CLK_FREQ, CDP1864_SCREEN_WIDTH, CDP1864_HBLANK_END, CDP1864_HBLANK_START, CDP1864_TOTAL_SCANLINES, CDP1864_SCANLINE_VBLANK_END, CDP1864_SCANLINE_VBLANK_START)
183   MDRV_SCREEN_RAW_PARAMS(XTAL_1_75MHz, CDP1864_SCREEN_WIDTH, CDP1864_HBLANK_END, CDP1864_HBLANK_START, CDP1864_TOTAL_SCANLINES, CDP1864_SCANLINE_VBLANK_END, CDP1864_SCANLINE_VBLANK_START)
184184
185185   MDRV_PALETTE_LENGTH(8+8)
186186   MDRV_VIDEO_UPDATE(oscnano)
src/mess/video/cdp1864.c
r3284r3285
1#include "driver.h"
2#include "sndintrf.h"
3#include "streams.h"
4#include "cpu/cdp1802/cdp1802.h"
5#include "sound/beep.h"
6#include "video/cdp1864.h"
7
81/*
92
103    TODO:
114
125   - interlace mode
6   - PAL output, currently using RGB
137    - connect to sound system when possible
148   - cpu synchronization
159
r3284r3285
2014
2115*/
2216
17#include "driver.h"
18#include "sndintrf.h"
19#include "streams.h"
20#include "cpu/cdp1802/cdp1802.h"
21#include "sound/beep.h"
22#include "video/cdp1864.h"
23
2324#define CDP1864_DEFAULT_LATCH   0x35
2425
2526#define CDP1864_CYCLES_DMA_START   2*8
r3284r3285
249250   cdp1864_t *cdp1864 = get_safe_token(device);
250251
251252   cdp1864->latch = data;
252   beep_set_frequency(0, CDP1864_CLK_FREQ / 8 / 4 / (data + 1) / 2); // TODO: remove this
253   beep_set_frequency(0, CDP1864_CLOCK / 8 / 4 / (data + 1) / 2); // TODO: remove this
253254}
254255
255256/* DMA Write */
src/mess/video/cdp1864.h
r3284r3285
3232#ifndef __CDP1864__
3333#define __CDP1864__
3434
35#define CDP1864_CLK_FREQ      1750000.0
35#define CDP1864_CLOCK   XTAL_1_75MHz
3636
3737#define CDP1864_VISIBLE_COLUMNS   64
3838#define CDP1864_VISIBLE_LINES   192
src/mess/video/cdp1861.c
r3284r3285
3030   return (cdp1861_t *)device->token;
3131}
3232
33/* Timer Callbacks */
34
3335static TIMER_CALLBACK(cdp1861_int_tick)
3436{
3537   const device_config *device = ptr;
r3284r3285
218220   state_save_register_item(unique_tag, 0, cdp1861->disp);
219221   state_save_register_item(unique_tag, 0, cdp1861->dmaout);
220222   state_save_register_bitmap(unique_tag, 0, "cdp1861->bitmap", cdp1861->bitmap);
223
221224   return DEVICE_START_OK;
222225}
223226
src/mess/video/cdp1861.h
r3284r3285
22
33                 RCA CDP1861 Video Display Controller
44
5                        ________________
5                        _______  _______
66              CLK_    1   ---|      \/      |---  24  Vdd
77              DMAO_    2   ---|            |---  23  CLEAR_
88               INT_    3   ---|            |---  22  SC1
src/mess/includes/vip.h
r3284r3285
55 
66#define CDP1802_TAG "u1"
77#define CDP1861_TAG "u2"
8#define CDP1862_TAG "cdp1862"
89 
10#define VP590_COLOR_RAM_SIZE   0x100
11 
912#define VIP_BANK_RAM      0
1013#define VIP_BANK_ROM      1
1114 
15#define VIP_VIDEO_CDP1861   0
16#define VIP_VIDEO_CDP1862   1
17 
1218typedef struct _vip_state vip_state;
1319struct _vip_state
1420{
1521   /* video state */
1622   int cdp1861_efx;      /* EFx */
23   UINT8 *colorram;      /* CDP1862 color RAM */
1724 
1825   /* keyboard state */
1926   int keylatch;         /* key latch */
2027   int reset;            /* reset activated */
28 
29   /* devices */
30   const device_config *cdp1861;
31   const device_config *cdp1862;
2132};
2233 
2334#endif
src/mess/messdriv.c
r3284r3285
8181   /* SEGA */
8282   DRIVER( sg1000 )   /* Sega SG-1000 (Japan)                        */
8383   DRIVER( sg1000m2 )   /* Sega SG-1000 Mark II (Japan)                  */
84   DRIVER( omv )      /* Tsukuda Original Othello Multivision            */
8584   DRIVER( sc3000 )   /* Sega SC-3000 (Japan)                        */
8685   DRIVER( sc3000h )   /* Sega SC-3000H (Japan)                     */
8786   DRIVER( sf7000 )   /* Sega SC-3000 w/ SF-7000 (Japan)               */
r3284r3285
123122   /* RCA */
124123   DRIVER( vip )      /* 1977 Cosmac VIP                           */
125124   DRIVER( studio2 )   /* 1977 Studio II                           */
126   DRIVER( m9016tc )   /* 1978 Mustang 9016 Telespiel Computer            */
127125
128126   /* FAIRCHILD */
129127   DRIVER( channelf )   /* Fairchild Channel F VES - 1976               */
src/mess/mess.mak
r3284r3285
759759$(MESSOBJ)/rca.a: \
760760   $(MESS_DRIVERS)/vip.o  \
761761   $(MESS_DRIVERS)/studio2.o  \
762   $(MESS_VIDEO)/cdp1861.o
762   $(MESS_VIDEO)/cdp1861.o \
763   $(MESS_VIDEO)/cdp1862.o
763764
764765$(MESSOBJ)/fairch.a: \
765766   $(MESS_VIDEO)/channelf.o \
src/mess/drivers/vip.c
r3284r3285
22
33    TODO:
44
5   - CDP1862 colorram
56    - pcb layout guru-style readme
67    - artwork for leds
7    - VP-550/551 Super Sound Board
8   - VP-580 Expansion Keyboard
9   - VP-585 Expansion Keyboard Interface
10    - VP-590 Color Board
11    - VP-595 Simple Sound Board
12    - VP-601/611 ASCII Keyboard
13    - VP-700 Expanded Tiny Basic Board
8    - VP-550/551 Super Sound Board (VP-550 2 channel, VP-551 4 channel sound)
9   - VP-580 Expansion Keyboard (connects to VP-585 or VP-590)
10   - VP-585 Expansion Keyboard Interface (2 keypad connectors for VP-580)
11    - VP-590 Color Board (CDP1862, 2 keypad connectors for VP-580)
12    - VP-595 Simple Sound Board (CDP1863?)
13    - VP-601/611 ASCII Keyboard (VP-601 58 keys, VP611 58 keys + 16 keys numerical keypad)
14    - VP-700 Expanded Tiny Basic Board (4 KB ROM expansion)
1415
1516   - VIP Blockout
1617
r3284r3285
3233#include "sound/beep.h"
3334#include "sound/discrete.h"
3435#include "video/cdp1861.h"
36#include "video/cdp1862.h"
37#include "machine/rescap.h"
3538
3639static QUICKLOAD_LOAD( vip );
3740static MACHINE_RESET( vip );
r3284r3285
8689   case 4 * 1024:
8790      memory_install_readwrite8_handler(machine, 0, ADDRESS_SPACE_PROGRAM, 0x0000, 0x0fff, 0, 0x7000, SMH_BANK1, SMH_BANK1);
8891      break;
92
93   case 32 * 1024:
94      memory_install_readwrite8_handler(machine, 0, ADDRESS_SPACE_PROGRAM, 0x0000, 0x7fff, 0, 0, SMH_BANK1, SMH_BANK1);
95      break;
8996   }
9097}
9198
r3284r3285
100107static ADDRESS_MAP_START( vip_io_map, ADDRESS_SPACE_IO, 8 )
101108   AM_RANGE(0x01, 0x01) AM_DEVREADWRITE(CDP1861, CDP1861_TAG, cdp1861_dispon_r, cdp1861_dispoff_w)
102109   AM_RANGE(0x02, 0x02) AM_WRITE(keylatch_w)
103//  AM_RANGE(0x03, 0x03) AM_READWRITE(io_r, io_w)
104110   AM_RANGE(0x04, 0x04) AM_WRITE(bankswitch_w)
111//   AM_RANGE(0x05, 0x05) AM_DEVWRITE(CDP1862, CDP1862_TAG, cdp1862_bkg_w)
105112ADDRESS_MAP_END
106113
107114/* Input Ports */
108115
109116static INPUT_PORTS_START( vip )
110   PORT_START("KEYPAD")
117   PORT_START("KEYPAD1")
111118   PORT_BIT( 0x0001, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("0 MW") PORT_CODE(KEYCODE_0) PORT_CODE(KEYCODE_0_PAD)
112119   PORT_BIT( 0x0002, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("1") PORT_CODE(KEYCODE_1) PORT_CODE(KEYCODE_1_PAD)
113120   PORT_BIT( 0x0004, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("2") PORT_CODE(KEYCODE_2) PORT_CODE(KEYCODE_2_PAD)
r3284r3285
127134
128135   PORT_START("RUN")
129136   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Run/Reset") PORT_CODE(KEYCODE_R) PORT_TOGGLE
137
138   PORT_START("KEYBOARD")
139   PORT_CONFNAME( 0x07, 0x00, "Keyboard")
140   PORT_CONFSETTING( 0x00, "Standard" )
141   PORT_CONFSETTING( 0x01, "VP-580 Expansion Keyboard" )
142   PORT_CONFSETTING( 0x02, "2x VP-580 Expansion Keyboard" )
143   PORT_CONFSETTING( 0x03, "VP-601 ASCII Keyboard" )
144   PORT_CONFSETTING( 0x04, "VP-611 ASCII Keyboard" )
145   
146   PORT_START("VIDEO")
147   PORT_CONFNAME( 0x01, 0x00, "Video")
148   PORT_CONFSETTING( 0x00, "Standard" )
149   PORT_CONFSETTING( 0x01, "VP-590 Color Board" )
150
151   PORT_START("SOUND")
152   PORT_CONFNAME( 0x03, 0x00, "Sound")
153   PORT_CONFSETTING( 0x00, DEF_STR( None ) )
154   PORT_CONFSETTING( 0x01, "VP-595 Simple Sound Board" )
155   PORT_CONFSETTING( 0x02, "VP-550 Super Sound Board" )
156   PORT_CONFSETTING( 0x03, "VP-551 Super Sound Board" )
130157INPUT_PORTS_END
131158
132159/* Video */
r3284r3285
157184   vip_efx_w
158185};
159186
187static CDP1862_INTERFACE( vip_cdp1862_intf )
188{
189   SCREEN_TAG,
190   CPD1862_CLOCK,
191   RES_K(1.21), // ???
192   RES_K(2.05), // ???
193   RES_K(2.26), // ???
194   RES_K(3.92)    // ???
195};
196
160197static VIDEO_UPDATE( vip )
161198{
162   const device_config *cdp1861 = device_list_find_by_tag(screen->machine->config->devicelist, CDP1861, CDP1861_TAG);
199   vip_state *state = screen->machine->driver_data;
163200
164   cdp1861_update(cdp1861, bitmap, cliprect);
201   switch (input_port_read(screen->machine, "VIDEO"))
202   {
203   case VIP_VIDEO_CDP1861:
204      {
205         cdp1861_update(state->cdp1861, bitmap, cliprect);
206      }
207      break;
165208
209   case VIP_VIDEO_CDP1862:
210      {
211         cdp1862_update(state->cdp1862, bitmap, cliprect);
212      }
213      break;
214   }
215
166216   return 0;
167217}
168218
r3284r3285
204254        EF1     CDP1861
205255        EF2     tape in
206256        EF3     keyboard
207        EF4     ?
257        EF4     extended keyboard
208258    */
209259
210260   /* CDP1861 */
r3284r3285
214264   if (cassette_input(cassette_device_image(machine)) < 0) flags -= EF2;
215265
216266   /* keyboard */
217   if (input_port_read(machine, "KEYPAD") & (1 << state->keylatch)) flags -= EF3;
267   if (input_port_read(machine, "KEYPAD1") & (1 << state->keylatch)) flags -= EF3;
218268
269   /* extended keyboard */
270//   if (input_port_read(machine, "KEYPAD2") & (1 << state->keylatch)) flags -= EF4;
271
219272   return flags;
220273}
221274
r3284r3285
233286
234287static CDP1802_DMA_WRITE( vip_dma_w )
235288{
236   const device_config *cdp1861 = device_list_find_by_tag(machine->config->devicelist, CDP1861, CDP1861_TAG);
289   vip_state *state = machine->driver_data;
237290
238   cdp1861_dma_w(cdp1861, data);
291   switch (input_port_read(machine, "VIDEO"))
292   {
293   case VIP_VIDEO_CDP1861:
294      {
295         cdp1861_dma_w(state->cdp1861, data);
296      }
297      break;
298
299   case VIP_VIDEO_CDP1862:
300      {
301         cdp1862_dma_w(state->cdp1862, data, ASSERT_LINE, 1, 1, 1);
302      }
303      break;
304   }
239305}
240306
241307static CDP1802_INTERFACE( vip_config )
r3284r3285
274340      ram[addr] = mame_rand(machine) & 0xff;
275341   }
276342
343   /* allocate color RAM */
344   
345   state->colorram = auto_malloc(VP590_COLOR_RAM_SIZE);
346
277347   /* enable power LED */
278348
279349   set_led_status(0, 1);
280350
351   /* look up devices */
352
353   state->cdp1861 = device_list_find_by_tag(machine->config->devicelist, CDP1861, CDP1861_TAG);
354   state->cdp1862 = device_list_find_by_tag(machine->config->devicelist, CDP1862, CDP1862_TAG);
355
281356   /* register for state saving */
282357
358   state_save_register_global_pointer(state->colorram, VP590_COLOR_RAM_SIZE);
359
283360   state_save_register_global(state->cdp1861_efx);
284361   state_save_register_global(state->keylatch);
285362   state_save_register_global(state->reset);
r3284r3285
287364
288365static MACHINE_RESET( vip )
289366{
290   /* reset CDP1861 */
367   vip_state *state = machine->driver_data;
291368
292   const device_config *cdp1861 = device_list_find_by_tag(machine->config->devicelist, CDP1861, CDP1861_TAG);
293   cdp1861->reset(cdp1861);
369   /* reset video chips */
294370
371   state->cdp1861->reset(state->cdp1861);
372   state->cdp1862->reset(state->cdp1862);
373
374   /* map CDP1862 memory */
375
376   switch (input_port_read(machine, "VIDEO"))
377   {
378   case VIP_VIDEO_CDP1861:
379      memory_install_write8_device_handler(state->cdp1862, 0, ADDRESS_SPACE_IO, 0x05, 0x05, 0, 0, SMH_UNMAP);
380      break;
381
382   case VIP_VIDEO_CDP1862:
383      memory_install_write8_device_handler(state->cdp1862, 0, ADDRESS_SPACE_IO, 0x05, 0x05, 0, 0, cdp1862_bkg_w);
384      break;
385   }
386
295387   /* enable ROM mirror at 0x0000 */
296388
297389   memory_install_readwrite8_handler(machine, 0, ADDRESS_SPACE_PROGRAM, 0x0000, 0x01ff, 0, 0x7e00, SMH_BANK1, SMH_UNMAP);
r3284r3285
324416   MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16)
325417   MDRV_SCREEN_RAW_PARAMS(XTAL_3_52128MHz/2, CDP1861_SCREEN_WIDTH, CDP1861_HBLANK_END, CDP1861_HBLANK_START, CDP1861_TOTAL_SCANLINES, CDP1861_SCANLINE_VBLANK_END, CDP1861_SCANLINE_VBLANK_START)
326418
327   MDRV_PALETTE_LENGTH(2)
419   MDRV_PALETTE_LENGTH(16)
328420   MDRV_PALETTE_INIT(black_and_white)
329421   MDRV_VIDEO_UPDATE(vip)
330422
331423   MDRV_DEVICE_ADD(CDP1861_TAG, CDP1861)
332424   MDRV_DEVICE_CONFIG(vip_cdp1861_intf)
333425
426   MDRV_DEVICE_ADD(CDP1862_TAG, CDP1862)
427   MDRV_DEVICE_CONFIG(vip_cdp1862_intf)
428
334429   /* sound hardware */
335430   MDRV_SPEAKER_STANDARD_MONO("mono")
336431   MDRV_SOUND_ADD("discrete", DISCRETE, 0)
r3284r3285
338433   MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.80)
339434
340435   /* devices */
341   MDRV_QUICKLOAD_ADD(vip, "bin,c8", 0)
436   MDRV_QUICKLOAD_ADD(vip, "bin,c8,c8x", 0)
342437
343438   MDRV_CASSETTE_ADD( "cassette", vip_cassette_config )
344439MACHINE_DRIVER_END
r3284r3285
348443ROM_START( vip )
349444   ROM_REGION( 0x10000, CDP1802_TAG, 0 )
350445   ROM_LOAD( "cdpr566.u10", 0x8000, 0x0200, CRC(5be0a51f) SHA1(40266e6d13e3340607f8b3dcc4e91d7584287c06) )
446   ROM_SYSTEM_BIOS( 0, "vp711", "VP-711" )
447   ROMX_LOAD( "vp711.bin",    0x9000, 0x1000, NO_DUMP, ROM_BIOS(1) )
448   ROM_SYSTEM_BIOS( 1, "vp700", "VP-700 Tiny BASIC" )
449   ROMX_LOAD( "vp700.bin",    0x9000, 0x1000, NO_DUMP, ROM_BIOS(2) )
351450
352451   ROM_REGION( 0x200, "chip8", 0 )
353452   ROM_LOAD( "chip8.bin", 0x0000, 0x0200, CRC(438ec5d5) SHA1(8aa634c239004ff041c9adbf9144bd315ab5fc77) )
453
454   ROM_REGION( 0x300, "chip8x", 0 )
455   ROM_LOAD( "chip8x.bin", 0x0000, 0x0300, CRC(79c5f6f8) SHA1(ed438747b577399f6ccbf20fe14156f768842898) )
354456ROM_END
355457
458ROM_START( vp111 )
459   ROM_REGION( 0x10000, CDP1802_TAG, 0 )
460   ROM_LOAD( "cdpr566.u10", 0x8000, 0x0200, CRC(5be0a51f) SHA1(40266e6d13e3340607f8b3dcc4e91d7584287c06) )
461   ROM_SYSTEM_BIOS( 0, "vp111", "VP-111" )
462   ROM_SYSTEM_BIOS( 1, "vp700", "VP-700 Tiny BASIC" )
463   ROMX_LOAD( "vp700.bin",    0x9000, 0x1000, NO_DUMP, ROM_BIOS(2) )
464
465   ROM_REGION( 0x200, "chip8", 0 )
466   ROM_LOAD( "chip8.bin", 0x000, 0x0200, CRC(438ec5d5) SHA1(8aa634c239004ff041c9adbf9144bd315ab5fc77) )
467
468   ROM_REGION( 0x300, "chip8x", 0 )
469   ROM_LOAD( "chip8x.bin", 0x0000, 0x0300, CRC(79c5f6f8) SHA1(ed438747b577399f6ccbf20fe14156f768842898) )
470ROM_END
471
356472/* System Configuration */
357473
358474static QUICKLOAD_LOAD( vip )
359475{
476   UINT8 *ptr = memory_region(image->machine, CDP1802_TAG);
477   UINT8 *chip8_ptr = NULL;
478   int chip8_size = 0;
360479   int size = image_length(image);
361480
362481   if (strcmp(image_filetype(image), "c8") == 0)
363482   {
364483      /* CHIP-8 program */
365
366      UINT8 *ptr = memory_region(image->machine, CDP1802_TAG);
367      UINT8 *chip8 = memory_region(image->machine, "chip8");
368
369      if ((size + 0x200) > mess_ram_size)
370      {
371         return INIT_FAIL;
372      }
373
374      /* copy CHIP-8 interpreter to RAM */
375      memcpy(ptr, chip8, 0x200);
376
377      /* load image to RAM */
378      image_fread(image, ptr + 0x0200, size);
484      chip8_ptr = memory_region(image->machine, "chip8");
485      chip8_size = memory_region_length(image->machine, "chip8");
379486   }
380   else
487   else if (strcmp(image_filetype(image), "c8x") == 0)
381488   {
382      /* normal program */
489      /* CHIP-8X program */
490      chip8_ptr = memory_region(image->machine, "chip8x");
491      chip8_size = memory_region_length(image->machine, "chip8x");
492   }
383493
384      UINT8 *ptr = memory_region(image->machine, CDP1802_TAG);
494   if ((size + chip8_size) > mess_ram_size)
495   {
496      return INIT_FAIL;
497   }
385498
386      if (size > mess_ram_size)
387      {
388         return INIT_FAIL;
389      }
390
391      image_fread(image, ptr, size);
499   if (chip8_size > 0)
500   {
501      /* copy CHIP-8 interpreter to RAM */
502      memcpy(ptr, chip8_ptr, chip8_size);
392503   }
393504
505   /* load image to RAM */
506   image_fread(image, ptr + chip8_size, size);
394507
395508   return INIT_PASS;
396509}
397510
398static SYSTEM_CONFIG_START( vip )
399   CONFIG_RAM         ( 1 * 1024)
400   CONFIG_RAM         ( 2 * 1024)
511static SYSTEM_CONFIG_START( vp711 )
401512   CONFIG_RAM_DEFAULT   ( 4 * 1024)
513   CONFIG_RAM         (32 * 1024)
402514SYSTEM_CONFIG_END
403515
516static SYSTEM_CONFIG_START( vp111 )
517   CONFIG_RAM_DEFAULT   ( 1 * 1024)
518   CONFIG_RAM         ( 2 * 1024)
519   CONFIG_RAM         ( 4 * 1024)
520SYSTEM_CONFIG_END
521
404522/* System Drivers */
405523
406//     YEAR  NAME        PARENT  COMPAT  MACHINE     INPUT       INIT        CONFIG      COMPANY FULLNAME
407COMP( 1977, vip, 0, 0, vip, vip, 0, vip, "RCA", "Cosmac VIP (VP-711)", GAME_IMPERFECT_SOUND | GAME_SUPPORTS_SAVE )
524//     YEAR  NAME    PARENT  COMPAT  MACHINE     INPUT   INIT    CONFIG  COMPANY FULLNAME
525COMP( 1977, vip,   0,      0,      vip,      vip,   0,      vp711,   "RCA",   "Cosmac VIP (VP-711)", GAME_IMPERFECT_SOUND | GAME_SUPPORTS_SAVE )
526COMP( 1977, vp111,   vip,   0,      vip,      vip,   0,      vp111,   "RCA",   "Cosmac VIP (VP-111)", GAME_IMPERFECT_SOUND | GAME_SUPPORTS_SAVE )
src/mess/drivers/sg1000.c
r3284r3285
88171-5078 (C) SEGA 1983
99171-5046 REV. A (C) SEGA 1983
1010
11|---------------------------|                        |------------------------|
12|   SW1      CN2            |   |------|---------------|   |   SW2      CN4         |
13|                     |---|        CN3         |---|                  |
14|  CN1                                                         CN5   |
15|                                                               |
16|   10.738635MHz         |------------------------------|         7805      |
17|   |---|               |------------------------------|                  |
18|   |   |                          CN6                              |               
19|   | 9 |                                                         |
20|   | 9 |                                                   LS32   |
21|   | 1 |      |---------|                                             |
22|   | 8 |      | TMM2009 |                                       LS139   |
23|   | A |      |---------|            |------------------|                  |
24|   |   |                        |      Z80         |                  |
25|   |---|                        |------------------|                  |
26|                                                               |
27|                                                               |
28|      MB8118   MB8118   MB8118   MB8118            SN76489A      SW3            |
29|         MB8118   MB8118   MB8118   MB8118                  LS257   LS257      |
30|-----------------------------------------------------------------------------------|
11|---------------------------|                        |----------------------------|
12|   SW1      CN2            |   |------|---------------|   |   SW2      CN4            |
13|                     |---|        CN3         |---|                     |
14|  CN1                                                            CN5   |
15|                                                                  |
16|   10.738635MHz         |------------------------------|            7805      |
17|   |---|               |------------------------------|                     |
18|   |   |                          CN6                                 |
19|   | 9 |                                                            |
20|   | 9 |                                                      LS32   |
21|   | 1 |      |---------|                                                |
22|   | 8 |      | TMM2009 |                                          LS139   |
23|   | A |      |---------|            |------------------|                     |
24|   |   |                        |      Z80         |                     |
25|   |---|                        |------------------|                     |
26|                                                                  |
27|                                                                  |
28|      MB8118   MB8118   MB8118   MB8118            SN76489A         SW3            |
29|         MB8118   MB8118   MB8118   MB8118                     LS257   LS257      |
30|---------------------------------------------------------------------------------------|
3131
3232Notes:
3333    All IC's shown.
r3284r3285
4343   CN4      - power connector (+9VDC)
4444   CN5      - player 2 joystick connector
4545   CN6      - cartridge connector
46   SW1      - select switch
46   SW1      - TV channel select switch
4747   SW2      - power switch
4848   SW3      - hold switch
4949
r3284r3285
5353
5454    TODO:
5555
56   - fix cartridge loading while running
56   - OMV keyboard
5757   - SC-3000 return instruction referenced by R when reading ports 60-7f,e0-ff
5858   - connect the PSG /READY signal
5959   - accurate video timing
r3284r3285
397397   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2)
398398   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2)
399399   PORT_BIT( 0xf0, IP_ACTIVE_LOW, IPT_UNUSED )
400/*
401   PORT_BIT( 0x, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_0) PORT_CHAR('0')
402   PORT_BIT( 0x, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_1) PORT_CHAR('1')
403   PORT_BIT( 0x, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_2) PORT_CHAR('2')
404   PORT_BIT( 0x, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_3) PORT_CHAR('3')
405   PORT_BIT( 0x, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_4) PORT_CHAR('4')
406   PORT_BIT( 0x, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_5) PORT_CHAR('5')
407   PORT_BIT( 0x, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_6) PORT_CHAR('6')
408   PORT_BIT( 0x, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_7) PORT_CHAR('7')
409   PORT_BIT( 0x, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_8) PORT_CHAR('8')
410   PORT_BIT( 0x, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_9) PORT_CHAR('9')
400411
412   PORT_BIT( 0x, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_A) PORT_CHAR('A')
413   PORT_BIT( 0x, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_B) PORT_CHAR('B')
414   PORT_BIT( 0x, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_C) PORT_CHAR('C')
415   PORT_BIT( 0x, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_D) PORT_CHAR('D')
416   PORT_BIT( 0x, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_E) PORT_CHAR('E')
417   PORT_BIT( 0x, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_F) PORT_CHAR('F')
418   PORT_BIT( 0x, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_G) PORT_CHAR('G')
419   PORT_BIT( 0x, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_H) PORT_CHAR('H')
420   
421   PORT_BIT( 0x, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("S-1") PORT_CODE(KEYCODE_LCONTROL) PORT_CHAR(UCHAR_MAMEKEY(LCONTROL))
422   PORT_BIT( 0x, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("S-1") PORT_CODE(KEYCODE_RCONTROL) PORT_CHAR(UCHAR_MAMEKEY(RCONTROL))
423*/
401424   PORT_START("NMI")
402425   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_START ) PORT_NAME("PAUSE") PORT_CODE(KEYCODE_P) PORT_CHANGED(trigger_nmi, 0)
403426
r3284r3285
415438
416439static void sg1000_vdp_interrupt(running_machine *machine, int state)
417440{
418   cpunum_set_input_line_and_vector(machine, 0, INPUT_LINE_IRQ0, state, 0x38);
441   cpunum_set_input_line(machine, 0, INPUT_LINE_IRQ0, state);
419442}
420443
421444static const TMS9928a_interface tms9928a_interface =
r3284r3285
831854    ROM_REGION( 0x10000, "main", ROMREGION_ERASE00 )
832855ROM_END
833856
834ROM_START( omv )
857ROM_START( omv1000 )
835858    ROM_REGION( 0x10000, "main", ROMREGION_ERASE00 )
836   ROM_LOAD( "omvbios.bin", 0x0000, 0x2000, NO_DUMP )
859   ROM_LOAD( "omvbios.bin", 0x0000, 0x8000, NO_DUMP )
837860ROM_END
838861
862ROM_START( omv2000 )
863    ROM_REGION( 0x10000, "main", ROMREGION_ERASE00 )
864   ROM_LOAD( "omvbios.bin", 0x0000, 0x8000, NO_DUMP )
865ROM_END
866
839867ROM_START( sc3000 )
840868    ROM_REGION( 0x10000, "main", ROMREGION_ERASE00 )
841869ROM_END
r3284r3285
907935{
908936   switch( state )
909937   {
938      /* --- the following bits of info are returned as 64-bit signed integers --- */
910939      case MESS_DEVINFO_INT_COUNT:               info->i = 1; break;
911940      case MESS_DEVINFO_INT_MUST_BE_LOADED:         info->i = 1; break;
941
942      /* --- the following bits of info are returned as pointers to data or functions --- */
912943      case MESS_DEVINFO_PTR_LOAD:                  info->load = DEVICE_IMAGE_LOAD_NAME(sg1000_cart); break;
944
945      /* --- the following bits of info are returned as NULL-terminated strings --- */
913946      case MESS_DEVINFO_STR_FILE_EXTENSIONS:         strcpy(info->s = device_temp_str(), "sg,bin"); break;
914947
915948      default:                              cartslot_device_getinfo( devclass, state, info ); break;
r3284r3285
960993{
961994   switch( state )
962995   {
996      /* --- the following bits of info are returned as 64-bit signed integers --- */
963997      case MESS_DEVINFO_INT_COUNT:               info->i = 1; break;
964998      case MESS_DEVINFO_INT_MUST_BE_LOADED:         info->i = 1; break;
999
1000      /* --- the following bits of info are returned as pointers to data or functions --- */
9651001      case MESS_DEVINFO_PTR_LOAD:                  info->load = DEVICE_IMAGE_LOAD_NAME(sc3000_cart); break;
1002
1003      /* --- the following bits of info are returned as NULL-terminated strings --- */
9661004      case MESS_DEVINFO_STR_FILE_EXTENSIONS:         strcpy(info->s = device_temp_str(), "sg,sc,bin"); break;
9671005
9681006      default:                              cartslot_device_getinfo( devclass, state, info ); break;
9691007   }
9701008}
9711009
1010static void omv_cartslot_getinfo( const mess_device_class *devclass, UINT32 state, union devinfo *info )
1011{
1012   switch( state )
1013   {
1014      /* --- the following bits of info are returned as 64-bit signed integers --- */
1015      case MESS_DEVINFO_INT_COUNT:               info->i = 1; break;
1016
1017      /* --- the following bits of info are returned as pointers to data or functions --- */
1018      case MESS_DEVINFO_PTR_LOAD:                  info->load = DEVICE_IMAGE_LOAD_NAME(sg1000_cart); break;
1019
1020      /* --- the following bits of info are returned as NULL-terminated strings --- */
1021      case MESS_DEVINFO_STR_FILE_EXTENSIONS:         strcpy(info->s = device_temp_str(), "sg,bin"); break;
1022
1023      default:                              cartslot_device_getinfo( devclass, state, info ); break;
1024   }
1025}
1026
9721027static DEVICE_IMAGE_LOAD( sf7000_floppy )
9731028{
9741029   if (image_has_been_created(image))
r3284r3285
9921047{
9931048   switch(state)
9941049   {
1050      /* --- the following bits of info are returned as 64-bit signed integers --- */
9951051      case MESS_DEVINFO_INT_COUNT:               info->i = 1; break;
1052
1053      /* --- the following bits of info are returned as pointers to data or functions --- */
9961054      case MESS_DEVINFO_PTR_LOAD:                  info->load = DEVICE_IMAGE_LOAD_NAME(sf7000_floppy); break;
1055
1056      /* --- the following bits of info are returned as NULL-terminated strings --- */
9971057      case MESS_DEVINFO_STR_FILE_EXTENSIONS:         strcpy(info->s = device_temp_str(), "sf7"); break;
9981058
9991059      default:                              legacybasicdsk_device_getinfo(devclass, state, info); break;
10001060   }
10011061}
10021062
1003static DEVICE_IMAGE_LOAD( sf7000_serial )
1004{
1005   /* filename specified */
1006   if (device_load_serial_device(image) == INIT_PASS)
1007   {
1008      /* setup transmit parameters */
1009      serial_device_setup(image, 9600 >> input_port_read(image->machine, "BAUD"), 8, 1, SERIAL_PARITY_NONE);
1010
1011      /* connect serial chip to serial device */
1012      msm8251_connect_to_serial_device(image);
1013
1014      serial_device_set_protocol(image, SERIAL_PROTOCOL_NONE);
1015
1016      /* and start transmit */
1017      serial_device_set_transmit_state(image, 1);
1018
1019      return INIT_PASS;
1020   }
1021
1022   return INIT_FAIL;
1023}
1024
10251063static void sf7000_serial_getinfo(const mess_device_class *devclass, UINT32 state, union devinfo *info)
10261064{
10271065   /* serial */
10281066   switch(state)
10291067   {
10301068      /* --- the following bits of info are returned as 64-bit signed integers --- */
1031      case MESS_DEVINFO_INT_TYPE:                     info->i = IO_SERIAL; break;
1032      case MESS_DEVINFO_INT_COUNT:                  info->i = 1; break;
1069      case MESS_DEVINFO_INT_TYPE:                  info->i = IO_SERIAL; break;
1070      case MESS_DEVINFO_INT_COUNT:               info->i = 1; break;
10331071
10341072      /* --- the following bits of info are returned as pointers to data or functions --- */
1035      case MESS_DEVINFO_PTR_START:                  info->start = DEVICE_START_NAME(serial_device); break;
1036      case MESS_DEVINFO_PTR_LOAD:                     info->load = DEVICE_IMAGE_LOAD_NAME(sf7000_serial); break;
1037      case MESS_DEVINFO_PTR_UNLOAD:                  info->unload = DEVICE_IMAGE_UNLOAD_NAME(serial_device); break;
1073      case MESS_DEVINFO_PTR_START:               info->start = DEVICE_START_NAME(serial_device); break;
1074      case MESS_DEVINFO_PTR_LOAD:                  info->load = DEVICE_IMAGE_LOAD_NAME(serial_device); break;
1075      case MESS_DEVINFO_PTR_UNLOAD:               info->unload = DEVICE_IMAGE_UNLOAD_NAME(serial_device); break;
10381076
10391077      /* --- the following bits of info are returned as NULL-terminated strings --- */
1040      case MESS_DEVINFO_STR_FILE_EXTENSIONS:            strcpy(info->s = device_temp_str(), "txt"); break;
1078      case MESS_DEVINFO_STR_FILE_EXTENSIONS:         strcpy(info->s = device_temp_str(), "txt"); break;
10411079   }
10421080}
10431081
10441082static SYSTEM_CONFIG_START( sg1000 )
1083   CONFIG_RAM_DEFAULT   (1 * 1024)
10451084   CONFIG_DEVICE(sg1000_cartslot_getinfo)
10461085SYSTEM_CONFIG_END
10471086
1048static SYSTEM_CONFIG_START( omv )
1049   CONFIG_DEVICE(sg1000_cartslot_getinfo)
1050SYSTEM_CONFIG_END
1051
10521087static SYSTEM_CONFIG_START( sc3000 )
1088   CONFIG_RAM_DEFAULT   (2 * 1024)
10531089   CONFIG_DEVICE(sc3000_cartslot_getinfo)
10541090SYSTEM_CONFIG_END
10551091
r3284r3285
10591095   CONFIG_DEVICE(sf7000_serial_getinfo)
10601096SYSTEM_CONFIG_END
10611097
1098static SYSTEM_CONFIG_START( omv )
1099   CONFIG_DEVICE(omv_cartslot_getinfo)
1100SYSTEM_CONFIG_END
1101
10621102/* System Drivers */
10631103
10641104/*    YEAR  NAME        PARENT  COMPAT  MACHINE     INPUT       INIT    CONFIG      COMPANY   FULLNAME */
10651105CONS( 1983,   sg1000,      0,      0,      sg1000,      sg1000,      0,      sg1000,      "Sega",   "SG-1000", GAME_SUPPORTS_SAVE )
10661106CONS( 1984,   sg1000m2,   sg1000,   0,      sc3000,      sc3000,      0,      sc3000,      "Sega",   "SG-1000 II", GAME_SUPPORTS_SAVE )
1067CONS( 1983,   omv,        sg1000, 0,      omv,        omv,        0,      omv,        "Tsukuda Original", "Othello Multivision", GAME_NOT_WORKING )
10681107COMP( 1983,   sc3000,      0,      0,      sc3000,      sc3000,      0,      sc3000,      "Sega",   "SC-3000", GAME_SUPPORTS_SAVE )
10691108COMP( 1983,   sc3000h,   sc3000,   0,      sc3000,      sc3000,      0,      sc3000,      "Sega",   "SC-3000H", GAME_SUPPORTS_SAVE )
10701109COMP( 1983,   sf7000,      sc3000, 0,      sf7000,      sf7000,      0,      sf7000,      "Sega",   "SC-3000/Super Control Station SF-7000", GAME_SUPPORTS_SAVE )
1110CONS( 1984,   omv1000,    sg1000,   0,      omv,        omv,        0,      omv,        "Tsukuda Original", "Othello Multivision FG-1000", GAME_NOT_WORKING )
1111CONS( 1984,   omv2000,    sg1000,   0,      omv,        omv,        0,      omv,        "Tsukuda Original", "Othello Multivision FG-2000", GAME_NOT_WORKING )
src/mess/drivers/studio2.c
r3284r3285
9090
9191/*
9292
93   RCA Studio II games list
94
95   Title                     Series               Dumped
96   ----------------------------------------------------------------------------
97   Bowling                     built-in            yes
98   Doodles                     built-in            yes
99   Freeway                     built-in            yes
100   Math                     built-in            yes
101   Patterns                  built-in            yes
102   Gunfighter/Moonship Battle      TV Arcade            no, but Guru has one
103   Space War                  TV Arcade I            yes
104   Fun with Numbers            TV Arcade II         no, but Guru has one
105   Tennis/Squash               TV Arcade III         yes
106   Baseball                  TV Arcade IV         yes
107   Speedway/Tag               TV Arcade            yes
108   Blackjack                  TV Casino I            yes
109   Bingo                     TV Casino            no
110   Math and Social Studies         TV School House I      no, but Guru has one
111   Math Fun                  TV School House II      no, but Guru has one
112   Biorhythm                  TV Mystic            no, but Guru has one
113
114
115   MPT-02 games list
116
117   ID      Title               Series               Dumped
118   ----------------------------------------------------------------------------
119   MG-201   Bingo                                 no
120   MG-202   Concentration Match                        no, but Guru has one
121   MG-203   Star Wars                              no, but Guru has one
122   MG-204   Math Fun            School House II         no, but Guru has one
123   MG-205   Pinball                                 no, but Guru has one
124   MG-206   Biorythm                              no
125   MG-207   Tennis/Squash                           no
126   MG-208   Fun with Numbers                        no
127   MG-209   Computer Quiz         School House I         no
128   MG-210   Baseball                              no
129   MG-211   Speedway/Tag                           no
130   MG-212   Spacewar Intercept                        no
131   MG-213   Gun Fight/Moon ship                        no
132
133*/
134
135/*
136
93137    TODO:
94138
95   - figure out real cpu clock from schematics
96    - cdp1864 video colors
139   - rewrite cartridge loading
140   - cpu clock from schematics
141    - mpt02/mustang cdp1864 colors
142   - cdp1862 for Toshiba Visicom
97143    - discrete sound
98    - redump studio2 bios as 4 separate roms
99144
100145*/
101146
r3284r3285
230275static CDP1864_INTERFACE( mpt02_cdp1864_intf )
231276{
232277   SCREEN_TAG,
233   CDP1864_CLK_FREQ,
278   CDP1864_CLOCK,
234279   CDP1864_INTERLACED,
235280   mpt02_int_w,
236281   mpt02_dmao_w,
r3284r3285
391436   MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.00)
392437MACHINE_DRIVER_END
393438
439static MACHINE_DRIVER_START( visicom )
440   // basic machine hardware
441
442   MDRV_CPU_ADD("main", CDP1802, 3579545/2) // ???
443   MDRV_CPU_PROGRAM_MAP(studio2_map, 0)
444   MDRV_CPU_IO_MAP(studio2_io_map, 0)
445   MDRV_CPU_CONFIG(studio2_config)
446
447   MDRV_MACHINE_START(studio2)
448   MDRV_MACHINE_RESET(studio2)
449
450    // video hardware
451
452   MDRV_SCREEN_ADD(SCREEN_TAG, RASTER)
453   MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16)
454   MDRV_SCREEN_RAW_PARAMS(3579545/2, CDP1861_SCREEN_WIDTH, CDP1861_HBLANK_END, CDP1861_HBLANK_START, CDP1861_TOTAL_SCANLINES, CDP1861_SCANLINE_VBLANK_END, CDP1861_SCANLINE_VBLANK_START)
455
456   MDRV_PALETTE_LENGTH(2)
457   MDRV_PALETTE_INIT(black_and_white)
458   MDRV_VIDEO_UPDATE(studio2)
459
460   MDRV_DEVICE_ADD(CDP1861_TAG, CDP1861)
461   MDRV_DEVICE_CONFIG(studio2_cdp1861_intf)
462
463   // sound hardware
464
465   MDRV_SPEAKER_STANDARD_MONO("mono")
466   MDRV_SOUND_ADD("beep", BEEP, 0)
467   MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.00)
468MACHINE_DRIVER_END
469
394470static MACHINE_DRIVER_START( mpt02 )
395471   // basic machine hardware
396472
397   MDRV_CPU_ADD("main", CDP1802, CDP1864_CLK_FREQ)
473   MDRV_CPU_ADD("main", CDP1802, CDP1864_CLOCK)
398474   MDRV_CPU_PROGRAM_MAP(mpt02_map, 0)
399475   MDRV_CPU_IO_MAP(mpt02_io_map, 0)
400476   MDRV_CPU_CONFIG(mpt02_config)
r3284r3285
406482
407483   MDRV_SCREEN_ADD("main", RASTER)
408484   MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16)
409   MDRV_SCREEN_RAW_PARAMS(CDP1864_CLK_FREQ, CDP1864_SCREEN_WIDTH, CDP1864_HBLANK_END, CDP1864_HBLANK_START, CDP1864_TOTAL_SCANLINES, CDP1864_SCANLINE_VBLANK_END, CDP1864_SCANLINE_VBLANK_START)
485   MDRV_SCREEN_RAW_PARAMS(CDP1864_CLOCK, CDP1864_SCREEN_WIDTH, CDP1864_HBLANK_END, CDP1864_HBLANK_START, CDP1864_TOTAL_SCANLINES, CDP1864_SCANLINE_VBLANK_END, CDP1864_SCANLINE_VBLANK_START)
410486
411487   MDRV_PALETTE_LENGTH(8+8)
412488   MDRV_VIDEO_UPDATE(mpt02)
r3284r3285
432508   ROM_LOAD( "studio2.rom", 0x0000, 0x0800, BAD_DUMP CRC(a494b339) SHA1(f2650dacc9daab06b9fdf0e7748e977b2907010c) )
433509ROM_END
434510
435ROM_START( m9016tc )
511ROM_START( mtc9016 )
436512   ROM_REGION( 0x10000, "main", 0 )
437513   ROM_LOAD( "86676.ic13",  0x0000, 0x0400, NO_DUMP )
438514   ROM_LOAD( "86677b.ic14", 0x0400, 0x0400, NO_DUMP )
439515   ROM_LOAD( "87201.ic12",  0x0a00, 0x0400, NO_DUMP )
440516ROM_END
441517
518ROM_START( shmc1200 )
519   ROM_REGION( 0x10000, "main", 0 )
520   ROM_LOAD( "shmc1200.bin",  0x0000, 0x0800, NO_DUMP )
521ROM_END
522
523ROM_START( mpt02s )
524   ROM_REGION( 0x10000, "main", 0 )
525ROM_END
526
527ROM_START( mpt02h )
528   ROM_REGION( 0x10000, "main", 0 )
529ROM_END
530
531ROM_START( visicom )
532   ROM_REGION( 0x10000, "main", 0 )
533   ROM_LOAD( "visicom.bin",  0x0000, 0x0800, NO_DUMP )
534ROM_END
535
442536/* System Configuration */
443537
444538#define ST2_HEADER_SIZE      256
r3284r3285
475569{
476570   switch( state )
477571   {
478   case MESS_DEVINFO_INT_COUNT:
479      info->i = 1;
480      break;
481   case MESS_DEVINFO_PTR_LOAD:
482      info->load = DEVICE_IMAGE_LOAD_NAME(studio2_cart);
483      break;
484   case MESS_DEVINFO_STR_FILE_EXTENSIONS:
485      strcpy(info->s = device_temp_str(), "st2");
486      break;
487   default:
488      cartslot_device_getinfo( devclass, state, info );
489      break;
572      /* --- the following bits of info are returned as 64-bit signed integers --- */
573      case MESS_DEVINFO_INT_COUNT:               info->i = 1; break;
574
575      /* --- the following bits of info are returned as pointers to data or functions --- */
576      case MESS_DEVINFO_PTR_LOAD:                  info->load = DEVICE_IMAGE_LOAD_NAME(studio2_cart); break;
577
578      /* --- the following bits of info are returned as NULL-terminated strings --- */
579      case MESS_DEVINFO_STR_FILE_EXTENSIONS:         strcpy(info->s = device_temp_str(), "st2"); break;
580
581      default:                              cartslot_device_getinfo( devclass, state, info ); break;
490582   }
491583}
492584
r3284r3285
522614static DRIVER_INIT( mpt02 )
523615{
524616   timer_set(attotime_zero, NULL, 0, mpt02_setup_beep);
617   timer_set(ATTOTIME_IN_MSEC(200), NULL, 0, set_cpu_mode);
525618}
526619
620static DRIVER_INIT( visicom )
621{
622   timer_set(attotime_zero, NULL, 0, setup_beep);
623   timer_set(ATTOTIME_IN_MSEC(200), NULL, 0, set_cpu_mode);
624}
625
527626/* Game Drivers */
528627
529/*
530
531    PAL clones of RCA Studio II using CDP1864C (color display):
532
533    "Mustang", "9016 Telespiel Computer (Germany)"
534    "Soundic", "MPT-02 Victory Home TV Programmer (Austria)"
535    "Hanimex", "MPT-02 (France)"
536    "Sheen",   "1200 Micro Computer (Australia)"
537
538*/
539
540628/*    YEAR  NAME        PARENT  COMPAT  MACHINE     INPUT       INIT        CONFIG      COMPANY   FULLNAME */
541629CONS( 1977,   studio2,   0,      0,      studio2,   studio2,   studio2,   studio2,   "RCA",      "Studio II", GAME_SUPPORTS_SAVE )
542CONS( 1978,   m9016tc,   studio2,0,      mpt02,      studio2,   mpt02,      studio2,   "Mustang",   "9016 Telespiel Computer (Germany)", GAME_IMPERFECT_COLORS | GAME_SUPPORTS_SAVE | GAME_NOT_WORKING )
630CONS( 1978, visicom,   studio2,0,      visicom,   studio2,   visicom,   studio2,   "Toshiba",   "Visicom (Japan)", GAME_NOT_WORKING )
631CONS( 1978,   mpt02s,      studio2,0,      mpt02,      studio2,   mpt02,      studio2,   "Soundic",   "MPT-02 Victory Home TV Programmer (Austria)", GAME_NOT_WORKING )
632CONS( 1978,   mpt02h,      studio2,0,      mpt02,      studio2,   mpt02,      studio2,   "Hanimex",   "MPT-02 Jeu TV Programmable (France)", GAME_NOT_WORKING )
633CONS( 1978,   mtc9016,   studio2,0,      mpt02,      studio2,   mpt02,      studio2,   "Mustang",   "9016 Telespiel Computer (Germany)", GAME_NOT_WORKING )
634CONS( 1978, shmc1200,   studio2,0,      mpt02,      studio2,   mpt02,      studio2,   "Sheen",   "1200 Micro Computer (Australia)", GAME_NOT_WORKING )
src/mess/drivers/tmc2000e.c
r3284r3285
152152static CDP1864_INTERFACE( tmc2000e_cdp1864_intf )
153153{
154154   SCREEN_TAG,
155   CDP1864_CLK_FREQ,
155   XTAL_1_75MHz,
156156   CDP1864_INTERLACED,
157157   tmc2000e_int_w,
158158   tmc2000e_dmao_w,
r3284r3285
296296
297297   MDRV_SCREEN_ADD(SCREEN_TAG, RASTER)
298298   MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16)
299   MDRV_SCREEN_RAW_PARAMS(CDP1864_CLK_FREQ, CDP1864_SCREEN_WIDTH, CDP1864_HBLANK_END, CDP1864_HBLANK_START, CDP1864_TOTAL_SCANLINES, CDP1864_SCANLINE_VBLANK_END, CDP1864_SCANLINE_VBLANK_START)
299   MDRV_SCREEN_RAW_PARAMS(XTAL_1_75MHz, CDP1864_SCREEN_WIDTH, CDP1864_HBLANK_END, CDP1864_HBLANK_START, CDP1864_TOTAL_SCANLINES, CDP1864_SCANLINE_VBLANK_END, CDP1864_SCANLINE_VBLANK_START)
300300
301301   MDRV_PALETTE_LENGTH(8)
302302   MDRV_VIDEO_UPDATE(tmc2000e)

Previous 15994 Revisions Next


© 1998-2018 The MESS Team