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 |