forum speccy.pl

ZX Spectrum => PROGRAMOWANIE => Wątek zaczęty przez: gorgh w 2018.08.06, 16:13:11

Tytuł: Timingi 48K, 128K i klonów
Wiadomość wysłana przez: gorgh w 2018.08.06, 16:13:11
a tak przy okazji mam pytanie:
Ile cykli ULA zabiera Z80 przy rysowaniu ekranu?
ANTIC potrafi zabrać do 30% cykli 6502 :O
Tytuł: Odp: Timingi 48K, 128K i klonów
Wiadomość wysłana przez: Dalthon w 2018.08.08, 12:00:21
Ile cykli ULA zabiera Z80 przy rysowaniu ekranu?
ze mnie żaden teoretyk ino praktyk, co to robi coś bo tak trzeba a do końca nie wie dlaczego (pozostałości z lat 88-91 gdy nie miałem dostępu do żadnej literatury - a teraz tak mi zostało:P)
ale samo wyświetlanie obrazu jest stałe i ilość dostępnych cykli na ramkę jest stała i zależy od modelu:
48kB - 69888 T
128kB/+2/+2A/+3 - 70908 T
No chyba że coś namieszałem ale pewnie mnie wtedy mądrzejsi ode mnie poprawią :)

Najprostszym sprawdzaniem czy się efekt "wyrabia w ramce" jest puszczenie tego w pętli:

time:
      xor a ; czyli ld a,0 - black
      out (254),a

      call efekt

      ld a,2 ; red
      out (254),a
      halt
      jp time

Na borderze widać ile czasu w ramce zabiera efekt.
Tytuł: Odp: Timingi 48K, 128K i klonów
Wiadomość wysłana przez: matofesi w 2018.08.08, 12:21:48
@Dalthon oczywiście masz rację. I oczywiście w czasach braku dokumentacji też się kombinowało na oko, żeby się spasować i zmieścić gdzie trzeba ;)

Dokumentacja ułatwia liczenie taktów jak chcesz zrobić coś bardzo precyzyjnego - jakiś multicolor albo efekty na borderze. Kiedyś była to żmudna praca metodą prób i błędów, teraz jest to żmudne liczenie taktów i sprawdzanie z dokumentacją ;) Ale przynajmniej teraz wiem jak to działa i dlaczego tak się dzieje :D
Tytuł: Odp: Timingi 48K, 128K i klonów
Wiadomość wysłana przez: trojacek w 2018.08.08, 12:22:40
48kB - 69888 T
128kB/+2/+2A/+3 - 70908 T
No chyba że coś namieszałem ale pewnie mnie wtedy mądrzejsi ode mnie poprawią :)

Z tego co wiem, jest dokładnie tak, jak napisałeś.
• W 48K linia ma 224T, co po przemnożeniu przez 312 linii = 69888T (T = 1/3,500000MHz = około 285,7ns).
Zatem linia zajmuje 285,7ns * 224T = około 64 mikrosekundy.
Cały obraz zajmuje 285,7ns * 69888T = około 19,97 milisekundy, czyli częstotliwość odświeżania = 1/19,97ms = około 50,07Hz.

• W 128K linia ma 228T, co po przemnożeniu przez 311 linii = 70908T (T = 1/3,546900MHz = około 282ns).
Zatem linia zajmuje 282ns * 228T = około 64,3 mikrosekundy.
Cały obraz zajmuje 282ns * 70908T = około 19,99 milisekundy, czyli częstotliwość odświeżania = 1/19,99ms = około 50,02Hz.

Pisząc "linie" miałem na myśli linie obrazu PAL, a nie cokolwiek związanego z rozdzielczością Spectrum. Oczywiście front, porch i sync (pion) to też są "linie", chociaż nie są wyświetlane.
Tytuł: Odp: Timingi 48K, 128K i klonów
Wiadomość wysłana przez: ZbyniuR w 2018.08.08, 14:09:30
A ja myślałem że modele 128k oraz szary +2, mają takie same timingi jak w 48k.
Dopiero kolejne wersje +2 i +3 mają to zmienione.
Tytuł: Odp: Timingi 48K, 128K i klonów
Wiadomość wysłana przez: KWF w 2018.08.08, 14:21:17
ZbyniuR: właśnie timingi są jedną z głównych różnic pomiędzy 48K a 128K. Możesz sobie rozszerzyć 48K nawet z bankowaniem pamięci, ale zmiana timingów to już inna para kaloszy. Wynikają one z taktowania zegara oraz budowy ULA. Poza tym na 128K efekt "dot crawlingu" nie jest widoczny, a w 48K może doprowadzić do szewskiej pasji.

