Timex Operating System A.2
  1. Przenoszenie danych między Spectrum i IBM PC
  2. Struktura nagłówka pliku w TOS

TOS jest systemem, który pośredniczy w wymianie danych pomiędzy komputerem a dyskietką. Może system operacyjny to trochę za duże słowo (nie przypomina ani DOS-a ani CP/M-a), ale stanowi potężne rozszerzenie standardowego oprogramowania systemowego. Programiści mogą w łatwy sposób korzystać z funkcji w asemblerze, a zwykli użytkownicy wydają polecenia z poziomu BASIC-a w sposób przypominający bardziej obsługę microdrive'u Sinclair'a. Zanim opiszę polecenia, parę słów o TOSie. Dyskietki sformatowane pod systemem TOS mają pojemność 160kB na każdej stronie (mowa tu o dyskietkach 3-calowych), z czego system zajmuje jakieś 20kB, więc mamy do dyspozycji 140kB wolnej przestrzeni. Stosując inne napędy, np. 3,5" od peceta (80 ścieżkowe) można sformatować dyskietkę na 620kB i będzie ona obsługiwana obustronnie. Dyskietkom podczas formatowania nadaje się etykietę, która służy później do np. zmiany bieżącego napędu. Na dyskietce można tworzyć katalogi (jak w prawdziwym DOS-sie), zapisywać pliki danych i programy oraz kasować je wydając proste polecenia z poziomu BASIC'a. Wszystkie polecenia, które poznałem są wymienione w tabelce poniżej. Jeśli w poleceniach będzie podana tylko nazwa pliku, np. LOAD * "JetPac", to stacja będzie próbowała odczytać plik z bieżącego katalogu. Jeśli plik ten znajduje się na dyskietce w innym napędzie w katalogu GRY, a dyskietka ma etykietę PAWEL, to trzeba podać pełną ścieżkę. Wyglądałoby to tak: LOAD * ":PAWEL:GRY:JetPac". Jak łatwo zauważyć sam dwukropek oznacza katalog główny systemu plików (coś jak / w UNIXsie). Idea TOS-u bardzo mi się podoba, bo można korzystać ze stacji tak jak z magnetofonu, więc nie ma problemu np. z przerabianiem (i pisaniem) własnych programów w BASIC-u. Zaawansowani potrafią zmusić praktycznie każdy program do obsługi FDD3000. Informacje z tej strony powinny wystarczyć już do wykonania podstawowych operacji. Jak tylko dowiem się czegoś nowego, to umieszczę to tutaj. Zajrzyj tu w przyszłości!!!

Przenoszenie oprogramowania z PC na Spectrum

Wszystko, co napisałem poniżej jest wynikiem doświadczeń moich i Małego Ruleza, zatem być może istnieją prostsze i skuteczniejsze sposoby, których zwyczajnie nie znam. Za wszelkie uwagi odnośnie tego tematu będę bardzo wdzięczny.

Generalnie można przenosić dane na 4 różne sposoby:
- łączem szeregowym RS232
- za pomocą dyskietki
- za pośrednictwem taśmy magnetofonowej
- przepisując programy ręcznie :-)

Praktyczne zastosowanie mają w zasadzie dwa pierwsze sposoby, gdyż są względnie szybkie i najmniej kłopotliwe. Od biedy można posłużyć się kasetą magnetofonową, ale zabiera to sporo czasu. Jeśli jednak chcesz posłużyć się taśmą magnetofonową, wypróbuj jak działa doskonały program TAPER (jest do pobrania w sekcji "Różności / Software"), który potrafi wczytywać dane z taśmy na PC, oraz zapisywać dane z plików TAP, SNA, Z80 itp. na taśmę magnetofonową za pomocą karty dźwiękowej zgodnej z Sound Blasterem.

1. RS232 w stacji FDD3000


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ę z dwóch względów. Po pierwsze - łatwiej jest użyć dobrego programu terminalowego i przesyłać pliki jako zbiory tekstowe, po drugie - zafascynowała mnie łatwość przenoszenia danych za pomocą dyskietki, o czym można przeczytać poniżej.

2. Dyskietka 3,5" lub 5,25"


Do przenoszenia danych tą metodą, musisz mieć:
- program do przenoszenia plików pomiędzy formatami TOS i DOS, np. TosDos 1.5
- stacja dyskietek 3" zamontowana w pececie lub stacja 5,25" zamontowana w FDD3000
- jedna wolna dyskietka
- emulator Z80, X128 albo jakis inny pozwalający na zgranie fragmentu pamięci do pliku

