|
nedoPC.orgElectronics hobbyists community established in 2002 |
|
Author |
Message |
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Со второго захода, зная правила, у меня уже лучше пошло! В первом туре на 200 баллов настрелял! Кто хочет попробовать? Тут: Arduboy Emulator OnlineХотя я покликал с целью глянуть - насколько игра быстрая, и получится ли играть в Proteus... На мой взгляд - достаточно медленно, и увлекательно!
_________________ iLavr
|
29 Nov 2021 14:05 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Существует-таки вариант игры Digital Invader на микроконтроллере... Но 1816ВЕ48 точечное поле в режиме динамической индикации скорее всего не потянет...
_________________ iLavr
|
29 Nov 2021 16:06 |
|
|
Konstantin18
Maniac
Joined: 15 Jan 2019 15:48 Posts: 326 Location: Украина, Луганская обл.
|
Откуда такие выводы ? То есть динамическое сканирование АТ-клавиатуры тянул, а динамическую индикацию - "не потянет" ???
|
30 Nov 2021 03:52 |
|
|
fifan
Devil
Joined: 06 Oct 2006 03:17 Posts: 859 Location: г.Лянтор,Сургутского р-на,ХМАО
|
Конечно на фото представлен современный микроконтроллер (не разглядеть марку). И он позволяет подключать напрямую к пинам разряды светодиодного индикатора. С 1816ВЕ48 такое не прокатит. Согласно энциклопедии по МК48/51 (Сташин В.В. и др. - Проектирование цифровых устройств на однокристальных микроконтроллерах) необходим внешний дешифратор и на разряды индикатора как минимум буферные элементы.
|
30 Nov 2021 09:46 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Да, ты прав... Я тоже разглядывал-разглядывал марку этого микроконтроллера и не разглядел... И увеличивал фото... и контрастность менял - не увидел. Хотя просто лишь было интересно! Потому как покупать я такой контроллер конечно же не буду, вся идея, которая тащит меня "в бой" - сделать что-то интересное на микроконтроллере из убитой клавиатуры. Иначе я бы и не стал этим заниматься. Ну и понятно в этой связи, что аппаратно и количество выводов портов у меня ограничено, потому как по-любому надо задействовать внешнюю память, хотя бы как на этой схеме: Такие вот исходные ограничения на проект...
_________________ iLavr
|
30 Nov 2021 10:47 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Ну, в общем-то HARDWARE-часть под эту игрушку я подготовил: И немного поразмышлял над SOFTWARE-половиной задачи... Хотя мне лучше думается пока в кодах 580ВМ80, поэтому размышлял я вот так: Потому что, собственно говоря, игрушка - это задача реального времени, и вся проблема в таймингах. И я прикидывал, как формируются тайминги в игрушках "Специалиста", где нет прерывания по таймеру. В 1816ВЕ48 прерывание по таймеру есть и по нему осуществляется сканирование индикатора. Значит можно взять этот временной интервал за единицу времени в игре и к нему привязывать остальные игровые события... Я внимательно пронаблюдал этот вариант игрушки: Arduboy Emulator OnlineВраги появляются с периодичностью примерно 1 секунда или чуть больше. И за это время надо успеть нажать на кнопку до 10 раз по идее... Но самый неприятный момент, что кнопка " AIM" работает только на инкремент, то есть, если мы шлёпнули врага под номером 6, а следующий враг - 5, то надо прокрутить 7...9, n а потом 0 ... 5. Тыкая мышью, лично я это практически не успеваю... Надо обдумать этот момент... Возможно, для " AIM" следует сделать 2 кнопки: " UP" и " DOWN" . Игра, в которую ты заведомо проигрываешь - не интересна... А вот эмулятор Arduboy Emulator Online меня очень удивил! Я-то думал, что это - игрушка на JS... А всё реально оказалось иначе! Это - ЭМУЛЯТОР АРДУИНО на JS !!! И он "играет" реальный код этой игрушки на АРДУИНО !!! Если поводить мышью по вот этой панели игрушки: В некоторых местах (на разъёмах и микросхемах) курсор меняется на руку с пальцем, и если нажать, можно повернуть игрушку на бок, вызвать отладчик и посмотреть исходный код игры! Затейливо... очень затейливо!!!
_________________ iLavr
|
30 Nov 2021 11:24 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Засада случилась там, где я её и ожидал... Целочисленный и простой генератор случайных чисел на отрезке 0 ... 11. Чтобы "Цифровые враги" случайно выбегали... С генераторами ПСЧ всегда какая-то засада случается... даже RND(X) в BASIC - плохой генератор. В общем, не мудрствуя лукаво, взял я простую реализацию линейного конгруэнтного генератора: СледующееЧисло = (A * ПредыдущееЧисло + B) MOD NИ всё работает замечательно... но поскольку генератор всё же псевдослучайный, в этой игре он очень неприятно генерирует два НЛО подряд! А НЛО как раз должны быть редкими... И никак я его не собью с этой привычки, не сильно усложняя...
_________________ iLavr
|
01 Dec 2021 09:46 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Подправил генератор случайных чисел двумя правилами, которые несложно реализовать на ассемблере, не слишком усложняя программу: 1. Если число повторяется, сгенерировать новое. 2. Если число > 11, также сгенерировать новое. И вроде как "враги" полезли равномерно, и НЛО не встречаются подряд. Здесь в таблицах всё, что не цифры - НЛО. В отличие от оригинала, у меня их два разных. Ну просто были они у меня очень давно нарисованы, решил оба задействовать, тем более что на алгоритм игры это не влияет... По правилам игры "враги" лезут сериями по 16, явной повторяемости у меня вроде как нет. Три полоски возле "0" (заряд) - это три "жизни". Если "враги" достигли полосок - "жизнь" убавляется. Если расстрелять всю пачку врагов - то "You Win!", и счёт - на экран. Баллы начисляются в зависимости от расстояния до врага, а не от его числа. В общем, оригинальные правила вот такие: Digital Invader in Casio MG-880 | | | | Quote: Digital Invader in Casio MG-880 Calculatorhttps://play.google.com/store/apps/details?id=com.pa2.digitalinvaders&hl=en_AU&gl=USA 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 SpeedCompared 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. INSTRUCTIONSThe 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. SCORINGThe 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 160, 50, 40, 30, 20, 10 Level 2100, 80, 60, 40, 20 An extra 300 points is awarded for shooting down a UFO. За сбитие НЛО начисляются дополнительные 300 очков.SPEEDThere 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 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Прицепил в алгоритм игры звуковые эффекты выстрела и взрыва, причем старался сделать без таблиц. Пока в ограниченный объём памяти вроде влезаю... Я, собственно, и затеял написать прототип игры в кодах 8080, чтобы примерно оценить объём кода игры. Код 8048 более компактный. Осталось сделать счет и "наступление врагов", пока убиваю лишь крайнего справа...
_________________ iLavr
|
03 Dec 2021 16:40 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Ну вот Я, собственно, и написал прототип этой игры в кодах 8080... Вот образ под эмулятор emu. Загружается в emu из его меню Open. Каким компьютером вы стартанёте emu - не важно, при загрузке Digit.emu стартанёт " Специалист_МХ" с уже включенной игрой. После загрузки Digit.emu программа emu почему-то выходит в свой Debugger - в нём надо нажать F5. Правила игры чуть изменены: 1. Большее число очков начисляется за пришельца ближе к базе - труднее играть, когда рядом с базой. 2. За сбитые НЛО начисляется +80 и +90 очков, а не +300 как в оригинале. В нём НЛО посылают принудительно, после 10 обычных сбитых. У меня НЛО генерируются случайно, но чаще. 3. Второго раунда игры с повышенной скоростью я не предусмотрел. Думаю, мышью и на этой скорости управлять будет нелегко. 4. В оригинале число выстрелов = (число врагов * 2) - 2. Мне показалось, что для 48 врагов (3 * 16) - это многовато. У меня число выстрелов = (число врагов * 1.25). Пока писал игру, наигрался так, что самому надоело... Но если ошибок не будет выявлено, перенесу код со временем на платформу 1816ВЕ48 (aka 8048). ИГРАТЬ ПОДАНО! DO PLEASE!
_________________ iLavr
|
08 Dec 2021 03:18 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Переделал схему под индикатор - аналог АЛС318, чтобы байты сегментов выдавать в прямом коде, а дешифратор - притягивал знакоместа к "0"... Начал перенос кода на платформу 1816ВЕ48, переносится довольно легко, даже не ожидал! Особенно вдруг возрадовало, что флаг Z выставляется по текущему содержимому аккумулятора. То есть, можно делать так: После загрузки A из памяти, не надо делать ORA A, как у i8080. Основной цикл выстрела и поражения пришельца перенёсся великолепно! Я боялся, что в динамике начнёт моргать индикатор в Proteus - такое бывает, мультипликация там довольно сложная и зависит от всяких таймингов... Но этого не случилось! А вот чего я опасался меньше - таки случилось... Нехватка ОЗУ. Всё-таки ОЗУ в 64 байта из которых 16 байт - регистры и 16 байт - стек - ровно половина занято. А в оставшейся половине - 8 байт сжирает буфер индикатора. Остаётся довольно мало... Но... будем посмотреть!
_________________ iLavr
|
11 Dec 2021 03:10 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Подзавис я со звуком взрыва пришельца. Под эмуляцией 580ВМ80 ("Специалист") звук был великолепный и просто идеальный! Понятно, что под 1816ВЕ48 звуку мешают прерывания таймера для обновления индикатора. Но их частота весьма велика: примерно 3.2mS. Я рассчитывал, что поверх шума они звук не испортят, но звук стал довольно мерзким. Сделал проверочный проект, где звук извлекается отдельно без прерываний. Но всё-равно он не такой "взрывчатый", как под "Специалист"-ом... В архиве - оба варианта имитации звука взрыва. А вот тут я сам просадился... Свободная память начинается с адреса 20Н или 32. Написал я: а потом, не задумавшись, по привычке добавил " Н"... Естественно, памяти стало не хватать... но нашел и исправил, теперь хватает ОЗУ. P.S. В общем-то захлёбывается звук сугубо от частоты симуляции. Если выставить частоту 1816ВЕ48 = 4 МГц, то звук ровный и близок к эмулируемому "Специалистом". На частоте 6 МГц звук начинает захлёбываться и безо всяких прерываний:"тыр-тыр-тыр". Ладно... будет пришелец погибать неэтично:"кыр-кыр-кыр".
_________________ iLavr
|
12 Dec 2021 17:51 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Интересно, что звук-то прерывания таймера как раз практически и не портят! Ниже на осциллограмме - на верхнем луче звук выстрела, на нижнем луче - частота прерываний, причем прерывания идут по фронту и спаду этих импульсов: Но звук выстрела совершенно чистый и близок к оригиналу на "Специалисте"! А вот с шумом взрыва - какая-то неувязка получается... Убрал я его пока и заменил другим звуковым эффектом.
_________________ iLavr
|
12 Dec 2021 23:34 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Эта однокристальная эвм КМ1816ВЕ48 способна, в частности, реализовать винрарную культовую игру - Digital Invaders ( Цифровые пришельцы). И всего в одно кило я с кодом этой игры уложился. На мой взгляд, так конструкция вполне себе практическая и более интересная, нежели банальные часы... Я надеюсь, все тут понимают, что это модель, и реально между портом Р1 микро-ЭВМ КМ1816ВЕ48 и выводами сегментов индикатора следует включить буфер и токоограничивающие резисторы. Эти элементы опущены в модели, чтобы обеспечить приемлемую скорость эмуляции, чтобы и на модели была возможность оценить работу устройства в масштабе времени, близком к реальному. Да! В Digital Invaders вполне можно поиграть на модели с приемлемой скоростью и звуком. С этой же целью я прицепил 4-кнопочную клавиатурку, которая позволяет играть не только мышью, но и с клавиатуры компьютера, клавиши [1], [2], [3], [4]. По клавиатурке надо лишь раз кликнуть мышью, чтобы передать ей фокус ввода. Индикатор на порту BUS я использовал для отладки, а потом и оставил как счётчик пришельцев - так играть интереснее, когда видно их количество. Перезапуск игры по кнопочке RESET. В архиве - проект Proteus и исходники программы... P.S. Возможно, я ошибаюсь, но в ряде мест программы сложилось у меня впечатление, что модель 8048 не совсем корректно обрабатывает инструкцию ADD и как-то странно выставляет при этом флаги...
_________________ iLavr
|
14 Dec 2021 02:26 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
С ADD там вот какая ситуация сложилась... У 1816ВЕ48 ( aka i8048) нет инструкций вычитания и нет сравнения типа CMP Rx, CPI NN. Поэтому там, где в оригинальном коде для 580ВМ80 у меня было CPI NN, я заменял его так: К примеру: CPI 34HПо началу вроде как всё так и получалось... но в какой-то момент вдруг перестало... Причем проверял я это всё через порт BUS: В порту всё видно правильно, но JZ METKA не срабатывает! Тогда я изменил процедуру замены CPI NN: И вот этот вариант работает как из пушки! В общем, в ряде случаев, где в оригинальном коде 580ВМ80 было: Пришлось сделать странную, на мой взгляд, замену А почему так - непонятно, но с JNC METKA алгоритм как в оригинале не работал... Возможно, я какую-то тонкость не уловил, но по ходу уже приходилось делать так, чтобы работало. И - да, я помню, что у 1816ВЕ48 ( aka i8048) флаг Z лишь пока A=0, но здесь это вроде как не влияло.
_________________ iLavr
|
14 Dec 2021 16:18 |
|
|
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
|
|