Timingi oraz proces generowania syngalu w ZX Spectrum zostal opisany tu: http://www.zxdesign.info/horiztiming.shtml i tu: http://www.zxdesign.info/portContention3.shtml
Tytuł: Odp: Timingi 48K, 128K i klonów
Wiadomość wysłana przez: matofesi w 2018.08.08, 14:31:18
Timingi oraz proces generowania syngalu w ZX Spectrum zostal opisany tu: http://www.zxdesign.info/horiztiming.shtml

A całą książkę można zassać tu: https://drive.google.com/open?id=0ByXfOBO9GGCacDBxUGYtbnl1MEU
(http://www.speccy.pl/forum/index.php?topic=3247.msg47795 tutaj link do wątku dla wyjaśnienia ewentualnych wątpliwości)

To tam dokładnie opisane jest jak ULA działa. I jeśli nawet ktoś nie specjalnie bawi się w programowanie to moim zdaniem warto książkę przeczytać choćby dla ogólnego zapoznania się z tym co w środku bzyczy ;)
 
Tytuł: Odp: Timingi 48K, 128K i klonów
Wiadomość wysłana przez: KWF w 2018.08.08, 14:35:58
... warto książkę przeczytać choćby dla ogólnego zapoznania się z tym co w środku bzyczy ;)

W srodku bzycza nie programy i UrszuLA a … przetwornica :P
Tytuł: Odp: Timingi 48K, 128K i klonów
Wiadomość wysłana przez: trojacek w 2018.08.08, 14:43:57
ZbyniuR: właśnie timingi są jedną z głównych różnic pomiędzy 48K a 128K.

Jest jeszcze gorzej. W toastracku/szaraku zmieniono timingi względem 48K, ale potem Amstrad wprowadził kolejną modyfikację w +2A/B i +3. Co prawda przesunął jedynie moment generowania IRQ względem początku ramki, ale to wystarcza, by się rozjeżdżały różne fajne efekty.
W ten sposób, z punktu widzenia koderów, powstały trzy zasadnicze platformy:
• 16K/48K, czyli gumiak i plusik,
• 128K toastrack/szarak,
• 128K Amstrad (+2A/+2B/+3).

Demo, efekt borderowy, multikolor itp. musi być oddzielnie przeliczany dla każdej platformy.
Rosjanie skomplikowali sobie życie jeszcze bardziej, wprowadzając jeszcze inne timingi w Pentagonie i nieco poprawione (ale dalej niezgodne z czymkolwiek) w Scorpionie.

Do tego dochodzą Timexy TC2xx8 z timingami "niemal" gumiakowymi (niestety rysowanie ekranu zaczyna się nieco wcześniej...) oraz wszelkie odmiany Sinclair/Timex działające w systemach 60Hz, tu już się nic nie zgadza z "normą" :D
Tytuł: Odp: Timingi 48K, 128K i klonów
Wiadomość wysłana przez: KWF w 2018.08.08, 14:51:28
Aby calosc byla w jednym miejscu zestawienie:

