DE PL EN RU
← Powrót

CYBER27 — własny system operacyjny

System bare-metal dla Raspberry Pi 3 — bez Linuksa, z własnym interpreterem BASIC-a, pulpitem graficznym i silnikiem 3D. Wszystko bezpośrednio na sprzęcie.

Dane techniczne

ProcesorARM Cortex-A53, 4× 1,2 GHz (Raspberry Pi 3)
Systembrak — bare metal (Circle)
Ekranbufor 320×240, skalowany do 640×480 / 1920×1080
Kolory255 (paleta, jak Amiga 1200)
Językwłasny interpreter BASIC (R0–R7, nazwane zmienne, SUB/FUNCTION, TYPE)
Sprite'y16 slotów × 32×32, 8 klatek animacji, skalowanie ×1..×4
Silnik 3Draycasting (Wolf), tunel, izometria (styl Diablo)
Mapydo 320×320 kafli, baza warstw (WARSTWY.TXT)
Dźwięk4 głosy ADSR + sample PCM (SLOAD/SPLAY)
Pamięćjądro 64 MB, BSS ~3,6 MB

Zrzuty ekranu

ZARZEW — Isometrie (Diablo-Stil) | Izometria | Isometric | Изометрия

CYBER-LAB 3D — Raycasting (Wolfenstein-Stil) | CYBER-LAB 3D — raycaster | CYBER-LAB 3D — raycaster | CYBER-LAB 3D — рейкастинг

Texturen 64×64 | Tekstury | Textures | Текстуры

Objekte 32×32 | Obiekty | Objects | Объекты

Sprite & Transparenz | Sprite | Sprite | Спрайт

Programy edukacyjne

Oprócz gier system zawiera pełny pakiet nauki: matematyka, fizyka, chemia, geografia, astronomia — od ucznia podstawówki po studenta. Wszystko napisane w BASIC-u.

APOLLO — Centrum Misji | Centrum Misji | Mission Centre | Центр миссии

Fizyka | Fizyka | Physics | Физика

Uczenie — wybór wieku | Uczenie | Learning | Обучение

Studia | Studia | Advanced | Углублённо

Syntezator — 4 głosy | Syntezator | Synthesizer | Синтезатор

Podręcznik BASIC-a (pomoc w systemie)

Pomoc jest dostępna bezpośrednio w systemie — klawisz F1.
1 Podstawy: jak dziala program
CYBER27 BASIC 27-BIT

PROGRAM to lista linii. Kazda linia
ma NUMER i TRESC:

     10 PRINT "OK"
     ^^ ^^^^^^^^^^
     |  +-- tresc (co zrobic)
     +----- numer (kolejnosc)

NUMERY decyduja o KOLEJNOSCI wykonania,
nie o kolejnosci wpisania. Dlatego
mozesz dopisac linie 15 miedzy 10 a 20
i wykona sie wlasciwie.

REJESTRY: R0, R1 ... R7
  8 komorek na liczby. Najszybsze.

PAMIEC: 256 slow (adresy 0x00..0xFF)
  Wieksza niz rejestry, wolniejsza.
  Dostep przez POKE i PEEK.

LICZBY: zmiennoprzecinkowe (jak C64,
ale dokladniejsze). Dziala kropka
i znak minus:
  PRINT 1/2    ->  0.5
  PRINT 10/3   ->  3.33333333
  PRINT -5     ->  -5
PAMIEC (POKE/PEEK) i operatory bitowe
zostaja 27-bitowe (0x07FFFFFF).

NUMERACJA W LOCIE: w edytorze nowa
linia sama dostaje numer (10,20,30...).
Mozesz tez wpisac numer recznie.
2 Komendy podstawowe
PRINT "TEKST"   wypisz tekst
  Cudzyslow OBOWIAZKOWY dla tekstu!
  PRINT "WITAJ"

PRINT R3        wypisz ZAWARTOSC
  rejestru — BEZ cudzyslowu

PRINT "A", R0  WIELE elementow
  ',' odstep, ';' bez odstepu
  koncowe ';' = bez nowej linii

?               skrot od PRINT
  ? R0  to samo co PRINT R0

LIST            wypisz caly program
  z numerami linii

RUN             URUCHOM program
  Wykonuje od najmniejszego numeru
  do konca programu.

NEW             wyczysc program
  Usuwa WSZYSTKIE linie.
  UWAGA: nie ma cofniecia!

CLS             wyczysc ekran
CLEAR           wyczysc rejestry
STATUS          pokaz stan rejestrow
BOOT            pokaz ekran startowy

REM tekst       KOMENTARZ
  Linia ignorowana przez interpreter.
  Uzyj do opisania, co robi program.

RND(n)          liczba losowa [0, n)
  INT(RND(6))+1  ->  kosc 1..6
INT(x)          czesc calkowita (podloga)
RANDOMIZE       nowe ziarno dla RND

DZWIEK (SID):
  PLAY glos,freq,w   w: 0=PUL 1=SAW
                      2=TRI 3=SINE 4=NOISE
  NOTE freq,dur   TEMPO bpm   STOP
  ENV glos,a,d,s,r  obwiednia (ms)
  PULSE glos,w   0..4095 (2048=50%)
  PAN glos,p     0=lewo .. 15=prawo
  ARP glos,n1,n2[,n3]  akord na 1 glosie
  TRACK n1,n2,n3,n4[,dur]  wiersz utworu
  SONG              odtworz utwor (petla)
  SONGCLR           wyczysc utwor

TEKSTY: zmienne A$..Z$
  A$ = "Witaj"
  B$ = A$ + "!"      sklejanie '+ '
  PRINT A$, LEN(A$)
  LEFT$/RIGHT$(A$,n)
  MID$(A$,i,n)  (i od 1)
  CHR$(n) ASC(a$) STR$(n) VAL(a$)
  IF A$ = "Witaj" THEN PRINT "OK"

GRA:  GET R0   ostatni klawisz
  200/201/202/203 = L/P/G/D, 13=ENTER
  FRAME [fps]  staly takt klatki!
  (FRAME=50fps; NIE dziala jak WAIT!)
  WAIT ms        czekaj (np. WAIT 50)
  MOVSPR s,dx,dy  przesun sprite
  SPRCOL d,a,b   kolizja sprite'ow

MYSZ (edytory, menu):
  MOUSEGRID Rx,Ry  pozycja (PIKSELE
           GRAFIKI 0..163 / 0..127)
  MOUSEX Rn / MOUSEY Rn  j.w. pojedynczo
  MOUSESX Rn / MOUSESY Rn  piksele EKRANU
  MOUSEB Rn   1=lewy 2=prawy 3=oba
  MOUSECLICK Rx,Ry  nowy klik (kolejka!)
  MOUSEHOLD Rn  czy LEWY trzymany
  MOUSEDOWN Rn  czy NOWY klik (1/0)
  MOUSEWHEEL Rn  ruch rolki

