10 REM PlotLib Demo - requires BASIC 2.1i or higher
REM These two lines must occur before any DIM or $ assign!
DOKE $85,$8000:REM SET EMEM  - NEW END OF MEMORY SPACE
CALL $C006:REM PERFORM "CLEAR" - important
LOAD"PLOTLIB.BIN",$8000:REM LOAD BINARY PROGRAM AND DATA TO $8000
CALL $8000:REM INIT, SETUP WRITECHAR VECTOR
PRINT CHR$(12);"PLOTLIB DEMO"
1000 DO
  CURSOR 12,5:PRINT "Plot list of objects"
  FRAME CLEAR: FRAME COLOR 2
  CALL $8015,1,1:REM SCALE DOUBLE
  REM Num Plot initiated with leading CHR$(1) (ASCII SOH)
  FOR N=0 TO 40 STEP 0.1183
    CALL $800C:REM SYNC TO PREVENT FLICKER
    PLOT MOVE 50,50: PRINT CHR$(1);N;CHR$(0);
    PLOT MOVE 10,20
    PLOT COLOR 1
    CALL $8009,18,60-N:REM Sample Instrument
    PLOT MOVE 130,20
    PLOT COLOR 3
    CALL $8009,18,25+N:REM Sample Instrument
    PLOT COLOR 4
    PLOT MOVE 100,80
    CALL $8009,16,N*2 :REM Sample Instrument
  NEXT
2000 CURSOR 12,5:PRINT "Plot wave with values"
  REM PlotWave Demo
  Y=96
  FRAME COLOR 10:FRAME GRID 32,32
  FOR N=0 TO 200
    D=(RND(0)-0.5)*3:REM RANDOM WALK CURVE 1
    Y=Y+D
    IF Y<0 THEN Y=0
    IF Y>191 THEN Y=191
    FRAME CLEAR:PLOT COLOR 7
    PLOT MOVE 10,100
    PRINT CHR$(1);Y;CHR$(0);
    PLOT COLOR 4
    POKE $9EFF,Y:REM new Y value on wave 1
    CALL $800F,$9E00,1:REM PlotWave routine
  NEXT
  W=0
3000 CURSOR 12,5:PRINT "Double Wave Plot",,
  FOR N=0TO 256
    W=W+0.05
    D=(RND(0)-0.5)*3:REM RANDOM WALK CURVE 1
    Z=SIN(W)*50+96:REM SINE CURVE 2
    Y=Y+D
    IF Y<0 THEN Y=0
    IF Y>191 THEN Y=191
    FRAME CLEAR:PLOT COLOR 7
    PLOT COLOR 6
    POKE $9EFF,Y:REM new Y value on wave 1
    CALL $800F,$9E00,1:REM PlotWave routine
    PLOT COLOR 3
    POKE $9FFF,Z
    POKE $9FFE,Z
    CALL $800F,$9F00,2
  NEXT
4000 CURSOR 12,5:PRINT "Instrument Plot",,
  FOR SC=0 TO 1
    FOR I=0 TO 3:REM selected INSTRUMENT
      FRAME CLEAR:Y=50
      FOR N=0 TO 50
        PLOT COLOR 1+I+SC
        D=(RND(0)-0.5)*5:REM RANDOM WALK
        Y=Y+D
        IF Y<0 THEN Y=0
        IF Y>100 THEN Y=100
        CALL $8015,SC,SC: REM SET NEW SCALE FOR PLOT OBJECTS
        PLOT MOVE 72,40: REM TOP LEFT CORNER OF INSTRUMENT
        CALL $800C: REM PLOTSYNC to prevent flicker
        CALL $8009,16+I,Y: REM PLOT INSTRUMENT WITH VALUE Y
        IF SC=0 THEN PLOT MOVE 112,88
        ELSE PLOT MOVE 94,62
        IF N<80 THEN PLOT COLOR 1
        ELSE PLOT COLOR 4
        PRINT CHR$(1);N;CHR$(0);: REM PLOT NUMBER
      NEXT N
    NEXT I
  NEXT SC
LOOP UNTIL SCANKEY
REM When program ends, WriteAcc vector should be restored by:
CALL $8003
END

