TalismanChet
@TalismanChet
Лицо зла

Как изменить существующее прерывание биос?

Я пишу кое-что MSDOS-подобное и понял, что не умею заменять прерывания. Вот, что я попытался сделать:
format binary as "mbr"

short fix 

use16

org 0x7C00

fake_boot:
	jmp short boot
	nop

header:
	db "EONDISK "
	dw 512
	db 1
	dw 1
	db 2
	dw 224
	dw 2880
	db 0xF0
	dw 9
	dw 18
	dw 2
	dq 0
	dw 0
	db 41
	dd 0
	db "EON DISK   "
	db "FAT12   "

boot:
	push word 0
	pop es
	mov bx, 0x11*2+0xF000
	mov word [es:bx], int10-$$
	int 0x11
	cli
	hlt

int10:
	mov ah, 0x0E
	mov al, 'X'
	int 0x10
	iret

times 510-$+$$ db 0x00
dw 0xAA55


написано в fasm'е.

Я пытался гуглить, всю ночь потратил, но попадал только на гайды "напиши свою недоОС с нуля на опкодах".

Т. е. проблема в отсутствии информации, а не сложности задачи.
  • Вопрос задан
  • 212 просмотров
Решения вопроса 1
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
Вот, что я попытался сделать:
push word 0
  pop es
  mov bx, 0x11*2+0xF000
  mov word [es:bx], int10-$$


Расскажи немного словами, что ты имел в виду когда писал это?

Я пытался гуглить, всю ночь потратил, …
проблема в отсутствии информации


Вот это нашёл? https://ru.wikipedia.org/wiki/Таблица_векторов_пре...

Самое важное для тебя и полностью достаточное для реализации твоей задачи предложение из этой статьи:
В микропроцессорах Intel 8086/80186 таблица векторов прерываний расположена в первом килобайте памяти начиная с адреса 0000:0000 и содержит 256 векторов прерываний в формате сегмент:смещение.


boot:
  push word 0
  pop es
  mov bx, 0x11*4
  mov word [es:bx + 2], cs
  mov word [es:bx], int10
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы