home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
FreeWare Collection 3
/
FreeSoftwareCollection3pd199x-jp.img
/
kxc
/
ms_dos
/
extcons
/
extcons2.asm
next >
Wrap
Assembly Source File
|
1980-01-02
|
10KB
|
700 lines
;================================================
;= タイトル:CONSOLE++ ver 2.0 =
;= programed by K.OKAMOTO :copy free =
;================================================
;
;;参考文献:富士通FMRシリーズ 徹底解析マニュアル :BNN
;
;
CODE SEGMENT
ASSUME CS:CODE,DS:CODE ;;タイニーモデル
;
F_NO EQU 00H
F_LEFT EQU 01H
F_RIGHT EQU 02H
F_TYPE EQU 04H
;
;
MOUSE PROC FAR ;;マウス割り込みルーチン
;
MOV CS:BUTTON,CH ;;現在押されているボタン
;
MOV CL,3 ;;水平位置
SHR BX,CL
INC BX
MOV CS:CUR_X,BL
;
MOV CL,4 ;;垂直位置
SHR DX,CL
INC DX
MOV CS:CUR_Y,DL
;
CMP AX,0002H ;;左ボタン押してる
JNE TRG1
CALL HIT
JMP E_MOU
TRG1: ;
CMP AX,0008H ;;右ボタン押してる
JNE TRG2
CALL DIR
JMP E_MOU
TRG2: ;
;
E_MOU: RET
MOUSE ENDP
;
;
HIT PROC ;;左クリックルーチン
;
MOV AX,CS ;DS=CS
MOV DS,AX
;
CMP BYTE PTR DRV_F,F_RIGHT ;;右ドライブシフトがあった
JNE HIT1
;
TEST BYTE PTR BUTTON,F_RIGHT ;;右ボタンを押しっぱなしか?
JZ HIT1
;
CALL DRVR ;;右ドライブシフト
;
JMP E_HIT ;;おしまい
;
HIT1: CMP CUR_X,1 ;;左端をクリックしたか?
JNE HEAD
;
CALL GET_CH ;;半角か?
TEST BH,01H
JNZ HEAD
;
MOV DRV,BL ;;ドライブ名保存
;
INC CUR_X
;
CALL GET_CH ;;ドライブ名か?
DEC CUR_X
CMP BX,003EH ;;'>'
JNE HEAD
;
MOV BYTE PTR DRV_F,F_LEFT
;
CALL DRVL ;;左ドライブシフト
;
JMP E_HIT
;
;
HEAD: CALL GET_CH
CMP BX,0020H ;;スペース
JNE HEAD1
JMP E_HIT
;
HEAD1: CMP BX,003EH ;;'>'
JNE HEAD2
JMP E_HIT
;
HEAD2: CMP CUR_X,1 ;;この文字列の先頭を探す
JE F_NAME
DEC CUR_X
CALL GET_CH
CMP BX,0020H
JE H_LOOK
CMP BX,003EH ;;'>'
JNE HEAD2
JMP E_HIT
;
H_LOOK: INC CUR_X
;
F_NAME: MOV AL,CUR_X
;
AND AL,0FH ;;DIR /W で表示されたディレクトリを指すか?
CMP AL,01H
JE FIL_N
;
JMP E_HIT
;
;
;;ファイル名か?(文字列の構造)
;
FIL_N: MOV CX,0 ;;文字数
MOV DI,OFFSET F_BUFF
;
FIL_N1: CALL GET_CH ;;ファイル名の文字の有る部分
MOV [DI],BX ;;xxxx____.xxx
; ;;^^^^
;
INC CX
INC CUR_X
INC DI
INC DI
;
CMP BX,0020H ;;スペースを見つけた
JZ FIL_N2
;
CMP CX,9 ;;9文字つづくファイル名は無い
JZ E_HIT
;
JMP FIL_N1
;
FIL_N2: DEC CX
DEC CUR_X
DEC DI
DEC DI
;
FIL_S: MOV WORD PTR [DI],0 ;;終わりの記号
;
FIL_S1: CALL GET_CH ;;ファイル名の文字の無い部分
; ;;xxxx____.xxx
; ;; ^^^^^
INC CUR_X
INC CX
;
CMP BX,0020H ;;スペースでなければならない
JNE E_HIT
;
CMP CX,9 ;;もう拡張子?
JNE FIL_S1
;
;
FIL_E: MOV DI,OFFSET E_BUFF
MOV CX,3
;
FIL_E1: CALL GET_CH ;;拡張子の有る部分
MOV [DI],BX ;;xxxx____.xxx
; ;; ^^^
INC CUR_X
INC DI
INC DI
;
LOOP FIL_E1 ;;黙ってコピー
;
MOV WORD PTR [DI],0 ;;終わりの記号
;
;CALL DEBUG ;;得ることの出来たファイル名の表示
;
MOV DRV_F,F_NO ;;ドライブシフトなし
;
CALL E_JOB ;;拡張子ごとの処理をする
;
MOV WORD PTR [DI],000DH
INC CX
;
MOV WORD PTR [DI+2],0000H
;
CALL JIS_CNV ;バッファのJIS漢字をシフトJISにする。
;
;CALL DEBUG2 ;;KEYバッファに送るはずの文字列を表示
;
MOV AX,0B01H
MOV DI,OFFSET KBUFF
INT 90H
;
E_HIT: RET
HIT ENDP
;
;
E_JOB PROC
MOV SI,OFFSET E_BUFF ;拡張子を調べる
MOV AX,[SI]
INC SI
INC SI
CMP AL,'E' ;EXE/EXP
JE K_EXE
CMP AL,'C' ;COM
JE K_COM
CMP AL,'B' ;BAT
JE K_BAT
CMP AL,' ' ;' '
JE K_CD
;
JMP J_TYPE ;;その他:TYPE 処理
;
K_EXE: CMP BYTE PTR [SI],'X'
JNE J_TYPE
INC SI
INC SI
;
CMP BYTE PTR [SI],'E'
JE J_EXE ;実行処理
;
CMP BYTE PTR [SI],'P'
JE J_EXP ;RUN386実行処理
;
JMP J_TYPE ;TYPE 処理
;
;
K_COM: CMP BYTE PTR [SI],'O'
JNE J_TYPE
INC SI
INC SI
;
CMP BYTE PTR [SI],'M'
JE J_EXE ;実行処理
;
JMP J_TYPE ;TYPE 処理
;
K_BAT: CMP BYTE PTR [SI],'A'
JNE J_TYPE
INC SI
INC SI
;
CMP BYTE PTR [SI],'T'
JE J_EXE ;実行処理
;
JMP J_TYPE ;TYPE 処理
;
K_CD: CMP BYTE PTR [SI],' '
JNE J_TYPE
INC SI
INC SI
;
CMP BYTE PTR [SI],' '
JE J_CD ;ディレクトリ変更処理
;
JMP J_TYPE ;TYPE 処理
;
;
;
J_EXE: MOV SI,OFFSET F_BUFF
MOV DI,OFFSET KBUFF
MOV CX,0
;
CALL S_COPY
;
JMP JOB_E
;
;
J_CD: MOV SI,OFFSET S_CD
;
JMP J_EXP0
;
J_EXP: MOV SI,OFFSET S_386
;
J_EXP0: MOV DI,OFFSET KBUFF
MOV CX,0
;
CALL S_COPY
;
MOV SI,OFFSET F_BUFF
;
CALL S_COPY
;
JMP JOB_E
;
;
J_TYPE: MOV SI,OFFSET S_TYPE
MOV DI,OFFSET KBUFF
MOV CX,0
;
CALL S_COPY
;
MOV SI,OFFSET F_BUFF
;
CALL S_COPY
;
MOV WORD PTR [DI],002EH
INC DI
INC DI
INC CX
;
MOV SI,OFFSET E_BUFF
;
CALL S_COPY
;
MOV BYTE PTR DRV_F,F_TYPE ;TYPEしたよフラグ
;
JMP JOB_E
;
;
JOB_E: RET
;
E_JOB ENDP
;
;
S_COPY PROC ;MACRO
; JMP S_CO_E ;DEBUG
S_COP: MOV AX,[SI]
MOV [DI],AX
INC CX
INC SI
INC SI
INC DI
INC DI
;
CMP AX,0
JNZ S_COP
;
DEC CX
DEC SI
DEC SI
DEC DI
DEC DI
;
S_CO_E: RET
;
S_COPY ENDP
;
;
JIS_CNV PROC ;バッファのJIS漢字をシフトJISにする。
;
MOV SI,OFFSET KBUFF
JIS_1: MOV AX,[SI]
;
CMP AX,0 ;おしまい
JE JIS_E
;
TEST AH,01H ;半角
JZ JIS_2
;
MOV DH,AL ;漢字変換
;
MOV AX,[SI+2]
;
CMP AX,0 ;おしまい
JZ JIS_E
;
MOV DL,AL ;漢字変換
;
MOV AH,00H ;漢字変換 "JIS" TO "SHIFT JIS"
INT 0AFH
;
MOV AH,0
MOV AL,DH
MOV [SI],AX ;漢字変換
MOV AL,DL
MOV [SI+2],AX ;漢字変換
;
INC SI
INC SI
;
JIS_2: INC SI
INC SI
;
JMP JIS_1
;
JIS_E: RET
;
JIS_CNV ENDP
;
;
DIR PROC ;"DIR /W"する
;
MOV AX,CS ;DS=CS
MOV DS,AX
;
TEST BYTE PTR BUTTON,F_LEFT ;;左ボタンを押しっぱなしか?
JZ DIR1
;
CMP BYTE PTR DRV_F,F_LEFT ;;左ドライブシフトがあった
JNE DIR0
;
CALL DRVL ;;左ドライブシフト
;
JMP E_DIR
;
DIR0: CMP BYTE PTR DRV_F,F_TYPE ;TYPEしたよフラグ
JNE DIR1
;
CALL CTL_C ;; [CTRL]+C 処理
;
JMP E_DIR
;
DIR1: CMP CUR_X,1 ;;左端をクリックしたか?
JNE NR_DRV
;
CALL GET_CH ;;半角か?
TEST BH,01
JNZ NR_DRV
;
MOV DRV,BL ;;ドライブ名保存
;
INC CUR_X
;
CALL GET_CH ;;半角か?
DEC CUR_X
CMP BX,003EH ;;'>'
JNE NR_DRV
;
MOV BYTE PTR DRV_F,F_RIGHT
;
CALL DRVR ;;右ドライブシフト
;
JMP E_DIR
;
NR_DRV: ;
MOV AX,0B01H
MOV CX,8
MOV DI,OFFSET DIRBUFF
INT 90H
;
MOV DRV_F,F_NO ;;ドライブシフトなし
;
E_DIR: RET
;
DIR ENDP
;
;
;
DRVL PROC
MOV AL,DRV
DEC AL
CMP AL,'A'-1
JNE DRVL1
MOV AL,'Q'
DRVL1: ;
MOV DRV,AL
MOV AX,0B01H
MOV CX,3
MOV DI,OFFSET DRV
INT 90H
;
RET
;
DRVL ENDP
;
;
DRVR PROC
MOV AL,DRV
INC AL
CMP AL,'Q'+1
JNE DRVR1
MOV AL,'A'
DRVR1: ;
MOV DRV,AL
MOV AX,0B01H
MOV CX,3
MOV DI,OFFSET DRV
INT 90H
;
RET
;
DRVR ENDP
;
;
CTL_C PROC
;
MOV AX,0B01H
MOV CX,1
MOV DI,OFFSET CTRL_C
INT 90H
;
RET
;
CTL_C ENDP
;
;
;
GET_CH PROC
MOV DH,CUR_Y ;;1文字取り出しサブルーチン
MOV DL,CUR_X ;;DL=桁位置 DH=行位置
;
MOV AH,14H
INT 91H
;
mov ax,bx
MOV CH_TY,BH ;;bit0=0:半角 1:全角 bit1=0:1byte 1:2byte
MOV CH_JIS,BL ;;文字コード
;
RET
GET_CH ENDP
;
;
;
;;ここしばらくはデバックに使ったルーチン達です。
;
;DEBUG PROC
; ;debug ;;ファイル名格納バッファの内容を表示する。
; ;
; MOV AH,1DH
; MOV AL,'_'
; INT 91H
; ;
; MOV SI,OFFSET F_BUFF
;D_FIL: MOV AX,[SI]
; INC SI
; INC SI
; CMP AX,0
; JE D_EXT
; MOV AH,1DH
; INT 91H
; JMP D_FIL
; ;
;D_EXT: MOV AH,1DH
; MOV AL,'.'
; INT 91H
; ;
; MOV SI,OFFSET E_BUFF
;D_EXT1: MOV AX,[SI]
; INC SI
; INC SI
; CMP AX,0
; JE D_END
; MOV AH,1DH
; INT 91H
; JMP D_EXT1
;D_END: ;
; RET
; ;
;DEBUG ENDP
; ;
;DEBUG2 PROC
; ;debug ;;KEYバッファの内容を表示する。
; ;
; ;MOV AH,1DH
; ;MOV AL,'['
; ;INT 91H
; ;
; MOV SI,OFFSET KBUFF
;D_KEY: MOV AX,[SI]
; INC SI
; INC SI
; CMP AX,0
; JE D_KEY1
; MOV AH,1DH
; INT 91H
; JMP D_KEY
; ;
;D_KEY1: ;MOV AH,1DH
; ;MOV AL,']'
; ;INT 91H
; ;
; RET
; ;
;DEBUG2 ENDP
; ;
; ;
;DEBUG3 PROC
; ;debug ;;AXの内容を表示する。
; ;
;;************************************
;;** print hex$(ax) (no bleak regs) **
;;************************************
;;
;p_hex: push ax
; push cx
; ;
; push ax
;;
; mov cl,8
; ror ax,cl
;;
; call dis ;joui keta
;;
; pop ax
; call dis ;kai keta
;;
; pop cx
; pop ax
; ;
; mov al,' '
; mov ah,1dh
; int 91h
;;
; jmp p_hex_e
; ;
;dis: push ax
;;
; mov cl,4
; ror al,cl
;;
; call dis1 ;joui keta
;;
; pop ax
; call dis1 ;kai keta
;;
; ret
;;
;dis1: and al,0fh ;low data
; cmp al,10
; jae dis2
; or al,30h
; jmp dis3
;dis2: sub al,10
; add al,41h
;;
;dis3: mov ah,1dh
; int 91h
;;
; ret
;;
;p_hex_e:ret
; ;
;DEBUG3 ENDP
; ;
; ;
;
CUR_X DB ?
CUR_Y DB ?
CH_TY DB ?
CH_JIS DB ?
;
BUTTON DB 0 ;;BIT0=左ボタンON BIT1=右ボタンON
DRV_F DB 0 ;;BIT0=左ドライブシフト BIT1=右ドライブシフト
;
F_BUFF DW 20H DUP (?)
E_BUFF DW 10H DUP (?)
KBUFF DW 40H DUP (?)
;
;
DRV DB ?,00H,':',00H,0DH,00H
;
DIRBUFF DB ' ',00H,'D',00H,'I',00H,'R',00H,' ',00H,'/',00H,'W',00H,0DH,00H
S_TYPE DB 'T',00H,'Y',00H,'P',00H,'E',00H,' ',00H,00H,00H
S_386 DB 'R',00H,'U',00H,'N',00H
DB '3',00H,'8',00H,'6',00H,' ',00H,00H,00H
S_EXP DB '.',00H,'E',00H,'X',00H,'P',00H,00H,00H
S_CD DB 'C',00H,'D',00H,' ',00H,00H,00H
CTRL_C DB 03H,00H
;
DB 100H DUP (?) ;<これがないと暴走する?魚田さん教えて下さい。
;
;
LOADER PROC ;;ここ以降は常駐するとき捨てられる
;
MOV AX,CS ;DS=CS
MOV DS,AX
;
MOV AH,00H ;;マウス動作開始
INT 99H
;
MOV AX,0200H ;;マウスカーソル表示
INT 99H
;
MOV AH,0CH ;;マウスカーソルのスピードを上げる
MOV DH,04H ;;水平
MOV DL,04H ;;垂直
INT 99H
;
MOV DX,OFFSET MSG ;;タイトル表示
MOV AH,09H
INT 21H
;
MOV AX,CS
MOV DS,AX
;
MOV AH,0BH ;;マウス割り込みルーチンの定義
MOV DX,000AH
MOV DI,OFFSET MOUSE
INT 99H
;
MOV DX,OFFSET LOADER ;;常駐終了
SHR DX,1
SHR DX,1
SHR DX,1
SHR DX,1
INC DX
MOV AX,3100H
INT 21H
;
MSG DB 01BH,'[0m','☆'
DB 01BH,'[1m',' CONSOLE++ ver 2.0 '
DB 01BH,'[0m','☆'
DB 0DH,0AH
DB 01BH,'[31m',' K',01BH,'[0m','.OKAMOTO 1990 <<COPY FREE>>'
DB 0DH,0AH
DB 01BH,'[0m',' 常駐しま~す。'
DB 0DH,0AH,'$'
;
LOADER ENDP
;
CODE ENDS
END LOADER