nedoPC.org

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



Reply to topic  [ 20 posts ]  Go to page 1, 2  Next
Tennis nedo_i8080 
Author Message
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Итак, поскольку Picaro мне очень понравился, я решил максимально приблизить его по набору команд к i8080, а заодно на каком-либо тестовом проекте опробовать возможность интерпретатора, не внося пока кардинальных изменений в прошивку. Поначалу я решил прицепить популярный ЖК–индикатор от Nokia 3310 и сбацать классический Тетрис, но пораскинув мозгами, и, прикинув к носу загогулину, я понял, что индикатор 84x48 точек придётся поставить набок, иначе 'кирпичам' негде разогнаться :-). Поэтому остановил свой выбор на Теннисе - у него геометрия 'поляны' подходящая.
Picaro претерпел следующие изменения: PIC16F84 позволил ввести стек хотя бы на 8 вложений, что уже вполне терпимо для CALL и RET (PUSH - POP пока не ввёл, но необходимость в них чувствуется и сделать нетрудно).
Сразу хотел заменить EEPROM на 64 К статической RAM, чтоб было как в Специалисте - загрузчик в PIC16F84, а система и программы - в ОЗУ, но это потребовало перелопатить адресацию, так что ограничился пока существующими 2 К, оставив переделки на потом.
Программная модель сейчас выглядит так:

Image

Регистры интерпретатора выполняют следующие функции:

Image

Доработанный набор инструкций следующий:

Image

Image

Image

Инструкция MVIH byte (1001xxxx) на мой взгляд, бестолкова, и на её месте можно добавить 8 нужных команд. Кроме PUSH и POP, хотелось бы CMC, XCHG, XTHL, PCHL. Соображения эти возникли в процессе написания разных подпрограммок, которыми я 'прощупал' возможности Picaro. Но поскольку в кодах можно только 'ностальгировать', а делать что-то серьезное трудновато, я сделал простенький ассемблер, расточенный под особенности общения с Picaro.

Image

Ассемблер по возможностям близок к Assm_MX от Специалиста_MX, но чуть проще. Нет арифметики в операндах. Поддерживает псевдооператоры ORG, END, DB, DW, DS, EQ, компилирует в HEX-формат, удобный для загрузки в Picaro методом COPY-PASTE. Метки - латинские символы и цифры ('@' и '_' - не любит).
Ежли кому интересно попробовать, Ассемблер можно взять тут:

http://sgu-wap.narod.ru/Tennis/PICAssm.rar


19 Aug 2010 02:40
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Дисплей от Nokia 3310 я прицепил к Picaro вот так:

Image

и решил оценить скорость заполнения дисплея шахматной клеткой.
(проект 'Протезуса' (6 Pro) - Picaro_4.DSN - и программа тут)
http://sgu-wap.narod.ru/Tennis/PicTenis.rar

Скорость оказалась ну гнуууусно медленной, впрочем, она на моем не шибко быстром ноутбуке при эмуляции LCD Nokia 3310 никогда особой резвостью не отличалась. Загрузка процессора - 100%, видимо алгоритм отрисовки неудобный: байты в экране Nokia - стоя, а не лёжа, как в видеосистеме PC.
Дабы медленной отрисовки избежать, я решил прицепить в проект через LPT-порт реальный ЖК–индикатор от Nokia, благо, он у меня давно был. Подключал LCD по следующей схеме:

Image

И на скорую руку у меня получился вот такой вот 'аероплан':

Image

Скорость заполнения стала заметно быстрее, но тут обнаружилась необъяснимая вещь: заполнение реального ЖК происходило совсем не так как в эмуляции!!! Это видно на обеих фотографиях.

Image

(проект 'Протезуса' (6 Pro) - Picaro_5.DSN)
http://sgu-wap.narod.ru/Tennis/PicTenis.rar

Оказалось, что новый LCD, купленный КАНКРЕТНА! для Nokia 3310, он и на Nokia 3410 в упор не похож, хотя геометрия - 84x48 точек сохраняется. Структура дисплея странная:

