View Full Version : [OSDev] Interrupt handler: chiarimenti
DanieleC88
25-09-2004, 22:42
Come i frequentatori più assidui di questa sezione del forum sapranno, sto provando a creare un mio sistema operativo. Dopo tante ricerche su Internet e sui manuali della Intel, alla fine sono riuscito ad abilitare gli interrupt. Solo che ora mi restano alcuni dubbi:
- da ora gli interrupt funzioneranno senza dover fare un lavoraccio per ognuno? Ad esempio, se uso una qualsiasi INT 10h (o INT 0x10, se sei uno GNU :)) in assembler, il mio handler (un semplice "IRET", per ora) non dovrebbe fare nulla? Insomma, devo scrivere del codice per ogni modalità video, se intendo usarla?
Ho ancora alcuni dubbi e/o problemi, magari poi ve li posto qualche altra volta.
AnonimoVeneziano
26-09-2004, 00:27
Originariamente inviato da DanieleC88
Come i frequentatori più assidui di questa sezione del forum sapranno, sto provando a creare un mio sistema operativo. Dopo tante ricerche su Internet e sui manuali della Intel, alla fine sono riuscito ad abilitare gli interrupt. Solo che ora mi restano alcuni dubbi:
- da ora gli interrupt funzioneranno senza dover fare un lavoraccio per ognuno? Ad esempio, se uso una qualsiasi INT 10h (o INT 0x10, se sei uno GNU :)) in assembler, il mio handler (un semplice "IRET", per ora) non dovrebbe fare nulla? Insomma, devo scrivere del codice per ogni modalità video, se intendo usarla?
Ho ancora alcuni dubbi e/o problemi, magari poi ve li posto qualche altra volta.
In realtà sotto GNU/Linux INT 0x10 non esiste, dato che l'interfaccia interrupt del kernel per GNU/Linux è sempre 0x80 .
Comunque per il tuo kernel ti gestisci gli Interrupt che vuoi .
10h è una chiamata del bios , in generis non necessiti di gestire gli interrupt del bios tramite il kernel (DOS non lo fa, Linux mi sembra lo faccia e che non permetta chiamate dirette al BIOS ) . Poi ovviamente devi farti un tuo set di INTERRUPT SOFTWARE da accedere tramite dispatcher e argomenti passati tramite i registri del processore
Ciao
DanieleC88
26-09-2004, 09:59
Originariamente inviato da AnonimoVeneziano
In realtà sotto GNU/Linux INT 0x10 non esiste, dato che l'interfaccia interrupt del kernel per GNU/Linux è sempre 0x80 .
Quando ho detto "se sei uno GNU" intedevo dire "se usi la sintassi AT&T", cioè quella di GAS.
Comunque per il tuo kernel ti gestisci gli Interrupt che vuoi .
Lo so, ma chiamando INT 0x10 ho un floating point error.
10h è una chiamata del bios , in generis non necessiti di gestire gli interrupt del bios tramite il kernel (DOS non lo fa, Linux mi sembra lo faccia e che non permetta chiamate dirette al BIOS ) . Poi ovviamente devi farti un tuo set di INTERRUPT SOFTWARE da accedere tramite dispatcher e argomenti passati tramite i registri del processore
Ciao
Puoi spiegarti un più chiaramente?
DanieleC88
04-10-2004, 18:14
Whhops... avevo un floating point error semplicemente perchè l'exception handler numero 16 (hex 0x10) corrisponde al floating point error... in pratica mi generavo da solo l'errore. Comunque, in modalità protetta, devo caricare un IDT vuota perchè il kernel non interferisca col BIOS? Altrimenti non riesco a chiamare alcun interrupt del BIOS.
mi pare che in modalità protetta gli interrupt del BIOS non si possano chiamare (per quello serve la modalità virtual 8086 oppure devi tornare in real mode)
DanieleC88
05-10-2004, 13:09
Come si passa alla modalità v8086? So come si fa a passare dalla modalità reale a quella protetta e viceversa [mov cr0, eax; (x)or eax, 1; mov eax, cr0], ma quella virtuale non so proprio.
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.