мысли вслух)
собственно не имеет смысла писать эмулятор меги для меги который бутед тянуть эмулятор i486 т.к придется писать очень много мутерного кода(но ко внешней озу придется обращатся так сказать влоб а это несовсем удобно)
эмулятор пика рассмотрел как вариант (всеж команд поменьше да и легкие все) но опять же нет привязки ко внешней озу
собственно и решил я написать собственную систему команд для 'среднего' эмулятора у которой будет доступ к озу пзу портам мк а потом уже писать в бойткодах эмулятор i486
тобиж хочу сделать примерно такое
все команды будут состоять из 6 байт не больше и не меньше (в пике16 12 бит пришлось бы проверять четная либо нечетная команда да еще плюс к тому перескакивать на адреса неочень удобно с 12битными словами черт его знает в какой участок кода оно может занести)
на саму команду будет отводится 16 бит и на данные/адрес tot 32 бита
ну ронов думаю взть по
8 однобойтовых
8 2байтовых
8 4байтовых
8 8байтовых
8 16байтовых
8 32байтовых
+
4байта на всякие флаги
а то что останется на адреса перехода(допустим чтобы можно было из call вызвать еще 1 call а потом из него еще 1 call и так пока не надоест

) +буферы для прошивки пзушки ну и всякую мелочевку
ну команды которые сразу стоит добавить это наверное
AND OR XOR NOT NAND NOR + - * /
sin cos tan ctg - через ряды с большой степенью погрешности либо по таблице
ну и еще для возведения в степени и всякого такого нужны
exp ln log
ну и еще sqrt(x*x+y*y)
так же операции сдвига ,сравнения, перестановки (для 1 бойтовой - перестановка тетрад , для 2 байтовой - перестановка байтов и так далее до 32байтовых) присвоения(причем если однобайтовой присвоить 2байтовую то в 1 байтовой окажется младший байт 2байтовой) , подпрограммы , переходы , нупы , слипы , ну и собственно 1 из главных задач - доступ к озу
ну и адресация для внешней памяти примерн такая : сначала будут ити примерно 64 кб пзу а потом после этой области будет ити озу
как пример команды приведу несколько команд
0000000000000000 00000000000000000000000000000000- нуп)
0000000000000001 00000000000000000000000000000000 - допустим в 32 битный регистр А32 назовем его так) занести значение 00000000000000000000000000000000
0000000000000010 0000000000000000dddddddddddddddd - выгрузить регистр A32 в озу по адресу dddddddddddddddd
ну и таких команд можно напридумывать 65 536 но думаю можно будет обойтись и 256 и уменьшить общую команду на 1 байт
какие команды еще необходимо добавить к вышеописанным или их хватит для описания тогоже i486?