18.03.2013 / 21:50 | |
Lexi Пользователь Сейчас: Offline
Имя: Алексей Регистрация: 12.03.2013
| adult> а там есть компиль C В образе, скорее всего нет, а так разумеется существуют. > и ST? Тогда, когда вышли эти оси вряд ли существовали и его авторы ) |
19.03.2013 / 14:07 | |
DominaN Пользователь Сейчас: Offline
Имя: Кирилл Откуда: Смоленск Регистрация: 28.09.2011
| Посмотрел сорцы, стреманулся
|
20.03.2013 / 09:40 | |
Lexi Пользователь Сейчас: Offline
Имя: Алексей Регистрация: 12.03.2013
| > который выдаёт 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 Пользователь Сейчас: Offline
Имя: Алексей Регистрация: 12.03.2013
| Ошибка, как я понимаю здесь: if( wr ){
long dop = (long)( reg[0] | (reg[2]<<16) );
b1 = (int)(dop / (long)b2);
if ( (b1 & 0xFFFF0000)!=0 ) {
IP = b3;
interrupt( 0 );
IP --;
break;
}
reg[0] = b1;
reg[2] = (int)(dop % (long)b2);
}
Не тот регистр или мы не попадаем в эту ветку? |
20.03.2013 / 11:50 | |
Lexi Пользователь Сейчас: Offline
Имя: Алексей Регистрация: 12.03.2013
| А, нет. Вижу что дело в приведении типов 0 != (((1 | (0xfffe<<16))/0xffff) & 0xFFFF0000)
выдаёт true (хотя в python - false ). Изменено Lexi (20.03 / 11:53) (всего 1 раз) |
20.03.2013 / 12:15 | |
Lexi Пользователь Сейчас: Offline
Имя: Алексей Регистрация: 12.03.2013
| Т.е. reg[2] тоже нужно приводить к long.
|
20.03.2013 / 16:41 | |
Artem_x86 Пользователь Сейчас: Offline
Имя: Артём Откуда: Донецк Регистрация: 30.10.2012
| Lexi, одну ошибку это решило - канкулятор в винде начал работать, но есть ещё ошибка, которая более серьёзна чем эта.
|
20.03.2013 / 17:07 | |
Lexi Пользователь Сейчас: Offline
Имя: Алексей Регистрация: 12.03.2013
| Artem_x86, Там нет других мест с битовой арифметикой и числами больше 2^31? Forth-овский аnsitest теперь проходит без ошибок ? (ты бы выложил исправленный эмулятор/исходники) Можно в конце концов сделать отладочный вывод из interrupt( 0 ), будет понятней где вылетает.
|
20.03.2013 / 18:23 | |
Artem_x86 Пользователь Сейчас: Offline
Имя: Артём Откуда: Донецк Регистрация: 30.10.2012
| Lexi, ксатати ДОС после простоя перестала выдавать ошибки.
Прикрепленные файлы: IBM_PC_EGA.jar (36.54 кб.) Скачано 137 раз IBM_PC_EGA_sour(…).zip (35.85 кб.) Скачано 39 раз |
20.03.2013 / 18:54 | |
adult Пользователь Сейчас: Offline
Имя: Сергей Откуда: Где-то возле Москвы Регистрация: 01.07.2012
| Artem_x86, ты говорил, что есть проблемы с добавлением фс в эмулятор. Что за проблемы?
|