Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependents: GameduinoTest SimpleGameduinoTest RobotRic
Gameduino.h@3:a1c856358996, 2012-11-18 (annotated)
- Committer:
- RichardE
- Date:
- Sun Nov 18 15:02:56 2012 +0000
- Revision:
- 3:a1c856358996
- Parent:
- 1:8ff91fe70bfc
- Child:
- 4:f6a33c5f0f7f
Added HideAllSprites method.
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| RichardE | 0:d199d2362859 | 1 | /* |
| RichardE | 0:d199d2362859 | 2 | * SOURCE FILE : Gameduino.h |
| RichardE | 0:d199d2362859 | 3 | * |
| RichardE | 0:d199d2362859 | 4 | * Definition of class Gameduino. |
| RichardE | 0:d199d2362859 | 5 | * Each instance of this class allows communication with |
| RichardE | 0:d199d2362859 | 6 | * a Gameduino shield over an SPI communications link. |
| RichardE | 0:d199d2362859 | 7 | * |
| RichardE | 0:d199d2362859 | 8 | */ |
| RichardE | 0:d199d2362859 | 9 | |
| RichardE | 0:d199d2362859 | 10 | #ifndef GameduinoDefined |
| RichardE | 0:d199d2362859 | 11 | |
| RichardE | 0:d199d2362859 | 12 | #define GameduinoDefined |
| RichardE | 0:d199d2362859 | 13 | |
| RichardE | 0:d199d2362859 | 14 | #include "mbed.h" // mbed library |
| RichardE | 0:d199d2362859 | 15 | #include "Types.h" // integer types |
| RichardE | 0:d199d2362859 | 16 | |
| RichardE | 0:d199d2362859 | 17 | // These #defines allow you to use data arrays from an Arduino background that make |
| RichardE | 0:d199d2362859 | 18 | // use of program memory. |
| RichardE | 0:d199d2362859 | 19 | #define PROGMEM const |
| RichardE | 0:d199d2362859 | 20 | #define prog_uchar UInt8 |
| RichardE | 0:d199d2362859 | 21 | |
| RichardE | 0:d199d2362859 | 22 | /** Gameduino class to support SPI communications with the Gameduino game adapter |
| RichardE | 0:d199d2362859 | 23 | * |
| RichardE | 0:d199d2362859 | 24 | * Example: |
| RichardE | 0:d199d2362859 | 25 | * @code |
| RichardE | 0:d199d2362859 | 26 | * #include "mbed.h" |
| RichardE | 0:d199d2362859 | 27 | * #include "Gameduino.h" |
| RichardE | 0:d199d2362859 | 28 | * |
| RichardE | 0:d199d2362859 | 29 | * int main() { |
| RichardE | 0:d199d2362859 | 30 | * // Make a digital output for use with Gameduino. |
| RichardE | 0:d199d2362859 | 31 | * DigitalOut cs( p8 ); |
| RichardE | 0:d199d2362859 | 32 | * // Initialise an SPI link for communications with Gameduino. |
| RichardE | 0:d199d2362859 | 33 | * // Use pin 5 for MOSI. |
| RichardE | 0:d199d2362859 | 34 | * // Use pin 6 for MISO. |
| RichardE | 0:d199d2362859 | 35 | * // Use pin 7 for SCK. |
| RichardE | 0:d199d2362859 | 36 | * SPI spi( p5, p6, p7 ); |
| RichardE | 0:d199d2362859 | 37 | * // 8MHz clock should be OK. |
| RichardE | 0:d199d2362859 | 38 | * spi.frequency( 8000000 ); |
| RichardE | 0:d199d2362859 | 39 | * // Set SPI format to use. |
| RichardE | 0:d199d2362859 | 40 | * // Use 8 bits per SPI frame. |
| RichardE | 0:d199d2362859 | 41 | * // Use SPI mode 0. |
| RichardE | 0:d199d2362859 | 42 | * spi.format( 8, 0 ); |
| RichardE | 0:d199d2362859 | 43 | * // Make a Gameduino and pass SPI link and digital output for chip select. |
| RichardE | 0:d199d2362859 | 44 | * Gameduino gd( &spi, &cs ); |
| RichardE | 0:d199d2362859 | 45 | * // Reset the Gameduino. |
| RichardE | 0:d199d2362859 | 46 | * gd.begin(); |
| RichardE | 0:d199d2362859 | 47 | * // Lets have a default ASCII character set. |
| RichardE | 0:d199d2362859 | 48 | * gd.ascii(); |
| RichardE | 0:d199d2362859 | 49 | * // Write something to character memory. |
| RichardE | 0:d199d2362859 | 50 | * gd.__wstart( Gameduino::RAM_PIC ); |
| RichardE | 0:d199d2362859 | 51 | * for( UInt8 c = 'A'; c <= 'Z'; ++c ) { |
| RichardE | 0:d199d2362859 | 52 | * gd.__tr8( c ); |
| RichardE | 0:d199d2362859 | 53 | * } |
| RichardE | 0:d199d2362859 | 54 | * gd.__end(); |
| RichardE | 0:d199d2362859 | 55 | * // Test copy method. |
| RichardE | 0:d199d2362859 | 56 | * UInt8 copyData[] = "HELLO"; |
| RichardE | 0:d199d2362859 | 57 | * gd.copy( Gameduino::RAM_PIC + 64, copyData, 5 ); |
| RichardE | 0:d199d2362859 | 58 | * // Test putstr method. |
| RichardE | 0:d199d2362859 | 59 | * gd.putstr( 3, 10, "Ambidextrous!" ); |
| RichardE | 0:d199d2362859 | 60 | * // Finished with Gameduino. |
| RichardE | 0:d199d2362859 | 61 | * gd.end(); |
| RichardE | 0:d199d2362859 | 62 | * } |
| RichardE | 0:d199d2362859 | 63 | * @endcode |
| RichardE | 0:d199d2362859 | 64 | */ |
| RichardE | 0:d199d2362859 | 65 | class Gameduino { |
| RichardE | 0:d199d2362859 | 66 | |
| RichardE | 0:d199d2362859 | 67 | public : |
| RichardE | 0:d199d2362859 | 68 | |
| RichardE | 0:d199d2362859 | 69 | // Registers on Gameduino. |
| RichardE | 0:d199d2362859 | 70 | enum Reg { |
| RichardE | 0:d199d2362859 | 71 | RAM_PIC = 0x0000, // Screen Picture, 64 x 64 = 4096 bytes |
| RichardE | 0:d199d2362859 | 72 | RAM_CHR = 0x1000, // Screen Characters, 256 x 16 = 4096 bytes |
| RichardE | 0:d199d2362859 | 73 | RAM_PAL = 0x2000, // Screen Character Palette, 256 x 8 = 2048 bytes |
| RichardE | 0:d199d2362859 | 74 | IDENT = 0x2800, |
| RichardE | 0:d199d2362859 | 75 | REV = 0x2801, |
| RichardE | 0:d199d2362859 | 76 | FRAME = 0x2802, |
| RichardE | 0:d199d2362859 | 77 | VBLANK = 0x2803, |
| RichardE | 0:d199d2362859 | 78 | SCROLL_X = 0x2804, |
| RichardE | 0:d199d2362859 | 79 | SCROLL_Y = 0x2806, |
| RichardE | 0:d199d2362859 | 80 | JK_MODE = 0x2808, |
| RichardE | 0:d199d2362859 | 81 | J1_RESET = 0x2809, |
| RichardE | 0:d199d2362859 | 82 | SPR_DISABLE = 0x280a, |
| RichardE | 0:d199d2362859 | 83 | SPR_PAGE = 0x280b, |
| RichardE | 0:d199d2362859 | 84 | IOMODE = 0x280c, |
| RichardE | 0:d199d2362859 | 85 | BG_COLOR = 0x280e, |
| RichardE | 0:d199d2362859 | 86 | SAMPLE_L = 0x2810, |
| RichardE | 0:d199d2362859 | 87 | SAMPLE_R = 0x2812, |
| RichardE | 0:d199d2362859 | 88 | MODULATOR = 0x2814, |
| RichardE | 0:d199d2362859 | 89 | VIDEO_MODE = 0x2815, |
| RichardE | 0:d199d2362859 | 90 | SCREENSHOT_Y = 0x281e, |
| RichardE | 0:d199d2362859 | 91 | PALETTE16A = 0x2840, // 16-color palette RAM A, 32 bytes |
| RichardE | 0:d199d2362859 | 92 | PALETTE16B = 0x2860, // 16-color palette RAM B, 32 bytes |
| RichardE | 0:d199d2362859 | 93 | PALETTE4A = 0x2880, // 4-color palette RAM A, 8 bytes |
| RichardE | 0:d199d2362859 | 94 | PALETTE4B = 0x2888, // 4-color palette RAM A, 8 bytes |
| RichardE | 0:d199d2362859 | 95 | COMM = 0x2890, // Communication buffer |
| RichardE | 0:d199d2362859 | 96 | COLLISION = 0x2900, // Collision detection RAM, 256 bytes |
| RichardE | 0:d199d2362859 | 97 | VOICES = 0x2a00, // Voice controls |
| RichardE | 0:d199d2362859 | 98 | J1_CODE = 0x2b00, // J1 coprocessor microcode RAM |
| RichardE | 0:d199d2362859 | 99 | SCREENSHOT = 0x2c00, // screenshot line RAM |
| RichardE | 0:d199d2362859 | 100 | RAM_SPR = 0x3000, // Sprite Control, 512 x 4 = 2048 bytes |
| RichardE | 0:d199d2362859 | 101 | RAM_SPRPAL = 0x3800, // Sprite Palettes, 4 x 256 = 2048 bytes |
| RichardE | 0:d199d2362859 | 102 | RAM_SPRIMG = 0x4000, // Sprite Image, 64 x 256 = 16384 bytes |
| RichardE | 0:d199d2362859 | 103 | }; |
| RichardE | 0:d199d2362859 | 104 | |
| RichardE | 0:d199d2362859 | 105 | // Modes of operation. |
| RichardE | 0:d199d2362859 | 106 | enum Mode { |
| RichardE | 0:d199d2362859 | 107 | MODE_800x600_72 = 0, |
| RichardE | 0:d199d2362859 | 108 | MODE_800x600_60 = 1, |
| RichardE | 0:d199d2362859 | 109 | }; |
| RichardE | 0:d199d2362859 | 110 | |
| RichardE | 0:d199d2362859 | 111 | // Sprite rotations. |
| RichardE | 0:d199d2362859 | 112 | enum Rotation { |
| RichardE | 0:d199d2362859 | 113 | None = 0, |
| RichardE | 0:d199d2362859 | 114 | SwapXY = 1, |
| RichardE | 0:d199d2362859 | 115 | FlipX = 2, |
| RichardE | 0:d199d2362859 | 116 | FlipXSwapXY = 3, |
| RichardE | 0:d199d2362859 | 117 | FlipY = 4, |
| RichardE | 0:d199d2362859 | 118 | FlipYSwapXY = 5, |
| RichardE | 0:d199d2362859 | 119 | FlipYFlipX = 6, |
| RichardE | 0:d199d2362859 | 120 | FlipYFlipXSwapXY = 7, |
| RichardE | 0:d199d2362859 | 121 | }; |
| RichardE | 0:d199d2362859 | 122 | |
| RichardE | 0:d199d2362859 | 123 | // Sound waveforms used with voice method. |
| RichardE | 0:d199d2362859 | 124 | enum WaveForm { |
| RichardE | 0:d199d2362859 | 125 | SineWave, |
| RichardE | 0:d199d2362859 | 126 | WhiteNoise, |
| RichardE | 0:d199d2362859 | 127 | }; |
| RichardE | 0:d199d2362859 | 128 | |
| RichardE | 0:d199d2362859 | 129 | // Other constants. |
| RichardE | 0:d199d2362859 | 130 | enum { |
| RichardE | 0:d199d2362859 | 131 | TRANSPARENT = ( 1 << 15 ), |
| RichardE | 0:d199d2362859 | 132 | }; |
| RichardE | 0:d199d2362859 | 133 | |
| RichardE | 0:d199d2362859 | 134 | // Structure used with plots method. |
| RichardE | 0:d199d2362859 | 135 | struct sprplot { |
| RichardE | 0:d199d2362859 | 136 | Int8 x, y; // offsets from origin |
| RichardE | 0:d199d2362859 | 137 | UInt8 image, palette; // sprite image number and palette information |
| RichardE | 0:d199d2362859 | 138 | }; |
| RichardE | 0:d199d2362859 | 139 | |
| RichardE | 0:d199d2362859 | 140 | /** Constructor. |
| RichardE | 0:d199d2362859 | 141 | * @param spi Pointer to SPI datalink to use for comms. |
| RichardE | 0:d199d2362859 | 142 | * @param cs Pointer to digital output used Gameduino as chip select. |
| RichardE | 0:d199d2362859 | 143 | */ |
| RichardE | 0:d199d2362859 | 144 | Gameduino( SPI *spi, DigitalOut *cs ); |
| RichardE | 0:d199d2362859 | 145 | |
| RichardE | 0:d199d2362859 | 146 | /** Destructor. |
| RichardE | 0:d199d2362859 | 147 | */ |
| RichardE | 0:d199d2362859 | 148 | virtual ~Gameduino(); |
| RichardE | 0:d199d2362859 | 149 | |
| RichardE | 0:d199d2362859 | 150 | /** Initialise connection to adapter and reset things. |
| RichardE | 0:d199d2362859 | 151 | */ |
| RichardE | 0:d199d2362859 | 152 | void begin( void ); |
| RichardE | 0:d199d2362859 | 153 | |
| RichardE | 0:d199d2362859 | 154 | /** Close down connection. |
| RichardE | 0:d199d2362859 | 155 | */ |
| RichardE | 0:d199d2362859 | 156 | void end( void ) { |
| RichardE | 0:d199d2362859 | 157 | // Can't think of anything to do. |
| RichardE | 0:d199d2362859 | 158 | } |
| RichardE | 0:d199d2362859 | 159 | |
| RichardE | 1:8ff91fe70bfc | 160 | /** Clear the screen (character memory). |
| RichardE | 1:8ff91fe70bfc | 161 | * @param code Character to use to clear screen. |
| RichardE | 1:8ff91fe70bfc | 162 | */ |
| RichardE | 1:8ff91fe70bfc | 163 | void ClearScreen( UInt8 code ) { |
| RichardE | 1:8ff91fe70bfc | 164 | fill( RAM_PIC, code, 64 * 64 ); |
| RichardE | 1:8ff91fe70bfc | 165 | } |
| RichardE | 1:8ff91fe70bfc | 166 | |
| RichardE | 0:d199d2362859 | 167 | /** Set default ASCII character set and palette. |
| RichardE | 0:d199d2362859 | 168 | */ |
| RichardE | 0:d199d2362859 | 169 | void ascii( void ); |
| RichardE | 0:d199d2362859 | 170 | |
| RichardE | 0:d199d2362859 | 171 | /** Start an SPI transaction. |
| RichardE | 0:d199d2362859 | 172 | * |
| RichardE | 0:d199d2362859 | 173 | * @param address Address to read or write to. Bit 15 must be set for a write. |
| RichardE | 0:d199d2362859 | 174 | */ |
| RichardE | 0:d199d2362859 | 175 | void __start( UInt16 address ); |
| RichardE | 0:d199d2362859 | 176 | |
| RichardE | 0:d199d2362859 | 177 | /** Start an SPI write transaction. |
| RichardE | 0:d199d2362859 | 178 | * |
| RichardE | 0:d199d2362859 | 179 | * @param address Address to write to. |
| RichardE | 0:d199d2362859 | 180 | */ |
| RichardE | 0:d199d2362859 | 181 | void __wstart( UInt16 address ); |
| RichardE | 0:d199d2362859 | 182 | |
| RichardE | 0:d199d2362859 | 183 | /** Start a sprite transaction. |
| RichardE | 0:d199d2362859 | 184 | * Use this before calling xhide, xsprite or TransferSprite. |
| RichardE | 0:d199d2362859 | 185 | * @param sprnum Sprite number to start at. |
| RichardE | 0:d199d2362859 | 186 | */ |
| RichardE | 0:d199d2362859 | 187 | void __wstartspr( UInt8 sprnum ); |
| RichardE | 0:d199d2362859 | 188 | |
| RichardE | 0:d199d2362859 | 189 | /** Transfer byte via SPI. |
| RichardE | 0:d199d2362859 | 190 | * Use only after a call to __start or __wstart. |
| RichardE | 0:d199d2362859 | 191 | * @param data Data to send. |
| RichardE | 0:d199d2362859 | 192 | */ |
| RichardE | 0:d199d2362859 | 193 | UInt8 __tr8( UInt8 data ); |
| RichardE | 0:d199d2362859 | 194 | |
| RichardE | 0:d199d2362859 | 195 | /** Transfer 16 bit word via SPI. |
| RichardE | 0:d199d2362859 | 196 | * Use only after a call to __start or __wstart. |
| RichardE | 0:d199d2362859 | 197 | * @param data Data to send. |
| RichardE | 0:d199d2362859 | 198 | */ |
| RichardE | 0:d199d2362859 | 199 | UInt8 __tr16( UInt16 data ); |
| RichardE | 0:d199d2362859 | 200 | |
| RichardE | 0:d199d2362859 | 201 | /** End an SPI transaction. |
| RichardE | 0:d199d2362859 | 202 | */ |
| RichardE | 0:d199d2362859 | 203 | void __end( void ); |
| RichardE | 0:d199d2362859 | 204 | |
| RichardE | 0:d199d2362859 | 205 | /** Read a byte. |
| RichardE | 0:d199d2362859 | 206 | * @param address Address in Gameduino memory to read from. |
| RichardE | 0:d199d2362859 | 207 | * @param returns Byte at that address. |
| RichardE | 0:d199d2362859 | 208 | */ |
| RichardE | 0:d199d2362859 | 209 | UInt8 rd( UInt16 address ); |
| RichardE | 0:d199d2362859 | 210 | |
| RichardE | 0:d199d2362859 | 211 | /** Read a 16 bit word. |
| RichardE | 0:d199d2362859 | 212 | * @param address Address in Gameduino memory to read from. |
| RichardE | 0:d199d2362859 | 213 | * @param returns Word at that address. |
| RichardE | 0:d199d2362859 | 214 | */ |
| RichardE | 0:d199d2362859 | 215 | UInt16 rd16( UInt16 address ); |
| RichardE | 0:d199d2362859 | 216 | |
| RichardE | 0:d199d2362859 | 217 | /** Write a byte. |
| RichardE | 0:d199d2362859 | 218 | * @param address Address to write to. |
| RichardE | 0:d199d2362859 | 219 | * @param data Data to write. |
| RichardE | 0:d199d2362859 | 220 | */ |
| RichardE | 0:d199d2362859 | 221 | void wr( UInt16 address, UInt8 data ); |
| RichardE | 0:d199d2362859 | 222 | |
| RichardE | 0:d199d2362859 | 223 | /** Write a 16 bit word. |
| RichardE | 0:d199d2362859 | 224 | * @param address Address to write to. |
| RichardE | 0:d199d2362859 | 225 | * @param data Data to write. |
| RichardE | 0:d199d2362859 | 226 | */ |
| RichardE | 0:d199d2362859 | 227 | void wr16( UInt16 address, UInt16 data ); |
| RichardE | 0:d199d2362859 | 228 | |
| RichardE | 0:d199d2362859 | 229 | /** Fill area of Gameduino memory. |
| RichardE | 0:d199d2362859 | 230 | * @param address Address to write to. |
| RichardE | 0:d199d2362859 | 231 | * @param data Data to write to entire area. |
| RichardE | 0:d199d2362859 | 232 | * @param count Number of bytes to write. |
| RichardE | 0:d199d2362859 | 233 | */ |
| RichardE | 0:d199d2362859 | 234 | void fill( UInt16 address, UInt8 data, UInt16 count ); |
| RichardE | 0:d199d2362859 | 235 | |
| RichardE | 0:d199d2362859 | 236 | /** Copy data into Gameduino memory. |
| RichardE | 0:d199d2362859 | 237 | * @param address Address to write to. |
| RichardE | 0:d199d2362859 | 238 | * @param src Pointer to data to copy from. |
| RichardE | 0:d199d2362859 | 239 | * @param count Number of bytes to write. |
| RichardE | 0:d199d2362859 | 240 | */ |
| RichardE | 0:d199d2362859 | 241 | void copy( UInt16 address, const UInt8 *src, UInt16 count ); |
| RichardE | 0:d199d2362859 | 242 | |
| RichardE | 0:d199d2362859 | 243 | /** Hide a sprite. |
| RichardE | 0:d199d2362859 | 244 | * Use only after specifying address to write to. |
| RichardE | 0:d199d2362859 | 245 | * Basically just writes 400 twice to SPI. |
| RichardE | 0:d199d2362859 | 246 | */ |
| RichardE | 0:d199d2362859 | 247 | void xhide( void ); |
| RichardE | 0:d199d2362859 | 248 | |
| RichardE | 0:d199d2362859 | 249 | /** Send sprite information to Gameduino. |
| RichardE | 0:d199d2362859 | 250 | * Use only after specifying address to write to. |
| RichardE | 0:d199d2362859 | 251 | * @param x X coordinate. |
| RichardE | 0:d199d2362859 | 252 | * @param y Y coordinate. |
| RichardE | 0:d199d2362859 | 253 | * @param image Sprite image number. |
| RichardE | 0:d199d2362859 | 254 | * @param palette Palette selection information (use 0 for 256 colour palette). |
| RichardE | 0:d199d2362859 | 255 | * @param rot Rotation and flip setting. |
| RichardE | 0:d199d2362859 | 256 | * @param jk JK collision information. |
| RichardE | 0:d199d2362859 | 257 | */ |
| RichardE | 0:d199d2362859 | 258 | void TransferSprite( Int16 x, Int16 y, UInt8 image, UInt8 palette, Rotation rot=None, UInt8 jk=0 ); |
| RichardE | 0:d199d2362859 | 259 | |
| RichardE | 0:d199d2362859 | 260 | /** Draw a sprite at an offset from an origin taking into account rotation. |
| RichardE | 0:d199d2362859 | 261 | * Use only after specifying address to write to. |
| RichardE | 0:d199d2362859 | 262 | * @param ox Origin X coordinate. |
| RichardE | 0:d199d2362859 | 263 | * @param oy Origin Y coordinate. |
| RichardE | 0:d199d2362859 | 264 | * @param x X offset from origin. |
| RichardE | 0:d199d2362859 | 265 | * @param y Y offset from origin. |
| RichardE | 0:d199d2362859 | 266 | * @param image Sprite image number. |
| RichardE | 0:d199d2362859 | 267 | * @param palette Palette selection information (use 0 for 256 colour palette). |
| RichardE | 0:d199d2362859 | 268 | * @param rot Rotation and flip setting. |
| RichardE | 0:d199d2362859 | 269 | * @param jk JK collision information. |
| RichardE | 0:d199d2362859 | 270 | */ |
| RichardE | 0:d199d2362859 | 271 | void xsprite( Int16 ox, Int16 oy, Int8 x, Int8 y, UInt8 image, UInt8 palette, Rotation rot=None, UInt8 jk=0 ); |
| RichardE | 0:d199d2362859 | 272 | |
| RichardE | 0:d199d2362859 | 273 | /** Construct RGB value. |
| RichardE | 0:d199d2362859 | 274 | * @param r Red level. |
| RichardE | 0:d199d2362859 | 275 | * @param g Green level. |
| RichardE | 0:d199d2362859 | 276 | * @param b Blue level. |
| RichardE | 0:d199d2362859 | 277 | * @param returns RGB value. |
| RichardE | 0:d199d2362859 | 278 | */ |
| RichardE | 0:d199d2362859 | 279 | static UInt16 RGB( UInt8 r, UInt8 g, UInt8 b ); |
| RichardE | 0:d199d2362859 | 280 | |
| RichardE | 0:d199d2362859 | 281 | /** Set palette entry. |
| RichardE | 0:d199d2362859 | 282 | * @param Pallete entry. |
| RichardE | 0:d199d2362859 | 283 | * @param rgb RGB value to store. |
| RichardE | 0:d199d2362859 | 284 | */ |
| RichardE | 0:d199d2362859 | 285 | void setpal( UInt16 pal, UInt16 rgb ); |
| RichardE | 0:d199d2362859 | 286 | |
| RichardE | 0:d199d2362859 | 287 | /** Write text at given coordinates. |
| RichardE | 0:d199d2362859 | 288 | * @param x X coordinate. |
| RichardE | 0:d199d2362859 | 289 | * @param y Y coordinate. |
| RichardE | 0:d199d2362859 | 290 | * @param s pointer to zero terminated text. |
| RichardE | 0:d199d2362859 | 291 | */ |
| RichardE | 0:d199d2362859 | 292 | void putstr( UInt8 x, UInt8 y, const char *s ); |
| RichardE | 0:d199d2362859 | 293 | |
| RichardE | 0:d199d2362859 | 294 | /** Position a sprite. |
| RichardE | 0:d199d2362859 | 295 | * @param spr Sprite number. |
| RichardE | 0:d199d2362859 | 296 | * @param x X coordinate. |
| RichardE | 0:d199d2362859 | 297 | * @param y Y coordinate. |
| RichardE | 0:d199d2362859 | 298 | * @param image Sprite image number. |
| RichardE | 0:d199d2362859 | 299 | * @param palette Palette selection information (use 0 for 256 colour palette). |
| RichardE | 0:d199d2362859 | 300 | * @param rot Rotation and flip setting. |
| RichardE | 0:d199d2362859 | 301 | * @param jk JK collision information. |
| RichardE | 0:d199d2362859 | 302 | */ |
| RichardE | 0:d199d2362859 | 303 | void sprite( UInt8 spr, Int16 x, Int16 y, UInt8 image, UInt8 palette, Rotation rot=None, UInt8 jk=0 ); |
| RichardE | 0:d199d2362859 | 304 | |
| RichardE | 0:d199d2362859 | 305 | /** Draw 4 sprites as a 2 by 2 block. |
| RichardE | 0:d199d2362859 | 306 | * @param spr Sprite number for first sprite. |
| RichardE | 0:d199d2362859 | 307 | * @param x X coordinate for centre of group. |
| RichardE | 0:d199d2362859 | 308 | * @param y Y coordinate for centre of group. |
| RichardE | 0:d199d2362859 | 309 | * @param image Sprite image number for first image. |
| RichardE | 0:d199d2362859 | 310 | * @param palette Palette selection information (use 0 for 256 colour palette). |
| RichardE | 0:d199d2362859 | 311 | * @param rot Rotation and flip setting. |
| RichardE | 0:d199d2362859 | 312 | * @param jk JK collision information. |
| RichardE | 0:d199d2362859 | 313 | */ |
| RichardE | 0:d199d2362859 | 314 | void sprite2x2( UInt8 spr, Int16 x, Int16 y, UInt8 image, UInt8 palette, Rotation rot=None, UInt8 jk=0 ); |
| RichardE | 0:d199d2362859 | 315 | |
| RichardE | 0:d199d2362859 | 316 | /** Plot a number of sprites relative to an origin. |
| RichardE | 0:d199d2362859 | 317 | * @param x X coordinate of origin. |
| RichardE | 0:d199d2362859 | 318 | * @param y Y coordinate of origin. |
| RichardE | 0:d199d2362859 | 319 | * @param psp Pointer to an array of sprplot structures. |
| RichardE | 0:d199d2362859 | 320 | * @param count Number of structures in the psp array. |
| RichardE | 0:d199d2362859 | 321 | * @param rot Rotation and flip setting. |
| RichardE | 0:d199d2362859 | 322 | * @param jk JK collision information. |
| RichardE | 0:d199d2362859 | 323 | */ |
| RichardE | 0:d199d2362859 | 324 | void plots( Int16 ox, Int16 oy, const sprplot *psp, UInt8 count, Rotation rot=None, UInt8 jk=0 ); |
| RichardE | 0:d199d2362859 | 325 | |
| RichardE | 0:d199d2362859 | 326 | /** Wait for vertical blanking. |
| RichardE | 0:d199d2362859 | 327 | */ |
| RichardE | 0:d199d2362859 | 328 | void waitvblank( void ); |
| RichardE | 0:d199d2362859 | 329 | |
| RichardE | 0:d199d2362859 | 330 | /** Make a noise. |
| RichardE | 0:d199d2362859 | 331 | * @param v Voice number. |
| RichardE | 0:d199d2362859 | 332 | * @param wave Waveform type. |
| RichardE | 0:d199d2362859 | 333 | * @param freq Frequency in quarter Hz (so 100 Hz is 400). |
| RichardE | 0:d199d2362859 | 334 | * @param lamp Amplitude for left channel. |
| RichardE | 0:d199d2362859 | 335 | * @param ramp Amplitude for right channel. |
| RichardE | 0:d199d2362859 | 336 | */ |
| RichardE | 0:d199d2362859 | 337 | void voice( UInt8 v, WaveForm wave, UInt16 freq, UInt8 lamp, UInt8 ramp ); |
| RichardE | 3:a1c856358996 | 338 | |
| RichardE | 3:a1c856358996 | 339 | /** Hide all sprites. |
| RichardE | 3:a1c856358996 | 340 | */ |
| RichardE | 3:a1c856358996 | 341 | void HideAllSprites( void ); |
| RichardE | 3:a1c856358996 | 342 | |
| RichardE | 0:d199d2362859 | 343 | private : |
| RichardE | 0:d199d2362859 | 344 | |
| RichardE | 0:d199d2362859 | 345 | // Pointer to SPI datalink. |
| RichardE | 0:d199d2362859 | 346 | SPI *spi; |
| RichardE | 0:d199d2362859 | 347 | |
| RichardE | 0:d199d2362859 | 348 | // Pointer to chip select digital output. |
| RichardE | 0:d199d2362859 | 349 | DigitalOut *cs; |
| RichardE | 0:d199d2362859 | 350 | |
| RichardE | 0:d199d2362859 | 351 | // Current sprite. Used by xsprite and xhide etc. |
| RichardE | 0:d199d2362859 | 352 | UInt8 spr; |
| RichardE | 0:d199d2362859 | 353 | |
| RichardE | 0:d199d2362859 | 354 | }; |
| RichardE | 0:d199d2362859 | 355 | |
| RichardE | 0:d199d2362859 | 356 | #endif |
| RichardE | 0:d199d2362859 | 357 | |
| RichardE | 0:d199d2362859 | 358 | /* END of Gameduino.h */ |