Идея эмуляции 8-битного процессора (i8080, Z80, 6502 или 6800) на платформе PIC неоднократно обсуждалась здесь на форуме:
Z80 -> PIC http://www.nedopc.org/forum/viewtopic.php?t=7636PIC17C4X в режиме микропроцессора (nedoPC-17)http://www.nedopc.org/forum/viewtopic.php?t=8303и др.
Есть ссылки на уже реализованные проекты:
эмулятор Z80 на PIChttp://www.nedopc.org/forum/viewtopic.php?t=9278Мне эта идея также близка, но с одной поправкой - выполнить эмулятор конкретно на одном-двух корпусах PIC16F84.
Во-первых, у меня они в достаточном количестве есть (и как говаривал Наполеон своим артиллеристам - "… всё остальное не имеет значения"
). Но, во-вторых, эмулятор i8080, выполненный на 40-выводном корпусе, вызывает какой-то внутренний протест.
Понятно, что в случае PIC придется создать фактически интерпретатор кодов команд i8080, и в этой связи меня заинтересовали интерпретаторы BASIC Stamp, разработанные как отдельными любителями, так и целыми ассоциациями. В отличие от Паралакса, джентльмены добиваются фактически спортивного результата, упихивая интерпретатор BASIC конкретно в PIC16F84 и не иначе. Среди таких проектов интересны BASIC ST1-64 и BS/4.
BS Club - PIC Interpreters Clubhttp://webspace.webring.com/people/hu/um_3829/PIC Micro Controller BASIC Languageshttp://www.piclist.com/techref/microchip/language/basics.htmDontronics - Basic Stamp Divided By Four!http://www.dontronics.com/bs4.htmlИ тут мне попался замечательный проект from Tom Napier - “
Picaro”.
Я не понял местного юмора, и, возможно, Shaos внесёт ясность:
но джентльмен Tom Napier удачно реализовал прототип интерпретатора кодов команд, близких к набору i8080, на одном корпусе PIC16, что, собственно, он и поставил своей задачей.
О подробностях можно прочитать здесь:
http://i.cmpnet.com/edtn/ccellar/e023pdf1.pdfи взять оригинальные исходники...
ftp://ftp.circuitcellar.com/Circuit_Cellar/1998/Issue_93/picaro_UPDATED!.ZIPА здесь - копия документа в формате Word, в которой мне пришлось подчистить некоторые выявленные опечатки:
http://sgu-wap.narod.ru/Picaro/Picaro_Controller.docибо, если на заборе написано слово из трёх букв - не верь, там могут быть и дрова.
С учётом того, что кроме, собственно, самогО интерпретатора, Tom Napier упихал в PIC16C56 ещё и тест–мониторную программу, очень похожую на ранний Монитор от "Специалиста", он убедил меня, что i8080-совместимый компьютер в принципе можно реализовать на одном-двух корпусах PIC16F84, поскольку места в памяти программ у Тома еще и осталось!
Схемотехника Picaro весьма проста:
http://sgu-wap.narod.ru/Picaro/Scheme.gifи это сподвигло меня попробовать девайс в среде 'Протезуса':
http://sgu-wap.narod.ru/Picaro/Picaro.gifВыяснилось, что отладка интерпретатора, выполняющего интерпретирующую программу - это не фунт изюма, поэтому я вывел на индикаторы текущий адрес интерпретируемого кода, чтобы видеть соответствие между кодами PIC16F84 и программой на псевдо-i8080.
Пришлось также адаптировать коды PIC16C56 к PIC16F84, и на этом этапе выяснились некоторые опечатки в исходниках Тома, которые я и подправил по ходу дела. Не скажу, что кочевряжился очень серьёзно, поскольку всё равно придётся для себя многое переписать и изменить, но тест проходит успешно, и опции все работают корректно, хотя наличие ошибок не исключаю.
Проект 'Протезуса' (6 Pro) выкладываю:
http://sgu-wap.narod.ru/Picaro/Picaro.rarРабочий вариант - Picaro_1.DSN (в Picaro_2.DSN я смотрел протокол работы с EEPROM, ибо глючило в одном месте, но вроде подправил.)
Когда всё заработало, ей богу, испытал редкую ностальгию и опустился до удовольствия попрограммировать в кодах под Монитором, благо 'Виндавоз' позволяет сделать это без бумажки, а процесс так напоминает спартанский способ общения с древним 'Специалистом'.
Параллельный интерфейс, вероятно, нужен для отладки программ при общении с инструментальной машиной, а так всё вполне работоспособно через консоль RS-232.
Компиляторов в коды псевдо-i8080 Том не прикладывал, справедливо заметив:
Мне кажется, что Picaro - достойный прототип для создания собственных эмуляторов 8-битных компьютеров, тем паче, что можно начинать не с нуля, а пробовать всё на работающем экземпляре, благо Том не пожадничал исходники, а я внёс тест-программу в EEPROM, так что сразу всё работает, и нет нужды ничего записывать. Хотя можно менять программу с консоли побайтно опцией E Монитора, а также записывать её в память EEPROM директивой U, синтаксис которой несколько непривычен, но работает сугубо так, как написано у Тома. Это позволяет заносить программу через окно консоли методом Copy-Paste строками по 16 байт в HEX-коде, не забывая заканчивать их [Enter].
Замечу, что остальные директивы Монитора заканчивать [Enter] не надо, но синтаксис следует соблюдать полностью: адрес - три символа, байт - два символа, регистр - прописные символы латиницы, иначе Picaro не понимает. [Enter] позволяет прервать интерпретацию, как и любую команду, хотя бывает и не так. [Space] в директиве E позволяет пропустить редактируемый байт. Все директивы интуитивно понятны, хотя и приводится их подробное описание.
Надеюсь, материал будет полезным для тех, кто хочет сам замутить эмулятор i8080 на PIC.
PS. Shaos - удали с аплоудера файлы:
http://www.nedopc.org/nedopc/upload/Picaro.bmp http://www.nedopc.org/nedopc/upload/Picaro0.bmp http://www.nedopc.org/nedopc/upload/Picaro1.bmp они меньше по размеру, чем PNG, но .BMP движок не счел за [img]