426

(90 odpowiedzi, napisanych Sprzęt - 8bit)

Jesteś WIELKI! Bardzo ale to bardzo DZIĘKUJĘ !!! Tyle lat czekaliśmy na tę chwilę! Jeszcze raz WIELKIE DZIĘKI !!!

Oczywiście zaraz wysyłam namiary via e-mail.

EDIT: e-mail z namiarami na mnie i paczkomat wysłane!

427

(90 odpowiedzi, napisanych Sprzęt - 8bit)

Hej!

Czy jesteś skłony wypożyczyć ten interface do analizy i przerysowania schematu? Oczywiście wszystkie koszty przesyłek, pakowanie, etc. pokryłbym bez wyjątku.

Jeżeli nie chcesz tego wysyłać to czy można będzie Cie poprosić o wykonanie większej ilości dokładnych zdjęć? w szczególności płytki drukowanej (spód/góra) oraz pozostałej części interfejsu (tzn. gniazda przyłączeniowego i kabli do niego idących).

Pierwszy rzut oka na interface pokazuje konstrukcję bardzo podobną do tego co zaproponował marekk, widać układ dekodera FSK bazującego na tej samej zasadzie.

428

(90 odpowiedzi, napisanych Sprzęt - 8bit)

byłoby super! Dzięki!

429

(90 odpowiedzi, napisanych Sprzęt - 8bit)

Thomy napisał/a:

Mam gdzieś prawdopodobnie taki moduł, nawet z papierami.

Jeżeli tak to byłoby super gdybyś zechciał zrobić foty, skany, udokumentować to... lub jakoś "udostępnić", wypożyczyć, itp. celem archiwizacji i upublicznienia projektu.

Gdybyś rozważał taką możliwość to mogę się zgłosić jako chętny do udokumentowania i rozrysowania wszystkiego, oczywiście w ramach takiej akcji wyniki prac zostałby udostępnione tutaj publicznie na forum.

430

(90 odpowiedzi, napisanych Sprzęt - 8bit)

dobra odkopałem ten posty, które napisał "marekk" i w którym pisał że jego interface działał z T2600, wspomina o tym tutaj: post #1, a następnie był uprzejmy załączyć schemat swojej wersji interface, o tutaj: post #2.

pozwolę sobie zacytować te posty również tutaj, aby było w jednym miejscu w całości, bo za każdym razem kiedy ktoś zapyta o Turbo 2600, to szukam tych postów i nigdy znaleźć nie mogę.

marekk napisał/a:

Dawno, dawno temu (1988) zbudowałem interfejs T2600 własnego pomysłu. Działał dobrze z magnetem kasetowym (nie miałem firmowego). Jeśli kogoś to interesuje, to odtworzę schemat. Z grubsza to składał się z następujących części: wzmacniacz-ogranicznik na 741, podwajacz częstotliwości, dekoder na 74123 i 7474.

...

Oto schemat. Trochę wyjaśnień. Interfejs zrobiłem z tego, co miałem w szufladach. Więc jeśli ktoś chciałby takie coś zbudować to niech się za bardzo nie sugeruje doborem elementów. Kondensator oznaczony ? ma prawdopodobnie 330 pF. Diody Ge rosyjskie z serii D2xx, Si dowolne małe krzemowe. Wzmacniacz SFC2741 (μA741), tranzystory nieopisane dowolne NPN małej mocy.


ps1) Dodam że miałem na szybko sklecić ten interface i sprawdzić jego działanie z T2600, jednak przyznaję że do dziś nie znalazłem na to czasu :(
patrzę na datę posta od marekk i nie wierzę, 2018 ?!? mi to się wydawało że tan schemat marekk wrzucił może maksymalnie rok temu, ale że 4 lata?!? Kiedy to minęło?!? Naprawdę nie wiem.

ps2) tutaj Pet/BB wspomina jak wyglądał interfejs dla Turbo 2600 firmy SZOK.

ps3) to jeszcze dorzucę w tym poście link do schematu który udostępnił marekk (tak aby wszystko było już w jednym miejscu z odpowiednim tematem), ponieważ jest to link do obrazka załączonego do posta kolegi marekk, to widać go będzie dopiero po zalogowaniu się na forum:

http://www.atari.org.pl/forum/misc.php?action=pun_attachment&item=4911&download=0

431

(90 odpowiedzi, napisanych Sprzęt - 8bit)

Cześć!

Jeżeli chodzi o interface dla Turbo 2600, to w/g mojej najlepszej wiedzy pozostaje on przysłowiowym "jednorożcem", wiadomo że niby istnieje ale nikt go chyba obecnie nie posiada w swoich zasobach. Pet/Bit Busters wspominał na tym forum iż widział u znajomego oryginał tego interface w wersji "zewnętrznej", przeznaczonej do użytku z dowolnym magnetofonem.

A paru wątków na tym forum o Turbo 2600 możesz wyczytać iż były podejmowane próby nawiązania kontaktu z ludźmi (konstruktorami) tegoż systemu (właśnie z firmą SZOK ze Świebodzina), jednak każda z tych prób spełzła na niczym.

O ile udało się odzyskać i zarchiwizować większość oprogramowania do obsługi tegoż systemu, to konstrukcja samego interface jest nieznana, a sam interface można uznać na "białego kruka".

Oczywiście w dzisiejszych czasach skonstruowanie takiego interface nie jest jakimś problemem, jednak cały czas liczę że ktoś gdzieś wykopie wersję oryginalną.

Jeden z szanownych kolegów z forum zaprezentował swoją wersję interface, która nie bazuje na filtrach tak jak oryginalna konstrukcja Atari i sugerował że jego wersja interface działa z Turbo 2600. Jak znajdę ten watek to wkleję link.

Cały kod obsługujący ładowanie jest umieszczony w pierwszym bloku (Intro / HEAD1) i przez cały czas rozgrywki siedzi bezpiecznie w pamięć pod OS-ROM, więc nie ważne ile i jakich dyscyplin wybierzesz to na końcu rozgrywki zobaczysz ten sam ekran z prośbą "INSERT HEAD1 & OPTION TO REBOOT".

433

(8 odpowiedzi, napisanych Programowanie - 8 bit)

To już może jako podsumowanie całej dyskusji mini program w TBXL który umożliwia oszacowanie co wyjdzie ze zmieszania danego koloru/odcienia z konkretną wartością w rej. $D01A ($2C8):

