Aktualności: C64 Power - online od stycznia 2000 !

Autor Wątek: [Kernal] Czytanie z dysku a czytanie z klawiatury  (Przeczytany 2555 razy)

0 użytkowników i 1 Gość przegląda ten wątek.

djgruby

  • Gość
[Kernal] Czytanie z dysku a czytanie z klawiatury
« dnia: 23 Lutego 2009, 18:31 »
Witam!

Mam pewien problem z odczytem danych z dysku oraz z jednoczesnym odczytem danych z klawiatury. Byc moze ktos z forumowiczow bedzie w stanie mi pomoc?

Problem jest nastepujacy... Laduje sobie plik z dysku do pamieci za pomoca prostego wywolania procedur z Kernala:

                   
Kod:
 :  :  :  : lda #$01
 :  :  :  : ldx #$08
 :  :  :  : ldy #$0f
 :  :  :  : jsr $ffba
 :  :  :  : lda #3
 :  :  :  : ldx # :  :  :  : ldy #>hi_scores_file_name
 :  :  :  : jsr $ffbd
 :  :  :  : lda #$00
 :  :  :  : jsr $ffd5
 :  :  :  : jsr $ffcc
 :  :  :  : jsr $ffc3

Wszystko jest OK, dopoki w trakcie ladowania, albo dokladniej tuz po jego zakonczeniu, nie naciskam zadnych klawiszy na klawiaturze. Jesli jednak wcisniety jest jakis klawisz, to VICE wywala sie i nie pozwala na dalsze kontynuowanie wykonywania programu. Podsumowujac: jesli nie dotykam klawiatury, to dziala jak nalezy, a jesli dotykam klawiature, to emulator mi sie wywala. Dzieje sie to dokladnie po zaladowaniu pliku z dysku!

Czy tak ma byc, czy to raczej jakis bug w moim kodzie? Bardzo prosze o pomoc!

Powyzszy problem pojawia sie na VICE, zawsze jest ten sam komunikat:

                   
Kod:
Main CPU:: JAM at $2144

Jednak $2144 to jakis smiec, nie wiadomo skad wziety... Niestety, nie posiadam C64, aby moc to zweryfikowac na oryginalnej maszynie, pozostaje mi tylko emulator.

Czy ktos spotkal sie kiedykolwiek z podobnym problemem? Dodam jeszcze, ze przerwania IRQ mam zablokowane w czasie wykonywania powyzej zamieszczonego fragmentu kodu...

Pozdrawiam,
DJ Gruby.



Izaak Berenbaum__

  • Gość
[Kernal] Czytanie z dysku a czytanie z klawiatury
« Odpowiedź #1 dnia: 23 Lutego 2009, 19:01 »
                   
DJ Gruby/Oxyron napisal:
Dodam jeszcze, ze przerwania IRQ mam zablokowane w czasie wykonywania powyzej zamieszczonego fragmentu kodu...

irq ? wylacz nmi lepiej.

na takich banalach emulatory sie raczej nie wysypuja. jak chcesz moge ci to sprawdzic na c64 ale wrzuc to gdzies na www.

djgruby

  • Gość
[Kernal] Czytanie z dysku a czytanie z klawiatury
« Odpowiedź #2 dnia: 23 Lutego 2009, 19:54 »
                   
Izaak Berenbaum napisal:
irq? wylacz nmi lepiej.

Wylaczenie NMI nie pomoglo (efekt dzialania programu byl identyczny).

Co natomiast pomoglo, to ustawienie przerwan IRQ na jakis standardowy adres tuz przed odwolywaniem sie do procedur Kernala, tak jak w ponizszym przykladzie:

                   
Kod:
 :  :  :  : lda #<$ea7e
 :  :  :  : sta $0314
 :  :  :  : lda #>$ea7e
 :  :  :  : sta $0315

Byc moze Kernal po prostu wlacza sobie przerwania IRQ po lub w trakcie ladowania pliku?

fenek__

  • Gość
[Kernal] Czytanie z dysku a czytanie z klawiatury
« Odpowiedź #3 dnia: 23 Lutego 2009, 22:29 »
Ja obstawialbym dwie rozne procedury zrzucania zawartosci rejestrow w Twoich IRQ a w IRQ Kernala (choc ten chyba wykorzystuje SEI - nie pamietam), w ostatecznym rozrachunku, system moze zrzucac rejestry korzystajac ze stosu PHA, PLA tym samym modyfukujac wskaznik stosu, jezeli do ladowania pliku wykorzystujesz rozkaz RTS
a popdrocedura powraca a wskaznik stosu lub zawartosc sotosu sie zmienia stad moze pojawiac sie adres 2144 i rts sie wywala.

Jeszcze jest kwestia SEI/CLI i jak sa ustawione przerwania wczeneij czy na $0314/$0315 czy $ffffe/$ffff. Jezeli te pierwsze to CPU sam zrzuca reg flag i reg AXY na stos w okreslonej kolejnosci  i przy wyjsciu Kernal sciaga to w okreslonej kolejnosci.
Jezeli masz swoja procke zrobiona na $fffe/$ffff i zrzucasz w innej kolejnosci regxy lub do komorek w pamieci a potem przerzucasz sie do procek Kernala, to rozkaz SEI przy ladowaniu zablokuje przerwania i posle chyba 3(4) bajty na stos. Za malo danych wejsciowych zeby wykryc blad.
Najlepsze jest to ze i tak nikt nie sprawdzi tego co opisuje.

Izaak Berenbaum__

  • Gość
