Skrypt forum został zaktualizowany
Wszelakie błędy, pytania oraz prośby o nową funkcjonalność zgłaszajcie w tym wątku

Skleroza mnie boli a więc wiele podpowiedzi mi będzie potrzebne, aby napisać ponownie coś po ponad 20 latach.

Szukasz drobnej pomocy przy kodowaniu, albo chcesz przedstawić światu swoją gotową lub w trakcie realizacji produkcję? To właściwy dział.
Wiadomość
Autor
AJOT
Posty: 15
Rejestracja: śr mar 27, 2019 7:55 pm
Grupa: Sentinel
Kontaktowanie:

Skleroza mnie boli a więc wiele podpowiedzi mi będzie potrzebne, aby napisać ponownie coś po ponad 20 latach.

#1 Postautor: AJOT » śr gru 04, 2019 10:40 pm

A więc jak w tytule, prace idą opornie, ale cały czas coś tam kombinuję, aktualnie mam taki oto wyciąg z kodu:

Kod: Zaznacz cały

        jsr $1000

      sei

      lda #<irq_01
      sta $0314
      lda #>irq_01
      sta $0315
      
      lda #$0
      sta $dc0d
      
      ldy #$0
      sty $dc0e
      iny
      sty $d01a
      
      lda $d011
      and #$7f
      sta $d011
      lda #$fa
      sta $d012


      cli

Kod: Zaznacz cały

irq_01:
      ldx $d020
      ldy $d021
      lda $d011
      pha
      and #%11110111
      sta $d011
      stx $d021
      
      tya
      pha
      
      dec $d020
      jsr $1003   
      inc $d020   

      pla
      tay
      pla
      sta $d011
      tya
      pha
      

      
irq_01b:      
      lda $d011
      and #$80
      cmp #$0
      bne irq_01b
            
      pla
      ldx #$32
irq_01a:
      cpx $d012
      bne irq_01a
      
      nop
      nop
      nop
      nop
      nop
      nop
      nop
      nop
      nop
      nop
      nop
      nop
      nop
      nop
      nop
      nop
      nop
      nop
      nop
      nop
      nop
      nop
      nop
      nop
      nop
      
      sta $d021
      
      dec $d019
      lda $dc0d
      pla
      tay
      pla
      tax
      pla
      rti


Podsumowując $1000 i $1003 to odwołanie do muzyki tworzonej w DMC, problem w tym, że wywołując przerwanie raz program ruszy bez problemu a za drugim razem mi się wiesza. Patrzyłem po moim starym kodzie (który tworzyłem ponad 20 lat temu -a więc i też stąd ta skleroza) i nie wiem w czym problem.
Przerwanie powinno być złapane w momencie otwarcia ramki dolnej (a tym samym górnej), zamiana otwartej ramki na kolor ramki, puszczenie nuty muzycznej, odczekaniu do zejścia ramki górnej i włączenia koloru tła.

Awatar użytkownika
wackee
Posty: 1521
Rejestracja: ndz paź 05, 2008 11:05 pm
Grupa: Arise
Kontaktowanie:

Re: Skleroza mnie boli a więc wiele podpowiedzi mi będzie potrzebne, aby napisać ponownie coś po ponad 20 latach.

#2 Postautor: wackee » czw gru 05, 2019 7:43 am

A co masz po CLI? Wstaw tam jmp * chociaż. Dla mnie to dlatego się wywala, że po włączeniu przerwań lądujesz w BRK.
* jak nie załapałeś tego żartu, to trudno.

Awatar użytkownika
juntek
Posty: 54
Rejestracja: ndz wrz 23, 2018 8:17 pm

Re: Skleroza mnie boli a więc wiele podpowiedzi mi będzie potrzebne, aby napisać ponownie coś po ponad 20 latach.

#3 Postautor: juntek » czw gru 05, 2019 8:31 am

