[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.