Ott ist es nützlich, in seinem Programm vor einem Schreibzugriff auf die Floppy den Schreibschutzstatus abzufragen, damit die Floppy nicht erst unnütz auf die Reise geschickt wird, um dann zu erfahren, daß mensch bitte den Schreibschutz entfernen sollte. Das Problem ist allerdings, daß weder über BIOS-. XBIOS- oder GEM-DOS-Aufrufe, noch durch dokumentierte Systemvariablen der Status abgefragt werden kann. Da der Schreibschutzstatus im Status-Register des FDC steht (6. Bit), kann man ihn sich dort besorgen. Zuerst selektiert man die Floppy (A oder B), die man abfragen will, im 14. Register des Soundchips, meldet dem FDC daß man sein Status Register lesen will, und testet dann schließlich, ob Bit 6 gesetzt ist oder nicht. Übrigens, es wird auch ein Schreibschutz angezeigt, wenn der Floppyschacht leer ist.
Jan Paul Schmidt, W-6300 Gießen
' - Write-Protect-Test in GFA-BASIC
' - v. J.P.Schmidt, Mittelweg 16, 6300 Giessen
' Aufruf mit: @wp_test(drive%) drive%=zu testendes Laufwerk
' - Return-Wert in wp_status%
' - wp_status% = 0 write-protect
' - wp_status% =-1 kein write-protect oder Laufwerk höher b
PROCEDURE wp_test(drive%)
LOCAL a%
wp_status%=-1
IF drive%>-1 OR drive%<2
SPOKE &HFF8800,&HE ! Register 14 selektieren
a%=PEEK(&HFF8802) ! und holen
SPOKE &HFF8802, (a% AND &HF8) OR drive% + 1 ! Drive selektieren
SDPOKE &HFF8606,&H80 ! FDC Register einstellen
IF (DPEEK(&HFF8604) AND &H40)=&H40 ! wenn 6 Bit gesetzt
wp_status%>0 ! dann Schreibschutz
ENDIF
SPOKE &HFF8802,a% ! altes Register 14 zurück
ENDIF
RETURN
; - Write-protect-Test
; - - v. J.P.Schmidt, Mittelweg 16, 6300 Giessen
; - vor dem Aufruf muss das zu testende Laufwerk auf den Stack gelegt werden!
; - falls die Routine a dem Supervisor-Modus aufgerufen werden soll, müssen
; - die GEMDOS-Aufrufe gelöscht werden und der move.w 64(a7),d7-befehl in
; - move.w 60(a7),d1 umgewandelt werden.
; - Return-Wert wird in d0 übergeben.
; - d0 = 0 write-protect
; - d0 =-1 kein write-protect oder Laufwerk höher b
;
WPTEST: movem.l D1-A6,-(A7) ; Register retten
clr.l -(A7)
move.w #$0020,-(A7)
trap #$01 ; in Supervisor-Modus gehen
addq.l #$06,A7
move.l D0,-(A7)
moveq #$FF,D7 ; kein write-protect einstellen
move b #$0E,$FFFF8800.w ; Register 14 des Sound-Chips
move b $FFFF8800.w,D6 ; selektieren und retten
move.b D6,D0 ; Registerwert in d0
and.b #$F8,D0 ; Drive und Headselect löschen
move.w 64(A7) ; D1 Drive holen
bmi.a WP_TEST_ERROR ; wenn negativ, Ende
cmp.b #$01,D1 ; wenn größer 1 (Drive b)
bgt a WP_TEST_ERROR ; dann Ende
addq.b #$01,D1 ; ein Bit nach links schieben
or.b D1,D0 ; mit präpariertem d0 verodern
move.b D0,$FFFF8802.w ; in Register 14 schreiben
move.w #$0080,$FFFF9606.w ; FDC-Register selektieren
move.w $FFFF8604.w,D0 ; und holen
move.b D6,$FFFF8802.w ; altes Register 14 zurückschreiben
btst #$06,D0 ; testen, ob write-protect-Bit gesetzt
beq.a WP_TEST_ERROR ; ist, wenn nein Ende
moveq #$00,D7 ; write-protect einstellen
WP_TEST_ERROR: move w #$0020,-(A7)
trap #$01 ; Supervisor-Modus verlassen
addq.l #$06,A7
move.l D7,D0 ; Return-Wert in d0 übertragen
movem.l (A7)+,D1-A6 ; Register zurückschreiben
rts
end
Das Monochrom-Scrolling ist bei dem ATARI 1040 STE im Gegensatz zum Farb-Scrolling nicht so ohne weiteres möglich. Im Farbmodus kann man das „hscroll“ Register mit BASIC Pokes setzen und so den Bildinhalt pixelweise verschieben. Nach dem Löschen dieses Registers kehrt der Bildschirm zu seinem Normalzustand zurück. Nicht so im Monochrommodus! Wird hier das Register gelöscht, ist der Bildschirm meistens in den linken Rand hinein verschoben, und ein Teil des rechten Bildrandes findet sich nun am linken Rand wieder. Anscheinend weisen alle STEs diesen Fehler auf, denn ich habe mein Testprogramm auf verschiedenen Modellen mit gleichem Resultat ausprobiert.
Es sieht so aus, als würde der Videochip an einer falschen Stelle synchronisieren. Der Fehler tritt allerdings nicht im mer auf! Aus diesem Grund habe ich versucht, den Zeitpunkt herauszufinden, zu dem das „hscroll"-Register korrekt gelöscht wird. Mit Hilfe eines Raster-Interrupt-Programms ist mir dies gelungen. Man darf das „hscroll“-Register nur während des sogenannten Zeilenrücklaufes löschen. Das ist allerdings keine befriedigende Lösung, denn mit einer sauberen Synchronisation könnte das Problem einfacher beseitigt werden.
Deswegen wären einige Fragen an die Firma ATARI zu richten: Ist das Hardware-Scrolling nur für die niedrige und mittlere Auflösungsstufe gedacht gewesen? Hier nun ein kleines GFA-BASIC-Programm, das den Fehler zeigt, wenn man es im Monochrommodus startet. Das Programm macht nichts anderes, als das „hscroll“-Register zu setzen und anschließend wieder zu löschen. Im Monochrommodus verschiebt sich das Bild, im Farbmodus passiert dagegen nichts.
DO
SPOKE &FF8265,1 ! hscroll auf 1
PAUSE 10 ! warten
SPOKE &FF8265,0 ! hacroll auf 0
PAUSE 10 ! warten
LOOP
Dirk Hohmann, W-3407 Gleichen-Etzenborn
Die Tastatur des Mega ST mag vielleicht besser sein als die des 1040er, aber eine Steigerung ist dennoch möglich. Diese sogenannten gekapselten Tastenmodule stammen von der Firma CHERRY. Was lag also näher, als sich genau dort nach anderen (weil besseren) gleicher Bauart zu erkundigen? Es gibt in der Serie MX (aus der auch alle ATARI Tasten stammen) noch solche mit Softdruckpunkt oder Klickdruckpunkt, gleichzeitig mit oder ohne Führungsnase. Der Vertragshändler der Firma Cherry: ELKOSE GmbH. Bahnhofstraße 44, 7141 Möglingen, vertreibt diese unter den Bezeichnungen „MX1A-C1NN“ (Soft) und „MX1A-E1NN" (Klick) zum Preis von 2,- DM pro Stück. Bei Abnahme von mehr als 100 Stück fällt der Preis auf 1,41 DM (Stand 24.04.1991). Die Lieferzeit beträgt normalerweise 2 Wochen.
Erik Dick, W-6750 Kaiserslautern