From c22874a97f9e22f00b78b46b0647ea97325370f4 Mon Sep 17 00:00:00 2001 From: "Kartik K. Agaram" Date: Mon, 19 Apr 2021 10:34:22 -0700 Subject: . --- 500fake-screen.mu | 66 +++++++++++++++++++++++++++---------------------------- 1 file changed, 33 insertions(+), 33 deletions(-) diff --git a/500fake-screen.mu b/500fake-screen.mu index 5cf925a9..90944ed0 100644 --- a/500fake-screen.mu +++ b/500fake-screen.mu @@ -83,39 +83,6 @@ fn screen-size _screen: (addr screen) -> _/eax: int, _/ecx: int { return width, height } -fn pixel screen: (addr screen), x: int, y: int, color: int { - { - compare screen, 0 - break-if-!= - pixel-on-real-screen x, y, color - return - } - # fake screen - # prepare a pixel - var pixel-storage: pixel - var src/ecx: int <- copy x - var dest/edx: (addr int) <- get pixel-storage, x - copy-to *dest, src - src <- copy y - dest <- get pixel-storage, y - copy-to *dest, src - src <- copy color - dest <- get pixel-storage, color - copy-to *dest, src - # save it - var src/ecx: (addr pixel) <- address pixel-storage - var screen/eax: (addr screen) <- copy screen - var dest-stream-ah/eax: (addr handle stream pixel) <- get screen, pixels - var dest-stream/eax: (addr stream pixel) <- lookup *dest-stream-ah - { - var full?/eax: boolean <- stream-full? dest-stream - compare full?, 0/false - break-if-= - abort "tried to draw too many pixels on the fake screen; adjust initialize-screen" - } - write-to-stream dest-stream, src -} - # testable screen primitive fn draw-grapheme _screen: (addr screen), g: grapheme, x: int, y: int, color: int, background-color: int { var screen/esi: (addr screen) <- copy _screen @@ -454,3 +421,36 @@ fn screen-background-color-at-idx _screen: (addr screen), idx-on-stack: int -> _ var result/eax: int <- copy *src return result } + +fn pixel screen: (addr screen), x: int, y: int, color: int { + { + compare screen, 0 + break-if-!= + pixel-on-real-screen x, y, color + return + } + # fake screen + # prepare a pixel + var pixel-storage: pixel + var src/ecx: int <- copy x + var dest/edx: (addr int) <- get pixel-storage, x + copy-to *dest, src + src <- copy y + dest <- get pixel-storage, y + copy-to *dest, src + src <- copy color + dest <- get pixel-storage, color + copy-to *dest, src + # save it + var src/ecx: (addr pixel) <- address pixel-storage + var screen/eax: (addr screen) <- copy screen + var dest-stream-ah/eax: (addr handle stream pixel) <- get screen, pixels + var dest-stream/eax: (addr stream pixel) <- lookup *dest-stream-ah + { + var full?/eax: boolean <- stream-full? dest-stream + compare full?, 0/false + break-if-= + abort "tried to draw too many pixels on the fake screen; adjust initialize-screen" + } + write-to-stream dest-stream, src +} -- cgit 1.4.1-2-gfad0