Quick-Tips

Sony-Floppys am ST

Wegen des eingebauten Shugart Busses kann man an alle ATARI-Rechner Standarddiskettenlaufwerke anschließen (beim Falcon030 nur intern) - meist problemlos. Bei Sony-Laufwerken (zumindest den mir bekannten) tritt aber ein schwerwiegendes Problem auf, das zum Glück leicht zu lösen ist. Sony-Laufwerke liefern nur dann ein „Write-Protect-Signal“ am Bus, wenn eine Diskette eingelegt ist! Dies führt dazu, daß ein Diskettenwechsel nicht erkannt wird, wenn die eingelegte Diskette nicht schreibgeschützt ist. In diesem Zustand ist das Laufwerk also unbrauchbar.

Die Lösung ist einfach: man überbrückt den Schalter im Laufwerk, der für die Erkennung einer eingelegten Diskette zuständig ist, mit einem ein paar Millimeter langen Drahtstück. Dazu muß man einen Lötkolben bedienen können bzw. jemanden kennen, der das kann. Der Schalter liegt genau neben dem Schalter, der für die High Density-Erkennung der Diskette zuständig ist; bei meinem Laufwerk ist er mit „S2/ IN“ beschriftet. Das war’s!

Natürlich ist die beschriebene Prozedur auch auf Laufwerke anderer Hersteller übertragbar, falls es noch welche mit dem beschriebenen Problem gibt.

Noch ein Tip zur „Jumperung“ eines Standardlaufwerks: Möchte man ein neu gekauftes oder vom PC ausgebautes Laufwerk als Laufwerk A an den ATARI anschließen, muß man die Drive-Select-Leitung „umjumpern“, da diese beim PC immer auf B geschaltet ist, d.h., man sollte beim Kauf immer nach einem Datenblatt fragen! Bekommt man kein Datenblatt, kann man nachsehen, ob die Jumper am Laufwerk beschriftet sind (DS0, DS1 o. ä.; DS0=A, DS1=B ...). Ist auch das nicht der Fall, kann man die richtige „Jumperung“ ausprobieren (aber bitte nur dann, wenn nur ein Jumper vorhanden ist).

Im Falle meines Sony-Laufwerks war nichts von alledem gegeben, also mußte ich zum Durchgangsprüfer greifen, um herauszufinden, welcher Jumper für die Drive-Select-Leitungen zuständig ist. Drive Select A liegt an Pin 10, Drive Select B an Pin 12 des Shugart-Busses. Ergebnis: der innerste Jumper, der Pin 10 mit Pin 15 verbunden hatte, mußte so gesteckt werden, daß er Pin 10 mit Pin 5 verbindet. Die Wahrscheinlichkeit, daß diese „Jumperung“ auch für andere Sony-Laufwerke mit 15poliger Jumper-Stiftleiste korrekt ist, dürfte recht hoch sein.

Christian Fuchs

Anwendung für color_palette()

color_palette() ist eine C-Funktion zu Manipulation der VDI-Farbpalette. Je nach übergebenem Parameter kann:

VDICOLOR zeigt die Anwendung der Funktion color_palette(). Es läuft auch als Accessory, und macht folgendes:

  1. Bildschirm wird langsam dunkelgesteuert (fade out)
  2. Bildschirm wird langsam hellgesteuert (fade in)
  3. Bildschirm wird invertiert und bleibt es für 10 Sekunden (im Accessory-Betrieb kann dann normal weitergearbeitet werden)
  4. Programmende

Marco De Luca

/***************************/
/*  VDICOLOR.C 04-09-94    */
/*  (c)1994 MAXON-Computer */
/*  Autor: Marco De Luca   */
/***************************/


#include <stdio.h>
#include <string.h>
#include <vdi.h>
#include <aes.h>

void color_palette (int phys handle, int colors, int flag);
void do_it         (int colors);

/* Globale Variablen */

int work_in[12], 
    work_out[57];

int handle,
    phys_handle;

extern _app;

main ()
{
    int i, dummy, msg_buf[8], colors;

    if (appl_init() < 0) 
        return 1;

    for (i = 1; i < 10; work_in[i++] = 1); 
    work_in[10] = 2;
    phys_handle = graf_handle (&dummy, &dummy, &dummy, &dummy);
    work_in[0] = handle = phys_handle; 
    v_opnvwk(work_in, &handle work_out); 
    colors = work_out[13];

    if (_app)
        doit(colors);
    else
        if (menu_register (dummy, "  Colortest") != -1) 
        while (1)
        {
            evnt_mesag (msg_buf); 
            if (msg_buf[0] == AC_OPEN) 
                do_it(colors);
        }

    v_clsvwk (handle); 
    appl_exit(); 
    return 0;
}

void do_it (int colors)
{
    color_palette(phys_handle, colors, 0);
    /* save color palette   */
    color_palette(phys_handle, colors, 2);
    /* fade out             */
    color_palette(phys_handle, colors, 3);
    /* fade in              */
    color_palette(phys_handle, colors, 4);
    /* invert               */
    evnt_timer (10000,0);
    /* mal so lassen...     */
    color_palette(phys_handle, colors, 1);
    /* restore palette      */
}

