Tennis nedo_i8080

8-битные микроконтроллеры PICmicro (ПИКи) от Microchip и совместимые, а также 16-битные PIC24 и 32-битные PIC32

Moderator: Shaos

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

Tennis nedo_i8080

Post by Lavr »

Итак, поскольку 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
User avatar
Lavr
Supreme God
Posts: 16676
Joined: 21 Oct 2009 08:08
Location: Россия

LCD_2_Picaro

Post by Lavr »

Дисплей от 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

Карочи - куды ни кинь - визде клин…
User avatar
Lavr
Supreme God
Posts: 16676
Joined: 21 Oct 2009 08:08
Location: Россия

Let_It_Be !

Post by Lavr »

И тут я ниожыданно вспомнил ублюдка из децкого мультфильма, который, доставая из кармана ахенный молоток, говаривал сакраментальную фразу:
Орешык знаней твиорд!
Но… мы непревыкли атцтупать!
Нам расколоть иво паможыт
Народная идрёна мать!

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

Ну а конкретно решил я написать прототип Тенниса на эмуляторе Специалиста_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 у него есть.
User avatar
Shaos
Admin
Posts: 23989
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

силён ;)
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
FreemaN
Senior
Posts: 124
Joined: 09 Jan 2009 20:30
Location: Мурманск

Post by FreemaN »

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

Code: Select all

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мА, и контрастность нормальная =)
Всё что ты видишь - лживый облик.
User avatar
Lavr
Supreme God
Posts: 16676
Joined: 21 Oct 2009 08:08
Location: Россия

2_FreemaN

Post by Lavr »

Дисплей чюююдный и неприхотливый - нет слов.
Вопрос в том, почему он такой странный, по сравнению с тем,
что все о нём пишут в Инете и по сравнению с моделью.
А второй момент - доступ в EEPROM медленный, да еще и
интерпретатор работает - скорость падает резко.
Так что я хочу обойтись без буфера.
С буфером в эмуляторе Специалиста МХ - у меня тоже
всё без проблем получилось, там ОЗУ хватает.

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

PPS. Люди в Инете почему-то с такой фегнёй не сталкиваются... :cry:
http://rifer.narod.ru/nokia3210.htm
хотя...
ВСЁ ДЕЛО АКАЗЫВАЕЦЦА В КИТАЙЦАХ !!!!
ВОТ ДЕ САБАКА-ТО ПОРЫЛАСЬ !!!!
http://radiokot.ru/articles/29/ :kruto:
User avatar
FreemaN
Senior
Posts: 124
Joined: 09 Jan 2009 20:30
Location: Мурманск

Post by FreemaN »

ого, да он оказывается даже покруче оригинального :)
Всё что ты видишь - лживый облик.
User avatar
shoorick
Doomed
Posts: 487
Joined: 05 Nov 2007 05:08
Location: Украина

Post by shoorick »

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

Tennis nedo_Pic8080

Post by Lavr »

Ну вот, обещал я сиквел - вот и сиквел, то бишь ПРОДОЛЖЕНИЕ… :)
На шустром компе я предыдущий свой проект погонял - всё как в замедленном кино при загрузке проца в 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.
User avatar
Lavr
Supreme God
Posts: 16676
Joined: 21 Oct 2009 08:08
Location: Россия

Tennis nedo_Pic8080 + LCD

Post by Lavr »

Странно было бы не забороть напоследок вариант с LCD. И на сладкое я его тоже заборол - прямо в последний вечер отпуска. :)
Умные люди вычислили систему команд китайских контроллеров LCD для Nokia 3310:

Image

Я сдвинул экран вверх на 5 битовых строк и исправил в программе TennisLP.asm адресацию дисплея (Y=Y+1).
Код инициализации неоригинального ЖКИ 3310:

Code: Select all

    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 замучаешься фоткать: когда контрастно для глаз, в объективе - засветка сплошная… Кстати, как-то фоткал что-то возле ноутбука и в объектив увидел работу ИК порта.
User avatar
Lavr
Supreme God
Posts: 16676
Joined: 21 Oct 2009 08:08
Location: Россия

Оргвыводы

Post by Lavr »

А выводы, на мой взгляд, такие:
- интерпретатор команд 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 :)
User avatar
Lavr
Supreme God
Posts: 16676
Joined: 21 Oct 2009 08:08
Location: Россия

Брелок Nintendo

Post by Lavr »

Брелок Nintendo

Сдаётся мне вот такую штуку можно запросто сделать на представленной выше элементной базе и ПО:
Nintendo24509.jpg
http://www.gamer.ru/hardware/brelok-nin ... -classic-2
Брелок-«приставка» пригодится тем, кто захочет развлечься по дороге на работу или учебу в общественном транспорте. На текущий момент доступны три игры: 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 американских долларов).
You do not have the required permissions to view the files attached to this post.
Last edited by Lavr on 11 Jan 2016 08:28, edited 1 time in total.
User avatar
Lavr
Supreme God
Posts: 16676
Joined: 21 Oct 2009 08:08
Location: Россия

Re: Tennis nedo_Pic8080

Post by Lavr »

Lavr wrote:Ну вот, обещал я сиквел - вот и сиквел, то бишь ПРОДОЛЖЕНИЕ… :)

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

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

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

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

Image

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

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

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

Code: Select all

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

Мне представляется такое решение разумным. А каково ваше мнение?
Last edited by Lavr on 12 Jul 2018 06:00, edited 1 time in total.
A.L.
Novelist
Posts: 32
Joined: 23 May 2013 23:21
Location: 194.158.203.14

Re: Оргвыводы

Post by A.L. »

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

Не посмотрел на дату, звиняйте.
User avatar
Lavr
Supreme God
Posts: 16676
Joined: 21 Oct 2009 08:08
Location: Россия

Re: Оргвыводы

Post by Lavr »

A.L. wrote:Есть на e-bay.
Как вариант-можно посмотреть на серию FM25 - энергонезависимая память (FRAM), она более широко распространена и не имеет ограничений на число перезаписей.
...
Не посмотрел на дату, звиняйте.
Да ничего страшного - за подсказку спасибо! :kruto:
Только вот Shaos убедил меня в разговоре, что это очень медленное решение.

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



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