http://seban.pigwa.net/aa/GR9_OR.png  http://seban.pigwa.net/aa/GR11_OR.png

W załączniku listing programu który generuje to co widać wyżej.

A przy okazji, uważne oczy zobaczą na obrazkach "Trójkąt Sierpińskiego" ;-)

434

(8 odpowiedzi, napisanych Programowanie - 8 bit)

Dokładnie tak. W GR.11 jak narysujesz coś kolorem 8 i w $D01A wpiszesz $70, to wyjdzie Ci na to że na ekranie zobaczysz kolor $F0.

tzn. jeżeli to będziesz robił w BASIC to musisz używać rejestrów cieni, tzn. 712 lub $2C8.

435

(8 odpowiedzi, napisanych Programowanie - 8 bit)

Hej!

To co powstaje może wygląda na pierwszy rzut oka i dziwnie, ale to nie jest nic magicznego... wyście video z GTIA jest skonstruowane tak że mamy 4 bity luminancji (jasności) oraz wyjście koloru, które generuje już sygnał chrominancji rozpoznawany przez dekoder PAL/NTSC w TV... co z tego wynika?

Dla ułatwienia pomińmy sygnał chrominancji (info o kolorze). Zostańmy tylko z samą luminancją. Skoro mamy więc 4-bit DAC kodujący jasność, to na jego wyjściu nie powstanie więcej niż 16 jasności... A że tryb GTIA z 16 jasnościami pokrywa całą przestrzeń "jasności", to robi się pewien problem gdy mamy dodatkowo rejestr określający kolor tła. Jak wiadomo rejestry koloru są podzielone tak że górne 4-bity takiego rejestru określają barwę/kolor, a dolne 4 bity określają jasność wybranej barwy/koloru.

W trybie GR.9 (16 odcieni jednego koloru) określamy którego koloru będą to odcienie, decydują o tym górne 4 bity, a więc poszczególne wartości typu $10,$20,$30,$40...$F0 określają po prostu który kolor/barwę wybieramy dla całego ekranu... no ale ten rejestr ma również dolne 4 bity, których ustawienia w tym trybie nikt nie zabronił... ale co zatem zrobi GTIA gdy ma pełną informację o jasności piksela z pamięci ekranu i jeszcze dodatkowo dochodzi informacja o jasności globalnej z dolnego nibbla rej. koloru?

GTIA wykonuje po prostu operację typu "OR" pomiędzy jasnością każdego piksela tego trybu, a dolnymi 4-bitami rejestru $D01A, to jest cała tajemnica, można to zasymulować również software-owo, za chwilę klepnę przykładowy kod.

QTZ napisał/a:

Co do zakończenia gry to nie udało mi się "wyjść" z bobseja - cały czas ta dyscyplina jest restartowana. Nie wiem więc jak zakończyć grę i doprowadzić do wyświetlenia komunikatu i "restartu" całej gry.

Aby wyjść z "bobsleja", trzeba przejechać trasę 3 razy, można się nawet rozbić 3 razy... potem pojawia się ekran, gdzie masz możliwość wyboru ponowienia lub wyboru "następnej" dyscypliny (retry / next event), zobacz od mniej więcej piątej minuty:

Być może *AJEK też nie wiedział i uważał, że ten komunikat się nigdy nie wyświetli i nie był świadomy błędu który popełnił.

Czy był nieświadomy? Raczej był świadomy w 100%m bo przecież dołożył ten kawałek kodu wyświetlający ów komunikat.

Hej!

gorgh napisał/a:

3D Color Cyclic Starfield bardzo ciekawe

To nie jest mój pomysł, pisałem o tym "twicie". Autorem oryginału był Paul Malin. Jego kod był przeznaczony dla BBC Micro Bot.

Cyprian napisał/a:

Seban dzięki za info. Efekty są fajne, no i myślę że nadają się na kategorie 256 bajtów na Pouet.net

Nie ma za co dziękować. To dla mnie była po prostu fajna zabawa, jakoś nie sądziłem że może to kogokolwiek z forum zainteresować, bo efekty które robiłem są od dawna na scenie znane i udokumentowane. Jedynie co mogę powiedzieć, to to że efekty z którymi najdłużej walczyłem aby je zmieścić w mniej niż 128 bajtów to: Life, Kefrens, Water, 2D-Plasma ... a reszta w kodu w Action! czy TBXL to były napisane w chwilach gdy musiałem oderwać głowę od spraw bieżących i celem relaksu zajmowałem się właśnie takimi "pierdołami".

Co do wielkości kodu, to dekoderem "BASE64" to udaje się upchnąć jedynie ~127 bajtów wykonywalnego kodu w jednym Twicie. np. "Kefrens Bars" w postaci binarnej ma tylko 127 bajtów. W sumie to chciałem z tego zrobić jakąś kompilację efektów i wypuścić jako "reklamówkę" atari8bitbot-a, jednak "zawsze coś" i koniec końców tego nigdy nie uczyniłem. W przypadku pojedynczych "twitów" sprawa jest prosta, siadasz, dłubiesz, publikujesz i zapominasz... zajmuje to niewiele czasu w porównaniu ze składaniem jakiejś większej produkcji.

Cyprian napisał/a:

Swoją drogą to taki bot jest też dla ZX Spectrum: https://twitter.com/ZxSpectrumBot1

Jest też taki bot dla BBC Micro. I to co tam ludzie wyrabiają to jest dopiero szaleństwo. Strona z opisem i tutorialami jest tutaj: BBC Micro Bot, ale trzeba uczciwie przyznać że BBC Micro Bot to "maszyna na sterydach" i można jej włączyć emulację z prędkością jakichś setek MHz, lub zrobić animację poklatkową, czy też użyć kodowania Base2048 (stosując unicode), więc ma się to nijak w porównaniu do Atari8bitbot, tzn. nie da się porównać tych dwóch botów, bo część efektów która wygląda powalająco na "BBC Micro Bot", na realnym sprzęcie liczyłaby się po prostu przez dziesiątki godzin, lub dni (ray-tracing) . Dlatego też nigdy mnie to tak nie wciągnęło (brak realnych ograniczeń). Wydaje mi sie że dużo ludzi oglądających wynik pracy BBC Micro Bot nie zdaje sobie sprawy jak długo renderuje się dany efekt, na realnym sprzęcie. Można to zaobserwować na przykładzie owego 3D-Starfield autorstwa Paula Milan-a: BBC Micro - 3d starfield. <--- po kliknięciu odpali emulator BBC micro w przeglądarce wraz z kodem renderującym ów efekt w czasie rzeczywistym.

