home *** CD-ROM | disk | FTP | other *** search
- Date: 7 Dec 86 20:19:53 GMT
- From: cbatt!cwruecmp!bammi@ucbvax.Berkeley.EDU (Jwahar R. Bammi)
- Organization: CWRU Dept. of Computer Engineering, Cleveland OH
- Subject: Re: Info-Atari16 Digest V86 #32
-
- In article <8612060458.AA20395@polyslo.UUCP> sgstree@cad.Berkeley.EDU@polyslo.UUCP (Samuel Streeper) writes:
-
- >will leave x in d0, y in d1. I wish I could find documentation on the line
- >a variables. Can any one help out? For example, I have noticed that
- >the mouse coordinates may be found at -602(a0) and -600(a0).
- >Are these stable?
-
- There seems to be lack of Line A documentation around. I hope the
- following include file that i cooked up a while ago helps:
-
- usenet: .....!decvax!cwruecmp!bammi jwahar r. bammi
- csnet: bammi@case
- arpa: bammi%case@csnet-relay
- compuServe: 71515,155
-
- --aline.h--
-
- /***********************************************\
- * *
- * aline.h *
- * Common include file for C interface *
- * to low level Line A calls *
- * *
- * J.R. Bammi *
- * decvax!cwruecmp!bammi *
- * bammi%case@csnet-relay.ARPA *
- * bammi@case.CSNET *
- * *
- \***********************************************/
-
- #include "compiler.h" /* Compiler dependant defines */
- /* Defines things like WORD, LONG etc */
-
- /*****************************************************************************\
- * *
- * Defines *
- * *
- \*****************************************************************************/
-
- /*
- * Object colors (default pallette)
- *
- */
- #define WHITE 0
- #define BLACK 1
- #define RED 2
- #define GREEN 3
- #define BLUE 4
- #define CYAN 5
- #define YELLOW 6
- #define MAGENTA 7
- #define LWHITE 8
- #define LBLACK 9
- #define LRED 10
- #define LGREEN 11
- #define LBLUE 12
- #define LCYAN 13
- #define LYELLOW 14
- #define LMAGENTA 15
-
-
- /*
- * Vdi writing modes
- *
- */
- #define MD_REPLACE 1
- #define MD_TRANS 2
- #define MD_XOR 3
- #define MD_ERASE 4
-
-
- /*
- * Raster Op Codes
- *
- */
- #define ALL_WHITE 0
- #define S_AND_D 1
- #define S_AND_NOTD 2
- #define S_ONLY 3
- #define NOTS_AND_D 4
- #define D_ONLY 5
- #define S_XOR_D 6
- #define S_OR_D 7
- #define NOT_SORD 8
- #define NOT_SXORD 9
- #define D_INVERT 10
- #define NOT_D 11
- #define S_OR_NOTD 12
- #define NOTS_OR_D 13
- #define NOT_SANDD 14
- #define ALL_BLACK 15
-
- /*
- * Sprite formats
- *
- */
- #define SP_VDI 0
- #define SP_XOR 1
-
- /*
- * Line A Opcodes
- *
- */
- #define INIT 0
- #define PUTPIXEL 1
- #define GETPIXEL 2
- #define LINE 3
- #define HLINE 4
- #define RECTANGLE 5
- #define FPOLYGON 6
- #define BITBLT 7
- #define TEXTBLT 8
- #define SHOWMOUSE 9
- #define HIDEMOUSE 10
- #define TRANMOUSE 11
- #define USPRITE 12
- #define DSPRITE 13
- #define CPYRASTER 14
- #define FSEEDFILL 15 /* ROM TOS only */
-
-
-
-
- /*****************************************************************************\
- * *
- * Types *
- * *
- \*****************************************************************************/
-
- /* A pointer to the type LINEA is returned by the Line A init call
- * ($A000), in registers A0 and D0.
- * This pointer is saved in the global variable 'linea'.
- *
- */
- typedef struct {
-
- /* Type Name Offset Function Comments */
- /* ------------------------------------------------------------------------- */
- WORD VPLANES; /* 0 # of Planes Also see CurrRez */
- WORD VWRAP; /* 2 Bytes / scan line " " " */
- /* VWRAP can be changed to implement special effects*/
- /* Doubling VWRAP will skip every other scan line */
- /* */
- /* */
- WORD *CONTRL; /* 4 Ptr to CONTRL Array Contrl gets set to this */
- WORD *INTIN; /* 8 Ptr to INTIN Array Intin gets set to this */
- WORD *PTSIN; /* 12 Ptr to PTSIN Array Ptsin gets set to this */
- WORD *INTOUT; /* 16 Ptr to INTOUT Array Intout gets set to this */
- WORD *PTSOUT; /* 20 Ptr to PTSOUT Array Ptsout gets set to this */
- /* CONTRL is the control array */
- /* INTIN is the array of input parameters */
- /* PTSIN is the array of input coordinates */
- /* Even entrys are X coordinate */
- /* Odd entrys are corresponding Y coodinates */
- /* INTOUT is the array of output parameters */
- /* PTSOUT is the array of output coordinates */
- /* organizes like PTSIN. */
- /* */
- WORD COLBIT0; /* 24 Plane 0 Color Value All Three Rez's */
- WORD COLBIT1; /* 26 Plane 1 Color Value Med and Low Rez only */
- WORD COLBIT2; /* 28 Plane 2 Color Value Low Rez only */
- WORD COLBIT3; /* 30 Plane 3 Color Value Low Rez Only */
- /* Foreground color COLBIT0 + 2*COLBIT1 + 4*COLBIT2 */
- /* + 8*COLBIT3 */
- /* */
- /* */
- WORD LSTLIN; /* 32 Always set to -1, Done for you in Init_Aline */
- /* Does anyone know what it is supposed to be? */
- /* */
- WORD LNMASK; /* 34 Linemask used when drawing lines, same as Vdi's */
- /* line style */
- /* */
- WORD WMODE; /* 36 Writing mode */
- /* 0=Replace Mode-Replace all bits in Dest with src */
- /* 1=Trans. Mode-Only additional bits in src set(OR)*/
- /* 2=Xor Mode- Src XOR Dest */
- /* 3=Inverse Trans.- (NOT src) Or Dest */
- /* Values upto 16 are permitted */
- /* */
- WORD X1; /* 38 X1 coordinate used in various calls */
- /* */
- WORD Y1; /* 40 Y1 coordinate used in various calls */
- /* */
- WORD X2; /* 42 X2 coordinate used in various calls */
- /* */
- WORD Y2; /* 44 Y2 coordinate used in various calls */
- /* */
- /* */
- WORD *PATPTR; /* 46 Pointer to current fill pattern */
- /* Must be integral power of 2 (words) in length */
- WORD PATMSK; /* 50 I don't know why they call it a mask. It is in */
- /* reality the length in words of the current patt. */
- WORD MFILL; /* 52 Multi Plane fill flag 1 == Current fill Pattern */
- /* is for Muti Plane. */
- /* */
- /* */
- WORD CLIP; /* 54 Clipping Flag 1 == TRUE */
- WORD XMINCL; /* 56 Min X of clipping window */
- WORD YMINCL; /* 58 Min Y of clipping window */
- WORD XMAXCL; /* 60 Max X of clipping window */
- WORD YMAXCL; /* 62 Max Y of clipping window */
- /* */
- /* */
- WORD XDDA; /* 64 Accumulator for Scaling, Must be set to 0x08000 */
- /* before each call to Text Blt. Done for you in */
- /* in aline_text() */
- WORD DDAINC; /* 66 Scaling factor - Fractional amount to scale char */
- /* When scaling up = 256 *(Size-Textsize)/Textsize */
- /* When scaling down = 256*(Size)/Textsize */
- /* scaling down does not work */
- WORD SCALDIR; /* 68 Scaling direction 0 == down */
- WORD MONO; /* 70 Mono flag 0== current font is a propotional font */
- /* Its Ok for Thickening to increase the width of */
- /* the current character. */
- /* 1 == current font is mono spaced, so thickening */
- /* may not increase the width of the current char */
- /* */
- WORD SOURCEX; /* 72 X coordinate of character in the font form */
- /* SOURCEX is caluclated from info in the font */
- /* header for the current font (see FONT_HEAD type) */
- /* SOURCEX = off_table[char-first_ade] */
- /* SOURCEX is calculated for you in aline_text() */
- /* The pointer to a table of font header for the */
- /* internal fonts is returned in A2 on init (A000) */
- WORD SOURCEY; /* 74 Y coodinate of character in the font form */
- /* Typically set to 0 (top line of font form) */
- WORD DESTX; /* 76 X coordinate of character on screen */
- WORD DESTY; /* 78 Y coordinate of character on screen */
- WORD DELX; /* 80 Width of Character */
- /* Difference between two SOURCEX's */
- WORD DELY; /* 82 Height of Character */
- /* form_height field of FONT_HEAD of current font */
- WORD *FBASE; /* 84 Pointer to start of font form */
- WORD FWIDTH; /* 88 Width of the current font's form */
- /* */
- WORD STYLE; /* 90 Vector of style flags */
- /* Bit 0 = Thicken Flag */
- /* Bit 1 = Lighten Flag */
- /* Bit 2 = Skewing Flag */
- /* Bit 3 = Underline Flag (ignored) */
- /* Bit 4 = Outline Flag */
- /* */
- WORD LITEMASK; /* 92 Mask used for lightening text */
- /* The Mask is picked up from the font header */
- WORD SKEWMASK; /* 94 Mask used for skewing text */
- /* The Mask is picked up from the font header */
- WORD WEIGHT; /* 96 The number of bits by which to thicken text */
- /* The number is picked up from the font header */
- WORD ROFF; /* 98 Offset above baseline when skewing */
- /* Again picked up from the font header */
- WORD LOFF; /* 100 Offset below character baseline when skewing */
- /* Again picked up from the font header */
- /* */
- WORD SCALE; /* 102 Scaling Flag 1 == true */
- /* */
- WORD CHUP; /* 104 Character rotation vector. */
- /* 0 = normal (0 degrees) */
- /* 1800 = 180 degrees */
- /* 2700 = 270 degrees */
- /* */
- WORD TEXTFG; /* 106 Text foreground color */
- /* */
- char *SCRTCHP; /* 108 Address of buffer required for creating special */
- /* text effects. The size of this buffer should be */
- /* 1K according the Internals. The Atari document */
- /* of course does not talk about such things :-) */
- /* */
- WORD SCRPT2; /* 112 The offset of the scaling buffer buffer in above */
- /* buffer. Internals suggests an offset of 0x0040 */
- /* As usual the Atari document does'nt say a thing */
- /* */
- WORD TEXTBG; /* 114 Text background color (Ram Vdi only) */
- /* used for the BitBlt writing modes (4-19) only */
- /* */
- WORD COPYTRAN; /* 116 Copy raster form type flag (Ram vdi only) */
- /* 0 => Opaque type */
- /* n-plane source -> n-plane dest */
- /* BitBlt writing modes (4-19) */
- /* ~0 => Transparent type */
- /* 1-plane source -> n-plane dest */
- /* Vdi writing modes (1-3) */
- /* */
- WORD(*SEEDABORT)();/* 118 Pointer to function returning int, which is */
- /* called by the fill logic to allow the fill to */
- /* be aborted. If the routine returns FALSE (0) */
- /* the fill is not aborted. If it returns TRUE (~0) */
- /* the fill is aborted */
- /* ------------------------------------------------------------------------- */
-
- } LINEA; /* P H E W !!!!! */
-
-
- /*
- * Global Variables at negative offsets from the Line A parameter
- * block address returned by init.
- *
- */
- /* Offset Type Description */
- /* -------------------------------------------------------------------------- */
- /* -4 W Max Y pixel screen value */
- /* -6 W Text Status byte */
- /* -10 L Font offset table address */
- /* -12 W Max X pixel screen value */
- /* -14 W Font Width */
- /* -16 W First font ASCII code (first_ade) */
- /* -18 W Last font ASCII code (last_ade ) */
- /* -22 L Font address */
- /* -23 B Cursor countdown timer */
- /* -24 B Cursor flash interval */
- /* -26 W Y cursor position */
- /* -28 W X cursor position */
- /* -30 W Offset to first cell */
- /* -34 L Current cursor address */
- /* -36 W Foreground color index */
- /* -38 W Background color index */
- /* -40 W Offset to next cell */
- /* -42 W Max cells high - 1 */
- /* -44 W Max cells across - 1 */
- /* -46 W Cell height in pixels */
- /* -------------------------------------------------------------------------- */
-
- /*
- * Atari did'nt specify any names for these variables
- * so i invented them!
- *
- */
- #define MAXY *((WORD *)((char *)aline + (char *) -4L))
- #define TEXTSTATUS *((WORD *)((char *)aline + (char *) -6L))
- #define FONTOFFTABLE *((char **)((char **)aline + (char **)-10L))
- #define MAXX *((WORD *)((char *)aline + (char *)-12L))
- #define FONTWIDTH *((WORD *)((char *)aline + (char *)-14L))
- #define FIRSTADE *((WORD *)((char *)aline + (char *)-16L))
- #define LASTADE *((WORD *)((char *)aline + (char *)-18L))
- #define FONTDATA *((char **)((char **)aline + (char **)-22L))
- #define CURTIMER *((char *)((char *)aline + (char *)-23L))
- #define CURINTERVAL *((char *)((char *)aline + (char *)-24L))
- #define CURX *((WORD *)((char *)aline + (char *)-26L))
- #define CURY *((WORD *)((char *)aline + (char *)-28L))
- #define FSTOFFSET *((WORD *)((char *)aline + (char *)-30L))
- #define CURADDRESS *((char **)((char **)aline + (char **)-34L))
- #define FGCOLOR *((WORD *)((char *)aline + (char *)-36L))
- #define BGCOLOR *((WORD *)((char *)aline + (char *)-38L))
- #define NOFFSET *((WORD *)((char *)aline + (char *)-40L))
- #define CELLSHIGH *((WORD *)((char *)aline + (char *)-42L))
- #define CELLSACROSS *((WORD *)((char *)aline + (char *)-44L))
- #define CELLHEIGHT *((WORD *)((char *)aline + (char *)-46L))
-
-
- /* A pointer to array of type FONT is returned by the Line A init call
- * ($A000), in regsister A1.
- * This pointer is saved in the global array variable 'fnt'.
- *
- */
-
- typedef struct _font {
-
- /* Type Name Offset Function Comments */
- /* ------------------------------------------------------------------------- */
- WORD face_id; /* 0 Font face identifier 1 == system font */
- /* */
- WORD size; /* 2 Font size in points */
- /* */
- char name[32]; /* 4 Face name */
- /* */
- WORD first_ade; /* 36 Lowest ADE value in the face (lowest ASCII value */
- /* of displayable character). */
- /* */
- WORD last_ade; /* 38 Highest ADE value in the face (highest ASCII value*/
- /* of displayable character). */
- /* */
- WORD top; /* 40 Distance of top line relative to baseline */
- /* */
- WORD ascent; /* 42 Distance of ascent line relative to baseline */
- /* */
- WORD half; /* 44 Distance of half line relative to baseline */
- /* */
- WORD descent; /* 46 Distance of decent line relative to baseline */
- /* */
- WORD bottom; /* 48 Distance of bottom line relative to baseline */
- /* All distances are measured in absolute values */
- /* rather than as offsets. They are always +ve */
- /* */
- WORD wchar; /* 50 Width of the widest character in font */
- /* */
- WORD wcell; /* 52 Width of the widest cell character cell in face */
- /* */
- WORD left_off; /* 54 Left Offset see Vdi appendix G */
- /* */
- WORD right_off; /* 56 Right offset " " " */
- /* */
- WORD thicken; /* 58 Number of pixels by which to thicken characters */
- /* */
- WORD underline; /* 60 Width in pixels of the underline */
- /* */
- WORD lighten; /* 62 The mask used to lighten characters */
- /* */
- WORD skew; /* 64 The mask used to determine when to perform */
- /* additional rotation on the character to perform */
- /* skewing */
- /* */
- WORD flags; /* 66 Flags */
- /* bit 0 set if default system font */
- /* bit 1 set if horiz offset table should be used */
- /* bit 2 byte-swap flag (thanks to Intel idiots) */
- /* bit 3 set if mono spaced font */
- /* */
- WORD *h_offset; /* 68 Pointer to horizontal offset table */
- /* */
- WORD *off_table; /* 72 Pointer to character offset table */
- /* */
- char *data; /* 76 Pointer to font data */
- /* */
- WORD width; /* 80 Form width (#of bytes /scanline in font data) */
- /* */
- WORD height; /* 82 Form height (#of scanlines in font data) */
- /* */
- struct _font *next; /* 84 Pointer to next font in face */
- /* */
- /* ------------------------------------------------------------------------- */
- } FONT;
-
-
- /*
- * OP_TAB type required for Bit Blt parameter block.
- * each entry defines the logic operation to apply for
- * the 4 Fore/Back ground bit combinations
- */
- typedef struct {
-
- /* Type Name Offset Function Comments */
- /* ------------------------------------------------------------------------- */
- char fg0bg0; /* 0 Logic op to employ when both FG and BG are 0 */
- char fg0bg1; /* 1 Logic op to employ when FG = 0 and BG = 1 */
- char fg1bg0; /* 2 Logic op to employ when FG = 1 and BG = 0 */
- char fg1bg1; /* 3 Logic op to employ when both FG and BG are 1 */
- /* ------------------------------------------------------------------------- */
- } OP_TAB;
-
-
- /*
- * Source and destination description blocks
- */
- typedef struct {
- WORD bl_xmin; /* Minimum x */
- WORD bl_ymin; /* Minimum y */
- char *bl_form; /* Word aligned memory form */
- WORD bl_nxwd; /* Offset to next word in line */
- WORD bl_nxln; /* Offset to next line in plane */
- WORD bl_nxpl; /* Offset to next plane */
- }SDDB;
-
- /* Offsets to next word in plane */
- #define HI_NXWD 2
- #define MED_NXWD 4
- #define LOW_NXWD 8
-
- /* Scan line widths of the screen */
- #define HI_NXLN 80
- #define MED_NXLN 160
- #define LOW_NXLN 160
-
- /*
- * Offsets between planes - always the same due to
- * the way the STs video memory is laid out
- */
- #define NXPL 2
-
- /*
- * Bit Blt Parameter Block Type (for function $A007)
- *
- */
-
- typedef struct {
-
- /* Type Name Offset Function Comments */
- /* ------------------------------------------------------------------------- */
- WORD bb_b_wd; /* width of block in pixels */
- WORD bb_b_ht; /* height of block in pixels */
- WORD bb_plane_ct; /* number of planes to blit */
- WORD bb_fg_col; /* foreground color */
- WORD bb_bg_col; /* back ground color */
- OP_TAB bb_op_tab; /* logic for fg x bg combination */
- SSDB bb_s; /* source info block */
- SSDB bb_d; /* destination info block */
- WORD *bb_p_addr; /* pattern buffer address */
- WORD bb_p_nxln; /* offset to next line in pattern */
- WORD bb_p_nxpl; /* offset to next plane in pattern */
- WORD bb_p_mask; /* pattern index mask */
- char bb_fill[24]; /* work space */
- /* ------------------------------------------------------------------------- */
- } BBPB;
-
-
- /*
- * Memory Form Definition Block
- *
- */
- typedef struct
- {
- char *fd_addr; /* Addrerss of upper left corner of first*/
- /* plane of raster area. If NULL then */
- /* MFDB is for a physical device */
- WORD fd_w; /* Form Width in Pixels */
- WORD fd_h; /* Form Height in Pixels */
- WORD fd_wdwidth; /* Form Width in words (fd_w/sizeof(int))*/
- WORD fd_stand; /* Form format 0= device spec 1=standard */
- WORD fd_nplanes; /* Number of memory planes */
- WORD fd_r1; /* Reserved */
- WORD fd_r2; /* Reserved */
- WORD fd_r3; /* Reserved */
- } MFDB;
-
-
-
-
- /*
- * Sprite definition block
- *
- */
- typedef struct
- {
- WORD sp_xhot; /* Offset to X hot spot */
- WORD sp_yhot; /* Offset to Y hot spot */
- WORD sp_format; /* Format SP_VDI or SP_XOR */
- WORD sp_bg; /* Background color */
- WORD sp_fg; /* Foregroud color */
- WORD sp_data[32]; /* Sprite data - */
- /* Alternating words of back/fore */
- /* ground data */
- /* Note that: */
- /* sprite save block is */
- /* 10+VPLANES*64 bytes long */
-
- } SFORM;
-
-
- /*
- * Macros for the most reasonable linea functions.
- * All the rest require a long discussion.
-
- /*****************************************************************************\
- * *
- * Macros for some Line A functions *
- * *
- \*****************************************************************************/
-
- #define putpixel(x,y,v) ((PTSIN[0]=x),(PTSIN[1]=y),(INTIN[0]=v),linea1())
- #define getpixel(x,y) ((PTSIN[0]=x),(PTSIN[1]=y),linea2())
- #define SABORT_FUNC funcs[FSEEDFILL]
-
- /*****************************************************************************\
- * *
- * Global Variables *
- * *
- \*****************************************************************************/
-
- /*
- * Global Variables are defined in alglobal.c, extern every where else
- *
- */
- #ifndef ALGLOBAL
-
- extern LINEA *aline; /* Pointer to line a parameter block returned by init */
-
- extern FONT *fonts[]; /* Array of pointers to the three system font headers */
- /* returned by init (in register A1) */
-
- extern WORD (*funcs[])(); /* Array of pointers to the 15 line a functions */
- /* returned by init (in register A2) */
- /* only valid in ROM'ed TOS */
- #endif /* ALGLOBAL */
-
- /*** EOF ***/
- --
- usenet: .....!decvax!cwruecmp!bammi jwahar r. bammi
- csnet: bammi@case
- arpa: bammi%case@csnet-relay
- compuServe: 71515,155
-