Source file: /~heha/hs/kcemu/kcswberg.zip/DISK/MOUSEP5.ASM

MOUSEP5ASM	;
;***	haftmann#software	***
;***		Maustreiber	***
;***		mit Pfeil	***
;***	25.05.92		***
OS	EQU	0F003H
	;ORG	3000H
	JP	GETMICK
	JP	SPRALTM
	JP	SPRNEUM
	JP	INITM
	JP	MOVDIS
	JP	MOVENA
 
PUFFER	ORG	$+16+16+16
 
SPRADR	DEFW	9480H	;Cursoradresse
 
SPRITE
	DEFW	0FF1FH
	DEFW	0
	DEFW	0FF0FH
	DEFW	040H
	DEFW	0FF07H
	DEFW	060H
	DEFW	0FF03H
	DEFW	070H
	DEFW	0FF01H
	DEFW	078H
	DEFW	0FF00H
	DEFW	07CH
	DEFW	07F00H
	DEFW	07EH
	DEFW	03F00H
	DEFW	07FH
	DEFW	01F00H
	DEFW	0807FH
	DEFW	03F00H
	DEFW	07CH
	DEFW	0FF00H
	DEFW	066H
	DEFW	07F00H
	DEFW	42H
	DEFW	07F18H
	DEFW	3
	DEFW	03FF8H
	DEFW	1
	DEFW	03FFCH
	DEFW	8001H
	DEFW	03FFCH
	DEFW	0000H
 
VISIBLE	DEFB	0	;Merker
MOVEN	DEFB	1	;Bewegungsfreig
MOVRQ	DEFB	0	;Bew.-Request
MICKXA	DEFW	160
MICKYA	DEFW	128
ISRD
	DEFB	14H	;SCHACHT1
	DEFB	1CH	;SCHACHT2
	DEFB	9	;SIOADR
EBYTE	DEFB	0	;EMPFANGSBYTENR
	DEFB	7	;TASTENSTATI
	DEFB	0	;USERTASTE
	DEFB	0	;FREIGABE
MICKX	DEFW	160	;MICKEY X
MICKY	DEFW	128	;MICKEY Y
ISR
	PUSH	AF
	PUSH	HL
	PUSH	DE
	PUSH	BC
	;
	LD	HL,ISRD
	LD	B,M
	LD	C,80H
	XOR	A
	OUT	(C),A	;M003 (1) aus
	INC	HL
	LD	B,M
	INC	A
	OUT	(C),A	;M003 (2) ein
	PUSH	HL
	;
	INC	HL
	LD	C,M	;SIOADR
	IN	D,(C)	;Byte holen
	INC	HL
	;
	XOR	A
	OR	M	;Null?
	JR	NZ,DIRECT
	LD	A,D
	AND	0F8H
	CP	80H
	JP	NZ,EXIT
	INC	M
	INC	HL	;^Tastenstati
	LD	A,D	;gelesenes Byte
	CPL
	AND	M
	LD	M,D
	INC	HL	;^Usertaste
	RRA
	JR	NC,NRIGHT
	LD	C,M
	LD	A,C
	OR	A
	JP	NZ,EINTR
	CALL	MIKCURS
	JP	C,NOVER
	LD	(0B7A0H),DE
	JP	NOVER
NRIGHT	RRA
	JR	NC,NMIDDL
	CALL	MIKCURS
	JP	C,NOVER
	LD	C,M
	JP	EINTR
NMIDDL	RRA
	JP	NC,EXIT
	CALL	MIKCURS
	JP	C,NOVER
	LD	(0B7A0H),DE
	LD	C,13
	JP	EINTR
DIRECT	;Richtungsinfo
	INC	A
	CP	5
	JR	C,DIR1
	XOR	A
DIR1	RR	M
	LD	M,A	;neue Nummer
	INC	HL
	INC	HL
	INC	HL
	LD	B,0	;Freigabe
	INC	HL
	LD	A,D
	JR	C,DIR2	;wenn X-Richt.
	NEG		;Richtungstausch
	INC	HL
	INC	HL
	INC	B	;B=1 f}r Y
