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

coberr

  • ***
  • Wiadomości: 138
  • Miejsce pobytu:
    Gorzów Wlkp
Postanowiłem założyć tego typu temat - ponieważ zawsze zastanawiało mnie - co własciwie sama ULA może Zrobić z całym systemem i jak może wpłynąć na zachowanie się samego procesora oraz wykonanie programu.
Czy specyficzne  Własciwosci ULI zostaly gdzies zebrane i dokładnie opisane?
(chodzi mi głownie o możliwosci pod kątem kruczków wykorzystywanych np. w niektorych demach, grach itp)
WIem , ze Sama ula moze wpłynać na procesor - np. Wstrzymać zegar itp... Jednak jakoś nigdy tego nie analizowałem :)
Czy moglibyscie sie wypowiedziec na ten temat? ( wiem, ze wazne są rózne zależnosci czasowe i w efekcie odpowieź samego układu - może warto zebrac tutaj to wszystko?)

trojacek

  • *****
  • Wiadomości: 6831
  • Miejsce pobytu:
    Warszawa
Chyba najwięcej informacji na ten temat znajdziesz na WOS-ie:

http://www.worldofspectrum.org/faq/reference/48kreference.htm

ZX Freeq

  • *****
  • Wiadomości: 1833
  • Miejsce pobytu:
    Warszawa
Całą "ULĘ" rozgryzł Chris Smith, i tak powstał SLAM, czyli zamiennik ULA. Poniżej jego książka, można kupić równiez na ebay itd

https://www.amazon.co.uk/ZX-Spectrum-Ula-Microcomputer-Computer/dp/0956507107
ZX80|ZX81+16kB+PandAY|ZX 48k/+/128k+/+2/+2A/+3/Vega/Next|QL+QIDE|JS128|Timex 2048+2040|UK2086|FDD3000+3.5''|AY|ZX HD|Divide2k11/2k14|DivMMC/PicoDivSD|BetaDisk 128|Opus|Masakrator FM|If 1/2/Microdrv|Multiface 1|+2A\B SDI-1|SJS 1/2|ZX Printer|TZXDuino|+3 HxC USB|ZXUno|Omni
Z88|A500/600|PC200|Ent128

coberr

  • ***
  • Wiadomości: 138
  • Miejsce pobytu:
    Gorzów Wlkp
o książce wiem ale chciałem poznać wasze opinie :)
Tak sobie ostatnio zastanawiałem się - czy nie stworzyć małej hybrydy - czyli spectrum (funkcjonalny odpowiednik) oraz COBRY.
WIem, ze niektóre dema i programy wykorzystują specyficzne własciwości ULI tylko nie wiem - jakie . Może Wy podpowiecie :)
« Ostatnia zmiana: 2016.09.30, 11:24:59 wysłana przez coberr »

Tygrys

  • Administrator
  • *****
  • Wiadomości: 4537
  • Miejsce pobytu:
    Warszawa
  • mistrz ceremonii
Wstrzymywanie procesora zachodzi wtedy, kiedy ULA i procesor chcą mieć dostęp do tego samego obszaru pamięci.
To raczej w niczym nie pomaga, wręcz utrudnia robienie efektów i nadążanie za rastrem.

Pozbawiona 'contention memory' jest rodzina klonów bazująca na Pentagonie. To co można dzięki temu zrobić pokazują ostatnie dema, w których można 'usunąć ramkę' i robić efekty na pełnym ekranie, do tego w pełni sterowalny multicolor (kolory 8x1 jak w Timexie) i itp

trojacek

  • *****
  • Wiadomości: 6831
  • Miejsce pobytu:
    Warszawa
Wstrzymywanie procesora zachodzi wtedy, kiedy ULA i procesor chcą mieć dostęp do tego samego obszaru pamięci.

Nie tylko wtedy. Również w sytuacji używania parzystych adresów I/O.

coberr

  • ***
  • Wiadomości: 138
  • Miejsce pobytu:
    Gorzów Wlkp

Nie tylko wtedy. Również w sytuacji używania parzystych adresów I/O.
o tym nawet nie wiedziałem :)

to dotyczy całego zakresu - 0..255 (czy nawet 65535)?


trojacek

  • *****
  • Wiadomości: 6831
  • Miejsce pobytu:
    Warszawa
