Size: a a a

pro.osdev - os development

2021 August 01

DF

Dollar Føølish in pro.osdev - os development
ребята извините поесните за 16-битный long mode на х86_64?
источник

DF

Dollar Føølish in pro.osdev - os development
я чет в коде его увидел а в гугле не могу найти
источник

DF

Dollar Føølish in pro.osdev - os development
это эмуляция какая-то?
источник

BV

Boris Vinogradov in pro.osdev - os development
источник

DF

Dollar Føølish in pro.osdev - os development
там же нет про 16-битную!
источник

BV

Boris Vinogradov in pro.osdev - os development
а где ты нашёл это чудо?
источник

DF

Dollar Føølish in pro.osdev - os development
в коде гипервизора одного
источник

DF

Dollar Føølish in pro.osdev - os development
gamozolabs/chocolate_milk
источник

BV

Boris Vinogradov in pro.osdev - os development
про 16 битную там тоже написано кстати
источник

DF

Dollar Føølish in pro.osdev - os development
кароч да это compatibility mode
источник

DF

Dollar Føølish in pro.osdev - os development
эмуляция без поддержки рил мод опкодов
источник

DF

Dollar Føølish in pro.osdev - os development
Спасибо, Боря!
источник
2021 August 02

G

Gradi in pro.osdev - os development
Добрый день.
Играюсь я тут с разработкой маленького ядра для x86_64 и возникло недопонимание с переходом в long mode.
- Отключаю PG(хотя он изначально отключён)
- Настраиваю пагинацию, чтобы логические адреса совпадали с физическими. Использую PML5
- Включаю IA32_EFER.LME
И в момент включения пагинации (mov cr0, eax) qemu выплёвывает ошибку Invalid access at addr 0x103000000, size 8, region '(null)', reason: rejected, а gdb прыгает в какую-то непонятную область, а не выполняет код сразу после.

У меня есть подозрение что я не то загружаю в cr3. PML5 у меня расположен по адресу 0x102000. Я его просто загружаю в cr3.
mov eax, pml5
mov cr3, eax

Но с другой стороны в документации интела говорится что адрес таблицы в cr3 находится на 12+ бите. Если я сдвину 0x102000 << 12 то получу 0x2000000, а это уже неверный адрес.

Вопрос: Как правильно загружать адрес в cr3?
источник

IJ

Igor 🐱 Jirkov in pro.osdev - os development
Советую глянуть на процесс перехода в лонгмод тут
https://github.com/ReturnInfinity/Pure64/blob/master/src/pure64.asm

Если не ошибаюсь, в вашем случае разница будет в том, что вы используете 5 уровней таблиц, соответственно надо установить битик в cr4.
источник

DF

Dollar Føølish in pro.osdev - os development
дада оно
источник

DF

Dollar Føølish in pro.osdev - os development
если кэму умеет
источник

G

Gradi in pro.osdev - os development
Разобрался. Причина была в неправильных таблицах.
Оказывается адрес в таблице ненадо двигать на 12 бит влево.
источник

G

Gradi in pro.osdev - os development
Я в итоге настроил long moge и успешно прыгнул в C код.
Но в C  у меня ничего нет. Даже Hello World вывести не могу)
Вопрос: Куда дальше копать? Прерывания и работа с устройствами?
источник

IJ

Igor 🐱 Jirkov in pro.osdev - os development
Чтобы вывести какой-то текст на этом этапе можно просто записать его по определенным адресам. Посмотри тут, например
https://os.phil-opp.com/vga-text-mode/

Технически работу с прерываниями опять же можешь посмотреть в pure64 по ссылке выше
источник

G

Gradi in pro.osdev - os development
Спасибо
источник