Listing of file='TUTE1.BAS;01' on disk='vmedia/asmtut_disk1-sector.ccvf'
100 REM TUTE1 NUMBERSYS 22/8/81 110 GOTO 200:REM 160 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 141 FOR I= 1TO 5000:NEXT :RETURN 150 SP= SC+ 128* YY+ 2* XX- 1 151 POKE SP,BY:POKE SP+ 128,BY:POKE SP+ 384,BY:RETURN 152 POKE SP,CY:POKE SP+ 128,CY:POKE SP+ 384,CY:RETURN 153 SP= SP- 2:POKE SP,BY:POKE SP+ 128,BY:POKE SP+ 384,BY:RETURN 160 POKE 32941,191:POKE 32940,172:CLEAR 100:PLOT 27,4:PRINT "LOA SCROLL.PRG":PLOT 27,27 170 POKE 33283,173:POKE 33284,191 180 PLOT 6,2,15,12,27,24 200 KB= 33278:DU= 49113:POKE DU,255:BY= 67:CY= 6:SC= 28672 210 BL$= " " 220 PLOT 14,6,3,3,16,0:PRINT "TUTORIAL #1 - NUMBER SYSTEMS":PLOT 15,6,2,3,0,25 230 PRINT "IN THIS TUTORIAL WE WILL CONSIDER NUMBER SYSTEMS HAVING A BASE" 240 PRINT "OTHER THAN TEN AND THEIR IMPORTANCE IN ASSEMBLY LANGUAGE" 250 PRINT "PROGRAMMING.":PRINT :PRINT :PRINT 260 FOR I= 20TO 12STEP - 2:Z= CALL (I):NEXT 270 Z= CALL (18):INPUT "THROUGHOUT, PRESS ENTER TO PROCEED. ";Z:PLOT 28,11 280 PRINT "OUR EVERYDAY NUMBER SYSTEM IS BASED ON THE NUMBER TEN AND IS":GOSUB 120 290 PRINT "QUITE ADEQUATE FOR NORMAL COUNTING.":GOSUB 130 300 PRINT "FURTHER, SINCE WE HAVE LEARNT TO COUNT USING A BASE OF TEN":GOSUB 120 310 PRINT "FROM AN EARLY AGE WE FEEL QUITE AT HOME WITH IT.":GOSUB 130 320 PRINT "ELECTRONIC COMPUTERS HOWEVER DO THEIR COUNTING BY RECOGNISING":GOSUB 120 330 PRINT "THE DIFFERENCE BETWEEN TWO ELECTRICAL STATES, AN EITHER/OR":GOSUB 120 340 PRINT "SITUATION, WHICH APPEARS CUMBERSOME TO US BUT WHICH HAS THE":GOSUB 120 350 PRINT "ADVANTAGE OF SPEED IN COMPUTERS BECAUSE OF THE EXTREMELY FAST":GOSUB 120 360 PRINT "SWITCHING POSSIBLE IN ELECTRONIC CIRCUITS.":GOSUB 130 370 PRINT "THUS THE MOST ELEMENTARY NUMBER SYSTEM, THE BINARY SYSTEM,":GOSUB 120 380 PRINT "WHICH ONLY USES THE DIGITS 0 AND 1, IS THE BASIC TYPE USED":GOSUB 120 390 PRINT "BY THE PROCESSING UNIT IN THE COMPUTER.":GOSUB 130 400 PRINT "WHEN YOU ARE PROGRAMMING IN BASIC OR SOME OTHER HIGH LEVEL":GOSUB 120 410 PRINT "LANGUAGE, YOU CAN IGNORE THE FACT THAT THE PROCESSOR IS ONLY":GOSUB 120 420 PRINT "USING BINARY NUMBERS AS THE INTERPRETER OR COMPILER CONVERTS":GOSUB 120 430 PRINT "YOUR DECIMAL NUMBERS TO BINARY FORM UNSEEN BY YOU, DOES ALL":GOSUB 120 440 PRINT "CALCULATIONS IN THAT FORM, AND THEN REPRESENTS THE RESULTS":GOSUB 120 450 PRINT "TO YOU IN WHATEVER FORM YOU DESIRE, USUALLY FLOATING POINT":GOSUB 120 460 PRINT "DECIMAL.":GOSUB 130 470 PRINT "IF YOU WISH TO DIRECTLY PROGRAM THE MICROPROCESSOR YOU WILL":GOSUB 120 480 PRINT "HAVE TO BOTH INSTRUCT IT AND FEED DATA TO IT IN BINARY FORM.":GOSUB 130 490 PRINT "IN ASSEMBLY LANGUAGE, BINARY INSTRUCTIONS ARE CODED INTO":GOSUB 120 500 PRINT "MNEMONIC FORM WHICH MAKES IT EASIER TO DEAL WITH BUT MANY":GOSUB 120 510 PRINT "ELEMENTARY INSTRUCTIONS ARE CONCERNED WITH BINARY DIGITS":GOSUB 120 520 PRINT "NECESSITATING A FAMILIARITY WITH BINARY FORMS.":GOSUB 130 530 PRINT "WE WILL THEREFORE LOOK AT SOME ASPECTS OF BINARY NOTATION":GOSUB 120 540 PRINT "AND BINARY ARITHMETIC.":GOSUB 130 550 PRINT "BINARY NOTATION:":GOSUB 133 560 PRINT "FROM DECIMAL COUNTING, WE RECOGNIZE THE IMPORTANCE OF RANK":GOSUB 120 570 PRINT "WITHIN A NUMBER. E.G.":GOSUB 120 580 PRINT "THE DECIMAL NUMBER 123 CAN BE REPRESENTED AS 1*10^2 + 2*10^1 + 3":GOSUB 130 590 PRINT "BINARY NUMBER STRINGS MAY BE EVALUATED IN THE SAME WAY BUT":GOSUB 120 600 PRINT "INSTEAD OF RANKING BY POWERS OF TEN, WE USE POWERS OF TWO ":GOSUB 120 610 PLOT 3,0,3:PRINT "POWERS OF TWO:" 620 PRINT "1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096 ETC.":GOSUB 134 630 PRINT "AS SHOWN ABOVE.":GOSUB 130 640 PRINT "THUS 101101 BINARY = 1*32 + 0*16 + 1*8 + 1*4 + 0*2 + 1 = 45 DEC":GOSUB 130 650 PRINT "BINARY ARITHMETIC:":GOSUB 133 660 PRINT "BINARY ARITHMETIC FOLLOWS THE SAME RULES AS DECIMAL ARITMETIC":GOSUB 120 670 PRINT "EXCEPT THAT OVERFLOW OCCURS TO THE NEXT DIGIT AT A VALUE OF TWO":GOSUB 120 680 PRINT "RATHER THAN TEN.":GOSUB 120 690 PRINT "LETS'S LOOK AT ADDITION -":GOSUB 130:PLOT 3,0,6 700 PRINT "THUS 101101 710 PRINT " + 10111 720 PRINT " eeeeee 730 PRINT " = 1000100":PRINT 740 XX= 18:YY= 6:GOSUB 150:PLOT 3,20,6:PRINT "1+1=10, PUT DOWN 0 AND CARRY 1":GOSUB 141 750 GOSUB 152:GOSUB 153:PLOT 3,20,7:PRINT "0+1+CARRY=10, PUT DOWN 0 AND CARRY 1":GOSUB 141 760 GOSUB 152:GOSUB 153:PLOT 3,20,8:PRINT "1+1+CARRY=11, PUT DOWN 1 AND CARRY 1":GOSUB 141 770 GOSUB 152:GOSUB 153:PLOT 3,20,9:PRINT "1+0+CARRY=10, PUT DOWN 0 AND CARRY 1":GOSUB 141 780 GOSUB 152:GOSUB 153:PLOT 3,20,10:PRINT "0+1+CARRY=10, PUT DOWN 0 AND CARRY 1":GOSUB 141 790 GOSUB 152:GOSUB 153:PLOT 3,20,11:PRINT "1+CARRY=10, PUT DOWN 0 AND CARRY 1":GOSUB 141 800 GOSUB 152:GOSUB 153:PLOT 3,20,12:PRINT "CARRY=01, PUT DOWN 1":GOSUB 141:GOSUB 152 810 GOSUB 134:PRINT "AND NOW SUBTRACTION -":GOSUB 130 820 FOR I= 12TO 6STEP - 1:PLOT 3,20,I:PRINT BL$:NEXT 830 PLOT 3,0,12 840 PRINT "AND 101101 850 PRINT " - 10111 860 PRINT " eeeeee 870 PRINT " = 10110":PRINT 880 XX= 18:YY= 12:GOSUB 150:PLOT 3,20,12:PRINT "1-1= 00, PUT DOWN 0":GOSUB 141 890 GOSUB 152:GOSUB 153:PLOT 3,20,13:PRINT "0-1=-01, PUT DOWN 1 AND BORROW 1":GOSUB 141 900 GOSUB 152:GOSUB 153:PLOT 3,20,14:PRINT "1-1-BORROW=-01, PUT DOWN 1 AND BORROW 1":GOSUB 141 910 GOSUB 152:GOSUB 153:PLOT 3,20,15:PRINT "1-0-BORROW= 00, PUT DOWN 0":GOSUB 141 920 GOSUB 152:GOSUB 153:PLOT 3,20,16:PRINT "0-1=-01, PUT DOWN 1 AND BORROW 1":GOSUB 141 930 GOSUB 152:GOSUB 153:PLOT 3,20,17:PRINT "1-BORROW= 00":GOSUB 141:GOSUB 152 940 GOSUB 134:PRINT "WE MAY NOW PROCEED":GOSUB 130 950 FOR I= 17TO 12STEP - 1:PLOT 3,20,I:PRINT BL$:NEXT :GOSUB 134 960 PRINT "YOU WILL SEE FROM THE ABOVE, BY CONVERTING EACH BINARY STRING":GOSUB 120 970 PRINT "TO IT'S DECIMAL EQUIVALENT, THAT QUITE SMALL QUANTITIES EXPAND":GOSUB 120 980 PRINT "TO LARGE STRINGS IN BINARY AND THAT ELEMENTARY ARITHMETIC":GOSUB 120 990 PRINT "OPERATIONS ARE TEDIOUS BY HAND. MULTIPLICATION AND DIVISION":GOSUB 120 1000 PRINT "CAN BE EVEN MORE CUMBERSOME.":GOSUB 130 1010 PRINT "THEREFORE SOME SHORTHAND NOTATION IS CALLED FOR TO REPRESENT":GOSUB 120 1020 PRINT "LARGER QUANTITIES.":GOSUB 130 1030 PRINT "DECIMAL NOTATION IS NOT MUCH HELP AS TEN HAS FACTORS OTHER THAN":GOSUB 120 1040 PRINT "TWO, RENDERING CONVERSION DIFFICULT.":GOSUB 130 1050 FOR I= 15TO 6STEP - 1:PLOT 3,0,I,11:NEXT 1060 PRINT "POWERS OF EIGHT:":PRINT "1,8,64,512,4096,32768 ETC." 1070 PRINT :PRINT "010 111 001 BINARY = 271 OCTAL":GOSUB 134 1080 PRINT "A NOTATION BASED ON EIGHT OR 2^3 (OCTAL NUMBERS) WILL REPRESENT":GOSUB 120 1090 PRINT "THREE BINARY DIGITS BY ONE DIGIT AND PROVIDE A COMPRESSED":GOSUB 120 1100 PRINT "FORMAT WHICH IS READILY CONVERTIBLE TO BINARY FORM.":GOSUB 120 1110 PRINT "THIS IS SHOWN ABOVE.":GOSUB 130 1120 PRINT "OCTAL NOTATION SIMPLIFIES BINARY STRINGS WITHOUT INTRODUCING":GOSUB 120 1130 PRINT "ANY NEW SYMBOLS FOR THE SHORTHAND WHILE RETAINING EASE OF":GOSUB 120 1140 PRINT "CONVERSION BACK TO BINARY BUT MICROPROCESSORS WHICH HAVE BEEN":GOSUB 120 1150 PRINT "DEVELOPED HAVE USUALLY TREATED FOUR, EIGHT, OR SIXTEEN DIGITS":GOSUB 120 1160 PRINT "AT A TIME, (THE 8080 USES EIGHT) AND THE INTRODUCTION OF GROUPS":GOSUB 120 1170 PRINT "OF THREE DIGITS DOES NOT SUIT SUCH ARCHITECTURE.":GOSUB 130 1180 PRINT "AS A RESULT OF THIS HARDWARE DEVELOPMENT, SOME TERMS HAVE":GOSUB 120 1190 PRINT "BEEN INTRODUCED WITH WHICH YOU SHOULD BECOME FAMILIAR.":GOSUB 130 1200 PRINT "INDIVIDUAL BINARY DIGITS, BEING THE BUILDING BLOCKS OF":GOSUB 120 1210 PRINT "COMPUTERS, HAVE BECOME KNOWN AS BITS.":GOSUB 130 1220 PRINT "GROUPS OF FOUR DIGITS OR BITS ARE KNOWN AS NIBBLES.":GOSUB 130 1230 PRINT "GROUPS OF EIGHT BITS ARE KNOWN AS BYTES.":GOSUB 130 1240 PRINT "GROUPS OF TWO BYTES OR SIXTEEN BITS ARE USUALLY KNOWN AS WORDS":GOSUB 120 1250 PRINT "IF THE MICROPROCESSOR ADDRESSES 16 BITS AT A TIME.":GOSUB 130 1260 PLOT 3,0,9,11:PRINT "POWERS OF 16:" 1270 PRINT "1,16,256,4096,65536 ETC.":GOSUB 134 1280 PRINT "THUS, IF WE ARE ABLE TO GROUP FOUR BITS AT A TIME, WE CAN":GOSUB 120 1290 PRINT "REPRESENT ONE NIBBLE AT A TIME AS A HEXADECIMAL DIGIT.":GOSUB 130 1300 PRINT "HOWEVER, AS THIS DIGIT MAY RANGE IN VALUE FROM 0 - 15 WE NEED":GOSUB 120 1310 PRINT "EXTRA SYMBOLS FOR THE DIGITS BEYOND 9.":GOSUB 130 1320 PLOT 3,0,12:PRINT "HEX 0 1 2 3 4 5 6 7 8 9 A B C D E F 10" 1330 PRINT "DEC 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16":GOSUB 134 1340 PRINT "THESE HAVE BEEN CHOSEN AS A - F FOR DECIMAL 10 - 15.":GOSUB 130 1350 PLOT 3,0,15:PRINT "HEX 20 30 40 50 60 70 80 90 A0 B0 C0 D0 E0" 1360 PRINT "DEC 32 48 64 80 96 112 128 144 160 176 192 208 224":PRINT 1370 PRINT "HEX F0 FF 100" 1380 PRINT "DEC 240 255 256":GOSUB 134 1390 PRINT "THUS ONE BYTE OR 8 BITS MAY BE REPRESENTED AS:-":GOSUB 133 1400 PRINT "8 BINARY DIGITS E.G. 10110101 OR":GOSUB 120 1410 PRINT "3 OCTAL DIGITS E.G. 2 6 5 OR":GOSUB 120 1420 PRINT "2 HEX DIGITS E.G. D 5":GOSUB 130 1430 PRINT "BUT WHAT HAS ALL OF THIS TO DO WITH 8080 ASSEMBLER?":GOSUB 130 1440 PRINT "THE 8080A IS AN EIGHT BIT MICROPROCESSOR WHICH ALLOWS IT TO :-":GOSUB 133 1450 PRINT "ACCEPT INSTRUCTIONS, ONE BYTE OR 8 BITS AT A TIME BUT WHICH":GOSUB 120 1460 PRINT "MAY BE UP TO THREE BYTES LONG.":GOSUB 130 1470 PRINT "CARRY OUT 8 BIT ARITHMETIC DIRECTLY IN IT'S ACCUMULATOR":GOSUB 130 1480 PRINT "ADDRESS MEMORY BY TWO BYTES GIVING IT AN ADDRESSING RANGE":GOSUB 133 1490 PRINT "FROM 0000 0000 TO 1111 1111 BINARY OR":GOSUB 120 1500 PRINT "FROM 00 00 TO FF FF HEX OR":GOSUB 120 1510 PRINT "FROM 0 TO 65535 DECIMAL":GOSUB 130 1520 PRINT "AS 400 HEX OR 1024 DEC IS CLOSE TO 1000 DEC, WE SAY THAT:-":GOSUB 133 1530 PRINT " 1024 BYTES IS 1K BYTES OR 400 HEX":GOSUB 120 1540 PRINT " 4096 BYTES IS 4K BYTES OR 1000 HEX":GOSUB 120 1550 PRINT "16384 BYTES IS 16K BYTES OR 4000 HEX":GOSUB 120 1560 PRINT "32768 BYTES IS 32K BYTES OR 8000 HEX":GOSUB 120 1570 PRINT "65536 BYTES IS 64K BYTES OR 10000 HEX":GOSUB 130 1580 PRINT "ALTHOUGH WE HAVE MANY AIDS AVAILABLE FOR CONVERSION BETWEEN":GOSUB 120 1590 PRINT "NUMBER SYSTEMS, NOT LEAST OF WHICH IS BASIC, SOME FACILITY":GOSUB 120 1600 PRINT "WITH HEXADECIMAL CONVERSIONS AND ARITHMETIC IS USEFUL.":GOSUB 130 1610 PRINT "A COMMON PROBLEM IS THE CONVERSION OF FILE SIZES AND ADDRESSES":GOSUB 120 1620 PRINT "GIVEN IN DISK DIRECTORIES.":GOSUB 133 1630 PRINT "LET'S LOOK AT THE DIRECTORY OF THIS DISK.":GOSUB 130 1640 PLOT 3,0,2,11,10,11,10,11,8 1650 PLOT 27,4:PRINT "DIR":PLOT 27,27:GOSUB 134 1660 PRINT "AS FCS ACCEPTS HEXADECIMAL ARGUMENTS FOR COMMANDS SUCH AS":GOSUB 120 1670 PRINT "LOA, SAV, REA, AND WRI, THE ADDRESSES IN FOUR HEX DIGITS ARE":GOSUB 120 1680 PRINT "DIRECTLY USEABLE BUT FILE SIZES ARE NOT SINCE EACH SECTOR":GOSUB 120 1690 PRINT "HOLDS ONLY 80H OR 128 BYTES AND THE LAST BLOCK IS ONLY":GOSUB 120 1700 PRINT "FILLED TO THE EXTENT OF LBC.":GOSUB 130 1710 PRINT "THUS SIZE AND LBC CANNOT BE RUN TOGETHER TO FORM A FOUR DIGIT":GOSUB 120 1720 PRINT "HEX NUMBER. WE HAVE TO MULTIPLY (SIZE-1) BY 80H AND ADD LBC.":GOSUB 130 1730 PRINT "REMEMBER THE SHORT CUT MULTIPLY BY 50 IN DECIMAL?":GOSUB 130 1740 PRINT "DIVIDE BY 2, ADD TWO ZEROES IF EVEN, ELSE ADD 50.":GOSUB 133 1750 PRINT "WELL 8 IN HEX IS SIMILAR TO 5 IN DECIMAL,":GOSUB 120 1760 PRINT "IN THIS CASE,":GOSUB 133 1770 PRINT "DIVIDE (SIZE-1) BY 2, ADD LBC IF EVEN, ELSE ADD LBC+80.":GOSUB 130 1780 PRINT "THUS IF SIZE = 1C AND LBC = 72 THEN TRUSIZ = 0DF2 AND":GOSUB 120 1790 PRINT " IF SIZE = 3F AND LBC = 2C THEN TRUSIZ = 1F2C AND":GOSUB 120 1800 PRINT " IF SIZE = 2E AND LBC = 80 THEN TRUSIZ = 1700.":GOSUB 130 1810 PRINT "IN FCS, MEMORY SPEC. IS (LOAD ADDRESS) (BYTE COUNT) OR":GOSUB 133 1820 PRINT " (LOAD ADDRESS)-(END ADDRESS).":GOSUB 133 1830 PRINT "THUS SAV BILL,6000 1800 IS THE SAME AS SAV BILL,6000-77FF.":GOSUB 133 1840 PRINT "BEWARE: COUNT = END ADDRESS-LOAD ADDRESS+1!":GOSUB 130 1850 PRINT "WHEN USING REA AND WRI IN FCS, REMEMBER THAT THE BYTE COUNT":GOSUB 120 1860 PRINT "WHEN DIVIDED BY 80H WILL GIVE THE NUMBER OF BLOCKS READ OR":GOSUB 120 1870 PRINT "WRITTEN TO.":GOSUB 130 1880 PRINT "THUS REA 0 9000 1000 WILL READ 20H OR 32 BLOCKS":GOSUB 120 1890 PRINT "(00 TO 1F) INTO MEMORY FROM 9000 TO 9FFF.":GOSUB 130 1900 PRINT "AND WRI 2D A000-A7FF WILL WRITE 10H OR 16 BLOCKS":GOSUB 120 1910 PRINT "(2D TO 3C) INTO 800H BYTES OF MEMORY FROM A000 TO A7FF.":GOSUB 130 1920 PRINT "AS A GENERAL RULE IN ASSEMBLER, AVOID DECIMAL LIKE THE PLAGUE":GOSUB 120 1930 PRINT "UNLESS YOU ARE TREATING DECIMALS AS SUCH OR YOU ARE INTERFACING":GOSUB 120 1940 PRINT "WITH BASIC, WHICH PEEKS AND POKES IN DECIMAL.":GOSUB 120 1950 PRINT "TRY TO STICK WITH HEXADECIMAL FOR ADDRESSES AND DATA":GOSUB 120 1960 PRINT "BUT USE BINARY IF YOU ARE DOING BIT MANIPULATION.":GOSUB 130 1970 PRINT "THROUGHOUT THIS SERIES, HEXADECIMAL AND BINARY NOTATION":GOSUB 120 1980 PRINT "WILL BE USED IN PREFERENCE TO DECIMAL UNLESS THE SENSE IS":GOSUB 120 1990 PRINT "MADE CLEARER WITH DECIMAL.":GOSUB 130 2000 PRINT "AS THE MAIN WORK OF THE MICROPROCESSOR IS MOVING, ADDING,":GOSUB 120 2010 PRINT "SUBTRACTING AND COMPARING 8 BIT BYTES, WE WILL LOOK IN":GOSUB 120 2020 PRINT "THE NEXT TUTORIAL AT BINARY LOGIC, AN ORDERED SYSTEM OF":GOSUB 120 2030 PRINT "HANDLING BINARY BITS THAT MAKES PROCESSING OF DATA POSSIBLE":GOSUB 120 2040 PRINT "AT A MICROPROCESSOR LEVEL":GOSUB 130 2050 GOSUB 3010 2060 INPUT "BACK TO MENU, ON TO TUTORIAL 2, OR TERMINATE? ";YN$:GOSUB 3000:PLOT 12 2070 IF YN$= "B"THEN PLOT 1 2080 IF YN$= "2"THEN LOAD "TUTE2":RUN 2090 PLOT 27,11:END 3000 FOR I= 24TO 8STEP - 2:Z= CALL (I):NEXT 3010 FOR I= 8TO 24STEP 2:Z= CALL (I):NEXT :RETURN