diff options
author | 2020-12-06 19:04:05 +0100 | |
---|---|---|
committer | 2020-12-06 19:04:05 +0100 | |
commit | 5e23dc37a8c3b454d7880967751cad748ee6828f (patch) | |
tree | 0056b6bf0dc8f3146c44ab3f781a650a34ae9cec /src/lib/formats/orao_cas.cpp | |
parent | bb9f9d297d92906817ee5d00f4b3804a499a1577 (diff) |
orao103: Support new TAP format and format now done properly
Diffstat (limited to 'src/lib/formats/orao_cas.cpp')
-rw-r--r-- | src/lib/formats/orao_cas.cpp | 27 |
1 files changed, 18 insertions, 9 deletions
diff --git a/src/lib/formats/orao_cas.cpp b/src/lib/formats/orao_cas.cpp index a9c3f7473d4..a6930e18d1f 100644 --- a/src/lib/formats/orao_cas.cpp +++ b/src/lib/formats/orao_cas.cpp @@ -11,16 +11,18 @@ #define ORAO_WAV_FREQUENCY 44100 -#define WAVE_HIGH -32768 -#define WAVE_LOW 0 +#define WAVE_HIGH -24576 +#define WAVE_LOW 24576 -#define ORAO_WAVE_ONE 24 -#define ORAO_WAVE_ZERO 11 +#define ORAO_WAVE_ONE 17 +#define ORAO_WAVE_ZERO 9 #define ORAO_HEADER_SIZE 360 static int16_t wave_data; // FIXME: global variables prevent multiple instances -static int len; +static int len; +static int startpos; +static bool newformat; static void orao_output_wave( int16_t **buffer, int length ) { if ( buffer == nullptr ) { @@ -41,7 +43,13 @@ static int orao_cas_to_wav_size( const uint8_t *casdata, int caslen ) { return -1; } size = 0; - for (i=ORAO_HEADER_SIZE;i<caslen-ORAO_HEADER_SIZE;i++) { + startpos = 0; + newformat = true; + if (casdata[0]==0x68 && casdata[1]==0x01 && casdata[2]==0x00) { + startpos = ORAO_HEADER_SIZE; + newformat = false; + } + for (i=startpos;i<caslen-startpos;i++) { for (j=0;j<8;j++) { b = (casdata[i] >> j) & 1; if (b==0) { @@ -56,13 +64,14 @@ static int orao_cas_to_wav_size( const uint8_t *casdata, int caslen ) { } static int orao_cas_fill_wave( int16_t *buffer, int length, uint8_t *bytes ) { - int i,j,size; + int i,j,size,k; uint8_t b; size = 0; if (bytes == nullptr) return -1; - for (i=ORAO_HEADER_SIZE;i<len-ORAO_HEADER_SIZE;i++) { + for (i=startpos;i<len-startpos;i++) { for (j=0;j<8;j++) { - b = (bytes[i] >> j) & 1; + k = newformat ? (7-j) : j; + b = (bytes[i] >> k) & 1; if (b==0) { wave_data = WAVE_LOW; orao_output_wave(&buffer,ORAO_WAVE_ZERO); |