X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=as%2Fz80%2Fz80adr.c;h=f4b12afc53aebefc3e52192f119a73f070e2e572;hb=7ddac4cf56954cd0063d010df958b3e03f3fcdc7;hp=58594b01d5824f2ec8cf4f5495a501fed7df10c2;hpb=59e2bc2dfca815432afbe1d782ecd3a8f1095390;p=fw%2Fsdcc diff --git a/as/z80/z80adr.c b/as/z80/z80adr.c index 58594b01..f4b12afc 100644 --- a/as/z80/z80adr.c +++ b/as/z80/z80adr.c @@ -26,87 +26,87 @@ * * This addr(esp) routine performs the following addressing decoding: * - * address mode flag addr base - * #n S_IMMED 0 n NULL - * label s_type ---- s_addr s_area - * [REG] S_IND+icode 0 0 NULL - * [label] S_INDM ---- s_addr s_area - * offset[REG] S_IND+icode ---- offset ---- + * address mode flag addr base + * #n S_IMMED 0 n NULL + * label s_type ---- s_addr s_area + * [REG] S_IND+icode 0 0 NULL + * [label] S_INDM ---- s_addr s_area + * offset[REG] S_IND+icode ---- offset ---- */ int addr(esp) register struct expr *esp; { - register int c, mode = 0, indx; + register int c, mode = 0, indx; - if ((c = getnb()) == '#') { - expr(esp, 0); - esp->e_mode = S_IMMED; - } else - if (c == LFIND) { - if ((indx = admode(R8)) != 0) { - mode = S_INDB; - } else - if ((indx = admode(R16)) != 0) { - mode = S_INDR; - } else - if ((indx = admode(R8X)) != 0) { - mode = S_R8X; - aerr(); - } else - if ((indx = admode(R16X)) != 0) { - mode = S_R16X; - aerr(); - } else { - expr(esp, 0); - esp->e_mode = S_INDM; - } - if (indx) { - esp->e_mode = (mode + indx)&0xFF; - esp->e_base.e_ap = NULL; - } - if ((c = getnb()) != RTIND) - qerr(); - } else { - unget(c); - if ((indx = admode(R8)) != 0) { - mode = S_R8; - } else - if ((indx = admode(R16)) != 0) { - mode = S_R16; - } else - if ((indx = admode(R8X)) != 0) { - mode = S_R8X; - } else - if ((indx = admode(R16X)) != 0) { - mode = S_R16X; - } else { - expr(esp, 0); - esp->e_mode = S_USER; - } - if (indx) { - esp->e_addr = indx&0xFF; - esp->e_mode = mode; - esp->e_base.e_ap = NULL; - } - if ((c = getnb()) == LFIND) { + if ((c = getnb()) == '#') { + expr(esp, 0); + esp->e_mode = S_IMMED; + } else + if (c == LFIND) { + if ((indx = admode(R8)) != 0) { + mode = S_INDB; + } else + if ((indx = admode(R16)) != 0) { + mode = S_INDR; + } else + if ((indx = admode(R8X)) != 0) { + mode = S_R8X; + aerr(); + } else + if ((indx = admode(R16X)) != 0) { + mode = S_R16X; + aerr(); + } else { + expr(esp, 0); + esp->e_mode = S_INDM; + } + if (indx) { + esp->e_mode = (mode + indx)&0xFF; + esp->e_base.e_ap = NULL; + } + if ((c = getnb()) != RTIND) + qerr(); + } else { + unget(c); + if ((indx = admode(R8)) != 0) { + mode = S_R8; + } else + if ((indx = admode(R16)) != 0) { + mode = S_R16; + } else + if ((indx = admode(R8X)) != 0) { + mode = S_R8X; + } else + if ((indx = admode(R16X)) != 0) { + mode = S_R16X; + } else { + expr(esp, 0); + esp->e_mode = S_USER; + } + if (indx) { + esp->e_addr = indx&0xFF; + esp->e_mode = mode; + esp->e_base.e_ap = NULL; + } + if ((c = getnb()) == LFIND) { #ifndef GAMEBOY - if ((indx=admode(R16))!=0 - && ((indx&0xFF)==IX || (indx&0xFF)==IY)) { + if ((indx=admode(R16))!=0 + && ((indx&0xFF)==IX || (indx&0xFF)==IY)) { #else /* GAMEBOY */ - if ((indx=admode(R16))!=0) { + if ((indx=admode(R16))!=0) { #endif /* GAMEBOY */ - esp->e_mode = S_INDR + (indx&0xFF); - } else { - aerr(); - } - if ((c = getnb()) != RTIND) - qerr(); - } else { - unget(c); - } - } - return (esp->e_mode); + esp->e_mode = S_INDR + (indx&0xFF); + } else { + aerr(); + } + if ((c = getnb()) != RTIND) + qerr(); + } else { + unget(c); + } + } + return (esp->e_mode); } /* @@ -118,22 +118,22 @@ int admode(sp) register struct adsym *sp; { - register char *ptr; - register int i; - register char *ips; + register char *ptr; + register int i; + register const char *ips; - ips = ip; - unget(getnb()); + ips = ip; + unget(getnb()); - i = 0; - while ( *(ptr = (char *) &sp[i]) ) { - if (srch(ptr)) { - return(sp[i].a_val); - } - i++; - } - ip = ips; - return(0); + i = 0; + while ( *(ptr = (char *) &sp[i]) ) { + if (srch(ptr)) { + return(sp[i].a_val); + } + i++; + } + ip = ips; + return(0); } /* @@ -143,39 +143,39 @@ int srch(str) register char *str; { - register char *ptr; - ptr = ip; + register const char *ptr; + ptr = ip; -#if CASE_SENSITIVE - while (*ptr && *str) { - if (*ptr != *str) - break; - ptr++; - str++; - } - if (*ptr == *str) { - ip = ptr; - return(1); - } +#if CASE_SENSITIVE + while (*ptr && *str) { + if (*ptr != *str) + break; + ptr++; + str++; + } + if (*ptr == *str) { + ip = ptr; + return(1); + } #else - while (*ptr && *str) { - if (ccase[(unsigned char)(*ptr)] != ccase[(unsigned char)(*str)]) - break; - ptr++; - str++; - } - if (ccase[(unsigned char)(*ptr)] == ccase[(unsigned char)(*str)]) { - ip = ptr; - return(1); - } + while (*ptr && *str) { + if (ccase[(unsigned char)(*ptr)] != ccase[(unsigned char)(*str)]) + break; + ptr++; + str++; + } + if (ccase[(unsigned char)(*ptr)] == ccase[(unsigned char)(*str)]) { + ip = ptr; + return(1); + } #endif - if (!*str) - if (any(*ptr," \t\n,);")) { - ip = ptr; - return(1); - } - return(0); + if (!*str) + if (any(*ptr," \t\n,);")) { + ip = ptr; + return(1); + } + return(0); } /* @@ -185,101 +185,101 @@ int any(c,str) char c, *str; { - while (*str) - if(*str++ == c) - return(1); - return(0); + while (*str) + if(*str++ == c) + return(1); + return(0); } /* * Registers */ -struct adsym R8[] = { - { "b", B|0400 }, - { "c", C|0400 }, - { "d", D|0400 }, - { "e", E|0400 }, - { "h", H|0400 }, - { "l", L|0400 }, - { "a", A|0400 }, - { "B", B|0400 }, - { "C", C|0400 }, - { "D", D|0400 }, - { "E", E|0400 }, - { "H", H|0400 }, - { "L", L|0400 }, - { "A", A|0400 }, - { "", 000 } +struct adsym R8[] = { + { "b", B|0400 }, + { "c", C|0400 }, + { "d", D|0400 }, + { "e", E|0400 }, + { "h", H|0400 }, + { "l", L|0400 }, + { "a", A|0400 }, + { "B", B|0400 }, + { "C", C|0400 }, + { "D", D|0400 }, + { "E", E|0400 }, + { "H", H|0400 }, + { "L", L|0400 }, + { "A", A|0400 }, + { "", 000 } }; -struct adsym R8X[] = { - { "i", I|0400 }, - { "r", R|0400 }, - { "I", I|0400 }, - { "R", R|0400 }, - { "", 000 } +struct adsym R8X[] = { + { "i", I|0400 }, + { "r", R|0400 }, + { "I", I|0400 }, + { "R", R|0400 }, + { "", 000 } }; -struct adsym R16[] = { - { "bc", BC|0400 }, - { "de", DE|0400 }, - { "hl", HL|0400 }, - { "sp", SP|0400 }, - { "BC", BC|0400 }, - { "DE", DE|0400 }, - { "HL", HL|0400 }, - { "SP", SP|0400 }, +struct adsym R16[] = { + { "bc", BC|0400 }, + { "de", DE|0400 }, + { "hl", HL|0400 }, + { "sp", SP|0400 }, + { "BC", BC|0400 }, + { "DE", DE|0400 }, + { "HL", HL|0400 }, + { "SP", SP|0400 }, #ifndef GAMEBOY - { "ix", IX|0400 }, - { "iy", IY|0400 }, - { "IX", IX|0400 }, - { "IY", IY|0400 }, + { "ix", IX|0400 }, + { "iy", IY|0400 }, + { "IX", IX|0400 }, + { "IY", IY|0400 }, #else /* GAMEBOY */ - { "hl-", HLD|0400 }, - { "hl+", HLI|0400 }, - { "hld", HLD|0400 }, - { "hli", HLI|0400 }, - { "HL-", HLD|0400 }, - { "HL+", HLI|0400 }, - { "HLD", HLD|0400 }, - { "HLI", HLI|0400 }, + { "hl-", HLD|0400 }, + { "hl+", HLI|0400 }, + { "hld", HLD|0400 }, + { "hli", HLI|0400 }, + { "HL-", HLD|0400 }, + { "HL+", HLI|0400 }, + { "HLD", HLD|0400 }, + { "HLI", HLI|0400 }, #endif /* GAMEBOY */ - { "", 000 } + { "", 000 } }; -struct adsym R16X[] = { - { "af", AF|0400 }, +struct adsym R16X[] = { + { "af", AF|0400 }, { "AF", AF|0400 }, #ifndef GAMEBOY - { "af'", AF|0400 }, - { "AF'", AF|0400 }, + { "af'", AF|0400 }, + { "AF'", AF|0400 }, #endif /* GAMEBOY */ - { "", 000 } + { "", 000 } }; /* * Conditional definitions */ -struct adsym CND[] = { - { "NZ", NZ|0400 }, - { "Z", Z |0400 }, - { "NC", NC|0400 }, - { "C", CS|0400 }, - { "nz", NZ|0400 }, - { "z", Z |0400 }, - { "nc", NC|0400 }, - { "c", CS|0400 }, +struct adsym CND[] = { + { "NZ", NZ|0400 }, + { "Z", Z |0400 }, + { "NC", NC|0400 }, + { "C", CS|0400 }, + { "nz", NZ|0400 }, + { "z", Z |0400 }, + { "nc", NC|0400 }, + { "c", CS|0400 }, #ifndef GAMEBOY - { "PO", PO|0400 }, - { "PE", PE|0400 }, - { "P", P |0400 }, - { "M", M |0400 }, - { "po", PO|0400 }, - { "pe", PE|0400 }, - { "p", P |0400 }, - { "m", M |0400 }, + { "PO", PO|0400 }, + { "PE", PE|0400 }, + { "P", P |0400 }, + { "M", M |0400 }, + { "po", PO|0400 }, + { "pe", PE|0400 }, + { "p", P |0400 }, + { "m", M |0400 }, #endif /* GAMEBOY */ - { "", 000 } + { "", 000 } };