Estex-DSS/DOS/MOUSE.ASM
2023-08-11 04:54:30 +10:00

875 lines
14 KiB
NASM
Executable File
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

;===========================================================
; ‚¥ªâ®à ¬ë誨
;===========================================================
MOUSE_vector:
bit 7,c
jr nz,A32E3 ; c >=80h
inc c
dec c ; c=0 ¨­¨æ. ¬ë誨
jr z,init_mouse
dec c ; c=1 ¯®ª § âì ¬ëèªã
jr z,show_mouse
dec c ; c=2 áªàëâì ¬ëèªã
jp z,hide_mouse
dec c ; c=3 ã§­ âì á®áâ. ¬ë誨
jp z,get_mouse_status
dec c ; c=4 ãáâ. ª®®à¤¨­ âë ¬ë誨
jp z,set_mouse_coords
dec c ; c=5 § £«ã誠
jp z,A32DF
dec c ; c=6 § £«ã誠
jr z,A32DF
dec c ; c=7 ãáâ. Y £à ­¨æë ¯¥à¥¬. ¬ë誨
jp z,set_y_limit
dec c ; c=8 ãáâ. X £à ­¨æë ¯¥à¥¬. ¬ë誨
jp z,set_x_limit
dec c ; c=9 § £à㧨âì ªãàá®à ¬ë誨
jp z,A3385
dec c ; c=0Ah ãáâ. ᨬ¢®«/ âਡãâ ¬ë誨 ¤«ï ⥪áâ. ०¨¬ 
jp z,A341F
dec c ; c=0Bh ¯®«ãç¨âì ªãàá®à ¬ë誨
jp z,A33CC
dec c ; c=0Ch § £«ã誠
jr z,A32DF
dec c ; c=0Dh § £«ã誠
jr z,A32DF
dec c ; c=0Eh ¯®«ãç¨âì çã¢á⢨â. ¬ë誨
jp z,A342D
dec c ; c=0Fh ãáâ. çã¢áâ¢. ¬ë誨
jp z,A3428
A32DF: ld a,EINVFNC ; ª®¤ "­¥¢¥à­ë© ­®¬¥à ä㭪樨"
scf
ret
; c >= 80h
A32E3: res 7,c
inc c
dec c ; c=80h Ž¡à ¡®â稪  ¯¯ à â­. ¯à¥à뢠­¨ï ®â ¬ëè¨
jp z,A374B
dec c ; c=81h ¨­ä  ¤«ï ¬ë誨 ® ᬥ­¥ ०¨¬  íªà ­ 
jp z,A3700
dec c ; c=82h § £«ã誠
jr z,A32F5
dec c ; c=83h ¯à¨­ã¤. ¯¥à¥à¨á®¢ª  ¬ë誨
jp z,A3760
A32F5: ld a,EINVFNC ; ª®¤ "­¥¢¥à­ë© ­®¬¥à ä㭪樨"
scf
ret
;-----------------------------------------------------------
; ”ã­ªæ¨ï #00. ˆ­¨æ¨ «¨§ æ¨ï ¤à ©¢¥à  ¬ë誨
;-----------------------------------------------------------
init_mouse:
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
ret
;-----------------------------------------------------------
; ”ã­ªæ¨ï #01. <20>®ª § âì 㪠§ â¥«ì ¬ë誨
;-----------------------------------------------------------
show_mouse:
push ix
push hl
push de
ex af,af'
push af
ld hl,(D378C) ; X ª®®à¤¨­ â  ¬ë誨
ld de,(D378E) ; Y ª®®à¤¨­ â  ¬ë誨
di
call A3524
ld a,true
ld (enable_mouse_cursor),a ; ä« £ ¢ë¢®¤  㪠§ â¥«ï ¬ë誨
ei
pop af
ex af,af'
pop de
pop hl
pop ix
xor a
ret
;-----------------------------------------------------------
; ”ã­ªæ¨ï #02. ‘ªàëâì 㪠§ â¥«ì ¬ë誨
;-----------------------------------------------------------
hide_mouse:
push ix
push hl
push de
ex af,af'
push af
di
xor a ; false
ld (enable_mouse_cursor),a ; ä« £ ¢ë¢®¤  㪠§ â¥«ï ¬ë誨
call A34D7
ei
pop af
ex af,af'
pop de
pop hl
pop ix
xor a
ret
;-----------------------------------------------------------
; ”ã­ªæ¨ï #03. “§­ âì á®â®ï­¨¥ ¬ë誨
; ‚®§¢à é ¥â ª®®à¤¨­ âë ¬ë誨 ¨ á®áâ®ï­¨¥ ª­®¯®ª
;-----------------------------------------------------------
get_mouse_status:
ld hl,(D378C) ; X ª®®à¤¨­ â 
ld de,(D378E) ; Y ª®®à¤¨­ â 
ld a,(D3792) ; 0 bit - «¥¢ ï, 1 bit - ¯à ¢ ï
and a
ret
;-----------------------------------------------------------
; ”ã­ªæ¨ï #04. “áâ ­®¢¨âì ª®®à¤¨­ âë 㪠§ â¥«ï ¬ë誨
; ”ã­ªæ¨ï ¯¥à¥¬¥é ¥â ªãàá®à ¢ § ¤ ­­ë¥ ª®®à¤¨­ âë
;
; ¢å®¤: hl/de = X/Y ª®®à¤¨­ âë
; ¢ë室: a = ª®¤ ®è¨¡ª¨, ¥á«¨ CF=1
;-----------------------------------------------------------
set_mouse_coords:
push ix
push hl
push de
ld (D378C),hl ; X ª®®à¤¨­ â  ¬ë誨
ld (D378E),de ; Y ª®®à¤¨­ â  ¬ë誨
ex af,af'
push af
di
call A3772
ei
pop af
ex af,af'
pop de
pop hl
pop ix
xor a ;?
ret
A3385: push bc
push de
push hl
push ix
;ld a,l
;ld (D37A6),a
;ld a,h
;ld (D37A7),a
ld (D37A6),hl; ; è¨à¨­ /¢ëá®â  áâ५ª¨ ¬ë誨
ld c,e
ld b,0
ld (D379E),bc
ld c,d
ld (D37A0),bc
exx
ld a,(D37A6) ; 10 è¨à¨­  áâ५ª¨ ¬ë誨
ld c,a
ld b,0
ld a,(D37A7) ; 14 ¢ëá®â  áâ५ª¨ ¬ë誨
ld l,b
ld h,b
add hl,bc
dec a
jr nz,$-2
push hl
ld bc,257 ;A0101 ; 257 ?
and a
sbc hl,bc
ccf
exx
pop bc
pop hl
ld a,EINVHND ; ª®¤ "­¥áãé¥áâ¢. ¤¥áªà. ä ©« "
jr c,A33C7
ld de,mouse_pointer ; 10x14 ¬ áᨢ áâ५ª¨ ¬ë誨
di
ldir
xor a ; ª®¤ "Ok"
A33C7: pop hl
pop de
pop bc
ei
ret
A33CC: push ix
exx
ld a,(D37A6) ; 10 è¨à¨­  áâ५ª¨ ¬ë誨
ld c,a
ld b,0
ld a,(D37A7) ; 14 ¢ëá®â  áâ५ª¨ ¬ë誨
ld l,b
ld h,b
add hl,bc
dec a
jr nz,$-2
push hl
ld bc,257 ;A0101 ; 257 ?
and a
sbc hl,bc
ccf
exx
pop bc
pop hl
ld a,EINVHND ; ª®¤ "­¥áãé¥áâ¢. ¤¥áªà. ä ©« "
jr c,A340B
ld de,mouse_pointer ; 10x14 ¬ áᨢ áâ५ª¨ ¬ë誨
ex de,hl
di
ldir
;ld a,(D37A6) ;@@
;ld l,a
;ld a,(D37A7)
;ld h,a
ld hl,(D37A6); ; è¨à¨­ /¢ëá®â  áâ५ª¨ ¬ë誨
;ld bc,(D379E)
;ld e,c
;ld bc,(D37A0)
;ld d,c
ld a,(D379E);
ld e,a;
ld a,(D37A0);
ld d,a;
xor a
;ld c,a
;ld b,a
A340B: ei
ret
;-----------------------------------------------------------
; ”ã­ªæ¨ï #08. “áâ ­®¢ª  £®à¨§. £à ­¨æ ¯¥à¥¬¥é¥­¨ï ¬ë誨
;
; ¢å®¤: hl = ¬¨­¨¬ «ì­ ï
; de = ¬ ªá¨¬ «ì­ ï
;-----------------------------------------------------------
set_x_limit:
ld (D3794),hl
ld (D3796),de
xor a
ret
;-----------------------------------------------------------
; ”ã­ªæ¨ï #07. “áâ ­®¢ª  ¢¥àâ. £à ­¨æ ¯¥à¥¬¥é¥­¨ï ¬ë誨
;
; ¢å®¤: hl = ¬¨­¨¬ «ì­ ï
; de = ¬ ªá¨¬ «ì­ ï
;-----------------------------------------------------------
set_y_limit:
ld (D3798),hl
ld (D379A),de
xor a
ret
A341F: ld (D37A2),hl
ld (D37A4),de
xor a
ret
A3428: ld (D379C),hl
xor a
ret
A342D: ld hl,(D379C)
xor a
ret
A3432: ld (A348B+1),hl
ld (A348E+1),de
srl d
rr e
srl d
rr e
srl d
rr e
ld d,e
srl h
rr l
srl h
rr l
srl h
rr l
ld e,l
in a,(89h)
db 0DDh
ld h,a
in a,(0A2h)
db 0DDh
ld l,a
di
ld a,54h ; ­®¬¥à áâà.
out (0A2h),a
ld a,d
add a,a
add a,a
ld l,a
ld h,43h ; áâ. à §àï¤ ?
in a,(0C9h)
rrca
and 80h
or 1
add a,e
out (89h),a
inc l
ld a,(hl)
ld bc,(D37A2)
and b
xor c
ld (hl),a
inc l
ld a,(hl)
ld bc,(D37A4)
and b
xor c
ld (hl),a
db 0DDh
ld a,l
out (0A2h),a
db 0DDh
ld a,h
out (89h),a
ret
A348B: ld hl,0
A348E: ld de,0
srl d
rr e
srl d
rr e
srl d
rr e
ld d,e
srl h
rr l
srl h
rr l
srl h
rr l
ld e,l
in a,(89h)
db 0DDh
ld h,a
in a,(0A2h)
db 0DDh
ld l,a
di
ld a,50h
out (0A2h),a
ld a,d
add a,a
add a,a
ld l,a
ld h,43h ; áâ. à §àï¤ ?
in a,(0C9h)
rrca
and 80h
or 1
add a,e
out (89h),a
inc l
ld a,(hl)
ld (hl),a
inc l
ld a,(hl)
ld (hl),a
db 0DDh
ld a,l
out (0A2h),a
db 0DDh
ld a,h
out (89h),a
ret
A34D7: ld a,0
bit 7,a
jr z,A348B
in a,(0E2h)
ld b,a
in a,(89h)
ld c,a
push bc
ld a,50h
out (0E2h),a
A34E9: ld hl,0
A34EC: ld de,0
ld a,e
ex af,af'
A34F1: ld a,0
and 1
ld de,LC000
jr z,A34FD
ld de,LC000+320
A34FD: add hl,de
A34FE: ld a,0 ; 14 á®åà. ¢ëá®â  áâ५ª¨ ¬ë誨
db 0DDh
ld h,a
ex af,af'
A3503: ld bc,10
out (89h),a
ex af,af'
ld (A3510+1),hl
ld d,h
ld e,l
ldir
A3510: ld hl,0
ex af,af'
inc a
jr z,A351B
db 0DDh
dec h
jr nz,A3503
A351B: pop bc
ld a,b
out (0E2h),a
ld a,c
out (89h),a
xor a
ret
A3524: ld a,(D378B)
ld (A34D7+1),a
bit 7,a
jp z,A3432
cp 82h ; 130
jr nz,A3537
srl h
rr l
A3537: ld ix,mouse_pointer ; 10x14 ¬ áᨢ áâ५ª¨ ¬ë誨
ld a,(D37A6) ; 10 è¨à¨­  áâ५ª¨ ¬ë誨
ld c,a
ld b,0
ld (D37AA),bc
ld (A3503+1),bc
ld c,b
ld (D37A8),bc
ld a,(D37A7) ; 14 ¢ëá®â  áâ५ª¨ ¬ë誨
ld (A34FE+1),a
ld c,a
ld b,0
ld (D37AC),bc
ld bc,(D37A0)
ld a,e
sub c
ld e,a
jr nc,A357B
neg
ld e,a
ld a,(D37A6) ; 10 è¨à¨­  áâ५ª¨ ¬ë誨
ld c,a
ld b,0
ld a,(D37A7) ; 14 ¢ëá®â  áâ५ª¨ ¬ë誨
sub e
A3571: add ix,bc
dec e
jr nz,A3571
ld c,a
ld (D37AC),bc
A357B: ld bc,(D379E)
and a
sbc hl,bc
jr nc,A359A
ld b,h
ld c,l
ld hl,0
and a
sbc hl,bc
ld (D37A8),hl
ld a,(D37A6) ; 10 è¨à¨­  áâ५ª¨ ¬ë誨
sub l
ld l,a
ld (D37AA),hl
ld hl,0
A359A: ld (A34E9+1),hl
ld (A34EC+1),de
push hl
in a,(0E2h)
ld h,a
in a,(89h)
ld l,a
ex (sp),hl
ld a,5Ch ; ¢¨¤¥®-áâà ­¨æ 
out (0E2h),a
ld a,e
ex af,af'
in a,(0C9h)
ld (A34F1+1),a
and 1
ld de,LC000
jr z,A35BE
ld de,LC000+320 ; ­ ç «® 2-£® íªà ­  ?
A35BE: add hl,de
db 0DDh
ld d,h
db 0DDh
ld e,l
ex de,hl
ld bc,(D37AC)
db 0DDh
ld h,c
ex af,af'
A35CB: ld bc,(D37A8)
add hl,bc
ld bc,(D37AA)
out (89h),a
ex af,af'
ld (A35DD+1),de
ldir
A35DD: ld de,0
ex af,af'
inc a
jr z,A35E8
db 0DDh
dec h
jr nz,A35CB
A35E8: pop bc
ld a,b
out (0E2h),a
ld a,c
out (89h),a
xor a
ret
A35F1: in a,(1Bh)
rrca
ret nc
in a,(1Ah)
ld l,a
bit 6,a
ccf
ret z
in a,(1Bh)
rrca
jr nc,$-3
in a,(1Ah)
ld e,a
bit 6,a
ccf
ret nz
in a,(1Bh)
rrca
jr nc,$-3
in a,(1Ah)
ld d,a
bit 6,a
ccf
ret nz
ld a,e
and 3Fh
ld e,a
ld a,l
and 3
rrca
rrca
or e
ld e,a
ld a,d
and 3Fh
ld d,a
ld a,l
and 0Ch
rrca
rrca
rrca
rrca
or d
ld d,a
ld a,l
rlca
rlca
rlca
res 6,a
jr nc,$+4
set 6,a
rlca
rlca
and 3
ld (D3792),a ; á®áâ. ª­®¯®ª: 0/1 bits - «¥¢ ï/¯à ¢ ï
call A36C3
;ld a,e ;@@
;ld (D3790),a
;ld a,d
;ld (D3791),a
ld (D3790),de
scf
ret
A364B: ld hl,(D378C) ; X ª®®à¤¨­ â  ¬ë誨
ld de,(D3790)
ld d,0
bit 7,e
jr nz,A366F
add hl,de
ld (D378C),hl ; X ª®®à¤¨­ â  ¬ë誨
ex de,hl
ld hl,(D3796)
and a
sbc hl,de
jr nc,A3689
ld hl,(D3796)
ld (D378C),hl ; X ª®®à¤¨­ â  ¬ë誨
jr A3689
;
A366F: ld a,e
neg
ld e,a
and a
sbc hl,de
ld (D378C),hl ; X ª®®à¤¨­ â  ¬ë誨
jr c,A3683
ld de,(D3794)
sbc hl,de
jr nc,A3689
A3683: ld hl,(D3794)
ld (D378C),hl ; X ª®®à¤¨­ â  ¬ë誨
A3689: ld hl,(D378E) ; Y ª®®à¤¨­ â  ¬ë誨
ld de,(D3791)
ld d,0
bit 7,e
jr nz,A36A9
add hl,de
ld (D378E),hl ; Y ª®®à¤¨­ â  ¬ë誨
ex de,hl
ld hl,(D379A) ; ¬ ªá. Y £à ­¨æ  ¤«ï 㪠§ â¥«ï
and a
sbc hl,de
ret nc
ld hl,(D379A) ; ¬ ªá. Y £à ­¨æ  ¤«ï 㪠§ â¥«ï
ld (D378E),hl ; Y ª®®à¤¨­ â  ¬ë誨
ret
;
A36A9: ld a,e
neg
ld e,a
and a
sbc hl,de
ld (D378E),hl ; Y ª®®à¤¨­ â  ¬ë誨
jr c,A36BC
ld de,(D3798) ; ¬¨­. Y £à ­¨æ  ¤«ï 㪠§ â¥«ï
sbc hl,de
ret nc
A36BC: ld hl,(D3798) ; ¬¨­. Y £à ­¨æ  ¤«ï 㪠§ â¥«ï
ld (D378E),hl ; Y ª®®à¤¨­ â  ¬ë誨
ret
A36C3: ld hl,(D379C)
ld a,l
or l
ret z
dec a
ret z
ld a,e
bit 7,a
ld b,0FFh
jr z,A36D6
ld b,7Fh
neg
A36D6: inc b
sub l
jr nc,A36D6
bit 7,b
jr z,A36E4
ld a,b
res 7,a
neg
ld b,a
A36E4: ld e,b
ld a,d
bit 7,a
ld b,0FFh
jr z,A36F0
ld b,7Fh
neg
A36F0: inc b
sub h
jr nc,A36F0
bit 7,b
jr z,A36FE
ld a,b
res 7,a
neg
ld b,a
A36FE: ld d,b
ret
A3700: ld (D378B),a
or a
jr z,A3720
cp 1
jr z,A3720
cp 2 ; 40x32x16 ⥪á⮢ë©
jr z,A3723
cp 3 ; 80x32x16 ⥪á⮢ë©
jr z,A3737
bit 7,a
jr z,A3720
; £à ä. ०¨¬ë íªà ­ 
;res 7,a ;@@
cp 81h ; 320x256x256
jr z,A3723
cp 82h ; 640x256x16
jr z,A3737
A3720: xor a
scf
ret
; 320x256x256 ०¨¬
A3723: ld de,319 ; ¬ ªá. X £à ­¨æ 
A3726: ld hl,0 ; ¬¨­. X/Y £à ­¨æë
call set_x_limit ; ãáâ. X £à ­¨æã ¯¥à¥¬. 㪠§ â¥«ï
ld de,255 ; ¬ ªá. Y £à ­¨æ 
jp set_y_limit ; ãáâ. Y £à ­¨æã ¯¥à¥¬. 㪠§ â¥«ï
; 640x256x16 ०¨¬
A3737: ld de,639 ; ¬ ªá. X £à ­¨æ 
jr A3726
;-----------------------------------------------------------
; ”ã­ªæ¨ï #80. Ž¡à ¡®â稪  ¯¯ à â­. ¯à¥à뢠­¨ï ®â ¬ëè¨
;
; <20>® ¯à¨å®¤ã ¯à¥à뢠­¨ï ®â ¬ëè¨ ¢ë§ë¢ ¥âáï ¤ ­­ ï äã­ªæ¨ï
; ¤à ©¢¥à . á«ãç ¥, ª®£¤  âॡã¥âáï à ¡®â  ¯®¤¯à®£à ¬¬ë
; ¯à¨ § ¯à¥é¥­­ëå ¯à¥à뢠­¨ïå, ¨á¯®«ì§ã©â¥ ¤ ­­ãî äã­ªæ¨î,
; çâ®¡ë ¨§¡¥¦ âì ¯®â¥à¨ ¯ ª¥â®¢ ¤ ­­ëå ®â ¬ëè¨.
;-----------------------------------------------------------
A374B: in a,(0E2h)
ld b,a
in a,(89h)
ld c,a
push bc
call A3772
call A3765
pop bc
ld a,b
out (0E2h),a
ld a,c
out (89h),a
ret
A3760: call A3765
and a
ret
A3765: call A35F1
ret nc
call A364B
ld a,0
ld (A3776+1),a
ret
A3772: db 3Eh ; ld a,..
enable_mouse_cursor:
db false ; ä« £ ¢ë¢®¤  㪠§ â¥«ï ¬ë誨
or a
ret z ; ­¥ ¢ë¢®¤¨âì 㪠§ â¥«ì
A3776: ld a,0
call A34D7
ld hl,(D378C) ; X ª®®à¤¨­ â  ¬ë誨
ld de,(D378E) ; Y ª®®à¤¨­ â  ¬ë誨
call A3524
ld a,-1
ld (A3776+1),a
ret
D378B: db 3
D378C: dw 160 ; X ª®®à¤¨­ â  ¬ë誨
D378E: dw 128 ; Y ª®®à¤¨­ â  ¬ë誨
D3790: db 0
D3791: db 0
D3792: db 0 ; á®áâ. ª­®¯®ª: 0/1 bits - «¥¢ ï/¯à ¢ ï
db 0; ; ­ã¦¥­ ?
;
D3794: dw 0
D3796: dw 319
D3798: dw 0 ; ¬¨­. Y £à ­¨æ  ¤«ï 㪠§ â¥«ï
D379A: dw 255 ; ¬ ªá. Y £à ­¨æ  ¤«ï 㪠§ â¥«ï
D379C: dw 0
D379E: dw 0
D37A0: dw 0
;
D37A2: dw 0FF00h
D37A4: dw 0FF77h
;
D37A6: db 10 ; è¨à¨­  áâ५ª¨ ¬ë誨
D37A7: db 14 ; ¢ëá®â  áâ५ª¨ ¬ë誨
;
D37A8: dw 0
D37AA: dw 0
D37AC: dw 0
; ‘â५ª  ¬ë誨. Œ áᨢ 10x14 ¡ ©â®¢ + 116 = 256
mouse_pointer:
db 0,0,-1,-1,-1,-1,-1,-1,-1,-1 ; 1
db 0,-2,0,-1,-1,-1,-1,-1,-1,-1 ; 2
db 0,-2,-2,0,-1,-1,-1,-1,-1,-1 ; 3
db 0,-2,-2,-2,0,-1,-1,-1,-1,-1 ; 4
db 0,-2,-2,-2,-2,0,-1,-1,-1,-1 ; 5
db 0,-2,-2,-2,-2,-2,0,-1,-1,-1 ; 6
db 0,-2,-2,-2,-2,-2,-2,0,-1,-1 ; 7
db 0,-2,-2,-2,-2,0,0,0,0,-1 ; 8
db 0,-2,-2,0,-2,0,-1,-1,-1,-1 ; 9
db 0,-2,0,0,-2,-2,0,-1,-1,-1 ; 10
db 0,0,-1,-1,0,-2,0,-1,-1,-1 ; 11
db 0,-1,-1,-1,0,-2,-2,0,-1,-1 ; 12
db -1,-1,-1,-1,-1,0,0,-1,-1,-1 ; 13
db -1,-1,-1,-1,-1,-1,-1,-1,-1,-1 ; 14
;
ds 256-140 ; 116