W przypadku "atari8bitbot" jedyne na co można sobie pozwolić to maks. 90 sek. pre-renderingu i to ze standardowa prędkością Atari (tzn. 1.77MHz).

EDIT:

Byłbym zapomniał, Paul Milan napisał całkiem fajne tutoriale, na temat tworzenia animacji z wykorzystaniem tzw. Color-Cycling, te pomysły oczywiście można wykorzystać również w przypadku Atari, co prawda nie mamy 16 rejestrów kolorów, ale tryb "GRAPHICS 10", doskonale sprawdzi się również w większości przypadków.

Colour Cycling Effects with Grids albo to: BBC Boing Ball

Ten człowiek to przysłowiowa kopalnia wiedzy i pomysłów, polecam jego blog-a: P_Malin's Nonsense Code

Rzucie sobie jeszcze okiem na jego 4k procedural graphics: Caffeinate

Hej!

Skoro już zostałem niejako wywołany do tablicy, to napiszę o tym parę słów więcej, bo ten bot nie tylko "obsługuje" Turbo BASIC XL, można też użyć różnych języków programowania:

  • Action!

  • Logo

  • Atari Pilot/Super Pilot

  • Atari Assember Editor

  • Microsoft Basic II

  • Atari Basic/Turbo Basic XL

Gdy Kay Savetz (autor podcastu ANTIC The Atari 8-bit Podcast) wraz z Bill-em Kendrick-iem i przyjaciółmi stworzył tego bota, miałem trochę radochy aby spróbować swoich sił w "walce" z nim i ograniczeniami jakie narzuca Twitter.

A jakie to ograniczenia? 280 znaków długości (tylko standardowe znaki ASCII [kody 32-127]), w to wlicza się długa nazwa bot-a (@atari8bitbot) do kompletu dyrektywy sterujące startem i przebiegiem (opóźnienie i czas) nagrywania.

Popełniłem kilka twitto-efektów, celem przetestowania każdej z funkcjonalności tegoż bot-a, pozwolę sobie zamieścić kilka z nich z podziałami na kategorię:

"Base64 Encoded Machine Language", Turbo Basic XL:
Kefrens Bars - 3rd
Kefrens Bars - 1st
2D water
Conway Game of life
2d plasma
Averager
Pseudo 3D-Starfield
Random Maze - Horizontal

Action!:
Hi Res - Hilbert
Sierpiński Carpet
Color Bars
Checkered floor effect
3D function draw
Mandelbrot
2d plasma
Restricted chaos game fractal #1
Restricted chaos game fractal #2

Atari Assember Editor:
Sierpiński
Randowm Walker
Fire
Sprite Scroll
2D Sprite Starfield
Big Sierpiński
Sierpiński Carpet
OS Plot Example

"Pure" Turbo Basic XL:
2D Vectors
XoR Color Cycling
Sine Text
Sierpiński - char mode
Square - Color Cycling Tunnel
Color Cycling Circles
Color Cycling Circle Tunnel
Vertical Scroll
Random Maze - Vertical
Random Maze - Horizontal
Random Maze - Diagonal
Random Maze Filler
Recursive Tree
Hilbert Curve
Ataroid Procedural GFX
3D Color Cycling Starfield
Eclipse
We Stand with You!

Gdy zaczynałem tą "zabawę" nie sądziłem że może to kogokolwiek zainteresować, jednak czasami ludzie pytali jak i co jest zrobione, duża część wyjaśnień jest w moich twittach, a to czego się nie dało wyjaśnić pisząc na Twitterze (np. kod źródłowy z komentarzami) umieściłem w dedykowanym repozytorium na moim koncie na github: Atari8bitbot - source code compilation

Cała moja przygoda z tym botem okazała się całkiem fajnym ćwiczeniem dla mózgu, przypomniały mi się stare dobre czasy i walka z ograniczeniami narzuconymi przez bot-a i Twittera, spowodowała że czasami przesiedziałem długie godziny na optymalizacji i skracaniu rozmiarów kodu.

Cóż mogę jeszcze powiedzieć, zapraszam wszystkich chętnych do zabawy! :)

ps1) powyższe linki prowadzą do twittów zawierających już video z efektów, wystarczy jednak scroll-up aby zobaczyć źródło... jeżeli źródło jest "zakodowane w BASE64", to zapewne można go znaleźć wskazanym repozytorium na github.

ps2) dużo ludzi wrzuca tam różnego rodzaju efekty, niektóre są naprawdę pomysłowe i fajne, zachęcam zatem do przejrzenia tego co widać na twitterowym profilu bota: https://twitter.com/Atari8BitBot

439

(2 odpowiedzi, napisanych Sprzęt - 8bit)

Cześć!

Wygląda na Turbo 6000.  Więcej o tym rozwiązaniu na Atariki: Turbo 6000. Był polski klon bazujący na tym rozwiązaniu, nazywał się Turbo Star lub Turbo Star Plus. Więcej tym interface w tym wątku: Turbo Star Plus

Schemat oryginalnego interface Turbo 6000 jest nieco bardziej rozbudowany, w Twoim magnetofonie jest jakaś uproszczona wersja, bardziej podobna właśnie do Turbo Star Plus, być może jest to po prostu późniejsza wersja tego rozwiązania.

440

(14 odpowiedzi, napisanych Software, Gry - 8bit)

Żbiku chyba na razie jest zajęty innymi sprawami, ale czekam cierpliwie, co się odwlecze to nie uciecze.

btw. pisząc *.dziesiąt razy *AJEK... moje palce albo klawiatura w pewnym momencie zrobiły coś takie że zaczęło na ekranie pojawiać się słowo .... "JAKE" :D i teraz spekulacje czas zacząć ;) Jak to "Janek" albo "Kuba" chował się za pseudo "*AJEK"

Winter Olympiad 88 - Turbo version by *AJEK

Hej!

Trochę to zajęło, ale w końcu znalazłem czas aby dokończyć sprawę odzyskania Winter Olympiad 88 w wersji dla Turbo 2000 (KSO/F) którą zrobił swego czasu *AJEK, a którą to udostępnił tutaj QTZ.

Gra w wersji turbo została podzielona na kilka bloków, na które składają się loader, intro, oraz pliki zawierające poszczególne dyscypliny (Downhill, Ski Jump, Biathlon, Slalom, Bobsled).

