RS232 w stacji Timex FDD3000

Stacja dysków Timex FDD 3000 jest bardzo cennym urządzeniem peryferyjnym znacznie rozszerzającym możliwości ZX Spectrum. W swoim wnętrzu ma wbudowane dwa porty szeregowe z 9-bolcowymi gniazdami zamontowanymi na tylnej ściance obudowy. Uwaga! Gniazdko w FDD3000 różni się od standardowego, więc trzeba samodzielnie wykonać kabelek łączący. Są one opisane jako CH A i CH B. Nikogo nie trzeba chyba przekonywać do tego, że są one "oknem na świat" dla ZX Spectrum, którego producent nie wyposażył w żadne standardowe łącze transmisji danych. Poniżej opiszę rozłożenie poszczególnych sygnałów w gniazdkach oraz sposób korzystania z interfejsu za pomocą poleceń Basic-a. Źródłem informacji jest podręcznik użytkownika stacji FDD 3000.

                                        

   Gniazdko w FDD3000
--------------------------                       
\ 1    2    3    4    5 /                  Schemat kabla łączącego FDD z innym
 \                     /                   interfejsem RS232 (25- i 9- bolcowym)
  \  6    7    8    9 /
   \-----------------/                    FDD3000                      IBM PC   IBM PC
                                          RS232 (9-pin)          RS232 (25-pin) (9-pin)
 __________________________________
|Nóżka| Opis sygnału              |       TxD   2 ---------------- RxD -- 3 ------ 2     
|---------------------------------|       RxD   3 ---------------- TxD -- 2 ------ 3
|  1  | N.C.     (nie podłączone) |       DTR   4 ---------------- CTS -- 5 ------ 8 
|  2  | TX DATA   (transmisja d.) |       CTS   5 ---------------- DTR -- 20 ----- 4
|  3  | RX DATA   (odbiór danych) |       GND   7 ---------------- GND -- 7 ------ 5
|  4  | DTR                       |       +12V  9 ---------------- DSR -- 6 ------ 6 
|  5  | CTS                       |                      
|  6  | N.C.                      |
|  7  | GND                (masa) |               
|  8  | N.C.                      |
|  9  | +12V                      |
 ----------------------------------

Do prawidłowej współprarcy ZX Spectrum z innymi urządzeniami wyposażonymi w złącze RS 232C potrzebny jest kablelek, którego schemat znajduje się powyżej. Należy go wykonać porządnie, gdyż zwarcia mogą zaszkodzić układom elektronicznym. Tu mam jedną uwagę. Dostępne powszechnie wtyczki 9-bolcowe nie nadają się dobrze do podłączenia z FDD3000, gdyż gniazdka w stacji dysków są dość głęboko i nie mieści się obudowa wtyczek. Najlepiej byłoby przerobić stację tak, by gniazdka zamontować bezpośrednio w otworach obudowy, a nie na płytce.

Jeśli nie potrafisz samodzielnie zrobić takiego przewodu - napisz do mnie, pomogę Ci.
Sam przewód nie wystarczy do transmicji danych; potrzebne jest oprogramowanie. System operacyjny TOS traktuje złacza szeregowe tak jak pliki, ale z pewnymi różnicami. Przed transmisją danych trzeba łącze "sformatować" (brzmi to dziwnie, prawda?), czyli ustalić parametry transmisji takie jak długość słowa, kontrola przepływu danych, bity stopu itp. Robi się to poleceniem:

