forum speccy.pl

ZX Spectrum => GRAFIKA => Wątek zaczęty przez: YERZMYEY/HOOY-PROGRAM w 2011.11.14, 22:52:56

Tytuł: Tryb gigascreen
Wiadomość wysłana przez: YERZMYEY/HOOY-PROGRAM w 2011.11.14, 22:52:56
Aha, i Tygrys - jeśli obliczysz mi, jaką max. rozdzielczość można wyrobić na Spectrum 48 lub 128 (tu będzie większa) w interlace'owanym GigaScreenie (niby dwa obrazki, ale wiesz - zmieniane co linię - i to nie jak ostatnio Rosjanie - co dwie linie [mniej zjada procka] tylko co jedną, bo co dwie to nie da się oglądać tego nawet), to pewnie Joulo też by coś dosłał.
Dla porównania - Pentago wyrabia full-screen w tym trybie. Na 100% 128 tego nie zrobi, a gumiak bdzie miał jeszcze gorzej (ale i tak sporo dem na gumiaka ma gigascreen).
Tytuł: Odp: Tryb gigascreen
Wiadomość wysłana przez: YERZMYEY/HOOY-PROGRAM w 2011.11.17, 12:53:09
Coś by pewnie dosłał, bo w ramach odgrzybiania własnej osoby zamierza powalczyć trochę z pikselami ;)
No właśnie.
Z tym, że z pixelami to standardowe 256/192 wystarczy.
Natomiast gdyby się chciało więcej kolorów (ze 112 tam jest w tym trybie), to by trzeba było walić gigascreen. W rozdzielczości 256/192 on pójdzie, ale chyba tylko na Pentagonie, żeby był odpowiedni tryb wyświetlania. A Spectrum 128 już pełnego ekranu nie uciągnie.
Kiedyś pomęczę o to Tygrysa. :)
Tytuł: Odp: Tryb gigascreen
Wiadomość wysłana przez: YERZMYEY/HOOY-PROGRAM w 2011.11.17, 13:44:18
Chodzi mi o to: http://pc.sux.org/tomcat/Animals.zip

(http://altaria.vm.bytemark.co.uk/img/save_the_animals_512x384.png)

Plik LINEAR to zwykłe wyświetlanie gigascreen. Mruga bardzo.

Ale można multicolorem zrobić tak, żeby znacznie mniej mrugało. (Plik INTER).
W tym ostatnim na Spectrum 128K idzie za wolno i gubi synchro (skośne linie - tego na Pentagonie nie ma). Ale mruga bardzo mało.

Stąd moje pytanie - ile wydoli 128K - obrazek jakiej rozdzielczości - żeby nie gubił synchro.
Warto zobaczyć efekt na realnej maszynie (telewizor CRT) - robi wrażenie, nawet pomimo zbyt wolnych brytyjskich maszyn.
Tytuł: Odp: Tryb gigascreen
Wiadomość wysłana przez: YERZMYEY/HOOY-PROGRAM w 2011.11.17, 13:56:23
Chyba jednak 128K da radę full-screen puścić - 256/192.
Oto obrazek mojego kolegi Blackera:
http://www.zxdemo.org/f/200303/fvr4/ruthersford.zip
(http://www.zxdemo.org/screens/full/0/215.png)

Zaraz po wgraniu zmienia co dwie linie. Zajmuje mniej czasu procka, ale wygląda brzydko.
Naciśnijcie "5" - i włącza się właściwy tryb - zmiana co linię. Obraz jest niemalże statyczny nawet na emulatorach (już nie mówiąc o realnym sprzęcie, gdzie wygląda doskonale).
"4" - powrót do trybu wyświeltania co dwie linie (fuj).

Co prawda we właściwym pełnym trybie nie zostaje już czasu procka nawet na muzykę ponoć, ale można dawać takie obrazki na końcu produkcji lub na początku (ma czas na testowanie klawiatury).
Tytuł: Odp: Tryb gigascreen
Wiadomość wysłana przez: Tygrys w 2011.11.17, 14:50:03
dobra, rzucę okiem.
Tytuł: Odp: Tryb gigascreen
Wiadomość wysłana przez: matofesi w 2011.11.17, 15:08:44
No ja rzuciłem. I albo czegoś nie rozumiem albo umyka mi subtelność koncepcji. Tak na szybko kod zajmuje się głównie odczekiwaniem aż raster wejdzie w ekran a potem przez kolejne 192 linie przełączaniem na przemian ekranów. Jak się zrobi zrzut ekranu z emulatora i obejrzy dokładnie to widać, że w pojedynczym cellu są max 4 kolory i max 2 w linii. Czyli mamy dwa ładnie dopasowane obrazki i kod, który co linię wyświetla na przemian raz jeden raz drugi. Jeśli nie ma tu nic bardziej sprytnego, co na szybko mógłbym przegapić to nie rozumiem dlaczego 128 miałoby tego efektu nie pociągnąć? A brak czasu na dźwięk jest łatwy do wyjaśnienia - najpierw musimy się wstrzelić dokładnie w początek ekranu - z braku przerwań trzeba po prostu odczekać czas od początku ramki a potem przez większość ekranu chodzą głównie dokładne pętle opóźniające. Na procedurę do dźwięku zostaje ten kawałek na dolnym borderze i (nie zastrzelcie jeśli się mylę - nie pamiętam w którym momencie wyzwalane jest przerwanie) powrót plamki.

No chyba, że zupełnie nie zrozumiałem koncepcji ;)
Tytuł: Odp: Tryb gigascreen
Wiadomość wysłana przez: YERZMYEY/HOOY-PROGRAM w 2011.11.17, 15:26:50
MAT:

> No ja rzuciłem. I albo czegoś nie rozumiem albo umyka mi subtelność koncepcji. Tak na szybko kod zajmuje się głównie odczekiwaniem aż raster wejdzie w ekran a potem przez kolejne 192 linie przełączaniem na przemian ekranów. Jak się zrobi zrzut ekranu z emulatora i obejrzy dokładnie to widać, że w pojedynczym cellu są max 4 kolory i max 2 w linii. Czyli mamy dwa ładnie dopasowane obrazki i kod, który co linię wyświetla na przemian raz jeden raz drugi. Jeśli nie ma tu nic bardziej sprytnego, co na szybko mógłbym przegapić to nie rozumiem dlaczego 128 miałoby tego efektu nie pociągnąć?
---------------
Nie nie, no więc właśnie napisałem później, że jednak pociągnie, skoro Zilog (ten czeski scener) wypuścił engine w 2003 roku, czy coś koło tego, po prostu nigdy nie wzróciłem uwagi, że to właśnie jest takie wyświeltanie, jak piszesz - co linię.
Bardziej sprytne rzeczy to są w samym konwerterze na PC, a w procedurze wyświetlania to już mniej (chociaż i tak był to świetny pomysł).
Teraz się jeszcze zastanawialiśmy z Tygrysem, do jakieś rozdzielczości trzebaby zmniejszych obrazek, żeby to działało też na 48K (nad wymianą zawartości ekranu tu oczywiście trzebaby pomyśleć inaczej, niż na 128K, ale były dema w tym stylu robione, więc pamiętam, że się da).
Ot taka ciekawostka. Chociaż gdyby było, to zapewne prędzej czy później tego użyjemy.


> A brak czasu na dźwięk jest łatwy do wyjaśnienia - najpierw musimy się wstrzelić dokładnie w początek ekranu - z braku przerwań trzeba po prostu odczekać czas od początku ramki a potem przez większość ekranu chodzą głównie dokładne pętle opóźniające. Na procedurę do dźwięku zostaje ten kawałek na dolnym borderze i (nie zastrzelcie jeśli się mylę - nie pamiętam w którym momencie wyzwalane jest przerwanie) powrót plamki.
------------
Uuuuu, no to już dla mnie oczywiście czarna magia. :) :) :) :) Ale dobrze wiedzieć, jak będę kogoś o to męczył i otrzymam odpowiedź, że "się nie da", to powiem, że napewno się da, bo MAT tak powiedział. :) :) :) :) :) :) :) :) :) :) :) :) :)

No nic, chodzi o to, że zapewne Joulo nie będzie chciał pixelować na Spectrum, tylko na PC (rozumiem go), a skoro na PC, to mógłbym mu udostępnić większą paletę, skoro w tym trybie Spectrum wyświetli ok. 112 kolorów. Przynajmniej się chłopaczyna rozrusza, przypominając sobie dawne czasy, haha.

Pzdr.
Tytuł: Odp: Tryb gigascreen
Wiadomość wysłana przez: matofesi w 2011.11.17, 15:34:59
Swoją drogą jeśli faktycznie cały efekt polega na interlace'owym przełączaniu ekranów i jedynym problemem jest wstrzelenie się w odpowiedni punkt w czasie to przy założeniu, że robimy ten efekt dla konkretnego urządzenia (albo jesteśmy w stanie zrobić detekcję i wygenerować kod opóźniający dla dowolnej maszyny) to moim zdaniem powinno się tam dać puścić jakiegoś chiptune'a - trzeba by tylko zrobić custom playera tak, żeby go podzielić na dwie części - pierwsza musiałaby się liczyć zawsze w tym samym czasie i byłaby częścią pierwszej pętli opóźniającej, druga - grająca musiałaby się zmieścić na końcu ekranu.

Można też zaryzykować coś innego - w prawdziwymy 128 (nie wiem jak w innych wersjach/klonach) można się było "wtaktować" w konkretną linię czytając coś z któregoś portu - nie pamiętam dokładnie jak to szło, ale robiłem kiedyś w ramach testów prostego scrollera skaczącego po sinusoidzie (FLIP?) z normalnym obrazkiem w tle. Całość działała tak, że najpierw robił się scroller w konkretnym punkcie ekranu bez żadnego czyszczenia poprzedniej wersji itp. Potem wyświetlany był ekran z tłem i pętla czekała na konkretną linię, włączała ekran ze scrollerem i czekała jeszcze parę linii a potem z powrotem włączała tło. Efekt był prosty, ale pokazywał, że da się wstrzelić w konkretny punkt ekranu. Można by więc zrobić część playera na górnym borderze tak, żeby na pewno nie wlazło na ekran a potem się wstrzelić w początek ekranu ścinając na przykład pierwsza linię grafiki i dalej już normalny interlace z borderem jako buforem na te parę taktów niedokładności na procedurę czekającą na początek ekranu. I na koniec druga część playera. I w zasadzie przy poprawnym rozwiązaniu kwestii całość mogłaby chodzić z wyłączonymi przerwaniami ;)

Uff... Sorry za teoretyczne dywagacje i off-topic ;)
Tytuł: Odp: Tryb gigascreen
Wiadomość wysłana przez: matofesi w 2011.11.17, 15:44:02
Na 48 to za wiele nie pociągniesz. Czytałem ostatnio analizę Simona Owena (http://simonowen.com/blog/2011/09/29/zxodus-engine/) ile się da zmienić atrybutów na 48 - w kontekście ZXodus Engine'a. Wynika z niej, że to, co ZXodus robi czyli 144 piksele szerokości (18 kolumn) z pełną kontrolą atrybutów z dokładnością do linii to jest max tego, co można zrobić. A to oznacza, że być może max tego, co dałoby się z 48 wycisnąć to połowa tego - do zrobienia pełnego interlace'u trzeba podmienić zarówno atrybuty jak i samą bitmapę. Tyle, że tych 9 kolumn też się nie da zrobić bo 18 atrybutów to jest już totalny wyścig z rastrem i na pewno obraz by się ciął. Pewnie jakby pogłówkować to jakiś kawałek dałoby się wymodzić, ale tak na prawdę zrobienie takiego efektu to znacznie więcej niż prosty multicolor.

Ja bym się w każdym razie nie podjął dłubaniny - podejrzewam, że efekt byłby niewart włożonej roboty.
Tytuł: Odp: Tryb gigascreen
Wiadomość wysłana przez: Tygrys w 2011.11.17, 18:09:22
Dzięki MAT za analizę. Tam, ponad to co napisałeś więcej nie ma.

Dla 48ki można zrobić procedurę generującą gotowy kod dla konkretnego obrazka. Taki kod by zajmował kilka kilo, a przy odrobinie wysiłku mógłby obsługiwać dowolny model ZXa (opóżnienia itp).

Co do muzyki to powinna się jeszcze odegrać po skończeniu podmiany atrybutów. Jeżeli chce się to zrobić przed narysowaniem pierwszego koloru, to ma sie do dyspozycji okolo 14000T. Mi to wystarczyło do przerzucenia 768bajtów atrybutów i odebraniu muzyki.


A jeżeli to byłoby problematyczne to nie widzę problemu przeliczenia muzyki już poza rastrem, a wysłanie danych do rejestrów AY już w przerwaniu.

Tytuł: Odp: Tryb gigascreen
Wiadomość wysłana przez: Pyza^Illusion w 2011.11.17, 18:14:28
Co do multikolorowego obrazka to 48 wyciąga około pół ekranu (w pionie). Jest na nawet edytor stworzony przez NOP o nazwie Color DRAW (w załączniku), który zapisuje obrazek z gotowym "playerem" do wykorzystania we własnych produkcjach. Jego właściwości to ciągle 2 kolory w atrybucie ale w obszarze 1x8 pikseli. Linia pod spodem może mieć już zupełnie inne kolory, natomiast piksele muszą być tak jak były (zawsze są stałe).

Idea GigaScreenu, to dwa multikolorowe ekrany w interlace. Rozmiar atrybutu to 2x8 czyli co drugą linię. Co linię nasz Z80 nie byłby w stanie wrzucić tego na ekran żadnym stosem czy innymi sztuczkami.

Na taki obrazek składa się zatem 2x6144 bajtów (pikseloza) oraz 2x(32x96) (atrybuty w multikolorze), czyli 18432 bajtów samych danych. Do tego procedura i tablice nawalania tego na ekran.

A co do muzyki, to mam gdzieś player do ST (albo też do SQT) o stałej ilości taktów i mieszczący się jeszcze przed końcem górnej części bordera :p Autorstwa panów z Exodus :) Musiałbym tylko poszperać...
Tytuł: Odp: Tryb gigascreen
Wiadomość wysłana przez: matofesi w 2011.11.17, 18:55:15
Ok. Rozumiem koncepcję obrazka multikolorowego z atrybutem 8x1 - to jest dokładnie to, co robi ZXodus Engine. Tam kod podmienia atrybuty co linię dla 18 kolumn.