Maker           Spectrum    Spectrum    Spectrum    Timex        Timex
  Version         16K/48K/+   128/+2      +2A/+3      TC2048/2068  TS2068
  CPU Osc         14.000MHz   17.73447MHz ?           ?            14.112MHz
  Color Osc       4.4336MHz   CPU Osc/4   CPU Osc/n   ?            3.579545MHz
  CPU Clock       3.500000MHz 3.54690MHz  3.54690MHz  3.50000MHz   3.52800MHz
  PSG Clock       N/A         1.7734MHz   1.7734MHz   ? (if any)   1.764(75)?
  HorizontalTotal 224 clks    228 clks    228 clks    ?            224 clks
  HorizontalDraw  128 clks    128 clks    128 clks    128 clks     128 clks
  HorizontalBlank 96 clks     100 clks    100 clks    ?            ?
  Vertical Total  312 lines   311 lines   ?           ?            262 lines
  Screen          192 lines   192 lines   192 lines   192 lines    192 lines
  Upper Border    64 lines    63 lines    ?           ?            ?
  Lower Border    56 lines    56 lines    ?           ?            ?
  Frame Rate      50.08Hz/PAL 50.01Hz/PAL 50.?Hz/PAL  50.?Hz/PAL   60.11Hz/NTSC
  Flash Rate      50/32=1.6Hz 50/32=1.6Hz 50/32=1.6Hz 50/32=1.6Hz  60/32=1.9Hz
  First Delay at  14335 clks  ?           14361 clks  ?            ?
  Delay Pattern   6..1,0,0    ?           1,0,7..2    ?            ?
  Port FEh Delay  Yes         Yes         No          Yes          Yes
  VRAM Delay at   4000h-7FFFh RAM1,3,5,7  RAM4,5,6,7  4000h-7FFFh  4000h-7FFFh
  Snow Effect     Yes         Yes/Crash   ?           No?          Yes/No?

Oraz

Cytuj
Some Clones
The Russian Scorpion seems to have same timings as Spectrum 48K. The russian Pentagon has 320 lines total (64+192+48+16), and, it generates INT at begin of its 16-lines Vsync period (all other computers have INT at end of Vsync, aka begin of upper border). Horizontal total is 224 clks on both Pentagon and Scorpion, but hsync position is slightly different on each. Both Scorpion and Pentagon do not have slow (contended) memory.

zrodlo: http://problemkaputt.de/zxdocs.htm
 
Timingi w Pentagonie i Scorpionie sa opisane tu: http://www.worldofspectrum.org/rusfaq/#2
Tytuł: Odp: Timingi 48K, 128K i klonów
Wiadomość wysłana przez: trojacek w 2018.08.08, 18:10:25
zestawienie:

Niestety w tej tabelce wiele brakuje, na dodatek są błędy. Specjalnie bym na niej nie polegał.
Tytuł: Odp: Timingi 48K, 128K i klonów
Wiadomość wysłana przez: ZbyniuR w 2018.08.08, 18:48:10
A czy w Samie timingi są do czegoś podobne, czy jeszcze inne?

Bo już myślałem że gorzej niż w CPC z rodzajami timingów (CRTC) to nigdzie nie mają.
Tytuł: Odp: Timingi 48K, 128K i klonów
Wiadomość wysłana przez: trojacek w 2018.08.08, 19:16:31
A czy Sam Coupe potrafi ustawić CPU w tryb 3,5MHz? Bo jeśli nie, to timingi nie mają większego znaczenia.
Tytuł: Odp: Timingi 48K, 128K i klonów
Wiadomość wysłana przez: ZbyniuR w 2018.08.08, 20:59:30
Nie miałem tego w rękach, ale podobno potrafi się przełączać na 3.5MHz, po podłączeniu jakiegoś ekstra ROMu, w trybie emulacji 48K.

Ta kompatybilność była jednym z ważniejszych haseł reklamowych tej maszyny.
Tytuł: Odp: Timingi 48K, 128K i klonów
Wiadomość wysłana przez: trojacek w 2018.08.08, 21:38:22
Może któryś z lokalnych speców od Sama wie coś więcej, ja tylko słyszałem o emulatorze, który programowo spowalnia procesor, by dopasować szybkość wykonywanego kodu do ZX Spectrum. A ROM 48K to trzeba sobie samemu załatwić i dograć do emulatora.
Co by oznaczało, że można zapomnieć o oglądaniu spectrumowych demek na tym sprzęcie. Pozostaje oczywiście soft tworzony specjalnie dla Sama.
Tytuł: Odp: Timingi 48K, 128K i klonów
Wiadomość wysłana przez: matofesi w 2018.08.09, 10:37:41
Sam w trybie graficznym "Spectrum" automatycznie spowalnia procesor do ~3.5 MHz, ale timingi oczywiście nijak się mają do wszystkich innych wersji.

