MOUSEP5 ASM ;
;*** 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
|
|