trunk/src/mess/drivers/hp16500.c
| r242688 | r242689 | |
| 38 | 38 | IRQ 6 = 35c8 (jump 840120) |
| 39 | 39 | IRQ 7 = 35d4 (jump 840120) |
| 40 | 40 | |
| 41 | 16500c: |
| 42 | Same as 16500b, but add: |
| 43 | 53C720 SCSI controller |
| 44 | DP83934 SONIC ethernet |
| 45 | |
| 41 | 46 | ****************************************************************************/ |
| 42 | 47 | |
| 43 | 48 | #include "emu.h" |
| 44 | 49 | #include "cpu/m68000/m68000.h" |
| 45 | 50 | #include "video/mc6845.h" |
| 51 | #include "machine/mc68681.h" |
| 46 | 52 | |
| 53 | #define MAINCPU_TAG "maincpu" |
| 54 | #define CRTC_TAG "crtc" |
| 55 | #define SCREEN_TAG "screen" |
| 56 | #define DUART_TAG "duart" |
| 57 | |
| 47 | 58 | class hp16500_state : public driver_device |
| 48 | 59 | { |
| 49 | 60 | public: |
| 50 | 61 | hp16500_state(const machine_config &mconfig, device_type type, const char *tag) |
| 51 | 62 | : driver_device(mconfig, type, tag), |
| 52 | | m_maincpu(*this, "maincpu") |
| 63 | m_maincpu(*this, MAINCPU_TAG) |
| 53 | 64 | { } |
| 54 | 65 | |
| 55 | 66 | virtual void video_start(); |
| r242688 | r242689 | |
| 69 | 80 | DECLARE_WRITE8_MEMBER (val_w); |
| 70 | 81 | DECLARE_READ32_MEMBER(vbl_state_r); |
| 71 | 82 | DECLARE_WRITE32_MEMBER(vbl_ack_w); |
| 83 | DECLARE_READ16_MEMBER(vbl_ack16_r); |
| 72 | 84 | DECLARE_WRITE16_MEMBER(vbl_ack16_w); |
| 73 | 85 | |
| 74 | 86 | DECLARE_WRITE8_MEMBER(pal_ctrl_w); |
| r242688 | r242689 | |
| 80 | 92 | |
| 81 | 93 | DECLARE_WRITE_LINE_MEMBER(vsync_changed); |
| 82 | 94 | MC6845_UPDATE_ROW(crtc_update_row); |
| 95 | MC6845_UPDATE_ROW(crtc_update_row_1650); |
| 83 | 96 | |
| 84 | 97 | INTERRUPT_GEN_MEMBER(vblank); |
| 85 | 98 | |
| r242688 | r242689 | |
| 97 | 110 | m_maincpu->set_input_line(M68K_IRQ_1, CLEAR_LINE); |
| 98 | 111 | } |
| 99 | 112 | |
| 113 | READ16_MEMBER(hp16500_state::vbl_ack16_r) |
| 114 | { |
| 115 | m_maincpu->set_input_line(M68K_IRQ_1, CLEAR_LINE); |
| 116 | return 0; |
| 117 | } |
| 118 | |
| 100 | 119 | WRITE16_MEMBER(hp16500_state::vbl_ack16_w) |
| 101 | 120 | { |
| 102 | 121 | m_maincpu->set_input_line(M68K_IRQ_1, CLEAR_LINE); |
| r242688 | r242689 | |
| 132 | 151 | } |
| 133 | 152 | } |
| 134 | 153 | |
| 154 | MC6845_UPDATE_ROW( hp16500_state::crtc_update_row_1650 ) |
| 155 | { |
| 156 | UINT32 *p = &bitmap.pix32(y); |
| 157 | int i, pos; |
| 158 | |
| 159 | pos = y * 148; |
| 160 | |
| 161 | for (i = 0; i < x_count; i++) |
| 162 | { |
| 163 | *p++ = m_palette[m_vram[pos+0x00000]]; |
| 164 | *p++ = m_palette[m_vram[pos+0x10000]]; |
| 165 | *p++ = m_palette[m_vram[pos+0x20000]]; |
| 166 | *p++ = m_palette[m_vram[pos+0x30000]]; |
| 167 | pos++; |
| 168 | *p++ = m_palette[m_vram[pos+0x00000]]; |
| 169 | *p++ = m_palette[m_vram[pos+0x10000]]; |
| 170 | *p++ = m_palette[m_vram[pos+0x20000]]; |
| 171 | *p++ = m_palette[m_vram[pos+0x30000]]; |
| 172 | pos++; |
| 173 | } |
| 174 | } |
| 175 | |
| 135 | 176 | WRITE8_MEMBER(hp16500_state::pal_ctrl_w) |
| 136 | 177 | { |
| 137 | 178 | m_clutoffs = data & 0xf; |
| r242688 | r242689 | |
| 164 | 205 | m_mask = (data & 0xff) ^ 0xff; |
| 165 | 206 | } |
| 166 | 207 | |
| 208 | static ADDRESS_MAP_START(hp1650_map, AS_PROGRAM, 16, hp16500_state) |
| 209 | AM_RANGE(0x000000, 0x00ffff) AM_ROM AM_REGION("bios", 0) |
| 210 | |
| 211 | AM_RANGE(0x201000, 0x201001) AM_WRITE(maskval_w) |
| 212 | |
| 213 | AM_RANGE(0x204000, 0x204001) AM_WRITE8(pal_ctrl_w, 0x00ff) |
| 214 | AM_RANGE(0x205000, 0x205001) AM_WRITE8(pal_r_w, 0x00ff) |
| 215 | AM_RANGE(0x206000, 0x206001) AM_WRITE8(pal_g_w, 0x00ff) |
| 216 | AM_RANGE(0x207000, 0x207001) AM_WRITE8(pal_b_w, 0x00ff) |
| 217 | |
| 218 | AM_RANGE(0x20c000, 0x20c001) AM_DEVREADWRITE8(CRTC_TAG, mc6845_device, status_r, address_w, 0x00ff) |
| 219 | AM_RANGE(0x20c002, 0x20c003) AM_DEVREADWRITE8(CRTC_TAG, mc6845_device, register_r, register_w, 0x00ff) |
| 220 | |
| 221 | AM_RANGE(0x20e000, 0x20e001) AM_READWRITE(vbl_ack16_r, vbl_ack16_w) |
| 222 | |
| 223 | AM_RANGE(0x2050fe, 0x2050ff) AM_NOP |
| 224 | AM_RANGE(0x206000, 0x206001) AM_NOP |
| 225 | AM_RANGE(0x20f000, 0x20f001) AM_NOP |
| 226 | |
| 227 | AM_RANGE(0x600000, 0x61ffff) AM_WRITE(vram_w) |
| 228 | AM_RANGE(0x600000, 0x67ffff) AM_READ8(vram_r, 0x00ff) |
| 229 | |
| 230 | AM_RANGE(0x900000, 0x9fffff) AM_RAM |
| 231 | ADDRESS_MAP_END |
| 232 | |
| 233 | // like 1650 but moves main RAM to match 16500a |
| 234 | static ADDRESS_MAP_START(hp1651_map, AS_PROGRAM, 16, hp16500_state) |
| 235 | AM_RANGE(0x000000, 0x00ffff) AM_ROM AM_REGION("bios", 0) |
| 236 | |
| 237 | AM_RANGE(0x201000, 0x201001) AM_WRITE(maskval_w) |
| 238 | |
| 239 | AM_RANGE(0x204000, 0x204001) AM_WRITE8(pal_ctrl_w, 0x00ff) |
| 240 | AM_RANGE(0x205000, 0x205001) AM_WRITE8(pal_r_w, 0x00ff) |
| 241 | AM_RANGE(0x206000, 0x206001) AM_WRITE8(pal_g_w, 0x00ff) |
| 242 | AM_RANGE(0x207000, 0x207001) AM_WRITE8(pal_b_w, 0x00ff) |
| 243 | |
| 244 | AM_RANGE(0x20c000, 0x20c001) AM_DEVREADWRITE8(CRTC_TAG, mc6845_device, status_r, address_w, 0x00ff) |
| 245 | AM_RANGE(0x20c002, 0x20c003) AM_DEVREADWRITE8(CRTC_TAG, mc6845_device, register_r, register_w, 0x00ff) |
| 246 | |
| 247 | AM_RANGE(0x20e000, 0x20e001) AM_READWRITE(vbl_ack16_r, vbl_ack16_w) |
| 248 | |
| 249 | AM_RANGE(0x2050fe, 0x2050ff) AM_NOP |
| 250 | AM_RANGE(0x206000, 0x206001) AM_NOP |
| 251 | AM_RANGE(0x20f000, 0x20f001) AM_NOP |
| 252 | |
| 253 | AM_RANGE(0x600000, 0x61ffff) AM_WRITE(vram_w) |
| 254 | AM_RANGE(0x600000, 0x67ffff) AM_READ8(vram_r, 0x00ff) |
| 255 | |
| 256 | AM_RANGE(0x980000, 0xa7ffff) AM_RAM |
| 257 | ADDRESS_MAP_END |
| 258 | |
| 167 | 259 | static ADDRESS_MAP_START(hp16500a_map, AS_PROGRAM, 16, hp16500_state) |
| 168 | 260 | AM_RANGE(0x000000, 0x00ffff) AM_ROM AM_REGION("bios", 0) |
| 169 | 261 | |
| r242688 | r242689 | |
| 174 | 266 | AM_RANGE(0x206000, 0x206001) AM_WRITE8(pal_g_w, 0x00ff) |
| 175 | 267 | AM_RANGE(0x207000, 0x207001) AM_WRITE8(pal_b_w, 0x00ff) |
| 176 | 268 | |
| 177 | | AM_RANGE(0x20c000, 0x20c001) AM_DEVREADWRITE8("crtc", mc6845_device, status_r, address_w, 0x00ff) |
| 178 | | AM_RANGE(0x20c002, 0x20c003) AM_DEVREADWRITE8("crtc", mc6845_device, register_r, register_w, 0x00ff) |
| 269 | AM_RANGE(0x20c000, 0x20c001) AM_DEVREADWRITE8(CRTC_TAG, mc6845_device, status_r, address_w, 0x00ff) |
| 270 | AM_RANGE(0x20c002, 0x20c003) AM_DEVREADWRITE8(CRTC_TAG, mc6845_device, register_r, register_w, 0x00ff) |
| 179 | 271 | |
| 180 | | AM_RANGE(0x20e000, 0x20e001) AM_WRITE(vbl_ack16_w) |
| 272 | AM_RANGE(0x20e000, 0x20e001) AM_READWRITE(vbl_ack16_r, vbl_ack16_w) |
| 181 | 273 | |
| 182 | 274 | AM_RANGE(0x600000, 0x61ffff) AM_WRITE(vram_w) |
| 183 | 275 | AM_RANGE(0x600000, 0x67ffff) AM_READ8(vram_r, 0x00ff) |
| r242688 | r242689 | |
| 301 | 393 | return 0; |
| 302 | 394 | } |
| 303 | 395 | |
| 396 | static MACHINE_CONFIG_START( hp1650, hp16500_state ) |
| 397 | /* basic machine hardware */ |
| 398 | MCFG_CPU_ADD(MAINCPU_TAG, M68000, 10000000) |
| 399 | MCFG_CPU_PROGRAM_MAP(hp1650_map) |
| 400 | |
| 401 | MCFG_SCREEN_ADD(SCREEN_TAG, RASTER) |
| 402 | MCFG_SCREEN_RAW_PARAMS(25000000, 0x330, 0, 0x250, 0x198, 0, 0x180 ) |
| 403 | MCFG_SCREEN_UPDATE_DEVICE( CRTC_TAG, mc6845_device, screen_update ) |
| 404 | |
| 405 | MCFG_MC6845_ADD(CRTC_TAG, MC6845, SCREEN_TAG, 25000000/9) |
| 406 | MCFG_MC6845_SHOW_BORDER_AREA(false) |
| 407 | MCFG_MC6845_CHAR_WIDTH(8) |
| 408 | MCFG_MC6845_UPDATE_ROW_CB(hp16500_state, crtc_update_row_1650) |
| 409 | MCFG_MC6845_OUT_VSYNC_CB(WRITELINE(hp16500_state, vsync_changed)) |
| 410 | |
| 411 | MCFG_DEVICE_ADD(DUART_TAG, MC68681, 20000000) |
| 412 | |
| 413 | MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") |
| 414 | MACHINE_CONFIG_END |
| 415 | |
| 416 | static MACHINE_CONFIG_START( hp1651, hp16500_state ) |
| 417 | /* basic machine hardware */ |
| 418 | MCFG_CPU_ADD(MAINCPU_TAG, M68000, 10000000) |
| 419 | MCFG_CPU_PROGRAM_MAP(hp1651_map) |
| 420 | |
| 421 | MCFG_SCREEN_ADD(SCREEN_TAG, RASTER) |
| 422 | MCFG_SCREEN_RAW_PARAMS(25000000, 0x330, 0, 0x250, 0x198, 0, 0x180 ) |
| 423 | MCFG_SCREEN_UPDATE_DEVICE( CRTC_TAG, mc6845_device, screen_update ) |
| 424 | |
| 425 | MCFG_MC6845_ADD(CRTC_TAG, MC6845, SCREEN_TAG, 25000000/9) |
| 426 | MCFG_MC6845_SHOW_BORDER_AREA(false) |
| 427 | MCFG_MC6845_CHAR_WIDTH(8) |
| 428 | MCFG_MC6845_UPDATE_ROW_CB(hp16500_state, crtc_update_row_1650) |
| 429 | MCFG_MC6845_OUT_VSYNC_CB(WRITELINE(hp16500_state, vsync_changed)) |
| 430 | |
| 431 | MCFG_DEVICE_ADD(DUART_TAG, MC68681, 20000000) |
| 432 | |
| 433 | MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") |
| 434 | MACHINE_CONFIG_END |
| 435 | |
| 304 | 436 | static MACHINE_CONFIG_START( hp16500a, hp16500_state ) |
| 305 | 437 | /* basic machine hardware */ |
| 306 | | MCFG_CPU_ADD("maincpu", M68000, 10000000) |
| 438 | MCFG_CPU_ADD(MAINCPU_TAG, M68000, 10000000) |
| 307 | 439 | MCFG_CPU_PROGRAM_MAP(hp16500a_map) |
| 308 | 440 | |
| 309 | | MCFG_SCREEN_ADD("screen", RASTER) |
| 310 | | MCFG_SCREEN_RAW_PARAMS(10000000, 0x320, 0, 0x240, 0x19c, 0, 0x170 ) |
| 311 | | MCFG_SCREEN_UPDATE_DEVICE( "crtc", mc6845_device, screen_update ) |
| 441 | MCFG_SCREEN_ADD(SCREEN_TAG, RASTER) |
| 442 | MCFG_SCREEN_RAW_PARAMS(25000000, 0x320, 0, 0x240, 0x19c, 0, 0x170 ) |
| 443 | MCFG_SCREEN_UPDATE_DEVICE( CRTC_TAG, mc6845_device, screen_update ) |
| 312 | 444 | |
| 313 | | MCFG_MC6845_ADD("crtc", MC6845, "screen", 10000000/9) |
| 445 | MCFG_MC6845_ADD(CRTC_TAG, MC6845, SCREEN_TAG, 25000000/9) |
| 314 | 446 | MCFG_MC6845_SHOW_BORDER_AREA(false) |
| 315 | 447 | MCFG_MC6845_CHAR_WIDTH(8) |
| 316 | 448 | MCFG_MC6845_UPDATE_ROW_CB(hp16500_state, crtc_update_row) |
| 317 | 449 | MCFG_MC6845_OUT_VSYNC_CB(WRITELINE(hp16500_state, vsync_changed)) |
| 318 | 450 | |
| 451 | MCFG_DEVICE_ADD(DUART_TAG, MC68681, 20000000) |
| 452 | |
| 319 | 453 | MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") |
| 320 | 454 | MACHINE_CONFIG_END |
| 321 | 455 | |
| 322 | 456 | static MACHINE_CONFIG_START( hp16500, hp16500_state ) |
| 323 | 457 | /* basic machine hardware */ |
| 324 | | MCFG_CPU_ADD("maincpu", M68EC030, 25000000) |
| 458 | MCFG_CPU_ADD(MAINCPU_TAG, M68EC030, 25000000) |
| 325 | 459 | MCFG_CPU_PROGRAM_MAP(hp16500_map) |
| 326 | | MCFG_CPU_VBLANK_INT_DRIVER("screen", hp16500_state, vblank) |
| 460 | MCFG_CPU_VBLANK_INT_DRIVER(SCREEN_TAG, hp16500_state, vblank) |
| 327 | 461 | |
| 328 | | MCFG_SCREEN_ADD("screen", RASTER) |
| 462 | MCFG_SCREEN_ADD(SCREEN_TAG, RASTER) |
| 329 | 463 | MCFG_SCREEN_UPDATE_DRIVER(hp16500_state, screen_update_hp16500) |
| 330 | 464 | MCFG_SCREEN_SIZE(576,384) |
| 331 | 465 | MCFG_SCREEN_VISIBLE_AREA(0, 576-1, 0, 384-1) |
| 332 | 466 | MCFG_SCREEN_REFRESH_RATE(60) |
| 333 | 467 | |
| 468 | MCFG_DEVICE_ADD(DUART_TAG, MC68681, 20000000) |
| 469 | |
| 334 | 470 | MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") |
| 335 | 471 | MACHINE_CONFIG_END |
| 336 | 472 | |
| 337 | 473 | static INPUT_PORTS_START( hp16500 ) |
| 338 | 474 | INPUT_PORTS_END |
| 339 | 475 | |
| 476 | ROM_START( hp1650b ) |
| 477 | ROM_REGION16_BE(0x20000, "bios", 0) |
| 478 | ROM_LOAD16_BYTE( "la1.bin", 0x000000, 0x008000, CRC(7c60e334) SHA1(c3661e4bb58e0951e9c13208b4991f5d9dda633b) ) |
| 479 | ROM_LOAD16_BYTE( "la2.bin", 0x000001, 0x008000, CRC(b0c6fe60) SHA1(a77b2e7098f26af93b0946abe6e89711b3332210) ) |
| 480 | ROM_END |
| 481 | |
| 482 | ROM_START( hp1651b ) |
| 483 | ROM_REGION16_BE(0x20000, "bios", 0) |
| 484 | ROM_LOAD16_BYTE( "u102.bin", 0x000000, 0x008000, CRC(d7e1b091) SHA1(af813cc7ae748aedf1b1d9d522ee2154961315c2) ) |
| 485 | ROM_LOAD16_BYTE( "u103.bin", 0x000001, 0x008000, CRC(f32a37c7) SHA1(8addda59923f64fd9b7e909eb0e3a17cc02bb70e) ) |
| 486 | ROM_END |
| 487 | |
| 340 | 488 | ROM_START( hp165ka0 ) |
| 341 | 489 | ROM_REGION16_BE(0x20000, "bios", 0) |
| 342 | 490 | ROM_LOAD16_BYTE( "16500-80002.bin", 0x000000, 0x008000, CRC(0324b75a) SHA1(837855fce9288139226c914cc0c43061e25b57d2) ) |
| r242688 | r242689 | |
| 351 | 499 | ROM_LOAD32_BYTE( "16500-80017.bin", 0x000003, 0x008000, CRC(e0b1096b) SHA1(426bb9a4756d8087bded4f6b61365d733ffbb09a) ) |
| 352 | 500 | ROM_END |
| 353 | 501 | |
| 354 | | COMP( 1994, hp165ka0, 0, 0, hp16500a, hp16500, driver_device, 0, "Hewlett Packard", "HP 16500a", GAME_NOT_WORKING|GAME_NO_SOUND) |
| 355 | | COMP( 1994, hp16500b, 0, 0, hp16500, hp16500, driver_device, 0, "Hewlett Packard", "HP 16500b", GAME_NOT_WORKING|GAME_NO_SOUND) |
| 502 | COMP( 1989, hp1650b, 0, 0, hp1650, hp16500, driver_device, 0, "Hewlett Packard", "HP 1650b", GAME_NOT_WORKING|GAME_NO_SOUND) |
| 503 | COMP( 1989, hp1651b, 0, 0, hp1651, hp16500, driver_device, 0, "Hewlett Packard", "HP 1651b", GAME_NOT_WORKING|GAME_NO_SOUND) |
| 504 | COMP( 1991, hp165ka0, 0, 0, hp16500a, hp16500, driver_device, 0, "Hewlett Packard", "HP 16500a", GAME_NOT_WORKING|GAME_NO_SOUND) |
| 505 | COMP( 1991, hp16500b, 0, 0, hp16500, hp16500, driver_device, 0, "Hewlett Packard", "HP 16500b", GAME_NOT_WORKING|GAME_NO_SOUND) |