Autor Wątek: ULA ZX Spectrum 48 i jej możliwości oraz wpływ na procesor i wykonanie programu  (Przeczytany 9911 razy)

trojacek

  • *****
  • Wiadomości: 6831
  • Miejsce pobytu:
    Warszawa
Jednak nie:

Cytuj
1.    If the port address being accessed has its low bit reset, the ULA is required to supply the result, which leads to a delay if it is currently busy handling the screen.

Też tak na początku zrozumiałem.
Ale pomiędzy twierdzeniami 1. i 2. zachodzi relacja "AND" ;)
Chyba, że "delay" z punktu 2. jest dodatkowy, po "delay" z punktu 1.

Phonex

  • *****
  • Wiadomości: 1260
  • Miejsce pobytu:
    Warszawa
Obawiam się że w ostatnim zdaniu masz rację.

Może AY charczy, bo musi obsłużyć kilka kanałów?

trojacek

  • *****
  • Wiadomości: 6831
  • Miejsce pobytu:
    Warszawa
AY charczy, bo z częstotliwością pseudolosową ma blokowany zegar, który napędza syntezator przebiegów (w 3 kanałach, ale nie ma to znaczenia, bo są obsługiwane równolegle) i "czysty" dźwięk jest modulowany (jednopołówkowo, dyskretnie, FM) "bzyczeniem" pochodzącym z wszystkich dostępów do pamięci "obrazu" (konkretnie - contended RAM) uskutecznianych przez procesor, co w przypadku np. BASIC-a oznacza składową 50 Hz (aktualizacja zmiennej FRAMES) plus wszystko, co jest na ekranie wyświetlane... To taki odpowiednik śnieżenia z oryginalnym chipem HAL (bez unrainera).

Jakbyś miał 50 okresów na sekundę, to też byś charczał - parafrazując stary kawał ;)
« Ostatnia zmiana: 2016.09.30, 19:26:42 wysłana przez trojacek »

Phonex

  • *****
  • Wiadomości: 1260
  • Miejsce pobytu:
    Warszawa
Śnieżenie to kolejny błąd ULA.
Nie jest specjalnie przydatny, został użyty w jednej grze (Vectron).
Po załadowaniu do rejestru I wartości z zakresu 64 - 127, ULA wyświetla zamiast danych z kolejnego adresu - dane z adresu gdzie młodszy bajt jest zastąpiony przez R (rejestr odświeżania). Powoduje to efekt śnieżycy w okolicy wyświetlonych na ekranie treści. Na pustym ekranie nie widać nic.
Dzieje się tak bo ULA "zapomina" wstrzymać procesor, a ten chce odświeżać pamięć.

W emulatorze ZX Spin można włączyć ten efekt.

« Ostatnia zmiana: 2016.10.01, 10:52:27 wysłana przez Phonex »

trojacek

  • *****
  • Wiadomości: 6831
  • Miejsce pobytu:
    Warszawa
Hmm, Chris Smith opisuje to zjawisko trochę inaczej, choć podstawowe fakty się zgadzają.

http://www.zxdesign.info/dynamicRam.shtml

Maryjan

  • *****
  • Wiadomości: 6650
  • Miejsce pobytu:
    Skarżysko-Kam.
  • Scotch whiskey and West Highland Terrier
Może da się wykorzystać ten niezamierzony błąd w opracowaniu "efektu deszczu" o jakim to Tygrys zapoczątkował jeden z wątków na forum :)
"Co miałem powiedzieć - przeczytałem..." Nikodem Dyzma

trojacek

  • *****
  • Wiadomości: 6831
  • Miejsce pobytu:
    Warszawa
Zasugerowałem to już jakiś czas temu, ale byłby to efekt deszczu padającego poziomo ;)
A poza tym chyba wystarczy włączyć IM2 z wektorem ustawionym na pamięć contended (#4000-#7FFF).

Phonex

  • *****
  • Wiadomości: 1260
  • Miejsce pobytu:
    Warszawa
Może da się wykorzystać ten niezamierzony błąd w opracowaniu "efektu deszczu" o jakim to Tygrys zapoczątkował jeden z wątków na forum :)

Da się. Ostatnie miejsce gwarantowane :P

Maryjan

  • *****
  • Wiadomości: 6650
  • Miejsce pobytu:
    Skarżysko-Kam.
  • Scotch whiskey and West Highland Terrier
Oj tam, zawsze możne postawić monitor bokiem :)
"Co miałem powiedzieć - przeczytałem..." Nikodem Dyzma

matofesi

  • *****
  • Wiadomości: 2048
  • Miejsce pobytu:
    Toruń/Poland
A poza tym chyba wystarczy włączyć IM2 z wektorem ustawionym na pamięć contended (#4000-#7FFF).

O ile pamiętam to nawet nie trzeba włączać IM2. Wystarczy załadować do I wartość między #40 a $7F. I jest wystawiane na szynę adresową podczas refresha pamięci razem z R, które jest cyklicznie inkrementowane. I to właśnie wystawienie przez procesor pary IR na szynę adresową powoduje, że ULA dziczeje ;)

Phonex

  • *****
  • Wiadomości: 1260
  • Miejsce pobytu:
    Warszawa
O ile pamiętam to nawet nie trzeba włączać IM2. Wystarczy załadować do I wartość między #40 a $7F.
To właśnie napisałem
Po załadowaniu do rejestru I wartości z zakresu 64 - 127, ULA wyświetla ...

Okazuje się, że nie jestem wiarygodny >:(
Ewentualnie piszę nieprzejrzyście...

trojacek

  • *****
  • Wiadomości: 6831
  • Miejsce pobytu:
    Warszawa
Okazuje się, że nie jestem wiarygodny >:(
Ewentualnie piszę nieprzejrzyście...

Opcja nr 2!
Albo nr 3 - ja piszę nieprzejrzyście ;)

matofesi

  • *****
  • Wiadomości: 2048
  • Miejsce pobytu:
    Toruń/Poland
Ewentualnie piszę nieprzejrzyście...

Nie. Po prostu po raz kolejny okazuje się, że nie powinienem się publicznie odzywać w poniedziałki przed przynajmniej drugą kawą ;)

Gryzor

  • *****
  • Wiadomości: 2009
  • Miejsce pobytu:
    Warszawa
I to jest chyba jedyny sprzetowy efekt specjalny na ZX. Inne mozna uzyskac tylko przez drobne zwarcie  :D

Phonex

  • *****
  • Wiadomości: 1260
  • Miejsce pobytu:
    Warszawa
Jest jeszcze jeden niezamierzony efekt związany z ULA - floating bus.
Odczyt z nieistniejącego portu (np. 255) daje czasem bajt z ekranu, gdy zbiegnie się w czasie z odczytem pamięci ekranu przez ULA. Można wykorzystać do synchronizacji: przy sprytnej konstrukcji ekranu, można sprawdzić którą część ekranu właśnie "rysuje" ULA, albo co najmniej wykryć dojście do konkretnego punktu.
Efekt użyty m.in w Arkanoid i Cobra, nie występuje na Timexach, więc programy używające go nie będą poprawnie działać na nich.
Szczegóły wraz z programem testowym http://ramsoft.bbk.org.omegahg.com/floatingbus.html#FLOATINGBUS.