Konwersja tego zajęła mi trochę czasu, ponieważ borykałem taśmy z których zrzutu dokonał QTZ były już dość stare, a więc wysokie częstotliwości zapisane na taśmie były już na poziomie tak niskim że ledwie udało się to wszystko odzyskać. Na szczęście QTZ zgrał kilka wersji, i tylko dzięki temu udało się poskładać całość, wybierając najlepsze fragmenty nagrań z kilku plików źródłowych.

Do kompletu *AJEK postanowił zabezpieczyć swoją wersję przed kopiowaniem, zapewne dlatego aby konkurencja giełdowa nie mogła “bezstratnie” powielać jego wersji. Nie będę tutaj ukrywał faktu, że przez zabawę z tymi nagraniami i próbami odtworzenia całości, nabyłem też nieco więcej doświadczenia z obróbką tego typu sygnałów. Zauważyłem że uparte siedzenie i walka z jakimś nieczytelnym fragmentem zapisu nie jest dobrym pomysłem, bo w człowieku szybko rodzi się frustracja. Mi pomagało oderwanie się na jakiś czas od tematu i zajęcie się czymś innym. Potem wracałem do tego po jakimś czasie z nowymi siłami.

Na moją frustrację nałożyło się też to że *AJEK wykonał swoją pracę nieco “na odwal się”, byle działało to “jakoś”, początkowo myślałem że to przekłamania w nagraniach i przypadkowo tylko zgodziła mi się suma kontrolna, ale analizując kod doszedłem do wniosku że pod koniec roboty *AJK-owi się już nie chciało. Popełnił kilka kardynalnych błędów, które wymagały “patchowania”, niektórych miejsc pliku. Pojawiało się też kilka tzw. “glitch”, spowodowanych brakiem czyszczenia pamięci, albo wykorzystaniem miejsc pamięci (na loadery czy inny kod) co do których producenci gry oczekiwali że będą puste.

Poprawiłem najważniejsze tego typu “zaciachy”, a resztę (takie usterki które nie powodowały zawieszania się programu) zostawiłem w takim stanie w jakim zastałem. Jedną z widocznych pozostałości, jest to że gdy gramy we wszystkie dyscypliny po kolei i dokonamy pierwszego startu w konkurencji “Bobsled”, to zamiast animacji nóg postaci ujrzymy śmiecie, na grafice, jednak ponowne rozpoczęcie tej konkurencji powoduje że animacja wyświetla się już poprawnie. Do kompletu początkowo wersja z loaderem dla “Turbo 2000F” (dane pojawiają się na SIO DATA IN), nie działała poprawnie, tzn. gra nie wykrywała naciśnięcia klawiszy… a to tylko dlatego że kod sprawdzający wciśnięcie klawisza, jest naprawdę jakiś “porąbany”, i zamiast “filtrować” z rejestru SKSTAT nieistotne bity, jest skonstruowany tak że bierze pod uwagę nieistotne bity… nie wiem czy to jest jakiś fragment zabezpieczenia oryginalnej wersji, czy też po prostu nielogiczy i bezsensowy kod, jednak występuje on w oryginalnej wersji dyskowej, zatem go zostawiłem z niezmienionej formie:

    14B7: A9 00             LDA #$00
    14B9: 8D 0E D2          STA IRQEN
    14BC: AD 0F D2          LDA SKSTAT
    14BF: 09 08             ORA #$08
    14C1: C9 FF             CMP #$FF
    14C3: D0 F7             BNE $14BC
    14C5: E6 A3             INC $A3
    14C7: A2 00             LDX #$00
    14C9: AD 0F D2          LDA SKSTAT
    14CC: 29 04             AND #$04
    14CE: F0 06             BEQ $14D6
    14D0: CA                DEX
    14D1: D0 F6             BNE $14C9
    14D3: A9 00             LDA #$00
    14D5: 60                RTS

Do działania klawiatury w przypadku wersji Turbo 2000F doprowadziłem, dbając o to aby wejście szeregowe pozostało po transmisji w odpowiednim stanie i tak aby bit 4, rejestru SKSTAT był w takim stanie aby powyższa procedura działała poprawnie.

Jeżeli chodzi o patch w krytycznym miejscu, to po zakończeniu wszystkich dyscyplin, wersja *AJKA powinna była wypisać komunikat o ustawieniu taśmy na początku i wciśnięciu klawisza “OPTION” celem, wykonania zimnego startu komputera. Jednak kod który miał zostać uruchomiony wyglądał na uszkodzony, tzn. domyślam się że miało być tak:

    LDX    #$00
CPL LDA    $BB00,X
    STA    $BD00,X
    INX
    BNE    CPL
    …

co po przełożeniu na kod maszynowy daje następującą sekwencję bajtów:

A2 00 BD 00 BB 9D 00 BD

gdzie bajty “A2 00”, odpowiadają instrukcji LDX #0, jednak którą z części nagrania bym nie przetwarzał to zamiast “A2 00”, wychodziło mi że tam jest “52 00”, a więc sądziłem że to przekłamanie w nagraniu, poprawiłem więc szybko na “A2 00” i sądziłem że sprawa jest załatwiona. Niestety, okazało się że owo “52”, należy do tablicy zawierającej poszczególne adresy ładowania kolejnych bloków. A owa tablica “zadeptała” ów nieszczęsny kod, a więc “Boblsed” po zakończeniu rozgrywki skakał pod adres i CPU próbował wykonać instrukcję “52”, która jest po prostu niezdefiniowaną instrukcją, w tym wypadku “CIM” czy “KIL”, z 6502 po napotkaniu bajtu 52, po prostu się zawiesza i tylko reset jest w stanie wyprowadzić go z tego stanu. Należało więc tak poprawić kod aby bajty tabeli adresów ładowania pozostały niezmienione, a jednocześnie kod mógł być wykonany poprawnie. Skończyło się na tym że poprawiłem inny kawałek, modyfikując go tak i skracając aby procedura wywołująca ten kod skakała dwa bajty dalej, a w rej. X przed skokiem znajdowała się wartość 0. Po dokonaniu poprawek okazało się że komunikat o przewinięciu taśmy do “HEAD 1”, pokazuje się (zamiast zawieszenia się maszyny). A OPTION powoduje reboot. Tyle walki o tak bezsensowny drobiazg? :) no cóż… wnerwiało mnie to, więc poprawiłem. Wiem że niewiele to wnosi, jednak nie potrafiłem przejść obojętnie obok takiej “fuszerki” :P (oczywiście piszę to trochę z przymrużeniem oka, zapewne *AJEK zorientował się że popełnił taki błąd, jednak pewnie nie chciało mu się tego już poprawiać”, kod obsługujący to wszystko znajduje się bowiem w pierwszym bloku nagrana, tzn. “HEAD 1”)

