MultiJoy aktu⇧ln zpr⇧vy...¢Radek t❎rba, raster/c.p.u., 2007¢---------------------------------------¢¢A jsme tu op❎t s na③ m (zd⇧ se) nekone⇨n⑨m seri⇧lem k problematice MultiJoye, i kdyə dnes bych r⇧d pokra⇨oval d lem definitivn❎ posledn m.¢¢Kdo ⇨etl pov d⇧n v minul⑦m ⇨ sle, t⑨kaj c se programov⑦ho ② zen MultiJoye - p②esn❎ji zv❎t③en doporu⇨en⑦ prodlevy mezi z⇧pisem na $D300 (PORTA) a n⇧sledn⑨m ⇨ten m jeho stavu na alespo 30 takt
, si nemus rv⇧t vlasy, protoəe tohle doporu⇨en z
st⇧v⇧ v platnosti. Co se ale tro③ku m❎n , je ta zd
voduj c om⇧⇨ka okolo.¢¢Abychom jen nevytasili dal③ hypot⑦zu, dobrotiv⑨ Robert P. ke mn❎ p②inesl logick⑨ analyz⇧tor a pod vali jsme se tomu kone⇨n❎ po②⇧dn❎ na zoubek (p②esn❎ji na zoubky pr
b❎h
logick⑨ch jedni⇨ek a nul putuj c ch z PIA obvodu do MultiJoye a nazp⇧tek). Takəe, cel⑨ probl⑦m je v tom, əe p②i zm❎n❎ stavu PIA v⑨stup
doch⇧z k opoəd❎n⑦mu n⇧b❎hu logick⑨ch jedni⇨ek o cca 4.5us, zat mco bity, kter⑦ maj p②ej t do nulov⑨ch ⑤rovn , reaguj tak②ka okaməit❎. V praxi se to projevuje tak, əe nap②. p②i zm❎n❎ v⑨b❎ru sledovan⑦ho joysticku ⇨ slo 4 na ⇨ slo 5 (coə se vyb r⇧ zm❎nou bin⇧rn kombinace z 011 na 100) se doln dva bity vynuluj okaməit❎, zat mco t②et bit nab❎hne na jedni⇨ku se zpoəd❎n m. V d
sledku toho se na joystickov⑦m portu nejprve objev na 4.5us vybran⑨ joystick ⇨.0 (000), a teprve pak poəadovan⇧ kombinace pro joystick ⇨ slo 5 (100).¢(Pozn⇧mka: Bin⇧rn hodnoty jsou oproti ⇨ sl
m joystick
o 1 posunut⑦, protoəe joysticky se symbolicky ⇨ sluj od 1.)¢¢IO demultiplexer v MultiJoy tedy dostane spr⇧vnou hodnotu aə o 4.5us pozd❎ji, a t m se opozd v⑨b❎r spr⇧vn⑦ho joysticku. K dal③ mu zpoəd❎n t⑦ə o cca 4.5us pak doch⇧z na zp⇧te⇨n cest❎ z obdobn⑦ho d
vodu. Sm❎ry joystick
, kter⑦ nejsou pr⇧v❎ pouəity, nejsou nikam zapojeny a k n⇧b❎h
m logick⑨ch jedni⇨ek dojde t⑦ə opoəd❎n❎. Celkov❎ tak doch⇧z ke zpoəd❎n cca 9us - to odpov d⇧ p②ibliən❎ 16 takt
m procesoru 6502. A tohle je pr⇧v❎ ten skute⇨n⑨ d
vod pro dostate⇨n❎ dlouhou pauzu mezi z⇧pisem a n⇧sledn⑨m ⇨ten m registru PORTA.¢¢Zkou③eli jsme hledat zp
sob, jak⑨m by ③lo v MultiJoyi p②echody na logick⑦ jedni⇨ky urychlit. Ze strany v⑨stupu z PIA obvodu toto nijak harwareov❎ zven⇨ (na joystickov⑦m portu) ovlivnit nelze. P②esto je tu jedna moənost, a to pomoci si softwareov❎ p②id⇧n m z⇧pisu inicializa⇨n hodnoty #$ff do registru PORTA vədy po p②e⇨ten stavu kaəd⑦ho joysticku. V⑨stup z PIA obvodu se t m p⇧dem vədy p②ed v⑨b❎rem n⇧sleduj c ho joysticku nejprve nastav na sam⑦ jedni⇨ky, a pak p②i z⇧pisu skute⇨n⑦ hodnoty pro poəadovan⑨ joystick p②ejdou pr⇧v❎ jen ty nulov⑦ bity na nulu. Mezi touto #$ff inicializac a skute⇨nou hodnotou pro PORTA samoz②ejm❎ t⑦ə mus b⑨t prodleva cca 8 takt
, aby se v③echny jedni⇨kov⑦ bity m❎ly ⇨as nastavit, ale to je zaru⇨eno t m, əe inicializaci prov⇧d me uə po p②e⇨ten stavu, po kter⑦m v❎t③inou n⇧sleduje zpracov⇧n v③ech akc pro p② slu③n⑦ho hr⇧⇨e.¢¢Co se t⑨⇨e urychlen sign⇧l
v opa⇨n⑦m sm❎ru, sta⇨ zapojit na sm❎rov⑦ joystickov⑦ vstupy 4 pull-up odpory (osv❎d⇨ilo se n⇧m 10K), ⇨ mə zp❎tn⑦ zpoəd❎n t⑦m❎② zmizelo. U tla⇨ tkov⑦ho vstupu nen pull-up odpor pot②eba, nebo④ i bez n❎j reaguje dostate⇨n❎ rychle (jeho stav nesleduje obvod PIA, ale GTIA, kter⇧ jej vyuə v⇧ nap②. i pro sv❎telnou pistoli).¢¢V⑨③e zm n❎n⑨m vylep③en m programov⑦ho ovl⇧d⇧n i hardware ⑤pravami v MultiJoyi lze tedy odezvy minimalizovat, p②esto v③ak jednozna⇨n❎ doporu⇨ujeme st⇧le dodrəovat po z⇧pisu do PORTA p②ed jeho n⇧sledn⑨m ⇨ten m prodlevu alespo 30 takt
.¢¢Vylep③en⇧ ⇨⇧st kdu pro v⑨b❎r joysticku tedy vypad⇧ takto:¢¢ lda #N ;N=⇨ slo joysticku 0-15¢ asl @ ;posun o 4 bity¢ asl @¢ asl @¢ asl @¢ sta $d300 ;PORTA¢ ldx #$06 ;prodleva 30 takt
¢WAI dex¢ bne WAI¢ lda $d300 ;PORTA¢ and #$0f¢ ;Nyn je v A stav p⇧ky¢ lda $d010 ;TRIG0¢ ;Nyn je v A stav tla⇨ tka¢ lda #$ff ;inicializace v③ech¢ sta $d300 ;PORTA v⑨stup
na 1¢ ;...Akce pro hr⇧⇨e N...¢¢Dodatek:¢Kdyə uə hovo② me o t❎ch ⑤prav⇧ch v MultiJoy hardware, je moən⑦ t⑦ə tro③ku vylep③it zapojen t m zp
sobem, aby u MultiJoye8 poəadavek na joystick 9-16 nevracel stavy joystick
1-8. K tomu lze p❎kn❎ vyuə t povolovac sign⇧ly /E1 /E2 pouəit⑦ho obvodu 74ALS138, kter⑦ m sto pevn⑦ho p②ipojen k zemi zapoj me na pin 4 Atari joystickov⑦ho portu 2. P②i poəadavku na joystick 9-16 bude pin 4 jedni⇨kov⑨, coə v③echny v⑨stupy demultiplexeru nastav na 1, a tedy nebude vybr⇧n ə⇧dn⑨ z joystick