+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
LispGovno 15.01.2013 06:37 # 0
bormand 15.01.2013 06:57 # +2
А почему офсет так распилен - х.з. Интелу так захотелось. В GDT/LDT с офсетами еще хуже, емнип, они на три части напилены.
P.S. IDT - interrupt descriptor table, если вопрос был об этом.
LispGovno 15.01.2013 07:06 # +1
По мне так говно не у тебя в коде, а в проектировании начиная с 286.
absolut 15.01.2013 08:00 # +2
Может @bormand и туда руку приложил
guest 15.01.2013 08:28 # +2
guest 15.01.2013 21:23 # +3
bormand 15.01.2013 10:20 # +1
Ну что поделать, обратная совместимость всегда тяготит и превращает код в говно... а тут тем более процессор, и терять все старые наработки под старые процы было бы очень необдуманно.
Вон они начали с нуля, запилили IA-64, и где он сейчас? А amd64, добавивший режимы совместимости по самый 8086 напротив был успешен, и даже интел теперь клепает процы с такой (правда немного допиленной) архитектурой.
defecate-plusplus 15.01.2013 10:56 # +3
если бы они его на десктопы позиционировали, то, может, толк бы вышел
а так это был изначально нишевый продукт для узкого круга ограниченных людей
DBdev 15.01.2013 16:11 # +1
В серверах он.
Действительно, жаль, что на десктопы не дошел...
3.14159265 15.01.2013 16:22 # +3
Нечего тут жалеть. Всё произошло очень предсказуемо. Athlon64 разбирали как горячие пирожки. Патчи под винду и луникс сделали за год, в 2005 уже появились x64 ОС, с поддержкой всего 32-разрядного кода.
Именно поэтому x86 до сих пор жива. Обратная совместимость - это даже хорошо. А AMD кстати дропнула поддержку 3DNow в новых процах, ибо никому нахер не нужно - так что там тоже не догматики сидят.
И даже Стив Жопс выбросил свой илитный PowerPC и перевёл макбуки на x86 (Core2).
LispGovno 15.01.2013 17:10 # −3
Плять, а как же мой софтварный рендер, который я когда-то писал? Они ухуели. Тогда мой проц поддерживал только MMX и 3DNow!. У меня просто не было выбора. А теперь дропнули. Между тем 3дноуп всегда работал быстрее ссе. И для операционной системы он всегда был легким и совместимым, так как сохранять его регистры было не нужно при переключении задач. А для ссе нужно. ссеГовно! У меня нет слов просто.
bormand 15.01.2013 17:14 # 0
Почему?
LispGovno 15.01.2013 17:17 # +1
guest8 30.01.2019 15:55 # −999
3.14159265 15.01.2013 17:17 # +2
Сомнительное преимущество.
LispGovno 15.01.2013 17:24 # 0
если же ос поддерживала ссе, то она их сохраняла только в том случае, если они поменялись, что удлиняло переключение задач весьма прилично, тк там ни одна линейка кеша
а 3дноуп не замедляло переключение потоков, тк все равно фпу регистры сохранять приходилось
tirinox 16.01.2013 00:33 # +6
guest8 30.01.2019 15:55 # −999
bormand 16.01.2013 05:38 # +1
Сейчас даже самые дохлые видюхи в десятки раз мощнее топовых процов. Правда не всегда удастся распараллелить алгоритм так, чтобы удалось засунуть его на GPU...
absolut 16.01.2013 07:31 # +1
bormand 16.01.2013 07:46 # 0
:)
P.S. Она поди еще и PCI?
absolut 16.01.2013 08:22 # 0
Конечно PCI AGP ж уже мёртв
JIyHHblu_nemyx 30.01.2019 15:54 # 0