Topic : TOS - das Betriebssystem Author : Version : tos.hyp (5. März 2013) Subject : Programmieren/Atari Nodes : 3001 Index Size : 93602 HCP-Version : 5 Compiled on : Atari @charset : atarist @lang : @default : Titel @help : @options : +g -i -s +x +zz -t4 @width : 70 View Ref-File6.3 Die negativen Line-A Variablen TOS 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;