PC-01 Lviv

It is currently 29 Mar 2024, 00:56

Forum Games WEB Tape Loader Twitter RSS

All times are UTC+03:00




Post new topic  Reply to topic  [ 105 posts ]  Go to page Previous 13 4 5 6 7 Next
Author Message
PostPosted: 13 Jun 2021, 21:13 
Offline
Site Admin
User avatar

Joined: 24 Jul 2008, 12:05
Posts: 1070
Quote:
Какой набор цветов нравится больше?
Оба варианта прекрасны!
Quote:
просто надо свою процедуру очистки экрана сделать, вернее, заливки нужным цветом)
Code:
	MVI A,0		;цвет
	STA 0BE38h	
	CALL 0EBBCh	;процедура заливки
Только не забудьте включить видео-режим перед этим.


Top
   
PostPosted: 13 Jun 2021, 23:00 
Offline

Joined: 20 Apr 2021, 05:09
Posts: 100
Отлично, спасибо, Zelya.

als, у меня подобная переключалка есть в Bolder16K для Спектрума по кнопкам 1 и 2. Также она есть и в версии Мутеля для DOS/CGA, тоже по 1 (меняется цвет фона) и 2 (меняется палитра).

Но с "Львовом" есть трудности. Мало менять только палитру, надо менять и цвета в самом наборе тайлов в памяти и на экране. Иначе мы никогда не получим нужную комбинацию цветов. Можно на это конечно забить. Или вообще не париться переключением, пусть цвета будут какие есть. А можно сделать совсем несложный алгоритм замены цветов на экране и в наборе тайлов (т.е. менять цвет 0 на c0, цвет 1 на c1, цвет 2 на c2 и цвет 3 на c3). Можно оперировать просто предусмотренными заранее наборами цветов, отобрав из них наиболее приятные комбинации. Как лучше сделать? Как бы мог выглядеть алгоритм циклической смены цветов? (по 1 меняется палитра, по 2 меняются цвета внутри тайлов)

Я конечно потестирую твой код. Спасибо.


Top
   
PostPosted: 13 Jun 2021, 23:39 
Offline

Joined: 18 May 2016, 19:55
Posts: 425
Zorko, ну ты пример вложенный пробовал ? "САС Лабиринт" смотрел ?
как по мне так достаточно такую процедуру внедрить которая просто порт меняет и получается меняется все в куче цвет+фон и нечего париться. :-)
Главное чтобы игрушка нормально работала а насчёт "раскраски", то можна и самому "наковырять" где там данные тайла и заменять на всё что кто-то хочет.
Ну вот что мне стоит написать процедуру подобную VarSpite подточенную исключительно под замену тайлов в готовом Булдер.ЛВТ ?!
Ну и лабиринты менять таким принципом!


Top
   
PostPosted: 14 Jun 2021, 01:00 
Offline
Site Admin
User avatar

Joined: 24 Jul 2008, 12:05
Posts: 1070
Quote:
А можно сделать совсем несложный алгоритм замены цветов на экране и в наборе тайлов
Здесь есть варианты.

1. Самый простой способ.
Ваш первый набор цветов ложится на пралитру 69. Переключаем на палитру 65, и, о чудо! У нас ваш второй набор цветов, и все по своим местам!
Более того, можно покликать по другим палитрам, где черный тоже идет вторым номером и получить интересные результаты.

Вобще, выбрав за основу черный, как основной, можно (соответственно его позиции) подобрать очень интересные варианты переключения. А если позволить заменить черный на другой темный (например, синий) вариантов станет еще больше.

2. Способ посложнее.
Завести список видео-режимов из пары: палитра-код.
Например, та же палитра 69: розовый, черный, голубой, белый.
Теперь возьмем палитру, например 35. Все бы хорошо, но цвета перепутаны.
Делаем так: в коде вывода графики читаем байт в аккумулятор и добавляем один NOP (код 00). Этот же код (00) присваиваем первому режиму (палитра 69). Второму режиму (палитра 35) присваиваем код 2F (инструкция CMA).
Теперь при переключении режима, мы, кроме установки нужной палитры, записываем поверх NOP-а нужный код. Для первого режима ничего не поменяется. А для второго ражима мы инвертируем аккумулятор и получим правильные места основных цветов. Но вместо розового - желтый.
Так можно поиграться со многими палитрами. А если кроме CMA взять другие инструкции, то можно сильно расширить диапазон смены цветов.

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