Image

матрица - 7 строк по 84 байта, но в 1 строке видимы 5 нижних бит, а в 7 строке видимы 3 верхних бита, хотя контроллер вполне слушается системы команд PCD8544. В общем таки ЖО…лтого чемоданчика приключения: делать битовые сдвиги, дык скорость и так невелика, а обрезать видимое поле до 40 точек по вертикали - дык и не увидишь уже ничего. Вопщим я, было, приуныл… отладчика нет под Picaro, а бороть теннис на кривом дисплее только с одним компилятором - удовольствия мало. Тем более, что г…но не приходит одно: по даташиту на контроллер LCD PCD8544, он не умеет записывать в память через логическую операцию XOR, что было бы весьма удобно, и мне казалось, в одном проекте я такое видел:

Image

Карочи - куды ни кинь - визде клин…


19 Aug 2010 02:52
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
И тут я ниожыданно вспомнил ублюдка из децкого мультфильма, который, доставая из кармана ахенный молоток, говаривал сакраментальную фразу:
Орешык знаней твиорд!
Но… мы непревыкли атцтупать!
Нам расколоть иво паможыт
Народная идрёна мать!

По-амирикански это будет что-то типа: "есть много способов сдирать со скунса шкуру". Рейган, говорят, любил эту поговорку…

Ну а конкретно решил я написать прототип Тенниса на эмуляторе Специалиста_MX, причем боком :-) А потом, отладив всё, перенести Теннис на платформу Picaro.
Получилось вот что:

Image

Скорости хватает даже на моём дремучем ноутбуке IBM ThinkPad 600E, и это несмотря на то, что на LCD всё выводится просто покадрово со всеми битовыми сдвигами. Это внушает надежду, на то, что и на Picaro, возможно, получится не черепаший спорт.
Кто хочет побаловаться, артефакт можно взять тут.
http://sgu-wap.narod.ru/Tennis/PONG.rar

Дальше план такой: удобные инструкции i8080 имплементировать в Picaro, а Tennis.asm адаптировать под то, что получится.
Так что… ПРОДОЛЖЕНИЕ СЛЕДУЕТ !

PS. у кого комп шустрый - попробуйте Picaro_4.DSN, интересно, какова всёж реальная скорость эмуляции.

PPS. если кто встречал подобный LCD, может опознает его, вдруг окажется, что и запись в память через XOR у него есть.


19 Aug 2010 02:58
Profile
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22412
Location: Silicon Valley
Reply with quote
Post 
силён ;)

_________________
:dj: https://mastodon.social/@Shaos


19 Aug 2010 05:51
Profile WWW
Senior
User avatar

Joined: 09 Jan 2009 20:30
Posts: 124
Location: Мурманск
Reply with quote
Post 
Quote:
Оказалось, что новый LCD, купленный КАНКРЕТНА! для Nokia 3310, он и на Nokia 3410 в упор не похож, хотя геометрия - 84x48 точек сохраняется. Структура дисплея странная ...

я когда запускал дисплей от 3310, тоже заметил такой баг, поэтому пришлось сделать буфер в озу и выводить в дисплей со сдвигами
это выглядело как то так:
Code:
void LCD_outBuff (void)
   {
   LCD_CS;
   unsigned char x=0;
   unsigned char y=0;
   while (y<8)
      {
      LCD_COM;
      write_SPI(0x40|y);//set y coordinate
      write_SPI(0x80|0); //set x coordinate
      LCD_DAT;
      x=0;
      while (x<84)
         {
         SPDR=(LCD_buff[x][y-1]>>5)+(LCD_buff[x][y]<<3);
         while (!(SPSR & 0x80));
         x++;
         };
      y++;
      };
   LCD_UNCS;
   }

кстати дисплей классный. в рабочем режиме потребляет около 1мА, и контрастность нормальная =)

_________________
Всё что ты видишь - лживый облик.


