Previous 199869 Revisions Next

r34577 Saturday 24th January, 2015 at 00:58:59 UTC by Angelo Salese
Bad stack pointer read is bad.
[/branches/kale/src/emu/cpu/m6502]om4510.lst om65ce02.lst
[/branches/kale/src/mess/drivers]c65.c

branches/kale/src/emu/cpu/m6502/om4510.lst
r243088r243089
99   map_offset[0] = (A<<8) | ((X & 0xf) << 16);
1010   map_offset[1] = (Y<<8) | ((Z & 0xf) << 16);
1111   map_enable = ((X & 0xf0) >> 4) | (Z & 0xf0);
12   logerror("MAP execute\n");
13   logerror("0x0000 - 0x1fff = %08x\n",map_enable & 1 ? map_offset[0]+0x0000 : 0x0000);
14   logerror("0x2000 - 0x3fff = %08x\n",map_enable & 2 ? map_offset[0]+0x2000 : 0x2000);
15   logerror("0x4000 - 0x5fff = %08x\n",map_enable & 4 ? map_offset[0]+0x4000 : 0x4000);
16   logerror("0x6000 - 0x7fff = %08x\n",map_enable & 8 ? map_offset[0]+0x6000 : 0x6000);
17   logerror("0x8000 - 0x9fff = %08x\n",map_enable & 16 ? map_offset[1]+0x8000 : 0x8000);
18   logerror("0xa000 - 0xbfff = %08x\n",map_enable & 32 ? map_offset[1]+0xa000 : 0xa000);
19   logerror("0xc000 - 0xdfff = %08x\n",map_enable & 64 ? map_offset[1]+0xc000 : 0xc000);
20   logerror("0xe000 - 0xffff = %08x\n",map_enable & 128 ? map_offset[1]+0xe000 : 0xe000);
1221   prefetch();
branches/kale/src/emu/cpu/m6502/om65ce02.lst
r243088r243089
419419cle_imp
420420   read_pc_noinc();
421421   P &= ~F_E;
422   logerror("CLE\n");
422423   prefetch();
423424
424425cli_ce_imp
branches/kale/src/mess/drivers/c65.c
r243088r243089
66
77Attempt at rewriting the driver ...
88
9TODO:
10- Dies as soon as it enters into DOS ROM (bp 0x9d1a, it never returns due of a bad stack pointer read);
11
912Note:
1013- VIC-4567 will be eventually be added via compile switch, once that I
1114  get the hang of the system (and checking where the old code fails
r243088r243089
3033         m_palred(*this, "redpal"),
3134         m_palgreen(*this, "greenpal"),
3235         m_palblue(*this, "bluepal"),
33         m_dmalist(*this, "dmalist")         
36         m_dmalist(*this, "dmalist"),
37         m_cram(*this, "cram")
3438   { }
3539
3640   // devices
r243088r243089
4145   required_shared_ptr<UINT8> m_palgreen;
4246   required_shared_ptr<UINT8> m_palblue;
4347   required_shared_ptr<UINT8> m_dmalist;
44   
48   required_shared_ptr<UINT8> m_cram;
49   
4550   DECLARE_READ8_MEMBER(vic4567_dummy_r);
4651   DECLARE_WRITE8_MEMBER(vic4567_dummy_w);
4752   DECLARE_WRITE8_MEMBER(PalRed_w);
4853   DECLARE_WRITE8_MEMBER(PalGreen_w);
4954   DECLARE_WRITE8_MEMBER(PalBlue_w);
5055   DECLARE_WRITE8_MEMBER(DMAgic_w);
56   DECLARE_READ8_MEMBER(CIASelect_r);
57   DECLARE_WRITE8_MEMBER(CIASelect_w);
5158   
59   DECLARE_READ8_MEMBER(dummy_r);
60   
5261   // screen updates
5362   UINT32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
5463   DECLARE_PALETTE_INIT(c65);
5564   DECLARE_DRIVER_INIT(c65);
5665   DECLARE_DRIVER_INIT(c65pal);
66   
67   INTERRUPT_GEN_MEMBER(vic3_vblank_irq);
5768protected:
5869   // driver_device overrides
5970   virtual void machine_start();
r243088r243089
6172
6273   virtual void video_start();
6374private:
75   UINT8 m_VIC2_IRQMask;
76   UINT8 m_VIC3_ControlA;
6477   void PalEntryFlush(UINT8 offset);
6578   void DMAgicExecute(address_space &space,UINT32 address);
6679};
r243088r243089
87100      case 0x12:
88101         res = (m_screen->vpos() & 0xff);
89102         return res;
103      case 0x30:
104         return m_VIC3_ControlA;
90105   }
91106   
92107   if(!space.debugger_access())
r243088r243089
98113{
99114   switch(offset)
100115   {
116      case 0x1a:
117         m_VIC2_IRQMask = data & 0xf;
118         break;
101119      /* KEY register, handles vic-iii and vic-ii modes via two consecutive writes
102120        0xa5 -> 0x96 vic-iii mode
103121          any other write vic-ii mode
104122        */
105123      //case 0x2f: break;
124      case 0x30:
125         printf("CONTROL A %02x\n",data);
126         m_VIC3_ControlA = data;
127         break;
106128      default:
107129         if(!space.debugger_access())
108130            printf("%02x %02x\n",offset,data);
r243088r243089
187209      DMAgicExecute(space,(m_dmalist[0])|(m_dmalist[1]<<8)|(m_dmalist[2]<<16));
188210}
189211
212READ8_MEMBER(c65_state::CIASelect_r)
213{
214   if(m_VIC3_ControlA & 1)
215      return m_cram[offset];
216   else
217   {
218      // CIA
219   }
190220
221   return 0xff;
222}
191223
224WRITE8_MEMBER(c65_state::CIASelect_w)
225{
226   if(m_VIC3_ControlA & 1)
227      m_cram[offset] = data;
228   else
229   {
230      // CIA
231   }
232   
233}
234
235READ8_MEMBER(c65_state::dummy_r)
236{
237   return 0xff;
238}
239
192240static ADDRESS_MAP_START( c65_map, AS_PROGRAM, 8, c65_state )
193241   AM_RANGE(0x00000, 0x01fff) AM_RAM // TODO: bank
194242   AM_RANGE(0x0c800, 0x0cfff) AM_ROM AM_REGION("maincpu", 0xc800)
195243   AM_RANGE(0x0d000, 0x0d07f) AM_READWRITE(vic4567_dummy_r,vic4567_dummy_w) // 0x0d000, 0x0d07f VIC-4567
196   // 0x0d080, 0x0d09f FDC
244   AM_RANGE(0x0d080, 0x0d081) AM_READ(dummy_r) // 0x0d080, 0x0d09f FDC
197245   // 0x0d0a0, 0x0d0ff Ram Expansion Control (REC)
198246   AM_RANGE(0x0d100, 0x0d1ff) AM_RAM_WRITE(PalRed_w) AM_SHARE("redpal")// 0x0d100, 0x0d1ff Red Palette
199247   AM_RANGE(0x0d200, 0x0d2ff) AM_RAM_WRITE(PalGreen_w) AM_SHARE("greenpal") // 0x0d200, 0x0d2ff Green Palette
r243088r243089
204252   AM_RANGE(0x0d700, 0x0d702) AM_WRITE(DMAgic_w) AM_SHARE("dmalist") // 0x0d700, 0x0d7** DMAgic
205253   //AM_RANGE(0x0d703, 0x0d703) AM_READ(DMAgic_r)
206254   // 0x0d800, 0x0d8** Color matrix
255   AM_RANGE(0x0dc00, 0x0dfff) AM_READWRITE(CIASelect_r,CIASelect_w) AM_SHARE("cram")
207256   // 0x0dc00, 0x0dc** CIA-1
208257   // 0x0dd00, 0x0dd** CIA-2
209258   // 0x0de00, 0x0de** Ext I/O Select 1
210   AM_RANGE(0x0df00, 0x0dfff) AM_RAM // 0x0df00, 0x0df** Ext I/O Select 2 (RAM window?)
259   // 0x0df00, 0x0df** Ext I/O Select 2 (RAM window?)
260   AM_RANGE(0x0e000, 0x0ffff) AM_ROM AM_REGION("maincpu",0x0e000)
211261   AM_RANGE(0x10000, 0x1f7ff) AM_RAM
212262   AM_RANGE(0x1f800, 0x1ffff) AM_RAM // VRAM
213263   AM_RANGE(0x20000, 0x3ffff) AM_ROM AM_REGION("maincpu",0)
r243088r243089
286336   // TODO: initial state?
287337}
288338
339static const gfx_layout charlayout =
340{
341   8,8,
342   0x1000/8,
343   1,
344   { RGN_FRAC(0,1) },
345   { 0, 1, 2, 3, 4, 5, 6, 7 },
346   { 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8 },
347   8*8
348};
349
350static GFXDECODE_START( c65 )
351   GFXDECODE_ENTRY( "maincpu", 0xd000, charlayout,     0, 1 ) // another identical copy is at 0x9000
352GFXDECODE_END
353
354INTERRUPT_GEN_MEMBER(c65_state::vic3_vblank_irq)
355{
356   if(m_VIC2_IRQMask & 1)
357      m_maincpu->set_input_line(M4510_IRQ_LINE,HOLD_LINE);
358}
359
289360static MACHINE_CONFIG_START( c65, c65_state )
290361
291362   /* basic machine hardware */
292363   MCFG_CPU_ADD("maincpu",M4510,MAIN_CLOCK)
293364   MCFG_CPU_PROGRAM_MAP(c65_map)
365   MCFG_CPU_VBLANK_INT_DRIVER("screen",c65_state,vic3_vblank_irq)
294366
295367   /* video hardware */
296368   MCFG_SCREEN_ADD("screen", RASTER)
r243088r243089
299371   MCFG_SCREEN_UPDATE_DRIVER(c65_state, screen_update)
300372//  MCFG_SCREEN_SIZE(32*8, 32*8)
301373//  MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 0*8, 32*8-1)
302   MCFG_SCREEN_RAW_PARAMS(MAIN_CLOCK, 525, 0, 320, 525, 0, 240) // mods needed
374   MCFG_SCREEN_RAW_PARAMS(MAIN_CLOCK, 910, 0, 320, 525, 0, 240) // mods needed
303375   MCFG_SCREEN_PALETTE("palette")
304376
377   MCFG_GFXDECODE_ADD("gfxdecode", "palette", c65)
378
305379   MCFG_PALETTE_ADD("palette", 0x100)
306380   MCFG_PALETTE_INIT_OWNER(c65_state, c65)
307381


Previous 199869 Revisions Next


© 1997-2024 The MAME Team