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