<L`L5 L5 x"˭#̭0έ1|LV 01./@ԩˍ" #͍ԩZ:ԩ XS HHlTppppFppppppppppppppWA.!5+!02/'2!-/7!.)!7+/$:)%-!3:9./79-+/-0,%479+,!$/7+/$5-!3:9./7%'/0!5,"5..# 7%23*!-5,4) "//402/'2!-4%./$$!7)%,%49'/$.)2/:'29:!.)!*%3,).)%*%34%3#!,+)%-,%.)794/4%.02/$5+4702/7!$:)#)%74!*.)+):!34/3/7!.)!-.%-/.)+/7'2!45,!#*%$,!0!5,!:!7902/$5+/7!.)%4!+730!.)!,9#(+/2%0%49#*):!73:%#(342/../3#4%-!4/7+/$5-!3:9./7%'/:!7!24%4502:9+,!$95*%4%7,%+#*!#($%-/.3425*!$:)!,!.)%).3425+#*)+/$5-!3:9./7%'/02/'2!-94%02!#5*!:39-5,!4/2%-)0/+!:5*!$/+,!$.)%#/3)%34!,/ *!+)%*%34$:)!,!.)%2%*%3425&,!'/7%'/))..9#(2%*%342/7)40.!#)3.)*#42, !C:HHͥL ͍iiɡ  Щ hhl BwD E;HI VLS BD E,HI VLt USUN WSZYSTKIE CARTRIDGE I POWTORZ LADOWANIE . TEN PROGRAM POTRZEBUJE MINIMUM 32K RAM. L L ,/!$).'%22/2L" ̈ɿL0 L" EJK VBD EHIꠈ B VD   ΍0ύ1 xˍ"̍#XL X)Ң L( HvH`0 1ǩ|ȩD RЍЩ./oԩԩ$6%@Ԣ؝D EJKB V{{ 4  ILppB|A K:{{@ {7 L {{{` 4 4 4L$ `é Ġ 4{   4{ 4{ 4 6{{L{${ ' 4 4{ 4{{LF { L {{{AL [L L {' { 5{LF {0L :L {~{ { 4LF { { {{{{L#L {+{LF {LF *{'LF {{LF -{LF {LF ={LF {LF {  5{{L {LLF { {{{{{{  {7L{ 4{ ]L `  % 6{@L {){{ b& ]{{L7 n ]L{{   L 4 4 4 4 5p"q 4 4 4p 4q{ ]  L{{ L {0 G :A`{ș{0{`:{{80m{{L0{87m{{:{{80 m{{L\{87 m{{:{{80m{{L{87m{{:{{80 m{{L{87 m{{`)IL\{ ũ>Ʃ ō{ȱiȱi {L{ 4{` KOREPETYCJE Z KODU MASZYNOWEGO. *******************************  BY PAUL BUNN (C) 1984 NEW GENERATION SOFTWAREWybierz wariant naciskajac RETURN Gdy juz wybrales to nacisnij SPACE ō{{ 4 4{ 4 4{{ 4 4{ 4 4 4 4 6 {{i{Ш{L LH{8 iŅȱŅĠÍ{ȱÅȱÅ 4{>7 {{ { 4{ L{{i{{LL~{ 4 4{ 4  4{LLåĩ<  6 Åą`NACISNIJ KLAWISZ SPACJI H'H{{ {0m{{{i{{Lm{0 d {L{0 {L{0  {L`m{{{i{`v{wxx ȹ` 4 4 4w q{ 4{ 4v q{ 4{ 4 4 4yxL9 q{ 4{ 4xyL,ȹxL9ȹxL9veyvxxL   6YL R  ҩD BDEJKlxBD>EHI V J L JL C:  Czy na pewno chcesz zaladowac dalsze lekcje ? (Y/N) BLV  Please position correct cassette (side two, three or four) and then press PLAY on cassette recorder followed by RETURN on keyboard to start. Do NOT press system reset whilst trying to load. BLAD LADOWANIA. Przewin z powrotem kasete, nacisnij PLAY w magnetofonie a potem RETURN. {{{{{{ o7Gv#w { 4{i 4{ 4 6{{{ٽ{  {{L ;L <{ L v<{#v{{{{L1 @L vivwiw` 4 4 4" 5 { 4 6L v#w{AL{ v{#v{{{{L1 @Lv#w{#LsLNv{?v{{{{{$${{ b{LMLY @L{{ {LM{{{{L1 {{,G ( L]Lȹ{XPYLN{$,ȹ{{ {L7ͅv$w{ L.{{ bL{$)ȹ{{ {:v$w{ L.{{ bL 3v%w{ Lv$w{ L{$'{{ b{*;v$w{ L.ȹ{{ {L|v#w{ L|vP{Ev{{{{2{{{{{{{{hhL1 @L`{{{{hhL1L3{m{{{{m{i{L 4 4 4" 5 Ll{{`{` 4` 4 4 4{ { ~ 4 4 4{ { ~ 4! 4 4{ { ~ 4 4 4{{*i0 4 {jji0 4 {jjjj0i 4 {**i0 4 {ji0 4 {jjji0 4{`{L 4 4 4{  ~ 4 4 4{  ~ 4 4 4{  ~ 4 4 4{)i0 4 4 4 4,{1 4L0 4 4 4 4{jjji0 4 4 4 4{jji0 4 4 4 4{*i0 4 4 4 4{**i0 4`{ q${{{{{`{JJJJ i7{Li0{{) i7{`i0{`{{LY0{{{{8d{{id8 {{i 8{{` 4 4 4 4`{ 4 4 4 4L> 4 4 4 4L^ 4 4{ 4 4 4 4` 4 4{ 4 4 4 4`{ 4{ 4{L4{(LN{$L{{ L{{ b{ );, LN{XLN{)LNROR~SBCSTAADCyAND9CMPEORYLDALDXORASBCSTAADCuAND5ASLCMPDECEORUINCLDALDYLSRVORAROL6RORvSBCSTASTYLDXSTXADCaAND!CMPEORALDAORASBCSTAADCqAND1CMPEORQLDAORASBCSTAJMPLJSR BCCBCSBEQBMI0BNEBPLBVCPBVSp 4 4 4P{ 4{{`+ % 4 4 4{{{{i iL%ȱȱȱ e&ȱȱ e&ȱȱ e&ȱ{ &){ L) ?+`l{ 5{` %hhL {{L)` ׅ{`{{{i` {½{`{®{{{` &m{i` &m{L&+®{{{ȱi­{m{i` %®{{m{{ȱi­{` {{m{i` {{m{Lk' {{{{L+` {{{i{{q{L'`{)l{{{{h) {{`{{ {`{{ {`{{ {`{{ {L) 6hhL {L){`{L){`{L){`{-{{L){){`{ {`J{)L{h) {{`M{{L){)H(*{)L{h) {{`{{,{{) {h) {{`8{`{{ i{{ {L+{L+L({{ {{i{ {L({){`{) H({) {{q{h) {{`{)H({) {jh) {{`{L){{{)M{h) {{`{{L){{`{ {` 4 4 4# 4 6hhL  `{ {`{L){L){{{L){L){) H({) {{{h) {{`{) {{8h) {{`{) {{LR*{) {{LR*{{L){{L){{L){){`{{{L){){`{)L*`{){{`{)@`{)`{)`{)`{)`{)@` + 4L + 6hhL ERROR - ADRES NIE ZNANY {`v+ 48 q{ 4 q{ 4{ 4` ADRES DOCELOWY $z&88+&18 89 "(88+"(88+"(88+&18 89'_88+"(88+'v8|88&18 8=8'_8 8+"(88+"(88+&18 89'_88+"(88+*;;+ &18 89"(88+"(88+"(88+&18 89 '_88+ "(88+p(999&18 89"(88+"(88+"(88+&18 89'_88+"(88+&):++ `(799+ "(88+"(88+(P98+`(799+(/9)98"(88+'}9|8r9`(79=8+(/9)9 8"(88+(P98+`(799+(/9)98"(88+*;;+ `(799+"(88+"(88+"(88+`(799+ (/9)98 "(88+y(999`(799+"(88+"(88+"(88+`(799+(/9)98"(88+"(88+(9 89 "(88+"(88+"(88+(9 89(9"98"(88+(v8 88(9 8=8(9"9 8"(88+(.:++ (9 89(9"98"(88+*;f;+ (9 89"(88+"(88+"(88+(9 89 (9"98 "(88+C)999(9 89"(88+"(88+"(88+(9 89(9"98"(88+(+;++L)998 "(88+"(88+"(88+L)998p)/9"98"(88+(}9 8r9L)99:p)/9"9 8"(88+"(88+L)998p)/9"98"(88++;;+ L)998"(88+"(88+"(88+L)998 p)/9"98 "(88+)999L)998"(88+"(88+"(88+L)998p)/9"98"(88+"(88+4(9 89 "(88+"(88+X(9%894(9 89F(989"(88+)[:%8+"(88+)98 :"(88+X(9%894(9 89F(989"(88+*;9Z; 4(9 89"(88+"(88+X(9%89 4(9 89 F(989 "(88+)9%8 :4(9 89)989"(88+"(88+4(9 89"(88+"(88+N(f:%8=8*(f: 8J8 <(f:8=8"(88+N(f:%8J8*(f: 8J8<(f:8J8"(88+~*9 8B;*(f: 8=8*9 8{:"(88+N(f:%8J8*(f: 8J8<(f:8J8"(88+*;9P; *(f: 8J8"(88+"(88+N(f:%8J8 *(f: 8J8 <(f:8J8 "(88+*9:9*(f: 8J8*9l:{:"(88+N(f:%8J8*(f: 8J8<(f:8J8"(88+b*:%8=8p*: 8J8 "(88+"(88+b*:%8J8p*: 8J8 *[:8+"(88+):%8+p*: 8=8*[:8+"(88+b*:%8J8p*: 8J8 *[:8+"(88+*;:+ p*: 8J8"(88+"(88+"(88+p*: 8J8 *[:8+ "(88+*9:9p*: 8J8"(88+"(88+"(88+p*: 8J8 *[:8+"(88+G*:8=8#*:98 "(88+"(88+G*:8J8#*:98*:8+"(88+*:8+#*:9:):++"(88+G*:8J8#*:98*:8+"(88+*;:+ #*:98"(88+"(88+"(88+#*:98 *:8+ "(88+)9:9#*:98"(88+"(88+"(88+#*:98*:8+"(88+{HHH{Lk5{ɜ{L6ɝ{L6 LC5{L=5 {{L=5 L5γ{{ 5L=5{L5a8 {) { 5L+5i(ǥiȩ{L=5{{({L5hhh`ǩ|ȩȥ{{|L=5 {{α{L=5ǩ|ȭ{δ{i(ǥiL5α{{ 5L=5{HHH{ L4{L5` { i0ХǍ{ȍ{{{|8{ {{{L5 `HH u6{ { {{L@6ILH6hh{`BD{EHI V䭴{ɛ {L@6{{{ `{`{`{`{) {(L5ɇ`H{ai {h{`HH=7ЍЩ @h  hhLbL47HU7T ԍЍh@H{ ԍЍh@L_7{{{` 4 4 4( 4{ 4 4{ 4 4{{ܩ 4 4 4ȩ 4 `셽7 %  6L KONIEC PROGRAMU - KLAWISZ akumulator Rejestr X Rejestr Y Logicz. OR liczba # wartoscia z pamieci Przesuniecie w lewo Ciska rejestr stanu procesora na stos kom. pamieci Break - przerwanie operacjiNieprawidlowa instr. operandu NACISNIJ KLAWISZ 'RETURN' zgas przen.wsk. prawo lewo Obrot Logicz. AND akumulatora Testowanie bitow akumulatora ze stosu Wez Przesun log. wExclusive OR zap.wartoscia z pamieci Dodaj z przerw. kontrolow.Transfer Zapam. do kom. pamieci do wskaz. stosu do akumulatoraSkok do podprogr. Skok - Laduj liczn. program. nowym adresemZmniejsz. Ladujwskaz. stosu do rejestru Xnadmiar Nic nie rob.Zwieksz. tryb dzies. liczbe Odejmij z Porown. nie rowne zero (Z=0)rowne zero (Z=1)Skok, gdy dodatnie (N=0)ujemn.(N=1)Powrot z podprogramu do rejestru Yzap.(C=1)zgas (C=0)zgas przepelnienie (V=0)zapal przepelnien.(V=1){{{L; 4{ 4{ 4 6` ;{{{{{ꭀ{ L<{{{{{ u<{݀{{{{L-<{{{{L;`R< { 4" 4 6hhL BLAD - PODWOJNA ETYKIETA " 4{ 4{ 4 6` 4 4{ 4 6 LA>{ L={BJL={ N{ BA$(A#0L=L=: { ,0L=:L<` { L={) ( L={)( {${), 0 :L=L={),0GA:Ls=hhLN{ ,0:AGL=L=L=ʅ= LL>POWINIEN BYC ODSTEP MIEDZY NAZWA MNEMONICZNA A OPERANDEM. SWIECACA SIE LINIA WYMAGA POPRAWIENIA. x>  4 4{ 4 4 4 4 4 6hhL ETYKIETA NIE MOZE BYC DLUZSZA NIZ SZESC LITER. SWIECACA SIE LINIA ZAWIERA ZBYT DLUGA ETYKIETE. ?G?h?????@1@S@r@@@@A Instrukcje korzystania z programu (A Lekcja 1 - Rejestry G Lekcja 2 - Komorki pamieci H Lekcja 3 - Magazynowanie >M Przyklad 1 do lekcji 3 R Lekcja 4 - Wskazn. flagowe X Lekcja 5 - Dodawan. S Przyklad 1 do lekcji 5 W Przyklad 2 do lekcji 5 RX Lekcja 6 - Odejmowanie Z Przyklad 1 do lekcji 6 ] Przyklad 2 do lekcji 6 ] Lekcja 7 - Zmniejszanie i zwiekszan. 4^ Przyklad 1 do lekcji 7 a WPROWADZ NASTEPNYCH LEKCJI ~WPROWADZENIE Podczas trybu edycji: START- asemblacja OPTION- kasowanie orazSELECT- powrot do menu. Po uruchomieniu programu: SELECT- zastopow. i wylistowanie operacji OPTION- przelaczenie trybu pracy DEC-HEX ESCAPE - powrot do edytora RETURN - powrot do kolejnej operacjiWPROWADZENIE Program demonstracyjny uruchomi sie automatycznie. Jesli chcesz przejsc do edytora to nacisnij klawisz 'escape' Dla uruchomienia programu nacisnij klawisz START. Gdy program skonczy sie to nacisnij SELECT celem powrotu do menu. Jesli chcesz to mozesz skaso- wac program naciskajac OPTION i wtedy mozesz napisac wlasny. Gdy program pracuje to swieci sie odpowiednia ta jego linia, ktora ma byc wykonywana. Jednoczesnie na dole ekranu ukazuje sie komunikat rozkazu, jaki zawiera dana linia. Po nacisnieciu klawisza RETURN rozkaz ten jest wykonywany a wartosci poszczegolnych rejestrow sa aktualizowane. WPROWADZENIE W wytypowanym programie mozesz zmie niac linie naprowadzajac kursor (bez CONTROL) na odpowiednia linie i zmie niajac ja. Jesli nie chcesz wykona nia danej linii to nacisnij SPACE. Jesli chcesz pisac swoj program to nie zapomnij nacisnac klawisz START co powoduje asemblacje programu. Jesli na ekranie ukaze sie napis o bledzie to nacisnij jakikolwiek klawisz dla powrotu do edytora. Po dokonaniu ko rekcji i nacisnieciu START asemblacja ponownie ruszy.   REJESTRY. Rejestry jak male spizarnie potrafia przechowywac liczby o wartosciach od 0 do 255. W mikroprocesorze 6502 (to 'serce' 8 bitowych komputerow ATARI) trzy z nich nazywaja sie: akumulator, rejestr X oraz rejestr Y. W dalszej czesci beda one oznaczone literami A, X oraz Y. Akumulator jest najczesciej uzywanym rejestrem a dwa pozostale sa uzywane do specjalnych celow.  KOMORKI PAMIECI. Program i dane sa przechowywane przez komputer w pamieci. Komorki pamieci sa tak jak rejestry malymi przechowalniami,z ktorych kazda moze pamietac liczby od 0 do 255. 65536 (64K) komorki sa w komputerze ATARI zawarte w pamieci RAM albo ROM. RAM (Random Access Memory) jest pamiecia zmienna. Zawartosc jej mozesz wielokrotnie zmieniac, kiedy tylko chcesz. ROM (Read Only Memory) sluzy tylko do odczytu i jej zawartosci nie mozesz zmienic. Zawartosc jej jest 'wmurowana' na stale przez producenta i pojawia sie kazdorazowo po wlaczeniu komputera. RAM traci swa zawartosc po wylaczeniu komputera.  KOMORKI PAMIECI Program maszynowy oddzialywuje na komorki pamieci. Dokladne dzwieki i zna cznie poprawiona grafika sa kontrolowaneprzez zmiane zawartosci komorek pamieci.Przy pomocy kodu maszynowego mozna wyko nac szybko trudne operacje i otrzymac skomplikowane wyniki oraz wprowadzac bardzo szybka grafike. Program maszynowysam siebie magazynuje w pamieci. Zgrupo wane od 1 do 3 komorki pamieci wykonuja instrukcje, ktora jest egzekwowana w komputerze.  MAGAZYNOWANIE Caly kod maszynowy operuje prostymi instrukcjami, ktore oddzialywuja na rejestry i komorki pamieci. Ladowanie gdzies zawartosci z rejestru powoduje wstawienie tam ostatniej jego wartosci. Instrukcje LDX,LDY i LDA sa instrukcjamiladowania odpowiednio : rejestru X, Y i Akumulatora nowymi wartosciami. Instrukcje STX, STY i STA sa instrukcja mi przechowywania. Kazda z nich powodujezaladowanie podanej komorki pamieci wartoscia z rejestru, zwykle dla pozniejszego odzyskania. W przykladowym progra mie na uwage zasluguje instrukcja BRK. Jest ona umieszczona na koncu programu i uzywana jest do zatrzymania operacji.  MAGAZYNOWANIE Gdy uruchamiasz swoj program to nie wolno Ci ladowac lub magazynowac go w komorkach pamieci o adresie wiekszym od 1023 decymalnie. Wyzsze adresy RAM sa wykorzystane przez NAUKE PROGRAMOWANIA. To ograniczenie nie jest stawiane przezkomputer, ale przez NAUKE PROGRAMOWANIA.Stosuj je po to, by nie zawiesic systemuJesli piszesz wlasne programy to moze sie zdarzyc, ze komputer zawiesi sie. Jesli tak sie stanie, to upewnij sie czypowyzsza wskazowka nie pomoze.  PRZECHOWYWANIE Uzywanie znaku hash (#) ma specjalne zastosowanie. W 6502 zastosowanie tego znaku reprezentuje aktualna liczbe. Tak np. LDA #23 spowoduje zaladowanie akumulatora liczba 23 a nie zawartoscia komorki pamieci o adresie 23. LDA #40 STA 1 STA 1000 LDX #5 LDY #9 STX 500 STY 600 LDA 500 LDA 1000 LDA 600 LDA 1 BRKDODAWANIE W kodzie maszynowym jest to prosto osiagane instrukcja ADC, co oznacza 'dodaj z przeniesieniem' (ADd with Carry). Wskaznik przeniesienia zmienia swa wartosc zaleznie od wyniku operacji.Poniewaz, jak wiesz, komorki pamieci i rejestry moga miescic tylko liczby miedzy 0 a 255, czyli wskaznik ten pokazuje wynik wiekszy od 255. Np: 240+240=480 Tak ? Nie zupelnie. Jesli dodasz 240 do 240 to wynik bedzie 224 oraz wskaznik przeniesienia zostaniezapalony. Jesli wskaznik przeniesienia jest zapalony to do wyniku musisz dodac 256. Czyli: 256+224=480. DODAWANIE Instrukcja ADC dodaje takze wartosci ze wskaznika przeniesienia do wyniku. Tak wiec, jesli wskaznik jest zapalony i do 0 dodamy 0 to wynik bedzie 1. Dlatego, aby wynik byl poprawny nalezy zgasic wskaznik przeniesienia instrukcjaCLC (CLear Carry flag). Obydwa przykladyilustruja powyzsze uwagi. Mozna rowniez instrukcja SEC (SEt the Carry flag) zapalic ten wskaznik. Jest to pokazane w drugim przykladzie przy dodawaniu z zapalonym wskaznikiem. CLC LDA #240 ADC #240 STA 200 CLC LDA #0 ADC 200 CLC ADC #1 BRK SEC LDA #0 ADC #0 BRKCO TO JEST FLAGA ? Flaga jest wskaznikiem, ktory swiecac ostrzega przed czyms. Np: w samochodzie informuje o braku paliwa. Tu przyjmuje tylko dwie wartosci: jeden lub zero. Gdyjeden to sie swieci (set) a przy zerze jest zgaszona (clear). Pierwszy wskaznik rejestru flagowego toWSKAZNIK ZERA. Podczas wykonywania instrukcja wplywa naniego lub nie, zaleznie od instrukcji. Jesli wynik operacji jest zero, to jest on zapalony. Sa inne wskazniki rejestru flagowego aleomowione pozniej. Gdy uruchomisz programwowczas wszystkie wskazniki flagowe pokazuja jeden z dwoch stanow w dolnej lewej czesci ekranu.ODEJMOWANIE W 6502 osiagane jest to podobna droga jak i dodawanie, z ta jednak roznica, zezamiast gaszenia zapala sie wskaznik przeniesienia. Instrukcja, ktora to realizuje to SBC (SuBtract with Carry) - odejmij z przeniesieniem. Przeniesie- nie jest stosowane dla wskazania na 'pozyczke' (borrow). Jesli odejmiesz liczbe wieksza od mniejszej, wtedy przeniesienie zostaje zgaszone. Jesli przed odejmowaniem jest ono zgaszone, towynik bedzie bledny: mniejszy o jeden. Dwa przyklady pokazuja powyzsze uwagi w zastosowaniu. SEC LDA #120 SBC #50 STA 33 SEC LDA #80 SBC 33 SEC LDA #20 SBC #30 CLC LDA #3 SBC #0 BRK SEC LDA #4 SBC #1 SBC #1 SBC #1 SBC #1 SBC #1 BRKZWIEKSZANIE I ZMNIEJSZANIE Powyzszy tytul dotyczy zwiekszania lub zmniejszania o jeden. W kodzie maszyno wym 6502 ma to specjalne znaczenie. Jestbardzo malo takich instrukcji, ktore wplywaja na rejestry i komorki pamieci. Przy zwiekszaniu do zawartosci komorki pamieci dodawane jest jeden i nowa wartosc magazynowana jest z powrotem do tej komorki pamieci. Procedura jest podobna dla rejestrow i zmniejszania. Jesli sprobojesz zmniejszyc wartosc 0 wtedy wynik bedzie 255. Zwiekszajac wartosc 255 otrzymasz wynik 0. ZWIEKSZANIE I ZMNIEJSZANIE W kodzie maszynowym dla 6502 dostepne sainstrukcje zwiekszania i zmniejsz: INCZWIEKSZ. KOMORKI PAMIECI DECZMNIEJSZ. KOMORKI PAMIECI INXZWIEKSZ. REJESTRU - X DEXZMNIEJSZ. REJESTRU - X INYZWIEKSZ. REJESTRU - Y DEYZMNIEJSZ. REJESTRU - Y Przykladowy program ilustruje zwiekszanie i zmniejszanie. LDA #4 STA 230 LDX #212 LDY #34 INC 230 DEY INX DEX INY DEC 230 DEC 230 LDA 230 DEC 230 LDA 230 BRKɀLGŨ  GL G `Ɉ"% RNLM 0L W @` kɈ` Z 0` ZC` WΆ`}$ n0 '0 @! q. !L&!ݩ`"ҍҍҩZ'W呍x_'W呍ꍶ"`Ȉ` P"}