home *** CD-ROM | disk | FTP | other *** search
/ NetNews Usenet Archive 1993 #1 / NN_1993_1.iso / spool / comp / dcom / modems / 18906 < prev    next >
Encoding:
Text File  |  1993-01-04  |  4.9 KB  |  164 lines

  1. Path: sparky!uunet!newsflash.concordia.ca!clyde.concordia.ca!altitude!marc
  2. From: marc@CAM.ORG (Marc Boucher)
  3. Newsgroups: comp.dcom.modems
  4. Subject: Re: Differences between E and E+... (ROM decoding)
  5. Message-ID: <C0CJFv.BA5@CAM.ORG>
  6. Date: 4 Jan 93 20:26:16 GMT
  7. References: <mckeeveb.725840222@sfu.ca> <HoguwB12w165w@dogbox.acme.gen.nz>
  8. Organization: Communications Accessibles Montreal, Quebec Canada
  9. Lines: 153
  10.  
  11. dogbowl@dogbox.acme.gen.nz (Kennelmeister) writes:
  12.  
  13. >mckeeveb@monashee.sfu.ca (Gumby - The unknown user) writes:
  14.  
  15. >> Well...
  16. >> 
  17. >> Some results are in.
  18. >> 
  19. >> Board differences (Board Rev B for the E, E+): clock speed select switch.
  20. >> 
  21. >> The real difference seems to be in the contents of the EEPROM.  We tried
  22. >> looking at this and discovered that the drain caused by the scope dropped
  23. >> the signal enough to make the modem think it was a non-plus model (on E+).
  24. >> 
  25. >> We're working on decoding the contents... maybe we'll be able to release an
  26. >> 'upgrade ROM' to change at least some of the E's to E+'s...
  27. >> 
  28. >> 'nough said.
  29.  
  30. >Why ot just ftp the E+ ROMs? They're available readily enough.
  31. >try ftp.csie.nctu.edu.tw for starters - look in the "ZyXEL" directory.
  32.  
  33. >--
  34. >Alan Brown. (SysAdmin)
  35. >dogbowl@dogbox.acme.gen.nz                      Palmerston North
  36. >Dawghaus BBS -> +64 (6) 357-9245                New Zealand
  37. >             "A wet and windy place in the South Pacific"
  38.  
  39. Here's a little gift.
  40.  
  41. /* Convert distributed ZyXEL ROM files to readable form.
  42.    Their encoding is based on special wiring order of PROM data lines to the
  43.    processor: U24 is simply reversed, while U25 seems randomly twisted.
  44.  
  45.    We just untangle the mess.
  46.  
  47.    It's written for Unix, but so simple that porting or adaptation to another C
  48.    platform should be easy.
  49.  
  50.     Enjoy,
  51.  
  52.     Marc Boucher <marc@CAM.ORG>; Mon Jan  4 1993
  53. */
  54.  
  55. #include <stdio.h>
  56. #include <fcntl.h>
  57. #include <malloc.h>
  58.  
  59. unsigned char inverse[] = {
  60.     0x00, 0x80, 0x40, 0xc0, 0x20, 0xa0, 0x60, 0xe0, 0x10, 0x90, 0x50, 0xd0,
  61.     0x30, 0xb0, 0x70, 0xf0, 0x08, 0x88, 0x48, 0xc8, 0x28, 0xa8, 0x68, 0xe8,
  62.     0x18, 0x98, 0x58, 0xd8, 0x38, 0xb8, 0x78, 0xf8, 0x04, 0x84, 0x44, 0xc4,
  63.     0x24, 0xa4, 0x64, 0xe4, 0x14, 0x94, 0x54, 0xd4, 0x34, 0xb4, 0x74, 0xf4,
  64.     0x0c, 0x8c, 0x4c, 0xcc, 0x2c, 0xac, 0x6c, 0xec, 0x1c, 0x9c, 0x5c, 0xdc,
  65.     0x3c, 0xbc, 0x7c, 0xfc, 0x02, 0x82, 0x42, 0xc2, 0x22, 0xa2, 0x62, 0xe2,
  66.     0x12, 0x92, 0x52, 0xd2, 0x32, 0xb2, 0x72, 0xf2, 0x0a, 0x8a, 0x4a, 0xca,
  67.     0x2a, 0xaa, 0x6a, 0xea, 0x1a, 0x9a, 0x5a, 0xda, 0x3a, 0xba, 0x7a, 0xfa,
  68.     0x06, 0x86, 0x46, 0xc6, 0x26, 0xa6, 0x66, 0xe6, 0x16, 0x96, 0x56, 0xd6,
  69.     0x36, 0xb6, 0x76, 0xf6, 0x0e, 0x8e, 0x4e, 0xce, 0x2e, 0xae, 0x6e, 0xee,
  70.     0x1e, 0x9e, 0x5e, 0xde, 0x3e, 0xbe, 0x7e, 0xfe, 0x01, 0x81, 0x41, 0xc1,
  71.     0x21, 0xa1, 0x61, 0xe1, 0x11, 0x91, 0x51, 0xd1, 0x31, 0xb1, 0x71, 0xf1,
  72.     0x09, 0x89, 0x49, 0xc9, 0x29, 0xa9, 0x69, 0xe9, 0x19, 0x99, 0x59, 0xd9,
  73.     0x39, 0xb9, 0x79, 0xf9, 0x05, 0x85, 0x45, 0xc5, 0x25, 0xa5, 0x65, 0xe5,
  74.     0x15, 0x95, 0x55, 0xd5, 0x35, 0xb5, 0x75, 0xf5, 0x0d, 0x8d, 0x4d, 0xcd,
  75.     0x2d, 0xad, 0x6d, 0xed, 0x1d, 0x9d, 0x5d, 0xdd, 0x3d, 0xbd, 0x7d, 0xfd,
  76.     0x03, 0x83, 0x43, 0xc3, 0x23, 0xa3, 0x63, 0xe3, 0x13, 0x93, 0x53, 0xd3,
  77.     0x33, 0xb3, 0x73, 0xf3, 0x0b, 0x8b, 0x4b, 0xcb, 0x2b, 0xab, 0x6b, 0xeb,
  78.     0x1b, 0x9b, 0x5b, 0xdb, 0x3b, 0xbb, 0x7b, 0xfb, 0x07, 0x87, 0x47, 0xc7,
  79.     0x27, 0xa7, 0x67, 0xe7, 0x17, 0x97, 0x57, 0xd7, 0x37, 0xb7, 0x77, 0xf7,
  80.     0x0f, 0x8f, 0x4f, 0xcf, 0x2f, 0xaf, 0x6f, 0xef, 0x1f, 0x9f, 0x5f, 0xdf,
  81.     0x3f, 0xbf, 0x7f, 0xff
  82. };
  83.  
  84. void
  85. readin(char *fname, unsigned char *loc, int size)
  86. {
  87.     int fd;
  88.  
  89.     fd = open(fname, O_RDONLY);
  90.     if(fd<0) {
  91.         perror(fname);
  92.         exit(2);
  93.     } else {
  94.         if(read(fd, loc, size) != size) {
  95.             perror(fname);
  96.             exit(2);
  97.         }
  98.         close(fd);
  99.     }
  100. }
  101.  
  102. void
  103. writeout(char *fname, unsigned char *loc, int size)
  104. {
  105.     int fd;
  106.  
  107.     fd = open(fname, O_WRONLY | O_CREAT | O_TRUNC, 0644);
  108.     if(fd<0) {
  109.         perror(fname);
  110.         exit(3);
  111.     } else {
  112.         if(write(fd, loc, size) != size) {
  113.             perror(fname);
  114.             exit(3);
  115.         }
  116.         close(fd);
  117.     }
  118. }
  119.  
  120. #define ROMSIZE (256*1024)
  121.  
  122. unsigned char u24[ROMSIZE/2], u25[ROMSIZE/2];
  123. unsigned char rom[ROMSIZE], *p;
  124.  
  125. main(ac,av)
  126. char **av;
  127. {
  128.     char *f;
  129.     int i;
  130.  
  131.     if(ac!=2) {
  132.         fprintf(stderr, "Usage: %s <release_radical>\n", av[0]);
  133.         return 1;
  134.     }
  135.  
  136.     f = malloc(strlen(av[1]+5));
  137.     if(!f) {
  138.         perror("malloc");
  139.         return 5;
  140.     }
  141.     sprintf(f, "%s.u24", av[1]);
  142.     readin(f, u24, sizeof(u24));
  143.     f[strlen(f)-1] = '5';
  144.     readin(f, u25, sizeof(u25));
  145.  
  146.     for(i=0, p=rom; i < ROMSIZE/2; i++) {
  147.         *p    = u25[i] & ((1 << 6) | (1<< 7)); /* d7, d6 */
  148.         *p   |= (u25[i] & (1 << 5) ) >> 1; /* d4 */
  149.         *p   |= (u25[i] & (1 << 4) ) >> 2; /* d2 */
  150.         *p   |= (u25[i] & (1 << 3) ) >> 3; /* d0 */
  151.         *p   |= (u25[i] & (1 << 2) ) >> 1; /* d1 */
  152.         *p   |= (u25[i] & (1 << 1) ) << 2; /* d3 */
  153.         *p++ |= (u25[i] & (1 << 0) ) << 5; /* d5 */
  154.         *p++  = inverse[u24[i]];
  155.     }
  156.  
  157.     writeout(av[1], rom, sizeof(rom));
  158.     return 0;
  159. }
  160. -- 
  161. ^@-------~~--**----/ --- - Marc Boucher
  162. marc@CAM.ORG \----?    ":
  163. /-----_--  -    ----_|| +1 514 466 8932 - &-
  164.