Previous 199869 Revisions Next

r31202 Sunday 6th July, 2014 at 10:01:22 UTC by Barry Rodewald
amstrad: Reworked the way ROMs are set up.  Now ROMs are set on reset, all at once, and so any ROMs mounted on a ROM box won't interfere with ROM slot 7 (AMSDOS) or slot 3 on the Aleste (MSX-DOS). (no whatsnew)
[src/emu/bus/cpc]cpc_rom.c cpc_rom.h
[src/mess/includes]amstrad.h
[src/mess/machine]amstrad.c

trunk/src/emu/bus/cpc/cpc_rom.h
r31201r31202
6868   // optional information overrides
6969   virtual machine_config_constructor device_mconfig_additions() const;
7070
71   UINT8* base(UINT8 slot) { if(slot >=1 && slot <= 6) return m_rom[slot]->base(); else return NULL; }
71   UINT8* base(UINT8 slot) { if(slot >=1 && slot <= 8) return m_rom[slot]->base(); else return NULL; }
7272
7373protected:
7474   // device-level overrides
r31201r31202
7878private:
7979   //cpc_expansion_slot_device *m_slot;
8080
81   rom_image_device* m_rom[6];
81   rom_image_device* m_rom[8];
8282};
8383
8484// device type definition
trunk/src/emu/bus/cpc/cpc_rom.c
r31201r31202
2323   MCFG_ROMSLOT_ADD("rom4")
2424   MCFG_ROMSLOT_ADD("rom5")
2525   MCFG_ROMSLOT_ADD("rom6")
26   MCFG_ROMSLOT_ADD("rom7")
27   MCFG_ROMSLOT_ADD("rom8")
2628
2729   // pass-through
2830   MCFG_DEVICE_ADD("exp", CPC_EXPANSION_SLOT, 0)
trunk/src/mess/includes/amstrad.h
r31201r31202
310310   void kccomp_reset_machine();
311311   void update_psg();
312312   void amstrad_common_init();
313   void enumerate_roms();
313314   unsigned char kccomp_get_colour_element(int colour_value);
314315   virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr);
315316
trunk/src/mess/machine/amstrad.c
r31201r31202
28222822      8,  0,  0,  0,  8,  0,  0,  0,  8,  0,  0,  0,  8,  0,  0,  0
28232823};
28242824
2825void amstrad_state::amstrad_common_init()
2825#define NEXT_ROM_SLOT    m_rom_count++; \
2826                  if(slot3 && m_rom_count == 3) m_rom_count++; \
2827                  if(slot7 && m_rom_count == 7) m_rom_count++;
2828
2829void amstrad_state::enumerate_roms()
28262830{
2827   address_space &space = m_maincpu->space(AS_PROGRAM);
2831   UINT8 m_rom_count = 1;
28282832   device_t* romexp;
28292833   rom_image_device* romimage;
2834   UINT8 *rom = m_region_maincpu->base();
28302835   char str[20];
2831   int x;
2836   int i;
2837   bool slot3 = false,slot7 = false;
28322838
2839   if(m_system_type == SYSTEM_PLUS || m_system_type == SYSTEM_GX4000)
2840   {
2841      /* ROMs are stored on the inserted cartridge in the Plus/GX4000 */
2842      for(i=0; i<128; i++)  // fill ROM table
2843         m_Amstrad_ROM_Table[i] = &rom[0x4000];
2844      for(i=128;i<160;i++)
2845         m_Amstrad_ROM_Table[i] = &rom[(i-128)*0x4000];
2846      m_Amstrad_ROM_Table[7] = &rom[0xc000];
2847      slot7 = true;
2848   }
2849   else
2850   {
2851      /* slot 0 is always BASIC, as is any unused slot */
2852      for(i=0; i<256; i++)
2853         m_Amstrad_ROM_Table[i] = &rom[0x014000];
2854      /* AMSDOS ROM -- TODO: exclude from 464 unless a DDI-1 device is connected */
2855      m_Amstrad_ROM_Table[7] = &rom[0x018000];
2856      slot7 = true;
2857   }
2858
2859   /* MSX-DOS BIOS - Aleste MSX emulation */
2860   if(m_system_type == SYSTEM_ALESTE)
2861   {
2862      m_Amstrad_ROM_Table[3] = &rom[0x01c000];
2863      slot3 = true;
2864   }
2865
2866   /* enumerate expansion ROMs */
2867   // TODO: get ROMs from expansion devices (that aren't ROMboxes)
2868
2869   /* add ROMs from ROMbox expansion */
2870   romexp = get_expansion_device(machine(),"rom");
2871   if(romexp)
2872   {
2873      for(i=0;i<8;i++)
2874      {
2875         sprintf(str,"rom%i",i+1);
2876         romimage = romexp->subdevice<rom_image_device>(str);
2877         if(romimage->base() != NULL)
2878         {
2879            m_Amstrad_ROM_Table[m_rom_count] = romimage->base();
2880            NEXT_ROM_SLOT
2881         }
2882      }
2883   }
2884
2885}
2886
2887void amstrad_state::amstrad_common_init()
2888{
2889   address_space &space = m_maincpu->space(AS_PROGRAM);
2890
28332891   m_aleste_mode = 0;
28342892
28352893   m_gate_array.mrer = 0;
r31201r31202
28622920   space.install_write_bank(0xc000, 0xdfff, "bank15");
28632921   space.install_write_bank(0xe000, 0xffff, "bank16");
28642922
2865   /* Set up ROMs, if we have an expansion device connected */
2866   romexp = get_expansion_device(machine(),"rom");
2867   if(romexp)
2868   {
2869      for(x=0;x<6;x++)
2870      {
2871         sprintf(str,"rom%i",x+1);
2872         romimage = romexp->subdevice<rom_image_device>(str);
2873         if(romimage->base() != NULL)
2874         {
2875            m_Amstrad_ROM_Table[x+1] = romimage->base();
2876         }
2877      }
2878   }
2923   enumerate_roms();
28792924
28802925   m_maincpu->reset();
28812926   if ( m_system_type == SYSTEM_CPC || m_system_type == SYSTEM_ALESTE )
r31201r31202
29362981
29372982MACHINE_RESET_MEMBER(amstrad_state,amstrad)
29382983{
2939   int i;
2940   UINT8 *rom = m_region_maincpu->base();
2941
2942   for (i=0; i<256; i++)
2943   {
2944      m_Amstrad_ROM_Table[i] = &rom[0x014000];
2945   }
2946
2947   m_Amstrad_ROM_Table[7] = &rom[0x018000];
29482984   amstrad_common_init();
29492985   amstrad_reset_machine();
29502986//  amstrad_init_palette(machine());
r31201r31202
29693005MACHINE_RESET_MEMBER(amstrad_state,plus)
29703006{
29713007   address_space &space = m_maincpu->space(AS_PROGRAM);
2972   int i;
2973   UINT8 *rom = m_region_maincpu->base();
29743008
2975   for (i=0; i<128; i++)  // fill ROM table
2976   {
2977      m_Amstrad_ROM_Table[i] = &rom[0x4000];  // BASIC in system cart
2978   }
2979   for(i=128;i<160;i++)
2980   {
2981      m_Amstrad_ROM_Table[i] = &rom[(i-128)*0x4000];
2982   }
2983   m_Amstrad_ROM_Table[7] = &rom[0xc000];  // AMSDOS in system cart
2984
29853009   m_asic.enabled = 0;
29863010   m_asic.seqptr = 0;
29873011   m_asic.pri = 0;  // disable PRI
r31201r31202
30193043MACHINE_RESET_MEMBER(amstrad_state,gx4000)
30203044{
30213045   address_space &space = m_maincpu->space(AS_PROGRAM);
3022   int i;
3023   UINT8 *rom = m_region_maincpu->base();
30243046
3025   for (i=0; i<128; i++)  // fill ROM table
3026   {
3027      m_Amstrad_ROM_Table[i] = &rom[0x4000];
3028   }
3029   for(i=128;i<160;i++)
3030   {
3031      m_Amstrad_ROM_Table[i] = &rom[(i-128)*0x4000];
3032   }
3033   m_Amstrad_ROM_Table[7] = &rom[0xc000];
3034
30353047   m_asic.enabled = 0;
30363048   m_asic.seqptr = 0;
30373049   m_asic.pri = 0;  // disable PRI
r31201r31202
30683080
30693081MACHINE_RESET_MEMBER(amstrad_state,kccomp)
30703082{
3071   int i;
3072   UINT8 *rom = m_region_maincpu->base();
3073
3074   for (i=0; i<256; i++)
3075   {
3076      m_Amstrad_ROM_Table[i] = &rom[0x014000];
3077   }
3078
30793083   amstrad_common_init();
30803084   kccomp_reset_machine();
30813085
r31201r31202
30973101
30983102MACHINE_RESET_MEMBER(amstrad_state,aleste)
30993103{
3100   int i;
3101   UINT8 *rom = m_region_maincpu->base();
3102
3103   for (i=0; i<256; i++)
3104   {
3105      m_Amstrad_ROM_Table[i] = &rom[0x014000];
3106   }
3107
3108   m_Amstrad_ROM_Table[3] = &rom[0x01c000];  // MSX-DOS / BIOS
3109   m_Amstrad_ROM_Table[7] = &rom[0x018000];  // AMSDOS
31103104   amstrad_common_init();
31113105   amstrad_reset_machine();
31123106

Previous 199869 Revisions Next


© 1997-2024 The MAME Team