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 |