Jeśli już mamy to wszystko, możemy przystąpić do działania.
1. Uruchom emulator Z80 i napisz program w BASIC-u
2. Wykonaj polecenie w basicu:

   PRINT PEEK(23731)*256 + PEEK(23730) - 23296

Odczytaną wartość zapisz gdzieś sobie.
3. Wejsdź do funkcji specjalnych (F10 - X) i zgraj do pliku obszar
pamięci od adresu: 5B00 hex (23296 dec) o dlugości wyliczonej w
poprzednim punkcie (od adresu 23296 do wskazywanego przez RAMTOP)
4. Wyjdź z eumulatora.
5. Uruchom program TOSDOS i przegraj plik na dyskietkę spectruma.
6. Na prawdziwym spectrumie napisz polecenie:
        LOAD * "plik" CODE 23296,dlugosc

gdzie dlugość oznacza rozmiar pliku (obliczoną w pkt 2)

Uwagi:
- Powyższy sposób pozwala na przenoszenie programów w BASIC-u, nie udało mi się tym sposobem przenieść gier napisanych w kodzie maszynowym ani grafiki UDG. Mały Rules próbował mi wytłumaczyć, dlaczego, ale nadal nie mogę tego zrozumieć :-) Muszę to samemu rozpracować...
- W programie TosDos przegrywaj plik przy ustawieniach: FORMAT=ZWYKŁY, WSTAWIANIE=NIE

3. Taśma magnetofonowa


Może to wydawać się śmieszne, ale ciekawym pomysłem przesyłanie bloków danych pomiędzy PC a Spectrum za pomocą dźwięku - standardowo używając taśmy magnetofonowej lub bezpośrednio łącząc kartę dźwiękową w PC z wejściem EAR Spectrum (ewentualnie przez dodatkowy wzmacniacz audio). Pośród wszystkich wad, a jest ich wiele, sposób ten ma jedną poważną zaletę: możemy przenieść dowolny plik danych na dowolnie wyposażone Spectrum - każdy komputer ma standardowe układy wejściowe dla magnetofonu i procedury systemowe w ROM-ie do odczytu/zapisu danych.
Aby móc nagrać taśmę z danymi na PC trzeba mieć odpowiednie oprogramowanie. Pośród wielu rozwiązań np. emulator Z80, Hypra Loader itp. jest jeden, bardzo dobry program. Nazywa się Taper i umożliwiwa m.in. odczyt/zapis taśm magnetofonowych, obsługę plików TZX, TAP, konwersję z Z80, SNA itp. Do pracy wymaga tylko MS-DOS (pracuje dobrze pod Windows 9x) i karty zgodnej z Sound Blaster Pro. Umożliwia nagrywanie taśm również w systemie turbo. Doświadczony użytkownik może "w locie" zmienić parametry nagłówków, pojedyncze bajty w plikach, wpływać na parametry nagrywanego sygnału audio. Jednym mankamentem jest obsługa zbliżona do AmigaOS - nie wszyscy użytkownicy Windows potrafią wybrać cokolwiek z menu - trzeba przytrzymać prawy klawisz myszy, najechać na menu u góry ekranu i trzymając go cały czas wybrać polecenie. Program ten jest freeware (postcardware), można go pobrać z mojej strony w dziale "Software".

Nagłówek pliku w TOS vA.2

Tekst powstał na podstawie danych od Jarka Adamskiego, który wyraził zgodę na wykorzystanie swoich materiałów na tej stronie.

Poniżej jest pokazana struktura czterech rodzajów nagłówka. W zależności od typu, jego długość wynosi 5 lub 7 bajtów. Jest taka sama w systemach TOS A.2 i TOS A.4.

Program w BASIC-u:
        DEFB        #00
        DEFW        line,len,prog        ;no autorun when line=0

Tablica danych numerycznych:
        DEFB        #01
        DEFW        len,start(?)

Tablica danych alfanumerycznych:
        DEFB        #02
        DEFW        len,start(?)

Blok danych (np. kod maszynowy, obrazek):
        DEFB        #03
        DEFW        len,start
Objaśnienia:
        len        długość pliku bez nagłówka
        prog        długość programu w BASIC bez obszaru zmiennych
        line        numer linii, od której ma program startować po wczytaniu
        start        adres w pamięci, od którego plik został nagrany

Np. dla programu w BASIC nagłówek (7 bajtów) wygląda tak:
pierwszy bajt = 00
kolejne = linia startu (2 bajty), długość pliku bez nagłówka (2 bajty), długość programu w BASIC-u bez obszaru zmiennych (2 bajty)
razem 7 bajtów. Zaraz za nagłówkiem są już dane programu.

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