SILNIK 2 - WYSOKOSCI (schody, rampy):
  W2INIT w,h        mapa z wysokosciami
  W2H x,y,p         podloga kafla (0..15)
  W2HG x,y          odczyt do R0
  W2RAMP x1,y1,x2,y2,h1,h2  rampa
  W2STEP x1,y1,x2,y2,n,h    schody
  WMAZE zloz[,seed]  labirynt
  WCAVE wyp,smooth   jaskinia (groty)
  WTUNNEL dl,komory  TUNELE (korytarze)
  WTEX2 sciana,podl,sklep  tekstury bunkra
  WLAMP 0|1          swiatla w tunelu
  WMODE 4            tryb BUNKIER (luk)
  1 jednostka = 1/4 kafla

TOZSAMOSC (adres = hash klucza, NIE IP):
  MYID A$        Twoj adres (16 znakow)
  MYID           wypisz na ekran
  MYIDRESET      nowa tozsamosc (NOWY adres!)
  Plik: IDENTITY.RAW (32 B, karta SD)

PLIKI MASOWE (edytory grafiki):
  BLOAD "plik",t[,n]  tab <- plik
  BSAVE "plik",t,n   tab -> plik
  (t = tablica A..Z, n bajtow)
  R0 = ile wczytano/zapisano

RYSOWANIE (piksele 0..163 / 0..127):
  LINE x1,y1,x2,y2[,c]
  BOX/RECT x1,y1,x2,y2[,c]
  FILLRECT x1,y1,x2,y2[,c]
  CIRCLE x,y,r[,c]
  FILLCIRCLE x,y,r[,c]
  ELLIPSE x,y,rx,ry[,c]
  FILLELLIPSE x,y,rx,ry[,c]
  ARC x,y,r,a1,a2[,c] (stopnie)
  PAINT x,y[,c]   wypelnienie
  CHAR x,y,"tekst"[,c]  napis
  SCALE n   gruby piksel (1..8)
  c = kolor 0..15 (domyslnie CO)
3 Rejestry i pamiec
REJESTRY to 8 komorek: R0..R7.
Kazda trzyma liczbe zmiennoprzecinkowa
(kropka i znak, jak w C64).

SET R0, 0x123    ustaw rejestr R0
  Liczby: dziesietnie (123)
  albo szesnastkowo (0x7B).

LET R1 = 42      to samo co SET,
  ale skladnia ze znakiem '='

R0 = 5           najkrotsza forma
  Sam rejestr i '=' wystarcza.

POKE 0x10, R3    zapisz do PAMIECI
  0x10 = adres (slot 16)
  R3   = wartosc do zapisania
  Pamiec ma 256 slow (0x00..0xFF).

PEEK 0x10        odczytaj z PAMIECI
  Wynik na EKRAN. W programie uzyj
  PEEK(x) jako funkcji w wyrazeniu.

DIM A(20)        TABLICA A (indeksy 0..20)
  A(i) = 7       zapisz element
  PRINT A(i)     czytaj element
  Litery A..Z, indeks max 63.

INPUT R0         wczytaj liczbe
  od uzytkownika z klawiatury
4 Arytmetyka: ADD SUB MUL
⚙ DODANE PO PYTANIU O APOLLO ⚙

Komputer pokladowy Apollo (AGC) mial
DODAWANIE sprzętowe. CYBER27 mial
tylko operacje bitowe — dlatego nie
dal sie napisac nic, co "liczy".
Teraz jest — w liczbach zmiennoprzecinkowych.

ADD R2,R0,R1   R2 = R0 + R1
SUB R2,R0,R1   R2 = R0 - R1
MUL R2,R0,R1   R2 = R0 * R1
DIV R2,R0,R1   R2 = R0 / R1 (ulamki!)
MOD R2,R0,R1   R2 = reszta z R0/R1

Zamiast rejestru mozna podac LICZBE:
  ADD R2,R0,10     dodaj 10
  MUL R2,R0,0x10   pomnóż przez 16

PRZYKLAD:
  SET R0,7
  SET R1,3
  ADD R2,R0,R1   wynik 10
  SUB R3,R0,R1   wynik 4
  MUL R4,R0,R1   wynik 21
  DIV R5,R0,R1   wynik 2
  MOD R6,R0,R1   wynik 1

══ ZAKRES I ZNAK ══

Liczby maja teraz ZNAK i ulamki:
  SUB R2,3,7   ->  R2 = -4
  DIV R2,1,2   ->  R2 = 0.5
Zakres ogromny (jak double) — nie
musisz sie martwic o obciecie.

Dzielenie MOD przez zero = BLAD:
  DIV R2,R0,0   przerwie program
  Na UART: "DIV: dzielenie przez zero"

Operatory BITOWE (AND/OR/XOR/SHL/
SHR/NOT) obcinaja do 27 bitow —
bo dzialaja na slowach pamieci.
5 Pierwiastki, potegi, fale (SIN/COS)
SQR dest,source    PIERWIASTEK
POW dest,base,exp  POTEGA

Uwaga: to NIE sa zwykle funkcje.
AGC w Apollo liczylo pierwiastki
do nawigacji — i robil to tak samo:
metoda Newtona, krok po kroku.

══ SQR — PIERWIASTEK ══

  SET R0,144
  SQR R1,R0     R1 = 12

Wynik z ulamkiem (prawdziwy pierwiastek):
SQR R1,144  =  12
SQR R1,2    =  1.41421356
SQR R1,10   =  3.16227766

Liczba ujemna = blad:
  "SQR: liczba ujemna"

══ POW — POTEGA ══

  POW R2,2,10     R2 = 2^10 = 1024
  POW R2,3,4      R2 = 3^4  = 81
  POW R2,5,3      R2 = 5^3  = 125

Uwaga: 2^10 to 2 podniesione
do potegi 10, czyli 1024.
NIE mylić z XOR!

Potegowanie jest zmiennoprzecinkowe:
  POW R2,2,30   →  1.07374182E+09
  POW R2,2,0.5  →  1.41421356

══ PRZYKLAD: SPRAWDZANIE ══

  SET R0,100
  SQR R1,R0      R1 = 10
  MUL R2,R1,R1   R2 = 100 (z powrotem)
  POW R3,10,3    R3 = 1000

To jest test poprawnosci: pierwiastek
podniesiony do kwadratu daje oryginal

══ SIN, COS, PI — FALE (2026-10-10) ══

SIN(x)  sinus kata x (w radianach)
COS(x)  cosinus kata x
PI      ~3.14159 (stala)

SIN(0)      = 0
SIN(PI/2)   = 1   (cwierc okresu)
SIN(PI)     = 0
COS(0)      = 1

Jeden pelny okres = 2*PI (~6.28).
Fala: y = SIN(x) * wysokosc.

══ FLIP — ODSWIEZ EKRAN ══

FLIP wymusza odrysowanie ekranu
w tym miejscu. Gry rysujace przez
TP/LINE/BOX wolaja FLIP co klatke,
zeby obraz byl plyny:
  100 rysuj...
  110 FLIP
  120 WAIT 15
  130 GOTO 100

PRZYKLADY FAL (pokoj NAUKA):
  LOAD "FALA"      wykres sinusa
  LOAD "OSCYLOSKOP" petle Lissajous
