source: thomson/code/C/alien_message/main.c@ fe55aa5

main
Last change on this file since fe55aa5 was fe55aa5, checked in by Adrien Destugues <pulkomandy@…>, 12 years ago

Add source for the Alien Message demo.

git-svn-id: svn://localhost/thomson@25 85ae3b6b-dc8f-4344-a89d-598714f2e4e5

  • Property mode set to 100644
File size: 2.7 KB
Line 
1#include "thomson.h"
2
3int main()
4{
5
6 my_puts("\x1F\x20\x29\x1B\x20\x43\x1B\x20\x50\x0C\n\n\n IN THE YEAR 2012");
7 for (int i = 25; --i >= 0;) asm(" SYNC\n");
8 my_puts("\x1B\x73\r\n\n Shinra\r\n");
9 for (int i = 25; --i >= 0;) asm(" SYNC\n");
10 my_puts("\x1B\x70 IS PROUD TO PRESENT YOU\r\n");
11 for (int i = 25; --i >= 0;) asm(" SYNC\n");
12 my_puts(" ANOTHER PARTYMADE PROD!");
13 for (int i = 25; --i >= 0;) asm(" SYNC\n");
14 my_puts("\x1B\x73\r\n\n ALIEN MESSAGE\r\n");
15 for (int i = 25; --i >= 0;) asm(" SYNC\n");
16
17 asm(" ORCC #$50"); // Disable interrupts (cursor blink)
18
19#define MEA_CMD *(volatile unsigned char*)(0xA7CF)
20#define MEA_DATA *(volatile unsigned char*)(0xA7CE)
21volatile unsigned char* vram = 0;
22
23 MEA_CMD = 16 + 12;
24
25 // COLOR RAM
26 asm(" SWI\n"
27 " FCB 4");
28
29 for(int k = 73; k <= 200; k++)
30 {
31 char color = ((k+40)>>4) & 15;
32 *(vram + k * 40) = color;
33 *(vram + k * 40 + 39) = color <<4;
34 }
35
36 char i = 0;
37 char pos = 0;
38 unsigned char z = 0;
39
40 unsigned char dir = 1;
41 unsigned char t = 20;
42
43 MEA_DATA = 0xFF;
44
45 static const unsigned char music[] =
46 {
47 0xFF, 0x80, 0x07, 0x80,
48 0x00, 0x53, 0x37, 0x90,
49 0xFF, 0x80, 0x07, 0x80,
50 0x55, 0x53, 0x37, 0x90,
51 0xFF, 0x80, 0x07, 0x80,
52 0x66, 0x53, 0x37, 0x90,
53 0xFF, 0x80, 0x07, 0x80,
54 0xBB, 0x53, 0x37, 0x90,
55
56 0xFF, 0xD2, 0x07, 0x86,
57 0x00, 0x53, 0x37, 0x90,
58 0xFF, 0xD2, 0x07, 0x80,
59 0x55, 0x53, 0x37, 0x90,
60 0xFF, 0xD2, 0x07, 0x80,
61 0x66, 0x53, 0x37, 0x90,
62 0xFF, 0xD2, 0x07, 0x80,
63 0xBB, 0x53, 0x37, 0x90,
64
65 0xFF, 0xD2, 0x07, 0x9B,
66 0x00, 0x53, 0x37, 0x90,
67 0xFF, 0xD2, 0x07, 0x80,
68 0x55, 0x53, 0x37, 0x90,
69 0xFF, 0xD2, 0x07, 0x80,
70 0x66, 0x53, 0x37, 0x90,
71 0xFF, 0xD2, 0x07, 0x80,
72 0xBB, 0x53, 0x37, 0x90,
73
74 0xFF, 0xD2, 0x07, 0x80,
75 0x00, 0x53, 0x37, 0x90,
76 0xFF, 0xD2, 0x07, 0x88,
77 0x55, 0x53, 0x37, 0x80,
78 0xFF, 0xD2, 0x07, 0x98,
79 0x66, 0x53, 0x37, 0x80,
80 0xFF, 0xD2, 0x07, 0x80,
81 0xBB, 0x53, 0x37, 0x83,
82 };
83
84 for(;;)
85 {
86 // AUDIO
87
88 for (int j = 0; j < 4; j++)
89 {
90 MEA_DATA = music[j | (pos<<2)];
91 }
92 i++;
93 if (i > 6) {
94 i = 0;
95 pos ++;
96 if (pos >= 32)
97 pos = 0;
98 }
99
100 // VIDEO
101
102 for(int k = 73; k <= 200; k++)
103 {
104 // FORME RAM
105 asm(" LDX #0xA7C0 \n"
106 " LDA #0x51 \n"
107 " STA ,X \n"
108 ::
109 : "x", "a");
110 *(vram + k * 40) = z+k;
111 *(vram + k * 40 - 1) = -z+k;
112
113 // FORME RAM
114 asm(" LDX #0xA7C0 \n"
115 " LDA #0x50 \n"
116 " STA ,X \n"
117 ::
118 : "x","a"
119 );
120
121 char off = t + (k & 7);
122 *(vram + k * 40 - off) = 0x7F;
123 *(vram + k * 40 + off) = 0x7F;
124 off ++;
125 *(vram + k * 40 - off) = 0x30;
126 *(vram + k * 40 + off) = 0x30;
127
128 }
129 z++;
130
131 t += dir;
132 if (t > 25) dir = - 1;
133 if (t < 9) dir = 1;
134
135 asm(" SYNC");
136 }
137
138 return 0;
139}
Note: See TracBrowser for help on using the repository browser.