mac-rom/Internal/Asm/ColorEqu.a
Elliot Nunn 9c249dafab Reverse 68k Color QuickDraw
The ROM now round-trips with QuickDraw mostly built from source.
(~30% of the ROM is now built from source.)
2017-12-26 09:52:55 +08:00

500 lines
19 KiB
Plaintext

;
; File: ColorEqu.a
;
; Copyright: © 1986-1991 by Apple Computer, Inc., all rights reserved.
;
; Change History (most recent first):
;
; <23> 10/1/91 KON Removed nsStackErr and noMemForPicPlayBack error since they are
; defined in SysErr.a
; <22> 8/21/91 JSM Clean up header.
; <21> 6/14/91 JL Removed Quickdraw glue vectors from this file because they have
; been shipping in Private.a. Added Inclusion of Private.a. Also
; put conditional in to make sure prNonPortable gets set to one.
; <20> 3/31/91 dba gbm: get rid of symbols from QuickDraw (some day someone will
; conditionally turn them back on again)
; <19> 3/11/91 JT Added new opcode for glyph state and a field in the picSave
; record for tracking this opcode during picture spooling. Code
; checked by KON. BRC numbers 82651 and 79185. Worksheet number
; KON-022. Also added an ALIGN statement to the UNLINK macro to
; squash the assembler warnings about code alignment.
; <18> 1/30/91 gbm sab, #38: Change the Ôalready including this fileÕ variable to
; all uppercase (for security reasons)
; <17> 12/13/90 KON Add color table signature for recording pixmaps without a color
; table into pictures. [smc]
; <16> 11/12/90 CL (reviewed by PKE)onMac is defined to a non-zero value in the
; system builds even though there is non mac plus code being built
; for it. Changing the onMac flag to different name which is not
; used.
; <15> 11/9/90 PKE (really CEL, reviewed by PKE) Make JStdTbTbl depend on onMac
; conditional to fix it for Mac Plus.
; <14> 10/31/90 SMC Added equates for internal grafVars fields.
; <13> 8/24/90 PKE Delete old names picSMgrChar and picSMgrSlop. Remove duplicate
; definition of nsStackerr (now in SysErr.a).
; <12> 8/23/90 PKE (per JT) Renamed picSMgrChar and picSMgrSlop to picQdChExtra and
; picQdRunSlop. Keep old names too until we can update all
; relevant sources.
; <11> 8/21/90 KON Add noMemForPictPlayback error.
; <10> 8/2/90 gbm change LEFTEDGE and RIGHTEDGE in oval state record to avoid
; conflicts with symbols elsewhere
; <9> 7/26/90 KON Moved nsStackerr from QD.a.
; <8> 6/29/90 KON ci ROM routines expect order of picSave record not to change, so
; I moved the new Char and Slop fields to the bottom so the
; pattern fields stay in the same place.
; <7> 6/21/90 CL Needed to make JStdTxMeas conditionalized for TrueType build so
; this file could be used. This only effects b&w since the base of
; the trap table is different for the Mac Plus compare to the SE
; or Portable.
; <1.6> 11/15/89 KON Changed UNLINK macro and added RTD_ macro to make friendly with
; B&W machines
; <¥1.6> 11/15/89 KON Overwriting because EASE screwed up and didn't accept last
; version.
; <1.5> 11/1/89 BAL Added opFontName to the picture opcodes. Grew picSave by 12
; bytes.
; <1.4> 6/30/89 BAL Added equate for qdStackXtra
; <1.3> 6/10/89 CEL Moved Private.a QuickDraw Equates into proper QuickDraw private
; file (colorequ.a), got rid of QuickDraw nFiles dependencies and
; fixed up necessary filesÉ
; <¥1.2> 4/12/89 BAL Blasting in 32-Bit QuickDraw 1.0B1
; <¥1.1> 4/12/89 BAL Blasting in 32-Bit QuickDraw 1.0B1
; <1.0> 11/16/88 CCH Adding from System Build.
; 10/3/88 CCH Took out UNLINK macro (duplicated in private.a)
; <C533> 12/15/86 DAF added gamma table format
; <C434> 11/18/86 CRC added fractional pen field in graf port
; <C387> 11/9/86 DAF added request list structure
; <C314> 10/31/86 DAF renamed GDevice dummy field
; <A283> 10/28/86 bbm moved location of the toolbox trap table.
; <C188> 9/30/86 EHB Merged in latest colorequ changes
; <C153> 9/13/86 EHB Moved CQD trap definitions to NEWEQU.a
; <C146> 9/8/86 BBM Used JStdTbTbl, which is the toolbox jump table.
;
;___________________________________________________________________________
IF (&TYPE('NEED_JSTDTXMEAS') = 'UNDEFINED') THEN ;
NEED_JSTDTXMEAS EQU 1
ENDIF
IF (&TYPE('isMacPlus') = 'UNDEFINED') THEN ;<16-CEL,PKE>
isMacPlus EQU 0
ENDIF
IF &TYPE('__INCLUDINGCOLOREQU__') = 'UNDEFINED' THEN
__INCLUDINGCOLOREQU__ SET 1
IF (&TYPE('PrNonPortable') = 'UNDEFINED') THEN
PrNonPortable EQU 1
ENDIF
IF PrNonPortable = 0 THEN
PrNonPortable EQU 1
ENDIF
include 'private.a'
;-----------------------------------------------
;
; Misc. Equates without another home
;
cTabSignature EQU $4B4F ;signature that PixMap has NIL color table
;-----------------------------------------------
;
; PRIVATE QUICKDRAW EQUATES
;
; additional private low memory globals
SaveFondFlags EQU $986 ;important byte from current FOND flags
FondState EQU $903 ;saved FOND purge state
; additional private low memory globals for nuMacÕs and later <C346>
SynListHandle EQU $0D32 ;a handle to a list of synthesized fonts
LastFore EQU $0D36 ;8 bytes: last foreground and background colors (FM)
LastMode EQU $0D3E ;word: last text mode (Font Manager)
LastDepth EQU $0D40 ;word: last depth font prepared for
FMExist EQU $0D42 ;byte: clear if InitFonts has already been called
SavedHilite EQU $0D43 ;byte: used for state across Mac II QD patches
;-----------------------------------------------------
; Region State record
rgnPtr EQU $0 ; [handle]
dataPtr EQU $4 ; [handle]
scanBuf EQU $8 ; [pointer]
scanSize EQU $C ; [word]
thisV EQU $E ; [word]
nextV EQU $10 ; [word]
minH EQU $12 ; [word]
maxH EQU $14 ; [word]
leftH EQU $16 ; [word]
rgnRec EQU $18 ; size of as region record
;------------------------------------------------------
;
; OFFSETS IN AN OVAL STATE RECORD:
;
OVALTOP EQU 0 ;INTEGER
OVALBOT EQU OVALTOP+2 ;INTEGER
OVALY EQU OVALBOT+2 ;INTEGER
RSQYSQ EQU OVALY+2 ;LONGINT
SQUARE EQU RSQYSQ+4 ;64 BIT LONGFIX
ODDNUM EQU SQUARE+8 ;64 BIT LONGFIX
ODDBUMP EQU ODDNUM+8 ;64 BIT LONGFIX
LEFTMOSTEDGE EQU ODDBUMP+8 ;32 BIT FIXED POINT
RIGHTMOSTEDGE EQU LEFTMOSTEDGE+4 ;32 BIT FIXED POINT
ONEHALF EQU RIGHTMOSTEDGE+4 ;32 BIT FIXED POINT
OVALSIZE EQU ONEHALF+4 ;SIZE OF AN OVALREC
;-----------------------------------------------------
;
; OFFSETS IN A PICSAVE RECORD:
;
thePic EQU 0 ;PICHANDLE
picMax EQU 4 ;LongInt
picIndex EQU 8 ;LongInt
picClipRgn EQU 12 ;RgnHandle
picBkPat EQU 16 ;Pattern
picTxFont EQU 24 ;WORD
picTxFace EQU 26 ;Style
picTxMode EQU 28 ;WORD
picTxSize EQU 30 ;WORD
picSpExtra EQU 32 ;Fixed Point
picTxNumer EQU 36 ;Point
picTxDenom EQU 40 ;Point
picTxLoc EQU 44 ;Point
picPnLoc EQU 48 ;Point
picPnSize EQU 52 ;Point
picPnMode EQU 56 ;WORD
picPnPat EQU 58 ;Pattern
picFillPat EQU 66 ;Pattern
picTheRect EQU 74 ;Rect
picOvSize EQU 82 ;Point
picOrigin EQU 86 ;Point
picFgColor EQU 90 ;Long
picBkColor EQU 94 ;Long
picSaveRec EQU 98 ;total size in bytes
picVersion EQU 98 ;WORD
picRGBFgCol EQU 100 ;RGB (6 bytes)
picRGBBkCol EQU 106 ;RGB (6 bytes)
picChExtra EQU 112 ;WORD
picLocHFrac EQU 114 ;WORD
picRGBOpColor EQU 116 ;RGB (6 bytes)
picRGBHiColor EQU 122 ;RGB (6 bytes)
picFillPP EQU 128 ;Handle
picPnPP EQU 132 ;Handle
picBkPP EQU 136 ;Handle
picFontList EQU 140 ;Handle
picQdChExtra EQU 144 ;Fixed (moved below pattern stuff) <29JUN90 KON><12>
picQdRunSlop EQU 148 ;Fixed (moved below pattern stuff) <29JUN90 KON><12>
picGlyphState EQU 152 ;Long, outline preferred, preserve glyph, fractional widths, scale disable flags <19>
picReserve1 EQU 156 ;Handle
npicSaveRec EQU 160 ;total size in bytes
pictVersion EQU 1 ;version number for pict
npicVersion EQU $2FF ;version number for npic
;-----------------------------------------------
;
; PICTURE OPCODES
;
opNOP EQU $0 ; nop opcode
opClip EQU $1 ; clip opcode
opBkPat EQU $2 ; background pattern opcode
opTxFont EQU $3 ; text font opcode
opTxFace EQU $4 ; text face opcode
opTxMode EQU $5 ; text mode opcode
opSpExtra EQU $6 ; space extra opcode
opPnSize EQU $7 ; pen size opcode
opPnMode EQU $8 ; pen mode opcode
opPnPat EQU $9 ; pen pattern opcode
opFillPat EQU $A ; fill pattern opcode
opOvSize EQU $B ; oval size opcode
opOrigin EQU $C ; origin opcode
opTxSize EQU $D ; text size opcode
opFgColor EQU $E ; foreground color opcode
opBkColor EQU $F ; background color opcode
opTxRatio EQU $10 ; text ratio opcode
opVersion EQU $11 ; version opcode
opBkPixPat EQU $12 ; color background pattern opcode
opPnPixPat EQU $13 ; color pen pattern opcode
opFillPixPat EQU $14 ; color fill pattern opcode
opPnLocHFrac EQU $15 ; fractional pen position opcode
opChExtra EQU $16 ; extra for each character
; opcode $17 unused
opIFore EQU $18 ; foreColor index opcode
opIBack EQU $19 ; backColor index opcode
opRGBFgCol EQU $1A ; RGB foreColor opcode
opRGBBkCol EQU $1B ; RGB backColor opcode
opHiliteMode EQU $1C ; hilite mode flag
opHiliteColor EQU $1D ; RGB hilite color
opDefHilite EQU $1E ; Use default hilite color
opOpColor EQU $1F ; RGB OpColor for arithmetic modes
opLine EQU $20 ; line opcode
opLineFrom EQU $21 ; line from opcode
opShortLine EQU $22 ; short line opcode
opShortLineFrom EQU $23 ; short line from opcode
opLongText EQU $28 ; long text opcode
opDHText EQU $29 ; dh text opcode
opDVText EQU $2A ; dv text opcode
opDHDVText EQU $2B ; dh,dv text opcode
opFontName EQU $2C ; font name/id binding
opLineLayout EQU $2D ; script manager line-layout state
opGlyphState EQU $2E ; TrueType glyph drawing state <19>
opBitsRect EQU $90 ; copybits, rect clipped opcode
opBitsRgn EQU $91 ; copybits, rgn clipped opcode
opPackBitsRect EQU $98 ; packed copybits, rect clipped opcode
opPackBitsRgn EQU $99 ; packed copybits, rgn clipped opcode
opShortComment EQU $A0 ; short comment opcode
opLongComment EQU $A1 ; long comment opcode
opEndPic EQU $FF ; end of picture opcode
ngHeaderOp EQU $0C00 ; NuGraf Header opcode
;-----------------------------------------------
;
; COLOR QUICKDRAW EQUATES
;
nurbMask EQU $7FFF ; mask top 2 bits of rowbytes
rbMask EQU $1FFF ; mask top 3 bits of rowbytes
PMFlag EQU $8000 ; flag to say it's a new pixMap
cPortFlag EQU $C000 ; isPixMap+isCPort
pixVersion EQU $0000 ; isPixMap
qdStackXtra EQU $0800 ; stack space left for interrupts <1.4> BAL
isPixMap EQU 15 ; for testing high bit of pRowbytes
isCPort EQU 14 ; indicates that "bitmap" belongs to port
;-----------------------------------------------
;
; COLOR QUICKDRAW OFFSETS
;
;-----------------------------------------------
;
; OFFSETS WITHIN A PIXELMAP
;
pBaseAddr EQU 0 ; [long]
pNewFlag EQU pBaseAddr+4 ; [1 bit] upper bit of rowbytes is flag
pRowBytes EQU pBaseAddr+4 ; [word]
pBounds EQU pRowBytes+2 ; [rect]
IF 0 THEN ; Seems pretty Scary Bruce
pmVersion EQU pBounds+8 ; [word] pixMap version number
ENDIF
packType EQU pmVersion+2 ; [word] defines packing format
packSize EQU packType+2 ; [long] size of pixel data
hRes EQU packSize+4 ; [fixed] h. resolution (ppi)
vRes EQU hRes+4 ; [fixed] v. resolution (ppi)
pixelType EQU vRes+4 ; [word] defines pixel type
pixelSize EQU pixelType+2 ; [word] # bits in pixel
cmpCount EQU pixelSize+2 ; [word] # components in pixel
cmpSize EQU cmpCount+2 ; [word] # bits per field
planeBytes EQU cmpSize+2 ; [long] offset to next plane
IF 0 THEN
pmTable EQU planeBytes+4 ; [long] color map
pmReserved EQU pmTable+4 ; [long] MUST BE 0
pmRec EQU pmReserved+4 ; size of pixelMap record
ENDIF
;------------------------------
; <14> OFFSETS WITHIN GRAFVARS:
;
;rgbOpColor EQU 0 ; [6 bytes] color for addPin, subPin and average
;rgbHiliteColor EQU rgbOpColor+6 ; [6 bytes] color for hiliting
;pmFgColor EQU rgbHiliteColor+6 ; [4 bytes] palette handle for foreground color
;pmFgIndex EQU pmFgColor+4 ; [2 bytes] index value for foreground
;pmBkColor EQU pmFgIndex+2 ; [4 bytes] palette handle for background color
;pmBkIndex EQU pmBkColor+4 ; [2 bytes] index value for background
;pmFlags EQU pmBkIndex+2 ; [2 bytes] flags for Palette Manager
;grafVarRec EQU pmFlags+2 ; size of grafVar record
gworldstuff EQU grafVarRec ;[6 bytes] stuff that gworlds add to grafvars
foreStream EQU gworldstuff+6 ;[4 bytes] foreground stream ID number
foreRatio EQU foreStream+4 ;[2 bytes] foreground transparency ratio
backStream EQU foreRatio+2 ;[4 bytes] background stream ID number
backRatio EQU backStream+4 ;[2 bytes] background transparency ratio
streamFiller EQU backRatio+2 ;[1 byte] currently unused byte
streamMode EQU streamFiller+1 ;[1 byte] alpha channel mode
newGrafVarRec EQU streamMode+1 ;size of full grafVar record
;------------------
; fields within patXMap
patXRow EQU 0 ; [word] rowbytes of expanded pattern
patXHMask EQU patXRow+2 ; [word] horizontal mask
patXVMask EQU patXHMask+2 ; [word] vertical mask
LastCTable EQU patXVMask+2 ; [long] seed value for last color table
LastOfst EQU LastCTable+4 ; [word] last global-local offset
LastInvert EQU LastOfst+2 ; [long] last invert value
LastAlign EQU LastInvert+4 ; [long] last horizontal align
LastStretch EQU LastAlign+4 ; [word] last stretch
ppXInfo EQU LastStretch+2 ; size of expanded data
ScrnActive EQU 15 ; 1 if in use
; inverse Table structure (shouldn't be a public structure, but is obvious) <C96/29Jul86>DAF
ITabSeed EQU $0 ;[long] ID of owning color table
iTabRes EQU $4 ;[word] resolution of this table
iTTable EQU $6 ;table of indices starts here
ITabHidden EQU $00 ;number of hidden entries (0 for balanced table)
ITabFlags EQU $02 ;[word] flags for this table <BAL 16Mar89>
ITabReserved EQU $04 ;[word] reserved for future use
ITabInfo EQU $06
ITabLuma EQU $106 ;1 bytes per color at the moment <BAL 18Mar89>
ITExtraSize EQU $206 ;1 bytes per color at the moment <BAL 18Mar89>
;-----------------------------------------------------
;
; EQUATES FOR COLOR CURSOR SAVE AREA
;
; NOTE THAT THE FIRST FOUR FIELDS ARE PARALLEL TO THE FIRST FOUR FIELDS
; OF A PATTERN SO THAT PATCONVERT CAN BE USED TO EXPAND A CURSOR
;
CCTYPE EQU 0 ;[WORD] CURSOR TYPE
CCMAP EQU CCTYPE+2 ;[LONG] HANDLE TO CURSOR'S PIXMAP
CCDATA EQU CCMAP+4 ;[LONG] HANDLE TO CURSOR'S COLOR DATA
CCXDATA EQU CCDATA+4 ;[LONG] HANDLE TO EXPANDED DATA
CCXMASK EQU CCXDATA+4 ;[LONG] HANDLE TO EXPANDED MASK
CCSAVE EQU CCXMASK+4 ;[LONG] HANDLE TO SAVE BITS UNDER CURSOR
CCLASTCRSR EQU CCSAVE+4 ;[32 BYTES] DATA FOR LAST B/W CURSOR DRAWN
CCID EQU CCLASTCRSR+32 ;[LONG] ID FOR LAST COLOR CURSOR DRAWN
CCDEPTH EQU CCID+4 ;[WORD] DEPTH FOR LAST CURSOR DRAWN
CCSTATEREGS EQU CCDEPTH+2 ;[16 BYTES] STATE INFO OF SAVED DATA
CCBYTES EQU CCSTATEREGS+16 ;[WORD] ROWBYTES OF EXPANDED DATA
CCMAXDEPTH EQU CCBYTES+2 ;[WORD] MAXIMUM SCREEN DEPTH
CCSAVEREC EQU CCMAXDEPTH+2+8 ;SIZE OF CURSOR SAVE AREA
; Font Manager low mem
;
FontFlag EQU $15E ; font manager loop flag [byte]
FOutError EQU $998 ; error code
FOutFontHandle EQU $99A ; handle to font bits
FOutBold EQU $99E ; bolding factor
FOutItalic EQU $99F ; italic factor
FOutULOffset EQU $9A0 ; underline offset
FOutULShadow EQU $9A1 ; underline halo
FOutULThick EQU $9A2 ; underline thickness
FOutShadow EQU $9A3 ; shadow factor
FOutExtra EQU $9A4 ; extra horizontal width
FOutAscent EQU $9A5 ; height above baseline
FOutDescent EQU $9A6 ; height below baseline
FOutWidMax EQU $9A7 ; maximum width of character
FOutLeading EQU $9A8 ; space between lines
FOutUnused EQU $9A9 ; unused byte (must have even number)
FOutNumer EQU $9AA ; point for numerators of scale factor
FOutDenom EQU $9AE ; point for denominators of scale factor
;----------------------------------------------
;
; Trap table equates used by QuickDraw:
;
IF isMacPlus THEN ;<16-CEL,PKE>
JStdTbTbl EQU $0C00 ;<15-CEL,PKE>
ELSE
JStdTbTbl EQU $0E00 ; <C146><A283>
ENDIF
JStdArc EQU JStdTbTbl+(4*$BD)
JStdBits EQU JStdTbTbl+(4*$EB)
JStdComment EQU JStdTbTbl+(4*$F1)
JStdGetPic EQU JStdTbTbl+(4*$EE)
JStdLine EQU JStdTbTbl+(4*$90)
JStdOval EQU JStdTbTbl+(4*$B6)
JStdPoly EQU JStdTbTbl+(4*$C5)
JStdPutPic EQU JStdTbTbl+(4*$F0)
JStdRect EQU JStdTbTbl+(4*$A0)
JStdRgn EQU JStdTbTbl+(4*$D1)
JStdRRect EQU JStdTbTbl+(4*$AF)
JStdText EQU JStdTbTbl+(4*$82)
IF NEED_JSTDTXMEAS THEN
JStdTxMeas EQU JStdTbTbl+(4*$ED)
ENDIF
JStdOpcode EQU JStdTbTbl+(4*$3F8)
MACRO
UNLINK
.*--------------------------------------------------------------
.*
.* UNLINK A6, STRIP PARAMETERS, AND RETURN.
.*
.* FIRST PARAM IS NUMBER OF BYTES OF STACK BIAS.
.*
UNLK A6 ;RELEASE LOCAL VARIABLES
.*
IF &Eval(&Syslst[1])=0 THEN;NO PARAMETERS ?
RTS ;THEN JUST RTS
.*
ELSEIF &Eval(&Syslst[1])=4 THEN;4 BYTES ?
MOVE.L (SP)+, (SP) ;STRIP PARAMETERS
RTS ;RETURN
ELSE
RTD_ &Eval(&Syslst[1]) ;STRIP PARAMETERS AND RETURN
ENDIF
if 0 then ; turn this on again some day <20>
dc.b &Syslst[2] ;PUT OUT THE STRING
align ; align code for next function or procedure <19>
endif
.*
ENDM
MACRO
_StackAvail
MOVE.L $400+4*$65,A0 ;get address of stack space routine
JSR (A0) ;get stack space into D0 and return
ENDM
MACRO
_GetScrnBits ; it's in crsrcore!!
DC.W ($A833) ;new trap number
ENDM
MACRO
_SwapFont
MOVE.L $8E0,A0 ;get pointer to FMSwapFont
JSR (A0) ;call font manager
ENDM
MACRO
RTD_ &parm1
IF &SETTING('MACHINE') <> 'MC68000' THEN
RTD #&parm1
ELSE
IF &Eval(&parm1) = 0 THEN
rts
ELSEIF &Eval(&parm1)=4 THEN;4 BYTES ?
move.l (SP)+, (SP) ;STRIP PARAMETERS
rts ;RETURN
ELSEIF &Eval(&parm1)<=8 THEN
move.l (sp), &parm1(sp)
addq #&parm1, sp
rts
ELSE
move.l (sp), &parm1(sp)
add.w #&parm1, sp
rts
ENDIF
ENDIF
ENDM
ENDIF ; ...already included