trunk/src/mame/drivers/cobra.c
| r17591 | r17592 | |
| 207 | 207 | |
| 208 | 208 | 0x400f4: xxx----- -------- -------- -------- Texture select (0-3) |
| 209 | 209 | |
| 210 | | xxx----- -------- -------- -------- ? |
| 211 | | |
| 212 | 210 | 0x40114: -------- ----x--- -------- -------- Scissor enable |
| 213 | 211 | |
| 214 | 212 | 0x40138: Set to 0x88800000 (0xe0) by mode_viewclip() |
| r17591 | r17592 | |
| 324 | 322 | #include "video/polynew.h" |
| 325 | 323 | #include "video/rgbgen.h" |
| 326 | 324 | #include "sound/rf5c400.h" |
| 325 | #include "sound/dmadac.h" |
| 327 | 326 | |
| 328 | 327 | #define GFXFIFO_IN_VERBOSE 0 |
| 329 | 328 | #define GFXFIFO_OUT_VERBOSE 0 |
| r17591 | r17592 | |
| 337 | 336 | |
| 338 | 337 | #define ENABLE_BILINEAR 1 |
| 339 | 338 | |
| 339 | #define DMA_SOUND_BUFFER_SIZE 16000 |
| 340 | 340 | |
| 341 | |
| 341 | 342 | /* Cobra Renderer class */ |
| 342 | 343 | |
| 343 | 344 | struct cobra_polydata |
| r17591 | r17592 | |
| 708 | 709 | |
| 709 | 710 | bool m_has_psac; |
| 710 | 711 | |
| 712 | INT16 *m_sound_dma_buffer_l; |
| 713 | INT16 *m_sound_dma_buffer_r; |
| 714 | UINT32 m_sound_dma_ptr; |
| 715 | |
| 716 | dmadac_sound_device *m_dmadac[2]; |
| 717 | |
| 711 | 718 | DECLARE_DRIVER_INIT(racjamdx); |
| 712 | 719 | DECLARE_DRIVER_INIT(bujutsu); |
| 713 | 720 | DECLARE_DRIVER_INIT(cobra); |
| r17591 | r17592 | |
| 1616 | 1623 | // Interrupts: |
| 1617 | 1624 | |
| 1618 | 1625 | // Serial Transmit JVS |
| 1619 | | // DMA0: Sound-related (TMS57002?) |
| 1626 | // DMA0: DMA-driven DAC |
| 1620 | 1627 | // DMA2: SCSI? |
| 1621 | 1628 | // DMA3: JVS |
| 1622 | 1629 | // External IRQ0 M2SFIFO |
| r17591 | r17592 | |
| 1913 | 1920 | |
| 1914 | 1921 | } |
| 1915 | 1922 | |
| 1916 | | static UINT32 sub_unknown_dma_r(device_t *device, int width) |
| 1923 | static void sub_sound_dma_w(device_t *device, int width, UINT32 data) |
| 1917 | 1924 | { |
| 1918 | | //printf("DMA read from unknown: size %d\n", width); |
| 1919 | | return 0; |
| 1920 | | } |
| 1925 | //printf("DMA write to unknown: size %d, data %08X\n", width, data); |
| 1921 | 1926 | |
| 1922 | | static void sub_unknown_dma_w(device_t *device, int width, UINT32 data) |
| 1923 | | { |
| 1924 | | //printf("DMA write to unknown: size %d, data %08X\n", width, data); |
| 1927 | /* |
| 1928 | static FILE *out; |
| 1929 | if (out == NULL) |
| 1930 | out = fopen("sound.bin", "wb"); |
| 1931 | |
| 1932 | fputc((data >> 24) & 0xff, out); |
| 1933 | fputc((data >> 16) & 0xff, out); |
| 1934 | fputc((data >> 8) & 0xff, out); |
| 1935 | fputc((data >> 0) & 0xff, out); |
| 1936 | */ |
| 1937 | |
| 1938 | cobra_state *cobra = device->machine().driver_data<cobra_state>(); |
| 1939 | |
| 1940 | INT16 ldata = (INT16)(data >> 16); |
| 1941 | INT16 rdata = (INT16)(data); |
| 1942 | |
| 1943 | cobra->m_sound_dma_buffer_l[cobra->m_sound_dma_ptr] = ldata; |
| 1944 | cobra->m_sound_dma_buffer_r[cobra->m_sound_dma_ptr] = rdata; |
| 1945 | cobra->m_sound_dma_ptr++; |
| 1946 | |
| 1947 | if (cobra->m_sound_dma_ptr >= DMA_SOUND_BUFFER_SIZE) |
| 1948 | { |
| 1949 | cobra->m_sound_dma_ptr = 0; |
| 1950 | |
| 1951 | dmadac_transfer(&cobra->m_dmadac[0], 1, 0, 1, DMA_SOUND_BUFFER_SIZE, cobra->m_sound_dma_buffer_l); |
| 1952 | dmadac_transfer(&cobra->m_dmadac[1], 1, 0, 1, DMA_SOUND_BUFFER_SIZE, cobra->m_sound_dma_buffer_r); |
| 1953 | } |
| 1925 | 1954 | } |
| 1926 | 1955 | |
| 1927 | 1956 | static void sub_jvs_w(device_t *device, UINT8 data) |
| r17591 | r17592 | |
| 3183 | 3212 | ide_features[67*2+1] = 0x01; |
| 3184 | 3213 | |
| 3185 | 3214 | cobra->m_renderer->gfx_reset(machine); |
| 3215 | |
| 3216 | cobra->m_sound_dma_ptr = 0; |
| 3217 | |
| 3218 | cobra->m_dmadac[0] = machine.device<dmadac_sound_device>("dac1"); |
| 3219 | cobra->m_dmadac[1] = machine.device<dmadac_sound_device>("dac2"); |
| 3220 | dmadac_enable(&cobra->m_dmadac[0], 1, 1); |
| 3221 | dmadac_enable(&cobra->m_dmadac[1], 1, 1); |
| 3222 | dmadac_set_frequency(&cobra->m_dmadac[0], 1, 44100); |
| 3223 | dmadac_set_frequency(&cobra->m_dmadac[1], 1, 44100); |
| 3186 | 3224 | } |
| 3187 | 3225 | |
| 3188 | 3226 | static const ide_config ide_intf = |
| r17591 | r17592 | |
| 3232 | 3270 | MCFG_SOUND_ROUTE(0, "lspeaker", 1.0) |
| 3233 | 3271 | MCFG_SOUND_ROUTE(1, "rspeaker", 1.0) |
| 3234 | 3272 | |
| 3273 | MCFG_SOUND_ADD("dac1", DMADAC, 0) |
| 3274 | MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 1.0) |
| 3275 | |
| 3276 | MCFG_SOUND_ADD("dac2", DMADAC, 0) |
| 3277 | MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 1.0) |
| 3278 | |
| 3235 | 3279 | MCFG_M48T58_ADD("m48t58") |
| 3236 | 3280 | |
| 3237 | 3281 | MCFG_K001604_ADD("k001604", cobra_k001604_intf) // on the LAN board in Racing Jam DX |
| r17591 | r17592 | |
| 3284 | 3328 | |
| 3285 | 3329 | ppc_set_dcstore_callback(m_gfxcpu, gfx_cpu_dc_store); |
| 3286 | 3330 | |
| 3287 | | |
| 3288 | | ppc4xx_set_dma_read_handler(m_subcpu, 0, sub_unknown_dma_r); |
| 3289 | | ppc4xx_set_dma_write_handler(m_subcpu, 0, sub_unknown_dma_w); |
| 3331 | ppc4xx_set_dma_write_handler(m_subcpu, 0, sub_sound_dma_w, 44100); |
| 3290 | 3332 | ppc4xx_spu_set_tx_handler(m_subcpu, sub_jvs_w); |
| 3291 | 3333 | |
| 3292 | 3334 | |
| r17591 | r17592 | |
| 3295 | 3337 | |
| 3296 | 3338 | m_comram_page = 0; |
| 3297 | 3339 | |
| 3340 | m_sound_dma_buffer_l = auto_alloc_array(machine(), INT16, DMA_SOUND_BUFFER_SIZE); |
| 3341 | m_sound_dma_buffer_r = auto_alloc_array(machine(), INT16, DMA_SOUND_BUFFER_SIZE); |
| 3298 | 3342 | |
| 3299 | 3343 | // setup fake pagetable until we figure out what really maps there... |
| 3300 | 3344 | //m_gfx_pagetable[0x80 / 8] = U64(0x800001001e0001a8); |
| r17591 | r17592 | |
| 3490 | 3534 | ROM_REGION(0x2000, "m48t58", ROMREGION_ERASE00) |
| 3491 | 3535 | ROM_LOAD( "m48t58-70pc1.17l", 0x000000, 0x002000, NO_DUMP ) |
| 3492 | 3536 | |
| 3537 | ROM_REGION(0x1000000, "rfsnd", ROMREGION_ERASE00) |
| 3538 | |
| 3493 | 3539 | DISK_REGION( "drive_0" ) |
| 3494 | 3540 | DISK_IMAGE_READONLY( "645c04", 0, SHA1(c0aabe69f6eb4e4cf748d606ae50674297af6a04) ) |
| 3495 | 3541 | ROM_END |
| r17591 | r17592 | |
| 3507 | 3553 | ROM_REGION(0x2000, "m48t58", ROMREGION_ERASE00) |
| 3508 | 3554 | ROM_LOAD( "m48t58-70pc1.17l", 0x000000, 0x002000, NO_DUMP ) |
| 3509 | 3555 | |
| 3556 | ROM_REGION(0x1000000, "rfsnd", ROMREGION_ERASE00) |
| 3557 | |
| 3510 | 3558 | DISK_REGION( "drive_0" ) |
| 3511 | 3559 | DISK_IMAGE_READONLY( "676a04", 0, SHA1(8e89d3e5099e871b99fccba13adaa3cf8a6b71f0) ) |
| 3512 | 3560 | ROM_END |