* device/include/z180.h,
authorepetrich <epetrich@4a8a32a2-be11-0410-ad9d-d568d2c75423>
Tue, 13 Jan 2004 05:34:20 +0000 (05:34 +0000)
committerepetrich <epetrich@4a8a32a2-be11-0410-ad9d-d568d2c75423>
Tue, 13 Jan 2004 05:34:20 +0000 (05:34 +0000)
* 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

ChangeLog
device/include/z180.h
device/lib/_memcpy.c
device/lib/_memmove.c
device/lib/_mulint.c
device/lib/_strcmp.c
device/lib/_strtok.c
device/lib/ser_ir.c
device/lib/ser_ir_cts_rts.c
src/z80/gen.c
src/z80/main.c

index aeaa62591f2dc29e92d51059315bfeb7fa2aa76b..67cde9b2eaa96e4e0083cba7463dc52988085a61 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,9 +1,24 @@
+2004-01-13 Erik Petrich <epetrich@ivorytower.norman.ok.us>
+
+       * 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 <epetrich@ivorytower.norman.ok.us>
 
        * 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 <vrokas@otenet.gr>
 
index 334fb5a0b8424c77381ae9645833bfc55631bb90..ffe932cb48d5f951ee601b5f7852111d45c9e074 100644 (file)
@@ -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; }
 
index 38681c84e8598d673a676fa3aabcb30295478dab..c973f159d9a43c6cc8f0af70eee309bbcbef6872 100644 (file)
@@ -34,7 +34,7 @@ void * memcpy (
 {
 #if _SDCC_Z80_STYLE_LIB_OPT
 
-#pragma NOINDUCTION
+#pragma noinduction
 
        char * d = dst;
        char * s = src;
index 5144e3ba0d721214e3c258029a426d50099ecd00..8d643e31b58a0605b3e65eb10b90b70a2585d541 100644 (file)
@@ -40,7 +40,7 @@ void * memmove (
 {
 #if _SDCC_Z80_STYLE_LIB_OPT
 
-#pragma NOINDUCTION
+#pragma noinduction
 
        char * d;
        char * s;
index 7fef8059405f2da0fd8b1a216ce25081646d7924..387585c02b16b67075decfc889f76c969ac268f4 100644 (file)
@@ -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
 
index eeceb8bae5bf9132a904bab671774677fef4ab7a..56de905f954b52cbe837cde62824db26496e4c33 100644 (file)
@@ -32,7 +32,7 @@ int strcmp (
        )
 {
 #if _SDCC_Z80_STYLE_LIB_OPT
-#pragma NOINDUCTION
+#pragma noinduction
 
        char ret = 0 ;
         char * src = asrc;
index ab2603698e58f86d45c80d113831ad53d1dcd1d3..ac4f68c9508fe3833120710c45c47314443ba24f 100644 (file)
@@ -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 (
index b09c7f0e01c0dcc9d69e2fe16e4acf6e36475210..e438e631295a8c2fa1cdb8474d676cafc1a96db0 100644 (file)
@@ -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;
index 5b127c586d1b895493eb82ff1784cf92c22e631c..2bf1160f8cbb9ebcbe9e0e620a7d9dd3cf9aa52a 100755 (executable)
@@ -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)
 {
index 409fb6a7af356dd00687514a3cf0e7cbe4ad2534..cd669c7c359f3741344515ea5947182b254badd1 100644 (file)
@@ -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 */
index cbf52a6d58176c9e839fad27191b2fd278f2d38c..0f9faade3bbfef50eb38e54fb9b481074fa3c8ad 100644 (file)
@@ -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; }