annotate Plugins/Input/console/Spc_Cpu.h @ 145:8794a4781a15 trunk

[svn] looping stuff
author nenolod
date Thu, 10 Nov 2005 17:51:04 -0800
parents 252843aac42f
children 7c5e886205ef
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
90
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
1
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
2 // Super Nintendo (SNES) SPC-700 CPU emulator
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
3
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
4 // Game_Music_Emu 0.2.4. Copyright (C) 2004 Shay Green. GNU LGPL license.
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
5
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
6 #ifndef SPC_CPU_H
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
7 #define SPC_CPU_H
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
8
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
9 #include "blargg_common.h"
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
10
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
11 typedef unsigned spc_addr_t;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
12 typedef long spc_time_t;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
13
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
14 class Snes_Spc;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
15
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
16 class Spc_Cpu {
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
17 typedef BOOST::uint8_t uint8_t;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
18 uint8_t* const ram;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
19 spc_time_t remain_;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
20 Snes_Spc& emu;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
21 public:
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
22 // Keeps pointer to ram and spc
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
23 Spc_Cpu( uint8_t ram [0x10000], Snes_Spc* spc );
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
24
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
25 // SPC-700 registers. *Not* kept updated during a call to run().
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
26 struct registers_t {
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
27 unsigned short pc;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
28 uint8_t a;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
29 uint8_t x;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
30 uint8_t y;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
31 uint8_t status;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
32 uint8_t sp;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
33 } r;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
34
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
35 // Run CPU for at least 'count' cycles. Return the number of cycles remaining
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
36 // when emulation stopped (negative if extra cycles were emulated). Emulation
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
37 // stops when there are no more remaining cycles or an unhandled instruction
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
38 // is encountered (STOP, SLEEP, and any others not yet implemented). In the
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
39 // latter case, the return value is greater than zero.
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
40 spc_time_t run( spc_time_t count );
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
41
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
42 // Number of clock cycles remaining for current run() call
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
43 spc_time_t remain() const;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
44
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
45 // Access memory as the emulated CPU does
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
46 int read ( spc_addr_t );
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
47 void write( spc_addr_t, int );
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
48
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
49 private:
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
50 // noncopyable
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
51 Spc_Cpu( const Spc_Cpu& );
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
52 Spc_Cpu& operator = ( const Spc_Cpu& );
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
53 unsigned mem_bit( spc_addr_t );
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
54 };
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
55
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
56 inline spc_time_t Spc_Cpu::remain() const {
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
57 return remain_;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
58 }
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
59
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
60 #endif
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
61