1

Trafilem na dziwne zjawisko testujac "Tomka". Dokladnie na tym tescie:
http://www.youtube.com/watch?v=kfnsgPS6vdg

Nie moge tego pokazac, ale w momencie kiedy naciskam dowolny klawisz (oprocz shifta rzecz jasna), to obraz na jedną ramkę, lekko sie przesuwa w lewo od pewnej linii (rożnej w rożnych probach). Nie wiem czy dobrze obserwuje, ale przesuniecie wynosi nieraz 1 bajt, a nieraz 2 bajty. Takie szarpniecie o czasie trwania 1 ranmki (na oko) ale zauwazalne.

Wyjasnienie:
Obraz jest w trybie graficznym. Adresy pamieci dla kazdej linii ustawione są na $D500. "Tomek" po odebraniu rozkazu "generuj dane obrazu dla Antica" podaje kolejne bajty, tak jak Antic je czyta ze strony $D5. Przyjmuje sie przy tym, ze nic innego oprocz Antica nie bedzie robilo odczytu ze strony $D5.
Jesli wiec obrazem szarpie od pewnej linii w lewo, to oznacza ze DOKLADNIE w momencie nacisniecia klawisza "cos" dokonuje odczytu (lub dwoch) ze strony $D5xx. W ten sposob "zabiera dane" przeznaczone dla Antica i caly obraz przesuwa sie o bajt lub dwa w lewo na czas rysowanej wlasnie ramki.
Innego wytlumaczenia nie ma.

Pytanie:
Co i po co czyta ze strony $D5 w momencie nacisniecia klawisza?

2

Nie znam się na assemblerze, ale czy przypadkiem w czasie "odczytu danych dla antica" i wywołania (przerwaniem?) odczytu klawiatury nie wchodzi Ci po prostu jeden (dwa cykle) rozkazu rozpoznającego naciśnięcie klawisza? Tak, jakby ANTIC na moment przestawał haltować procka?

Sikor umarł...

3

nosty: a co się stanie, jeśli "pamięć obrazu" przesuniesz z $d500 na $d580? Możesz zrobić taki eksperyment? Czy efekt wtedy też wystąpi?

Poza tym przydałyby się dodatkowe informacje: czy np. gra czeka na naciśnięcie klawisza, czy używa do tego OS-u, czy przerwania IRQ są włączone itp. Tak na oko, to OS sam w sobie przynajmniej nie czyta $d5xx przy obsłudze klawiatury, bo nie ma po co. On tej strony zresztą w ogóle raczej nie dotyka.

KMK
? HEX$(6670358)

4 Ostatnio edytowany przez nosty (2012-10-13 19:16:55)

Nigdzie w programie nie korzystam z klawiszy, nie odczytuje rejestrow klawiatury.
Uzywam przerwan VBLI i DLI.

Przy ustawieniu $D580 zjawisko tez wystepuje. Przy $D5E0 tak samo (mam 32-bajtowa szerokosc obrazu).
Ale to przeciez nie ma znaczenia! Kazdy odczyt z dowolnego adresu strony D5 trafi na cartridge i "zje" dane przeznaczone dla Antica, niezaleznie gdzie jest pamiec obrazu.

Zaraz sprawsze jeszcze na tym pierwszym demie hi-res, oraz na innym egzemplarzu Atari.

EDITED: z wlaczonym QMEG'iem jest tak samo.

5

Daj SEI na początku programu, zablokuje to przyjmowanie przerwań klawiatury. Jeśli zjawisko dalej będzie występowało, to znaczy, że nie powoduje go OS.

KMK
? HEX$(6670358)

6

Ciekawe... Zjawisko zaobserwowalem na 65XE (praktycznie nie dopalonym, tylko QMEG i SIO2IDE).
Natomiast na 130XE (1MB RAM, stereo, AKI) nie wystepuje niezaleznie od tego pod jakim systemem sprawdzam (a mam tam chyba nawet system z 800-ki).
Czyli jest to zwiazane z konkretnym modelem plyty pewnie.

No nic. Jak bede mial kilka urzadzen i wiecej osob bedzie moglo przetstowac to pewnie dojdziemy co to za cudo...

7

Gdybym miał zgadywać, to pojawiają się jakieś syfy na sygnałach gniazda kartridża, które twój wynalazek interpretuje jako dodatkowe odczyty. Może to znowu nieśmiertelny problem z fi2.

KMK
? HEX$(6670358)

8

sprawdz jedno i drugie atari acid800. daj wynik

http://atari.pl/hsc/ad.php?i=1.

9

xxl napisał/a:

acid800

Co to jest???

drac030 napisał/a:

