Advertisement
Guest User

Untitled

a guest
Dec 1st, 2013
91
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.04 KB | None | 0 0
  1. // license:BSD
  2. // copyright-holders:Wilbert Pol
  3. /***************************************************************************
  4.  
  5. Nichibutsu My Vision
  6. driver by Wilbert Pol
  7.  
  8. 2013/12/01 Skeleton driver.
  9.  
  10. TODO:
  11. - Create software list, mark the cartslot as mandotory, and remove the
  12. test cartridge from system's rom definition.
  13. - Implement cnd figure out ontrols
  14. - Should there be any sound? If so, add it
  15. - Get exact TMS9918 model verified
  16. - Get clock crystal(s) verified
  17. - Get size of vram verified
  18.  
  19. ****************************************************************************/
  20.  
  21.  
  22. #include "emu.h"
  23. #include "cpu/z80/z80.h"
  24. #include "imagedev/cartslot.h"
  25. #include "video/tms9928a.h"
  26.  
  27.  
  28. class myvision_state : public driver_device
  29. {
  30. public:
  31. myvision_state(const machine_config &mconfig, device_type type, const char *tag)
  32. : driver_device(mconfig, type, tag)
  33. , m_maincpu(*this, "maincpu")
  34. { }
  35.  
  36. DECLARE_WRITE_LINE_MEMBER( vdp_interrupt );
  37. DECLARE_DEVICE_IMAGE_LOAD_MEMBER( cart );
  38.  
  39. private:
  40. virtual void machine_reset();
  41. required_device<cpu_device> m_maincpu;
  42. };
  43.  
  44.  
  45. static ADDRESS_MAP_START(myvision_mem, AS_PROGRAM, 8, myvision_state)
  46. ADDRESS_MAP_UNMAP_HIGH
  47. AM_RANGE( 0x0000, 0x5fff ) AM_ROM
  48. AM_RANGE( 0xa000, 0xa7ff ) AM_RAM
  49. AM_RANGE(0xe000, 0xe000) AM_DEVREADWRITE("tms9918", tms9918a_device, vram_read, vram_write)
  50. AM_RANGE(0xe002, 0xe002) AM_DEVREADWRITE("tms9918", tms9918a_device, register_read, register_write)
  51. ADDRESS_MAP_END
  52.  
  53.  
  54. static ADDRESS_MAP_START(myvision_io, AS_IO, 8, myvision_state)
  55. ADDRESS_MAP_UNMAP_HIGH
  56. ADDRESS_MAP_GLOBAL_MASK(0xff)
  57. // 0x00
  58. // 0x01
  59. // 0x02
  60. ADDRESS_MAP_END
  61.  
  62. /* Input ports */
  63. static INPUT_PORTS_START( myvision )
  64. INPUT_PORTS_END
  65.  
  66.  
  67. void myvision_state::machine_reset()
  68. {
  69. }
  70.  
  71.  
  72. DEVICE_IMAGE_LOAD_MEMBER( myvision_state, cart )
  73. {
  74. UINT8 *cart = memregion("maincpu")->base();
  75.  
  76. if (image.software_entry() == NULL)
  77. {
  78. UINT32 filesize = image.length();
  79.  
  80. if (filesize != 0x4000 && filesize != 0x6000)
  81. {
  82. image.seterror(IMAGE_ERROR_UNSPECIFIED, "Incorrect or not support cartridge size");
  83. return IMAGE_INIT_FAIL;
  84. }
  85.  
  86. if (image.fread( cart, filesize) != filesize)
  87. {
  88. image.seterror(IMAGE_ERROR_UNSPECIFIED, "Error loading file");
  89. return IMAGE_INIT_FAIL;
  90. }
  91. }
  92. else
  93. {
  94. memcpy(cart, image.get_software_region("rom"), image.get_software_region_length("rom"));
  95. }
  96.  
  97. return IMAGE_INIT_PASS;
  98. }
  99.  
  100.  
  101. WRITE_LINE_MEMBER(myvision_state::vdp_interrupt)
  102. {
  103. m_maincpu->set_input_line(INPUT_LINE_IRQ0, state);
  104. }
  105.  
  106.  
  107. static TMS9928A_INTERFACE(myvision_tms9918a_interface)
  108. {
  109. 0x4000, /* Not verified */
  110. DEVCB_DRIVER_LINE_MEMBER(myvision_state,vdp_interrupt)
  111. };
  112.  
  113.  
  114. static MACHINE_CONFIG_START( myvision, myvision_state )
  115. /* basic machine hardware */
  116. MCFG_CPU_ADD("maincpu",Z80, XTAL_10_738635MHz/3) /* Not verified */
  117. MCFG_CPU_PROGRAM_MAP(myvision_mem)
  118. MCFG_CPU_IO_MAP(myvision_io)
  119.  
  120. /* video hardware */
  121. MCFG_TMS9928A_ADD( "tms9918", TMS9918A, myvision_tms9918a_interface ) /* Exact model not verified */
  122. MCFG_TMS9928A_SCREEN_ADD_NTSC( "screen" )
  123. MCFG_SCREEN_UPDATE_DEVICE( "tms9918", tms9918a_device, screen_update )
  124.  
  125. /* cartridge */
  126. MCFG_CARTSLOT_ADD("cart")
  127. MCFG_CARTSLOT_EXTENSION_LIST("bin")
  128. // MCFG_CARTSLOT_MANDATORY
  129. MCFG_CARTSLOT_NOT_MANDATORY
  130. MCFG_CARTSLOT_LOAD(myvision_state,cart)
  131. MCFG_CARTSLOT_INTERFACE("myvision_cart")
  132.  
  133. /* software lists */
  134. MCFG_SOFTWARE_LIST_ADD("cart_list","myvision")
  135. MACHINE_CONFIG_END
  136.  
  137. /* ROM definition */
  138. ROM_START( myvision )
  139. ROM_REGION( 0x6000, "maincpu", ROMREGION_ERASEFF )
  140. // For testing only should be removed before adding driver
  141. ROM_LOAD("rj1.bin", 0x0000, 0x2000, CRC(fa3df109) )
  142. ROM_LOAD("rj2.bin", 0x2000, 0x2000, CRC(eae282e3) )
  143. ROM_END
  144.  
  145. /* Driver */
  146.  
  147. /* YEAR NAME PARENT COMPAT MACHINE INPUT INIT COMPANY FULLNAME FLAGS */
  148. COMP( 1983, myvision, 0, 0, myvision, myvision, driver_device, 0, "Nichibutsu", "My Vision (KH-1000)", GAME_NOT_WORKING | GAME_NO_SOUND)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement