HomeLine-ALINEABITBLT

6.3 Die negativen Line-A Variablen

Zusätzlich lassen sich über negative Offsets zu der Anfangsadresse der Line-A Variablen die lokalen Variablen des Bildschirmtreibers auslesen. Der Lesezugriff ist durch das Dokument "S.A.L.A.D." von Atari offiziell freigegeben worden. Allerdings sind dort die Offsets falsch angegeben. Diese Variablen lassen sich durch die nachfolgende Struktur beschreiben. Die Zahl im Kommentar gibt jeweils den Offset der Komponente zum Anfang Line-A Variablen LINEA an.

typedef struct
{
  int32_t  reserved6;          /* -$38E: reserviert                   */
  FONT_HDR *cur_font;          /* -$38A: Zeiger auf Header akt. Font  */
  int16_t  reserved5[23],      /* -$386: reserviert                   */
           m_pos_hx,           /* -$358: X-Koordinate Maus Hotspot    */
           m_pos_hy,           /* -$356: Y-Koordinate Maus Hotspot    */
           m_planes,           /* -$354: Zeichenmodus der Maus        */
                               /*        1 Replace, -1 XOR-Modus      */
           m_cdb_bg,           /* -$352: Maus Hintergrundfarbe        */
           m_cdb_fg,           /* -$350: Maus Vordergrundfarbe        */
           mask_form[32],      /* -$34E: Vordergrund und Maske        */
                               /*        abwechselnd 1 WORD           */
                               /*        Vordergrund und Maske        */
           inq_tab[45],        /* -$30E: wie vq_extnd                 */
           dev_tab[45],        /* -$2B4: wie v_opnwk                  */
           gcurx,              /* -$25A: X-Position Maus              */
           gcury,              /* -$258: Y-Position Maus              */
           m_hid_ct,           /* -$256: Anzahl der hide_mouse-calls  */
           mouse_bt,           /* -$254: Status der Mausknöpfe        */
           req_col[3][16],     /* -$252: Interne Daten für vq_color   */
           siz_tab[15],        /* -$1F2: wie v_opnwk                  */
           reserved4[2];       /*        reserviert                   */
  void     *cur_work;          /* -$1D0: Attribute der akt. Workstn.  */
  FONT_HDR *def_font;          /* -$1CC: Standard Systemzeichensatz   */
  FONT_HDR *font_ring[4];      /* -$1C8: Zeichensatzlisten            */
                               /*        verkette FONT_HDR Strukturen */
                               /*        0 als Endekennung            */
  int16_t  font_count,         /* -$1B8: Anzahl der Zeichensätze      */
           reserved3[45];      /*        reserviert                   */
  int8_t   cur_ms_stat,        /* -$15C: Mausstatus                   */
                               /*        Bit 0:    linker Knopf       */
                               /*        Bit 1:    rechter Knopf      */
                               /*        Bit 2..4: reserviert         */
                               /*        Bit 5:    1 Maus wurde bew.  */
                               /*        Bit 6:    1 Status des r.    */
                               /*                  Knopfs geändert    */
                               /*        Bit 7:    1 Status des l.    */
                               /*                  Knopfs geändert    */
           reserved2;          /*        reserviert                   */
  int16_t  v_hid_cnt,          /*        Anzahl der Hide_cursor-calls */
           cur_x,              /* -$158: X-Position Maus              */
           cur_y;              /* -$156: Y-Position Maus              */
  int8_t   cur_flag,           /* -$154: != 0: im VBL Maus neu zeich. */
           mouse_flag;         /* -$153: != 0: Maus-Interrupt ein     */
  int32_t  reserved1;          /*        reserviert                   */
  int16_t  v_sav_xy[2],        /* -$14E: gerettete X-Y-Koordinaten    */
           save_len;           /* -$14A: Anzahl der Bildschirmzeilen  */
  void     *save_addr;         /* -$148: Erstes gepuffertes Byte im   */
                               /*        Bildspeicher                 */
  int16_t  save_stat;          /* -$144: Dirty-Flag                   */
                               /*        Bit 0: 1 Buffer ist gültig   */
                               /*        Bit 1: 1 Long, 0 Word gebuf. */
  int32_t  save_area[4][16];   /* -$142: Buffer für Bild unter Maus   */
  void    (*user_tim)( void ); /*  -$42: Timer-Interrupt-Vektor       */
                               /*        sollte zum Beenden next_tim  */
                               /*        anspringen                   */
  void    (*next_tim)( void ); /*  -$3E: alter Timer-Interrupt        */
  void    (*user_but)( void ); /*  -$3A: Maustasten-Vektor            */
  void    (*user_cur)( void ); /*  -$36: Maus-Vektor                  */
  void    (*user_mot)( void ); /*  -$32: Mausbewegungs-Vektor         */
  int16_t  v_cel_ht,           /*  -$2E: Zeichenhöhe                  */
           v_cel_mx,           /*  -$2C: maximale Cursorspalte        */
           v_cel_my,           /*  -$2A: maximale Cursorzeile         */
           v_cel_wr,           /*  -$28: Characterzeilenbreite        */
           v_col_bg,           /*  -$26: Hintergrundfarbe             */
           v_col_fg;           /*  -$24: Vordergrundfarbe             */
  void     *v_cur_ad;          /*  -$22: Adresse der Cursorposition   */
  int16_t  v_cur_off,          /*  -$1E: Vertikaler Bildschirmoffset  */
           v_cur_xy[2];        /*  -$1C: X-Y-Cursor                   */
  int8_t   v_period,           /*  -$18: Blinkgeschwindigkeit         */
           v_cur_ct;           /*  -$17: Zähler für Blinken           */
  void     *v_fnt_ad;          /*  -$16: Zeiger auf Font              */
  int16_t  v_fnt_nd,           /*  -$12: größter ASCII-Wert           */
           v_fnt_st,           /*  -$10: kleinster ASCII-Wert         */
           v_fnt_wd,           /*   -$E: Breite des Fontimage in Byte */
           v_rez_hz,           /*   -$C: Bildschirmbreite in Pixel    */
           *v_off_ad,          /*   -$A: Font-Offset-Tabelle          */
           reserved,           /*   -$6: Cursorflag (TOS 1.00)/res.   */
                               /*        Bit 0: Blinken aus/ein       */
                               /*        Bit 1: Blinkstatus norm/inv  */
                               /*        Bit 2: Cursor unsichtb/sicht */
                               /*        Bit 3: Wrapping ein/aus      */
                               /*        Bit 4: invers ein/aus        */
                               /*        Bit 5: Cursorpos. gesp. n/j  */
           v_rez_vt,           /*   -$4: Bildschirmhöhe in Pixel      */
           bytes_lin;          /*   -$2: Bytes pro Pixelzeile         */
} VDIESC;

HomeLine-ALINEABITBLT