MicroCoreLabs / Projects

Ted Fried's MicroCore Labs Projects which include microsequencer-based FPGA cores and emulators for the 8088, 8086, 8051, 6502, 68000, Z80, Risc-V, and also Typewriter and EPROM Emulator projects. MCL51, MCL64, MCL65, MCL65+, MCL68, MCL86, MCL86+, MCL86jr, MCLR5, MCLZ8
372 stars 78 forks source link

M68k - wrong MOVE from SR test #6

Open Stovent opened 2 years ago

Stovent commented 2 years ago

Using the MC68000_test_all_opcodes.X68 test rom, the MOVE from SR test does

move #$275A, SR        * Initial value
move SR , d0
cmpi.w #$275A , d0

But from the M68000RPM, on the MOVE from SR instruction

Unimplemented bits are read as zeros.

Since the bit 6 of the SR is unimplemented, the test should compare with $271A instead.

Also this has been proved to be wrong on an actual hardware (Philips CD-i, having a 68000-based CPU) : alt text

About the other instructions that fails on hardware, we are not sure yet why they fails.

About the screenshot : your test ROM has been modified so that when a test fails, instead of doing an infinite loop, it prints the name of the test that fails on the serial port of the console, and continues with the next tests.

MicroCoreLabs commented 2 years ago

Hi,

Thank you for running these tests on a real 68000! I ran them on the Easy68k simulator where they all passed, however I did notice that the simulator results did not always match the 68000 datasheet, so im not surprised that the results aree different on a genuine 68000.

I am happy to see that only four other opocode tests fail, so please let me know what I need to modify in these tests to allow them to pass. My guess would be that the problems are in the handling of the flags.

Thanks again! -Ted


From: Stovent @.> Sent: Sunday, October 24, 2021 10:56 AM To: MicroCoreLabs/Projects @.> Cc: Subscribed @.***> Subject: [MicroCoreLabs/Projects] M68k - wrong MOVE from SR test (Issue #6)

Using the MC68000_test_all_opcodes.X68 test rom, the MOVE from SR test does

move #$275A, SR * Initial value move SR , d0 cmpi.w #$275A , d0

But from the M68000RPM, on the MOVE from SR instruction

Unimplemented bits are read as zeros.

Since the bit 6 of the SR is unimplemented, the test should compare with $271A instead.

Also this has been proved to be wrong on an actual hardware (Philips CD-i, having a 68000-based CPU) : [alt text]https://camo.githubusercontent.com/32a2b3b8126cea4ad86da3b39d69c0844f8e9e9bf3fd0b505e87756bacfc08de/68747470733a2f2f6d656469612e646973636f72646170702e6e65742f6174746163686d656e74732f3739373137303534323735383036383238342f3837323632343431323332353732343230302f756e6b6e6f776e2e706e67

About the other instructions that fails on hardware, we are not sure yet why they fails.

— You are receiving this because you are subscribed to this thread. Reply to this email directly, view it on GitHubhttps://github.com/MicroCoreLabs/Projects/issues/6, or unsubscribehttps://github.com/notifications/unsubscribe-auth/AM4AVEO2ZYMVTLT326XPVUDUIRCEXANCNFSM5GTWDX4A. Triage notifications on the go with GitHub Mobile for iOShttps://apps.apple.com/app/apple-store/id1477376905?ct=notification-email&mt=8&pt=524675 or Androidhttps://play.google.com/store/apps/details?id=com.github.android&referrer=utm_campaign%3Dnotification-email%26utm_medium%3Demail%26utm_source%3Dgithub.

roberttylka commented 2 years ago

Hi, I think the Init value used to check MOVE_From_SR should not set biftields permanently set to zero in the source registry.

image