PDA

Просмотр полной версии : [ZX48] Спрайтики?



SaintTurnip
05.05.2018, 04:25
Помните, были мега-бейсик, лазер-бейсик и еще какой-то монстр для создания игр.

Они даровали могучие возможности, взамен требуя лишь одного: мириться с чудовищной, раздутой кодовой базой, которая грузится по полгода. Довольно высокая цена за возможность двигать анимированные фигурки.

Сегодня разбирался в работе каналов и подумал, как здорово, можно сделать спрайтовый или музыкальный движок, в который принтами гнать команды через кастомный канал.

Ну ладно, фиг с ними, с каналами.

Никто не знает готового решения, чтобы:
- музыка играла по прерываниям
- спрайты двигались и анимировались по прерываниям
- возможность управлять этим всем из бейсика (poke, peek, usr)
- объем в пределах пары килобайт

Oleg N. Cher
05.05.2018, 08:58
Я знаю такое решение. Это среда ZXDev и язык Оберон. Или же при соотв. опыте и терпении компиляторы z88dk и SDCC. Разумеется, я буду вести речь про кросс-средства разработки.

В ZXDev есть библиотеки Laser и Laser2. Они даруют могучие возможности, но разобраны на отдельные подпрограммы, что способствует гораздо меньшему коду, чем весь пакет Laser Basic. К тому же, это чистая компиляция в нативный машинный код. Laser это полный пакет, хотя и не всё, строго говоря, там работает в точности как в оригинальном Laser Basic (отличиия всё равно есть). Laser2 это моя попытка выкатить оптимизированный по размеру и скорости и совместимый с Laser пакет графических процедур. Однако, там реализован не полный набор из Laser, а только часть.

В ZXDev можно сделать так, чтобы музыка играла по прерываниям. См. примеры IM2.Mod, TestPT3IM2.Mod и TestSnd.Mod, Кроме того, там даже есть кооперативная многозадачность. См. примеры TestTasks.Mod и MoveBalls.Mod

Нет никакой сложности сделать спрайты, чтобы двигались и анимировались по прерываниям. См DemoSpr.Mod, DemoSpr2.Mod, DemoTiles.Mod, Laser2Demo.Mod, MoveSpr.Mod и MoveSpr2.Mod

Также есть аналоги Бейсика (POKE, PEEK, PORTIN, PORTOUT), вместо USR - встроенный ассемблер и возможность писать свои пакеты процедур на Обероне, Си или ассемблере (см. пример AsmTest.Mod). Библиотека Basic, реализующая возможности Спектрум-бейсика.

Объём не то что в пределах пары килобайт, а вообще сотни байт.

Плата за это - изучение паскалеподобного языка Оберон, тонкостей среды ZXDev и выслушивание форумных злопыхателей типа Шынни, которые принципиально не признают таких средств, умиляясь старинному интерпретатору Бейсика.

Shiny
05.05.2018, 09:17
Плата за это - изучение паскалеподобного языка Оберон, тонкостей среды ZXDev и выслушивание форумных злопыхателей типа Шынни,

иди локти покусай, гений непризнанный.

Оберон - дерьмо, ассемблер наше всё!

Kakos_nonos
05.05.2018, 13:43
Можно еще на си писать на движке Churrera, или на AGD
Много игр написано таким образом

ZX_NOVOSIB
05.05.2018, 14:18
Много игр написано таким образом
Пожалуй даже слишком много ))

SaintTurnip
05.05.2018, 14:22
Про ZXDev не знал. Выглядит серьезно.

Но моя цель - добавить анимации и музыки в Диктатора и еще пару подобных.

- - - Добавлено - - -

Churrera?

https://images-na.ssl-images-amazon.com/images/I/41rXjBz1fsL.jpg

ZX_NOVOSIB
05.05.2018, 14:38
Но моя цель - добавить анимации и музыки в Диктатора и еще пару подобных.
Проще их тада на асме переписать :) Но это не точно.

SaintTurnip
05.05.2018, 16:26
Это лишит их невзначайного флёра аутентичности.

Oleg N. Cher
05.05.2018, 17:10
Но моя цель - добавить анимации и музыки в Диктатора и еще пару подобных.Всё равно можно сделать на ZXDev. И вызывать из Бейсика по USR, засылая параметры через POKE. То есть аналогично SuperCode.

DenisGrachev
05.05.2018, 18:11
- музыка играла по прерываниям
- объем в пределах пары килобайт

только сам плеер музыки это уже пара килобайт, а ещё и музыка сама %)
а так я помнится начинал свои бейсиковые игры так апгрейдить, но у тебя мало вводной инфы, каких размеров спрайтики тебе нужны, как их двигать (пиксельно-знакоместно) и.т.п

SaintTurnip
05.05.2018, 18:46
Всё равно можно сделать на ZXDev. И вызывать из Бейсика по USR, засылая параметры через POKE. То есть аналогично SuperCode.

Можно конечно, но 1) изучить еще одну спецификацию и 2) написать на этом программу

Написать на асме менее трудозатратно. Ради двух фигулек изучать целую экосистему?

(за слово supercode спасибо :) )

- - - Добавлено - - -

DenisGrachev, Данные - ноты и картинки - отдельно, конечно.

Как я вижу

Музыка
- ноты кодируются одним байтом ppooonnn
--- pp - четыре длительности
--- ooo - восемь октав
--- nnn - восемь нот
--- нота ноль нулевой октавы это пауза
- POKE начальный адрес
- POKE конечный адрес
- POKE пауза/играть до конца/играть циклически
- POKE/PEEK адрес текущей ноты (причем можно например ограничить длительность мелодии 256 нотами, тогда удобно переключать отдельные мелодии и контролировать прогресс - всего один PEEK)

