speccy.pl
Facebook Like


SPECCY.PL

[SPECCY.PL PARTY 2023.1]

[WIKI SPECCY.PL]
Polecamy

KOMITET SPOŁECZNY KRONIKA POLSKIEJ DEMOSCENY
PIXEL HEAVEN 2023
AYGOR
Forum ZX Spectrum
Zawartość panelu chwilowo niedostępna
Archiwum plików ZX Spectrum
Nawigacja
Loadery według Kato.

Loadery według Kato

Archiwum speccy.pl dostało od tajemniczego autora znanych spectrumowych użytków kilka jego programów z lat 88-90: Turbo Copy 80, PET Print, Extended CAT i Mons-Zeus Text Converter. Programy są warte obejrzenia, ponieważ mają zabawne, nietypowe loadery – inne od tych które zapamiętaliśmy z tamtych czasów. Można powiedzieć, że są to wersje reżyserskie ;)

Każdy z nich jest inny i robi coś w trakcie ładowania, i nie jest to jeden, a co najmniej dwa efekty. Każdy jest krótki – nie dłuższy niż 300 bajtów. W dwóch przypadkach BASIC jest dłuższy, ponieważ zawiera nie tylko loader. Każdy ma też dowcipny sposób uruchomienia, oraz szpanerski nagłówek.

Program w asemblerze wywołuje się używając funkcji USR adres. Coś musi być jednak przed USR. Przyjęło się że jest to RANDOMIZE, ewentualnie PRINT, jednak może to być dowolny inny rozkaz, który ma argument numeryczny. Jednak mimo tej wiedzy, niektóre zastosowane komendy wywołują uśmiech.

Standardowa procedura ładująca w ROM Spectrum ma 175 bajtów od adresu #0556 (1366). Ustawienie parametrów i wywołanie to kolejne 13 bajtów. Zostaje mało miejsca na bajery. Na szczęście można skopiować procedurę z ROM i zmodyfikować ją.

Jak zrobić żeby loader robił coś w trakcie ładowania?
Procedura ładująca mierzy czas między początkiem a końcem impulsu z taśmy, żeby rozpoznać czy to jest zero czy jedynka. Czyli po odczytaniu początku impulsu z taśmy czeka na jego koniec. Zamiast czekać może coś robić. W LD-EDGE-1 (#05E7) jest na początku pętla LD-DELAY (DEC A/JR NZ, -3) która czeka przez 359 taktów zegara. Własny program trzeba napisać tak, żeby wykonywał się w częściach nie dłuższych niż 359 taktów, pomiędzy zboczami sygnału z taśmy. Program ma być umieszczony w miejscu pętli opóźniającej, czyli na początku EDGE-1. Jeżeli części będą krótsze można wykorzystać pętlę opóźniającą z mniejszą wartością początkową. Należy też zadbać o to żeby zachowane były rejestry używane przez procedurę ładującą, czyli wszystkie oprócz A i IY. Można np. użyć alternatywnego zestawu przełączając EXX.


COPY 80

Na początku ładowania paski są standardowe. Po chwili na środku ekranu pojawia się czarny kwadrat, który szybko rozszerza się na cały ekran, łącznie z borderem. Po chwili niepokoju czy program nie zawiesił się – pojawiają się dyskretne czarno-zielone paski, a potem na dole, powoli, litera po literze, zielony napis COPY 80 z liter 3x5 znaków. Kiedy już wydaje się że to wszystko, paski ciemnieją a napis zaczyna zmieniać kolory.

COPY 80 to program kopiujący dla Spectrum 48K z rozszerzeniem do 80K, montowanym przez STAVI, opisanym w Bajtku. Z wyglądu przypomina Compress Copy, obsługuje podwójną szybkość (Turbo), różni się brakiem kompresji i pojemnością pamięci - 76800 bajtów. Uruchomienie programu na komputerze bez 80K, powoduje pulsowanie napisu na dole i blokadę.

Kato umieścił procedurę efektów za kopią ROMowego EDGE-1, zmieniając wywołania z EDGE-1 na nią. Powrót przez JR. Procedura nie zajmuje dużo miejsca (61 bajtów), ani czasu - standardową wartość A równą 22, zastąpiły w jednej ścieżce 12, w drugiej 15. Widać więc że DELAY jest zmniejszony o około 160 lub 112 taktów. Paski czarno-zielone lub czarno-niebieskie otrzymał modyfikując n w rozkazie AND n, przed wysłaniem koloru na port 254.

Uruchomienie: CIRCLE USR 666.
Można by to odczytać jako „Kółko użytkownika 666” czyli „Diabelski krąg” ;) Oczywiście 666 nie jest rzeczywistym adresem wywoływanym, interpreter BASIC w trakcie pracy programu nie odczytuje wartości reprezentowanej w listingu, tylko pięć bajtów zapisanych po identyfikatorze 14.


PET PRINT

