Собственно, сабж: Рассматривается как пример вариант (P)SATA или LAN BOOTROM, широко применяемые в внешних PCI/PCIe (P)SATA-контроллерах и сетевых картах. EFI - не интересно. Замутить планируется 16k/32k/64k ROM на M$ платформе (НЕ Linux/BSD). 1) Чем пользоваться - C? ASM? 2) Какой компилятор подходит для 16-bit и/или 32-bit кода? 2) Как пользоваться стеком, переменными, где их размещать (ROM ведь read-only) ? 3) Есть ли какие то особенности? 4) Где почитать? Пока нашел только это, но полного понимания вопроса пока не сложилось: 1) http://www.geocities.com/mamanzip/articles.html 2) http://rayer.ic.cz/romos/romose.htm 3) http://www.rom-o-matic.net/ + http://sourceforge.net/projects/etherboot/ + http://netboot.sourceforge.net/ 4) http://www.fitzenreiter.de/ata/ata_eng.htm 5) http://www.bootix.com/download/download_en.html
Не на все сетевых карты имеется ROM. Для встроенных железок используется системный BIOS. Платформа выбранна не верно. Нужна x86, а к ОС отношение не имеет. Биос инициализуется при старте процессора и он находиться в реальном режиме 16бит. У него есть функция переключения в 32 бита. ROM это read-only memory. Но в современном железе используется Flash(EEPROM-Electrically Erasable Programmable Read-Only Memory). Число циклов перезаписи состовляет 1 000. Читать можно сколько хочешь. Теперь что касается загрузки первые 640кб(минус системные лучши еще проверить сколько доступно) в твоем распоряжении. Помимо прочего советую по изучать момент загрузки. Если биос устройства не помищается в 64kb то он может быть временно загружен в базовую память. ASM любой MASM 6.хх(следующее версии только под виндоус компилируют) ,TASM, FASM, NASM и тд. С - Watcom C или GNU C Выбирать советую то что лучше всего знаешь. Спецификаци PnP, PCI, а также разные спецификации про BIOS на сайте phonex. А что замутить планируешь?
Хорошо. Тогда еще пара вопросов. 1) Какой из 16-битных компиляторов оптимизирует код "на приличном уровне"? 2) Есть ли GNU-тый С/C++ для 16 bit?