058 
            27.05.2012, 21:44 Uhr 
            holm 
            
  
 
  | 
          Erstma das hier:
 
 
 | Quellcode: |  //=========================================================================== // forward declarations static int my_putchar(char c, FILE *stream); static FILE mystdout=FDEV_SETUP_STREAM(my_putchar, NULL,_FDEV_SETUP_WRITE); //=========================================================================== // STDOUT putchar routine static int      my_putchar(char c, FILE *stream) {                 uartputc(c);                 return(0); }
  //===========================================================================
  |  
   Danach funktioniert printf(); hat natürlich mit der Mimik nichts zu tun.
 
  Wenn ich die Sache richtig sehe:
 
 | Quellcode: |  DISK procedure       entry     callr    _disk_in    !Hardware init!
      ldl    rr2, rr4     ld    r4, #PIOAD     ld    r5, #PIOBD     ld    r0, #WDATA+OUTPUT     outb    @r5, rh0    !Datentreiber auf Ausgabe!     outb    PIOAC, rl0    !Daten-PIO auf Ausgabe!
      ldb    rh0, #%10 wrea0:    ld    r1,#%ffff wready:    inb    rl0, @r5     andb    rl0, #%7     cpb    rl0, #%7     jr    nz,wrea1     djnz    r1,wready     dbjnz    rh0, wrea0
  |  
   ..lädt er erst #WDATA+OUTPU, d.h. 0x0 +0x0f = 0x000f in R0 und schafft das H byte auf PIOBD also auf die Daten, danach nimmt er r0l und schreibt die 0x0f auf PIOC, das Controlwort für Kanal A (Nicht im Kopf was er da macht, aber kommentiert wird es damit das der DatenPIO auf Ausgabe geschaltet wird). Danach lädt er längliche Schleifenzähler (rh0 0x10, r1 0xffff), holt von PioB die Daten, macht ein And 0x07 und vergleicht das Ergebnis mit 0x7. So lange das Ergebnis 7 ist, dreht der sich im Kreis bis seine Zählschleife runtergezählt ist und fällt auf einen Timeout Fehler. Falls das Ergebnis nicht 7 sein sollte, springt er auf wrea1 und wertet dort den Status 6 und 1 aus. Ist der Status 1 freut er sich und hüpft nach wrea2 um dort mit der Kommandoausgabe zu beginnen. Ist der Status 6 lädt er r2 mit dem Fehlercode 20 und springt raus, wenn nicht lädt er r2 mit c1 und springt auch raus.
  Damit müßtest Du wissen was Du machen sollst...
  Gruß, Holm -- float R,y=1.5,x,r,A,P,B;int u,h=80,n=80,s;main(c,v)int c;char **v; {s=(c>1?(h=atoi(v[1])):h)*h/2;for(R=6./h;s%h||(y-=R,x=-2),s;4<(P=B*B)+ (r=A*A)|++u==n&&putchar(*(((--s%h)?(u<n?--u%6:6):7)+"World! \n"))&& (A=B=P=u=r=0,x+=R/2))A=B*2*A+y,B=P+x-r;} |