Довольно просто настроить и использовать последовательный порт для диагностического вывода, и я предсказываю, что вы найдете его чрезвычайно полезным.Начнем с того, что вы можете использовать его только для вывода отладочной информации, но, поскольку он может быть двунаправленным, вы можете расширять его по мере необходимости для выполнения таких операций, как дамп и изменение памяти и регистров (как состояния гипервизора, так и гостевого состояния).
Чтобы настроить последовательный порт, сначала необходимо найти базовый адрес.Если это COM1, то это 3f8, поэтому я буду использовать это в качестве примера.Чтобы инициализировать порт, запишите эти значения, используя инструкцию OUT:
3fb = 80 // LCR = DLAB
3f8 = 1 // DLL = divisor low (115200 baud)
3f9 = 0 // DLM = divisor high
3fb = 3 // LCR = 8/1/n
3f9 = 0 // IER = 0
3fa = 1 // FCR = FIFO enable
3fc = 3 // MCR = terminal ready | request to send
Чтобы отправить символ, прочитайте из 3fd (LSR), используя инструкцию IN, и цикл, пока не будет установлен бит 5 (пустой THR).Затем запишите этот символ в 3f8 (THR).
Конечно, драйвер последовательного порта может быть намного более сложным, чем этот, но этого достаточно, чтобы начать работу.