Action!
From Atariki
Wersja z dnia 08:15, 19 maj 2011 Jhusak (Dyskusja | wkład) (→Sprawdzenie wersji) ← Previous diff |
Wersja z dnia 03:49, 24 lut 2021 Mono (Dyskusja | wkład) (→Lista rozpoznawanych symboli) Next diff → |
||
Linia 2: | Linia 2: | ||
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]]. | 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 [[Pascal]]a, czyli wygodę programowania z całkiem szybkim kodem wynikowym. Składnia Action! była wzorowana na języku [http://en.wikipedia.org/wiki/ALGOL_68 ALGOL 68]. Niemałą zaletą Action! jest dość wygodny, pełnoekranowy edytor. W języku tym napisano sporo programów użytkowych (np. [[DiskRx]]), gier, np. [[Problem Jasia]] czy nawet utwory do gier (np. w [[Tanks]] czy [[Battle Ships]]). | + | Action! łączy w sobie cechy [[C]] i [[Pascal]]a, czyli wygodę programowania z całkiem szybkim kodem wynikowym. Składnia Action! była wzorowana na języku [http://en.wikipedia.org/wiki/ALGOL_68 ALGOL 68]. Niemałą zaletą Action! jest dość wygodny, pełnoekranowy edytor. W języku tym napisano sporo programów użytkowych (np. [[DiskRx]]), gier, np. [[Problem Jasia]] czy nawet utwory do gier (np. w [[Tanks]], [[Battle Ships]], Scorpions v2.0). |
- | 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. | + | 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 czterech bankach po 4k (z czego jeden bank zawsze zajmował B000-BFFF, a reszta była podmieniana pod A000-AFFF) - zajmującym w sumie 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. | 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]]. | + | Znane osobistości używające Action! to: [[Jakub Husak]], [[Gizmo Magic]] oraz [[tdc]]. |
== Typy danych == | == Typy danych == | ||
Linia 23: | Linia 23: | ||
== Lista słów kluczowych == | == Lista słów kluczowych == | ||
- | AND FI OR UNTIL =< ( | + | AND FI OR UNTIL |
- | ARRAY FOR POINTER WHILE <> ) | + | ARRAY FOR POINTER WHILE |
- | BYTE FUNC PROC XOR # . | + | BYTE FUNC PROC XOR |
- | CARD IF RETURN = > [ | + | CARD IF RETURN |
- | CHAR INCLUDE RSH - >= ] | + | CHAR INCLUDE RSH |
- | DEFINE INT SET * < " | + | DEFINE INT SET |
- | DO LSH STEP / <= ' | + | DO LSH STEP |
- | ELSE MOD THEN & $ ; | + | ELSE MOD THEN |
- | ELSEIF MODULE TO % ! @ | + | ELSEIF MODULE TO |
EXIT OD TYPE | EXIT OD TYPE | ||
+ | |||
+ | == Lista rozpoznawanych symboli == | ||
+ | |||
+ | + - * / | ||
+ | & % ! | ||
+ | > >= < <= <> # = | ||
+ | @ ^ . | ||
+ | " ' $ [ ] | ||
+ | ; , | ||
+ | ( ) | ||
== Lista procedur bibliotecznych == | == Lista procedur bibliotecznych == | ||
Linia 51: | Linia 61: | ||
== Cechy języka == | == Cechy języka == | ||
+ | |||
+ | Action! to jeden z najszybszych kompilatorów dostępnych dla ośmiobitowego Atari. | ||
Program pisze się w edytorze, kompiluje natomiast w tzw. monitorze, który ma też 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. | Program pisze się w edytorze, kompiluje natomiast w tzw. monitorze, który ma też 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 źródłowy jest kompilowany z pamięci, co dodatnio wpływa na szybkość kompilatora, ujemnie natomiast na maksymalną wielkość programu. Do obejścia tego problemu można wielopoziomowo wykorzystywać polecenia ''include''. Trzeba tu dodać, że Action! to jeden z najszybszych kompilatorów dostępnych dla ośmiobitowego Atari. | + | Kompilator Action! jest jednoprzebiegowy. Kod źródłowy może być kompilowany z pamięci lub z pliku do pamięci. Jest również dostępne rozwiązanie programowe pozwalające kompilować do pliku (z pewnymi niewielkimi ograniczeniami). W celu przyspieszenia kompilacji można ustawić opcję "wyłącz ekran" na czas kompilacji, co przyspiesza kompilację o 25-30%. |
- | 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. | + | Wszystkie obliczenia dokonywane są w trybie liczb całkowitych ze znakiem lub bez, jedno lub dwubajtowych. 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. |
- | Zmienne lokalne w Action! są alokowane pod stałymi adresami w pamięci, a nie na stosie, co z jednej strony daje bardziej wydajny kod wynikowy, a z drugiej uniemożliwia stosowanie rekurencji. | + | Zmienne w Action! są alokowane pod stałymi adresami w pamięci, a nie na stosie, co z jednej strony daje bardziej wydajny kod wynikowy, a z drugiej uniemożliwia stosowanie rekurencji. |
== Przykład kodu == | == Przykład kodu == | ||
Linia 105: | Linia 117: | ||
== Sprawdzenie wersji == | == Sprawdzenie wersji == | ||
- | Odczyt komórki pamięci $B000 pozwala uzyskać numer rewizji ACTION! Przykładowo: '''? $B000''' da w wyniku czterocyfrową liczbę szesnastkową, której ostatnie cyfry oznaczają numer rewizji. W wersji wydanej piracko przez Atrax wygląda to następująco: | + | Odczyt komórki pamięci $B000 w oryginalnym cartridge-u pozwala uzyskać numer rewizji ACTION! Przykładowo: '''? $B000''' da w wyniku czterocyfrową liczbę szesnastkową, której ostatnie cyfry oznaczają numer rewizji. W wersji wydanej piracko przez Atrax wygląda to następująco: |
<pre> | <pre> | ||
45056,$B000 = 6, $0136 54 310 | 45056,$B000 = 6, $0136 54 310 | ||
Linia 111: | Linia 123: | ||
z czego wynika że jest to wersja 1, rewizja 3.6. W sieci dostępny jest obraz cartridge-a z wersją 02.. (numer odczytany z emulatora). Prawdopodobnie można też znaleźć inne. | z czego wynika że jest to wersja 1, rewizja 3.6. W sieci dostępny jest obraz cartridge-a z wersją 02.. (numer odczytany z emulatora). Prawdopodobnie można też znaleźć inne. | ||
- | Dokładniejsze testy wersji wykazały jednak, że wszystkie dostępne w sieci obrazy cartridge-y Action! mają dokłądnie ten sam kod, różniący się wyłącznie opisem w dolnej części ekranu edytora oraz zawartością owej komórki $B000, przez co nie można na niej polegać. Prawdopodobnie spowodowane jest to specyfiką ówczesnego rynku, który przy ograniczonej dostępności do źródeł oprogramowania tworzył własne wersje programów (nowości sprzedawały się znacznie lepiej) | + | Dokładniejsze testy wersji wykazały jednak, że wszystkie dostępne w sieci obrazy cartridge-y Action! mają dokładnie ten sam kod, różniący się wyłącznie opisem w dolnej części ekranu edytora oraz zawartością owej komórki $B000, przez co nie można na niej polegać. Prawdopodobnie spowodowane jest to specyfiką ówczesnego rynku, który przy ograniczonej dostępności do źródeł oprogramowania tworzył własne wersje programów (nowości sprzedawały się znacznie lepiej). |
== Ciekawostki == | == 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. | + | * 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. Bliższa analiza natomiast wykazała brak różnic z wersją z 1983 roku, z wyjątkiem wyświetlanego komunikatu oraz zmienionej zawartości komórki $B000. |
+ | * Powstały projekty będące próbą przeniesienia kompilatora języka Action! na komputery osobiste: | ||
+ | **[[Effectus]], którego autorem jest [[Bostjan Gorisek]] | ||
+ | **[[Action! compiler]] napisany przez [[Jim Patchell|Jima Patchella]] | ||
== Linki zewnętrzne == | == Linki zewnętrzne == | ||
* [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] | + | * [https://atariwiki.org/wiki/Wiki.jsp?page=Action Strona z masą źródłówek] |
* [http://atariki.krap.pl/images/2/29/Action_cheat_sheet.pdf Szybka podpowiedź] | * [http://atariki.krap.pl/images/2/29/Action_cheat_sheet.pdf Szybka podpowiedź] | ||
- | * [http://en.wikipedia.org/wiki/Action! Hasło Action!] na en.wikipedia.org | + | * [http://en.wikipedia.org/wiki/Action!_(programming_language) Hasło Action!] na en.wikipedia.org |
* [http://pl.wikipedia.org/wiki/Action! Hasło Action!] na pl.wikipedia.org | * [http://pl.wikipedia.org/wiki/Action! Hasło Action!] na pl.wikipedia.org | ||
+ | * [http://gury.atari8.info/effectus/ Strona domowa Effectus] | ||
+ | * [http://www.noniandjim.com/Jim/atari/Action_Compiler.html Strona domowa Action! compiler] | ||
+ | * [http://ftp.pigwa.net/stuff/mirror/turbobasicxlandaction.com/ Mirror strony o Turbo Basicu i Action! prowadzonej kiedyś przez Sikora] | ||
[[Kategoria:Oprogramowanie Atari 8-bit]] | [[Kategoria:Oprogramowanie Atari 8-bit]] | ||
[[Kategoria:Języki programowania]] | [[Kategoria:Języki programowania]] |
Wersja z dnia 03:49, 24 lut 2021
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), gier, np. Problem Jasia czy nawet utwory do gier (np. w Tanks, Battle Ships, Scorpions v2.0).
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 czterech bankach po 4k (z czego jeden bank zawsze zajmował B000-BFFF, a reszta była podmieniana pod A000-AFFF) - zajmującym w sumie 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 oraz tdc.
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
Lista rozpoznawanych symboli
+ - * / & % ! > >= < <= <> # = @ ^ . " ' $ [ ] ; , ( )
Lista procedur bibliotecznych
Break LIST PrintCD SCompare Close Locate PrintCDE SCopy color MoveBlock PrintCE SCopyS device Note PrintD SetBlock DrawTo Open PrintDE SetColor EOF Paddle PrintE SndRst Error Peek PrintF Bound Fill PeekC PrintI Stick GetD Plot PrintID StrB Graphics Point PrintIDE StrC InputB Poke PrintIE StrI InputBD PokeC Ptrig Strig InputC Position Put TRACE InputCD Print PutD ValB InputI PrintB PutDE ValC InputID PrintBD PutE ValI InputMD PrintBDE Rand XIO InputS PrintBE SAssign Zero InputSD PrintC
Cechy języka
Action! to jeden z najszybszych kompilatorów dostępnych dla ośmiobitowego Atari.
Program pisze się w edytorze, kompiluje natomiast w tzw. monitorze, który ma też 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 źródłowy może być kompilowany z pamięci lub z pliku do pamięci. Jest również dostępne rozwiązanie programowe pozwalające kompilować do pliku (z pewnymi niewielkimi ograniczeniami). W celu przyspieszenia kompilacji można ustawić opcję "wyłącz ekran" na czas kompilacji, co przyspiesza kompilację o 25-30%.
Wszystkie obliczenia dokonywane są w trybie liczb całkowitych ze znakiem lub bez, jedno lub dwubajtowych. 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.
Zmienne w Action! są alokowane pod stałymi adresami w pamięci, a nie na stosie, co z jednej strony daje bardziej wydajny kod wynikowy, a z drugiej uniemożliwia stosowanie rekurencji.
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
Odczyt komórki pamięci $B000 w oryginalnym cartridge-u pozwala uzyskać numer rewizji ACTION! Przykładowo: ? $B000 da w wyniku czterocyfrową liczbę szesnastkową, której ostatnie cyfry oznaczają numer rewizji. W wersji wydanej piracko przez Atrax wygląda to następująco:
45056,$B000 = 6, $0136 54 310
z czego wynika że jest to wersja 1, rewizja 3.6. W sieci dostępny jest obraz cartridge-a z wersją 02.. (numer odczytany z emulatora). Prawdopodobnie można też znaleźć inne.
Dokładniejsze testy wersji wykazały jednak, że wszystkie dostępne w sieci obrazy cartridge-y Action! mają dokładnie ten sam kod, różniący się wyłącznie opisem w dolnej części ekranu edytora oraz zawartością owej komórki $B000, przez co nie można na niej polegać. Prawdopodobnie spowodowane jest to specyfiką ówczesnego rynku, który przy ograniczonej dostępności do źródeł oprogramowania tworzył własne wersje programów (nowości sprzedawały się znacznie lepiej).
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. Bliższa analiza natomiast wykazała brak różnic z wersją z 1983 roku, z wyjątkiem wyświetlanego komunikatu oraz zmienionej zawartości komórki $B000.
- Powstały projekty będące próbą przeniesienia kompilatora języka Action! na komputery osobiste:
- Effectus, którego autorem jest Bostjan Gorisek
- Action! compiler napisany przez Jima Patchella