]> git.gir.st - Chiptunes.git/blame_incremental - foo.c
new version
[Chiptunes.git] / foo.c
... / ...
CommitLineData
1#include <stdio.h>
2#include "fakeasm.h"
3typedef unsigned char u8;
4
5u8 data[] = {
6 0x84, 0x9d, 0xb0, 0x69, 0x9d, 0x84, 0x69, 0x58,
7 0x75, 0x8c, 0xb0, 0x69, 0x8c, 0x75, 0x69, 0x58
8};
9u8 x;
10u8 t;
11u8 o;
12u8 g(int i) {
13 u8 tmp;
14 ANDI (t, 0x07)
15 tmp = i >> 16;
16 ANDI (tmp, 3)
17 TST (tmp)
18 BREQ (skip)
19 SUBI (t, -8)
20 skip:
21 t = data[t];
22 t = (i*t) >> o;
23 AND (t, x)
24 ANDI (t, 3)
25 return t;
26};
27
28int main(void) {
29 int i = 0;
30 unsigned short n;
31 unsigned short s;
32 u8 acc;
33 for (;;) {
34 acc = 0;
35 n = i >> 14;
36 s = i >> 17;
37
38 //voice 1:
39 LDI (x, 1)
40 MOV (t, n)
41 LDI (o, 12)
42 acc += g(i);
43
44 //voice 2:
45 MOV (x, s)
46 t = n ^ i >> 13;
47 LDI (o, 10)
48 acc += g(i);
49
50 //voice 3:
51 x = s / 3;
52 t = n + ((i >> 11) % 3);
53 LDI (o, 10)
54 acc += g(i);
55
56 //voice 4:
57 x = s / 5;
58 t = 8 + n - ((i >> 10) % 3);
59 LDI (o, 9)
60 acc += g(i);
61
62 i++;
63 putchar(acc<<4);
64 }
65}
Imprint / Impressum