戻る
; "VMUSCOR.ASM" 1989/03/21 R.H PC-9801UV11 make by R.H 1989
; modify 1992/05/20 r.h 486/50
;
; mouse cursole.
;
; public subroutine.
INCLUDE TSTSET.INC
INCLUDE MACHINEX.INC
PUBLIC MSCMOV_I ; カーソル移動/割込み
RETFAR MACRO ; far return.
DB 11001011B ; RETF
ENDM
CODE SEGMENT PUBLIC 'CODE'
EXTRN XSTOPX:FAR ; STOPキー終了処理
CODE ENDS
CODE01 SEGMENT PUBLIC 'CODE01'
ASSUME CS:CODE01,DS:DATA
PUBLIC MSCSRT ; カーソルスタート
PUBLIC MSCMOV ; カーソル移動
PUBLIC MSCMV2 ; カーソル移動(遅延処理無し)
PUBLIC MSCSTP ; カーソルストップ
PUBLIC MSCSTS ; マウスカーソルステータス
;;PUBLIC MSCPNT ; カーソル表示位置
PUBLIC MSCCHG ; マウスカーソル選択
PUBLIC MSCINTSW ; マウス割り込みカーソルON/OFF
PUBLIC MSCPLNMDE ; カーソル・プレーンモード
EXTRN MUSINI:NEAR ; マウスの初期化
EXTRN MUSRED:NEAR ; マウス読み込み
EXTRN MUSWRD:NEAR ; マウス読み込み・遅延処理付き
EXTRN MUSSTP:NEAR ; マウスの終了
EXTRN C1VV_BANK_CHG_ES:NEAR ; vram bank check & chenge.(WRITE) ES
EXTRN C1VV_BANK_XCG_ES:NEAR ; vram bank check & chenge.(READ/WRITE) ES
EXTRN C1VV_BANK_PLN_DS:NEAR ; vram bank check & chenge.(READ) DS
;*; ; オートデモの実行を中断させるために
;*; ; マウスボタンを利用する。
;*; EXTRN AUTO_DEMO_STOP:NEAR ; オート実行ストップ
AUTO_DEMO_STOP:RET
CUSLINE EQU 32 ; カーソルライン数
CUSLINE_SV EQU 32 ; エリア退避ライン数
MUSMAX_X EQU 640-8*4 ;80-4 ; マウス座標最大X
MUSMAX_Y EQU 400-32 ; マウス座標最大Y
OFST_X EQU 0 ; マウス座標オフセットX
OFST_Y EQU 0 ; マウス座標オフセットY
MUSSIZ_X EQU 4 ; マウスサイズX
MUSSIZ_Y EQU 4*8 ; マウスサイズY
; カーソルスタート
MSCSRT PROC NEAR
MOV MUSFLG,2 ; 2=マウスカーソル書換中(割込防止)
CALL MUSWRD ; マウス読み込み・遅延処理付き
CALL ADJMOV ; 移動量調整
MOV CURX,AX ;
MOV CURY,BX ;
MOV AX,SELNUM ; 選択カーソル番号
CALL MSCCHG ; マウスカーソル選択
CALL XVRAM_SAVE ; VRAM退避
CALL XVRAM_PUT ; VRAMカーソルPUT
MOV MUSFLG,1 ; 1=マウスカーソル表示中
RET
MSCSRT ENDP
; カーソルストップ
MSCSTP PROC NEAR
MOV MUSFLG,0 ; 0=マウスOFF
CALL XVRAM_LOAD ; VRAM戻す
RET
MSCSTP ENDP
; カーソル移動
; -O- AX : X座標
; BX : Y座標
; DH : 左ボタン(1:OFF/0:ON)
; DL : 右ボタン(1:OFF/0:ON)
MSCMOV PROC NEAR
MOV MUSFLG,2 ; 2=マウスカーソル書換中(割込防止)
CALL MUSWRD ; マウス読み込み・遅延処理付き
CALL ADJMOV ; 移動量調整
CMP AX,CURX ; カーソルX
JNE MSCMOV5 ;
CMP BX,CURY ; カーソルY
JNE MSCMOV5 ;
JMP MSCMOV9
MSCMOV5:
PUSH AX
PUSH BX
PUSH DX
CALL XVRAM_LOAD ; VRAM戻す
MOV AX,CURNEWX ; カーソル新しいX
MOV CURX,AX ;
MOV AX,CURNEWY ; カーソル新しいY
MOV CURY,AX ;
CALL XVRAM_SAVE ; VRAM退避
CALL XVRAM_PUT ; VRAMカーソルPUT
POP DX
POP BX
POP AX
MSCMOV9:
ADD AX,OFST_X
ADD BX,OFST_Y
CALL ADJUSR ; ユーザ座標調整
;*; CMP CURX,0 ; X ここはデバックのための
;*; JNE MSCMOV_DBG ; 強制終了処理です。
;*; CMP CURY,0 ; Y
;*; JNE MSCMOV_DBG ;
;*; CMP DH,0 ;
;*; JNE MSCMOV_DBG ;
;*; MOV BP,SP ;
;*; MOV AX,OFFSET XSTOPX ; STOPキー終了処理
;*; MOV [BP],AX ; IP
;*; MOV AX,SEG CODE ;
;*; MOV [BP][2],AX ; CS
;*; ; SS:SP [ I P ] +0
;*; ; [ C S ] +2
;*; RETFAR ; far return.
;*;MSCMOV_DBG:
MOV MUSFLG,1 ; 1=マウスカーソル表示中
RET
MSCMOV ENDP
; カーソル移動(遅延処理無し)
; -O- AX : X座標
; BX : Y座標
; DH : 左ボタン(1:OFF/0:ON)
; DL : 右ボタン(1:OFF/0:ON)
MSCMV2 PROC NEAR
MOV MUSFLG,2 ; 2=マウスカーソル書換中(割込防止)
CALL MUSRED ; マウス読み込み
CALL ADJMOV ; 移動量調整
CMP AX,CURX ; カーソルX
JNE MSCMV25 ;
CMP BX,CURY ; カーソルY
JNE MSCMV25 ;
JMP MSCMV29
MSCMV25:
PUSH AX
PUSH BX
PUSH DX
CALL XVRAM_LOAD ; VRAM戻す
MOV AX,CURNEWX ; カーソル新しいX
MOV CURX,AX ;
MOV AX,CURNEWY ; カーソル新しいY
MOV CURY,AX ;
CALL XVRAM_SAVE ; VRAM退避
CALL XVRAM_PUT ; VRAMカーソルPUT
POP DX
POP BX
POP AX
MSCMV29:
ADD AX,OFST_X
ADD BX,OFST_Y
CALL ADJUSR ; ユーザ座標調整
MOV MUSFLG,1 ; 1=マウスカーソル表示中
RET
MSCMV2 ENDP
; カーソル移動/割込み
MSCMOV_I PROC FAR
PUSH DS
PUSH ES
PUSH AX
PUSH BX
PUSH CX
PUSH DX
PUSH SI
PUSH DI
PUSH BP
MOV AX,SEG DATA ;
MOV DS,AX ;
CMP FLAG_MSCINTSW,0 ; マウス割り込みカーソルON/OFF
JE MSCMOV_I_9 ;
CMP PLEAN_MODE,1 ; プレーンモード 0=片面,1=両面
JE MSCMOV_I_9 ;
CMP MUSFLG,1 ; 1=マウスカーソル表示中
JE MSCMOV_I_START ;
JMP MSCMOV_I_9 ;
MSCMOV_I_START:
CALL MUSRED ; マウス読み込み
CALL ADJMOV ; 移動量調整
CMP AX,CURX ; カーソルX
JNE MSCMOV_I_5
CMP BX,CURY ; カーソルY
JNE MSCMOV_I_5
JMP MSCMOV_I_9
MSCMOV_I_5:
MOV DX,TBLSAVBUF[0] ; table save buffer adrs.
MOV VRMSAVEBUF,DX ;
CALL VRAM_LOAD ; VRAM戻す
MOV AX,CURNEWX ; カーソル新しいX
MOV CURX,AX
MOV AX,CURNEWY ; カーソル新しいY
MOV CURY,AX
MOV DX,TBLSAVBUF[0] ; table save buffer adrs.
MOV VRMSAVEBUF,DX ;
CALL VRAM_SAVE ; VRAM退避
CALL VRAM_PUT ; VRAMカーソルPUT
MSCMOV_I_9:
POP BP
POP DI
POP SI
POP DX
POP CX
POP BX
POP AX
POP ES
POP DS
RET
MSCMOV_I ENDP
; マウスカーソルステータス
; -O- AX : 0=マウスOFF,1=マウスカーソル表示中
MSCSTS PROC NEAR
MOV AX,MUSFLG ; 1=マウスカーソル表示中,0=マウスOFF
RET
MSCSTS ENDP
;*;; カーソル表示位置
;*;; -O- AX : 左上X座標
;*;; BX : 左上Y座標
;*;; CX : 右下X座標
;*;; DX : 右下Y座標
;*;
;*;MSCPNT PROC NEAR
;*; CALL MSCMOV ; カーソル移動
;*; MOV MUSFLG,2 ; 2=マウスカーソル書換中(割込防止)
;*; MOV CX,AX ; X座標
;*; MOV DX,BX ; Y座標
;*; ADD CX,MUSSIZ_X ; マウスサイズX
;*; ADD DX,MUSSIZ_Y ; マウスサイズY
;*; RET
;*;MSCPNT ENDP
; 移動量調整
; -I/O- AX : X座標
; BX : Y座標
; -O- CURNEWX : カーソル新しいX
; CURNEWY : カーソル新しいY
ADJMOV PROC NEAR
TEST AX,8000H
JZ ADJMOV20
MOV AX,0
JMP ADJMOV2
ADJMOV20:
CMP AX,MUSMAX_X ; マウス座標最大X
JLE ADJMOV2 ;
MOV AX,MUSMAX_X ; マウス座標最大X
ADJMOV2:
MOV CURNEWX,AX ; カーソル新しいX
TEST BX,8000H
JZ ADJMOV30
MOV BX,0
JMP ADJMOV3
ADJMOV30:
CMP BX,MUSMAX_Y ; マウス座標最大Y
JLE ADJMOV3 ;
MOV BX,MUSMAX_Y ; マウス座標最大Y
ADJMOV3:
MOV CURNEWY,BX ; カーソル新しいY
RET
ADJMOV ENDP
; ユーザ座標調整
; -I/O- AX : X座標
; BX : Y座標
ADJUSR PROC NEAR
SHR AX,1 ; AX = AX / 8
SHR AX,1 ;
SHR AX,1 ;
CMP MOVE_MODE,1 ; カーソル移動モード
JE ADJUSR_1 ;
SHR BX,1 ; BX = BX / 8
SHR BX,1 ;
SHR BX,1 ;
ADJUSR_1:
RET
ADJUSR ENDP
; デモモード制御
; オートデモの実行を中断させるために
; マウスボタンを利用する。
; -I- DH : 左ボタン(1:OFF/0:ON)
; DL : 右ボタン(1:OFF/0:ON)
DEMO_MUS_MODE PROC NEAR
CMP DH,0 ; 左ボタン(1:OFF/0:ON)
JE DEMO_MUS_MODE_1 ;
CMP DL,0 ; 右ボタン(1:OFF/0:ON)
JE DEMO_MUS_MODE_1 ;
JMP DEMO_MUS_MODE_2 ;
DEMO_MUS_MODE_1: ;
PUSH AX
PUSH BX
PUSH DX
CALL AUTO_DEMO_STOP ; オート実行ストップ
POP DX
POP BX
POP AX
DEMO_MUS_MODE_2:
RET
DEMO_MUS_MODE ENDP
; マウスカーソル選択
; -I- AX : カーソル番号
MSCCHG PROC NEAR
MOV SELNUM,AX ; 選択カーソル番号
CMP AX,0
JE MSCCHG_1
CMP AX,1
JE MSCCHG_2
RET
MSCCHG_1:
MOV AX,OFFSET MUSCURSOLE_1
MOV SELDAT0,AX
MOV AX,OFFSET MUSCURSOLE_1+4*32
MOV SELDAT1,AX
MOV AX,OFFSET MUSCURSOLE_1+4*32*2
MOV SELDAT2,AX
MOV AX,OFFSET MUSCURSOLE_1+4*32*3
MOV SELDAT3,AX
MOV AX,OFFSET MUSCURSOLE_1+4*32*4 ; カーソルマスク
MOV SELMSK,AX
JMP MSCCHG_DATSET
MSCCHG_2:
MOV AX,OFFSET MUSCURSOLE_3
MOV SELDAT0,AX
MOV AX,OFFSET MUSCURSOLE_3+4*32
MOV SELDAT1,AX
MOV AX,OFFSET MUSCURSOLE_3+4*32*2
MOV SELDAT2,AX
MOV AX,OFFSET MUSCURSOLE_3+4*32*3
MOV SELDAT3,AX
MOV AX,OFFSET MUSCURSOLE_3+4*32*4 ; カーソルマスク
MOV SELMSK,AX
MSCCHG_DATSET:
MOVX ES,DS
MOV SI,SELDAT0
MOV DI,OFFSET VRMBUF0
MOV CX,32
MOV AL,0
MSCCHG_51:
MOVSW
MOVSW
STOSB
LOOP MSCCHG_51
MOV SI,SELDAT1
MOV DI,OFFSET VRMBUF1
MOV CX,32
MOV AL,0
MSCCHG_52:
MOVSW
MOVSW
STOSB
LOOP MSCCHG_52
MOV SI,SELDAT2
MOV DI,OFFSET VRMBUF2
MOV CX,32
MOV AL,0
MSCCHG_53:
MOVSW
MOVSW
STOSB
LOOP MSCCHG_53
MOV SI,SELDAT3
MOV DI,OFFSET VRMBUF3
MOV CX,32
MOV AL,0
MSCCHG_54:
MOVSW
MOVSW
STOSB
LOOP MSCCHG_54
MOV SI,SELMSK
MOV DI,OFFSET VRMBUFM
MOV CX,32
MOV AL,0FFH
MSCCHG_55:
MOVSW
MOVSW
STOSB
LOOP MSCCHG_55
MOV NOWSHIFT,0 ; 現在のシフト量
RET
MSCCHG ENDP
; マウス割り込みカーソルON/OFF
; -I- AX : 1=ON,0=OFF
MSCINTSW PROC NEAR
MOV FLAG_MSCINTSW,AX ; マウス割り込みカーソルON/OFF
RET
MSCINTSW ENDP
; カーソル・プレーンモード
; -I- AX : 0=normal put,1=two side put.
MSCPLNMDE PROC NEAR
MOV PLEAN_MODE,AX ; プレーンモード 0=片面,1=両面
RET
MSCPLNMDE ENDP
; VRAM退避
XVRAM_SAVE PROC NEAR
CMP MFLAG_MY,MFLAG_PC98 ; PC9801
JNE XVRAM_SAVE_ONE_SIDE ;
CMP PLEAN_MODE,1 ; プレーンモード 0=片面,1=両面
JE XVRAM_SAVE_TWO_SIDE ;
XVRAM_SAVE_ONE_SIDE:
MOV DX,TBLSAVBUF[0] ; table save buffer adrs.
MOV VRMSAVEBUF,DX ;
CALL VRAM_SAVE ; VRAM退避
RET
XVRAM_SAVE_TWO_SIDE:
CALLE VRM98NOW ; PC98 vram bank now.
MOV AX,BX ;
PUSH AX ; 0=VRAM0 write,1=VRAM1 write.
XOR AX,1 ;
MOV BX,AX ;
SHL BX,1 ; word pointer.
MOV DX,TBLSAVBUF[BX] ; table save buffer adrs.
MOV VRMSAVEBUF,DX ;
CALLE VRM98WT ; PC98 vram write bank.
CALL VRAM_SAVE ; VRAM退避
POP AX ;
MOV BX,AX ;
SHL BX,1 ; word pointer.
MOV DX,TBLSAVBUF[BX] ; table save buffer adrs.
MOV VRMSAVEBUF,DX ;
CALLE VRM98WT ; PC98 vram write bank.
CALL VRAM_SAVE ; VRAM退避
RET
XVRAM_SAVE ENDP
; VRAM戻す
XVRAM_LOAD PROC NEAR
CMP MFLAG_MY,MFLAG_PC98 ; PC9801
JNE XVRAM_LOAD_ONE_SIDE ;
CMP PLEAN_MODE,1 ; プレーンモード 0=片面,1=両面
JE XVRAM_LOAD_TWO_SIDE ;
XVRAM_LOAD_ONE_SIDE:
MOV DX,TBLSAVBUF[0] ; table save buffer adrs.
MOV VRMSAVEBUF,DX ;
CALL VRAM_LOAD ; VRAM戻す
RET
XVRAM_LOAD_TWO_SIDE:
CALLE VRM98NOW ; PC98 vram bank now.
MOV AX,BX ;
PUSH AX ; 0=VRAM0 write,1=VRAM1 write.
XOR AX,1 ;
MOV BX,AX ;
SHL BX,1 ; word pointer.
MOV DX,TBLSAVBUF[BX] ; table save buffer adrs.
MOV VRMSAVEBUF,DX ;
CALLE VRM98WT ; PC98 vram write bank.
CALL VRAM_LOAD ; VRAM戻す
POP AX ;
MOV BX,AX ;
SHL BX,1 ; word pointer.
MOV DX,TBLSAVBUF[BX] ; table save buffer adrs.
MOV VRMSAVEBUF,DX ;
CALLE VRM98WT ; PC98 vram write bank.
CALL VRAM_LOAD ; VRAM戻す
RET
XVRAM_LOAD ENDP
; VRAMカーソルPUT
XVRAM_PUT PROC NEAR
CMP MFLAG_MY,MFLAG_PC98 ; PC9801
JNE XVRAM_PUT_ONE_SIDE ;
CMP PLEAN_MODE,1 ; プレーンモード 0=片面,1=両面
JE XVRAM_PUT_TWO_SIDE ;
XVRAM_PUT_ONE_SIDE:
CALL VRAM_PUT ; VRAMカーソルPUT
RET
XVRAM_PUT_TWO_SIDE:
CALLE VRM98NOW ; PC98 vram bank now.
MOV AX,BX ;
PUSH AX ; 0=VRAM0 write,1=VRAM1 write.
XOR AX,1 ;
MOV BX,AX ;
SHL BX,1 ; word pointer.
CALLE VRM98WT ; PC98 vram write bank.
CALL VRAM_PUT ; VRAMカーソルPUT
POP AX ;
MOV BX,AX ;
SHL BX,1 ; word pointer.
CALLE VRM98WT ; PC98 vram write bank.
CALL VRAM_PUT ; VRAMカーソルPUT
RET
XVRAM_PUT ENDP
; VRAM退避
VRAM_SAVE PROC NEAR
PUSH DS
MOV AX,CURY ; カーソルY
MUL SSCURW ; * visual data plean width.
MOV DX,CURX ;
SHR DX,1 ;
SHR DX,1 ;
SHR DX,1 ;
ADD AX,DX ; + カーソルX/8
MOV BX,AX ; BX =
MOV SI,BX ; 先頭オフセット
MOV DI,VRMSAVEBUF ; VRAM退避エリア
MOV BP,SSCURW ; BP=visual data plean width.
SUB BP,5 ; add width.
MOVX ES,DS ; データセグメント
MOV DX,DS
MOVX DS,SSCUR0 ; visual data segment plean 0
CALL C1VV_BANK_PLN_DS ; vram bank check & chenge.(READ) DS
MOV CX,CUSLINE_SV ; エリア退避ライン数
VRAM_SAVE2:
MOVSW ;
MOVSW ;
MOVSB ;
ADD SI,BP ; add width.
LOOP VRAM_SAVE2
MOV SI,BX ; 先頭オフセット
MOV DS,DX ;
MOVX DS,SSCUR1 ; visual data segment plean 1
CALL C1VV_BANK_PLN_DS ; vram bank check & chenge.(READ) DS
MOV CX,CUSLINE_SV ; エリア退避ライン数
VRAM_SAVE3:
MOVSW ;
MOVSW ;
MOVSB ;
ADD SI,BP ; add width.
LOOP VRAM_SAVE3
MOV SI,BX ; 先頭オフセット
MOV DS,DX ;
MOVX DS,SSCUR2 ; visual data segment plean 2
CALL C1VV_BANK_PLN_DS ; vram bank check & chenge.(READ) DS
MOV CX,CUSLINE_SV ; エリア退避ライン数
VRAM_SAVE4:
MOVSW ;
MOVSW ;
MOVSB ;
ADD SI,BP ; add width.
LOOP VRAM_SAVE4
MOV SI,BX ; 先頭オフセット
MOV DS,DX ;
MOVX DS,SSCUR3 ; visual data segment plean 3
CALL C1VV_BANK_PLN_DS ; vram bank check & chenge.(READ) DS
MOV CX,CUSLINE_SV ; エリア退避ライン数
VRAM_SAVE5:
MOVSW ;
MOVSW ;
MOVSB ;
ADD SI,BP ; add width.
LOOP VRAM_SAVE5
POP DS
RET
VRAM_SAVE ENDP
; VRAM戻す
VRAM_LOAD PROC NEAR
MOV AX,CURY ; カーソルY
MUL SSCURW ; * visual data plean width.
MOV DX,CURX ;
SHR DX,1 ;
SHR DX,1 ;
SHR DX,1 ;
ADD AX,DX ; + カーソルX/8
MOV BX,AX ; BX =
MOV SI,VRMSAVEBUF ; VRAM退避エリア
MOV DI,BX ; 先頭オフセット
MOV BP,SSCURW ; BP=visual data plean width.
SUB BP,5 ; add width.
MOV ES,SSCUR0 ; visual data segment plean 0
CALL C1VV_BANK_CHG_ES ; vram bank check & chenge.(WRITE) ES
MOV CX,CUSLINE_SV ; エリア退避ライン数
VRAM_LOAD2:
MOVSW ;
MOVSW ;
MOVSB ;
ADD DI,BP ; add width.
LOOP VRAM_LOAD2
MOV DI,BX ; 先頭オフセット
MOV ES,SSCUR1 ; visual data segment plean 1
CALL C1VV_BANK_CHG_ES ; vram bank check & chenge.(WRITE) ES
MOV CX,CUSLINE_SV ; エリア退避ライン数
VRAM_LOAD3:
MOVSW ;
MOVSW ;
MOVSB ;
ADD DI,BP ; add width.
LOOP VRAM_LOAD3
MOV DI,BX ; 先頭オフセット
MOV ES,SSCUR2 ; visual data segment plean 2
CALL C1VV_BANK_CHG_ES ; vram bank check & chenge.(WRITE) ES
MOV CX,CUSLINE_SV ; エリア退避ライン数
VRAM_LOAD4:
MOVSW ;
MOVSW ;
MOVSB ;
ADD DI,BP ; add width.
LOOP VRAM_LOAD4
MOV DI,BX ; 先頭オフセット
MOV ES,SSCUR3 ; visual data segment plean 3
CALL C1VV_BANK_CHG_ES ; vram bank check & chenge.(WRITE) ES
MOV CX,CUSLINE_SV ; エリア退避ライン数
VRAM_LOAD5:
MOVSW ;
MOVSW ;
MOVSB ;
ADD DI,BP ; add width.
LOOP VRAM_LOAD5
RET
VRAM_LOAD ENDP
; VRAMカーソルPUT
VRAM_PUT PROC NEAR
PUSH DX
PUSH BP
MOV AX,CURX ; + カーソルX
MOV DX,0 ;
MOV CX,8 ;
DIV CX ;
PUSH AX ;
CALL MOUSE_SHIFT ; マウスデータシフト
POP BX
POP BP
POP DX
MOV AX,CURY ; カーソルY
MUL SSCURW ; * visual data plean width.
ADD BX,AX ; BX=start address.
MOV BP,SSCURW ; BP=visual data plean width.
SUB BP,5 ; add width.
MOV SI,CUSMSK ; カーソルマスク
MOV DI,BX ; 先頭オフセット
MOV ES,SSCUR0 ; visual data segment plean 0
CALL C1VV_BANK_XCG_ES ;vram bank check & chenge.(READ/WRITE)
MOV CX,CUSLINE ; カーソルライン数
VRAM_PUT2:
LODSW ;
AND ES:[DI],AX ;
INC DI ;
INC DI ;
LODSW ;
AND ES:[DI],AX ;
INC DI ;
INC DI ;
LODSB ;
AND ES:[DI],AL ;
INC DI ;
ADD DI,BP ; add width.
LOOP VRAM_PUT2
MOV SI,CUSDAT0 ; カーソル
MOV DI,BX ; 先頭オフセット
MOV CX,CUSLINE ; カーソルライン数
VRAM_PUT22:
LODSW ;
OR ES:[DI],AX ;
INC DI ;
INC DI ;
LODSW ;
OR ES:[DI],AX ;
INC DI ;
INC DI ;
LODSB ;
OR ES:[DI],AL ;
INC DI ;
ADD DI,BP ; add width.
LOOP VRAM_PUT22
MOV SI,CUSMSK ; カーソルマスク
MOV DI,BX ; 先頭オフセット
MOV ES,SSCUR1 ; visual data segment plean 1
CALL C1VV_BANK_XCG_ES ;vram bank check & chenge.(READ/WRITE)
MOV CX,CUSLINE ; カーソルライン数
VRAM_PUT3:
LODSW ;
AND ES:[DI],AX ;
INC DI ;
INC DI ;
LODSW ;
AND ES:[DI],AX ;
INC DI ;
INC DI ;
LODSB ;
AND ES:[DI],AL ;
INC DI ;
ADD DI,BP ; add width.
LOOP VRAM_PUT3
MOV SI,CUSDAT1 ; カーソル
MOV DI,BX ; 先頭オフセット
MOV CX,CUSLINE ; カーソルライン数
VRAM_PUT33:
LODSW ;
OR ES:[DI],AX ;
INC DI ;
INC DI ;
LODSW ;
OR ES:[DI],AX ;
INC DI ;
INC DI ;
LODSB ;
OR ES:[DI],AL ;
INC DI ;
ADD DI,BP ; add width.
LOOP VRAM_PUT33
MOV SI,CUSMSK ; カーソルマスク
MOV DI,BX ; 先頭オフセット
MOV ES,SSCUR2 ; visual data segment plean 2
CALL C1VV_BANK_XCG_ES ;vram bank check & chenge.(READ/WRITE)
MOV CX,CUSLINE ; カーソルライン数
VRAM_PUT4:
LODSW ;
AND ES:[DI],AX ;
INC DI ;
INC DI ;
LODSW ;
AND ES:[DI],AX ;
INC DI ;
INC DI ;
LODSB ;
AND ES:[DI],AL ;
INC DI ;
ADD DI,BP ; add width.
LOOP VRAM_PUT4
MOV SI,CUSDAT2 ; カーソル
MOV DI,BX ; 先頭オフセット
MOV CX,CUSLINE ; カーソルライン数
VRAM_PUT44:
LODSW ;
OR ES:[DI],AX ;
INC DI ;
INC DI ;
LODSW ;
OR ES:[DI],AX ;
INC DI ;
INC DI ;
LODSB ;
OR ES:[DI],AL ;
INC DI ;
ADD DI,BP ; add width.
LOOP VRAM_PUT44
MOV SI,CUSMSK ; カーソルマスク
MOV DI,BX ; 先頭オフセット
MOV ES,SSCUR3 ; visual data segment plean 3
CALL C1VV_BANK_XCG_ES ;vram bank check & chenge.(READ/WRITE)
MOV CX,CUSLINE ; カーソルライン数
VRAM_PUT5:
LODSW ;
AND ES:[DI],AX ;
INC DI ;
INC DI ;
LODSW ;
AND ES:[DI],AX ;
INC DI ;
INC DI ;
LODSB ;
AND ES:[DI],AL ;
INC DI ;
ADD DI,BP ; add width.
LOOP VRAM_PUT5
MOV SI,CUSDAT3 ; カーソル
MOV DI,BX ; 先頭オフセット
MOV CX,CUSLINE ; カーソルライン数
VRAM_PUT55:
LODSW ;
OR ES:[DI],AX ;
INC DI ;
INC DI ;
LODSW ;
OR ES:[DI],AX ;
INC DI ;
INC DI ;
LODSB ;
OR ES:[DI],AL ;
INC DI ;
ADD DI,BP ; add width.
LOOP VRAM_PUT55
RET
VRAM_PUT ENDP
; マウスデータシフト
; -I- DX : シフト量
MOUSE_SHIFT PROC NEAR
CMP DX,NOWSHIFT ; 現在のシフト量
JL MOUSE_SHIFT_LT ;
JG MOUSE_SHIFT_GT ;
RET
MOUSE_SHIFT_LT:
MOV AX,DX ;
MOV BX,NOWSHIFT ; 現在のシフト量
SUB BX,DX ; 新しいシフト量
MOV DX,BX ;
MOV NOWSHIFT,AX ; 現在のシフト量
MOV SI,OFFSET VRMBUF0 ; VRAMエリア
CALL MOUSE_SHIFT_LEFT ; mouse shift left.
MOV SI,OFFSET VRMBUF1 ; VRAMエリア
CALL MOUSE_SHIFT_LEFT ; mouse shift left.
MOV SI,OFFSET VRMBUF2 ; VRAMエリア
CALL MOUSE_SHIFT_LEFT ; mouse shift left.
MOV SI,OFFSET VRMBUF3 ; VRAMエリア
CALL MOUSE_SHIFT_LEFT ; mouse shift left.
MOV SI,OFFSET VRMBUFM ; VRAMエリア
CALL MOUSE_SHIFT_LEFT ; mouse shift left.
RET
MOUSE_SHIFT_GT:
MOV AX,DX ;
SUB DX,NOWSHIFT ; 現在のシフト量
MOV NOWSHIFT,AX ; 現在のシフト量
MOV SI,OFFSET VRMBUF0 ; VRAMエリア
CALL MOUSE_SHIFT_RIGHT ; mouse shift right.
MOV SI,OFFSET VRMBUF1 ; VRAMエリア
CALL MOUSE_SHIFT_RIGHT ; mouse shift right.
MOV SI,OFFSET VRMBUF2 ; VRAMエリア
CALL MOUSE_SHIFT_RIGHT ; mouse shift right.
MOV SI,OFFSET VRMBUF3 ; VRAMエリア
CALL MOUSE_SHIFT_RIGHT ; mouse shift right.
MOV SI,OFFSET VRMBUFM ; VRAMエリア
CALL MOUSE_SHIFT_RIGHT ; mouse shift right.
RET
MOUSE_SHIFT ENDP
; mouse shift right.
; -I- DL : shift.
; SI : data address.
MOUSE_SHIFT_RIGHT PROC NEAR
CMP DL,0
JNE MOUSE_SHIFT_RIGHT_START
RET
MOUSE_SHIFT_RIGHT_START:
MOV CX,32
MOUSE_SHIFT_1:
MOV BP,CX
MOV AX,DS:[SI]
MOV BX,DS:[SI][2]
MOV DH,DS:[SI][4]
XCHG AH,AL
XCHG BH,BL
MOV CH,0
MOV CL,DL
ROR DH,1
ROL DH,1
MOUSE_SHIFT_12:
RCR AX,1
RCR BX,1
RCR DH,1
LOOP MOUSE_SHIFT_12
XCHG AH,AL
XCHG BH,BL
MOV DS:[SI],AX
MOV DS:[SI][2],BX
MOV DS:[SI][4],DH
ADD SI,5
MOV CX,BP
LOOP MOUSE_SHIFT_1
RET
MOUSE_SHIFT_RIGHT ENDP
; mouse shift right.
; -I- DL : shift.
; SI : data address.
MOUSE_SHIFT_LEFT PROC NEAR
CMP DL,0
JNE MOUSE_SHIFT_LEFT_START
RET
MOUSE_SHIFT_LEFT_START:
MOV CX,32
MOUSE_SHIFT_LEFT_1:
MOV BP,CX
MOV AX,DS:[SI]
MOV BX,DS:[SI][2]
MOV DH,DS:[SI][4]
XCHG AH,AL
XCHG BH,BL
MOV CH,0
MOV CL,DL
ROL AH,1
ROR AH,1
MOUSE_SHIFT_LEFT_12:
RCL DH,1
RCL BX,1
RCL AX,1
LOOP MOUSE_SHIFT_LEFT_12
XCHG AH,AL
XCHG BH,BL
MOV DS:[SI],AX
MOV DS:[SI][2],BX
MOV DS:[SI][4],DH
ADD SI,5
MOV CX,BP
LOOP MOUSE_SHIFT_LEFT_1
RET
MOUSE_SHIFT_LEFT ENDP
CODE01 ENDS
DATA SEGMENT PUBLIC 'DATA'
EXTRN SSCUR0:WORD ; visual data segment plean 0
EXTRN SSCUR1:WORD ; visual data segment plean 1
EXTRN SSCUR2:WORD ; visual data segment plean 2
EXTRN SSCUR3:WORD ; visual data segment plean 3
EXTRN SSCURW:WORD ; visual data plean width.
SELNUM DW 0 ; 選択カーソル番号
SELDAT0 DW OFFSET MUSCURSOLE_3
SELDAT1 DW OFFSET MUSCURSOLE_3+4*32
SELDAT2 DW OFFSET MUSCURSOLE_3+4*32*2
SELDAT3 DW OFFSET MUSCURSOLE_3+4*32*3
SELMSK DW OFFSET MUSCURSOLE_3+4*32*4
CUSDAT0 DW OFFSET VRMBUF0
CUSDAT1 DW OFFSET VRMBUF1
CUSDAT2 DW OFFSET VRMBUF2
CUSDAT3 DW OFFSET VRMBUF3
CUSMSK DW OFFSET VRMBUFM
NOWSHIFT DW 0 ; 現在のシフト量
VRMBUF0 DB 32*5 DUP (?) ; VRAMエリア
VRMBUF1 DB 32*5 DUP (?) ;
VRMBUF2 DB 32*5 DUP (?) ;
VRMBUF3 DB 32*5 DUP (?) ;
VRMBUFM DB 32*5 DUP (?) ;
MUSCURSOLE_1 LABEL BYTE
MUSCURSOLE_2 LABEL BYTE
MUSCURSOLE_3 LABEL BYTE
MUSCURSOLE_4 LABEL BYTE
DB 000H,000H,000H,000H,010H,000H,000H,000H
DB 004H,000H,000H,000H,008H,000H,000H,000H
DB 004H,000H,000H,000H,004H,080H,000H,000H
DB 003H,040H,000H,000H,001H,000H,00aH,000H
DB 000H,0c0H,000H,000H,000H,048H,000H,000H
DB 000H,034H,008H,000H,000H,010H,080H,000H
DB 000H,008H,040H,000H,000H,004H,000H,000H
DB 000H,001H,000H,020H,000H,010H,030H,070H
DB 000H,000H,088H,064H,000H,000H,013H,010H
DB 000H,008H,000H,006H,000H,081H,044H,017H
DB 000H,000H,00aH,00cH,000H,080H,004H,014H
DB 000H,021H,002H,028H,000H,000H,0c0H,0d0H
DB 000H,002H,0c0H,02eH,000H,014H,0c4H,083H
DB 000H,00aH,000H,000H,000H,005H,051H,05aH
DB 000H,000H,0aaH,000H,000H,000H,001H,002H
DB 000H,000H,021H,002H,000H,000H,031H,080H
DB 0e0H,000H,000H,000H,0f8H,000H,000H,000H
DB 07eH,000H,000H,000H,03eH,000H,000H,000H
DB 03fH,080H,00aH,000H,01dH,0c0H,00aH,000H
DB 006H,0e0H,000H,000H,007H,060H,000H,000H
DB 003H,0b8H,000H,000H,001H,0dcH,00fH,080H
DB 000H,06eH,0c1H,0e0H,000H,070H,030H,070H
DB 000H,034H,010H,038H,000H,013H,018H,038H
DB 000H,003H,018H,07cH,000H,010H,089H,01cH
DB 000H,010H,033H,01cH,000H,008H,060H,07cH
DB 000H,00fH,0f0H,01dH,006H,023H,0caH,00cH
DB 000H,020H,00cH,014H,006H,020H,04eH,02cH
DB 000H,030H,0c1H,0d0H,000H,030H,001H,0ebH
DB 000H,019H,001H,0f1H,000H,01fH,023H,0d0H
DB 000H,00fH,0ffH,0e0H,000H,007H,0ffH,0ceH
DB 000H,001H,0feH,002H,000H,000H,000H,08aH
DB 000H,000H,010H,0c0H,000H,000H,000H,000H
DB 0c0H,000H,000H,000H,0f0H,000H,000H,000H
DB 07cH,000H,000H,000H,034H,000H,000H,000H
DB 03aH,000H,00aH,000H,01bH,080H,00aH,000H
DB 00dH,0c0H,00aH,000H,006H,0c0H,00aH,000H
DB 003H,060H,000H,000H,001H,0b8H,000H,000H
DB 000H,0dcH,089H,080H,000H,068H,0a0H,060H
DB 000H,028H,040H,030H,000H,015H,010H,030H
DB 000H,002H,010H,058H,000H,000H,029H,0e8H
DB 000H,010H,0b1H,0bcH,000H,008H,043H,068H
DB 000H,007H,0f0H,03fH,007H,082H,088H,00fH
DB 000H,000H,004H,014H,007H,0a0H,000H,02cH
DB 000H,001H,042H,0d0H,000H,020H,0c1H,00bH
DB 000H,013H,0c1H,017H,000H,00bH,067H,033H
DB 000H,005H,0ffH,0e0H,000H,002H,0aeH,096H
DB 000H,001H,054H,00eH,000H,000H,001H,084H
DB 000H,000H,031H,0c2H,000H,000H,031H,080H
DB 040H,000H,000H,000H,070H,000H,000H,000H
DB 03cH,000H,000H,000H,034H,000H,000H,000H
DB 01aH,000H,00aH,000H,019H,080H,00aH,000H
DB 005H,0c0H,000H,000H,006H,040H,000H,000H
DB 003H,060H,000H,000H,001H,098H,000H,000H
DB 000H,05cH,081H,080H,000H,060H,020H,060H
DB 000H,020H,000H,030H,000H,011H,010H,030H
DB 000H,003H,010H,058H,000H,000H,009H,068H
DB 000H,010H,031H,07cH,000H,008H,060H,068H
DB 000H,007H,0f0H,01dH,006H,002H,088H,00cH
DB 000H,000H,004H,014H,006H,020H,000H,02cH
DB 000H,000H,040H,0d0H,000H,020H,001H,06bH
DB 000H,011H,0c1H,0b1H,000H,00bH,0e3H,050H
DB 000H,005H,0ffH,0e0H,000H,002H,0aeH,086H
DB 000H,001H,054H,006H,000H,000H,000H,080H
DB 000H,000H,010H,0c0H,000H,000H,000H,000H
DB 01fH,0ffH,0ffH,0ffH,007H,0ffH,0ffH,0ffH
DB 081H,0ffH,0ffH,0ffH,081H,0ffH,0ffH,0ffH
DB 0c0H,07fH,0f5H,0ffH,0c0H,03fH,0f5H,0ffH
DB 0e0H,01fH,0f5H,0ffH,0f0H,01fH,0f5H,0ffH
DB 0f8H,007H,0ffH,0ffH,0fcH,003H,0e0H,07fH
DB 0feH,000H,030H,01fH,0ffH,001H,00eH,00fH
DB 0ffH,083H,08fH,087H,0ffH,0c8H,0c7H,087H
DB 0ffH,0e8H,0c7H,083H,0ffH,0ccH,046H,003H
DB 0ffH,0cfH,044H,003H,0ffH,0e7H,084H,083H
DB 0ffH,0e0H,007H,080H,0f8H,050H,001H,0c0H
DB 0ffH,09cH,021H,0c3H,0f8H,01fH,0a1H,0c3H
DB 0ffH,08eH,030H,003H,0ffH,08fH,03cH,000H
DB 0ffH,0c4H,03cH,000H,0ffH,0c0H,018H,004H
DB 0ffH,0e0H,000H,00fH,0ffH,0f0H,000H,001H
DB 0ffH,0f8H,000H,021H,0ffH,0feH,000H,061H
DB 0ffH,0ffH,0ceH,031H,0ffH,0ffH,0ceH,07fH
VRMSAVEBUF DW SAVEBUF0 ; VRAM退避エリア
TBLSAVBUF DW SAVEBUF0,SAVEBUF1 ; table save buffer adrs.
SAVEBUF0 DB 32*5 DUP (?) ; bank0 save buffer.
DB 32*5 DUP (?) ;
DB 32*5 DUP (?) ;
DB 32*5 DUP (?) ;
SAVEBUF1 DB 32*5 DUP (?) ; bank1 save buffer.
DB 32*5 DUP (?) ;
DB 32*5 DUP (?) ;
DB 32*5 DUP (?) ;
CURX DW 0 ; カーソルX
CURY DW 0 ; カーソルY
CURNEWX DW 0 ; カーソル新しいX
CURNEWY DW 0 ; カーソル新しいY
MOVE_MODE DW 1 ; カーソル移動モード
; 0=横バイト/縦バイト
; 1=横バイト/縦ドット
PLEAN_MODE DW 1;0 ; プレーンモード 0=片面,1=両面
FLAG_MSCINTSW DW 1 ; マウス割り込みカーソルON/OFF
MUSFLG DW 0 ; 0=マウスOFF
; 1=マウスカーソル表示中
; 2=マウスカーソル書換中(割込防止)
DATA ENDS
END
;
; end of "VMUSCOR.ASM"
;