UPD:
- Музыку можно хранить в строковой переменной и передавать плееру имя переменной (формат нот должен умещаться в аски SPACE, Aa-Zz0-9)
- управление пауза/играть до конца/играть циклом - через адреса USR

Со спрайтами сложнее, а их ведь еще и несколько на экране. Инициализация:
- POKE начальный адрес
- POKE высота
- POKE ширина
- POKE количество кадров анимации (скорость пусть будет фикс)

Работа:
- POKE/PEEK положение на экране
- POKE начальный кадр
- POKE конечный кадр анимации
- POKE пауза/анимировать циклически/анимировать до конца и остановить
- POKE/PEEK номер фрейма текущего блока анимации

Там правда еще маска нужна. Может без нее?

Бука
05.05.2018, 19:16
Со спрайтами сложнее, а их ведь еще и несколько на экране. Инициализация:
- POKE начальный адрес
- POKE высота
- POKE ширина
- POKE количество кадров анимации

Все нужное есть в великолепной серии из 4х книг - Step-By-StepProgrammingZXSpectrum

В первой части про чистый бейсик, но дальше куча процедур, причем без РОКЕ а через DEF FN(x,y...z)=USR adr.

Ссылки ниже. Требования к знанию английского минимальны, знание ассемблера вообще не требуется. Рассчитано как раз на лентяев типа нас, которые не хотят учить асм.

https://computerarchive.org/files/comp/books/ZX%20spectrum/Step-By-StepProgrammingZXSpectrum-BookOne.pdf
https://computerarchive.org/files/comp/books/ZX%20spectrum/Step-By-StepProgrammingZXSpectrum-BookTwo.pdf
https://computerarchive.org/files/comp/books/ZX%20spectrum/Step-By-StepProg-e60ec9ea41ccba7456eef581494fe848.pdf
https://computerarchive.org/files/comp/books/ZX%20spectrum/Step-By-StepProg-a5c4822d2b269e700f516686a85b8c1b.pdf

Shiny
05.05.2018, 19:44
а через USR разве нельзя передавать параметры?

Бука
05.05.2018, 19:55
а через USR разве нельзя передавать параметры?

Только недавно, емнип перед новым годом эту тему обсуждали. В спектрум-бейсике имеется удобная система передачи переменных в асмпрограмму через FN с кучей нужных параметров. Но она никак не была документирована в мануалах к спеку до самого конца производства, в литературе про неё упоминания встречаются к концу 83го емнип.

А иначе только через РОКЕ, замедляя бейсик. Обратно можно передать содержимое HL если вызывать через LET A = USR.

Просто через USR ничего передать нельзя, она тупо вызывает код на исполнение.

Oleg N. Cher
05.05.2018, 20:33
Не пойму я этих плясок вокруг Бейсика. Зачем хранить ноты в бейсиковой переменной? Какие в этом плюсы? Храните в машкоде. Зачем передавать параметры через FN? Не делайте из Бейсика культ, господа. Асм так уж асм. Бейсика по минимуму. Тем более, как я понимаю, eugeniusz владеет.

Бука
05.05.2018, 20:40
Не делайте из Бейсика культ, господа. Асм так уж асм. Бейсика по минимуму.

Асм в текущем возрасте учить сложно и лениво, а то что выучил в 90е уже забыл. Зато код советских ПМК почему-то помню. ;)

Для тем про асм есть отдельные темы, не мешайте нам таким убогим общаться...

Oleg N. Cher
05.05.2018, 20:42
eugeniusz, Boriel's Basic (https://boriel.com/en/software/the-zx-basic-compiler) видели? И компилит в натив, и Бейсик, даже получше, структурный. И ПЗУ менять не надо для подсветки синтаксиса) Мож ещё какие плюхи есть.

- - - Добавлено - - -

Бука, я всё же понял, что топикстартер стартонул темку не для того чтобы ему асм предлагали. Этого Шынни не понял. Ну бывает, не стоит ждать многого от... мгм... некоторых)

Посему предлагаю свою помощь в кодировании по подробным спецификациям. Только не на Бейсике.

SfS
05.05.2018, 20:51
блин. ну вы и рыбку съесть хотите и любви откусить :)

Старо как мир: или быстрая и компактная программа, но при этом она долго пишется и оптимизируется на чем-то низкоуровневом. или быстро написанная на чём-то высокоуровневом программа, но тогда уж на расходы памяти и скорость забейте:)

Чаще выбирается компромисс: Программа на чем-то высокоуровневом, но со вставками ассемблера, например. На спектруме оно так удобнее всего. Например, сложные структуры данных описывать на С куда удобнее, чем на асме. Почему бы не использовать? Или логику работы общую, если она не требует скорости, но сложна.

Как дети) Хорошо, быстро и дёшево бывает только в сказках:)

SaintTurnip
05.05.2018, 20:57
Зачем хранить ноты в бейсиковой переменной? Какие в этом плюсы?

Наглядно хранить и легко изменять.


Не пойму я этих плясок вокруг Бейсика ... Не делайте из Бейсика культ, господа.

Я слышал, в глубинах интернета есть целые форумы для любителей мертвых языков, древних видеоигр и устаревших компьютеров :)

creator
05.05.2018, 21:11
Обратно можно передать содержимое HL если вызывать через LET A = USR.
BC

SaintTurnip
05.05.2018, 21:15
eugeniusz, Boriel's Basic (https://boriel.com/en/software/the-zx-basic-compiler) видели? И компилит в натив, и Бейсик, даже получше, структурный. И ПЗУ менять не надо для подсветки синтаксиса) Мож ещё какие плюхи есть.

