<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 nastepne 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. LOADING ERROR. Przewin kasete a potem nacisnij PLAY i 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 BLAD - ADRES NIEZNANY {`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. ?C?f?????@/@R@{@@@@ A Lekcja 14 - Instrukcje skokow .A Przyklad 1 do lekcji 14 RG Przyklad 2 do lekcji 14 G Przyklad 3 do lekcji 14 H Lekcja 15 - Porownyw H Przyklad 1 do lekcji 15 P Przyklad 2 do lekcji 15 Q Lekcja 16 - Podprogramy WR Przyklad 1 do lekcji 16 %T Lekcja 17 - Zapis szesnastkowy T Przyklad 1 do lekcji 17 e Przyklad 2 do lekcji 17 f Lekcja 18 - Kod BCD eg Przyklad 1 do lekcji 18 k LADOW. NASTEPNYCH LEKCJI \ INSTRUKCJE SKOKOW Sa dwa rodzaje instrukcji skokow: 1) Jump - odpowiednik GOTO w BASICu 2) Branch - odpowiednik IF..THEN..GOTO w BASICu. Dotad przed instrukcja kodu maszynowegobylo puste miejsce (naciskales klawisz spacji). Piszac w tym miejscu etykiete masz mozliwosc dokonania przeskoku w programie, kiedy tylko zechcesz. Wtedy nie naciskaj SPACE ale od poczatku liniipisz etykiete (max.6 znakow) i po niej uzyj SPACE, aby dalej napisac instrukcjeAby instrukcje skokow dzialaly poprawnieto po ich mnemoniku musi byc napisana ta etykieta, dokad program ma skoczyc.  INSTRUKCJE SKOKOW JMP- SKOK (BEZWARUNKOWY) BEQ- SKOK JESLI WSK.ZERA '1' BNE- SKOK JESLI WSK.ZERA '0' BCS- SKOK JESLI PRZENIES. '1' BCC- SKOK JESLI PRZENIES. '0' BVS- SKOK JESLI PRZEPELN. '1' BVC- SKOK JESLI PRZEPELN. '0' BMI- SKOK JESLI ZNAK UJEMNY BPL- SKOK JESLI ZNAK DODATNI PROGRAMY DEMONSTRACYJNE PRZYKLAD 1 Prosty program z uzyciem rejestru X do odliczania wstecz od 10 do 0. BEQ wykrywa osiagniecie 0 przez rejestr X, oraz JMP zapewnia obieg w petli az X osiagnie 0. PRZYKLAD 2 Ten program dzieli 58 przez 5. Rejestr X zawiera wynik, a rejestr Y reszte z dzielenia. PRZYKLAD 3 Ten program dokonuje mnozenia liczby zawartej w rejestrze X (w tym przypadku 5) przez liczbe zawarta w rejestrze Y (w tym przypadku 6). Mozesz latwo zmienic program mnozenia wpisujac inne dwie liczby (takie, by wynik nie przekroczyl 255). LDX #10 LOOP DEX BEQ END JMP LOOP END BRK LDA #58 SEC AGAIN SBC #5 BMI FINISH INX JMP AGAIN FINISH ADC #5 TAY BRK LDX #5 LDY #6 LDA #0 STA 20 LINE1 TYA CLC ADC 20 STA 20 DEX BNE LINE1 JMP DUMMY DUMMY2 JMP END DUMMY JMP DUMMY2 END BRKPOROWNYWANIE Dotad skoki Branch byly stosowane do wykrywania, czy jakis wskaznik jest '1' lub '0'. W istocie wszystkie te skoki mozna poza tym uzywac do porownywania, co jest cenniejsze. Porownywanie jest naturalnie odejmowaniem, ktore absorbujeflagi, zostawiajac zawartosc akumulatoranienaruszona. Wskazniki znaku,przepelnienia, zera i przeniesienia dzialaja po operacji porownania. Dzialanie ich teraz omowimy. POROWNYWANIE Jak wspomniano poprzednio, porownywaniejest w istocie odejmowaniem, zostawiajacakumulator nietknietym. Dlatego wplywa ono tylko na flagi w ten sam sposob. Jednakze podczas porownywania nie jest konieczne zapalanie wskaznika przeniesienia, tak jak przy odejmowaniu. Mozesz dokonywac porownywania miedzy trzema rejestrami i komorka pamieci lub konkretna liczba. Instrukcja CMP sluzy do porownywania akumulatora. Instrukcje CPX i CPY sluza do porownywania odpowiednio: rejestru X i rejestru Y. POROWNYWANIE Wskaznik zera zostaje zapalony jesli porownywane liczby sa rowne, poza tym jest zgaszony. Wskaznik przeniesienia jest zapalony jesli porownywana liczba jest mniejsza lub rowna z rejestrem uzywanym do porownywania. W przeciwnym wypadku jest on zgaszony. Wskaznik znaku pali sie, gdy produkt odejmowania (porownania) ma ujemny znak. Poza tym jest zgaszony. Wskaznik przepelnienia jest zapalony albo zgaszony, zaleznie od odejmowania, zgodnie z zasadami uzupelnienia do dwoch, co juz zostalo omowione. POROWNYWANIE Obydwa podane dalej przyklady pokazuja dzialanie instrukcji porownywania. Przyjrzyjmy sie dokladniej flagom, jak zmieniaja sie one podczas porownywania. Sproboj zmieniac program i zobacz co sie dzieje. A OTO KROTKI OPIS TYCH INSTRUKCJI: CMPPOROWNAJ AKUMULATOR Z LICZBA LUB KOMORKA PAMIECI CPXPOROWNAJ REJESTR X Z LICZBA LUB KOMORKA PAMIECI CPYPOROWNAJ REJESTR Y Z LICZBA LUB KOMORKA PAMIECI START LDX #50 LOOP1 DEX CPX #40 BEQ END1 JMP LOOP1 END1 DEY CPY #254 BNE START CLV CLC LDA #156 CMP #100 BVS ALWAYS NEVER BRK ALWAYS CMP #1 BVC NEVERPROG2 LDX #230 STX 300 LDY #0 LAB1 LDA #230 CMP 290,Y BEQ FOUND INY JMP LAB1 FOUND CLC LDX #4 LAB2 CPX #2 BCC END1 DEX JMP LAB2 END1 BRKPODPROGRAMY Jezeli po instrukcji JSR napiszesz etykiete to calosc posiada taki sam efekt jak GOSUB w BASICu. GdyJSRjest wykonana, to sterowanie programem jest przekazane do linii z etykieta skoku. Na koncu podprogramu musi byc instrukcjaRTS(powrot z podprogramu). Wowczas program wraca do linii nastepnej po tej, ktora zawierala JSR. Oto przyklad programu, pokazujacego zastosowanie instrukcji JSR i RTS. LDA #0 LDX #5 LOOP JSR ADD8 DEX BNE LOOP BRK ADD8 CLC ADC #8 RTS TEN PROGRAM MNOZY PIEC PRZEZ OSIEM.SYSTEM SZESNASTKOWY Obok binarnego i dziesietnego istnieje tez system szesnastkowy. Podstawa zapisujest w nim 16, tak jak w tamtych 2 i 10.W tym systemie kazda z kolumn jest potega liczby 16, od zerowej poczynajac.Poniewaz kazda z kolumn moze uzywac szesnascie roznych cyfr, wiec od 0 do 9 to jest tylko dziesiec cyfr. Wobec tego pozostale cyfry-liczby: 10,11,12,13,14 i 15 zastapiono odpowiednio literami: A,B,C,D,E i F. SYSTEM SZESNASTKOWY Gdyby tych liter nie bylo to liczba szesnastkowa 12 15 11 4 moglaby byc odczytana jako 12 15 1 14. Tak wiec litery A do F reprezentuja liczby 10 do 15. Stosujac te litery powyzsza liczbe zapiszemy jako CFB4. Poszczegolne kolumny reprezentuja nastepujace liczby: 4096 256 16 1SYSTEM SZESNASTKOWY Obliczmy ile dziesietnie wynosi CFB4: C = 12 * 4096 = 49152 F = 15 * 256 = 3840 B = 11 * 16 = 176 4 = 4 * 1 = + 4 ----- Czyli CFB4 oznacza 53172 dziesietnieSYSTEM SZESNASTKOWY Jak widac liczba szesnastkowa nie ma wprost podobienstwa do dziesietnej. Jednakze w stosunku do binarnej jest ono oczywiste. Kazda grupa czterech bitow (nibel) w liczbie binarnej ma swoj odpowiednik w szesnastkowej. Oto odpowiednia tabela: DECIMAL BINARY HEX DECIMAL BINARY HEX 0 0000 0 8 1000 8 1 0001 1 9 1001 9 2 0010 2 10 1010 A 3 0011 3 11 1011 B 4 0100 4 12 1100 C 5 0101 5 13 1101 D 6 0110 6 14 1110 E 7 0111 7 15 1111 F SYSTEM SZESNASTKOWY Korzystajac z podanej tabeli mozna latwo zamieniac liczby szesnastkowe w binarne i odwrotnie. Takze tworzenie uzupelnien do dwoch jest jasniejsze. Naciskajac OPTION mozesz przechodzic z trybu dziesietnego do szesnastkowego i odwrotnie. Wowczas rejestry A, X i Y pokazuja odpowiednio swoje wartosci. Podczas trybu szesnastkowego przed wyswietlana wartoscia umieszczony jest znak '$'. Uzywaj go wtedy, gdy podajesz wartosci w zapisie szesnastkowym. SYSTEM SZESNASTKOWY Juz wiesz dobrze, ze komorki pamieci i rejestry moga zawierac liczby tylko od 0 do 255, czyli osmiobitowe. Szesna stkowo odpowiada to wartosci od $0 do $FF. Dla zapisu liczb szesnastobitowych uzywa sie dwoch komorek pamieci. Te dwa bajty moga pomiescic liczbe 65536 (256*256). Gdy uzywamy dwoch komorek pamieci do zapamietania liczby, to w jednej z nich jest zapisany bajt mlodszy: LSB (Least Significant Byte), a w drugiej starszy bajt: MSB (Most Significant Byte). Np.: zapisujac w pierwszej komorce pamieci: $A1, a w drugiej: $4E otrzymasz liczbe $4EA1, gdyz zawsze trzeba podac najpierw mlodszy a pozniej starszy bajt liczby. SYSTEM SZESNASTKOWY Gdy podczas trybu szesnastkowego dokonuje sie operacji na komorkach pamieci, wtedy komputer pisze 'ADRES DOCELOWY:', a nastepnie '$' i adres komorki pamieci w zapisie szesnastkowym. Obydwa programy demonstracyjne pokazuja zastosowanie omowionych zasad do systemu szesnastkowego. Pamietaj o wcisnieciu OPTION dla przelaczenia w szesnastkowy tryb pracy. Pierwszy program wykonuje mnozenie wartosci rejestrow X i Y, a wynik szesnastobitowy jest umieszczony w odpowiednich komorkach pamieci w postaci bajtow LSB i MSB. Drugi program wykonuje szesnastobitowe odejmowanie. STRONY PAMIECI Stronicowanie pamieci sluzy do okreslania pojemnosci pamieci. Jest to dosc latwe przy liczbach szesnastkowych,gdzie bajt MSB okresla numer strony. Np.: komorka pamieci o adresie $1EA znajduje sie na 1-szej stronie, a takze wszystkie inne o adresach od 0 do 255 Dlatego tez uwaga, ze mozna korzystac z adresow od 0 do 1024 ($0 do $400) oznacza, ze do dyspozycji sa cztery strony pamieci, przy pracy tego programuz symulatorem. Normalnie 6502 moze adresowac 256 stron komorek pamieci RAM i ROM. Tak wiec sa to komorki o adresach od 0 do $FFFF. LDX #$E9 LDY #$A LDA #0 STA 30 STA 31 LOOP TXA CLC ADC 30 STA 30 LDA 31 ADC #0 STA 31 DEY BNE LOOP LDX 30 LDY 31 SEC LDA #$2D SBC #$E2 STA 450 LDA #$3A SBC #$38 STA 451 LDX 450 LDY 451 BRKBINARY CODED DECIMAL (BCD) W tym kodzie liczba szesnastkowa jest rozumiana jako dziesietna. Np.: normalnie liczba $25 jest to 2*16+5 (37) dziesietnie. Jednak w kodzieBCD ta liczba szesnastkowa jest liczba dziesietna 25. Tak wiec, uzywajac BCD i patrzac na wynik operacji okaze sie, ze bedzie on za maly dla systemu dziesietnego lub szesnastkowego bez BCD. Do operowania w BCD 6502 posiada instru kcje SED (SEt Decimal mode), ktora wlacza tryb dziesietny, zas instrukcja CLD wylacza go. Raz uzyta instrukcja SED spowoduje, ze wszystkie operacje ADC i SBC beda pracowaly w trybie BCD. BINARY CODED DECIMAL (BCD) Jesli bedziesz dodawal uzywajac BCD i wynik bedzie wiekszy niz 99 szesnastkowo, to wskaznik przeniesienia zostanie zapalony. Jesli odejmujesz, a wynik bedzie mniejszy lub rowny 0, to ten wskaznik zostanie zgaszony. Przykladowy program uzywa BCD i powinien byc zrozumialy. Nie zapomnij tylko nacisnac OPTION dla przejscia do trybu szesnastkowego, gdyz wynik bylby za maly. SED LDA #$80 ADD1 CLC ADC #1 BCC ADD1 LDA #$95 TAKE5 SEC SBC #5 BCS TAKE5 CLD LDA #242 NORMAL CLC ADC #1 CMP #$1B BNE NORMAL BRKe