Ufff…. to by było na tyle jeżeli chodzi o krótki wstęp i wprowadzenie do tegoż tematu. Teraz przejdźmy do następnego tematu czyli struktury samego nagrania i zastosowanego formatu zapisu danych. Gra wersji turbo składa się następujących plików:

  1. Loadera (w wersji dla systemów KSO Turbo 2000 lub pozostałych)

  2. Czołówka gry / Into (HEAD 1)

  3. Downhill (PART 1)

  4. Ski Jump (PART 2)

  5. Biathlon (PART 3)

  6. Slalom (PART 4)

  7. Bobsled (PART 5)

ad 1) loader występuje w dwóch wersjach:

  • #1 wersja która wczytuje dane używając interface dla KSO Turbo 2000 (sygnał oczekiwany na drugim porcie joysticka)

  • #2 wersja która wczytuje dane używając interface dla systemów Turbo 2000F, AST, ATT, UM, etc. (sygnał oczekiwany na linii SIO DATA IN). Będą działać wszystkie systemy turbo które to aktywuje się albo za pomocą odpowiedniego stanu linii COMMAND (AST, ATT, UM, Turbo 2000CS, Turbo 2000 “Wrocławskie”) lub za pomocą manualnego przełącznika, czyli np. Turbo 2001/2000F, itp.

Loader jest zapisany w postaci standardowego bloku zgodnego z formatem Turbo 2000 (KSO lub 2001/F). Jest to po prostu zwykły plik binarny DOS-u, ładujący się w obszar $1E00-$24FF. Zatem można go nagrać w dowolnym formacie i na dowolnym nośniku.

ad 2) Czołówka gry [plik: “01_head1_(INTRO).cas”] zapisana jest w postaci jednego długiego bloku danych ładującego się w obszar $0600-$85FF.

ad 3) “Downhill” [plik:  “02_part1_(DOWNHILL).cas”] składa się z dwóch bloków danych ładowanych przez mini loader “schowany” pod OS-ROM. Blok pierwszy ląduje w lokalizacji $0600-$25FF (potem zostaje przepisany pod OS-ROM w obszar $E000-$FFFF), blok drugi ładowany jest w obszar $0600-$BBFF.

ad 4) “Ski Jump” [plik:  “03_part2_(SKI JUMP).cas” ] składa się również z dwóch bloków danych ładowanych przez mini loader “schowany” pod OS-ROM. Blok numer jeden ląduje początkowo w obszarze $0800-$27FF, po czym zostaje przepisany pod OS-ROM w obszar $E000-$FFFF), drugi blok jest ładowany jest w obszar $0800-$907F.

ad 5) “Biathlon” [plik:  “04_part3_(BIATHLON).cas”] składa się także z dwóch bloków danych ładowanych przez mini loader “schowany” pod OS-ROM. Pierwszy blok ląduje tym razem w lokalizacji $0700-$26FF, a po załadowaniu jest przemieszczony jak zwykle w obszar $E000-$FFFF, drugi z bloków danych jest ładowany w obszar $0700-$7EFF.

ad 6) “Slalom” [plik: "05_part4_(SLALOM).cas"] składa się jak poprzednio dwóch bloków danych ładowanych przez mini loader “schowany” pod OS-ROM. Pierwszy blok ładowany jest tymczasowo w obszar $0680-$267F, i przemieszczony następnie obszar $E000-$FFFF, a drugi z bloków danych tym razem jest ładowany w obszar $0680-$B57F.

