戻る
; "WIDDISK.ASM" PC-9801UV11 make by R.H 1992/05/20
;
;
; WINDOWS/DISKウインドウ
;
;
; WIDDISK : WINDOWS/ディスクウインドウ(DSKWID.ASM用)
;
;
; (C) 1992 ritsurou hashimoto.
INCLUDE TSTSETW.INC
INCLUDE WINDOWS.INC
INCLUDE MACHINEX.INC
BACKSAVE_BANK EQU 24 ; 背景退避用パーツバンク番号
; #24 ("WIDDISK.ASM"用)
WIDSYSX_INI EQU 17 ; ウインドウPUT初期X座標
WIDSYSY_INI EQU 200-25 ; ウインドウPUT初期Y座標
WIDSYS_SIZEX EQU 46 ; ウインドウサイズX
WIDSYS_SIZEY EQU 50+8 ; ウインドウサイズY
LAMP_X EQU 24 ; LED lamp x.
LAMP_Y EQU 474 ; LED lamp y.
WINDOW SEGMENT PUBLIC 'WINDOW'
ASSUME CS:WINDOW,DS:DATA
; ****************************************************
; WINDOWS/ディスクウインドウ(DSKWID.ASM用)
; -I- BX : 1=ウインドウ・オープン
; : 2=ウインドウ・クローズ
; : 3=ウインドウ・メッセージ/上段
; : 4=ウインドウ・メッセージ/中段
; : 10=ウインドウWAIT
; : 11=ウインドウ・パス名表示
; : 12=アクセスランプ
; DS:SI : メッセージ・アドレス
; DX : 0=OFF,1=ON(アクセスランプ)
; ****************************************************
FUNC WIDDISK
PUSH ES
PUSH AX
PUSH BX
PUSH CX
PUSH DX
PUSH SI
PUSH DI
PUSH BP
PUSH VRX ; VRAM X座標
PUSH VRY ; VRAM Y座標
PUSH VRLENX ; x length.
PUSH VRLENY ; y length.
PUSH PRSBNK ; バンク番号
PUSH PRSSEG ; バンクセグメント
PUSH PRSTOP ; バンクトップオフセット
PUSH PRSEND ; バンクエンドオフセット
PUSH PRSOFS ; パーツバッファのカレントポインタ
PUSH PRSSIZ ; パーツバッファの使用サイズ
PUSH PLSMDE ; 圧縮モード(0:通常,1:縦方向)
PUSH SSGR0 ; visual data segment plean 0
PUSH SSGR1 ; visual data segment plean 1
PUSH SSGR2 ; visual data segment plean 2
PUSH SSGR3 ; visual data segment plean 3
PUSH SSGRW ; visual data plean width.
PUSH SSEFC0 ; visual data segment plean 0
PUSH SSEFC1 ; visual data segment plean 1
PUSH SSEFC2 ; visual data segment plean 2
PUSH SSEFC3 ; visual data segment plean 3
PUSH SSEFCW ; visual data plean width.
PUSH SSDES0 ; visual data segment plean 0
PUSH SSDES1 ; visual data segment plean 1
PUSH SSDES2 ; visual data segment plean 2
PUSH SSDES3 ; visual data segment plean 3
PUSH SSDESW ; visual data plean width.
PUSH WDX1 ; 表示位置X
PUSH WDY1 ; 表示位置Y
PUSH WDX2 ; 大きさX
PUSH WDY2 ; 大きさY
PUSH VX1 ; start point.
PUSH VY1 ; start point.
PUSH VX2 ; end point.
PUSH VY2 ; end point.
PUSH DX
PUSH BX
PUSH SI
MOV_ID2 SSGR0,ARAVRM
MOV_ID2 SSDES0,ARAVRM
POP SI
POP BX
POP DX
CMP BL,1 ;
JE WIDDISK_OPEN ;
CMP BL,2 ;
JE WIDDISK_CLOSE ;
CMP BL,3 ;
JE WIDDISK_1PRINT ;
CMP BL,4 ;
JE WIDDISK_2PRINT ;
CMP BL,10 ;
JE WIDDISK_WAT ;
CMP BL,11 ;
JE WIDDISK_PTH ;
CMP BL,12 ;
JE WIDDISK_LMP ;
JMP WIDDISK_EXIT ;
WIDDISK_OPEN:
CALL WIDOPEN ; ウインドウ・オープン
JMP WIDDISK_EXIT ;
WIDDISK_CLOSE:
CALL WIDCLOSE ; ウインドウ・クローズ
JMP WIDDISK_EXIT ;
WIDDISK_1PRINT:
CALL WID1PRINT ; ウインドウ・メッセージ/上段
JMP WIDDISK_EXIT ;
WIDDISK_2PRINT:
CALL WID2PRINT ; ウインドウ・メッセージ/中段
JMP WIDDISK_EXIT ;
WIDDISK_WAT:
CALL WIDDISK_WAIT ; ディスクウインドウWAIT
JMP WIDDISK_EXIT ;
WIDDISK_PTH:
CALL WIDDISK_PATH ; ディスクウインドウ・パス名表示
JMP WIDDISK_EXIT ;
WIDDISK_LMP:
CALL WIDDISK_LAMP ; アクセスランプ
JMP WIDDISK_EXIT ;
WIDDISK_EXIT:
POP VY2 ; end point.
POP VX2 ; end point.
POP VY1 ; start point.
POP VX1 ; start point.
POP WDY2 ; 大きさY
POP WDX2 ; 大きさX
POP WDY1 ; 表示位置Y
POP WDX1 ; 表示位置X
POP SSDESW ; visual data plean width.
POP SSDES3 ; visual data segment plean 3
POP SSDES2 ; visual data segment plean 2
POP SSDES1 ; visual data segment plean 1
POP SSDES0 ; visual data segment plean 0
POP SSEFCW ; visual data plean width.
POP SSEFC3 ; visual data segment plean 3
POP SSEFC2 ; visual data segment plean 2
POP SSEFC1 ; visual data segment plean 1
POP SSEFC0 ; visual data segment plean 0
POP SSGRW ; visual data plean width.
POP SSGR3 ; visual data segment plean 3
POP SSGR2 ; visual data segment plean 2
POP SSGR1 ; visual data segment plean 1
POP SSGR0 ; visual data segment plean 0
POP PLSMDE ; 圧縮モード(0:通常,1:縦方向)
POP PRSSIZ ; パーツバッファの使用サイズ
POP PRSOFS ; パーツバッファのカレントポインタ
POP PRSEND ; バンクエンドオフセット
POP PRSTOP ; バンクトップオフセット
POP PRSSEG ; バンクセグメント
POP PRSBNK ; バンク番号
POP VRLENY ; y length.
POP VRLENX ; x length.
POP VRY ; VRAM Y座標
POP VRX ; VRAM X座標
POP BP
POP DI
POP SI
POP DX
POP CX
POP BX
POP AX
POP ES
RET
FEND WIDDISK
; ****************************************************
; ウインドウ・オープン
; ****************************************************
WIDOPEN PROC NEAR
CALL BACKSAVE ; 背景をセーブ
MOVX WDX1,WIDPNTXX ; ウインドウ エリア左上座標X
MOVX WDY1,WIDPNTYY ; ウインドウ エリア左上座標Y
MOVX WDX2,WIDSIZEX ; ウインドウ エリアサイズX
MOVX WDY2,WIDSIZEY ; ウインドウ エリアサイズY
CALL_w WID_FLAME_DISK ; WINDOWS/フレーム・ディスクウインドウ
RET
WIDOPEN ENDP
; ****************************************************
; ウインドウ・クローズ
; ****************************************************
WIDCLOSE PROC NEAR
CALL BACKLOAD ; 背景をロード
RET
WIDCLOSE ENDP
; ****************************************************
; ウインドウ・メッセージ/上段
; -I- DS:SI : メッセージ・アドレス
; ****************************************************
WID1PRINT PROC NEAR
MOV STR_ADRS,SI ; 文字列アドレス
MOV AX,WDTXTSIZ ; text size.0=16x16,1=32x32,2=16x24...
CALL_w VTXSIZ ; character size set.
MOV AX,WDTXTCOL ; character color. 0-15
CALL_w VTXCOL ; character color set.
MOV AX,WIDPNTXX ; ウインドウエリア左上座標X
MOV BX,WIDPNTYY ; ウインドウエリア左上座標Y
ADD AX,WIDTXTX1 ; テキスト1座標X
ADD BX,WIDTXTY1 ; テキスト1座標Y
MOV CLRLEN,40 ; clear length.
CALL LINCLR ; 行クリア
MOV SI,STR_ADRS ; 文字列アドレス
CALL_w VTXPOR ; vram text print OR.
RET
WID1PRINT ENDP
; ****************************************************
; ウインドウ・メッセージ/中段
; -I- DS:SI : メッセージ・アドレス
; ****************************************************
WID2PRINT PROC NEAR
MOV STR_ADRS,SI ; 文字列アドレス
MOV AX,WDTXTSIZ ; text size.0=16x16,1=32x32,2=16x24...
CALL_w VTXSIZ ; character size set.
MOV AX,WDTXTCOL ; character color. 0-15
CALL_w VTXCOL ; character color set.
MOV AX,WIDPNTXX ; ウインドウエリア左上座標X
MOV BX,WIDPNTYY ; ウインドウエリア左上座標Y
ADD AX,WIDTXTX2 ; テキスト2座標X
ADD BX,WIDTXTY2 ; テキスト2座標Y
MOV CLRLEN,40 ; clear length.
CALL LINCLR ; 行クリア
MOV SI,STR_ADRS ; 文字列アドレス
CALL_w VTXPOR ; vram text print OR.
RET
WID2PRINT ENDP
; ****************************************************
; ディスクウインドウWAIT
; ****************************************************
WIDDISK_WAIT PROC NEAR
MOV AX,WIDSIZEX ; ウインドウ エリアサイズX
MOV BX,WIDSIZEY ; ウインドウ エリアサイズY
SHR AX,1 ; / 2
SUB AX,2 ; - 2
SUB BX,8 ; - 8
ADD AX,WIDPNTXX ; ウインドウ エリア左上座標X
ADD BX,WIDPNTYY ; ウインドウ エリア左上座標Y
CALL_w MSWWAT ; カーソルボタン待ち
RET
WIDDISK_WAIT ENDP
; ****************************************************
; ディスクウインドウ・パス名表示
; -I- DS:SI : パス名・アドレス
; ****************************************************
WIDDISK_PATH PROC NEAR
MOV STR_ADRS,SI ; 文字列アドレス
MOV AX,15 ; ヘッダー文字表示色
CALL_w MITCOL ; mini string color.
MOV AX,WIDPNTXX ; ウインドウエリア左上座標X
MOV BX,WIDPNTYY ; ウインドウエリア左上座標Y
ADD AX,WIDTXTX3 ; テキスト3座標X
ADD BX,WIDTXTY3 ; テキスト3座標Y
MOV SI,STR_ADRS ; 文字列アドレス
CALL_w MITPRN ; mini string. (null=end of string)
RET
WIDDISK_PATH ENDP
; ****************************************************
; アクセスランプ
; -I- DX : 0=OFF,1=ON,2=ON2.
; ****************************************************
WIDDISK_LAMP PROC NEAR
;*; CMP MFLAG_MY,MFLAG_PCAT ; PC/AT
;*; JE WIDDISK_LAMP_START ;
;*; RET
;*;WIDDISK_LAMP_START:
CMP FLAG_TYPE4_WIN_DISABLE,0 ;flag type4 window.
JNE WIDDISK_LAMP_START ;
RET
WIDDISK_LAMP_START:
CMP DL,1 ; 1=ON.
JE WIDDISK_LAMP_ON ;
CMP DL,2 ; 2=ON2.
JE WIDDISK_LAMP_2ON ;
WIDDISK_LAMP_OFF:
MOV SI,OFFSET LAMP_OFF_PTN ; lamp OFF pattern.
JMP WIDDISK_LAMP_PUT ;
WIDDISK_LAMP_ON:
MOV SI,OFFSET LAMP_ON1_PTN ; lamp ON1 pattern.
JMP WIDDISK_LAMP_PUT ;
WIDDISK_LAMP_2ON:
MOV SI,OFFSET LAMP_ON2_PTN ; lamp ON2 pattern.
WIDDISK_LAMP_PUT:
PUSH SI ;
MOV_ID2 SSEFC0,ARAVRM ; efect data segment.
POP SI
MOV VX1,LAMP_X ; LED lamp x.
MOV VY1,LAMP_Y ; LED lamp y.
CALL_w BOXLEDLAMP ; LED like lamp.
RET
WIDDISK_LAMP ENDP
; ****************************************************
; 背景をロード
; ****************************************************
BACKLOAD PROC NEAR
MOV DX,BACKSAVE_BANK ; 背景退避用パーツバンク番号
CALL_w C1PATBNK ; バンクチェンジ
MOV DX,0 ; 圧縮モード(0:通常,1:縦方向)
CALL_w C1PLSMOD ; 圧縮モード切り替え
MOV CX,0 ; 背景退避用パーツ番号
CALL_w C1PATPUT ; パーツPUT
RET
BACKLOAD ENDP
; ****************************************************
; 背景をセーブ
; -I- WIDBAKXP : 背景退避エリア左上座標X
; WIDBAKYP : 背景退避エリア左上座標Y
; WIDBAKXL : 背景退避エリアサイズX
; WIDBAKYL : 背景退避エリアサイズY
; ****************************************************
BACKSAVE PROC NEAR
MOV DX,BACKSAVE_BANK ; 背景退避用パーツバンク番号
CALL_w C1PATBNK ; バンクチェンジ
CALL_w C1PATCLR ; パーツセットクリア
MOVX VRX,WIDBAKXP ; 背景退避エリア左上座標X
MOVX VRY,WIDBAKYP ; 背景退避エリア左上座標Y
MOVX VRLENX,WIDBAKXL ; 背景退避エリアサイズX
MOVX VRLENY,WIDBAKYL ; 背景退避エリアサイズY
CALL_w C1PATGTA ; パーツGET圧縮無し
RET
BACKSAVE ENDP
; ****************************************************
; 行クリア
; -I- AX : 行表示座標X
; BX : 行表示座標Y
; ****************************************************
LINCLR PROC NEAR
PUSH AX
PUSH BX
PUSH BX
PUSH AX
MOV_ID2 SSEFC0,ARAVRM ; efect data segment.
POP AX
POP BX
MOV WDX1,AX ; 表示位置X
MOV WDY1,BX ; 表示位置Y
MOV AX,CLRLEN ; clear length.
INC AX ;
MOV WDX2,AX ;
MOV WDY2,16 ; +16
CALL_w WID_FLAME_DISK_BOX ; WINDOWS/フレーム・ディスクウインドウ BOX
POP BX
POP AX
RET
LINCLR ENDP
; ****************************************************
; テキスト地色
; -I- VX1,VY1 : start point.
; VX2,VY2 : end point.
; ****************************************************
JI_TEXT PROC NEAR
MOV CX,W_COL6 ; WINDOWS/カラー・テキスト地色1
MOV BX,W_COL7 ; WINDOWS/カラー・テキスト地色1
CALL_w BOXMCH ; BOXチェック模様
RET
JI_TEXT ENDP
WINDOW ENDS
DATA SEGMENT PUBLIC 'DATA'
EXTRN FLAG_TYPE4_WIN_DISABLE:WORD ;flag type4 window.
;(WIDTEXT.ASM/WIDDISK.ASM)
EXTRN PLSMDE:WORD ; 圧縮モード(0:通常,1:縦方向)
EXTRN PRSBNK:WORD ; バンク番号
EXTRN PRSSEG:WORD ; バンクセグメント
EXTRN PRSTOP:WORD ; バンクトップオフセット
EXTRN PRSEND:WORD ; バンクエンドオフセット
EXTRN PRSOFS:WORD ; パーツバッファのカレントポインタ
EXTRN PRSSIZ:WORD ; パーツバッファの使用サイズ
W_COL6 DW 4 ; WINDOWS/カラー・テキスト地色1
W_COL7 DW 0 ; WINDOWS/カラー・テキスト地色1
WIDBAKXP DW WIDSYSX_INI ; 背景退避エリア左上座標X
WIDBAKYP DW WIDSYSY_INI ; 背景退避エリア左上座標Y
WIDBAKXL DW WIDSYS_SIZEX ; 背景退避エリアサイズX
WIDBAKYL DW WIDSYS_SIZEY ; 背景退避エリアサイズY
WIDPNTXX DW WIDSYSX_INI ; ウインドウ エリア左上座標X
WIDPNTYY DW WIDSYSY_INI ; ウインドウ エリア左上座標Y
WIDSIZEX DW WIDSYS_SIZEX ; ウインドウ エリアサイズX
WIDSIZEY DW WIDSYS_SIZEY ; ウインドウ エリアサイズY
WIDTXTX1 DW 2 ; テキスト1座標X
WIDTXTY1 DW 6 ; テキスト1座標Y
WIDTXTX2 DW 2 ; テキスト2座標X
WIDTXTY2 DW 26 ; テキスト2座標Y
WIDTXTX3 DW 2 ; テキスト3座標X
WIDTXTY3 DW 46 ; テキスト3座標Y
WDTXTSIZ DW 0 ; text size.0=16x16,1=32x32,2=16x24...
WDTXTCOL DW 15 ; character color. 0-15
CLRLEN DW 0 ; clear length.
STR_ADRS DW 0 ; 文字列アドレス
LAMP_ON1_PTN DB 000H,0FFH,000H,0FFH ; lamp ON1 pattern.
LAMP_ON2_PTN DB 000H,000H,0FFH,0FFH ; lamp ON2 pattern.
LAMP_OFF_PTN DB 000H,000H,000H,000H ; lamp OFF pattern.
DATA ENDS
END
;
; end of "WIDDISK.ASM"
;