(FILECREATED "16-Feb-86 00:08:50" {ERIS}<LISPCORE>LIBRARY>COLORNNCC.;9 31542  

      changes to:  (FNS \COLORNNCC.CMD \COLORNNCC.PAR2 \COLORNNCC.INIT \COLORNNCC.STARTBOARD 
                        \COLORNNCC.SENDCOLORMAPENTRY \COLORNNCC.SENDPAGE \COLORNNCC.PILOTBITBLT 
                        \COLORNNCC24.STARTBOARD \COLORNNCC24.STARTCOLOR \COLORNNCC24.SENDPAGE 
                        \COLORNNCC.DEMO \COLORNNCC.DRAWLINE1 \COLORNNCC.TEST3 MYTEST TEST24 TESTMODE 
                        TESTCM)
                   (VARS COLORNNCCCOMS)

      previous date: "15-Feb-86 21:44:39" {ERIS}<LISPCORE>LIBRARY>COLORNNCC.;7)


(* Copyright (c) 1985, 1986 by Xerox Corporation. All rights reserved.)

(PRETTYCOMPRINT COLORNNCCCOMS)

(RPAQQ COLORNNCCCOMS ((* COLORNNCC -- Drivers for Number Nine Computer Corporation color cards. 
                             -- By Kelly Roach. *)
                          (DECLARE: DOEVAL@LOAD DOEVAL@COMPILE DONTCOPY (CONSTANTS (DISPLAYADRH
                                                                                    10)
                                                                               (PARAMADRH 12)
                                                                               (REDTABLEADRL 256)
                                                                               (GREENTABLEADRL 512)
                                                                               (BLUETABLEADRL 768)
                                                                               (BANK0ADRL 1797)
                                                                               (BANK1ADRL 1798)))
                          (COMS (* Specific to REV512X8 board. *)
                                (INITVARS (\COLORNNCC.BANK1 0)
                                       (\COLORNNCC.BANK0 0)
                                       (\DEBUG.CURSORRAN NIL)
                                       (\DEBUG.SENDPAGERAN NIL)
                                       (\DEBUG.CURSORINTERRUPTED NIL)
                                       (\DEBUG.SENDPAGEINTERRUPTED NIL))
                                (MACROS \COLORNNCCBANK1 \COLORNNCCBANK0))
                          (COMS (* Specific to REV512X32 board. *)
                                (INITVARS (\COLORNNCC24.REDBASE NIL)
                                       (\COLORNNCC24.GREENBASE NIL)
                                       (\COLORNNCC24.BLUEBASE NIL)))
                          (FNS \COLORNNCC.CMD \COLORNNCC.PAR2)
                          (FNS \COLORNNCC.INIT)
                          (FNS \COLORNNCC.STARTBOARD \COLORNNCC.SENDCOLORMAPENTRY \COLORNNCC.SENDPAGE 
                               \COLORNNCC.PILOTBITBLT)
                          (FNS \COLORNNCC24.STARTBOARD \COLORNNCC24.STARTCOLOR \COLORNNCC24.SENDPAGE)
                          (FNS \COLORNNCC.DEMO \COLORNNCC.DRAWLINE1 \COLORNNCC.TEST3 MYTEST TEST24 
                               TESTMODE TESTCM)
                          (FILES BUSCOLOR)
                          (* \DEBUG vars are temporary till I figure out bank switching. *)
                          (VARS \COLORNNCC.LOCKEDFNS \COLORNNCC.LOCKEDVARS)
                          (DECLARE: DONTEVAL@LOAD DONTEVAL@COMPILE DOCOPY (P (\COLORNNCC.INIT)))))



(* COLORNNCC -- Drivers for Number Nine Computer Corporation color cards. -- By Kelly Roach. 
*)

