Chris Dick
/
Gameduino_Split_Screen_demo
Split screen graphics demo for the Gameduino
main.cpp@0:351171469bf7, 2012-12-21 (annotated)
- Committer:
- TheChrisyd
- Date:
- Fri Dec 21 14:12:13 2012 +0000
- Revision:
- 0:351171469bf7
Working version
Who changed what in which revision?
User | Revision | Line number | New 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 | }} |