カテゴリ 重要度 ステータス 解決状況 登録日時 最終更新
システムコア解決済み修正済み2017-12-24 16:262023-04-09 07:19
 
テスターdrencorxeen担当者tlindnerソースtrs/coco3.cpp
バージョン0.192発生バージョン修正バージョン0.254
修正コミット 5dc861bプルリク #11050
フラグ
セット
セット詳細
 
概 要MC6809オペコード0x104Fの処理が違っている。
詳 細On a real m6809 CPU if you run a opcode of 0x104F the real 6809 will ignore the 0x10 opcode part of the instruction and will process the opcode of 0x4F which on a m6809 is a CLRA.

Please test on coco3, coco1, coco2.
再現手順Created a test assembly language program to load register D with $FFFF, then issue a 6309 instruction CLRD, then after that writing register A and register B to specific memory locations and using basic to peek and print the values should yield a 0 for A and 255 for B, but the m6809 core in MAME ignores both bytes of the CLRD where it should have only ignored the 0x10.

I am including a DSK image for testing.

Steps once disk image is mounted in drive 0:

LOAD"6309.BAS"
RUN
On real CoCo 1, 2, 3 with a real m6809 in it the outputs as follows:
0
255

On emulator outputs:
255
255
追加情報So the 6309 instruction CLRD (0x104F) the (0x10) is ignored on a real m6809 CPU and thus it still processes the (0x4F) part of the instruction and does a CLRA.

I have tested this on a system that does in fact have a real m6809 on it and thus I know in this case how the emulation for the m6809 is not handling this situation correctly.
 
添付ファイルzip file6309.zip (2017-12-24 16:28)
diff filem6809_mame.diff (2017-12-25 03:58)