Kontynuując temat udawania przez smartfon magnetofonu Atari rozpocząłem projekt interfejsu, który ma następujące założenia: - wczytywanie programów w normalu (FSK) z prędkościami 600-2600 bodów - wczytywanie programów w podstawowych systemach turbo: AST, ATT, UM, Turbo2000 podłączane przez SIO, Blizzard, czeskie Turbo 2000 i Super Turbo, Turbo ROM, być może również Turbo 6000 - zasilanie +5V z komputera Atari - jak najprostsza budowa
Do tej pory ogarnąłem temat FSK - 5 tranzystorów i układ 74HCT123. Fizyczny prototyp działa. Programy z prędkościami 600 - 2600 bodów dają obiecujące przebiegi na analizatorze stanów logicznych. Z realnym Atari jeszcze nie testowałem.
Wykorzystałem: 1) Wzmacniacz wejściowy z Turbo 2T06 (IKS 01/1989). 2) Ideę podwajania częstotliwości opublikowaną przez MarkaK i opisaną przez Sebana. Stosowaną w również w interfejsie Turbo2600 firmy Szok. ->link<- 3) Prosty dyskryminator częstotliwości na 74123 opublikowany w Radioelektroniku 2/1989.
zawsze, od zawsze zazdrościłem Spectrum uniwersalnego wtyku pod magnetofon, na A8 czy C64 musieli wymyśleć specjalistyczne dziwadła których wykonanie i precyzja mechanizmu była taka sobie.
Fajny projekt, ale w dobie Sio2SD to sztuka dla sztuki, jak ktoś ma ochotę na zabawę z kasetami to wyciąga magnetofon, ale żeby smartfonem udawać wczytywanie z taśmy !? to dla mnie za dużo. he,he ale jak cię to bawi to kibicuję :D.
Oczywiście, że sztuka dla sztuki, ale jaka satysfakcja! Sam czułem kiedyś ten dreszczyk, jak robiłem turbo, które było szybkie i niezawodne, ale to już pod koniec '90.
Sio2SD to też właściwie przeżytek w dobie Sio2USB podłączonego do smartfona. W każdym z nich brakuje mi turbo pasków i w ogóle atmosfery niepewności przy wczytywaniu programów. Nie ma tego klimatu z czasów młodości. Poza tym tyle jest teraz fajnych narzędzi do projektowania i usprawniania elektroniki, że szkoda żeby leżały odłogiem.
Co do jakości elektroniki w fabrycznych magnetofonach: Kuba kiedyś pisał, że do stwierdzenia czy leci 0 czy 1 potrzeba magnetofonowi 5-6 cykli sinusoidy i tak rzeczywiście jest. Kondensatory w filtrze za komparatorem okienkowym właśnie w tym czasie się ładują. W demodulatorze z podwajaczem częstotliwości wystarczy pół cyklu, żeby dokonać pomiaru.
Wygląda na to, że firma Atari traktowała magnetofon po macoszemu i nie usprawniała w jego konstrukcji.
Sio2sd to nie przeżytek. Uwielbiam paski i piski... ale nie wszystko z magnetofonu wczytasz. Na ten moment dla mnie najlepsze co powstało do szaraka to AVG.
@Baktra: Rzeczywiście mój projekt jest bardzo podobny w założeniach do Bumbox-a Zaxxona. Słyszałem wcześniej, że zrobił coś podobnego. Nawet kiedyś na elektroda.pl szukał projektanta kodu do Arduino, żeby wykonać Bumbox-a w formie bez smartfona (czyli całość miało ogarniać Arduino - podobnie jak w Tapuino dla C64 czy ZX Spectrum).
Ja natomiast podchodzę do sprawy zupełnie niekomercyjnie. Nie chcę produkować interfejsów dla innych osób. Po prostu sprawdzam możliwości, zbieram doświadczenia innych ludzi i próbuję optymalizować.
Widziałem, że kilka razy proponowałeś Wasze wspaniałe czeskie rozwiązanie z turbo na jednym tranzystorze. Widziałem też, że nie uzyskałeś większego posłuchu. Wszyscy powielają stare błędy projektowe z magnetofonu Atari, turbo Blizzard, AST czy UM.
Zaxxon nie opublikował schematu swojego Bumbox-a. Z modelu płytki widać jednak, że jest to analogowy dekoder FSK połączony z jakąś wersją turbo Blizzard. Obydwa rozwiązania są zupełnie nie optymalnie. W efekcie Bubmox ma 3 scalaki i 5 tranzystorów. Zapewne w normalu osiąga max 900 bodów.
Moje rozwiązanie (a właściwie nie moje, bo ja tylko pozlepiałem cudze rozwiązania) będzie miało 1 scalak i 7 tranzystorów a w normalu śmiga na 1300 bodów.
Z resztą nie oto chodzi, żeby ścigać się na ilości elementów. Teraz są one tak tanie, że dodanie jednego czy dwóch scalaków nie zmienia kosztu urządzenia. Ważne, żeby dobrze się bawić elektroniką i starymi komputerami.
@Adi - generalnie byłoby fajnie, aby w końcu powstało coś na wzór boomboxa - ale oferujące obsługę wielu systemów. Nawet jeżeli urządzeniem pośredniczącym będzie telefon. Tylko dzisiaj transmisja z telefonu powinna odbywać się już po BT, bo gniazdo minijack zaczyna być już rzadkością.
Moje „propozycje” z przeszłości są po prostu przeszłością. Po pierwsze, „turbo z pojedynczym tranzystorem” nigdy nie było przeznaczone dla urządzeń umieszczonych między smartfonem a komputerem. Po drugie, jestem programistą, który niezbyt dobrze radzi sobie z lutownicą. Chciałem tylko wiedzieć, czy wiesz o projekcie „Bum Box”, który miał podobne cele, nic więcej.
Powodzenia w bieżącym projekcie. Możesz spróbować przetestować to za pomocą mojej aplikacji CAS2Audio na Androida.
@Baktra: Twoich wspaniałych programów CAS2Audio i Turgen używam od początku. Bez nich nie byłoby mojego projektu. Trzymanie wav-ów na smartfonie czy MP3 jakoś nie bardzo mi się podobało. Co innego eleganckie pliki CAS. Wielkie dzięki dla Ciebie za wkład w dziedzinie magnetofonów Atari. Wiele lat temu pisałem w Pascalu konwertery xex->wav Turbo2000 ale Ty załatwiłeś sprawę tak kompleksowo, że nie ma już tu czego poprawiać :).
Edit: Rozwiązanie turbo na jednym tranzystorze doskonale nadaje się do współpracy ze smfartonem. Wkrótce przedstawię całość rozwiązania.
mam 'bumboxa'. niby miał być też w wersji 2, ale na pomysłach chyba się skończyło. 'bumbox' obsługuje kilka systemów turbo (przełącznik ma), w tym kso (po 2gim porcie joya). i o ile z bluetooth fajnie mi to działa, to przez wejście analogowe rca kiepsko :-/ sygnał docohdzący do atarki jest zbyt słaby, za cichy. kilkoma urządzeniami próbowałem się podpinać, bez powodzenia. może da się tam coś porzeźbić w torze audio, może jest jakaś rezystancja do obejścia, ale nie odważyłem się rozbierać klejonej obudowy. .. taak więc i ja dopinguję przy rozwoju tego tu o interfejsu
@takron27: Tak jak pisałem wcześniej - Zaxxon nie opublikował schematu bumbox-a. Jednak podejrzewam, że obwód wejściowy ma na jednym ze wzmacniaczy operacyjnych ze scalaka LM324.
Zrobiłem podobny układ do współpracy ze smartfonem i rzeczywiście poziom sygnału z wyjścia słuchawkowego ma znaczenie. Sygnał nie może być za cichy ale też nie może być za głośny. Zwłaszcza jeśli smartfon podbija go procesorem DSP. Czyli nie można wychodzić z głośnością daleko na czerwoną część paska. U mnie najlepsze efekty były na granicy między niebieską a czerwoną częścią paska głośności. Oczywiście regulację głośności trzeba przeprowadzać przy podłączonej wtyczce słuchawek, bo smartfon osobno pamięta głośność słuchawek a osobno głośnika.
Przyglądam się innym, mało znanym w Polsce systemom turbo, aby stworzyć interfejs naprawdę uniwersalny.
Kuszące są systemy, które korzystają z szybkiego FSK. Nie ma w nich wyłączania ekranu podczas ładowania. U nas był to Turbo 2600 a w Chile dużo lepszy Sistema Injector.
Dopiero dziś się za niego wziąłem. Czy macie jakieś doświadczenia z tym systemem?
Ponoć w Chile był montowany przez dealera Atari w nowosprzedawanych magnetofonach.
Po wysłuchaniu wav-a z grą Bonk nagraną w Sistema Injector dostępnego tu: ->link<- cofam swoje stwierdzenie, że jest to szybkie FSK.
Słychać w nim prostokątny przebieg podobny do Turbo 2000. To jest ciekawy przypadek.
Przecież Atari dostaje z magnetofonu strumień bitów. Pokey-owi jest obojętne z jakiego dekodera ten strumień pochodzi. Czyli można uzyskać prędkości podobne do Turbo 2000 bez wyłączania ekranu. Może Chilijczycy poszli tą drogą?
Sistema Injector wg strony jest 7 x szybszy, niż standard, więc nawet nie było by tu miejsca na pojedynczy cykl dźwięku.
Włączony ekran spokojnie może być przy turbo. W Sistema Injector pojedyńczy bit ma średnio 4 linie ekranowe. Licząc po liniach ekranu, można by np. zapisywać bit 0 jako 2 linie/2 linie, a 1 jako 4 linie/4 linie i liczyć długość takiego całego cyklu. Jeśli czas większy od 6 skanlinii (różnica vcount>3) to 1 a jeśli mniejszy to 0. Tak bym to widział i być może tak to działa. W każdym razie licznik musi być oparty albo na vcount albo na (lepiej) pokeyu. Jeśli na pokeyu - to bez użycia przerwania, za to z testowaniem flagi, czy licznik się skończył. Jak się nie skończył - bit 0, a jak się skończył - to bit 1.
Tak bym to dzisiaj zrobił, na liczniku pokeya, bo na vcount to niższe prędkości, rzędu 2kbaud, a nie 4 :)
Wydaje mi się, że mają zliczanie oparte na przerwaniu, tak jak w Turbo 2600. Jest słynna wersja Feud-a dla Radiokomputera z odgrywaniem muzyczki i graniem w odwracankę podczas ładowania dłuższej gry.
Właśnie wczoraj mnie olśniło, że wszelkie turba (czeskie, Turbo 2000, AST, Turbo 6000) poszły złą drogą. Wystarczyło podmienić demodulator FSK na demodulator fazy/długości impulsu, przebudować procedury z OS Atari (aby obsłużyć większe prędkości) i mamy szybką transmisję z pełną obsługą ekranu a nawet np. generowaniem muzyczki.
Jedyny problem jaki mi teraz przychodzi do głowy to obsługa długiej sekwencji takich samych bitów (np. ciąg zer). Demodulator FSK radzi sobie z nią doskonale. Stan zera może trwać bez ograniczeń. Demodulator fazy tego nie wytrzyma.
Tak czy inaczej trzeba rozgryźć Sistema Injector. Tam są jakieś dwa przerzutniki. Pewnie one podtrzymują stan linii Data In, czyli wyjścia z interfejsu.
Wygląda, że jest to rozwiązanie genialne w swojej prostocie i funkcjonalności. Autorem był ponoć 11-latek (software) i jego ojciec (hardware).
Systemy turbo oparte na PWM powstawały w różnym czasie, z różnymi celami i ograniczeniami. Celami były: prostota, niska cena i budowanie z części dostępnych wówczas na lokalnym rynku.
Demodulator programowy przyczynił się do prostoty i niskiej ceny. Poza tym algorytm dekodowania mógł zostać „zapożyczony” z ZX Spectrum (tak było w przypadku czechosłowackiego T2000. Autor wymienił listę ZX ROM jako jedno z odniesień w swoim artykule).
Ponadto modyfikacja systemu operacyjnego wymaga albo nowego chipa ROM, albo posiadania systemu operacyjnego w „RAM under ROM” ze wszystkimi nieprzyjemnymi konsekwencjami.
O ile mi wiadomo, „Injektor” używa czegoś w rodzaju kodowania manchesterskiego, dlatego potrzebuje pinów CLOCK.
@baktra: PWM jak nabardziej może zostać, tylko trzeba przekazać do Atari nie cały impuls ale samą zmianę, w porównaniu do poprzedniego impulsu. Dokładnie tak jak to robi demodulator FSK współpracując z OS Atari.
W polskim Trubo2600 już przeszli połowę tej drogi, poprawiając procedury OS aby obsługiwały wyższe prędkości. Utknęli jednak na ograniczeniach modulacji FSK.
Wystarczy podmienić FSK na inną modulację i mamy pełny sukces.
Doczytałem o Kod Manchester. Czyli młody Chilijczyk pokonał problemy, o których wcześniej pisałem właśnie za pomocą tej modulacji. Rzeczywiście taśma magnetofonowa nie wytrzymałaby składowej stałej przy dłuższych sekwencjach takich samych bitów.
To jeszcze trzeba sprawdzić jak łapali zmiany stanu linii Data In. Jeśli przez przerwanie, to jesteśmy w domu :). Trzeba iść ich śladem.
Co do kontekstu historycznego: chilijskie turbo oparte jest na CD4030 - 4 bramki EXOR i CD4013 - dwa przerzutniki Flip-Flop D. Obydwa scalaki w wersji TTL były dostępne w latach 80-tych w Czechach i w Polsce. Były też tanie.
Spoko, skoro to takie super, to zaczynam podejrzewać, że to sprytne przesyłanie połówek bajtów w jakimś kodowaniu właśnie typu Manchester przy użyciu rejestru szeregowego, zarówno out, jak i in. Wtedy pokey czyta pół bajtu a procek tylko czeka na zakończenie odczytu. W sumie proste i genialne to by było. Nie trzeba przerwań. Tylko to nieszczęsne odchylenie przesuwu taśmy pow. 5% jest problematyczne, na szczęście tylko w trakcie transmisji, bo podejrzewam, że liczą prędkośc transmisji po jakichś naprzemiennych bitach, jak to jest standardowo w OS.
Jednak pamiętać trzeba, że takie prymitywne podejście do turbo dawało możliwość wczytywania plików ze spectrum czy C64, a z tym pokeyem to było by mniej oczywiste, żeby takie coś wymyślić.
kilobajt na sekundę albo i szybciej. Czad, to by dawało 8kb-10kb, więc raczej jestem sceptyczny jeśli chodzi o to 256 B na blok. W sumie procki systemowe działają na 128 B/blok, więc było by więcej zachodu a mało zysku z podmianki z 128 na 256. Poza tym zgadza się ratio 1/7, czyli jakby obciąć loader, to bardziej 1/8. Stała prędkość bloku sugeruje kodowanie zapewne 4 bitów na bajcie, a może nawet i 2 (chociaż tutaj bit startu i stopu jest zbyt krótki na audio wg mnie).
Dla 4 bitów/ bajt w sumie mamy 31 takich kombinacji w bajcie + bit start i stop, że bitrun jest max 3 razy takie same poziomy, a górek jest tyle samo, co dołków, żeby nie było składowej stałej. I leci to na ca 8 kbaud, dostajemy sumaryczne bitrate 4k, co najważniejsze, stałe.
A jeśli dopuścimy bitrun 4 bity, to można zapisać 36 różnych możliwości, czyli 5 bitów, i zyskujemy jeszcze ~20% czasu :)
Bloków 256-bajtowych jestem pewien. Przeczytałem o nich (za pomocą tłumacza google :)) w blogu: ->link<-
Można je też wyliczyć na postawie filmiku i rozmiaru Montezuma's Revenge(Parker Brothers).xex: 16398/256 = 64,05 czyli tyle ile widać na filmie.
Procek na nic nie czeka, no może najwyżej na przerwanie. Robi swoje, cokolwiek. A rejestru przesuwnego na pewno w interfejsie nie ma.
Cały czas myślimy przez pryzmat Turbo2000. Ja też tak do wczoraj miałem, aż mnie w końcu olśniło. Tu jest zupełne odwrócenie ról. Procek robi swoje a turbo dobija się do niego z danymi kiedy potrzeba. Dokładnie tak jak w normalu. Z tą tylko różnicą, że nie ma wolnej modulacji FSK, tylko jest szybka PWM, a właściwie Manchester. Dodatkowo synchronizowany wyjściem Clock z SIO (jak napisał Baktra).
Z tego co pisze Wikipedia, w modulacji Manchester zegar potrzebny jest tylko na etapie kodowania, czyli w przypadku magnetofonu, przy zapisie.
Co ciekawe będzie to kodowanie wspomagane sprzętowo: bramka ExOR i zegar. Odczyt jest "self-clocking", synchronizowany przy każdym bicie. Modulację cechuje duża odporność na zmiany prędkości transmisji. Odmiana modulacji Manchester używana jest w sieci Ethernet.
Gwoli ścisłości Manchester był używany w ethernet 10Mb.
I jeszcze - coś mi tu się nie zgadza:
Trochę historii
SITRE to powielacz gier z płyty na kasetę dla 8-bitowego Atari, który opracowałem latem 1989 roku na zlecenie SYFCOM, firmy zajmującej się sprzedażą pirackich gier w Viña del Mar. Szukałem połączenia w jednym powielacz:
- Kopiuj gry w formacie XEX. - Turboładowarka, jedna z tych, które mają wyższą szybkość transferu (ostrzejszy dźwięk) i krótszy czas ładowania. - Wznów ładowanie w punkcie, w którym się nie powiodło („ przewiń X obrotów ”). - Użyj normalnych magnetofonów kasetowych (bez systemu wtryskiwaczy ). - Kopiuj gry, które wymagały przerw na inicjalizację („ wolne dźwięki ”).
wtryskiwacz - to tłumaczenie Injector, czyli tu wszystko idzie w normalu. I rzeczywiście tam jest mowa o 256 bajtach na blok, ale czy to jest to samo turbo? szukam dalej.
Tak, Sitre to zupełnie co innego, niż Injektor. Sitre troszkę przyspiesza i działa na zwykłym magnetofonie, ma 256 bajtów na blok. A Injector wygląda na to, że ma albo 128 (Keystone Kapers, 67 bloków a gra ma 8 kB) albo 256 bajtów na blok (Montezuma, 16 kB) i wymaga przeróbki sprzętowej na dwóch scalakach.
Kuba, patrz mają nawet swoją "odwracankę" jak w Feudzie Turbo 2600 z Radiokomputera: (z tłumaczenia strony ->link<- )
Po przeczytaniu wskaże kolejny krok, czyli nagranie go w formacie injektor. Poczekaj, aż zapisze się na taśmie, a następnie powróci menu główne. Po nagraniu możesz załadować go za pomocą START + OPCJA , włączając swoje atari i naciskając RETURN , pojawi się gra SIMON, która została zaprojektowana, aby ożywić oczekiwanie podczas gry. Jeśli ładowanie zakończy się pomyślnie, pojawi się komunikat o naciśnięciu klawisza POMOC , aby rozpocząć.
"Ożywić oczekiwanie podczas gry" - z kontekstu wnioskuję, że chodzi o oczekiwanie na wczytanie gry.
Edit: Na jednej z podstron jest dużo informacji o interfejsie Injektora: ->link<-
Ciekawa wersja kasetowa gry Time Slip. Co prawda tylko 620 bodów i FSK, ale podczas wgrywania najpierw leci muzyczka a potem można grać w Pong-a. Przełączanie 1/2 graczy klawiszem Select. W przypadku wystąpienia błędu można cofnąc taśmę o kilka rekordów i po naciśnięciu Return kontynuować wczytywanie.
Jest bardzo ciekawy licznik wczytanych bajtów, aktualizowany co jeden bajt. Czegoś takiego w życiu nie widziałem. Pokazuje to, że przerwanie IRQ Pokey-a występuje po wczytaniu każdego bajtu. Uruchomienie gry po wczytaniu - klawisz Start.
Przedłużyłem rozbiegówkę do 20s, bo w oryginale była dziwna 4s.
Dzięki Robert za cenną uwagę. Rzeczywiście w pośpiechu źle to zinterpretowałem. Obliczona przez Ciebie wartość pasuje do tego co pisali Chilijczycy - 4000 bodów. W takim razie ich turbo nabiera kolorów :). Nie do końca jeszcze rozumiem czy kodowanie Manchester nie powoduje podzielenia tego bitrate przez 2.
Kontynuując prace na "rozgryzieniem" Sistema Injektor zdissaemlowałem pierwszy blok (w normalu) gry Bonk, której wav jest dostępny tu: ->link<-
Większość kodu to ukrywanie samego siebie. Samomodyfikacja kodu plus nielegalne rozkazy. Potem jest kopiowanie ROM -> RAM. W końcu kawałek podmieniający procedurę ROM:
Po podmienieniu kodu procedury czekają ok. 5s, aż wysoki ton z kasety przełączy interfejs na turbo, a potem robią normalny skok do ładowania bloku: JSR $FD8D
Przy wejściu do procedury $ED3D akumulator ma $01 a rejestr X $02. Czyli ustawiają częstotliwość 3995,02Hz i jadą normalnym odczytem bloku. Resztę załatwia hardware. Proste i genialne :).
W drugim, długim bloku (już w turbo) jest reszta loadera. Na razie nie mogę jej odczytać, bo nie mam hardware albo zaufanego pliku CAS.
@adi Moze nie do konca na temat ale wspomniales ze nie widziales aby cos sie odswiezalo po kazdym bajcie odczytu, ja pamietam kopier kasetowy ktory pokazywal bajt po bajcie odczyt dla kazdego bloku niestety nie moge sobie przypomniec jego nazwy :/ pamietam ze na ekranie byl kwadracik w ktorym wypelnialy sie odczytywane bajty.
@Wolfen: Piszesz jak najbardziej na temat :). Takie pokazywanie bufora magnetofonu oczywiście widziałem, a nawet wykorzystywałem przy strojeniu moich ostatnich dekoderów FSK. Natomiast u Chilijczyków jest coś innego. Nie pokazują bufora tylko przechwytują przerwanie IRQ Pokey-a związane z transmisją szeregową i co jeden odebrany znak aktualizują licznik bajtów.
Wyświetlanie bufora magnetofonu to prosta sprawa. Ustawia się w DL Antic-a ten sam obszar pamięci co bufor magnetofonu i działa nam w automacie.
Edit: Genialne w ich rozwiązaniach jest to, jak wpasowali się w system operacyjny z turbo. Praktycznie nic nie zmieniali, oprócz ustawienia większej prędkości. Może najwyżej coś przy zapisie. Przy odczycie Pokey wcale nie wiedząc, że otrzymuje dane z turbo leci sobie jak nic swoimi licznikami i przerwaniami. Cały system działa jak fabryczny. Wyświetlanie i inne bajery (muzyczki, mini gierki) podczas odczytu też działają.
Skoro da sie w tle zrobic ponga czy odwtarzac muzyke to pewnie mozna i inne cuda :) Ciekawe ile czasu procesora zostaje na takie zabawy (pewnie zalezy tez od predkosci transmisji)
Na pewno zależy to od prędkości transmisji. A czasu procesora pozostaje sporo, bo większość roboty wykonuje Pokey. Procesor musi tylko zabrać bajt z rejestru Pokey-a i umieścić go w pamięci. Jednak robi to według procedur z OS Atari, a tam jest sporo dodatkowych operacji.
Czyli do rejestru $D2OF zapisują wartość #$27. Co daje bit3 = 0 - transmisja dwutonowa wyłączona. Piszą Poke-yem do magnetofonu jak do stacji dysków. Dodatkowo nakładają na to przebieg zegara za pomocą dwóch rezystorów we wtyczce SIO.
Złapałem analizatorem stanów logicznych podłączonym do realnego Atari nagranie Sistjema Injektor.
Zapis na DataOut jest cyfrowy, brak charakterystycznych dla magnetofonu dwóch bajtów sychronizujących $55. Częstotliwość przebiegu zegara: 4kHz Przebieg danych dokładnie zsynchronizowany z zegarem.