1 REM ********************************* * * 2 REM * B+ DEMO PROGRAM BY J. MATTSON * * - 05/20/89 - * 3 REM * THIS PROGRAM HAS BEEN CREATED * * TO HELP YOU ABSORB THE MANY * 4 REM * NEW COMMANDS. STUDY THE REMS * * & PROGRAMMING TECHNIQUES AND * 5 REM * YOU WILL BE WELL ON YOUR WAY * * MASTERING B+! * 6 REM * * ********************************* 7 REM 8 REM * LOAD B+ AND SET THINGS UP * 10 IFA=.THENA=1:LOAD"B+",8,1 15 REM *PROTECT HI-RES AREA FROM BASIC* 20 POKE52,88:POKE56,88:CLR:PRINTCHR$(142); 25 REM * SPRITE POINTER FOR LATER USE * 30 FORI=.TO63:POKE22528+I,.:NEXT:FORI=.TO5:READJ:POKE22528+I*3,J:NEXT 40 DATA 240,224,176,24,12,4 42 REM * QUICK ML ROUTINE ALLOWS SAFE * * RETURN TO LOADSTAR - 'QUIT' * 45 REM * RESETS COMPUTER, SO SHOULD * * NOT BE USED WITH 'CHAINED' * 48 REM * PROGRAMS (LIKE LOADSTAR) * 50 FORI=22592TO22633:READJ:POKEI,J:NEXT:DATA120,160,0,162,0,185,94,88,153,4,3 60 DATA200,192,6,144,245,185,94,88,157,20,3,200,232,224,6,144,244,88,96 70 DATA124,165,26,167,228,167,49,234,102,254,1,254 75 REM * SET UP X & Y EQUIVALENTS FOR * * JOY COMMAND DIRECTIONS, THEN * 78 REM * JUMP TO MAIN PROGRAM TO SKIP * * VARIOUS SUBROUTINES * 80 FORI=.TO8:READX(I),Y(I):NEXT:GOTO140 90 DATA 0,0,0,-1,1,-1,1,0,1,1,0,1,-1,1,-1,0,-1,-1 95 REM * FREQUENTLY USED SUBROUTINES * * FIRST, WAIT FOR SPACE BAR * 100 POKE198,.: REM CLEAR KEYBOARD 110 GETA$:IFA$<>" "THEN110 120 RETURN 125 REM * NORMALIZE SCREEN VALUES * 130 (null)0:(null)1024:(null)4096:(null)0:(null)0,15:(null)1,11:(null)7,13:(null):RETURN 135 REM * ACTIVATE B+ AND GET ROLLING * 140 SYS49152 145 REM * PAUSE TO SHOW TITLE SCREEN * * THEN SET UP FIRST WINDOW - * 150 (null)1:(null)2,6,27,7,0,1:(null)7,13:A$="THIS OPENING SCREEN TELLS" 155 REM * NOTE THAT STRING VARIABLES * * CAN BE ADDED TOGETHER WHEN * 158 REM * THE DESIRED STRING IS TOO * * LONG FOR A BASIC LINE * 160 A$=A$+"YOU THAT B+ IS INSTALLED.OF COURSE, YOU'LL WANT TO" 170 A$=A$+"CLEAR IT AFTERWARDS WITH THE CLS[153] COMMAND." 172 REM * COLOR CODES MAY BE EMBEDDED * * TO CHANGE THE COLOR OF TEXT * 175 REM * - BE CAREFUL TO FORMAT THE * * STRING TO FIT THE WINDOW - * 178 REM * COUNTING COLOR CHARACTERS! * * NOW OPEN THE WINDOW... * 180 (null)A$ 185 REM * PAUSE AND REPEAT PROCEDURE * * FOR THE NEXT WINDOW * 190 (null)2:A$="^ THIS IS AN EXAMPLE OFTHE WINDOW COMMANDS, BYTHE WAY." 200 (null)13,12,25,5,0,1:(null)A$ 205 REM * NOW A 'PRESS SPACE' MESSAGE * * WITH A 'DOT' BORDER... * 210 (null)2:(null)7,10:(null)11,16,18,3,81,2:(null)" > PRESS SPACE <":I=. 215 REM * ...AND JAZZ IT UP WITH THE * * PAINT COMMAND * 220 GETA$:IFA$<>" "THENI=(I+1)AND15:(null)81,I:GOTO220 225 REM * CLOSE UP THE WINDOWS SLOWLY * * TO MAKE EFFECT OBVIOUS * 230 FORI=1TO3:(null):FORJ=1TO200:NEXTJ,I:(null)7,13:(null)16,11,8,3,0,1 240 (null)"WHEEE!":FORI=1TO400:NEXT:(null):(null)1 245 REM *CLEAR SCREEN & EXPLAIN STUFF * 250 (null):PRINT" DURING THIS DEMO YOU CAN MOVE TO THE" 260 PRINT" NEXT SCREEN BY PRESSING [158]SPACE.[153]":(null)1 270 PRINT" THE FLASHING BORDER ON THE LAST SCREEN" 280 PRINT" WAS CREATED WITH THE PAINT[153] COMMAND, BY THE WAY.":(null)1 290 PRINT" NOTE THE WAY THE SCREEN WAS RESTORED BEHIND THE WINDOWS.":(null)1 300 PRINT" SIMILARLY, WHOLE SCREENS CAN BE STORE[153]D AND RECALL[153]ED.":GOSUB100 305 REM * SAVE SCREEN IN BUFFER ZERO * * AND THEN CLEAR IT * 310 (null)0:(null):PRINT" LET'S DEMONSTRATE...":GOSUB100 315 REM * RESTORE SCREEN... * 320 (null)0:GOSUB100 325 REM * ...AND OPEN MESSAGE WINDOW * 330 (null)7,10:(null)4,6,32,3,0,1:(null)"NOW FOR SOMETHING DIFFERENT..." 340 GOSUB100:(null):(null)7,13 345 REM * THE SPRITE COMMANDS * 350 (null):PRINT" FIRST, WE'LL ACTIVATE A SPRITE AND" 360 PRINT" POSITION IT WITH SPRITE[153] AND MOVSPR[153], RESPECTIVELY." 370 (null)0,170,136:(null)0,1,1,0,0,0,0:(null)2 375 REM * LINK JOYSTICK 2 TO SPRITE 0 * * WITH A SPEED OF 3 * 380 (null)2,0,3:PRINT" TRY MOVING THE PORT TWO JOYSTICK...":(null)2 390 PRINT" THE JOYSTICK AND THE SPRITE ARE NOW" 400 PRINT" LINK[153]ED - AND WILL CONTINUE TO BE, EVEN WHILE THIS DEMO IS GOING!" 410 GOSUB100:(null):PRINT" LET'S MAKE USE OF THIS WITH SOME NEW" 420 PRINT" COMMANDS. WE'LL MAKE A HI-RES SCREEN" 430 PRINT" WITH BANK[153], CSET[153], MODE[153] & SCREEN[153], ERASE" 440 PRINT" IT WITH WIPE[153] AND THEN DRAW ON IT WITH" 450 PRINT" PLOT[153] AND JOY[153]. PRESS [158]FIRE[153] TO DRAW A DOT OR ERASE A DRAWN DOT." 460 PRINT" YOU'LL PROBABLY WANT TO STUDY THE DEMO PROGRAM TO SEE HOW THIS "; 470 PRINT"WAS DONE. NOTE THAT THE ROUTINE WILL WORK MUCH FASTER" 472 PRINT" WITH THE MANY [158]REM[153] STATEMENTS REMOVED.":GOSUB100 475 REM * SWITCH BANK TO 16384-32767 * * AND VIDEO MATRIX TO 23552, * 478 REM * WITH HI-RES SCREEN AT 24576 * 480 (null)1:(null)23552:(null)24576 485 REM * SWITCH ON HI-RES AND CLEAN * * UP BOTH IT & VIDEO MATRIX * 490 (null)3:(null):(null) 495 REM * CHANGE SPRITE TO THE POINTER* * WE SET UP EARLIER; SHUT OFF * 498 REM * LINK & USE JOY INSTEAD * 500 POKE24568,96:(null)0 505 REM * SET UP INITIAL COORDINATES * 510 X=170:Y=80:(null)0,X,Y 515 REM * MAIN DRAWING LOOP, USING X * * AND Y ARRAY SET UP EARLIER. * 518 REM * FIRST, CHECK KEYBOARD FOR * * SPACE (= QUIT DRAWING) * 520 GETA$:IFA$=" "THEN590 525 REM * GET JOY VALUE IN J% - IF 0 * * THEN NOTHING HAS HAPPENED * 530 (null)2,J%:IFJ%=0THEN520 532 REM * J%>0, SO MASK IT WITH 127 * * TO FIND DIRECTION WITHOUT * 535 REM * FIRE BUTTON; USE X/Y ARRAY * * TO ADD NEW MOVE & MAKE SURE * 538 REM * IT IS STILL ON THE SCREEN * 540 J=J%AND127:X1=X+X(J):Y1=Y+Y(J):IFX1<24ORX1>342THENX1=X 550 IFY1<0ORY1>249THENY1=Y 555 REM * VALUES ARE OK, SO UPDATE X * * & Y COORDINATES * 560 X=X1:Y=Y1:(null)0,X,Y 562 REM * FIRE BUTTON PRESSED? IF SO, * * RESET THE POINT. NOTE THAT * 564 REM * SPRITE & HI-RES COORDINATES * * ARE NOT THE SAME, SO AN * 566 REM * ADJUSTMENT MUST BE MADE! * * ALSO, REMEMBER TO PUT COLON * 568 REM * BETWEEN 'THEN' AND A NEW B+ * * COMMAND. * 570 IFJ%>8THEN:(null)2,X-24,Y-50 575 REM * AND RESTART LOOP... * 580 GOTO520 585 REM * SPACE WAS PRESSED, SO EXIT * * LOOP & NORMALIZE SCREEN * 590 GOSUB130:(null)0,0:PRINT" WHAT AN ARTIST!":(null)1 600 PRINT" NOW WATCH THE NEXT SCREEN CAREFULLY...":GOSUB100 605 REM * SET UP TOP OF SPLIT SCREEN: * * CLEAR IT BEFORE ACTIVATING * 608 REM * RASTER & COPY LOWER CASE * * CHARACTER SET TO IT * 610 (null)0,15,11,2,3,4,0,0,2,0,2:(null):(null)2:(null)32768:(null):(null)0:(null)1024 620 (null)1,34816 625 REM * DISPLAY SPLIT SCREEN & SHOW * * CHARACTERS IN BOTH HALVES * 630 (null)12:I=. 640 POKE32808+I,I:POKE1544+I,I:I=I+1:GETA$:IFA$<>" "ANDI<256THEN640 645 REM * TURN OFF & NORMALIZE SCREEN * 650 (null)2:(null):GOSUB130 660 PRINT" YOU SAW THAT CORRECTLY: [158]TWO[153] DIFFERENT CHARACTER SETS ON THE "; 670 PRINT"[158]SAME[153] SCREEN - WITH [158]TWO[153] SCREEN AND BORDER COLORS!":(null)3 680 PRINT" WELL, NOT QUITE THE SAME SCREEN. THE" 690 PRINT" RASTER[153] COMMANDS ALLOW YOU TO EASILY" 700 PRINT" USE [158]SPLIT SCREENS[153], WITH INFORMATION TAKEN FROM TWO SOURCES." 710 (null)3:PRINT" REMEMBER YOUR HI-RES WORK OF ART?":GOSUB100 715 REM * SET UP NEW RASTER WITH HIGH * * RESOLUTION TOP - NOTE ORDER * 720 (null)0,15,11,2,3,4,2,0,1,7,8:(null):(null)1,13,"NEAT, HUH?[153]" 730 (null)12:GOSUB100:(null):GOSUB130 740 PRINT" LEAVING THE REALM OF GRAPHICS FOR A" 750 PRINT" MOMENT, HERE'S A LESS DRAMATIC BUT EQUALLY USEFUL COMMAND..." 755 REM * WAIT FOR SPACE THEN SHOW * * DISK DIRECTORY * 760 GOSUB100:(null)7,3:(null) 765 REM * MORE MESSAGE WINDOWS... * 770 (null)2,6,36,5,0,1:A$="NOTE THE FACT THAT THIS PROGRAM ISSTILL RUNNING" 780 A$=A$+" QUITE NICELY AFTER ISSUING A DIRECTORY[153] COMMAND!":(null)7,13 790 (null)A$:GOSUB100:(null):A$="NOW LET'S CLEAN UP IN AN UNUSUALWAY WITH " 800 A$=A$+"THE LCLEAR COMMAND...":(null)3,11,34,4,0,1:(null)A$:GOSUB100 810 (null):(null)7,13:(null)0 815 REM * USE LCLEAR TO ERASE LINES * * IN A SPECIFIC ORDER * 820 FORI=.TO12:(null)12-I,12+I:FORJ=1TO25:NEXTJ,I 830 (null):PRINT" LET'S BRING IT BACK FOR MORE SPECIAL" 840 PRINT" EFFECTS, USING DICE[153] AND FCOL[153]...":GOSUB100 845 REM * RECALL SCREEN, THEN FILL IT * * WITH RANDOM COLORS * 850 (null)0 860 (null)16,D%:(null)D%-1:GETA$:IFA$<>" "THEN860 870 (null):PRINT" THERE ARE EVEN MORE NEW COMMANDS AT" 880 PRINT" YOUR DISPOSAL WHICH CAN'T BE VISIBLY DEMONSTRATED HERE." 890 PRINT" THE BEST WAY TO LEARN ABOUT THEM IS TO" 900 PRINT" TRY THEM OUT YOURSELF.":GOSUB100:(null):(null)0,0:(null)1,0:(null)7,1 905 A$=" B+" 910 FORI=.TO7:(null)16,I,8,5,0,I+1:(null)A$:(null)16,20-I,8,5,0,I+1:(null)A$ 920 NEXT:A$=" B+: ADVANCED BASIC ":(null)9,10,22,5,0,15 930 A$=A$+" [153]BY J. MATTSON":(null)A$:GOSUB100:(null) 940 (null)8,11,24,3,0,1:(null)"Q)UIT OR W)ATCH AGAIN?" 950 GETA$:IFA$<>"Q"ANDA$<>"W"THEN950 960 FORI=.TO16:(null):FORJ=1TO5:NEXTJ,I:IFA$="W"THEN140 970 REM * DEACTIVATE B+ & CLEAN UP * * NORMALLY THE 'QUIT' COMMAND * 980 REM * WOULD DO ALL OF THIS, BY * * RESETTING THE COMPUTER * 1000 SYS22592 1010 POKE53280,14:POKE53281,6:PRINTCHR$(142)"[154][147]";:POKE52,160:POKE56,160:CLR 1012 REM 1015 REM **RETURN TO LOADSTAR********** 1018 REM 1020 OPEN15,8,15,"R0:B+ MENU=B+ MENU":INPUT#15,ER:CLOSE15 1030 IFER=63THEN1070 1040 PRINT"[147]":END 1050 GETA$:IFA$<>CHR$(13)THEN1050 1060 GOTO1020 1070 PRINT"[147]RETURNING TO B+ MENU... ":PRINT"LOAD"CHR$(34); 1080 PRINT"B+ MENU"CHR$(34)",8":PRINT"RUN[145][145][145][145][145][145][145][145]":POKE631,13 1090 POKE632,13:POKE633,13:POKE198,3:NEW