$NetBSD: patch-aa,v 1.2 2012/07/03 18:13:26 joerg Exp $ --- emitter.c.orig 2012-07-03 10:49:15.000000000 +0000 +++ emitter.c @@ -19,6 +19,8 @@ */ #include +#include +#include /* ---------------------------------------------------------------------- * DECLARE your own open(), close(), addr(), and byte() routines here. @@ -30,6 +32,8 @@ static int open2(), close2(), addr2(), b static int open3(), close3(), addr3(), byte3(); static int open4(), close4(), addr4(), byte4(); +void dumpline(unsigned long, unsigned char *, int); + /* ---------------------------------------------------------------------- * ADD an entry to this table to register your * output format routines. Give your object format @@ -67,8 +71,8 @@ emitusage() fprintf(stderr, ".\n"); } -emitopen(file,ftype,arg) -char *file,*ftype,*arg; +void +emitopen(char *file, char *ftype, char *arg) { int i; if( ftype ) { @@ -94,14 +98,12 @@ emitclose() (*formtab[format].e_close)(); } -emitaddr(a) -unsigned long int a; +void emitaddr(unsigned long a) { (*formtab[format].e_addr)(a); } -emitbyte(b) -int b; +void emitbyte(int b) { (*formtab[format].e_byte)(b); } @@ -180,9 +182,9 @@ unsigned char b; if( pos != -666 ) fprintf(fout,"\n"); newaddr = 0; pos = 15; - fprintf(fout,"%06x: ",addr+offset); + fprintf(fout,"%06lx: ",addr+offset); } else if( pos == 15 ) { - fprintf(fout,"%06x: ",addr+offset); + fprintf(fout,"%06lx: ",addr+offset); } fprintf(fout,"%02x ", b&0xff ); @@ -225,7 +227,7 @@ unsigned long int a; static byte2(b) unsigned char b; { - fprintf(fout,"%04x: %02x\n", addr, b&0xff ); + fprintf(fout,"%04lx: %02x\n", addr, b&0xff ); addr += 1; } @@ -283,6 +285,7 @@ unsigned char b; addr += 1; } +void dumpline(a,b,len) unsigned long a; unsigned char *b; @@ -292,7 +295,7 @@ int len; if(len <= 0 ) return; - fprintf(fout,"%04x: ",a); + fprintf(fout,"%04lx: ",a); for(i=0; i<8; i++ ) { if( i <= len ) @@ -394,32 +397,47 @@ static byte4(b) } } +srec_wrbyte(byte) +{ + check4 += byte; + fprintf(fout, "%02X", byte & 0xff); +} + finishline() { int i; - check4 = index4 + (address4 & 0xff) + ((address4>>8) & 0xff) + 4; + check4 = 0; switch(format4) { case '2': - fprintf(fout, "S1%02X%04X", index4 + 4, address4 & 0xffff); + fprintf(fout, "S1"); + srec_wrbyte(index4 + 2 + 1); + srec_wrbyte(address4 >> 8); + srec_wrbyte(address4); break; case '3': - fprintf(fout, "S2%02X%06X", index4 + 6, address4 & 0xffffff); - check4 += ((address4>>16) & 0xff) + 2; + fprintf(fout, "S2"); + srec_wrbyte(index4 + 3 + 1); + srec_wrbyte(address4 >> 16); + srec_wrbyte(address4 >> 8); + srec_wrbyte(address4); break; case '4': - fprintf(fout, "S3%02X%08X", index4 + 8, address4); - check4 += ((address4>>16) & 0xff) +((address4>>24) & 0xff) + 4; + fprintf(fout, "S3"); + srec_wrbyte(index4 + 4 + 1); + srec_wrbyte(address4 >> 24); + srec_wrbyte(address4 >> 16); + srec_wrbyte(address4 >> 8); + srec_wrbyte(address4); break; } - for(i=0; i