.TITLE BUTSET .ENABL LC .MCALL QIO$S,MRKT$C,ASTX$S CL.SIZ =10. CL.BEG =12. .PSECT SW.SYS,GBL,OVR,D SYSW: .BLKW 16. .PSECT STATSC,RW,D,OVR,GBL ISTOP: .BLKW 1 ISTAT: .BLKW 1 IBUFF: .BLKW 1 .PSECT BUTSET:: MOV #BUTRD,R0 MOV CL.SIZ(R0),R1 ; COMMAND LIST SIZE ADD #CL.BEG,R0 ; START OF CLIST QIO$S #IO.RBC,#12.,,,,#BUTI,<#BUFF,#8.,R0,R1,#377> RETURN TABL: .WORD "RU,"ST,"SC,"CS," ," ,"BE,"EN LTABL: .WORD 1,2,4,10,20,40,100,200 ; 0 RUN 1 STOP 2 WHITE 3 BLUE 4 EXTRA ; 5 EXTRA 6 BEG 7 END BUFF: .WORD 0 BUTT: .WORD 0 SWITCH: .WORD 0 SS: .WORD 0 BUTI: TST (SP)+ ; POP EXTRA WORD MOV R0,-(SP) MOV R1,-(SP) MOV R2,-(SP) MOV R3,-(SP) TST ISTAT ; TEST IF INPUT IN PROGRESS BEQ DOBUT ; NO, DO BUTTONS MRKT$C ,2,2,BUTI ; TRY AGAIN IN 2 SEC BR DONE DOBUT: MOV BUTT,R0 ; GET BUTTON PUSHED BIC #177770,R0 ; STRIP BUTTONS ASL R0 CMP R0,#12. ; VALUE TOO SMALL BLT 1$ ; YES MOV LTABL(R0),BUFF ; SET UP LIGHTS 1$: MOV TABL(R0),IBUFF ; MOVE COMMAND TO USER MOV #2,ISTAT MOV #SYSW,R0 ; GET SWITCH ARRAY MOVB BUTT+1,R1 ; GET SWITCHES MOV SWITCH,R2 ; GET USER SWITCHES SWAB R2 ; INTO UPPER BYTE BIC #377,R2 ; STRIP BIC #177400,R1 ; LIKEWISE ADD R2,R1 ; NOW SYS+USER SWITCHES MOV #16.,R3 ; NUMBER OF SHIFTS 2$: ASR R1 ; SWITCH BCC 3$ ; NONE MOV #-1,(R0)+ ; MARK IT AS SET BR 4$ 3$: CLR (R0)+ ; MARK IT AS DOWN 4$: SOB R3,2$ ; CONTINUE TILL DONE CALL BUTSET ; RESET BUTTONS DONE: MOV (SP)+,R3 MOV (SP)+,R2 MOV (SP)+,R1 MOV (SP)+,R0 ASTX$S .END