Я проанализировал твой проект, что могу сказать:
Симптомы 100% указывают на кривую настройку таймера (PIT / APIC), конфликт прерываний и закомментированный `hlt`.
Разбор симптомов:
1. Ускорение спикера и замедление системы
Ты настраиваешь PIT (или APIC timer) под определенную частоту, но, скорее всего, рассчитываешь делитель неправильно. Базовая частота PIT — строго 1193182 Гц. Если твой математический расчет делителя в коде глючит (или ты берешь другую базовую частоту), прерывания таймера (IRQ 0) срабатывают в 2 раза чаще.
В итоге планировщик (scheduler) получает тики в 2 раза чаще, система захлебывается в обработчиках прерываний (ISR) и переключениях контекста. Отсюда дикая просадка производительности даже в покое.
PC Speaker использует канал 2 того же PIT. Если базовая частота или делитель завышены в 2 раза, он пищит ровно в 2 раза быстрее (2 секунды превращаются в 1).
2. Влияние мыши на таймер
PS/2 мышь использует IRQ 12, таймер использует IRQ 0. И то, и другое идет через контроллер прерываний (PIC).
Если инициализация мыши меняет маску PIC или переназначает векторы, она ломает обработку IRQ 0. Ты пишешь, что закомментировал mouse_init, и звук стал пролетать еще быстрее. Значит, мышь как-то маскировала часть прерываний таймера (или генерировала спурайные прерывания), а без нее таймер срабатывает еще чаще.
3. Курсор и время не отрисовываются
Отрисовка времени и курсора у тебя, очевидно, завязана на тики ядра. Раз таймер работает криво, тики не доходят до нужного обработчика, либо ты зависаешь в ISR, и графическая подсистема не получает квант времени на перерисовку (dirty rects).
Что чинить:
1. Проверь расчет делителя для PIT (порт 0x40). Делитель = 1193182 / желаемая_частота.
2. Проверь инициализацию PIC (порта 0x20 и 0xA0). Убедись, что маскирование IRQ 0 (таймер) и IRQ 12 (мышь) сделано правильно.
3. Отключи APIC (если включал), работай только через старый 8259 PIC, пока не починишь базовый таймер.
4. Проверь, не генерирует ли мышь спурайные прерывания (spurious interrupts), которые блокируют очередь PIC.