Rozumiem już koncepcję GigaScreenu. I na moje oko to, co Yerzmyey pokazywał na 128-kę to nie jest giga screen, chyba, że coś przeoczyłem. Na moje oko to są po prostu dwa obrazki ze standardowymi atrybutami interlace'owane z dwóch screenów. Stąd jak się przyjrzeć w powiększeniu wygląda to (na pojedynczym statycznym zrzucie) tak, jakby obrazek miał po prostu 4 kolory w komórce 8x8 ale dzięki sprytnemu doborowi kolorów całość może faktycznie wyglądać nieźle. I taki obraz daje się na 128 zrobić w prosty sposób na całym ekranie.

Zrobienie pełnego gigascreena wymagałoby oczywiście dodanie do interlace'owania bitmap multicolorowego kodu podmieniającego atrybuty co drugą linię. I tu nie jestem pewien, czy da się to zrobić na standardowym 128 na pełnym ekranie.
Tytuł: Odp: Tryb gigascreen
Wiadomość wysłana przez: Pyza^Illusion w 2011.11.17, 20:19:51
Z tym GigaScreenem to chyba jednak tylko dwa ekrany:

Cytuj
Another software hacked mode is called GigaScreen (see example picture). This is a recently introduced screenmode based on the fast changing of 2 (specially prepared) images. When watching these graphics on a Speccy there is a bit of lacing involved, but it is not as nasty as with 3colour. The main advantage of this mode is that the palette is enlarged to 36 real colours! There is an editor for this mode, but unfortunately this editor is only available on PC and not on a real Speccy. Graphicians are only beginning to master this mode.

Patrząc jednak na żółwia to oprócz GigaScreena jest jeszcze tryb interlace dla atrybutów i nawet jak nie co 2 linie to przynajmniej co 4. Wydaje mi się jednak, że co 2 linie też jakoś by się wyrobiło. Pytanie czy warto się z tym babrać i czy ktoś zrobi taki obrazek :D O Edytorze nawet nie mówię :p
Tytuł: Odp: Tryb gigascreen
Wiadomość wysłana przez: matofesi w 2011.11.17, 20:26:13
No właśnie ten żółw w wersji "linear" mnie zastanawia ;)

A poza tym - samo zakodowanie gigascreena dla 128 nie jest problemem - największym problemem jest własnie przygotowanie grafiki tak, żeby dobrze wyglądała. A to już robota dla artysty albo sprytnego konwertera ;)

Największym wyzwaniem byłoby chyba zrobienie edytora działającego na fizycznej maszynie. Ale ja się nie podejmuję ;)
Tytuł: Odp: Tryb gigascreen
Wiadomość wysłana przez: YERZMYEY/HOOY-PROGRAM w 2011.11.17, 20:48:38
Pyza:


> Z tym GigaScreenem to chyba jednak tylko dwa ekrany:
------------------
Tak.



> Patrząc jednak na żółwia to oprócz GigaScreena jest jeszcze tryb interlace dla atrybutów
--------------------------
I tak.



> Pytanie czy warto się z tym babrać i czy ktoś zrobi taki obrazek :D
------------------
Takich obrazków powstaje rocznie kilka.
Ale nie podobają mi się użyte tam playery.
Chodzi mi o player użyty w obrazku Blackera - i to wersji po naciśnięciu klawisza "5".



> O Edytorze nawet nie mówię :p
------------------
Takich edytorów jest już bardzo wiele i więcej nie trzeba.
Problem w tym, że nie ma porządnego źródła do użycia tego w demie/grze.
Zilog swoje wypuścił jako coś tam na Linuxa - ja się nie znam.
Zapytam Hellboja.
Tytuł: Odp: Tryb gigascreen
Wiadomość wysłana przez: YERZMYEY/HOOY-PROGRAM w 2011.11.17, 20:52:42
MAT:

> A poza tym - samo zakodowanie gigascreena dla 128 nie jest problemem - największym problemem jest własnie przygotowanie grafiki tak, żeby dobrze wyglądała. A to już robota dla artysty
-------------------
Rysują, rysują.
(http://puls.nm.ru/riska.png)


> albo sprytnego konwertera ;)
-----------------
Jest wiele takich konwerterów, autor jednego z nich jest pośród nas - to LCD.
Ale męczę go od 2 lat, żeby dodał viewer/player przy zapisie obrazka w formacie ZX - a on nie chce. :)



> Największym wyzwaniem byłoby chyba zrobienie edytora działającego na fizycznej maszynie. Ale ja się nie podejmuję ;)
------------------
Jest kilka (chociażby ten obrazek z wybuchem jest na tym rysowany), ale ja raczej tu myślę o konwerterze, bo taki dajmy na to Joulo narysuje sobie na PC obrazek w odpowiedniej rozdzielczości i ilości kolorów, a potem 1:1 przeniesie tylko na Spectrum.


Pozdrrrrrrrrrrrr.
Tytuł: Odp: Tryb gigascreen
Wiadomość wysłana przez: matofesi w 2011.11.17, 21:12:05
Ja nie wątpię, że rysują. I nie wątpię, że są konwertery. Mówię tylko, że zrobienie tego dobrze nie jest proste.

Ale pewnie by się dało. Oczywiście nie podejmę się robienia tego na 48, ale jakby miało przyjść co do czego, to na 128 mógłbym pomyśleć (jak zreanimuję już fizycznego Speca i skombinuję jakiś ekran do tego, bo przecież nie będę robił developerki na 46 calowym elcedzie 3D w salonie ;)).
Tytuł: Odp: Tryb gigascreen
Wiadomość wysłana przez: YERZMYEY/HOOY-PROGRAM w 2011.11.17, 22:14:27
Zapewne, zapewne.
Ja tylko niosę pomoc. ;)

Żeby być bardziej obrazowym.
Od mojej strony, jako użytkownika, nie ma jakiegoś rozsądnego narzędzia do użycia takich obrazków we własnym programie (nawet, jeśli mają zatrzymać muzykę - to nic - mogę tego użyć na koniec programu na przykład).

Mam, powiedzmy, taki konwertor:

(http://yerzmyey.republika.pl/janina.png)
(wersja ZX Spectrum oczywiście po prawej; tu akurat w 87 kolorach na Specu)

z którego mogę zasave'ować ten obrazek w jakichś tam dwóch formatach:
http://yerzmyey.republika.pl/janina.zip

Co moge z nimi zrobić na ten moment? Oglądnąć je pod viewerem (w cholerę ich jest).
Ale nie zadowala mnie to, bo sam tego nie użyję w programie.

Byłoby fajnie mieć... "kompiler" do tego. ;)
Czyli programik, który da wynikowo w jednym TAPie plik graficzny oraz silnik, który odtworzy to sam z siebie, wraz z - powiedzmy - oczekiwaniem na spację - potem wychodzi i wraca do poprzedniej czynności programu.
Tak, jak muzyka na beepera.

Mówię jedynie przykładowo (bo oczywiście możnaby dopisywać tam na przykład czas wyświetlania na ekranie).

A jeśli MCX (dwa multicolorowe obrazy wyświetlane naprzemiennie) byłby zbyt trudny, to - jak zwrócił uwagę MAT - przynajmniej zwykły GigaScreen, czyli dwa zwykłe obrazki z atrybutami 8*8, oczywiście odtwarzane sprytnie co linię, czy jak to tam było, tak jak w obrazku Blackera.
Tytuł: Odp: Tryb gigascreen
Wiadomość wysłana przez: matofesi w 2011.11.17, 22:25:33
No dobra... w tym, co załączyłeś jest 24 kilo danych - to są dwa pełne multicolorowe obrazki. Nie ma szans, żeby pociągnął ci to żaden standardowy Spectrum. O ile prawdopodobnie jestem w stanie zrobić wersję 128 pełnoekranowego wyświetlacza odpalającego naprzemiennie z interlacem dwa normalne obrazki o tyle multicoloru nie podejmuję się zrobić. A już na pewno nie na full screenie i nie z dokładnością do jednej linii - nawet Kaz w Shocku cheatował i atrybuty zmieniał co dwie linie ;)
Tytuł: Odp: Tryb gigascreen
Wiadomość wysłana przez: YERZMYEY/HOOY-PROGRAM w 2011.11.18, 00:19:27
Jak najbardziej. Służę http://yerzmyey.republika.pl/janina2.zip
2 zwykłe.
Tytuł: Odp: Tryb gigascreen
Wiadomość wysłana przez: matofesi w 2011.11.18, 07:54:46
No to teraz już nie mam wyjścia i muszę się zebrać i spróbować coś z tym zrobić ;)

Idzie weekend - może znajdę trochę czasu.
Tytuł: Odp: Tryb gigascreen
Wiadomość wysłana przez: YERZMYEY/HOOY-PROGRAM w 2011.11.18, 11:56:59
Rozmawiałem z Hellbojem; znalazł on źródła do zilogowego konwertera:
http://85.132.166.194:21002/~zilog/Miscellaneous/DithvIDE/
wykorzystanego w grafice Blackera (przypominam, żeby po wgraniu nacisnąć "5" :) ).
Hell mówi, że niestety nie ma źródeł do viewera, na czym mi zależało.
Pozdrrrrr.
Tytuł: Odp: Tryb gigascreen
Wiadomość wysłana przez: matofesi w 2011.11.18, 12:44:55
Pożyjemy - zobaczymy. Na razie nie mam działającego Speca więc to co ewentualnie zrobię będzie wyłącznie emulatorowe, ale spróbuję coś wykombinować. Na razie zainstalowałem sobie pasmo i napisałem najprostszego scrollera na 8 pikseli, żeby się upewnić, że się nie zabiję ;)
Tytuł: Odp: Tryb gigascreen
Wiadomość wysłana przez: YERZMYEY/HOOY-PROGRAM w 2011.11.18, 13:13:15
:) :) :) :) :) :) :) :) :) :) :) :)
Tytuł: Odp: Tryb gigascreen
Wiadomość wysłana przez: YERZMYEY/HOOY-PROGRAM w 2011.11.23, 15:14:19
No i wstęnie działa. :)
http://yerzmyey.republika.pl/gigascreen_128_plus_.jpg
(u góry GRB, u dołu - antena).

Foto z telewizora http://yerzmyey.republika.pl/gigascreen_128_plus_TV.jpg
Oczywiście naprawdę wygląda bardzo dobrze. :)
Tytuł: Odp: Tryb gigascreen
Wiadomość wysłana przez: matofesi w 2011.11.23, 15:41:16
Chyba faktycznie musiałbym zobaczyć na prawdziwym sprzęcie podłączonym do jakiegoś normalnego telewizora - jak dla mnie zarówno na emulatorze jak i na zdjęciach wygląda brzydko ;)

I żeby nie było - nie mam tu na myśli grafiki, która jest niczego sobie tylko sam efekt ;)
Tytuł: Odp: Tryb gigascreen
Wiadomość wysłana przez: YERZMYEY/HOOY-PROGRAM w 2011.11.23, 15:47:27
Aaa, jakiś Boris, czy coś. (Chociaż, jak na spectrumowca przystało - powinienem był posłużyć się przykładem z Frazettą, hahahah).

