Strona 1 z 2

[Kernal] Czytanie z dysku a czytanie z klawiatury

: 23 lut 2009, 19:31
autor: DJ Gruby
Witam!

Mam pewien problem z odczytem danych z dysku oraz z jednoczesnym odczytem danych z klawiatury. Być może ktoś z forumowiczów będzie w stanie mi pomóc?

Problem jest następujący... Ładuję sobie plik z dysku do pamięci za pomocą prostego wywołania procedur z Kernala:

Kod: Zaznacz cały

        lda #$01
        ldx #$08
        ldy #$0f
        jsr $ffba
        lda #3
        ldx #<hi_scores_file_name
        ldy #>hi_scores_file_name
        jsr $ffbd
        lda #$00
        jsr $ffd5
        jsr $ffcc
        jsr $ffc3
Wszystko jest OK, dopóki w trakcie ładowania, albo dokładniej tuż po jego zakończeniu, nie naciskam żadnych klawiszy na klawiaturze. Jeśli jednak wciśnięty jest jakiś klawisz, to VICE wywala się i nie pozwala na dalsze kontynuowanie wykonywania programu. Podsumowując: jeśli nie dotykam klawiatury, to działa jak należy, a jeśli dotykam klawiaturę, to emulator mi się wywala. Dzieje się to dokładnie po załadowaniu pliku z dysku!

Czy tak ma być, czy to raczej jakiś bug w moim kodzie? Bardzo proszę o pomoc!

Powyższy problem pojawia się na VICE, zawsze jest ten sam komunikat:

Kod: Zaznacz cały

Main CPU: JAM at $2144
Jednak $2144 to jakiś śmieć, nie wiadomo skąd wzięty... Niestety, nie posiadam C64, aby móc to zweryfikować na oryginalnej maszynie, pozostaje mi tylko emulator.

Czy ktoś spotkał się kiedykolwiek z podobnym problemem? Dodam jeszcze, że przerwania IRQ mam zablokowane w czasie wykonywania powyżej zamieszczonego fragmentu kodu...

Pozdrawiam,
DJ Gruby.

Re: [Kernal] Czytanie z dysku a czytanie z klawiatury

: 23 lut 2009, 20:01
autor: Izaak Berenbaum
DJ Gruby/Oxyron pisze:Dodam jeszcze, że przerwania IRQ mam zablokowane w czasie wykonywania powyżej 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.

Re: [Kernal] Czytanie z dysku a czytanie z klawiatury

: 23 lut 2009, 20:54
autor: DJ Gruby
Izaak Berenbaum pisze:irq? wylacz nmi lepiej.
Wyłączenie NMI nie pomogło (efekt działania programu był identyczny).

Co natomiast pomogło, to ustawienie przerwań IRQ na jakiś standardowy adres tuż przed odwoływaniem się do procedur Kernala, tak jak w poniższym przykładzie:

Kod: Zaznacz cały

        lda #<$ea7e
        sta $0314
        lda #>$ea7e
        sta $0315
Być może Kernal po prostu włącza sobie przerwania IRQ po lub w trakcie ładowania pliku?

Re: [Kernal] Czytanie z dysku a czytanie z klawiatury

: 23 lut 2009, 23:29
autor: fenek
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.

: 23 lut 2009, 23:50
autor: Izaak Berenbaum
sei posyla cos na stos ? :shock: afaik 2 cykle- pierwszy pobranie instrukcji,w drugim ustawienie I=1. moar info pls.

: 24 lut 2009, 09:42
autor: skull
Aby dokładniej to wyjaśnić trzebaby się zagłębić w kernal, ale uruchomiłem ten kawałek kodu co wpisałeś przedtem stawiając SEI.
Okazuje się, że po jsr $ffd5 już statusu interrupt nie ma (możesz sobie to wszystko sprawdzać w monitorze VICE) - czyli gdzieś w kernalu jest instrukcja CLI.
Co się dzieje po tym można się tylko domyślać (albo prześledź całą drogę w monitorze VIC), ale zdaje się że automatycznie wraca do podstawowej obsługi przerwań 0314/0315 i zależnie od tego co tam się właśnie znajduje to "wywołuje".
Wniosek z tego taki, że wczytywanie w ten sposób nie powinno odbywać się po SEI, czyli przez ten czas niech działa normalne przerwanie kernala.

: 24 lut 2009, 09:44
autor: skull
...albo, musisz przerobić sobię na własną procedurę $ffd5

: 24 lut 2009, 10:43
autor: fenek
>sei posyla cos na stos ?
Tak, posyła kaczki i czarownice.

: 24 lut 2009, 11:28
autor: Izaak Berenbaum
no to brzmi bardziej prawdopodobnie niz 3 bajty.

Re: [Kernal] Czytanie z dysku a czytanie z klawiatury

