Skip to content

Commit 3b51f44

Browse files
Alfred Arnold0cjs
Alfred Arnold
authored andcommitted
asl-current-142-bld164
1 parent df968d5 commit 3b51f44

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

42 files changed

+1913
-1113
lines changed

as.res

+4
Original file line numberDiff line numberDiff line change
@@ -183,6 +183,10 @@ Message ErrMsgTrapValidInstruction
183183
"TRAP-Nummer ist gültige Instruktion"
184184
"TRAP number represents valid instruction"
185185

186+
Message ErrMsgPaddingAdded
187+
"Padding hinzugefügt"
188+
"Padding added"
189+
186190
;*****
187191

188192
Message ErrMsgDoubleDef

asmallg.c

+6-6
Original file line numberDiff line numberDiff line change
@@ -994,19 +994,18 @@ static void CodeMACEXP(Word Index)
994994
}
995995
}
996996

997-
static Boolean DecodeSegment(char *pArg, Integer StartSeg, Integer *pResult)
997+
static Boolean DecodeSegment(const tStrComp *pArg, Integer StartSeg, Integer *pResult)
998998
{
999999
Integer SegZ;
10001000
Word Mask;
10011001

1002-
NLS_UpString(pArg);
10031002
for (SegZ = StartSeg, Mask = 1 << StartSeg; SegZ <= PCMax; SegZ++, Mask <<= 1)
1004-
if ((ValidSegs & Mask) && !strcmp(pArg, SegNames[SegZ]))
1003+
if ((ValidSegs & Mask) && !as_strcasecmp(pArg->Str, SegNames[SegZ]))
10051004
{
10061005
*pResult = SegZ;
10071006
return True;
10081007
}
1009-
WrXError(ErrNum_UnknownSegment, pArg);
1008+
WrStrErrorPos(ErrNum_UnknownSegment, pArg);
10101009
return False;
10111010
}
10121011

@@ -1016,7 +1015,7 @@ static void CodeSEGMENT(Word Index)
10161015
UNUSED(Index);
10171016

10181017
if (ChkArgCnt(1, 1)
1019-
&& DecodeSegment(ArgStr[1].Str, SegCode, &NewSegment))
1018+
&& DecodeSegment(&ArgStr[1], SegCode, &NewSegment))
10201019
SetNSeg(NewSegment);
10211020
}
10221021