Na sprzęcie (ale TV i antena) wygląda tak
(http://yerzmyey.republika.pl/jasio.png)
tylko jest jakieś tam nie tyle może mruganie, tylko trochę 'chodzi' ten ekran, rozumiesz - widać, że to nie jest statyczny screen.
Równo 60 kolorów. Z tym, że w prównaniu do poprzednich przykładów, na tym wyraźnie widoczne są już atrybuty, jak widzisz.

Pozdrrrrrr.
Tytuł: Odp: Tryb gigascreen
Wiadomość wysłana przez: Abrimaal w 2012.01.20, 22:30:28
Na 128 (i na 48 z pewnością też) da się wyciągnąć full colour, tak jak to zrobili np. w Paralacktika. Muzyka gra przez cały czas, jednak domyślam się, że instrukcja OUT dla przełączania ekranów jest puszczona na przerwaniach jako pierwsza. Widać, że przełączany jest cały ekran, bo składowe obrazki różnią się detalami.

Na 48 można by spróbować osiągnąć full screen full colour przerzucając jedynie 768B atrybutów instrukcją LDIR, a bitmapa cały czas byłaby ta sama. Byłoby mniej detali i tylko 2 kolory na kratkę 8x8, ale byłoby ich więcej. Zadziałałoby to? 

(http://abrimaal.pro-e.pl/network/par1.png)(http://abrimaal.pro-e.pl/network/par2.png)
(http://abrimaal.pro-e.pl/network/par3.png)
Tytuł: Odp: Tryb gigascreen
Wiadomość wysłana przez: Tygrys w 2012.01.20, 22:39:25

Na 48 można by spróbować osiągnąć full screen full colour przerzucając jedynie 768B atrybutów instrukcją LDIR, a bitmapa cały czas byłaby ta sama. Byłoby mniej detali i tylko 2 kolory na kratkę 8x8, ale byłoby ich więcej. Zadziałałoby to? 

Tak da się zrobić, lecz efekt nie byłby zadawalający.

Jeżeli mi podeślesz te obrazki w postaci .scr to mogę spróbować coś takiego zrobić dla 48.
Tytuł: Odp: Tryb gigascreen
Wiadomość wysłana przez: Abrimaal w 2012.01.21, 00:13:36
Przesyłam 2 screeny + demo.

P.S. Jeśli możesz dodaj .scr do dozwolonych załączników (namnożyło się tych formatów, jest jeszcze .sad - obraz dysku dla Sam'a).
Tytuł: Odp: Tryb gigascreen
Wiadomość wysłana przez: RafalM w 2012.01.21, 16:30:27
W kwestii nazewniczej:

- giga screen: naprzemienne wyświetlamy dwa lub trzy ekrany. Możemy dostać nowe kolory (np czerwony+żółty=pomarańczowy) albo uzyskać niezależny kolor każdego piksela. Wada - miga jak cholera, po chwili oczy bolą.

- multicolor: Spectrum nie odświeża całego ekranu natychmiast lecz rysuje go linia po linii, jeśli w trakcie rysowania zmienimy atrybut, to zamiast 2 kolorów w kwadracie 8x8 pikseli możemy maksymalnie dostać dwa kolory w linijce 8x1 pikseli, czyli można powiedzieć że mamy większą "rozdzielczość" kolorów.  Nowych kolorów nie ma. Nie miga.

Czasem ludzie mówią i piszą byle jak używając tych określeń zamiennie, z czym moim zdaniem należy walczyć :)

No i są rozwiązania hybrydowe, wspomniane wcześniej w wątku, połączenie jednego z drugim. Podobno w realu mniej miga.

Tytuł: Odp: Tryb gigascreen
Wiadomość wysłana przez: RafalM w 2012.01.21, 16:34:49
Polecam też artykuł na Wikipedii:

http://en.wikipedia.org/wiki/ZX_Spectrum_graphic_modes
Tytuł: Odp: Tryb gigascreen
Wiadomość wysłana przez: trawen w 2012.01.28, 12:25:46
Gigascreen być różne. Oczywiście, jeśli nudne migotać wszystkie 100 kolorów będzie znacznie flash. Ale czy to dobrze wybrać kolory lampy błyskowej jest dopuszczalne. Szczególnie na starszych telewizory i monitory. Gigascreen mogą być stosowane w celu zwiększenia poziomu jasności.

Typowy przykład: Zoom Colobok 2, Pussy, Super Mario Brod.

Nie sprite składa się z dwóch faz, szary kolor uzyskuje się poprzez wzór szachownicy, który składa się z dwóch obrazków, dając kolor szary. To wygląda bardzo ładnie.
Próbowałem nawet zwrócić Dizzy tak.

http://vtrdos.ru/temp/dizzy_2_bit.sna (http://vtrdos.ru/temp/dizzy_2_bit.sna)
Tytuł: Odp: Tryb gigascreen
Wiadomość wysłana przez: Abrimaal w 2012.01.28, 16:30:57
Gigascreen być różne. Oczywiście, jeśli nudne migotać wszystkie 100 kolorów będzie znacznie flash. Ale czy to dobrze wybrać kolory lampy błyskowej jest dopuszczalne. Szczególnie na starszych telewizory i monitory. Gigascreen mogą być stosowane w celu zwiększenia poziomu jasności.

Typowy przykład: Zoom Colobok 2, Pussy, Super Mario Brod.

Nie sprite składa się z dwóch faz, szary kolor uzyskuje się poprzez wzór szachownicy, który składa się z dwóch obrazków, dając kolor szary. To wygląda bardzo ładnie.
Próbowałem nawet zwrócić Dizzy tak.

What a translator did you use? I understood almost nothing. You may write in English, the most of the forum members understand it.

BTW: if you mean FLASH as an attribute byte, please use capital letters, this allows to distinguish the Spectrum commands from other English words.
Tytuł: Odp: Tryb gigascreen
Wiadomość wysłana przez: Tygrys w 2012.02.03, 16:39:54
Przesyłam 2 screeny + demo.

Nie wygląda to za dobrze, efekt przerzucania samych atrybutów w załączniku.

Cytuj
P.S. Jeśli możesz dodaj .scr do dozwolonych załączników (namnożyło się tych formatów, jest jeszcze .sad - obraz dysku dla Sam'a).


Dodałem już jakiś czas temu.
Tytuł: Odp: Tryb gigascreen
Wiadomość wysłana przez: Abrimaal w 2012.02.06, 06:02:55

Przesyłam 2 screeny + demo.

Czyli tylko 4 linie przerzucił. A obrazek cały czas był ten sam w pamięci ekranu?
Kolorów mamy więcej, ale ktoś musiałby stworzyć lub przerobić screen działający w trybie 48k,
qtedy podejdrzewam byłoby ok, bez przerzucania dodatkowych 6k samego obrazu.



Tytuł: Odp: Tryb gigascreen
Wiadomość wysłana przez: Tygrys w 2012.02.06, 09:35:58
Czyli tylko 4 linie przerzucił. A obrazek cały czas był ten sam w pamięci ekranu?
Tak, jest jeden obrazek. Jedynie atrybuty są podmieniane.

Cytuj
Kolorów mamy więcej, ale ktoś musiałby stworzyć lub przerobić screen działający w trybie 48k,
qtedy podejdrzewam byłoby ok, bez przerzucania dodatkowych 6k samego obrazu.

Jeżeli masz wystarczająco dużo czasu, zapału itp, to może spróbuj taką grafikę wykonać? ;-)
Tytuł: Odp: Tryb gigascreen
Wiadomość wysłana przez: Abrimaal w 2012.02.08, 01:02:54
Ja miałem na myśli coś prostszego programowo,
Na zmianę przerzucać na przerwaniach same atrybuty - standardowe i przerobione (bez dzielenia ich na linie).
Kolorów by było więcej, ale pewnie by cholernie migało.
Tytuł: Odp: Tryb gigascreen
Wiadomość wysłana przez: Pyza^Illusion w 2012.02.08, 13:59:00
Zmiana samych atrybutów nic nie wnosi, albo bardzo niewiele.
Cały efekt to właśnie szachownice w pikselach i raczej to by trzeba było naprzemiennie pokazywać nawet przy tych samych atrybutach.
Ewentualnie byłaby możliwość zrobienia tego na 48kB przy odpowiednim rysunku i przy odpowiednio przystosowanej procedurze do tego rysunku, a polegało by to na tym, że wyświetla tylko wybrane obszary, a statycznych nie zmienia. Jest to mało uniwersalne niestety.
Najlepszy efekt uzyskuje się na starych telewizorach, które mają taki "efekt poświaty" czy inaczej mówiąc wolne wygaszanie oraz słaby kontrast. Tam migotanie jest niemal niewidoczne. Na każdym LCD'ku będzie mrugało niemiłosiernie :/
Tytuł: Odp: Tryb gigascreen
Wiadomość wysłana przez: Abrimaal w 2012.02.09, 01:10:40
Cały efekt to właśnie szachownice w pikselach i raczej to by trzeba było naprzemiennie pokazywać nawet przy tych samych atrybutach.
Właśnie, to jest to. Kiedyś włączyłem jakieś demo (nie pamiętam tytułu) i leciał scroll - jasnozielone litery na ciemnozielonym tle.
Nigdy bym się nie domyślił jak udało im się połączyć BRIGHT 0 i 1 w jednym bloku, dopóki przypadkiem nie wcisnąłem pauzy,
tło liter było kratkowane i przy scrollowaniu było znacznie ciemniejsze.
Tytuł: Odp: Tryb gigascreen
Wiadomość wysłana przez: Jean 1 w 2012.02.26, 21:25:54
Może nie całkowicie na temat jeśli chodzi o gigascreeny itd , ale znalazłem takie fajne coś http://www.zxmodules.de/zxpaintbrush/zxpaintbrushframe.html (http://www.zxmodules.de/zxpaintbrush/zxpaintbrushframe.html)

Bardzo fajna aplikacja pod winde do rysowania sobie i konwersji na różne formaty, między innymi format tap.
Tytuł: Odp: Tryb gigascreen
Wiadomość wysłana przez: Abrimaal w 2012.02.29, 02:54:48
Może nie całkowicie na temat jeśli chodzi o gigascreeny itd , ale znalazłem takie fajne coś http://www.zxmodules.de/zxpaintbrush/zxpaintbrushframe.html (http://www.zxmodules.de/zxpaintbrush/zxpaintbrushframe.html)

Bardzo fajna aplikacja pod winde do rysowania sobie i konwersji na różne formaty, między innymi format tap.
Skorzystałem z tej aplikacji i powiedzmy, że mam 2 obrazki w formacie tap.
Teraz:
Pod jakie adresy w 128 je załadować i jakie instrukcje (POKE lub OUT) wykonać przed załadowaniem każdego z obrazków?
Jakimi POKE lub OUT przełączać obrazki?
Czy automatycznie znajdą się w pamięci ekranu, czy trzeba je przenosić pod 164384 np. przez LDIR?

Tytuł: Odp: Tryb gigascreen
Wiadomość wysłana przez: matofesi w 2012.02.29, 08:11:59
Ładujesz oba obrazki pod $C000 (49152) - pierwszy do banku 5, drugi do 7.  Przełączasz "mrugając" trzecim bitem portu $7FFD (32765).

Najprościej to zrobić w trybie USR0:
10 CLEAR 49151
20 OUT 32765,16+5
30 LOAD "1" CODE 49152
40 OUT 32765,16+7
50 LOAD "2" CODE 49152
60 PAUSE 1
70 OUT 32765,16
80 PAUSE 1
90 OUT 32765,16+8
100 GOTO 60

To 16 dodawane do wartości wysyłanej na port to ustawienie ROM1 (BASIC 48) - bez tego przełączy ci ROM na ROM0 (tryb 128) i wszystko się powali. Najpierw ustawiany jest bank 5 i ładowany obrazek, który pojawi się też od razu na ekranie - bank 5 to shadow bloku $4000-$7FFF (16384-32767). Potem przełączamy bank na 7 i ładujemy drugi obrazek - tego nie będzie widać, bo włączony jest (bit 3) ekran pierwszy. Po załadowaniu obrazków robimy PAUSE 1 - synchronizacja z ramką a potem włączamy ekran podstawowy, kolejne PAUSE 1 i włączamy drugi ekran i zamykamy pętlę. W efekcie oba obrazki powinny mrugać na przemian co ramkę, czyli wg definicji to powinien być właśnie gigascreen.

Kod ma jedną wadę - jak go przerwiesz to się może zdarzyć, że się wstrzelisz pomiędzy ekrany z włączonym drugim ekranem. W takiej sytuacji musisz na ślepo zrobić OUT 32765,16, żeby przełączyć ekran na główny.
Tytuł: Odp: Tryb gigascreen
Wiadomość wysłana przez: Abrimaal w 2012.02.29, 23:17:07
Matofesi, zrobiłem tak jak napisałeś i działa tylko w trybie BASIC 48 (USR 0),
jak zrobić, żeby to chodziło w trybie 128?

Na obrazki nie patrz, to są testowe, wymagają jeszcze wielu poprawek, chciałem tylko sprawdzić, czy to chodzi.

(dodane) Próbowałem zmienić drugi OUT z 24 na 31 - ten sam efekt, działa tylko pod USR 0
Tytuł: Odp: Tryb gigascreen
Wiadomość wysłana przez: matofesi w 2012.03.01, 00:52:08
Takoż i pisałem - "najprościej zrobić w USR0" ;)

W 128 trzeba przełączać robiąc POKE do zmiennych systemowych, ale nie dam sobie głowy uciąć czy to w ogóle zadziała, bo sam system 128 używa drugiego ekranu a siódmy bank jest używany jako bufor edytora.

Teoretycznie należałoby zastąpić OUT 32765,X przez POKE 23388,X - to samo X w obu przypadkach. Ale na prawdę nie gwarantuję, czy to zadziała.
Tytuł: Odp: Tryb gigascreen
Wiadomość wysłana przez: Abrimaal w 2012.03.01, 01:04:49
Wypróbuję. Docelowo to ma być w assemblerze, w Basic testuję, czy w ogóle działa.

I jeszcze jedno pytanie - czy jest możliwość wywołania w asm instrukcji równoznacznej z PAUSE 1?
Z przerwaniami jest dużo roboty, dlatego pytam o jakiś zastępczy sposób.

Z POKE zamiast OUT też nie działa w trybie 128, nawet z POKE+OUT, tylko w USR 0

A może ktoś ma gotowy kod do przełączania 2 obrazów w trybie 128?
Możliwie jak najprostszy, wszelkie CALL czy JR do czytania klawiatury dopiszę sobie.
Tytuł: Odp: Tryb gigascreen
Wiadomość wysłana przez: matofesi w 2012.03.01, 08:09:41
Funkcjonalnym odpowiednikiem (mniej więcej, bo tak na prawdę jest raczej dokładnie odwrotnie ;)) BASICowego PAUSE 1 jest assemblerowe HALT przy założeniu, że mamy włączone przerwania.

Kod przełączający obrazki w assemblerze (zakładając, że są załadowane do właściwych banków pamięci) mógłby wyglądać na przykład tak:

         ld a,16
         ld (bank),a
loop:    halt
         ld a,(bank)
         ld bc,32765
         out (c),a
         xor 8
         ld (bank),a

; tutaj inne operacje...

         jr loop

bank:    defb 0

W związku z tym, że samo ładowanie do poszczególnych stron pamięci nie do końca chce działać tak jakby się tego spodziewać można to rozwiązać inaczej. Najpierw w loaderze załadować obrazki:
10 CLEAR 32767
20 LOAD "" CODE 32768 : REM pierwszy obrazek
30 LOAD "" CODE 32768+6912 : REM drugi obrazek

A po załadowaniu odpalić przerzucanie do właściwych banków w assemblerze:
         ld a,16+5
         ld bc,32765
         out (c),a
         ld hl,32768
         ld de,49152
         ld bc,6912
         ldir

         ld a,16+7
         ld bc,32765
         out (c),a
         ld hl,32768+6912
         ld de,49152
         ld bc,6912
         ldir

I dopiero po tym kawałku wywołać pętlę z pierwszego przykładu do "mrugania" obrazkami.
Tytuł: Odp: Tryb gigascreen
Wiadomość wysłana przez: Pyza^Illusion w 2012.03.02, 09:33:54
Funkcjonalnym odpowiednikiem BASICowego PAUSE 1 jest assemblerowe HALT przy założeniu, że mamy włączone przerwania.

IM2 należałoby dodać. Jeżeli nie będzie owych przerwań a zostanie użyty rozkaz DI (wyłączenie przerwań), a później wystąpi gdzieś HALT, to będzie to równoznaczne ze zwiechą ZX'a (HALT będzie trwał w nieskończoność).

Cytuj
W związku z tym, że samo ładowanie do poszczególnych stron pamięci nie do końca chce działać tak jakby się tego spodziewać [...]

Otóż tutaj mnie zaciekawiłeś, bo nie bardzo sobie mogę wyobrazić co może nie zadziałać. W całym swym dorobku (a były to rzeczy tworzone w głównej mierze pod 128k), nie spotkałem się z jakimkolwiek problemem ładowania bloków do poszczególnych banków. Producenci gier też najpierw ładowali główny blok pamięci, a banki dogrywane były później. Po prostu nie łapię w czym mógłby być problem :)
Tytuł: Odp: Tryb gigascreen
Wiadomość wysłana przez: matofesi w 2012.03.02, 10:35:52
Cytuj
Funkcjonalnym odpowiednikiem BASICowego PAUSE 1 jest assemblerowe HALT przy założeniu, że mamy włączone przerwania.

