atarionline.pl
atarionline.pl Atari
Login:
Hasło:
Zapamiętaj mnie
Translate to RSS RSS
O demoscenie z 2018-05-22 07:09 (14)
Recenzja "Aces of Aces" z 2018-05-20 22:29 (26)
Robbo na festiwalu nauki z 2018-05-18 12:32 (27)
Premiera "Time Pilot" z 2018-05-17 10:14 (30)
Łukasz kwestuje z 2018-05-17 06:09 (3)
Noc Muzeów w Retrokompie z 2018-05-16 22:10 (7)
Nachodzi nowa gra z 2018-05-15 19:25 (27)
Atari w czasopismach z 2018-05-14 12:08 (16)
Wyniki konkursu rebusowego 2018 z 2018-05-11 23:42 (54)
Robbo wędruje na salony z 2018-05-07 10:38 (29)
Gra „Train” z 2018-05-05 12:40 (9)
Konkurs rebusowy 2018 z 2018-05-04 11:59 (27)
Magazyn FLOP 61 z 2018-04-30 15:41 (12)
JagNES rozpoczęty! z 2018-04-28 19:34 (17)
Wykłady w UBU Lab z 2018-04-28 14:06 (4)
Giełda retro w Sopocie z 2018-04-26 17:59 (7)
Wyniki konkursu z 2018-04-26 00:08 (7)
Technonostalgia pod lupą naukowców z 2018-04-23 14:32 (11)
Wywiad z Wojciechem Zientarą z 2018-04-20 22:23 (45)
Urodziny AtariOnline.pl z 2018-04-20 08:06 (53)
«« 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 »»

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
    Obraz z XE65 (3)
    ostatni: 23-05-2018 06:13, romeks
    Konkurs na Recenzję Gry 8-bit z M... (8)
    ostatni: 22-05-2018 23:05, RetroBorsuk
    Pierwsze produkcje (72)
    ostatni: 22-05-2018 22:53, Dracon
    Karton STFM/STE kupie (3)
    ostatni: 22-05-2018 22:14, micromax
    One Moon and Two Suns (15)
    ostatni: 22-05-2018 22:10, IRATA4
    Trzydziesta ósma rocznica gry Pac... (3)
    ostatni: 22-05-2018 20:33, IRATA4
    Silly Venture 2k18 - 10th Celebra... (30)
    ostatni: 22-05-2018 20:10, Kaz
    Noc muzeów w Gdańsku (29)
    ostatni: 22-05-2018 19:11, Arti
    Time Pilot (36)
    ostatni: 22-05-2018 18:40, IRATA4
    20-05-2018 BYŁO grane - retromeet... (16)
    ostatni: 22-05-2018 15:34, tooloudtoowide
    Wapniak 2018 (80)
    ostatni: 22-05-2018 10:59, Alex
    Problem ze SIO2SD (6)
    ostatni: 22-05-2018 10:56, Alex
    Mad Age & This Guy (22)
    ostatni: 22-05-2018 09:35, mgr_inz_rafal
    kolory (35)
    ostatni: 21-05-2018 23:03, IRATA4
    Szukam podobnych gier (12)
    ostatni: 21-05-2018 22:57, Kaz

    Kategorie Forum Atarum

    Użytkowników: 1841
    Ostatnio zarejestrowany: paroos
    Postów ostatniej doby: 35

    Społeczność/Community

    Najbliższe imprezy

    Stragan
    Atari USBJoy Adapter oferuje Jakub Husak (0)
    Programy: Kolony 2106 oferuje Kaz (6)
    Sprzęt: rozszerzenia oferuje Lotharek (18)
    Gadżety: naklejki, pocztówki oferuje Sikor (11)
    Sprzęt: cartridge RAM-CART oferuje Zenon (4)
    Miejsce na drobne ogłoszenia kupna/sprzedaży oferuje Kaz (51)
    Sprzęt: interfejs SIO2IDE oferuje Piguła (0)
    Sprzęt: interfejs SIO2SD oferuje Piguła (22)

    Użytki/Utils
    Sprzęt/Hardware

    Wynalazki
    Atari i Bluetooth napisał Kaz (32)
    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 (8)
    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 (36)
    Soczyste kolory napisał scalak (29)
    XEGS Box napisał Zaxon (13)
    Atari w różnych rolach napisał Różyk (8)
    SIO2IDE w pudełku napisał Kaz (5)
    Atari steruje tokarką napisał Kaz (14)
    DarkMouse napisał Kaz (7)
    «« nowszestarsze »»