Я пришел сюда жевать жвачку и чесать детские воспоминания. Но жвачка у меня закончилась :)

А так-то все одно, тащемта, что бориэль изучать, что оберон - причем оберон выглядит интереснее с профессиональной точки зрения.


Посему предлагаю свою помощь в кодировании по подробным спецификациям. Только не на Бейсике.

Спасибо, интересное предложение.

Oleg N. Cher
05.05.2018, 21:28
Но зато Бориэль даёт прекрасную ностальгическую основу. :-)

Надеюсь, музыкальный плеер писать не планируется? Предлагаю взять готовый.


Наглядно хранить и легко изменять.Фактически я предлагаю то же самое, что Вы пытаетесь реализовать - обернуть машкод в что-то более привычное и высокоуровневое, только более правильным, как мне кажется, способом. Потому что лезть в ПЗУ чтобы раскрасить синтаксис, облагораживать ПЗУ-шный Бейсик дополнительными плюшками, расширить интерпретатор доп. командами - это одно. Другое - иметь эту раскраску вне Спектрума, передавать параметры (притом нагляднее в разы) в структурном языке, не париться с адресами и POKE и т.д.


Я слышал, в глубинах интернета есть целые форумы для любителей мертвых языков, древних видеоигр и устаревших компьютеров :)Ну что же, жвачка и детские воспоминания это у всех так)

SaintTurnip
05.05.2018, 21:52
Фактически я предлагаю то же самое, что Вы пытаетесь реализовать - обернуть машкод в что-то более привычное и высокоуровневое, только более правильным, как мне кажется, способом. Потому что лезть в ПЗУ чтобы раскрасить синтаксис, облагораживать ПЗУ-шный Бейсик дополнительными плюшками, расширить интерпретатор доп. командами - это одно. Другое - иметь эту раскраску вне Спектрума, передавать параметры (притом нагляднее в разы) в структурном языке, не париться с адресами и POKE и т.д.

Право же, не называйте меня с большой буквы, мы не Николай Вторый.

Принципиально вы правы: иметь функции в коде, разрабатывать в комфортной IDE, рисовать на планшете - это правильнее. Но чувство не то. Нету, знаете, тех мурашек, когда холодильник включается, а ты не сохранился, и только полоски по экрану вжих.


Надеюсь, музыкальный плеер писать не планируется? Предлагаю взять готовый.

Це який?

Oleg N. Cher
05.05.2018, 22:36
Когда-то мне попадался релоцируемый плеер PT2 и PT3. Сейчас не могу найти. Но можно начать с этой ссылки:

https://www.z88dk.org/forum/viewtopic.php?id=9634

- - - Добавлено - - -

Ага, так вот же он:

https://bulba.untergrund.net/progr_e.htm (PTxTools.7z)

SaintTurnip
05.05.2018, 22:58
Это же голимый музпроцессор! Нет-нет, только бипер, только хардкор :)

Вспомнил, что биперный WHAM компилил музыку в код и играл по прерываниям. Наверняка же там проигрыватель можно высрести?

Oleg N. Cher
05.05.2018, 23:06
Можно.

https://github.com/Oleg-N-Cher/XDev/blob/master/ZXDev/Lib/C/Wham.c

- - - Добавлено - - -

И пример использования:

https://zx.oberon2.ru/forum/viewtopic.php?f=10&t=226

- - - Добавлено - - -

Но он не по прерываниям играл. :) В смысле, не через IM2. А просто можно было между нотами делать что-то ещё. Но не шибко долгое, чтобы не нарушать плавность.

Andrew771
06.05.2018, 00:00
Книга "Как написать игру на ассемблере" Евдокимов, Капульцевичи решает все проблемы. Там все процедуры готовые есть на ассемблере и для музыки, и для спрайтов.
А так да, бери какой-нить язык высокого уровня любимый, адаптированный для Спека.

goodboy
06.05.2018, 00:03
Никто не знает готового решения, чтобы:
- музыка играла по прерываниям
- спрайты двигались и анимировались по прерываниям
- возможность управлять этим всем из бейсика (poke, peek, usr)
- объем в пределах пары килобайт

посмотри игры от ShawBrothers (например HeartBroken)
http://www.worldofspectrum.org/pub/sinclair/games/h/Heartbroken.tzx.zip
это скомпилированный бейсик + несколько кодовых вставок

SaintTurnip
06.05.2018, 00:09
Ничего себе, их прекрасные игры - и бейсик? Братаны молодцы.

Shiny
06.05.2018, 04:03
Этого Шынни не понял. Ну бывает, не стоит ждать многого от... мгм... некоторых)

А ты понял=) Речь о Спектруме, а ты стал навязывать кросс-средства. Оберон головного мозга - неизлечимо.

DenisGrachev
06.05.2018, 14:44
Нет-нет, только бипер, только хардкор

Непонятно чем прерывания помогут биперу, он по определению жрёт почти весь проц. Сдаётся мне ты плаваешь немного %)

Oleg N. Cher
06.05.2018, 14:52
Спектрум и кросс-средства абсолютно сочетаемы.


