Bit8u keyb_io_read(ioport_t port) { Bit8u r = 0; switch (port) { case 0x60: r = read_port60(); /* We ought to untrigger IRQ1, in case DOS was reading port60h with interrupts off, * but currently the PIC code doesn't support this. */ #if 0 if (!port60_ready) pic_untrigger(PIC_IRQ1); #endif k_printf("8042: read port 0x60 read=0x%02x\n",r); break; case 0x61: /* Handle only PC-Speaker right now */ r = spkr_io_read(port); break; case 0x64: r= 0x1c | (port60_ready ? 0x01 : 0x00); k_printf("8042: read port 0x64 status check=0x%02x, port60_ready=%d\n", r, port60_ready); } return r; }
Bit8u rtc_read(Bit8u reg) { Bit8u ret = GET_CMOS(reg); switch (reg) { case CMOS_SEC: case CMOS_SECALRM: case CMOS_MIN: case CMOS_MINALRM: case CMOS_DOW: case CMOS_DOM: case CMOS_MONTH: case CMOS_YEAR: case CMOS_CENTURY: /* Note - the inline function BCD() in cmos.h will check bit 2 of * status reg B for proper output format */ ret = BCD(ret); break; case CMOS_HOUR: /* RTC hour...bit 1 of 0xb set=24 hour mode, clear 12 hour */ case CMOS_HOURALRM: if (!(GET_CMOS(CMOS_STATUSB) & 2)) { /* 12-hour mode */ if (ret == 0) ret = 12; else if (ret > 12) ret -= 12; } ret = BCD(ret); break; case CMOS_STATUSC: if (debug_level('h') > 8) h_printf("RTC: Read C=%hhx\n", ret); SET_CMOS(CMOS_STATUSC, 0); pic_untrigger(PIC_IRQ8); rtc_run(); break; } return ret; }