83 lines
2 KiB
ArmAsm
83 lines
2 KiB
ArmAsm
/* Partition 1 guest (DESTINATION role): greeting -> APEX -> sampling create+read -> report VALID/INVALID -> next timepart.
|
|
* See guest_p0.s for the placeholder/zero-extend convention. */
|
|
.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_READ, 17
|
|
|
|
.equ A_GREETING, 0x11111111
|
|
.equ A_STATUS, 0x22222222
|
|
.equ A_APEXMSG, 0x33333333
|
|
.equ A_RDBUF, 0x44444444
|
|
.equ A_RDSTAT, 0x55555555
|
|
.equ A_VALID, 0x66666666
|
|
.equ A_INVALID, 0x77777777
|
|
|
|
.macro LDADDR reg, sym
|
|
li \reg, \sym
|
|
slli \reg, \reg, 32
|
|
srli \reg, \reg, 32
|
|
.endm
|
|
|
|
_start:
|
|
li a7, H_CONSOLE_PUTS
|
|
LDADDR a0, A_GREETING
|
|
li a1, 64
|
|
ecall
|
|
li a7, H_PART_SET_MODE
|
|
li a0, 3
|
|
ecall
|
|
li a7, H_ERROR_RAISE
|
|
li a0, 1
|
|
ecall
|
|
li a7, H_PART_GET_STATUS
|
|
LDADDR a0, A_STATUS
|
|
ecall
|
|
li a7, H_ERROR_GET_STATUS
|
|
LDADDR a0, A_STATUS
|
|
ecall
|
|
li a7, H_CONSOLE_PUTS
|
|
LDADDR a0, A_APEXMSG
|
|
li a1, 64
|
|
ecall
|
|
/* SAMPLING_CREATE(max=32, refresh=1000000us, DESTINATION, source_id=0) */
|
|
li a7, H_SAMPLING_CREATE
|
|
li a0, 32
|
|
li a1, 1000000
|
|
li a2, 1
|
|
li a3, 0
|
|
ecall
|
|
mv s1, a0
|
|
/* SAMPLING_READ(port, buf, 32, status) */
|
|
li a7, H_SAMPLING_READ
|
|
mv a0, s1
|
|
LDADDR a1, A_RDBUF
|
|
li a2, 32
|
|
LDADDR a3, A_RDSTAT
|
|
ecall
|
|
/* t0 = status PA; branch on the valid flag */
|
|
LDADDR t0, A_RDSTAT
|
|
lw t1, 4(t0) /* valid flag */
|
|
bnez t1, 1f /* valid -> print VALID */
|
|
/* INVALID path */
|
|
li a7, H_CONSOLE_PUTS
|
|
LDADDR a0, A_INVALID
|
|
li a1, 64
|
|
ecall
|
|
j 2f
|
|
1: /* VALID path */
|
|
li a7, H_CONSOLE_PUTS
|
|
LDADDR a0, A_VALID
|
|
li a1, 64
|
|
ecall
|
|
2: /* P-3 HM demo: deliberately fault so the health monitor idles this
|
|
* partition (PARTITION_STOP). P0 must keep running afterwards. */
|
|
.word 0xffffffff
|
|
/* NEXT_TIMEPART */
|
|
li a7, H_NEXT_TIMEPART
|
|
ecall
|
|
3: j 3b
|