Interrupts: Difference between revisions

From WSdev Wiki
Jump to navigationJump to search
m (Moves Interrupts below table of contents.)
(adjust port category name formatting)
Line 69: Line 69:
== I/O ports ==
== I/O ports ==


=== Interrupt Vector ===
{{Anchor|Interrupt Vector}}
=== Interrupt Vector ($B0) ===


<pre>
<pre>
Line 77: Line 78:
|||| ||||
|||| ||||
++++-++++- Interrupt vector offset
++++-++++- Interrupt vector offset
          (lowest three bits ignored)
</pre>
</pre>


=== Interrupt Enable ===
{{Anchor|Interrupt Enable}}
=== Interrupt Enable ($B2) ===


<pre>
<pre>
Line 91: Line 92:
</pre>
</pre>


=== Interrupt Status ===
{{Anchor|Interrupt Status}}
=== Interrupt Status ($B4 read)===


<pre>
<pre>
Line 101: Line 103:
</pre>
</pre>


=== Interrupt Acknowledge ===
{{Anchor|Interrupt Acknowledge}}
=== Interrupt Acknowledge ($B6 write)===


<pre>
<pre>
Line 111: Line 114:
</pre>
</pre>


=== Interrupt NMI Control ===
{{Anchor|Interrupt NMI Control}}
=== Interrupt NMI Control ($B7)===


<pre>
<pre>

Revision as of 11:48, 22 August 2023

Interrupts

The WonderSwan features fourteen different interrupts:

  • CPU interrupts - six provided by the V30MZ CPU ($00-$05),
  • Hardware interrupts - eight provided by the SoC's hardware ($00-$07, or $08-$0F, or $10-$1F, or ... $F8-$FF - controlled by an offset V):
    • Level - will be constantly requested while the prerequisite condition is true; interruption can only be prevented by resolving the condition or disabling the interrupt;
    • Edge - will only be requested when the prerequisite condition becomes true; acknowledging the interrupt prevents further interruption.

The user can additionally define and use any of the 256 interrupt vectors in their own code.

List of WonderSwan interrupts
Source Type Index Description
CPU N/A $00 DIV or IDIV instruction divide error

(division by zero or result overflow)

$01 Single-step (T flag)
$02 NMI (non-maskable interrupt)
$03 INT 3 opcode
$04 INTO opcode (if V = 1)
$05 BOUND opcode (if index out of bounds)
Hardware Level V + 0 UART Send Ready
Edge V + 1 Key Pressed
Level V + 2 Cartridge IRQ
V + 3 UART Receive Ready
Edge V + 4 Display Interrupt Line Match
V + 5 Vertical Blank Timer
V + 6 Display Vertical Blank
V + 7 Horizontal Blank Timer

I/O ports

Interrupt Vector ($B0)

7  bit  0
---- ----
VVVV V...
|||| ||||
++++-++++- Interrupt vector offset

Interrupt Enable ($B2)

7  bit  0
---- ----
iiii iiii
|||| ||||
++++-++++- Hardware interrupt to enable
           (acts as a mask)

Interrupt Status ($B4 read)

7  bit  0
---- ----
iiii iiii
|||| ||||
++++-++++- 1 if interrupt requested

Interrupt Acknowledge ($B6 write)

7  bit  0
---- ----
iiii iiii
|||| ||||
++++-++++- Write 1 to clear interrupt request

Interrupt NMI Control ($B7)

7  bit  0
---- ----
...b ....
   |
   +----- Enable NMI on low battery detection