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:
       
      CommentAuthorinsert
    • CommentTime27 Dec 2010 zmieniony
     
    Czesc,

    Zakladam jeden watek, w ktorym bede meczyl Szanownych Kolegow, mam nadzieje ze przyda sie to takze potomnym ;)

    PYTANIE:

    Jak pokazac zawartosc katalogu podczas ladowania zrodla do edytora? (W Poradniku Programisty CZ.II jest to jakos enigmatycznie opisane). Mam podpiety w emulatorze hd na katalog i atari widzi to urzadzenie jako H1. Wszelkie proby wpisania H1:*.* oraz wariacji ze znakiem "?" nie daja rezultatu.

    PYTANIE:

    Czy da sie przerwac prace dowolnego programu w Action! i wrocic do edytora/monitora? Np. jesli program ma na koncu petle DO OD ?

    PYTANIE:

    Czy w Action istnieja komendy sinus i cosinus? Jesli nie to czy jest gotowa procedura, ktora mozna uzyc do tego typu obliczen?

    Pozdr

    P.
    • 2: CommentAuthors2325
    • CommentTime27 Dec 2010
     
    "Analogicznie odczytu zapisanego pliku dokonuje się poleceniem SHIFT-CONTROL-R, po którym komputer pyta "Read?" Trzeba teraz podać nazwę pliku w sposób wyżej opisany. Dodatkowo polecenie to umożliwia odczyt spisu zawartości dyskietki (directory). Następuje to po podaniu jako nazwy pliku tekstu ?1:*.*. Gdy chcemy odczytać directory z innej stacji dysków, to wystarczy cyfrę 1 zastąpić numerem tej stacji."
    • 3: CommentAuthors2325
    • CommentTime27 Dec 2010
     
    wydaje mi się że pomijamy cyfrę 1 żeby to działało
    • 4:
       
      CommentAuthorinsert
    • CommentTime27 Dec 2010
     
    Error 130, pudło
    • 5: CommentAuthors2325
    • CommentTime27 Dec 2010
     
    Action! w ogóle przewiduje coś takiego jak dysk twardy?
    • 6:
       
      CommentAuthorinsert
    • CommentTime27 Dec 2010
     
    tak, bo jak na sztywno wpiszesz H1:nazwapliku to odczytuje i zapisuje, wiec to nie problem czegos co udaje naped ale zapisu komendy, Pan Zientara to tak enigmatycznie napisal ze nie da sie zrozumiec :/
    • 7:
       
      CommentAuthorKaz
    • CommentTime27 Dec 2010
     
    TDC powinien tu wkrotce wkroczyc, bo on w Action! sporo ostatnio dzialal.
    • 8: CommentAuthornosty
    • CommentTime27 Dec 2010
     
    A myslalem ze sprawe Action! mamy juz zalatwioną: TDC po latach nauki i zmagan udowodnil ze da sie w tym jezyku napisac gre ;) a gwozdziem do trumny byl Atalan, na ktory (choc byl w wersji alpha i zabugowany do niemozliwosci) napisano w pol roku wiecej gier niz na Action w lat 10.

    A tu prosze, kolejny masochista sie trafil :)
    • 9:
       
      CommentAuthorinsert
    • CommentTime27 Dec 2010
     
    nie bez powodu reprezentuje grupe z BDSM w nazwie ;)
    • 10:
       
      CommentAuthortdc
    • CommentTime30 Dec 2010 zmieniony
     
    Witaj Insert, cieszy mnie to że nie tyle za Action! a w ogóle zabrałeś się za tworzenie kodu;)

    Ad 1
    O ile mi się wydaje to tego nie przewidziano. Konstrukcja z "?" używa dysków "Dx:" domyślnie, więc z "Hx:" nie wczyta nic, choć może np. Kuba tu coś wymyśli. Ja operuję na zwykłych Atrach, to się potem przydaje do backupów bo wystarczy zrobić kopię jednego ATRa a wszystko jest już zbackupowane.

    ad 2
    Action! należy traktować jak asm, jeśli zrobisz pętlę do od to nie ma z niej wyjścia poza reset. Jednak wiele programów/procedur da sie zatrzymać klawiszem Break, ale pod warunkiem, że pętla zawiera w sobie operacje systemowe np. print, plot itp.
    W przeciwnym wypadku trzeba dodać własnego IF K=28 THEN XXXX K=255 FI, gdzie K jest rejestrem klawiatury.

    ad 3
    W Action! nie ma operacji zmiennoprzecinkowych więc nie ma też sin,cos,tg itp. Musisz sobie np. w Atari Basic napisać kod który zapisze Tobie do pliku sin. To ma swoje zalety, bo skoro nie ma w tym języku wsparcia dla operacji przecinkowych to od razu masz to zoptymalizowane;)

    Powodzenia !


    Nosty, pokazałbyś że jesteś prawdziwym facetem i też nauczyłbyś się Action! :D
    • 11:
       
      CommentAuthorinsert
    • CommentTime30 Dec 2010 zmieniony
     
    Dzieki!

    kolejne pytania:

    1. Czy w Action da sie wykorzystac zmienne typu string, np ladujac do tablicy wartosci typu "KOTEK" "PIESEK" "ALA" etc i potem wypisac te wartosci z tablicy za pomoca Print(nazwatablicy(numer elementu)) ?

    2. Czy da sie polaczyc w instrukcji Print kilka roznych wynikow np:

    A = 32

    Print("Wynik to:" + A);

    zeby rezultat byl w postaci wyprintowania:

    Wynik to: 32

    ?
    • 12: CommentAuthornosty
    • CommentTime30 Dec 2010
     
    > Nosty, pokazałbyś że jesteś prawdziwym facetem i też nauczyłbyś się Action! :D

    Szczerze probowalem, ale ten kompilator ma akurat typowo kobiecą logikę :P i nie chodzi mi bynajmniej o to ze jest intuicyjny ;) Po prostu nie sporob przewidziec jego reakcji :D

    @insert - ja poleglem wlasnie na probie napisania w Action! tekstowki. Ten jezyk zdecydowanie nie jest przyjazny jesli chodzi o przetwarzanie tekstu.
    • 13:
       
      CommentAuthortdc
    • CommentTime31 Dec 2010 zmieniony
     
    1. w Action! nie ma stringów są tablice, stringi są dostępne w dodatkowej bibliotece (do znalezienia w Google). Jednak bez dodatków możesz bez problemu podstawić w różny sposób wartość "KOTEK" do tablicy, a potem wypisywać ją znak po znaku na ekran, np. w bibliotece Action! jest kilka PUT(), które tak działają jak w Basicu.

    Inna sprawa, że ja tego nie używam i odradzam wypisywanie znaków, znak po znaku i to z wykorzystaniem print, put itp. ale o tym byłoby więcej gdybyś pojawił się na sztabie;)

    2. Wykorzystując procedury dostępne w bibliotece, możesz to zrobić, ale musisz to rozbić na oddzielne wywołania procedur:

    BYTE A

    PRINT("Wynik: ")
    PRINTBE(A)


    Jeśli bardzo chcesz to zrobić na wzór C/java to ściągnij sobie z netu rozszerzoną procedurę print(), która o ile pamiętam potrafi to. Ja z resztą ze starych czasów mam na dyskietce coś takiego i nawet ostatnio zagadałem Kubę aby to upublicznić.

    > Print("Wynik to:" + A);

    he, he ten "+" pachnie mi javą ;):)


    nosty:

    ten kompilator ma akurat typowo kobiecą logikę :P

    No i dlatego masz tu szansę zabłysnąć swoją męskością ;):)

    nosty:

    Po prostu nie sporob przewidziec jego reakcji :D

    Eeee tam, przesadzasz, o ile pamiętam to tutaj na forum jeszcze nikt nie miał takiego problemu aby mu Action! co chwilę generował coś innego (o ile sam czegoś nie spaprał).

    nosty:

    Ten jezyk zdecydowanie nie jest przyjazny jesli chodzi o przetwarzanie tekstu.

    I to jest dowód na to że Action! jest podobny do C, bo jeśli ktoś chce zrobić coś z tekstem to robi to np. w javie a nie w C. A ja Wam powiem, że zdaję sobie sprawę z tego że w Action nie jest to zrobione dobrze, ale nic a nic mi to nie przeszkadza ;) Najczęściej jak mam długi tekst to wczytuję go z pliku do pamięci, a nawet mam stary program, w którym wszystko jest na dysku i jest doczytywane gdy potrzeba. To o czym piszecie, nigdy nie było mi potrzebne w Action!
    • 14:
       
      CommentAuthorinsert
    • CommentTime31 Dec 2010
     
    dzieki, wpadlem na moment do knajpy, niestety nie bylo Cie a ja musialem uciekac :/
    • 15:
       
      CommentAuthortdc
    • CommentTime3 Jan 2011
     
    Ja widocznie wpadłem niewiele później, no szkoda ja zawsze wolę spędzać czas na czymś konkretnym.
    • 16:
       
      CommentAuthorinsert
    • CommentTime3 Jan 2011
     
    no szkoda :( wieczorami postaram sie siedziec nad action wiec bede Cie zasypywal tonami glupich pytan :)
    • 17:
       
      CommentAuthortdc
    • CommentTime3 Jan 2011
     
    :)
    Wieczorami ? widzę że to brzmi poważnie ;)
    • 18:
       
      CommentAuthorinsert
    • CommentTime4 Jan 2011 zmieniony
     
    PYTANIE:

    Jak zrobic proste "czekanie na klawisz" zeby wstrzymac dzialanie programu np. przed jego zakonczeniem,

    proba typu:

    POKE(764,255)
    IF PEEK(764)<>255 THEN FI

    RETURN

    nie dziala :/ dlaczego?

    i dlaczego dziala takie rozwiazanie?

    BYTE CH = 764

    DO
    UNTIL CH <> 255
    OD

    RETURN
    • 19:
       
      CommentAuthorzilq
    • CommentTime4 Jan 2011
     
    Bo nie ma pętli w której by program oczekiwał.

    byte key=764

    Proc Main()
    key=255
    while key=255 do od
    key=255
    Return
    • 20:
       
      CommentAuthorinsert
    • CommentTime4 Jan 2011
     
    nie rozumiem tylko gdzie tutaj odniesienie do klawiatury?

    byte key=764

    przypisuje zmiennej key wartosc 764, czy tak?

    a potem jest warunek, wiec nie kumam...
    • 21:
       
      CommentAuthorzilq
    • CommentTime4 Jan 2011
     
    konstrukcja if (...) fi nie jest pętlą! "Fi" daje tylko kompilatorowi znak, że to koniec warunku (jakoś tak :D)

    Równie dobrze, powinno zadziałać z Peek/Poke, ale w Action! takie rozwiązanie jest mało efektywne (dla szybkości jaki i dla kodu) Dlatego odwołanie po przez zmienną odwołującą się do konkretnej komórki pamięci jest... lepsze :D
    Po za tym, druga konstrukcja którą podałeś, zawiera pętlę w której oczekuje na zmianę wartości zmiennej/komórki(764) i to jest rozwiązanie twojego problemu (pisałem o tym w wątku wcześniej)
    • 22:
       
      CommentAuthorzilq
    • CommentTime4 Jan 2011 zmieniony
     
    oups... omyliłem wątek z postem :D sory...
    no nie ważne
    byte key=764

    to nic innego jak zmienna typu byte umieszczona/przydzielona w komórce 764. Czytając sprawdzasz, zapisując zmieniasz zawartość tej komórki/zmiennej (764 w tym przypadku)
    To równoznaczne z Peek(764) (czytasz) Poke(764,255) zapisujesz wartość.
    • 23:
       
      CommentAuthorinsert
    • CommentTime4 Jan 2011
     
    dzieki :)
    • 24:
       
      CommentAuthorinsert
    • CommentTime4 Jan 2011
     
    w takim razie pytanie, czy deklaracja zmiennej

    BYTE A

    A = 764

    to to samo co

    BYTE A=764

    ?
    • 25:
       
      CommentAuthorzilq
    • CommentTime4 Jan 2011 zmieniony
     
    nie, to nie to samo

    byta a

    kompilator przydziela sam miejsce w pamięci dla tej zmiennej

    byte a=764

    ty przydzielasz sam, wyręczając kompilator ]:->
    • 26:
       
      CommentAuthorinsert
    • CommentTime4 Jan 2011
     
    dzieki :)

    czyli byte a=adres to to samo co Poke(adres,wartosc) ?
    • 27:
       
      CommentAuthorzilq
    • CommentTime4 Jan 2011 zmieniony
     
    w ten sposób można też przydzielać też tablice, np.

    byte array Color=708

    da tablice poszczególnych rejestrów kolorów, począwszy od komórki 708 wzwyż.
    Color[1]=15 Color[3]=0

    ustawi (w trybie np. Gr.0) białe litery na czarnym tle.

    Należy bardzo uważać z takimi konstrukcjami, gdyż tablice w action nie mają sprawdzanego zakresu (dla szybkości) a w tym przypadku ten zakres nawet nie został określony (jest tylko komórka startowa) Skutkować to może zawieszeniem, skasowaniem danych i szeregiem innych, często kłopotliwych problemów.
    • 28:
       
      CommentAuthorzilq
    • CommentTime4 Jan 2011
     
    byte a=adres

    (...)
    a=wartość ; Poke(adres,wartość)
    PrintCE(a) ; ? Peek(adres)


    w skrócie :D
    • 29:
       
      CommentAuthorinsert
    • CommentTime4 Jan 2011
     
    dzieki :)
    • 30:
       
      CommentAuthorzilq
    • CommentTime4 Jan 2011
     
    Nie ma za co. Liczę, że pomogłem :)
    A tym czasem znikam w sen.
    Dobrej nocy.
    • 31:
       
      CommentAuthorinsert
    • CommentTime4 Jan 2011
     
    kolejny problem laika :)

    probuje wedlug ksiazki Atari Basic Miguta, przepisac procedure page flippingu na Action, moj kod wyglada tak:

    PROC MAIN()
    BYTE DLIST
    BYTE DLISTA
    BYTE DLISTB
    BYTE ADL
    BYTE AA
    BYTE BB
    BYTE CC

    GRAPHICS(9)

    DLISTA = PEEK(560)
    DLISTB = PEEK(561)
    DLIST= DLISTA + 256*DLISTB

    AA = DLIST+4
    BB = DLIST+5
    CC = 256*PEEK(BB)

    ADL = PEEK(AA)+CC

    POKE(89,128)
    POKE(88,0)

    COLOR = 15
    POSITION(40,40)
    DRAWTO(60,60)

    POKE(89,112)
    POKE(88,0)

    COLOR = 10
    POSITION(10,10)
    DRAWTO(100,100)

    KEYPRESS()

    GRAPHICS(0)

    RETURN

    ... oczywiscie mam bledy i nie dziala, prosze o pomoc
    • 32:
       
      CommentAuthorzilq
    • CommentTime4 Jan 2011
     
    Raz.
    Po co tyle wyliczania na początku, jak i tak z tego nie korzystasz (w późniejszym etapie)?!

    Dwa.
    Podstawowy błąd to źle uwzględnione typy zmiennych.
    Wszędzie założyłeś typ Byte! a to błąd. Dodam nawet LOGICZNY błąd.
    Jak wiadomo, mnożąc liczbę z zakresu 0-255 przez np. 256 nie zmieści się ona w typie Byte, bo jej zakres to 0-255, tak? A więc?
    Błąd logiczny tkwi w typie zmiennych DLIST, CC.

    Trzy.
    Co to jest?
    AA=DLIST+4
    BB=DLIST+5
    CC=256*Peek(BB)

    ADL=PEEK(AA)+CC

    czemu ma to służyć, bo nie bardzo to rozumiem.

    Podsumuje.
    Po pobieżnym przeanalizowaniu przykładu z książki, stwierdzam co następuje.
    Zupełnie źle zinterpretowałeś przykład.
    Spróbuj jeszcze raz, bo to co przedstawiłeś powyżej, nie nadaje się do skorygowania. Po prostu trzeba by było całość od nowa napisać, a to nie oto chyba chodzi, żeby przedstawiać gotowe rozwiązanie.
    • 33:
       
      CommentAuthortdc
    • CommentTime5 Jan 2011
     
    insert, nie przejmuj się, nie Ty pierwszy tu pokazujesz takie błędy i prosisz o pomoc;) jak to się mówi początki bywają trudne. Dlatego zrób jak radzi zilq.
    • 34:
       
      CommentAuthorinsert
    • CommentTime5 Jan 2011 zmieniony
     
    dobrze, wiec po kolei :)

    na ten moment mam takie cos:


    PROC MAIN()

    CARD A,B,DL,C,D,E

    GRAPHICS(7)

    ;COLOR = 1
    ;POSITION(40,40)
    ;DRAWTO(60,60)

    A = PEEK(560)
    B = PEEK(561)
    DL = A+256*B

    PRINTC(DL)

    KEYPRESS()

    GRAPHICS(0)

    PYTANIE:

    dlaczego zapis

    DL = PEEK(560) + 256*PEEK(561)

    jest bledny?

    PYTANIE:

    skoro zmienne A i B mam typu CARD to czy nie powinienem uzywac instrukcji PEEKC(...) ? jesli tak to dlaczego mam zupelnie inna wartosc zmiennej DL jesli uzyje tego w ten sposob:

    A = PEEKC(560)
    B = PEEKC(561)
    DL = A+256*B

    PRINTC(DL)

    ?
    • 35: CommentAuthorrudla
    • CommentTime5 Jan 2011
     
    Whether you use PEEK or PEEKC depends on whether you want t read 1 or two bytes from memory.

    PEEK reads one byte, even if you later store it into CARD variable. If necessary, it will extend the byte to two bytes.

    So

    A = PEEK(560)
    B = PEEK(561)
    DL = A+256*B

    should be correct, but you can write it in much succinct way:

    DL = PEEKC(560)

    or the best method:

    CARD DLADR = 560
    CARD DL
    DL = DLADR

    (I'm not an active Action! user, so there may be some syntax inaccuracies).


    The trick is, that programming languages usually asr not clever enough to undestand, that they should use CARD variable for the result of multiplication of two byte variables.
    Instead they typically use some tricks like using type of the first argument.

    I guess, Action! in this case will multiply 256*PEEK(561)
    • 36:
       
      CommentAuthorinsert
    • CommentTime5 Jan 2011
     
    rudla. thanks, but why DL = PEEK(560) + 256*PEEK(561) is fail?
    • 37:
       
      CommentAuthorinsert
    • CommentTime5 Jan 2011 zmieniony
     
    myslac dalej, mam cos takiego:

    PROC MAIN()

    CARD DLADR=560
    CARD DL,ADRES,ADRESB

    BYTE PIATYBAJT,SZOSTYBAJT


    GRAPHICS(7)

    ;COLOR = 1
    ;POSITION(40,40)
    ;DRAWTO(60,60)

    DL=DLADR

    PIATYBAJT=PEEK(DL+4)
    SZOSTYBAJT=PEEK(DL+5)
    ADRES=PIATYBAJT+256*SZOSTYBAJT

    PRINTC(DL)
    PRINT(" ")
    PRINTB(PIATYBAJT)
    PRINT(" ")
    PRINTB(SZOSTYBAJT)
    PRINT(" ")
    PRINTC(ADRES)

    ADRESB = PEEKC(DL+4)
    PRINT(" ")
    PRINTC(ADRESB)

    PYTANIE:

    czy dobrze obliczam poczatkowy adres pamieci ekranu obiema metodami?

    (metoda1:)

    PIATYBAJT=PEEK(DL+4)
    SZOSTYBAJT=PEEK(DL+5)
    ADRES=PIATYBAJT+256*SZOSTYBAJT

    (metoda2:)
    ADRESB = PEEKC(DL+4)

    PYTANIE:

    mam taki program, rysuje on w trybie 1 dowolny znak na ekranie o danych wspolrzednych, DLACZEGO nie rysuje serduszka?

    INCLUDE "H1:MYLIB.ACT"

    ;---------------------------

    PROC DRAWCHAR(BYTE X,Y,ZNAK)

    CARD EKR=88

    POKE(EKR+X+20*Y,ZNAK)

    RETURN
    ;---------------------------

    PROC MAIN()

    GRAPHICS(1+16)

    ;RYSUJEMY LITERE A
    DRAWCHAR(0,0,33)

    ;RYSUJEMY SERDUSZKO
    DRAWCHAR(1,0,64)

    KEYPRESS()

    GRAPHICS(0)

    RETURN

    PYTANIE:

    ponawiam, dlaczego taki zapis w Action wywala blad podczas kompilacji:

    DL = PEEK(560) + 256*PEEK(561)
    • 38:
       
      CommentAuthorzilq
    • CommentTime6 Jan 2011 zmieniony
     
    Hej. Widzę postępy :) i dobrze.

    Obie metody są z założenia dobre
    Jak już korzystać z funckji to PeekC jest najlepszym rozwiązaniem.
    ADRES=PeekC(DL+4)

    i już. Po ptokach. I problem z:
    DL=Peek(560)+256*Peek(561)

    z głowy :)

    Przypuszczam, że co do powyższego wyliczania adresu, błąd tkwi w dwóch "istotach". Pierwsza to, że wartości zwracane przez funkcję Peek są 8-bitowe (byte). Druga. Jakimś dziwnym trafem, kompilator nie może pogodzić typów zmiennych w wyrażeniu arytmetycznym. Czy to błąd kompilatora Action? Nie wiem - pewnie tak. Action ma dużo błędów, niestety :(
    Za to (co ciekawe) następująca kombinacja już takiego błędu nie wywala:
    DL=256*Peek(561)+Peek(560)


    Co do problemu z serduszkiem w trybie Gr1
    Ten tryb ma swoiste ograniczenie, co do zakresu wyświetlanych znaków. Jest to też jego zaleta, bo dzięki temu mamy do dyspozycji aż cztery różne kolory dla znaku.
    W standardowo otwartym trybie Gr1 znaki wyświetlane są następująco:
    Kod ekranowy    kolor   Poke   Znaki (ATASCI)
    0-63 1 708 32-95
    64-127 2 709 32-95
    128-191 3 710 32-95
    192-255 4 711 32-95

    To samo tyczy się trybu Gr2
    • 39:
       
      CommentAuthorinsert
    • CommentTime6 Jan 2011 zmieniony
     
    dzieki! czyli ze serduszka nie uswiadcze w tym trybie czy jak? :) nie rozumiem troche tego zestawienia (zwlaszcza kolumny Poke i jej uzycia/znaczenia
    • 40:
       
      CommentAuthorzilq
    • CommentTime6 Jan 2011
     
    Teoretycznie da się uzyskać, ale nie pamiętam jak to uczynić. Był chyba jakiś POKE do tego, ale gdzie i co do niego wpisać to ńhuhu...

    Można przepisać generator znaków (to taka alternatywna metoda) ]:->
    • 41:
       
      CommentAuthorinsert
    • CommentTime6 Jan 2011
     
    no to juz czarna magia zawialo :)
    • 42:
       
      CommentAuthorzilq
    • CommentTime6 Jan 2011
     
    czarna magia to spritey programowe w trybach znakowych :]
    A "programowanie" generatora znaków to Pikuś i to nawet nie Pan :D
    • 43:
       
      CommentAuthorinsert
    • CommentTime6 Jan 2011 zmieniony
     
    co znaczy "programowanie generatora znakow? po co to? co to?
    do spriteow dojdziemy... za sto lat ;)

    btw. czy da sie uzyskac taka procedure w trybie graficznym? tj. taki print w trybie graficznym
    • 44:
       
      CommentAuthorzilq
    • CommentTime6 Jan 2011 zmieniony
     
    Programowanie generatora znaków to nic innego ja stworzenie własnego zestawu znaków, umieszczenie go "gdzieś" w pamięci i ustawienie jednego Poke (dokładnie 756) Taki zestaw znaków standardowo zabiera 4 strony pamięci (tj 1KB=1024B - 1 strona pamięci to 256 bajtów) w trybie np. Gr1 i 2 zestaw znaków zabiera połowę z tego, czy 512B (2 strony).
    Efekt "zaprogramowania" własnego zestawu znaków zależy od tego, do czego będziesz chciał wykorzystać tak stworzony zestaw, np. gra, polskie znaki, ładne ramki, itp)

    Co do procedury wyświetlającej tekst w trybach graficznych to już troszkę wyższa szkoła jazdy. Przede wszystkim, aby taka procedura nadawała się do czegokolwiek, wypadałoby ją napisać w assemblerze. W Action! można się pokusić o napisanie takiej procedury, ale o tym to innym razem :) (przyda się znajomość "programowania generatora znaków")

    Opanuj podstawy, a sam dojdziesz do tego, co i jak :]
    • 45:
       
      CommentAuthorinsert
    • CommentTime6 Jan 2011
     
    dzieki :)
    • 46: CommentAuthorrudla
    • CommentTime6 Jan 2011
     
    It depends on the rules of the respective language, how it will evaluate this function. Most languages are not clever enough to realize, they need to use CARD for the result of the expression and will use some simple rule.

    If the 256*PEEK(561) does not work in Action!, then it will be because it uses BYTE arithmetics by default. In such case this expression will return always 0.
    • 47:
       
      CommentAuthorinsert
    • CommentTime6 Jan 2011
     
    thanx Rudla, ale zuo :)
    • 48: CommentAuthormono
    • CommentTime6 Jan 2011 zmieniony
     
    Na początek warto zrozumieć różnicę między kodami ATASCII a kodami ekranowymi zwanymi czasem wewnętrznymi (ang. internal). Następnie poczytać o generatorze znaków i trybach 6 i 7 ANTICa (odpowiedniki 1 i 2 OS).
    Kluczową informacją w zrozumieniu dlaczego serduszko się nie wyświetla może być ostatnie zdanie opisu generatora znaków - generator w trybach 1 i 2 OS ma rozmiar 512B a nie 1024B, jak w pozostałych trybach tekstowych, a to ze względu na to, że dwa ostatnie bity kodują kolor. Standardowy generator znaków w OS znajduje się pod $E000 - znajdziesz tam więc definicje znaków $00..$3f (wg kodów ekranowych - czyli $20..$5f ATASCII). Jeśli zmienisz adres generatora znaków na $E200 (druga połówka generatora OS) wtedy na ekranie pojawią się definicje $00..$1f oraz $60..$7f ATASCII.

    Edit: Dla ciekawości możesz przeprowadzić podobny eksperyment z międzynarodowym zestawem znaków, który znajduje się pod adresem $CC00.
    • 49:
       
      CommentAuthorinsert
    • CommentTime6 Jan 2011
     
    powoli, rozmawiacie z humanista ;P ps. dzieki Mono
    • 50:
       
      CommentAuthorinsert
    • CommentTime12 Jan 2011 zmieniony
     
    mam problem z obsluga joysticka, mam taki program:

    PROC MAIN()

    ;JOYTEST

    CARD PORTA=$D300
    BYTE KEY=764

    KEY=255

    WHILE KEY=255 DO

    IF PORTA=1 THEN PRINT("gora") FI
    IF PORTA=2 THEN PRINT("dol") FI
    IF PORTA=4 THEN PRINT("prawo") FI
    IF PORTA=8 THEN PRINT("lewo") FI

    OD

    KEY=255

    RETURN

    dlaczego nie dziala? :/