ZXNet эхоконференция «code.zx»


тема: xtr-modem {2/2}



от: 500:812/28.08
кому: Ivan Savin
дата: 23 Feb 1998
----- ПРОГРАММИРОВАHИЕ ----- Для любопытных пользователей сообщаем необходимый минимум информации. Общение с модемом происходит через единственный порт с адресом #B7 (183). IN A,(#B7), если линия не занята модемом Bit7 Bit0 0 0 линия не подключена к модему 0 1 снята трубка паралл. аппарата 1 0 звонок ( возможны глюки ) 1 1 линия свободна IN A,(#B7), если линия занята модемом Bit7 всегда 0 Bit0 через него идут принимаемые данные OUT (#B7),A Bit0 при занятой линии - передаваемые данные, при приеме д.б. =1 при освобожденной линии неактуален Bit1 1-занять линию 0-освободить линию Bit4 биты определяют время, до которого Bit5 аппаратно растянется интервал вре- Bit7 мени между двумя соседними коман- Bit6 дами IN A,(#B7) или OUT (#B7),A Bit7-Bit4 #00 время .000002*16 сек #10 время .000002*15 сек ... #E0 время .000002*1 сек #F0 асинхронный режим, NO WAIT Для случая #F0 ничего не растягивается, все выполняется, как для порта #FE в режи- ме эмуляции VICOMM. Для чего нужны биты 7-4? пример: LD A,#?0 * OUT (#B7),A * IN A,(#B7) ! POP AF IN A,(#B7) ! без аппаратной поддежки для команд, отме- ченых знаком !, период выполненя составит: тактов секунд PENTAGON 11+10=21 .000006 TURBO PENTAGON 11+10=21* .000004 ! SCORPION 12+10=22 .0000063 TURBO SCORPION 12+10=22* .000004 ! KAY 12+10=22 .0000063 TURBO KAY 12+12=24 .0000034 * плюсуется WAIT ! приблизително Для случая XTR период для всех машин уравнивается, увеличиваясь (!) до значе- ния, установленого в битах 7-4 (кроме зна- чения #F0). То же спрведливо для OUT (#B7),A и для любых комбинаций IN/OUT с портом #B7. Примечание_1: естественно, программа долж- на быть писана под худшую машину, чтобы время исполнения команд на этой машине бы- ло меньше, чем установленое время, до ко- торого все растягивается (иначе это будет сжатие!). примечание_2: период без растягивания не должен быть менее .00000229 сек, (8 тактов неTURBO PENTAGONа, 16 тактов TURBO PENTA- GONа), иначе растягивания не произойдет. Пример паузы в .002 секунды: W002 XOR A OUT (#B7),A ; период 32 мкС LD B,62 W002_1 IN A,(#B7) ; 62*.000032=.001984 DJNZ W002_1 ... Hа любой машине это будет .002 сек, не- зависимо от TURBO/неTURBO. Примеры программирования: освободить линию OUT (#B7),#F0 занять линию OUT (#B7),#F3 Hабор номера (WAIT ... в секундах): ADRNUM DB "1234567" DIAL OUT (#B7),#00 ; сброс линии WAIT 0.5 OUT (#B7),#02 ; занять линию LD HL,ADRNUM LD C,7 DIAL7 WAIT 0.5 LD A,(HL) SUB #30 JR NZ,DIAL7_0 LD A,10 ; для нуля-десять DIAL7_0 LD B,A INC HL PUSH HL PUSH BC CALL DIALN ; набор цифры POP BC POP HL DEC C JR NZ,DIAL7 WAIT 0.5 OUT (#B7),#03 RET DIALN OUT (#B7),#00 WAIT .06 OUT (#B7),#02 WAIT .04 DJNZ DIALN1 RET Передача данных (принцип VICOMM): OUT (#B7),#F2 WAIT OUT (#B7),#F3 WAIT повторять по алгоритму Ожидание звонка: WTCALL LD DE,#8180 XOR A OUT (#B7),A WTCL0 LD BC,#FF00 WTCL1 WAIT .002 IN A,(#B7) AND D CP E JR NZ,WTCL2 INC C WTCL2 DJNZ WTCL1 LD A,C CP 30 ; антиглюк JR C,WTCL0 ; нет звонка WTCL3 LD B,0 ; ожидаем конец WTCL4 WAIT .002 ; звонка IN A,(#B7) AND D CP E JR Z,WTCL3 DJNZ WTCL4 ; можно занимать линию RET ! не рекомендуется занимать линию в мо- мент звонка (как-никак 120 вольт !!!), нужно дождаться паузы между звонками (ска- занное справедливо для любого оконечного устройства телефонной линии). __________________________ Вот и всё. -+- iS-DOS 4.5




Темы: Игры, Программное обеспечение, Пресса, Аппаратное обеспечение, Сеть, Демосцена, Люди, Программирование

Похожие статьи:
Обзор - обзор прессы по материалам Российских периодических изданий.
Доска почета - "oVERFILE" всю страну кинули". О Кемеровской Спектрумовской Сцене. Пара слов о писи.
От авторов - То-что спектрум, в общемто мертв, это все уже давно поняли и новостей по этому поводу нет.
Virtual TR-DOS - Перспективы развития.
Авторская программа - Презентация системных программ : Bestseller from Stars, Visual layer Demo.

В этот день...   8 мая