Smoked out some issues by rendering a single frame of Game of Life. Incredibly slow.
This commit is contained in:
parent
81c3678515
commit
46441d7204
|
@ -98,7 +98,7 @@ fn draw-code-point-at-cursor screen: (addr screen), c: code-point, color: int, b
|
||||||
# return the next 'x' coordinate
|
# return the next 'x' coordinate
|
||||||
# if there isn't enough space, truncate
|
# if there isn't enough space, truncate
|
||||||
fn draw-text-rightward screen: (addr screen), text: (addr array byte), x: int, xmax: int, y: int, color: int, background-color: int -> _/eax: int {
|
fn draw-text-rightward screen: (addr screen), text: (addr array byte), x: int, xmax: int, y: int, color: int, background-color: int -> _/eax: int {
|
||||||
var stream-storage: (stream byte 0x200/print-buffer-size)
|
var stream-storage: (stream byte 0x400/print-buffer-size)
|
||||||
var stream/esi: (addr stream byte) <- address stream-storage
|
var stream/esi: (addr stream byte) <- address stream-storage
|
||||||
write stream, text
|
write stream, text
|
||||||
var xcurr/eax: int <- draw-stream-rightward screen, stream, x, xmax, y, color, background-color
|
var xcurr/eax: int <- draw-stream-rightward screen, stream, x, xmax, y, color, background-color
|
||||||
|
|
|
@ -66,10 +66,6 @@
|
||||||
(list (list (car xs)))
|
(list (list (car xs)))
|
||||||
(cons (list (car xs) (cadr xs))
|
(cons (list (car xs) (cadr xs))
|
||||||
(pair (cddr xs)))])
|
(pair (cddr xs)))])
|
||||||
(grid . [def (grid m n val)
|
|
||||||
ret g (populate n ())
|
|
||||||
for i 0 (< i n) ++i
|
|
||||||
iset g i (populate m val)])
|
|
||||||
(with . [mac (with bindings . body)
|
(with . [mac (with bindings . body)
|
||||||
`((fn ,(map1 car (pair bindings))
|
`((fn ,(map1 car (pair bindings))
|
||||||
,@body)
|
,@body)
|
||||||
|
@ -124,6 +120,14 @@
|
||||||
(while ,test
|
(while ,test
|
||||||
,@body
|
,@body
|
||||||
,update))])
|
,update))])
|
||||||
|
(grid . [def (grid m n val)
|
||||||
|
ret g (populate n ())
|
||||||
|
for i 0 (< i n) ++i
|
||||||
|
iset g i (populate m val)])
|
||||||
|
(indexgrid . [def (indexgrid g x y)
|
||||||
|
(index (index g y) x)])
|
||||||
|
(isetgrid . [def (isetgrid g x y val)
|
||||||
|
iset (index g y) x val])
|
||||||
(hborder . [def (hborder scr y color)
|
(hborder . [def (hborder scr y color)
|
||||||
(hline scr y 0 (width scr) color)])
|
(hline scr y 0 (width scr) color)])
|
||||||
(vborder . [def (vborder scr x color)
|
(vborder . [def (vborder scr x color)
|
||||||
|
@ -162,6 +166,27 @@
|
||||||
(pixel screen x y (palette Greys x*y))])
|
(pixel screen x y (palette Greys x*y))])
|
||||||
(main . [def (main screen keyboard)
|
(main . [def (main screen keyboard)
|
||||||
(pat screen)])
|
(pat screen)])
|
||||||
|
(lifreres . [define liferes 8])
|
||||||
|
(life . [def (life screen)
|
||||||
|
let g (grid (/ (width screen) liferes)
|
||||||
|
(/ (height screen) liferes)
|
||||||
|
0)
|
||||||
|
isetgrid g 5 5 1
|
||||||
|
isetgrid g 6 5 1
|
||||||
|
isetgrid g 4 6 1
|
||||||
|
isetgrid g 5 6 1
|
||||||
|
isetgrid g 5 7 1
|
||||||
|
while 1
|
||||||
|
steplife g
|
||||||
|
renderlife screen g])
|
||||||
|
(steplife . [def (steplife g)
|
||||||
|
])
|
||||||
|
(renderlife . [def (renderlife screen g)
|
||||||
|
with (w (width screen)
|
||||||
|
h (height screen))
|
||||||
|
for y 0 (< y h) ++y
|
||||||
|
for x 0 (< x w) ++x
|
||||||
|
(pixel screen x y (indexgrid g x/liferes y/liferes))])
|
||||||
))
|
))
|
||||||
(sandbox . [pat screen])
|
(sandbox . [life screen])
|
||||||
)
|
)
|
||||||
|
|
|
@ -3641,14 +3641,19 @@ fn apply-index _args-ah: (addr handle cell), out: (addr handle cell), trace: (ad
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
var second-value/eax: (addr float) <- get second, number-data
|
var second-value/eax: (addr float) <- get second, number-data
|
||||||
var index/edx: int <- convert *second-value
|
var index/edx: int <- truncate *second-value
|
||||||
var data-ah/eax: (addr handle array handle cell) <- get first, array-data
|
var data-ah/eax: (addr handle array handle cell) <- get first, array-data
|
||||||
var data/eax: (addr array handle cell) <- lookup *data-ah
|
var data/eax: (addr array handle cell) <- lookup *data-ah
|
||||||
{
|
{
|
||||||
var len/eax: int <- length data
|
var len/eax: int <- length data
|
||||||
compare index, len
|
compare index, len
|
||||||
break-if-<
|
break-if-<
|
||||||
error trace, "too few elements in array"
|
error trace, "index: too few elements in array"
|
||||||
|
compare index, len
|
||||||
|
{
|
||||||
|
break-if-<=
|
||||||
|
error trace, "foo"
|
||||||
|
}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
var offset/edx: (offset handle cell) <- compute-offset data, index
|
var offset/edx: (offset handle cell) <- compute-offset data, index
|
||||||
|
@ -3716,13 +3721,13 @@ fn apply-iset _args-ah: (addr handle cell), out: (addr handle cell), trace: (add
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
var second-value/eax: (addr float) <- get second, number-data
|
var second-value/eax: (addr float) <- get second, number-data
|
||||||
var idx/eax: int <- convert *second-value
|
var idx/eax: int <- truncate *second-value
|
||||||
# offset based on idx after bounds check
|
# offset based on idx after bounds check
|
||||||
var max/edx: int <- length array
|
var max/edx: int <- length array
|
||||||
compare idx, max
|
compare idx, max
|
||||||
{
|
{
|
||||||
break-if-<
|
break-if-<
|
||||||
error trace, "too few elements in array"
|
error trace, "iset: too few elements in array"
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
var offset/edx: (offset handle cell) <- compute-offset array, idx
|
var offset/edx: (offset handle cell) <- compute-offset array, idx
|
||||||
|
|
Loading…
Reference in New Issue