|
nedoPC.orgElectronics hobbyists community established in 2002 |
|
|
Page 1 of 1
|
[ 15 posts ] |
|
Процессор 1810ВМ86М и написание эмулятора 286 инструкций...
Author |
Message |
Tronix
Doomed
Joined: 18 Nov 2013 02:38 Posts: 662 Location: Москва
|
Некоторое время назад приобрел по случаю пару 1810ВМ86М, один из которых сейчас разместился в Поиск-2. Документации на процессор нет, и в сети ходили лишь слухи и догадки - умеет ли он 186+ опкоды, или не умеет, и отличается ли чем то от 1810ВМ86, кроме повышенной рабочей частоты? Так вот, спустя время, экспериментально подтверждено следующее: - процессор умеет выполнять аппаратно такие 186+ команды как: POPA, PUSHA, PUSH imm, LEAVE, INS, OUTS; - процессор умеет генерировать int 06h (invalid opcode). Затем, нашлась некоторая методичка, записанная "от руки" пользователем serg с форума "полигон призраков" о компьютере ЕС1842, которая подтвердила результаты экспериментов. Согласно ей, действительно, процессор включает: - дополнительные управляющие признаки в регистре FLAG; - реализацию команд POPA, PUSHA, PUSH imm, LEAVE, INS, OUTS и модификацию выполнения команд IRET, CLD, CLI, STD, STI; - 3 дополнительных прерывания: 1) по недействительному коду в реальном и виртуальном режимах (вектор 06); 2) при изменении содержимого сегментного регистра в виртуальном режиме (вектор 05); 3) при эмуляции команды ESC в виртуальном и реальном режимах (вектор 07) - аппаратная поддержка переключения стека при прерываниях в виртуальном режиме. Таким образом, 1810ВМ86М - уникальная разработка, не имеющая аналогов в мире (c) Серьезно, это не клон 8086, не клон 80186 и не клон V30. В паре с "контроллером виртуальной памяти" К1845ВГ1 вполне вероятно, что оно вполне могло эмулировать 286, причем не только реальный режим, но и расширенный режим 286. До наших дней сохранился некий "ЭМУЛЯТОР" с дискеты от ЕС1842, который так же немного приоткрывает завесу тайны. Если его дизассемблировать, то видно, что существуют дополнительные опкоды вида F1 FA и F1 FB, которые, по-видимому, служат для переключения теневой пары регистров SS':SP' . Так же там еще встречаются инструкции вида F1 FD, и если не ошибаюсь, то и F1 FC. Что они делают - я не разобрался. Данный эмулятор конечно же не запускается на ПК Поиск-2, так как у него отсутствует К1845ВГ1, отсутствует память в районе E8000, куда эмулятор пытается установить теневой стек и прочие мелочи, немного отличающие Поиск-2 от ЕС1842.... ...Поэтому, решено было попробовать написать свой эмулятор 186+ инструкций реального режима для данного процессора. На удивление, сперва все пошло гладко, и я написал в перехваченном int 06h эмуляцию: - всех видов сдвигов на значение отличное от 1 (опкоды C0, C1); - знакового деления со значением (опкоды 6B, 69), пока только для регистровой адресации; и запнулся на реализации команды ENTER. Нужно в прерывании затолкнуть в стек значение (push bp), только в стек до прерывания. Казалось бы простая задача, а поставила меня в тупик. Хочется красивого решения, но пока единственное, что придумывается, смещать все значения в стеке на одно вниз, корректировать реальный SP.... Как-то вроде не красиво, поэтому прошу совета. Вот, например, примерно так выглядит обработчик 06h: | | | | Code: _rfl equ 020h _rcs equ 018h _rip equ 016h _ax equ 014h _cx equ 012h _dx equ 010h _bx equ 0Eh _sp equ 0Ch _bp equ 0Ah _si equ 08h _di equ 06h _es equ 04h _ds equ 02h _ss equ 00h
new_06h: .286 pusha .8086 ; push ax ; push cx ; push dx ; push bx ; push bp ; push si ; push di
push es push ds ;Save ALL registers. push ss ;Its not really nesecary to save SS ;) mov bp,sp ;but this engine was built for expansion
;One thing to note, if you want to know the TRUE value of SP, that ;is, you must subtract 6 from it, which covers the calling cs, ip & f. ;and thats sub w[bp+_sp],6 not sub sp,6 ;)
push cs pop ds
GetOpCode: lds si,dword ptr [bp+_rip] ;Get the seg:off of the next opcode
dec si ; !!! WARNING here !!!
cld ;clear direction lodsw ;get opcode
;AL now holds our bytevalue opcode.
cmp al,0c8h ; ENTER opcode? jne Bad_opcode
lodsw ;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ; HERE I NEED DO ; push bp ; mov bp,sp ; sub sp,ax ;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Bad_opcode: RunNextOpCode: pop ss pop ds pop es ;Restore the flags .286 popa .8086 ; pop di ; pop si ; pop bp ; pop bx ; pop dx ; pop cx ; pop ax iret ;Run the next opcode. | | | | |
|
01 Dec 2019 09:38 |
|
|
Vic3Dexe
Doomed
Joined: 16 Dec 2014 11:58 Posts: 370 Location: Киев
|
Хм.. я так понял, 80186 он умеет? Тогда зачем писать свой ENTER/LEAVE ? Или умеет, но не все? Что за "виртуальный" режим? Да еще и с контроллером памяти... Далее, если даже enter понадобился, то не все так просто. Вот этого совершенно недостаточно, enter выглядит так А вот его реализация из моего софт-эмулятора (извините, комментарии поплыли)
|
03 Dec 2019 07:23 |
|
|
Tronix
Doomed
Joined: 18 Nov 2013 02:38 Posts: 662 Location: Москва
|
Умеет, но не все. В этом то и прикол. Умеет: POPA, PUSHA, PUSH imm, LEAVE, INS, OUTS Не умеет: SHIFT's со значением, отличным от 1, ENTER, IMUL imm8/imm16 Ну, насчет ENTER - мне пока попались только ENTER imm16, 0. В принципе, я набросал реализацию, push bp / mov bp,sp / sub sp,imm16, но пока не проверял - времени нет. В методичке немного описано. Лучше чем там, инфы увы нет нигде.
|
03 Dec 2019 11:10 |
|
|
Vic3Dexe
Doomed
Joined: 16 Dec 2014 11:58 Posts: 370 Location: Киев
|
Ну так это же не значит, что других вариантов для ib нет ib - номер кадра в стеке, iw - его размер. Если будет несколько вложеных процедур, и где-то изнутри понадобится обратиться к локальным переменным внешней - будет enter imm16,не-ноль. Увы, яндекс у нас не тогойт...
|
03 Dec 2019 13:43 |
|
|
Tronix
Doomed
Joined: 18 Nov 2013 02:38 Posts: 662 Location: Москва
|
А, ну да, забываю. Положил на гугл-драйв.
|
03 Dec 2019 22:17 |
|
|
Vic3Dexe
Doomed
Joined: 16 Dec 2014 11:58 Posts: 370 Location: Киев
|
Афигеть, реально от руки! Я думал - фигура речи. Спасибо, пойду изучать. upd: Ясно, теневые дескрипторы и вообще механизмы протмоды 286 попросту засунули в отдельный внешний чип, обозвав это "виртуальной" памятью. Tronix, сорян, но я не вполне копенгаген, зачем он вообще нужен без своей "защищенной" половинки. Обычные команды 186 - и те толком не доделали. Протмода тем более не стартанет. О каком эмуляторе 286 может идти речь? Ну это я, глядя на название темы... Ну и если совсем по сабжу: А без вариантов. Именно потому, что bp должно быть в стеке ДО прерывания. Ну либо завести себе глобальные переменные где-то, куда сейвить CS/IP/FL + все используемые регистры, потом, почистив стек:
|
04 Dec 2019 01:18 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Есть у меня большое подозрение, что я с таким сталкивался, но не купил его в древние времена. 286-ю машину я себе покупал по частям, поскольку денег вечно не хватало, карта на ней у меня стояла EGA, но дисплей был "Электроника 32ВТЦ". Работать неудобно было, т.к. некоторые программы переходили в режим развертки EGA сразу, а развёртка Электроники такого осилить не могла. Поэтому озадачился я EGA-дисплей приобрести. И как-то меня пригласили посмотреть два EGA-дисплея на выбор. Дисплей я себе тогда и приобрёл, но меня очень удивила машина, с которой мне дисплеи демонстрировали: сделана она была по канонам IBM, но видно, что из отечественных комплектующих в основном. Я поинтересовался - что за системник, и мне сказали, что это " советская двойка", причем " процессор у неё выполнен не на одном кристалле". Предлагали купить недорого в приложение к дисплею, но я отказался, так к тому времени уже "накушался" "Искры-1030", которая была неполность совместимой ХТ-шкой, что также очень мешало работать. С тех пор "советская двойка" мне не попадалась никогда, но, видимо, в ней и был этот самый 1810ВМ86М. Кстати, мне думается, это проделка конторы Кобылинского - он же состряпал комплект 580 и комплект 1810, за что и получил "доктора" без защиты дисертации. 580ВМ80 они потом допилили до раритетного 580ВМ1, возможно, и с 1810ВМ86 - такая же история...
_________________ iLavr
|
04 Dec 2019 05:50 |
|
|
Tronix
Doomed
Joined: 18 Nov 2013 02:38 Posts: 662 Location: Москва
|
Да понятно, что толком то и не нужен, потому что есть NEC V30, да и вообще, вон AMD тандерриперы II всякие, но так, интересу ради... О полноценном 286 речи не идет, да, это я немного не верно выразился. Речь идет о эмулировании 186+ инструкций. Ну или 286, но только реального режима. Например, конкретная цель - запустить игрушку Flashback на этом камне на Поиск-2. Она прекрасно себя чувствует с V30, но естественно не запускается на 8086, потому что скомпилирована как раз для реального режима 286. Что касается реализации - да, пришел к такому же выводу, уменьшаем SP на два, потом просто все значения в стеке двигаем на два, в дырку пишем нужное значение и выходим с выгрузкой из стека pop'ами. Пока нет времени проверить на железе.
|
04 Dec 2019 06:21 |
|
|
Vic3Dexe
Doomed
Joined: 16 Dec 2014 11:58 Posts: 370 Location: Киев
|
Ну тогда по поводу enter мне добавить нечего. Ежели чего - обращайся
|
04 Dec 2019 06:43 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Из интересу посмотрел в поиске - это, действительно, украинское изделие: Удивился, что по меньшей мере до 2017 года его выпускали: Музей электронных раритетов - 1810 серия А производил его с 1986 года завод "Квазар", тот же, что 580-й комплект делал: Музей электронных раритетов - 580 серия
_________________ iLavr
|
04 Dec 2019 07:02 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22756 Location: Silicon Valley
|
Хм, это интересно! А наши реверс-инжыниры его ещё не восстановили потранзисторно?... P.S. Поскрёб по сусекам - у меня только обычные ВМ86 есть несколько штук - с буковкой М нету - видимо надо идти к знакомым украинским ебейщикам
|
06 Dec 2019 20:36 |
|
|
Tronix
Doomed
Joined: 18 Nov 2013 02:38 Posts: 662 Location: Москва
|
Пока как-то непонятно все.... Нужно разобраться с парой теневых регистров SS':SP'
Во-первых, после входа в прерывание по вектору 6 у меня SS равен FFFF. Это с одной стороны понятно, а с другой - не понятно. Понятно - потому что в методичке есть запись "аппаратная поддержка переключения стека при прерываниях в виртуальном режиме". Не понятно - потому что у меня процессор в реальном режиме (биты 13 и 14 в флагах я не трогаю). Хотя нужно проверить, что там, но по умолчанию я думаю он в реальном режиме должен работать. Получается, что при прерывании он автоматически переключает SS':SP' на SS:SP. А по IRET, соответственно меняет обратно. Это наверное круто, если знать точно как оно работает, но пока мне не нужно и даже во вред, так как когда я меняю SP и всовываю в стек значение, по IRET я улетаю куда-то неведомо куда, но точно не туда, откуда пришел.
Во-вторых, досовый Turbo Debugger в DosBox как то тоже не круто работает, если пытаться что-то делать со стеком в прерывании. Похоже он запоминает перед входом в прерывание значение CS:IP у себя в памяти, а по IRET восстанавливает свои CS:IP из памяти, а не из настоящего стека, поэтому отладка "на кошках" не получается.
В-третьих, надо разобраться с опкодами F1 FA и F1 FB. Написал простенькую програмку показывающую значение всех регистров, в середину запихну F1 FB, затем меняем SS:SP, затем F1 FA, показываем значение всех регистров. И еще разобраться с F1 FD - вот это вообще не понятно. Просмотреть еще раз дизасм "ЭМУЛЯТОР ЕС1842", по-моему я там видел еще и F1 FC. Это загадки. Осложняется все тем, что все это нужно делать на реальной машине, а она сейчас не на столе, а в ящике. Грубо говоря - собрал "на весу", чуть чуть проверил что-то и приходится разбирать. Неудобно крайне.
|
09 Dec 2019 11:32 |
|
|
dk1spb
Novelist
Joined: 13 Jan 2016 11:07 Posts: 35
|
А чем "заводской" эмулятор не устраивает? Который m286.com ?
|
28 Feb 2020 05:06 |
|
|
Tronix
Doomed
Joined: 18 Nov 2013 02:38 Posts: 662 Location: Москва
|
|
28 Feb 2020 07:36 |
|
|
dk1spb
Novelist
Joined: 13 Jan 2016 11:07 Posts: 35
|
А, понял. Мой косяк: пропустил что это для Поиск-2. Сорри
|
28 Feb 2020 08:30 |
|
|
|
Page 1 of 1
|
[ 15 posts ] |
|
Who is online |
Users browsing this forum: Google [Bot] and 6 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
|
|