Listing 1-The highest priority was given to the monitoring of the alarm keypad's key presses. The BASIC ONEX1 command branches to line 20000 to decode a key press and log it.
120 ONEX1 20000 : REM CAPTURE ALARM KEY PRESSED
...
20000 REM INTERRUPT ROUTINE - EXTERNAL BUTTON PUSHED
20010 LED=PORT1.XOR.255 : REM INVERT DATA
20020 IF (LED.AND.07H)=0 THEN GOTO 20010 : REM CHECK FOR DATA
20025 LED=LED.AND.3FH
20026 BUT=LED.AND.37H : REM MASK OFF ALL BUT BUTTON INFO
20030 IF BUT=15H THEN GOTO 21000 : REM BUTTON 0
20035 IF BUT=21H THEN GOTO 21100 : REM BUTTON 1
20040 IF BUT=22H THEN GOTO 21200 : REM BUTTON 2
20045 IF BUT=23H THEN GOTO 21300 : REM BUTTON 3
20050 IF BUT=24H THEN GOTO 21400 : REM BUTTON 4
20055 IF BUT=25H THEN GOTO 21500 : REM BUTTON 5
20060 IF BUT=26H THEN GOTO 21600 : REM BUTTON 6
20065 IF BUT=11H THEN GOTO 21700 : REM BUTTON 7
20070 IF BUT=12H THEN GOTO 21800 : REM BUTTON 8
20075 IF BUT=13H THEN GOTO 21900 : REM BUTTON 9
20080 IF BUT=14H THEN GOTO 22000 : REM BUTTON DOOR
20085 IF BUT=16H THEN GOTO 22100 : REM BUTTON ARM/DISARM
20090 RETI
20100 Z=Z+1 : XBY(Z)=0FFH : REM TAG END OF BLOCK
20110 LED=PORT1.XOR.255
20120 IF (LED.AND.17H)<>10H THEN 20110 : REM WAIT FOR NO DATA
20130 LED=PORT1.XOR.255
20140 IF (LED.AND.27H)<>20H THEN 20130 : REM WAIT FOR NO DATA
20190 RETI
21000 XBY(Z)=30H
21010 GOTO 20100
...
22000 XBY(Z)=ASC(D)
22010 GOTO 20100
22100 REM ARMED?
22101 IF (LED.AND.08H)=0 THEN GOTO 22200
22110 XBY(Z)=ASC(N) : REM NOT ARMED
22111 GOSUB 23000
22120 GOTO 20100
22200 XBY(Z)=ASC(A) : REM ARMED
22201 GOSUB 23000
22220 GOTO 20100
23000 REM STICK IN TIME/DATE STAMP
23005 Z=Z+1
23006 XBY(Z)=0AAH
23010 Z=Z+1
23011 XBY(Z)=MTH
...
23060 Z=Z+1
23061 XBY(Z)=SEC
23080 RETURN