home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / assemblr / library / asm_kit / macro1.asm < prev    next >
Assembly Source File  |  1985-05-11  |  19KB  |  566 lines

  1. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  2. ;;                                         ;;
  3. ;;                 ASSEMBLE.MAC                     ;;
  4. ;;                                         ;;
  5. ;;          SAMPLE MACRO LIBRARY FOR THE IBM PC MACRO ASSEMBLER         ;;
  6. ;;                                         ;;
  7. ;;                  (C) COPYRIGHT 1983                 ;;
  8. ;;                      BY                     ;;
  9. ;;                   JERRY D. STUCKLE                  ;;
  10. ;;                                         ;;
  11. ;;               RELEASED TO PUBLIC DOMAIN                 ;;
  12. ;;                                         ;;
  13. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  14.  
  15.  
  16.  
  17.  
  18. CLEAR    MACRO    R1,R2,R3,R4,R5,R6,R7,R8
  19. ;;***************************************************************************;;
  20. ;;                                         ;;
  21. ;; MACRO: CLEAR                                  ;;
  22. ;;                                         ;;
  23. ;; DESCRIPTION: CLEAR REGISTERS                          ;;
  24. ;;                                         ;;
  25. ;; PARAMATERS: UP TO 8 REGISTERS TO BE CLEARED                     ;;
  26. ;;                                         ;;
  27. ;; INPUT: N/A                                     ;;
  28. ;;                                         ;;
  29. ;; OUTPUT: REQUESTED REGISTERS SET TO BINARY 0'S                             ;;
  30. ;;                                         ;;
  31. ;; REGISTERS USED: NONE                              ;;
  32. ;;                                         ;;
  33. ;;***************************************************************************;;
  34.     IRP    RX,<R1,R2,R3,R4,R5,R6,R7,R8>    ;REGISTER LIST
  35.     IFNB    <RX>                ;FOR EACH REGISTER IN LIST
  36.     XOR    RX,RX                ;CLEAR THE REGISTER
  37.     ENDIF                    ;END OF IFIDN
  38.     ENDM                    ;END OF IRP
  39.     ENDM                    ;MACRO END
  40. CLS    MACRO
  41.     LOCAL    CLS1,CLSD
  42.  
  43. ;;***************************************************************************;;
  44. ;;                                         ;;
  45. ;; MACRO: CLS                                     ;;
  46. ;;                                         ;;
  47. ;; DESCRIPTION: CLEAR THE DISPLAY SCREEN                     ;;
  48. ;;                                         ;;
  49. ;; PARAMATERS: NONE                                 ;;
  50. ;;                                         ;;
  51. ;; INPUT: NONE                                     ;;
  52. ;;                                         ;;
  53. ;; OUTPUT: NONE                                  ;;
  54. ;;                                         ;;
  55. ;; REGISTERS USED: AX,DX                             ;;
  56. ;;                                         ;;
  57. ;;***************************************************************************;;
  58.     DISPLAY CLSD                ;DISPLAY THE DOS2 STRING
  59.     JMP    SHORT CLS1            ;GO AROUND THE STRING DATA
  60. CLSD    DB    1BH,'[2J$'                      ;DATA FOR DOS CALL
  61. CLS1    LABEL    NEAR
  62.     ENDM
  63. COLOR    MACRO    FOREGROUND,BACKGROUND
  64.     LOCAL    COLD,COL1
  65. ;;***************************************************************************;;
  66. ;;                                         ;;
  67. ;; MACRO: COLOR                                  ;;
  68. ;;                                         ;;
  69. ;; DESCRIPTION: SETS DISPLAY COLOR                         ;;
  70. ;;                                         ;;
  71. ;; PARAMATERS: FOREGROUND COLOR, BACKGROUND COLOR                 ;;
  72. ;;                                         ;;
  73. ;; INPUT: NONE                                     ;;
  74. ;;                                         ;;
  75. ;; OUTPUT: NONE                                  ;;
  76. ;;                                         ;;
  77. ;; REGISTERS USED: AX,DX                             ;;
  78. ;;                                         ;;
  79. ;;***************************************************************************;;
  80.     DISPLAY COLD                ;DISPLAY THE COLOR STRING
  81.     JMP    SHORT COL1            ;GO AROUND THE STRING
  82. COLD    DB    1BH,'['                         ;START OF STRING
  83.     IFIDN    <FOREGROUND>,<NORMAL>        ;IF NORMAL REQUEST
  84.     DB    '0'                             ;NORMAL FOREGROUND
  85.     ELSE
  86.     IFIDN    <FOREGROUND>,<BOLD>        ;IF BOLD REQUEST
  87.     DB    '1'                            ;BOLD FOREGROUND
  88.     ELSE
  89.     IFIDN    <FOREGROUND>,<UNDERSCORE>    ;IF UNDERSCORED
  90.     DB    '4'                             ;UNDERSCORE FOREGROUND
  91.     ELSE
  92.     IFIDN    <FOREGROUND>,<BLINK>        ;IF BLINK REQUEST
  93.     DB    '5'                             ;BLINK FOREGROUND
  94.     ELSE
  95.     IFIDN    <FOREGROUND>,<REVERSE>        ;IF REVERSE REQUEST
  96.     DB    '7'                             ;REVERSE VIDEO
  97.     ELSE
  98.     IFIDN    <FOREGROUND>,<INVISIBLE>    ;IF INVISABLE REQUEST
  99.     DB    '8'                             ;INVISABLE (NO-SHOW)
  100.     ELSE
  101.     IFIDN    <FOREGROUND>,<BLACK>        ;IF BLACK REQUEST
  102.     DB    '30'                            ;BLACK FOREGROUND
  103.     ELSE
  104.     IFIDN    <FOREGROUND>,<RED>        ;IF RED REQUEST
  105.     DB    '31'                            ;RED FOREGROUND
  106.     ELSE
  107.     IFIDN    <FOREGROUND>,<GREEN>        ;IF GREEN REQUEST
  108.     DB    '32'                            ;GREEN FOREGROUND
  109.     ELSE
  110.     IFIDN    <FOREGROUND>,<YELLOW>        ;IF YELLOW REQUEST
  111.     DB    '33'                            ;YELLOW FOREGROUND
  112.     ELSE
  113.     IFIDN    <FOREGROUND>,<BLUE>        ;IF BLUE REQUEST
  114.     DB    '34'                            ;BLUE FOREGROUND
  115.     ELSE
  116.     IFIDN    <FOREGROUND>,<MAGENTA>        ;IF MAGENTA REQUEST
  117.     DB    '35'                            ;MAGENTA FOREGROUND
  118.     ELSE
  119.     IFIDN    <FOREGROUND>,<CYAN>        ;IF CYAN REQUEST
  120.     DB    '36'                            ;CYAN FOREGROUND
  121.     ELSE
  122.     IFIDN    <FOREGROUND>,<WHITE>        ;IF WHITE REQUEST
  123.     DB    '37'                            ;WHITE FOREGROUND
  124.     ENDIF
  125.     ENDIF
  126.     ENDIF
  127.     ENDIF
  128.     ENDIF
  129.     ENDIF
  130.     ENDIF
  131.     ENDIF
  132.     ENDIF
  133.     ENDIF
  134.     ENDIF
  135.     ENDIF
  136.     ENDIF
  137.     ENDIF
  138.     IFNB    <FOREGROUND>            ;IF WE HAVE FOREGROUND...
  139.     IFNB    <BACKGROUND>            ;AND BACKGROUND COLORS
  140.     DB    ';'                             ;PUT IN A SEPERATOR
  141.     ENDIF
  142.     ENDIF
  143.     IFIDN    <BACKGROUND>,<BLACK>        ;IF BLACK REQUEST
  144.     DB    '40'                            ;BLACK BACKGROUND
  145.     ELSE
  146.     IFIDN    <BACKGROUND>,<RED>        ;IF RED REQUEST
  147.     DB    '41'                            ;RED BACKGROUND
  148.     ELSE
  149.     IFIDN    <BACKGROUND>,<GREEN>        ;IF GREEN REQUEST
  150.     DB    '42'                            ;GREEN BACKGROUND
  151.     ELSE
  152.     IFIDN    <BACKGROUND>,<YELLOW>        ;IF YELLOW REQUEST
  153.     DB    '43'                            ;YELLOW BACKGROUND
  154.     ELSE
  155.     IFIDN    <BACKGROUND>,<BLUE>        ;IF BLUE REQUEST
  156.     DB    '44'                            ;BLUE BACKGROUND
  157.     ELSE
  158.     IFIDN    <BACKGROUND>,<MAGENTA>        ;IF MAGENTA REQUEST
  159.     DB    '45'                            ;MAGENTA BACKGROUND
  160.     ELSE
  161.     IFIDN    <BACKGROUND>,<CYAN>        ;IF CYAN REQUEST
  162.     DB    '46'                            ;CYAN BACKGROUND
  163.     ELSE
  164.     IFIDN    <BACKGROUND>,<WHITE>        ;IF WHITE REQUEST
  165.     DB    '47'                            ;WHITE BACKGROUND
  166.     ENDIF
  167.     ENDIF
  168.     ENDIF
  169.     ENDIF
  170.     ENDIF
  171.     ENDIF
  172.     ENDIF
  173.     ENDIF
  174. COL1    LABEL    NEAR                ;SKIP AROUND DATA
  175.     ENDM
  176. CURSOR    MACRO    FUNCTION,AREA
  177. ;;***************************************************************************;;
  178. ;;                                         ;;
  179. ;; MACRO: CURSOR                                 ;;
  180. ;;                                         ;;
  181. ;; DESCRIPTION: SAVE OR SET CURRENT CURSOR TYPE, BLANK CURSOR ON SCREEN      ;;
  182. ;;                                         ;;
  183. ;; PARAMATERS: FUNCTION (SAVE,SET OR ERASE), DATA OR DATA ADDRESS         ;;
  184. ;;                                         ;;
  185. ;; INPUT: CURSOR START AND END LINES (SET ONLY)                  ;;
  186. ;;                                         ;;
  187. ;; OUTPUT: CURSOR START AND END LINES (SAVE ONLY)                 ;;
  188. ;;                                         ;;
  189. ;; REGISTERS USED: AX,CX  (DS USED AND RESTORED)                 ;;
  190. ;;                                         ;;
  191. ;;***************************************************************************;;
  192.     IFIDN    <FUNCTION>,<ERASE>        ;IF CURSOR ERASE REQUESTED
  193.     MOV    AH,1                ;SET CURSOR MODE
  194.     MOV    CX,0F0FH            ;START AND END ON LINE 15
  195.     INT    10H                ;GO DO A VIDEO INTERRUPT
  196.     ELSE
  197.     IFIDN    <FUNCTION>,<SAVE>        ;IF CURSOR SAVE REQUEST
  198.     PUSH    DS                ;SAVE DS
  199.     MOV    AX,40H                ;GET SEGMENT 40H IN AX
  200.     MOV    DS,AX                ;AND PUT IT IN DS
  201.     MOV    CX,DS:60H            ;GET CURRENT CURSOR MODE
  202.     POP    DS                ;RESTORE DS
  203.     MOV    AREA,CX             ;AND MOVE CURSOR MODE TO AREA
  204.     ELSE
  205.     IFIDN    <FUNCTION>,<SET>        ;IF CURSOR SET REQUEST
  206.     MOV    CX,AREA             ;GET CURSOR MODE IN CX
  207.     MOV    AH,1                ;SET CURSOR MODE
  208.     INT    10H                ;GO DO VIDEO INTERRUPT
  209.     ENDIF
  210.     ENDIF
  211.     ENDIF
  212.     ENDM
  213. CVD    MACRO    DEST,ORG
  214.     LOCAL    CVBP,CVDE
  215. ;;***************************************************************************;;
  216. ;;                                         ;;
  217. ;; MACRO: CVD                                     ;;
  218. ;;                                         ;;
  219. ;; DESCRIPTION: CONVERT BINARY NUMBER TO  ASCII DECIMAL NUMBER             ;;
  220. ;;                                         ;;
  221. ;; PARAMATERS: OUTPUT LABEL, INPUT LABEL                     ;;
  222. ;;                                         ;;
  223. ;; INPUT: WORD BINARY NUMBER                             ;;
  224. ;;                                         ;;
  225. ;; OUTPUT: 4 BYTE DECIMAL NUMBER                         ;;
  226. ;;                                         ;;
  227. ;; REGISTERS USED: AX,BX,DX,DI                             ;;
  228. ;;                                         ;;
  229. ;;***************************************************************************;;
  230.     IFDIF    <ORG>,<AX>            ;IF BINARY VALUE NOT IN AX
  231.     MOV    AX,WORD PTR ORG         ;MOVE ORIGIN TO AX
  232.     ENDIF
  233.     LEA    DI,DEST             ;GET ADDRESS OF DESTINATION
  234.     MOV    BL,100D             ;DIVISOR TO BL
  235.     DIV    BL                ;DIVIDE BY 100
  236.     MOV    BH,AH                ;SAVE REMAINDER IN BH
  237.     CALL    CVDP                ;CONVERT HIGHORDER  TO DECIMAL
  238.     MOV    AL,BH                ;GET REMAINDER
  239.     CALL    CVDP                ;CONVERT LOW ORDER TO DECIMAL
  240.     JMP    SHORT CVDE            ;JUMP AROUND PROC
  241. CVDP    PROC    NEAR
  242.     AAM                    ;CONVERT TO PACKED DECIMAL
  243.     OR    AX,3030H            ;CONVERT TO ASCII
  244.     MOV    [DI],AH             ;STORE HIGH ORDER BYTE
  245.     INC    DI                ;POINT TO NEXT BYTE
  246.     MOV    [DI],AL             ;STORE LOW ORDER BYTE
  247.     INC    DI                ;POINT TO NEXT BYTE
  248.     RET                    ;RETURN TO CALLER
  249. CVDP    ENDP
  250. CVDE    LABEL    NEAR
  251.     ENDM
  252. DISPLAY MACRO    STRING
  253. ;;***************************************************************************;;
  254. ;;                                         ;;
  255. ;; MACRO: DISPLAY                                 ;;
  256. ;;                                         ;;
  257. ;; DESCRIPTION: PRINT AN ASCII STRING ON THE SCREEN                 ;;
  258. ;;                                         ;;
  259. ;; PARAMATERS: LABEL OF STRING TO BE PRINTED                     ;;
  260. ;;                                         ;;
  261. ;; INPUT: ASCII STRING, ENDING WITH A $                      ;;
  262. ;;                                         ;;
  263. ;; OUTPUT: NONE                                  ;;
  264. ;;                                         ;;
  265. ;; REGISTERS USED: AX,DX                             ;;
  266. ;;                                         ;;
  267. ;;***************************************************************************;;
  268.     LEA    DX,STRING            ;ADDRESS OF STRING TO DISPLAY
  269.     DOSCALL 9                ;DOS PRINT STRING FUNCTION
  270.     ENDM
  271. DOSCALL MACRO    FUNCTION
  272. ;;***************************************************************************;;
  273. ;;                                         ;;
  274. ;; MACRO: DOSCALL                                 ;;
  275. ;;                                         ;;
  276. ;; DESCRIPTION:  SET UP AND EXECUTE REQUESTED DOS FUNCTION CALL          ;;
  277. ;;                                         ;;
  278. ;; PARAMATERS: FUNCTION TO BE CALLED                         ;;
  279. ;;                                         ;;
  280. ;; INPUT: NONE                                     ;;
  281. ;;                                         ;;
  282. ;; OUTPUT: NONE                                  ;;
  283. ;;                                         ;;
  284. ;; REGISTERS USED: AX                                 ;;
  285. ;;                                         ;;
  286. ;;***************************************************************************;;
  287.     MOV    AH,FUNCTION            ;GET FUNCTION IN AH
  288.     INT    21H                ;DOS CALL
  289.     ENDM
  290. GETDATE MACRO    DEST,TYPE
  291.     LOCAL    GDTE,GTDP
  292. ;;***************************************************************************;;
  293. ;;                                         ;;
  294. ;; MACRO: GETDATE                                 ;;
  295. ;;                                         ;;
  296. ;; DESCRIPTION: GETS CURRENT DATE INTO DESTINATION                 ;;
  297. ;;                                         ;;
  298. ;; PARAMATERS: DESTINATION, TYPE OF DATE (CHAR OR BIN)                 ;;
  299. ;;                                         ;;
  300. ;; INPUT: NONE                                     ;;
  301. ;;                                         ;;
  302. ;; OUTPUT: MM/DD/YY (CHAR) OR MDYY (BIN)                     ;;
  303. ;;                                         ;;
  304. ;; REGISTERS USED: AX,BX,CX,DX,DI                         ;;
  305. ;;                                         ;;
  306. ;;***************************************************************************;;
  307.     IFIDN    <TYPE>,<CHAR>            ;IF CHARACTER REQUEST
  308.     DOSCALL 2AH                ;GET DATE FUNCTION CALL
  309.     LEA    DI,DEST             ;GET ADDRESS OF DESTINATION
  310.     MOV    AL,DH                ;GET MONTH IN AL
  311.     CALL    GDTP                ;CONVERT BYTE TO ASCII
  312.     MOV    WORD PTR [DI],'/'               ;MOVE IN /
  313.     INC    DI                ;POINT TO NEXT BYTE
  314.     MOV    AL,DL                ;GET DAY IN AL
  315.     CALL    GDTP                ;CONVERT BYTE TO ASCII
  316.     MOV    WORD PTR [DI],'/'               ;MOVE IN /
  317.     INC    DI                ;POINT TO NEXT BYTE
  318.     MOV    AX,CX                ;GET YEAR IN AL
  319.     MOV    BL,100D             ;MOVE IN DIVISOR
  320.     DIV    BL                ;DIVIDE BY 100
  321.     MOV    AL,AH                ;REMAINDER TO AL
  322.     CALL    GDTP                ;CONVERT BYTE TO ASCII
  323.     JMP    SHORT GDTE            ;JUMP AROUND PROC
  324. GDTP    PROC    NEAR
  325.     AAM                    ;CONVERT TO PACKED DECIMAL
  326.     ADD    AX,3030H            ;CONVERT TO ASCII
  327.     MOV    BYTE PTR [DI],AH        ;STORE HIGH ORDER BYTE
  328.     INC    DI                ;POINT TO NEXT BYTE
  329.     MOV    BYTE PTR [DI],AL        ;STORE LOW ORDER BYTE
  330.     INC    DI                ;POINT TO NEXT BYTE
  331.     RET                    ;RETURN TO CALLER
  332. GDTP    ENDP
  333. GDTE    LABEL    NEAR
  334.     ELSE
  335.     IFIDN    <TYPE>,<BIN>            ;IF BINARY REQUEST
  336.     DOSCALL 2AH                ;GET CURRENT DATE
  337.     MOV    BYTE PTR DEST,DH        ;MOVE MONTH TO DESTINATION
  338.     MOV    BYTE PTR [DEST+1],DL        ;MOVE DAT TO DESTINATION
  339.     MOV    WORD PTR [DEST+2],CX        ;MOVE YEAR TO DESTINATION
  340.     ENDIF
  341.     ENDIF
  342.     ENDM
  343. GETTIME MACRO    DEST,TYPE
  344.     LOCAL    GTMP,GTME
  345. ;;***************************************************************************;;
  346. ;;                                         ;;
  347. ;; MACRO: GETTIME                                 ;;
  348. ;;                                         ;;
  349. ;; DESCRIPTION: GET CURRENT TIME INTO DESTINATION                 ;;
  350. ;;                                         ;;
  351. ;; PARAMATERS: DESTINATION, TYPE (CHAR OR BIN)                     ;;
  352. ;;                                         ;;
  353. ;; INPUT: NONE                                     ;;
  354. ;;                                         ;;
  355. ;; OUTPUT: HH:MM:SS:HH (CHAR) OR HMSH (BIN)                     ;;
  356. ;;                                         ;;
  357. ;; REGISTERS USED: AX,BX,CX,DX,DI                         ;;
  358. ;;                                         ;;
  359. ;;***************************************************************************;;
  360.     IFIDN    <TYPE>,<CHAR>            ;IF CHARACTER REQUEST
  361.     DOSCALL 2CH                ;GET CURRENT TIME
  362.     LEA    DI,DEST             ;GET DESTINATION ADDRESS
  363.     MOV    AL,CH                ;MOVE HOURS TO AL
  364.     CALL    GTMP                ;AND CONVERT TO ASCII
  365.     MOV    WORD PTR [DI],':'               ;PUT IN :
  366.     INC    DI                ;POINT TO NEXT BYTE
  367.     MOV    AL,CL                ;MOVE MINUTES TO AL
  368.     CALL    GTMP                ;AND CONVERT TO ASCII
  369.     MOV    WORD PTR [DI],':'               ;PUT IN :
  370.     INC    DI                ;POINT TO NEXT BYTE
  371.     MOV    AL,DH                ;MOVE SECONDS TO AL
  372.     CALL    GTMP                ;AND CONVERT TO ASCII
  373.     MOV    WORD PTR [DI],':'               ;PUT IN :
  374.     INC    DI                ;POINT TO NEXT BYTE
  375.     MOV    AL,DL                ;MOVE HUNDRETHS TO AL
  376.     CALL    GTMP                ;AND CONVERT TO ASCII
  377.     JMP    SHORT GTME            ;JUMP AROUND PROC
  378. GTMP    PROC    NEAR
  379.     AAM                    ;CONVERT TO PACKED DECIMAL
  380.     ADD    AX,3030H            ;CONVERT TO ASCII
  381.     MOV    BYTE PTR [DI],AH        ;STORE HIGH ORDER BYTE
  382.     INC    DI                ;POINT TO NEXT BYTE
  383.     MOV    BYTE PTR [DI],AL        ;STORE LOW ORDER BYTE
  384.     INC    DI                ;POINT TO NEXT BYTE
  385.     RET                    ;RETURN TO CALLER
  386. GTMP    ENDP
  387. GTME    LABEL    NEAR
  388.     ELSE
  389.     IFIDN    <TYPE>,<BIN>            ;IF REQUEST FOR BINARY TIME
  390.     DOSCALL 2CH                ;GET CURRENT TIME
  391.     MOV    BYTE PTR DEST,CH        ;MOVE HOURS TO DESTINATION
  392.     MOV    BYTE PTR DEST+1,CL        ;MOVE MINUTES TO DESTINATION
  393.     MOV    BYTE PTR DEST+2,DH        ;MOVE SECONDS TO DESTINATION
  394.     MOV    BYTE PTR DEST+3,DL        ;MOVE HUNDRETHS TO DESTINATION
  395.     ENDIF
  396.     ENDIF
  397.     ENDM
  398. LOCATE    MACRO    ROW,COLUMN
  399.     LOCAL    LOC1,LOCD
  400. ;;***************************************************************************;;
  401. ;;                                         ;;
  402. ;; MACRO: LOCATE                                 ;;
  403. ;;                                         ;;
  404. ;; DESCRIPTION: POSITION CURSOR ON SCREEN                     ;;
  405. ;;                                         ;;
  406. ;; PARAMATERS: ROW, COLUMN                             ;;
  407. ;;                                         ;;
  408. ;; INPUT: BINARY ROW AND COLUMN LOCATION, IF NOT IN MACRO CALL             ;;
  409. ;;                                         ;;
  410. ;; OUTPUT: NONE                                  ;;
  411. ;;                                         ;;
  412. ;; REGISTERS USED: AX,DX                             ;;
  413. ;;                                         ;;
  414. ;;***************************************************************************;;
  415.     MOV    AL,ROW                ;GET BINARY ROW
  416.     AAM                    ;CONVERT TO PACKED DECIMAL
  417.     ADD    AX,3030H            ;CONVERT TO ASCII
  418.     MOV    BYTE PTR [LOCD+2],AH        ;HIGH ORDER ROW TO STRING
  419.     MOV    BYTE PTR [LOCD+3],AL        ;LOW ORDER ROW TO STRING
  420.     CLEAR    AH                ;CLEAR AH AGAIN
  421.     MOV    AL,COLUMN            ;GET COLUMN IN AL
  422.     AAM                    ;CONVERT TO PACKED DECIMAL
  423.     ADD    AX,3030H            ;CONVERT TO ASCII
  424.     MOV    BYTE PTR [LOCD+5],AH        ;HIGH ORDER COLUMN TO STRING
  425.     MOV    BYTE PTR [LOCD+6],AL        ;LOW ORDER COLUMN TI STRING
  426.     DISPLAY LOCD                ;POSITION THE CURSOR
  427.     JMP    SHORT LOC1            ;JUMP AROUND STRING
  428. LOCD    DB    1BH,'[  ;  H$'                  ;POSITION CURSOR STRING
  429. LOC1    LABEL    NEAR
  430.     ENDM
  431. MOVE    MACRO    TO,FROM,LNGTH
  432.     LOCAL    MOVELP
  433. ;;***************************************************************************;;
  434. ;;                                         ;;
  435. ;; MACRO: MOVE                                     ;;
  436. ;;                                         ;;
  437. ;; DESCRIPTION: MULTIPLE BYTE MOVE                         ;;
  438. ;;                                         ;;
  439. ;; PARAMATERS: TO LOCATION, FROM LOCATION, LENGTH (OPT.)             ;;
  440. ;;                                         ;;
  441. ;; INPUT: SOURCE STRING                              ;;
  442. ;;                                         ;;
  443. ;; OUTPUT: DESTINATION STRING                             ;;
  444. ;;                                         ;;
  445. ;; REGISTERS USED: CX,SI,DI (ES ASSUMED POINTING TO DESTINATION SEGMENT)     ;;
  446. ;;                                         ;;
  447. ;;***************************************************************************;;
  448.     CLEAR    CH                ;CLEAR LENGTH REG
  449.     IFB    <LENGTH>            ;IF NO LENGTH REQUESTED
  450.     MOV    CX,LENGTH TO            ;USE LENGTH OF TO STRING
  451.     ELSE                    ;IF LENGTH REQUESTED
  452.     MOV    CX,LNGTH            ;USE LENGTH IN MACRO
  453.     ENDIF
  454.     IFDIF    <TO>,<DI>            ;IF DI NOT SPECIFIED FOR TO
  455.     LEA    DI,TO                ;LOAD TO ADDRESS INTO DI
  456.     ENDIF
  457.     IFDIF    <FROM>,<SI>            ;IF SI NOT SPECIFIED FOR FROM
  458.     LEA    SI,FROM             ;LOAD FROM ADDRESS INTO SI
  459.     ENDIF
  460.     CLD                    ;CLEAR DIRECTION FLAG
  461.     REP    MOVSB                ;MOVE THE DATA
  462.     ENDM
  463. RESTORE MACRO    R1,R2,R3,R4,R5,R6,R7,R8,R9,R10
  464. ;;***************************************************************************;;
  465. ;;                                         ;;
  466. ;; MACRO: RESTORE                                 ;;
  467. ;;                                         ;;
  468. ;; DESCRIPTION: RESTORE REGISTERS FROM STACK                     ;;
  469. ;;                                         ;;
  470. ;; PARAMATERS: REGISTERS TO BE RESTORED (IN REVERSE ORDER)             ;;
  471. ;;                                         ;;
  472. ;; INPUT: NONE                                     ;;
  473. ;;                                         ;;
  474. ;; OUTPUT: RESTORED REGISTERS                             ;;
  475. ;;                                         ;;
  476. ;; REGISTERS USED: NONE                              ;;
  477. ;;                                         ;;
  478. ;;***************************************************************************;;
  479.     IRP    RX,<R10,R9,R8,R7,R6,R5,R4,R3,R2,R1> ;REPEAT FOR EACH PARM
  480.     IFNB    <RX>                ;IF THIS PARM NOT BLANK
  481.     POP    RX                ;POP THE REGISTER
  482.     ENDIF                    ;END IFNB
  483.     ENDM                    ;END IRP
  484.     ENDM
  485. SAVE    MACRO    R1,R2,R3,R4,R5,R6,R7,R8,R9,R10
  486. ;;***************************************************************************;;
  487. ;;                                         ;;
  488. ;; MACRO: SAVE                                     ;;
  489. ;;                                         ;;
  490. ;; DESCRIPTION: SAVE REGISTERS ON THE STACK                     ;;
  491. ;;                                         ;;
  492. ;; PARAMATERS: REGISTERS TO BE SAVED                         ;;
  493. ;;                                         ;;
  494. ;; INPUT: NONE                                     ;;
  495. ;;                                         ;;
  496. ;; OUTPUT: REGISTERS SAVED ON STACK                         ;;
  497. ;;                                         ;;
  498. ;; REGISTERS USED: NONE                              ;;
  499. ;;                                         ;;
  500. ;;***************************************************************************;;
  501.     IRP    RX,<R1,R2,R3,R4,R5,R6,R7,R8,R9,R10> ;REPEAT FOR EACH PARM
  502.     IFNB    <RX>                ;IF THIS PARM NOT BLANK
  503.     PUSH    RX                ;SAVE THE REGISTER
  504.     ENDIF                    ;END IFNB
  505.     ENDM                    ;END IRP
  506.     ENDM
  507. SETINT    MACRO    INTERRUPT,ROUTINE
  508. ;;***************************************************************************;;
  509. ;;                                         ;;
  510. ;; MACRO: SETINT                                 ;;
  511. ;;                                         ;;
  512. ;; DESCRIPTION: SET INTERRUPT VECTOR                         ;;
  513. ;;                                         ;;
  514. ;; PARAMATERS: INTERRUPT VECTOR, INTERRUPT ROUTINE ADDRESS             ;;
  515. ;;                                         ;;
  516. ;; INPUT: NONE                                     ;;
  517. ;;                                         ;;
  518. ;; OUTPUT: NONE                                  ;;
  519. ;;                                         ;;
  520. ;; REGISTERS USED: AX,DX                             ;;
  521. ;;                                         ;;
  522. ;;***************************************************************************;;
  523.     MOV    AL,INTERRUPT            ;GET INTERRUPT TO BE SET
  524.     LEA    DX,ROUTINE            ;GET ADDRESS OF ROUTINE
  525.     DOSCALL 25H                ;CALL DOS
  526.     ENDM
  527. SETTIME MACRO    HOURS,MINUTES,SECONDS,HUNDRETHS
  528. ;;***************************************************************************;;
  529. ;;                                         ;;
  530. ;; MACRO: SETTIME                                 ;;
  531. ;;                                         ;;
  532. ;; DESCRIPTION: SET CURRENT TIME                         ;;
  533. ;;                                         ;;
  534. ;; PARAMATERS: HOURS, MINUTES, SECONDS,HUNDRETHS                 ;;
  535. ;;                                         ;;
  536. ;; INPUT: TIME TO BE SET                             ;;
  537. ;;                                         ;;
  538. ;; OUTPUT: NONE                                  ;;
  539. ;;                                         ;;
  540. ;; REGISTERS USED: AX,CX,DX                             ;;
  541. ;;                                         ;;
  542. ;;***************************************************************************;;
  543.     IFNB    <HOURS>             ;IF HOURS SPECIFIED
  544.     MOV    CH,HOURS            ;MOVE HOURS TO CH
  545.     ELSE                    ;IF HOURS NOT SPECIFIED
  546.     CLEAR    CH                ;CLEAR CH
  547.     ENDIF
  548.     IFNB    <MINUTES>            ;IF MINUTES SPECIFIED
  549.     MOV    CL,MINUTES            ;MOVE MINUTES TO CL
  550.     ELSE                    ;IF MINUTES NOT SPECIFIED
  551.     CLEAR    CL                ;CLEAR CL
  552.     ENDIF
  553.     IFNB    <SECONDS>            ;IF SECONDS SPECIFIED
  554.     MOV    DH,SECONDS            ;MOVE SECONDS TO DH
  555.     ELSE                    ;IF SECONDS NOT SPECIFIED
  556.     CLEAR    DH                ;CLEAR DH
  557.     ENDIF
  558.     IFNB    <HUNDRETHS>            ;IF HUNDRETHS SPECIFIED
  559.     MOV    DL,HUNDRETHS            ;MOVE HUNDRETHS TO DL
  560.     ELSE                    ;IF HNDRETHS NOT SPECIFIED
  561.     CLEAR    DL                ;CLEAR DL
  562.     ENDIF
  563.     DOSCALL 2DH                ;CALL DOS TO SET TIME
  564.     ENDM
  565.  
  566.