IM2 należałoby dodać. Jeżeli nie będzie owych przerwań a zostanie użyty rozkaz DI (wyłączenie przerwań), a później wystąpi gdzieś HALT, to będzie to równoznaczne ze zwiechą ZX'a (HALT będzie trwał w nieskończoność).

Nie, żeby coś, ale "DI" oznacza wyłączenie przerwać, czyli założenie o którym piszę przestaje być spełnione. Dopóki przerwania są włączone nie ma strategicznego znaczenia czy jest to IM 1 czy IM 2 - HALT zaczeka grzecznie na zakończenie kolejnej procedury obsługi przerwań.

Cytuj

Cytuj
W związku z tym, że samo ładowanie do poszczególnych stron pamięci nie do końca chce działać tak jakby się tego spodziewać [...]

Otóż tutaj mnie zaciekawiłeś, bo nie bardzo sobie mogę wyobrazić co może nie zadziałać. W całym swym dorobku (a były to rzeczy tworzone w głównej mierze pod 128k), nie spotkałem się z jakimkolwiek problemem ładowania bloków do poszczególnych banków. Producenci gier też najpierw ładowali główny blok pamięci, a banki dogrywane były później. Po prostu nie łapię w czym mógłby być problem :)

Szczerze mówiąc nie specjalnie się temu przyglądałem poza tym, że rzuciłem okiem jak w ROM 0 obsługiwana jest zmienna BANK_M. I z tego rzutu okiem wynikło, że ona zasadniczo powinna być traktowana jako "read only", bo zmiany jej wartości niekoniecznie muszą się przekładać na zmiany banków.

Co do ewentualnych problemów - na ile rozumiem konstrukcję bank 7 (o tym w tym wypadku rozmawiamy) jest przez system traktowany w jakiś szczególny sposób. Nie wnikam w jaki. Jak widać w praktyce (vide posty Abrimaala) kod, który działa w USR0 w trybie 128 nie chce działać a zmiana tegoż na - zdawałoby się - zgodny ze 128 też nie powoduje zmiany w działaniu.  Tutaj akurat mam pewne podejrzenie - BANK_M jest zasadniczo czytane wyłącznie przez ROM 0 i procedurę SWAP w zmiennych systemowych. Działający program w BASICu chodzi cały czas (jeśli tylko nie używa rozszerzonego BASICa) w ROM 1 a co za tym idzie nie następują odwołania do ROM 0 ani skoki do SWAP. Prawdopodobnie potrzebny jest jakiś extra trigger, żeby takie przełączenie nastąpiło ale w związku z tym, że zasadniczo nie jest mi to do szczęścia potrzebne stawiam to tylko jako moje gdybanie i teorię ;)

I chętnie dam się "naprostować" np. przy użyciu działającego w trybie 128 odpowiednika mojego kodu s tego postu: http://www.speccy.pl/forum/index.php/topic,78.msg3302.html#msg3302

Tytuł: Odp: Tryb gigascreen
Wiadomość wysłana przez: Pyza^Illusion w 2012.03.02, 14:48:52
Aha, czyli "wątpliwe działanie" odnosi się do trybu BASIC128... Po prostu tego nie wyłapałem. Zawsze robiliśmy to pod USR0.
Kiedyś widziałem jakiś loader do gry, w którym przełączanie banków odbywało się na zasadzie "jak nie jedno, to drugie". Czyli w linii zastosowano i POKE i OUT o tych samych wartościach i faktycznie uruchamiało się niezależnie od tego czy był BASIC48 czy BASIC128 (choć w sumie teraz nie dałbym sobie głowy uciąć, czy faktycznie były to te same wartości czy jednak pomniejszone o 16).

Znalazłem jeszcze takie coś (za http://www.nvg.ntnu.no/sinclair/faq/tech_128.html (http://www.nvg.ntnu.no/sinclair/faq/tech_128.html)):
Cytuj
When memory is being paged, interrupts should be disabled and the stack should be in an area which is not going to change. If normal interrupt code is to run, then the system variable at 5B5Ch (23388) must be kept updated with the last value sent to port 7FFDh. It is not possible to read this port.

Wg tego przełączanie banków w trybie BASIC128 ale z poziomu asm wygląda następująco:
     LD      A,(5B5Ch)       ;Previous value of port
     AND     0F8h
     OR      4               ;Select bank 4
     LD      BC,7FFDh
     DI
     LD      (5B5Ch),A
     OUT     (C),A
     EI
Tytuł: Odp: Tryb gigascreen
Wiadomość wysłana przez: matofesi w 2012.03.02, 14:56:55
No i pięknie. Tylko to nie jest odpowiedź na pytanie "czy się da i jeśli tak to w jaki sposób zrobić to samo w BASICu 128" ;)

Na moje oko się nie da i trzeba się podeprzeć asmem.
Tytuł: Odp: Tryb gigascreen
Wiadomość wysłana przez: Pyza^Illusion w 2012.03.02, 16:12:33
Teoretycznie da się to przetłumaczyć na BASIC. Jedyny problem to wyłączenie i włączenie przerwań. Jak kto uparty, to bierze "Przewodnik po ZX SPECTRUM", z tabelki tłumaczy rozkazy na kod procesora i umieszcza kod w linii DATA odpowiednio obniżając RAMTOP o ilość bajtów w DATA. Pamiętać, że RAMTOP powinien mieć poniżej 49152. No o nie zapomnieć o dopisaniu RET na końcu ;)

Wspomniany listing należałoby nieco zmodyfikować, ale powinno dać to jakiś pozytywny efekt. Sorry, że nie napisałem gotowca, ale za bardzo nie mam teraz czasu.
Tytuł: Odp: Tryb gigascreen
Wiadomość wysłana przez: matofesi w 2012.03.02, 17:05:04
I kręcimy się w kółko. Ja mówię, że się nie da, ty że trzeba zrobić w asmie. Ja mówię, że prawdopodobnie bez asma się nie da, ty, że trzeba przetłumaczyć, ustawić, wywołać... czyli zrobić w asmie.

Umówmy się więc, że nie jest wykluczone, że da się zrobić ale nikomu nie chce się próbować więc być może jednak nie da się zrobić ;)

Mnie tam to do szczęścia nie jest potrzebne - to raczej teoretyczne dywagacje.
Tytuł: Odp: Tryb gigascreen
Wiadomość wysłana przez: Pyza^Illusion w 2012.03.02, 18:23:18
Ej no, żadne tam upieranie się przy asmie. Problem rozumiem jako "jak z poziomu BASIC zrobić próbę przełączania ekranów w trybie BASIC128?", a nie "za wszelką cenę napisać to nie używając komend assemblera". Mimo iż faktycznie podpieramy się asmem, to wszystko wykonujemy z poziomu BASIC i mamy jakąś tam BASIC'ową kontrolę nad tym. Nie trzeba dogrywać osobnego pliku z kodem etc. O ile to w ogóle zadziała... Bo tak jak piszesz, ciągle jesteśmy w fazie teoretycznej :D

No i może faktycznie darować sobie mordownię w BASIC128, bo na dobrą sprawę więcej z tym zachodu niż to warte. Tak jak Mat zresztą pisze, raczej nie wykona się tego z poziomu czystego BASIC'a.
A co do pozostaniu na drugim ekranie to zamiast klepać na ślepo tego przydługawego OUT'a, wystarczy dać C (CONTINUE) i przerwać ponownie, za 2-3 razem trafimy ;)
Tytuł: Odp: Tryb gigascreen
Wiadomość wysłana przez: matofesi w 2012.03.02, 18:51:06
Ej no, żadne tam upieranie się przy asmie. Problem rozumiem jako "jak z poziomu BASIC zrobić próbę przełączania ekranów w trybie BASIC128?", a nie "za wszelką cenę napisać to nie używając komend assemblera".

No to źle rozumiesz. Problem był jak to zrobić bez używania asma. Jak już mam go używać to cały problem stawiam inaczej i nie ma w ogóle dyskusji.

Cytuj
Mimo iż faktycznie podpieramy się asmem, to wszystko wykonujemy z poziomu BASIC i mamy jakąś tam BASIC'ową kontrolę nad tym. Nie trzeba dogrywać osobnego pliku z kodem etc.

Ale to, że nie dogrywamy nie znaczy, że nie używamy asma.

