Autor Wątek: MULTI-SCROLL demo (ZX81 16K + AY)  (Przeczytany 5458 razy)

YERZMYEY/HOOY-PROGRAM

  • *****
  • Wiadomości: 1187
  • Miejsce pobytu:
    Rubber Planet
  • AY RIDERS
    • ZX Spectrum demos/games
MULTI-SCROLL demo (ZX81 16K + AY)
« dnia: 2012.04.09, 16:56:24 »
Oto:
http://zx81.republika.pl/MS.P



Zrobienie płynnego scrollera na ZX81 technicznie powinno być niemożliwe, ale oczywiście da się. ;)
Gość robi trochę w stylu ESI - zaczyna od tradycyjnego, co 8 pixeli, potem trochę płynniejszy, i tak dalej, aż do scrollera po jednym pixelu. :)

W dodatku w rozdzielczości coś jak 320x240.

Jeśli ktoś ma tylko RamPack, ale bez AY, to kawałek w MP3 jest też tu:
http://chipmusic.org/yerzmyey/music/square-disco-zx81---timex-1000---timex-1500

Pozdrrr.
Y

YouTube: http://www.youtube.com/watch?v=iYoZxVTWJMU
« Ostatnia zmiana: 2012.04.09, 23:12:19 wysłana przez YERZMYEY/HOOY-PROGRAM »

matofesi

  • *****
  • Wiadomości: 1966
  • Miejsce pobytu:
    Toruń/Poland
Odp: MULTI-SCROLL demo (ZX81 16K + AY)
« Odpowiedź #1 dnia: 2012.04.12, 13:29:25 »
Cytuj
Zrobienie płynnego scrollera na ZX81 technicznie powinno być niemożliwe, ale oczywiście da się. ;)

A to niby czemu? To, że grafikę hi-res robi procesor oznacza tylko tyle, że nic innego już w tym czasie nie jest w stanie zrobić. Ale nie widzę absolutnie żadnych przeszkód, które miałyby nie pozwolić na zrobienie płynnych efektów graficznych - po prostu procedury do tego potrzebne będą dość skomplikowane i całość jest istotnie ograniczona rozmiarem pamięci, ale poza tym jak najbardziej się da.

YERZMYEY/HOOY-PROGRAM

  • *****
  • Wiadomości: 1187
  • Miejsce pobytu:
    Rubber Planet
  • AY RIDERS
    • ZX Spectrum demos/games
Odp: MULTI-SCROLL demo (ZX81 16K + AY)
« Odpowiedź #2 dnia: 2012.04.12, 13:36:39 »
A to niby czemu?

No chyba żartujesz. A skądże ja miałbym to wiedzieć? Wiem tyle, co mnie nauczą. Że w trybie textowym powinno to nie działać.

Proponuję przeczytać opis samego autora, może okaże się, że obaj mówicie o tym samym:

__________________________________________________________
A bit about the demo.