ad 7) “Bobsled” [plik: “06_part5_(BOBSLED).cas"] składa się zwyczajowo z dwóch bloków danych ładowanych przez ten sam mini loader “schowany” pod OS-ROM. Pierwszy blok ładowany jest tymczasowo w obszar $0480-$6F7F, po czym obszar od $6800-$6FFF jest przenoszony w obszar $C000-$C7FF, a drugi z bloków zostaje załadowany w obszar $6858-$BA57.

To tyle jeżeli chodzi o strukturę nagrania i opis plików wchodzących w skład tej wersji Winter Olympiad 88. Teraz pozostało tylko opisać format danych który został użyty do zapisu tychże plików na taśmie.

Pliki “Intro, part1 … part5” są zapisane z wykorzystaniem standardowej modulacji PWM używanej przez systemy z serii Turbo 2000/2001/F/KSO, tzn. długości impulsów oznaczające ton pilotujący oraz kodujące logiczne “0” oraz logiczną “1”, odpowiadają tym użytym w standardowym Turbo 2000. Jedynie układ bitów w blokach danych jest celowo zmieniony tak aby uniemożliwić kopiowanie zwykłymi narzędziami przeznaczonymi dla tych systemów. Format nie jest jakoś specjalnie zagmatwany, powiedziałbym że wręcz dość prymitywny, jednak na tyle skutecznie zmieniony że dostępne wtedy narzędzia na pewno nie radziły sobie z kopiowaniem tego strumienia danych. Co zatem składa się na blok danych zapisanych w formacie loadera?

  • paru tysięcy impulsów tonu pilotującego (domyślnie w Turbo 2000/F/KSO jest to 4096 impulsów)

  • 7 losowych bitów (7 impulsów kodujących losowe zera i jedynki)

  • bloku danych (długość bloku danych zaszyta jest na sztywno w kodzie loadera, tzn. loader dokładnie wie ile będzie miał blok wczytywanych danych)

  • 1 bajtu sumy kontrolnej (modulo 256)

  • paru impulsów (minimalnie 1 imp.) reprezentujący dowolną wartość (0,1)

Całe zabezpieczenie jak widać polegało na tym iż pierwsza porcja danych składała się z 7 a nie ośmiu bitów, zatem większość programów kopiujących czy procedur odczytu gubiła się w tym, bo albo po odczycie tak spreparowanego bloku danych, nie zgadzało się CRC, a dane wyglądały na “sieczkę”, bo były przesunięte o jeden bit w lewo, albo procedura odczytu zgłaszała błąd bo brakowało jej jednego bitu na końcu strumienia danych.

Używając kilku python-owych skryptów “naklepanych” byle jak na kolanie, aby przetworzyć pliki WAV zawierające poszczególne bloki danych, udało się zmusić narzędzie narzędzie a8cas-util od FUJI-ego, do jako takiego przetworzenia strumienia danych (oczywiście z przesunięciem bitowym) … i błędnym CRC na końcu. Napisałem na szybko, tym razem w C program który przesunął cały bit-stream tak aby dane wylądowały ponownie w granicach bajtów miałem już do dyspozycji pliki .HEX które miały poprawnie ułożone dane, które to dane można było edytować i patchować, dzięki temu dało się poprawić wyżej opisane fragmenty kodu.

Oczywiście mógłbym ten strumień zostawić tak jak w przypadku GABI czy KVADRK jako blok danych PWMS, jednak wtedy jego edycja nie byłaby tak łatwa i oczywista, a sprzątanie i porządkowanie segmentów w pliku HEX który potem przetworzyć do postaci CAS nie byłoby możliwe.

Na początku miałem napisać co prawda sobie cały program do konwersji danych w tym formacie, jednak uznałem że to nie ma najmniejszego sensu ponieważ jest to przypadek raczej jednorazowy, a gdyby się trafiło coś innego w przyszłości to i tak bym poddawał to wnikliwej analizie tak czy siak. Więc napisanie uniwersalnego narzędzie tylko dla samego siebie mijało się kompletnie z celem, dlatego też postanowiłem wykorzystać dobrodziejstwa a8cas-util, oraz jakieś szybko sklecone na boku prymitywne programy do przetwarzania i konwersji danych.

Swoją drogą gdyby nagrania udostępnione przez QTZ zachowały się w lepszej jakości zapewne nigdy bym nie zabrał się za analizę i wnikanie w format danych zastosowany przez *AJEK w przypadku tejże wersji taśmowej dwu-dyskietkowej gry jaką był w oryginale Winter Olympiad 88.

W załączniku archiwum zawierające loadery w postaci CAS oraz XEX. A także pliki zawierające dane gry w formacie CAS. Myślę że ich nazwy mówią same za siebie i pozwolą bez problemu zidentyfikować odpowiedni plik gdy gra poprosi o wczytanie konkretnego zbioru danych.

Dla zainteresowanych tym wszystkim o czym pisałem wyżej, do archiwum dołączam również pliki HEX, pozwalające na dokładniejszą analizę budowy i struktury opisywanych tu zbiorów. W plikach które załączam pozwoliłem sobie zamiast losowego 7-bitowego “śmiecia” wysyłać po prostu 7 bitów zer, loader i tak ignoruje ten fragment nagrania. A losowe wartości obecne w oryginalnym nagraniu miały zapewne na celu “zmylenie przeciwnika” ;)

To chyba już wszystko co chciałem napisać na temat “walki” z tą wersją “Winter Olympiad 88”. Dla zainteresowanych archiwum zawierające wspomniane wyżej pliki do pobrania poniżej.

ps1) Trzymajcie się i nie dajcie się tej zwariowanej obecnie rzeczywistości. Niebawem, o ile sytuacja pozwoli - wrócę pewnie znów do analizy sprzętu od Uicr0Bee, który czeka w kolejce już zdecydowanie za długo.

ps2) pewnie zapomniałem napisać masę rzeczy i pewnie zrobiłem masę błędów pisząc ten tekst w pośpiechu (chciałem jak najszybciej to już zakończyć) ... więc jeżeli zauważę jakąś rażącą niezgodność lub błędy to będę edytował ten post. Na razie wrzucam tak jak jest. Wydaje mi się że koniec końców napisałem mniej więcej to o co mi chodziło.

Szanowna Braci Atarowska!

Turbo Copy 4 został uratowany i zarchiwizowany! :) A wszystko to  dzięki uprzejmości i zacięciu naszego szanownego forumowego kolegi Krap-a, udało się wykonać dokładny zrzut dyskietki z programem "Turbo Copy 4" autorstwa Roberta Kujdy. Dzięki zaangażowaniu Krap-a, dzięki skorzystaniu z jego doświadczenia i sprzętu którym dysponował niemożliwe stało się możliwe i oto jest! Także WIELKIE podziękowania Krap! Podzieliłeś się swoją wiedzą i doświadczeniem, znalazłeś czas dzięki temu kolejna "perełka" z odmętów historii została zachowana dla potomnych!

Co to jest Turbo Copy 4? Dla tych którzy nie używali zbytnio kaset może to być i zagadka, ale dla ludzi którzy w latach '80 korzystali z usług różnych "studiów komputerowych" w których można było nabyć kasety z grami dla komputerów Atari, często spotykali się z nagranymi programami wygenerowanymi przez ten program. Loader był bardzo charakterystyczny, a nagranie było zabezpieczone przez skopiowaniem, dodatkowo zbiory zapisane przez TurboCopy 4 mogły być (i domyślnie były) kompresowane metodą RLE przed zapisem na taśmę, a loader dokonywał dekompresji danych w trakcie ich wczytywania.

http://seban.pigwa.net/atari/TC4/tc4_a.png  http://seban.pigwa.net/atari/TC4/tc4_b.png

http://seban.pigwa.net/atari/TC4/tc4_c.png  http://seban.pigwa.net/atari/TC4/tc4_d.png

W sumie jest to cały zestaw programów, który jak na rok powstania (1987) a całkiem spore możliwości, bo oprócz samego programu kopiującego jest też wbudowana w niego baza danych zawierająca spis programów. Szczegóły możecie doczytać w pliku z dokumentacją który dołączony jest do archiwum. Krap wyciągnął plik z dyskietki i przekonwertował do postaci czytelnej na PC.

Jak już wspominałem wcześniej w tym wątku, dyskietka z owym programem została pozyskana od Krzyśka Steca, który to urzędował na giełdzie na Grzybowskiej. Nie wiem skąd on miał ten program, ale to właśnie od niego pozyskałem kopię. Dyskietka zawiera zabezpieczenia, więc została przekonwertowana do formatu ATX, który czyta np. emulator Altirra.

Nie miałem czasu na analizowanie zabezpieczeń programu i ich usunięcie, więc wrzucam po prostu to co się udało zgrać. Jak nadejdzie spokojniejszy czas być może wrócę do dalszej analizy i opisu tego programu, deasemblacji loadera, etc. Na chwilę obecną wrzucam to co udało się "zdumpować" Krap-owi. Pozostała jeszcze druga strona dyskietki gdzie jest "Turbo Copy 3", ale to musi poczekać na następna sesję KyroFlux-owania z Krap-em ;-)