Cytuj
O ile to w ogóle zadziała... Bo tak jak piszesz, ciągle jesteśmy w fazie teoretycznej :D

Teoria dotyczy tego, że prawdopodobnie nie da się tego zrobić samym BASICem. I tylko tutaj możemy podyskutować. Jak mieszasz w to asma w jakiejkolwiek formie to nie ma o czym dyskutować - da się zrobić.

Cytuj
No i może faktycznie darować sobie mordownię w BASIC128, bo na dobrą sprawę więcej z tym zachodu niż to warte. Tak jak Mat zresztą pisze, raczej nie wykona się tego z poziomu czystego BASIC'a.

A to już jak kto lubi. Mnie tam zasadniczo wszystko jedno - nie będę tego robił ani tak ani tak ani nawet w USR 0.

Cytuj
A co do pozostaniu na drugim ekranie to zamiast klepać na ślepo tego przydługawego OUT'a, wystarczy dać C (CONTINUE) i przerwać ponownie, za 2-3 razem trafimy ;)

I zrób to samo w USR 0 :P

Skończmy lepiej bezproduktywną dyskusję, bo i tak do niczego nas nie doprowadzi.
Tytuł: Odp: Tryb gigascreen
Wiadomość wysłana przez: Abrimaal w 2012.03.02, 23:21:42
Spokojnie Panowie, bo już się wszyscy pogubiliśmy.
Chodzi mi o to - jest Spectrum uruchomiony w trybie BASIC 128,
ładuje loader i 2 obrazki do odpowiednich banków.
Później przez kilka sekund ma wyświetlać gigascreen (lub czekać na klawisz)
i wrócić do dalszego programu, niezależnie czy ten program jest w BASIC czy w ASM.

Nie ma takiej możliwości wykonania przed ładowaniem przełączenia na tryb 48,
wywołania gigascreen i powrotu do BASIC 128, bo w obu przypadkach następuje reset
i dalsze instrukcje oraz zawartość pamięci przepadną.

Popróbuję po kolei.
Tytuł: Odp: Tryb gigascreen
Wiadomość wysłana przez: matofesi w 2012.03.03, 00:23:11
No to robisz tak... Najpierw BASIC
10 CLEAR 32767
20 LOAD "player" CODE 39700
30 LOAD "PIC1" CODE 32768
40 LOAD "PIC2" CODE 32768+6912
50 RANDOMIZE USR 39700

A do tego "player" asm
         org 39700
         di
         ld a,16+5
         ld bc,32765
         out (c),a
         ld hl,32768
         ld de,49152
         ld bc,6912
         ldir
         ld a,16+7
         ld bc,32765
         out (c),a
         ld hl,32768+6912
         ld de,49152
         ld bc,6912
         ldir
         ei
loop:    halt
bank:    equ $+1
         ld a,16
         ld bc,32765
         out (c),a
         xor 8
         ld (bank),a
; tutaj ewentualne sprawdzenie klawiatury, licznik itp.
         jr loop

Asseblujesz, zapisujesz loader, player, dwa obrazki. Odpalasz.

W efekcie powinieneś mieć to, o czym piszesz.
Tytuł: Odp: Tryb gigascreen
Wiadomość wysłana przez: Abrimaal w 2012.03.03, 05:21:11
Ładowanie obrazków zrobiłem tak jak radziłeś, przez LDIR, to działa dobrze.
We właściwej części kodu nie wiem, co wpisać w (bank), dlatego opuściłem te instrukcje.
a ponadto nie mam assemblera, wszystko tłumaczę na kod i wpisuję w DATA,
dlatego tak długo to u mnie trwa.
Główny kod do przełączania napisałem tak - i nie działa, nie wyświetla drugiego obrazka, już 5 rano i nie wiem dalej, gdzie jest błąd.
loop:    halt
         ld a,16
         ld bc,32765
         out (c),a
         xor 8
        ; tutaj  sprawdzenie klawiatury
         jr loop
Dołączam też plik w BASIC, w DATA na pewno nie ma błędów, bo sprawdzałem w debuggerze, kod jest wpisany ok. Zmieniłem tylko adres umieszczając kod za obrazkami, pod 46592.
Nie wiem jaki jest cel ładowania obrazków w inne miejsce i później przenoszenie za pomocą LDIR, czy nie można w trybie 128 bezpośrednio załadować do banków OUT 32756,16 i OUT 32764,24 i skoczyć do głównej pętli w kodzie?
Tytuł: Odp: Tryb gigascreen
Wiadomość wysłana przez: matofesi w 2012.03.03, 17:00:58
No dobra... jeśli nie używasz assemblera, to możesz to zrobić tak (będzie prościej ;))
         ei
loop:    halt
         ld a,16
         ld bc,32765
         out (c),a
         halt
         ld a,8+16
         out (c),a
; tutaj extra kod
         jr loop

W twojej modyfikacji mojego kodu błąd był tu:
loop:    halt
         ld a,16  ; <--- tu ustawiasz pierwszy ekran
         ld bc,32765
         out (c),a
         xor 8  ; <--- tu zmieniasz na drugi
        ; tutaj  sprawdzenie klawiatury
         jr loop  ; <--- a to skaczesz do "loop", które wykonuje HALT a potem z powrotem ustawia pierwszy ekran

Zakładając, że puszczasz pętlę nieskończoną kod powinien wyglądać tak:

         ld a,16  ; <--- tu ustawiasz pierwszy ekran
loop:    halt
         ld bc,32765
         out (c),a
         xor 8  ; <--- tu zmieniasz na drugi
         jr loop  ; <--- a tu skaczesz do "loop", w którym już nie ustawiasz na sztywno ekranu

Problem w tym, że w ten sposób nie bardzo możesz dodać jakiś extra kod w pętli. Żeby było lepiej można to poprawić tak:

         ld a,16
loop:    halt
         ld bc,32765
         out (c),a
         xor 8
         push af
         ; tutaj extra kod - sprawdzanie klawiszy etc.
         ; af jest na stosie a w nim następny ekran do wyświetlenia
         pop af
         jr loop
exit:    pop af ; jeśli wciśnięcie klawisza wyskoczy z pętli musisz zdjąć AF ze stosu
         ; koniec - ewentualny extra kod na zakończenie

A w pierwszym przykładzie ten "bank", z którym nie wiedziałeś co zrobić to po prostu zmienna w samomodyfikującym kodzie. Zakładając, że kod siedzi pod adresem 40000 wygląda to tak:

40000          ei
40001 loop:    halt
      bank:    equ 40003
40002         ld a,16
40004         ld bc,32765
40007         out (c),a
40009         xor 8
40011         ld (bank),a
^^^^ to tak na prawdę...
40011         ld (40003),a ; zapamiętuje nowy bank wprost w instrukcji ld a,N
Tytuł: Odp: Tryb gigascreen
Wiadomość wysłana przez: Pyza^Illusion w 2012.03.03, 17:55:18
We właściwej części kodu nie wiem, co wpisać w (bank), dlatego opuściłem te instrukcje.
a ponadto nie mam assemblera, wszystko tłumaczę na kod i wpisuję w DATA

Owa instrukcja EQU to polecenie programu-assemblera (nie assemblera w znaczeniu języka programowania) i służy do zabezpieczenia pewnej wartości bajtów w miejscu kodu, czyli miejsce na przechowywanie zmiennych. Jeżeli nie używasz programu assemblera to wstaw tam dwa NOPy.

Cytuj
Nie wiem jaki jest cel ładowania obrazków w inne miejsce i później przenoszenie za pomocą LDIR, czy nie można w trybie 128 bezpośrednio załadować do banków OUT 32756,16 i OUT 32764,24 i skoczyć do głównej pętli w kodzie?

BASIC 128 ma jakieś dziwne właściwości i faktycznie przełączanie banków jest tam trochę zagmatwane. Pisaliśmy również, że pod BASIC 128 instrukcje przełączania przez OUT nie działają. Trzeba używać trybu USR0 (Basic48 z włączonymi bankami i 2 ekranami ze 128k).

Otóż od początku...
BASIC 128 jest bardzo rzadko stosowany. Większość programów do niczego go nie potrzebuje, a wręcz mechanizmy ROM0 uniemożliwiają swobodne zarządzanie bankami z poziomu BASIC a to ze względu na zarządzanie RAMDYSK'iem. Dlatego najczęściej stosowany jest ROM1 (po USR0), czyli "stary" BASIC, w którym wszystkie właściwości 128k zostają zachowane. Jeżeli program używa BASIC tylko do załadowania danych, a cała reszta odbywa się z poziomu kodu asemblera to nie widzę sensu stosowania tego od 128.

Twój listing nie zawiera instrukcji POKE 23388.x, która to w BASIC 128 służy do przełączania banków dlatego nie będzie to hulało :)

Jeszcze znalazłem coś takiego, co sam kiedyś napisałem (posiłkując się ofkors dostępną mi wtedy dokumentacją): http://yarek.com/forum/index.php?topic=66.0 (http://yarek.com/forum/index.php?topic=66.0) - może się przydać...

W załączniku snapshocik w formacie .Z80 z poprawną i działającą wersją tego programu (nie pójdzie z kolei na BASIC48) :D

ps. ups... widzę, że w międzyczasie Mat już chyba rozwiązał problem. No nic...
Tytuł: Odp: Tryb gigascreen
Wiadomość wysłana przez: matofesi w 2012.03.03, 18:34:33
Owa instrukcja EQU to polecenie programu-assemblera (nie assemblera w znaczeniu języka programowania) i służy do zabezpieczenia pewnej wartości bajtów w miejscu kodu, czyli miejsce na przechowywanie zmiennych. Jeżeli nie używasz programu assemblera to wstaw tam dwa NOPy.

Gwoli ścisłości - EQU to przypisanie wartości do etykiety - odpowiednik LET z BASICa. EQU nie rezerwuje miejsca w pamięci a tylko ustawia występującą przed nim etykietę na podaną po nim wartość. W tym wypadku EQU $+1 używa jeszcze jednej notacji assemblerów - $ to aktualny adres do którego zostanie zapisana następna instrukcja. $+1 oznacza więc kolejną komórkę co w wypadku rozkazów dwubajtowych z bezpośrednio podanym parametrem (np. LD a,0) oznacza komórkę przechowującą ten właśnie parametr.

A to, co opisujesz to DEFB albo DEFW - to polecenia asseblera rezerwujące pamięć :)
Tytuł: Odp: Tryb gigascreen
Wiadomość wysłana przez: Pyza^Illusion w 2012.03.03, 18:40:05
Ooo o oo o o, w sumie o to mi właśnie chodziło :)
Eehhh, pamięć jednak zawodna. Choć w tum miejscu w ten sposób działa - może dlatego się zmyliłem :/
Tytuł: Odp: Tryb gigascreen
Wiadomość wysłana przez: Abrimaal w 2012.03.04, 01:33:03
Wreszcie działa, dałem HALT za wywołaniem obrazków oraz załadowanie odpowiednich wartości do zmiennej 23888, całość (bez LDIR obrazków) wygląda tak:
46629  EI
46630  LD A,024 ;drugi ekran
46632  LD BC,32765 ;port dla OUT
46635  LD DE,23388 ;adres zmiennej sys
46638  LD (DE),A ;załadowanie wartości do zmiennej
46639  OUT (C),A ;przełączenie obrazka
46641  HALT ;tutaj synchronizacja
46642  LD A,016 ; to samo dla ekranu 1
46644  LD (DE),A
46645  OUT (C),A
46647  HALT
46648  LD BC,63486 ;adres czytania klawiatury
46651  IN A,(C)
46653  BIT 0,A ;klawiszem 1 wychodzi się
46655  JR NZ,46630 ;jeśli nie wciśnięty to pętla
Tytuł: Odp: Tryb gigascreen
Wiadomość wysłana przez: matofesi w 2012.03.04, 23:12:08
No to od razu ci mówię - overkill ;)

Ustawianie strony przy użyciu zmiennej systemowej jest całkowicie zbędne. W zupełności wystarczy (i żeby nie było - tym razem zadałem sobie trud sprawdzenia w praktyce ;)) sam OUT. Żeby twój kod działał wystarczy tyle:

       EI
46630  LD A,024 ;drugi ekran
       LD BC,32765 ;port dla OUT
;      LD DE,23388 ;adres zmiennej sys
;      LD (DE),A ;załadowanie wartości do zmiennej
       OUT (C),A ;przełączenie obrazka
       HALT ;tutaj synchronizacja
       LD A,016 ; to samo dla ekranu 1
;      LD (DE),A
       OUT (C),A
       HALT
       LD BC,63486 ;adres czytania klawiatury
       IN A,(C)
       BIT 0,A ;klawiszem 1 wychodzi się
       JR NZ,46630 ;jeśli nie wciśnięty to pętla