[Kernal] Czytanie z dysku a czytanie z klawiatury
« Odpowiedź #4 dnia: 23 Lutego 2009, 22:50 »
sei posyla cos na stos ?  \"Shocked\" afaik 2 cykle- pierwszy pobranie instrukcji,w drugim ustawienie I=1. moar info pls.

Offline Skull

  • Level 6
  • ******
  • Wiadomości: 2034
[Kernal] Czytanie z dysku a czytanie z klawiatury
« Odpowiedź #5 dnia: 24 Lutego 2009, 08:42 »
Aby dokladniej to wyjasnic trzebaby sie zaglebic w kernal, ale uruchomilem ten kawalek kodu co wpisales przedtem stawiajac SEI.
Okazuje sie, ze po  jsr $ffd5 juz statusu interrupt nie ma (mozesz sobie to wszystko sprawdzac w monitorze VICE)  - czyli gdzies w kernalu jest instrukcja CLI.
Co sie dzieje po tym mozna sie tylko domyslac (albo przesledz cala droge w monitorze VIC), ale zdaje sie ze automatycznie wraca do podstawowej obslugi przerwan 0314/0315 i zaleznie od tego co tam sie wlasnie znajduje to \"wywoluje\".
Wniosek z tego taki, ze wczytywanie w ten sposob nie powinno odbywac sie po SEI, czyli przez ten czas niech dziala normalne przerwanie kernala.

Offline Skull

  • Level 6
  • ******
  • Wiadomości: 2034
[Kernal] Czytanie z dysku a czytanie z klawiatury
« Odpowiedź #6 dnia: 24 Lutego 2009, 08:44 »
...albo, musisz przerobic sobie na wlasna procedure $ffd5

fenek__

  • Gość
[Kernal] Czytanie z dysku a czytanie z klawiatury
« Odpowiedź #7 dnia: 24 Lutego 2009, 09:43 »
>sei posyla cos na stos ?  
Tak, posyla kaczki i czarownice.

Izaak Berenbaum__

  • Gość
[Kernal] Czytanie z dysku a czytanie z klawiatury
« Odpowiedź #8 dnia: 24 Lutego 2009, 10:28 »
no to brzmi bardziej prawdopodobnie niz 3 bajty.

djgruby

  • Gość
[Kernal] Czytanie z dysku a czytanie z klawiatury
« Odpowiedź #9 dnia: 24 Lutego 2009, 19:00 »
Przyczyna tego problemu okazala sie byc trywialna, a blad zaistnial, i tutaj zaskoczenie, po mojej stronie... Otoz umiescilem sobie procedure decrunchera w obszarze pamieci $0200-$02c5. Tymczasem nawet pobiezne przejrzenie kodu wykonywanego przez Kernal uswiadomilo mi, ze ten fragment pamieci jest wykorzystywany w trakcie realizacji procedur I/O. Do tej pory przy tak umieszczonym decruncherze kod zawsze dzialal poprawnie, poniewaz uzywalem IRQ loaderow... Ale odczyt pliku za pomoca procedur Kernala tego juz nie przepuscil... Dziekuje za wszystkie pomocne sugestie!

fenek__

  • Gość
[Kernal] Czytanie z dysku a czytanie z klawiatury
« Odpowiedź #10 dnia: 25 Lutego 2009, 09:04 »
ROTFL \"Smile\" Moze teraz uzytkownik Izaak zrozumie o co mi chodzilo w moich wczesniejszych postach ..., dobrze ze adres ladowania pliku nie pokryl sie z adresem procedury ladowania \"Smile\"
A na powaznie:
Jak robisz wczytywanie hi-score do gry to powinienes jeszcze zabezpieczyc gre a raczej obszar pamieci przed przeladowaniem przez plik hi-score.
Przy tych prockach to wystarczy zmienic adres ladowania pliku i gra Ci sie sypnie \"Smile\"

Offline Skull

  • Level 6
  • ******
  • Wiadomości: 2034
[Kernal] Czytanie z dysku a czytanie z klawiatury
« Odpowiedź #11 dnia: 25 Lutego 2009, 10:07 »
\"Smile\" czyli jak klikales klawiszami to zmienial sie bufor klawiatury (wlasnie gdzies w adresach $200-$300)  i robil sieczke z twoim depakerem - nic dziwnego, ze nagle pojawil sie JAM \"Smile\"
Ale co to za giera ?

djgruby

  • Gość
[Kernal] Czytanie z dysku a czytanie z klawiatury
« Odpowiedź #12 dnia: 25 Lutego 2009, 10:35 »
                   
fenek napisal:
Jak robisz wczytywanie hi-score do gry to powinienes jeszcze zabezpieczyc gre a raczej obszar pamieci przed przeladowaniem przez plik hi-score.

A masz jakies konkretne rozwiazania takowego problemu?

                   
skull napisal:
Ale co to za giera?

Juz wkrotce szczegolowe informacje zostana opublikowane na stosownej stronie internetowej (na pewno dowiecie sie o tym na niniejszym forum).

elban__

  • Gość
[Kernal] Czytanie z dysku a czytanie z klawiatury
« Odpowiedź #13 dnia: 25 Lutego 2009, 13:43 »
mam nadzieje, ze czolgi.

ta super produkcja na pewno wymaga ukonczenia. Kupie orriesa, slowo!

djgruby

  • Gość
[Kernal] Czytanie z dysku a czytanie z klawiatury
« Odpowiedź #14 dnia: 25 Lutego 2009, 14:45 »
                   
elban napisal:
mam nadzieje, ze czolgi.

ta super produkcja na pewno wymaga ukonczenia. Kupie orriesa, slowo!

Trzymam Cie za slowo! :]