Compucolor.org – Virtual Media

Listing of file='TTRL15.BAS;01' on disk='vmedia/BASIC_language_11-15-sector.ccvf'

100 REM COPYRIGHT (C) BY COMPUCOLOR 1980
105 REM BY KLH 7/17/80 REV 1.1
110 CLEAR 1000:ADR= 256* PEEK (32941)+ PEEK (32940)
115 IF ADR> 65535- 51THEN PLOT 1
120 A2= 256* PEEK (ADR+ 50)+ PEEK (ADR+ 49):IF A2< > ADRTHEN PLOT 1
125 Q$= CHR$ (34):POKE ADR+ 41,5:POKE ADR+ 42,5
130 POKE ADR+ 44,1:POKE ADR+ 45,1
135 PLOT 6,2,12,3,16,7:PRINT "  ALGORITHMS AND MISCELLANEOUS  
140 PRINT "
  IT IS ONE THING TO KNOW ALL THE COMMANDS OF BASIC, AND QUITE
145 PRINT :PRINT TAB( 4)"ANOTHER TO USE THEM EFFECTIVELY IN YOUR PROGRAMMING. BY
150 PRINT :PRINT "  THIS TIME YOU SHOULD BE (PAINFULLY) FAMILIAR WITH BASIC, SO
155 PRINT :PRINT "  FOR THIS LESSON WE'RE GOING TO DISCUSS ALGORITHMS, AND A FEW
160 PRINT :PRINT "OTHER THINGS THAT HAVEN'T BEEN DISCUSSED ANYWHERE YET. FOR THIS
165 PRINT :PRINT TAB( 3)"REFER TO THE ENCLOSED LISTINGS OF PROGRAMS #1,#2, AND #3.
170 GOSUB 695
175 PLOT 3,5,6:PRINT "THERE ARE THREE GOOD REASONS FOR USING AN ALGORITHM; TO
180 PRINT :PRINT "INCREASE PROGRAM SPEED, TO SAVE MEMORY SPACE, AND TO PERFORM AN
185 PRINT :PRINT "  OPERATION OR FUNCTION THAT CAN BEST BE DONE BY A PROGRAM. AN
190 PRINT :PRINT "EXAMPLE OF THE FIRST TWO CASES WOULD BE COMPARING VALUES. IF AN
195 PRINT :PRINT " INPUT IS CHECKED AGAINST ONE HUNDRED VALUES, A SIMPLE ALGORITHM
200 PRINT " COULD BE WRITTEN USING AN ARRAY AND A FOR-NEXT LOOP AS OPPOSED
205 PRINT :PRINT "  TO ONE HUNDRED SEPARATE IF STATEMENTS. EVEN THOUGH THIS IS A
210 PRINT :PRINT "LITTLE DRASTIC, YOU CAN SEE THE ADVANTAGE OF THE ALGORITHM. THE
215 PRINT :PRINT "   OTHER CASE WILL BE THE POINT OF OUR THREE EXAMPLE PROGRAMS.
220 GOSUB 695
225 PLOT 3,1,4:PRINT "PROGRAM #1 IS AN INTERESTING SOLUTION TO THE AGE-OLD QUESTION
230 PRINT :PRINT TAB( 5)Q$"HOW DO I GET EXTENDED PRECISION?"Q$". THIS PROGRAM TAKES
235 PRINT :PRINT "THREE NUMBERS, AND DIVIDES THE FIRST BY THE SECOND TO THE NUMBER
240 PRINT " OF PLACES SPECIFIED BY THE THIRD. FOR WHAT IT DOES THE PROGRAM
245 PRINT :PRINT TAB( 12)"IS VERY SIMPLE, SO LET'S GO THROUGH IT.
250 PRINT :PRINT "  AFTER GETTING ALL INPUTS, DD (THE DIVIDEND) IS DIVIDED BY DR
255 PRINT :PRINT "  (THE DIVISOR), AND THE INTEGER PORTION Q IS KEPT AND PRINTED.
260 PRINT :PRINT " NEXT, THE REMAINDER (DD-Q*DR) IS MULTIPLIED BY TEN AND STORED
265 PRINT :PRINT TAB( 4)"BACK IN DD. THE PROCESS IS REPEATED UNTIL THE DIVISION HAS
270 PRINT :PRINT "  BEEN DONE THE SPECIFIED NUMBER OF TIMES OR UNTIL THERE IS NO
275 PRINT :PRINT TAB( 17)"REMAINDER LEFT TO BE DIVIDED.
280 GOSUB 695:PLOT 3,3,9
285 PRINT "THE REASON THIS ALGORITHM WORKS IS THAT IT IS BASED ON THE
290 PRINT :PRINT "   SAME PRINCIPLE AS USED FOR DIVISION; MULTIPLY THE NUMBER OF
295 PRINT :PRINT " TIMES THE DIVISOR WILL GO INTO THE DIVIDEND TIMES THE DIVISOR,
300 PRINT :PRINT " SUBTRACT THAT NUMBER FROM THE DIVIDEND, THE RESULT BECOMES THE
305 PRINT :PRINT "  NEW DIVIDEND, AND START OVER. BY LOOKING AT THE PROGRAM THIS
310 PRINT :PRINT TAB( 17)"SHOULD BECOME CLEAR TO YOU.
315 GOSUB 695
320 PLOT 3,2,7:PRINT "PROGRAM #2 IS A DEMONSTRATION OF A WAY TO READ THE KEYBOARD,
325 PRINT :PRINT "EVEN WHEN IT IS LOCKED OUT. THIS SENTENCE MAY SEEM TO CONTRADICT
330 PRINT " ITSELF, BUT IT IS TRUE. BY USE OF THE OUT AND INP STATEMENTS,
335 PRINT :PRINT "  THE STATUS OF MOST KEYS CAN BE READ. NOTE THE WORD MOST: THIS
340 PRINT :PRINT "  ALGORITHM MAY TELL YOU SOME KEYS ARE DOWN THAT ARE NOT. THIS
345 PRINT :PRINT " IS ONE REASON THE SYSTEM SOFTWARE WILL NOT RESPOND WHEN TWO OR
350 PRINT :PRINT " MORE KEYS ARE SIMULTANEOUSLY STRUCK. ALSO NOTE THAT THE SHIFT,
355 PRINT :PRINT TAB( 12)"CONTROL AND COMMAND KEYS HAVE NO EFFECT.
360 GOSUB 695
365 PLOT 3,2,4:PRINT "THERE ARE SIXTEEN VALUES TO BE OUTPUT IN ORDER TO READ THE
370 PRINT :PRINT "STATUS ON ALL THE KEYS. WHEN THE PROGRAM IS RUN, THE ARRAY A IS
375 PRINT :PRINT "DIMENSIONED FOR 16 VALUES (0-15). EACH VALUE IS OUTPUT TO PORT
380 PRINT :PRINT "7 (TRANSMITS PARALLEL DATA TO KEYBOARD) AND THE INPUT FROM PORT
385 PRINT :PRINT " 1 (READ PARALLEL DATA FROM KEYBOARD) IS STORED IN THE ARRAY.
390 PRINT :PRINT "  NEXT, EACH OF THE SIXTEEN INPUTS ARE CHECKED. IF THE VALUE IS
395 PRINT :PRINT "255 NO KEY IN THAT SECTION WAS DOWN; OTHERWISE AT LEAST ONE KEY
400 PRINT :PRINT " WAS DOWN. THE VALUE IS REARRANGED - LINES 160 AND 170 IN EFFECT
405 PRINT "  EXCHANGE THE UPPER AND LOWER FOUR BITS. THE NEW VALUE IS THEN
410 PRINT :PRINT " SCANNED BIT BY BIT, AND EACH BIT THAT IS ZERO IS CONVERTED IN
415 PRINT :PRINT "  LINE 200 TO REPRESENT THE KEY THAT IS DOWN. WHEN ALL VALUES
420 PRINT :PRINT TAB( 6)"HAVE BEEN ACCOUNTED FOR, THE CYCLE STARTS OVER AGAIN.
425 GOSUB 695
430 PLOT 3,3,3:PRINT "PROGRAM #3 IS A PROGRAM THAT MAY HAVE NO IMMEDIATE PURPOSE
435 PRINT :PRINT "   OTHER THAN TO PROVE THAT INCREDIBLY OBSCURE PROBLEMS CAN BE
440 PRINT :PRINT TAB( 19)"SOLVED ONE WAY OR ANOTHER.
445 PRINT :PRINT "  THIS PROGRAM TAKES AN INPUT FOR AN X-Y COORDINATE, AND TELLS
450 PRINT :PRINT "  WHETHER THE POINT IS ON, OFF, OR IF IT IS A CHARACTER BLOCK.
455 PRINT :PRINT "THE PROGRAMMING ITSELF IS FAIRLY SIMPLE. FROM THE X-Y INPUT THE
460 PRINT :PRINT "   BYTE OF SCREEN MEMORY IS DETERMINED (LINES 120 & 130). THE
465 PRINT :PRINT "  CONTENTS OF BYTES SC AND SC+1 ARE STORED IN SC AND SL. IF SL
470 PRINT :PRINT "   IS LESS THAN 128 (THUS A7=0) THEN IT IS A CHARACTER BLOCK.
475 PRINT :PRINT " OTHERWISE THE BIT IN THE BLOCK IS DETERMINED (LINES 170 & 180)
480 PRINT :PRINT "  AND THE RESULT IS ANDED WITH SC. IF THIS RESULT IS NOT ZERO,
485 PRINT :PRINT TAB( 14)"THEN THE BIT (AND POINT) MUST BE ON.
490 GOSUB 695
495 PLOT 3,5,12:PRINT "AS A LAST POINT, THERE ARE TWO OTHER ITEMS THAT MAY BE
500 PRINT :PRINT "COME IN USEFUL LATER. THESE ARE EMBEDDING CONTROL CHARACTERS IN
505 PRINT :PRINT TAB( 19)"STRINGS AND ESCAPE CODES.
510 GOSUB 695:PLOT 3,2,5
515 PRINT "CONTROL CHARACTERS CAN BE ADDED TO STRING VARIABLES. THE TWO
520 PRINT :PRINT "  EASIEST WAYS TO DO THIS ARE EITHER BY THE CHR$ STATEMENT, OR
525 PRINT :PRINT " WITH THE COMPUCOLOR BASIC EDITOR (FREDI). FOR EXAMPLE, INSTEAD
530 PRINT :PRINT "OF PLOTTING A FREQUENTLY USED DESIGN IN THE POINT PLOT MODE EACH
535 PRINT "  TIME IT IS USED, YOU COULD CREATE THE STRING A$ WITH ALL THE
540 PRINT :PRINT "  VALUES IN IT, AND PRINT IT EACH TIME IT IS NEEDED. (IF THE
545 PRINT :PRINT "  STRING IS LONGER THAN 64 CHARACTERS, YOU WILL NEED TO POKE A
550 PRINT :PRINT "VALUE GREATER THAN THE LENGTH OF THE STRING AT 33289 [NUMBER OF
555 PRINT :PRINT " CHARACTERS ON TERMINAL OUTPUT]). LIKEWISE, A FREQUENTLY PRINTED
560 PRINT " STRING COULD HAVE THE CURSOR X-Y COORDINATES (PLOT 3) ENCODED
565 PRINT :PRINT " IN IT. DEPENDING ON YOUR APPLICATION, THIS COULD SAVE MEMORY.
570 GOSUB 695
575 PLOT 3,4,3:PRINT "THERE ARE ESCAPE CODES FOR MACHINE LANGUAGE APPLICATIONS.
580 PRINT :PRINT " EACH OF THESE "Q$"JUMPS"Q$" TO A SPECIFIED MEMORY LOCATION. THEY ARE
585 PRINT :PRINT "		ESC P - 16384	ESC Z - 18432":PRINT "		ESC \ - 20480	ESC ] - 22528 
590 PRINT "		ESC ^ - 33215	ESC T - 33280":PRINT "		ESC I - 36864	ESC S - 40960
595 PRINT :PRINT "  THE ESC ^ SEQUENCE JUMPS TO AN AREA OF SYSTEM RAM. AT THOSE
600 PRINT :PRINT "THREE BYTES (33215-33217), THE USER CAN POKE A MACHINE LANGUAGE
605 PRINT :PRINT "  JUMP TO HIS PROGRAM LOCATED ELSEWHERE IN MEMORY. FROM BASIC
610 PRINT :PRINT " THESE ESCAPE SEQUENCES CAN BE DONE BY A PLOT STATEMENT. IF YOU
615 PRINT :PRINT "  DO USE THEM FROM BASIC, THE TOP-OF-MEMORY POINTER MUST BE SET
620 PRINT :PRINT "  BELOW THE MACHINE LANGUAGE PROGRAM SO THAT BASIC DOESN'T
625 PRINT :PRINT "  DISTURB THAT AREA OF MEMORY. LIKEWISE, ANY MACHINE LANGUAGE
630 PRINT :PRINT "    PROGRAMS AT 36864 OR 40960 WILL NOT "Q$"KILL"Q$" BASIC (DESTROY
635 PRINT :PRINT "		THE POINTERS SET UP TO RUN BASIC).
640 GOSUB 695:PRINT "  THIS CONCLUDES TUTORIAL FIFTEEN. DO YOU WISH TO REVIEW THIS

645 PLOT 6,2:INPUT "			LESSON (YES/NO)? ";ZZ$:IF LEFT$ (ZZ$,1)= "Y"THEN 135:REM 
650 IF LEFT$ (ZZ$,1)< > "N"THEN PLOT 28,11:GOTO 645
655 PRINT :PRINT "   TAKE A LOOK AT THE PROGRAMS WE'VE DISCUSSED IN THIS LESSON
660 PRINT "	AND IF YOU WANT TO START WITH LESSON ELEVEN AGAIN,
665 PRINT TAB( 25)"JUST HIT AUTO.
670 POKE ADR+ 41,1:POKE ADR+ 42,1:POKE ADR+ 44,0:POKE ADR+ 45,0:PLOT 27,11
675 POKE 33434,0:POKE 33435,0:END
680 IF ZZ$= "MENU"THEN LOAD ZZ$:RUN 170
685 IF PEEK (33278)< > 1THEN RETURN
690 PLOT 1
695 PRINT :INPUT "		    HIT RETURN TO CONTINUE: ";ZZ$:PLOT 12:GOTO 680