3. Когда важна скорость вывода графики.

Идея схожа с предыдущим пунктом. Но для динамической игры побайтовый вывод графики может сказаться на скорости. Поэтому можно пожертвовать скоростью в другом месте.
При переключении режима, просто пройти нужной инструкцией (CMA или XRI чего-то там) по всем спрайтам в памяти.

Есть еще варианты, но для динамической игры они вряд ли подойдут.

Не зубдьте при переключении палитры устанавливать старший бит в 1, иначе в игре не будет звука. Т.е. палитра 69 = 69+128
Quote:
Как бы мог выглядеть алгоритм циклической смены цветов?
Все варианты записать в массив в памяти.
Т.е. для варианта 1, будет массив, типа
.db 69, 65

Для варианта 2:
.db 69, 0, 35, 0x2f

Хотя я бы предложил сделать выбор палитры в опциях игры (если такое в ней вобще есть).

Отдельно менять палитру и цвета тайлов не имеет смысла.


Top
   
PostPosted: 14 Jun 2021, 05:18 
Offline

Joined: 20 Apr 2021, 05:09
Posts: 100
У нас есть успехи с тайлами шириной 16 точек, господа :-)
Уже практически играбельно, даже можно проходить игру. Но ещё есть глюки.

Zelya, прошу помощи в адаптации подпрограммы вертикального скроллинга вверх:

/C/GrApp.c -> GrApp_ScrollUp

чтобы скроллила так же само, но только вниз. У меня воображения не хватает :-)

Подпрограмма вообще шикарная. Заработала сразу без проблем.

Ещё такой момент. На Z80 инструкция инкремента регистра работает быстрее, чем регистровой пары. Если то же самое имеет место быть и на КР580, я бы предложил в подпрограмме скроллинга увеличивать тоже регистр, а не пару (т.е. INR L вместо INX H). Таких инструкций для перемещения строки экрана выполняется достаточно много, так что будет небольшой выигрыш. Бояться, что неправильно посчитает, видимо, не надо (там где цифра круглая, т.е. возможен перенос в старший регистр пары, можно поставить один INX). Там же идёт перебор адресов одной линии экрана, т.е. в рамках 0..3F, 40..7F, 80..BF, C0..FF - то есть, перенос возможен только в самом конце в последнем INX.

Но если выигрыша не будет, то не будем париться.

Никакого замедления в игре сейчас нет, два монстра бегают визуально примерно как на Спектруме. Есть ещё потенциал чтобы ускорить: переписать вычисление адресов тайлов и доступ к массиву на машкод, я пока по-быстрому сделал, лишь бы как-то работало).

Да, после запуска Bolder16.lvt жать кнопку вправо.

Есть пара стримов по играм с конкурса:


Quote:
Zorko, ну ты пример вложенный пробовал ? "САС Лабиринт" смотрел ?
Конечно! Хардкорненькая игра получилась!


Attachments:
Bolder16K-Lviv-0.0.6.zip [51.98 KiB]
Downloaded 480 times
Top
   
PostPosted: 14 Jun 2021, 09:46 
Offline

Joined: 18 May 2016, 19:55
Posts: 425
КЛАСНО ВСЁ ПОЛУЧИЛОСЬ!
А скорость то максимальная ?
Не знаю правильно ли, но мне кажеться, что нужно бы немного увеличить, хотя это тоже сомнительно. Ну или с каждым уровнем чтобы увеличивалась или с каждым съеденным алмазом. У меня в "лабиринте" так и сделано по времени, съеденным кладам и по номеру уровня, ну и в самом уровне чем дольше играешь тем больше скорость становится.
Quote:
Да, после запуска Bolder16.lvt жать кнопку вправо.
я так понял, что это временно...
или же впиши в начало чтобы знать что делать для продолжения.

