このプロジェクトの内容は1991年10月頃にIBM-PC上で作りました。
PCのフロッピーディスク専用のオリジナルDOS『EXELOAD』のソースコードです。
ゲーム専用OSです。
8086アセンブラで作られています。
1990年のPC−9801版EXELOADを元にIBM-PC用に修正して作りました。
この文を書いている時点で、34年前のソースコードです。動作の保証はありません。
参考用として参照してください。
1991年12月29日作成の ”README.DOC” から引用して、ここに掲載します。
ここから ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
; "README.DOC" J-3100GS001 make by R.Hashimoto 1991/08/06
; 1991/09/20
; 1991/12/28
EXELOAD/world-PC ver0.25 (C) R.Hashimoto 1989,1990,1991 in tokyo japan.
PSHELL/world-PC ver0.13 (C) R.Hashimoto 1989,1990,1991 in tokyo japan.
(0) 本製品は、使用時のライセンス料は無料です。
コピーおよび配布なども自由です。
改造、改良、組み込み、掲載も自由です。
ただし、本プログラムのソースコードおよび
実行形式ファイルなどの、著作権と配布の権利
販売の権利を、阻害する行為は絶対にやめて下さい。
本製品(EXELOADとPSHELL)
は、今後もいっさいのライセンス料は無料にします。
本製品を改造してオリジナルDOSとして製品化して
ジャンジャン売って一億円もうけても構いません。
ただし、そのときはEXELOADとPSHELLの
メッセージは使用しないでくださいね。
制作者
(1) はじめに
本製品は、IBM−PC上でゲームプログラムを
修正無しで動かすためにつくられた
EXELOAD/world−PC ver0.25
PSHELL/world−PC ver0.13
です。
本品に含まれるソースリストは次のようなものです。
¥IPLKIT IPLSYS.EXE EXELOADを書き込むツール
¥PSHELL PSHELL.EXE 簡易DOSシステム用シェル
¥PCTEST IPLTST.EXE IPLの実験プログラム
¥BEEP TSTBEEP.EXE BEEPテストプログラム
¥MOUSE TSTMS.EXE PS/2マウステストプログラム
¥SYSTIMER TSTTIM.EXE システムタイマ・テストプログラム
DOSを利用する場合はEXELOADと
PSHELLを組み合わせて利用します。
(2) DOSの組み込み手順
大体の手順は
1.システムを組み込みたいディスクをFORMATします。
(これは標準DOSのFORMATコマンドを使用してください)
2.IPLSYS.EXEを使って
EXELOAD.SYSを組み込みます。
3.PSHELL.EXEをコピーします。
と、なります。
実際の手順をDynaBook上で
2DDのディスクを使った例をつぎに
示します。
C:¥> FORMAT A:/3
新しいフロッピーディスク(2DD)を装置 A: に挿入してください.
準備ができたらキーをどれか押してください.
フォーマッティング中...トラック番号(79),ヘッド番号(1)
ディスクのボリューム・ラベルを入力してください
(2バイト文字−5文字、1バイト文字−11文字、省略−エンターキー)
?J3100
730112 バイト:全ディスク空間
730112 バイト:使用可能ディスク空間
別のフロッピーディスクをフォーマッティングしますか <Y/N>? N
C:¥> IPLSYS
IPLSYS/EXELOAD/world-PC ver0.25 (C) R.Hashimoto 1991 in tokyo japan.
media type 1=360KB,2=1.2MB,3=720KB,4=1.44MB['Q':exit]:3
system write FD drive number.['Q':exit]:1
system write ok? ['Q':exit]
IPL code size= 469
system code size= 4923
IPL
cylinder= 0
head = 0
sector = 1
system
cylinder= 0
head = 1
sector = 6
cylinder= 0
head = 1
sector = 7
.....
head = 1
sector = 5
complete.
C:¥> COPY PSHELL.EXE A:
1 個のファイルをコピーしました.
C:¥> DIR A:
装置 A: のディスクのボリュームラベルはありません.
ディレクトリは A:¥
EXELOAD SYS 4923
PSHELL EXE 54848 91-08-03 18:32
2 個のファイルがあります.
669696 バイトが使用可能です.
C:¥>
(3) プログラムの組み込み
AUTOEXEC.EXEを
自動立ち上げします。
(4) DOSの仕様について
このDOSはまだ試作の領域を出ていない
部分が多いので、サイズも大きく不安定な
動作をすることがあると思いますが、随時
対応していく予定なのでご了承ください。
PC98の1.2MB(1024バイトセクタ)の
ディスクを読みたいときはDMDコマンドを使って
モードを強制的に切り替えてください。
近いうちに漢字表示ドライバを組み込む予定ですが
漢字フォントのライセンスが有料になってしまいますので
フォントファイルの部分を切り放して別々に
供給して行きたいと考えています。
漢字フォントセットは0.3水準をサポートする予定です。
(5) ファンクション21H
INT21Hでサポートされる機能は
次の通りです。
プログラムの終了
AH=00H
1文字出力
AH=02H
入力 DL : 出力する文字
コンソール入出力
AH=06H
入力 DL : 0FFH ならば1文字入力 0FFH以外ならば
DL=出力する文字
出力 AL : 入力文字
zf : off:入力なし,on:入力あり
文字列の出力
AH=09H
入力 DS:DX : 文字列 ('$':文字列の終わり)
文字列の入力
AH=0AH
入出力 DS:DX : バッファ
+0:最大入力文字列(CRも含む)
+1:実際の入力された文字数(CRを含まない)
+2:入力された文字列
ディスクのリセット
AH=0DH
FCBファイルオープン
AH=0FH
入力 DS:DX : 初期化されたユーザFCB
出力 AL : 0=正常, FFh=ファイルがない
FCBファイルクローズ
AH=10H
入力 DS:DX : オープン中のユーザFCB
出力 AL : 0=正常, FFh=クローズ出来ない
FCBファイルREAD
AH=14H
入力 DS:DX : オープン中のユーザFCB
出力 AL : 0=正常
: 1=E.O.F(もう続きのデータは無い)
: 2=ディスクエラー
DTAセット
AH=1AH
入力 DS:DX : セットするDTAのアドレス
プロセスの常駐
AH=31H
入力 DX : 確保パラグラフ値
ディスクの空き容量
AH=36H
入力 DL : 0=カレントドライブ,1=A:,2=B:...
出力 AX : セクタ数/1クラスタ,ドライブが無効のときはFFFFh
BX : 空きクラスタ数
CX : バイト数/1セクタ
DX : クラスタ数/1ドライブ
ハンドルクリエイト
AH=3CH
入力 DS:DX : ハンドル名
出力 cf : off:正常,on:異常
AX : cf=off: ファイルハンドル
cf=on : 3=ハンドル名が無効
ハンドルのオープン
AH=3DH
入力 DS:DX : ハンドル名
出力 cf : off:正常,on:異常
AX : cf=off: ファイルハンドル
: cf=on : 2=ファイルがない
ハンドルのクローズ
AH=3EH
入力 BX : ファイルハンドル
出力 cf : off:正常,on:異常
AX : cf=on : 6=ファイルハンドルが無効
ハンドルのREAD
AH=3FH
入力 DS:DX : バッファのアドレス
CX : 読み込みバイト数
BX : ファイルハンドル
出力 cf : off:正常,on:異常
AX : cf=off: 読み込めたバイト数。EOFならば0
: cf=on : 6=ファイルハンドルが無効
ハンドルのWRITE
AH=40H
入力 DS:DX : データバッファのアドレス
CX : 書き込みバイト数
BX : ファイルハンドル
出力 cf : off:正常,on:異常
AX : cf=off: 書き込めたバイト数。
: cf=on : 6=ファイルハンドルが無効
メモリの割り当て
AH=48H
入力 BX : 割り当てるメモリサイズ(パラグラフサイズ)
出力 cf : off:正常,on:異常
cf=0 AX : 割り当てられたフリーエリアの先頭セグメント
cf=1 AX : 08H=空きメモリが足りない
cf=1 BX : フリーエリアのサイズ(パラグラフサイズ)
メモリの開放
AH=49H
入力 ES : 開放するメモリのパラグラフ値
メモリの割り当ての変更
AH=4AH
入力 ES : メモリ領域のセグメント値
BX : 割り当てるメモリサイズ(パラグラフサイズ)
出力 cf : off:正常,on:異常
cf=1 AX : 08H=メモリが足りない
cf=1 BX : 最大サイズ(パラグラフサイズ)
プロセスの終了
AH=4CH
PSPアドレスの取得
AH=62H
出力 BX : PSPセグメント値
(6) テクニカルメモ
・本製品は標準DOSに見られるサブディレクトリィの
機能はありませんので、予めご了承下さい。
・本製品を使用する場合は、8086マクロアセンブラの
知識が必要です。
・EXELOAD.SYSはセクタ位置が決まっていますので
単体のコピーは出来ません。
・PSHELL.EXEは単体でのコピーが可能です。
・PSHELLのコマンド
DIR ディレクトリィ一覧(ワイルドカードは不可)
TYPE タイプ
HELP コマンド一覧
CTRL−C 強制終了
CTRL−S 一時停止
CTRL−Q 一時停止の解除
・本ソースプログラムはMASMver5.1でアセンブル
できます。リンカはOPTLINK(MS−LINK)を使用しています。
・構造体定義やレコード、マクロ内のIF分等、
複雑な定義は一切使っていません。
・MAKEFILEはMS−MAKE(Version 4.07)で実行出来ます。
・シェル上のコマンドはHELPで一覧を見ることが出来ます。
・標準DOSに見られるサブディレクトリィの機能はありません。
・いまのところ、書き込み中/読み込み中の2つのハンドルのみ
サポートします。従って同時にオープンできるファイル数は
READ/WRITEともに一つずつです。
・メモリ管理が出来ますが、機構は単純なフラットなもので
ブロックは持っていません。下記の5つのパラメータのみで
管理されているだけです。
"SSADRS.ASM"
ADRS_MIN ; 空きエリア(パラグラフ)下限
ADRS_MAX ; 空きエリア(パラグラフ)上限+1 (A000H)
ADRS_PSP ; PSPエリア(パラグラフ)
ADRS_PNEXT ; プログラムの直後エリア(パラグラフ)
ADRS_FRE ; 空きエリア(パラグラフ)先頭
(重要)・PSHELLのサイズ
PSHELL.ASMの約16行目に
PSHELL.EXEのパラグラフサイズ
が入っています。
改造時にはリンクマップを参照して変更を
忘れないようにして下さい。
(若干の余裕を持たせるのがコツ)
MY_SYSTEM_SIZE EQU 01000H ;このプログラムのサイズ
(パラグラフ)
リンクマップ
Start Stop Length Name Class
00000H 023FFH 02400H CHASH1 CHASH1
02400H 05924H 03525H CODE CODE
05930H 0CD2FH 07400H DATA DATA
0CD30H 0D4FFH 007D0H STACK
0D500H 0D58FH 00090H PALET PALET
------これにEXEのヘッダサイズを
加算したのがプログラムサイズです。
;
; end of "README.DOC"
;
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー ここまで
r.h 2025/5/10
