home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The World of Computer Software
/
World_Of_Computer_Software-02-387-Vol-3of3.iso
/
c
/
cug292wk.zip
/
ASXXXX.BUG
< prev
next >
Wrap
Text File
|
1993-01-22
|
4KB
|
140 lines
/* V01.50 Bugs */
(1): 1-May-91
/* aslist.c ----------------------------------------*/
/*
* Send bytes of code to the listing.
* A subroutine of `list'.
*/
VOID
list1(wp, wpt, nb, f)
register char *wp;
register int nb, *wpt; /* needs , f */
{
/*--------------------------------------------------*/
(2): 15-May-91
The construct of (more() && comma()) used in m09mch.c is invalid
because comma() is of type VOID. Change comma() to type int and return(1).
/* m09mch.c ----------------------------------------*/
/*
* The next character must be a
* comma.
*/
int
comma()
{
if (getnb() != ',')
qerr();
return(1);
}
/*--------------------------------------------------*/
Change the external definition of comma in m6809.h from VOID to int.
All xxxmch.c and xxx.h files should incorporate these changes.
(3): 31-May-91
Compiling the assemblers with Turbo C (V2.01) in the unsigned character
mode causes the assemblers to produce errors when processing the
.ascii and .asciz directives. The C subroutine getmap() in aslex.c and
lklex.c should be changed from type char to int (this allows the match
case to return a -1 rather than a character value of 0xFF (unsigned
character) or the sign extended value of 0xFFFF (for a signed character).
/* aslex.c ----------------------------------------*/
char
getmap(d)
{
/*--------------------------------------------------*/
/* lklex.c ----------------------------------------*/
char
getmap(d)
{
/*--------------------------------------------------*/
The use of getmap() in asexpr.c and lkeval.c should be characterized by
&0377.
/* asexpr.c ----------------------------------------*/
if (c == '\'') {
esp->e_mode = S_USER;
esp->e_flag = 0;
esp->e_base.e_ap = NULL;
esp->e_addr = getmap(-1)&0377;
return;
}
/*--------------------------------------------------*/
/* lkeval.c ----------------------------------------*/
if (c == '\'') {
return(getmap(-1)&0377);
}
/*--------------------------------------------------*/
Change the external definitions in asm.h and aslink.h from char to int.
(4): 15-Jun-91
An assembler bug has been noted for the 'sub' instruction in the asz80
assembler. Only the immediate mode is assembled correctly.
The following change is required in the file z80mch.c :
/* incorrect z80mch.c-------------------------------*/
case S_AND:
case S_SUB:
t1 = 0;
t2 = addr(&e2);
if (more()) {
if ((t2 != S_R8) || (e2.e_addr != A))
++t1;
comma();
t2 = addr(&e2);
}
if (rf==S_SUB && t2!=S_IMMED) {
if (genop(0xCB, op, &e2, 0) || t1)
aerr();
} else {
if (genop(0, op, &e2, 1) || t1)
aerr();
}
break;
/*--------------------------------------------------*/
/* corrected z80mch.c-------------------------------*/
case S_AND:
case S_SUB:
t1 = 0;
t2 = addr(&e2);
if (more()) {
if ((t2 != S_R8) || (e2.e_addr != A))
++t1;
comma();
t2 = addr(&e2);
}
if (genop(0, op, &e2, 1) || t1)
aerr();
break;
/*--------------------------------------------------*/
Change the z80 sub instruction test in file tz80.asm to:
/* tz80.asm ----------------------------------------*/
;subtract operand from 'a'
sub a,(hl) ; 96
sub a,offset(ix) ; DD 96 55
sub a,offset(iy) ; FD 96 55
sub a,a ; 97
sub a,b ; 90
sub a,c ; 91
sub a,d ; 92
sub a,e ; 93
sub a,h ; 94
sub a,l ; 95
sub a,#n ; D6 20
/*--------------------------------------------------*/