100 REM Generate random message flow on 'Crate 110 REM with fixed-size 20-byte messages. 120 REM MJM - Nov 7, 2008 130 : 140 NM = 50: REM Number of times each msg is passed 150 ML = 20: REM Length of each message 160 : 170 SITBL = 2 * 256 + 8 * 16: REM IDTBL at $280 180 P3 = 3 * 256 + 12 * 16 + 12: REM $3CC = ID, jmp servelp 190 ID = PEEK (P3): REM Our ID 200 PRINT "RatRace running on #"ID 210 : 220 D = RND ( - ID): REM Seed RND 230 BUF = 2 * 4096: REM $2000 240 Q = 30: REM Base input queue 250 IQ = Q + ID: REM Our input queue 260 : 270 & IDTBL(IT): REM Locate NadaNet variables 280 RM = PEEK (IT - 21): REM ID of BPRUNning machine (rbuf+frm) 290 POKE BUF,1: REM Status OK 300 & POKE (RM,SITBL + ID,1,BUF): REM Report status 310 : 320 FOR I = 3 TO PEEK (SITBL): REM Count AppleCrate machines 330 NC = NC + ( PEEK (SITBL + I) = 2) 340 NEXT 350 : 360 POKE BUF + 1,0: REM Initial age 370 : 380 IF ID < > 3 GOTO 440: REM First slave primes queues in order 390 FOR D = 3 TO NC + 2: REM Send one message per slave 400 & PUTMSG(2,Q + D,ML,BUF) 410 NEXT D 420 GOTO 510 430 : 440 FOR I = 1 TO 1000: NEXT : REM Wait for machine #3 to prime queues 450 FOR I = 1 TO 3: REM Each *other* slave primes with 3 messages 460 D = INT ( RND (1) * NC) + 3: REM Random destination, 3..NC+2 470 & PUTMSG(2,Q + D,ML,BUF) 480 NEXT I 490 : 500 REM Message passing loop 510 FOR I = 1 TO 10 * (17 - ID): NEXT : REM Slow down higher priority machines 520 & GET MSG#(2,IQ,L,BUF): REM Receive a message 530 IF NOT PEEK (1) GOTO 590 540 PRINT CHR$ (7);: REM Delay 100 ms. & flash LED 550 K = K + 1: REM Timeout counter 560 IF K < 50 GOTO 510 570 END : REM ...if 15 seconds w/o message. 580 : 590 REM Increment message age and pass it on... 600 K = 0: REM Reset timeout counter 610 S = PEEK (BUF + 1): REM Message "age" 620 IF S = NM GOTO 510: REM Max trips--it stops here. 630 POKE BUF + 1,S + 1: REM Inc age by 1 and send it on. 640 D = INT ( RND (1) * NC) + 3: REM Random destination, 3..NC+2 650 & PUTMSG#(2,Q + D,ML,BUF) 660 IF NOT PEEK (1) GOTO 510 670 PRINT "PUTMSG err." 680 END