お高い身体(CPU)を思うぞんぶん開発し放題風味(2)

で、昨日は思わず報われない作業に走ってしまったわけですが、よく考えたらほんとうに必要だった部分は10分で入力可能だったことに今日気付いたのでした。


; chkfpu.com
;
; MASM 3.0 以上、もしくは ArrowASM でどうぞ

.8087

_TEXT SEGMENT BYTE PUBLIC 'CODE'
ASSUME cs:_TEXT, ds:_TEXT
ORG 100h
;
; インテルのマニュアルに載ってる FPU タイプ検出コード
;
start:
finit
fld1 ; +INF 作成 (1.0 / 0)
fldz
fdiv
fld st ; -INF 作成 (+INF を符号反転)
fchs
fcompp ; 8087(287) だと +INF と -INF の
fstsw [status] ; 区別がつかないらしい
mov ax, [status]
mov dx, offset msgFPU87
sahf
jz msgout
mov dx, offset msgFPU387
msgout:
mov ah, 9
int 21h
mov ax, 4c00h
int 21h

msgFPU87 db '8087(287) っぽい…?', 13, 10, '$'
msgFPU387 db 'たぶん 387(以上)の FPU だと思う', 13, 10, '$'
status dw 1 dup (?)

_TEXT ENDS
END start

そして bochs 2.1.1 での実行結果。

いつだったか bochs-developers メーリングリストに流れていた「コプロが 287 だとか言われて起動しなかった(何がだっけ…ひょっとして OS/2 だったか?)」という投稿がやはり正しかったのか。
てゆうか bochs の fpu 周りってのも結構胡乱な気がする。最近いろいろやってるらしいのでそこはかとなく期待してはおりますが…

めも