home *** CD-ROM | disk | FTP | other *** search
/ Flop Magazin 41 / Flop_Magazin_412_1999_Raster_cs_Side_A.atr / axa.cap < prev    next >
Text File  |  2023-02-26  |  5KB  |  1 lines

  1. Jak se objevuj) strojov[ instrukce¢Radek ③t%rba¢¢Zden%k Burian m% po(*dal, abych napsal n%co m*lo o objevitelsk[ 'innosti, kterou jsme prov*d%li s R.Petru(elou na jedn[ ze sch+zek Atariklubu.¢¢Jako(to jeden ze skupiny v`voj*@+ emul*toru Atari800 pro "vy&&)" po')ta'e jsem @e&il probl[m s neofici*ln)mi instrukcemi procesoru 6502. ¢¢Co to vlastn% je? ¢¢Jak zn*mo, na 8-bit+ lze ud%lat 256 kombinac), a tedy z*konit% existuje celkem 256 strojov`ch instrukc). V r+zn`ch p@)ru'k*ch o assembleru 6502 v&ak najdete popisy jen t%ch ofici*ln)ch. O t%ch ostatn)ch se tak n%jak moc nemluv), proto(e nejsou "'ist[". Prov*d%j) v%t&inou v)ce r+znorod`ch akc) najednou a nal[zt pro n% vyu(it) je mnohdy obt)(n[. ¢¢Vezm%me nap@)klad instrukci LAX. ¢Ta napln) sou'asn% akumul*tor i X-registr p@)slu&nou hodnotou. Lze ji tedy bez probl[m+ nahradit dv%ma klasick`mi instrukcemi LDA a TAX.¢LAX adresa ¢= ¢LDA adresa¢TAX¢¢Existuj) ale i mnohem komplikovan%j&). Takov`m hezk`m p@)kladem opravdu slo(it[ instrukce je OAL.¢Ta provede ORA akumul*toru a hodnoty ◆EE, pak AND s pam%t) a nakonec TAX. Je to tedy velmi zaj)mav* slo(enina:¢OAL hodnota ¢=¢ORA #◆EE¢AND hodnota¢TAX¢¢Soupis v&ech neofici*ln)ch instrukc) se v literatu@e v%t&inou neobjevuje. Za'*te'n)ky by to zbyte'n% m*tlo a p@i klasick[m programov*n) tyto instrukce nepot@ebujete. Jakmile se v&ak stanete zku&en`m "assembleristou" a dostanete se k tvorb% n%'eho n*ro'n[ho, kde by v`po'etn) s)la At*rka nemusela sta'it, mohou b`t elegantn)m @e&en)m.¢¢Softwareov[ emul*tory Atari pro PC ╱atd.$ d@)ve v%t&inou nem%ly tyto instrukce zabudov*ny, a to zp+sobovalo nefunk'nost program+, kter[ je pou()valy. Mezi jin`mi se jednalo nap@. i o m[ho Naturixe, ve kter[m jsou obsa(eny hned dv% takov[ ╱LAX a AXS$.¢¢Tak jsem se rozhodl to napravit. ¢¢Soupis neofici*ln)ch instrukc) doma m*m, tak jsem jednu po druh[ doprogramov*val do emul*toru ╱je naps*n v jazyce C$. P@itom jsem ale narazil na probl[m - 'ty@i instruk'n) kdy nebyly nikde pops*ny. Co te⇦? Nastupuje prav* badatelsk* 'innost.¢¢Jak se zji&④uj) nezn*m[ instrukce?¢¢P@edstavte si, (e zn*te jen kd instrukce a chcete zjistit co d%l*. Zamyslel jsem se nad t)m a stanovil n*sleduj)c) strategii:¢¢1. zjistit d[lku instrukce¢2. zjistit adresn) md¢3. dle vstup+ a v`stup+ zjistit 'innost¢¢------------------¢1. D[lka instrukce¢¢To je celkem jednoduch[. Nap)&ete si n*sleduj)c) progr*mek:¢¢ZACATEK¢  .BYTE kd¢  BRK        ;1.¢  BRK        ;2.¢  BRK        ;3.¢  BRK        ;4.¢¢Pak sko')te na ZACATEK a podle toho, kde do&lo k p@eru&en) instrukc) BRK, odvod)te d[lku instrukce. V pam%ti je:¢kd,0,0,0,0¢N%kter[ z nul budou pochopeny jako parametry instrukce. Pokud se tedy program p@eru&) nap@. na t@et)m BRK, je jasn[, (e m* 2 bytov` parametr.¢¢--------------¢2. Adresn) md¢¢Pokud instrukce nem* parametr, m+(e j)t jen o mdy:¢-akumul*tor¢-implicitn)¢¢Pokud m* instrukce 1 bytov` parametr: ¢-bezprost@edn)¢-nult* str*nka¢-nult* str*nka indexovan* X-registrem¢-nult* str*nka indexovan* Y-registrem¢-indexovan` nep@)m` ╱adr,X$¢-nep@)m` indexovan` ╱adr$,Y¢¢Pokud m* 2 bytov` parametr:¢-absolutn)¢-absolutn) indexovan` X-registrem¢-absolutn) indexovan` Y-registrem¢-nep@)m`¢¢K tomu poslou() program:¢¢ZACATEK¢  LDA #5¢  STA ◆0000¢  LDA #6¢  STA ◆0002¢  LDA #7¢  STA ◆0003¢  CLS¢  CLD¢  CLI¢  CLV¢  LDA #1¢  LDX #2¢  LDY #3¢  .BYTE kd¢  .BYTE 0   ;1 byte parametr¢  BRK¢¢respektive bez parametru nebo¢  .WORD 0   ;2 byte parametr¢¢Opakovan% spou&t)me program a v(dy po prob%hnut) sledujeme v`sledn` obsah registr+, p@)znakov[ho registru, ukazatele z*sobn)ku, p@)padn% obsah adresy 0000, 0002 a 0003. P@i nejasnostech obm%ujeme po'*te'n) hodnoty A, X, Y a po'*te'n) obsah adres 0000, 0002 a 0003 nebo p@)znakov[ho registru. Logickou dedukc) mus)me d@)ve 'i pozd%ji objevit, kter[ hodnoty se m%n) a v z*vislosti na jak`ch, a t)m p*dem adresn) md. Zda se n*m to poda@) z*le() 'ist% na zku&nostech a d+vtipu.¢¢--------------------¢3. ⇨innost instrukce¢¢V druh[m bodu jsme p@esn% zjistili adresn) md. V)me tedy, kter[ registry 'i adresy jsou vstupn) a kter[ v`stupn). Prov*d)me opakovan[ spou&t%n) programu ╱jako v bod% dva$ a vstupn) hodnoty postupn% zvy&ujeme po jedn[ od 0 alespo do 15. Sledujeme v`stupn) hodnoty a v&echno si zakreslujeme na pap)r do tabulky. Hodnoty si pozna'ujeme v HEX i v BIN soustav%.¢Potom se dlouze zad)v*me na pap)r a sna()me se objevit n%jak[ souvislosti vstup+ s v`stupy. Uva(ujeme o sou'tech, odpo'tech, logick`ch funkc)ch ╱AND, OR, EOR$ atd. ⑤sp%ch je podm)n%n op%t jen zku&enostmi, d+vtipem a trochou &t%st).¢¢-------------------¢N*m se to poda@ilo.¢Rozlu&tili jsme 'ty@i nikde nepopsan[ instrukce, z nich( jedna je p@)mo n*dhern*. Nazvali jsme ji AXA a posu⇦te sami, co v&echno najednou ud%l*:¢AXA adresa,Y¢=¢LDA adresa,Y¢AND #◆FD¢TAX¢a je&t% nastav) ukazatel z*sobn)ku na hodnotu obsahu akumul*toru - 4.¢¢D)ky tomu jsem pak mohl i tyto 'ty@i instrukce doprogramovat do emul*toru, ')m( se stal jako prvn) na cel[m sv%t% emul*torem s PLNOU INSTRUK⇨N     SADOU !¢