1816ВЕ48

8-битные микроконтроллеры и микропроцессоры от Intel и их клоны, а также компьютеры на них построенные

Moderator: Shaos

User avatar
Lavr
Supreme God
Posts: 16680
Joined: 21 Oct 2009 08:08
Location: Россия

Re: 1816ВЕ48

Post by Lavr »

Lavr wrote:Я даже попытался сыграть в "Цифровых пришельцев" онлайн, но что-то с управлением не справился... :lol:

P.S. Xa!... Это я правила не прочитал... думал просто стрелялка... Прежде чем стрелять - надо зарядить
пушку до "мощности" захватчика: подлетает 6 - заряжаем до 6, и - стреляем! Только так...
8)
Со второго захода, зная правила, у меня уже лучше пошло! :lol:
В первом туре на 200 баллов настрелял! :wink:
ard_g4.PNG
Кто хочет попробовать? :wink: Тут: Arduboy Emulator Online

Хотя я покликал с целью глянуть - насколько игра быстрая, и получится ли играть в Proteus...
На мой взгляд - достаточно медленно, и увлекательно! :kruto:
You do not have the required permissions to view the files attached to this post.
iLavr
User avatar
Lavr
Supreme God
Posts: 16680
Joined: 21 Oct 2009 08:08
Location: Россия

Re: 1816ВЕ48

Post by Lavr »

Существует-таки вариант игры Digital Invader на микроконтроллере...
c8dc99e1a.jpg
Но 1816ВЕ48 точечное поле в режиме динамической индикации скорее всего не потянет... :-?
You do not have the required permissions to view the files attached to this post.
iLavr
Konstantin18
Maniac
Posts: 325
Joined: 15 Jan 2019 15:48
Location: Украина, Луганская обл.

Re: 1816ВЕ48

Post by Konstantin18 »

Lavr wrote: Но 1816ВЕ48 точечное поле в режиме динамической индикации скорее всего не потянет... :-?
Откуда такие выводы ?
То есть динамическое сканирование АТ-клавиатуры тянул, а динамическую индикацию - "не потянет" ???
User avatar
fifan
Devil
Posts: 912
Joined: 06 Oct 2006 03:17
Location: г.Лянтор,Сургутского р-на,ХМАО

Re: 1816ВЕ48

Post by fifan »

Конечно на фото представлен современный микроконтроллер (не разглядеть марку). И он позволяет подключать напрямую к пинам разряды светодиодного индикатора. С 1816ВЕ48 такое не прокатит. Согласно энциклопедии по МК48/51 (Сташин В.В. и др. - Проектирование цифровых устройств на однокристальных микроконтроллерах) необходим внешний дешифратор и на разряды индикатора как минимум буферные элементы.
ind.png
User avatar
Lavr
Supreme God
Posts: 16680
Joined: 21 Oct 2009 08:08
Location: Россия

Re: 1816ВЕ48

Post by Lavr »

fifan wrote:Конечно на фото представлен современный микроконтроллер (не разглядеть марку). И он позволяет подключать напрямую к пинам разряды светодиодного индикатора. С 1816ВЕ48 такое не прокатит.
Да, ты прав... Я тоже разглядывал-разглядывал марку этого микроконтроллера и не разглядел... :-?
И увеличивал фото... и контрастность менял - не увидел. Хотя просто лишь было интересно!

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

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

Image

Такие вот исходные ограничения на проект... 8)
iLavr
User avatar
Lavr
Supreme God
Posts: 16680
Joined: 21 Oct 2009 08:08
Location: Россия

Игра на 1816ВЕ48

Post by Lavr »

Lavr wrote:Я тут озадачился на тему: а нет ли какой-либо простенькой игрушки на 1816ВЕ48 ? :roll:
Ну чтобы там 2 ... 4 кнопки управления и вывод на АЛС318 или, может быть, линейку светодиодов...
Ну, в общем-то HARDWARE-часть под эту игрушку я подготовил:
Dig_HEL.PNG
И немного поразмышлял над SOFTWARE-половиной задачи...

Хотя мне лучше думается пока в кодах 580ВМ80, поэтому размышлял я вот так: :lol:
SP_HELLO.PNG
Потому что, собственно говоря, игрушка - это задача реального времени, и вся проблема в таймингах.
И я прикидывал, как формируются тайминги в игрушках "Специалиста", где нет прерывания по таймеру.
В 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:
You do not have the required permissions to view the files attached to this post.
iLavr
User avatar
Lavr
Supreme God
Posts: 16680
Joined: 21 Oct 2009 08:08
Location: Россия