Wykomentowane (średnik na początku) linie są całkowicie zbędne, choć jak widać nie przeszkadzają ;)
Tytuł: Odp: Tryb gigascreen
Wiadomość wysłana przez: Abrimaal w 2012.03.04, 23:56:59
Tak się domyślałem, jednak czasem lepiej przesadzić, żeby 2 razy zrobił to samo, niż miałoby nie chodzić wcale.
Tymczasowo moja misja skończona (z tym jednym obrazkiem), który jest moim pierwszym interlace, więc nie śmiać się.
To ma być tylko dodatek do przerobionej gry. Na ZX 48 gigascreen nie jest wykonywany, wyświetla się jeden statyczny obraz.

Ciekawe, czy dałoby się w menu podczas przerzucania obrazków wpakować jakąś muzykę (na AY)
Zapraszam do joysticków.
(http://abrimaal.pro-e.pl/network/savage1big.png)

Tytuł: Odp: Tryb gigascreen
Wiadomość wysłana przez: matofesi w 2012.03.05, 00:19:33
To co zrobiłeś i gigascreen w ogólności to nie jest interlace. Interlace to tryb graficzny w którym generator obrazu telewizyjnego (i tylko telewizyjnego ewentualnie na monitorze w trybie zgodnym z telewizorem - ma wyświetlać na przemian parzyste i nieparzyste linie ekranu w kolejnych półramkach) wyświetla najpierw parzyste linie obrazu a w kolejnej ramce/półramce nieparzyste linie. Wszystkie mrugające próby udawania interlace'u są dokłądnie tym - udawaniem. Interlace jest taką sobie koncepcją, ale poprawnie zrealizowany dawał całkiem przyzwoite efekty. Wyświetlanie na przemian dwóch obrazków w nadziei, że coś je po drodze przetworzy i zrobi z nich poprawny dobrze zsynchronizowany z rastrem interlace daje w efekcie dokładnie to, co może dawać - mrugający obraz z rozmytymi krawędziami, który przy dużej dozie samozaparcia można uznać za statyczny obraz z większą liczbą kolorów.

I, żeby nie było - przetestowałem takie zabawy na Samie - tam było dostępne sprzętowe przełączanie ekranół ale i tryb 512x192 i 16 kolorów. W żadnym wypadku to, co wychodziło przy użyciu mrugania ekranami nie było zbliżone do prawdziwego interlace'u. Ale oczywiście... 20 lat temu wmawialiśmy sobie, że jest ładnie, fajnie i tylko troszeczkę mruga ;)
Tytuł: Odp: Tryb gigascreen
Wiadomość wysłana przez: Abrimaal w 2012.03.05, 00:34:23
O-mać-Qu! Racja, po tygodniu spędzonym na rozkładaniu i składaniu gry, mogło mi się pomylić.
Jeśli chodzi o interlace, to absolutnie nie mam pojęcia, jak to jest robione i nawet nie pytam.
Tytuł: Odp: Tryb gigascreen
Wiadomość wysłana przez: YERZMYEY/HOOY-PROGRAM w 2012.03.05, 09:19:54
Ciekawe, czy dałoby się w menu podczas przerzucania obrazków wpakować jakąś muzykę (na AY)

Przy w miarę standardowym wyświetlaniu - tak. Przy tych, które napisał Zilog - ponoć już nie.
Tytuł: Odp: Tryb gigascreen
Wiadomość wysłana przez: matofesi w 2012.03.05, 09:31:19
Jeśli "tryb graficzny" polega na zwykłym mruganiu ekranami - nie widzę problemu. Jeśli przełącza co linię - tak pod warunkiem, że player zmieści się na dolnym borderze.
Tytuł: Odp: Tryb gigascreen
Wiadomość wysłana przez: andys w 2012.03.10, 07:56:51
jedynym chyba komputerem 8-bitowym co robi sprzetowy interlace jest chyba jednak atari xl http://www.atari.org.pl/forum/viewtopic.php?id=6923 sprawa odkryta jednak dopiero niedawno przez rybgasa... nasz interlejs (po oucie czy recznie) co najwyzej zmienia kolor na telewizorze, na emulatorze wcale. gigascreen sumuje i miesza wartosci dwoch bankow pamieci koloru i na dobra sprawe nawet nie wiem jak sobie radzi z 4 bankami.
Mat co do playera to w sixth demo na borderze jest na granicy taktow bo w bodajze trzecim utworze zrywa ramke;p. no i mam pytanie bo w kod niepatrzylem i tak... scroll zrobiliscie na gornej ramce?
Tytuł: Odp: Tryb gigascreen
Wiadomość wysłana przez: matofesi w 2012.03.10, 11:16:45
Sixth'a Kaz robił sam. Szczerze mówiąc nigdy mu przez ramię nie zaglądałem więc nie wiem jak dokładnie to zrobił. Pamiętam tylko, że logo po lewej zasłaniało fakt, że timing się tam zrywał. No i wydawało mi się, że było dokładnie liczone na48 i chodziło dobrze. Ale to bylo ponad 20 lat temu...
Tytuł: Odp: Tryb gigascreen
Wiadomość wysłana przez: andys w 2012.03.10, 15:59:54
wyszlo okey... cieszy fakt efectu sinclara lub kaza;p, na emualtorach czesto w pionie stoi nieprzeliczona kreska na wprost, ale to juz niedoskonalosc emulatorow......
co do sixth sprawa dotyczy tylko utworu bilinskiego...tam zrywalo ramke, ale doslownie z dwa razy na utwor;p
mat tak apropo przrzucales 2/3i ramk na 48 w lyrze 2 w swoim efekcie...daj troceh sourca.....
Tytuł: Odp: Tryb gigascreen
Wiadomość wysłana przez: matofesi w 2012.03.10, 22:36:41
@andys Ze źródłami jesteś dokładnie tam gdzie ja... Nic mi się nie zachowało z tamtych czasów i jakbym potrzebował coś z tamtych dem wyciągnąć to musiałbym pruć kod i disassemblować.

Sądząc po tym, co wtedy potrafiłem zrobić nie spodziewam się cudów ponad serię LDI albo jakieś niezbyt skomplikowane zabawy ze stosem. Ale raczej to pierwsze i sprytnie tablicowane dane albo automatycznie generowany kod.

Po raz kolejny powtórzę to samo - to było ponad 20 lat temu... ja od tego czasu nie dotykałem Spectruma aż do teraz. A to, co popełniłem teraz ukaże się dopiero za parę dni ;)
Tytuł: Odp: Tryb gigascreen
Wiadomość wysłana przez: andys w 2012.03.11, 07:07:17
zreszta albo stos albo ldi jak piszesz (ze stosu zdaje sie jest i tak najszybciej)... na h... sie pytam;p cos malo robie aby wiedziec ile speccy robi na ramke..chyba bardziej mi chodzilo o to, ze wizualnie nie widac rysowania  i czy robiles jakies nopy aby nie widziec rysowania w danym momencie. kodowanie wtedy na spectrum to bylo wyzwaniem;p ciagle nagrywanie pracy, spojrzenie jak jest i ponownie co zmienic;p

....A to, co popełniłem teraz ukaże się dopiero za parę dni.......
forever?
Tytuł: Odp: Tryb gigascreen
Wiadomość wysłana przez: matofesi w 2012.03.11, 13:38:54
Tak na szybko zajrzałem w kod pierwszej części TL2 (bo jak rozumiem o to ci chodziło - w żadnej innej części nie przewalam pół ekranu w ramce)... Nie ma tam jakichś wielkich cudów. Przede wszystkim nie ma przewalania. To jest zasadniczo scroller tylko z dużym fontem i więcej niż jednym znakiem na raz. Tekst jest po prostu wrzucany na ekran bez przewijania czy kasowania. Nie przyglądałem się timingom, ale raczej nie bylo tam dodatkowych opóźnień tylko jak najszybsze generowanie obrazu (używając ciągów LDI - stos jest szybszy ale mniej wygodny). To, że się nie tnie na rastrze to zasadniczo odpowiednio dobrana kolejność i umiejscowienie grafiki.
Tytuł: Odp: Tryb gigascreen
Wiadomość wysłana przez: andys w 2012.03.11, 18:39:39
hehehe postanowilem sie przetrzezwiec i napisac:P chodzilo mi o twoja kwestiwe w shocku jednak. ta z bobsami. tam trzeba bylo przerzucac w kolko z 4 ekrany malujac kolejne dodatkowe bobsy. spojarzalem w diasemblera i sa tam ldi wiec nie ma tematu:P
7:45 http://www.youtube.com/watch?v=MllVhsN6MG0&feature=related
A jak juz jestes to mam pytanie o laske z holywood... przerysowaliscie to recznie? nigdy to nie bylo w formacie spectrumowym
Tytuł: Odp: Tryb gigascreen
Wiadomość wysłana przez: matofesi w 2012.03.11, 19:58:54
W shocku ekran też jest tylko przewalany. A dokładniej 4 "ekrany". Ciągi LDI, dorysowywany jest jeden bob w każdej klatce. I zasadniczo szybciej się nie da albo jeśli się da, to kod będzie na tyle duży, że cztery klatki się nie zmieszczą w pamięci.

Co do animacji HPPRO Intro - nic nie przerysowywaliśmy. Na ile rozumiem - bo sam tego nie robiłem - kod został żywcem przeniesiony z C64 a w międzyczasie format animacji rozpracowany (to robota Rackne z Kazem do spółki) a potem Kaz napisał player'a do tego formatu danych a Ziutek modułem odtworzył oryginalną muzyczkę.
Tytuł: Odp: Tryb gigascreen
Wiadomość wysłana przez: Abrimaal w 2012.03.13, 02:25:45
Mam lamerskie pytanie, jako, że 128 to dla mnie wciąż jest magią bezceremonialną.

1. Czy ktoś mógłby udostępnić najprostszy kod do przerzucania 2 obrazów linia po linii?
Czy każdy pilnie strzeże swoich dokonań, że udostępnienie takiego kodu to twórcze samobójstwo dla kodera?

Tak na marginesie: przydałoby się założyć topik do udostępniania procedur, routines, fragmentów kodu,
czy jak to jeszcze można nazwać, np. szukam także kodu do sterowania strzałką, był kiedyś opublikowany
w Bajtku, więc jest freeware. Co o tym sądzicie? Ja uważam, że jest wielu takich, tylko nie przyznają się,
że znają assembler "w jedną stronę" - rozumieją tylko kod który sami napiszą. i przyznam, zaliczam się do nich.
Tytuł: Odp: Tryb gigascreen
Wiadomość wysłana przez: matofesi w 2012.03.13, 08:18:59
1. Czy ktoś mógłby udostępnić najprostszy kod do przerzucania 2 obrazów linia po linii?
Czy każdy pilnie strzeże swoich dokonań, że udostępnienie takiego kodu to twórcze samobójstwo dla kodera?

To ja ci powiem tak - koderzy się dzielą kodem. Tylko dzielenie - zwłaszcza przy bardziej zaawansowanym kodzie - jest procesem dwukierunkowym i zwykle jest to coś za coś. Chyba, że komuś się chce doprowadzać własny kod do stanu w którym nadaje się do pokazania ludziom i wtedy udostępnia go jako bibliotekę, engine etc.

Pisałem procedurę o która pytasz. I nie, nie dostaniesz jej z kilku powodów:
1. Kod jest brzydki i nie nadaje się do upublicznienia
2. Kod nie jest wyliczony na 100% i nie działa dokładnie tak, jakbym chciał, żeby działał
3. Efekt, który dostajesz jest tylko odrobinę lepszy niż mruganie co ramkę stąd nie chcę mieć nic wspólnego z jego popularyzacją.

Gdybyś chciał sobie coś takiego napisać to kod powinien wyglądać mniej więcej tak:

- ustaw procedurę obsługi przerwań, żeby ROM nie przeszkadzał
- wrzuć 1 obrazek do banku 5, drugi do banku 7

          ld a,16
          ld (bank),a
pętla:
          HALT

odczekaj  około 14365 taktów - tutaj pierwszy punkt w którym musisz eksperymentalnie dobrać czas do swojej pętli

          ld d,191
pętla2:
          ld a,(bank)
          ld bc,32765
          out (c),a
          xor 8

; powyższy kod to 13+10+12+7=42 takty pod warunkiem, że nie trafisz na contention i ULA nie wsadzi
; dodatkowego NOPa albo trzech ;)
; linia ekranu w 128 to 228 taktów zostaje ci więc 186 taktów

; domknięcie pętli to dodatkowe 14 taktów
; zostaję więc 172 takty, które musisz odczekać na przykład tak:

          rept 43
              nop
          endm

          dec d
          jp nz,pętla2

; domknięcie pętli zewnętrznej

; to poniżej jest po to, żeby w następnej ramce wyświetlanie zacząć od drugiego obrazka
; w ten sposób obrazki będą wyświetlane na przemian
          ld a,(bank)
          xor 8
          ld (bank),a

; tutaj zostaje miejsce na twój ewentualny dodatkowy kod
; zakładając, że wszystko zrobiłeś poprawnie masz około 12734 taktów

          jp pętla

