]> git.gir.st - Chiptunes-pms150c.git/blob - bsv.c
d1fe79513e9049aa2f43b78300d845550345b0e5
[Chiptunes-pms150c.git] / bsv.c
1 #include <stdio.h>
2 #include "fakeasm.h"
3 typedef unsigned char u8;
4
5 u8 i0, i1, i2; //MEM
6 u8 n; //MEM
7 u8 sample; //MEM
8 u8 acc; //ACC
9
10 u8 notes[] = {
11 0x84, 0x9d, 0xb0, 0x69, 0x9d, 0x84, 0x69, 0x58,
12 0x75, 0x8c, 0xb0, 0x69, 0x8c, 0x75, 0x69, 0x58
13 };
14
15 void g(void){
16 u8 notes_ix = acc & 0x7;
17 if(3&i2)
18 notes_ix += 8;
19 u8 result = ((i1<<8|i0)*notes[notes_ix])>>8; // keep hi byte
20 acc = result;
21 }
22 void main(void){
23 CLEAR (i0)
24 CLEAR (i1)
25 CLEAR (i2)
26 for(;;) {
27 /*n = i2<<2 | i1>>6;*/
28 MOV (n, i2)
29 SL (n)
30 SL (n)
31 MOV (acc, i1)
32 SWAP (acc)
33 AND (acc, 0xf)
34 SR (acc)
35 SR (acc)
36 OR (n, acc)
37
38 MOV (acc, n)
39 CALL (g)
40 SWAP (acc)
41 AND (acc, 0x1)
42 MOV (sample, acc)
43
44 { u8 tmp = i2<<3 | i1>>5;//TODO
45 MOV (acc, tmp)
46 XOR (acc, n)
47 CALL (g)
48 } //tmp
49 SR (acc)
50 AND (acc, i2)
51 SR (acc)
52 AND (acc, 3)
53 ADD (sample, acc)
54
55 { u8 tmp2 = (i2<<5|i1>>3)%3;//TODO
56 MOV (acc, tmp2)
57 ADD (acc, n)
58 CALL (g)
59 } //tmp2
60 SR (acc)
61 SR (acc)
62 { u8 tmp1 = i2/6;
63 AND (acc, tmp1)
64 } //tmp1
65 AND (acc, 3)
66 ADD (sample, acc)
67
68 MOV (acc, n)
69 { u8 tmp3 = (i2<<6|i1>>2)%3;
70 SUB (acc, tmp3)
71 } // tmp3
72 ADD (acc, 8)
73 CALL (g)
74 SR (acc)
75 { u8 tmp1 = i2/10;
76 AND (acc, tmp1)
77 } //tmp1
78 AND (acc, 3)
79 ADD (sample, acc)
80
81 putchar(sample<<4);
82
83 INC (i0)
84 i1 += !i0; // ADDC i1
85 i2 += !i1 && !i0; // ADDC i2
86 }
87 }
Imprint / Impressum