: 24 lut 2009, 20:00
autor: DJ Gruby
Przyczyna tego problemu okazała się być trywialna, a błąd zaistniał, i tutaj zaskoczenie, po mojej stronie... Otóż umieściłem sobie procedurę decrunchera w obszarze pamięci $0200-$02c5. Tymczasem nawet pobieżne przejrzenie kodu wykonywanego przez Kernal uświadomiło mi, że ten fragment pamięci jest wykorzystywany w trakcie realizacji procedur I/O. Do tej pory przy tak umieszczonym decruncherze kod zawsze działał poprawnie, ponieważ używałem IRQ loaderów... Ale odczyt pliku za pomocą procedur Kernala tego już nie przepuścił... Dziękuję za wszystkie pomocne sugestie!

Re: [Kernal] Czytanie z dysku a czytanie z klawiatury

: 25 lut 2009, 10:04
autor: fenek
ROTFL :) 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 :)
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 :)

: 25 lut 2009, 11:07
autor: skull
:) czyli jak klikałeś klawiszami to zmieniał się bufor klawiatury (właśnie gdzieś w adresach $200-$300) i robił sieczke z twoim depakerem - nic dziwnego, że nagle pojawił się JAM :)
Ale co to za giera ?

Re: [Kernal] Czytanie z dysku a czytanie z klawiatury

: 25 lut 2009, 11:35
autor: DJ Gruby
fenek pisze:Jak robisz wczytywanie hi-score do gry to powinienes jeszcze zabezpieczyc gre a raczej obszar pamieci przed przeladowaniem przez plik hi-score.
A masz jakieś konkretne rozwiązania takowego problemu?
skull pisze:Ale co to za giera?
Już wkrótce szczegółowe informacje zostaną opublikowane na stosownej stronie internetowej (na pewno dowiecie się o tym na niniejszym forum).

: 25 lut 2009, 14:43
autor: elban
mam nadzieje, ze czolgi.

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

: 25 lut 2009, 15:45
autor: DJ Gruby
elban pisze:mam nadzieje, ze czolgi.

ta super produkcja na pewno wymaga ukonczenia. Kupie orriesa, slowo!
Trzymam Cię za słowo! :]

Re: [Kernal] Czytanie z dysku a czytanie z klawiatury

: 25 lut 2009, 17:59
autor: Izaak Berenbaum
fenek pisze:ROTFL :) 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 :)
wat ? przeciez doskonale zrozumialem twoje posty,zapytalem tylko o ten fragment:
fenek pisze:rozkaz SEI przy ladowaniu zablokuje przerwania i posle chyba 3(4) bajty na stos.
sei nigdy nie wysyla nic na stos.

co do gry to koncepcja czolgow jak tanks na pegasusie czy cos innego ? ukazal sie/ukradziono juz jakis preview ?

Re: [Kernal] Czytanie z dysku a czytanie z klawiatury

: 25 lut 2009, 18:52
autor: fenek
>sei nigdy nie wysyla nic na stos.
Wiem, ja potrafie siegnac do opisu instrukcji procesora i opisu mapy pamieci itp. ... albo potrafilem

: 25 lut 2009, 19:52
autor: k.
to robi przerwanie jak mniemam miałeś skrót anty-myślowy.
Fenek a wektorówkę na tych liniach z AA skończyłeś?

: 25 lut 2009, 22:14
autor: fenek
>
>to robi przerwanie jak mniemam miałeś skrót anty-myślowy.
>
To nie był skrót anty-myślowy, celowo chciałem wprowadzić Cactusa w blad
zeby jeszcze raz sam przejrzal CALE zrodlo i rozpiske pamieci, jak widac zrobil to i jest szansa ze nastepnym razem bedzie o tym pamietal.
>
> Fenek a wektorówkę na tych liniach z AA skończyłeś?[/quote]
>
Wektorowka z tymi liniami z antyaliasem aka wu-lines jest w stanie
w jakim byla pokazywana na ostatnim pierniku. Cos tam dopisalem
do rozdzielania rodzaji lini i szybkie procki zmieniajace kierunek w
szybkich kodach per piksel. Nie chce mi sie juz do tego zagladac, moge
wystawic na allegro :)

Re: [Kernal] Czytanie z dysku a czytanie z klawiatury

: 26 lut 2009, 11:49
autor: elban
Izaak Berenbaum pisze: co do gry to koncepcja czolgow jak tanks na pegasusie czy cos innego ? ukazal sie/ukradziono juz jakis preview ?
jest to gra, ktora opisal nam slownie Cactus na jakims party (2-3 lata temu). Barwnosc tego opisu, zaskakujace funkcjonalnosci oraz oryginalny pomysl sprawily, ze 10 osob lezalo na ziemi - to gra na ktora wszyscy czekamy (patrz watek - ulubione gry). Jakbys slyszal ta opowiesc - niepotrzebny bylby preview. Byc moze Cactus zechce ja opisac na forum. ;)

opis gry byl tez okraszony nielichymi offtopicami typu: 'jak sie robi zdjecia w okularach to wychodza bardziej ostre' i tym podobne (pamieta ktos?)