start bastext 1025 start tok64 d64-H1nPxr 1 RUN00010 10 GOSUB63100:sn$="00100" 20 POKE53281,15:POKE53280,12:PRINT"{black}":GOSUB55000 100 POKE53281,15:POKE53280,12:PRINT"{black}":PRINT"{clear}{space*11}{reverse on}{blue}micros'n'chips-1" 101 PRINT"{red}{cm a}{sh asterisk*37}{cm s}":GOSUB63100 102 PRINT"{sh -} {reverse on}{blue}{space*9}address decoding{space*10}{red}{reverse off} {sh -}":ms$="ponzotutor" 103 PRINT"{red}{cm z}{sh asterisk*37}{cm x}{black}":GOSUB63200 104 ms$=" welcome! ":GOSUB63200:POKE53280,15 105 PRINT"{home}{down*10}Qnote{down}{left*4}{cm u*4}{up}:hit the @-key at any" 106 PRINT"{down}{space*6}time to return to an":PRINT"{down}{space*6}earlier section{.*3}":GOSUB50000 1000 GOSUB63100:REM micros-1 1001 sn$="01{0*3}" 1005 PRINT"{clear}{down}Qthe {reverse on}heart{reverse off} of a micro is the" 1010 PRINT"{down} {reverse on}m{reverse off}icro {reverse on}p{reverse off}rocessing {reverse on}u{reverse off}nit or {reverse on}mpu{reverse off}." 1015 PRINT"{down} on the commodore 64 it's a 40-pin" 1020 PRINT"{down} chip called a {reverse on*2}6510{reverse off}." 1025 PRINT"{down} {cm a}{sh asterisk*10}{cm s}" 1030 PRINT" {sh -}{reverse on}{space*3}6510{space*3}{reverse off}{sh -} {arrow left}chip" 1035 PRINT" {cm z}{sh asterisk*10}{cm x}" 1036 PRINT"{down}Qon earlier commodore micros":PRINT"{down} it's a {reverse on}6502{reverse off}." 1040 ms$="hit a key!":GOSUB63200:GOSUB50000 1045 PRINT"{clear}{down}Qthe {reverse on}6510{reverse off} can execute" 1050 PRINT"{down} some 56 instructions" 1055 PRINT"{down} such as {reverse on}add{reverse off},{reverse on}subract{reverse off}" 1060 PRINT"{down} etc.etc.(all pretty easy).." 1065 PRINT"{down} each instruction":PRINT"{down} executed is stored" 1070 PRINT"{down} in memory,so the {reverse on}mpu{reverse off}" 1075 PRINT"{down} must be able to {reverse on}read":PRINT"{down} these instructions" 1080 PRINT"{down} from memory.":GOSUB50000 1085 PRINT"{clear}{down}Qthe {reverse on}6510{reverse off} must also" 1090 PRINT"{down} be able to store data" 1095 PRINT"{down} in memory ({reverse on}write{reverse off})." 1100 PRINT"{down} communication with":PRINT"{down} memory is via :" 1105 PRINT"{down} an {reverse on}address bus{reverse off}" 1110 PRINT"{down} and a {reverse on}data bus{reverse off}.{down}":GOSUB50000 1115 PRINT"{cm a}{sh asterisk*4}{cm s}" 1120 PRINT"{sh -}{Q*3} {cm z}{sh asterisk}{cm s}{space*2}{arrow left}bus(?)" 1125 PRINT"{cm z}UI{sh asterisk*3}UI" 1130 PRINT" JK{space*3}JK":FORt=1TO1000:NEXT 1135 PRINT"{clear}{down}Qto 16{down}{left*2}{cm u*2}{up} pins of" 1140 PRINT"{down} the {reverse on}6510{reverse off} are " 1145 PRINT"{down} connected wires":PRINT"{down} called the":PRINT"{down} {reverse on}address bus{reverse off}." 1150 PRINT"{down}Qto another 8{down}{left}{cm u}{up} pins":PRINT"{down} are connected" 1155 PRINT"{down} wires called the" 1160 PRINT"{down} {reverse on}data bus{reverse off}.":GOSUB50000 1165 PRINT"{clear}{down*6}Qthe 'voltage' on" 1170 PRINT"{down} each or these 24" 1175 PRINT"{down} wires may be 'high'" 1180 PRINT"{down} or 'low'{.*3}we'll":PRINT"{down} say {reverse on}1{reverse off} or {reverse on}0{reverse off}.":ms$="hi={reverse on}1{reverse off} lo={reverse on}0{reverse off}" 1185 GOSUB63200:GOSUB50000:GOSUB1455:GOSUB1480:GOSUB50000 1190 PRINT"{clear}{down}Qsince each of 16" 1195 PRINT"{down} {reverse on} address bus{reverse off} wires":PRINT"{down} may be {reverse on}1{reverse off} or {reverse on}0{reverse off}" 1200 PRINT"{down} there are 2^16=65536" 1205 PRINT"{down} possible 'addresses'":PRINT"{down}{sh space}ranging from" 1210 PRINT"{down} 0 to 65535." 1215 PRINT"{down} 2^10={reverse on}1k{reverse off} so we have" 1220 PRINT"{down} 2^16={reverse on}64k{reverse off} addresses" 1225 PRINT"{down} with a 16 bit {reverse on}bus{reverse off}.":ms$="{space*2}a c64!":GOSUB63200:GOSUB50000 1230 PRINT"{clear}{down*4}Qsimilarly there are" 1235 PRINT"{down} 2^8=256 possible" 1240 PRINT"{down} {reverse on}1{reverse off}/{reverse on}0{reverse off} combinations" 1245 PRINT"{down} on the 8 bit {reverse on}data bus" 1250 PRINT"{down} so any number: 0-255" 1255 PRINT"{down} may be on this bus.":ms$="data=0-255":GOSUB63200:GOSUB50000 1260 PRINT"{clear}{down}Qsuppose we perform":PRINT"{down} {reverse on}poke m,n" 1265 PRINT"{down} then:0<=m<=65535" 1270 PRINT"{down} and{space*2}0<=n<=255.":PRINT"{down}Qconsider:" 1275 PRINT"{down} {reverse on}poke 1234,5":PRINT"{down} the {reverse on}6510{reverse off} puts" 1280 PRINT"{down} the number '1234'" 1285 PRINT"{down} on the {reverse on}address bus" 1290 PRINT"{down} and the number '5'" 1295 PRINT"{down} on the {reverse on}data bus{reverse off}.":GOSUB50000 1300 PRINT"{clear}{down*5}Qthese numbers must" 1305 PRINT"{down} of course be in" 1310 PRINT"{down} {reverse on}binary{reverse off}!!":GOSUB50000:GOSUB1455 1315 a$="{0*5}10011010010":d$="{0*5}101":GOSUB1515:GOSUB1525:GOSUB50000 1320 PRINT"{clear}{down*5}Qwhen executing:" 1325 PRINT"{down} {reverse on}poke 1234,5":PRINT"{down} the {reverse on}6510{reverse off} expects" 1330 PRINT"{down} the memory at loc'n" 1335 PRINT"{down} '1234' to accept":PRINT"{down} the number '5'" 1340 PRINT"{down} which is on the":PRINT"{down} {reverse on}data bus{reverse off}!":GOSUB50000 1341 t$="memory":GOSUB63000 1345 PRINT"{down}Q'memory' in a micro" 1350 PRINT"{down} is just more {reverse on}chips{reverse off}!" 1355 PRINT"{down} they come in various" 1360 PRINT"{down} sizes but we suppose" 1365 PRINT"{down} our memory chips each" 1370 PRINT"{down} contain {reverse on}2k{reverse off} bytes." 1375 PRINT"{down} (each {reverse on}byte{reverse off} being" 1380 PRINT"{down} 8 binary {reverse on}bits{reverse off}).":GOSUB50000 1385 PRINT"{clear}{down}Qone{down}{left*3}{cm u*3}{up} of these memory" 1390 PRINT"{down} chips should accept" 1395 PRINT"{down} {reverse on}data{reverse off} from the {reverse on}bus{reverse off}" 1400 PRINT"{down} when the {reverse on}address{reverse off} is" 1405 PRINT"{down} 0 to 2047, and another{down}{left*7}{cm u*7}{up}" 1410 PRINT"{down} chip when the {reverse on}address" 1415 PRINT"{down} is from 2048 to 4096," 1420 PRINT"{down} and another{down}{left*7}{cm u*7}{up}" 1425 PRINT"{down} when the {reverse on}address" 1430 PRINT"{down} is from 4096 to 6143," 1435 PRINT"{down} etc.etc.etc.":ms$=" 2k=2048":GOSUB63200:GOSUB50000 1440 t$="{space*5}how?{space*5}":GOSUB63000:ms$="i give up!":GOSUB63200:GOSUB50000 1445 GOTO2000 1455 PRINT"{clear}";:FORi=1TO16 1460 PRINT"{sh -}{reverse on}{space*3}{reverse off}{cm q}{sh asterisk*2} {sh asterisk} {sh asterisk} {sh asterisk}":NEXT 1465 FORi=1TO7 1470 PRINT"{sh -}{reverse on}{space*3}{reverse off}{cm q}{sh asterisk*6}":NEXT 1471 PRINT"{sh -}{reverse on}{space*3}{reverse off}{cm q}{sh asterisk*6}{home}" 1475 PRINT"{home}{down*8}{right*2}6{down}{left}5{down}{left}1{down}{left}0":RETURN 1480 PRINT"{home}{down*8}{right*13}16 wire" 1485 PRINT"{down}{right*13}{reverse on}address" 1490 PRINT"{down}{right*13}{space*2}bus" 1495 PRINT"{down*4}{right*12}8 wire" 1500 PRINT"{down}{right*12} {reverse on}data" 1505 PRINT"{down}{right*12} bus" 1510 PRINT"{home}{down*8}{right*2}6{down}{left}5{down}{left}1{down}{left}0":RETURN 1515 PRINT"{home}{right*13}"; 1520 FORi=1TOLEN(a$):PRINTMID$(a$,i,1)"{down}{left}";:NEXT:RETURN 1525 PRINT"{home}{down*16}{right*11}"; 1530 FORi=1TOLEN(d$):PRINTMID$(d$,i,1)"{down}{left}";:NEXT:RETURN 1545 RETURN 2000 GOSUB63100:REM micros-2 2001 sn$="02{0*3}":t$="address decoding":GOSUB63000 2005 PRINT"{down}Qif our memory is" 2010 PRINT"{down} in 2k chips,then" 2015 PRINT"{down} each chip will" 2020 PRINT"{down} have an associated" 2025 PRINT"{down} {reverse on}address decoder" 2030 PRINT"{down} circuit which will" 2035 PRINT"{down} constantly check" 2040 PRINT"{down} the {reverse on}address bus{reverse off}" 2045 PRINT"{down} to see if the {reverse on}6510" 2050 PRINT"{down} wants to talk to {reverse on}it{reverse off}!":GOSUB50000 2055 PRINT"{clear}{down}Qfor our example:" 2060 PRINT"{down} {reverse on}poke 1234,5" 2065 PRINT"{down} the very first{down}{left*5}{cm u*5}{up} 2k" 2070 PRINT"{down} chip should respond." 2075 PRINT"{down} (any address from" 2080 PRINT"{down} 0 to 2047..remember?)." 2085 PRINT"{down} this chip's {reverse on}decoder{reverse off}" 2090 PRINT"{down} must recognize that" 2095 PRINT"{down} '1234' lies in the" 2100 PRINT"{down} range (0,2047) and" 2105 PRINT"{down} {reverse on}tell the memory chip{reverse off}." 2110 ms$="wake up!":GOSUB63200:GOSUB50000:GOSUB2440:GOSUB50000 2115 PRINT"{clear}{down}Qif the {reverse on}address{reverse off} is" 2120 PRINT"{down} in (2048,4095) then" 2125 PRINT"{down} the next{down}{left*4}{cm u*4}{up} {reverse on}decoder" 2130 PRINT"{down} must send a signal" 2135 PRINT"{down} to the 2nd{down}{left*3}{cm u*3}{up} chip." 2140 PRINT"{down} etc.etc." 2145 PRINT"{down}Qthese {reverse on}chip select{reverse off}" 2150 PRINT"{down} signals are usually" 2155 PRINT"{down} '0'. how are" 2160 PRINT"{down} they generated??":ms$="i give up!":GOSUB63200:GOSUB50000 2165 t$="gates 'n' such":GOSUB63000 2170 PRINT"{down*3}Qthere are three" 2175 PRINT"{down} (among others)" 2180 PRINT"{down} standard electronic" 2185 PRINT"{down} circuits called" 2190 PRINT"{down}{space*5}{reverse on}gates{reverse off}." 2195 PRINT"{down}Qeach accepts one or" 2200 PRINT"{down} more input wires" 2205 PRINT"{down} and delivers one" 2210 PRINT"{down} output signal." 2215 GOSUB50000 2220 t$="and gates":GOSUB63000 2225 PRINT"{down*2}Qoutput=1 only if" 2230 PRINT"{down} x=1 and{down}{left*3}{cm u*3}{up} y=1." 2235 GOSUB2550:PRINT"{down*3}{right*4}"ag$ 2240 PRINT"{down*4}Qthis is a" 2245 PRINT"{down} 2-input {reverse on}and{reverse off} gate." 2250 PRINT" {cm u*7}":ms$=" x {reverse on}and{reverse off} y":GOSUB63200:GOSUB50000 2255 PRINT"{clear}{down*5}Qin an {reverse on}and{reverse off} gate" 2260 PRINT"{down} output=1 only{down}{left*4}{cm u*4}" 2265 PRINT" if {reverse on}all{reverse off} inputs=1.":GOSUB50000 2270 t$="or gates":GOSUB63000 2275 PRINT"{down*2}Qoutput=1 if" 2280 PRINT"{down} x=1 or{down}{left*2}{cm u*2}{up} y=1." 2285 PRINT"{down*3}{right*4}"og$ 2290 PRINT"{down*4}Qthis is a " 2295 PRINT"{down} 2-input {reverse on}or{reverse off} gate." 2300 PRINT" {cm u*7}":ms$=" x {reverse on}or{reverse off} y":GOSUB63200:GOSUB50000 2305 PRINT"{clear}{down*5}Qin an {reverse on}or{reverse off} gate" 2310 PRINT"{down} output=0 only{down}{left*4}{cm u*4}" 2315 PRINT" if {reverse on}all{reverse off} inputs=0.":GOSUB50000 2320 t$="not gate=inverter":GOSUB63000 2325 PRINT"{down*2}Qoutput=1 if x=0." 2330 PRINT"{down*2} output=0 if x=1." 2335 PRINT"{down*3}{right*4}"ng$ 2340 PRINT"{down}Qthe output is always" 2345 PRINT"{down} the 'complement' of" 2350 PRINT"{down} the input.":ms$=" {reverse on}not{reverse off} x":GOSUB63200:GOSUB50000 2355 PRINT"{clear}{down}Qa typical chip may" 2360 PRINT"{down} contain several gates." 2370 PRINT"{down} the '7400' is a" 2375 PRINT"{down} 14 pin chip with" 2380 PRINT"{down} four 2-input {reverse on}nand{reverse off}s." 2385 PRINT"{down} (a {reverse on}nand{reverse off} is an" 2390 PRINT"{down} {reverse on}and{reverse off} followed by" 2395 PRINT"{down} a {reverse on}not{reverse off}{.*3}an" 2400 PRINT"{down} 'inverted and').":ms$="nand gate!":GOSUB63200:GOSUB50000 2405 PRINT"{clear}{down}Qto build a {reverse on}decoder{reverse off}" 2410 PRINT"{down} to recognize when the" 2415 PRINT"{down} {reverse on}address bus{reverse off} has an" 2420 PRINT"{down} address in (0,2047)" 2425 PRINT"{down} ..and provide a" 2430 PRINT"{down} {reverse on}chip select{reverse off} to a" 2435 PRINT"{down} memory chip{.*3}":PRINT"{down*2}{.*3}how??{.*3}":ms$="how? how?" 2436 GOSUB63200:GOSUB50000:GOTO3000 2440 PRINT"{clear} {sh asterisk*2}Q{sh asterisk*11}" 2441 PRINT" {sh asterisk*2}{sh +}Q{sh asterisk*9}" 2442 PRINT" {sh asterisk*2}{sh +*2}Q{sh asterisk*8}" 2443 PRINT" {sh asterisk*2}{sh +*3}Q{sh asterisk*7}" 2444 PRINT" {sh asterisk*2}{sh +*4}Q{sh asterisk*6}" 2445 PRINT" ..{sh -*4}{.*7}" 2446 PRINT" {sh asterisk*2}{sh +*5}{sh asterisk*2}Q{sh asterisk*3}" 2447 PRINT"{space*2}{cm a}{cm e*8}{cm s}" 2448 PRINT"{space*2}{sh -}decoder1{sh -}" 2449 PRINT"{space*2}{cm z}{sh asterisk*4}{cm r}{sh asterisk*3}{cm x}" 2450 PRINT"{space*2}{cm a}{sh asterisk*4}{cm e}{sh asterisk*3}{cm s}" 2451 PRINT"{space*2}{sh -}memory 1{sh -}" 2452 PRINT"{space*2}{cm z}{cm r*8}{cm x}" 2453 PRINT" {sh asterisk*2}Q{sh +*7}{sh asterisk*3}" 2454 PRINT" {sh asterisk*3}Q{sh +*6}{sh asterisk*3}" 2455 PRINT" {sh asterisk*4}Q{sh +*5}{sh asterisk*3}" 2456 PRINT" {sh asterisk*5}Q{sh +*4}{sh asterisk*3}" 2457 PRINT" {sh asterisk*6}Q{sh +*3}{sh asterisk*3}" 2458 PRINT" {sh asterisk*7}Q{sh +*2}{sh asterisk*3}" 2459 PRINT" {sh asterisk*8}Q{sh +}{sh asterisk*3}" 2460 PRINT" {sh asterisk*9}Q{sh asterisk*3}" 2465 s$="{right*14}" 2470 ms$="{space*2}first":GOSUB63200:GOSUB50000 2500 PRINT"{home}"s$"{sh asterisk}Q{sh asterisk*11}" 2501 PRINTs$"{sh asterisk}{sh +}Q{sh asterisk*9}" 2502 PRINTs$"{sh asterisk}{sh +*2}Q{sh asterisk*8}{reverse on}address" 2503 PRINTs$"{sh asterisk}{sh +*3}Q{sh asterisk*7}{reverse on}bus{space*4}" 2504 PRINTs$"{sh asterisk}{sh +*4}Q{sh asterisk*6}" 2505 PRINTs$".{sh -*4}{.*8}" 2506 PRINTs$"{sh asterisk}{sh +*5}{sh asterisk*2}Q{sh asterisk*3}" 2507 PRINTs$"{cm a}{cm e*8}{cm s}" 2508 PRINTs$"{sh -}decoder2{sh -}" 2509 PRINTs$"{cm z}{sh asterisk*4}{cm r}{sh asterisk*3}{cm x}" 2510 PRINTs$"{cm a}{sh asterisk*4}{cm e}{sh asterisk*3}{cm s}" 2511 PRINTs$"{sh -}memory 2{sh -}" 2512 PRINTs$"{cm z}{cm r*8}{cm x}" 2513 PRINTs$"{sh asterisk}Q{sh +*7}{sh asterisk*3}" 2514 PRINTs$"{sh asterisk*2}Q{sh +*6}{sh asterisk*3}" 2515 PRINTs$"{sh asterisk*3}Q{sh +*5}{sh asterisk*3}" 2516 PRINTs$"{sh asterisk*4}Q{sh +*4}{sh asterisk*3}{reverse on}data" 2517 PRINTs$"{sh asterisk*5}Q{sh +*3}{sh asterisk*3}{reverse on}bus " 2518 PRINTs$"{sh asterisk*6}Q{sh +*2}{sh asterisk*3}" 2519 PRINTs$"{sh asterisk*7}Q{sh +}{sh asterisk*3}" 2520 PRINTs$"{sh asterisk*8}Q{sh asterisk*3}" 2525 ms$="{space*3}next":GOSUB63200:GOSUB50000:ms$="and so on":GOSUB63200 2545 RETURN 2550 ag$="{cm a}{sh asterisk*4}{cm s}{down}{left*8}x{sh asterisk}{cm w}{reverse on}and {reverse off}{sh -}{down}{left*8}y{sh asterisk}{cm w}{reverse on}gate{reverse off}{cm q}{sh asterisk*2}output" 2555 ag$=ag$+"{down}{left*14}{cm z}{sh asterisk*4}{cm x}" 2560 og$="{cm a}{sh asterisk*4}{cm s}{down}{left*8}x{sh asterisk}{cm w}{reverse on} or {reverse off}{sh -}{down}{left*8}y{sh asterisk}{cm w}{reverse on}gate{reverse off}{cm q}{sh asterisk*2}output" 2565 og$=og$+"{down}{left*14}{cm z}{sh asterisk*4}{cm x}" 2570 ng$="{cm a}{sh asterisk*4}{cm s}{down}{left*8}{space*2}{sh -}{reverse on}not {reverse off}{sh -}{down}{left*8}x{sh asterisk}{cm w}{reverse on}gate{reverse off}{cm q}{sh asterisk*2}output" 2575 ng$=ng$+"{down}{left*14}{cm z}{sh asterisk*4}{cm x}" 2580 RETURN 2595 RETURN 3000 GOSUB63100:REM micros-3 3001 sn$="03{0*3}":t$="decoding":GOSUB63000 3030 PRINT" {sh asterisk*6}Q{sh asterisk}" 3035 PRINT" {sh asterisk*5}Q{sh +}{sh asterisk}" 3040 PRINT" {sh asterisk*4}Q{sh +*2}{sh asterisk}" 3045 PRINT" {sh asterisk*3}Q{sh +*3}{sh asterisk}" 3050 PRINT" {sh asterisk*2}Q{sh +*4}{sh asterisk}" 3055 PRINT"{space*3}{sh -*5} {cm a}{sh asterisk*2}{cm s}" 3060 PRINT"{space*3}{sh -*4}{cm z}{sh asterisk}{cm w}{space*2}{sh -}" 3065 PRINT"{space*3}{sh -*3}{cm z}{sh asterisk*2}{cm w}{space*2}{sh -}" 3070 PRINT"{space*3}{sh -*2}{cm z}{sh asterisk*3}{cm w}{reverse on}or{reverse off}{cm q}{sh asterisk}chip" 3075 PRINT"{space*3}{sh -}{cm z}{sh asterisk*4}{cm w}{space*2}{sh -} select" 3080 PRINT"{space*3}{cm z}{sh asterisk*5}{cm w}{space*2}{sh -}" 3085 PRINT"{space*9}{cm z}{sh asterisk*2}{cm x}" 3090 PRINT"{down}Qa 5-input {reverse on}or{reverse off} gate" 3095 PRINT"{down} connected to the" 3100 PRINT"{down} top 5 bits of" 3105 PRINT"{down} the address bus.." 3110 GOSUB50000 3115 PRINT"{clear}{down} 0{sh asterisk*5}Q{sh asterisk}" 3120 PRINT" 0{sh asterisk*4}Q{sh +}{sh asterisk}" 3125 PRINT" 0{sh asterisk*3}Q{sh +*2}{sh asterisk}" 3130 PRINT" 0{sh asterisk*2}Q{sh +*3}{sh asterisk}" 3135 PRINT" 0{sh asterisk}Q{sh +*4}{sh asterisk}" 3140 PRINT"{space*3}{sh -*5} {cm a}{sh asterisk*2}{cm s}" 3145 PRINT"{space*3}{sh -*4}{cm z}{sh asterisk}{cm w}{space*2}{sh -}" 3150 PRINT"{space*3}{sh -*3}{cm z}{sh asterisk*2}{cm w}{space*2}{sh -}" 3155 PRINT"{space*3}{sh -*2}{cm z}{sh asterisk*3}{cm w}{reverse on}or{reverse off}{cm q}{sh asterisk}{reverse on}0" 3160 PRINT"{space*3}{sh -}{cm z}{sh asterisk*4}{cm w}{space*2}{sh -}" 3165 PRINT"{space*3}{cm z}{sh asterisk*5}{cm w}{space*2}{sh -}" 3170 PRINT"{space*9}{cm z}{sh asterisk*2}{cm x}" 3175 PRINT"{down} ..will give a {reverse on}0" 3180 PRINT"{down} output only if" 3185 PRINT"{down} all{down}{left*3}{cm u*3}{up} address bits={reverse on}0":ms$="0{reverse on}or{reverse off}0{reverse on}or{reverse off}0=0" 3186 GOSUB63200:GOSUB50000 3190 PRINT"{clear}{down}Qnote that the" 3195 PRINT"{down} first 2k memory" 3200 PRINT"{down} should respond to" 3205 PRINT"{down} addresses from" 3210 PRINT"{down} {0*4} {0*4} {0*4} {0*4}" 3215 PRINT"{down} to" 3220 PRINT"{down} {0*4} 0{1*3} {1*4} {1*4}" 3225 PRINT"{down} (in binary)." 3230 PRINT"{down} see! the top 5" 3235 PRINT"{down} bits are all '0'!":GOSUB50000 3240 PRINT"{clear}{down}hence:" 3245 PRINT" {sh asterisk*6}Q{sh asterisk}" 3250 PRINT" {sh asterisk*5}Q{sh +}{sh asterisk}" 3255 PRINT" {sh asterisk*4}Q{sh +*2}{sh asterisk}" 3260 PRINT" {sh asterisk*3}Q{sh +*3}{sh asterisk}" 3265 PRINT" {sh asterisk*2}Q{sh +*4}{sh asterisk}" 3270 PRINT"{space*3}{sh -*5} {cm a}{sh asterisk*2}{cm s}" 3275 PRINT"{space*3}{sh -*4}{cm z}{sh asterisk}{cm w}{space*2}{sh -}" 3280 PRINT"{space*3}{sh -*3}{cm z}{sh asterisk*2}{cm w}{space*2}{sh -}" 3285 PRINT"{space*3}{sh -*2}{cm z}{sh asterisk*3}{cm w}{reverse on}or{reverse off}{cm q}{sh asterisk}chip" 3290 PRINT"{space*3}{sh -}{cm z}{sh asterisk*4}{cm w}{space*2}{sh -} select" 3295 PRINT"{space*3}{cm z}{sh asterisk*5}{cm w}{space*2}{sh -}" 3300 PRINT"{space*9}{cm z}{sh asterisk*2}{cm x}" 3305 PRINT"{down} will {reverse on}decode{reverse off} for" 3310 PRINT"{down} the first 2k of" 3315 PRINT"{down} memory!":ms$="62k to go!":GOSUB63200:GOSUB50000 3320 PRINT"{clear}{down}Qthe next 2k bytes" 3325 PRINT"{down} go from" 3330 PRINT"{down} {0*4} 1{0*3} {0*4} {0*4}" 3335 PRINT"{down} to" 3340 PRINT"{down} {0*4} {1*4} {1*4} {1*4}" 3345 PRINT"{down}Qa workable {reverse on}decoder" 3350 PRINT"{down} might be{.*3}":GOSUB50000 3355 PRINT"{clear}{down} {sh asterisk*6}Q{sh asterisk}" 3360 PRINT" {sh asterisk*5}Q{sh +}{sh asterisk}" 3365 PRINT" {sh asterisk*4}Q{sh +*2}{sh asterisk}" 3370 PRINT" {sh asterisk*3}Q{sh +*3}{sh asterisk}" 3375 PRINT" {sh asterisk*2}Q{sh +*4}{sh asterisk}" 3380 PRINT"{space*3}{sh -*5} {cm a}{sh asterisk*2}{cm s}" 3385 PRINT"{space*3}{sh -*4}{cm z}{sh asterisk}{cm w}{space*2}{sh -}" 3390 PRINT"{space*3}{sh -*3}{cm z}{sh asterisk*2}{cm w}{space*2}{sh -}" 3395 PRINT"{space*3}{sh -*2}{cm z}{sh asterisk*3}{cm w}{reverse on}or{reverse off}{cm q}{sh asterisk}chip" 3400 PRINT"{space*3}{sh -}{cm z}{sh asterisk*4}{cm w}{space*2}{sh -} select" 3405 PRINT"{space*3}{sh -}{cm a}{sh asterisk*3}{cm s}{sh -}{space*2}{sh -}" 3410 PRINT"{space*3}{cm z}{cm w}{reverse on}not{reverse off}{cm q}{cm w}{space*2}{sh -}" 3415 PRINT"{space*4}{cm z}{sh asterisk*3}{cm x}{cm z}{sh asterisk*2}{cm x}" 3420 ms$="and so on":GOSUB63200:GOSUB50000 3425 PRINT"{clear}{down}Qnow let's return to" 3430 PRINT"{down} {reverse on}poke1234,5{reverse off}." 3435 PRINT"{down} the {reverse on}6510{reverse off} will put" 3440 PRINT"{down} '1234' on the" 3445 PRINT"{down} {reverse on}address bus{reverse off} and" 3450 PRINT"{down} '5' on the {reverse on}data bus" 3455 PRINT"{down} (in binary,of course)" 3460 PRINT"{down} and the first {reverse on}decoder" 3465 PRINT"{down} will 'wake up' the" 3470 PRINT"{down} first 2k memory chip.":GOSUB50000 3475 PRINT"{clear}{down}Qif we execute" 3480 PRINT"{down} {reverse on}x=peek(1234){reverse off}" 3485 PRINT"{down} then the {reverse on}6510{reverse off}" 3490 PRINT"{down} will also{down}{left*4}{cm u*4}{up} put" 3495 PRINT"{down} address '1234' on" 3500 PRINT"{down} the bus{.*4}and the" 3505 PRINT"{down} same 2k chip will" 3510 PRINT"{down} respond.":GOSUB50000 3515 PRINT"{clear}{down}Qfor {reverse on}poke 1234,5" 3520 PRINT"{down} we want to {reverse on}write" 3525 PRINT"{down} to memory." 3530 PRINT"{down} for {reverse on}x=peek(1234)" 3535 PRINT"{down} we want to {reverse on}read" 3540 PRINT"{down} from memory." 3545 PRINT"{down} how does the memory" 3550 PRINT"{down} chip know whether" 3554 PRINT"{down} the {reverse on}6510{reverse off} wants" 3555 PRINT"{down} to {reverse on}read{reverse off} or {reverse on}write{reverse off}?":GOSUB50000 3560 PRINT"{clear}{down}Qfor {reverse on}read{reverse off},the chip{down}{left*4}{cm u*4}" 3565 PRINT" must put a number" 3570 PRINT"{down} on the {reverse on}data bus{reverse off}." 3575 PRINT"{down}Qfor {reverse on}write{reverse off},the" 3580 PRINT"{down} 6510{down}{left*4}{cm u*4}{up} puts the byte" 3585 PRINT"{down} on the {reverse on}data bus{reverse off}!" 3590 PRINT"{down}Qfortunately, the" 3595 PRINT"{down} {reverse on}6510{reverse off} provides a" 3600 PRINT"{down} {reverse on}read/write{reverse off} signal" 3605 PRINT"{down} from one of it's" 3610 PRINT"{down} 40 pins.":GOSUB50000 3615 GOSUB3640:PRINT"{up*10}{right*11}{cm q}{arrow left}{sh asterisk*2}";:FORi=1TO10:PRINT"r/w{left*3}"; 3620 FORj=1TO100:NEXT:PRINT"{reverse on}r/w{reverse off}{left*3}";:FORj=1TO100:NEXT:NEXT 3625 ms$="very nice!":GOSUB63200:GOSUB50000 3630 GOTO4000 3640 PRINT"{clear}{down} {sh asterisk*2}Q{sh asterisk*11}" 3645 PRINT" {sh asterisk*2}{sh +}Q{sh asterisk*9}" 3650 PRINT" {sh asterisk*2}{sh +*2}Q{sh asterisk*8}{reverse on}address" 3655 PRINT" {sh asterisk*2}{sh +*3}Q{sh asterisk*7}{reverse on}bus{space*4}" 3660 PRINT" {sh asterisk*2}{sh +*4}Q{sh asterisk*6}" 3665 PRINT" ..{sh -*4}{.*8}" 3670 PRINT" {sh asterisk*2}{sh +*5}{sh asterisk*2}Q{sh asterisk*3}" 3675 PRINT"{space*2}{cm a}{cm e*8}{cm s}" 3680 PRINT"{space*2}{sh -}decoder1{sh -}" 3685 PRINT"{space*2}{cm z}{sh asterisk*4}{cm r}{sh asterisk*3}{cm x}" 3690 PRINT"{space*2}{cm a}{sh asterisk*4}{cm e}{sh asterisk*3}{cm s}" 3695 PRINT"{space*2}{sh -}memory 1{sh -}" 3700 PRINT"{space*2}{cm z}{cm r*8}{cm x}" 3705 PRINT" {sh asterisk*2}Q{sh +*7}{sh asterisk*3}" 3710 PRINT" {sh asterisk*3}Q{sh +*6}{sh asterisk*3}" 3715 PRINT" {sh asterisk*4}Q{sh +*5}{sh asterisk*3}" 3720 PRINT" {sh asterisk*5}Q{sh +*4}{sh asterisk*3}{reverse on}data" 3725 PRINT" {sh asterisk*6}Q{sh +*3}{sh asterisk*3}{reverse on}bus " 3730 PRINT" {sh asterisk*7}Q{sh +*2}{sh asterisk*3}" 3735 PRINT" {sh asterisk*8}Q{sh +}{sh asterisk*3}" 3740 PRINT" {sh asterisk*9}Q{sh asterisk*3}" 3745 RETURN 3760 RETURN 4000 GOSUB63100:REM micros-4 4001 sn$="04{0*3}":t$="poke 1234,5":GOSUB63000 4015 PRINT"{down}1:{reverse on}6510{reverse off} puts {reverse on}1234{reverse off} on" 4020 PRINT"{down}{space*2}{reverse on}address bus{reverse off}." 4025 PRINT"{down}2:{reverse on}6510{reverse off} puts {reverse on}5{reverse off} on" 4030 PRINT"{down}{space*3}{reverse on}data bus{reverse off}." 4035 PRINT"{down}3:{reverse on}6510{reverse off} sets r/w=0" 4040 PRINT"{down}{space*3}(meaning {reverse on}write{reverse off})." 4045 PRINT"{down}4:{reverse on}memory{reverse off} takes byte" 4050 PRINT"{down}{space*3}off {reverse on}data bus{reverse off}.":GOSUB50000:ms$="{space*2}{reverse on}write{reverse off}":GOSUB63300 4055 t$="x=peek(1234)":GOSUB63000 4060 PRINT"{down}1:{reverse on}6510{reverse off} puts {reverse on}1234{reverse off} on" 4065 PRINT"{down}{space*2}{reverse on}address bus{reverse off}." 4070 PRINT"{down}2:{reverse on}6510{reverse off} sets r/w=1" 4075 PRINT"{down}{space*3}(meaning {reverse on}read{reverse off})." 4080 PRINT"{down}3:{reverse on}memory{reverse off} puts byte" 4085 PRINT"{down}{space*3}on {reverse on}data bus{reverse off}." 4090 PRINT"{down}4:{reverse on}6510{reverse off} takes byte" 4095 PRINT"{down}{space*3}off {reverse on}data bus{reverse off}.":GOSUB50000:ms$="{space*3}{reverse on}read{reverse off}":GOSUB63300 4100 PRINT"{clear}{down*4}Qnote that for 2k" 4105 PRINT"{down} memory chips, only" 4110 PRINT"{down} the top 5 bits on" 4115 PRINT"{down} the {reverse on}address bus" 4120 PRINT"{down} go to the {reverse on}decoder{reverse off}." 4125 PRINT"{down} where do the remaining" 4130 PRINT"{down} 11 bits go ?":GOSUB50000 4135 PRINT"{clear}{down}Qsince 11 bits have" 4140 PRINT"{down} 2^11=2048=2k" 4145 PRINT"{down} possible 1/0" 4150 PRINT"{down} states, these 11" 4155 PRINT"{down} bits are precisely" 4160 PRINT"{down} the number required" 4165 PRINT"{down} to identify one of" 4170 PRINT"{down} the 2048 internal" 4175 PRINT"{down} memory locations" 4180 PRINT"{down} in the chip itself!":GOSUB50000:ms$="how nice!":GOSUB63300 4185 PRINT"{clear}{down*8}Qso{.*4}these 11" 4190 PRINT"{down} bits go directly to" 4195 PRINT"{down} the 2k memory chip.":GOSUB50000:GOSUB4470:GOSUB50000 4200 PRINT"{clear}{down*4}Qhow long does the" 4205 PRINT"{down} {reverse on}6510{reverse off} keep the " 4210 PRINT"{down} address (or data)" 4215 PRINT"{down} on the busses?":GOSUB50000 4220 PRINT"{clear}{down*4}Qwhile the {reverse on}6510{reverse off}" 4225 PRINT"{down} is changing from" 4230 PRINT"{down} one address to" 4235 PRINT"{down} another, what is" 4240 PRINT"{down} to prevent some" 4245 PRINT"{down} decoder from " 4250 PRINT"{down} responding to" 4255 PRINT"{down} an extraneous" 4260 PRINT"{down} intermediate address?":GOSUB50000 4265 PRINT"{clear}{down}Qfortunately the {reverse on}6510" 4270 PRINT"{down} provides a" 4275 PRINT"{down} {reverse on}ready-set-go" 4280 PRINT"{down} signal from one" 4285 PRINT"{down} of it's 40 pins." 4290 PRINT"{down} it's called the 4295 PRINT"{down} {reverse on}phase 2 clock{reverse off}." 4300 PRINT"{down}Qonly when the clock" 4305 PRINT"{down} signal={reverse on}1{reverse off} will" 4310 PRINT"{down} the busses have" 4315 PRINT"{down} valid data.":GOSUB50000 4320 PRINT"{clear}{down*4}Qhence the {reverse on}decoder" 4325 PRINT"{down} must not generate a" 4330 PRINT"{down} {reverse on}chip select{reverse off}, even" 4335 PRINT"{down} if the address is ok," 4340 PRINT"{down} until the clock='1'." 4345 ms$="tick {reverse on}tock{reverse off}":GOSUB63200:GOSUB50000 4350 PRINT"{clear}{down} {sh asterisk*6}Q{sh asterisk}" 4355 PRINT" {sh asterisk*5}Q{sh +}{sh asterisk}" 4360 PRINT" {sh asterisk*4}Q{sh +*2}{sh asterisk}" 4365 PRINT" {sh asterisk*3}Q{sh +*3}{sh asterisk}" 4370 PRINT" {sh asterisk*2}Q{sh +*4}{sh asterisk}" 4375 PRINT"{space*3}{sh -*5}{space*4}{cm a}{sh asterisk*2}{cm s}" 4380 PRINT"{space*3}{sh -*4}{cm z}{sh asterisk*4}{cm w}{space*2}{sh -}" 4385 PRINT"{space*3}{sh -*3}{cm z}{sh asterisk*5}{cm w}{space*2}{sh -}" 4390 PRINT"{space*3}{sh -*2}{cm z}{sh asterisk*6}{cm w}{reverse on}or{reverse off}{cm q}{sh asterisk}chip" 4395 PRINT"{space*3}{sh -}{cm z}{sh asterisk*7}{cm w}{space*2}{sh -} select" 4400 PRINT"{space*3}{cm z}{sh asterisk*8}{cm w}{space*2}{sh -}" 4410 PRINT"{space*7}{cm a}{sh asterisk*3}{cm s}{sh -}{space*2}{sh -}" 4415 PRINT" clock{sh asterisk}{cm w}{reverse on}not{reverse off}{cm q}{cm w}{space*2}{sh -}" 4420 PRINT"{space*7}{cm z}{sh asterisk*3}{cm x}{cm z}{sh asterisk*2}{cm x}" 4425 PRINT"{down}Qthis takes care of it!" 4430 PRINT"{down} chip select=0 only if" 4435 PRINT"{down} top 5={reverse on}0{reverse off} and{down}{left*3}{cm u*3}{up} clock={reverse on}1":GOSUB50000 4440 PRINT"{clear}{down*4}Qand the phase 2" 4445 PRINT"{down} clock oscillates" 4450 PRINT"{down} between '0' and '1'" 4455 PRINT"{down} at a rate of" 4460 PRINT"{down}{right}1 megahertz!":PRINT"{down} (1 million times each second).":GOSUB50000 4465 GOTO5000 4470 PRINT"{clear}{down} {sh asterisk*2}Q{sh asterisk*11}" 4475 PRINT" {sh asterisk*2}{sh +}Q{sh asterisk*9}" 4480 PRINT" {sh asterisk*2}{sh +*2}Q{sh asterisk*8}{reverse on}address" 4485 PRINT" {sh asterisk*2}{sh +*3}Q{sh asterisk*7}{reverse on}bus{space*4}" 4490 PRINT" {sh asterisk*2}{sh +*4}Q{sh asterisk*6}" 4495 PRINT" {sh asterisk*2}{sh +*5}{sh asterisk*5}Q{sh asterisk*3}" 4500 PRINT" ..{sh -*5}{.*5}{sh -}{.*3}" 4505 PRINT" {sh asterisk*2}{sh +*5}{sh asterisk*5}{sh +*2}{sh asterisk}Q" 4510 PRINT"{space*2}{cm a}{cm e*5}{sh asterisk*3}{cm s} {sh -*2}.{sh -}" 4515 PRINT"{space*2}{sh -}decoder1{sh -} {sh -*2}.{sh -}" 4520 PRINT"{space*2}{cm z}{sh asterisk*4}{cm r}{sh asterisk*3}{cm x} {sh -*2}.{sh -}{arrow left}11" 4525 PRINT" r/w{sh asterisk}{cm s} {sh -}{space*5}{sh -*2}.{sh -}wires" 4530 PRINT"{space*2}{cm a}{sh asterisk*2}{cm e}{sh asterisk}{cm e}{sh asterisk*3}{cm s} {sh -*2}.{sh -}" 4535 PRINT"{space*2}{sh -}memory 1{cm q}{arrow left}{cm x*2}-{cm x}" 4540 PRINT"{space*2}{cm z}{cm r*8}{cm x}" 4545 PRINT" {sh asterisk*2}Q{sh +*7}{sh asterisk*3}" 4550 PRINT" {sh asterisk*3}Q{sh +*6}{sh asterisk*3}" 4555 PRINT" {sh asterisk*4}Q{sh +*5}{sh asterisk*3}" 4560 PRINT" {sh asterisk*5}Q{sh +*4}{sh asterisk*3}{reverse on}data" 4565 PRINT" {sh asterisk*6}Q{sh +*3}{sh asterisk*3}{reverse on}bus " 4570 PRINT" {sh asterisk*7}Q{sh +*2}{sh asterisk*3}" 4575 PRINT" {sh asterisk*8}Q{sh +}{sh asterisk*3}" 4580 PRINT" {sh asterisk*9}Q{sh asterisk*3}{home}" 4585 RETURN 4600 RETURN 5000 GOSUB63100:REM micros-5 5001 sn$="05{0*3}":t$="more memory!":GOSUB63000 5010 PRINT"{down*3}Qif a {reverse on}2k{reverse off} memory chip" 5015 PRINT"{down} takes 11 wires from" 5020 PRINT"{down} the {reverse on}address bus" 5025 PRINT"{down} what about a {reverse on}4k{reverse off}" 5030 PRINT"{down} chip?":GOSUB50000 5035 PRINT"{clear}{down}Qit would take " 5040 PRINT"{down} 12 wires to" 5041 PRINT"{down} identify one of" 5045 PRINT"{down} 2^12=4096=4k" 5046 PRINT"{down} internal locations" 5050 PRINT"{down} in a 4k memory chip." 5055 PRINT"{down} and the remaining" 5060 PRINT"{down} 4 wires would " 5065 PRINT"{down} go to{.*3}?":GOSUB50000 5070 PRINT"{clear}{down*5}{space*2}the {reverse on}decoder{reverse off}!":GOSUB50000:ms$="where else":GOSUB63300 5075 PRINT"{clear}{down}Qwe're talking about" 5080 PRINT"{down} static memory called" 5085 PRINT"{down} {reverse on}r{reverse off}andom {reverse on}a{reverse off}ccess" 5090 PRINT"{down} {reverse on}m{reverse off}emory (ram)." 5095 PRINT"{down}Qthe {reverse on}6510{reverse off} can" 5100 PRINT"{down} {reverse on}read{reverse off} or {reverse on}write{reverse off}" 5105 PRINT"{down} with {reverse on}ram{reverse off}{.*3}and" 5110 PRINT"{down} {reverse on}ram{reverse off} will store" 5115 PRINT"{down} data bytes as" 5120 PRINT"{down} long as it has" 5125 PRINT"{down} power.":GOSUB50000 5130 PRINT"{clear}{down*3}Qprograms in {reverse on}basic{reverse off} are" 5135 PRINT"{down} normally stored in" 5140 PRINT"{down} {reverse on}ram{reverse off}{.*3}and they are" 5145 PRINT"{down} lost when the computer" 5150 PRINT"{down} is turned off!":GOSUB50000 5155 PRINT"{clear}{down}Qhowever {reverse on}r{reverse off}ead {reverse on}o{reverse off}nly" 5160 PRINT"{down} {reverse on}m{reverse off}emory (rom)" 5165 PRINT"{down} never forgets!" 5170 PRINT"{down} the data is permanent." 5175 PRINT"{down} the {reverse on}6510{reverse off} cannot" 5180 PRINT"{down} {reverse on}write{reverse off} to {reverse on}rom{reverse off}." 5185 PRINT"{down}Qit can only {reverse on}read{reverse off} {reverse on}rom{reverse off}." 5190 GOSUB50000 5195 PRINT"{clear}{down}Qthe decoding is the" 5200 PRINT"{down} same as for {reverse on}ram{reverse off}" 5205 PRINT"{down} but the {reverse on}read/write" 5210 PRINT"{down} line is not used." 5215 PRINT"{down}Qwhen the appropriate" 5220 PRINT"{down} address is on the" 5225 PRINT"{down} {reverse on}address bus{reverse off}, and" 5226 PRINT"{down} the {reverse on}decoder{reverse off} sends a" 5227 PRINT"{down} {reverse on}chip enable{reverse off}{.*4}" 5230 PRINT"{down} rom always{down}{left*6}{cm u*6}{up} puts" 5235 PRINT"{down} data on the {reverse on}data bus{reverse off}." 5240 GOSUB50000 5245 PRINT"{clear}{down}Qit is {reverse on}rom{reverse off} which" 5250 PRINT"{down} contains the info" 5255 PRINT"{down} necessary for the" 5260 PRINT"{down} {reverse on}6510{reverse off} to understand" 5265 PRINT"{down} the {reverse on}basic{reverse off} language." 5270 PRINT"{down}Qit is {reverse on}rom{reverse off} which" 5275 PRINT"{down} contains the" 5280 PRINT"{down} programs which" 5285 PRINT"{down} make the micro" 5290 PRINT"{down} smart{down}{left*5}{cm u*5}{up} as soon" 5295 PRINT"{down} as it's turned on!":ms$="sin({pi}/2)=1":GOSUB63200:GOSUB50000 5475 PRINT"{clear}{down*2}Qnow consider the commodore 64:" 5476 PRINT"{down} it has 64k of {reverse on}ram{reverse off}{.*3}":GOSUB50000 : 5477 PRINT"{down} right?":GOSUB50000:ms$=" right!!":GOSUB63200:GOSUB50000 5478 PRINT"{home}{down*6}Qbut it's smart and has" 5479 PRINT"{down} lot's of {reverse on}rom{reverse off}{.*3}":GOSUB50000:PRINT"{down} right?":GOSUB50000:GOSUB63200 5480 PRINT"{home}{down*10}Qbut the {reverse on}6510{reverse off} has only a" 5481 PRINT"{down} 16 bit address bus?!?":GOSUB50000:ms$=" {reverse on}!#$%'{?*3}{reverse off}":GOSUB63200 5482 GOSUB50000:PRINT"{clear}{down*5}Qso how does the {reverse on}6510{reverse off} talk to" 5483 PRINT"{down} 64k of {reverse on}ram{reverse off} and{down}{left*3}{cm y*3}{up} 20k of {reverse on}rom{reverse off}":ms$="{?*10}":GOSUB50000 5484 PRINT"{down}Qbesides..how come it says:":PRINT"{down} {reverse on}only{reverse off} 38911 bytes free{?*3}" 5485 ms$="i{reverse on}wuz{reverse off}robbed":GOSUB63200 5486 GOSUB50000:PRINT"{clear}{down*4}Qnow that's{down}{left*6}{cm u*6}{up} another story!" 5487 ms$="au revoir!":GOSUB63200:sn$="{0*3}10":GOSUB63520:END 5490 PRINT"{clear}{down} {sh asterisk*2}Q{sh asterisk*11}" 5491 PRINT" {sh asterisk*2}{sh +}Q{sh asterisk*9}" 5495 PRINT" {sh asterisk*2}{sh +*2}Q{sh asterisk*8}{reverse on}address" 5500 PRINT" {sh asterisk*2}{sh +*3}Q{sh asterisk*7}{reverse on}bus{space*4}" 5505 PRINT" {sh asterisk*2}{sh +*4}Q{sh asterisk*6}" 5510 PRINT" {sh asterisk*2}{sh +*5}{sh asterisk*5}Q{sh asterisk*3}" 5515 PRINT" {sh asterisk*2}{sh +*5}{sh asterisk*5}{sh +}Q{sh asterisk*2}" 5520 PRINT" ..{sh -*5}{.*5}{sh -*2}.." 5525 PRINT" {sh asterisk*2}{sh +*5}{sh asterisk*5}{sh +*2}{sh asterisk}Q" 5530 PRINT"{space*2}{cm a}{cm e*5}{sh asterisk*3}{cm s} {sh -*2}.{sh -}" 5535 PRINT"{space*2}{sh -}decoder1{sh -} {sh -*2}.{sh -}" 5540 PRINT"{space*2}{cm z}{sh asterisk*4}{cm r}{sh asterisk*3}{cm x} {sh -*2}.{sh -}{arrow left}{reverse on}11" 5545 PRINT" r/w{sh asterisk}{cm s} {sh -}{space*5}{sh -*2}.{sh -}{reverse on}wires" 5550 PRINT"{space*2}{cm a}{sh asterisk*2}{cm e}{sh asterisk}{cm e}{sh asterisk*3}{cm s} {sh -*2}.{sh -}" 5555 PRINT"{space*2}{sh -}memory 1{cm q}{arrow left}{cm x*2}-{cm x}" 5560 PRINT"{space*2}{cm z}{cm r*8}{cm x}" 5565 PRINT" {sh asterisk*2}Q{sh +*7}{sh asterisk*3}" 5570 PRINT" {sh asterisk*3}Q{sh +*6}{sh asterisk*3}" 5575 PRINT" {sh asterisk*4}Q{sh +*5}{sh asterisk*3}" 5580 PRINT" {sh asterisk*5}Q{sh +*4}{sh asterisk*3}{reverse on}data" 5585 PRINT" {sh asterisk*6}Q{sh +*3}{sh asterisk*3}{reverse on}bus " 5590 PRINT" {sh asterisk*7}Q{sh +*2}{sh asterisk*3}" 5595 PRINT" {sh asterisk*8}Q{sh +}{sh asterisk*3}" 5600 PRINT" {sh asterisk*9}Q{sh asterisk*3}" 5605 RETURN 5620 RETURN 50000 GETa$:IFa$<>""THEN50000 50001 GETa$:IFa$=""THEN50001 50002 IFa$="@"THEN63500 50003 RETURN 51000 n=3 51001 x$="":FORu=nTO0STEP-1:x%=x/(2^u):x=x-x%*(2^u):x$=x$+CHR$(48+x%) 51002 NEXT:RETURN 52000 m=3 52001 y$="":FORv=mTO0STEP-1:y%=y/(16^v):y=y-y%*(16^v) 52002 y$=y$+CHR$(48+y%-7*(y%>9)):NEXT:RETURN 55000 PRINT"{clear}{down*4}":POKE59468,14:PRINTCHR$(14) 55005 PRINT" These{space*2}micros'n'chips tutorials are" 55010 PRINT"{down} meant to provide{space*2}an{space*2}understanding" 55020 PRINT"{down} of microcomputer{space*2}hardware.They are" 55030 PRINT"{down} not{space*2}intended{space*2}to{space*2}be{space*3}exhaustive." 55040 PRINT"{down} Although they refer specifically to" 55050 PRINT"{down} the{space*2}commodore 64,{space*2}the{space*2}ideas{space*2}are" 55060 PRINT"{down} applicable to all micros." 55070 GOSUB50000:PRINT"{clear}":POKE59468,12:PRINTCHR$(142):RETURN 63000 PRINT"{clear}"; 63001 l=LEN(t$):uu$="":FORi=1TOl:uu$=uu$+" ":NEXT:tt$=uu$+t$ 63002 PRINT" {cm a}";:FORi=1TOl:PRINT"{sh asterisk}";:NEXT:PRINT"{cm s}" 63003 PRINT" {sh -}";:FORi=1TOl:PRINT" ";:NEXT:PRINT"{reverse off}{sh -}" 63004 PRINT" {cm z}";:FORi=1TOl:PRINT"{sh asterisk}";:NEXT:PRINT"{cm x}":PRINT"{up*2}{right*2}{reverse on}{red}"; 63005 FORi=1TOl:PRINTMID$(tt$,i+1,l):PRINT"{up}{right*2}{reverse on}";:FORt=1TO50:NEXT 63006 NEXT:PRINT"{black}":RETURN 63100 bt$="{home}{down*24}" 63101 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}" 63102 pt$=pt$+"{down}{left*13}N{cm t*12}M{down}{left*14}{cm g}{=*12}{cm m}" 63103 pt$=pt$+"{down}{left*14}PO{cm t*10}PO{up*4}{left*12}" 63104 pt$=bt$+"{up*6}{right*26}"+pt$+"{black}" 63105 sn=1030:IFPEEK(0)=47THENsn=2054 63199 RETURN 63200 FORi=1TO2:PRINTpt$"{space*10}" 63201 FORt=1TO50:NEXT 63202 PRINTpt$ms$ 63203 FORt=1TO50:NEXT:NEXT:RETURN 63300 GOSUB63200:FORt=1TO1000:NEXT:RETURN 63500 vs=VAL(sn$):vs=vs-1000:IFvs<1000THENvs=100 63510 sn$=MID$(STR$(vs),2):sn$=RIGHT$("{0*5}"+sn$,5):GOSUB63520:RUN 63520 FORi=1TO5:POKEsn+i-1,ASC(MID$(sn$,i,1)):NEXT:RETURN stop tok64 (bastext 1.0)