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
[SAM] The Lyra 3 od kuchni, przyrządza Mat
Autor: Mat of ESI

Pojawienie się forum speccy.pl oraz toczące się tam dyskusje - m.in. na temat programowania Sama Coupe postanowiłem napisać kilka zdań na temat tego, co siedziało wewnątrz naszego wydanego w 1993 roku dema The Lyra 3. Opis będzie oczywiście pobieżny, ale ma głównie pokazać, że bez wymyślnego wsparcia sprzętowego dla grafiki dało się jednak zrobić nieźle wyglądające produkcje.

The Lyra 3 rozpowszechniana była jak pełny, bootujący obraz dyskietki (dostępny w archiwum plików speccy.pl). Na dyskietce nie było normalnego systemu plików ani systemu operacyjnego. Po włożeniu dyskietki o uruchomieniu ładowania systemu wczytywany był loader, który ładował poszczególne części.

Loader czytał dyskietkę wysyłając komendy bezpośrednio do kontrolera FDD. W trakcie ładowania na ekranie wyświetlany był licznik pozostałych do wczytania sektorów. Jak można się było przekonać licznik "chodził" nierówno - było to spowodowane tym, że dane na dyskietce były wstępnie skompresowane prostym algorytmem RLE, który jednak pozwalał zaoszczędzić trochę miejsca.

Pierwszą częścią właściwego dema było intro.

Poza wprowadzeniem do reszty dema intro prosiło o podanie czy nasz Sam podłączony jest do głośników mono czy stereo (dlatego też nie było w nim muzyki). Ustawienie to miało znaczenie w dalszych częściach - w muzyczkach używających obwiedni z inwersją na głośnikach stereo słychać było ładnie brzmiącą "głębię", jeśli jednak w takim trybie podłączyło się tylko jeden głośnik cała obwiednia (z powodu inwersji fazy) się znosiła i w części muzyczek po prostu brakowało jednego kanału.

Samo intro to prosty starfield, scroller i nazwa programu na sprite'ach. Scroler "chodzi" nad animowanymi sprite'ami - jest to zrealizowane w prosty sposób - scroller wyświetlany jest na jednym ekranie, reszta grafiki na innym (a dokładnie - jak w większości części - na dwóch innych) i wewnątrz głównej pętli program czeka na odpowiednią linię ekranu, przełącza ekran, czeka na koniec scrollera i przełącza go z powrotem.

Sprite'y to pierwsze zastosowanie mechanizmu używanego w całym demie - w celu oszczędzania czasu procesora grafika była przed użyciem przetwarzana na fragmenty kodu wyświetlające tę grafikę. Taki kod był potem tablicowany, wstawiany do wynikowego programu i wyświetlanie poszczególnych sprite'ów było wykonywane przez skoki do odpowiednich punktów w tablicy. Dzięki temu rozwiązaniu mogliśmy zaoszczędzić sporo czasu zwłaszcza na maskowanie sprite'ów (którego po prostu nie trzeba było robić) - zwłaszcza w wypadku wyświetlania grafiki z przeźroczystymi fragmentami.

Po wybraniu trybu pracy dźwięku ładowała się kolejna część - skaczący scroller "na kole"

Scroller pozwalał na wyświetlenie 16 znaków na obwodzie koła - wyświetlany tekst to oczywiście tablicowane sprite'y. Pionowy starfield sprawdzał zawartość tła i nie wyświetlał "gwiazdek" jeśli nie było puste - chodziło o to, żeby gwiazdki wyświetlały się pod panelem z prawej strony na którym tytuł programu jest w ten sposób przeźroczysty.

