// license:BSD-3-Clause // copyright-holders:Miodrag Milanovic /* Tape support for RK format */ #include #include "rk_cas.h" #define RK_WAV_FREQUENCY 44000 #define WAVE_HIGH 32767 #define WAVE_LOW -32768 #define RK_HEADER_LEN 256 #define RK_SIZE_20 20 #define RK_SIZE_22 22 #define RK_SIZE_60 60 static int data_size; static int16_t *rk_emit_level(int16_t *p, int count, int level) { int i; for (i=0; i=0; i--) p = rk_output_bit(p,(byte>>i) & 0x01, bitsize); return p; } static int rk20_cas_to_wav_size( const uint8_t *casdata, int caslen ) { data_size = caslen; return (RK_HEADER_LEN * 8 * 2 + 8*2 + caslen * 8 * 2) * RK_SIZE_20; } static int rk22_cas_to_wav_size( const uint8_t *casdata, int caslen ) { data_size = caslen; return (RK_HEADER_LEN * 8 * 2 + 8*2 + caslen * 8 * 2) * RK_SIZE_22; } static int rk60_cas_to_wav_size( const uint8_t *casdata, int caslen ) { data_size = caslen; return (RK_HEADER_LEN * 8 * 2 + 8*2 + caslen * 8 * 2) * RK_SIZE_60; } static int gam_cas_to_wav_size( const uint8_t *casdata, int caslen ) { data_size = caslen; return (RK_HEADER_LEN * 8 * 2 + caslen * 8 * 2) * RK_SIZE_20; } static int rk20_cas_fill_wave( int16_t *buffer, int length, uint8_t *bytes ) { int i; int16_t * p = buffer; for (i=0; i