// doirq(): 硬件中断处理 C 子程序 // 本函数供 irq_s.asm 的汇编服务程序调用 void doirq(IDT_REGS regs) { irq_disableirq(regs.idx); ackirq(regs.idx); irq_disable(); if (regs.idx == 0x80) { sc_null(); } else { irqfun[regs.idx](); } irq_enable(); irq_enableirq(regs.idx); return; }
void __interrupt __far _loadds inthandler() { int i ; ackirq() ; nbsb++ ; i = (int)audio_buffer1 ; // swap buffer audio_buffer1 = audio_buffer2 ; audio_buffer2 = (unsigned char *)i ; dma_play() ; common_sound_handler() ; if (audio.irq>=8) outp(0xa0,0x20) ; outp(0x20,0x20) ; }