I built a simple gameshow card for the Apple II. The system supports up to 32 users. A buzzer is wired to each student's desk.
Four 74LS244 buffers connect the buzzer lines to the data bus. A PAL is used for the chip select. The buzzers are located at addresses $C0C0 through $C0C3 (8 buzzers to an address). The code scans the addresses until it detects a buzzer going off, then displays the number of that buzzer.
The board was done primarily with wire-wrap.
Here's the code I wrote for it:
[tt]100 C = 0
105 FOR V=49344 TO 49346
110 A = PEEK(V)
115 GOSUB 200
120 IF (R <> 0) THEN GOSUB 300
125 C = C + 8
130 NEXT V
135 GOTO 100
200 B = 128
205 I = 8
210 FOR Q = 1 TO 8
220 IF (A >= B) THEN RETURN
225 B = B / 2
230 I = I - 1
235 NEXT Q
240 R = 0
300 PRINT R
305 INPUT =T$
310 HOME : RETURN[/tt]
This was originally meant as just a test program, but I never got around to writing something more advanced.
There are only 20 students in the class, so this code doesn't bother to scan the last eight buzzers. There's no good way scan bits in BASIC, which is why we have this inelegant routine with the division. If anybody would like to rewrite this in assembly or improve the interface (maybe add some graphics and sounds), that would be fantastic.
It looked really nice before I hooked 60 cables up to it! This is not the way to do a patch panel.
To save money, I used telephone wire, which wasn't a lot of fun to crimp.
The buzzers are three-terminal lever switches, duct-taped upside down. This works pretty well.
Wires snake across the floor and up the arms of each chair.