Last modified by Max on 2025/02/28 23:56

From version 2.1
edited by Max
on 2025/02/25 00:22
Change comment: There is no comment for this version
To version 16.1
edited by Max
on 2025/02/28 23:56
Change comment: There is no comment for this version

Summary

Details

Page properties
Content
... ... @@ -18,33 +18,254 @@
18 18  
19 19  == Актуальность облачных сервисов для ретрокомпьютеров ==
20 20  
21 -С развитием облачных технологий они стали незаменимыми не только для современных устройств, но и для ретро-компьютеров 1980-х годов. Несмотря на их возраст, такие машины продолжают использоваться энтузиастами, коллекционерами и исследователями истории вычислительной техники. Однако работа с файлами и программами на старых ПК, которые изначально не имели доступа к интернету и использовали устаревшие носители (дискеты, магнитные ленты, жесткие диски малых объемов), сегодня значительно упрощается благодаря облачным сервисам.
21 +С развитием облачных технологий они стали актуальны не только для современных устройств, но и для ретро-компьютеров 1970-1990х годов. Несмотря на их возраст, такие машины продолжают использоваться энтузиастами, коллекционерами и исследователями истории вычислительной техники. Однако работа с файлами и программами на старых ПК, которые изначально не имели доступа к интернету и использовали устаревшие носители (дискеты, магнитные ленты, жесткие диски малых объемов), затруднена и лишена современного комфорта, который могут предоставить облачные сервисы сегодня.
22 22  
23 -Во-первых, облачные платформы играют ключевую роль в распространении программного обеспечения и образов дисков для ретро-компьютеров. Архивы игр, операционных систем и утилит хранятся в облаке, откуда их можно легко загрузить на современные машины и затем перенести на старый компьютер с помощью адаптеров, эмуляторов дискет или специализированных устройств вроде SD-картриджей.
23 +**Облачные сервисы** могли бы стать решением этой проблемы, предоставляя **удобный доступ** к программному обеспечению, образам дисков, драйверам и документам. Однако на сегодняшний день специализированные облачные платформы для ретро-компьютеров отсутствуют. Энтузиастам приходится искать обходные пути: использовать старые протоколы передачи данных, адаптеры или локальные серверы.
24 24  
25 -Во-вторых, облака облегчают процесс обмена файлами между энтузиастами ретро-компьютеров. Ранее для этого использовались физические носители, требовавшие пересылки по почте или прямого обмена на встречах. Теперь же образы дискет, ROM-файлы и текстовые документы можно загружать в облачные хранилища и предоставлять доступ другим пользователям мгновенно, что существенно ускоряет процесс обмена информацией.
25 +Во-первых, облачные платформы могут играть ключевую роль в распространении программного обеспечения и образов дисков для ретро-компьютеров. Архивы игр, операционных систем и утилит хранятся в облаке, откуда их можно легко загрузить и на современные машины и на на старый компьютер с помощью сетевого доступа.
26 26  
27 +Во-вторых, облака облегчают процесс обмена файлами между энтузиастами ретро-компьютеров. Ранее для этого использовались физические носители, требовавшие пересылки по почте или прямого обмена на встречах. Теперь же образы дискет, ROM-файлы и текстовые документы можно загрузить в облачное хранилище и предоставлять доступ другим пользователям мгновенно, что существенно ускоряет процесс обмена информацией.
28 +
27 27  Наконец, облачные технологии помогают в резервном копировании ценных данных. Ретро-компьютеры подвержены физическому износу, а дискеты и винчестеры стареют, увеличивая риск потери информации. Использование облачного хранилища позволяет сохранить образы дисков, редкие программы и пользовательские наработки, обеспечивая их доступность даже в случае отказа оригинального оборудования.
28 28  
29 29  Таким образом, облачные сервисы становятся важным инструментом для сообщества любителей старых компьютеров, облегчая сохранение, передачу и распространение программного обеспечения и данных. Они помогают преодолеть технические ограничения прошлых десятилетий, давая ретро-компьютерам новую жизнь в цифровую эпоху.
30 30  
31 -== Sub-paragraph ==
33 +**Создание облачного сервиса**, адаптированного под старые системы, позволило бы не только упростить доступ к данным, но и обеспечить их сохранность, защитив важные архивы от утери.
32 32  
33 -Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
35 +== MAXIOL Landisk Technolog как решение проблемы ==
34 34  
35 -=== Sub-sub paragraph ===
37 +Для решения проблемы предоставления облачных сервисов для ретро-компьютеров я разработал уникальную технологию блочного доступа к файлам-образам дисков — **MAXIOL Landisk Technology®**. Она предназначена для удобного хранения, передачи и работы с образами дисков, обеспечивая надежное взаимодействие старых компьютеров с современными облачными сервисами.
36 36  
37 -Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
39 +**Концепция технологии** основана на блочном доступе к файлам в [[**архиве MAXIOL**>>https://mirrors.pdp-11.ru/]], что позволяет пользователям легко загружать, управлять и использовать образы дисков без необходимости локального хранения больших объемов данных. Благодаря этому старые компьютеры, изначально не рассчитанные на подключение к современным сетевым хранилищам, могут получать доступ к облачным данным так, будто они находятся на физических носителях.
38 38  
41 +Одним из ключевых преимуществ **MAXIOL Landisk Technology®** является возможность создания персонализированных облачных хранилищ. Пользователи могут настраивать свои архивы, управлять доступом и адаптировать их под конкретные задачи, будь то работа с операционными системами, программным обеспечением или играми для ретро-компьютеров.
39 39  
40 -= Paragraph 2 =
43 +Эта технология открыта для свободного использования на любых старых компьютерах, поддерживающих блочную работу с носителями. Реализация и использование **MAXIOL Landisk Technology®** возможны при соблюдении условий лицензионного соглашения, обеспечивающего прозрачность и безопасность применения технологии.
41 41  
42 -Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
45 +Таким образом, **MAXIOL Landisk Technology®** открывает новые возможности для энтузиастов ретро-компьютеров, коллекционеров и исследователей цифровой истории, позволяя без лишних сложностей интегрировать старую технику в современную экосистему облачных сервисов.
43 43  
44 -== Sub-paragraph ==
47 +== История создания MAXIOL Landisk Technology® ==
45 45  
46 -Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
49 +Идея создания облачного сервиса **MAXIOL Landisk Technology®** возникла как логическое продолжение развития серии контроллеров **AZ®**, разработанных для работы с компьютерами **PDP-11** и их многочисленными советскими клонами. Эти контроллеры стали настоящим прорывом в области ретро-компьютеров, позволив использовать современные технологии хранения данных и сетевого взаимодействия на устаревших машинах.
47 47  
48 -== Sub-paragraph ==
51 +Разработка серии **AZ®** началась в **2019 году**, когда инженеры **Макс Багаев (Россия)** и **Александр Забайрацкий (Казахстан)** поставили перед собой задачу создания универсального контроллера для работы с шиной **QBUS** и её аналогами. Первые модели быстро получили признание в сообществе ретро-компьютеров, а в **2022 году** разработку продолжил только **Макс Багаев**, расширяя функциональность устройств. На данный момент произведено **более 500 контроллеров различных модификаций**, что делает серию **AZ®** самым массовым оборудованием для **PDP-11** за последние годы.
49 49  
50 -Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
53 +Контроллеры **AZ®** создавались для множества советских моделей, включая **ДВК-1, ДВК-2, ДВК-3, ДВК-4, Квант-4С, Электроника-60, Электроника 60М, Славутич ПК-1 и УКНЦ**. Кроме того, была разработана особая версия **AZBK®** с расширенным функционалом, специально адаптированная для **BK-0010, BK-0010.01 и BK-0011M**.
54 +
55 +Главная особенность контроллеров **AZ®** — это поддержка **блочного доступа с произвольным доступом**, обеспечивающего более высокий уровень абстракции, где образы дисков хранятся в виде файлов на файловой системе устройства. Это позволило значительно упростить работу с дисками и гибко управлять данными. Более того, контроллеры получили **поддержку сети Ethernet**, что открыло новые возможности для удаленного доступа и передачи файлов.
56 +
57 +Ключевые характеристики контроллеров **AZ®** включают:
58 +
59 +* **16-битную обработку данных**, что обеспечивает эффективные вычисления.
60 +* **Модульную конструкцию**, облегчающую обслуживание и модернизацию.
61 +* **Поддержку до 32 устройств** на одной **MicroSD-карте**.
62 +* Совместимость с операционными системами **RT-11 и RSX-11M**.
63 +* Поддержку **16-, 18- и 22-битных адресных шин**.
64 +* **Открытое API**, позволяющее разработчикам писать собственное ПО и драйверы.
65 +* **Энергонезависимую память**, доступную через API.
66 +* **Встроенные часы реального времени (RTC)** с возможностью получения времени через **NTP-серверы**.
67 +
68 +Возможность сетевого подключения контроллеров **AZ®** и их использование в качестве блочных устройств привела к созданию **MAXIOL Landisk Technology®** — облачного сервиса, который позволяет старым компьютерам напрямую работать с удалёнными образами дисков. Этот сервис стал естественным развитием технологий **AZ®**, расширяя их функционал и делая ретро-компьютеры более удобными для современных пользователей.
69 +
70 +Сегодня **MAXIOL Landisk Technology®** открывает перед владельцами старых ПК новые возможности, обеспечивая удобный доступ к программному обеспечению, образам дисков и архивам данных, помогая сохранить историю вычислительной техники и сделать её более доступной.
71 +
72 += Техническое описание MAXIOL Landisk Technology® =
73 +
74 +=== **MAXIOL Landisk Technology® — инновационное облачное решение для ретро-компьютеров** ===
75 +
76 +**MAXIOL Landisk Technology®** — это классическая **клиент-серверная технология**, разработанная для обеспечения удобного и эффективного взаимодействия старых компьютеров с удалёнными хранилищами данных. Она позволяет ретро-системам работать с образами дисков через сеть, как если бы они были физически подключены.
77 +
78 +==== **Архитектура системы** ====
79 +
80 +Система состоит из двух ключевых компонентов:
81 +
82 +1. **Клиент** — это сетевой интерфейс, установленный на ретро-компьютере, который эмулирует **блочный доступ** к файлу-образу диска. Он выполняет роль виртуального накопителя, заменяя традиционные носители информации (дискеты, жесткие диски, магнитные ленты), но при этом позволяет работать с данными в облаке.
83 +1. **Сервер** — программное обеспечение **MAXIOL Landisk Technology® AZSERVER**, разработанное в **MAXIOL**. Этот сервер управляет файлами-образами дисков, обрабатывает запросы клиентов и обеспечивает надёжную передачу данных.
84 +
85 +==== **Механизм работы** ====
86 +
87 +Передача данных между клиентом и сервером происходит **блочными структурами** размером **512 байт**, дополненными **контрольной и командной информацией**. Такой формат позволяет:
88 +
89 +* **Обеспечить совместимость** с существующими файловыми системами и методами хранения данных, используемыми в ретро-компьютерах.
90 +* **Повысить надёжность передачи данных**, так как контрольная информация помогает обнаруживать и устранять возможные ошибки при обмене.
91 +* **Гарантировать высокую скорость работы**, так как блочная передача эффективно распределяет нагрузку на сеть и сервер.
92 +
93 +==== **Преимущества использования MAXIOL Landisk Technology®** ====
94 +
95 +===== **Отказ от устаревших носителей** =====
96 +
97 +(% class="wikigeneratedid" %)
98 +Технология избавляет от необходимости использовать физические дискеты, жёсткие диски и магнитные ленты, которые со временем выходят из строя и требуют сложного обслуживания.
99 +
100 +===== **Простота интеграции** =====
101 +
102 +(% class="wikigeneratedid" %)
103 +MAXIOL Landisk Technology® совместима с различными моделями ретро-компьютеров, поддерживающими работу с блочными устройствами, что делает её универсальным решением.
104 +
105 +===== **Гибкость и масштабируемость** =====
106 +
107 +(% class="wikigeneratedid" %)
108 +Пользователи могут хранить неограниченное количество образов дисков на сервере, управлять ими и быстро переключаться между ними без необходимости физического переноса данных.
109 +
110 +===== **Удалённый доступ** =====
111 +
112 +(% class="wikigeneratedid" %)
113 +Благодаря сетевому подключению пользователи могут работать с образами дисков из любой точки мира, используя свои ретро-компьютеры так, будто они подключены к локальным накопителям.
114 +
115 +===== **Надёжность и сохранность данных** =====
116 +
117 +(% class="wikigeneratedid" %)
118 +Использование облачного хранилища минимизирует риск потери данных, а встроенные механизмы проверки целостности обеспечивают их корректное хранение и передачу.
119 +
120 +===== **Поддержка ретро-экосистемы** =====
121 +
122 +(% class="wikigeneratedid" %)
123 +MAXIOL Landisk Technology® помогает сохранять цифровое наследие, предоставляя удобный и современный способ работы с устаревшими вычислительными системами.
124 +
125 +
126 +==== **Перспективы развития** ====
127 +
128 +В будущем планируется расширение возможностей технологии, включая:
129 +
130 +* Поддержку **новых протоколов связи** для улучшенной совместимости с различными ретро-компьютерами.
131 +* Развитие **системы авторизации и управления доступом**, чтобы обеспечить безопасное совместное использование облачного хранилища.
132 +* Оптимизацию работы **в низкоскоростных сетях**, что позволит использовать сервис даже на устаревших интернет-подключениях.
133 +* Интеграция с поисковой системой [[Архива MAXIOL>>https://mirrors.pdp-11.ru/]].
134 +
135 +Таким образом, **MAXIOL Landisk Technology®** открывает перед владельцами ретро-компьютеров **новую эру облачного взаимодействия**, делая их работу с данными более удобной, надёжной и безопасной.
136 +
137 +== DNS имя и TCP порт для подключения к MAXIOL Landisk Technology® ==
138 +
139 +1. **DNS имя**: **landisk.maxiol.com**
140 +Это доменное имя указывает на сервер **MAXIOL Landisk Technology®**, позволяя клиентским устройствам автоматически подключаться к серверу без ввода IP-адреса. Оно облегчает доступ к облачному хранилищу для ретро-компьютеров.
141 +1. **TCP Порт**: **34162**
142 +Порт **34162** используется для безопасной и надежной передачи данных между клиентом и сервером через протокол **TCP**. Он обеспечивает стабильное соединение и исключает конфликты с другими приложениями.
143 +
144 +При подключении клиент разрешает доменное имя в IP-адрес, затем устанавливает соединение с сервером через порт **34162**, что позволяет начать обмен блоками данных между сервером и ретро-компьютером.
145 +
146 +== Структура запроса ==
147 +
148 +В **MAXIOL Landisk Technology®** как клиент, так и сервер написаны на языке C, что позволяет эффективно управлять памятью и работать с низкоуровневыми операциями ввода/вывода. Структуры запросов, отправляемых на сервер, имеют строгую формализованную форму, которая обеспечивает правильную передачу данных между клиентом и сервером. Эти структуры определяются с учетом специфики языка C, включая синтаксис описания структур данных и использование указателей.
149 +
150 +
151 +{{code language="c++"}}
152 +// структура пакета запроса
153 +typedef __packed struct landisk_request
154 +{
155 + unsigned int num_block; // номер блока (32 бита)
156 + unsigned short int command; // команда
157 + unsigned char reserved[32]; // зарезервировано
158 + unsigned char data[512]; // данные - если они отправляются
159 + char path[386]; // путь до диска
160 + unsigned short int crc; // CRC команды
161 +} landisk_request_t;
162 +{{/code}}
163 +
164 +при открытии файла блок данных (data[512]) рассматривается как пакет информации следующей структуры
165 +
166 +{{code language="c++"}}
167 +// структура пакета открытия файла, информационные параметры
168 +typedef __packed struct landisk_request_status
169 +{
170 + unsigned long timestamp; // локальное время контроллера (unix-time)
171 + unsigned long uptime; // аптайм в секундах
172 + unsigned long ip_addr; // локальный ip адрес контроллера
173 + unsigned long dns_srv1; // ip адреса DNS-серверов
174 + unsigned long dns_srv2;
175 + unsigned short int tzone; // таймзона в минутах
176 + unsigned short int platform; // номер платформы
177 + unsigned short int controller; // тип контроллера
178 + unsigned short int version; // версия прошивки контроллера
179 + char build[32]; // дата билда прошивки контроллера
180 + char url[64]; // URL производителя контроллера
181 +} landisk_request_status_t;
182 +{{/code}}
183 +
184 +пакет информации настоятельно рекомендуется заполнять полностью
185 +\\~/~/ platform - номер платформы
186 +1 - PDP-11 - БК 10/11M
187 +2 - PDP-11 - остальные -  ДВК Э60 УКНЦ оригинальные машины итд
188 +3 - MSX
189 +\\для добавления вашей платформы пишите в комментарии к этой статье.
190 +\\~/~/ controller - тип контроллера
191 +1 - AZБК
192 +2 - AZ - для всех остальных PDP-11 машин
193 +3 - Carnivore2+
194 +\\для добавления вашего контроллера пишите в комментарии к этой статье.
195 +
196 +=== Команды ===
197 +
198 +{{code language="c++"}}
199 +// команды
200 +#define LANDISK_CMD_OPEN 1 // в ответ успешность/ошибка, и если успешно - размер диска
201 +#define LANDISK_CMD_READ 2 // чтение блока
202 +#define LANDISK_CMD_WRITE 3 // запись блока
203 +#define LANDISK_CMD_CLOSE 4 // закрытие файла
204 +#define LANDISK_CMD_OPENDIR 5 // открыть оглавление по указанному пути
205 +#define LANDISK_CMD_READDIR 6 // прочитать одну запись оглавления в буфер
206 +#define LANDISK_CMD_SEARCH_REQ 7 // послать запрос поиска
207 +#define LANDISK_CMD_READ_SREQ 8 // прочитать одну запись результата поиска в буфер
208 +{{/code}}
209 +
210 +
211 +== Структура ответа ==
212 +
213 +Формат ответа
214 +
215 +{{code language="c++"}}
216 +// структура пакета ответа с данными
217 +typedef __packed struct landisk_answer
218 +{
219 + unsigned short int result; // результат
220 + unsigned char data[512]; // принятые данные
221 + unsigned short int crc; // CRC ответа
222 +} landisk_answer_t;
223 +{{/code}}
224 +
225 +=== Статус файла ===
226 +
227 +при открытии файла, сервер возвращает статус файла, в блоке данных (data[512])
228 +
229 +{{code language="c++"}}
230 +// структура пакета ответа статуса файла
231 +typedef __packed struct landisk_answer_status
232 +{
233 + unsigned char fattr; // File attribute
234 + unsigned short int fdate; // Fat date
235 + unsigned short int ftime; // Fat time
236 + unsigned int fsize; // File size
237 +} landisk_answer_status_t;
238 +{{/code}}
239 +
240 +=== Коды результатов выполнения команд ===
241 +
242 +{{code language="c++"}}
243 +// ответы
244 +#define LANDISK_ANS_OK 0x0000 // команда выполнена успешно
245 +#define LANDISK_ANS_ERROR 0x0001 // флаг ошибки, устанавливается при любой ошибке
246 +#define LANDISK_ANS_ACCESS_DENIED 0x0002 // нет доступа, устанавливается при любой ошибке доступа
247 +#define LANDISK_ANS_NEED_REG 0x0004 // нет доступа - нужна регистрация
248 +#define LANDISK_ANS_RO_ONLY 0x0008 // нет доступа на запись- данный диск только для чтения
249 +#define LANDISK_ANS_NOT_EXISTS 0x0010 // нет данного образа - неверный путь до файла образа или директории
250 +{{/code}}
251 +
252 +=== Стратегия работы ===
253 +
254 +~1. первая команда должна быть открытие файла (LANDISK_CMD_OPEN)
255 +при запросе на открытие надо указать блок параметров (landisk_reqest_status_t)
256 +в ответ будет прислан блок landisk_answer_t но data[512] надо рассматривать как landisk_answer_status_t
257 +2. далее можно посылать команды чтения
258 +3. на данный момент [февраль 2025] поддержаны команды LANDISK_CMD_OPEN, LANDISK_CMD_READ, LANDISK_CMD_WRITE, LANDISK_CMD_CLOSE
259 +4. В конце работы желательно (но не обязательно) послать команды закрытия дисков.
260 +
261 +=== Ограничения ===
262 +
263 +(% class="wikigeneratedid" id="H41E43344043043D43844743543D43844F:1.43D43543143E43B43543510043743043F44043E44143E43243244143543A44343D43444344143E43443D43E43343EIP2843843D43044743544144043043143E44243043544243143B43E43A43043D442438-DDOS43843743043143043D43844243443043D43D44B439IP43D43043D43543A43E44243E44043E43543244043543C44F292.43D43543143E43B435435104424382243243844144F4494384452244143E43543443843D43543D43843943D430IP." %)
264 +~1. не более 100 запросов в секунду с одного IP (иначе сработает блок анти-DDOS и забанит данный IP на некоторое время)
265 +2. не более 10ти "висящих" соединений на IP.
266 +
267 +=== Исходные коды ===
268 +
269 +==== Код подсчета CRC ====
270 +
271 +[[attach:1740422838699-683.cpp||target="_blank"]]
1740422838699-683.cpp
Author
... ... @@ -1,0 +1,1 @@
1 +XWiki.SuperMax
Size
... ... @@ -1,0 +1,1 @@
1 +4.0 KB
Content
... ... @@ -1,0 +1,70 @@
1 +
2 +
3 +//Таблица для рассчета CRC16
4 +const unsigned char auchCRCHi[256]=
5 +{
6 + 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81,
7 + 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0,
8 + 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01,
9 + 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41,
10 + 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81,
11 + 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0,
12 + 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01,
13 + 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40,
14 + 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81,
15 + 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0,
16 + 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01,
17 + 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,
18 + 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81,
19 + 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0,
20 + 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01,
21 + 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,
22 + 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81,
23 + 0x40
24 +};
25 +
26 +const unsigned char auchCRCLo[256]=
27 +{
28 + 0x00, 0xC0, 0xC1, 0x01, 0xC3, 0x03, 0x02, 0xC2, 0xC6, 0x06, 0x07, 0xC7, 0x05, 0xC5, 0xC4,
29 + 0x04, 0xCC, 0x0C, 0x0D, 0xCD, 0x0F, 0xCF, 0xCE, 0x0E, 0x0A, 0xCA, 0xCB, 0x0B, 0xC9, 0x09,
30 + 0x08, 0xC8, 0xD8, 0x18, 0x19, 0xD9, 0x1B, 0xDB, 0xDA, 0x1A, 0x1E, 0xDE, 0xDF, 0x1F, 0xDD,
31 + 0x1D, 0x1C, 0xDC, 0x14, 0xD4, 0xD5, 0x15, 0xD7, 0x17, 0x16, 0xD6, 0xD2, 0x12, 0x13, 0xD3,
32 + 0x11, 0xD1, 0xD0, 0x10, 0xF0, 0x30, 0x31, 0xF1, 0x33, 0xF3, 0xF2, 0x32, 0x36, 0xF6, 0xF7,
33 + 0x37, 0xF5, 0x35, 0x34, 0xF4, 0x3C, 0xFC, 0xFD, 0x3D, 0xFF, 0x3F, 0x3E, 0xFE, 0xFA, 0x3A,
34 + 0x3B, 0xFB, 0x39, 0xF9, 0xF8, 0x38, 0x28, 0xE8, 0xE9, 0x29, 0xEB, 0x2B, 0x2A, 0xEA, 0xEE,
35 + 0x2E, 0x2F, 0xEF, 0x2D, 0xED, 0xEC, 0x2C, 0xE4, 0x24, 0x25, 0xE5, 0x27, 0xE7, 0xE6, 0x26,
36 + 0x22, 0xE2, 0xE3, 0x23, 0xE1, 0x21, 0x20, 0xE0, 0xA0, 0x60, 0x61, 0xA1, 0x63, 0xA3, 0xA2,
37 + 0x62, 0x66, 0xA6, 0xA7, 0x67, 0xA5, 0x65, 0x64, 0xA4, 0x6C, 0xAC, 0xAD, 0x6D, 0xAF, 0x6F,
38 + 0x6E, 0xAE, 0xAA, 0x6A, 0x6B, 0xAB, 0x69, 0xA9, 0xA8, 0x68, 0x78, 0xB8, 0xB9, 0x79, 0xBB,
39 + 0x7B, 0x7A, 0xBA, 0xBE, 0x7E, 0x7F, 0xBF, 0x7D, 0xBD, 0xBC, 0x7C, 0xB4, 0x74, 0x75, 0xB5,
40 + 0x77, 0xB7, 0xB6, 0x76, 0x72, 0xB2, 0xB3, 0x73, 0xB1, 0x71, 0x70, 0xB0, 0x50, 0x90, 0x91,
41 + 0x51, 0x93, 0x53, 0x52, 0x92, 0x96, 0x56, 0x57, 0x97, 0x55, 0x95, 0x94, 0x54, 0x9C, 0x5C,
42 + 0x5D, 0x9D, 0x5F, 0x9F, 0x9E, 0x5E, 0x5A, 0x9A, 0x9B, 0x5B, 0x99, 0x59, 0x58, 0x98, 0x88,
43 + 0x48, 0x49, 0x89, 0x4B, 0x8B, 0x8A, 0x4A, 0x4E, 0x8E, 0x8F, 0x4F, 0x8D, 0x4D, 0x4C, 0x8C,
44 + 0x44, 0x84, 0x85, 0x45, 0x87, 0x47, 0x46, 0x86, 0x82, 0x42, 0x43, 0x83, 0x41, 0x81, 0x80,
45 + 0x40
46 +};
47 +
48 +
49 +unsigned short int crc16(unsigned char *p, unsigned short int len)
50 +{
51 + unsigned short int crc_hi;
52 + unsigned short int crc_lo;
53 + unsigned short int n;
54 +
55 + n = (unsigned short int)len;
56 +
57 + crc_hi = 0xFF;
58 + crc_lo = 0xFF;
59 +
60 + do
61 + {
62 + unsigned short int i = crc_hi ^ *p++;
63 + crc_hi = crc_lo ^ auchCRCHi[i];
64 + crc_lo = auchCRCLo[i];
65 + }
66 + while (--n);
67 +
68 + return ((crc_lo << 8) | crc_hi);
69 +}
70 +