|
nedoPC.orgElectronics hobbyists community established in 2002 |
|
Author |
Message |
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Итак, поскольку Picaro мне очень понравился, я решил максимально приблизить его по набору команд к i8080, а заодно на каком-либо тестовом проекте опробовать возможность интерпретатора, не внося пока кардинальных изменений в прошивку. Поначалу я решил прицепить популярный ЖК–индикатор от Nokia 3310 и сбацать классический Тетрис, но пораскинув мозгами, и, прикинув к носу загогулину, я понял, что индикатор 84x48 точек придётся поставить набок, иначе 'кирпичам' негде разогнаться . Поэтому остановил свой выбор на Теннисе - у него геометрия 'поляны' подходящая.
Picaro претерпел следующие изменения: PIC16F84 позволил ввести стек хотя бы на 8 вложений, что уже вполне терпимо для CALL и RET (PUSH - POP пока не ввёл, но необходимость в них чувствуется и сделать нетрудно).
Сразу хотел заменить EEPROM на 64 К статической RAM, чтоб было как в Специалисте - загрузчик в PIC16F84, а система и программы - в ОЗУ, но это потребовало перелопатить адресацию, так что ограничился пока существующими 2 К, оставив переделки на потом.
Программная модель сейчас выглядит так:
Регистры интерпретатора выполняют следующие функции:
Доработанный набор инструкций следующий:
Инструкция MVIH byte (1001xxxx) на мой взгляд, бестолкова, и на её месте можно добавить 8 нужных команд. Кроме PUSH и POP, хотелось бы CMC, XCHG, XTHL, PCHL. Соображения эти возникли в процессе написания разных подпрограммок, которыми я 'прощупал' возможности Picaro. Но поскольку в кодах можно только 'ностальгировать', а делать что-то серьезное трудновато, я сделал простенький ассемблер, расточенный под особенности общения с Picaro.
Ассемблер по возможностям близок к 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 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Дисплей от Nokia 3310 я прицепил к Picaro вот так:
и решил оценить скорость заполнения дисплея шахматной клеткой.
(проект 'Протезуса' (6 Pro) - Picaro_4.DSN - и программа тут)
http://sgu-wap.narod.ru/Tennis/PicTenis.rar
Скорость оказалась ну гнуууусно медленной, впрочем, она на моем не шибко быстром ноутбуке при эмуляции LCD Nokia 3310 никогда особой резвостью не отличалась. Загрузка процессора - 100%, видимо алгоритм отрисовки неудобный: байты в экране Nokia - стоя, а не лёжа, как в видеосистеме PC.
Дабы медленной отрисовки избежать, я решил прицепить в проект через LPT-порт реальный ЖК–индикатор от Nokia, благо, он у меня давно был. Подключал LCD по следующей схеме:
И на скорую руку у меня получился вот такой вот 'аероплан':
Скорость заполнения стала заметно быстрее, но тут обнаружилась необъяснимая вещь: заполнение реального ЖК происходило совсем не так как в эмуляции!!! Это видно на обеих фотографиях.
(проект 'Протезуса' (6 Pro) - Picaro_5.DSN)
http://sgu-wap.narod.ru/Tennis/PicTenis.rar
Оказалось, что новый LCD, купленный КАНКРЕТНА! для Nokia 3310, он и на Nokia 3410 в упор не похож, хотя геометрия - 84x48 точек сохраняется. Структура дисплея странная:
матрица - 7 строк по 84 байта, но в 1 строке видимы 5 нижних бит, а в 7 строке видимы 3 верхних бита, хотя контроллер вполне слушается системы команд PCD8544. В общем таки ЖО…лтого чемоданчика приключения: делать битовые сдвиги, дык скорость и так невелика, а обрезать видимое поле до 40 точек по вертикали - дык и не увидишь уже ничего. Вопщим я, было, приуныл… отладчика нет под Picaro, а бороть теннис на кривом дисплее только с одним компилятором - удовольствия мало. Тем более, что г…но не приходит одно: по даташиту на контроллер LCD PCD8544, он не умеет записывать в память через логическую операцию XOR, что было бы весьма удобно, и мне казалось, в одном проекте я такое видел:
Карочи - куды ни кинь - визде клин…
|
19 Aug 2010 02:52 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
И тут я ниожыданно вспомнил ублюдка из децкого мультфильма, который, доставая из кармана ахенный молоток, говаривал сакраментальную фразу:
Орешык знаней твиорд!
Но… мы непревыкли атцтупать!
Нам расколоть иво паможыт
Народная идрёна мать!
По-амирикански это будет что-то типа: "есть много способов сдирать со скунса шкуру". Рейган, говорят, любил эту поговорку…
Ну а конкретно решил я написать прототип Тенниса на эмуляторе Специалиста_MX, причем боком А потом, отладив всё, перенести Теннис на платформу Picaro.
Получилось вот что:
Скорости хватает даже на моём дремучем ноутбуке 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 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22730 Location: Silicon Valley
|
силён
|
19 Aug 2010 05:51 |
|
|
FreemaN
Senior
Joined: 09 Jan 2009 20:30 Posts: 124 Location: Мурманск
|
я когда запускал дисплей от 3310, тоже заметил такой баг, поэтому пришлось сделать буфер в озу и выводить в дисплей со сдвигами
это выглядело как то так:
кстати дисплей классный. в рабочем режиме потребляет около 1мА, и контрастность нормальная =)
_________________ Всё что ты видишь - лживый облик.
|
22 Aug 2010 04:03 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Дисплей чюююдный и неприхотливый - нет слов.
Вопрос в том, почему он такой странный, по сравнению с тем,
что все о нём пишут в Инете и по сравнению с моделью.
А второй момент - доступ в EEPROM медленный, да еще и
интерпретатор работает - скорость падает резко.
Так что я хочу обойтись без буфера.
С буфером в эмуляторе Специалиста МХ - у меня тоже
всё без проблем получилось, там ОЗУ хватает.
PS. Может есть какая-то отбраковка этих дисплеев ?
Люди, у которых я его покупал в фирме, знакомые и
не стали бы меня конкретно обманывать.
Тем более мы пообщались с ними - на какой повод я
его покупаю... Они сказали - спасибо, что скупаешь
наши неликвиды.
PPS. Люди в Инете почему-то с такой фегнёй не сталкиваются...
http://rifer.narod.ru/nokia3210.htm
хотя...
ВСЁ ДЕЛО АКАЗЫВАЕЦЦА В КИТАЙЦАХ !!!!
ВОТ ДЕ САБАКА-ТО ПОРЫЛАСЬ !!!!
http://radiokot.ru/articles/29/
|
24 Aug 2010 02:18 |
|
|
FreemaN
Senior
Joined: 09 Jan 2009 20:30 Posts: 124 Location: Мурманск
|
ого, да он оказывается даже покруче оригинального
_________________ Всё что ты видишь - лживый облик.
|
24 Aug 2010 08:09 |
|
|
shoorick
Doomed
Joined: 05 Nov 2007 05:08 Posts: 487 Location: Украина
|
|
25 Aug 2010 06:35 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Ну вот, обещал я сиквел - вот и сиквел, то бишь ПРОДОЛЖЕНИЕ…
На шустром компе я предыдущий свой проект погонял - всё как в замедленном кино при загрузке проца в 66%, что приемлемо, чтобы считать эмуляцию близкой к реальности. Отсюда - первый вывод: подпрограммы дисплея перенесены для скорости в PIC вот так:
Тут уж даже и на моём дремучем ноутбуке IBM ThinkPad 600E с его жалкими 360 MГц всё заметно зашевелилось… Отсель и вывод - эффективные команды должны выполняться внутри PIC, что в принципе не есть удивительно: интерпретатор, по сути, превращает систему в CISC, со всеми известными последствиями.
Команды я добавил следующие:
Особенно меня утомил INKEY, чтобы он заработал, пришлось ввести связь с терминалом с помощью CTS.
Но между активным CTS и старт-битом байта вылезла необъяснимая случайная задержка. С трудом вымучал оптимальную константу ожидания старт-бита.
Запас на 5 команд ещё есть и памяти ещё осталось.
Ну и поскольку к i8080 всё максимально приблизилось, то назовём сий дивайс Pic8080.
Ну а что же с Теннисом? Теннис получился! И поиграть в него можно, взяв здесь проект 'Протезуса' (6 Pro) - Tennis_2.DSN:
http://sgu-wap.narod.ru/PIC8080/Tennis.rar
К сожалению, отпуск кончился, и я не всё успел сделать в Tennis2.asm по сравнению с прототипом Тенниса на эмуляторе Специалиста_MX, но как Альфа-версию или Демо-версию погонять его можно.
Управление с терминала: [<] - 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 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Странно было бы не забороть напоследок вариант с LCD. И на сладкое я его тоже заборол - прямо в последний вечер отпуска.
Умные люди вычислили систему команд китайских контроллеров LCD для Nokia 3310:
Я сдвинул экран вверх на 5 битовых строк и исправил в программе TennisLP.asm адресацию дисплея (Y=Y+1).
Код инициализации неоригинального ЖКИ 3310:
В итоге получилось вот что:
В проекте 'Протезуса' (6 Pro) это - TennisLP.DSN, под управлением TennisLP.asm.
http://sgu-wap.narod.ru/PIC8080/Tennis.rar
Управление такое же: [<] - LEFT; [>] - DOWN; [/] - RIGHT; [L] - UP; [;] - UP.
Если кто чем недоволен... см. выше
PS. Ашыпки и ачипятки тут тожы есть.
PSS. Чортовы LCD замучаешься фоткать: когда контрастно для глаз, в объективе - засветка сплошная… Кстати, как-то фоткал что-то возле ноутбука и в объектив увидел работу ИК порта.
|
31 Aug 2010 22:42 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
А выводы, на мой взгляд, такие:
- интерпретатор команд 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 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Брелок NintendoСдаётся мне вот такую штуку можно запросто сделать на представленной выше элементной базе и ПО: http://www.gamer.ru/hardware/brelok-nintendo-mini-classic-2
Last edited by Lavr on 11 Jan 2016 08:28, edited 1 time in total.
|
22 Jul 2011 07:54 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Я этот проект потихонечку продолжаю и к пенсии может закончу... "Теннис" вобщем- то был тестом на быстродействие и на возможность создать аналог i8080 на PIC16. И результат теста был в принципе положительным... Кроме проблем с отсутствием подходящей памяти меня ещё вот какой вопрос беспокоил живо: LCD от Nokia - простой, но не лучший выбор. Каждый захочет свой LCD прикрутить. В принципе - с исходниками это не трудно - пару процедур исправить - и вперёд! Но вот что делать с геометрией экрана... вобщем-то решение было в одном из "Мониторов" старых "Специалистов" - там были служебные ячейки, отвечающие за геометрию экрана. Типа начальный адрес... ширина и т.д. То есть на поле 384х256 область вывода можно было ограничить... Но здесь задача примерно такая-же - задать геометрию LCD. И мне показалось, что-то похожее на подходящее решение я увидел вот в этом компьютере: Я не знаю зачем ему запрос " Memory size?" - может память разная была у владельцев... что тоже можно принять к сведению. Но вот " Terminal width?" - мне показалось запросом правильным. По этому запросу можно геометрию LCD в ячейки памяти ввести. И, возможно, перед запросом сделать так: вывести число, на котором строка перенеслась - ввести как размер, а далее - пересчёт в пикселы программой. Мне представляется такое решение разумным. А каково ваше мнение?
Last edited by Lavr on 12 Jul 2018 06:00, edited 1 time in total.
|
09 Feb 2012 06:20 |
|
|
A.L.
Novelist
Joined: 23 May 2013 23:21 Posts: 32 Location: 194.158.203.14
|
Есть на e-bay.
Как вариант-можно посмотреть на серию FM25 - энергонезависимая память (FRAM), она более широко распространена и не имеет ограничений на число перезаписей.
http://ramtron.com/products/nonvolatile ... erial.aspx
Не посмотрел на дату, звиняйте.
|
05 Jun 2013 05:48 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Да ничего страшного - за подсказку спасибо!
Только вот Shaos убедил меня в разговоре, что это очень медленное решение.
Поэтому до полной поддержки системы команд i8080 я этот проект со временем доведу.
Но вот с памятью - придется порешать иначе...
PS. И я предполагаю, что с ОЗУ я использую решение от i8085, а цеплять буду обычную статику. Хотя мне только 32К удалось купить...
_________________ iLavr
|
05 Jun 2013 07:17 |
|
|
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
|
|