Split screen graphics demo for the Gameduino

Dependencies:   Gameduino mbed

Committer:
TheChrisyd
Date:
Fri Dec 21 14:12:13 2012 +0000
Revision:
0:351171469bf7
Working version

Who changed what in which revision?

UserRevisionLine numberNew contents of line
TheChrisyd 0:351171469bf7 1 #include "mbed.h"
TheChrisyd 0:351171469bf7 2 #include "GD.h"
TheChrisyd 0:351171469bf7 3
TheChrisyd 0:351171469bf7 4 #include "splitscreen.h"
TheChrisyd 0:351171469bf7 5 #include "shield.h"
TheChrisyd 0:351171469bf7 6
TheChrisyd 0:351171469bf7 7 GDClass GD(ARD_MOSI, ARD_MISO, ARD_SCK, ARD_D9, USBTX, USBRX) ;
TheChrisyd 0:351171469bf7 8
TheChrisyd 0:351171469bf7 9 /*
TheChrisyd 0:351171469bf7 10 For the splitscreen microprogram, the COMM area holds 8 short words
TheChrisyd 0:351171469bf7 11 that control the 3-way screen split:
TheChrisyd 0:351171469bf7 12
TheChrisyd 0:351171469bf7 13 COMM+0 SCROLL_X for top section
TheChrisyd 0:351171469bf7 14 COMM+2 SCROLL_Y for top section
TheChrisyd 0:351171469bf7 15 COMM+4 Y-coordinate of start of middle section
TheChrisyd 0:351171469bf7 16 COMM+6 SCROLL_X for middle section
TheChrisyd 0:351171469bf7 17 COMM+8 SCROLL_Y for middle section
TheChrisyd 0:351171469bf7 18 COMM+10 Y-coordinate of start of bottom section
TheChrisyd 0:351171469bf7 19 COMM+12 SCROLL_X for bottom section
TheChrisyd 0:351171469bf7 20 COMM+14 SCROLL_Y for bottom section
TheChrisyd 0:351171469bf7 21 */
TheChrisyd 0:351171469bf7 22
TheChrisyd 0:351171469bf7 23 #include "splitscreen_graphics.h"
TheChrisyd 0:351171469bf7 24
TheChrisyd 0:351171469bf7 25 void setup()
TheChrisyd 0:351171469bf7 26 {
TheChrisyd 0:351171469bf7 27 GD.begin();
TheChrisyd 0:351171469bf7 28
TheChrisyd 0:351171469bf7 29 GD.copy(RAM_PIC, splitscreen_pic, sizeof(splitscreen_pic));
TheChrisyd 0:351171469bf7 30 GD.copy(RAM_CHR, splitscreen_chr, sizeof(splitscreen_chr));
TheChrisyd 0:351171469bf7 31 GD.copy(RAM_PAL, splitscreen_pal, sizeof(splitscreen_pal));
TheChrisyd 0:351171469bf7 32
TheChrisyd 0:351171469bf7 33 GD.wr16(COMM+0, 0);
TheChrisyd 0:351171469bf7 34 GD.wr16(COMM+2, 0);
TheChrisyd 0:351171469bf7 35 GD.wr16(COMM+4, 100); // split at line 100
TheChrisyd 0:351171469bf7 36 GD.wr16(COMM+6, 0);
TheChrisyd 0:351171469bf7 37 GD.wr16(COMM+8, 140);
TheChrisyd 0:351171469bf7 38 GD.wr16(COMM+10, 200); // split at line 200
TheChrisyd 0:351171469bf7 39 GD.wr16(COMM+12, 0);
TheChrisyd 0:351171469bf7 40 GD.wr16(COMM+14, (511 & (82 - 200))); // show line 82 at line 200
TheChrisyd 0:351171469bf7 41
TheChrisyd 0:351171469bf7 42 GD.microcode(splitscreen_code, sizeof(splitscreen_code));
TheChrisyd 0:351171469bf7 43 }
TheChrisyd 0:351171469bf7 44
TheChrisyd 0:351171469bf7 45 // Set the scroll registers for the middle screen secion to (x, y)
TheChrisyd 0:351171469bf7 46 static void scrollxy(uint16_t x, uint16_t y)
TheChrisyd 0:351171469bf7 47 {
TheChrisyd 0:351171469bf7 48 GD.wr16(COMM+6, x);
TheChrisyd 0:351171469bf7 49 GD.wr16(COMM+8, y);
TheChrisyd 0:351171469bf7 50 }
TheChrisyd 0:351171469bf7 51
TheChrisyd 0:351171469bf7 52 int main()
TheChrisyd 0:351171469bf7 53 {
TheChrisyd 0:351171469bf7 54 setup();
TheChrisyd 0:351171469bf7 55 while (1){
TheChrisyd 0:351171469bf7 56 static int i;
TheChrisyd 0:351171469bf7 57 float th = i / 16.;
TheChrisyd 0:351171469bf7 58 scrollxy(55 + 50 * cos(th), 150 + 50 * sin(th));
TheChrisyd 0:351171469bf7 59 GD.wr16(COMM+12, i);
TheChrisyd 0:351171469bf7 60 i++;
TheChrisyd 0:351171469bf7 61 GD.waitvblank();
TheChrisyd 0:351171469bf7 62 }}