Fabio Fumi
/
send_to_sharp
Renamed
send_pc1403.h@5:062962db7a48, 2022-03-29 (annotated)
- Committer:
- ffxx68
- Date:
- Tue Mar 29 10:06:20 2022 +0000
- Revision:
- 5:062962db7a48
- Parent:
- 2:dff96be9617e
Receiving the file through serial port
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
ffxx68 | 0:07819bc70660 | 1 | #ifndef SEND_PC1403 |
ffxx68 | 0:07819bc70660 | 2 | #define SEND_PC1403 |
ffxx68 | 0:07819bc70660 | 3 | |
ffxx68 | 5:062962db7a48 | 4 | #include "mbed.h" |
ffxx68 | 5:062962db7a48 | 5 | |
ffxx68 | 5:062962db7a48 | 6 | #include "serial_file.h" // file-over-serial |
ffxx68 | 5:062962db7a48 | 7 | #ifndef FILE_BUF_SIZE |
ffxx68 | 5:062962db7a48 | 8 | #include "bin_file.h" // hardcoded file stream |
ffxx68 | 5:062962db7a48 | 9 | #endif |
ffxx68 | 5:062962db7a48 | 10 | |
ffxx68 | 5:062962db7a48 | 11 | #include "bit_send.h" |
ffxx68 | 5:062962db7a48 | 12 | |
ffxx68 | 1:9289febf4ae9 | 13 | // remapping to MBed types |
ffxx68 | 0:07819bc70660 | 14 | #define uchar uint8_t |
ffxx68 | 2:dff96be9617e | 15 | #define ushort uint16_t |
ffxx68 | 2:dff96be9617e | 16 | #define uint uint32_t |
ffxx68 | 0:07819bc70660 | 17 | #define ulong uint32_t |
ffxx68 | 0:07819bc70660 | 18 | |
ffxx68 | 0:07819bc70660 | 19 | #define PC_ID 1403 |
ffxx68 | 0:07819bc70660 | 20 | #define TYPE_BIN_ADDR 0xE030 |
ffxx68 | 0:07819bc70660 | 21 | |
ffxx68 | 0:07819bc70660 | 22 | // bit timings |
ffxx68 | 5:062962db7a48 | 23 | #define BIT_DURATION (8*250) // us, PC1403 |
ffxx68 | 5:062962db7a48 | 24 | #define SYNC_DURATION 1 // seconds |
ffxx68 | 0:07819bc70660 | 25 | #define N_SYNC_BITS SYNC_DURATION * 1000000 / BIT_DURATION |
ffxx68 | 5:062962db7a48 | 26 | #define MAX_BIT_TIME_ERR 50000 // timing error, per bit: 50ms - UNLIKELY!! |
ffxx68 | 0:07819bc70660 | 27 | |
ffxx68 | 0:07819bc70660 | 28 | #define argP "" // main NOT using command-line input arguments |
ffxx68 | 0:07819bc70660 | 29 | |
ffxx68 | 0:07819bc70660 | 30 | //////////////////////////////////////////////////////////////////////////////// |
ffxx68 | 0:07819bc70660 | 31 | // Excerpts from Pocket-Tools source code below |
ffxx68 | 0:07819bc70660 | 32 | // https://www.peil-partner.de/ifhe.de/sharp/ |
ffxx68 | 0:07819bc70660 | 33 | |
ffxx68 | 0:07819bc70660 | 34 | /* Regular Errors such as EOF and recoverable such as End of sync *MUST* have a lower value then ERR_OK */ |
ffxx68 | 0:07819bc70660 | 35 | #define ERR_NOK -1 /* also normal EOF */ |
ffxx68 | 0:07819bc70660 | 36 | #define ERR_OK 0 |
ffxx68 | 0:07819bc70660 | 37 | |
ffxx68 | 0:07819bc70660 | 38 | /* Unexpected NOT recoverable error *MUST* have a higher value then ERR_OK */ |
ffxx68 | 0:07819bc70660 | 39 | #define ERR_SYNT 1 /* arguments missed, syntax error */ |
ffxx68 | 0:07819bc70660 | 40 | #define ERR_ARG 3 /* arguments problem, pocket not implemented */ |
ffxx68 | 0:07819bc70660 | 41 | #define ERR_FILE 5 /* File I-O */ |
ffxx68 | 0:07819bc70660 | 42 | #define ERR_MEM 6 /* Line to long, buffer overflow, too much lines */ |
ffxx68 | 0:07819bc70660 | 43 | #define ERR_FMT 7 /* Source file format or size */ |
ffxx68 | 0:07819bc70660 | 44 | #define ERR_SUM 8 /* Constellation will generate a checksum error on PC */ |
ffxx68 | 0:07819bc70660 | 45 | |
ffxx68 | 0:07819bc70660 | 46 | #define TYPE_NOK 0 |
ffxx68 | 0:07819bc70660 | 47 | #define TYPE_BIN 1 |
ffxx68 | 0:07819bc70660 | 48 | #define TYPE_IMG 2 |
ffxx68 | 0:07819bc70660 | 49 | #define TYPE_VAR 3 /* one variable block without file type and name*/ |
ffxx68 | 0:07819bc70660 | 50 | #define TYPE_DAT 4 |
ffxx68 | 0:07819bc70660 | 51 | #define TYPE_RSV 5 /* For PC-1500, other re-transfer: IMG-compatible */ |
ffxx68 | 0:07819bc70660 | 52 | #define TYPE_ASC 6 /* For PC-E/G/1600 ASCII Data */ |
ffxx68 | 0:07819bc70660 | 53 | #define TYPE_BAS 7 /* For PC-E/G/1600 ASCII Source */ |
ffxx68 | 0:07819bc70660 | 54 | #define TYPE_TXT 8 /* For GRP_NEW, GRP_EXT and GRP_E text modus Image Data */ |
ffxx68 | 0:07819bc70660 | 55 | #define TYPE_DEF 9 /* For PC-1500 software, binary image for definable keys */ |
ffxx68 | 0:07819bc70660 | 56 | #define TYPE_DIM 10 /* For PC-1500 Quick-Tape, binary image of all dimensioned data variables */ |
ffxx68 | 0:07819bc70660 | 57 | #define TYPE_MEM 0x6E /* Tables and Variables of PC-1150, subtype of TYPE_IMG */ |
ffxx68 | 0:07819bc70660 | 58 | #define TYPE_CRD 0x6A /* PC-1100 full RAM card, subtype of TYPE_IMG */ |
ffxx68 | 0:07819bc70660 | 59 | #define TYPE_TEL 0x61 /* Telephone database export */ |
ffxx68 | 0:07819bc70660 | 60 | #define TYPE_SCD 0x62 /* Scheduler database export */ |
ffxx68 | 0:07819bc70660 | 61 | #define TYPE_NOT 0x64 /* Notes database export */ |
ffxx68 | 0:07819bc70660 | 62 | |
ffxx68 | 0:07819bc70660 | 63 | #define GRP_OLD 0x20 |
ffxx68 | 0:07819bc70660 | 64 | #define GRP_NEW 0x70 |
ffxx68 | 0:07819bc70660 | 65 | #define GRP_EXT 0x72 |
ffxx68 | 0:07819bc70660 | 66 | #define GRP_DAT 0x74 |
ffxx68 | 0:07819bc70660 | 67 | #define GRP_16 0x10 /* PC-1600 */ |
ffxx68 | 0:07819bc70660 | 68 | #define GRP_E 0x05 /* PC-E500 */ |
ffxx68 | 0:07819bc70660 | 69 | #define GRP_G 0x08 /* PC-G850, E2xx */ |
ffxx68 | 0:07819bc70660 | 70 | |
ffxx68 | 0:07819bc70660 | 71 | #define IDENT_PC1211 0x80 |
ffxx68 | 0:07819bc70660 | 72 | #define IDENT_PC121_DAT 0x8F /* one variable length block only, not tested */ |
ffxx68 | 0:07819bc70660 | 73 | |
ffxx68 | 0:07819bc70660 | 74 | #define IDENT_PC1500 0xA |
ffxx68 | 0:07819bc70660 | 75 | #define IDENT_PC15_BIN 0xA0 |
ffxx68 | 0:07819bc70660 | 76 | #define IDENT_PC15_BAS 0xA1 |
ffxx68 | 0:07819bc70660 | 77 | #define IDENT_PC15_RSV 0xA2 |
ffxx68 | 0:07819bc70660 | 78 | #define IDENT_PC15_DEF 0xA3 |
ffxx68 | 0:07819bc70660 | 79 | #define IDENT_PC15_DAT 0xA4 |
ffxx68 | 0:07819bc70660 | 80 | |
ffxx68 | 0:07819bc70660 | 81 | #define IDENT_QTAPE 0x0AA0 |
ffxx68 | 0:07819bc70660 | 82 | #define IDENT_QT_BAS 0x42 // B |
ffxx68 | 0:07819bc70660 | 83 | #define IDENT_QT_BIN 0x4D // M |
ffxx68 | 0:07819bc70660 | 84 | #define IDENT_QT_RSV 0x52 // R |
ffxx68 | 0:07819bc70660 | 85 | #define IDENT_QT_DIM 0x44 // D = V DIM |
ffxx68 | 0:07819bc70660 | 86 | #define IDENT_QT_DAT 0x56 /* V NOT implemented, UNSUPPORTED! */ |
ffxx68 | 0:07819bc70660 | 87 | |
ffxx68 | 0:07819bc70660 | 88 | #define IDENT_OLD_BAS 0x20 |
ffxx68 | 0:07819bc70660 | 89 | #define IDENT_OLD_PAS 0x21 |
ffxx68 | 0:07819bc70660 | 90 | #define IDENT_OLD_DAT 0x24 |
ffxx68 | 0:07819bc70660 | 91 | #define IDENT_OLD_BIN 0x26 |
ffxx68 | 0:07819bc70660 | 92 | |
ffxx68 | 0:07819bc70660 | 93 | #define IDENT_NEW_TEL 0x61 // MEMO TEL NEW DB |
ffxx68 | 0:07819bc70660 | 94 | #define IDENT_NEW_SCD 0x62 // MEMO SCDL NEW DB |
ffxx68 | 0:07819bc70660 | 95 | #define IDENT_NEW_NOT 0x64 // MEMO NOTE NEW DB |
ffxx68 | 0:07819bc70660 | 96 | #define IDENT_NEW_CRD 0x6A // BASIC RAM Card IN |
ffxx68 | 0:07819bc70660 | 97 | #define IDENT_OLD_MEM 0x6E // MEM OLD DB, all Tables |
ffxx68 | 0:07819bc70660 | 98 | |
ffxx68 | 0:07819bc70660 | 99 | #define IDENT_NEW_BAS 0x70 |
ffxx68 | 0:07819bc70660 | 100 | #define IDENT_NEW_PAS 0x71 |
ffxx68 | 0:07819bc70660 | 101 | #define IDENT_EXT_BAS 0x72 |
ffxx68 | 0:07819bc70660 | 102 | #define IDENT_EXT_PAS 0x73 |
ffxx68 | 0:07819bc70660 | 103 | #define IDENT_NEW_DAT 0x74 // IDENT_DATA_VAR 0xEF removed |
ffxx68 | 0:07819bc70660 | 104 | #define IDENT_NEW_BIN 0x76 |
ffxx68 | 0:07819bc70660 | 105 | #define IDENT_NEW_CSL 0x7A // CASL or CAP-X CMT |
ffxx68 | 0:07819bc70660 | 106 | #define IDENT_UNKNOWN 0x100 |
ffxx68 | 0:07819bc70660 | 107 | |
ffxx68 | 0:07819bc70660 | 108 | #define IDENT_ST 0x124 /* SuperTape */ |
ffxx68 | 0:07819bc70660 | 109 | |
ffxx68 | 0:07819bc70660 | 110 | #define IDENT_PC16_CAS 0x00 /* PC-1600 ASCII Data or BASIC Image */ |
ffxx68 | 0:07819bc70660 | 111 | #define IDENT_PC16_DAT 0x08 /* Special binary data format PC-1600 */ |
ffxx68 | 0:07819bc70660 | 112 | #define IDENT_E_ASC 0x04 /* ASCII Data or Text Modus BASIC/ASM/C Source */ |
ffxx68 | 0:07819bc70660 | 113 | #define IDENT_E_BAS 0x02 /* Return from Bas2Img also in the format of PC-1475 */ |
ffxx68 | 0:07819bc70660 | 114 | #define IDENT_E_BIN 0x01 /* Binary Data, use --addr parameter 2nd time for entry address */ |
ffxx68 | 0:07819bc70660 | 115 | /* also used for Rsv-Data, but different sub id (mode 2) */ |
ffxx68 | 0:07819bc70660 | 116 | #define SYNC_E_HEAD 40 /* additional sync for E-series header block */ |
ffxx68 | 0:07819bc70660 | 117 | #define SYNC_E_DATA 20 /* additional sync for E-series data block */ |
ffxx68 | 0:07819bc70660 | 118 | |
ffxx68 | 0:07819bc70660 | 119 | #define DATA_HEAD_LEN 5 /* length of the header of a data variable element*/ |
ffxx68 | 0:07819bc70660 | 120 | #define DATA_VARIABLE 0xFE00 /* Header element of standard variable, not length */ |
ffxx68 | 0:07819bc70660 | 121 | #define DATA_DBL_LEN 14 /* length of a double numeric data variable element */ |
ffxx68 | 0:07819bc70660 | 122 | #define DATA_STD_LEN 8 /* length of a numeric and standard data variable element*/ |
ffxx68 | 0:07819bc70660 | 123 | #define DATA_NUM_15 0x88 /* ItemLen = Id of numeric data variable of PC-1500 */ |
ffxx68 | 0:07819bc70660 | 124 | |
ffxx68 | 0:07819bc70660 | 125 | #define DATA_NUM 0x98 /* Internal identity of numeric data variable */ |
ffxx68 | 0:07819bc70660 | 126 | #define DATA_STR 0xA8 /* Internal identity of a string data variable */ |
ffxx68 | 0:07819bc70660 | 127 | #define DATA_UNKNOWN 0x00 /* Variable filled with zeros */ |
ffxx68 | 0:07819bc70660 | 128 | |
ffxx68 | 0:07819bc70660 | 129 | #define DATA_STD_STR 0xF5 /* Standard data variable is a string */ |
ffxx68 | 0:07819bc70660 | 130 | #define DATA_EOF 0x0F /* End of variable Data Block */ |
ffxx68 | 0:07819bc70660 | 131 | |
ffxx68 | 0:07819bc70660 | 132 | #define EOF_ASC 0x1A /* End of ASCII transfered files, also CAS: of newer series */ |
ffxx68 | 0:07819bc70660 | 133 | #define EOF_15 0x55 /* End of complete file of PC-1500 */ |
ffxx68 | 0:07819bc70660 | 134 | #define BAS_1500_EOF 0xFF /* one of two bytes */ |
ffxx68 | 0:07819bc70660 | 135 | #define BAS_NEW_EOF 0xFF /* one of two bytes */ |
ffxx68 | 0:07819bc70660 | 136 | #define BAS_OLD_EOF 0xF0 /* one byte only */ |
ffxx68 | 0:07819bc70660 | 137 | |
ffxx68 | 0:07819bc70660 | 138 | #define BLK_OLD_SUM 8 /* Transmission Block (plus checksums), old series bas without, data old/new with checksum reset */ |
ffxx68 | 0:07819bc70660 | 139 | #define BLK_OLD 80 /* Transmission Block (plus checksums) of PC-1500 and old series with checksum reset */ |
ffxx68 | 0:07819bc70660 | 140 | #define BLK_NEW 120 /* Transmission Block (plus checksum) of new series 1260-1475 */ |
ffxx68 | 0:07819bc70660 | 141 | #define BLK_E_DAT 256 /* Checksum of series E500 DAT */ |
ffxx68 | 0:07819bc70660 | 142 | #define BLK_E_HEAD 0x30 /* Length of header1 of series E500, next only after the end of a Transmission Block */ |
ffxx68 | 0:07819bc70660 | 143 | #define BLK_S_HEAD 25 /* Length of SuperTape Header without checksum */ |
ffxx68 | 0:07819bc70660 | 144 | |
ffxx68 | 0:07819bc70660 | 145 | #define SUPT_HEAD_L 26 /* SuperTape length of header block with low byte of checksum included */ |
ffxx68 | 0:07819bc70660 | 146 | #define SUPT_SYN_NB 64 /* SuperTape number of synchronisation char */ |
ffxx68 | 0:07819bc70660 | 147 | #define SUPT_SYNC 0x16 /* SuperTape SYNCHR synchronisation char */ |
ffxx68 | 0:07819bc70660 | 148 | #define SUPT_HEAD 0x2A /* SuperTape SYNPGM start mark of header block */ |
ffxx68 | 0:07819bc70660 | 149 | #define SUPT_DATA 0xC5 /* SuperTape SYNDAT start mark of program/data block */ |
ffxx68 | 0:07819bc70660 | 150 | #define SUPT_END 0x9B /* SuperTape end mark after the checksum of a block */ |
ffxx68 | 0:07819bc70660 | 151 | #define SUPT_FLAGS 0x00 /* SuperTape flag byte */ |
ffxx68 | 0:07819bc70660 | 152 | |
ffxx68 | 0:07819bc70660 | 153 | #define BGNSAMPLES 44 /* first sample byte */ |
ffxx68 | 0:07819bc70660 | 154 | |
ffxx68 | 0:07819bc70660 | 155 | #define AMP_MID 0x80 /* Sample value for silence (all 8-bit) */ |
ffxx68 | 0:07819bc70660 | 156 | #define AMP_HIGH 0xDA /* Sample value for amplitude HIGH */ |
ffxx68 | 0:07819bc70660 | 157 | #define AMP_LOW 0x26 /* Sample value for amplitude LOW */ |
ffxx68 | 0:07819bc70660 | 158 | #define AMP_HIGH_E 0xFC /* Sample value for amplitude HIGH for E-series */ |
ffxx68 | 0:07819bc70660 | 159 | #define AMP_LOW_E 0x04 /* Sample value for amplitude LOW for E-series */ |
ffxx68 | 0:07819bc70660 | 160 | #define AMP_HIGH_121 0xEF /* Sample value for amplitude HIGH for CE-121 */ |
ffxx68 | 0:07819bc70660 | 161 | #define AMP_LOW_121 0x11 /* Sample value for amplitude LOW for CE-121 */ |
ffxx68 | 0:07819bc70660 | 162 | |
ffxx68 | 0:07819bc70660 | 163 | #define ORDER_STD 0 |
ffxx68 | 0:07819bc70660 | 164 | #define ORDER_INV 1 |
ffxx68 | 0:07819bc70660 | 165 | #define ORDER_S 8 /* SuperTape Byte */ |
ffxx68 | 0:07819bc70660 | 166 | #define ORDER_E 9 /* 1600-Series and newer, no nibbles, a byte */ |
ffxx68 | 0:07819bc70660 | 167 | #define ORDER_Q 11 /* Quick-Tape PC-1500a byte */ |
ffxx68 | 0:07819bc70660 | 168 | |
ffxx68 | 0:07819bc70660 | 169 | #define BASE_FREQ1 4000 |
ffxx68 | 0:07819bc70660 | 170 | #define BASE_FREQ2 2500 /* PC-1500 */ |
ffxx68 | 0:07819bc70660 | 171 | #define BASE_FREQ3 3000 /* PC-E-series and newer */ |
ffxx68 | 0:07819bc70660 | 172 | #define BASE_FREQ4 5000 /* Quick-Tape */ |
ffxx68 | 0:07819bc70660 | 173 | #define BASE_FREQS 3600 /* SuperTape */ |
ffxx68 | 0:07819bc70660 | 174 | |
ffxx68 | 0:07819bc70660 | 175 | #define CHAR_SPACE 0x20 |
ffxx68 | 0:07819bc70660 | 176 | #define CHAR_DOT 0x2E |
ffxx68 | 0:07819bc70660 | 177 | #define CHAR_COLON 0x3A |
ffxx68 | 0:07819bc70660 | 178 | #ifdef __linux__ /* path separator */ |
ffxx68 | 0:07819bc70660 | 179 | #define CHAR_SLASH 0x2F |
ffxx68 | 0:07819bc70660 | 180 | //elif defined __APPLE__ |
ffxx68 | 0:07819bc70660 | 181 | #endif |
ffxx68 | 0:07819bc70660 | 182 | #ifdef __APPLE__ |
ffxx68 | 0:07819bc70660 | 183 | #define CHAR_SLASH 0x2F |
ffxx68 | 0:07819bc70660 | 184 | #endif |
ffxx68 | 0:07819bc70660 | 185 | #ifndef CHAR_SLASH /* Windows path separator */ |
ffxx68 | 0:07819bc70660 | 186 | #define CHAR_SLASH 0x5C |
ffxx68 | 0:07819bc70660 | 187 | #endif |
ffxx68 | 0:07819bc70660 | 188 | #define CHAR_UNDERSCORE 0x5F |
ffxx68 | 0:07819bc70660 | 189 | |
ffxx68 | 0:07819bc70660 | 190 | #define cVL 80 /* Constant value for max. length of a data variable */ |
ffxx68 | 0:07819bc70660 | 191 | #define cLL 512 /* Constant value for max. length of CFG-TEXT lines and max. CFG line Nb */ |
ffxx68 | 0:07819bc70660 | 192 | #define cLPF 100 /* Constant value for max. Length of PathFilenames */ |
ffxx68 | 0:07819bc70660 | 193 | |
ffxx68 | 0:07819bc70660 | 194 | #define BAS_EOF_INCL 0x200000 /* debug flag for one included End Mark from Bas2img or Wav2bin */ |
ffxx68 | 0:07819bc70660 | 195 | #define DATA_W2B150 0x8000 /* debug flag for DAT-IMG from Wav2bin 1.5.0 or older */ |
ffxx68 | 0:07819bc70660 | 196 | #define NO_FILE_HEAD 0x4000 /* debug flag, write without file type and -name, 2.variable block */ |
ffxx68 | 0:07819bc70660 | 197 | #define BAS_EXT_FRMT 0x1000 /* debug flag, use FORMAT of BAS_EXT for E-Series */ |
ffxx68 | 0:07819bc70660 | 198 | #define SYNCL_STD 0x400 /* debug flag, for default sync length like the original */ |
ffxx68 | 0:07819bc70660 | 199 | #define SYNCL_TRM 0x200 /* debug flag, for sync length like the Technical Reference Manual */ |
ffxx68 | 0:07819bc70660 | 200 | |
ffxx68 | 0:07819bc70660 | 201 | #define MODE_B22 0 /* PC-1500 */ |
ffxx68 | 0:07819bc70660 | 202 | #define MODE_B21 1 |
ffxx68 | 0:07819bc70660 | 203 | #define MODE_B20 2 |
ffxx68 | 0:07819bc70660 | 204 | #define MODE_B19 3 /* Old series */ |
ffxx68 | 0:07819bc70660 | 205 | #define MODE_B17 4 |
ffxx68 | 0:07819bc70660 | 206 | #define MODE_B16 5 /* File names of new series an data */ |
ffxx68 | 0:07819bc70660 | 207 | #define MODE_B15 6 /* Variable data body new series */ |
ffxx68 | 0:07819bc70660 | 208 | #define MODE_B14 7 /* PC-1403 and newer, reads also B13 */ |
ffxx68 | 0:07819bc70660 | 209 | #define MODE_B13 8 /* PC-1402 */ |
ffxx68 | 0:07819bc70660 | 210 | #define MODE_B9 9 /* PC-E series and newer */ |
ffxx68 | 0:07819bc70660 | 211 | #define MODE_B10 10 /* SuperTape */ |
ffxx68 | 0:07819bc70660 | 212 | #define MODE_B11 11 /* Quick-Tape */ |
ffxx68 | 0:07819bc70660 | 213 | |
ffxx68 | 0:07819bc70660 | 214 | |
ffxx68 | 0:07819bc70660 | 215 | /////////////////////////////////////// |
ffxx68 | 0:07819bc70660 | 216 | // bin-2-wav typedefs |
ffxx68 | 0:07819bc70660 | 217 | typedef struct { |
ffxx68 | 0:07819bc70660 | 218 | // FILE* ptrFd ; /* FILE NOT USED HERE */ |
ffxx68 | 0:07819bc70660 | 219 | uint ident ; |
ffxx68 | 0:07819bc70660 | 220 | uchar mode ; /* Bit writing mode and stop bits*/ |
ffxx68 | 0:07819bc70660 | 221 | uchar mode_h ; /* Bit writing mode and stop bits for the file header*/ |
ffxx68 | 0:07819bc70660 | 222 | ulong nbSync1 ; /* sync bits per second */ |
ffxx68 | 0:07819bc70660 | 223 | ulong nbSync ; /* sync bits for intermediate syncs */ |
ffxx68 | 0:07819bc70660 | 224 | ulong nbByte ; /* size of bytes to write */ |
ffxx68 | 0:07819bc70660 | 225 | ulong total ; /* total bytes written (without checksums) */ |
ffxx68 | 0:07819bc70660 | 226 | long total_diff ; /* difference between bytes read and written (without checksums) */ |
ffxx68 | 0:07819bc70660 | 227 | ulong count ; /* Counter of bytes in a block for the checksum */ |
ffxx68 | 0:07819bc70660 | 228 | ulong sum ; /* Checksum calculated */ |
ffxx68 | 0:07819bc70660 | 229 | ulong block_len ; /* Block length for checksum, variable used for E-Series */ |
ffxx68 | 0:07819bc70660 | 230 | ulong usedat_len ; /* Length of useful data of the next block 1...(0x50), for Qtape L:0...4F */ |
ffxx68 | 0:07819bc70660 | 231 | ulong bitLen ; /* Wave sample blocks per SHARP bit */ |
ffxx68 | 0:07819bc70660 | 232 | bool lastSmpHigh; /* for SuperTape phase switching */ |
ffxx68 | 0:07819bc70660 | 233 | ulong debug ; |
ffxx68 | 0:07819bc70660 | 234 | } FileInfo ; |
ffxx68 | 0:07819bc70660 | 235 | |
ffxx68 | 0:07819bc70660 | 236 | typedef struct { |
ffxx68 | 0:07819bc70660 | 237 | uint stopb1 ; |
ffxx68 | 0:07819bc70660 | 238 | uint stopb2 ; |
ffxx68 | 0:07819bc70660 | 239 | } ModeInfo ; |
ffxx68 | 0:07819bc70660 | 240 | |
ffxx68 | 5:062962db7a48 | 241 | extern FileInfo fileInfo ; // extern, for other modules too |
ffxx68 | 5:062962db7a48 | 242 | |
ffxx68 | 0:07819bc70660 | 243 | /////////////////////////////////////// |
ffxx68 | 0:07819bc70660 | 244 | // static variables |
ffxx68 | 0:07819bc70660 | 245 | static ModeInfo Mode[] = { /* stop bits of first and second nibble */ |
ffxx68 | 0:07819bc70660 | 246 | { 6, 6 }, { 5, 6 }, { 5, 5 }, { 4, 5 }, |
ffxx68 | 0:07819bc70660 | 247 | { 1, 6 }, { 1, 5 }, { 1, 4 }, { 1, 3 }, { 1, 2 } |
ffxx68 | 0:07819bc70660 | 248 | } ; |
ffxx68 | 0:07819bc70660 | 249 | |
ffxx68 | 0:07819bc70660 | 250 | static bool bitMirroring = false ; |
ffxx68 | 0:07819bc70660 | 251 | |
ffxx68 | 5:062962db7a48 | 252 | const static char CodeOld[] = { |
ffxx68 | 0:07819bc70660 | 253 | 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, |
ffxx68 | 0:07819bc70660 | 254 | 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, |
ffxx68 | 0:07819bc70660 | 255 | 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, |
ffxx68 | 0:07819bc70660 | 256 | 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, |
ffxx68 | 0:07819bc70660 | 257 | 0x11,0x14,0x12,0x15,0x18,0x16,0x1F,0x11, // Pos. 0x24 $ 0x19 -> 0x18, 11/2020 |
ffxx68 | 0:07819bc70660 | 258 | 0x30,0x31,0x37,0x35,0x1B,0x36,0x4A,0x38, |
ffxx68 | 0:07819bc70660 | 259 | 0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47, |
ffxx68 | 0:07819bc70660 | 260 | 0x48,0x49,0x1D,0x1C,0x33,0x34,0x32,0x13, |
ffxx68 | 0:07819bc70660 | 261 | 0x1E,0x51,0x52,0x53,0x54,0x55,0x56,0x57, |
ffxx68 | 0:07819bc70660 | 262 | 0x58,0x59,0x5A,0x5B,0x5C,0x5D,0x5E,0x5F, |
ffxx68 | 0:07819bc70660 | 263 | 0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67, |
ffxx68 | 0:07819bc70660 | 264 | 0x68,0x69,0x6A,0x11,0x11,0x11,0x39,0x11, |
ffxx68 | 0:07819bc70660 | 265 | 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, |
ffxx68 | 0:07819bc70660 | 266 | 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, |
ffxx68 | 0:07819bc70660 | 267 | 0x19,0x11,0x1A,0x11,0x11,0x11,0x11,0x11, |
ffxx68 | 0:07819bc70660 | 268 | 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11 |
ffxx68 | 0:07819bc70660 | 269 | } ; |
ffxx68 | 0:07819bc70660 | 270 | |
ffxx68 | 0:07819bc70660 | 271 | |
ffxx68 | 0:07819bc70660 | 272 | //////////////////////////////////////////////////////////////////////////////// |
ffxx68 | 0:07819bc70660 | 273 | // published method |
ffxx68 | 5:062962db7a48 | 274 | int sharp_fileloop ( FileInfo* ptrFile ) ; |
ffxx68 | 5:062962db7a48 | 275 | int FileSend ( void ); |
ffxx68 | 0:07819bc70660 | 276 | |
ffxx68 | 5:062962db7a48 | 277 | // From Pocket Tools |
ffxx68 | 5:062962db7a48 | 278 | int WriteSaveNameToWav (char* ptrName, |
ffxx68 | 5:062962db7a48 | 279 | uchar mode); |
ffxx68 | 5:062962db7a48 | 280 | int WriteFooterToMemoWav ( void ); |
ffxx68 | 5:062962db7a48 | 281 | int WriteSyncToWav (ulong nbSync); |
ffxx68 | 5:062962db7a48 | 282 | int WriteByteSumToWav (ulong value, |
ffxx68 | 5:062962db7a48 | 283 | uchar order, |
ffxx68 | 5:062962db7a48 | 284 | uchar mode); |
ffxx68 | 5:062962db7a48 | 285 | int WriteByteSumToWav (ulong value, |
ffxx68 | 5:062962db7a48 | 286 | uchar order, |
ffxx68 | 5:062962db7a48 | 287 | uchar mode); |
ffxx68 | 0:07819bc70660 | 288 | |
ffxx68 | 0:07819bc70660 | 289 | #endif // SEND_PC1403 |