+13
- 1
- 2
- 3
- 4
- 5
- 6
- 7
void SetInterruptHandler(int id, unsigned int offset) {
__asm cli;
unsigned int *idt = (unsigned int*)0;
idt[id*2+0] = 0x00080000 | (offset & 0x0000FFFF);
idt[id*2+1] = 0x00008E00 | (offset & 0xFFFF0000);
__asm sti;
}
Как и обещал в http://govnokod.ru/12413#comment166763, выкладываю исходник говнолоадера, запускающего 32-х битный сишный код с дискетки: https://github.com/bormand/tryos, хотя судя по всему никому это не интересно...
Если кому-то все-таки придет в голову странное желание это собрать - нужна вижуалка (к сожалению код написан лет 5 назад, когда я юзал вижуалку) и nasm. Путь к nasm прописываем в Makefile, запускаем nmake, полученный floppy.dsk можно скормить виртуалбоксу, или же зарезать на дискету, если удастся вспомнить как она выглядит...
UPD: Скрин http://rghost.ru/43035733.view
Запостил:
bormand,
14 Января 2013
А почему офсет так распилен - х.з. Интелу так захотелось. В GDT/LDT с офсетами еще хуже, емнип, они на три части напилены.
P.S. IDT - interrupt descriptor table, если вопрос был об этом.
По мне так говно не у тебя в коде, а в проектировании начиная с 286.
Может @bormand и туда руку приложил
Ну что поделать, обратная совместимость всегда тяготит и превращает код в говно... а тут тем более процессор, и терять все старые наработки под старые процы было бы очень необдуманно.
Вон они начали с нуля, запилили IA-64, и где он сейчас? А amd64, добавивший режимы совместимости по самый 8086 напротив был успешен, и даже интел теперь клепает процы с такой (правда немного допиленной) архитектурой.
если бы они его на десктопы позиционировали, то, может, толк бы вышел
а так это был изначально нишевый продукт для узкого круга ограниченных людей
В серверах он.
Действительно, жаль, что на десктопы не дошел...
Нечего тут жалеть. Всё произошло очень предсказуемо. Athlon64 разбирали как горячие пирожки. Патчи под винду и луникс сделали за год, в 2005 уже появились x64 ОС, с поддержкой всего 32-разрядного кода.
Именно поэтому x86 до сих пор жива. Обратная совместимость - это даже хорошо. А AMD кстати дропнула поддержку 3DNow в новых процах, ибо никому нахер не нужно - так что там тоже не догматики сидят.
И даже Стив Жопс выбросил свой илитный PowerPC и перевёл макбуки на x86 (Core2).
Плять, а как же мой софтварный рендер, который я когда-то писал? Они ухуели. Тогда мой проц поддерживал только MMX и 3DNow!. У меня просто не было выбора. А теперь дропнули. Между тем 3дноуп всегда работал быстрее ссе. И для операционной системы он всегда был легким и совместимым, так как сохранять его регистры было не нужно при переключении задач. А для ссе нужно. ссеГовно! У меня нет слов просто.
Почему?
Сомнительное преимущество.
если же ос поддерживала ссе, то она их сохраняла только в том случае, если они поменялись, что удлиняло переключение задач весьма прилично, тк там ни одна линейка кеша
а 3дноуп не замедляло переключение потоков, тк все равно фпу регистры сохранять приходилось
Сейчас даже самые дохлые видюхи в десятки раз мощнее топовых процов. Правда не всегда удастся распараллелить алгоритм так, чтобы удалось засунуть его на GPU...
:)
P.S. Она поди еще и PCI?
Конечно PCI AGP ж уже мёртв