Previous 199869 Revisions Next

r32312 Tuesday 23rd September, 2014 at 12:19:58 UTC by Dirk Best
Amiga: Add the latest version of EmuTOS to the Amiga 1000 softlist and
fix CIA interrupts getting lost in certain situations. This fixes the
EmuTOS keyboard and potentially more. Also fix a possible issue with
blitter delays.
[hash]amiga_a1000.xml
[src/mame/includes]amiga.h
[src/mame/machine]amiga.c
[src/mess/drivers]amiga.c

trunk/src/mess/drivers/amiga.c
r32311r32312
7575
7676protected:
7777   // amiga_state overrides
78   virtual void update_int2();
79   virtual void update_int6();
78   virtual bool int2_pending();
79   virtual bool int6_pending();
8080
8181private:
8282   // devices
r32311r32312
140140   virtual void machine_start();
141141
142142   // amiga_state overrides
143   virtual void update_int2();
144   virtual void update_int6();
143   virtual bool int2_pending();
144   virtual bool int6_pending();
145145
146146private:
147147   // devices
r32311r32312
218218   static const UINT8 GAYLE_ID = 0xd0;
219219
220220protected:
221   virtual void update_int2();
221   virtual bool int2_pending();
222222
223223private:
224224   int m_gayle_int2;
r32311r32312
240240   static const UINT8 GAYLE_ID = 0xd1;
241241
242242protected:
243   virtual void update_int2();
243   virtual bool int2_pending();
244244
245245private:
246246   int m_gayle_int2;
r32311r32312
569569   update_int6();
570570}
571571
572void a2000_state::update_int2()
572bool a2000_state::int2_pending()
573573{
574   int state = (m_cia_0_irq || m_zorro2_int2);
575   set_interrupt((state ? INTENA_SETCLR : 0x0000) | INTENA_PORTS);
574   return m_cia_0_irq || m_zorro2_int2;
576575}
577576
578void a2000_state::update_int6()
577bool a2000_state::int6_pending()
579578{
580   int state = (m_cia_1_irq || m_zorro2_int6);
581   set_interrupt((state ? INTENA_SETCLR : 0x0000) | INTENA_EXTER);
579   return m_cia_1_irq || m_zorro2_int6;
582580}
583581
584582void cdtv_state::machine_start()
r32311r32312
591589   m_dmac->ramsz_w(0);
592590}
593591
594void cdtv_state::update_int2()
592bool cdtv_state::int2_pending()
595593{
596   int state = (m_cia_0_irq || m_dmac_irq || m_tpi_irq);
597   set_interrupt((state ? INTENA_SETCLR : 0x0000) | INTENA_PORTS);
594   return m_cia_0_irq || m_dmac_irq || m_tpi_irq;
598595}
599596
600void cdtv_state::update_int6()
597bool cdtv_state::int6_pending()
601598{
602   int state = (m_cia_1_irq);
603   set_interrupt((state ? INTENA_SETCLR : 0x0000) | INTENA_EXTER);
599   return m_cia_1_irq;
604600}
605601
606602READ32_MEMBER( a3000_state::scsi_r )
r32311r32312
627623   logerror("motherboard_w(%06x): %08x & %08x\n", offset, data, mem_mask);
628624}
629625
630void a600_state::update_int2()
626bool a600_state::int2_pending()
631627{
632   int state = (m_cia_0_irq || m_gayle_int2);
633   set_interrupt((state ? INTENA_SETCLR : 0x0000) | INTENA_PORTS);
628   return m_cia_0_irq || m_gayle_int2;
634629}
635630
636631WRITE_LINE_MEMBER( a600_state::gayle_int2_w )
r32311r32312
639634   update_int2();
640635}
641636
642void a1200_state::update_int2()
637bool a1200_state::int2_pending()
643638{
644   int state = (m_cia_0_irq || m_gayle_int2);
645   set_interrupt((state ? INTENA_SETCLR : 0x0000) | INTENA_PORTS);
639   return m_cia_0_irq || m_gayle_int2;
646640}
647641
648642WRITE_LINE_MEMBER( a1200_state::gayle_int2_w )
trunk/src/mame/machine/amiga.c
r32311r32312
398398   custom_chip_w(m_maincpu->space(AS_PROGRAM), REG_INTREQ, interrupt, 0xffff);
399399}
400400
401bool amiga_state::int2_pending()
402{
403   return m_cia_0_irq;
404}
405
406bool amiga_state::int6_pending()
407{
408   return m_cia_1_irq;
409}
410
401411void amiga_state::update_int2()
402412{
403   set_interrupt((m_cia_0_irq ? INTENA_SETCLR : 0x0000) | INTENA_PORTS);
413   set_interrupt((int2_pending() ? INTENA_SETCLR : 0x0000) | INTENA_PORTS);
404414}
405415
406416void amiga_state::update_int6()
407417{
408   set_interrupt((m_cia_1_irq ? INTENA_SETCLR : 0x0000) | INTENA_EXTER);
418   set_interrupt((int6_pending() ? INTENA_SETCLR : 0x0000) | INTENA_EXTER);
409419}
410420
411421void amiga_state::update_irqs()
412422{
413423   amiga_state *state = this;
424
425   // if the external interrupt line is still active, set the interrupt request bit
426   if (int2_pending())
427      CUSTOM_REG(REG_INTREQ) |= INTENA_PORTS;
428
429   if (int6_pending())
430      CUSTOM_REG(REG_INTREQ) |= INTENA_EXTER;
431
414432   int ints = CUSTOM_REG(REG_INTENA) & CUSTOM_REG(REG_INTREQ);
415433
416434   // master interrupt switch
r32311r32312
14291447         CUSTOM_REG(REG_BLTSIZH) = data & 0x3f;
14301448         if ( CUSTOM_REG(REG_BLTSIZV) == 0 ) CUSTOM_REG(REG_BLTSIZV) = 0x400;
14311449         if ( CUSTOM_REG(REG_BLTSIZH) == 0 ) CUSTOM_REG(REG_BLTSIZH) = 0x40;
1432         blitter_setup(space);
1450         blitter_setup(m_maincpu->space(AS_PROGRAM));
14331451         break;
14341452
14351453      case REG_BLTSIZV:
r32311r32312
14451463         {
14461464            CUSTOM_REG(REG_BLTSIZH) = data & 0x7ff;
14471465            if ( CUSTOM_REG(REG_BLTSIZH) == 0 ) CUSTOM_REG(REG_BLTSIZH) = 0x800;
1448            blitter_setup(space);
1466            blitter_setup(m_maincpu->space(AS_PROGRAM));
14491467         }
14501468         break;
14511469
r32311r32312
14791497         amiga_sprite_enable_comparitor(space.machine(), (offset - REG_SPR0DATA) / 4, TRUE);
14801498         break;
14811499
1482      case REG_COP1LCH:   case REG_COP2LCH:
1500      case REG_COP1LCH:
1501      case REG_COP2LCH:
14831502         data &= ( state->m_chip_ram_mask >> 16 );
14841503         break;
14851504
trunk/src/mame/includes/amiga.h
r32311r32312
535535
536536   // interrupts
537537   void set_interrupt(int interrupt);
538   virtual void update_int2();
539   virtual void update_int6();
538   virtual bool int2_pending();
539   virtual bool int6_pending();
540   void update_int2();
541   void update_int6();
540542
541543   virtual void vblank();
542544
trunk/hash/amiga_a1000.xml
r32311r32312
154154         <dataarea name="flop" size="901120">
155155            <rom name="317748-01_extras.adf" size="901120" status="nodump" offset="0"/>
156156         </dataarea>
157      </part>
158   </software>
159   
160   <!-- EmuTOS -->
161
162   <software name="emutos93">
163      <description>EmuTOS 0.9.3</description>
164      <year>2014</year>
165      <publisher>EmuTOS development team</publisher>
166      <part name="flop1" interface="floppy_3_5">
167         <feature name="part_id" value="EmuTOS 0.9.3" />
168         <dataarea name="flop" size="901120">
169            <rom name="emutos_093.adf" size="901120" crc="96f5cc88" sha1="fa3a3aa314d50e1131a5b65a048519c76c836bd2" offset="0"/>
170         </dataarea>
157171      </part>   
158   </software>
159     
172   </software>   
173   
160174</softwarelist>

Previous 199869 Revisions Next


© 1997-2024 The MAME Team