Previous 15994 Revisions Next

r4591 Thursday 30th April, 2009 at 10:20:07 UTC by Fabio Priuli
[ATARI] WIP:
* Added 800XL init to at least load OS in memory at start. No actual progress ATM.
* PIA fixes phase 1 (floppy still broken, but at least it attempts to boot):
- factored out code from MAME source
- added correct MESS specific pia_interface (no more dummy_interface from 0.129->0.130 cycle)
[src/mame/includes]atari.h
[src/mame/machine]atari.c
[src/mess/drivers]atari.c
[src/mess/machine]ataridev.h atarifdc.c

src/mame/machine/atari.c
r4590r4591
6363 *
6464 **************************************************************/
6565
66static READ8_DEVICE_HANDLER(atari_pia_pa_r)
66READ8_DEVICE_HANDLER(atari_pia_pa_r)
6767{
6868   return atari_input_disabled() ? 0xFF : input_port_read_safe(device->machine, "djoy_0_1", 0);
6969}
7070
71static READ8_DEVICE_HANDLER(atari_pia_pb_r)
71READ8_DEVICE_HANDLER(atari_pia_pb_r)
7272{
7373   return atari_input_disabled() ? 0xFF : input_port_read_safe(device->machine, "djoy_2_3", 0);
7474}
7575
7676static WRITE8_DEVICE_HANDLER(a600xl_pia_pb_w) { a600xl_mmu(device->machine, data); }
77static WRITE8_DEVICE_HANDLER(a800xl_pia_pb_w) { a800xl_mmu(device->machine, data); }
77WRITE8_DEVICE_HANDLER(a800xl_pia_pb_w) { a800xl_mmu(device->machine, data); }
7878
79WRITE_LINE_DEVICE_HANDLER(atari_pia_cb2_w) { }
79static WRITE_LINE_DEVICE_HANDLER(atari_pia_cb2_w) { }   // This is used by Floppy drive on Atari 8bits Home Computers
8080
81const pia6821_interface atari_pia_interface =
82{
83   DEVCB_HANDLER(atari_pia_pa_r),      /* port A in */
84   DEVCB_HANDLER(atari_pia_pb_r),   /* port B in */
85   DEVCB_NULL,      /* line CA1 in */
86   DEVCB_NULL,      /* line CB1 in */
87   DEVCB_NULL,      /* line CA2 in */
88   DEVCB_NULL,      /* line CB2 in */
89   DEVCB_NULL,      /* port A out */
90   DEVCB_NULL,      /* port B out */
91   DEVCB_NULL,      /* line CA2 out */
92   DEVCB_LINE(atari_pia_cb2_w),      /* port CB2 out */
93   DEVCB_NULL,      /* IRQA */
94   DEVCB_NULL      /* IRQB */
95};
96
9781const pia6821_interface a600xl_pia_interface =
9882{
9983   DEVCB_HANDLER(atari_pia_pa_r),      /* port A in */
r4590r4591
11094   DEVCB_NULL      /* IRQB */
11195};
11296
113const pia6821_interface a800xl_pia_interface =
114{
115   DEVCB_HANDLER(atari_pia_pa_r),      /* port A in */
116   DEVCB_HANDLER(atari_pia_pb_r),   /* port B in */
117   DEVCB_NULL,      /* line CA1 in */
118   DEVCB_NULL,      /* line CB1 in */
119   DEVCB_NULL,      /* line CA2 in */
120   DEVCB_NULL,      /* line CB2 in */
121   DEVCB_NULL,      /* port A out */
122   DEVCB_HANDLER(a800xl_pia_pb_w),      /* port B out */
123   DEVCB_NULL,      /* line CA2 out */
124   DEVCB_LINE(atari_pia_cb2_w),      /* port CB2 out */
125   DEVCB_NULL,      /* IRQA */
126   DEVCB_NULL      /* IRQB */
127};
12897
129
130
131
13298/**************************************************************
13399 *
134100 * Reset hardware
r4590r4591
224190      base2 = memory_region(machine, "maincpu") + 0x15000;  /* 0x0800 bytes */
225191   }
226192   memory_install_readwrite8_handler(cpu_get_address_space(machine->cpu[0], ADDRESS_SPACE_PROGRAM), 0x5000, 0x57ff, 0, 0, rbank2, wbank2);
227   memory_set_bankptr(machine, 2, base2);
193   memory_set_bankptr(machine, 2, base2);   
228194}
229195
230196
src/mame/includes/atari.h
r4590r4591
1616
1717/*----------- defined in machine/atari.c -----------*/
1818
19extern const pia6821_interface atari_pia_interface;
2019extern const pia6821_interface a600xl_pia_interface;
21extern const pia6821_interface a800xl_pia_interface;
2220
21/* These handlers are needed by MESS Atari 8bit drivers (for their custom pia_interface) */
22READ8_DEVICE_HANDLER(atari_pia_pa_r);
23READ8_DEVICE_HANDLER(atari_pia_pb_r);
24WRITE8_DEVICE_HANDLER(a800xl_pia_pb_w);
2325
24void atari_machine_start(running_machine *machine);   // this is needed in MESS as well for other Atari 8bits systems
26/* This is needed in MESS as well for Atari 8bit drivers */
27void atari_machine_start(running_machine *machine);   
2528
2629MACHINE_START( a600xl );
2730
28WRITE_LINE_DEVICE_HANDLER(atari_pia_cb2_w);
29
30READ8_HANDLER ( atari_serin_r );
31WRITE8_HANDLER ( atari_serout_w );
3231void atari_interrupt_cb(const device_config *device, int mask);
3332
3433void a800_handle_keyboard(running_machine *machine);
src/mess/machine/ataridev.h
r4590r4591
2929
3030/* defined in atarifdc.c */
3131DEVICE_IMAGE_LOAD( a800_floppy );
32READ8_HANDLER( atari_serin_r );
33WRITE8_HANDLER( atari_serout_w );
34WRITE_LINE_DEVICE_HANDLER( atarifdc_pia_cb2_w );
3235
3336#endif /* _ATARIDEV_H */
3437
src/mess/machine/atarifdc.c
r4590r4591
739739   }
740740}
741741
742
743/* 2009-04 FP: is this used anywhere? */
744742WRITE_LINE_DEVICE_HANDLER(atarifdc_pia_cb2_w)
745743{
746744   if (!state)
src/mess/drivers/atari.c
r4590r4591
656656{
657657   int i;
658658
659   for ( i = 0; i < sizeof(atari_palette) / 3; i++ ) {
659   for ( i = 0; i < sizeof(atari_palette) / 3; i++ )
660   {
660661      palette_set_color_rgb(machine, i, atari_palette[i*3], atari_palette[i*3+1], atari_palette[i*3+2]);
661662   }
662663}
r4590r4591
681682};
682683
683684
684static const pia6821_interface pia_dummy_intf =
685const pia6821_interface atari_pia_interface =
685686{
686   DEVCB_NULL,
687   DEVCB_NULL,
688   DEVCB_NULL,
689   DEVCB_NULL,
690   DEVCB_NULL,
691   DEVCB_NULL,
692   DEVCB_NULL,
693   DEVCB_NULL,
694   DEVCB_NULL,
695   DEVCB_NULL,
696   DEVCB_NULL,
697   DEVCB_NULL
687   DEVCB_HANDLER(atari_pia_pa_r),      /* port A in */
688   DEVCB_HANDLER(atari_pia_pb_r),   /* port B in */
689   DEVCB_NULL,      /* line CA1 in */
690   DEVCB_NULL,      /* line CB1 in */
691   DEVCB_NULL,      /* line CA2 in */
692   DEVCB_NULL,      /* line CB2 in */
693   DEVCB_NULL,      /* port A out */
694   DEVCB_NULL,      /* port B out */
695   DEVCB_NULL,      /* line CA2 out */
696   DEVCB_LINE(atarifdc_pia_cb2_w),      /* port CB2 out */
697   DEVCB_NULL,      /* IRQA */
698   DEVCB_NULL      /* IRQB */
698699};
699700
701const pia6821_interface a800xl_pia_interface =
702{
703   DEVCB_HANDLER(atari_pia_pa_r),      /* port A in */
704   DEVCB_HANDLER(atari_pia_pb_r),   /* port B in */
705   DEVCB_NULL,      /* line CA1 in */
706   DEVCB_NULL,      /* line CB1 in */
707   DEVCB_NULL,      /* line CA2 in */
708   DEVCB_NULL,      /* line CB2 in */
709   DEVCB_NULL,      /* port A out */
710   DEVCB_HANDLER(a800xl_pia_pb_w),      /* port B out */
711   DEVCB_NULL,      /* line CA2 out */
712   DEVCB_LINE(atarifdc_pia_cb2_w),      /* port CB2 out */
713   DEVCB_NULL,      /* IRQA */
714   DEVCB_NULL      /* IRQB */
715};
700716
717
701718static MACHINE_DRIVER_START( a400_cartslot )
702719   MDRV_CARTSLOT_ADD("cart1")
703720   MDRV_CARTSLOT_EXTENSION_LIST("rom,bin")
r4590r4591
735752   MDRV_VIDEO_START(atari)
736753   MDRV_VIDEO_UPDATE(atari)
737754
738   MDRV_PIA6821_ADD( "pia", pia_dummy_intf )
755   MDRV_PIA6821_ADD( "pia", atari_pia_interface )
739756
740757   /* sound hardware */
741758   MDRV_SPEAKER_STANDARD_MONO("mono")
r4590r4591
827844   MDRV_CPU_PROGRAM_MAP(a800xl_mem, 0)
828845   MDRV_CPU_VBLANK_INT_HACK(a800xl_interrupt, TOTAL_LINES_60HZ)
829846
847   MDRV_PIA6821_MODIFY( "pia", a800xl_pia_interface )
848
830849   MDRV_MACHINE_START( a800xl )
831850
832851   MDRV_SCREEN_MODIFY("screen")
r4590r4591
936955   CONFIG_RAM_DEFAULT(16 * 1024)
937956SYSTEM_CONFIG_END
938957
958
959// VERY WIP code to load OS at start and, hopefully, go on with the implementation...
960static DRIVER_INIT( a800xl )
961{
962   UINT8 *rom = memory_region(machine, "maincpu");
963
964   memory_install_readwrite8_handler(cputag_get_address_space(machine, "maincpu", ADDRESS_SPACE_PROGRAM), 0xa000, 0xbfff, 0, 0, SMH_BANK1, SMH_UNMAP);
965   memory_install_readwrite8_handler(cputag_get_address_space(machine, "maincpu", ADDRESS_SPACE_PROGRAM), 0x5000, 0x57ff, 0, 0, SMH_BANK2, SMH_UNMAP);
966   memory_install_readwrite8_handler(cputag_get_address_space(machine, "maincpu", ADDRESS_SPACE_PROGRAM), 0xc000, 0xcfff, 0, 0, SMH_BANK3, SMH_UNMAP);
967   memory_install_readwrite8_handler(cputag_get_address_space(machine, "maincpu", ADDRESS_SPACE_PROGRAM), 0xd800, 0xffff, 0, 0, SMH_BANK4, SMH_UNMAP);
968   memory_set_bankptr(machine, 1, rom + 0x10000);
969   memory_set_bankptr(machine, 2, rom + 0x15000);
970   memory_set_bankptr(machine, 3, rom + 0x14000);
971   memory_set_bankptr(machine, 4, rom + 0x15800);
972}
973
939974/***************************************************************************
940975
941976  Game driver(s)
r4590r4591
947982COMP ( 1979, a400pal,  a400,    0,      a400pal,   a800,    0,      a400,   "Atari",  "Atari 400 (PAL)" , 0)
948983COMP ( 1979, a800,      0,       0,      a800,      a800,    0,      a800,   "Atari",  "Atari 800 (NTSC)" , 0)
949984COMP ( 1979, a800pal,  a800,    0,      a800pal,   a800,    0,      a800,   "Atari",  "Atari 800 (PAL)" , 0)
950COMP ( 1983, a800xl,   a800,    0,      a800xl,      a800xl,    0,      a800,   "Atari",  "Atari 800XL", GAME_NOT_WORKING )
985COMP ( 1983, a800xl,   a800,    0,      a800xl,      a800xl,    a800xl,a800,   "Atari",  "Atari 800XL", GAME_NOT_WORKING )
951986CONS ( 1982, a5200,    0,       0,      a5200,      a5200,    0,      a5200,   "Atari",  "Atari 5200", 0)

Previous 15994 Revisions Next


© 1998-2018 The MESS Team