atarionline.pl ATALAN - new programming language - 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:
         
        CommentAuthorjhusak
      • CommentTime18 Aug 2010 14:08
       
      Wygląda to na błąd przynależenia ostatniej linii w bloku, tj. ostatnia linia bloku to pierwsza linia po bloku (czyli o 1 za dużo).

      Jeśli za blokiem zostawia się pustą linię, to zadziała.
      • 2: CommentAuthornosty
      • CommentTime18 Aug 2010 20:08
       
      Tez sie tego domyslilem :)
      Jak pisal autor: atalan jest wciaz niedorobiony (np nie dzialaja typy short i int) i koszmarnie zabugowany.
      Ja mialem duze problemy z dzialaniami matematycznymi choc troche zlozonymi.

      Np:
      poz_z = pocz + yy * roz_x + xx

      nie dziala poprawnie (ale tez nie zglasza jasnego bledu, po prostu program dziala nie tak jak powinien),
      ale daje sie zatapic takim czyms:

      poz_z = pocz
      poz_z2 = yy * roz_x
      poz_z = poz_z + poz_z2
      poz_z = poz_z + xx

      Mam tez problemy z bardziej zlozonymi komendami IF albo WHILE.

      Tym niemniej mam na ukonczeniu prostą gre. Mecze sie, ale chyba warto. Bo chce pomoc przy testach i zmotywowac autora do dalszych prac. Juz teraz wiem ze w ATALANIE bedzie sie pisac bardzo latwo i szybko! Jesli bedzie stabilny i wydajny i powstana biblioteki to bedzie fantastyczna sprawa do prostych prac dla wszystkich zbyt leniwych na asemblera :)
      • 3:
         
        CommentAuthorjhusak
      • CommentTime18 Aug 2010 23:08
       
      Racja.
      Też coś próbuję w atalanie skrobnąć. I wszystko się daje w końcu zrobić.
      Oprócz niezaprzeczalnych zalet, kilka wad, na które się natknąłem:
      - to, co pisałem o analizatorach leksykalnych - analizator leksykalny i składniowy są napisane ręcznie. Zaglądałem w kod, to się nie da rozwijać.
      - niepełne lub niemożliwe do uzupełnienia reguły generowania kodu, ale to do uzupełnienia.
      - Rudla się skupia na optymalizacji aktualnie. Potrzebna mu jest pomoc w wymiarze analizy (punkt 1). Kilka błędów już poprawiłem, jednak trzeba to wrzucić na jakiś svn ogólny.

      Podoba mi się rozwarstwienie projektu, łatwo można atalana na Z80 np. napisać.

      Jednak wydaje mi się, że plik z regułami jest zbyt redundantny. Takie same reguły są powtórzone np. dla and, or, xor. Trzeba zastosować regułę DRY (don't repead yourself) bardziej, niż jest.

      IMHO projekt ten bez radykalnych zmian/cięć/uogólnień nie będzie łatwy w ukończeniu.

      Mam już kilka pomysłów na usprawnienie kodu.
      • 4:
         
        CommentAuthorCosi
      • CommentTime19 Aug 2010 10:08
       
      Nie wiem, czy nie walnę jakiejś głupoty, ale chyba parser jest napisany w C, a lekser... w Atalanie, jako plik w katalogu /bin. Tak coś mi świta w głowie po pobieżnym przejrzeniu kodu. Jeżeli to prawda, to wystarczyłoby poprawić ten pierwszy (tak jak mówi Kuba, zdefiniować gramatykę języka i wygenerować odpowiedni analizator).
      A Atalan na Z80 to byłby świetny pomysł. Pierwszy język, który obsługiwałby wszystkie popularne ośmiobitowce! :-)
      • 5: CommentAuthornosty
      • CommentTime19 Aug 2010 11:08
       
      Jakub - ja sie na tym wogole nie znam :/ Jestem amatorem bez wiedzy akademickiej. Nawet do testow sie nie nadaje, bo umiejetnosc rzeczowego testowania i jasnego przekazywania wynikow to tez nie jest latwa sprawa.

      Moze pomozesz Rudli? O ile bedzie chcial oczywiscie. Boje sie ze dojdzie do sytuacji, ze w miare komplikacji, kolejna wersja kompilatora bedzie latala 5 bledow a generowala 10 kolejnych :/

      W kazdym razie nie powinno byc tak, ze programy dzialajace na poprzedniej wersji przestaja sie kompilowac na nowej. A tak sie stalo ze Snake i z moim nowym programem.
      • 6: CommentAuthorilmenit
      • CommentTime19 Aug 2010 13:08 zmieniony
       
      "A Atalan na Z80 to byłby świetny pomysł. Pierwszy język, który obsługiwałby wszystkie popularne ośmiobitowce! :-)"

      Od dawna robi to język C. Kompilator CC65 pokrywa kompy z procesorem 6502, zaś z88dk pokrywa oparte na z80. Osobiście dziwię się, że tak mało nowych projektów powstaje na Atari w CC65 - jest masa kodu i przykładów dostępnych w sieci jak pisać gry i programy z jego użyciem.

      Programy działające tylko w trybie tekstowym można portować między platformami bez problemów:
      • 7:
         
        CommentAuthorjhusak
      • CommentTime19 Aug 2010 16:08
       
      C jest nudny :P
      • 8:
         
        CommentAuthorjhusak
      • CommentTime19 Aug 2010 16:08
       
      Najfajniejszy byłby język (kiedyś pisałem) minimalistyczny. Niedaleki od asemblera. Taki, co wiadomo, jak się skompiluje.

      Niedaleko to takiego ideału było Actionowi, niedaleko jest Atalanowi.

      Może Atalan--? (bez typów typu 1..10), wystarczą byte char word card.

      Tak sobie obmyślam taki język.
      • 9:
         
        CommentAuthorinsert
      • CommentTime19 Aug 2010 17:08 zmieniony
       
      a C? jest przeciez kompilator cc65.. no to juz mnie ktos uprzedzil :) ja wlasnie sie go ucze :)
      • 10:
         
        CommentAuthorCosi
      • CommentTime19 Aug 2010 19:08
       
      ilmenit, insert: Nie każdy lubi C, niektórzy są z Algola ;-P
      • 11: CommentAuthoras
      • CommentTime20 Aug 2010 01:08
       
      CC65 jest koszmarnie wolny. W Atalanie widzę, że duży nacisk kładziony jest na optymalizację i to może stanowić o przewadze tego projektu nad czymkolwiek innym na Atari. Poza tym C jest już "ustandaryzowany", a nowe języki można rozwijać do woli. Ja osobiście chciałbym zobaczyć domknięcia w Atalanie pewnego dnia, tym bardziej, że bieżąca składnia to ułatwia.
      • 12: CommentAuthorilmenit
      • CommentTime20 Aug 2010 13:08
       
      CC65 nie jest koszmarnie wolny. W większości przypadków ma szybkość porównywalną z Action. Poza tym w programowaniu obowiązuje zasada Pareto - 20% kodu wykonuje się zwykle 80% czasu. Te 20% dopiero warto optymalizować, a czasem nawet przepisać na asm. Jedynym problemem C są złożone funkcje biblioteki standardowej (np. printf), które wlinkowane zabierają cholernie dużo miejsca.
      Jeżeli chce sie ukończyć jakiś program, a nie uczyć sie programować, zdecydowanie CC65 polecam. Dojrzałe środowisko programistyczne, dojrzały i powszechnie znany język, możliwość prostego portowania kodu na inne platformy, co umożliwia bardzo wygodne debugowanie współczesnymi debuggerami.
      • 13: CommentAuthornosty
      • CommentTime20 Aug 2010 14:08
       
      ilmenit - przyznam ze ja pierwszy raz uslyszalem tu o tym jezyku. Znasz jakies programy napisane w nim na Atari? Czemu nie jest popularny?

      Ja nie promuje ATALANA! Nie znam sie na programowaniu tak zeby umiec porownac jezyki. Po prostu zainteresowalem sie... I wlasnie skonczylem w nim swoja pierwsza gre. Zostaje mi jeszcze nudne wklepanie leveli.

      Zdaje sie ze podszedlem do Atalana zbyt wysokopoziomowo. Jak sie "mentalnie przesunalem" blizej asemblera to kodowanie zaczelo isc szybciej. Ale jak pisal sam autor: to dopiero wersja alpha dla testerow-masochistow ;)
      • 14: CommentAuthorilmenit
      • CommentTime20 Aug 2010 14:08 zmieniony
       
      W C napisane jest 95% gry "His Dark Majesty". W asemblerze jest zrobione outro, intro oraz obsługa DLI.

      A czemu język nie jest popularny? Nie wiem :) Może dlatego, że jego stare implementacje na małym Atari (np. Deep Blue C) były bardzo wolne, i niesmak pozostał.

      Ok, skrobnąłem mały kurs pisania na małe Atari w C. Może to go upopularni ;)

      Przy tworzeniu HDM napisałem też przydatny profiler ->link<-
      • 15: CommentAuthornosty
      • CommentTime20 Aug 2010 15:08
       
      Dzieki!
      Na pewno skorzystam i sprobuje swoich sil. Za tydzien mam urlop, wiec bedzie okazja :)
      • 16: CommentAuthorilmenit
      • CommentTime20 Aug 2010 15:08
       
      To w przyszłym tygodniu postaram się zrobić drugą część kursu, jak używać w C zestawów fontów, duszków i jak odtwarzać muzykę i dźwięki z Raster Music Trackera.
      • 17:
         
        CommentAuthorinsert
      • CommentTime20 Aug 2010 16:08 zmieniony
       
      ilmenit: Dzieki! Czekam z niecierpliwoscia na druga czesc :))))
      • 18:
         
        CommentAuthorxeen
      • CommentTime20 Aug 2010 17:08
       
      bardzo fajny kursik
      może go umieścić jako artykulik (to do KAZ'a)?
      dzięki
      • 19:
         
        CommentAuthorKaz
      • CommentTime20 Aug 2010 17:08
       
      Kaz juz go umiescil jako artykulik - patrz strona glowna :D
      • 20: CommentAuthoras
      • CommentTime21 Aug 2010 05:08
       
      Ok, nie będę się upierać. Ja bazuję na tym co sam sprawdziłem (prosty test zapełnienia ekranu znakami, bezpośredni dostęp do pamięci) oraz na analizie chociażby stąd: ->link<- ("C and C-like" ...)

      I oczywista zgoda co do zasady 20/80%. Mogę dodać jedynie że o te 20% warto zapytać profiler.
      • 21:
         
        CommentAuthorjhusak
      • CommentTime21 Aug 2010 15:08 zmieniony
       
      @insert, przecież dostałeś od razu 5 części!
      Ot, zachłanność ludzka.
      • 22:
         
        CommentAuthorinsert
      • CommentTime24 Aug 2010 03:08
       
      @jhusak, dowcipniś ;) ja na gwałt potrzebuje tego typu wiedzy, grę chcę zrobić w cc65 ;)
      • 23: CommentAuthornosty
      • CommentTime24 Aug 2010 08:08
       
      Chcialem tylko przypomniec ze to watek o ATALAN. Zalozcie sobie nowy o cc65 :P
      • 24:
         
        CommentAuthorKaz
      • CommentTime24 Aug 2010 12:08
       
      Watki o CC65:

      jak pisac gry w CC65:

      ->link<-

      profiler Ilmenita:

      ->link<-

      TGI dla cc65:

      ->link<-

      grafika i dzwiek w CC65:

      ->link<-
      • 25:
         
        CommentAuthorjhusak
      • CommentTime24 Aug 2010 12:08
       
      @rudla, I receive emails from you, but it seems that you don't.

      Maybe is it o2 server fault - it was open relay once upon a time, thus is blacklisted widely.

      I'll send you my emails again from another account.
      • 26:
         
        CommentAuthorjhusak
      • CommentTime24 Aug 2010 13:08
       
      @insert, ale ty z tym gwałtem to na poważnie?
      • 27:
         
        CommentAuthorinsert
      • CommentTime24 Aug 2010 14:08
       
      @husak, dalej dokuczasz czy co jest? :) no chyba normalne ze jak kogos cos interesuje to jest spragniony wiedzy
      • 28: CommentAuthornosty
      • CommentTime24 Aug 2010 14:08
       
      Jakub, Rudla pojechal na wakacje. Moze nie ma neta...
      • 29: CommentAuthorrudla
      • CommentTime24 Aug 2010 16:08
       
      @jhusak, I did receive the e-mail and answered it today. I didn't understand, why you send me the messages for the second time, now I do :-)
      I send the reply to second address just to be sure.
      • 30:
         
        CommentAuthorjhusak
      • CommentTime25 Aug 2010 03:08
       
      @insert, ja nie dokuczam, tylko wprowadzam humorystyczne akcenty. Przepraszam, jeśli Cię to obruszyło. Nie miałem takiego zamiaru.

      W zamian oferuję pomoc w cc65, chociaż go nie za bardzo znam.
      • 31:
         
        CommentAuthorjhusak
      • CommentTime25 Aug 2010 03:08 zmieniony
       
      @nosty, Rudla wrócił już w sobotę :)

      Rudla dodał Ci możliwość wpływania na źródła.
      Myślę, że w issues powinieneś wrzucić wszelkie te rzeczy, które Ci nie działały, póki jeszcze pamiętasz.
      • 32:
         
        CommentAuthorinsert
      • CommentTime25 Aug 2010 10:08
       
      @jhusak, ok ok, to ja przepraszam, moze mialem jakis zly dzien jak baba, wierze ze nic nie zrobiles zlosliwie, co do pomocy z cc65 to ja musze najpierw przebrnac przez nauke ansi c jako takiego a i z tym mam problemy bo jedyny kontakt z programowaniem mialem z delphi i basic :/ no alee... jak sie jest grafikiem to ciezko byc grafikiem i programista :)
      • 33:
         
        CommentAuthorjhusak
      • CommentTime25 Aug 2010 11:08
       
      Jako ktoś, kto chyba zna C mówię, co stanowi największy problem w nauce i zrozumieniu tego języka:
      - typy wskaźnikowe (pointery)
      - używanie plików nagłówkowych
      - zrozumienie idei kompilatora i linkera
      - myślenie niskopoziomowe (język blisko sprzętu)
      - kontrola wyjścia poza zakres (np. tablicy)

      Reszta to jak ten cep.

      Za kontrolę typów odpowiada kompilator (trzeba w gcc ustawić opcję -Wall przy kompilacji i wszystko powie)

      Natomiast w .h NIE UMIESZCZAMY ŻADNEGO KODU, ŻADNYCH DEKLARACJI ZMIENNYCH, nic, co po skompilowaniu tworzy jakiś kod. Takie pliki są inkludowane w wielu miejscach i powodowało by to @%#$.
      Tylko definicje typów (struktur), stałych i prototypy funkcji (czegoś zapomniałem?)

      W przypadku jednoplikowego programu w C nie ma potrzeby tworzyć plików .h.

      Kompilator kompiluje do specjalnej postaci relokowalnej, linker łączy skompilowane pliki z podanymi bibliotekami i ze sobą, przy okazji stwierdzając braki (coś zadeklarowane jako extern, ale nie ma deklaracji właściwej)
      • 34:
         
        CommentAuthorinsert
      • CommentTime25 Aug 2010 15:08
       
      dzieki, jak dotre do tego typu problemów chętnie Cię pomęczę ;)
      • 35: CommentAuthorrudla
      • CommentTime3 Sep 2010 19:09
       
      As promised some time ago, I have created simple projects page on Atalan web (http://atalan.kutululu.org/projects.html).

      We have now three games in total. Who will be the next? :-)

      Please, project authors, if you want me to put some better game descriptions, let me know (or modify the file \atalan\doc\projects.txt in source code repository).
      • 36:
         
        CommentAuthorCosi
      • CommentTime6 Sep 2010 17:09
       
      Rudla, could you please add one minor feature to Atalan?
      I need to enclose Atari-specific characters in a string, something like:
      a:array(8) of byte = "Test. \x1f\x05\xff"
      I guess it would come in handy, as Atalan is a cross-compiler.
      Thanks in advance!

      Btw. Atalan managed to HANG my Linux-based computer. Twice! :D
      I declared an array:
      a:array of byte = "Test"
      Then I added "const" at the beginning of that declaration and tried to compile my program. The compiler was intensively chewing my hdd until everything hanged.
      No idea how come this happened.
      • 37: CommentAuthorxxl
      • CommentTime6 Sep 2010 17:09
       
      bug:

      ;### if line mod 2 <> 0 then x = OFFSET
      lda _s0__line
      and #1
      sta _s0___3
      cmp #0
      jeq _lbl2
      lda #root__OFFSET
      sta x
      _lbl2

      "c" compiler do it this way:

      ;### if line mod 2 <> 0 then x = OFFSET
      lda _s0__line
      and #1
      beq _lbl2
      lda #root__OFFSET
      sta x
      _lbl2
      • 38: CommentAuthoremka
      • CommentTime6 Sep 2010 18:09
       
      Może ktoś powiedzieć którą wersję atalana posiadacie? Od czasu jak zmieniłem na wersję z 20010.09.03 nie mogę nic skompilować, albo coś schrzaniłem w konfiguracji albo nie wiem.
      • 39:
         
        CommentAuthorCosi
      • CommentTime6 Sep 2010 18:09
       
      emka: A masz plik msvcrt100.dll w katalogu bin? :)
      • 40: CommentAuthoremka
      • CommentTime6 Sep 2010 18:09 zmieniony
       
      tak próbowałem wersję 10.0.20327.1
      i wersję 10.0.30128.1
      nie doczytałem do końca mam ją w system32
      przy kompilacji np. esieve.atl system wyrzuca że nie może odnaleźć ścieżki ale esieve.asm wygląda poprawnie
      • 41:
         
        CommentAuthorYosh
      • CommentTime6 Sep 2010 20:09
       
      @rudla:

      Nice. I see that you are implementing basic optimizations too. Hopefully this will suppress my attempts at implementing one.

      I'll test it later :) & wish you luck.
      • 42:
         
        CommentAuthorCosi
      • CommentTime6 Sep 2010 21:09
       
      emka: Czy problem chyba w MADS-ie. Nie mam pojęcia, dlaczego; u mnie wszystko hulało od razu po rozpakowaniu zipa. Może skopiowałeś np. plik konfiguracyjny ze starej wersji?
      • 43:
         
        CommentAuthorKaz
      • CommentTime6 Sep 2010 21:09
       
      off topic:
      xxl - mozesz stosowac znaczniki [ code ], zeby podawane listingi byly czytelniejsze i zachowywaly formatowanie.
      • 44: CommentAuthoremka
      • CommentTime6 Sep 2010 21:09 zmieniony
       
      Cosi zanim zacznę grzebać w systemie sprawdź długość i daty plików atalan i mads w archiwum. Chcę mieć pewność że wina jest po mojej stronie(raczej na pewno), podejrzyj też wersję msvcrt100.dll

      Na razie wróciłem do wersji 2010.08.22 pewnie ma więcej błędów ale u mnie chodzi

      Już ok.
      Znalazłem pliki starego kompilatora w innym zapomnianym katalogu na ścieżce dostępu.
      • 45: CommentAuthorrudla
      • CommentTime6 Sep 2010 23:09
       
      Atalan now supports Raster Music Tracker directly:
      ;We must inform compiler that we are going to use Raster Music Tracker (rmt).
      use rmt

      ;Declare the module to use.

      const musmod:array = file "delta.rmt"

      ;Initialize the music engine (specify, which module to use)
      music'init musmod

      ;It is necessary to call the music'play routine every 1/50 of second.
      ;We will call it from VBI, here we prepare the appropriate routine.
      ;It is of course possible to add other functionality to VBI, if necessary.

      play:vbi =
      music'play

      ;Start playing (set the vbi to our routine).
      ;We cannot set the music'play routine directly to VBI, because it is normal
      ;subroutine, not interrupt routine.

      on'vbi play

      "Done."
      • 46:
         
        CommentAuthorjhusak
      • CommentTime7 Sep 2010 22:09 zmieniony
       
      @rudla, what with cmc modules?
      I suppose there is (has to be) the magic underneath, which guesses what kind of module was loaded.
      • 47: CommentAuthorrudla
      • CommentTime7 Sep 2010 23:09
       
      No, there is no magic. Only RMT modules are supported and that is what you declare by specifying *use rmt*.

      CMC (Chaos music composer, I suppose?) would require different module. I suppose, both players would not be used, so cmc would use same commands.
      • 48:
         
        CommentAuthorjhusak
      • CommentTime8 Sep 2010 01:09 zmieniony
       
      Yep!

      @rudla, is this "use" statement good for:
      graphics
      disk io
      some libraries written in assembler or atalan (eg. software sprites)
      ?
      • 49: CommentAuthorrudla
      • CommentTime8 Sep 2010 09:09
       
      Yes, that is support for modules.
      (like #include, but more clever).
      No need to check for duplicate use, circular dependency is checked etc.
      See ->link<-
      • 50: CommentAuthorilmenit
      • CommentTime9 Sep 2010 19:09 zmieniony
       
      [Some ideas for ATALAN]

      Example in CC65:

      void main(void)
      {
      unsigned char index;
      index=0x25;
      }


      generates stack based code:

      ; unsigned char index;
      ;
      jsr decsp1
      ;
      ; index=0x25;
      ;
      lda #$25
      ldy #$00
      sta (sp),y
      ;
      ; } leave function
      ;
      jsr incsp1
      rts



      One option in CC65 allows to replace stack based variables by static (global) variables. With -Cl option it generates:

      L0003:
      .res 1,$00
      ;
      ; index=0x25;
      ;
      lda #$25
      sta L0003
      ;
      ; }
      ;
      rts


      The code is much faster, however recursive calls are no more allowed.

      The CC65 is missing one more feature very useful for limited memory - to create name aliases. For example:

      void fun_a()
      {
      unsigned char index;
      index=0x12;
      }
      void fun_b()
      {
      unsigned char index;
      index=0x24;
      }

      void main(void)
      {
      fun_a();
      fun_b();
      }


      With -Cl option CC65 generates:

      .segment	"CODE"
      .proc _fun_a: near
      .segment "BSS"
      L0003:
      .res 1,$00
      .segment "CODE"
      ; index=0x12;
      lda #$12
      sta L0003
      rts
      .endproc
      ;
      .proc _fun_b: near
      .segment "BSS"
      L0007:
      .res 1,$00
      .segment "CODE"
      ; index=0x24;
      lda #$24
      sta L0007
      rts
      .endproc

      .proc _main: near
      jsr _fun_a
      jmp _fun_b
      .endproc


      In such code 'index' takes two bytes in memory, while it could take just one. I can use global variable 'index' which will solve the problem, however I'm not able to locally name (add meaning) for it in a function.

      Example of what I would love to have:

      unsigned char index_a;
      unsigned char index_b;
      unsigned char map[5];

      void test_function_1()
      {
      unsigned char position alias index_a;
      unsigned char loop alias index_b;

      for(loop=0;loop<5;++loop)
      {
      map[position]=loop;
      }
      }

      void test_function_2()
      {
      unsigned char temp_value alias index_a;
      temp_value=map[0];
      map[0]=map[1];
      map[1]=temp_value;
      }