From: epetrich Date: Tue, 13 Jan 2004 05:34:20 +0000 (+0000) Subject: * device/include/z180.h, X-Git-Url: https://git.gag.com/?a=commitdiff_plain;h=f983558a0e07566cf65dca67cddd3f4bf81328e0;p=fw%2Fsdcc * device/include/z180.h, * device/lib/_memcpy.c, * device/lib/_memmove.c, * device/lib/_mulint.c, * device/lib/ser_ir.c, * device/lib/ser_ir_cts_rts.c, * device/lib/_strcmp.c, * device/lib/_strtok.c: fixed pragmas to non-deprecated form * src/z80/main.c (_process_pragma): add support for pragmas bank and portmode; added deprecation warning for bank= and protmode= forms. Also, guard against buffer overflow. * src/z80/gen.c (aopGet): generate better code for sfr banked read git-svn-id: https://sdcc.svn.sourceforge.net/svnroot/sdcc/trunk/sdcc@3130 4a8a32a2-be11-0410-ad9d-d568d2c75423 --- diff --git a/ChangeLog b/ChangeLog index aeaa6259..67cde9b2 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,9 +1,24 @@ +2004-01-13 Erik Petrich + + * device/include/z180.h, + * device/lib/_memcpy.c, + * device/lib/_memmove.c, + * device/lib/_mulint.c, + * device/lib/ser_ir.c, + * device/lib/ser_ir_cts_rts.c, + * device/lib/_strcmp.c, + * device/lib/_strtok.c: fixed pragmas to non-deprecated form + * src/z80/main.c (_process_pragma): add support for pragmas bank and + portmode; added deprecation warning for bank= and protmode= forms. + Also, guard against buffer overflow. + * src/z80/gen.c (aopGet): generate better code for sfr banked read + 2004-01-13 Erik Petrich * src/hc08/main.c (_hc08_genAssemblerPreamble): fixed bug #875487. Also changed interrupt vector table generation to only emit declared vectors. * device/include/Makefile.in: added missing backslash - * device/lib/pic16/Makefile.rules: pass $(MODELFLAGS) to compiler + * device/lib/pic16/Makefile.rules: add $(MODELFLAGS) to $(CFLAGS) 2004-01-13 Vangelis Rokas diff --git a/device/include/z180.h b/device/include/z180.h index 334fb5a0..ffe932cb 100644 --- a/device/include/z180.h +++ b/device/include/z180.h @@ -19,7 +19,7 @@ #endif /* will want this to be the case by default (I think) */ -#pragma portmode=z180 +#pragma portmode z180 static void _ENABLE_Z180_ASSEMBLER_(void) _naked { _asm .hd64 _endasm; } diff --git a/device/lib/_memcpy.c b/device/lib/_memcpy.c index 38681c84..c973f159 100644 --- a/device/lib/_memcpy.c +++ b/device/lib/_memcpy.c @@ -34,7 +34,7 @@ void * memcpy ( { #if _SDCC_Z80_STYLE_LIB_OPT -#pragma NOINDUCTION +#pragma noinduction char * d = dst; char * s = src; diff --git a/device/lib/_memmove.c b/device/lib/_memmove.c index 5144e3ba..8d643e31 100644 --- a/device/lib/_memmove.c +++ b/device/lib/_memmove.c @@ -40,7 +40,7 @@ void * memmove ( { #if _SDCC_Z80_STYLE_LIB_OPT -#pragma NOINDUCTION +#pragma noinduction char * d; char * s; diff --git a/device/lib/_mulint.c b/device/lib/_mulint.c index 7fef8059..387585c0 100644 --- a/device/lib/_mulint.c +++ b/device/lib/_mulint.c @@ -54,8 +54,8 @@ #if defined(_MULINT_ASM_LARGE) -#pragma SAVE -#pragma LESS_PEDANTIC +#pragma save +#pragma less_pedantic int _mulint (int a, int b) { @@ -107,12 +107,12 @@ _mulint (int a, int b) ret _endasm; } -#pragma RESTORE +#pragma restore #elif defined(_MULINT_ASM_SMALL) || defined(_MULINT_ASM_SMALL_AUTO) -#pragma SAVE -#pragma LESS_PEDANTIC +#pragma save +#pragma less_pedantic int _mulint_dummy (void) _naked { @@ -200,7 +200,7 @@ _mulint_dummy (void) _naked _endasm ; } -#pragma RESTORE +#pragma restore #else diff --git a/device/lib/_strcmp.c b/device/lib/_strcmp.c index eeceb8ba..56de905f 100644 --- a/device/lib/_strcmp.c +++ b/device/lib/_strcmp.c @@ -32,7 +32,7 @@ int strcmp ( ) { #if _SDCC_Z80_STYLE_LIB_OPT -#pragma NOINDUCTION +#pragma noinduction char ret = 0 ; char * src = asrc; diff --git a/device/lib/_strtok.c b/device/lib/_strtok.c index ab260369..ac4f68c9 100644 --- a/device/lib/_strtok.c +++ b/device/lib/_strtok.c @@ -24,8 +24,8 @@ #include "string.h" #if defined(SDCC_MODEL_LARGE) || defined (SDCC_MODEL_FLAT24) -#pragma NOINDUCTION -#pragma NOINVARIANT +#pragma noinduction +#pragma noinvariant #endif char * strtok ( diff --git a/device/lib/ser_ir.c b/device/lib/ser_ir.c index b09c7f0e..e438e631 100644 --- a/device/lib/ser_ir.c +++ b/device/lib/ser_ir.c @@ -105,8 +105,8 @@ unsigned char ser_getc (void) ES = 1; return (c); } -#pragma SAVE -#pragma NOINDUCTION +#pragma save +#pragma noinduction void ser_puts (unsigned char *s) { unsigned char c; @@ -115,7 +115,7 @@ void ser_puts (unsigned char *s) ser_putc (c); } } -#pragma RESTORE +#pragma restore void ser_gets (unsigned char *s, unsigned char len) { unsigned char pos, c; diff --git a/device/lib/ser_ir_cts_rts.c b/device/lib/ser_ir_cts_rts.c index 5b127c58..2bf1160f 100755 --- a/device/lib/ser_ir_cts_rts.c +++ b/device/lib/ser_ir_cts_rts.c @@ -163,8 +163,8 @@ unsigned char ser_getc(void) return (c); } -#pragma SAVE -#pragma NOINDUCTION +#pragma save +#pragma noinduction void ser_puts(unsigned char *s) { unsigned char c; @@ -173,7 +173,7 @@ void ser_puts(unsigned char *s) ser_putc (c); } } -#pragma RESTORE +#pragma restore void ser_gets(unsigned char *s, unsigned char len) { diff --git a/src/z80/gen.c b/src/z80/gen.c index 409fb6a7..cd669c7c 100644 --- a/src/z80/gen.c +++ b/src/z80/gen.c @@ -1684,15 +1684,9 @@ aopGet (asmop * aop, int offset, bool bit16) { /*.p.t.20030716 handling for i/o port read access for Z80 */ if( aop->paged ) { /* banked mode */ - if( aop->bcInUse ) emit2( "push bc" ); - - emit2( "ld bc,#%s", aop->aopu.aop_dir ); - emit2( "in a,(c)" ); - - if( aop->bcInUse ) - emit2( "pop bc" ); - else - spillPair (PAIR_BC); + /* reg A goes to address bits 15-8 during "in a,(x)" instruction */ + emit2( "ld a,!msbimmeds", aop->aopu.aop_dir); + emit2( "in a,(!lsbimmeds)", aop->aopu.aop_dir); } else if( z80_opts.port_mode == 180 ) { /* z180 in0/out0 mode */ diff --git a/src/z80/main.c b/src/z80/main.c index cbf52a6d..0f9faade 100644 --- a/src/z80/main.c +++ b/src/z80/main.c @@ -133,10 +133,15 @@ _reg_parm (sym_link * l) static int _process_pragma (const char *sz) { - if( startsWith( sz, "bank=" )) + if( startsWith( sz, "bank=" ) || startsWith( sz, "bank " )) { char buffer[128]; - strcpy (buffer, sz + 5); + + if (sz[4]=='=') + werror(W_DEPRECATED_PRAGMA, "bank="); + + strncpy (buffer, sz + 5, sizeof (buffer)); + buffer[sizeof (buffer) - 1 ] = '\0'; chomp (buffer); if (isdigit (buffer[0])) { @@ -151,7 +156,8 @@ _process_pragma (const char *sz) /* Arg was a bank number. Handle in an ASM independent way. */ char num[128]; - strcpy (num, sz + 5); + strncpy (num, sz + 5, sizeof (num)); + num[sizeof (num) -1] = '\0'; chomp (num); switch (_G.asmType) @@ -174,11 +180,15 @@ _process_pragma (const char *sz) code->sname = gbz80_port.mem.code_name; return 0; } - else if( startsWith( sz, "portmode=" )) + else if( startsWith( sz, "portmode=" ) || startsWith( sz, "portmode " )) { /*.p.t.20030716 - adding pragma to manipulate z80 i/o port addressing modes */ char bfr[128]; - strcpy( bfr, sz + 9 ); + if (sz[8]=='=') + werror(W_DEPRECATED_PRAGMA, "portmode="); + + strncpy( bfr, sz + 9, sizeof (bfr)); + bfr[sizeof (bfr) - 1] = '\0'; chomp( bfr ); if ( !strcmp( bfr, "z80" )){ z80_opts.port_mode = 80; }