Tu również na początku ładowania paski są standardowe. Ekran od dołu zaczernia się, a na środku pojawia się duży zielony napis PET z liter 7x5 znaków. Charakterystyczny dźwięk, rozpoznany przez wiele osób jako „atrybuty ładują się od tyłu” nie jest tym na co wygląda. W czasie tworzenia napisu (dużo zer, na środku trochę zielonego), ładuje się tekst powitalny (dużo spacji, na środku trochę liter). Co ciekawsze tekst ten za chwilę będzie skrolowany na ekranie! To, jak mówił Doc Brown: wymaga myślenia czterowymiarowego - należy wykorzystać coś, czego jeszcze nie ma w momencie startu! I tłumaczy jak Kato udało się zmieścić loader w 294 bajtach, gdy sam skrolowany tekst ma 142 bajty!

Potem paski zmieniają się na wielokolorowe, a po chwili na dole ekranu pojawia się skrolowany napis, który właśnie przed chwilą został załadowany.

Normalne paski na początku i znany dźwięk zsynchronizowany z akcją na ekranie to zmyłka dość skuteczna, żeby oglądający nie zwrócili uwagi, że zawartość ekranu pojawia się szybciej niż gdyby były to wczytywane atrybuty.

W tym loaderze (i w następnych), procedura efektów jest umieszczona na początku EDGE-1. Jest bardziej rozbudowana, ma 153 bajty (czyli prawie tyle ile cały standardowy LOAD) i wartości opóźnienia 1, 3, 5, 14, 17, czyli momentami wykorzystuje cały dostępny czas. Wielokolorowe paski w widoczny sposób powiązane ze słyszalną ładowaną treścią, to efekt wysyłania na port powiększonej o 3 wartości rejestru B, czyli licznika zliczającego czas trwania impulsu z taśmy.

PET Printer to przeglądarka tekstów Polskiego Edytora Tekstu, czyli odpowiednik TT-PRINT. O ile skrolowanie tekstu klawiszami 6 i 7 działa podobnie, to skrolowanie klawiszami 5 i 8 wygląda dużo lepiej - jest o wiele szybsze niż w TT-PRINT. O ile dobrze pamiętam, teksty z P.E.T. różnią się tylko kodowaniem polskich znaków.

Uruchomienie: BRIGHT USR 7up.
“Błyskotliwy użytkownik 7up”. Czemu 7up? Może to ulubiony drink? Ciekawe jest też że 7up nie jest zmienną, bo nazwa zmiennej musi zaczynać się od litery, a mimo wszystko liczbą! Następuje po niej normalna pięciobajtowa reprezentacja. Liczba całkowita byłaby widoczna w 3 i 4 bajcie, ale czemu zostawić proste coś co może być zagmatwane? Tak jak w COPY 80, liczba jest w formacie zmiennoprzecinkowym i zajmuje wszystkie 5 bajtów. Ciekawe jest że BASIC dopuszcza taką sztuczkę. Liczba na początku powoduje że następujące po niej litery nie wywołują błędu. Oczywiście normalnie nie da się napisać takiej linii.


ECAT

Loader ECAT jest moim zdaniem najbardziej efektowny. Jest to co prawda jeden efekt przez cały czas, w odróżnieniu od pozostałych trzech programów, gdzie można mówić o pewnym scenariuszu, ale jest to efekt najbardziej widowiskowy. Paski w czasie pilota początkowo są klasyczne, by po sekundzie zmienić się na tęczowe, przedzielone białym tłem. Wygląda to o wiele ciekawiej niż ograne już zwykłe tęczowe paski. W ECAT wyjątkowo główny blok ma nagłówek. Po wczytaniu nagłówka tło wraz z borderem zmieniają się na czarne. Tęczowe paski pilota są teraz na czarnym tle. Gdy już zaakceptujemy paradę kolorów na ekranie, kończy się pilot i centralnie na ekranie pojawia się duży napis ECAT, w którym są... wielobarwne paski z bordera! Wygląda to tak, jakbyśmy patrzyli przez wycięty w czarnej kartce napis.

Procedura efektów jest tu dość krótka - 86 bajtów. Ten efekt był chyba niełatwy do osiągnięcia. Mimo zastosowania do zmiany kolorów ekranu PUSH, zamiast LD, trwa to na tyle długo, że nie ma w ogóle DELAY, plus dodatkowo stałe czasowe w głównej pętli LD-8-BITS zostały zmodyfikowane! Zliczona długość impulsu jest porównywana z #C3 zamiast standardowego #CB. Czyli część czasu, kiedy standardowa procedura z ROM już liczy, też jest tu zajęta. Działa to dobrze, bo nie chodzi o dokładne zmierzenie częstotliwości sygnału z taśmy, ale o odróżnienie jedynek (są dwa razy dłuższe) od zer. Ładne wielokolorowe paski to efekt wykorzystania rejestrów R i E (LD A, R/XOR E) gdzie R to zmieniający wartość rejestr odświeżania pamięci, a DE to długość pozostała do załadowania. Tęczowe paski pilota mają osobną procedurę EDGE.

