diff options
| author | cheapie <cheapiephp@gmail.com> | 2026-11-08 07:38:17 -0600 |
|---|---|---|
| committer | cheapie <cheapiephp@gmail.com> | 2026-11-08 07:38:17 -0600 |
| commit | f8cc0d73afe12cc1c8dd1600a28ff4634decf617 (patch) | |
| tree | 035cc4c5b466c98fb2940c48af79389d43ab4994 /assembly | |
| parent | 71729845170cdb4380f1ae42708638fdaee997cb (diff) | |
| download | rvcontroller-f8cc0d73afe12cc1c8dd1600a28ff4634decf617.tar rvcontroller-f8cc0d73afe12cc1c8dd1600a28ff4634decf617.tar.gz rvcontroller-f8cc0d73afe12cc1c8dd1600a28ff4634decf617.tar.bz2 rvcontroller-f8cc0d73afe12cc1c8dd1600a28ff4634decf617.tar.xz rvcontroller-f8cc0d73afe12cc1c8dd1600a28ff4634decf617.zip | |
Add Smrnmi
Diffstat (limited to 'assembly')
| -rw-r--r-- | assembly/crosswalk/crosswalk.S | 1 | ||||
| -rw-r--r-- | assembly/multitask/multitask.S | 1 | ||||
| -rw-r--r-- | assembly/rrxing2/rrxing2.S | 19 |
3 files changed, 20 insertions, 1 deletions
diff --git a/assembly/crosswalk/crosswalk.S b/assembly/crosswalk/crosswalk.S index 86a0813..4baeaa8 100644 --- a/assembly/crosswalk/crosswalk.S +++ b/assembly/crosswalk/crosswalk.S @@ -1,3 +1,4 @@ +csrsi mnstatus,8 # Set NMIE so that interrupts can work (not actually setting up a real NMI handler) la t0,handler csrw mtvec,t0 # Set up trap handler li t0,0x400 diff --git a/assembly/multitask/multitask.S b/assembly/multitask/multitask.S index e46dd81..29df46c 100644 --- a/assembly/multitask/multitask.S +++ b/assembly/multitask/multitask.S @@ -1,3 +1,4 @@ +csrsi mnstatus,8 # Set NMIE so that interrupts can work (not actually setting up a real NMI handler) la t0,handler csrw mtvec,t0 # Set trap handler address and mode (0/direct) li t0,0x400 diff --git a/assembly/rrxing2/rrxing2.S b/assembly/rrxing2/rrxing2.S index c94edc0..bb2c4dc 100644 --- a/assembly/rrxing2/rrxing2.S +++ b/assembly/rrxing2/rrxing2.S @@ -8,6 +8,9 @@ j _start .include "util.S" _start: +la t0,nmihandler +csrw 0xbc0,t0 # Set up RNMI handler +csrsi mnstatus,8 # Turn on NMIE li t0,0x400 csrs mseccfg,t0 # Turn on MLPE (enable Zicfilp) li sp,0x10000 # Set up stack pointer @@ -187,6 +190,19 @@ ecall # Tell the user li a7,10 ecall # Then halt +.align 2 +nmihandler: +li a7,4 +la a0,uinmi +ecall # Display NMI message + +csrr a0,mncause # Read what the cause was +li a7,1 +ecall # Tell the user + +li a7,10 +ecall # Then halt + states: .word destate0,destate1,destate2,destate3,destate4,destate5,destate6,0,0,0,0,0,0,0,0,0 .word ukstate0,ukstate1,ukstate2,ukstate3,ukstate4,ukstate5,ukstate6,ukstate7,0,0,0,0,0,0,0,0 .word usstate0,usstate1,usstate2,usstate3,usstate4,0,0,0,0,0,0,0,0,0,0,0 @@ -364,7 +380,8 @@ activetime: .byte 15 extensiontime: .byte 25 traincounter: .word 0 -uiunimplementedtrap: .asciz "Unimplemented trap!\nmcause: " +uiunimplementedtrap: .asciz "\nUnimplemented trap!\nmcause: " +uinmi: .asciz "\nUnexpected NMI!\nmncause: " channelbuf: .skip 16 msgbuf: .skip 16 lightchannel: .asciz "light" |