void color_palette (int phys_handle, int colors, int flag)
{
    static int col[256][3]; 
    int rgb[3]; 
    int i, j;
    int step = 10; /* fade out/in */

    if (colors > 256) colors = 256;

    switch (flag)
    {
        case 0: for (i =0; i < colors; i++)
        {
            vq_color (phys_handle, i, 0, &rgb[0]); 
            col[i][0] = rgb[0]; 
            col[i][1] = rgb[1]; 
            col[i][2] = rgb[2];
        }
        break;

        case 1: for (i = 0; i < colors; i++)
        {
            rgb[0] = col[i][0]; 
            rgb[1] = col[i][1]; 
            rgb(2] = col[i][2];
            vs_color (phys_handle, i, &rgb[0]);
        }
        break;

        case 2: for (j = 0; j < (1000 / step); j++)
        {
            for (i = 0; i < colors; i++)
            {
                vq_color (phys_handle, i, 0, &rgb[0]); 
                rgb[0] -= step; if (rgb[0] < 0) rgb[0] = 0;
                rgb[1] -= step; if (rgb[1] < 0) rgb[1] = 0;
                rgb[2] -= step; if (rgb[2] < 0) rgb[2] = 0;
                vs_color (phys_handle, i, &rgb[0]);
            }
        }
        break;

        case 3: for (j = 0; j < (1000 / step); j++)
        {
            for (i = 0; i < colors; i++)
            {
                vg_color (phys_handle, i, 0, &rgb[0]);
                rgb[0] += step; if (rgb[0] > col[i][0]) rgb[0] = col[i][0];
                rgb[1] += step; if (rgb[1] > col[i][1]) rgb[1] = col[i][1];
                rgb[2] += step; if (rgb[2] > col[i][2]) rgb[2] = col[i][2];
                vs_color (phys_handle, i, &rgb[0]);
            }
        }
        break;

        case 4: for (i = 0; i < colors; i++)
        {
            vg_color (phys_handle, i, 0, &rgb[0]);
            rgb[0] = 1000 - rgb[0];
            rgb[1] = 1000 - rgb[1];
            rgb[2] = 1000 - rgb[2];
            vs_color (phys_handle, i, &rgb[0]);
        }
    }
}
;Projekt-File für VDI-Color

VDICOLOR.APP
.C []
.L []
.S []

PCSTART.O       ; startup code

VDICOLOR.C      ; source code to compile

PCSTDLIB.LIB    ; standard library
PCGEMLIB.LIB    ; AES and VDI library

Bereiche bewegen und kopieren

Wer früher mit GFADRAFT gearbeitet hat, kennt die Fensteroperationen ‘Vergrößern’, ‘Verschieben’ bzw. ‘Kopieren’ und ‘Drehen’. Diese drei Operationen sind im TB Drafter in den Befehlen ‘Bereich bewegen’ bzw. ‘Bereich kopieren’ zusammengefaßt. (Ein Bereich entspricht dabei im GFADRAFT einem Fenster in der Einstellung ‘Extrakt’.) Um Bereiche mit festen Zoomfaktoren (z.B. 1:1) zu verschieben bzw. kopieren, wird der Zoomfaktor unter ‘Skalierung’ (Alt M) eingestellt. (Die Tastenkombination muß evtl. 2x betätigt werden.) Dann wird ein Rahmen aufgezogen, ein Fixpunkt definiert und der Punkt, an den der Fixpunkt plaziert werden soll. Zur Lagebestimmung wird noch ein zweiter Punkt definiert und plaziert. Ist die ‘Skalierung’ ausgeschaltet, bestimmt der zweite Punkt auch noch den Zoomfaktor.

Der Witz an der Sache: die zu definierenden Punkte können irgendwo liegen. Noch witziger: bei eingestellter ‘Skalierung’ können die Koordinaten des 2. Punktepaares identisch sein.

Um einen Bereich um z.B. 10 mm nach rechts und 30 mm nach unten zu bewegen, wird nach der Rahmendefinition eingegeben:

  1. Punktepaar: x = 0,y = 0,x = 10,y = -30,
  2. Punktepaar: x = 0,y = 0,x = 0,y = 0.

Die Eingabe x=0,y=0 kann sinnvollerweise auf eine Funktionstaste gelegt werden, damit bei bekannten Verschiebungswerten nur noch diese direkt eingegeben werden müssen (also x=10,y=-30), die restlichen Daten über die Funktionstaste. Da TB Drafter seine Markierungen nicht löscht, empfiehlt es sich, den Befehl #135 (Refresh) ebenfalls auf eine Funktionstaste zu legen, statt diesen Befehl aus der Icon-Leiste aus aufzufrufen.

Thomas Müller



Links

Copyright-Bestimmungen: siehe Über diese Seite
Classic Computer Magazines
[ Join Now | Ring Hub | Random | << Prev | Next >> ]