forum speccy.pl
ZX Spectrum => PROGRAMOWANIE => Wątek zaczęty 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
-
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.
-
@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
-
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.
-
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.
-
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
-
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 ;)
-
... 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
-
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
-
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
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
-
zestawienie:
Niestety w tej tabelce wiele brakuje, na dodatek są błędy. Specjalnie bym na niej nie polegał.
-
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ą.
-
A czy Sam Coupe potrafi ustawić CPU w tryb 3,5MHz? Bo jeśli nie, to timingi nie mają większego znaczenia.
-
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.
-
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.
-
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).
-
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.
-
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 ;)
-
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.