User Tag List

Страница 17 из 20 ПерваяПервая ... 1314151617181920 ПоследняяПоследняя
Показано с 161 по 170 из 193

Тема: [Поиск 1] Эмуляция

  1. #161

    Регистрация
    24.01.2008
    Адрес
    Уфа
    Сообщений
    3,926
    Спасибо Благодарностей отдано 
    105
    Спасибо Благодарностей получено 
    291
    Поблагодарили
    217 сообщений
    Mentioned
    10 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Tronix Посмотреть сообщение
    Так же интересно, почему если в качестве биос подсунуть некий тест, эмуль вообще падает по ексепшену.
    Нашёл таки Это не баг, это фича
    Арифметические команды выполняются 1-в-1, т.е. деление так и будет выполнено ассемблеровской командой div. Вот только ексепшен я пока не отлавливаю. Об этом я знаю. Будет сделано, когда-нибудь.

    Цитата Сообщение от Tronix Посмотреть сообщение
    С умножением похоже нелады во флагах после операций. И это не только старшие биты.
    Странно. Учитывая, что умножение тоже выполняется командой mul. Я конечно проверю ещё сохранение флагов после ассемблерных вставок, но кто его знает, может есть разница в 16ти и 32х битных режимах.

  2. #162

    Регистрация
    08.10.2005
    Адрес
    Москва
    Сообщений
    14,394
    Спасибо Благодарностей отдано 
    1,702
    Спасибо Благодарностей получено 
    2,219
    Поблагодарили
    873 сообщений
    Mentioned
    69 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию

    Цитата Сообщение от b2m Посмотреть сообщение
    Нашёл таки Это не баг, это фича
    Арифметические команды выполняются 1-в-1, т.е. деление так и будет выполнено ассемблеровской командой div. Вот только ексепшен я пока не отлавливаю. Об этом я знаю. Будет сделано, когда-нибудь.
    Твой эмуль написан не на си?

  3. #163

    Регистрация
    24.01.2008
    Адрес
    Уфа
    Сообщений
    3,926
    Спасибо Благодарностей отдано 
    105
    Спасибо Благодарностей получено 
    291
    Поблагодарили
    217 сообщений
    Mentioned
    10 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Titus Посмотреть сообщение
    Твой эмуль написан не на си?
    На 99,9% на си. Просто в данном случае я решил использовать ассемблерные вставки для арифметики, чтобы не заморачиваться с тем, как каждая команда выполняется, какие флаги устанавливает. Процессор-то тот же, что и эмулируемый

  4. #164

    Регистрация
    08.10.2005
    Адрес
    Москва
    Сообщений
    14,394
    Спасибо Благодарностей отдано 
    1,702
    Спасибо Благодарностей получено 
    2,219
    Поблагодарили
    873 сообщений
    Mentioned
    69 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию

    Цитата Сообщение от b2m Посмотреть сообщение
    На 99,9% на си. Просто в данном случае я решил использовать ассемблерные вставки для арифметики, чтобы не заморачиваться с тем, как каждая команда выполняется, какие флаги устанавливает. Процессор-то тот же, что и эмулируемый
    Как-то контрпродуктивно)
    Я понимаю, вставлять асм для ускорения, но для аутентичности, причем сомнительной...

  5. #165

    Регистрация
    16.09.2010
    Адрес
    г. Москва
    Сообщений
    1,951
    Спасибо Благодарностей отдано 
    81
    Спасибо Благодарностей получено 
    261
    Поблагодарили
    125 сообщений
    Mentioned
    3 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от b2m Посмотреть сообщение
    Просто в данном случае я решил использовать ассемблерные вставки для арифметики, чтобы не заморачиваться с тем, как каждая команда выполняется, какие флаги устанавливает.
    Если вы хотите предсказуемого поведения, боюсь заморочиться все-таки придется.

  6. #166

    Регистрация
    24.01.2008
    Адрес
    Уфа
    Сообщений
    3,926
    Спасибо Благодарностей отдано 
    105
    Спасибо Благодарностей получено 
    291
    Поблагодарили
    217 сообщений
    Mentioned
    10 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Обновил эмуль. Исправил push sp и aad.

    Цитата Сообщение от Tronix Посмотреть сообщение
    Смысл в том, что биты 12-15 регистра флагов на 8088 хрен поменяешь, они всегда аппаратно в единице.
    Я вот одного не пойму - в конце дампа res_mul.bin сохранён регистр флагов, и там старшие 4 бита нулевые. А сам говорил, что они должны быть 1. Откуда дамп?

  7. #166
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

  8. #167

    Регистрация
    16.09.2010
    Адрес
    г. Москва
    Сообщений
    1,951
    Спасибо Благодарностей отдано 
    81
    Спасибо Благодарностей получено 
    261
    Поблагодарили
    125 сообщений
    Mentioned
    3 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Дамп походу с 80188, поэтому в этих дампах старшие биты нулевые. Вот здесь я тесты выцепил: http://orbides.1gb.ru/80186_tests.zip Ну только перекомпилял FASM'ом под 8Kb и в div вставил STI в начале на всякий случай. На самом деле хз, насколько они правильные и откуда (под чем) снимались дампы. Возможно даже не под реальным процом а в эмуляторе. Поэтому доверять им тоже надо 50/50

    Оригинальный тред со ссылкой на тесты: http://forum.osdev.org/viewtopic.php...6a485&start=15

    ---------- Post added at 16:54 ---------- Previous post was at 16:47 ----------

    Цитата Сообщение от b2m Посмотреть сообщение
    Обновил эмуль. Исправил push sp и aad.
    Пошел PCTOOLS с Info о системе. Пишет что установлен 80188 CPU Раньше был затык в месте определения проца. Изменилось поведение CheckIT - теперь на Benchmark не вылетает с math error, а висит
    Последний раз редактировалось Tronix; 18.12.2013 в 16:59.

  9. #168

    Регистрация
    24.01.2008
    Адрес
    Уфа
    Сообщений
    3,926
    Спасибо Благодарностей отдано 
    105
    Спасибо Благодарностей получено 
    291
    Поблагодарили
    217 сообщений
    Mentioned
    10 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Tronix Посмотреть сообщение
    Пошел PCTOOLS с Info о системе. Пишет что установлен 80188 CPU
    Круто Подозреваю, из-за неправильного количества тактов команд mul/div. Времянки пока не соответствуют действительности.

  10. #169

    Регистрация
    16.09.2010
    Адрес
    г. Москва
    Сообщений
    1,951
    Спасибо Благодарностей отдано 
    81
    Спасибо Благодарностей получено 
    261
    Поблагодарили
    125 сообщений
    Mentioned
    3 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от b2m Посмотреть сообщение
    Круто Подозреваю, из-за неправильного количества тактов команд mul/div. Времянки пока не соответствуют действительности.
    Ненене. Такты тут 99.99999% ни при чем. Вот в чем может быть дело:
    Код:
    ;-----------------------------------------------------------------------------
    ; If this test passes, then we need some other means to differentiate between
    ; 8088/8088 and 80186/80188.  This method I will use comes from "80186/188,
    ; 80C186/C188 Hardware Reference Manual" from Intel, PN# 270788, page
    ; A-2:	"When a word write is performed at offset FFFFh in a segment, the
    ; 8086 will write one byte at offset FFFFh, and the other at offset 0, while
    ; an 80186 family processor will write one byte at offset FFFFh, and the
    ; other at offset 10000h (one byte beyond the end of the segment).
    ;-----------------------------------------------------------------------------
    ; Before we can blast a value out to FFFFh, we must save anything there, so
    ; we don't crash anybody else's data.
    ;-----------------------------------------------------------------------------
    	mov	bx,ds:[0ffffh]		; get original data
    	mov	word ptr ds:[0ffffh],0aaaah	; write signature at test location
    	cmp	byte ptr ds:[0],0aah	; 8086?
    	mov	ds:[0ffffh],bx
    	je	short @Test_V20
    	inc	ah
    	jmp	short CPU_8086_Exit
    То есть 8088 когда пытаются записать в конец сегмента слово, пишет один байт по смещению FFFF, а второй который не лезет - по смещению 0000. 186 и 286 - пишут один байт по смещению FFFF, а второй байт уже в другой сегмент по смещению 0.

    ---------- Post added at 17:13 ---------- Previous post was at 17:07 ----------

    Еще почему CheckIT пишет NEC V20 - может из-за того, что в 8088 после mul всегда устанавливается ZF, даже если результат не ноль, а в V20 флаги устанавливаются в зависимости от результата.

    Код:
    ;-----------------------------------------------------------------------------
    ; The V20 and 8086 differ with respect to the handling of FLAGS during a MUL
    ; instruction.	The 8086 always sets ZF=0 (NZ).  The V20 sets ZF according to
    ; the result.
    ;-----------------------------------------------------------------------------
    @Test_V20:
    	push	ax			; save results
    	xor	al,al			; force ZF
    	mov	al,40h			; multiplicand
    	mul	al			; V20 doesn't affect ZF
    	pop	ax			; restore results
    	jnz	short CPU_8086_Exit	; Intel?
    	or	ah,10h			; Set V20 flag
    	jmp	short CPU_8086_Exit	; go split
    И еще насколько помню, что-то там было с SHL, SHR - в 8088 может сдвигать только на несколько бит вправо влево, тогда как V20 и 188 - хоть на 255 в CL. Может найду код, покажу.

    ---------- Post added at 17:24 ---------- Previous post was at 17:13 ----------

    Наоборот походу, 8086 может сдвигать на сколько хош туда сюда, 186 - ограничено. Кодес:
    Код:
               mov  cx,0121h                ; If CH can be shifted by 21h,
               shl  ch,cl                   ; then it's an 8086, because
               jz   short p1_8086           ; a 186+ limits shift counts.

  11. #170

    Регистрация
    08.10.2005
    Адрес
    Москва
    Сообщений
    14,394
    Спасибо Благодарностей отдано 
    1,702
    Спасибо Благодарностей получено 
    2,219
    Поблагодарили
    873 сообщений
    Mentioned
    69 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию

    А что, подробной доки на 8086 до сих пор нету?

Страница 17 из 20 ПерваяПервая ... 1314151617181920 ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. [Поиск 1] поиск информации по модулям
    от Daniil Chislov 86 в разделе Поиск
    Ответов: 7
    Последнее: 25.12.2023, 16:54
  2. [Поиск 3] Восстановление
    от Filin в разделе Поиск
    Ответов: 71
    Последнее: 13.12.2020, 16:23
  3. [Поиск 1] Tandy Sound эмуляция
    от Tronix в разделе Поиск
    Ответов: 2
    Последнее: 21.03.2019, 18:40
  4. [Поиск 2] Поиск информации
    от dk_spb в разделе Поиск
    Ответов: 17
    Последнее: 02.10.2017, 09:00
  5. Эмуляция AY/YM
    от mungo в разделе Эмуляторы
    Ответов: 18
    Последнее: 22.03.2013, 06:14

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •