Archive for the ‘z-pamieci’ Category

Wersje i rewizje Action!

Monday, January 27th, 2020

Zanim kupiłem swojego oryginalnego karta z Action! to przez dobrych parę dni siedziałem i czytałem o wersjach / rewizjach oprogramowania. Szczęście w nieszczęściu – kupując dzisiaj można wszystko wyczytać w sieci, porównać, dopytać ludzi – to z plusów, minusem dość oczywistym jest cena takiego kartu – znalezienie go w cenie poniżej 50 USD za sam kart jest coraz mniej prawdopodobne (pomijając ceny przesyłek do Polski, które nagle robią z takiego zakupu dwukrotność ceny samego kartu).

Odnośnie zewnętrznych cech wyglądu kartu to mamy dwie cechy: rodzaj/kolor obudowy oraz naklejkę na tejże obudowie. Na powyższej reklamie widzimy jak wyglądała wersja pierwsza obudowy. W tej formie wizualnej ukazała się w 1984 roku cała seria oprogramowania sygnowanego przez OSS – Action!, BASIC XL, BASIC XE, MAC/65, Writter’s Tool i chyba C/65.

Jak widać na powyższych zdjęciach – oryginalny kart z początkowej dystrybucji będzie pomarańczowy z żółtą naklejką – obstawiam, że ten po lewej zawierał wcześniejszą wersję – wersje aktualizowane były pozbawiane daty copyrights. Co ciekawe – używane rozwinięcie nazwy firmy brzmiało “OSS Precision Software Tools” – na karcie po lewej widnieje coś innego. Pomijając już babol typograficzny jak rozdzielenie TM od OSS (bo to było de facto znakiem towarowym) wygląda to na jedną z wcześniejszych wersji (to już połączone wnioski z wyglądem pozostałych rzeczy jakie były dostępne na aukcji z tym kartem). Czy ta wersja typografii występowała na innych kartach? Tak, np. na wczesnym karcie z BASIC XL:

Jak wyglądały karty Action! później? OSS przeszedł na mniej krzykliwe, czarne obudowy – pozostawiając charakterystyczną żółtą naklejkę z czarnym nadrukiem.

Kart po prawej pochodzi z okresu, gdy OSS zostało wchłonięte przez ICD, firmę stojącą m.in.za SpartaDOSem – czyli pochodzi z przynajmniej 1988 roku (datując same przejęcie OSS przez ICD). Kart po lewej – z copyrights 1983 na ekranie, copyrights 1984 na tyle naklejki – jest wersją 3.6 – co trochę dowodzi tezy, że zbyt wielu wersji na rynku nie możemy oczekiwać. Karty, które wracały do OSS do “aktualizacji” były prawdopodobnie kasowane, albo powtórnie zapisywane. Ten kart po prawej stronie bardzo mnie kusił, ale skutecznie zmroziła mnie cena, która łącznie z przesyłką wynosiła prawie 200 USD. Czy może on zawierać jakąś nowszą, nie znaną nam dotychczas wersję? Jest na to bardzo mała szansa, ale być może takie marzenie jest potrzebne – ja wybrałem 200 USD w portfelu (a raczej na karcie kredytowej).

Na powyższym zdjęciu mało widać zmianę jaka nastąpiła w logo OSS – przybył tam klucz – wcześniej występujący jako osobny element graficzny i raczej przy okazji nazw produktów a nie logotypu firmy, lepiej będzie to widać na poniższym zdjęciu pokazującym skoroszczyty w których w umieszczano instrukcje:

Ile było wersji zawartości karta z Action! za czasów, kiedy był produkowany i rozwijany? Z tego co czytałem przynajmniej cztery. Użytkownicy na atariage.com wspominają o conajmniej dwóch (3.1 oraz 3.4) będących przed wersją 3.6 czyli nabardziej powszechną, ale będących uaktualnieniami do startowej wersji jaką kupili – początkowo Action! kosztował 99 USD, uaktualnienie karta polegało na odesłaniu go do OSS, zapłaceniu 20 USD – zwrotnie otrzymywało się nowszą wersję.

Jak sprawdzić jaką wersję karta mamy? Sposób najszybszy to wyjście z edytora do monitora (shift-control-M) i wpisanie

? $B000

Monitor Action! wyświetli nam zawartość komórki pamięci $B000 – w moim przypadku (wersja 3.6) było to:

45056, $B000 = 6 $136 54 310

Drugi sposób, w sumie o tyle fajny, że pozwalający zrobić od razu zrzut karta do pliku binarnego – to metoda z użyciem programu napisanego przez znanego polskiego programistę na małe Atari, Kuby Husaka, który Action! użył m.in. do napisania gry “Problemy Jasia”. Kuba napisał program, który sprawdza sumy kontrolne poszczególnych banków (czterech) w jakich zapisany jest cały kod karta Action! – program do zrzucania karta w postaci obrazu dyskietki (.atr) jest dostępny w archiwum atarionline.pl.

Na czym stoimy w tym momencie jeżeli chodzi o wersje Action! które są dostępne? Atariwiki linkuje do wersji 3.7 czyli poprawionej przez Jac!a wersji 3.6. I chyba ją należy uznać za najbardziej aktualną wersję tego języka na małe Atari. W paczce znajdziemy zarówno ostatnią znaną wersję 3.6 jak i poprawioną 3.7 w wersji ROM z przełączanymi bankami jak i ciągłym 16k obrazem, wersje dyskietkowe ze scalonym Runtime (sysall.act) oraz wersję plikową (.xex).

Jeszcze szybciej czyli proste kopiowanie – pojedynek C vs Action!

Friday, January 24th, 2020

