aboutsummaryrefslogtreecommitdiff
path: root/tests/soc_simple_display/instructions.s.tcl
blob: 97e577e64549a2589490866fb5845f287e97559d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
## also look at stack_machine_cond_jump test

## we're going to write numbers from 0 to 639 at addresses h100000 to h1009FC
## and then write non-zero value at h100A00

# this will translate to 2 16-bit instructions
set_sp h100000

## set up the counter (1 16-bit instruction)
const 0

## this is the point we later jump to, address 6
tee
tee
## compute address:  counter * 4 + h100000
const 4
mul
swap
store+ h100000

## increase counter by 1
const 1
add
## compare value of counter to 640
tee
const 640
sub
## loop if counter != 640
cond_jump 6

## write hFFFFFFFF to address h100A00 (the point is to write a non-zero value
## there, but because our stack machine only knows how to write 32-bit values
## to memory, we'll write to h100A00 and h100A02, both being mapped as the
## VGA power-on register - what matters is the later write, so at least one of
## higher 16 bits of written value has to be non-zero)
const -1
store h100A00

halt