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