FreeCalypso > hg > freecalypso-tools
comparison target-utils/buzplayer/melentry.c @ 823:9092ff68e37d
buzplayer: implement PWT mode melody entry
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Sun, 30 May 2021 04:42:05 +0000 |
parents | eb5960dc258c |
children |
comparison
equal
deleted
inserted
replaced
822:7c02cc7f28df | 823:9092ff68e37d |
---|---|
3 #include <stdlib.h> | 3 #include <stdlib.h> |
4 #include "types.h" | 4 #include "types.h" |
5 #include "melody.h" | 5 #include "melody.h" |
6 | 6 |
7 extern struct melentry *melody_buf_start, *melody_buf_tailptr; | 7 extern struct melentry *melody_buf_start, *melody_buf_tailptr; |
8 extern int melody_mode; | |
8 | 9 |
9 void | 10 void |
10 melody_init() | 11 melody_init() |
11 { | 12 { |
12 melody_buf_tailptr = melody_buf_start; | 13 melody_buf_tailptr = melody_buf_start; |
14 melody_mode = 1; | |
15 pwt_off(); | |
16 } | |
17 | |
18 void | |
19 melody_init_pwt() | |
20 { | |
21 melody_buf_tailptr = melody_buf_start; | |
22 melody_mode = 2; | |
23 pwt_on(); | |
13 } | 24 } |
14 | 25 |
15 void | 26 void |
16 melody_entry(argbulk) | 27 melody_entry(argbulk) |
17 char *argbulk; | 28 char *argbulk; |
18 { | 29 { |
19 char *argv[3]; | 30 char *argv[3]; |
20 u32 tone, dur; | 31 u32 tone, dur; |
21 | 32 |
33 if (melody_mode != 1) { | |
34 printf("ERROR: wrong mode for melody entry\n"); | |
35 return; | |
36 } | |
22 if (parse_args(argbulk, 2, 2, argv, 0) < 0) | 37 if (parse_args(argbulk, 2, 2, argv, 0) < 0) |
23 return; | 38 return; |
24 tone = strtoul(argv[0], 0, 0); | 39 tone = strtoul(argv[0], 0, 0); |
25 dur = strtoul(argv[1], 0, 0); | 40 dur = strtoul(argv[1], 0, 0); |
26 if (tone > 255 || dur < 1 || dur > 0xFFFF) { | 41 if (tone > 255 || dur < 1 || dur > 0xFFFF) { |
29 } | 44 } |
30 melody_buf_tailptr->tone = tone; | 45 melody_buf_tailptr->tone = tone; |
31 melody_buf_tailptr->dur = dur; | 46 melody_buf_tailptr->dur = dur; |
32 melody_buf_tailptr++; | 47 melody_buf_tailptr++; |
33 } | 48 } |
49 | |
50 void | |
51 pwt_entry_note(argbulk) | |
52 char *argbulk; | |
53 { | |
54 char *argv[4]; | |
55 u32 tone, vol, dur; | |
56 | |
57 if (melody_mode != 2) { | |
58 printf("ERROR: wrong mode for melody entry\n"); | |
59 return; | |
60 } | |
61 if (parse_args(argbulk, 3, 3, argv, 0) < 0) | |
62 return; | |
63 tone = strtoul(argv[0], 0, 0); | |
64 vol = strtoul(argv[1], 0, 0); | |
65 dur = strtoul(argv[2], 0, 0); | |
66 if (tone > 47 || vol > 63 || dur < 1 || dur > 0xFFFF) { | |
67 printf("ERROR: argument(s) out of range\n"); | |
68 return; | |
69 } | |
70 melody_buf_tailptr->tone = tone; | |
71 melody_buf_tailptr->vol = (vol << 1) | 1; | |
72 melody_buf_tailptr->dur = dur; | |
73 melody_buf_tailptr++; | |
74 } | |
75 | |
76 void | |
77 pwt_entry_rest(argbulk) | |
78 char *argbulk; | |
79 { | |
80 char *argv[2]; | |
81 u32 dur; | |
82 | |
83 if (melody_mode != 2) { | |
84 printf("ERROR: wrong mode for melody entry\n"); | |
85 return; | |
86 } | |
87 if (parse_args(argbulk, 1, 1, argv, 0) < 0) | |
88 return; | |
89 dur = strtoul(argv[0], 0, 0); | |
90 if (dur < 1 || dur > 0xFFFF) { | |
91 printf("ERROR: argument out of range\n"); | |
92 return; | |
93 } | |
94 melody_buf_tailptr->tone = 0; | |
95 melody_buf_tailptr->vol = 0; | |
96 melody_buf_tailptr->dur = dur; | |
97 melody_buf_tailptr++; | |
98 } |