Hej!

No udało się odzyskać/przetworzyć wszystkie dane z tych nagrań które dostarczyłeś, więc nie zawracałem głowy już ;)

Jeszcze jeden mały update i powrót do wersji GABI zapisanej w standardzie...

Spokoju mi nie dawało ze Altirra nie radzi sobie za dobrze z plikami CAS w których występują kombinacje segmentów DATA i FSK. Gabi i Kuadryk zapisane w standardowej prędkości (modulacja FSK o prędkości ~600 bitów/sek) zwierały dwa rodzaje zabezpieczeń o której pisałem wyżej (rekordy niestandardowej długości, oraz tzw. rekordy "multi-baud", tzn. takie w których prędkość transmisji jest zmieniana w trakcie transmisji rekordu). Z tym zabezpieczeniem a8cas-converta i a8cas-util radziły sobie stosując bloki typu "FSK", zamiast segmentów DATA opisującej standardowe rekordy (co prawda o dowolnej długości, jednak o standardowej budowie typu nagłówek 0x55,0x55, dane ... , CRC).

Eksperymentując z "Kuadrykiem" zauważyłem, że odpowiednia obróbka pliku wejściowego (zastosowanie filtru band-pass) i np. użycie opcji "bit-deviation"...

a8cas-convert --bit-deviation 0.3 -fh "kuadryk_blk3 (FSK).bp.wav" "kuadryk_blk3 (FSK).bp.hex" 

...spowodowało że a8cas-convert stworzył plik .hex zawierający tylko i wyłącznie segmenty DATA i poprawnie rozpoznając rekordy typu multi-baud, nie stworzył plików typu FSK.

Z wczytaniem tego typu pliku Altirra nie miała już żadnego problemu, a więc postanowiłem "popracować" nad "Gabi" aby wyprodukować tego typu plik. Niestety nie potrafiłem zmusić a8cas-convert do wygenerowania tego typu pliku w przypadku "Gabi". Pierwszy rekord multi-baud udawało mu się rozpoznać, natomiast drugi rekord z uporem maniaka był konwertowany jako blok typu FSK.

Postanowiłem się przyjrzeć co w tej kwestii może mi zaoferować a8cas-util od FUJI-ego, zauważyłem w nim opcję --minfsk, która właściwie robiła to o co mi chodziło...

./a8cas-util.pl --autoadjust --highpass --minfsk conv "gabi_blk3 (FSK).wav" "gabi_blk3 (FSK).hex"

Jednak albo jakość nagrania, albo kombinacja bitów w tym nagraniu powodwały że tworzony rekord multi-baud nie był poprawny:

baud 00570
data 00394 55 55 00 00 02 56 a2 3b 20 83 ec a2 18 20 ff ed a2 18 20 83 ec 20 4a f4 a2 03 20 74 fe ; record=40 ; length=29 ; checksum=1f BAD
baud 00383
data 00000 a2 2f a9 01 20 21 ; record=41 ; length=6 ; checksum=9c BAD
baud 00570
data 00009 a2 03 20 77 eb 20 d2 ea a9 85 a0 98 20 98 ec ... ... ...  d0 03 4c c4 3a a2 3b 58 ; record=42 ; length=482 ; checksum=ad BAD

Każdy długi rekord w tym nagrani składa się 518 bajtów (512 bajtów danych + nagłówki + CRC), a jak widać powyżej drugi rekord multi baud został mylnie zinterpretowany przez program a8cas-util, ponieważ został rozpoznany tak że składa się z 29+6+482 = 517 bajtów, brakuje więc jednego bajtu... być może inne są też przekłamane, należało by to zatem skorygować... tylko jak określić które bajty i jakie powinny mieć wartości?

Tutaj z pomocą przychodzi emulator i wczytanie do niego tego samego pliku w postaci wav... a potem przeszukanie pamięci i poszukanie w niej sekwencji bajtów występujących na końcu poprawnej części rekordu multi-baud:

20 4a f4 a2 03 20 74 fe

czyli wchodzimy do monitora atari800, poszukujemy sekwencji bajtów z rekordu, znajduje się ona pod 3462, deasemblujemy od wskazanego adresu i już wiemy jakich bajtów jest za dużo i jakich brakuje:

> s 0400 ffff 20 4a f4 a2 03 20 74 fe
Found at 3462
> d 3462
3462: 20 4A F4  JSR $F44A
3465: A2 03     LDX #$03
3467: 20 74 FE  JSR $FE74
346A: A2 2F     LDX #$2F
346C: A9 01     LDA #$01
346E: 20 03 EC  JSR $EC03
3471: A2 03     LDX #$03
3473: 20 77 EB  JSR $EB77
3476: 20 D2 EA  JSR $EAD2

z powyższego wynika że:

data 00000 a2 2f a9 01 20 21 ; record=41 ; length=6 ; checksum=9c BAD

^^^ tutaj mamy jeden bajt za dużo (ten końcowy o wartości $21), natomiast w następnych danych:

data 00009 a2 03 20 77 eb 20 d2 ea a9 85 a0 98 20 98 ec ... ... ...  d0 03 4c c4 3a a2 3b 58 ; record=42 ; length=482 ; 

brakuje dwóch bajtów (482 bajty, zamiast 484 bajtów --> tak aby suma wszystkich bajtów w rekordzie wynosiła 518 bajtów) ... ze zdisasemblowanej treści wynika że brakuje bajtów: $03,$EC.

Po wprowadzeniu poprawek do pliku .HEX otrzymujemy poprany plik zawierający dwa rekordy multi-baud, co jest zgodne z oryginałem.

Dołączam ten plik do posta. Teraz i Altirra nie ma problemu z jego odczytaniem, w standardowych ustawieniach.

Hej!

Już ku formalności załączam archiwum z przekształconymi do formatu CAS, plikami zawierającymi grę Kuadryk (Kwadryk?) .

Archiwym zawiera 3 pliki:

  1. Kuadryk (Sonix) [FSK].cas

  2. Kuadryk (Sonix) [T2K].cas

  3. Kuadryk (Sonix) [T2F, T2K, AST].cas