Re: Игра на 1816ВЕ48

Post by Lavr »

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

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

В общем, не мудрствуя лукаво, взял я простую реализацию линейного конгруэнтного генератора:
СледующееЧисло = (A * ПредыдущееЧисло + B) MOD N

Code: Select all

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
User avatar
Lavr
Supreme God
Posts: 16680
Joined: 21 Oct 2009 08:08
Location: Россия

Re: 1816ВЕ48

Post by Lavr »

Подправил генератор случайных чисел двумя правилами, которые несложно реализовать на ассемблере,
не слишком усложняя программу:
1. Если число повторяется, сгенерировать новое.
2. Если число > 11, также сгенерировать новое.
И вроде как "враги" полезли равномерно, и НЛО не встречаются подряд.
ALIEN.PNG
Здесь в таблицах всё, что не цифры - НЛО. В отличие от оригинала, у меня их два разных. :wink:
Ну просто были они у меня очень давно нарисованы, решил оба задействовать, тем более
что на алгоритм игры это не влияет...
Digit1.png
По правилам игры "враги" лезут сериями по 16, явной повторяемости у меня вроде как нет.
Три полоски возле "0" (заряд) - это три "жизни". Если "враги" достигли полосок - "жизнь" убавляется.
Если расстрелять всю пачку врагов - то "You Win!", и счёт - на экран.
Баллы начисляются в зависимости от расстояния до врага, а не от его числа.

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

 Digital Invader in Casio MG-880
Digital Invader in Casio MG-880 Calculator
https://play.google.com/store/apps/deta ... n_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-м уровне скорости.

You do not have the required permissions to view the files attached to this post.
iLavr
User avatar
Lavr
Supreme God
Posts: 16680
Joined: 21 Oct 2009 08:08
Location: Россия

Re: 1816ВЕ48

Post by Lavr »

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

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

Осталось сделать счет и "наступление врагов", пока убиваю лишь крайнего справа... :wink:
iLavr
User avatar
Lavr
Supreme God
Posts: 16680
Joined: 21 Oct 2009 08:08
Location: Россия

Re: 1816ВЕ48

Post by Lavr »

Lavr wrote:Я, собственно, и затеял написать прототип игры в кодах 8080, чтобы примерно оценить объём кода игры.
Ну вот Я, собственно, и написал прототип этой игры в кодах 8080... :wink:
INVADERS.PNG
Вот образ под эмулятор emu. Загружается в emu из его меню Open.
Digit.zip
Каким компьютером вы стартанёте 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:
You do not have the required permissions to view the files attached to this post.
iLavr
User avatar
Lavr
Supreme God
Posts: 16680
Joined: 21 Oct 2009 08:08
Location: Россия

Re: 1816ВЕ48

Post by Lavr »

Lavr wrote:Я, собственно, и затеял написать прототип игры в кодах 8080, чтобы примерно оценить объём кода игры
...
если ошибок не будет выявлено, перенесу код со временем на платформу 1816ВЕ48 (aka 8048).
Переделал схему под индикатор - аналог АЛС318, чтобы байты сегментов выдавать в прямом коде,
а дешифратор - притягивал знакоместа к "0"...
Game.PNG
Начал перенос кода на платформу 1816ВЕ48, переносится довольно легко, даже не ожидал! :roll:
Особенно вдруг возрадовало, что флаг Z выставляется по текущему содержимому аккумулятора.
То есть, можно делать так:

Code: Select all

  MOV  R1,SHT  ; Shoot count
  MOV  A,@R1
  JNZ  MA1
После загрузки A из памяти, не надо делать ORA A, как у i8080. :kruto:

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

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

Но... будем посмотреть! 8)
You do not have the required permissions to view the files attached to this post.
iLavr
User avatar
Lavr
Supreme God
Posts: 16680
Joined: 21 Oct 2009 08:08
Location: Россия

Re: 1816ВЕ48

Post by Lavr »

