shithub: rgbds

Download patch

ref: a679e0224603ca629bff991a470b8ad60ecfd053
parent: 592e9b372509c306b1c4346665799f68bf00cec4
author: ISSOtm <[email protected]>
date: Fri Jan 22 08:34:16 EST 2021

Get rid of `asm.h` and `localasm.h`

No need to make them global

--- a/include/asm/asm.h
+++ /dev/null
@@ -1,29 +1,0 @@
-/*
- * This file is part of RGBDS.
- *
- * Copyright (c) 1997-2018, Carsten Sorensen and RGBDS contributors.
- *
- * SPDX-License-Identifier: MIT
- */
-
-/*
- * Contains some assembler-wide defines and externs
- */
-
-#ifndef RGBDS_ASM_ASM_H
-#define RGBDS_ASM_ASM_H
-
-#include <stdbool.h>
-#include <stdint.h>
-#include <stdio.h>
-#include <stdlib.h>
-
-#include "asm/localasm.h"
-#include "asm/symbol.h"
-
-#define MAXMACROARGS	99999
-#define MAXINCPATHS	128
-
-extern struct Section *pCurrentSection;
-
-#endif /* RGBDS_ASM_ASM_H */
--- a/include/asm/fstack.h
+++ b/include/asm/fstack.h
@@ -13,10 +13,10 @@
 #ifndef RGBDS_ASM_FSTACK_H
 #define RGBDS_ASM_FSTACK_H
 
+#include <stdbool.h>
 #include <stdint.h>
 #include <stdio.h>
 
-#include "asm/asm.h"
 #include "asm/lexer.h"
 
 #include "types.h"
--- a/include/asm/lexer.h
+++ b/include/asm/lexer.h
@@ -9,6 +9,8 @@
 #ifndef RGBDS_ASM_LEXER_H
 #define RGBDS_ASM_LEXER_H
 
+#include <stdbool.h>
+
 #define MAXSTRLEN	255
 
 struct LexerState;
