atarionline.pl
atarionline.pl Atari
Login:
Hasło:
Zapamiętaj mnie
Translate to RSS RSS
Nowy RECOIL z 2018-02-20 22:21 (5)
U nas znowu filmowo z 2018-02-19 18:08 (1)
Relacja z KWAS 13 z 2018-02-14 14:22 (13)
Grawitacja 2018! z 2018-02-06 16:36 (8)
KWAS 13 w Sopocie z 2018-01-29 18:46 (27)
Zbierajmy papiery! z 2018-01-28 02:52 (25)
Reedycja kolejnej klasycznej książki: „Atari Basic” z 2018-01-24 23:30 (11)
Wykład o demoscenie z 2018-01-16 17:54 (33)
Różności z ostatnich tygodni z 2018-01-14 19:21 (21)
Pismo "Astronomia" z nami z 2018-01-12 16:12 (9)
Odkurzone gry Gandalfa – część II z 2018-01-09 23:47 (5)
Boulder Dash Mugen – nowe zestawy plansz z 2018-01-05 00:05 (18)
Wykłady o retro z 2018-01-04 02:14 (4)
NYD 2018 z 2018-01-01 14:50 (24)
Jack the Nipper na małe Atari z 2017-12-31 14:32 (28)
Wyniki Kaz Kompo 2016 z 2017-12-29 21:37 (53)
Last Party 2017 - stuff, wyniki z 2017-12-28 23:59 (55)
Last Party rozpoczęte! z 2017-12-27 22:35 (24)
Święta, Skool Daze i Bosconian z 2017-12-24 15:01 (12)
Atari Last Party już za kilka dni! z 2017-12-22 08:03 (68)
«« 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
    [K] LPT do Portfolio (1)
    ostatni: 21-02-2018 21:44, okult
    trzeci kolor łącznych spritów 1 i... (17)
    ostatni: 21-02-2018 19:46, bocianu
    Game Maker ... nadchodzi (124)
    ostatni: 21-02-2018 17:15, sis101
    RetroArch, emulacja Atari800, sma... (2)
    ostatni: 21-02-2018 13:19, pgru
    Wywiad z Duddim (13)
    ostatni: 21-02-2018 12:29, volt
    Atari ST hicolor video (15)
    ostatni: 21-02-2018 07:56, Jacques
    Atari Font Creator (29)
    ostatni: 20-02-2018 22:45, bocianu
    Wywiad z Maciejem Zwolińskim (2)
    ostatni: 19-02-2018 20:50, jesionen
    Retro Na Gazie (100)
    ostatni: 19-02-2018 16:58, Kaz
    Atarociekawostki na blogu TDC (39)
    ostatni: 19-02-2018 11:30, Kaz
    Wywiad z Yolkiem (5)
    ostatni: 18-02-2018 19:21, string
    ATARI.PL i inne takie - BARDZO WA... (10)
    ostatni: 18-02-2018 12:11, Kaz
    Wykład o Atari w Krakowie (19)
    ostatni: 17-02-2018 16:29, jesionen
    Kontakt do Voyagera potrzebny . (13)
    ostatni: 17-02-2018 04:50, IRATA4
    Radio Aktywne (12)
    ostatni: 16-02-2018 19:47, Kaz

    Kategorie Forum Atarum

    Użytkowników: 1801
    Ostatnio zarejestrowany: okult
    Postów ostatniej doby: 15

    Społeczność/Community

    Najbliższe imprezy
    Jeżeli znasz termin i miejsce jakiegoś zlotu albo spotkania milośników Atari to poinformuj nas. Tutaj możemy wstawić baner i link.

    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 (29)
    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 »»