Compucolor.org – Virtual Media

Listing of file='TUTE7.BAS;01' on disk='vmedia/asmtut_disk3-sector.ccvf'

100 REM   TUTE7		PROCESS ETC		22/8/81
110 GOTO 170:REM  150 W/O MENU
120 Z= CALL (0):PLOT 3,0,31,11:RETURN
130 PLOT 3,62,31:POKE KB,0:Z= CALL (18)
131 IF PEEK (KB)= 0THEN 131
132 GOSUB 120:PRINT "/":GOTO 120
133 GOSUB 120:GOTO 120
134 PLOT 6,2,3,0,31:RETURN
140 FOR I= 1TO 1000:NEXT :RETURN
150 POKE 32941,191:POKE 32940,172:CLEAR 100:PLOT 27,4:PRINT "LOA SCROLL.PRG":PLOT 27,27
160 POKE 33283,173:POKE 33284,191
170 PLOT 27,24,12,27,4:PRINT "LOA PROCES.DSP":PLOT 27,27
200 KB= 33278:DU= 49113:POKE DU,255
210 PLOT 3,13,22,6,8:PRINT "    THE ASSEMBLY LANGUAGE PROCESS    "
220 FOR I= 20TO 12STEP - 2:Z= CALL (I):NEXT
230 PLOT 6,2,3,0,24:PRINT "IN THIS TUTORIAL WE WILL CONSIDER THE TOTAL ASSEMBLY"
240 PRINT "LANGUAGE PROCESS FROM CONCEPT TO EXIT FROM PROGRAM.":PRINT :PRINT
250 PRINT "A GENERAL OUTLINE OF THE PROGRAMMING PROCESS APPEARS ABOVE.":GOSUB 134
260 Z= CALL (18):INPUT "THROUGHOUT, TO ADVANCE THE TEXT, PRESS ENTER ";Z:PLOT 28,11:GOSUB 120
270 PRINT "PROGRAM DEFINITION MAY APPEAR AN OBVIOUS STARTING POINT BUT":GOSUB 120
280 PRINT "IT IS ALSO THE MOST IMPORTANT STEP.":GOSUB 120
290 PRINT "INADEQUATE CONSIDERATION OF THIS STEP CAN OFTEN LEAD TO":GOSUB 120
300 PRINT "WASTED HOURS OF PROGRAMMING EFFORT PARTICULARLY IN TRYING TO":GOSUB 120
310 PRINT "ADD FEATURES TO A ROUTINE THAT DID NOT ALLOW FOR THEIR":GOSUB 120
320 PRINT "INCLUSION.":GOSUB 130
330 PRINT "THEREFORE DEFINE CLEARLY FOR YOURSELF (ON PAPER):":GOSUB 120
340 PRINT "ANY INPUTS TO THE PROGRAM, THEIR SOURCE AND FORMAT.":GOSUB 120
350 PRINT "WHAT IS THE DESIRED OUTPUT, IT'S DESTINATION AND FORMAT?":GOSUB 120
360 PRINT "WHAT LIMITATIONS OF MEMORY SIZE OR DISK SIZE ARE LIKELY TO OCCUR":GOSUB 120
370 PRINT "AND WILL THEY SEVERELY LIMIT YOUR AIM?":GOSUB 120
380 PRINT "IF THE PROGRAM IS TO INTERACT WITH OTHER PROGRAMS, ARE THEY":GOSUB 120
390 PRINT "ALSO BEING MAPPED OUT NOW?":GOSUB 130
400 PRINT "ALGORITHM DESIGN OR 'HOW WILL I DO IT', INVOLVES MAPPING OUT":GOSUB 120
410 PRINT "CLEARLY ON PAPER THE STEPS REQUIRED TO ACHIEVE THE DESIRED":GOSUB 120
420 PRINT "AIM.":GOSUB 120
430 PRINT "IT MAY BE ORIGINAL OR COPIED, BUT YOUR PARTICULAR APPLICATION":GOSUB 120
440 PRINT "IS UNIQUE TO YOUR NEEDS AND SYSTEM.":GOSUB 120
450 PRINT "IT IS ESSENTIAL THAT YOU CHECK THE PROGRAM LOGIC AT THIS STAGE":GOSUB 120
460 PRINT "BEFORE CODING BEGINS.":GOSUB 130
470 PRINT "LARGER PROGRAMS MAY REQUIRE AN OVERALL SCHEME WHICH WILL":GOSUB 120
480 PRINT "HAVE TO HAVE EACH OF IT'S ELEMENTS EXPANDED SEPARATELY BUT":GOSUB 120
490 PRINT "WHICH PROVIDES THE FRAMEWORK FOR TIEING THESE ELEMENTS":GOSUB 120
500 PRINT "TOGETHER.":GOSUB 130
510 PRINT "DATA STRUCTURES CAN VARY FROM A FEW LOCATIONS HOLDING FLAGS OR":GOSUB 120
520 PRINT "VARIABLES TO LARGE DATA BUFFERS TO STRUCTURED LOOK-UP TABLES.":GOSUB 120
530 PRINT "YOUR PROGRAM WILL HAVE TO ACCESS THESE ECONOMICALLY AND MAYBE":GOSUB 120
540 PRINT "HOLD DATA IN THEM FOR PASSING TO ANOTHER PROGRAM.":GOSUB 130
550 PRINT "CAREFUL PLANNING OF THESE AT THIS STAGE MAKES FOR SMOOTHER":GOSUB 120
560 PRINT "PROGRAMMING LATER.":GOSUB 130
570 PRINT "HAND CODING MAY NOW BE CARRIED OUT TO A PREDETERMINED PLAN":GOSUB 120
580 PRINT "AND THAT PLAN WILL ALSO HELP YOU KEEP TRACK OF WHICH REGISTERS":GOSUB 120
590 PRINT "ARE IN USE AND WHAT FLAGS ARE CURRENT IF YOU NOTE THESE ITEMS":GOSUB 120
600 PRINT "ON A COPY OF THE PLAN DURING CODING.":GOSUB 130
610 PRINT "DEPENDANT ON SIZE AND PURPOSE, YOU MAY NOW PROCEED TO EITHER":GOSUB 120
620 PRINT "HAND ASSEMBLY OR CREATING A SOURCE FILE WITH AN EDITOR.":GOSUB 120
630 PRINT "IF CREATING A SOURCE FILE, PROOF READ IT BEFORE CLOSING THE":GOSUB 120
640 PRINT "FILE.":GOSUB 130
650 PRINT "CREATING .SRC, .LDA, AND .PRG FILES HAS BEEN COVERED EARLIER":GOSUB 120
660 PRINT "AS HAS HAND ASSEMBLY, LOADING AND RUNNING .PRG AND .LDA FILES.":GOSUB 120
670 PRINT "IN THE FOLLOWING EXAMPLE WE WILL CREATE A PROGRAM WHICH WILL":GOSUB 120
680 PRINT "BE HAND ASSEMBLED AND ULTIMATELY LOADED AND RUN FROM BASIC.":GOSUB 120
690 PRINT "WE WILL LEARN THIS PART BY DOING IT.":GOSUB 130
700 PRINT "LARGER PROGRAMS WHICH UTILISE INVOLVED ALGORITHMS AND DATA":GOSUB 120
710 PRINT "STRUCTURES ARE TOO DIFFICULT TO PORTRAY ADEQUATELY ON THE":GOSUB 120
720 PRINT "SCREEN AND IT IS SUGGESTED THAT YOU WORK THROUGH THE PROGRAMS":GOSUB 120
730 PRINT "GIVEN IN THE APPENDIX, AND IN SO DOING, TRY TO SEE HOW":GOSUB 120
740 PRINT "THEY ARE DESIGNED, ENTER THEM AS SOURCE, ASSEMBLE, SAVE AND":GOSUB 120
750 PRINT "RUN THEM.":GOSUB 130
760 PRINT "SUCH PRACTICE WILL BUILD SKILL AND PROVIDE THE TECHNIQUES":GOSUB 120
770 PRINT "NECESSARY FOR DESIGNING MANY RELATED PROGRAMS.":GOSUB 130
780 PRINT "OUR EXAMPLE IS A CLASSIC PATCH TO BASIC:":GOSUB 120
790 PRINT "THE SCROLL PATCH.":GOSUB 120
800 PRINT "IT IS A SHORT ROUTINE THAT CARRIES OUT A TASK, THAT IN BASIC,":GOSUB 120
810 PRINT "WOULD BE TOO SLOW TO BE EFFECTIVE.":GOSUB 130
820 PRINT "AS THIS EXAMPLE INVOLVES THE BASIC Y=CALL(X) ROUTINE,":GOSUB 120
830 PRINT "WE SHOULD LOOK AT WHAT THE ROUTINE DOES AND WHAT PARAMETERS":GOSUB 120
840 PRINT "NEED TO BE SET UP FOR IT IN ADVANCE:":GOSUB 130
850 PRINT "1. ON EXECUTING Y=CALL(X), BASIC CONVERTS X TO A SIGNED":GOSUB 120
860 PRINT "   INTEGER VARIABLE (RANGE -32768 TO +65535) AND PLACES THAT":GOSUB 120
870 PRINT "   VALUE IN THE DE REGISTER PAIR.":GOSUB 130
880 PRINT "2. IT THEN EXECUTES AN 8080 CALL TO 8202H (33282D).":GOSUB 120
890 PRINT "   THUS, PRIOR TO EXECUTING Y=CALL(X), YOU MUST POKE AN":GOSUB 120
900 PRINT "   8080 JMP TO YOUR ROUTINE INTO THE THREE BYTES COMMENCING AT":GOSUB 120
910 PRINT "   LOCATION 33282D.":GOSUB 130
920 PRINT "3. ON COMPLETION OF THE SUBROUTINE, WHICH MUST PRESERVE":GOSUB 120
930 PRINT "   A VALID STACK, THE FINAL RET RETURNS TO BASIC WHICH STORES":GOSUB 120
940 PRINT "   THE CONTENTS OF DE IN THE VARIABLE Y (-32768 TO +32767).":GOSUB 130
950 PRINT "4. THUS BASIC MAY PASS A PARAMETER TO THE SUBROUTINE AND":GOSUB 120
960 PRINT "   RECEIVE ONE BACK.":GOSUB 130
970 PRINT "THUS IF YOUR ROUTINE COMMENCES AT LOCATION BD06, YOU WOULD":GOSUB 120
980 PRINT "EXECUTE AD=33283:POKEAD,6:POKEAD+1,189.":GOSUB 120
990 PRINT "BEFORE THE FIRST EXECUTION OF Y=CALL(X).":GOSUB 120
1000 PRINT "(THE JMP IS ALREADY IN 33282)":GOSUB 130
1010 PRINT "IN THE CASE OF THE SCROLL PATCH, WE WILL PASS THE PARAMETERS":GOSUB 120
1020 PRINT "OF THE WINDOW WE WISH TO SCROLL ONCE AND FOR ALL PRIOR TO IT'S":GOSUB 120
1030 PRINT "FIRST EXECUTION AND NOT REQUIRE ANY PARAMETERS TO BE PASSED":GOSUB 120
1040 PRINT "BACK SO Y AND X WILL BE DUMMY PARAMETERS.":GOSUB 120
1050 PRINT "IT IS USUAL TO EXECUTE Y=CALL(0) FOR THIS PATCH.":GOSUB 130
1060 PRINT "HOWEVER IF OUR PATCH CONTAINED OTHER THAN SCROLL, AS THE":GOSUB 120
1070 PRINT "PATCH TO THIS PROGRAM DOES, THEN THE ROUTINE COULD JUMP":GOSUB 120
1080 PRINT "TO THE APPROPRIATE ROUTINE BY DECIPHERING THE CONTENTS OF E.":GOSUB 130
1090 PRINT "FOLLOWING THE CHART ABOVE FOR THIS EXERCISE WE MUST:":GOSUB 120
1100 PRINT "1. DEFINE THE TASK":GOSUB 120
1110 PRINT "2. DESIGN THE ALGORITHM":GOSUB 120
1120 PRINT "3. DESIGN ANY DATA STRUCTURES":GOSUB 120
1130 PRINT "4. HANDWRITE THE CODE IN MNEMONICS":GOSUB 120
1140 PRINT "5. HAND ASSEMBLE THE CODE AS A SERIES OF BYTES":GOSUB 120
1150 PRINT "6. LOAD THE BYTES OF CODE FROM BASIC":GOSUB 120
1160 PRINT "7. CALL THE PROGRAM FROM AND RETURN TO BASIC.":GOSUB 130
1170 PRINT "WE WILL WORK THROUGH THAT SEQUENCE, FIRSTLY CLEARING THE":GOSUB 120
1180 PRINT "CHART FOR WORKSPACE.":GOSUB 130
1190 FOR I= 21TO 0STEP - 1:PLOT 3,0,I,11:NEXT
1200 L$= "----------------":W$= "----------------"
1210 PRINT L$:PRINT L$:PRINT L$:PRINT W$:PRINT W$:PRINT W$:PRINT W$:PRINT L$:PRINT L$:PRINT L$
1220 GOSUB 134
1230 PRINT "WE MUST FIRST DEFINE THE TASK.":GOSUB 120
1240 PRINT "AS THE SCREEN IS MEMORY MAPPED, PARTIAL SCREEN SCROLLING IS":GOSUB 120
1250 PRINT "ESSENTIALLY A BLOCK MEMORY MOVE. I.E. MOVE A SECTION OF":GOSUB 120
1260 PRINT "MEMORY UP ONE LINE OR 128 BYTES, DISCARDING THE TOP LINE.":GOSUB 130
1270 PRINT "THEREFORE WE NEED TO DEFINE THE BOUNDARIES OF THE BLOCK OF":GOSUB 120
1280 PRINT "MEMORY TO BE MOVED.":GOSUB 130
1290 PRINT "IN THE REPRESENTATION OF THE SCREEN ABOVE, THE WINDOW TO SCROLL":GOSUB 120
1300 PRINT "IS SHOWN IN YELLOW. WE WILL DEFINE IT AS FOLLOWS:":GOSUB 120
1310 PLOT 8:PRINT "0":PLOT 3,15,0:PRINT "63":PLOT 3,0,9:PRINT "31"
1320 PLOT 6,6,3,0,3:PRINT "Y":PLOT 3,4,0:PRINT "X":PLOT 3,6,2:PRINT "W":PLOT 3,3,5:PRINT "H":GOSUB 134
1330 PRINT "THE CURSOR CO-ORDS OF THE TOP LEFT CORNER ARE X AND Y.":GOSUB 120
1340 PRINT "THE SIZE OF WINDOW IS W CHRS WIDE BY H CHRS HIGH":GOSUB 120
1350 PRINT "WE SHALL CONFINE THE SCROLL TO SMALL (A7 OFF) CHRS":GOSUB 130
1360 PRINT "WE NEED TO DECIDE IF THE CCI STATUS IS TO SCROLL":GOSUB 120
1370 PRINT "I.E. WHETHER WE MERELY SCROLL THE CHARACTERS, (EVERY 2ND BYTE)":GOSUB 120
1380 PRINT "OR CHARACTERS & CCI (EVERY BYTE).":GOSUB 120
1390 PRINT "IF COLOR SCROLLS THEN C=1, ELSE C=0.":GOSUB 130
1400 PLOT 3,0,13:PRINT "FIRST SCRN BYTE = 6000H"
1410 PRINT "SCROLL CHR ONLY, C=0":PRINT "SCROLL ALL, C=1":GOSUB 134
1420 PRINT "WE DON'T NEED A BUFFER FOR THE MOVE AS THE FIRST LINE IS LOST,":GOSUB 120
1430 PRINT "& SUCCESSIVE LINES MOVE TO LINES THAT HAVE ALREADY BEEN MOVED.":GOSUB 120
1440 PRINT "THUS NO DATA STRUCTURES ARE REQUIRED.":GOSUB 130
1450 PLOT 3,0,16:PRINT "HL MEMORY POINTER":PRINT "DE MEMORY OFFSET"
1460 PRINT "B ROW COUNTER":PRINT "C COLUMN COUNTER":GOSUB 134
1470 PRINT "WE SHALL USE THE HL REGISTER TO POINT TO MEMORY AND":GOSUB 120
1480 PRINT "THE DE REGISTER AS A DISPLACEMENT REGISTER TO MOVE HL FROM":GOSUB 120
1490 PRINT "LINE TO LINE.":GOSUB 120
1500 PRINT "THE B REGISTER WILL KEEP TRACK OF WHICH ROW WE ARE MOVING, AND":GOSUB 120
1510 PRINT "THE C REGISTER WILL KEEP TRACK OF WHICH COLUMN WE ARE AT.":GOSUB 130
1520 PLOT 3,24,0:PRINT "SCROLL:	LXI	H,6000H+128*Y+X+X"
1530 PLOT 3,32,1:PRINT "MVI	B,H-1":GOSUB 134
1540 PRINT "WE WILL COMMENCE AT LABEL SCROLL WHERE WE POINT H TO THE":GOSUB 120
1550 PRINT "FIRST LOCATION TO BE MOVED TO - AT THE TOP LEFT OF THE WINDOW":GOSUB 120
1560 PRINT "AND INITIALIZE B TO THE NO. OF ROWS TO BE MOVED (H-1)":GOSUB 130
1570 PLOT 3,24,2:PRINT "NXTLIN:	MVI	C,W*(C-1)":GOSUB 134
1580 PRINT "AS WE MOVE EACH LINE WE WILL NEED TO RESTORE THE COLUMN COUNT":GOSUB 120
1590 PRINT "IN C SO WE WILL LABEL THAT INSTRUCTION NXTLIN.":GOSUB 120
1600 PRINT "THE INITIAL VALUE OF BYTES/LINE =W*(C+1).":GOSUB 130
1610 PLOT 3,24,3:PRINT "NXTBYT:	LXI	D,0080H"
1620 PLOT 3,32,4:PRINT "DAD	D"
1630 PLOT 3,32,5:PRINT "MOV	A,M"
1640 PLOT 3,32,6:PRINT "LXI	D,0FF80H"
1650 PLOT 3,32,7:PRINT "DAD	D"
1660 PLOT 3,32,8:PRINT "MOV	M,A":GOSUB 134
1670 PRINT "EVERY TIME WE MOVE A BYTE WE WILL NEED TO GO DOWN ONE LINE,":GOSUB 120
1680 PRINT "GET THE BYTE, MOVE UP ONE LINE AND STORE IT.":GOSUB 120
1690 PRINT "THEREFORE WE ADJUST HL FIRST BY ADDING 80H AND LATER":GOSUB 120
1700 PRINT "SUBTRACTING 80H (ADDING [10000-80])":GOSUB 120
1710 PRINT "WE MOVE THE BYTE THROUGH THE ACCUMULATOR.":GOSUB 130
1720 PLOT 3,32,9:PRINT "INX	H"
1730 PLOT 3,32,10:PRINT "INX	H ;NOP IF C=1"
1740 PLOT 3,32,11:PRINT "DCR	C"
1750 PLOT 3,32,12:PRINT "JNZ	NXTBYT":GOSUB 134
1760 PRINT "TO POINT TO THE NEXT BYTE IN THE LINE, WE EITHER INCREMENT":GOSUB 120
1770 PRINT "H BY ONE OR TWO DEPENDING ON C.":GOSUB 120
1780 PRINT "WE ALSO DECREMENT C, OUR BYTE COUNTER AND TEST FOR NONE LEFT.":GOSUB 130
1790 PLOT 3,32,13:PRINT "LXI	D,80H-W-W"
1800 PLOT 3,32,14:PRINT "DAD	D"
1810 PLOT 3,32,15:PRINT "DCR	B"
1820 PLOT 3,32,16:PRINT "JNZ	NXTLIN"
1830 PLOT 3,32,17:PRINT "RET":GOSUB 134
1840 PRINT "AS EACH LINE IS COMPLETED, C=0, WE NEED TO:":GOSUB 120
1850 PRINT "ADVANCE H TO THE START OF THE NEXT LINE,":GOSUB 120
1860 PRINT "DECREMENT B, OUR LINE COUNTER AND":GOSUB 120
1870 PRINT "CHECK FOR ALL LINES DONE, B=0.":GOSUB 120
1880 PRINT "WHEN ALL LINES ARE DONE, WE RETURN.":GOSUB 130
1890 BL$= "                        ":FOR I= 21TO 0STEP - 1:PLOT 3,0,I:PRINT BL$:NEXT :PLOT 8
1900 PRINT "0000":PRINT "0003":PRINT "0005":PRINT "0007":PRINT "000A":PRINT "000B":PRINT "000C"
1910 PRINT "000F":PRINT "0010":PRINT "0011":PRINT "0012":PRINT "0013":PRINT "0014":PRINT "0017"
1920 PRINT "001A":PRINT "001B":PRINT "001C":PRINT "001F":GOSUB 134
1930 PRINT "THE NEXT STEP IS HAND ASSEMBLY:":GOSUB 120
1940 PRINT "AS BEFORE WE COUNT THE BYTES PER INSTRUCTION -":GOSUB 120
1950 PRINT "3+2+2+3+1+1+3+1+1+1+1+1+3+3+1+1+3+1=20H":GOSUB 120
1960 PRINT "AND WRITE THE ADDRESSES OF EACH INSTRUCTION.":GOSUB 120
1970 PRINT "HOWEVER, AS THIS ROUTINE IS RELOCATABLE, WE WILL ORG AT 0000H":GOSUB 120
1980 PRINT "FOR SIMPLICITY OF CALCULATING ADDRESSES LATER.":GOSUB 130
1990 PRINT "CHECK ALL THOSE ADDRESSES AND WE WILL FILL IN THE CODING BYTES":GOSUB 130
2000 PLOT 6,6,3,6,0:PRINT "21 YY YY"
2010 PLOT 3,6,1:PRINT "06 YY":PLOT 3,6,2:PRINT "0E YY"
2020 PLOT 3,6,3:PRINT "11 80 00":PLOT 3,6,4:PRINT "19"
2030 PLOT 3,6,5:PRINT "7E":PLOT 3,6,6:PRINT "11 80 FF"
2040 PLOT 3,6,7:PRINT "19":PLOT 3,6,8:PRINT "77"
2050 PLOT 3,6,9:PRINT "23":PLOT 3,6,10:PRINT "23"
2060 PLOT 3,6,11:PRINT "0D":PLOT 3,6,12:PRINT "C2 07 00"
2070 PLOT 3,6,13:PRINT "11 YY YY":PLOT 3,6,14:PRINT "19"
2080 PLOT 3,6,15:PRINT "05":PLOT 3,6,16:PRINT "C2 05 00"
2090 PLOT 3,6,17:PRINT "C9":GOSUB 134
2100 PRINT "CHECK ALL THOSE PROGRAM BYTES BEFORE WE PROCEED":GOSUB 120
2110 PRINT "NOTE THE VARIABLE DATA WHICH DEFINE THE WINDOW ARE SHOWN AS YY":GOSUB 120
2120 PRINT "THEY ARE USUALLY LOADED AS ZEROES AND THE CORRECT VALUES":GOSUB 120
2130 PRINT "POKED IN EARLY IN THE PROGRAM.":GOSUB 120
2140 PRINT "THE LOADING ROUTINE IS RESPONSIBLE FOR CORRECTING THE ADDRESSES":GOSUB 120
2150 PRINT "OF THE JUMPS TO ACCORD WITH WHERE THE ROUTINE IS LOADED.":GOSUB 120
2160 PRINT "THESE ARE PRINTED IN YELLOW.":GOSUB 120
2170 PRINT "NOTE ALSO THAT THE INX H AT 0012H HAS TO BE CONVERTED TO A":GOSUB 120
2180 PRINT "NOP (=00) IF C=1.":GOSUB 130
2190 PRINT "WE NOW WISH TO BE ABLE TO LOAD THIS PROGRAM FROM BASIC AND":GOSUB 120
2200 PRINT "THIS CAN BE DONE IN EITHER OF TWO WAYS:-":GOSUB 120
2210 PRINT "BY POKEING THEM TO A FIXED ADDRESS USING BASIC OR A MONITOR":GOSUB 120
2220 PRINT "SUCH AS IN THE DEBUG PACKAGE, SAVEING IN .PRG FORMAT FROM":GOSUB 120
2230 PRINT "FCS AND HAVING THE BASIC PROGRAM LOAD IT (PLOT27,4 ETC.)":GOSUB 120
2240 PRINT "THIS METHOD IS CONVENIENT AS LONG AS YOU PROTECT BASIC'S RAM.":GOSUB 130
2250 PRINT "THE MORE COMMON METHOD IS TO LOAD IT FROM BASIC DATA AND":GOSUB 120
2260 PRINT "HAVE BASIC LOCATE IT ABOVE IT'S RAM SPACE AFTER SUITABLY":GOSUB 120
2270 PRINT "LOWERING THE TOP OF RAM.":GOSUB 120
2280 PRINT "WE SHALL ADOPT THIS LATTER METHOD.":GOSUB 130
2290 PLOT 3,0,19:PRINT "33,-1,-1,6,-1,14,-1,17,128,0,25,126,17,128,255,25,119,35,-1"
2300 PRINT "13,194,-1,-1,17,-1,-1,25,5,194,-1,-1,201":GOSUB 134
2310 PRINT "WE SHALL FIRST CONVERT THE HEX BYTES TO DECIMAL AND THE":GOSUB 120
2320 PRINT "YY'S AND RELOCATABLE ADDRESSES TO -1 ALL IN SEQUENCE.":GOSUB 130
2330 PRINT "OUR BASIC PROGRAM THEN INCORPORATES THAT SEQUENCE IN A DATA":GOSUB 120
2340 PRINT "LINE AND UPON ENTRY TO THAT PROGRAM MUST GOTO A ROUTINE WHICH:":GOSUB 120
2350 PRINT "LOWERS BASIC RAM (IN THIS CASE BY 32 BYTES)":GOSUB 120
2360 PRINT "POKES THE BYTE SEQUENCE INTO THAT SPACE, STORING THE -1'S AS":GOSUB 120
2370 PRINT "ZEROES.":GOSUB 130
2380 PRINT "IT MUST POKE THE START ADDRESS (TM+1) INTO 33283 &33284 AND":GOSUB 120
2390 PRINT "THE ABSOLUTE ADDRESSES FOR JMPS AND CALLS INTO THE ROUTINE":GOSUB 120
2400 PRINT "E.G. POKE (TM+6) INTO TM+30 AND TM+31":GOSUB 130
2410 PRINT "IT MUST THEN GOTO THE LINE FOLLOWING THE GOTO WHICH TOOK IT":GOSUB 120
2420 PRINT "TO THIS ROUTINE AND IMMEDIATELY EXECUTE CLEAR XX TO RESET":GOSUB 120
2430 PRINT "BASIC'S STRING SPACE FOLLOWING THE LOWERING OF THE TOP OF":GOSUB 120
2440 PRINT "RAM.":GOSUB 130
2450 PRINT "ANOTHER ROUTINE MUST THEN POKE THE VALUES OF THE DATA BYTES":GOSUB 120
2460 PRINT "SUCH AS 128-W-W, INTO THE APPROPRIATE LOCATIONS.":GOSUB 120
2470 PRINT "ANY OF COMPUCOLOR'S  LATER MENU PROGRAMS HAVE THESE ROUTINES":GOSUB 120
2480 PRINT "AT LINES >= 64000 FOR YOUR PERUSAL.":GOSUB 130
2490 PRINT "THE SCROLL PATCH USED IN THIS SERIES IS LOADED AS A .PRG FILE":GOSUB 120
2500 PRINT "AND INCLUDES A SOUND PATCH WHICH IS CALLED WITH ARGUMENTS":GOSUB 120
2510 PRINT "4<=X=>255 GIVING THE PITCH. DURATION IS POKED IN BEFOREHAND":GOSUB 120
2520 PRINT "WITH VARIABLE DU. IT COULD BE WORTHWHILE TO DISASSEMBLE IT":GOSUB 120
2530 PRINT "TO SEE HOW IT WORKS.":GOSUB 130
2540 PRINT "WE HAVE ASSUMED ABOVE THAT ALL WENT WELL AND THERE WERE NO":GOSUB 120
2550 PRINT "BUGS IN THE PROGRAM. THAT IS ALMOST THE EXCEPTION TO THE RULE":GOSUB 120
2560 PRINT "FOR LONGER ROUTINES AND IN THE NEXT TUTORIAL WE WILL LOOK AT":GOSUB 120
2570 PRINT "THE METHODS AVAILABLE FOR DEBUGGING WHICH IS AN ESSENTIAL PART":GOSUB 120
2580 PRINT "OF ALL SERIOUS PROGRAMMING.":GOSUB 130
2590 PRINT "DUE TO THE DESCRIPTIVE NATURE OF THE REMAINING TOPICS,THEY HAVE":GOSUB 120
2600 PRINT "BEEN PRODUCED IN TEXT FORMAT IN THE MANUAL.":GOSUB 130
2610 PRINT "BEFORE LEAVING THIS DISK SERIES, LET'S HAVE ANOTHER LOOK AT":GOSUB 120
2620 PRINT "THE PROCESS CHART TO REVIEW THE STEPS INVOLVED IN THE":GOSUB 120
2630 PRINT "PROGRAMMING PROCESS.":GOSUB 130
2640 PLOT 27,4:PRINT "LOA PROCES.DSP":PLOT 27,27
2650 GOSUB 3010
2660 INPUT "BACK TO MENU OR TERMINATE? ";YN$:GOSUB 3000:PLOT 12
2670 IF YN$= "B"THEN PLOT 1
2680 PLOT 27,11:END
3000 FOR I= 32TO 8STEP - 2:Z= CALL (I):NEXT
3010 FOR I= 8TO 32STEP 2:Z= CALL (I):NEXT :RETURN