| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Asm: Общие вопросы > Эмулятор Радио86рк |
| Автор: 500mhz 23.3.2011, 14:12 | ||||
| Решил вот побаловаться и заодно мозги размять ))) Собственно появлась идея написать эмулятор с загрузкой с FD или USB (без наличия ОС на носителе) В связи с чем если у кого есть даташит по опкодам KP580 киньте в меня ) http://ru.wikipedia.org/wiki/%D0%A0%D0%B0%D0%B4%D0%B8%D0%BE_86%D0%A0%D0%9A http://ru.wikipedia.org/wiki/%D0%9A%D0%A0580%D0%92%D0%9C80 Значит что я наваял за вчерашний вечер 1) FAT12 boot loader - грузит с корня дискетки файл INIT32.BIN (на адрес 0xd000) ,в качестве бонуса при отсутствии файла выводит красивое зелененкое окошко с предпреждением 2) INIT32.BIN собственно начало эмулятора, переводит проц в FlatRealMode CS=0-4gb все остальные сегменты тоже самое, получает необходимую инфу о VESA и устанавливает режим 640х480х32 и копирует часть змулятора на адрес 0x100000, где он и будет работать. собственно boot
INIT32.BIN
kernel.asm - тут будет core ))) компилять под 0x100000 при запуске kernel в eax передаеться PhysBasePtr - адрес видеопамяти , там и будем рисовать ), соответственно mov [eax], dword 0xffffffff поставит нам белую точечку в левом верхнем углу экрана (это для тех кто не знал) на сим и раскланиваюсь ) ждите продолжения |
| Автор: 500mhz 23.3.2011, 14:31 | ||||
BUGFIX !
на реальном железе с nVidia работает как 640х480х32 на VBOX и BOCHS - не пашет кароче упростим и заменим на
640х480х8 - один черт радио86 чорнобелий ) |
| Автор: 500mhz 23.3.2011, 20:58 | ||
| вопрос как правильно определить размер доступной памяти? с учетом того что к bios обрашаться нельзя (у нас какбы 32bit режим а bios 16bit) я ничего умнее не придумал
собственно boot.img теперь мы умеем печатать ) |
| Автор: 500mhz 24.3.2011, 03:01 |
| нарыл толковый даташит http://www.pastraiser.com/cpu/i8080/i8080_opcodes.html |
| Автор: 500mhz 24.3.2011, 03:27 |
| прикрутил "родной" шрифт от 86рк, выглядит прикольно ) http://img4.imageshack.us/i/clipboard01fng.jpg/ Uploaded with http://imageshack.us |
| Автор: 500mhz 24.3.2011, 13:00 |
| пофиксил определение размера памяти, кароче алгоритм верный, просто я запарился с linear / phys адресацией ))) теперь изменяя в vbox или bochs размер памяти он отображается корректно пишу core cpu ))) |
| Автор: Игорь1024 24.3.2011, 15:57 |
| 500mhz, театр одного актёра |
| Автор: 500mhz 24.3.2011, 16:20 |
| ))))) HLLшикам этого не понять |
| Автор: Игорь1024 24.3.2011, 16:31 |
| |
| Автор: 500mhz 24.3.2011, 16:35 |
| сам интерес именно в написании на асме да еше на загрузочной дискетке ) в принципе эмулятров радио86рк в инете как грязи вон даже на java script есть http://radio86.googlecode.com/hg/online/radio86.html |
| Автор: Игорь1024 24.3.2011, 16:43 |
| ASM rocks! Для закрепления многих вещей само то! |
| Автор: iff 25.3.2011, 15:28 | ||
Т.е. процессор работает в защищенном режиме? |
| Автор: 500mhz 25.3.2011, 15:38 |
| нет, проц я перевожу в pmode устанавливаю GDT с сегментами base=0 limit 0xffffffff и возврашаюсь в real mode при этом получаю 32 адресацию и доступ к 4гб теоретической памяти плюс ко всему имеем linear frame buffer видео памяти но так как bios сам по себе 16 битен то при вызове любого INT будет кирдык ) тут либо нужно работать напрямую с железом или писать gate для обрашения к bios. хотя в принципе подумав хорощенько можно остаться и в pmode , наверно так и сделаю. |
| Автор: Dreamuchiy 13.4.2011, 23:21 |
| Я поддерживаю идею автора и давно хочу сделать примерно тоже самое но эмулятор zx-spectrum вообщем z-80 минуя досы и виндовсы тем более (бесят) потом усовершенствовать basic 128 под x86 машину, вобщем работать в давно изведанной среде но с современными возможностями. Как то так. Но пока ни времени ни знаний не хватает. Повзрослел уже, семья, дети, работа и тп |