MILC logo

IndexVorigeVolgendeLeeg

Muis herkennen
Hans Kester, 01-01-93


    
; KNAAG.GEN
; Routine met voorbeeldje voor het herkennen van een muis
; Hans Kester, 1 januari 1993	  (Gelukkig nieuwjaar!)


CHPUT        EQU	00A2H
CALSLT       EQU	001CH
NEWPAD       EQU	01ADH

; Testprogrammaatje, geeft de waarde van A na aanroep van de routine MUIS
             CALL	MUIS
             ADD	A,"0"
             LD	IX,CHPUT
             LD	IY,(#FCC0)
             CALL	CALSLT
             JP	0


; Test op aangesloten knagertjes
; Na aanroep geeft register A het aantal muizen aan:
;    A = 0  betekent geen muis gevonden
;        1  betekent muis aan poort 1
;        2  betekent muis aan poort 2
;        3  betekent twee muizen aanwezig (poort 1 en 2)
MUIS         PUSH	HL		; bewaar registers
             PUSH	BC
             SUB	A		; reset muisteller
             LD	(MUISNUM),A
             LD B,10                    ; aantal tests in B
; kijk of er een knager aan poort 1 hangt...
MUIS1        LD A,12                    ; eerst samplen poort 1
             LD IX,NEWPAD               ; via de NEWPAD-routine
             PUSH	BC		; bewaar teller B
             CALL	SUBROM		; roep NEWPAD aan in SUB-ROM
             LD A,13                    ; vraag X-offset op (poort 1)
             LD IX,NEWPAD               ; weer via NEWPAD
             CALL	SUBROM
             POP	BC		; haal teller terug
             OR A                       ; is offset soms 0?
             JR Z,MUIS1_WEL             ; dan is er een muis !!
             LD C,A                     ; X-offset in C
             PUSH	BC		; bewaren met teller
             LD A,14                    ; Y-offset aanvragen (poort 1)
             LD	IX,NEWPAD
             CALL	SUBROM
             POP	BC		; haal X-offset en teller
             OR A                       ; is die soms 0?
             JR Z,MUIS1_WEL             ; dan is er een muis aanwezig
             CP C                       ; X-offset = Y-offset ??
             JR NZ,MUIS1_WEL            ; nee, dus wel een muis
             DJNZ	MUIS1		; anders nogmaals testen
             JR MUIS2                   ; geen muis in poort 1...

MUIS1_WEL    LD A,1                     ; muis in poort 1 gevonden
             LD	(MUISNUM),A

; knaagdier aangesloten op poort 2 wellicht?
MUIS2        LD B,10                    ; wederom tien tests
MUIS2_LUS    LD A,16                    ; eerst weer samplen
             LD IX,NEWPAD               ; nu echter poort 2
             PUSH	BC		; bewaar teller B
             CALL	SUBROM
             LD A,17                    ; vraag X-offset op (poort 2)
             LD	IX,NEWPAD
             CALL	SUBROM
             POP	BC		; haal B terug
             OR A                       ; is A soms nul?
             JR Z,MUIS2_WEL             ; dan is er weer een muis!!
             LD C,A                     ; X-offset in C
             PUSH	BC		; bewaren
             LD A,18                    ; Y-offset aanvragen (poort 2)
             LD	IX,NEWPAD
             CALL	SUBROM
             POP	BC		; haal X-offset en teller
             OR A                       ; is Y-offset nul?
             JR Z,MUIS2_WEL             ; dan is er een knaagdier...
             CP C                       ; X-offset = Y-offset ??
             JR NZ,MUIS2_WEL            ; nee, dus wel een muis
             DJNZ	MUIS2_LUS	; test nogmaals
             JR END_MUIS                ; geen muis in poort 2

MUIS2_WEL    LD HL,MUISNUM              ; muis op poort 2
             INC	(HL)		; verhoog muisgetal met twee
             INC	(HL)

END_MUIS     LD A,(MUISNUM)             ; code in A
             POP	BC		; herstel registers
             POP	HL
             RET			; return

; Roep het SUB-ROM aan op adres IX
SUBROM       LD IY,(0FAF7H)             ; slot-id in IY
             CALL	CALSLT		; en doe een interslot-call
             RET			; terug naar aanroep

; teller van het aantal muizen
MUISNUM      DEFB	0


    

Index

Vorige

Volgende