MSWP61  ASM;--------------------------------------
;
;Maustreiber f}r WP6 nach MOUSE1.ASM
;
;f}r 2 Interrupts an einem V.24-Modul
;
; ISR schaltet IRM ein, damit die
; eigentliche Routine im Bereich ab
; BA00H sicher erreicht wird.
;
;MSWP61.ASM	` ML-Soft 23.04.1995
;--------------------------------------
ARGN	EQU	0B781H
ARG1	EQU	0B782H
ARG2	EQU	0B784H
ARG3	EQU	0B786H
	ORG	0BA00H
 
;Datenbereich:
ISRD	DB	8	;SIO-Adresse
ISR2	DW	0	;2.ISR
BYTE	DB	0	;EMPFANGSBYTENR
TSTAT	DB	7	;TASTENSTATI
TRE	DB	0F2H	;rechte Taste
TMI	DB	0F1H	;mittl. Taste
MICKX	DB	4	;MICKEY X
STEPX	DB	12	;STEP X
MICKY	DB	8	;MICKEY Y
STEPY	DB	16	;STEP Y
ISRTOT	DB	1	;Maus ein/aus
DUMMY	DB	0	;Tastencode
 
;Selbststart mit WordPro6:
AUTO:	LD	HL,0	;WP6 simulieren
	XOR	A
	LD	(ARGN),A
	CALL	MOUSE	;Maus init.
MENU:	JP	0E000H	;WP6-Men}
 
ISR1:	;ISR auf 100H
	PUSH	AF
	IN	A,(88H)
	PUSH	AF
	SET	2,A	;IRM on
	OUT	(88H),A
	CALL	ISRBA	;ISR im IRM
	POP	AF
	OUT	(88H),A
	POP	AF
	RET
 
ISRBA:	;ISR auf BA00H
	PUSH	HL
	PUSH	DE
	PUSH	BC
	LD	HL,ISRD	;Datenzeiger
	LD	A,M	;SIO-Adresse
	ADD	2
	LD	C,A
	IN	A,(C)
	RRA		;Bit0
	JR	C,CHAR	;available
	INC	HL
	LD	A,M
	INC	HL
	LD	H,M
	LD	L,A
	POP	BC
	POP	DE
	EX	(SP),HL
	RET		;Ansprung 2.ISR
	;
CHAR:	LD	C,M
	IN	D,(C)	;Byte holen
	INC	HL
	INC	HL
	INC	HL	;^Byte-Nr.
	XOR	A
	OR	M	;Null?
	JR	NZ,DIRECT
	LD	A,D
	AND	0F8H
	CP	80H
	JR	NZ,EXIT
	INC	M	;z{hlen
	INC	HL	;^Tastenstati
	LD	A,D	;gelesenes Byte
	CPL
	AND	M
	LD	M,D
	INC	HL	;^TRE
	RRA
	JR	NC,NRIGHT
	LD	C,M
	JR	TASTE
NRIGHT:	INC	HL	;^TMI
	RRA
	JR	NC,NMIDDL
	LD	C,M
	JR	TASTE
NMIDDL:	RRA
	JR	NC,EXIT
	LD	C,0DH
	JR	TASTE
	;
DIRECT:	INC	A	;Richtungsinfo
	CP	5	;auswerten
	JR	C,DIR1
	XOR	A
DIR1:	RR	M
	LD	M,A	;neue Nummer
	LD	HL,MICKX
	LD	C,8	;CUL
	JR	C,DIR2
	INC	HL
	INC	HL
	LD	C,10	;CUD
DIR2:	LD	A,M	;Mickey
	INC	HL
	LD	E,M	;Step
	DEC	HL
	ADD	D
	BIT	7,A
	JR	Z,POSI
	ADD	E
	BIT	7,A
	JR	Z,EINTR
	XOR	A
	JR	EINTR
	;
POSI:	CP	E
	JR	C,NOVER
	INC	C	;CUR/CUU
	SUB	E
	CP	E
	JR	C,EINTR
	LD	A,E
	DEC	A
	JR	EINTR
	;
TASTE:	LD	HL,DUMMY
EINTR:	LD	(IX+13),C
	SET	0,(IX+8)
NOVER:	LD	M,A
EXIT:	POP	BC
	POP	DE
	POP	HL
	EI
	RETI
;
INITTB	;SIO-Initialisierungstabelle:
	DB	47H
	DB	2EH
	DW	0E202H
	DB	18H
	DW	4414H
	DW	0E103H
	DW	0EA05H
	DW	1811H
	DW	0011H	;DI
;
	DW	7F7FH
	DB	'MOUSE'
	DB	1
	LD	A,(0BC0CH)
	CP	0C3H
	JR	NZ,MOUSE;kein WP6!
	LD	HL,(MENU+1)
	LD	DE,0E000H
	SBC	HL,DE
	JR	NZ,MOUSE;schon install.
	LD	HL,(0BC0DH)
	LD	(MENU+1),HL
	LD	A,M
	CP	21H
	JR	NZ,MOUSE;kein WP6!
	INC	HL
	LD	A,M
	INC	HL
	LD	H,M
	LD	L,A
	LD	(AUTO+1),HL
	LD	HL,AUTO
	LD	(0BC0DH),HL
MOUSE:	LD	DE,100H
	LD	HL,ISR1
	LD	BC,ISRBA-ISR1
	LDIR		;Schaltroutine
	LD	HL,100H	;kopieren
	DI
	LD	DE,(1E2H)
	LD	A,E
	CP	L
	JR	NZ,UN1
	LD	A,H
	CP	D
	JR	Z,EQUAL	;schon aktiv!
UN1:	LD	(1E2H),HL
	LD	HL,ISR2
	LD	M,E	;alte ISR
	INC	HL	;V.24-Tastatur
	LD	M,D	;eintragen
EQUAL:	LD	A,(ARGN)
	CP	3
	JR	NC,PAR3
	CP	2
	JR	NC,PAR2
	CP	1
	JR	NC,PAR1
	JR	PAR0
PAR3:	LD	A,(ARG3)
	LD	(TRE),A	;rechte Taste
PAR2:	LD	A,(ARG2)
	LD	(TMI),A	;mittl. Taste
PAR1:	LD	A,(ARG1)
	LD	(ISRTOT),A
	CP	10H
	JR	NC,USIO	;USER-SIO
	CP	3
	JR	NC,KANNR;Portadr.
	SUB	1
	JR	C,PAR0	;Maus aus
KANNR:	AND	1
	ADD	8	;V.24
USIO:	LD	(ISRD),A
PAR0:	LD	BC,780H
MM03:	INC	B
	JR	Z,NM03	;nicht M003
	IN	A,(C)
	CP	0EEH
	JR	NZ,MM03	;weiter suchen
	LD	A,1
	OUT	(C),A	;Modul ein
	LD	C,B
	LD	B,0B8H
	LD	(BC),A	;eintragen
NM03:	LD	A,(ISRD)
	ADD	4
	LD	HL,INITTB
	LD	C,A
	LD	B,2
	OTIR		;CTC
	SUB	2
	LD	C,A
	SET	0,C	;Kanal B
	LD	B,2
	OTIR
	LD	C,A
	LD	B,9
	OTIR		;akt. Kanal
	LD	A,(ISRTOT)
	OR	A
	JR	NZ,NTOT
	LD	B,2	;SIO tot
	OTIR
NTOT:	EI
	RET
А@Аt(Аp6АnTop of Text: End of Text: Start of MC: ASM-Offset : хЫ€ц$У€сЙхЫ€жЫУ€сЙНMА~#НDАфЙEDASНMА!"@"p$
	RET
А@Аt(Аp6АnTop of Text: End of Text: Start of MC: ASM-Offset : хЫ€ц$У€сЙхЫ€жЫУ€сЙНMА~#НDАфЙEDASНMА!"@"p$