よくよく考えたのですが、OS_LoadContext で CPSR の値をコンテキストから復帰させたと きに thumb/arm モードも切り替わってしまうので、arm 前提でかかれている現在の OS_LoadContext は、thumb に切り替わった瞬間に暴走してしまいます. CPSR と PC の書き換えを同一命令で行なう必要があります.なので面倒でも一旦 irq モ ードなどにきりかえたあとで movs 命令を使うように修正しなければなりません.
>irq モードなどにきりかえたあとで movs 命令を使うように irqモードにソフトウェアで強引に切り替えるようにしましたが この方法を用いて良いかを中島君に確認します。 というわけで状態を作業中に。
> irqモードにソフトウェアで強引に切り替えるようにしましたが > この方法を用いて良いかを中島君に確認します。 > というわけで状態を作業中に。 CPSRのモードビットを弄ってモードを切り替えてもいいようです。 あとは「^」によるユーザレジスタアクセスという、エミュレータの修正待ちですね。
> あとは「^」によるユーザレジスタアクセス はすでに対応されています。 スタックに積まれるPCが4バイト先というトラップも掻い潜って、 IRQでのコンテキストスイッチも動作します。 しかしSVCモードに入ってからスレッドが切り替わった場合に不都合があります。 SVCのスタックを現在のスレッドのスタックに積むという案が出ており、 その方向で作業を進めます。