ソース掲示板




すべてから検索

キーワード   条件 表示 現行ログ 過去ログ トピックス 名前 本文
絶滅コード LIO/PC98 : 1993 年の郷愁
日時: 2009/10/31 10:24
名前: lightbox



PC98 用ですし(笑)


拡張子:
/***********************************************************/
/***    LIO版 直線、短形の描画                       ***/
/***********************************************************/
/***        項目名                   引き数名            ***/
/***    描画始点の座標               x1,y1               ***/
/***    描画終点の座標               x2,y2               ***/
/***    パレット番号                 paret               ***/
/***    描画コード(B,BF)       byoga               ***/
/***    ラインスタイルスイッチ       lswitch             ***/
/***    ラインスタイルすいっちLo   lstairu             ***/
/***    ラインスタイルすいっちHi   hstairu             ***/
/***********************************************************/
#include <memory.h>

static unsigned char *param;
static unsigned int  paramoff;
static unsigned int  ucwseg;
extern unsigned int  lioucw;

extern
void
gline( int x1, int y1, int x2, int y2, int paret, int byoga, int lswitch, int lstairu, int hstairu)
{

   unsigned long work;
   unsigned char sts;

   ucwseg = lioucw;
   work = (unsigned long)lioucw * 256L * 256L;
   work = work + 5120;
   param = (char *)work;
   
   memcpy( param  , (char *)&x1 , 2 );
   memcpy( param+2, (char *)&y1 , 2 );
   memcpy( param+4, (char *)&x2 , 2 );
   memcpy( param+6, (char *)&y2 , 2 );
   (*(param+8)) = (unsigned char)paret;
   (*(param+9)) = (unsigned char)byoga;
   (*(param+10)) = (unsigned char)lswitch;
   (*(param+11)) = (unsigned char)lstairu;
   (*(param+12)) = (unsigned char)hstairu;

	_asm {
		push	ds
		push	es
		push	ss
		push	bx
		push	cx
		push	dx
		push	bp
		push	sp
		push	si
		push	di

		mov	ax,WORD PTR ucwseg
		mov	ds,ax
		mov	bx,5120
		int	0a7h

		pop	di
		pop	si
		pop	sp
		pop	bp
		pop	dx
		pop	cx
		pop	bx
		pop	ss
		pop	es
		pop	ds
		mov	BYTE PTR sts,ah
	}

}
メンテナンス

もう、何がなんだが・・・・ ( No.1 )
日時: 2009/10/31 10:18
名前: lightbox


日時: 2009/10/31 10:18
名前: lightbox
拡張子:
///////////////////////////////////////////////////////////
//   (2F) ディスク転送アドレスの取得
///////////////////////////////////////////////////////////
extern
char *
gdta( void )
{
	char *address;

	_asm {

		push	es
		mov	ah,2fh
		int	21h
		mov	ax,es
		mov	WORD PTR address,bx
		mov	WORD PTR address+2,ax
		pop	es

	}

	return( address );

}
このアーティクルの参照用URLをクリップボードにコピー メンテナンス
int24 ( No.2 )
日時: 2009/10/31 10:21
名前: lightbox
拡張子:
					// dstr を使用する為
#include "func3.h"
#include <memory.h>
#include <stdio.h>

static int *dmy;

static char msg[40] = "再試行(R) 無視(I) 中止(A)";

					// int24 エラーメッセージ
static char ermsg[13][40] = {
   "ライトプロテクトされています",
   "存在しないユニットです",
   "ドライブが準備されていません",
   "コマンドが不当です",
   "CRCエラー",
   "??????????????",
   "シークエラー",
   "存在しないメディアタイプ",
   "セクタが存在しません",
   "プリンタの用紙切れ",
   "書き込み不良",
   "読み込み不良",
   "一般的なディスク不良"
};

static char msgspace[82] ="                                                                               ";

static char save25line[160];		// テキスト文字保存
static char save25line2[160];		// テキストアトリビュート保存

static int i;				// インデックス


extern
int
chkdrv24( int drv )
{
   int rtn;
   int baddrv;

   (*(dmy)) = 0;
   _asm {
		push	es
		push	ds
		push	bp
		push	di
		push	si
		push	dx
		push	cx
		push	bx
//	mov	ah,36h
	mov	ah,1ch
  	mov	dl,BYTE PTR drv
  	int	21h
	mov	ah,0
	mov	WORD PTR baddrv,ax
		pop	bx
		pop	cx
		pop	dx
		pop	si
		pop	di
		pop	bp
		pop	ds
		pop	es
   }

   rtn = (*(dmy));
   if ( rtn ) {
      (*(dmy)) = 1;
      return( rtn );
   }
   (*(dmy)) = 1;

   if ( baddrv == 255 ) {
      return( baddrv );
   }
   return( rtn );

}

