<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="pl">
	<id>https://mirror.atariki.pl/w/index.php?action=history&amp;feed=atom&amp;title=Action%21</id>
	<title>Action! - Historia wersji</title>
	<link rel="self" type="application/atom+xml" href="https://mirror.atariki.pl/w/index.php?action=history&amp;feed=atom&amp;title=Action%21"/>
	<link rel="alternate" type="text/html" href="https://mirror.atariki.pl/w/index.php?title=Action!&amp;action=history"/>
	<updated>2026-10-02T21:20:15Z</updated>
	<subtitle>Historia wersji tej strony wiki</subtitle>
	<generator>MediaWiki 1.46.0</generator>
	<entry>
		<id>https://mirror.atariki.pl/w/index.php?title=Action!&amp;diff=191&amp;oldid=prev</id>
		<title>imported&gt;Atariki recovery: Reconstructed from archived HTML; see provenance manifest</title>
		<link rel="alternate" type="text/html" href="https://mirror.atariki.pl/w/index.php?title=Action!&amp;diff=191&amp;oldid=prev"/>
		<updated>2026-10-01T08:51:48Z</updated>

		<summary type="html">&lt;p&gt;Reconstructed from archived HTML; see provenance manifest&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nowa strona&lt;/b&gt;&lt;/p&gt;&lt;div&gt;[[File:Action.gif]]&lt;br /&gt;
&lt;br /&gt;
Strukturalny, kompilowany język programowania dla ośmiobitowych Atari. Dzieło programisty [[OSS]] nazwiskiem Clinton Parker, sprzedawane od 1983 roku pod marką &amp;#039;&amp;#039;Action Computer Services&amp;#039;&amp;#039;. Właścicielem praw autorskich było kolejno [[OSS]], [[ICD]], a w końcu [[FTe]].&lt;br /&gt;
&lt;br /&gt;
Action! łączy w sobie cechy [[C]] i [[Pascal|Pascala]], 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).&lt;br /&gt;
&lt;br /&gt;
Oryginalna wersja języka występuje na [[Cartridge|cartridge]]&amp;#039;u, ale krążyła też niemal w pełni funkcjonalna wersja dyskowa. Język na cartridge&amp;#039;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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Znane osobistości używające Action! to: [[Jakub Husak]], [[Gizmo Magic]] oraz [[Tdc|tdc]].&lt;br /&gt;
&lt;br /&gt;
== Typy danych ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
TYPE CORD=[CARD x,y]&lt;br /&gt;
 CORD point&lt;br /&gt;
 point.x=42&lt;br /&gt;
 point.y=23&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Lista słów kluczowych ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;AND     FI       OR       UNTIL&lt;br /&gt;
