; Test Programm fuer die 'Open File RSX' ; ; Das Programm fordert die Eingabe eines Dateinamens an, erstellt ; den entsprechenden FCB mit Hilfe der BDOS-Funktion 152 ('Parse ; Filename') und versucht dann, die Datei zu eroeffnen. ; Enthaelt der Dateiname '?', so bricht das BDOS normalerweise ; (ohne RSX) mit einer Fehlermeldung ab. Mit der 'Open File RSX' ; erfolgt das Oeffnen der Datei wie unter CP/M 2.2 und die ; Fehlermeldung bleibt aus. TRUE equ 0ffffh FALSE equ NOT TRUE BDOS equ 0005h ; BDOS Einsprungadresse bell equ 07h ; Bell cr equ 0dh ; Carriage Return lf equ 0ah ; Line Feed eot equ '$' ; String end ; BDOS-Funktionen printstr equ 9 ; Print String Funktion rbuff equ 10 ; Read Console Buffer openfile equ 15 ; Open File Funktion searchf equ 17 ; Search First Funktion scb equ 49 ; Get/Set SCB Funktion callrsx equ 60 ; Call RSX Funktion parse equ 152 ; Parse Filename DEBUG equ TRUE org 0100h start: ; gebe Meldung aus ld de,meldung ld c,printstr call BDOS IF DEBUG ; Sieh nach, ob die RSX ueberhaupt eingebunden ist. ; Dazu dient die BDOS-Funktion 60 ('Call RSX'), die beim ; Aufruf in Register DE die Adresse eines RSX-Parameter- ; blocks erhaelt. Die 'Open File RSX' braucht jedoch keine ; Parameter, daher kann man Register DE mit 0ffffh laden, ; um diesen RSX-Aufruf von eventuellen Aufrufen anderer ; RSX zu unterscheiden. ld c,callrsx ld de,0ffffh call BDOS cp 0 ; Ist eine RSX aktiv ? jp z,rsxaktiv ; Ja! ld c,printstr ld de,neintext ; Melde dass keine RSX da call BDOS rsxaktiv: ld c,printstr ; Melde dass RSX vorhanden ld de,jatext call BDOS ENDIF ld c,printstr ; Fordere Dateinamen an ld de,prompt call BDOS ld de,einpuffer ; Lege Eingabe in Puffer ab ld c,rbuff call BDOS ld de,return ; Neue Zeile ld c,printstr call BDOS ld de,pfcb ; Setze Parse Filename Control Block ; und uebergebe Dateiname ld c,parse call BDOS ld de,fcb ; Dateiname nun in FCB, oeffne Datei ld c,openfile call BDOS cp 0ffh ; Fehlermeldung von BDOS ? jp nz,gefunden ; Wenn ja, Fehlermeldung ausgeben ; und Ende ld de,fehler ; Meldung Fehler aufgetreten ld c,printstr call BDOS exit: ld c,0 ; Warmboot jp BDOS gefunden: ld de,oktext ; Melde gefundene Datei ld c,printstr call BDOS ld de,fcb+12 ; setze DE auf Ende des Dateinamens ld a,'*' ; speichere dort ein ' *' ab (String ld (de),a ; Delimiter) ld de,fcb+1 ld c,printstr call BDOS ; gebe Dateinamen aus ld de,return ; Neue Zeile ld c,printstr call BDOS jp BDOS ; Rueckkehr zum CCP pfcb: ; Parse Filename Control Block dw einpuffer+2 ; Adresse Eingabepuffer dw fcb einpuffer: ; Console Input Eingabepuffer db 14,0 ; Anzahl Zeichen (zum spaeteren Lesen) ds 14 ; Laenge Eingabepuffer fcb: ds 36 ; FCB Bereich ; Meldetexte fehler: db 'Datei nicht gefunden',cr,lf,eot meldung: db '>Open File RSX< Test Programm ... ',cr,lf,eot oktext: db 'Name der gefundenen Datei : ',eot return: db cr,lf,eot jatext: db 'RSX eingebunden.',cr,lf,eot prompt: db 'Dateinamen eingeben : ',eot neintext: db bell,'ACHTUNG!! Kein ',eot end