Autor Wątek: DivMMC i snapshot - nie zawsze działa  (Przeczytany 2421 razy)

Pancho

  • *
  • Wiadomości: 7
  • Miejsce pobytu:
    Warszawa
    • RetroFanatic.pl
DivMMC i snapshot - nie zawsze działa
« dnia: 2021.04.24, 13:23:34 »
Chciałem się skonsultować w sprawie funkcji, którą ma DivMMC EnJOY!, czyli snapshot w kontekście zapisywaniu stanu gry na zawołanie. Korzystam z niego, ale od czasu do czasu snapshot się nie udaje (glitche i zwis albo reset). Trzeba cofać się do poprzedniego, ostatniego udanego. Zrobiłem jakby co uaktualnienie do ESXDOS v0.8.9, ale zgodnie z intuicją nic to nie pomogło. Przeczyściłem złącza izopropanolem. Wydaje się, że pomogło. Efekt destrukcji stał się rzadszy, ale nie zniknął. Pytanie do was:

Czy to normalne zachowanie i powinienem być wdzięczny, że w ogóle mam taką funkcję i w większości przypadków działa (najlepsze co mogę zrobić to właśnie czyste złącza)? Czy jednak da się coś tu zrobić (w obrębie tego sprzętu), aby działało niezawodnie?

Aha. Snapshoty też się lekko degenerują z jednego na drugi. Zostają często drobne śmieci wokół postaci gracza, które nie znikają po odczycie. Ale powiedzmy, że nie przeszkadza to zbytnio. I jest drugorzędnym problemem.

Sprzęt: ZX Spectrum +2 (szary) z modyfikacją composite video ("modern TV fix") i modyfikacją Stereo (modyfikacje wykonane przez Bena Versteega), DivMMC EnJOY! v2014.1, karta Kingston SDHC 4GB, joystick podłączony do DivMMC.
Oprogramowanie: ESXDOS v0.8.9, akurat ostatni przypadek gry to Wonderful Dizzy (*.tap), ale defekt występuje też z innym grami. To nie kwestia konkretnego tytułu.

Z góry dzięki za info.

Tygrys

  • Administrator
  • *****
  • Wiadomości: 4537
  • Miejsce pobytu:
    Warszawa
  • mistrz ceremonii
Odp: DivMMC i snapshot - nie zawsze działa
« Odpowiedź #1 dnia: 2021.04.24, 13:41:31 »
Czy próbowałeś te snapshoty odpalać na jakimś emulatorze? Czy tam również występują artefekty?

Pancho

  • *
  • Wiadomości: 7
  • Miejsce pobytu:
    Warszawa
    • RetroFanatic.pl
Odp: DivMMC i snapshot - nie zawsze działa
« Odpowiedź #2 dnia: 2021.04.24, 14:17:01 »
Sprawdziłem teraz ze Speccy 5.9. Są takie same jak na urządzeniu. Te co nie mają artefaktów wokół postaci to nie mają. Te co mają to mają. Te co są popsute są tak samo popsute.

tooloud

  • *****
  • Wiadomości: 3185
  • Miejsce pobytu:
    Warszawa
  • mydłem go!
Odp: DivMMC i snapshot - nie zawsze działa
« Odpowiedź #3 dnia: 2021.04.24, 17:17:07 »
najprościej można to sprawdzić tak, załącz .tap'a gry na której to się robi, ktoś sprawdzi czy u niego to też występuje i będzie jeden krok do przodu, inaczej tak trochę zgadywanie z fusów, które są daleko za siedmioma rzekami.
dużo sprzętu mało czasu.

Pancho

  • *
  • Wiadomości: 7
  • Miejsce pobytu:
    Warszawa
    • RetroFanatic.pl
Odp: DivMMC i snapshot - nie zawsze działa
« Odpowiedź #4 dnia: 2021.04.24, 18:25:36 »

tooloud

  • *****
  • Wiadomości: 3185
  • Miejsce pobytu:
    Warszawa
  • mydłem go!
Odp: DivMMC i snapshot - nie zawsze działa
« Odpowiedź #5 dnia: 2021.04.24, 19:08:30 »
Robią się małe glitche na dole przy postaci Dizziego (sprite dostaje małe poziomych kreski na dole grafiki). Zauważyłem też, że robią mi się dwa rodzaje wielkości snapshotów - 128k i 144k. Naprzemiennie :)

Generalnie - wcześniej tego nie miałem a robiłem snapshoty np. grając w Commando na nolivelost - 0.8.6 i ZX Omni (bo tak mi było najszybciej sprawdzić).
dużo sprzętu mało czasu.

trojacek

  • *****
  • Wiadomości: 6831
  • Miejsce pobytu:
    Warszawa
Odp: DivMMC i snapshot - nie zawsze działa
« Odpowiedź #6 dnia: 2021.04.25, 13:51:26 »
Co prawda zbyt mało gram, by zauważać takie efekty, ale mam pewne podejrzenie, o co chodzi.
Niech mnie ktoś wyprowadzi z błędu, jeśli się mylę - czy format .tap nie powstał po to, by gry (ogólnie: kod binarny) uruchamiać od "początku", a nie od dowolnego adresu, wyznaczonego momentem użycia NMI?

Ja rozumiem, że pewnie dokładany jest kod ładujący stan rejestrów, ale czy na pewno wszystkich? Czy flaga IFF1 jest zapisywana? Bo podejrzewam, że właśnie nie. I w takiej sytuacji może zachodzić niekorzystny przypadek, gdy NMI zostało naciśnięte w trakcie obsługi przerwania, a konkretnie - w trakcie rysowania postaci (sprajta). Jeśli tak przerwany kod zostanie wgrany, procedura będzie kontynuowana, ale bez zabezpieczenia przed jej przerwaniem przez kolejny INT. W zależności od zastosowanego algorytmu przywracania tła i rysowania postaci  mogą - choć niekoniecznie muszą - pojawiać się śmieci. A że animacje często korzystają z funkcji XOR z danymi ekranu - taki błąd będzie "wędrował" razem ze sprajtem, aż do wyrysowania na nowo planszy i postaci.

Pancho

  • *
  • Wiadomości: 7
  • Miejsce pobytu:
    Warszawa
    • RetroFanatic.pl
Odp: DivMMC i snapshot - nie zawsze działa
« Odpowiedź #7 dnia: 2021.04.25, 14:12:49 »
Znalazłem dyskusję na FB, w podobnym temacie w obrębie ZX Spectrum Next, i też w kontekście Dizziego (tylko, że innej części):
https://www.facebook.com/groups/specnext/permalink/1133268083697177/?comment_id=1133472467010072

"You shouldn't really get a crash, although this can sometimes happen on return from the NMI if the game is in the middle of using the stack for other purposes (some games use it as a fast way to transfer data to the screen)."

Padła porada, aby pauzować grę (o ile to możliwe) w momencie robienia snapshota. Sprawdzę.

Znalazłem także pewną wzmiankę w samym opisie formatu SNA, gdzie wymieniana jest jego wada (mogącą powodować awarie), choć podobno przy 128K nie powinna się zdarzać:
https://worldofspectrum.org/faq/reference/formats.htm (sekcja SNA Format)
« Ostatnia zmiana: 2021.04.25, 14:50:44 wysłana przez Pancho »