T2K handler jest programem który po uruchomieniu instaluje w systemie urządzenie "T:", umożliwiające zapis i odczyt plików w systemie turbo zgodnym zarówno z KSO Turbo 2000 jak i Turbo 2000F/Turbo 2001. Handler instaluje się "pod systemem operacyjnym", co oznacza że będzie on współpracował jedynie załadowany spod systemów nie wykorzystujących pamięci "pod systemem operacyjnym", w pakiecie dostarczane są obrazy dyskietek (ATR) zawierające handler zintegrowany z BW-DOS jak i MyDOS.
Zachowanie sterownika (handler-a) jest zależne od sposobu ładowania go do pamięci komputera. Rozpatrzymy tutaj trzy przypadki:
-
bezpośrednie załadowanie pliku .XEX do pamięci komputera bez DOS (np. z użyciem emulatora, AVG Cart, etc.)
w takim wypadku handler po załadowaniu zada użytkownikowi pytanie dotyczące wyboru interfejsu z którego będzie domyślnie następował odczyt lub zapis danych, po wyborze interfejsu zostanie uruchomiony program "C3 Copy", który umożliwi operacje kopiowania danych z wykorzystaniem załadowanego sterownika "T:". -
Załadowanie sterownika z poziomu BW-DOS
sterownik załaduje się do pamięci, po czym wybierze domyślny interfejs odczytu danych (tzn. KSO Turbo 2000, a więc odczyt z PORTA), a następnie wróci do wiersza poleceń DOS, pozostawiając w systemie zainstalowane urządzenie "T:".Sterownik rozpoznaje fakt ładowania go z poziomu BW-DOS i wtedy interpretuje parametry przekazane mu z linii komend, a są to:
/F
- wybór interfejsu Turbo 2000F/AST/ATT/UM (odczyt z DATA_IN/SIO)
/K
- wybór interfejsu KSO Turbo 2000 (odczyt z PORTA)
/U
- odinstalowanie sterownika i usunięcie go z pamięci -
Załadowanie sterownika z poziomu MyDOS
Ponieważ nie wszystkie DOS-y dla Atari umożliwiają przekazywanie parametrów z linii komend, sterownik rozpoznaje sytuację w której nie jest ładowany z poziomu BW-DOS i w takim wypadku po uruchomieniu użytkownikowi zostaje zadane pytanie o wybór interfejsu z którego będzie sterownik korzystał, dodatkowo jeżeli w pamięci będzie znajdował się jakikolwiek DOS (wartość MEMLO większa niż $0700), użytkownikowi zostanie zadane pytanie czy uruchomić "C3 Copy", czy też sterownik ma wrócić do systemu DOS, pozostając rezydentnym.
Używając sterownika urządzenia T: i otwierając plik do odczytu (lub zapisu) używając znaków specjalnych możemy wpływać na zachowanie się sterownika, zacznijmy od specyfikacji numeru urządzenia.
jeżeli otworzymy urządzenie:
T:
lub T1:
to sterownik będzie czytał z interfejsu turbo wybranego przez użytkownika (załóżmy że jest to KSO Turbo 2000, czyli interfejs turbo podpięty pod drugi port joysticka - fizycznie w komputerze jest to PORTA
układu PIA), gdyby jednak użytkownik nagle zechciał czytać z interface turbo korzystającego z linii DATA_IN portu SIO, wystarczy że użyje urządzenia T2:
, wtedy zostanie wybrany drugi (alternatywny do wybranego wcześniej) interfejs turbo, czyli jeżeli podczas ładowania sterownika został wybrany interfejs KSO (PORTA
), to odwołanie to T2: będzie korzystało z DATA_IN/SIO
, natomiast jeżeli przy ładowaniu sterownika został wybrany interface DATA_IN/SIO
to odwołanie do T2: będzie powodowało że sterownik będzie operował na interfejsie podpiętym pod PORTA
(drugi port joysticka), w tym wypadku odwołanie do "T:" czy też "T1:", będzie powodowało odczyt z DATA_IN/SIO
wybranego przy starcie sterownika.
Wskazówka: W zależności od używanego przez sterownik interfejsu turbo, kolor pasków widocznych podczas odczytu/zapisu będzie odmienny (umożliwia to szybkie zorientowanie się który z interfejsów jest aktualnie używany)
Teraz dwa słowa o znakach specjalnych możliwych do użycia przy otwieraniu pliku do odczytu, tutaj starałem się zachować zgodność z standardem przyjętym w tej serii systemów turbo, tzn:
*
- oznacza że gdy sterownik napotka rekord z nazwą pliku, to ją wyświetli i zapyta się czy akceptujemy ten plik jako plik do odczytu, np. gdy z poziomu C3 Copy wydamy polecenie:
LOAD "T:*"
i sterownik znajdzie rekord z nazwą pliku, to zobaczymy np.
RIVERRAID [Y/N]?
gdy użytkownik odpowie twierdząco, ładowanie programu do bufora/pamięci zostanie rozpoczęte, odpowiedź przecząca spowoduje że sterownik będzie poszukiwał następnego zbioru na taśmie.
UWAGA !!! Ze względu na fakt iż polecenie COPY
z BW-DOS, gdy tylko znajdzie w nazwie specyfikowanego pliku symbol *
, próbuje natychmiast wykonać operację poszukiwania zbioru w katalogu (GET/READ DIRECTORY - a to na urządzeniu taśmowym jest niemożliwe do zrealizowania), to wprowadzono dodatkową możliwość użycia znaku /
który jest tożsamy z użyciem *
, to powoduje że polecenie COPY
z BW-DOS bez problemu skopiuje plik, np:
COPY T:/ D:FOOBAR.BIN
- poprawnie skopiuje plik (bez próby wykonania katalogu z urządzenia taśmowego). Należy dodać że ten problem nie dotyczy MyDOS. Tam można normalnie używać *
. Problem nie występuje również w innych programach które chciałby korzystać z T:
pod BW-DOS, to po prostu specyfika polecenia COPY
zaimplementowanego w BW-DOS.
@
- oznacza że sterownik zaakceptuje pierwszą napotkaną nazwę i zacznie wczytywać bez pytanie pierwszy napotkany zbiór identyfikujący się poprawnym blokiem nazwy.
?
Użycie tego symbolu powoduje, że w miejscu jego wystąpienia zostanie zaakceptowany dowolny znak znajdujący się w nazwie na danej pozycji.Przykładowo, podczas otwierania kanału z użyciem maski "T:PIC???.MIC"
, sterownik będzie akceptował nazwy rozpoczynające się od "PIC"
, po których mogą wystąpić trzy dowolne znaki. Następnie wymagana jest sekwencja znaków ".MIC"
, aby zbiór został otwarty.
Oryginalna wersja handlera, której używałem jeszcze w latach '90, była początkowo typowym "dirty hackiem", który bazował na wersji Turbo 2000F, która ładowała się "pod ROM". W późniejszym czasie dokonałem ręcznej dezasemblacji tego kodu i nieco zmieniłem kod, tak aby dostosować go do moich potrzeb (możliwość odczytu z interfejsu KSO Turbo 2000, podłączanego pod drugi port joysticka, zmiana ilości impulsów synchro wymaganych do poprawnego rozpoznania początku bloku, zmniejszenie czasu oczekiwania po odczycie rekordu, drobne optymalizacje kodu, etc.).
Obecna wersja została przeniesiona z formatu Quick Assembler do formatu, który jest strawny dla XASM, można ją więc bez problemu kompilować chociażby na PC. Kod został wzbogacony o komentarze i poddany dalszym drobnym optymalizacjom, dodano możliwość wyboru interfejsu, z którego będzie następował odczyt danych; może to być oczywiście PORTA (interfejs zgodny z KSO Turbo 2000) lub linia DATA_IN portu SIO (interfejs zgodny z Turbo 2000F/2001/AST/ATT/UM).
W przypadku wybrania przez użytkownika odczytu danych za pomocą DATA_IN/SIO, procedury odczytu dokonują również sterowania linią COMMAND portu SIO w czasie odczytu, co aktywuje interfejsy zgodne z AST/ATT/UM czy tzw. "Wrocławskim Turbo 2000". Za pomocą tychże interfejsów powinien być możliwy odczyt danych z kaset w standardowych formatach Turbo 2000, bazujących na rozwiązaniach W.Zabołotnego (np. Turbo 2T06 i późniejsze).
Obszary w które ładuje się handler i które wykorzystuje do swoich potrzeb to:
$0480-$04FF
- procedury i bufory pomocnicze$CC00-$CFFF
- kod sterownika$D800-$E3FF
- bufor na rekord danych (3072 bajty)
Program C3 Copy
zintegrowany ze sterownikiem T:
to rozwinięcie idei która powstała jeszcze w czasach kiedy istniało Code3, zalążki kodu które wtedy powstały nie nadawały się do ponownego użycia, więc na potrzeby tego projektu postanowiłem napisać wszystko od nowa. Zadaniem tego programu jest wspomóc proces kopiowania zbiorów z taśm na dyskietki czy też dysk twardy, program ma niewielki bufor (około 38 kilobajtów, gdy program zostanie uruchomiony spod DOS lub około 44 kB gdy uruchomimy program bez DOS) jednak to nie w większości wypadków większego znaczenia, ponieważ sposób działania programu jest taki, że kopiuje on dane porcjami. W przypadku gdy użyjemy wbudowanego polecenia COPY
, oraz gdy program wykryje że plik źródłowy będzie odczytywany z urządzenia T:
, zaczyna kopiować dane porcjami (po 3072 bajty, co odpowiada rozmiarowi rekordu danych w systemach serii Turbo 2000), tzn. każdy odczytany rekord zostaje natychmiastowo zapisany na urządzenie docelowe (dysk, ram-dysk czy też dysk twardy). Wielkość wewnętrznego bufora programu na znaczenie jedynie wtedy gdy używamy poleceń LOAD
lub SAVE
, które służą do wczytania wskazanego zbioru, w całości do pamięci. Ma to zastosowanie jedynie wtedy gdy chcemy odczytać zbiory z taśmy zapisane w standardzie (urządzenie C:
), i tylko tylko wtedy zbiór jest zapisany z krótkimi przerwami między rekordami, wtedy nie jest możliwe zatrzymanie silnika magnetofonu po każdym rekordzie wczytanym do bufora, gdyż ponowne włączenia silnika i próba odczytu skończy się niepowodzeniem ze względu na dużą bezwładność mechanizmu magnetofonu. Zatem polecenia LOAD
/SAVE
zostały dodane aby ułatwić odczyt zbiorów zapisanych w standardzie (np. loader-ów poprzedzających zapisane w turbo programy, lub prostych programów i gier typu BOOT, czy też programów zapisanych
HELP
,?
- wyświetla spis dostępnych poleceń obsługiwanych przez program.DOS
- powoduje powrót do DOS.BYE
- wymusza zimy start systemu (Cold BOOT)- 'MEM' - wyświetla informację dotyczące pamięci dostępnej dla programu (rozmiar bufora oraz aktualne wartości Mem-Lo oraz Mem-Hi, pomiędzy .którymi znajduje się bufor wykorzystywany przez program)
- 'BUF' - wyświetla informacje o długości danych wczytanych do bufora przez polecenie
LOAD
. CLS
- czyści ekran.DIR
- wyświetla katalog dysku. W przypadku braku urządzenia z którego ma być wyświetlony katalog, wyświetla katalog domyślnego urządzenia, czyliDIR D:*.*
, możliwe jest wyświetlenie katalogu dowolnego urządzenia z podaną maską plików, np.DIR H1:*.XEX
, spowoduje wyświetlenie wszystkich plików .XEX znajdujących się na dysku H1:DEV
- wyświetla listę urządzeń zainstalowanych w systemie, dodatkowo jest wyświetlany adres tablicy zawierającej wektory obsługi urządzenia.LOAD
lubL
- spowoduje załadowanie wskazanego pliku do bufora w pamięci programu, np.LOAD H:TBXL.XEX
spowoduje załadowanie plikuTBXL.XEX
z urządzeniaH:
do bufora programu. W przypadku użycia poleceniaLOAD
ze standardowym sterownikiem magnetofonuC:
plik zostanie otwarty do odczytu w trybie z krótkimi przerwami między rekordami.SAVE
lubS
- spowoduje zapisanie pliku zawartego w buforze na wskazane urządzenie, np.SAVE T:TBXL.XEX
spowoduje zapisanie plikuTBXL.XEX
na urządzenieT:
(czyli zapis pliku na magnetofon w systemie Turbo 2000). Tak samo jak w przypadku polecenieLOAD
, gdy w poleceniuSAVE
zostanie wybrane urządzenieC:
jako docelowe, to na taśmie rozpocznie się zapis pliku z krótkimi przerwami między rekordami.DUMP
lubD
- jeżeli w buforze wejściowym znajdują się jakiekolwiek dane polecenie dump rozpocznie wyświetlenie bufora od adresu 0, w formacie HEX oraz ATASCII (po osiem wartości w HEX/ATASCII w wierszu). Operację wyświetlania można przerwać używając klawiszaESC
.COPY
lubCP
- to polecenie umożliwia kopiowanie plików pomiędzy dowolnymi urządzeniami dostępnymi w systemie, jego składnia jest prostaCOPY urządzenie:plik_źródłowy urządzenie:plik_docelowy
, czyli np. polecenieCOPY T:* D8:HT89.COM
, spowoduje otwarcie urządzeniaT:
, po czym sterownik urządzeniaT:
zacznie poszukiwać bloku zawierającego nazwę pliku, gdy ją odnajdzie i użytkownik potwierdzi wybór odnalezionego pliku, rozpocznie się operacja kopiowania. kopiowanie będzie się odbywało w blokach po 3072 bajty, zatem długość pliku nie ma znaczenia, gdyż kopiowanie i tak porcjami. Po poprawnie zakończonej operacji kopiowania, na ram-dysku (D8:) znajdzie się plikHT89.COM
.
-
Dlaczego podczas operacji I/O z użyciem urządzenia
T:
widzę "śmieci", na ekranie (zaburzony wygląd wyświetlanych znaków) ?Jest to spowodowane faktem używania przez sterownik pamięci RAM "schowanej" pod systemem operacyjnym, w pamięci ROM komputera, znajduje się również obszar w którym znajdują się definicje "fontów" systemowych, każde odwołanie do sterownika wymusza konieczność odłączenia pamięci ROM (aby w to miejsce zmapować RAM). Ta operacja powoduje że ANTIC pobierając wygląd znaków, nie odczytuje jego zawartości z pamięci ROM, a wyświetla zamiast klasycznego wyglądu znaków, to co aktualnie znajduje się w pamięci RAM (dokładniej w obszarze $E000-$E3FF), a właśnie w tym obszarze znajduje się bufor rekordu danych dla systemu turbo, zatem wygląd śmieci zastępujących systemowy generator znaków jest zależny od tego co aktualnie wylądowało w buforze rekordu, czyli widać to co akurat zostało odczytane lub ma być zapisane do/z na taśmie.
-
Dlaczego kod sterownika zrobiono w taki sposób aby wykorzystywał pamięć pod OS-ROM, czy nie mógłby on korzystać z normalnej pamięci komputera?
Takie rozwiązanie nie jest być może zbyt eleganckie, ale umożliwiło w prosty sposób koegzystowanie sterownika urządzenia
T:
w obecności urządzeniaD:
które zapewnia załadowany system DOS, który to zazwyczaj ładuje się na sam dół pamięci (począwszy od adresu$0700
). Dzięki takiemu założeniu, handler nie musi się relokować w obszar tuż powyżej MEMLO (który jest zależny od załadowanego DOS-a i jego konfiguracji). Co prawda powoduje to że ten sterownik nie będzie działał z DOS-ami które również lokują się pod systemem operacyjnym, ale dzięki temu maksymalizujemy rozmiar dostępnej pamięci dla pozostałych programów (chociażbyC3 Copy
,ATARI BASIC
, etc.). W praktyce załadowanie sterownika nie zmienia ani MEMLO ani MEMTOP. Zarówno BW-DOS jak i MyDOS nie korzystają z pamięci pod OS-ROM i działają ze sterownikiemT:
bez problemów. -
Z jakimi DOS-ami działa sterownik?
Sterownik przetestowano tylko i wyłącznie z BW-DOS oraz MyDOS, powinien jednak działać również z DOS-ami które nie wykorzystują pamięci pod OS-ROM i takimi które szanują istniejące wpisy w tablicy sterowników urządzeń (
HTABS
). Niektóre wersje DOS-ów, zamiast skorzystać z wbudowanego w system operacyjny mechanizmu dodawania urządzeń do tablicyHTABS
, po prostu wpisują się na z góry ustalone miejsce nie respektując możliwości że w tym miejscu znajduje się już inny sterownik urządzenia.Sterownik na pewno nie będzie działał z DOS-ami które również wykorzystują pamięć od OS-ROM dla swoich potrzeb (np. SuperDos, niektóre wersje BiboDOS).
Sterownik powinien również działać ze
SpartaDOS 3.2
, ale tej opcji nie sprawdzono. Jeżeli zgodnośćBW-DOS
zeSpartaDOS
jest wystarczające, są to przesłanki do tego aby sądzić że wersja SpartaDOS które nie rezydują podOS-ROM
również powinny działać. -
Dlaczego handler nie współpracuje z systemem QMEG?
Jak wspominałem wcześniej, to rozwiązanie początkowo powstało jako adaptacja bazująca na wersji systemu Turbo 2000F siedzącej pod OS-ROM, także sam sterownik nie współpracuje poprawnie z systemem QMEG ponieważ ze względu na uproszczenia i minimalizację obszaru pamięci zajmowanej poniżej MEMTOP, następuje kolizja z pewnymi mechanizmami zawartymi w samym QMEG. Sam QMEG-OS również nie zawiera niektórych procedur oryginalnie zawarty w ATARI OS-ROM, przez co handler nie może poprawnie działać, z tego własnie powodu sterownik wykrywa obecność systemu QMEG i żąda jego wyłączenia, gdy stwierdzi jego obecność.
-
W dokumentacji i/lub sterowniku jest nieścisłość lub błąd? Co robić?
Ten projekt powstawał w dość dużym pośpiechu (w szczególności dokumentacja). Jeżeli widzisz jakąś nieścisłość lub błąd, daj proszę znać, co mogę poprawić. Będę się starał to robić w miarę możliwości czasowych.
- XASM
- MKATR
- Atari Tools
- XEDISK
- BW-DOS
- MYDOS
Jest to wolne i niezobowiązujące oprogramowanie udostępnione do domeny publicznej.
Każdy może kopiować, modyfikować, publikować, używać, kompilować, sprzedawać lub rozpowszechniać to oprogramowanie, zarówno w formie kodu źródłowego, jak i skompilowanego binarnego, do dowolnego celu — komercyjnego lub niekomercyjnego — oraz w dowolny sposób.
W jurysdykcjach uznających prawa autorskie, autor lub autorzy tego oprogramowania zrzekają się wszelkich praw autorskich do tego oprogramowania na rzecz domeny publicznej. Dokonujemy tego z korzyścią dla społeczeństwa i ze szkodą dla naszych spadkobierców i następców. Zamierzamy, by było to jawne i nieodwołalne zrzeczenie się wszelkich obecnych i przyszłych praw autorskich do tego oprogramowania.
OPROGRAMOWANIE JEST DOSTARCZANE „TAK JAK JEST”, BEZ JAKIEJKOLWIEK GWARANCJI, WYRAŹNEJ LUB DOROZUMIANEJ, W TYM MIĘDZY INNYMI GWARANCJI PRZYDATNOŚCI HANDLOWEJ, PRZYDATNOŚCI DO OKREŚLONEGO CELU ORAZ NIENARUSZANIA PRAW.
W ŻADNYM WYPADKU AUTORZY NIE PONOSZĄ ODPOWIEDZIALNOŚCI ZA ŻADNE ROSZCZENIA, SZKODY LUB INNE ZOBOWIĄZANIA, CZY TO NA PODSTAWIE UMOWY, DELIKTU LUB INNEJ PODSTAWY, POWSTAŁE W ZWIĄZKU Z OPROGRAMOWANIEM LUB JEGO UŻYTKOWANIEM.
Więcej informacji znajdziesz na: https://unlicense.org/
This is free and unencumbered software released into the public domain.
Anyone is free to copy, modify, publish, use, compile, sell, or distribute this software, either in source code form or as a compiled binary, for any purpose, commercial or non-commercial, and by any means.
In jurisdictions that recognize copyright laws, the author or authors of this software dedicate any and all copyright interest in the software to the public domain. We make this dedication for the benefit of the public at large and to the detriment of our heirs and successors. We intend this dedication to be an overt act of relinquishment in perpetuity of all present and future rights to this software under copyright law.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
For more information, please refer to https://unlicense.org/