diff options
Diffstat (limited to 'sam.c')
| -rw-r--r-- | sam.c | 53 |
1 files changed, 53 insertions, 0 deletions
@@ -0,0 +1,53 @@ +// 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);
+}
+
+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();
+}
+
|
