土曜はひさびさに、朝11時に早起き(早起きというのか?)したので、近所の書店に Interface の 12月号を買いに出かける。ついに SilentMoon の BIOS コールの仕様が公開されたが、InitAd や GetAd などの付録基板依存なサービスコールは公開されていなかった。そこで SilentC.bin をディスアセして BIOS エントリーテーブルを確認した所、やっぱり別実装になっていたっぽいので自作してみた。
.cpu 5200
InitAd:
;----------------------------------
; in void
; out void
;----------------------------------
subq.l #2*4,sp
movem.l d0/a0,(sp)lea.l $40100000,a0
move.b $000e(a0),d0
andi.l #$F9,d0
move.b d0,$000e(a0)move.b $0026(a0),d0
ori.l #$06,d0
move.b d0,$0026(a0) ;DDRTAmoveq.l #$70,d0 ;強制的に 4,5,6ポートを使う
move.b d0,$006a(a0) ;PANPARlea.l $40190000,a0
move.w $0052(a0),d0
andi.l #$FFFC,d0
move.w d0,$0052(a0)moveq.l #$03,d0
move.w d0,$0002(a0)moveq.l #$00,d0
move.w d0,$0000(a0)movem.l (sp),d0/a0
addq.l #2*4,sp
rtsGetAd:
;----------------------------------
; in d0.l = Port No.(4〜6)
; out d0.l = ADC Param(0〜4095)
;----------------------------------
subq.l #2*4,sp
movem.l d1/a0,(sp)lea.l $40190000,a0
move.w (a0),d1
ori.l #$2000,d1
move.w d1,(a0)add.l d0,d0
move.w $0012(a0,d0.l),d0
lsr.l #3,d0
andi.l #4095,d0movem.l (sp),d1/a0
addq.l #2*4,sp
rts
一応、動いているっぽいので、よしとしよう。