atarionline.pl ACTION! uczę się - 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:
       
      CommentAuthorpirx
    • CommentTime5 Feb 2011
     
    byle szybciej, niż szła do Ciebie nagroda z sillyV :)))))))))))))))))))))))))))))))))
    • 2:
       
      CommentAuthorinsert
    • CommentTime5 Feb 2011
     
    pirx. nie wiem czy pamietasz ale w glucholazach zostales joiniety do atariBDSM wiec szykuj sie na biczowanie ;P
    • 3:
       
      CommentAuthorpirx
    • CommentTime5 Feb 2011
     
    aw crap :]
    • 4:
       
      CommentAuthorinsert
    • CommentTime3 Mar 2011
     
    pytanie:

    jedynym type zmiennych przechowujacych znak jest w action INT,
    w jaki sposob zadeklarowac tablice typu INT aby mogly sie w niej znalesc od razu wartosci ujemne?

    proba zrobienia tego tak:

    INT ARRAY TABLICA=[-1 -4 -5 0 2 3 4]

    konczy sie errorem, HELP!
    • 5:
       
      CommentAuthorpirx
    • CommentTime3 Mar 2011
     
    INT ARRAY TABLICA=[256-1 256-4 256-5 0 2 3 4]
    • 6:
       
      CommentAuthorinsert
    • CommentTime3 Mar 2011
     
    Pirx. dalej error nr 9, to chyba nie tak :/
    • 7:
       
      CommentAuthorpirx
    • CommentTime3 Mar 2011
     
    INT ARRAY TABLICA=[(256-1) (256-4) (256-5) 0 2 3 4]

    tak naprawde to prawie nic z action! nie pamietam, chcialem Ci tylko napisac, ze -1==(256-1).
    • 8:
       
      CommentAuthorinsert
    • CommentTime3 Mar 2011
     
    dalej pudlo, error 9, nie tedy droga chyba Pirx :/
    • 9: CommentAuthorxxl
    • CommentTime3 Mar 2011
     
    int ma 2 bajty moze tak: [ $fffe itd.]
    • 10:
       
      CommentAuthorpirx
    • CommentTime3 Mar 2011
     
    bingo
    • 11:
       
      CommentAuthorinsert
    • CommentTime3 Mar 2011
     
    xxl. bingo ;) (pirx co sie cieszysz - nie Ty zgadnales? ;P )
    • 12:
       
      CommentAuthorpirx
    • CommentTime4 Mar 2011
     
    Cieszę się, że dostałeś odpowiedź szybciej, niż nagrodę z SillyVenture.
    • 13:
       
      CommentAuthorinsert
    • CommentTime4 Mar 2011
     
    pirx. oj Ty moj pieszczoszku Ti Ti Ti ;P
    • 14:
       
      CommentAuthorinsert
    • CommentTime4 Mar 2011
     
    czy w Action sa tablice dwuwymiarowe?
    • 15:
       
      CommentAuthorinsert
    • CommentTime5 Mar 2011
     
    eee... pytanko było ;P
    • 16:
       
      CommentAuthorjhusak
    • CommentTime6 Mar 2011
     
    Wg mnie nie. Ale do manuala można zajrzeć :). IMHO tablice 2wymiarowe w Action są niepotrzebne - powodowałyby ukryte koszty czasowe (mnożenie) w dostępie do takich tablic.

    Rudla w atalanie sprytnie rozwiązał ten problem, jednak wiąże się to z narzutem pamięciowym - pamięta indeksy do tablic składowych :)
    • 17:
       
      CommentAuthortdc
    • CommentTime6 Mar 2011 zmieniony
     
    Ja właśnie widzę że jest błąd w kompilatorze:
    MODULE 

    BYTE ARRAY TAB=[1 2 1 2 2 1 1 2]

    BYTE A


    PROC MAIN()
    A=TAB[1][2]
    PRINTBE(A)
    [96]


    To oczywiście nie ma sensu w Action! choć wygląda jak dostęp do tablicy dwuwymiarowej.

    Jednak mimo wszystko (!) się to kompiluje, ale daje dziwne wyniki, w tym potrafi wywalić emulator.


    Oczywiście popieram to co napisał Kuba.

    Insert połączymy się znów i wyjaśnisz co chcesz osiągnąć tą tablicą a ja Tobie wyjaśnię jak to rozwiązać.
    • 18:
       
      CommentAuthorinsert
    • CommentTime7 Mar 2011
     
    wlasnie tak myslalem, ale spotkalem sie ze zrodlowka w ktorej konstrukcja rozkazu sugerowala tablice 2 wymiarowa wiec mnie to zdziwilo, w dokumentacji nie ma slowa o wiekszych tablicach
    • 19:
       
      CommentAuthorinsert
    • CommentTime7 Mar 2011
     
    pytania kolejne:

    1) jak podpiac player cmc do swojego programu?
    2) czym i jak pakowac skompilowane programy aby zajmowaly mniej miejsca na dysku i nadal byly to pliki wykonywalne?
    3) czy istnieje metoda spakowania kilku plikow zawierajacych program skompilowany i dane ktore ten program pobiera z dysku (np. zestawy fontow, bitmapy etc) w jeden samouruchamialny plik?
    • 20:
       
      CommentAuthorxeen
    • CommentTime7 Mar 2011
     
    apropo 3, jeżeli wysztko Ci się mieści a pamięci to bez kombinowania specjalnego z bankami można użyć super packera. Jest chyba w katalogach użytków na AOL.
    doczytuje się kolejne pliczki i pakuje i zapisuje w jednym.
    to jest też chyba odpowidź na drugie pytanie.

    co do playera cmc to nie mam żadnego doświadczenia w action , ale w instrukcji do CMC (dostępnej też na tej stronie) opisano to i owo - jak wygenerować player pod konkretnym adresem dla danej muzyczki i muzyczkę pod konkretnym adresem. Potem już tylko wystarczy odpalić prockę z konkretnymi parametrami z konkretnego miejsca w pamięci.
    • 21:
       
      CommentAuthorinsert
    • CommentTime7 Mar 2011
     
    no wlasnie, a jesli sie nie wszystko miesci w pamieci? czy jest jakis program ktory i tak sprawi ze bedzie to jeden plik i tak "oszuka" Twoj kod zeby doczytywal tylko dane z tego jednego pliku?
    • 22:
       
      CommentAuthorinsert
    • CommentTime8 Mar 2011
     
    ponawiam pytania ;)

    1) jak podpiac player cmc do swojego programu?
    2) czym i jak pakowac skompilowane programy aby zajmowaly mniej miejsca na dysku i nadal byly to pliki wykonywalne?
    3) czy istnieje metoda spakowania kilku plikow zawierajacych program skompilowany i dane ktore ten program pobiera z dysku (np. zestawy fontow, bitmapy etc) w jeden samouruchamialny plik?
    • 23:
       
      CommentAuthorxeen
    • CommentTime8 Mar 2011
     
    kurcze szukam wątku i nie mogę znaleźć,
    ale Mono kiedyś opisał Ilmenitowi tutaj na formum jak przełaczać banki pamięci. nie wiem czy to Ci podpasuje do Twojego problemu z brakiem miejca, ale chyba tak.
    Nie jest to jednak zwiazane z pakowaniem bezpośrednio...
    • 24:
       
      CommentAuthorpirx
    • CommentTime8 Mar 2011
     
    2) polecam exomizer, jest w paczce z madsem i ma też swoją stronę
    3) tak, musisz wygenerować plik wykonywalny (.EXE, .XEX). Przykładowy opis: ->link<- (pierwszy hit z google na "executable file format atari")
    • 25:
       
      CommentAuthorinsert
    • CommentTime8 Mar 2011
     
    pirx. jesteś moją gwiazdą ;) dzięki :)
    xeen. poszukaj, przyda się, dzieki :) ps. i czekam na info odnośnie projektu
    • 26:
       
      CommentAuthorjhusak
    • CommentTime8 Mar 2011
     
    Masz 2 możliwości.

    1. Wszystko mieści się w pamięci
    2. Nie mieści się w pamięci.

    ad 1. Spakuj jakimś pakerem, założyłem nowy wątek o tym na forum, są fajne konkretne odpowiedzi

    ad 2. Niestety, trzeba się trochę napocić i samemu dekompresować w locie, np. deflate. Kod deflate ma 2 strony pamięci, a gzipujesz gzipem lub lepiej 7z. Zaleta - można nawet z 200 kilo umieścić w 60 KB. Np. można robić plansze bez żadnych bajerów programistycznych, po prostu rysując po 1 kb plansza, po skompresowaniu będzie to z reguły 200 bajtów. Plansze są bardziej urozmaicone, a nie mamy skomplikowanych algorytmów generowania plansz, a co ważniejsze ich komponowania.
    • 27:
       
      CommentAuthorinsert
    • CommentTime8 Mar 2011
     
    jakub. dzieki, a co do pytania o player cmc, wiesz jak mi pomoc?
    • 28:
       
      CommentAuthorinsert
    • CommentTime9 Mar 2011
     
    kolejne pytanie, dotyczy ladowania wlasnych zestawow fontow, mam takie zrodlo (dzialajace):

    POKE(106,144)

    wg("D1:TEST.FNT",36864,1024,4,128)

    GRAPHICS(12+16)

    poke(756,144)

    pytania:

    1) co robia obie instrukcje POKE, dlaczego akurat takie wartosci sa tam wpisuwane etc

    2) dlaczego procedura odczytu binarnego pliku (by tdc) font wladowywany jest pod adres 36864? (jaki inny to moze byc adres, dlaczego ten dziala inne nie beda etc)

    help, chce to zrozumiec :)
    • 29:
       
      CommentAuthortdc
    • CommentTime9 Mar 2011 zmieniony
     

    insert:

    jakub. dzieki, a co do pytania o player cmc, wiesz jak mi pomoc?

    Obsługa CMC jest w moich starych źródłach dostępnych w necie np. Panga Ponga czy Tomcat.

    A tak przy okazji obsługa CMC jest zrobiona przez Kubę Husaka w latach 90. Jest to lepiej zrobione niż to co znajduje się w firmowym opisie CMC (dla Basica).

    insert:

    wg("D1:TEST.FNT",36864,1024,4,128)

    36864=$9000

    insert:

    poke(756,144)

    Ustala adres (cień) z którego ma brać dane znaków ANTIC. 144=$90 czyli jest to ten sam adres jak ten w proc wg(). Nie trzeba tutaj podawać pełnego 16bitowego adresu, wystarczy wpisać $90.

    insert:

    font wladowywany jest pod adres 36864?

    To może być dowolny adres. $9000 jest dość intuicyjny.

    insert:

    jaki inny to moze byc adres, dlaczego ten dziala inne nie beda etc

    Wynika to z ograniczeń ANTICA, to muszą być okrągłe adresy. Czyli tutaj początek $9000, a całość zajmuje $400. Inne "pasujące" adresy też będą działały.

    insert:

    dlaczego procedura odczytu binarnego pliku (by tdc)

    Tak naprawdę to nie jest moja procedura ale mojego kolegi;)
    • 30:
       
      CommentAuthordely
    • CommentTime9 Mar 2011
     
    To może być dowolny adres. $9000 jest dość intuicyjny.

    Nieprawda. Adres zestawu znaków musi zaczynać się od początku strony pamięci, dodatkowo w trybach ANTIC 2-5 musi być podzielny przez $400, a w trybach 6 i 7 przez $200.
    • 31:
       
      CommentAuthorinsert
    • CommentTime9 Mar 2011
     
    dzieki Panowie :)
    • 32:
       
      CommentAuthortdc
    • CommentTime9 Mar 2011 zmieniony
     

    dely:

    Nieprawda.

    Ooooo... jakie to typowe...
    Ostatnio jak się udzieliłeś odnośnie tego co napisałem to mimo postawionego Tobie konkretnego zadania/umowy gdzieś przepadłeś bez śladu, ale jak jest możliwość przygadać Tdc to już się znalazłeś ??

    Czy to jest nieprawda ?
    Insert się zapytał:

    insert:

    jaki inny to moze byc adres, dlaczego ten dziala inne nie beda

    Więc odpisałem, że inne będą działać np. w tym miejscu:

    tdc:

    To może być dowolny adres.

    Następnie na pytanie:

    insert:

    dlaczego ten dziala inne nie beda etc

    odpowiedziałem (co wyrwałeś wcześniej z kontekstu, pomijając ten fragment):

    tdc:

    Wynika to z ograniczeń ANTICA


    Więc to nie jest „nieprawda”, tylko bardzo chciałeś mi przygadać. Moja odpowiedź była wystarczająca na tym poziomie abstrakcji. Twoja była bardziej szczegółowa, jednak Twoje większe zasoby czasu nie świadczą o tym że mówię nieprawdę.

    Proszę pozostaw swoje dziecinne igraszki na swoje forum. Tak spokojnie i normalnie się w tym wątku wcześniej rozmawiało...
    • 33:
       
      CommentAuthorinsert
    • CommentTime9 Mar 2011
     
    Tdc, Dely. Prosze o wymiane tego typu tresci w innym watku, ten z zalozenia ma charakter edukacyjny i ma sluzyc nie tylko mnie ale kazdemu kto bedzie chcial w przyszlosci uczyc sie Action :) po co robic tutaj bajzel?
    • 34:
       
      CommentAuthordely
    • CommentTime9 Mar 2011
     
    Ale ja chciałem tylko pomóc Insertowi, Tedec, zlituj się.
    • 35:
       
      CommentAuthorKaz
    • CommentTime9 Mar 2011
     
    Offtopicznie, ale na tematy poruszone tutaj:

    jhusak:

    Zawsze chętnie pomagamy. (...) Atarionline.pl. Here is The Help.


    Super, ciesze sie, ze Kuba podchodzisz do tego w ten sposob. Duma mnie rozpiera, ze na Forum Atarum slawetny Husak, legenda atarowcow udziela sie z pomoca. No i jeszcze udziela sie naczelny praktyk Actiona! czyli TDC, przez co mamy tutaj chyba 93% programistow korzystajacych z Action ;P

    tdc:

    Niech Kaz zrobi taki baner odnośnie tego forum ;):):)


    Jak ktos zrobi odpowiedni baner to moze on wisiec zarowno nad forum (szerokosc 250 pikseli, powinien sie dobrze komponowac z szarym tlem) albo nawet w naglowku strony (tutaj scislejsze wymagania: szerokosc 448 na 132 wysokosci, no i dobrze sie powinien komponowac z czarnym tlem). Jak to moze wygladac - zarzucam przykladem na gorze strony "inspected by Atari".

    xeen:

    apropo 3, jeżeli wysztko Ci się mieści a pamięci to bez kombinowania specjalnego z bankami można użyć super packera. Jest chyba w katalogach użytków na AOL.


    Jest na pewno, a dokladniej to w dziale "Różne" (ogolna rada: jezeli czegos przydatnego programistom nie ma w dziale "Programowanie" to moze byc w dziale "Różne"):

    ->link<-
    • 36:
       
      CommentAuthorinsert
    • CommentTime9 Mar 2011
     
    a po co byl:

    POKE(106,144)

    przed WG?
    • 37:
       
      CommentAuthorinsert
    • CommentTime9 Mar 2011 zmieniony
     
    moze to byc dowolny inny adres, ok wiec idac ta logika zrobilem tak:

    w monitorze za pomoca instrukcji ? * sprawdzilem nablizszy wolny adres w pamieci - wynosi $28E4

    zmienilem wiec instrukcje WG zeby ladowala dane fonta pod ten adres i zmienilem instrukcje po WG na poke(756,40) (bo $28 to dec 40)

    dostalem zawieszke Action!, adres($28E4) byl podzielny przez 256 bez reszty wiec byl "co strone" pamieci, co robie zle?
    • 38:
       
      CommentAuthorpirx
    • CommentTime9 Mar 2011
     
    ale jesteś pewny, że $28e4 mod 256 == 0?
    Hint: 256 = $100

    Żeby więcej nie mieszać - fonty stawiaj od adresów podzielnych przez 1KiB ($400). Najbliższy od $28E4 to $2c00. Ale tak nisko w pamięci to pewnie coś się zamazało, próbuj wyżej.
    • 39:
       
      CommentAuthorinsert
    • CommentTime9 Mar 2011
     
    no $28e4 = dec 10468, 10468/256 = 40 , zle?
    • 40:
       
      CommentAuthorlarek
    • CommentTime9 Mar 2011 zmieniony
     
    Może na Mac'u obowiązuje inna teoria liczenia? ;)

    Ułatwienie: 40*256=?
    • 41:
       
      CommentAuthorinsert
    • CommentTime9 Mar 2011
     
    hehe, cholera kalkulator jakos zaokragla sam, nie wiem co jest, mam go w programmer mode :/ ale lol :)
    • 42:
       
      CommentAuthortdc
    • CommentTime10 Mar 2011 zmieniony
     
    To przełącz go w "Action!" mode ;)

    insert:

    w monitorze za pomoca instrukcji ? * sprawdzilem nablizszy wolny adres w pamieci - wynosi $28E4

    Odradzam to ;)
    Action! pokazuje Tobie pierwszy wolny adres w pamięci, ale będzie on wykorzystywany przez ten język przy każdej okazji. W pierwszej kolejności zajętość pamięci od tego miejsca wzrośnie po wpisaniu czegokolwiek do edytora. Potem jak skompilujesz kod to on też tam trafi, następnie w to miejsce zostanie wczytany zestaw znaków, co może doprowadzić do tego że po wczytaniu danych zamiast powrotu z procedury WG() nastąpi wykonywanie danych fontów - zonk!

    Dlatego wcześniej pisałem że adres $9000 jest całkiem ok. Możesz też faktycznie wczytać fonty pod $2C00 ale trzeba przesunąć kod pod np. $4000, no i mieć pewność że w edytorze Action! dane nie wejdą do tego miejsca. Uszkodzenie źródła programu przez uruchomiony program zawsze kończy się tym samym – stratą, często w ułamku sekundy edytor resetuje ustawienia i cały kod znika.

    Wcześniej pisałem, że znaki mogą się znajdować w dowolnym miejscu pamięci – mogą ale musimy być pewni że w tym miejscu nie ma czegoś ważnego np. stosu CPU, DOSa, kodu programu itp. Czyli teoretycznie mogą wszędzie, w praktyce lepiej nie utrudniać sobie życia i umieścić tam gdzie najmniej będzie to kolidować (np. $9000).

    No i jeszcze jedno edytor Action! ma szereg bardziej złożonych funkcji, buforów trzeba się liczyć, że nawet niewpisanie czegoś w edytorze może przesunąć zajętość pamięci o parę bajtów (mamy operację undo, mamy zapamiętywanie nazwy pliku itp.)
    • 43:
       
      CommentAuthorinsert
    • CommentTime10 Mar 2011
     
    thx :)
    • 44:
       
      CommentAuthorinsert
    • CommentTime13 Mar 2011 zmieniony
     
    zastanawiam sie jak uzyc mape wypluta z Envision,

    w postaci:

    CHAR ARRAY MAP1=[
    @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
    @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
    @@@@ itd.... ]

    mam error podczas kompilacji :/ (ERROR 9)

    ps. oczywiscie ladujac binarnie ten plik pod adres ekranu wszystko jest ok, ale ja chce miec to osadzone w zrodle

    pytanie nieco szersze, jak dolaczac do zrodla dane z plikow roznego typu, np. mam bitmape i chce ja osadzic w zrodle odrazu etc, czym na atari albo mac'u konwertowac dowolne dane (np. plik bitmapy, albo plik tekstowy jak z Envision) na dane ktore mozna osadzic w tablicy w Action np byte array tablica = [2 32 40 12 23 100 etc...]

    pytanie kolejne: czy da sie zadeklarowac tablice i od razu nadac jej polozenie w pamieci oraz dane ktore ma zawierac?

    czyli TYP ARRAY NAZWA=$ADRES [DANE DANE DANE DANE]
    • 45:
       
      CommentAuthorjhusak
    • CommentTime14 Mar 2011 zmieniony
     
    hehe. Mam dla Ciebie taki trick. Jeśli mapa ma <=1024 bajty.

    zapisz raw mapę.
    przejdź do edytora fontów
    odczytaj font, podaj plik mapy, co zapisałeś. Pojawi się kaszana w fontach, ale to nic.
    wyeksportuj w formacie Action! (w options się to ustawia)
    Przytnij nieużywane bajty pod koniec w zapisanym pliku, zmień w nim nazwę tablicy.

    Już
    • 46:
       
      CommentAuthorinsert
    • CommentTime14 Mar 2011
     
    hehe, jakbu, dzieki, ale to jakby nie rozwiazuje problemu ze nie wiem jak to robic/ czegos moze nie rozumiem etc :/
    • 47:
       
      CommentAuthorinsert
    • CommentTime14 Mar 2011
     
    ok, wiec po kolei:

    - jak zalaczyc do zrodla programu w action plik zawierajacy np. bitmape, lub tez plik mapy z Envision (czym przekonwertowac takie pliki aby ich dane mogly byc umieszczone w tablicy w action), jak wygladalaby skladnia deklaracji takiej tablicy

    - czy w action da sie NA RAZ zadelkarowac tablice ORAZ nadac jej adres w pamieci ORAZ tym samym rozkazem wypelnic tablice danymi?
    • 48:
       
      CommentAuthorinsert
    • CommentTime15 Mar 2011
     
    pytanie odnosnie tworzenia wlasnej dlisplay listy, mam takie cos:

    BYTE ARRAY DLIST =
    [
    112 112 112
    68 160 155
    2
    4
    2
    4
    2
    4
    2
    4
    2
    65
    68
    160
    ]

    wywoluje to przez:

    POKEC(560,DLIST)

    i mam "paprochy na ekranie" dlaczego? :/ co robie zle ze pokazuje jakies dane? proba wrzucenia czegos tez nie zawsze daje efekt np. PRINTCE("COSTAM")
    • 49: CommentAuthorEagle
    • CommentTime15 Mar 2011
     
    Kurde dziesiętnie to ja nie kumam :)
    ale widzę to tak
    $70,$70,$70
    czyli 3 puste linie
    $44 czyli tryb 4 antic plus LMS (ładowanie adresu ekranu)
    $9BA0 (39840) adres gdzie jest obraz
    2 - linia trybu 2
    4 - linia trybu 4
    ...
    ...
    ...
    ...
    $41 skok powrotny do adresu DL $a044 (41028)

    Pierwsza sprawa to nie widziałem trybu graficznego 4 i 2 mieszanego na przemian.
    Po drugie sprawdź czy adres powrotu DL się zgadza.
    No i czy adres dla LMS (czyli danych ekranu) jest ok.
    • 50:
       
      CommentAuthorinsert
    • CommentTime15 Mar 2011 zmieniony
     
    tak naprawde nie potrafie tego zrozumiec, tj rozumiem tworzenie pustych lini instrukcjami 112 potem juz nie wiem jakie wartosci czemu dopowiadaja, to 68 nie wiem skad sie bierze, tak samo jak dwie kolejne (ale to chyba adres pamieci ekranu rozbity na dwie wartosci - btw. jaki to ma byc adres?) potem sa dane lini - to w miare rozumiem i nie rozumiem koncowki, tj czytalem ze DL musi sie konczyc instrukcja $41 (65dec) ale widze ze konczy sie czasami adresem znowu, czarna magia :(

    Czy ktos bylby tak mily i jak najprosciej sie da wytlumaczyl mi jaka powinna byc konstrukcja np. display listy ktora na ekranie stworzy 24 linie w trybie 12 (antic to tryb chyba 4?) na srodku ekranu? I czy wywolanie takiej DListy przez przypokowanie jej do adresu 560 to wstarczajace.
    II sprawa to wspomniane na wstepie wykorzystanie DLI do zmiany koloru tla tego ekranu - ponawiam prosbe o w miare prosta odpowiedz
    z gory dziekuje za pomoc