trunk/src/mess/drivers/atari400.c
| r31877 | r31878 | |
| 260 | 260 | DECLARE_MACHINE_START(a800xl); |
| 261 | 261 | DECLARE_MACHINE_START(a5200); |
| 262 | 262 | DECLARE_PALETTE_INIT(a400); |
| 263 | | |
| 263 | |
| 264 | DECLARE_MACHINE_RESET(a400); |
| 265 | |
| 264 | 266 | DECLARE_WRITE8_MEMBER(a600xl_pia_pb_w); |
| 265 | 267 | DECLARE_WRITE8_MEMBER(a800xl_pia_pb_w); |
| 266 | 268 | |
| r31877 | r31878 | |
| 299 | 301 | |
| 300 | 302 | void setup_ram(int bank,UINT32 size); |
| 301 | 303 | void setup_cart(int type); |
| 304 | |
| 305 | // start helper (until GTIA & ANTIC are device-fied) |
| 306 | void common_start(); |
| 307 | void a5200_start(); |
| 302 | 308 | }; |
| 303 | 309 | |
| 304 | 310 | |
| r31877 | r31878 | |
| 1857 | 1863 | } |
| 1858 | 1864 | } |
| 1859 | 1865 | |
| 1866 | static UINT8 console_read(address_space &space) |
| 1867 | { |
| 1868 | return space.machine().root_device().ioport("console")->read(); |
| 1869 | } |
| 1860 | 1870 | |
| 1871 | static void console_write(address_space &space, UINT8 data) |
| 1872 | { |
| 1873 | dac_device *dac = space.machine().device<dac_device>("dac"); |
| 1874 | if (data & 0x08) |
| 1875 | dac->write_unsigned8((UINT8)-120); |
| 1876 | else |
| 1877 | dac->write_unsigned8(+120); |
| 1878 | } |
| 1879 | |
| 1880 | |
| 1881 | void a400_state::common_start() |
| 1882 | { |
| 1883 | /* GTIA */ |
| 1884 | gtia_interface gtia_intf; |
| 1885 | gtia_intf.console_read = console_read; |
| 1886 | gtia_intf.console_write = console_write; |
| 1887 | gtia_init(machine(), >ia_intf); |
| 1888 | |
| 1889 | /* ANTIC */ |
| 1890 | antic_start(machine()); |
| 1891 | } |
| 1892 | |
| 1893 | void a400_state::a5200_start() |
| 1894 | { |
| 1895 | /* GTIA */ |
| 1896 | gtia_interface gtia_intf; |
| 1897 | memset(>ia_intf, 0, sizeof(gtia_intf)); |
| 1898 | gtia_init(machine(), >ia_intf); |
| 1899 | |
| 1900 | /* ANTIC */ |
| 1901 | antic_start(machine()); |
| 1902 | } |
| 1903 | |
| 1904 | MACHINE_RESET_MEMBER( a400_state, a400 ) |
| 1905 | { |
| 1906 | pokey_device *pokey = machine().device<pokey_device>("pokey"); |
| 1907 | pokey->write(15,0); |
| 1908 | antic_reset(); |
| 1909 | } |
| 1910 | |
| 1911 | |
| 1861 | 1912 | MACHINE_START_MEMBER( a400_state, a400 ) |
| 1862 | 1913 | { |
| 1863 | | atari_machine_start(); |
| 1914 | common_start(); |
| 1864 | 1915 | setup_ram(0, m_ram->size()); |
| 1865 | 1916 | setup_ram(1, m_ram->size()); |
| 1866 | 1917 | setup_ram(2, m_ram->size()); |
| r31877 | r31878 | |
| 1873 | 1924 | |
| 1874 | 1925 | MACHINE_START_MEMBER( a400_state, a800 ) |
| 1875 | 1926 | { |
| 1876 | | atari_machine_start(); |
| 1927 | common_start(); |
| 1877 | 1928 | setup_ram(0, m_ram->size()); |
| 1878 | 1929 | setup_ram(1, m_ram->size()); |
| 1879 | 1930 | setup_ram(2, m_ram->size()); |
| r31877 | r31878 | |
| 1888 | 1939 | { |
| 1889 | 1940 | m_mmu = 0xfd; |
| 1890 | 1941 | m_ext_bank = 0x03; // only used by a130xe |
| 1891 | | atari_machine_start(); |
| 1942 | common_start(); |
| 1892 | 1943 | setup_cart(m_cartslot->get_cart_type()); |
| 1893 | 1944 | |
| 1894 | 1945 | save_item(NAME(m_cart_disabled)); |
| r31877 | r31878 | |
| 1900 | 1951 | |
| 1901 | 1952 | MACHINE_START_MEMBER( a400_state, a5200 ) |
| 1902 | 1953 | { |
| 1903 | | atari_machine_start(); |
| 1954 | a5200_start(); |
| 1904 | 1955 | setup_cart(m_cartslot->get_cart_type()); |
| 1905 | 1956 | |
| 1906 | 1957 | save_item(NAME(m_cart_disabled)); |
| r31877 | r31878 | |
| 1947 | 1998 | /* basic machine hardware */ |
| 1948 | 1999 | MCFG_CPU_ADD("maincpu", M6502, FREQ_17_EXACT) |
| 1949 | 2000 | |
| 2001 | MCFG_MACHINE_RESET_OVERRIDE( a400_state, a400 ) |
| 2002 | |
| 1950 | 2003 | /* video hardware */ |
| 1951 | 2004 | MCFG_SCREEN_ADD("screen", RASTER) |
| 1952 | 2005 | MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(1)) |
trunk/src/mame/drivers/bartop52.c
| r31877 | r31878 | |
| 30 | 30 | : atari_common_state(mconfig, type, tag), |
| 31 | 31 | m_maincpu(*this, "maincpu") { } |
| 32 | 32 | |
| 33 | virtual void machine_start(); |
| 34 | virtual void machine_reset(); |
| 33 | 35 | required_device<cpu_device> m_maincpu; |
| 34 | 36 | }; |
| 35 | 37 | |
| r31877 | r31878 | |
| 100 | 102 | INPUT_PORTS_END |
| 101 | 103 | |
| 102 | 104 | |
| 105 | void bartop52_state::machine_start() |
| 106 | { |
| 107 | /* GTIA */ |
| 108 | gtia_interface gtia_intf; |
| 109 | memset(>ia_intf, 0, sizeof(gtia_intf)); |
| 110 | gtia_init(machine(), >ia_intf); |
| 111 | |
| 112 | /* ANTIC */ |
| 113 | antic_start(machine()); |
| 114 | } |
| 115 | |
| 116 | void bartop52_state::machine_reset() |
| 117 | { |
| 118 | pokey_device *pokey = machine().device<pokey_device>("pokey"); |
| 119 | pokey->write(15,0); |
| 120 | antic_reset(); |
| 121 | } |
| 122 | |
| 123 | |
| 103 | 124 | static MACHINE_CONFIG_START( a5200, bartop52_state ) |
| 104 | 125 | /* basic machine hardware */ |
| 105 | 126 | MCFG_CPU_ADD("maincpu", M6502, FREQ_17_EXACT) |
trunk/src/mame/drivers/maxaflex.c
| r31877 | r31878 | |
| 68 | 68 | TIMER_DEVICE_CALLBACK_MEMBER(mcu_timer_proc); |
| 69 | 69 | int atari_input_disabled(); |
| 70 | 70 | virtual void machine_start(); |
| 71 | virtual void machine_reset(); |
| 71 | 72 | required_device<cpu_device> m_maincpu; |
| 72 | 73 | required_device<cpu_device> m_mcu; |
| 73 | 74 | required_device<speaker_sound_device> m_speaker; |
| r31877 | r31878 | |
| 405 | 406 | |
| 406 | 407 | void maxaflex_state::machine_start() |
| 407 | 408 | { |
| 408 | | atari_machine_start(); |
| 409 | /* GTIA */ |
| 410 | gtia_interface gtia_intf; |
| 411 | memset(>ia_intf, 0, sizeof(gtia_intf)); |
| 412 | gtia_init(machine(), >ia_intf); |
| 413 | |
| 414 | /* ANTIC */ |
| 415 | antic_start(machine()); |
| 409 | 416 | } |
| 410 | 417 | |
| 418 | void maxaflex_state::machine_reset() |
| 419 | { |
| 420 | pokey_device *pokey = machine().device<pokey_device>("pokey"); |
| 421 | pokey->write(15,0); |
| 422 | antic_reset(); |
| 423 | } |
| 424 | |
| 425 | |
| 411 | 426 | static MACHINE_CONFIG_START( a600xl, maxaflex_state ) |
| 412 | 427 | /* basic machine hardware */ |
| 413 | 428 | MCFG_CPU_ADD("maincpu", M6502, FREQ_17_EXACT) |
trunk/src/mame/machine/atari.c
| r31877 | r31878 | |
| 13 | 13 | #include "includes/atari.h" |
| 14 | 14 | #include "sound/pokey.h" |
| 15 | 15 | #include "sound/dac.h" |
| 16 | | #include "video/gtia.h" |
| 17 | 16 | |
| 18 | 17 | #define VERBOSE_POKEY 1 |
| 19 | 18 | #define VERBOSE_SERIAL 1 |
| 20 | 19 | #define VERBOSE_TIMERS 1 |
| 21 | 20 | |
| 22 | | static void pokey_reset(running_machine &machine); |
| 23 | | |
| 24 | 21 | void atari_interrupt_cb(pokey_device *device, int mask) |
| 25 | 22 | { |
| 26 | 23 | if (VERBOSE_POKEY) |
| r31877 | r31878 | |
| 194 | 191 | |
| 195 | 192 | return ret; |
| 196 | 193 | } |
| 197 | | |
| 198 | | |
| 199 | | /************************************* |
| 200 | | * |
| 201 | | * Generic Atari Code |
| 202 | | * |
| 203 | | *************************************/ |
| 204 | | |
| 205 | | |
| 206 | | static void pokey_reset(running_machine &machine) |
| 207 | | { |
| 208 | | pokey_device *pokey = downcast<pokey_device *>(machine.device("pokey")); |
| 209 | | pokey->write(15,0); |
| 210 | | } |
| 211 | | |
| 212 | | |
| 213 | | static UINT8 console_read(address_space &space) |
| 214 | | { |
| 215 | | return space.machine().root_device().ioport("console")->read(); |
| 216 | | } |
| 217 | | |
| 218 | | |
| 219 | | static void console_write(address_space &space, UINT8 data) |
| 220 | | { |
| 221 | | dac_device *dac = space.machine().device<dac_device>("dac"); |
| 222 | | if (data & 0x08) |
| 223 | | dac->write_unsigned8((UINT8)-120); |
| 224 | | else |
| 225 | | dac->write_unsigned8(+120); |
| 226 | | } |
| 227 | | |
| 228 | | |
| 229 | | static void _antic_reset(running_machine &machine) |
| 230 | | { |
| 231 | | antic_reset(); |
| 232 | | } |
| 233 | | |
| 234 | | |
| 235 | | void atari_common_state::atari_machine_start() |
| 236 | | { |
| 237 | | gtia_interface gtia_intf; |
| 238 | | |
| 239 | | /* GTIA */ |
| 240 | | memset(>ia_intf, 0, sizeof(gtia_intf)); |
| 241 | | if (machine().root_device().ioport("console") != NULL) |
| 242 | | gtia_intf.console_read = console_read; |
| 243 | | if (machine().device<dac_device>("dac") != NULL) |
| 244 | | gtia_intf.console_write = console_write; |
| 245 | | gtia_init(machine(), >ia_intf); |
| 246 | | |
| 247 | | /* pokey */ |
| 248 | | machine().add_notifier(MACHINE_NOTIFY_RESET, machine_notify_delegate(FUNC(pokey_reset), &machine())); |
| 249 | | |
| 250 | | /* ANTIC */ |
| 251 | | machine().add_notifier(MACHINE_NOTIFY_RESET, machine_notify_delegate(FUNC(_antic_reset), &machine())); |
| 252 | | |
| 253 | | /* save states */ |
| 254 | | machine().save().save_pointer(NAME((UINT8 *) &antic.r), sizeof(antic.r)); |
| 255 | | machine().save().save_pointer(NAME((UINT8 *) &antic.w), sizeof(antic.w)); |
| 256 | | } |
trunk/src/mame/includes/atari.h
| r31877 | r31878 | |
| 23 | 23 | : driver_device(mconfig, type, tag), |
| 24 | 24 | tv_artifacts(0) { } |
| 25 | 25 | |
| 26 | | /* This is needed in MESS as well for Atari 8bit drivers */ |
| 27 | | void atari_machine_start(); |
| 28 | | |
| 29 | 26 | virtual void video_start(); |
| 30 | 27 | UINT32 screen_update_atari(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); |
| 31 | 28 | |
| r31877 | r31878 | |
| 562 | 559 | |
| 563 | 560 | extern ANTIC antic; |
| 564 | 561 | |
| 562 | void antic_start(running_machine &machine); |
| 565 | 563 | void antic_reset(void); |
| 566 | 564 | |
| 567 | 565 | |
| r31877 | r31878 | |
| 610 | 608 | ANTIC_RENDERER( antic_mode_f_32 ); |
| 611 | 609 | ANTIC_RENDERER( antic_mode_f_40 ); |
| 612 | 610 | ANTIC_RENDERER( antic_mode_f_48 ); |
| 611 | ANTIC_RENDERER( gtia_mode_1_32 ); |
| 612 | ANTIC_RENDERER( gtia_mode_1_40 ); |
| 613 | ANTIC_RENDERER( gtia_mode_1_48 ); |
| 614 | ANTIC_RENDERER( gtia_mode_2_32 ); |
| 615 | ANTIC_RENDERER( gtia_mode_2_40 ); |
| 616 | ANTIC_RENDERER( gtia_mode_2_48 ); |
| 617 | ANTIC_RENDERER( gtia_mode_3_32 ); |
| 618 | ANTIC_RENDERER( gtia_mode_3_40 ); |
| 619 | ANTIC_RENDERER( gtia_mode_3_48 ); |
| 613 | 620 | |
| 614 | 621 | #endif /* ATARI_H */ |
trunk/src/mame/video/antic.c
| r31877 | r31878 | |
| 20 | 20 | |
| 21 | 21 | ANTIC antic; |
| 22 | 22 | |
| 23 | void antic_start(running_machine &machine) |
| 24 | { |
| 25 | /* save states */ |
| 26 | machine.save().save_pointer(NAME((UINT8 *) &antic.r), sizeof(antic.r)); |
| 27 | machine.save().save_pointer(NAME((UINT8 *) &antic.w), sizeof(antic.w)); |
| 28 | } |
| 29 | |
| 23 | 30 | /************************************************************** |
| 24 | 31 | * |
| 25 | 32 | * Reset ANTIC |
| r31877 | r31878 | |
| 585 | 592 | REP48(MODEF); |
| 586 | 593 | POST_GFX(48); |
| 587 | 594 | } |
| 595 | |
| 596 | /************* ANTIC mode 0F : GTIA mode 1 ******************** |
| 597 | * graphics mode 8x1:16 (32/40/48 byte per line) |
| 598 | ***************************************************************/ |
| 599 | #define GTIA1(s) COPY4(dst, antic.pf_gtia1[video->data[s]]) |
| 600 | |
| 601 | ANTIC_RENDERER( gtia_mode_1_32 ) |
| 602 | { |
| 603 | PREPARE_GFXG1(space, 32); |
| 604 | REP32(GTIA1); |
| 605 | POST_GFX(32); |
| 606 | } |
| 607 | ANTIC_RENDERER( gtia_mode_1_40 ) |
| 608 | { |
| 609 | PREPARE_GFXG1(space, 40); |
| 610 | REP40(GTIA1); |
| 611 | POST_GFX(40); |
| 612 | } |
| 613 | ANTIC_RENDERER( gtia_mode_1_48 ) |
| 614 | { |
| 615 | PREPARE_GFXG1(space, 48); |
| 616 | REP48(GTIA1); |
| 617 | POST_GFX(48); |
| 618 | } |
| 619 | |
| 620 | /************* ANTIC mode 0F : GTIA mode 2 ******************** |
| 621 | * graphics mode 8x1:16 (32/40/48 byte per line) |
| 622 | ***************************************************************/ |
| 623 | #define GTIA2(s) COPY4(dst, antic.pf_gtia2[video->data[s]]) |
| 624 | |
| 625 | ANTIC_RENDERER( gtia_mode_2_32 ) |
| 626 | { |
| 627 | PREPARE_GFXG2(space, 32); |
| 628 | REP32(GTIA2); |
| 629 | POST_GFX(32); |
| 630 | } |
| 631 | ANTIC_RENDERER( gtia_mode_2_40 ) |
| 632 | { |
| 633 | PREPARE_GFXG2(space, 40); |
| 634 | REP40(GTIA2); |
| 635 | POST_GFX(40); |
| 636 | } |
| 637 | ANTIC_RENDERER( gtia_mode_2_48 ) |
| 638 | { |
| 639 | PREPARE_GFXG2(space, 48); |
| 640 | REP48(GTIA2); |
| 641 | POST_GFX(48); |
| 642 | } |
| 643 | |
| 644 | /************* ANTIC mode 0F : GTIA mode 3 ******************** |
| 645 | * graphics mode 8x1:16 (32/40/48 byte per line) |
| 646 | ***************************************************************/ |
| 647 | #define GTIA3(s) COPY4(dst, antic.pf_gtia3[video->data[s]]) |
| 648 | |
| 649 | ANTIC_RENDERER( gtia_mode_3_32 ) |
| 650 | { |
| 651 | PREPARE_GFXG3(space, 32); |
| 652 | REP32(GTIA3); |
| 653 | POST_GFX(32); |
| 654 | } |
| 655 | ANTIC_RENDERER( gtia_mode_3_40 ) |
| 656 | { |
| 657 | PREPARE_GFXG3(space, 40); |
| 658 | REP40(GTIA3); |
| 659 | POST_GFX(40); |
| 660 | } |
| 661 | ANTIC_RENDERER( gtia_mode_3_48 ) |
| 662 | { |
| 663 | PREPARE_GFXG3(space, 48); |
| 664 | REP48(GTIA3); |
| 665 | POST_GFX(48); |
| 666 | } |
trunk/src/mame/video/gtia.c
| r31877 | r31878 | |
| 1068 | 1068 | gtia.w.grafp3[1] = gtia.w.grafp3[0]; |
| 1069 | 1069 | gtia.w.grafm[1] = gtia.w.grafm[0]; |
| 1070 | 1070 | } |
| 1071 | | |
| 1072 | | /************* ANTIC mode 0F : GTIA mode 1 ******************** |
| 1073 | | * graphics mode 8x1:16 (32/40/48 byte per line) |
| 1074 | | ***************************************************************/ |
| 1075 | | #define GTIA1(s) COPY4(dst, antic.pf_gtia1[video->data[s]]) |
| 1076 | | |
| 1077 | | ANTIC_RENDERER( gtia_mode_1_32 ) |
| 1078 | | { |
| 1079 | | PREPARE_GFXG1(space, 32); |
| 1080 | | REP32(GTIA1); |
| 1081 | | POST_GFX(32); |
| 1082 | | } |
| 1083 | | ANTIC_RENDERER( gtia_mode_1_40 ) |
| 1084 | | { |
| 1085 | | PREPARE_GFXG1(space, 40); |
| 1086 | | REP40(GTIA1); |
| 1087 | | POST_GFX(40); |
| 1088 | | } |
| 1089 | | ANTIC_RENDERER( gtia_mode_1_48 ) |
| 1090 | | { |
| 1091 | | PREPARE_GFXG1(space, 48); |
| 1092 | | REP48(GTIA1); |
| 1093 | | POST_GFX(48); |
| 1094 | | } |
| 1095 | | |
| 1096 | | /************* ANTIC mode 0F : GTIA mode 2 ******************** |
| 1097 | | * graphics mode 8x1:16 (32/40/48 byte per line) |
| 1098 | | ***************************************************************/ |
| 1099 | | #define GTIA2(s) COPY4(dst, antic.pf_gtia2[video->data[s]]) |
| 1100 | | |
| 1101 | | ANTIC_RENDERER( gtia_mode_2_32 ) |
| 1102 | | { |
| 1103 | | PREPARE_GFXG2(space, 32); |
| 1104 | | REP32(GTIA2); |
| 1105 | | POST_GFX(32); |
| 1106 | | } |
| 1107 | | ANTIC_RENDERER( gtia_mode_2_40 ) |
| 1108 | | { |
| 1109 | | PREPARE_GFXG2(space, 40); |
| 1110 | | REP40(GTIA2); |
| 1111 | | POST_GFX(40); |
| 1112 | | } |
| 1113 | | ANTIC_RENDERER( gtia_mode_2_48 ) |
| 1114 | | { |
| 1115 | | PREPARE_GFXG2(space, 48); |
| 1116 | | REP48(GTIA2); |
| 1117 | | POST_GFX(48); |
| 1118 | | } |
| 1119 | | |
| 1120 | | /************* ANTIC mode 0F : GTIA mode 3 ******************** |
| 1121 | | * graphics mode 8x1:16 (32/40/48 byte per line) |
| 1122 | | ***************************************************************/ |
| 1123 | | #define GTIA3(s) COPY4(dst, antic.pf_gtia3[video->data[s]]) |
| 1124 | | |
| 1125 | | ANTIC_RENDERER( gtia_mode_3_32 ) |
| 1126 | | { |
| 1127 | | PREPARE_GFXG3(space, 32); |
| 1128 | | REP32(GTIA3); |
| 1129 | | POST_GFX(32); |
| 1130 | | } |
| 1131 | | ANTIC_RENDERER( gtia_mode_3_40 ) |
| 1132 | | { |
| 1133 | | PREPARE_GFXG3(space, 40); |
| 1134 | | REP40(GTIA3); |
| 1135 | | POST_GFX(40); |
| 1136 | | } |
| 1137 | | ANTIC_RENDERER( gtia_mode_3_48 ) |
| 1138 | | { |
| 1139 | | PREPARE_GFXG3(space, 48); |
| 1140 | | REP48(GTIA3); |
| 1141 | | POST_GFX(48); |
| 1142 | | } |
trunk/src/mame/video/gtia.h
| r31877 | r31878 | |
| 135 | 135 | |
| 136 | 136 | void gtia_init(running_machine &machine, const gtia_interface *intf); |
| 137 | 137 | |
| 138 | | ANTIC_RENDERER( gtia_mode_1_32 ); |
| 139 | | ANTIC_RENDERER( gtia_mode_1_40 ); |
| 140 | | ANTIC_RENDERER( gtia_mode_1_48 ); |
| 141 | | ANTIC_RENDERER( gtia_mode_2_32 ); |
| 142 | | ANTIC_RENDERER( gtia_mode_2_40 ); |
| 143 | | ANTIC_RENDERER( gtia_mode_2_48 ); |
| 144 | | ANTIC_RENDERER( gtia_mode_3_32 ); |
| 145 | | ANTIC_RENDERER( gtia_mode_3_40 ); |
| 146 | | ANTIC_RENDERER( gtia_mode_3_48 ); |
| 147 | 138 | void gtia_render(VIDEO *video); |
| 148 | 139 | |
| 149 | 140 | #endif /* __GTIA_H__ */ |