• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

py65 błędne działanie programu?

Object Storage Arubacloud
+1 głos
101 wizyt
pytanie zadane 22 grudnia 2021 w Python przez manjaro Nałogowiec (37,390 p.)
from py65.devices.mpu6502 import MPU
from py65.assembler import Assembler


if __name__ == '__main__':
    mpu = MPU()
    asm = Assembler(mpu)

    print(mpu)

    asm.assemble('LDA #7')
    mpu.step()

    print(mpu)

Wyjście:

       PC  AC XR YR SP NV-BDIZC
6502: 0000 00 00 00 ff 00110000
       PC  AC XR YR SP NV-BDIZC
6502: 0000 00 00 00 fc 00110100

Z jakiegoś powodu mój program nie działa prawidłowo ale nie potrafię wyjaśnić dlaczego.

Po załadowaniu do akumulatora wartości #7 jego stan się nie zmienia...

Nigdzie nie mogę znaleźć dokumentacji jak stosować py65 w Pythonie i pewnie tautaj leży przyczyna niepowodzeń. Co dziwne ten sam kod uruchomiony bezpośrednio w konsoli z pominięciem Pythona już działą dobrze.

Ktoś jest w stanie pomóc?

2 odpowiedzi

+2 głosów
odpowiedź 22 grudnia 2021 przez edutomek Dyskutant (8,380 p.)
wybrane 23 grudnia 2021 przez manjaro
 
Najlepsza

Godzinka wolna z samego rana, 'pip install py65', zajrzenie w kod źródłowy monitora i proszę bardzo:

from py65.utils.addressing import AddressParser
from py65.assembler import Assembler
from py65.devices.mpu6502 import MPU

mpu = MPU()

print(mpu)

ap = AddressParser()
asm = Assembler(mpu, ap)

start = ap.number('0000')
bytes = asm.assemble('LDA #$07')
end = start + len(bytes)
mpu.memory[start:end] = bytes

mpu.step()

print(mpu)

Nie, żebym był takim ekspertem od emulacji, symulacji czy w ogóle od 6502, ale spróbowałem w konsoli wykonać assemblację i zwraca to tylko kod instrukcji. A więc nie umieszcza tego w pamięci mpu, gdzie rozkazy mogłyby być wykonane. Stąd ten zerowy PC, na który zwracał uwagę Oscar.

komentarz 22 grudnia 2021 przez Oscar Nałogowiec (29,290 p.)
edycja 22 grudnia 2021 przez Oscar
Sprawdziłem w książce - kod 0x00 to rozkaz BRK (break) - wywołanie przerwania programowego.  Czyli to nie kwestia pinów - przerwanie uruchamiane jest programowo, a ponieważ wektor przerwania pod adresem 0xFFFE i 0xFFFF (2 ostatnie komórki pamięci) pewnie też jest wyzerowany - wychodzi dokładnie to co opisano w pytaniu. Druga rzecz, która się zmienia, to wskaźnik stosu.
1
komentarz 22 grudnia 2021 przez edutomek Dyskutant (8,380 p.)
No to się zgadza - manjaro nie umieścił w pamięci kodu rozkazu, więc pewnie były tam zera. Metodą step() wykonał więc rozkaz BRK - i tyle. Wystarczy umieścić w pamięci kod dla rozkazu LDA i działa (jak pokazałem w przykładowym kodzie).
0 głosów
odpowiedź 22 grudnia 2021 przez Oscar Nałogowiec (29,290 p.)
Obawiam się, że nikt tutaj nie bawił się w udawanie 6502 - piszesz symulator jakiegoś Atari albo Commodora? Ja też się nie bawiłem (chyba jeszcze gdzieś mam ten procek fizycznie i mam książkę o 6502 wydaną w 1989).

Zwróć uwagę, że PC też się nie zmienia - więc nie wykonał się żaden normalny rozkaz. Zmieniła się za to flaga I. Czyli procek przyjął przerwanie. Masz jakąś metodę zajrzenia do pamięci? Został tam umieszczony kod rozkazu? Jaki masz wektor przerwania na końcu pamięci? Może trzeba zdjąć reset i/lub przerwanie? Może tam jest symulacja całego procka, razem z pinami?

Podobne pytania

0 głosów
1 odpowiedź 236 wizyt
pytanie zadane 7 sierpnia 2022 w C i C++ przez Noizz00 Użytkownik (910 p.)
+1 głos
1 odpowiedź 130 wizyt
pytanie zadane 15 marca 2018 w C i C++ przez alter3 Nowicjusz (130 p.)
0 głosów
1 odpowiedź 205 wizyt
pytanie zadane 1 czerwca 2023 w Python przez wojtek_programista Nowicjusz (170 p.)

92,536 zapytań

141,377 odpowiedzi

319,452 komentarzy

61,922 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...