W sumie równolegle i bez umawiania się pomyśleliśmy wczoraj/dzisiaj rano z Perinoidem o jeszcze większym przyśpieszeniu generowania szachownicy kolorów – bo serio – ile może się rysować ekran w 80 kolomnowym trybie.

Ponieważ jestem ciekawy czy ktoś nie wymyśli czegoś lepiej – załączam dwa punkty startowe – kod w BASICu znaleziony przeze mnie w internecie, który przerobiłem na Action! i który Perinoid przerobił na C – może ktoś pokusi się o przerobienie tego na Pascala czy inny język w celach testów wydajnościowych 🙂

10 REM * DISPLAY ALL 256 COLORS
11 GRAPHICS 9:FOR V=0 TO 15:COLOR V
12 FOR N=0 TO 4:PLOT 5*V+N,0
13 DRAWTO 5*V+N,191:NEXT N:NEXT V
14 D=256*PEEK(561)+PEEK(560)
15 FOR N=1 TO 16:READ V:POKE D+V,143
16 NEXT N:FOR N=0 TO 25:READ V
17 POKE 1664+N,V:NEXT N:POKE 512,139
18 POKE 513,6:POKE 546,128:POKE 547,6
19 POKE 53248,40:POKE 53249,208
20 POKE 53261,255:POKE 53262,255
21 POKE 53266,0:POKE 53267,0
22 POKE 54286,192
23 GOTO 23
24 DATA 16,28,40,52,64,76,88,102,114
25 DATA 126,138,150,162,174,186,198
26 DATA 8,72,169,0,133,203,104,40,76
27 DATA 95,228,8,72,165,203,24,105,16
28 DATA 141,26,208,133,203,104,40,64

Perinoid sklecił szybki kod w C – gdzie kluczem prędkości jest memcpy kopiujące 40 bajtów (czyli jedną linię grafiki) zamiast wolnego Poke. Jest szybko, bardzo szybko. 0,1 sekundy na całość kodu. Nagrywając na 30fps widzę to w trzech ramkach od początku liczenia do pełnego wyświetlenia.

// powiel 40 bajtow cc65
    for(i=1; i<192; i++) {
        memcpy(ptr, video_ptr, 40);
        ptr+=40;
    }

W Action! to samo robi moveblock(gdzie,skąd,ile) – zabawne, bo procedura ta nie przenosi (move) tylko kopiuje – dokładnie na tej samej zasadzie jak memcpy.

; powiel 40 bajtow Action
FOR i=1 TO 192
   DO
          moveblock(ptr, video_ptr, 40)
          SCREEN==+40
   OD

Jednak ta sama operacja zajmuje… 0.2 sekundy – dwa razy dłużej niż w C.

Odpowiedź jest oczywiście w asemblerze – biblioteki do CC65 są bardzo mocno zoptymalizowane pod kątem wydajności i tak też jest z kodem memcpy. Czyli przydało by się też coś takiego pod Action!

Ciekawe rzeczy napisał o tym Tebe na atari.org.pl, a Kuba Husak potwierdził – dalsze zwiększenie wydajności to pchanie tematu w asm i pisanie własnej procki… do kopiowania prostokątów (bo w sumie docelowo mi o to chodziło).

Póki co moje wypociny w Action! (tak wiem – Graphics i Poke do wywalenia po zastąpieniu swoimi prockami i DL).

; DISPLAY ALL 256 GTIA COLORS

INCLUDE "RUNTIME.ACT"

BYTE ch=764			; odczyt klawiatury
BYTE RTCLOCK=20  	; sys timer do pomiaru szybkosci kodu

BYTE SAVMSCL=88 	; lsb of screen addr
BYTE SAVMSCH=89 	; msb

BYTE ARRAY TAB01 = [16 28 40 52 64 76 88 102 114 126 138 150 162 174 186 198]
BYTE ARRAY TAB02 = [8 72 169 0 133 203 104 40 76 95 228 8 72 165 203 24 105 16 141 26 208 133 203 104 40 64]
BYTE ARRAY TAB03 = [
$00 $00 $01 $11 $11 $22 $22 $23 $33 $33 
$44 $44 $45 $55 $55 $66 $66 $67 $77 $77 
$88 $88 $89 $99 $99 $AA $AA $AB $BB $BB 
$CC $CC $CD $DD $DD $EE $EE $EF $FF $FF
]

BYTE V, N
CARD DLIST, SCREEN

PROC SHOW256COLORS ()

; RTCLOCK=0					; potrzebne gdy mierzymy czas wykonania

GRAPHICS (9)

SCREEN=SAVMSCL+256*SAVMSCH	; adres pamieci ekranu

FOR V=0 TO 191
	DO
          moveblock(SCREEN, tab03, 40)
          SCREEN==+40
	OD

; gdzie jest DisplayList???

DLIST=256*PEEK(561)+PEEK(560)	; wychodzi, ze pod adresem 41014 w ACTION

; ponizsza petla laduje kod 143 w displayliste co 12 bajtow 
; co robi ten kod - to jest najstarszy bit opcodu Antic'a - włącza przerwanie DLI

FOR N=0 TO 15
   DO
       V=TAB01(N)
       POKE (DLIST+V,143)
   OD

; ponizsza petla laduje 26 bajtowy kod asm z tablicy nr 2, kod asm zalaczam na koncu

FOR N=0 TO 25
   DO
       V=TAB02(N)
       POKE (1664+N,V)
   OD
   
POKE (512,139)         ; 1675 ($68B) - punkt B w kodzie asm
POKE (513,6)           ; pod tym adresem definiujemy wektor przerwań DLI

POKE (546,128)         ; 1664 ($680) - punkt A w kodzie asm
POKE (547,6)           ; VVBLKI - VBLANK immediate register