'Text only' demo for 16K ZX-81. So why only a text mode ?
Well not all ZX81's have been converted to do Hi-res
graphics so i wanted to try to demostrate that *some*
pixel position manipulation can be possible in text mode
only. The main problem been, that generating text on the
ZX81 is a finely tuned ballet between hardware and
software, during video generation special harware in the
ULA, detects if the memory byte that the CPU is request-
ing during the M1 fetch cycle should be treated as a
video byte, if so then the ULA latches the memory byte
and then forces all the data lines low, the CPU see's the
low data lines and interprets it as a NOP instruction,
during the latter half of the M1 fetch cycle (the refresh
phase) the ULA manipulates the address lines (A0 thru A8)
using bits 0-5 of the byte latched earlier for A3 thru A8
and a special internal counter for A0 tru A2, this inter-
nal counter detemines which of 8 bytes of the character
map data to use for that scanline, the internal counter
is reset by the Vertical syncronisation pulse in the video
signal, and is incremented by the Horizontal pulse in the
video signal, we have no other way to interact with this
counter. It has long been know that we can do a smooth
horizontal scroller 2 pixels at a time ( 1 cpu clock cycle
= 2 pixels ) by manipulating the number of clock cycles
used before *executing* video bytes: so we might add 3
cycles = a shift to the right of 6 pixels, then on the next
frame add 2 cycles = a shift to the right of 4 pixels and
so on, horizontal smooth scrolling made easy... But
vertical smooth scrolling is a little harder, we need to
find a way to reset the internal line counter, which we
know is reset by the Vertical syncronisation pulse, however
on ZX81 the Vsync is under software control :-) so it now
becomes a case of sticking a very short Vsync (11 clock
cycles) into the video signal but there is a catch, it has
to be done during the Horizontal sync pulse or else servere
display disruption occurs, so again we have to time this
short Vsync to happen during a window of just 16 clock
cycles. by adding this trick to the scanline imediatly
before the text lines we can be sure that the internal line
counter is set correctly for the genration of each row of
text. Then the next problem is how do we fit all of this
into the 207 cycles we have for each scanline? of course
it's not calculated on the fly there simply is not enough
spare cpu cycle to do that, so the entire display on a
scanline by scanline basis is calculated before hand and the
address of each succesive scanline is added to a Virtual
machine stack, only just before the video is to be genrated,
when all interrupts are disabled is the SP made to point
at this stack, the first scanline address is popped and
jumped to the rest happens like magic :-) well not really,
but each scanline of data ends with either a RET or a RET Z
(for timing purposes) which will of course return ( or jump
to the next scanlines data) finnally a *real* return address
is on the stack and our code once again take control and
restores the original SP before continuing with normal
code execution. OF course the real trick in this demo is
to have multiple TEXT lines moving at various rates
overlapping at times all without destroying the effect.
Andy Rea
__________________________________________________________

matofesi

  • *****
  • Wiadomości: 1966
  • Miejsce pobytu:
    Toruń/Poland
Odp: MULTI-SCROLL demo (ZX81 16K + AY)
« Odpowiedź #3 dnia: 2012.04.12, 13:47:53 »
A to niby czemu?

No chyba żartujesz. A skądże ja miałbym to wiedzieć? Wiem tyle, co mnie nauczą. Że w trybie textowym powinno to nie działać.

Proponuję przeczytać opis samego autora, może okaże się, że obaj mówicie o tym samym:

Ale tu nie ma czego czytać... Jeśli da się zrobić hi-res to da się w nim robić animacje. Chodzi po prostu o to, że zamiast procedury biorącej dane z jakiegoś miejsca w pamięci i generują statyczną klatkę na ekranie i drugiej procedury generującej scrollera czy inne efekty robisz po prostu jedną bardziej skomplikowaną, która scrollera robi "w biegu" tworząc grafikę hi-res.

Ok. Przeczytałem... Gość robi to sprytnie - modyfikuje standardową procedurę dodając extra opóźnienia albo resetując liczniki. W efekcie robi scroll w trybie tekstowym ale przesuwa pozycję tego, co się na ekranie wyświetla. Dzięki temu nie wymaga ram-packa modyfikowanego do działania z hi-resem ale za to nie robi prawdziwego graficznego scrollera. Ale tym bardziej jest to wyjątkowo sprytne :) I to właśnie jest największym atutem tego demka.

A to, że wydaje ci się, że rozdzielczość jest większa - ZX81 ma tak na prawdę większą niż 256x192 potencjalną rozdzielczość. Jak się odpowiednio przesunie liczniki to powierzchnia ekranu się przesunie na border. A jakby się dało (nie sądzę, żeby technicznie było to możliwe - prawdopodobnie zabraknie czasu w linii) odpowiednio przygotować procedurę to faktycznie powinno się dać zrobić hi-res w większej niż normalna rozdzielczości.


YERZMYEY/HOOY-PROGRAM

  • *****
  • Wiadomości: 1187
  • Miejsce pobytu:
    Rubber Planet
  • AY RIDERS
    • ZX Spectrum demos/games
Odp: MULTI-SCROLL demo (ZX81 16K + AY)
« Odpowiedź #4 dnia: 2012.04.12, 14:05:11 »
MAT:

