mirror of
https://github.com/Tolik-Trek/UserMenu.git
synced 2026-06-15 09:01:36 +03:00
186 lines
2.1 KiB
NASM
Executable File
186 lines
2.1 KiB
NASM
Executable File
|
|
G_OBJECT
|
|
RET
|
|
|
|
; INPUT:
|
|
; A - OBJECT ID
|
|
|
|
GET_OBJECT_PROP
|
|
LD IX,OBJECTS_AREA-OBJECT_SIZE
|
|
LD BC,OBJECT_SIZE
|
|
LD E,A
|
|
GOP1 ADD IX,BC
|
|
LD A,(IX+0)
|
|
OR A
|
|
RET Z
|
|
CP E
|
|
JR NZ,GOP1
|
|
LD L,(IX+2)
|
|
LD A,(IX+4)
|
|
SUB L
|
|
LD C,A
|
|
LD E,(IX+6)
|
|
LD A,(IX+8)
|
|
SUB E
|
|
LD B,A
|
|
XOR A
|
|
INC A
|
|
RET
|
|
|
|
|
|
; INPUT:
|
|
; A - OBJECT ID
|
|
; L - X
|
|
; E - Y
|
|
; B - HEIGHT
|
|
; C - WIDTH
|
|
|
|
ADD_OBJECT
|
|
LD IX,OBJECTS_AREA
|
|
PUSH BC
|
|
LD BC,(OBJECTS_AREA_SIZE)
|
|
ADD IX,BC
|
|
POP BC
|
|
|
|
; LD A,ID
|
|
|
|
LD (IX+0),A
|
|
XOR A
|
|
LD (IX+1),A
|
|
LD (IX+3),A
|
|
LD (IX+5),A
|
|
LD (IX+7),A
|
|
LD (IX+9),A
|
|
|
|
LD (IX+2),L ;X-MIN
|
|
LD A,C
|
|
ADD A,L
|
|
LD (IX+4),A ;X-MAX
|
|
|
|
LD (IX+6),E ;Y-MIN
|
|
LD A,B
|
|
ADD A,E
|
|
LD (IX+8),A ;Y-MAX
|
|
XOR A
|
|
LD (IX+OBJECT_SIZE),A
|
|
|
|
LD HL,(OBJECTS_AREA_SIZE)
|
|
LD BC,OBJECT_SIZE
|
|
ADD HL,BC
|
|
LD (OBJECTS_AREA_SIZE),HL
|
|
RET
|
|
|
|
REMOVE_OBJECT
|
|
RET
|
|
|
|
P_MX DW 0
|
|
P_MY DW 0
|
|
|
|
M_OBJECT
|
|
LD C,3
|
|
RST #30 ;GET MOUSE STATE
|
|
OR A
|
|
JP NZ,MFORCE
|
|
|
|
LD BC,(P_MX)
|
|
;16 BIT CMP
|
|
LD A,C
|
|
CP L
|
|
JR NZ,DMC
|
|
LD A,B
|
|
CP H
|
|
JR NZ,DMC
|
|
;
|
|
LD BC,(P_MY)
|
|
LD A,C
|
|
CP E
|
|
JR NZ,DMC
|
|
LD A,B
|
|
CP D
|
|
JR NZ,DMC
|
|
; ZERO FLAG=1
|
|
DMC
|
|
LD (P_MX),HL
|
|
LD (P_MY),DE
|
|
RET Z
|
|
MFORCE
|
|
;CORRECT FOR TEXT MODE
|
|
SRL H
|
|
RR L
|
|
SRL H
|
|
RR L
|
|
SRL H
|
|
RR L
|
|
|
|
SRL D
|
|
RR E
|
|
SRL D
|
|
RR E
|
|
SRL D
|
|
RR E
|
|
|
|
; E - Y, L - X
|
|
CALL GET_OBJECT_ID
|
|
RET
|
|
|
|
|
|
;
|
|
; INPUT:
|
|
; L - X
|
|
; E - Y
|
|
; OUTPUT:
|
|
; Z = 1, A - ID
|
|
; Z = 0 - OBJECT NOT FOUND
|
|
|
|
GET_OBJECT_ID
|
|
LD IX,OBJECTS_AREA
|
|
OBJECT_LOOP
|
|
LD A,(IX+0)
|
|
OR A ;INC A
|
|
RET Z ;OBJECT NOT FOUND
|
|
LD A,(IX+2) ;X-MIN
|
|
SUB L
|
|
JR Z,OBJ_X_OK
|
|
JR NC,OBJ_NEXT
|
|
LD A,(IX+4) ;X-MAX
|
|
SUB L
|
|
JR C,OBJ_NEXT
|
|
OBJ_X_OK
|
|
LD A,(IX+6) ;Y-MIN
|
|
SUB E
|
|
JR Z,OBJ_Y_OK
|
|
JR NC,OBJ_NEXT
|
|
LD A,(IX+8) ;Y-MAX
|
|
SUB E
|
|
JR Z,OBJ_NEXT
|
|
JR C,OBJ_NEXT
|
|
OBJ_Y_OK
|
|
LD A,(IX+0) ;ID
|
|
AND A
|
|
RET
|
|
|
|
OBJ_NEXT
|
|
LD BC,OBJECT_SIZE
|
|
ADD IX,BC
|
|
JR OBJECT_LOOP
|
|
|
|
OBJECTS_AREA_SIZE
|
|
DW 0
|
|
|
|
OBJECTS_AREA
|
|
DB 0 ;+00 OBJECT HANDLE
|
|
DB 0 ;+01 RESERVED
|
|
|
|
DB 0 ;+02 MIN X
|
|
DB 0 ;+03 RESERVED
|
|
DB 0 ;+04 MAX X
|
|
DB 0 ;+05 RESERVED
|
|
|
|
DB 0 ;+06 MIN Y
|
|
DB 0 ;+07 RESERVED
|
|
DB 0 ;+08 MAX Y
|
|
DB 0 ;+09 RESERVED
|
|
OBJECT_SIZE EQU $-OBJECTS_AREA
|
|
|
|
DS 320
|