src/mess/video/cgc7900.c
| r0 | r7889 | |
| 1 | #include "emu.h" |
| 2 | #include "includes/cgc7900.h" |
| 3 | |
| 4 | static PALETTE_INIT( cgc7900 ) |
| 5 | { |
| 6 | palette_set_color_rgb(machine, 0, 0x00, 0x00, 0x00 ); |
| 7 | palette_set_color_rgb(machine, 1, 0x00, 0x00, 0xff ); |
| 8 | palette_set_color_rgb(machine, 2, 0x00, 0xff, 0x00 ); |
| 9 | palette_set_color_rgb(machine, 3, 0x00, 0xff, 0xff ); |
| 10 | palette_set_color_rgb(machine, 4, 0xff, 0x00, 0x00 ); |
| 11 | palette_set_color_rgb(machine, 5, 0xff, 0x00, 0xff ); |
| 12 | palette_set_color_rgb(machine, 6, 0xff, 0xff, 0x00 ); |
| 13 | palette_set_color_rgb(machine, 7, 0xff, 0xff, 0xff ); |
| 14 | } |
| 15 | |
| 16 | static VIDEO_START( cgc7900 ) |
| 17 | { |
| 18 | cgc7900_state *state = (cgc7900_state *)machine->driver_data; |
| 19 | |
| 20 | /* find memory regions */ |
| 21 | state->char_rom = memory_region(machine, "gfx1"); |
| 22 | } |
| 23 | |
| 24 | static void update_clut(running_machine *machine) |
| 25 | { |
| 26 | cgc7900_state *state = (cgc7900_state *)machine->driver_data; |
| 27 | |
| 28 | for (int i = 0; i < 256; i++) |
| 29 | { |
| 30 | UINT16 addr = i * 4; |
| 31 | UINT32 data = (state->clut_ram[addr + 1] << 16) | state->clut_ram[addr]; |
| 32 | UINT8 b = data & 0xff; |
| 33 | UINT8 g = (data >> 8) & 0xff; |
| 34 | UINT8 r = (data >> 16) & 0xff; |
| 35 | |
| 36 | logerror("CLUT %u : %08x\n", i, data); |
| 37 | |
| 38 | palette_set_color_rgb(machine, i + 8, r, g, b); |
| 39 | } |
| 40 | } |
| 41 | |
| 42 | #define OVERLAY_CUR 0x80000000 /* places a cursor in the cell if SET */ |
| 43 | #define OVERLAY_BLK 0x40000000 /* blinks the foreground character in the cell if SET */ |
| 44 | #define OVERLAY_VF 0x10000000 /* makes the foreground visible if SET (else transparent) */ |
| 45 | #define OVERLAY_VB 0x08000000 /* makes the background visible if SET (else transparent) */ |
| 46 | #define OVERLAY_PL 0x01000000 /* uses bits 0-7 as PLOT DOT descriptor if SET (else ASCII) */ |
| 47 | #define OVERLAY_BR 0x00040000 /* turns on Red in background if SET */ |
| 48 | #define OVERLAY_BG 0x00020000 /* turns on Green in background if SET */ |
| 49 | #define OVERLAY_BB 0x00010000 /* turns on Blue in background if SET */ |
| 50 | #define OVERLAY_FR 0x00000400 /* turns on Red in foreground if SET */ |
| 51 | #define OVERLAY_FG 0x00000200 /* turns on Green in foreground if SET */ |
| 52 | #define OVERLAY_FB 0x00000100 /* turns on Blue in background if SET */ |
| 53 | |
| 54 | static void draw_overlay(running_device *screen, bitmap_t *bitmap) |
| 55 | { |
| 56 | cgc7900_state *state = (cgc7900_state *)screen->machine->driver_data; |
| 57 | |
| 58 | for (int y = 0; y < 768; y++) |
| 59 | { |
| 60 | int sy = y / 8; |
| 61 | |
| 62 | for (int sx = 0; sx < 85; sx++) |
| 63 | { |
| 64 | UINT16 addr = (sy * 85) + sx; |
| 65 | UINT32 cell = (state->overlay_ram[addr + 1] << 16) | state->overlay_ram[addr]; |
| 66 | UINT8 data = state->char_rom[(cell & 0xff) << 3]; |
| 67 | int fg = (cell >> 8) & 0x07; |
| 68 | int bg = (cell >> 16) & 0x07; |
| 69 | |
| 70 | for (int x = 0; x < 8; x++) |
| 71 | { |
| 72 | *BITMAP_ADDR16(bitmap, y, (sx * 8) + x) = BIT(data, 7) ? fg : bg; |
| 73 | data <<= 1; |
| 74 | } |
| 75 | |
| 76 | addr += 2; |
| 77 | } |
| 78 | } |
| 79 | } |
| 80 | |
| 81 | static VIDEO_UPDATE( cgc7900 ) |
| 82 | { |
| 83 | // cgc7900_state *state = (cgc7900_state *)screen->machine->driver_data; |
| 84 | |
| 85 | update_clut(screen->machine); |
| 86 | draw_overlay(screen, bitmap); |
| 87 | |
| 88 | return 0; |
| 89 | } |
| 90 | |
| 91 | static const gfx_layout cgc7900_charlayout = |
| 92 | { |
| 93 | 8,8, |
| 94 | RGN_FRAC(1,1), |
| 95 | 1, |
| 96 | { RGN_FRAC(0,1) }, |
| 97 | { STEP8(7,-1) }, |
| 98 | { STEP8(0,8) }, |
| 99 | 8*8 |
| 100 | }; |
| 101 | |
| 102 | static GFXDECODE_START( cgc7900 ) |
| 103 | GFXDECODE_ENTRY( "gfx1", 0x0000, cgc7900_charlayout, 0, 1 ) |
| 104 | GFXDECODE_END |
| 105 | |
| 106 | MACHINE_DRIVER_START( cgc7900_video ) |
| 107 | MDRV_SCREEN_ADD(SCREEN_TAG, RASTER) |
| 108 | MDRV_SCREEN_REFRESH_RATE(60) |
| 109 | MDRV_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) /* not accurate */ |
| 110 | MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16) |
| 111 | MDRV_SCREEN_SIZE(1024, 768) |
| 112 | MDRV_SCREEN_VISIBLE_AREA(0, 1024-1, 0, 768-1) |
| 113 | |
| 114 | MDRV_GFXDECODE(cgc7900) |
| 115 | |
| 116 | MDRV_PALETTE_LENGTH(8+256) /* 8 overlay colors + 256 bitmap colors */ |
| 117 | MDRV_PALETTE_INIT(cgc7900) |
| 118 | |
| 119 | MDRV_VIDEO_START(cgc7900) |
| 120 | MDRV_VIDEO_UPDATE(cgc7900) |
| 121 | MACHINE_DRIVER_END |
src/mess/drivers/chromati.c
| r7888 | r7889 | |
| 1 | | /*************************************************************************** |
| 2 | | |
| 3 | | Chromatics CGC 7900 |
| 4 | | |
| 5 | | 05/04/2010 Skeleton driver. |
| 6 | | |
| 7 | | ****************************************************************************/ |
| 8 | | |
| 9 | | #include "emu.h" |
| 10 | | #include "includes/cgc7900.h" |
| 11 | | #include "cpu/m68000/m68000.h" |
| 12 | | #include "formats/basicdsk.h" |
| 13 | | #include "devices/messram.h" |
| 14 | | #include "machine/msm8251.h" |
| 15 | | #include "sound/ay8910.h" |
| 16 | | |
| 17 | | static UINT16* chrom_ram; |
| 18 | | |
| 19 | | static ADDRESS_MAP_START(cgc7900_mem, ADDRESS_SPACE_PROGRAM, 16) |
| 20 | | ADDRESS_MAP_UNMAP_HIGH |
| 21 | | AM_RANGE(0x000000, 0x1fffff) AM_RAM AM_BASE(&chrom_ram) // 16 * Buffer card memory |
| 22 | | AM_RANGE(0x800000, 0x80ffff) AM_ROM AM_REGION(M68000_TAG, 0) |
| 23 | | AM_RANGE(0xa00000, 0xbfffff) AM_RAM AM_BASE_MEMBER(cgc7900_state, z_ram) |
| 24 | | AM_RANGE(0xc00000, 0xdfffff) AM_RAM AM_BASE_MEMBER(cgc7900_state, plane_ram) |
| 25 | | // AM_RANGE(0xe00000, 0xe1ffff) AM_WRITE(color_status_w) |
| 26 | | // AM_RANGE(0xe20000, 0xe23fff) Raster Processor |
| 27 | | AM_RANGE(0xe30000, 0xe303ff) AM_RAM AM_BASE_MEMBER(cgc7900_state, clut_ram) |
| 28 | | AM_RANGE(0xe38000, 0xe3bfff) AM_RAM AM_BASE_MEMBER(cgc7900_state, overlay_ram) |
| 29 | | // AM_RANGE(0xe40000, 0xe40001) Bitmap roll counter |
| 30 | | // AM_RANGE(0xe40002, 0xe40003) X Pan |
| 31 | | // AM_RANGE(0xe40004, 0xe40005) Y Pan |
| 32 | | // AM_RANGE(0xe40006, 0xe40007) X Zoom |
| 33 | | // AM_RANGE(0xe40008, 0xe40009) Y Zoom |
| 34 | | // AM_RANGE(0xe4000a, 0xe4000f) Raster Processor |
| 35 | | // AM_RANGE(0xe40010, 0xe40011) Blink Select |
| 36 | | // AM_RANGE(0xe40012, 0xe40013) Plane Select |
| 37 | | // AM_RANGE(0xe40014, 0xe40015) Plane Video Switch |
| 38 | | // AM_RANGE(0xe40016, 0xe40017) AM_WRITE(color_status_fg_w) |
| 39 | | // AM_RANGE(0xe40018, 0xe40019) AM_WRITE(color_status_bg_w) |
| 40 | | // AM_RANGE(0xe4001a, 0xe4001b) Overlay Roll Counter |
| 41 | | // AM_RANGE(0xefc440, 0xefc441) HVG Load X |
| 42 | | // AM_RANGE(0xefc442, 0xefc443) HVG Load Y |
| 43 | | // AM_RANGE(0xefc444, 0xefc445) HVG Load dX |
| 44 | | // AM_RANGE(0xefc446, 0xefc447) HVG Load dY |
| 45 | | // AM_RANGE(0xefc448, 0xefc449) HVG Load Pixel Color |
| 46 | | // AM_RANGE(0xefc44a, 0xefc44b) HVG Load Trip |
| 47 | | AM_RANGE(0xff8000, 0xff8001) AM_DEVREADWRITE8(INS8251_0_TAG, msm8251_data_r, msm8251_data_w, 0x00ff) |
| 48 | | AM_RANGE(0xff8002, 0xff8003) AM_DEVREADWRITE8(INS8251_0_TAG, msm8251_status_r, msm8251_control_w, 0x00ff) |
| 49 | | AM_RANGE(0xff8040, 0xff8041) AM_DEVREADWRITE8(INS8251_1_TAG, msm8251_data_r, msm8251_data_w, 0x00ff) |
| 50 | | AM_RANGE(0xff8042, 0xff8043) AM_DEVREADWRITE8(INS8251_1_TAG, msm8251_status_r, msm8251_control_w, 0x00ff) |
| 51 | | // AM_RANGE(0xff8080, 0xff8081) Keyboard |
| 52 | | // AM_RANGE(0xff80c6, 0xff80c7) Joystick X axis |
| 53 | | // AM_RANGE(0xff80ca, 0xff80cb) Joystick Y axis |
| 54 | | // AM_RANGE(0xff80cc, 0xff80cd) Joystick Z axis |
| 55 | | // AM_RANGE(0xff8100, 0xff8101) Disk data port |
| 56 | | // AM_RANGE(0xff8120, 0xff8121) Disk control/status port |
| 57 | | // AM_RANGE(0xff8141, 0xff8141) Bezel switches |
| 58 | | // AM_RANGE(0xff8181, 0xff8181) Baud rate generator |
| 59 | | // AM_RANGE(0xff81c0, 0xff81ff) AM_DEVREADWRITE8(MM58167_TAG, mm58167_r, mm58167_w, 0x00ff) |
| 60 | | // AM_RANGE(0xff8200, 0xff8201) Interrupt Mask |
| 61 | | // AM_RANGE(0xff8240, 0xff8241) Light Pen enable |
| 62 | | // AM_RANGE(0xff8242, 0xff8243) Light Pen X value |
| 63 | | // AM_RANGE(0xff8244, 0xff8245) Light Pen Y value |
| 64 | | // AM_RANGE(0xff8246, 0xff8247) Buffer memory parity check |
| 65 | | // AM_RANGE(0xff8248, 0xff8249) Buffer memory parity set/reset |
| 66 | | // AM_RANGE(0xff824a, 0xff824b) Sync information |
| 67 | | AM_RANGE(0xff83c0, 0xff83c1) AM_DEVWRITE8(AY8910_TAG, ay8910_address_w, 0x00ff) |
| 68 | | AM_RANGE(0xff83c2, 0xff83c3) AM_DEVREAD8(AY8910_TAG, ay8910_r, 0x00ff) |
| 69 | | AM_RANGE(0xff83c4, 0xff83c5) AM_DEVWRITE8(AY8910_TAG, ay8910_data_w, 0x00ff) |
| 70 | | ADDRESS_MAP_END |
| 71 | | |
| 72 | | /* Input ports */ |
| 73 | | static INPUT_PORTS_START( cgc7900 ) |
| 74 | | INPUT_PORTS_END |
| 75 | | |
| 76 | | |
| 77 | | static MACHINE_RESET(cgc7900) |
| 78 | | { |
| 79 | | UINT8* user1 = memory_region(machine, M68000_TAG); |
| 80 | | |
| 81 | | memcpy((UINT8*)chrom_ram,user1,0x10000); |
| 82 | | |
| 83 | | devtag_get_device(machine, M68000_TAG)->reset(); |
| 84 | | } |
| 85 | | |
| 86 | | static VIDEO_START( cgc7900 ) |
| 87 | | { |
| 88 | | } |
| 89 | | |
| 90 | | static VIDEO_UPDATE( cgc7900 ) |
| 91 | | { |
| 92 | | return 0; |
| 93 | | } |
| 94 | | |
| 95 | | /* F4 Character Displayer */ |
| 96 | | static const gfx_layout cgc7900_charlayout = |
| 97 | | { |
| 98 | | 8, 8, /* 8 x 8 characters */ |
| 99 | | 256, /* 256 characters */ |
| 100 | | 1, /* 1 bits per pixel */ |
| 101 | | { 0 }, /* no bitplanes */ |
| 102 | | /* x offsets */ |
| 103 | | { 7, 6, 5, 4, 3, 2, 1, 0 }, |
| 104 | | /* y offsets */ |
| 105 | | { 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8 }, |
| 106 | | 8*8 /* every char takes 8 bytes */ |
| 107 | | }; |
| 108 | | |
| 109 | | static GFXDECODE_START( cgc7900 ) |
| 110 | | GFXDECODE_ENTRY( "gfx1", 0x0000, cgc7900_charlayout, 0, 1 ) |
| 111 | | GFXDECODE_END |
| 112 | | |
| 113 | | static msm8251_interface rs232_intf = |
| 114 | | { |
| 115 | | NULL, |
| 116 | | NULL, |
| 117 | | NULL |
| 118 | | }; |
| 119 | | |
| 120 | | static msm8251_interface rs449_intf = |
| 121 | | { |
| 122 | | NULL, |
| 123 | | NULL, |
| 124 | | NULL |
| 125 | | }; |
| 126 | | |
| 127 | | static const ay8910_interface ay8910_intf = |
| 128 | | { |
| 129 | | AY8910_LEGACY_OUTPUT, |
| 130 | | AY8910_DEFAULT_LOADS, |
| 131 | | DEVCB_NULL, |
| 132 | | DEVCB_NULL, |
| 133 | | DEVCB_NULL, |
| 134 | | DEVCB_NULL |
| 135 | | }; |
| 136 | | |
| 137 | | static MACHINE_DRIVER_START( cgc7900 ) |
| 138 | | MDRV_DRIVER_DATA(cgc7900_state) |
| 139 | | |
| 140 | | /* basic machine hardware */ |
| 141 | | MDRV_CPU_ADD(M68000_TAG, M68000, XTAL_8MHz) |
| 142 | | MDRV_CPU_PROGRAM_MAP(cgc7900_mem) |
| 143 | | |
| 144 | | MDRV_MACHINE_RESET(cgc7900) |
| 145 | | |
| 146 | | /* video hardware */ |
| 147 | | MDRV_SCREEN_ADD(SCREEN_TAG, RASTER) |
| 148 | | MDRV_SCREEN_REFRESH_RATE(60) |
| 149 | | MDRV_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) /* not accurate */ |
| 150 | | MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16) |
| 151 | | MDRV_SCREEN_SIZE(1024, 768) |
| 152 | | MDRV_SCREEN_VISIBLE_AREA(0, 1024-1, 0, 768-1) |
| 153 | | MDRV_GFXDECODE(cgc7900) |
| 154 | | MDRV_PALETTE_LENGTH(2) |
| 155 | | MDRV_PALETTE_INIT(black_and_white) |
| 156 | | |
| 157 | | MDRV_VIDEO_START(cgc7900) |
| 158 | | MDRV_VIDEO_UPDATE(cgc7900) |
| 159 | | |
| 160 | | /* sound hardware */ |
| 161 | | MDRV_SPEAKER_STANDARD_MONO("mono") |
| 162 | | MDRV_SOUND_ADD(AY8910_TAG, AY8910, 3579545/2) |
| 163 | | MDRV_SOUND_CONFIG(ay8910_intf) |
| 164 | | MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25) |
| 165 | | |
| 166 | | /* devices */ |
| 167 | | MDRV_MSM8251_ADD(INS8251_0_TAG, rs232_intf) |
| 168 | | MDRV_MSM8251_ADD(INS8251_1_TAG, rs449_intf) |
| 169 | | MACHINE_DRIVER_END |
| 170 | | |
| 171 | | /* ROM definition */ |
| 172 | | ROM_START( cgc7900 ) |
| 173 | | ROM_REGION( 0x10000, M68000_TAG, 0 ) |
| 174 | | ROM_LOAD16_BYTE( "210274 800k even a3ee term 1.4.ue24", 0x0001, 0x1000, CRC(5fa8f368) SHA1(120dbcfedce0badd38bf5b23e1fbc99667eb286c) ) |
| 175 | | ROM_LOAD16_BYTE( "210275 800k odd bbb3 term 1.4.uf24", 0x0000, 0x1000, CRC(4d479457) SHA1(5fa96a1eadfd9ba493d28691286e2e001a489a19) ) |
| 176 | | ROM_LOAD16_BYTE( "210276 802k even 0c22 term 1.4.ue22", 0x2001, 0x1000, CRC(c88c44ec) SHA1(f39d8a3cf7aaefd815b4426348965b076c1f2265) ) |
| 177 | | ROM_LOAD16_BYTE( "210277 802k odd b58c term 1.4.uf22", 0x2000, 0x1000, CRC(52ffe01f) SHA1(683aa71c2eb17b7ad639b888487db73d7684901a) ) |
| 178 | | ROM_LOAD16_BYTE( "210278 804k even eaf4 term 1.4.ue21", 0x4001, 0x1000, CRC(7fe326db) SHA1(d39d05e008160fb8afa62e0d4cfb1d813f2296d4) ) |
| 179 | | ROM_LOAD16_BYTE( "210279 804k odd 3f6d term 1.4.uf21", 0x4000, 0x1000, CRC(6c12d81c) SHA1(efe7c20e567c02b9c5b66a2d18e035d5f5f56b28) ) |
| 180 | | ROM_LOAD16_BYTE( "210280 806k even 679d term 1.4.ue20", 0x6001, 0x1000, CRC(70930d74) SHA1(a5ab1c0bd8bd829408961107e01598cd71a97fec) ) |
| 181 | | ROM_LOAD16_BYTE( "210281 1.4 806k odd sum 611e.uf20", 0x6000, 0x1000, CRC(8080aa2a) SHA1(c018a23e6f2158e2d63723cade0a3ad737090921) ) |
| 182 | | ROM_LOAD16_BYTE( "su7700 210282 808k even opmod term 1.4 sum 2550.ue18", 0x8001, 0x1000, CRC(8f5834cd) SHA1(3cd03c82aa85c30cbc8e954f5a9fc4e9034f913b) ) |
| 183 | | ROM_LOAD16_BYTE( "su7700 210283 808k odd opmod term 1.4 sum faca.uf18", 0x8000, 0x1000, CRC(e593b133) SHA1(6c641df844706e0d990b5fd544e98594171080a1) ) |
| 184 | | ROM_LOAD16_BYTE( "210258 80ak even b2f6 mon 1.3.ue15", 0xa001, 0x1000, CRC(ec5a1250) SHA1(ffef73d35f172ac610b35bdf729d51eb6f9346ba) ) |
| 185 | | ROM_LOAD16_BYTE( "210259 80ak odd cd66 mon 1.3.uf15", 0xa000, 0x1000, CRC(61eb43c6) SHA1(baaae0b787798147da453aac1f815589ea4ed921) ) |
| 186 | | ROM_LOAD16_BYTE( "210244 80c even ce40 dos 1.6b.ue13", 0xc001, 0x1000, CRC(3b64e4cb) SHA1(71b28d160b101ea6165e602ff1c54272b7b30ece) ) |
| 187 | | ROM_LOAD16_BYTE( "210245 80c odd 1ac3 dos 1.6b.uf13", 0xc000, 0x1000, CRC(0b6539ca) SHA1(d49e6d3307e5d634a412fd80b59492f31e29f7e0) ) |
| 188 | | ROM_LOAD16_BYTE( "210290 idris even rel3 sum 0cce.ue12", 0xe001, 0x1000, CRC(07065772) SHA1(620ea5d55021e5c38efc010722ddbd852cd49e39) ) |
| 189 | | ROM_LOAD16_BYTE( "210291 idris odd rel3 sum 5d11.uf12", 0xe000, 0x1000, CRC(d81b30da) SHA1(228f9b4e39d430ce4aaa81ea63f4516a51e6d001) ) |
| 190 | | |
| 191 | | ROM_REGION( 0x800, "gfx1", 0 ) |
| 192 | | ROM_LOAD( "norm chrset 4b40.ua13", 0x0000, 0x0400, CRC(55eb7b87) SHA1(768cea80597e7396d9e26f8cd09e6b480a526fce) ) |
| 193 | | ROM_LOAD( "alt 46a7.ua14", 0x0400, 0x0400, CRC(be22b7e4) SHA1(83ef252c7fab33b4d3821a3049b89d044df35de8) ) |
| 194 | | |
| 195 | | ROM_REGION( 0x20, "proms", 0 ) |
| 196 | | ROM_LOAD( "rp0a.ub8", 0x0000, 0x0020, NO_DUMP ) |
| 197 | | ROM_LOAD( "rp1a.ub7", 0x0000, 0x0020, NO_DUMP ) |
| 198 | | ROM_LOAD( "rp2a.ub9", 0x0000, 0x0020, NO_DUMP ) |
| 199 | | ROM_LOAD( "ha-5.ub1", 0x0000, 0x0020, NO_DUMP ) |
| 200 | | ROM_LOAD( "03c0.ua16", 0x0000, 0x0020, NO_DUMP ) |
| 201 | | ROM_LOAD( "03c0.ua11", 0x0000, 0x0020, NO_DUMP ) |
| 202 | | ROM_END |
| 203 | | |
| 204 | | /* Driver */ |
| 205 | | |
| 206 | | /* YEAR NAME PARENT COMPAT MACHINE INPUT INIT COMPANY FULLNAME FLAGS */ |
| 207 | | COMP( 1980, cgc7900, 0, 0, cgc7900, cgc7900, 0, "Chromatics", "CGC 7900", GAME_NOT_WORKING) |
src/mess/drivers/cgc7900.c
| r0 | r7889 | |
| 1 | /*************************************************************************** |
| 2 | |
| 3 | Chromatics CGC 7900 |
| 4 | |
| 5 | 05/04/2010 Skeleton driver. |
| 6 | |
| 7 | ****************************************************************************/ |
| 8 | |
| 9 | #include "emu.h" |
| 10 | #include "includes/cgc7900.h" |
| 11 | #include "cpu/m68000/m68000.h" |
| 12 | #include "formats/basicdsk.h" |
| 13 | #include "devices/messram.h" |
| 14 | #include "machine/msm8251.h" |
| 15 | #include "sound/ay8910.h" |
| 16 | |
| 17 | static UINT16* chrom_ram; |
| 18 | |
| 19 | static ADDRESS_MAP_START( cgc7900_mem, ADDRESS_SPACE_PROGRAM, 16 ) |
| 20 | ADDRESS_MAP_UNMAP_HIGH |
| 21 | AM_RANGE(0x000000, 0x1fffff) AM_RAM AM_BASE(&chrom_ram) // 16 * Buffer card memory |
| 22 | AM_RANGE(0x800000, 0x80ffff) AM_ROM AM_REGION(M68000_TAG, 0) |
| 23 | AM_RANGE(0xa00000, 0xbfffff) AM_RAM AM_BASE_MEMBER(cgc7900_state, z_ram) |
| 24 | AM_RANGE(0xc00000, 0xdfffff) AM_RAM AM_BASE_MEMBER(cgc7900_state, plane_ram) |
| 25 | // AM_RANGE(0xe00000, 0xe1ffff) AM_WRITE(color_status_w) |
| 26 | // AM_RANGE(0xe20000, 0xe23fff) Raster Processor |
| 27 | AM_RANGE(0xe30000, 0xe303ff) AM_RAM AM_BASE_MEMBER(cgc7900_state, clut_ram) |
| 28 | AM_RANGE(0xe38000, 0xe3bfff) AM_RAM AM_BASE_MEMBER(cgc7900_state, overlay_ram) |
| 29 | // AM_RANGE(0xe40000, 0xe40fff) AM_RAM |
| 30 | // AM_RANGE(0xe40000, 0xe40001) Bitmap roll counter |
| 31 | // AM_RANGE(0xe40002, 0xe40003) X Pan |
| 32 | // AM_RANGE(0xe40004, 0xe40005) Y Pan |
| 33 | // AM_RANGE(0xe40006, 0xe40007) X/Y Zoom |
| 34 | // AM_RANGE(0xe4000a, 0xe4000f) Raster Processor |
| 35 | // AM_RANGE(0xe40010, 0xe40011) Blink Select |
| 36 | // AM_RANGE(0xe40012, 0xe40013) Plane Select |
| 37 | // AM_RANGE(0xe40014, 0xe40015) Plane Video Switch |
| 38 | // AM_RANGE(0xe40016, 0xe40017) AM_WRITE(color_status_fg_w) |
| 39 | // AM_RANGE(0xe40018, 0xe40019) AM_WRITE(color_status_bg_w) |
| 40 | // AM_RANGE(0xe4001a, 0xe4001b) Overlay Roll Counter |
| 41 | // AM_RANGE(0xefc440, 0xefc441) HVG Load X |
| 42 | // AM_RANGE(0xefc442, 0xefc443) HVG Load Y |
| 43 | // AM_RANGE(0xefc444, 0xefc445) HVG Load dX |
| 44 | // AM_RANGE(0xefc446, 0xefc447) HVG Load dY |
| 45 | // AM_RANGE(0xefc448, 0xefc449) HVG Load Pixel Color |
| 46 | // AM_RANGE(0xefc44a, 0xefc44b) HVG Load Trip |
| 47 | AM_RANGE(0xff8000, 0xff8001) AM_DEVREADWRITE8(INS8251_0_TAG, msm8251_data_r, msm8251_data_w, 0x00ff) |
| 48 | AM_RANGE(0xff8002, 0xff8003) AM_DEVREADWRITE8(INS8251_0_TAG, msm8251_status_r, msm8251_control_w, 0x00ff) |
| 49 | AM_RANGE(0xff8040, 0xff8041) AM_DEVREADWRITE8(INS8251_1_TAG, msm8251_data_r, msm8251_data_w, 0x00ff) |
| 50 | AM_RANGE(0xff8042, 0xff8043) AM_DEVREADWRITE8(INS8251_1_TAG, msm8251_status_r, msm8251_control_w, 0x00ff) |
| 51 | // AM_RANGE(0xff8080, 0xff8081) Keyboard |
| 52 | // AM_RANGE(0xff80c6, 0xff80c7) Joystick X axis |
| 53 | // AM_RANGE(0xff80ca, 0xff80cb) Joystick Y axis |
| 54 | // AM_RANGE(0xff80cc, 0xff80cd) Joystick Z axis |
| 55 | // AM_RANGE(0xff8100, 0xff8101) Disk data port |
| 56 | // AM_RANGE(0xff8120, 0xff8121) Disk control/status port |
| 57 | // AM_RANGE(0xff8141, 0xff8141) Bezel switches |
| 58 | // AM_RANGE(0xff8181, 0xff8181) Baud rate generator |
| 59 | // AM_RANGE(0xff81c0, 0xff81ff) AM_DEVREADWRITE8(MM58167_TAG, mm58167_r, mm58167_w, 0x00ff) |
| 60 | // AM_RANGE(0xff8200, 0xff8201) Interrupt Mask |
| 61 | // AM_RANGE(0xff8240, 0xff8241) Light Pen enable |
| 62 | // AM_RANGE(0xff8242, 0xff8243) Light Pen X value |
| 63 | // AM_RANGE(0xff8244, 0xff8245) Light Pen Y value |
| 64 | // AM_RANGE(0xff8246, 0xff8247) Buffer memory parity check |
| 65 | // AM_RANGE(0xff8248, 0xff8249) Buffer memory parity set/reset |
| 66 | // AM_RANGE(0xff824a, 0xff824b) Sync information |
| 67 | AM_RANGE(0xff83c0, 0xff83c1) AM_DEVWRITE8(AY8910_TAG, ay8910_address_w, 0x00ff) |
| 68 | AM_RANGE(0xff83c2, 0xff83c3) AM_DEVREAD8(AY8910_TAG, ay8910_r, 0x00ff) |
| 69 | AM_RANGE(0xff83c4, 0xff83c5) AM_DEVWRITE8(AY8910_TAG, ay8910_data_w, 0x00ff) |
| 70 | // AM_RANGE(0xff8500, 0xff8501) Disk DMA Command Register |
| 71 | // AM_RANGE(0xff8502, 0xff8503) Disk DMA Address Register |
| 72 | // AM_RANGE(0xff8507, 0xff8507) Disk DMA Control/Status Register |
| 73 | ADDRESS_MAP_END |
| 74 | |
| 75 | /* Input ports */ |
| 76 | static INPUT_PORTS_START( cgc7900 ) |
| 77 | INPUT_PORTS_END |
| 78 | |
| 79 | |
| 80 | static MACHINE_RESET(cgc7900) |
| 81 | { |
| 82 | UINT8* user1 = memory_region(machine, M68000_TAG); |
| 83 | |
| 84 | memcpy((UINT8*)chrom_ram,user1,0x10000); |
| 85 | |
| 86 | devtag_get_device(machine, M68000_TAG)->reset(); |
| 87 | } |
| 88 | |
| 89 | |
| 90 | static msm8251_interface rs232_intf = |
| 91 | { |
| 92 | NULL, |
| 93 | NULL, |
| 94 | NULL |
| 95 | }; |
| 96 | |
| 97 | static msm8251_interface rs449_intf = |
| 98 | { |
| 99 | NULL, |
| 100 | NULL, |
| 101 | NULL |
| 102 | }; |
| 103 | |
| 104 | static const ay8910_interface ay8910_intf = |
| 105 | { |
| 106 | AY8910_LEGACY_OUTPUT, |
| 107 | AY8910_DEFAULT_LOADS, |
| 108 | DEVCB_NULL, |
| 109 | DEVCB_NULL, |
| 110 | DEVCB_NULL, |
| 111 | DEVCB_NULL |
| 112 | }; |
| 113 | |
| 114 | static MACHINE_DRIVER_START( cgc7900 ) |
| 115 | MDRV_DRIVER_DATA(cgc7900_state) |
| 116 | |
| 117 | /* basic machine hardware */ |
| 118 | MDRV_CPU_ADD(M68000_TAG, M68000, XTAL_8MHz) |
| 119 | MDRV_CPU_PROGRAM_MAP(cgc7900_mem) |
| 120 | |
| 121 | MDRV_MACHINE_RESET(cgc7900) |
| 122 | |
| 123 | /* video hardware */ |
| 124 | MDRV_IMPORT_FROM(cgc7900_video) |
| 125 | |
| 126 | /* sound hardware */ |
| 127 | MDRV_SPEAKER_STANDARD_MONO("mono") |
| 128 | MDRV_SOUND_ADD(AY8910_TAG, AY8910, 3579545/2) |
| 129 | MDRV_SOUND_CONFIG(ay8910_intf) |
| 130 | MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25) |
| 131 | |
| 132 | /* devices */ |
| 133 | MDRV_MSM8251_ADD(INS8251_0_TAG, rs232_intf) |
| 134 | MDRV_MSM8251_ADD(INS8251_1_TAG, rs449_intf) |
| 135 | MACHINE_DRIVER_END |
| 136 | |
| 137 | /* ROM definition */ |
| 138 | ROM_START( cgc7900 ) |
| 139 | ROM_REGION( 0x10000, M68000_TAG, 0 ) |
| 140 | ROM_LOAD16_BYTE( "210274 800k even a3ee term 1.4.ue24", 0x0001, 0x1000, CRC(5fa8f368) SHA1(120dbcfedce0badd38bf5b23e1fbc99667eb286c) ) |
| 141 | ROM_LOAD16_BYTE( "210275 800k odd bbb3 term 1.4.uf24", 0x0000, 0x1000, CRC(4d479457) SHA1(5fa96a1eadfd9ba493d28691286e2e001a489a19) ) |
| 142 | ROM_LOAD16_BYTE( "210276 802k even 0c22 term 1.4.ue22", 0x2001, 0x1000, CRC(c88c44ec) SHA1(f39d8a3cf7aaefd815b4426348965b076c1f2265) ) |
| 143 | ROM_LOAD16_BYTE( "210277 802k odd b58c term 1.4.uf22", 0x2000, 0x1000, CRC(52ffe01f) SHA1(683aa71c2eb17b7ad639b888487db73d7684901a) ) |
| 144 | ROM_LOAD16_BYTE( "210278 804k even eaf4 term 1.4.ue21", 0x4001, 0x1000, CRC(7fe326db) SHA1(d39d05e008160fb8afa62e0d4cfb1d813f2296d4) ) |
| 145 | ROM_LOAD16_BYTE( "210279 804k odd 3f6d term 1.4.uf21", 0x4000, 0x1000, CRC(6c12d81c) SHA1(efe7c20e567c02b9c5b66a2d18e035d5f5f56b28) ) |
| 146 | ROM_LOAD16_BYTE( "210280 806k even 679d term 1.4.ue20", 0x6001, 0x1000, CRC(70930d74) SHA1(a5ab1c0bd8bd829408961107e01598cd71a97fec) ) |
| 147 | ROM_LOAD16_BYTE( "210281 1.4 806k odd sum 611e.uf20", 0x6000, 0x1000, CRC(8080aa2a) SHA1(c018a23e6f2158e2d63723cade0a3ad737090921) ) |
| 148 | ROM_LOAD16_BYTE( "su7700 210282 808k even opmod term 1.4 sum 2550.ue18", 0x8001, 0x1000, CRC(8f5834cd) SHA1(3cd03c82aa85c30cbc8e954f5a9fc4e9034f913b) ) |
| 149 | ROM_LOAD16_BYTE( "su7700 210283 808k odd opmod term 1.4 sum faca.uf18", 0x8000, 0x1000, CRC(e593b133) SHA1(6c641df844706e0d990b5fd544e98594171080a1) ) |
| 150 | ROM_LOAD16_BYTE( "210258 80ak even b2f6 mon 1.3.ue15", 0xa001, 0x1000, CRC(ec5a1250) SHA1(ffef73d35f172ac610b35bdf729d51eb6f9346ba) ) |
| 151 | ROM_LOAD16_BYTE( "210259 80ak odd cd66 mon 1.3.uf15", 0xa000, 0x1000, CRC(61eb43c6) SHA1(baaae0b787798147da453aac1f815589ea4ed921) ) |
| 152 | ROM_LOAD16_BYTE( "210244 80c even ce40 dos 1.6b.ue13", 0xc001, 0x1000, CRC(3b64e4cb) SHA1(71b28d160b101ea6165e602ff1c54272b7b30ece) ) |
| 153 | ROM_LOAD16_BYTE( "210245 80c odd 1ac3 dos 1.6b.uf13", 0xc000, 0x1000, CRC(0b6539ca) SHA1(d49e6d3307e5d634a412fd80b59492f31e29f7e0) ) |
| 154 | ROM_LOAD16_BYTE( "210290 idris even rel3 sum 0cce.ue12", 0xe001, 0x1000, CRC(07065772) SHA1(620ea5d55021e5c38efc010722ddbd852cd49e39) ) |
| 155 | ROM_LOAD16_BYTE( "210291 idris odd rel3 sum 5d11.uf12", 0xe000, 0x1000, CRC(d81b30da) SHA1(228f9b4e39d430ce4aaa81ea63f4516a51e6d001) ) |
| 156 | |
| 157 | ROM_REGION( 0x800, "gfx1", 0 ) |
| 158 | ROM_LOAD( "norm chrset 4b40.ua13", 0x0000, 0x0400, CRC(55eb7b87) SHA1(768cea80597e7396d9e26f8cd09e6b480a526fce) ) |
| 159 | ROM_LOAD( "alt 46a7.ua14", 0x0400, 0x0400, CRC(be22b7e4) SHA1(83ef252c7fab33b4d3821a3049b89d044df35de8) ) |
| 160 | |
| 161 | ROM_REGION( 0x20, "proms", 0 ) |
| 162 | ROM_LOAD( "rp0a.ub8", 0x0000, 0x0020, NO_DUMP ) |
| 163 | ROM_LOAD( "rp1a.ub7", 0x0000, 0x0020, NO_DUMP ) |
| 164 | ROM_LOAD( "rp2a.ub9", 0x0000, 0x0020, NO_DUMP ) |
| 165 | ROM_LOAD( "ha-5.ub1", 0x0000, 0x0020, NO_DUMP ) |
| 166 | ROM_LOAD( "03c0.ua16", 0x0000, 0x0020, NO_DUMP ) |
| 167 | ROM_LOAD( "03c0.ua11", 0x0000, 0x0020, NO_DUMP ) |
| 168 | ROM_END |
| 169 | |
| 170 | /* Driver */ |
| 171 | |
| 172 | /* YEAR NAME PARENT COMPAT MACHINE INPUT INIT COMPANY FULLNAME FLAGS */ |
| 173 | COMP( 1980, cgc7900, 0, 0, cgc7900, cgc7900, 0, "Chromatics", "CGC 7900", GAME_NOT_WORKING) |