atarionline.pl MPT przykład utworu z samplami - 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
      • CommentTime3 Aug 2025 12:24 zmieniony
       
      Poszukiwana/poszukiwany;
      przykład utworu w Music Pro Tracker (by SoTe) z wykorzystaniem sampli.
      Jeśli to marzenie ściętej głowy, proszę o sprostowanie.

      P.S
      Uparcie i skrycie poszukuje prostego, ugruntowanego, bezproblemowego ;)
      Zagrania synthu z POKEY w mixie z samplami.

      Z uwagi na niską wiedzę techniczną nie skorzystam z opcji jak np. z REHARDEN, wspomniane w:
      ->link<-
      Dlatego upatruje szansy w Music Pro Tracker i dostępnym playerze w Mad Pascalu.
      ->link<-
      • 2: CommentAuthortebe
      • CommentTime3 Aug 2025 13:09
       
      ->link<-

      Music Pro Tracker w bazie Atarionline:

      ->link<-
      • 3: CommentAuthormakary
      • CommentTime3 Aug 2025 13:19
       
      @tonual: załączam muzyczkę kiedyś popełnioną. .D8 i .MD1 to pliki do MPT. .XEX do ewentualnego odsłuchu dla chętnych.
      • 4: CommentAuthortonual
      • CommentTime3 Aug 2025 17:50
       
      @makary dziękuje za przykład, odpaliłem .xex na 65XE i brzmi super!

      Czy w załączniku pominąłeś podstawowy plik nutamb.mpt?

      Brakuje dokumentacji obsługi programu Music Pro Tracker - jedyne znalazłem to krótkie instrukcje nt. FILE/TRACK/PATTERN/VOICE.
      ->link<-


      Jak poskładałeś w całość ten utwór - czy jest dokumentacja jak przygotować/używać sample?
      • 5: CommentAuthortebe
      • CommentTime3 Aug 2025 18:32
       
      podałem w pierwszym linku post #2

      na dole strony będzie link:

      "Obraz dyskietki z trzema wersjami MPT oraz pełna dokumentacja:"


      inne informacja na temat MPT
      ->link<-
    1.  
      Here are some polish texts regarding MPT, which I do not understand at all. (Google translate did not help much.) They were on the ATR image of MPT 2.4
      • 7:
         
        CommentAuthorKrystone
      • CommentTime4 Aug 2025 20:04
       
      CharlieChaplin: You can use most AI tools, such as DeepSeek.com to ask it to convert it from ATARI to ASCII and then ask for a translation from Polish to English. Also, to translate well, you could use DEEPL.com. Greetings!
      • 8: CommentAuthortonual
      • CommentTime5 Aug 2025 09:24 zmieniony
       
      Najbardziej pomocna paczka z linku od @tebe, repostuje;
      ->link<-
      ->link<-

      Jest to obraz dysku, więc trzeba wydostać dokumentacje np używając... javascript ;)
      ->link<-

      Mam z kolei problem z Altirrą:
      Uruchomiony Music Pro Tracker nie jest w stanie załadować utworu .mpt z dysku. Leci error
      "C10 Error 130"

      Stworzyłem obraz .atr z muzyczkami .mpt (przy pomocy dir2atr), i podmontowałem go jako
      dysk D1 w Altirra.

      MPT bootuje z pliku .xex
      W menu MPT wybieram File/Load i próbuje wpisywać:
      D:SONG123.MPT
      D1:SONG123.MPT
      SONG123.MPT

      Nic z tego nie działa, leci wspomniany error.
      Przeglądam obraz .atr narzędziem z Altirry i widzę pliki utworów, niby wszystko jest na stole.

      Ta sama operacja na stockowym a8 (65XE) działa ale robię trochę inaczej:
      z SIO2SD ładuje Music Pro Tracker (.xex), później montuje plik utworu .MPT na D1:
      i z menu File/Load:
      SONG123.MPT

      Z tego co rozumiem na Altirra można montować tylko obrazy dysków, nie pliki (.mpt).
      Czy ktoś udrożnił ścieżkę ładowanie .mpt do Music Pro Tracker na Altirra?
      • 9: CommentAuthortebe
      • CommentTime5 Aug 2025 10:06 zmieniony
       
      żeby działały operacje I/O w pamięci Atari musi znajdować się DOS, czyli menadżer wszystkich operacji I/O związanych z dyskietką

      potrzebujesz ATR-a z DOS-em, na którym masz MPT i pozostałe pliki, uruchamiasz takiego ATR-a, startuje DOS, z DOS-a uruchamiasz MPT

      możemy podpiąć dyskietki ATR pod Altirrą i przy pomocy DOSu kopiować między nimi dane (warto pamiętać że Altirra umożliwia realne i wirtualne operacje na ATR, więc powinniśmy to odpowiednio skonfigurować inaczej nasze zmiany ulegną zapomnieniu po zamknięciu Altirry)

      w załączniku zaincjowana dyskietka (ATR) w formacie D (180K) DOS-em II64, moja podręczna dyskietka

      jak kasować takiego ATR-a pod DOSII64?

      CL# kasuje całą zawartość
      IN# inicjuje dyskietkę DOS-em

      kopiowanie
      COP D1:FILENAME D2:FILENAME

      można użyć
      COP D1:*.MPT D2:
      • 10: CommentAuthortonual
      • CommentTime6 Aug 2025 17:14 zmieniony
       
      @tebe dziękuje za wyjaśnienie podstaw.

      Wykorzystałem gotowy obraz z
      ->link<-
      i dodałem do obrazu pliki BARTMAN.MPT i .SMP (załącznik Mpt24s_and_docs.ATR)

      i teraz na 65XE z SD2SIO odpalam ten obraz i wszystko idzie legitnie:
      - najpierw odpala się DOS i UI
      - wpisuje MPT24.COM i ładuje się MPT
      - już w programie MPT używam "load" i wpisuje BARTMAN.MPT
      - utwór poprawnie się ładuje
      - z menu "Special" ładuje sampla BARTMAN.SMP


      Tej samej operacji nie jestem w stanie zrobić na Altirra (z tym samym obrazem z załącznika). Obraz nie ładuje się - czarny ekran.

      Proszę o test jeśli ktoś ma chwilę, ponieważ u mnie podejrzewam patologię i zwyrodnienia bo działam na wine (OSX, M2). Altirra jest na "fabrycznej" konfiguracji.

      wine ~/retro_dev/Altirra-4.31/Altirra64.exe /gdi%
      • 11: CommentAuthortonual
      • CommentTime6 Aug 2025 17:36 zmieniony
       
      btw. sprawdziłem czy BARTMAN.MPT będzie odgrywany z samplami (BARTMAN.SMP) korzystając z playera:
      Mad-Pascal/samples/a8/sound/mpt

      Niestety sample nie grają.

      Czy to nie jest zaimplementowane czy to kwestia dodanie sampli w pliku .rc?

      ; to jest player MPT
      mpt_player MPTPLAY

      # to jest modul
      mpt_modul MPT 'bartman.mpt'
      • 12: CommentAuthorVidol
      • CommentTime6 Aug 2025 18:14
       
      Prawdopodobnie używasz playera do odgrywania tylko mpt a nie mpt+sample.
      • 13: CommentAuthortebe
      • CommentTime6 Aug 2025 18:32
       
      zdecydowanie MPT w Mad Pascal gra tylko w werji bez sampli, player do sampli jest inny
      • 14: CommentAuthortonual
      • CommentTime6 Aug 2025 19:34
       
      @Vidolczy masz url do źródeł takie playera mpt+sample ?
      @tebe czy jest możliwość pożenienia tego w Mad Pascalu korzystając z
      asm
      {
      }
      czy to w praktyce będzie droga przez mękę albo niewykonalne?
      • 15: CommentAuthortebe
      • CommentTime6 Aug 2025 23:58
       
      nie mam playera MPT z samplami
      • 16: CommentAuthorVidol
      • CommentTime7 Aug 2025 05:49
       
      @tonual: zadnego url nie znam. Najlepiej to zapytać Sebana lub Mikera.
      • 17: CommentAuthortebe
      • CommentTime7 Aug 2025 15:54 zmieniony
       
      tutaj jest z przykładem od Heavena/TQA

      ->link<-

      są różne wersje, 1 kanał sampli, 2 kanały sampli

      ogólnie sample zawsze zajmują większość czasu CPU, na Atari nie ma DMA jak w Amidze, gdzie podajemy adres sampla i chip go pobiera z pamięci, tutaj CPU musi odwalać całą robotę
      • 18: CommentAuthortonual
      • CommentTime9 Aug 2025 17:45
       
      @makary
      z dyskusji na forum z linka podanego przez @tebe
      ściągnąłem źródła playera z odtwarzaniem sampli (załącznik).

      Udało się to skompilować i użyć za przykład Twojego utworu (pliki nuta.MD1, nuta.D8).

      ..
      org $8000
      ins "nuta.d8"

      org $a000
      msx_module
      ins "nuta.md1",6

      run start


      mads mpt_player_sample.asm -o:mpt_play.xex -x

      Wynikowy program mpt_play.xex odgrywa muzyczkę, ale brak odtwarzania sampli.
      Dla porównania załączyłem orginalny program nuta.xex gdzie sample grają.

      @makary czy kompilowałeś nuta.xex ze źródeł i czy możesz się nimi podzielić?
      A może coś nie tak z adresem na sample (org 8000?)

      P.S testuje na stockowym 65XE
      • 19: CommentAuthormakary
      • CommentTime9 Aug 2025 18:41
       
      hej, o ile dobrze pamiętam, to zrobiłem najpierw sap'a z tych plików pod mpt, a potem z sap'a zrobiłem xex'a. Nie umiem w kodowanie, po prostu używałem chyba ASAP + Altirra.
      • 20: CommentAuthortebe
      • CommentTime9 Aug 2025 21:42 zmieniony
       
      w załączniku przykłady 3 muzyk z samplami (MD1) + kod źródłowy

      sample ładowane są od adresu $9000, muzyczki mają adres najczęściej $a000 więc kolidują z samplami, potrzebna jest relokacja (mpt_relocator.mac)

      działa z MD1 (D15, D8), z MD2 już nie specjalnie (może jakaś inna sekwencja inicjalizacji jest wymagana)

      player MPT uruchamiany jest na VBL, a player sampli w głównej pętli poza przerwaniem, cała pozostała moc CPU idzie w sample

      do statycznych obrazków się nada, w czasach świetności MPT+sample to była konkurencja dla prywatnego trackera Liebicha
      • 21: CommentAuthortonual
      • CommentTime12 Aug 2025 14:29
       
      @tebe dzięki wielki za działający kod w .asm!


      Teraz jak już to mam na wyciągnięcie ręki, będę próbował zlinkować .obx w Mad Pascalu i z niego wołać "start"
      • 22: CommentAuthortebe
      • CommentTime12 Aug 2025 14:37
       
      Mono pracuje jeszcze nad swoją uniwersalną wersją playera z SDX, tak żeby można grać MD1 i MD2
      • 23: CommentAuthortonual
      • CommentTime12 Aug 2025 19:51
       
      @makary podziel się proszę jeszcze jak sample przygotować pod "format" .MD1.
      Czy da się to ogarnąć w Audactiy? Jaka jest wgl. teoria?
      • 24: CommentAuthortebe
      • CommentTime12 Aug 2025 21:11
       
      były oddzielne programy które dokonywały konwersji sampli z Amigi, ogólnie to nie problem stworzyć sampla 8Khz, 15Khz i zapisać go jako WAV, PCM bez kompresji, nawet jak program zapisze to jako 4bit, to będzie to tylko bajt z 4 bitami informacji

      będzie trzeba sobie stworzyć program który dwa kolejne bajty z takiego PCM-a zapisze jako starszy i młodszy nibble, no i należy pamiętać aby długość sampla była wielokrotnością strony pamięci (256 bajtów)

      nagłówek sampli D8, D15 to 32 bajty, 16 bajtów starszych adresów początku sampla i 16 bajtów starszych adresów końca sampla

      dlatego załadowanie sampli do pamięci pod wybrany adres inny niż domyślne $9000 wymaga przeliczenia tych starszych bajtów adresów z nagłówka
      • 25: CommentAuthortonual
      • CommentTime17 Aug 2025 16:18 (3 dni temu)
       
      Program do przygotowania sampla w formacie .D8, D15 jeszcze do ogarnięcia :), ale
      wykorzystanie playera w MP okazało się wypadkiem przy pracy.

      Zachęcony możliwościami skompilowałem player do .obx podlinkowałem w .pas, zawołałem start ;) i.. wybuchło. KONIEC


      Praca u podstaw. Zanim zorientowałem się jak despotyczny jest kod playera, wrzuciłem zadanie analityczne do "asystenta" i po wynikach widzę, że osadzenie tego w MP jest udręką przez piekło albo lepiej w ogóle o tym nie myśleć.

      "wyświetlenie obrazka" podczas odgrywania .md1 na zadanie domowe, ale w .asm.


      Raport "asystenta":

      Zero-Page ($00-$FF):

      Mad Pascal reserves zero-page for its runtime:
      EDX/ECX/EAX: 32-bit registers at zero-page (typically $80-$8B or similar; exact locations depend on compilation but often overlap $80-$FF user area). These are used for REGISTER parameters (first 3 params in procs).
      Software stack pointer: Tied to X-register usage.
      Other internals: Pointers, temps (e.g., $CB-$CE for pointers, but variable).

      Player code uses $EC-$FF (e.g., addr=$EC, audzer=$F0, adrsmp=$FE). This is in the BASIC/user area ($80-$FF), which Mad Pascal also uses for globals/locals if ABSOLUTE or REGISTER.
      Collision Risk: High. $EC-$FF might overlap Mad Pascal's EDX/ECX/EAX or other temps. Atari OS reserves $00-$7F (cleared on warmstart), so player's usage is in "safe" user space but conflicts with Pascal runtime.
      Fix: Relocate player zero-page vars to a dedicated block, e.g., $CB-$DF (check Mad Pascal map via -t switch). Or make them non-zero-page (slower but safer). Use .public in ASM to expose as ABSOLUTE in Pascal (e.g., var addr: word absolute $EC; but remap to avoid overlap).


      Main Memory:

      Player originates at $2000, loads music at $5000 (msx), samples at $9000.
      Mad Pascal: User code starts ~$2000+ (after runtime), globals at $0600 or $A000. Screen/Display List often at $BC00+ (default GR.0). Extended RAM not used by default.
      VBI vector (548-549 = $0224-$0225, VVBLKD shadow).
      Collision Risk: Low for code/data if linked as .obx (relocatable). But VBI install overwrites OS vector—Mad Pascal may use VBI for its own (e.g., if ROMOFF or custom interrupts). Player pokes POKEY ($D200+), safe but ensure no concurrent access.
      Fix: Use relocatable .obx; Mad Pascal handles via {$LINK}. For VBI, make it an INTERRUPT proc in ASM (save A/X/Y, RTI end). Avoid $C000-$FFFF writes unless {$DEFINE ROMOFF} (player doesn't use, so safe). Samples at $9000 avoid screen mem.


      Stack ($0100-$01FF):

      Grows down from $01FF; Mad Pascal uses for calls (X-reg stack).
      Player VBI (vbl) calls play, jumps to $E462 (SYSVBV).
      Collision Risk: Medium. If VBI depth > stack space, overflow. Player doesn't push much, but combined with Pascal calls, risk.
      Fix: Keep VBI lean; save/restore stack explicitly if needed.



      Register Conflicts:

      X-Register: Mad Pascal reserves X for software stack (parameter passing, locals). MUST PRESERVE in all ASM code—push/pull if modified.

      Player code: Heavily uses X (e.g., channel loops ldx #3; dex; bpl), modifies without save.
      Collision Risk: Critical—will crash Pascal stack if not preserved.
      Fix: In all procedures, txa; pha at start, pla; tax at end. Especially in play (VBI).


      A/Y Registers: Free, but in INTERRUPT procs, save/restore all (A/X/Y) manually.

      Player: Modifies freely.
      Fix: For VBI (play), wrap with save/restore.


      Other: No flags/processor status issues noted.

      Other Conflicts:

      Interrupts: Player sets custom VBI, calls play. Mad Pascal INTERRUPT procs must end with RTI, not RTS/JMP.

      Fix: Change play to RTI-end; declare as procedure Play; interrupt; assembler;.


      Linking/Compilation: Player uses .org $2000, not relocatable by default.

      Fix: Compile with mads mpt_player.asm -hm -o:mpt_player.obx -xi:<mad_pascal_base_path> for Mad Pascal headers (.hea). Use .proc/.endp for procedures, .public for exports.


      ROMOFF: Player doesn't use, but if Pascal enables, watch DLI/VBI stability (player has no DLI).
      CPU Load: 15 kHz sample mode heavy; test in Pascal loop for slowdown.

      General Rework Strategy:

      Make code relocatable: Remove fixed .org, use labels.
      Expose procs/vars: .proc InitSong .endp, etc.; .public pozptr for position read.
      Preserve X everywhere.
      Compile to .obx, link in Pascal with {$LINK mpt_player.obx}, include .hea for declarations.

      Step 2: Reorganized Assembly Code into Procedures
      I'll provide reworked ASM code snippets (not full; assume paste into original). Reorganize into:

      InitSong: Combines original start inits (music/sample load, tables).
      StartSong: Sets VBI, starts playback (czygrc=1).
      PlaySong: The play routine, now a proc (for VBI call).
      Expose pozptr as .public byte for Pascal read.
      Add X-preserve wrappers.
      Relocate zero-page to $CB-$DF (example; verify no overlap via Pascal map).
      • 26:
         
        CommentAuthorMaW
      • CommentTime17 Aug 2025 16:57 (3 dni temu) zmieniony
       
      Którego "asystenta" ?
      Najlepsze informacje, co zajmuje MadPascal, podaje sam MP podczas kompilacji (patrz wątek MP - początki)
      • 27: CommentAuthortonual
      • CommentTime17 Aug 2025 19:46 (3 dni temu)
       
      Asystentem był SuperGrok.

      Poukładanie w pamięci wydaje się mniejszym wysiłkiem, niż praca w rozczytaniu jakie zasoby zajmuje player - z czego korzysta podczas pracy (przerwanie, rejestry itd).
      • 28: CommentAuthortebe
      • CommentTime19 Aug 2025 01:17 (2 dni temu)
       
      ->link<-

      nowy zasób MD1, MD1PLAY, nowy unit MD1

      przykłady w w/w linku
      • 29: CommentAuthortebe
      • CommentTime19 Aug 2025 08:13 (2 dni temu)
       
      dodatkowo poprawiony unit SMP, odtwarza sample dla NTSC/PAL

      NTSC wymagał dodatkowego 'sta irqens'

      ->link<-
      • 30: CommentAuthortonual
      • CommentTime21 Aug 2025 14:17 (2 godzin temu) zmieniony
       
      @tebe

      OMG (| - _ - |)
      ->link<-
      Dzięki! Pozostaje dłużnikiem.


      @MaW wrzuć co masz na wyjściu ze swojego asystenta, porównamy robotę robocików.
      Generalnie to zapytałem w jakim elementach implementacja playera MD1 w .asm koliduje z MP (pamięć, runtime itd).