// license:BSD-3-Clause // copyright-holders:Aaron Giles /************************************************************************* Atari System 1 hardware *************************************************************************/ #include "machine/74259.h" #include "machine/adc0808.h" #include "machine/atarigen.h" #include "machine/input_merger.h" #include "machine/timer.h" #include "sound/tms5220.h" #include "sound/ym2151.h" #include "video/atarimo.h" class atarisy1_state : public atarigen_state { public: atarisy1_state(const machine_config &mconfig, device_type type, const char *tag) : atarigen_state(mconfig, type, tag), m_audiocpu(*this, "audiocpu"), m_soundcomm(*this, "soundcomm"), m_bankselect(*this, "bankselect"), m_mob(*this, "mob"), m_adc(*this, "adc"), m_ajsint(*this, "ajsint"), m_playfield_tilemap(*this, "playfield"), m_alpha_tilemap(*this, "alpha"), m_yscroll_reset_timer(*this, "yreset_timer"), m_scanline_timer(*this, "scan_timer"), m_int3off_timer(*this, "int3off_timer"), m_tms(*this, "tms"), m_outlatch(*this, "outlatch") { } required_device m_audiocpu; required_device m_soundcomm; required_shared_ptr m_bankselect; required_device m_mob; uint8_t m_joystick_type; uint8_t m_trackball_type; optional_device m_adc; optional_device m_ajsint; uint8_t m_joystick_int; /* playfield parameters */ required_device m_playfield_tilemap; required_device m_alpha_tilemap; uint16_t m_playfield_lookup[256]; uint8_t m_playfield_tile_bank; uint16_t m_playfield_priority_pens; required_device m_yscroll_reset_timer; /* INT3 tracking */ int m_next_timer_scanline; required_device m_scanline_timer; required_device m_int3off_timer; /* speech */ required_device m_tms; required_device m_outlatch; /* graphics bank tracking */ uint8_t m_bank_gfx[3][8]; uint8_t m_bank_color_shift[MAX_GFX_ELEMENTS]; uint8_t m_cur[2][2]; virtual void update_interrupts() override; template DECLARE_READ8_MEMBER(digital_joystick_r); DECLARE_READ8_MEMBER(adc_r); DECLARE_WRITE8_MEMBER(adc_w); DECLARE_READ16_MEMBER(trakball_r); DECLARE_READ8_MEMBER(switch_6502_r); DECLARE_WRITE_LINE_MEMBER(coin_counter_right_w); DECLARE_WRITE_LINE_MEMBER(coin_counter_left_w); DECLARE_WRITE8_MEMBER(via_pa_w); DECLARE_READ8_MEMBER(via_pa_r); DECLARE_WRITE8_MEMBER(via_pb_w); DECLARE_READ8_MEMBER(via_pb_r); void init_roadblst(); void init_peterpak(); void init_marble(); void init_roadrunn(); void init_indytemp(); TILE_GET_INFO_MEMBER(get_alpha_tile_info); TILE_GET_INFO_MEMBER(get_playfield_tile_info); DECLARE_MACHINE_START(atarisy1); DECLARE_MACHINE_RESET(atarisy1); DECLARE_VIDEO_START(atarisy1); uint32_t screen_update_atarisy1(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); DECLARE_WRITE_LINE_MEMBER(joystick_int); TIMER_DEVICE_CALLBACK_MEMBER(atarisy1_reset_yscroll_callback); TIMER_DEVICE_CALLBACK_MEMBER(atarisy1_int3off_callback); TIMER_DEVICE_CALLBACK_MEMBER(atarisy1_int3_callback); void update_timers(int scanline); void decode_gfx(uint16_t *pflookup, uint16_t *molookup); int get_bank(uint8_t prom1, uint8_t prom2, int bpp); DECLARE_READ16_MEMBER( atarisy1_int3state_r ); DECLARE_WRITE16_MEMBER( atarisy1_spriteram_w ); DECLARE_WRITE16_MEMBER( atarisy1_bankselect_w ); DECLARE_WRITE16_MEMBER( atarisy1_xscroll_w ); DECLARE_WRITE16_MEMBER( atarisy1_yscroll_w ); DECLARE_WRITE16_MEMBER( atarisy1_priority_w ); static const atari_motion_objects_config s_mob_config; void atarisy1(machine_config &config); void indytemp(machine_config &config); void roadb110(machine_config &config); void peterpak(machine_config &config); void roadrunn(machine_config &config); void roadb109(machine_config &config); void marble(machine_config &config); void main_map(address_map &map); void sound_map(address_map &map); };