посмотри игры от ShawBrothers (например HeartBroken)
http://www.worldofspectrum.org/pub/sinclair/games/h/Heartbroken.tzx.zip
это скомпилированный бейсик + несколько кодовых вставокРаз уж речь зашла об этой игре, то интересно с помощью какого компилятора она собрана? Целочисленный MCoder2 с применением кустарного линкера, вырезающего неиспользуемый код? (типа Linker For MCoder 2 (http://www.worldofspectrum.org/infoseekid.cgi?id=0008420)).

У меня накопилось несколько вопросов по внутреннему устройству игры Heartbroken. Главным образом, конечно интересно какие именно кодовые процедуры она использует. Их список с описанием функционала, адреса, параметры. Это не праздное любопытство - хочу адаптировать их для ZXDev.

Сам я не собираюсь заниматься реверс-инжинирингом данной игры. Но если кому интересно подекомпилировать Бейсик из машкода и пошагать игру в отладчике, было бы здорово.

Reobne
06.05.2018, 15:11
Непонятно чем прерывания помогут биперу
Например по прерыванию 30 килотактов на звук и анимацию тратить, а остальные такты - бейсику.

Oleg N. Cher
06.05.2018, 15:19
Ничего себе, их прекрасные игры - и бейсик? Братаны молодцы.Ооо! Компилируемый Бейсик в умелых руках творит чудеса! То же можно сказать про Си и Оберон.

- - - Добавлено - - -

eugeniusz, хочу показать мой порт игры Dash, сделанный по подобной технологии, только там не Бейсик и кодовые вставки, а Оберон и процедуры на асме. Игра по задумке собирается под три платформы - ZX, DOS и JavaME:

http://zx.oberon2.ru/dash.htm
https://github.com/Oleg-N-Cher/Dash

ZX_NOVOSIB
06.05.2018, 15:31
Извините за оффтоп, но не подскажите, что делает этот 65-байтный кусок кода? Очень странный загрузчик игры, одних только бейсик-программ две штуки. Если коротко, то эти 65 байт грузятся в буфер принтера (23296), из-за чего игра не работает в 128-ом режиме. Потом грузится основной блок игры с адреса 24137 и до упора, потом идёт usr 23296, и только потом usr на запуск игры. Короче, как сделать, чтобы игра работала и в 128-ом режиме тоже? :v2_conf2:

SAM style
06.05.2018, 16:19
Извините за оффтоп, но не подскажите, что делает этот 65-байтный кусок кода? Очень странный загрузчик игры, одних только бейсик-программ две штуки. Если коротко, то эти 65 байт грузятся в буфер принтера (23296), из-за чего игра не работает в 128-ом режиме. Потом грузится основной блок игры с адреса 24137 и до упора, потом идёт usr 23296, и только потом usr на запуск игры. Короче, как сделать, чтобы игра работала и в 128-ом режиме тоже? :v2_conf2:
В коде определялка, есть ли 128К или только 48К. Чтобы работало, первым делом надо включить ПЗУ бейсика 48К, а потом уже грузить код в буфер принтера

ZX_NOVOSIB
06.05.2018, 17:07
SAM style, а как включить пзу бейсика 48к?

И неужели это всего лишь определялка 128к? Я пробовал обойтись вообще без неё, т.е. у меня принудительно 48-ой сценарий работы загрузчика. Но в таком случае игра сразу после старта сбрасывается. Я пробовал пересохранять основной блок, уже после того как "отработали" эти 65 байт, а потом грузить и запускать его (а 65 байт не загружать), в таком случае игра работает, но в левом верхнем углу какие-то глюки в виде двух нулей. Если бы это была всего лишь определялка, то она бы никак не влияла на саму игру, загруженную и запущенную принудительно в 48к.:v2_confu:

SAM style
06.05.2018, 17:36
SAM style, а как включить пзу бейсика 48к?

И неужели это всего лишь определялка 128к? Я пробовал обойтись вообще без неё, т.е. у меня принудительно 48-ой сценарий работы загрузчика. Но в таком случае игра сразу после старта сбрасывается. Я пробовал пересохранять основной блок, уже после того как "отработали" эти 65 байт, а потом грузить и запускать его (а 65 байт не загружать), в таком случае игра работает, но в левом верхнем углу какие-то глюки в виде двух нулей. Если бы это была всего лишь определялка, то она бы никак не влияла на саму игру, загруженную и запущенную принудительно в 48к.:v2_confu:
Результаты работы определялки:
(#728e) = 0 если 48К, 1 если 128К
(#5b3f) = #30 если 48К, #80 если 128К
больше она ничего не меняет
Из бейсика принудительно включить нужное ПЗУ не получится, надо в ассемблере выполнить
ld bc,#7ffd
ld a,#10
out (c),a

goodboy
06.05.2018, 18:02
У меня накопилось несколько вопросов по внутреннему устройству игры Heartbroken. Главным образом, конечно интересно какие именно кодовые процедуры она использует. Их список с описанием функционала, адреса, параметры. Это не праздное любопытство - хочу адаптировать их для ZXDev.
давай перейдём сюда
http://zx-pk.ru/threads/26468-igry-ot-shaw-brothers.html
(для проверки сторонних процедур я скомпилил randomize usr 82 (ret) и проверил схожие моменты в игре)

SaintTurnip
06.05.2018, 18:49
Непонятно чем прерывания помогут биперу, он по определению жрёт почти весь проц. Сдаётся мне ты плаваешь немного %)

Я, действительно, сильно плаваю. Но вот именно звуковые эффекты по прерываниям делал.

Oleg N. Cher
06.05.2018, 18:58
Мне когда-то попадалась музычка на бипер, звучащая на фоне Бейсика. Это были короткие одноголосные звуки в стиле музыки из игр Booty или Three Weeks in Paradise. Работало всё это, разумеется, на прерывании IM2, тратя на одну ноту помногу тактов, возвращая Бейсику остатки времени работы процессора.

- - - Добавлено - - -

В MegaBasic есть возможность воспроизводить подобным образом звуковые эффекты в фоне.

SaintTurnip
06.05.2018, 19:03
Ооо! Компилируемый Бейсик в умелых руках творит чудеса! То же можно сказать про Си и Оберон.

Вот если бы zxdev умел golang, я бы да, а так нет :)

Oleg N. Cher
06.05.2018, 19:21
Даёшь голанг на ZX! Идём напишем в гугль петицию :)

- - - Добавлено - - -

Эк вам всем не угодишь, тому под мак надо, тому под нетбсд, а тому, понимаешь, подавай голанг. Балованные стали, лучше уже подсветку синтаксиса для Бейсика запилить...

SaintTurnip
06.05.2018, 19:35
Пусть расцветают сто цветов.

Но изучать новый язык с ограниченной областью применения я сейчас не готов.

- - - Добавлено - - -


В MegaBasic есть возможность воспроизводить подобным образом звуковые эффекты в фоне.

Там как-то удобно спрайты работали. Не помню точно, но я предпочитал его лазербейсику.

Oleg N. Cher
06.05.2018, 19:46
В своё время я хорошо изучил MegaBasic, а сейчас понимаю, что в моё идеальное средство разработки и Laser, и MegaBasic должны подключаться как библиотеки. И никакого интерпретатора.

По сути для разработки под Z80 ценен только машкод, который мы пишем сами (на ассемблере) или нам его порождает какой-то компилятор. Интерпретатор с кодовыми вставками это слишком ограниченный тандем. Вот.

Как породить код для Z80 из голанга - я не исследовал. Возможно, как-то можно через LLVM. Из Оберона породить машкод для Z80 тоже было непросто, я использовал для этой цели компиляцию в Си, тем самым оскорбив чувства всех правоверных сишников, а заодно и ассемблерщиков. Но это был компромисс. И по сути набортные компиляторы не дадут хорошего машкода. Остаются только кросс-средства. И ты переоцениваешь языковую разницу между Boriel's Basic'ом и ZXDev Обероном. Так что "изучать новый язык с ограниченной областью применения" это звучит высокопарно и не очень соответствует действительности. Принципы-то всё равно одни. И различия в синтаксисе не более принципиальны.

Что касается "мёртвости" Оберона. У нас очень грамотное сообщество, хоть и малочисленное. Язык применяется в коммерческих проектах. Когда заходит речь о Лазере - ты не напрягаешься, это детство. А учить для тебя новый язык - это так серьёзно))) Ведь для будущего нужен голанг, не так ли?) Ну-ну.