DIR2	LD	E,M	;Mickey
	INC	HL
	LD	D,M	;MickeyH
	PUSH	HL
	LD	L,A
	ADD	A
	SBC	A
	LD	H,A
	ADD	HL,DE
	BIT	7,H
	JR	Z,KUNTER
	LD	HL,0
KUNTER
	LD	A,H
	DJNZ	XTEST
	OR	A
	JR	Z,KUEBER
	LD	HL,0FFH
	JR	KUEBER
XTEST	OR	A
	JR	Z,KUEBER
	DEC	A
	JR	NZ,XUEBER
	LD	A,L
	CP	40H
	JR	C,KUEBER
XUEBER	LD	HL,13FH
KUEBER
	EX	DE,HL
	POP	HL
	LD	M,D
	DEC	HL
	LD	M,E	;Eintrag
 
	LD	A,(EBYTE)
	OR	A
	JR	NZ,EXIT
	LD	A,(VISIBLE)
	OR	A
	JR	Z,EXIT
	LD	A,(MOVEN)
	OR	A
	JR	NZ,MOVING
	LD	A,(MOVRQ)
	INC	A
	LD	(MOVRQ),A
	JR	EXIT
MOVING	EI
	LD	HL,(MICKX)
	LD	DE,(MICKXA)
	LD	(MICKXA),HL
	XOR	A
	SBC	HL,DE
	LD	HL,(MICKY)
	LD	DE,(MICKYA)
	LD	(MICKYA),HL
	JR	NZ,SOWIESO
	XOR	A
	SBC	HL,DE
	JR	Z,NONEU
SOWIESO	CALL	SPRALT
	CALL	SPRNEU
NONEU	DI
	JR	EXIT
EINTR	LD	(IX+13),C
	SET	0,(IX+8)
NOVER	;
EXIT	POP	HL
	LD	E,M
	LD	D,0B8H
	LD	C,80H
	LD	B,E
	LD	A,(DE)
	OUT	(C),A	;M003 (2) alt
	DEC	HL
	LD	E,M
	LD	B,E
	LD	A,(DE)
	OUT	(C),A	;M003 (1) alt
	;
	POP	BC
	POP	DE
	POP	HL
	POP	AF
	EI
	RETI
;
INITTB	DEFB	47H
	DEFB	2EH
	DEFW	0E002H
	DEFB	18H
	DEFW	4414H
	DEFW	0E103H
	DEFW	0EA05H
	DEFW	1811H
	DEFW	0011H	;DI
;
	DEFW	7F7FH
	DEFM	'MOUSE'
	DEFB	1
INITM	LD	D,L
	PUSH	DE
	LD	HL,ISR
	DI
	LD	(1E0H),HL
	;
	DEC	HL	;Interruptbeginn
	LD	DE,0B789H ;ARG4+1
	LD	A,(0B781H)
	LD	B,A
	CP	4
	JR	C,NSTEPY
	LD	A,(DE)	;STEPY
	LD	M,A
NSTEPY	DEC	HL
	DEC	HL	;^StepX
	JR	C,NSTEPX
	DEC	DE
	LD	A,(DE)	;STEPX
	LD	M,A
NSTEPX	DEC	HL
	DEC	HL	;^Freigabe
	LD	M,0	;Freigabe
	DEC	HL	;Usertaste
	LD	A,B
	CP	3
	JR	C,NUSER
	LD	M,C
NUSER	DEC	HL
	DEC	HL
	DEC	HL	;^SIOPORT
	POP	DE	;D=Slot,E=Port
	CP	2
	JR	C,NSIOK
	LD	A,E
	CP	10H
	JR	NC,USERSIO
	CP	4
	JR	NC,KANNR
	DEC	A
KANNR	AND	1
	ADD	8	;V.24
USERSIO	LD	M,A
NSIOK	LD	A,B
	OR	A
	DEC	HL	;^Schacht2
	JR	Z,SIOSL
	LD	A,D
	OR	A
	JR	Z,SIOTOT
	LD	M,D
SIOSL	LD	D,M	;D=0: SIO t|ten
SIOTOT	DEC	HL	;^Schacht1
	LD	BC,780H
