Что не так с emu8086?

Тема в разделе "WASM.OS.DEVEL", создана пользователем beginnerga, 10 дек 2019.

Метки:
  1. beginnerga

    beginnerga New Member

    Публикаций:
    0
    Регистрация:
    1 дек 2019
    Сообщения:
    10
    Проблемы с emu8086 начались после того, как я пытался установить свой обработчик int9 вместо дефолтного
    Код (ASM):
    1. xor ax,ax ;в ax 0
    2. mov ds,ax ; в ds 0
    3. mov word[ds:0020h],CLAVIATURA ;в IDT адрес обр-ка
    4. mov word[ds:0022h],0000h
    5. CLAVIATURA:
    6. ;обработчик
    Обработчик должен был вывести "+" на экран, но не выводил (вывел только 1 раз, и то фиг знает почему - в это время я до клавиатуры даже не дотрагивался). Решил, что ошибся с адресом, заново всё пересчитал - тот же результат. Ну и решил не долбить себе мозги и написал программу, заполняющую всю IDT адресами этого обработчика
    Код (ASM):
    1. xor ax,ax
    2. mov ds,ax
    3. mov cx, 0FFh
    4. xor si, si
    5. myloop:
    6. mov word[ds:si],CLAVA
    7. add si,2
    8. mov word[ds:si],0
    9. add si,2
    10. dec cx
    11. test cx,cx
    12. jz exit
    13. loop myloop
    14. exit:
    15. jmp $
    16. CLAVA:
    17. ;обработчик
    18.  
    19.  
    Ну и угадайте, что получилось -- НИ-ЧЕ-ГО! Ни разу не словил прерывание! Эмулятор просто записывал все нажатые клавиши в свой буфер.
    Можно ли вообще на emu8086 установить перехват int9?
     
  2. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    4.775
    А с чего это вы задаёте нулевой селектор, а не текущий. Рекурсивно вызывать прерывания ?
     
  3. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.546
    Адрес:
    Russia
    А еще я не вижу у вас заветного CLI
    кто прерывания отключать то будет?
     
    Indy_ нравится это.
  4. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    4.775
    TermoSINteZ,

    0x20 - termapp, не удивительно что никакой ошибки не происходит.

    > А еще я не вижу у вас заветного CLI

    Это не нужно, реалмод. В IDT даже нет дескриптора.
    --- Сообщение объединено, 11 дек 2019 ---
    Хотя да, вы правы. Может быть инт во время модификации шлюза, особенно всей IDT.. Впрочем всё не правильно, есть дос прерывание для загрузки дескриптора.
     
  5. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.546
    Адрес:
    Russia
    Indy_,
    Ну человек пишет свою ОСЬ ))) без Protected Mode . аля свой дос. По этому хочет без дос прерываний научиться.
     
  6. beginnerga

    beginnerga New Member

    Публикаций:
    0
    Регистрация:
    1 дек 2019
    Сообщения:
    10
    Indy_,
    Если на 0020h termapp, то где находится IRQ1?
    В IDT IRQ1 нумеруется как 09h
    [​IMG]
    А каждый элемент занимает 4 байта
    Следовательно, 4*9h=20h
    --- Сообщение объединено, 17 дек 2019 ---
    Пересчитал адрес, получилось 24h, но проблему это не решило