; 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 CR equ 13 ; Carriage Return LF equ 10 ; Line Feed ; BDOS-Funktionen PRINTSTR equ 09 ; 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 lxi d,MELDUNG mvi 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. mvi c,CALLRSX lxi d,0ffffh call BDOS cpi 0 ; Ist eine RSX aktiv ? jz RSXAKTIV ; Ja! mvi c,PRINTSTR lxi d,NEINTEXT ; Melde dass keine RSX da call BDOS RSXAKTIV mvi c,PRINTSTR ; Melde dass RSX vorhanden lxi d,JATEXT call BDOS endif mvi c,PRINTSTR ; Fordere Dateinamen an lxi d,PROMPT call BDOS lxi d,EINPUFFER ; Lege Eingabe in Puffer ab mvi c,RBUFF call BDOS lxi d,RETURN ; Neue Zeile mvi c,PRINTSTR call BDOS lxi d,PFCB ; Setze Parse Filename Control Block ; und uebergebe Dateiname mvi c,PARSE call BDOS lxi d,FCB ; Dateiname nun in FCB, oeffne Datei mvi c,OPENFILE call BDOS cpi 0ffh ; Fehlermeldung von BDOS ? jnz GEFUNDEN ; Wenn ja, Fehlermeldung ausgeben ; und Ende lxi d,FEHLER ; Meldung Fehler aufgetreten mvi c,PRINTSTR call BDOS EXIT mvi c,0 ; Warmboot jmp BDOS GEFUNDEN lxi d,OKTEXT ; Melde gefundene Datei mvi c,PRINTSTR call BDOS lxi d,FCB+12 ; setze DE auf Ende des Dateinamens mvi a,'*' ; speichere dort ein ' *' ab (String stax d ; Delimiter) lxi d,FCB+1 mvi c,PRINTSTR call BDOS ; gebe Dateinamen aus lxi d,RETURN ; Neue Zeile mvi c,PRINTSTR call BDOS jmp 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,'$' MELDUNG db '>Open File RSX< Test Programm ... ',CR,LF,'$' OKTEXT db 'Name der gefundenen Datei : $' RETURN db CR,LF,'$' JATEXT db 'RSX eingebunden.',CR,LF,'$' PROMPT db 'Dateinamen eingeben : $' NEINTEXT db 07, 'ACHTUNG!! Kein $' end