100 REM Create "Cylon" light pattern on 'Crate 110 REM MJM - Jul 08, 2008 115 REM Apr 24, 2010 - Added comments and quit message 120 : 200 SITBL = 2 * 256 + 8 * 16: REM IDTBL at $280 210 P3 = 3 * 256 + 12 * 16 + 12: REM $3CC = ID, jmp servelp 220 ID = PEEK (P3): REM Our ID 230 PRINT "Cylon running on #"ID 235 PRINT "&BPOKE (512,0) twice to quit." 240 : 250 BUF = 512: REM $200 255 REM In loop BUF = 0 ==> Quit 257 REM 1 ==> Move up 258 REM 2 ==> Wait 259 REM 3 ==> Move down 260 : 270 & IDTBL(IT): REM Get address of NadaNet vars 280 RM = PEEK (IT - 21): REM ID of RUNning machine (rbuf+frm) 290 POKE BUF,1: REM Status = OK 300 & POKE (RM,SITBL + ID,1,BUF): REM Check in with BPRUNner 310 : 320 FOR I = 2 TO PEEK (SITBL): REM Count AppleCrate machines 330 IF NOT DL THEN IF PEEK (SITBL + I) = 2 THEN DL = I: REM Lowest 340 IF PEEK (SITBL + I) = 2 THEN DH = I: REM Highest 350 NC = NC + ( PEEK (SITBL + I) = 2): REM Count machines 360 NEXT 370 IF DH - DL < > NC - 1 THEN PRINT "Machines not contiguous.": STOP 380 : 390 IF ID = 2 THEN POKE BUF,3: GOTO 480: REM Start moving down 395 POKE BUF,2: REM All others wait... 400 : 410 REM Main loop 420 & SERVE(0): REM Service requests 430 BF = PEEK (BUF) 440 IF BF = 2 GOTO 420: REM wait for message 450 : 460 IF BF = 0 THEN PRINT "End.": END 470 IF ID = 2 OR ID = 17 THEN POKE BUF,4 - BF: REM Reverse dir 480 D = ID + PEEK (BUF) - 2: REM Send to next/prev neighbor 490 & POKE (D,BUF,1,BUF) 500 POKE BUF,2: REM Wait for &POKE 510 PRINT CHR$ (7);: REM Delay 100 ms. & flash LED 520 GOTO 420