Previous 199869 Revisions Next

r32601 Thursday 9th October, 2014 at 18:17:13 UTC by Fabio Priuli
some more generic cart slots. nw.
[src/mess/drivers]electron.c kyocera.c nc.c pb1000.c primo.c
[src/mess/includes]electron.h kyocera.h nc.h primo.h
[src/mess/machine]electron.c nc.c primo.c

trunk/src/mess/machine/nc.c
r32600r32601
1212/* PCMCIA Ram Card management */
1313
1414/* the data is stored as a simple memory dump, there is no header or other information */
15
1615/* stores size of actual file on filesystem */
1716
18/* save card data back */
19void nc_state::nc_card_save(device_image_interface &image)
20{
21   /* if there is no data to write, quit */
22   if (!m_card_ram || !m_card_size)
23      return;
2417
25   logerror("attempting card save\n");
18/* this is not a real register, it is used to record card status */
19/* ==0, card not inserted, !=0 card is inserted */
2620
27   /* write data */
28   image.fwrite(m_card_ram, m_card_size);
29
30   logerror("write succeeded!\r\n");
21// set pcmcia card present state
22void nc_state::set_card_present_state(int state)
23{
24   m_card_status = state;
3125}
3226
33/* this mask will prevent overwrites from end of data */
34int nc_state::nc_card_calculate_mask(int size)
35{
36   int i;
3727
28// this mask will prevent overwrites from end of data
29int nc_state::card_calculate_mask(int size)
30{
3831   /* memory block is visible as 16k blocks */
3932   /* mask can only operate on power of two sizes */
4033   /* memory cards normally in power of two sizes */
4134   /* maximum of 64 16k blocks can be accessed using memory paging of nc computer */
4235   /* max card size is therefore 1mb */
43   for (i=14; i<20; i++)
36   for (int i = 14; i < 20; i++)
4437   {
45      if (size<(1<<i))
46         return 0x03f>>(19-i);
38      if (size < (1 << i))
39         return 0x03f >> (19 - i);
4740   }
4841
4942   return 0x03f;
5043}
5144
5245
53/* load card image */
54int nc_state::nc_card_load(device_image_interface &image, unsigned char **ptr)
46// load pcmcia card data
47DEVICE_IMAGE_LOAD_MEMBER( nc_state, nc_pcmcia_card )
5548{
56   int datasize;
57   unsigned char *data;
49   UINT32 size = m_card->common_get_size("rom");
5850
59   /* get file size */
60   datasize = image.length();
51   m_card->rom_alloc(size, GENERIC_ROM8_WIDTH, ENDIANNESS_LITTLE);
52   m_card->common_load_rom(m_card->get_rom_base(), size, "rom");         
6153
62   if (datasize!=0)
63   {
64      /* alloc memory for this data */
65      data = global_alloc_array(unsigned char, datasize);
54   set_card_present_state(1);
55   m_membank_card_ram_mask = card_calculate_mask(size);
6656
67      if (data!=NULL)
68      {
69         m_card_size = datasize;
70
71         /* read whole file */
72         image.fread(data, datasize);
73
74         *ptr = data;
75
76         logerror("File loaded!\r\n");
77
78         m_membank_card_ram_mask = nc_card_calculate_mask(datasize);
79
80         logerror("Mask: %02x\n",m_membank_card_ram_mask);
81
82         /* ok! */
83         return 1;
84      }
85   }
86
87   return 0;
57   return IMAGE_INIT_PASS;
8858}
8959
9060
91DRIVER_INIT_MEMBER( nc_state, nc )
61// save pcmcia card data back
62DEVICE_IMAGE_UNLOAD_MEMBER( nc_state, nc_pcmcia_card )
9263{
93   /* card not present */
94   nc_set_card_present_state(0);
95   /* card ram NULL */
96   m_card_ram = NULL;
64   // if there is no data to write, quit
65   if (!m_card_size)
66      return;
67   
68   logerror("attempting card save\n");
69   
70   // write data
71   image.fwrite(m_card_ram, m_card_size);
72   
73   logerror("write succeeded!\r\n");
74   
75   // set card not present state
76   set_card_present_state(0);
9777   m_card_size = 0;
9878}
9979
100
101/* load pcmcia card */
102DEVICE_IMAGE_LOAD_MEMBER( nc_state, nc_pcmcia_card )
80DRIVER_INIT_MEMBER( nc_state, nc )
10381{
104   /* filename specified */
105
106   /* attempt to load file */
107   if (nc_card_load(image, &m_card_ram))
108   {
109      if (m_card_ram!=NULL)
110      {
111         /* card present! */
112         if (m_membank_card_ram_mask!=0)
113         {
114            nc_set_card_present_state(1);
115         }
116         return IMAGE_INIT_PASS;
117      }
118   }
119
120   /* nc100 can run without a image */
121   return IMAGE_INIT_FAIL;
122}
123
124
125DEVICE_IMAGE_UNLOAD_MEMBER( nc_state, nc_pcmcia_card )
126{
127   /* save card data if there is any */
128   nc_card_save(image);
129
130   /* free ram allocated to card */
131   if (m_card_ram!=NULL)
132   {
133      global_free_array(m_card_ram);
134      m_card_ram = NULL;
135   }
82   // set card not present state
83   set_card_present_state(0);
13684   m_card_size = 0;
137
138   /* set card not present state */
139   nc_set_card_present_state(0);
14085}
86
trunk/src/mess/machine/primo.c
r32600r32601
2121/* Devices */
2222#include "imagedev/cassette.h"
2323#include "imagedev/snapquik.h"
24#include "imagedev/cartslot.h"
2524
2625
2726
r32600r32601
5049   {
5150      case 0x00:  /* Original ROM */
5251         space.unmap_write(0x0000, 0x3fff);
53         membank("bank1")->set_base(memregion("maincpu")->base()+0x10000);
52         membank("bank1")->set_base(memregion("maincpu")->base() + 0x10000);
5453         break;
5554      case 0x01:  /* EPROM extension 1 */
5655         space.unmap_write(0x0000, 0x3fff);
57         membank("bank1")->set_base(memregion("maincpu")->base()+0x14000);
56         membank("bank1")->set_base(m_cart2_rom->base());
5857         break;
5958      case 0x02:  /* RAM */
6059         space.install_write_bank(0x0000, 0x3fff, "bank1");
r32600r32601
6261         break;
6362      case 0x03:  /* EPROM extension 2 */
6463         space.unmap_write(0x0000, 0x3fff);
65         membank("bank1")->set_base(memregion("maincpu")->base()+0x18000);
64         membank("bank1")->set_base(m_cart1_rom->base());
6665         break;
6766   }
6867   logerror ("Memory update: %02x\n", m_port_FD);
r32600r32601
241240   machine().device("maincpu")->set_clock_scale(ioport("CPU_CLOCK")->read() ? 1.5 : 1.0);
242241}
243242
243void primo_state::machine_start()
244{
245   astring region_tag;
246   m_cart1_rom = memregion(region_tag.cpy(m_cart1->tag()).cat(GENERIC_ROM_REGION_TAG));
247   m_cart2_rom = memregion(region_tag.cpy(m_cart2->tag()).cat(GENERIC_ROM_REGION_TAG));   
248}
249
244250void primo_state::machine_reset()
245251{
246252   primo_common_machine_init();
r32600r32601
262268
263269void primo_state::primo_setup_pss (UINT8* snapshot_data, UINT32 snapshot_size)
264270{
265   int i;
266
267271   /* Z80 registers */
268
269272   m_maincpu->set_state_int(Z80_BC, snapshot_data[4] + snapshot_data[5]*256);
270273   m_maincpu->set_state_int(Z80_DE, snapshot_data[6] + snapshot_data[7]*256);
271274   m_maincpu->set_state_int(Z80_HL, snapshot_data[8] + snapshot_data[9]*256);
r32600r32601
292295
293296
294297   /* memory */
295
296   for (i=0; i<0xc000; i++)
297      m_maincpu->space(AS_PROGRAM).write_byte( i+0x4000, snapshot_data[i+38]);
298   for (int i = 0; i < 0xc000; i++)
299      m_maincpu->space(AS_PROGRAM).write_byte(i + 0x4000, snapshot_data[i + 38]);
298300}
299301
300302SNAPSHOT_LOAD_MEMBER( primo_state, primo )
r32600r32601
323325*******************************************************************************/
324326
325327
326void primo_state::primo_setup_pp (UINT8* quickload_data, UINT32 quickload_size)
328void primo_state::primo_setup_pp(UINT8* quickload_data, UINT32 quickload_size)
327329{
328   int i;
329
330330   UINT16 load_addr;
331331   UINT16 start_addr;
332332
333333   load_addr = quickload_data[0] + quickload_data[1]*256;
334334   start_addr = quickload_data[2] + quickload_data[3]*256;
335335
336   for (i=4; i<quickload_size; i++)
336   for (int i = 4; i < quickload_size; i++)
337337      m_maincpu->space(AS_PROGRAM).write_byte(start_addr+i-4, quickload_data[i]);
338338
339339   m_maincpu->set_state_int(Z80_PC, start_addr);
trunk/src/mess/machine/electron.c
r32600r32601
129129READ8_MEMBER(electron_state::electron_read_keyboard)
130130{
131131   UINT8 data = 0;
132   int i;
133   static const char *const keynames[] = {
134      "LINE0", "LINE1", "LINE2", "LINE3", "LINE4", "LINE5", "LINE6",
135      "LINE7", "LINE8", "LINE9", "LINE10", "LINE11", "LINE12", "LINE13"
136   };
137132
138133   //logerror( "PC=%04x: keyboard read from paged rom area, address: %04x", activecpu_get_pc(), offset );
139   for( i = 0; i < 14; i++ )
134   for (int i = 0; i < 14; i++)
140135   {
141      if( !(offset & 1) )
142         data |= ioport(keynames[i])->read() & 0x0f;
136      if (!(offset & 1))
137         data |= m_keybd[i]->read() & 0x0f;
143138
144139      offset = offset >> 1;
145140   }
r32600r32601
349344}
350345
351346void electron_state::machine_start()
352{
353   membank("bank2")->configure_entries(0, 16, memregion("user1")->base(), 0x4000);
347{   
348   UINT8 *lo_rom, *up_rom;
349   astring region_tag;
350   memory_region *cart_rom = memregion(region_tag.cpy(m_cart->tag()).cat(GENERIC_ROM_REGION_TAG));
354351
352   if (cart_rom)
353      up_rom = cart_rom->base();
354   else
355      up_rom = memregion("user1")->base() + 12 * 0x4000;
356   if (cart_rom && cart_rom->bytes() > 0x4000)
357      lo_rom = cart_rom->base() + 0x4000;
358   else
359      lo_rom = memregion("user1")->base();
360   
361   membank("bank2")->configure_entries(0,  1, lo_rom, 0x4000);
362   membank("bank2")->configure_entries(1, 11, memregion("user1")->base() + 0x04000, 0x4000);
363   membank("bank2")->configure_entries(12, 1, up_rom, 0x4000);
364   membank("bank2")->configure_entries(13, 3, memregion("user1")->base() + 0x34000, 0x4000);
365
355366   m_ula.interrupt_status = 0x82;
356367   m_ula.interrupt_control = 0x00;
357368   timer_set(attotime::zero, TIMER_SETUP_BEEP);
r32600r32601
360371
361372DEVICE_IMAGE_LOAD_MEMBER( electron_state, electron_cart )
362373{
363   UINT8 *user1 = memregion("user1")->base() + 0x4000;
364
365374   if (image.software_entry() == NULL)
366375   {
367376      UINT32 filesize = image.length();
368377
369      if ( filesize != 16384 )
378      if (filesize != 16384)
370379      {
371         image.seterror(IMAGE_ERROR_UNSPECIFIED, "Invalid size. Only size 16384 is supported");
380         image.seterror(IMAGE_ERROR_UNSPECIFIED, "Invalid size: Only size 16384 is supported");
372381         return IMAGE_INIT_FAIL;
373382      }
374383
375      if (image.fread( user1 + 12 * 16384, filesize) != filesize)
384      m_cart->rom_alloc(filesize, GENERIC_ROM8_WIDTH, ENDIANNESS_LITTLE);
385      image.fread(m_cart->get_rom_base(), filesize);
386      return IMAGE_INIT_PASS;
387   }
388   else
389   {
390      int upsize = image.get_software_region_length("uprom");
391      int losize = image.get_software_region_length("lorom");
392     
393      if (upsize != 16384 && upsize != 0)
376394      {
377         image.seterror(IMAGE_ERROR_UNSPECIFIED, "Error loading file");
395         image.seterror(IMAGE_ERROR_UNSPECIFIED, "Invalid size for uprom");
378396         return IMAGE_INIT_FAIL;
379397      }
398     
399      if (losize != 16384 && losize != 0)
400      {
401         image.seterror(IMAGE_ERROR_UNSPECIFIED, "Invalid size for lorom");
402         return IMAGE_INIT_FAIL;
403      }
380404
381      return IMAGE_INIT_PASS;
382   }
405      m_cart->rom_alloc(upsize + losize, GENERIC_ROM8_WIDTH, ENDIANNESS_LITTLE);
383406
384   int upsize = image.get_software_region_length("uprom");
385   int losize = image.get_software_region_length("lorom");
407      if (upsize)
408         memcpy(m_cart->get_rom_base(), image.get_software_region("uprom"), upsize);
409     
410      if (losize)
411         memcpy(m_cart->get_rom_base() + upsize, image.get_software_region("lorom"), losize);
386412
387   if ( upsize != 16384 && upsize != 0 )
388   {
389      image.seterror(IMAGE_ERROR_UNSPECIFIED, "Invalid size for uprom");
390      return IMAGE_INIT_FAIL;
413      return IMAGE_INIT_PASS;
391414   }
392
393   if ( losize != 16384 && losize != 0 )
394   {
395      image.seterror(IMAGE_ERROR_UNSPECIFIED, "Invalid size for lorom");
396      return IMAGE_INIT_FAIL;
397   }
398
399   if ( upsize )
400   {
401      memcpy( user1 + 12 * 16384, image.get_software_region("uprom"), upsize );
402   }
403
404   if ( losize )
405   {
406      memcpy( user1 + 0 * 16384, image.get_software_region("lorom"), losize );
407   }
408
409   return IMAGE_INIT_PASS;
410415}
trunk/src/mess/includes/primo.h
r32600r32601
88#define PRIMO_H_
99
1010#include "imagedev/snapquik.h"
11#include "imagedev/cassette.h"
1112#include "bus/cbmiec/cbmiec.h"
1213#include "sound/speaker.h"
13#include "imagedev/cassette.h"
1414
15#include "bus/generic/slot.h"
16#include "bus/generic/carts.h"
17
1518class primo_state : public driver_device
1619{
1720public:
1821   primo_state(const machine_config &mconfig, device_type type, const char *tag)
1922      : driver_device(mconfig, type, tag),
23      m_maincpu(*this, "maincpu"),
2024      m_iec(*this, CBM_IEC_TAG),
21      m_maincpu(*this, "maincpu"),
2225      m_speaker(*this, "speaker"),
23      m_cassette(*this, "cassette") { }
26      m_cassette(*this, "cassette"),
27      m_cart1(*this, "cartslot1"),
28      m_cart2(*this, "cartslot2")
29   { }
2430
31   required_device<cpu_device> m_maincpu;
2532   required_device<cbm_iec_device> m_iec;
33   required_device<speaker_sound_device> m_speaker;
34   required_device<cassette_image_device> m_cassette;
35   required_device<generic_slot_device> m_cart1;
36   required_device<generic_slot_device> m_cart2;
2637
38   memory_region *m_cart1_rom;
39   memory_region *m_cart2_rom;
40
2741   UINT16 m_video_memory_base;
2842   UINT8 m_port_FD;
2943   int m_nmi;
r32600r32601
3650   DECLARE_DRIVER_INIT(primo64);
3751   DECLARE_DRIVER_INIT(primo32);
3852   virtual void machine_reset();
53   virtual void machine_start();
3954   DECLARE_MACHINE_RESET(primob);
4055   UINT32 screen_update_primo(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
4156   INTERRUPT_GEN_MEMBER(primo_vblank_interrupt);
42   required_device<cpu_device> m_maincpu;
43   required_device<speaker_sound_device> m_speaker;
44   required_device<cassette_image_device> m_cassette;
4557   void primo_draw_scanline(bitmap_ind16 &bitmap, int primo_scanline);
4658   void primo_update_memory();
4759   void primo_common_driver_init (primo_state *state);
trunk/src/mess/includes/kyocera.h
r32600r32601
88
99#include "bus/rs232/rs232.h"
1010#include "cpu/i8085/i8085.h"
11#include "imagedev/cartslot.h"
1211#include "imagedev/cassette.h"
1312#include "machine/buffer.h"
1413#include "bus/centronics/ctronics.h"
r32600r32601
2322#include "sound/speaker.h"
2423#include "rendlay.h"
2524
25#include "bus/generic/slot.h"
26#include "bus/generic/carts.h"
27
2628#define SCREEN_TAG      "screen"
2729#define I8085_TAG       "m19"
2830#define I8155_TAG       "m25"
r32600r32601
7173         m_centronics(*this, CENTRONICS_TAG),
7274         m_speaker(*this, "speaker"),
7375         m_cassette(*this, "cassette"),
76         m_opt_cart(*this, "opt_cartslot"),
7477         m_ram(*this, RAM_TAG),
7578         m_rs232(*this, RS232_TAG),
7679         m_rom(*this, I8085_TAG),
77         m_option(*this, "option"),
7880         m_y0(*this, "Y0"),
7981         m_y1(*this, "Y1"),
8082         m_y2(*this, "Y2"),
r32600r32601
103105   required_device<centronics_device> m_centronics;
104106   required_device<speaker_sound_device> m_speaker;
105107   required_device<cassette_image_device> m_cassette;
108   required_device<generic_slot_device> m_opt_cart;
106109   required_device<ram_device> m_ram;
107110   required_device<rs232_port_device> m_rs232;
108111   required_memory_region m_rom;
109   required_memory_region m_option;
110112   required_ioport m_y0;
111113   required_ioport m_y1;
112114   required_ioport m_y2;
r32600r32601
119121   required_ioport m_battery;
120122
121123   virtual void machine_start();
124   memory_region *m_opt_region;
122125
123126   UINT32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
124127
r32600r32601
167170{
168171public:
169172   pc8201_state(const machine_config &mconfig, device_type type, const char *tag)
170      : kc85_state(mconfig, type, tag) { }
173      : kc85_state(mconfig, type, tag),
174         m_cas_cart(*this, "cas_cartslot")
175   { }
171176
172177   virtual void machine_start();
178   required_device<generic_slot_device> m_cas_cart;
173179
174180   DECLARE_READ8_MEMBER( bank_r );
175181   DECLARE_WRITE8_MEMBER( bank_w );
r32600r32601
202208         m_cent_data_out(*this, "cent_data_out"),
203209         m_speaker(*this, "speaker"),
204210         m_cassette(*this, "cassette"),
211         m_opt_cart(*this, "opt_cartslot"),
205212         m_ram(*this, RAM_TAG),
206213         m_rs232(*this, RS232_TAG),
207214         m_rom(*this, I8085_TAG),
208         m_option(*this, "option"),
209215         m_y0(*this, "Y0"),
210216         m_y1(*this, "Y1"),
211217         m_y2(*this, "Y2"),
r32600r32601
224230   required_device<output_latch_device> m_cent_data_out;
225231   required_device<speaker_sound_device> m_speaker;
226232   required_device<cassette_image_device> m_cassette;
233   required_device<generic_slot_device> m_opt_cart;
227234   required_device<ram_device> m_ram;
228235   required_device<rs232_port_device> m_rs232;
229236   required_memory_region m_rom;
230   required_memory_region m_option;
231237   required_ioport m_y0;
232238   required_ioport m_y1;
233239   required_ioport m_y2;
r32600r32601
239245   required_ioport m_y8;
240246
241247   virtual void machine_start();
248   memory_region *m_opt_region;
242249
243250   UINT32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
244251
trunk/src/mess/includes/nc.h
r32600r32601
1414#include "machine/nvram.h"
1515#include "sound/beep.h"
1616
17#include "bus/generic/slot.h"
18#include "bus/generic/carts.h"
19
1720#define NC_NUM_COLOURS 4
1821
1922#define NC_SCREEN_WIDTH        480
r32600r32601
4144      m_beeper1(*this, "beep.1"),
4245      m_beeper2(*this, "beep.2"),
4346      m_centronics(*this, "centronics"),
47      m_card(*this, "cardslot"),
4448      m_uart(*this, "uart"),
4549      m_uart_clock(*this, "uart_clock"),
4650      m_nvram(*this, "nvram")
r32600r32601
96100
97101private:
98102   void nc200_video_set_backlight(int state);
99   void nc_card_save(device_image_interface &image);
100   int nc_card_calculate_mask(int size);
101   int nc_card_load(device_image_interface &image, unsigned char **ptr);
102   void nc_set_card_present_state(int state);
103   int card_calculate_mask(int size);
104   void set_card_present_state(int state);
103105   void nc_update_interrupts();
104106   void nc_refresh_memory_bank_config(int bank);
105107   void nc_refresh_memory_config();
r32600r32601
115117   required_device<beep_device> m_beeper1;
116118   required_device<beep_device> m_beeper2;
117119   required_device<centronics_device> m_centronics;
120   required_device<generic_slot_device> m_card;
118121   required_device<i8251_device> m_uart;
119122   required_device<clock_device> m_uart_clock;
120123   required_device<nvram_device> m_nvram;
r32600r32601
134137   int m_previous_inputport_10_state;
135138   int m_previous_alarm_state;
136139   UINT8 m_nc200_uart_interrupt_irq;
137   unsigned char *m_card_ram;
140   memory_region *m_card_ram;
138141   int m_membank_card_ram_mask;
142   int m_card_size;
139143   unsigned long m_display_memory_start;
140144   UINT8 m_type;
141   int m_card_size;
142145   int m_nc200_backlight;
143146
144147   int m_centronics_ack;
trunk/src/mess/includes/electron.h
r32600r32601
1414#include "imagedev/cassette.h"
1515#include "sound/beep.h"
1616
17#include "bus/generic/slot.h"
18#include "bus/generic/carts.h"
19
1720/* Interrupts */
1821#define INT_HIGH_TONE       0x40
1922#define INT_TRANSMIT_EMPTY  0x20
r32600r32601
6770      : driver_device(mconfig, type, tag),
6871      m_maincpu(*this, "maincpu"),
6972      m_cassette(*this, "cassette"),
70      m_beeper(*this, "beeper")   { }
73      m_beeper(*this, "beeper"),
74      m_cart(*this, "cartslot"),
75      m_keybd(*this, "LINE")   
76   { }
7177
7278   ULA m_ula;
7379   emu_timer *m_tape_timer;
r32600r32601
94100   required_device<cpu_device> m_maincpu;
95101   required_device<cassette_image_device> m_cassette;
96102   required_device<beep_device> m_beeper;
103   required_device<generic_slot_device> m_cart;
104   required_ioport_array<14> m_keybd;
97105   inline UINT8 read_vram( UINT16 addr );
98106   inline void electron_plot_pixel(bitmap_ind16 &bitmap, int x, int y, UINT32 color);
99107   void electron_interrupt_handler(int mode, int interrupt);
trunk/src/mess/drivers/kyocera.c
r32600r32601
380380   UINT8 data = 0xff;
381381
382382   if (m_rom_sel)
383   {
384      data = m_option->base()[m_rom_addr & 0x1ffff];
385   }
383      data = m_cas_cart->read_rom(space, m_rom_addr & 0x1ffff);
386384
387385   return data;
388386}
r32600r32601
11691167void kc85_state::machine_start()
11701168{
11711169   address_space &program = m_maincpu->space(AS_PROGRAM);
1172
1170   
1171   astring region_tag;
1172   m_opt_region = memregion(region_tag.cpy(m_opt_cart->tag()).cat(GENERIC_ROM_REGION_TAG));
1173   
11731174   /* initialize RTC */
11741175   m_rtc->cs_w(1);
11751176   m_rtc->oe_w(1);
r32600r32601
11781179   program.install_read_bank(0x0000, 0x7fff, "bank1");
11791180   program.unmap_write(0x0000, 0x7fff);
11801181   membank("bank1")->configure_entry(0, m_rom->base());
1181   membank("bank1")->configure_entry(1, m_option->base());
1182   membank("bank1")->configure_entry(1, m_opt_region ? m_opt_region->base() : m_rom->base());
11821183   membank("bank1")->set_entry(0);
11831184
11841185   /* configure RAM banking */
r32600r32601
12091210void pc8201_state::machine_start()
12101211{
12111212   UINT8 *ram = m_ram->pointer();
1212
1213   
1214   astring region_tag;
1215   m_opt_region = memregion(region_tag.cpy(m_opt_cart->tag()).cat(GENERIC_ROM_REGION_TAG));
1216   
12131217   /* initialize RTC */
12141218   m_rtc->cs_w(1);
12151219   m_rtc->oe_w(1);
12161220
12171221   /* configure ROM banking */
12181222   membank("bank1")->configure_entry(0, m_rom->base());
1219   membank("bank1")->configure_entry(1, m_option->base());
1223   membank("bank1")->configure_entry(1, m_opt_region ? m_opt_region->base() : m_rom->base());
12201224   membank("bank1")->configure_entries(2, 2, ram + 0x8000, 0x8000);
12211225   membank("bank1")->set_entry(0);
12221226
r32600r32601
12401244void trsm100_state::machine_start()
12411245{
12421246   address_space &program = m_maincpu->space(AS_PROGRAM);
1243
1247   
1248   astring region_tag;
1249   m_opt_region = memregion(region_tag.cpy(m_opt_cart->tag()).cat(GENERIC_ROM_REGION_TAG));
1250   
12441251   /* initialize RTC */
12451252   m_rtc->cs_w(1);
12461253   m_rtc->oe_w(1);
r32600r32601
12491256   program.install_read_bank(0x0000, 0x7fff, "bank1");
12501257   program.unmap_write(0x0000, 0x7fff);
12511258   membank("bank1")->configure_entry(0, m_rom->base());
1252   membank("bank1")->configure_entry(1, m_option->base());
1259   membank("bank1")->configure_entry(1, m_opt_region ? m_opt_region->base() : m_rom->base());
12531260   membank("bank1")->set_entry(0);
12541261
12551262   /* configure RAM banking */
r32600r32601
12891296
12901297void tandy200_state::machine_start()
12911298{
1299   astring region_tag;
1300   m_opt_region = memregion(region_tag.cpy(m_opt_cart->tag()).cat(GENERIC_ROM_REGION_TAG));
1301
12921302   /* configure ROM banking */
12931303   membank("bank1")->configure_entry(0, m_rom->base());
12941304   membank("bank1")->configure_entry(1, m_rom->base() + 0x10000);
1295   membank("bank1")->configure_entry(2, m_option->base());
1305   membank("bank1")->configure_entry(2, m_opt_region ? m_opt_region->base() : m_rom->base());
12961306   membank("bank1")->set_entry(0);
12971307
12981308   /* configure RAM banking */
r32600r32601
13741384   MCFG_CASSETTE_DEFAULT_STATE(CASSETTE_STOPPED | CASSETTE_MOTOR_DISABLED | CASSETTE_SPEAKER_ENABLED)
13751385
13761386   /* option ROM cartridge */
1377   MCFG_CARTSLOT_ADD("cart")
1378   MCFG_CARTSLOT_EXTENSION_LIST("rom,bin")
1379   MCFG_CARTSLOT_NOT_MANDATORY
1380   MCFG_CARTSLOT_INTERFACE("trsm100_cart")
1387   MCFG_GENERIC_CARTSLOT_ADD("opt_cartslot", generic_linear_slot, "trsm100_cart")
1388   MCFG_GENERIC_EXTENSIONS("bin,rom")
13811389
13821390   /* software lists */
13831391   MCFG_SOFTWARE_LIST_ADD("cart_list", "trsm100")
r32600r32601
14261434   MCFG_CASSETTE_DEFAULT_STATE(CASSETTE_STOPPED | CASSETTE_MOTOR_DISABLED | CASSETTE_SPEAKER_ENABLED)
14271435
14281436   /* option ROM cartridge */
1429   MCFG_CARTSLOT_ADD("cart")
1430   MCFG_CARTSLOT_EXTENSION_LIST("rom,bin")
1431   MCFG_CARTSLOT_NOT_MANDATORY
1432   MCFG_CARTSLOT_INTERFACE("pc8201_cart")
1437   MCFG_GENERIC_CARTSLOT_ADD("opt_cartslot", generic_linear_slot, "pc8201_cart")
1438   MCFG_GENERIC_EXTENSIONS("bin,rom")
14331439
14341440   /* 128KB ROM cassette */
1435   MCFG_CARTSLOT_ADD("cart2")
1436   MCFG_CARTSLOT_EXTENSION_LIST("rom,bin")
1437   MCFG_CARTSLOT_NOT_MANDATORY
1438   MCFG_CARTSLOT_INTERFACE("pc8201_cart2")
1441   MCFG_GENERIC_CARTSLOT_ADD("cas_cartslot", generic_linear_slot, "pc8201_cart2")
1442   MCFG_GENERIC_EXTENSIONS("bin,rom")
14391443
14401444   /* software lists */
14411445   MCFG_SOFTWARE_LIST_ADD("cart_list", "pc8201")
r32600r32601
14891493//  MCFG_MC14412_ADD(MC14412_TAG, XTAL_1MHz)
14901494
14911495   /* option ROM cartridge */
1492   MCFG_CARTSLOT_ADD("cart")
1493   MCFG_CARTSLOT_EXTENSION_LIST("rom,bin")
1494   MCFG_CARTSLOT_NOT_MANDATORY
1495   MCFG_CARTSLOT_INTERFACE("trsm100_cart")
1496   MCFG_GENERIC_CARTSLOT_ADD("opt_cartslot", generic_linear_slot, "trsm100_cart")
1497   MCFG_GENERIC_EXTENSIONS("bin,rom")
14961498
14971499   /* software lists */
14981500   MCFG_SOFTWARE_LIST_ADD("cart_list", "trsm100")
r32600r32601
15581560   MCFG_CASSETTE_DEFAULT_STATE(CASSETTE_STOPPED | CASSETTE_MOTOR_DISABLED | CASSETTE_SPEAKER_ENABLED)
15591561
15601562   /* option ROM cartridge */
1561   MCFG_CARTSLOT_ADD("cart")
1562   MCFG_CARTSLOT_EXTENSION_LIST("rom,bin")
1563   MCFG_CARTSLOT_NOT_MANDATORY
1564   MCFG_CARTSLOT_INTERFACE("tandy200_cart")
1563   MCFG_GENERIC_CARTSLOT_ADD("opt_cartslot", generic_linear_slot, "tandy200_cart")
1564   MCFG_GENERIC_EXTENSIONS("bin,rom")
15651565
15661566   /* software lists */
15671567   MCFG_SOFTWARE_LIST_ADD("cart_list", "tandy200")
r32600r32601
15771577ROM_START( kc85 )
15781578   ROM_REGION( 0x8000, I8085_TAG, 0 )
15791579   ROM_LOAD( "kc85rom.bin", 0x0000, 0x8000, CRC(8a9ddd6b) SHA1(9d18cb525580c9e071e23bc3c472380aa46356c0) )
1580
1581   ROM_REGION( 0x8000, "option", ROMREGION_ERASEFF )
1582   ROM_CART_LOAD("cart", 0x0000, 0x8000, ROM_MIRROR | ROM_OPTIONAL)
15831580ROM_END
15841581
15851582ROM_START( pc8201 )
15861583   ROM_REGION( 0x10000, I8085_TAG, 0 )
15871584   ROM_LOAD( "3256a41-3b1 n 82 basic.rom0", 0x0000, 0x8000, CRC(3dbaa484) SHA1(9886a973faa639ca9e0ba478790bab20e5163495) )
1588
1589   ROM_REGION( 0x8000, "option", ROMREGION_ERASEFF )
1590   ROM_CART_LOAD("cart1", 0x0000, 0x8000, ROM_MIRROR | ROM_OPTIONAL)
1591
1592   ROM_REGION( 0x20000, "cassette", ROMREGION_ERASEFF )
1593   ROM_CART_LOAD("cart2", 0x0000, 0x20000, ROM_MIRROR | ROM_OPTIONAL)
15941585ROM_END
15951586
15961587ROM_START( pc8201a )
15971588   ROM_REGION( 0x10000, I8085_TAG, 0 )
15981589   ROM_LOAD( "pc8201rom.rom", 0x0000, 0x8000, CRC(30555035) SHA1(96f33ff235db3028bf5296052acedbc94437c596) )
1599
1600   ROM_REGION( 0x8000, "option", ROMREGION_ERASEFF )
1601   ROM_CART_LOAD("cart", 0x0000, 0x8000, ROM_MIRROR | ROM_OPTIONAL)
1602
1603   ROM_REGION( 0x20000, "cassette", ROMREGION_ERASEFF )
1604   ROM_CART_LOAD("cart2", 0x0000, 0x20000, ROM_MIRROR | ROM_OPTIONAL)
16051590ROM_END
16061591
16071592ROM_START( npc8300 )
16081593   ROM_REGION( 0x10000, I8085_TAG, 0 )
16091594   ROM_LOAD( "831000-438_n83a_basic_1986_microsoft_8716_z01.bin", 0x0000, 0x8000, CRC(a3c15dcb) SHA1(f0322dfe3f2e951de043bf6d0973e6ffc2c87181))
1610
1611   ROM_REGION( 0x8000, "option", ROMREGION_ERASEFF )
1612   ROM_CART_LOAD("cart1", 0x0000, 0x8000, ROM_MIRROR | ROM_OPTIONAL)
1613
1614   ROM_REGION( 0x20000, "cassette", ROMREGION_ERASEFF )
1615   ROM_CART_LOAD("cart2", 0x0000, 0x20000, ROM_MIRROR | ROM_OPTIONAL)
16161595ROM_END
16171596
16181597ROM_START( trsm100 )
r32600r32601
16251604   */
16261605   ROM_REGION( 0x8000, I8085_TAG, 0 )
16271606   ROM_LOAD( "m100rom.m12",  0x0000, 0x8000, CRC(730a3611) SHA1(094dbc4ac5a4ea5cdf51a1ac581a40a9622bb25d) )
1628
1629   // increased to 0x30000 to fully load 'Booster Pack', but its banking is still unknown
1630   ROM_REGION( 0x30000, "option", ROMREGION_ERASEFF )
1631   ROM_CART_LOAD("cart", 0x0000, 0x30000, ROM_MIRROR | ROM_OPTIONAL)
16321607ROM_END
16331608
16341609ROM_START( m10 )
16351610   // 3256C02-4B3/I        Italian
16361611   ROM_REGION( 0x8010, I8085_TAG, 0 )
16371612   ROM_LOAD( "m10rom.m12", 0x0000, 0x8000, CRC(f0e8447a) SHA1(d58867276213116a79f7074109b7d7ce02e8a3af) )
1638
1639   ROM_REGION( 0x8000, "option", ROMREGION_ERASEFF )
1640   ROM_CART_LOAD("cart", 0x0000, 0x8000, ROM_MIRROR | ROM_OPTIONAL)
16411613ROM_END
16421614
16431615ROM_START( tandy102 )
16441616   ROM_REGION( 0x8000, I8085_TAG, 0 )
16451617   ROM_LOAD( "m102rom.m12", 0x0000, 0x8000, CRC(08e9f89c) SHA1(b6ede7735a361c80419f4c9c0e36e7d480c36d11) )
1646
1647   ROM_REGION( 0x8000, "option", ROMREGION_ERASEFF )
1648   ROM_CART_LOAD("cart", 0x0000, 0x8000, ROM_MIRROR | ROM_OPTIONAL)
16491618ROM_END
16501619
16511620ROM_START( tandy200 )
r32600r32601
16551624   ROM_LOAD( "rom #2.m14",   0x10000, 0x8000, NO_DUMP )
16561625   ROM_LOAD( "t200rom.bin", 0x0000, 0xa000, BAD_DUMP CRC(e3358b38) SHA1(35d4e6a5fb8fc584419f57ec12b423f6021c0991) ) /* Y2K hacked */
16571626   ROM_CONTINUE(           0x10000, 0x8000 )
1658
1659   ROM_REGION( 0x8000, "option", ROMREGION_ERASEFF )
1660   ROM_CART_LOAD("cart", 0x0000, 0x8000, ROM_NOMIRROR | ROM_OPTIONAL)
16611627ROM_END
16621628
16631629/* System Drivers */
trunk/src/mess/drivers/electron.c
r32600r32601
2828#include "cpu/m6502/m6502.h"
2929#include "includes/electron.h"
3030#include "imagedev/cassette.h"
31#include "imagedev/cartslot.h"
3231#include "formats/uef_cas.h"
3332#include "sound/beep.h"
3433
r32600r32601
6160
6261static INPUT_PORTS_START( electron )
6362
64   PORT_START("LINE0")     /* Keyboard line 0 */
63   PORT_START("LINE.0")
6564   PORT_BIT(0x01,  IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("\xE2\x86\x92 | \\") PORT_CODE(KEYCODE_BACKSLASH) PORT_CHAR(UCHAR_MAMEKEY(RIGHT)) PORT_CHAR('|') PORT_CHAR('\\') // on the real keyboard, this would be on the 1st row, the 3rd key after 0
6665   PORT_BIT(0x02,  IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("COPY") PORT_CODE(KEYCODE_END)  PORT_CHAR(UCHAR_MAMEKEY(F1)) PORT_CHAR('[') PORT_CHAR(']')
6766   /* PORT_BIT(0x04,  IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("<NONE>") PORT_CODE(KEYCODE_) */
6867   PORT_BIT(0x08,  IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_SPACE)      PORT_CHAR(' ')
6968
70   PORT_START("LINE1")     /* Keyboard line 1 */
69   PORT_START("LINE.1")
7170   PORT_BIT(0x01,  IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("\xE2\x86\x90 ^ ~") PORT_CODE(KEYCODE_EQUALS) PORT_CHAR(UCHAR_MAMEKEY(LEFT)) PORT_CHAR('^') PORT_CHAR('~')
7271   PORT_BIT(0x02,  IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("\xE2\x86\x93 _ }") PORT_CODE(KEYCODE_CLOSEBRACE) PORT_CHAR(UCHAR_MAMEKEY(DOWN)) PORT_CHAR('_') PORT_CHAR('}')
7372   PORT_BIT(0x04,  IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_ENTER)      PORT_CHAR(13)
7473   PORT_BIT(0x08,  IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("DELETE") PORT_CODE(KEYCODE_BACKSPACE) PORT_CHAR(8)
7574
76   PORT_START("LINE2")     /* Keyboard line 2 */
75   PORT_START("LINE.2")
7776   PORT_BIT(0x01,  IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_MINUS)      PORT_CHAR('-') PORT_CHAR('=')
7877   PORT_BIT(0x02,  IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("\xE2\x86\x91 \xC2\xA3 {") PORT_CODE(KEYCODE_OPENBRACE) PORT_CHAR(UCHAR_MAMEKEY(UP)) PORT_CHAR('\xA3') PORT_CHAR('{')
7978   PORT_BIT(0x04,  IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_QUOTE)      PORT_CHAR(':') PORT_CHAR('*')
8079   /* PORT_BIT(0x08,  IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("<NONE>") PORT_CODE(KEYCODE_) */
8180
82   PORT_START("LINE3")     /* Keyboard line 3 */
81   PORT_START("LINE.3")
8382   PORT_BIT(0x01,  IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_0)          PORT_CHAR('0') PORT_CHAR('@')
8483   PORT_BIT(0x02,  IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_P)          PORT_CHAR('p') PORT_CHAR('P')
8584   PORT_BIT(0x04,  IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_COLON)      PORT_CHAR(';') PORT_CHAR('+')
8685   PORT_BIT(0x08,  IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_SLASH)      PORT_CHAR('/') PORT_CHAR('?')
8786
88   PORT_START("LINE4")     /* Keyboard line 4 */
87   PORT_START("LINE.4")
8988   PORT_BIT(0x01,  IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_9)          PORT_CHAR('9') PORT_CHAR(')')
9089   PORT_BIT(0x02,  IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_O)          PORT_CHAR('o') PORT_CHAR('O')
9190   PORT_BIT(0x04,  IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_L)          PORT_CHAR('l') PORT_CHAR('L')
9291   PORT_BIT(0x08,  IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_STOP)       PORT_CHAR('.') PORT_CHAR('>')
9392
94   PORT_START("LINE5")     /* Keyboard line 5 */
93   PORT_START("LINE.5")
9594   PORT_BIT(0x01,  IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_8)          PORT_CHAR('8') PORT_CHAR('(')
9695   PORT_BIT(0x02,  IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_I)          PORT_CHAR('i') PORT_CHAR('I')
9796   PORT_BIT(0x04,  IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_K)          PORT_CHAR('k') PORT_CHAR('K')
9897   PORT_BIT(0x08,  IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_COMMA)      PORT_CHAR(',') PORT_CHAR('<')
9998
100   PORT_START("LINE6")     /* Keyboard line 6 */
99   PORT_START("LINE.6")
101100   PORT_BIT(0x01,  IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_7)          PORT_CHAR('7') PORT_CHAR('\'')
102101   PORT_BIT(0x02,  IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_U)          PORT_CHAR('u') PORT_CHAR('U')
103102   PORT_BIT(0x04,  IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_J)          PORT_CHAR('j') PORT_CHAR('J')
104103   PORT_BIT(0x08,  IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_M)          PORT_CHAR('m') PORT_CHAR('M')
105104
106   PORT_START("LINE7")     /* Keyboard line 7 */
105   PORT_START("LINE.7")
107106   PORT_BIT(0x01,  IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_6)          PORT_CHAR('6') PORT_CHAR('&')
108107   PORT_BIT(0x02,  IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_Y)          PORT_CHAR('y') PORT_CHAR('Y')
109108   PORT_BIT(0x04,  IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_H)          PORT_CHAR('h') PORT_CHAR('H')
110109   PORT_BIT(0x08,  IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_N)          PORT_CHAR('n') PORT_CHAR('N')
111110
112   PORT_START("LINE8")     /* Keyboard line 8 */
111   PORT_START("LINE.8")
113112   PORT_BIT(0x01,  IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_5)          PORT_CHAR('5') PORT_CHAR('%')
114113   PORT_BIT(0x02,  IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_T)          PORT_CHAR('t') PORT_CHAR('T')
115114   PORT_BIT(0x04,  IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_G)          PORT_CHAR('g') PORT_CHAR('G')
116115   PORT_BIT(0x08,  IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_B)          PORT_CHAR('b') PORT_CHAR('B')
117116
118   PORT_START("LINE9")     /* Keyboard line 9 */
117   PORT_START("LINE.9")
119118   PORT_BIT(0x01,  IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_4)          PORT_CHAR('4') PORT_CHAR('$')
120119   PORT_BIT(0x02,  IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_R)          PORT_CHAR('r') PORT_CHAR('R')
121120   PORT_BIT(0x04,  IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_F)          PORT_CHAR('f') PORT_CHAR('F')
122121   PORT_BIT(0x08,  IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_V)          PORT_CHAR('v') PORT_CHAR('V')
123122
124   PORT_START("LINE10")    /* Keyboard line 10 */
123   PORT_START("LINE.10")
125124   PORT_BIT(0x01,  IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_3)          PORT_CHAR('3') PORT_CHAR('#')
126125   PORT_BIT(0x02,  IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_E)          PORT_CHAR('e') PORT_CHAR('E')
127126   PORT_BIT(0x04,  IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_D)          PORT_CHAR('d') PORT_CHAR('D')
128127   PORT_BIT(0x08,  IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_C)          PORT_CHAR('c') PORT_CHAR('C')
129128
130   PORT_START("LINE11")    /* Keyboard line 11 */
129   PORT_START("LINE.11")
131130   PORT_BIT(0x01,  IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_2)          PORT_CHAR('2') PORT_CHAR('"')
132131   PORT_BIT(0x02,  IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_W)          PORT_CHAR('w') PORT_CHAR('W')
133132   PORT_BIT(0x04,  IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_S)          PORT_CHAR('s') PORT_CHAR('S')
134133   PORT_BIT(0x08,  IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_X)          PORT_CHAR('x') PORT_CHAR('X')
135134
136   PORT_START("LINE12")    /* Keyboard line 12 */
135   PORT_START("LINE.12")
137136   PORT_BIT(0x01,  IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_1)          PORT_CHAR('1') PORT_CHAR('!')
138137   PORT_BIT(0x02,  IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_Q)          PORT_CHAR('q') PORT_CHAR('Q')
139138   PORT_BIT(0x04,  IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_A)          PORT_CHAR('a') PORT_CHAR('A')
140139   PORT_BIT(0x08,  IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_Z)          PORT_CHAR('z') PORT_CHAR('Z')
141140
142   PORT_START("LINE13")    /* Keyboard line 13 */
141   PORT_START("LINE.13")
143142   PORT_BIT(0x01,  IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("ESCAPE") PORT_CODE(KEYCODE_ESC) PORT_CHAR(UCHAR_MAMEKEY(ESC))
144143   PORT_BIT(0x02,  IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("FUNC") PORT_CODE(KEYCODE_TAB) PORT_CHAR(UCHAR_MAMEKEY(LALT))
145144   PORT_BIT(0x04,  IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_LCONTROL) PORT_CODE(KEYCODE_RCONTROL) PORT_CHAR(UCHAR_SHIFT_2)
r32600r32601
147146
148147INPUT_PORTS_END
149148
150/* Electron Rom Load */
151ROM_START(electron)
152   ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASEFF )
153   ROM_REGION( 0x44000, "user1", 0 ) /* OS Rom */
154   ROM_LOAD( "os.rom", 0x40000, 0x4000, CRC(bf63fb1f) SHA1(a48b8fa0cfb09140e808ac8a187316c605a0b32e) ) /* Os rom */
155   /* 00000  0 available for cartridges                     */
156   /* 04000  1 available for cartridges                     */
157   /* 08000  2 available for cartridges                     */
158   /* 0c000  3 available for cartridges                     */
159   /* 10000  4 available for cartridges                     */
160   /* 14000  5 available for cartridges                     */
161   /* 18000  6 available for cartridges                     */
162   /* 1c000  7 available for cartridges                     */
163   /* 20000  8 keyboard                                     */
164   /* 24000  9 keyboard mirror                              */
165   /* 28000 10 Basic rom                                    */ ROM_LOAD( "basic.rom", 0x28000, 0x4000, CRC(79434781) SHA1(4a7393f3a45ea309f744441c16723e2ef447a281) )
166   /* 2c000 11 Basic rom mirror                             */ ROM_COPY( "user1", 0x28000, 0x2c000, 0x4000 )
167   /* 30000 12 available for cartridges with a language ROM */
168   /* 34000 13 available for cartridges with a language ROM */
169   /* 38000 14 available for cartridges with a language ROM */
170   /* 3c000 15 available for cartridges with a language ROM */
171ROM_END
172
173149static MACHINE_CONFIG_START( electron, electron_state )
174150   MCFG_CPU_ADD( "maincpu", M6502, 2000000 )
175151   MCFG_CPU_PROGRAM_MAP( electron_mem)
176152
177
178153   MCFG_SCREEN_ADD("screen", RASTER)
179154   MCFG_SCREEN_REFRESH_RATE( 50.08 )
180155   MCFG_SCREEN_SIZE( 640, 312 )
r32600r32601
186161   MCFG_PALETTE_ADD( "palette", 16 )
187162   MCFG_PALETTE_INIT_OWNER(electron_state, electron)
188163
189
190164   MCFG_SPEAKER_STANDARD_MONO( "mono" )
191165   MCFG_SOUND_ADD( "beeper", BEEP, 0 )
192166   MCFG_SOUND_ROUTE( ALL_OUTPUTS, "mono", 1.00 )
r32600r32601
195169   MCFG_CASSETTE_FORMATS(uef_cassette_formats)
196170   MCFG_CASSETTE_DEFAULT_STATE(CASSETTE_PLAY)
197171
198   MCFG_CARTSLOT_ADD("cart")
199   MCFG_CARTSLOT_EXTENSION_LIST("bin")
200   MCFG_CARTSLOT_NOT_MANDATORY
201   MCFG_CARTSLOT_LOAD(electron_state, electron_cart)
202   MCFG_CARTSLOT_INTERFACE("electron_cart")
172   MCFG_GENERIC_CARTSLOT_ADD("cartslot", generic_plain_slot, "electron_cart")
173   MCFG_GENERIC_LOAD(electron_state, electron_cart)
174
203175   /* software lists */
204176   MCFG_SOFTWARE_LIST_ADD("cart_list","electron_cart")
205177MACHINE_CONFIG_END
206178
207179
180/* Electron Rom Load */
181ROM_START(electron)
182   ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASEFF )
183   ROM_REGION( 0x44000, "user1", 0 ) /* OS Rom */
184   ROM_LOAD( "os.rom", 0x40000, 0x4000, CRC(bf63fb1f) SHA1(a48b8fa0cfb09140e808ac8a187316c605a0b32e) ) /* Os rom */
185   /* 00000  0 available for cartridges                     */
186   /* 04000  1 available for cartridges                     */
187   /* 08000  2 available for cartridges                     */
188   /* 0c000  3 available for cartridges                     */
189   /* 10000  4 available for cartridges                     */
190   /* 14000  5 available for cartridges                     */
191   /* 18000  6 available for cartridges                     */
192   /* 1c000  7 available for cartridges                     */
193   /* 20000  8 keyboard                                     */
194   /* 24000  9 keyboard mirror                              */
195   /* 28000 10 Basic rom                                    */
196   ROM_LOAD( "basic.rom", 0x28000, 0x4000, CRC(79434781) SHA1(4a7393f3a45ea309f744441c16723e2ef447a281) )
197   /* 2c000 11 Basic rom mirror                             */
198   ROM_COPY( "user1", 0x28000, 0x2c000, 0x4000 )
199   /* 30000 12 available for cartridges with a language ROM */
200   /* 34000 13 available for cartridges with a language ROM */
201   /* 38000 14 available for cartridges with a language ROM */
202   /* 3c000 15 available for cartridges with a language ROM */
203ROM_END
204
208205/*     YEAR  NAME      PARENT COMPAT    MACHINE   INPUT     INIT  COMPANY  FULLNAME */
209206COMP ( 1983, electron, 0,     0,        electron, electron, driver_device, 0,    "Acorn", "Acorn Electron", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS )
trunk/src/mess/drivers/primo.c
r32600r32601
217217      PORT_BIT( 0x4000, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("\xE2\x80\x9D") PORT_CODE(KEYCODE_OPENBRACE) PORT_CHAR(UCHAR_MAMEKEY(F7))
218218      PORT_BIT( 0x8000, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("BRK")   PORT_CODE(KEYCODE_ESC)      PORT_CHAR(UCHAR_MAMEKEY(ESC))
219219
220   PORT_START( "RESET" )   /* IN4 */
220   PORT_START( "RESET" )
221221      PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Reset") PORT_CODE(KEYCODE_F1)         PORT_CHAR(UCHAR_MAMEKEY(F1))
222222      PORT_BIT( 0xfe, IP_ACTIVE_HIGH, IPT_UNUSED )
223223
224   PORT_START( "CPU_CLOCK" )   /* IN5 */
224   PORT_START( "CPU_CLOCK" )
225225      PORT_CONFNAME(0x01, 0x00, "CPU clock" )
226226      PORT_CONFSETTING(   0x00, "2.50 MHz" )
227227      PORT_CONFSETTING(   0x01, "3.75 MHz" )
228228
229   PORT_START( "MEMORY_EXPANSION" )    /* IN6 */
229   PORT_START( "MEMORY_EXPANSION" )
230230      PORT_CONFNAME(0x01, 0x00, "EPROM+RAM Expansion" )
231231      PORT_CONFSETTING(   0x00, DEF_STR( On ) )
232232      PORT_CONFSETTING(   0x01, DEF_STR( Off ) )
r32600r32601
245245   MCFG_CPU_IO_MAP( primoa_port)
246246   MCFG_CPU_VBLANK_INT_DRIVER("screen", primo_state,  primo_vblank_interrupt)
247247
248
249248   /* video hardware */
250249   MCFG_SCREEN_ADD("screen", RASTER)
251250   MCFG_SCREEN_REFRESH_RATE( 50 )
r32600r32601
277276   MCFG_CBM_IEC_ADD(NULL)
278277
279278   /* cartridge */
280   MCFG_CARTSLOT_ADD("cart1")
281   MCFG_CARTSLOT_EXTENSION_LIST("rom")
282   MCFG_CARTSLOT_NOT_MANDATORY
283   MCFG_CARTSLOT_ADD("cart2")
284   MCFG_CARTSLOT_EXTENSION_LIST("rom")
285   MCFG_CARTSLOT_NOT_MANDATORY
279   MCFG_GENERIC_CARTSLOT_ADD("cartslot1", generic_plain_slot, NULL)
280   MCFG_GENERIC_EXTENSIONS("bin,rom")
281   MCFG_GENERIC_CARTSLOT_ADD("cartslot2", generic_plain_slot, NULL)
282   MCFG_GENERIC_EXTENSIONS("bin,rom")
286283MACHINE_CONFIG_END
287284
288285static MACHINE_CONFIG_DERIVED( primoa48, primoa32 )
289   MCFG_CPU_MODIFY( "maincpu" )
290   MCFG_CPU_PROGRAM_MAP( primo48_mem)
286   MCFG_CPU_MODIFY("maincpu")
287   MCFG_CPU_PROGRAM_MAP(primo48_mem)
291288MACHINE_CONFIG_END
292289
293290static MACHINE_CONFIG_DERIVED( primoa64, primoa32 )
294   MCFG_CPU_MODIFY( "maincpu" )
295   MCFG_CPU_PROGRAM_MAP( primo64_mem)
291   MCFG_CPU_MODIFY("maincpu")
292   MCFG_CPU_PROGRAM_MAP(primo64_mem)
296293MACHINE_CONFIG_END
297294
298295static MACHINE_CONFIG_DERIVED( primob32, primoa32 )
299   MCFG_CPU_MODIFY( "maincpu" )
300   MCFG_CPU_IO_MAP( primob_port)
296   MCFG_CPU_MODIFY("maincpu")
297   MCFG_CPU_IO_MAP(primob_port)
301298
302   MCFG_MACHINE_RESET_OVERRIDE(primo_state, primob )
299   MCFG_MACHINE_RESET_OVERRIDE(primo_state, primob)
303300MACHINE_CONFIG_END
304301
305302static MACHINE_CONFIG_DERIVED( primob48, primoa48 )
306   MCFG_CPU_MODIFY( "maincpu" )
307   MCFG_CPU_IO_MAP( primob_port)
303   MCFG_CPU_MODIFY("maincpu")
304   MCFG_CPU_IO_MAP(primob_port)
308305
309   MCFG_MACHINE_RESET_OVERRIDE(primo_state, primob )
306   MCFG_MACHINE_RESET_OVERRIDE(primo_state, primob)
310307MACHINE_CONFIG_END
311308
312309static MACHINE_CONFIG_DERIVED( primob64, primoa64 )
313   MCFG_CPU_MODIFY( "maincpu" )
314   MCFG_CPU_IO_MAP( primob_port)
310   MCFG_CPU_MODIFY("maincpu")
311   MCFG_CPU_IO_MAP(primob_port)
315312
316   MCFG_MACHINE_RESET_OVERRIDE(primo_state, primob )
313   MCFG_MACHINE_RESET_OVERRIDE(primo_state, primob)
317314MACHINE_CONFIG_END
318315
319316static MACHINE_CONFIG_DERIVED( primoc64, primoa64 )
320   MCFG_CPU_MODIFY( "maincpu" )
321   MCFG_CPU_IO_MAP( primob_port)
317   MCFG_CPU_MODIFY("maincpu")
318   MCFG_CPU_IO_MAP(primob_port)
322319
323   MCFG_MACHINE_RESET_OVERRIDE(primo_state, primob )
320   MCFG_MACHINE_RESET_OVERRIDE(primo_state, primob)
324321MACHINE_CONFIG_END
325322
326323ROM_START( primoa32 )
327   ROM_REGION( 0x1c000, "maincpu", ROMREGION_ERASEFF )
324   ROM_REGION( 0x14000, "maincpu", ROMREGION_ERASEFF )
328325   ROM_LOAD( "a32_1.rom", 0x10000, 0x1000, CRC(4e91c1a4) SHA1(bf6e41b6b36a2556a50065e9acfd8cd57968f039) )
329326   ROM_LOAD( "a32_2.rom", 0x11000, 0x1000, CRC(81a8a0fb) SHA1(df75bd7774969cabb062e50da6004f2efbde489e) )
330327   ROM_LOAD( "a32_3.rom", 0x12000, 0x1000, CRC(a97de2f5) SHA1(743c76121f5b9e1eab35c8c00797311f58da5243) )
331328   ROM_LOAD( "a32_4.rom", 0x13000, 0x1000, CRC(70f84bc8) SHA1(9ae1c06531edf20c14ba47e78c0747dd2a92612a) )
332   ROM_CART_LOAD("cart2", 0x14000, 0x4000, ROM_OPTIONAL)
333   ROM_CART_LOAD("cart1", 0x18000, 0x4000, ROM_OPTIONAL)
334329ROM_END
335330
336331ROM_START( primoa48 )
337   ROM_REGION( 0x1c000, "maincpu", ROMREGION_ERASEFF )
332   ROM_REGION( 0x14000, "maincpu", ROMREGION_ERASEFF )
338333   ROM_LOAD( "a48_1.rom", 0x10000, 0x1000, CRC(7de6ad6f) SHA1(f2fd6fac4f9bc57c646efe40281758bb7c3f56e1) )
339334   ROM_LOAD( "a48_2.rom", 0x11000, 0x1000, CRC(81a8a0fb) SHA1(df75bd7774969cabb062e50da6004f2efbde489e) )
340335   ROM_LOAD( "a48_3.rom", 0x12000, 0x1000, CRC(a97de2f5) SHA1(743c76121f5b9e1eab35c8c00797311f58da5243) )
341336   ROM_LOAD( "a48_4.rom", 0x13000, 0x1000, CRC(e4d0c452) SHA1(4a98ff7502f1236445250d6b4e1c34850734350e) )
342   ROM_CART_LOAD("cart2", 0x14000, 0x4000, ROM_OPTIONAL)
343   ROM_CART_LOAD("cart1", 0x18000, 0x4000, ROM_OPTIONAL)
344337ROM_END
345338
346339ROM_START( primoa64 )
347   ROM_REGION( 0x1c000, "maincpu", ROMREGION_ERASEFF )
340   ROM_REGION( 0x14000, "maincpu", ROMREGION_ERASEFF )
348341   ROM_SYSTEM_BIOS(0, "ver1", "ver 1")
349342   ROM_LOAD( "a64_1.rom", 0x10000, 0x1000, CRC(6a7a9b9b) SHA1(e9ce16f90d9a799a26a9cef09d9ee6a6d7749484) )
350343   ROM_LOAD( "a64_2.rom", 0x11000, 0x1000, CRC(81a8a0fb) SHA1(df75bd7774969cabb062e50da6004f2efbde489e) )
351344   ROM_LOAD( "a64_3.rom", 0x12000, 0x1000, CRC(a97de2f5) SHA1(743c76121f5b9e1eab35c8c00797311f58da5243) )
352345   ROM_LOAD( "a64_4.rom", 0x13000, 0x1000, CRC(e4d0c452) SHA1(4a98ff7502f1236445250d6b4e1c34850734350e) )
353   ROM_CART_LOAD("cart2", 0x14000, 0x4000, ROM_OPTIONAL)
354   ROM_CART_LOAD("cart1", 0x18000, 0x4000, ROM_OPTIONAL)
355346ROM_END
356347
357348ROM_START( primob32 )
358   ROM_REGION( 0x1c000, "maincpu", ROMREGION_ERASEFF )
349   ROM_REGION( 0x14000, "maincpu", ROMREGION_ERASEFF )
359350   ROM_LOAD( "b32.rom",   0x10000, 0x4000, CRC(f594d2bb) SHA1(b74961dba008a1a6f15a22ddbd1b89acd7e286c2) )
360   ROM_CART_LOAD("cart2", 0x14000, 0x4000, ROM_OPTIONAL)
361   ROM_CART_LOAD("cart1", 0x18000, 0x4000, ROM_OPTIONAL)
362351ROM_END
363352
364353ROM_START( primob48 )
365   ROM_REGION( 0x1c000, "maincpu", ROMREGION_ERASEFF )
354   ROM_REGION( 0x14000, "maincpu", ROMREGION_ERASEFF )
366355   ROM_LOAD( "b48.rom",   0x10000, 0x4000, CRC(df3d2a57) SHA1(ab9413aa9d7749d30a486da00bc8c6d178a2172c) )
367   ROM_CART_LOAD("cart2", 0x14000, 0x4000, ROM_OPTIONAL)
368   ROM_CART_LOAD("cart1", 0x18000, 0x4000, ROM_OPTIONAL)
369356ROM_END
370357
371358ROM_START( primob64 )
372   ROM_REGION( 0x1c000, "maincpu", ROMREGION_ERASEFF )
359   ROM_REGION( 0x14000, "maincpu", ROMREGION_ERASEFF )
373360   ROM_SYSTEM_BIOS(0, "standart", "Standart")
374361   ROMX_LOAD( "b64.rom",     0x10000, 0x4000, CRC(cea28188) SHA1(a77e42e97402e601b78ab3751eac1e85d0bbb4a0), ROM_BIOS(1) )
375362   ROM_SYSTEM_BIOS(1, "cdos", "CDOS")
376363   ROMX_LOAD( "b64cdos.rom", 0x10000, 0x4000, CRC(73305e4d) SHA1(c090c3430cdf19eed8363377b981e1c21a4ed169), ROM_BIOS(2) )
377   ROM_CART_LOAD("cart2", 0x14000, 0x4000, ROM_OPTIONAL)
378   ROM_CART_LOAD("cart1", 0x18000, 0x4000, ROM_OPTIONAL)
379364ROM_END
380365
381366ROM_START( primoc64 )
382   ROM_REGION( 0x1c000, "maincpu", ROMREGION_ERASEFF )
367   ROM_REGION( 0x14000, "maincpu", ROMREGION_ERASEFF )
383368   ROM_LOAD( "c64_1.rom", 0x10000, 0x1000, CRC(c22290ea) SHA1(af5c73f6d0f7a987c4f082a5cb69e3f016127d57) )
384369   ROM_LOAD( "c64_2.rom", 0x11000, 0x1000, CRC(0756b56e) SHA1(589dbdb7c43ca7ca29ed1e56e080adf8c069e407) )
385370   ROM_LOAD( "c64_3.rom", 0x12000, 0x1000, CRC(fc56e0af) SHA1(b547fd270d3413400bc800f5b7ea9153b7a59bff) )
386371   ROM_LOAD( "c64_4.rom", 0x13000, 0x1000, CRC(3770e3e6) SHA1(792cc71d8f89eb447f94aded5afc70d626a26030) )
387   ROM_CART_LOAD("cart2", 0x14000, 0x4000, ROM_OPTIONAL)
388   ROM_CART_LOAD("cart1", 0x18000, 0x4000, ROM_OPTIONAL)
389372ROM_END
390373
391374/*     YEAR  NAME      PARENT    COMPAT MACHINE   INPUT  INIT     COMPANY  FULLNAME */
trunk/src/mess/drivers/pb1000.c
r32600r32601
2222#include "emu.h"
2323#include "cpu/hd61700/hd61700.h"
2424#include "video/hd44352.h"
25#include "imagedev/cartslot.h"
2625#include "machine/nvram.h"
2726#include "sound/beep.h"
2827#include "rendlay.h"
2928
29#include "bus/generic/slot.h"
30#include "bus/generic/carts.h"
31
32
3033class pb1000_state : public driver_device
3134{
3235public:
r32600r32601
3437      : driver_device(mconfig, type, tag),
3538         m_maincpu(*this, "maincpu"),
3639         m_beeper(*this, "beeper"),
37         m_hd44352(*this, "hd44352")
40         m_hd44352(*this, "hd44352"),
41         m_card1(*this, "cardslot1"),
42         m_card2(*this, "cardslot2")
3843      { }
3944
4045   required_device<hd61700_cpu_device> m_maincpu;
4146   required_device<beep_device> m_beeper;
4247   required_device<hd44352_device> m_hd44352;
48   optional_device<generic_slot_device> m_card1;
49   optional_device<generic_slot_device> m_card2;
4350
4451   emu_timer *m_kb_timer;
4552   UINT8 m_kb_matrix;
4653   UINT8 m_gatearray[2];
4754
55   memory_region *m_rom_reg;
56   memory_region *m_card1_reg;
57   memory_region *m_card2_reg;
58
4859   virtual void machine_start();
4960   UINT32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
5061   DECLARE_WRITE16_MEMBER( gatearray_w );
r32600r32601
7283   AM_RANGE( 0x00c10, 0x00c11 ) AM_WRITE(gatearray_w)
7384   AM_RANGE( 0x00000, 0x0ffff ) AM_ROMBANK("bank1")
7485   AM_RANGE( 0x10000, 0x1ffff ) AM_RAM                 AM_SHARE("nvram1")
75   AM_RANGE( 0x20000, 0x27fff ) AM_ROM                 AM_REGION("card1", 0)
86   AM_RANGE( 0x20000, 0x27fff ) AM_DEVREAD("cardslot1", generic_slot_device, read16_rom)
7687   AM_RANGE( 0x28000, 0x2ffff ) AM_RAM                 AM_SHARE("nvram2")
7788ADDRESS_MAP_END
7889
r32600r32601
306317{
307318   m_gatearray[offset] = data&0xff;
308319
309   if (m_gatearray[0])
310      membank("bank1")->set_base(memregion("card1")->base());
311   else if (m_gatearray[1])
312      membank("bank1")->set_base(memregion("card2")->base());
320   if (m_gatearray[0] && m_card1_reg)
321      membank("bank1")->set_base(m_card1_reg->base());
322   else if (m_gatearray[1] && m_card2_reg)
323      membank("bank1")->set_base(m_card2_reg->base());
313324   else
314      membank("bank1")->set_base(memregion("rom")->base());
325      membank("bank1")->set_base(m_rom_reg->base());
315326}
316327
317328static void lcd_control(hd61700_cpu_device &device, UINT8 data)
r32600r32601
494505
495506void pb1000_state::machine_start()
496507{
497   membank("bank1")->set_base(memregion("rom")->base());
508   astring region_tag;
509   m_card1_reg = memregion(region_tag.cpy(m_card1->tag()).cat(GENERIC_ROM_REGION_TAG));
510   m_card2_reg = memregion(region_tag.cpy(m_card2->tag()).cat(GENERIC_ROM_REGION_TAG));
511   m_rom_reg = memregion("rom");
498512
513   membank("bank1")->set_base(m_rom_reg->base());
514
499515   m_kb_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(pb1000_state::keyboard_timer),this));
500516   m_kb_timer->adjust(attotime::from_hz(192), 0, attotime::from_hz(192));
501517}
r32600r32601
538554   MCFG_CPU_PROGRAM_MAP(pb2000c_mem)
539555   MCFG_HD61700_CONFIG(pb2000c_config)
540556
541   MCFG_CARTSLOT_ADD("card1")
542   MCFG_CARTSLOT_EXTENSION_LIST("bin")
543   MCFG_CARTSLOT_NOT_MANDATORY
544   MCFG_CARTSLOT_INTERFACE("pb2000c_card")
557   MCFG_GENERIC_CARTSLOT_ADD("cardslot1", generic_plain_slot, "pb2000c_card")
558   MCFG_GENERIC_CARTSLOT_ADD("cardslot2", generic_plain_slot, "pb2000c_card")
545559
546   MCFG_CARTSLOT_ADD("card2")
547   MCFG_CARTSLOT_EXTENSION_LIST("bin")
548   MCFG_CARTSLOT_NOT_MANDATORY
549   MCFG_CARTSLOT_INTERFACE("pb2000c_card")
550
551560   /* Software lists */
552561   MCFG_SOFTWARE_LIST_ADD("card_list", "pb2000c")
553562MACHINE_CONFIG_END
r32600r32601
564573   ROM_SYSTEM_BIOS(1, "basicj", "BASIC Jap")
565574   ROMX_LOAD( "pb1000j.bin", 0x0000, 0x8000, CRC(14a0df57) SHA1(ab47bb54eb2a24dcd9d2663462e9272d974fa7da), ROM_BIOS(2) | ROM_SKIP(1))
566575
567
568576   ROM_REGION( 0x0800, "hd44352", 0 )
569577   ROM_LOAD( "charset.bin", 0x0000, 0x0800, CRC(7f144716) SHA1(a02f1ecc6dc0ac55b94f00931d8f5cb6b9ffb7b4))
570578ROM_END
571579
580
572581ROM_START( pb2000c )
573582   ROM_REGION( 0x1800, "maincpu", ROMREGION_ERASEFF )
574583   ROM_LOAD( "hd61700.bin", 0x0000, 0x1800, CRC(25f9540c) SHA1(ecf98efadbdd4d1a74bc183eaf23f7113f2a12b1))
r32600r32601
578587
579588   ROM_REGION( 0x0800, "hd44352", 0 )
580589   ROM_LOAD( "charset.bin", 0x0000, 0x0800, CRC(7f144716) SHA1(a02f1ecc6dc0ac55b94f00931d8f5cb6b9ffb7b4))
581
582   ROM_REGION( 0x20000, "card1", ROMREGION_ERASEFF )
583   ROM_CART_LOAD( "card1", 0, 0x20000, 0 )
584
585   ROM_REGION( 0x20000, "card2", ROMREGION_ERASEFF )
586   ROM_CART_LOAD( "card2", 0, 0x20000, 0 )
587590ROM_END
588591
592
589593ROM_START( ai1000 )
590594   ROM_REGION( 0x1800, "maincpu", ROMREGION_ERASEFF )
591595   ROM_LOAD( "hd61700.bin", 0x0000, 0x1800, CRC(25f9540c) SHA1(ecf98efadbdd4d1a74bc183eaf23f7113f2a12b1))
r32600r32601
595599
596600   ROM_REGION( 0x0800, "hd44352", 0 )
597601   ROM_LOAD( "charset.bin", 0x0000, 0x0800, CRC(7f144716) SHA1(a02f1ecc6dc0ac55b94f00931d8f5cb6b9ffb7b4))
598
599   ROM_REGION( 0x20000, "card1", ROMREGION_ERASEFF )
600   ROM_CART_LOAD( "card1", 0, 0x20000, 0 )
601
602   ROM_REGION( 0x20000, "card2", ROMREGION_ERASEFF )
603   ROM_CART_LOAD( "card2", 0, 0x20000, 0 )
604602ROM_END
605603
606604/* Driver */
trunk/src/mess/drivers/nc.c
r32600r32601
247247
248248
249249
250/* this is not a real register, it is used to record card status */
251/* ==0, card not inserted, !=0 card is inserted */
252
253/* set pcmcia card present state */
254void nc_state::nc_set_card_present_state(int state)
255{
256   m_card_status = state;
257}
258
259
260250/* latched interrupts are interrupts that cannot be cleared by writing to the irq
261251mask. latched interrupts can only be cleared by accessing the interrupting
262252device e.g. serial chip, fdc */
r32600r32601
308298void nc_state::nc_refresh_memory_bank_config(int bank)
309299{
310300   address_space &space = m_maincpu->space(AS_PROGRAM);
301   UINT8 *ptr;
311302   int mem_type;
312303   int mem_bank;
313304   char bank1[10];
r32600r32601
326317      case 3:
327318      case 0:
328319      {
329         unsigned char *addr;
320         mem_bank &= m_membank_rom_mask;
321         ptr = (memregion("maincpu")->base() + 0x010000) + (mem_bank << 14);
330322
331         mem_bank = mem_bank & m_membank_rom_mask;
323         membank(bank1)->set_base(ptr);
332324
333         addr = (memregion("maincpu")->base()+0x010000) + (mem_bank<<14);
334
335         membank(bank1)->set_base(addr);
336
337325         space.nop_write((bank * 0x4000), (bank * 0x4000) + 0x3fff);
338326         LOG(("BANK %d: ROM %d\n",bank,mem_bank));
339327      }
r32600r32601
342330      /* internal RAM */
343331      case 1:
344332      {
345         unsigned char *addr;
333         mem_bank &= m_membank_internal_ram_mask;
334         ptr = m_ram->pointer() + (mem_bank << 14);
346335
347         mem_bank = mem_bank & m_membank_internal_ram_mask;
336         membank(bank1)->set_base(ptr);
337         membank(bank5)->set_base(ptr);
348338
349         addr = m_ram->pointer() + (mem_bank<<14);
350
351         membank(bank1)->set_base(addr);
352         membank(bank5)->set_base(addr);
353
354339         space.install_write_bank((bank * 0x4000), (bank * 0x4000) + 0x3fff, nc_bankhandler_w[bank]);
355340         LOG(("BANK %d: RAM\n",bank));
356341      }
r32600r32601
360345      case 2:
361346      {
362347         /* card connected? */
363         if ((m_card_status) && (m_card_ram!=NULL))
348         if (m_card_status && m_card_ram)
364349         {
365            unsigned char *addr;
350            mem_bank &= m_membank_card_ram_mask;
351            ptr = m_card_ram->base() + (mem_bank << 14);
366352
367            mem_bank = mem_bank & m_membank_card_ram_mask;
368            addr = m_card_ram + (mem_bank<<14);
353            membank(bank1)->set_base(ptr);
369354
370            membank(bank1)->set_base(addr);
371
372355            /* write enabled? */
373356            if (ioport("EXTRA")->read() & 0x02)
374357            {
375358               /* yes */
376               membank(bank5)->set_base(addr);
377
359               membank(bank5)->set_base(ptr);
378360               space.install_write_bank((bank * 0x4000), (bank * 0x4000) + 0x3fff, nc_bankhandler_w[bank]);
379361            }
380362            else
r32600r32601
814796{
815797   m_type = NC_TYPE_1xx;
816798
799   astring region_tag;
800   m_card_ram = memregion(region_tag.cpy(m_card->tag()).cat(GENERIC_ROM_REGION_TAG));
801   if (m_card_ram)
802      m_card_size = m_card_ram->bytes();
803   else
804      m_card_size = 0;
805   
817806   /* keyboard timer */
818807   m_keyboard_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(nc_state::nc_keyboard_timer_callback),this));
819808   m_keyboard_timer->adjust(attotime::from_msec(10));
r32600r32601
11281117}
11291118#endif
11301119
1131MACHINE_RESET_MEMBER(nc_state,nc200)
1120MACHINE_RESET_MEMBER(nc_state, nc200)
11321121{
11331122   /* 512k of rom */
11341123   m_membank_rom_mask = 0x1f;
r32600r32601
11471136   nc200_video_set_backlight(0);
11481137}
11491138
1150MACHINE_START_MEMBER(nc_state,nc200)
1139MACHINE_START_MEMBER(nc_state, nc200)
11511140{
11521141   m_type = NC_TYPE_200;
1153
1142   
1143   astring region_tag;
1144   m_card_ram = memregion(region_tag.cpy(m_card->tag()).cat(GENERIC_ROM_REGION_TAG));
1145   if (m_card_ram)
1146      m_card_size = m_card_ram->bytes();
1147   else
1148      m_card_size = 0;
1149   
11541150   /* keyboard timer */
11551151   m_keyboard_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(nc_state::nc_keyboard_timer_callback),this));
11561152   m_keyboard_timer->adjust(attotime::from_msec(10));
r32600r32601
14471443   MCFG_RP5C01_OUT_ALARM_CB(WRITELINE(nc_state, nc100_tc8521_alarm_callback))
14481444
14491445   /* cartridge */
1450   MCFG_CARTSLOT_ADD("cart")
1451   MCFG_CARTSLOT_EXTENSION_LIST("crd,card")
1452   MCFG_CARTSLOT_NOT_MANDATORY
1453   MCFG_CARTSLOT_LOAD(nc_state,nc_pcmcia_card)
1454   MCFG_CARTSLOT_UNLOAD(nc_state,nc_pcmcia_card)
1446   MCFG_GENERIC_CARTSLOT_ADD("cardslot", generic_plain_slot, NULL)
1447   MCFG_GENERIC_LOAD(nc_state, nc_pcmcia_card)
1448   MCFG_GENERIC_UNLOAD(nc_state, nc_pcmcia_card)
14551449
14561450   /* internal ram */
14571451   MCFG_RAM_ADD(RAM_TAG)
r32600r32601
14771471   MCFG_CPU_MODIFY( "maincpu" )
14781472   MCFG_CPU_IO_MAP(nc200_io)
14791473
1480   MCFG_MACHINE_START_OVERRIDE(nc_state, nc200 )
1481   MCFG_MACHINE_RESET_OVERRIDE(nc_state, nc200 )
1474   MCFG_MACHINE_START_OVERRIDE(nc_state, nc200)
1475   MCFG_MACHINE_RESET_OVERRIDE(nc_state, nc200)
14821476
14831477   /* video hardware */
14841478   MCFG_SCREEN_MODIFY("screen")

Previous 199869 Revisions Next


© 1997-2024 The MAME Team