#include "direct.h"
#include "sect.h"
-#include "risca.h"
+#include "riscasm.h"
#include "error.h"
#include "token.h"
#include "procln.h"
// Directive handler table
int (*dirtab[])() = {
- d_org, // 0 org
- d_even, // 1 even
- d_unimpl, // 2 .6502
- d_68000, // 3 .68000
- d_bss, // 4 bss
- d_data, // 5 data
- d_text, // 6 text
- d_abs, // 7 abs
- d_comm, // 8 comm
- d_init, // 9 init
- d_cargs, // 10 cargs
- d_goto, // 11 goto
- d_dc, // 12 dc
- d_ds, // 13 ds
- d_undmac, // 14 undefmac
- d_gpu, // 15 .gpu
- d_dsp, // 16 .dsp
- d_dcb, // 17 dcb
- d_unimpl, // 18* set
- d_unimpl, // 19* reg
- d_unimpl, // 20 dump
- d_incbin, // 21 .incbin //load
- d_unimpl, // 22 disable
- d_unimpl, // 23 enable
- d_globl, // 24 globl
- d_regbank0, // 25 .regbank0
- d_regbank1, // 26 .regbank1
- d_unimpl, // 27 xdef
- d_assert, // 28 assert
- d_unimpl, // 29* if
- d_unimpl, // 30* endif
- d_unimpl, // 31* endc
- d_unimpl, // 32* iif
- d_include, // 33 include
- fpop, // 34 end
- d_unimpl, // 35* macro
- ExitMacro, // 36* exitm
- d_unimpl, // 37* endm
- d_list, // 38 list
- d_nlist, // 39 nlist
- d_long, // 40* rept
- d_phrase, // 41* endr
- d_dphrase, // 42 struct
- d_qphrase, // 43 ends
- d_title, // 44 title
- d_subttl, // 45 subttl
- eject, // 46 eject
- d_unimpl, // 47 error
- d_unimpl, // 48 warn
- d_noclear, // 49 .noclear
- d_equrundef, // 50 .equrundef/.regundef
- d_ccundef, // 51 .ccundef
- d_print, // 52 .print
- d_cstruct, // 53 .cstruct
+ d_org, // 0 org
+ d_even, // 1 even
+ d_unimpl, // 2 .6502
+ d_68000, // 3 .68000
+ d_bss, // 4 bss
+ d_data, // 5 data
+ d_text, // 6 text
+ d_abs, // 7 abs
+ d_comm, // 8 comm
+ d_init, // 9 init
+ d_cargs, // 10 cargs
+ d_goto, // 11 goto
+ d_dc, // 12 dc
+ d_ds, // 13 ds
+ d_undmac, // 14 undefmac
+ d_gpu, // 15 .gpu
+ d_dsp, // 16 .dsp
+ d_dcb, // 17 dcb
+ d_unimpl, // 18* set
+ d_unimpl, // 19* reg
+ d_unimpl, // 20 dump
+ d_incbin, // 21 .incbin //load
+ d_unimpl, // 22 disable
+ d_unimpl, // 23 enable
+ d_globl, // 24 globl
+ d_regbank0, // 25 .regbank0
+ d_regbank1, // 26 .regbank1
+ d_unimpl, // 27 xdef
+ d_assert, // 28 assert
+ d_unimpl, // 29* if
+ d_unimpl, // 30* endif
+ d_unimpl, // 31* endc
+ d_unimpl, // 32* iif
+ d_include, // 33 include
+ fpop, // 34 end
+ d_unimpl, // 35* macro
+ ExitMacro, // 36* exitm
+ d_unimpl, // 37* endm
+ d_list, // 38 list
+ d_nlist, // 39 nlist
+ d_long, // 40* rept
+ d_phrase, // 41* endr
+ d_dphrase, // 42 struct
+ d_qphrase, // 43 ends
+ d_title, // 44 title
+ d_subttl, // 45 subttl
+ eject, // 46 eject
+ d_unimpl, // 47 error
+ d_unimpl, // 48 warn
+ d_noclear, // 49 .noclear
+ d_equrundef, // 50 .equrundef/.regundef
+ d_ccundef, // 51 .ccundef
+ d_print, // 52 .print
+ d_cstruct, // 53 .cstruct
};
while (*tok != EOL)
{
- // Skip preceeding or seperating commas
+ // Skip preceeding or seperating commas (if any)
if (*tok == ',')
tok++;
return ERROR;
}
-#if 0
- if ((j = open(string[tok[1]], _OPEN_INC)) >= 0)
- {
- size = lseek(j, 0L, SEEK_END);
- chcheck(size);
- pos = lseek(j, 0L, SEEK_SET);
-
- DEBUG
- {
- printf("INCBIN: File '%s' is %li bytes.\n", string[tok[1]], size);
- }
-
- for(i=0; i<size; i++)
- {
- buf = '\0';
- bytes = read(j, &buf, 1);
- D_byte(buf);
- }
- }
- else
- {
- errors("cannot open include binary file (%s)", string[tok[1]]);
- return ERROR;
- }
-#else
if ((fd = open(string[tok[1]], _OPEN_INC)) < 0)
{
errors("cannot open include binary file (%s)", string[tok[1]]);
pos = lseek(fd, 0L, SEEK_SET);
chcheck(size);
- DEBUG
- {
- printf("INCBIN: File '%s' is %li bytes.\n", string[tok[1]], size);
- }
+ DEBUG { printf("INCBIN: File '%s' is %li bytes.\n", string[tok[1]], size); }
-#if 0
- for(i=0; i<size; i++)
- {
- buf = '\0';
- bytes = read(j, &buf, 1);
- D_byte(buf);
- }
-#else
char * fileBuffer = (char *)malloc(size);
bytesRead = read(fd, fileBuffer, size);
orgaddr += size;
free(fileBuffer);
-#endif
-#endif
-
close(fd);
return 0;
}
#include "mark.h"
#include "error.h"
#include "mach.h"
-#include "risca.h"
+#include "riscasm.h"
#define eaNgen ea0gen
#define amN am0
#include "listing.h"
#include "mach.h"
#include "procln.h"
-#include "risca.h"
+#include "riscasm.h"
#include "sect.h"
#include "symbol.h"
#include "token.h"
int j;
tk = otk; // Set token pointer to 'exprbuf' (direct.c)
- // Also set in various other places too (risca.c, e.g.)
+ // Also set in various other places too (riscasm.c, e.g.)
// symbolNum = 0; // Set symbol number in symbolPtr[] to 0
// Optimize for single constant or single symbol.
}
else
{
-#if 0
- p = (char *)tok[1];
-#else
p = string[tok[1]];
-#endif
+
+#if 0
j = 0;
if (*p == '.')
j = curenv;
+#else
+ j = (*p == '.' ? curenv : 0);
+#endif
sy = lookup(p, LABEL, j);
sy->sattr |= REFERENCED;
+ // Check for undefined register equates
+ if (sy->sattre & UNDEF_EQUR)
+ {
+ errors("undefined register equate '%s'", sy->sname);
+//if we return right away, it returns some spurious errors...
+// return ERROR;
+ }
+
// Check register bank usage
if (sy->sattre & EQUATEDREG)
{
if ((regbank == BANK_0) && (sy->sattre & BANK_1) && !altbankok)
- warns("equated symbol \'%s\' cannot be used in register bank 0", sy->sname);
+ warns("equated symbol '%s' cannot be used in register bank 0", sy->sname);
if ((regbank == BANK_1) && (sy->sattre & BANK_0) && !altbankok)
- warns("equated symbol \'%s\' cannot be used in register bank 1", sy->sname);
+ warns("equated symbol '%s' cannot be used in register bank 1", sy->sname);
}
*tk++ = SYMBOL;
#include "direct.h"
#include "token.h"
#include "procln.h"
-#include "risca.h"
+#include "riscasm.h"
#define DEF_KW
#include "kwtab.h"
CFLAGS = -g -D__GCCUNIX__ -I. -O2
-SRCS = amode.c debug.c direct.c eagen.c error.c expr.c listing.c mach.c macro.c mark.c object.c procln.c risca.c rmac.c sect.c symbol.c token.c
+SRCS = amode.c debug.c direct.c eagen.c error.c expr.c listing.c mach.c macro.c mark.c object.c procln.c riscasm.c rmac.c sect.c symbol.c token.c
-OBJS = amode.o debug.o direct.o eagen.o error.o expr.o listing.o mach.o macro.o mark.o object.o procln.o risca.o rmac.o sect.o symbol.o token.o
+OBJS = amode.o debug.o direct.o eagen.o error.o expr.o listing.o mach.o macro.o mark.o object.o procln.o riscasm.o rmac.o sect.o symbol.o token.o
#
# Build everything
#include "mark.h"
#include "error.h"
#include "object.h"
-#include "risca.h"
+#include "riscasm.h"
MCHUNK * firstmch; // First mark chunk
#include "symbol.h"
#include "mark.h"
#include "error.h"
-#include "risca.h"
+#include "riscasm.h"
LONG symsize = 0; // Size of BSD symbol table
LONG strindx = 0x00000004; // BSD string table index
#include "direct.h"
#include "macro.h"
#include "symbol.h"
-#include "risca.h"
+#include "riscasm.h"
#define DEF_KW // Declare keyword values
#include "kwtab.h" // Incl generated keyword tables & defs
{
if ((equtyp == EQUREG) && (sy->sattre & UNDEF_EQUR))
{
- sy->sattre |= ~UNDEF_EQUR;
+//REALLY? sy->sattre |= ~UNDEF_EQUR;
+ sy->sattre &= ~UNDEF_EQUR;
sy->svalue = 0;
}
else if ((equtyp == CCDEF) && (sy->sattre & UNDEF_CC))
{
- sy->sattre |= ~UNDEF_CC;
+//REALLY? sy->sattre |= ~UNDEF_CC;
+ sy->sattre &= ~UNDEF_CC;
sy->svalue = 0;
}
else
// Source Utilised with the Kind Permission of Landon Dyer
//
-#include "risca.h"
+#include "riscasm.h"
#include "error.h"
#include "sect.h"
#include "token.h"
if ((challoc - ch_size) < 4)
chcheck(4L);
+ // See if this symbol has been defined, then undefined:
+//does nothing
+//segfaults now (esym == NULL?)
+/* if (esym->sattre & UNDEF_EQUR)
+ {
+ error("undefined register");
+ return ERROR;
+ }*/
+
if (!(eattr & DEFINED))
{
fixup((WORD)(FU_WORD | rattr), sloc, r_expr);
#include "sect.h"
#include "mark.h"
#include "macro.h"
-#include "risca.h"
+#include "riscasm.h"
#include "direct.h"
#include "version.h"
#include "debug.h"
#include "listing.h"
#include "mach.h"
#include "mark.h"
-#include "risca.h"
+#include "riscasm.h"
#include "symbol.h"
#include "token.h"
if (symbol->stype == type // Type, envno and name must match
&& symbol->senv == envno
&& *name == *symbol->sname // Fast check for first character
- && !strcmp(name, symbol->sname))
+ && !strcmp(name, symbol->sname)) // More expensive check
break;
symbol = symbol->snext;
}
- return symbol; // Return NULL or matching symbol
+ // Return NULL or matching symbol
+ return symbol;
}
#define __TOKEN_H__
#include "rmac.h"
-//#include "risca.h"
// Include Files and Macros
#define SRC_IFILE 0 // Input source is IFILE
#define MAJOR 1 // Major version number
#define MINOR 2 // Minor version number
-#define PATCH 2 // Patch release number
+#define PATCH 3 // Patch release number
#endif // __VERSION_H__