> Ok. Przeczytałem... Gość robi to sprytnie - modyfikuje standardową procedurę dodając extra opóźnienia albo resetując liczniki. W efekcie robi scroll w trybie tekstowym ale przesuwa pozycję tego, co się na ekranie wyświetla. Dzięki temu nie wymaga ram-packa modyfikowanego do działania z hi-resem ale za to nie robi prawdziwego graficznego scrollera. Ale tym bardziej jest to wyjątkowo sprytne :) I to właśnie jest największym atutem tego demka.
-------------
No widzisz, nie było tak strasznie. :)


> A to, że wydaje ci się, że rozdzielczość jest większa - ZX81 ma tak na prawdę większą niż 256x192 potencjalną rozdzielczość. Jak się odpowiednio przesunie liczniki to powierzchnia ekranu się przesunie na border. A jakby się dało (nie sądzę, żeby technicznie było to możliwe - prawdopodobnie zabraknie czasu w linii) odpowiednio przygotować procedurę to faktycznie powinno się dać zrobić hi-res w większej niż normalna rozdzielczości.
-------------------
W istocie, da się. 320x240 to maxymalna rozdzielczość do dzisiaj osiągnięta na ZX81w programie MaxDemo, którego autorem jest Bodo Wenzel.
Program wyśtwiela obraz w w/w rozdzielczości z towarzyszeniem dodatkowych dwóch efektów ruchomych: płynne przechodzenie z trybu tekstowego w graficzny (hires) jak również fruwające wektory.

matofesi

  • *****
  • Wiadomości: 1966
  • Miejsce pobytu:
    Toruń/Poland
Odp: MULTI-SCROLL demo (ZX81 16K + AY)
« Odpowiedź #5 dnia: 2012.04.12, 14:08:49 »
Ogólnie po przeczytaniu paru doców na temat ZX81 uważam, że konstrukcja jak na tamte czasy była po prostu genialna a to, co z nią można zrobić jak się dorzuci RAMu i zakombinuje z programem może być na prawdę wypasione. Gdyby nie to, że nie ma przyzwoitego emulatora ZX81 na linuksa to może nawet spróbowałbym coś zakodować ;)

YERZMYEY/HOOY-PROGRAM

  • *****
  • Wiadomości: 1187
  • Miejsce pobytu:
    Rubber Planet
  • AY RIDERS
    • ZX Spectrum demos/games
Odp: MULTI-SCROLL demo (ZX81 16K + AY)
« Odpowiedź #6 dnia: 2012.04.12, 18:10:26 »
Wiesz co, zadałem pytanie na odnośnym forum
http://www.rwapservices.co.uk/ZX80_ZX81/forums/the-best-zx81-emulator-for-linux-t831.html
ale na razie chyba średnia dla Ciebie odpowiedź.
Myślę jednak, że warto śledzić ów wątek.

matofesi

  • *****
  • Wiadomości: 1966
  • Miejsce pobytu:
    Toruń/Poland
Odp: MULTI-SCROLL demo (ZX81 16K + AY)
« Odpowiedź #7 dnia: 2012.04.12, 18:26:33 »
Pośledzę. Ale eightyone pod wine'm mam przećwiczone. Działa. Tyle, że to jest wine - emulator pod emulatorem. Nie da się sensownie z command line'a odpalić emulatora żeby załadował i uruchomił tapa. A to znaczy, że nie da się stworzyć normalnego makefile'a i używać standardowego procesu tak jak to robię z fuse w wypadku Spectrum. Ale nic to... jak mnie bardziej najdzie to może się przemogę ;)

YERZMYEY/HOOY-PROGRAM

  • *****
  • Wiadomości: 1187
  • Miejsce pobytu:
    Rubber Planet
  • AY RIDERS
    • ZX Spectrum demos/games
Odp: MULTI-SCROLL demo (ZX81 16K + AY)
« Odpowiedź #8 dnia: 2012.04.12, 22:42:41 »
No niestety, ci ludzie wiedzą, co mówią, więc z wątku wynika jednoznacznie: "eightyone under wine". :(