FORMAT * ":CH_A"
(lub CH_B dla drugiego portu szeregowego). Komputer zada serię pytań, na które trzeba odpowiedzieć ręcznie z klawiatury. Oto one:
1. Text or Bytes (T/B) ?
2. Auto line feed (Y/N) ?
3. XON / XOFF (Y/N) ?
4. Input with wait (Y/N) ?
5. Baud rate (A-P) ?
6. Parity (E=Even, O=Odd, N=None) ?
7. Stop bits (A=1, B=1.5, C=2) ?
8. Bits/char (A=5, B=6, C=7, D=8) ?
A krótkie wyjaśnienia, o co w tych pytaniach chodzi.
  1. Dane przesyłane przez port szeregowy są "rozbijane" na pojedyncze bity. Do zakodowania wszystkich znaków ASCII (bez polskich ogonków) wystarczy 7-bitów danych. Taki sposób przesyłania danych tekstowych (Text) pozwala skrócić trochę czas transmisji. Do przesyłania innych danych np. plików z programami, obrazkami itp. trzeba ustawić ten parametr na Bytes.
  2. Pytanie 2 pojawia się tylko wtedy, gdy na 1 udzielono odpowiedzi Text. Odpowiedź twierdząca spowoduje automatyczne dodawanie kodu 0Ah na końcu każdej linii tekstu.
  3. Włącza lub wyłącza programową kontrolę przepływu danych.
  4. Włączenie tej opcji powoduje, że komputer czeka na odbiór danych, co zapobiega "gubieniu" informacji.
  5. Baud rate to szybkość portu. Odpowiedzią jest litera od A do P. Poszczególnym literkom są przyporządkowane następujące szybkości:
    LiteraSzybkość [bps]
    A50
    B75
    C110
    D134.5
    E150
    F200
    G300
    H600
    I1200
    J1800
    K2400
    L3600
    M4800
    N7200
    O9600
    P19200

  6. Włączenie/wyłączenie sposobu kontroli parzystości. Zazwyczaj ustawia się None.
  7. Ustalenie ilości bitów stopu. Do wyboru są 1, 1.5 lub 2. Domyślną (i najczęście stosowaną) wartością jest 1.
  8. Ustawienie długości słowa. Zazwyczaj długość jednego słowa wynosi 8 bitów. Jednak niektóre urządzenia mogą wymagać innej wartości, stąd też możliwość wyboru.

Domyślne ustawienia portów szeregowych (po włączeniu zasilania i wczytaniu TOS-u) wyglądają następująco:
1. Rodzaj danych: Bajty (Bytes)
2. Wyłączone Auto line feed (No)
3. Wyłaczone XON/XOFF (No)
4. Input with wait (Yes)
5. Szybkość 1200 bps
6. Bez kontroli parzystości (None)
7. 1 bit stopu
8. 8-bitowe słowa

System operacyjny TOS standardowo przyporządkowuje portom szeregowym nazwy CH_A i CH_B (można stosować je z rozszerzeniem SCP, które jest zarezerwowane dla portów We/Wy). Znajdują się one w hierarchii plików tam, gdzie nazwy dyskietek. Ścieżka dostępu (ang. path) do portów ":CH_A" i ":CH_B". Dwukropek w systemie TOS oznacza najbardziej podstawowy poziom (ang. root). Nic nie stoi na przeszkodzie, aby zmienić nazwy CH_A i CH_B na jakieś inne komendą LET *. Niestety po ponownym włączeniu komputera system przyjmie znów standardowe nazwy.
Proste przesyłanie danych przez port szeregowy CH_A realizują dwa poniżej przedstawione programy w BASIC-u. Pierwszy wysyła przez port znaki wprowadzane z klawiatury, drugi zaś pozwala odbierać znaki i pokazuje je na ekranie. W obu jest błąd - po zakończeniu programu (wciskając BREAK) trzeba ręcznie zamknąć kanał komunikacyjny komendą CLOSE #*1. A oto programy (autorstwa firmy Timex):
RS Trans (wysyła znaki):

10 OPEN# *1 ; ":ch_a" ; o
20 IF INKEY$<>"" THEN GO TO 20
30 IF INKEY$="" THEN GO TO 30
40 PRINT INKEY$;
50 PRINT * #1 ; INKEY$
60 GO TO 20

RS Receiv (odbiera znaki):
10 OPEN# *1 ; "ch_a"; i ; 1
20 INPUT * #1 ; A$
30 PRINT A$;
40 GO TO 20

Powyższy opis dotyczy przenoszenia danych bajt po bajcie. Nie jest to gotowy przepis na przeniesienie gier czy obrazków, ale stanowi dość mocną bazę do napisania własnego oprogramowania.
Problemem może okazać się jeszcze to, że potrzebne jest oprogramowanie po stronie peceta. Zabrałem się kiedyś za pisanie, stworzyłem podstawowe procedury w Turbo Pascalu, ale przerwałem pracę - łatwiej jest użyć dobrego programu terminalowego i przesyłać pliki jako zbiory tekstowe.

Powrót do strony głównej...