trunk/src/mame/drivers/gticlub.c
| r242816 | r242817 | |
| 242 | 242 | public: |
| 243 | 243 | gticlub_state(const machine_config &mconfig, device_type type, const char *tag) |
| 244 | 244 | : driver_device(mconfig, type, tag), |
| 245 | | m_work_ram(*this, "work_ram"), |
| 246 | 245 | m_maincpu(*this, "maincpu"), |
| 247 | 246 | m_audiocpu(*this, "audiocpu"), |
| 248 | 247 | m_dsp(*this, "dsp"), |
| 249 | 248 | m_dsp2(*this, "dsp2"), |
| 250 | 249 | m_k056800(*this, "k056800"), |
| 251 | 250 | m_adc1038(*this, "adc1038"), |
| 252 | | m_analog0(*this, "AN0"), |
| 253 | | m_analog1(*this, "AN1"), |
| 254 | | m_analog2(*this, "AN2"), |
| 255 | | m_analog3(*this, "AN3"), |
| 256 | 251 | m_eeprom(*this, "eeprom"), |
| 257 | 252 | m_palette(*this, "palette"), |
| 253 | m_konppc(*this, "konppc"), |
| 258 | 254 | m_k001005(*this, "k001005"), |
| 259 | 255 | m_k001006_1(*this, "k001006_1"), |
| 260 | 256 | m_k001006_2(*this, "k001006_2"), |
| 257 | m_k001604_1(*this, "k001604_1"), |
| 258 | m_k001604_2(*this, "k001604_2"), |
| 259 | m_work_ram(*this, "work_ram"), |
| 261 | 260 | m_generic_paletteram_32(*this, "paletteram"), |
| 262 | | m_konppc(*this, "konppc") { } |
| 261 | m_analog0(*this, "AN0"), |
| 262 | m_analog1(*this, "AN1"), |
| 263 | m_analog2(*this, "AN2"), |
| 264 | m_analog3(*this, "AN3"), |
| 265 | m_ports(*this, ports) { } |
| 263 | 266 | |
| 264 | 267 | // TODO: Needs verification on real hardware |
| 265 | 268 | static const int m_sound_timer_usec = 2400; |
| 266 | 269 | |
| 267 | | required_shared_ptr<UINT32> m_work_ram; |
| 268 | 270 | required_device<ppc_device> m_maincpu; |
| 269 | 271 | required_device<cpu_device> m_audiocpu; |
| 270 | 272 | required_device<adsp21062_device> m_dsp; |
| 271 | 273 | optional_device<cpu_device> m_dsp2; |
| 272 | 274 | required_device<k056800_device> m_k056800; |
| 273 | 275 | required_device<adc1038_device> m_adc1038; |
| 274 | | optional_ioport m_analog0, m_analog1, m_analog2, m_analog3; |
| 275 | 276 | required_device<eeprom_serial_93cxx_device> m_eeprom; |
| 276 | 277 | required_device<palette_device> m_palette; |
| 278 | required_device<konppc_device> m_konppc; |
| 277 | 279 | optional_device<k001005_device> m_k001005; |
| 278 | 280 | optional_device<k001006_device> m_k001006_1; |
| 279 | 281 | optional_device<k001006_device> m_k001006_2; |
| 282 | optional_device<k001604_device> m_k001604_1; |
| 283 | optional_device<k001604_device> m_k001604_2; |
| 284 | |
| 285 | required_shared_ptr<UINT32> m_work_ram; |
| 280 | 286 | required_shared_ptr<UINT32> m_generic_paletteram_32; |
| 281 | | required_device<konppc_device> m_konppc; |
| 287 | |
| 288 | optional_ioport m_analog0, m_analog1, m_analog2, m_analog3; |
| 289 | |
| 290 | required_ioport_array<4> m_ports; |
| 291 | |
| 292 | DECLARE_IOPORT_ARRAY(ports); |
| 282 | 293 | |
| 283 | 294 | DECLARE_WRITE32_MEMBER(paletteram32_w); |
| 284 | 295 | DECLARE_READ32_MEMBER(gticlub_k001604_tile_r); |
| r242816 | r242817 | |
| 317 | 328 | private: |
| 318 | 329 | void gticlub_led_setreg(int offset, UINT8 data); |
| 319 | 330 | |
| 320 | | UINT8 gticlub_led_reg[2]; |
| 331 | UINT8 m_gticlub_led_reg[2]; |
| 321 | 332 | emu_timer *m_sound_irq_timer; |
| 322 | 333 | UINT32 *m_sharc_dataram_0; |
| 323 | 334 | UINT32 *m_sharc_dataram_1; |
| r242816 | r242817 | |
| 343 | 354 | |
| 344 | 355 | READ32_MEMBER(gticlub_state::gticlub_k001604_tile_r) |
| 345 | 356 | { |
| 346 | | k001604_device *k001604 = machine().device<k001604_device>(m_konppc->get_cgboard_id() ? "k001604_2" : "k001604_1"); |
| 357 | k001604_device *k001604 = (m_konppc->get_cgboard_id() ? m_k001604_2 : m_k001604_1); |
| 347 | 358 | return k001604->tile_r(space, offset, mem_mask); |
| 348 | 359 | } |
| 349 | 360 | |
| 350 | 361 | WRITE32_MEMBER(gticlub_state::gticlub_k001604_tile_w) |
| 351 | 362 | { |
| 352 | | k001604_device *k001604 = machine().device<k001604_device>(m_konppc->get_cgboard_id() ? "k001604_2" : "k001604_1"); |
| 363 | k001604_device *k001604 = (m_konppc->get_cgboard_id() ? m_k001604_2 : m_k001604_1); |
| 353 | 364 | k001604->tile_w(space, offset, data, mem_mask); |
| 354 | 365 | } |
| 355 | 366 | |
| 356 | 367 | |
| 357 | 368 | READ32_MEMBER(gticlub_state::gticlub_k001604_char_r) |
| 358 | 369 | { |
| 359 | | k001604_device *k001604 = machine().device<k001604_device>(m_konppc->get_cgboard_id() ? "k001604_2" : "k001604_1"); |
| 370 | k001604_device *k001604 = (m_konppc->get_cgboard_id() ? m_k001604_2 : m_k001604_1); |
| 360 | 371 | return k001604->char_r(space, offset, mem_mask); |
| 361 | 372 | } |
| 362 | 373 | |
| 363 | 374 | WRITE32_MEMBER(gticlub_state::gticlub_k001604_char_w) |
| 364 | 375 | { |
| 365 | | k001604_device *k001604 = machine().device<k001604_device>(m_konppc->get_cgboard_id() ? "k001604_2" : "k001604_1"); |
| 376 | k001604_device *k001604 = (m_konppc->get_cgboard_id() ? m_k001604_2 : m_k001604_1); |
| 366 | 377 | k001604->char_w(space, offset, data, mem_mask); |
| 367 | 378 | } |
| 368 | 379 | |
| 369 | 380 | READ32_MEMBER(gticlub_state::gticlub_k001604_reg_r) |
| 370 | 381 | { |
| 371 | | k001604_device *k001604 = machine().device<k001604_device>(m_konppc->get_cgboard_id() ? "k001604_2" : "k001604_1"); |
| 382 | k001604_device *k001604 = (m_konppc->get_cgboard_id() ? m_k001604_2 : m_k001604_1); |
| 372 | 383 | return k001604->reg_r(space, offset, mem_mask); |
| 373 | 384 | } |
| 374 | 385 | |
| 375 | 386 | WRITE32_MEMBER(gticlub_state::gticlub_k001604_reg_w) |
| 376 | 387 | { |
| 377 | | k001604_device *k001604 = machine().device<k001604_device>(m_konppc->get_cgboard_id() ? "k001604_2" : "k001604_1"); |
| 388 | k001604_device *k001604 = (m_konppc->get_cgboard_id() ? m_k001604_2 : m_k001604_1); |
| 378 | 389 | k001604->reg_w(space, offset, data, mem_mask); |
| 379 | 390 | } |
| 380 | 391 | |
| 381 | 392 | |
| 382 | 393 | /******************************************************************/ |
| 383 | 394 | |
| 395 | IOPORT_ARRAY_MEMBER(gticlub_state::ports) { "IN0", "IN1", "IN2", "IN3" }; |
| 396 | |
| 384 | 397 | READ8_MEMBER(gticlub_state::sysreg_r) |
| 385 | 398 | { |
| 386 | | static const char *const portnames[] = { "IN0", "IN1", "IN2", "IN3" }; |
| 387 | 399 | switch (offset) |
| 388 | 400 | { |
| 389 | 401 | case 0: |
| 390 | 402 | case 1: |
| 391 | 403 | case 3: |
| 392 | | return ioport(portnames[offset])->read(); |
| 404 | return m_ports[offset]->read(); |
| 393 | 405 | |
| 394 | 406 | case 2: |
| 395 | 407 | return m_adc1038->sars_read() << 7; |
| r242816 | r242817 | |
| 810 | 822 | |
| 811 | 823 | void gticlub_state::gticlub_led_setreg(int offset, UINT8 data) |
| 812 | 824 | { |
| 813 | | gticlub_led_reg[offset] = data; |
| 825 | m_gticlub_led_reg[offset] = data; |
| 814 | 826 | } |
| 815 | 827 | |
| 816 | 828 | |
| 817 | 829 | VIDEO_START_MEMBER(gticlub_state,gticlub) |
| 818 | 830 | { |
| 819 | | gticlub_led_reg[0] = gticlub_led_reg[1] = 0x7f; |
| 831 | m_gticlub_led_reg[0] = m_gticlub_led_reg[1] = 0x7f; |
| 820 | 832 | /* |
| 821 | 833 | tick = 0; |
| 822 | 834 | debug_tex_page = 0; |
| r242816 | r242817 | |
| 826 | 838 | |
| 827 | 839 | UINT32 gticlub_state::screen_update_gticlub(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect) |
| 828 | 840 | { |
| 829 | | k001604_device *k001604 = machine().device<k001604_device>("k001604_1"); |
| 841 | m_k001604_1->draw_back_layer(bitmap, cliprect); |
| 830 | 842 | |
| 831 | | k001604->draw_back_layer(bitmap, cliprect); |
| 832 | | |
| 833 | 843 | m_k001005->draw(bitmap, cliprect); |
| 834 | 844 | |
| 835 | | k001604->draw_front_layer(screen, bitmap, cliprect); |
| 845 | m_k001604_1->draw_front_layer(screen, bitmap, cliprect); |
| 836 | 846 | |
| 837 | 847 | #if 0 |
| 838 | 848 | tick++; |
| r242816 | r242817 | |
| 884 | 894 | } |
| 885 | 895 | #endif |
| 886 | 896 | |
| 887 | | draw_7segment_led(bitmap, 3, 3, gticlub_led_reg[0]); |
| 888 | | draw_7segment_led(bitmap, 9, 3, gticlub_led_reg[1]); |
| 897 | draw_7segment_led(bitmap, 3, 3, m_gticlub_led_reg[0]); |
| 898 | draw_7segment_led(bitmap, 9, 3, m_gticlub_led_reg[1]); |
| 889 | 899 | |
| 890 | 900 | //machine().device("dsp")->execute().set_input_line(SHARC_INPUT_FLAG1, ASSERT_LINE); |
| 891 | 901 | m_dsp->set_flag_input(1, ASSERT_LINE); |
| r242816 | r242817 | |
| 898 | 908 | |
| 899 | 909 | if (strcmp(screen.tag(), ":lscreen") == 0) |
| 900 | 910 | { |
| 901 | | k001604_device *k001604 = machine().device<k001604_device>("k001604_1"); |
| 902 | 911 | device_t *voodoo = machine().device("voodoo0"); |
| 903 | 912 | |
| 904 | | // k001604->draw_back_layer(bitmap, cliprect); |
| 913 | // m_k001604_1->draw_back_layer(bitmap, cliprect); |
| 905 | 914 | |
| 906 | 915 | voodoo_update(voodoo, bitmap, cliprect); |
| 907 | 916 | |
| 908 | | k001604->draw_front_layer(screen, bitmap, cliprect); |
| 917 | m_k001604_1->draw_front_layer(screen, bitmap, cliprect); |
| 909 | 918 | } |
| 910 | 919 | else if (strcmp(screen.tag(), ":rscreen") == 0) |
| 911 | 920 | { |
| 912 | | k001604_device *k001604 = machine().device<k001604_device>("k001604_2"); |
| 913 | 921 | device_t *voodoo = machine().device("voodoo1"); |
| 914 | 922 | |
| 915 | | // k001604->draw_back_layer(bitmap, cliprect); |
| 923 | // m_k001604_2->draw_back_layer(bitmap, cliprect); |
| 916 | 924 | |
| 917 | 925 | voodoo_update(voodoo, bitmap, cliprect); |
| 918 | 926 | |
| 919 | | k001604->draw_front_layer(screen, bitmap, cliprect); |
| 927 | m_k001604_2->draw_front_layer(screen, bitmap, cliprect); |
| 920 | 928 | } |
| 921 | 929 | |
| 922 | | draw_7segment_led(bitmap, 3, 3, gticlub_led_reg[0]); |
| 923 | | draw_7segment_led(bitmap, 9, 3, gticlub_led_reg[1]); |
| 930 | draw_7segment_led(bitmap, 3, 3, m_gticlub_led_reg[0]); |
| 931 | draw_7segment_led(bitmap, 9, 3, m_gticlub_led_reg[1]); |
| 924 | 932 | |
| 925 | 933 | return 0; |
| 926 | 934 | } |