Вот теперь, есть хороший пример рассматривать как это всё работает для ПК-01.

XDev можна брать тот, что я описывал как устанавливать ? т.е. вот этот
Оберон. Установка на Windows XP,"7" (32bit) среды разработки "XDev".
viewtopic.php?f=20&t=395

...или же нужны какие-то обновления ?

Буду пробовать "ковырять". Вот только ж опять...
эти все СИшные "приколы".... да эти еще файлы ".oh" туда тоже ж надо что-то как-то прописывать...
и я так и не понял как они компилируются ?...
как понять, что там всё правильно написано без ошибок ?
их отдельно ж надо компилировать как-то...
ты ж толком документированно не даёшь ответов на такие вопросы...
считаешь, что сами должны разбираться... а чтобы самим разбираться надо за что-то цепляться....
ты в МАДЛ видел таблицу мнемоники КР580 и МАДЛ ? ВСЕХ КОМАНД!
во и тут должно такое быть! чтобы можно было посмотреть по таблице! А не догадывать что такое "JR C,RET_FALSE$ " ? или "LD L,#1" ? что означает "LD" можна еще догадаться. а "диезка" в "#1" ? а "доллар" в конце "RET_FALSE$" ? и почему в конце?
хотя я догадываюсь, что ты скажешь, что то СИшные приколы, чтобы я СИ еще учил...
Неправильно это все!
Все должно быть "завязано" на то чтобы в среде Оберона можна было бы делать! Как впрочем и в том же дельфи и паскале! Все что невозможно сделать конструкциями паскаля, предлагается не СИ, а АСМ-вставки ПРИЧЁМ "НЕ ОТХОДЯ ОТ КАССЫ", прямо там где программу пишеш!
Слушай, а в Обероне конце концов можна так сделать чтобы "не вылазить" из окна по всяким "Control.c" и "Control.oh" можна было бы прямо в окне писать на СИ или еще как-то....


Top
   
PostPosted: 14 Jun 2021, 10:00 
Offline

Joined: 18 May 2016, 19:55
Posts: 425
Доп.
Так. Поехали все заново. XDev установил с той темы что я создавал.
есть папка Bolder16K-Lviv-0.0.6 есть C:\XDev\ и C:\z88dk\
куда что копировать чтобы он нормально компилировался ?
было копировал всю папку Bolder16K-Lviv-0.0.6 в C:\XDev\
компилирует как-то с ошибками, Bolder16K.lvt открыть не может! (нет "шапки" в ЛВТ такой как должна быть это уж точно!)
далее делаю пробы....


Top
   
PostPosted: 14 Jun 2021, 10:31 
Offline

Joined: 18 May 2016, 19:55
Posts: 425
Доп.
копировал из ...\Bolder16K-Lviv-0.0.6\ в C:\XDev\K580Dev\
НИЧЕГО НЕ КОМПИЛИРУЕТ!


Top
   
PostPosted: 14 Jun 2021, 15:57 
Offline

