Wykrywanie pooəenia prze⇧cznika¢ 1/2 w module RAM-CART'a 1MB¢ (przez program).¢ -BF0DB00B-¢ Krtkie przypomnienie.¢ Modu RAM-CART'a 1MB podobnie jak DRC¢ posiada prze⇧cznik oznaczony 1/2.¢ W pozycji <1> bit2 jako bit2 steruje¢ wej③ciem adresowym A16 pami❎ci.¢ W pozycji <2> bit2 jako zanegowany¢ bit2 struje wej③ciem adresowym A16 pa-¢ mi❎ci.¢ W ten sposb jest moəliwe zbootowanie¢ jednego z dwch moduw 128KB.¢ To w ktrym pooəeniu jest prze⇧cznik¢ jest tajemnic⇧ do momentu uruchomienia¢ moduu. Wtedy wiadomo jaki program¢ zosta zbootowany i na tej podstawie¢ moəna wydedukowa⇨ pooəenie prze⇧cz-¢ nika 1/2. Do tej operacji nie jest wy-¢ magane wysokie I.Q.¢ W module ktry zmontowaem dla siebie,¢ (Glonisz teə taki ma, i Qcyk), dodaem¢ dodatkow⇧ diod❎ LED w kolorze niebies-¢ kim.¢ Dioda ③wieci? Tak. Wi❎c prze⇧cznik¢ jest w pooəeniu <2>. Ale moəe by⇨ od-¢ wrotnie, bo jak mi si❎ co③ poprzesta-¢ wia w czasie lutowania, to efekt wia-¢ domy. Wierzcie mi, to czy ③wieci przy¢ <1> czy nie, nie ma absolutnie znacze-¢ nia. <1> czy <2> to tylko sprawa umow-¢ na. Ty b❎dziesz uəytkownikiem i to Ty¢ przyzwyczaisz si❎ do obsugi moduu.¢ Ale.... warto mc programowo ustali⇨¢ pooəenie prze⇧cznika 1/2.¢ Istnieje taka moəliwo③⇨. Jednak zazna-¢ czam. Kosztem komplikacji ukadu i¢ zagmatwania cao③ci.¢ Otə, rejestr $D501 nie uəywa bitw¢ 3-5. Przy odczycie ich stan to 000 (by¢ lepiej si❎ odczytywao stan tego re-¢ jestru). Nic nie stoi na przeszkodzie¢ by jeden z tych bitw nis sob⇧ in-¢ formacj❎ o pooəeniu prze⇧cznika 1/2¢ Ustalmy od razu, əe b❎dzie to bit3.¢ Jakikolwiek wpis na pozycj❎ bitu3 re-¢ jestru $D501 jest bezcelowy, ale od-¢ czyt nie. Przy odczycie, na pozycji¢ bitu3 pojawi si❎ informacja o stanie¢¢ bitu adresowego A16 steruj⇧cego pami❎⇨¢ moduu. Jak wyəej zaznaczyem, to czy¢ bit A16 jest "0" czy "1" zaleəy nie¢ tylko od ustawienia bitu2 w rejestrach¢ moduu, ale teə od ustawienia prze-¢ ⇧cznika 1/2.¢ Wystarczy zatem odczyta⇨ stan bitu2¢ rejestru $D500 lub $D501 i porwna⇨¢ go z odczytanym bitem3 rejestru $D501.¢¢ --------------------------------------¢ Jeəeli bity s⇧ rwne, to prze⇧cznik¢ jest w pozycji <1>, jeəeli s⇧ rəne,¢ to w pozycji <2>.¢ --------------------------------------¢¢ Pisz⇧c odpowiedni⇧ procedur❎ naleəy¢ wpierw ustali⇨ ktrym rejestrem odbywa¢ si❎ sterowanie bitem2.¢ Jeəeli bity 0 i 1 rejestru $D501 s⇧¢ rəne od 11, to sterowanie odbywa si❎¢ rejestrem $D500.¢ Jeəeli powyəsze bity s⇧ rwne 11, to¢ sterowanie odbywa si❎ rejestrem $D501¢¢ W pierwszym przypadku naleəy odczyta⇨¢ stan bitu2 rejestru $D500 i porwna⇨¢ go z bitem3 rejestru $D501¢ W drugim przypadku, porwna⇨ naleəy¢ bity 2 i 3 rejestru $D501.¢¢ Poniəsza procedura napisana w konwen-¢ cji QA robi co trzeba.¢¢ Komunikaty informuj⇧ o pozycji prze-¢ ⇧cznika 1/2.¢¢ Oczywistym jest, əe procedura jest¢ tylko pogl⇧dow⇧, odpowiadaj⇧c⇧ na py-¢ tanie: jak si❎ to robi.¢ Jak pogwkujesz i pomy③lisz to zopty-¢ malizujesz j⇧ i moəe si❎ okaza⇨ əe¢ b❎dzie o poow❎ krtsz⇧.¢¢ Szukaj: ספנבדג«IJצל¢¢ a b❎dziesz szcz❎③liwy. Moəe nawet na¢ odlego③⇨ zajdziesz w bogosawiony¢ stan?¢¢ * Zenon/DIAL 23.05.2002¢ * Procedura wykrywa pooəenie¢ * prze⇧cznika 1/2 w module 1MB¢¢ opt 22¢ org $0600¢¢ * ktry rejestr steruje bitem D2 (A16)¢ * $D500 czy $D501¢¢ lda $d501¢ and #%00000011 kasuj "③mieci"¢ cmp #%00000011 czy $d501 steruje?¢ bne d500 jeəeli $d500, skok¢¢ * bity 0,1 $d501 = 11¢ * wiec porwnywane s⇧ jego bity 2 i 3¢¢ lda $d501¢ and #%00001100 likwiduj "③mieci"¢ cmp #%00001100 bity 2 i 3 =1¢ beq poz1 tak, pooəenie <1>¢ cmp #%00000000 bity 2 i 3 =0¢ beq poz1 tak, pooəenie <1>¢¢¢¢ * wykryto əe bity 2,3 s⇧ rəne¢ * prze⇧cznik 1/2 jest w pooəeniu <2>¢ * pisz komunikat:¢ * - prze⇧cznik w pozycji <2> -¢¢ kom2 ldx <pol2¢ ldy >pol2¢ jmp $c642¢¢ * bitem D2 steruje rejestr $d500¢ * komrka RAM $00 jako schowek¢¢ d500 lda $d500¢ and #%00000100 kasuj "③mieci"¢ sta $00 zapami❎taj¢ lda $D501 odczyt bitu3¢ and #%00001000 kasuj "③mieci"¢ lsr @ bit3 na poz.bitu2¢ eor $00 porwnaj¢ beq poz1 bity rwne, skok¢ jmp kom2 bity rəne, skok¢¢¢¢ * pisz komunikat:¢ * - prze⇧cznik w pozycji <1> -¢¢ poz1 ldx <pol1¢ ldy >pol1¢ jmp $c642¢¢ * tre③⇨ komunikatw¢¢ pol1 dta c'Pozycja 1',b($9b)¢ pol2 dta c'Pozycja 2',b($9b)¢¢ end¢¢¢ W magazynie SERIOUS #11 podaem sche-¢ mat moduu RAM-CART'a 1MB.¢¢ Jeəeli kto③ chce zmodyfikowa⇨ go by¢ dziaa w/g opisanej tu zasady, powi-¢ nien na schemacie nanie③⇨ nast❎puj⇧ce¢ zmiany, (potem lutowanie).¢¢¢ - przerwa⇨ po⇧czenie pinu bitu3 bu-¢ fora rejestru $D501 z mas⇧¢ - na pin bitu3 bufora rejestru $D501¢ doprowadzi⇨ sygna A16, np. z pinu 7¢ dekodera 7447.¢¢ Po przerbce:¢¢ lda #$03¢ sta $d501¢ lda $d501¢¢ powinno da⇨ odczyt $03 gdy prze⇧cznik¢ 1/2 jest w pozycji <1>, lub $0B gdy¢ prze⇧cznik 1/2 jest w pozycji <2>¢¢ lub:¢ lda #$00¢ sta $d500¢ lda $d501¢¢ powinno da⇨ odczyt $00 gdy prze⇧cznik¢ 1/2 jest w pozycji <1>, lub $08 gdy¢ prze⇧cznik 1/2 jest w pozycji <2>¢¢ Ot, i wszystko. Reszta to efekt pracy¢ koderw. Na pierwszy ogie pewnie pj-¢ dzie rozkaz jmp w powyəszej procedurze¢ by bya relokowaln⇧. Co? ;)¢¢ A dla elektronikw.¢ "Krtki" schemat dotycz⇧cy przerbki¢ jest na kocu tego artykuu.¢ My③l❎ əe b❎dzie pomocny.¢ Jak Sikor w ATARYNCE zamie③ci to co¢ mu posaem, to moəna teə i tam zer-¢ kn⇧⇨.¢ Zamie③ci! Zamie③ci! Na rozkadwce!!¢¢ Moəna pj③⇨ za ciosem i jeszcze na-¢ miesza⇨ w tym wszystkim.¢ Bo... no wa③nie. Jedni mog⇧ chcie⇨,¢ a drudzy nie. Wi❎c jeszcze jeden prze-¢ ⇧cznik. Po co. W jednej pozycji b❎-¢ dzie to "normalny" modu 1MB, a w dru-¢ giej, taki w ktrym moəna odczyta⇨ po-¢ oəenie prze⇧cznika 1/2.¢ Prosz❎ popatrze⇨ na schemat zamiesz-¢ czony w Atarynce #2 na stronach 18-19.¢ Prze⇧cznik zaznaczony jest jako "Z"¢ W pooəeniu w ktrym masa (GND) po⇧-¢ czona jest z pinem 8 ukadu 74244 mo-¢ du jest "normalnym" moduem. W poo-¢ əeniu przeciwpaoənym, z moəliwo③ci⇧¢ odczytu bitu3 rejestru $D501.¢ Polecam ATARYNK② Sikora, SERIOUS #11,¢ tam jest schemat.¢¢ tak jest po przerbce¢ 74244; 74245¢ ____ ____ do pinw 2¢ | | | | pami❎ci¢ | | | | *--> RAM¢ | |--| | |-----*¢ | | | | *--|¢ | |--| | |--| Z¢ | | | |¢ | |--| | |--|¢ |____| |____|¢¢ bufor rejestru Z-prze⇧cznik¢ $D501¢ Zenon/DIAL¢