flex_nav/fnmouse.a80

499 lines
9.1 KiB
Plaintext
Raw Permalink 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.

; LAST UPDATE: 20.04.2025 savelij
;[]----------------------------------------------------------[]
ResFire: LD A,(MouseFlag)
OR A
RET Z
RsFire1 CALL TestCMOS
SPMOUSE MOUSEF.READ_STATE
OR A
RET Z
JR RsFire1
;[]----------------------------------------------------------[]
; <20>஢¥àª  ª®®à¤¨­ â ¬ëè¨ ¯® â ¡«¨æ¥
; <20>  ¢å®¤:
; IX - €¤à¥á â ¡«¨æë
TestCoords: CALL TestCMOS
SPMOUSE MOUSEF.READ_STATE
EX AF,AF'
LD BC,0x0000
.PrvTabl EQU $-2
LD A,IXL
CP C
JR NZ,.L2
LD A,IXH
CP B
JR Z,.L3
.L2 LD (.PrvTabl),IX
CALL ResMInvert
LD BC,ResFire
PUSH BC
SUB A
LD (RunFlag),A
JR .L4
.L3 LD A,0x01
LD (RunFlag),A
EX AF,AF'
OR A
JR NZ,.L4
PUSH HL
LD BC,0x0000
.PrMousX EQU $-2
OR A
SBC HL,BC
POP HL
JR NZ,.L4
EX DE,HL
PUSH HL
LD BC,0x0000
.PrMousY EQU $-2
OR A
SBC HL,BC
POP HL
EX DE,HL
RET Z
.L4 LD (.PrMousX),HL
LD (.PrMousY),DE
CoordLp LD C,(IX+FORMTABL.XMINL) ; 00
LD B,(IX+FORMTABL.XMINH) ; 01
OR A
SBC HL,BC
ADD HL,BC
JP C,NxtCrds
LD C,(IX+FORMTABL.XMAXL) ; 02
LD B,(IX+FORMTABL.XMAXH) ; 03
SBC HL,BC
ADD HL,BC
JP NC,NxtCrds
LD C,(IX+FORMTABL.YMINL) ; 04
LD B,(IX+FORMTABL.YMINH) ; 05
OR A
EX DE,HL
SBC HL,BC
ADD HL,BC
EX DE,HL
JP C,NxtCrds
LD C,(IX+FORMTABL.YMAXL) ; 06
LD B,(IX+FORMTABL.YMAXH) ; 07
EX DE,HL
SBC HL,BC
ADD HL,BC
EX DE,HL
JP NC,NxtCrds
LD C,A
LD A,(MouseFlag)
OR A
LD A,C
JR Z,CoordL1
BIT FORMTABL.B_INV1,(IX+FORMTABL.FLAGL) ; 08
CALL NZ,SetSelect1
CoordL1 BIT FORMTABL.B_STATICINV,(IX+FORMTABL.FLAGL) ; 08
CALL NZ,SetSelect2
LD C,0x00
RunFlag EQU $-1
DEC C
JP NZ,NxtCrds1
LD C,A
LD A,(MouseFlag)
OR A
RET Z
LD A,C
OR A ; ­¥â ®£­ï
JR Z,Execute1
BIT 0,A
JR Z,Execute2
BIT FORMTABL.B_BUTTON,(IX+FORMTABL.FLAGL) ; 08
CALL NZ,PushButton
CCF
RET NC
OR A
BIT FORMTABL.B_WORKBUTTON,(IX+FORMTABL.FLAGL) ; 08 ; à ¡®ç ï ª­®¯ª 
RET NZ
LD C,(IX+FORMTABL.FIRELEFTL) ; 0C ; § ¯ã᪠¯® «¥¢®© ª­®¯ª¥
LD B,(IX+FORMTABL.FIRELEFTH) ; 0D
LD A,B
OR C
JP Z,NxtCrds1
BIT FORMTABL.B_EXECNORETLMB,(IX+FORMTABL.FLAGL) ; 08 ; § ¯ã᪠¡¥§ ¢®§¢à â 
JR Z,.L1
POP AF
.L1 PUSH BC
BIT FORMTABL.B_INV1,(IX+FORMTABL.FLAGL) ; 08
CALL NZ,ResSelect1
CALL ResSelect2
OR A
BIT FORMTABL.B_CLOSEWIN,(IX+FORMTABL.FLAGH) ; 09
RET Z
WINDOWCLOSE
RET
Execute1 LD C,(IX+FORMTABL.FIRENOL) ; 0A ; § ¯ã᪠¡¥§ ®£­ï
LD B,(IX+FORMTABL.FIRENOH) ; 0B
LD A,B
OR C
JR Z,NxtCrds1
BIT FORMTABL.B_EXECONLY,(IX+FORMTABL.FLAGL) ; 08 ; § ¯ã᪠¡¥§ ¢®§¢à â 
JR Z,.L1
POP AF
.L1 PUSH BC
BIT FORMTABL.B_INV1,(IX+FORMTABL.FLAGL) ; 08
CALL NZ,ResSelect1
CALL ResSelect2
OR A
BIT FORMTABL.B_EXECNOPRESS,(IX+FORMTABL.FLAGL) ; 08
RET Z
WINDOWCLOSE
RET
Execute2 LD C,(IX+FORMTABL.FIRERIGHTL) ; 0E ; § ¯ã᪠¯® ¯à ¢®© ª­®¯ª¥
LD B,(IX+FORMTABL.FIRERIGHTH) ; 0F
LD A,B
OR C
JR Z,NxtCrds1
BIT FORMTABL.B_EXECNORETRMB,(IX+FORMTABL.FLAGL) ; 08 ; § ¯ã᪠¡¥§ ¢®§¢à â 
JR Z,.L1
POP AF
.L1 PUSH BC
BIT FORMTABL.B_INV1,(IX+FORMTABL.FLAGL) ; 08
CALL NZ,ResSelect1
CALL ResSelect2
OR A
BIT FORMTABL.B_WORKBUTTON,(IX+FORMTABL.FLAGH) ; 09
RET Z
WINDOWCLOSE
RET
NxtCrds LD C,A
LD A,(MouseFlag)
OR A
LD A,C
JR Z,NxtCrds0
BIT FORMTABL.B_INV1,(IX+FORMTABL.FLAGL) ; 08
CALL NZ,ResSelect1
NxtCrds0 BIT FORMTABL.B_STATICINV,(IX+FORMTABL.FLAGL) ; 08
CALL NZ,SetSelect2
NxtCrds1 LD BC,FORMTABL.SIZE;0x0010
ADD IX,BC
BIT FORMTABL.B_ENDTABL,(IX+FORMTABL.XMINH) ; ª®­¥æ â ¡«¨æë?
JP Z,CoordLp
OR A
RET
ResMInvert PUSH IX
PUSH HL
PUSH DE
PUSH AF
LD BC,FORMTABL.SIZE;0x0010
ResCrds RES FORMTABL.B_FIRENOINV,(IX+FORMTABL.FLAGH) ; 09
RES 6,(IX+FORMTABL.FLAGH) ; 09
ADD IX,BC
BIT FORMTABL.B_ENDTABL,(IX+FORMTABL.XMINH)
JR Z,ResCrds
POP AF
POP DE
POP HL
POP IX
RET
SetSelect1 BIT FORMTABL.B_FIRENOINV,(IX+FORMTABL.FLAGH) ; 09
RET NZ
SET FORMTABL.B_FIRENOINV,(IX+FORMTABL.FLAGH) ; 09
PUSH AF
PUSH HL
PUSH DE
PUSH IX
LD L,(IX+FORMTABL.XMINL) ; 00
LD H,(IX+FORMTABL.XMINH) ; 01
LD C,(IX+FORMTABL.YMINL) ; 04
LD B,(IX+FORMTABL.YMINH) ; 05
LD A,(IX+FORMTABL.XMAXL) ; 02
SUB (IX+FORMTABL.XMINL) ; 00
EX AF,AF'
LD A,(IX+FORMTABL.YMAXL) ; 06
SUB (IX+FORMTABL.YMINL) ; 04
LD IXH,A
EX AF,AF'
SRL A
LD IXL,A
LD DE,(COLORP.HIGHGRAY + COLORI.BLACK) << 8 | (COLORP.BLUE + COLORI.WHITE);0x804F
CALL InvertRectan
POP IX
PUSH IX
NxCrds1 LD BC,FORMTABL.SIZE;0x0010
ADD IX,BC
BIT FORMTABL.B_ENDTABL,(IX+FORMTABL.XMINH) ; 01 ; ¯à®¢¥àª  ª®­æ  â ¡«¨æë?
JR NZ,NxCrds2
BIT FORMTABL.B_INV1,(IX+FORMTABL.FLAGL) ; 08
CALL NZ,ResSelect1
JR NxCrds1
NxCrds2 POP IX
POP DE
POP HL
POP AF
RET
ResSelect1 BIT FORMTABL.B_FIRENOINV,(IX+FORMTABL.FLAGH) ; 09
RET Z
RES FORMTABL.B_FIRENOINV,(IX+FORMTABL.FLAGH) ; 09
PUSH IX
PUSH HL
PUSH DE
LD L,(IX+FORMTABL.XMINL) ; 00
LD H,(IX+FORMTABL.XMINH) ; 01
LD C,(IX+FORMTABL.YMINL) ; 04
LD B,(IX+FORMTABL.YMINH) ; 05
LD A,(IX+FORMTABL.XMAXL) ; 02
SUB (IX+FORMTABL.XMINL) ; 00
EX AF,AF'
LD A,(IX+FORMTABL.YMAXL) ; 06
SUB (IX+FORMTABL.YMINL) ; 04
LD IXH,A
EX AF,AF'
SRL A
LD IXL,A
LD DE,(COLORP.BLUE + COLORI.WHITE) << 8 | (COLORP.HIGHGRAY + COLORI.BLACK);0x4F80
CALL InvertRectan
POP DE
POP HL
POP IX
RET
SetSelect2 BIT 6,(IX+FORMTABL.FLAGH) ; 09
RET NZ
SET 6,(IX+FORMTABL.FLAGH) ; 09
PUSH IX
PUSH HL
PUSH DE
PUSH AF
LD L,(IX+FORMTABL.XMINL) ; 00
LD H,(IX+FORMTABL.XMINH) ; 01
LD C,(IX+FORMTABL.YMINL) ; 04
LD B,(IX+FORMTABL.YMINH) ; 05
LD A,(IX+FORMTABL.XMAXL) ; 02
SUB (IX+FORMTABL.XMINL) ; 00
EX AF,AF'
LD A,(IX+FORMTABL.YMAXL) ; 06
SUB (IX+FORMTABL.YMINL) ; 04
LD IXH,A
EX AF,AF'
SRL A
LD IXL,A
LD DE,(COLORP.HIGHGRAY + COLORI.BLACK) << 8 | (COLORP.BLUE + COLORI.WHITE);0x804F
CALL InvertRectan
POP AF
POP DE
POP HL
POP IX
RET
ResSelect2 PUSH HL
PUSH DE
PUSH IX
LD IX,(TestCoords.PrvTabl)
LD BC,FORMTABL.SIZE;0x0010
NxCrds3 BIT FORMTABL.B_STATICINV,(IX+FORMTABL.FLAGL) ; 08
JR NZ,ResSel22
ADD IX,BC
BIT FORMTABL.B_ENDTABL,(IX+FORMTABL.XMINH) ; 01 ; ¯à®¢¥àª  ª®­æ  â ¡«¨æë?
JR NZ,ResSel2E
JR NxCrds3
ResSel22 BIT 6,(IX+FORMTABL.FLAGH) ; 09
JR Z,ResSel2E
RES 6,(IX+FORMTABL.FLAGH) ; 09
LD L,(IX+FORMTABL.XMINL) ; 00
LD H,(IX+FORMTABL.XMINH) ; 01
LD C,(IX+FORMTABL.YMINL) ; 04
LD B,(IX+FORMTABL.YMINH) ; 05
LD A,(IX+FORMTABL.XMAXL) ; 02
SUB (IX+FORMTABL.XMINL) ; 00
EX AF,AF'
LD A,(IX+FORMTABL.YMAXL) ; 06
SUB (IX+FORMTABL.YMINL) ; 04
LD IXH,A
EX AF,AF'
SRL A
LD IXL,A
LD DE,(COLORP.BLUE + COLORI.WHITE) << 8 | (COLORP.HIGHGRAY + COLORI.BLACK);0x4F80
CALL InvertRectan
ResSel2E POP IX
POP DE
POP HL
RET
PushButton PUSH HL
PUSH DE
LD L,(IX+FORMTABL.XMINL) ; 00
LD H,(IX+FORMTABL.XMINH) ; 01
LD E,(IX+FORMTABL.YMINL) ; 04
LD D,(IX+FORMTABL.YMINH) ; 05
LD A,(IX+FORMTABL.XMAXL) ; 02
SUB (IX+FORMTABL.XMINL) ; 00
LD C,A
LD A,(IX+FORMTABL.YMAXL) ; 06
SUB (IX+FORMTABL.YMINL) ; 04
LD B,A
PUSH HL
PUSH DE
PUSH BC
CALL PutPushBut
LD A,0x0A
LD (PausePh+1),A
PushLp PUSH IX
CALL TestRun
POP IX
PushLp1
SPMOUSE MOUSEF.READ_STATE
OR A
JR Z,PushButtEx
BIT 0,A
JR Z,PushButtEx
LD C,(IX+FORMTABL.XMINL) ; 00
LD B,(IX+FORMTABL.XMINH) ; 01
OR A
SBC HL,BC
ADD HL,BC
JR C,PushButtEx
LD C,(IX+FORMTABL.XMAXL) ; 02
LD B,(IX+FORMTABL.XMAXH) ; 03
SBC HL,BC
ADD HL,BC
CCF
JR C,PushButtEx
EX DE,HL
LD C,(IX+FORMTABL.YMINL) ; 04
LD B,(IX+FORMTABL.YMINH) ; 05
OR A
SBC HL,BC
ADD HL,BC
JR C,PushButtEx
LD C,(IX+FORMTABL.YMAXL) ; 06
LD B,(IX+FORMTABL.YMAXH) ; 07
SBC HL,BC
CCF
JR C,PushButtEx
PausePh LD A,0x00
OR A
JR Z,PushLp
DEC A
LD (PausePh+1),A
HALT
JR PushLp1
PushButtEx POP BC
POP DE
POP HL
PUSH AF
CALL PutPopBut
POP AF
POP DE
POP HL
RET
TestRun BIT FORMTABL.B_WORKBUTTON,(IX+FORMTABL.FLAGL) ; 08
RET Z
LD C,(IX+FORMTABL.FIRELEFTL) ; 0C
LD B,(IX+FORMTABL.FIRELEFTH) ; 0D
PUSH BC
RET
PutPushBut LD A,COLORP.WHITE | COLORI.BLACKGRAY;0xF7
JR PutButt
PutPopBut LD A,COLORP.BLACKGRAY | COLORI.WHITE;0x7F
PutButt PUSH IY
EX AF,AF'
GETPORT WINSP.CPU1
PUSH AF
SETPORT WINSP.CPU1,0x50
GETPORT WINSP.Y_PORT
PUSH AF
SRL H
RR L
SET 6,H
LD IYL,E
SRL C
DEC C
DEC C
LD A,C
LD (ButLen3),A
LD A,B
SUB 0x02
LD (ButLen1),A
LD (ButLen2),A
ADD A,IYL
INC A
LD IYH,A
EX AF,AF'
PUSH AF
AND 0xF0
LD E,A
RRCA
RRCA
RRCA
RRCA
OR E
LD D,A
POP AF
AND 0x0F
LD E,A
RLCA
RLCA
RLCA
RLCA
OR E
LD E,A
DI
LD A,IYL
SETPORT WINSP.Y_PORT,,0
LD (HL),E
INC A
SETPORT WINSP.Y_PORT,,0
ACCEL ACCELCMD.SET_BUFFER
LD A,0x00
ButLen1 EQU $-1
ACCEL ACCELCMD.FILL_VERT
LD (HL),E
ACCEL ACCELCMD.OFF
LD (HL),E
INC HL
ACCEL ACCELCMD.SET_BUFFER
LD A,0x00
ButLen3 EQU $-1
ACCEL ACCELCMD.OFF
LD A,IYL
SETPORT WINSP.Y_PORT,,0
ACCEL ACCELCMD.FILL
LD (HL),E
ACCEL ACCELCMD.OFF
LD A,IYH
SETPORT WINSP.Y_PORT,,0
ACCEL ACCELCMD.FILL
LD (HL),D
ACCEL ACCELCMD.OFF
LD B,0x00
ADD HL,BC
LD A,IYL
SETPORT WINSP.Y_PORT,,0
LD (HL),D
INC A
SETPORT WINSP.Y_PORT,,0
ACCEL ACCELCMD.SET_BUFFER
LD A,0x00
ButLen2 EQU $-1
ACCEL ACCELCMD.FILL_VERT
LD (HL),D
ACCEL ACCELCMD.OFF
LD (HL),D
EI
POP AF
SETPORT WINSP.Y_PORT,,0
POP AF
SETPORT WINSP.CPU1,,0
POP IY
RET