diff --git a/Asuro.iso b/Asuro.iso index c2dd42a6..4b252742 100644 Binary files a/Asuro.iso and b/Asuro.iso differ diff --git a/bin/kernel.bin b/bin/kernel.bin index 97aa3f61..ef1fc4d3 100755 Binary files a/bin/kernel.bin and b/bin/kernel.bin differ diff --git a/iso/boot/asuro.bin b/iso/boot/asuro.bin index 97aa3f61..ef1fc4d3 100755 Binary files a/iso/boot/asuro.bin and b/iso/boot/asuro.bin differ diff --git a/lib/ACE.ppu b/lib/ACE.ppu index 5726294d..680cb8de 100644 Binary files a/lib/ACE.ppu and b/lib/ACE.ppu differ diff --git a/lib/BPE.ppu b/lib/BPE.ppu index 52bdf541..f8ab28d5 100644 Binary files a/lib/BPE.ppu and b/lib/BPE.ppu differ diff --git a/lib/BTSSE.ppu b/lib/BTSSE.ppu index 7f6a9642..341e1b04 100644 Binary files a/lib/BTSSE.ppu and b/lib/BTSSE.ppu differ diff --git a/lib/CFE.ppu b/lib/CFE.ppu index 2b5481e5..1ffe3a9c 100644 Binary files a/lib/CFE.ppu and b/lib/CFE.ppu differ diff --git a/lib/CSOE.ppu b/lib/CSOE.ppu index 33ea2127..a509d1f6 100644 Binary files a/lib/CSOE.ppu and b/lib/CSOE.ppu differ diff --git a/lib/DBGE.ppu b/lib/DBGE.ppu index 3f9b2930..5af1d23d 100644 Binary files a/lib/DBGE.ppu and b/lib/DBGE.ppu differ diff --git a/lib/DBZ.ppu b/lib/DBZ.ppu index e678332f..666163a4 100644 Binary files a/lib/DBZ.ppu and b/lib/DBZ.ppu differ diff --git a/lib/DFE.ppu b/lib/DFE.ppu index 1ca3e655..9d53119e 100644 Binary files a/lib/DFE.ppu and b/lib/DFE.ppu differ diff --git a/lib/E1000.ppu b/lib/E1000.ppu index dc238369..9f6b71fc 100644 Binary files a/lib/E1000.ppu and b/lib/E1000.ppu differ diff --git a/lib/GPF.ppu b/lib/GPF.ppu index da4c1fbf..446aa60c 100644 Binary files a/lib/GPF.ppu and b/lib/GPF.ppu differ diff --git a/lib/IDE.ppu b/lib/IDE.ppu index 3a6855a3..23f2d313 100644 Binary files a/lib/IDE.ppu and b/lib/IDE.ppu differ diff --git a/lib/IDOE.ppu b/lib/IDOE.ppu index 2f3a16e9..61c33768 100644 Binary files a/lib/IDOE.ppu and b/lib/IDOE.ppu differ diff --git a/lib/IOPE.ppu b/lib/IOPE.ppu index 95fcd9d6..7cbe1838 100644 Binary files a/lib/IOPE.ppu and b/lib/IOPE.ppu differ diff --git a/lib/MCE.ppu b/lib/MCE.ppu index 02e5227c..f610098f 100644 Binary files a/lib/MCE.ppu and b/lib/MCE.ppu differ diff --git a/lib/NCE.ppu b/lib/NCE.ppu index 11fc788d..f51d83db 100644 Binary files a/lib/NCE.ppu and b/lib/NCE.ppu differ diff --git a/lib/NMIE.ppu b/lib/NMIE.ppu index 99703d94..71b06c2e 100644 Binary files a/lib/NMIE.ppu and b/lib/NMIE.ppu differ diff --git a/lib/OOBE.ppu b/lib/OOBE.ppu index 613dc294..5e98514a 100644 Binary files a/lib/OOBE.ppu and b/lib/OOBE.ppu differ diff --git a/lib/PCI.ppu b/lib/PCI.ppu index d086f035..1790cbb1 100644 Binary files a/lib/PCI.ppu and b/lib/PCI.ppu differ diff --git a/lib/PF.ppu b/lib/PF.ppu index a855d547..f70de1af 100644 Binary files a/lib/PF.ppu and b/lib/PF.ppu differ diff --git a/lib/PS2_KEYBOARD_ISR.ppu b/lib/PS2_KEYBOARD_ISR.ppu index 31843339..1e1840b5 100644 Binary files a/lib/PS2_KEYBOARD_ISR.ppu and b/lib/PS2_KEYBOARD_ISR.ppu differ diff --git a/lib/RTC.ppu b/lib/RTC.ppu index b7d9e2d7..e8fdd21e 100644 Binary files a/lib/RTC.ppu and b/lib/RTC.ppu differ diff --git a/lib/SFE.ppu b/lib/SFE.ppu index e89cef5a..02479ff2 100644 Binary files a/lib/SFE.ppu and b/lib/SFE.ppu differ diff --git a/lib/SNPE.ppu b/lib/SNPE.ppu index b3758921..c2bde7f8 100644 Binary files a/lib/SNPE.ppu and b/lib/SNPE.ppu differ diff --git a/lib/TMR_0_ISR.ppu b/lib/TMR_0_ISR.ppu index f956d2b1..e262c788 100644 Binary files a/lib/TMR_0_ISR.ppu and b/lib/TMR_0_ISR.ppu differ diff --git a/lib/UIE.ppu b/lib/UIE.ppu index 6e8b2275..72abca8f 100644 Binary files a/lib/UIE.ppu and b/lib/UIE.ppu differ diff --git a/lib/USB.ppu b/lib/USB.ppu index 0963d543..c0ca3062 100644 Binary files a/lib/USB.ppu and b/lib/USB.ppu differ diff --git a/lib/arp.ppu b/lib/arp.ppu index d68d1352..ddf1ac14 100644 Binary files a/lib/arp.ppu and b/lib/arp.ppu differ diff --git a/lib/asuro.ppu b/lib/asuro.ppu index fd27a06a..650c6469 100644 Binary files a/lib/asuro.ppu and b/lib/asuro.ppu differ diff --git a/lib/console.ppu b/lib/console.ppu index 93a15f13..a3f50651 100644 Binary files a/lib/console.ppu and b/lib/console.ppu differ diff --git a/lib/cpu.ppu b/lib/cpu.ppu index 5ce150ff..27114104 100644 Binary files a/lib/cpu.ppu and b/lib/cpu.ppu differ diff --git a/lib/drivermanagement.ppu b/lib/drivermanagement.ppu index 92c5fcf1..236d87a5 100644 Binary files a/lib/drivermanagement.ppu and b/lib/drivermanagement.ppu differ diff --git a/lib/fat32.ppu b/lib/fat32.ppu index 8ae27acb..6de0be62 100644 Binary files a/lib/fat32.ppu and b/lib/fat32.ppu differ diff --git a/lib/idt.ppu b/lib/idt.ppu index 7cfb2e93..853730a0 100644 Binary files a/lib/idt.ppu and b/lib/idt.ppu differ diff --git a/lib/ipv4.ppu b/lib/ipv4.ppu index 311c113b..2360333d 100644 Binary files a/lib/ipv4.ppu and b/lib/ipv4.ppu differ diff --git a/lib/irq.ppu b/lib/irq.ppu index a2bdbded..a10ee31c 100644 Binary files a/lib/irq.ppu and b/lib/irq.ppu differ diff --git a/lib/isrmanager.ppu b/lib/isrmanager.ppu index 5a6a9ec5..063cdb73 100644 Binary files a/lib/isrmanager.ppu and b/lib/isrmanager.ppu differ diff --git a/lib/kernel.ppu b/lib/kernel.ppu index def55963..e971df52 100644 Binary files a/lib/kernel.ppu and b/lib/kernel.ppu differ diff --git a/lib/keyboard.ppu b/lib/keyboard.ppu index 645ab552..eb132ca7 100644 Binary files a/lib/keyboard.ppu and b/lib/keyboard.ppu differ diff --git a/lib/libpconsole.a b/lib/libpconsole.a index 0bf7edfb..1d1d2637 100644 Binary files a/lib/libpconsole.a and b/lib/libpconsole.a differ diff --git a/lib/libpmultiboot.a b/lib/libpmultiboot.a index 66eb27dd..d50c28e8 100644 Binary files a/lib/libpmultiboot.a and b/lib/libpmultiboot.a differ diff --git a/lib/libpsystem.a b/lib/libpsystem.a index c4830098..0cdc4c29 100644 Binary files a/lib/libpsystem.a and b/lib/libpsystem.a differ diff --git a/lib/lists.ppu b/lib/lists.ppu index 57ba0bf0..94fd2acd 100644 Binary files a/lib/lists.ppu and b/lib/lists.ppu differ diff --git a/lib/lmemorymanager.ppu b/lib/lmemorymanager.ppu index d57b3469..241edb01 100644 Binary files a/lib/lmemorymanager.ppu and b/lib/lmemorymanager.ppu differ diff --git a/lib/mouse.ppu b/lib/mouse.ppu index 132fc942..9533ff98 100644 Binary files a/lib/mouse.ppu and b/lib/mouse.ppu differ diff --git a/lib/netutils.ppu b/lib/netutils.ppu index 4bfb9b6b..ef2e2812 100644 Binary files a/lib/netutils.ppu and b/lib/netutils.ppu differ diff --git a/lib/pmemorymanager.ppu b/lib/pmemorymanager.ppu index e3da2cba..7785f8c6 100644 Binary files a/lib/pmemorymanager.ppu and b/lib/pmemorymanager.ppu differ diff --git a/lib/serial.ppu b/lib/serial.ppu index 9ddf0dde..83c91d05 100644 Binary files a/lib/serial.ppu and b/lib/serial.ppu differ diff --git a/lib/storagemanagement.ppu b/lib/storagemanagement.ppu index 7f325071..b42be698 100644 Binary files a/lib/storagemanagement.ppu and b/lib/storagemanagement.ppu differ diff --git a/lib/strings.ppu b/lib/strings.ppu index 83ddb938..5507cdbf 100644 Binary files a/lib/strings.ppu and b/lib/strings.ppu differ diff --git a/lib/terminal.ppu b/lib/terminal.ppu index 18d62f60..2189b564 100644 Binary files a/lib/terminal.ppu and b/lib/terminal.ppu differ diff --git a/lib/tracer.ppu b/lib/tracer.ppu index 2271b095..29793b96 100644 Binary files a/lib/tracer.ppu and b/lib/tracer.ppu differ diff --git a/lib/util.ppu b/lib/util.ppu index abf3ff78..aed0edc9 100644 Binary files a/lib/util.ppu and b/lib/util.ppu differ diff --git a/lib/vmemorymanager.ppu b/lib/vmemorymanager.ppu index de79ddea..3a00ebaf 100644 Binary files a/lib/vmemorymanager.ppu and b/lib/vmemorymanager.ppu differ diff --git a/src/cpu.pas b/src/cpu.pas index dbbb9119..ab457741 100644 --- a/src/cpu.pas +++ b/src/cpu.pas @@ -78,6 +78,7 @@ type end; TClockSpeed = record Hz : uint32; + KHz : uint32; MHz : uint32; GHz : uint32; end; @@ -154,19 +155,24 @@ end; procedure getCPUClockSpeed; var t1, t2 : TDateTime; + c1, c2 : uint64; c : uint32; - begin c:= 0; - t1:= getDateTime; - t2:= getDateTime; - while (t1.Seconds = t2.Seconds) do begin - inc(c); + if CPUID.Capabilities0^.TSC then begin + t1:= getDateTime; t2:= getDateTime; + c1:= getTSC; + while (t1.Seconds = t2.Seconds) do begin + t2:= getDateTime; + end; + c2:= getTSC; + c:= c2 - c1; end; CPUID.ClockSpeed.Hz:= c; - CPUID.ClockSpeed.MHz:= CPUID.ClockSpeed.Hz div 1000; + CPUID.ClockSpeed.KHz:= CPUID.ClockSpeed.Hz div 1000; + CPUID.ClockSpeed.MHz:= CPUID.ClockSpeed.KHz div 1000; CPUID.ClockSpeed.GHz:= CPUID.ClockSpeed.MHz div 1000; end; diff --git a/src/include/util.pas b/src/include/util.pas index 735ef7b6..6d5633cc 100644 --- a/src/include/util.pas +++ b/src/include/util.pas @@ -49,6 +49,7 @@ procedure sleep(seconds : uint32); function get16bitcounter : uint16; function get32bitcounter : uint32; function get64bitcounter : uint64; +function getTSC : uint64; function BCDToUint8(bcd : uint8) : uint8; @@ -358,6 +359,23 @@ begin get64bitcounter:= bios_data_area.Counters.c64; end; +function getTSC : uint64; +var + hi, lo : uint32; + +begin + asm + PUSH EAX + PUSH EDX + RDTSC + MOV hi, EDX + MOV lo, EAX + POP EDX + POP EAX + end; + getTSC:= (hi SHL 32) OR lo; +end; + procedure BSOD(fault : pchar; info : pchar); var trace : pchar;