Mercurial > audlegacy
view Plugins/Input/console/Spc_Cpu.h @ 361:db298f2d3dd9 trunk
[svn] Detect files by content; remove quick detect.
author | chainsaw |
---|---|
date | Fri, 30 Dec 2005 17:56:32 -0800 |
parents | 252843aac42f |
children | 7c5e886205ef |
line wrap: on
line source
// Super Nintendo (SNES) SPC-700 CPU emulator // Game_Music_Emu 0.2.4. Copyright (C) 2004 Shay Green. GNU LGPL license. #ifndef SPC_CPU_H #define SPC_CPU_H #include "blargg_common.h" typedef unsigned spc_addr_t; typedef long spc_time_t; class Snes_Spc; class Spc_Cpu { typedef BOOST::uint8_t uint8_t; uint8_t* const ram; spc_time_t remain_; Snes_Spc& emu; public: // Keeps pointer to ram and spc Spc_Cpu( uint8_t ram [0x10000], Snes_Spc* spc ); // SPC-700 registers. *Not* kept updated during a call to run(). struct registers_t { unsigned short pc; uint8_t a; uint8_t x; uint8_t y; uint8_t status; uint8_t sp; } r; // Run CPU for at least 'count' cycles. Return the number of cycles remaining // when emulation stopped (negative if extra cycles were emulated). Emulation // stops when there are no more remaining cycles or an unhandled instruction // is encountered (STOP, SLEEP, and any others not yet implemented). In the // latter case, the return value is greater than zero. spc_time_t run( spc_time_t count ); // Number of clock cycles remaining for current run() call spc_time_t remain() const; // Access memory as the emulated CPU does int read ( spc_addr_t ); void write( spc_addr_t, int ); private: // noncopyable Spc_Cpu( const Spc_Cpu& ); Spc_Cpu& operator = ( const Spc_Cpu& ); unsigned mem_bit( spc_addr_t ); }; inline spc_time_t Spc_Cpu::remain() const { return remain_; } #endif