22 Aug 2010 04:03
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Дисплей чюююдный и неприхотливый - нет слов.
Вопрос в том, почему он такой странный, по сравнению с тем,
что все о нём пишут в Инете и по сравнению с моделью.
А второй момент - доступ в EEPROM медленный, да еще и
интерпретатор работает - скорость падает резко.
Так что я хочу обойтись без буфера.
С буфером в эмуляторе Специалиста МХ - у меня тоже
всё без проблем получилось, там ОЗУ хватает.

PS. Может есть какая-то отбраковка этих дисплеев ?
Люди, у которых я его покупал в фирме, знакомые и
не стали бы меня конкретно обманывать.
Тем более мы пообщались с ними - на какой повод я
его покупаю... Они сказали - спасибо, что скупаешь
наши неликвиды. :)

PPS. Люди в Инете почему-то с такой фегнёй не сталкиваются... :cry:
http://rifer.narod.ru/nokia3210.htm
хотя...
ВСЁ ДЕЛО АКАЗЫВАЕЦЦА В КИТАЙЦАХ !!!!
ВОТ ДЕ САБАКА-ТО ПОРЫЛАСЬ !!!!
http://radiokot.ru/articles/29/ :kruto:


24 Aug 2010 02:18
Profile
Senior
User avatar

Joined: 09 Jan 2009 20:30
Posts: 124
Location: Мурманск
Reply with quote
Post 
ого, да он оказывается даже покруче оригинального :)

_________________
Всё что ты видишь - лживый облик.


24 Aug 2010 08:09
Profile
Doomed
User avatar

Joined: 05 Nov 2007 05:08
Posts: 487
Location: Украина
Reply with quote
Post 
:kruto:


25 Aug 2010 06:35
Profile WWW
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Ну вот, обещал я сиквел - вот и сиквел, то бишь ПРОДОЛЖЕНИЕ… :)
На шустром компе я предыдущий свой проект погонял - всё как в замедленном кино при загрузке проца в 66%, что приемлемо, чтобы считать эмуляцию близкой к реальности. Отсюда - первый вывод: подпрограммы дисплея перенесены для скорости в PIC вот так:

Image

Тут уж даже и на моём дремучем ноутбуке IBM ThinkPad 600E с его жалкими 360 MГц всё заметно зашевелилось… Отсель и вывод - эффективные команды должны выполняться внутри PIC, что в принципе не есть удивительно: интерпретатор, по сути, превращает систему в CISC, со всеми известными последствиями.

Команды я добавил следующие:

Image

Особенно меня утомил INKEY, чтобы он заработал, пришлось ввести связь с терминалом с помощью CTS.

Image

Но между активным CTS и старт-битом байта вылезла необъяснимая случайная задержка. С трудом вымучал оптимальную константу ожидания старт-бита. :(
Запас на 5 команд ещё есть и памяти ещё осталось. :)
Ну и поскольку к i8080 всё максимально приблизилось, то назовём сий дивайс Pic8080.

Ну а что же с Теннисом? Теннис получился! И поиграть в него можно, взяв здесь проект 'Протезуса' (6 Pro) - Tennis_2.DSN:

http://sgu-wap.narod.ru/PIC8080/Tennis.rar

К сожалению, отпуск кончился, и я не всё успел сделать в Tennis2.asm по сравнению с прототипом Тенниса на эмуляторе Специалиста_MX, но как Альфа-версию или Демо-версию погонять его можно. :)

Image

Управление с терминала: [<] - LEFT; [>] - DOWN; [/] - RIGHT; [L] - UP; [;] - UP.
Клавиши такие, поскольку коды курсора терминал игнорирует и не передаёт.
Виртуальные кнопки делать не стал, поскольку играть ими мышью в 'Протезусе' крайне неудобно (кто не верит - потычте в "Space Invaders", что есть в комплекте 'Протезуса').
Если кто чем недоволен - исходники и компилятор с проектом есть. :)

PS. Ашыпки и ачипятки везде истессвенно есть. :) Отпуск кончился, "гипс снимают, клиент уезжает" и когда я этим снова займусь - не ведаю.


