Cool. This should be useful for homebrew projects and the like; I'll have to save a copy as an HTML file once it's definitively finished.
Some things I'd like to point out, though:
- Doesn't XCN switch the nybbles of A (for example, MOV A,#$5A : XCN would result in A = #$A5)? If it works as you said (basically a single-byte EOR #$FF)...well, then it's misnamed.
- Don't opcodes that specify a certain bit of an operand but have only one hex value—such as MOV1 c,$0000.3—only work for ARAM addresses $0000-$1FFF? Since 3 bits of the operand are used to specify which bit is affected, then only 13 bits are left for the address itself.
- I believe TCALL uses one of 16 2-byte pointers starting at $FFDE and going backward to determine which address to call. So TCALL 0 would be equal to CALL [$FFDE], TCALL 1 = CALL [$FFDC], ... TCALL 15 = CALL [$FFC0]. This would be useful for commonly-used subroutines; in SMW, $0697 and that one in $12xx come to mind.
- It might be worth noting that another way of writing BBS1 $12.3 (or any similar opcode) is BBS3 $12, with the bit number replacing the "1". In fact, the "1" shouldn't even need to be there when the operand is specifying the bit. I think the current version of Asar doesn't support this, but 1.30 should.
- "On power on, all three TnOUT have the value $F. On reset, they are $0." <-- ...? You mean #$FF and #$00, or #$0F and #$00?
----------------
I'm working on a hack! Check it out
here. Progress: 64/95 levels.