SaintTurnip
06.05.2018, 20:13
https://media1.tenor.com/images/a2026c306afc7cbe914d972b970638f0/tenor.gif

- - - Добавлено - - -


Что касается "мёртвости" Оберона.

Я так не говорил и не считаю. Это отличное начинание, побольше бы таких качественных продуктов.


Когда заходит речь о Лазере - ты не напрягаешься, это детство.

Напрягаюсь. Не помню ни лазер, ни мегу. На асме программировал в начале 2000х и что-то еще помню.

Бейсик спектрума помню почему-то хорошо, хотя написал на нем куда меньше, чем на бейсике Корвета, меньше, чем на асме, PHP или c#

Наверно, первый язык программирования становятся родным (https://ru.wikipedia.org/wiki/Родной_язык) :)


Ведь для будущего нужен голанг, не так ли?) Ну-ну.

Для работы нужен.

Oleg N. Cher
06.05.2018, 20:30
Ну, экзотика на Z80 уже была - Java для Z80 от Raydac. Не особо прижилась.

Не препятствую ностальгии по Бейсику, даже предлагаю её вывести на новый уровень, пользуясь Boriel's. Я бы ещё мечтал увидеть хороший качественный Бейсик для ZX типа QuickBasic.

Что же касается голанга, у нас тут есть интересный переводной документ о его родословной от Паскаля и Оберона:

https://docs.google.com/document/d/1EqDai8f1o3k5_wBqXZ2S93z73uEc28MM7TkYG_4XSFU/

Но это оффтопик :)

goodboy
06.05.2018, 20:37
Я знаю такое решение. Это среда ZXDev и язык Оберон.
а есть хоть один законченный проект (созданный в этой среде) ?

jerri
06.05.2018, 21:37
goodboy, нет

Oleg N. Cher
06.05.2018, 21:47
Мелкие есть. Например, вот игры, портированные с Бейсика.

65210

Ещё вот рогалик, но slenkar зажал исходники:

https://zx.oberon2.ru/forum/viewtopic.php?f=10&t=125&start=10#p585

Есть вполне законченный порт арканоида для Windows, тоже сделан с помощью XDev.

https://github.com/Oleg-N-Cher/Arkanoid

А почему так сформулирован вопрос? Есть опасения подвоха в незаконченности самой среды? Я уверяю, что мощь кодовых вставок при работе на ZXDev нисколько не беднее, чем их вызов из Спектрум-Бейсика ;)

Такое бедное количество игр на ZXDev связано с тем, что, к сожалению, я не игродел, и полный цикл разработки игры мне не осилить. Но я готов помогать желающим. Всё ещё ;-)

jerri
06.05.2018, 22:52
Oleg N. Cher, вопрос был про законченный проект
Spearman заброшена
Болдердаш незакончен

Арканоид хмм ну похоже кандидат есть.
но не под спек.
почему?

goodboy
06.05.2018, 22:58
А почему так сформулирован вопрос? Есть опасения подвоха в незаконченности самой среды?
опасения в аппаратной мощности (zx), и похоже они оправдались.
грубо говоря динамику Ваша среда не осилит,
а статику вполне осилит простой бейсик

Oleg N. Cher
06.05.2018, 23:29
Понятно. Всё сводим к уже знакомому и освоенному. Ругаемся и плюёмся на нечто не совсем привычное. Вы меня вообще не удивили. Про то, что можно считать Heartbroken динамикой, не будем. Про нечто промежуточное между асмом и интерпретатором Бейсика тоже не будем. Это всё крайне покрыто мраком. Но главное, на чём следует сконцентрироваться, это на различии слов "Оберон" и "Бейсик", где-то тут кроется тайна.

