Autor Wątek: Korzystanie z plików .ay w pasmo  (Przeczytany 12113 razy)

Tygrys

  • Administrator
  • *****
  • Wiadomości: 4537
  • Miejsce pobytu:
    Warszawa
  • mistrz ceremonii
Odp: Korzystanie z plików .ay w pasmo
« Odpowiedź #15 dnia: 2017.11.03, 08:27:09 »
Wykorzystując fragmenty programu, które umieściłeś wyżej oraz dodając brakującą procedurę inicjalizującą tabele przerwań, uzyskałem zamierzony efekt - muzyka gra, mam dostępny BASIC itp.

Dlatego obawiam się że robisz błąd podczas inicjalizacji tablicy przerwań. Bez tych brakujących procedur - nie mogę Ci powiedzieć co jest nie tak.

Ice

  • *
  • Wiadomości: 7
  • Miejsce pobytu:
    Kraków
Odp: Korzystanie z plików .ay w pasmo
« Odpowiedź #16 dnia: 2017.11.03, 12:50:00 »
wyglada to tak jak ponizej,
procedura uruchamiajaca przerwania chodzi jak nalezy, calos sie sypie jak
wywolywane jest $c005, niezaleznie czy wrzucam tam przekompilowany player przez pasmo czy tak jak radzil RafalM zrzut binariow zawierajacych player i muzyke (binaria powinny byc ladowane od $c000 (init $c000, play $c005)) eksportowane z Vortex trackera, includy dla pasmo sa zaremowane, wiadomo ze trzeba wybrac albo jedno albo drugie.
Skompilowanie playera i odpalenie pod przerwaniami nie zawiesza kompa ale tez nie odgrywa muzyki.
Z gory dziekuje za pomoc bo masz na bank wiecej doswiadczenia, ja teraz ogarniam debugger do pasmo bo mysle ze to pozwoli mi zdetektowac szybciej problem. Moze masz zrodla playera dla pasmo ktory chodzi jak nalezy, rosjanie najczesciej maja zrodla pod dosyc egzotyczne kompilatory a nie chce sie brac za przerabianie tego dla pasmo zeby nie walnac jakiejs glupoty i w konsekwencji szukac bledow gdzie indziej.

pozdrawiam


org $8000

rept    385
db      $81
endm

;$8181 interrupt routine
Interrupt:  DI                         
            PUSH AF                   
            PUSH BC
            PUSH DE
            PUSH HL
            PUSH IX
            EXX
            EX AF,AF'
            PUSH AF
            PUSH BC
            PUSH DE
            PUSH HL
            PUSH IY
            LD HL, $5800
            LD (HL),$AA
            CALL $C005   
            POP IY                   
            POP HL
            POP DE
            POP BC
            POP AF
            EXX
            EX AF,AF'
            POP IX
            POP HL
            POP DE
            POP BC
            POP AF
            EI
            JP  56                         
            ;RETI                       

   
start: 
    ;  LD    HL,music_data
      CALL  $C000 
      DI
      LD    A,$80
      LD    I,A
      IM    2
      EI
    ret
org $c000   
music_player:
    ;INCBIN "/Users/varna/Documents/zx spectrum/assembler/testay.bin"
    ;INCLUDE "/Users/varna/Documents/zx spectrum/assembler/PT3_player.asm"
music_data:   
    ;INCBIN "/Users/varna/Documents/zx spectrum/assembler/Karboflex.pt3"
end start

Tygrys

  • Administrator
  • *****
  • Wiadomości: 4537
  • Miejsce pobytu:
    Warszawa
  • mistrz ceremonii
Odp: Korzystanie z plików .ay w pasmo
« Odpowiedź #17 dnia: 2017.11.03, 13:39:27 »
Poprawiłem kilka rzeczy i zaczęło działać. W głównej mierze był problem z inicjalizacją modułu, a dokładniej - pod wskazanym adresem nie było modułu.
Nie wnikam w to co robi player, ale dane utworu muszą być koniecznie pod adresem $C86E. Zmiana adresu nic nie wnosi, oprócz tego że wiesza wszystko.

Ogólnie po moich poprawkach wygląda to tak:

Cytuj
org $8000

rept    257
db      $81
endm

;$8181 interrupt routine
org $8181
Interrupt:  DI
            PUSH AF
            PUSH BC
            PUSH DE
            PUSH HL
            PUSH IX
            EXX
            EX AF,AF'
            PUSH AF
            PUSH BC
            PUSH DE
            PUSH HL
            PUSH IY
            LD HL, $5800
            LD (HL),$AA
            CALL $C005
            POP IY
            POP HL
            POP DE
            POP BC
            POP AF
            EXX
            EX AF,AF'
            POP IX
            POP HL
            POP DE
            POP BC
            POP AF
            EI
            JP 56
            ;RETI

   
start:
     ; LD    HL,music_data
      CALL  $C000
      DI
      LD    A,$80
      LD    I,A
      IM    2
      EI
    ret

   org $c000
music_player:
   incbin "vtplayer.bin"

   org 51310
