Снова R8830 |
Ответить |
Автор | |
Новичок Присоединился: 19 Октябрь 2005 Категория: Russian Federation Online Status: Offline Публикации: 16 |
Опубликовано: 21 Октябрь 2005 01:28 |
Еще раз хочу поднять вопрос о проблемах с переходом CPU188 на процессор R8830.
Как я уже сообщал в ответе ранее, простейшая программа, откомпилированная в BC++5.02, "грохается" с выводом сообщения UNUSED OPCODE и т.д. int main(int argc,char** argv) { return 0; } Сегодня специально разбирался и выяснил, что это происходит для моделей памяти SMALL и LARGE, но не для TINY (прочие не проверял). Все обновления (BIOS и FDOS) выполнены (в том числе и на CPU188 c Am188). Все сравнительные опыты (R8830 с Am188) выполнял путем перетыкания DOC2000 из одного CPU188 в другой. Разработчики Fastwel, глянули бы в STARTUPы BC3.1 и BC5.02, может еще чего наковыряете в R8830. И еще. Я использую в рабочей программе СОМ2 (без BIOS) для связи с удаленным компом (BC3.1 - вынужденно, надо BC5.02). Заметил, что если запускать программу сразу после ее переноса в CPU (по СОМ1), то после активизации связи по СОМ2 программа вылетает (не сразу) по 'Devide error'. Если же сперва перезагрузить CPU, то далее все работает без сбоев. Что-то, видать, с FTRANS'ом не чисто на новом процессоре. Не убирает за собой. PS: Позарез надо в ВС++5.02 работать. |
|
Prosoft.ru Присоединился: 21 Июнь 2003 Online Status: Offline Публикации: 432 |
|
Где-то это уже было: Процессоры RDC имеют серьезный bug - они, будучи типа 186, определяются как 386+. Существует хорошо известный способ программного определения типа процессора. Этот способ основан на манипуляциях с регистром флагов с целью определения какие разряды этого регистра используются, а какие являются резервными. На основании этих манипуляций делается вывод о том, является ли процессор 16- или 32-разрядным. Вот эта последовательность:pushf pop bx mov ax,0FFFh and ax,bx push ax popf pushf pop ax and ax,0F000h cmp ax,0F000h mov dl,1 ;8086/8088 je @@done16 or bx,0F000h push bx popf pushf pop ax and ax,0F000h mov dl,2 ; 186/286je @@done16 Как я уже сказал, процессоры RDC в результате выполнения этой последовательности команд заявляют себя 386+, а значит, позволяют использовать в исполняемом коде 32-разрядные команды.B первые эта "странность" проявилась при загрузке операционной системы FDOS. Поскольку FDOS является продуктом Fastwel, эту проблему решили легко и быстро внесением небольшого дополнительного кода. С уверенностью могу сказать что FDOS от 26.10.2004, без проблем работает с процессорами RDC 8830 и 1610.2 . Ассемблер и Borland C++ 3.1Программы написанные на языке ассемблера работают на процессорах RDC без всяких проблем. Разумеется если разработчик программы явно определил тип процессора директивой .186. Программы разработанные в среде Borland C++ версии 3.1 также работают на процессорах RDC без всяких проблем. Для этого лишь необходимо правильно указать в среде разработки тип процессора: Options|Compiler|Advanced Code Generations|Instructions Set -> 186. Все приложения, разработанные ранее на языке ассемблера или с помощью Borland C++ 3.1 и успешно работавшие на процессорах AMD будут без проблем работать на процессорах RDC.3. Borland C++ 4.5, 5.02 Даже если явно задавать в среде разработки тип процессора - 1 86, программы разработанные в этих средах будут при запуске вызывать исключение 6 (unused opcode). Причина кроется в startup-коде: программа определяет тип процессора и узнает что процессор процессор - 386+. Программа далее пытается уточнить тип процессора: 386, 486 или 586. Для этого она использует 32-разрядные инструкции, которые, разумеется, вызывают исключение "unused opcode". Можно предложить 3 способа решения этой проблемы. Первый - самый простой, но не всегда применимый - перейти на использование пакета Borland C++ 3.1. Второй - предпочтительный, но более трудоемкий - отредактировать startup-код и выбросить оттуда бесполезный и опасный кусок. Третий - установить на изделии новую версию BIOS, в которой обработчик исключения состоит из одной единственной команды IRET. Это приведет к тому что при встрече с запрещенной командой однобайтный префикс 32-разрядной команды (66h, 67h и т.п.) будет проигнорирован, а основное "тело" команды будет выполнено. Разумеется, в целом, команда будет выполнена неверно, но "опасный" участок startup-кода будет успешно пройден. Недостаток данного способа очевиден - теряется эффективное средства диагностики ошибок программирования.4. Turbo Pascal 7.0Ситуация с этим пакетом несколько сложнее чем с BC++. В начале программы проводится определение типа процессора - до 386 или 386 и выше. Поскольку тип процессора определен неверно, программа в ряде случаев (например, при обработке данных типа LongInt) может прибегнуть к инструкции из набора команд процессора 386, что приведет к появлению исключения 6 (unused opcode). К сожалению, ни одно из средств предложенных в п.3 для данного случая не применимо. Особенно следует предостеречь пользователя от использования BIOS с "игнорирующим" обработчиком исключения "unused opcode". Единственное что я могу посоветовать пользователям TP 7.0 - совершенно отказаться от типов данных размером более 16-и разрядов.
|
|
Профили участников
Послать частное письмо
Поиск публикаций участников
Посетить домашнюю страницу участника
Добавить в список приятелей
Действительный член Присоединился: 27 Март 2003 Категория: Russian Federation Online Status: Offline Публикации: 240 |
|
В принципе Фаствелом разработана утилита FIX4RDC которая автоматически решает проблемы со стартап кодом для программ написанных с помощью Borland C++ 4.5, Borland C++ 5.02 и Turbo Pascal 7.0. Эта утилита просто однократно запускается на двоичный код скомпилированной программы. Думаю Вы бы быстрее получили решение своей проблемы если бы обратились напрямую в Прософт по адресу info@prosoft.ru. Данная конференция не является конференцией по техподдержке компании Прософт. Сотрудники Прософт как и любой другой компании участвуют в этой конференции как частные лица и если они сами этого желают. Соответственно у тех из них, которые все таки участвуют в конференции, нет никаких обязательств отвечать на технические вопросы других участников конференции, даже если они знают ответ и вопрос касается аппаратуры поставляемой Прософтом. |
|
Действительный член Присоединился: 15 Октябрь 2003 Категория: Belarus Online Status: Offline Публикации: 141 |
|
Program Main; begin initialization Нас это СПАСАЕТ !!!! Главное - чтобы это было первым исполняемым кодом в программе. |
|
Новичок Присоединился: 19 Октябрь 2005 Категория: Russian Federation Online Status: Offline Публикации: 16 |
|
Благодарю всех за обстоятельные ответы.
|
|
Ответить |
Переход на форум | Права доступа на форуме Вы не можете публиковать новые темы в этом форуме Вы не можете отвечать на сообщения в этом форуме Вы не можете удалять Ваши сообщения на этом форуме Вы не можете редактировать Ваши сообщения на этом форуме Вы не можете создавать голосования на этом форуме Вы не можете выражать своё мнение в голосованиях на этом форуме |