>ANINITQ>;;Paralleler Bus - Ger{teabfrage *******************> PSHPDVS;;mit Nr. 1 anfangen.>(NINIT1QSHPDVS;;Bit 0-7 -> Ger{t 0-7>PPDVS;;Ger{t selektieren>(QPDID1;;Sind die 2 Kennungsbytes des>R>;;ausgesuchten Ger{tes> HL0185;;in Ordnung ? Nein ->> QPDID2>R>>HL0185;;Nein ->>' PDVV ;;Ja, Ger{t initialisieren.>(L0185TSHPDVS;;N{chstes Ger{t, falls>(HNINIT1;;noch nicht alle durch sind.>Q>;;Ger{t ausschalten> PPDVS>:>%SIOINTERFQ>;;Nur verk}rzten VBI> =B=;;STA CRITIC>#QDUNIT;;SIO-Ger{tenummer retten>5>QPDVMSK;;PD ansprechen?>FSIOGO;;Nein ->>$$>;;Das Ger{t mit der kleinsten>$SIOPD GETLOWEST;;Nummer zuerst.>FSIOGO;;Kein PD ->>A>5># PDIOV;;Vektor f. paralleln I/O>7>>>DSIOPD;;Kein Fehler, weiter>Q>> PSHPDVS;;Ger{t deselektieren> PPDVS>+FSIOINTERX;;Bei Fehler SIO }berspringen>SIOGO SIO>SIOINTERX7>PDUNIT;;zur}ck>Q>> =B=;;VBI wieder normal>#'DSTATS;;Fehlerstatus speichern>%DSTATS;;Flaggen setzen>:>5NEUIOREQ$>;;SYIRQ speichert bei einem Interrupt>,L0196W?;;PDVS in A. Bit gesetzt => Ger{t>EL0195;;fordert an.>$0;;Weiter testen, bis alle Ger{te>HL0196;;getestet.>L0195QSHPDVS;;Retten>5>+QBITMASK9;;Errechnetes PDV anw{hlen,>PSHPDVS;;selektieren und> PPDVS>. PDIRQV;;Ger{teinterruptroutine anspringen>7> PSHPDVS> PPDVS>7;;Interrupt Ende>>>7>9>5NOPEN%>;;Ab $D808 steht bei selektiertem PDV am>/!NALLCMD;;parallelen Bus ein 6 Worte langer>7NCLOSE%>;;Eintrag. Die Worte sind die OPEN, CLOSE>3!NALLCMD;;usw. Adresse-1 f}r das jeweilige PDV.>4NGET%>;;Das jeweilige Wort wird auf dem Stapel>/!NALLCMD;;abgelegt und die Adresse indirekt>$NPUT%>;;}ber RTS angesprungen.> !NALLCMD>NSTATUS%> > !NALLCMD>NSPECL%> > !NALLCMD>$GETLOWEST0;;Noch weitere Ger{te?>IGETLOWEST1;;Ja ->>Q>;;PDV deselektieren> PSHPDVS> PPDVS>:>'GETLOWEST1QPDVMSK;;PDV ansprechen?> MBITMASK9>FGETLOWEST;;Nein ->>PSHPDVS;;Ja> PPDVS>:>+NINDJMPQPDVV8;;Adresse (-1) auf Stapel>5>1> QPDVV8>5>QPPTMPA;;A und>$PPTMPX;;X zur}ck>.%>FNCNOT;;Fehler: Funktion nicht verf}gbar>:;;annehmen>NALLCMDPPPTMPA;;A und X>&PPTMPX;;retten> =B=;;LDA CRITIC>5>Q>> =B=;;STA CRITIC>$>>NALLCMD1 GETLOWEST>FNALLERR;;Kein PDV ->>A>5>C>5>0 NINDJMP;;Serviceroutine indirekt anspringen>%DNALLCMD2;;Kein Fehler, weiter ->> PPPTMPA>7;;Y>7;;X> !NALLX>3NALLERR%>NONDEV;;Fehler: Ger{t nicht vorhanden> NALLXQ>> PSHPDVS> PPDVS>7> =B=;;STA CRITIC> QPPTMPA> 'PPTMPX>%PPTMPX;;Flaggen setzen>:>NALLCMD27;;N{chstes Ger{t>?>7>>>DNALLCMD1;;unbedingt?BITMASK =@= =? ===?!PREPLINK =.=;;LDX ICIDNO? QICAX49? INITLOAD?EPREPLINKX?,? LINK1?EPREPLINKX ? =.=;;LDX ICIDNO ? QICAX39 ? L0215 ?EPREPLINKX ? =.=;;LDX ICIDNO?PICHID9;;HATAB's Index? PICHIDZ? Q>;;OPEN? PICCOMT? !IOC7?PREPLINKX!CIERR6?TABELLEN ===? ===)? ===? -=%=-=/? 2=9==4? %=3=4=? ==2=/? -=2=!=-? ==+=%? 9="=/=!? 2=$==4? %=3=4= ? ===!? ==="? ===#? ===$? ===[%? ===&? ==='? ===(? ===)? ===*? ===+? ===,? ===-? ==1=.? 7==%=/? 2==4=0? 9==5=1? )==/=2? 0== =3? ===4? ===5? ===!6? =3==$7? =&=='8? =(==*9? =+==,:? === ;? = ==? :==8=?? #==6=@? "==.=A? -== =B? ===C? ===D? ===E? ===F? ===G? ===H? ===I? ===J? ===K? 3==0=L? !==#=M? %===N? "==!=O? 2===3P? (=="=Q? 3==\=R? 6=/=)=#S? %==T?CHECKFF%>;;18 ByteU?Q>V?,W?-CHECKLPO@ZCHAIN7;;Pr}fsumme }ber 18 ByteX?1;;ab (ZCHAIN)Y? ICHECKLPZ?O>;;+ ]bertrag[?)N>;;Zur}ckgegeben wird die Zahl, die\?:;;bis 0 fehlt.]? ===^? ===_? ===`? =a?FREI0 ===;;$CB73b? ===c? ===d? ===e? ===f? ===g? ===h? ===i? ===j? ===k? ===l? ===m? ===n? ===o? ===p? ===q? ===r? ===s? ===t? ===u? ===v? ===w? ===x? ===y? ===z? ==={? ===|? ===}? ===~? ===? ===? ===? ===? ===? ===? ?USIO??X;Ab $CC00: Internationaler Zeichensatz oder Ultra Speed SIO?0X;Ab $D000: I/O Baugruppen = Hardwareregister?FX;Ab $D800: Mathe Rom, siehe Compute: "The Atari Basic Source Book"? X;Ab $E000: Atari Zeichensatz?"ATreiber - und SprungtabelleA