(DECLARE: DOEVAL@LOAD DOEVAL@COMPILE DONTCOPY 
(DECLARE: EVAL@COMPILE 

(RPAQQ DISPLAYADRH 10)

(RPAQQ PARAMADRH 12)

(RPAQQ REDTABLEADRL 256)

(RPAQQ GREENTABLEADRL 512)

(RPAQQ BLUETABLEADRL 768)

(RPAQQ BANK0ADRL 1797)

(RPAQQ BANK1ADRL 1798)

(CONSTANTS (DISPLAYADRH 10)
       (PARAMADRH 12)
       (REDTABLEADRL 256)
       (GREENTABLEADRL 512)
       (BLUETABLEADRL 768)
       (BANK0ADRL 1797)
       (BANK1ADRL 1798))
)
)



(* Specific to REV512X8 board. *)


(RPAQ? \COLORNNCC.BANK1 0)

(RPAQ? \COLORNNCC.BANK0 0)

(RPAQ? \DEBUG.CURSORRAN NIL)

(RPAQ? \DEBUG.SENDPAGERAN NIL)

(RPAQ? \DEBUG.CURSORINTERRUPTED NIL)

(RPAQ? \DEBUG.SENDPAGEINTERRUPTED NIL)
(DECLARE: EVAL@COMPILE 
(PUTPROPS \COLORNNCCBANK1 MACRO ((BANK1)
                                 (SETQ \COLORNNCC.BANK1 BANK1)
                                 (PCBUS.WRITEHL PARAMADRH BANK1ADRL \COLORNNCC.BANK1)))
(PUTPROPS \COLORNNCCBANK0 MACRO ((BANK0)
                                 (SETQ \COLORNNCC.BANK0 BANK0)
                                 (PCBUS.WRITEHL PARAMADRH BANK0ADRL \COLORNNCC.BANK0)))
)



(* Specific to REV512X32 board. *)


(RPAQ? \COLORNNCC24.REDBASE NIL)

(RPAQ? \COLORNNCC24.GREENBASE NIL)

