カテゴリ | 重要度 | ステータス | 解決状況 | 登録日時 | 最終更新 |
---|---|---|---|---|---|
![]() | 中 | 解決済み | 修正済み | 2013-08-09 10:50 | 2013-08-12 11:30 |
テスター | Robert Gault | 担当者 | Bletch | ソース | trs/coco3.cpp |
バージョン | 0.149u1 | 発生バージョン | 修正バージョン | ||
修正コミット | プルリク | ||||
フラグ | |||||
セット | |||||
セット詳細 | |||||
概 要 | Hitachi 6309のオペーコードのうち、少なくともmuldが動作していない。 | ||||
詳 細 | At least one opcode for the Hitachi 6309 is not working, muld. There may be others but I have not done testing. This could make NitrOS-9 6309 systems fail to function. | ||||
再現手順 | Run some program that will permit creating assembly language code. It might be possible to do this with the MESS debugger. A simple test program follows. start ldd #$10 muld #$1234 swi The swi is the equivalent of a breakpoint. Check the registers after the muld instruction. They should be regA =0 regB=1 regE=$23 regF=$40 The actual binary code for this program is $CC,$00,$11,$8F,$12,$34,$3f | ||||
追加情報 | There are many other addressing modes for the muld opcode and they all fail. ex muld 1,y muld address The instuction should multiply the 16-bit content of regD by a 16-bit number and store the 32-bit result in regQ which consists of regA regB regE regF. Now the one big problem is that this instruction, divd, and divq is that they are twos complement signed operations. That means for large numbers, the results are not usable. Generally one needs to insure that there is no overflow and that the numbers stay positive. Older versions of MESS worked correctly. I believe this should addressed in mess\src\emu\cpu\m6809\ where one of h6309.c h6309.h or h6309.ops, but I'm not sure just what code is used in coco3h emulation. | ||||
添付ファイル |