Compare commits
6
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
c0c199bfe6 | ||
|
|
7ec3bcb9b9 | ||
|
|
4bd0a2dfbf | ||
|
|
431e5bc8f4 | ||
|
|
8169d93a9c | ||
|
|
983d9a428d |
@@ -1 +1,8 @@
|
|||||||
* text=auto eol=lf
|
* text=auto eol=lf
|
||||||
|
lvglh/** linguist-vendored
|
||||||
|
lvgl/** linguist-vendored
|
||||||
|
.vscode/* linguist-vendored
|
||||||
|
lib/* linguist-generated
|
||||||
|
release/* linguist-generated
|
||||||
|
iso/* linguist-generated
|
||||||
|
*.asm linguist-detectable
|
||||||
@@ -15,3 +15,4 @@ localenv.json
|
|||||||
dockerout.txt
|
dockerout.txt
|
||||||
AGENTS.md
|
AGENTS.md
|
||||||
*.log
|
*.log
|
||||||
|
/doc/*.md
|
||||||
@@ -0,0 +1,52 @@
|
|||||||
|
{
|
||||||
|
Driver->Timer->GraphicsRefresh - Timer-driven graphics refresh at ~120FPS.
|
||||||
|
|
||||||
|
Hooks into the 1024Hz timer (TMR_0_ISR) and calls the desktop, uidebug,
|
||||||
|
LVGL and video flush routines every ~9 ticks (1024/9 ≈ 113.8 FPS).
|
||||||
|
|
||||||
|
@author(Kieron Morris <[email protected]>)
|
||||||
|
}
|
||||||
|
unit graphicsrefresh;
|
||||||
|
|
||||||
|
interface
|
||||||
|
|
||||||
|
procedure init;
|
||||||
|
|
||||||
|
implementation
|
||||||
|
|
||||||
|
uses
|
||||||
|
util,
|
||||||
|
TMR_0_ISR,
|
||||||
|
desktop,
|
||||||
|
uidebug,
|
||||||
|
lvgl,
|
||||||
|
video,
|
||||||
|
syslog;
|
||||||
|
|
||||||
|
const
|
||||||
|
{ 1024 / 4 ≈ 256 FPS }
|
||||||
|
TICKS_PER_FRAME = 4;
|
||||||
|
|
||||||
|
var
|
||||||
|
TickCounter : uint32;
|
||||||
|
|
||||||
|
procedure on_tick(data : void);
|
||||||
|
begin
|
||||||
|
TickCounter := TickCounter + 1;
|
||||||
|
if TickCounter >= TICKS_PER_FRAME then begin
|
||||||
|
TickCounter := 0;
|
||||||
|
desktop.update;
|
||||||
|
uidebug.update;
|
||||||
|
lvgl_handler;
|
||||||
|
video.Flush;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure init;
|
||||||
|
begin
|
||||||
|
TickCounter := 0;
|
||||||
|
TMR_0_ISR.hook(uint32(@on_tick));
|
||||||
|
syslog.logln('GFXREFRESH', 'Hooked into 1024Hz timer (~120 FPS).');
|
||||||
|
end;
|
||||||
|
|
||||||
|
end.
|
||||||
@@ -0,0 +1,46 @@
|
|||||||
|
{
|
||||||
|
Driver->Timer->USBHotplug - Timer-driven USB hotplug polling at ~1Hz.
|
||||||
|
|
||||||
|
Hooks into the 1024Hz timer (TMR_0_ISR) and calls
|
||||||
|
usbcore.usb_check_hotplug every 1024 ticks (approximately once per second).
|
||||||
|
|
||||||
|
@author(Kieron Morris <[email protected]>)
|
||||||
|
}
|
||||||
|
unit usbhotplug;
|
||||||
|
|
||||||
|
interface
|
||||||
|
|
||||||
|
procedure init;
|
||||||
|
|
||||||
|
implementation
|
||||||
|
|
||||||
|
uses
|
||||||
|
util,
|
||||||
|
TMR_0_ISR,
|
||||||
|
usbcore,
|
||||||
|
syslog;
|
||||||
|
|
||||||
|
const
|
||||||
|
{ 1024 ticks at 1024Hz ≈ 1 second }
|
||||||
|
TICKS_PER_POLL = 1024;
|
||||||
|
|
||||||
|
var
|
||||||
|
TickCounter : uint32;
|
||||||
|
|
||||||
|
procedure on_tick(data : void);
|
||||||
|
begin
|
||||||
|
TickCounter := TickCounter + 1;
|
||||||
|
if TickCounter >= TICKS_PER_POLL then begin
|
||||||
|
TickCounter := 0;
|
||||||
|
usbcore.usb_check_hotplug;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure init;
|
||||||
|
begin
|
||||||
|
TickCounter := 0;
|
||||||
|
TMR_0_ISR.hook(uint32(@on_tick));
|
||||||
|
syslog.logln('USBHOTPLUG', 'Hooked into 1024Hz timer (~1Hz polling).');
|
||||||
|
end;
|
||||||
|
|
||||||
|
end.
|
||||||
+15
-22
@@ -66,7 +66,8 @@ uses
|
|||||||
rand,
|
rand,
|
||||||
hashmap, vfs,
|
hashmap, vfs,
|
||||||
video, vesa, doublebuffer, color, lvgl, desktop, uidebug,
|
video, vesa, doublebuffer, color, lvgl, desktop, uidebug,
|
||||||
vterminal;
|
vterminal,
|
||||||
|
graphicsrefresh, usbhotplug;
|
||||||
|
|
||||||
procedure kmain(mbinfo: Pmultiboot_info_t; mbmagic: uint32); stdcall;
|
procedure kmain(mbinfo: Pmultiboot_info_t; mbmagic: uint32); stdcall;
|
||||||
|
|
||||||
@@ -103,17 +104,13 @@ begin
|
|||||||
pop_trace;
|
pop_trace;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure myUserLandFunction;
|
procedure yield();
|
||||||
var
|
|
||||||
i : uint32;
|
|
||||||
|
|
||||||
begin
|
begin
|
||||||
i:=0;
|
|
||||||
while true do begin
|
|
||||||
i:=i+1;
|
|
||||||
asm
|
asm
|
||||||
MOV EAX, i
|
sti
|
||||||
end;
|
@idle:
|
||||||
|
hlt
|
||||||
|
jmp @idle
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@@ -132,6 +129,7 @@ begin
|
|||||||
|
|
||||||
{ Syslog Init — right after serial so log hooks work }
|
{ Syslog Init — right after serial so log hooks work }
|
||||||
syslog.init();
|
syslog.init();
|
||||||
|
syslog.writestringln('Booting Asuro...');
|
||||||
|
|
||||||
{ Store Multiboot info }
|
{ Store Multiboot info }
|
||||||
multibootinfo:= mbinfo;
|
multibootinfo:= mbinfo;
|
||||||
@@ -140,10 +138,8 @@ begin
|
|||||||
{ Ensure tracer is frozen }
|
{ Ensure tracer is frozen }
|
||||||
tracer.freeze();
|
tracer.freeze();
|
||||||
|
|
||||||
syslog.writestringln('Booting Asuro...');
|
|
||||||
|
|
||||||
syslog.writestringln('Checking for Multiboot Compliance');
|
|
||||||
{ Check for Multiboot }
|
{ Check for Multiboot }
|
||||||
|
syslog.writestringln('Checking for Multiboot Compliance');
|
||||||
if (multibootmagic <> MULTIBOOT_BOOTLOADER_MAGIC) then begin
|
if (multibootmagic <> MULTIBOOT_BOOTLOADER_MAGIC) then begin
|
||||||
syslog.logln('KERNEL', 'Multiboot Compliant Boot-Loader Needed!');
|
syslog.logln('KERNEL', 'Multiboot Compliant Boot-Loader Needed!');
|
||||||
syslog.logln('KERNEL', 'HALTING.');
|
syslog.logln('KERNEL', 'HALTING.');
|
||||||
@@ -276,16 +272,13 @@ begin
|
|||||||
usb_keyboard.UnitTest;
|
usb_keyboard.UnitTest;
|
||||||
usb_mouse.UnitTest;
|
usb_mouse.UnitTest;
|
||||||
|
|
||||||
{ Main render loop — USB completions are now interrupt-driven }
|
{ Register timer-driven tasks }
|
||||||
syslog.logln('KERNEL', 'Entering main render loop.');
|
graphicsrefresh.init;
|
||||||
while true do begin
|
usbhotplug.init;
|
||||||
desktop.update;
|
|
||||||
uidebug.update;
|
|
||||||
lvgl_handler;
|
|
||||||
usbcore.usb_check_hotplug;
|
|
||||||
video.Flush();
|
|
||||||
end;
|
|
||||||
|
|
||||||
|
{ All work is now driven by timer interrupts — idle the CPU }
|
||||||
|
syslog.logln('KERNEL', 'All tasks registered. Halting into idle.');
|
||||||
|
kernel.yield();
|
||||||
end;
|
end;
|
||||||
|
|
||||||
end.
|
end.
|
||||||
|
|||||||
Reference in New Issue
Block a user