Gdybym miał zgadywać, to pojawiają się jakieś syfy na sygnałach gniazda kartridża, które twój wynalazek interpretuje jako dodatkowe odczyty. Może to znowu nieśmiertelny problem z fi2.

Bardzo prawdopodobne. Szczegolnie ze w 130XE jest ok. Niestety nie dysponuje akurat wieksza iloscia Atari do prob.

PS. Z SEI programi mi wogole nie dziala :/

10 Ostatnio edytowany przez xxl (2012-10-13 19:42:37)

acid800 test atari goscia od Altirry

http://www.virtualdub.org/downloads/Acid800-1.0.7z


> PS. Z SEI programi mi wogole nie dziala

?

a no tak uzywa przerwan vbi :-)

http://atari.pl/hsc/ad.php?i=1.

11 Ostatnio edytowany przez drac030 (2012-10-13 19:38:48)

Ad sei: czy VBL-a używasz tzw. "opóźnionego"? Jeśli tak, to faktycznie, z SEI nie zadziała. Przewieś procedurę VBL na wektor natychmiastowy. Acz problem jest raczej sprzętowy, zatem to tylko tak na wszelki wypadek.

KMK
? HEX$(6670358)

12

xxl napisał/a:

acid800 test atari goscia od Altirry

Obie Atarki przechodza wszystkie testy :)

drac030 napisał/a:

Ad sei: czy VBL-a używasz tzw. "opóźnionego"? Jeśli tak, to faktycznie, z SEI nie zadziała. Przewieś procedurę VBL na wektor natychmiastowy.

Cholera... musze sie jeszcze duzo nauczyc. Nie wiem jakiego VBLI uzywam, nie wiedzialem ze sa rozne :/
Ustawiam jak nizej, inaczej nie umiem:

       ldy #<vbli
       ldx #>vbli
       lda #$06
       jsr jsetvblv
       lda #64 
       sta NMIEN

13

ach! no tak, acid tego jeszcze nie sprawdza!.... zaraz dostaniesz maila :p

http://atari.pl/hsc/ad.php?i=1.

14 Ostatnio edytowany przez drac030 (2012-10-13 20:06:46)

nosty napisał/a:

Cholera... musze sie jeszcze duzo nauczyc. Nie wiem jakiego VBLI uzywam, nie wiedzialem ze sa rozne :/
Ustawiam jak nizej, inaczej nie umiem:

       ldy #<vbli
       ldx #>vbli
       lda #$06
       jsr jsetvblv
       lda #64 
       sta NMIEN

To jest OK (VBL natychmiastowe). Tylko że jak dasz SEI, zostaje (oprócz przerwań IRQ) wyłączona jeszcze druga faza VBL, tzw. opóźniona. To ona kopiuje do rejestrów I/O rejestry-cienie. Zgadywałbym, że dlatego ci to nie chce działać po SEI, bo pewnie wpisujesz adres DL do cieni, dajmy na to.

Daj SEI po zainicjowaniu wszystkiego, albo ładuj dane bezpośrednio do rejestrów scalaków.

KMK
? HEX$(6670358)

15

Kurcze jakis dziwny ten test - w kolejnych uruchomieniach na 130XE daje rozne wyniki!
Raz wyskoczyl mi blad "MMU: XL banking", a teraz za kazdym razem wyskakuje mi:
CPU: Illegal instructions... FAIL
Test failed: A=33 X=55 Y=01 P=30 M=11
Insn: 93 C4 60

Ale przed chwila na tej samej maszynie dwa razy przeszedl!

16

HA! Dodanie SEI pomoglo.

Dodalem juz po inicjalizacji wszystkiego i po wykonaniu pierwszego VBLI, kiedy wszystkie cienie zostaly przepisane.
Dalej w kodzie juz nie uzywam zapisu do cieni wiec dziala.

Zjawisko zniknelo.

17

odpisz co wyszlo na tescie z maila :-)

http://atari.pl/hsc/ad.php?i=1.

18

nosty napisał/a:

HA! Dodanie SEI pomoglo.

Dodalem juz po inicjalizacji wszystkiego i po wykonaniu pierwszego VBLI, kiedy wszystkie cienie zostaly przepisane.
Dalej w kodzie juz nie uzywam zapisu do cieni wiec dziala.

Zjawisko zniknelo.

A to ciekawe. Jest jeszcze jedna możliwość: chwilowa blokada NMI przez IRQ klawiatury http://atariki.krap.pl/index.php/6502#B … zerwaniami Może jeśli wstrzelisz się w odpowiedni moment, to opuszczenie jednego DLI (albo jednego VBL-a) dałoby taki efekt?

KMK
? HEX$(6670358)