ARRAY   FOR      POINTER  WHILE&lt;br /&gt;
BYTE    FUNC     PROC     XOR&lt;br /&gt;
CARD    IF       RETURN&lt;br /&gt;
CHAR    INCLUDE  RSH&lt;br /&gt;
DEFINE  INT      SET&lt;br /&gt;
DO      LSH      STEP&lt;br /&gt;
ELSE    MOD      THEN&lt;br /&gt;
ELSEIF  MODULE   TO&lt;br /&gt;
EXIT    OD       TYPE&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Lista rozpoznawanych symboli ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;+   -   *   /&lt;br /&gt;
&amp;amp;amp;   %   !&lt;br /&gt;
&amp;amp;gt;   &amp;amp;gt;=  &amp;amp;lt;   &amp;amp;lt;=  &amp;amp;lt;&amp;amp;gt;  #   =&lt;br /&gt;
@   ^   .&lt;br /&gt;
&amp;quot;   &amp;#039;   $   [   ]&lt;br /&gt;
;   ,&lt;br /&gt;
(   )&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Lista procedur bibliotecznych ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;Break     LIST      PrintCD   SCompare   Close    Locate&lt;br /&gt;
PrintCDE  SCopy     color     MoveBlock  PrintCE  SCopyS&lt;br /&gt;
device    Note      PrintD    SetBlock   DrawTo   Open&lt;br /&gt;
PrintDE   SetColor  EOF       Paddle     PrintE   SndRst&lt;br /&gt;
Error     Peek      PrintF    Bound      Fill     PeekC&lt;br /&gt;
PrintI    Stick     GetD      Plot       PrintID  StrB&lt;br /&gt;
Graphics  Point     PrintIDE  StrC       InputB   Poke&lt;br /&gt;
PrintIE   StrI      InputBD   PokeC      Ptrig    Strig&lt;br /&gt;
InputC    Position  Put       TRACE      InputCD  Print&lt;br /&gt;
PutD      ValB      InputI    PrintB     PutDE    ValC&lt;br /&gt;
InputID   PrintBD   PutE      ValI       InputMD  PrintBDE&lt;br /&gt;
Rand      XIO       InputS    PrintBE    SAssign  Zero&lt;br /&gt;
InputSD   PrintC&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Cechy języka ==&lt;br /&gt;
&lt;br /&gt;
Action! to jeden z najszybszych kompilatorów dostępnych dla ośmiobitowego Atari.&lt;br /&gt;
&lt;br /&gt;
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 &amp;quot;okna&amp;quot;. Możliwości edytora obejmują kopiowanie bloków, wyszukiwanie i zastępowanie tekstów itp.&lt;br /&gt;
&lt;br /&gt;
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ę &amp;quot;wyłącz ekran&amp;quot; na czas kompilacji, co przyspiesza kompilację o 25-30%.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
== Przykład kodu ==&lt;br /&gt;
&lt;br /&gt;
Przykładowa procedura na [http://pl.wikipedia.org/wiki/Sito_Eratostenesa sito Eratostenesa] napisana w Action!:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 BYTE RTCLOK=20, ; addr of sys timer&lt;br /&gt;
      SDMCTL=559 ; DMA control&lt;br /&gt;
&lt;br /&gt;
 BYTE ARRAY FLAGS(8190)&lt;br /&gt;
&lt;br /&gt;
 CARD COUNT,I,K,PRIME,TIME&lt;br /&gt;
&lt;br /&gt;
 PROC SIEVE()&lt;br /&gt;
&lt;br /&gt;
   SDMCTL=0 ; shut off Antic&lt;br /&gt;
   RTCLOK=0 ; only one timer needed&lt;br /&gt;
&lt;br /&gt;
   COUNT=0         ; init count&lt;br /&gt;
   FOR I=0 TO 8190 ; and flags&lt;br /&gt;
     DO&lt;br /&gt;
     FLAGS(I)=&amp;#039;T&lt;br /&gt;
     OD&lt;br /&gt;
&lt;br /&gt;
   FOR I=0 TO 8190 ; and flags&lt;br /&gt;
     DO&lt;br /&gt;
     IF FLAGS(I)=&amp;#039;T THEN&lt;br /&gt;
       PRIME=I+I+3&lt;br /&gt;
       K=I+PRIME&lt;br /&gt;
       WHILE K&amp;amp;lt;=8190&lt;br /&gt;
         DO&lt;br /&gt;
         FLAGS(K)=&amp;#039;F&lt;br /&gt;
         K==+PRIME&lt;br /&gt;
         OD&lt;br /&gt;
       COUNT==+1&lt;br /&gt;
     FI&lt;br /&gt;
     OD&lt;br /&gt;
   TIME=RTCLOK ; get timer reading&lt;br /&gt;
   SDMCTL=34   ; restore screen&lt;br /&gt;
&lt;br /&gt;
   PRINTF(&amp;quot;%E %U PRIMES IN&amp;quot;,COUNT)&lt;br /&gt;
   PRINTF(&amp;quot;%E %U JIFFIES&amp;quot;,TIME)&lt;br /&gt;
 RETURN&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Sprawdzenie wersji ==&lt;br /&gt;
&lt;br /&gt;
Odczyt komórki pamięci $B000 w oryginalnym cartridge-u pozwala uzyskać numer rewizji ACTION! Przykładowo: &amp;#039;&amp;#039;&amp;#039;? $B000&amp;#039;&amp;#039;&amp;#039; 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:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
45056,$B000 = 6, $0136 54 310&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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).&lt;br /&gt;
&lt;br /&gt;
== Ciekawostki ==&lt;br /&gt;
&lt;br /&gt;
* Istnieją wersje na cartridge&amp;#039;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.&lt;br /&gt;
* Powstały projekty będące próbą przeniesienia kompilatora języka Action! na komputery osobiste:&lt;br /&gt;
** [[Effectus]], którego autorem jest [[Bostjan Gorisek]]&lt;br /&gt;
** [[Action! compiler]] napisany przez [[Jim Patchell|Jima Patchella]]&lt;br /&gt;
&lt;br /&gt;
== Linki zewnętrzne ==&lt;br /&gt;
&lt;br /&gt;
* [http://www.cyberroach.com/analog/an16/action.htm Oficjalny opis języka]&lt;br /&gt;
* [https://atariwiki.org/wiki/Wiki.jsp?page=Action Strona z masą źródłówek]&lt;br /&gt;
* [http://atariki.krap.pl/images/2/29/Action_cheat_sheet.pdf Szybka podpowiedź]&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Action!_(programming_language) Hasło Action!] na en.wikipedia.org&lt;br /&gt;
* [http://pl.wikipedia.org/wiki/Action! Hasło Action!] na pl.wikipedia.org&lt;br /&gt;
* [http://gury.atari8.info/effectus/ Strona domowa Effectus]&lt;br /&gt;
* [http://www.noniandjim.com/Jim/atari/Action_Compiler.html Strona domowa Action! compiler]&lt;br /&gt;
* [http://ftp.pigwa.net/stuff/mirror/turbobasicxlandaction.com/ Mirror strony o Turbo Basicu i Action! prowadzonej kiedyś przez Sikora]&lt;br /&gt;
&lt;br /&gt;
[[Kategoria:Oprogramowanie Atari 8-bit]]&lt;br /&gt;
[[Kategoria:Języki programowania]]&lt;br /&gt;
&lt;/div&gt;</summary>
		<author><name>imported&gt;Atariki recovery</name></author>
	</entry>
</feed>