Joined: 20 Apr 2021, 05:09
Posts: 100
Quote:
А скорость то максимальная ?
На этом этапе разработки - да. А почему ты спросил? :-)
Quote:
я так понял, что это временно...
или же впиши в начало чтобы знать что делать для продолжения.
Это конечно временно. Сам случайно нащупал. Я же пока что сделал поддержку только для курсорных кнопок, как ты показал. Остальные кнопки надо опрашивать по другим портам, которых я не знаю.
Quote:
XDev можна брать тот, что я описывал как устанавливать ? т.е. вот этот
Да. Я часто обновляю транслятор, но тут вроде бы критичного ничего за это время не менялось.
Quote:
эти все СИшные "приколы".... да эти еще файлы ".oh" туда тоже ж надо что-то как-то прописывать...
и я так и не понял как они компилируются ?...
как понять, что там всё правильно написано без ошибок ?
их отдельно ж надо компилировать как-то...
ты ж толком документированно не даёшь ответов на такие вопросы...
Всё это уровень Си и ассемблера, хорошо документированный где-то ещё. .oh - это на самом деле .h (интерфейсный файл для Си, так называемый хидер), просто переименованный, чтобы не конфликтовал с одноимёнными сишными хидерами, например, наш Math.oh с сишным стандартным math.h
Quote:
ты в МАДЛ видел таблицу мнемоники КР580 и МАДЛ ? ВСЕХ КОМАНД!
во и тут должно такое быть! чтобы можно было посмотреть по таблице! А не догадывать что такое "JR C,RET_FALSE$ " ? или "LD L,#1" ? что означает "LD" можна еще догадаться. а "диезка" в "#1" ? а "доллар" в конце "RET_FALSE$" ? и почему в конце?
хотя я догадываюсь, что ты скажешь, что то СИшные приколы, чтобы я СИ еще учил...
Всё, что ты тут перечислил, это встроенный в SDCC _ассемблер_, просто записанный мнемониками Z80. Доллар указывает на локальность метки (хотя я и сам не знаю, так ли это, потому что для глобальных есть директива .GLOBL), а решётка нужна перед всеми числами. Ну вот так придумали в сишном асме. Это всё элементарные вещи, и они тебе не нужны. Пиши в мнемониках КР580 без долларов и без решёток.
Quote:
Неправильно это все!
Все должно быть "завязано" на то чтобы в среде Оберона можна было бы делать! Как впрочем и в том же дельфи и паскале! Все что невозможно сделать конструкциями паскаля, предлагается не СИ, а АСМ-вставки ПРИЧЁМ "НЕ ОТХОДЯ ОТ КАССЫ", прямо там где программу пишеш!
А то, что тебе не понравилось, и есть асм-вставки. В Bolder16K кроме этих вставок из Си юзается много чего просто для эффективности. У нас слабая дохлая ретро-машинка, поэтому я юзаю уровень Си чтобы добиться лучших результатов. Этому я учился несколько лет. Но всё это документировать нет смысла, потому что это не относится к Оберону и к моей среде. Можно все эти вещи и не юзать. А вот что стоило бы задокументировать - так это нестандартные расширения Оберона, которые я тоже использую. Но для них есть отдельные примеры в виде исходников. Вот как-то так.
Quote:
Слушай, а в Обероне конце концов можна так сделать чтобы "не вылазить" из окна по всяким "Control.c" и "Control.oh" можна было бы прямо в окне писать на СИ или еще как-то....
Не, нельзя. А раньше я даже и компиляцию запускал вообще вручную сторонним батником, пока не сделал его вызов по F12.
Quote:
Доп.
Так. Поехали все заново. XDev установил с той темы что я создавал.
есть папка Bolder16K-Lviv-0.0.6 есть C:\XDev\ и C:\z88dk\
куда что копировать чтобы он нормально компилировался ?
было копировал всю папку Bolder16K-Lviv-0.0.6 в C:\XDev\
компилирует как-то с ошибками, Bolder16K.lvt открыть не может! (нет "шапки" в ЛВТ такой как должна быть это уж точно!)
далее делаю пробы....
Не жди, что всё заработает с пол-пинка. Это же как МАДЛ, вечно что-то отваливается. Ругаться тут нет смысла - надо разбираться, чтобы понимать на каком уровне у тебя ошибка. До вызова утилиты-конвертера и формирования .lvt точно доходит?

Копировать проект внутрь XDev не нужно, держи его в любой произвольной папке.

Открой все модули *.Def и *.Mod из /Mod и скомпилируй их по F11 (да, каждый отдельно, все вместе и сразу нельзя - Build All тут нет, но это только один раз - потом перекомпилируешь только то, что менял).

Потом открой Bolder16K.Mod и сбилдь его и запусти по F12.

Если .lvt получается какой-то не такой, то это как минимум странно. Вышли покажи. А ещё лучше опиши как ты его получил, мне аж интересно.


Top
   
PostPosted: 14 Jun 2021, 17:00 
Offline

