mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2025-08-21 17:59:50 +00:00
Add (failing) interrupt-related tests
This commit is contained in:
parent
949ca7756b
commit
94169b3c7d
4 changed files with 305 additions and 0 deletions
77
Source/DSPSpy/tests/interrupt_nested.ds
Normal file
77
Source/DSPSpy/tests/interrupt_nested.ds
Normal file
|
@ -0,0 +1,77 @@
|
|||
; This test needs to manually specify IRQs
|
||||
jmp irq0
|
||||
jmp irq1
|
||||
jmp irq2
|
||||
jmp irq3
|
||||
jmp irq4
|
||||
jmp accov_irq
|
||||
jmp irq6
|
||||
jmp irq7
|
||||
|
||||
incdir "tests"
|
||||
include "dsp_base_noirq.inc"
|
||||
|
||||
test_main:
|
||||
; Use the accelerator to generate an IRQ by setting the start and end address to 0
|
||||
; This will result in an interrupt on every read
|
||||
SI @0xffda, #0 ; pred_scale
|
||||
SI @0xffdb, #0 ; yn1
|
||||
SI @0xffdc, #0 ; yn2
|
||||
SI @0xffd1, #0 ; SampleFormat
|
||||
SI @ACSAH, #0
|
||||
SI @ACCAH, #0
|
||||
SI @ACSAL, #0
|
||||
SI @ACCAL, #0
|
||||
SI @ACEAH, #0
|
||||
SI @ACEAL, #0
|
||||
|
||||
CLR $ACC0
|
||||
CLR $ACC1
|
||||
LRIS $AX0.H, #1
|
||||
LRIS $AX1.H, #0
|
||||
CALL send_back
|
||||
|
||||
LRS $AX0.L, @ARAM ; Trigger interrupt
|
||||
LRIS $AX1.H, #1
|
||||
|
||||
LRIS $AX0.H, #2
|
||||
CALL send_back
|
||||
|
||||
jmp end_of_test
|
||||
|
||||
accov_irq:
|
||||
; NOTE: interrupts are NOT automatically disabled here
|
||||
|
||||
; Restore registers, otherwise no new interrupt will be generated
|
||||
SI @0xffda, #0 ; pred_scale
|
||||
SI @0xffdb, #0 ; yn1
|
||||
SI @0xffdc, #0 ; yn2
|
||||
|
||||
INCM $AC0.M
|
||||
INCM $AC1.M
|
||||
|
||||
LRIS $AX0.H, #3
|
||||
CALL send_back
|
||||
|
||||
CMPIS $AC0.M, #1
|
||||
IFZ
|
||||
; Trigger second interrupt, which will happen immediately
|
||||
LRS $AX0.L, @ARAM
|
||||
|
||||
LRIS $AX1.H, #2
|
||||
|
||||
LRIS $AX0.H, #4
|
||||
CALL send_back
|
||||
|
||||
DECM $AC1.M
|
||||
|
||||
RTI
|
||||
|
||||
; Expected output ($AX0.H (send_back number), $AX1.H (changed on lines after an exception fires,
|
||||
; to make sure it happens immediately), $AC0.M (interrupt count), $AC1.M (interrupt depth), and $SR):
|
||||
; 1, 0, 0, 0, 2224 (first line)
|
||||
; 3, 0, 1, 1, 2220 (start of interrupt handler)
|
||||
; 3, 0, 2, 2, 2220 (nested start of interrupt handler)
|
||||
; 4, 2, 2, 2, 2221 (nested interrupt handler exits)
|
||||
; 4, 2, 2, 1, 2225 (interrupt handler exits)
|
||||
; 2, 1, 2, 0, 2224 (before end_of_test)
|
74
Source/DSPSpy/tests/interrupt_suppressed.ds
Normal file
74
Source/DSPSpy/tests/interrupt_suppressed.ds
Normal file
|
@ -0,0 +1,74 @@
|
|||
; This test needs to manually specify IRQs
|
||||
jmp irq0
|
||||
jmp irq1
|
||||
jmp irq2
|
||||
jmp irq3
|
||||
jmp irq4
|
||||
jmp accov_irq
|
||||
jmp irq6
|
||||
jmp irq7
|
||||
|
||||
incdir "tests"
|
||||
include "dsp_base_noirq.inc"
|
||||
|
||||
test_main:
|
||||
; Use the accelerator to generate an IRQ by setting the start and end address to 0
|
||||
; This will result in an interrupt on every read
|
||||
SI @0xffda, #0 ; pred_scale
|
||||
SI @0xffdb, #0 ; yn1
|
||||
SI @0xffdc, #0 ; yn2
|
||||
SI @0xffd1, #0 ; SampleFormat
|
||||
SI @ACSAH, #0
|
||||
SI @ACCAH, #0
|
||||
SI @ACSAL, #0
|
||||
SI @ACCAL, #0
|
||||
SI @ACEAH, #0
|
||||
SI @ACEAL, #0
|
||||
|
||||
CLR $ACC0
|
||||
CLR $ACC1
|
||||
|
||||
LRIS $AC1.M, #1
|
||||
CALL send_back
|
||||
|
||||
LRS $AX0.L, @ARAM ; Trigger interrupt
|
||||
|
||||
LRIS $AC1.M, #2
|
||||
CALL send_back
|
||||
|
||||
SBCLR #3 ; Disable interrupts
|
||||
|
||||
LRIS $AC1.M, #3
|
||||
CALL send_back
|
||||
|
||||
LRS $AX0.L, @ARAM ; Trigger interrupt while disabled
|
||||
|
||||
LRIS $AC1.M, #4
|
||||
CALL send_back
|
||||
|
||||
SBSET #3 ; Re-enable interrupts
|
||||
|
||||
LRIS $AC1.M, #5
|
||||
CALL send_back
|
||||
|
||||
jmp end_of_test
|
||||
|
||||
accov_irq:
|
||||
; Restore registers, otherwise no new interrupt will be generated
|
||||
SI @0xffda, #0 ; pred_scale
|
||||
SI @0xffdb, #0 ; yn1
|
||||
SI @0xffdc, #0 ; yn2
|
||||
|
||||
INCM $AC0.M
|
||||
LRIS $AC1.M, #6
|
||||
CALL send_back
|
||||
|
||||
RTI
|
||||
|
||||
; Expected output ($AC0.M (num interrupts), $AC1.M (send_back number), and $SR):
|
||||
; 0, 1, 2224 (start)
|
||||
; 1, 6, 2220 (in interrupt handler)
|
||||
; 1, 2, 2224 (out of interrupt handler)
|
||||
; 1, 3, 2024 (interrupts disabled)
|
||||
; 1, 4, 2024 (no interrupt triggered)
|
||||
; 1, 5, 2224 (interrupts enabled, still no interrupt triggered)
|
73
Source/DSPSpy/tests/interrupt_suppressed_nested_rti.ds
Normal file
73
Source/DSPSpy/tests/interrupt_suppressed_nested_rti.ds
Normal file
|
@ -0,0 +1,73 @@
|
|||
; This test needs to manually specify IRQs
|
||||
jmp irq0
|
||||
jmp irq1
|
||||
jmp irq2
|
||||
jmp irq3
|
||||
jmp irq4
|
||||
jmp accov_irq
|
||||
jmp irq6
|
||||
jmp irq7
|
||||
|
||||
incdir "tests"
|
||||
include "dsp_base_noirq.inc"
|
||||
|
||||
test_main:
|
||||
; Use the accelerator to generate an IRQ by setting the start and end address to 0
|
||||
; This will result in an interrupt on every read
|
||||
SI @0xffda, #0 ; pred_scale
|
||||
SI @0xffdb, #0 ; yn1
|
||||
SI @0xffdc, #0 ; yn2
|
||||
SI @0xffd1, #0 ; SampleFormat
|
||||
SI @ACSAH, #0
|
||||
SI @ACCAH, #0
|
||||
SI @ACSAL, #0
|
||||
SI @ACCAL, #0
|
||||
SI @ACEAH, #0
|
||||
SI @ACEAL, #0
|
||||
|
||||
CLR $ACC0
|
||||
CLR $ACC1
|
||||
LRIS $AX0.H, #1
|
||||
LRIS $AX1.H, #0
|
||||
CALL send_back
|
||||
|
||||
LRS $AX0.L, @ARAM ; Trigger interrupt
|
||||
LRIS $AX1.H, #1
|
||||
|
||||
LRIS $AX0.H, #2
|
||||
CALL send_back
|
||||
|
||||
jmp end_of_test
|
||||
|
||||
accov_irq:
|
||||
; Disable interrupts
|
||||
SBCLR #3
|
||||
|
||||
; Restore registers, otherwise no new interrupt will be generated
|
||||
SI @0xffda, #0 ; pred_scale
|
||||
SI @0xffdb, #0 ; yn1
|
||||
SI @0xffdc, #0 ; yn2
|
||||
|
||||
INCM $AC0.M
|
||||
INCM $AC1.M
|
||||
|
||||
LRIS $AX0.H, #3
|
||||
CALL send_back
|
||||
|
||||
; Trigger second interrupt, which will be ignored(!)
|
||||
LRS $AX0.L, @ARAM
|
||||
LRIS $AX1.H, #2
|
||||
|
||||
LRIS $AX0.H, #4
|
||||
CALL send_back
|
||||
|
||||
DECM $AC1.M
|
||||
|
||||
RTI
|
||||
|
||||
; Expected output ($AX0.H (send_back number), $AX1.H (changed on lines after an exception fires,
|
||||
; to make sure it happens immediately), $AC0.M (interrupt count), $AC1.M (interrupt depth), and $SR):
|
||||
; 1, 0, 0, 0, 2224 (first line)
|
||||
; 3, 0, 1, 1, 2020 (start of interrupt handler)
|
||||
; 4, 2, 1, 1, 2020 (end of interrupt handler)
|
||||
; 2, 1, 1, 0, 2224 (before end_of_test)
|
81
Source/DSPSpy/tests/interrupt_suppressed_nested_sbset.ds
Normal file
81
Source/DSPSpy/tests/interrupt_suppressed_nested_sbset.ds
Normal file
|
@ -0,0 +1,81 @@
|
|||
; This test needs to manually specify IRQs
|
||||
jmp irq0
|
||||
jmp irq1
|
||||
jmp irq2
|
||||
jmp irq3
|
||||
jmp irq4
|
||||
jmp accov_irq
|
||||
jmp irq6
|
||||
jmp irq7
|
||||
|
||||
incdir "tests"
|
||||
include "dsp_base_noirq.inc"
|
||||
|
||||
test_main:
|
||||
; Use the accelerator to generate an IRQ by setting the start and end address to 0
|
||||
; This will result in an interrupt on every read
|
||||
SI @0xffda, #0 ; pred_scale
|
||||
SI @0xffdb, #0 ; yn1
|
||||
SI @0xffdc, #0 ; yn2
|
||||
SI @0xffd1, #0 ; SampleFormat
|
||||
SI @ACSAH, #0
|
||||
SI @ACCAH, #0
|
||||
SI @ACSAL, #0
|
||||
SI @ACCAL, #0
|
||||
SI @ACEAH, #0
|
||||
SI @ACEAL, #0
|
||||
|
||||
CLR $ACC0
|
||||
CLR $ACC1
|
||||
LRIS $AX0.H, #1
|
||||
LRIS $AX1.H, #0
|
||||
CALL send_back
|
||||
|
||||
LRS $AX0.L, @ARAM ; Trigger interrupt
|
||||
LRIS $AX1.H, #1
|
||||
|
||||
LRIS $AX0.H, #2
|
||||
CALL send_back
|
||||
|
||||
jmp end_of_test
|
||||
|
||||
accov_irq:
|
||||
; Disable interrupts
|
||||
SBCLR #3
|
||||
|
||||
; Restore registers, otherwise no new interrupt will be generated
|
||||
SI @0xffda, #0 ; pred_scale
|
||||
SI @0xffdb, #0 ; yn1
|
||||
SI @0xffdc, #0 ; yn2
|
||||
|
||||
INCM $AC0.M
|
||||
INCM $AC1.M
|
||||
|
||||
LRIS $AX0.H, #3
|
||||
CALL send_back
|
||||
|
||||
; Trigger second interrupt, which will be ignored(!)
|
||||
LRS $AX0.L, @ARAM
|
||||
LRIS $AX1.H, #2
|
||||
|
||||
LRIS $AX0.H, #4
|
||||
CALL send_back
|
||||
|
||||
; Re-enable interrupts - we don't get the previously triggered interrupt here.
|
||||
SBSET #3
|
||||
LRIS $AX1.H, #3
|
||||
|
||||
LRIS $AX0.H, #5
|
||||
CALL send_back
|
||||
|
||||
DECM $AC1.M
|
||||
|
||||
RTI
|
||||
|
||||
; Expected output ($AX0.H (send_back number), $AX1.H (changed on lines after an exception fires,
|
||||
; to make sure it happens immediately), $AC0.M (interrupt count), $AC1.M (interrupt depth), and $SR):
|
||||
; 1, 0, 0, 0, 2224 (first line)
|
||||
; 3, 0, 1, 1, 2020 (start of interrupt handler)
|
||||
; 4, 2, 1, 1, 2020 (middle of interrupt handler)
|
||||
; 5, 3, 1, 1, 2220 (end of interrupt handler)
|
||||
; 2, 1, 1, 0, 2224 (before end_of_test)
|
Loading…
Add table
Add a link
Reference in a new issue