home *** CD-ROM | disk | FTP | other *** search
/ Oakland CPM Archive / oakcpm.iso / sigm / vol159 / tinmacr.tin < prev   
Encoding:
Text File  |  1985-03-23  |  5.9 KB  |  323 lines

  1. U:;$^    
  2. :REGISTER=$$$;
  3. :TOP;
  4. @    TITLE@    '8086 TINCMP CMPLR[CP/M 1.1]';
  5. @    PAGEWIDTH 79;
  6. @    NAME@    'MAINPROG';
  7. @    EXTRN@    MSG@:NEAR,OPENIO@:NEAR,CLOSEIO@:NEAR,RNX@:NEAR;
  8. @    EXTRN@    WNX@:NEAR,STOP@:NEAR,BREAD@:NEAR,BWRITE@:NEAR;
  9. @    EXTRN@    INITIAL@:NEAR,ENDING@:NEAR,STOP@:NEAR,ATTACH@:NEAR;
  10. @    EXTRN@    ASSOC@:NEAR;
  11. DATA@    DSEG;
  12. :LOMEM=$$$$$;
  13. :HIMEM=$$$$$;
  14. :PARAMETER K$$=$$$;
  15. KA0^P1C^P2C@    EQU@    ^V3S^V4*^V5*^!0N;
  16. :MS '$$$$$$$$$';
  17. @    CALL@    MSG;
  18. @    DB@    '^P1C^P2C^P3C^P4C^P5C^P6C^P7C^P8C^P9C';
  19. :GOSUB $$;
  20. @    CALL@    SA0^P1C^P2C;
  21. :GOTO $$;
  22. @    JMP@    LOC^P1C^P2C;
  23. :BYTE $$;
  24. BA0^P1C^P2C@    RB@    1;
  25. :BYTE $$($$$);
  26. BA0^P1C^P2C@    RB@    ^V3S^V4*^V5*^!0N;
  27. :BYTE $$($$$$$);
  28. BA0^P1C^P2C@    RB@    ^V3S^V4*^V5*^V6*^V7*^!0N;
  29. :INT I$$;
  30. WA0^P1C^P2C@    RW@    1;
  31. :INT I$$($$$);
  32. WA0^P1C^P2C@    RW@    ^V3S^V4*^V5*^!0N;
  33. :INT I$$($$$$$);
  34. WA0^P1C^P2C@    RW@    ^V3S^V4*^V5*^V6*^V7*^!0N;
  35. :$$=+K$$;
  36. @    MOV@    BA0^P1C^P2C,KA0^P3C^P4C;
  37. :$$=+$$$;
  38. @    MOV@    BA0^P1C^P2C,^V3S^V4*^V5*^!0N;
  39. :$$='$';
  40. @    MOV@    BA0^P1C^P2C,'^P3C';
  41. :I$$=+$$$;
  42. @    MOV@    WA0^P1C^P2C,^V3S^V4*^V5*^!0N;
  43. :I$$=+$$$$$;
  44. @    MOV@    WA0^P1C^P2C,^V3S^V4*^V5*^V6*^V7*^!0N;
  45. :$$=$$;
  46. @    MOV@    AL,BA0^P3C^P4C;
  47. @    MOV@    BA0^P1C^P2C,AL;
  48. :$$++;
  49. @    INC@    BA0^P1C^P2C;
  50. :$$--;
  51. @    DEC@    BA0^P1C^P2C;
  52. :I$$=$$;
  53. @    MOV@    BH,0;
  54. @    MOV@    BL,BA0^P3C^P4C;
  55. @    MOV@    WA0^P1C^P2C,BX;
  56. :I$$=I$$;
  57. @    MOV@    BX,WA0^P3C^P4C;
  58. @    MOV@    WA0^P1C^P2C,BX;
  59. :$$=$$($$);
  60. @    MOV@    BL,BA0^P5C^P6C;
  61. @    MOV@    BH,0;
  62. @    MOV@    AL,BA0^P3C^P4C[BX];
  63. @    MOV@    BA0^P1C^P2C,AL;
  64. :I$$=I$$($$);
  65. @    MOV@    BL,BA0^P5C^P6C;
  66. @    MOV@    BH,0;
  67. @    SHL@    BX,1;
  68. @    MOV@    AX,WA0^P3C^P4C[BX];
  69. @    MOV@    WA0^P1C^P2C,AX;
  70. :$$=$$(I$$);
  71. @    MOV@    BX,WA0^P5C^P6C;
  72. @    MOV@    AL,BA0^P3C^P4C[BX];
  73. @    MOV@    BA0^P1C^P2C,AL;
  74. :I$$=I$$(I$$);
  75. @    MOV@    BX,WA0^P5C^P6C;
  76. @    SHL@    BX,1;
  77. @    MOV@    AX,WA0^P3C^P4C[BX];
  78. @    MOV@    WA0^P1C^P2C,AX;
  79. :$$($$)=$$;
  80. @    MOV@    AL,BA0^P5C^P6C;
  81. @    MOV@    BL,BA0^P3C^P4C;
  82. @    MOV@    BH,0;
  83. @    MOV@    BA0^P1C^P2C[BX],AL;
  84. :$$(I$$)=$$;
  85. @    MOV@    AL,BA0^P5C^P6C;
  86. @    MOV@    BX,WA0^P3C^P4C;
  87. @    MOV@    BA0^P1C^P2C[BX],AL;
  88. :I$$($$)=I$$;
  89. @    MOV@    AX,WA0^P5C^P6C;
  90. @    MOV@    BL,BA0^P3C^P4C;
  91. @    MOV@    BH,0;
  92. @    SHL@    BX,1;
  93. @    MOV@    WA0^P1C^P2C[BX],AX;
  94. :I$$(I$$)=I$$;
  95. @    MOV@    AX,WA0^P5C^P6C;
  96. @    MOV@    BX,WA0^P3C^P4C;
  97. @    SHL@    BX,1;
  98. @    MOV@    WA0^P1C^P2C[BX],AX;
  99. :$$=$$+$$;
  100. @    MOV@    AL,BA0^P5C^P6C;
  101. @    ADD@    AL,BA0^P3C^P4C;
  102. @    MOV@    BA0^P1C^P2C,AL;
  103. :$$=$$-$$;
  104. @    MOV@    AL,BA0^P3C^P4C;
  105. @    SUB@    AL,BA0^P5C^P6C;
  106. @    MOV@    BA0^P1C^P2C,AL;
  107. :$$=$$&$$;
  108. @    MOV@    AL,BA0^P3C^P4C;
  109. @    AND@    AL,BA0^P5C^P6C;
  110. @    MOV@    BA0^P1C^P2C,AL;
  111. :$$=$$?$$;
  112. @    MOV@    AL,BA0^P3C^P4C;
  113. @    OR@    AL,BA0^P5C^P6C;
  114. @    MOV@    BA0^P1C^P2C,AL;
  115. :I$$++;
  116. @    INC@    WA0^P1C^P2C;
  117. :I$$--;
  118. @    DEC@    WA0^P1C^P2C;
  119. :I$$=-I$$;
  120. @    MOV@    AX,WA0^P3C^P4C;
  121. @    NEG@    AX;
  122. @    MOV@    WA0^P1C^P2C,AX;
  123. :I$$=I$$+I$$;
  124. @    MOV@    AX,WA0^P3C^P4C;
  125. @    ADD@    AX,WA0^P5C^P6C;
  126. @    MOV@    WA0^P1C^P2C,AX;
  127. :I$$=I$$-I$$;
  128. @    MOV@    AX,WA0^P3C^P4C;
  129. @    SUB@    AX,WA0^P5C^P6C;
  130. @    MOV@    WA0^P1C^P2C,AX;
  131. :I$$=I$$*I$$;
  132. @    MOV@    AX,WA0^P3C^P4C;
  133. @    IMUL@    WA0^P5C^P6C;
  134. @    MOV@    WA0^P1C^P2C,AX;
  135. :I$$=I$$/I$$;
  136. @    MOV@    AX,WA0^P3C^P4C;
  137. @    MOV@    CX,WA0^P5C^P6C;
  138. @    CWD;
  139. @    JCXZ@    @$+4;
  140. @    IDIV@    CX;
  141. @    MOV@    WA0^P1C^P2C,AX;
  142. :$$=$$==$$;
  143. @    MOV@    AL,BA0^P3C^P4C;
  144. @    CMP@    AL,BA0^P5C^P6C;
  145. @    MOV@    AL,1;
  146. @    JZ@    @$+4;
  147. @    MOV@    AL,0;
  148. @    MOV@    BA0^P1C^P2C,AL;
  149. :$$=$$=!$$;
  150. @    MOV@    AL,BA0^P3C^P4C;
  151. @    CMP@    AL,BA0^P5C^P6C;
  152. @    MOV@    AL,1;
  153. @    JNZ@    @$+4;
  154. @    MOV@    AL,0;
  155. @    MOV@    BA0^P1C^P2C,AL;
  156. :$$=$$<=$$;
  157. @    MOV@    AL,BA0^P3C^P4C;
  158. @    CMP@    AL,BA0^P5C^P6C;
  159. @    MOV@    AL,0;
  160. @    JNBE@    @$+4;
  161. @    MOV@    AL,1;
  162. @    MOV@    BA0^P1C^P2C,AL;
  163. :ENDSUB;
  164. @    RET;
  165. :RETURN;
  166. @    RET;
  167. :STOP $;
  168. @    MOV@    AL,^P1C;
  169. @    CALL@    STOP;
  170. :LOC $$;
  171. LOC^P1C^P2C@:;
  172. :ENDMAIN;
  173. @    CALL@    ENDING;
  174. @    MOV@    CL,0;
  175. @    INT@    224;
  176.  
  177. :IF $$;
  178. @    MOV@    AL,BA0^P1C^P2C;
  179. @    TEST@    AL,AL;
  180. @    JNZ@    @$+5;
  181. @    JMP@    IF0^U0S^S0N;
  182. :ELSE;
  183. @    JMP@    IF0^U0P^P0N^!9P;
  184. IF0^P9N@:;
  185. ^P0S
  186. :ENDIF;
  187. IF0^!0N@:;
  188. :CALL $$;
  189. @    CALL@    SA0^P1C^P2C;
  190. :;
  191. :BOTTOM;
  192. @    END@    START;
  193. :READ $$ FROM $$;
  194. @    MOV@    BX, OFFSET BA0^P1C^P2C;
  195. @    MOV@    DX, OFFSET BA0^P3C^P4C;
  196. @    CALL@    BREAD;
  197. :WRITE $$ INTO $$;
  198. @    MOV@    BX, OFFSET BA0^P1C^P2C;
  199. @    MOV@    DX, OFFSET BA0^P3C^P4C;
  200. @    CALL@    BWRITE;
  201. :BEGINMAIN($$,I$$);
  202. BA0^P1C^P2C@    RB@    1;
  203. WA0^P3C^P4C@    RW@    1;
  204. IOCTRL@    DSEG@    COMMON;
  205. IAV@    DW@    0;
  206. BA0ER@    DB@    0;
  207. @    CSEG;
  208. START@:@    CALL@    INITIAL;
  209. @    MOV@    AX,IAV;
  210. @    MOV@    BA0^P1C^P2C,AL;
  211. :CLOSE $$;
  212. @    MOV@    DX, OFFSET BA0^P1C^P2C;
  213. @    CALL@    CLOSEIO;
  214. :WHILE;
  215.     ^U0STW0^S0N@:;
  216. :ON $$;
  217.     @    MOV@    AL,BA0^P1C^P2C;
  218.     @    TEST@    AL,AL;
  219.     @    JNZ@    @$+5;
  220.     @    JMP@    BW0^S0N;
  221. :ENDWHILE;
  222.     @    JMP@    TW0^S0N;
  223.     BW0^!0N@:;
  224. :CHOOSE ON $$;
  225.     @    MOV@    AL,BA0^P1C^P2C^U0S^N3S^U1S;
  226. :DEFAULT;
  227.     ^!0P^!9P^!8P
  228.     @    JMP@    XA0^P0N;
  229.     @    RB@    0-^P9N;
  230.     A0U^P8N@:;
  231.     ^P0S
  232. :ENDCHOOSE;
  233.     XA0^!0N@:;
  234. :SUB $$;
  235.     SA0^P1C^P2C@:;
  236. :CASE $$;
  237.     ^!0P^!9P^!8P
  238.     @    JMP@    XA0^P0N;
  239.     @    RB@    0-^P9N;
  240. A0U^P8N@:@    CMP@    AL,BA0^P1C^P2C;
  241.     @    JZ@    @$+5;
  242.     @    JMP@    A0U^U1S^S8N^N0S^P0S;
  243. :ASSOCIATE FCB $ WITH I$$;
  244.     @    MOV@    AL,^P1C;
  245.     @    MOV@    BX, OFFSET WA0^P2C^P3C;
  246.     @    CALL@    ATTACH;
  247. :UNPACK(I$$,$$,$$);
  248.     @    MOV@    AX,WA0^P1C^P2C;
  249.     @    MOV@    BA0^P3C^P4C,AH;
  250.     @    MOV@    BA0^P5C^P6C,AL;
  251. :PACK(I$$,$$,$$);
  252.     @    MOV@    AL,BA0^P5C^P6C;
  253.     @    MOV@    AH,BA0^P3C^P4C;
  254.     @    MOV@    WA0^P1C^P2C,AX;
  255. :$$=I$$;
  256.     @    MOV@    AL,BYTE PTR WA0^P3C^P4C;
  257.     @    MOV@    BA0^P1C^P2C,AL;
  258. :$$=$$!=$$;
  259.     @    MOV@    AL,BA0^P5C^P6C;
  260.     @    CMP@    AL,BA0^P3C^P4C;
  261.     @    MOV@    AL,1;
  262.     @    JNZ@    @$+4;
  263.     @    MOV@    AL,0;
  264.     @    MOV@    BA0^P1C^P2C,AL;
  265. :$$=I$$==I$$;
  266.     @    MOV@    AX,WA0^P5C^P6C;
  267.     @    CMP@    AX,WA0^P3C^P4C;
  268.     @    MOV@    AL,1;
  269.     @    JZ@    @$+4;
  270.     @    MOV@    AL,0;
  271.     @    MOV@    BA0^P1C^P2C,AL;
  272. :WRITE $$;
  273.     @    MOV@    AL,BA0^P1C^P2C;
  274.     @    CALL@    WNX;
  275. :READ $$;
  276.     @    CALL@    RNX;
  277.     @    MOV@    BA0^P1C^P2C,AL;
  278. :OPEN $$ FOR $$ AT I$$;
  279. @    MOV@    DX,OFFSET BA0^P1C^P2C;
  280. @    MOV@    BX,OFFSET BA0^P3C^P4C;
  281. @    MOV@    SI,OFFSET WA0^P5C^P6C;
  282.     @    CALL@    OPENIO;
  283. :$$=$$<!$$;
  284.     @    MOV@    AL,BA0^P3C^P4C;
  285.     @    CMP@    AL,BA0^P5C^P6C;
  286.     @    LAHF;
  287.     @    AND@    AH,1;
  288.     @    MOV@    BA0^P1C^P2C,AH;
  289. :$$=I$$<!I$$;
  290.     @    MOV@    AX,WA0^P3C^P4C;
  291.     @    CMP@    AX,WA0^P5C^P6C;
  292.     @    LAHF;
  293.     @    ROL@    AH,1;
  294.     @    AND@    AH,1;
  295.     @    MOV@    BA0^P1C^P2C,AH;
  296. :$$=I$$<=I$$;
  297.     @    MOV@    AX,WA0^P3C^P4C;
  298.     @    CMP@    AX,WA0^P5C^P6C;
  299.     @    MOV@    AL,1;
  300.     @    JLE@    @$+4;
  301.     @    MOV@    AL,0;
  302.     @    MOV@    BA0^P1C^P2C,AL;
  303. :$$=I$$!=I$$;
  304.     @    MOV@    AX,WA0^P5C^P6C;
  305.     @    CMP@    AX,WA0^P3C^P4C;
  306.     @    MOV@    AL,0;
  307.     @    JZ@    @$+4;
  308.     @    MOV@    AL,1;
  309.     @    MOV@    BA0^P1C^P2C,AL;
  310. :$$=!$$;
  311.     @    MOV@    AL,BA0^P3C^P4C;
  312.     @    NOT@    AL;
  313.     @    AND@    AL,1;
  314.     @    MOV@    BA0^P1C^P2C,AL;
  315. :ASSOCIATE FILE $$($$) WITH I$$ RETURN $$;
  316.     @    MOV@    BL,BA0^P3C^P4C;
  317.     @    MOV@    BH,0;
  318.     @    LEA@    DI,BA0^P1C^P2C[BX];
  319.     @    MOV@    SI,OFFSET BA0^P7C^P8C;
  320.     @    MOV@    BX,OFFSET WA0^P5C^P6C;
  321.     @    CALL@    ASSOC;
  322. :;
  323.