6 Arytmetyka bitowa
Operacje BITOWE — na kazdym bicie
osobno. To NIE jest zwykla matematyka.

AND R2,R0,R1   iloczyn bitowy
  Wynik 1 tylko gdy OBA bity sa 1.
    1100 AND 1010 = 1000

OR  R2,R0,R1   suma bitowa
  Wynik 1 gdy KTORYKOLWIEK bit jest 1.
    1100 OR  1010 = 1110

XOR R2,R0,R1   roznica bitowa
  Wynik 1 gdy bity sie ROZNIA.
    1100 XOR 1010 = 0110

NOT R2,R0      negacja
  Zamienia kazde 0 na 1 i odwrotnie.

SHL R2,R0,3    przesun w LEWO o 3
  To mnozenie przez 2^3 = 8.
    0001 SHL 1 = 0010

SHR R2,R0,2    przesun w PRAWO o 2
  To dzielenie przez 4 (na bitach).

PO CO TO: sprawdzenie jednego pinu
to AND z maska — bez mnozenia,
bardzo szybko. Tak mowi sprzęt.

ROZNICA od ADD/MUL:
  SHL to przesuniecie BITOW
  MUL to mnozenie ARYTMETYCZNE
  Przy malych liczbach wynik ten sam,
  ale SHL dziala tez na bitach flagowych.
7 Grafika: rysowanie (CO, TP, LINE...)
CO n              ustaw KOLOR rysowania
  n = 0..15 (paleta jak w C64):
     0 czarny      1 bialy
     2 czerwony    3 cyan
     4 fiolet      5 zielony
     6 niebieski   7 zolty
     8-15 jasne wersje tych samych
  CO 1     lub   COLOR 12

TD x,y,"TEXT"     rysuj TEKST
  x = kolumna, y = wiersz ekranu
  TD 2,2,"CYBER27"

TP x,y,color      postaw PIKSEL
  x,y   = pozycja (piksele)
  TP 0,0,15   TP 20,10,12

LINIE I FIGURY (wspolrzedne w pikselach):
  LINE x1,y1,x2,y2    linia
  BOX x1,y1,x2,y2     prostokat (ramka)
  FILLRECT x1,y1,x2,y2 prostokat pelny
  CIRCLE x,y,r        okrag
  FILLCIRCLE x,y,r    okrag pelny
  przyklad:
    BOX 10,10,80,60

EKRAN GRAFIKI: 164 x 128 pikseli.
(0,0) = lewy gorny rog.
Grafike widac w POWIEKSZONYM
pokoju (ENTER), nie w matrycy 3x3.

── RYSUJ PETLA FOR (latwe!) ──

A) KROPKA W RZEDKU:
   10 CLS
   20 FOR R0 = 0 TO 100
   30 TP R0, 50, 15
   40 NEXT R0

B) LINIA POZIOMA:
   10 LINE 0,20,100,20

C) KWADRAT Z KROPEK:
   10 CLS
   20 FOR R0 = 0 TO 50
   30 TP R0, 10, 12
   40 TP R0, 60, 12
   50 NEXT R0

D) SCHODKI (schodek w dol):
   10 CLS
   20 FOR R0 = 0 TO 40 STEP 4
   30 BOX R0, R0, R0+8, R0+8
   40 NEXT R0

E) KOLKA W RZEDKU:
   10 CLS
   20 FOR R0 = 0 TO 8
   30 CIRCLE R0*18+9, 40, 8
   40 NEXT R0

F) KOLOR ZMIENIA SIE (co 10 krokow):
   10 CLS
   20 FOR R0 = 0 TO 100
   30 CO 2
   40 TP R0, 30, 2
   50 CO 5
   60 TP R0, 40, 5
   70 CO 7
   80 TP R0, 50, 7
   90 NEXT R0

JAK ZAPISAC: wpisz linie z numerami,
potem RUN. Grafike widac po RUN.
ESC przerywa rysowanie.
8 Monitor i sprite
MON              pokazuje MAPE 32x16
  To POMOCNICZY obszar pamieci
  (m_MonitorMap), a nie prawdziwy
  ekran. Sluzy do testow grafiki.
  Znaki na wydruku:
     '.' = pusty piksel
     '#' = zapisany piksel

SP slot,x,y,color   SPRITE (obiekt)
  slot  = 0..7 — ktory z 8 sprite'ow
  x,y   = pozycja w mapie
  color = kolor 0..15

  PRZYKLAD:
     SP 0,5,6,15   sprite 0 na (5,6)
     SP 1,10,8,7   sprite 1 na (10,8)

  Zapisywane w m_SpriteMap[].
  To PROSTY prototyp — gotowy do
  rozbudowy o ruch i kolizje.
  Na razie NIE rysuje sie na ekranie.
9 GPIO: GPO i GPI (realne)
GPO pin,value   WYJSCIE (zapisz stan)

  'pin' to numer GPIO albo NAZWA:
     17, 22, 4...      numer pinu
     LED, ACT         dioda aktywna
     TX, RX, UART     linie szeregowe
     USB, SD, RTC     kontrola sprzetu
     CPU, FAN, MON    status systemu

  'value' to 0 (wylacz) albo 1 (wlacz).

  PRZYKLAD:
     GPO 17,1     ustaw pin 17 na 1
     GPO LED,0    zgas diode

  ZMIANA 2026-10-10: GPO/GPI dotykaja
  TERAZ REALNYCH pinow Raspberry Pi!
  Dozwolone piny (bezpieczne):
     17 18 22 23 24 25 27 4
  (nie koliduja z UART/I2C/SPI)

GPI pin         WEJSCIE (odczytaj)
  Czyta REALNY stan pinu i zapisuje
  go do rejestru R0:
     GPI 17
     PRINT "PIN 17 = ", R0

GPMODE pin,in|out   kierunek pinu
  GPMODE 17,in    wejscie (pomiar)
  GPMODE 17,out   wyjscie (LED)
  UWAGA: przed podaniem napiecia na
  pin ustaw go jako WEJSCIE (in) —
  inaczej moze dojsc do zwarcia!
  Monitor na zywo: pokoj GPIO.

ACTLED v        dioda aktywna (skrot)
  ACTLED 1   zapal
  ACTLED 0   zgas
  ACTLED     tylko odczytaj
10 Petle, warunki, skoki
FOR R0 = 1 TO 5    PETLA — poczatek
  R0 = licznik (rejestr R0..R7)
  1  = wartosc poczatkowa
  5  = wartosc koncowa (wlacznie)
  Mozna dodac krok:
     FOR R0 = 0 TO 10 STEP 2

NEXT R0            PETLA — koniec
  Zwieksza R0 o krok i wraca do FOR,
  dopoki R0 <= wartosc koncowa.
  Bez R0 uzyje ostatniego FOR.

IF warunek THEN komenda
  operatory: >  <  =  >=  <=
  IF R0 > 0 THEN PRINT "OK"
  IF R0 = 5 THEN GOTO 100

GOTO numer         skok do linii
  GOTO 100 — idz do linii 100

