заливать там, где нет шариков
Вид для печати
заливать там, где нет шариков
У РФ1 вроде вместо этого - PGM?
Или я ошибся, когда рисовал?
нафиг РФ1, да и больше одного знакогенератора в РФ1 не зашить
РФ1 ещё фиг найдёшь :)
Я в 90х когда РК-шку собирал не нашёл - сразу РФ2 поставил :)
Предлагаю потестировать альтернативный шрифт, он состоит из двух половинок:
1. Стандартный шрифт, в котором пустые служебные символы заменены на текстуры + символ настораживающе растопыренного человечка заменён на новый.
2. Шрифт 6х6, квадратные символы псевдографики, текстуры, флора, кирпичи, лестница, вода и др.
Вы видели его уже: https://disk.yandex.ru/i/9JJGlcFM0NALHw
https://zx-pk.ru/attachment.php?atta...2&d=1706906551
Баги: в игре Xonix на экран выводятся служебные символы кроме пробела и 00h, поэтому экран в Ксониксе заполнен новым символом воды.
Сам шрифт: Вложение 80352
Развёрнутое пояснение отсюда.
Как известно, стандартный авторский Монитор РАДИО-86РК имеет минимальные встроенные средства отладки кода - директивы G с парой параметров и X.
Причём, вторым параметром директивы G указывается адрес прерывания приложения с временным размещением кода F7 - RST 6. Причём, по адресам 0030…0032 прописывается инструкция «JMP FFA2», уничтожая содержимое ячеек безвозвратно!
(Очевидно, в CP/M адрес 0030 был стандартной точкой отладки.)
Директива G, однако, сохраняет код временно замещённой инструкции в ячейку 7625 и её адрес в ячейки 7623/7624.
Тем самым, приложение может само себя частично восстановить, используя сохранённую служебную информацию, а так как все параметры директив сохраняются в ячейках 7627…762C, то и использовать, в частности, и третий параметр.Что может помочь в отладке (например, запускать программу в различных режимах или прошивать ПЗУ без принудительно запроса адресов).
- «G,<параметр#2>»
- «G,<параметр#2>,<параметр#3>»
- «G,,<параметр#3>»
Вот, типовой код для таких вызовов:Откуда становится также очевидным, почему второй параметр должен быть не меньше 000C (если программа стартует с 0000): Первые 12 байтов - код восстановления, который сам себя восстановить не сможет/!\Пример кода
Код:PUTHEX: EQU 0F815H
PUTEXT: EQU 0F818H
GETMEM: EQU 0F830H
WARMON: EQU 0F86CH
;;;;;;;;;;;;;;;;;;;;;;;;;
STOPTR: EQU 07629H ; Адрес останова (7623 или второй параметр)
STOPIC: EQU 07625H ; Сохранённый код инструкции
DIRDE: EQU 07629H ; Второй параметр директивы (передаётся в DE)
DIRBC: EQU 0762BH ; Третий параметр директивы (передаётся в BC)
ORG 00000H
LHLD STOPTR ; Читаем адрес "порчи" (слово в 7623 или 7629)
MOV A,H ; и проверяем,
ORA L ; был ли второй параметр у директивы G?
JZ BEGIN ; Если указатель - "нулевой", значит отсутствует.
LDA STOPIC ; Иначе, читаем код инструкции
MOV M,A ; и "снимаем порчу" у ячейки, которая "прихворала".
BEGIN: XCHG ; Заносим второй параметр в DE.
DCX SP ; Корректируем указатель стека
DCX SP ; для благополучного возврата в Монитор.
LXI H,HELLO ; Сначала поприветствуем пользователя
CALL PUTEXT ; скромным сообщением о нормальном запуске.
CALL SHOWDE ; Отобразим содержимое DE - второй параметр директивы
INX H ; и напечатаем остальное
CALL PUTEXT ; сообщение.
LHLD DIRBC ; Третий параметр директивы.
XCHG ; Теперь отображаем третий параметр директивы и выходим
;;;;;;;;;;;;;;;;;;;;;;;;;
SHOWDE: MOV A,D ; Выводим регистр D
CALL PUTHEX ; шестнадцатеричным,
MOV A,E ; выводим регистр E
JMP PUTHEX ; шестнадцатеричным.
;;;;;;;;;;;;;;;;;;;;;;;;;
MOV B,C
MOV C,H
MOV C,C
MOV C,E
MOV B,D
MOV B,L
MOV D,D
MOV C,A
MOV D,M
MVI L,031H
;;;;;;;;;;;;;;;;;;;;;;;;;
HELLO: DB 00DH,00AH
DB 'SECOND PARAMETER IS ',0
DB 00DH,00AH
DB 'THIRTH PARAMETER IS ',0
[свернуть]
Потому, исходный Монитор скрывает возможности, которые никогда не использовались.
Переделал заливку, начал добавлять звуки: https://disk.yandex.ru/i/UpKV1WT-o6LdTg
Подскажите пожалуйста по компиляторам под РК86. Не считая ассемблеров и бейсиков, существуют ли компиляторы, например высокого уровня какой-нибудь Си. В идеале с примерами.
Есть си, pl/m оберон, а также несколько мини-языков, типа context, cowgol.
Если использовать cp/m, то там есть fortran, паскаль.
По моему опыту, самое лучшее - pl/m. Си - слишком громоздкий для слабого проца.
https://github.com/maxadler1979/palmira/tree/main/games тут примеры, а си компилер - смотри z88dk
Kakos_nonos, Си как я понял это z88dk? А на pl/m можно ссылку?
Самый актуальный и поддерживаемый. Именно на этой сборке делали игру Bolder Dash для Пальмиры недавно. И для ПК8000.
Да, самая продвинутая версия сейчас. Есть одна еще постарее, на ней я двигалку делал. Там в архива исходники игры и компиль и эмулятор. Легче разобраться будет.
https://files.scene.org/view/parties...d/dvigalka.zip
Хочу упомянуть еще новый Си-подобный язык Millfork:
https://karols.github.io/millfork/
Позиционируется как язык среднего уровня. Немного экспериментировал с ним, впечатления очень неплохие.
Даже несмотря на то, что он больше заточен на 6502 и z80, а не 8080, генерируемый для 8080 код по производительности приближается к PL/M и значительно опережает z88dk.
Сам язык, конечно, своеобразный. Несколько похож на Си, но менее гибок и более приближен к архитектуре 8-битного компьютера.
Я далек от этой темы, но думаю, это потому, что отсутствует для Win32 используемый для создания Native-приложения GraalVM.
А jar-версия под Win32 тоже не работает?
https://github.com/KarolS/millfork/r...ork-0.3.30.zip
Запускать java -jar millfork.jar
Да уж. Выбор Scala в качестве средства разработки ретро-компилятора, как минимум, странный, но есть что есть.
В смысле, отучить от JRE? А зачем? Что это даст?
Не, может как-то и можно, но это пляски с бубном.
Решил тут понастольгировать и на фоне этого получилось сделать игрушку под Бейсик МИКРОН для РК-подобных машин.
Игрушка называется "Злые пещеры" и похожа на рогалики, правда сильно примитивнее. Писал подобное ещё в школе, решил вспомнить.
Описание и всё неодходимо находится в приложенном архиве.
Если кому будет интересно, по игрушке был стрим на канале уважаемого Videogames Sematary. Посмотреть можно тут.
https://i.ibb.co/LtN7xB1/Screenshot.png
Вложение 80491
В процессе написания различных программ столкнулся с осознанием того, что генератор псевдослучайных чисел есть насилие над мозгом и процессором. Достаточно просто подготовить последовательность. данные из которой перебирать по числам другой последовательности - и через несколько прогонов этого кода средний человек уже едва ли сможет вычислить текущую последовательность. Если же это дело еще и завязать на действия игрока, то получаем почти полноценный генератор случайных (причем почти настоящих случайных) чисел... Блин, три дня доходил до этого. пока пытался свой ГСЧ написать... А ларчик-то просто открывался. Плюс почти равная вероятность выпадения любого значения из списка, которая будет только еще больше выравниваться при каждом перемешивании списка. Собственно, настоящие случайные числа, как мне показалось, и не нужны особо. Достаточно организовать сложно предсказуемую последовательность. Сугубо имхо, но алгоритм перетасовки карт в колоде получился куда как проще моего несостоявшегося ГСЧ. А теперь писать пятнашки ))) Ко всему, процессор успевает выполнить достаточно много таких прогонов за секунду, что тоже хорошо сказывается на скорости выполнения программы... Одни плюсы, никаких минусов )))
Вообще это, может, и общеизвестная информация, а только вот нигде я раньше такого не видел. Так что для меня это новый способ организации ГСЧ, который еще и не грузит процессор почти - только работа с регистрами и памятью ну и сложение для вычисления нужного индекса в последовательности источнике...
У меня так легко и просто не получилось, особенно если нужно, чтобы при включении компьютера выпадало каждый раз разное число. Немного помогло подмешивание байтов из нестёртого ОЗУ т.к. там есть мусор после включения. И еще у меня порт D000 разведён на плате, но к нему ничего не подключено. Из него можно читать "воздух", статические наводки. Тоже немного помогло.
Ну я бы так не заморачивался... На начальном экране, пока юзер что-нибудь бы не сделал (например кнопка начала игры) - наматывал бы список по новой без остановки. Или, в самом простом варианте, inr r, что даст по настоящему случайно число - ведь наматывать его проц будет с большой скоростью, пока ждет действий игрока - результат для него будет более чем случаен. Блин, мне эта мысль с выборкой и накруткой все мышление свернула. Ну я в том плане, что такой генератор, с привязкой к действиям пользователя, в моих глазах выглядит намного более случайным, чем любой, пусть и самый навороченный ГСЧ. Именно из-за погрешности в концах диапазона генерируемых значений последнего.
Я так и сделал, счётчик наматывает! Но при запуске игры хотелось бы каждый раз выводить новую приветственную надпись. Т.е. до того, как игрок произвёл действие.
Старый, как мир, трюк.:v2_dizzy_botan:
ну для генерации одного числа может и сойдет. А теперь представим, что нужно перемещать колоду карт, или даже поле игры в пятнашки. Если случайным образом генерировать каждое новое число, то, помимо генерации, придется контролировать, чтобы номера не повторялись. И если для пятнашек еще терпимо, то вот при такой генерации колоды карт задержка будет весьма чувствительна, особенно по мере приближения к концу генерируемой последовательности и уменьшения списка свободных значений. 36 карт при таком подходе собираются иногда по минуте. Абсолютно не выгодно в плане времени. За тоже время (и даже за намного меньшее) методом выборки по индексам можно накрутить последовательность, которая по своей случайности ничуть не будет уступать генерируемой
Собственно я к чему: вопрос ведь не в том, насколько число должно быть случайным, а в том, насколько алгоритм генерации подходит под текущую задачу.
https://github.com/maxadler1979/palmira/tree/main/games
Там можно найти Trex под рк86 версии (под пальмиру тоже есть с исходниками). Выкладывал ранее, но видимо так никто и не заметил так как велось активное обсуждение непонятно чего.
Графоний шикарен.
Написал простую игру-демку, где игрок получает предсказание. Варианты для четырёх платформ: РК журнально-эмуляторный, РК SRAM, Апогей, Пальмира.
https://zx-pk.ru/attachment.php?atta...5&d=1711231998
https://www.youtube.com/watch?v=1xomZ59tHWY
Спрайтовая графика, одноканальный звук. Все версии немного отличаются.
Смотреть лучше на телевизоре 16:9, тогда пропорции максимально приближены к задуманным.
Версия для SRAM Сергея Киселёва, не знаю на сколько она отличается от других срамоидов, если звука не будет, пишите, допилю.
Пришлось одновременно программировать, писать музыку, рисовать шрифт и паять РК, всё в условиях ограниченного времени. Поэтому наверняка есть косяки. Пишите, поправлю.
Забери своё предсказание у чародейки: Вложение 80544
А что такого особенного в РК SRAM? По идее должно быть совместимо с обычным РК
Там средний канал ВИ53 используется для тактирования последовательного порта. Нулевой канал висит в воздухе. И только второй канал идёт на звук. Но гейт ВИ53 надо сначала поднять на ВВ55, так же как и активацию звука. Тем не менее, именно эта машинка мне пока нравится больше остальных клонов. В этой версии демки светодиод РУС/ЛАТ мигает в такт нотам.
У журнального РК в звукогенерации участвуют все три канала, но выход на один канал.
У Апогея и Пальмиры звук трехканальный.
В версии для Пальмиры так же используется другой кастомный шрифт.
Вобщем отличий между платформами достаточно.
А т.е. речь про ВИ53? В "классическом" РК SRAM32K от alexcp нету ВИ53 - я в своей версии воткнул ВИ53 в диапазон #B000...#BFFF, а где у Киселёва оно? Поверх ВВ55 как журнал Радио предлагал?
Нет, на отдельных адресах порт и звук. ВИ53 - #9000, порт - #A000.
Это надо рисовать уметь. Тут я художника привлекал, сам не смог нарисовать. Ну или покупать готовые ассеты и что-то с ними придумывать.