diff options
author | Robert de Bath <rdebath@poboxes.com> | 1998-02-01 11:26:21 +0100 |
---|---|---|
committer | Lubomir Rintel <lkundrak@v3.sk> | 2013-10-23 23:40:14 +0200 |
commit | 48f0b3eb836162d41622cedc1eb5f5168168fb8e (patch) | |
tree | c53156383d4682a0a296f6611575dbc1d64d1881 /as | |
parent | 48798bf2eb93ec3b99720ac2e16093441156653d (diff) | |
download | dev86-48f0b3eb836162d41622cedc1eb5f5168168fb8e.tar.gz |
Import Dev86src-0.13.5.tar.gzv0.13.5
Diffstat (limited to 'as')
-rw-r--r-- | as/as.c | 8 | ||||
-rw-r--r-- | as/as86_encap.sh | 10 | ||||
-rw-r--r-- | as/globvar.h | 2 | ||||
-rw-r--r-- | as/pops.c | 5 | ||||
-rw-r--r-- | as/readsrc.c | 1 |
5 files changed, 20 insertions, 6 deletions
@@ -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 */ @@ -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 |