MM03	INC	B
	JR	Z,NM03
	IN	A,(C)
	CP	0EEH
	JR	NZ,MM03
NM03	LD	M,B	;merken
	XOR	A
	OUT	(C),A	;aus
	INC	HL	;^Schacht2
	LD	B,M
	INC	A
	OUT	(C),A	;ein
	INC	HL	;^SIOPort
	LD	A,M
	ADD	4	;CTC
	PUSH	HL
	LD	BC,INITTB-ISRD-2
	ADD	HL,BC
	LD	C,A
	LD	B,2
	OTIR
	SUB	2
	LD	C,A
	SET	0,C	;f.Kanal B
	LD	B,2
	OTIR
	LD	C,A
	LD	B,9
	OTIR
	LD	A,D
	OR	A
	JR	NZ,NTOT
	LD	B,2
	OTIR
NTOT	POP	HL	;^Port
	EI
	DEC	HL
	LD	B,M
	LD	E,B
	LD	C,80H
	LD	D,0B8H
	LD	A,(DE)
	OUT	(C),A
	DEC	HL
	LD	B,M
	LD	E,B
	LD	A,(DE)
	OUT	(C),A
	RET
;
SPRALT	;KC85/4-spezifisch!
	LD	HL,(SPRADR)
	LD	DE,PUFFER
	LD	C,16
ALT1	LD	B,3
ALT2	LD	A,(DE)
	LD	M,A
	INC	H
	INC	DE
	DJNZ	ALT2
	DEC	H
	DEC	H
	DEC	H
	INC	L
	DEC	C
	JR	NZ,ALT1
	RET
