(FILECREATED "19-Aug-85 11:14:06" {DSK}<DSK>HTHOMPSON>DSL>BUSEXTENDER.;3 5851 changes to: (VARS BUSEXTENDERCOMS) previous date: "15-Aug-85 11:19:18" {DSK}<DSK>HTHOMPSON>DSL>BUSEXTENDER.;2) (* Copyright (c) 1984, 1985 by Xerox Corporation. All rights reserved.) (PRETTYCOMPRINT BUSEXTENDERCOMS) (RPAQQ BUSEXTENDERCOMS ((E (RESETSAVE CLISPIFYPRETTYFLG NIL)) (FNS BX.INPUT BX.OUTPUT BX.READSTATUS) (* so that the macros will loadcomp from the compiled file) (DECLARE: DOCOPY (DECLARE: EVAL@LOAD EVAL@COMPILE (MACROS BX.INPUT BX.OUTPUT)) ) (* to generate errors on non-1109s) (FNS \MISC1.UFN \MISC2.UFN))) (DEFINEQ (BX.INPUT [LAMBDA (ADDR) (* ht: "15-May-85 19:48") (* * return the datum at the BX address = SUA.4-7,,fY.1) (* * ht put the expansion for \DEVICE.INPUT in by hand instead of defining a macro on the grounds that this way if the opcode ever changes only BUSMASTER/EXTENDER users are screwed, not random folk who happen to have compiled something which includes a \DEVICE.INPUT) ((OPCODES MISC1 1) (IPLUS (LLSH (LOGAND ADDR 30) 3) (COND ((EQ (LOGAND ADDR 1) 0) 10) (T 9]) (BX.OUTPUT [LAMBDA (DATUM ADDR) (* ht: "15-May-85 19:48") (* * write the datum to the BX address = SUA.4-7,,fY.1) (* * ht put the expansion for \DEVICE.OUTPUT in by hand instead of defining a macro on the grounds that this way if the opcode ever changes only BUSMASTER/EXTENDER users are screwed, not random folk who happen to have compiled something which includes a \DEVICE.OUTPUT) ((OPCODES MISC2 2) DATUM (IPLUS (LLSH (LOGAND ADDR 30) 3) (COND ((EQ (LOGAND ADDR 1) 0) 11) (T 0]) (BX.READSTATUS [LAMBDA NIL (* jmh " 8-Sep-84 15:50") (* * return FPI.0-3 -- get them from PPort -- have to enable them onto PPort first) (\DEVICE.OUTPUT 0 14) (LOGAND 15 (LRSH (\DEVICE.INPUT 7) 4]) ) (* so that the macros will loadcomp from the compiled file) (DECLARE: DOCOPY (DECLARE: EVAL@LOAD EVAL@COMPILE (DECLARE: EVAL@COMPILE (PUTPROPS BX.INPUT DMACRO [ARGLIST (PROG (ADDRARG LISTOFADDRVAL ADDRVAL) [* * The point of this macro is that almost all of the code of the function can be computed at compile time if the argument is known at compile time -- The function is -- (\DEVICE.INPUT (IPLUS (LLSH (LOGAND ADDR 30) 3) (if (ZEROP (LOGAND ADDR 1)) then 10 else 9] (* * ht put the expansions for \DEVICE.INPUT in by hand instead of defining a macro on the grounds that this way if the opcode ever changes only BUSMASTER/EXTENDER users are screwed, not random folk who happen to have compiled something which includes a \DEVICE.INPUT) (SETQ ADDRARG (CAR ARGLIST)) (RETURN (COND [[AND (SETQ LISTOFADDRVAL (CONSTANTEXPRESSIONP ADDRARG)) (SMALLP (SETQ ADDRVAL (CAR LISTOFADDRVAL] (BQUOTE ((OPCODES MISC1 1) , (IPLUS (LLSH (LOGAND ADDRARG 30) 3) (COND ((ZEROP (LOGAND ADDRARG 1)) 10) (T 9] (T (BQUOTE ((OPCODES MISC1 1) (IPLUS (LLSH (LOGAND , ADDRARG 30) 3) (COND ((ZEROP (LOGAND , ADDRARG 1) ) 10) (T 9]) (PUTPROPS BX.OUTPUT DMACRO [ARGLIST (PROG (DATUMARG ADDRARG LISTOFADDRVAL ADDRVAL) [* * The point of this macro is that almost all of the code of the function can be computed at compile time if the argument is known at compile time -- The function is -- (\DEVICE.OUTPUT DATUM (IPLUS (LLSH (LOGAND ADDR 30) 3) (if (ZEROP (LOGAND ADDR 1)) then 11 else 0] (* * ht put the expansions for \DEVICE.OUTPUT in by hand instead of defining a macro on the grounds that this way if the opcode ever changes only BUSMASTER/EXTENDER users are screwed, not random folk who happen to have compiled something which includes a \DEVICE.OUTPUT) (SETQ DATUMARG (CAR ARGLIST)) (SETQ ADDRARG (CADR ARGLIST)) (RETURN (COND [[AND (SETQ LISTOFADDRVAL (CONSTANTEXPRESSIONP ADDRARG)) (SMALLP (SETQ ADDRVAL (CAR LISTOFADDRVAL] (BQUOTE ((OPCODES MISC2 2) , DATUMARG , (IPLUS (LLSH (LOGAND ADDRARG 30) 3) (COND ((ZEROP (LOGAND ADDRARG 1)) 11) (T 0] (T (BQUOTE ((OPCODES MISC2 2) , DATUMARG (IPLUS (LLSH (LOGAND , ADDRARG 30) 3) (COND ((ZEROP (LOGAND , ADDRARG 1)) 11) (T 0]) ) ) ) (* to generate errors on non-1109s) (DEFINEQ (\MISC1.UFN [LAMBDA (ARG ALPHA) (* ht: "26-May-85 17:20") (COND ((EQ ALPHA 1) (ERROR "Attempt to access bus extender option on a machine which does not support it")) (T (RAID "Unimplemented MISC1 op" ALPHA]) (\MISC2.UFN [LAMBDA (ARG0 ARG1 ALPHA) (* ht: "26-May-85 17:22") (COND ((EQ ALPHA 2) (ERROR "Attempt to access bus extender option on a machine which does not support it")) (T (RAID "Unimplemented MISC2 op" ALPHA]) ) (PUTPROPS BUSEXTENDER COPYRIGHT ("Xerox Corporation" 1984 1985)) (DECLARE: DONTCOPY (FILEMAP (NIL (655 2240 (BX.INPUT 665 . 1300) (BX.OUTPUT 1302 . 1950) (BX.READSTATUS 1952 . 2238)) ( 5168 5764 (\MISC1.UFN 5178 . 5471) (\MISC2.UFN 5473 . 5762))))) STOP