GOSUB numer        podprogram
  Skok do linii, RETURN wraca.

KOMPLETNY PRZYKLAD — policz do 5:
  10 FOR R0 = 1 TO 5
  20 PRINT R0
  30 NEXT R0
  40 PRINT "KONIEC"
  50 RUN
11 Zapis i odczyt (karta SD)
SAVE "nazwa.bas"    zapisz na karte SD
LOAD "nazwa.bas"    wczytaj z karty

  Nazwa MUSI byc w cudzyslowie.
  Plik trafia do katalogu glownego
  karty (montowany jako SD:).

  UWAGA: stara komenda SAVE dziala
  na tablicy interpretera, a nie
  na buforze edytora!

  W EDYTORZE uzyj skrotow:
     Ctrl+S   zapisz caly bufor
     Ctrl+L   wczytaj do bufora
  Plik: SD:/BASIC.BAS lub EDITOR.BAS

DEL numer         usun linie programu
  DEL 10 — usun linie o numerze 10

RS232 (port szeregowy):
  XSEND "plik"  wyslij (XMODEM)
  XRECV "plik"  odbierz (XMODEM)
  Na PC: sx plik / rx plik (lrzsz)
12 Przyklady gotowych programow
PRZYKLAD 1 — wyswietl tekst:
  10 CO 12
  20 TD 2,2,"CYBER27"
  30 TP 10,10,15
  40 PRINT "GOTOWE"

PRZYKLAD 2 — GPIO:
  10 GPO 17,1
  20 GPI 17
  30 PRINT "GPIO 17"

PRZYKLAD 3 — petla:
  10 FOR R0 = 1 TO 5
  20 PRINT R0
  30 NEXT R0
  40 PRINT "DONE"

PRZYKLAD 4 — arytmetyka bitowa:
  10 LET R0 = 0xFF
  20 SET R1, 0x0F
  30 AND R2, R0, R1
  40 PRINT R2
13 Wskazowki i czeste bledy
SKROTY KOMEND:
  TD  = Text Draw   (tekst)
  TP  = Plot Pixel  (piksel)
  CO  = Color       (kolor)
  MON = Monitor map (podglad)
  SP  = Sprite      (obiekt)
  GPO = GPIO Out    (wyjscie)
  GPI = GPIO In     (wejscie)

JAK PISAC:
  Litery wychodza DUZE — klawiatura
  daje wielkie znaki, nie ma malych.

  Tekst ZAWSZE w cudzyslowie:
     PRINT "OK"      dobrze
     PRINT OK        zle!

  Liczby: 123 albo 0x7B (szesnastkowo)

CZESTE BLEDY:
  — brak cudzyslowu wokol tekstu
  — przecinek zamiast spacji
  — literowka w nazwie komendy
14 Status, debug i skroty
STATUS   stan rejestrow i okna
LIST     wypisz program z numerami
SAVE     zapisz program
LOAD     wczytaj program

── STRZALKI W POMOCY ──
UP/DOWN    ruch po spisie tresci
ENTER      wejdz do tematu
PgUp/PgDn  skok o 8 pozycji
ESC        wyjdz poziom wyzej
F1         zamknij pomoc

── SKROTY W EDYTORZE ──
Ctrl+S     zapisz bufor na SD
Ctrl+L     wczytaj bufor z SD
BACKSPACE  usun znak przed kursorem
ENTER      nastepna linia
ALT+1-9    skok do pokoju
ALT+STRZ   wybor pokoju w matrycy

── LOG UART ──
Komunikaty bledow BASIC-a ida
na port szeregowy 115200.
Podglad: screen /dev/ttyUSB0 115200

To ostatni temat pomocy.
15 MAPA PAMIECI: co gdzie lezy
MAPA PAMIECI (27-bit):
  Rejestry R0..R7 — liczby float
  Pamiec: 256 slow (POKE/PEEK)
  Bufor grafiki 164x128 (TP/LINE...)
  Sprite'y: 8 slotow (SP/MOVSPR)
  Teksty A$..Z$; ekran tekstowy
  Wszystko dostepne z BASIC-a
16 Dzwiek: SID i sekwencer
DZWIEK — 4 GLOSY (0..3)

PRZEBIEG: WAVE glos,w
  0 PULSE  1 SAW  2 TRIANGLE
  3 SINE   4 NOISE (werbel)

ZAGRAJ: PLAY glos,freq,w
  np. PLAY 0,440,0
KRACH: NOTE freq,dur(ms)
  np. NOTE 880,120

BARWA:
  PULSE glos,w  0..4095 (2048=50%)
  ENV glos,a,d,s,r  obwiednia ms
  PAN glos,p    0=lewo .. 15=prawo
  ARP glos,n1,n2  akord na 1 glosie

SEKWENCER:
  TRACK n1,n2,n3,n4[,dur]
  SONG (petla)   SONGCLR
STOP — zatrzymaj dzwiek

PRZYKLAD (bas+lead+werbel):
  SONGCLR
  WAVE 0,0
  PULSE 0,3000
  ENV 0,0,150,10,80
  PAN 0,7
  WAVE 1,0
  ENV 1,5,120,12,60
  WAVE 2,4
  ENV 2,0,0,15,15
  TRACK 110,220,0,200
  TRACK 110,277,0,200
  TRACK 110,330,0,200
  TRACK 110,220,0,200
  SONG
17 GRA - plan i etapy *
JAK NAPISAC GRE — ETAPAMI
==========================

Nie pisz calego programu od razu!
Robimy MALY krok i sprawdzamy.
Kazdy etap to gotowy program.

JAK URUCHOMIC: wpisz
   LOAD "GRA1"
   RUN
Albo: nacisnij F5 tutaj (pomoc
sama wczyta i uruchomi GRA1).

ETAP 1 — BOISKO (GRA1)
  Rysujemy tylko plansze:
   - gorna i dolna banda (FILLRECT)
   - srodkowa linia przerywana
  Nic sie jeszcze nie rusza.

ETAP 2 — PILKA (GRA2)
  Pilka odbija sie w pionie.
  Sekret animacji, powtarzaj:
    1. CLS            wyczysc
    2. policz nowa pozycje
    3. narysuj pilke
    4. FLIP + WAIT    pokaz i czekaj
    5. GOTO 1

ETAP 3 — ODBICIA (GRA3)
  Pilka lata po calym ekranie.
  Dodajemy ruch w X (lewo-prawo).
  Kierunek X w R2, kierunek Y w R3.
  Przy scianie: zmien kierunek na
  przeciwny (SET R2, -1 itd.).

ETAP 4 — RAKIETA (GRA4)
  Twoj slupek na dole ekranu.
  GORA/DOL przesuwaja go.
  Pilka odbija sie od rakiety:
    gdy dotknie -> SET kierunek X

ETAP 5 — PELNA GRA (GRA5)
  Dwie rakiety: TY i CPU.
  CPU goni pilke sam.
  Punkt gdy pilka minie rakte.
  Wynik na gorze ekranu.
  To zlozenie etapow 1-4!

RADA: gdy cos nie dziala —
cofnij sie o jeden etap i porownaj.
Kazdy etap DZIALA samodzielnie.