Scroller rysowany był oczywiście z podwójnym buforowaniem, czyszczone w kolejnych klatkach były tylko te fragmenty, które wcześniej zostały narysowane (procedura konwersji sprite'ów potrafiła wygenerować zarówno kod rysujący jak i czyszczący). Początek i koniec scrollera (dolna część okręgu) był po prostu w każdej klatce czyszczący tak, żeby nie było widać pojawiania się i znikania liter.

Druga część to chyba najbardziej zaawansowany kawałek całego dema. Składa się on z trzech osobnych efektów.

Pierwszy to oczywiście skacząca kulka z pikseli. Ten efekt jest w tym wypadku najprostszy - cała animacja została przeliczona przy użyciu programiku w BASICu na Amidze (bo było to szybsze niż liczenie na Samie). Wygenerowane tablice zostały użyte do wyświetlenia kuli a dane dodatkowo były "w locie" modyfikowane o efekt "podskoków". Całość oczywiście z podwójnym buforowaniem i czyszczeniem tylko narysowanych wcześniej pikseli.

Drugi i trzeci efekt to zasadniczo ten sam mechanizm - scroller na górnym borderze i logo na dolnym. Oba efekty są bardzo proste w realizacji wymagają jednak dokładnego przeliczenia czasów wykonania poszczególnych instrukcji. Scroller miał trzy fazy ruchu i taka też jest jego rozdzielczość pozioma - minimalna szerokość "piksela" to 24 fizyczne piksele czyli odpowiednik 3 komórek atrybutów. Mimo tego, że właściwy ekran pracował w rozdzielczości nie ograniczanej atrybutami to sama ramka podlegała identycznym ograniczeniom jak w wypadku Spectrum z wyjątkiem różnicy prędkości - na samie w czasie wyświetlania górnej i dolnej ramki procesor pracuje z pełną prędkością 6MHz i najkrótszy możliwy rozkaz zajmujący cztery cykle procesora (np. NOP) wraz z odpowiednimi OUTami do zmiany koloru ramki wymuszał minimalny rozmiar elementu, który można było na ramce wyświetlić - właśnie 24 piksele. Logo różni się tylko tym, że nie jest animowany - mechanizm jego wyświetlania był identyczny. Scroller miał też swój zdefiniowany font, logo zaś było przygotowane ręcznie.

Trzecia część to dość sprytny efekt "udający" dwa efekty. Najpierw wyświetlany jest duży scroller z "kropek"

A po chwili na ekran wchodzi efekt "główny" - 24 scrollery przesuwające się z różnymi prędkościami.

Cała część pracuje w trybie atrybutów 8x1 ("tryb Timexa") z atrybutami na stałe ustawionymi dla poszczególnych scrollerów. Pierwszy połowa efektu wczytuje się z dyskietki gotowa, druga część jest przeliczana w trakcie wyświetlania pierwszej. Cały efekt i to, że daje się poruszać taką liczbą scrollerów polega na tym, że w pamięci znajdują się wygenerowane bitmapowe dane dla wszystkich wyświetlanych tekstów we wszystkich potrzebnych fazach ruchu. Każdy z tekstów ma 256 znaków długości wraz ze spacjami na początku. Wyświetlanie wykonywane jest serią LDI (160 na każdy scroller). Początkowy scroller to po prostu ten sam mechanizm tylko każda linia przesuwa się z tą samą prędkością - zapas czasu przy jego wyświetlania to moc procesora potrzebna do przeliczenia 12 tekstów na ich bitmapową reprezentację.

Czwarta część to guest part Kassofta.

Bez zaglądania do środka (nie przypominam sobie, żebym miał dostęp do kodu źródłowego tej części) efekt to kolejne użycie konwertera sprite'ów. Scroller to po raz kolejny 16 spriteów, do tego logo w prawym górnym rogu rysowane na wierzchu i nazwa programu na środku - bez podglądania - prawdopodobnie przy czyszczeniu scrollera odtwarzana z bufora.

Kolejna część to kolejny obowiązkowy scroller.

W tym wypadku trochę bardziej "zmyślny" - tekst przewija się po "trójwymiarowym" pierścieniu. Stosunkowo prosty efekt, który wymagał wygenerowania odpowiedniej tablicy pozycji dla poszczególnych pikseli i wyświetlania tekstu zgodnie z tą tablicą - mechanizm podobny do tego z drugiej części. Pod spodem oczywiście starfield, na górze logo ESI - wyświetlane oczywiście jako generowany sprite. Pod scrollerem przesuwający się w poziomie wu-meter - słupki to po raz kolejny sprite'y używające naszego standardowego mechanizmu.

Jeśli z tej części wyjdziemy wciskając po prostu SPACJĘ, przejdziemy do kolejnej części. Jeśli jednak wciśniemy CTRL i SPACJĘ (przy domyślnych ustawieniach emulatora SimCoupe - prawy CTRL) to...

...znajdziemy się w "ukrytej" części bonusowej.

Część ta to jedna z części małego dema, które prawdopodobnie w oryginale się nie zachowało - Out of Colour. Wersja oryginalna była zrobiona w odcieniach szarości (nie miałem wtedy kolorowego telewizora a chciałem uniknąć niespodzianek z dziwnymi kolorami) i zasadniczo była demonstracją zastosowania muzyczek z ETrackera w praktycznym programie. Bonusowa wersja różni się od oryginału tym, że sprite'y są kolorowe i zestawy kolorów można zmieniać. Sprite'y poruszają się oczywiście wg odpowiednich tablic sinusoid i ruch ten można kontrolować z klawiatury.

Kolejna część ładuje się najdłużej - to slideshow.

W tej części zapakowane zostało 16 grafik Borisa Vallejo skonwertowanych z ich amigowych wersji. Grafiki są dodatkowo kompresowane stąd przełączanie ich nie jest natychmiastowe. Scroller generowany jest w trybie atrybutów 8x1 i wyświetlany na osobnym ekranie który jest włączany/wyłączany przerwaniem linii zależnie od pozycji. Dodatkowo przestawiane są palety tworzące kolorowy pasek pod scrollerem. Po wciśnięciu ENTER (albo po pewnym czasie) dekompresowany jest kolejny obrazek po czym przy kolejnym górnym/dolnym szczycie scrollera zmieniany jest ekran z którego wyświetlany jest obrazek. Po wciśnięciu spacji scroller również dochodzi najpierw do szczytu a potem przechodzi do drugiej pozycji szczytowej przełączając ekran na pusty, czarny po czym sam scroller jest wyciemniany i ładowany jest ostatni kawałek.

Outro - czyli The End.

Prosta animacja, która wykorzystuje jeden z końcowych mechanizmów wymyślonych przez Kaza - konwerter animacji. Program konwertujący ładował kolejne klatki animacji i generował z nich kod wyświetlający kolejne klatki animacji zapisując wyłącznie te elementy, które się zmieniły. Pozwalało to na wyświetlenie animacji, która wydawała się być znacznie bardziej skomplikowana niż w rzeczywistości była. Kod niestety nie był doskonały o czym można się przekonać obserwując końcową animację - czasami pojawiają się obok gwiazdek pojedyncze piksele, których nie powinno tam być.

Całości dema dopełnia jeszcze jeden drobiazg - reset screen.

Wszystkie części mają ustawiony na zerowej stronie pamięci taki sam monochromatyczny obrazek zgodny z organizacją pamięci Spectrum. Jedna z cech ASICa w Samie to to, że po wciśnięciu i przytrzymaniu przycisku reset procesor był wstrzymywany (naturalna cecha Z80 - reset wyzwalany jest opadającym zboczem sygnału) zaś ASIC w tym momencie resetował tryb graficzny przełączając się w tryb zgodności ze Spectrumem i zerując stronicowanie pamięci. Efektem w większości wypadków było wyświetlenie kolorowej kaszy przed zresetowaniem komputera. Jeśli jednak na zerowej stronie pamięci umieściło się odpowiedni obrazek to przy resecie wyświetlał się właśnie on - z jednym małym problemem - obrazek musiał być monochromatyczny, bo ASIC nie zeruje tablic kolorów i nie mamy wpływu na to jakie akurat kolory nałożone zostaną na obrazek.

Jak widać z powyższego opisu poza kilkoma pomysłami i opracowaniem paru narzędzi ułatwiających pracę The Lyra 3 nie zawierała żadnych "cudów" technicznych a właściwie wyłącznie proste efekty, które dało się wykonać przy ograniczonych możliwościach samego sprzętu.

Odnośniki:

  1. produkcje grupy ESI w archiwach speccy.pl
  2. programy MATa w archiwach speccy.pl
  3. programy KAZa w archiwach speccy.pl
  4. programy Kassofta w archiwach speccy.pl
  5. demo The Lyra 2 w archiwach speccy.pl
  6. demo The Lyra 3 w archiwach speccy.pl
  7. program ETracker w archiwach speccy.pl
  8. algorytm kompresji RLE
  9. informacje o układzie ASIC
  10. Sam Coupe po polsku angielsku
  11. układ ASIC po angielsku
  12. emulator Sama Coupe - SimCoupe angielsku
  13. informacje o Borisie Vallejo
Brak komentarzy. Może czas dodać swój?
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ą?