; ponizsze ustawiają duszki jako dwie maski po bokach ekranu

POKE (53248,40)        ; (W) Horizontal position of player 0
POKE (53249,208)       ; (W) Horizontal position of player 1
POKE (53261,255)       ; (W) Graphics shape for player 0
POKE (53262,255)       ; (W) Graphics for player 1
POKE (53266,0)         ; (W) Color and luminance of player and missile 0 (704)
POKE (53267,0)         ; (W) Color and luminance of player and missile 1 (705)

; na koniec włączamy przerwania NMI
; Non-maskable interrupt (NMI) enable
POKE (54286,192)       

; jezeli mierzymy czas wykonywania kodu to ponizsze dwa do odmarkowania

;PRINTE("czas wykonania")
;PRINTB(RTCLOCK)

; moja tradycyjna koncowka kodu
; LOOP + ESC odczytujemy z rejestru ch czy nacisnieto klawisz ESC, jezeli tak to wyjscie z petli

WHILE ch<>28 
   DO
   OD

RETURN

; kod asm wywylywany przerwaniami:
; ASM PART A			; PHA
				; LDA #$00
				; STA $CB
				; PLA
				; PLP
				; JMP $E45F ; SYSVBV
; CZESC B			; PHP  
				; PHA
				; LDA $CB
				; CLC
				; ADC #$10
				; STA $D01A ; COLBK
				; STA $CB
				; PLA
				; PLP
				; RTI

Na koniec oczywiście refleksja – Action! był reklamowany jako najszybszy język 8bitowy. W tamtych czasach – to pewnie była prawda, poza assemblerem mało co mogło się z nim równać. Co więcej – chyba był planowany do sportowania na Apple II i Commodore 64 – szkoda, że do tego nie doszło. Musiało być to jednak mocno zaawansowane w planach, bo jeżeli wczytacie się w treść poniższej reklamy to:

“OS/A+ the first and finest operating system for BOTH Atari and Apple II computers is NOW included FREE as a part of every OSS systems software package.”

W poszukiwaniu 256 kolorów czyli gąszcz przerwań, duszków i Action!

Wednesday, January 22nd, 2020

Pamiętam moje jedno z większych rozczarowań – chyba wynikające z marketingowego bełkotu producenta, ale i pewnie też z niedomówień pokutujących wśród użytkowników 8bitowego Atari.

Ile kolorów można używać na Atari jednocześnie? Używać czy wyświetlić? Używać w sprzętowych duszkach czyli sprite’ach czy na ekranie? Na ekranie, ale w jakiej rozdzielczości? Na całym ekranie czy w jednej linii?

Po serii reklam z 1979 roku reszta, promująca serię XL wydaje się bardziej enigmatyczna, chociaż to właśnie układ GTIA zastępujący CTIA ma większe możliwości palety “o jeden bit” i pozwala używać kolorów z palety nie 128 kolorów a 256.

Po latach wszystko jest jakby prostsze. W latach 80tych szczytem takiej zabawy z kolorem było wyświetlenie tęczowego cyklu kolorów.

Dzisiaj – ot, w godzinę przećwiczylem konwersję programu z Atari BASIC – takie elementy jak pętle, odwołania do rejestrów, odpalenie przerwań, modyfikację displaylisty, podkolorowanie ekranu duszkami i “pociskami” (missile) i jeszcze paroma rzeczami.

Ale po kolei. Zaczęło się od banalnej rzeczy – uporządkowania pościąganych przykładów w Action! – bo nie ma nic lepszego niż analizowanie działającego kodu.

Altirrę większość zna – ja coraz bardziej zagłębiam się w Atari800MacX. Wybieramy z górnego menu – Media -> New Image i tworzymy pustą dyskietkę. Ja nazwałem ją Action i zapisałem w folderze Disks – otwiera się on automatycznie, gdy mamy wskazać lokalizację dyskietki (ale oczywiście można to zmienić).

używam zestawu dwóch stacji i dwóch dyskietek – ta pierwsza stacja i obraz Action03.atr to dyskietka startowa, wersja 3. MyDOS, obsługa dyskietek DD, autostart do Action 3.7 czyli najnowszej wersji z poprawkami. Jakieś pliki runtime i biblioteki – ot, cała jej zawartość.

Stacja druga to projekty albo dema. Tutaj zapisuję to, nad czym pracuję, albo to, co mnie interesuje do obejrzenia/uruchomienia. Atari800MacX pozwala na transfer plików (z menu Media wybieramy Edit an .atr Disk image) na obraz dyskietki jak i na zgrywanie plików z obrazu, kasowanie ich etc. – jest to bardzo intuicyjne i wygodne.

Jedna rzecz wymaga tylko uwagi – przegrywanie plików tekstowych. Pliki źródłowe Action! do takich należą i jeżeli ściągniemy pliki źródłowe zapisane z Action! to będą one miały kodowanie jak to w Atari czyli ATASCII. Istotne jest zaznaczenie opcji zmiany końca linii (linefeed). Inaczej z całej misterii pisania kodu na współczesnym kompie i wgrywania tego na 8bitowym zabytku nici – chyba, że będziemy wszystko wklejać (Copy Paste) do emulatora bezpośrednio do edytora Action! i tam, w emulatorze zapisywać na wirtualną dyskietkę (obraz .atr). Pliki w wersji źródłowej jakie znajdziemy w internecie zwykle mają już tą konwersję końca linii zrobioną, więc pozostaje nam tylko przegranie ich do obrazu dyskietki.

W dużym uproszczeniu jak działa kombo CTIA/GTIA + ANTIC:

  • ANTIC generuje obraz – czyli tekst plus grafikę bitmapową
  • CTIA/GTIA odpowiada za wygenerowanie koloru oraz sprzętowe duszki/pociski (sprites/missiles)

