atarionline.pl
atarionline.pl Atari
Login:
Hasło:
Zapamiętaj mnie
Translate to RSS RSS
Uwolnienie Topornego z 2017-12-11 12:59 (19)
SV2017 - prace, wyniki z 2017-12-10 22:27 (37)
SV2017 – krótka relacja z 2017-12-10 11:07 (78)
Silly Venture 2k17 – relacja na żywo z 2017-12-08 16:08 (80)
Nadchodzi premiera "07 zgłoś się" z 2017-12-08 00:05 (4)
Poczwórny numer "Pro(c) Atari" z 2017-12-07 17:29 (0)
Kaz Kompo 2016 z 2017-12-06 00:45 (41)
Poradnik programisty Atari – nowe wydanie z 2017-12-04 13:35 (15)
Dextrosy i STE-fany z 2017-11-30 19:59 (6)
Remanent za rok 2016 – modyfikacje klasycznych gier z 2017-11-29 20:59 (13)
Konkurs jubileuszowy na blogu Tdc z 2017-11-26 22:20 (18)
Skool Daze – ostatnia prosta z 2017-11-22 22:49 (18)
Modyfikacje starszych gier: Donkey Kong Jr. i Bubsy z 2017-11-19 23:00 (10)
Nowe demo na duże Atari z 2017-11-14 23:01 (138)
Zanim stali się znani... Kto wystąpił w reklamach Atari? z 2017-11-07 21:27 (8)
Powrót z przyszłości: Giełda Bajtka i koncert Marka Bilińskiego! z 2017-11-03 01:03 (155)
Aktualności growe z 2017-11-01 14:19 (13)
Silly Venture 2k17 – nowa invitka i garść informacji! z 2017-10-30 10:45 (17)
Wyniki konkursu programistycznego ABBUC 2017 z 2017-10-28 16:53 (17)
Pokłosie RetroKomp/LOAD ERROR 2017 z 2017-10-22 16:28 (22)
«« nowszestarsze »»

Pomocnik/Helper
Gry/Games

Katalog gier

Opisy gier
Frogs opisał Xeen (0)
Choplifter! opisał Urborg (0)
Joust opisał Urborg (16)
Commando opisał Urborg (35)
Mario Bros opisał Urborg (13)
Xenophobe opisał Urborg (34)
Robbo Forever opisał tbxx (16)
Kolony 2106 opisał tbxx (0)
Archon II: Adept opisał Urborg/TDC (9)
Spitfire Ace/Hellcat Ace opisał Farscape (7)
Wyspa opisał Kaz (9)
Archon opisał Urborg/TDC (16)
The Last Starfighter opisał TDC (30)
Dwie Wieże opisał Muffy (17)
Basil The Great Mouse Detective opisał Charlie Cherry (121)
Inny Świat opisał Charlie Cherry (17)
Inspektor opisał Charlie Cherry (19)
Grand Prix Simulator opisał Charlie Cherry (16)
Rescue On Fractalus opisał Kaz (18)
Stranded opisał Kaz (10)
«« nowszestarsze »»

Użytki/Utils
Wewnętrzne/Internals



   Nowinki tworzone dzięki CuteNews
FAQ o języku LogForth
Poniższe informacje zostały przygotowane przez Pawła "Cosi" Piątkowskiego, który jest jednocześnie autorem programu - mieszanki Logo i Forth - pod nazwą "LogForth":

1. Co to jest LogForth?

LogFORTH jest biblioteką języka Logo, umożliwiającą programiście korzystanie z konstrukcji języka Forth w środowisku Logo.

2. Z czego się składa LogForth?

Na dysku znajduja sie nastepujace pliki:

  • DOS.SYS
  • CP.SYS - pliki systemowe DOSa
  • AUTORUN.SYS - interpreter Logo
  • LOGFORTH - biblioteka LogFORTH
  • LIBCOSI - biblioteka libcosi
  • BENCH - biblioteka benchmark
  • CZYTAJ.DOC - ta dokumentacja

Po uruchomieniu interpretera należy wpisać:
LOAD "D:LOGFORTH