F5 = uruchom GRA1
(potem zmien na GRA2...GRA5 w kodzie)
18 GRA etap 1: boisko *
ETAP 1 — BOISKO  (GRA1)
==========================

Cel: tylko plansza gry.
Nic sie jeszcze nie rusza.

Co rysujemy:
  - gorna banda (FILLRECT)
  - dolna banda (FILLRECT)
  - srodkowa linia przerywana
    (petla FOR + STEP 8)

Kod (skrot):
  150 CLS
  170 CO 6
  180 FILLRECT 0,0,163,6
  200 FILLRECT 0,121,163,127
  230 FOR R0 = 0 TO 120 STEP 8
  240 FILLRECT 81,R0,82,R0+4
  250 NEXT R0

F5 = uruchom GRA1
Potem wroc tu i przejdz do
tematu 19 (etap 2).
19 GRA etap 2: pilka *
ETAP 2 — PILKA W RUCHU  (GRA2)
==========================

Cel: pilka odbija sie w pionie.

SEKRET ANIMACJI (powtarzaj w kolko):
  1. CLS              wyczysc ekran
  2. policz pozycje   R1 = R1 + R2
  3. narysuj pilke    FILLRECT
  4. FLIP             pokaz na ekranie
  5. WAIT 20          poczekaj 20 ms
  6. GOTO 1           powtorz

R1 = pozycja Y pilki
R2 = kierunek (+1 w dol, -1 w gore)

ODBICIE (bardzo wazne):
  340 IF R1 <= 8   THEN SET R2, 1
  360 IF R1 >= 119 THEN SET R2, -1
Gdy pilka dotknie bandy,
zmieniamy kierunek na przeciwny.

FLIP jest potrzebny, inaczej obraz
odswiezy sie skokami.

F5 = uruchom GRA2
20 GRA etap 3: odbicia *
ETAP 3 — ODBICIA 4 SCIAN  (GRA3)
==========================

Cel: pilka lata po CALYM ekranie.
Dodajemy ruch w X (lewo-prawo).

Teraz MAMY DWA kierunki:
  R2 = kierunek X (1=w prawo, -1=w lewo)
  R3 = kierunek Y (1=w dol,   -1=w gore)

Ruch:
  270 ADD R0, R0, R2     X
  280 ADD R1, R1, R3     Y

Odbicia (4 sciany):
  340 IF R0 <= 4   THEN SET R2, 1
  350 IF R0 >= 159 THEN SET R2, -1
  370 IF R1 <= 4   THEN SET R3, 1
  380 IF R1 >= 123 THEN SET R3, -1

F5 = uruchom GRA3
21 GRA etap 4-5: rakieta i gra *
ETAP 4-5 — RAKIETA I PELNA GRA
==========================

ETAP 4 (GRA4): Twoja rakieta.
  R4 = pozycja rakiety (lewa)
  GORA/DOL przesuwaja (GET R6).
  Odbicie od rakiety:
    gdy pilka dotknie slupka ->
    zmien kierunek X na przeciwny
  F5 = uruchom GRA4

ETAP 5 (GRA5): PELNA GRA.
  Dwie rakiety: TY i CPU.
  R4 = rakieta gracza (lewa)
  R5 = rakieta CPU (prawa)
  R6,R7 = wynik TY, CPU
  CPU goni pilke sam:
    IF R5 < R1 THEN ADD R5,R5,3
    IF R5 > R1 THEN SUB R5,R5,3
  Punkt gdy pilka minie rakte.
  To zlozenie etapow 1-4!

Aby uruchomic GRA5 (F5 startuje
GRA4), wpisz recznie:
  LOAD "GRA5"  i RUN

F5 = uruchom GRA4
22 GRA: WAZ (juz gotowy!) *
GRA: WAZ  (WAZ1 = glowa, WAZ2 = pelny)
==========================

Klasyk: waz je i rosnie.
  GORA/DOL/LEWO/PRAWO = ruch
  ESC = koniec

WAZ1 — tylko GLOWA (jeden kwadrat).
  Uczy CIEKLEJ ANIMACJI w jednym
  kierunku. Sciany zawijaja:
   IF R0 < 0 THEN SET R0, 160

WAZ2 — PELNY waz:
  * CIALO z wielu segmentow
    (tablice SX(), SY())
  * JEDZENIE (czerwony kwadrat)
  * zjedzone -> waz rosnie
  * wpadnie na siebie -> koniec

Sekret ruchu ciala: przesuwamy
segmenty od konca w strone glowy
(rura):
  640 FOR R7 = D(0)-1 TO 1 STEP -1
  650 SX(R7) = SX(R7-1)
  660 SY(R7) = SY(R7-1)
  670 NEXT R7

F5 = uruchom WAZ2
23 GRA: ARKANOID (klocki) *
GRA: ARKANOID  (ARKANOID)
==========================

Zbij wszystkie KLOCKI na gorze!
  LEWO/PRAWO = paletka
  ESC = koniec

Elementy gry:
  R0,R1 = pilka (X,Y)
  R2,R3 = kierunek pilki
  R4    = paletka (gracz, dol)
  KX(),KY(),KH() = klocki

Klocki to TABLICE — kazdy ma:
  pozycje X, Y i stan (jest/zbity)
  Gdy pilka trafi -> KH(R7) = 0
  i pilka odbija sie w dol.

Odbicie od paletki — klasyka:
  IF pilka na wysokosci paletki
  AND pilka nad paletka
  THEN SET R3, -2

F5 = uruchom ARKANOID
24 GRA: 2 ARMATE (2 graczy) *
GRA: 2 ARMATE  (ARMATA)
==========================

DWOCH graczy na zmiane!
  Cel: trafic w armate przeciwnika.

Sterowanie:
  G / D = KAT armaty (gora/dol)
  H / J = MOC strzalu
  ENTER = STRZEL!   ESC = koniec

Fizyka (uczy katow i wektorow!):
  kat w stopniach -> radiany:
    R8 = kat * PI / 180
  predkosc pozioma:  vx = moc*COS(kat)
  predkosc pionowa:  vy = moc*SIN(kat)
  grawitacja: kazda klatka
    vy = vy + 1  (pocisk opada)

Pocisk leci LUKIEM — im wieksza
moc, tym dalej poleci.
Trafienie = punkt. Potem druga
osoba strzela. Wynik na dole.

F5 = uruchom ARMATA
25 SYNTH: jak grac na syntezatorze
SYNTH — JAK GRAC
==========================

NAJWAZNIEJSZE: dzwiek wlacza sie
DOPIERO po pierwszej komendzie NOTE
lub PLAY. Bez tego jest CISZA!

KROK 1: wlacz dzwiek w BASIC:
   NOTE 440,300
   (440 Hz = dzwiek A, 300 ms)
Teraz na gorze pokoju SYNTH
zobaczysz: DZWIEK: ON

KROK 2: wejdz do pokoju SYNTH
(menu pokoi -> SYNTH -> ENTER)

