Вниз  Эмулятор IBM PC XT
- 18.03.2013 / 21:50
Lexi
  Пользователь

Lexi 
Сейчас: Offline
adult
> а там есть компиль C
В образе, скорее всего нет, а так разумеется существуют.

> и ST?
Тогда, когда вышли эти оси вряд ли существовали и его авторы )
- 19.03.2013 / 14:07
DominaN
  Пользователь

DominaN 
Сейчас: Offline
Посмотрел сорцы, стреманулся
- 20.03.2013 / 09:40
Lexi
  Пользователь

Lexi 
Сейчас: Offline
> который выдаёт divide overflow после

Точнее на нём самом. Простейший пример:
( TEST )
0 INVERT CONSTANT MAX-UINT

MAX-UINT MAX-UINT UM* MAX-UINT UM/MOD

__________

Другими словами делается (FFFF * FFFF) / FFFF
Asm реализация этих слов:
;C UM* u1 u2 -- ud unsigned 16x16->32 mult.
     head UMSTAR,3,'UM*',docode
         pop ax
         mul bx
         push ax
         mov bx,dx
         next

;C UM/MOD ud u1 -- u2 u3 unsigned 32/16->16
     head UMSLASHMOD,6,'UM/MOD',docode
         pop dx
         pop ax
         div bx
         push dx ; remainder
         mov bx,ax ; quotient
         next
- 20.03.2013 / 11:00
Lexi
  Пользователь

Lexi 
Сейчас: Offline
Ошибка, как я понимаю здесь:
  1.        if( wr ){
  2.         long dop = (long)( reg[0] | (reg[2]<<16) );
  3.  
  4.         b1 = (int)(dop / (long)b2);
  5.  
  6.         if ( (b1 & 0xFFFF0000)!=0 ) {
  7.          IP = b3;
  8.          interrupt( 0 );
  9.          IP --;
  10.          break;
  11.         }
  12.         reg[0] = b1;
  13.         reg[2] = (int)(dop % (long)b2);
  14.  
  15.        }
Не тот регистр или мы не попадаем в эту ветку?
- 20.03.2013 / 11:50
Lexi
  Пользователь

Lexi 
Сейчас: Offline
А, нет. Вижу что дело в приведении типов
  1. 0 != (((1 | (0xfffe<<16))/0xffff) & 0xFFFF0000)
выдаёт true (хотя в python - false :) ).

Изменено Lexi (20.03 / 11:53) (всего 1 раз)
- 20.03.2013 / 12:15
Lexi
  Пользователь

Lexi 
Сейчас: Offline
Т.е. reg[2] тоже нужно приводить к long.
- 20.03.2013 / 16:41
Artem_x86
  Пользователь

Artem_x86 
Сейчас: Offline
Lexi, одну ошибку это решило - канкулятор в винде начал работать, но есть ещё ошибка, которая более серьёзна чем эта.
- 20.03.2013 / 17:07
Lexi
  Пользователь

Lexi 
Сейчас: Offline
Artem_x86,
Там нет других мест с битовой арифметикой и числами больше 2^31?
Forth-овский аnsitest теперь проходит без ошибок ? (ты бы выложил исправленный эмулятор/исходники)
Можно в конце концов сделать отладочный вывод из interrupt( 0 ), будет понятней где вылетает.
- 20.03.2013 / 18:23
Artem_x86
  Пользователь

Artem_x86 
Сейчас: Offline
Lexi, ксатати ДОС после простоя перестала выдавать ошибки.


Прикрепленные файлы:
IBM_PC_EGA.jar (36.54 кб.) Скачано 137 раз
IBM_PC_EGA_sour(…).zip (35.85 кб.) Скачано 38 раз
- 20.03.2013 / 18:54
adult
  Пользователь

adult 
Сейчас: Offline
Artem_x86, ты говорил, что есть проблемы с добавлением фс в эмулятор. Что за проблемы?
Наверх  Всего сообщений: 675
Фильтровать сообщения
Поиск по теме
Файлы топика (57)