Realia obrazu na Atari sprowadziłbym do tego co potrafi Antic rozdzielczościowo + z czym się wyrobi GTIA kolorystycznie. Mamy tzw. tryby Antic’a, do których przypisano określone rozdzielczości ekranu i ilości możliwych kolorów. Oczywiście – trochę trickowo, a trochę na poziomie “poza Atari BASIC” można sobie zrobić własny tryb ekranu składający się z tzw. DisplayList’y czyli listy rozkazów do wykonania przez procesor ANTIC. Nota bene każdy tryb ekranu – nawet – a zwłaszcza te w BASICu mają takie predefiniowane Displaylisty. Co to oznacza – możemy zrobić sobie własną definicję zawartości ekranu – np. z linią w trybie tekstowym na start na samej górze (by wyświetlać w niej np. ilość punktów zdobytych w grze), potem wyświetlając ileś linii graficznych by znowu na samym dole wyświetlić linię tekstową na np. status. Nie będę w tym temacie mędrkował ponad zwoją nikłą na ten moment wiedzę – zainteresowanych odeślę do jednej z lepszych pozycji na ten (i parę innych jeszcze) temat czyli De Re Atari (posiadam w oryginalne, ale na szczęście ktoś to wklepał i jest dostępne online – ja zrobiłem sobie z tego plik pod Kindle zanim zauważyłem, że ktoś na archive.org już to zrobił).

Kod wyświetlający powyższe kolorki w Atari BASIC znalazłem w necie, dla mnie była to też przymiarka do znalezienia różnic składni etc. pomiędzy BASIC’iem i Action!

O ile pętle FOR … TO … NEXT … są po prostu zamieniane na FOR … TO … DO… OD to typowo BASICowa składnia czytania danych READ … DATA … wymaga już przestawienia się na inny kod, ale po paru grzebaniach w C nie jest to odkrywanie ameryki siadając do ActioN!. Brakuje jakiejś dobrej książki do Action! Dobrego omówienia – dobrego, z przykładami, nie na szybko czyli takiego podręcznika od A do Z, mam wrażenie, że manual powstał z notatek na serwetkach – niewiele się zmieściło. To też powoduje, że nie jest to wszystko tak na tacy jak w przypadkach innych języków i daje – nie ukrywam – większą satysfakcję jak się to samemu “rozkmini”.

Odnośnie szybkości kodu Action! naczytałem się peanów i zachwytów – tutaj niestety użycie Plot Drawto z biblioteki Action! powoduje… prawie równie wolny kod jak w BASICu:

Action! 7.5 sek.

Atari BASIC 9.3 sek.

Turbo BASIC XL (skompilowany kod z Atari BASIC) prawie 7,8 sek.

Biorąc pod uwagę, że Action! skompilowany to… słabo to wypadło. (GIFa wrzuciłem jako podgląd jak to rysuje Action! @15fps – ostatnie klatki są z ditheringiem, bo inaczej nie wyświetli się 256 kolorów palety).

Sam program nie robi nic skomplikowanego – rysuje 16 pionowych gradacji o grubości 5 pikseli każda czyli seria w pętli Plot/Drawto w trybie 9 (wg nomenklatury BASICa) czyli 80×192 z 16 odcieniami koloru, na koniec na ustawiane są duszki i pociski kadrujące (maskujące brzegi ekranu). W przerwaniu co 12 linii jest generowana zmiana koloru tła (stąd widzimy na ekranie 16 kolorów i 16 odcieni).

Piętą achillesową są tutaj oczywiście biblioteki procedur graficznych, z tego co zauważyłem – większość osob korzystała z procedur własnych i odradza korzystania z tych wbudowanych. Czyli krok następny – własne szybkie Plot/Dratwo czyli de facto i własny zestaw procedur pod kompilację (kolejne limbo Action! – na tym etapie nie jestem w stanie skompilować sobie bez dyskietki Runtime – Action! tworzy mi bez niej z customowym plikiem runtime 500 bajtowe pliki).

W temacie kolorów – więcej kolorów na raz… chyba się nie da, chyba, że do “wyświetlenia na raz na ekranie” wrzucimy flickerscreen czy inne tricki z przeplotem i nakładanie kolorów. Ciekawy jestem efektu 1920 kolorów (czyli zmieszania trybów CTIA i GTIA czyli teoretycznie dwóch palet – aczkolwiek jak porównywałem to nie są to kolory na tyle odstające, żeby doliczyć się tylu odcieni czegokolwiek) o którym wspomniał TDC, ale nie doczekałem się na ten moment jakiegoś przykładu, który to wyświetla (najchętniej nie w teorii i nie w emulatorze tylko na realnym sprzęcie).

EDIT: prędkość mnie tak zirygowała, że przepisałem kod generujący pasek z gradacją luminancji na szybszy kod odwołujący się bezpośrednio do pamięci ekranu i – jest szybciej.

Program generuje teraz obraz w 3 sekundy. Zmieniłem kierunek zapisu danych i kod przyścieszył znacznie, bo z 7,5 sekundy (czyli 2,5 raza).

Archeologia czyli ziarenko po ziarenku odgrzebywanie Action! (2)

Tuesday, January 14th, 2020

Skoro postanowiłem się tym Action! pobawić więcej niż w Hello world! to warto by przemyśleć jak do tego podejść, aby zaliczyć jak najmniej fuckupów.

