Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
send_pc1403.h
00001 #ifndef SEND_PC1403 00002 #define SEND_PC1403 00003 00004 #include "mbed.h" 00005 00006 #include "serial_file.h" // file-over-serial 00007 #ifndef FILE_BUF_SIZE 00008 #include "bin_file.h" // hardcoded file stream 00009 #endif 00010 00011 #include "bit_send.h" 00012 00013 // remapping to MBed types 00014 #define uchar uint8_t 00015 #define ushort uint16_t 00016 #define uint uint32_t 00017 #define ulong uint32_t 00018 00019 #define PC_ID 1403 00020 #define TYPE_BIN_ADDR 0xE030 00021 00022 // bit timings 00023 #define BIT_DURATION (8*250) // us, PC1403 00024 #define SYNC_DURATION 1 // seconds 00025 #define N_SYNC_BITS SYNC_DURATION * 1000000 / BIT_DURATION 00026 #define MAX_BIT_TIME_ERR 50000 // timing error, per bit: 50ms - UNLIKELY!! 00027 00028 #define argP "" // main NOT using command-line input arguments 00029 00030 //////////////////////////////////////////////////////////////////////////////// 00031 // Excerpts from Pocket-Tools source code below 00032 // https://www.peil-partner.de/ifhe.de/sharp/ 00033 00034 /* Regular Errors such as EOF and recoverable such as End of sync *MUST* have a lower value then ERR_OK */ 00035 #define ERR_NOK -1 /* also normal EOF */ 00036 #define ERR_OK 0 00037 00038 /* Unexpected NOT recoverable error *MUST* have a higher value then ERR_OK */ 00039 #define ERR_SYNT 1 /* arguments missed, syntax error */ 00040 #define ERR_ARG 3 /* arguments problem, pocket not implemented */ 00041 #define ERR_FILE 5 /* File I-O */ 00042 #define ERR_MEM 6 /* Line to long, buffer overflow, too much lines */ 00043 #define ERR_FMT 7 /* Source file format or size */ 00044 #define ERR_SUM 8 /* Constellation will generate a checksum error on PC */ 00045 00046 #define TYPE_NOK 0 00047 #define TYPE_BIN 1 00048 #define TYPE_IMG 2 00049 #define TYPE_VAR 3 /* one variable block without file type and name*/ 00050 #define TYPE_DAT 4 00051 #define TYPE_RSV 5 /* For PC-1500, other re-transfer: IMG-compatible */ 00052 #define TYPE_ASC 6 /* For PC-E/G/1600 ASCII Data */ 00053 #define TYPE_BAS 7 /* For PC-E/G/1600 ASCII Source */ 00054 #define TYPE_TXT 8 /* For GRP_NEW, GRP_EXT and GRP_E text modus Image Data */ 00055 #define TYPE_DEF 9 /* For PC-1500 software, binary image for definable keys */ 00056 #define TYPE_DIM 10 /* For PC-1500 Quick-Tape, binary image of all dimensioned data variables */ 00057 #define TYPE_MEM 0x6E /* Tables and Variables of PC-1150, subtype of TYPE_IMG */ 00058 #define TYPE_CRD 0x6A /* PC-1100 full RAM card, subtype of TYPE_IMG */ 00059 #define TYPE_TEL 0x61 /* Telephone database export */ 00060 #define TYPE_SCD 0x62 /* Scheduler database export */ 00061 #define TYPE_NOT 0x64 /* Notes database export */ 00062 00063 #define GRP_OLD 0x20 00064 #define GRP_NEW 0x70 00065 #define GRP_EXT 0x72 00066 #define GRP_DAT 0x74 00067 #define GRP_16 0x10 /* PC-1600 */ 00068 #define GRP_E 0x05 /* PC-E500 */ 00069 #define GRP_G 0x08 /* PC-G850, E2xx */ 00070 00071 #define IDENT_PC1211 0x80 00072 #define IDENT_PC121_DAT 0x8F /* one variable length block only, not tested */ 00073 00074 #define IDENT_PC1500 0xA 00075 #define IDENT_PC15_BIN 0xA0 00076 #define IDENT_PC15_BAS 0xA1 00077 #define IDENT_PC15_RSV 0xA2 00078 #define IDENT_PC15_DEF 0xA3 00079 #define IDENT_PC15_DAT 0xA4 00080 00081 #define IDENT_QTAPE 0x0AA0 00082 #define IDENT_QT_BAS 0x42 // B 00083 #define IDENT_QT_BIN 0x4D // M 00084 #define IDENT_QT_RSV 0x52 // R 00085 #define IDENT_QT_DIM 0x44 // D = V DIM 00086 #define IDENT_QT_DAT 0x56 /* V NOT implemented, UNSUPPORTED! */ 00087 00088 #define IDENT_OLD_BAS 0x20 00089 #define IDENT_OLD_PAS 0x21 00090 #define IDENT_OLD_DAT 0x24 00091 #define IDENT_OLD_BIN 0x26 00092 00093 #define IDENT_NEW_TEL 0x61 // MEMO TEL NEW DB 00094 #define IDENT_NEW_SCD 0x62 // MEMO SCDL NEW DB 00095 #define IDENT_NEW_NOT 0x64 // MEMO NOTE NEW DB 00096 #define IDENT_NEW_CRD 0x6A // BASIC RAM Card IN 00097 #define IDENT_OLD_MEM 0x6E // MEM OLD DB, all Tables 00098 00099 #define IDENT_NEW_BAS 0x70 00100 #define IDENT_NEW_PAS 0x71 00101 #define IDENT_EXT_BAS 0x72 00102 #define IDENT_EXT_PAS 0x73 00103 #define IDENT_NEW_DAT 0x74 // IDENT_DATA_VAR 0xEF removed 00104 #define IDENT_NEW_BIN 0x76 00105 #define IDENT_NEW_CSL 0x7A // CASL or CAP-X CMT 00106 #define IDENT_UNKNOWN 0x100 00107 00108 #define IDENT_ST 0x124 /* SuperTape */ 00109 00110 #define IDENT_PC16_CAS 0x00 /* PC-1600 ASCII Data or BASIC Image */ 00111 #define IDENT_PC16_DAT 0x08 /* Special binary data format PC-1600 */ 00112 #define IDENT_E_ASC 0x04 /* ASCII Data or Text Modus BASIC/ASM/C Source */ 00113 #define IDENT_E_BAS 0x02 /* Return from Bas2Img also in the format of PC-1475 */ 00114 #define IDENT_E_BIN 0x01 /* Binary Data, use --addr parameter 2nd time for entry address */ 00115 /* also used for Rsv-Data, but different sub id (mode 2) */ 00116 #define SYNC_E_HEAD 40 /* additional sync for E-series header block */ 00117 #define SYNC_E_DATA 20 /* additional sync for E-series data block */ 00118 00119 #define DATA_HEAD_LEN 5 /* length of the header of a data variable element*/ 00120 #define DATA_VARIABLE 0xFE00 /* Header element of standard variable, not length */ 00121 #define DATA_DBL_LEN 14 /* length of a double numeric data variable element */ 00122 #define DATA_STD_LEN 8 /* length of a numeric and standard data variable element*/ 00123 #define DATA_NUM_15 0x88 /* ItemLen = Id of numeric data variable of PC-1500 */ 00124 00125 #define DATA_NUM 0x98 /* Internal identity of numeric data variable */ 00126 #define DATA_STR 0xA8 /* Internal identity of a string data variable */ 00127 #define DATA_UNKNOWN 0x00 /* Variable filled with zeros */ 00128 00129 #define DATA_STD_STR 0xF5 /* Standard data variable is a string */ 00130 #define DATA_EOF 0x0F /* End of variable Data Block */ 00131 00132 #define EOF_ASC 0x1A /* End of ASCII transfered files, also CAS: of newer series */ 00133 #define EOF_15 0x55 /* End of complete file of PC-1500 */ 00134 #define BAS_1500_EOF 0xFF /* one of two bytes */ 00135 #define BAS_NEW_EOF 0xFF /* one of two bytes */ 00136 #define BAS_OLD_EOF 0xF0 /* one byte only */ 00137 00138 #define BLK_OLD_SUM 8 /* Transmission Block (plus checksums), old series bas without, data old/new with checksum reset */ 00139 #define BLK_OLD 80 /* Transmission Block (plus checksums) of PC-1500 and old series with checksum reset */ 00140 #define BLK_NEW 120 /* Transmission Block (plus checksum) of new series 1260-1475 */ 00141 #define BLK_E_DAT 256 /* Checksum of series E500 DAT */ 00142 #define BLK_E_HEAD 0x30 /* Length of header1 of series E500, next only after the end of a Transmission Block */ 00143 #define BLK_S_HEAD 25 /* Length of SuperTape Header without checksum */ 00144 00145 #define SUPT_HEAD_L 26 /* SuperTape length of header block with low byte of checksum included */ 00146 #define SUPT_SYN_NB 64 /* SuperTape number of synchronisation char */ 00147 #define SUPT_SYNC 0x16 /* SuperTape SYNCHR synchronisation char */ 00148 #define SUPT_HEAD 0x2A /* SuperTape SYNPGM start mark of header block */ 00149 #define SUPT_DATA 0xC5 /* SuperTape SYNDAT start mark of program/data block */ 00150 #define SUPT_END 0x9B /* SuperTape end mark after the checksum of a block */ 00151 #define SUPT_FLAGS 0x00 /* SuperTape flag byte */ 00152 00153 #define BGNSAMPLES 44 /* first sample byte */ 00154 00155 #define AMP_MID 0x80 /* Sample value for silence (all 8-bit) */ 00156 #define AMP_HIGH 0xDA /* Sample value for amplitude HIGH */ 00157 #define AMP_LOW 0x26 /* Sample value for amplitude LOW */ 00158 #define AMP_HIGH_E 0xFC /* Sample value for amplitude HIGH for E-series */ 00159 #define AMP_LOW_E 0x04 /* Sample value for amplitude LOW for E-series */ 00160 #define AMP_HIGH_121 0xEF /* Sample value for amplitude HIGH for CE-121 */ 00161 #define AMP_LOW_121 0x11 /* Sample value for amplitude LOW for CE-121 */ 00162 00163 #define ORDER_STD 0 00164 #define ORDER_INV 1 00165 #define ORDER_S 8 /* SuperTape Byte */ 00166 #define ORDER_E 9 /* 1600-Series and newer, no nibbles, a byte */ 00167 #define ORDER_Q 11 /* Quick-Tape PC-1500a byte */ 00168 00169 #define BASE_FREQ1 4000 00170 #define BASE_FREQ2 2500 /* PC-1500 */ 00171 #define BASE_FREQ3 3000 /* PC-E-series and newer */ 00172 #define BASE_FREQ4 5000 /* Quick-Tape */ 00173 #define BASE_FREQS 3600 /* SuperTape */ 00174 00175 #define CHAR_SPACE 0x20 00176 #define CHAR_DOT 0x2E 00177 #define CHAR_COLON 0x3A 00178 #ifdef __linux__ /* path separator */ 00179 #define CHAR_SLASH 0x2F 00180 //elif defined __APPLE__ 00181 #endif 00182 #ifdef __APPLE__ 00183 #define CHAR_SLASH 0x2F 00184 #endif 00185 #ifndef CHAR_SLASH /* Windows path separator */ 00186 #define CHAR_SLASH 0x5C 00187 #endif 00188 #define CHAR_UNDERSCORE 0x5F 00189 00190 #define cVL 80 /* Constant value for max. length of a data variable */ 00191 #define cLL 512 /* Constant value for max. length of CFG-TEXT lines and max. CFG line Nb */ 00192 #define cLPF 100 /* Constant value for max. Length of PathFilenames */ 00193 00194 #define BAS_EOF_INCL 0x200000 /* debug flag for one included End Mark from Bas2img or Wav2bin */ 00195 #define DATA_W2B150 0x8000 /* debug flag for DAT-IMG from Wav2bin 1.5.0 or older */ 00196 #define NO_FILE_HEAD 0x4000 /* debug flag, write without file type and -name, 2.variable block */ 00197 #define BAS_EXT_FRMT 0x1000 /* debug flag, use FORMAT of BAS_EXT for E-Series */ 00198 #define SYNCL_STD 0x400 /* debug flag, for default sync length like the original */ 00199 #define SYNCL_TRM 0x200 /* debug flag, for sync length like the Technical Reference Manual */ 00200 00201 #define MODE_B22 0 /* PC-1500 */ 00202 #define MODE_B21 1 00203 #define MODE_B20 2 00204 #define MODE_B19 3 /* Old series */ 00205 #define MODE_B17 4 00206 #define MODE_B16 5 /* File names of new series an data */ 00207 #define MODE_B15 6 /* Variable data body new series */ 00208 #define MODE_B14 7 /* PC-1403 and newer, reads also B13 */ 00209 #define MODE_B13 8 /* PC-1402 */ 00210 #define MODE_B9 9 /* PC-E series and newer */ 00211 #define MODE_B10 10 /* SuperTape */ 00212 #define MODE_B11 11 /* Quick-Tape */ 00213 00214 00215 /////////////////////////////////////// 00216 // bin-2-wav typedefs 00217 typedef struct { 00218 // FILE* ptrFd ; /* FILE NOT USED HERE */ 00219 uint ident ; 00220 uchar mode ; /* Bit writing mode and stop bits*/ 00221 uchar mode_h ; /* Bit writing mode and stop bits for the file header*/ 00222 ulong nbSync1 ; /* sync bits per second */ 00223 ulong nbSync ; /* sync bits for intermediate syncs */ 00224 ulong nbByte ; /* size of bytes to write */ 00225 ulong total ; /* total bytes written (without checksums) */ 00226 long total_diff ; /* difference between bytes read and written (without checksums) */ 00227 ulong count ; /* Counter of bytes in a block for the checksum */ 00228 ulong sum ; /* Checksum calculated */ 00229 ulong block_len ; /* Block length for checksum, variable used for E-Series */ 00230 ulong usedat_len ; /* Length of useful data of the next block 1...(0x50), for Qtape L:0...4F */ 00231 ulong bitLen ; /* Wave sample blocks per SHARP bit */ 00232 bool lastSmpHigh; /* for SuperTape phase switching */ 00233 ulong debug ; 00234 } FileInfo ; 00235 00236 typedef struct { 00237 uint stopb1 ; 00238 uint stopb2 ; 00239 } ModeInfo ; 00240 00241 extern FileInfo fileInfo ; // extern, for other modules too 00242 00243 /////////////////////////////////////// 00244 // static variables 00245 static ModeInfo Mode[] = { /* stop bits of first and second nibble */ 00246 { 6, 6 }, { 5, 6 }, { 5, 5 }, { 4, 5 }, 00247 { 1, 6 }, { 1, 5 }, { 1, 4 }, { 1, 3 }, { 1, 2 } 00248 } ; 00249 00250 static bool bitMirroring = false ; 00251 00252 const static char CodeOld[] = { 00253 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, 00254 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, 00255 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, 00256 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, 00257 0x11,0x14,0x12,0x15,0x18,0x16,0x1F,0x11, // Pos. 0x24 $ 0x19 -> 0x18, 11/2020 00258 0x30,0x31,0x37,0x35,0x1B,0x36,0x4A,0x38, 00259 0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47, 00260 0x48,0x49,0x1D,0x1C,0x33,0x34,0x32,0x13, 00261 0x1E,0x51,0x52,0x53,0x54,0x55,0x56,0x57, 00262 0x58,0x59,0x5A,0x5B,0x5C,0x5D,0x5E,0x5F, 00263 0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67, 00264 0x68,0x69,0x6A,0x11,0x11,0x11,0x39,0x11, 00265 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, 00266 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, 00267 0x19,0x11,0x1A,0x11,0x11,0x11,0x11,0x11, 00268 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11 00269 } ; 00270 00271 00272 //////////////////////////////////////////////////////////////////////////////// 00273 // published method 00274 int sharp_fileloop ( FileInfo* ptrFile ) ; 00275 int FileSend ( void ); 00276 00277 // From Pocket Tools 00278 int WriteSaveNameToWav (char* ptrName, 00279 uchar mode); 00280 int WriteFooterToMemoWav ( void ); 00281 int WriteSyncToWav (ulong nbSync); 00282 int WriteByteSumToWav (ulong value, 00283 uchar order, 00284 uchar mode); 00285 int WriteByteSumToWav (ulong value, 00286 uchar order, 00287 uchar mode); 00288 00289 #endif // SEND_PC1403
Generated on Sat Jul 16 2022 05:01:30 by
1.7.2