[J-core] qemu updates / roadmap
chrisfriedt at gmail.com
Sun May 15 11:00:45 EDT 2016
On Sat, May 14, 2016 at 10:50 PM, D. Jeff Dionne
<Jeff at se-instruments.com> wrote:
> On May 15, 2016, at 9:10, Christopher Friedt <chrisfriedt at gmail.com> wrote:
>> I actually had to disable CONFIG_CPU_TESTS because otherwise I was getting stuck in _fail.
> That is not necessarily ok to do. While there are a few instructions that will not be available unless you've coded support for them, tests for those (and maybe it's only CAS.L actually) should be #ifdef out and the rest shown to pass. The easiest way to do that is to bring the LED port out to a console print (in qemu) and see where it stops. The tests count in BCD, the top 4 bits are the instruction 'group' and the lower 4 the test number in the group. I would want to know at least which instruction is failing, (other than CAS.L).
It looks like the error is actually arithmetic in nature, because the
branch to _fail happens (below) at 0x32aa. I've verified that's the
case by using a source-unmodified version of boot.bin / boot.elf
compiled with the suggested bare-metal toolchain, as well as using my
previously supplied patches (that allow me to compile / test on Mac).
0x3290 <_pfail> .word 0x0000
0x3292 <_pfail+2> sub r2,r6
0x3294 <_testgo> mov #-117,r0
0x3296 <_testgo+2> mov.l 0x3610 <_pram0>,r1 ! 0x6594 <_ram0+128>
0x3298 <_testgo+4> mov.l r0, at r1
0x329a <_testgo+6> nop
0x329c <_testgo+8> bra 0x32a0 <_bracont>
0x329e <_testgo+10> mov.l @r1,r2
0x32a0 <_bracont> mov #-4,r1
0x32a2 <_bracont+2> and r1,r2
0x32a4 <_bracont+4> mov r2,r0
0x32a6 <_bracont+6> cmp/eq #-120,r0
0x32a8 <_bracont+8> bt 0x32ae <_bracont+14>
0x32aa <_bracont+10> jmp @r13
0x32ac <_bracont+12> nop
What it boils down to, is
-117 (r0) & -4 (r2) != -120 (r2)
This op actually results in r2 containing a value of 0, which would
imply that the ALU ops for SH in Qemu need a bit of love.
> During the debug of the CPU, this is/was fundamental to being able to tell exactly -what- wasn't/isn't working quite right. It tries to check for corner cases, etc. There is a pretty good chance if you can get to 0110 0010 test passing, you can call the CPU emulation 'good' and assume any problems are likely elsewhere.
More information about the J-core