[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Software for uSPEED math card



Hi!

"Paul R. Santa-Maria" <paulrsm@buckeye-express.com> wrote in message news:<401C5C18.DEFA6089@buckeye-express.com>...
> Let me add that the uSPEED card
> used a 9511 math coprocessor.  I
> know of at least three different
> 9511 cards for the Apple II.  If
> anyone has software or documentation
> for any 9511 card please let us know.

    I have three 8 inch CP/M disks with MT+ Pascal.  There is source
for using the 9511 on one of them.  I've appended the files
"AMDIO.SRC" and "TRAN9511.SRC".  There are files named "FPRTNS.ERL"
and "REALIO.ERL" that are referred to in a file named "AMD9511.CMD"
but it's obvious that they aren't text files.

===============================================================================

"AMDIO.SRC" follows:

MODULE AMDIOROUTINE;
(*----------------------------------------------------------*)
(* THIS MODULE CONTAINS TWO "ASSEMBLY" LANGUAGE SUBROUTINES *)
(* WHICH ARE CALLED FROM THE FPRTNS MODULE AND IF LOADED    *)
(* THE TRAN9511 MODULE.					    *)
(* 							    *)
(* THESE ROUTINES ARE SPECIFIC TO PASCAL/MT+ AND PASS       *)
(* PARAMETERS BACK AND FORTH THROUGH REGISTERS		    *)
(*							    *)
(* THE USER SHOULD CHANGE THE PORT NUMBERS AS NECESSARY     *)
(* FOR THEIR PARTICULAR HARDWARE IMPLEMENTATION OF THE 9511 *)
(*----------------------------------------------------------*)

PROCEDURE @O95D;	(* OUTPUT A-REG TO 9511 DATA PORT *)
BEGIN
  INLINE("OUT / $88)	(* CHANGE TO YOUR 9511 DATA PORT NUMBER *)
END;

PROCEDURE @O95C;	(* OUTPUT A-REG TO 9511 CONTROL PORT *)
BEGIN
  INLINE("OUT / $89)	(* CHANGE TO YOUR 9511 CTRL PORT NUMBER *)
END;

PROCEDURE @I95D;	(* INPUT A-REG FROM 9511 DATA PORT *)
BEGIN
  INLINE("IN / $88)	(* CHANGE TO YOUR 9511 DATA PORT (SAME AS @O95D)
*)
END;

PROCEDURE @I95C;	(* INPUT A-REG FROM 9511 CONTROL PORT *)
BEGIN
  INLINE("IN / $89)	(* CHANGE TO YOUR 9511 CTRL PORT (SAME AS @O95C)
*)
END;

MODEND.

================================================================================


"TRAN9511.SRC" follows:

MODULE TRAN9511;

EXTERNAL PROCEDURE @ERR(AN_ERROR:BOOLEAN; ERRNUM:INTEGER);


EXTERNAL PROCEDURE @AMD(FUNC:INTEGER;VAR ARG:REAL;VAR STATUS:INTEGER);
{THE PROCEDURE @AMD,INTERFACES TO THE AMD9511 ARITHMETIC PROCESSING
UNIT (APU).
THE FIRST ARGUMENT IS THE FUNCTION CODE (AND IS STRAIGHT FROM 
THE AM9511 LITERATURE).  THE SECOND IS THE ADDRESS OF ARG, A
REAL VARIABLE, THE FUNTION ARGUMENT IS IN ARG, AND THE RESULT 
IS RETURNED IN ARG.  THE THIRD ARGUMENT IS THE ADDRESS WHERE 
THE APU STATUS IS RETURNED.}

FUNCTION SIN(ARG:REAL):REAL; {SINE FUNCTION}
VAR	STATUS:INTEGER;
BEGIN
	@AMD($02,ARG,STATUS);
	SIN:=ARG;
END;

FUNCTION COS(ARG:REAL):REAL; {COSINE FUNCTION}
VAR	STATUS:INTEGER;
BEGIN
	@AMD($03,ARG,STATUS);
	COS:=ARG;
END;


FUNCTION EXP(ARG:REAL):REAL; {E TO THE X FUNCTION}
VAR	STATUS:INTEGER;
BEGIN
	@AMD($0A,ARG,STATUS);
	IF (STATUS & $1E) = $18 THEN BEGIN
	  @ERR(TRUE,7);	(* TRANCENDENTAL OUT OF RANGE *)
	END;
	EXP:=ARG;
END;

FUNCTION LN(ARG:REAL):REAL; {NATURAL LOGARITHM FUNCTION}
VAR	STATUS:INTEGER;
BEGIN
	@AMD($09,ARG,STATUS);
	IF (STATUS & $1E) = $8 THEN BEGIN
	  @ERR(TRUE,7);
	END;
	LN:=ARG;
END;

FUNCTION ARCTAN(ARG:REAL):REAL; {INVERSE TANGENT FUNCTION}
VAR	STATUS:INTEGER;
BEGIN
	@AMD($07,ARG,STATUS);
	ARCTAN:=ARG;
END;

MODEND.