;;MACRO LIBRARY FOR REAL NUMBER ROUTINES: ;; ;; JUNE 21 1979 NJL ;; JULY 3 1979 NJL: REMOVED THE AMD ROUTINES (FLTIN AND ;; FLTOUT) USED BY WREAL AND RREAL. THEY WILL BE LOADED AT ;; LOCATION F400 AND RESIDE PERMANENTLY. ;; OCT 26 1979:INSTALLED UNDERFLOW CORR TO CMDW MACRO INI9511 MACRO ;;INITIALIZE THE CRAZY 9511 CHIP SO IT WORKS. ;; LXI H,2 CALL HLLOAD LXI H,3 CALL HLLOAD CMDW SADD CALL HLSTORE LXI D,5 CALL DSUBT RZ OUT ADATA ;;IF RESULT NOT 0 PUT EVEN NUM ON STK RET ; HLLOAD: MOV A,L OUT ADATA MOV A,H OUT ADATA RET HLSTORE: IN ADATA MOV H,A IN ADATA MOV L,A RET DSUBT: MOV A,L SUB E MOV L,A MOV A,H SBB D MOV H,A RET ENDM ;; CMDW MACRO CMND LOCAL PASTSUB,CMDW05,CMDWEX JMP PASTSUB ;;SEND THE COMMAND (CMND) TO THE 9511 PORT. @CMDW: ;; COMMAND WORD IS PUT INTO REGISTER A WHICH IS OUTPUT TO CONTROL PORT. ;; OUT ACTRL ;;OUTPUT A TO CONTROL PORT CMDW05: IN ACTRL ;;INPUT STATUS ORA A ;;BUSY? JM CMDW05 ;;YES ANI 04H ;;UNDERFLOW? JZ CMDWEX ;;NO MVI A,18H ;;LOAD A WITH POP OPCODE CALL @CMDW ;;SEND OPCODE PUSH H ;;SAVE H LXI H,ZERO+3 ;;LSB OF FLOATING PT. ZERO MDLOAD ;;TO 9511 STACK POP H ;;GET H BACK CMDWEX: RET PASTSUB: CMDW MACRO ?CMND MVI A,?CMND ;;PUT COMMAND INTO REG A CALL @CMDW ENDM CMDW CMND ENDM ;; ;; MDLOAD MACRO LOCAL PASTSUB JMP PASTSUB ;; ;; LOAD 1 FLOATING PT NUMBER FROM 8080 STK TO 9511 STK. ;; @MDLOAD: ;; ;; HL POINTS TO THE *LEAST SIGNIFICANT BYTE* OF NUM ;; MOV A,M OUT ADATA DCX H MOV A,M OUT ADATA DCX H MOV A,M OUT ADATA DCX H MOV A,M OUT ADATA RET PASTSUB: MDLOAD MACRO CALL @MDLOAD ENDM MDLOAD ENDM ;; ;; DSTORE MACRO LOCAL PASTSUB,DSTORE05 JMP PASTSUB @DSTORE: ;; HL POINTS TO THE LOCATION WHERE TOS IS STORED. (USUALLY STACK AREA) ;; IN ADATA MOV M,A INX H IN ADATA MOV M,A INX H IN ADATA MOV M,A INX H IN ADATA MOV M,A RET PASTSUB: DSTORE MACRO CALL @DSTORE ENDM DSTORE ENDM ;; STKSTORE MACRO DSTORE ;;RESULT BACK TO 8080 STK DCX H DCX H DCX H POP D ;;SAVE RETURN ADDRESS SPHL ;;NEW TOP OF STACK XCHG PCHL ;;RETURN TO CALLER ENDM ;; RCMPSTK MACRO CMPTYPE LOCAL PASTSUB JMP PASTSUB ;; ;; PARAMETERS: A CMPARED TO B: TOS = B, NOS = A ;; B REGISTER CONTAINS THE TYPE OF COMPARISON: ;; 1 = ;; 2 <> ;; 3 <= ;; 4 >= ;; 5 > ;; 6 < @RCMPSTK: POP B CALL RSUB ;;SUBTRACT IN ACTRL MOV D,A ;;GET AND SAVE STATUS ANI 00100000B ;;DOES A=B? JNZ ZEROO ;;YES MOV A,D ;;GET STATUS ANI 01000000B ;;IS A < B? JNZ NEGATIVE ;;YES JMP POSITIVE ;;NO, A > B. ZEROO: LXI H,ZTBL-1 JMP RCMP05 POSITIVE: LXI H,PTBL-1 JMP RCMP05 NEGATIVE: LXI H,NTBL-1 RCMP05: POP D POP D ;;THROW AWAY RESULT OF SUBR PUSH H ;;SAVE POINTER TO TABLE MVI E,CMPTYPE ;;GET COMPARISON TYPE MVI D,0 POP H ;;GET POINTER TO TABLE DAD D ;;HL POINTS TO BYTE IN TABLE FOR CMP MOV E,M ;;GET TRUE OR FALSE BYTE PUSH D ;;TRUE OR FALSE TO STACK PUSH B ;;GET RETURN ADDRESS RET ;;RETURN ;; ;;DATA ZTBL: DB 1,0,1,1,0,0 PTBL: DB 0,1,0,1,1,0 NTBL: DB 0,1,1,0,0,1 ;; PASTSUB RCMPSTK MACRO ?CMPTYPE CALL @RCMPSTK ENDM RCMPSTK CMPTYPE ENDM