src/mess/video/kaypro.c
| r0 | r4516 | |
| 1 | |
| 2 | #include "driver.h"
|
| 3 | |
| 4 | |
| 5 | /***********************************************************
|
| 6 | |
| 7 | Video
|
| 8 | |
| 9 | ************************************************************/
|
| 10 | |
| 11 | PALETTE_INIT( kaypro )
|
| 12 | {
|
| 13 | palette_set_color(machine,0,RGB_BLACK); /* black */
|
| 14 | palette_set_color(machine,1,MAKE_RGB(0, 220, 0)); /* green */
|
| 15 | }
|
| 16 | |
| 17 | VIDEO_UPDATE( kayproii )
|
| 18 | {
|
| 19 | /* The display consists of 80 columns and 24 rows. Each row is allocated 128 bytes of ram,
|
| 20 | but only the first 80 are used. The total video ram therefore is 0x0c00 bytes.
|
| 21 | There is one video attribute: bit 7 causes blinking. The first half of the
|
| 22 | character generator is blank, with the visible characters in the 2nd half.
|
| 23 | During the "off" period of blanking, the first half is used. Only 5 pixels are
|
| 24 | connected from the rom to the shift register, the remaining pixels are held high.
|
| 25 | A high pixel is black and a low pixel is green. */
|
| 26 | |
| 27 | static UINT8 framecnt=0;
|
| 28 | UINT8 y,ra,chr,gfx;
|
| 29 | UINT16 sy=0,ma=0,x;
|
| 30 | UINT8 *FNT = memory_region(screen->machine, "gfx1");
|
| 31 | |
| 32 | framecnt++;
|
| 33 | |
| 34 | for (y = 0; y < 24; y++)
|
| 35 | {
|
| 36 | for (ra = 0; ra < 10; ra++)
|
| 37 | {
|
| 38 | UINT16 *p = BITMAP_ADDR16(bitmap, sy++, 0);
|
| 39 | |
| 40 | for (x = ma; x < ma + 80; x++)
|
| 41 | {
|
| 42 | if (ra < 8)
|
| 43 | {
|
| 44 | chr = videoram[x]^0x80;
|
| 45 | |
| 46 | /* Take care of flashing characters */
|
| 47 | if ((chr < 0x80) && (framecnt & 0x08))
|
| 48 | chr |= 0x80;
|
| 49 | |
| 50 | /* get pattern of pixels for that character scanline */
|
| 51 | gfx = FNT[(chr<<3) | ra ];
|
| 52 | }
|
| 53 | else
|
| 54 | gfx = 0xff;
|
| 55 | |
| 56 | /* Display a scanline of a character (7 pixels) */
|
| 57 | *p = 0; p++;
|
| 58 | *p = ( gfx & 0x10 ) ? 0 : 1; p++;
|
| 59 | *p = ( gfx & 0x08 ) ? 0 : 1; p++;
|
| 60 | *p = ( gfx & 0x04 ) ? 0 : 1; p++;
|
| 61 | *p = ( gfx & 0x02 ) ? 0 : 1; p++;
|
| 62 | *p = ( gfx & 0x01 ) ? 0 : 1; p++;
|
| 63 | *p = 0; p++;
|
| 64 | }
|
| 65 | }
|
| 66 | ma+=128;
|
| 67 | }
|
| 68 | return 0;
|
| 69 | }
|
| 70 | |
| 71 | VIDEO_UPDATE( omni2 )
|
| 72 | {
|
| 73 | static UINT8 framecnt=0;
|
| 74 | UINT8 y,ra,chr,gfx;
|
| 75 | UINT16 sy=0,ma=0,x;
|
| 76 | UINT8 *FNT = memory_region(screen->machine, "gfx1");
|
| 77 | |
| 78 | framecnt++;
|
| 79 | |
| 80 | for (y = 0; y < 24; y++)
|
| 81 | {
|
| 82 | for (ra = 0; ra < 10; ra++)
|
| 83 | {
|
| 84 | UINT16 *p = BITMAP_ADDR16(bitmap, sy++, 0);
|
| 85 | |
| 86 | for (x = ma; x < ma + 80; x++)
|
| 87 | {
|
| 88 | if (ra < 8)
|
| 89 | {
|
| 90 | chr = videoram[x];
|
| 91 | |
| 92 | /* Take care of flashing characters */
|
| 93 | if ((chr > 0x7f) && (framecnt & 0x08))
|
| 94 | chr |= 0x80;
|
| 95 | |
| 96 | /* get pattern of pixels for that character scanline */
|
| 97 | gfx = FNT[(chr<<3) | ra ];
|
| 98 | }
|
| 99 | else
|
| 100 | gfx = 0xff;
|
| 101 | |
| 102 | /* Display a scanline of a character (7 pixels) */
|
| 103 | *p = ( gfx & 0x40 ) ? 0 : 1; p++;
|
| 104 | *p = ( gfx & 0x20 ) ? 0 : 1; p++;
|
| 105 | *p = ( gfx & 0x10 ) ? 0 : 1; p++;
|
| 106 | *p = ( gfx & 0x08 ) ? 0 : 1; p++;
|
| 107 | *p = ( gfx & 0x04 ) ? 0 : 1; p++;
|
| 108 | *p = ( gfx & 0x02 ) ? 0 : 1; p++;
|
| 109 | *p = ( gfx & 0x01 ) ? 0 : 1; p++;
|
| 110 | }
|
| 111 | }
|
| 112 | ma+=128;
|
| 113 | }
|
| 114 | return 0;
|
| 115 | }
|
| 116 | |
| 117 | READ8_HANDLER( kaypro_videoram_r )
|
| 118 | {
|
| 119 | return videoram[offset];
|
| 120 | }
|
| 121 | |
| 122 | WRITE8_HANDLER( kaypro_videoram_w )
|
| 123 | {
|
| 124 | videoram[offset] = data;
|
| 125 | }
|
src/mess/machine/kaypro.c
| r0 | r4516 | |
| 1 | |
| 2 | #include "driver.h"
|
| 3 | #include "cpu/z80/z80.h"
|
| 4 | #include "machine/z80pio.h"
|
| 5 | #include "machine/z80sio.h"
|
| 6 | #include "cpu/z80/z80daisy.h"
|
| 7 | #include "machine/ctronics.h"
|
| 8 | #include "machine/kay_kbd.h"
|
| 9 | #include "machine/wd17xx.h"
|
| 10 | #include "devices/basicdsk.h"
|
| 11 | #include "includes/kaypro.h"
|
| 12 | |
| 13 | |
| 14 | static const device_config *kaypro2_z80pio_g;
|
| 15 | static const device_config *kaypro2_z80pio_s;
|
| 16 | static const device_config *kaypro2_z80sio;
|
| 17 | static const device_config *kaypro2_printer;
|
| 18 | static const device_config *kaypro2_fdc;
|
| 19 | |
| 20 | |
| 21 | |
| 22 | /***********************************************************
|
| 23 | |
| 24 | PIO
|
| 25 | |
| 26 | It seems there must have been a bulk-purchase
|
| 27 | special on pios - port B is unused on both of them
|
| 28 | |
| 29 | ************************************************************/
|
| 30 | |
| 31 | static WRITE8_DEVICE_HANDLER( kaypro2_interrupt )
|
| 32 | {
|
| 33 | cpu_set_input_line(device->machine->cpu[0], 0, data);
|
| 34 | }
|
| 35 | |
| 36 | static READ8_DEVICE_HANDLER( pio_system_r )
|
| 37 | {
|
| 38 | /* d3 Centronics ready flag */
|
| 39 | |
| 40 | return ~centronics_busy_r(kaypro2_printer) << 3;
|
| 41 | }
|
| 42 | |
| 43 | static WRITE8_DEVICE_HANDLER( pio_system_w )
|
| 44 | {
|
| 45 | /* d7 bank select
|
| 46 | d6 disk drive motors - not emulated
|
| 47 | d5 double-density enable
|
| 48 | d4 Centronics strobe
|
| 49 | d1 drive B
|
| 50 | d0 drive A */
|
| 51 | |
| 52 | /* get address space */
|
| 53 | const address_space *mem = cputag_get_address_space(device->machine, "maincpu", ADDRESS_SPACE_PROGRAM);
|
| 54 | |
| 55 | if (data & 0x80)
|
| 56 | {
|
| 57 | memory_install_readwrite8_handler (mem, 0x0000, 0x3fff, 0, 0, SMH_UNMAP, SMH_UNMAP);
|
| 58 | memory_install_read8_handler (mem, 0x0000, 0x0fff, 0, 0, SMH_BANK1);
|
| 59 | memory_set_bankptr(mem->machine, 1, memory_region(mem->machine, "maincpu"));
|
| 60 | memory_install_readwrite8_handler (mem, 0x3000, 0x3fff, 0, 0, kaypro_videoram_r, kaypro_videoram_w);
|
| 61 | }
|
| 62 | else
|
| 63 | {
|
| 64 | memory_install_readwrite8_handler (mem, 0x0000, 0x3fff, 0, 0, SMH_UNMAP, SMH_UNMAP);
|
| 65 | memory_install_readwrite8_handler (mem, 0x0000, 0x3fff, 0, 0, SMH_BANK2, SMH_BANK3);
|
| 66 | memory_set_bankptr(mem->machine, 2, memory_region(mem->machine, "rambank"));
|
| 67 | memory_set_bankptr(mem->machine, 3, memory_region(mem->machine, "rambank"));
|
| 68 | }
|
| 69 | |
| 70 | wd17xx_set_density(kaypro2_fdc, (data & 0x20) ? 1 : 0);
|
| 71 | |
| 72 | centronics_strobe_w(kaypro2_printer, BIT(data, 4));
|
| 73 | |
| 74 | if (data & 1)
|
| 75 | wd17xx_set_drive(kaypro2_fdc, 0);
|
| 76 | else
|
| 77 | if (data & 2)
|
| 78 | wd17xx_set_drive(kaypro2_fdc, 1);
|
| 79 | |
| 80 | if (data & 3)
|
| 81 | wd17xx_set_side(kaypro2_fdc, 0); /* only has 1 side */
|
| 82 | }
|
| 83 | |
| 84 | const z80pio_interface kaypro2_pio_g_intf =
|
| 85 | {
|
| 86 | DEVCB_HANDLER(kaypro2_interrupt),
|
| 87 | DEVCB_NULL,
|
| 88 | DEVCB_NULL,
|
| 89 | DEVCB_DEVICE_HANDLER("centronics", centronics_data_w),
|
| 90 | DEVCB_NULL,
|
| 91 | DEVCB_NULL, /* portA ready active callback */
|
| 92 | DEVCB_NULL /* portB ready active callback */
|
| 93 | };
|
| 94 | |
| 95 | const z80pio_interface kaypro2_pio_s_intf =
|
| 96 | {
|
| 97 | DEVCB_HANDLER(kaypro2_interrupt),
|
| 98 | DEVCB_HANDLER(pio_system_r), /* read printer status */
|
| 99 | DEVCB_NULL,
|
| 100 | DEVCB_HANDLER(pio_system_w), /* activate various internal devices */
|
| 101 | DEVCB_NULL,
|
| 102 | DEVCB_NULL, /* portA ready active callback */
|
| 103 | DEVCB_NULL /* portB ready active callback */
|
| 104 | };
|
| 105 | |
| 106 | READ8_DEVICE_HANDLER( kaypro2_pio_r )
|
| 107 | {
|
| 108 | if (!offset)
|
| 109 | return z80pio_d_r(device, 0);
|
| 110 | else
|
| 111 | if (offset == 1)
|
| 112 | return z80pio_c_r(device, 0);
|
| 113 | else
|
| 114 | if (offset == 2)
|
| 115 | return z80pio_d_r(device, 1);
|
| 116 | else
|
| 117 | return z80pio_c_r(device, 1);
|
| 118 | }
|
| 119 | |
| 120 | WRITE8_DEVICE_HANDLER( kaypro2_pio_w )
|
| 121 | {
|
| 122 | if (!offset)
|
| 123 | z80pio_d_w(device, 0, data);
|
| 124 | else
|
| 125 | if (offset == 1)
|
| 126 | z80pio_c_w(device, 0, data);
|
| 127 | else
|
| 128 | if (offset == 2)
|
| 129 | z80pio_d_w(device, 1, data);
|
| 130 | else
|
| 131 | z80pio_c_w(device, 1, data);
|
| 132 | }
|
| 133 | |
| 134 | |
| 135 | /***********************************************************
|
| 136 | |
| 137 | SIO
|
| 138 | Baud rate setup commented out until MAME includes
|
| 139 | the feature.
|
| 140 | |
| 141 | ************************************************************/
|
| 142 | |
| 143 | /* Set baud rate. bits 0..3 Rx and Tx are tied together. Baud Rate Generator is a AY-5-8116, SMC8116, etc.
|
| 144 | 00h 50 |
| 145 | 11h 75 |
| 146 | 22h 110 |
| 147 | 33h 134.5 |
| 148 | 44h 150 |
| 149 | 55h 300 |
| 150 | 66h 600 |
| 151 | 77h 1200 |
| 152 | 88h 1800 |
| 153 | 99h 2000 |
| 154 | AAh 2400 |
| 155 | BBh 3600 |
| 156 | CCh 4800 |
| 157 | DDh 7200 |
| 158 | EEh 9600 |
| 159 | FFh 19200 */
|
| 160 | |
| 161 | static const int baud_clock[]={ 800, 1200, 1760, 2152, 2400, 4800, 9600, 19200, 28800, 32000, 38400, 57600, 76800, 115200, 153600, 307200 };
|
| 162 | |
| 163 | WRITE8_HANDLER( kaypro2_baud_a_w ) /* channel A - RS232C */
|
| 164 | {
|
| 165 | data &= 0x0f;
|
| 166 | |
| 167 | // z80sio_set_rx_clock( kaypro2_z80sio, baud_clock[data], 0);
|
| 168 | // z80sio_set_tx_clock( kaypro2_z80sio, baud_clock[data], 0);
|
| 169 | }
|
| 170 | |
| 171 | WRITE8_HANDLER( kaypro2_baud_b_w ) /* Channel B - Keyboard */
|
| 172 | {
|
| 173 | /* Only speed used is 300 baud */
|
| 174 | |
| 175 | data &= 0x0f;
|
| 176 | |
| 177 | // z80sio_set_rx_clock( kaypro2_z80sio, baud_clock[data], 1);
|
| 178 | // z80sio_set_tx_clock( kaypro2_z80sio, baud_clock[data], 1);
|
| 179 | }
|
| 180 | |
| 181 | /* when sio devcb'ed like pio is, change to use pio's int handler */
|
| 182 | static void kaypro2_int_sio(const device_config *device, int state)
|
| 183 | {
|
| 184 | cpu_set_input_line(device->machine->cpu[0], 0, state);
|
| 185 | }
|
| 186 | |
| 187 | const z80sio_interface kaypro2_sio_intf =
|
| 188 | {
|
| 189 | kaypro2_int_sio, /* interrupt handler */
|
| 190 | 0, /* DTR changed handler */
|
| 191 | 0, /* RTS changed handler */
|
| 192 | 0, /* BREAK changed handler */
|
| 193 | 0, /* transmit handler - which channel is this for? */
|
| 194 | 0 /* receive handler - which channel is this for? */
|
| 195 | };
|
| 196 | |
| 197 | static const z80_daisy_chain kaypro2_daisy_chain[] =
|
| 198 | {
|
| 199 | /* Which order are these supposed to be in? assumed highest priority at the top */
|
| 200 | { "z80sio" }, /* sio */
|
| 201 | { "z80pio_s" }, /* System pio */
|
| 202 | { "z80pio_g" }, /* General purpose pio */
|
| 203 | { NULL }
|
| 204 | };
|
| 205 | |
| 206 | READ8_DEVICE_HANDLER( kaypro2_sio_r )
|
| 207 | {
|
| 208 | if (!offset)
|
| 209 | return z80sio_d_r(device, 0);
|
| 210 | else
|
| 211 | if (offset == 1)
|
| 212 | // return z80sio_d_r(device, 1);
|
| 213 | return kay_kbd_d_r();
|
| 214 | else
|
| 215 | if (offset == 2)
|
| 216 | return z80sio_c_r(device, 0);
|
| 217 | else
|
| 218 | // return z80sio_c_r(device, 1);
|
| 219 | return kay_kbd_c_r();
|
| 220 | }
|
| 221 | |
| 222 | WRITE8_DEVICE_HANDLER( kaypro2_sio_w )
|
| 223 | {
|
| 224 | if (!offset)
|
| 225 | z80sio_d_w(device, 0, data);
|
| 226 | else
|
| 227 | if (offset == 1)
|
| 228 | // z80sio_d_w(device, 1, data);
|
| 229 | kay_kbd_d_w(device->machine, data);
|
| 230 | else
|
| 231 | if (offset == 2)
|
| 232 | z80sio_c_w(device, 0, data);
|
| 233 | else
|
| 234 | z80sio_c_w(device, 1, data);
|
| 235 | }
|
| 236 | |
| 237 | |
| 238 | /***********************************************************
|
| 239 | |
| 240 | Floppy DIsk
|
| 241 | |
| 242 | If there is no diskette in the drive, the cpu will
|
| 243 | HALT, until the fdc does a NMI. NMI is deactivated
|
| 244 | otherwise.
|
| 245 | |
| 246 | ************************************************************/
|
| 247 | |
| 248 | static WD17XX_CALLBACK( kaypro2_fdc_callback )
|
| 249 | {
|
| 250 | switch (state)
|
| 251 | {
|
| 252 | case WD17XX_DRQ_CLR:
|
| 253 | case WD17XX_IRQ_CLR:
|
| 254 | cpu_set_input_line(device->machine->cpu[0], INPUT_LINE_NMI, 0);
|
| 255 | break;
|
| 256 | case WD17XX_DRQ_SET:
|
| 257 | case WD17XX_IRQ_SET:
|
| 258 | if (cpu_get_reg(device->machine->cpu[0], Z80_HALT))
|
| 259 | cpu_set_input_line(device->machine->cpu[0], INPUT_LINE_NMI, PULSE_LINE);
|
| 260 | break;
|
| 261 | }
|
| 262 | }
|
| 263 | |
| 264 | const wd17xx_interface kaypro2_wd1793_interface = { kaypro2_fdc_callback, NULL };
|
| 265 | |
| 266 | /* I have no idea how to set up floppies - these ones have 40 tracks, 40 sectors, 128 bytes per track, single sided */
|
| 267 | |
| 268 | void kaypro2_floppy_getinfo(const mess_device_class *devclass, UINT32 state, union devinfo *info)
|
| 269 | {
|
| 270 | /* floppy */
|
| 271 | switch(state)
|
| 272 | {
|
| 273 | /* --- the following bits of info are returned as 64-bit signed integers --- */
|
| 274 | case MESS_DEVINFO_INT_COUNT: info->i = 2; break;
|
| 275 | |
| 276 | /* --- the following bits of info are returned as pointers to data or functions --- */
|
| 277 | // case MESS_DEVINFO_PTR_LOAD: info->load = DEVICE_IMAGE_LOAD_NAME(kaypro2_floppy); break;
|
| 278 | |
| 279 | /* --- the following bits of info are returned as NULL-terminated strings --- */
|
| 280 | case MESS_DEVINFO_STR_FILE_EXTENSIONS: strcpy(info->s = device_temp_str(), "dsk"); break;
|
| 281 | |
| 282 | default: legacybasicdsk_device_getinfo(devclass, state, info); break;
|
| 283 | }
|
| 284 | }
|
| 285 | |
| 286 | |
| 287 | /***********************************************************
|
| 288 | |
| 289 | Machine
|
| 290 | |
| 291 | ************************************************************/
|
| 292 | |
| 293 | MACHINE_RESET( kayproii )
|
| 294 | {
|
| 295 | kaypro2_z80pio_g = devtag_get_device(machine, "z80pio_g");
|
| 296 | kaypro2_z80pio_s = devtag_get_device(machine, "z80pio_s");
|
| 297 | kaypro2_z80sio = devtag_get_device(machine, "z80sio");
|
| 298 | kaypro2_printer = devtag_get_device(machine, "centronics");
|
| 299 | kaypro2_fdc = devtag_get_device(machine, "wd1793");
|
| 300 | pio_system_w(kaypro2_z80pio_s, 0, 0x80);
|
| 301 | MACHINE_RESET_CALL(kay_kbd);
|
| 302 | }
|
| 303 | |
src/mess/drivers/kaypro.c
| r0 | r4516 | |
| 1 | /*************************************************************************************************
|
| 2 | |
| 3 | |
| 4 | Kaypro 2/83 computer - the very first Kaypro II - 2 full size floppy drives.
|
| 5 | Each disk was single sided, and could hold 191k. The computer had 2x pio
|
| 6 | and 1x sio. One of the sio ports communicated with the keyboard with a coiled
|
| 7 | telephone cord, complete with modular plug on each end. The keyboard carries
|
| 8 | its own Intel 8748 processor and is an intelligent device.
|
| 9 | |
| 10 | There are 2 major problems preventing this driver from working
|
| 11 | |
| 12 | - MESS is not capable of conducting realtime serial communications between devices
|
| 13 | |
| 14 | - MAME's z80sio implementation is lacking important deatures:
|
| 15 | -- cannot change baud rate on the fly
|
| 16 | -- cannot specify different rates for each channel
|
| 17 | -- cannot specify different rates for Receive and Transmit
|
| 18 | -- the callback doesn't appear to support channel B ??
|
| 19 | |
| 20 | |
| 21 | Things that need doing:
|
| 22 | - Floppy disks (I have no knowledge of how to set these up)
|
| 23 | |
| 24 | |
| 25 | **************************************************************************************************/
|
| 26 | |
| 27 | |
| 28 | #include "driver.h"
|
| 29 | #include "cpu/z80/z80.h"
|
| 30 | #include "machine/z80pio.h"
|
| 31 | #include "machine/z80sio.h"
|
| 32 | #include "machine/ctronics.h"
|
| 33 | #include "machine/kay_kbd.h"
|
| 34 | #include "machine/wd17xx.h"
|
| 35 | #include "sound/beep.h"
|
| 36 | #include "includes/kaypro.h"
|
| 37 | |
| 38 | |
| 39 | |
| 40 | /***********************************************************
|
| 41 | |
| 42 | Address Maps
|
| 43 | |
| 44 | ************************************************************/
|
| 45 | |
| 46 | static ADDRESS_MAP_START( kaypro2_map, ADDRESS_SPACE_PROGRAM, 8 )
|
| 47 | AM_RANGE(0x0000, 0x0fff) AM_ROM AM_REGION("maincpu", 0x0000)
|
| 48 | AM_RANGE(0x3000, 0x3fff) AM_RAM AM_REGION("maincpu", 0x3000) AM_BASE(&videoram) AM_SIZE(&videoram_size)
|
| 49 | AM_RANGE(0x4000, 0xffff) AM_RAM AM_REGION("rambank", 0x4000)
|
| 50 | ADDRESS_MAP_END
|
| 51 | |
| 52 | static ADDRESS_MAP_START( kaypro2_io, ADDRESS_SPACE_IO, 8 )
|
| 53 | ADDRESS_MAP_GLOBAL_MASK(0xff)
|
| 54 | ADDRESS_MAP_UNMAP_HIGH
|
| 55 | AM_RANGE(0x00, 0x03) AM_WRITE(kaypro2_baud_a_w)
|
| 56 | AM_RANGE(0x04, 0x07) AM_DEVREADWRITE("z80sio", kaypro2_sio_r, kaypro2_sio_w)
|
| 57 | AM_RANGE(0x08, 0x0b) AM_DEVREADWRITE("z80pio_g", kaypro2_pio_r, kaypro2_pio_w)
|
| 58 | AM_RANGE(0x0c, 0x0f) AM_WRITE(kaypro2_baud_b_w)
|
| 59 | AM_RANGE(0x10, 0x10) AM_DEVREADWRITE("wd1793", wd17xx_status_r, wd17xx_command_w)
|
| 60 | AM_RANGE(0x11, 0x11) AM_DEVREADWRITE("wd1793", wd17xx_track_r, wd17xx_track_w)
|
| 61 | AM_RANGE(0x12, 0x12) AM_DEVREADWRITE("wd1793", wd17xx_sector_r, wd17xx_sector_w)
|
| 62 | AM_RANGE(0x13, 0x13) AM_DEVREADWRITE("wd1793", wd17xx_data_r, wd17xx_data_w)
|
| 63 | AM_RANGE(0x1c, 0x1f) AM_DEVREADWRITE("z80pio_s", kaypro2_pio_r, kaypro2_pio_w)
|
| 64 | ADDRESS_MAP_END
|
| 65 | |
| 66 | |
| 67 | |
| 68 | /***********************************************************
|
| 69 | |
| 70 | Machine Driver
|
| 71 | |
| 72 | ************************************************************/
|
| 73 | |
| 74 | static MACHINE_DRIVER_START( kayproii )
|
| 75 | /* basic machine hardware */
|
| 76 | MDRV_CPU_ADD("maincpu", Z80, 2500000) /* 2.5 MHz */
|
| 77 | MDRV_CPU_PROGRAM_MAP(kaypro2_map, 0)
|
| 78 | MDRV_CPU_IO_MAP(kaypro2_io, 0)
|
| 79 | MDRV_CPU_VBLANK_INT("screen", kay_kbd_interrupt) /* this doesn't actually exist, it is to run the keyboard */
|
| 80 | |
| 81 | MDRV_MACHINE_RESET( kayproii )
|
| 82 | |
| 83 | /* video hardware */
|
| 84 | MDRV_SCREEN_ADD("screen", RASTER)
|
| 85 | MDRV_SCREEN_REFRESH_RATE(60)
|
| 86 | MDRV_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
|
| 87 | MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16)
|
| 88 | MDRV_SCREEN_SIZE(80*7, 24*10)
|
| 89 | MDRV_SCREEN_VISIBLE_AREA(0,80*7-1,0,24*10-1)
|
| 90 | MDRV_PALETTE_LENGTH(2)
|
| 91 | MDRV_PALETTE_INIT(kaypro)
|
| 92 | |
| 93 | MDRV_VIDEO_UPDATE( kayproii )
|
| 94 | |
| 95 | /* sound hardware */
|
| 96 | MDRV_SPEAKER_STANDARD_MONO("mono")
|
| 97 | MDRV_SOUND_ADD("beep", BEEP, 0)
|
| 98 | MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.00)
|
| 99 | |
| 100 | /* devices */
|
| 101 | MDRV_WD179X_ADD("wd1793", kaypro2_wd1793_interface )
|
| 102 | MDRV_CENTRONICS_ADD("centronics", standard_centronics)
|
| 103 | MDRV_Z80PIO_ADD( "z80pio_g", kaypro2_pio_g_intf )
|
| 104 | MDRV_Z80PIO_ADD( "z80pio_s", kaypro2_pio_s_intf )
|
| 105 | MDRV_Z80SIO_ADD( "z80sio", 4800, kaypro2_sio_intf ) /* start at 300 baud */
|
| 106 | MACHINE_DRIVER_END
|
| 107 | |
| 108 | static MACHINE_DRIVER_START( omni2 )
|
| 109 | MDRV_IMPORT_FROM( kayproii )
|
| 110 | MDRV_VIDEO_UPDATE( omni2 )
|
| 111 | MACHINE_DRIVER_END
|
| 112 | |
| 113 | |
| 114 | /***********************************************************
|
| 115 | |
| 116 | Game driver
|
| 117 | |
| 118 | ************************************************************/
|
| 119 | |
| 120 | /* The roms need to be renamed to their part numbers (81-xxx) when known */
|
| 121 | |
| 122 | ROM_START(kayproii)
|
| 123 | /* The board could take a 2716 or 2732 */
|
| 124 | ROM_REGION(0x4000, "maincpu",0)
|
| 125 | ROM_LOAD("81-149.u47", 0x0000, 0x0800, CRC(28264bc1) SHA1(a12afb11a538fc0217e569bc29633d5270dfa51b) )
|
| 126 | |
| 127 | ROM_REGION(0x10000, "rambank",0)
|
| 128 | ROM_FILL( 0, 0x10000, 0xff)
|
| 129 | |
| 130 | ROM_REGION(0x0800, "gfx1",0)
|
| 131 | ROM_LOAD("81-146.u43", 0x0000, 0x0800, CRC(4cc7d206) SHA1(5cb880083b94bd8220aac1f87d537db7cfeb9013) )
|
| 132 | ROM_END
|
| 133 | |
| 134 | ROM_START(kaypro4)
|
| 135 | ROM_REGION(0x4000, "maincpu",0)
|
| 136 | ROM_LOAD("81-232.u47", 0x0000, 0x1000, CRC(4918fb91) SHA1(cd9f45cc3546bcaad7254b92c5d501c40e2ef0b2) )
|
| 137 | |
| 138 | ROM_REGION(0x10000, "rambank",0)
|
| 139 | ROM_FILL( 0, 0x10000, 0xff)
|
| 140 | |
| 141 | ROM_REGION(0x0800, "gfx1",0)
|
| 142 | ROM_LOAD("81-146.u43", 0x0000, 0x0800, CRC(4cc7d206) SHA1(5cb880083b94bd8220aac1f87d537db7cfeb9013) )
|
| 143 | ROM_END
|
| 144 | |
| 145 | ROM_START(omni2)
|
| 146 | ROM_REGION(0x4000, "maincpu",0)
|
| 147 | ROM_LOAD("omni2.u47", 0x0000, 0x1000, CRC(2883f9e0) SHA1(d98c784e62853582d298bf7ca84c75872847ac9b) )
|
| 148 | |
| 149 | ROM_REGION(0x10000, "rambank",0)
|
| 150 | ROM_FILL( 0, 0x10000, 0xff)
|
| 151 | |
| 152 | ROM_REGION(0x0800, "gfx1",0)
|
| 153 | ROM_LOAD("omni2.u43", 0x0000, 0x0800, CRC(049b3381) SHA1(46f1d4f038747ba9048b075dc617361be088f82a) )
|
| 154 | ROM_END
|
| 155 | |
| 156 | ROM_START(kaypro2x)
|
| 157 | ROM_REGION(0x4000, "maincpu",0)
|
| 158 | ROM_LOAD("81-292.u34", 0x0000, 0x2000, CRC(5eb69aec) SHA1(525f955ca002976e2e30ac7ee37e4a54f279fe96) )
|
| 159 | |
| 160 | ROM_REGION(0x10000, "rambank",0)
|
| 161 | ROM_FILL( 0, 0x10000, 0xff)
|
| 162 | |
| 163 | ROM_REGION(0x1000, "gfx1",0)
|
| 164 | ROM_LOAD("81-817.u9", 0x0000, 0x1000, CRC(5f72da5b) SHA1(8a597000cce1a7e184abfb7bebcb564c6bf24fb7) )
|
| 165 | ROM_END
|
| 166 | |
| 167 | ROM_START(kaypro10)
|
| 168 | ROM_REGION(0x4000, "maincpu",0)
|
| 169 | ROM_LOAD("81-302.u42", 0x0000, 0x1000, CRC(3f9bee20) SHA1(b29114a199e70afe46511119b77a662e97b093a0) )
|
| 170 | |
| 171 | ROM_REGION(0x10000, "rambank",0)
|
| 172 | ROM_FILL( 0, 0x10000, 0xff)
|
| 173 | |
| 174 | ROM_REGION(0x1000, "gfx1",0)
|
| 175 | ROM_LOAD("81-817.u31", 0x0000, 0x1000, CRC(5f72da5b) SHA1(8a597000cce1a7e184abfb7bebcb564c6bf24fb7) )
|
| 176 | ROM_END
|
| 177 | |
| 178 | |
| 179 | static SYSTEM_CONFIG_START(kaypro2)
|
| 180 | CONFIG_DEVICE(kaypro2_floppy_getinfo)
|
| 181 | SYSTEM_CONFIG_END
|
| 182 | |
| 183 | /* YEAR NAME PARENT COMPAT MACHINE INPUT INIT CONFIG COMPANY FULLNAME */
|
| 184 | COMP( 1983, kayproii, 0, 0, kayproii, kay_kbd, 0, kaypro2, "Non Linear Systems", "Kaypro II - 2/83" , GAME_NOT_WORKING )
|
| 185 | COMP( 198?, kaypro4, kayproii, 0, kayproii, kay_kbd, 0, kaypro2, "Non Linear Systems", "Kaypro 4 - 4/83" , GAME_NOT_WORKING )
|
| 186 | COMP( 198?, omni2, kayproii, 0, omni2, kay_kbd, 0, kaypro2, "Non Linear Systems", "Omni II" , GAME_NOT_WORKING )
|
| 187 | COMP( 1984, kaypro2x, 0, 0, kayproii, kay_kbd, 0, kaypro2, "Non Linear Systems", "Kaypro 2x" , GAME_NOT_WORKING )
|
| 188 | COMP( 198?, kaypro10, 0, 0, kayproii, kay_kbd, 0, kaypro2, "Non Linear Systems", "Kaypro 10" , GAME_NOT_WORKING )
|