499 lines
9.1 KiB
Plaintext
499 lines
9.1 KiB
Plaintext
|
||
; 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
|