mirror of
https://github.com/Tolik-Trek/File-Manager.git
synced 2026-06-15 01:11:36 +03:00
374 lines
5.0 KiB
NASM
Executable File
374 lines
5.0 KiB
NASM
Executable File
Cmouse equ 1Bh
|
||
Dmouse equ 1Ah
|
||
|
||
|
||
|
||
; RST 30h. Mouse Driver (⥪áâ®¢ë© íªà )
|
||
; <20> ¢å®¤ ®¬¥à äãªæ¨¨:
|
||
; A=00h ˆ¨æ¨ «¨§ æ¨ï ¬ëè¨
|
||
; A=01h ‚뢥á⨠¬ëè¨ë© ªãàá®à íªà
|
||
; A=02h “¡à âì ¬ëè¨ë© ªãàá®à á íªà
|
||
; A=03h <20>®«ãç¨âì ª®®à¤¨ âë ¬ë誨 ¨ á®áâ®ï¨¥ ª®¯®ª
|
||
; A=04h <20>®«ãç¨âì ª®®à¤¨ âë ¬ë誨 ¨ á®áâ®ï¨¥ ª®¯®ª
|
||
; ¯®á«¥ ¨å ®â¯ã᪠¨ï
|
||
MouseDrv:
|
||
or a ; a=0
|
||
jr z,Init_MS
|
||
dec a ; a=1
|
||
jr z,SetMouse
|
||
dec a ; a=2
|
||
jp z,ResMouse
|
||
dec a ; a=3
|
||
jp z,ExmFire
|
||
dec a ; a=4
|
||
jp z,GetFire
|
||
ret
|
||
|
||
|
||
; Initialization LPT port & Mouse
|
||
Init_MS:di
|
||
ld a,55h
|
||
out (10h),a
|
||
ld a,2Dh
|
||
out (10h),a
|
||
ld a,0
|
||
out (1Bh),a
|
||
ld a,1
|
||
out (1Bh),a
|
||
ld a,0
|
||
out (1Bh),a
|
||
ld a,3
|
||
out (1Bh),a
|
||
ld a,41h
|
||
out (1Bh),a
|
||
ld a,4
|
||
out (1Bh),a
|
||
ld a,47h
|
||
out (1Bh),a
|
||
ld a,5
|
||
out (1Bh),a
|
||
ld a,0E0h
|
||
out (1Bh),a
|
||
ei
|
||
xor a
|
||
ld (MSbutt),a
|
||
ret
|
||
|
||
|
||
; Set Mouse & Print Cursor Mouse on Screen
|
||
SetMouse:
|
||
di
|
||
push ix
|
||
push hl
|
||
push de
|
||
push bc
|
||
call Refresh
|
||
pop bc
|
||
pop de
|
||
pop hl
|
||
pop ix
|
||
ld a,1
|
||
ld (MouseFlg),a
|
||
ei
|
||
ret
|
||
|
||
|
||
; Res Mouse & Clear Cursor Mouse from Screen
|
||
ResMouse:
|
||
ld a,(MouseFlg)
|
||
or a
|
||
ret z
|
||
di
|
||
xor a
|
||
ld (MouseFlg),a
|
||
ld (MSbutt),a
|
||
push ix
|
||
push hl
|
||
push de
|
||
push bc
|
||
call RestorM
|
||
pop bc
|
||
pop de
|
||
pop hl
|
||
pop ix
|
||
ei
|
||
ret
|
||
|
||
|
||
; Examination on Fire
|
||
; Input: None
|
||
; OutPut: Z-Not Fire
|
||
; NZ-Yes Fire:
|
||
; HL=Y,X (in Znak)
|
||
; A=0-bit Right Button
|
||
; A=1-bit Left Button
|
||
ExmFire:ld hl,(Tcoords)
|
||
ld a,(MSbutt)
|
||
and 3
|
||
ret
|
||
|
||
|
||
; Get Fire (Wait Not Fire)
|
||
; Input: None
|
||
; OutPut: Z-Not Fire
|
||
; NZ-Yes Fire:
|
||
; HL=Y,X (in Znak)
|
||
; A=0-bit Right Button
|
||
; A=1-bit Left Button
|
||
GetFire:ld hl,(Tcoords)
|
||
ld a,(MSbutt)
|
||
and 3
|
||
ret z
|
||
push af
|
||
ld a,(MSbutt)
|
||
and 3
|
||
jr nz,$-5
|
||
pop af
|
||
ret
|
||
|
||
|
||
; Refresh Mouse on Screen
|
||
Refresh:call GetMousInfo
|
||
db 3Eh ; ld a,..
|
||
hidden_mouse:
|
||
db true ; true - ¯àïâ âì ¬ëèì ¯à¨ à ¡®â¥ á ª« ¢®©
|
||
or a
|
||
jr z,RefrMs
|
||
ld hl,(Xcoord)
|
||
srl h
|
||
rr l
|
||
srl h
|
||
rr l
|
||
srl l
|
||
ld a,(Ycoord)
|
||
rra
|
||
rra
|
||
rra
|
||
and 1Fh
|
||
ld h,a
|
||
ld de,(TempXY)
|
||
sbc hl,de
|
||
jr nz,RefrMs
|
||
KeyPres:ld a,0
|
||
or a
|
||
jr z,RefrMs1
|
||
jp RestorM
|
||
;
|
||
RefrMs: xor a
|
||
ld (KeyPres+1),a
|
||
RefrMs1:call RestorM
|
||
jp MousWrt
|
||
|
||
; Restore Screen from Mouse
|
||
RestorM:ld de,(TempXY)
|
||
in a,(89h)
|
||
ld c,a
|
||
in a,(0E2h)
|
||
ld b,a
|
||
push bc
|
||
ld a,5Ch ; 54h ¢¨¤¥®-áâà ¨æ
|
||
out (0E2h),a
|
||
ld a,d
|
||
add a,a
|
||
add a,a
|
||
ld l,a
|
||
ld h,0C3h
|
||
in a,(0C9h)
|
||
rrca
|
||
and 80h
|
||
or 1
|
||
add a,e
|
||
out (89h),a
|
||
inc l
|
||
inc l
|
||
ld a,(hl)
|
||
ld (hl),a
|
||
pop bc
|
||
ld a,b
|
||
out (0E2h),a
|
||
ld a,c
|
||
out (89h),a
|
||
ret
|
||
|
||
; Put Text Mouse Cursor On Screen
|
||
MousWrt:ld de,(Xcoord)
|
||
srl d
|
||
rr e
|
||
srl d
|
||
rr e
|
||
srl e
|
||
ld a,(Ycoord)
|
||
rra
|
||
rra
|
||
rra
|
||
and 1Fh
|
||
ld d,a
|
||
ld (TempXY),de
|
||
in a,(89h)
|
||
ld c,a
|
||
in a,(0E2h)
|
||
ld b,a
|
||
push bc
|
||
ld a,5Ch ; 54h ¢¨¤¥®-áâà ¨æ
|
||
out (0E2h),a
|
||
ld a,d
|
||
add a,a
|
||
add a,a
|
||
ld l,a
|
||
ld h,0C3h
|
||
in a,(0C9h)
|
||
rrca
|
||
and 80h
|
||
or 1
|
||
add a,e
|
||
out (89h),a
|
||
inc l
|
||
inc l
|
||
ld a,(hl)
|
||
xor 77h
|
||
ld (hl),a
|
||
pop bc
|
||
ld a,b
|
||
out (0E2h),a
|
||
ld a,c
|
||
out (89h),a
|
||
ret
|
||
|
||
; <20>®«ãç¨âì ®¢ãî ¨ä®à¬ æ¨î ® ¬ë誥
|
||
GetMousInfo:
|
||
call Read_MS
|
||
ret c
|
||
ld de,(Xcoord)
|
||
srl d
|
||
rr e
|
||
srl d
|
||
rr e
|
||
srl e
|
||
ld a,(Ycoord)
|
||
rra
|
||
rra
|
||
rra
|
||
and 1Fh
|
||
ld d,a
|
||
ld (Tcoords),de
|
||
ret
|
||
|
||
; Input Mouse Data from LPT ports
|
||
Read_MS:scf
|
||
in a,(Cmouse)
|
||
bit 0,a
|
||
ret z
|
||
in a,(Dmouse)
|
||
ld l,a
|
||
bit 6,a
|
||
ret z
|
||
Read_L1:in a,(Cmouse)
|
||
rrca
|
||
jr nc,Read_L1
|
||
in a,(Dmouse)
|
||
ld e,a
|
||
bit 6,a
|
||
ret nz
|
||
Read_L2:in a,(Cmouse)
|
||
rrca
|
||
jr nc,Read_L2
|
||
in a,(Dmouse)
|
||
ld d,a
|
||
bit 6,a
|
||
ret nz
|
||
ld a,e
|
||
and 3Fh
|
||
ld e,a
|
||
ld a,l
|
||
and 3
|
||
rrca
|
||
rrca
|
||
or e
|
||
ld c,a ; X addition
|
||
ld a,d
|
||
and 3Fh
|
||
ld d,a
|
||
ld a,l
|
||
and 0Ch
|
||
rrca
|
||
rrca
|
||
rrca
|
||
rrca
|
||
or d
|
||
ld b,a ; Y addition
|
||
ld a,l
|
||
and 30h
|
||
rrca
|
||
rrca
|
||
rrca
|
||
rrca
|
||
ld (MSbutt),a ; Button Pressed
|
||
; Corrected Mouse Place
|
||
ld hl,(Xcoord)
|
||
bit 7,c
|
||
ld e,c
|
||
jr nz,subX
|
||
ld d,0
|
||
add hl,de
|
||
ld de,027Fh
|
||
ex de,hl
|
||
sbc hl,de
|
||
add hl,de
|
||
jr c,$+3
|
||
ex de,hl
|
||
ld (Xcoord),hl
|
||
jr NxtCoord
|
||
;
|
||
subX: ld d,0FFh
|
||
add hl,de
|
||
jr c,$+5
|
||
ld hl,0
|
||
ld (Xcoord),hl
|
||
NxtCoord:
|
||
ld hl,(Ycoord)
|
||
bit 7,b
|
||
ld a,l
|
||
jr nz,subY
|
||
add a,b
|
||
jr nc,$+4
|
||
ld a,0FFh
|
||
ld l,a
|
||
ld (Ycoord),hl
|
||
and a
|
||
ret
|
||
;
|
||
subY: add a,b
|
||
jr c,$+3
|
||
xor a
|
||
ld l,a
|
||
ld (Ycoord),hl
|
||
and a
|
||
ret
|
||
|
||
|
||
|
||
|
||
; ”« £ ¬ë誨
|
||
MouseFlg:
|
||
db 0 ; 00 - ¬ë誨 ¥â
|
||
; 01 - ¬ëèª ¥áâì
|
||
; Š®®à¤¨ âë ¬ë誨 ¢ â®çª å
|
||
;Coords:
|
||
;Xcoord: dw 320 ; ª®®à¤¨ â X (0..639)
|
||
;Ycoord: dw 128 ; ª®®à¤¨ â Y (0..255)
|
||
|
||
; ‚६¥ë¥ ª®®à¤¨ âë ¢ § ª®¬¥áâ å
|
||
TempXY: dw 0000h ; X (0..79), Y (0..31)
|
||
|
||
; ‘®áâ®ï¨¥ ª®¯®ª
|
||
MSbutt: db 0 ; 0-bit ¯à ¢ ï ª®¯ª
|
||
; 1-bit «¥¢ ï ª®¯ª
|
||
; Š®®à¤¨ âë ¬ë誨 ¢ § ª®¬¥áâ å
|
||
Tcoords:
|
||
TcoordX:db 40 ; ª®®à¤¨ â X (0..79)
|
||
TcoordY:db 16 ; ª®®à¤¨ â Y (0..31)
|
||
|
||
; <20>ãä¥à ¤«ï åà ¥¨ï ¨ä®à¬ 樨 ¨§ ¯®¤ ¬ë誨
|
||
MouseBuff:
|
||
db 0
|