diff options
Diffstat (limited to 'src/mame/drivers/atari400.cpp')
-rw-r--r-- | src/mame/drivers/atari400.cpp | 2515 |
1 files changed, 0 insertions, 2515 deletions
diff --git a/src/mame/drivers/atari400.cpp b/src/mame/drivers/atari400.cpp deleted file mode 100644 index ebb5c0739e2..00000000000 --- a/src/mame/drivers/atari400.cpp +++ /dev/null @@ -1,2515 +0,0 @@ -// license:GPL-2.0+ -// copyright-holders:Juergen Buchmueller -/****************************************************************************** - Atari 400/800 - - MESS Driver - - Juergen Buchmueller, June 1998 - - 2009-05 FP changes: - Factored out MESS specific code from MAME - Added skeleton support for other XL/XE machines (VERY preliminary): - - a600xl based on maxaflex emulation in MAME - - a1200xl sharing a800xl code without BASIC - - a65xe, a65xea, a130xe, a800xe, xegs sharing a800xl code (and this is wrong - at least for xegs) - Added proper dumps and labels, thanks to Freddy Offenga researches (a few - are still marked BAD_DUMP while waiting for crc confirmation, since they - have been obtained by splitting whole dumps) - - To Do: - - Find out why a600xl and a800xl don't work (xe machines should then follow) - - Investigate supported RAM sizes and OS versions in different models - - Implement differences between various models (currently most of the - XL/XE are exactly an a800xl, but this will change as soon as emulation - starts to work) - - Fix various keyboard differences - - Freddy emulation for 800XLF? - - Add support for proto boards and expansions (a1400xl, C/PM board, etc.) - - Clean up the whole driver + cart + floppy structure - - 2013-11-06 Robert Tuccitto: - Updated Palette per 'CGIA D020577' and 'GTIA C014805', including - normalized grayscale with proper color gradient. Added Phase Shift - values 24.7 thru 27.7 degrees in 0.5 degree increments. Enabled - Phase Shift 26.2 degrees as default. - - 2013-11-23 Robert Tuccitto: - Added palette notes - -******************************************************************************/ - -#include "emu.h" -#include "includes/atari400.h" - -#include "cpu/m6502/m6502.h" -#include "machine/6821pia.h" -#include "machine/ram.h" -#include "machine/timer.h" -#include "machine/atarifdc.h" -#include "sound/dac.h" -#include "sound/pokey.h" - -#include "bus/a800/a800_slot.h" -#include "bus/a800/a800_carts.h" -#include "bus/a800/a8sio.h" - -#include "screen.h" -#include "softlist.h" -#include "speaker.h" - -/****************************************************************************** - Atari 800 memory map (preliminary) - - ***************** read access ******************* - range short description - 0000-9FFF RAM main memory - A000-BFFF RAM/ROM RAM or (banked) ROM cartridges - C000-CFFF ROM unused or monitor ROM - - ********* GTIA ******************************** - - D000 m0pf missile 0 playfield collisions - D001 m1pf missile 1 playfield collisions - D002 m2pf missile 2 playfield collisions - D003 m3pf missile 3 playfield collisions - D004 p0pf player 0 playfield collisions - D005 p1pf player 1 playfield collisions - D006 p2pf player 2 playfield collisions - D007 p3pf player 3 playfield collisions - D008 m0pl missile 0 player collisions - D009 m1pl missile 1 player collisions - D00A m2pl missile 2 player collisions - D00B m3pl missile 3 player collisions - D00C p0pl player 0 player collisions - D00D p1pl player 1 player collisions - D00E p2pl player 2 player collisions - D00F p3pl player 3 player collisions - D010 but0 button stick 0 - D011 but1 button stick 1 - D012 but2 button stick 2 - D013 but3 button stick 3 - D014 xff unused - D015 xff unused - D016 xff unused - D017 xff unused - D018 xff unused - D019 xff unused - D01A xff unused - D01B xff unused - D01C xff unused - D01D xff unused - D01E xff unused - D01F cons console keys - D020-D0FF repeated 7 times - - D100-D1FF xff - - ********* POKEY ******************************** - D200 pot0 paddle 0 - D201 pot1 paddle 1 - D202 pot2 paddle 2 - D203 pot3 paddle 3 - D204 pot4 paddle 4 - D205 pot5 paddle 5 - D206 pot6 paddle 6 - D207 pot7 paddle 7 - D208 potb all paddles - D209 kbcode keyboard scan code - D20A random random number generator - D20B xff unused - D20C xff unused - D20D serin serial input - D20E irqst IRQ status - D20F skstat sk status - D210-D2FF repeated 15 times - - ********* PIO ******************************** - D300 porta read pio port A - D301 portb read pio port B - D302 pactl read pio port A control - D303 pbctl read pio port B control - D304-D3FF repeated 63 times - - ********* ANTIC ******************************** - D400 xff unused - D401 xff unused - D402 xff unused - D403 xff unused - D404 xff unused - D405 xff unused - D406 xff unused - D407 xff unused - D408 xff unused - D409 xff unused - D40A xff unused - D40B vcount vertical (scanline) counter - D40C penh light pen horizontal pos - D40D penv light pen vertical pos - D40E xff unused - D40F nmist NMI status - - D500-D7FF xff unused memory - - D800-DFFF ROM floating point ROM - E000-FFFF ROM bios ROM - - ***************** write access ******************* - range short description - 0000-9FFF RAM main memory - A000-BFFF RAM/ROM RAM or (banked) ROM - C000-CFFF ROM unused or monitor ROM - - ********* GTIA ******************************** - D000 hposp0 player 0 horz position - D001 hposp1 player 1 horz position - D002 hposp2 player 2 horz position - D003 hposp3 player 3 horz position - D004 hposm0 missile 0 horz position - D005 hposm1 missile 0 horz position - D006 hposm2 missile 0 horz position - D007 hposm3 missile 0 horz position - D008 sizep0 size player 0 - D009 sizep1 size player 0 - D00A sizep2 size player 0 - D00B sizep3 size player 0 - D00C sizem size missiles - D00D grafp0 graphics data for player 0 - D00E grafp1 graphics data for player 1 - D00F grafp2 graphics data for player 2 - D010 grafp3 graphics data for player 3 - D011 grafm graphics data for missiles - D012 colpm0 color for player/missile 0 - D013 colpm1 color for player/missile 1 - D014 colpm2 color for player/missile 2 - D015 colpm3 color for player/missile 3 - D016 colpf0 color 0 playfield - D017 colpf1 color 1 playfield - D018 colpf2 color 2 playfield - D019 colpf3 color 3 playfield - D01A colbk background playfield - D01B prior priority select - D01C vdelay delay until vertical retrace - D01D gractl graphics control - D01E hitclr clear collisions - D01F wcons write console (speaker) - D020-D0FF repeated 7 times - - D100-D1FF xff unused - - ********* POKEY ******************************** - D200 audf1 frequency audio chan #1 - D201 audc1 control audio chan #1 - D202 audf2 frequency audio chan #2 - D203 audc2 control audio chan #2 - D204 audf3 frequency audio chan #3 - D205 audc3 control audio chan #3 - D206 audf4 frequency audio chan #4 - D207 audc4 control audio chan #4 - D208 audctl audio control - D209 stimer start timer - D20A skres sk reset - D20B potgo start pot AD conversion - D20C xff unused - D20D serout serial output - D20E irqen IRQ enable - D20F skctl sk control - D210-D2FF repeated 15 times - - ********* PIO ******************************** - D300 porta write pio port A (output or mask) - D301 portb write pio port B (output or mask) - D302 pactl write pio port A control - D303 pbctl write pio port B control - D304-D3FF repeated - - ********* ANTIC ******************************** - D400 dmactl write DMA control - D401 chactl write character control - D402 dlistl write display list lo - D403 dlisth write display list hi - D404 hscrol write horz scroll - D405 vscrol write vert scroll - D406 xff unused - D407 pmbash player/missile base addr hi - D408 xff unused - D409 chbash character generator base addr hi - D40A wsync wait for hsync - D40B xff unused - D40C xff unused - D40D xff unused - D40E nmien NMI enable - D40F nmires NMI reset - - D500-D7FF xff unused memory - - D800-DFFF ROM floating point ROM - E000-FFFF ROM BIOS ROM -******************************************************************************/ - -class a400_state : public atari_common_state -{ -public: - a400_state(const machine_config &mconfig, device_type type, const char *tag) : - atari_common_state(mconfig, type, tag), - m_ram(*this, RAM_TAG), - m_pia(*this, "pia"), - m_dac(*this, "dac"), - m_region_maincpu(*this, "maincpu"), - m_cart(*this, "cartleft"), - m_cart2(*this, "cartright") - { } - - void atari_common_nodac(machine_config &config); - void atari_common(machine_config &config); - void a800pal(machine_config &config); - void a400pal(machine_config &config); - void a5200(machine_config &config); - void a800(machine_config &config); - void a1200xl(machine_config &config); - void a800xlpal(machine_config &config); - void a130xe(machine_config &config); - void a800xl(machine_config &config); - void a600xl(machine_config &config); - void xegs(machine_config &config); - void a400(machine_config &config); - -private: - DECLARE_MACHINE_START(a400); - DECLARE_MACHINE_START(a800); - DECLARE_MACHINE_START(a800xl); - DECLARE_MACHINE_START(a5200); - void a400_palette(palette_device &palette) const; - - DECLARE_MACHINE_RESET(a400); - - void gtia_cb(uint8_t data); - - void a600xl_pia_pb_w(uint8_t data); - void a800xl_pia_pb_w(uint8_t data); - - uint8_t read_d5xx(offs_t offset); // at least one cart type can enable/disable roms when reading - void disable_cart(offs_t offset, uint8_t data); - - // these are needed to handle carts which can disable ROM without - // installing/disinstalling continuously RAM and ROM (with e.g. big - // performance hit in Williams carts) - uint8_t special_read_8000(offs_t offset); - void special_write_8000(offs_t offset, uint8_t data); - uint8_t special_read_a000(offs_t offset); - void special_write_a000(offs_t offset, uint8_t data); - - uint8_t a600xl_low_r(offs_t offset); - uint8_t a1200xl_low_r(offs_t offset); - uint8_t a800xl_low_r(offs_t offset); - void a800xl_low_w(offs_t offset, uint8_t data); - uint8_t a800xl_high_r(offs_t offset); - void a800xl_high_w(offs_t offset, uint8_t data); - uint8_t a130xe_low_r(offs_t offset); - void a130xe_low_w(offs_t offset, uint8_t data); - uint8_t xegs_low_r(offs_t offset); - void xegs_low_w(offs_t offset, uint8_t data); - - TIMER_DEVICE_CALLBACK_MEMBER(a400_interrupt); - TIMER_DEVICE_CALLBACK_MEMBER(a800xl_interrupt); - TIMER_DEVICE_CALLBACK_MEMBER(a5200_interrupt); - - void a1200xl_mem(address_map &map); - void a130xe_mem(address_map &map); - void a400_mem(address_map &map); - void a5200_mem(address_map &map); - void a600xl_mem(address_map &map); - void a800xl_mem(address_map &map); - void xegs_mem(address_map &map); - - //required_device<cpu_device> m_maincpu; // maincpu is already contained in atari_common_state - required_device<ram_device> m_ram; - required_device<pia6821_device> m_pia; - optional_device<dac_bit_interface> m_dac; - required_memory_region m_region_maincpu; - memory_bank *m_0000 = nullptr; - memory_bank *m_8000 = nullptr; - memory_bank *m_a000 = nullptr; - optional_device<a800_cart_slot_device> m_cart; - optional_device<a800_cart_slot_device> m_cart2; - - int m_cart_disabled, m_cart_helper; - int m_last_offs; - uint8_t m_mmu, m_ext_bank; - - void setup_ram(int bank, uint32_t size); - void setup_cart(a800_cart_slot_device *slot); -}; - - - -/************************************************************** - * - * Memory handlers - * - **************************************************************/ - -uint8_t a400_state::a600xl_low_r(offs_t offset) -{ - if (m_mmu & 0x80) - return 0xff; - else - return m_region_maincpu->base()[0xd000 + (offset & 0x7ff)]; -} - - -uint8_t a400_state::a1200xl_low_r(offs_t offset) -{ - if (offset < 0x5000) // 0x0000-0x4fff - return m_ram->pointer()[offset]; - else if (offset < 0x5800) // 0x5000-0x57ff - { - if (m_mmu & 0x80) - return m_ram->pointer()[offset]; - else - return m_region_maincpu->base()[0xd000 + (offset & 0x7ff)]; - } - else if (offset < 0xc000) // 0x5800-0xbfff - return m_ram->pointer()[offset]; - else // 0xc000-0xcfff - { - if (!(m_mmu & 0x01)) - return m_ram->pointer()[offset]; - else - return m_region_maincpu->base()[offset]; - } -} - -uint8_t a400_state::a800xl_low_r(offs_t offset) -{ - if (offset < 0x5000) // 0x0000-0x4fff - return m_ram->pointer()[offset]; - else if (offset < 0x5800) // 0x5000-0x57ff - { - if (m_mmu & 0x80) - return m_ram->pointer()[offset]; - else - return m_region_maincpu->base()[0xd000 + (offset & 0x7ff)]; - } - else if (offset < 0xa000) // 0x5800-0x9fff - return m_ram->pointer()[offset]; - else if (offset < 0xc000) // 0xa000-0xbfff - { - if (m_mmu & 0x02) - return m_ram->pointer()[offset]; - else - return m_region_maincpu->base()[(offset & 0x1fff) + 0xa000]; - } - else // 0xc000-0xcfff - { - if (!(m_mmu & 0x01)) - return m_ram->pointer()[offset]; - else - return m_region_maincpu->base()[offset]; - } -} - -void a400_state::a800xl_low_w(offs_t offset, uint8_t data) -{ - if (offset < 0x5000) // 0x0000-0x4fff - m_ram->pointer()[offset] = data; - else if (offset < 0x5800) // 0x5000-0x57ff - { - if (m_mmu & 0x80) - m_ram->pointer()[offset] = data; - } - else if (offset < 0xa000) // 0x5800-0x7fff - m_ram->pointer()[offset] = data; - else if (offset < 0xc000) // 0xa000-0xbfff - { - if (m_mmu & 0x02) - m_ram->pointer()[offset] = data; - } - else // 0xc000-0xcfff - { - if (!(m_mmu & 0x01)) - m_ram->pointer()[offset] = data; - } -} - -uint8_t a400_state::a800xl_high_r(offs_t offset) -{ - if (m_mmu & 0x01) - return m_region_maincpu->base()[0xd800 + offset]; - else - return m_ram->pointer()[0xd800 + offset]; -} - -void a400_state::a800xl_high_w(offs_t offset, uint8_t data) -{ - if (!(m_mmu & 0x01)) - m_ram->pointer()[0xd800 + offset] = data; -} - -uint8_t a400_state::a130xe_low_r(offs_t offset) -{ - if (offset < 0x4000) // 0x0000-0x3fff - return m_ram->pointer()[offset]; - else if (offset < 0x8000) // 0x4000-0x7fff - { - // NOTE: ANTIC accesses to extra RAM are not supported yet! - if (!(m_mmu & 0x80) && offset >= 0x5000 && offset < 0x5800) - return m_region_maincpu->base()[0xd000 + (offset & 0x7ff)]; - if (!(m_mmu & 0x10)) - return m_ram->pointer()[offset + 0x10000 + (m_ext_bank * 0x4000)]; - else - return m_ram->pointer()[offset]; - } - else if (offset < 0xa000) // 0x8000-0x9fff - return m_ram->pointer()[offset]; - else if (offset < 0xc000) // 0xa000-0xbfff - { - if (m_mmu & 0x02) - return m_ram->pointer()[offset]; - else - return m_region_maincpu->base()[(offset & 0x1fff) + 0xa000]; - } - else // 0xc000-0xcfff - { - if (!(m_mmu & 0x01)) - return m_ram->pointer()[offset]; - else - return m_region_maincpu->base()[offset]; - } -} - -void a400_state::a130xe_low_w(offs_t offset, uint8_t data) -{ - if (offset < 0x4000) // 0x0000-0x3fff - m_ram->pointer()[offset] = data; - else if (offset < 0x8000) // 0x4000-0x7fff - { - // NOTE: ANTIC accesses to extra RAM are not supported yet! - if (!(m_mmu & 0x80) && offset >= 0x5000 && offset < 0x5800) - return; - if (!(m_mmu & 0x10)) - m_ram->pointer()[offset + 0x10000 + (m_ext_bank * 0x4000)] = data; - else - m_ram->pointer()[offset] = data; - } - else if (offset < 0xa000) // 0x5800-0x7fff - m_ram->pointer()[offset] = data; - else if (offset < 0xc000) // 0xa000-0xbfff - { - if (m_mmu & 0x02) - m_ram->pointer()[offset] = data; - } - else // 0xc000-0xcfff - { - if (!(m_mmu & 0x01)) - m_ram->pointer()[offset] = data; - } -} - -uint8_t a400_state::xegs_low_r(offs_t offset) -{ - if (offset < 0x5000) // 0x0000-0x4fff - return m_ram->pointer()[offset]; - else if (offset < 0x5800) // 0x5000-0x57ff - { - if (m_mmu & 0x80) - return m_ram->pointer()[offset]; - else - return m_region_maincpu->base()[0xd000 + (offset & 0x7ff)]; - } - else if (offset < 0x8000) // 0x5800-0x7fff - return m_ram->pointer()[offset]; - else if (offset < 0xa000) // 0x8000-0x9fff - return m_region_maincpu->base()[0x8000 + (offset & 0x1fff)]; - else if (offset < 0xc000) // 0xa000-0xbfff - return m_region_maincpu->base()[0x8000 + (offset & 0x1fff)]; - else // 0xc000-0xcfff - { - if (!(m_mmu & 0x01)) - return m_ram->pointer()[offset]; - else - return m_region_maincpu->base()[offset]; - } -} - -void a400_state::xegs_low_w(offs_t offset, uint8_t data) -{ - if (offset < 0x5000) // 0x0000-0x4fff - m_ram->pointer()[offset] = data; - else if (offset < 0x5800) // 0x5000-0x57ff - { - if (m_mmu & 0x80) - m_ram->pointer()[offset] = data; - } - else if (offset < 0x8000) // 0x5800-0x7fff - m_ram->pointer()[offset] = data; - else if (offset < 0xc000) // 0xa000-0xbfff - return; - else // 0xc000-0xcfff - { - if (!(m_mmu & 0x01)) - m_ram->pointer()[offset] = data; - } -} - -/************************************************************** - * - * Memory maps - * - **************************************************************/ - - -void a400_state::a400_mem(address_map &map) -{ - map(0x0000, 0xbfff).noprw(); // RAM installed at runtime - map(0xc000, 0xcfff).rom(); - map(0xd000, 0xd0ff).rw(m_gtia, FUNC(gtia_device::read), FUNC(gtia_device::write)); - map(0xd100, 0xd1ff).noprw(); - map(0xd200, 0xd2ff).rw("pokey", FUNC(pokey_device::read), FUNC(pokey_device::write)); - map(0xd300, 0xd3ff).rw(m_pia, FUNC(pia6821_device::read_alt), FUNC(pia6821_device::write_alt)); - map(0xd400, 0xd4ff).rw(m_antic, FUNC(antic_device::read), FUNC(antic_device::write)); - map(0xd500, 0xd7ff).noprw(); - map(0xd800, 0xffff).rom(); -} - - -void a400_state::a600xl_mem(address_map &map) -{ - map(0x0000, 0x3fff).ram(); - map(0x5000, 0x57ff).r(FUNC(a400_state::a600xl_low_r)); // self test or NOP - map(0xa000, 0xbfff).rom(); // BASIC - map(0xc000, 0xcfff).rom(); // OS - map(0xd000, 0xd0ff).rw(m_gtia, FUNC(gtia_device::read), FUNC(gtia_device::write)); - map(0xd100, 0xd1ff).noprw(); - map(0xd200, 0xd2ff).rw("pokey", FUNC(pokey_device::read), FUNC(pokey_device::write)); - map(0xd300, 0xd3ff).rw(m_pia, FUNC(pia6821_device::read_alt), FUNC(pia6821_device::write_alt)); - map(0xd400, 0xd4ff).rw(m_antic, FUNC(antic_device::read), FUNC(antic_device::write)); - map(0xd500, 0xd7ff).noprw(); - map(0xd800, 0xffff).rom(); // OS -} - - -void a400_state::a1200xl_mem(address_map &map) -{ - map(0x0000, 0xcfff).rw(FUNC(a400_state::a1200xl_low_r), FUNC(a400_state::xegs_low_w)); - map(0xd000, 0xd0ff).rw(m_gtia, FUNC(gtia_device::read), FUNC(gtia_device::write)); - map(0xd100, 0xd1ff).noprw(); - map(0xd200, 0xd2ff).rw("pokey", FUNC(pokey_device::read), FUNC(pokey_device::write)); - map(0xd300, 0xd3ff).rw(m_pia, FUNC(pia6821_device::read_alt), FUNC(pia6821_device::write_alt)); - map(0xd400, 0xd4ff).rw(m_antic, FUNC(antic_device::read), FUNC(antic_device::write)); - map(0xd500, 0xd7ff).noprw(); - map(0xd800, 0xffff).rw(FUNC(a400_state::a800xl_high_r), FUNC(a400_state::a800xl_high_w)); -} - - -void a400_state::a800xl_mem(address_map &map) -{ - map(0x0000, 0xcfff).rw(FUNC(a400_state::a800xl_low_r), FUNC(a400_state::a800xl_low_w)); - map(0xd000, 0xd0ff).rw(m_gtia, FUNC(gtia_device::read), FUNC(gtia_device::write)); - map(0xd100, 0xd1ff).noprw(); - map(0xd200, 0xd2ff).rw("pokey", FUNC(pokey_device::read), FUNC(pokey_device::write)); - map(0xd300, 0xd3ff).rw(m_pia, FUNC(pia6821_device::read_alt), FUNC(pia6821_device::write_alt)); - map(0xd400, 0xd4ff).rw(m_antic, FUNC(antic_device::read), FUNC(antic_device::write)); - map(0xd500, 0xd7ff).noprw(); - map(0xd800, 0xffff).rw(FUNC(a400_state::a800xl_high_r), FUNC(a400_state::a800xl_high_w)); -} - - -void a400_state::a130xe_mem(address_map &map) -{ - map(0x0000, 0xcfff).rw(FUNC(a400_state::a130xe_low_r), FUNC(a400_state::a800xl_low_w)); - map(0xd000, 0xd0ff).rw(m_gtia, FUNC(gtia_device::read), FUNC(gtia_device::write)); - map(0xd100, 0xd1ff).noprw(); - map(0xd200, 0xd2ff).rw("pokey", FUNC(pokey_device::read), FUNC(pokey_device::write)); - map(0xd300, 0xd3ff).rw(m_pia, FUNC(pia6821_device::read_alt), FUNC(pia6821_device::write_alt)); - map(0xd400, 0xd4ff).rw(m_antic, FUNC(antic_device::read), FUNC(antic_device::write)); - map(0xd500, 0xd7ff).noprw(); - map(0xd800, 0xffff).rw(FUNC(a400_state::a800xl_high_r), FUNC(a400_state::a800xl_high_w)); -} - - -void a400_state::xegs_mem(address_map &map) -{ - map(0x0000, 0xcfff).rw(FUNC(a400_state::xegs_low_r), FUNC(a400_state::xegs_low_w)); - map(0xd000, 0xd0ff).rw(m_gtia, FUNC(gtia_device::read), FUNC(gtia_device::write)); - map(0xd100, 0xd1ff).noprw(); - map(0xd200, 0xd2ff).rw("pokey", FUNC(pokey_device::read), FUNC(pokey_device::write)); - map(0xd300, 0xd3ff).rw(m_pia, FUNC(pia6821_device::read_alt), FUNC(pia6821_device::write_alt)); - map(0xd400, 0xd4ff).rw(m_antic, FUNC(antic_device::read), FUNC(antic_device::write)); - map(0xd500, 0xd7ff).noprw(); - map(0xd800, 0xffff).rw(FUNC(a400_state::a800xl_high_r), FUNC(a400_state::a800xl_high_w)); -} - - -void a400_state::a5200_mem(address_map &map) -{ - map(0x0000, 0x3fff).ram(); - map(0x4000, 0xbfff).noprw(); // ROM installed at machine start - map(0xc000, 0xcfff).rw(m_gtia, FUNC(gtia_device::read), FUNC(gtia_device::write)); - map(0xd400, 0xdfff).rw(m_antic, FUNC(antic_device::read), FUNC(antic_device::write)); - // 0xe000-0xe7ff - Expansion? - map(0xe800, 0xefff).rw("pokey", FUNC(pokey_device::read), FUNC(pokey_device::write)); - map(0xf000, 0xffff).rom(); -} - - - -/************************************************************** - * - * Input ports - * - **************************************************************/ - - -#define JOYSTICK_DELTA 10 -#define JOYSTICK_SENSITIVITY 200 - -static INPUT_PORTS_START( atari_artifacting ) - PORT_START("artifacts") - PORT_CONFNAME(0x40, 0x00, "Television Artifacts" ) - PORT_CONFSETTING(0x00, DEF_STR( Off ) ) - PORT_CONFSETTING(0x40, DEF_STR( On ) ) -INPUT_PORTS_END - - - -static INPUT_PORTS_START( atari_console ) - PORT_START("console") - PORT_BIT(0x04, 0x04, IPT_KEYBOARD) PORT_NAME("CONS.2: Option") PORT_CODE(KEYCODE_F3) - PORT_BIT(0x02, 0x02, IPT_KEYBOARD) PORT_NAME("CONS.1: Select") PORT_CODE(KEYCODE_F2) - PORT_BIT(0x01, 0x01, IPT_KEYBOARD) PORT_NAME("CONS.0: Start") PORT_CODE(KEYCODE_F1) -INPUT_PORTS_END - - - -static INPUT_PORTS_START( atari_digital_joystick2 ) - PORT_START("djoy_0_1") - PORT_BIT(0x01, 0x01, IPT_JOYSTICK_UP) PORT_CODE(KEYCODE_8_PAD) PORT_CODE(JOYCODE_Y_UP_SWITCH) PORT_PLAYER(1) - PORT_BIT(0x02, 0x02, IPT_JOYSTICK_DOWN) PORT_CODE(KEYCODE_2_PAD) PORT_CODE(JOYCODE_Y_DOWN_SWITCH) PORT_PLAYER(1) - PORT_BIT(0x04, 0x04, IPT_JOYSTICK_LEFT) PORT_CODE(KEYCODE_4_PAD) PORT_CODE(JOYCODE_X_LEFT_SWITCH) PORT_PLAYER(1) - PORT_BIT(0x08, 0x08, IPT_JOYSTICK_RIGHT) PORT_CODE(KEYCODE_6_PAD) PORT_CODE(JOYCODE_X_RIGHT_SWITCH) PORT_PLAYER(1) - PORT_BIT(0x10, 0x10, IPT_JOYSTICK_UP) PORT_CODE(KEYCODE_8_PAD) PORT_CODE(JOYCODE_Y_UP_SWITCH) PORT_PLAYER(2) - PORT_BIT(0x20, 0x20, IPT_JOYSTICK_DOWN) PORT_CODE(KEYCODE_2_PAD) PORT_CODE(JOYCODE_Y_DOWN_SWITCH) PORT_PLAYER(2) - PORT_BIT(0x40, 0x40, IPT_JOYSTICK_LEFT) PORT_CODE(KEYCODE_4_PAD) PORT_CODE(JOYCODE_X_LEFT_SWITCH) PORT_PLAYER(2) - PORT_BIT(0x80, 0x80, IPT_JOYSTICK_RIGHT) PORT_CODE(KEYCODE_6_PAD) PORT_CODE(JOYCODE_X_RIGHT_SWITCH) PORT_PLAYER(2) - - PORT_START("djoy_2_3") - PORT_BIT(0x01, 0x01, IPT_UNUSED) - PORT_BIT(0x02, 0x02, IPT_UNUSED) - PORT_BIT(0x04, 0x04, IPT_UNUSED) - PORT_BIT(0x08, 0x08, IPT_UNUSED) - PORT_BIT(0x10, 0x10, IPT_UNUSED) - PORT_BIT(0x20, 0x20, IPT_UNUSED) - PORT_BIT(0x40, 0x40, IPT_UNUSED) - PORT_BIT(0x80, 0x80, IPT_UNUSED) - - PORT_START("djoy_b") - PORT_BIT(0x01, 0x01, IPT_BUTTON1) PORT_CODE(KEYCODE_0_PAD) PORT_CODE(JOYCODE_BUTTON1) PORT_PLAYER(1) - PORT_BIT(0x02, 0x02, IPT_BUTTON1) PORT_CODE(JOYCODE_BUTTON1) PORT_PLAYER(2) - PORT_BIT(0x04, 0x04, IPT_UNUSED) - PORT_BIT(0x08, 0x08, IPT_UNUSED) - PORT_BIT(0x10, 0x10, IPT_BUTTON2) PORT_CODE(KEYCODE_DEL_PAD) PORT_CODE(JOYCODE_BUTTON2) PORT_PLAYER(1) - PORT_BIT(0x20, 0x20, IPT_BUTTON2) PORT_CODE(JOYCODE_BUTTON2) PORT_PLAYER(2) - PORT_BIT(0x40, 0x40, IPT_UNUSED) - PORT_BIT(0x80, 0x80, IPT_UNUSED) -INPUT_PORTS_END - - - -static INPUT_PORTS_START( atari_digital_joystick4 ) - PORT_START("djoy_0_1") - PORT_BIT(0x01, 0x01, IPT_JOYSTICK_UP) PORT_CODE(KEYCODE_8_PAD) PORT_CODE(JOYCODE_Y_UP_SWITCH) PORT_PLAYER(1) - PORT_BIT(0x02, 0x02, IPT_JOYSTICK_DOWN) PORT_CODE(KEYCODE_2_PAD) PORT_CODE(JOYCODE_Y_DOWN_SWITCH) PORT_PLAYER(1) - PORT_BIT(0x04, 0x04, IPT_JOYSTICK_LEFT) PORT_CODE(KEYCODE_4_PAD) PORT_CODE(JOYCODE_X_LEFT_SWITCH) PORT_PLAYER(1) - PORT_BIT(0x08, 0x08, IPT_JOYSTICK_RIGHT) PORT_CODE(KEYCODE_6_PAD) PORT_CODE(JOYCODE_X_RIGHT_SWITCH) PORT_PLAYER(1) - PORT_BIT(0x10, 0x10, IPT_JOYSTICK_UP) PORT_CODE(KEYCODE_8_PAD) PORT_CODE(JOYCODE_Y_UP_SWITCH) PORT_PLAYER(2) - PORT_BIT(0x20, 0x20, IPT_JOYSTICK_DOWN) PORT_CODE(KEYCODE_2_PAD) PORT_CODE(JOYCODE_Y_DOWN_SWITCH) PORT_PLAYER(2) - PORT_BIT(0x40, 0x40, IPT_JOYSTICK_LEFT) PORT_CODE(KEYCODE_4_PAD) PORT_CODE(JOYCODE_X_LEFT_SWITCH) PORT_PLAYER(2) - PORT_BIT(0x80, 0x80, IPT_JOYSTICK_RIGHT) PORT_CODE(KEYCODE_6_PAD) PORT_CODE(JOYCODE_X_RIGHT_SWITCH) PORT_PLAYER(2) - - PORT_START("djoy_2_3") - PORT_BIT(0x01, 0x01, IPT_JOYSTICK_UP) PORT_CODE(KEYCODE_8_PAD) PORT_CODE(JOYCODE_Y_UP_SWITCH) PORT_PLAYER(3) - PORT_BIT(0x02, 0x02, IPT_JOYSTICK_DOWN) PORT_CODE(KEYCODE_2_PAD) PORT_CODE(JOYCODE_Y_DOWN_SWITCH) PORT_PLAYER(3) - PORT_BIT(0x04, 0x04, IPT_JOYSTICK_LEFT) PORT_CODE(KEYCODE_4_PAD) PORT_CODE(JOYCODE_X_LEFT_SWITCH) PORT_PLAYER(3) - PORT_BIT(0x08, 0x08, IPT_JOYSTICK_RIGHT) PORT_CODE(KEYCODE_6_PAD) PORT_CODE(JOYCODE_X_RIGHT_SWITCH) PORT_PLAYER(3) - PORT_BIT(0x10, 0x10, IPT_JOYSTICK_UP) PORT_CODE(KEYCODE_8_PAD) PORT_CODE(JOYCODE_Y_UP_SWITCH) PORT_PLAYER(4) - PORT_BIT(0x20, 0x20, IPT_JOYSTICK_DOWN) PORT_CODE(KEYCODE_2_PAD) PORT_CODE(JOYCODE_Y_DOWN_SWITCH) PORT_PLAYER(4) - PORT_BIT(0x40, 0x40, IPT_JOYSTICK_LEFT) PORT_CODE(KEYCODE_4_PAD) PORT_CODE(JOYCODE_X_LEFT_SWITCH) PORT_PLAYER(4) - PORT_BIT(0x80, 0x80, IPT_JOYSTICK_RIGHT) PORT_CODE(KEYCODE_6_PAD) PORT_CODE(JOYCODE_X_RIGHT_SWITCH) PORT_PLAYER(4) - - PORT_START("djoy_b") - PORT_BIT(0x01, 0x01, IPT_BUTTON1) PORT_CODE(KEYCODE_0_PAD) PORT_CODE(JOYCODE_BUTTON1) PORT_PLAYER(1) - PORT_BIT(0x02, 0x02, IPT_BUTTON1) PORT_CODE(KEYCODE_0_PAD) PORT_CODE(JOYCODE_BUTTON1) PORT_PLAYER(2) - PORT_BIT(0x04, 0x04, IPT_BUTTON1) PORT_CODE(KEYCODE_0_PAD) PORT_CODE(JOYCODE_BUTTON1) PORT_PLAYER(3) - PORT_BIT(0x08, 0x08, IPT_BUTTON1) PORT_CODE(KEYCODE_0_PAD) PORT_CODE(JOYCODE_BUTTON1) PORT_PLAYER(4) - PORT_BIT(0x10, 0x10, IPT_BUTTON2) PORT_CODE(KEYCODE_DEL_PAD) PORT_CODE(JOYCODE_BUTTON2) PORT_PLAYER(1) - PORT_BIT(0x20, 0x20, IPT_BUTTON2) PORT_CODE(KEYCODE_DEL_PAD) PORT_CODE(JOYCODE_BUTTON2) PORT_PLAYER(2) - PORT_BIT(0x40, 0x40, IPT_BUTTON2) PORT_CODE(KEYCODE_DEL_PAD) PORT_CODE(JOYCODE_BUTTON2) PORT_PLAYER(3) - PORT_BIT(0x80, 0x80, IPT_BUTTON2) PORT_CODE(KEYCODE_DEL_PAD) PORT_CODE(JOYCODE_BUTTON2) PORT_PLAYER(4) -INPUT_PORTS_END - - - -/* 2009-04 FP: -Small note about natural keyboard support: currently, -- "Break" is mapped to 'F1' -- "Clear" is mapped to 'F2' -- "Atari" is mapped to 'F3' */ - -static INPUT_PORTS_START( atari_keyboard ) - PORT_START("keyboard.0") - PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_L) PORT_CHAR('l') PORT_CHAR('L') - PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_J) PORT_CHAR('j') PORT_CHAR('J') - PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_COLON) PORT_CHAR(';') PORT_CHAR(':') - PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Break") PORT_CODE(KEYCODE_BACKSPACE) PORT_CHAR(UCHAR_MAMEKEY(F1)) - PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_UNUSED) - PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_K) PORT_CHAR('k') PORT_CHAR('K') - PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_QUOTE) PORT_CHAR('+') PORT_CHAR('\\') - PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_BACKSLASH) PORT_CHAR('*') PORT_CHAR('^') - - PORT_START("keyboard.1") - PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_O) PORT_CHAR('o') PORT_CHAR('O') - PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_UNUSED) - PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_P) PORT_CHAR('p') PORT_CHAR('P') - PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_U) PORT_CHAR('u') PORT_CHAR('U') - PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Return") PORT_CODE(KEYCODE_ENTER) PORT_CHAR(13) - PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_I) PORT_CHAR('i') PORT_CHAR('I') - PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_OPENBRACE) PORT_CHAR('-') PORT_CHAR('_') - PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_CLOSEBRACE) PORT_CHAR('=') PORT_CHAR('|') - - PORT_START("keyboard.2") - PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_V) PORT_CHAR('v') PORT_CHAR('V') - PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_UNUSED) - PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_C) PORT_CHAR('c') PORT_CHAR('C') - PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_UNUSED) - PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_UNUSED) - PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_B) PORT_CHAR('b') PORT_CHAR('B') - PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_X) PORT_CHAR('x') PORT_CHAR('X') - PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_Z) PORT_CHAR('z') PORT_CHAR('Z') - - PORT_START("keyboard.3") - PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_4) PORT_CHAR('4') PORT_CHAR('$') - PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_UNUSED) - PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_3) PORT_CHAR('3') PORT_CHAR('#') - PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_6) PORT_CHAR('6') PORT_CHAR('&') - PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Escape") PORT_CODE(KEYCODE_ESC) PORT_CHAR(27) - PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_5) PORT_CHAR('5') PORT_CHAR('%') - PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_2) PORT_CHAR('2') PORT_CHAR('\"') - PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_1) PORT_CHAR('1') PORT_CHAR('!') - - PORT_START("keyboard.4") - PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_COMMA) PORT_CHAR(',') PORT_CHAR('[') - PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_SPACE) PORT_CHAR(' ') - PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_STOP) PORT_CHAR('.') PORT_CHAR(']') - PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_N) PORT_CHAR('n') PORT_CHAR('N') - PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_UNUSED) - PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_M) PORT_CHAR('m') PORT_CHAR('M') - PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_SLASH) PORT_CHAR('/') PORT_CHAR('?') - PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Atari") PORT_CODE(KEYCODE_RCONTROL) PORT_CHAR(UCHAR_MAMEKEY(F3)) - - PORT_START("keyboard.5") - PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_R) PORT_CHAR('r') PORT_CHAR('R') - PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_UNUSED) - PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_E) PORT_CHAR('e') PORT_CHAR('E') - PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_Y) PORT_CHAR('y') PORT_CHAR('Y') - PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Tab") PORT_CODE(KEYCODE_TAB) PORT_CHAR(UCHAR_MAMEKEY(TAB)) - PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_T) PORT_CHAR('t') PORT_CHAR('T') - PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_W) PORT_CHAR('w') PORT_CHAR('W') - PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_Q) PORT_CHAR('q') PORT_CHAR('Q') - - PORT_START("keyboard.6") - PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_9) PORT_CHAR('9') PORT_CHAR('(') - PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_UNUSED) - PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_0) PORT_CHAR('0') PORT_CHAR(')') - PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_7) PORT_CHAR('7') PORT_CHAR('\'') - PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("BackS Delete") PORT_CODE(KEYCODE_BACKSLASH2) PORT_CHAR(8) PORT_CHAR(UCHAR_MAMEKEY(DEL)) - PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_8) PORT_CHAR('8') PORT_CHAR('@') - PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("< Clear") PORT_CODE(KEYCODE_MINUS) PORT_CHAR('<') PORT_CHAR(UCHAR_MAMEKEY(F2)) - PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("> Insert") PORT_CODE(KEYCODE_EQUALS) PORT_CHAR('>') PORT_CHAR(UCHAR_MAMEKEY(INSERT)) - - PORT_START("keyboard.7") - PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_F) PORT_CHAR('f') PORT_CHAR('F') - PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_H) PORT_CHAR('h') PORT_CHAR('H') - PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_D) PORT_CHAR('d') PORT_CHAR('D') - PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_UNUSED) - PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Caps") PORT_CODE(KEYCODE_CAPSLOCK) PORT_TOGGLE PORT_CHAR(UCHAR_MAMEKEY(CAPSLOCK)) - PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_G) PORT_CHAR('g') PORT_CHAR('G') - PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_S) PORT_CHAR('s') PORT_CHAR('S') - PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_A) PORT_CHAR('a') PORT_CHAR('A') - - PORT_START("fake") - PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Shift") PORT_CODE(KEYCODE_LSHIFT) PORT_CODE(KEYCODE_RSHIFT) PORT_CHAR(UCHAR_SHIFT_1) - PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Ctrl") PORT_CODE(KEYCODE_LCONTROL) PORT_CHAR(UCHAR_SHIFT_2) -INPUT_PORTS_END - - -static INPUT_PORTS_START( atari_analog_paddles ) - PORT_START("analog_0") - PORT_BIT(0xff, 0x74, IPT_PADDLE) PORT_SENSITIVITY(JOYSTICK_SENSITIVITY) PORT_KEYDELTA(JOYSTICK_DELTA) PORT_MINMAX(0x00,0xe4) PORT_PLAYER(1) PORT_REVERSE - - PORT_START("analog_1") - PORT_BIT(0xff, 0x74, IPT_PADDLE) PORT_SENSITIVITY(JOYSTICK_SENSITIVITY) PORT_KEYDELTA(JOYSTICK_DELTA) PORT_MINMAX(0x00,0xe4) PORT_PLAYER(2) PORT_REVERSE - - PORT_START("analog_2") - PORT_BIT(0xff, 0x74, IPT_PADDLE) PORT_SENSITIVITY(JOYSTICK_SENSITIVITY) PORT_KEYDELTA(JOYSTICK_DELTA) PORT_MINMAX(0x00,0xe4) PORT_PLAYER(3) PORT_REVERSE - - PORT_START("analog_3") - PORT_BIT(0xff, 0x74, IPT_PADDLE) PORT_SENSITIVITY(JOYSTICK_SENSITIVITY) PORT_KEYDELTA(JOYSTICK_DELTA) PORT_MINMAX(0x00,0xe4) PORT_PLAYER(4) PORT_REVERSE - - PORT_START("analog_4") - PORT_BIT(0xff, 0x74, IPT_PADDLE) PORT_SENSITIVITY(JOYSTICK_SENSITIVITY) PORT_KEYDELTA(JOYSTICK_DELTA) PORT_MINMAX(0x00,0xe4) PORT_REVERSE /* PORT_PLAYER(5) */ - - PORT_START("analog_5") - PORT_BIT(0xff, 0x74, IPT_PADDLE) PORT_SENSITIVITY(JOYSTICK_SENSITIVITY) PORT_KEYDELTA(JOYSTICK_DELTA) PORT_MINMAX(0x00,0xe4) PORT_REVERSE /* PORT_PLAYER(6) */ - - PORT_START("analog_6") - PORT_BIT(0xff, 0x74, IPT_PADDLE) PORT_SENSITIVITY(JOYSTICK_SENSITIVITY) PORT_KEYDELTA(JOYSTICK_DELTA) PORT_MINMAX(0x00,0xe4) PORT_REVERSE /* PORT_PLAYER(7) */ - - PORT_START("analog_7") - PORT_BIT(0xff, 0x74, IPT_PADDLE) PORT_SENSITIVITY(JOYSTICK_SENSITIVITY) PORT_KEYDELTA(JOYSTICK_DELTA) PORT_MINMAX(0x00,0xe4) PORT_REVERSE /* PORT_PLAYER(8) */ -INPUT_PORTS_END - - - -static INPUT_PORTS_START( a800 ) - PORT_INCLUDE( atari_artifacting ) - PORT_INCLUDE( atari_console ) - PORT_INCLUDE( atari_digital_joystick4 ) - PORT_INCLUDE( atari_keyboard ) - PORT_INCLUDE( atari_analog_paddles ) -INPUT_PORTS_END - - - -static INPUT_PORTS_START( a800xl ) - PORT_INCLUDE( atari_artifacting ) - PORT_INCLUDE( atari_console ) - PORT_INCLUDE( atari_digital_joystick2 ) - PORT_INCLUDE( atari_keyboard ) - PORT_INCLUDE( atari_analog_paddles ) -INPUT_PORTS_END - - - -static INPUT_PORTS_START( a5200 ) - PORT_INCLUDE( atari_artifacting ) - - PORT_START("djoy_b") /* lower/upper buttons */ - PORT_BIT(0x01, 0x01, IPT_BUTTON1) PORT_PLAYER(1) - PORT_BIT(0x02, 0x02, IPT_BUTTON1) PORT_PLAYER(2) - PORT_BIT(0x04, 0x04, IPT_BUTTON1) PORT_PLAYER(3) - PORT_BIT(0x08, 0x08, IPT_BUTTON1) PORT_PLAYER(4) - PORT_BIT(0x10, 0x10, IPT_BUTTON2) PORT_PLAYER(1) - PORT_BIT(0x20, 0x20, IPT_BUTTON2) PORT_PLAYER(2) - PORT_BIT(0x40, 0x40, IPT_BUTTON2) PORT_PLAYER(3) - PORT_BIT(0x80, 0x80, IPT_BUTTON2) PORT_PLAYER(4) - - PORT_START("keypad.0") - PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("(Break)") PORT_CODE(KEYCODE_PAUSE) // is this correct? - PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("[#]") PORT_CODE(KEYCODE_ENTER_PAD) - PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("[0]") PORT_CODE(KEYCODE_0_PAD) - PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("[*]") PORT_CODE(KEYCODE_PLUS_PAD) - PORT_BIT(0xf0, IP_ACTIVE_HIGH, IPT_UNUSED) - - PORT_START("keypad.1") - PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Reset") PORT_CODE(KEYCODE_F3) - PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("[9]") PORT_CODE(KEYCODE_9_PAD) - PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("[8]") PORT_CODE(KEYCODE_8_PAD) - PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("[7]") PORT_CODE(KEYCODE_7_PAD) - PORT_BIT(0xf0, IP_ACTIVE_HIGH, IPT_UNUSED) - - PORT_START("keypad.2") - PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME(DEF_STR(Pause)) PORT_CODE(KEYCODE_F2) - PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("[6]") PORT_CODE(KEYCODE_6_PAD) - PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("[5]") PORT_CODE(KEYCODE_5_PAD) - PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("[4]") PORT_CODE(KEYCODE_4_PAD) - PORT_BIT(0xf0, IP_ACTIVE_HIGH, IPT_UNUSED) - - PORT_START("keypad.3") - PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_START) PORT_NAME("Start") - PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("[3]") PORT_CODE(KEYCODE_3_PAD) - PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("[2]") PORT_CODE(KEYCODE_2_PAD) - PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("[1]") PORT_CODE(KEYCODE_1_PAD) - PORT_BIT(0xf0, IP_ACTIVE_HIGH, IPT_UNUSED) - - PORT_START("analog_0") - PORT_BIT(0xff, 0x72, IPT_AD_STICK_X) PORT_SENSITIVITY(JOYSTICK_SENSITIVITY) PORT_KEYDELTA(JOYSTICK_DELTA) PORT_MINMAX(0x00,0xe4) PORT_PLAYER(1) - - PORT_START("analog_1") - PORT_BIT(0xff, 0x72, IPT_AD_STICK_Y) PORT_SENSITIVITY(JOYSTICK_SENSITIVITY) PORT_KEYDELTA(JOYSTICK_DELTA) PORT_MINMAX(0x00,0xe4) PORT_PLAYER(1) - - PORT_START("analog_2") - PORT_BIT(0xff, 0x72, IPT_AD_STICK_X) PORT_SENSITIVITY(JOYSTICK_SENSITIVITY) PORT_KEYDELTA(JOYSTICK_DELTA) PORT_MINMAX(0x00,0xe4) PORT_PLAYER(2) - - PORT_START("analog_3") - PORT_BIT(0xff, 0x72, IPT_AD_STICK_Y) PORT_SENSITIVITY(JOYSTICK_SENSITIVITY) PORT_KEYDELTA(JOYSTICK_DELTA) PORT_MINMAX(0x00,0xe4) PORT_PLAYER(2) - - PORT_START("analog_4") - PORT_BIT(0xff, 0x72, IPT_AD_STICK_X) PORT_SENSITIVITY(JOYSTICK_SENSITIVITY) PORT_KEYDELTA(JOYSTICK_DELTA) PORT_MINMAX(0x00,0xe4) PORT_PLAYER(3) - - PORT_START("analog_5") - PORT_BIT(0xff, 0x72, IPT_AD_STICK_Y) PORT_SENSITIVITY(JOYSTICK_SENSITIVITY) PORT_KEYDELTA(JOYSTICK_DELTA) PORT_MINMAX(0x00,0xe4) PORT_PLAYER(3) - - PORT_START("analog_6") - PORT_BIT(0xff, 0x72, IPT_AD_STICK_X) PORT_SENSITIVITY(JOYSTICK_SENSITIVITY) PORT_KEYDELTA(JOYSTICK_DELTA) PORT_MINMAX(0x00,0xe4) PORT_PLAYER(4) - - PORT_START("analog_7") - PORT_BIT(0xff, 0x72, IPT_AD_STICK_Y) PORT_SENSITIVITY(JOYSTICK_SENSITIVITY) PORT_KEYDELTA(JOYSTICK_DELTA) PORT_MINMAX(0x00,0xe4) PORT_PLAYER(4) - -INPUT_PORTS_END -/*************************************************************** -Atari 5200 Palette Notes: - -Palette on a modern flat panel display (LCD, LED, Plasma, etc.) -appears different from a traditional CRT. The most outstanding -difference is Hue 1x, the hue begin point. Hue 1x looks very -'green' (~-60 to -45 degrees - depending on how poor or well it -handles the signal conversion and its calibration) on a modern -flat panel display, as opposed to 'gold' (~-33 degrees) on a -CRT. The official technical document, "GTIA C014805 NTSC" -stipulates Hue 1x as gold. - -The "Atari 5200 Field Service Manual" provides two different -sets of instructions in harmony with utilizing the "PAM -Diagnostic SALT Cartridge v1.1". In one account it states the -color just below and above the reference bar to be within one -shade of each other. - -Under the same reference document, directions are given for it -to be the same color. Phase Shift 25.7 degrees matches Hue 1x, -15x and the color below the reference bar. - -However, if the system is adjusted within the first several -minutes of running, the warm up, consistent system run time, -causes Hue 15x (F$) to become stronger/darker gold (More brown -then ultimately red-brown); as well as leans Hue 14x (E$) more -brown than green. Once achieving a phase shift of 27.7, -Hue 14x (E$) and Hue 15x (F$) near-exact match Hue 1x and 2x -respectively. - -Accounting for system 'warm-up', phase shifting, as well as the -instructions for it to be within one shade of each other, would -make Phase Shift 26.2 degrees or 26.7 degrees a realistic -logical choice. - -It also collaborates with the official "GTIA C014805 NTSC" -document for color order: Hue 1x = Gold, Hue 2x = Orange, -Hue 15x (F$) = Light-Orange; Phase Shift 26.2 places -Hue 15x (F$) between Hue 1x, Gold and Hue 2x, Orange; -a Light Orange in color. Color descriptions are best measured -in the middle of the brightness scale. - -It should be mentioned that Green-Yellow is referenced at -Hue 13x (D$), nowhere near Hue 1x. A Green-Yellow Hue 1x is -how the palette is manipulated and modified (in part) under -a modern flat panel display. - -Note though, even a properly calibrated console, at power on, -the phase shift appears as low as ~23 degrees and after a -considerable consistent runtime, can be as high as ~28 degrees. -In general, the low end of ~23 degrees lasts for maybe several -seconds, whereas higher values such as ~25-27 degrees is the -most dominant during system run time. - -Additionally, the blue to red (And consequently blue to green) -ratio proportions may appear different on a modern flat panel -display than a CRT in some instances for the Atari 5200 system. -Furthermore, you may have some variation of proportions even -within the same display type. - -One side effect of this on the console's palette is that some -values of red may appear too pinkish - Too much blue to red. -This is not the same as a traditional tint-hue control -adjustment; rather, can be demonstrated by changing the blue -ratio values via MESS HLSL settings. - -Lastly, the Atari 2600 & 7800 NTSC color palettes hold the same -hue structure order and have similar appearance differences -dependent upon display type. -***************************************************************/ -/************************************************************** - * - * Palette - Phase Shift 26.2 - * - **************************************************************/ - -static const uint8_t atari_colors[256*3] = -{ - /* Grey */ - 0x00,0x00,0x00, 0x11,0x11,0x11, 0x22,0x22,0x22, 0x33,0x33,0x33, - 0x44,0x44,0x44, 0x55,0x55,0x55, 0x66,0x66,0x66, 0x77,0x77,0x77, - 0x88,0x88,0x88, 0x99,0x99,0x99, 0xAA,0xAA,0xAA, 0xBB,0xBB,0xBB, - 0xCC,0xCC,0xCC, 0xDD,0xDD,0xDD, 0xEE,0xEE,0xEE, 0xFF,0xFF,0xFF, - /* Gold */ - 0x1A,0x07,0x00, 0x2B,0x18,0x00, 0x3C,0x29,0x00, 0x4D,0x3A,0x00, - 0x5E,0x4B,0x00, 0x6F,0x5C,0x00, 0x80,0x6D,0x00, 0x91,0x7E,0x09, - 0xA2,0x8F,0x1A, 0xB3,0xA0,0x2B, 0xC4,0xB1,0x3C, 0xD5,0xC2,0x4D, - 0xE6,0xD3,0x5E, 0xF7,0xE4,0x6F, 0xFF,0xF5,0x83, 0xFF,0xF7,0x97, - /* Orange */ - 0x31,0x00,0x00, 0x42,0x06,0x00, 0x53,0x17,0x00, 0x64,0x28,0x00, - 0x75,0x39,0x00, 0x86,0x4A,0x00, 0x97,0x5B,0x0B, 0xA8,0x6C,0x1C, - 0xB9,0x7D,0x2D, 0xCA,0x8E,0x3E, 0xDB,0x9F,0x4F, 0xEC,0xB0,0x60, - 0xFD,0xC1,0x71, 0xFF,0xD2,0x86, 0xFF,0xE3,0x9D, 0xFF,0xF4,0xB3, - /* Red-Orange */ - 0x3E,0x00,0x00, 0x4F,0x00,0x00, 0x60,0x08,0x00, 0x71,0x19,0x00, - 0x82,0x2A,0x0F, 0x93,0x3B,0x20, 0xA4,0x4C,0x31, 0xB5,0x5D,0x42, - 0xC6,0x6E,0x53, 0xD7,0x7F,0x64, 0xE8,0x90,0x75, 0xF9,0xA1,0x86, - 0xFF,0xB2,0x9A, 0xFF,0xC3,0xB0, 0xFF,0xD4,0xC6, 0xFF,0xE5,0xDC, - /* Pink */ - 0x3E,0x00,0x06, 0x4F,0x00,0x12, 0x60,0x00,0x1E, 0x71,0x0E,0x2E, - 0x82,0x1F,0x3F, 0x93,0x30,0x50, 0xA4,0x41,0x61, 0xB5,0x52,0x72, - 0xC6,0x63,0x83, 0xD7,0x74,0x94, 0xE8,0x85,0xA5, 0xF9,0x96,0xB6, - 0xFF,0xA7,0xCB, 0xFF,0xB8,0xE1, 0xFF,0xC9,0xEF, 0xFF,0xDA,0xF4, - /* Purple */ - 0x32,0x00,0x38, 0x43,0x00,0x44, 0x54,0x00,0x50, 0x65,0x0C,0x5F, - 0x76,0x1D,0x70, 0x87,0x2E,0x81, 0x98,0x3F,0x92, 0xA9,0x50,0xA3, - 0xBA,0x61,0xB4, 0xCB,0x72,0xC5, 0xDC,0x83,0xD6, 0xED,0x94,0xE4, - 0xFE,0xA5,0xE4, 0xFF,0xB6,0xE9, 0xFF,0xC7,0xEE, 0xFF,0xD8,0xF3, - /* Purple-Blue */ - 0x1B,0x00,0x5F, 0x2C,0x00,0x6B, 0x3D,0x00,0x77, 0x4E,0x11,0x88, - 0x5F,0x22,0x99, 0x70,0x33,0xAA, 0x81,0x44,0xBB, 0x92,0x55,0xCC, - 0xA3,0x66,0xDD, 0xB4,0x77,0xED, 0xC5,0x88,0xED, 0xD6,0x99,0xED, - 0xE7,0xAA,0xED, 0xF8,0xBB,0xED, 0xFF,0xCC,0xF0, 0xFF,0xDD,0xF5, - /* Blue 1 */ - 0x00,0x00,0x72, 0x10,0x00,0x7E, 0x21,0x0D,0x8E, 0x32,0x1E,0x9F, - 0x43,0x2F,0xB0, 0x54,0x40,0xC1, 0x65,0x51,0xD2, 0x76,0x62,0xE3, - 0x87,0x73,0xF4, 0x98,0x84,0xF9, 0xA9,0x95,0xF9, 0xBA,0xA6,0xF9, - 0xCB,0xB7,0xF9, 0xDC,0xC8,0xF9, 0xED,0xD9,0xF9, 0xFE,0xEA,0xF9, - /* Blue 2 */ - 0x00,0x00,0x65, 0x00,0x0C,0x7A, 0x05,0x1D,0x8E, 0x16,0x2E,0x9F, - 0x27,0x3F,0xB0, 0x38,0x50,0xC1, 0x49,0x61,0xD2, 0x5A,0x72,0xE3, - 0x6B,0x83,0xF4, 0x7C,0x94,0xFF, 0x8D,0xA5,0xFF, 0x9E,0xB6,0xFF, - 0xAF,0xC7,0xFF, 0xC0,0xD8,0xFF, 0xD1,0xE9,0xFF, 0xE2,0xFA,0xFF, - /* Light-Blue */ - 0x00,0x0D,0x48, 0x00,0x1E,0x5E, 0x00,0x2F,0x74, 0x00,0x40,0x8A, - 0x11,0x51,0x9B, 0x22,0x62,0xAC, 0x33,0x73,0xBD, 0x44,0x84,0xCE, - 0x55,0x95,0xDF, 0x66,0xA6,0xF0, 0x77,0xB7,0xFF, 0x88,0xC8,0xFF, - 0x99,0xD9,0xFF, 0xAA,0xEA,0xFF, 0xBB,0xFB,0xFF, 0xCC,0xFF,0xFF, - /* Turquoise */ - 0x00,0x1C,0x1C, 0x00,0x2D,0x32, 0x00,0x3E,0x49, 0x00,0x4F,0x5F, - 0x05,0x60,0x73, 0x16,0x71,0x84, 0x27,0x82,0x95, 0x38,0x93,0xA6, - 0x49,0xA4,0xB7, 0x5A,0xB5,0xC8, 0x6B,0xC6,0xD9, 0x7C,0xD7,0xEA, - 0x8D,0xE8,0xFB, 0x9E,0xF9,0xFF, 0xAF,0xFF,0xFF, 0xC0,0xFF,0xFF, - /* Green-Blue */ - 0x00,0x25,0x0B, 0x00,0x36,0x10, 0x00,0x47,0x18, 0x00,0x58,0x2E, - 0x07,0x69,0x42, 0x18,0x7A,0x53, 0x29,0x8B,0x64, 0x3A,0x9C,0x75, - 0x4B,0xAD,0x86, 0x5C,0xBE,0x97, 0x6D,0xCF,0xA8, 0x7E,0xE0,0xB9, - 0x8F,0xF1,0xCA, 0xA0,0xFF,0xDA, 0xB1,0xFF,0xE6, 0xC2,0xFF,0xF2, - /* Green */ - 0x00,0x27,0x0C, 0x00,0x38,0x11, 0x00,0x49,0x16, 0x04,0x5A,0x1A, - 0x15,0x6B,0x1A, 0x26,0x7C,0x22, 0x37,0x8D,0x33, 0x48,0x9E,0x44, - 0x59,0xAF,0x55, 0x6A,0xC0,0x66, 0x7B,0xD1,0x77, 0x8C,0xE2,0x88, - 0x9D,0xF3,0x99, 0xAE,0xFF,0xA8, 0xBF,0xFF,0xB4, 0xD0,0xFF,0xC0, - /* Yellow-Green */ - 0x00,0x21,0x0A, 0x00,0x32,0x0F, 0x0A,0x43,0x11, 0x1B,0x54,0x11, - 0x2C,0x65,0x11, 0x3D,0x76,0x11, 0x4E,0x87,0x11, 0x5F,0x98,0x1E, - 0x70,0xA9,0x2F, 0x81,0xBA,0x40, 0x92,0xCB,0x51, 0xA3,0xDC,0x62, - 0xB4,0xED,0x73, 0xC5,0xFE,0x84, 0xD6,0xFF,0x90, 0xE7,0xFF,0x9C, - /* Orange-Green */ - 0x05,0x13,0x04, 0x16,0x24,0x04, 0x27,0x35,0x04, 0x38,0x46,0x04, - 0x49,0x57,0x04, 0x5A,0x68,0x04, 0x6B,0x79,0x04, 0x7C,0x8A,0x09, - 0x8D,0x9B,0x1A, 0x9E,0xAC,0x2B, 0xAF,0xBD,0x3C, 0xC0,0xCE,0x4D, - 0xD1,0xDF,0x5E, 0xE2,0xF0,0x6F, 0xF3,0xFF,0x80, 0xFF,0xFF,0x8D, - /* Light-Orange */ - 0x21,0x02,0x00, 0x32,0x13,0x00, 0x43,0x24,0x00, 0x54,0x35,0x00, - 0x65,0x46,0x00, 0x76,0x57,0x00, 0x87,0x68,0x00, 0x98,0x79,0x0C, - 0xA9,0x8A,0x1D, 0xBA,0x9B,0x2E, 0xCB,0xAC,0x3F, 0xDC,0xBD,0x50, - 0xED,0xCE,0x61, 0xFE,0xDF,0x72, 0xFF,0xF0,0x87, 0xFF,0xFF,0x9D -}; - - -/* Initialise the palette */ -void a400_state::a400_palette(palette_device &palette) const -{ - for (unsigned i = 0; i < ARRAY_LENGTH(atari_colors) / 3; i++) - palette.set_pen_color(i, atari_colors[i * 3], atari_colors[i * 3 + 1], atari_colors[i * 3 + 2]); -} -/****************************************************************** - PALETTE - PHASE 24.7 SHIFT - -GREY - 0x00,0x00,0x00, 0x11,0x11,0x11, 0x22,0x22,0x22, 0x33,0x33,0x33, - 0x44,0x44,0x44, 0x55,0x55,0x55, 0x66,0x66,0x66, 0x77,0x77,0x77, - 0x88,0x88,0x88, 0x99,0x99,0x99, 0xAA,0xAA,0xAA, 0xBB,0xBB,0xBB, - 0xCC,0xCC,0xCC, 0xDD,0xDD,0xDD, 0xEE,0xEE,0xEE, 0xFF,0xFF,0xFF, - -GOLD - 0x1A,0x07,0x00, 0x2B,0x18,0x00, 0x3C,0x29,0x00, 0x4D,0x3A,0x00, - 0x5E,0x4B,0x00, 0x6F,0x5C,0x00, 0x80,0x6D,0x00, 0x91,0x7E,0x09, - 0xA2,0x8F,0x1A, 0xB3,0xA0,0x2B, 0xC4,0xB1,0x3C, 0xD5,0xC2,0x4D, - 0xE6,0xD3,0x5E, 0xF7,0xE4,0x6F, 0xFF,0xF5,0x83, 0xFF,0xF7,0x97, - -ORANGE - 0x30,0x00,0x00, 0x41,0x07,0x00, 0x52,0x18,0x00, 0x63,0x29,0x00, - 0x74,0x3A,0x00, 0x85,0x4B,0x00, 0x96,0x5C,0x0A, 0xA7,0x6D,0x1B, - 0xB8,0x7E,0x2C, 0xC9,0x8F,0x3D, 0xDA,0xA0,0x4E, 0xEB,0xB1,0x5F, - 0xFC,0xC2,0x70, 0xFF,0xD3,0x85, 0xFF,0xE4,0x9B, 0xFF,0xF5,0xB1, - -RED-ORANGE - 0x3D,0x00,0x00, 0x4E,0x00,0x00, 0x5F,0x09,0x00, 0x70,0x1A,0x00, - 0x81,0x2B,0x09, 0x92,0x3C,0x1A, 0xA3,0x4D,0x2B, 0xB4,0x5E,0x3C, - 0xC5,0x6F,0x4D, 0xD6,0x80,0x5E, 0xE7,0x91,0x6F, 0xF8,0xA2,0x80, - 0xFF,0xB3,0x94, 0xFF,0xC4,0xAA, 0xFF,0xD5,0xC0, 0xFF,0xE6,0xD6, - -PINK - 0x3F,0x00,0x00, 0x50,0x00,0x09, 0x61,0x00,0x15, 0x72,0x10,0x26, - 0x83,0x21,0x37, 0x94,0x32,0x48, 0xA5,0x43,0x59, 0xB6,0x54,0x6A, - 0xC7,0x65,0x7B, 0xD8,0x76,0x8C, 0xE9,0x87,0x9D, 0xFA,0x98,0xAE, - 0xFF,0xA9,0xC2, 0xFF,0xBA,0xD8, 0xFF,0xCB,0xEE, 0xFF,0xDC,0xF4, - -PURPLE - 0x36,0x00,0x2E, 0x47,0x00,0x3A, 0x58,0x00,0x46, 0x69,0x0C,0x55, - 0x7A,0x1D,0x66, 0x8B,0x2E,0x77, 0x9C,0x3F,0x88, 0xAD,0x50,0x99, - 0xBE,0x61,0xAA, 0xCF,0x72,0xBB, 0xE0,0x83,0xCC, 0xF1,0x94,0xDD, - 0xFF,0xA5,0xE4, 0xFF,0xB6,0xE9, 0xFF,0xC7,0xEE, 0xFF,0xD8,0xF3, - -PURPLE-BLUE - 0x23,0x00,0x55, 0x34,0x00,0x61, 0x45,0x00,0x6D, 0x56,0x0F,0x7E, - 0x67,0x20,0x8F, 0x78,0x31,0xA0, 0x89,0x42,0xB1, 0x9A,0x53,0xC2, - 0xAB,0x64,0xD3, 0xBC,0x75,0xE4, 0xCD,0x86,0xEA, 0xDE,0x97,0xEA, - 0xEF,0xA8,0xEA, 0xFF,0xB9,0xEA, 0xFF,0xCA,0xEF, 0xFF,0xDB,0xF4, - -BLUE1 - 0x09,0x00,0x6E, 0x1A,0x00,0x7A, 0x2B,0x08,0x88, 0x3C,0x19,0x99, - 0x4D,0x2A,0xAA, 0x5E,0x3B,0xBB, 0x6F,0x4C,0xCC, 0x80,0x5D,0xDD, - 0x91,0x6E,0xEE, 0xA2,0x7F,0xF4, 0xB3,0x90,0xF4, 0xC4,0xA1,0xF4, - 0xD5,0xB2,0xF4, 0xE6,0xC3,0xF4, 0xF7,0xD4,0xF4, 0xFF,0xE5,0xF7, - -BLUE2 - 0x00,0x00,0x6D, 0x00,0x05,0x80, 0x10,0x16,0x91, 0x21,0x27,0xA2, - 0x32,0x38,0xB3, 0x43,0x49,0xC4, 0x54,0x5A,0xD5, 0x65,0x6B,0xE6, - 0x76,0x7C,0xF7, 0x87,0x8D,0xFF, 0x98,0x9E,0xFF, 0xA9,0xAF,0xFF, - 0xBA,0xC0,0xFF, 0xCB,0xD1,0xFF, 0xDC,0xE2,0xFF, 0xED,0xF3,0xFF - -LIGHT-BLUE - 0x00,0x05,0x57, 0x00,0x16,0x6E, 0x00,0x27,0x84, 0x09,0x38,0x97, - 0x1A,0x49,0xA8, 0x2B,0x5A,0xB9, 0x3C,0x6B,0xCA, 0x4D,0x7C,0xDB, - 0x5E,0x8D,0xEC, 0x6F,0x9E,0xFD, 0x80,0xAF,0xFF, 0x91,0xC0,0xFF, - 0xA2,0xD1,0xFF, 0xB3,0xE2,0xFF, 0xC4,0xF3,0xFF, 0xD5,0xFF,0xFF, - -TURQUOISE - 0x00,0x15,0x34, 0x00,0x26,0x4A, 0x00,0x37,0x60, 0x00,0x48,0x77, - 0x0A,0x59,0x8A, 0x1B,0x6A,0x9B, 0x2C,0x7B,0xAC, 0x3D,0x8C,0xBD, - 0x4E,0x9D,0xCE, 0x5F,0xAE,0xDF, 0x70,0xBF,0xF0, 0x81,0xD0,0xFF, - 0x92,0xE1,0xFF, 0xA3,0xF2,0xFF, 0xB4,0xFF,0xFF, 0xC5,0xFF,0xFF - -GREEN-BLUE - 0x00,0x21,0x0A, 0x00,0x32,0x1F, 0x00,0x43,0x35, 0x00,0x54,0x4B, - 0x04,0x65,0x60, 0x15,0x76,0x71, 0x26,0x87,0x82, 0x37,0x98,0x93, - 0x48,0xA9,0xA4, 0x59,0xBA,0xB5, 0x6A,0xCB,0xC6, 0x7B,0xDC,0xD7, - 0x8C,0xED,0xE8, 0x9D,0xFE,0xF9, 0xAE,0xFF,0xFF, 0xBF,0xFF,0xFF, - -GREEN - 0x00,0x27,0x0C, 0x00,0x38,0x11, 0x00,0x49,0x16, 0x00,0x5A,0x1D, - 0x0A,0x6B,0x30, 0x1B,0x7C,0x41, 0x2C,0x8D,0x52, 0x3D,0x9E,0x63, - 0x4E,0xAF,0x74, 0x5F,0xC0,0x85, 0x70,0xD1,0x96, 0x81,0xE2,0xA7, - 0x92,0xF3,0xB8, 0xA3,0xFF,0xC8, 0xB4,0xFF,0xD3, 0xC5,0xFF,0xDF, - -YELLOW-GREEN - 0x00,0x26,0x0B, 0x00,0x37,0x10, 0x00,0x48,0x16, 0x0A,0x59,0x18, - 0x1B,0x6A,0x18, 0x2C,0x7B,0x18, 0x3D,0x8C,0x27, 0x4E,0x9D,0x38, - 0x5F,0xAE,0x49, 0x70,0xBF,0x5A, 0x81,0xD0,0x6B, 0x92,0xE1,0x7C, - 0xA3,0xF2,0x8D, 0xB4,0xFF,0x9C, 0xC5,0xFF,0xA8, 0xD6,0xFF,0xB4, - -ORANGE-GREEN - 0x00,0x1E,0x09, 0x00,0x2F,0x0E, 0x11,0x40,0x0E, 0x22,0x51,0x0E, - 0x33,0x62,0x0E, 0x44,0x73,0x0E, 0x55,0x84,0x0E, 0x66,0x95,0x17, - 0x77,0xA6,0x28, 0x88,0xB7,0x39, 0x99,0xC8,0x4A, 0xAA,0xD9,0x5B, - 0xBB,0xEA,0x6C, 0xCC,0xFB,0x7D, 0xDD,0xFF,0x8A, 0xEE,0xFF,0x96, - -LIGHT-ORANGE - 0x0A,0x11,0x02, 0x1B,0x22,0x02, 0x2C,0x33,0x02, 0x3D,0x44,0x02, - 0x4E,0x55,0x02, 0x5F,0x66,0x02, 0x70,0x77,0x02, 0x81,0x88,0x09, - 0x92,0x99,0x1A, 0xA3,0xAA,0x2B, 0xB4,0xBB,0x3C, 0xC5,0xCC,0x4D, - 0xD6,0xDD,0x5E, 0xE7,0xEE,0x6F, 0xF8,0xFF,0x80, 0xFF,0xFF,0x8F, -******************************************************************* - -******************************************************************* - PALETTE - PHASE 25.2 SHIFT - -GREY - 0x00,0x00,0x00, 0x11,0x11,0x11, 0x22,0x22,0x22, 0x33,0x33,0x33, - 0x44,0x44,0x44, 0x55,0x55,0x55, 0x66,0x66,0x66, 0x77,0x77,0x77, - 0x88,0x88,0x88, 0x99,0x99,0x99, 0xAA,0xAA,0xAA, 0xBB,0xBB,0xBB, - 0xCC,0xCC,0xCC, 0xDD,0xDD,0xDD, 0xEE,0xEE,0xEE, 0xFF,0xFF,0xFF, - -GOLD - 0x1A,0x07,0x00, 0x2B,0x18,0x00, 0x3C,0x29,0x00, 0x4D,0x3A,0x00, - 0x5E,0x4B,0x00, 0x6F,0x5C,0x00, 0x80,0x6D,0x00, 0x91,0x7E,0x09, - 0xA2,0x8F,0x1A, 0xB3,0xA0,0x2B, 0xC4,0xB1,0x3C, 0xD5,0xC2,0x4D, - 0xE6,0xD3,0x5E, 0xF7,0xE4,0x6F, 0xFF,0xF5,0x83, 0xFF,0xF7,0x97, - -ORANGE - 0x30,0x00,0x00, 0x41,0x07,0x00, 0x52,0x18,0x00, 0x63,0x29,0x00, - 0x74,0x3A,0x00, 0x85,0x4B,0x00, 0x96,0x5C,0x0A, 0xA7,0x6D,0x1B, - 0xB8,0x7E,0x2C, 0xC9,0x8F,0x3D, 0xDA,0xA0,0x4E, 0xEB,0xB1,0x5F, - 0xFC,0xC2,0x70, 0xFF,0xD3,0x85, 0xFF,0xE4,0x9B, 0xFF,0xF5,0xB1, - -RED-ORANGE - 0x3E,0x00,0x00, 0x4F,0x00,0x00, 0x60,0x09,0x00, 0x71,0x1A,0x00, - 0x82,0x2B,0x0B, 0x93,0x3C,0x1C, 0xA4,0x4D,0x2D, 0xB5,0x5E,0x3E, - 0xC6,0x6F,0x4F, 0xD7,0x80,0x60, 0xE8,0x91,0x71, 0xF9,0xA2,0x82, - 0xFF,0xB3,0x96, 0xFF,0xC4,0xAC, 0xFF,0xD5,0xC2, 0xFF,0xE6,0xD8, - -PINK - 0x3F,0x00,0x00, 0x50,0x00,0x0C, 0x61,0x00,0x18, 0x72,0x0F,0x28, - 0x83,0x20,0x39, 0x94,0x31,0x4A, 0xA5,0x42,0x5B, 0xB6,0x53,0x6C, - 0xC7,0x64,0x7D, 0xD8,0x75,0x8E, 0xE9,0x86,0x9F, 0xFA,0x97,0xB0, - 0xFF,0xA8,0xC5, 0xFF,0xB9,0xDB, 0xFF,0xCA,0xEF, 0xFF,0xDB,0xF4, - -PURPLE - 0x35,0x00,0x31, 0x46,0x00,0x3D, 0x57,0x00,0x49, 0x68,0x0C,0x58, - 0x79,0x1D,0x69, 0x8A,0x2E,0x7A, 0x9B,0x3F,0x8B, 0xAC,0x50,0x9C, - 0xBD,0x61,0xAD, 0xCE,0x72,0xBE, 0xDF,0x83,0xCF, 0xF0,0x94,0xE0, - 0xFF,0xA5,0xE4, 0xFF,0xB6,0xE9, 0xFF,0xC7,0xEE, 0xFF,0xD8,0xF3, - -PURPLE-BLUE - 0x20,0x00,0x59, 0x31,0x00,0x65, 0x42,0x00,0x71, 0x53,0x10,0x82, - 0x64,0x21,0x93, 0x75,0x32,0xA4, 0x86,0x43,0xB5, 0x97,0x54,0xC6, - 0xA8,0x65,0xD7, 0xB9,0x76,0xE8, 0xCA,0x87,0xEB, 0xDB,0x98,0xEB, - 0xEC,0xA9,0xEB, 0xFD,0xBA,0xEB, 0xFF,0xCB,0xEF, 0xFF,0xDC,0xF4, - -BLUE1 - 0x05,0x00,0x70, 0x16,0x00,0x7C, 0x27,0x09,0x8B, 0x38,0x1A,0x9C, - 0x49,0x2B,0xAD, 0x5A,0x3C,0xBE, 0x6B,0x4D,0xCF, 0x7C,0x5E,0xE0, - 0X8D,0x6F,0xF1, 0x9E,0x80,0xF6, 0xAF,0x91,0xF6, 0xC0,0xA2,0xF6, - 0xD1,0xB3,0xF6, 0xE2,0xC4,0xF6, 0xF3,0xD5,0xF6, 0xFF,0xE6,0xF7, - -BLUE2 - 0x00,0x00,0x6B, 0x00,0x08,0x7E, 0x0C,0x19,0x91, 0x1D,0x2A,0xA2, - 0x2E,0x3B,0xB3, 0x3F,0x4C,0xC4, 0x50,0x5D,0xD5, 0x61,0x6E,0xE6, - 0x72,0x7F,0xF7, 0x83,0x90,0xFF, 0x94,0xA1,0xFF, 0xA5,0xB2,0xFF, - 0xB6,0xC3,0xFF, 0xC7,0xD4,0xFF, 0xD8,0xE5,0xFF, 0xE9,0xF6,0xFF, - -LIGHT-BLUE - 0x00,0x08,0x52, 0x00,0x19,0x68, 0x00,0x2A,0x7F, 0x05,0x3B,0x93, - 0x16,0x4C,0xA4, 0x27,0x5D,0xB5, 0x38,0x6E,0xC6, 0x49,0x7F,0xD7, - 0x5A,0x90,0xE8, 0x6B,0xA1,0xF9, 0x7C,0xB2,0xFF, 0x8D,0xC3,0xFF, - 0x9E,0xD4,0xFF, 0xAF,0xE5,0xFF, 0xC0,0xF6,0xFF, 0xD1,0xFF,0xFF, - -TURQUOISE - 0x00,0x17,0x2D, 0x00,0x28,0x43, 0x00,0x39,0x59, 0x00,0x4A,0x6F, - 0x08,0x5B,0x83, 0x19,0x6C,0x94, 0x2A,0x7D,0xA5, 0x3B,0x8E,0xB6, - 0x4C,0x9F,0xC7, 0x5D,0xB0,0xD8, 0x6E,0xC1,0xE9, 0x7F,0xD2,0xFA, - 0x90,0xE3,0xFF, 0xA1,0xF4,0xFF, 0xB2,0xFF,0xFF, 0xC3,0xFF,0xFF, - -GREEN-BLUE - 0x00,0x23,0x0A, 0x00,0x34,0x15, 0x00,0x45,0x2B, 0x00,0x56,0x41, - 0x04,0x67,0x56, 0x15,0x78,0x67, 0x26,0x89,0x78, 0x37,0x9A,0x89, - 0x48,0xAB,0x9A, 0x59,0xBC,0xAB, 0x6A,0xCD,0xBC, 0x7B,0xDE,0xCD, - 0x8C,0xEF,0xDE, 0x9D,0xFF,0xEE, 0xAE,0xFF,0xFA, 0xBF,0xFF,0xFF, - -GREEN - 0x00,0x27,0x0C, 0x00,0x38,0x11, 0x00,0x49,0x16, 0x00,0x5A,0x1B, - 0x0D,0x6B,0x25, 0x1E,0x7C,0x36, 0x2F,0x8D,0x47, 0x40,0x9E,0x58, - 0x51,0xAF,0x69, 0x62,0xC0,0x7A, 0x73,0xD1,0x8B, 0x84,0xE2,0x9C, - 0x95,0xF3,0xAD, 0xA6,0xFF,0xBD, 0xB7,0xFF,0xC9, 0xC8,0xFF,0xD4, - -YELLOW-GREEN - 0x00,0x24,0x0B, 0x00,0x35,0x10, 0x00,0x46,0x15, 0x10,0x57,0x15, - 0x21,0x68,0x15, 0x32,0x79,0x15, 0x43,0x8A,0x1C, 0x54,0x9B,0x2D, - 0x65,0xAC,0x3E, 0x76,0xBD,0x4F, 0x87,0xCE,0x60, 0x98,0xDF,0x71, - 0xA9,0xF0,0x82, 0xBA,0xFF,0x93, 0xCB,0xFF,0x9F, 0xDC,0xFF,0xAA, - -ORANGE-GREEN - 0x00,0x1B,0x08, 0x08,0x2C,0x0B, 0x19,0x3D,0x0B, 0x2A,0x4E,0x0B, - 0x3B,0x5F,0x0B, 0x4C,0x70,0x0B, 0x5D,0x81,0x0B, 0x6E,0x92,0x11, - 0x7F,0xA3,0x22, 0x90,0xB4,0x33, 0xA1,0xC5,0x44, 0xB2,0xD6,0x55, - 0xC3,0xE7,0x66, 0xD4,0xF8,0x77, 0xE5,0xFF,0x85, 0xF6,0xFF,0x91, - -LIGHT-ORANGE - 0x12,0x0C,0x00, 0x23,0x1D,0x00, 0x34,0x2E,0x00, 0x45,0x3F,0x00, - 0x56,0x50,0x00, 0x67,0x61,0x00, 0x78,0x72,0x00, 0x89,0x83,0x08, - 0x9A,0x94,0x19, 0xAB,0xA5,0x2A, 0xBC,0xB6,0x3B, 0xCD,0xC7,0x4C, - 0xDE,0xD8,0x5D, 0xEF,0xE9,0x6E, 0xFF,0xFA,0x80, 0xFF,0xFF,0x92, -******************************************************************* - -******************************************************************* - PALETTE - PHASE 25.7 SHIFT -GREY - 0x00,0x00,0x00, 0x11,0x11,0x11, 0x22,0x22,0x22, 0x33,0x33,0x33, - 0x44,0x44,0x44, 0x55,0x55,0x55, 0x66,0x66,0x66, 0x77,0x77,0x77, - 0x88,0x88,0x88, 0x99,0x99,0x99, 0xAA,0xAA,0xAA, 0xBB,0xBB,0xBB, - 0xCC,0xCC,0xCC, 0xDD,0xDD,0xDD, 0xEE,0xEE,0xEE, 0xFF,0xFF,0xFF, - -GOLD - 0x1A,0x07,0x00, 0x2B,0x18,0x00, 0x3C,0x29,0x00, 0x4D,0x3A,0x00, - 0x5E,0x4B,0x00, 0x6F,0x5C,0x00, 0x80,0x6D,0x00, 0x91,0x7E,0x09, - 0xA2,0x8F,0x1A, 0xB3,0xA0,0x2B, 0xC4,0xB1,0x3C, 0xD5,0xC2,0x4D, - 0xE6,0xD3,0x5E, 0xF7,0xE4,0x6F, 0xFF,0xF5,0x83, 0xFF,0xF7,0x97, - -ORANGE - 0x31,0x00,0x00, 0x42,0x06,0x00, 0x53,0x17,0x00, 0x64,0x28,0x00, - 0x75,0x39,0x00, 0x86,0X4A,0x00, 0x97,0x5B,0x0A, 0xA8,0x6C,0x1B, - 0xB9,0x7D,0x2C, 0xCA,0x8E,0x3D, 0xDB,0x9F,0x4E, 0xEC,0xB0,0x5F, - 0xFD,0xC1,0x70, 0xFF,0xD2,0x85, 0xFF,0xE3,0x9C, 0xFF,0xF4,0xB2, - -RED-ORANGE - 0x3E,0x00,0x00, 0x4F,0x00,0x00, 0x60,0x08,0x00, 0x71,0x19,0x00, - 0x82,0x2A,0x0D, 0x93,0x3B,0x1E, 0xA4,0x4C,0x2F, 0xB5,0x5D,0x40, - 0xC6,0x6E,0x51, 0xD7,0x7F,0x62, 0xE8,0x90,0x73, 0xF9,0xA1,0x83, - 0xFF,0xB2,0x98, 0xFF,0xC3,0xAE, 0xFF,0xD4,0xC4, 0xFF,0xE5,0xDA, - -PINK - 0x3F,0x00,0x03, 0x50,0x00,0x0F, 0x61,0x00,0x1B, 0x72,0x0F,0x2B, - 0x83,0x20,0x3C, 0x94,0x31,0x4D, 0xA5,0x42,0x5E, 0xB6,0x53,0x6F, - 0xC7,0x64,0x80, 0xD8,0x75,0x91, 0xE9,0x86,0xA2, 0xFA,0x97,0xB3, - 0xFF,0xA8,0xC8, 0xFF,0xB9,0xDE, 0xFF,0xCA,0xEF, 0xFF,0xDB,0xF4, - -PURPLE - 0x33,0x00,0x35, 0x44,0x00,0x41, 0x55,0x00,0x4C, 0x66,0x0C,0x5C, - 0x77,0x1D,0x6D, 0x88,0x2E,0x7E, 0x99,0x3F,0x8F, 0xAA,0x50,0xA0, - 0xBB,0x61,0xB1, 0xCC,0x72,0xC2, 0xDD,0x83,0xD3, 0xEE,0x94,0xE4, - 0xFF,0xA5,0xE4, 0xFF,0xB6,0xE9, 0xFF,0xC7,0xEE, 0xFF,0xD8,0xF3, - -PURPLE-BLUE - 0x1D,0x00,0x5C, 0x2E,0x00,0x68, 0x40,0x00,0x74, 0x51,0x10,0x84, - 0x62,0x21,0x95, 0x73,0x32,0xA6, 0x84,0x43,0xB7, 0x95,0x54,0xC8, - 0xA6,0x65,0xD9, 0xB7,0x76,0xEA, 0xC8,0x87,0xEB, 0xD9,0x98,0xEB, - 0xE9,0xA9,0xEC, 0xFB,0xBA,0xEB, 0xFF,0xCB,0xEF, 0xFF,0xDC,0xF4, - -BLUE1 - 0x02,0x00,0x71, 0x13,0x00,0x7D, 0x24,0x0B,0x8C, 0x35,0x1C,0x9D, - 0x46,0x2D,0xAE, 0x57,0x3E,0xBF, 0x68,0x4F,0xD0, 0x79,0x60,0xE1, - 0x8A,0x71,0xF2, 0x9B,0x82,0xF7, 0xAC,0x93,0xF7, 0xBD,0xA4,0xF7, - 0xCE,0xB5,0xF7, 0xDF,0xC6,0xF7, 0xF0,0xD7,0xF7, 0xFF,0xE8,0xF8, - -BLUE2 - 0x00,0x00,0x68, 0x00,0x0A,0x7C, 0x08,0x1B,0x90, 0x19,0x2C,0xA1, - 0x2A,0x3D,0xB2, 0x3B,0x4E,0xC3, 0x4C,0x5F,0xD4, 0x5D,0x70,0xE5, - 0x6E,0x81,0xF6, 0x7F,0x92,0xFF, 0x90,0xA3,0xFF, 0xA1,0xB4,0xFF, - 0xB2,0xC5,0xFF, 0xC3,0xD6,0xFF, 0xD4,0xE7,0xFF, 0xE5,0xF8,0xFF, - -LIGHT-BLUE - 0x00,0x0A,0x4D, 0x00,0x1B,0x63, 0x00,0x2C,0x79, 0x02,0x3D,0x8F, - 0x13,0x4E,0xA0, 0x24,0x5F,0xB1, 0x35,0x70,0xC2, 0x46,0x81,0xD3, - 0x57,0x92,0xE4, 0x68,0xA3,0xF5, 0x79,0xB4,0xFF, 0x8A,0xC5,0xFF, - 0x9B,0xD6,0xFF, 0xAC,0xE7,0xFF, 0xBD,0xF8,0xFF, 0xCE,0xFF,0xFF, - -TURQUOISE - 0x00,0x1A,0x26, 0x00,0x2B,0x3C, 0x00,0x3C,0x52, 0x00,0x4D,0x68, - 0x06,0x5E,0x7C, 0x17,0x6F,0x8D, 0x28,0x80,0x9E, 0x39,0x91,0xAF, - 0x4A,0xA2,0xC0, 0x5B,0xB3,0xD1, 0x6C,0xC4,0xE2, 0x7D,0xD5,0xF3, - 0x8E,0xE6,0xFF, 0x9F,0xF7,0xFF, 0xB0,0xFF,0xFF, 0xC1,0xFF,0xFF, - -GREEN-BLUE - 0x00,0x24,0x0B, 0x00,0x35,0x10, 0x00,0x46,0x22, 0x00,0x57,0x38, - 0x05,0x68,0x4D, 0x16,0x79,0x5E, 0x27,0x8A,0x6F, 0x38,0x9B,0x80, - 0x49,0xAC,0x91, 0x5A,0xBD,0xA2, 0x6B,0xCE,0xB3, 0x7C,0xDF,0xC4, - 0x8D,0xF0,0xD5, 0x9E,0xFF,0xE5, 0xAF,0xFF,0xF1, 0xC0,0xFF,0xFD, - -GREEN - 0x00,0x27,0x0C, 0x00,0x38,0x11, 0x00,0x49,0x16, 0x00,0x5A,0x1B, - 0x10,0x6B,0x1B, 0x21,0x7C,0x2C, 0x32,0x8D,0x3D, 0x43,0x9E,0x4E, - 0x54,0xAF,0x5F, 0x65,0xC0,0x70, 0x76,0xD1,0x81, 0x87,0xE2,0x92, - 0x98,0xF3,0xA3, 0xA9,0xFF,0xB3, 0xBA,0xFF,0xBF, 0xCB,0xFF,0xCB, - -YELLOW-GREEN - 0x00,0x23,0x0A, 0x00,0x34,0x10, 0x04,0x45,0x13, 0x15,0x56,0x13, - 0x26,0x67,0x13, 0x37,0x78,0x13, 0x48,0x89,0x14, 0x59,0x9A,0x25, - 0x6A,0xAB,0x36, 0x7B,0xBC,0x47, 0x8C,0xCD,0x58, 0x9D,0xDE,0x69, - 0xAE,0xEF,0x7A, 0xBF,0xFF,0x8B, 0xD0,0xFF,0x97, 0xE1,0xFF,0xA3, - -ORANGE-GREEN - 0x00,0x17,0x07, 0x0E,0x28,0x08, 0x1F,0x39,0x08, 0x30,0x4A,0x08, - 0x41,0x5B,0x08, 0x52,0x6C,0x08, 0x63,0x7D,0x08, 0x74,0x8E,0x0D, - 0x85,0x9F,0x1E, 0x96,0xB0,0x2F, 0xA7,0xC1,0x40, 0xB8,0xD2,0x51, - 0xC9,0xE3,0x62, 0xDA,0xF4,0x73, 0xEB,0xFF,0x82, 0xFC,0xFF,0x8E, - -LIGHT-ORANGE - 0x19,0x07,0x00, 0x2A,0x18,0x00, 0x3B,0x29,0x00, 0x4C,0x3A,0x00, - 0x5D,0x4B,0x00, 0x6E,0x5C,0x00, 0x7F,0x6D,0x00, 0x90,0x7E,0x09, - 0xA1,0x8F,0x1A, 0xB2,0xA0,0x2B, 0xC3,0xB1,0x3C, 0xD4,0xC2,0x4D, - 0xE5,0xD3,0x5E, 0xF6,0xE4,0x6F, 0xFF,0xF5,0x82, 0xFF,0xFF,0x96, -******************************************************************* - -******************************************************************* - PALETTE - PHASE 26.7 SHIFT - -GREY - 0x00,0x00,0x00, 0x11,0x11,0x11, 0x22,0x22,0x22, 0x33,0x33,0x33, - 0x44,0x44,0x44, 0x55,0x55,0x55, 0x66,0x66,0x66, 0x77,0x77,0x77, - 0x88,0x88,0x88, 0x99,0x99,0x99, 0xAA,0xAA,0xAA, 0xBB,0xBB,0xBB, - 0xCC,0xCC,0xCC, 0xDD,0xDD,0xDD, 0xEE,0xEE,0xEE, 0xFF,0xFF,0xFF, - -GOLD - 0x1A,0x07,0x00, 0x2B,0x18,0x00, 0x3C,0x29,0x00, 0x4D,0x3A,0x00, - 0x5E,0x4B,0x00, 0x6F,0x5C,0x00, 0x80,0x6D,0x00, 0x91,0x7E,0x09, - 0xA2,0x8F,0x1A, 0xB3,0xA0,0x2B, 0xC4,0xB1,0x3C, 0xD5,0xC2,0x4D, - 0xE6,0xD3,0x5E, 0xF7,0xE4,0x6F, 0xFF,0xF5,0x83, 0xFF,0xFF,0x97, - -ORANGE - 0x32,0x00,0x00, 0x43,0x06,0x00, 0x54,0x17,0x00, 0x65,0x28,0x00, - 0x79,0x39,0x00, 0x87,0x4A,0x00, 0x98,0x5B,0x0C, 0xA9,0x6C,0x1D, - 0xBA,0x7D,0x2E, 0xCB,0x8E,0x3F, 0xDC,0x9F,0x50, 0xED,0xB0,0x61, - 0xFE,0xC1,0x72, 0xFF,0xD2,0x87, 0xFF,0xE3,0x9E, 0xFF,0xF4,0xB4, - -RED-ORANGE - 0x3E,0x00,0x00, 0x4F,0x00,0x00, 0x60,0x07,0x00, 0x71,0x18,0x00, - 0x82,0x29,0x10, 0x93,0x3A,0x21, 0xA4,0x4B,0x32, 0xB5,0x5C,0x43, - 0xC6,0x6D,0x54, 0xD7,0x7E,0x65, 0xE8,0x8F,0x76, 0xF9,0xA0,0x87, - 0xFF,0xB1,0x9C, 0xFF,0xC2,0xB2, 0xFF,0xD3,0xC8, 0xFF,0xE4,0xDE, - -PINK - 0x3E,0x00,0x09, 0x4F,0x00,0x15, 0x60,0x00,0x21, 0x71,0x0E,0x31, - 0x82,0x1F,0x42, 0x93,0x30,0x53, 0xA4,0x41,0x64, 0xB5,0x52,0x75, - 0xC6,0x63,0x86, 0xD7,0x74,0x97, 0xE8,0x85,0xA8, 0xF9,0x96,0xB9, - 0xFF,0xA7,0xCE, 0xFF,0xB8,0xE4, 0xFF,0xC9,0xEF, 0xFF,0xDA,0xF4, - -PURPLE - 0x30,0x00,0x3D, 0x41,0x00,0x48, 0x52,0x00,0x54, 0x63,0x0C,0x64, - 0x74,0x1D,0x75, 0x85,0x2E,0x86, 0x96,0x3F,0x97, 0xA7,0x50,0xA8, - 0xB8,0x61,0xB9, 0xC9,0x72,0xCA, 0xDA,0x83,0xDB, 0xEB,0x94,0xE5, - 0xFC,0xA5,0xE5, 0xFF,0xB6,0xE9, 0xFF,0xC7,0xEE, 0xFF,0xD8,0xF3, - -PURPLE-BLUE - 0x18,0x00,0x62, 0x29,0x00,0x6E, 0x3A,0x01,0x7A, 0x4B,0x12,0x8B, - 0x5C,0x23,0x9C, 0x6D,0x34,0xAD, 0x7E,0x45,0xBE, 0x8F,0x56,0xCF, - 0xA0,0x67,0xE0, 0xB1,0x78,0xEE, 0xC2,0x89,0xEE, 0xD3,0x9A,0xEE, - 0xE4,0xAB,0xEE, 0xF5,0xBC,0xEE, 0xFF,0xCD,0xE0, 0xFF,0xDE,0xF5, - -BLUE1 - 0x00,0x00,0x72, 0x0C,0x00,0x7F, 0x1D,0x0E,0x8F, 0x2E,0x1F,0xA0, - 0x3F,0x30,0xB1, 0x50,0x41,0xC2, 0x61,0x52,0xD3, 0x72,0x63,0xE4, - 0x83,0x74,0xF5, 0x94,0x85,0xFA, 0xA5,0x96,0xFA, 0xB6,0xA7,0xFA, - 0xC7,0xB8,0xFA, 0xD8,0xC9,0xFA, 0xE9,0xDA,0xFA, 0xFA,0xE8,0xFA, - -BLUE2 - 0x00,0x00,0x62, 0x00,0x0F,0x77, 0x01,0x20,0x8D, 0x12,0x31,0x9E, - 0x23,0x42,0xAF, 0x34,0x53,0xC0, 0x45,0x64,0xD1, 0x56,0x75,0xE2, - 0x67,0x86,0xF3, 0x78,0x97,0xFF, 0x89,0xA8,0xFF, 0x9A,0xB9,0xFF, - 0xAB,0xCA,0xFF, 0xBC,0xDB,0xFF, 0xCD,0xEC,0xFF, 0xDE,0xFD,0xFF, - -LIGHT-BLUE - 0x00,0x10,0x42, 0x00,0x21,0x58, 0x00,0x32,0x6E, 0x00,0x43,0x84, - 0x0E,0x54,0x96, 0x1F,0x65,0xA7, 0x30,0x76,0xB8, 0x41,0x87,0xC9, - 0x52,0x98,0xDA, 0x63,0xA9,0xEB, 0x74,0xBA,0xFC, 0x85,0xCB,0xFF, - 0x96,0xDC,0xFF, 0xA7,0xED,0xFF, 0xB8,0xFE,0xFF, 0xC9,0xFF,0xFF, - -TURQUOISE - 0x00,0x1E,0x14, 0x00,0x2F,0x2A, 0x00,0x40,0x40, 0x00,0x51,0x56, - 0x04,0x62,0x6B, 0x15,0x73,0x7C, 0x26,0x84,0x8D, 0x37,0x95,0x9E, - 0x48,0xA6,0xAF, 0x59,0xB7,0xC0, 0x6A,0xC8,0xD1, 0x7B,0xD9,0xE2, - 0x8C,0xEA,0xF3, 0x9D,0xFB,0xFF, 0xAE,0xFF,0xFF, 0xBF,0xFF,0xFF, - -GREEN-BLUE - 0x00,0x26,0x0B, 0x00,0x37,0x10, 0x00,0x48,0x16, 0x00,0x59,0x25, - 0x08,0x6A,0x38, 0x19,0x7B,0x49, 0x2A,0x8C,0x5A, 0x3B,0x9D,0x6B, - 0x4C,0xAE,0x7C, 0x5D,0xBF,0x8D, 0x6E,0xD0,0x9E, 0x7F,0xE1,0xAF, - 0x90,0xF2,0xC0, 0xA1,0xFF,0xD0, 0xB2,0xFF,0xDC, 0xC3,0xFF,0xE8, - -GREEN - 0x00,0x26,0x0B, 0x00,0x37,0x10, 0x00,0x48,0x16, 0x08,0x59,0x18, - 0x19,0x6A,0x18, 0x2A,0x7B,0x18, 0x3B,0x8C,0x29, 0x4C,0x9D,0x3A, - 0x5D,0xAE,0x4B, 0x6E,0xBF,0x5C, 0x7F,0xD0,0x6D, 0x90,0xE1,0x7E, - 0xA1,0xF2,0x8F, 0xB2,0xFF,0x9F, 0xC3,0xFF,0xAB, 0xD4,0xFF,0xB7, - -YELLOW-GREEN - 0x00,0x1E,0x09, 0x00,0x2F,0x0E, 0x11,0x40,0x0E, 0x22,0x51,0x0E, - 0x33,0x62,0x0E, 0x44,0x73,0x0E, 0x55,0x84,0x0E, 0x66,0x95,0x17, - 0x77,0xA6,0x28, 0x88,0xB7,0x39, 0x99,0xC8,0x4A, 0xAA,0xD9,0x5B, - 0xBB,0xEA,0x6C, 0xCC,0xFB,0x7D, 0xDD,0xFF,0x8A, 0xEE,0xFF,0x96, - -ORANGE-GREEN - 0x0D,0x0F,0x01, 0x1E,0x20,0x01, 0x2F,0x31,0x01, 0x40,0x42,0x01, - 0x51,0x53,0x01, 0x62,0x64,0x01, 0x73,0x75,0x01, 0x84,0x86,0x08, - 0x95,0x97,0x19, 0xA6,0xA8,0x2A, 0xB7,0xB9,0x3B, 0xC8,0xCA,0x4C, - 0xD9,0xDB,0x5D, 0xEA,0xEC,0x6E, 0xFB,0xFD,0x7F, 0xFF,0xFF,0x8F, - -LIGHT-ORANGE - 0x28,0x00,0x00, 0x39,0x0E,0x00, 0x4A,0x1F,0x00, 0x5B,0x30,0x00, - 0x6C,0x41,0x00, 0x7D,0x52,0x00, 0x8E,0x63,0x00, 0x9F,0x74,0x10, - 0xB0,0x85,0x21, 0xC1,0x96,0x32, 0xD2,0xA7,0x43, 0xE3,0xB8,0x54, - 0xF4,0xC9,0x65, 0xFF,0xDA,0x78, 0xFF,0xEB,0x8E, 0xFF,0xFC,0xA4, -******************************************************************* - -******************************************************************* - PALETTE - PHASE 27.2 SHIFT - - -GREY - 0x00,0x00,0x00, 0x11,0x11,0x11, 0x22,0x22,0x22, 0x33,0x33,0x33, - 0x44,0x44,0x44, 0x55,0x55,0x55, 0x66,0x66,0x66, 0x77,0x77,0x77, - 0x88,0x88,0x88, 0x99,0x99,0x99, 0xAA,0xAA,0xAA, 0xBB,0xBB,0xBB, - 0xCC,0xCC,0xCC, 0xDD,0xDD,0xDD, 0xEE,0xEE,0xEE, 0xFF,0xFF,0xFF, - -GOLD - 0x1A,0x07,0x00, 0x2B,0x18,0x00, 0x3C,0x29,0x00, 0x4D,0x3A,0x00, - 0x5E,0x4B,0x00, 0x6F,0x5C,0x00, 0x80,0x6D,0x00, 0x91,0x7E,0x09, - 0xA2,0x8F,0x1A, 0xB3,0xA0,0x2B, 0xC4,0xB1,0x3C, 0xD5,0xC2,0x4D, - 0xE6,0xD3,0x5E, 0xF7,0xE4,0x6F, 0xFF,0xF5,0x83, 0xFF,0xF7,0x97, - -ORANGE - 0x32,0x00,0x00, 0x43,0x05,0x00, 0x54,0x16,0x00, 0x65,0x27,0x00, - 0x76,0x38,0x00, 0x87,0X49,0x00, 0x98,0x5A,0x0C, 0xA9,0x6B,0x1D, - 0xBA,0x7C,0x2E, 0xCB,0x8D,0x3F, 0xDC,0x9E,0x50, 0xED,0xAF,0x61, - 0xFE,0xC0,0x72, 0xFF,0xD1,0x88, 0xFF,0xE2,0x9E, 0xFF,0xF3,0xB4, - -RED-ORANGE - 0x3F,0x00,0x00, 0x50,0x00,0x00, 0x61,0x07,0x00, 0x72,0x18,0x01, - 0x83,0x29,0x12, 0x94,0x3A,0x23, 0xA5,0x4B,0x34, 0xB6,0x5C,0x45, - 0xC7,0x6D,0x56, 0xD8,0x7E,0x67, 0xE9,0x8F,0x78, 0xFA,0xA0,0x89, - 0xFF,0xB1,0x9E, 0xFF,0xC2,0xB4, 0xFF,0xD3,0xCA, 0xFF,0xE4,0xE0, - -PINK - 0x3E,0x00,0x0C, 0x4F,0x00,0x18, 0x60,0x00,0x24, 0x71,0x0E,0x34, - 0x82,0x1F,0x45, 0x93,0x30,0x56, 0xA4,0x41,0x67, 0xB5,0x52,0x78, - 0xC6,0x63,0x89, 0xD7,0x74,0x9A, 0xE8,0x85,0xAB, 0xF9,0x96,0xB6, - 0xFF,0xA7,0xD1, 0xFF,0xB8,0xE7, 0xFF,0xC9,0xEF, 0xFF,0xDA,0xF4, - -PURPLE - 0x2F,0x00,0x3F, 0x40,0x00,0x4B, 0x51,0x00,0x57, 0x62,0x0C,0x66, - 0x73,0x1D,0x77, 0x84,0x2E,0x88, 0x95,0x3F,0x99, 0xA6,0x50,0xAA, - 0xB7,0x61,0xBB, 0xC8,0x72,0xCC, 0xD9,0x83,0xDD, 0xEA,0x94,0xE5, - 0xFB,0xA5,0xE5, 0xFF,0xB6,0xE9, 0xFF,0xC7,0xEE, 0xFF,0xD8,0xF3, - -PURPLE-BLUE - 0x16,0x00,0x64, 0x27,0x00,0x70, 0x38,0x02,0x7D, 0x49,0x13,0x8E, - 0x5A,0x24,0x9F, 0x6B,0x35,0xB0, 0x7C,0x46,0xC1, 0x8D,0x57,0xD2, - 0x9E,0x68,0xE3, 0xAF,0x79,0xEF, 0xC0,0x8A,0xEF, 0xD1,0x9D,0xEF, - 0xE2,0xAC,0xEF, 0xF3,0xBD,0xEF, 0xFF,0xCE,0xF0, 0xFF,0xDF,0xF5, - -BLUE1 - 0x00,0x00,0x71, 0x09,0x00,0x7F, 0x1A,0x10,0x90, 0x2B,0x21,0xA1, - 0x3C,0x32,0xB2, 0x4D,0x43,0xC3, 0x5E,0x54,0xD4, 0x6F,0x65,0xE5, - 0x80,0x76,0xF6, 0x91,0x87,0xFC, 0xA2,0x98,0xFC, 0xB3,0xA9,0xFC, - 0xC4,0xBA,0xFC, 0xD5,0xCB,0xFC, 0xE6,0xDC,0xFC, 0xF7,0xED,0xFC, - -BLUE2 - 0x00,0x00,0x5E, 0x00,0x11,0x74, 0x00,0x22,0x8A, 0x0F,0x33,0x9C, - 0x20,0x44,0xAD, 0x31,0x55,0xBE, 0x42,0x66,0xCF, 0x53,0x77,0xE0, - 0x64,0x88,0xF1, 0x75,0x99,0xFF, 0x86,0xAA,0xFF, 0x97,0xBB,0xFF, - 0xA8,0xCC,0xFF, 0xB9,0xDD,0xFF, 0xCA,0xEE,0xFF, 0xDB,0xFF,0xFF, - -LIGHT-BLUE - 0x00,0x12,0x3B, 0x00,0x23,0x51, 0x00,0x34,0x68, 0x00,0x45,0x7E, - 0x0C,0x56,0x90, 0x1D,0x67,0xA1, 0x2E,0x78,0xB2, 0x3F,0x89,0xC3, - 0x50,0x9A,0xD4, 0x61,0xAB,0xE5, 0x72,0xBC,0xF6, 0x83,0xCD,0xFF, - 0x94,0xDE,0xFF, 0xA5,0xEF,0xFF, 0xB6,0xFF,0xFF, 0xC7,0xFF,0xFF, - -TURQUOISE - 0x00,0x20,0x0C, 0x00,0x31,0x22, 0x00,0x42,0x38, 0x00,0x53,0x4E, - 0x04,0x64,0x63, 0x15,0x75,0x74, 0x26,0x86,0x85, 0x37,0x97,0x96, - 0x48,0xA8,0xA7, 0x59,0xB9,0xB8, 0x6A,0xCA,0xC9, 0x7B,0xDB,0xDA, - 0x8C,0xEC,0xEB, 0x9D,0xFD,0xFC, 0xAE,0xFF,0xFF, 0xBF,0xFF,0xFF, - -GREEN-BLUE - 0x00,0x27,0x0C, 0x00,0x38,0x11, 0x00,0x49,0x16, 0x00,0x5A,0x1C, - 0x0B,0x6B,0x2F, 0x1C,0x7C,0x40, 0x2D,0x8D,0x51, 0x3E,0x9E,0x62, - 0x4F,0xAF,0x73, 0x60,0xC0,0x84, 0x71,0xD1,0x95, 0x82,0xE2,0xA6, - 0x93,0xF3,0xB7, 0xA4,0xFF,0xC6, 0xB5,0xFF,0xD2, 0xC6,0xFF,0xDE, - -GREEN - 0x00,0x25,0x0B, 0x00,0x36,0x10, 0x00,0x47,0x15, 0x0D,0x58,0x16, - 0x1E,0x69,0x16, 0x2F,0x7A,0x16, 0x40,0x8B,0x21, 0x51,0x9C,0x32, - 0x62,0xAD,0x43, 0x73,0xBE,0x54, 0x84,0xCF,0x65, 0x95,0xE0,0x76, - 0xA6,0xF1,0x87, 0xB7,0xFF,0x98, 0xC8,0xFF,0xA3, 0xD9,0xFF,0xAF, - -YELLOW-GREEN - 0x00,0x1B,0x08, 0x06,0x2C,0x0B, 0x17,0x3D,0x0B, 0x28,0x4E,0x0B, - 0x39,0x5F,0x0B, 0x4A,0x70,0x0B, 0x5B,0x81,0x0B, 0x6C,0x92,0x12, - 0x7D,0xA3,0x23, 0x8E,0xB4,0x34, 0x9F,0xC5,0x45, 0xB0,0xD6,0x56, - 0xC1,0xE7,0x67, 0xD2,0xF8,0x78, 0xE3,0xFF,0x86, 0xF4,0xFF,0x92, - -ORANGE-GREEN - 0x13,0x0B,0x00, 0x24,0x1C,0x00, 0x35,0x2D,0x00, 0x46,0x3E,0x00, - 0x57,0x4F,0x00, 0x68,0x60,0x00, 0x79,0x71,0x00, 0x8A,0x82,0x08, - 0x9B,0x93,0x19, 0xAC,0xA4,0x2A, 0xBD,0xB5,0x3B, 0xCE,0xC6,0x4C, - 0xDF,0xD7,0x5D, 0xF0,0xE8,0x6E, 0xFF,0xF9,0x7F, 0xFF,0xFF,0x92, - -LIGHT-ORANGE - 0x2D,0x00,0x00, 0x3E,0x0A,0x00, 0x4F,0x1B,0x00, 0x60,0x2C,0x00, - 0x71,0x3D,0x00, 0x82,0x4E,0x00, 0x93,0x5F,0x05, 0xA4,0x70,0x16, - 0xB5,0x81,0x27, 0xC4,0x90,0x37, 0xD7,0xA3,0x49, 0xE8,0xB4,0x5A, - 0xF9,0xC5,0x6B, 0xFF,0xD6,0x80, 0xFF,0xE7,0x96, 0xFF,0xF8,0xAC, -******************************************************************* - -******************************************************************* - PALETTE - 27.7 PHASE SHIFT - -GREY - 0x00,0x00,0x00, 0x11,0x11,0x11, 0x22,0x22,0x22, 0x33,0x33,0x33, - 0x44,0x44,0x44, 0x55,0x55,0x55, 0x66,0x66,0x66, 0x77,0x77,0x77, - 0x88,0x88,0x88, 0x99,0x99,0x99, 0xAA,0xAA,0xAA, 0xBB,0xBB,0xBB, - 0xCC,0xCC,0xCC, 0xDD,0xDD,0xDD, 0xEE,0xEE,0xEE, 0xFF,0xFF,0xFF, - -GOLD - 0x1A,0x07,0x00, 0x2B,0x18,0x00, 0x3C,0x29,0x00, 0x4D,0x3A,0x00, - 0x5E,0x4B,0x00, 0x6F,0x5C,0x00, 0x80,0x6D,0x00, 0x91,0x7E,0x09, - 0xA2,0x8F,0x1A, 0xB3,0xA0,0x2B, 0xC4,0xB1,0x3C, 0xD5,0xC2,0x4D, - 0xE6,0xD3,0x5E, 0xF7,0xE4,0x6F, 0xFF,0xF5,0x83, 0xFF,0xFF,0x97, - -ORANGE - 0x32,0x00,0x00, 0x43,0x05,0x00, 0x54,0x16,0x00, 0x65,0x27,0x00, - 0x76,0x38,0x00, 0x87,0x49,0x00, 0x98,0x5A,0x0C, 0xA9,0x6B,0x1D, - 0xBA,0x7C,0x2E, 0xCB,0x8D,0x3F, 0xDC,0x9E,0x50, 0xED,0xAF,0x61, - 0xFE,0xC0,0x72, 0xFF,0xD1,0x88, 0xFF,0xE2,0x9E, 0xFF,0xF3,0xB4, - -RED-ORANGE - 0x3F,0x00,0x00, 0x50,0x00,0x00, 0x61,0x06,0x00, 0x72,0x17,0x03, - 0x83,0x28,0x14, 0x94,0x39,0x25, 0xA5,0x4A,0x36, 0xB6,0x5B,0x47, - 0xC7,0x6C,0x58, 0xD8,0x7D,0x69, 0xE9,0x8E,0x7A, 0xFA,0x9F,0x8B, - 0xFF,0xB0,0x9F, 0xFF,0xC1,0xB5, 0xFF,0xD2,0xCB, 0xFF,0xE3,0xE1, - -PINK - 0x3D,0x00,0x10, 0x4E,0x00,0x1C, 0x5F,0x00,0x27, 0x70,0x0D,0x37, - 0x81,0x1E,0x48, 0x92,0x2F,0x59, 0xA3,0x40,0x6A, 0xB4,0x51,0x7B, - 0xC5,0x62,0x8C, 0xD6,0x73,0x9D, 0xE7,0x84,0xAE, 0xF8,0x95,0xBF, - 0xFF,0xA6,0xD3, 0xFF,0xB7,0xE9, 0xFF,0xC8,0xEE, 0xFF,0xD9,0xF4, - -PURPLE - 0x2D,0x00,0x42, 0x3E,0x00,0x4E, 0x4F,0x00,0x5A, 0x60,0x0C,0x6A, - 0x71,0x1D,0x7B, 0x82,0x2E,0x8C, 0x93,0x3F,0x9D, 0xA4,0x50,0xAE, - 0xB5,0x61,0xBF, 0xC6,0x72,0xD0, 0xD7,0x83,0xE1, 0xE8,0x94,0xE6, - 0xF9,0xA5,0xE6, 0xFF,0xB6,0xE9, 0xFF,0xC7,0xEE, 0xFF,0xD8,0xF3, - -PURPLE-BLUE - 0x13,0x00,0x67, 0x24,0x00,0x73, 0x35,0x03,0x80, 0x46,0x14,0x91, - 0x57,0x25,0xA2, 0x68,0x36,0xB3, 0x79,0x47,0xC4, 0x8A,0x58,0xD5, - 0x9B,0x69,0xE6, 0xAC,0x7A,0xF0, 0xBD,0x8B,0xF0, 0xCE,0x9C,0xF0, - 0xDF,0xAD,0xF0, 0xF0,0xBE,0xF0, 0xFF,0xCF,0xF1, 0xFF,0xE0,0xF6, - -BLUE1 - 0x00,0x00,0x70, 0x05,0x01,0x80, 0x16,0x12,0x91, 0x27,0x23,0xA2, - 0x38,0x34,0xB3, 0x49,0x45,0xC4, 0x5A,0x56,0xD5, 0x6B,0x67,0xE6, - 0x7C,0x78,0xF7, 0x8D,0x89,0xFE, 0x9E,0x9A,0xFE, 0xAF,0xAB,0xFE, - 0xC0,0xBC,0xFE, 0xD1,0xCD,0xFE, 0xE2,0xDE,0xFE, 0xF3,0xEF,0xFE, - -BLUE2 - 0x00,0x03,0x5B, 0x00,0x14,0x71, 0x00,0x25,0x87, 0x0C,0x36,0x9A, - 0x1D,0x47,0xAB, 0x2E,0x58,0xBC, 0x3F,0x69,0xCD, 0x50,0x7A,0xDE, - 0x61,0x8B,0xEF, 0x72,0x9C,0xFF, 0x83,0xAD,0xFF, 0x94,0xBE,0xFF, - 0xA5,0xCF,0xFF, 0xB6,0xE0,0xFF, 0xC7,0xF1,0xFF, 0xD8,0xFF,0xFF, - -LIGHT-BLUE - 0x00,0x15,0x35, 0x00,0x26,0x4B, 0x00,0x37,0x61, 0x00,0x48,0x78, - 0x0A,0x59,0x8B, 0x1B,0x6A,0x9C, 0x2C,0x7B,0xAD, 0x3D,0x8C,0xBE, - 0x4E,0x9D,0xCF, 0x5F,0xAE,0xE0, 0x70,0xBF,0xF1, 0x81,0xD0,0xFF, - 0x92,0xE1,0xFF, 0xA3,0xF2,0xFF, 0xB4,0xFF,0xFF, 0xC5,0xFF,0xFF, - -TURQUOISE - 0x00,0x22,0x0A, 0x00,0x33,0x19, 0x00,0x44,0x2F, 0x00,0x55,0x45, - 0x04,0x66,0x5A, 0x15,0x77,0x6B, 0x26,0x88,0x7C, 0x37,0x99,0x8D, - 0x48,0xAA,0x9E, 0x59,0xBB,0xAF, 0x6A,0xCC,0xC0, 0x7B,0xDD,0xD1, - 0x8C,0xEE,0xE2, 0x9D,0xFF,0xF3, 0xAE,0xFF,0xFF, 0xBF,0xFF,0xFF, - -GREEN-BLUE - 0x00,0x27,0x0C, 0x00,0x38,0x11, 0x00,0x49,0x16, 0x00,0x5A,0x1B, - 0x0D,0x6B,0x25, 0x1E,0x7C,0x36, 0x2F,0x8D,0x47, 0x40,0x9E,0x58, - 0x51,0xAF,0x69, 0x62,0xC0,0x7A, 0x73,0xD1,0x8B, 0x84,0xE2,0x9C, - 0x95,0xF3,0xAD, 0xA6,0xFF,0xBD, 0xB7,0xFF,0xC9, 0xC8,0xFF,0xD4, - -GREEN - 0x00,0x24,0x0B, 0x00,0x35,0x10, 0x01,0x46,0x15, 0x12,0x57,0x15, - 0x23,0x68,0x15, 0x34,0x79,0x15, 0x45,0x8A,0x19, 0x56,0x9B,0x2A, - 0x67,0xAC,0x3B, 0x78,0xBD,0x4C, 0x89,0xCE,0x5D, 0x9A,0xDF,0x6E, - 0xAB,0xF0,0x7F, 0xBC,0xFF,0x8F, 0xCD,0xFF,0x9B, 0xDE,0xFF,0xA7, - -YELLOW-GREEN - 0x00,0x18,0x07, 0x00,0x29,0x0C, 0x1E,0x3A,0x08, 0x2F,0x4B,0x08, - 0x40,0x5C,0x08, 0x51,0x6D,0x08, 0x62,0x7E,0x08, 0x73,0x8F,0x0D, - 0x84,0xA0,0x1E, 0x95,0xB1,0x2F, 0xA6,0xC2,0x40, 0xB7,0xD3,0x51, - 0xC8,0xE4,0x62, 0xD9,0xF5,0x73, 0xEA,0xFF,0x82, 0xFB,0xFF,0x8E, - -ORANGE-GREEN - 0x1B,0x07,0x00, 0x2C,0x18,0x00, 0x3D,0x29,0x00, 0x4E,0x3A,0x00, - 0x5F,0x4B,0x00, 0x70,0x5C,0x00, 0x81,0x6D,0x00, 0x92,0x7E,0x09, - 0xA3,0x8F,0x1A, 0xB4,0xA0,0x2B, 0xC5,0xB1,0x3C, 0xD6,0xC2,0x4D, - 0xE7,0xD3,0x5E, 0xF8,0xE4,0x6F, 0xFF,0xF5,0x83, 0xFF,0xFF,0x97, - -LIGHT-ORANGE - 0x33,0x00,0x00, 0x44,0x05,0x00, 0x55,0x16,0x00, 0x66,0x27,0x00, - 0x77,0x38,0x00, 0x88,0x49,0x00, 0x99,0x5A,0x0D, 0xAA,0x6B,0x1E, - 0xBB,0x7C,0x2F, 0xCC,0x8D,0x40, 0xDD,0x9E,0x51, 0xEE,0xAF,0x62, - 0xFF,0xC0,0x73, 0xFF,0xD1,0x89, 0xFF,0xE2,0x9F, 0xFF,0xF3,0xB5 -*******************************************************************/ - -/************************************************************** - * - * Memory setup - * - **************************************************************/ - -void a400_state::setup_ram(int bank, uint32_t size) -{ - offs_t ram_top; - - switch (bank) - { - case 0: // 0x0000-0x7fff - ram_top = std::min(size, uint32_t(0x8000)) - 1; - m_maincpu->space(AS_PROGRAM).install_readwrite_bank(0x0000, ram_top, "0000"); - m_0000 = membank("0000"); - m_0000->set_base(m_ram->pointer()); - break; - case 1: // 0x8000-0x9fff - ram_top = std::min(size, uint32_t(0xa000)) - 1; - if (ram_top > 0x8000) - { - m_maincpu->space(AS_PROGRAM).install_readwrite_bank(0x8000, ram_top, "8000"); - m_8000 = membank("8000"); - m_8000->set_base(m_ram->pointer() + 0x8000); - } - else - { - m_8000 = nullptr; - } - break; - case 2: // 0xa000-0xbfff - ram_top = std::min(size, uint32_t(0xc000)) - 1; - if (ram_top > 0xa000) - { - m_maincpu->space(AS_PROGRAM).install_readwrite_bank(0xa000, ram_top, "a000"); - m_a000 = membank("a000"); - m_a000->set_base(m_ram->pointer() + 0xa000); - } - else - { - m_a000 = nullptr; - } - break; - } -} - - -// these handle cart enable/disable without calling setup_ram thousands of times -uint8_t a400_state::special_read_8000(offs_t offset) -{ - if (!m_cart_disabled) - return m_cart->read_80xx(offset); - else - { - offset += 0x8000; - if (m_ram->size() < offset) - return 0; - else - return m_ram->pointer()[offset]; - } -} - -void a400_state::special_write_8000(offs_t offset, uint8_t data) -{ - if (m_cart_disabled) - { - offset += 0x8000; - if (m_ram->size() >= offset) - m_ram->pointer()[offset] = data; - } -} - -uint8_t a400_state::special_read_a000(offs_t offset) -{ - if (!m_cart_disabled) - return m_cart->read_80xx(offset); - else - { - offset += 0xa000; - if (m_ram->size() < offset) - return 0; - else - return m_ram->pointer()[offset]; - } -} - -void a400_state::special_write_a000(offs_t offset, uint8_t data) -{ - if (m_cart_disabled) - { - offset += 0xa000; - if (m_ram->size() >= offset) - m_ram->pointer()[offset] = data; - } -} - - -uint8_t a400_state::read_d5xx(offs_t offset) -{ - if (!machine().side_effects_disabled()) - disable_cart(offset, 0); - return 0xff; -} - -void a400_state::disable_cart(offs_t offset, uint8_t data) -{ - if (m_cart->exists()) - { - switch (m_cart->get_cart_type()) - { - case A800_PHOENIX: - case A800_BLIZZARD: - if (!m_cart_disabled) - m_cart_disabled = 1; - break; - case A800_OSS034M: - case A800_OSS043M: - case A800_EXPRESS: - case A800_DIAMOND: - case A800_WILLIAMS: - // use m_cart_disabled & m_last_offs to avoid continuous remapping of - // the memory space in some games (e.g. dropzone) - if (offset & 0x8 && !m_cart_disabled) - m_cart_disabled = 1; - else if (!(offset & 0x8)) - { - if (m_cart_disabled) - m_cart_disabled = 0; - - if ((offset & 0x7) != m_last_offs) - { - // we enter here only if we are writing to a different offset than last time - m_last_offs = offset & 0x7; - m_cart->write_d5xx(offset, data); - } - } - break; - case A800_TURBO64: - case A800_TURBO128: - if (offset & 0x10 && !m_cart_disabled) - m_cart_disabled = 1; - else if (!(offset & 0x10)) - { - if (m_cart_disabled) - m_cart_disabled = 0; - - if ((offset & 0x0f) != m_last_offs) - { - // we enter here only if we are writing to a different offset than last time - m_last_offs = offset & 0x0f; - m_cart->write_d5xx(offset & 0x0f, data); - } - } - break; - case A800_SPARTADOS: - // writes with offset & 8 are also used to enable/disable the subcart, so they go through! - m_cart->write_d5xx(offset, data); - break; - case A800_OSSM091: - case A800_OSS8K: - if ((offset & 0x9) == 0x08) - m_cart_disabled = 1; - else - { - m_cart_disabled = 0; - m_cart->write_d5xx(offset, data); - } - break; - case A800_MICROCALC: - m_cart_helper = (m_cart_helper + 1) % 5; - if (m_cart_helper == 4) - m_cart_disabled = 1; - else - { - m_cart_disabled = 0; - m_cart->write_d5xx(offset, m_cart_helper); - } - break; - default: - break; - } - } -} - -void a400_state::setup_cart(a800_cart_slot_device *slot) -{ - m_cart_disabled = 0; - m_last_offs = -1; - - if (slot->exists()) - { - switch (slot->get_cart_type()) - { - case A800_8K: - m_maincpu->space(AS_PROGRAM).install_read_handler(0xa000, 0xbfff, read8sm_delegate(*slot, FUNC(a800_cart_slot_device::read_80xx))); - m_maincpu->space(AS_PROGRAM).unmap_write(0xa000, 0xbfff); - break; - case A800_8K_RIGHT: - m_maincpu->space(AS_PROGRAM).install_read_handler(0x8000, 0x9fff, read8sm_delegate(*slot, FUNC(a800_cart_slot_device::read_80xx))); - m_maincpu->space(AS_PROGRAM).unmap_write(0x8000, 0x9fff); - break; - case A800_16K: - m_maincpu->space(AS_PROGRAM).install_read_handler(0x8000, 0xbfff, read8sm_delegate(*slot, FUNC(a800_cart_slot_device::read_80xx))); - m_maincpu->space(AS_PROGRAM).unmap_write(0x8000, 0xbfff); - break; - case A800_BBSB: - m_maincpu->space(AS_PROGRAM).install_read_handler(0x8000, 0xbfff, read8sm_delegate(*slot, FUNC(a800_cart_slot_device::read_80xx))); - m_maincpu->space(AS_PROGRAM).install_write_handler(0x8000, 0x9fff, write8sm_delegate(*slot, FUNC(a800_cart_slot_device::write_80xx))); - m_maincpu->space(AS_PROGRAM).unmap_write(0xa000, 0xbfff); - break; - case A800_OSS034M: - case A800_OSS043M: - case A800_OSSM091: - case A800_OSS8K: - case A800_TURBO64: - case A800_TURBO128: - case A800_PHOENIX: - m_maincpu->space(AS_PROGRAM).install_readwrite_handler(0xa000, 0xbfff, read8sm_delegate(*this, FUNC(a400_state::special_read_a000)), write8sm_delegate(*this, FUNC(a400_state::special_write_a000))); - m_maincpu->space(AS_PROGRAM).install_write_handler(0xd500, 0xd5ff, write8sm_delegate(*this, FUNC(a400_state::disable_cart))); - break; - case A800_EXPRESS: - m_maincpu->space(AS_PROGRAM).install_readwrite_handler(0xa000, 0xbfff, read8sm_delegate(*this, FUNC(a400_state::special_read_a000)), write8sm_delegate(*this, FUNC(a400_state::special_write_a000))); - m_maincpu->space(AS_PROGRAM).install_write_handler(0xd570, 0xd57f, write8sm_delegate(*this, FUNC(a400_state::disable_cart))); - break; - case A800_DIAMOND: - m_maincpu->space(AS_PROGRAM).install_readwrite_handler(0xa000, 0xbfff, read8sm_delegate(*this, FUNC(a400_state::special_read_a000)), write8sm_delegate(*this, FUNC(a400_state::special_write_a000))); - m_maincpu->space(AS_PROGRAM).install_write_handler(0xd5d0, 0xd5df, write8sm_delegate(*this, FUNC(a400_state::disable_cart))); - break; - case A800_WILLIAMS: - m_maincpu->space(AS_PROGRAM).install_readwrite_handler(0xa000, 0xbfff, read8sm_delegate(*this, FUNC(a400_state::special_read_a000)), write8sm_delegate(*this, FUNC(a400_state::special_write_a000))); - m_maincpu->space(AS_PROGRAM).install_write_handler(0xd500, 0xd50f, write8sm_delegate(*this, FUNC(a400_state::disable_cart))); - break; - case A800_SPARTADOS: - m_maincpu->space(AS_PROGRAM).install_readwrite_handler(0xa000, 0xbfff, read8sm_delegate(*this, FUNC(a400_state::special_read_a000)), write8sm_delegate(*this, FUNC(a400_state::special_write_a000))); - m_maincpu->space(AS_PROGRAM).install_write_handler(0xd5e0, 0xd5ef, write8sm_delegate(*this, FUNC(a400_state::disable_cart))); - break; - case A800_BLIZZARD: - m_maincpu->space(AS_PROGRAM).install_readwrite_handler(0x8000, 0xbfff, read8sm_delegate(*this, FUNC(a400_state::special_read_8000)), write8sm_delegate(*this, FUNC(a400_state::special_write_8000))); - m_maincpu->space(AS_PROGRAM).install_write_handler(0xd500, 0xd5ff, write8sm_delegate(*this, FUNC(a400_state::disable_cart))); - break; - case A800_MICROCALC: - // this can also disable ROM when reading in 0xd500-0xd5ff - m_maincpu->space(AS_PROGRAM).install_readwrite_handler(0xa000, 0xbfff, read8sm_delegate(*this, FUNC(a400_state::special_read_a000)), write8sm_delegate(*this, FUNC(a400_state::special_write_a000))); - m_maincpu->space(AS_PROGRAM).install_readwrite_handler(0xd500, 0xd5ff, read8sm_delegate(*this, FUNC(a400_state::read_d5xx)), write8sm_delegate(*this, FUNC(a400_state::disable_cart))); - break; - case A800_TELELINK2: - m_maincpu->space(AS_PROGRAM).install_read_handler(0x8000, 0xbfff, read8sm_delegate(*slot, FUNC(a800_cart_slot_device::read_80xx))); - m_maincpu->space(AS_PROGRAM).install_write_handler(0x9000, 0x90ff, write8sm_delegate(*slot, FUNC(a800_cart_slot_device::write_80xx))); - m_maincpu->space(AS_PROGRAM).unmap_write(0xa000, 0xbfff); - m_maincpu->space(AS_PROGRAM).install_read_handler(0xd501, 0xd501, read8sm_delegate(*slot, FUNC(a800_cart_slot_device::read_d5xx))); - m_maincpu->space(AS_PROGRAM).install_write_handler(0xd502, 0xd502, write8sm_delegate(*slot, FUNC(a800_cart_slot_device::write_d5xx))); - break; - case A800_XEGS: - m_maincpu->space(AS_PROGRAM).install_read_handler(0x8000, 0xbfff, read8sm_delegate(*slot, FUNC(a800_cart_slot_device::read_80xx))); - m_maincpu->space(AS_PROGRAM).unmap_write(0x8000, 0xbfff); - m_maincpu->space(AS_PROGRAM).install_write_handler(0xd500, 0xd5ff, write8sm_delegate(*slot, FUNC(a800_cart_slot_device::write_d5xx))); - break; - case A5200_4K: - case A5200_8K: - case A5200_16K: - case A5200_32K: - case A5200_16K_2CHIPS: - m_maincpu->space(AS_PROGRAM).install_read_handler(0x4000, 0xbfff, read8sm_delegate(*slot, FUNC(a800_cart_slot_device::read_80xx))); - m_maincpu->space(AS_PROGRAM).unmap_write(0x4000, 0xbfff); - break; - case A5200_BBSB: - m_maincpu->space(AS_PROGRAM).install_read_handler(0x4000, 0xbfff, read8sm_delegate(*slot, FUNC(a800_cart_slot_device::read_80xx))); - m_maincpu->space(AS_PROGRAM).install_write_handler(0x4000, 0x5fff, write8sm_delegate(*slot, FUNC(a800_cart_slot_device::write_80xx))); - m_maincpu->space(AS_PROGRAM).unmap_write(0x6000, 0xbfff); - break; - } - } -} - - -TIMER_DEVICE_CALLBACK_MEMBER( a400_state::a400_interrupt ) -{ - m_antic->generic_interrupt(4); -} - -TIMER_DEVICE_CALLBACK_MEMBER( a400_state::a800xl_interrupt ) -{ - m_antic->generic_interrupt(2); -} - -TIMER_DEVICE_CALLBACK_MEMBER( a400_state::a5200_interrupt ) -{ - m_antic->generic_interrupt(4); -} - -MACHINE_RESET_MEMBER( a400_state, a400 ) -{ - m_pokey->write(15, 0); -} - - -MACHINE_START_MEMBER( a400_state, a400 ) -{ - setup_ram(0, m_ram->size()); - setup_ram(1, m_ram->size()); - setup_ram(2, m_ram->size()); - setup_cart(m_cart); - - save_item(NAME(m_cart_disabled)); - save_item(NAME(m_cart_helper)); - save_item(NAME(m_last_offs)); -} - - -MACHINE_START_MEMBER( a400_state, a800 ) -{ - setup_ram(0, m_ram->size()); - setup_ram(1, m_ram->size()); - setup_ram(2, m_ram->size()); - setup_cart(m_cart); - setup_cart(m_cart2); - - save_item(NAME(m_cart_disabled)); - save_item(NAME(m_cart_helper)); - save_item(NAME(m_last_offs)); -} - -MACHINE_START_MEMBER( a400_state, a800xl ) -{ - m_mmu = 0xfd; - m_ext_bank = 0x03; // only used by a130xe - setup_cart(m_cart); - - save_item(NAME(m_cart_disabled)); - save_item(NAME(m_cart_helper)); - save_item(NAME(m_last_offs)); - save_item(NAME(m_mmu)); - save_item(NAME(m_ext_bank)); -} - - -MACHINE_START_MEMBER( a400_state, a5200 ) -{ - setup_cart(m_cart); - - save_item(NAME(m_cart_disabled)); - save_item(NAME(m_cart_helper)); - save_item(NAME(m_last_offs)); -} - - -/************************************************************** - * - * GTIA interface - * - **************************************************************/ - -void a400_state::gtia_cb(uint8_t data) -{ - m_dac->write(BIT(data, 3)); -} - -/************************************************************** - * - * PIA interface - * - **************************************************************/ - -void a400_state::a600xl_pia_pb_w(uint8_t data) -{ - m_mmu = data; -} - -void a400_state::a800xl_pia_pb_w(uint8_t data) -{ - if (m_pia->port_b_z_mask() != 0xff) - { - m_mmu = data; - m_ext_bank = (m_mmu & 0x0c) >> 2; - } -} - -/************************************************************** - * - * Machine drivers - * - **************************************************************/ - - -void a400_state::atari_common_nodac(machine_config &config) -{ - /* basic machine hardware */ - M6502(config, m_maincpu, pokey_device::FREQ_17_EXACT); - - MCFG_MACHINE_RESET_OVERRIDE( a400_state, a400 ) - - /* video hardware */ - SCREEN(config, m_screen, SCREEN_TYPE_RASTER); - m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(1)); - m_screen->set_visarea(antic_device::MIN_X, antic_device::MAX_X, antic_device::MIN_Y, antic_device::MAX_Y); - m_screen->set_screen_update("antic", FUNC(antic_device::screen_update)); - m_screen->set_palette("palette"); - - PALETTE(config, "palette", FUNC(a400_state::a400_palette), ARRAY_LENGTH(atari_colors) / 3); - - PIA6821(config, m_pia, 0); - m_pia->readpa_handler().set_ioport("djoy_0_1"); - m_pia->readpb_handler().set_ioport("djoy_2_3"); - m_pia->ca2_handler().set("sio", FUNC(a8sio_device::motor_w)); - m_pia->cb2_handler().set("fdc", FUNC(atari_fdc_device::pia_cb2_w)); - m_pia->cb2_handler().append("sio", FUNC(a8sio_device::command_w)); - - a8sio_device &sio(A8SIO(config, "sio", nullptr)); - //sio.clock_in().set("pokey", FUNC(pokey_device::bclk_w)); - sio.data_in().set("pokey", FUNC(pokey_device::sid_w)); - sio.proceed().set(m_pia, FUNC(pia6821_device::ca1_w)); - sio.interrupt().set(m_pia, FUNC(pia6821_device::cb1_w)); - - /* sound hardware */ - SPEAKER(config, "speaker").front_center(); - POKEY(config, m_pokey, pokey_device::FREQ_17_EXACT); - m_pokey->pot_r<0>().set_ioport("analog_0"); - m_pokey->pot_r<1>().set_ioport("analog_1"); - m_pokey->pot_r<2>().set_ioport("analog_2"); - m_pokey->pot_r<3>().set_ioport("analog_3"); - m_pokey->pot_r<4>().set_ioport("analog_4"); - m_pokey->pot_r<5>().set_ioport("analog_5"); - m_pokey->pot_r<6>().set_ioport("analog_6"); - m_pokey->pot_r<7>().set_ioport("analog_7"); - m_pokey->serin_r().set("fdc", FUNC(atari_fdc_device::serin_r)); - m_pokey->serout_w().set("fdc", FUNC(atari_fdc_device::serout_w)); - //m_pokey->oclk_w().set("sio", FUNC(a8sio_device::clock_out_w)); - //m_pokey->sod_w().set("sio", FUNC(a8sio_device::data_out_w)); - m_pokey->set_keyboard_callback(FUNC(a400_state::a800_keyboard)); - m_pokey->set_interrupt_callback(FUNC(a400_state::interrupt_cb)); - m_pokey->add_route(ALL_OUTPUTS, "speaker", 1.0); -} - -void a400_state::atari_common(machine_config &config) -{ - atari_common_nodac(config); - - DAC_1BIT(config, "dac", 0).add_route(ALL_OUTPUTS, "speaker", 0.03); - - /* internal ram */ - RAM(config, m_ram).set_default_size("48K"); - - ATARI_GTIA(config, m_gtia, 0); - m_gtia->read_callback().set_ioport("console"); - m_gtia->write_callback().set(FUNC(a400_state::gtia_cb)); - - ATARI_ANTIC(config, m_antic, 0); - m_antic->set_gtia_tag(m_gtia); - - /* devices */ - ATARI_FDC(config, "fdc", 0); - - A800_CART_SLOT(config, "cartleft", a800_left, nullptr); - - /* software lists */ - SOFTWARE_LIST(config, "flop_list").set_original("a800_flop"); - SOFTWARE_LIST(config, "cart_list").set_original("a800"); - SOFTWARE_LIST(config, "cass_list").set_original("a800_cass"); - SOFTWARE_LIST(config, "xegs_list").set_original("xegs"); -} - -// memory map A400 + NTSC screen -void a400_state::a400(machine_config &config) -{ - atari_common(config); - - m_maincpu->set_addrmap(AS_PROGRAM, &a400_state::a400_mem); - TIMER(config, "scantimer").configure_scanline(FUNC(a400_state::a400_interrupt), "screen", 0, 1); - - MCFG_MACHINE_START_OVERRIDE( a400_state, a400 ) - - m_screen->set_refresh_hz(antic_device::FRAME_RATE_60HZ); - m_screen->set_size(antic_device::HWIDTH * 8, antic_device::TOTAL_LINES_60HZ); - - m_gtia->set_region(GTIA_NTSC); -} - -// memory map A400 + PAL screen -void a400_state::a400pal(machine_config &config) -{ - atari_common(config); - - m_maincpu->set_addrmap(AS_PROGRAM, &a400_state::a400_mem); - TIMER(config, "scantimer").configure_scanline(FUNC(a400_state::a400_interrupt), "screen", 0, 1); - - MCFG_MACHINE_START_OVERRIDE( a400_state, a400 ) - - m_screen->set_refresh_hz(antic_device::FRAME_RATE_50HZ); - m_screen->set_size(antic_device::HWIDTH * 8, antic_device::TOTAL_LINES_50HZ); - - m_gtia->set_region(GTIA_PAL); -} - -// memory map A800 + NTSC screen + Right cartslot -void a400_state::a800(machine_config &config) -{ - atari_common(config); - - m_maincpu->set_addrmap(AS_PROGRAM, &a400_state::a400_mem); - TIMER(config, "scantimer").configure_scanline(FUNC(a400_state::a400_interrupt), "screen", 0, 1); - - MCFG_MACHINE_START_OVERRIDE( a400_state, a800 ) - - m_screen->set_refresh_hz(antic_device::FRAME_RATE_60HZ); - m_screen->set_size(antic_device::HWIDTH * 8, antic_device::TOTAL_LINES_60HZ); - - m_gtia->set_region(GTIA_NTSC); - - A800_CART_SLOT(config, "cartright", a800_right, nullptr); -} - - -// memory map A800 + PAL screen + Right cartslot -void a400_state::a800pal(machine_config &config) -{ - atari_common(config); - - m_maincpu->set_addrmap(AS_PROGRAM, &a400_state::a400_mem); - TIMER(config, "scantimer").configure_scanline(FUNC(a400_state::a400_interrupt), "screen", 0, 1); - - MCFG_MACHINE_START_OVERRIDE( a400_state, a800 ) - - m_screen->set_refresh_hz(antic_device::FRAME_RATE_50HZ); - m_screen->set_size(antic_device::HWIDTH * 8, antic_device::TOTAL_LINES_50HZ); - - m_gtia->set_region(GTIA_PAL); - - A800_CART_SLOT(config, "cartright", a800_right, nullptr); -} - - -// memory map A600XL (same as 800XL but less RAM) + NTSC screen + MMU via PIA portB -void a400_state::a600xl(machine_config &config) -{ - atari_common(config); - - m_maincpu->set_addrmap(AS_PROGRAM, &a400_state::a600xl_mem); - TIMER(config, "scantimer").configure_scanline(FUNC(a400_state::a800xl_interrupt), "screen", 0, 1); - - m_pia->writepb_handler().set(FUNC(a400_state::a600xl_pia_pb_w)); - - MCFG_MACHINE_START_OVERRIDE( a400_state, a800xl ) - - m_screen->set_refresh_hz(antic_device::FRAME_RATE_60HZ); - m_screen->set_size(antic_device::HWIDTH * 8, antic_device::TOTAL_LINES_60HZ); - - m_gtia->set_region(GTIA_NTSC); - - m_ram->set_default_size("16K"); -} - -// memory map A800XL + NTSC screen + MMU via PIA portB -void a400_state::a800xl(machine_config &config) -{ - atari_common(config); - - m_maincpu->set_addrmap(AS_PROGRAM, &a400_state::a800xl_mem); - TIMER(config, "scantimer").configure_scanline(FUNC(a400_state::a800xl_interrupt), "screen", 0, 1); - - m_pia->writepb_handler().set(FUNC(a400_state::a800xl_pia_pb_w)); - - MCFG_MACHINE_START_OVERRIDE( a400_state, a800xl ) - - m_ram->set_default_size("64K"); - - m_screen->set_refresh_hz(antic_device::FRAME_RATE_60HZ); - m_screen->set_size(antic_device::HWIDTH * 8, antic_device::TOTAL_LINES_60HZ); - - m_gtia->set_region(GTIA_NTSC); -} - - -// memory map A800XL + PAL screen + MMU via PIA portB -void a400_state::a800xlpal(machine_config &config) -{ - a800xl(config); - - m_maincpu->set_clock(1773000); - - m_screen->set_refresh_hz(antic_device::FRAME_RATE_50HZ); - m_screen->set_size(antic_device::HWIDTH * 8, antic_device::TOTAL_LINES_50HZ); - - m_gtia->set_region(GTIA_PAL); - - m_pokey->set_clock(1773000); -} - - -// memory map A1200XL+ MMU via PIA portB -void a400_state::a1200xl(machine_config &config) -{ - a800xl(config); - - m_maincpu->set_addrmap(AS_PROGRAM, &a400_state::a1200xl_mem); - m_pia->writepb_handler().set(FUNC(a400_state::a800xl_pia_pb_w)); -} - -// memory map A130XE (extra RAM only partially emulated) -void a400_state::a130xe(machine_config &config) -{ - a800xl(config); - - m_maincpu->set_addrmap(AS_PROGRAM, &a400_state::a130xe_mem); - m_ram->set_default_size("128K"); -} - -// memory map XEGS, only XEGS bankswitch supported -void a400_state::xegs(machine_config &config) -{ - a800xl(config); - - m_maincpu->set_addrmap(AS_PROGRAM, &a400_state::xegs_mem); - - config.device_remove("cartleft"); - config.device_remove("cart_list"); - - XEGS_CART_SLOT(config, "cartleft", xegs_carts, nullptr); -} - -// memory map A5200, different ports, less RAM -void a400_state::a5200(machine_config &config) -{ - atari_common_nodac(config); - - m_maincpu->set_addrmap(AS_PROGRAM, &a400_state::a5200_mem); - TIMER(config, "scantimer").configure_scanline(FUNC(a400_state::a5200_interrupt), "screen", 0, 1); - - // FIXME: should there be anything connected where other system have the fdc? - m_pokey->serin_r().set_constant(0); - m_pokey->serout_w().set_nop(); - m_pokey->set_keyboard_callback(FUNC(a400_state::a5200_keypads)); - m_pokey->set_interrupt_callback(FUNC(a400_state::interrupt_cb)); - m_pokey->add_route(ALL_OUTPUTS, "speaker", 1.0); - - ATARI_GTIA(config, m_gtia, 0); - m_gtia->set_region(GTIA_NTSC); - - ATARI_ANTIC(config, m_antic, 0); - m_antic->set_gtia_tag(m_gtia); - - m_pia->readpa_handler().set_constant(0); // FIXME: is there anything connected here - m_pia->readpb_handler().set_constant(0); // FIXME: is there anything connected here - m_pia->cb2_handler().set_nop(); // FIXME: is there anything connected here - - MCFG_MACHINE_START_OVERRIDE( a400_state, a5200 ) - - m_screen->set_refresh_hz(antic_device::FRAME_RATE_60HZ); - m_screen->set_size(antic_device::HWIDTH * 8, antic_device::TOTAL_LINES_60HZ); - - A5200_CART_SLOT(config, "cartleft", a5200_carts, nullptr); - - /* Software lists */ - SOFTWARE_LIST(config, "cart_list").set_original("a5200"); - - /* internal ram */ - RAM(config, m_ram).set_default_size("16K"); -} - - -/************************************************************** - * - * ROM loading - * - **************************************************************/ - -ROM_START(a400) - ROM_REGION(0x10000, "maincpu", 0) - ROM_LOAD( "co12399b.rom", 0xd800, 0x0800, CRC(6a5d766e) SHA1(01a6044f7a81d409c938e7dfde0a1af5832229d2) ) - ROM_SYSTEM_BIOS(0, "default", "OS Rev. B") - ROMX_LOAD( "co12499b.rom", 0xe000, 0x1000, BAD_DUMP CRC(d818f3e8) SHA1(bcdec2188f6a6a5bfc1df4e383bd828d34b5c4ac), ROM_BIOS(0) ) // CRC and label waiting for confirmation - ROMX_LOAD( "co14599b.rom", 0xf000, 0x1000, BAD_DUMP CRC(c1690a9b) SHA1(c5248e8565574fd39ae1c3f4f356aa4cac07df95), ROM_BIOS(0) ) // CRC and label waiting for confirmation - ROM_SYSTEM_BIOS(1, "reva", "OS Rev. A") - ROMX_LOAD( "co12499a.rom", 0xe000, 0x1000, BAD_DUMP CRC(29f64e17) SHA1(abf7ec488c6b600f1b7f30bdc7f8a2bf6a727675), ROM_BIOS(1) ) // CRC and label waiting for confirmation - ROMX_LOAD( "co14599a.rom", 0xf000, 0x1000, BAD_DUMP CRC(bc533f0c) SHA1(e217148495fa747fe5488132d8d22533e68c7e58), ROM_BIOS(1) ) // CRC and label waiting for confirmation -ROM_END - -ROM_START(a400pal) - ROM_REGION(0x10000, "maincpu", 0) - ROM_LOAD( "co12399b.rom", 0xd800, 0x0800, CRC(6a5d766e) SHA1(01a6044f7a81d409c938e7dfde0a1af5832229d2) ) - ROM_LOAD( "co15199.rom", 0xe000, 0x1000, BAD_DUMP CRC(8e547f56) SHA1(1bd746ea798b723bfb18495a7facca113183d713) ) // Rev. A - CRC and label waiting for confirmation - ROM_LOAD( "co15299.rom", 0xf000, 0x1000, BAD_DUMP CRC(be55b413) SHA1(d88afae49b08e75943d0258cb580e5d34756414a) ) // Rev. A - CRC and label waiting for confirmation -ROM_END - -ROM_START(a800) - ROM_REGION(0x10000, "maincpu", 0) - ROM_LOAD( "co12399b.rom", 0xd800, 0x0800, CRC(6a5d766e) SHA1(01a6044f7a81d409c938e7dfde0a1af5832229d2) ) - ROM_SYSTEM_BIOS(0, "default", "OS Rev. B") - ROMX_LOAD( "co12499b.rom", 0xe000, 0x1000, BAD_DUMP CRC(d818f3e8) SHA1(bcdec2188f6a6a5bfc1df4e383bd828d34b5c4ac), ROM_BIOS(0) ) // CRC and label waiting for confirmation - ROMX_LOAD( "co14599b.rom", 0xf000, 0x1000, BAD_DUMP CRC(c1690a9b) SHA1(c5248e8565574fd39ae1c3f4f356aa4cac07df95), ROM_BIOS(0) ) // CRC and label waiting for confirmation - ROM_SYSTEM_BIOS(1, "reva", "OS Rev. A") - ROMX_LOAD( "co12499a.rom", 0xe000, 0x1000, BAD_DUMP CRC(29f64e17) SHA1(abf7ec488c6b600f1b7f30bdc7f8a2bf6a727675), ROM_BIOS(1) ) // CRC and label waiting for confirmation - ROMX_LOAD( "co14599a.rom", 0xf000, 0x1000, BAD_DUMP CRC(bc533f0c) SHA1(e217148495fa747fe5488132d8d22533e68c7e58), ROM_BIOS(1) ) // CRC and label waiting for confirmation -ROM_END - -ROM_START(a800pal) - ROM_REGION(0x10000, "maincpu", 0) - ROM_LOAD( "co12399b.rom", 0xd800, 0x0800, CRC(6a5d766e) SHA1(01a6044f7a81d409c938e7dfde0a1af5832229d2) ) - ROM_LOAD( "co15199.rom", 0xe000, 0x1000, BAD_DUMP CRC(8e547f56) SHA1(1bd746ea798b723bfb18495a7facca113183d713) ) // Rev. A - CRC and label waiting for confirmation - ROM_LOAD( "co15299.rom", 0xf000, 0x1000, BAD_DUMP CRC(be55b413) SHA1(d88afae49b08e75943d0258cb580e5d34756414a) ) // Rev. A - CRC and label waiting for confirmation -ROM_END - -ROM_START(a1200xl) - ROM_REGION(0x10000, "maincpu", 0) - ROM_SYSTEM_BIOS(0, "default", "OS Rev. 11") - ROMX_LOAD( "co60616b.rom", 0xc000, 0x2000, BAD_DUMP CRC(6e29ec8d) SHA1(3f9c06d6b4d261f3d5bf4354e3cff0c17b9347b9), ROM_BIOS(0) ) // CRC and label waiting for confirmation - ROMX_LOAD( "co60617b.rom", 0xe000, 0x2000, BAD_DUMP CRC(d73ce29a) SHA1(64790242d902643fe0c40dd842749f1fe461831b), ROM_BIOS(0) ) // CRC and label waiting for confirmation - ROM_SYSTEM_BIOS(1, "rev10", "OS Rev. 10") - ROMX_LOAD( "co60616a.rom", 0xc000, 0x2000, BAD_DUMP CRC(0391386b) SHA1(7c176657c88b89b8a69bf021fa8e0939efc0dff2), ROM_BIOS(1) ) // CRC and label waiting for confirmation - ROMX_LOAD( "co60617a.rom", 0xe000, 0x2000, BAD_DUMP CRC(b502f1e7) SHA1(6688db57d97fa570aef5c15cef3e5fb2688879c2), ROM_BIOS(1) ) // CRC and label waiting for confirmation -ROM_END - -ROM_START(a600xl) - ROM_REGION(0x10000, "maincpu", 0) - ROM_LOAD( "co60302a.rom", 0xa000, 0x2000, CRC(f0202fb3) SHA1(7ad88dd99ff4a6ee66f6d162074db6f8bef7a9b6) ) // Rev. B - ROM_LOAD( "co62024.rom", 0xc000, 0x4000, CRC(643bcc98) SHA1(881d030656b40bbe48f15a696b28f22c0b752ab0) ) // Rev. 1 -ROM_END - -ROM_START(a800xl) - ROM_REGION(0x10000, "maincpu", 0) - ROM_LOAD( "co60302a.rom", 0xa000, 0x2000, CRC(f0202fb3) SHA1(7ad88dd99ff4a6ee66f6d162074db6f8bef7a9b6) ) // Rev. B - ROM_LOAD( "co61598b.rom", 0xc000, 0x4000, CRC(1f9cd270) SHA1(ae4f523ba08b6fd59f3cae515a2b2410bbd98f55) ) // Rev. 2 -ROM_END - -#define rom_a800xlp rom_a800xl - -ROM_START(a65xe) - ROM_REGION(0x10000, "maincpu", 0) - ROM_LOAD( "co24947a.rom", 0xa000, 0x2000, CRC(7d684184) SHA1(3693c9cb9bf3b41bae1150f7a8264992468fc8c0) ) // Rev. C - ROM_LOAD( "co61598b.rom", 0xc000, 0x4000, CRC(1f9cd270) SHA1(ae4f523ba08b6fd59f3cae515a2b2410bbd98f55) ) // Rev. 2 -ROM_END - -ROM_START(a65xea) - ROM_REGION(0x10000, "maincpu", 0) - ROM_LOAD( "basic_ar.rom", 0xa000, 0x2000, CRC(c899f4d6) SHA1(043df191d1fe402e792266a108e147ffcda35130) ) // is this correct? or shall we use Rev. C? -// ROM_LOAD( "c101700.rom", 0xc000, 0x4000, CRC(7f9a76c8) SHA1(57eb6d87850a763f11767f53d4eaede186f831a2) ) // this was from Savetz and has wrong bits! - ROM_LOAD( "c101700.rom", 0xc000, 0x4000, CRC(45f47988) SHA1(a36b8b20f657580f172749bb0625c08706ed824c) ) // Rev. 3B ? -ROM_END - -ROM_START(a130xe) - ROM_REGION(0x10000, "maincpu", 0) - ROM_LOAD( "co24947a.rom", 0xa000, 0x2000, CRC(7d684184) SHA1(3693c9cb9bf3b41bae1150f7a8264992468fc8c0) ) // Rev. C - ROM_LOAD( "co61598b.rom", 0xc000, 0x4000, CRC(1f9cd270) SHA1(ae4f523ba08b6fd59f3cae515a2b2410bbd98f55) ) // Rev. 2 -ROM_END - -ROM_START(a800xe) - ROM_REGION(0x10000, "maincpu", 0) - ROM_LOAD( "co24947a.rom", 0xa000, 0x2000, CRC(7d684184) SHA1(3693c9cb9bf3b41bae1150f7a8264992468fc8c0) ) // Rev. C - ROM_LOAD( "c300717.rom", 0xc000, 0x4000, CRC(29f133f7) SHA1(f03b9b93000ee84abb9cf8d6367241006f172182) ) // Rev. 3 -ROM_END - -ROM_START(xegs) - ROM_REGION(0x10000, "maincpu", ROMREGION_ERASE00) - ROM_LOAD( "c101687.rom", 0x8000, 0x8000, CRC(d50260d1) SHA1(0e0625ab2473f8431640df3ac8af61925760b9b9) ) // Rev. C + Rev. 4 + Missile Command -ROM_END - - -ROM_START(a5200) - ROM_REGION(0x10000, "maincpu", ROMREGION_ERASEFF) - ROM_SYSTEM_BIOS(0, "default", "a5200") - ROMX_LOAD( "5200.rom", 0xf800, 0x0800, CRC(4248d3e3) SHA1(6ad7a1e8c9fad486fbec9498cb48bf5bc3adc530), ROM_BIOS(0) ) - ROM_SYSTEM_BIOS(1, "alt", "a5200 (alt)") - ROMX_LOAD( "5200a.rom", 0xf800, 0x0800, CRC(c2ba2613) SHA1(1d2a3f00109d75d2d79fecb565775eb95b7d04d5), ROM_BIOS(1) ) -ROM_END - - -/************************************************************** - * - * Game driver(s) - * - **************************************************************/ - -/* YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME */ -COMP( 1979, a400, 0, 0, a400, a800, a400_state, empty_init, "Atari", "Atari 400 (NTSC)", 0) -COMP( 1979, a400pal, a400, 0, a400pal, a800, a400_state, empty_init, "Atari", "Atari 400 (PAL)", 0) -COMP( 1979, a800, 0, 0, a800, a800, a400_state, empty_init, "Atari", "Atari 800 (NTSC)", 0) -COMP( 1979, a800pal, a800, 0, a800pal, a800, a400_state, empty_init, "Atari", "Atari 800 (PAL)", 0) -COMP( 1982, a1200xl, a800, 0, a1200xl, a800xl, a400_state, empty_init, "Atari", "Atari 1200XL", MACHINE_NOT_WORKING ) // 64k RAM -COMP( 1983, a600xl, a800xl, 0, a600xl, a800xl, a400_state, empty_init, "Atari", "Atari 600XL", MACHINE_IMPERFECT_GRAPHICS ) // 16k RAM -COMP( 1983, a800xl, 0, 0, a800xl, a800xl, a400_state, empty_init, "Atari", "Atari 800XL (NTSC)", MACHINE_IMPERFECT_GRAPHICS ) // 64k RAM -COMP( 1983, a800xlp, a800xl, 0, a800xlpal, a800xl, a400_state, empty_init, "Atari", "Atari 800XL (PAL)", MACHINE_IMPERFECT_GRAPHICS ) // 64k RAM -COMP( 1986, a65xe, a800xl, 0, a800xl, a800xl, a400_state, empty_init, "Atari", "Atari 65XE", MACHINE_IMPERFECT_GRAPHICS ) // 64k RAM -COMP( 1986, a65xea, a800xl, 0, a800xl, a800xl, a400_state, empty_init, "Atari", "Atari 65XE (Arabic)", MACHINE_NOT_WORKING ) -COMP( 1986, a130xe, a800xl, 0, a130xe, a800xl, a400_state, empty_init, "Atari", "Atari 130XE", MACHINE_NOT_WORKING ) // 128k RAM -COMP( 1986, a800xe, a800xl, 0, a800xl, a800xl, a400_state, empty_init, "Atari", "Atari 800XE", MACHINE_IMPERFECT_GRAPHICS ) // 64k RAM -COMP( 1987, xegs, 0, 0, xegs, a800xl, a400_state, empty_init, "Atari", "Atari XE Game System", MACHINE_IMPERFECT_GRAPHICS ) // 64k RAM - -CONS( 1982, a5200, 0, 0, a5200, a5200, a400_state, empty_init, "Atari", "Atari 5200", 0) |