summaryrefslogtreecommitdiff
path: root/as
diff options
context:
space:
mode:
authorRobert de Bath <rdebath@poboxes.com>1998-02-01 11:26:21 +0100
committerLubomir Rintel <lkundrak@v3.sk>2013-10-23 23:40:14 +0200
commit48f0b3eb836162d41622cedc1eb5f5168168fb8e (patch)
treec53156383d4682a0a296f6611575dbc1d64d1881 /as
parent48798bf2eb93ec3b99720ac2e16093441156653d (diff)
downloaddev86-48f0b3eb836162d41622cedc1eb5f5168168fb8e.tar.gz
Import Dev86src-0.13.5.tar.gzv0.13.5
Diffstat (limited to 'as')
-rw-r--r--as/as.c8
-rw-r--r--as/as86_encap.sh10
-rw-r--r--as/globvar.h2
-rw-r--r--as/pops.c5
-rw-r--r--as/readsrc.c1
5 files changed, 20 insertions, 6 deletions
diff --git a/as/as.c b/as/as.c
index 8f45f40..4bf76c7 100644
--- a/as/as.c
+++ b/as/as.c
@@ -68,6 +68,7 @@ char **argv;
last_pass=1;
process_args(argc, argv);
initscan();
+ ptext();
assemble(); /* doesn't return, maybe use setjmp */
@@ -256,6 +257,13 @@ char **argv;
--argc;
++argv;
break;
+ case 't':
+ if (!isnextarg || binfil != 0)
+ usage();
+ textseg = atoi(nextarg);
+ --argc;
+ ++argv;
+ break;
case 'u':
if( flag_state ) inidata = IMPBIT | SEGM;
else inidata = 0;
diff --git a/as/as86_encap.sh b/as/as86_encap.sh
index e5cf9e7..6bad886 100644
--- a/as/as86_encap.sh
+++ b/as/as86_encap.sh
@@ -57,10 +57,10 @@ $LIBDIR/as86 "$@" "$IFILE" -b _$$.bin -s _$$.sym || RV=$?
if( flg == 1 )
{
if( !started )
- printf "int %s = 0;\n", sname;
+ printf "#define %s 0\n", sname;
printf "\n";
- printf "char %sdata[] = {\n", prefix;
+ printf "static char %sdata[] = {\n", prefix;
bincount=0;
}
next;
@@ -70,12 +70,12 @@ $LIBDIR/as86 "$@" "$IFILE" -b _$$.bin -s _$$.sym || RV=$?
if( substr($2,1,4) == "0000" ) $2=substr($2,5);
if( $1 == "+" && $4 == "$start" )
{
- printf "int %s = 0x%s;\n", sname, $2;
+ printf "#define %s 0x%s\n", sname, $2;
started = 1;
}
else if( substr($3, 1, 1) == "E" && $4 != "start" && $4 != "size" && $4 != "data" )
{
- printf "int %s%s = 0x%s;\n", prefix, $4, $2;
+ printf "#define %s%s 0x%s\n", prefix, $4, $2;
}
next;
}
@@ -93,7 +93,7 @@ $LIBDIR/as86 "$@" "$IFILE" -b _$$.bin -s _$$.sym || RV=$?
}
END {
printf "};\n\n";
- printf "int %ssize = %d;\n", prefix, bincount;
+ printf "#define %ssize %d\n", prefix, bincount;
}
'
RV=$?
diff --git a/as/globvar.h b/as/globvar.h
index aed6aed..df4ed6e 100644
--- a/as/globvar.h
+++ b/as/globvar.h
@@ -83,6 +83,8 @@ EXTERN unsigned char pcrflag; /* OBJ_RMASK set if addressing is PC-relative */
EXTERN int last_pass; /* Pass number of last pass */
EXTERN int dirty_pass; /* Set if this pass had a label movement */
+EXTERN int textseg; /* Text segment id */
+
#ifdef I80386
EXTERN opcode_t aprefix; /* address size prefix or 0 */
diff --git a/as/pops.c b/as/pops.c
index e239892..c9aba90 100644
--- a/as/pops.c
+++ b/as/pops.c
@@ -983,7 +983,10 @@ PUBLIC void psetdp()
PUBLIC void ptext()
{
- setloc(TEXTLOC);
+ if( textseg <= 0 )
+ setloc(TEXTLOC);
+ else
+ setloc(BSSLOC+textseg);
}
/* .WARN pseudo-op */
diff --git a/as/readsrc.c b/as/readsrc.c
index 557ca5d..80c62f2 100644
--- a/as/readsrc.c
+++ b/as/readsrc.c
@@ -253,6 +253,7 @@ PUBLIC void pproceof()
maclevel = iflevel = blocklevel =
totwarn = toterr = linum = macnum = 0;
initp1p2(); /* reset other varaiables */
+ ptext();
if(pass==last_pass)
binaryc = binaryg;
#ifdef I80386