(**********************************************************) (* Das folgende Programm }berpr}ft den Ausgabe-Status der *) (* Ausgabe-Ports SIO,CEN und LPT unter Verwendung der vom *) (* BIOS bereitgestellten I/O-Routinen. *) (* Programmiert auf Schneider JOYCE + (Amstrad PCW 8512) *) (* Programmiersprache: Turbo-Pascal 3.0 (CP/M 3 v. 1.4) *) (**********************************************************) PROGRAM Status_Test; TYPE Geraete_Type = (LPT,SIO,CEN); CONST CD_VERSION = $0189; (* System-Adresse CD VERSION *) VAR dev, v : INTEGER; Function Output_Status (Geraet:Geraete_Type):BOOLEAN; (* uebergibt den Ausgabe-Status von 'Geraet' *) LABEL Set_Status; (* System-Adressen: *) CONST CD_SA_OUTPUT_STATUS = $03EE; CD_SA_CEN_STATUS = $0520; CD_LPT_STATUS = $0266; CD_JUMP_BC = $0187; VAR stat_adr, i : INTEGER; k : CHAR; status : BOOLEAN; BEGIN (* Output_Status *) status:=FALSE; i:= 0; CASE Geraet OF (* System-Adressen festlegen *) LPT : stat_adr:= CD_LPT_STATUS; CEN : stat_adr:= CD_SA_CEN_STATUS; SIO : stat_adr:= CD_SA_OUTPUT_STATUS; END; (* CASE *) WHILE status=FALSE DO (* Status pruefen *) BEGIN (* WHILE *) INLINE( (* System-Routine aufrufen *) $ED/$4B/stat_adr/ (* LD BC,(stat_adr) *) $CD/$5A/$FC/ (* CALL $FC5A *) CD_JUMP_BC/ (* DEFW CD_JUMP_BC *) $9F/ (* SBC A,A *) $ED/$44/ (* NEG *) $32/status); (* LD (status),A *) i:= SUCC(i); (* Zaehler fuer Pruefung +1 *) IF i = 300 THEN GOTO Set_Status; END; (* WHILE *) Set_Status: Output_Status:=status; (* Graete-Status festlegen *) END; (* Output_Status *) (*--------------------------------------------------------*) (* Status-Pruefung durchfuehren und Status anzeigen *) BEGIN (* Status_Test *) LOWVIDEO; CLRSCR; INLINE( (* BIOS-Version pruefen *) $CD/$5A/$FC/ (* CALL $FC5A *) CD_VERSION/ (* DEFW CD_VERSION *) $ED/$43/v); (* LD (v),BC *) IF v <> $0104 THEN BEGIN (* IF *) WRITE('Falsche BIOS-Version!'); HALT; END; (* IF *) dev:= 0; GOTOXY(15,1); WRITE('********** STATUS-Test ***********'); GOTOXY(15,2); WRITE('*'); GOTOXY(50,2); WRITE('*'); REPEAT GOTOXY(15,3+dev); CASE dev OF 0 : WRITE('* JOYCE-Drucker : '); 1 : WRITE('* Serieller Ausgang : '); 2 : WRITE('* Centronics-Ausgang: '); END; CASE Output_Status(Geraete_Type(dev)) OF TRUE : WRITELN('bereit *'); FALSE : WRITELN('nicht bereit *') END; dev:= SUCC(dev); UNTIL dev = 3; GOTOXY(15,6); WRITE('*'); GOTOXY(50,6); WRITE('*'); GOTOXY(15,7); WRITELN('************************************'); WRITELN('Bitte Taste dr}cken ...'); REPEAT UNTIL KEYPRESSED; END. (* Status-Test *) (**********************************************************)