- - - Добавлено - - -


Spearman заброшенаЧто за Spearman?

но не под спек. почему?Дык динамики не хватило. См. выше.

SaintTurnip
06.05.2018, 23:49
Олег, только что посмотрел на игру LAVA (https://www.youtube.com/watch?v=NB2TdpGSLSI).

Очень красивая, но совершенно неиграбельная из-за скорости.

Просто подарок для твоего компилятора. Лучшего кандидата для продвижения оберона не найти - и тебе не надо тянуть весь цикл, а только портировать с ЯВУ на ЯВУ внутри одной платформы.

krt17
07.05.2018, 00:10
В настоящее время для спектрума есть 2 наиболее используемые графические библиотеки sp1 и nirvana. Если человек хочет писать на яву он выберет готовое функциональное решение. Для совсем не желающих программировать есть мк2 использующая тот же sp1 и агд.
Вы с оберонами и паскалями предлагаете только тормозной геморой, сравнивать надо не с лазер бейсиком, а с современными альтернативами. А с sp1 я считаю должен разобраться каждый кодер на спеке, сделано просто отлично.

Oleg N. Cher
07.05.2018, 00:17
SpritePack1 и Nirvana (и BiFrost) можно адаптировать для ZXDev, и это сделать не труднее, чем с функционалом Laser Basic. И z88dk тоже можно юзать в качестве бэк-энда для ZXDev. А на нём сделано достаточно приличных игр. Просто я рассчитывал на коллективную разработку, всё сам не сделаешь. Но вышло так, что вместо криков "давай, давай!" я получил унылое "это никому не надо". Ну не надо - так не надо, юзайте Бейсик и ассемблер.


Просто подарок для твоего компилятора. Лучшего кандидата для продвижения оберона не найти - и тебе не надо тянуть весь цикл, а только портировать с ЯВУ на ЯВУ внутри одной платформы.Нет уж, спасибки. Я уже одного кандидата на ускорение с Бейсика портирую, лет 5-8 эдак уж. А продвижением тут и не пахнет, всегда найдётся тот кто начнёт вонять в стиле "во, родил наконец за столько-то лет унылое г-но, лучше в оригинал пошпилить".

Тут, скорее, Boriel's пригодился бы. Хотя он и сильно отличается от Спектрум-Бейсика.

DenisGrachev
07.05.2018, 08:55
А с sp1 я считаю должен разобраться каждый кодер на спеке, сделано просто отлично.

люто плюсую товарища крт, эта библиотека очень универсальная и вполне себе по скорости. ещё бы из асма её научиться юзать без гемора и будет счастье :)

Shiny
07.05.2018, 09:32
https://pp.userapi.com/c846017/v846017446/42ca0/eKlcAam1WM8.jpg

ZX_NOVOSIB
07.05.2018, 12:53
Чтобы работало, первым делом надо включить ПЗУ бейсика 48К, а потом уже грузить код в буфер принтера
ld bc,#7ffd
ld a,#10
out (c),a

Если это выполнить, то сброс в 48-ой бейсик :(
Если к этому добавить RET, то сброса нет, но и попытка загрузки в буфер принтера кода-определялки тоже приводит к сбросу.

Может есть какой-то более простой способ определить из какого режима (48/128) запущен загрузчик игры? Каким-нибудь хитрым PEEK разве нельзя определить 48 или 128? :v2_confu:

jerri
07.05.2018, 21:02
Что за Spearman?

ага точно
не туда посмотрел

Сленкар забил на свою игру
видимо понял что ему не хватит либо памяти
либо скорости
либо возможностей ЯВУ




Дык динамики не хватило. См. выше.
вот вот
значит не то делаешь да?

Oleg N. Cher
07.05.2018, 21:57
jerri, а почему ты именно на меня давишь, чтобы я делал игры? Вот Bolt компилятор Паскаля делает, дави на него.

- - - Добавлено - - -


видимо понял что ему не хватит либо памяти либо скорости либо возможностей ЯВУНа тормозной ZX-Бейсик никто не жалуется, как-то кодовыми вставками обходят. Ты слышал? Статику Бейсик тянет. А Dash это уже не динамика) Потому что мощи Z80 для ЯВУ не хватает, и виноват в этом конечно Оберон.

jerri
07.05.2018, 22:47
jerri, а почему ты именно на меня давишь, чтобы я делал игры? Вот Bolt компилятор Паскаля делает, дави на него.

хороший вопрос. ответ на него стоит 100$ но для тебя по скидке 50



На тормозной ZX-Бейсик никто не жалуется, как-то кодовыми вставками обходят. Ты слышал? Статику Бейсик тянет. А Dash это уже не динамика) Потому что мощи Z80 для ЯВУ не хватает, и виноват в этом конечно Оберон.

ммм?
а зачем ты кушаешь кактуз?
возьми редиску.