KLAWISZE W POKOJU SYNTH:
  1 2 3 4        wybor GLOSU
  W              nastepny PRZEBIEG
   Z X C V B N M  nuty C D E F G A B
  ESC            wyjdz do menu pokoi

4 GLOSY — kazdy gra osobny dzwiek
naraz (jak 4 muzyki). Wybierz glos
cyfra, zmien mu przebieg klawiszem W.

Zobacz tez temat 26 (MUSIC/waveform)
i temat 16 (komendy dzwieku).
26 MUSIC: waveform (przebiegi)
MUSIC — WAVEFORM (przebiegi)
==========================

PRZEBIEG (waveform) = jaki KSZTALT
ma fala dzwieku. Inny ksztalt =
inna barwa (brzmienie).

5 przebiegow w CYBER27:
  0 PULSE     prostokat (jak SID)
  1 SAW       pila (ostry, brzeczy)
  2 TRIANGLE  trojkat (miekki)
  3 SINE      sinus (czysty)
  4 NOISE     szum (werbel, huk)

Jak zmienic: klawisz W w pokoju SYNTH
albo w BASIC:
  WAVE 0,3      glos 0 -> sinus

PULSE (prostokat) ma dodatkowo
PULSE WIDTH — szerokosc impulsu:
  PULSE 0,2048  (2048 = rowno 50%)

PO CO: kazdy instrument ma inny
przebieg — flet to sinus, trabka
to pila, perkusja to szum.
27 Kurs programowania od A do Z *
KURS PROGRAMOWANIA — PLAN
==========================

Cel: cala szkola programowania,
a nie tylko abc — 100 cwiczen,
aby po kursie poslugiwac sie
BASIC-iem biegle.

KURS1 (start) — wprowadzenie:
  1 Jak mysli komputer (0/1)
  2 Pierwszy PRINT
  3 Liczby i rejestry
  4 Dodawanie w BASIC-u

CALE MODULY KURSU:
  A Podstawy (PRINT, zmienne)
  B Arytmetyka i wyrazenia
  C Warunki IF...THEN
  D Petle FOR...NEXT
  E Tablice (DIM)
  F Teksty A$
  G Podprogramy GOSUB/RETURN
  H Grafika (TP, LINE, ...)
  I Dzwiek (NOTE, WAVE)
  J Pliki na SD (SAVE, LOAD)
  K Procedury i praktyka

F5 = uruchom KURS1 (start)
28 Margaret Hamilton i Apollo *
MARGARET HAMILTON (1936-)
==============================

PL: Kobieta, ktora NAPISALA
    oprogramowanie Apollo 11!
DE: Sie schrieb die Software
    fuer Apollo 11.

PL: Kierowala zespolami w MIT
    (Instrumentation Laboratory).
    To ona wymyslila slowo
    'software engineering'.
DE: Sie praegte den Begriff
    'Software Engineering'.

SLAWNE ZDJECIE 1969:
  stoi obok STOSU wydrukow kodu
  AGC — wyzszego od niej samej!
DE: Der Stapel Code war hoeher
    als sie selbst.

JEJ KOD URATOWAL MISJE:
  W trakcie lotu Apollo 11
  radar zle dzialal. Jej program
  SAM sie zrestartowal i odrzucil
  mniej wazne zadania.
  Ludzie wyladowali bezpiecznie.
DE: Ihr Code rettete die Mission.

KOMPUTER AGC (Apollo Guidance):
  - pamiec: 4 KB (!)
  - 2 MHz, 16 bitow
  - liczyl trajektorie na Ksiezyc

F5 = uruchom PRZYKLAD6
     (nawigacja Apollo w CYBER27!)
29 Alfabet Morse'a *
ALFABET MORSE'A
==============================

PL: MORSE = kropka (.) i kreska (-).
    Kazda litera to inny uklad.
DE: Morse: Punkt und Strich.

PL: kropka = KROTKI sygnal
    kreska = DLUGI (3x kropka)
    odstep miedzy literami = 3 kropki
    odstep miedzy slowami = 7 kropek

A  .-      N  -.
B  -...    O  ---
C  -.-.    P  .--.
D  -..     Q  --.-
E  .       R  .-.
F  ..-.    S  ...
G  --.     T  -
H  ....    U  ..-
I  ..      V  ...-
J  .---    W  .--
K  -.-     X  -..-
L  .-..    Y  -.--
M  --      Z  --..

CYFRY:
1 .----   5 .....
2 ..---   6 -....
3 ...--   7 --...
4 ....-   8 ---..
9 ----.   0 -----

SOS = ... --- ...  (ratunek!)

PL: MORSE + TWOJ SPRZET:
  - nadaj dzwiekiem (NOTE)
  - zobacz na OSCYLOSKOPIE
    (kropka = krotki impuls)
DE: mit Oszilloskop sichtbar!

F5 = uruchom MORSE_LEKCJA
30 Uklad Sloneczny: planety *
UKLAD SLONECZNY: PLANETY
==============================

8 planet, kazda ma swoja karte:
  odleglosc od Slonca, doba (obrot),
  rok (obieg), warunki na powierzchni
  i liczbe ksiezycow.

KOLEJNOSC od Slonca:
  1 MERKURY  57.9 mln km, rok 88 dni
  2 WENUS   108.2 mln km, +465 C
  3 ZIEMIA  149.6 mln km (nasz dom!)
  4 MARS    227.9 mln km, 2 ksiezyce
  5 JOWISZ  778.5 mln km, GAZ, 95 ks.
  6 SATURN  1434 mln km, pierscienie
  7 URAN    2871 mln km, lezy bokiem
  8 NEPTUN  4495 mln km, najdalej

SRODKI: 1 AU = 149.6 mln km
(odleglosc Ziemia-Slonce).

RODZAJE POWIERZCHNI:
  LAD   - skalista (Merkury, Wenus,
          Ziemia, Mars).
          Mozna wyladowac!
  GAZ   - Jowisz, Saturn (bez ladu).
  GAZ+LOD - Uran, Neptun (lodowe).

CIEKAWOSTKI:
  - Na Wenus DOBA > ROK (243 vs 225)
    i kreci sie WSTECZ.
  - Jowisz obraca sie w 10 godzin,
    a rok trwa 12 lat.
  - Saturn ma 146 ksiezycow!
  - Uran obraca sie 'na lezaco'.

F5 = uruchom APO_PLANETY (quiz)
31 APOLLO 11: symulator misji *
APOLLO 11: SYMULATOR MISJI
==============================

PL: to NIE quiz - to GRA.
    Jestes pilotem statku. Cel:
    doleciec na Ksiezyc (384 tys.
    km) i bezpiecznie wrocic.
DE: Simulator, kein Quiz!

JAK GRAC:
  L / P  = zmien OKNO (widok)
  G / D  = wybierz AKCJE
  ENTER  = wykonaj akcje
  S      = zapisz stan misji
  L      = wczytaj stan misji
  ESC    = powrot do menu

WSKAZNIKI NA PULPICIE:
  WYSOKOSC, PREDKOSC, odleglosc
  do celu, PALIWO, TLEN, PRAD.