1] Plik zawiera grę zapisaną w prędkości standardowej. Sposób zabezpieczania z tym który opisywałem przy Gabi, a więc rekordy o niestandardowych rozmiarach, a do tego w strumień wtrącone bajty z niższą prędkości bitową.

2] Plik zawiera grę zapisaną w Turbo, przed grą w turbo zapisano loader ładujący się w prędkości standardowej, jednak z zabezpieczaniami (rekordy o różnej długości), ten loader oczekuje sygnału na drugim porcie Joysticka, a więc zgodność sprzętowa z KSO Turbo 2000. Impulsy kodujące zgodne z KSO Turbo 2000/Turbo 2000F, zabezpieczenie tożsame z tym które opisywałem parę postów wyżej z opisem zastosowanych zabezpieczeń w Gabi.

3] Plik zawiera również grę zapisaną w Turbo, jednak loader tym razem obsługuje systemy turbo które oczekują sygnału na linii DATA_IN portu SIO, a więc będą działać systemy takie jak AST, ATT, UM (i wszystkie które są włączane za pomocą linii COMMAND), Turbo 2000F (po wczytaniu loadera w standardzie należy szybko przełączyć magnetofon na tryb turbo). Loader ten jednak jest na tyle uniwersalny że jeżeli wykryje interface KSO Turbo 2000 podłączony do drugiego portu joysticka, to przełączy się na odbiór sygnału z tegoż źródła.

447

(52 odpowiedzi, napisanych Kupię / Sprzedam / Zamienię pozostałe)

Azbest napisał/a:

seban: jest opcja zaproponujesz cos wiecej?

Napiszę szczerze, max. jaki mógłbym za to zapłacić to powiedzmy 80pln + koszt wysyłki (paczkomat) ... nie wiem czy nie rzucam tutaj zbyt niską dla Ciebie kwotą. Ja wiem że stan Twojego egzemplarza jest "mint"... ale jak pisałem mnie raczej interesuje karta i wpakowanie jej to mojego retro serwera niźli pudełko i jego stan.

Oczywiście jeżeli uważasz że to nadal za niska kwota to ja to jak najbardziej rozumiem i nie będzie tutaj żadnej urazy z mojej strony jeżeli uznasz tą kwotę za zbyt niską.

QTZ napisał/a:

Skąd wiedziałeś, że suma kontrolna w tym programie jest liczona przez XOR? Przeanalizowałeś kiedyś jego działanie? Spotkałeś się już z takimi plikami?

Widzisz, siedziało mi to jakoś z tyłu głowy, tzn. przyjrzałem się plikowi od Ciebie, a ponieważ był w niezłej formie i jakości, to zauważyłem że mimo tego że suma kontrolna (CRC) jest błędna, to zawsze tak sama, czyli wynikało z tego że nagranie jest poprawne jednak format danych jest nieco inny, zajrzałem więc do loadera, a tam od adresu $7B1:

07B6: B1 32     LDA ($32),Y ;BUFRLO
07B8: 48        PHA
07B9: 18        CLC
07BA: 45 31     EOR $31     ;CHKSUM
07BC: 85 31     STA $31     ;CHKSUM
07BE: 68        PLA
07BF: 20 3B 07  JSR $073B
07C2: 68        PLA

... jest procedura która po odczytaniu bajtu danych z taśmy dokonuje aktualizacji sumy kontrolnej, czyli:

07B9: 18        CLC
07BA: 45 31     EOR $31     ;CHKSUM
07BC: 85 31     STA $31     ;CHKSUM

jak widać pod adresem $7B9 została instrukcja CLC, co oznacza iż oryginalnie była w tym miejscu standardowa procedura liczenia CRC, która wyglądałaby tak:

07B9: 18        CLC
07BA: 65 31     ADC $31     ;CHKSUM
07BC: 85 31     STA $31     ;CHKSUM

... teraz wszystko stało się jasne, w dodatku z tyłu głowy miałem gdzieś te wszystkie informacje o formatach danych które były w ten sposób zabezpieczony o o których napisał Pajero w Atariki: Zapis z zabezpieczeniami. Do tego jak pisałem wcześniej wydawało mi się że był jakiś program W.Zabołotnego który miał zmianę formatu odczytanych danych, w dodatku pamiętałem ten tekst z IKS-a, bo kiedyś poprawiałem w Atariki wpis o turbo 2T06 ... no i do kompletu na pewno czytałem Twoje wpisy o Long Turbo Copy, tylko pamięć moja nie pozwalała sobie na przypomnienie nazwy programu, ale na szczęście Ty o tym pamiętałeś :D

QTZ napisał/a:

Wracając do tych kaset to ciekawe jak to się stało, że użyli starej wersji Turbo KSO?

Ależ sądzę że zrobili to celowo i z premedytacją, nie wiem czy byli świadomi istnienia formatu 1T czy też "patchowali" istniejące (późniejsze) Turbo 2000F... ale ten "pozostawiony" samotny "CLC", na to właśnie wskazuje. Po prostu zmianę sposobu liczenia CRC uważali za swego rodzaju zabezpieczenie... jak "silne" ono było to właśnie widać ;) Dużo bardziej się postarali w Gabi/Kwadryk ;)

Wszystkie te systemu turbo, czyli KSO 2000, Turbo 2000F, Turbo 2001, etc. są zgodne w 100% z Turbo 2T06 Wojciecha Zabołotnego i sądzę że właśnie na tym rozwiązaniu bazowały, format zapisu na taśmie w tych wszystkich systemach jest dokładnie taki sam jaki stworzył/przedstawił/wymyślił W.Zabołotny ... nawet procedury transmisji KSO2000, T2000F, etc. są identyczne jak w Turbo 2T06. Te systemy i ich oprogramowanie to ewolucja w czystej postaci bazująca na tym czemu podstawy dał W.Zabołotny.... zresztą to samo dotyczyło się rozwiązań sprzętowych... to po prostu różne drogi do osiągnięcia tego samego celu.

QTZ napisał/a:

Czyli musi istnieć Turbo KSO 1T## !? O którym piszesz "w starym formacie".

Z artykułu w czasopiśmie IKS nr 11/1998, na stronie nr 7 sam Wojciech Zabołotny pisał:

http://seban.pigwa.net/aa/wzab_1Txx.png

oczywiście mamy tutaj błąd w druku i zamiast "iT", powinno być "1T".

A widzisz... czyli jednak nie miałem urojeń tylko sklerozę :) Pamiętałem że to był program od W. Zabołotnego :) Tylko nie kojarzyłem który :)