[Kernal] Czytanie z dysku a czytanie z klawiatury

Szukasz drobnej pomocy przy kodowaniu, albo chcesz przedstawić światu swoją gotową lub w trakcie realizacji produkcję? To właściwy dział.
Wiadomość
Autor
DJ Gruby

[Kernal] Czytanie z dysku a czytanie z klawiatury

#1 Post 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.

Awatar użytkownika
Izaak Berenbaum
Posty: 185
Rejestracja: 15 wrz 2008, 23:10
Grupa: Tel Aviv

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

#2 Post 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.

DJ Gruby

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

#3 Post 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?

fenek
Posty: 95
Rejestracja: 15 wrz 2008, 20:43
Grupa: Arise

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

#4 Post 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.

Awatar użytkownika
Izaak Berenbaum
Posty: 185
Rejestracja: 15 wrz 2008, 23:10
Grupa: Tel Aviv

#5 Post autor: Izaak Berenbaum »

sei posyla cos na stos ? :shock: afaik 2 cykle- pierwszy pobranie instrukcji,w drugim ustawienie I=1. moar info pls.

Awatar użytkownika
skull
Posty: 760
Rejestracja: 15 wrz 2008, 08:18
Grupa: samar

#6 Post 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.
Bo pecet to zwykły banan...

Awatar użytkownika
skull
Posty: 760
Rejestracja: 15 wrz 2008, 08:18
Grupa: samar

#7 Post autor: skull »

...albo, musisz przerobić sobię na własną procedurę $ffd5
Bo pecet to zwykły banan...

fenek
Posty: 95
Rejestracja: 15 wrz 2008, 20:43
Grupa: Arise

#8 Post autor: fenek »

>sei posyla cos na stos ?
Tak, posyła kaczki i czarownice.

Awatar użytkownika
Izaak Berenbaum
Posty: 185
Rejestracja: 15 wrz 2008, 23:10
Grupa: Tel Aviv

#9 Post autor: Izaak Berenbaum »

no to brzmi bardziej prawdopodobnie niz 3 bajty.

DJ Gruby

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

#10 Post 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!

fenek
Posty: 95
Rejestracja: 15 wrz 2008, 20:43
Grupa: Arise

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

#11 Post 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 :)

Awatar użytkownika
skull
Posty: 760
Rejestracja: 15 wrz 2008, 08:18
Grupa: samar

#12 Post 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 ?
Bo pecet to zwykły banan...

DJ Gruby

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

#13 Post 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).

elban
Posty: 1603
Rejestracja: 17 wrz 2008, 11:19
Grupa: aRise

#14 Post autor: elban »

mam nadzieje, ze czolgi.

ta super produkcja na pewno wymaga ukonczenia. Kupie orriesa, slowo!
was twenty, is five, my friend...

DJ Gruby

#15 Post autor: DJ Gruby »

elban pisze:mam nadzieje, ze czolgi.

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

Awatar użytkownika
Izaak Berenbaum
Posty: 185
Rejestracja: 15 wrz 2008, 23:10
Grupa: Tel Aviv

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

#16 Post 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 ?

fenek
Posty: 95
Rejestracja: 15 wrz 2008, 20:43
Grupa: Arise

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

#17 Post autor: fenek »

>sei nigdy nie wysyla nic na stos.
Wiem, ja potrafie siegnac do opisu instrukcji procesora i opisu mapy pamieci itp. ... albo potrafilem

k.

#18 Post 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ś?

fenek
Posty: 95
Rejestracja: 15 wrz 2008, 20:43
Grupa: Arise

#19 Post 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 :)

elban
Posty: 1603
Rejestracja: 17 wrz 2008, 11:19
Grupa: aRise

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

#20 Post 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?)
was twenty, is five, my friend...

ODPOWIEDZ