Lavr wrote:Основной цикл выстрела и поражения пришельца перенёсся великолепно!
Подзавис я со звуком взрыва пришельца. :(

Под эмуляцией 580ВМ80 ("Специалист") звук был великолепный и просто идеальный! :kruto:
Понятно, что под 1816ВЕ48 звуку мешают прерывания таймера для обновления индикатора.
Но их частота весьма велика: примерно 3.2mS.
Я рассчитывал, что поверх шума они звук не испортят, но звук стал довольно мерзким. :(
Сделал проверочный проект, где звук извлекается отдельно без прерываний.
Но всё-равно он не такой "взрывчатый", как под "Специалист"-ом...
В архиве - оба варианта имитации звука взрыва.
NOIZE.zip
Lavr wrote:А вот чего я опасался меньше - таки случилось... :-? Нехватка ОЗУ.
А вот тут я сам просадился... :-? Свободная память начинается с адреса 20Н или 32.
Написал я:

Code: Select all

 .EQU BUF, #032
а потом, не задумавшись, по привычке добавил "Н"... :wink:
Естественно, памяти стало не хватать... но нашел и исправил, теперь хватает ОЗУ.


P.S. В общем-то захлёбывается звук сугубо от частоты симуляции. Если выставить частоту 1816ВЕ48 = 4 МГц,
то звук ровный и близок к эмулируемому "Специалистом". На частоте 6 МГц звук начинает захлёбываться
и безо всяких прерываний:"тыр-тыр-тыр". Ладно... будет пришелец погибать неэтично:"кыр-кыр-кыр".
:wink:
You do not have the required permissions to view the files attached to this post.
iLavr
User avatar
Lavr
Supreme God
Posts: 16680
Joined: 21 Oct 2009 08:08
Location: Россия

Re: 1816ВЕ48

Post by Lavr »

Lavr wrote:Понятно, что под 1816ВЕ48 звуку мешают прерывания таймера для обновления индикатора.
Но их частота весьма велика: примерно 3.2mS. Я рассчитывал, что поверх шума они звук не испортят, ...
Интересно, что звук-то прерывания таймера как раз практически и не портят! :roll:
Ниже на осциллограмме - на верхнем луче звук выстрела, на нижнем луче - частота прерываний,
причем прерывания идут по фронту и спаду этих импульсов:
GunShot.PNG
Но звук выстрела совершенно чистый и близок к оригиналу на "Специалисте"! :o
А вот с шумом взрыва - какая-то неувязка получается... :-?
Убрал я его пока и заменил другим звуковым эффектом.
You do not have the required permissions to view the files attached to this post.
iLavr
User avatar
Lavr
Supreme God
Posts: 16680
Joined: 21 Oct 2009 08:08
Location: Россия

Re: 1816ВЕ48

Post by Lavr »

Случайность wrote:...советский микроконтроллер. как их назвали раньше однокристальная эвм КМ1816ВЕ48.
Оперативы всего 64 байта пзу всего кило. вот интересно на что способна эта ОЭВМ?
хотелось бы увидеть практические конструкции на ней.
Эта однокристальная эвм КМ1816ВЕ48 способна, в частности, реализовать винрарную культовую игру -
Digital Invaders (Цифровые пришельцы). И всего в одно кило я с кодом этой игры уложился.
На мой взгляд, так конструкция вполне себе практическая и более интересная, нежели банальные часы...
DigInv.PNG
Я надеюсь, все тут понимают, что это модель, и реально между портом Р1 микро-ЭВМ КМ1816ВЕ48 и выводами
сегментов индикатора следует включить буфер и токоограничивающие резисторы.
Эти элементы опущены в модели, чтобы обеспечить приемлемую скорость эмуляции, чтобы и на модели была
возможность оценить работу устройства в масштабе времени, близком к реальному.

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

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

В архиве - проект Proteus и исходники программы...
Dig_Inv.zip
P.S. Возможно, я ошибаюсь, но в ряде мест программы сложилось у меня впечатление, что модель 8048 не совсем
корректно обрабатывает инструкцию ADD и как-то странно выставляет при этом флаги...
You do not have the required permissions to view the files attached to this post.
iLavr
User avatar
Lavr
Supreme God
Posts: 16680
Joined: 21 Oct 2009 08:08
Location: Россия

Re: 1816ВЕ48

Post by Lavr »

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

К примеру: CPI 34H

Code: Select all

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

Code: Select all

   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: Select all

   MOV  R7,A    ; сохраним A в темп-регистр
   CPL  A       ; инвертируем A
   INC  A       ; /A+1=-A
   ADD  A,#34H  ; -A+34H
   JZ   METKA
И вот этот вариант работает как из пушки! :kruto:

В общем, в ряде случаев, где в оригинальном коде 580ВМ80 было:

Code: Select all

   CPI 12
   JNC METKA
Пришлось сделать странную, на мой взгляд, замену

Code: Select all

   ADD A,(/12+1)
   JC  METKA
А почему так - непонятно, но с JNC METKA алгоритм как в оригинале не работал...

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