X-Git-Url: http://shamusworld.gotdns.org/cgi-bin/gitweb.cgi?p=rmac;a=blobdiff_plain;f=mark.h;h=e185c2489297fffdb91520d9431fbef1372f9e77;hp=230a77b3a6c69660c7d8613bb156d8395a1dce13;hb=HEAD;hpb=3385b366632d03745033fa6b19faabf60219bc6b diff --git a/mark.h b/mark.h index 230a77b..f10fbec 100644 --- a/mark.h +++ b/mark.h @@ -1,28 +1,58 @@ // -// RMAC - Reboot's Macro Assembler for the Atari Jaguar Console System +// RMAC - Renamed Macro Assembler for all Atari computers // MARK.H - A record of things that are defined relative to any of the sections -// Copyright (C) 199x Landon Dyer, 2011 Reboot and Friends +// Copyright (C) 199x Landon Dyer, 2011-2021 Reboot and Friends // RMAC derived from MADMAC v1.07 Written by Landon Dyer, 1986 -// Source Utilised with the Kind Permission of Landon Dyer +// Source utilised with the kind permission of Landon Dyer // #ifndef __MARK_H__ #define __MARK_H__ #include "rmac.h" -#include "sect.h" -#define MARK_ALLOC_INCR 1024 // #bytes to alloc for more mark space -#define MIN_MARK_MEM (3*sizeof(WORD)+2*sizeof(LONG)) +// A mark is of the form: +// .W section mark is relative to, and flags in upper byte +// .L location of mark in "from" section +// .W [from] new from section +// .L[L] [symbol] symbol involved in external reference (LL for 64-bit pointers) +#define MCHUNK struct _mchunk +MCHUNK { + MCHUNK * mcnext; // Next mark chunk + PTR mcptr; // Vector of marks + uint16_t mcalloc; // # marks allocted to mark block + uint16_t mcused; // # marks used in block +}; -// Globals, Externals etc +#define MWORD 0x0000 // Marked word +#define MLONG 0x0100 // Marked long +#define MQUAD 0x0400 // Marked quad +//This will have to be defined eventually. Might have to overhaul the mark +//system as 8-bits doesn't seem to be enough, at least for a bitfield (which it +//might not have to be, in which case it would be big enough...) +//#define MQUAD 0x // Marked quad word (TODO: merge with MDOUBLE?) +#define MMOVEI 0x0200 // Mark RISC MOVEI instruction +//#define MDOUBLE 0x0400 // Marked double float +//#define MEXTEND 0x0800 // Marked extended float +//#define MSINGLE 0x0880 // Marked single float (TODO: merge with MLONG?) +#define MGLOBAL 0x0800 // Mark contains global +#define MPCREL 0x1000 // Mark is PC-relative +#define MCHEND 0x2000 // Indicates end of mark chunk +#define MSYMBOL 0x4000 // Mark includes symbol pointer +#define MCHFROM 0x8000 // Mark includes change-to-from + +// Exported variables extern MCHUNK * firstmch; -// Prototypes -void init_mark(void); -void stopmark(void); -int rmark(int, LONG, int, int, SYM *); -int amark(void); -LONG bsdmarkimg(char *, LONG, LONG, int); +// Exported functions +void InitMark(void); +void StopMark(void); +uint32_t MarkRelocatable(uint16_t, uint32_t, uint16_t, uint16_t, SYM *); +uint32_t AllocateMark(void); +uint32_t MarkImage(register uint8_t * mp, uint32_t siz, uint32_t tsize, int okflag); +uint32_t MarkBSDImage(uint8_t *, uint32_t, uint32_t, int); +uint32_t CreateELFRelocationRecord(uint8_t *, uint8_t *, uint16_t section); +uint32_t MarkABSImage(uint8_t * mp, uint32_t siz, uint32_t tsize, int reqseg); #endif // __MARK_H__ +