--- a/include/asm/localasm.h
+++ /dev/null
@@ -1,131 +1,0 @@
-/*
- * This file is part of RGBDS.
- *
- * Copyright (c) 1997-2018, Carsten Sorensen and RGBDS contributors.
- *
- * SPDX-License-Identifier: MIT
- */
-
-#ifndef RGBDS_ASM_LOCALASM_H
-#define RGBDS_ASM_LOCALASM_H
-
-/*
- * GB Z80 instruction groups
- *
- * n3 = 3-bit
- * n  = 8-bit
- * nn = 16-bit
- *
- * ADC  A,n         :   0xCE
- * ADC  A,r         :   0x88|r
- * ADD  A,n         :   0xC6
- * ADD  A,r         :   0x80|r
- * ADD  HL,ss       :   0x09|(ss<<4)
- * ADD  SP,n        :   0xE8
- * AND  A,n         :   0xE6
- * AND  A,r         :   0xA0|r
- * BIT  n3,r        :   0xCB 0x40|(n3<<3)|r
- * CALL cc,nn       :   0xC4|(cc<<3)
- * CALL nn          :   0xCD
- * CCF              :   0x3F
- * CP   A,n         :   0xFE
- * CP   A,r         :   0xB8|r
- * CPL              :   0x2F
- * DAA              :   0x27
- * DEC  r           :   0x05|(r<<3)
- * DEC  ss          :   0x0B|(ss<<4)
- * DI               :   0xF3
- * EI               :   0xFB
- * HALT             :   0x76
- * INC  r           :   0x04|(r<<3)
- * INC  ss          :   0x03|(ss<<4)
- * JP   HL          :   0xE9
- * JP   cc,nn       :   0xC2|(cc<<3)
- * JP   nn          :   0xC3|(cc<<3)
- * JR   n           :   0x18
- * JR   cc,n        :   0x20|(cc<<3)
- * LD   (nn),SP     :   0x08
- * LD   ($FF00+C),A :   0xE2
- * LD   ($FF00+n),A :   0xE0
- * LD   (nn),A      :   0xEA
- * LD   (rr),A      :   0x02|(rr<<4) // HL+ and HL- included
- * LD   A,($FF00+C) :   0xF2
- * LD   A,($FF00+n) :   0xF0
- * LD   A,(nn)      :   0xFA
- * LD   A,(rr)      :   0x0A|(rr<<4) // HL+ and HL- included
- * LD   HL,SP+n     :   0xF8
- * LD   SP,HL       :   0xF9
- * LD   r,n         :   0x06|(r<<3)
- * LD   r,r'        :   0x40|(r<<3)|r' // NOTE: LD (HL),(HL) not allowed
- * LD   ss,nn       :   0x01|(ss<<4)
- * NOP              :   0x00
- * OR   A,n         :   0xF6
- * OR   A,r         :   0xB0|r
- * POP  tt          :   0xC1|(tt<<4)
- * PUSH tt          :   0xC5|(tt<<4)
- * RES  n3,r        :   0xCB 0x80|(n3<<3)|r
- * RET              :   0xC9
- * RET  cc          :   0xC0|(cc<<3)
- * RETI             :   0xD9
- * RL   r           :   0xCB 0x10|r
- * RLA              :   0x17
- * RLC  r           :   0xCB 0x00|r
- * RLCA             :   0x07
- * RR   r           :   0xCB 0x18|r
- * RRA              :   0x1F
- * RRC  r           :   0xCB 0x08|r
- * RRCA             :   0x0F
- * RST  n           :   0xC7|n
- * SBC  A,n         :   0xDE
- * SBC  A,r         :   0x98|r
- * SCF              :   0x37
- * SET  n3,r        :   0xCB 0xC0|(n8<<3)|r
- * SLA  r           :   0xCB 0x20|r
- * SRA  r           :   0xCB 0x28|r
- * SRL  r           :   0xCB 0x38|r
- * STOP             :   0x10 0x00
- * SUB  A,n         :   0xD6
- * SUB  A,r         :   0x90|r
- * SWAP r           :   0xCB 0x30|r
- * XOR  A,n         :   0xEE
- * XOR  A,r         :   0xA8|r
- */
-
-/* "r" defs */
-enum {
-	REG_B = 0,
-	REG_C,
-	REG_D,
-	REG_E,
-	REG_H,
-	REG_L,
-	REG_HL_IND,
-	REG_A
-};
-
-/* "rr" defs */
-enum {
-	REG_BC_IND = 0,
-	REG_DE_IND,
-	REG_HL_INDINC,
-	REG_HL_INDDEC,
-};
-
-/* "ss" defs (SP) and "tt" defs (AF) */
-enum {
-	REG_BC = 0,
-	REG_DE = 1,
-	REG_HL = 2,
-	REG_SP = 3,
-	REG_AF = 3
-};
-
-/* "cc" defs */
-enum {
-	CC_NZ = 0,
-	CC_Z,
-	CC_NC,
-	CC_C
-};
-
-#endif /* RGBDS_ASM_LOCALASM_H */
--- a/include/asm/output.h
+++ b/include/asm/output.h
@@ -14,6 +14,7 @@
 #include "linkdefs.h"
 
 struct Expression;
+struct FileStackNode;
 
 extern char *tzObjectname;
 extern struct Section *pSectionList, *pCurrentSection;
--- a/src/asm/charmap.c
+++ b/src/asm/charmap.c
@@ -13,7 +13,6 @@
 #include <stdio.h>
 #include <string.h>
 
-#include "asm/asm.h"
 #include "asm/charmap.h"
 #include "asm/main.h"
 #include "asm/output.h"
--- a/src/asm/fstack.c
+++ b/src/asm/fstack.c
@@ -21,6 +21,8 @@
 #include "asm/warning.h"
 #include "platform.h" /* S_ISDIR (stat macro) */
 
