summaryrefslogtreecommitdiff
path: root/src/rops.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/rops.h')
-rw-r--r--src/rops.h233
1 files changed, 117 insertions, 116 deletions
diff --git a/src/rops.h b/src/rops.h
index 0acec45..4f008b3 100644
--- a/src/rops.h
+++ b/src/rops.h
@@ -4,7 +4,7 @@
#include "stdbool.h"
/*
- Raster Operations macros
+ Raster Operations macros
*/
// -------------
@@ -14,29 +14,29 @@
// a.green = a.green - b.green
/*
#define ROP_SUB(a, b) \
- " bics " #b ", " #b ", #0b00000100000100000 \n"\
- " orr " #a ", " #a ", #0b00000100000100000 \n"\
- " orr " #a ", " #a ", #0b10000000000000000 \n"\
- " sub " #a ", " #a ", " #b " \n"\
- " tst " #a ", #0b00000000000100000 \n"\
- " biceq " #a ", " #a ", #0b00000000000011111 \n"\
- " tst " #a ", #0b00000100000000000 \n"\
- " biceq " #a ", " #a ", #0b00000011111100000 \n"\
- " tst " #a ", #0b10000000000000000 \n"\
- " biceq " #a ", " #a ", #0b01111100000000000 \n"
+ " bics " #b ", " #b ", #0b00000100000100000 \n"\
+ " orr " #a ", " #a ", #0b00000100000100000 \n"\
+ " orr " #a ", " #a ", #0b10000000000000000 \n"\
+ " sub " #a ", " #a ", " #b " \n"\
+ " tst " #a ", #0b00000000000100000 \n"\
+ " biceq " #a ", " #a ", #0b00000000000011111 \n"\
+ " tst " #a ", #0b00000100000000000 \n"\
+ " biceq " #a ", " #a ", #0b00000011111100000 \n"\
+ " tst " #a ", #0b10000000000000000 \n"\
+ " biceq " #a ", " #a ", #0b01111100000000000 \n"
*/
#define ROP_SUB(a, b) \
- " bics " #b ", " #b ", #0b00000100000100000 \n"\
- " beq 999f \n"\
- " orr " #a ", " #a ", #0b00000100000100000 \n"\
- " orr " #a ", " #a ", #(1 << 31) \n"\
- " subs " #a ", " #a ", " #b " \n"\
- " bicpl " #a ", " #a ", #0b01111100000000000 \n"\
- " tst " #a ", #0b00000000000100000 \n"\
- " biceq " #a ", " #a ", #0b00000000000011111 \n"\
- " tst " #a ", #0b00000100000000000 \n"\
- " biceq " #a ", " #a ", #0b00000011111100000 \n"\
- "999:\n"
+ " bics " #b ", " #b ", #0b00000100000100000 \n"\
+ " beq 999f \n"\
+ " orr " #a ", " #a ", #0b00000100000100000 \n"\
+ " orr " #a ", " #a ", #(1 << 31) \n"\
+ " subs " #a ", " #a ", " #b " \n"\
+ " bicpl " #a ", " #a ", #0b01111100000000000 \n"\
+ " tst " #a ", #0b00000000000100000 \n"\
+ " biceq " #a ", " #a ", #0b00000000000011111 \n"\
+ " tst " #a ", #0b00000100000000000 \n"\
+ " biceq " #a ", " #a ", #0b00000011111100000 \n"\
+ "999:\n"
// -------------
@@ -47,40 +47,40 @@
// a.green = (a.green - b.green) / 2
/*
#define ROP_SUB1_2(a, b) \
- " movne " #a ", " #a ", lsr #1 \n"\
- " bicne " #a ", " #a ", #0b00000010000010000 \n"\
- " movne " #b ", " #b ", lsr #1 \n"\
- " bicne " #b ", " #b ", #0b00000010000010000 \n"\
- \
- " bic " #b ", " #b ", #0b00000100000100000 \n"\
- " orr " #a ", " #a ", #0b00000100000100000 \n"\
- " orr " #a ", " #a ", #0b10000000000000000 \n"\
- " sub " #a ", " #a ", " #b " \n"\
- " tst " #a ", #0b00000000000100000 \n"\
- " biceq " #a ", " #a ", #0b00000000000011111 \n"\
- " tst " #a ", #0b00000100000000000 \n"\
- " biceq " #a ", " #a ", #0b00000011111100000 \n"\
- " tst " #a ", #0b10000000000000000 \n"\
- " biceq " #a ", " #a ", #0b01111100000000000 \n"
+ " movne " #a ", " #a ", lsr #1 \n"\
+ " bicne " #a ", " #a ", #0b00000010000010000 \n"\
+ " movne " #b ", " #b ", lsr #1 \n"\
+ " bicne " #b ", " #b ", #0b00000010000010000 \n"\
+ \
+ " bic " #b ", " #b ", #0b00000100000100000 \n"\
+ " orr " #a ", " #a ", #0b00000100000100000 \n"\
+ " orr " #a ", " #a ", #0b10000000000000000 \n"\
+ " sub " #a ", " #a ", " #b " \n"\
+ " tst " #a ", #0b00000000000100000 \n"\
+ " biceq " #a ", " #a ", #0b00000000000011111 \n"\
+ " tst " #a ", #0b00000100000000000 \n"\
+ " biceq " #a ", " #a ", #0b00000011111100000 \n"\
+ " tst " #a ", #0b10000000000000000 \n"\
+ " biceq " #a ", " #a ", #0b01111100000000000 \n"
*/
#define ROP_SUB1_2(a, b) \
- " movne " #a ", " #a ", lsr #1 \n"\
- " bicne " #a ", " #a ", #0b00000010000010000 \n"\
- " movne " #b ", " #b ", lsr #1 \n"\
- " bicne " #b ", " #b ", #0b00000010000010000 \n"\
- \
- " bics " #b ", " #b ", #0b00000100000100000 \n"\
- " beq 999f \n"\
- " orr " #a ", " #a ", #0b00000100000100000 \n"\
- " orr " #a ", " #a ", #(1 << 31) \n"\
- " subs " #a ", " #a ", " #b " \n"\
- " bicpl " #a ", " #a ", #0b01111100000000000 \n"\
- " tst " #a ", #0b00000000000100000 \n"\
- " biceq " #a ", " #a ", #0b00000000000011111 \n"\
- " tst " #a ", #0b00000100000000000 \n"\
- " biceq " #a ", " #a ", #0b00000011111100000 \n"\
- "999:\n"
+ " movne " #a ", " #a ", lsr #1 \n"\
+ " bicne " #a ", " #a ", #0b00000010000010000 \n"\
+ " movne " #b ", " #b ", lsr #1 \n"\
+ " bicne " #b ", " #b ", #0b00000010000010000 \n"\
+ \
+ " bics " #b ", " #b ", #0b00000100000100000 \n"\
+ " beq 999f \n"\
+ " orr " #a ", " #a ", #0b00000100000100000 \n"\
+ " orr " #a ", " #a ", #(1 << 31) \n"\
+ " subs " #a ", " #a ", " #b " \n"\
+ " bicpl " #a ", " #a ", #0b01111100000000000 \n"\
+ " tst " #a ", #0b00000000000100000 \n"\
+ " biceq " #a ", " #a ", #0b00000000000011111 \n"\
+ " tst " #a ", #0b00000100000000000 \n"\
+ " biceq " #a ", " #a ", #0b00000011111100000 \n"\
+ "999:\n"
// -------------
@@ -89,17 +89,17 @@
// a.blue = a.blue + b.blue
// a.green = a.green + b.green
#define ROP_ADD(a, b) \
- " bics " #b ", " #b ", #0b00000100000100000 \n"\
- " beq 999f \n"\
- " bic " #a ", " #a ", #0b00000100000100000 \n"\
- " add " #a ", " #a ", " #b " \n"\
- " tst " #a ", #0b00000000000100000 \n"\
- " orrne " #a ", " #a ", #0b00000000000011111 \n"\
- " tst " #a ", #0b00000100000000000 \n"\
- " orrne " #a ", " #a ", #0b00000011111100000 \n"\
- " tst " #a ", #0b10000000000000000 \n"\
- " orrne " #a ", " #a ", #0b01111100000000000 \n"\
- "999:\n"
+ " bics " #b ", " #b ", #0b00000100000100000 \n"\
+ " beq 999f \n"\
+ " bic " #a ", " #a ", #0b00000100000100000 \n"\
+ " add " #a ", " #a ", " #b " \n"\
+ " tst " #a ", #0b00000000000100000 \n"\
+ " orrne " #a ", " #a ", #0b00000000000011111 \n"\
+ " tst " #a ", #0b00000100000000000 \n"\
+ " orrne " #a ", " #a ", #0b00000011111100000 \n"\
+ " tst " #a ", #0b10000000000000000 \n"\
+ " orrne " #a ", " #a ", #0b01111100000000000 \n"\
+ "999:\n"
// -------------
// RGB_565
@@ -108,64 +108,65 @@
// a.blue = (a.blue + b.blue) / 2
// a.green = (a.green + b.green) / 2
#define ROP_ADD1_2(a, b) \
- " bic " #a ", " #a ", #0b00000100000100000 \n"\
- " bicne " #a ", " #a ", #0b00001000001000000 \n"\
- " bic " #b ", " #b ", #0b00000100000100000 \n"\
- " bicne " #b ", " #b ", #0b00001000001000000 \n"\
- " add " #a ", " #a ", " #b " \n"\
- " movne " #a ", " #a ", lsr #1 \n"\
- " tst " #a ", #0b00000000000100000 \n"\
- " orrne " #a ", " #a ", #0b00000000000011111 \n"\
- " tst " #a ", #0b00000100000000000 \n"\
- " orrne " #a ", " #a ", #0b00000011111100000 \n"\
- " tst " #a ", #0b10000000000000000 \n"\
- " orrne " #a ", " #a ", #0b01111100000000000 \n"
-
-
-typedef struct {
- unsigned char line;
- unsigned char rop;
- unsigned int value;
+ " bic " #a ", " #a ", #0b00000100000100000 \n"\
+ " bicne " #a ", " #a ", #0b00001000001000000 \n"\
+ " bic " #b ", " #b ", #0b00000100000100000 \n"\
+ " bicne " #b ", " #b ", #0b00001000001000000 \n"\
+ " add " #a ", " #a ", " #b " \n"\
+ " movne " #a ", " #a ", lsr #1 \n"\
+ " tst " #a ", #0b00000000000100000 \n"\
+ " orrne " #a ", " #a ", #0b00000000000011111 \n"\
+ " tst " #a ", #0b00000100000000000 \n"\
+ " orrne " #a ", " #a ", #0b00000011111100000 \n"\
+ " tst " #a ", #0b10000000000000000 \n"\
+ " orrne " #a ", " #a ", #0b01111100000000000 \n"
+
+
+typedef struct
+{
+ unsigned char line;
+ unsigned char rop;
+ unsigned int value;
} ROPSTRUCT;
-#define MAX_ROPS 0x10000
+#define MAX_ROPS 0x10000
extern ROPSTRUCT rops[MAX_ROPS];
extern unsigned int ROpCount;
-#define ROP_NOP 0
-#define ROP_FIXEDCOLOUR 1
-#define ROP_PALETTE 2
-#define ROP_SCREEN_MODE 3
-#define ROP_BRIGHTNESS 4
-#define ROP_FORCE_BLANKING 5
-#define ROP_TILE_ADDRESS 6
-#define ROP_MOSAIC 7
-#define ROP_BG_SCSIZE_SCBASE 8
-#define ROP_BG_NAMEBASE 9
-#define ROP_MODE7_ROTATION 10
-#define ROP_BG_WINDOW_ENABLE 11
-#define ROP_WINDOW1_LEFT 12
-#define ROP_WINDOW1_RIGHT 13
-#define ROP_WINDOW2_LEFT 14
-#define ROP_WINDOW2_RIGHT 15
-#define ROP_BG_WINDOW_LOGIC 16
-#define ROP_OBJS_WINDOW_LOGIC 17
-#define ROP_MAIN_SCREEN_DESIG 18
-#define ROP_SUB_SCREEN_DESIG 19
-#define ROP_MAIN_SCREEN_WMASK 20
-#define ROP_SUB_SCREEN_WMASK 21
-#define ROP_FIXEDCOL_OR_SCREEN 22
-#define ROP_ADD_OR_SUB_COLOR 23
-
-#define ADD_ROP(drop, dval) {rops[ROpCount].line = IPPU.CurrentLine; rops[ROpCount].rop = drop; rops[ROpCount].value = dval; ROpCount++;}
-#define RESET_ROPS(from) \
- { \
+#define ROP_NOP 0
+#define ROP_FIXEDCOLOUR 1
+#define ROP_PALETTE 2
+#define ROP_SCREEN_MODE 3
+#define ROP_BRIGHTNESS 4
+#define ROP_FORCE_BLANKING 5
+#define ROP_TILE_ADDRESS 6
+#define ROP_MOSAIC 7
+#define ROP_BG_SCSIZE_SCBASE 8
+#define ROP_BG_NAMEBASE 9
+#define ROP_MODE7_ROTATION 10
+#define ROP_BG_WINDOW_ENABLE 11
+#define ROP_WINDOW1_LEFT 12
+#define ROP_WINDOW1_RIGHT 13
+#define ROP_WINDOW2_LEFT 14
+#define ROP_WINDOW2_RIGHT 15
+#define ROP_BG_WINDOW_LOGIC 16
+#define ROP_OBJS_WINDOW_LOGIC 17
+#define ROP_MAIN_SCREEN_DESIG 18
+#define ROP_SUB_SCREEN_DESIG 19
+#define ROP_MAIN_SCREEN_WMASK 20
+#define ROP_SUB_SCREEN_WMASK 21
+#define ROP_FIXEDCOL_OR_SCREEN 22
+#define ROP_ADD_OR_SUB_COLOR 23
+
+#define ADD_ROP(drop, dval) {rops[ROpCount].line = IPPU.CurrentLine; rops[ROpCount].rop = drop; rops[ROpCount].value = dval; ROpCount++;}
+#define RESET_ROPS(from) \
+ { \
unsigned int c;\
- for (c = from; c < ROpCount; c++) doRaster(&rops[c]);\
- ROpCount = 0;\
- }
+ for (c = from; c < ROpCount; c++) doRaster(&rops[c]);\
+ ROpCount = 0;\
+ }
-void doRaster(ROPSTRUCT *rop);
-bool wouldRasterAlterStatus(ROPSTRUCT *rop);
+void doRaster(ROPSTRUCT* rop);
+bool wouldRasterAlterStatus(ROPSTRUCT* rop);
#endif