1 | #include "thomson.h"
|
---|
2 |
|
---|
3 | int 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)
|
---|
21 | volatile 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 | }
|
---|