TITLE 'MDBS/PLI CALL INTERFACE PROGRAM' ;PROGRAM ; MDBS/PLI CALL INTERFACE PROGRAM ;PROGRAMMER ; ROBERT M. WHITE ;DATE WRITTEN ; JULY 21, 1980 ;(C)COPYRIGHT 1980,H & W COMPUTER SYSTEMS, INC. ;PURPOSE ; THIS ROUTINE PERFORMS THE FUNCTION OF INTERFACING MDBS WITH ; THE PL/1 PROGRAM. IT IS A LINKABLE MODULE THAT EXPECTS THE ; MDBS NUCLEUS TO START AT 8003H IN MEMORY. ;REMARKS MACLIB MACRO DFCB EQU 005CH ;DEFAULT FCB ; DO INITIALIZATION. NAME 'MDBSCL' MDBSCL: CSEG PUBLIC MDBSCL ; GET THE FUNCTION CODE. MOV E,M ;GET ADDR OF IT. INX H MOV D,M INX H XCHG ;GET FUNCTION CODE. MOV A,M STA FUNC XCHG ; GET THE BC PARM. MOV E,M ;GET ADDR OF IT. INX H MOV D,M INX H XCHG ;SAVE THE PARM. SHLD BCPARM XCHG ; GET THE DE PARM. MOV E,M ;GET ADDR OF IT. INX H MOV D,M INX H XCHG ;SAVE THE PARM. SHLD DEPARM XCHG ; GET THE HL PARM. MOV E,M ;GET ADDR OF IT. INX H MOV D,M INX H XCHG ;SAVE THE PARM. SHLD HLPARM XCHG ; GET THE RETURN CODE PTR. MOV E,M ;GET ADDR OF IT. INX H MOV D,M INX H XCHG ;SAVE IT. SHLD RTNCDP XCHG ; GET THE RECORD PTR. MOV E,M ;GET ADDR OF IT. INX H MOV D,M INX H PUSH H XCHG ;GET VALUE OF PTR. MOV E,M INX H MOV D,M XCHG ;SAVE RECORD PTR. SHLD RCDPTR POP H ;RESTORE PARM PTR. ; GET THE RECORD LENGTH. MOV E,M ;GET ADDR OF IT. INX H MOV D,M INX H PUSH H XCHG ;GET THE LENGTH. MOV E,M INX H MOV D,M XCHG ;SAVE IT. SHLD RCDLEN POP H ;RESTORE PARM PTR. ; IF SELECTED FUNC, PUT RECORD AS HL PARM. LDA FUNC ;GET FUNCTION CODE. CPI 07 ;CRS? JZ USERCD ;...YES. CPI 14 ;FINDM? JZ USERCD ;...YES. CPI 15 ;FINDO? JZ USERCD ;...YES. CPI 18 ;FMSK? JZ USERCD ;...YES. CPI 21 ;FOSK? JZ USERCD ;...YES. CPI 38 ;PUTC? JZ USERCD ;...YES. CPI 39 ;PUTM? JZ USERCD ;...YES. CPI 40 ;PUTO? JZ USERCD ;...YES. CPI 41 ;PUTR? JZ USERCD ;...YES. CPI 47 ;SFC? JZ USERCD ;...YES. CPI 48 ;SFM? JZ USERCD ;...YES. CPI 49 ;SFO? JZ USERCD ;...YES. CPI 50 ;SFR? JZ USERCD ;...YES. JMP BYPRCD ;...NO, DON'T USE RECORD. USERCD: LHLD RCDPTR ;GET RECORD PTR. SHLD HLPARM ;PUT IT IN HL PARM. BYPRCD: ; CALL MDBS WITH PARM. LHLD BCPARM ;LOAD BC PARM. MOV B,H MOV C,L LHLD DEPARM ;LOAD DE PARM. MOV D,H MOV E,L LHLD HLPARM ;LOAD HL PARM. LDA FUNC ;GET FUNCTION CODE. ; CALL MDBS. PUSH H ;SAVE CURRENT HL. LXI H,RETRN ;SET RETURN ADDRESS. XTHL PUSH H ;SAVE CURRENT HL AGAIN. LHLD 6 ;CALCULATE ADDRESS OF MDBS. INX H INX H INX H XTHL ;SET THE ENTRY ADDRESS. RET ;CALL MDBS. RETRN DS 0 ; SAVE RETURN PARAMETERS AND RETURN CODE. STA RETCOD ;SAVE RETURN CODE. SHLD HLRPRM ;SAVE HL RETURN PARM. MOV H,D ;SAVE DE RETURN PARM. MOV L,E SHLD DERPRM MOV H,B ;SAVE BC RETURN PARM. MOV L,C SHLD BCRPRM ; IF ZERO RETURN CODE AND GET FUNC, MOVE RECORD. ORA A ;ZERO RETURN CODE? JNZ MOVBYP ;...NO. LDA FUNC ;CHECK FOR GET FUNCTION CODE. CPI 24 ;LOW? JC MOVBYP ;...YES. CPI 36+1 ;HIGH? JNC MOVBYP ;...YES. CPI 32 ;GMC? JZ MOVBYP ;...YES. CPI 33 ;GOC? JZ MOVBYP ;...YES. LHLD RCDLEN ;BC=RECORD LENGTH MOV B,H MOV C,L LHLD RCDPTR ;DE => RECORD AREA XCHG LHLD HLRPRM ;HL => RECORD IN BUFFER MOVE ;MOVE THE RECORD FROM THE BUFFER. MOVBYP: ; RETURN TO CALLER. LHLD RTNCDP ;SET RETURN CODE. LDA RETCOD MOV M,A RET ;RETURN TO CALLER. PAGE ;**************************************************************** ;* PROGRAM CONSTANTS * ;**************************************************************** ; INPUT PARM. MDBSCD: DSEG FUNC: DB 0 ;FUNCTION CODE BCPARM: DW 0 ;BC PARM DEPARM: DW 0 ;DE PARM HLPARM: DW 0 ;HL PARM RTNCDP: DW 0 ;RETURN CODE PTR RCDPTR: DW 0 ;RECORD PTR RCDLEN: DW 0 ;RECORD LENGTH ; RETURN PARMS. RETCOD: DB 0 ;RECORD CODE. BCRPRM: DW 0 ;BC PARM DERPRM: DW 0 ;DE PARM HLRPRM: DW 0 ;HL PARM END