W kodzie obsługi przerwania masz błąd polegający na tym, że na początku nie zachowujesz na stosie wartości rejestrów A, X, Y ale na koniec je ze stosu zdejmujesz (sekwencja: pla, tay, pla, tax, pla). Żeby się zgadzało to wchodząc do procedury powinieneś dać: pha, txa, pha, tya, pha

W rezultacie na koniec procedury obsługi przerwania wskaźnik stosu masz 3 bajty niżej niż podczas wejścia do procedury przerwania. Procesor nie jest więc w stanie poprawnie odtworzyć wartości rejestrów PC i SP które zapisał sobie na stosie tuż przed przekazaniem sterowania do procedury obsługi przerwania i dlatego kod wylatuje w powietrze.
Dodatkowo z przerwania wychodzisz z innymi wartościami rejestrów A,X,Y niż miałeś na wejściu, a powinny być takie same.
Stamps back please!

AJOT
Posty: 15
Rejestracja: śr mar 27, 2019 7:55 pm
Grupa: Sentinel
Kontaktowanie:

Re: Skleroza mnie boli a więc wiele podpowiedzi mi będzie potrzebne, aby napisać ponownie coś po ponad 20 latach.

#4 Postautor: AJOT » pt gru 06, 2019 9:18 pm

wackee pisze:A co masz po CLI? Wstaw tam jmp * chociaż. Dla mnie to dlatego się wywala, że po włączeniu przerwań lądujesz w BRK.

Po CLI jest dalsza część programu i akurat to nie jest BRK, nie tędy droga...

AJOT
Posty: 15
Rejestracja: śr mar 27, 2019 7:55 pm
Grupa: Sentinel
Kontaktowanie:

Re: Skleroza mnie boli a więc wiele podpowiedzi mi będzie potrzebne, aby napisać ponownie coś po ponad 20 latach.

#5 Postautor: AJOT » pt gru 06, 2019 9:26 pm

juntek pisze:W kodzie obsługi przerwania masz błąd polegający na tym, że na początku nie zachowujesz na stosie wartości rejestrów A, X, Y ale na koniec je ze stosu zdejmujesz (sekwencja: pla, tay, pla, tax, pla). Żeby się zgadzało to wchodząc do procedury powinieneś dać: pha, txa, pha, tya, pha

W rezultacie na koniec procedury obsługi przerwania wskaźnik stosu masz 3 bajty niżej niż podczas wejścia do procedury przerwania. Procesor nie jest więc w stanie poprawnie odtworzyć wartości rejestrów PC i SP które zapisał sobie na stosie tuż przed przekazaniem sterowania do procedury obsługi przerwania i dlatego kod wylatuje w powietrze.
Dodatkowo z przerwania wychodzisz z innymi wartościami rejestrów A,X,Y niż miałeś na wejściu, a powinny być takie same.


Drogi Panie, z tego co kojarzę C64 wywołuje adres $EA31, patrząc na znajdujący się tam kod czytamy:

Kod: Zaznacz cały

jsr $ffea

nie za uwarzyłem żadnego zrzutu na stos, C64 robi to automatycznie -to nie PC.

Awatar użytkownika
juntek
Posty: 54
Rejestracja: ndz wrz 23, 2018 8:17 pm

Re: Skleroza mnie boli a więc wiele podpowiedzi mi będzie potrzebne, aby napisać ponownie coś po ponad 20 latach.

#6 Postautor: juntek » sob gru 07, 2019 7:28 am

nie za uwarzyłem żadnego zrzutu na stos, C64 robi to automatycznie -to nie PC.

PC też robi to automatycznie. Ale masz rację - dopiero teraz zauważyłem że wektor przerwań ustawiasz w $0314/$0315 a nie w $fffe/$ffff i w takim przypadku faktycznie rejestry masz już wrzucone na stos przed wejściem do procedury obsługi przerwania. Skompilowałem i odpaliłem kilka razy na emulatorze Vice ten Twój kod ale bez odwołań do muzyki i ani razu mi się nie powiesił - może tu jest wskazówka?
Stamps back please!


Wróć do „Programowanie & Produkcje”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 1 gość