atarionline.pl MAD-Pascal - Początki - 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:
         
        CommentAuthorbocianu
      • CommentTime16 May 2019 13:05
       
      Pirxowi chodziło chyba, żebyś sprawdził czy rozkaz przełączania zestawu znaków się w ogóle wywołuje, wstawiając w to miejsce np. zmianę koloru ramki lub tła...
      • 2: CommentAuthorMADRAFi
      • CommentTime16 May 2019 20:05
       
      wykonuje sie , wystarczy ze wstawie ten sam zestaw znakow i mam inny obraz ;)
      • 3:
         
        CommentAuthorsun
      • CommentTime16 May 2019 23:05 zmieniony
       
      wniosek? drugi zestaw jest schrzaniony, albo nie załadował się tam, gdzie się spodziewasz, czyli adres 1 + $400 a tam jest sieczka. Poza tym... ciągle nie wiemy jaki używasz tryb. Zakładam że $02, więc $400 jest ok, ale może źle to widzę i nie jest to $02.

      CHBASE $D409 Write
      SHADOW: CHBAS $02F4
      Character Base Address
      This specifies the page of the base address for the character set. ANTIC Modes 2, 3, 4, and 5 use 128 characters in the character set and require the CHBASE value begin on a 1K boundary. ANTIC Modes 6 and 7 use 64 characters, so the CHBASE value must begin on a 512 byte boundary.
      • 4:
         
        CommentAuthorpirx
      • CommentTime17 May 2019 12:05 zmieniony
       
      LOGO_CHARSET_ADDRESS = $DC00;

      ROM masz wyłączony, bo to adres w ROM właśnie?
      • 5: CommentAuthorMADRAFi
      • CommentTime17 May 2019 22:05
       
      Skoro pod tym adresem jest wgrany font i sie pokazuje na ekranie, to chyba wylaczony :)

      jak dla mnie to pod adresem gdzie powinien znajdowac sie poczatek 2 zestawu fontu jest sieczka. Albo to co w pliku fnt nie jest tym czym powinno albo mad-pascal zle wczytuje ten plik 3kb.
      • 6: CommentAuthortebe
      • CommentTime18 May 2019 22:05
       
      ->link<-

      nowa wersja G2F z zapisem obrazka w trybie DLI do pliku *.PAS

      tylko zmiany kolorów, bez PMG, tylko w pierwszej linii nowego wiersza
      • 7:
         
        CommentAuthorDracon
      • CommentTime18 May 2019 22:05
       
      "The requested URL /graph2font_v4.0.2.7_full.7z was not found on this server."
      • 8: CommentAuthorMADRAFi
      • CommentTime18 May 2019 23:05
       
      Juz Tebe poprawil
      • 9: CommentAuthorMADRAFi
      • CommentTime19 May 2019 23:05
       
      Dzieki wytezonej pracy na spotkaniu udalo sie zlokalizowac blad w kodzie :)
      Zapomnialem przepisac prawidlowy adres pamieci ekranu. Akurat 2 font ladowal w miejscu ktory byl nadpisywany :)

      Polecam lokalne spotkania :)
      Udalo sie dzieki wspolpracy z kolega Krotkim zlokalizowac kilka innych bledow i je wyeliminowac.
      • 10: CommentAuthorgorgh
      • CommentTime20 May 2019 00:05
       
      Fajnie, to zawsze spora ulga
      • 11: CommentAuthortebe
      • CommentTime20 May 2019 01:05
       
      jest taka metoda, najlepiej właśnie komuś zacząć tłumaczyć jak działa program krok po kroku, zaczniemy wtedy zwracać uwagę na rzeczy które wydawały się nam oczywiste i które pomijaliśmy przez swoją oczywistość
      • 12:
         
        CommentAuthormav
      • CommentTime20 May 2019 11:05
       
      Może to być nawet gumowa kaczuszka.
      • 13:
         
        CommentAuthorbocianu
      • CommentTime20 May 2019 18:05
       
      ...ale koniecznie żółta :)
      • 14: CommentAuthorMADRAFi
      • CommentTime20 May 2019 21:05 zmieniony
       
      Szukam metody w jaki sposob mozna odtworzyc pojedynczy instrument spod mad pascala z pliku cmc.
      zakladam ze na 3 kanalach gra mi muzyka wykorzystujac unit cmc. 4 kanal chcialbym przeznaczyc wlasnie na efekty.
      Piszacy w asm pewnie maja to juz rozpracowane. W unicie CMC nic takiego nie wystepuje co moglbym uzyc jako gotowiec.


      Przy okazji jakby ktos mial jakolkolwiek muzyke ktora zostawila 1 kanal nieuzywany to bylbym wdzieczny. Przydalabay sie do testowania efektow.
      • 15:
         
        CommentAuthorsun
      • CommentTime21 May 2019 20:05
       
      Z tego co pamiętam, to CMC łączy 2 kanały w 1 16 bitowy dla basu na stałe, więc muza zabiera 4 kanały, ale mogę się mylić.
      • 16: CommentAuthorMADRAFi
      • CommentTime21 May 2019 21:05
       
      Nie mylisz sie. Musialbym miec 2 kanalowa muze z okazjonalnym 3 konalem tak by sie z efektami nie pokrylo.
      • 17: CommentAuthorurborg
      • CommentTime21 May 2019 21:05
       
      @sun
      Też tak pamiętam że cmc miało na sztywno 3 kanały z czego 1 16-bitowy.
      • 18: CommentAuthorMADRAFi
      • CommentTime22 May 2019 12:05 zmieniony
       
      Mam pewna obserwacje/problem i nie wiem z czego to wynika
      Tworze sobie display liste ktora zawiera 2 tryby tekstowe z rozna iloscia kolorow.
      Rozne linie musza miec rozny font i kolory.
      I teraz sa 2 przypadki:
      1. display lista z 1 DLI
      dl_start
      dta DL_DLI + DL_BLANK8
      dta DL_MODE_40x24T5 + DL_LMS, a(TXT_ADDRESS)
      :12 dta DL_MODE_40x24T5
      :11 dta DL_MODE_40x24T2
      dta DL_BLANK8
      dta DL_JVB, a(dl_start)


      W tym wypadku DLI ma zliczanie numerow linii i zmiane parametrow wedlug linii.
      Wszystko dziala oprocz 1 kreski ktorej nie moge sie pozbyc ( jakies smieci w pamieci)

      2. display lista z 4 DLI - kazda odpowiada za wprowadzenie zmiany w foncie i/lub kolorach

      dl_start
      dta DL_DLI + DL_BLANK8
      dta DL_MODE_40x24T5 + DL_LMS, a(TXT_ADDRESS)
      :5 dta DL_MODE_40x24T5
      :5 dta DL_DLI + DL_MODE_40x24T5
      ;:2 dta DL_DLI + DL_MODE_40x24T5
      :2 dta DL_MODE_40x24T5
      :11 dta DL_DLI + DL_MODE_40x24T2
      dta DL_BLANK8
      dta DL_JVB, a(dl_start)


      I tutaj powstaje problem, gdyz nie wszystkie DLi sie wykonuja.
      Zauwazylem ze max moga wykonac sie 2, gdy probuje uzyc 3 lub 4 obraz jest nieprawidlowy, gdyz DLI sie nie wykonaly wiec nie zaladowaly prawidlowego fontu.


      W VBL jest odgrywana muzyka cmc w tym czasie.

      Jakies sugestie jak to rozwiazac?
      • 19: CommentAuthortebe
      • CommentTime22 May 2019 13:05
       
      adres display listy, używasz predefiniowanej tablicy która jest umieszczana w pamięci od adresu CODE_ORIGIN+... na który nie masz wpływu, oprócz jego wartości początkowej

      jeśli umieścisz wszystkie te predefiniowane tablice na początku bloku programu to będą ustawiane od CODE_ORIGIN+..., jeśli poprzedzisz je innymi tablicami to zostaną przesunięte w pamięci

      musiałbyś wyznaczyć ściśle jakiś adres pod który będziesz przepisywał swoje predefiniowane tablice
      • 20: CommentAuthorMADRAFi
      • CommentTime22 May 2019 13:05
       
      Tebe musialbys jakos lopatologicznie tlumaczyc. Nic mi to nie mowi co napisales.
      przecierz display listy umieszczam pod okreslonym adresem w pamieci.
      const.inc:
      DISPLAY_LIST_ADDRESS_TITLE = $A000;

      resources.rc:
      DISPLAY_LIST_ADDRESS_TITLE rcasm 'dlist_title.asm'
      • 21: CommentAuthortebe
      • CommentTime22 May 2019 15:05
       
      a to przepraszam :)
      • 22:
         
        CommentAuthormav
      • CommentTime22 May 2019 16:05
       
      Czemu akurat z cmc? RTM nie jest wydajniejszy? Na pewno posiada możliwość "nieużycia" 4 ścieżek, tylko 3.
      • 23: CommentAuthorMADRAFi
      • CommentTime22 May 2019 17:05 zmieniony
       
      Akurat CMC daje mi mozliwosc wstrzymywania i kontynuowania odgrywania muzyki po operacji IO.
      Mam w grze troche odczytywania z dyskietki oraz mozliwosc zapisu.
      • 24: CommentAuthorMADRAFi
      • CommentTime14 Jun 2019 16:06
       
      Czy ktos orientuje sie, Mono?, w mozliwosci zmian w odtwarzaniu plikow rmt?

      Tak by moznabylo wstrzymac odtwarzanie dzwieku na czas operacji I/O i kontynuowania odtwarzania dzwiku od miejsca w ktorym go zatrzymalismy.
      • 25: CommentAuthorVidol
      • CommentTime14 Jun 2019 17:06
       
      Aby odtwarzac muzyke musisz raz lub wiecej razy na ramke skakac do jsr RASTERMUSICTRACKER+3
      Robisz to w petli glownej lub na przerwaniu Vbl, wiec aby zatrzymac muzyczke na czas wczytywania danych wystarczy przestac wykonywac procedure RASTERMUSICTRACKER+3. Najprosciej by to zrobic to trzeba zarezerwowac sobie jakis znacznik na stronie zerowej czy muzyczka ma grac czy nie, 0-cisza, 1-graj, i sprawdzac go przed wywolaniem playera.
      • 26: CommentAuthorgorgh
      • CommentTime14 Jun 2019 17:06
       
      z tym, że jak przestaniesz grać to będzie pogłos na kanałach, bo rejestry pokeya nie będą wyzerowane
      • 27: CommentAuthorVidol
      • CommentTime14 Jun 2019 18:06
       
      fakt, i po I/O tez bedzie sieczka w pokeyu i tu zaczynaja sie schody, ciekawe jak to jest zrobione w cmc?
      • 28: CommentAuthorgorgh
      • CommentTime14 Jun 2019 19:06
       
      być może jest na to sposób, aby przed IO wyciszyć pokeja (jest taka opcja w rmt playerze, skacze się jsr rastermusictracker+cośtam), po IO wyzerować rejestry pokeja i wrócić do odgrywania, nie gwarantuję, że to zadziała
      • 29: CommentAuthorMADRAFi
      • CommentTime14 Jun 2019 20:06
       
      No wlasnie, niby proste a jednak nie.

      Musialby mi to ktos wszystko rozpisac. Nie mam az takie wiedzy na temat pokeya :)

      Potem to jeszcze bede musial zakodowac do modulu MAD-Pascala :)
      • 30: CommentAuthorgorgh
      • CommentTime14 Jun 2019 21:06 zmieniony
       
      porozmawiaj z Mono, kontakt znajdziesz tutaj albo na atari area, mono jest specem jeśli chodzi o technikalia
      edit: panem Mono ;)
      • 31:
         
        CommentAuthorsun
      • CommentTime8 Jul 2019 22:07
       
      Przyłączę/podłączę się jako pytający:
      MadPascal + pamięć rozszerzona + TMemoryStream oraz używanie etykiet extmem w resources.
      Posiłkowałem się przykładem examples\extmem\vscrol.
      A jeśli mam więcej zasobów niż 1 obrazek, mogę zadeklarować to też jako extmem i zostanie to załadowane jedno za drugim czy też muszę skleić to w 1 plik?
      <code>
      bitmap1 extmem 'assets\pic1'
      bitmap2 extmem 'assets\pic2'
      bitmap3 extmem 'assets\pic3'
      </code>
      Dostęp przez TMemoryStream to tylko ustawienie offsetu (Position) - to przetestowałem :).
      • 32: CommentAuthortebe
      • CommentTime9 Jul 2019 02:07
       
      zostanie załadowane od adresu w pamięci dodatkowej BITMAP1, BITMAP2, BITMAP3

      adres pamięci dodatkowej = [0..$fffff], MP (MadPascal) widzi maks 1 MB pamięci dodatkowej (64 banki * 16384 bajty)

      ile jest dostępnej pamięci można sprawdzić w SIZE, po wykonaniu CREATE
      • 33:
         
        CommentAuthorsun
      • CommentTime9 Jul 2019 14:07
       
      Fantastycznie. Sprawdzam empirycznie, dziękuję.
      • 34:
         
        CommentAuthorsun
      • CommentTime28 Jul 2019 15:07
       
      Pytanie: co to za magiczne pliki .FEAT do RMT playera i czy coś je generuje z modułu czy jak?
      • 35: CommentAuthortebe
      • CommentTime29 Jul 2019 00:07
       
      pliki FEAT generuje RMT
      • 36:
         
        CommentAuthorsun
      • CommentTime29 Jul 2019 23:07
       
      Dzięki, teraz widzę :) Szukałem, ale nie wpadłem, że to tędy droga.
      • 37:
         
        CommentAuthorsun
      • CommentTime24 Sep 2019 11:09
       
      I kolejne moje pytanie:
      Jeśli używam magii extmem, to nie powinienem pakować nic w przestrzeń $4000-$7FFF bo użycie TMemoryStream zrobi tam kaszanę - dobrze myślę i widzę?
      • 38: CommentAuthortebe
      • CommentTime24 Sep 2019 12:09
       
      procedury obsługi extmem są umieszczone poniżej $4000 (dla domyślnego adresu kompilacji = $2000) więc możesz

      chyba że byłeś złośliwy i ustaliłeś sobie nowy adres kompilacji -code:4000

      wtedy może być problem
      • 39:
         
        CommentAuthorsun
      • CommentTime24 Sep 2019 14:09
       
      A skąd, złośliwy nie jestem. Moje pytanie zasadniczo jest takie: jeśli ustalę etykietę np. muzy na $4000, dodam to do rc a potem użyję TMemoryStream.... to czy przełączając banki w obszarze $4000-$7FFF (sugeruję się małpą pamięci) rozjedzie mi się odtwarzanie. Tak samo jak niechcący wpakuję tam np. dlistę (aktywną akurat). O ile rozumiem to co napisałeś i to jak działa bankowanie, to mogę w ten obszar wrzucić dane, ale nic co w danej chwili np. mam na ekranie lub wręcz pamięć ekranu.
      Dobrze kombinuję?
      • 40: CommentAuthortebe
      • CommentTime24 Sep 2019 18:09
       
      musisz na VBL dodać włączenie / wyłączenie banku pamięci z muzą, powinno działać
      • 41:
         
        CommentAuthorKaz
      • CommentTime30 Sep 2019 11:09
       
      Tytuł wątku "początki", a tu widzę wre dyskusja na niskopoziomowym poziomie :D
      • 42:
         
        CommentAuthorsun
      • CommentTime30 Sep 2019 18:09
       
      No nie da się inaczej, takie są wymagania architektury sprzętowej ;)
      • 43:
         
        CommentAuthorgalu
      • CommentTime30 Sep 2019 19:09 zmieniony
       
      Dwa pytania (wracam do kodu po 7 miesiącach przerwy):

      1.
      Na VBLI wykonywałem tylko prosty kod Pascala, instrukcje inc/dec i Poke. Zauważyłem "psucie" obrazu po dołożeniu instrukcji warunkowej - czy to psucie jest spowodowane niepoprawnym odtwarzaniem stanu rejestrów, czy tym, że CPU przestał się wyrabiać (czasowo)? Czy jednym i drugim? :) Na wejściu wywołuję tylko asm { pha }, a na wyjściu asm { pla }.

      2.
      Program składa się w dużej części z definicji tablic. Dołożenie kolejnej tablicy lub np. typu wyliczeniowego (type) powoduje pojawienie się błędu kompilacji w zupełnie innej części kodu ("Error: Expected another 1 array elements" w linii, w której inicjalizuję jakąś dodaną wcześniej i niepowiązaną tablicę). Wynikowy XEX ma 10KB - dołożę jedną linijkę i nie skompiluję go już wcale. Nie stosowałem w kodzie bezwzględnego adresowania, z małymi wyjątkami dla zmiennych wykorzystywanych przez PMG, DL i ew. importów (atari, sysutils, joystick). Co się stało?
      • 44: CommentAuthorMADRAFi
      • CommentTime30 Sep 2019 19:09
       
      1. Moim zdaniem nie miescisz sie w ramce
      2. Blad opisuje zla dlugosc tablicy - za malo elementow w tablicy. Sprawdz czy nie ma za malo elementow w czasie przypisywnia - porownaj z definicja tablicy ile ma elementow . Liczymy index tablicy od 0.

      Wiecej mozna powiedziec gdyby byl fragment kodu zrodlowego.
      • 45: CommentAuthortebe
      • CommentTime30 Sep 2019 22:09
       
      pobierz ostatnią wersję kompilatora

      ->link<-
      • 46:
         
        CommentAuthorsun
      • CommentTime1 Oct 2019 00:10 zmieniony
       
      Hm... wesja 1.6.2 jakoś inaczej alokuje kod, bo program od razu idzie w maliny a na 1.5.x brykał.
      Problem mam z dli, niby po wpisuje mi w $0200 adres $26c8 a tam program dli nie zaczyna się od sta, stx, sty tylko od krzaka.
      Coś tu się za bardzo zoptymalizowało?
      Kod bez zmian.
      1.6.0 jednak działa okey.
      • 47: CommentAuthortebe
      • CommentTime1 Oct 2019 00:10
       
      podeślij przykład tego błędnego działania
      • 48:
         
        CommentAuthorbocianu
      • CommentTime1 Oct 2019 01:10 zmieniony
       
      jak masz ostatnią wersje MadPascala, to warto też zaktualizowac Mad Assembler do najnowszej. Ja miałem też problemy jak używałem starej wersji mads.exe
      • 49:
         
        CommentAuthorgalu
      • CommentTime1 Oct 2019 11:10 zmieniony
       
      Skąd można pobrać mp.exe w wersji 1.6.2?
      Z wersją 1.6.0 problem "Error: Expected another 1 array elements" wciąż występuje (inicjalizacja tablicy jest niby prawidłowa, błąd kompilacji pojawia się dopiero po dodaniu niepowiązanego kodu i to w innym fragmencie listingu). Ale wydaje mi się, że problem jest związany z wykorzystywaniem w kodzie tablic jedno- i dwuwymiarowych z typem wyliczeniowym i jednoczesnym inicjowaniem takiej tablicy - czy taka konstrukcja w była testowana / jest wspierana? Zamienię je na tablice bajtów, a "enumy" na stałe i dam znać czy pomogło.
      • 50: CommentAuthortebe
      • CommentTime1 Oct 2019 11:10
       
      na GitHub-ie

      ->link<-

      poproszę o przykład takiej tablicy, a najlepiej o przykład takiego błędu