Move
#07
07 июня 1997 |
|
C-DOS MODEM - Что такое C-DOS? Установка режимов. Каким образом C-DOS осуществляет передачу данных?
C-DOS МОДЕМ ────────────────────────────────────────── (c) Ars В этом номере я продолжаю описание C-DOS модема. Прежде всего скажу пару слов об самой программе. Самая первая программа поддержки (также как и первая схема C-DOS модема) принадлежит московской фирме "Аллегро" (не путать с минской ALIBRO). Кстати все ли знают, что такое C-DOS? Вообще-то это аббревиатура от Communication Data Operating System, что в переводе само по себе не нуждается, однако как бы намекает на то, что черточка в сокращении CDOS никчему. Ну да ладно, с черточкой этой... Итак, основные кодовые доработки и дизайн C-DOS'а сделал Robert & Modem'Co под мудрым руководством KSA. И это произошло, судя по дате копирайта аж в 1994 году. С тех пор много воды утекло и много пива выпито... Я повидал кучу версий C-DOS'а, а именно: 2.00, 2.50, 3.00, 3.33, 3.34, 1.05, 1.06, 1.07, 1.10. Это все - московские версии и указаны они, так сказать, в порядке увеличения наворотов (глюков :-). Описывать, что за они и к чему я не буду, об этом можно прочитать из московских сетевых газет. Хочу лишь обратить внимание на один факт: в наворачивании or/and/xor обезглючивании C-DOS'а приняла участие толпа народа, а именно: FANTOMASSOFT, КОЛОВОРАТЪ & Wolk, MPR, etc. Было сделана масса полезных вещей, типа спикерфона, файла HISTORY, устранен конфликт АОН'а и модема и т.д. Менюшка с копирайтом, которая появляется при загрузке C-DOS'а, уже не могла вместить всех желающих, и потому она была благоразумно расширена и растянута. Между тем, несмотря на все эти весьма полезные новшества, не было сделано элементарного обезглючивания этой действительно всем нужной програмки. Глюки и глючки кочевали из одной версии в другую, бережно сохраняясь и приумножаясь. :( И еще одно наблюдение, которое можно сделать невооруженным глазом: все основные процедуры C-DOS'а, как в версии 2.00, так и в 2.50, 3.00,..., короче во всех остальных тоже, находятся по одним и тем же адресам в памяти. О чем это говорит? Есть одна небольшая идейка... Да никто никогда в глаза не видал исходника программы C-DOS! Все основные доработки программы выполнялись в самом популярном на сегодняшний день ассемблере под названием STS!...;-( Вообщем, понятно куда я клоню. Если вам действительно нужен новый C-DOS, то дело только в процедурах взаимодействия с железом. Оболочка - это дело ерундовое, ее может написать любой кодер. А вот копануть железо поглубже, это уж извините, будет посложнее. Это вам не оболочки кодировать ;-) Так что, я обращаюсь ко всем 2day real software & hardware crackers: что, слабо ломануть C-DOS'ку??? На сегодняшний день, на мое предложение отклинулась только группа E-Mage из Гродно, за что ей огромное спасибо! Для затравки опишу каким образом C-DOS осуществляет передачу данных. Я привожу здесь исходник процедуры передачи, полученный путем дизассемблирования. Некоторые команды (ненужные на мой взгляд?) я взял в комментарии. Честно говоря, я не думаю, что таким способом обеспечивается точная длительность сигнала в тактах либо обеспечивается что-то вроде компенсации переходных процессов. Но может быть я и не прав или пока что не разобрался :( ;Procedure Transmit DI LD HL,(Start) ;рассчитываем LD DE,(Length) ;адрес конца ADD HL,DE ;блока LD (End),HL LD B,#40 ;начало блока- Header EXX ;длинный пилотон ;LD A,(IX+#00) CALL Out1 EXX DJNZ Header Next_N LD HL,(Start) ;начало байта- CALL Out0 ;стартовый пилотон Next LD DE,(End) ;XOR A ;XOR A BIT 0,(HL) CALL Z,Out0 ;передача 0-го CALL NZ,Out1 ;бита байта ;LD A,(IX+#00) BIT 1,(HL) CALL Z,Out0 ;следующий бит CALL NZ,Out1 ;байта ;LD A,(IX+#00) BIT 2,(HL) CALL Z,Out0 ;и т.д. CALL NZ,Out1 ;LD A,(IX+#00) BIT 3,(HL) CALL Z,Out0 CALL NZ,Out1 ;LD A,(IX+#00) BIT 4,(HL) CALL Z,Out0 CALL NZ,Out1 ;LD A,(IX+#00) BIT 5,(HL) CALL Z,Out0 CALL NZ,Out1 LD A,(IX+#00) BIT 6,(HL) CALL Z,Out0 CALL NZ,Out1 ;LD A,(IX+#00) BIT 7,(HL) CALL Z,Out0 CALL NZ,Out1 ;LD BC,#0000 XOR A OR (HL) EX DE,HL CALL PE,Out0 ;9-й бит! CALL PO,Out1 ;бит четности ;LD A,(IX+#00) INC DE ;LD BC,#0000 ;в версии Normal- PilotE NOP ;CALL Out1 (пило- NOP ;тон конца байта) NOP SBC HL,DE ;проверка endblok EX DE,HL ;в версии Normal- NextJP JP NZ,Next ;or JP NZ,Next1 CALL Out1 ;конец блока RET Out0 ;LD BC,#0000 ;формирование LD A,(Sys) ;меандра для XOR #80 ;передачи сигнала OUT (#EF),A ;логического 0 CALL Out0H ;(высокая частота) XOR #80 OUT (#EF),A CALL Out0L XOR A ;установка флага Z RET Out1 LD A,(Sys) ;формирование XOR #80 ;меандра для OUT (#EF),A ;передачи сигнала CALL Out1H ;логической 1 XOR #80 ;(низкая частота) OUT (#EF),A CALL Out1L RET Out0H LD B,#2C ;условно: передний DJNZ $ ;фронт импульса ;NOP ;для логич.0 RET Out0L LD B,#24 ;задний фронт DJNZ $ ;импульса для ;NOP ;логич.0 (поляр- RET ;ность - противо- ;ложная) Out1H LD B,#5C DJNZ $ ;передний фронт ;NOP ;импульса для RET ;передачи лог.1 Out1L LD B,#55 DJNZ $ ;задний фронт ;NOP ;импульса для RET ;передачи лог.1 Start DW 0 Length DW 0 End DW 0 Sys DB #20 ;состояние порта ;модема Теперь комментарии к процедуре. Прежде всего обратите внимание, как реализована частотная модуляция при передаче - процедуры Out0 и Out1: логические 0 и 1 передаются (модулируются) в виде частотной посылки (форма сигнала - практически меандр), причем частота передачи сигнала "1" примерно в 2 раза меньше, чем "0". В принципе здесь имеются все аналогии с форматом передачи на ленте. По телефонной линии сигнал идет уже в виде синусоидального сигнала. А входной усилитель модема преобразовывает (демодулирует) этот сигнал снова в прямоугольный. Передача информации осуществляется блоками. При установлении коннекта передается заголовок с системными параметрами: тип версии, номер телефона, пароль и т.п. При передаче файла блок имеет размер 1 сектор + 2 байта контрольной суммы. Начало блока заносится в переменную Begin, длина - в Length. В начале передачи блока сразу посылается для синхронизации пилотон (метка Header), представляющий собой меандр определенной длительности с частотой, соответствуюшей логической 1. Далее передается более короткий стартовый пилотон с частотой логического 0. После этого передается сам байт побитно, с 0-го по 7-й бит. По завершению передачи всех 8 бит посылается бит четности: это логич.0, если в байте четное число установленных битов либо логич.1, если число единииц - нечетно Наконец посылается завершающий пилотон для байта (логич.1). В самом конце блока посылается такой же пилотон как признак конца передачи. Данная процедура Transmit соответствует режиму Turbo. В режимах Normal и Turbo2 есть некоторые отличия. В режиме Usual, не совместимом с Turbo, синхронизирующие сигналы посылаются при передаче каждого байта. В режиме Turbo2, совместимом с Turbo, используется автоматическая настройка длительности фронтов в процедуре приема, а начальные задержки уменьшены. В режиме Turbo2 скорость автоматически устанавливается по max для данной линии, что, кстати, очень актуально при пересылке больших файлов. Время передачи блока в 16 Кб при отсутствии ошибок: ┌─────────────┬──────────────┐ │ version │ time │ ├─────────────┼──────────────┤ │ Usual │ 1 мин. 50 с. │ │ Turbo │ 1 мин. 30 с. │ │ Turbo 2 │ 1 мин. 08 с. │ └─────────────┴──────────────┘ В режиме Turbo2 при установлении оптимальной скорости происходит ступенчатое снижение частоты передачи, вплоть до Turbo-версии. В заключении приведу процедуру установки режимов (только ту их часть, что касается процедуры Transmit). ;Procedure Set_Version LD A,(Vers) ;номер версии: OR A ;0-Usual JP Z,SetV_N ;1-Turbo DEC A ;2-Turbo2 JP Z,SetV_T SetV_T2 Call SetPil0 LD BC,#2220 LD DE,#5622 ;min длительность CALL SetOut ;заднего фронта . . . RET SetV_T Call SetPil0 CALL SetOut0 . . . RET SetV_N LD A,#CD ;у каждого байта LD HL,Out1 ;есть пилотон! Call SetPil Call SetOut0 . . . RET SetOut0 LD BC,#2C24 ;значения длитель- LD DE,#5C5F ;ности фронтов для SetOut LD A,B ;Usual и Turbo LD (OutOH+1),A LD A,C ;расставляем LD (OutOL+1),A ;константы LD A,D ;передачи LD (Out1H+1),A LD A,E LD (Out1L+1),A RET SetPil0 XOR A ;для Turbo-версий LD HL,0 ;нет пилотона для LD DE,Next ;каждого байта SetPil LD (PilotE),A LD (PilotE+1),HL LD (NextJP+1),DE RET На этом пока что все, но я надеюсь, что совместными усилиями мы быстро разберемся с C-DOS'ом. Ваши идеи, предложения и процедуры принимаются на FTL BBS в файлах FOR_CDOS - файлы НЕ секретные.
Другие статьи номера:
Письмо - Письмо от Postman'a в газету. |
От редакции - сомненение в целессобразности газеты. |
C-DOS MODEM - Что такое C-DOS? Установка режимов. Каким образом C-DOS осуществляет передачу данных? |
Музыкантам - PROFESSIONAL SOUND CREATOR demo realise (E-mage) : основ- ные параметры , горячие клавиши редактора. |
CHEAT - Несколько полезных советов для любителей MORTAL COMBAT , STRIP REVERSI. |
Реклама - Реклама и объявления. |
Похожие статьи:
В этот день... 21 ноября