;DISC SECTOR I/O FOR PASCAL - RM-800104;;TYPE BLOCK = PACKED ARRAY(0..255) OF CHAR;;;PROCEDURE PSCIU( VAR DISCBUFFER: BLOCK;;                 DISC, TRACK, SECTOR, IOCODE: INTEGER;;                 VAR ERRORCODE: INTEGER ); EXTERNAL;;;PURPOSE: READS (IOCODE=1) OR WRITES (IOCODE=2) THE SECTOR IDENTIFIED;         BY THE DISC ADDRESS IN 'TRACK'/'SECTOR' ON THE DISC IDENTI-;         FIED BY 'DISC' INTO/FROM 'DISCBUFFER';         THE RESULTING MIKADOS DISC DRIVER ERROR CODE IS RETURNED;         IN 'ERRORCODE' (ZERO IMPLIES NO ERROR).;       SYMB;;PSCIU::POP     B       ;RETURN ADDRESS TO PASCAL INTERPRETER;       POP     H       ;POINTER TO ERROR CODE (DEFINED AS 'VAR')       SHLD    ERRPT       POP     H       ;I/O CODE       MOV     A,L       STA     IOKOD       POP     H       ;SECTOR NUMBER       MOV     A,L       STA     DKB+SEKT1+2  ;SAVE IN DKB       POP     H       ;TRACK NUMBER       SHLD    DKB+SEKT1       POP     D       ;DISC NUMBER       POP     H       ;BUFFER POINTER       SHLD    DKB+N[PST;       PUSH    B       ;RETURN ADDRESS TO PASCAL INTERPRETER;       MOV     A,E     ;COMPUTE DISC IDENTIFICATION POINTER       ADI     '0'       MOV     D,A       MVI     E,'P'       LXI     H,DKB   ; AND STORE IN THE DKB       CALL    PFIND       ANA     A       JNZ     ERRUD   ;JUMP IF ILLEGAL DISC NUMBER;       MVI     A,1       STA     DKB+SANT  ;ONE SECTOR TO BE READ/WRITTEN       LDA     IOKOD   ;TURN ON BIT 7 IN THE I/O CODE TO INDICATE       ORI     80      ; USER SPECIFIED BUFFER ADDRESS       LXI     H,DKB       CALL    UDIND   ;CALL MIKADOS TO DO DISC I/O;ERRUD: LHLD    ERRPT   ;STORE ERROR CODE FOR USER       MOV     M,A       INX     H       MVI     M,0;       RET             ;DONE;;; DATA AREA;       RAMIOKOD: DS      1       ;I/O CODE (1=READ, 2=WRITE)ERRPT: DS      2       ;POINTER TO USER ERROR VARIABLEDKB:   DS      BUFF    ;DATA CONTROL BLOCK (HEADER ONLY);       END