Quick-Tips

Schreibschutzabfrage in Assembler und GFA-BASIC

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

Fehler im STE-Hardware-Scrolling?

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

Kein teurer Ersatz für MEGA-Tastaturen

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



Aus: ST-Computer 06 / 1991, Seite 160

Links

Copyright-Bestimmungen: siehe Über diese Seite