|
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. |
Реклама - Реклама и объявления. |
Похожие статьи:
В этот день... 17 ноября