ZDARZENIA LOSOWE (AWARIE!):
  - wyciek paliwa
  - utrata tlenu
  - utrata pradu
  - brak lacznosci z Ziemia
  Jak sie pojawi ALARM - dzialaj
  (wybierz NAPRAW AWARIE)!
  Zresetuj po awarii albo misja
  sie skonczy zle.

Zapis jest TRWALY (karta SD),
wiec mozna przerwac i wrocic.

F5 = uruchom APO_MISJA (gra)
32 APOLLO: fizyka lotu *
APOLLO: FIZYKA LOTU
==============================

PL: prawa fizyki, ktore rzadza
    lotem na Ksiezyc.
DE: Physik des Fluges.

1) PREDKOSC:  v = s : t
   predkosc = droga : czas
   Np. 300 km w 2 h -> 150 km/h

2) PALIWO:  paliwo = zuzycie * czas
   Silnik pali X na godzine, lot
   trwa Y godzin -> X * Y paliwa.

3) PRZYSPIESZENIE: a = dv : t
   jak szybko rosnie predkosc.

4) CIEZAR: grawitacja roznych cial
   (Ziemia=1, Ksiezyc=6 -> 6x lzej).

5) GRAWITACJA: predkosc ucieczki
   minimalna predkosc, by opuscic
   cialo (pokonac grawitacje):
     Ksiezyc 2 km/s
     Mars    5 km/s
     Ziemia 11 km/s
     Jowisz 60 km/s
   Jowisz jest wielki i ciezki,
   wiec ucieczka jest trudna!

MIX = losowe zadanie (1-5).
Punkty licza sie wspolnie (PUNKTY).

ZADANIA W MISJI: podczas lotu
pojawiaja sie te same zadania
(oblicz predkosc, czas, paliwo),
by leciec dalej. Nauka w grze!

F5 = uruchom APO_FIZYKA
33 Wlasne pokoje: POKOJ *
WLASNE POKOJE (komendy)
==============================

PL: mozesz dodac WLASNY pokoj
    i zdecydowac, jaki program
    sie w nim uruchomi.
DE: Eigene Raeume anlegen.

JAK ZROBIC WLASNY POKOJ:
  1. Napisz program (w pokoju
     BASIC) i zapisz go:
       SAVE "MOJPROG"
     (utworzy MOJPROG.BAS)
  2. Dodaj pokoj z tym programem:
       POKOJ "MOJA GRA","MOJPROG"
  3. Zapisz liste pokoi na karte:
       ZAPISZPOKOJE

Nowy pokoj pojawi sie w MENU
POKOI i uruchomi twoj program.
Przetrwa RESTART (plik POKOJE.TXT
na karcie SD).

POZOSTALE KOMENDY:
  POKOJE          lista pokoi
  WCZYTAJPOKOJE   wczytaj z karty
  POKOJ "N"       pokoj bez programu

NAWIGACJA: L/P przewija pokoje,
ENTER wchodzi, ESC wraca.

F5 = uruchom przyklad
34 Nazwane zmienne (POINTS = 10)
NAZWANE ZMIENNE
================================

Wyobraz sobie PUDEŁKA z napisem.
Do kazdego wkladasz liczbe.
Nazwa mowi, CO sie w nim trzyma.

Zamiast pamietac 'R3 to punkty',
piszesz po prostu: POINTS.

JAK UZYC:
  POINTS = 10      wloz 10 do POINTS
  PRINT POINTS     pokaz (10)
  POINTS = POINTS + 5   zwieksz (15)

MOZESZ LICZYC:
  ZYCIE = 3
  ZYCIE = ZYCIE - 1     (2)
  WYNIK = ZYCIE * 10    (20)

NAZWA moze miec litery, cyfry
i '_' (podkreslnik). Do 15 znakow.
Wielkie/male litery bez roznicy:
  punkty i PUNKTY to to samo.

REJESTRY R0..R7 DALEJ DZIALAJA!
Mozesz uzywac obu naraz:
  R0 = 100
  SUMA = R0 + POINTS

PRZYKLAD - mini gra:
  10 ZYCIE = 3
  20 ZYCIE = ZYCIE - 1
  30 PRINT "Zycie: ", ZYCIE
  40 IF ZYCIE = 0 THEN GOTO 60
  50 GOTO 20
  60 PRINT "Koniec gry"

F5 = uruchom TESTVAR (demo)
35 Typy i rekordy (TYPE) *
TYPY I REKORDY (TYPE)
================================

Zamiast 5 osobnych zmiennych na
JEDNA rzecz - zrob JEDNO pudelko
z kilkoma przegrodkami.

To jest REKORD. Nazwy przegrodek
to POLA.

KROK 1 - opisujemy, co ma pocisk:
  TYPE Pocisk
  X
  Y
  VX
  END TYPE

KROK 2 - robimy tablice pociskow:
  DIM p(4) AS Pocisk
  (5 pociskow: p(0)..p(4))

KROK 3 - uzywamy (kropka '.'):
  p(0).X = 100
  p(0).VX = -3
  p(0).X = p(0).X + p(0).VX

WYOBRAZ SOBIE:
  p(0) to POCISK numer 0.
  p(0).X to jego X (pozycja).
  p(1).X to X pocisku numer 1.

Po co? W grze masz 100 pociskow,
kazdy z wlasnym X, Y, VX. Jeden
TYP opisuje je WSZYSTKIE.

PRZYKLAD - pociski leca:
  TYPE Pocisk
  X
  VX
  END TYPE
  DIM p(3) AS Pocisk
  FOR R0 = 0 TO 3
  p(R0).X = 50
  p(R0).VX = -2
  NEXT R0
  REM teraz kazdy pocisk ma X i VX

WAZNE:
  - 'TYPE ... END TYPE' musi byc
    PRZED 'DIM ... AS ...'
  - zaczynaj pola DUZYMI literami
    (to tylko zwyczaj, dziala tez male)

F5 = uruchom TESTREC (demo)
36 Procedury: SUB i FUNCTION *
PROCEDURY: SUB i FUNCTION
================================

Co jesli ten sam kawalek kodu
powtarzasz wiele razy? Zamiast
kopiowac — zrob PROCEDURE.

SUB to zestaw komend z nazwa.
Wolasz go slowem CALL.

JAK ZROBIC SUB:
  SUB Rysuj(x, y)
  PRINT "Rysuje w ", x, y
  END SUB

JAK WOLAC:
  CALL Rysuj(10, 20)
  CALL Rysuj(30, 40)

x i y to PARAMETRY. W srodku SUB
sa to zmienne lokalne (maja swoje
wartosci tylko tam).

FUNCTION — jak SUB, ale ZWRACA
wynik. Wynik odczytasz w WYNIK:

  FUNCTION Podwoj(n)
  RETURN n * 2
  END FUNCTION

  CALL Podwoj(21)
  PRINT WYNIK         (42)

WAZNE:
  - definicja MUSI miec nawias:
    SUB Foo(a) — nie 'SUB Foo'
  - CALL poza definicja, w programie
  - WYNIK jest TYLKO do czytania
  - max 8 procedur, 4 parametry
  - 'SUB R0,R0,2' (bez nawiasu) to
    ODEJMOWANIE, nie procedura!