3. Lista funkcji

  • OPER lista

    Wykonuje podaną listę działań Forth-a. Dostepnę operacje:
    liczba rzeczywista - wrzuca podana liczbe na stos
    + - * / - wykonuje odpowiednie działanie, zgodnie z konwencja RPN (odwrotna notacja polska)
    . - ściąga liczbę ze stosu i wypisuje na ekran
    SWAP - zamienia miejscami dwa górne elementy stosu
    DUP - kopiuje górny element stosu
    DROP - usuwa górny element ze stosu
    :procedura - wykonuje zdefiniowaną w Logo procedurę o podanej nazwie.

    Przykład:
    OPER [2 4 * .]
    wykonuje działanie 2*4 i wypisuje wynik na ekran.

  • DOLOOP lista

    Wykonuje pętlę zgodnie z konwencją Fortha. Dwa górne elementy stosu oznaczają kolejno początkowy i końcowy stan licznika. Lista działań jak w funkcji OPER, dodatkowo I wrzuca na stos aktualną wartość licznika. Przykład:
    OPER [11 1] DOLOOP [I 2 * .]
    wyświetla 10 kolejnych liczb parzystych.

  • S?

    Zwraca wartość górnego elementu stosu, jednocześnie ściągając go. Przykład:
    OPER [2 4 *] PRINT S?
    wyświetla wynik mnożenia 2*4 (jak w pierwszym przykładzie).

  • S! element

    Wrzuca na stos podany element. Przykład:
    S! FIRST RL OPER [DUP * .]
    pobiera z klawiatury liczbę, a następnie wyświetla kwadrat tej liczby.

    Biblioteka libcosi

    Zawiera kilka dodatkowych funkcji, rozszerzajacych mozliwosci Logo. Nie jest wymagana przez "LogFORTH". Bibliotekę wczytujemy wpisując:
    LOAD "D:LIBCOSI

    Funkcje:

    # komentarz

    Komentarz.

    @ "zmienna wartosc

    Synonim dla MAKE.

    ASM adres kod

    Umieszcza w podanym miejscu w pamięci kod maszynowy. Przykład:
    ASM 709 [10 80 126 50]

    $ lista

    Zwraca podaną listę jako słowo. Przykład:
    SHOW $ [ALA MA KOTA]

    FOR "zmienna od do blok
    Iteruje blok po zmiennej, od wartości "od" do wartości "do". Przykład:
    FOR "T 1 10 [PR :T]

    FOREACH lista "zmienna blok

    Wykonuje podany blok dla każdego klucza listy, przekazując ten klucz do zmiennej. Przykład:
    FOREACH [1 2 A] "T [PR :T]

    LGET "lista
    Zwraca ostatni element z listy, usuwając go jednocześnie z tej listy. Przykład:
    @ "LI [A B C D]
    PR LGET "LI
    SHOW :LI

    FGET "lista

    Jak wyżej, z tym że pobiera pierwszy element listy.

    SLICE lista n

    Zwraca n-ty element listy. Przykład:

    PR SLICE [A B C D] 3

    SETSLICE "lista n wartosc

    Ustawia wartosc n-tego elementu listy. Przykład:
    @ "LI [1 2 3 4]
    SETSLICE "LI 2 "X
    SHOW :LI

    INC "zmienna

    Zwiększa o 1 wartość zmiennej liczbowej.

    DEC "zmienna

    Zmniejsza wartość zmiennej.

    Biblioteka bench

    Zawiera tylko jedną funkcję, pozwalająca na testowanie czasu wykonania procedur. Aby ją wczytać, należy wpisać:
    LOAD "D:BENCH
    Wywołanie:
    TEST [polecenie]
    Po zakończeniu działania procedury funkcja wyświetla czas jej wykonania.

    4. Jak korzystać?

    W trybie bezpośrednim Fortha wpisujemy dane i słowa oddzielone spacjami. Jeżeli wpiszemy liczbę, wskakuje na stos; jeżeli operator matematyczny, ze stosu pobierane są dwie liczby, a następnie wrzucany wynik. Jeżeli wpiszemy:

    5 4 + 3 * .

    to Forth wrzuci na stos dwie liczby (5 i 4), doda to siebie, wynik pomnoży przez 3, a następnie wyświetli wynik (kropka).

    Liczbami na stosie można operować za pomocą słów DUP, DROP i SWAP. Pierwsze kopiuje liczbę znajdującą się na szczycie stosu, drugie usuwa górną liczbę ze stosu, a trzecie zamienia miejscami dwie górne liczby. W LogFORTHcie to samo uzyskujemy za pomocą funkcji OPER. Poprzedni przykład można zapisać jako:

    OPER [5 4 + 3 * .]

    5. Różnice w stosunku do Fortha

  • dostępny jest tylko tryb bezpośredni; odpowiednikiem trybu kompilowanego są deklaracje procedur w Logo
  • LogFORTH operuje na liczbach rzeczywistych (fig-FORTH na całkowitych)
  • nie ma możliwości zagnieżdżania pętli DOLOOP (trzeba zamiast tego użyć polecenia REPEAT)

    6. Wady i niedociągnięcia (bo przecież jakieś muszą być!)

  • WYDAJNOŚĆ!!! chciałbym powiedzieć, że LogFORTH łączy elastyczność Logo z szybkością Fortha, ale tak nie jest. Kiepska wydajność Logo to jest najsłabsze ogniwo we wszystkich projektach związanych z tym językiem
  • wpisanie "nielegalnych" słów w instrukcji OPER nie powoduje wyświetlenia błędu; zamiast tego program ignoruje błędny fragment (a tak nie powinno być)

    7. Wstawki maszynowe w Logo

    To jest chyba jedyny sposób, żeby poprawić wydajność programów, nie przepisując przy tym od nowa interpretera Logo. Niestety, albo i stety, nie w całej pamięci można pisać. Według książki "Języki Atari XL/XE" wersja kartridżowa zostawia dla użytkownika obszar od $600 do $7FFF. W przypadku wersji dyskowej trzeba od tego odjąć jeszcze miejsce na DOS-a. Zostaje powiedzmy obszar $1E00-$7FFF, KTÓRY JEST PRZEZNACZONY NA DANE I PROGRAMY, tak więc na przykład zadeklarowanie nowej zmiennej może nam skasować wstawkę maszynową, jak również wstawka maszynowa może nadpisać kod w Logo (co zazwyczaj powoduje zwis).

    Jak widać, sytuacja nie jest za ciekawa. Bez problemów można pisać po obszarze rejestrów i Display List - można w ten sposób nawet ingerować w obszar grafiki żółwi. Natomiast nie udało mi się wymyślić, gdzie można bezpiecznie umieścić kod maszynowy. Pewnym rozwiązaniem jest oczywiście pilnowanie zużycia pamięci i liczenie po cichu na to, że nasz kod nie zostanie zamazany, ale Logo ma tak nieszczęśliwie rozwiązany mechanizm garbage collection, że po krótszym lub dłuższym czasie i tak zmienne wejdą w obszar, gdzie jest wstawka.

    Mam nadzieję, że teraz, kiedy udało się wywołać pewne zainteresowanie językiem Logo, ktoś bardziej obeznany z mapą pamięci Atari odkryje, gdzie można umieszczać procedury maszynowe. A to dałoby nam już połączenie Logo, Fortha i języka maszynowego :-D

    8. Sztuczki w Logo

    Programowanie na piecu przyzwyczaja człowieka do pewnych rzeczy, bez których trudno się potem obejść. Twórcy Logo nie przewidzieli ich wykorzystania, ale można je uzyskać okrężną drogą:

  • Pętle WHILE
    Logo niestety jest pozbawione podstawowych elementów programowania strukturalnego, jakimi są pętle. Zamiast tego zalecana jest rekurencja (pomijam fakt, jakie to nieoptymalne). W ten sposób łatwo zaprojektować pętlę:

    TO FUNKCJA
    MAKE "N 10
    PR [START]
    WHILE
    PR [KONIEC]
    END
    TO WHILE
    IF :N>0 [PR :N MAKE "N :N-1] [STOP]
    WHILE
    END


  • Funkcje o zmiennej liczbie parametrów
    Baardzo przydatna rzecz. Można ją zrealizować, przekazując do funkcji parametry w formie listy (tak jak to jest robione w Perlu):

    TO FUNKCJA :LISTA
    IF EMPTYP :LISTA [STOP]
    MAKE "PARAM FIRST :LISTA
    ...
    FUNKCJA BF :LISTA
    END


  • Tablice asocjacyjne
    Kolejna fajna rzecz z Perla :)

    MAKE "LISTA [[IMIE JAN] [NAZWISKO NOWAK] [WIEK 37]]
    FIRST SLICE :LISTA numer (tak uzyskujemy klucz)
    LAST SLICE :LISTA numer (a tak wartość)

    (SLICE jest funkcją z biblioteki libcosi)

  • Odwołanie do zmiennej przez nazwę (referencje)
    To nie jest żadna sztuczka, tylko normalny element języka. Ale spróbujcie mi pokazać atarowski język, który to umożliwia ;)

    MAKE "REF1 "REF2
    MAKE "REF2 "X
    MAKE "X 10
    PR THING THING THING "REF1
    albo
    PR THING THING :REF1

    (to taka mocno zagnieżdżona referencja)

  • Pseudostałe
    Logo nie obsługuje stałych. Ale:

    TO PI
    OP 3.14159
    END
    MAKE "S PI*:R*:R


  • Zmienne lokalne
    Tego też niby nie ma w Logo. Można to prosto zrealizować, wykorzystując fakt, że parametry funkcji są lokalne:

    MAKE "X 10
    TO FUNKCJA :X
    MAKE "X 20
    PR :X
    END
    FUNKCJA 0
    PR :X


  • Tablice n-wymiarowe (Bajtek 5/87)
    Bardzo ciekawy sposób, w dodatku pozwalający na zakładanie bardzo dużych tablic bez obciążania pamięci. Wykorzystuje zwykłe zmienne o odpowiednich nazwach, w tym przypadku tablica#i,j:

    TO TAB :NAZWA :I :J
    OP (WORD :NAZWA "# :I ", :J)
    END
    MAKE (TAB "A 5 4) "ABC (tworzy "komórkę" A[5,4])
    PR THING (TAB "A 5 4)
    albo
    PR :A#5,4 (wypisuje zawartość komórki)


    2009-06-23 17:47 by Kaz
    komentarzy: 2
  • wawrzyn @2010-10-08 00:08:55
    Ciekawe, ze wybor padl wlasnie na Forth i Logo. Obydwa jezyki sa godne uwagi i niedoceniane. Forth ma nalepke archaicznego, Logo jezyka dla dzieci (choc projekt Starlogo temu skutecznie zaprzecza). Wracajac do Fortha - jego tworca, Chuck Moore, to niesamowicie ciekawa osoba. Przy okazji, ciekawe, czy powyzszy projekt to taka sztuka dla sztuki, czy autor zamierza do czegos go uzyc?
    Kaz @2010-10-08 02:55:50
    Wawrzyn - na forum latwiej widac takie pytania, posty o LogForth sa tutaj:

    http://atarionline.pl/forum/comments.php...
    nickname
    e-mail / website (opcjonalnie)
    Aktualne tematy
    Silly Venture 2k17 - uniting the ... (207)
    ostatni: 12-12-2017 22:14, miker
    Arabic cartridges (26)
    ostatni: 12-12-2017 18:54, voy
    SV2k17 - PODZIĘKOWANIA (38)
    ostatni: 12-12-2017 13:08, martinez
    Atari Fan 5 w Warszawie (12)
    ostatni: 12-12-2017 05:23, tdc
    Prośba o pomoc ! (40)
    ostatni: 11-12-2017 23:10, jesionen
    Wymienię się oryginalnymi dyskiet... (14)
    ostatni: 11-12-2017 20:58, QTZ
    Aliens from WAVES Silly Venture 2... (2)
    ostatni: 11-12-2017 15:07, QTZ
    Kartridż z grą "07 zgłoś się" - p... (9)
    ostatni: 11-12-2017 11:34, clayster
    SV2k17 - rejestracja, koszulki i ... (40)
    ostatni: 11-12-2017 07:56, tdc
    Kopiowanie z Sio2PC na dyskietkę ... (7)
    ostatni: 11-12-2017 02:22, Ataripuzzle
    Grafika w Turbo Basic XL (7)
    ostatni: 11-12-2017 00:55, QTZ
    Nowy emulator XE/XL na Androida (30)
    ostatni: 11-12-2017 00:02, Dracon
    Informacje o Graph2Font (G2F) (71)
    ostatni: 10-12-2017 21:44, QTZ
    STOS (1)
    ostatni: 10-12-2017 18:21, gsgalezowski
    Sillyventure 2K17 unofficial live... (14)
    ostatni: 10-12-2017 17:17, CharlieChaplin

    Kategorie Forum Atarum

    Użytkowników: 1760
    Ostatnio zarejestrowany: madness
    Postów ostatniej doby: 26

    Społeczność/Community

    Najbliższe imprezy

    Sprzęt/Hardware

    Wynalazki
    Atari i Bluetooth napisał Kaz (17)
    SIO2PC-USB napisał Larek (45)
    Nowe SIO2SD napisał Larek (0)
    SIO2SD w CA12 napisał Urborg (9)
    Ratowanie ATMEL-ów napisał Yoohaas (12)
    Projektowanie cartów napisał Zenon (12)
    Joystick do Atari napisał Larek (54)
    Tygrys Turbo napisał Kaz (7)
    Testowałem "Simple Stereo" napisał Zaxon (3)
    Rozszerzenie 1MB napisał Asal (20)
    Joystick trzyprzyciskowy napisał Sikor (18)
    Moje MyIDE oraz SIO2PC na USB napisał Zaxon (16)
    Jak wykonać płytkę drukowaną? napisał Zaxon (26)
    Rozszerzenie 576kB napisał Asal (13)
    Soczyste kolory napisał scalak (28)
    XEGS Box napisał Zaxon (13)
    Atari w różnych rolach napisał (8)
    SIO2IDE w pudełku napisał Kaz (5)
    Atari steruje tokarką napisał Kaz (14)
    DarkMouse napisał Kaz (7)
    «« nowszestarsze »»