Compucolor.org – Virtual Media

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