Tak, w oryginalnym Spectrum - wszystkich parzystych, od 0 do 65534.
ULA dekoduje jedynie niski stan A0, ignorując pozostałe linie adresowe.
Dlatego, by uniknąć kolizji, wszelkie interfejsy - a także dodatkowe rejestry w modelach 128K - używają adresów nieparzystych.

EDIT: to, co skreśliłem, jeszcze weryfikuję. Zdaje się, że chodzi tylko o parzyste adresy dla A15=0 i A14=1, czyli "odpowiednik" pamięci ekranu, ale w przestrzeni I/O. Tak na logikę ma to większy sens.
« Ostatnia zmiana: 2016.09.30, 18:00:15 wysłana przez trojacek »

Phonex

  • *****
  • Wiadomości: 1260
  • Miejsce pobytu:
    Warszawa
Czyli wstrzymywanie zdarza się również przy czytaniu z taśmy.

trojacek

  • *****
  • Wiadomości: 6831
  • Miejsce pobytu:
    Warszawa
Przede wszystkim przy obsłudze taśmy, bo port 254 jest "pełnoprawnym" portem ULA.
Tak przynajmniej wynika z dokumentacji na WoS.


EDIT: I tu się całkowicie myliłem, skutki pobieżnego czytania :)
« Ostatnia zmiana: 2016.09.30, 18:05:46 wysłana przez trojacek »

trojacek

  • *****
  • Wiadomości: 6831
  • Miejsce pobytu:
    Warszawa
Czyli wstrzymywanie zdarza się również przy czytaniu z taśmy.

I myślę, że jest to całkowicie nieodczuwalne, bo co znaczy nawet 1 mikrosekunda dla sygnału, który operuje szerokościami rzędu kilkuset mikrosekund? różnica poniżej promila raczej nie spowoduje błędu wczytywania.
Bardziej mnie zastanawia, jak to się dzieje, że BEEP nie charczy. Bo AY popędzony z CLK charczy niemiłosiernie.

EDIT: No dobra, przeczytałem jeszcze raz i uważniej:

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.
 2.   The address of the port being accessed is placed on the data bus. If this is in the range 0x4000 to 0x7fff, the ULA treats this as an attempted access to contended memory and therefore introduces a delay. If the port being accessed is between 0xc000 and 0xffff, this effect does not apply, even on a 128K machine if a contended memory bank is paged into the range 0xc000 to 0xffff.

OK, czyli procedury obsługi taśmy są bezpieczne, o ile tylko w rejestrze B jest zero.

« Ostatnia zmiana: 2016.09.30, 18:04:45 wysłana przez trojacek »

Phonex

  • *****
  • Wiadomości: 1260
  • Miejsce pobytu:
    Warszawa
Jak SAVE nie charczy to i BEEP nie. Sygnał SAVE to przecież też audio.
Może po wstrzymaniu port pozostaje zamrożony w poprzednim stanie?
W takim razie impuls trochę się tylko wydłuży. Bardziej będzie fałszował niż charczał.

trojacek

  • *****
  • Wiadomości: 6831
  • Miejsce pobytu:
    Warszawa
Jak już sprostowałem poniżej - contended I/O to parzyste adresy w przestrzeni contended RAM, czyli #4000-#7FFF. SAVE i BEEP są więc bezpieczne, jeśli w rejestrze B jest np. zero.

EDIT: Sprawdziłem w "The Complete...", zarówno BEEP, jak i SAVE używają rozkazu OUT (#FE), A, a nie OUT (C), A. Zatem adres I/O mieści się w "bezpiecznej" strefie.
« Ostatnia zmiana: 2016.09.30, 18:23:05 wysłana przez trojacek »

Phonex

  • *****
  • Wiadomości: 1260
  • 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.

trojacek

  • *****
  • Wiadomości: 6831
  • Miejsce pobytu:
    Warszawa
Jak SAVE nie charczy to i BEEP nie. Sygnał SAVE to przecież też audio.

Oczywista oczywistość. Zastanawiałem się nad charczeniem BEEP versus charczeniem AY.
Bo AY nie fałszuje, tylko charczy - wiem, bo zbudowałem mój pierwszy AY z dzielnikiem CLK :)