Previous 199869 Revisions Next

r32374 Thursday 25th September, 2014 at 15:28:09 UTC by Fabio Priuli
(MESS) a few more carts. nw.
[src/mess/drivers]px4.c px8.c svision.c
[src/mess/includes]px8.h svision.h

trunk/src/mess/includes/svision.h
r32373r32374
77#ifndef SVISION_H_
88#define SVISION_H_
99
10#include "cpu/m6502/m65c02.h"
11#include "bus/generic/slot.h"
12#include "bus/generic/carts.h"
13
1014struct svision_t
1115{
1216   emu_timer *timer1;
r32373r32374
3539   svision_state(const machine_config &mconfig, device_type type, const char *tag)
3640      : driver_device(mconfig, type, tag),
3741      m_maincpu(*this, "maincpu"),
42      m_cart(*this, "cartslot"),
3843      m_reg(*this, "reg"),
3944      m_videoram(*this, "videoram"),
4045      m_joy(*this, "JOY"),
r32373r32374
5358   DECLARE_WRITE8_MEMBER(tvlink_w);
5459   DECLARE_DRIVER_INIT(svisions);
5560   DECLARE_DRIVER_INIT(svision);
61   virtual void machine_start();
5662   virtual void machine_reset();
5763   DECLARE_PALETTE_INIT(svision);
5864   DECLARE_PALETTE_INIT(svisionp);
r32373r32374
6975
7076protected:
7177   required_device<cpu_device> m_maincpu;
78   required_device<generic_slot_device> m_cart;
7279   required_shared_ptr<UINT8> m_reg;
7380   required_shared_ptr<UINT8> m_videoram;
7481   required_ioport m_joy;
7582   optional_ioport m_joy2;
7683   required_device<palette_device> m_palette;
7784
78   memory_region *m_user1;
85   memory_region *m_cart_rom;
7986   memory_bank *m_bank1;
8087   memory_bank *m_bank2;
8188};
trunk/src/mess/includes/px8.h
r32373r32374
77#include "emu.h"
88#include "cpu/z80/z80.h"
99#include "cpu/m6800/m6800.h"
10#include "imagedev/cartslot.h"
1110#include "imagedev/cassette.h"
1211#include "machine/ram.h"
1312#include "machine/i8251.h"
1413#include "bus/epson_sio/pf10.h"
1514#include "sound/wave.h"
1615
16#include "bus/generic/slot.h"
17#include "bus/generic/carts.h"
18
1719#define UPD70008_TAG    "4a"
1820#define UPD7508_TAG     "2e"
1921#define HD6303_TAG      "13d"
trunk/src/mess/drivers/svision.c
r32373r32374
55******************************************************************************/
66
77#include "emu.h"
8#include "cpu/m6502/m65c02.h"
98
109#include "includes/svision.h"
11#include "imagedev/cartslot.h"
10
1211#include "svision.lh"
1312
1413#define MAKE8_RGB32(red3, green3, blue2) ( ( (red3)<<(16+5)) | ( (green3)<<(8+5)) | ( (blue2)<<(0+6)) )
r32373r32374
129128
130129WRITE8_MEMBER(svision_state::svision_w)
131130{
132   int value;
133   int delay;
131   int value, delay, bank;
134132
135133   m_reg[offset] = data;
136134
r32373r32374
141139         break;
142140
143141      case 0x26: /* bits 5,6 memory management for a000? */
144         logerror("%.6f svision write %04x %02x\n", machine().time().as_double(),offset,data);
145         m_bank1->set_base(m_user1->base() + ((m_reg[0x26] & 0xe0) << 9));
142         logerror("%.6f svision write %04x %02x\n", machine().time().as_double(), offset, data);
143         bank = ((m_reg[0x26] & 0xe0) >> 5) % (m_cart_rom->bytes() / 0x4000);
144         m_bank1->set_base(m_cart_rom->base() + (bank * 0x4000));
146145         svision_irq();
147146         break;
148147
r32373r32374
451450   m_sound = machine().device<svision_sound_device>("custom");
452451   m_dma_finished = m_sound->dma_finished();
453452   m_pet.on = FALSE;
454   m_user1 = memregion("user1");
455   m_bank1 = membank("bank1");
456   m_bank2 = membank("bank2");
457   m_bank2->set_base(m_user1->base() + 0x1c000);
458453}
459454
460455DRIVER_INIT_MEMBER(svision_state,svisions)
r32373r32374
462457   m_svision.timer1 = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(svision_state::svision_timer),this));
463458   m_sound = machine().device<svision_sound_device>("custom");
464459   m_dma_finished = m_sound->dma_finished();
465   m_user1 = memregion("user1");
466   m_bank1 = membank("bank1");
467   m_bank2 = membank("bank2");
468   m_bank2->set_base(m_user1->base() + 0x1c000);
469460   m_pet.on = TRUE;
470461   m_pet.timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(svision_state::svision_pet_timer),this));
471462}
472463
473464DEVICE_IMAGE_LOAD_MEMBER( svision_state, svision_cart )
474465{
475   UINT32 size;
476   dynamic_buffer temp_copy;
477   int mirror, i;
478
479   if (image.software_entry() == NULL)
466   UINT32 size = m_cart->common_get_size("rom");
467   
468   if (size > 0x20000)
480469   {
481      size = image.length();
482
483      if (size > memregion("user1")->bytes())
484      {
485         image.seterror(IMAGE_ERROR_UNSPECIFIED, "Unsupported cartridge size");
486         return IMAGE_INIT_FAIL;
487      }
488
489      temp_copy.resize(size);
490      if (image.fread( temp_copy, size) != size)
491      {
492         image.seterror(IMAGE_ERROR_UNSPECIFIED, "Unable to fully read from file");
493         return IMAGE_INIT_FAIL;
494      }
470      image.seterror(IMAGE_ERROR_UNSPECIFIED, "Unsupported cartridge size");
471      return IMAGE_INIT_FAIL;
495472   }
496   else
497   {
498      size = image.get_software_region_length("rom");
499      temp_copy.resize(size);
500      memcpy(temp_copy, image.get_software_region("rom"), size);
501   }
473   
474   m_cart->rom_alloc(size, GENERIC_ROM8_WIDTH, ENDIANNESS_LITTLE);
475   m_cart->common_load_rom(m_cart->get_rom_base(), size, "rom");         
476   
477   return IMAGE_INIT_PASS;
478}
502479
503   mirror = memregion("user1")->bytes() / size;
480void svision_state::machine_start()
481{
482   int num_banks;
483   astring region_tag;
484   m_cart_rom = memregion(region_tag.cpy(m_cart->tag()).cat(GENERIC_ROM_REGION_TAG));
485   num_banks = m_cart_rom->bytes() / 0x4000;
504486
505   /* With the following, we mirror the cart in the whole "user1" memory region */
506   for (i = 0; i < mirror; i++)
507   {
508      memcpy(memregion("user1")->base() + i * size, temp_copy, size);
509   }
510
511   return IMAGE_INIT_PASS;
487   m_bank1 = membank("bank1");
488   m_bank2 = membank("bank2");
489   // bank1 is set to the first bank
490   m_bank1->set_base(m_cart_rom->base());
491   // bank2 is set to the last bank
492   m_bank2->set_base(m_cart_rom->base() + (num_banks - 1) * 0x4000);
512493}
513494
514495void svision_state::machine_reset()
515496{
516497   m_svision.timer_shot = FALSE;
517498   *m_dma_finished = FALSE;
518   m_bank1->set_base(m_user1->base());
519499}
520500
521501
522502MACHINE_RESET_MEMBER(svision_state,tvlink)
523503{
524   m_svision.timer_shot = FALSE;
525   *m_dma_finished = FALSE;
526   m_bank1->set_base(m_user1->base());
504   svision_state::machine_reset();
527505   m_tvlink.palette_on = FALSE;
528506
529507   memset(m_reg + 0x800, 0xff, 0x40); // normally done from m_tvlink microcontroller
r32373r32374
541519   MCFG_CPU_PROGRAM_MAP(svision_mem)
542520   MCFG_CPU_VBLANK_INT_DRIVER("screen", svision_state,  svision_frame_int)
543521
544
545522   /* video hardware */
546523   MCFG_SCREEN_ADD("screen", LCD)
547524   MCFG_SCREEN_REFRESH_RATE(61)
r32373r32374
562539   MCFG_SOUND_ROUTE(1, "rspeaker", 0.50)
563540
564541   /* cartridge */
565   MCFG_CARTSLOT_ADD("cart")
566   MCFG_CARTSLOT_EXTENSION_LIST("bin,ws,sv")
567   MCFG_CARTSLOT_MANDATORY
568   MCFG_CARTSLOT_INTERFACE("svision_cart")
569   MCFG_CARTSLOT_LOAD(svision_state, svision_cart)
542   MCFG_GENERIC_CARTSLOT_ADD("cartslot", generic_plain_slot, "svision_cart")
543   MCFG_GENERIC_EXTENSIONS("bin,ws,sv")
544   MCFG_GENERIC_MANDATORY
545   MCFG_GENERIC_LOAD(svision_state, svision_cart)
570546
571547   /* Software lists */
572548   MCFG_SOFTWARE_LIST_ADD("cart_list","svision")
r32373r32374
607583MACHINE_CONFIG_END
608584
609585ROM_START(svision)
610   ROM_REGION(0x20000, "user1", ROMREGION_ERASE00)
586   ROM_REGION(0x20000, "maincpu", ROMREGION_ERASE00)
611587ROM_END
612588
613589
trunk/src/mess/drivers/px4.c
r32373r32374
1515#include "machine/ram.h"
1616#include "bus/epson_sio/epson_sio.h"
1717#include "bus/centronics/ctronics.h"
18#include "imagedev/cartslot.h"
1918#include "imagedev/cassette.h"
2019#include "machine/ram.h"
2120#include "machine/nvram.h"
2221#include "sound/speaker.h"
22
23#include "bus/generic/slot.h"
24#include "bus/generic/carts.h"
2325#include "px4.lh"
2426
2527
r32373r32374
8082   m_speaker(*this, "speaker"),
8183   m_sio(*this, "sio"),
8284   m_rs232(*this, "rs232"),
85   m_caps1(*this, "capsule1"),
86   m_caps2(*this, "capsule2"),
87   m_rdsocket(*this, "ramdisk_socket"),
8388   m_isr(0), m_ier(0), m_str(0), m_sior(0xbf),
8489   m_artdir(0xff), m_artdor(0xff), m_artsr(0), m_artcr(0),
8590   m_swr(0),
r32373r32374
97102   required_device<speaker_sound_device> m_speaker;
98103   required_device<epson_sio_device> m_sio;
99104   required_device<rs232_port_device> m_rs232;
105   required_device<generic_slot_device> m_caps1;
106   required_device<generic_slot_device> m_caps2;
107   optional_device<generic_slot_device> m_rdsocket;
100108
109   memory_region *m_caps1_rom;
110   memory_region *m_caps2_rom;
111
101112   // gapnit register
102113   UINT8 m_ctrl1;
103114   UINT16 m_icrb;
r32373r32374
143154   // external cassette/barcode reader
144155   int m_ear_last_state;
145156
146   void install_rom_capsule(address_space &space, int size, const char *region);
157   void install_rom_capsule(address_space &space, int size, memory_region *mem);
147158
148159   // device_serial_interface overrides
149160   virtual void tra_callback();
r32373r32374
200211   DECLARE_READ8_MEMBER(px4_ramdisk_control_r);
201212   DECLARE_DRIVER_INIT(px4);
202213   DECLARE_DRIVER_INIT(px4p);
214   virtual void machine_start();
203215   virtual void machine_reset();
204216   DECLARE_PALETTE_INIT(px4);
205217   DECLARE_MACHINE_START(px4_ramdisk);
r32373r32374
437449}
438450
439451// helper function to map rom capsules
440void px4_state::install_rom_capsule(address_space &space, int size, const char *region)
452void px4_state::install_rom_capsule(address_space &space, int size, memory_region *mem)
441453{
442454   // ram, part 1
443455   space.install_ram(0x0000, 0xdfff - size, 0, 0, m_ram->pointer());
444456
445457   // actual rom data, part 1
446   space.install_rom(0xe000 - size, 0xffff, 0, 0, memregion(region)->base() + (size - 0x2000));
458   if (mem)
459      space.install_rom(0xe000 - size, 0xffff, 0, 0, mem->base() + (size - 0x2000));
447460
448461   // rom data, part 2
449   if (size != 0x2000)
450   {
451      space.install_rom(0x10000 - size, 0xdfff, 0, 0, memregion(region)->base());
452   }
462   if (mem && size != 0x2000)
463      space.install_rom(0x10000 - size, 0xdfff, 0, 0, mem->base());
453464
454465   // ram, continued
455466   space.install_ram(0xe000, 0xffff, 0, 0, m_ram->pointer() + 0xe000);
r32373r32374
479490      space_program.install_ram(0x0000, 0xffff, 0, 0, m_ram->pointer());
480491      break;
481492
482   case 0x08: install_rom_capsule(space_program, 0x2000, "capsule1"); break;
483   case 0x09: install_rom_capsule(space_program, 0x4000, "capsule1"); break;
484   case 0x0a: install_rom_capsule(space_program, 0x8000, "capsule1"); break;
485   case 0x0c: install_rom_capsule(space_program, 0x2000, "capsule2"); break;
486   case 0x0d: install_rom_capsule(space_program, 0x4000, "capsule2"); break;
487   case 0x0e: install_rom_capsule(space_program, 0x8000, "capsule2"); break;
493   case 0x08: install_rom_capsule(space_program, 0x2000, m_caps1_rom); break;
494   case 0x09: install_rom_capsule(space_program, 0x4000, m_caps1_rom); break;
495   case 0x0a: install_rom_capsule(space_program, 0x8000, m_caps1_rom); break;
496   case 0x0c: install_rom_capsule(space_program, 0x2000, m_caps2_rom); break;
497   case 0x0d: install_rom_capsule(space_program, 0x4000, m_caps2_rom); break;
498   case 0x0e: install_rom_capsule(space_program, 0x8000, m_caps2_rom); break;
488499
489500   default:
490501      if (VERBOSE)
r32373r32374
10361047   else if (m_ramdisk_address < 0x40000)
10371048   {
10381049      // read from rom
1039      ret = memregion("ramdisk")->base()[m_ramdisk_address];
1050      ret = m_rdsocket->read_rom(space, m_ramdisk_address);
10401051   }
10411052
10421053   m_ramdisk_address = (m_ramdisk_address & 0xffff00) | ((m_ramdisk_address & 0xff) + 1);
r32373r32374
11241135   m_ramdisk = auto_alloc_array(machine(), UINT8, 0x20000);
11251136}
11261137
1138void px4_state::machine_start()
1139{
1140   astring region_tag;
1141   m_caps1_rom = memregion(region_tag.cpy(m_caps1->tag()).cat(GENERIC_ROM_REGION_TAG));
1142   m_caps2_rom = memregion(region_tag.cpy(m_caps2->tag()).cat(GENERIC_ROM_REGION_TAG));
1143}
1144
11271145void px4_state::machine_reset()
11281146{
11291147   m_artsr = ART_TXRDY | ART_TXEMPTY;
r32373r32374
11331151
11341152MACHINE_START_MEMBER( px4_state, px4_ramdisk )
11351153{
1154   px4_state::machine_start();
11361155   machine().device<nvram_device>("nvram")->set_base(m_ramdisk, 0x20000);
11371156}
11381157
r32373r32374
14161435   MCFG_RS232_CTS_HANDLER(WRITELINE(px4_state, rs232_cts_w))
14171436
14181437   // rom capsules
1419   MCFG_CARTSLOT_ADD("capsule1")
1420   MCFG_CARTSLOT_EXTENSION_LIST("bin")
1421   MCFG_CARTSLOT_INTERFACE("px4_cart")
1422   MCFG_CARTSLOT_NOT_MANDATORY
1438   MCFG_GENERIC_CARTSLOT_ADD("capsule1", generic_plain_slot, "px4_cart")
1439   MCFG_GENERIC_CARTSLOT_ADD("capsule2", generic_plain_slot, "px4_cart")
14231440
1424   MCFG_CARTSLOT_ADD("capsule2")
1425   MCFG_CARTSLOT_EXTENSION_LIST("bin")
1426   MCFG_CARTSLOT_INTERFACE("px4_cart")
1427   MCFG_CARTSLOT_NOT_MANDATORY
1428
14291441   // software list
14301442   MCFG_SOFTWARE_LIST_ADD("cart_list", "px4_cart")
14311443MACHINE_CONFIG_END
r32373r32374
14401452   MCFG_PALETTE_MODIFY("palette")
14411453   MCFG_PALETTE_INIT_OWNER(px4_state, px4p)
14421454
1443   MCFG_CARTSLOT_ADD("ramdisk")
1444   MCFG_CARTSLOT_NOT_MANDATORY
1455   MCFG_GENERIC_CARTSLOT_ADD("ramdisk_socket", generic_plain_slot, "px4_cart")
14451456MACHINE_CONFIG_END
14461457
14471458
r32373r32374
14571468
14581469   ROM_REGION(0x1000, "slave", 0)
14591470   ROM_LOAD("upd7508.bin", 0x0000, 0x1000, NO_DUMP)
1460
1461   ROM_REGION(0x8000, "capsule1", 0)
1462   ROM_CART_LOAD("capsule1", 0x0000, 0x8000, ROM_OPTIONAL)
1463
1464   ROM_REGION(0x8000, "capsule2", 0)
1465   ROM_CART_LOAD("capsule2", 0x0000, 0x8000, ROM_OPTIONAL)
14661471ROM_END
14671472
14681473ROM_START( px4p )
r32373r32374
14711476
14721477   ROM_REGION(0x1000, "slave", 0)
14731478   ROM_LOAD("upd7508.bin", 0x0000, 0x1000, NO_DUMP)
1474
1475   ROM_REGION(0x8000, "capsule1", 0)
1476   ROM_CART_LOAD("capsule1", 0x0000, 0x8000, ROM_OPTIONAL)
1477
1478   ROM_REGION(0x8000, "capsule2", 0)
1479   ROM_CART_LOAD("capsule2", 0x0000, 0x8000, ROM_OPTIONAL)
1480
1481   ROM_REGION(0x20000, "ramdisk", 0)
1482   ROM_CART_LOAD("ramdisk", 0x0000, 0x20000, ROM_OPTIONAL | ROM_MIRROR)
14831479ROM_END
14841480
14851481
trunk/src/mess/drivers/px8.c
r32373r32374
786786   MCFG_SOUND_ROUTE(0, "mono", 0.25)
787787
788788   /* cartridge */
789   MCFG_CARTSLOT_ADD("capsule1")
790   MCFG_CARTSLOT_EXTENSION_LIST("bin,rom")
789   MCFG_GENERIC_CARTSLOT_ADD("capsule1", generic_plain_slot, NULL)
790   MCFG_GENERIC_EXTENSIONS("bin,rom")
791791
792   MCFG_CARTSLOT_ADD("capsule2")
793   MCFG_CARTSLOT_EXTENSION_LIST("bin,rom")
792   MCFG_GENERIC_CARTSLOT_ADD("capsule2", generic_plain_slot, NULL)
793   MCFG_GENERIC_EXTENSIONS("bin,rom")
794794
795795   /* devices */
796796   MCFG_DEVICE_ADD(I8251_TAG, I8251, 0)
r32373r32374
818818   ROM_REGION( 0x0800, SED1320_TAG, 0 )
819819   ROM_LOAD( "font.rom", 0x0000, 0x0800, CRC(5b52edbd) SHA1(38197edf301bb2843bea040536af545f76b3d44f) )
820820
821   ROM_REGION( 0x10000, "capsule", 0 )
822   ROM_CART_LOAD( "capsule2", 0x0000, 0x8000, ROM_NOMIRROR )
823   ROM_CART_LOAD( "capsule1", 0x8000, 0x8000, ROM_NOMIRROR )
824
825821   ROM_REGION( 0x1000, HD6303_TAG, 0 )
826822   ROM_LOAD( "hd6303 slave cpu internal rom.13d", 0x0000, 0x1000, NO_DUMP )
827823

Previous 199869 Revisions Next


© 1997-2024 The MAME Team