nedoPC.org

Electronics hobbyists community established in 2002
Atom Feed | View unanswered posts | View active topics It is currently 28 Mar 2024 06:00



Reply to topic  [ 111 posts ]  Go to page Previous  1, 2, 3, 4, 5, 6, 7, 8  Next
1816ВЕ48 
Author Message
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Lavr wrote:
Я даже попытался сыграть в "Цифровых пришельцев" онлайн, но что-то с управлением не справился... :lol:

P.S. Xa!... Это я правила не прочитал... думал просто стрелялка... Прежде чем стрелять - надо зарядить
пушку до "мощности" захватчика: подлетает 6 - заряжаем до 6, и - стреляем! Только так...
8)

Со второго захода, зная правила, у меня уже лучше пошло! :lol:
В первом туре на 200 баллов настрелял! :wink:
Attachment:
ard_g4.PNG
ard_g4.PNG [ 31.95 KiB | Viewed 7756 times ]

Кто хочет попробовать? :wink: Тут: Arduboy Emulator Online

Хотя я покликал с целью глянуть - насколько игра быстрая, и получится ли играть в Proteus...
На мой взгляд - достаточно медленно, и увлекательно! :kruto:

_________________
iLavr


29 Nov 2021 14:05
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Существует-таки вариант игры Digital Invader на микроконтроллере...
Attachment:
c8dc99e1a.jpg
c8dc99e1a.jpg [ 47.65 KiB | Viewed 7738 times ]

Но 1816ВЕ48 точечное поле в режиме динамической индикации скорее всего не потянет... :-?

_________________
iLavr


29 Nov 2021 16:06
Profile
Maniac

Joined: 15 Jan 2019 15:48
Posts: 326
Location: Украина, Луганская обл.
Reply with quote
Lavr wrote:
Но 1816ВЕ48 точечное поле в режиме динамической индикации скорее всего не потянет... :-?

Откуда такие выводы ?
То есть динамическое сканирование АТ-клавиатуры тянул, а динамическую индикацию - "не потянет" ???


30 Nov 2021 03:52
Profile
Devil

Joined: 06 Oct 2006 03:17
Posts: 856
Location: г.Лянтор,Сургутского р-на,ХМАО
Reply with quote
Конечно на фото представлен современный микроконтроллер (не разглядеть марку). И он позволяет подключать напрямую к пинам разряды светодиодного индикатора. С 1816ВЕ48 такое не прокатит. Согласно энциклопедии по МК48/51 (Сташин В.В. и др. - Проектирование цифровых устройств на однокристальных микроконтроллерах) необходим внешний дешифратор и на разряды индикатора как минимум буферные элементы.

Attachment:
ind.png
ind.png [ 91.01 KiB | Viewed 7699 times ]


30 Nov 2021 09:46
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
fifan wrote:
Конечно на фото представлен современный микроконтроллер (не разглядеть марку). И он позволяет подключать напрямую к пинам разряды светодиодного индикатора. С 1816ВЕ48 такое не прокатит.

Да, ты прав... Я тоже разглядывал-разглядывал марку этого микроконтроллера и не разглядел... :-?
И увеличивал фото... и контрастность менял - не увидел. Хотя просто лишь было интересно!

Потому как покупать я такой контроллер конечно же не буду, вся идея, которая тащит меня "в бой" -
сделать что-то интересное на микроконтроллере из убитой клавиатуры. Иначе я бы и не стал этим заниматься.

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

Image

Такие вот исходные ограничения на проект... 8)

_________________
iLavr


30 Nov 2021 10:47
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Lavr wrote:
Я тут озадачился на тему: а нет ли какой-либо простенькой игрушки на 1816ВЕ48 ? :roll:
Ну чтобы там 2 ... 4 кнопки управления и вывод на АЛС318 или, может быть, линейку светодиодов...

Ну, в общем-то HARDWARE-часть под эту игрушку я подготовил:
Attachment:
Dig_HEL.PNG
Dig_HEL.PNG [ 28.82 KiB | Viewed 7686 times ]

И немного поразмышлял над SOFTWARE-половиной задачи...

Хотя мне лучше думается пока в кодах 580ВМ80, поэтому размышлял я вот так: :lol:
Attachment:
SP_HELLO.PNG
SP_HELLO.PNG [ 2.37 KiB | Viewed 7686 times ]

Потому что, собственно говоря, игрушка - это задача реального времени, и вся проблема в таймингах.
И я прикидывал, как формируются тайминги в игрушках "Специалиста", где нет прерывания по таймеру.
В 1816ВЕ48 прерывание по таймеру есть и по нему осуществляется сканирование индикатора.
Значит можно взять этот временной интервал за единицу времени в игре и к нему привязывать
остальные игровые события...

