75 lines
1.9 KiB
ArmAsm
75 lines
1.9 KiB
ArmAsm
/* Partition 0 guest (SOURCE role): greeting -> APEX -> sampling create+write -> next timepart.
|
|
* Address placeholders 0x11111111/0x22222222/... are patched at build time.
|
|
* Every patched load is followed by slli/srli zero-extend: partition RAM lives
|
|
* at 0x90000000 (bit31 set), so the lui/addiw pair alone would sign-extend to
|
|
* 0xFFFFFFFF9xxxxxxx; the zero-extend yields the canonical PA. */
|
|
.equ H_CONSOLE_PUTS, 2
|
|
.equ H_NEXT_TIMEPART, 9
|
|
.equ H_PART_GET_STATUS, 10
|
|
.equ H_PART_SET_MODE, 11
|
|
.equ H_ERROR_RAISE, 12
|
|
.equ H_ERROR_GET_STATUS, 13
|
|
.equ H_SAMPLING_CREATE, 15
|
|
.equ H_SAMPLING_WRITE, 16
|
|
|
|
.equ A_GREETING, 0x11111111
|
|
.equ A_STATUS, 0x22222222
|
|
.equ A_APEXMSG, 0x33333333
|
|
.equ A_SAMPMSG, 0x44444444
|
|
.equ A_DONE, 0x55555555
|
|
|
|
.macro LDADDR reg, sym
|
|
li \reg, \sym
|
|
slli \reg, \reg, 32
|
|
srli \reg, \reg, 32
|
|
.endm
|
|
|
|
_start:
|
|
/* greeting */
|
|
li a7, H_CONSOLE_PUTS
|
|
LDADDR a0, A_GREETING
|
|
li a1, 64
|
|
ecall
|
|
/* SET_PARTITION_MODE(NORMAL) */
|
|
li a7, H_PART_SET_MODE
|
|
li a0, 3
|
|
ecall
|
|
/* RAISE_APPLICATION_ERROR(1) */
|
|
li a7, H_ERROR_RAISE
|
|
li a0, 1
|
|
ecall
|
|
/* GET_PARTITION_STATUS(buf) */
|
|
li a7, H_PART_GET_STATUS
|
|
LDADDR a0, A_STATUS
|
|
ecall
|
|
/* GET_ERROR_STATUS(buf) */
|
|
li a7, H_ERROR_GET_STATUS
|
|
LDADDR a0, A_STATUS
|
|
ecall
|
|
/* "[apex] OK" */
|
|
li a7, H_CONSOLE_PUTS
|
|
LDADDR a0, A_APEXMSG
|
|
li a1, 64
|
|
ecall
|
|
/* SAMPLING_CREATE(max=32, refresh=1000000us, SOURCE) */
|
|
li a7, H_SAMPLING_CREATE
|
|
li a0, 32
|
|
li a1, 1000000
|
|
li a2, 0
|
|
ecall
|
|
mv s1, a0 /* source port id */
|
|
/* SAMPLING_WRITE(port, msg, 12) */
|
|
li a7, H_SAMPLING_WRITE
|
|
mv a0, s1
|
|
LDADDR a1, A_SAMPMSG
|
|
li a2, 12
|
|
ecall
|
|
/* "[sampling] wrote" */
|
|
li a7, H_CONSOLE_PUTS
|
|
LDADDR a0, A_DONE
|
|
li a1, 64
|
|
ecall
|
|
/* NEXT_TIMEPART */
|
|
li a7, H_NEXT_TIMEPART
|
|
ecall
|
|
1: j 1b
|