ZX Spectrum > HARDWARE

Nowe ficzery w nowym Divide Plus

<< < (3/5) > >>

matofesi:
@Pyza Nie. Monitor pod przyciskiem to jest tylko jedna rzecz. Sprzętowy brak point to coś innego. Chodzi mi o to, że po wejściu do monitora po wciśnięciu przycisku chciałbym mieć możliwość ustawienia adresu (a raczej przynajmniej kilku adresów) dla których sprzęt włączałby monitorowanie i - po wyjściu z monitora z powrotem do programu pilnował czy nie następuje na przykład skok pod zadany adres (czy ogólnie - pobranie instrukcji z tego adresu) i jeśli tak to wtedy automatycznie generował NMI najlepiej w biegu podmieniając RAM tak, żeby NMI nie popsuło stosu itp.

Softwareowa pułapka jest fajna, ale ma to do siebie, że żeby ją ustawić musisz zmodyfikować kod, a to się da wykryć programowo. Pułapka sprzętowa nie modyfikuje pamięci stąd byłaby dużo lepszym rozwiązaniem. A poza tym nie da się ustawić softwareowej pułapki na kod, który jest generowany "w locie" - a sprzętową i owszem :)

Gryzor:
Z ciekawosci - po co Wam to ? Przeciez na emulatorze mozna wszystko.
Akurat programowanie obecnie bezposrednio na zx wydaje mi sie przegieciem.

matofesi:
A to nie jest pytanie "po co" tylko "co byście chcieli". Nie ważne, że może nigdy tego nie użyję - ważne, że byłaby taka potencjalna możliwość.

Pyza^Illusion:
@Duddie
Jako takiego ROMu MacFace nie posiada (!?!). Jego ROM to to, co do niego wgrasz przed jego użyciem - czyli de facto - RAM, z możliwością podpięcia go jako ROM (nie wiem czy zawsze od tego samego adresu, czy pod dowolną stronę/bank).
Wyglądało to tak, że jak startujesz na czysto, to przycisk NMI działa jako zwyczajny reset. Można wgrać ROM 48 i wtedy po resecie, niezależnie od modelu ZX, pojawia się słynne @1982 Sinclair Research... Odpinany jest zatem wbudowany w komputer ROM i zastępowany tym z MacFace'a. Zablokowane są również banki itd. Jednym słowem mamy oryginalnego gumiaka (multikolory jednak działają jak na natywnym sprzęcie - to chyba oczywiste). Pokusiłbym się o stwierdzenie, że jak wgramy ROM1 z BASIC'iem 128, to odpaliłby się na zwykłym 48kB (chyba, że przy starcie sprawdza banki itp.) - funkcje BASIC'owe AY powinny działać, choć z jasnych przyczyn nie pójdą funkcje przełączania banków.

@matofesi
Niemal wszystko to masz. Nie wiem dokładnie jak działa przerzucanie pamięci pomiędzy przystawką a ZX. W każdym razie po wejściu w monitor nie uciekał nawet bajcik z zawartości pamięci, nie niszczy ekranu itd. Tzn. w miejscu, gdzie chciałeś pułapkę te 3 bajty zostały zastąpione JP (albo CALL - nie pamiętam) NN, ale po wejściu w monitor automatycznie była przywracana poprzednia zawartość. Rozumiem to tak, że w momencie postawienia pułapki, owe 3 bajty chowane były w pamięci przystawki, a gdy pułapka automatycznie wywołała NMI, zostawały one przywracane z powrotem. Pułapek można było zakładać kilka. Co ciekawe, będąc w monitorze, pod którymś tam przyciskiem mieliśmy możliwość podejrzenia aktualnego stanu ekranu również bez żadnego uszczerbku.
Podsumowując działało to tak (w przypadku monitora), jakby przy wywołaniu NMI cały bank od 16384 do 32767 został wymieniany z zawartością MacFace (albo wpinany w to miejsce), a po opuszczeniu monitora, wszystko wracało do normy (z wyjątkiem założonych pułapek, które przywracane były dopiero po ich samoczynnym wywołaniu).
Nie bardzo sobie wyobrażam, w którym momencie pułapka sprzętowa miałaby wywołać NMI w przypadku nadpisania przez program miejsca jej zadziałania. Reagowałaby na próbę nadpisania tego konkretnego adresu? Możesz to jakoś dokładniej wyjaśnić?

@Gryzor
Hmmm... Generalnie, to po co nam w ogóle oryginalny sprzęt? Przecież wszystko to można uzyskać pod emulatorami, nie trzeba kupować DivIDE, męczyć się z naprawami, przeróbkami, podpinać kabli pod jakiś stary TV i rzucać mięsem, że akurat pod mój model nie zrobili dobrze efektu z multikolorem. Grafika, muzyka czy programowanie jest łatwiejsze i przyjemniejsze na PC. Nawet na demoparty można odpalać produkcje z PC... Amigowcy, Atarowcy czy posiadacze C64 w sumie też tak mogą robić. Po co więc ciągną się z tym wszystkim sprzętem po kraju, klnąc przy rozkładaniu sprzętu, że brak gniazdek, a akurat zapomniał zabrać przedłużacza/rozdzielacza? Jasnej odpowiedzi nie ma, to się po prostu czuje. Zabawa z realnym sprzętem przywraca dawne wspomnienia i daje więcej radości :D

matofesi:
Jak to jak? Układ monitorujący pułapkę sprawdza stan linii - jeśli następuje odwołanie do konkretnego (ustawionego w monitorze adresu) i równocześnie ustawione jest MREQ, RD i M1 to oznacza, że procesor pobiera rozkaz z zadanego adresu i tylko wtedy sprzęt wywołuje NMI podmieniając wcześniej pamięć. Zwykły odczyt pamięci nie ustawia M1, zapis nie ustawia RD - wykonanie kodu daje się rozpoznać jednoznacznie co oznacza, że jeśli na przykład program generuje jakieś procedury i wstawia je zawsze w to samo miejsce ustawienie pułapki na ten obszar wywoływałoby ją tylko w momencie właściwego skoku i zawsze z załadowanym generowanym kodem.

To, że da się to zrobić podmieniając kod i monitorując odczyty z pamięci a w stosownym momencie (przy próbie odczytu bez M1) podkładając w jakiś sposób (tu akurat nie jestem pewien jak miałoby się to odbywać - na złączu krawędziowym nie ma sygnału pozwalającego na odpięcie wbudowanego RAMu i włączenie w jego miejsce zewnętrznej pamięci) zapamiętaną wcześniej zawartość pułapki. Nie jestem pewien, czy rozwiązanie takie będzie mniej skomplikowane niż to, co opisałem wcześniej.

Nawigacja

[0] Indeks wiadomości

[#] Następna strona

[*] Poprzednia strona

Idź do wersji pełnej