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


тема: Tape in/out



от: Kirill Frolov
кому: Sergei Chikalev
дата: 26 Nov 2001
Hемедленно нажми на RESET, Sergei!

25 Nov 01 00:54, Sergei Chikalev wrote to Kirill Frolov:

KF>> Реально работала программная эмуляция последовательного
KF>> порта (rs232) на 38400. Режим передачи -- полудуплексный.
SC> ... и сдесь подробнее пожалуйста?? И с приерами...


Здесь есть ошибка позволяющая при определённых
обстоятельствах (не проявляющихся при нормальной работе)
переполниться приёмному буферу. Заключается ошибка в
том, что я забыл проверку на максимальное количество
принятых символов. А отключение сигнала RTS по заполнению
буфера есть -- потому если используется аппаратный контроль
потока ничего и не сглючивает, но опасность есть.

Использование аппаратного контроля потока ОБЯЗАТЕЛЬHО.
Или будут байты теряться (полудуплекс!), или нужен специальный
программный протокол. Hапример X-modem работать будет.

Eсли аппаратный контроль потока используется, то лучше соединять
2 таких компутера, чтобы один из них имел АППАРАТHЫЙ ПОРТ.
Hапример спек и пц. Если же через такой "эмулятор" соединить два спека,
то будет конкуренция наблюдаться (полудуплекс!) -- передача данных
будет возможна только если один хочет передавать, а другой слушает,
иначе всё тормозит. При передаче большого количества маленьких блоков
сильно упадёт скорость.

Таким образом для соединения 2-х компутеров типа спека нужно
5 проводов, лучше даже 7 (GND, RTS, CTS, TXD, RXD, DTE, DTR).

Вообще можно и по 3-м проводам сделать чтобы буквы не терялись,
но это уже будет не rs232. Лучше аппаратный порт ставить.

ps: кто не понял -- в викомм-модеме тоже полудуплекс и тоже байты теряются.
Т.е. для использования с MMD достаточно и 3-х проводов.


;--------------------------------------
; RS232 EMULATOR ZX-LINK
;

TXPORT EQU #CFF7

RXMAX EQU 270

ZXL_INI LD A,1
JR ZXL_CTL

ZXL_OFF XOR A

ZXL_CTL ;LD (ZXL_DCD),A
AND #01
RLCA
RLCA
LD (TXMASK),A
IN A,(#1F)
RLCA
RLCA
RLCA
AND #01
RET


; LINE SCAN BC=SIZE D=SPEED CY=NOTHING

LSCAN DI
PUSH IX
PUSH IY
LD HL,RXMAX
LD DE,RXBYTE
PUSH DE
LD IX,(M_BUFF)
LD IY,TXMASK
LD BC,TXPORT
LD A,(TXMASK)
OR #20
OUT (C),A

RXNEXT LD D,#9F ; TIME
RXWAIT IN A,(#FE)
RLA
RET C
IN A,(#FE) ; 25..34 ~40
RLA
RET C
IN A,(#FE)
RLA
RET C
IN A,(#FE)
RLA
RET C
IN A,(#FE)
RLA
RET C
IN A,(#FE)
RLA
RET C
IN A,(#FE)
RLA
RET C
IN A,(#FE)
RLA
RET C
DEC D
JP NZ,RXWAIT ; +14
IN A,(#FE)
RLA
RET C
LD A,(TXMASK)
LD E,A ; +17
IN A,(#FE)
RLA
RET C
OUT (C),E ; +12
IN A,(#FE)
RLA
RET C
LD D,#7 ; +7
IN A,(#FE)
RLA
RET C

RXWAIT1 IN A,(#FE)
RLA
RET C
IN A,(#FE)
RLA
RET C
IN A,(#FE)
RLA
RET C
IN A,(#FE)
RLA
RET C
IN A,(#FE)
RLA
RET C
IN A,(#FE)
RLA
RET C
IN A,(#FE)
RLA
RET C
IN A,(#FE)
RLA
RET C
DEC D
JP NZ,RXWAIT1

RXEND POP BC
EX DE,HL
LD HL,RXMAX
OR A
SBC HL,DE
POP IY
POP IX
JR NZ,RXOK
LD BC,#0101
XOR A
INC A
SCF
RET

RXOK LD D,LINKSPEED
LD B,H
LD C,L
XOR A
INC A
RET

RXBYTE IN A,(#FE)
RLA
JR C,RXBYTE1
DEC SP
DEC SP
JP RXWAIT

RXBYTE1 JR $+2
JR $+2
JR $+2
JR $+2
NOP
IN A,(#FE) ; B0
RLA
RR E
DEC HL
LD A,H
OR L
CP 1
SBC A,A
CPL
AND #20
OR (IY)
OUT (C), A
IN A,(#FE) ; B1
RLA
RR E
LD BC,RXBYTE
PUSH BC
LD BC,TXPORT
JR $+2
JR $+2
JR $+2
IN A,(#FE) ; B2
RLA
RR E
JR $+2
JR $+2
JR $+2
JR $+2
JR $+2
NOP
NOP
IN A,(#FE) ; B3
RLA
RR E
JR $+2
JR $+2
JR $+2
JR $+2
JR $+2
NOP
NOP
IN A,(#FE) ; B4
RLA
RR E
JR $+2
JR $+2
JR $+2
JR $+2
JR $+2
NOP
NOP
IN A,(#FE) ; B5
RLA
RR E
JR $+2
JR $+2
JR $+2
JR $+2
JR $+2
NOP
NOP
IN A,(#FE) ; B6
RLA
RR E
JR $+2
JR $+2
JR $+2
JR $+2
JR $+2
NOP
NOP
IN A,(#FE) ; B7
RLA
RR E
JR $+2
JR $+2
JR $+2
JR $+2
JR $+2
NOP
NOP
IN A,(#FE) ; B STOP
RLA
JR C,RXERR
LD A,E
CPL
LD (IX),A
INC IX
JP RXNEXT

RXERR LD A,(TXMASK)
OUT (C),A
JP RXEND



; SEND BLOCK IN MDMBUFF BC=SIZE

LTRANS DI
PUSH IX
LD E,C
LD D,B
LD IX,(M_BUFF)
LD BC,TXPORT

TXBYTE LD A,(TXMASK)
OR #08
OUT (C),A
LD A,(IX)
CPL
LD L,A
LD H,8
JR $+2
LD A,0

TXBIT RR L
SBC A,A
AND #08
OR 0
TXMASK EQU $-1
OUT (C),A
JP $+3
JP $+3
JP $+3
LD A,0
DEC H
JR NZ,TXBIT

JR $+2
LD A,0
LD A,(TXMASK)
OUT (C),A
JR $+2
JR $+2
JR $+2
INC IX
DEC DE
LD A,D
OR E
JR NZ,TXBYTE

LD B,4
DJNZ $
POP IX
RET




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

Похожие статьи:
Юмор - Ворона, лиса и выборы.
Головоломки - Год рождения, На рыбалке, Только квадраты, Ну и ножницы.
С миру по биту - большой блок посвящен письмам читателей.
Мысли - продолжаем наш прерванный разговор о проблемах образования.
Ликбез - полный диассемблер ПЗУ (часть 23).

В этот день...   20 апреля