или вот тут (http://www.worldofspectrum.org/infoseekid.cgi?id=0005244&loadpics=3) посмотри как народ на бейсике зажигает

krt17
07.05.2018, 22:50
Недавний вполне себе фреймовый ZXombies сделан на С, гэндальф с того же конкурса на нем же. Все быстро и играбельно даже на нивране. У того кто хочет и может сделать игру нет никакой проблемы на чем писать, инструмент тут далеко не главное значение имеет, тем более выбор есть.
Объясните товарищ Олег, какой смысл в никому не известном языке который транслируется в С (уже на этом этапе сомнительны достоинства) и не имеющий ни хороших графических библиотек ни внятной документации. Это чисто ваше хобби, с какого перепуга вы ожидаете поддержки?

Oleg N. Cher
08.05.2018, 01:41
Я бы объяснил, но вы не поймёте, товарищ krt17, всё сводя к своим предпочтениям. Эта петрушка уже мялась сто раз. А графические библиотеки есть, и документация тоже есть. И язык очень маленький и внятный, и имеющий применение не только на Спектруме.


или вот тут (http://www.worldofspectrum.org/infoseekid.cgi?id=0005244&loadpics=3) посмотри как народ на бейсике зажигаетМда, видел я уже этот тормозной и кривой арканоид. И чего? Образчик искусства? На Бейсике можно и получше, особенно на компиляторе.

Bolt
08.05.2018, 08:02
Вот Bolt компилятор Паскаля делает, дави на него.
Вот мне, Ѣ, ещё игр не хватает для полного счастья :v2_laugh:

Oleg N. Cher
08.05.2018, 17:13
Есть такая психология, пнуть инакомыслящего, если за это ничего не будет. Думаю, jerri надо разобраться на эту тему с собой.

Появилось время, чтобы более предметно ответить на вопрос топикстартера. eugeniusz, ты, видимо, предполагал что-то вроде готового движка для звука и анимации, но компактного. Предлагаю такой движок скомпоновать.

Я для пакета Laser2 разработал процедуру вывода познакоместного спрайта с атрибутами или без них. Она довольно компактна (чуть больше сотни байтов), умеет выводить спрайт, если он выходит за пределы экрана (эту возможность можно отключить, сэкономив байты). Скорость вывода на твёрдую пятёрочку. Быстрее могут только демомейкеры разворачиванием данных спрайта во многие килобайты. Так что процедура вполне годится для статики и несложной анимации. См. ZXDev/Lib/Laser2.PTBL

Если познакоместный вывод - не то, что требуется, есть процедура Сержа Колотова (SerzhSoft), выводящая попиксельно спрайт без атрибутов (умеет логические операции). Интересна тем, что не требуется заранее хранить несколько сдвинутых фаз спрайта. См. ZXDev/Lib/Best40.PUTSPR

И вот маленький пример того, что тебе требуется. Я не в восторге от такой гибридизации, но раз хочется) то ZXDev можно использовать и для вызова его кода из Бейсика. Регистр IY процедуры не нарушают.

65216

- - - Добавлено - - -

Что-то тапка получилась неправильная. Я её записал в FUSE и потом ещё редактировал в ESN. Просто загрузите код с адреса 60000 и GO TO 10. На ошибки загрузки внимания не обращаем)

SaintTurnip
08.05.2018, 19:11
Oleg N. Cher, спасибо, Олег!

Пока бейсик с трудом ворочает свои жирные байты, она должна анимировать спрайт 16х16 или около того. А перемещать может и бейсик - POKE addr, x.

Следующий вопрос: как сделать несколько спрайтов? Чтобы на экране было штук 5 анимаций одновременно.

Oleg N. Cher
08.05.2018, 19:57
Да так же, как и один. См. пример Laser2Demo. Вызываешь несколько раз PTBL, передав через POKE координаты x, y и номер спрайта. Можно попробовать передавать параметры в машкод как-то через DEF FN, но здесь, мне кажется, в скорости мы не выиграем.

Если хочется большей автоматизации с анимированием, нужно вешать анимацию на IM2, но чудес не бывает - чем больше размер автообновляемых анимируемых спрайтов, тем меньше скорости отдастся Бейсику. Нужно всё продумать.

Можно сделать так:

- поставить на анимирование (допустим, 4 фазы) такой-то спрайт, такие-то координаты (добавить в очередь)
- убрать его из набора (очереди) анимируемых спрайтов

Но я не вполне чётко представляю, чего и как именно ты хочешь сделать. Поясни, плиз?

SaintTurnip
08.05.2018, 20:26
1) Добавить жизни в Диктатора. Видишь, IDE уже написал :)

2) Когда-то делал игру типа 2д элиты на бейсике (на Корвете). Хочу повторить.

Oleg N. Cher
08.05.2018, 20:31
Да, IDE крутое :) Не думал, что такое возможно (откуда ты берёшь свободные ячейки в ПЗУ?)

Нужно проектное решение, в котором будет детально и однозначно описан машкодовый движок на уровне вызовов из Бейсика. При этом можно его реализовать так, чтобы адреса всех вызовов были поджаты к началу кодового блока (чтобы они не менялись при изменении размера процедур и данных), а можно этого и не делать.

SaintTurnip
08.05.2018, 20:56
Да, IDE крутое :) Не думал, что такое возможно (откуда ты берёшь свободные ячейки в ПЗУ?)

Так это, записываешь в любую ячейку 00, она вроде как уже и свободна.


Нужно проектное решение, в котором будет детально и однозначно описан машкодовый движок на уровне вызовов из Бейсика. При этом можно его реализовать так, чтобы адреса всех вызовов были поджаты к началу кодового блока (чтобы они не менялись при изменении размера процедур и данных), а можно этого и не делать.

Там будет какое-то абстрагирование адресов - переменные с адресами или GO SUB, посмотрим.

Закончу бейсик-часть и продолжим.

jerri
08.05.2018, 21:15
Я бы объяснил, но вы не поймёте, товарищ krt17, всё сводя к своим предпочтениям. Эта петрушка уже мялась сто раз. А графические библиотеки есть, и документация тоже есть. И язык очень маленький и внятный, и имеющий применение не только на Спектруме.


действительно мялось, но почему то гражданин Oleg N. Cher каждую весну и осень начинает играть на одной и той же волынке.



