Проблемы с emu8086 начались после того, как я пытался установить свой обработчик int9 вместо дефолтного Код (ASM): xor ax,ax ;в ax 0 mov ds,ax ; в ds 0 mov word[ds:0020h],CLAVIATURA ;в IDT адрес обр-ка mov word[ds:0022h],0000h CLAVIATURA: ;обработчик Обработчик должен был вывести "+" на экран, но не выводил (вывел только 1 раз, и то фиг знает почему - в это время я до клавиатуры даже не дотрагивался). Решил, что ошибся с адресом, заново всё пересчитал - тот же результат. Ну и решил не долбить себе мозги и написал программу, заполняющую всю IDT адресами этого обработчика Код (ASM): xor ax,ax mov ds,ax mov cx, 0FFh xor si, si myloop: mov word[ds:si],CLAVA add si,2 mov word[ds:si],0 add si,2 dec cx test cx,cx jz exit loop myloop exit: jmp $ CLAVA: ;обработчик Ну и угадайте, что получилось -- НИ-ЧЕ-ГО! Ни разу не словил прерывание! Эмулятор просто записывал все нажатые клавиши в свой буфер. Можно ли вообще на emu8086 установить перехват int9?
TermoSINteZ, 0x20 - termapp, не удивительно что никакой ошибки не происходит. > А еще я не вижу у вас заветного CLI Это не нужно, реалмод. В IDT даже нет дескриптора. --- Сообщение объединено, 11 дек 2019 --- Хотя да, вы правы. Может быть инт во время модификации шлюза, особенно всей IDT.. Впрочем всё не правильно, есть дос прерывание для загрузки дескриптора.
Indy_, Ну человек пишет свою ОСЬ ))) без Protected Mode . аля свой дос. По этому хочет без дос прерываний научиться.
Indy_, Если на 0020h termapp, то где находится IRQ1? В IDT IRQ1 нумеруется как 09h А каждый элемент занимает 4 байта Следовательно, 4*9h=20h --- Сообщение объединено, 17 дек 2019 --- Пересчитал адрес, получилось 24h, но проблему это не решило