Files

62 lines
1.5 KiB
NASM

; draw_box.asm -- one-shot static VRAM injection, then return.
;
; Draws three 32x32 solid-white boxes at framebuffer (x,y):
; A (50,50) -- root weave, outside every window
; B (250,400) -- inside the Terminal Manager window body (white area)
; C (930,750) -- root weave, lower right
; Writes marker words and returns with `rets`, so the rdebug session survives.
;
; Framebuffer model (harness/mame/RENDER_REPORT.md): base bit 04000000h,
; 1024 bits per row, bit 0 = leftmost pixel, LSB-first in each 16-bit word.
;
; Linked at bit 01840000h by dwt/visual/build.sh.
.text
_start:
setf 16, 0, 0
setf 32, 0, 1
movi 0FFFFh, a0, L ; pattern
; ---- box A: (50,50), 32 rows x 2 words = 32x32 px -------------
movi 0400C832h, a2, L ; 04000000h + 50*1024 + 50
movi 32, a3, L
movi 2, a4, L
rowA:
move a4, a5
wordA:
move a0, *a2+, 0
dsjs a5, wordA
addi 03E0h, a2 ; 1024 - 32 bits
dsjs a3, rowA
; ---- box B: (250,400) ----------------------------------------
movi 040640FAh, a2, L ; 04000000h + 400*1024 + 250
movi 32, a3, L
movi 2, a4, L
rowB:
move a4, a5
wordB:
move a0, *a2+, 0
dsjs a5, wordB
addi 03E0h, a2
dsjs a3, rowB
; ---- box C: (930,750) ----------------------------------------
movi 040BBBA2h, a2, L ; 04000000h + 750*1024 + 930
movi 32, a3, L
movi 2, a4, L
rowC:
move a4, a5
wordC:
move a0, *a2+, 0
dsjs a5, wordC
addi 03E0h, a2
dsjs a3, rowC
movi 0D2A0h, a0, L
move a0, @01850020h, 0 ; DRAW_MARK = D2A0
movi 0B0C0h, a0, L
move a0, @01850030h, 0 ; DRAW_MARK2 = B0C0
rets
.end