Last edited by Lavr on 31 Aug 2010 22:44, edited 1 time in total.



31 Aug 2010 22:35
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Странно было бы не забороть напоследок вариант с LCD. И на сладкое я его тоже заборол - прямо в последний вечер отпуска. :)
Умные люди вычислили систему команд китайских контроллеров LCD для Nokia 3310:

Image

Я сдвинул экран вверх на 5 битовых строк и исправил в программе TennisLP.asm адресацию дисплея (Y=Y+1).
Код инициализации неоригинального ЖКИ 3310:
Code:
    LcdSend( 0x21, LCD_CMD ); // LCD Extended Commands.
    LcdSend( 0xC8, LCD_CMD ); // Set LCD Vop (Contrast).
    LcdSend( 0x06, LCD_CMD ); // Set Temp coefficent.
    LcdSend( 0x45, LCD_CMD ); // Move LCD memory up on 5 pix - Сдвигаем на 5 пикселов.
    LcdSend( 0x13, LCD_CMD ); // LCD bias mode 1:48.
    LcdSend( 0x20, LCD_CMD ); // LCD Standard Commands,Horizontal addressing mode.
    LcdSend( 0x0C, LCD_CMD ); // LCD in normal mode.



В итоге получилось вот что:

Image

В проекте 'Протезуса' (6 Pro) это - TennisLP.DSN, под управлением TennisLP.asm.

http://sgu-wap.narod.ru/PIC8080/Tennis.rar

Управление такое же: [<] - LEFT; [>] - DOWN; [/] - RIGHT; [L] - UP; [;] - UP.

Если кто чем недоволен... см. выше :wink:

PS. Ашыпки и ачипятки тут тожы есть. :)
PSS. Чортовы LCD замучаешься фоткать: когда контрастно для глаз, в объективе - засветка сплошная… Кстати, как-то фоткал что-то возле ноутбука и в объектив увидел работу ИК порта.


31 Aug 2010 22:42
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
А выводы, на мой взгляд, такие:
- интерпретатор команд i8080 на PIC16 вполне способен выполнять задачи реального времени средней сложности;
- система команд, аналогичная i8080, представляется более удобной по емкости информационного слова (что, впрочем, не новость);
- командами - аналогами i8080 вполне можно программировать и под голым PIC, если хорошо продумать макросы, определения и подпрограммы.

И что же дальше ?
А дальше следует поднять тактовую частоту до 10 МГц, хотя возможны проблемы с экземплярами PIC и с питанием.
ЖК можно перевесить на Порт А, параллельно EEPROM, используя вывод A5 как выборку CS - мне кажется должно получиться.
Тогда Порт В - свободен для каких-либо задач и есть удобная индикация.
И последнее - прицепить вместо EEPROM - SRAM. И вот тут проблемы: подходящую SRAM я нашел только одну.
23A640/23K640 от Микрочип:
64K SPI Bus Low-Power Serial SRAM


И даже не знаю - сколь она доступна в России. Может кто чего подскажет доступное ?


PS. Я тут попробовал прогнать Теннис под Intel Core2 CPU - 2.00 GHz. Дык это прям не Теннис а летучий Pennis!
Я такого даже не ожидал... Но есть и г...но. Задержка в INKEY зависит от частоты :( Клавиатуру слушается из рук вон плохо... И выигрывать начал. Вон под Специалистом, если клавишь не трогать - всегда выигрываешь сам со счетом 15:10 :)


31 Aug 2010 23:47
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Брелок Nintendo

Сдаётся мне вот такую штуку можно запросто сделать на представленной выше элементной базе и ПО:

Attachment:
Nintendo24509.jpg
Nintendo24509.jpg [ 8.61 KiB | Viewed 18248 times ]
http://www.gamer.ru/hardware/brelok-nintendo-mini-classic-2
Quote:
Брелок-«приставка» пригодится тем, кто захочет развлечься по дороге на работу или учебу в общественном транспорте. На текущий момент доступны три игры: Mario’s Cement Factory, Donkey Kong Junior и Super Mario Bros. К сожалению, устанавливать другие игры нельзя.

