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:
- die Originalpalette gesichert werden
- die Originalpalette wieder restauriert werden
- die Palette dunkelgesteuert werden (fade in)
- die Palette hellgesteuert werden (fade out)
- die Palette invertiert werden
VDICOLOR zeigt die Anwendung der Funktion color_palette(). Es lÀuft auch als Accessory, und macht folgendes:
- Bildschirm wird langsam dunkelgesteuert (fade out)
- Bildschirm wird langsam hellgesteuert (fade in)
- Bildschirm wird invertiert und bleibt es fĂŒr 10 Sekunden (im Accessory-Betrieb kann dann normal weitergearbeitet werden)
- 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:
- Punktepaar: x = 0,y = 0,x = 10,y = -30,
- 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