Kompatybilność "emulatorów" była tam nastawiona głównie na gry i raczej nikt nie planował odpalać wymagający dem ze Spectrum zwłaszcza, że poza prędkością procesora i zgodnością trybu graficznego trzeba by jeszcze emulować AY.

No i oczywiście ten tryb poza "emulowaniem" Spectrum w zasadzie do niczego innego się nie nadawał. Nie wiem czy jakiekolwiek natywne programy go używały. Jedyne inne "praktyczne zastosowanie" było takie, że jak się wciskało i trzymało reset to Sam zerował rejestry od grafiki i na ekranie pojawiała się zawartość zerowej strony w zerowym (czyli "spectrumowym") trybie graficznym (ale bez wyzerowanych rejestrów kolorów więc w dwóch kolorach zależnych od tego, co akurat było ustawione przez resetowany program).
Tytuł: Odp: Timingi 48K, 128K i klonów
Wiadomość wysłana przez: Sir David w 2018.08.09, 12:07:43
SAM nie spowalnia procesora, a jedynie w trybie graficznym zgodnym ze Spectrum wprowadza dodatkowe opóźnienia w czasie rysowania ekranu. I tu ważna uwaga: tylko w czasie rysowania właściwego ekranu graficznego, a nie ramki. Dlatego w czasie rysowania ramki linia ma więcej taktów procesora niż w czasie rysowania właściwego ekranu (to akurat dotyczy każdego trybu graficznego na SAMie powodując problemy przy odgrywaniu sampli, ale w MODE 1 różnica jest jeszcze większa). Powoduje to chyba największą niedogodność w emulowaniu ZX Spectrum na SAMie: muzyka na beeperze brzmi bardzo źle. Z tego co pamiętam (testy robiłem ze 350 lat temu), prędkość SAMa (ilość taktów procesora w ramce) przy emulacji ZX Spectrum jest większa niż modeli 128k, ale mniejsza niż Pentagona.
Tytuł: Odp: Timingi 48K, 128K i klonów
Wiadomość wysłana przez: matofesi w 2018.08.09, 12:20:05
Skoro wprowadza opóźnienia to znaczy, że jednak spowalnia ;)

Nie pamiętam, czy ASIC generuje zegar i jak ULA po prostu go zatrzymuje, czy robi to wystawiając jakieś waity dla procesora. Efekt jest jednak ten sam - w "trybie spectrum" prędkość jest na tyle zbliżona, że jeśli nie przeszkadza nam okropnie brzmiący dźwięk z beepera (faktycznie - o tym zapomniałem ;)) to da się pograć w Spectrumowe gierki.

Jako off-topiczną ciekawostkę z podwórka "emulowania" Spectrum na Samie powiem, że w swoim czasie zrobiłem własny "emulator" - kawałek kodu ustawiający odpowiednie tryby, pamięć, i odpalający ROM - nie pamiętam dokładnie jak zrobiłem kwestię wczytywania programów (na pewno coś wczytywał z dyskietki) natomiast dodałem "szukacz POKE'ów" i monitor. Dzięki temu udało mi się w tamtych czasach znaleźć POKE'i do kilku gier do których na prawdziwym Spectrum znaleźć miałem problemy ;)
Tytuł: Odp: Timingi 48K, 128K i klonów
Wiadomość wysłana przez: Sir David w 2018.08.09, 12:36:50
ASIC nie ingeruje w zegar. Gdyby to robił, dałoby się zrobić to spowolnienie lepiej. Sposób dodatkowego spowalniania w MODE 1 jest opisany bodaj w Technical Manual. Z tego co pamiętam, w co czwartym takcie jest wstawiany wait dla procesora, ale tylko w czasie rysowania ekranu.

Ja w "dawnych czasach" na SAMie grałem głównie w gry ze Spectrum i ten dźwięk mi trochę przeszkadzał, ale się z tym pogodziłem i przestałem zwracać uwagę. Tym bardziej po podłączeniu AY-greka i przerobieniu paru gier z 48k+AY żeby go obsługiwały. "Mój" emulator dla odmiany był przerobionym "Sam Tape 3" z LERM Software z dodaną między innymi możliwością automatycznego poprawienia portów na mój AY.