Subversion Repositories pentevo

Rev

Blame | Last modification | View Log | Download | RSS feed | ?url?

  1. #ifndef _FILEFORMAT_H
  2. #define _FILEFORMAT_H
  3. /* fileformat.h */
  4. /*****************************************************************************/
  5. /* SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only                     */
  6. /*                                                                           */
  7. /* AS-Portierung                                                             */
  8. /*                                                                           */
  9. /* Definition von Konstanten fuer das P-Format                               */
  10. /*                                                                           */
  11. /* Historie: 3.12.1996 Grundsteinlegung                                      */
  12. /*           11. 9.1998 ROMDATA-Segment hinzugenommen                        */
  13. /*           12. 7.1999 RelocRec-Typ hinzugenommen                           */
  14. /*           19. 1.2000 Patch-Typen definiert                                */
  15. /*                                                                           */
  16. /*****************************************************************************/
  17.  
  18. #include "addrspace.h"
  19.  
  20. #define FileMagic 0x1489
  21.  
  22. #define FileHeaderEnd       0x00   /* Dateiende */
  23. #define FileHeaderStartAdr  0x80   /* Einsprungadresse absolut */
  24. #define FileHeaderDataRec   0x81   /* normaler Datenrecord */
  25. #define FileHeaderRDataRec  0x82   /* Datenrecord mit Symbolen */
  26. #define FileHeaderRelocRec  0x83   /* relokatibler Datenrecord */
  27. #define FileHeaderRRelocRec 0x84   /* relokatibler Datenrecord mit Symbolen */
  28. #define FileHeaderRelocInfo 0x85   /* Relokationsinformationen */
  29.  
  30. /* Definition der im Code liegenden, zu patchenden Typen:
  31.  
  32.    Dazu wird ein 32-Bit-Wert verwendet.  Das oberste Byte gibt den Basistyp
  33.    an, hier ist momentan nur 0 fuer binaere Integers definiert.  Fuer diesen
  34.    Fall steht in Bit 0..7 die Laenge des Integers in Bits, in Bit 20 die
  35.    Information, ob es sich um einen Big(1)- oder Little-Endian(0)-Typ handelt.
  36.    Bits 8..11 geben die Startposition bzw. Bits 12..15 die Laenge der ersten
  37.    Komponente im ersten Byte an, danach folgen so viele ganze Bytes wie
  38.    moeglich.  Bits 16 bis 19 geben die Lage der verbleibenden Bits im letzten
  39.    Byte an.  Bit 21 zeigt an, ob bei der Relokation addiert oder subtrahiert
  40.    werden soll.  Bit 22 spezifiziert 'Seitenintegers', d.h. die Adresse,
  41.    die an einer bestimmten Stelle eingepatcht wird, muss in den oberen (nicht
  42.    gespeicherten) Bits identisch zur Adresse der Patchstelle selber sein.
  43.    Ist Bit22=0, ist es ein normaler vorzeichenloser Int von 0...(2^n)-1
  44.  
  45.    Daraus ergeben sich z. B. folgende einfachen Typen: */
  46.  
  47. #define RelocTypeL8  0x00008008l
  48. #define RelocTypeB8  RelocTypeL8          /* :-) was wunder */
  49. #define RelocTypeL16 0x00008010l
  50. #define RelocTypeB16 0x00108010l
  51. #define RelocTypeL24 0x00008018l
  52. #define RelocTypeB24 0x00108018l
  53. #define RelocTypeL32 0x00008020l
  54. #define RelocTypeB32 0x00108020l
  55. #define RelocTypeL64 0x00008040l
  56. #define RelocTypeB64 0x00108040l
  57.  
  58. #define RelocFlagBig  0x00100000l
  59. #define RelocFlagSUB  0x00200000l
  60. #define RelocBitCnt(Type) (Type & 0xff)
  61. #define RelocFlagPage 0x00400000l
  62.  
  63. /* this is an internal symbol name used to signify the start address
  64.    of a segment */
  65.  
  66. #define RelName_SegStart "$$$"
  67.  
  68. #define RelFlag_Relative 1
  69.  
  70. #endif /* _FILEFORMAT_H */
  71.