Action! oryginalnie występował jedynie w wersji na karcie plus dwie dodatkowe dyskietki – Runtime and Toolkit. Pierwsza pozwalała na skompilowanie kodu jako samodzielnie działającego programu i nie wymagającego karta/ROMu, druga zawierała trochę dodatkowych bibliotek i procedur. Klepanie dzisiaj w 100% kodu na 8bitowym komputerze to pewnego rodzaju archaizm, co prawda znajdą się tacy, którzy będą z tego robić sztukę, niezależnie od efektowności i efektywności takiego IDE, ale mając ograniczone zasoby czasowe i chęć raczej zrobienia czegoś do końca niż robienia czegoś i niekończenie to wybiorę nowocześniejszą metodę. Takie zabawy z retrokomputerem jako bazą kodowania można zrobić dla zabawy z czymś małym, krótkim i mając dużo czasu.

Dlaczego nie bezpośrednio na Atari:

  • edytor wbudowany w Action! niestety pracuje tylko w 40 kolumnach. Lekki dramat jeżeli wklepiecie linie z kodem i komentarzami 🙂 Oczywiście można edytować sobie kod (który jest tekstowy) w edytorze wspierającym 80 czy 64 kolumny, a potem wczytywać zapisany plik do edytora Action!, ale sprowadza to całość do jednego: piszemy kod gdzie indziej, wrzucamy go do edytora Action!, kompilujemy etc.
  • kwestia backupów, rewizji kodu, komentowania, drukowania – nie muszę tłumaczyć, że z poziomu Atari traciłbym czas na proste rzeczy, a czas to jest coś czego nie mam w nadmiarze.

Czyli skompletowanie prostego i działającego środowiska do pracy:

  • Będę pracował głównie pod Mac OS, więc zainstalowałem Atari800MacX i działa to dość fajnie, bo:
  • – można wklejać tekst ze schowka (z wyłączonym limitem prędkości jest to nawet sensowne szybkościowo),
    – można zapisać tekst na handler “P:” i dostać treść do okienka z dokumentem tekstowym na MacOS.
  • Druga opcja z której korzystam równolegle to Wine i Altirra pod Windows. Dużo bardziej rozbudowany i zaawansowany emulator, ale korzystam z niego głównie do operowania obrazami i zawartościami dyskietek oraz bardziej zaawansowanych konfigów niż Atari 800XL z Rambo i dwoma stacjami stacją dysków 1050 pod DOS 2.5.
  • Gotowe pliki .xex ale też źródła do testowania na realnym sprzęcie (1088XEL+CF3, 800+Incognito, XE GS + Ultimate + SIO2SD czy wreszcie 600XL z 64k/800XL stockowe z SIO2SD) po prostu przerzucam przez obrazy dyskietek .atr – czy na kartę CF czy na SD (SIO2SD) czy po prostu jako .xex do SIDE2. To, że działa na emulatorze to fajnie, ale ma tak samo dobrze działać na realnym sprzęcie. Równie dobrze mogę to przerzucać SIO2PC.
  • Effectus – cross kompilator pod Windows i Linuxa czyli ja znowu pod Wine 🙂 odpaliłem testowo – działa, pewnie będzie miał większe zastosowanie przy większej ilości kodu źródłowego, który może się nie pomieścić w pamięci edytora/kompilera Action!, ale to dalszy etap.

Są dwie wiadomości na start: dobra i zła. Ta dobra – ludzie już przerabiali ten temat, na atariwiki można znaleść sporo informacji, materiałów, obrazów dyskietek, kartów etc. Czyli można zgromadzić sobie jakieś podstawowe startowe rzeczy. Apetyt rośnie dalej i tutaj niestety ta druga wiadomość: wiele bardzo interesujących stron i materiałów zaliczyło już dołek internetowy. Na szczęście z pomocą przyjdzie archive.org i Wayback Machine. Jedna z takich stron to http://joyfulcoder.net – prawdę mówiąc jedna z ciekawszych albo akurat mi przydało się całkiem sporo rzeczy na niej opublikowanych.
https://web.archive.org/web/20120722063641/http://joyfulcoder.net/atari/action/code/

Lista gdzie zajrzeć bez grzebania w martwych już zawartościach stron:

  • Przede wszystkim na AtariWiki i część poświęconą Action! – znajdziemy tam wszystko, co pozwoli wystartować. Obrazy dyskietek, obrazy kartów, manuale (również zaktualizowane), bardzo dużo informacji i bardzo dużo linków – być może nawet za dużo na start i można utonąć, ale warto tam wracać szukając odpowiedzi na napotkane problemy.
  • Jeżeli macie doświadczenie z programowaniem w innych językach typu C, Pascal, BASIC to warto zaraz po skompletowaniu IDE spojrzeć na listę znalezionych błędów – i sposoby aby je omijać. Niestety – nie powstała nowsza wersja Action! niż 3.6 a jest to kombajn połączony edytora, kompilatora i jeszcze paru rzeczy (oryginalnie rezydujących w czterech bankach po 4k i przełączanych wg aktualnej potrzeby działania), nie aktualizowano tego i nie usuwano błędów na zasadzie kolejnych rewizji oprogramowania. To jak uczenie się starożytnej greki czy łaciny.

opulenti atarini multos deos habent

Dlaczego nie polecam suma sumarum cyklu o Action! z Bajtków i Mojego Atari? Mam wrażenie, że jest to żywcem wyrwane z materiałów anglojęzycznych, przy czym – w tych oryginalnych można znaleść to co się szuka szybciej i w większym opracowaniu tematu. Oczywiście – można przez sentyment i z ciekawości zajrzeć do tego pod czym podpisał się Wojciech Zientara.