Extended Cat jest tym co sugeruje nazwa – rozszerzonym katalogiem dysku FDD3000.
Dane mogą trafić na ekran lub na drukarkę. Program obsługuje napędy A i B, ma opcje wyświetlania wszystkich plików [FORMAT: BRIEF], tylko plików bez rozszerzenia [PROG.], wszystkich plików wraz z danymi z nagłówka [FULL], oraz wybranych rozszerzeń [ZT, GT lub TXT]. Dobrym pomysłem jest możliwość powrotu do programu. Przy porządkowaniu dysku można obejrzeć katalog, wyjść do BASICa, coś skasować lub zmienić nazwę, wrócić i skontrolować efekty.

Uruchomienie: BEEP USR VAL „45000”.
Tu jest ciekawie o tyle, że BEEP powinien mieć więcej parametrów. Podobnie CIRCLE, ale tam nie ma powrotu do BASICa, więc Spectrum nie zdąża zauważyć braku. W ECAT jest powrót do BASICa, a mimo to nie ma błędu. To dlatego, że oba sposoby powrotu „wskakują” w środek interpretera. Wybranie „QUIT” z menu powoduje skok do automatycznego listingu (pewnie po to, żeby można było przeczytać wpisane w REM „Type RUN to return to program”), a wyjście w trakcie katalogowania też nie wyświetla żadnego komunikatu, tylko po prostu pokazuje kursor.


M-Z Conv.

W M-Z Converter, Kato znów wymyślił coś nowego: gra pilotem „ta-ra-ram” :) Potem jest efektowny CLS zamykającą się przesłoną, po czym mamy licznik. Duże, kanciaste, żółto-czerwone cyfry 8x5 znaków, odliczają 5 sekund czasu ładowania. Pilot ma trzy tony, a na borderze mamy grube paski w trzech kolorach, będące efektem zredukowania L do trzech wartości. L to rejestr w którym bity z taśmy zbierane są w bajt i w końcu ładowane do pamięci.

Procedura efektów jest dość rozbudowana, ma 130 bajtów, i mamy tu oba sposoby modyfikacji, zarówno zmianę DELAY, jak i zmianę stałej z #CB na #C8.

Mons-Zeus text converter to program zamieniający tekst asemblera wygenerowany przez disasembler Mons3m2 (a więc pewnie też napisany z użyciem Gens3m2), na tekst w formacie asemblera Zeus. Obsługuje dysk i taśmę. Jest dołączona instrukcja.

Uruchomienie: GO TO NOT USR VAL „23798”.
Tu akurat nie ma żadnych sztuczek. Funkcja USR zwraca jakąś liczbę, NOT robi z niej zero, więc program po załadowaniu startuje od linii 0 (główna pętla jest w BASICu). Czyli jest oszczędność miejsca, bo tak jest krócej niż RANDOMIZE USR VAL „23798”: GO TO NOT PI


We wszystkich loaderach widać efekty ostrej optymalizacji zajętości pamięci, poczynając od spektakularnego wykorzystania zawartości ładowanego właśnie bloku w PET, poprzez używanie wartości bieżących rejestrów w kolejnych procedurach, do ładowania pojedynczych rejestrów np. LD C, 99 zamiast LD BC, 99 przed LDIR. Nawet podpis autora, w loaderach programów które nie używają BASICa, został ograniczony poniżej zwyczajowego minimum.


Mister Kato – czekamy na następne!

Programy Kato w archiwum speccy.pl

Autor: Phonex

Licencja Creative Commons Artykuł autorstwa Phonexa został wydany na licencji Creative Commons Uznanie autorstwa - Użycie niekomercyjne - Bez utworów zależnych 4.0 Międzynarodowe License.
W oparciu o utwór dostępny pod adresem http://speccy.pl/articles.php?article_id=38

sect0r
sect0r dnia 01.08.2014 08:01:11

Normalnie cudeńka!
Chyba przeproszę mój magnetofon w +2 z tej okazji Szeroki uśmiech
Artykuł pierwsza klasa

Busy
Busy dnia 23.09.2014 21:52:10

Nejake dalsie loadery Uśmiech

[url]http://www.youtube.com/watch?v=v5XVLc23lUM[/url] Hercules tape loaderv
[url]http://www.youtube.com/watch?v=uEZWAcr39lg[/url] Song in lines 03 tape loader
[url]http://www.youtube.com/watch?v=F1xr5L1irVM[/url] Song in lines 04 tape loader
[url]http://www.youtube.com/watch?v=KNEXX70ZZ7U[/url] Song in lines 05 tape loader
[url]http://www.youtube.com/watch?v=ffn67l8wNss[/url] MDA demo tape loader

Dodaj komentarz
Zaloguj się, aby móc dodać komentarz.
Oceny
Tylko zarejestrowani użytkownicy mogą oceniać zawartość strony
Zaloguj się , żeby móc zagłosować.

Brak ocen. Może czas dodać swoją?