Joined: 18 May 2016, 19:55
Posts: 425
Quote:
Quote:
А скорость то максимальная ?
На этом этапе разработки - да. А почему ты спросил? :-)
Ну я же писал - возможно немного увеличить надо.
Ну это моё возможно субъективное мнение!
Quote:
Это конечно временно. Сам случайно нащупал. Я же пока что сделал поддержку только для курсорных кнопок, как ты показал. Остальные кнопки надо опрашивать по другим портам, которых я не знаю.
Quote:
Для подключения клавиатуры в компьютере имеется вторая микросхе-
ма КР580ВВ55. Её адреса:

D0 порт А - вывод
D1 порт В - ввод
D2 порт С - С(0-3) вывод, С(4-7) ввод
D3 RS - регистр состояния

Порты подключены, как показано на рис. 4. Путём сканирования "0"
на фоне единиц (порты А и С(0-3)) определяется "столбец" отслеживае-
мых клавиш. После ввода (порты В и С(4-7)) окончательно выявляется на-
жатая клавиша по наличию "0" в определённом разряде. Если ни одна кла-
виша не нажата, то вводятся все "1".
Code:
			  порт А (D0)     вывод
		  -------------------------------
		 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
		  -------------------------------
		   |   |   |   |   |   |   |   |
		  --- --- --- --- --- --- --- ---
		  / \ / \ / \ / \ / \ / \ / \ / \ 
		  --- --- --- --- --- --- --- ---
		   |   |   |   |ПРО|   |   |   |	  +5 В 
       ---       ВР| ; |   |СТР|БЕЛ| П | Г | 6 |
      |   |      .-* .-* .-* .-* .-* .-* .-* .-*    ----   |
      | 0 |------*-|-*-|-*-|-*-|-*-|-*-|-*-|-*-|---|    |--*
      |   |        |   |   |   |   |   |   |   |    ----   |
      |---|      Я |РУС|   |"G"| Б | О | Ш | 7 |           |
      |   |      .-* .-* .-* .-* .-* .-* .-* .-*    ----   |
      | 1 |------*-|-*-|-*-|-*-|-*-|-*-|-*-|-*-|---|    |--*
      |   |        |   |   |   |   |   |   |   |    ----   |
      |---|      Ч | СУ| Й |"В"| Ю | Л | Щ | 8 |	   |
      |   |      .-* .-* .-* .-* .-* .-* .-* .-*    ----   |
      | 2 |------*-|-*-|-*-|-*-|-*-|-*-|-*-|-*-|---|    |--*
      |   |        |   |   |   |   |   |   |   |    ----   |
      |---|      Ь | П | Н | 5 | НР| ЗБ| ВК| ГТ|           |
      |   |      .-* .-* .-* .-* .-* .-* .-* .-*    ----   |
 порт | 3 |------*-|-*-|-*-|-*-|-*-|-*-|-*-|-*-|---|    |--*
      |   |        |   |   |   |   |   |   |   |    ----   |
   В  |---|      Т | А | Е | 4 | _ | . | ПС|ТАБ|	   |
  D1  |   |      .-* .-* .-* .-* .-* .-* .-* .-*    ----   |
 ввод | 4 |------*-|-*-|-*-|-*-|-*-|-*-|-*-|-*-|---|    |--*
      |   |        |   |   |   |   |   |   |   |    ----   |
      |---|      И | В | К | 3 |ЛАТ| Э | * | = |	   |
      |   |      .-* .-* .-* .-* .-* .-* .-* .-*    ----   |
      | 5 |------*-|-*-|-*-|-*-|-*-|-*-|-*-|-*-|---|    |--*
      |   |        |   |   |   |   |   |   |   |    ----   |
      |---|      М | Ы | У | 2 | / | Ж | Х | 0 | 	   |
      |   |      .-* .-* .-* .-* .-* .-* .-* .-*    ----   |
      | 6 |------*-|-*-|-*-|-*-|-*-|-*-|-*-|-*-|---|    |--*
      |   |        |   |   |   |   |   |   |   |    ----   |
      |---|      С | Ф | Ц | 1 | , | Д | З | 9 | 	   |
      |   |      .-* .-* .-* .-* .-* .-* .-* .-*    ----   |
      | 7 |------*---*---*---*---*---*---*---*-----|    |--*
      |   |					    ----
       ---