Я внимательно пронаблюдал этот вариант игрушки: Arduboy Emulator Online
Враги появляются с периодичностью примерно 1 секунда или чуть больше.

И за это время надо успеть нажать на кнопку до 10 раз по идее...
Но самый неприятный момент, что кнопка "AIM" работает только на инкремент, то есть, если
мы шлёпнули врага под номером 6, а следующий враг - 5, то надо прокрутить 7...9, n а потом 0 ... 5.
Тыкая мышью, лично я это практически не успеваю... Надо обдумать этот момент...
Возможно, для "AIM" следует сделать 2 кнопки: "UP" и "DOWN" .
Игра, в которую ты заведомо проигрываешь - не интересна... :-?

А вот эмулятор Arduboy Emulator Online меня очень удивил! :roll:
Я-то думал, что это - игрушка на JS... А всё реально оказалось иначе!
Это - ЭМУЛЯТОР АРДУИНО на JS !!! :o И он "играет" реальный код этой игрушки на АРДУИНО !!!

Если поводить мышью по вот этой панели игрушки:

Image

В некоторых местах (на разъёмах и микросхемах) курсор меняется на руку с пальцем, и если нажать,
можно повернуть игрушку на бок, вызвать отладчик и посмотреть исходный код игры!
Затейливо... очень затейливо!!! :ebiggrin:

_________________
iLavr


30 Nov 2021 11:24
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Lavr wrote:
И немного поразмышлял над SOFTWARE-половиной задачи...

