From a5d7e68af96d9b62821d8fd47f5039c5bae5d421 Mon Sep 17 00:00:00 2001 From: Reiner Herrmann Date: Fri, 10 Feb 2012 14:25:38 +0100 Subject: added original sam_player code --- sam.c | 53 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 sam.c (limited to 'sam.c') diff --git a/sam.c b/sam.c new file mode 100644 index 0000000..c921c48 --- /dev/null +++ b/sam.c @@ -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(); +} + -- cgit v1.2.3