Quote:
{Процедура Опроса нажатия кл "2"}
{Byte_Color - переменная установленного цвета}
LabelA(Proc_Color);
{ изменения цвета нажатием на '2'}
MviA($EF);Out_($D0);// посылаем на порт $D0, '11101111'{$EF}
In_($D1); // опрашиваем порт $D1
Cpi($BF); //'10111111'){BF}); // сравниваем нажата ли "2"
Jnz(Proc_Color_RET);// если не нажата выход

{если же нажата .....}
{Byte_Color = Byte_Color+4}
Lda(Byte_Color); MovBA; MviA($04); AddB; Sta(Byte_Color);
Out_($C1); // { отправиляем Byte_Color на порт $C1 }

{Ожидаем отжатия "2"}
LabelA(Proc_Color_cycle1);
MviA($EF);Out_($D0); // посылаем на порт $D0, '11101111'{$EF}
In_($D1); // опрашиваем порт $D1
Cpi($BF); //'10111111'){BF}); // сравниваем нажата ли "2"
Jz(Proc_Color_cycle1); // если не ОТЖАТА, - переход LabelA(Proc_Color_cycle1);

LabelA(Proc_Color_RET); RET;
LabelA(Byte_Color);DB($00); // переменная цвета
// конец процедуры
ВНИМАТЕЛЬНО РАССМОТРИ КАК УСТРОЕН ОПРОС КНОПКИ "2" НА НАЖАТОСТЬ И ОТЖАТОСТЬ ПО РАСПАЙКЕ КЛАВИАТУРЫ НА ПОРТЫ!
ОСОБЕННО ТО ЧТО ПОДАЕТСЯ И "ИЗЫМАЕТСЯ" НА КАКОЙ ПОРТ В ДВОИЧНОЙ СИСТЕМЕ
Т.Е,
// посылаем на порт $D0, '11101111'{$EF}
Cpi($BF); //сравниваем с '10111111'){BF});
Коль я в этом разобрался, думаю что и ты разберёшься!
Более ничего подсказать не могу так как мне было нужно только лишь кнопки "1", "2","3" и любая_другая_кроме_них (любая_другая - "защита" в "лабиринт")!
Попробую вырезать из исходников "Лабиринта" опрос всех кнопок! Но это наверное не сегодня!

( Продолжение следует... :-) )


Top
   
PostPosted: 14 Jun 2021, 17:14 
Offline

Joined: 18 May 2016, 19:55
Posts: 425
ДОП.
Я создал тему
FoxHunt на P_EMUL2021
viewtopic.php?f=8&t=402
и походу буду взаимодействовать с XDev по теме FoxHunt для РК86
и походу и Булдера для ПК-01.
Так что спасибо за всё что написал по поводу "поодиночной" компиляции и т.д.
то все буду читать и вникать по мере необходимости!
Quote:
Это же как МАДЛ, вечно что-то отваливается.
О! :-) Неужели ты МАДЛом пользуешься ?! :-)
И что ж там у тебя постоянно отваливается ?! :-)
Ты пиши не стесняйся!
Мне аж интересно! Потому, что там вроде как и отваливаться нечему! :-)


Top
   
PostPosted: 14 Jun 2021, 17:39 
Offline

Joined: 18 May 2016, 19:55
Posts: 425
По поводу опроса клавиатуры.
Слушай у меня МАДЛ сейчас не такой примитивный какой я выложил :-)
он у меня уже МД04 или дае МД06 еще не придумал какой именно :-)
И сам теперь хрен разберусь! :-)
Да еще и устройство игрушки уже не помню.
Брошу куски сюда какие они есть и опишу как смогу внизу под ними.
Куски нужны вдруг я где ошибся в описании!


Проверка на нажатие "3" и отжатие...
Code:
BEGINPROCEDURE(pStartOrMenu);
Ar($EF);OUT_($D0);IN_($D1);IfAisNot($DF,gStartOrMenu_m2);