Каждой игре присвоен свой цвет: Mario’s Cement Factory – брелок синего цвета, Donkey Kong Junior – желтый брелок, и Super Mario Bros – зеленый.

Брелоки Nintendo Mini Classic внешним видом напоминают приставки Game Boy. Кроме игры, они также могут выполнять функцию часов и будильника. Купить игровую консоль Nintendo в виде брелока можно по цене £9.99 (чуть более 16 американских долларов).


Last edited by Lavr on 11 Jan 2016 08:28, edited 1 time in total.



22 Jul 2011 07:54
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Lavr wrote:
Ну вот, обещал я сиквел - вот и сиквел, то бишь ПРОДОЛЖЕНИЕ… :)

Image


Я этот проект потихонечку продолжаю и к пенсии может закончу... :wink:
"Теннис" вобщем- то был тестом на быстродействие и на возможность создать аналог i8080 на PIC16.
И результат теста был в принципе положительным...

Кроме проблем с отсутствием подходящей памяти меня ещё вот какой вопрос беспокоил живо:

LCD от Nokia - простой, но не лучший выбор. Каждый захочет свой LCD прикрутить.
В принципе - с исходниками это не трудно - пару процедур исправить - и вперёд!
Но вот что делать с геометрией экрана... вобщем-то решение было в одном из "Мониторов"
старых "Специалистов" - там были служебные ячейки, отвечающие за геометрию экрана.
Типа начальный адрес... ширина и т.д.
То есть на поле 384х256 область вывода можно было ограничить...
Но здесь задача примерно такая-же - задать геометрию LCD.

И мне показалось, что-то похожее на подходящее решение я увидел вот в этом компьютере:

Image

Я не знаю зачем ему запрос "Memory size?" - может память разная была у владельцев...
что тоже можно принять к сведению.

Но вот "Terminal width?" - мне показалось запросом правильным.
По этому запросу можно геометрию LCD в ячейки памяти ввести.

И, возможно, перед запросом сделать так: вывести
Code:
123456789012345678901234
56...

число, на котором строка перенеслась - ввести как размер, а далее - пересчёт в пикселы программой.

Мне представляется такое решение разумным. А каково ваше мнение?


Last edited by Lavr on 12 Jul 2018 06:00, edited 1 time in total.



09 Feb 2012 06:20
Profile
Novelist

Joined: 23 May 2013 23:21
Posts: 32
Location: 194.158.203.14
Reply with quote
Lavr wrote:
И последнее - прицепить вместо EEPROM - SRAM. И вот тут проблемы: подходящую SRAM я нашел только одну.
23A640/23K640 от Микрочип:
64K SPI Bus Low-Power Serial SRAM


Есть на e-bay.
Как вариант-можно посмотреть на серию FM25 - энергонезависимая память (FRAM), она более широко распространена и не имеет ограничений на число перезаписей.
http://ramtron.com/products/nonvolatile ... erial.aspx

Не посмотрел на дату, звиняйте.


05 Jun 2013 05:48
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
A.L. wrote:
Есть на e-bay.
Как вариант-можно посмотреть на серию FM25 - энергонезависимая память (FRAM), она более широко распространена и не имеет ограничений на число перезаписей.
...
Не посмотрел на дату, звиняйте.

Да ничего страшного - за подсказку спасибо! :kruto:
Только вот Shaos убедил меня в разговоре, что это очень медленное решение.

Поэтому до полной поддержки системы команд i8080 я этот проект со временем доведу.
Но вот с памятью - придется порешать иначе...



PS. И я предполагаю, что с ОЗУ я использую решение от i8085, а цеплять буду
обычную статику. Хотя мне только 32К удалось купить...
:(

_________________
iLavr


05 Jun 2013 07:17
Profile
Display posts from previous:  Sort by  
Reply to topic   [ 20 posts ]  Go to page 1, 2  Next

Who is online

Users browsing this forum: No registered users and 2 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.