extern
void
setint24( void )
{

	_asm {
		mov	ax,cs			// ラベル int24 のセグメント
		mov	es,ax
		mov	bx,OFFSET int24
		sub	bx,2
		mov	cx,ds
		mov	WORD PTR es:[bx],cx	// データセグメントの保存
		sub	bx,2
		mov	WORD PTR dmy[0],bx
		mov	WORD PTR dmy[2],ax
		push	ax
	}

        (*(dmy)) = 1;

	_asm {
		pop	ax
		push	ds
		mov	ds,ax			// ベクタのセット
		mov	dx,OFFSET int24
		mov	ah,25h
		mov	al,24h
		int	21h
		pop	ds
	}
	return;					// 関数の終了

	_asm {
		nop				// ダミー
		nop
		nop				// セグメントセーブエリア
		nop
	}

int24:						// int24 ハンドラの入り口
	_asm {
		push	es
		push	ds
		push	bp
		push	di
		push	si
		push	dx
		push	cx
		push	bx

		mov	bx,OFFSET int24		// データセグメントの復帰
		sub	bx,2
		mov	ax,cs:[bx]
		mov	ds,ax

		mov	bx,OFFSET int24
		sub	bx,4
		mov	cx,0000h
		cmp	WORD PTR cs:[bx],cx
		jne	setidx

		cmp	di,0001h
		je	gotousr1
		cmp	di,0002h
		je	gotousr2
		cmp	di,0008h
		je	gotousr8
setidx:
		mov	cx,0
		mov	WORD PTR cs:[bx],cx
		mov	WORD PTR i,di		// インデックスにコードをセット
		jmp	normal24
gotousr1:
		mov	cx,1
		mov	WORD PTR cs:[bx],cx
		jmp	gotousr
gotousr2:
		mov	cx,2
		mov	WORD PTR cs:[bx],cx
		jmp	gotousr
gotousr8:
		mov	cx,8
		mov	WORD PTR cs:[bx],cx
		jmp	gotousr
gotousr:
		mov	ax,0
		pop	bx
		pop	cx
		pop	dx
		pop	si
		pop	di
		pop	bp
		pop	ds
		pop	es
		iret
normal24:
	}
						// 25 行目保存
        memcpy( save25line, (char *)0xa0000f00, 160 );
        memcpy( save25line2, (char *)0xa2000f00, 160 );

        dstr( 1,  25, msgspace, 0xe1 );	// 25 行目クリア

        dstr( 10, 25, ermsg[i], 0x41 );	// 25 行目にメッセージ表示
        dstr( 50, 25, msg, 0xe1 );

	_asm {

inputstart:					// 1文字入力
		mov	ah,07h
		int	21h

		cmp	al,'R'			// リトライ
		je	retry
		cmp	al,'r'
		je	retry
		cmp	al,'ス'
		je	retry

		cmp	al,'I'			// 無視
		je	mushi
		cmp	al,'i'
		je	mushi
		cmp	al,'ニ'
		je	mushi

		cmp	al,'A'			// 無視
		je	abt
		cmp	al,'a'
		je	abt
		cmp	al,'チ'
		je	abt

		jmp	inputstart		// 上記以外はループ

retry:
		mov	al,01h			// システムへのステータスセット
		jmp	int24exit
mushi:
		mov	al,00h			// システムへのステータスセット
		jmp	int24exit
abt:
		mov	al,02h			// システムへのステータスセット
		jmp	int24exit

	}

int24exit:

	_asm {
		push	ax			// ステータス保存
	}

						// 25 行目復帰
	memcpy( (char *)0xa0000f00, save25line, 160 );
	memcpy( (char *)0xa2000f00, save25line2, 160 );

	_asm {
		pop	ax			// ステータス復帰

		pop	bx
		pop	cx
		pop	dx
		pop	si
		pop	di
		pop	bp
		pop	ds
		pop	es
		iret				// ハンドラ終了
	}

}
このアーティクルの参照用URLをクリップボードにコピー メンテナンス
locate ( No.3 )
日時: 2009/10/31 10:23
名前: lightbox
拡張子:
static char err[28]="function locate param error";

extern
void
locate( int x, int y )
{
	char wstring[10];
	int i;

	if ( x<1 || x>80 || y<1 || y>25 ) {
		for ( i = 0; i < 27; i++ ) {
			_asm {
		mov	si,i
		mov	ah,06h
		mov	dl,err[si]
		int	21h
			}
		}

		_asm {
		mov	ah,0ch
		mov	al,08h
		int	21h
		mov	ah,0ch
		mov	al,00h
		int	21h
		}
		return;
	}

	wstring[0] = 0x1b;
	wstring[1] = '[';
	wstring[2] = (char)(y/10+'0');
	wstring[3] = (char)(y%10+'0');
	wstring[4] = ';';
	wstring[5] = (char)(x/10+'0');
	wstring[6] = (char)(x%10+'0');
	wstring[7] = 'H';
	wstring[8] = 0x00;

	for ( i = 0; i < 8; i++ ) {
		_asm {
		mov	si,i
		mov	ah,06h
		mov	dl,wstring[si]
		int	21h
		}
	}

}
このアーティクルの参照用URLをクリップボードにコピー メンテナンス