music_data:
   incbin "Karboflex.pt3"

end start

matofesi

  • *****
  • Wiadomości: 2048
  • Miejsce pobytu:
    Toruń/Poland
Odp: Korzystanie z plików .ay w pasmo
« Odpowiedź #18 dnia: 2017.11.03, 14:19:29 »
No dobra... Wziąłem kod @Ice, znalazłem tylko do niego stosowny moduł. Skompilowałem i... nie działało. Przekładałem playera binarnego, źródłowego i nawet swoją wersję, którą kiedyś - z jakiegoś powodu - disassemblowałem i dostosowywałem do relokowania... nie działało. Wziąłem kod Tygrysa, skompilowałem i... nie działało. I w tym momencie do mnie dotarło dlaczego ;) Miałem fuse ustawione w tryb emulacji 48k a tam domyślnie nie ma AYka. Włączyłem w opcjach dodatkowo "Melodik" i... nagle zaczęło grać. Gra oryginalny kod z binarnym playerem (testay.bin), gra kod Tygrysa (również po wywaleniu dodatkowego org'a przed ładowaniem modułu). Gra kod z moim playerem. Nie gra tylko wtedy jak się użyje załączonego PT3_player.asm.

Zajrzałem sobie do poszczególnych playerów... "mój", binarny od Tygrysa i binarny od Ice to zasadniczo dokładnie ten sam player. PT3_player.asm jest inny - różnice są niewielkie i wynikają prawdopodobnie z tego, że nie jest samomodyfikujący. "Nasza" wersja ma część zmiennych w obszarze playera i dlatego np. nie ruszy w ROMie. Nie wiem co jest inaczej w wersji PT3_player.asm, ale najwyraźniej różnica wystarczy, żeby muzyczka nie grała.

W razie czego "mój" player w załączniku.

Ice

  • *
  • Wiadomości: 7
  • Miejsce pobytu:
    Kraków
Odp: Korzystanie z plików .ay w pasmo
« Odpowiedź #19 dnia: 2017.11.04, 13:46:04 »
Wielkie dzieki panowie za pomoc:-)
mam nadzieje ze inni skorzystają z tego wątku bo w sumie dosyc istotna sprawa zostala rozebrana na podstawowe elementy:-)
Ja dam znac w tym watku gdybym znalazl jakies ciekawe rozwiazania w tej sprawie.

pozdrawiam

ps:

mam jeszcze jedno pytanie ktore moze byc dla was prozaiczne: jak "zawodowo" sprawdzic czy mamy do czynienia z 48k+ay czy ze 128k?
i jak poprawic kod zeby sie nie sypal na 128k, to sa sprawy zwiazane z poprawieniem obslugi przerwan w 128k czy chodzi o banki pamieci?
« Ostatnia zmiana: 2017.11.04, 14:26:23 wysłana przez Ice »

matofesi

  • *****
  • Wiadomości: 2048
  • Miejsce pobytu:
    Toruń/Poland
Odp: Korzystanie z plików .ay w pasmo
« Odpowiedź #20 dnia: 2017.11.04, 17:16:17 »
mam jeszcze jedno pytanie ktore moze byc dla was prozaiczne: jak "zawodowo" sprawdzic czy mamy do czynienia z 48k+ay czy ze 128k?
i jak poprawic kod zeby sie nie sypal na 128k, to sa sprawy zwiazane z poprawieniem obslugi przerwan w 128k czy chodzi o banki pamieci?

Są dwie (a właściwie trzy) sprawy: Pierwsza to oczywiście bankowanie pamięci. Żeby sprawdzić, czy masz stosowne banki zapisujesz bajt do pamięci gdzieś powyżej $c000, przełączasz bank, zapisujesz w to samo miejsce inną wartość, przełączasz z powrotem na pierwszy bank i sprawdzasz czy jest to, co zapisałeś za pierwszym razem. Można też sprawdzać zawartość ROMu itp., ale test bankowania jest najpewniejszy.
Druga sprawa to uruchamianie kodu na 128k w trybie 128 - jeśli całość ma współpracować z BASICem itp. to trzeba poza przełączaniem banków portem $7ffd dodatkowo modyfikować odpowiednie zmienne systemowe. No i oczywiście kod obsługi przerwań i tablica wektorów muszą siedzieć między $8000 a $c000 bo od $c000 pamięć może "zniknąć" jak się banki przełączą.
Dodatkowa trzecia sprawa nie ma strategicznego znaczenia przy "zwykłych" programach - 128 ma inaczej poustawiane stałe czasowe wyświetlania. A to oznacza, że jeśli chcesz pisać kod, który będzie robił mulitoclory czy efekty na borderze to wtedy musisz sprawdzić na czym kod się wykonuje i dostosować odpowiednio opóźnienia. I żeby było zabawniej to 128/szary +2 ma inne czasy niż +2A/+3 o wschodnich klonach bankujących zgodnie ze 128 nie mówię, bo tam w ogóle sprawa wygląda inaczej ;)