parser: DMA memory src/dst arguments update CTn
This means that they are more appropriately named MCn rather than Mn.
This commit is contained in:
parent
9e880d6039
commit
c13b1b2466
21
README.rst
21
README.rst
@ -32,34 +32,29 @@ not cover 100% of the possible SCU DSP instructions or arguments.
|
|||||||
Differences that affect source code
|
Differences that affect source code
|
||||||
===================================
|
===================================
|
||||||
|
|
||||||
MC0-MC3 must not appear in in DMA source/destination arguments
|
M0-M3 must not appear in in DMA source/destination arguments
|
||||||
--------------------------------------------------------------
|
------------------------------------------------------------
|
||||||
|
|
||||||
For example, the following are not legal:
|
For example, the following are not legal:
|
||||||
|
|
||||||
.. code::
|
.. code::
|
||||||
|
|
||||||
DMA D0,MC0,#$02
|
DMA D0,M0,#$02
|
||||||
DMA MC1,D0,#$02
|
DMA M1,D0,#$02
|
||||||
|
|
||||||
Instead, they should be written as:
|
Instead, they should be written as:
|
||||||
|
|
||||||
.. code::
|
.. code::
|
||||||
|
|
||||||
DMA D0,M0,#$02
|
DMA D0,MC0,#$02
|
||||||
DMA M1,D0,#$02
|
DMA MC1,D0,#$02
|
||||||
|
|
||||||
``dspasm.exe`` generates the same code given either the former or
|
``dspasm.exe`` generates the same code given either the former or
|
||||||
latter example as input. scu-dsp-asm, however, rejects the former
|
latter example as input. scu-dsp-asm, however, rejects the former
|
||||||
example as invalid: it misleads what the result of the operation is.
|
example as invalid: it misleads what the result of the operation is.
|
||||||
|
|
||||||
This change is consistent with what is written in the SCU manual
|
This change is not consistent with what is written in the SCU manual
|
||||||
(ST-97-R5-072694), but is inconsistent with SEGA's SCU DSP examples.
|
(ST-97-R5-072694).
|
||||||
|
|
||||||
.. note::
|
|
||||||
|
|
||||||
It is currently unclear which of the two is correct. A future
|
|
||||||
version of scu-dsp-asm may change this behavior.
|
|
||||||
|
|
||||||
Differences that affect code generation
|
Differences that affect code generation
|
||||||
=======================================
|
=======================================
|
||||||
|
16
parser.cpp
16
parser.cpp
@ -464,10 +464,10 @@ static dma::add_mode_t dma_add(const token_t& token)
|
|||||||
dma::src_t parser_t::dma_src()
|
dma::src_t parser_t::dma_src()
|
||||||
{
|
{
|
||||||
switch (advance().type) {
|
switch (advance().type) {
|
||||||
case _m0: return dma::src_t::m0;
|
case _mc0: return dma::src_t::mc0;
|
||||||
case _m1: return dma::src_t::m1;
|
case _mc1: return dma::src_t::mc1;
|
||||||
case _m2: return dma::src_t::m2;
|
case _mc2: return dma::src_t::mc2;
|
||||||
case _m3: return dma::src_t::m3;
|
case _mc3: return dma::src_t::mc3;
|
||||||
default:
|
default:
|
||||||
throw error(previous(), "expected dma source operand");
|
throw error(previous(), "expected dma source operand");
|
||||||
}
|
}
|
||||||
@ -476,10 +476,10 @@ dma::src_t parser_t::dma_src()
|
|||||||
dma::dst_t parser_t::dma_dst()
|
dma::dst_t parser_t::dma_dst()
|
||||||
{
|
{
|
||||||
switch (advance().type) {
|
switch (advance().type) {
|
||||||
case _m0: return dma::dst_t::m0;
|
case _mc0: return dma::dst_t::mc0;
|
||||||
case _m1: return dma::dst_t::m1;
|
case _mc1: return dma::dst_t::mc1;
|
||||||
case _m2: return dma::dst_t::m2;
|
case _mc2: return dma::dst_t::mc2;
|
||||||
case _m3: return dma::dst_t::m3;
|
case _mc3: return dma::dst_t::mc3;
|
||||||
case _prg: return dma::dst_t::prg;
|
case _prg: return dma::dst_t::prg;
|
||||||
default:
|
default:
|
||||||
throw error(previous(), "expected dma destination operand");
|
throw error(previous(), "expected dma destination operand");
|
||||||
|
16
stmt.hpp
16
stmt.hpp
@ -379,10 +379,10 @@ static uint32_t src_bits(src_t src)
|
|||||||
using enum src_t;
|
using enum src_t;
|
||||||
|
|
||||||
switch (src) {
|
switch (src) {
|
||||||
case m0 : return 0b000 << 8;
|
case mc0: return 0b000 << 8;
|
||||||
case m1 : return 0b001 << 8;
|
case mc1: return 0b001 << 8;
|
||||||
case m2 : return 0b010 << 8;
|
case mc2: return 0b010 << 8;
|
||||||
case m3 : return 0b011 << 8;
|
case mc3: return 0b011 << 8;
|
||||||
default: __builtin_unreachable();
|
default: __builtin_unreachable();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -392,10 +392,10 @@ static uint32_t dst_bits(dst_t dst)
|
|||||||
using enum dst_t;
|
using enum dst_t;
|
||||||
|
|
||||||
switch (dst) {
|
switch (dst) {
|
||||||
case m0 : return 0b000 << 8;
|
case mc0: return 0b000 << 8;
|
||||||
case m1 : return 0b001 << 8;
|
case mc1: return 0b001 << 8;
|
||||||
case m2 : return 0b010 << 8;
|
case mc2: return 0b010 << 8;
|
||||||
case m3 : return 0b011 << 8;
|
case mc3: return 0b011 << 8;
|
||||||
case prg: return 0b100 << 8;
|
case prg: return 0b100 << 8;
|
||||||
default: __builtin_unreachable();
|
default: __builtin_unreachable();
|
||||||
}
|
}
|
||||||
|
@ -72,11 +72,11 @@ enum struct add_mode_t {
|
|||||||
};
|
};
|
||||||
|
|
||||||
enum struct src_t {
|
enum struct src_t {
|
||||||
m0, m1, m2, m3
|
mc0, mc1, mc2, mc3,
|
||||||
};
|
};
|
||||||
|
|
||||||
enum struct dst_t {
|
enum struct dst_t {
|
||||||
m0, m1, m2, m3,
|
mc0, mc1, mc2, mc3,
|
||||||
prg,
|
prg,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -113,17 +113,17 @@ const std::string add_mode_string[] = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
const std::string src_string[] = {
|
const std::string src_string[] = {
|
||||||
[i(src_t::m0)] = "m0",
|
[i(src_t::mc0)] = "mc0",
|
||||||
[i(src_t::m1)] = "m1",
|
[i(src_t::mc1)] = "mc1",
|
||||||
[i(src_t::m2)] = "m2",
|
[i(src_t::mc2)] = "mc2",
|
||||||
[i(src_t::m3)] = "m3"
|
[i(src_t::mc3)] = "mc3"
|
||||||
};
|
};
|
||||||
|
|
||||||
const std::string dst_string[] = {
|
const std::string dst_string[] = {
|
||||||
[i(dst_t::m0 )] = "m0",
|
[i(dst_t::mc0)] = "mc0",
|
||||||
[i(dst_t::m1 )] = "m1",
|
[i(dst_t::mc1)] = "mc1",
|
||||||
[i(dst_t::m2 )] = "m2",
|
[i(dst_t::mc2)] = "mc2",
|
||||||
[i(dst_t::m3 )] = "m3",
|
[i(dst_t::mc3)] = "mc3",
|
||||||
[i(dst_t::prg)] = "prg",
|
[i(dst_t::prg)] = "prg",
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user