COBE 0.1 ALPHA
|
00001 #include <cmos.h> 00002 #include <io.h> 00003 #include <stdio.h> 00004 #include <sysfunc.h> 00005 #include <pit.h> 00006 00012 00013 00020 int get_data_cmos(unsigned char cmos_offset) { 00021 outb(0x70, cmos_offset); //----------Schreibt die Offset-Nummer in den Port 0x70---------- 00022 return inb(0x71); //----------Hole den Wert vom Offset aus dem Port 0x71---------- 00023 } 00024 00026 00034 void send_data_cmos(unsigned char data, unsigned char cmos_offset) { 00035 outb(0x70, cmos_offset); //----------Schreibt die Offset-Nummer in den Port 0x70---------- 00036 outb(0x71, data); //----------Schreibe den angegebenen Wert in das Offset---------- 00037 } 00038 00040 // CMOS-Offset Liste: 00041 // 0x00 Akt. Sekunde 00042 // 0x01 Alarmsekunde 00043 // 0x02 Akt. Minute 00044 // 0x03 Alarmminute 00045 // 0x04 Akt. Stunde 00046 // 0x05 Alarmstunde 00047 // 0x06 Tag der Woche 00048 // 0x07 Tag des Monats 00049 // 0x08 Monat 00050 // 0x09 Jahr 00051 // 0x0A Status-Register A 00052 // 0x0B Status-Register B 00053 // 0x0C Status-Register C 00054 // 0x0D Status-Register D 00055 // 0x32 Jahrhundert (19 oder 20) 00057 00059 00062 void time() { 00063 //----------Hole die Werte für die aktuelle Sekunde, Minute und Stunde---------- 00065 int sek = get_data_cmos(0x00); 00066 int min = get_data_cmos(0x02); 00067 int std = get_data_cmos(0x04); 00068 00069 //----------Wandle die Werte von BCD-Codierung in Normal-Binär um---------- 00071 sek = bcd2bin(sek); 00072 min = bcd2bin(min); 00073 std = bcd2bin(std); 00074 00075 //----------Ungültigen Wert auf 0 setzen---------- 00076 if(sek > 60) sek = 0; 00077 00078 int temp1 = position_x; 00079 int temp2 = position_y; 00080 position_x = 65; 00081 position_y = 0; 00082 00084 //----------Gebe die Uhr aus, bei einer einstelligen Zahl, wird eine 0 davor gesetzt, damit immer 2 Stellen pro Einheit erscheinen---------- 00085 setcolor(0xF2); 00086 if(std < 10) kputx(0, 10); kputx(std, 10); kprintf(":"); if(min < 10) kputx(0, 10); kputx(min, 10); kprintf(":"); if(sek < 10) kputx(0, 10); kputx(sek, 10); kprintf(" Uhr \n"); 00087 setcolor(0x0F); 00088 00089 position_x = temp1; 00090 position_y = temp2; 00091 } 00092 00094 00101 void sleep(uint32_t ms) { 00102 uint64_t cur = tick_counter; 00103 while((cur+ms) >= tick_counter); 00104 return; 00105 }