Засада случилась там, где я её и ожидал... :-? Целочисленный и простой генератор случайных чисел
на отрезке 0 ... 11. :( Чтобы "Цифровые враги" случайно выбегали...

С генераторами ПСЧ всегда какая-то засада случается... даже RND(X) в BASIC - плохой генератор.

В общем, не мудрствуя лукаво, взял я простую реализацию линейного конгруэнтного генератора:
СледующееЧисло = (A * ПредыдущееЧисло + B) MOD N
Code:
RAND: LD  A,17 ; любое начальное значение
      LD  B,A
      ADD A,A
      ADD A,A
      ADD A,B  ; это умножение на 5, т.е. A=5
      INC A    ; это + B=1
      LD (RAND+1),A

И всё работает замечательно... но поскольку генератор всё же псевдослучайный, в этой игре он
очень неприятно генерирует два НЛО подряд! А НЛО как раз должны быть редкими... :-?

И никак я его не собью с этой привычки, не сильно усложняя... :(

_________________
iLavr


01 Dec 2021 09:46
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Подправил генератор случайных чисел двумя правилами, которые несложно реализовать на ассемблере,
не слишком усложняя программу:
1. Если число повторяется, сгенерировать новое.
2. Если число > 11, также сгенерировать новое.
И вроде как "враги" полезли равномерно, и НЛО не встречаются подряд.
Attachment:
ALIEN.PNG
ALIEN.PNG [ 8.36 KiB | Viewed 7631 times ]

Здесь в таблицах всё, что не цифры - НЛО. В отличие от оригинала, у меня их два разных. :wink:
Ну просто были они у меня очень давно нарисованы, решил оба задействовать, тем более
что на алгоритм игры это не влияет...
Attachment:
Digit1.png
Digit1.png [ 2.16 KiB | Viewed 7631 times ]

По правилам игры "враги" лезут сериями по 16, явной повторяемости у меня вроде как нет.
Три полоски возле "0" (заряд) - это три "жизни". Если "враги" достигли полосок - "жизнь" убавляется.
Если расстрелять всю пачку врагов - то "You Win!", и счёт - на экран.
Баллы начисляются в зависимости от расстояния до врага, а не от его числа.

В общем, оригинальные правила вот такие:

 Digital Invader in Casio MG-880
Quote:
Digital Invader in Casio MG-880 Calculator
https://play.google.com/store/apps/details?id=com.pa2.digitalinvaders&hl=en_AU&gl=US
A classic 80's calculator game. Shoot down the invaders.

Digital Invaders originally appeared on the Casio MG-880 calculator.
This is a fast-paced action game that will put your fingers to the test.

Invader Speed
Compared to the original calculator game, this game is almost identical but with a few slight modifications as described below.
The speed is measured by the time it takes for one invader to travel all the way across the display and cause one life to be lost.

Digital Invaders Android App (speed level 5):
stage 1 - 6.6 sec
stage 9 - 2.2 sec
interval (score showing) - 1.8 sec

Digital Invaders Android App (speed level 1):
stage 1 - 9 sec
stage 9 - 4.6 sec
interval (score showing) - 1.8 sec

Calculator:
stage 1 - 7 sec
stage 9 - 2.3 sec
interval (score showing) - 2 sec

Speed level 5 closely matches the speed of the original calculator game. To be able to upload your score to the leader board you must be playing at speed level 5.

INSTRUCTIONS
The aim is to score the most amount of points by destroying the invaders approaching from the right.
Use the AIM button to match the leftmost digit on the display with any of the approaching invaders. Press the FIRE button to destroy the invader.
Цель состоит в том, чтобы набрать наибольшее количество очков, уничтожив захватчиков, приближающихся справа.
Используйте кнопку AIM (Цель), чтобы сопоставить крайнюю левую цифру на дисплее с любым из приближающихся захватчиков. Нажмите кнопку ОГОНЬ, чтобы уничтожить захватчика.

If the sum of the shot down invaders is a multiple of 10, the next invader will be a UFO (shaped like an 'n') unless the stage is completed.
Если сумма сбитых захватчиков кратна 10, следующим захватчиком будет НЛО (в форме буквы «n»), если этап не будет завершен.
The defense lines next to the Aim Digit indicate the number of lives the player has left.
Линии защиты рядом с Цифрой AIM (Цель) показывают количество жизней, оставшихся у игрока.
There are 2 levels and each level has 9 stages. In each stage you must shoot down all 16 invaders with 30 shots or less. The speed of the invaders increases with each successive stage. In level 2 the invaders start attacking from one position closer. After completing level 2 the game will return to level 1.
Есть 2 уровня, и каждый уровень состоит из 9 этапов. На каждом этапе вы должны сбить всех 16 захватчиков не более чем 30 выстрелами. Скорость захватчиков увеличивается с каждым последующим этапом. На уровне 2 захватчики начинают атаковать с одной позиции ближе. После прохождения уровня 2 игра вернется на уровень 1.
When the game is over, the display shows the stage that the player reached and the score.


SCORING
The high score is shown at the start of the game.
Рекорд отображается в начале игры.
The points awarded for shooting down an invader depend on the invader's position. Starting from the rightmost position, the points are as follows:
Очки, начисляемые за уничтожение захватчика, зависят от его позиции. Начиная с крайнего правого положения, точки следующие:
Level 1
60, 50, 40, 30, 20, 10

Level 2
100, 80, 60, 40, 20

An extra 300 points is awarded for shooting down a UFO.
За сбитие НЛО начисляются дополнительные 300 очков.

SPEED
There are five speed levels. 1 is the slowest and 5 is the fastest. You can only put your score on the leader board if you are playing at speed level 5.
Есть пять уровней скорости. 1 - самый медленный, а 5 - самый быстрый. Вы можете поместить свой результат в таблицу лидеров, только если играете на 5-м уровне скорости.

_________________
iLavr


01 Dec 2021 11:57
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Lavr wrote:
... решил оба задействовать, тем более что на алгоритм игры это не влияет...

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

Пока в ограниченный объём памяти вроде влезаю... Я, собственно, и затеял написать прототип
игры в кодах 8080, чтобы примерно оценить объём кода игры. Код 8048 более компактный.

Осталось сделать счет и "наступление врагов", пока убиваю лишь крайнего справа... :wink:

_________________
iLavr


03 Dec 2021 16:40
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Lavr wrote:
Я, собственно, и затеял написать прототип игры в кодах 8080, чтобы примерно оценить объём кода игры.

Ну вот Я, собственно, и написал прототип этой игры в кодах 8080... :wink:
Attachment:
INVADERS.PNG
INVADERS.PNG [ 8.17 KiB | Viewed 7446 times ]

Вот образ под эмулятор emu. Загружается в emu из его меню Open.
Attachment:
Digit.zip [21.03 KiB]
Downloaded 154 times

Каким компьютером вы стартанёте emu - не важно, при загрузке Digit.emu стартанёт "Специалист_МХ"
с уже включенной игрой.
После загрузки Digit.emu программа emu почему-то выходит в свой Debugger - в нём надо нажать F5.

Правила игры чуть изменены:
1. Большее число очков начисляется за пришельца ближе к базе - труднее играть, когда рядом с базой.
2. За сбитые НЛО начисляется +80 и +90 очков, а не +300 как в оригинале. В нём НЛО посылают принудительно, после 10 обычных сбитых. У меня НЛО генерируются случайно, но чаще.
3. Второго раунда игры с повышенной скоростью я не предусмотрел. Думаю, мышью и на этой скорости управлять будет нелегко.
4. В оригинале число выстрелов = (число врагов * 2) - 2. Мне показалось, что для 48 врагов (3 * 16) - это многовато.
У меня число выстрелов = (число врагов * 1.25).

Пока писал игру, наигрался так, что самому надоело... :roll:
Но если ошибок не будет выявлено, перенесу код со временем на платформу 1816ВЕ48 (aka 8048).

ИГРАТЬ ПОДАНО! DO PLEASE! :lol:

_________________
iLavr


08 Dec 2021 03:18
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Lavr wrote:
Я, собственно, и затеял написать прототип игры в кодах 8080, чтобы примерно оценить объём кода игры
...
если ошибок не будет выявлено, перенесу код со временем на платформу 1816ВЕ48 (aka 8048).

Переделал схему под индикатор - аналог АЛС318, чтобы байты сегментов выдавать в прямом коде,
а дешифратор - притягивал знакоместа к "0"...
Attachment:
Game.PNG
Game.PNG [ 30.17 KiB | Viewed 7537 times ]

Начал перенос кода на платформу 1816ВЕ48, переносится довольно легко, даже не ожидал! :roll:
Особенно вдруг возрадовало, что флаг Z выставляется по текущему содержимому аккумулятора.
То есть, можно делать так:
Code:
  MOV  R1,SHT  ; Shoot count
  MOV  A,@R1
  JNZ  MA1

После загрузки A из памяти, не надо делать ORA A, как у i8080. :kruto:

Основной цикл выстрела и поражения пришельца перенёсся великолепно!
Я боялся, что в динамике начнёт моргать индикатор в Proteus - такое бывает, мультипликация
там довольно сложная и зависит от всяких таймингов...
Но этого не случилось!

А вот чего я опасался меньше - таки случилось... :-? Нехватка ОЗУ.
Всё-таки ОЗУ в 64 байта из которых 16 байт - регистры и 16 байт - стек - ровно половина занято.
А в оставшейся половине - 8 байт сжирает буфер индикатора. Остаётся довольно мало... :(

Но... будем посмотреть! 8)

_________________
iLavr


11 Dec 2021 03:10
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Lavr wrote:
Основной цикл выстрела и поражения пришельца перенёсся великолепно!
Подзавис я со звуком взрыва пришельца. :(

Под эмуляцией 580ВМ80 ("Специалист") звук был великолепный и просто идеальный! :kruto:
Понятно, что под 1816ВЕ48 звуку мешают прерывания таймера для обновления индикатора.
Но их частота весьма велика: примерно 3.2mS.
Я рассчитывал, что поверх шума они звук не испортят, но звук стал довольно мерзким. :(
Сделал проверочный проект, где звук извлекается отдельно без прерываний.
Но всё-равно он не такой "взрывчатый", как под "Специалист"-ом...
В архиве - оба варианта имитации звука взрыва.
Attachment:
NOIZE.zip [21.5 KiB]
Downloaded 165 times

Lavr wrote:
А вот чего я опасался меньше - таки случилось... :-? Нехватка ОЗУ.
А вот тут я сам просадился... :-? Свободная память начинается с адреса 20Н или 32.
Написал я:
Code:
 .EQU BUF, #032
а потом, не задумавшись, по привычке добавил "Н"... :wink:
Естественно, памяти стало не хватать... но нашел и исправил, теперь хватает ОЗУ.


P.S. В общем-то захлёбывается звук сугубо от частоты симуляции. Если выставить частоту 1816ВЕ48 = 4 МГц,
то звук ровный и близок к эмулируемому "Специалистом". На частоте 6 МГц звук начинает захлёбываться
и безо всяких прерываний:"тыр-тыр-тыр". Ладно... будет пришелец погибать неэтично:"кыр-кыр-кыр".
:wink:

_________________
iLavr


12 Dec 2021 17:51
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Lavr wrote:
Понятно, что под 1816ВЕ48 звуку мешают прерывания таймера для обновления индикатора.
Но их частота весьма велика: примерно 3.2mS. Я рассчитывал, что поверх шума они звук не испортят, ...

Интересно, что звук-то прерывания таймера как раз практически и не портят! :roll:
Ниже на осциллограмме - на верхнем луче звук выстрела, на нижнем луче - частота прерываний,
причем прерывания идут по фронту и спаду этих импульсов:
Attachment:
GunShot.PNG
GunShot.PNG [ 117.95 KiB | Viewed 7469 times ]

Но звук выстрела совершенно чистый и близок к оригиналу на "Специалисте"! :o
А вот с шумом взрыва - какая-то неувязка получается... :-?
Убрал я его пока и заменил другим звуковым эффектом.

_________________
iLavr


12 Dec 2021 23:34
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Случайность wrote:
...советский микроконтроллер. как их назвали раньше однокристальная эвм КМ1816ВЕ48.
Оперативы всего 64 байта пзу всего кило. вот интересно на что способна эта ОЭВМ?
хотелось бы увидеть практические конструкции на ней.

Эта однокристальная эвм КМ1816ВЕ48 способна, в частности, реализовать винрарную культовую игру -
Digital Invaders (Цифровые пришельцы). И всего в одно кило я с кодом этой игры уложился.
На мой взгляд, так конструкция вполне себе практическая и более интересная, нежели банальные часы...
Attachment:
DigInv.PNG
DigInv.PNG [ 31.1 KiB | Viewed 7438 times ]

Я надеюсь, все тут понимают, что это модель, и реально между портом Р1 микро-ЭВМ КМ1816ВЕ48 и выводами
сегментов индикатора следует включить буфер и токоограничивающие резисторы.
Эти элементы опущены в модели, чтобы обеспечить приемлемую скорость эмуляции, чтобы и на модели была
возможность оценить работу устройства в масштабе времени, близком к реальному.

Да! В Digital Invaders вполне можно поиграть на модели с приемлемой скоростью и звуком.
С этой же целью я прицепил 4-кнопочную клавиатурку, которая позволяет играть не только мышью, но и
с клавиатуры компьютера, клавиши [1], [2], [3], [4].
По клавиатурке надо лишь раз кликнуть мышью, чтобы передать ей фокус ввода.

Индикатор на порту BUS я использовал для отладки, а потом и оставил как счётчик пришельцев - так играть
интереснее, когда видно их количество. Перезапуск игры по кнопочке RESET.

В архиве - проект Proteus и исходники программы...
Attachment:
Dig_Inv.zip [39.54 KiB]
Downloaded 221 times


P.S. Возможно, я ошибаюсь, но в ряде мест программы сложилось у меня впечатление, что модель 8048 не совсем
корректно обрабатывает инструкцию ADD и как-то странно выставляет при этом флаги...

_________________
iLavr


14 Dec 2021 02:26
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
С ADD там вот какая ситуация сложилась...
У 1816ВЕ48 (aka i8048) нет инструкций вычитания и нет сравнения типа CMP Rx, CPI NN.
Поэтому там, где в оригинальном коде для 580ВМ80 у меня было CPI NN, я заменял его так:

К примеру: CPI 34H
Code:
   MOV  R7,A    ; сохраним A в темп-регистр
   ADD  A,#0CCH ; A-34H <-> A+(-34H) <-> A+(/34H+1) <-> A+(0CBH+1)
   JZ   METKA

По началу вроде как всё так и получалось... но в какой-то момент вдруг перестало...
Причем проверял я это всё через порт BUS:
Code:
   MOV  R7,A    ; сохраним A в темп-регистр
   OUTL P1,A    ; вывели в порт BUS
   ADD  A,#0CCH ; A-34H <-> A+(-34H) <-> A+(/34H+1) <-> A+(0CBH+1)
   OUTL P1,A    ; вывели в порт BUS
   JZ   METKA

В порту всё видно правильно, но JZ METKA не срабатывает! :roll:

Тогда я изменил процедуру замены CPI NN:
Code:
   MOV  R7,A    ; сохраним A в темп-регистр
   CPL  A       ; инвертируем A
   INC  A       ; /A+1=-A
   ADD  A,#34H  ; -A+34H
   JZ   METKA

И вот этот вариант работает как из пушки! :kruto:

В общем, в ряде случаев, где в оригинальном коде 580ВМ80 было:
Code:
   CPI 12
   JNC METKA
Пришлось сделать странную, на мой взгляд, замену
Code:
   ADD A,(/12+1)
   JC  METKA

А почему так - непонятно, но с JNC METKA алгоритм как в оригинале не работал...

Возможно, я какую-то тонкость не уловил, но по ходу уже приходилось делать так, чтобы работало.
И - да, я помню, что у 1816ВЕ48 (aka i8048) флаг Z лишь пока A=0, но здесь это вроде как не влияло.

_________________
iLavr


14 Dec 2021 16:18
Profile
Display posts from previous:  Sort by  
Reply to topic   [ 111 posts ]  Go to page Previous  1, 2, 3, 4, 5, 6, 7, 8  Next

Who is online

Users browsing this forum: No registered users and 7 guests


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:
Jump to:  
Powered by phpBB® Forum Software © phpBB Group
Designed by ST Software.