( ricpet | 2024. 03. 12., k – 15:34 )

Megpróbálok vázolni egy megoldást. Ehhez először lássuk mi a probléma: eltérő oldalakon vannak definiálva az IDT felprogramozási pont és belépési pont (ezek a megoldandó feladatban, továbbiakban solution), és a kilépési pont (ez a bootloaderben, továbbiakban bootloader :)). Továbbá meg akarjuk tartani azt, hogy az IDT felprogramozás az továbbra is a megoldandó feladatban maradjon, hogy továbbra is téma maradhasson, hogy lehet-e tömböt bitmintával feltölteni Rust-ból.

Ezt át kell alakítani (tőlem mondhatjuk azt is, hogy refaktorálni), hogy valahogy úgy nézzen ki, hogy az IDT felprogramozás a megoldandó feladat része maradjon, az interrupt handler belépési pont és kilépési pont a bootloaderben van, viszont a tényleges timer kezelés már újra a megoldandó feladatban. Így nem keveredik az, hogy a közvetlen IRQ belépés és IRQ kilépés különböző rétegekben van.

Ez úgy működhet, hogy a bootloader úgy hívja meg az ELF vagy PE bináris belépési pontját, hogy átad egy második paramétert is, egy függvény címét, ami az interrupt handler közvetlen belépési pontjának címe, és a bootloaderben van implementálva (legyen ennek a neve bootloader_timer_handler). A megoldandó feladat úgy programozza az IDT-t, hogy ezt a második paraméterként megkapott bootloader_timer_handler adja át a timer interrupt címéhez az IDT-ben.

A bootloader interfészből el kell dobni az iretq függvényt, helyette fel kell venni egy olyan új függvényt, hogy set_solution_handler_address. Ezt az interruptok bekapcsolása előtt kell még meghívni a megoldandó feladatban. Egy paramétert vár, a megoldandó feladatban magas szintű nyelven megírt függvény címét. A bootloader ennek meghívásakor elmenti a megkapott függvény címét a solution_handler_address változóba. A bootloader_timer_handler pedig abból áll a bootloaderben implementálva, hogy CALL utasítással behív a solution_handler_address változóban tárolt címre, utána meg megcsinálja az OUT és IRETQ utasításokat. Ezzel az a struktúra fog kialakulni, amiről már az elején itt írtam: https://hup.hu/comment/3037581#comment-3037581

Javaslom, hogy ezeket a változásokat úgy csináld meg, hogy külön branchen, vagy ilyesmi, hogy a már beadott feladatok még működjenek.