1 Ostatnio edytowany przez pajero (2017-01-03 18:51:58)

Nie pytam się o emulator, tylko o real Atari.

Zastanawia mnie, gdzie można odczytać aktualnie używany adres PC wykonywanego rozkazu przez procek.

Zapewne wywołanie przerwania, zdjęcia danych ze stosu załatwia sprawę, acz....
może istnieje gdzieś magiczny rejestr z którego można pobrać te dane....coś mi kiedyś świtało, że $FFxx  xx=??

Czy któryś ze znanych Wam freezer'ów miał śledzenie bieżącego adresu PC ?

?

2

Dziwne pytanie. Kto ma przeczytać ten adres? Sprzętowo jest on tylko na szynie adresowej, a nie pod żadnym magicznym adresem. Programowo to zwykle wiadomo, pod który adres kompilujemy:

ten_rozkaz
  ldx #<ten_rozkaz
  ldy #>ten_rozkaz

A w rzadkich przypadkach, gdy przenieśliśmy kod w inne miejsce, odzyskamy go skacząc do procedury (której adres jest dobrze ustalony):

  jsr get_pc
  ...

get_pc
  pla
  tax
  pla
  tay
  pha
  txa
  pha
  inx
  sne:iny
  rts

W x i y mamy adres instrukcji po jsr.

https://www.youtube.com/watch?v=jofNR_WkoCE

3

Co do freezerów nie mam pojęcia, bo nigdy się z nimi nie zetknąłem.
W runtime adres dostępny jest tylko przez stos. Można go odczytać wywołując np BRK, ale polecałbym jednak zwykły JSR, ponieważ obsługa przerwania BRK może się nie udać z tego powodu http://atariki.krap.pl/index.php/6502 (sekcja "Błędy związane z przerwaniami").W tym wątku http://www.atari.org.pl/forum/viewtopic.php?id=7800 odbyła się dyskusja, ale ja nie sprawdziłem koniec końców czy da się poprawnie obsługiwać BRK - temat jest otwarty :).
@0xF: Niestety program nie zawsze jest kompilowany pod znany adres - vide SDX format relokowalny.

hex, code and ror'n'rol
niewiedza buduje, wiedza rujnuje

4

Pytanie dotyczy czasu po kompilacji, na zrelokowanym kodzie np. Sparty.

Wydaje się, że jedynie wykonanie jsr i obliczenie założonej różnicy w adresach może dać odpowiedź nt. obecnego fizycznego położenia.

A czy freezer na czas zatrzymania wywołuje przerwanie?

5

jsr do podprogramu jak pisal Fox.


get_pc          tsx
                ldy $102,x
                lda $101,x
                tax
                inx
                bne @+
                iny
@               rts

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

6

Fox wskazał też inny sposób. Właściwie jeśli robisz JSR, to wiesz w którym punkcie programu go wywołujesz - w kodzie relokowalnym zamiast:

ldx #<point
ldy #>point

jak radzi Fox można zrobić:

pointadr .word point

i potem

ldx pointadr
ldy pointadr+1

przynajmniej relokator SDX potrafi takie konstrukcje obsługiwać (właściwie to relokator do spółki z madsem).
Ale to jeśli interesuje cię adres punktu w pamięci po relokacji, bo jeśli jednak chcesz w różnych punktach programu wołać procedurę, która zbada skąd została wywołana i coś z tym zrobi, to zostaje JSR.
Czyli Fox dobrze radzi (i xxl) :)

hex, code and ror'n'rol
niewiedza buduje, wiedza rujnuje

7

To z innej beczki....

Niedopalone atari przyjmuje program z przerwaniami (też DLI) i chodzi.  ZRapidusowane - gdzieś się wykrzacza, i można go selektywnie jak i fragmentami debugować. No ale błąd nie jest na każdej ramce, pewnie zależy od x-czynników.

Gdyby tak Freezer przejmował miejsce zwisu, to już by było coś. One to potrafią ?

8

Freezer nie ma miejsca "zwisu". Jak Atari się zawiesi to i freezer nie zadziała. Działanie Freezera polega na wygenerowaniu przerwania NMI i w tym czasie podmiana pamięci w obszarze wektora NMI tak aby wskazywała na procedurę startu kodu freezera. Po wciśnięciu przycisku freezera zmienia się totalnie mapa pamięci Atari. Ponieważ wywołanie freezera jest de-facto przerwaniem, adres powrotu leży sobie grzecznie na stosie. Jak wcześniej stos np. "przekręcił się", powaliło się coś innego... to często gęsto freezer nie da rady się poprawnie uruchomić... a jeżeli mu się to uda... to nie ma szans na poprawny powrót... bo niby do czego?. Jeżeli 6502 napotka któryś z rozkazów KIL... i 6502 wisi... Freezer również martwym jest.

9

pajero: Hardware'owy monitor szyny by się przydał. Nie wiem  czy takie coś istnieje ...
W najprostszym wypadku będzie to garść diod led + rezystory. Ale O ile CPU nie wejdzie w stan ubicia/zwisu to ciężko będzie cokolwiek z tego odczytać.

"tatusiu zobacz, narysowałam tobie takie same coś jak na twojej koszulce" 
https://github.com/willyvmm/mouSTer
jmp $e477

10

Zdaję się, że Rapidus śledzi szynę.... ale oficjalnego manuala dopałki jeszcze nie widziałem.

Całość sprowadza się do kontynuacji prac nad QMEGiem 5x, właściwie wyprostowaniem tego co napsułem.
Głównie brak monitora pamięci. Też niedopracowana obsługa 65816 (tak by nie padał OS przez przypadek).

11

Serio? Qmeg? w 2017 roku?

"Was powinny uzbrojone służby wyciągać z domów do punktów szczepień, a potem zamykać do pi* za rozpowszechnianie zagrożenia epidemicznego" - Epi 2021
"Powinno się pałować tylko tych co tego nie rozumieją. No i nie szmatki i nie chirurgiczne tylko min FFP3, to by miało jakiś sens. U mnie we firmie, to jak przychodzi bezmaskowiec, to stoi w deszczu przed firmą" - Pin 2021