]> Shamusworld >> Repos - rmac/blobdiff - op.c
Version bump for last commit. :-)
[rmac] / op.c
diff --git a/op.c b/op.c
index 3833bfbee292e17117b3058cc7a9333e29103fc3..6a7d51d6c45322bb213ff75769b2e6e53a0bbde1 100644 (file)
--- a/op.c
+++ b/op.c
@@ -37,7 +37,6 @@ static TOKEN fixupExpr[4] = { CONST, 0, 0, ENDEXPR };
 //static PTR fixupPtr = { .tk = (fixupExpr + 1) };             // C99 \o/
 static PTR fixupPtr = { (uint8_t *)(fixupExpr + 1) };  // meh, it works
 
-
 //
 // The main Object Processor assembler. Basically just calls the sub functions
 // to generate the appropriate code.
@@ -47,6 +46,11 @@ int GenerateOPCode(int state)
        if (!robjproc)
                return error("opcode only valid in OP mode");
 
+       // It's OK to call this before validating state. If the state is invalid, an
+       // error will be generated and no object file will be produced, so it
+       // doesn't matter if the line number symbols are a little off.
+       GENLINENOSYM();
+
        switch (state)
        {
        case MO_BITMAP:
@@ -68,7 +72,6 @@ int GenerateOPCode(int state)
        return error("unknown OP opcode");
 }
 
-
 static inline void GetSymbolUCFromTokenStream(char * s)
 {
        strcpy(s, string[tok[1]]);
@@ -76,7 +79,6 @@ static inline void GetSymbolUCFromTokenStream(char * s)
        tok += 2;
 }
 
-
 static inline uint64_t CheckFlags(char * s)
 {
        GetSymbolUCFromTokenStream(s);
@@ -93,7 +95,6 @@ static inline uint64_t CheckFlags(char * s)
        return 0;
 }
 
-
 //
 // Define a bitmap object
 // Form: bitmap <data>, <xloc>, <yloc>, <dwidth>, <iwidth>, <iheight>, <bpp>,
@@ -191,7 +192,6 @@ static int HandleBitmap(void)
        return OK;
 }
 
-
 //
 // Define a scaled bitmap object
 // Form: scbitmap <data>, <xloc>, <yloc>, <dwidth>, <iwidth>, <iheight>,
@@ -319,10 +319,9 @@ static int HandleScaledBitmap(void)
        return OK;
 }
 
-
 //
 // Insert GPU object
-// Form: gpuobj <line #>, <userdata> (bits 14-63 of this object)
+// Form: gpuobj <userdata> (bits 3-63 of this object)
 //
 static int HandleGPUObject(void)
 {
@@ -330,16 +329,6 @@ static int HandleGPUObject(void)
        uint16_t eattr;
        SYM * esym = 0;
 
-       if (expr(exprbuf, &eval, &eattr, &esym) != OK)
-               return ERROR;
-
-       if (!(eattr & DEFINED))
-               return error("bad expression in y position");
-
-       uint64_t ypos = eval;
-
-       CHECK_COMMA;
-
        if (expr(exprbuf, &eval, &eattr, &esym) != OK)
                return ERROR;
 
@@ -348,7 +337,7 @@ static int HandleGPUObject(void)
 
        ErrorIfNotAtEOL();
 
-       uint64_t p1 = 0x02 | ((ypos * 2) << 3) | (eval << 14);
+       uint64_t p1 = 0x02 | (eval << 3);
 
        lastObjType = 2;
        D_quad(p1);
@@ -356,7 +345,6 @@ static int HandleGPUObject(void)
        return OK;
 }
 
-
 //
 // Insert a branch object
 // Form: branch VC <condition (<, =, >)> <line #>, <link addr>
@@ -421,7 +409,6 @@ static int HandleBranch(void)
        return OK;
 }
 
-
 //
 // Insert a stop object
 // Form: stop
@@ -434,7 +421,6 @@ static int HandleStop(void)
        return OK;
 }
 
-
 //
 // Insert a phrase sized "NOP" in the object list (psuedo-op)
 // Form: nop
@@ -452,7 +438,6 @@ static int HandleNOP(void)
        return OK;
 }
 
-
 //
 // Insert an unconditional jump in the object list (psuedo-op)
 // Form: jump <link addr>
@@ -479,4 +464,3 @@ static int HandleJump(void)
 
        return OK;
 }
-