UserMenu/object.asm
Anatoliy Belyanskiy e8e569fc23 start
2023-10-15 04:06:17 +10:00

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