P_M_OBJ DW #FFFF P_L_OBJ DW #FFFF WAITMOD DB #00 P_MOUSE DB #00 ; HL - OBJECT ; A - MESSAGE ; 1 - ACTIVE ; 2 - DEACTIVE ; 3 - PRESS LEFT ; 4 - UNPRESS LEFT ; 5 - DRAG ; 6 - DROP ; 7 - PRESS RIGHT ; 8 - UNPRESS RIGHT WAITMSG LD C,5 CALL INTMOUS JP C,CLIKMSG CALL OBJECT EX DE,HL LD HL,(P_M_OBJ) AND A SBC HL,DE EX DE,HL CALL NZ,NEWMOBJ CALL LOBJECT EX DE,HL LD HL,(P_L_OBJ) AND A SBC HL,DE JP Z,WAITMSG PUSH DE LD C,3 CALL INTMOUS POP DE OR A JP Z,NONPRES CP 1 JP Z,LFTPRES CP 2 JP Z,NONPRES CP 3 JP Z,LFTPRES LFTPRES LD HL,(P_L_OBJ) LD A,(WAITMOD) XOR #FF LD (WAITMOD),A LD A,5 RET Z EX DE,HL LD (P_L_OBJ),HL LD A,6 AND A RET NONPRES LD HL,(P_L_OBJ) LD A,(WAITMOD) XOR #FF LD (WAITMOD),A LD A,2 RET Z EX DE,HL LD (P_L_OBJ),HL LD A,1 AND A RET CLIKMSG PUSH AF PUSH HL PUSH DE CALL GOBJ EX DE,HL LD HL,(P_M_OBJ) AND A SBC HL,DE EX DE,HL JP Z,CLIKMS2 CALL NEWMOBJ POP DE POP HL POP AF SCF RET CLIKMS2 POP DE POP HL CALL LOBJ LD A,(P_MOUSE) LD C,A POP AF LD (P_MOUSE),A OR A JP Z,RESPRES CP 1 JP Z,FRIPRES CP 2 JP Z,SECPRES CP 3 JP Z,DUUPRES DUUPRES LD A,C AND 1 LD A,3 RET Z LD A,7 RET RESPRES LD A,C AND 1 LD A,4 RET NZ LD A,8 RET FRIPRES LD A,C AND 1 LD A,3 RET Z LD A,8 RET SECPRES LD A,C AND 2 LD A,7 RET Z LD A,4 RET RE_MOBJ CALL NEWMOBJ SCF RET NEWMOBJ LD (P_M_OBJ),HL LD DE,LOBJADR ADD HL,HL ADD HL,HL ADD HL,DE LD E,(HL) INC HL LD D,(HL) INC HL LD C,(HL) INC HL LD B,(HL) EX DE,HL ; LD (LOBJ_T),HL ; LD (LOBJ_SZ),BC RET ;LOCAL OBJECT DETECTER ; INPUT: NONE ;OUTPUT: ; NC; HL - OBJECT ID ; C; ERROR LOBJ PUSH IX PUSH HL PUSH DE JP LOBJC LOBJECT PUSH IX LD C,3 CALL INTMOUS PUSH HL PUSH DE LOBJC LD IX,(LOBJ_T) ;CURRENT LOCAL OBJECT TABLE POP HL ;Y MOUSE COORD LD DE,(WIN_Y) AND A SBC HL,DE EX DE,HL POP HL ;X MOUSE COORD LD BC,(WIN_X) AND A SBC HL,BC LD B,H LD C,L LOBJ_AG LD L,(IX+2) LD H,(IX+3) ;OBJECT X-MIN AND A SBC HL,BC JP Z,OBJXYEP JP NC,LOBJ_NN LD L,(IX+4) LD H,(IX+5) ;OBJECT X-MAX AND A SBC HL,BC JP C,LOBJ_NN LOBJXEP LD L,(IX+6) LD H,(IX+7) ;OBJECT Y-MIN AND A SBC HL,DE JP Z,LOBJ_EP JP NC,LOBJ_NN LD L,(IX+8) LD H,(IX+9) ;OBJECT Y-MAX AND A SBC HL,DE JP C,LOBJ_NN LOBJ_EP LD L,(IX+0) ;OBJECT ID LD H,(IX+1) POP IX AND A RET LOBJ_NN EX DE,HL ;NEXT OBJECT LD DE,10 ADD IX,DE EX DE,HL LD A,(IX+1) ;END MARKER? INC A JP NZ,LOBJ_AG LD A,(IX+0) ;END MARKER? INC A JP NZ,LOBJ_AG POP IX SCF RET ;LOCAL OBJECT CONSTRUCTOR ; INPUT: ; DE/BC - X-MIN/X-MAX ; DE'/BC' - Y-MIN/Y-MAX ; HL - OBJECT ID LCONST EXX PUSH IX PUSH DE PUSH BC LD HL,(LOBJ_T) LD BC,(LOBJ_SZ) ADD HL,BC DEC HL LD D,H LD E,L LD BC,10 ADD HL,BC EX DE,HL LD BC,(LOBJ_SZ) LDDR POP BC POP DE EXX LD IX,(LOBJ_T) LD (IX+0),L LD (IX+1),H LD (IX+2),E LD (IX+3),D LD (IX+4),C LD (IX+5),B EXX LD (IX+6),E LD (IX+7),D LD (IX+8),C LD (IX+9),B EXX LD HL,(LOBJ_SZ) LD BC,10 ADD HL,BC LD (LOBJ_SZ),HL POP IX AND A RET ;LOCAL OBJECT DESTRUCTOR ; INPUT: ; HL - OBJECT ID ;OUTPUT: ; NC - OBJECT DESTROYED ; C - OBJECT ABSENT LDESTR EX DE,HL PUSH IX LD IX,(LOBJ_T) LD A,(IX+1) ;END MARKER? INC A JP NZ,LDESTR0 LD A,(IX+0) ;END MARKER? INC A JP NZ,LDESTR0 POP IX SCF RET LDESTR0 LD L,(IX+0) LD H,(IX+1) AND A SBC HL,DE JP NZ,LDESTR1 LD D,XH LD E,XL LD H,D LD L,E LD BC,10 ADD HL,BC EXX LD HL,(LOBJ_T) LD DE,(LOBJ_SZ) ADD HL,DE LD D,XH LD E,XL AND A SBC HL,DE PUSH HL EXX POP BC LDIR LD HL,(LOBJ_SZ) LD BC,10 AND A SBC HL,BC LD (LOBJ_SZ),HL POP IX AND A RET LDESTR1 LD BC,10 ADD IX,BC LD A,(IX+1) ;END MARKER? INC A JP NZ,LDESTR0 LD A,(IX+0) ;END MARKER? INC A JP NZ,LDESTR0 POP IX SCF RET ;GLOBAL OBJECT DETECTER ; INPUT: NONE ;OUTPUT: ; NC; HL - OBJECT ID ; C; ERROR GOBJ PUSH IX PUSH HL JP GOBJC OBJECT PUSH IX LD C,3 CALL INTMOUS PUSH HL GOBJC POP BC LD IX,OBJ_TAB ;OBJECT TABLE OBJ_CNT LD L,(IX+2) LD H,(IX+3) ;OBJECT X-MIN AND A SBC HL,BC JP Z,OBJXYEP JP NC,OBJ_NON LD L,(IX+4) LD H,(IX+5) ;OBJECT X-MAX AND A SBC HL,BC JP C,OBJ_NON OBJXYEP LD L,(IX+6) LD H,(IX+7) ;OBJECT Y-MIN AND A SBC HL,DE JP Z,OBJ_YEP JP NC,OBJ_NON LD L,(IX+8) LD H,(IX+9) ;OBJECT Y-MAX AND A SBC HL,DE JP C,OBJ_NON OBJ_YEP LD L,(IX+0) ;OBJECT ID LD H,(IX+1) POP IX AND A RET OBJ_NON EX DE,HL ;NEXT OBJECT LD DE,10 ADD IX,DE EX DE,HL LD A,(IX+1) ;END MARKER? INC A JP NZ,OBJ_CNT LD A,(IX+0) ;END MARKER? INC A JP NZ,OBJ_CNT POP IX SCF RET _HLX DW #0000 _DEX DW #0000 _BCX DW #0000 _HL DW #0000 _DE DW #0000 _BC DW #0000 STACKR1 SAVERG LD A,R DI LD (SAVESP+1),SP LD SP,STACKR1 PUSH BC PUSH DE PUSH HL EXX PUSH BC PUSH DE PUSH HL EXX SAVESP LD SP,#0000 RET PO EI RET RESTRG LD A,R DI LD (RESTSP+1),SP LD SP,_HLX EXX POP HL POP DE POP BC EXX POP HL POP DE POP BC RESTSP LD SP,#0000 RET PO EI RET ;INPUT: ; HL/DE - X/Y ; BC - WIDTH ; BC' - HEIGH ;OUTPUT: ; DE/BC - X-MIN/X-MAX ;DE'/BC' - Y-MIN/Y-MAX OPTIMIZ PUSH DE LD D,H LD E,L ADD HL,BC LD B,H LD C,L EXX POP HL LD D,H LD E,L ADD HL,BC LD B,H LD C,L EXX RET ;GLOBAL OBJECT CONSTRUCTOR ; INPUT: ; DE/BC - X-MIN/X-MAX ;DE'/BC' - Y-MIN/Y-MAX ; HL - OBJECT ID CONST EXX PUSH IX PUSH DE PUSH BC LD HL,OBJ_TAB LD BC,(SZ_OBJ) ADD HL,BC DEC HL LD D,H LD E,L LD BC,10 ADD HL,BC EX DE,HL LD BC,(SZ_OBJ) LDDR POP BC POP DE EXX LD IX,OBJ_TAB LD (IX+0),L LD (IX+1),H LD (IX+2),E LD (IX+3),D LD (IX+4),C LD (IX+5),B EXX LD (IX+6),E LD (IX+7),D LD (IX+8),C LD (IX+9),B LD HL,(SZ_OBJ) LD BC,10 ADD HL,BC LD (SZ_OBJ),HL EXX LD DE,LOBJADR ADD HL,HL ADD HL,HL ADD HL,DE LD DE,LOBJTAB LD BC,10 ; LD (HL),E INC HL ; LD (HL),D INC HL ; LD (HL),C INC HL ; LD (HL),B POP IX AND A RET ;GLOBAL OBJECT DESTRUCTOR ; INPUT: ; HL - OBJECT ID ;OUTPUT: ; NC - OBJECT DESTROYED ; C - OBJECT ABSENT DESTR EX DE,HL PUSH IX LD IX,OBJ_TAB LD A,(IX+1) ;END MARKER? INC A JP NZ,DESTR0 LD A,(IX+0) ;END MARKER? INC A JP NZ,DESTR0 POP IX SCF RET DESTR0 LD L,(IX+0) LD H,(IX+1) AND A SBC HL,DE JP NZ,DESTR1 LD D,XH LD E,XL LD H,D LD L,E LD BC,10 ADD HL,BC EXX LD HL,OBJ_TAB LD DE,(SZ_OBJ) ADD HL,DE LD D,XH LD E,XL AND A SBC HL,DE PUSH HL EXX POP BC LDIR LD HL,(SZ_OBJ) LD BC,10 AND A SBC HL,BC LD (SZ_OBJ),HL POP IX AND A RET DESTR1 LD BC,10 ADD IX,BC LD A,(IX+1) ;END MARKER? INC A JP NZ,DESTR0 LD A,(IX+0) ;END MARKER? INC A JP NZ,DESTR0 POP IX SCF RET WIN_X DW 0 WIN_Y DW 0 LOBJ_T DW LOBJTAB LOBJ_SZ DW 10 NN_OBJ DW 0 SZ_OBJ DW 10 LOBJADR DW LOBJTAB,10,LOBJTAB,10,LOBJTAB,10 DS 512 ; WORD #FEFF ;OBJECT ID ; WORDS 0,320 ;X-MIN -- X-MAX ; WORDS 0,256 ;Y-MIN -- Y-MAX OBJ_TAB DW #FFFF ;END MARKER DW #FFFF,#FFFF ;END MARKER DW #FFFF,#FFFF ;END MARKER DS 246 ; WORD #FEFF ;OBJECT ID ; WORDS 0,320 ;X-MIN -- X-MAX ; WORDS 0,256 ;Y-MIN -- Y-MAX LOBJTAB DW #FFFF ;END MARKER DW #FFFF,#FFFF ;END MARKER DW #FFFF,#FFFF ;END MARKER DS 2038