+#define MAXINCPATHS 128
+
 #ifdef LEXER_DEBUG
   #define dbgPrint(...) fprintf(stderr, "[lexer] " __VA_ARGS__)
 #else
--- a/src/asm/lexer.c
+++ b/src/asm/lexer.c
@@ -27,7 +27,6 @@
 #include "extern/utf8decoder.h"
 #include "platform.h" /* For `ssize_t` */
 
-#include "asm/asm.h"
 #include "asm/lexer.h"
 #include "asm/format.h"
 #include "asm/fstack.h"
--- a/src/asm/macro.c
+++ b/src/asm/macro.c
@@ -6,9 +6,10 @@
 #include <stdlib.h>
 #include <string.h>
 
-#include "asm/asm.h"
 #include "asm/macro.h"
 #include "asm/warning.h"
+
+#define MAXMACROARGS 99999
 
 /*
  * Your average macro invocation does not go past the tens, but some go further
--- a/src/asm/output.c
+++ b/src/asm/output.c
@@ -18,7 +18,6 @@
 #include <stdlib.h>
 #include <string.h>
 
-#include "asm/asm.h"
 #include "asm/charmap.h"
 #include "asm/fstack.h"
 #include "asm/main.h"
--- a/src/asm/parser.y
+++ b/src/asm/parser.y
@@ -16,7 +16,6 @@
 #include <stdlib.h>
 #include <string.h>
 
-#include "asm/asm.h"
 #include "asm/charmap.h"
 #include "asm/format.h"
 #include "asm/fstack.h"
@@ -353,6 +352,41 @@
 	error(buf);
 	free(buf);
 }
+
+// The CPU encodes instructions in a logical way, so most instructions actually follow patterns.
+// These enums thus help with bit twiddling to compute opcodes
+enum {
+	REG_B = 0,
+	REG_C,
+	REG_D,
+	REG_E,
+	REG_H,
+	REG_L,
+	REG_HL_IND,
+	REG_A
+};
+
+enum {
+	REG_BC_IND = 0,
+	REG_DE_IND,
+	REG_HL_INDINC,
+	REG_HL_INDDEC,
+};
+
+enum {
+	REG_BC = 0,
+	REG_DE = 1,
+	REG_HL = 2,
+	REG_SP = 3,
+	REG_AF = 3
+};
+
+enum {
+	CC_NZ = 0,
+	CC_Z,
+	CC_NC,
+	CC_C
+};
 
 %}
 
--- a/src/asm/rpn.c
+++ b/src/asm/rpn.c
@@ -15,10 +15,11 @@
 #include <inttypes.h>
 #include <stdint.h>
 #include <stdio.h>
+#include <stdlib.h>
 #include <string.h>
 
-#include "asm/asm.h"
 #include "asm/main.h"
+#include "asm/output.h"
 #include "asm/rpn.h"
 #include "asm/section.h"
 #include "asm/symbol.h"
--- a/src/asm/section.c
+++ b/src/asm/section.c
@@ -11,6 +11,7 @@
 #include "asm/output.h"
 #include "asm/rpn.h"
 #include "asm/section.h"
+#include "asm/symbol.h"
 #include "asm/warning.h"
 
 #include "extern/err.h"
--- a/src/asm/symbol.c
+++ b/src/asm/symbol.c
@@ -18,7 +18,6 @@
 #include <string.h>
 #include <time.h>
 
-#include "asm/asm.h"
 #include "asm/fstack.h"
 #include "asm/macro.h"
 #include "asm/main.h"
--- a/src/asm/warning.c
+++ b/src/asm/warning.c
@@ -10,6 +10,7 @@
 #include <stdarg.h>
 #include <stdint.h>
 #include <stdio.h>
+#include <stdlib.h>
 #include <string.h>
 
 #include "asm/fstack.h"