atarionline.pl Relokacja MD1 pomyślna, ale player crashuje - Forum Atarum

    Jeśli chcesz wziąć udział w dyskusjach na forum - zaloguj się. Jeżeli nie masz loginu - poproś o członkostwo.

    • :
    • :

    Vanilla 1.1.4 jest produktem Lussumo. Więcej informacji: Dokumentacja, Forum.

      • 1: CommentAuthortonual
      • CommentTime29 Oct 2025 21:05 zmieniony
       
      Na podstawie makra, które relokuje dane .md1 w czasie kompilacji:
      ->link<-

      piszę wersję w MP, które robi to w czasie działania programu, ładując dane z dysku:
      ->link<-
      LoadAndRelocateMD1(Const filename: String; new_address: word);

      Dobra wiadomość jest taka, że dla tego samego pliki .md1 relokacja dokonuje się identycznie w obu przypadkach. Aby to sprawdzić, zrzuciłem do plików pamięć a8 (od adrs $5000) i porównałem zawartości w hexDiff.

      Jest identyczna, również dla sampli.

      Do tego celu zestawiłem zrzut pamięci z działania relokacji w przykładzie md1_play.pas (repozytorium Mad Pascala).
      ->link<-


      Ale rozpacz bierze bo player .md1 crashuje a8 przy próbie zagrania.
      (Oczywiście wersja md1_play.pas odgrywa ten sam modułek poprawnie)

      Proszę o wskazówkę, co mogło pójść nie tak, skoro dalej jest już ta sama litania:
      msx.player := pointer(md1_player);
      msx.modul := pointer(module_addr);
      msx.sample := pointer(sample_addr);
      msx.init;

      P.S załączam obraz dysku z którego korzystam
      • 2: CommentAuthortonual
      • CommentTime30 Oct 2025 13:28 zmieniony
       
      Teraz myślę... że jest o jeden relokator za dużo (dlatego crash) i próbuje zrozumieć jak wyłączyć działanie tego z makra 'mpt_relocator'.

      Stąd pytanie o zasób 'MD1' - w jaki sposób korzysta z relokatora?
      Nie mogę znaleźć powiązania kiedy i jak to się odbywa, skoro wzmianka o mpt_relocator.mac jest tylko w komentarzu player'a - md1_player_reloc.asm

      ->link<-

      ->link<-

      ->link<-
      • 3: CommentAuthortebe
      • CommentTime1 Nov 2025 17:21 zmieniony
       
      jest OK, działa, tylko nie zwróciłeś uwagi na adresy pamięci

      ZPAGE: $0080..$00D3
      RTBUF: $0400..$04FF
      RTLIB: $20E1..$24E4
      SYSTEM: $251F..$2525
      CRT: $2526..$253A
      MISC: $253B..$2564
      MD1: $2565..$2728
      CODE: $2000..$2E46
      VARS: $2E47..$2E4C
      DATA: $2E4D..$51C1


      umieściłeś stałe wartości dla adresów w obszarze programu

      md1_player = $3000;
      module_addr = $5000;
      sample_addr = $6000;
      • 4: CommentAuthortonual
      • CommentTime1 Nov 2025 18:02 zmieniony
       
      Śliczne dzięki za pomoc i zwrócenie uwagi na raport kompilatora MP o przydziałach pamięci.
      (jak mogłem wgl na to nie patrzeć...)