1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

PC-98x1のXMS情報をアセンブラで取得する

Last updated at Posted at 2018-07-18

PC-98x1でのXMS情報をアセンブラで取得する

xms.asm はじめのバージョン

code	segment
        assume cs:code, ds:code
        org 100h
	
cr	equ	0dh
lf	equ	0ah

start:	jmp is_xms

m_nai	db	'XMSドライバは存在しません。',cr,lf,'$'
m_aru	db	'XMSドライバが存在します。',cr,lf,'$'
m_a20ok	db	'A20は有効になっています。',cr,lf,'$'
m_a20ng	db	'A20は無効です。',cr,lf,'$'
m_a20	db	'A20を有効化します。',cr,lf,'$'
m_a20n	db	'A20を有効化できませんでした。',cr,lf,'$'
m_hmaok	db	'HMAが存在します。',cr,lf,'$'
m_hmang	db	'HMAは存在しません。',cr,lf,'$'

is_xms:
	mov	ax, 4300h	; mov ah=43h,mov al=00hでも同じ
	int	2fh
	
    cmp	al,80h
	jz	xms_aru
	mov	dx,offset m_nai
	jmp	disp

xms_aru:
	mov	dx,offset m_aru

disp:	mov	ah,09h
	int	21h
	
is_hma:
	mov	ah,00h
	int	2fh
	
    cmp	dx,01h
	jz	hma_aru
	mov	dx,offset m_hmang
	jmp	hma

hma_aru:
	mov	dx,offset m_hmaok

hma:
	mov	ah,09h
	int	21h

is_a20:
	mov	ah, 07h
	int	2fh

    cmp	ax, 01h
	jz	a20_aru
                             ;A20無効の場合
	mov	dx, offset m_a20ng   ;無効の表示
	mov	ah,09h
	int	21h

    mov	dx, offset m_a20
	mov	ah,09h
	int	21h

    mov	ah,05h               ;A20を有効化
	int	2fh

    cmp	ax,01h               ;有効化できたら
	jz	a20_aru              ;a20_aruにジャンプ
	mov	dx, offset m_a20n
	jmp	disp_a20

a20_aru:
	mov	dx, offset m_a20ok
	jmp	disp_a20

disp_a20:
	mov	ah, 09h
	int	21h

mov	ah,4ch
int	21h

code	ends
end start

PC-9821Cx(i486)で作りました。

xms.asm 次のバージョン

で,作り直し。
(どこが変わったか分かりづらくてすいません。

code	segment
	assume cs:code, ds:code
	org 100h
	
cr	equ	0dh
lf	equ	0ah

start:	jmp is_xms

m_nai	db	'XMSドライバは存在しません。',cr,lf,'$'
m_aru	db	'XMSドライバが存在します。',cr,lf,'$'
m_a20ok	db	'A20は有効です。',cr,lf,'$'
m_a20ng	db	'A20は無効です。',cr,lf,'$'
m_a20	db	'A20を有効化します。',cr,lf,'$'
m_a20activeok	db	'A20を有効化しました。',cr,lf,'$'
m_a20activeng	db	'A20を有効化できませんでした。',cr,lf,'$'
m_hmaok	db	'HMAに16byte要求し成功しました。',cr,lf,'$'
m_hmang	db	'HMAに16byte要求し失敗しました。',cr,lf,'$'

is_xms:
	mov	ax, 4300h	; mov ah=43h,mov al=00hでも同じ
	int	2fh
	
	cmp	al,80h
	jz	xms_aru
	mov	dx,offset m_nai
	jmp	disp

xms_aru:
	mov	dx,offset m_aru
	jmp	disp

disp:	mov	ah,09h
	int	21h
	jmp	is_hma
	
is_hma:
	mov	ah,01h
	mov	dx, 010h      ; HMAに16byte要求
	int	2fh
	
	cmp	ax,01h        ;割り当て成功したら
	jz	hma_aru
	mov	dx,offset m_hmang
	jmp	disp_hma
hma_aru:
	mov	dx,offset m_hmaok
disp_hma:
	mov	ah,09h
	int	21h

is_a20:
	mov	ah, 07h
	int	2fh
	
	test	ax, 01h
	jz	a20_aru
	                             ;A20無効の場合
	mov	dx, offset m_a20ng   ;無効の表示
	mov	ah,09h
	int	21h
	
	mov	dx, offset m_a20
	mov	ah,09h
	int	21h
	
	mov	ah,05h               ;A20を有効化
	int	2fh
	
	test	ax,01h               ;有効化できたら
	jz	a20_activeok         ;a20_activeokにジャンプ
	mov	dx, offset m_a20activeng
	jmp	disp_a20

a20_activeok:
	mov	dx, offset m_a20ok
	jmp	disp_a20
	
a20_aru:
	mov	dx, offset m_a20ok
	jmp	disp_a20
	
disp_a20:
	mov	ah, 09h
	int	21h

	mov	ax,4c00h
	int	21h

		
code	ends
	end start

結果

次のようになりました。

XMSドライバが存在します。
HMAに16byte要求し失敗しました。
A20は有効です。

ちなみに,vmapの結果は次の通りです。
(HMAのところだけ)

VMAP Version 2.01  Copyright (C) 1989-91 by c.mos
----- XMS ver2.00 -----
HMA used: 57 KB by DOS
1
1
5

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?