Wracając do Action! – patrząc na szybko – im głębiej w to wchodzę, tym mam wrażenie większej archeologii. Język niszowy, nie zdobył dużej popularności pomimo bardzo fajnych możliwości i bardzo dobrej wynikowej prędkości po kompilacji. Z czego to wynikało? Forma dystrybucji (cart)? Brak dalszego rozwoju? OSS (Optimised System Software) tworzyło 15 osób, w sumie mieli kilka bardzo dobrych produktów jak MAC/65 i ActioN!, ale niestety też parę niewypałów sprzedażowych jak BASIC XE. W 1988 roku połączyli się z ICD (SpartaDOS). Próbowali swoich sił w sofcie na Apple II, Atari ST, ale raczej bez sukcesów. I znikli. Na marginesie – źródła Action! są dostępne publiczne.

Natomiast już wiem, że większość rzeczy pomimo tego, że ludzie zjedli na tym zęby w latach 80tych i do połowy 90tych jest nadal do “wykopania” – to wrażenie po poczytaniu forów. Z jednej strony fajne, z drugiej – zacząłem gromadzić materiały o tym języku, żeby nie musieć się pytać i robi się pokaźna zawartość folderu na dysku. Może kiedyś scalę to w jedną publikację.

Żeby zdjąć cokolwiek z kupski wstydu lat 80tych potrzebuję na start odczytać grafiki bitmapowe, móc je wczytać z dysku jako dane raw, wyświetlić je najchętniej z dysku (wtedy mam temat doładowania binarek rozkmniniony). Rzecz druga to obsługa klawiatury/joysticka. Poszło szybciej niż myślałem.

Przeskoczenie z Atari BASIC’a nie jest bolesne, daję mu szansę 🙂

W sumie – przestawiając się z jakiegokolwiek innego kompa i nawet szczątkowej trzeba znać przede wszystkim a/ deklaracje zmiennych i wskaźników, b/ operowanie większymi danymi (pamięć RAM i masowa) c/ przekładanie tego na tekst i grafikę, d/ specyficzne dla platformy rozwiązania graficzno/muzyczno/sprzętowe. Skoro człowiek robił coś na jednej platformie, to zrobi też na innej 🙂

Od wspomnień, matematyki i sentymentów do Action!

Monday, January 13th, 2020

Z przerażeniem patrzę na kalendarz – w czerwcu miną 34lata od momentu, kiedy jako 12latek dostałem wymarzony prezent – komputer. Historia o tym, czy był to ten komputer o jakim marzyłem, czy wybór akurat Atari 800XL wtedy był dobrym wyborem dla mnie – jest dłuższa i bardziej złożona.

Pomimo, że w stosunku do moich rówieśników miałem komputer dość wcześnie, to jakby dobrze policzyć to czekałem na komputer kilka lat. Tata – mgr inż. elektronik pracujący wtedy chyba w serwisie JVC na Chmielnej (nota bene – Hackroom122 mieści się kilkadziesiąt metrów od tego miejsca) dostawał czasem przez znajomych wyjeżdżających do RFNu i w dalsze rejony jak do UK magazyny o elektronice. Gdzieś na początku lat 80tych, w jednym z nich zobaczyłem o dziwo w mojej pamięci kolorową reklamę Sinclair ZX 81, który – pomimo kosmicznej ceny na polskie warunki był w stosunku do innych komputerów tani.

Dość długo myślałem, że ten przełomowy dla mnie magazyn i reklama musiały być z 1982 roku albo wcześniejszy – bo w tym właśnie roku debiutował ZX Spectrum – a ZX81 to wcześniejszy model, ale w trakcie zbierania różnych materiałów trafiłem na materiały reklamowe (w tym wytyczne dla sprzedawców) kampanii 1983 roku, gdzie pojawia się w promocyjnej cenie zestaw ZX81. Kampania trwała do Bożego Narodzenia 1983 roku – więc zakładam, że nawet z opóźnieniem dostania od kogoś takiego magazynu – był to maksymalnie początek 1984 roku. Na pewno była kolorowa – i chociaż bardziej pasuje mi pamięciowo ta druga z powyższych (to jest to reklama Timex 1000 czyli amerykańskiego klona ZX81) to nadal zastanawiam się, którą z nich widziałem.

