Redcode - samouczek

Teraz najwyższa pora, by przybliżyć działanie poszczególnych rozkazów języka Redcode. Trzy z nich zostały już "przedstawione" wcześniej: MOV, JMP i DAT. Ale po kolei:

Następne dwie instrukcje są instrukcjami dotyczącymi tzw. P-przestrzeni (ang. "P-space") i różnią się od pozostałych sposobem adresowania tejże. Ale zanim o tym, to może powiedzmy, czym tak właściwie jest P-przestrzeń? Otoż jest to oddzielna pamięć, do której dostęp może mieć program-wojownik zawierająca liczby z zakresu od 0 do CORESIZE-1. Jest ona (w odróżnieniu od rdzenia) oddzielna dla każdego wojownika i nie ulega kasowaniu po walce. Jedynie pierwsza jej komórka zawiera wynik ostatniej walki, a dokładniej:
  1. -1 (a właściwie CORESIZE-1), gdy walka jest pierwszą walką z całej serii,
  2. 0, gdy wojownik zginął w poprzedniej walce,
  3. 1,2,3... itd., gdy poprzednią walkę przetrwało 1,2,3... wojowników.
Komórki P-przestrzeni mogą być swobodnie modyfikowane przy pomocy dwóch poniższych rozkazów, przy czym adresowanie nie jest względne i do odwoływania się do poszczególnych komórek służy tryb natychmiastowy (#). Dla jasności podam przykład:
 	LDP    #0,  $0	; załadowanie wartości z pierwszej komórki
			; P-przestrzeni
	STP    $-1, #1	; zapisanie wartości z poprzedniej komórki
			; areny do drugiej komórki P-przestrzeni
Jeśli jest to pierwsza walka, jaką stacza wojownik, po wykonaniu instrukcji LDP ten sam fragment będzie wyglądać tak:
	LDP    #0,  $-1	; teraz tu wylądował wynik walki
	STP    $-1, #1	; ta instrukcja wygląda tak samo
Dla ciekawskich zalecam eksperymentowanie samemu z P-przestrzenią, bowiem została ona wprowadzona do implementacji Redcode w celu uczynienia wojowników bardziej inteligentnymi. Chociaż z drugiej strony, czysty Redcode też jest piękny...


Poprzedni Następny