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
     
    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
     
    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
     
    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
     
    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
     
    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 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
     
    C jest nudny :P
    • 8:
       
      CommentAuthorjhusak
    • CommentTime19 Aug 2010
     
    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 zmieniony
     
    a C? jest przeciez kompilator cc65.. no to juz mnie ktos uprzedzil :) ja wlasnie sie go ucze :)
    • 10:
       
      CommentAuthorCosi
    • CommentTime19 Aug 2010
     
    ilmenit, insert: Nie każdy lubi C, niektórzy są z Algola ;-P
    • 11: CommentAuthoras
    • CommentTime20 Aug 2010
     
    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
     
    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
     
    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 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
     
    Dzieki!
    Na pewno skorzystam i sprobuje swoich sil. Za tydzien mam urlop, wiec bedzie okazja :)
    • 16: CommentAuthorilmenit
    • CommentTime20 Aug 2010
     
    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 zmieniony
     
    ilmenit: Dzieki! Czekam z niecierpliwoscia na druga czesc :))))
    • 18:
       
      CommentAuthorxeen
    • CommentTime20 Aug 2010
     
    bardzo fajny kursik
    może go umieścić jako artykulik (to do KAZ'a)?
    dzięki
    • 19:
       
      CommentAuthorKaz
    • CommentTime20 Aug 2010
     
    Kaz juz go umiescil jako artykulik - patrz strona glowna :D
    • 20: CommentAuthoras
    • CommentTime21 Aug 2010
     
    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 zmieniony
     
    @insert, przecież dostałeś od razu 5 części!
    Ot, zachłanność ludzka.
    • 22:
       
      CommentAuthorinsert
    • CommentTime24 Aug 2010
     
    @jhusak, dowcipniś ;) ja na gwałt potrzebuje tego typu wiedzy, grę chcę zrobić w cc65 ;)
    • 23: CommentAuthornosty
    • CommentTime24 Aug 2010
     
    Chcialem tylko przypomniec ze to watek o ATALAN. Zalozcie sobie nowy o cc65 :P
    • 24:
       
      CommentAuthorKaz
    • CommentTime24 Aug 2010
     
    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
     
    @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
     
    @insert, ale ty z tym gwałtem to na poważnie?
    • 27:
       
      CommentAuthorinsert
    • CommentTime24 Aug 2010
     
    @husak, dalej dokuczasz czy co jest? :) no chyba normalne ze jak kogos cos interesuje to jest spragniony wiedzy
    • 28: CommentAuthornosty
    • CommentTime24 Aug 2010
     
    Jakub, Rudla pojechal na wakacje. Moze nie ma neta...
    • 29: CommentAuthorrudla
    • CommentTime24 Aug 2010
     
    @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
     
    @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 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
     
    @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
     
    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
     
    dzieki, jak dotre do tego typu problemów chętnie Cię pomęczę ;)
    • 35: CommentAuthorrudla
    • CommentTime3 Sep 2010
     
    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
     
    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
     
    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
     
    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
     
    emka: A masz plik msvcrt100.dll w katalogu bin? :)
    • 40: CommentAuthoremka
    • CommentTime6 Sep 2010 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
     
    @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
     
    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
     
    off topic:
    xxl - mozesz stosowac znaczniki [ code ], zeby podawane listingi byly czytelniejsze i zachowywaly formatowanie.
    • 44: CommentAuthoremka
    • CommentTime6 Sep 2010 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
     
    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 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
     
    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 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
     
    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 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;
    }