@@ -1297,7 +1296,7 @@ static void CodeENUMCONF(Word Index)
12971296
{
12981297
Integer NewSegment;
12991298

1300-
if (DecodeSegment(ArgStr[2].Str, SegNone, &NewSegment))
1299+
if (DecodeSegment(&ArgStr[2], SegNone, &NewSegment))
13011300
EnumSegment = NewSegment;
13021301
}
13031302
}
@@ -1854,6 +1853,7 @@ static void DecodeONOFF(Word Index)
18541853
{
18551854
NLS_UpString(ArgStr[1].Str);
18561855
if (*AttrPart.Str != '\0') WrError(ErrNum_UseLessAttr);
1856+
else
18571857
{
18581858
Boolean IsON = !as_strcasecmp(ArgStr[1].Str, "ON");
18591859
if ((!IsON) && (as_strcasecmp(ArgStr[1].Str, "OFF"))) WrStrErrorPos(ErrNum_OnlyOnOff, &ArgStr[1]);

asmdef.c

+2-4
Original file line numberDiff line numberDiff line change
@@ -36,15 +36,13 @@ char *EnvName = "ASCMD"; /* Environment-Variable fuer Default-
3636
char *SegNames[PCMax + 2] =
3737
{
3838
"NOTHING", "CODE", "DATA", "IDATA", "XDATA", "YDATA",
39-
"BITDATA", "IO", "REG", "ROMDATA", "STRUCT"
39+
"BITDATA", "IO", "REG", "ROMDATA", "EEDATA", "STRUCT"
4040
};
4141
char SegShorts[PCMax + 2] =
4242
{
43-
'-','C','D','I','X','Y','B','P','R','O','S'
43+
'-','C','D','I','X','Y','B','P','R','O','E','S'
4444
};
4545

46-
/** ValidSymChars:SET OF Char=['A'..'Z','a'..'z',#128..#165,'0'..'9','_','.']; **/
47-
4846
StringPtr SourceFile; /* Hauptquelldatei */
4947

5048
StringPtr ClrEol; /* String fuer loeschen bis Zeilenende */

asmerr.c

+2
Original file line numberDiff line numberDiff line change
@@ -240,6 +240,8 @@ static const char *ErrorNum2String(tErrorNum Num, char *Buf, int BufSize)
240240
msgno = Num_ErrMsgSrcLEThanDest; break;
241241
case ErrNum_TrapValidInstruction:
242242
msgno = Num_ErrMsgTrapValidInstruction; break;
243+
case ErrNum_PaddingAdded:
244+
msgno = Num_ErrMsgPaddingAdded; break;
243245
case ErrNum_DoubleDef:
244246
msgno = Num_ErrMsgDoubleDef; break;
245247
case ErrNum_SymbolUndef:

asmlist.c

+9-4
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,8 @@ void MakeList(const char *pSrcLine)
5050

5151
if ((!ListToNull) && (ThisDoLst) && ((ListMask & 1) != 0) && (!IFListMask()))
5252
{
53+
LargeWord ListPC;
54+
5355
/* Zeilennummer / Programmzaehleradresse: */
5456

5557
if (IncDepth == 0)
@@ -64,9 +66,9 @@ void MakeList(const char *pSrcLine)
6466
as_snprintf(h2, sizeof(h2), Integ32Format, CurrLine);
6567
as_snprcatf(h, sizeof(h), "%5s/", h2);
6668
}
69+
ListPC = EProgCounter() - CodeLen;
6770
as_snprcatf(h, sizeof(h), "%8.*lllu %c ",
68-
ListRadixBase, (LargeInt)(EProgCounter() - CodeLen),
69-
Retracted? 'R' : ':');
71+
ListRadixBase, ListPC, Retracted? 'R' : ':');
7072

7173
/* Extrawurst in Listing ? */
7274

@@ -117,10 +119,12 @@ void MakeList(const char *pSrcLine)
117119

118120
do
119121
{
120-
/* If not the first code line, prepend blanks to fill up space below line# and address: */
122+
/* If not the first code line, prepend blanks to fill up space below line number: */
121123

122124
if (!First)
123-
as_snprintf(h, sizeof(h), "%*s", (ListMask & ListMask_LineNums) ? 20 : 14, "");
125+
as_snprintf(h, sizeof(h), "%*s%8.*lllu %c ",
126+
(ListMask & ListMask_LineNums) ? 9 : 3, "",
127+
ListRadixBase, ListPC, Retracted? 'R' : ':');
124128

125129
SumLen = 0;
126130
do
@@ -149,6 +153,7 @@ void MakeList(const char *pSrcLine)
149153

150154
/* advance pointers & keep track of # of characters printed */
151155

156+
ListPC++;
152157
Index += CurrListGran;
153158
SumLen += SystemListLen + 1;
154159

changelog

+9
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,12 @@
1+
2020-04-26 [1.42 Bld 164]
2+
3+
- Bugfix : correct encoding of 65816 MVP/MVN instructions
4+
- Addition : Add DN instruction to dispose nibbles (because I can...)
5+
- Addition : Support DB/DW/DD/DQ/DT instructions for Atmel AVR
6+
- Addition : Add EEDATA segment for Atmel AVR and PIC16C8x
7+
- Addition : Extend P2BIN & P2HEX to allow data conversion from
8+
other segments than CODE
9+
110
2020-04-12 [1.42 Bld 163]
211

312
- Change : make codepage/character set handling more flexible

code16c8x.c

+7
Original file line numberDiff line numberDiff line change
@@ -414,6 +414,13 @@ static void SwitchTo_16c8x(void)
414414
SegLimits[SegCode] += AddCodeSpace;
415415
Grans[SegData] = 1; ListGrans[SegData] = 1; SegInits[SegData] = 0;
416416
SegLimits[SegData] = 0x1ff;
417+
Grans[SegEEData] = 1; ListGrans[SegEEData] = 1; SegInits[SegEEData] = 0;
418+
if ((MomCPU == CPU16C877) || (MomCPU == CPU16C876))
419+
SegLimits[SegEEData] = 0xff;
420+
else if ((MomCPU == CPU16C874) || (MomCPU == CPU16C873))
421+
SegLimits[SegEEData] = 0x7f;
422+
else
423+
SegLimits[SegEEData] = 0x3f;
417424
ChkPC = ChkPC_16c8x;
418425

419426
MakeCode = MakeCode_16c8x;

code7700.c

+6-10
Original file line numberDiff line numberDiff line change
@@ -1090,22 +1090,18 @@ static void DecodeMVN_MVP(Word Code)
10901090
if (ChkArgCnt(2, 2))
10911091
{
10921092
Boolean OK;
1093-
LongInt AdrLong = EvalStrIntExpression(&ArgStr[1], Int32, &OK);
1093+
LongInt Src = EvalStrIntExpression(&ArgStr[1], UInt24, &OK);
10941094

10951095
if (OK)
10961096
{
1097-
LongInt Mask = EvalStrIntExpression(&ArgStr[2], Int32, &OK);
1097+
LongInt Dest = EvalStrIntExpression(&ArgStr[2], UInt24, &OK);
10981098

10991099
if (OK)
11001100
{
1101-
if (((Mask & 0xff000000) != 0) || ((AdrLong & 0xff000000) != 0)) WrError(ErrNum_OverRange);
1102-
else
1103-
{
1104-
BAsmCode[0] = Code;
1105-
BAsmCode[1] = AdrLong >> 16;
1106-
BAsmCode[2] = Mask >> 16;
1107-
CodeLen = 3;
1108-
}
1101+
BAsmCode[0] = Code;
1102+
BAsmCode[1] = Dest >> 16;
1103+
BAsmCode[2] = Src >> 16;
1104+
CodeLen = 3;
11091105
}
11101106
}
11111107
}

0 commit comments

Comments
 (0)