Previous 199869 Revisions Next

r17985 Tuesday 18th September, 2012 at 06:10:57 UTC by Aaron Giles
Remove all traces of read/write*_device_func from memory.c.
All legacy device callbacks are now promoted to delegates
and handed off to the modern read/write handler managers.
Fixed ibm5150 and surely many other broken systems. (nw)
[src/emu]memory.c memory.h
[src/mess/includes]genpc.h

trunk/src/emu/memory.c
r17984r17985
349349         read16_space_func      space16;
350350         read32_space_func      space32;
351351         read64_space_func      space64;
352         read8_device_func      device8;
353         read16_device_func      device16;
354         read32_device_func      device32;
355         read64_device_func      device64;
356352      } handler;
357353   };
358354
r17984r17985
390386   void set_legacy_func(address_space &space, read32_space_func func, const char *name, UINT64 mask = 0);
391387   void set_legacy_func(address_space &space, read64_space_func func, const char *name, UINT64 mask = 0);
392388
393   // configure legacy device functions
394   void set_legacy_func(device_t &device, read8_device_func func, const char *name, UINT64 mask = 0);
395   void set_legacy_func(device_t &device, read16_device_func func, const char *name, UINT64 mask = 0);
396   void set_legacy_func(device_t &device, read32_device_func func, const char *name, UINT64 mask = 0);
397   void set_legacy_func(device_t &device, read64_device_func func, const char *name, UINT64 mask = 0);
398
399389   // configure I/O port access
400390   void set_ioport(ioport_port &ioport);
401391
r17984r17985
456446         write16_space_func      space16;
457447         write32_space_func      space32;
458448         write64_space_func      space64;
459         write8_device_func      device8;
460         write16_device_func      device16;
461         write32_device_func      device32;
462         write64_device_func      device64;
463449      } handler;
464450   };
465451
r17984r17985
497483   void set_legacy_func(address_space &space, write32_space_func func, const char *name, UINT64 mask = 0);
498484   void set_legacy_func(address_space &space, write64_space_func func, const char *name, UINT64 mask = 0);
499485
500   // configure legacy device functions
501   void set_legacy_func(device_t &device, write8_device_func func, const char *name, UINT64 mask = 0);
502   void set_legacy_func(device_t &device, write16_device_func func, const char *name, UINT64 mask = 0);
503   void set_legacy_func(device_t &device, write32_device_func func, const char *name, UINT64 mask = 0);
504   void set_legacy_func(device_t &device, write64_device_func func, const char *name, UINT64 mask = 0);
505
506486   // configure I/O port access
507487   void set_ioport(ioport_port &ioport);
508488
r17984r17985
564544         (*i)->set_legacy_func(space, func, name, mask);
565545   }
566546
567   // forward legacy device functions configuration
568   template<typename _func> void set_legacy_func(device_t &device, _func func, const char *name) const {
569      for (typename std::list<_HandlerEntry *>::const_iterator i = handlers.begin(); i != handlers.end(); i++)
570         (*i)->set_legacy_func(device, func, name, mask);
571   }
572
573547   // forward I/O port access configuration
574548   void set_ioport(ioport_port &ioport) const {
575549      for (typename std::list<_HandlerEntry *>::const_iterator i = handlers.begin(); i != handlers.end(); i++)
r17984r17985
25272501
25282502
25292503//-------------------------------------------------
2530//  install_legacy_handler - install 8-bit read/
2531//  write legacy device handlers for the space
2532//-------------------------------------------------
2533
2534UINT8 *address_space::install_legacy_read_handler(device_t &device, offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, read8_device_func rhandler, const char *rname, UINT64 unitmask)
2535{
2536   VPRINTF(("address_space::install_legacy_read_handler(%s-%s mask=%s mirror=%s, %s, %s, \"%s\") [read8]\n",
2537          core_i64_hex_format(addrstart, m_addrchars), core_i64_hex_format(addrend, m_addrchars),
2538          core_i64_hex_format(addrmask, m_addrchars), core_i64_hex_format(addrmirror, m_addrchars),
2539          rname, core_i64_hex_format(unitmask, data_width() / 4), device.tag()));
2540
2541   read().handler_map_range(addrstart, addrend, addrmask, addrmirror, unitmask).set_legacy_func(device, rhandler, rname);
2542   generate_memdump(machine());
2543   return reinterpret_cast<UINT8 *>(find_backing_memory(addrstart, addrend));
2544}
2545
2546UINT8 *address_space::install_legacy_write_handler(device_t &device, offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, write8_device_func whandler, const char *wname, UINT64 unitmask)
2547{
2548   VPRINTF(("address_space::install_legacy_write_handler(%s-%s mask=%s mirror=%s, %s, %s, \"%s\") [write8]\n",
2549          core_i64_hex_format(addrstart, m_addrchars), core_i64_hex_format(addrend, m_addrchars),
2550          core_i64_hex_format(addrmask, m_addrchars), core_i64_hex_format(addrmirror, m_addrchars),
2551          wname, core_i64_hex_format(unitmask, data_width() / 4), device.tag()));
2552
2553   write().handler_map_range(addrstart, addrend, addrmask, addrmirror, unitmask).set_legacy_func(device, whandler, wname);
2554   generate_memdump(machine());
2555   return reinterpret_cast<UINT8 *>(find_backing_memory(addrstart, addrend));
2556}
2557
2558UINT8 *address_space::install_legacy_readwrite_handler(device_t &device, offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, read8_device_func rhandler, const char *rname, write8_device_func whandler, const char *wname, UINT64 unitmask)
2559{
2560   install_legacy_read_handler(device, addrstart, addrend, addrmask, addrmirror, rhandler, rname, unitmask);
2561   return install_legacy_write_handler(device, addrstart, addrend, addrmask, addrmirror, whandler, wname, unitmask);
2562}
2563
2564
2565//-------------------------------------------------
25662504//  install_handler - install 16-bit read/write
25672505//  delegate handlers for the space
25682506//-------------------------------------------------
r17984r17985
26162554
26172555
26182556//-------------------------------------------------
2619//  install_legacy_handler - install 16-bit read/
2620//  write legacy device handlers for the space
2621//-------------------------------------------------
2622
2623UINT16 *address_space::install_legacy_read_handler(device_t &device, offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, read16_device_func rhandler, const char *rname, UINT64 unitmask)
2624{
2625   read().handler_map_range(addrstart, addrend, addrmask, addrmirror, unitmask).set_legacy_func(device, rhandler, rname);
2626   generate_memdump(machine());
2627   return reinterpret_cast<UINT16 *>(find_backing_memory(addrstart, addrend));
2628}
2629
2630UINT16 *address_space::install_legacy_write_handler(device_t &device, offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, write16_device_func whandler, const char *wname, UINT64 unitmask)
2631{
2632   write().handler_map_range(addrstart, addrend, addrmask, addrmirror, unitmask).set_legacy_func(device, whandler, wname);
2633   generate_memdump(machine());
2634   return reinterpret_cast<UINT16 *>(find_backing_memory(addrstart, addrend));
2635}
2636
2637UINT16 *address_space::install_legacy_readwrite_handler(device_t &device, offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, read16_device_func rhandler, const char *rname, write16_device_func whandler, const char *wname, UINT64 unitmask)
2638{
2639   install_legacy_read_handler(device, addrstart, addrend, addrmask, addrmirror, rhandler, rname, unitmask);
2640   return install_legacy_write_handler(device, addrstart, addrend, addrmask, addrmirror, whandler, wname, unitmask);
2641}
2642
2643
2644//-------------------------------------------------
26452557//  install_handler - install 32-bit read/write
26462558//  delegate handlers for the space
26472559//-------------------------------------------------
r17984r17985
26952607
26962608
26972609//-------------------------------------------------
2698//  install_legacy_handler - install 32-bit read/
2699//  write legacy device handlers for the space
2700//-------------------------------------------------
2701
2702UINT32 *address_space::install_legacy_read_handler(device_t &device, offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, read32_device_func rhandler, const char *rname, UINT64 unitmask)
2703{
2704   read().handler_map_range(addrstart, addrend, addrmask, addrmirror, unitmask).set_legacy_func(device, rhandler, rname);
2705   generate_memdump(machine());
2706   return reinterpret_cast<UINT32 *>(find_backing_memory(addrstart, addrend));
2707}
2708
2709UINT32 *address_space::install_legacy_write_handler(device_t &device, offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, write32_device_func whandler, const char *wname, UINT64 unitmask)
2710{
2711   write().handler_map_range(addrstart, addrend, addrmask, addrmirror, unitmask).set_legacy_func(device, whandler, wname);
2712   generate_memdump(machine());
2713   return reinterpret_cast<UINT32 *>(find_backing_memory(addrstart, addrend));
2714}
2715
2716UINT32 *address_space::install_legacy_readwrite_handler(device_t &device, offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, read32_device_func rhandler, const char *rname, write32_device_func whandler, const char *wname, UINT64 unitmask)
2717{
2718   install_legacy_read_handler(device, addrstart, addrend, addrmask, addrmirror, rhandler, rname, unitmask);
2719   return install_legacy_write_handler(device, addrstart, addrend, addrmask, addrmirror, whandler, wname, unitmask);
2720}
2721
2722
2723//-------------------------------------------------
27242610//  install_handler64 - install 64-bit read/write
27252611//  delegate handlers for the space
27262612//-------------------------------------------------
r17984r17985
27732659}
27742660
27752661
2776//-------------------------------------------------
2777//  install_legacy_handler - install 64-bit read/
2778//  write legacy device handlers for the space
2779//-------------------------------------------------
27802662
2781UINT64 *address_space::install_legacy_read_handler(device_t &device, offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, read64_device_func rhandler, const char *rname, UINT64 unitmask)
2782{
2783   read().handler_map_range(addrstart, addrend, addrmask, addrmirror, unitmask).set_legacy_func(device, rhandler, rname);
2784   generate_memdump(machine());
2785   return reinterpret_cast<UINT64 *>(find_backing_memory(addrstart, addrend));
2786}
2787
2788UINT64 *address_space::install_legacy_write_handler(device_t &device, offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, write64_device_func whandler, const char *wname, UINT64 unitmask)
2789{
2790   write().handler_map_range(addrstart, addrend, addrmask, addrmirror, unitmask).set_legacy_func(device, whandler, wname);
2791   generate_memdump(machine());
2792   return reinterpret_cast<UINT64 *>(find_backing_memory(addrstart, addrend));
2793}
2794
2795UINT64 *address_space::install_legacy_readwrite_handler(device_t &device, offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, read64_device_func rhandler, const char *rname, write64_device_func whandler, const char *wname, UINT64 unitmask)
2796{
2797   install_legacy_read_handler(device, addrstart, addrend, addrmask, addrmirror, rhandler, rname, unitmask);
2798   return install_legacy_write_handler(device, addrstart, addrend, addrmask, addrmirror, whandler, wname, unitmask);
2799}
2800
2801
2802
28032663//**************************************************************************
28042664//  MEMORY MAPPING HELPERS
28052665//**************************************************************************
r17984r17985
49114771
49124772
49134773//-------------------------------------------------
4914//  set_legacy_func - configure a legacy device
4915//  stub of the appropriate size
4916//-------------------------------------------------
4917
4918void handler_entry_read::set_legacy_func(device_t &device, read8_device_func func, const char *name, UINT64 mask)
4919{
4920   legacy_info info;
4921   info.handler.device8 = func;
4922   info.object.device = &device;
4923   set_delegate(read8_delegate(&handler_entry_read::read_stub_legacy, name, this), mask, &info);
4924}
4925
4926void handler_entry_read::set_legacy_func(device_t &device, read16_device_func func, const char *name, UINT64 mask)
4927{
4928   legacy_info info;
4929   info.handler.device16 = func;
4930   info.object.device = &device;
4931   set_delegate(read16_delegate(&handler_entry_read::read_stub_legacy, name, this), mask, &info);
4932}
4933
4934void handler_entry_read::set_legacy_func(device_t &device, read32_device_func func, const char *name, UINT64 mask)
4935{
4936   legacy_info info;
4937   info.handler.device32 = func;
4938   info.object.device = &device;
4939   set_delegate(read32_delegate(&handler_entry_read::read_stub_legacy, name, this), mask, &info);
4940}
4941
4942void handler_entry_read::set_legacy_func(device_t &device, read64_device_func func, const char *name, UINT64 mask)
4943{
4944   legacy_info info;
4945   info.handler.device64 = func;
4946   info.object.device = &device;
4947   set_delegate(read64_delegate(&handler_entry_read::read_stub_legacy, name, this), mask, &info);
4948}
4949
4950
4951//-------------------------------------------------
49524774//  set_ioport - configure an I/O port read stub
49534775//  of the appropriate size
49544776//-------------------------------------------------
r17984r17985
53665188
53675189
53685190//-------------------------------------------------
5369//  set_legacy_func - configure a legacy device
5370//  stub of the appropriate size
5371//-------------------------------------------------
5372
5373void handler_entry_write::set_legacy_func(device_t &device, write8_device_func func, const char *name, UINT64 mask)
5374{
5375   legacy_info info;
5376   info.handler.device8 = func;
5377   info.object.device = &device;
5378   set_delegate(write8_delegate(&handler_entry_write::write_stub_legacy, name, this), mask, &info);
5379}
5380
5381void handler_entry_write::set_legacy_func(device_t &device, write16_device_func func, const char *name, UINT64 mask)
5382{
5383   legacy_info info;
5384   info.handler.device16 = func;
5385   info.object.device = &device;
5386   set_delegate(write16_delegate(&handler_entry_write::write_stub_legacy, name, this), mask, &info);
5387}
5388
5389void handler_entry_write::set_legacy_func(device_t &device, write32_device_func func, const char *name, UINT64 mask)
5390{
5391   legacy_info info;
5392   info.handler.device32 = func;
5393   info.object.device = &device;
5394   set_delegate(write32_delegate(&handler_entry_write::write_stub_legacy, name, this), mask, &info);
5395}
5396
5397void handler_entry_write::set_legacy_func(device_t &device, write64_device_func func, const char *name, UINT64 mask)
5398{
5399   legacy_info info;
5400   info.handler.device64 = func;
5401   info.object.device = &device;
5402   set_delegate(write64_delegate(&handler_entry_write::write_stub_legacy, name, this), mask, &info);
5403}
5404
5405
5406//-------------------------------------------------
54075191//  set_ioport - configure an I/O port read stub
54085192//  of the appropriate size
54095193//-------------------------------------------------
trunk/src/emu/memory.h
r17984r17985
515515   UINT64 *install_legacy_readwrite_handler(device_t &device, offs_t addrstart, offs_t addrend, read64_device_func rhandler, const char *rname, write64_device_func whandler, const char *wname, UINT64 unitmask = 0) { return install_legacy_readwrite_handler(device, addrstart, addrend, 0, 0, rhandler, rname, whandler, wname, unitmask); }
516516
517517   // install legacy device handlers (with mirror/mask)
518   UINT8 *install_legacy_read_handler(device_t &device, offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, read8_device_func rhandler, const char *rname, UINT64 unitmask = 0);
519   UINT8 *install_legacy_write_handler(device_t &device, offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, write8_device_func whandler, const char *wname, UINT64 unitmask = 0);
520   UINT8 *install_legacy_readwrite_handler(device_t &device, offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, read8_device_func rhandler, const char *rname, write8_device_func whandler, const char *wname, UINT64 unitmask = 0);
521   UINT16 *install_legacy_read_handler(device_t &device, offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, read16_device_func rhandler, const char *rname, UINT64 unitmask = 0);
522   UINT16 *install_legacy_write_handler(device_t &device, offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, write16_device_func whandler, const char *wname, UINT64 unitmask = 0);
523   UINT16 *install_legacy_readwrite_handler(device_t &device, offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, read16_device_func rhandler, const char *rname, write16_device_func whandler, const char *wname, UINT64 unitmask = 0);
524   UINT32 *install_legacy_read_handler(device_t &device, offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, read32_device_func rhandler, const char *rname, UINT64 unitmask = 0);
525   UINT32 *install_legacy_write_handler(device_t &device, offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, write32_device_func whandler, const char *wname, UINT64 unitmask = 0);
526   UINT32 *install_legacy_readwrite_handler(device_t &device, offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, read32_device_func rhandler, const char *rname, write32_device_func whandler, const char *wname, UINT64 unitmask = 0);
527   UINT64 *install_legacy_read_handler(device_t &device, offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, read64_device_func rhandler, const char *rname, UINT64 unitmask = 0);
528   UINT64 *install_legacy_write_handler(device_t &device, offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, write64_device_func whandler, const char *wname, UINT64 unitmask = 0);
529   UINT64 *install_legacy_readwrite_handler(device_t &device, offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, read64_device_func rhandler, const char *rname, write64_device_func whandler, const char *wname, UINT64 unitmask = 0);
518   UINT8 *install_legacy_read_handler(device_t &device, offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, read8_device_func rhandler, const char *rname, UINT64 unitmask = 0) { return install_read_handler(addrstart, addrend, addrmask, addrmirror, read8_delegate(rhandler, rname, &device), unitmask); }
519   UINT8 *install_legacy_write_handler(device_t &device, offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, write8_device_func whandler, const char *wname, UINT64 unitmask = 0) { return install_write_handler(addrstart, addrend, addrmask, addrmirror, write8_delegate(whandler, wname, &device), unitmask); }
520   UINT8 *install_legacy_readwrite_handler(device_t &device, offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, read8_device_func rhandler, const char *rname, write8_device_func whandler, const char *wname, UINT64 unitmask = 0) { return install_readwrite_handler(addrstart, addrend, addrmask, addrmirror, read8_delegate(rhandler, rname, &device), write8_delegate(whandler, wname, &device), unitmask); }
521   UINT16 *install_legacy_read_handler(device_t &device, offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, read16_device_func rhandler, const char *rname, UINT64 unitmask = 0) { return install_read_handler(addrstart, addrend, addrmask, addrmirror, read16_delegate(rhandler, rname, &device), unitmask); }
522   UINT16 *install_legacy_write_handler(device_t &device, offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, write16_device_func whandler, const char *wname, UINT64 unitmask = 0) { return install_write_handler(addrstart, addrend, addrmask, addrmirror, write16_delegate(whandler, wname, &device), unitmask); }
523   UINT16 *install_legacy_readwrite_handler(device_t &device, offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, read16_device_func rhandler, const char *rname, write16_device_func whandler, const char *wname, UINT64 unitmask = 0) { return install_readwrite_handler(addrstart, addrend, addrmask, addrmirror, read16_delegate(rhandler, rname, &device), write16_delegate(whandler, wname, &device), unitmask); }
524   UINT32 *install_legacy_read_handler(device_t &device, offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, read32_device_func rhandler, const char *rname, UINT64 unitmask = 0) { return install_read_handler(addrstart, addrend, addrmask, addrmirror, read32_delegate(rhandler, rname, &device), unitmask); }
525   UINT32 *install_legacy_write_handler(device_t &device, offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, write32_device_func whandler, const char *wname, UINT64 unitmask = 0) { return install_write_handler(addrstart, addrend, addrmask, addrmirror, write32_delegate(whandler, wname, &device), unitmask); }
526   UINT32 *install_legacy_readwrite_handler(device_t &device, offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, read32_device_func rhandler, const char *rname, write32_device_func whandler, const char *wname, UINT64 unitmask = 0) { return install_readwrite_handler(addrstart, addrend, addrmask, addrmirror, read32_delegate(rhandler, rname, &device), write32_delegate(whandler, wname, &device), unitmask); }
527   UINT64 *install_legacy_read_handler(device_t &device, offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, read64_device_func rhandler, const char *rname, UINT64 unitmask = 0) { return install_read_handler(addrstart, addrend, addrmask, addrmirror, read64_delegate(rhandler, rname, &device), unitmask); }
528   UINT64 *install_legacy_write_handler(device_t &device, offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, write64_device_func whandler, const char *wname, UINT64 unitmask = 0) { return install_write_handler(addrstart, addrend, addrmask, addrmirror, write64_delegate(whandler, wname, &device), unitmask); }
529   UINT64 *install_legacy_readwrite_handler(device_t &device, offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, read64_device_func rhandler, const char *rname, write64_device_func whandler, const char *wname, UINT64 unitmask = 0) { return install_readwrite_handler(addrstart, addrend, addrmask, addrmirror, read64_delegate(rhandler, rname, &device), write64_delegate(whandler, wname, &device), unitmask); }
530530
531531   // setup
532532   void prepare_map();
trunk/src/mess/includes/genpc.h
r17984r17985
1212#include "machine/am9517a.h"
1313#include "machine/isa.h"
1414#include "machine/pc_kbdc.h"
15#include "machine/pic8259.h"
16#include "machine/pit8253.h"
17#include "sound/speaker.h"
1518#include "imagedev/cassette.h"
1619
1720#define MCFG_IBM5160_MOTHERBOARD_ADD(_tag, _cputag) \
r17984r17985
4043   void install_device(offs_t start, offs_t end, offs_t mask, offs_t mirror, read8_delegate rhandler, write8_delegate whandler);
4144public:
4245   required_device<cpu_device>  m_maincpu;
43   required_device<device_t>  m_pic8259;
46   required_device<pic8259_device>  m_pic8259;
4447   required_device<am9517a_device>  m_dma8237;
45   required_device<device_t>  m_pit8253;
48   required_device<pit8253_device>  m_pit8253;
4649   required_device<i8255_device>  m_ppi8255;
47   required_device<device_t>  m_speaker;
50   required_device<speaker_sound_device>  m_speaker;
4851   required_device<isa8_device>  m_isabus;
4952   required_device<pc_kbdc_device>  m_pc_kbdc;
5053

Previous 199869 Revisions Next


© 1997-2024 The MAME Team