(RPAQ? \COLORNNCC24.BLUEBASE NIL)
(DEFINEQ

(\COLORNNCC.CMD
  (LAMBDA (ARG RESETFLG)                                              (* kbr: 
                                                                          " 4-Jan-86 16:31")
    (OR RESETFLG (until (EQ 0 (LOGAND 2 (PCBUS.READHL PARAMADRH 0)))))
    (PCBUS.WRITEHL PARAMADRH 1 (CAR ARG))
    (for X in (CDR ARG) do (until (EQ 0 (LOGAND 2 (PCBUS.READHL PARAMADRH 0))))
                                      (PCBUS.WRITEHL PARAMADRH 0 X))))

(\COLORNNCC.PAR2
  (LAMBDA (ARG)                                                       (* kbr: 
                                                                          " 4-Jan-86 16:31")
    (until (EQ 0 (LOGAND 2 (PCBUS.READHL 12 0))))
    (PCBUS.WRITEHL 12 0 (LOGAND ARG 255))
    (until (EQ 0 (LOGAND 2 (PCBUS.READHL 12 0))))
    (PCBUS.WRITEHL 12 0 (LOGAND (LRSH ARG 8)
                               255))))
)
(DEFINEQ

(\COLORNNCC.INIT
  (LAMBDA NIL                                                         (* kbr: 
                                                                          "15-Feb-86 18:14")
    (DECLARE (GLOBALVARS \COLORNNCCWSOPS \COLORNNCC24WSOPS \COLORNNCCINFO \COLORNNCCINFO24))
    (for FN in \COLORNNCC.LOCKEDFNS do (\LOCKFN FN))
    (for VAR in \COLORNNCC.LOCKEDVARS do (\LOCKVAR VAR))
    (SETQ \COLORNNCCWSOPS (create WSOPS
                                 STARTBOARD ←(FUNCTION \COLORNNCC.STARTBOARD)
                                 STARTCOLOR ←(FUNCTION \BUSCOLOR.STARTCOLOR)
                                 STOPCOLOR ←(FUNCTION \BUSCOLOR.STOPCOLOR)
                                 EVENTFN ←(FUNCTION \BUSCOLOR.EVENTFN)
                                 SENDCOLORMAPENTRY ←(FUNCTION \COLORNNCC.SENDCOLORMAPENTRY)
                                 SENDPAGE ←(FUNCTION \COLORNNCC.SENDPAGE)
                                 PILOTBITBLT ←(FUNCTION \COLORNNCC.PILOTBITBLT)))
    (SETQ \COLORNNCCINFO (create DISPLAYINFO
                                DITYPE ←(QUOTE REV512X8)
                                DIWIDTH ← 512
                                DIHEIGHT ← 480
                                DIBITSPERPIXEL ← 8
                                DIWSOPS ← \COLORNNCCWSOPS))
    (\DEFINEDISPLAYINFO \COLORNNCCINFO)
    (SETQ \COLORNNCC24WSOPS (create WSOPS
                                   STARTBOARD ←(FUNCTION \COLORNNCC24.STARTBOARD)
                                   STARTCOLOR ←(FUNCTION \COLORNNCC24.STARTCOLOR)
                                   STOPCOLOR ←(FUNCTION \BUSCOLOR.STOPCOLOR)
                                   EVENTFN ←(FUNCTION \BUSCOLOR.EVENTFN)
                                   SENDCOLORMAPENTRY ←(FUNCTION NILL)
                                   SENDPAGE ←(FUNCTION \COLORNNCC24.SENDPAGE)
                                   PILOTBITBLT ←(FUNCTION NILL)))
    (SETQ \COLORNNCCINFO24 (create DISPLAYINFO
                                  DITYPE ←(QUOTE REV512X32)
                                  DIWIDTH ← 512
                                  DIHEIGHT ← 480
                                  DIBITSPERPIXEL ← 24
                                  DIWSOPS ← \COLORNNCC24WSOPS))
    (\DEFINEDISPLAYINFO \COLORNNCCINFO24)))
)
(DEFINEQ

(\COLORNNCC.STARTBOARD
  (LAMBDA NIL                                                         (* kbr: 
                                                                          "13-Feb-86 23:21")
                                                                          (* IBM Bus Access 
                                                                          Mode. *)
    (PCBUS.WRITEHL PARAMADRH 1796 255)
    (PCBUS.WRITEHL PARAMADRH 1797 0)                                      (* Overlay Select.
                                                                          *)
    (PCBUS.WRITEHL PARAMADRH 1798 0)                                      (* Board Enable.
                                                                          *)
    (PCBUS.WRITEHL PARAMADRH 1799 255)
    (\COLORNNCC.CMD (QUOTE (0 31 62 100 8 5 3 240 64))
           T)
    (\COLORNNCC.CMD (QUOTE (71 64)))
    (\COLORNNCC.CMD (QUOTE (111)))
    (\COLORNNCC.CMD (QUOTE (70 0)))                                   (* Zoom Factor.
                                                                          *)
    (PCBUS.WRITEHL PARAMADRH 1792 255)
    (PCBUS.WRITEHL PARAMADRH 1793 255)
    (PCBUS.WRITEHL PARAMADRH 1794 255)
    (PCBUS.WRITEHL PARAMADRH 1795 255)
    (\COLORNNCC.CMD (QUOTE (75 0 192 0)))
    (\COLORNNCC.CMD (QUOTE (112 0 0 0 127)))
    (\COLORNNCC.CMD (QUOTE (120 255 255 255 255 255 255 255 255)))
    (\COLORNNCC.CMD (QUOTE (74 255 255)))
    (\COLORNNCC.CMD (QUOTE (107)))
    (\COLORNNCC.CMD (QUOTE (13)))))

(\COLORNNCC.SENDCOLORMAPENTRY
  (LAMBDA (FDEV COLOR# RGB)                                           (* kbr: 
                                                                          "15-Feb-86 21:04")
    (PROG NIL
          (PCBUS.WRITEHL PARAMADRH (IPLUS 256 COLOR#)
                 (fetch (RGB RED) of RGB))
          (PCBUS.WRITEHL PARAMADRH (IPLUS 512 COLOR#)
                 (fetch (RGB GREEN) of RGB))
          (PCBUS.WRITEHL PARAMADRH (IPLUS 768 COLOR#)
                 (fetch (RGB BLUE) of RGB)))))

(\COLORNNCC.SENDPAGE
  (LAMBDA (PAGE PAGE#)                                                (* kbr: 
                                                                          "16-Feb-86 00:03")
    (PROG (BANK1 BANK0 ADRL DISPINTERRUPT)                                (* Keyboard interrupts 
                                                                          have to be turned off to 
                                                                          gaurantee proper 
                                                                          COLORNNCC bank 
                                                                          selection. *)
          (SETQ DISPINTERRUPT (\GETBASE \EM.DISPINTERRUPT 0))             (* \PUTBASE 
                                                                          \EM.DISPINTERRUPT 0 0)
          (SETQ BANK1 (COND
                         ((EQ (LOGAND PAGE# 256)
                              0)
                          0)
                         (T 255)))
          (SETQ BANK0 (COND
                         ((EQ (LOGAND PAGE# 128)
                              0)
                          0)
                         (T 255)))
          (\COLORNNCCBANK1 BANK1)
          (\COLORNNCCBANK0 BANK0)
          (SETQ ADRL (UNFOLD (LOGAND PAGE# 127)
                            BYTESPERPAGE))
          (\BUSBLTOUTBYTES PAGE DISPLAYADRH ADRL WORDSPERPAGE)            (* \PUTBASE 
                                                                          \EM.DISPINTERRUPT 0 
                                                                          DISPINTERRUPT)
      )))

(\COLORNNCC.PILOTBITBLT
  (LAMBDA (PILOTBBT N)                                                (* kbr: 
                                                                          "30-Jun-85 16:01")
    (PROG (DEST DESTBIT WIDTH HEIGHT VMADDR BUSADDRHI BUSADDRLO NWORDS ABSCURRPAGE CURRPAGEINBITMAP 
                PAGE DISPINTERRUPT)
            
            (* The busmaster UPDATEDAEMON is a narrow communication bottleneck from 
            the color screen bitmap to the color frame buffer.
            We work around this bottleneck by communicating small important changes to 
            the color screen bitmap quickly and big less important changes slower.
            *)
            
            (* We try to make small changes that cross lots of pages appear visible 
            in the frame buffer quickly by writing to both color screen bitmap and 
            frame buffer. Big changes, which could be overwritten by other big changes 
            before the UPDATEDAEMON notices them (and so save us time this way) are 
            best left to the UPDATEDAEMON to handle.
            *)
                                                                          (* First, output to 
                                                                          the color screen bitmap.
                                                                          *)
          (\PILOTBITBLT PILOTBBT N)                                       (* If the PILOTBBT is 
                                                                          disjoint or is fairly 
                                                                          wide, then just return 
                                                                          now. *)
          (COND
             ((OR (NOT (fetch (PILOTBBT PBTDISJOINT) of PILOTBBT))
                  (IGREATERP (fetch (PILOTBBT PBTWIDTH) of PILOTBBT)
                         1000))
              (RETURN)))
            
            (* Probably a case worth optimizing: cursors, carets, characters, 
            vertical drawlines, and vertical scroll bars.
            \BUSBLTOUTBYTES works in words, not pixels
            (bytes)%. We handle this problem by getting the values for our pixels from 
            the DEST we just did our \PILOTBITBLT to, slopping over to a few unchanged 
            pixels when necessary. *)

          (SETQ DEST (fetch (PILOTBBT PBTDEST) of PILOTBBT))
          (SETQ DESTBIT (fetch (PILOTBBT PBTDESTBIT) of PILOTBBT))
          (SETQ WIDTH (fetch (PILOTBBT PBTWIDTH) of PILOTBBT))
          (SETQ HEIGHT (fetch (PILOTBBT PBTHEIGHT) of PILOTBBT))
          (SETQ ABSCURRPAGE (fetch (POINTER PAGE#) of DEST))
          (SETQ CURRPAGEINBITMAP (IDIFFERENCE ABSCURRPAGE ColorScreenBitMapBasePage))
          (SETQ PAGE (LOGAND CURRPAGEINBITMAP 127))
          (SETQ BUSADDRLO (UNFOLD (IPLUS (UNFOLD PAGE WORDSPERPAGE)
                                         (fetch (POINTER WORDINPAGE) of DEST)
                                         (FOLDLO DESTBIT BITSPERWORD))
                                 BYTESPERWORD))
          (SETQ NWORDS (IDIFFERENCE (FOLDHI (IPLUS DESTBIT WIDTH -1)
                                           BITSPERWORD)
                              (FOLDLO DESTBIT BITSPERWORD)))              (* Keyboard interrupts 
                                                                          have to be turned off to 
                                                                          gaurantee proper 
                                                                          COLORNNCC bank 
                                                                          selection. *)
          (SETQ DISPINTERRUPT (\GETBASE \EM.DISPINTERRUPT 0))
          (\PUTBASE \EM.DISPINTERRUPT 0 0)
          (SETQ \COLORNNCC.SENDPAGERAN NIL)
          (SETQ \COLORNNCC.CURSORRAN T)
          (\COLORNNCCBANK1 (COND
                              ((EQ (LOGAND CURRPAGEINBITMAP 256)
                                   0)
                               0)
                              (T 255)))
          (\COLORNNCCBANK0 (COND
                              ((EQ (LOGAND CURRPAGEINBITMAP 128)
                                   0)
                               0)
                              (T 255)))
          (SETQ DEST (\ADDBASE DEST (FOLDLO DESTBIT BITSPERWORD)))
          (for I from 1 to HEIGHT do (\BUSBLTOUTBYTES DEST DISPLAYADRH BUSADDRLO 
                                                            NWORDS)
                                                    (COND
                                                       ((EQ I HEIGHT)
                                                        (RETURN)))
                                                    (SETQ DEST (\ADDBASE DEST WORDSPERPAGE))
                                                    (SETQ PAGE (ADD1 PAGE))
                                                    (COND
                                                       ((ILESSP PAGE 128)
                                                        (SETQ BUSADDRLO (IPLUS BUSADDRLO BYTESPERPAGE
                                                                               )))
                                                       (T                 (* Crossing into 
                                                                          different bank.
                                                                          *)
                                                          (COND
                                                             ((EQ \COLORNNCC.BANK0 0)
                                                              (\COLORNNCCBANK0 255))
                                                             (T (\COLORNNCCBANK1 255)
                                                                (\COLORNNCCBANK0 0)))
                                                          (SETQ PAGE 0)
                                                          (SETQ BUSADDRLO (IDIFFERENCE BUSADDRLO
                                                                                 (IDIFFERENCE 65536 
                                                                                        BYTESPERPAGE)
                                                                                 )))))
          (COND
             (\COLORNNCC.SENDPAGERAN (SETQ \COLORNNCC.SENDPAGEINTERRUPTED T)))
          (\PUTBASE \EM.DISPINTERRUPT 0 DISPINTERRUPT))))
)
(DEFINEQ

(\COLORNNCC24.STARTBOARD
  (LAMBDA NIL                                                         (* kbr: 
                                                                          "15-Feb-86 16:14")
                                                                          (* First part is just 
                                                                          like setting up the 
                                                                          REV512X8. *)
    (\COLORNNCC.STARTBOARD)                                           (* Set up REV512X32 
                                                                          color lookup tables.
                                                                          *)
    (for I from 4096 to 16383 do (PCBUS.WRITEHL PARAMADRH I (LOGXOR (LOGAND I 255)
                                                                                   255)))
            
            (* I believe the following two commands will set REV512X32 to work in 
            RGB-GUN MODE. I was never able to find and/or make PIXEL MODE work.
            *)

    (PCBUS.WRITEHL 12 1796 0)
    (PCBUS.WRITEHL 12 1797 0)))

(\COLORNNCC24.STARTCOLOR
  (LAMBDA (FDEV)                                                      (* kbr: 
                                                                          "15-Feb-86 18:24")
    (PROG NIL
          (COND
             ((NULL \COLORNNCC24.REDBASE)
              (SETQ \COLORNNCC24.REDBASE (NCREATE (QUOTE VMEMPAGEP)))
              (SETQ \COLORNNCC24.GREENBASE (NCREATE (QUOTE VMEMPAGEP)))
              (SETQ \COLORNNCC24.BLUEBASE (NCREATE (QUOTE VMEMPAGEP)))
              (\LOCKPAGES \COLORNNCC24.REDBASE 1)
              (\LOCKPAGES \COLORNNCC24.GREENBASE 1)
              (\LOCKPAGES \COLORNNCC24.BLUEBASE 1)
              (\LOCKVAR (QUOTE \COLORNNCC24.REDBASE))
              (\LOCKVAR (QUOTE \COLORNNCC24.GREENBASE))
              (\LOCKVAR (QUOTE \COLORNNCC24.BLUEBASE))))
          (\BUSCOLOR.STARTCOLOR FDEV))))

(\COLORNNCC24.SENDPAGE
  (LAMBDA (PAGE PAGE#)                                                (* kbr: 
                                                                          "16-Feb-86 00:01")
    (PROG (POINTER ADRL DISPINTERRUPT X Y REDBANK GREENBANK BLUEBANK)     (* Keyboard interrupts 
                                                                          have to be turned off to 
                                                                          gaurantee proper 
                                                                          COLORNNGS bank 
                                                                          selection. *)
          (SETQ DISPINTERRUPT (\GETBASE \EM.DISPINTERRUPT 0))             (* \PUTBASE 
                                                                          \EM.DISPINTERRUPT 0 0)
            
            (* The code below separates out the 8bit red, 8bit green, and 8bit blue 
            components of a packed page of 24bit color.
            The first color boundary begins with one of first three bytes of the 
            packed page, and we must case out. There will be 171, 171, and 170 bytes 
            or a rotation thereof of red, green, and blue to be dealt with.
            Once the red, green, and blue components are separated out, they must be 
            shipped to the BusMaster. We need to ship these components to the right 
            banks of the REV512X32 board. We are only allowed to ship out a multiple 
            of words, so we ship 172 bytes in all cases getting the extra 1, 1, and 2 
            bytes that we will need to ship from the right places.
            *)

          (PROGN                                                          (* Calculate red, 
                                                                          green, blue components.
                                                                          *)
                 (SETQ POINTER PAGE)
                 (SETQ Y (IQUOTIENT PAGE# 3))
                 (SELECTQ (IREMAINDER PAGE# 3)
                     (0 (SETQ X 0))
                     (1 (SETQ POINTER (\ADDBASE POINTER -1))
                        (SETQ X 170))
                     (PROGN (SETQ POINTER (\ADDBASE POINTER -2))
                            (SETQ X 340)))
                 (for I from 0 to 171 as R from 0 by 3 as G from
                                                                                        1
                    by 3 as B from 2 by 3 do (\PUTBASEBYTE \COLORNNCC24.REDBASE I
                                                                        (\GETBASEBYTE POINTER R))
                                                                (\PUTBASEBYTE \COLORNNCC24.GREENBASE 
                                                                       I (\GETBASEBYTE POINTER G))
                                                                (\PUTBASEBYTE \COLORNNCC24.BLUEBASE I
                                                                       (\GETBASEBYTE POINTER B)))
                 (SETQ ADRL (IPLUS (LLSH (LOGAND Y 127)
                                         9)
                                   X)))
          (PROGN                                                          (* Ship red component.
                                                                          *)
                 (SETQ REDBANK (LRSH Y 7))
                 (PCBUS.WRITEHL 12 1024 REDBANK)
                 (\BUSBLTOUTBYTES \COLORNNCC24.REDBASE DISPLAYADRH ADRL (FOLDLO 172 2)))
          (PROGN                                                          (* Ship green 
                                                                          component. *)
                 (SETQ GREENBANK (IPLUS 4 REDBANK))
                 (PCBUS.WRITEHL 12 1024 GREENBANK)
                 (\BUSBLTOUTBYTES \COLORNNCC24.GREENBASE DISPLAYADRH ADRL (FOLDLO 172 2)))
          (PROGN                                                          (* Ship blue 
                                                                          component. *)
                 (SETQ BLUEBANK (IPLUS 8 REDBANK))
                 (PCBUS.WRITEHL 12 1024 BLUEBANK)
                 (\BUSBLTOUTBYTES \COLORNNCC24.BLUEBASE DISPLAYADRH ADRL (FOLDLO 172 2)))
                                                                          (* \PUTBASE 
                                                                          \EM.DISPINTERRUPT 0 
                                                                          DISPINTERRUPT)
      )))
)
(DEFINEQ

(\COLORNNCC.DEMO
  (LAMBDA NIL                                                         (* kbr: 
                                                                          " 4-Jan-86 16:26")
    (for I from 0 to 511 do (for J from 0 to 127
                                               do (PCBUS.WRITEHL 10 (PLUS (TIMES 512 J)
                                                                              I)
                                                             I)))
    (for I from 0 to 255 do (PCBUS.WRITEHL 12 (PLUS 256 I)
                                                   I)
                                           (PCBUS.WRITEHL 12 (PLUS 512 I)
                                                  I)
                                           (PCBUS.WRITEHL 12 (PLUS 768 I)
                                                  I))))

(\COLORNNCC.DRAWLINE1
  (LAMBDA (X0 Y0 XLIMIT YLIMIT DX DY CDL YINC MODE)                (* edited: 
                                                                       " 2-Jun-85 17:53")
    (PROG NIL                                                          (* DIR PLANE EAD DC D D2 
                                                                       D1 DM DI DD)
          (SETQ DI (IMAX DX DY))
          (SETQ DD (IMIN DX DY))
          (SETQ DIR (COND
                       ((ILESSP YINC 0)
                        (COND
                           ((IGREATERP DY DX)
                            0)
                           (T 1)))
                       (T (COND
                             ((IGREATERP DY DX)
                              2)
                             (T 3)))))
          (SETQ PLANE 0)
          (SETQ EAD (IPLUS (ITIMES (IDIFFERENCE 479 Y0)
                                  64)
                           (LRSH X0 4)
                           (ITIMES PLANE 16384)))                      (* CURS)
          (\COLORNNCC.CMD (LIST 73 (LOGAND EAD 255)
                                    (LOGAND (LRSH EAD 8)
                                           255)
                                    (IPLUS (LLSH (LOGAND X0 15)
                                                 4)
                                           (LRSH EAD 16))))            (* WDAT)
          (\COLORNNCC.CMD (LIST (IPLUS 32 (SELECTQ MODE
                                                  (PAINT 3)
                                                  (REPLACE 0)
                                                  (INVERSE 1)
                                                  (RETURN)))))
          (PROGN                                                       (* FIGS)
                 (\COLORNNCC.CMD (LIST 76 (IPLUS 8 DIR)))
                 (\COLORNNCC.PAR2 (SETQ DC (IMAX DX DY)))
                 (\COLORNNCC.PAR2 (SETQ D (IPLUS DD DD (IMINUS DI))))
                 (\COLORNNCC.PAR2 (SETQ D2 (LLSH (IDIFFERENCE DD DI)
                                                     1)))
                 (\COLORNNCC.PAR2 (SETQ D1 (IPLUS DD DD)))
                 (\COLORNNCC.PAR2 (SETQ DM 65535)))                (* FIGD)
          (\COLORNNCC.CMD (QUOTE (108))))))

(\COLORNNCC.TEST3
  (LAMBDA NIL                                                      (* edited: 
                                                                       " 2-Jun-85 18:12")
    (for X from 0 to 100 by 10
       do (\COLORNNCC.DRAWLINE1 0 479 512 0 X 100 0 -1 (QUOTE INVERSE)))
    (for Y from 0 to 90 by 10
       do (\COLORNNCC.DRAWLINE1 0 479 512 0 100 Y 0 -1 (QUOTE INVERSE)))))

(MYTEST
  (LAMBDA (COLOR)                                                     (* kbr: 
                                                                          "14-Feb-86 00:37")
    (for I from 0 to 511 do (for J from 0 to I
                                               do (TEST24 I J COLOR)))))

(TEST24
  (LAMBDA (X Y NEWVALUE)                                              (* kbr: 
                                                                          "14-Feb-86 00:58")
                                                                          (* Write NEWVALUE out 
                                                                          to X Y of REV512X32 
                                                                          board. *)
    (PROG (LO)
          (SETQ LO (IPLUS (LLSH (LOGAND Y 127)
                                9)
                          X))
          (PCBUS.WRITEHL 12 1024 (LRSH Y 7))
          (PCBUS.WRITEHL 10 LO (LOGAND (LRSH NEWVALUE 16)
                                      255))
          (PCBUS.WRITEHL 12 1024 (IPLUS 4 (LRSH Y 7)))
          (PCBUS.WRITEHL 10 LO (LOGAND (LRSH NEWVALUE 8)
                                      255))
          (PCBUS.WRITEHL 12 1024 (IPLUS 8 (LRSH Y 7)))
          (PCBUS.WRITEHL 10 LO (LOGAND NEWVALUE 255)))))

(TESTMODE
  (LAMBDA (X Y)                                                       (* kbr: 
                                                                          "13-Feb-86 23:28")
    (PCBUS.WRITEHL 12 1796 X)
    (PCBUS.WRITEHL 12 1797 Y)))

(TESTCM
  (LAMBDA NIL                                                         (* kbr: 
                                                                          "15-Feb-86 11:14")
                                                                          (* Set up color 
                                                                          tables. *)
    (for I from 4096 to 16383 do (PCBUS.WRITEHL PARAMADRH I (LOGXOR (LOGAND I 255)
                                                                                   255)))))
)
(FILESLOAD BUSCOLOR)



(* \DEBUG vars are temporary till I figure out bank switching. *)


(RPAQQ \COLORNNCC.LOCKEDFNS (\COLORNNCC.SENDPAGE \COLORNNCC.PILOTBITBLT))

(RPAQQ \COLORNNCC.LOCKEDVARS (\COLORNNCC.BANK1 \COLORNNCC.BANK0 \DEBUG.CURSORRAN 
                                        \DEBUG.SENDPAGERAN \DEBUG.CURSORINTERRUPTED 
                                        \DEBUG.SENDPAGEINTERRUPTED))
(DECLARE: DONTEVAL@LOAD DONTEVAL@COMPILE DOCOPY 
(\COLORNNCC.INIT)
)
(PUTPROPS COLORNNCC COPYRIGHT ("Xerox Corporation" 1985 1986))
(DECLARE: DONTCOPY
  (FILEMAP (NIL (4685 5616 (\COLORNNCC.CMD 4695 . 5178) (\COLORNNCC.PAR2 5180 . 5614)) (5617 7947 (
\COLORNNCC.INIT 5627 . 7945)) (7948 18345 (\COLORNNCC.STARTBOARD 7958 . 9539) (
\COLORNNCC.SENDCOLORMAPENTRY 9541 . 10089) (\COLORNNCC.SENDPAGE 10091 . 11747) (\COLORNNCC.PILOTBITBLT
 11749 . 18343)) (18346 25083 (\COLORNNCC24.STARTBOARD 18356 . 19565) (\COLORNNCC24.STARTCOLOR 19567
 . 20421) (\COLORNNCC24.SENDPAGE 20423 . 25081)) (25084 30973 (\COLORNNCC.DEMO 25094 . 25996) (
\COLORNNCC.DRAWLINE1 25998 . 28329) (\COLORNNCC.TEST3 28331 . 28786) (MYTEST 28788 . 29135) (TEST24 
29137 . 30150) (TESTMODE 30152 . 30407) (TESTCM 30409 . 30971)))))
STOP