bank:     db 0


Oczywiście to nie jest pełny kod - należy mu dorobić inicjalizację, pętlę opóźniającą na początku, kod na końcu (testowanie klawiatury, odpalanie muzyczki czy co tam jeszcze ci jest potrzebne), procedury powrotu do BASICa (jeśli kod ma wracać) etc.

Użyta mnemonika jest zgodna z assemblerem pasmo i te kawałki kodu, które podaję powinny się przy jego użyciu poprawnie skompilować.

Cytuj
szukam także kodu do sterowania strzałką, był kiedyś opublikowany w Bajtku, więc jest freeware

Co to oznacza "kod sterowania strzałką"? Do czego chcesz tego używać - asm czy BASIC? Jeśli BASIC to czy ma to być procedura działająca asynchronicznie (program w BASICu robi swoje a strzałka na wierzchu swoje) czy wystarczy synchroniczna procedura pozwalająca pojeździć strzałką i po kliknięciu zwracająca pozycję kliknięcia?

I co to znaczy "jest freeware"? Być może "freeware" (i raczej public domain w tym wypadku, choć należałoby dokładnie przeczytać tekst o którym mówisz czy przypadkiem jednak domyślna licencja nie jest jakaś inna) był tamten konkretny kod ale jeśli pytasz o funkcjonalny odpowiednik to on wcale nie musi być "freeware".
Tytuł: Odp: Tryb gigascreen
Wiadomość wysłana przez: andys w 2012.03.13, 13:06:03
e no mat  to nie 128..........
poszles na latwizne...jakie banki;p tu chodzi o 48:P
najszybciej na z80 jest przewalic w tyl przez stos dane.... ja do dzis nie wiem czy sie da tak cala ramke speccy  przewalic , ale patrzac na nmi2 mozna miec takie wrazenie. tak mozna 18 kolumn zrobic multicoloru.
O co ci chodzilo z myszka jak slusznie zauwazyl mat...... to ma tyle opcji;p
No i moge napisac to samo co mat:P kod czesto jest tak niechlujny, ze brzdko sie z nim kims dzielic;p czasem wystarczy, ze dziala;p
Tytuł: Odp: Tryb gigascreen
Wiadomość wysłana przez: matofesi w 2012.03.13, 13:34:24
@andys Jakbyś śledził dyskusję to byś wiedział o czym rozmawiamy :P

Pisałem 100 razy - nie da się zrobić takiego gigascreena jak ja go definiowałem na początku na Spectrum 48. Nie da się i już.  Takiego "normalnego" zgodnego z definicją z prostym mruganiem dwóch obrazków też się nie da, ale to już osobna kwestia. Możesz przewalić (ale też nie cały ekran) bitmapę albo atrybuty. Fizycznie nie da się jednego i drugiego.

Abrimaal zresztą zaczął swoją wypowiedź od
Cytuj
Mam lamerskie pytanie, jako, że 128 to dla mnie wciąż jest magią bezceremonialną.

Stąd moje założenie, że on przeczytał całą wcześniejszą dyskusję i pyta o mój kod robiący właśnie to, co wyżej opisałem.
Tytuł: Odp: Tryb gigascreen
Wiadomość wysłana przez: andys w 2012.03.13, 13:43:02
kurcze obliczales ile sie da? normalnie mnie to ciekawi.....
,...............@andys Jakbyś śledził dyskusję to byś wiedział o czym rozmawiamy.........
tu jest problem....bo na trzezwo wcale nie pisze://////

jednak po ominieciu paru lini (1 na 8 ) jak w nmi2 da sie. przrzucic... cos sceptycznie to gadasz......


ahhhh....abi musi sie teraz okreslic;p czy chce bankami obraz przewalac czy maltretowac z80;p
Tytuł: Odp: Tryb gigascreen
Wiadomość wysłana przez: matofesi w 2012.03.13, 14:00:35
Nie ma czego obliczać. Gigascreen to dwa pełne obrazki. Zakładając, że robisz kod
LD HL,NN
PUSH HL

I tak 3456 razy potrzebujesz (10+11) * 3456 = 72576 taktów. Na 128 masz 70908 taktów w ramce, na 48 69888. Problem tylko taki, że nawet jakbyś z czegoś zrezygnował (mniejsze obrazki itp.) to albo dojdziesz do rozmiaru znaczka pocztowego albo kod się skomplikuje na tyle, że wszystko się przestanie mieścić. Poza tym oczywiście musisz się liczyć z tym, że w którymś miejscu zetnie cię raster i całość przestanie wyglądać nawet przyzwoicie (bo to jest max tego, co mogę powiedzieć o gigascreenie jako takim).

Jak widać - da się upchnąć kod. Nie da się tego zrobić sensownie.

Ale jak chcesz to możesz próbować.

Tytuł: Odp: Tryb gigascreen
Wiadomość wysłana przez: andys w 2012.03.13, 14:09:51
olac gigascreen.... co to w ogole za wymysl.... podoba mi sie cyrklowanie nawet nopami.... to jest wyzwaniem jakims... a wiec zawsze trzeba cos odpuscic aby caly ekran przewalic...w nmi2 zrobili to prerfekcyjnie..... widzialem w trakcie kodu nopy;p
czujesza robiac to zapisujac na tapie?:PPPp
pytanie
mieszkacie wszyscy w toruniu?
Tytuł: Odp: Tryb gigascreen
Wiadomość wysłana przez: matofesi w 2012.03.13, 14:37:49
O żesz... Czy ty w ogóle czytasz to, co piszesz? Bo ja tak i trochę mnie oczy bolą i mam problemy ze zrozumieniem twojej wypowiedzi.

Odpowiadając - mam nadzieję - na kwestie z tejże wypowiedzi... W którym miejscu NMI2 widziałeś przerzucanie całego ekranu? W tej z multiscrollerem? A zauważyłeś, że scrollery mają małą czcionkę i nie mają wysokości 8 pikseli? To są 24 scrollery po 5 pikseli każdy - 3840 bajtów na ramkę do przerzucenia. Ja wiem dokładnie jak to jest robione, bo identyczną technikę zastosowałem w TL3 na Samie. Na początku jak leci scroller na atrybutach program generuje prescrollowane teksty poszczególnych scrollerów a potem je przerzuca szybkimi pętlami (prawie na pewno ciągi LDI).

Wstawianie NOPów w kod, który wymaga precyzyjnego wyliczenia czasu wykonania jest jak najbardziej naturalne. Tak jak wstawianie różnych innych rozkazów, które na oko nijak się mają do kontekstu a są używane, bo mają czasy wykonania 6,7 albo 11 taktów.

Nie widzę nic niezwykłego w robieniu takich rzeczy z zapisywaniem na taśmie - pracowaliśmy a ten sposób dość długo i było dobrze.

Nie wiem kogo masz na myśli pisząc "wszyscy". Ja mieszkam w Toruniu.
Tytuł: Odp: Tryb gigascreen
Wiadomość wysłana przez: Pyza^Illusion w 2012.03.13, 14:43:51
a wiec zawsze trzeba cos odpuscic aby caly ekran przewalic...w nmi2 zrobili to prerfekcyjnie....

No całego tak czy siak nie przewalisz :p Przecież było to pisane. A perfekcyjnie nie zrobili, bo w pewnym momencie widać jak się około połowy ekranu ścina obrazek, czyli mija z rastrem/ramką (jak tam se to kto nazywa). Więc górna część jest wyświetlana "na bieżąco" a w dolnej wyświetla to co było przerwanie wcześniej. Bo chodzi chyba o tą część z ogromnym logosem latającym góra/dół i samplem w tle? No i przewalają tam jakieś 85% ekranu. Większy bajer dla mnie to właśnie ten sampel, bo jest wpleciony pomiędzy kod rzucający na ekran.
Tytuł: Odp: Tryb gigascreen
Wiadomość wysłana przez: matofesi w 2012.03.13, 15:08:52
No dobra. To o czym piszesz to jest NMI 3.

Ścina się na środku - taki sam efekt będzie jak się będzie kombinowało z gigascreenem na 48 przy dużym obrazku. Przy takim rozmiarze grafiki nie uniknie się ścinania zwłaszcza jeśli poza samą grafiką chcemy coś tam jeszcze zmieścić.

Na oko sądząc - grafika na górze ma 40 pikseli czyli zostaje 152 do przerzucenia. Cała ramka to 312*224 czyli 69888 taktów. To daje około 460 taktów na jedną linię grafiki czyli 32 bajty. Używając ciągów LDI mamy 32*16=512 - za dużo. Para PUSH/POP to 21 taktów na 2 bajty - 336 taktów na linię - zostaje około 124 taktów na każdą linię na przesuwanie stosu itp. Do tego synchronizacja do ramki, równomiernie rozłożony kod i zasadniczo powinno się dać zrobić. A odgrywanie sample'a o ile pamiętam robiło się dwoma out'ami, czyli coś takiego
ld a,rejestr
ld bc,$FFFD
out (c),a
ld a,wartość
ld b,$bf
out (c),a
7+10+12+7+7+12=55 taktów.

Ciasno, ale nadal powinno się dać zrobić i w efekcie wygenerować sample'a z częstotliwością około 7 kHz.

Tytuł: Odp: Tryb gigascreen
Wiadomość wysłana przez: andys w 2012.03.13, 15:29:05
Kurnias Mat gdzies ty sie chowal;p taki zatematyk na taki szkrab jak speccy to zloto... ja to znam tylko z zalozenia pewne kwestie.... scrolll mial po 7 piksli nw nmi no chyba, ze jeszcze raz ogladne.....jedna linia tylko byla odpuszczona na znak.
Mi bardzo przeszkadzalo nagrywanie non stop:( literatury brak:( wszsytko sam dochodzilem:( i tylko bajtek..... szkoda,, ze tak wyszlo bo nie dosiaglem swoich celow....... a teraz to tam walic to wszysstko choc fajnie po latach pogadac o tym....
mat mieszkam obok;p flaszeczka? spotkanko?


sprawdzilem;p
http://www.youtube.com/watch?v=Cx5DsWCHEOI dodam teraz ze atrybuty tez lecialy;p choc zapomnialem o tym..... da sie i tyle..... moze wiekszosc danych sie powtarzala ale da sie...oraz stosowali nopy aby nie widziec czegos w trakcie rysowania....
Tytuł: Odp: Tryb gigascreen
Wiadomość wysłana przez: matofesi w 2012.03.13, 15:39:27
Dobra. Zasadniczo jestem tolerancyjny. Ale z tobą nie będę dalej dyskutował póki nie zaczniesz pisać z sensem albo na trzeźwo.
Tytuł: Odp: Tryb gigascreen
Wiadomość wysłana przez: Pyza^Illusion w 2012.03.13, 19:19:07
aaaa... te scrolle :p

To jest jeden i ten sam w każdej linii, dodatkowo wiele z nich ma to samo położenie w poziomie, co pozwala jednorazowo nawalać na ekran te same dane bez pobierania ich na nowo. Czyli pobiera raz i nawala w kilku miejscach. Co innego przerzucać cały ekran dowolnych danych, a co innego powtarzające się fragmenty. Wiele trików jest o to opartych.
Nie zerkałem w kod np. Shocka (chessboard-szachownica), ale tam górna część ekranu jest skopiowana na dół z lustrzanym odbiciem. Generalnie zrobiłbym to tak:
1. LD SP, początek grafiki do wrzutu
2. pop hl
3. ld (nn),hl (górna część) (nn - miejsce na ekranie)
4. ld (nn),hl (dolna część)
5. pop hl
6. ld (nn),hl
... aż do końca linii
7. LD SP, początek linii niżej...
i tak do końca...
a zdaje się tam jeszcze parę linii w całej tej perspektywie też się powtarza.

W NMI 3 (część Doubleback) jest wrzucanie całego ekranu + atrybuty i sprite'y i mini-scroller na dole, ale to jednak niewielka animacja powielana kilkanaście razy, a nie przerzucana grafika. Co by nie mówić, bardzo efekciarskie toto jest :D

Tu pewnie sprawa ma się nieco inaczej bo walimy te same rzeczy na ekran. W pamięci jest przeliczana mała animacja (nanoszenie jednego planu na drugi) o rozmiarach 4x32 bajtów, następnie procedura klonowania tego na ekranie:

1. LD SP, początek linii z grafiką
2. POP HL / POP DE
3. LD SP, koniec pierwszej linii ekranu pierwszej tercji
4. PUSH DE / PUSH HL (x8)
5. LD SP, koniec linii ekranu pierwszej tercji, ale połówka tercji (za jednym zamachem, żeby potem znowu tego nie pobierać)
6. PUSH DE / PUSH HL (x8)

potem kolejna i kolejna linia... Tym sposobem zapełnisz cały ekran grafiką, ale tylko niewielką i powtarzającą się. No i pewnie z połowę pamięci zajmie procedura przerzucania tego.
Oczywiście to tylko esencja, bez konkretnych pętli i "gotowca" - raczej sama idea...

No i do Gigascreenu ma się nijak :p
Tytuł: Odp: Tryb gigascreen
Wiadomość wysłana przez: matofesi w 2012.03.19, 23:05:00
....A to, co popełniłem teraz ukaże się dopiero za parę dni.......
forever?

Owszem. Szału nie ma - moje w Dizzzruptorze jest intro ze skaczącą kulką. Ale wydaje mi się, że po tylu latach jak na pierwszą robótkę wyszło nie najgorzej ;)
Tytuł: Odp: Tryb gigascreen
Wiadomość wysłana przez: YERZMYEY/HOOY-PROGRAM w 2012.03.19, 23:11:02
MAT:

> Szału nie ma
-------------------
Nieprawda, właśnie, że zajebiste intro, już 505 zachwalał na jakimś forum, że bardzo klimatyczne itp. :)
Tytuł: Odp: Tryb gigascreen
Wiadomość wysłana przez: ZbyniuR w 2013.02.09, 00:45:09
Ja tylko chciałem powiedzieć, że ten żółwik na początku wątku jest, jest yyy eeee WOW !! taki jest. :)
Tytuł: Odp: Tryb gigascreen
Wiadomość wysłana przez: Abrimaal w 2018.03.25, 09:16:22
Czy na ZX 128 możliwe jest przełączanie 3 lub więcej ekranów? Jeśli tak, to jakie wartości OUT 32765,x można jeszcze wykorzystać?
I do którego banku ładować na starcie?
Ja standardowo dla przełączania dwóch ekranów w programie używam x=16 i 24.
W loaderze jest POKE 23388,y. Dla dwóch screenów pierwszy ładuje sie pod 49152 ustawiając y=21, dla drugiego adres ten sam, y=23.
Później przez POKE 23388,16 wracam do standardowego RAMu i tam ładuję swój kod.
Wiele razy widziałem mapę banków ZX 128, ale na żadnej nie znalazłem jaka wartość OUT czy POKE który z nich aktywuje.

