" USING THE BUSSES SO THE MICRO" " ISN'T SLOWED DOWN).":50000:4000, P$"DATA BIT= P$" P P$" m U18:P$" ": P$" RAM P$" P$" ݠ P$" P$"  "2 " FIRST A0-A7 = 8 BITS (FOR ROW SELECT)"2*" THEN A8-A13= 6 BITS!"#34"WE SAID CIA #2 SUPPLIES THE TOP TWO:"[3>" (A14 & A15).":MS$" HOW? ":63200:50000q3p63100: MICROS-63qSN$"06000"3uT$"THE CIA AND THE GREAT  SCONNECTED FROM THE ADDRESS PINS"0l" OF THE RAM CHIPS."1v"WHEN THE 6510 IS CUT OFF (PHASE 1)"81" OL' VIC TALKS TO RAM!":50000h1"AND IT DOES SO BY GIVING THE RAM CHIPS"1" A0-A7 WHILE RAS=0 (ROW SELECT)"1"AND .":50000.|"";:53200/F$"":G$"AEC":NT10:55000B/50000:"AND HOW DOES AEC CUT OFF"/" THE 6510 FROM ACCESS TO MEMORY?":MS$"I GIVE UP!":63200/50000:"";:56000/F$""CK ϣФϣФϣ","PHASE 1 CLOCK ФϣФϣФ"+-"WHEN THE PHASE 2 CLOCK IS HIGH (=1)"T-"" THE 6510 WILL ADDRESS MEMORY."-,"WHEN THE PHASE 1 CLOCK IS HIGH (=1)"-6" OL' VIC WILL ADDRESS MEMORY!":MS" THE LAST 2 BITS?":50000:MS$" CIA #2 ! ":63300)+s"...BUT THAT'S ANOTHER STORY..":MS$"PATIENCE!":63200Z+50000:"WHEN DOES THE 6510 GET ON THE"+" ADDRESS BUS....AND WHEN DOES VIC?"+"REMEMBER THE PHASE 2 CLOCK?"+0:MS$"REMEMBER?") F$"":G$"VIDEO":55000:50000:63200)50000:"";:53200:)F$"":G$"14":55000[)#P$"NOTE:ONLY 14"t)$P$" WIRES OF THE")%P$" ADDRESS BUS!":50000)("ALTHOUGH THE VIC CHI50000&T$"COLUMN ADDRESS SELECT":63001 'MS$" CAS! ":63200:50000!'63100: MICROS-51'SN$"05000"t'T$"......AND HERE'S VIC!":63000:MS$" READY?":63200:50000'"";:53200:NT2'F$""'G$" $"=0 (SEND Y THRU)"$w50000:A$"Q"4300$|4150&%F$F$"":G$"??????":NT10:55000:50000i%"...BUT THAT'S ANOTHER STORY.":MS$"PATIENCE!":63200%50000:"THE 8 OUTPUT WIRES GO TO THE RAM"%" ADDRESS PINS."%"T$"WHICH 4? DEPENDS UPON"" P$" A SELECT PIN."!#!P$"TRY IT!":P$" TYPE 'Q' TO QUIT "R#"TT$"":BB$TT$""#'ST$"":SB$ST$"":50000#6TT$;:I47:"A"(T$,2I1,2)""; P$" " 63100: MICROS-4!SN$"04000"-!T$"THE BIT SWITCH":63000m!56000:F$"":G$"SELECT":NT2:55000!F$F$"":55000!P$"IN ORDER TO FEED RAM"!P$" THE APPROPRIATEBANK SWITCH":63000:570003zMS$"REMEMBER?":63200:500004F$"":F$"":F$""?4F$F$"":G$"A14 ":NT5:55000^4F$F$"":G$"A15 ":55000450000:"NOTE THAT THE TWO 'TOP' BITS"4" OF THE AD A8-A13 WHILE CAS=0 (COLUMN SELECT).":500002"...WHICH IS EASY FOR OL' VIC BECAUSE"K2" IT'S VIC WHO GENERATES RAS & CAS!!":50000y2 "BUT OL' VIC STILL ONLY SUPPLIES THE"2" BOTTOM 14 BITS OF THE ADDRESS...:G$"ADDRESS BITS"(13)"FROM 6510"(13):NT5/G$G$""(13)"VV":55000:50000@0DF$"":G$"(AEC)=CUT OFF THE OUTPUT!"l0N55000:F$F$"":55000:500000X"WHEN AEC=1 THESE OUTPUTS"0b" ARE DI$"HOW NICE!":63200-@50000:"..AND OL' VIC MAKES SURE"'.J" THAT 6510 IS CUT OFF FROM MEMORY"?.T" ACCESS.":50000l.^"FROM ONE OF THE 40 PINS OF OL' VIC".h" COMES AN:".r" ADDRESS ENABLE CONTROL (AEC)"ONLY WHEN THIS SIGNAL FROM THE 6510" ," IS HIGH (=1) WILL THE 6510 ADDRESS"M," MEMORY.":"WE NEED A SIMILAR CLOCK FOR OL' VIC!":50000,"LET'S LOOK AT THESE CLOCKS..":MS$"LET'S LOOK":63200,50000:"","PHASE 2 CLOP CAN ADDRESS")2" MEMORY (LIKE THE 6510), IT HAS ACCESS"*<" TO ONLY THE BOTTOM 14 BITS OF THE"4*F" ADDRESS BUS."c*P"SINCE 2^14=16K, OL' VIC CAN ONLY TALK"~*Z" TO 16K OF MEMORY."*d"WHEN VIC PUTS ON 14 BITS WHO PUTS ON"*n  ":55000'F$"   ":NT10 (P$"":I125:P$P$"":S(F$"":G$"CE":55000q( P$"WHERE DOES CE"( P$"(CHIP ENABLE)":P$" COME FROM?":50000( "";:5300HE SELECT PIN JUST GOES UP & DOWN" &" AND SENDS THE DYNAMIC RAM A0-A7.."3&" THEN A8-A15...THEN A0-A7..ETC."d&"WHEN SELECT=0 THE TOP 8 BITS (A8-A15)"&" GO TO THE DYNAMIC RAM ADDRESS PINS."&"SO....GUESS WHO SELECT IS???"::#@BB$;:I47:"A"(B$,2I1,2)"";:*$TST$"=1 (SEND X THRU)":SB$"=1 (SEND X THRU)"B$Y50000:A$"Q"4300n$^TT$;:I14:"A"(T$,2I1,2)"";:$hBB$;:I14:"A"(B$,2I1,2)"";:$rST$"=0 (SEND Y THRU)":SB 8 BITS"!P$" FROM THE ADDRESS BUS, WE":P$"";A"" USE ANOTHER MAGIC CHIP.":P$"THE 74257 DATA SELECTOR.";""":P$"":I115:P$P$"":"""P$"IT DIRECTS 4 INPUTS""P$" TO THE OUTPUT.""P HOLD A SINGLE BIT...1 OR 0)."D "WE'LL THEN NEED EIGHT OF THESE 64K BIT"h " CHIPS TO MAKE 64K BYTES!" #"EACH CHIP WILL SUPPLY ONE BIT FOR" $" THE 8-BIT DATA BUS." %"WHEN A CHIP ENABLE GOES OUT..IT GOES" &" TO ALL   " COUPLE OF MILLISECONDS." "JUST CYCLE THRU' THE 256 ROWS (BY"@ " CHANGING A0-A7 FROM 0000 0000 TO"k " 1111 1111) AND DO THE WHOLE THING" " IN 2 MILLISECONDS!":50000 "AND WHO LOOKS AFTER THE RAS AND CA WON'T NEED A CHIP ENABLE"N " SINCE THE 1/0-STATES OF THE RAS/CAS"AX " PINS WILL TELL THE CHIP IF IT IS"bb " BEING SPOKEN TO!":50000l "AND WHY IS IT CALLED DYNAMIC RAM?":50000v "BECAUSE IT FORGETS ITS BITS AND" " MUST C  I701:"A"(48I)"";::500004 "SET RAS=0":Q$"":I118:Q$Q$"":c I126:Q$Q$""::Q$"RAS":50000 "SET R/W=0" Q$"R/W":50000 "PUT A8-A15 ON THE":" ADDRSELECT (CAS)."B "WHEN RAS=0 THEN THE CHIP WILL"KL " TAKE THE 8 BITS ON ITS ADDRESS PINS"rV " TO IDENTIFY THE ROW.":50000` "WHEN CAS=0 THEN THE CHIP WILL"j " TAKE THE 8 BITS ON ITS ADDRESS PINS"t "OF 65536 MEMORY LOCATIONS. "7" ":50000e"NOTE THAT 256*256=65536=64K... "I12:" "::50000"BUT THERE'S SOMETHING MISSING... ":50000 THE 64K-BIT CHIP THE"\"ADDRESS BUS BITS A0-A7, THE CHIP"Of"SELECTS ONE OF 2^8=256 ROWS.":L$:50000p".":50000z"WHEN WE GIVE THE 64K-BIT CHIP THE""ADDRESS BUS BITS A8-A15, THE CHIP"  7" ݠݠݠݠݠ. ݠݠ08" .R9" ݠݠݠݠݠ. ݠݠt:"256 . . . . . . . . .;"ROWS . . . . . . . . .<" ݠݠݠݠ. ݠݠ=" .>" ONE TIME."""WE'LL GIVE THE CHIP 8 BITS (A0 TO A7)"J" AND TELL IT TO REMEMBER THOSE."z"THEN WE'LL GIVE IT 8 MORE (A8 TO A15).""THEN WE'LL EXPECT THE CHIP TO "" IDENTIFY THE INTERNAL MEMORY"" LOCATION FROM THE 16 ::5I18:" ^ ";::,6I18:"";::"CE"P7I18:"";::"R/W"|<"AND ALL 16 BITS OF THE ADDRESS BUS"F" ARE CONNECTED TO EACH CHIP TOO!":50000P"THAT WILL REQUIRE HOW MANY PINS?" Z"16(ADDRESS)EIGHT 64K-BIT MEMORY CHIPS!"9 '"...AND READ/WRITE TOO...":50000:""a (" )"DATA *"BUS +" ,"S" " AND REFRESH?":50000:""J T$"THE VIDEO CHIP !!":MS$"NICE CHIP!":63001:63300z "AND IT DOES ALL THIS WHEN THE 6510" " ISN'T LOOKING!":50000 " (OR AT LEAST WHEN THE 6510 ISN'T"ONSTANTLY BE REFRESHED.":50000* "EVERY 2 MILLISECONDS OR SO THE"U " DYNAMIC RAM MUST BE ACCESSED ELSE"s " IT LOSES ITS BITS!" "TO REFRESH A DYNAMIC RAM EACH ROW" " (AT LEAST) MUST BE ADDRESSED EVERY"ESS PINS."& P$" ";:I1581:X$((I),2):I10X$X$" ")+ "A"X$"";:c0 50000:"SET CAS=0":Q$"CAS"5 50000:"AND WE'RE DONE!": 50000:"..AND IF WE BUILD OUR CHIP"D " RIGHT, WE TO IDENTIFY THE COLUMN.":50000 63100: MICROS-3 SN$"03000"G T$"TALKING TO A DYNAMIC RAM":63000h " TO WRITE:":" " P$"" 3500 "PUT A0-A7 ON THE":" ADDRESS PINS.":P$"";"HOW'S THE CHIP TO KNOW WHEN 8 BITS". " FROM THE ADDRESS BUS IS FOR THE"_ " ROW AND WHEN FOR THE COLUMN?":50000 "WE'LL HAVE TO USE TWO PINS FOR:". " ROW ADDRESS SELECT (RAS)"8 " COLUMN ADDRESS "SELECTS ONE OF 2^8=256 COLUMNS.":50000M".."|50000:D$"":I16D$"":T1100::D$"":T1100::"NOW THE CHIP HAS FOUND ONE "" ݠݠݠݠݠ. ݠݠ ?" . B@" ݠݠݠݠݠ. ݠݠIA"kB" C" 256"D" COLUMNS"H50000:L$"":I139:L$L$"":R"WHEN WE GIVEBITS THAT"0" WE GAVE IT (8-AT-A-TIME).":MS$"OH YEAH!":50000:63300F63100: MICROS-2VSN$"02000"T$"INSIDE THE DYNAMIC RAM":63000:""4" ݠݠݠ . ݠ5" ݠݠݠݠݠ . ݠݠ6" . +1(DATA)+1(R/W)+1(CE)",_"+1(+5 VOLTS)+1(GROUND)..."bd"THAT MAKES 21 PINS WHICH IS BETTER...":50000n"LET'S DO IT DIFFERENTLY!":MS$" AGAIN? ":63300x"WE WON'T CONNECT ALL 16 ADDRESS BUS"" BITS TO THE CHIP AT ) -"Q ."y /" 0" ݠ ݠ ݠ ݠ ݠ ݠ 1I18:"";:: 2J12:I18:"ݠ ";::: 4I18:""; R  PEEK 1 "B" (IT 'RESPONDS' TO LOCATION ONE).":50000B"AND THE DATA DIRECTION REGISTER?":500004C" POKE 0 OR PEEK 0":"(IT 'RESPONDS' TO LOCATION ZERO!)"mC"101111=OUT IN OUT OUT OUT OUT":"SO PEEK(0)=47"C50000:" E ALL 16 BITS OF THE ADDRESS"; " BUS TO ADDRESS ONE OF 2^16=64K"h " INTERNAL MEMORY LOCATIONS THAT WILL" " REQUIRE 16 PINS." "IF EACH MEMORY LOCATION HOLDS 8 BITS" " THEN WE'LL NEED 8 MORE PINS TO CONNECT" " TO THE DATA CHIP (TO IDENTIFY ONE OF 2^11"E." INTERNAL MEMORY LOCATIONS) AND THE "p8" REMAINING 5 WIRES WOULD GO TO THE"B" ADDRESS DECODER.":50000:54000:MS$"REMEMBER?":50000G63300L"ALTHOUGH CONVENIENT, STATIC RAM IS"V" RARELY U ":63200;hMS$" WELCOME! ":63200:53280,15ri"NOTE:HIT THE @-KEY AT ANY"j" TIME TO RETURN TO AN":" EARLIER SECTION...":5000063100: MICROS-1SN$"01000"T$"DYNAMIC RAM":63000T150:::OD63200:T11000::O VS(SN$):VSVS1000:VS1000VS100OSN$((VS),2):SN$("00000"SN$,5):63520:P I15:SNI1,((SN$,I,1))::PT$"ϣϑ"NPT$BT$""M}PT$""N~PT$PT$"Σ============"JNPT$PT$"ϣϑ"NPT$BT$"":D$C$RG$"PRB"KיD$(C$,9)RG$"DDRB":S$"":KB$"":RG$"":I18:RG$RG$B$::RG$RG$"":Lڙ" $DD00(56576)=PORT A"9Lڙ" $DD01(56577)=PORT B"VLڙ" $DD02(56578)=DDRA "sLڙ" $DD03(56579)=DDI֙"DATAI֙"BUS Iי"I י"Iי"Iי"J(י" J2י" 7J<י"CE P"TJ=י" O"qJ>י"R/W R"R$(2)"2:DATA DIRECTION REGISTER A"GR$(3)"3:DATA DIRECTION REGISTER B"GR$(4)"4:TIMER A:LO BYTE" HR$(5)"5:TIMER A:HI BYTE")HR$(6)"6:TIMER B:LO BYTE"IHR$(7)"7:TIMER B:HI BYTE"jHR$(8)"8:10THS OF SECONDS"HR$(9)"Eә" E"ә" "E,ә"CE ..PORT A"E6ә"R/W "E@ә"CLOCK "FJә" _FLAG"FTә"_IRQ SP "3F^ә" CNT"JFhә"A3 PC"_Frә"A2 "zF|ә"A1 ..PORT B"THIS 6510 IS SOME CHIP!":MS$"SOME CHAP"C$50000:63200C."BUT THAT'S ANOTHER STORY!"(DhMS$"AU REVOIR!":63200:SN$"00010":63520:>DPáA$:A$""50000SDQáA$:A$""50001eDRËA$"@"63500kDSÎsD8N3D9X$"": BUS."* "WITH CHIP ENABLE, READ/WRITE, +5 VOLTS"f " AND GROUND PINS WE'RE UP TO":" 27 PINS!":50000 "LET'S DO IT DIFFERENTLY!":50000 "WE'LL BUILD A 64K BIT MEMORY CHIP!" " (EACH INTERNAL MEMORY LOCATION WILL" "SED IN A MICRO...IT'S A BIGGER"F`" AND MORE EXPENSIVE CHIP (FOR THE SAME"j" AMOUNT OF MEMORY) THAN ...":T$" DYNAMIC RAM "t63001:50000~"LET'S BUILD A DYNAMIC RAM MEMORY CHIP!":MS$"YES! YES!"50000:63300 "IF WE US)"YOU MAY RECALL IN THE FIRST OF THIS"U" SERIES OF TUTORIALS THAT WE TALKED"" ABOUT STATIC RANDOM ACCESS MEMORY.""A 2K-BYTE RAM CHIP WOULD HAVE 11 WIRES"" FROM THE ADDRESS BUS GO TO THE"$" RAM  00010# 63100:SN$"00100"bd53281,15:53280,12:"":" MICROS'N'CHIPS-5"e"":63100f"  MORE ON MEMORY  ":MS$"PONZOTUTOR"g""PT$""NSN1030:(0)47SN2054ND$"":I125:D$D$"":NR$"":I140:R$R$""::P$"")OBL$" "/OKOI12:PT$" "YOT150:eOPT$MS$wORB "yLڎL"";LL(T$):UU$"":I1L:UU$UU$" "::TT$UU$T$L" ";:I1L:"";::""L" ";:I1L:" ";::""M" ";:I1L:"";::"":"";KMI1L:(TT$,I1,L):"";:T150:XM:"":|M|BT$"J?י" T"J@י" "JFי" B"JPי"A3 "Jnי"A2 "Kxי"A1 "(Kי"A0 "PKBL$"":I139:BL$BL$" "::55300KD$"":C$"9:SECONDS"HR$(10)"A:MINUTES"HR$(11)"B:HOURS & AM/PM"HR$(12)"C:SERIAL DATA REGISTER" IR$(13)"D:INTERRUPT CONTROL REGISTER"0IR$(14)"E:CONTROL REGISTER A"TIR$(15)"F:CONTROL REGISTER B"ZIԎlI֙"~I֙"Fә"A0 Fә" Fә" ^ Fә" GROUND"Fә" RESETFӎFԙ(D$,Y)(R$,X)M$:G&ԙP$;:I15:BL$;:G0M$(M$,2):54300:OGԆ R$(15):R$(0)"0:PERIPHERAL REGISTER A"uGR$(1)"1:PERIPHERAL REGISTER B"G UN01:X%X(2U):XXX%(2U):X$X$(48X%)D:ǂ:DǙ" WHICH (BY MICRO STANDARDS) IS PLENTY"D M3E!Y$"":VM01:Y%Y(16V):YYY%(16V):E"Y$Y$(48Y%7(Y%9))::GEҙ"";UEҙ"DATAlEә"BUS +5 VOLTSzEә".  IME OF DAY:"-n"ONE REGISTER TO HOLD HOURS..".o"ONE REGISTER TO HOLD MINUTES..",.p"ONE REGISTER TO HOLD SECONDS.."b.q"ONE REGISTER TO HOLD 10THS OF SECONDS.":50000}.sMS$" 4 TO GO!":63300.x"OF COURSE OUR HOURS REG IRAM":54300:P$"ENABLE/DISABLE"@P$"THE ROM AT":P$"$A000 & $E000!"@63200:50000:54310 AY9:X7:M$"CHAREN":54300:P$"ENABLE/DISABLE"SAP$"THE CHARACTER":P$"ROM!!":63200:50000A"..AND THE DATA DIRECTION?":5 D"">H"6 5">I"5 4">J"1 3">K"0 2">L" 1">M" 0")?RY8:X7:M$"CASS. WRITE":54300:50000:54310]?\Y7:X6:M$"_CASS. SENSE":54300:50000:54310?fY6:X7:M$"CASS. MOTOR":54300:5000 WELL...SORT OF...":T11000:<"THE 6510 HAS (BELIEVE IT OR NOT)" =" AN INPUT/OUTPUT PORT BUILT RIGHT IN!")=" (6 BITS WORTH)":50000X= " AND EVEN A DATA DIRECTION REGISTER!"="MOTOR CONTROL,SENSE AND WRITE LINES"= " LINE":50000:"A LINE TO READ":50000:"A LINE TO SENSE IF ANY BUTTON"&;" HAS BEEN PUSHED DOWN!":50000:63000:""=;18)"PORT"e;"CASSETTE MOTOR":50000;"CASSETTE SENSE":50000;"MS$"ALTOGETHER":50000:633008p63100: MICROS-68qSN$"06000"8uT$"CIA REGISTERS":630009z54400:I015:R$(I):50000:99MS$"WHATTACHIP":63300O9X63100: MICROS-7_9YSN$"07000"~9]T$"THE TAPE DRIVE":630009b"THIS IS A SE6" WANT THE TWO 2-BYTE TIMERS TO WORK.":500006&"THINGS LIKE:" 70"WHEN TO START/STOP THEM.":50000<71"SEND TIMER OUTPUT TO A PORT PIN.":50000l72"LET TIMER B COUNT CNT PULSES.":5000073"..OR MAYBE COUNT PHASE 2 CLOCK PULCOLLECTED 8 BITS=1 BYTE.":500004"ALL THIS INFO NEEDS TO BE GIVEN TO"5" THE 6526...BY WRITING TO THE"J5" INTERRUPT CONTROL REGISTER (ICR).":50000q5"IF WE ARE TO COLLECT 8 BITS"5" (=1 BYTE) UNTIL THE 6510 CAN REAHOUR CLOCKS?"2@" HOW ABOUT HOURS FROM 0 TO 12 WITH"3J" AM AND PM INDICATORS?":50000/3T" 0000 0000 TO 0001 0010 = AM"Z3^" 1000 0000 TO 1001 0010 = PM"|3hMS$"MSB=AM/PM":63200:500003r"WE ALSO WANT TO TELL THE T":500000"EXAMPLE: 23 WOULD BE STORED AS:":""0" 0010 0011"1" ^ ^^"1" 2 3":50000X1"THIS SLICK FORMAT HAS A NAME....":500001T$"BINARY CODED DECIMAL=BCD":630001"59=0101 1001":"98=100ISTER"." NEED ONLY HOLD HOURS FROM 0 TO 23"/" AND MINUTE & SECONDS FROM 0 TO 59.."%/" "R/" HOW ABOUT A 24 HOUR CLOCK:":" FROM"/" 0HOURS 0MINUTES 0SECONDS 010THS"/" TO:"/" 23HOURS 59M0000:55300A""(RG$,30)""A"101111=OUT IN OUT OUT OUT OUT":50000BT$"THE 6510 I/O PORT":630006B"AND WHERE IS THIS I/O PORT 'INSIDE'"nB" THE 6510?":"TO READ/WRITE TO THIS PORT WE"B" POKE 1 O0:54310?pP$"AND THE FIRST":P$"THREE PINS":P$"OF THIS 6510 PORT?"?u50000:M$"":54310 @zY11:X7:M$"LORAM":54300:P$"ENABLE/DISABLE"I@P$"THE ROM AT":P$"$8000-$9FFF!"r@MS$"REMEMBER?":63200:50000:54310@Y10:X7:M$"H GO TO 3 PINS OF THE 6510 I/O PORT."=*"THE READ LINE (AN 'INPUT'" >4" FROM THE TAPE DRIVE) GOES TO A..":50000:MS$" READY?"d>>" FLAG INPUT OF CIA #1!":50000>CT$"6510 I/O PORT":63000:"">CASSETTE WRITE":50000;"CASSETTE READ ":50000;"..AND +5 VOLTS":50000<"...GROUND ":50000><"AND WHERE DO THETOP 4 SIGNALS"b<" GO TO...IN THE C64?":50000<"...TO THE 6510!!":50000<"RIAL PORT TOO,"9l" WITH EACH BYTE GOING TO THE TAPE UNIT"9v" AS 8 BITS...ONE AFTER THE OTHER."':"THE TAPE DRIVE NEEDS FOUR CONTROL"@:" SIGNALS:":50000s:"A SIGNAL TO TURN ON/OFF THE MOTOR.":50000:"A SERIAL WRITESES.":5000074"..OR MAYBE COUNT THE TIMES THAT"75" TIMER A 'ZEROS OUT'..":50000(8:"SO...WE HAVE TWO MORE REGISTERS WHICH"U8D" CONTROL THESE TWO TIMER OPERATIONS:"t8N" CONTROL REGISTER A"8O" CONTROL REGISTER B"8XD"5" IT, THEN WHERE SHOULD WE STORE IT?":500005"IN YET ANOTHER REGISTER, OF COURSE!"A6" THE SERIAL DATA REGISTER.":50000:MS$"FINISHED?":63300m6"FINALLY (2 MORE REGISTERS TO GO!)"6" WE NEED TO TELL THE 6526 HOW WE"6526 CHIP"3|" WHEN TO INTERRUPT THE 6510 VIA" 4" THE IRQ PIN.":50000 :>4" ..WHEN THE TIMERS COUNT DOWN TO ZERO":50000o4" ..OR A FLAG GOES LOW..":500004" ..OR THE SERIAL PORT HAS"4" 1 1000":" 2=0000 0010"1"11=0001 0001":"22=0010 0010":"19=0001 1001"250000:MS$"VERY NICE!":63300U2""OF COURSE WE ONLY NEED HOURS":" FROM 0 TO 23:"2," OR 0000 0000 TO 0010 0011":5000026"YOU DON'T LIKE 24  INUTES 59SECONDS 910THS":50000/"IN FACT IT MAY BE CONVENIENT FOR"#0" THE USER OF THIS CLEVER CHIP IF WE"R0" HAVE THE NUMBERS (HOURS,MINUTES,ETC.)"0" STORED IN THE REGISTERS IN THE FORMAT:"0" FIRST DIGIT:SECOND DIGI IAL PORT WIRE (SP).":50000 "WHEN 8 SUCH TRANSFERS TAKE PLACE"\ " INTERRUPT THE 6510 AND GIVE":" HIM THE BYTE.":50000 " HER":"..REPEAT..":50000 "NOTE THAT WE HAVE INTRODUCED 2 NEW" " PINS ON THE 6526 C ONDS=65.5 MILLISECONDS"+" WHICH (BY MICRO STANDARDS) IS PLENTY!":50000*, "IF WE WANT LARGER TIME INTERVALS WE"X," CAN HAVE TWO 2-BYTE TIMER REGISTERS.","WHEN THE FIRST COUNTS DOWN TO ZERO",(" WE START THE SECOND TIMER.",2 SN$"05000")T$"CIA REGISTERS":63000*"WE NEED A REGISTER OR TWO TO DO"6*" THE CNT (BAUD RATE) TIMING FOR THE"Q*" SERIAL PORT SP."~*"HOW ABOUT TWO 8-BIT REGISTERS WHICH"*" WE CAN LOAD WITH A 2-BYTE NUMBER FROM"* " AND WE ASK NICELY... THEN THE 6526":" WILL KEEP TRACK OF:">(" HOURS,MINUTES,SECONDS AND":" TENTHS OF SECONDS! "a(MS$"TICK!TICK!":63200:50000("WE SAID THE 6526 HAS 16 INTERNAL"(" REGISTERS...AND WE'VE MENTIONEPORTS... "%D50000&EP$"WE SAID IT ":P$" WAS A 40-PIN":P$" CHIP. "&F50000]&GP$"39 PINS ARE":P$" ACCOUNTED ":P$" FOR... "h&H50000&IP$"WHERE'S ":P$" THE 40TH PIN":P$" ?????? "&J50000:(D$,50000:54310#"Y13:X13:M$"SP":54300+$#P$"THE SERIAL ":P$" PORT. ":P$" "=$$50000:54310\$,Y14:X13:M$"CNT":54300$-P$"TO TIME THE":P$" SERIAL BIT ":P$" TRANSFER. "$.50000:54310$6Y15:X13:M4310!Y17:X2:M$"A1":54310"Y18:X2:M$"A0":54310""Y22:X1:M$"RESET":54300b"P$"SET ALL ":P$" REGISTERS TO":P$" ZERO. "t"50000:54310"Y5:X8:M$"+5 VOLTS":54300"P$"THE INNARDS":P$" NEED POWER!!":E=0 "50000:54310 Y11:X2:M$"CLOCK":54300A P$"PHASE 2 ":P$" CLOCK ":P$" "S 50000:54310q Y13:X2:M$"IRQ":54300 P$"INTERRUPT ":P$" THE 6510. ":P$" " 50000:54310 " MOVED AT A 'SPECIFIC RATE'. "IT IS THE RESPONSIBILITY OF THE"D " RECEIVER TO ACCEPT THE BIT STREAM"[ " AT THIS RATE!" "SOME 'STANDARD' BAUD RATES:" "110,150,300,600,1200,2400,4800,9600.":5000063100: MICROS-40 "DON'T WAIT FOR THE 'DEVICE'...JUST"- " KEEP PUTTING ON THE BITS, AND TOGGLING"t " THE CNT LINE...AT A SPECIFIC BAUD RATE." 50000:"AFTER 8 SUCH BIT TRANSFERS SEND AN" " INTERRUPT TO 6510...ASKING FIA CHIP: CNT & SP." "A WIRE FROM THE CNT PIN GOES OUT TO"I& " THE 'DEVICE' WHICH RAISES AND LOWERS"w0 " IT TO INDICATE 'DATA VALID/INVALID'.": "THE RATE AT WHICH THIS CNT WIRE"D " OSCILLATES BETWEEN 0 AND 1 GIVES THE""WE MAY ALSO WANT TO HAVE ONE OF THESE"-<" 2-BYTE TIMERS COUNT 'EXTERNAL' PULSES"6-F" WHICH COME IN ON THE CNT PIN.":50000]-P"CNT=COUNT..REMEMBER?":50000-Z"THEN, OF COURSE, WE WANT 4 MORE"-d" REGISTERS DEVOTED TO THE T" 0 TO 65535 (DECIMAL).":"THEN WE CAN HAVE THESE"+" TWO REGISTERS COUNT DOWN TO ZERO">+" ..COUNTING DOWN AT THE RATE OF THE"k+" PHASE 2 CLOCK (1 MEGAHERTZ).":50000+"THIS WILL GIVE US A MAXIMUM TIME OF"+" 65535 MICROSECD ONLY"(" FOUR:"("0:PERIPHERAL REGISTER A")"1:PERIPHERAL REGISTER B"4)"2:DATA DIRECTION REGISTER A"Y)"3:DATA DIRECTION REGISTER B")"...AND THE 12 OTHERS??":MS$" 4 TO F":63200:50000)63100: MICROS-5)19)(R$,9)"";'TI110:"TOD";:T150::"TOD";:T1507'^::MS$" TIME":63300:MS$" OF DAY":63300i'h"IF A 60 HERTZ SIGNAL":" "'r" IS FED TO THE CIA VIA THE"'" TIME OF DAY (TOD) PIN..."'$"PC":54300 %7P$"PERIPHERAL ":P$" CONTROL...TO":P$" HANDSHAKE."%850000:54310D%@Y4:X1:M$"DATABUS":54300e%AY9:X13:M$"PORT A":54300%BY17:X13:M$"PORT B":54300%CP$"AND THE ":P$" DATA BUS AND":P$" P$" ""50000:54310 #Y21:X7:M$"GROUND":54300I#P$"...AND ":P$" GROUND! ":P$" "[#50000:54310{#Y12:X13:M$"FLAG":54300#P$"FROM AN ":P$" EXTERNAL ":P$" DEVICE "# Y15:X2:M$"A3":54300!Y16:X2:M$"A2":54300!Y17:X2:M$"A1":54300:!Y18:X2:M$"A0":54300|!P$"4 PINS TO ":P$" SELECT A 6526":P$" REGISTER. "!50000:54310!Y15:X2:M$"A3":54310!Y16:X2:M$"A2":5SN$"04000"T$"CIA PINOUT":6300054000Y9:X2:M$"CE":54300]P$"CHIP ENABLE":P$" (WHEN ADDRESS":P$" IS RIGHT)."o50000:54310Y10:X2:M$"R/W":54300P$"READ/WRITE ":P$" READ=1 ":P$" WRITOR"  " ANOTHER BYTE.":"...REPEAT...":MS$"BAUD RATE?" 50000:63300H "DONT SLOW DOWN THE BIT TRANSFER"x " BY WAITING FOR AN ACKNOWLEDGEMENT FROM" " THE RECEIVING DEVICE (THE MICRO" " OR EXTERNAL DEVICE). THE BITS GET" N " BAUD RATE."#X "WHEN SENDING SERIAL DATA IT'S THE"\b " MICRO WHICH MUST TOGGLE THIS CNT LINE.":50000|l " SENDING SERIAL BYTES:"m " "v "PUT A BIT ON SP PIN AND LOWER CNT Ф":5000  00010# 63100:SN$"00100"bd53281,15:53280,12:"":" MICROS'N'CHIPS-4"e"":63100f"  INTERFACING TO THE WORLD  ":MS$"PONZOTUTOR"g" AL DEVICE"" IS CALLED HANDSHAKING."9"IF THE DATA IS SENT NOT AS BYTES"g" (OVER 8 WIRES) BUT AS BITS (OVER A"" SINGLE WIRE!) THE RITUAL IS SEXIER.":MS$" SEXIER?":5000063200 63100: MICROS-3 SN$"030 " 4"1)PUT DATA ON PORT B AND SET PC=0"@9" DATA IS VALID.":50000r>"2)WAIT FOR FLAG=0 FROM DEVICE"C" READY FOR NEXT DATA.":50000H"3)SEND INTERRUPT TO 6510"M" READY FOR NEXT DATA BYT ":T1300:""PROCEDURE FOR 'REC??VING' DATA:":T1300:K"PROCEDURE FOR 'RECEIVING' DATA:"r" ""1)WAIT FOR FLAG=0 FROM DEVICE"" (MEANING DATA IS VALID).":50000"2)SEND INTN INTERRUPT REQUEST (IRQ)":"WHEN THE 6510 CAN OBLIGE IT WILL"|" READ OR WRITE TO THE PRB.":50000"THEN THE CIA TELLS THE 'DEVICE' THAT"" IT'S READY FOR THE 'NEXT' TRANSFER!":50000STEAD WE INTERRUPT THE 6510 ONLY":2" WHEN THE 'EXTERNAL DEVICE' IS READY"_<" FOR THE NEXT DATA TRANSFER."F"WE WAIT FOR THE 'DEVICE' TO":" TELL THE CIA!"P50000:MS$" HOW? ":63300Z"THERE IS AN INPUT PIN WHICH WE CMS$" SLICK!":63300- "WE MAY WANT TO 'RECEIVE' OUTSIDE"^ " INFO THRU THE PARALLEL PORT=PORT B."{ " POKE56577,0 " " WILL MAKE PORT B ALL INPUT." "THEN WE JUST:" " PEEK(56577) " " T:500004 t"":56000:"NOW WE CAN:":" POKE56777,192 "b ~" AND THE DATA (192=";:X192:N7:51001 X$")":" GOES OUT PORT B!":50000 "SO WE CAN TURN ON":" 2 EXTERNAL DEVICES.." I16:" 12 OTHER REGISTERS:$DD04-$DD0F."K ""POKE56579,255 AND WHAT HAPPENS:":50000[ $"":56000y '" POKE56579,255 " )"SINCE ADDRESS IS $DD03 THEN CIA #2" ." GETS A CHIP ENABLE: CE":50000 8"SINCE IT'S A POKE=WR"," THEN 'SOMETHING' WILL HAPPEN WHEN"K" THIS PIN IS LOW (=0).""A PIN LABELLED 'ENABLE'?":" A '1' WILL ENABLE!"MS$" OK? ":63200:50000T$"MORE ON THE CIA":63000:""55000:MS$"B-HALF OF":63200":63200;hMS$" WELCOME! ":63200:53280,15ri"NOTE:HIT THE @-KEY AT ANY"j" TIME TO RETURN TO AN":" EARLIER SECTION...":5000063100: MICROS-1SN$"01000":T$"SOME TERMINOLOGY":6300000" T$"CEREAL COMMUNICA":63000! T$"SERIAL COMMUNICATION":63000B " RECEIVING SERIAL BYTES:"a " " "WAIT FOR CNT WIRE TO GO HIGH ":MS$"CNT=COUNT" 63200:50000 "ACCEPT BIT FROM SERE.":50000R"4)WHEN 6510 SENDS BYTE TO PORT B...".W" REPEAT...":50000Z\"THE LITTLE RITUAL OF RAISING AND"f" LOWERING THE VOLTAGES ON THE WIRES"p" FLAG AND PC IN ORDER TO"" COMMUNICATE WITH AN EXTERNERRUPT TO 6510"" (MEANING DATA IS READY).":50000N "3)WHEN 6510 READS DATA SEND PC=0"" TO 'DEVICE'(READY FOR NEXT BYTE).":50000 "...AND REPEAT..":50000*"PROCEDURE FOR 'SENDING' DATA:"+" "IT DOES THIS BY SETTING PC=0":500001"":MS$" WHAT? ":63300G63100: MICROS-2WSN$"02000"T$"THE CIA AND THE PARALLEL PORT":63000"PROCEDURE FOR 'RECIEVING' DATA:":T11000:"PROCEDURE FOR 'REC VING' DATA:AN"d" CONNECT TO THE 'EXTERNAL DEVICE'"<n" CALLED FLAG.":50000hx"WHEN THE 'DEVICE' IS READY FOR THE"" NEXT DATA TRANSFER IT CAN SET FLAG=0"" AND THE CIA WILL INTERRUPT THE 6510"" BY SENDING AO READ PRB WHICH IS CONNECTED"4" TO THE 'OUTSIDE WORLD'.":50000`"IF PARALLEL PORT IS CONNECTED TO" " A PRINTER OR DISK DRIVE WE DON'T WANT"" THE 6510 TO SPEND ALL ITS TIME"" PEEKING OR POKING THIS PORT." ("IN11":T150:9 "11":T150:::50000g "AND TURN OFF 6!": I16:"000000":T150: "000000":T150:: 50000:ITE THEN R/W=0":50000: B"SINCE ADDRESS IS $DD03 THE LAST"f L" 4 BITS ON THE ADDRESS BUS ARE 0011" V" WHICH SELECTS THE DDRB IN THE CHIP.":50000 `"THE DATA (255=11111111) GOES INTO DDRB" j" AND PORT B IS ALL OUTPUT!"50000:MS$" CIA #2 ":63200:500007"";:I14:BL$:l"";:T$"PORT B=PARALLEL PORT=USER PORT":63001S$"(THIS IS AT BACK OF C64)":50000"THIS CHIP LIVES AT ADDRESSES"" STARTING AT $DD00.""":56000 !"..AND "+"NOTE: WE WILL REFER TO SIGNALS AS"Y" JANE OR JUST PLAIN 'JANE'.""A CHIP WITH A PIN LABELLED CE IS"" ENABLED WHEN THIS PIN IS LOW (=0).""IF A CHIP HAS A PIN LABELLED SOMETHING P1$" DATA,R/W,CE,ETC. ";5P1$" ":50000;p63100: MICROS-6">">"DATA>"BUS >"?"?")?";?" O?" l?"CE PORT A"?"R/W ..(8 PINS)PE 6526..."<" (COMPLEX INTERFACE ADAPTER) ="LET'S SAY A WORD OR TWO ABOUT THEM.":MS$"PLEASE DO":63200E=50000:"THESE 40 PIN CHIPS (..BIG AS THE 6510)"j=" HAVE 16 INTERNAL REGISTERS."="THEY MUST THEN RECEIVE 4!15:SNI1,((SN$,I,1))::"N~PT$PT$"Σ============"KNPT$PT$"ϣϑ"NPT$BT$""M}PT$""N~PT$PT$"Σ============"KNPT$PT$"ϣϑ"NPT$BT$"VOIR!"K63200:SN$"00010":63520:KPáA$:A$""50000KQáA$:A$""50001KRËA$"@"63500KSÎK8N3L9X$"":UN01:X%X(2U):XXX%(2U):X$X$(48X%)$L:ǂ:,L M3ZL!Y$"":VM01:Y%Y(16V):YYY%(16V)zL"Y$Y$(48Y%7S$"HENCE 'PORT A' POINTS IN."IS$"NO UNWANTED DATA GETS OUT!":50000I"";:I14:BL$::S$" "$JS$" "UJ"PORT A OF CIA #2 IS ACTUALLY USED"J" TO COMMUNICATE WITH RA THEN THE CORRESPONDING"Gx" PIN OF THE PRA IS AN INPUT":50000GMS$" 0=INPUT":63200:50000:"";:I14:BL$:,H"IF WE PUT A 1 INTO A BIT POSITION"YH" OF THE DDRA THEN THE CORRESPONDING"H" PIN OF THE PRA IS A MAY EITHER 'RECEIVE' OR 'SEND' DATA"E " EACH PORT MAY BE CONFIGURED"E" AS AN INPUT OR AN OUTPUT.":50000 F"";:I14:BL$:JF("IN FACT EACH PIN MAY BE ":" INPUT OR ";~F2"OUTPUT!";:50000:I14:BOR A"C" PRINTER...":50000:"";:I14:BL$:C"OR IT MAY BE CONNECTED TO THE"D" KEYBOARD TO DETECT WHICH KEY IS"0D" DEPRESSED.":50000:"";:I14:BL$:_D"IN ANY CASE THE DATA IT RECEIVES OR"D" SENDS GOES INTO AN 'INTBUS Ad"Ae"Af"Ag"Ah" Bi" %Bj" CIA P"ABk" O"]Bl" R"xBm" TBn" ?"CLOCK ? " ? " CIA ? "A3 ? "A2 PORT B@"A1 ..(8 PINS)"@"A0 4@" `@50000:"CE=0 FOR ADDRESSES IN"@$"THE RANGE:$DC00-$DCFF (FOR CIA  WIRES FROM"=" THE ADDRESS BUS TO IDENTIFY ONE OF"=" THESE 2^4 REGISTERS.">"THEY'RE ALSO CONNECTED TO THE DATA BUS."E>"THE DATA FROM THE BUS CAN BE DIRECTED"r>" TO ONE OF TWO 'INPUT/OUTPUT PORTS'.">MS$"LET'S SEE":63 WILL MOVE THE GRAPHIC GADGET"'h" LEFT-RIGHT AND THE OTHER KNOB MOVES"'r" IT UP-DOWN."H'|"EACH POSITION OF THE KNOBS IDENTIFIES"t'" A SPECIFIC POSITION ON THE SCREEN!"'" ":50000'"...NOW COMES SOME MA _RESET"9P1$"AND OUR FRIEND RESET!":P1$" (WHICH SETS ALL THE "': P1$" INTERNAL REGISTERS "L:!P1$" TO 0). "y:"P1$" ":50000:(" S ON ADDRESS BUS"7P1$" (TO SELECT ONE OF 29"7P1$" INTERNAL REGISTERS).":500008P2$"A4A3A2A1A0"N8"DATA BUS":P1$"...OF COURSE... "o8P1$" "8P1$" ":50 " "5P2$"R/W":P1$"READ/WRITE LINE":P1$" (1=READ/0=WRITE)"650000:P2$"R/W":6P1$" ":P1$" "|6P2$"POTX":P1$"X-PADDLE PIN. ":P1$" "650000:P2$"POTX"63"3"3" 3" 3"CE 4"R/W +4"POTX SOUND OUTPUTI4"POTY (MONITOR)]4" 4"A4 SID TO RF MODULATOR4"A3 (FOR TTHE TWO 'PADDLE' VOLTAGES GO TO"1" THE SID CHIP VIA PINS 5 AND 9 OF"2" THE JOYSTICK PORT."C2"YOU CAN 'READ' THE PADDLE POSITIONS"d2" PEEK(54297)=X-POSITION"2" PEEK(54298)=Y-POSITION"2"IN EACH CASE YOU'LL "ALTHOUGH R IS IN OHMS AND"/ " C IS IN FARADS, THE PRODUCT"0*" RC IS MEASURED IN SECONDS!"@04"'THE BOOK' SAYS TO CHOOSE:"`0>" RC=500 MICROSECONDS."0H" (EXAMPLE: A 100K MAXIMUM RESISTANCE"0R" (AND A 5000 PICOFRD 5 VOLTS) DEPENDS UPON THE"-" VALUE OF THE VARIABLE RESISTOR..." ." WHICH DEPENDS UPON THE POSITION OF":." THE PADDLE KNOB!"d."SO THE SID CHIP CAN 'READ' THE"." POSITION OF THE KNOB!":MS$" CLEVER!":63200:50000."A CAPACITOR "+&" ":50000,0P$"THE CAPACITOR STARTS "F,:" CHARGING TOWARDS 5 VOLTS ":50000l,DP$"THE VOLTAGE ACROSS THE ",N" CAPACITOR GOES TO THE SID!!":50000,XP$"THE SID CT1100::*P$"":P$"THIS IS A VARIABLE RESISTOR"**" CONTROLLED BY A PADDLE.":50000_*Z$"":B$(0)Z$"_    "*B$(1)Z$" _   "*B$(2)Z$"  _  "*B$TH AND"'" CIRCUIT STUFF.."("WANT TO SKIP IT?":" NO";A$)((A$,1)"Y"4800D(MS$"GO!GO!GO!":63300f(T$"PADDLES 'N' STUFF":63000(" TO +5 VOLTS FROM MICRO(" (" (" (" _CLOCK":)P1$"AND THE PHASE 2 CLOCK ":*P1$" WHICH SID USES TO ";+P1$" 'TIME' THE VARIOUS "<;,P1$" SOUND FREQUENCIES. ":50000b;2P1$"NOTE:ONLY WHEN CLOCK=1 ";3P1$" WILL SID RESPOND TO ";40008 P2$"":P2$"SOUND"8 P1$"OUT COMES SOME SOUND "9 P1$" FOR A MONITOR OR A "49 P1$" TV SET (WHICH NEEDS "X9P1$" TO RECEIVE IT ON A "9P1$" PARTICULAR 'CHANNEL').":500009"P1$" ":P1$" " 7P2$"POTY":P1$"Y-PADDLE PIN. ":P1$" "%750000:P2$"POTY"j7P1$" ":P1$" ":P2$P2$""7P2$"A4A3A2A1A0":P1$"5 BITV SET)4"A2 4"A1 4"A0 4" +5P1$"":P2$"":50000h5P2$"CE":P1$"CHIP ENABLE FOR":P1$" ADDRESSES:$D4XX"|550000:P2$"CE"5P1$" ":P1$GET A NUMBER"2" FROM 0 TO 255.":MS$"WHAT ELSE!":63200:50000263100: MICROS-5 3SN$"05000"13T$"THE SOUND (SID) CHIP":63000D3"V3"h3"z3"3"3"ARAD CAPACITOR)."0\"ONE OF THESE RC-COMBINATIONS IS NEEDED"1f" FOR BOTH THE X-POSITION AND THE"41p" Y-POSITION...AND THE SID"a1z" HAS TWO PINS DEVOTED":" TO THESE!"1MS$"SMART SID!":63200:500001T$"PADDLES":630001"THE VOLTAGE ACROSS THE CAPACITOR IS"." V=5-5*EXP(-T/RC) VOLTS" /"RC=VALUE OF RESISTOR*VALUE OF CAPACITOR"H/"V=2.5 WHEN T=RC*LOG(2)=.693*RC"t/"THIS TIME IS DIRECTLY PROPORTIONAL"/ " TO THE (VARIABLE) RESISTANCE!":50000/HIP STARTS COUNTING.",b" ":50000-lP$"WHEN THE VOLTAGE REACHES 2.5 "H-v" THE SID STOPS COUNTING ":50000u-"THE TIME TAKEN TO REACH 2.5 VOLTS"-" (STARTING AT 0 VOLTS AND HEADING"-" TOWA(3)Z$"   _ "*I03:B$(I):T1100::+I301:B$(I):T1100::8+I03:B$(I):T1100:::50000n+I15:" ":T1100:+" ":T1100::+P$"THIS IS  (" _(" (" (" (" )" TO SOUND CHIP IN MICRO)" ()" 3)" =)" f)" TO GROUND OF MICRO":50000)I15:" ":T1100:)" ": "5*B$" 1 1 C64 RAM BASIC KERNAL "g4C$" 1 0 CARTRIDGE ">D$" 0 1 CARTRIDGE CARTRIDGE"HE$" 0 0 CARTRIDGECARTRIDGE "R""B$:50 $" OR CLOSED DEPENDING UPON WHETHER YOU"%" PUSH THE STICK UP,DOWN,LEFT,RIGHT OR"A%" PRESS THE FIRE BUTTON.":50000u%"BUT THIS REQUIRES THE PROGRAM TO MOVE"%" THE GRAPHIC GADGET IN THE APPROPRIATE"%" DIRECTION UNTIL WHICH NEEDN'T CONCERN US !":50000#VMS$" OH YEAH!":63300:#`"YOU CAN SEND THE 6510 TO THE 'RESET'"V#j" ROUTINE BY SAYING:"#t" SYS64738":MS$"...LATER":50000:63300#63100: MICROS-4#SN$"04000"#T$"OTHER OUTS "C3C2CD3830":63200:50000:MS$" SAYS..":63200! MS$" CBM80!":63200:50000J! T$"DUTIES OF A GAME CARTRIDGE":63000DY.x! "1) PROVIDE GAME AND EXROM SIGNALS"! " SO $8000-$9FFF RAM IS DISABLED"!" (AND CARTRIDGE ROM IS ENA ECIMAL) SAY?":MS$" WHAT?":63200!z 50000:T$"STARTUP INSTRUCTIONS FOR 6510":63000L "1) EXTRACT 5 BYTES FROM MEMORY AT" " $8004-$8008.":"2) IF THESE 5 BYTES CONTAIN" " C3 C2 CD 38 30 (IN HEX)" " THEN EXTRACT AN ADDRESS ESS...AND THE 6510 GOES TO THIS" " ADDRESS FOR ITS INSTRUCTIONS."F "WHERE DOES THE 6510 GET THIS 2-BYTE"u " ADDRESS?":MS$" WHERE?":63200:50000 "$FFFC AND $FFFD CONTAIN THIS MAGIC"* " 'STARTUP' ADDRESS."4 "SINC ELS AROUND THE"  " CIRCUITRY. THIS SIGNAL GOES TO A"; " 'RESET PIN' ON MANY OF THE CHIPS WHICH"j " LIVE IN THE MICRO AND SERVES TO BRING" " UP THE CHIP IN A KNOWN STATE" " (WITH INTERNAL REGISTERS SET TO ZERO " WHO? ":63200:500002: " GAME^":MS$" WHAT! ":63200:50000jD " ROMLV$8000-"I MS$" ????? ":63200:50000N " ROMHV$A000- OR $E000-"  ":  " ":R$"":S$""@ "A15"R$:"A14"R$:"A13"R$:"A12"R$q "R/W"R$:"BIT0"S$:"BIT1"S$:"BIT2"S$ " " "  " "    ":""  CHIP ENABLE"" FOR THE CARTRIDGE ROMS."<"THERE ARE TWO OF THEM DEPENDING UPON"f" WHETHER THE 'EXTERNAL' MEMORY IS"" IS IN A 'LO' ADDRESS RANGE"" ($8000-$9FFF) OR A 'HI' RANGE"" ($A000-$BFFF) OR ($E000-$FFFF)." 000:P$""0\""B$:P$"A NORMAL C64 WITH ALL 'INSIDE' MEMORY."Ea50000:""B$f""C$:P$"OUT GOES RAM AT $8000,IN COMES ROM."k50000:""C$p""D$:P$"THERE GOES THE KERNAL TOO!"u50000:" YOU STOP PUSHING THE"%"" THE STICK.":50000&,"A BETTER WAY MAY BE AS FOLLOWS:"F&6"WE PLUG A PADDLE INTO THE 'PORT'"i&@" AT THE SIDE OF THE MICRO."&J"THE PADDLE HAS TWO KNOBS WHICH"&T" CAN ROTATE."&^"ONE KNOB IDE STUFF":63000#"WE MAY WANT THE MICRO TO MOVE SOME"($" SPRITE OR OTHER GRAPHIC GADGET"T$" TO A SPECIFIC POINT ON THE SCREEN."$"WE COULD DO THIS WITH A JOYSTICK"$" WHICH CONTAINS 5 SWITCHES (EITHER OPEN" BLED VIA"!" ROML IN THIS ADDRESS RANGE)." ""2) HAVE THE 5 IDENTIFIER BYTES AT"7"$" $8004-$8008."c"."3) HAVE THE STARTING ADDRESS OF THE""8" CARTRIDGE PROGRAM AT $8000-8001.":50000"B"...PLUS A FEW OTHER DUTIES...""L"  FROM" " $8000/$8001" "3) GOTO THIS ADDRESS AND START"5 " OBEYING THE INSTRUCTIONS THERE!"d "4) IF THE 5 BYTES C3 C2 CD 38 30 ARE" " NOT PRESENT THEN CONTINUE" " WITH THE 'NORMAL' START-UP ROUTINE." MS$ E $FFFC=15*4096+15*256+15*16+12"> " =65532"0H " THEN THE 6510 GOES TO LOCATION"[R " PEEK(65532)+256*PEEK(65533)=64738"\ " IMMEDIATELY AFTER 'POWER-UP'."f "AND WHAT DO YOU THINK":" THE INSTRUCTIONS"p " AT 64738(D .":50000  "THIS RESET SIGNAL ALSO GOES TO THE"9 " 6510! THE MICROPROCESSOR RESPONDS"d " TO RESET BY GOING TO A SPECIFIC" " MEMORY LOCATION AND EXTRACTING 2 BYTES." "THESE TWO BYTES GIVE THE 6510 AN" " ADDR X MS$" I SEE!! ":63200:50000&b "NOW...TO TURN OVER CONTROL TO THE"Rl " CARTRIDGE ROM AS SOON AS THE MICRO"v " IS TURNED ON?":MS$"HOW? HOW?":63200:50000 "WHEN THE POWER IS FIRST TURNED ON" " A RESET SIGNAL TRAV  13)"TO BASIC ROMS($A000-$BFFF)":50000. 13)"TO CHAR ROM ($D000-$DFFF)":50000[ 13)"TO KERNAL ROM($E000-$FFFF)":50000 13)"TO INPUT/OUTPUT ENABLE=CE1!":50000& MS$"SEE CE1!":63200:500000 " EXROM^":MS$ "THESE TWO ENABLE SIGNALS ARE:";" ROML AND ROMH.":MS$" ROMLO":63200:50000TMS$" ROMHI":63300j 63100: MICROS-3 SN$"03000":T$"REVIEW":63000:T11000: "":MS$"REMEMBER?":63300 " ":I110:" "D$z""E$:P$"BASIC GONE..KERNAL BACK"250000:""E$jP$" (FOR GAME=EXROM=0 THERE IS 16K OF"" CONTIGUOUS ADDRESS SPACE AVAILABLE"" FOR THE CARTRIDGE ROM!!)":50000"NOW WE MUST SUPPLY A S$"SEE CE1!":63200:50000I," EXROM^":MS$" WHO? ":63200:50000J," GAME^":MS$" WHAT! ":63200:50000ZJ," ROMHV":MS$" ????? ":63200eJ,50000J," KERNAL SMARTS).":5000063100: MICROS-2&SN$"02000"JT$"CARTRIDGE ROM SWAPS":63000w"THE TWO SIGNALS GAME AND EXROM"" COME FROM THE CARTRIDGE AND CAN HAVE"" ONE OF 4 1/0 CONFIGURATIONS:"" GAME EXRO USUALLY) FOR A GAME"&" CARTRIDGE AND EXROM IS FOR"P" 'OTHER' EXTERNAL ROM.":50000"WHAT 'INTERNAL' MEMORY CAN WE AFFORD"" TO SWAP OUT WHEN THE"" 'EXTERNAL' MEMORY IS ADDED?""$8000-$9FFF L'" 2" MEMORY WITH THE 'EXTERNAL' MEMORY."N <"THE 'EXTERNAL' CARTRIDGE WILL TELL US"y F" WHICH MEMORY IT WANTS AND WE WILL" P" SWAP IT INTO THE ADDRESS SPACE.":50000 Z"WE (THE C64) ASK FOR TWO SIGNALS FROM" d" THE CARTRI " " ABOVE WE WANT SOMETHING SPECIAL"` " FOR PLUG-IN CARTRIDGES!":MS$"CERTAINLY!":63200:50000 "HOW DO WE WANT THE CARTRIDGE" " TO WORK?" "WE WANT TO SLIP THE 'CARTRIDGE' INTO" " THE EXPANSION PORT, TURN ON THE  SIGNALS AVAILABLE";t" AT THE EXPANSION PORT(=CARTRIDGE PORT)"j~" ARE JUST IN CASE YOU WANT TO ADD SOME"" EXTERNAL DEVICE WHICH IS TO RESPOND TO"" ONE OF THESE ADDRESS RANGES."" (THE C64 HAS NOTHING 'INSIDE' WHICH" " 63000*"RECALL THE MAGIC DECODER WHICH"S" PROVIDES CHIP ENABLE SIGNALS"|" FOR ENABLING THE BASIC ROMS AND"" THE CHARACTER ROM AND THE KERNAL"$" ROM AND THE INPUT/OUTPUT"." STUFF (TWO 'INSIDE' CHIPS CALLED"  00010# 63100:SN$"00100"bd53281,15:53280,12:"":" MICROS'N'CHIPS-3"e"":63100f"  OUTSIDE THE MICRO  ":MS$"PONZOTUTOR"g" ============"NPT$PT$"ϣϑ"OPT$BT$""PT$""OSN1030:(0)47SN2054$O@OI12:PT$" "NOT150:ZOPT$MS$lOT150: N01:X%X(2U):XXX%(2U):X$X$(48X%)L:ǂ:L M3L!Y$"":VM01:Y%Y(16V):YYY%(16V)L"Y$Y$(48Y%7(Y%9))::M"";6ML(T$):UU$"":I1L:UU$UU$" "::TT$UU$T$UM" ";:I1L:"";::""uM" ";:I1L:" "  ROMLV":MS$" "J,63200:50000:"BUT THAT'S ANOTHER STORY"K,MS$"AU REVOIR!":63200K,SN$"00010":63520:UK,"":X)" ":I110:X)" "xK,:X)" ":" M"" 1 1"" 1 0"+" 0 1"A" 0 0"y"WE (THE C64) WILL":"RESPOND TO EACH LIKE SO:" MS$"GO!GO!GO!":63200:50000:"""GAMEXROM8000-9FFFA000-BFFFE000-FFFF" " IS GOOD. (THAT'S FREE RAM"3" WHICH LIVES JUST UNDER THE BASIC ROMS"M" AT $A000-$BFFF)."z"$A000-$BFFF IS GOOD. (THE CARTRIDGE"" WON'T USUALLY NEED BASIC).""$E000-$FFFF IS GOOD. (THE CARTRIDGE"" MAY NOT NEED THE  DGE (EXROM AND GAME)"5 n" AND DEPENDING UPON THE 1/0 VALUES OF"b x" THESE SIGNALS WE SUPPLY AN ENABLE" " FOR A CERTAIN ADDRESS RANGE AND AT" " THE SAME TIME DISABLE THE COMPETING " " 'INTERNAL' MEMORY.""GAME IS (  MICRO"& " AND HAVE THE PROGRAM IMMEDIATELY IN"c " CONTROL AND RUNNING.":MS$"LOOKS GOOD":63200:50000 "SINCE THE C64 MICRO ALREADY HAS ABOUT" " AS MUCH MEMORY AS IT CAN USE, WE NEED" (" TO BE ABLE TO REPLACE SOME 'INTERNA RESPONDS TO THESE ADDRESSES..EXCEPT"E " THE EVERPRESENT RAM-AT-THE-BOTTOM"r " WHICH IS NORMALLY DISABLED.)":50000 "THERE ARE A VARIETY OF 'OUTSIDE'" " DEVICES WE WANT TO ACCOMMODATE." "IN ADDITION TO THE 2 'ENABLES' NOTED $8" CIA #1 AND CIA #2..EACH A 6526.."OB" AND TWO ENABLE SIGNALS WHICH GO"zL" OUT THE EXPANSION PORT WHEN THE"V" ADDRESS BUS HAS AN ADDRESS IN THE"`" RANGES $DE00-$DEFF AND $DF00-$DFFF).":50000 j"THE TWO ENABLE ":63200;hMS$" WELCOME! ":63200:53280,15ri"NOTE:HIT THE @-KEY AT ANY"j" TIME TO RETURN TO AN":" EARLIER SECTION...":5000063100: MICROS-1SN$"01000"T$"THE EXPANSION PORT":::OD63200:T11000::O VS(SN$):VSVS1000:VS1000VS100OSN$((VS),2):SN$("00000"SN$,5):63520:P I15:SNI1,((SN$,I,1))::"N~PT$PT$"Σ ;::""M" ";:I1L:"";::"":"";MI1L:(TT$,I1,L):"";:T150:M:"":M|BT$""FN}PT$""N~PT$PT$"Σ "K-L(A$):I1L:X5)(A$,I,1):K -"":L(B$):I1L:X9)(B$,I,1)::K:"":14999L:63100:MS$"AU REVOIR!":63200:SN$"00010":63520+LPáA$:A$""50000@LQáA$:A$""50001RLRËA$"@"63500XLSÎ`L8N3L9X$"":U DECODER FOR THIS)" :500004#"THEN WE FEED THE 2 INPUTS WITH THE"5#" NEXT 2 BITS ON THE ADDRESS BUS.":5000035#"A11":"A10"k5#" (WE CALL THE 16 BITS ON THE"5#" ADDRESS BUS: A0,A1,...,A15)":500005 OUTPUTS THE VARIOUS ENABLES":50000GV," ":I110:" ":G`," ":R$"":S$""#Hj,"A15"R$:"A14"R$:"A13"R$:"A12"R$THt,"R/W"R$:"BIT0"S$:"BIT1"S$:"BIT2"S$mH~," "H," TO PROVIDE SEVERAL ENABLES"E+" FOR LOTS OF CHIPS,AND WHICH CHIPS GET"E+" ENABLED IS TO DEPEND UPON SUCH"'F+" THINGS AS THE ADDRESS BUS BITS,"YF+" 3 BITS IN MEMORY LOCATION 1(REMEMBER?)"F," AND WHETHER WE ARE READ MES OUT "Cf+" DEPENDS UPON WHAT"Cp+" WHAT GOES IN!":50000:""Cz+"FOR A ROM MEMORY CHIP THE INPUTS"#D+" ARE THE BITS FROM THE ADDRESS BUS"OD+" WHICH TELL THE CHIP WHICH INTERNAL"{D+" MEMORY LOCATIONS ARE SUPPOSED TO"D RE DOES "AP(PS$"CE1 REALLY ":PS$"COME FROM? "AZ(I17:PS$" "::50000Ad(MS$"PATIENCE!":63300B*63100: MICROS-11!B*SN$"11000"(PS$"THE $DXXX":PS$"MEMORY RANGE"-@?(PS$"GETS SPLIT":PS$"INTO 4 1K"Q@@(PS$"CHUNKS....":PS$"WITH THE"w@A(PS$"LAST SPLIT":PS$"AGAIN INTO"@B(PS$"4 CHU '" ='" ^ ='" CE1 TO CIA #1>'" A9 TO CIA #2)>'" A82TO4H>'" g>'" >'" ^ > 7)"":27)"":" 'BOTTOM' IS 'FREE' RAM";'27)"":27)"":"";9<'"";W<'I14:" ";:t<'I14:"";:<'50000:"LE THE 1K: $DC00-$DFFF"9%" GETS DIVIDED INTO":" 4 256-BYTE CHUNKS!":50000 :%MS$" WHEE!!":63300:10000I:%" ":I12:" ":}:&%I12:" "::" ^CE"::'63100: MICROS- 0:"(WHETHER THEY NEED IT OR NOT)"7$50000:"AND THE $DC00-$DFFF ENABLE...?":500008$"":9500:"A9":"A8"F8$"=$DC00-$DFFF ENABLE!":50000_8$PS$""8$PS$"TO 6526 I/O CHIP#1":"($DC00-$ #"NOW WE HAVE 4 CHIP ENABLE OUPUTS FOR"5#" ADDRESS RANGES:$D000-$D3FF/$D400-$D7FF".6$" :$D800-$DBFF/$DC00-$DFFF":50000f6$"":PS$"":PS$"TO 6567 VIDEO CHIP"6$PS$"TO 6581 SOUND CHIP"6|$PS$"TO COLOUR  "H,"    ":""H,13)"TO BASIC ROMS($A000-$BFFF)":50000I,13)"TO CHAR ROM ($D000-$DFFF)":50000>I,13)"TO KERNAL ROM($E000-$FFFF)":50000nI,13)"TO INPUT/OUTPUT ENABLE=CE1!":50000I,M ING OR WRITING"F," (AS IN WRITE TO RAM & READ FROM ROM)G," THEN WE NEED A CHIP WHICH HAS AS INPUTS"4G$," ADDRESS BUS BITS,3 BITS FROM LOC'N 1,"dG.," THE READ/WRITE LINE, ETC. ETC. "GL," AND HAS AS +" GIVE UP THEIR DATA TO THE OUTPUTS"D+" ...NAMELY THE DATA BUS.":50000D+"AND THE CHIP ENABLE IS ALSO AN INPUT"/E+" TELLING THE CHIP : KEEP OFF THE BUS"fE+" (UNLESS, OF COURSE, CHIP ENABLE = 0)":50000E+"IF WE WANT "    "B*+L(A$):I1L:(A$,I,1);::T150:C4+I1L:(B$,I,1);::A$"INPUT":B$"OUTPUT":C>+63000:X25:11500:"IN GENERAL A CHIP HAS"VCH+" SEVERAL INPUTS AND"pCR+" SEVERAL OUTPUTS."C\+"WHAT CO NKS!":50000@C(DN$"":DN$"THE LAST 4 CHUNKS?":50000@D(DN$"2 FOR 'INSIDE' I/0.."9AE("CIA #1CIA #2"pAF(50000:DN$"2 FOR 'OUTSIDE' I/0! ":50000AK(""PS$" WHE '" CE2 >(" "> (" CARTRIDGE" ?("  PORT "3?(50000:MS$"$DXXX=CE1":63200:50000r?((PS$"":""PS$" NOTE"?2(PS$"OVERBAR ON" T'S LOOK MORE CLOSELY"< '" AT THE TOP RAM/ROM.":MS$"GO!GO!GO!":63200:50000 =$'T$"$D000-$DFFF:TOP STUFF":63000:"" =t'" ;=~'" A11 VIDEOV='" A10 SOUNDt='" 2TO4COLOUR='" = 10:'SN$"10000":'T$"RECAP ON $D000-$DFFF":63000:'"IT HAS 3 LAYERS:";'" 'TOP' IS VIDEO,SOUND ":27)""P;'" COLOUR ROMő & INPUT/OUTPUT":27)"";'27)"":" 'MIDDLE' IS CHARACTER ROM":27)"";'2 DCFF)"8$500008$PS$"TO 6526 I/O CHIP#2":"($DD00-$DDFF)"8$5000039$PS$"TO CARTRIDGE:I/O #1":"($DE00-$DEFF)">9$500009$PS$"TO CARTRIDGE:I/O #2":"($DF00-$DFFF)"9$500009$" ROM CHIP"6$PS$"$DC00-$DFFF ENABLE"6$50000:"NOW THE 4K ADDRESS RANGE FROM"7$" $D000 TO $DFFF HAS BEEN DIVIDED"B7$" INTO 4 1K CHUNKS.":50000y7$"EACH OF THE VIDEO,SOUND AND COLOUR ROM"7$" CHIPS GET 1K,":5000 0"zT$"MORE ON $D000-$DFFF TOP RAM":63000" "$D000-$D3FF=VIDEO CHIP=1K BYTES"M "$D400-$D7FF=SOUND CHIP=1K BYTES"} "$D800-$DBFF=COLOUR MEMORY=1K NYBBLES" "$DC00-$DCFF=6526 I/0 CHIP=256 BYTES" "$DD00-$DDFF=6526 ER?"2Z#" ":I12:" ": 3d#I12:" "::" ":50000`3n#"DECODERS ALSO NEED A CHIP ENABLE!":500003x#"^CE=0 TO ENABLE OUTPUTS"3 ";:"F E D C B A 9"0 "";:I17:"";::" "1 " 74154"I1 "";:I14:"";::I125:"";::" "r1 " ":" TOP FOUR"1 " BITS OF":" ADDRESS PS$" FOR 16 'OTHER' CHIPS!!!".D 50000.N PS$"THE 4 INPUT PINS CAN BE"/X PS$" CONNECTED TO THE TOP 4";/b PS$" WIRES OF THE ADDRESS"^/l PS$" BUS, SO WE CAN IDENTIFY"/v PS$" THE FIRST HEX DIGIT! "/{ 50000:MS$"TERRIFIC!!":63300/ 16 OUTPUTS":63200:50000,"":I14:" "(13)"":+-MS$"4 INPUTS":63200:50000:PS$"":I115:PS$PS$"":U-""PS$"LET'S SEE HOW IT WORKS."{-""PS$"HIT RETURN 16 TIMES!"-O$"1111111111111111"-I015:O$(I)(O$ 5),O$(15)*JT$"DECODER CHIPS":63000*T"THERE ARE SOME NICE CHIPS"+^" WHICH HAVE N INPUTS AND"9+h" GIVE 2^N OUTPUTS."Z+nI07:XI:51000:I$(I)X$:+r"ONLY ONE OUTPUT WIRE IS 'LOW'"+|" (OR 0) DEPENDING UPON"+" WHICH PECIAL MEMORY"(B" LOCATION (A REGISTER INSIDE A CHIP)")L" AND THIS SWITCHES THE CHARACTERS";)Q" TO A 'LOWER CASE' SET."h)V"BUT POKE59500,14 WILL PUT 14 INTO")`" THE SAME MEMORY LOCATION!!":50000)j"NOTE THAT THE 00&MS$"DECODING!!":63300:50000'"THIS LITTLE OL' 256-BYTES"*'" ANSWERS EVERY WHEN THE 6510"N'" CALLS...AND HE/SHE ANSWERS"t'" 8 TIMES FROM $D800 TO $DFFF!"'"THERE APPEARS TO BE 2K OF"'" MEMORY...BUT IT'S JUST " MEMORY _ $\" 8 WIRES"%fPS$""7%p"":PS$"CHIP ENABLE=0"_%zPS$"FOR ADDRESS":PS$"$D800-D8FF"w%PP$" 1101 "%50000:PS$" BUT ALSO FOR":PS$"$D900-D9FF"%PP$"1001":  BUS WITH $D8XX""" 1101 1000 XXXX XXXX"#" ".#" "L#" ݰ "j#" ݰ۽ "#" ݭ "#" ݰ۽ "#"  I/0 CHIP=256 BYTES"!"$DE00-$DFFF=NOTHING THERE.":500005!">>1K BYTES FOR THE VIDEO CHIP?":50000n!">>BUT IT ONLY HAS 47 INTERNAL REGISTERS!?":50000!X63100: MICROS-7!YSN$"07000"!bT$"PARTIAL DECODING":63000!l"CONSI #" (ELSE ALL OUTPUTS=1)":500003#"":9500:"NOW WE ENABLE OUR DECODER"4#" WHEN THE TOP 4 BITS ON THE"C4#" ADDRESS BUS ARE 1101":50000~4#"CE=0 WHEN ADDRESS BUS=$DXXX":500004#"(WE COULD USE A 4-16 BUS"1 " ":MS$" SLICK":63200:500001(#63100: MICROS-9 2)#SN$"09000"'22#T$"MORE DECODING":63000G2<#"BESIDES THE 74154 ";}2F#"4-TO-16 DECODER"2P#" HOW ABOUT A NICE 2-TO-4 DECOD  "THE PET USES THIS 74154 TO"0 " ENABLE THE 4K ROMS WHICH LIVE"+0 " AT $B000-$BFFF OR $C000-$CFFF"J0 " ETC.. OR $F000-$FFFF."i0 "":I17:"ROM";::0 I17:"";::0 I17:" ";::0 " ,15I)"0"(O$,I):-I015-"":J14:""(I$(I),J,1):&. "";:J116:(O$(I),J,1)"";:;. 50000::""^. PS$"AS YOU CAN SEE, EACH".& PS$" OF THE 16 OUTPUTS CAN".0 PS$" BE USED AS CHIP ENABLE".:  OF THE 2^N POSSIBLE"+" 1/0 CONFIGURATIONS"," OCCURS AT THE N INPUTS."&,I815:XI:51000:I$(I)X$:G,50000:MS$" WHAT!":63300p,"TAKE FOR EXAMPLE THE 74154:"," ":I116:" "::" ",MS$"  DIFFERENCE BETWEEN")t" 59500 AND 59468 IS 32..." *~" (=ONE ADDRESS BUS BIT!)":*"THIS BIT IS IGNORED BY THE 'PARTIAL"g*" DECODING' INVOLVED IN ENABLING THIS"v*" CHIP!"*50000*@63100: MICROS-8*ASN$"08000"*E I$(1 THE"'" SAME OLD 256 BYTES ANSWERING"'" AGAIN AND AGAIN..." (MS$"256=2048?":63200:50000L("TO SEE 'PARTIAL DECODING' AT WORK"v($" IN A PET YOU CAN POKE59468,14"(." TO CHANGE TO LOWER CASE."(8"THIS PUTS 14 INTO A S 50000%PS$" AND ALSO FOR":PS$"$DA00-DAFF"&PP$"1010":500007&PS$" AND ALSO FOR":PS$"$DB00-DBFF"M&PP$"1011":50000&PS$" AND ALSO FOR ":PS$"$DF00-DFFF"&PP$"1111":50000&MS$" PARTIAL ":63200:500 "#" NAND "$ " " $" ">$ " "^$*" OR "|$4" "$>" _CE $H" $R DER THE FOLLOWING DECODER FOR""v" A 256-BYTE CHIP WHICH IS "1"" SUPPOSED TO ANSWER THE 6510 WHEN"X"" THE ADDRESS BUS CONTAINS AN"|"" ADDRESS IN THE RANGE, SAY:""" $D800-$D8FF.":MS$"D800=55296":63200:50000""ADDRESS 50000:63300# ("IN DECIMAL WE USE:"` 2" 1000=10^3":" 100=10^2":" 10=10^1":" 1=10^0" <"IN HEXADECIMAL WE USE:":MS$"LOOKS GOOD" F" 4096=16^3":" 256=16^2":" 16=16^1":" 1=16^0" P50000:63300:"IN DE BOTTOM RAM IS 'FREE'.""AND MIDDLE ROM?":500003"THAT'S THE CHARACTER ROM"X(" WHICH STORES THE PIXEL INFO"2" WHICH DESCRIBES HOW TO DRAW EACH"<" CHARACTER...LIKE A,B,C,*,!,ETC.":MS$"HIDDEN ROM":63200F5 "0123456789ABCDEF" I116:(H$,I,1)" ";:T150:::A"":ROM$" ":20)ROM$ROM$" "ROM$ROM$ROM$"$D000-$DFFF IS THREE LAYERS DEEP!":MS$"2RAM&1ROM"63200:50000:I16:"":26)" "T150::"":26)RAM$: :" (CALL THIS BIT 'LORAM')"""MAKE BIT 1=0 AND THE"U," ROM AT $E000-$FFFF IS GONE!!":" (CALL THIS BIT 'HIRAM')"v6"MAKE BIT 2=0 AND THE"@" ROM AT $D000-$DFFF IS GONE!!":50000J"....WELL ..SORT OF...":50000T" T$"GOODBYE ROM":63000 "WE CAN GET RID OF BLOCKS OF ROM!"L"JUST MAKE SURE THAT THE RAM GETS"q" A 'CHIP ENABLE' DURING BOTH"" READ AND WRITE.""AND GIVE THE ROM NOTHING!"MS$"HOW TO DO?":6320 ITE=1 (MEANING 'READ').":MS$"PEEK=READ!":63200B: 50000:63000:"OK...ROM/RAM MEMORY STARTS"kD " WITH THE BASIC INTERPRETER AT"N " $A000...";:50000:" WHICH IS 40960(DECIMAL)..."X 50000:" AND SINCE 'BASIC PROGRAMS' START AT" 00  "IF WE POKE A MEMORY LOCATION"5 " WHICH HAS ROM/RAM, IT CAN'T GO"s " INTO ROM (READ ONLY REMEMBER?)" " SO IT GOES INTO RAM ('UNDERNEATH')." "THE RAM GETS A CHIP ENABLE WHEN" " READ/ " ":T150:\""26)ROM$:T150::Pa50000:"(ALSO THE VIDEO/SOUND CHIPS) "f50000:"8K FOR THE SO-CALLED KERNAL ":50000pI14:""28)" ":T150:z""28)ROM$ROM$:T150:: ::H$"0123456789ABCDEF"/I116:(H$,I,1)" ";:T150:::N"THIS IS THE RAM..." " IN 4K CHUNKS.":MS$"64K WORTH":63200:50000"":ROM$" ":20)ROM$ROM$" "ROM$ROM$ROM$ "THIS IS 20K OF ROM.":MS :" $5678"" SO.. $ MEANS HEXADECIMAL!"7"NOTE:"d" $5678=5*4096+6*256+7*16+8*1"" ="54096625671681"(DECIMAL)":50000"AND..":" $D021=13*4096+0*256+2*16+1*1"" ="1340 CIMAL WE USE 10 DIGITS:"+ Z" 0,1,2,3,4,5,6,7,8 & 9."Z _"IN HEXADECIMAL WE USE 16 DIGITS:" d" 0,1,2,3,4,5,6,7,8,9...":50000:MS$" READY?":63300 n50000:",A,B,C,D,E & F.":50000 x"FOUR BITS 0000:"THAT EXPLAINS WHY YOU MUST"P" GET THE I/O CHIPS OUT-OF-THE-WAY"IZ" TO MOVE THE CHARACTER ROM TO RAM"sd" AND 'CREATE' A FEW CHARACTERS OF"n" YOUR OWN!":MS$"*=PACMAN!":63200:50000p63100: MICROS-6qSN$"0600 T150::50000:"TOP RAM IS INPUT/OUTPUT CHIPS."[" (AND THE VIDEO/SOUND CHIPS":" TO WHICH YOU READ&WRITE.."" EXCEPT FOR MOST OF THE SOUND CHIP.."" BUT THAT'S ANOTHER STORY!)" 50000:" 'ROM' AT $D000-$DFFF IS"^" SORT OF SPECIAL."AhMS$" TELL US!":63200:50000W63100: MICROS-5gSN$"05000"T$"$D000-$DFFF":63000MS$"REMEMBER?":63200"":RAM$"":I116:RAM$;::H$ 0:5000063000:"FORTUNATELY THE 6510 KNOWS HOW!"7"MEMORY LOCATION ONE IN THE"" COMMODORE 64 IS SPECIAL.":T$"MEMORY LOCATION 1"50000:63000:"MAKE BIT 0=0 AND THE"" ROM AT $A000-$BFFF IS GONE!" b " $0801=2049(DECIMAL)...":50000.l " THAT LEAVES 40960-2049 FREE RAM"Yv " FOR WRITING OUR PROGRAMS..":50000 " AND THAT'S HOW MANY":" BYTES FREE?" 50000:MS$" 38911":63200:5000063100: MICROS-4SN$"04000" WRITE=0 (MEANING 'WRITE').":MS$"POKE=WRITE":63200I 50000:63000:"IF WE PEEK A MEMORY LOCATION"s " WHICH HAS ROM/RAM, THEN WE GET" " THE ROM (READ ONLY!)."& "THE ROM GETS A CHIP ENABLE WHEN" 0 " READ/WR 50000:"LOTS OF SMARTS IN HERE!! "_50000:"ALL PILED ON TOP OF RAM!! ":50000T$" HOWSIT WORK? ":63000:MS$"GO!GO!GO!":63300 63100: MICROS-3 SN$"03000" T$"ROM-OVER-RAM":630 $"4K CHUNKS!":63200<*50000:"8K FOR THE BASIC INTERPRETER":50000d4I14:""20)" ":T150:>""20)ROM$ROM$:T150::H50000:"4K FOR THE INPUT/OUTPUT CHIPS":50000RI14:""26) 96025621611:50000:MS$"FAMILIAR?":63300/63100: MICROS-2?SN$"02000"ZT$"C64 MEMORY":63000|"LET'S LOOK AT THE WAY"" MEMORY IS LAID OUT ON A"" COMMODORE 64:":5000063000:"":RAM$"":I116:RAM$; VS. HEXADECIMAL:": BI$(15)+ }I015:XI:51000:BI$(I)X$Q " "BI$(I)"="(48I7(I9)):s MS$"TERRIFIC!":63200:50000 "TO DISTINGUISH '5678' IN" " HEXADECIMAL FROM '5678' IN" " DECIMAL, WE NORMALLY" " WRITE:" DATA IS PERMANENT."B7" THE 6510 CANNOT"B<" WRITE TO ROM."BA"IT CAN ONLY READ ROM."BF50000CK"THE DECODING IS THE"3CP" SAME AS FOR RAM"PCU" BUT THE READ/WRITE"kCZ" LINE IS NOT USED."C_"WHEN THE APP BY"< " A NUMBER FROM 1 TO 16..":50000:" OR WHY NOT 0 TO 15?"^ MS$" YES!YES!":50000:63300z T$"HEXADECIMAL":63000 "WE USE A NUMBER SYSTEM BASED" " ON 16 RATHER THAN 10." "IN DECIMAL, 1234 MEANS:"  :$MS$" OUCH!!":63200:50000=."WE COULD SAY '53281'"W8" OR '64738', ETC."B" BUT WHAT'S THAT IN BINARY":" ....1S AND 0S?"G50000:MS$" OUCH^2":63300L"NO...WHAT WE NEED TO USE"V" IS HEXADECIMAL NOTAT ":63200;hMS$" WELCOME! ":63200:53280,15ri"NOTE:HIT THE @-KEY AT ANY"j" TIME TO RETURN TO AN":" EARLIER SECTION...":5000063100: MICROS-1SN$"01000"T$"1'S AND 0'S ON THE AOD63200:T11000::O VS(SN$):VSVS1000:VS1000VS100OSN$((VS),2):SN$("00000"SN$,5):63520:O I15:SNI1,((SN$,I,1))::"N~PT$PT$"Σ"M" ";:I1L:"";::"":"";MI1L:(TT$,I1,L):"";:T150:M:"":M|BT$""@N}PT$""N~PT$PT$"ΣY%7(Y%9))::K֙"":59468,14:(14)K֙" HESE MICROS'N'CHIPS TUTORIALS ARE"K֙" MEANT TO PROVIDE AN UNDERSTANDING"%L֙" OF MICROCOMPUTER HARDWARE.HEY ARE"RL֙" NOT INTENDED TO BE EXHAUSTIVE."Lי" LTHOUGH THEY REFERI" R/W .WIRES"I" ."I" MEMORY 1_-"I" "I" "J" "J" "4J" DATA"OJ" BUS "eJ" "{J" BESIDES..HOW COME IT SAYS:":" ONLY 38911 BYTES FREE???"GmMS$"IWUZROBBED":63200 Hn50000:"NOW THAT'S ANOTHER STORY!">HoMS$"AU REVOIR!":63200:SN$"00010":63520:WHr" "mHs" "Hw" :MS$"SIN(/2)=1":63200:50000Ec"NOW CONSIDER THE COMMODORE 64:"Ed" IT HAS 64K OF RAM...":50000 :&Fe" RIGHT?":50000:MS$" RIGHT!!":63200:50000LFf"BUT IT'S SMART AND HAS"Fg" LOT'S OF ROM...":50000:" RIGHT?"ROPRIATE"Cd" ADDRESS IS ON THE"Ci" ADDRESS BUS, AND"Cj" THE DECODER SENDS A"Ck" CHIP ENABLE...."!Dn" ROM ALWAYS PUTS"BDs" DATA ON THE DATA BUS."MDx50000iD}"IT IS ROM WHICH"D" CONTAINS THE " 1*1000+2*100+3*10+4*1"G "1 & 2 & 3 & 4 GIVE THE NUMBER"s " OF 1000S & 100S & 10S & 1S" "WE USE A NUMBER SYSTEM" " WHICH GIVES THE NUMBER OF" " 4096S & 256S & 16S & 1S.":MS$" OUCH?" ION."!`"IF WE CONSIDER THE 16 BITS"Bj" OF THE ADDRESS BUS AS"at" 4 GROUPS-OF-FOUR THEN"~" WE CAN DESCRIBE EACH GROUP.""EACH GROUP-OF-FOUR CAN HAVE"" 2^4=16 POSSIBLE 1/0 CONFIGURATIONS"" SO CAN BE DESCRIBED DDRESS BUS":630004"IN ORDER TO EASILY DESCRIBE"Y" THE VARIOUS ADDRESSES WHICH"{" GO ONTO THE ADDRESS BUS"" WE DO NOT WANT TO SAY:"50000:B$(0)" ZERO":B$(1)" ONE "I116:B$(2(1)):T1100: 00010# 63100:SN$"00100"bd53281,15:53280,12:"":" MICROS'N'CHIPS-2"e"":63100f"  BRING ON THE CHIPS  ":MS$"PONZOTUTOR"g"============"NPT$PT$"ϣϑ"NPT$BT$""PT$""OSN1030:(0)47SN2054O:OI12:PT$" "HOT150:TOPT$MS$fOT150::: SPECIFICALLY TO"L י" THE COMMODORE 64, THE IDEAS ARE"Lי" APPLICABLE TO ALL MICROS."L׍50000:"":59468,12:(142):L"";0ML(T$):UU$"":I1L:UU$UU$" "::TT$UU$T$OM" ";:I1L:"";::""oM" ";:I1L:" ";::""J" "JJJPáA$:A$""50000JQáA$:A$""50001JRËA$"@"63500JSÎJ8N3#K9X$"":UN01:X%X(2U):XXX%(2U):X$X$(48X%)+K:ǂ:3K M3aK!Y$"":VM01:Y%Y(16V):YYY%(16V)K"Y$Y$(48ADDRESS"H|" BUS "H" "H" "H" " I" ........."#I" "SN$"05000":T$"MORE MEMORY!":63000>"IF A 2K MEMORY CHIP"?" TAKES 11 WIRES FROM"?" THE ADDRESS BUS"5?" WHAT ABOUT A 4K"K?" CHIP?":50000d?"IT WOULD TAKE "y?" 12 WIRES TO"?" IDENTI " BUS "<" "<" "<" .........." =" "#=" ."<=" DECODER1 ."X=" ._11"v=" R/W .WIRES"=" CHIP":+" ݭ SELECT":0" "::" ";?" CLOCKNOT ";D" ";;I"THIS TAKES CARE OF IT!"Z;N" CHIP SELECT=0 ONLY IF";S" TOP 5=0 AND CLOCK=1":50000;X"ED THE8" PHASE 2 CLOCK."8"ONLY WHEN THE CLOCK"8" SIGNAL=1 WILL"9" THE BUSSES HAVE"!9" VALID DATA.":50000A9"HENCE THE DECODER"^9" MUST NOT GENERATE A"{9" CHIP SELECT, EVEN"9" IF THE ADDRESS I4470:500006h"HOW LONG DOES THE"6m" 6510 KEEP THE "6r" ADDRESS (OR DATA)"7w" ON THE BUSSES?":5000067|"WHILE THE 6510"P7" IS CHANGING FROM"h7" ONE ADDRESS TO"7" ANOTHER, WHAT IS"7" TO PREVENT SO" THE ADDRESS BUS"4" GO TO THE DECODER."4" WHERE DO THE REMAINING"5"" 11 BITS GO ?":50000,5'"SINCE 11 BITS HAVE"B5," 2^11=2048=2K"X51" POSSIBLE 1/0"r56" STATES, THESE 11"5;" BITS ARE PRECISELY"5@" THE N:6510 SETS R/W=0"2" (MEANING WRITE)."2"4:MEMORY TAKES BYTE"*3" OFF DATA BUS.":50000:MS$" WRITE":63300G3T$"X=PEEK(1234)":63000g3"1:6510 PUTS 1234 ON"3" ADDRESS BUS."3"2:6510 SETS R/W=1"3"0[" "0`" DECODER1"0e" "1j" "1o" MEMORY 1"(1t" ">1y" "T1~" "j1" "1" DATA"1" BUS "1. " 6510 PUTS THE BYTE"." ON THE DATA BUS!"/"FORTUNATELY, THE"!/ " 6510 PROVIDES A">/" READ/WRITE SIGNAL"X/" FROM ONE OF IT'S"q/" 40 PINS.":50000/3640:"_";:I110:"R/W50000A "PROGRAMS IN BASIC ARE"A" NORMALLY STORED IN"A" RAM...AND THEY ARE"B" LOST WHEN THE COMPUTER"&B" IS TURNED OFF!":50000FB#"HOWEVER READ ONLY"^B(" MEMORY (ROM)"vB-" NEVER FORGETS!"B2" THEFY ONE OF"?" 2^12=4096=4K"?" INTERNAL LOCATIONS"?" IN A 4K MEMORY CHIP."?" AND THE REMAINING"@" 4 WIRES WOULD "/@" GO TO...?":50000l@" THE DECODER!":50000:MS$"WHERE ELSE":63300@"WE'RE TALKING AB."=" MEMORY 1_-"=" "=" "=" "=" ">" DATA"4>" BUS "J>" "`>" "w>" "}>>>6AND THE PHASE 2";]" CLOCK OSCILLATES";b" BETWEEN '0' AND '1'";g" AT A RATE OF"4 " ݭ "*C " ݭORCHIP" EE! THE TOP 5"' " BITS ARE ALL '0'!":50000' "HENCE:" ( " "( " "+( " "<( " "M( " "b( " "w( " ݭ "( " ݭ "( " ݭORCHIP"( " ݭ" 0"%? " 0"%D " "&I " ݭ "&N " ݭ "2&S " ݭOR0"G&X " ݭ "\&] " "q&b " "&g " ..WILL GIVE A 0"&l " OUTPUT ONLY IF"&q " ALL AD"# ## # 63100: MICROS-3$ SN$"03000":T$"DECODING":63000)$ " ":$ " "K$ " "\$ " "m$ " "$ " "$ " ݭ "$ " ݭ "$ " ݭ"! S$""! S$""" S$"DATA")" S$"BUS "?" S$""U" S$""k" S$""" MS$" NEXT":63200:50000:MS$"AND SO ON":63200" " AG$"X" " " " " " "& " "< " "R " "j S$"" MS$" FIRST":63200:50000 ""S$"" S$"" S$""o " ADDRESS BUS HAS AN"t " ADDRESS IN (0,2047)"!y " ..AND PROVIDE A"=~ " CHIP SELECT TO A"v " MEMORY CHIP...":"...HOW??...":MS$"HOW? HOW?" 63200:50000:3000 " " " " " OUTPUT=1 IF X=0." " OUTPUT=0 IF X=1." ""NG$/$ "THE OUTPUT IS ALWAYS"L) " THE 'COMPLEMENT' OF"}. " THE INPUT.":MS$" NOT X":63200:500003 "A TYPICAL CHIP MAY"8 " CONTAIN SEVERAL GATES."B " THE '7400' HIS IS A"" 2-INPUT AND GATE.")" ":MS$" X AND Y":63200:50000H"IN AN AND GATE"h" OUTPUT=1 ONLY"" IF ALL INPUTS=1.":50000T$"OR GATES":63000"OUTPUT=1 IF"" X=1 OR Y=1 PUT", " ADDRESS '1234' ON", " THE BUS....AND THE"- " SAME 2K CHIP WILL"'- " RESPOND.":50000B- "FOR POKE 1234,5"]- " WE WANT TO WRITE"q- " TO MEMORY."- " FOR X=PEEK(1234)"- " WE WANT TO READ"- *H " ݭ SELECT"*M " ݰ "*R " NOT " +W " "/+\ MS$"AND SO ON":63200:50000M+a "NOW LET'S RETURN TO"d+f " POKE1234,5."+k " THE 6510 WILL PUT"+p " '1234' ON THE"+u " ADDRESS BUS A SELECT"( " "( " " ) " WILL DECODE FOR"") " THE FIRST 2K OF"R) " MEMORY!":MS$"62K TO GO!":63200:50000n) "THE NEXT 2K BYTES") " GO FROM") " 0000 1000 0000 0000") " TO") " 000DRESS BITS=0":MS$"0OR0OR0=0"&r 63200:50000'v "NOTE THAT THE"'{ " FIRST 2K MEMORY":' " SHOULD RESPOND TO"R' " ADDRESSES FROM"o' " 0000 0000 0000 0000"{' " TO"' " 0000 0111 1111 1111"' " (IN BINARY)."' " SORCHIP"$ " ݭ SELECT"$ " "% " "+% "A 5-INPUT OR GATE"E% " CONNECTED TO THE"\% " TOP 5 BITS OF"w%! " THE ADDRESS BUS.."%& 50000%+ " 0"%0 " 0"%5 " 0"%: AND YGATEOUTPUT" # AG$AG$""J# OG$"X OR YGATEOUTPUT"n# OG$OG$""# NG$" NOT XGATEOUTPUT"# NG$NG$"ADDRESS" S$"BUS " ! S$""#! S$"........."9! S$""M! S$""a! S$"DECODER2"u! S$""! S$""! S$"MEMORY 2"! S$""! S$"" " " " " " ........."* " "> " "R " DECODER1"f " "z " " " MEMORY 1" " " " " " IS A"G " 14 PIN CHIP WITH" L " FOUR 2-INPUT NANDS."%Q " (A NAND IS AN"@V " AND FOLLOWED BY"V[ " A NOT...AN"` " 'INVERTED AND').":MS$"NAND GATE!":63200:50000e "TO BUILD A DECODER"j " TO RECOGNIZE WHEN THE ."""OG$"THIS IS A "" 2-INPUT OR GATE."G" ":MS$" X OR Y":63200:50000e "IN AN OR GATE" " OUTPUT=0 ONLY" " IF ALL INPUTS=0.":50000 T$"NOT GATE=INVERTER":63000 "  00010# 63100:SN$"00100"G53281,15:53280,12:"":55000d53281,15:53280,12:"":" MICROS'N'CHIPS-1"e"":63100f"  ADDRESS DECODING  ":MS$"PONZOTUT Y CHIP.">MS$"WAKE UP!":63200:50000:2440:50000/C"IF THE ADDRESS IS"LH" IN (2048,4095) THEN"qM" THE NEXT DECODER"R" MUST SEND A SIGNAL"W" TO THE 2ND CHIP."\" ETC.ETC."a"THESE CHIP SE E AN ASSOCIATED"" ADDRESS DECODER"$" CIRCUIT WHICH WILL">" CONSTANTLY CHECK"Y" THE ADDRESS BUS"v" TO SEE IF THE 6510"" WANTS TO TALK TO IT!":50000"FOR OUR EXAMPLE:" " POKE 1234,5"" THE V 510":"16 WIRE"/"ADDRESS"J" BUS"h"8 WIRE"" DATA"" BUS""6510":"";I1(A$s" DATA FROM THE BUS"!x" WHEN THE ADDRESS IS"Q}" 0 TO 2047, AND ANOTHER"q" CHIP WHEN THE ADDRESS"" IS FROM 2048 TO 4096,"" AND ANOTHER"" WHEN THE ADDRESS"" IS FROM 409G:"-" POKE 1234,5":" THE 6510 EXPECTS"82" THE MEMORY AT LOC'N"f7" '1234' TO ACCEPT":" THE NUMBER '5'"<" WHICH IS ON THE":" DATA BUS!":50000=T$"MEMORY":63000A"'MEMORY' IN A MICRO"F" IS JUST MORE CHIPS) " MAY BE ON THIS BUS.":MS$"DATA=0-255":63200:50000U "SUPPOSE WE PERFORM":" POKE M,N"o " THEN:0<=M<=65535" " AND 0<=N<=255.":"CONSIDER:" " POKE 1234,5":" THE 6510 PUTS" " THE NUMBER '1234'" " ON THE":MS$"HI=1 LO=0", 63200:50000:1455:1480:50000G "SINCE EACH OF 16"| "  ADDRESS BUS WIRES":" MAY BE 1 OR 0" " THERE ARE 2^16=65536" " POSSIBLE 'ADDRESSES'":"RANGING FROM" " 0 TO 65535." " 2^10=1KY IS VIA :" Q" AN ADDRESS BUS"> V" AND A DATA BUS.":50000L [""e `" _BUS(?)"u e"" j" ":T11000: o"TO 16 PINS OF" t" THE 6510 ARE " y" CONNECTED WIRES":" CALLED THE":"ARLIER COMMODORE MICROS":" IT'S A 6502."IMS$"HIT A KEY!":63200:50000j"THE 6510 CAN EXECUTE"" SOME 56 INSTRUCTIONS"" SUCH AS ADD,SUBRACT"$" ETC.ETC.(ALL PRETTY EASY)..")" EACH INSTRUCTION":" EXECUTED ISOR"9g"":63200_hMS$" WELCOME! ":63200:53280,15i"NOTE:HIT THE @-KEY AT ANY"j" TIME TO RETURN TO AN":" EARLIER SECTION...":5000063100: MICROS-1SN$LECT"f" SIGNALS ARE USUALLY"k" '0'. HOW ARE"Jp" THEY GENERATED??":MS$"I GIVE UP!":63200:50000iuT$"GATES 'N' SUCH":63000z"THERE ARE THREE"" (AMONG OTHERS)"" STANDARD ELECTRONIC"" CIRCUITS CALLED"ERY FIRST 2K"" CHIP SHOULD RESPOND."." (ANY ADDRESS FROM"N " 0 TO 2047..REMEMBER?)."m%" THIS CHIP'S DECODER"*" MUST RECOGNIZE THAT"/" '1234' LIES IN THE"4" RANGE (0,2047) AND"9" TELL THE MEMOR):(A$,I,1)"";::"";=I1(D$):(D$,I,1)"";::C Y63100: MICROS-2SN$"02000":T$"ADDRESS DECODING":63000"IF OUR MEMORY IS"" IN 2K CHIPS,THEN"" EACH CHIP WILL"" HAV6 TO 6143,""" ETC.ETC.ETC.":MS$" 2K=2048":63200:50000`T$" HOW? ":63000:MS$"I GIVE UP!":63200:50000j2000|"";:I116" ":I17" ":" ""6!"K" THEY COME IN VARIOUS"&P" SIZES BUT WE SUPPOSE"EU" OUR MEMORY CHIPS EACH"bZ" CONTAIN 2K BYTES."~_" (EACH BYTE BEING"d" 8 BINARY BITS).":50000i"ONE OF THESE MEMORY"n" CHIPS SHOULD ACCEPT" ADDRESS BUS" " AND THE NUMBER '5'"9" ON THE DATA BUS.":50000Z"THESE NUMBERS MUST"s" OF COURSE BE IN"" BINARY!!":50000:1455#A$"0000010011010010":D$"00000101":1515:1525:50000("WHEN EXECUTIN SO WE HAVE" " 2^16=64K ADDRESSES"V " WITH A 16 BIT BUS.":MS$" A C64!":63200:50000w "SIMILARLY THERE ARE" " 2^8=256 POSSIBLE" " 1/0 COMBINATIONS" " ON THE 8 BIT DATA BUS" " SO ANY NUMBER: 0-255" ADDRESS BUS."7 ~"TO ANOTHER 8 PINS":" ARE CONNECTED"Q " WIRES CALLED THE"m " DATA BUS.":50000 "THE 'VOLTAGE' ON" " EACH OR THESE 24" " WIRES MAY BE 'HIGH'" " OR 'LOW'...WE'LL":" SAY 1 OR 0. STORED" ." IN MEMORY,SO THE MPU"W3" MUST BE ABLE TO READ":" THESE INSTRUCTIONS"t8" FROM MEMORY.":50000="THE 6510 MUST ALSO"B" BE ABLE TO STORE DATA"G" IN MEMORY (WRITE)." L" COMMUNICATION WITH":" MEMOR "01000"+"THE HEART OF A MICRO IS THE"Z" MICRO PROCESSING UNIT OR MPU."" ON THE COMMODORE 64 IT'S A 40-PIN"" CHIP CALLED A 6510."" ""  6510 _CHIP" " "& "ON EAlSPD 006 PROGRAM.GC>6BADRESS: SYS PD-BIBLIOTEKET, PETER KARLSSON, VARNSTA ULLERSATER, S71040 FROVI, SVERIGEMENUMICROS'NCHIPS1.CMMICROS'NCHIPS2.CM MICROS'NCHIPS3.CMMICROS'NCHIPS4.CMMICROS'NCHIPS5.COMICROS'NCHIPS6.CP  SYS PUBLIC  DOMAIN  SPD-DISK 6/B   00010"C'63520:CPáA$:A$""50000CQáA$:A$""50001CRËA$"@"63500CSÎC8N3D9X$"":UN01:X%X(2U):XXX%(2U):X$X$(48X%)!D:ǂ:)D M3WD!Y$"":VM01:Y%Y(16V):YYY%(16V)wD"Y$Y$(48Y%7(Y%9))::Dϙ" A82TO4Elϙ" Evϙ" Eϙ" ^ Fϙ" CE2 1Fϙ" "RFϙ" CARTRIDGE"sFϙ"  PORT "yFώ DRESS BUS (WHEN 'OL VIC"4" TALKS TO MEMORY) COME FROM THE"5" 'BOTTOM' TWO BITS OF PORT A IN CIA #2."=5"THIS CIA CHIP STARTS AT $DD00 AND"j5" THE VERY FIRST INTERNAL REGISTER IS"5" PORT A...AND $DD00 (HEX)=56576 (DEC)"5 000 0000=$0000"6" TO 0011 1111 1111 1111=$3FFF"7"IF THE TOP TWO BITS OF THE ADDRESS BUS"37$" ARE 10 THEN VIC CAN TALK TO MEMORY"]7." FROM 1000 0000 0000 0000=$8000$78" TO 1011 1111 1111 1111=$BFFF$7B" .008tMS$" RIGHT! ":63200:500008~"AND YOU WOULD THINK THAT TO POINT".9" 'OL VIC TO THE BOTTOM 16K BANK"[9" WE SHOULD CHANGE THE PORT A REGISTER"9" IN CIA #2 SO IT HAS XXXX XX00":"..RIGHT?"9E56576,(PEEK(56576)AND252)OR X)":" GIVES THE BOTTOM BANK WHEN X=3";" AND THE TOP BANK WHEN X=0!":MS$"NOTA15 ETC"#;63200:500009;X63100: MICROS-7I;YSN$"07000";]T$"TWO BITS WORTH OF ADDRESS":63000:"":EE1;b"  X0 _CUT OFF OUTPUT""PORT A:A15 X1 _SELECT ">"PORT A:A14 X0 _CUT OFF OUTPUT">" 6?EE2" NOT":" NOT"x? D$"":R$""?!XX18:YY12VIC.":B0$F3$" "@+"HIT Q TO QUIT.":F$F5$:G$G6$:55000:B1$F4$" "@,B0$:B1$:F$F1$:G$G1$:55000A-F$F2$:G$G2$:55000*A.F$F3$:G$G1$:55000cA/F$F4$:G$G2$:55000:50000:A$"Q" EE 8000,9000A4B0$:B1$:F$F5$:G$G5$:550TS"BT" SO WE NEED TO FEED IT A15 & A14!":EE2:7060B(#"AND THAT'S WHY WE POKE"-C2#" PORT A WITH THE COMPLEMENTS OF THE"LC<#" TOP TWO ADDRESS BITS!"C'50000:"":MS$"AU REVOIR!":63200:"":SN$" Dϙ" A11 VIDEODϙ" A10 SOUNDD&ϙ" 2TO4COLOURD0ϙ" E:ϙ" $EDϙ" ^ KENϙ" CE1 TO CIA #1rEXϙ" A9 TO CIA #2Ebϙ" Fϙ" 8 WIRES "Fϙ" OF DATA BUS +12 VOLTS"Fϙ" . ݰ+5 VOLTS"Fϙ" "Gϙ" 14 WIRES LUMINANCE?Gϙ" OF ...cGϙ"ADDRESS BUSCOLOURGϙ" " SO WE CAN POKE56576 TO CHANGE THE"5" 16K BANK WHICH 'OL VIC CAN SEE!":50000&6"IF THE TOP TWO BITS OF THE ADDRESS BUS"O6" (SUPPLIED VIA PORT A BY CIA #2)"6" ARE 00 THEN VIC CAN TALK TO MEMORY"6" FROM 0000 0000 0.ETC..":50000:MS$"SOUNDS OK":63200:500007L"NOW YOU WOULD THINK THAT TO POINT".8V" 'OL VIC TO THE TOP 16K BANK"[8`" WE SHOULD CHANGE THE PORT A REGISTER"8j" IN CIA #2 SO IT HAS XXXX XX11":"..RIGHT?":632MS$" RIGHT! ":63200:500009"WRONG ON BOTH COUNTS!":MS$"!#$%'&\*+?":50000:63300':"IN FACT THE LOWEST TWO BITS IN THE"R:" PORT A REGISTER ARE COMPLEMENTED":" BEFORE THEY'RE PUT ON THE ADDRESS BUS!":"SO POK ;c" Y3 ;d" Y2 ";e" Y1 " " ݭY1 TO"F>" Y0 RAM"`>" "y>" ݭX3 >" :58000:F1$FF$:G1$"A7"?"XX18:YY13:58000:F2$FF$:G2$"A6"?#XX22:YY14:58000:F3$FF$:G3$"A15"@$XX22:YY15:58000:F4$FF$:G4$"A14"Y@%XX26:YY19:58000:F5$FF$:G5$"X:CAS=0":G6$"Y:CAS=1"@*"RETURN TO SEE THE TOP BITS FOR 'OL  00A5F$F1$:G$G1$:55000A6F$F2$:G$G2$:55000A7F$F3$:G$G3$:55000 B8F$F4$:G$G4$:55000:50000:A$"Q" EE 8000,9000B9F5$"X":7210KB@"AND THIS DATA SELECTOR"BJ" UNLIKE THE LAST ONE, INVERTS OUTPU CH GETS DIVIDED AGAIN INTO"; " FOUR 256-BYTE PIECES...":50000M10000:50000z"..AND THEN THERE'S SID..":5000011000:50000"..AND THE CIA..":50000#16000:50000$"..AND GOOD OL' VIC..":50000-1300 MS$" GOT IT? ":63200: "..WELL, A FEW WIRES 'N' CHIPS ARE"j " MISSING BUT YOU GET THE BIG PICTURE?" 50000:14999:50000 "CAN YOU FIND THE 6510?":50000:14999 50000:"_6510":50000:U$"_6510" Gϙ" RAS _ Gϙ" Gϙ" CAS _ Gϙ" Hϙ" IRQ _ .Hϙ" KHϙ" R/W hHϙ" Hϙ"LIGHT P "Iҙ" "Iә" ADDRESS"Iә" BUS "Iә" "I"ә" "J,ә" .........."/J6ә" "HJ@ә" ."aJJә" DECODER1 ."}JTә" Kә" "Kә" "KӎKցI1NT:F$G$;:O1(G$):"";:KցT150::F$""G$"";:O1(G$):"";:LցT150:::Lڙ"":I12,Lڙ" >Lڙ"A Y3 VLڙ"A Y2 TO "nLڙ"A Y1 RAM"":I115:P$P$"":M$ێMޙ"Mޙ"Mޙ"DATAMޙ"BUS Mޙ"Mޙ" Nޙ"Nޙ".Nޙ" BNߙ" _N ߙ"CE .. PORT A"zNߙ"R/1L:UU$UU$" "::TT$UU$T$O" ";:I1L:"";::""O" ";:I1L:" ";::""O" ";:I1L:"";::"":"";PI1L:(TT$,I1,L):"";:T150:&P:"":JP|BT$""P}PT$"SN2054rQQI12:PT$" "QT150:QPT$MS$QT150:::QD63200:T11000::Q VS(SN$):VSVS1000:VS1000VS100-RSN$((VS),2):SN$("00000"SN$,5):63520:RR I15:SNI1,((SN$,I,1))::":63200;hMS$" WELCOME! ":63200:53280,15ri"NOTE:HIT THE @-KEY AT ANY"j" TIME TO RETURN TO AN":" EARLIER SECTION...":5000063100: MICROS-1SN$"01000"T$"A WEE REVIEW":63000S A BUNCH OF CHIP ENABLES."I" ":50000[14000:50000"AND ONE OF THE CHIP ENABLES GOES TO"" A 2-TO-4 DECODER WHICH DIVIDES A 4K"" BLOCK OF MEMORY INTO FOUR 1K CHUNKS" " ONE OF WHI0:50000 ."":MS$"REMEMBER?":63200Q 8"LET'S PUT THEM ALL TOGETHER...":50000g 63100: MICROS-2 SN$"02000":U$" ":V$"" "":T$"THE BIG PICTURE":63001:MS$" READY?" 63200:50000:14999 50000:"":4 "CAN YOU FIND THE DATA BUS?":50000:14999:V$"DATA"m 50000:"DATA":50000 63100: MICROS-3 SN$"03000":U$"_6510":V$"DATA" T$"ONE-AT-A-TIME...":63000 "NOTE THE BIT0 TO BIT2 REN! Hϙ" Hϙ" CE Hϙ" AEC"Hϙ" CLOCK IN Iϙ" @Iϙ"CLOCK OUT _ GROUND"]Iϙ" cIώ|Iҙ"  ._11"J^ә" R/W .WIRES"Jhә" ."Jrә" MEMORY 1_-"J|ә" "Jә" " Kә" "#Kә" ">Kә" DATA"YKә" BUS "oKә" "Lڙ"A Y0 Lڙ"A X3 Lڙ"A X2 Lڙ"A X1 _SELECT"Lڙ"A X0 _?Lڙ" Mڂ:"":T$"151413127 6 5 4 ":I18$Mڙ""(T$,2I1,2):JMڙ"":B$"11109 8 3 2 1 0 ":I18Mڙ""(B$,2I1,2)::P$"W 8 PINSN ߙ"CLOCK N*ߙ" N4ߙ" CIA N>ߙ"A3 NHߙ"A2 PORT BNRߙ"A1 .. 8 PINSO\ߙ"A0 %Ofߙ" +OpߎGOFF$(D$,YY)(R$,XX):QO"";OL(T$):UU$"":I"P~PT$PT$"Σ============"QPT$PT$"ϣϑ"OQPT$BT$""PT$""lQSN1030:(0)47 00010# 63100:SN$"00100"bd53281,15:53280,12:"":" MICROS'N'CHIPS-6"e"":63100f"  THE BIG PICTURE  ":MS$"PONZOTUTOR"g" :MS$"GO!GO!GO!":63300>"WE HAVE THE LOGIC ARRAY WHICH"j" RECEIVES THE MAGIC BITS IN LOC'N 1"" AND THE R/W LINE AND THE TOP HEX"" DIGIT OF THE ADDRESS BUS & STUFF FROM"" THE CARTRIDGE PORT..."" AND PROVIDE CRYSTAL) IS CALLED PHASE 0""" AND GOES TO THE 6510 AND VIC."X"THE 6510 IN TURN GENERATES PHASE 2":50000"IN THE EARLIER VERSION OF THIS"" MPU (THE 6502), PHASE 0"" WAS RECEIVED AS INPUT  10:54300::50000MS$" READY? ":63300-""THE 6510 CAN BE TOLD TO GO TO SLEEP"U," (FOR AWHILE...) BY SETTING THE"r6" READY PIN TO 0."@"THE 6510 WILL COMPLETE ANY WRITE"E" IT MAY BE DOING, THEN WILL PROMPTLY" ESPONSE"8 " FROM THE 6510. THEY 'LIVE' AT LOC'N 1"e "UNLIKE A MEMORY LOCATION THESE BITS" " DON'T APPEAR WHEN THE ADDRESS BUS" " HAS A 1(DECIMAL)=0000 0000 0000 0001" " BUT ARE ALWAYS PROVIDED BY 6510!" $"CHAREN":I15:54310:54300:J Y1:X15:M$"CASSETTE (3 BITS)":I15:54310:54300:U 50000& "THE ARRAY OF GATES LIVING INSIDE THE"0 " THE LOGIC ARRAY ALSO RECEIVES 4 BITS"5 " FROM THE ADDRESS BUS (A12 TO A15).":50000:""N " ALSO GO TO THE 2-TO-4 DECODERS.":50000:14999QO Y19:X16:M$"A11":I15:54310:54300:P Y20:X16:M$"A10":I15:54310:54300:Q Y22:X25:M$"A9":I15:54310:54300:R Y23:X25:M$"A8":I15:54310:54300::50000HAR":I15:54310:54300:8 Y13:X24:M$"KERNAL":I15:54310:54300::50000f "ONE OF THE ENABLE OUTPUTS FROM THIS" " LOGIC ARRAY CHIP ALSO ENABLES A 2-TO-4" " DECODER WHICH PROVIDES ENABLES FOR" " YET SOME MORE CHIPS!": 4":I15:54310:54300:9 50000:"AND THEN THERE'S 64K OF RAM..":50000:14999v Y5:X27:M$"64KOF RAM":I110:54310:54300: 50000:"AND WHO ENABLES THIS RAM?":MS$"I GIVE UP!" 63200:50000:"THE GREAT SABLING THE " " DATA SELECTOR CHIP WHICH PROVIDES"G " THE ROW AND COLUMN ADDRESSES FOR RAM."x "VIC DISABLES THIS SEL CHIP WITH AEC" " THE ADDRESS ENABLE CONTROL.":50000 MS$" WOW! ":63200 14999:Y4:X2::50000 4 "'CAUSE THE RAM MEMORY CHIPS TAKE"9> " THEIR ADDRESS BITS 8-AT-A-TIME AND"iH " AND CAS (FROM OL' VIC) FEEDS"R " THE RAM THE BOTTOM 8...THEN THE TOP 8"\ " BY ROUTING THE APPROPRIATE 8 BITS"f " THRU' THE 0 !":63001:50000:14999PP19:U08:B$(U)""B$(U)::15025:500006"";:17000:50000nY17:X21:M$"PHASE 0 CLK":I110:54310:54300:50000:MS$"BEG PARDON":63300"THE 'ORIGINAL' CLOCK SIGNAL (GENERATED"" FROM AAND TWO CLOCK"" SIGNALS CAME OUT : PHASE 1 & PHASE 2"A"IN THE C64: PHASE 0 = PHASE 1"n" ":50000"":MS$"MAMMA MIA!":63200"";:17000:50000Y19:X27:M$"READY":I110:543J" EXTRICATE ITSELF FROM COMMUNICATION" T" WITH THE WORLD OUTSIDE ITSELF!"Mh"SHOULD YOU WANT TO HAVE AN EXTERNAL"|r" MICROPROCESSOR CONTROL THE MICRO THEN"|" JUST TELL 6510 TO GO TO SLEEP!"}"  "THESE BITS AND THE THREE BITS FOR THE"K  " CASSETTE DRIVE CONSTITUTE AN I/O PORT"~  " ...ACCESSED VIA LOCATION 1!":50000:14999  Y2:X7:M$"LORAM ":I15:54310:54300:  Y3:X7:M$"HIRAM ":I15:54310:54300: Y4:X7:M14999(: Y14:X7:M$"LOGIC":I15:54310:54300:V; Y10:X5:M$"A15":I15:54310:54300:< Y11:X5:M$"TO ":I15:54310:54300:= Y12:X5:M$"A12":I15:54310:54300::50000D "THE NEXT 4 BITS FROM THE ADDRESS BUSX "THE ENABLE OUTPUTS FROM THE LOGIC"?b " ARRAY WILL (DEPENDING UPON THE INPUTS"sl " TO THIS CHIP) ENABLE SOME ROMS...":50000v " ...OR DISABLE THEM!":50000:14999 Y11:X10:M$"BASIC":I15:54310:54300: Y12:X18:M$"C50000:14999' Y18:X20:M$"2 TO 4":I15:54310:54300:2 50000a Y10:X29:M$"COL":I15:54310:54300: Y8:X34:M$"VIC":I15:54310:54300: Y15:X36:M$"SID":I15:54310:54300: Y22:X29:M$"2 TOVIDEO CHIP":50000* " WITH RAS AND CAS!":50000:14999Y Y7:X34:M$"RAS":I110:54310:54300: Y5:X34:M$"CAS":I110:54310:54300::50000 "AND WHILE VIC TALKS TO RAM IT CUTS" " OFF THE 6510 BY DI1:M$"SEL":I110:54310:54300:7 Y6:X34:M$"AEC":I110:54310:54300::50000x "AND WHY DOES CAS GO TO SEL?":50000:14999* Y5:X34:M$"CAS":I110:54310:54300:+ Y4:X21:M$"SEL":I110:54310:54300 DATA SELECTOR!":50000:14999$g Y5:X34:M$"CAS":I110:54310:54300:^h Y4:X21:M$"SEL":I110:54310:54300::50000t63100: MICROS-4SN$"04000":U$"_6510":V$"DATA"T$"ENTER THE QUARTERBACK...":63000T$"THE 651 " BUS WIRES TO IDENTIFY ONE OF 2^12=4K"." INTERNAL MEMORY LOCATIONS.":MS$" A0-A11":63200:50000P."...AND IT NEEDS THEM ALL AT ONCE!":50000."NOW WE KNOW THAT OL' VIC HAS A0-A7":50000.18000:Y10:X22:M$"A7A6": /"...IF VIC COULD ONLY GET THESE"0$" OUT TO THE ROM AT THE SAME TIME AS"/0." A0-A7..":50000:MS$"!#$%'&*+=":63300n03"LET'S FIX UP THE VIC PICTURE..":500000813000:50000:19000:500000BY9:X18:M$"A11 ":50000"";:17000:50000"Y22:X26:M$"AEC":I110:54310:54300::50000P"THE ADRESS ENABLE CONTROL PIN"~" WHEN PULLED LOW (=0) WILL TELL THE"" 6510 TO GET OFF THE ADDRESS BUS!":50000"AND CAN YOU GU 0:54300::50000!T$"..A FEW FINAL CONNECTIONS...":63000:50000:14999+!M$(0)" _"F!M$(1)"^"x!I110:Y120(1):X125(1):M$M$(2(1))!J12:54310:54300:::MS$"JES KIDDIN":63200!63100: MICROS- 12000:MS$" DATA":63200:MS$" SELECT":63200:50000-#"LET'S REVIEW HOW VIC TALKS TO MEMORY."Z#"REMEMBER THAT VIC CAN SUPPLY ONLY"#(" 14 OF 16 ADDRESS BUS BITS, AND IT"#2" DOES SO BY PUTTING A0-A7 ON THE BUS"#<" (FOR $x"WHILE VIC TALKS TO MEMORY IT KEEPS"%" THE ADDRESS ENABLE CONTROL LINE"D%" LOW (=0) AND THIS DISCONNECTS"o%" THE ADDRESS LINES FROM 6510 AND"%" CONNECTS THE VIC ADDRESS LINES TO"%" MEMORY."%"WHEN TTOR CHIP"&" INVERTS THE SIGNALS!":50000'63100>'18000:Y10:X22:M$"A7A6":I15:54310:54300:o'"Y20:X22:M$"A5A4A3A2A1A0"',I15:54310:54300::P$""'6P$"CASET THRU'":P$" DATA SELECT CHIP.")rY20:X25:M$"A13A12A11A10A9A8"9)|I15:54310:54300::Y13:X10m)M$"A15A14":I15:54310:54300::50000)Y18:X4:M$"A15A14A13A12A10A11A10A950000*18000:P$"BUT:A6/A7 GO THRU":P$" TWICE AND COME"3+P$" OUT: A6/A7!!":50000:"WATCH A6 COME OUT!"E+50000:18000+A6$"^ݑ^ݑ"+A6$A6$"_TEN!":63300,"WHEN VIC TALKS TO RAM THE "-" A0-A7 THEN A8-A15 (RAS/CAS)"$-" TRICK IS OK."W-"BUT WHEN VIC TALKS TO ROM IT'S "y-" NOTő OK!":50000-"THE 4K CHARACTER ROM NEEDS 12 ADDRESS"-I15:54310:54300:.Y20:X22:M$"A5A4A3A2A1A0"/I15:54310:54300::50000Q/"AND WE KNOW THAT OL' VIC HAS A8-A11.":50000:18000|/Y22:X25:M$"A11A10A9A8"/I15:54310:54300::Y13:X10:50000A10A9 A8 "0LI110:54310:54300:1tY9:X23:M$"4 NEW  PINS ON VIC ":1~I110:54310:54300::50000p1"NOW VIC CAN TALK TO THE CHARACTER"1" ROM (AND EXTRACT THE PIXEL PATTERNS"1"ESS WHO IN THE C64" " CONTROLS THE AEC?":500004 "NOW WHO WOULD WANT TO TAKE CONTROL OF"i " THE ADDRESS BUS (FROM TIME TO TIME)?":50000 "":T$"THE VIDEO CHIP":63001:PP50:14999 Y3:X15:M$"__AEC___":I110:54315!SN$"05000":U$"_6510":V$"DATA","T$"ENTER THE COACH...":63000:T$"BIC VIC !":63001:50000T"15000:CRT1024:(0)47CRT32768"BGCRT60:I07:J019:PKBG40IJ:PK,(PK)128::"50000:13000:MS$" OL' VIC":63200:50000"THE ROW ADDRESS) THEN A8-A13"$F" (FOR THE COLUMN ADDRESS) AND"9$P" CIA #2 PROVIDES A14 & A15."d$Z"THE TOP TWO BITS OF THESE GROUPS-"$d" -OF-8 ARE EITHER A6/A7 (FROM VIC)"$n" OR A14/A15 (FROM CIA #2).":50000HE VIC PUTS AEC=1 THEN 6510"&" IS CONNECTED TO MEMORY AND VIC"?&" IS DISCONNECTED.":MS$"LET'S SEE!":63200:50000m&"WE START WITH AEC=0 SO VIC IS"&" IN CONTROL OF MEMORY ACCESSES...."&"REMEMBER: THE DATA SELEC=1 AND RAS=0"(@P$" AND A6/A7 GET THRU'":P$" DATA SELECT CHIP.":50000L(JY18:X4:M$"A7A6A5A4A3A2A1A0"u(TI15:54310:54300::50000:18000(^P$"CAS=0 AND RAS=1"(hP$" & A14/A15 G")I15:54310:54300::50000 *18000:P$"NOTE:A15/A14  GO"#*P$"THRU ONCE AND"E*P$"ARE INVERTED.":50000|*Y13:X10:M$"A15A14":I15:54310:54300:*Y8:X0:M$"A15A14":I15:54310:54300:: ",DA6$A6$"_":LA(A6$):I1LA:(A6$,I,1);E,NT150:::50000:"":MS$"MAGNIFICO!":63300[,p63100: MICROS-6,qSN$"06000":U$"_6510":V$"DATA",zT$"WHEN VIC TALKS..":63000:MS$" LIS "U$" "@:B$(3)"ݰ_CHARENADDR S ݰ"A:B$(4)" _PHASE2E 64K_CAS"EA:B$(5)"ݰ_R/W LOF ݭAEC"zA:B$(6)" ݭ RAM_RAS"A:B$(7) B:B$(12)" ^ ݭKERNAL ݰ"B:B$(13)"ݭL A ^ "*C:B$(14)"ݭO R ^ S"dC:B$(15)"ݭG R I"C:B$(16)"ݭI A  WHICH GO TO MAKE UP THE CHARACTERS"1" APPEARING ON THE SCREEN:A,B,1,*,=,ETC)."'2"REMEMBER THAT VIC TALKS TO MEMORY"T2" WHEN AEC=0 (AND 6510 IS CUT OFF!)"2"THEN, WHEN VIC SETS AEC=1, 6510 TALKS.":500002"..AND WHE "AU REVOIR!":63200:SN$"00010":63520:3'" 3'" A11 VIDEO4$'" A10 SOUND04.'" 2TO4COLOURE48'" Z4B'" v4L'" ^ 4V'" CE1 TO CIA #1RTRIDGE "5'5*"5+"5 +"5+"6 +"6*+"*64+"<6>+"N6H+" `6R+" r6\+"CE 6f+"R/W 6p+"POTX S ݰ7." 7."A7Y3 7/"A6Y2 8/" ݭY1 TO"@8/" Y0 RAM"Z8&/" "s80/" ݭX3 8:/" X2 8D/"PORLUMINANCE92" OF ...93"ADDRESS BUSCOLOUR:3" $:3" RAS _ A:"3" ^:,3" CAS _ {:63" :@3" IRQ _  ;3"CLOCK OUT _ GROUND";3" ";3!<6" ":I110:" ":E<6" ":R$"":S$""x<6"A15"R$:"A14"R$:"A13"R$:"A12"R$<6"R/W"R$:"BIT0= 714)"KERNAL ROM($E000-$FFFF)":50000=714)"INPUT/OUTPUT ENABLE":50000>7" EXROM^":500000>(7" GAME^":50000p>27" ROMLV$8000-":50000><7" -$BFFF)"?G7"BIT1=HIRAM (CE FOR $E000-$FFFF)" @H7"BIT2=CHAREN (CE FOR $D000-$DFFF)"@P7@:"";@@:B$(0)" CASSETTE"n@:B$(1)"_LORAM "@:B$(2)"ݰ_HIRAM"ݫ VIC"A:B$(8)"ݰ "V$""B:B$(9)"A15 COL ^ "MB:B$(10)"TO BASICݰ "B:B$(11)"A12 CHARݰ^ " D"C:B$(17)"C Y 2 "D:B$(18)" A11TO"CD:B$(19)" ݰ A10 4"qD:B$(20)" "D:B$(21)"N VIC TALKS TO RAM IT"2" PROVIDES A0-A7 THEN A8-A13 (AND CIA#2"3" PROVIDES A14/A15)"M3"AND WHEN HE TALKS TO ROM VIC"3" PROVIDES A0-A11 ALL-AT-ONCE!":MS$"GREAT VIC!":632003(#50000:"":MS$4`'" ^^^ A9 TO CIA #24j'"FROM A82TO45t'"LOGIC #5~'"ARRAY B5'" ^ a5'" CE2 5'" "5'" CAOUND OUTPUT6z+"POTY (MONITOR)6+" 6+"A4 SID TO RF MODULATOR7+"A3 (FOR TV SET)07+"A2 B7+"A1 T7+"A0 f7+" l7+7." 7." T A:A15 X1 _SELECT "8N/"PORT A:A14 X0 _CUT OFF OUTPUT"8X/" 8b/92" 8 WIRES "@92" OF DATA BUS +12 VOLTS"e92" . ݰ+5 VOLTS"92" 92" 14 WIRES  :J3" :T3" R/W VIC :^3" ;h3"LIGHT PEN! +;r3" H;|3" CE j;3" AEC";3" CLOCK IN ;3" "S$:"BIT1"S$:"BIT2"S$<6" "<6"  " =6"    "8=6"LOGICARRAY":""b=614)"BASIC ROMS($A000-$BFFF)":50000=714)"CHAR ROM ($D000-$DFFF)":50000 ROMHV$A000- OR $E000-">A750000 ?B7" V "5?C7""R?D7" CARTRIDGE PORT "?F7"BIT0=LORAM (CE FOR $A000 3>"PLEASE INSERT SPD-006":198,.:198,1:198,.:3n"PLEASE CHANGE SIDE":198,.:198,1:198,.53281,15:53280,12:" SPD-006" "  MAIN MENU  PS 10 A$"2.PONZO TUTOR 2",B$"2.MICROS 'N CHIPS 2` A$"3.PONZO TUTOR 3",B$"3.MICROS 'N CHIPS 3 A$"4.PONZO TUTOR 4",B$"4.MICROS 'N CHIPS 4 A$"5.PONZO TUTOR 5",B$"5.MICROS 'N CHIPS 5 A$"6.PONZO TUTOR 6",B$"6.MICROS 'N CHIPS 6 A$"7 A92 CIA#1"D:B$(22)" A8TO" E:B$(23)" CARTRIDGE PORT ۽  4CIA#2"3E:"";:U9B0B1:(B$(U9),PP)::@E>"";NE>"DATAeE>"BUS +5 VOLTSsE>". E>"  "A0 F ?" F*?" ^ F4?" GROUND"F>?" RESETFH?FhB" +5 VOLTS"FiB" "'GjB" UGkB"OUT_LORAM=BIT0 CASS WRITE=BIT3OUT"GlB"OUT_HIRAM=BIT1 CASS SENSE= IRQ_"HsB" 6510 "HtB" NMI_"IuB" "4IvB" RESET_"\IwB" IxB" JRF"ݰ JSF"ݭ JTF" JUF" DATA JVF" SELECT KWF"(NEG) &KXF" (OUT) EKYF"ݰ ۮݭA7dKZF" ݭA6K[F"ݭA5/A13LdF" A4/A12LeF" A3/A11LfF" A2/A10MgF" A1/A9)MhF" A0/A8"/MiFJM8J" 8 WIRES "pMBJ" OF DATA BUS +12 VO NJ" CAS _ NJ" NJNPáA$:A$""50000NQáA$:A$""50001NRËA$"@"63500NSÎO8N3AO9X$"":UN01:X%X(2U):XXX%(2U):X$X$(48X%)IO:ǂ:QO M3O!Y$"":VM01:Y%I1L:"";::"":"";PI1L:(TT$,I1,L):"";:T150:P:"":P|BT$""*Q}PT$""rQ~PT$PT$"Σ7SN2054qRRI12:PT$" "RT150:RPT$MS$RT150:::RD63200:T11000::R VS(SN$):VSVS1000:VS1000VS100,SSN$((VS),2):SN$("00000"SN$,5):63520:XS 63198:I15:SNI1,((SN$,I,1))::  "5 "n 1,8,0,"$0":I126:#1,A$::#1,D$,A$:1:S(A$)65 D$"G"S1S21 A$"":B$"":S1A$"":B$"" A$"ON SIDE A:",B$"ON SIDE B:" A$"1.PONZO TUTOR 1",B$"1.MICROS 'N CHI.PONZO TUTOR 7",B$"7.MICROS 'N CHIPS 79 A$"8.SPRITE TUTOR 1P "9.SPRITE TUTOR 2e "A.TYPING TUTORw "B.BUTTERMON "PRESS SPACE BAR TO CHANGE SIDE "ENTER YOUR CHOICE. 198,.:198,1:A$:A$" "2 S26,31 A$"1"A$E>" "E>"CE ..PORT A"E>"R/W "E>"CLOCK "E>" _FLAG"F>"_IRQ SP ".F>" CIA CNT"EF>"A3 PC"ZF?"A2 "uF ?"A1 ..PORT B"F?BIT4_IN"GmB"OUT_CHAREN=BIT2CASS MOTOR=BIT5OUT"GnB" HoB" _PHASE 2 CLK ADDRESS BUS(16)"3HpB" DATA BUS(8)"\HqB" _READ/WRITE "HrB"  PHASE 0 CLK_"IyB" IzB" READY_"J{B" ")J|B" ^"NJ}B" GROUND AEC"TJBiJPF"}JQF"ݰ K\F" ^ A15 VICK]F" K^F"ݭ A14 L_F" CASL`F" :LaF" WLbF"64K zLcF"RAMLTS"MLJ" . ݰ+5 VOLTS"MVJ" M`J" 8 WIRES A7 LUMINANCEMjJ" OF .----- NtJ"ADDRESS BUSA0/A8COLOUR=N~J" [NJ" RAS _ yNJ" Y(16V):YYY%(16V)O"Y$Y$(48Y%7(Y%9))::Oԙ(D$,Y)(R$,X)M$:O&SM$M$:M$(M$,2):54300:M$SM$:O"";PL(T$):UU$"":I1L:UU$UU$" "::TT$UU$T$9P" ";:I1L:"";::""YP" ";:I1L:" ";::""P" ";: ============"QPT$PT$"ϣϑ"QPT$BT$""PT$""QBP0B$(23):BP1RPP50:B00:B1230RD$"":I125:D$D$"":NRR$"":I140:R$R$"":kRSN1030:(0)4 "9"A$"A"A$"B"24? I1((A$)10(A$"A")11(A$"B"))21:P$:b "LOAD"(34)P$(34)",8,1"T$ "RUN";:A$"B""NEW:REM STARTA MED SYS50000 198,2:631,13:632,13:"";: A$"1"A$"7"24 I1(A$)2:P$::T$"":2(NCHIPS7* S*,,SPRITES TUT-2*,,B*|WWw7%z9Z^U~Yu{Ug9jMw]Mu_9]tܗe|9iJUڥWLާU~Y){UfjMw]Mu_9]tܗe|jMzWyue׹{W]5v]7|wyr]*WU%%3zWyud{W]5v]7|wyr]󝥩5u]՗^u_)vwut'UՕ)J8" !P*,MI*,PONZO TUTOR-2*,MICROS'NCHIPS2*e "PONZO TUTOR-3*,MICROS'NCHIPS3*,PONZO TUTOR-4*,MICROS'NCHIPS4* #PONZO TUTOR-5*,MICROS'NCHIPS5*,PONZO TUTOR-6*,MICROS'NCHIPS6* $PONZO TUTOR-7*,MICROS'NCHIPS7*,S*,,SPRITES TUT-2*,,T*,,B*[)9)J