Pamiętam mój zachwyt – wow, komputer, i do tego jaki tani (wystarczyło by porównać cenę 99GBP do cen komputerów domowych z tamtych czasów – Commodore 64 kosztował w chwili debiutu (1982) ok. 600 USD, ceny pozostałych komputerów, których modele człowiek widział albo słyszał o nich czyli Atari 400/800 albo Apple II – były w stosunku do tego astronomiczne. Pamiętam do dzisiaj rozmowę z moim tatą – i jego prosty argument – zobacz, to jest coś okrojonego, ten komputer nie wydaje dźwięków ani nie pokazuje kolorowego obrazu. Tata z właściwym inżynierowi sposobem argumentowania zabił wizję ZX81. To był zbyt prosty komputer. Ale nie powiedział nie. Był jak to nadal mówi “pokoleniem kalkulatorów”, w jego młodości wow robił kalkulator kosztujący pensję czy więcej. To co nadeszło – komputery – było poza jego marzeniami z młodości.

Czas do czerwca 1986 roku spędziłem na… jęczeniu rodzicom na temat tego jak bardzo chciałbym mieć komputer, zapełnianiu zeszytów pseudokodami gier w BASICu i rysowaniu w zeszytach w kratkę i na papierze milimetrowym jakichś kształtów. To było chyba na tyle wyjątkowe, że rodzice z babcią zlitowali się. Padła decyzja że kupujemy – ale wybór był dość średni. Wiem, że przez jakiś czas tata starał się zdobyć więcej informacji – to musiało być przed wypuszczeniem Bajtka – i nie ma co owijać w bawełkę – była posucha informacji na temat komputerów domowych. W 1985 roku była już Giełda Bajtka na Grzybowskiej, co trochę ułatwiło sprawę rekonesansu, tylko tata nie był przekonany do tego, żeby kupować komputer (nawet nowy) z drugiej ręki, od handlarza. Dodatkowo akurat w tym czasie zbiegły się jakieś większe wydatki rodzinne i temat został przełożony “na przyszły rok”, byłem niepocieszony, ale to nie były łatwe czasy, trzeba było zrozumieć i przyjąć na klatę wiele rzeczy.

Czy jesteście sobie wyobrazić, że nie znaliśmy wtedy nikogo, kto miał komputer domowy? Dzisiaj kupując komputer można się poradzić znajomych, rodziny, na fejsie, w sklepie. Wtedy – to była sytuacja abstrakcyjna, szczątkowe wiadomości o komputerach, o ich awaryjności, możliwościach etc. Era Bajtka dopiero nadchodziła – co więcej – pierwsze numery Bajtka niewiele pomogły w wyborze 🙂 Miesięczników poświęconych komputerom w zasadzie nie było – jakieś pojedyńcze wzmianki w pismach typu Młody Technik czy raczkujący potem w Sztandarze Młodych Bajtek. W Stanach Atari 800XL reklamował Alan Alda znany m.in. z serialu M.A.S.H. a u nas po prostu jak statek z kosmosu komputer wylądował do sprzedaży w sieci Pewexu i Baltony.

W czerwcu 1986 roku wreszcie pojawiło się w domu Atari 800XL. Już trochę traciłem nadzieję, że dostanę komputer, ale rodzice – znając moje “maniactwo” chyba czekali też na dobry moment – dostałem go tuż przed wakacjami (więc w bezpiecznym dla mojej edukacji momencie). Chyba była to też nagroda za pierwsze miejsce na olimpiadzie z historii (na pierwszy etap poszedłem, bo zwalniali z lekcji – a potem jakoś poszło, lubiłem czytać i lubiłem historię). Pamiętam, że Atari wtedy to był towar mocno deficytowy, do Pewexu trafiały partie rzutami, znikały równie szybko co meble w salonie meblowym przy Mazowieckiej. Dodatkowo – powstało małe zamieszanie – równolegle z rozważanym przez tatę Atari 800XL pojawiły się Atari 130XE, który to model kosztował dużo więcej, zbyt dużo na nasz budżet. Postanowiliśmy zaczekać tydzień-dwa i polować na 800XL.
– Tato, ale dlaczego Atari?
– Bo ma gwarancję i serwis w Polsce.

Ciężko było mi z tym dyskutować. To były racjonalne argumenty plus… to nie były moje pieniądze. 80,5 tys. zł odpowiadało bodajże 115 USD po jakimś tam złodziejskim przeliczniku. Nigdy wcześniej nie widziałem tylu pieniędzy na stole, to była kupa kasy, nawet w wymiarze fizycznym. To były jakieś trzy pensje mojej mamy. Nie wiem jakim cudem moja babcia nazbierała 50 tys. zł, resztę dołożyli moi rodzice.

Początkowo nastawialiśmy się na upolowanie w chyba największym (i pierwszym) Pewexie, który mieścił się na ul. Stawki w budynku Intraco, ale okazało się, że trafienie tam na Atari w tym okresie to byłby cud. Wtedy chyba ktoś ze znajomych zadzwonił i dał cynk tacie, że na Świętojerskiej (dzisiejszy Rossman przy Sądach) w Pewexie są Atari 800XL. Wsiedliśmy w naszego 126p made in Italy i pojechaliśmy po mój pierwszy komputer. Jeżeli bywają w życiu przełomowe i istotne momenty to był chyba ten – moment, kiedy dostałem swój pierwszy komputer.

Nie wiem czy jest to na tyle jasne – po sam komputer. Bez magnetofonu. Bez joysticków. Bez stacji dysków (kosztowała 199 USD – prawie dwa razy więcej niż sam komputer!!!). Przez kilka pierwszych dni komputer podłączaliśmy pod czarno-biały telewizor jaki mieliśmy. Imponujące 26 cali czerni i bieli z odcieniami i smużeniem 🙂

Rodzice bardzo szybko zorientowali się, że trzeba mi udostępnić inny telewizor – najpierw przejąłem wakacyjno-turystyczny telewizor UNITRA WZT TWM-315, a potem dostałem swój osobisty monitor do pokoju Telewizor Vela 202, który mój tata przerobił (pominął tor telewizyjny i zrobił mi po prostu wejście “monitorowe” – a wszystko to efekt tego, że komputer był rozstawiony nonstop, ponieważ nie mając magnetofonu praktycznie go nie wyłączałem.

Pierwsze tygodnie spędziłem na wpisywaniu listingów skąd popadnie i wściekaniu się dlaczego coś nie działa. Trochę pomogła nabyta kserówka książki Atari BASIC. Nie działało, bo wpisywałem swoje “programy” pisane na sucho, w bliżej nieokreślonej logice programowania oraz dialekcie BASICa – myślę, że była to mieszanina BASIC’a jaki dostał ZX Spectrum oraz BBC BASIC. Wtedy to dotarło do mnie, że wylądowałem na planecie Atari, a pozostałe komputery są z kompletnie innych planet. Oczywiście nie przeszkadzało mi się spotykać u kolegów i grać na ZX Spectrum czy VIC-20, nawet z jednym z kolegów pożyczaliśmy sobie wzajemnie – ja pożyczałem od kolegi ZX Spectrum i zachwycałem się ilością fantastycznych gier o tytułach o których wszyscy atarowcy tylko śnili, a kolega, mający brata – był zachwycony, że nie musi walczyć o komputer i że może jednocześnie z bratem, razem, grać w gry na komputerze. W sumie jakbyśmy wtedy zamienili się na komputery – to byłby optymalny deal. Jedna i druga strona dostała by to, o czym w głębi serca wtedy marzyła.

Rodzice zlitowali się wtedy nade mną trzykrotnie. Po pierwsze – po pierwsze zmontował mi interfejs pośredniczący pomiędzy Atari a zwykłym magnetofonem. Pamiętam jak dzisiaj wtyczkę SIO odlaną z żywicy. Wreszcie mogłem wczytać programy z dołączonej kasety – pamiętam, że były to szachy (CHESS) i jeszcze jakaś kaseta z prostymi programami w BASICu – te ostatnie nie zrobiły już wrażenia, byłem po kilku tygodniach wpisywania wszystkiego co znalazłem, więc na dołączonej kasecie nie było nic bardziej efektownego niż Wąż i inne gry jakie już “przerobiłem”. Niestety NRDowski magnetofon chyba szybko wyzionął ducha i po wakacjach 1986 rodzice zlitowali się po raz drugi – i dostałem firmówkę – Atari XC12, przekleństwo każdego właściciela – ale wtedy to było moje spełnienie marzeń. Mogłem nagrywać i odtwarzać co chciałem.

Od września 1986 byłem stałym bywalcem Giełdy Bajtka, aż do jej końca. Nie handlowałem tam jak wielu moich równieśników, ale praktycznie co dwa tygodnie byłem, aby sprawdzić, co pojawiło się na Atari, niestety ten żart “na Atari nie ma” był prawdziwy – większość tytułów figurujących na topie listy gier z Bajtka była na Commodore 64 i ZX Spectrum, z rzadka pojawiało się coś dostępnego na Atari – co nie oznacza, że nie było fajnych gier, były – rozpoczęła się dla mnie fantastyczna przygoda, odrywająca mnie niejednokrotnie na wiele późnych wieczorów i nocy.

Rodzice oczywiście nie pozwalali mi na takie rzeczy, ale jak to nastolatek znajdywałem sposoby – na klawiszach funkcyjnych kładłem książkę zasłaniającą świecącą na czerwono diodę zasilania, monitor wyłączałem wyciągając cicho wtyczkę z kontaktu, bo przycisk na sprężynie mógł mnie zdradzić.

Klimat towarzyszący giełdom komputerowym w formie wywiadów z jej bywalcami próbowali odtworzyć twórcy kanału Loading – przy czym, realia omawiane na filmie są trochę późniejsze niż 1986 rok.

Trzeci temat nazywa się joystick*. Kosztował wtedy nie mało – i był zdecydowanie poza budżetem. A poza tym – ja go chciałem jak najszybciej. Tata zlitował się i… zrobił mi joystick. Bardzo żałuję, że nie zachowałem go – chyba poleciał do śmieci gdy wymieniałem joysticki na firmowe Quickshoty, a było w nim mistrzostwo radzenia sobie w tamtych czasach. Tata zrobił mi go… z drążka hamulca ręcznego z malucha. Pręt drążna wchodził w łożysko, przymocowane do jednej płaszczyzny obudowy, wychylenia rejestrowały microswitche będące “piękro niżej”. W przekroju podstawa była trapezem równoramiennym, zrobiona z kawałków kątowników aluminiowych i dwóch kawałków drewna. I teraz najważniejsze – był to najbardziej kultowy i przeklinany joystick wśród moich kolegów. Nikt nie chciał grać ze mną w Decathlon, bo wiadomo było że grając nim wygram. Rączka joysticka była na tyle ciężka, że wystarczało trzymać za podstawę i lekko nią bujać, a rączka sama “klikała”. Wiele bym dał, żeby dostać go znowu w swoje ręce. Takie rzeczy nabierają wartości sentymentalnej niestety zwykle jak się je utraci.

Gdzie ten Action!? To dopiero na horyzoncie. Na Action! musiałem poczekać do czasów “turbo”. Niestety miałem Action! w formie jakiejś spiraconej wersji przeniesionej z dyskietki na taśmę – czyli podwójnie odgrzany kotlet. Nie bardzo coś działało, chociaż bardzo starałem się nadążyć za kursem Wojtka Zientary. Nota bene – patrząc dzisiaj na materiały, który były dołączane do Action! oraz które były publikowane na zachodzie mam nieodparte wrażenie, że zapożyczenie tutaj zawartości było dość duże – ale to taka cecha tamtych czasów.

Przygoda z Action! była niestety krótka. Coś nie działało. Nie było książek pod ręką, sam kurs z Bajtka i Mojego Atari to było za mało na mój apetyt – wtedy w drugiej połowie lat 80tych wygrał u mnie Turbo BASIC XL. Działał lepiej i miałem go na pirackim karcie z Turbo magnetofonowym.

I tak po ponad 30 latach siadłem ponownie przed ekranem, włączyłem Action! i napisałem:

PROC welcome()
PrintE(“Action! I’m back.”)
RETURN

SHIFT-CTRL-M, C, [RETURN], R, [RETURN]

Dalej będzie tylko trudniej. A co się stało z Atari? W 1993 roku zamieniłem się na kamerę pogłosową – potrzebowaliśmy do sali prób, a w wieku 19 lat priorytetem był zespół i granie muzyki/nagrywanie płyty. Jakie to były pieniądze? Wtedy wartość mniej więcej 250 zł, dzisiaj za atarynkę w pudle, z kartem, magnetofonem, kasetami, książkami etc. w takim stanie jak sprzedawałem zapłacił bym pewnie 4x więcej.

* temat joysticka jeszcze wróci.