// NES APU state snapshot support // Nes_Snd_Emu 0.1.7 #ifndef APU_STATE_H #define APU_STATE_H #include "blargg_common.h" struct apu_state_t { typedef BOOST::uint8_t byte; typedef byte env_t [3]; /*struct env_t { byte delay; byte env; byte written; };*/ struct apu_t { byte w40xx [0x14]; // $4000-$4013 byte w4015; // enables byte w4017; // mode BOOST::uint16_t frame_delay; byte frame_step; byte irq_flag; } apu; struct square_t { BOOST::uint16_t delay; env_t env; byte length_counter; byte phase; byte swp_delay; byte swp_reset; byte unused2 [1]; }; square_t square1; square_t square2; struct triangle_t { BOOST::uint16_t delay; byte length_counter; byte phase; byte linear_counter; byte linear_mode; } triangle; struct noise_t { BOOST::uint16_t delay; env_t env; byte length_counter; BOOST::uint16_t shift_reg; } noise; struct dmc_t { BOOST::uint16_t delay; BOOST::uint16_t remain; BOOST::uint16_t addr; byte buf; byte bits_remain; byte bits; byte buf_full; byte silence; byte irq_flag; } dmc; //byte length_counters [4]; enum { tag = 0x41505552 }; // 'APUR' void swap(); }; BOOST_STATIC_ASSERT( sizeof (apu_state_t) == 72 ); #endif