start tok64 d64-fueGmM 0 REM"{delete*7} ponzo*82*waterloo 1 REM"{delete*7} 5 POKE53281,15:POKE53280,12:PRINT"{black}" 10 PRINT"{clear}{space*15}{reverse on}{blue}c64 tutor-7 15 PRINT"{red}{cm a}{sh asterisk*37}{cm s}" 20 PRINT"{sh -} {reverse on}{blue}{space*2}{.*3}and more machine language{.*3}{space*2}{red}{reverse off} {sh -}":ms$=" welcome! " 25 PRINT"{red}{cm z}{sh asterisk*37}{cm x}{black}" 35 GOSUB60000:GOSUB63100:GOSUB63000 40 GOSUB20000 45 PRINT"{clear}":PRINTsd$"recall that the {reverse on}6510{reverse off} has a" 50 PRINT"{down}number of internal registers{.*3}":GOSUB63000:PRINTa$x$y$ 60 GOSUB39100:PRINT"some commands affect the numbers" 70 PRINT"contained in these registers..":GOSUB63000:PRINTsd$"{down}" 90 PRINT"{down}{reverse on}adc{reverse off} {reverse on}and{reverse off} {reverse on}asl{reverse off} {reverse on}cmp{reverse off} {reverse on}cpx{reverse off} {reverse on}cpy{reverse off} {reverse on}dec{reverse off} {reverse on}dex{reverse off} {reverse on}dey" 100 PRINT"{down}{reverse on}eor{reverse off} {reverse on}inc{reverse off} {reverse on}inx{reverse off} {reverse on}iny{reverse off} {reverse on}lda{reverse off} {reverse on}ldx{reverse off} {reverse on}ldy{reverse off} {reverse on}lsr{reverse off} {reverse on}ora" 110 PRINT"{down}{reverse on}pla{reverse off} {reverse on}plp{reverse off} {reverse on}rol{reverse off} {reverse on}ror{reverse off} {reverse on}rti{reverse off} {reverse on}sbc{reverse off} {reverse on}tax{reverse off} {reverse on}tsx{reverse off} {reverse on}txa" 120 PRINT"{down}..and {reverse on}tya{reverse off}!!":ms$="where's{reverse on}bit{reverse off}" :GOSUB63100:GOSUB63000 130 GOSUB39100:PRINT"the {reverse on}6510{reverse off} keeps track of whether" 140 PRINT"{down}one of these operations produces a {reverse on}z{reverse off}ero" 150 PRINT"{down}or {reverse on}n{reverse off}egative result..and, for {reverse on}adc{reverse off}" 160 PRINT"{down}and {reverse on}sbc{reverse off} (add & subtract), whether" 170 PRINT"{down}the operation produces an {reverse on}overflow{reverse off}.":GOSUB63000 180 GOSUB39100:PRINT"the {reverse on}p{reverse off}rocessor status register" 190 PRINT"{down}has 8 bits. three bits are devoted to" 200 PRINT"{down}{reverse on}n{reverse off}egative,o{reverse on}v{reverse off}erflow and {reverse on}z{reverse off}ero.":GOSUB63000:PRINTp$ 210 POKEp(0),142:POKEp(1),150:POKEp(6),154:GOSUB63000 215 POKEp(0),32:POKEp(1),32:POKEp(6),32 220 GOSUB39100:PRINT"if an operation produces a {reverse on}n{reverse off}egative" 230 PRINT"{down}result,{reverse on}n=1{reverse off}":POKEp(0),177:GOSUB63000 240 GOSUB39100:PRINT"if it's not negative then {reverse on}n=0{reverse off}" 250 PRINT"{down}(meaning it's positive!)":POKEp(0),176:GOSUB63000 260 PRINT"{clear}a negative number has a '1'" 270 PRINT"{down}in the msb position." 280 PRINT"{down}if one of the operations which affect" 290 PRINT"{down}the a,x or y-registers is performed," 300 PRINT"{down}and the msb of the result is '1', then" 310 PRINT"{down}{reverse on}n=1{reverse off}. it's that simple!":GOSUB63000 320 ms$="{space*2}{reverse on}n=msb{reverse off} ":GOSUB63100:GOSUB63000 330 PRINT"{clear}{reverse on}bmi $1234{reverse off} will test the {reverse on}n{reverse off}-bit and," 340 PRINT"{down}if it's '1', will branch to $1234." 350 PRINT"{down}(since the 'result' is {reverse on}mi{reverse off}nus!)" 360 PRINT"{down}{reverse on}bpl $1234{reverse off} will {reverse on}b{reverse off}ranch to $1234" 370 PRINT"{down}if the 'result' is {reverse on}pl{reverse off}us (n=0)." 380 PRINT"{down}if we {reverse on}lda #$d3{reverse off}, then n=1" 390 PRINT"{down}because $d0=11010011 in binary and msb=1" 400 PRINT"{down}so{down}{left*2}{cm u*2}{up}..{reverse on}bpl $1234{reverse off} will not{down}{left*3}{cm u*3}{up} take us" 410 PRINT"{down}to $1234.":ms$=" careful!!":GOSUB63000:GOSUB63100 420 PRINT"{clear}{space*9}{reverse on}the v-bit{reverse off}" 425 PRINT"{down}since the msb carries the 'sign' of a" 430 PRINT"{down}number (in 'signed arithmetic')" 440 PRINT"{down}then an {reverse on}adc{reverse off} or {reverse on}sbc{reverse off} which causes" 450 PRINT"{down}the next-to-msb to 'overflow' into the" 460 PRINT"{down}sign-bit will cause {reverse on}v=1{reverse off}." 470 PRINT"{down}if 'signed arithmetic' is not being" 480 PRINT"{down}performed then we can ignore the v-bit." 490 PRINT"{down}although {reverse on}adc{reverse off} and {reverse on}sbc{reverse off} may set v=1" 500 PRINT"{down}we can force v=0 with the command:" 510 PRINT"{down}{reverse on}clv{reverse off}={reverse on}cl{reverse off}ear the {reverse on}v{reverse off}-bit.":GOSUB63000:GOSUB10000 520 PRINT"{clear}it's often necessary to {reverse on}j{reverse off}u{reverse on}mp{reverse off} from" 530 PRINT"{down}one place to another in a program." 540 PRINT"{down}we can use: {reverse on}jmp $1234{reverse off}." 550 PRINT"{down}of course we{sh space}had better have some" 560 PRINT"{down}instructions at $1234!!" 570 PRINT"{down}if our program is at $1{0*3}-$2{0*3}" 590 PRINT"{down}and it has a {reverse on}jmp $1234{reverse off},that's ok." 600 PRINT"{down}if we{sh space}physically move this program to," 610 PRINT"{down}say, $3{0*3} to $4{0*3} (perhaps to make" 620 PRINT"{down}room for some {reverse on}basic{reverse off} at $0801 to $2{0*3})" 630 PRINT"{down}then the relocated program should not" 640 PRINT"{down}have {reverse on}jmp $1234{reverse off} in it!!":GOSUB63000 650 PRINT"{clear}here's another use of the v-bit." 660 PRINT"{down}suppose we have {reverse on}jmp $1234{reverse off} located" 670 PRINT"{down}in our program at $1200-$1202." 680 PRINT"{down}$1200{space*2}$1201{space*2}$1202{space*3}$1203" 690 PRINT"{space*2}{reverse on}4c{reverse off}{space*5}{reverse on}34{reverse off}{space*5}{reverse on}12{reverse off}{space*5}***" 700 PRINT"{space*2}^jmp{space*3}^lo{space*4}^hi{space*3}^next" 710 PRINT"{space*2}^inst{space*2}^byte{space*2}^byte ^inst" 720 PRINT"{down}we would normally continue to the next" 730 PRINT"{down}instruction at ${reverse on}1203{reverse off} but,because of" 740 PRINT"{down}the {reverse on}jmp{reverse off}, we actually move ahead to $1234" 750 PRINT"{down}which is ${reverse on}31{reverse off} memory loc'ns farther on!":GOSUB63000 760 PRINT"{clear}we can perform a {reverse on}relative jump{reverse off}, by" 770 PRINT"{down}${reverse on}31{reverse off} memory locations, by writing:" 780 PRINT"{down}{reverse on}clv{space*5}{reverse off}=clear v-bit (set v=0)." 790 PRINT"{reverse on}bvc #$31{reverse off}=branch ahead $31 loc'ns if v=0" 800 PRINT"{down}this will take us to $1234 and the" 810 PRINT"{down}program is 'relocatable'!":GOSUB63000:PRINTsd$ 820 PRINT"{down}$1200{space*2}$1201{space*2}$1202" 830 PRINT"{space*2}{reverse on}b8{reverse off}{space*5}{reverse on}50{reverse off}{space*5}{reverse on}31" 840 PRINT"{space*2}^clv{space*3}^bvc{space*3}^# loc'ns" 850 PRINT"{down}if we don't use {reverse on}jmp{reverse off}s, but 'relative" 860 PRINT"{down}branches' instead, our program will" 870 PRINT"{down}run anywhere in memory!":GOSUB63000 875 PRINT"{clear}{reverse on}confusing??{reverse off}":PRINT"{down}should we say {reverse on}bvc $1234{reverse off}" 876 PRINT"{down}or should we say {reverse on}bvc #$31{reverse off}?*!" 877 PRINT"{down}actually, although an 'assembler' such" 878 PRINT"{down}as {reverse on}micromon{reverse off} will allow us to say" 879 PRINT"{down}bvc $1234{reverse off}, the machine language code" 880 PRINT"{down}generated will read {reverse on}bvc #$31{reverse off}!!" 881 PRINT"{down}that is, the instruction will appear" 882 PRINT"{down}in memory as {reverse on}50{reverse off} {reverse on}31{reverse off}..meaning branch" 883 PRINT"{down}ahead $31 loc'ns if v=0.":GOSUB63000 885 PRINT"{clear}all {reverse on}b{reverse off}ranch instructions are 'relative':" 890 PRINT"{down}{reverse on}bcs{reverse off}=branch if carry is set(c=1)" 900 PRINT"{down}{reverse on}bcc{reverse off}=branch if carry is clear(c=0)" 910 PRINT"{down}{reverse on}beq{reverse off}=branch if z-bit is set(z=1)" 920 PRINT"{down}{reverse on}bne{reverse off}=branch if z-bit is clear(z=0)" 930 PRINT"{down}{reverse on}bmi{reverse off}=branch if n-bit is set(n=1)" 940 PRINT"{down}{reverse on}bpl{reverse off}=branch if n-bit is clear(n=0)" 950 PRINT"{down}{reverse on}bvs{reverse off}=branch if v-bit is set(v=1)" 960 PRINT"{down}{reverse on}bvc{reverse off}=branch if v-bit is clear(v=0)":GOSUB63000 965 ms$="relatives?":GOSUB63100 970 PRINT"{clear}":PRINTp$:PRINTsd$"some of the bits of the {reverse on}p{reverse off}rocessor" 980 PRINT"{down}status register can be set(=1), and" 990 PRINT"{down}some can be cleared(=0).":GOSUB63000:GOSUB39100 1000 PRINT"{reverse on}clv{reverse off}=clears o{reverse on}v{reverse off}erflow":POKEp(1),176:GOSUB63000:GOSUB39100 1005 POKEp(1),32 1010 PRINT"{reverse on}clc{reverse off}=clears {reverse on}c{reverse off}arry":POKEp(7),176:GOSUB63000:GOSUB39100 1015 POKEp(7),32 1020 PRINT"{reverse on}cld{reverse off}=clears {reverse on}d{reverse off}ecimal mode flag":POKEp(4),176:GOSUB63000 1025 ms$="what flag?":GOSUB63100:GOSUB63000:GOSUB39100:POKEp(4),132 1030 PRINT"{reverse on}cli{reverse off}=clears {reverse on}i{reverse off}nterrupt flag":POKEp(5),176:GOSUB63000 1035 ms$="{reverse on}what flag!{reverse off}":GOSUB63100:POKEp(5),137:GOSUB63000:GOSUB39100 1040 PRINT"{clear}"sd$"altogether now..":PRINTp$ 1050 POKEp(0),14:POKEp(1),22:POKEp(4),4:POKEp(5),9:POKEp(6),26:POKEp(7),3 1055 GOSUB63000 1060 GOSUB39100:PRINT"{reverse on}n{reverse off}={reverse on}n{reverse off}egative flag bit.":POKEp(0),PEEK(p(0))+128 1061 GOSUB63000 1070 PRINTsd$"{down*2}{reverse on}v{reverse off}=o{reverse on}v{reverse off}erflow flag bit.":POKEp(1),PEEK(p(1))+128:GOSUB63000 1080 PRINTsd$"{down*4}{reverse on}d{reverse off}={reverse on}d{reverse off}ecimal mode flag bit.":POKEp(4),PEEK(p(4))+128 1081 GOSUB63000 1090 PRINTsd$"{down*6}{reverse on}i{reverse off}={reverse on}i{reverse off}nterrupt flag bit.":POKEp(5),PEEK(p(5))+128 1091 GOSUB63000 1100 PRINTsd$"{down*8}{reverse on}z{reverse off}={reverse on}z{reverse off}ero flag bit.":POKEp(6),PEEK(p(6))+128:GOSUB63000 1110 PRINTsd$"{down*10}{reverse on}c{reverse off}={reverse on}c{reverse off}arry flag bit.":POKEp(7),PEEK(p(7))+128 1115 GOSUB63000 1120 POKEp(2),214:ms$="{reverse on}not used!!{reverse off}":GOSUB63100 1125 GETz$:IFz$=""THENPOKEp(2),32:GOTO1120 1130 POKEp(3),130:GOSUB39100:PRINT"when the 6510 gets a {reverse on}break{reverse off} command" 1140 PRINT"{down}(which is {reverse on}00{reverse off}) " 1150 PRINT"{down}the {reverse on}b{reverse off}reak bit is set(b=1)":GOSUB63000:POKEp(3),130 1160 ms$="command=00":GOSUB63100:GOSUB63000 1170 PRINT"{clear}just in case you're wondering.." 1180 PRINT"{down}the {reverse on}6510{reverse off} has a {reverse on}decimal{reverse off} mode whereby" 1190 PRINT"{down}arithmetic operations are performed" 1200 PRINT"{down}assuming all numbers are {reverse on}not{reverse off} in decimal" 1210 PRINT"{down}but rather in {reverse on}b{reverse off}inary {reverse on}c{reverse off}oded {reverse on}d{reverse off}ecimal!" 1220 PRINT"{down}if we want to operate in 'decimal" 1230 PRINT"{down}mode' we must set the {reverse on}d{reverse off}-flag to '1':" 1240 PRINT"{down}{reverse on}sed" 1250 PRINT"{down}to get out of this mode we clear the" 1260 PRINT"{down}decimal mode flag to '0':" 1270 PRINT"{down}{reverse on}cld":GOSUB63000 1280 PRINT"{clear}further..the {reverse on}6510{reverse off} can be interrupted" 1290 PRINT"{down}by lowering the voltage on one of it's" 1300 PRINT"{down}pins..the {reverse on}irq{reverse off} or i{down}{left}{cm u}{up}nterrupt r{down}{left}{cm u}{up}eq{down}{left}{cm u}{up}uest pin." 1310 PRINT"{down}(external devices do this to the 6510" 1320 PRINT"all the time!)" 1330 PRINT"{down}when the 6510 gets an {reverse on}irq{reverse off} it stops" 1340 PRINT"{down}what it's doin'{.*3}services the" 1350 PRINT"{down}interrupting device..then returns" 1360 PRINT"{down}from the interrupt to continue.":GOSUB63000 1370 PRINT"{clear}for example, every jiffy(=1/60 second)" 1380 PRINT"{down}the 6510 interrupts whatever it's doin'" 1390 PRINT"{down}and updates the internal clock,checks" 1400 PRINT"{down}the keyboard to see if you're pressing" 1410 PRINT"{down}the {reverse on}stop{reverse off} key, etc." 1420 PRINT"{down}whether or not the 6510 will let itself" 1430 PRINT"{down}be interrupted depends upon a magic" 1440 PRINT"{down}bit in the {reverse on}p{reverse off}-register." 1450 PRINT"{down}{reverse on}guess which one?!!":GOSUB63000 1460 PRINT"{clear}"p$:POKEp(0),14:POKEp(1),22:POKEp(3),2:POKEp(4),4:POKEp(5),137 1470 POKEp(6),26:POKEp(7),3 1480 PRINTsd$"you bet!" 1490 PRINT"{down}if the {reverse on}i{reverse off} bit is clear(=0) the 6510" 1500 PRINT"{down}will {reverse on}let{reverse off} itself be interrupted." 1510 PRINT"{down}if i=1 however it will {reverse on}not{reverse off}!" 1520 PRINT"{down}{reverse on}sei{reverse off} will set i=1" 1530 PRINT"{down}{reverse on}cli{reverse off} will clear i=0" 1540 GOSUB63000 1550 PRINT"{clear}so, if you want the 6510 to ignore" 1560 PRINT"{down}interrupts (including the poor guy" 1570 PRINT"{down}banging on the {reverse on}stop{reverse off} key!)" 1580 PRINT"{down}start your program with {reverse on}sei{reverse off} and," 1590 PRINT"{down}{.*3}to avoid any violence{.*3}" 1600 PRINT"{down}(eventually) end it with {reverse on}cli{reverse off}.":GOSUB63000 1610 PRINT"{clear}{reverse on}and then there are subroutines{reverse off}:" 1620 PRINT"{down}if we write lo-o-ong machine language" 1630 PRINT"{down}programs (using an assembler so we" 1640 PRINT"{down}don't have to enter the hex bytes" 1650 PRINT"{down}into memory but can use assembly" 1660 PRINT"{down}language) then it's convenient to" 1670 PRINT"{down}break up our long program into wee" 1680 PRINT"{down}pieces=subroutines." 1690 PRINT"{down}Qin basic we'd say: {reverse on}gosub 1{0*3}{reverse off}" 1700 PRINT"{down}Qin assembler we'd say: {reverse on}jsr $1234" 1710 PRINT"{down}Qwhich translates to: {reverse on}20{reverse off} {reverse on}34{reverse off} {reverse on}12{reverse off}" 1720 PRINT"{down} in machine language!":GOSUB63000 1730 PRINT"{clear}basic subroutines must end in {reverse on}return{reverse off}" 1740 PRINT"{down}so the program can go back from where" 1750 PRINT"{down}it was 'called'." 1760 PRINT"{down}in assembler we end subroutines with" 1770 PRINT"{down}{reverse on}rts{reverse off}={reverse on}r{reverse off}e{reverse on}t{reverse off}urn from {reverse on}s{reverse off}ubroutine:{down*2}" 1780 PRINT"$1{0*3} {reverse on}lda #$00 " 1781 PRINT"$1002 {reverse on}jsr $1234{reverse off}{sh asterisk}{cm s}" 1782 PRINT"$1005 {reverse on}{-*5}{space*4}{reverse off} {sh -}" 1783 PRINT"{space*6}{reverse on}{-*5}{space*4}{reverse off} {sh -}" 1784 PRINT"{space*6}{-*5}{space*5}{sh -}" 1785 PRINT"{space*6}{-*5}{space*5}." 1786 PRINT"$1234 {reverse on}*****{space*4}{reverse off}{arrow left}{cm x}subroutine" 1787 PRINT"{space*6}{reverse on}*****{space*4}" 1788 PRINT"{space*6}{reverse on}rts{space*6}" 1789 ms$="there..and":GOSUB63100:GOSUB63002 1790 PRINT"{home}{down*11}" 1791 PRINT"$1002 {reverse on}jsr $1234{reverse off}{space*3}" 1792 PRINT"$1005 {reverse on}{-*5}{space*4}{reverse off}{arrow left}{cm s}" 1793 PRINT"{space*6}{reverse on}{-*5}{space*4}{reverse off} {sh -}" 1794 PRINT"{space*6}{-*5}{space*5}{sh -}" 1795 PRINT"{space*6}{-*5}{space*5}." 1796 PRINT"$1234 {reverse on}*****{space*4}{reverse off} {sh -}{space*10}" 1797 PRINT"{space*6}{reverse on}*****{space*4}{reverse off} {sh -}" 1798 PRINT"{space*6}{reverse on}rts{space*6}{reverse off}{sh asterisk}{cm x}":ms$="back again":GOSUB63100:GOSUB63000 1800 PRINT"{clear}just one more command{.*3}":GOSUB63000 1805 PRINT"{clear}":PRINTa$p$ 1810 PRINTsd$"{reverse on}lda #$d3{reverse off}":n$="11010011":GOSUB63010:GOSUB40110 1820 n$="1{0*7}":GOSUB40120:GOSUB63000:pp=300 1830 PRINTsd$"{down}{reverse on}ror{reverse off}=rotate right":n$="01101001":GOSUB63010 1835 POKEp(7),32:PRINT"{home}{down*5}"TAB(37)"0" 1836 PRINTsd$"{down*3}carry bit removed for safe keeping":GOSUB63000 1840 PRINT"{home}{down*3}"SPC(17)"{sh -}{down}{left}{cm z}{sh asterisk*19}{cm x}{up}{left}^";:POKEp(7),49 1845 GOSUB40096:PRINT"{home}{down*3}"cl$:PRINTcl$ 1846 PRINTsd$"{down*5}{reverse on}a{reverse off}-register rotated ..into carry!":GOSUB63000 1850 PRINT"{home}{down*4}{right*3}^{down}{left}{cm z}{sh asterisk*34}":POKEa(0),48 1860 PRINTsd$"{down*7}carry bit stuffed into msb of {reverse on}a{reverse off}.":GOSUB63000 1870 PRINT"{clear}..and there's {reverse on}rol{reverse off} which also" 1880 PRINT"{down}involves the {reverse on}c{reverse off}arry bit..":GOSUB63000 1890 PRINT"{clear}suppose we want to {reverse on}jsr $1234" 1900 PRINT"{down}but also want to retain all the numbers" 1910 PRINT"{down}in the 6510 registers, after returning" 1920 PRINT"{down}from the subroutine." 1930 PRINT"{down}we can {reverse on}push{reverse off} all the registers onto" 1940 PRINT"{down}the {reverse on}stack{reverse off} which consists of several" 1950 PRINT"{down}memory locations in {reverse on}ram{reverse off}..$100-$1ff." 1960 PRINT"{down}{reverse on}pha{reverse off}=push the a-register onto the stack" 1970 PRINT"{down}{reverse on}php{reverse off}=push the p-register onto the stack":GOSUB63000 1980 PRINT"{clear}to push the x and y registers we:" 1990 PRINT"{down}{reverse on}txa{reverse off} {reverse on}pha{reverse off} and {reverse on}tya{reverse off} {reverse on}pha{reverse off}." 2000 PRINT"{down}so..we:" 2010 PRINT"{down}{reverse on}pha{reverse off} {reverse on}php{reverse off} {reverse on}txa{reverse off} {reverse on}pha{reverse off} {reverse on}tya{reverse off} {reverse on}pha" 2020 PRINT"{down}then..{reverse on}jsr $1234." 2030 PRINT"{down}later, after {reverse on}rts{reverse off}, we want all" 2040 PRINT"{down}those numbers back in the registers." 2050 PRINT"{down}so we {reverse on}pull{reverse off} them from the stack" 2060 PRINT"{down}in the {reverse on}reverse order{reverse off}{!*3}" 2070 PRINT"{down}{reverse on}pla{reverse off} {reverse on}tay{reverse off} {reverse on}pla{reverse off} {reverse on}tax{reverse off} {reverse on}plp{reverse off} {reverse on}pla":GOSUB63000 2080 PRINT"{clear}the stack is a nice place to store" 2090 PRINT"{down}bytes temporarily. if we want to" 2100 PRINT"{down}exchange the contents of memory loc'ns" 2110 PRINT"{down}$2{0*3} and $3{0*3} then we can:" 2120 PRINT"{down}{reverse on}lda $2{0*3}{reverse off} {reverse on}pha{reverse off} {reverse on}lda $3{0*3}{reverse off} {reverse on}sta $2{0*3}" 2130 PRINT"{down}{reverse on}pla{reverse off} {reverse on}sta $3{0*3}":ms$=" {reverse on}slick!{reverse off}":GOSUB63000:GOSUB63100 2140 PRINT"{clear}{reverse on}you{reverse off} determine what the following" 2150 PRINT"{down}subroutine does..":GOSUB63000 3000 PRINT"{clear}., 6{0*3} a2 00{space*4}ldx #$00 3001 PRINT"., 6002 bd 00 04 lda $0400,x 3002 PRINT"., 6005 48{space*7}pha 3003 PRINT"., 6006 bd 40 05 lda $0540,x 3004 PRINT"., 6009 9d 00 04 sta $0400,x 3005 PRINT"., 600c 68{space*7}pla 3006 PRINT"., 600d 9d 40 05 sta $0540,x 3007 PRINT"., 6010 bd a0 04 lda $04a0,x 3008 PRINT"., 6013 48{space*7}pha 3009 PRINT"., 6014 bd e0 05 lda $05e0,x 3010 PRINT"., 6017 9d a0 04 sta $04a0,x 3011 PRINT"., 601a 68{space*7}pla 3012 PRINT"., 601b 9d e0 05 sta $05e0,x 3013 PRINT"., 601e e8{space*7}inx 3014 PRINT"., 601f d0 e1{space*4}cpx #$a0 3015 PRINT"., 6021 d0 df{space*4}bne $6002 3016 PRINT"., 6023 60{space*7}rts 3020 m=6*4096:FORi=mTOm+35:READk:POKEi,k:NEXT 3030 DATA162,0,189,0,4,72,189,64,5,157,0,4,104,157,64,5,189,160,4 3040 DATA72,189,224,5,157,160,4,104,157,224,5,232,224,160,208,223,96 3050 u$="":v$="{reverse on}":FORi=1TOwd-1:u$=u$+"*":v$=v$+" ":NEXT 3055 PRINTbt$"{up*4}{reverse on}you can try it!" 3100 GOSUB63000:PRINT"{clear}";:FORi=1TO4:PRINTu$:NEXT:FORi=1TO4:PRINTv$:NEXT 3110 PRINT"{home}{right*13}{reverse on}end of tutor7{reverse off}{down*3}" 3115 ms$="{reverse on}au revoir!{reverse off}" 3120 FORi=1TO10:SYS6*4096:FORt=1TO500:NEXT:NEXT:GOSUB63100 3125 FORi=1TO10:GETz$:NEXT:PRINTbt$"{up*6}sys6*4096{up*3}":END 10000 PRINT"{clear}":PRINTp$:PRINTsd$"Qthe z-bit is set to '1'" 10010 PRINT"{down}if every bit of a 'result' is {reverse on}00{reverse off}.":GOSUB63000 10020 POKEp(6),177:GOSUB63000:PRINTsd$"{down*4}"; 10030 PRINT"Qz=0 if a 'result' is not{down}{left*3}{cm u*3}{up} zero.":POKEp(6),176 10040 GOSUB63000 10050 PRINT"{clear}":PRINTp$:PRINTsd$"and the {reverse on}carry{reverse off} bit.." 10060 PRINT"{down}where's the carry bit!!":FORt=1TO10:PRINTCHR$(14); 10070 FORt1=1TO50:NEXT:PRINTCHR$(142);:FORt1=1TO50:NEXT:NEXT 10080 GOSUB63000:POKEp(7),131:GOSUB63000:RETURN 20000 PRINT"{clear}{down*3}here's the set of {reverse on}6510{reverse off} commands:" 20010 PRINT"{down}{reverse on}adc{reverse off} {reverse on}and{reverse off} {reverse on}asl{reverse off} {reverse on}bcc{reverse off} {reverse on}bcs{reverse off} {reverse on}beq{reverse off} {reverse on}bit{reverse off} {reverse on}bmi{reverse off} {reverse on}bne" 20020 PRINT"{down}{reverse on}bpl{reverse off} {reverse on}brk{reverse off} {reverse on}bvc{reverse off} {reverse on}bvs{reverse off} {reverse on}clc{reverse off} {reverse on}cld{reverse off} {reverse on}cli{reverse off} {reverse on}clv{reverse off} {reverse on}cmp" 20030 PRINT"{down}{reverse on}cpx{reverse off} {reverse on}cpy{reverse off} {reverse on}dec{reverse off} {reverse on}dex{reverse off} {reverse on}dey{reverse off} {reverse on}eor{reverse off} {reverse on}inc{reverse off} {reverse on}inx{reverse off} {reverse on}iny" 20040 PRINT"{down}{reverse on}jmp{reverse off} {reverse on}jsr{reverse off} {reverse on}lda{reverse off} {reverse on}ldx{reverse off} {reverse on}ldy{reverse off} {reverse on}lsr{reverse off} {reverse on}nop{reverse off} {reverse on}ora{reverse off} {reverse on}pha" 20050 PRINT"{down}{reverse on}php{reverse off} {reverse on}pla{reverse off} {reverse on}plp{reverse off} {reverse on}rol{reverse off} {reverse on}ror{reverse off} {reverse on}rti{reverse off} {reverse on}sbc{reverse off} {reverse on}sec{reverse off} {reverse on}sed" 20060 PRINT"{down}{reverse on}txa{reverse off} {reverse on}sta{reverse off} {reverse on}stx{reverse off} {reverse on}sty{reverse off} {reverse on}tax{reverse off} {reverse on}tay{reverse off} {reverse on}tya{reverse off} {reverse on}tsx{reverse off} {reverse on}txa" 20070 PRINT"{down}..and {reverse on}txs{reverse off}!":GOSUB63000 20080 ms$="impressive":GOSUB63100 20090 GOSUB63000:RETURN 39000 PRINT"{home}";:FORi=1TO17:PRINTcl$:NEXT:PRINT"{home}";:RETURN 39100 PRINTsd$;:FORi=1TO15:PRINTcl$:NEXT:PRINTsd$;:RETURN 40096 POKEa(7),32:FORtt=1TOpp:NEXT:FORi=7TO1STEP-1:POKEa(i-1),32 40097 POKEa(i),VAL(MID$(n$,i,1))+48:FORtt=1TOpp:NEXT:NEXT:RETURN 40098 POKEa(0),32:FORtt=1TOpp:NEXT:FORi=0TO6:POKEa(i+1),32 40099 POKEa(i),VAL(MID$(n$,i+1,1))+48:FORtt=1TOpp:NEXT:NEXT:POKEa(7),48:RETURN 40110 FORi=0TO7:POKEa(i),160:FORtt=1TOpp:NEXT 40111 POKEa(i),VAL(MID$(n$,i+1,1))+48:NEXT:RETURN 40120 FORi=0TO7:POKEp(i),160:FORtt=1TOpp:NEXT 40121 POKEp(i),VAL(MID$(n$,i+1,1))+48:NEXT:RETURN 40130 FORi=0TO7:POKEx(i),160:FORtt=1TOpp:NEXT 40131 POKEx(i),VAL(MID$(n$,i+1,1))+48:NEXT:RETURN 40140 FORi=0TO7:POKEy(i),160:FORtt=1TOpp:NEXT 40141 POKEy(i),VAL(MID$(n$,i+1,1))+48:NEXT:RETURN 40160 FORi=0TO7:POKEm(i),160:FORtt=1TOpp:NEXT 40161 POKEm(i),VAL(MID$(n$,i+1,1))+48:NEXT:RETURN 41120 FORi=0TO7:POKEp(i),160:FORtt=1TOpp:NEXT 41121 POKEp(i),PEEK(a(i)):NEXT:RETURN 41130 FORi=0TO7:POKEx(i),160:FORtt=1TOpp:NEXT 41131 POKEx(i),PEEK(a(i)):NEXT:RETURN 41140 FORi=0TO7:POKEy(i),160:FORtt=1TOpp:NEXT 41141 POKEy(i),PEEK(a(i)):NEXT:RETURN 41160 FORi=0TO7:POKEm(i),160:FORtt=1TOpp:NEXT 41161 POKEm(i),PEEK(a(i)):NEXT:RETURN 41340 FORi=0TO7:POKEa(i),160:FORtt=1TOpp:NEXT 41341 POKEa(i),PEEK(x(i)):NEXT:RETURN 41360 FORi=0TO7:POKEm(i),160:FORtt=1TOpp:NEXT 41361 POKEm(i),PEEK(x(i)):NEXT:RETURN 41410 FORi=0TO7:POKEa(i),160:FORtt=1TOpp:NEXT 41411 POKEa(i),PEEK(y(i)):NEXT:RETURN 41460 FORi=0TO7:POKEm(i),160:FORtt=1TOpp:NEXT 41461 POKEm(i),PEEK(y(i)):NEXT:RETURN 60000 r$="{cm a}{sh asterisk}{cm r}{sh asterisk}{cm r}{sh asterisk}{cm r}{sh asterisk}{cm r}{sh asterisk}{cm r}{sh asterisk}{cm r}{sh asterisk}{cm r}{sh asterisk}{cm s}{down}{left*17}{sh -}{sh space}{sh -}{sh space}{sh -}{sh space}{sh -}{sh space}{sh -}{sh space}{sh -}{sh space}{sh -}{sh space}{sh -}{sh space}{sh -}{down}" 60001 r$=r$+"{left*17}{cm z}{sh asterisk}{cm e}{sh asterisk}{cm e}{sh asterisk}{cm e}{sh asterisk}{cm e}{sh asterisk}{cm e}{sh asterisk}{cm e}{sh asterisk}{cm e}{sh asterisk}{cm x}" 60002 a$="{home}{down} {reverse on}a{reverse off}{up}"+r$:p$="{home}{down}{right*21}{reverse on}p{reverse off}{up}"+r$ 60003 x$="{home}{down*4} {reverse on}x{reverse off}{up}"+r$:y$="{home}{down*4}{right*21}{reverse on}y{reverse off}{up}"+r$ 60004 m$="{home}{down*7}{right*21}{reverse on}m{reverse off}{up}"+r$ 60005 cr$="{home}{down*6}{cm a}{sh asterisk}{cm s}{down}{left*3}{sh -}{right}{sh -}{down}{left*3}{cm z}{sh asterisk}{cm x}" 60006 cc$="{home}{down} {reverse on}a{reverse off}{sh -}{down}{left*3} {down}{left} {down}{left} {down}{left} {down}{left}{space*3}{down}{left*3}{space*3}{down}{left*3}{space*3}{up}{space*12}" 60007 wd=40:crt=1024:PRINTCHR$(142) 60008 FORi=0TO7:a(i)=crt+wd+3+2*i:p(i)=a(i)+20:x(i)=a(i)+3*wd:y(i)=x(i)+20 60009 m(i)=y(i)+3*wd:NEXT:c=crt+7*wd+1 60010 sd$="{home}{down*9}":cl$="":FORi=1TOwd-1:cl$=cl$+" ":NEXT 60011 bt$="{home}":FORi=1TO24:bt$=bt$+"{down}":NEXT 60012 c$=cr$+"{home}{down}{cm a}{sh asterisk}{cm w}{down}{left*3}{sh -}{down}{left}{sh -}{down}{left}{sh -}{down}{left}{sh -}{down}{left}{cm q}{down}{right*4}{arrow left}carry bit" 60019 ml$="{home}{down*9}{right*27}" 60020 bt$="{home}":FORi=1TO24:bt$=bt$+"{down}":NEXT 60021 pt$="{red}{cm a}{sh asterisk*10}{cm s}{down}{left*12}{sh -}{right*10}{sh -}{down}{left*12}{cm z}{cm r}{sh asterisk*8}{cm r}{cm x}" 60022 pt$=pt$+"{down}{left*13}N{cm t*12}M{down}{left*14}{cm g}{=*12}{cm m}" 60023 pt$=pt$+"{down}{left*14}PO{cm t*10}PO{up*4}{left*12}" 60024 pt$=bt$+"{up*6}{right*26}"+pt$+"{black}" 60025 PRINTCHR$(142) 60099 pp=50 60100 RETURN 63000 PRINTbt$cl$;:FORtt=1TO50:NEXT 63001 PRINTbt$"{reverse on}return{reverse off} to continue";:FORtt=1TO50:NEXT 63002 GETz$:IFz$<>""THEN63002 63003 GETz$:IFz$=""THEN63003 63004 RETURN 63010 PRINTbt$cl$;:FORtt=1TO50:NEXT 63011 PRINTbt$"{cm +*8}{reverse on}return to see it happen{reverse off}{cm +*8}";:FORtt=1TO50:NEXT 63012 GETz$:IFz$<>""THEN63012 63013 GETz$:IFz$=""THEN63013 63014 RETURN 63100 FORt=1TO5:PRINTpt$ms$; 63101 PRINTpt$"{space*10}"; 63102 PRINTpt$ms$;:NEXT 63103 RETURN 63200 GOSUB63000 63201 PRINTsd$;:FORt=1TO15:PRINTcl$:NEXT:PRINTsd$;:RETURN 63300 GOSUB63100:GOSUB63010:RETURN 63400 PRINT"{home}";:FORi=1TO5:PRINTcl$:NEXT:PRINT"{home}";:RETURN 63999 GOSUB60000:PRINT"{clear}":GOTO3000 stop tok64 (bastext 1.0)