|
|
1.1 ! root 1: comment $ ! 2: cmacros - assembly macros for interfacing to HHLs ! 3: (C)Copyright Microsoft Corp. 1984 ! 4: $ ! 5: if1 ! 6: outif MACRO name,defval,onmsg,offmsg ! 7: ifndef name ! 8: ifb <defval> ! 9: name=0 ! 10: else ! 11: name=defval ! 12: endif ! 13: endif ! 14: if name ! 15: name=1 ! 16: ifnb <onmsg> ! 17: %out ! onmsg ! 18: endif ! 19: else ! 20: ifnb <offmsg> ! 21: %out ! offmsg ! 22: endif ! 23: endif ! 24: endm ! 25: error MACRO msg ! 26: bug ! 27: %out E r r o r ----- msg ! 28: ENDM ! 29: %out cMacros Version 1.06+ ! 30: outif memS,0,<Small Model> ! 31: outif memM,0,<Medium Model> ! 32: outif memL,0,<Large Model> ! 33: outif memC,0,<Compact Model> ! 34: outif memH,0,<Huge Model> ! 35: memMOD= memS + memM + memL + memC + memH ! 36: if memMOD ne 1 ! 37: if memMOD eq 0 ! 38: memS= 1 ! 39: outif memS,0,<Small Model> ! 40: else ! 41: error <Must have only 1 memory model selected> ! 42: endif ! 43: endif ! 44: sizeC= memM + memL + memH ! 45: sizeD= memL + memC + (memH*2) ! 46: outif ?DF,0,<No segments or groups will be defined> ! 47: outif ?WIN,1,<Windows Support> ! 48: outif ?PLM,1,<PLM calling convention> ! 49: endif ! 50: .XCREF ! 51: .XCREF ?N,?AX,?AH,?AL,?BX,?BH ! 52: .XCREF ?BL,?CX,?CH,?CL,?DX,?DH ! 53: .XCREF ?DL,?SI,?DI,?ES,?DS,?BP ! 54: .XCREF ?SP,?SS,?CS ! 55: .XCREF ?RSL,?CPD,?argl,?argc,?BA ! 56: .XCREF ?ACB,???,?PO ! 57: .XCREF ?PAS,?PC ! 58: .XCREF Uconcat,mPush,mPop ! 59: .XCREF ?RI,?pp,?pp1,?al1 ! 60: .XCREF ?aD,?AP,?Atal,?pd,?dd,?dd1,?ex1 ! 61: .XCREF ?pg,?pg1,?aloc,?cs1,?cs2 ! 62: .XCREF ?lb1,?lblpu ! 63: .XCREF ?DF,?PLM,?WIN,?IA,?PU,?ADJ ! 64: .CREF ! 65: ?RSL = 0 ! 66: ?CPD = 0 ! 67: ?ArgL = 0 ! 68: ?ArgC = 0 ! 69: ?BA = 0 ! 70: ?ACB = 0 ! 71: ??? = 0 ! 72: ?PO = 0 ! 73: ?PAS = 0 ! 74: ?PC = 0 ! 75: ?IA = 0 ! 76: ?PU = 0 ! 77: ?ADJ = 0 ! 78: ?lblpu = 0 ! 79: ?N = 0000000000000000B ! 80: ?AX = 0000000000000011B ! 81: ?AH = 0000000000000001B ! 82: ?AL = 0000000000000010B ! 83: ?BX = 0000000000001100B ! 84: ?BH = 0000000000000100B ! 85: ?BL = 0000000000001000B ! 86: ?CX = 0000000000110000B ! 87: ?CH = 0000000000010000B ! 88: ?CL = 0000000000100000B ! 89: ?DX = 0000000011000000B ! 90: ?DH = 0000000001000000B ! 91: ?DL = 0000000010000000B ! 92: ?SI = 0000000100000000B ! 93: ?DI = 0000001000000000B ! 94: ?ES = 0000010000000000B ! 95: ?DS = 0000100000000000B ! 96: ?BP = 0001000000000000B ! 97: ?SP = 0010000000000000B ! 98: ?SS = 0100000000000000B ! 99: ?CS = 1000000000000000B ! 100: uconcat macro n1,n2,o1,o2,p1,p2 ! 101: n1&n2 o1&o2 p1&p2 ! 102: endm ! 103: mpush macro rV ! 104: irp x,<ax,bx,cx,dx,si,di,es,ds,bp,sp,ss,cs> ! 105: if rV AND ?&&x ! 106: push x ! 107: endif ! 108: endm ! 109: endm ! 110: mpop macro rV ! 111: irp x,<cs,ss,sp,bp,ds,es,di,si,dx,cx,bx,ax> ! 112: if rV AND ?&&x ! 113: pop x ! 114: endif ! 115: endm ! 116: endm ! 117: SAVE macro rL ! 118: ?RSL = 0 ! 119: ?RI ?RSL,<rL> ! 120: endm ! 121: smashes macro n,rL ! 122: .xcref ! 123: .xcref ?SM&n ! 124: .cref ! 125: ?SM&n = 0 ! 126: ?RI ?SM&n,<rL> ! 127: endm ! 128: ?RI macro n,rL ! 129: irp x,<rL> ! 130: ifdef ?&&x ! 131: n = n or ?&&x ! 132: endif ! 133: endm ! 134: endm ! 135: parmB macro nl ! 136: ?pp <&nL>,<byte>,2,1 ! 137: endm ! 138: parmW macro nl ! 139: ?pp <&nL>,<word>,2,2 ! 140: endm ! 141: parmD macro nl ! 142: ife ?PLM ! 143: irp x,<nL> ! 144: ?pp <&&x>,<DWORD>,0,4 ! 145: ?pp <Off_&&x>,<WORD>,2,2 ! 146: ?pp <Seg_&&x>,<WORD>,2,2 ! 147: endm ! 148: else ! 149: irp x,<nL> ! 150: ?pp <Seg_&&x>,<WORD>,2,2 ! 151: ?pp <Off_&&x>,<WORD>,2,2 ! 152: ?pp <&&x>,<DWORD>,0,4 ! 153: endm ! 154: endif ! 155: endm ! 156: parmQ macro nl ! 157: ?pp <&nL>,<QWORD>,8,8 ! 158: endm ! 159: parmT macro nl ! 160: ?pp <&nL>,<TBYTE>,10,10 ! 161: endm ! 162: if sizeC ! 163: parmCP macro nl ! 164: parmD <nl> ! 165: endm ! 166: else ! 167: parmCP macro nl ! 168: parmW <nl> ! 169: endm ! 170: endif ! 171: if sizeD ! 172: parmDP macro nl ! 173: parmD <nl> ! 174: endm ! 175: else ! 176: parmDP macro nl ! 177: parmW <nl> ! 178: endm ! 179: endif ! 180: ?pp macro nL,t,l,s ! 181: if ?CPD ! 182: .xcref ! 183: ife ?PLM ! 184: irp x,<nL> ! 185: ?pp1 x,<t>,%?PO,%?adj,%(?PO+?adj) ! 186: ?PO = ?PO + l ! 187: .xcref ?T&&x ! 188: ?T&&x = s ! 189: endm ! 190: else ! 191: irp x,<nL> ! 192: ?PO = ?PO + l ! 193: ?pp1 x,<t>,%?PO,%?adj,%(?PO+?adj) ! 194: .xcref ?T&&x ! 195: ?T&&x = s ! 196: endm ! 197: endif ! 198: .cref ! 199: else ! 200: %out Parm(s) "&nl" declared outside proc def. ! 201: endif ! 202: endm ! 203: ?pp1 macro n,t,o,a,b ! 204: ife ?PLM ! 205: n equ t ptr [bp+b] ! 206: else ! 207: n equ t ptr [bp+a+?PO-o] ! 208: endif ! 209: endm ! 210: localB macro nL ! 211: ?aLoc <&nL>,<BYTE ptr>,1,1,0 ! 212: endm ! 213: localW macro nL ! 214: ?aLoc <&nL>,<WORD PTR>,2,2,1 ! 215: endm ! 216: localD macro nL ! 217: irp x,<nL> ! 218: ?aLoc <Seg_&&x>,<WORD PTR>,2,2,1 ! 219: ?aLoc <Off_&&x>,<WORD PTR>,2,2,1 ! 220: ?aLoc <&&x>,<DWORD PTR>,0,4,1 ! 221: endm ! 222: endm ! 223: localQ macro nL ! 224: ?aLoc <&nL>,<QWORD PTR>,8,8,1 ! 225: endm ! 226: localT macro nL ! 227: ?aLoc <&nL>,<TBYTE PTR>,10,10,1 ! 228: endm ! 229: if sizeC ! 230: localCP macro nL ! 231: localD <nL> ! 232: endm ! 233: else ! 234: localCP macro nL ! 235: localW <nL> ! 236: endm ! 237: endif ! 238: if sizeD ! 239: localDP macro nL ! 240: localD <nL> ! 241: endm ! 242: else ! 243: localDP macro nL ! 244: localW <nL> ! 245: endm ! 246: endif ! 247: localV macro n,a ! 248: ?aLoc <&n>,<BYTE PTR>,%(&a),0,1 ! 249: endm ! 250: ?aLoc macro nL,t,l,s,a ! 251: if ?CPD ! 252: .xcref ! 253: ??? = ??? + l ! 254: if a ! 255: ??? = ((??? + 1) AND 0FFFEH) ! 256: endif ! 257: irp x,<nL> ! 258: ?aL1 x,<t>,%??? ! 259: .xcref ?T&&x ! 260: ?T&&x = s ! 261: endm ! 262: .cref ! 263: else ! 264: %out Locals "&nl" declared outside procedure def. ! 265: endif ! 266: endm ! 267: ?aL1 macro n,t,o ! 268: if ?IA ! 269: n equ t [bp-?IA-o] ! 270: else ! 271: n equ t [bp-o] ! 272: endif ! 273: endm ! 274: globalB macro n,i,s ! 275: ?aD <n>,1 ! 276: ?dd n,1,<BYTE>,<DB>,<i>,<s> ! 277: endm ! 278: globalW macro n,i,s ! 279: ?aD <n>,2 ! 280: ?dd n,1,<WORD>,<DW>,<i>,<s> ! 281: endm ! 282: globalD macro n,i,s ! 283: ?aD <n>,4 ! 284: ?dd n,1,<DWORD>,<DD>,<i>,<s> ! 285: endm ! 286: globalQ macro n,i,s ! 287: ?aD <n>,8 ! 288: ?dd n,1,<QWORD>,<DQ>,<i>,<s> ! 289: endm ! 290: globalT macro n,i,s ! 291: ?aD <n>,10 ! 292: ?dd n,1,<TBYTE>,<DT>,<i>,<s> ! 293: endm ! 294: if sizeC ! 295: globalCP macro n,i,s ! 296: globalD n,<i>,<s> ! 297: endm ! 298: else ! 299: globalCP macro n,i,s ! 300: globalW n,<i>,<s> ! 301: endm ! 302: endif ! 303: if sizeD ! 304: globalDP macro n,i,s ! 305: globalD n,<i>,<s> ! 306: endm ! 307: else ! 308: globalDP macro n,i,s ! 309: globalW n,<i>,<s> ! 310: endm ! 311: endif ! 312: staticB macro n,i,s ! 313: ?aD <n>,1 ! 314: ?dd n,0,<BYTE>,<DB>,<i>,<s> ! 315: endm ! 316: staticW macro n,i,s ! 317: ?aD <n>,2 ! 318: ?dd n,0,<WORD>,<DW>,<i>,<s> ! 319: endm ! 320: staticD macro n,i,s ! 321: ?aD <n>,4 ! 322: ?dd n,0,<DWORD>,<DD>,<i>,<s> ! 323: endm ! 324: staticQ macro n,i,s ! 325: ?aD <n>,8 ! 326: ?dd n,0,<QWORD>,<DQ>,<i>,<s> ! 327: endm ! 328: staticT macro n,i,s ! 329: ?aD <n>,10 ! 330: ?dd n,0,<TBYTE>,<DT>,<i>,<s> ! 331: endm ! 332: if sizeC ! 333: staticCP macro n,i,s ! 334: staticD n,<i>,<s> ! 335: endm ! 336: else ! 337: staticCP macro n,i,s ! 338: staticW n,<i>,<s> ! 339: endm ! 340: endif ! 341: if sizeD ! 342: staticDP macro n,i,s ! 343: staticD n,<i>,<s> ! 344: endm ! 345: else ! 346: staticDP macro n,i,s ! 347: staticW n,<i>,<s> ! 348: endm ! 349: endif ! 350: ?dd macro n,p,t,d,i,s ! 351: ife ?PLM ! 352: n label t ! 353: ?dd1 _&n,p,<d>,<i>,<s> ! 354: else ! 355: ?dd1 n,p,<d>,<i>,<s> ! 356: endif ! 357: endm ! 358: ?dd1 macro n,p,d,i,s ! 359: if p ! 360: PUBLIC n ! 361: endif ! 362: ifb <s> ! 363: n d i ! 364: else ! 365: ifb <i> ! 366: n d s DUP (?) ! 367: else ! 368: n d s DUP (i) ! 369: endif ! 370: endif ! 371: endm ! 372: externB macro nL ! 373: ?ex1 <&nL>,1,<BYTE> ! 374: endm ! 375: externW macro nL ! 376: ?ex1 <&nL>,2,<WORD> ! 377: endm ! 378: externD macro nL ! 379: ?ex1 <&nL>,4,<DWORD> ! 380: endm ! 381: externQ macro nL ! 382: ?ex1 <&nL>,8,<QWORD> ! 383: endm ! 384: externT macro nL ! 385: ?ex1 <&nL>,10,<TBYTE> ! 386: endm ! 387: externNP macro nL ! 388: ?ex1 <&nL>,2,<NEAR> ! 389: endm ! 390: externFP macro nL ! 391: ?ex1 <&nL>,4,<FAR> ! 392: endm ! 393: if sizeC ! 394: externP macro nL ! 395: ?ex1 <&nL>,4,<FAR> ! 396: endm ! 397: else ! 398: externP macro nL ! 399: ?ex1 <&nL>,2,<NEAR> ! 400: endm ! 401: endif ! 402: if sizeC ! 403: externCP macro nL ! 404: ?ex1 <&nL>,4,<DWORD> ! 405: endm ! 406: else ! 407: externCP macro nL ! 408: ?ex1 <&nL>,2,<WORD> ! 409: endm ! 410: endif ! 411: if sizeD ! 412: externDP macro nL ! 413: ?ex1 <&nL>,4,<DWORD> ! 414: endm ! 415: else ! 416: externDP macro nL ! 417: ?ex1 <&nL>,2,<WORD> ! 418: endm ! 419: endif ! 420: ?ex1 macro nL,s,d ! 421: irp x,<nL> ! 422: .xcref ! 423: .xcref ?T&&x ! 424: .cref ! 425: ?T&&x = s ! 426: ife ?PLM ! 427: extrn _&&x:&d ! 428: x equ _&&x ! 429: else ! 430: extrn x:&d ! 431: endif ! 432: endm ! 433: endm ! 434: labelB macro nL ! 435: ?lb1 <&nL>,1,<BYTE> ! 436: endm ! 437: labelW macro nL ! 438: ?lb1 <&nL>,2,<WORD> ! 439: endm ! 440: labelD macro nL ! 441: ?lb1 <&nL>,4,<DWORD> ! 442: endm ! 443: labelQ macro nL ! 444: ?lb1 <&nL>,8,<QWORD> ! 445: endm ! 446: labelT macro nL ! 447: ?lb1 <&nL>,10,<TBYTE> ! 448: endm ! 449: labelNP macro nL ! 450: ?lb1 <&nL>,2,<NEAR> ! 451: endm ! 452: labelFP macro nL ! 453: ?lb1 <&nL>,4,<FAR> ! 454: endm ! 455: if sizeC ! 456: labelP macro nL ! 457: ?lb1 <&nL>,4,<FAR> ! 458: endm ! 459: else ! 460: labelP macro nL ! 461: ?lb1 <&nL>,2,<NEAR> ! 462: endm ! 463: endif ! 464: if sizeC ! 465: labelCP macro nL ! 466: ?lb1 <&nL>,4,<DWORD> ! 467: endm ! 468: else ! 469: labelCP macro nL ! 470: ?lb1 <&nL>,2,<WORD> ! 471: endm ! 472: endif ! 473: if sizeD ! 474: labelDP macro nL ! 475: ?lb1 <&nL>,4,<DWORD> ! 476: endm ! 477: else ! 478: labelDP macro nL ! 479: ?lb1 <&nL>,2,<WORD> ! 480: endm ! 481: endif ! 482: ?lb1 macro nL,s,d ! 483: ?lblpu = 0 ! 484: irp x,<nL> ! 485: ifidn <x>,<PUBLIC> ! 486: ?lblpu = 1 ! 487: else ! 488: .xcref ! 489: .xcref ?T&&x ! 490: .cref ! 491: ?T&&x = s ! 492: ife ?PLM ! 493: if ?lblpu ! 494: public _&&x ! 495: endif ! 496: _&&x label &d ! 497: x equ _&&x ! 498: else ! 499: if ?lblpu ! 500: public x ! 501: endif ! 502: x label &d ! 503: endif ! 504: endif ! 505: endm ! 506: endm ! 507: defB macro nL ! 508: ?aD <&nL>,1 ! 509: endm ! 510: defW macro nL ! 511: ?aD <&nL>,2 ! 512: endm ! 513: defD macro nL ! 514: ?aD <&nL>,4 ! 515: endm ! 516: defQ macro nL ! 517: ?aD <&nL>,8 ! 518: endm ! 519: defT macro nL ! 520: ?aD <&nL>,10 ! 521: endm ! 522: if sizeC ! 523: defCP macro nL ! 524: defD <nL> ! 525: endm ! 526: else ! 527: defCP macro nL ! 528: defW <nL> ! 529: endm ! 530: endif ! 531: if sizeD ! 532: defDP macro nL ! 533: defD <nL> ! 534: endm ! 535: else ! 536: defDP macro nL ! 537: defW <nL> ! 538: endm ! 539: endif ! 540: ?aD macro nL,s ! 541: irp x,<nL> ! 542: .xcref ! 543: .xcref ?T&&x ! 544: .cref ! 545: ?T&&x = s ! 546: endm ! 547: endm ! 548: regPtr macro n,S,O ! 549: .xcref ! 550: .xcref ?T&n,?SR&n,?OR&n ! 551: .cref ! 552: ?T&n = 0FFFFH ! 553: ?SR&n = 0 ! 554: ?RI ?SR&n,<&S> ! 555: ?OR&n = 0 ! 556: ?RI ?OR&n,<&O> ! 557: endm ! 558: arg macro aL ! 559: irp x,<aL> ! 560: ?argc = ?argc + 1 ! 561: ?Atal <x>,%?argc ! 562: endm ! 563: endm ! 564: ?Atal macro n,i ! 565: .xcref ! 566: .xcref ?ALI&i ! 567: .cref ! 568: ?ALI&i ¯o ! 569: ?AP n ! 570: &endm ! 571: endm ! 572: ?AP macro n ! 573: ?argl = ?argl + 2 ! 574: ifdef ?T&n ! 575: ife ?T&n-1 ! 576: push word ptr (n) ! 577: exitm ! 578: endif ! 579: ife ?T&n-2 ! 580: push n ! 581: exitm ! 582: endif ! 583: ife ?T&n-4 ! 584: push word ptr (n)+2 ! 585: push word ptr (n) ! 586: ?argl = ?argl + 2 ! 587: exitm ! 588: endif ! 589: ife ?T&n-8 ! 590: push word ptr (n)+6 ! 591: push word ptr (n)+4 ! 592: push word ptr (n)+2 ! 593: push word ptr (n) ! 594: ?argl = ?argl + 6 ! 595: exitm ! 596: endif ! 597: ife ?T&n-0FFFFH ! 598: mpush %(?SR&n),1 ! 599: mpush %(?OR&n),1 ! 600: ?argl = ?argl + 2 ! 601: exitm ! 602: endif ! 603: ife ?T&n ! 604: push word ptr (n) ! 605: exitm ! 606: endif ! 607: endif ! 608: push n ! 609: endm ! 610: ife ?PLM ! 611: ccall macro n,a,sleaze ! 612: ifnb <a> ! 613: Arg <a> ! 614: endif ! 615: ifdef ?SM&n ! 616: ?RSL = ?RSL AND ?SM&n ! 617: endif ! 618: mpush %?RSL ! 619: ?argl = 0 ! 620: ?ACB = ?argc ! 621: rept ?argc ! 622: uconcat <?ALI>,%?ACB ! 623: uconcat <purge>,,<?ALI>,%?ACB ! 624: ?ACB = ?ACB - 1 ! 625: endm ! 626: ife ?PLM ! 627: ifb <sleaze> ! 628: call _&n ! 629: else ! 630: call n ! 631: endif ! 632: else ! 633: call n ! 634: endif ! 635: if ?argl ! 636: add sp,?argl ! 637: endif ! 638: mpop %?RSL ! 639: ?RSL = 0 ! 640: ?argc = 0 ! 641: ?argl = 0 ! 642: endm ! 643: else ! 644: ccall macro n,a ! 645: ifnb <a> ! 646: Arg <a> ! 647: endif ! 648: ifdef ?SM&n ! 649: ?RSL = ?RSL AND ?SM&n ! 650: endif ! 651: mpush %?RSL ! 652: ?argl = 0 ! 653: ?ACB = 1 ! 654: rept ?argc ! 655: uconcat <?ALI>,%?ACB ! 656: uconcat <purge>,,<?ALI>,%?ACB ! 657: ?ACB = ?ACB + 1 ! 658: endm ! 659: ife ?PLM ! 660: call _&n ! 661: else ! 662: call n ! 663: endif ! 664: mpop %?RSL ! 665: ?RSL = 0 ! 666: ?argc = 0 ! 667: ?argl = 0 ! 668: endm ! 669: endif ! 670: cProc macro n,cl,s ! 671: ?pd n,<cl>,<s>,4 ! 672: endm ! 673: ?pd macro n,c,a,i ! 674: if ?CPD ! 675: ?UTPE ! 676: endif ! 677: ?CPD = 1 ! 678: ??? = 0 ! 679: ?argc = 0 ! 680: ?BA = 0 ! 681: ?PO = 0 ! 682: ?PU = 0 ! 683: ?IA = 0 ! 684: ?adj = i ! 685: ?PAS = 0 ! 686: ifnb <a> ! 687: ?RI ?PAS,<a> ! 688: endif ! 689: ?PC = sizeC ! 690: irp x,<c> ! 691: ifidn <x>,<FAR> ! 692: ?PC = 1 ! 693: endif ! 694: ifidn <x>,<NEAR> ! 695: ?PC = 0 ! 696: endif ! 697: ifidn <x>,<PUBLIC> ! 698: ?PU = 1 ! 699: endif ! 700: endm ! 701: if ?PC ! 702: if ?WIN ! 703: ?IA = 2 ! 704: endif ! 705: ?adj = ?adj + 2 ! 706: endif ! 707: ife ?PLM ! 708: ife ?PC ! 709: n label near ! 710: else ! 711: n label far ! 712: endif ! 713: ?pg <_&n>,%?PU,%?PC,%?PAS ! 714: else ! 715: ?pg <n>,%?PU,%?PC,%?PAS ! 716: endif ! 717: endm ! 718: ?pg macro n,p,c,a ! 719: .xcref ! 720: cBegin ¯o g ! 721: .xcref ! 722: ?pg1 <n>,c,a,%?PO ! 723: ?CPD = 0 ! 724: ?argc = 0 ! 725: ?BA = 1 ! 726: ??? = (???+1) AND 0FFFEH ! 727: if p ! 728: PUBLIC n ! 729: endif ! 730: ife c ! 731: n proc NEAR ! 732: else ! 733: n proc FAR ! 734: endif ! 735: ifidn <g>,<nogen> ! 736: if ???+?PO+a ! 737: %out <cBegin - nogen> ! 738: endif ! 739: else ! 740: if ?IA ! 741: mov ax,ds ! 742: nop ! 743: inc bp ! 744: push bp ! 745: mov bp,sp ! 746: push ds ! 747: mov ds,ax ! 748: else ! 749: push bp ! 750: mov bp,sp ! 751: endif ! 752: if ??? ! 753: sub sp,??? ! 754: endif ! 755: mPush a,1 ! 756: endif ! 757: .cref ! 758: purge cBegin ! 759: &endm ! 760: ?UTPE ¯o ! 761: %out Unterminated Procedure Definition: "&n" ! 762: &endm ! 763: endm ! 764: ?pg1 macro n,c,a,o ! 765: .xcref ! 766: cEnd ¯o g ! 767: .xcref ! 768: ?BA = 0 ! 769: ifidn <g>,<nogen> ! 770: if o+a ! 771: %out <cEnd - nogen> ! 772: endif ! 773: else ! 774: mPop a,1 ! 775: if ?IA ! 776: sub bp,2 ! 777: mov sp,bp ! 778: pop ds ! 779: pop bp ! 780: dec bp ! 781: else ! 782: ifdif <g>,<nolocals> ! 783: mov sp,bp ! 784: endif ! 785: pop bp ! 786: endif ! 787: ife ?PLM ! 788: ret ! 789: else ! 790: ret o ! 791: endif ! 792: endif ! 793: n endp ! 794: .cref ! 795: purge cEnd ! 796: &endm ! 797: .cref ! 798: endm ! 799: assumes macro s,g ! 800: local assumed ! 801: assumed = 0 ! 802: ifidn <code>,<g> ! 803: assume s&:_TEXT ! 804: assumed = 1 ! 805: endif ! 806: ifidn <CODE>,<g> ! 807: assume s&:_TEXT ! 808: assumed = 1 ! 809: endif ! 810: ifidn <data>,<g> ! 811: assume s&:dgroup ! 812: assumed = 1 ! 813: endif ! 814: ifidn <DATA>,<g> ! 815: assume s&:dgroup ! 816: assumed = 1 ! 817: endif ! 818: ife assumed ! 819: assume s&:&g ! 820: endif ! 821: endm ! 822: createSeg macro n,ln,a,co,cl,grp ! 823: ifnb <grp> ! 824: addSeg grp,n ! 825: endif ! 826: ifnb <cl> ! 827: n segment a co '&cl' ! 828: else ! 829: n segment a co ! 830: endif ! 831: n ends ! 832: ?cs1 <n>,<ln> ! 833: endm ! 834: if1 ! 835: ASMpass=1 ! 836: else ! 837: ASMpass=2 ! 838: endif ! 839: addSeg macro grp,seg ! 840: ifndef def_&grp ! 841: def_&grp= 0 ! 842: endif ! 843: if def_&grp ne ASMpass ! 844: add_&grp ¯o s ! 845: in_&grp <seg>,s ! 846: &endm ! 847: in_&grp ¯o sl,s ! 848: ifb <s> ! 849: grp group sl ! 850: else ! 851: add_&grp ¯o ns ! 852: in_&grp <sl,s>,ns ! 853: &endm ! 854: endif ! 855: &endm ! 856: def_&grp=ASMpass ! 857: else ! 858: add_&grp seg ! 859: endif ! 860: endm ! 861: defGrp macro nam ! 862: addSeg nam ! 863: endm ! 864: ?cs1 macro n,ln ! 865: begin&ln ¯o ! 866: ?cs2 <n> ! 867: n segment ! 868: &endm ! 869: endm ! 870: ?cs2 macro n ! 871: sEnd ¯o ! 872: n ends ! 873: &endm ! 874: endm ! 875: sBegin macro ln ! 876: begin&ln ! 877: endm ! 878: ife ?DF ! 879: createSeg _TEXT,code,word,public,CODE ! 880: createSeg _DATA,data,word,public,DATA,DGROUP ! 881: defGrp DGROUP ! 882: codeOFFSET equ OFFSET _TEXT: ! 883: dataOFFSET equ OFFSET DGROUP: ! 884: endif ! 885: errnz macro x ! 886: if2 ! 887: if x ! 888: errnz1 <x>,%(x) ! 889: endif ! 890: endif ! 891: endm ! 892: errnz1 macro x1,x2 ! 893: = *ERRNZ* x1 = x2 ! 894: endm ! 895: errn$ macro l,x ! 896: errnz <OFFSET $ - OFFSET l x> ! 897: ENDM
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.