Compucolor.org – Virtual Media

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

100 REM  TRANSFER INSTR	TUTE4A	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
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 ARCH.DSP":PLOT 27,27
200 BL$= "        ":R1= 20:R2= 30:R3= 45:R4= 53:KB= 33278:DU= 49113:POKE DU,255
210 PLOT 3,0,25:PRINT "IN THIS TUTORIAL WE WILL LOOK AT THE INSTRUCTION SET OF THE"
220 PRINT "8080A MICROPROCESSOR."
230 PRINT "WE WILL DESCRIBE THE EFFECTS OF EACH TYPE OF INSTRUCTION"
240 PRINT "ON REGISTERS, FLAGS, & MEMORY,"
250 PRINT "AND WHERE HELPFUL, OBSERVE THIS GRAPHICALLY.":PRINT
256 FOR I= 20TO 12STEP - 2:Z= CALL (I):NEXT
260 INPUT "THROUGHOUT, TO ADVANCE THE TEXT, PRESS ENTER ";Z:PLOT 28,11:PRINT "/":GOSUB 120
270 PRINT "AS THERE ARE 78 BASIC INSTRUCTION TYPES AND 244 RESULTING":GOSUB 120
280 PRINT "OPCODES, WE WILL NOT ATTEMPT TO REMEMBER THE OPCODES BUT":GOSUB 120
290 PRINT "ATTEMPT TO BECOME CONVERSANT WITH THEIR MNEMONIC. ":GOSUB 130
300 PRINT "AS YOU ARE NOW FAMILIAR WITH THE SYMBOLIC NAMES FOR THE":GOSUB 120
310 PRINT "REGISTERS, WE WILL FIRST 'CLEAN THE BOARD' AND FILL ALL":GOSUB 120
320 PRINT "REGISTERS WITH RANDOM INITIAL VALUES. ":GOSUB 130
330 A$= "10110111":GOSUB 5000:F$= "10 0 0 0":GOSUB 5100:B$= "10000100":GOSUB 5200:C$= "00000101":GOSUB 5300
340 D$= "11101011":GOSUB 5400:E$= "00101011":GOSUB 5500:H$= "00101011":GOSUB 5600:L$= "11000010":GOSUB 5700
350 SP$= D$+ L$:GOSUB 5800
360 PC$= "00000000":GOSUB 5900:PLOT 3,45,6:PRINT PC$:PLOT 3,1,9:PRINT BL$"      ":GOSUB 6300
370 PRINT "FOR CONVENIENCE WE HAVE ASSUMED THAT THE FIRST INSTRUCTION":GOSUB 120
380 PRINT "WILL BE FOUND AT ADDRESS 0000H, (PC ZEROED).":GOSUB 133
390 PRINT "THE FIRST GROUP OF INSTRUCTIONS TO BE LOOKED AT ARE THE":GOSUB 120
400 PRINT "DATA TRANSFER GROUP. THESE MOVE DATA BETWEEN REGISTERS":GOSUB 120
410 PRINT "OR BETWEEN MEMORY AND REGISTERS. ":GOSUB 130
420 PRINT "THE FIRST OF THESE IS MOV WHICH, WITH APPROPRIATE OPERAND,":GOSUB 120
430 PRINT "LOADS DATA FROM ONE REGISTER TO ANOTHER.":GOSUB 120
440 PRINT "ALLOWED REGISTERS ARE B,C,D,E,H,L,M, AND A.":GOSUB 120
450 PRINT "M OF COURSE IS NOT STRICTLY A REGISTER BUT A MEMORY LOCATION":GOSUB 120
460 PRINT "ADDRESSED BY H AND IS THUS A PSEUDO REGISTER.":GOSUB 120
470 PRINT "THE ONLY COMBINATION OF REGISTER PAIRS NOT USED IS MOV M,M":GOSUB 120
480 PRINT "YIELDING 63 DIFFERENT MOV INSTRUCTIONS.":GOSUB 120
490 PRINT "THE ONLY REGISTER ALTERED BY THIS INSTRUCTION IS THE":GOSUB 120
500 PRINT "DESTINATION REGISTER. ":GOSUB 130
510 PRINT "IN FORMING THE MNEMONIC, THE DESTINATION REGISTER PRECEDES":GOSUB 120
520 PRINT "THE SOURCE REGISTER AND IS SEPARATED FROM IT BY A COMMA.":GOSUB 120
530 PRINT "THUS, MOV A,C MEANS LOAD A WITH THE CONTENTS OF C. (LET A = C)":GOSUB 120
540 PRINT "PRESS ENTER TO CARRY OUT MOV A,C. ":GOSUB 130
550 DD$= "01111001":GOSUB 6400:HI$= "79":P$= "MOV A,C      ":GOSUB 6000:GOSUB 140
560 A$= C$:GOSUB 5000:PC$= "00000001":GOSUB 5900:GOSUB 6300
570 PRINT "NOTE THAT THE FLAGS ARE NOT AFFECTED BY MOV,":GOSUB 120
580 PRINT "NOTE ALSO THAT THE PC HAS INCREMENTED FROM 0000H TO 0001H. ":GOSUB 130
590 PRINT "THE SECOND INSTRUCTION PROVIDING DATA TRANSFER IS MVI.":GOSUB 120
600 PRINT "THIS INSTRUCTION MOVES IMMEDIATE DATA, PROVIDED BY THE":GOSUB 120
610 PRINT "SUCCESSIVE BYTE IN MEMORY, INTO SINGLE REGISTERS. ":GOSUB 130
620 PRINT "REGISTERS, AS WITH MOV, ARE B,C,D,E,H,L,M, & A.":GOSUB 120
630 PRINT "FLAGS ARE SIMILARLY UNAFFECTED. ":GOSUB 130
640 PRINT "THE MNEMONIC IS FORMED SIMILARLY TOO -":GOSUB 120
650 PRINT "THUS MVI H,1AH LOADS THE SINGLE BYTE 1A INTO H (LET H = 26)":GOSUB 120
660 PRINT "PRESS ENTER TO EXECUTE MVI B,2CH. ":GOSUB 130
670 DD$= "00000110":GOSUB 6400:HI$= "06":P$= "MVI B    ":GOSUB 6000:GOSUB 140
680 DD$= "00101100":GOSUB 6100:PC$= "00000011":GOSUB 5900:GOSUB 140
690 B$= DD$:GOSUB 5200:DD$= BL$:GOSUB 6100:GOSUB 6300
700 PRINT "NOTE THAT THE DATA BYTE FOLLOWING MVI WAS LATCHED OFF":GOSUB 120
710 PRINT "THE DATA BUS FOR LOADING INTO B.":GOSUB 120
720 PRINT "NOTE ALSO THAT PC INCREMENTED BY TWO TO 0003H SINCE MVI IS A":GOSUB 120
730 PRINT "TWO BYTE INSTRUCTION, (ONE FOR DATA). ":GOSUB 130
740 PRINT "THE NEXT DATA TRANSFER INSTRUCTIONS TO BE CONSIDERED MOVE DATA":GOSUB 120
750 PRINT "BETWEEN A AND MEMORY. THEY ARE STA (STORE A IN MEMORY)":GOSUB 120
760 PRINT "AND LDA (LOAD A FROM MEMORY).":GOSUB 120
770 PRINT "THE ADDRESS IN MEMORY LOADED FROM OR STORED TO IS GIVEN BY":GOSUB 120
780 PRINT "THE NEXT TWO BYTES IN THE INSTRUCTION SEQUENCE.":GOSUB 120
790 PRINT "THUS LDA BC1FH  MEANS LOAD A WITH THE BYTE STORED AT BC1FH":GOSUB 120
800 PRINT "AND  STA 829AH  MEANS STORE THE BYTE IN A AT 829AH.":GOSUB 130
810 PRINT "AN IMPORTANT CONVENTION MUST BE INTRODUCED HERE RELATING TO":GOSUB 120
820 PRINT "THE SEQUENCE OF BYTES IN A MULTI-BYTE INSTRUCTION:":GOSUB 120
830 PRINT "ADDRESSES ARE STORED IN INSTRUCTIONS IN THE SEQUENCE <LOHI>":GOSUB 130
840 PRINT "I.E. LEAST SIGNIFICANT BYTE FOLLOWED BY MOST SIGNIFICANT BYTE":GOSUB 120
850 PRINT "THE OPCODE FOR STA IS 32H. THE INSTRUCTION STA 81FFH IS STORED":GOSUB 120
860 PRINT "IN MEMORY AS  32 FF 81 .":GOSUB 120
870 PRINT "PRESS ENTER TO SEE STA 81FFH IMPLEMENTED. ":GOSUB 130
880 DD$= "00110010":GOSUB 6400:HI$= "32":P$= "STA      ":GOSUB 6000:GOSUB 140
890 PC$= "00000110":GOSUB 5900:GOSUB 140
900 PLOT 6,6,3,45,9:PRINT "1000000111111111":GOSUB 140
910 PLOT 6,2,3,18,14:PRINT "81FF":GOSUB 140
920 DD$= A$:GOSUB 6100:PLOT 3,45,9:PRINT BL$BL$:GOSUB 140
930 DD$= BL$:GOSUB 6100:PLOT 6,6,3,22,14:PRINT " "A$" ":GOSUB 140:GOSUB 6300
940 PRINT "NOTE THAT THE STA WAS DECODED, THE ADDRESS BUS LATCH USED THE":GOSUB 120
950 PRINT "NEXT TWO BYTES TO LATCH 81FF, THE PC WAS BUMPED BY 3, AND":GOSUB 120
960 PRINT "THE CONTENTS OF A WERE TRANSFERRED TO MEMORY AT 81FF, LEAVING":GOSUB 120
970 PRINT "A UNALTERED.":GOSUB 120
980 PRINT "NOTE ALSO THAT THE FLAGS WERE UNAFFECTED. ":GOSUB 130
990 PRINT "THE NEXT PAIR OF DATA TRANSFER INSTRUCTIONS ARE LHLD AND SHLD.":GOSUB 133
1000 PRINT "LHLD LOADS HL WITH THE 2 BYTES POINTED TO BY THE OPERAND.":GOSUB 120
1010 PRINT "SHLD SAVES THE CONTENTS OF HL AT THE ADDRESS POINTED BY THE":GOSUB 120
1020 PRINT "OPERAND. ":GOSUB 130
1030 PRINT "THUS THERE IS A DIRECT TRANSFER OF 16 BITS OF DATA OR AN":GOSUB 120
1040 PRINT "ADDRESS BETWEEN MEMORY AND THE HL REGISTER PAIR.":GOSUB 120
1050 PRINT "NOTE THAT SHLD 9000H IS STORED AS 22 00 90.":GOSUB 120
1060 PRINT "AND THAT L IS STORED AT 9000 AND H IS STORED AT 9001.":GOSUB 120
1070 PRINT "PRESS ENTER TO EXECUTE SHLD 9000H. ":GOSUB 130
1080 DD$= "00100010":GOSUB 6400:HI$= "22":P$= "SHLD   ":GOSUB 6000:GOSUB 140
1090 PC$= "00001001":GOSUB 5900:GOSUB 140
1100 AD$= "1001000000000000":GOSUB 6200:GOSUB 140
1110 PLOT 6,2,3,18,16:PRINT "9000":AD$= BL$+ BL$:GOSUB 6200:GOSUB 140
1120 DD$= L$:GOSUB 6100:GOSUB 140:DD$= BL$:GOSUB 6100
1130 PLOT 6,6,3,23,16:PRINT L$:GOSUB 140
1140 PLOT 6,2,3,18,17:PRINT "9001":GOSUB 140
1150 DD$= H$:GOSUB 6100:GOSUB 140:DD$= BL$:GOSUB 6100
1160 PLOT 6,6,3,23,17:PRINT H$:GOSUB 140:GOSUB 6300
1170 PRINT "NOTE PC BUMPED BY 3, L SAVED AT 9000, H SAVED AT 9001.":GOSUB 120
1180 PRINT "FOR LHLD, L WOULD HAVE COME FROM 9000 AND H FROM 9001.":GOSUB 130
1190 PRINT "HAVING SEEN HOW THE DATA BUS AND ADDRESS BUS LATCHES WORK,":GOSUB 120
1200 PRINT "WE WILL ELIMINATE THEIR ACTION FROM MOST FUTURE DISPLAYS. ":GOSUB 130
1210 PRINT "IT WILL ALSO BE MORE PRACTICAL AND READABLE TO DISPLAY":GOSUB 120
1220 PRINT "REGISTER CONTENTS IN HEX RATHER THAN BINARY, EXCEPT FOR":GOSUB 120
1230 PRINT "REGISTER A, WHICH WE WILL NEED TO LOOK AT BITWISE. ":GOSUB 130
1240 B$= BL$:GOSUB 5200:C$= BL$:GOSUB 5300:GOSUB 140
1250 D$= BL$:GOSUB 5400:E$= BL$:GOSUB 5500:GOSUB 140
1260 H$= BL$:GOSUB 5600:L$= BL$:GOSUB 5700:GOSUB 140
1270 PLOT 3,45,4:PRINT BL$BL$:GOSUB 140:PLOT 3,45,6:PRINT BL$BL$:GOSUB 140:R1= R1+ 3:R2= R2+ 3:R3= 50:R4= 50
1280 B$= "2C":GOSUB 5200:C$= "05":GOSUB 5300:GOSUB 140
1290 D$= "DB":GOSUB 5400:E$= "2B":GOSUB 5500:GOSUB 140
1300 H$= "2B":GOSUB 5600:L$= "C2":GOSUB 5700:GOSUB 140
1310 SP$= "DB C2":GOSUB 5800:GOSUB 140:PC$= "00 09":GOSUB 5900:GOSUB 140:GOSUB 6300
1320 PRINT "HAVING GRADUATED TO HEX, WE MAY NOW PROCEED. ":GOSUB 130
1330 PRINT "AN X IN A DATA TRANSFER INSTRUCTION IMPLIES THAT IT DEALS":GOSUB 120
1340 PRINT "WITH A REGISTER PAIR.":GOSUB 120
1350 PRINT "THUS LXI IS SIMILAR TO MVI EXCEPT THAT THE OPERAND REGISTERS":GOSUB 120
1360 PRINT "ARE 16 BIT REGISTERS.":GOSUB 120
1370 PRINT "ALLOWED OPERANDS ARE B,D,H, & SP. ":GOSUB 130
1380 PRINT "THE NEXT TWO BYTES PROVIDE THE DATA.":GOSUB 120
1390 PRINT "THUS LXI H,9010H WHICH LOADS HL WITH 9010H IS STORED AS":GOSUB 120
1400 PRINT "21 10 90. ":GOSUB 120
1410 PRINT "NOTE THOUGH THAT H IS LOADED WITH 90 AND L WITH 10.":GOSUB 120
1420 PRINT "PRESS ENTER TO EXECUTE LXI SP,BE00H. ":GOSUB 130
1430 I$= "00110001":HI$= "31":P$= "LXI SP   ":GOSUB 6000:GOSUB 140
1440 PC$= "00 0C":GOSUB 5900:GOSUB 140
1450 SP$= "BE 00":GOSUB 5800:GOSUB 6300
1460 PRINT "THE NEXT PAIR OF DATA TRANSFER INSTRUCTIONS CONSIDERED ARE":GOSUB 120
1470 PRINT "LDAX AND STAX.":GOSUB 120
1480 PRINT "THESE LOAD A FROM,OR STORE A IN, THE ADDRESS POINTED TO BY":GOSUB 120
1490 PRINT "THE OPERAND REGISTER PAIR WHICH MAY BE B, OR D.":GOSUB 120
1500 PRINT "THUS LDAX B LOADS A WITH THE BYTE POINTED TO BY B & C. ":GOSUB 130
1510 PRINT "CURRENTLY, DE POINTS TO DB2BH SO STAX D WILL STORE THE":GOSUB 120
1520 PRINT "CONTENTS OF A IN MEMORY AT ADDRESS DB2B.":GOSUB 120
1530 PRINT "PRESS ENTER TO EXECUTE STAX D. ":GOSUB 130
1540 I$= "00010010":HI$= "12":P$= "STAX D      ":GOSUB 6000:GOSUB 140
1550 PC$= "00 0D":GOSUB 5900:GOSUB 140
1560 PLOT 6,2,3,18,19:PRINT "DB2B":PLOT 6,6,3,23,19:PRINT A$:GOSUB 6300
1570 PRINT "NOTE THAT A IS UNALTERED BY THESE INSTRUCTIONS AND THAT":GOSUB 120
1580 PRINT "PC IS BUMPED BY ONLY ONE (SINGLE BYTE INSTRUCTION). ":GOSUB 130
1590 PRINT "THE NEXT 16 BIT DATA TRANSFER INSTRUCTION IS XCHG, A SINGLE":GOSUB 120
1600 PRINT "BYTE INSTRUCTION THAT EXCHANGES THE CONTENTS OF H & L WITH":GOSUB 120
1610 PRINT "D & E.":GOSUB 120
1620 PRINT "PRESS ENTER TO EXECUTE XCHG. ":GOSUB 130
1630 I$= "11101011":HI$= "EB":P$= "XCHG        ":GOSUB 6000:GOSUB 140
1640 PC$= "00 0E":GOSUB 5900:GOSUB 140
1650 T1$= H$:T2$= L$:H$= D$:L$= E$:GOSUB 5600:GOSUB 5700:GOSUB 140
1660 D$= T1$:E$= T2$:GOSUB 5400:GOSUB 5500:GOSUB 6300
1670 PRINT "BEING A REGISTER TO REGISTER INSTRUCTION, XCHG IS VERY QUICK":GOSUB 120
1680 PRINT "AND EFFICIENT. ":GOSUB 130
1690 PRINT "A SIMILAR OPERATION IS PERFORMED BY XTHL WHICH EXCHANGES THE":GOSUB 120
1700 PRINT "TWO BYTES AT THE TOP OF THE STACK WITH THE CONTENTS OF HL.":GOSUB 120
1710 PRINT "THE SP CURRENTLY POINTS TO BE00. WE WILL ASSUME THAT":GOSUB 120
1720 PRINT "LOCATIONS BE00 AND BE01 CONTAIN F0 AND 0D RESPECTIVELY.":GOSUB 130
1730 T1$= "0D":T2$= "F0":PLOT 3,18,18:PRINT "BE00 "BL$:GOSUB 140:PLOT 3,18,19:PRINT "BE01 "BL$
1740 PLOT 6,6,3,26,18:PRINT T2$:GOSUB 140:PLOT 3,26,19:PRINT T1$:GOSUB 140:GOSUB 6300
1750 PRINT "PRESS ENTER TO EXECUTE XTHL. ":GOSUB 130
1760 I$= "11100011":HI$= "E3":P$= "XTHL    ":GOSUB 6000:GOSUB 140
1770 PC$= "00 0F":GOSUB 5900:GOSUB 140
1780 T3$= H$:T4$= L$:H$= T1$:L$= T2$:GOSUB 5600:GOSUB 140:GOSUB 5700:GOSUB 140
1790 PLOT 3,26,18:PRINT T4$:GOSUB 140:PLOT 3,26,19:PRINT T3$:GOSUB 6300
1800 PRINT "NOTE THAT L WAS FETCHED FROM THE BYTE POINTED BY SP. AND":GOSUB 120
1810 PRINT "THAT H WAS FETCHED FROM THE BYTE POINTED BY SP +1.":GOSUB 120
1820 PRINT "ALSO NOTE THAT THE SP REMAINS UNCHANGED BY XTHL. ":GOSUB 130
1830 PRINT "THAT COMPLETES THE DATA TRANSFER GROUP OF INSTRUCTIONS.":GOSUB 133
1840 PRINT TAB( 16)"MOV   R8,R8":GOSUB 120
1850 PRINT TAB( 16)"MVI   D8"TAB( 32)"LXI   R16,<LOHI>":GOSUB 120
1860 PRINT TAB( 16)"LDA  <LOHI>"TAB( 32)"LDAX (B OR C)":GOSUB 120
1870 PRINT TAB( 16)"STA  <LOHI>"TAB( 32)"STAX (B OR C)":GOSUB 120
1880 PRINT TAB( 16)"LHLD <LOHI>"TAB( 32)"XCHG":GOSUB 120
1890 PRINT TAB( 16)"SHLD <LOHI>"TAB( 32)"XTHL":GOSUB 130
1900 FOR I= 12TO 20:Z= CALL (I):NEXT
1910 INPUT "DO YOU WANT TO PROCEED TO THE ARITHMETIC GROUP? Y/N ";YN$:GOSUB 133
1920 IF YN$< > "Y"THEN PLOT 1
1930 LOAD "TUTE4B":RUN 200
2000 END
5000 PLOT 6,6,3,20,2:PRINT A$:RETURN
5100 PLOT 6,6,3,30,2:PRINT F$:RETURN
5200 PLOT 6,6,3,R1,4:PRINT B$:RETURN
5300 PLOT 6,6,3,R2,4:PRINT C$:RETURN
5400 PLOT 6,6,3,R1,6:PRINT D$:RETURN
5500 PLOT 6,6,3,R2,6:PRINT E$:RETURN
5600 PLOT 6,6,3,R1,8:PRINT H$:RETURN
5700 PLOT 6,6,3,R2,8:PRINT L$:RETURN
5800 PLOT 6,6,3,R3,4:PRINT SP$:RETURN
5900 PLOT 6,6,3,R4,6:PRINT PC$:RETURN
6000 PLOT 6,34,3,2,4:PRINT I$:PLOT 3,12,4:PRINT HI$:PLOT 6,2,3,2,7:PRINT P$:RETURN
6100 PLOT 6,2,3,5,9:PRINT DD$:RETURN
6200 PLOT 6,2,3,45,9:PRINT AD$:RETURN
6300 PLOT 6,2,3,0,31:RETURN
6400 GOSUB 6100:GOSUB 140:I$= DD$:DD$= BL$:GOSUB 6100:RETURN