PRZYKLAD — kwadrat z procedury:
  SUB Kwadrat(x, y, w)
  LINE x,y,x+w,y
  LINE x+w,y,x+w,y+w
  LINE x+w,y+w,x,y+w
  LINE x,y+w,x,y
  END SUB
  CALL Kwadrat(10, 10, 40)

F5 = uruchom TESTSUB (demo)
37 Etykiety: GOTO Start *
ETYKIETY (GOTO Start)
================================

Dotad skakalo sie do NUMERU linii:
  GOTO 500
To trudne, bo musisz pamietac numery.

Teraz mozesz nadac miejscu NAZWE.
Piszesz nazwe i dwukropek:

  PETLA:
  PRINT "raz"
  GOTO PETLA

Nazwa etykiety to jak zakladka
w ksiazce — GOTO do niej wraca.

JAK TO DZIALA:
  Start:      <- etykieta (z ':')
  ... kod ...
  GOTO Start  <- skok do etykiety

MOZNA GOSUB (z powrotem):
  GOSUB Powitanie
  ... dalej ...
  Powitanie:
  PRINT "czesc"
  RETURN

ZASADY:
  - etykieta stoi na POCZATKU linii
    (po numerze), konczy sie ':'
  - nazwa: litery, cyfry, '_'
  - wielkie/male litery bez roznicy
  - STARE GOTO 500 DZIALA DALEJ!

PRZYKLAD — licznik do 5:
  10 N = 0
  20 PETLA:
  30 N = N + 1
  40 PRINT N
  50 IF N < 5 THEN GOTO PETLA
  60 PRINT "koniec"

F5 = uruchom TESTLBL (demo)
38 PCM sample (dzwiek jak Amiga) *
PCM SAMPLE (dzwiek jak Amiga)
================================

Syntezator robi dzwieki z nut.
SAMPLE to NAGRANIE — prawdziwy
dzwiek: perkusja, gitara, glos,
strzal. Jak w Amidze!

Plik sample to surowe dane
.RAW (8-bit, jak Amiga).

KROK 1 - wczytaj (SLOAD):
  SLOAD 0, "TEST.RAW"
  (slot 0..3, plik z karty SD)

KROK 2 - zagraj (SPLAY):
  SPLAY 0, 0, 1.0
  kanal(0..3), slot, pitch

PITCH = wysokosc (jak Paula):
  1.0 = normalnie
  2.0 = oktAwe WYZEJ
  0.5 = oktAwe NIZEJ

STOP:
  SSTOP 0      zatrzymaj kanal 0

MOZNA MIESZAC z synteza!
  - 4 kanaly RAZEM
  - np. kanal 0 = perkusja (sample)
    kanal 1-2 = melodia (nut)

PRZYKLAD - perkusja + nuta:
  SLOAD 0, "BUM.RAW"
  SPLAY 0, 0, 1.0
  PLAY 1, 440, 0

WSKAZOWKA: sample 8000 Hz gra
w swoim tempie przy pitch 1.0.

F5 = uruchom TESTSMP (demo)
39 PAINT 3D: edytor tekstur/postaci *
PAINT 3D - EDYTOR GRAFIKI

Rysujesz obrazki, ktore potem
wczytuje silnik 3D i gry.

TAB = nastepny tryb:
  0 tekstura 64x64 (sciany)
  1 postac   32x32 x 8 klatek
  2 bron     64x32 x 2 klatki
  3 BIB      32x32 (biblioteka)

N = nastepna klatka
G = siatka 8x8 (pomoc do rysowania)

KLAWISZE (tylko klawiatura!):
  STRZALKI = ruch kursora
  SPACJA   = postaw / zakoncz
  A / D    = kolor - / +
  1..5     = narzedzie

NARZEDZIA (1..5):
  1 piksel   2 linia
  3 prostokat 4 wypelnienie
  5 guma

LINIA / PROSTOKAT:
  1. SPACJA = zapamietaj start
  strzalki  = przesun koniec
  2. SPACJA = narysuj

POZOSTALE:
  TAB = tryb  N = klatka
  G = siatka  U = undo
  S = zapis  L = wczytaj
  ESC = koniec

JAK UZYC W GRZE 3D:
  tekstura: WTLD 1,"PAINT.RAW"
  postac:   WSDEF 1,"PAINT.RAW"
  bron:     WGUN "PAINT.RAW"

Plik zawsze nazywa sie PAINT.RAW
(skopiuj na PC i zmien nazwe).

F5 = uruchom PAINT3D
40 NOWE 2026: 64 kolory, duzy bufor *
NOWE W CYBER27 (2026-10-23)

64 KOLORY (bylo 32)
  CO 0..63   np. CO 32 = czarny

  Nowe grupy:
   32-34 czernie    35-37 szarosci
   38-39 ciemne     40-42 trawa
   43-45 niebo      46-48 skora
   49-51 drewno     52-54 kamien
   55-56 zloto      57-59 woda
   60-61 ogien      62-63 magia

BUFOR 320x240 (bylo 164x128)
  - 4x wiecej pikseli
  - na 640x480 skala x2 = PELNY ekran
  - na 1920x1080 skala x4

WCOMPAT 2   stare gry (0..163)
WCOMPAT 1   nowe gry (0..319)
  Domyslnie 2 — gry dzialaja.
  W nowej grze wpisz WCOMPAT 1.

SCRINFO  info o ekranie:
  R0,R1 = szer,wys ekranu
  R2    = skala bufora
  R3,R4 = offset X,Y
  R5,R6 = rozmiar bufora

FOR po NAZWIE (bylo tylko R0..R7)
  FOR I = 1 TO 10   dziala!
  NEXT I

WISOPLAYERFRAME n  klatka gracza
  -1 = powrot do auto-animacji

WISOATTACK zasieg  atak w ISO
  R0 = slot trafionego (0=brak)
  R1 = odleglosc

WARSTWY.TXT — baza warstw mapy
  NAZWA RENDER WYS KOLIZJA TEKSTURA [SPRITE=n]
  render: podloga/bryla/prog/drzewo/sprite/brak
  Dodanie warstwy = dopisanie linii.

BLIT sx,sy,w,h,dx,dy
  Kopiuj prostokat w buforze.
  Scrolling: BLIT 2,0,318,239,0,0
  -> przesuwa obraz o 2 px w lewo.

BLITT sx,sy,w,h,dx,dy
  Jak BLIT, ale piksele 0 sa
  PRZEZROCZYSTE (tlo przebija).
  To sprite przesuwany po tle!

WSETDIR "katalog"
  Katalog zasobow dla WTLD/WSDEF:
    WSETDIR "GRA/GRAFIKA/"
    WTLD 1, "T01.RAW"
  WSETDIR "" = katalog glowny.

WISOLAYER x,y
  Info o warstwie kafla:
  R0=nr R1=render R2=wys R3=mapa

Stan projektu

CYBER27 · Raspberry Pi 3 · Circle · 2026