Мда, видел я уже этот тормозной и кривой арканоид. И чего? Образчик искусства? На Бейсике можно и получше, особенно на компиляторе.

он, написанный на бейсике, есть. а твой красивый и плавный арканоид написанный на Обероне на спеке не существует. так?

Oleg N. Cher
08.05.2018, 21:48
Ах, на Обероне столько всего не существует... как и мозгов у jerri

- - - Добавлено - - -

Ты вот, jerri, зачем сделал порт своей игры с геймбоя с таким маленьким игровым экраном, что без лупы не поиграть? Сделай нормальную полноэкранную плавную игру, а потом придёшь тут нас учить, двоешник. Ты понял? Всем не угодишь. Так и с арканоидом на Обероне.

jerri
08.05.2018, 22:25
Ах, на Обероне столько всего не существует... как и мозгов у jerri
Ты вот, jerri, зачем сделал порт своей игры с геймбоя с таким маленьким игровым экраном, что без лупы не поиграть? Сделай нормальную полноэкранную плавную игру, а потом придёшь тут нас учить, двоешник. Ты понял? Всем не угодишь. Так и с арканоидом на Обероне.

Ну вот, ЧТД
Опять гражданин в своем репертуаре.
вместо того чтобы собрать и запустить арканоид переходит на личности.
стыдно, мальчик, стыдно.

Oleg N. Cher
08.05.2018, 22:31
Так где полноэкранная игра с плавной графикой, гражданин? Чего отмораживаешься? =) Давай уже, собери нам на радость.

Oleg N. Cher
09.05.2018, 00:54
jerri, я тут надумал в твою игру пошпилить, срочно пришли микроскоп :)

SaintTurnip
09.05.2018, 04:44
Вот и написал игру: строчных массивов нет.

char не в счет.

Oleg N. Cher
09.05.2018, 13:34
Это где их нет? В Бейсике чтоль? :)

- - - Добавлено - - -


- строковый массив со строками разной длиныДля этого создаётся обычно массив указателей на строки.

- - - Добавлено - - -

А строки нужно обрабатывать или только выводить? Может так? (изврат конечно)



4000 LET a$=m$: RETURN
4001 LET b$=m$: RETURN
5000 LET m$=a$: RETURN
5001 LET m$=b$: RETURN
...
6000 REM присваиваем наш массив:
6001 LET m$="str1": GO SUB 4000: LET m$="str2": GO SUB 4001
6000 REM берём энный элемент массива:
6001 LET n=1: GO SUB n+5000: PRINT m$

Alex Rider
09.05.2018, 17:07
Эм... Чот редко я сюда захожу... Почему в теме про машкодовые вставки в BASIC обероносрач и определение текущего подключенного ПЗУ?

UPD: Шынни, Олег: брейк. Или карточки.

SaintTurnip
09.05.2018, 17:34
Это где их нет? В Бейсике чтоль?

все равно его не брошу

(хотя желание зарождается)


пример на госабах правда извернутый, но мне может и подойти

Shiny
09.05.2018, 17:38
UPD: Шынни, Олег: брейк. Или карточки.

конечно это не мое дело, но больно много я от тебя огребал печеньки марки "провокация". разве тут не видно?
да и пофиг.

Andrew771
09.05.2018, 20:58
Вы с оберонами и паскалями предлагаете только тормозной геморой, сравнивать надо не с лазер бейсиком, а с современными альтернативами.
"И тут багровеют производственники" (с) Из той самой статьи..

Не буду ничего доказывать, просто посмотри демо будущей стратегии реального времени на ZX Like Pascal, тут (http://zx-pk.ru/threads/262-strategii-realnogo-vremeni-na-zx-spectrum.html?p=963214&viewfull=1#post963214). Всё ездит и шевелится и еще место в памяти свободное есть.

krt17
09.05.2018, 21:02
Не буду ничего доказывать
Мне уж точно не надо, все видно, красавчик.

Oleg N. Cher
09.05.2018, 22:12
Andrew771, а если бы ты делал её на Си, было бы ещё круче по памяти :)
А уж если на C--, то ваще...

Andrew771
10.05.2018, 14:19
Andrew771, а если бы ты делал её на Си, было бы ещё круче по памяти
Зависит от кодогенератора компилятора, а не от языка. Я кучу оптимизаций в кодогенераторе сделал.

Oleg N. Cher
10.05.2018, 15:54
Я это и имел в виду. Думаешь переплюнуть команду SDCC? Ну, удачи :)

- - - Добавлено - - -

Хотя вот в C-- можно руками много оптимизаций описать.

Smalovsky
10.05.2018, 16:07
Oleg N. Cher, твоя основная проблема - нет игр. Если бы ты собрал игру уровня агд, то можно было бы сравнить обирон с тем же агд. Но утебя нет примера для продвижения обирона.
Поначалу ассемблерщики вообще никакие яву не принимали. Потом появился редактор агд и они притихли.

Oleg N. Cher
10.05.2018, 20:08
Да, моя проблема в том, что я игр не пишу. Ну не дал мне бог такого таланта. И что теперь, запинать меня?)
Но зато я хорошо разбираюсь в других вещах, и другие вещи меня интересуют больше.

- - - Добавлено - - -

Внутри AGD/Churrera что? SP1?

Shiny
10.05.2018, 22:13
к вопросу о спрайтиках - налабал одну бестолковую процедуру. графика требует допила.

SaintTurnip
10.05.2018, 22:55
Шынни, пиксельное перемещение и выход за границы экрана! Подробнее можно?

Shiny
10.05.2018, 23:02
не понял про выход

эта запись толкнула на идею.
http://ralphbecket.blogspot.ru/2015/09/faster-sprites-on-zx-spectrum.html