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