Tytuł: Odp: Tryb gigascreen
Wiadomość wysłana przez: trojacek w 2018.03.25, 10:32:11
Z tego co wiem, to tylko dwa - z banków 5 i 7. Sama ULA nie współpracuje z mechanizmem bankowania RAM, a ma jedynie dodatkowy sygnał wejściowy (podłączony do rejestru 174), nakazujący ULA ustawienie A15 w stanie niskim (ekran standardowy, od 16384) lub wysokim (drugi ekran, od 49152).
4 ekrany to tylko na Timeksie przerobionym na 128K :)
Tytuł: Odp: Tryb gigascreen
Wiadomość wysłana przez: Dalthon w 2018.03.25, 12:20:03
Tutaj masz fajnie opisane jak wygląda "bankowanie" na 128:
https://neuro.me.uk/projects/wos/sinclairfaq.dev/dev/reference/128kreference.htm

FFFFh +--------+--------+--------+--------+--------+--------+--------+--------+
      | Bank 0 | Bank 1 | Bank 2 | Bank 3 | Bank 4 | Bank 5 | Bank 6 | Bank 7 |
      |        |        |(also at|        |        |(also at|        |        |
      |        |        | 8000h) |        |        | 4000h) |        |        |
      |        |        |        |        |        | screen |        | screen |
C000h +--------+--------+--------+--------+--------+--------+--------+--------+
      | Bank 2 |        Any one of these pages may be switched in.
      |        |
      |        |
      |        |
8000h +--------+
      | Bank 5 |
      |        |
      |        |
      | screen |
4000h +--------+--------+
      | ROM 0  | ROM 1  | Either ROM may be switched in.
      |        |        |
      |        |        |
      |        |        |
0000h +--------+--------+


A co do samych wartości to zapomnij o POKE 23388 - to działa tylko w BASIC'u. W kodzie procka przełączanie banków jest prosta:

ld a,x
ld bc,32765
out (c),a

gdzie za x  podajesz:

16 - bank 0 i wyświetla grafikę z 16384 (bank 5)
17 - bank 1 i wyświetla grafikę z 16384 (bank 5)
18 - bank 2 i wyświetla grafikę z 16384 (bank 5)
19 - bank 3 i wyświetla grafikę z 16384 (bank 5)
20 - bank 4 i wyświetla grafikę z 16384 (bank 5)
21 - bank 5 i wyświetla grafikę z 16384 (bank 5)
22 - bank 6 i wyświetla grafikę z 16384 (bank 5)
23 - bank 7 i wyświetla grafikę z 16384 (bank 5)

24 - bank 0 i wyświetla grafikę z 49152 (bank 7)
25 - bank 1 i wyświetla grafikę z 49152 (bank 7)
26 - bank 2 i wyświetla grafikę z 49152 (bank 7)
27 - bank 3 i wyświetla grafikę z 49152 (bank 7)
28 - bank 4 i wyświetla grafikę z 49152 (bank 7)
29 - bank 5 i wyświetla grafikę z 49152 (bank 7)
30 - bank 6 i wyświetla grafikę z 49152 (bank 7)
31 - bank 7 i wyświetla grafikę z 49152 (bank 7)
Tytuł: Odp: Tryb gigascreen
Wiadomość wysłana przez: ZbyniuR w 2018.03.25, 13:38:32
A który bank jest widoczny pod 4000h w chwili gdy 5 jest podłączony pod C000h ?
I  który bank jest widoczny pod 8000h w chwili gdy 2 jest podłączony pod C000h ?
Tytuł: Odp: Tryb gigascreen
Wiadomość wysłana przez: trojacek w 2018.03.25, 15:10:25
a) ten sam
b) ten sam

To bardzo prosta logika bankowania. Dopiero w czarnych +2 oraz w +3 jest to nieco bardziej zawiłe.
Tytuł: Odp: Tryb gigascreen
Wiadomość wysłana przez: Dalthon w 2018.03.25, 15:11:20
A który bank jest widoczny pod 4000h w chwili gdy 5 jest podłączony pod C000h ?
pod 4000h ZAWSZE jest bank 5 (1)
I  który bank jest widoczny pod 8000h w chwili gdy 2 jest podłączony pod C000h ?
pod 8000h ZAWSZE jest bank 2 (2)

Zmieniając banki zmienia się tylko zawartość od C000h - w powyższych przypadkach te same dane są widoczne pod 4000h i C000h (1) i 8000h i C000h (2)

Dopiero w czarnych +2 oraz w +3 jest to nieco bardziej zawiłe.
Uprzedziłeś moją odpowiedź :) A co do special mode, to nie mieszaj chłopakowi i mówimy tutaj o rozwiązaniach kompatybilnych ze wszystkimi modelami 128K :)
Tytuł: Odp: Tryb gigascreen
Wiadomość wysłana przez: ZbyniuR w 2018.03.25, 15:17:49
Ja tu sobie żyję w błogiej nieświadomości a teraz trojacek mi mówi że nie wszystkie 128ki mają tak samo.

Czyli....
Tytuł: Odp: Tryb gigascreen
Wiadomość wysłana przez: Dalthon w 2018.03.25, 15:22:33
Czyli... poprzez port 1FFDh można ustawiać dodatkowe kombinacje:

       Bit 2 =0    Bit 2 =0    Bit 2 =1    Bit 2 =1
       Bit 1 =0    Bit 1 =1    Bit 1 =0    Bit 1 =1
 FFFFh+--------+  +--------+  +--------+  +--------+
      | Bank 3 |  | Bank 7 |  | Bank 3 |  | Bank 3 |
      |        |  |        |  |        |  |        |
      |        |  |        |  |        |  |        |
      |        |  | screen |  |        |  |        |
 C000h+--------+  +--------+  +--------+  +--------+
      | Bank 2 |  | Bank 6 |  | Bank 6 |  | Bank 6 |
      |        |  |        |  |        |  |        |
      |        |  |        |  |        |  |        |
      |        |  |        |  |        |  |        |
 8000h+--------+  +--------+  +--------+  +--------+
      | Bank 1 |  | Bank 5 |  | Bank 5 |  | Bank 7 |
      |        |  |        |  |        |  |        |
      |        |  |        |  |        |  |        |
      |        |  | screen |  | screen |  | screen |
 4000h+--------+  +--------+  +--------+  +--------+
      | Bank 0 |  | Bank 4 |  | Bank 4 |  | Bank 4 |
      |        |  |        |  |        |  |        |
      |        |  |        |  |        |  |        |
      |        |  |        |  |        |  |        |
 0000h+--------+  +--------+  +--------+  +--------+


Jest to opisane w linku który podałem trochę wyżej ;)
Tytuł: Odp: Tryb gigascreen
Wiadomość wysłana przez: Abrimaal w 2018.03.25, 15:47:19
Czy to znaczy, że używając OUT 32765, 16 do 23 mogę załadować 2 screeny do przełączania pod 16384, przełączać tymi samymi wartościami i w ogóle nie przejmować się, że mogą wejść na mój kod?

Czy bank 0 jest rownoznaczny Main RAM, np. w debuggerze Spin, czy Main RAM, to zawartość tego, co jest akurat aktywne?

Banki mają po 16kB, screen ma niecałe 7. Domyślam się że banki podłączane pod 16384 podmieniają RAM do 32767, w tym zmienne systemu i Basic. Czy tylko sam ekran?

Czy ta ostatnia mapa nad moim postem dotyczy tylko modeli +2 +3?

Tytuł: Odp: Tryb gigascreen
Wiadomość wysłana przez: Dalthon w 2018.03.25, 16:13:22
Czy to znaczy, że używając OUT 32765, 16 do 23 mogę załadować 2 screeny do przełączania pod 16384, przełączać tymi samymi wartościami i w ogóle nie przejmować się, że mogą wejść na mój kod?
tak - tzn. że możesz przełączać 2 screeny ale pod 16384 jest tylko jeden - ten z bank 5, drugi jest pod adresem 49152 (bank 7). Oczywiście jeśli przełączysz na bank 5, to wyświetlany będzie z 16384 ale dane od 16384-32767 będą identyczne z 49152-65535

Czy bank 0 jest rownoznaczny Main RAM, np. w debuggerze Spin, czy Main RAM, to zawartość tego, co jest akurat aktywne?
nie używam debuggera Spina więc nie potwierdzam ale podejrzewam że raczej bank 0...

Banki mają po 16kB, screen ma niecałe 7. Domyślam się że banki podłączane pod 16384 podmieniają RAM do 32767, w tym zmienne systemu i Basic. Czy tylko sam ekran?
nie... nie... nie... tak jak pisałem zmiana banków dotyczy adresów pamięci 49152-65535 (w standardzie, bo o special mode nie mówimy). W zależności od ustawienie bitu 3 wyświetla się obraz z 16384-23295 lub 49152-56063 (bank7). Zmienne systemowe, BASIC czy bufor drukarki jest na swoim niezmiennym miejscu.

Czy ta ostatnia mapa nad moim postem dotyczy tylko modeli +2 +3?
tylko +2a i +3 - bo już +2 ma standardową mapę 128K
Tytuł: Odp: Tryb gigascreen
Wiadomość wysłana przez: trojacek w 2018.03.25, 17:47:19
Uprzedziłeś moją odpowiedź :) A co do special mode, to nie mieszaj chłopakowi i mówimy tutaj o rozwiązaniach kompatybilnych ze wszystkimi modelami 128K :)

Jak dobrze, że Cię tu mamy na forum :) Mogłem się bez nerwów oddać długiemu spacerowi po Madrycie. No ale teraz... Muszę to napisać. Po prostu muszę.
+2a/b i +3 nie są do końca zgodne z toastrakiem i szarakiem. Dość istotną różnicą - bardziej w przypadku dem niż gier - jest fakt, że inne banki są contended. W toastracku i szaraku contended są 1, 3, 5 i 7. W nowszych - nie pamiętam, ale jest to inna kombinacja. Można sobie wyobrazić, co się zacznie dziać, gdy w pamięci contended odpali się kod robiący jakieś sztuczki na obrazie... Piszę z telefonu, więc nie chce mi się guglać po szczegóły, ale na WoS jest wszystko ładnie opisane.
Tytuł: Odp: Tryb gigascreen
Wiadomość wysłana przez: Dalthon w 2018.03.25, 21:41:14
No ale teraz... Muszę to napisać. Po prostu muszę.
+2a/b i +3 nie są do końca zgodne z toastrakiem i szarakiem. Dość istotną różnicą - bardziej w przypadku dem niż gier - jest fakt, że inne banki są contended.
ale nikt nie pisał że są zgodne :) mowa była o mapie banków :D Z racji na zróżnicowanie które banki są contended a które nie w konkretnym modelu, nikt kodu "wrażliwego" na ten fakt nie trzyma w innym banku niż 2 czy 0.