mirror of
https://github.com/Tolik-Trek/2D-Studio.git
synced 2026-06-15 01:21:33 +03:00
667 lines
9.6 KiB
NASM
667 lines
9.6 KiB
NASM
|
|
;[BEGIN]
|
|
CMOUSE EQU #1B
|
|
DMOUSE EQU #1A
|
|
VSIZEX EQU 320
|
|
VSIZEY EQU 256
|
|
|
|
X EQU #EE
|
|
W EQU #EF
|
|
N EQU #FF
|
|
|
|
; MOUSE SOFTWARE SPECIFICATION
|
|
;---------------------------------------------
|
|
; COMMAND 00h (INITIALIZATION)
|
|
;
|
|
; RETURN: NC - MOUSE PRESENT
|
|
; C - MOUSE ABSENT
|
|
;---------------------------------------------
|
|
; COMMAND 01h (SHOW MOUSE CURSOR)
|
|
;
|
|
; RETURN: NC - DONE
|
|
; C - MOUSE ON SCREEN
|
|
;---------------------------------------------
|
|
; COMMAND 02h (HIDE MOUSE CURSOR)
|
|
;
|
|
; RETURN: NC - DONE
|
|
; C - NONE MOUSE
|
|
;---------------------------------------------
|
|
; COMMAND 03h (READ MOUSE STATE)
|
|
;
|
|
; RETURN: HL - X COORD
|
|
; DE - Y COORD
|
|
; A - BUTTONS D2-D0 (MIDDLE,RIGHT,LEFT)
|
|
;---------------------------------------------
|
|
; COMMAND 04h (GOTO MOUSE CURSOR)
|
|
;
|
|
; INPUT: HL - X COORD
|
|
; DE - Y COORD
|
|
;---------------------------------------------
|
|
; COMMAND 05h (GET CLICK FROM BUFFER)
|
|
;
|
|
; RETURN: NC - BUFFER EMPTY
|
|
; C - CLICK
|
|
; HL - X COORD
|
|
; DE - Y COORD
|
|
; A - BUTTONS
|
|
;---------------------------------------------
|
|
; COMMAND 06h (SELECT CURSOR)
|
|
;
|
|
; INPUT: A - CURSOR NUMBER
|
|
;---------------------------------------------
|
|
; ERRORS: 0 - NO ERROR
|
|
; 1 - COMMAND NOT PRESENT
|
|
; 2 - DEVICE ABSENT
|
|
; 3 - CURSOR ON (UZHE)
|
|
; 4 - CURSOR OFF (UZHE)
|
|
|
|
INTMOUS INC C
|
|
DEC C
|
|
JP Z,MS_INIT
|
|
DEC C
|
|
JP Z,MS_SHOW
|
|
DEC C
|
|
JP Z,MS_HIDD
|
|
DEC C
|
|
JP Z,MS_READ
|
|
DEC C
|
|
JP Z,MS_GOTO
|
|
DEC C
|
|
JP Z,MS_CLIK
|
|
DEC C
|
|
JP Z,MS_CURS
|
|
LD A,1
|
|
SCF
|
|
RET
|
|
|
|
MS_INIT DI
|
|
LD A,85
|
|
OUT (#10),A
|
|
LD A,45
|
|
OUT (#10),A
|
|
LD A,0
|
|
OUT (CMOUSE),A
|
|
LD A,1
|
|
OUT (CMOUSE),A
|
|
LD A,0
|
|
OUT (CMOUSE),A
|
|
LD A,3
|
|
OUT (CMOUSE),A
|
|
LD A,#41
|
|
OUT (CMOUSE),A
|
|
LD A,4
|
|
OUT (CMOUSE),A
|
|
LD A,#47
|
|
OUT (CMOUSE),A
|
|
LD A,5
|
|
OUT (CMOUSE),A
|
|
LD A,#60
|
|
OUT (CMOUSE),A
|
|
EI
|
|
XOR A
|
|
RET
|
|
|
|
MS_SHOW PUSH IX
|
|
PUSH HL
|
|
PUSH DE
|
|
EX AF,AF'
|
|
PUSH AF
|
|
LD HL,(PIX_X)
|
|
LD DE,(PIX_Y)
|
|
DI
|
|
CALL MOUSE
|
|
XOR A
|
|
LD (REFRESH+1),A
|
|
EI
|
|
POP AF
|
|
EX AF,AF'
|
|
POP DE
|
|
POP HL
|
|
POP IX
|
|
XOR A
|
|
RET
|
|
|
|
MS_HIDD PUSH IX
|
|
PUSH HL
|
|
PUSH DE
|
|
EX AF,AF'
|
|
PUSH AF
|
|
DI
|
|
LD A,1
|
|
LD (REFRESH+1),A
|
|
CALL RESTORE
|
|
EI
|
|
POP AF
|
|
EX AF,AF'
|
|
POP DE
|
|
POP HL
|
|
POP IX
|
|
XOR A
|
|
RET
|
|
|
|
MS_READ LD HL,(PIX_X)
|
|
LD DE,(PIX_Y)
|
|
LD A,(MB)
|
|
AND A
|
|
RET
|
|
|
|
MS_GOTO PUSH IX
|
|
PUSH HL
|
|
PUSH DE
|
|
LD (PIX_X),HL
|
|
LD (PIX_Y),DE
|
|
EX AF,AF'
|
|
PUSH AF
|
|
DI
|
|
CALL REFRESH
|
|
EI
|
|
POP AF
|
|
EX AF,AF'
|
|
POP DE
|
|
POP HL
|
|
POP IX
|
|
XOR A
|
|
RET
|
|
|
|
MS_CLIK CALL GCLICK
|
|
LD H,B
|
|
LD L,C
|
|
RET
|
|
|
|
MS_CURS LD HL,MS_BMP
|
|
INC A
|
|
LD D,H
|
|
LD E,L
|
|
LD BC,140
|
|
MS_CUR2 ADD HL,BC
|
|
DEC A
|
|
JP NZ,MS_CUR2
|
|
DI
|
|
LDIR
|
|
EI
|
|
XOR A
|
|
RET
|
|
|
|
RESTORE IN A,(PAGE1)
|
|
LD B,A
|
|
IN A,(Y_PORT)
|
|
LD C,A
|
|
PUSH BC
|
|
LD A,#50
|
|
OUT (PAGE1),A
|
|
REST_X LD HL,0
|
|
REST_Y LD DE,0
|
|
REST_H LD BC,0
|
|
LD A,E
|
|
EX AF,AF'
|
|
LD DE,#4040
|
|
ADD HL,DE
|
|
LD XH,14
|
|
EX AF,AF'
|
|
RS002 LD BC,10
|
|
OUT (Y_PORT),A
|
|
EX AF,AF'
|
|
PUSH HL
|
|
LD D,H
|
|
LD E,L
|
|
LDIR
|
|
POP HL
|
|
DEC XH
|
|
JR Z,RS003
|
|
EX AF,AF'
|
|
INC A
|
|
JP NZ,RS002
|
|
RS003 POP BC
|
|
LD A,B
|
|
OUT (PAGE1),A
|
|
LD A,C
|
|
OUT (Y_PORT),A
|
|
XOR A
|
|
RET
|
|
|
|
;HL/DE - X/Y
|
|
; B - WIDTH
|
|
; C - HEIGHT
|
|
|
|
MOUSE LD (REST_X+1),HL
|
|
LD (REST_Y+1),DE
|
|
LD (REST_H+1),BC
|
|
PUSH HL
|
|
IN A,(PAGE1)
|
|
LD H,A
|
|
IN A,(Y_PORT)
|
|
LD L,A
|
|
EX (SP),HL
|
|
LD A,#5C
|
|
OUT (PAGE1),A
|
|
LD A,E
|
|
EX AF,AF'
|
|
LD DE,#4040
|
|
ADD HL,DE
|
|
LD DE,MS_BMP
|
|
EX DE,HL
|
|
LD XH,14
|
|
EX AF,AF'
|
|
MS002 LD BC,10
|
|
OUT (Y_PORT),A
|
|
EX AF,AF'
|
|
MS001 PUSH DE
|
|
LDIR
|
|
POP DE
|
|
MS004 DEC XH
|
|
JR Z,MS003
|
|
EX AF,AF'
|
|
INC A
|
|
JP NZ,MS002
|
|
MS003 POP BC
|
|
LD A,B
|
|
OUT (PAGE1),A
|
|
LD A,C
|
|
OUT (Y_PORT),A
|
|
XOR A
|
|
RET
|
|
|
|
READ_M IN A,(CMOUSE)
|
|
RRCA
|
|
RET NC
|
|
IN A,(DMOUSE)
|
|
LD L,A
|
|
BIT 6,A
|
|
CCF
|
|
RET Z
|
|
TST_01 IN A,(CMOUSE)
|
|
RRCA
|
|
JP NC,TST_01
|
|
IN A,(DMOUSE)
|
|
LD E,A
|
|
BIT 6,A
|
|
CCF
|
|
RET NZ
|
|
TST_02 IN A,(CMOUSE)
|
|
RRCA
|
|
JP NC,TST_02
|
|
IN A,(DMOUSE)
|
|
LD D,A
|
|
BIT 6,A
|
|
CCF
|
|
RET NZ
|
|
LD A,E
|
|
AND #3F
|
|
LD E,A
|
|
LD A,L
|
|
AND #03
|
|
RRCA
|
|
RRCA
|
|
OR E
|
|
LD E,A
|
|
LD A,D
|
|
AND #3F
|
|
LD D,A
|
|
LD A,L
|
|
AND #0C
|
|
RRCA
|
|
RRCA
|
|
RRCA
|
|
RRCA
|
|
OR D
|
|
LD D,A
|
|
LD A,L
|
|
RLCA
|
|
RLCA
|
|
RLCA
|
|
RES 6,A
|
|
JR NC,STBU
|
|
SET 6,A
|
|
STBU RLCA
|
|
RLCA
|
|
AND #03
|
|
LD (MB),A
|
|
LD A,E
|
|
LD (MX),A
|
|
LD A,D
|
|
LD (MY),A
|
|
SCF
|
|
RET
|
|
|
|
MCORECT LD HL,(PIX_X)
|
|
LD DE,(MX)
|
|
LD D,0
|
|
BIT 7,E
|
|
JP NZ,DECX
|
|
ADD HL,DE
|
|
LD (PIX_X),HL
|
|
EX DE,HL
|
|
LD HL,VSIZEX-1
|
|
AND A
|
|
SBC HL,DE
|
|
JP NC,YCOO
|
|
LD HL,VSIZEX-1
|
|
LD (PIX_X),HL
|
|
JP YCOO
|
|
DECX LD A,E
|
|
NEG
|
|
LD E,A
|
|
AND A
|
|
SBC HL,DE
|
|
LD (PIX_X),HL
|
|
JP NC,YCOO
|
|
LD HL,0
|
|
LD (PIX_X),HL
|
|
YCOO LD HL,(PIX_Y)
|
|
LD DE,(MY)
|
|
LD D,0
|
|
BIT 7,E
|
|
JP NZ,DECY
|
|
ADD HL,DE
|
|
LD (PIX_Y),HL
|
|
EX DE,HL
|
|
LD HL,VSIZEY-1
|
|
AND A
|
|
SBC HL,DE
|
|
RET NC
|
|
LD HL,VSIZEY-1
|
|
LD (PIX_Y),HL
|
|
RET
|
|
|
|
DECY LD A,E
|
|
NEG
|
|
LD E,A
|
|
AND A
|
|
SBC HL,DE
|
|
LD (PIX_Y),HL
|
|
RET NC
|
|
LD HL,0
|
|
LD (PIX_Y),HL
|
|
RET
|
|
|
|
INTON DI
|
|
LD HL,INT_
|
|
LD (INTA*256+#FF),HL
|
|
LD A,INTA
|
|
LD I,A
|
|
IM 2
|
|
EI
|
|
RET
|
|
|
|
INTOFF DI
|
|
LD A,#3F
|
|
LD I,A
|
|
IM 1
|
|
EI
|
|
RET
|
|
|
|
;Main Interrupt
|
|
INT_ PUSH IY
|
|
PUSH IX
|
|
PUSH HL
|
|
PUSH DE
|
|
PUSH BC
|
|
PUSH AF
|
|
EX AF,AF'
|
|
EXX
|
|
PUSH HL
|
|
PUSH DE
|
|
PUSH BC
|
|
PUSH AF
|
|
IN A,(PAGE1)
|
|
LD B,A
|
|
IN A,(Y_PORT)
|
|
LD C,A
|
|
PUSH BC
|
|
CALL REFRESH ;Refresh mouse
|
|
CALL CONTROL
|
|
LD A,5 ;SPECTRUM
|
|
OUT (PAGE1),A ;
|
|
LD A,#C0 ;INTERRUPT
|
|
OUT (Y_PORT),A ;
|
|
LD IY,#5C3A ;!!!!!!!!!
|
|
CALL #0038 ;
|
|
DI
|
|
POP BC
|
|
LD A,B
|
|
OUT (PAGE1),A
|
|
LD A,C
|
|
OUT (Y_PORT),A
|
|
POP AF
|
|
POP BC
|
|
POP DE
|
|
POP HL
|
|
EXX
|
|
EX AF,AF'
|
|
POP AF
|
|
POP BC
|
|
POP DE
|
|
POP HL
|
|
POP IX
|
|
POP IY
|
|
EI
|
|
RETI
|
|
|
|
CONTROL CALL READ_M
|
|
RET NC
|
|
CALL MCORECT
|
|
LD A,#00
|
|
LD (REDY+1),A
|
|
LD HL,MB_OLD
|
|
LD A,(MB)
|
|
CP (HL)
|
|
RET Z
|
|
LD (MB_OLD),A
|
|
EX AF,AF'
|
|
LD A,(CLICKS)
|
|
CP 50
|
|
RET Z
|
|
LD E,A
|
|
ADD A,A
|
|
ADD A,A
|
|
ADD A,E
|
|
LD E,A
|
|
LD D,0
|
|
LD HL,CLICK_B
|
|
ADD HL,DE
|
|
LD BC,(PIX_X)
|
|
LD DE,(PIX_Y)
|
|
EX AF,AF'
|
|
LD (HL),A
|
|
INC HL
|
|
LD (HL),C
|
|
INC HL
|
|
LD (HL),B
|
|
INC HL
|
|
LD (HL),E
|
|
INC HL
|
|
LD (HL),D
|
|
LD A,(CLICKS)
|
|
INC A
|
|
LD (CLICKS),A
|
|
RET
|
|
|
|
GCLICK LD A,(CLICKS)
|
|
OR A
|
|
RET Z
|
|
DEC A
|
|
LD (CLICKS),A
|
|
LD HL,CLICK_B
|
|
LD A,(HL)
|
|
INC HL
|
|
LD C,(HL)
|
|
INC HL
|
|
LD B,(HL)
|
|
INC HL
|
|
LD E,(HL)
|
|
INC HL
|
|
LD D,(HL)
|
|
EXX
|
|
LD HL,CLICK_B-5
|
|
LD DE,CLICK_B
|
|
LD BC,245
|
|
LDIR
|
|
EXX
|
|
SCF
|
|
RET
|
|
|
|
REFRESH LD A,#01
|
|
OR A
|
|
RET NZ
|
|
REDY LD A,#00
|
|
; OR A
|
|
; RET NZ
|
|
CALL RESTORE
|
|
LD HL,(PIX_X)
|
|
LD DE,(PIX_Y)
|
|
CALL MOUSE
|
|
LD A,#FF
|
|
LD (REDY+1),A
|
|
RET
|
|
|
|
PIX_X DW 160
|
|
PIX_Y DW 128
|
|
|
|
MX DB #00
|
|
MY DB #00
|
|
MB DB #00
|
|
MB_OLD DB #00
|
|
|
|
CLICKS DB #00
|
|
|
|
CLICK_B DS 250
|
|
|
|
MS_BMP DS 140
|
|
|
|
CURSOR1 DB X,X,N,N,N,N,N,N,N,N
|
|
DB X,W,X,N,N,N,N,N,N,N
|
|
DB X,W,W,X,N,N,N,N,N,N
|
|
DB X,W,W,W,X,N,N,N,N,N
|
|
DB X,W,W,W,W,X,N,N,N,N
|
|
DB X,W,W,W,W,W,X,N,N,N
|
|
DB X,W,W,W,W,W,W,X,N,N
|
|
DB X,W,W,W,W,X,X,X,X,N
|
|
DB X,W,W,X,W,X,N,N,N,N
|
|
DB X,W,X,X,W,W,X,N,N,N
|
|
DB X,X,N,N,X,W,X,N,N,N
|
|
DB X,N,N,N,X,W,W,X,N,N
|
|
DB N,N,N,N,N,X,X,N,N,N
|
|
DB N,N,N,N,N,N,N,N,N,N
|
|
|
|
CURSOR2 DB N,N,X,X,X,X,N,N,N,N
|
|
DB N,X,W,W,W,W,X,N,N,N
|
|
DB X,W,N,X,X,N,N,X,N,N
|
|
DB X,W,X,N,N,N,N,X,N,N
|
|
DB X,W,X,N,N,N,N,X,N,N
|
|
DB X,W,N,N,N,N,N,X,N,N
|
|
DB N,X,N,N,N,N,X,X,N,N
|
|
DB N,N,X,X,X,X,X,W,X,N
|
|
DB N,N,N,N,N,N,N,X,W,X
|
|
DB N,N,N,N,N,N,N,N,X,X
|
|
DB N,N,N,N,N,N,N,N,N,N
|
|
DB N,N,N,N,N,N,N,N,N,N
|
|
DB N,N,N,N,N,N,N,N,N,N
|
|
DB N,N,N,N,N,N,N,N,N,N
|
|
|
|
CURSOR3 DB X,N,N,N,N,N,N,N,N,N
|
|
DB N,X,X,N,N,N,N,N,N,N
|
|
DB N,X,W,X,X,N,N,N,N,N
|
|
DB N,N,X,X,W,X,N,N,N,N
|
|
DB N,N,X,W,X,W,X,N,N,N
|
|
DB N,N,N,X,W,X,W,X,N,N
|
|
DB N,N,N,N,X,W,X,W,X,N
|
|
DB N,N,N,N,N,X,W,X,W,X
|
|
DB N,N,N,N,N,N,X,W,X,N
|
|
DB N,N,N,N,N,N,N,X,N,N
|
|
DB N,N,N,N,N,N,N,N,N,N
|
|
DB N,N,N,N,N,N,N,N,N,N
|
|
DB N,N,N,N,N,N,N,N,N,N
|
|
DB N,N,N,N,N,N,N,N,N,N
|
|
|
|
CURSOR4 DB X,N,N,N,N,N,N,N,N,N
|
|
DB N,X,X,N,N,N,N,N,N,N
|
|
DB N,X,W,X,X,N,N,N,N,N
|
|
DB N,N,X,X,W,X,N,N,N,N
|
|
DB N,N,X,W,X,W,X,N,N,N
|
|
DB N,N,N,X,W,X,W,X,N,N
|
|
DB N,N,N,N,X,W,X,W,X,N
|
|
DB N,N,N,N,N,X,W,X,W,X
|
|
DB N,N,N,N,N,N,X,W,X,N
|
|
DB N,N,N,N,N,N,N,X,N,N
|
|
DB N,N,N,N,N,N,N,N,N,N
|
|
DB N,N,N,N,N,N,N,N,N,N
|
|
DB N,N,N,N,N,N,N,N,N,N
|
|
DB N,N,N,N,N,N,N,N,N,N
|
|
|
|
CURSOR5 DB X,X,N,N,N,N,N,N,N,N
|
|
DB X,W,X,N,N,N,N,N,N,N
|
|
DB X,W,W,X,N,N,N,N,N,N
|
|
DB X,W,W,W,X,N,N,N,N,N
|
|
DB X,W,W,W,W,X,N,N,N,N
|
|
DB X,W,W,X,X,X,X,N,N,N
|
|
DB X,W,X,W,X,N,N,N,N,N
|
|
DB X,X,N,X,W,X,N,N,N,N
|
|
DB X,N,N,N,X,X,N,N,N,N
|
|
DB N,N,N,N,N,N,N,N,N,N
|
|
DB N,N,N,N,N,N,N,N,N,N
|
|
DB N,N,N,N,N,N,N,N,N,N
|
|
DB N,N,N,N,N,N,N,N,N,N
|
|
DB N,N,N,N,N,N,N,N,N,N
|
|
|
|
CURSOR6 DB X,X,N,N,N,N,N,N,N,N
|
|
DB X,W,X,N,N,N,N,N,N,N
|
|
DB X,W,W,X,N,N,N,N,N,N
|
|
DB X,W,W,W,X,N,N,N,N,N
|
|
DB X,W,W,W,W,X,N,N,N,N
|
|
DB X,W,W,X,X,X,X,N,N,N
|
|
DB X,W,X,W,X,N,N,N,N,N
|
|
DB X,X,N,X,W,X,N,N,N,N
|
|
DB X,N,N,N,X,X,N,N,N,N
|
|
DB N,N,N,N,N,N,N,N,N,N
|
|
DB N,N,N,N,N,N,N,N,N,N
|
|
DB N,N,N,N,N,N,N,N,N,N
|
|
DB N,N,N,N,N,N,N,N,N,N
|
|
DB N,N,N,N,N,N,N,N,N,N
|
|
|
|
CURSOR7 DB X,X,N,N,N,N,N,N,N,N
|
|
DB X,W,X,N,N,N,N,N,N,N
|
|
DB X,W,W,X,N,N,N,N,N,N
|
|
DB X,W,W,W,X,N,N,N,N,N
|
|
DB X,W,W,W,W,X,N,N,N,N
|
|
DB X,W,W,X,X,X,X,N,N,N
|
|
DB X,W,X,W,X,N,N,N,N,N
|
|
DB X,X,N,X,W,X,N,N,N,N
|
|
DB X,N,N,N,X,X,N,N,N,N
|
|
DB N,N,N,N,N,N,N,N,N,N
|
|
DB N,N,N,N,N,N,N,N,N,N
|
|
DB N,N,N,N,N,N,N,N,N,N
|
|
DB N,N,N,N,N,N,N,N,N,N
|
|
DB N,N,N,N,N,N,N,N,N,N
|
|
|
|
CURSOR8 DB X,X,N,N,N,N,N,N,N,N
|
|
DB X,W,X,N,N,N,N,N,N,N
|
|
DB X,W,W,X,N,N,N,N,N,N
|
|
DB X,W,W,W,X,N,N,N,N,N
|
|
DB X,W,W,W,W,X,N,N,N,N
|
|
DB X,W,W,W,W,W,X,N,N,N
|
|
DB X,W,W,W,W,W,W,X,N,N
|
|
DB X,W,W,W,W,X,X,X,X,N
|
|
DB X,W,W,X,W,X,N,N,N,N
|
|
DB X,W,X,X,W,W,X,N,N,N
|
|
DB X,X,N,N,X,W,X,N,N,N
|
|
DB X,N,N,N,X,W,W,X,N,N
|
|
DB N,N,N,N,N,X,X,N,N,N
|
|
DB N,N,N,N,N,N,N,N,N,N
|
|
|
|
CURSOR9 DB X,X,X,X,X,X,X,X,X,N
|
|
DB N,X,X,X,X,X,X,X,N,N
|
|
DB N,X,W,W,W,W,W,X,N,N
|
|
DB N,X,W,X,W,X,W,X,N,N
|
|
DB N,X,W,W,X,W,W,X,N,N
|
|
DB N,N,X,W,W,W,X,N,N,N
|
|
DB N,N,N,X,W,X,N,N,N,N
|
|
DB N,N,N,X,W,X,N,N,N,N
|
|
DB N,N,X,W,W,W,X,N,N,N
|
|
DB N,X,W,W,W,W,W,X,N,N
|
|
DB N,X,W,W,X,W,W,X,N,N
|
|
DB N,X,W,X,W,X,W,X,N,N
|
|
DB N,X,X,X,X,X,X,X,N,N
|
|
DB X,X,X,X,X,X,X,X,X,N
|
|
|
|
|