press '+' and '-' to zoom in and out respectively

This commit is contained in:
Kartik K. Agaram 2021-05-16 21:58:13 -07:00
parent 6a47fad86f
commit fb0f0748bc
2 changed files with 62 additions and 0 deletions

View File

@ -19,3 +19,35 @@ fn sgn n: int -> _/eax: int {
}
return 0
}
fn shift-left-by n: int, bits: int -> _/eax: int {
var i/eax: int <- copy bits
{
compare i, 0
break-if-<=
shift-left n, 1
i <- decrement
loop
}
return n
}
fn shift-right-by n: int, bits: int -> _/eax: int {
var i/eax: int <- copy bits
{
compare i, 0
break-if-<=
shift-right n, 1
i <- decrement
loop
}
return n
}
fn clear-lowest-bits _n: (addr int), bits: int {
var dest/edi: (addr int) <- copy _n
var n/eax: int <- copy *dest
n <- shift-right-by n, bits
n <- shift-left-by n, bits
copy-to *dest, n
}

View File

@ -240,6 +240,36 @@ fn edit keyboard: (addr keyboard), _self: (addr environment) {
copy-to *loop, 0
return
}
# -: zoom out
{
compare key, 0x2d/-
break-if-!=
var zoom/eax: (addr int) <- get self, zoom
compare *zoom, 4
{
break-if->=
increment *zoom
# set tick to a multiple of zoom
var tick-a/edx: (addr int) <- get self, tick
clear-lowest-bits tick-a, *zoom
}
return
}
# +: zoom in
{
compare key, 0x2b/+
break-if-!=
var zoom/eax: (addr int) <- get self, zoom
compare *zoom, 0
{
break-if-<=
decrement *zoom
# set tick to a multiple of zoom
var tick-a/edx: (addr int) <- get self, tick
clear-lowest-bits tick-a, *zoom
}
return
}
}
fn pause _self: (addr environment) {