]> Shamusworld >> Repos - rmac/blobdiff - sect.h
Initial commit for 68020/30/40/60/68881/68882/68851 support.
[rmac] / sect.h
diff --git a/sect.h b/sect.h
index b4c3733cab4c4aac1f560620f880d33d1fafe3c8..129b1cc08148228ea6ba3ec0c35f059a4dfc7404 100644 (file)
--- a/sect.h
+++ b/sect.h
@@ -24,8 +24,8 @@
                                                *chptr++=(uint8_t)((lw)>>8); \
                                                *chptr++=(uint8_t)(lw); \
                                                sloc += 4; ch_size += 4; if(orgactive) orgaddr += 4;}
-//#define D_rword(w)   {*chptr++=(uint8_t)w; *chptr++=(uint8_t)(w>>8); \
-//                                             sloc+=2; ch_size+=2;if(orgactive) orgaddr += 2;}
+#define D_rword(w)     {*chptr++=(uint8_t)w; *chptr++=(uint8_t)(w>>8); \
+                                               sloc+=2; ch_size+=2;if(orgactive) orgaddr += 2;}
 //#define D_rlong(lw)  {*chptr++=(uint8_t)(lw>>16);*chptr++=(uint8_t)(lw>>24);\
 //                                             *chptr++=(uint8_t)lw;*chptr++=(uint8_t)(lw>>8); \
 //                                             sloc+=4; ch_size += 4;if(orgactive) orgaddr += 4;}
 // token.L     expression list
 // (etc)
 // ENDEXPR.L   (end of expression)
-#define FUMASK       007               // Mask for fixup cases:
-#define FU_QUICK     000               // Fixup 3-bit quick instr field
-#define FU_BYTE      001               // Fixup byte
-#define FU_WORD      002               // Fixup word
-#define FU_WBYTE     003               // Fixup byte (at loc+1)
-#define FU_LONG      004               // Fixup long
-#define FU_BBRA      005               // Fixup byte branch
-#define FU_6BRA      007               // Fixup 6502-format branch offset
-#define FU_SEXT      010               // Ok to sign extend
-#define FU_PCREL     020               // Subtract PC first
-#define FU_EXPR      040               // Expression (not symbol) follows
+#define FUMASK       0x000F            // Mask for fixup cases:
+#define FU_QUICK     0x0000            // Fixup 3-bit quick instruction field
+#define FU_BYTE      0x0001            // Fixup byte
+#define FU_WORD      0x0002            // Fixup word
+#define FU_WBYTE     0x0003            // Fixup byte (at loc+1)
+#define FU_LONG      0x0004            // Fixup long
+#define FU_BBRA      0x0005            // Fixup byte branch
+#define FU_6BRA      0x0007            // Fixup 6502-format branch offset
+#define FU_BYTEH     0x0008            // Fixup 6502 high byte of immediate word
+#define FU_BYTEL     0x0009            // Fixup 6502 low byte of immediate word
+
+#define FU_SEXT      0x0010            // Ok to sign extend
+#define FU_PCREL     0x0020            // Subtract PC first
+#define FU_EXPR      0x0040            // Expression (not symbol) follows
 
 #define FU_GLOBAL    0x0080            // Mark global symbol
 
@@ -110,6 +113,30 @@ SECT {
        CHUNK * sfix;                           // Last fixup chunk
 };
 
+// 680x0 defines
+#define CPU_68000 1
+#define CPU_68020 2
+#define CPU_68030 4
+#define CPU_68040 8
+#define CPU_68060 16
+#define FPU_NONE  0
+#define FPU_68881 1
+#define FPU_68882 2
+#define FPU_68040 4
+
+// Helper macros to test for active CPU
+#define CHECK00 if (activecpu == CPU_68000) return error(unsupport)
+#define CHECK20 if (activecpu == CPU_68020) return error(unsupport)
+#define CHECK30 if (activecpu == CPU_68030) return error(unsupport)
+#define CHECK40 if (activecpu == CPU_68040) return error(unsupport)
+#define CHECK60 if (activecpu == CPU_68060) return error(unsupport)
+#define CHECKNO00 if (activecpu != CPU_68000) return error(unsupport)
+#define CHECKNO20 if (activecpu != CPU_68020) return error(unsupport)
+#define CHECKNO30 if (activecpu != CPU_68030) return error(unsupport)
+#define CHECKNO40 if (activecpu != CPU_68040) return error(unsupport)
+#define CHECKNO60 if (activecpu != CPU_68060) return error(unsupport)
+
+
 // Globals, external etc
 extern uint32_t sloc;
 extern uint16_t scattr;