40 lines
1.1 KiB
Nim
40 lines
1.1 KiB
Nim
# SPDX-License-Identifier: LUL-1.0
|
|
# Copyright (c) 2026 Markus Maiwald
|
|
# Stewardship: Self Sovereign Society Foundation
|
|
#
|
|
# This file is part of the Nexus SDK.
|
|
# See legal/LICENSE_UNBOUND.md for license terms.
|
|
|
|
# core/rumpk/npl/glyph/glyph.nim
|
|
# Phase 35c: The Glyph - Surface Manager Test Client
|
|
|
|
import ../../libs/membrane/libc
|
|
|
|
proc main() =
|
|
# 1. Create Surface
|
|
let sid = sys_surface_create(640, 480)
|
|
if sid < 0:
|
|
return
|
|
|
|
# 2. Get buffer pointer (directly mapped)
|
|
# In Sv39, this would be a userland address.
|
|
# For now, it's a physical address (identity mapped).
|
|
let fb_ptr = cast[ptr UncheckedArray[uint32]](sys_surface_get_ptr(sid))
|
|
|
|
var frame = 0
|
|
while true:
|
|
# 3. Draw something: Color Cycle
|
|
let color = uint32(0xFF000000'u32) or (uint32(frame and 0xFF) shl 8)
|
|
for i in 0 ..< (640 * 480):
|
|
fb_ptr[i] = color
|
|
|
|
# 4. Flip (Notify compositor)
|
|
sys_surface_flip(sid)
|
|
|
|
frame += 1
|
|
# Yield to let compositor blit
|
|
# libc.yield()? We'll use the syscall directly if needed or just loop
|
|
# The kernel scheduler will preempt us anyway.
|
|
|
|
main()
|