SPRNEUM
	DI		;Nicht unter-
	LD	A,1	;rechbare
	LD	(VISIBLE),A ;Einheit
	XOR	A	;(s.a."SYSTEM-
	LD	(MOVEN),A ;SOFTWARE")
	LD	(MOVRQ),A
	EI
SCHLEPE	CALL	SPRNEU
MOVENA	DI
	LD	A,(MOVRQ)
	OR	A
	JR	NZ,SCHLEPP
NOSCHLE	LD	A,1	;Bew. freigeben
	LD	(MOVEN),A
	EI
	RET
SCHLEPP
	XOR	A
	LD	(MOVRQ),A
	LD	A,(VISIBLE)
	OR	A
	JR	Z,NOSCHLE
	EI
	CALL	SPRALT
	JR	SCHLEPE
SPRALTM
	DI
	XOR	A
	LD	(VISIBLE),A
	LD	(MOVEN),A
;	LD	(MOVRQ),A
	EI
	CALL	SPRALT
	RET
MOVDIS
	DI
	XOR	A
	LD	(MOVEN),A
	LD	(MOVRQ),A
	EI
	RET
SPRNEU
	PUSH	IY
	LD	HL,(MICKX)
	ADD	HL,HL
	ADD	HL,HL
	ADD	HL,HL
	ADD	HL,HL
	ADD	HL,HL
	SET	7,H
	LD	A,(MICKY)
	LD	L,A
	LD	(SPRADR),HL
	PUSH	HL
	LD	DE,PUFFER
	LD	C,16
NEU1	LD	B,3
NEU2	LD	A,M
	LD	(DE),A
	INC	H
	INC	DE
	DJNZ	NEU2
	DEC	H
	DEC	H
	DEC	H
	INC	L
	DEC	C
	JR	NZ,NEU1
	LD	A,(MICKX)
	CPL
	AND	7
	INC	A
	LD	HL,SPRITE
	LD	(IX),16	;Z{hler
	;A=Bit-Nr.
PFEIL	LD	D,M
	INC	HL
	LD	E,M
	INC	HL	;AND-Byte
	DEFB	0FDH
	LD	H,D
	DEFB	0FDH
	LD	L,E
	LD	D,M
	INC	HL
	LD	E,M
	INC	HL	;XOR-Byte
	LD	BC,0FF00H
	PUSH	AF
	EX	DE,HL
ROT	ADD	HL,HL
	RL	C
	ADD	IY,IY
	INC	IY
	RL	B
	DEC	A
	JR	NZ,ROT
	EX	DE,HL
	POP	AF
NOROT	EX	(SP),HL
	PUSH	AF
	LD	A,M
	AND	B
	XOR	C
	LD	M,A
	INC	H
	LD	A,H
	CP	0A8H
	JR	NC,UEB1
	LD	A,M
	DEFB	0FDH
	AND	H
	XOR	D
	LD	M,A
	INC	H
	LD	A,H
	CP	0A8H
	JR	NC,UEB2
	LD	A,M
	DEFB	0FDH
	AND	L
	XOR	E
	LD	M,A
UEB2	DEC	H
UEB1	DEC	H
	POP	AF
	INC	L
	EX	(SP),HL
	JR	Z,ENDE
	DEC	(IX)
	JR	NZ,PFEIL
ENDE	POP	HL
	POP	IY
	RET
GETMICK
	LD	HL,(MICKX)
	LD	DE,(MICKY)
	RET
 
	DEFW	7F7FH
	DEFM	'JPHL'
	DEFB	1
	JP	(HL)
 
	DEFW	7F7FH
	DEFM	'UMLEITUNG'
	DEFB	1
	LD	HL,(0B7A4H)
	LD	(BIEGE+1),HL
	LD	HL,SCROL
	LD	(0B7A4H),HL
	LD	HL,OBYTE
	LD	(0B7B9H),HL
	LD	HL,OUTPUT
	LD	(0B7C4H),HL
DUMMY	RET
OBYTE	DEFB	3
SCROL
	PUSH	DE
	CALL	SPRALTM
	POP	DE
BIEGE	CALL	DUMMY
	PUSH	DE
	CALL	SPRNEUM
	POP	DE
	RET
	;
OUTPUT	;A=Zeichen
	PUSH	BC
	PUSH	HL
	PUSH	DE
	PUSH	AF
	CALL	MOVDIS
	LD	A,(VISIBLE)
	OR	A
	JR	Z,LASSEN
	POP	AF
	PUSH	AF
	CP	0CH
	JR	Z,MWEG
	LD	DE,(0B7A0H)
	LD	HL,(0B79CH)
	ADD	HL,DE
	EX	DE,HL
	LD	HL,(MICKY)
	ADD	HL,HL
	ADD	HL,HL
	ADD	HL,HL
	ADD	HL,HL
	ADD	HL,HL
	LD	A,D
	SUB	H
	CP	3
	JR	NC,LASSEN
	POP	AF
	PUSH	AF
	CP	2	;CLLN?
	JR	Z,MWEG
	LD	HL,(MICKX)
	ADD	HL,HL
	ADD	HL,HL
	ADD	HL,HL
	ADD	HL,HL
	ADD	HL,HL
	LD	A,E
	SUB	H
	CP	3
	JR	NC,LASSEN
MWEG	CALL	SPRALTM
	POP	AF
	CALL	0F003H
	DEFB	0
	PUSH	AF
	CALL	SPRNEUM
	JR	LASSE1
	;
LASSEN	POP	AF
	CALL	0F003H
	DEFB	0
	PUSH	AF
LASSE1	CALL	MOVENA
	POP	AF
	POP	DE
	POP	HL
	POP	BC
	RET
MIKCURS	;Mickeyz{hler zu Cursorpos.
	;Im Fenster!
	;PA:HL=VRAM-Adr
	;   DE=Cursor
	;   CY=1:au~erhalb
	LD	DE,(0B79CH)
	LD	HL,(MICKX)
	ADD	HL,HL
	ADD	HL,HL
	ADD	HL,HL
	ADD	HL,HL
	ADD	HL,HL
	LD	A,H
	SUB	E
	RET	C
	LD	E,A
	LD	HL,(MICKY)
	ADD	HL,HL
	ADD	HL,HL
	ADD	HL,HL
	ADD	HL,HL
	ADD	HL,HL
	LD	A,H
	SUB	D
	RET	C
	LD	D,A
	CALL	0F003H
	DEFB	32H	;DABR
	RET
Ã+cÓbÃdbôaàbÃub
Detected encoding: ANSI (CP1252)4
Wrong umlauts? - Assume file is ANSI (CP1252) encoded