Умные люди плавучку уже выцепили (синтаксис z80). В принципе и в дизассембере 2.5 (синтаксис 8080), который я выкладывал примерно оно, но тут причесано и с комментариями.
Умные люди плавучку уже выцепили (синтаксис z80). В принципе и в дизассембере 2.5 (синтаксис 8080), который я выкладывал примерно оно, но тут причесано и с комментариями.
svofski(16.02.2023)
С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
В целом то что задумал сделать похоже получается (хотя и со скрипом, я думал на Бейсике быстрее будет, но оказалось при незнании тонкостей Бейсика на Вектор можно подолгу застрять на всякой ерунде) - т.е. сделать что-нибудь необычное-интересное используя только штатные команды Бейсика. Возможно и будут вставки машинных кодов, но пока надеюсь без них обойтись. Однако встречаются моменты, которые я не знаю пока как можно решить, например:
1. Команда INKEY¤ оказывается сохраняет нажатые клавиши в некий буфер и соответственно когда игрок нажимает клавишу например ВПРАВО то всё время пока она нажата код этой клавиши пишется в буфер - это приводит к тому что когда игрок нажимает ВЛЕВО то персонаж попрежнему бежит ВПРАВО т.к. INKEY¤ выдаёт из буфера всё что накопилось до этого, поэтому актуально поменять направление не получается.
Конечно с таким управлением невозможно нормально играть.
На данный момент я решил использовать такой подход
1100 V=ASC(INKEY¤):IF V<>255 THEN 1100
таким образом "выкачивается"-обнуляется буфер перед тем как начнётся новый опрос клавиатуры.
Это немного помогает, но всё равно хочется чего-то получше.
Есть ли способ побороть эту проблему с помощью команд Бейсика ?
Например я подумал что вероятно через команду PEEK можно где-то в памяти прочитать именно то какая клавиша СЕЙЧАС нажата. Кто-нибудь знает адресс этой ячейки ?
2. По замыслу проекта главный герой должен улететь на ракете в космос. И тут без аппаратного скрола не обойтись. Возможно команда POKE по адресу ячеки скроллинга будет решением. Кто-нибудь знает адресс этой ячейки ?
Вектор-06Ц reboothttp://metamorpho-games.blogspot.com/p/blog-page.html
Если ограничиться командами бейсика, то есть два частичных решения:
1. Опрашивать клавиши СС и РУС/ЛАТ с использованием INP(1). Еще там клавиша УС, но, насколько помню, она приостановит выполнение программы.
2. Опрашивать джойстик (тоже INP).
В детстве я для себя радикально решил эту проблему машиннокодовой вставкой.
Ячейки бейсика описаны в vector-user 1 (сдвиг экрана - 771). Еще кажется в информационной бейсиковской программе, но тут надо уточнить.
Последний раз редактировалось ivagor; 24.02.2023 в 21:00. Причина: УС<->CC
metamorpho(22.02.2023)
С INKEY$ Бейсика не получается нормально читать клавиатуру.
Пришлось машинный код использовать. Однако программа виснет.
Вот код Бейсика:
4 HIMEM &7FF0
5 RESTORE 900 : REM ЗАГРУЗКА МАШИННЫХ КОДОВ
6 AD=&7FF1
7 FOR I=1 TO 9
8 READ B:POKE AD,B:AD=AD+1
9 NEXT I
..................
215 V=USR(&7FF1): REM ОПРОС КЛАВИАТУРЫ
220 IF V=239 THEN RX=RX-1:GOTO 250
221 IF V=191 THEN RX=RX+1:GOTO 250
222 IF V=223 THEN RY=RY-1:GOTO 266
223 IF V=127 THEN RY=RY+1:GOTO 266
.................
900 DATA &F3,&3E,&FE,&D3,&03,&DB,&02,&FB,&C9
Это код подпрограммы (которая прописана в строке 900)
F3 DI
3E FE MVI A,0FEH ; ПРОВЕРКА НАЖАТИЯ НА КЛАВИШИ ИГРОВОГО РЯДА.
D3 03 OUT 03
DB 02 IN 02
FB EI
C9 RET
Насколько я понял (прочитал) в переменную V заносится значение аккумулятора при выходе из подпрограммы по USR.
Что не так с моей подпрограммой ?
Вектор-06Ц reboothttp://metamorpho-games.blogspot.com/p/blog-page.html
Нужно опрашивать клавиатуру с привязкой к прерыванию и задавать режим ВВ55. Можно например как в baskeys - один раз внедряемся в прерывание и потом берем коды клавиш из 7FF8 (курсор) и 7FF9 (пробел и компания)
metamorpho(23.02.2023)
metamorpho, На векторе нельзя так просто взять и опросить клавиатуру, т.к. порты клавиатуры по совместительству еще являются портами видеоконтроллера (отвечают за скролинг и цвет палитры), поэтому опрос клавы приведет к артифактам на экране. клаву опрашивают во время обратного хода луча т.е. в обработчике прерывания, к тому же порт B ВВ55 на время опроса клавы надо переключать направление порта, а потом возвращать в прежнее состояние.
Здесь можно скачать актуальные версии Virtual Vector (VV)
metamorpho(23.02.2023)
Запускаю baskeys она выдаёт мерцающие точки и тире-артефакты и перестаёт реагировать на клавишу F12 (похоже виснет).
..................
......................... прошло несколько минут
А нет ВСЁ РАБОТАЕТ - настроил (вставил задержку между выводом print и палитру немного поменял) вроде как.
Последний раз редактировалось metamorpho; 23.02.2023 в 23:15.
Вектор-06Ц reboothttp://metamorpho-games.blogspot.com/p/blog-page.html
Интересно, что проблему выявил только VV (в v06x-godot не так просто попробовать, а в emu и emu80 было нормально). Надеюсь исправленный вариант будет нормально работать везде.
- - - Добавлено - - -
Забыл дополнить, что адреса для PEEK сдвинулись - 7FFC и 7FFD
Upd: поправил проверку повторного запуска
Upd 01.03.2023: добавил архив с BAS и TXT полученными конверсией в Vector06CBasic.exe
Последний раз редактировалось ivagor; 01.03.2023 в 16:04.
metamorpho(24.02.2023)
ivagor, спасибо !!
Да я использую VV.
Теперь управление более менее играбельное. Хотя скорости не хватает (для разнообразия переключаю на 12 Мгц и всё летает)
Заметил интересную особенность baskeys - после первого запуска всё работает, потом нажимаю F12 и снова RUN и на втором запуске программа красиво (из эффекта зависания можно делать демку) виснет.
Вектор-06Ц reboothttp://metamorpho-games.blogspot.com/p/blog-page.html
Забыл, что после доработки сместились не только ячейки с данными клавиатуры, но и адрес команды перехода. Проверку в строке 25 исправил
- - - Добавлено - - -
Кстати, кроме отсутствия буферизации дополнительная фича - возможность опрашивать несколько клавиш одновременно, правда тут надо аккуратно, в байте писали про ограничения реала.
metamorpho(24.02.2023)
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)