NEC V30MZ: Difference between revisions

From WSdev Wiki
Jump to navigationJump to search
(add STSWS link for now)
(add architecture, sketch instruction set)
Line 3: Line 3:
Unlike the NEC V20/V30 CPU family, the V30MZ is fully compatible with the Intel 80186's documented behaviour, as well as some of its undocumented behaviour (such as the SALC opcode); it also omits the V20/V30's opcode extensions.
Unlike the NEC V20/V30 CPU family, the V30MZ is fully compatible with the Intel 80186's documented behaviour, as well as some of its undocumented behaviour (such as the SALC opcode); it also omits the V20/V30's opcode extensions.


The NEC V30MZ datasheet uses distinct names for opcodes and registers (''NEC names''); as all homebrew compilers and assemblers for the platform utilize Intel's official naming (''Intel names''), the latter is what the wiki has standardized on.
The NEC V30MZ datasheet uses distinct names for opcodes and registers (''NEC names''); as all homebrew compilers and assemblers for the platform utilize Intel's official naming (''Intel names''), the latter is what the wiki - and most community tooling - has standardized on.


== Sections ==
== Architecture ==


* [[NEC V30MZ/Undocumented|CPU undocumented behavior]]
For this section, elements of the architecture which have distinct NEC names are provided in the following format: Intel<sup>NEC</sup>.
 
=== Registers ===
 
* Four 16-bit general-purpose registers, with their (low, high) components accessible as individual 8-bit sub-registers:
** '''AX'''<sup>AW</sup> ('''AL''', '''AH''')
** '''BX'''<sup>BW</sup> ('''BL''', '''BH''')
** '''CX'''<sup>CW</sup> ('''CL''', '''CH''')
** '''DX'''<sup>DW</sup> ('''DL''', '''DH''')
* Four additional 16-bit registers:
** '''SI'''<sup>IX</sup>
** '''DI'''<sup>IY</sup>
** '''SP'''
** '''BP'''
* Four segment registers:
** '''CS'''<sup>PS</sup> - code segment,
** '''DS'''<sup>DS0</sup> - data segment,
** '''ES'''<sup>DS1</sup> - additional data segment,
** '''SS''' - stack segment.
* '''IP'''<sup>PC</sup> - instruction pointer; instructions are always addressed in the code segment (so as <code>CS:IP</code> far addresses),
* '''FLAGS'''<sup>PSW</sup> - 16-bit processor flag register.
 
=== Flags ===
 
<pre>
15  bit  8  7  bit  0
---- ----  ---- ----
m111 odit  sz0a 0p1c
|    ||||  || |  | |
|    ||||  || |  | +- Carry (CF<sup>CY</sup>)
|    ||||  || |  +--- Parity (PF<sup>P</sup>)
|    ||||  || +------ Auxillary Carry (AF<sup>AC</sup>)
|    ||||  |+-------- Zero (Z)
|    ||||  +--------- Sign (S)
|    |||+------------ Single Step<sup>Break</sup> (TF<sup>BRK</sup>)
|    ||+------------- Interrupt Enable (IF<sup>IE</sup>)
|    |+-------------- Direction (DF<sup>DIR</sup>)
|    +--------------- Overflow (OF<sup>V</sup>)
+-------------------- Mode (MD)
</pre>
 
<!--
 
== Instruction set ==
 
{| class="wikitable sortable"
|+ V30MZ Instruction Set
|-
! Instruction
! Opcode (hex)
! Opcode (bin)
! Bytes
! Cycles
! Flags
! NEC mnemonic
! Notes
|-
| <tt>ADD AL, imm8</tt>
| <tt>04</tt>
| <tt>00000100</tt>
| 2
| 1
| <tt>O...SZAPC</tt>
| <tt>ADD AL, imm8</tt>
|
|-
| <tt>ADD AX, imm16</tt>
| <tt>05</tt>
| <tt>00000101</tt>
| 3
| 1
| <tt>O...SZAPC</tt>
| <tt>ADD AW, imm16</tt>
|
|-
| <tt>ADD mem8, imm8</tt>
| <tt>80 rm</tt> / <tt>82 rm</tt>
| <tt>100000.0 oo000mm</tt>
| 3-5
| 3
| <tt>O...SZAPC</tt>
| <tt>ADD mem8, imm8</tt>
|
|-
|}
 
-->


== Links ==
== Links ==

Revision as of 18:18, 2 August 2024

The NEC V30MZ is the CPU component of the WonderSwan SoC.

Unlike the NEC V20/V30 CPU family, the V30MZ is fully compatible with the Intel 80186's documented behaviour, as well as some of its undocumented behaviour (such as the SALC opcode); it also omits the V20/V30's opcode extensions.

The NEC V30MZ datasheet uses distinct names for opcodes and registers (NEC names); as all homebrew compilers and assemblers for the platform utilize Intel's official naming (Intel names), the latter is what the wiki - and most community tooling - has standardized on.

Architecture

For this section, elements of the architecture which have distinct NEC names are provided in the following format: IntelNEC.

Registers

  • Four 16-bit general-purpose registers, with their (low, high) components accessible as individual 8-bit sub-registers:
    • AXAW (AL, AH)
    • BXBW (BL, BH)
    • CXCW (CL, CH)
    • DXDW (DL, DH)
  • Four additional 16-bit registers:
    • SIIX
    • DIIY
    • SP
    • BP
  • Four segment registers:
    • CSPS - code segment,
    • DSDS0 - data segment,
    • ESDS1 - additional data segment,
    • SS - stack segment.
  • IPPC - instruction pointer; instructions are always addressed in the code segment (so as CS:IP far addresses),
  • FLAGSPSW - 16-bit processor flag register.

Flags

15  bit  8  7  bit  0
 ---- ----  ---- ----
 m111 odit  sz0a 0p1c
 |    ||||  || |  | |
 |    ||||  || |  | +- Carry (CF<sup>CY</sup>)
 |    ||||  || |  +--- Parity (PF<sup>P</sup>)
 |    ||||  || +------ Auxillary Carry (AF<sup>AC</sup>)
 |    ||||  |+-------- Zero (Z)
 |    ||||  +--------- Sign (S)
 |    |||+------------ Single Step<sup>Break</sup> (TF<sup>BRK</sup>)
 |    ||+------------- Interrupt Enable (IF<sup>IE</sup>)
 |    |+-------------- Direction (DF<sup>DIR</sup>)
 |    +--------------- Overflow (OF<sup>V</sup>)
 +-------------------- Mode (MD)


Links