src/mess/machine/special.c
| r2156 | r2157 | |
| 53 | 53 | int dat = 0; |
| 54 | 54 | double level; |
| 55 | 55 | |
| 56 | | if ((specialist_8255_porta & 0x01)==0) dat ^= (readinputport(0) ^ 0xff); |
| 57 | | if ((specialist_8255_porta & 0x02)==0) dat ^= (readinputport(1) ^ 0xff); |
| 58 | | if ((specialist_8255_porta & 0x04)==0) dat ^= (readinputport(2) ^ 0xff); |
| 59 | | if ((specialist_8255_porta & 0x08)==0) dat ^= (readinputport(3) ^ 0xff); |
| 60 | | if ((specialist_8255_porta & 0x10)==0) dat ^= (readinputport(4) ^ 0xff); |
| 61 | | if ((specialist_8255_porta & 0x20)==0) dat ^= (readinputport(5) ^ 0xff); |
| 62 | | if ((specialist_8255_porta & 0x40)==0) dat ^= (readinputport(6) ^ 0xff); |
| 63 | | if ((specialist_8255_porta & 0x80)==0) dat ^= (readinputport(7) ^ 0xff); |
| 64 | | if ((specialist_8255_portc & 0x01)==0) dat ^= (readinputport(8) ^ 0xff); |
| 65 | | if ((specialist_8255_portc & 0x02)==0) dat ^= (readinputport(9) ^ 0xff); |
| 66 | | if ((specialist_8255_portc & 0x04)==0) dat ^= (readinputport(10) ^ 0xff); |
| 67 | | if ((specialist_8255_portc & 0x08)==0) dat ^= (readinputport(11) ^ 0xff); |
| 56 | if ((specialist_8255_porta & 0x01)==0) dat ^= (readinputport(0) ^ 0xff); |
| 57 | if ((specialist_8255_porta & 0x02)==0) dat ^= (readinputport(1) ^ 0xff); |
| 58 | if ((specialist_8255_porta & 0x04)==0) dat ^= (readinputport(2) ^ 0xff); |
| 59 | if ((specialist_8255_porta & 0x08)==0) dat ^= (readinputport(3) ^ 0xff); |
| 60 | if ((specialist_8255_porta & 0x10)==0) dat ^= (readinputport(4) ^ 0xff); |
| 61 | if ((specialist_8255_porta & 0x20)==0) dat ^= (readinputport(5) ^ 0xff); |
| 62 | if ((specialist_8255_porta & 0x40)==0) dat ^= (readinputport(6) ^ 0xff); |
| 63 | if ((specialist_8255_porta & 0x80)==0) dat ^= (readinputport(7) ^ 0xff); |
| 64 | if ((specialist_8255_portc & 0x01)==0) dat ^= (readinputport(8) ^ 0xff); |
| 65 | if ((specialist_8255_portc & 0x02)==0) dat ^= (readinputport(9) ^ 0xff); |
| 66 | if ((specialist_8255_portc & 0x04)==0) dat ^= (readinputport(10) ^ 0xff); |
| 67 | if ((specialist_8255_portc & 0x08)==0) dat ^= (readinputport(11) ^ 0xff); |
| 68 | 68 | |
| 69 | 69 | dat = (dat << 2) ^0xff; |
| 70 | 70 | if (readinputport(12)!=0xff) dat ^= 0x02; |
| r2156 | r2157 | |
| 132 | 132 | READ8_HANDLER( specialist_keyboard_r ) |
| 133 | 133 | { |
| 134 | 134 | return ppi8255_0_r(machine, (offset & 3)); |
| 135 | return 0; |
| 135 | 136 | } |
| 136 | 137 | |
| 137 | 138 | WRITE8_HANDLER( specialist_keyboard_w ) |
| 138 | | { |
| 139 | | ppi8255_0_w(machine, (offset & 3) , data ); |
| 139 | { |
| 140 | ppi8255_0_w(machine, (offset & 3) , data ); |
| 140 | 141 | } |
| 141 | 142 | |
| 142 | 143 | |
| r2156 | r2157 | |
| 160 | 161 | return specimx_color; |
| 161 | 162 | } |
| 162 | 163 | |
| 163 | | |
| 164 | | void specimx_set_bank(int i) { |
| 164 | void specimx_set_bank(int i,int data) { |
| 165 | 165 | memory_install_write8_handler(0, ADDRESS_SPACE_PROGRAM, 0xc000, 0xffbf, 0, 0, SMH_BANK3); |
| 166 | 166 | memory_install_write8_handler(0, ADDRESS_SPACE_PROGRAM, 0xffc0, 0xffdf, 0, 0, SMH_BANK4); |
| 167 | 167 | memory_set_bankptr(4, mess_ram + 0xffc0); |
| 168 | 168 | switch(i) { |
| 169 | | case 0 : |
| 169 | case 0 : |
| 170 | 170 | memory_install_write8_handler(0, ADDRESS_SPACE_PROGRAM, 0x0000, 0x8fff, 0, 0, SMH_BANK1); |
| 171 | 171 | memory_install_write8_handler(0, ADDRESS_SPACE_PROGRAM, 0x9000, 0xbfff, 0, 0, video_memory_w); |
| 172 | 172 | |
| r2156 | r2157 | |
| 188 | 188 | |
| 189 | 189 | memory_set_bankptr(1, memory_region(REGION_CPU1) + 0x10000); |
| 190 | 190 | memory_set_bankptr(2, memory_region(REGION_CPU1) + 0x19000); |
| 191 | | memory_set_bankptr(3, mess_ram + 0xc000); |
| 191 | if (data & 0x80) { |
| 192 | memory_set_bankptr(3, mess_ram + 0x1c000); |
| 193 | } else { |
| 194 | memory_set_bankptr(3, mess_ram + 0xc000); |
| 195 | } |
| 192 | 196 | break; |
| 193 | 197 | } |
| 194 | 198 | } |
| 195 | 199 | WRITE8_HANDLER( specimx_select_bank ) |
| 196 | 200 | { |
| 197 | | specimx_set_bank(offset); |
| 201 | specimx_set_bank(offset, data); |
| 198 | 202 | } |
| 199 | 203 | |
| 200 | | void specimx_fdc_callback(running_machine *machine, wd17xx_state_t event, void *param) |
| 201 | | { |
| 202 | | switch (event) |
| 203 | | { |
| 204 | | case WD17XX_IRQ_CLR: |
| 205 | | case WD17XX_IRQ_SET: |
| 206 | | case WD17XX_DRQ_CLR: |
| 207 | | case WD17XX_DRQ_SET: |
| 208 | | /* do nothing */ |
| 209 | | break; |
| 210 | | } |
| 211 | | } |
| 212 | | |
| 213 | 204 | DRIVER_INIT(specimx) |
| 214 | 205 | { |
| 215 | | memset(mess_ram,0,256*1024); |
| 206 | memset(mess_ram,0,128*1024); |
| 216 | 207 | } |
| 217 | 208 | |
| 218 | 209 | static const struct pit8253_config specimx_pit8253_intf = |
| r2156 | r2157 | |
| 239 | 230 | |
| 240 | 231 | MACHINE_START( specimx ) |
| 241 | 232 | { |
| 242 | | wd17xx_init(machine, WD_TYPE_1793, specimx_fdc_callback, NULL); |
| 233 | wd17xx_init(machine, WD_TYPE_1793, NULL , NULL); |
| 243 | 234 | wd17xx_set_density (DEN_FM_HI); |
| 244 | 235 | pit8253_init(1, &specimx_pit8253_intf); |
| 245 | 236 | } |
| r2156 | r2157 | |
| 247 | 238 | MACHINE_RESET( specimx ) |
| 248 | 239 | { |
| 249 | 240 | ppi8255_init(&specialist_ppi8255_interface); |
| 250 | | specimx_set_bank(2); // Initiali load ROM disk |
| 241 | specimx_set_bank(2,0x00); // Initiali load ROM disk |
| 251 | 242 | specimx_color = 0x70; |
| 252 | 243 | wd17xx_reset(); |
| 253 | 244 | wd17xx_set_side(0); |
| r2156 | r2157 | |
| 257 | 248 | pit8253_0_gate_w(machine, 2, 0); |
| 258 | 249 | } |
| 259 | 250 | |
| 260 | | READ8_HANDLER ( specimx_disk_data_r ) |
| 261 | | { |
| 262 | | switch(offset) { |
| 263 | | case 0 : |
| 264 | | return wd17xx_status_r(machine, offset); |
| 265 | | case 1 : |
| 266 | | return wd17xx_track_r(machine, offset); |
| 267 | | case 2 : |
| 268 | | return wd17xx_sector_r(machine, offset); |
| 269 | | case 3 : |
| 270 | | return wd17xx_data_r(machine, offset); |
| 271 | | } |
| 272 | | return 0; |
| 273 | | } |
| 274 | | WRITE8_HANDLER( specimx_disk_data_w ) |
| 275 | | { |
| 276 | | switch(offset) { |
| 277 | | case 0 : |
| 278 | | wd17xx_command_w(machine, offset, data);break; |
| 279 | | case 1 : |
| 280 | | wd17xx_track_w (machine, offset, data);break; |
| 281 | | case 2 : |
| 282 | | wd17xx_sector_w (machine, offset, data);break; |
| 283 | | case 3 : |
| 284 | | wd17xx_data_w (machine, offset, data);break; |
| 285 | | } |
| 286 | | } |
| 287 | | |
| 288 | 251 | READ8_HANDLER ( specimx_disk_ctrl_r ) |
| 289 | 252 | { |
| 290 | 253 | return 0xff; |
| r2156 | r2157 | |
| 344 | 307 | |
| 345 | 308 | pit8253_0_w(machine,offset,data); |
| 346 | 309 | } |
| 310 | |
| 311 | |
| 312 | /* |
| 313 | Erik |
| 314 | */ |
| 315 | static UINT8 RR_register; |
| 316 | static UINT8 RC_register; |
| 317 | |
| 318 | void erik_set_bank(void) { |
| 319 | UINT8 bank1 = (RR_register & 3); |
| 320 | UINT8 bank2 = ((RR_register >> 2) & 3); |
| 321 | UINT8 bank3 = ((RR_register >> 4) & 3); |
| 322 | UINT8 bank4 = ((RR_register >> 6) & 3); |
| 323 | |
| 324 | memory_install_write8_handler(0, ADDRESS_SPACE_PROGRAM, 0x0000, 0x3fff, 0, 0, SMH_BANK1); |
| 325 | memory_install_write8_handler(0, ADDRESS_SPACE_PROGRAM, 0x4000, 0x8fff, 0, 0, SMH_BANK2); |
| 326 | memory_install_write8_handler(0, ADDRESS_SPACE_PROGRAM, 0x9000, 0xbfff, 0, 0, SMH_BANK3); |
| 327 | memory_install_write8_handler(0, ADDRESS_SPACE_PROGRAM, 0xc000, 0xefff, 0, 0, SMH_BANK4); |
| 328 | memory_install_write8_handler(0, ADDRESS_SPACE_PROGRAM, 0xf000, 0xf7ff, 0, 0, SMH_BANK5); |
| 329 | memory_install_write8_handler(0, ADDRESS_SPACE_PROGRAM, 0xf800, 0xffff, 0, 0, SMH_BANK6); |
| 330 | |
| 331 | switch(bank1) { |
| 332 | case 1: |
| 333 | case 2: |
| 334 | case 3: |
| 335 | memory_set_bankptr(1, mess_ram + 0x10000*(bank1-1)); |
| 336 | break; |
| 337 | case 0: |
| 338 | memory_install_write8_handler(0, ADDRESS_SPACE_PROGRAM, 0x0000, 0x3fff, 0, 0, SMH_UNMAP); |
| 339 | memory_set_bankptr(1, memory_region(REGION_CPU1) + 0x10000); |
| 340 | break; |
| 341 | } |
| 342 | switch(bank2) { |
| 343 | case 1: |
| 344 | case 2: |
| 345 | case 3: |
| 346 | memory_set_bankptr(2, mess_ram + 0x10000*(bank2-1) + 0x4000); |
| 347 | break; |
| 348 | case 0: |
| 349 | memory_install_write8_handler(0, ADDRESS_SPACE_PROGRAM, 0x4000, 0x8fff, 0, 0, SMH_UNMAP); |
| 350 | memory_set_bankptr(2, memory_region(REGION_CPU1) + 0x14000); |
| 351 | break; |
| 352 | } |
| 353 | switch(bank3) { |
| 354 | case 1: |
| 355 | case 2: |
| 356 | case 3: |
| 357 | memory_set_bankptr(3, mess_ram + 0x10000*(bank3-1) + 0x9000); |
| 358 | break; |
| 359 | case 0: |
| 360 | memory_install_write8_handler(0, ADDRESS_SPACE_PROGRAM, 0x9000, 0xbfff, 0, 0, SMH_UNMAP); |
| 361 | memory_set_bankptr(3, memory_region(REGION_CPU1) + 0x19000); |
| 362 | break; |
| 363 | } |
| 364 | switch(bank4) { |
| 365 | case 1: |
| 366 | case 2: |
| 367 | case 3: |
| 368 | memory_set_bankptr(4, mess_ram + 0x10000*(bank4-1) + 0x0c000); |
| 369 | memory_set_bankptr(5, mess_ram + 0x10000*(bank4-1) + 0x0f000); |
| 370 | memory_set_bankptr(6, mess_ram + 0x10000*(bank4-1) + 0x0f800); |
| 371 | break; |
| 372 | case 0: |
| 373 | memory_install_write8_handler(0, ADDRESS_SPACE_PROGRAM, 0xc000, 0xefff, 0, 0, SMH_UNMAP); |
| 374 | memory_set_bankptr(4, memory_region(REGION_CPU1) + 0x1c000); |
| 375 | memory_install_write8_handler(0, ADDRESS_SPACE_PROGRAM, 0xf000, 0xf7ff, 0, 0, SMH_UNMAP); |
| 376 | memory_install_read8_handler (0, ADDRESS_SPACE_PROGRAM, 0xf000, 0xf7ff, 0, 0, SMH_NOP); |
| 377 | memory_install_write8_handler(0, ADDRESS_SPACE_PROGRAM, 0xf800, 0xffff, 0, 0, specialist_keyboard_w); |
| 378 | memory_install_read8_handler (0, ADDRESS_SPACE_PROGRAM, 0xf800, 0xffff, 0, 0, specialist_keyboard_r); |
| 379 | break; |
| 380 | } |
| 381 | } |
| 382 | |
| 383 | extern UINT8 erik_color_1; |
| 384 | extern UINT8 erik_color_2; |
| 385 | extern UINT8 erik_background; |
| 386 | |
| 387 | DRIVER_INIT(erik) |
| 388 | { |
| 389 | memset(mess_ram,0,192*1024); |
| 390 | erik_color_1 = 0; |
| 391 | erik_color_2 = 0; |
| 392 | erik_background = 0; |
| 393 | } |
| 394 | |
| 395 | MACHINE_START( erik ) |
| 396 | { |
| 397 | wd17xx_init(machine, WD_TYPE_1793, NULL , NULL); |
| 398 | } |
| 399 | |
| 400 | MACHINE_RESET( erik ) |
| 401 | { |
| 402 | ppi8255_init(&specialist_ppi8255_interface); |
| 403 | wd17xx_reset(); |
| 404 | |
| 405 | RR_register = 0x00; |
| 406 | RC_register = 0x00; |
| 407 | erik_set_bank(); |
| 408 | } |
| 409 | |
| 410 | READ8_HANDLER ( erik_rr_reg_r ) |
| 411 | { |
| 412 | return RR_register; |
| 413 | } |
| 414 | WRITE8_HANDLER( erik_rr_reg_w ) |
| 415 | { |
| 416 | RR_register = data; |
| 417 | erik_set_bank(); |
| 418 | } |
| 419 | |
| 420 | READ8_HANDLER ( erik_rc_reg_r ) |
| 421 | { |
| 422 | return RC_register; |
| 423 | } |
| 424 | |
| 425 | |
| 426 | WRITE8_HANDLER( erik_rc_reg_w ) |
| 427 | { |
| 428 | RC_register = data; |
| 429 | erik_color_1 = RC_register & 7; |
| 430 | erik_color_2 = (RC_register >> 3) & 7; |
| 431 | erik_background = ((RC_register >> 6 ) & 1) + ((RC_register >> 7 ) & 1) * 4; |
| 432 | } |
| 433 | |
| 434 | READ8_HANDLER ( erik_disk_reg_r ) { |
| 435 | return 0xff; |
| 436 | } |
| 437 | |
| 438 | WRITE8_HANDLER( erik_disk_reg_w ) { |
| 439 | wd17xx_set_side (data & 1); |
| 440 | wd17xx_set_drive((data >> 1) & 1); |
| 441 | if((data >>2) & 1) { |
| 442 | wd17xx_set_density (DEN_FM_LO); |
| 443 | } else { |
| 444 | wd17xx_set_density (DEN_FM_HI); |
| 445 | } |
| 446 | } |
src/mess/drivers/special.c
| r2156 | r2157 | |
| 29 | 29 | AM_RANGE( 0xf800, 0xffff ) AM_READWRITE(specialist_keyboard_r,specialist_keyboard_w) // 8255 for keyboard |
| 30 | 30 | ADDRESS_MAP_END |
| 31 | 31 | |
| 32 | static ADDRESS_MAP_START(specialp_mem, ADDRESS_SPACE_PROGRAM, 8) |
| 33 | AM_RANGE( 0x0000, 0x2fff ) AM_RAMBANK(1) // First bank |
| 34 | AM_RANGE( 0x3000, 0x7fff ) AM_RAM // RAM |
| 35 | AM_RANGE( 0x8000, 0xbfff ) AM_RAM AM_BASE(&specialist_video_ram) // Video RAM |
| 36 | AM_RANGE( 0xc000, 0xf000 ) AM_ROM // System ROM |
| 37 | AM_RANGE( 0xf000, 0xf700 ) AM_NOP |
| 38 | AM_RANGE( 0xf800, 0xffff ) AM_READWRITE(specialist_keyboard_r,specialist_keyboard_w) // 8255 for keyboard |
| 39 | ADDRESS_MAP_END |
| 32 | 40 | |
| 41 | static ADDRESS_MAP_START(erik_mem, ADDRESS_SPACE_PROGRAM, 8) |
| 42 | AM_RANGE( 0x0000, 0x3fff ) AM_READWRITE(SMH_BANK1, SMH_BANK1) |
| 43 | AM_RANGE( 0x4000, 0x8fff ) AM_READWRITE(SMH_BANK2, SMH_BANK2) |
| 44 | AM_RANGE( 0x9000, 0xbfff ) AM_READWRITE(SMH_BANK3, SMH_BANK3) |
| 45 | AM_RANGE( 0xc000, 0xefff ) AM_READWRITE(SMH_BANK4, SMH_BANK4) |
| 46 | AM_RANGE( 0xf000, 0xf7ff ) AM_READWRITE(SMH_BANK5, SMH_BANK5) |
| 47 | AM_RANGE( 0xf800, 0xffff ) AM_READWRITE(SMH_BANK6, SMH_BANK6) |
| 48 | ADDRESS_MAP_END |
| 49 | |
| 50 | static ADDRESS_MAP_START( erik_io_map, ADDRESS_SPACE_IO, 8 ) |
| 51 | ADDRESS_MAP_GLOBAL_MASK(0xff) |
| 52 | AM_RANGE(0xf1, 0xf1) AM_READWRITE(erik_rr_reg_r, erik_rr_reg_w) |
| 53 | AM_RANGE(0xf2, 0xf2) AM_READWRITE(erik_rc_reg_r, erik_rc_reg_w) |
| 54 | AM_RANGE(0xf3, 0xf3) AM_READWRITE(erik_disk_reg_r, erik_disk_reg_w) |
| 55 | AM_RANGE(0xf4, 0xf4) AM_READWRITE(wd17xx_status_r, wd17xx_command_w) |
| 56 | AM_RANGE(0xf5, 0xf5) AM_READWRITE(wd17xx_track_r, wd17xx_track_w) |
| 57 | AM_RANGE(0xf6, 0xf6) AM_READWRITE(wd17xx_sector_r, wd17xx_sector_w) |
| 58 | AM_RANGE(0xf7, 0xf7) AM_READWRITE(wd17xx_data_r, wd17xx_data_w) |
| 59 | ADDRESS_MAP_END |
| 60 | |
| 33 | 61 | static ADDRESS_MAP_START(specimx_mem, ADDRESS_SPACE_PROGRAM, 8) |
| 62 | ADDRESS_MAP_UNMAP_HIGH |
| 34 | 63 | AM_RANGE( 0x0000, 0x8fff ) AM_READWRITE(SMH_BANK1, SMH_BANK1) |
| 35 | 64 | AM_RANGE( 0x9000, 0xbfff ) AM_READWRITE(SMH_BANK2, SMH_BANK2) |
| 36 | 65 | AM_RANGE( 0xc000, 0xffbf ) AM_READWRITE(SMH_BANK3, SMH_BANK3) |
| 37 | 66 | AM_RANGE( 0xffc0, 0xffdf ) AM_READWRITE(SMH_BANK4, SMH_BANK4) |
| 38 | 67 | AM_RANGE( 0xffe0, 0xffe3 ) AM_READWRITE(specialist_keyboard_r,specialist_keyboard_w) // 8255 for keyboard |
| 39 | 68 | AM_RANGE( 0xffe4, 0xffe7 ) AM_RAM //external 8255 |
| 40 | | AM_RANGE( 0xffe8, 0xffeb ) AM_READWRITE(specimx_disk_data_r,specimx_disk_data_w) |
| 69 | AM_RANGE( 0xffe8, 0xffe8 ) AM_READWRITE(wd17xx_status_r,wd17xx_command_w) |
| 70 | AM_RANGE( 0xffe9, 0xffe9 ) AM_READWRITE(wd17xx_track_r,wd17xx_track_w) |
| 71 | AM_RANGE( 0xffea, 0xffea ) AM_READWRITE(wd17xx_sector_r,wd17xx_sector_w) |
| 72 | AM_RANGE( 0xffea, 0xffeb ) AM_READWRITE(wd17xx_data_r,wd17xx_data_w) |
| 41 | 73 | AM_RANGE( 0xffec, 0xffef ) AM_READWRITE(pit8253_0_r, specimx_sound_w) |
| 42 | 74 | AM_RANGE( 0xfff0, 0xfff3 ) AM_READWRITE(specimx_disk_ctrl_r, specimx_disk_ctrl_w) |
| 43 | 75 | AM_RANGE( 0xfff8, 0xfff8 ) AM_READWRITE(specimx_video_color_r,specimx_video_color_w) |
| r2156 | r2157 | |
| 282 | 314 | /* Machine driver */ |
| 283 | 315 | static MACHINE_DRIVER_START( special ) |
| 284 | 316 | /* basic machine hardware */ |
| 285 | | MDRV_CPU_ADD(8080, 2000000) |
| 317 | MDRV_CPU_ADD_TAG("main", 8080, 2000000) |
| 286 | 318 | MDRV_CPU_PROGRAM_MAP(specialist_mem, 0) |
| 287 | 319 | MDRV_MACHINE_RESET( special ) |
| 288 | 320 | |
| r2156 | r2157 | |
| 307 | 339 | MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.00) |
| 308 | 340 | MACHINE_DRIVER_END |
| 309 | 341 | |
| 342 | static MACHINE_DRIVER_START( specialp ) |
| 343 | /* basic machine hardware */ |
| 344 | MDRV_IMPORT_FROM(special) |
| 345 | MDRV_CPU_MODIFY("main") |
| 346 | MDRV_CPU_PROGRAM_MAP(specialp_mem, 0) |
| 347 | |
| 348 | MDRV_SCREEN_MODIFY("main") |
| 349 | MDRV_VIDEO_START(specialp) |
| 350 | MDRV_VIDEO_UPDATE(specialp) |
| 351 | MDRV_SCREEN_SIZE(512, 256) |
| 352 | MDRV_SCREEN_VISIBLE_AREA(0, 512-1, 0, 256-1) |
| 353 | MACHINE_DRIVER_END |
| 310 | 354 | |
| 311 | 355 | static MACHINE_DRIVER_START( specimx ) |
| 312 | | MDRV_CPU_ADD(8080, 2000000) |
| 313 | | MDRV_CPU_PROGRAM_MAP(specimx_mem, 0) |
| 356 | MDRV_IMPORT_FROM(special) |
| 357 | MDRV_CPU_MODIFY("main") |
| 358 | MDRV_CPU_PROGRAM_MAP(specimx_mem, 0) |
| 314 | 359 | |
| 315 | | MDRV_MACHINE_START ( specimx ) |
| 316 | | MDRV_MACHINE_RESET ( specimx ) |
| 317 | | |
| 360 | MDRV_MACHINE_START ( specimx ) |
| 361 | MDRV_MACHINE_RESET ( specimx ) |
| 362 | |
| 363 | /* video hardware */ |
| 364 | MDRV_SCREEN_MODIFY("main") |
| 365 | MDRV_PALETTE_LENGTH(16) |
| 366 | MDRV_PALETTE_INIT( specimx ) |
| 367 | |
| 368 | MDRV_VIDEO_START(specimx) |
| 369 | MDRV_VIDEO_UPDATE(specimx) |
| 370 | |
| 371 | /* audio hardware */ |
| 372 | MDRV_SOUND_ADD(CUSTOM, 0) |
| 373 | MDRV_SOUND_CONFIG(specimx_sound_interface) |
| 374 | MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.00) |
| 375 | MACHINE_DRIVER_END |
| 376 | |
| 377 | static MACHINE_DRIVER_START( erik ) |
| 378 | /* basic machine hardware */ |
| 379 | MDRV_CPU_ADD(Z80, 4000000) |
| 380 | MDRV_CPU_PROGRAM_MAP(erik_mem, 0) |
| 381 | MDRV_CPU_IO_MAP(erik_io_map, 0) |
| 382 | |
| 383 | MDRV_MACHINE_RESET( erik ) |
| 384 | MDRV_MACHINE_START( erik ) |
| 318 | 385 | |
| 319 | 386 | /* video hardware */ |
| 320 | 387 | MDRV_SCREEN_ADD("main", RASTER) |
| r2156 | r2157 | |
| 323 | 390 | MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16) |
| 324 | 391 | MDRV_SCREEN_SIZE(384, 256) |
| 325 | 392 | MDRV_SCREEN_VISIBLE_AREA(0, 384-1, 0, 256-1) |
| 326 | | MDRV_PALETTE_LENGTH(16) |
| 327 | | MDRV_PALETTE_INIT( specimx ) |
| 393 | MDRV_PALETTE_LENGTH(8) |
| 394 | MDRV_PALETTE_INIT(erik) |
| 328 | 395 | |
| 329 | | MDRV_VIDEO_START(specimx) |
| 330 | | MDRV_VIDEO_UPDATE(specimx) |
| 331 | | |
| 396 | MDRV_VIDEO_START(erik) |
| 397 | MDRV_VIDEO_UPDATE(erik) |
| 332 | 398 | /* audio hardware */ |
| 333 | 399 | MDRV_SPEAKER_STANDARD_MONO("mono") |
| 334 | 400 | MDRV_SOUND_ADD(DAC, 0) |
| 335 | 401 | MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.00) |
| 336 | 402 | MDRV_SOUND_ADD(WAVE, 0) |
| 337 | 403 | MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.00) |
| 338 | | MDRV_SOUND_ADD(CUSTOM, 0) |
| 339 | | MDRV_SOUND_CONFIG(specimx_sound_interface) |
| 340 | | MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.00) |
| 341 | 404 | MACHINE_DRIVER_END |
| 342 | 405 | |
| 343 | 406 | /* ROM definition */ |
| 344 | 407 | ROM_START( special ) |
| 345 | 408 | ROM_REGION( 0x10000, REGION_CPU1, ROMREGION_ERASEFF ) |
| 346 | | ROM_SYSTEM_BIOS(0, "1st", "1st rev.") |
| 347 | | ROMX_LOAD( "special1.rom", 0xc000, 0x1000, CRC(217414BD) SHA1(345cd1410fbca8f75421d12d1419f27f81cd35d6), ROM_BIOS(1)) |
| 348 | | ROM_SYSTEM_BIOS(1, "2nd", "2nd rev.") |
| 349 | | ROMX_LOAD( "special2.rom", 0xc000, 0x1000, CRC(FEDFBC37) SHA1(b79474833bbf558c39493dec3e8eabf9885c7c7c), ROM_BIOS(2)) |
| 409 | ROM_SYSTEM_BIOS(0, "2nd", "2nd rev.") |
| 410 | ROMX_LOAD( "special2.rom", 0xc000, 0x1000, CRC(FEDFBC37) SHA1(b79474833bbf558c39493dec3e8eabf9885c7c7c), ROM_BIOS(1)) |
| 411 | ROM_SYSTEM_BIOS(1, "1st", "1st rev.") |
| 412 | ROMX_LOAD( "special1.rom", 0xc000, 0x1000, CRC(217414BD) SHA1(345cd1410fbca8f75421d12d1419f27f81cd35d6), ROM_BIOS(2)) |
| 350 | 413 | ROM_SYSTEM_BIOS(2, "3rd", "3rd rev.") |
| 351 | 414 | ROMX_LOAD( "special3.rom", 0xc000, 0x1400, CRC(85F08629) SHA1(69b00b897a32087133076886d0d9d83ed5944469), ROM_BIOS(3)) |
| 352 | 415 | ROM_SYSTEM_BIOS(3, "7th", "7th rev.") |
| 353 | 416 | ROMX_LOAD( "special7.rom", 0xc000, 0x2000, CRC(FBE3438A) SHA1(83ca8f77f908d1c2f5c486c27d587d738bdde922), ROM_BIOS(4)) |
| 354 | 417 | ROM_END |
| 355 | 418 | |
| 419 | ROM_START( specialp ) |
| 420 | ROM_REGION( 0x10000, REGION_CPU1, ROMREGION_ERASEFF ) |
| 421 | ROM_LOAD( "special6.rom", 0xc000, 0x1000, CRC(F0C5A0AC)) |
| 422 | ROM_END |
| 423 | |
| 356 | 424 | ROM_START( lik ) |
| 357 | 425 | ROM_REGION( 0x10000, REGION_CPU1, ROMREGION_ERASEFF ) |
| 358 | 426 | ROM_SYSTEM_BIOS(0, "1st", "1st rev.") |
| r2156 | r2157 | |
| 362 | 430 | ROM_END |
| 363 | 431 | |
| 364 | 432 | ROM_START( specimx ) |
| 365 | | ROM_REGION( 0x1b800, REGION_CPU1, ROMREGION_ERASEFF ) |
| 366 | | ROM_LOAD( "specimx.rom", 0x10000, 0xb800, CRC(DB68F9B1) SHA1(c79888449f8a605267ec3e10dcc8e6e6f43b3a95)) |
| 433 | ROM_REGION( 0x20000, REGION_CPU1, ROMREGION_ERASEFF ) |
| 434 | ROM_SYSTEM_BIOS(0, "FOS", "ROM FOS") |
| 435 | ROMX_LOAD( "specimx.rom", 0x10000, 0xb800, CRC(DB68F9B1) SHA1(c79888449f8a605267ec3e10dcc8e6e6f43b3a95), ROM_BIOS(1)) |
| 436 | ROM_SYSTEM_BIOS(1, "NC", "NC") |
| 437 | ROMX_LOAD( "ncrdy.rom", 0x10000, 0x10000, CRC(5D04C522) SHA1(d7daa7fe14cd8e0c6f87fd6453ec3e94ea2c259f) ,ROM_BIOS(2)) |
| 367 | 438 | ROM_END |
| 368 | 439 | |
| 440 | ROM_START( erik ) |
| 441 | ROM_REGION( 0x20000, REGION_CPU1, ROMREGION_ERASEFF ) |
| 442 | ROM_LOAD( "erik.bin", 0x10000, 0x10000, CRC(6F3208F4) SHA1(41f6e2763ef60d3c7214c98893e580d25346fa2d)) |
| 443 | ROM_END |
| 444 | |
| 369 | 445 | static void special_cassette_getinfo(const mess_device_class *devclass, UINT32 state, union devinfo *info) |
| 370 | 446 | { |
| 371 | 447 | /* cassette */ |
| r2156 | r2157 | |
| 402 | 478 | SYSTEM_CONFIG_END |
| 403 | 479 | |
| 404 | 480 | SYSTEM_CONFIG_START(specimx) |
| 405 | | CONFIG_RAM_DEFAULT(256 * 1024) |
| 481 | CONFIG_RAM_DEFAULT(128 * 1024) |
| 406 | 482 | CONFIG_DEVICE(special_cassette_getinfo) |
| 407 | 483 | CONFIG_DEVICE(specimx_floppy_getinfo); |
| 408 | 484 | SYSTEM_CONFIG_END |
| 409 | 485 | |
| 486 | SYSTEM_CONFIG_START(erik) |
| 487 | CONFIG_RAM_DEFAULT(192 * 1024) |
| 488 | CONFIG_DEVICE(special_cassette_getinfo) |
| 489 | CONFIG_DEVICE(specimx_floppy_getinfo); |
| 490 | SYSTEM_CONFIG_END |
| 491 | |
| 410 | 492 | /* Driver */ |
| 411 | 493 | |
| 412 | 494 | /* YEAR NAME PARENT COMPAT MACHINE INPUT INIT CONFIG COMPANY FULLNAME FLAGS */ |
| 413 | | COMP( 1985, special, 0, 0, special, special, special, special, "", "Specialist", 0) |
| 495 | COMP( 1985, special, 0, 0, special, special, special, special, "", "Specialist", 0) |
| 496 | COMP( 1985, specialp, special,0, specialp, special, special, special, "", "Specialist + hires graph", 0) |
| 414 | 497 | COMP( 1985, lik, special,0, special, special, special, special, "", "Lik", 0) |
| 415 | | COMP( 1985, specimx, special,0, specimx, specimx, specimx, specimx, "", "Specialist MX", 0) |
| 498 | COMP( 1985, specimx, special,0, specimx, specimx, specimx, specimx, "", "Specialist MX", 0) |
| 499 | COMP( 1994, erik, special,0, erik, special, erik, erik, "", "Erik", 0) |
| 500 | |
| 501 | |