njn, nostalgia, diky :)
K tej pamati, mozno by sa hodilo spomenut aky sposobom bola "pomalsia". Z hladiska procesoru bola stale rovnako rychla, len v okamihoch ked sa ULA a Z80 dostali do kolizie na adresnej zbernici pre rozsah 4000-4FFF, tak zastavila procesoru hodiny, cize procesor ani tak nezpomaloval ale skor vynechaval. Preto boli kriticke rutiny mimo video pamat. Ak totiz do tejto pamati ukazoval aj citac instrukcii, tak zmeny v casovani sa stavali dost nepredvidatelne.
no ano, ale potom tam mame LDIR a podobne instrukce, ktere vlastne porad (?) nacitaji svuj opkod, jestli to chapu dobre (proto jsou nerychle), tam se R taky zvysuje nebo cykluje?
(hmm vlastne si to vyzkousim v debuggeru, ale lidi od speccy o tom kdysi mluvili jako o nejake magii - sam jsem spis opravdu atarista, tam takove vychytavky jako DRAM nemame ;)
no,
LDI vykona tmp := (hl), (de) := tmp, de += 1, hl += 1, bc -= 1, xf := [tmp + a].1, yf = [tmp + a].3
LDIR vykona LDI, a ak je bc rozne od nuly, tak nastavi pc sam na seba (dekrementuje ho o 2). Je to vlastne blokove kopirovanie pamati src adresa v HL, dst adresav DE, pocet bajtov ktore sa skopiruju je v BC.
LDD a LDDR robia v podstate to iste len sa HL a DE dektementuju, cize sa kopiruje pospiatky.
A ano R sa inkrementuje, PC sa znizi o 2 a nacita sa znova LDIR.
Pomale su preto ze zastresuju viacero operacii, ked sa to ale rozpise do instrukcii, tak je to stale rychlejsie.
Ked tak je to dobre vysvetlene v knizke Bity do bytu, L. Zajicek strana 51.
8. 2. 2023, 19:01 editováno autorem komentáře
V kapitole The R Register je to popsáno: https://worldofspectrum.org/faq/reference/z80reference.htm
Více detailů zde ;-)
http://www.visual6502.org/JSSim/expert-z80.html
https://www.righto.com/2014/10/how-z80s-registers-are-implemented-down.html
https://github.com/gdevic/Z80Explorer
Přesně - byl rozdíl mezi tím, jestli program ze zpomalené paměti jen bere data, nebo jestli v ní program běží.
Během zpracování každé instrukce Z80 sáhne do RAM i několikrát. Běží-li program ve zpomalené RAM, tak běží "nepravidelně" a výkonově to velmi zhruba odpovídá 2.5 MHz? Nějak tak... rozhodně nevhodné i pro pípnutí na speaker.
Ale když program do zpomalené RAM jen sahá pro data, tj. většina přístupů do RAM (čtení instrukcí a jejich operandů) je stále v rychlé, tak se ze zpomalené RAM dají přehrávat i audio samply. Zpomalení se na zvuku projeví, zní to trochu zkresleně, ale není to katastrofa. V případě mnoha konverzí Amiga MODů pro DA převodník to taky jinak nejde, protože ZXS128k má zpomalených 64kB (čtyři 16k stránky, do dvou je mapovaná videoram) a 64kB je na samplovanou hudbu málo.
Zpomalení však neznamená, že by se tam programy neumísťovaly. Musely, ZX Spectrum 16k jinou než zpomalenou RAM nemá, celá RAM, kterou má k dispozici je právě jen těch zpomalených 16kB od 16384 do 32767. Všechno pípání se tak musí řešit využitím podprogramů v ROM (stejně jako LOAD, SAVE a jiné časově náročné věci).
Velký chaos do toho pak vnesl Amstrad se svými modely +2A, +2B, +3, které mají zpomalené jiné paměťové stránky než originální ZXS 128k+ toastrack a šedá 128k +2 (která má sice taky cedulku Amstrad, ale konstrukčně se shoduje se 128k+ toastrack).