No skoro zrobiła się już nam tutaj kolejna strona wątku spróbujmy zatem zająć się kolejnym cartem z kolekcji uicr0bee. Tym razem na warsztacie cart "Turbo Toolbox II" autorstwa Marka Góreckiego znanego także jako Górecki Productions lub EGR General Programming.
Powiem wam ze ten cart mimo, że niby prosty, ale jakoś mnie zmęczył... podchodziłem do niego jak do jeża... głównie ze względu na zawarty w nim kod... i specyficzne mechanizmy, prawdopodobnie zastosowane w celu utrudnienia zmian, kopiowania, etc... przez to wszystko wymagał o wiele więcej uwagi i pracy niż wszystkie do tej pory napotkanie, poza tym chciałem dobrze wszystko udokumentować, bo cart jest do tej pory jednym z niewielu napotkanych gdzie ciekawostka, goni ciekawostkę. Niestety nie nie miałem do niego żadnej instrukcji ani jakichkolwiek informacji... A może ktoś ma jakieś materiały dotyczące tego carta? Albo jaką ulotkę, artykuł, reklamę... swoje własne wspomnienia, cokolwiek innego ;)?.
To co prezentuję tutaj udało mi się ustalić to tylko i wyłącznie na podstawie analizy kodu, więc informacje mogą być niepełne lub wręcz nieścisłe.
Cartridge ma pojemność 32KB (4 banki po 8KB umieszczone w przestrzeni $A000-$BFFF) i nazwijmy to "autorskie" rozwiązanie przełączania tych banków, niestety nieobsługiwane przez żaden emulator. Oprogramowanie zawarte w cartridge prezentuje się następująco:
Jak widać na pokładzie carta jest zawarta całkiem spora ilość softu dla Turbo Blizzard, a jest to:
Universal Loader, Binary Loader - dwa loadery umożliwiające wczytywanie programie typu FILE oraz BOOT. Są dość krótkie ponieważ nie instalują handlera obsługującego urządzenie "T:" w systemie, a jedynie służą wczytaniu jedno-plikowego gry/programu
Tape Turbo System - odpowiednik Blizzardowego KOS-a znanego z cartów KNS/Atares
The Eternal - dwie wersje programów umożliwiających wprowadzanie poprawek w ładowanych programach (np. nieśmiertelności)
Tape Test - umożliwiający sprawdzenie ustawienia głowicy, jakości sygnału zapisanego na taśmie. Zaprezentowany screen-shot pochodzi z emulatora, niestety Altirra nie radzi sobie jeszcze z Blizzard Turbo i doskonale to widać na ekranie... emulacja liczników POKEY-a ostro kuleje... zatem nie da się nawet precyzyjnie wyrysować prawidłowego sygnału, nie mówiąc już o jego poprawnym wczytaniu.
Aragorn Copy - całkiem przyzwoity program kopiujący, obsługuje dodatkową pamięć i w przypadku jej obecności bufor na dane jest całkiem spory. Dodatkowo możliwe jest uruchomienie cartridge w taki sposób aby wykonać boot z dyskietki z DOS-em... a potem program kopiujący uruchamia sie automatycznie... w tym celu należy przytrzymać klawisz SHIFT gdy włączamy komputer włożonym cartridge
Jester - wymaga jakiegoś dodatkowego rozszerzenia sprzętowego o nazwie "ROMEK", ale z tego co rozumiem kopiuje on OS-ROM do pamięci ROMKA a następnie dokonuje poprawek w OS które powodują że procedury SIO obsługują szybką transmisję w przypadku stacji dysków Happy Warp, Top-Drive czy TOMS-Drive
Disk Utility - tak autor nazwał spora ilość opcji dostępną pod klawiszami od J do U, które to opcje możemy podzielić na dwie sekcje... jedna z nich (klawisze J...O) umożliwia zbootowanie dyskietki z obsługą szybkiego SIO instalowaną opcjonalnie pod adresami $100 lub $600, dodatkowo możemy wybrać czy BASIC ma być włączony czy też wyłączony. Druga opcja (klawisze P...U) to loader plików binarnych oraz "cassette boot". Tutaj też można dokonać wyboru co do włączenia BASIC-a czy szybkich procedur SIO.
Wszystkie te programy upakowane zostały w dwóch 8KB bankach zajmujących 16KB pamięci EPROM... w takim razie co znajduje się w dwóch pozostałych bankach? No to jedna z niespodzianek... gdy włączymy komputer z wciśniętym OPTION po chwili oczom naszym ukaże się...
... prawdę mówiąc przyglądając się sieczce w zrzucie pamięci zastanawiało mnie co zajmuje tyle miejsca... zacząłem oglądać kod startujący cart i gdy zobaczyłem że sprawdza on różne dziwne rzeczy przy starcie... w tym różne klawisze ... po dalszej analizie ustaliłem że sprawdzane są SHIFT i OPTION... o ile SHIFT był jasny (opisano to nawet w krótkim info o Aragorn Copy dostępnym po wciśnięciu klawisza "X" w menu) ... o to co zobaczyłem po uruchomieniu z OPTION spowodowało że uśmiech pojawił się na mojej twarzy :) Nie sądziłem że ta gra była oficjalnie wydana na cartridge przez autora :) W dodatku jako dodatek do Turbo Toolbox II :D ... a ja chyba obiecywałem się streszczać i nie przynudzać... ;) zatem:
1) Zawartość pamięci EPROM:
Turbo Toolbox II - EGR banking - oryginalna zawartość pamięci. Nie da się jej uruchomić na emulatorze... żaden z emu nie wspiera takiego schematu przełączania banków... więcej o tym przy okazji prezentacji schematu.
EDIT1: wszystko wskazuje na to że pomyliłem się generując ten plik (zła kolejność banków w obrazie). Jak tylko sprawa zostanie zweryfikowana na real hardware udostępnię poprawiony plik. Błąd wykrył jeden z użytkowników czytający wątek i zgłosił problem, za co mu serdecznie dziękuję!
EDIT2: Dzięki czujności i pracy, którą wykonał kolega JLS próbując zrekonstruować ten cart, okazało się, że popełniłem fatalny w skutkach błąd przy składaniu pliku "TurboToolboxII_orgEGR.bin" w całość, wszystkie osoby które go pobrały proszone są o zaktualizowanie pliku nową i działającą wersją.
W błędnej wersji przy składaniu pliku w całość zamieniłem linie adresowe A13 i A14 co skutkuje przemieszaniem banków, prawidłowo były w pliku ulokowane banki "00" i "11", natomiast banki "01" i "10" zostały zamienione. JLS podjął próbę odtworzenia carta i okazało się, że nie działa on prawidłowo, zgłosił problem i po opisaniu przez niego zachowania jego wersji carta i analizie problemu odkryłem gdzie popełniłem błąd! Gdyby JLS nie próbował uruchomić carta pewnie dość długo uszkodzony plik wisiałby tutaj, a ponieważ replika wykonana przez niego po podmianie pliku na prawidłowy zadziałała, możemy mieć pewność ze teraz wszystko z plikiem "oryginalnym" jest OK! Zatem WIELKIE podziękowania dla JLS za wykonaną pracę i cierpliwość przy rozwiązywaniu problemu!
Turbo Toolbox II - Blizzard 32K banking - przeorganizowana wersja EPROM, nic w niej nie było zmieniane oprócz kolejności banków w tymże obrazie, tak się szczęśliwe złożyło nie trzeba było zmienić ani bajtu kodu w tym obrazie, wystarczyła drobna reorganizacja. Być może było tak, że autor carta pisał swoje oprogramowanie tak aby działało na cartridge w tym standardzie, jednak później zmienił schemat bankowania aby jego rozwiązanie było nietypowe i być może nie tak łatwe do powielenia. Ten obraz da się uruchomić na emulatorze wybierając jako typ carta: "Blizzard 32K Cartridge".
TurboToolboxII_orgEGR_fixed_A13,A14.bin:
MD5 : 952ba0425b053fd12fbfa163bd8ef0e9
SHA256: 746a5b53527683843fa10be9e9295efeca094b2f2c971100586703f96cc6c6dc
TurboToolboxII_BLZ32k.bin:
MD5 : b9eb6f8536e9946e20a1ba02fe101c43
SHA256: 911beb38c94e925e83944b6cc9111593c195f148e8a5a20668e5180b6827e96b
UWAGA!!! Jeżeli ktoś ściągnął wcześniej plik: "TurboToolboxII_orgEGR.bin", powinien go skasować jest błędny i nie będzie działał poprawnie, sumy kontrolne uszkodzonego pliku:
TurboToolboxII_orgEGR.bin:
MD5 : b7f155cac9b8c6682754198284ef5df7
SHA256: 76be92e319934f5924689b2b61a7ed33ff24fdb2743d1bce419be9235ba5e80d
2) wersja XEX dająca się uruchomić spod DOS-a lub dowolnego loadera plików binarnych: Turbo_ToolBOX_II.xex.zip.
Z tą wersję było trochę nudnej, żmudnej i monotonnej roboty, zanim to ogarnąłem to trochę minęło. Dużo było śledzenia kodu i wnikania w to co się dzieje w środku ... w sumie to chciałem odpuścić w pewnej chwili bo zastanawiam się czy jest sens aby walczyć z tak specyficznym cartem, takim który może zbootować DOS-a w trakcie swojego initu, etc. Ten cart ma kupę soków bezpośrednio w ROM, i trochę sztuczek i "dirty hacków"... w dodatku autor z uporem godnym maniaka zabezpieczał i zaciemniał swój kod przepisując po 100 razy różne obszary pamięci z jednego miejsca w drugie, xorując to wszystko z różnymi stałymi wartościami... kiedyś może to było jakieś zabezpieczenie, jednak dziś w dobie emulatorów ze zintegrowanymi debuggerami i możliwością używania break-pointów ... odmiąchanie tego to kwestia tylko czasu i cierpliwości... Koniec końców po zapisaniu paru kartek A4 adresami, narysowaniem co gdzie i jak... wszystkie poprawki w kodzie sprowadziły się do załadowania poszczególnych banków w odpowiednie miejsce pamięci i zmiany 3 bajtów w oryginalnym kodzie co doskonale widać zresztą w strukturze pliku XEX:
001: $0480 $0522: $00A3
002: $02E2 $02E3: $0002
INI $0480
003: $0523 $055A: $0038
004: $4000 $BFFF: $8000
005: $BEE2 $BEE2: $0001
006: $BF56 $BF56: $0001
007: $BF79 $BF79: $0001
008: $02E0 $02E1: $0002
RUN $0523
Obszar $4000-$BFFF zajmują 4 banki po 8K oryginalnie umieszczone w EPROM, a trzy segmenty o długości jednego bajta to patche poprawiające kod tak aby uruchomił się on bez carta i przepisał dane z innych obszarów niż w oryginale. Z perspektywy czasu patrząc na to ile czasu zajęło mi złożenie tego w całość... i patrząc że wystarczyły 3 bajty i odpowiednia reorganizacja danych... to teraz można się z tego śmiać... jednak parę ładnych godzin poszło :) Ale cóż.. dłubanie w reliktach z przeszłości ma swoją cenę... cieszę się że udało mi się to ogarnąć. Prawdę mówiąc nie sprawdziłem tego jeszcze na real hardware... ale jeżeli okazałoby się że są jakieś dodatkowe zabezpieczenia i coś nie działa to nie omieszkam poinformować o tym fakcie nieco później... teraz muszę trochę od tego odpocząć :]
EDIT: Jeszcze jedna uwaga co do wersji XEX... w przypadku fizycznego cartridge lub uruchamiania jego obrazu na emulatorze (trzeba trzymać SHIFT włączając komputer), można w stacji dysków umieścić dyskietkę z DOS-em, a gdy DOS.SYS się zbootuje, system operacyjny przekaże sterowanie ponownie do kodu zawartego w cartridge, a ten uruchomi "Aragorn Copy". Wtedy będzie możliwa kopiowanie "dysk <--> turbo tape", ponieważ DOS.SYS zapewni instalację handlera dla urządzenia "D:", a "Aragorn Copy" zainstaluje handler dla urządzenia "T:". W przypadku wersji XEX taka operacja jest niemożliwa, ponieważ wciśnięcie SHIFT powoduje wywołanie sekwencji "boot" z ROM komputera, ale tak naprawdę nie ma takiej potrzeby... wystarczy XEX-a załadować z pod DOS-a i będzie można go używać w taki sam sposób (DOS zapewni obsługę "D:", Aragorn obsługę "T:").
3) Schemat: wektor (PDF), raster color (PNG), raster grayscale (PNG).
I dwa słowa o schemacie i budowie samego carta. Cartridge zawiera w sobie 32KB pamięć EPROM 27C256 o pojemności 32KB. Pamięć podzielono na 4 banki po 8KB umieszczone w przestrzeni $A000-$BFFF. Co ciekawe cartridge ma również podłączoną linię RD4 przez co system myśli że to cart 16KB zajmujący lokację $8000-$BFFF. Jednak EPROM aktywowany jest tylko w przypadku adresowania przestrzeni $A000-$BFFF. Efekt jest taki że w obszarze $8000-$9FFF sa losowe śmiecie zebrane magistrali danych na której żaden w układów nie jest aktywowany. EPROM włączany jest tylko sygnałem ~S5 co powoduje że reaguje tylko na adresy $A000-$BFFF. Być może to celowe działanie autora :)
Teraz o układzie przełączania banków i odłączania carta... zrealizowano go na układzie KM555TM8, czyli sowieckim klonie 74175. To właściwie 4 przerzutniki typu D, ze wspólnym wejściem zegarowym i resetującym. W przypadku tego carta zrealizowano z nich taką hybrydę rejestru przesuwającego z 2-bitowym licznikiem zliczającym w kodzie Graya. Gdyby pomiąć przerzutniki Q1 i Q2... to Q3 i Q4 tworzyły by 2-bitowy licznik adresujący linie A13 i A14 pamięci EPROM... jednak w tym wypadku dodano jeszcze 2 przerzutniki tak aby wyjście ostatniego z nich sterowało stanem linii RD5 odpowiedzialnej za odłączenie cartridge.
Na schemacie dodałem symulację pokazującą zachowanie się całego układu. Sposób zaprojektowania powoduje że po włączeniu lub wciśnięciu RESET na cartridge układ ustala stan wszystkich przerzutników na 0, a ponieważ informacje adresujące linie A13 i A14 oraz linię RD5 są brane z wyjść zanegowanych przerzutników to startowym bankiem jest ten dla którego A13,A14=1, RD5 również przyjmuje stan 1, i cart zostaje włączony i wykryty przez system. Kolejne odwołania do dowolnego adresu z zakresu $D500-$D5FF (aktywność ~CCTL) powodują zmianę stanów linii A13 i A14 (tabelka zmian umieszczona na schemacie). Kolejne 3 kroki (po reset) adresują kolejne banki carta, ale po następnym kroku cart zostaje odłączony. Co ciekawe dalsza aktywność CCTL pozwala na ponowne włączenie carta jednak już nigdy więcej nie będzie można zaadresować 2 początkowych banków... nastąpi zapętlenie i linie adresowe A13 i A14 wraz z RD5 będą przyjmowały takie stany że włączenie cartridge będzie następowało tylko dla dwóch ostatnich banków zawierających tylko grę "Nexuss". W przypadku gdy będą adresowane pozostałe banki stan lini RD5 będzie ustawiony na "0" co będzie powodowało że cart będzie w tych chwilach wyłączony.
Na koniec prezentacja samego bohatera tego opisu:
Cartrige Turbo Toolbox II, by Górecki Productions:
PCB góra:
PCB spód:
PCB góra, zbliżenie na informacje o autorze: