Проект
Retro-40 - фантазийного Форт ретро-компьютера (программа) 256x192, 16цветов, звук с некоторым количеством игр и демо.
Сделан на базисе Ficl Форта (c SDL2) . Вдохновлённый Lambda/8, Jupiter ACE.
Собрался и запустился в Linux, команды ввода слов Форта работают
При запуске собранного проекта под 32 Linux для правильного отображения вводимых символов с клавиатуры
необходимо подправить файл font.fs в следующих строчках (т.к. изначально font таблица хранения данных расчитана под 64-бит ячейку памяти при сборке под Linux64, если не изменять в этом моменте Си код api,c)
: @font ( c -- u ) CELLS 2 * font + @ ;
: !font ( udg c -- ) CELLS 2 * font + ! ;
Snake игра изначально загружается,
а к примеру загрузить Форт Tetris программу и запустить
include tetris.fs
tetris
Звуки в Тетрис игре довольно брутально воспринимаются.
P.S. В представленных играх и демо проекта, есть и рейтрейсинг по типу игры Вольфeнштейн и какая то стрелялка и бродилка по типу Марио и ещё некоторые демо и программы.
Шрифт 6x4 конечно это хардкорный выбор в этом проекте.
но этому есть и логическое объяснение. Раньше в Форт широко использовалось хранение программы в виде блоков (размером 1024 байт) в непрерывном пространстве памяти и сбрасываемых или загружаемых с диска
(т.е. это и был вариант хранения данных без файловой системы). По номеру блока можно было считывать как отдельный блок так и их последовательность. Для поддержки блоковой памяти даже был слой определённых слов и оставшийся отчасти и с принятием стандарта Forth94 ( где добавили работу с файлами в обычном их "Си" понимании). Так вот 1024 = 64 * 16 где 64 - это допустимое количество символов строки для размещения,
а 16 - соответственно строк в блоке данных.
т.е. выбрав шрифт 6х4 автор проекта, возможно, предполагал, что 256/4 = 64, а 192/6= 32 что по "ширине" как раз соответствует размеру блока, а 32 - в два раза больше его "высоты" (т.е. возможность для отображения сразу двух 1024-х байт стандартных Форт блоков)
В некоторых Форт системах до сих пор можно встретить файлы с .scr расширением как бы обозначающих, что в них то как раз и хранится программа в формате 1024-х байт кратности блоков.
И соответственно есть простые утилиты на Форт для конвертации их в текст и обратно по тексту в блоки.
Фонт вероятно может быть выбран и другой для вывода текста т.к. само окно программы большого размера при запуске, т.е. к примеру уложить символ шрифта в 8x8 матрицу.
Проект, вероятно, собирается и под Windows, но это не проверял.
Сохранение образа созданной игры - по идее должнa быть стандартная возможность для сохранения и запуска их как автономного приложения т.к. используется полноценная Форт система.
Сам Ficl достаточно зрелая Форт система и с включением, в частности, какой то объектной системы и применялся в загрузчиках ОС FreeBSD.
коммиты в проект в диапазоне 2018 - 2019 годов.
P.P.S. Сообщение с другого форума по реализации 3D бродилки для Retro-40
бродилка портировалась:
http://totalvacuum.ru/wolf3d.fsЕе надо скопировать в папку retro-40, запустить ./retro40 и ввести
include wolf3d.fs
wolf3d
Переделок было не очень много (в основном циклы и логические операции)... Попутно выяснилось, что pick в retro-40 - о, чудо! - работает неправильно, из-за этого конвертер из моего putpixel в штатный p! мне все нервы попортил...
Безусловно, можно было бы сделать один rot вместо 2-х pick-ов и 2-х drop-ов, но пусть так останется...
...
и скомпилировал саму бродилку под win32, но работает и в winxp/win10, а также в ubuntu+wine, весит аж 6K, но можно и меньше, если порядок в коде навести
http://totalvacuum.ru/tiny3dgl.zipУправление кнопками awd
Рисуем через opengl: кадры попиксельно формируем в массиве, а затем скармливаем массив в opengl через glDrawPixels. Чем-то похоже на забивание гвоздей электронным микроскопом, но главное, что работает...
Чтобы оценить частоту кадров, после каждой отрисовки сцены делаю декремент цвета пола, таким образом цвета постоянно бегают в цикле от 255 до 0. На стационарном компьютере с win7 и на ноутбуке с win10 в районе 50fps получается для разрешения 512x384, а если поставить 256x176, то полный цикл по цветам в районе секунды занимает, т.е. примерно 256fps. Даже на крохотном и неторопливом sony vayo p-19 с winxp примерно 5fps@512x384 и 25fps@256x176 получается...
Причем вся сцена (~200K точек) вычисляется на чистом форте, из asm там только базовые примитивы и прокладки для win. Да и в скомпилированном exe-шнике из 6K примерно 2K занимают импорт и прочая виндовая шелуха... Т.е. довольно-таки шустро и компактно получается.