Ifis(bConditionOfPlay{состояние игры},4,gStartOrMenu_m3);
R(bConditionOfPlay{состояние игры},0);
Goto_(gStartOrMenu_m1);

LABELg(gStartOrMenu_m3);
R(bConditionOfPlay{состояние игры},$0F);

LABELg(gStartOrMenu_m1);Ar($EF);OUT_($D0);IN_($D1);IfAis($DF,gStartOrMenu_m1);

LABELg(gStartOrMenu_m2);
ENDPROCEDURE;
п1: Подаем $EF на OUT_($D0)
опрашиваем IN_($D1);
сравниваем с $DF, если не равно - значит не нажата "3", - выход!
если нажата:
п2: Подаем $EF на OUT_($D0)
опрашиваем IN_($D1);
сравниваем $DF, если равно, - то повторяем п2 (т.е. клавиша не отжата!)


Top
   
PostPosted: 14 Jun 2021, 17:44 
Offline

Joined: 18 May 2016, 19:55
Posts: 425
Аналогичная по нажатию на "1" только число $7F вместо $DF.

Проверка на нажатие "1" и отжатие...
Code:
BEGINPROCEDURE(pPause);
Ar($EF);OUT_($D0);IN_($D1);IfAisNot($7F,gPause_m2);
x(bfPause{флаг паузы},$FF);
LABELg(gPause_m1); Ar($EF);OUT_($D0);IN_($D1); IfAis($7F,gPause_m1);
LABELg(gPause_m2);
PROC(pRndS);
ENDPROCEDURE;
п1: Подаем $EF на OUT_($D0)
опрашиваем IN_($D1);
сравниваем с $7F, если не равно - значит не нажата "1", - выход
если нажата
п2: Подаем $EF на OUT_($D0)
опрашиваем IN_($D1);
сравниваем $7F, если равно, то повторяем п2 (т.е. клавиша не отжата!)


Last edited by als on 14 Jun 2021, 17:50, edited 1 time in total.

Top
   
PostPosted: 14 Jun 2021, 17:49 
Offline

Joined: 18 May 2016, 19:55
Posts: 425
Ну такую я тебе выкладывал! Изменение порта цвета!
Ну пусть еще раз на всякий случай...

Проверка на нажатие "2" и отжатие...
Code:
BEGINPROCEDURE(pColor);
Ar($EF);OUT_($D0);IN_($D1);IfAisNot($BF,gColor_m2);

P(bGeneralColorPlay{цвет игры},$04);OUT_($C1);

LABELg(gColor_m1);Ar($EF);OUT_($D0);IN_($D1);IfAis($BF,gColor_m1);

LABELg(gColor_m2);
ENDPROCEDURE;
п1: Подаем $EF на OUT_($D0)
опрашиваем IN_($D1);
сравниваем с $BF, если не равно - значит не нажата "2", - выход!
если нажата
п2: Подаем $EF на OUT_($D0)
опрашиваем IN_($D1);
сравниваем $BF, если равно, то повторяем п2 (т.е. клавиша не отжата!)


Top
   
PostPosted: 14 Jun 2021, 17:58 
Offline

Joined: 18 May 2016, 19:55
Posts: 425
Проверка на нажатие "любая" (из основной клавиатуры)....
Code:
BEGINPROCEDURE(pKeyO);
R(bKeyProtect,$00);
OUT_($D0);IN_($D1);Ax($FF);
_rA(bKeyProtect);
ENDPROCEDURE;
п1: Подаем $00 на OUT_($D0)
опрашиваем IN_($D1);
A = A xor $FF
Если A не равно нулю - клавиша нажата!


Top
   
Display posts from previous:  Sort by  
Post new topic  Reply to topic  [ 105 posts ]  Go to page Previous 13 4 5 6 7 Next

Forum Games WEB Tape Loader Twitter RSS

All times are UTC+03:00


Who is online

Users browsing this forum: No registered users and 1 guest


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
cron
Powered by phpBB® Forum Software © phpBB Limited