movem ISA was wrong regarding movem.w <ea>,<registerlist> (sign extends registers).
Changed Register Flow Documentation wording from 'reads' to 'uses' and from 'modifies' to 'changes'. Updated screenshot. Added another test case for M68kRegisterFlowDocumentationProviderTest.
This commit is contained in:
parent
954f42bf63
commit
eb26793a20
15
README.md
15
README.md
@ -2,7 +2,7 @@
|
||||
|
||||
_MC68000 Assembly Language Plugin_ is plugin for Jetbrains IDEs (CLion, IntelliJ, etc.).
|
||||
|
||||
![Example Syntax Highlighting](docs/syntaxhighlighting.png "Example Syntax Highlighting")
|
||||
![Example IDE Screenshot](docs/example.png "Example IDE Screenshot")
|
||||
|
||||
## Purpose
|
||||
|
||||
@ -19,13 +19,13 @@ awesome features and is pretty advanced. Check it out. You can install both plug
|
||||
|
||||
Big kudos to Yann -- a few features were _inspired_ by his code.
|
||||
|
||||
My plugin, on the other hand, is still pretty basic and is the result of about two weeks of work. I released a really early first version it because I think
|
||||
it's "good enough" to get started, and I can return to demo coding with its current state.
|
||||
My plugin, on the other hand, is still pretty basic and is the result of a few weeks of work. I released a really early first version it because I think it's "
|
||||
good enough" to get started, and I can return to demo coding with its current state.
|
||||
|
||||
## Features
|
||||
|
||||
- Parser / Lexer for MC68000 (yes, only 68000 right now!) assembly language files in VAsm / DevPac style
|
||||
- Inspection for validating the syntax the 68000 ISA.
|
||||
- Inspection for validating the syntax of the 68000 ISA.
|
||||
- Syntax highlighting and Color Settings Page (you should really modify the color settings to your likings!)
|
||||
- Mnemonics code completion
|
||||
- Symbols / Labels / Macros code completion
|
||||
@ -46,7 +46,7 @@ it's "good enough" to get started, and I can return to demo coding with its curr
|
||||
- While the Lexer supports the -spaces option (where a space introduces a comment), this cannot be configured yet (default is off).
|
||||
- No support for other processor instructions, FPU or 68020+ address modes.
|
||||
- Unit Test coverage is not as good as it could be (ahem).
|
||||
- `opt` keyword needs special treatment and will currently show a parsing error
|
||||
- `opt` keyword needs special treatment and will currently show a parsing error.
|
||||
- Missing but planned features:
|
||||
- Macro evaluation on invocation
|
||||
- Folding
|
||||
@ -71,6 +71,11 @@ make it work with JUnit 5. Feel free to use the code (in package ```de.platon42.
|
||||
|
||||
## Changelog
|
||||
|
||||
### V0.5 (unreleased)
|
||||
|
||||
- Bugfix: `movem` ISA was wrong regarding the `movem.w <ea>,<registerlist>` (sign extends registers).
|
||||
- Cosmetics: Changed Register Flow Documentation wording from _reads_ to _uses_ and from _modifies_ to _changes_.
|
||||
|
||||
### V0.4 (03-Aug-21)
|
||||
|
||||
- Notice: Due to major new API use, this plugin no longer works on IDEs >=2019.3.1, but rather requires >=2020.3.
|
||||
|
15
build.gradle
15
build.gradle
@ -7,7 +7,7 @@ plugins {
|
||||
}
|
||||
|
||||
group = 'de.platon42'
|
||||
version = '0.4'
|
||||
version = '0.5'
|
||||
sourceCompatibility = "1.8"
|
||||
targetCompatibility = "1.8"
|
||||
|
||||
@ -57,6 +57,11 @@ runPluginVerifier {
|
||||
|
||||
patchPluginXml {
|
||||
setChangeNotes("""
|
||||
<h4>V0.5 (unreleased)</h4>
|
||||
<ul>
|
||||
<li>Bugfix: movem ISA was wrong regarding movem.w <ea>,<registerlist> (sign extends registers).
|
||||
<li>Cosmetics: Changed Register Flow Documentation wording from 'reads' to 'uses' and from 'modifies' to 'changes'.
|
||||
</ul>
|
||||
<h4>V0.4 (03-Aug-21)</h4>
|
||||
<ul>
|
||||
<li>Notice: Due to major new API use, this plugin no longer works on IDEs >=2019.3.1, but rather requires >=2020.3.
|
||||
@ -82,14 +87,6 @@ patchPluginXml {
|
||||
<li>Compatibility: Restored compatibility with IDE versions < 2021.1.
|
||||
<li>Performance: Optimized lexer.
|
||||
</ul>
|
||||
<h4>V0.2 (27-Jul-21)</h4>
|
||||
<ul>
|
||||
<li>Cosmetics: Added (same) icon for plugin as for file type.
|
||||
<li>Performance: Use Word-Index for global labels and symbols instead of iterating over the file.
|
||||
<li>Performance: Use Stub-Index for global labels and symbols.
|
||||
<li>Bugfix: No longer reports a syntax error when file lacks terminating End-Of-Line.
|
||||
<li>Enhancement: Registers are now offered for code completion, making editing less annoying.
|
||||
</ul>
|
||||
<p>Full changelog available at <a href="https://github.com/chrisly42/mc68000-asm-plugin#changelog">Github project site</a>.</p>
|
||||
""")
|
||||
}
|
||||
|
BIN
docs/example.png
Normal file
BIN
docs/example.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 74 KiB |
Binary file not shown.
Before Width: | Height: | Size: 91 KiB |
@ -283,7 +283,7 @@ object M68kIsa {
|
||||
),
|
||||
setOf(AddressMode.REGISTER_LIST, AddressMode.ADDRESS_REGISTER_DIRECT, AddressMode.DATA_REGISTER_DIRECT),
|
||||
OP_SIZE_WL,
|
||||
modInfo = RWM_READ_OP1_OPSIZE or RWM_SET_OP2_OPSIZE
|
||||
modInfo = RWM_READ_OP1_OPSIZE or RWM_SET_OP2_L
|
||||
),
|
||||
// according to Yann, specifying the registers as bitmask is also valid
|
||||
AllowedAdrMode(
|
||||
|
@ -189,12 +189,12 @@ class M68kRegisterFlowDocumentationProvider : AbstractDocumentationProvider() {
|
||||
|
||||
private fun rwmToDisplayText(rwm: Int, rn: String) =
|
||||
when (rwm) {
|
||||
RWM_READ_B -> "reads $rn.b"
|
||||
RWM_READ_W -> "reads $rn.w"
|
||||
RWM_READ_L -> "reads $rn.l"
|
||||
RWM_MODIFY_B -> "modifies $rn.b"
|
||||
RWM_MODIFY_W -> "modifies $rn.w"
|
||||
RWM_MODIFY_L -> "modifies $rn.l"
|
||||
RWM_READ_B -> "uses $rn.b"
|
||||
RWM_READ_W -> "uses $rn.w"
|
||||
RWM_READ_L -> "uses $rn.l"
|
||||
RWM_MODIFY_B -> "changes $rn.b"
|
||||
RWM_MODIFY_W -> "changes $rn.w"
|
||||
RWM_MODIFY_L -> "changes $rn.l"
|
||||
RWM_SET_B -> "sets $rn.b"
|
||||
RWM_SET_W -> "sets $rn.w"
|
||||
RWM_SET_L -> "sets $rn.l"
|
||||
|
@ -11,7 +11,7 @@ import org.junit.jupiter.api.extension.ExtendWith
|
||||
internal class M68kRegisterFlowDocumentationProviderTest : AbstractDocumentationProviderTest() {
|
||||
|
||||
@Test
|
||||
internal fun check_documentation_for_a_register_in_code_flow(@MyFixture myFixture: CodeInsightTestFixture) {
|
||||
internal fun check_documentation_for_a_read_register_in_code_flow(@MyFixture myFixture: CodeInsightTestFixture) {
|
||||
myFixture.configureByText(
|
||||
"documentme.asm", """
|
||||
label
|
||||
@ -34,7 +34,7 @@ nextlabel
|
||||
assertThat(generateDocumentation(myFixture))
|
||||
.isEqualToIgnoringWhitespace(
|
||||
"""
|
||||
<div class="definition">move instruction reads d0.w</div>
|
||||
<div class="definition">move instruction uses d0.w</div>
|
||||
<table class="sections" style="padding-left: 8pt; padding-right: 8pt">
|
||||
<tr>
|
||||
<td valign="top"> </td>
|
||||
@ -44,7 +44,7 @@ nextlabel
|
||||
<tr>
|
||||
<td valign="top"> </td>
|
||||
<td valign="top"><code>add.w #1,<font color="#ffc800">d0</font></code></td>
|
||||
<td valign="top"> ; modifies d0.w</td>
|
||||
<td valign="top"> ; changes d0.w</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td valign="top"> </td>
|
||||
@ -56,7 +56,7 @@ nextlabel
|
||||
<tr>
|
||||
<td valign="top"> </td>
|
||||
<td valign="top"><code>move.w <font color="#ffc800">d0</font>,d1</code></td>
|
||||
<td valign="top"> ; reads d0.w</td>
|
||||
<td valign="top"> ; uses d0.w</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td valign="top"> </td>
|
||||
@ -66,7 +66,7 @@ nextlabel
|
||||
<tr>
|
||||
<td valign="top"> </td>
|
||||
<td valign="top"><code>addq.b #1,<font color="#ffc800">d0</font></code></td>
|
||||
<td valign="top"> ; modifies d0.b</td>
|
||||
<td valign="top"> ; changes d0.b</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td valign="top">--></td>
|
||||
@ -76,7 +76,7 @@ nextlabel
|
||||
<tr>
|
||||
<td valign="top"> </td>
|
||||
<td valign="top"><code>move.l <font color="#ffc800">d0</font>,d2</code></td>
|
||||
<td valign="top"> ; reads d0.l</td>
|
||||
<td valign="top"> ; uses d0.l</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td valign="top"> </td>
|
||||
@ -96,7 +96,88 @@ nextlabel
|
||||
<td valign="top"> ; <font color="#00ff00">sets d0.l</font></td>
|
||||
</tr>
|
||||
</table>
|
||||
""".trimIndent()
|
||||
"""
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
internal fun check_documentation_for_a_written_register_in_code_flow(@MyFixture myFixture: CodeInsightTestFixture) {
|
||||
myFixture.configureByText(
|
||||
"documentme.asm", """
|
||||
label
|
||||
moveq.l #0,d0
|
||||
add.w #1,d0
|
||||
move.l d1,-(sp)
|
||||
move.w d0,d1
|
||||
move.b d2,d0
|
||||
addq.b #1,d0
|
||||
move.w d0,d<caret>1
|
||||
move.l d0,d2
|
||||
move.w d1,d2
|
||||
clr.b d0
|
||||
moveq.l #0,d0
|
||||
move.l (sp)+,d1
|
||||
rts
|
||||
nextlabel
|
||||
"""
|
||||
)
|
||||
assertThat(generateDocumentation(myFixture))
|
||||
.isEqualToIgnoringWhitespace(
|
||||
"""
|
||||
<div class="definition">move instruction sets d1.w</div>
|
||||
<table class="sections" style="padding-left: 8pt; padding-right: 8pt">
|
||||
<tr>
|
||||
<td colspan="3" valign="top"><b>label</b></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td valign="top"> </td>
|
||||
<td valign="top"><code>move.l <font color="#ffc800">d1</font>,-(sp)</code></td>
|
||||
<td valign="top"> ; uses d1.l</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td valign="top"> </td>
|
||||
<td valign="top"><code>move.w d0,<font color="#ffc800">d1</font></code></td>
|
||||
<td valign="top"> ; sets d1.w</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td valign="top"> </td>
|
||||
<td valign="top">
|
||||
<div class="grayed">[...]</div>
|
||||
</td>
|
||||
<td valign="top"> </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td valign="top">--></td>
|
||||
<td valign="top"><b><code>move.w d0,<font color="#ffc800">d1</font></code></b></td>
|
||||
<td valign="top"> ; <--</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td valign="top"> </td>
|
||||
<td valign="top">
|
||||
<div class="grayed">[...]</div>
|
||||
</td>
|
||||
<td valign="top"> </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td valign="top"> </td>
|
||||
<td valign="top"><code>move.w <font color="#ffc800">d1</font>,d2</code></td>
|
||||
<td valign="top"> ; uses d1.w</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td valign="top"> </td>
|
||||
<td valign="top">
|
||||
<div class="grayed">[...]</div>
|
||||
</td>
|
||||
<td valign="top"> </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td valign="top"> </td>
|
||||
<td valign="top"><code>move.l (sp)+,<font color="#ffc800">d1</font></code></td>
|
||||
<td valign="top"> ; <font color="#00ff00">sets d1.l</font></td>
|
||||
</tr>
|
||||
</table>
|
||||
"""
|
||||
)
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user