Previous 199869 Revisions Next

r40020 Tuesday 28th July, 2015 at 21:05:41 UTC by Angelo Salese
Right idea, wrong place.
[/branches/saturn_cdblock/src/emu/machine]segacdblock.c segacdblock.h
[/branches/saturn_cdblock/src/mess/drivers]saturn.c

branches/saturn_cdblock/src/emu/machine/segacdblock.c
r248531r248532
215215   res = -1;
216216   if(xfertype == CDDMA_INPROGRESS)
217217   {
218      printf("%d %d %d %d\n",xfersect,xfersectnum,xferoffs,m_dma_size);
218      //printf("%d %d %d %d\n",xfersect,xfersectnum,xferoffs,m_dma_size);
219219      if (xfersect < xfersectnum)
220220      {
221221         // get next longword
222         if(transpart->blocks[xfersectpos+xfersect] == (blockT *)NULL)
223         {
224            cd_drdy_cb(false);
225            return res;
226         }
227         
222228         res = (transpart->blocks[xfersectpos+xfersect]->data[xferoffs + 0]<<24) |
223229              (transpart->blocks[xfersectpos+xfersect]->data[xferoffs + 1]<<16) |
224230              (transpart->blocks[xfersectpos+xfersect]->data[xferoffs + 2]<<8)  |
r248531r248532
343349segacdblock_device::segacdblock_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
344350   : device_t(mconfig, SEGACDBLOCK, "Sega Saturn CD-Block (HLE)", tag, owner, clock, "segacdblock", __FILE__),
345351      device_memory_interface(mconfig, *this),
346      m_space_config("segacdblock", ENDIANNESS_BIG, 32,20, 0, NULL, *ADDRESS_MAP_NAME(map))
352      m_space_config("segacdblock", ENDIANNESS_BIG, 32,20, 0, NULL, *ADDRESS_MAP_NAME(map)),
353      cd_drdy_cb(*this)
347354{
348355}
349356
r248531r248532
18891896      {
18901897         UINT8 p_ok;
18911898         
1892         if(m_FADEnd)
1893            printf("FAD %08x %08x %04x\n",m_FAD,m_FADEnd,m_hirq);
1894
18951899         p_ok = 0;
18961900         if (cdrom)
18971901         {
r248531r248532
19061910               //machine().device<cdda_device>("cdda")->start_audio(cd_curfad, 1);
19071911            }
19081912         }
1913         
1914         if(m_FADEnd)
1915            printf("FAD %08x %08x %04x %d\n",m_FAD,m_FADEnd,m_hirq,p_ok);
19091916
19101917         set_flag(CSCT);
1918         cd_drdy_cb(true);
19111919
19121920         if(p_ok)
19131921         {
r248531r248532
19741982   m_peri_timer = timer_alloc(PERI_TIMER);
19751983   m_cmd_timer = timer_alloc(CMD_TIMER);
19761984   m_cd_timer = timer_alloc(CD_TIMER);
1985   cd_drdy_cb.resolve_safe();
1986
19771987   m_DMABuffer = auto_alloc_array_clear(machine(), UINT8, 2352);
19781988}
19791989
branches/saturn_cdblock/src/emu/machine/segacdblock.h
r248531r248532
2323#define MCFG_SEGACDBLOCK_ADD(_tag,_freq) \
2424   MCFG_DEVICE_ADD(_tag, SEGACDBLOCK, _freq)
2525
26#define MCFG_SEGACDBLOCK_DRDY_CALLBACK(_devcb) \
27   devcb = &segacdblock_device::set_cd_drdy_cb(*device, DEVCB_##_devcb);
28
29   
2630//**************************************************************************
2731//  TYPE DEFINITIONS
2832//**************************************************************************
r248531r248532
5963   DECLARE_READ16_MEMBER( datatrns_r );
6064   DECLARE_READ32_MEMBER( datatrns32_r );
6165   
66   template<class _Object> static devcb_base &set_cd_drdy_cb(device_t &device, _Object object) { return downcast<segacdblock_device &>(device).cd_drdy_cb.set_callback(object); }
67   
6268protected:
6369   // device-level overrides
6470   virtual void device_validity_check(validity_checker &valid) const;
r248531r248532
7581   static const device_timer_id PERI_TIMER = 0;
7682   static const device_timer_id CMD_TIMER = 1;
7783   static const device_timer_id CD_TIMER = 2;
84   devcb_write_line cd_drdy_cb;
7885
7986   UINT16 m_cr[4];
8087   UINT16 m_dr[4];
branches/saturn_cdblock/src/mess/drivers/saturn.c
r248531r248532
4848#include "imagedev/chd_cd.h"
4949#include "coreutil.h"
5050#include "machine/segacdblock.h"
51#include "debugger.h"
5152
5253#include "bus/saturn/sat_slot.h"
5354#include "bus/saturn/rom.h"
r248531r248532
8081   DECLARE_READ32_MEMBER(saturn_null_ram_r);
8182   DECLARE_WRITE32_MEMBER(saturn_null_ram_w);
8283   DECLARE_WRITE32_MEMBER(astal_cache_hack_w);
83
84   DECLARE_WRITE_LINE_MEMBER(cd_drdy_write_cb);
85   
8486   void saturn_init_driver(int rgn);
8587   DECLARE_DRIVER_INIT(saturnus);
8688   DECLARE_DRIVER_INIT(saturneu);
8789   DECLARE_DRIVER_INIT(saturnjp);
8890
8991   SH2_DMA_FIFO_DATA_AVAILABLE_CB(cdblock_data_available_callback);
90
92   bool m_cd_drdy_line;
93   
9194   void nvram_init(nvram_device &nvram, void *data, size_t size);
9295
9396   required_device<sat_cart_slot_device> m_exp;
r248531r248532
9699   required_device<segacdblock_device> m_cdblock;
97100};
98101
102WRITE_LINE_MEMBER(sat_console_state::cd_drdy_write_cb)
103{
104   m_cd_drdy_line = state;
105   
106   if(state == true)
107   {
108      m_maincpu->sh2_notify_dma_data_available();
109      m_slave->sh2_notify_dma_data_available();
110   }
111}
112
99113SH2_DMA_FIFO_DATA_AVAILABLE_CB(sat_console_state::cdblock_data_available_callback)
100114{
101115   if(src == 0x05818000)
102116   {
103      return 0;
117      return m_cd_drdy_line;
104118   }
105119   else if((src & 0x07f00000) == 0x05800000)
106      printf("DMA callback %08x\n",src);
107
120   {
121      printf("CD Block SH-2 DMA callback %08x\n",src);
122      debugger_break(machine());
123   }
124   
108125   return 1;
109126}
110127
r248531r248532
755772   MCFG_NVRAM_ADD_0FILL("smpc_nv") // TODO: default for each region (+ move it inside SMPC when converted to device)
756773
757774   MCFG_SEGACDBLOCK_ADD("sh1_hle", 0) // 150, @todo
775   MCFG_SEGACDBLOCK_DRDY_CALLBACK(WRITELINE(sat_console_state,cd_drdy_write_cb))
758776   //MCFG_TIMER_DRIVER_ADD("sector_timer", sat_console_state, stv_sector_cb)
759777   //MCFG_TIMER_DRIVER_ADD("sh1_cmd", sat_console_state, stv_sh1_sim)
760778


Previous 199869 Revisions Next


© 1997-2024 The MAME Team