
|
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
|