Просмотр полной версии : Нубские вопросы программирования для БК-0010
BlaireCas
15.07.2023, 11:58
Большое спасибо всем за подсказки! Получилось сделать (а точнее перенести) первую программку под БК-0010.
Сделано примитивненько, вообщем игрушка небольшая. Падают цветные "шарики" и надо собрать горизонтально/вертикально/диагонально больше 3-х.
Скорей-всего такая игра уже была на БК, но как-бы "а пусть еще будет" :)
https://i.imgur.com/zBRRnwX.png
Какую-то отдельную тему наверное делать не стоит. Положу результирующий .bin прямо сюда.
1 - переключить тайлы (шарики, марио, болдер даш)
2 - вкл/выкл увеличения уровня
Управление - стрелки
Бинарник игры: 79216
Исходники: https://github.com/blairecas/column_bk0010/
Наверное глупо создавать какую-то новую тему, но пусть будет. Я собственно программирую иногда под так-сказать "соперничающую" машинку УКНЦ.
Но вот подумал ".. а на БК ведь такой-же почти процессор, ну подумаешь нету mul и div. Почему-бы не перенести свое творение на БК".
И тут впал в ступор с простыми вопросами мол "а как?"
Вопросы примитивны видимо до ужасу:
1) Как понять какую клавишу нажали? Какой регистр опрашивать?
2) Чтобы вывести на экран БК-0010 (пусть будет стандартная БК так-скажем) - это вот с какого адреса начинается экран? Он всегда с такого адреса или где-то меняется?
3) Программка делается в виде .bin - а он с каких адресов загрузится - прямо с 0? Или с 1000?
4) Есть-ли некий аналог отслеживания кадровой развертки чтобы синхронизировать скорость программки?
CodeMaster
15.07.2023, 21:24
Вообще не программист, но за затравку:
1) Как понять какую клавишу нажали? Какой регистр опрашивать?
Не помню, но в доках описан регистр клавиатуры.
Он всегда с такого адреса или где-то меняется?
В 0010 да, с одного места - вторые 16КБ ОЗУ (кроме режима "сжатого" экрана).
он с каких адресов загрузится - прямо с 0? Или с 1000?
С какого загрузишь. Обычно с 1000 грузят, но иногда жертвуют стеком в начале и грузят с 400. Ниже 400 вектора прерываний.
ZX_NOVOSIB
15.07.2023, 21:38
А Elite в БК влезет? Имею в виду в 128 килобайтную бэкашку естественно
BlaireCas
15.07.2023, 22:22
А Elite в БК влезет?
Ну у вас и запросы :) Еще супер-марио пожелайте. (Наверное влезет, в спектрум 48к влезла)
И тут впал в ступор с простыми вопросами мол "а как?"
для УКНЦ запар куда больше =)))
1) по клавe копипастить не буду, лучше глянуть доки, книгу Зальцмана, например (есть в комплекте эмулятора gid'a)
2) физически экран всегда с 40000, но на БК есть регистр скролла, и верхняя видимая строка не всегда означает 40000 =)) вернее, стандартно верхняя строка начинается с 40000, каждая 100 байт, всего 400 строк (везде эти ваши любимые восьмеричные числа), но если дефолтное значение регистра поменять - строка с 40000 будет уже в другом месте, а весь экран сместится вниз или вверх, причем зациклеено (так называемый рулонный сдвиг)
3) первые два слова бинарника, собственно, определяют адрес загрузки и длину - почти как спектрум, только тут заголовок пришит к бинарю
4) прерывания по КС на десятке нет, простыми способами никак. извратившись, можно через таймер отсекать нужные промежутки размером в кадр, но начало кадра должен "помочь найти" юзер - эта технология реализована в игре от Manwe, Pong Charged. Рекомендую видео от автора, понятно рассказано и показано
https://www.youtube.com/watch?v=AXdZChLr6w8
BlaireCas
15.07.2023, 22:41
первые два слова бинарника, собственно, определяют адрес загрузки и длину
Вот это было неочевидно, спасибо.
CodeMaster
15.07.2023, 22:42
А Elite в БК влезет?
Там есть "типа Elite" - Непобедимый (https://r-games.net/bk001x/games/304-nepobedimyy.html)
BlaireCas
16.07.2023, 14:47
Что-то все-равно с форматом .bin затык какой-то.
В эмуляторе БК-0010-01 (бейсик) в бейсике набираю "MO" дальше M, набираю имя бинарника.
Но он загружает его по адресу 0. А запускает вообще неизвестно откуда.
Хотя я поставил первым словом допустим 0х200 в бинарнике. (вторым длину).
ZX_NOVOSIB
16.07.2023, 15:21
Там есть "типа Elite" - Непобедимый
вообще не то
это "типа Star Raiders"
BlaireCas
16.07.2023, 15:30
Немного разобрался с .bin. Можно делать без заголовков. Загружается через команду монитора М1000 (если нужен адрес 1000), стартует по команде S1000.
Вот уж емое БК "это вам не это!" :)
https://i.imgur.com/GzYI1yu.png
А Elite в БК влезет? Имею в виду в 128 килобайтную бэкашку естественно
Раумеется, влезет. Просто писать её некому. Все, кто может, и так заняты.
Марио, кстати, тоже должен влезть. Он же без скролла.
BlaireCas
16.07.2023, 18:09
Почитал как-говорится "инструкцию": http://www.emuverse.ru/wiki/%D0%91%D0%9A-0010_-_%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81% D1%82%D0%B2%D0%BE_%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D 0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8F
Стало немного более понятно. Клавиатура вообщем отлавливается таким образом.
bic #^B01000000, @#177660 ; allow keyboard interrupt
mov #KbdInt, @#60
...
KbdInt: mov R0, -(SP)
mov @#177662, R0
mov R0, KeyCurrent
...
Непонятно конечно как понять "отжатие" клавиши, но пока мне это не требуется.
Теперь разборки с таймером чтобы синхронизировать игрушку на 50фпс (а то слишком быстро шпарит)
Вот тут похоже самое непростое. :(
- - - Добавлено - - -
Нашел про таймер. https://code.google.com/archive/p/bk0010/wikis/Timer.wiki
Но как-говорится "смотришь в книгу видишь фигу". Сколько он должен отсчитать для 50фпс? Что это за Ft = Fosc? Мегагерцы процессора (3-4?)
Вектор прерывания лучше ставить до его разрешения :) А то вдруг кто-то успел нажать кнопку. Как только ты разрешишь прерывания, оно и случится.
Отжатие проверяется через bit #100, @#177716. Таймер считает один тик на 128 тактов процессора. Т.е. те самые 3 или 4. Можно включить дополнительные делители.
Количество тиков на кадр можно определить простым делением, но я опять напоминаю, что у БК длительность кадра -- 20,48 мс, а не ровно 20.
- - - Добавлено - - -
Кстати, можно писать прямо так:
KbdInt: mov @#177662, KeyCurrent
Это же не x86...
напоминаю, что у БК длительность кадра -- 20,48 мс, а не ровно 20
А это знать, в общем-то, ни к чему. Достаточно знать количество тактов на кадр: 192 такта в строке (для 3мгц), 320 строк. Отсюда и пляшем, программируя таймер. Manwe когда-то приводил выкладки с нужными значениями для регистров таймера, только не помню, тут или в БК-группе телеги.
Теперь разборки с таймером чтобы синхронизировать игрушку на 50фпс (а то слишком быстро шпарит)
Вот тут похоже самое непростое. :(
перед началом очередного цикла игры:
mov #40000,@#177706 ;начальное значение счетчика от балды
mloop: mov #20,@#177712 ;вкл счета от 40000 до нуля
. ..... ;тут делаем все, что надо для одного кадра игры
1w: cmp @#177710,#36000 ;смотрим, сколько осталось от 40000
bgt 1w ;к примеру, ждем пока не останется 36000
jmp @#mloop
Остается подобрать значение вместо 36000, которое устроит тебя по скорости игры.
BlaireCas
17.07.2023, 14:34
Всем помогавшим большое спасибо. Получилось сделать/перенести примитивную игрушку.
Сделано неоптимально (вместо вывода по словам, выводил тайлы по байтам ну и прочий кривой код).
Со звуком морочаться не стал. Непросто как-то хотя вроде и бипер-бипером.
Проапдейтил первый пост, бинарник там.
CodeMaster
17.07.2023, 17:56
Бинарник игры: Вложение 79202
.
Вложение не существует или не указан идентификатор (номер). Если вы уверены, что использовали правильную ссылку, свяжитесь с администрацией
BlaireCas
18.07.2023, 11:48
Вложение не существует
Ухты, не заметил как сломалось вложение (возможно CloudFlare этот иной раз бывают косяки с ним когда долго редактируешь пост)
Закинул еще раз.
UPD: Добавил несколько позорненьких :) звуков (но с ними веселей). Также выложил исходник (с кривыми кодами :)
CodeMaster
19.07.2023, 12:34
Закинул еще раз.
Для One Day Programming - хорошо. Если бы ещё графику взять из Bolder Dash 3 - была бы вообще топ.
BlaireCas
19.07.2023, 14:05
графику взять из Bolder Dash 3
А где его взять как-бы? Если там 16х16 - почему-бы и не добавить набор тайлов.
Все-равно там еще править надо инициализацию скроллинга экрана, а то на 40000 не устанавливаю начало.
UPD: нашел некий болдер разноцветный, подрихтовал тайлы, добавил (переключаются по кнопке 1 между моими/марио/болдер)
CodeMaster
19.07.2023, 18:33
нашел некий болдер разноцветный, подрихтовал тайлы
Спасибо. Хотя, я немного затупил и имел в виду вот этот (https://r-games.net/bk001x/games/32520-bolder-dash3.html), но забыл, что там используется палитра 11-й.
CodeMaster
27.08.2023, 22:21
Такой вопрос: а почему (по крайней мере первый десяток) комбинации появляются не рандомно, а одинаковые?
Powered by vBulletin® Version 4.2.5 Copyright © 2026 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot