misc/isXEiJ.s
;========================================================================================
; isXEiJ.s
; Copyright (C) 2003-2024 Makoto Kamada
;
; This file is part of the XEiJ (X68000 Emulator in Java).
; You can use, modify and redistribute the XEiJ if the conditions are met.
; Read the XEiJ License for more details.
; https://stdkmd.net/xeij/
;========================================================================================
;----------------------------------------------------------------
;
; isXEiJ.x
; XEiJ上で動作しているか調べます。
;
; 最終更新
; 2024-08-08
;
; 作り方
; has060 -i include -o isXEiJ.o -w isXEiJ.s
; lk -o isXEiJ.x isXEiJ.o
;
; 使い方
; >isXEiJ
;
; 終了コード
; 0 XEiJではない
; 1 XEiJ
;
;----------------------------------------------------------------
.include doscall.mac
;XEiJか調べる
;>d0.l:0=XEiJではない,1=XEiJ
_isXEiJ::
clr.l -(sp) ;書き込む場所
move.w #4,-(sp) ;サイズ。ロングワード
pea.l 2(sp) ;書き込むアドレス。書き込む場所
move.l #$00E9F03C,-(sp) ;読み出すアドレス。HFSのROMの末尾
DOS _BUS_ERR ;ROMの内容をコピーする
lea.l 10(sp),sp
cmpi.l #'JHFS',(sp)+ ;確認する
seq.b -(sp) ;$00=読み出せなかった/不一致,$FF=一致
moveq.l #1,d0
and.b (sp)+,d0 ;0=XEiJではない,1=XEiJ
rts
;開始位置
start:
;空白を読み飛ばす
addq.l #1,a2 ;a2=コマンドライン
moveq.l #0,d0
10: move.b (a2)+,d0
beq 20f ;引数がない。XEiJか調べる
cmpi.b #' ',d0
beq 10b
cmpi.b #9,d0
beq 10b
bra 40f ;文法エラー。使用法を表示して終了
;XEiJか調べる
20: bsr _isXEiJ
;結果を表示して終了コードで返す
move.w d0,-(sp) ;0=XEiJではない,1=XEiJ
lea.l no(pc),a0 ;XEiJではありません
beq 30f
lea.l yes(pc),a0 ;XEiJです
30: move.l a0,-(sp) ;XEiJではありません/XEiJです
DOS _PRINT
addq.l #4,sp
DOS _EXIT2
;使用法を表示して終了する
40: pea.l usage(pc) ;使用法
DOS _PRINT
move.w #-1,(sp)
DOS _EXIT2
usage: .dc.b 'isXEiJ.x',13,10
.dc.b ' XEiJか調べます',13,10
.dc.b ' 使用法: isXEiJ',13,10
.dc.b ' 終了コード: 0=XEiJではない 1=XEiJ',13,10,0
no: .dc.b 'XEiJではありません',13,10,0
yes: .dc.b 'XEiJです',13,10,0
.end start