Bare-metal система для Raspberry Pi 3 — без Linux, с собственным интерпретатором BASIC, графическим рабочим столом и 3D-движком.
| Процессор | ARM Cortex-A53, 4× 1,2 ГГц (Raspberry Pi 3) |
| ОС | нет — bare metal (Circle) |
| Экран | буфер 320×240, масштаб до 640×480 / 1920×1080 |
| Цвета | 255 (палитра, как Amiga 1200) |
| Язык | собственный интерпретатор BASIC (R0–R7, именованные, SUB/FUNCTION, TYPE) |
| Спрайты | 16 слотов × 32×32, 8 кадров анимации, масштаб ×1..×4 |
| 3D-движок | raycasting (Wolf), туннель, изометрия (стиль Diablo) |
| Карты | до 320×320 тайлов, база слоёв (WARSTWY.TXT) |
| Аудио | 4 голоса ADSR + PCM-сэмплы (SLOAD/SPLAY) |
| Память | ядро 64 МБ, BSS ~3,6 МБ |

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 | Спрайт
Помимо игр в системе есть полный учебный пакет: математика, физика, химия, география, астрономия — от школьника до студента. Всё написано на BASIC.

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 | Синтезатор
CYBER27 BASIC (27-БИТ)
ПРОГРАММА — это список строк.
В каждой строке есть НОМЕР и СОДЕРЖИМОЕ:
10 PRINT "OK"
^^ ^^^^^^^^^^
| +-- содержимое (что делать)
+----- номер (порядок)
НОМЕРА определяют ПОРЯДОК ВЫПОЛНЕНИЯ,
а не порядок ввода. Поэтому можно вставить
строку 15 между 10 и 20 — она выполнится
в нужном месте.
РЕГИСТРЫ: R0, R1 ... R7
8 ячеек для чисел. Самые быстрые.
ПАМЯТЬ: 256 слов (адреса 0x00..0xFF)
Больше регистров, но медленнее.
Доступ через POKE и PEEK.
ЧИСЛА: с плавающей точкой (как в C64,
но точнее). Работают точка и минус:
PRINT 1/2 -> 0.5
PRINT 10/3 -> 3.33333333
PRINT -5 -> -5
ПАМЯТЬ (POKE/PEEK) и битовые операции
остаются 27-битными (0x07FFFFFF).
АВТОНУМЕРАЦИЯ: в редакторе новая строка
сама получает номер (10, 20, 30...).
Можно ввести номер и вручную.PRINT "ТЕКСТ" выводит текст Кавычки ОБЯЗАТЕЛЬНЫ для текста! PRINT "ПРИВЕТ" PRINT R3 выводит СОДЕРЖИМОЕ регистра — БЕЗ кавычек PRINT "A", R0 несколько элементов ',' = пробел, ';' = без пробела ';' в конце = без перевода строки ? сокращение для PRINT Один пробел (без запятой) разделяет текст и число — как в C64.
РЕГИСТРЫ R0..R7 — 8 ячеек для чисел.
Это САМЫЕ БЫСТРЫЕ переменные.
R0 = 5 присвоить значение
R1 = R0 * 2 вычислить
PRINT R1 вывести (10)
Регистры там, где важна скорость.
ПАМЯТЬ (POKE/PEEK):
POKE 0x10, R3 запись в память
0x10 = адрес (слот 16)
R3 = значение
В памяти 256 слов (0x00..0xFF).
PEEK 0x10 чтение из памяти
Результат на ЭКРАНЕ. В программе
используйте PEEK(x) как функцию.
DIM A(20) МАССИВ A (индексы 0..20)
A(i) = 7 записать элемент
PRINT A(i) прочитать элемент
Буквы A..Z, индекс макс. 63.
INPUT R0 ввод числа от пользователя
с клавиатуры.ADD R0, R1, R2 R0 = R1 + R2 SUB R0, R1, R2 R0 = R1 - R2 MUL R0, R1, R2 R0 = R1 * R2 DIV R0, R1, R2 R0 = R1 / R2 ВАЖНО: РЕЗУЛЬТАТ должен попасть в РЕГИСТР (не в массив)! В выражениях работают и обычные операторы: R0 = 3 * 4 + 1 -> 13 R1 = (2 + 3) * 4 -> 20 R2 = 10 / 4 -> 2.5 Приоритет: ( ) затем * / затем + - Отбрасывание дробной части: нет TRUNC/INT — используйте & (битовая маска).
SIN(x) синус (x в радианах) COS(x) косинус TAN(x) тангенс ATN(x) арктангенс SQR(x) квадратный корень ABS(x) модуль SGN(x) знак (-1, 0, 1) ГРАДУСЫ -> РАДИАНЫ: rad = deg * PI / 180 ОКРУЖНОСТЬ по углам: x = cx + r * COS(a) y = cy + r * SIN(a) PI — встроенная константа: PRINT PI -> 3.14159265... СТЕПЕНИ: SQR(x) — это корень. Для степеней умножайте: x*x*x вместо x^3.
БИТОВЫЕ ОПЕРАЦИИ — по каждому биту отдельно.
Это НЕ обычная математика.
AND R2,R0,R1 побитовое И
Результат 1 только когда ОБА бита = 1.
1100 AND 1010 = 1000
OR R2,R0,R1 побитовое ИЛИ
Результат 1 когда ЛЮБОЙ бит = 1.
1100 OR 1010 = 1110
XOR R2,R0,R1 побитовое исключающее ИЛИ
Результат 1 когда биты РАЗЛИЧАЮТСЯ.
1100 XOR 1010 = 0110
NOT R2,R0 отрицание
Меняет каждый 0 на 1 и наоборот.
SHL R2,R0,3 сдвиг ВЛЕВО
Это умножение на 2^3 = 8.
0001 SHL 1 = 0010
SHR R2,R0,2 сдвиг ВПРАВО
Это деление на 4 (по битам).
ЗАЧЕМ: проверить пин — это
AND с маской — без умножения,
очень быстро. Так работает железо.
ОТЛИЧИЕ от ADD/MUL:
SHL — это сдвиг, а не арифметика.CO n установить ЦВЕТ
n = 0..255 (палитра, C64 + 191 новый):
0 чёрный 1 белый
2 красный 3 циан
4 фиолетовый 5 зелёный
6 синий 7 жёлтый
8-15 яркие варианты
CO 1 или COLOR 12
TD x,y,"ТЕКСТ" нарисовать ТЕКСТ
x = столбец, y = строка
TD 2,2,"CYBER27"
TP x,y,color поставить ПИКСЕЛЬ
x,y = позиция (пиксели)
TP 0,0,15 TP 20,10,12
ЛИНИИ И ФИГУРЫ (координаты в пикселях):
LINE x1,y1,x2,y2 линия
BOX x1,y1,x2,y2 прямоугольник (рамка)
FILLRECT x1,y1,x2,y2 залитый прямоугольник
CIRCLE x,y,r круг
FILLCIRCLE x,y,r залитый круг
пример:
BOX 10,10,80,60
BLIT sx,sy,w,h,dx,dy копировать прямоугольник
BLITT sx,sy,w,h,dx,dy как BLIT, но 0 = прозрачный
БУФЕР ГРАФИКИ: 320 x 240 пикселей.
На экране увеличен 2x.MON показывает карту 32x16
Это ВСПОМОГАТЕЛЬНАЯ область памяти
(m_MonitorMap), не экран.
Для тестирования графики.
Символы в выводе:
'.' = пустой пиксель
'#' = установленный пиксель
SP slot,x,y,color СПРАЙТ (объект)
slot = 0..7 — какой из 8 спрайтов
x,y = позиция в карте
color = цвет 0..255
ПРИМЕР:
SP 0,5,6,15 спрайт 0 в (5,6)
SP 1,10,8,7 спрайт 1 в (10,8)
Хранится в m_SpriteMap[].
Простой прототип — готов к
движению и коллизиям.
НЕ рисуется на экране.GPO pin,value ВЫХОД (записать состояние)
'pin' — номер GPIO ИЛИ ИМЯ:
17, 22, 4... номер пина
LED, ACT активный светодиод
TX, RX, UART последовательные линии
USB, SD, RTC управление железом
CPU, FAN, MON состояние системы
'value' — 0 (выкл) или 1 (вкл).
ПРИМЕР:
GPO 17,1 установить пин 17 в 1
GPO LED,0 погасить диод
ДОЗВОЛЕННЫЕ пины (безопасные):
17 18 22 23 24 25 27 4
(не конфликтуют с UART/I2C/SPI)
GPI pin ВХОД (прочитать)
Читает РЕАЛЬНОЕ состояние в R0:
GPI 17
PRINT "PIN 17 = ", R0
GPMODE pin,in|out направлениеFOR R0 = 1 TO 5 ЦИКЛ — начало
R0 = счётчик (регистр R0..R7 ИЛИ имя)
1 = начальное значение
5 = конечное значение (включительно)
С шагом:
FOR R0 = 0 TO 10 STEP 2
Также по имени: FOR I = 1 TO 10
NEXT R0 ЦИКЛ — конец
Прибавляет шаг к R0 и возвращается
к FOR, пока R0 <= конечного значения.
Без R0 — используется последний FOR.
IF условие THEN команда
операторы: > < = >= <=
IF R0 > 0 THEN PRINT "OK"
IF R0 = 5 THEN GOTO 100
GOTO номер переход к строке
GOSUB номер подпрограмма (RETURN)
ПОЛНЫЙ ПРИМЕР — счёт до 5:
10 FOR R0 = 1 TO 5
20 PRINT R0
30 NEXT R0
40 PRINT "КОНЕЦ"SAVE "имя.bas" сохранить на SD-карту
LOAD "имя.bas" загрузить с карты
Имя ОБЯЗАТЕЛЬНО в кавычках.
Файл попадает в корневой каталог
карты (монтируется как SD:).
ВНИМАНИЕ: старая команда SAVE работает
с таблицей интерпретатора, а НЕ с
буфером редактора!
В РЕДАКТОРЕ используйте сочетания:
Ctrl+S сохранить весь буфер
Ctrl+L загрузить в буфер
Файл: SD:/BASIC.BAS или EDITOR.BAS
DEL номер удалить строку программы
DEL 10 — удаляет строку 10
RS232 (последовательный порт):
XSEND "файл" отправить (XMODEM)
XRECV "файл" принять (XMODEM)
На ПК: sx файл / rx файл (lrzsz)ПРИМЕР 1 — вывод текста: 10 CO 12 20 TD 2,2,"CYBER27" 30 TP 10,10,15 40 PRINT "ГОТОВО" ПРИМЕР 2 — GPIO: 10 GPO 17,1 20 GPI 17 30 PRINT "GPIO 17" ПРИМЕР 3 — цикл: 10 FOR R0 = 1 TO 5 20 PRINT R0 30 NEXT R0 40 PRINT "DONE" ПРИМЕР 4 — битовая арифметика: 10 LET R0 = 0xFF 20 SET R1, 0x0F 30 AND R2, R0, R1 40 PRINT R2
СОКРАЩЕНИЯ КОМАНД:
TD = Text Draw (текст)
TP = Plot Pixel (пиксель)
CO = Color (цвет)
MON = Monitor map (просмотр)
SP = Sprite (объект)
GPO = GPIO Out (выход)
GPI = GPIO In (вход)
КАК ПИСАТЬ:
Буквы выводятся ЗАГЛАВНЫМИ — клавиатура
даёт заглавные, строчных нет.
Текст ВСЕГДА в кавычках:
PRINT "OK" правильно
PRINT OK ошибка!
Числа: 123 или 0x7B (шестнадцатерично)
ЧАСТЫЕ ОШИБКИ:
— нет кавычек вокруг текста
— запятая вместо пробела
— опечатка в имени команды
— FOR с переменной вместо регистра
(теперь можно: FOR I = ... и FOR R0 = ...)STATUS состояние регистров и окон LIST вывести программу с номерами SAVE сохранить программу LOAD загрузить программу ── СТРЕЛКИ В СПРАВКЕ ── UP/DOWN по оглавлению ENTER открыть тему PgUp/PgDn переход на 8 позиций ESC на уровень выше F1 закрыть справку ── СОЧЕТАНИЯ В РЕДАКТОРЕ ── Ctrl+S сохранить буфер на SD Ctrl+L загрузить буфер с SD BACKSPACE удалить символ перед курсором ENTER следующая строка ALT+1-9 переход в комнату ALT+СТРЕЛКА выбор комнаты в матрице ── ЖУРНАЛ UART ── Сообщения об ошибках BASIC идут на последовательный порт 115200. Просмотр: screen /dev/ttyUSB0 115200
КАРТА ПАМЯТИ (27-бит): Регистры R0..R7 — числа float Память: 256 слов (POKE/PEEK) Буфер графики 320x240 (TP/LINE...) Спрайты: 16 слотов (WSDEF) Строки A$..Z$; текстовый экран Всё доступно из BASIC
ЗВУК — 4 ГОЛОСА (0..3) ФОРМА ВОЛНЫ: WAVE голос,w 0 PULSE 1 SAW 2 TRIANGLE 3 SINE 4 NOISE (барабан) ИГРАТЬ: PLAY голос,freq,w напр. PLAY 0,440,0 НОТА: NOTE freq,длит(ms) напр. NOTE 880,120 ТЕМБР: PULSE голос,w 0..4095 (2048=50%) ENV голос,a,d,s,r огибающая ms PAN голос,p 0=влево .. 15=вправо ARP голос,n1,n2 аккорд на 1 голосе СЕКВЕНСОР: TRACK n1,n2,n3,n4[,dur] SONG (цикл) SONGCLR STOP — остановить звук ПРИМЕР (бас+лид+барабан): 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
КАК НАПИСАТЬ ИГРУ — ПО ЭТАПАМ
Не пишите всю программу сразу!
Делаем МАЛЕНЬКИЙ шаг и проверяем.
Каждый этап — готовая программа.
ЗАПУСК:
LOAD "GRA1"
RUN
Или: нажмите здесь F5 (справка
сама загрузит и запустит GRA1).
ЭТАП 1 — ПОЛЕ (GRA1)
Рисуем только площадку:
- верхний и нижний борт (FILLRECT)
- пунктирная средняя линия
Пока ничего не двигается.
ЭТАП 2 — МЯЧ (GRA2)
Мяч отскакивает по вертикали.
Секрет анимации, повторяйте:
1. CLS очистить
2. вычислить новую позицию
3. нарисовать мяч
4. FLIP + WAIT показать и ждать
5. GOTO 1
ЭТАП 3 — ОТСКОКИ (GRA3)
Мяч летает по всему экрану.
Добавляем движение по X (влево-вправо).
Направление X в R2, направление Y в R3.
ЭТАП 4 — РАКЕТКА (GRA4)
Ваша планка внизу экрана.
UP/DOWN двигают её.
Мяч отскакивает от ракетки.
ЭТАП 5 — ПОЛНАЯ ИГРА (GRA5)
Две ракетки: ВЫ и CPU.
Очко, когда мяч пролетает мимо.
Это соединение этапов 1-4!
СОВЕТ: если что-то не работает —
вернитесь на этап назад и сравните.
Каждый этап РАБОТАЕТ сам по себе.
F5 = запуск GRA1ЭТАП 1 — ПОЛЕ (GRA1)
Цель: только игровая площадка.
Пока ничего не двигается.
Что рисуем:
- верхний борт (FILLRECT)
- нижний борт (FILLRECT)
- пунктирная средняя линия
(цикл FOR + STEP 8)
Код (кратко):
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 = запуск GRA1
Потом вернитесь сюда и переходите
к теме 19 (этап 2).ЭТАП 2 — МЯЧ В ДВИЖЕНИИ (GRA2) Цель: мяч отскакивает по вертикали. СЕКРЕТ АНИМАЦИИ (повторяйте): 1. CLS очистить экран 2. вычислить позицию R1 = R1 + R2 3. нарисовать мяч FILLRECT 4. FLIP показать на экране 5. WAIT 20 подождать 20 мс 6. GOTO 1 повторить R1 = позиция Y мяча R2 = направление (+1 вниз, -1 вверх) ОТСКОК (очень важно): 340 IF R1 <= 8 THEN SET R2, 1 360 IF R1 >= 119 THEN SET R2, -1 Когда мяч касается борта, меняем направление. FLIP нужен, иначе изображение скачет. F5 = запуск GRA2
ЭТАП 3 — ОТСКОКИ ОТ 4 СТЕН (GRA3) Цель: мяч летает по ВСЕМУ экрану. Добавляем движение по X (влево-вправо). Теперь у нас ДВА направления: R2 = направление X (1=вправо, -1=влево) R3 = направление Y (1=вниз, -1=вверх) Движение: 270 ADD R0, R0, R2 X 280 ADD R1, R1, R3 Y Отскоки (4 стены): 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 = запуск GRA3
ЭТАП 4-5 — РАКЕТКА И ПОЛНАЯ ИГРА
ЭТАП 4 (GRA4): ваша ракетка.
R4 = позиция ракетки (слева)
ВВЕРХ/ВНИЗ двигают её (GET R6).
Отскок от ракетки:
когда мяч касается планки ->
изменить направление X
F5 = запуск GRA4
ЭТАП 5 (GRA5): ПОЛНАЯ ИГРА.
Две ракетки: ВЫ и CPU.
R4 = ракетка игрока (слева)
R5 = ракетка CPU (справа)
R6,R7 = счёт ВЫ, CPU
CPU сам гонится за мячом:
IF R5 < R1 THEN ADD R5,R5,3
IF R5 > R1 THEN SUB R5,R5,3
Очко, когда мяч пролетает мимо.
Это соединение этапов 1-4!
Чтобы запустить GRA5 (F5 запускает GRA4):
LOAD "GRA5"
RUNИГРА: ЗМЕЙКА (WAZ1 = голова, WAZ2 = целая)
Классика: змейка ест и растёт.
ВВЕРХ/ВНИЗ/ВЛЕВО/ВПРАВО = движение
ESC = конец
WAZ1 — только ГОЛОВА (один квадрат).
Учит плавной анимации в одном
направлении. Стены заворачивают:
IF R0 < 0 THEN SET R0, 160
WAZ2 — целая змейка:
* ТЕЛО из многих сегментов
(массивы SX(), SY())
* ЕДА (красный квадрат)
* съела -> змейка растёт
* врезалась в себя -> конец
Секрет движения тела: сдвигаем
сегменты от хвоста к голове
(труба):
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 = запуск WAZ1ИГРА: ARKANOID (ARKANOID) Разбейте все КИРПИЧИ сверху! ВЛЕВО/ВПРАВО = платформа ESC = конец Элементы игры: R0,R1 = мяч (X,Y) R2,R3 = направление мяча R4 = платформа (игрок, внизу) KX(),KY(),KH() = кирпичи Кирпичи — это МАССИВЫ, у каждого: позиция X, Y и состояние (есть/разбит) Если мяч попал -> KH(R7) = 0 и мяч отскакивает вниз. Отскок от платформы — классика: IF мяч на высоте платформы AND мяч над платформой THEN SET R3, -2 F5 = запуск ARKANOID
ИГРА: 2 ПУШКИ (ARMATA)
ДВА игрока по очереди!
Цель: попасть в пушку противника.
Управление:
G / D = УГОЛ пушки (вверх/вниз)
H / J = СИЛА выстрела
ENTER = ОГОНЬ! ESC = конец
Физика (учит углам и векторам!):
угол в градусах -> радианы:
R8 = угол * PI / 180
горизонтальная скорость: vx = сила*COS(a)
вертикальная скорость: vy = сила*SIN(a)
гравитация: каждый кадр
vy = vy + 1 (снаряд падает)
Снаряд летит по ДУГЕ — чем больше
сила, тем дальше.
Попадание = очко. Потом стреляет
другой. Счёт внизу.
F5 = запуск ARMATASYNTH — КАК ИГРАТЬ ВАЖНО: звук включается только после первой команды NOTE или PLAY. Без этого — ТИШИНА! ШАГ 1: включить звук в BASIC: NOTE 440,300 (440 Hz = нота A, 300 мс) Теперь наверху комнаты SYNTH видно: DZWIEK: ON ШАГ 2: открыть комнату SYNTH (меню комнат -> SYNTH -> ENTER) КЛАВИШИ В КОМНАТЕ SYNTH: 1 2 3 4 выбор ГОЛОСА W следующая ФОРМА ВОЛНЫ Z X C V B N M ноты C D E F G A B ESC выход в меню комнат 4 ГОЛОСА — каждый играет свой звук одновременно (как 4 музыки). Голос выбирается цифрой, форма волны меняется клавишей W.
MUSIC — ФОРМА ВОЛНЫ ФОРМА ВОЛНЫ определяет ФОРМУ звуковой волны. Другая форма = другой тембр (другое звучание). 5 форм волны в CYBER27: 0 PULSE прямоугольная (как SID) 1 SAW пила (резкая, жужжит) 2 TRIANGLE треугольная (мягкая) 3 SINE синус (чистая) 4 NOISE шум (барабан, гром) Как изменить: клавиша W в комнате SYNTH или в BASIC: WAVE 0,3 голос 0 -> синус PULSE (прямоугольная) имеет ещё PULSE WIDTH — ширину импульса: PULSE 0,2048 (2048 = ровно 50%) ЗАЧЕМ: у каждого инструмента своя форма волны — флейта это синус, труба это пила, ударные это шум.
КУРС ПРОГРАММИРОВАНИЯ — ПЛАН Цель: целая школа программирования, а не только азбука — 100 упражнений, чтобы после курса свободно владеть BASIC. KURS1 (старт) — введение: 1 Как думает компьютер (0/1) 2 Первый PRINT 3 Числа и регистры 4 Сложение в BASIC ВСЕ МОДУЛИ КУРСА: A Основы (PRINT, переменные) B Арифметика и выражения C Условия IF...THEN D Циклы FOR...NEXT E Массивы (DIM) F Строки A$ G Подпрограммы GOSUB/RETURN H Графика (TP, LINE, ...) I Звук (NOTE, WAVE, ...) J Игры (анимация, коллизии) F5 = запуск KURS1
МАРГАРЕТ ХЭМИЛТОН (1936-) Она НАПИСАЛА программное обеспечение для Apollo 11! Руководила командами в MIT (Instrumentation Laboratory). Она ввела термин "software engineering". ЗНАМЕНИТОЕ ФОТО 1969: Она стоит рядом со СТОПКОЙ распечаток кода AGC — выше её роста! ЕЁ КОД СПАС МИССИЮ: Во время полёта радар вызвал тревогу (1201, 1202). Её код расставил приоритеты и проигнорировал лишнее. Посадка удалась. УРОК ДЛЯ НАС: — программное обеспечение — инженерия — ошибки стоят жизней (или миссий) — хорошие приоритеты спасают всё
АЗБУКА МОРЗЕ MORSE = точка (.) и тире (-). У каждой буквы своя последовательность. Точка = КОРОТКИЙ сигнал Тире = ДЛИННЫЙ (3× точка) Пауза между буквами = 3 точки Пауза между словами = 7 точек 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 --..
СОЛНЕЧНАЯ СИСТЕМА: ПЛАНЕТЫ 8 планет, у каждой своя карточка: расстояние от Солнца, сутки (вращение), год (обращение), условия на поверхности и число спутников. ПОРЯДОК от Солнца: 1 МЕРКУРИЙ 57,9 млн км, год 88 дней 2 ВЕНЕРА 108,2 млн км, +465 °C 3 ЗЕМЛЯ 149,6 млн км (наш дом!) 4 МАРС 227,9 млн км, 2 луны 5 ЮПИТЕР 778,5 млн км, ГАЗ, 95 лун 6 САТУРН 1434 млн км, кольца 7 УРАН 2871 млн км, лежит на боку 8 НЕПТУН 4495 млн км, самый дальний ЕДИНИЦЫ: 1 а.е. = 149,6 млн км (а.е. = астрономическая единица)
APOLLO 11: СИМУЛЯТОР МИССИИ Это НЕ викторина — это ИГРА. Вы пилот. Цель: долететь до Луны (384 000 км) и вернуться живым. УПРАВЛЕНИЕ: L / P = смена ОКНА (вид) G / D = выбор ДЕЙСТВИЯ ENTER = выполнить действие S = сохранить миссию L = загрузить миссию ESC = назад в меню ПОКАЗАНИЯ НА ПУЛЬТЕ: ВЫСОТА, СКОРОСТЬ, расстояние до цели, ТОПЛИВО, КИСЛОРОД, ПИТАНИЕ. СЛУЧАЙНЫЕ СОБЫТИЯ (АВАРИИ!): - утечка топлива - отказ электроники - потеря кислорода
APOLLO: ФИЗИКА ПОЛЁТА Физические законы, управляющие полётом к Луне. 1) СКОРОСТЬ: v = s / t скорость = путь / время напр. 300 км за 2 ч -> 150 км/ч 2) ТОПЛИВО: топливо = расход * время Двигатель тратит X в час, полёт длится Y часов -> X * Y. 3) УСКОРЕНИЕ: a = dv / t как быстро растёт скорость. 4) ВЕС: гравитация разных тел (Земля = 1, Луна = 1/6 -> в 6 раз легче). 5) ВТОРАЯ КОСМИЧЕСКАЯ: минимальная скорость, чтобы покинуть тело (Земля: 11,2 км/с).
СВОИ КОМНАТЫ (команды)
Вы можете добавить СВОЮ комнату и решить,
какая программа в ней запускается.
КАК СДЕЛАТЬ:
1. Напишите программу (в комнате BASIC)
и сохраните её:
SAVE "MYPROG"
(создаст MYPROG.BAS)
2. Добавьте комнату с этой программой:
POKOJ "MY GAME","MYPROG"
3. Сохраните список комнат на карту:
ZAPISZPOKOJE
Новая комната появится в МЕНЮ КОМНАТ и
запустит вашу программу. Она переживёт
ПЕРЕЗАГРУЗКУ (файл POKOJE.TXT на карте).ИМЕНОВАННЫЕ ПЕРЕМЕННЫЕ Представьте КОРОБКИ с надписью. В каждую кладёте число. Имя говорит, ЧТО внутри. Вместо того чтобы помнить "R3 это очки", вы просто пишете: POINTS. КАК ИСПОЛЬЗОВАТЬ: POINTS = 10 положить 10 в POINTS PRINT POINTS показать (10) POINTS = POINTS + 5 увеличить (15) ВЫЧИСЛЕНИЯ: LIFE = 3 LIFE = LIFE - 1 (2) RESULT = LIFE * 10 (20) ИМЯ может содержать буквы, цифры и '_'. До 15 символов. Регистр не важен.
ТИПЫ И ЗАПИСИ (TYPE) Вместо 5 отдельных переменных для ОДНОЙ вещи — сделайте ОДНУ коробку с ячейками. Это ЗАПИСЬ. Имена ячеек — ПОЛЯ. ШАГ 1 — описать, что есть у снаряда: TYPE Bullet X Y VX END TYPE ШАГ 2 — массив снарядов: DIM p(4) AS Bullet (5 снарядов: p(0)..p(4)) ШАГ 3 — использовать (точка '.'): p(0).X = 100 p(0).VX = -3 p(0).X = p(0).X + p(0).VX ПРЕИМУЩЕСТВО: все данные объекта вместе — как объявление класса.
ПРОЦЕДУРЫ: SUB и FUNCTION Что если вы повторяете один и тот же код много раз? Вместо копирования — сделайте ПРОЦЕДУРУ. SUB — это группа команд с именем. Вы вызываете её через CALL. КАК СОЗДАТЬ SUB: SUB Draw(x, y) PRINT "Рисую в ", x, y END SUB ВЫЗОВ: CALL Draw(10, 20) CALL Draw(30, 40) x и y — ПАРАМЕТРЫ. Внутри SUB они локальные (значения существуют только там). FUNCTION — как SUB, но ВОЗВРАЩАЕТ значение (в WYNIK): FUNCTION Square(a) WYNIK = a * a END FUNCTION R0 = Square(5) -> 25
МЕТКИ (GOTO Start) До сих пор переход был к НОМЕРУ СТРОКИ: GOTO 500 Это неудобно — нужно помнить номера. Теперь можно дать месту ИМЯ. Пишете имя и двоеточие: LOOP: PRINT "раз" GOTO LOOP Метка — как закладка в книге — GOTO возвращается к ней. КАК ЭТО РАБОТАЕТ: Start: <- метка (с ':') ... код ... GOTO Start <- переход к метке МОЖНО GOSUB (с возвратом): GOSUB Greet ... Greet: PRINT "Привет" RETURN
PCM-СЭМПЛЫ (звук как Amiga) Синтезатор делает звуки из нот. СЭМПЛ — это ЗАПИСЬ: настоящий звук — барабаны, гитара, голос, выстрел. Как на Amiga! Файл сэмпла — это сырые данные .RAW (8-бит, как Amiga). ШАГ 1 — загрузить (SLOAD): SLOAD 0, "TEST.RAW" (слот 0..3, файл с SD-карты) ШАГ 2 — проиграть (SPLAY): SPLAY 0, 0, 1.0 канал(0..3), слот, pitch PITCH = высота тона (как Paula): 1.0 = нормально 2.0 = на октаву ВЫШЕ 0.5 = на октаву НИЖЕ
PAINT 3D — РЕДАКТОР ГРАФИКИ Вы рисуете картинки, которые потом загружает 3D-движок и игры. TAB = следующий режим: 0 текстура 64x64 (стены) 1 персонаж 32x32 x 8 кадров 2 оружие 64x32 x 2 кадра 3 BIB 32x32 (библиотека) N = следующий кадр G = сетка 8x8 (помощь) КЛАВИШИ (только клавиатура!): СТРЕЛКИ = движение курсора ПРОБЕЛ = поставить / завершить A / D = цвет - / + 1..5 = инструмент ИНСТРУМЕНТЫ (1..5): 1 пиксель 2 линия 3 прямоугольник 4 круг 5 заливка S = сохранить (PAINT.RAW) L = загрузить ИСПОЛЬЗОВАНИЕ В ИГРЕ: текстура: WTLD 1,"PAINT.RAW" персонаж: WSDEF 1,"PAINT.RAW" оружие: WGUN "PAINT.RAW" F5 = запуск PAINT3D
НОВОЕ В CYBER27 (2026) 255 ЦВЕТОВ (было 32) CO 0..254 напр. CO 32 = чистый чёрный Новые группы: 64-79 градации серого (16) 80-95 красные (16) 96-111 зелёные (16) 112-127 синие (16) 128-143 золото/коричневый (16) 144-159 фиолетовые (16) 160-175 бирюзовые (16) 176-191 кожа (16) 192-207 камень (16) 208-223 лес (16) 224-239 небо (16) 240-254 огонь (15) БУФЕР 320x240 (было 164x128) - в 4 раза больше пикселей - на 640x480 масштаб x2 = ПОЛНЫЙ экран - на 1920x1080 масштаб x4 WCOMPAT 2 старые игры (0..163) WCOMPAT 1 новые игры (0..319) По умолчанию 2 — старые игры работают. В новой игре: WCOMPAT 1. SCRINFO информация об экране: R0,R1 = ширина,высота R2 = масштаб буфера R3,R4 = смещение X,Y R5,R6 = размер буфера FOR с ИМЕНЕМ (раньше только R0..R7) FOR I = 1 TO 10 работает! NEXT I BLIT sx,sy,w,h,dx,dy Копировать прямоугольник в буфере. Скроллинг: BLIT 2,0,318,239,0,0 BLITT sx,sy,w,h,dx,dy Как BLIT, но пиксели 0 — ПРОЗРАЧНЫЕ (фон остаётся). WSETDIR "каталог" Каталог ресурсов для WTLD/WSDEF WSETDIR "" = корневой каталог WARSTWY.TXT — база слоёв NAZWA RENDER WYSOKOSC KOLIZJA TEKSTURA [SPRITE=n] render: podloga/bryla/prog/drzewo/sprite/brak
CYBER27 · Raspberry Pi 3 · Circle · 2026