Changeset 4005 for branches/Grace/src
- Timestamp:
- Aug 13, 2000, 11:23:59 AM (25 years ago)
- Location:
- branches/Grace/src/win32k
- Files:
-
- 5 edited
-
dev32/d32hlp.asm (modified) (3 diffs)
-
dev32/devfirst.asm (modified) (3 diffs)
-
include/devSegDf.inc (modified) (2 diffs)
-
include/omf.h (modified) (2 diffs)
-
libconv.c (modified) (11 diffs)
Legend:
- Unmodified
- Added
- Removed
-
branches/Grace/src/win32k/dev32/d32hlp.asm
r3834 r4005 1 ; $Id: d32hlp.asm,v 1.3.4. 1 2000-07-16 22:43:25bird Exp $1 ; $Id: d32hlp.asm,v 1.3.4.2 2000-08-13 09:23:58 bird Exp $ 2 2 ; 3 3 ; d32hlp - 32-bit Device Driver Helper Function. … … 37 37 38 38 ;CODE32 segment 39 CODE32 segment dword public 'CODE' use3239 CODE32 segment 40 40 assume cs:CODE32, ds:flat, ss:nothing, es:nothing 41 41 .386p … … 281 281 282 282 ;CODE16 segment 283 CODE16 segment word public 'CODE' use16283 CODE16 segment 284 284 assume cs:CODE16, ds:FLAT 285 285 -
branches/Grace/src/win32k/dev32/devfirst.asm
r2898 r4005 1 ; $Id: devfirst.asm,v 1.5 2000-02-25 18:15:03bird Exp $1 ; $Id: devfirst.asm,v 1.5.4.1 2000-08-13 09:23:58 bird Exp $ 2 2 ; 3 3 ; DevFirst - entrypoint and segment definitions … … 60 60 ;$win32ki entry point 61 61 _strategyAsm0: 62 int 3 62 63 push 0 63 64 jmp _strategyAsm … … 65 66 ;$win32k entry point 66 67 _strategyAsm1: 68 int 3 67 69 push 1 68 70 jmp _strategyAsm -
branches/Grace/src/win32k/include/devSegDf.inc
r3834 r4005 1 ; $Id: devSegDf.inc,v 1.5.4. 1 2000-07-16 22:43:28bird Exp $1 ; $Id: devSegDf.inc,v 1.5.4.2 2000-08-13 09:23:59 bird Exp $ 2 2 ; 3 3 ; Segment definitions for win32k.sys. … … 23 23 CODE16 segment word public 'CODE' use16 24 24 CODE16 ends 25 26 CODE16_IOSEG segment word public 'CODE' use16 27 CODE16_IOSEG ends 25 28 26 29 -
branches/Grace/src/win32k/include/omf.h
r1678 r4005 1 /* $Id: omf.h,v 1.2 1999-11-10 01:45:33bird Exp $ */1 /* $Id: omf.h,v 1.2.4.1 2000-08-13 09:23:59 bird Exp $ */ 2 2 /* 3 3 * OMF stuff … … 16 16 #define LIBEND 0xF1 17 17 #define THEADR 0x80 18 19 18 #define MODEND 0x8a 20 19 #define MODEND2 0x8b 21 22 20 #define COMENT 0x88 23 21 #define IMPDEF 0x01 24 22 #define PUBDEF 0x90 25 23 #define LNAMES 0x96 24 #define SEGDEF 0x98 25 #define SEGDEF2 0x99 26 #define GRPDEF 0x9A 27 #define FIXUPP 0x9C 28 #define FIXUPP2 0x9D 29 #define LEDATA 0xA0 30 #define LEDATA2 0xA1 26 31 27 32 #endif -
branches/Grace/src/win32k/libconv.c
r3834 r4005 1 /* $Id: libconv.c,v 1.2.4. 1 2000-07-16 22:43:19bird Exp $1 /* $Id: libconv.c,v 1.2.4.2 2000-08-13 09:23:53 bird Exp $ 2 2 * 3 3 * Very simple OMF/LIB dumper. … … 21 21 22 22 int fCodeToCode16 = 0; 23 int fRemoveExtra = 0; 23 24 24 25 /*@IntFunc********************************************************************** … … 26 27 *******************************************************************************/ 27 28 int processFile(const char *pszFilename, const char *pszFilenameOut); 28 void *processRecord(void *pvRecord, void *pvBase, FILE *phNew );29 void *processRecord(void *pvRecord, void *pvBase, FILE *phNew, unsigned short *ausTrans); 29 30 30 31 … … 35 36 int argi = 1; 36 37 38 if (argc == 4) 39 { 40 argi = 2; 41 fRemoveExtra = 1; 42 } 37 43 if (argc != 3) 38 44 printf("syntax error - requires two filename, in.lib and out.lib\n"); … … 78 84 if (fread(pvFile, cbFile, 1, phFile) == 1) 79 85 { 86 unsigned short * ausTrans = calloc(sizeof(unsigned short), cbFile / 16 ); /* Assumes page size of 16 FIXME! */ 80 87 void *pvNew = pvFile; 88 81 89 82 90 /* main loop */ 83 91 while (pvNew < (void*)(cbFile + (int)pvFile)) 84 pvNew = processRecord(pvNew, pvFile, phNew );92 pvNew = processRecord(pvNew, pvFile, phNew, ausTrans); 85 93 } 86 94 else … … 103 111 104 112 105 void *processRecord(void *pvRecord, void *pvBase, FILE *phNew )113 void *processRecord(void *pvRecord, void *pvBase, FILE *phNew, unsigned short *ausTrans) 106 114 { 107 115 static char *apszLNames[256]; 108 116 static int cpszLNames = 0; 109 117 static int iCode16 = 0; 118 static int cbPage = 16; /* fixme todo TODO FIXME ASSUMES: pagesize = 16 */ 110 119 void *pvRet = pvRecord; 111 120 int cbRecord; … … 116 125 { 117 126 case LIBHDR: 118 fChanged = 1;119 fwrite(pvRecord, 1, 3, phNew);120 127 if (*(unsigned short*)((int)pvRecord+1) < 6) 121 fwrite((char*)pvRecord+3, 1, *(unsigned short*)((int)pvRecord+1), phNew); 122 else 123 { 124 i = 0; 125 fwrite(&i, 1, 2, phNew); 126 fwrite(&i, 1, 2, phNew); 127 fwrite(&i, 1, 2, phNew); 128 fwrite((char*)pvRecord+3+6, 1, *(unsigned short*)((int)pvRecord+1) - 6, phNew); 129 } 130 cbRecord = *((unsigned short*)((int)pvRecord+1)) + 3; 131 break; 132 133 case 0x98: /* 16-bit segdef */ 134 cbRecord = *((unsigned short*)((int)pvRecord+1)) + 3; 128 fprintf(stderr, "error: not supported LIBHDR\n"); 129 cbRecord = *((unsigned short*)((int)pvRecord+1)) + 3; 130 break; 131 132 case THEADR: 133 /* Add entry to the translation table - used to translate block numbers in the dictionary */ 134 ausTrans[((char*)pvRecord - (char*)pvBase) / cbPage] = (unsigned short)(ftell(phNew) / cbPage); 135 cbRecord = *((unsigned short*)((int)pvRecord+1)) + 3; 136 break; 137 138 case SEGDEF: /* 16-bit segdef */ 139 cbRecord = *((unsigned short*)((int)pvRecord+1)) + 3; 140 *((char*)pvRecord + 9) = 0; 135 141 i = *(char*)((int)pvRecord + 6); 136 142 if (cbRecord == 10 && i <= cpszLNames && strcmp(apszLNames[i-1], "CODE") == 0) 137 {143 { 138 144 *(char*)((int)pvRecord + 6) = iCode16+1; 139 } 145 } 146 i = *(char*)((int)pvRecord + 6); 147 if (cbRecord == 10 && (*((char *)pvRecord + 3) & 0xE0) == 0x20 && i <= cpszLNames && strcmp(apszLNames[i-1], "CODE16_IOSEG") == 0) 148 { /* change alignment of this segment... */ 149 /* fprintf(stderr, "debug %s 0x%02x\n", apszLNames[*(char*)((int)pvRecord + 6) - 1], (*((char *)pvRecord + 3) & 0xFF)); */ 150 *((char*)pvRecord + 3) = 0x40 | (*((char*)pvRecord + 3) & 0x1F); 151 } 140 152 break; 141 153 … … 148 160 /* it seems to be somthing funny here! - lets try aligning it to on a 16 bytes boundrary... */ 149 161 /* PS. I know this I have a wrong approch to the lib files, not using the directory... */ 162 /* Aug 13 2000 4:24am: The alignment of modules are found in the library header. 163 * It's the size of the library header. 164 * Not implemented yet. TODO FIXME BUGBUG ASSUMES 165 */ 150 166 fChanged = 1; 151 167 fwrite(pvRecord, 1, cbRecord, phNew); … … 153 169 if (*((unsigned char*)((int)pvRecord+cbRecord)) == 0x00) 154 170 { 155 if ((ul % 16) > 0)156 cbRecord += 16 - (ul % 16);171 if ((ul % cbPage) > 0) 172 cbRecord += cbPage - (ul % cbPage); 157 173 } 158 174 /*if (*((unsigned char*)pvRecord + cbRecord) != LIBEND)*/ 159 175 { 160 176 ul = ftell(phNew); 161 while (ul++ % 16!= 0)177 while (ul++ % cbPage != 0) 162 178 fputc(0, phNew); 163 179 } … … 166 182 } break; 167 183 184 case PUBDEF: 185 { 186 cbRecord = *((unsigned short*)((int)pvRecord+1)) + 3; 187 *((char*)pvRecord + cbRecord - 1) = 0; 188 break; 189 } 190 168 191 case LNAMES: 169 {192 { 170 193 char *apszConv[] = 171 194 { 172 "CODE", "CODE", 173 "_CODE", "CODE16", 174 "TEXT", "CODE16", 175 "_TEXT", "CODE16", 176 "_IOSEG", "CODE16", 177 "IOSEG_CODE", "CODE", 178 "DATA", "FAR_DATA", 179 "_DATA", "DATA16", 180 "DGROUP", "DATA16_GROUP", 181 "_BSS", "DATA16BSS", 182 "BSS", "DATA16BSS", 183 "_CONST", "DATA16CONST", 184 "CONST", "DATA16CONST", 195 /* classes */ 196 "CODE", "CODE", 197 "IOSEG_CODE", "CODE", 198 "DATA", "FAR_DATA", 199 "BSS", "DATA16BSS", 200 "CONST", "DATA16CONST", 201 /* segment names */ 202 "_TEXT", "CODE16", 203 "_IOSEG", "CODE16_IOSEG", 204 "_CODE", "CODE16", /* dhcalls */ 205 "_DATA", "DATA16", 206 "_BSS", "DATA16BSS", 207 "_CONST", "DATA16CONST", 208 /* groups */ 209 "DGROUP", "DATA16_GROUP", 185 210 NULL, NULL 186 211 }; … … 244 269 fputc(0, phNew); 245 270 break; 246 }271 } 247 272 248 273 case LIBEND: 249 cbRecord = *((unsigned short*)((int)pvRecord+1)) + 3; 250 fwrite(pvRecord, 1, cbRecord, phNew); 274 { 275 /* align dictionary at 512 byte (3 is min size of this record) */ 276 int cBlocks; 277 unsigned short int cbSize = (((ftell(phNew) + 3 + 0x1ff) & ~0x1ff) - ftell(phNew)) - 3; 278 unsigned long int offDict = ftell(phNew) + cbSize + 3; 279 cbRecord = cbSize + 3; 280 fwrite(pvRecord, 1, 1, phNew); 281 fwrite(&cbSize, 1, sizeof(cbSize), phNew); 282 while (cbSize-- > 0) 283 fwrite("\0", 1, 1, phNew); 284 285 /* update header record. */ 286 fseek(phNew, 3, SEEK_SET); 287 fwrite(&offDict, 1, sizeof(offDict), phNew); 288 fseek(phNew, offDict, SEEK_SET); 289 290 /* Translate the dictionary */ 291 pvRecord = (void*)((char*)pvRecord + *(unsigned short*)((char*)pvRecord + 1) + 3); 292 cBlocks = *(unsigned short *)((char*)pvBase + 7); 293 for (i = 0; i < cBlocks; i++) 294 { 295 int j; 296 char *pchBlock = (char*)pvRecord + i * 512; 297 for (j = 0; j < 37; j++) 298 { 299 if (pchBlock[j] > 19 && pchBlock[j] < 0xff) 300 { 301 unsigned short *pusBlock = (unsigned short*)&pchBlock[pchBlock[j] * 2]; 302 pusBlock = (unsigned short *) ((char*)pusBlock + *(char*)pusBlock + 1); 303 if (ausTrans[*pusBlock] == 0) 304 fprintf(stderr, "error: dictionary entry don't point to a THEADR page!\n"); 305 else 306 *pusBlock = ausTrans[*pusBlock]; 307 } 308 } 309 310 } 311 312 /* Write the dictionary */ 313 fwrite(pvRecord, 512, cBlocks, phNew); 251 314 return (void*)0xffffffff; /* FINE */ 252 break; 315 } 316 317 case COMENT: 318 { 319 cbRecord = *((unsigned short*)((int)pvRecord+1)) + 3; 320 switch (*((unsigned char*)((int)pvRecord+4))) 321 { 322 /* remove "Link Pass Separator" */ 323 case 0xA2: 324 /* remove "LIBMOD" - The VAC 3.6.5 Linker don't like these! */ 325 case 0xA3: 326 fChanged = fRemoveExtra; 327 break; 328 } 329 break; 330 } 331 332 /* 333 * Remove checksum 334 */ 335 /* 336 case GRPDEF: 337 case FIXUPP: 338 case FIXUPP2: 339 case LEDATA: 340 { 341 cbRecord = *((unsigned short*)((int)pvRecord+1)) + 3; 342 *((char*)pvRecord + cbRecord - 1) = 0; 343 break; 344 } 345 */ 253 346 254 347 default:
Note:
See TracChangeset
for help on using the changeset viewer.
