Action!

From Atariki

(Różnice między wersjami)
Jump to: navigation, search
Wersja z dnia 20:01, 22 lip 2008
Sikor (Dyskusja | wkład)
(== Sprawdzenie wersji ==)
← Previous diff
Wersja z dnia 08:08, 4 gru 2008
Daniel Koźmiński (Dyskusja | wkład)
(Nowa ściągawka, poprzedni link był dead.)
Next diff →
Linia 100: Linia 100:
* [http://www.cyberroach.com/analog/an16/action.htm Oficjalny opis języka] * [http://www.cyberroach.com/analog/an16/action.htm Oficjalny opis języka]
* [http://www.strotmann.de/twiki/bin/view/APG/LangACTION Strona z masą źródłówek] * [http://www.strotmann.de/twiki/bin/view/APG/LangACTION Strona z masą źródłówek]
-* [http://www.8bitclassics.com/forum/viewtopic.php?p=30 Szybka podpowiedź]+* [http://atariki.krap.pl/images/2/29/Action_cheat_sheet.pdf Szybka podpowiedź]
{{stub}} {{stub}}
[[Kategoria:Oprogramowanie Atari 8-bit]] [[Kategoria:Oprogramowanie Atari 8-bit]]
[[Kategoria:Języki programowania]] [[Kategoria:Języki programowania]]

Wersja z dnia 08:08, 4 gru 2008

Grafika:action.gif

Strukturalny, kompilowany język programowania dla ośmiobitowych Atari. Dzieło programisty OSS nazwiskiem Clinton Parker, sprzedawane od 1983 roku pod marką Action Computer Services. Właścicielem praw autorskich było kolejno OSS, ICD, a w końcu FTe.

Action! łączy w sobie cechy C i Pascala, czyli wygodę programowania z całkiem szybkim kodem wynikowym. Składnia Action! była wzorowana na języku ALGOL 68. Niemałą zaletą Action! jest dość wygodny, pełnoekranowy edytor. W języku tym napisano sporo programów użytkowych (np. DiskRx) i gier, np. Problem Jasia.

Oryginalna wersja języka występuje na cartridge'u, ale krążyła też niemal w pełni funkcjonalna wersja dyskowa. Język na cartridge'u zajmował 16k - w dwóch bankach po 8k (oddzielnie edytor i monitor) - zajmującym te same adresy, co interpreter Atari BASIC, tj. $A000-$BFFF.

Ciekawostką jest spora biblioteka procedur krążąca w sieci, dzięki czemu Action! stał się bardzo rozbudowanym i elastycznym narzędziem pracy dla programistów.

Znane osobistości używające Action! to: Jakub Husak, Gizmo Magic.

Spis treści

Typy danych

W Action! występują trzy typy danych numerycznych: BYTE, CARD i INT. BYTE to ośmiobitowa liczba całkowita bez znaku, CARD - 16-bitowa liczba całkowita bez znaku, INT - 16-bitowa liczba całkowita ze znakiem. Pozostałe typy to CHAR, ARRAY, POINTER i typy deklarowane przez użytkownika, np.

TYPE CORD=[CARD x,y]
 CORD point
 point.x=42
 point.y=23

Lista słów kluczowych

AND     FI       OR       UNTIL  =<   (
ARRAY   FOR      POINTER  WHILE  <>   )
BYTE    FUNC     PROC     XOR    #    .
CARD    IF       RETURN   =      >    [
CHAR    INCLUDE  RSH      -      >=   ]
DEFINE  INT      SET      *      <    "
DO      LSH      STEP     /      <=   '
ELSE    MOD      THEN     &      $    ;
ELSEIF  MODULE   TO       %      !    @
EXIT    OD       TYPE

Cechy języka

Program pisze się w edytorze, kompiluje natomiast w tzw. monitorze, który ma tez pewne funkcje ułatwiające debugging. Edytor jest pełnoekranowy, pole edycyjne można podzielić na dwa niezależne "okna". Możliwości edytora obejmują kopiowanie bloków, wyszukiwanie i zastępowanie tekstów itp.

Kompilator Action! jest jednoprzebiegowy, kod źrodłowy jest kompilowany z pamięci, co dodatnio wpływa na szybkość kompilatora, ujemnie natomiast na maksymalną wielkość programu.

Wszystkie obliczenia dokonywane są w trybie liczb całkowitych ze znakiem. Język nie przewiduje wstawek w asemblerze w postaci mnemoników, podprogramy maszynowe muszą być załączane w postaci tablic wypełnionych stałymi szesnastkowymi lub dziesiętnymi.

Z braku dynamicznego zarządzania pamięcią w Action! niemożliwa jest rekurencja.

Przykład kodu

Przykładowa procedura na sito Eratostenesa napisana w Action!:

 BYTE RTCLOK=20, ; addr of sys timer
      SDMCTL=559 ; DMA control
 
 BYTE ARRAY FLAGS(8190)
 
 CARD COUNT,I,K,PRIME,TIME
 
 PROC SIEVE()
 
   SDMCTL=0 ; shut off Antic
   RTCLOK=0 ; only one timer needed
 
   COUNT=0         ; init count
   FOR I=0 TO 8190 ; and flags
     DO
     FLAGS(I)='T
     OD
 
   FOR I=0 TO 8190 ; and flags
     DO
     IF FLAGS(I)='T THEN
       PRIME=I+I+3
       K=I+PRIME
       WHILE K<=8190
         DO
         FLAGS(K)='F
         K==+PRIME
         OD
       COUNT==+1
     FI
     OD
   TIME=RTCLOK ; get timer reading
   SDMCTL=34   ; restore screen
 
   PRINTF("%E %U PRIMES IN",COUNT)
   PRINTF("%E %U JIFFIES",TIME)
 RETURN

Sprawdzenie wersji

Poprzez odczyt komórki pamięci $B000 możemy uzyskać numer wersji naszego ACTION!: wchodzimy do monitora i wpisujemy: ? $B000. Uzyskamy wynik, gdzie znajduje się numer wersji w postaci czterocyfrowej liczbyszesnastkowej. Dwie ostatnie cyfry oznaczają numer wersji, na przykład z wersji wydanej piracko przez Atrax możemy odczytać:

45056,$B000 = 6, $0136 54 310

dzięki temu wiadomo, że jest to wersja 36. Po sieci zaś krąży obraz cartridge-a z wersją 02...(numer odczytany z emulatora). Choć pewnie inne też się znajdą.

Ciekawostki

  • Istnieją wersje na cartridge-ach datowane na 1986 oraz 1987 rok, bez nazwy producenta/developera w komunikacie na dole ekranu. Prawdopodobnie ta ostatnia jest wersją z poprawkami, wydaną przez FTe, ale nie jest to informacja potwierdzona.

Linki zewnętrzne


Ten artykuł to tylko zalążek. Możesz pomóc rozwojowi Atariki poprzez rozszerzenie go o więcej informacji.

Personal tools