diff options
| -rw-r--r-- | sam.c | 134 | ||||
| -rw-r--r-- | sam.h | 26 | ||||
| -rw-r--r-- | sam_player.c | 92 |
3 files changed, 126 insertions, 126 deletions
@@ -1,67 +1,67 @@ -// sam.c
-//
-// 20060811 Markku Alén
-
-#include "sam.h"
-#include "c64.h"
-#include "cpu.h"
-#include "sid.h"
-
-static void feed(const char *text)
-{
- char c;
- while((c = *(text++)) != '\0')
- {
- kbd_ascii_push(c, 1);
- c64_run(20000);
- kbd_ascii_push(c, 0);
- c64_run(20000);
- }
-}
-
-static void run_to(int addr_start, int addr_stop)
-{
- int pc;
- for(;;)
- {
- pc = get_pc();
- if(pc >= addr_start && pc <= addr_stop)
- break;
- c64_run(20000);
- }
-}
-
-void sam_init(void)
-{
- c64_init();
- run_to(0xe5cd, 0xe5d5);
- feed("LOAD\"SAM.PRG\",1,1\r RUN\rH");
- run_to(0xe5cd, 0xe5d5);
- //feed("]RE\r");
- //run_to(0xe5cd, 0xe5d5);
-}
-
-static void sam_say(const char *text, unsigned int frequency, unsigned char *wave_buf, unsigned int *wave_len_ref)
-{
- feed("SAY\"");
- feed(text);
- feed("\"\r");
- start_record(frequency, wave_buf, *wave_len_ref);
- run_to(0xe5cd, 0xe5d5);
- *wave_len_ref = stop_record();
-}
-
-void sam_recite(const char *text, unsigned int frequency, unsigned char *wave_buf, unsigned int *wave_len_ref)
-{
- feed("]RECITER\r");
- run_to(0xe5cd, 0xe5d5);
- sam_say(text, frequency, wave_buf, wave_len_ref);
-}
-
-void sam_phonetic(const char *text, unsigned int frequency, unsigned char *wave_buf, unsigned int *wave_len_ref)
-{
- feed("]SAM\r");
- run_to(0xe5cd, 0xe5d5);
- sam_say(text, frequency, wave_buf, wave_len_ref);
-}
-
+// sam.c +// +// 20060811 Markku Alén + +#include "sam.h" +#include "c64.h" +#include "cpu.h" +#include "sid.h" + +static void feed(const char *text) +{ + char c; + while((c = *(text++)) != '\0') + { + kbd_ascii_push(c, 1); + c64_run(20000); + kbd_ascii_push(c, 0); + c64_run(20000); + } +} + +static void run_to(int addr_start, int addr_stop) +{ + int pc; + for(;;) + { + pc = get_pc(); + if(pc >= addr_start && pc <= addr_stop) + break; + c64_run(20000); + } +} + +void sam_init(void) +{ + c64_init(); + run_to(0xe5cd, 0xe5d5); + feed("LOAD\"SAM.PRG\",1,1\r RUN\rH"); + run_to(0xe5cd, 0xe5d5); + //feed("]RE\r"); + //run_to(0xe5cd, 0xe5d5); +} + +static void sam_say(const char *text, unsigned int frequency, unsigned char *wave_buf, unsigned int *wave_len_ref) +{ + feed("SAY\""); + feed(text); + feed("\"\r"); + start_record(frequency, wave_buf, *wave_len_ref); + run_to(0xe5cd, 0xe5d5); + *wave_len_ref = stop_record(); +} + +void sam_recite(const char *text, unsigned int frequency, unsigned char *wave_buf, unsigned int *wave_len_ref) +{ + feed("]RECITER\r"); + run_to(0xe5cd, 0xe5d5); + sam_say(text, frequency, wave_buf, wave_len_ref); +} + +void sam_phonetic(const char *text, unsigned int frequency, unsigned char *wave_buf, unsigned int *wave_len_ref) +{ + feed("]SAM\r"); + run_to(0xe5cd, 0xe5d5); + sam_say(text, frequency, wave_buf, wave_len_ref); +} + @@ -1,13 +1,13 @@ -// sam.h
-//
-// 20060811 Markku Alén
-
-#ifndef __SAM_H__
-#define __SAM_H__ 1
-
-void sam_init(void);
-void sam_recite(const char *text, unsigned int frequency, unsigned char *wave_buf, unsigned int *wave_len_ref);
-void sam_phonetic(const char *text, unsigned int frequency, unsigned char *wave_buf, unsigned int *wave_len_ref);
-
-#endif
-
+// sam.h +// +// 20060811 Markku Alén + +#ifndef __SAM_H__ +#define __SAM_H__ 1 + +void sam_init(void); +void sam_recite(const char *text, unsigned int frequency, unsigned char *wave_buf, unsigned int *wave_len_ref); +void sam_phonetic(const char *text, unsigned int frequency, unsigned char *wave_buf, unsigned int *wave_len_ref); + +#endif + diff --git a/sam_player.c b/sam_player.c index 04207b2..ee604e7 100644 --- a/sam_player.c +++ b/sam_player.c @@ -1,46 +1,46 @@ -// sam_player.c
-//
-// 20060811 Markku Alén
-//
-// rel-0-2
-
-#include "sam.h"
-#include "wave.h"
-
-static unsigned char wave_buffer[200000];
-static wave_t wave = { 1, 44100, 8, 0, 1, wave_buffer };
-
-int main(int argc, char **argv)
-{
- int argi;
- char *arg, c, buf[200], *p;
- unsigned int wave_length;
- p = buf;
- for(argi = 1;argi < argc;argi++)
- {
- arg = argv[argi];
- do
- {
- c = *(arg++);
- if(c >= 'a' && c <= 'z')
- c = (c - 'a') + 'A';
- if(c != '\"')
- {
- if(p < &buf[sizeof(buf) - 1])
- *(p++) = (c != '\0') ? c : ' ';
- }
- }while(c != '\0');
- }
- *p = '\0';
- sam_init();
- wave_length = sizeof(wave_buffer);
- sam_recite(buf, wave.samples_per_sec, wave_buffer, &wave_length);
- if(wave_length > 0)
- {
- if(wave_length > sizeof(wave_buffer))
- wave_length = sizeof(wave_buffer);
- wave.frame_size = wave_length;
- (void)wave_out(&wave);
- }
- return 0;
-}
+// sam_player.c +// +// 20060811 Markku Alén +// +// rel-0-2 + +#include "sam.h" +#include "wave.h" + +static unsigned char wave_buffer[200000]; +static wave_t wave = { 1, 44100, 8, 0, 1, wave_buffer }; + +int main(int argc, char **argv) +{ + int argi; + char *arg, c, buf[200], *p; + unsigned int wave_length; + p = buf; + for(argi = 1;argi < argc;argi++) + { + arg = argv[argi]; + do + { + c = *(arg++); + if(c >= 'a' && c <= 'z') + c = (c - 'a') + 'A'; + if(c != '\"') + { + if(p < &buf[sizeof(buf) - 1]) + *(p++) = (c != '\0') ? c : ' '; + } + }while(c != '\0'); + } + *p = '\0'; + sam_init(); + wave_length = sizeof(wave_buffer); + sam_recite(buf, wave.samples_per_sec, wave_buffer, &wave_length); + if(wave_length > 0) + { + if(wave_length > sizeof(wave_buffer)) + wave_length = sizeof(wave_buffer); + wave.frame_size = wave_length; + (void)wave_out(&wave); + } + return 0; +} |
