home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / simtel / sigm / vols000 / vol025 / clib.mac < prev    next >
Text File  |  1984-04-29  |  9KB  |  445 lines

  1. ;
  2. ;
  3. ;  CLIB - A COLLECTION OF MACROS & DEFINITIONS USED IN ICRT AND OTHER THINGS.
  4. ;
  5. ; ________________________________________________________________
  6. ; DONALD E. KILLEN   VERSION 2.02       JAN 21, 1981             |
  7. ;                    -- FOR THE Z80 ONLY -- PREF. MACRO-80       |
  8. ; ________________________________________________________________
  9. ;
  10.     .Z80
  11. ;
  12. TRUE    EQU    0FFFFH    ; DEFINE VALUE OF .TRUE. FOR THOSE WHO NEED IT.
  13. FALSE    EQU    NOT TRUE
  14. ;
  15. MSIZE    EQU    55    ; DECIMAL KBYTES ... REQUIRED FOR SGEN.
  16. ;
  17. ;
  18.  
  19.  
  20. ;
  21. ; ASCII VALUES DEFINED:
  22. ;
  23. BS    EQU    08H    ; BACKSPACE
  24. LF    EQU    0AH    ; LINE FEED
  25. CR    EQU    0DH    ; CARRIAGE RETURN
  26. ;
  27. DEL    EQU    7FH    ; => DELETE CHAR. (KEY R1)
  28. ENQ    EQU    05H    ; => PHYSICAL END LINE
  29. NAK    EQU    15H    ; => DELETE LINE
  30. ETX    EQU    03H    ; => CODE + C => WARM BOOT
  31. SUB    EQU    1AH    ; => CODE + Z => END INPUT ED & PIP
  32. DLE    EQU    10H    ; => CODE + P => TOGGLE COPY TO PRINTER
  33. DC3    EQU    13H    ; => CODE + S => START/STOP CONSOLE OUTPUT
  34. TAB    EQU    09H    ; = (HORIZ) TAB KEY.
  35. CODEZ    EQU    1AH    ; => CODE + Z    SEE ABOVE
  36. CODES    EQU    13H    ; => CODE + S    SEE ABOVE
  37. ACCENT    EQU    60H    ; =>  `  => ACCENT MARK
  38. TILDE    EQU    7EH    ; =>  ~  => TILDE
  39. UPAROW    EQU    5EH    ; =>  ^  => UP ARROW
  40. LBRAK    EQU    5BH    ; =>  [  => LEFT BRACKET
  41. RBRAK    EQU    5DH    ; =>  ]  => RIGHT BRACKET
  42. BSLASH    EQU    5CH    ; =>  \  => BACK SLASH
  43. LOGOR    EQU    7CH    ; =>  |  => LOGICAL INCLUSIVE OR
  44. LBRACE    EQU    7BH    ; =>  {  => LEFT BRACE (CODE + LN PAREN.)
  45. RBRACE    EQU    7DH    ; =>  }  => RIGHT BRACE (CODE + R. PAREN.)
  46. CODEX    EQU    18H    ; => CODE + X => DELETE LINE
  47. CODEP    EQU    10H    ; => CODE + P => TOGGLE COPY TO PRINTER
  48. NULL    EQU    00H    ; NULL - SHOULD NEVER BE ENCOUNTERED.
  49. ;
  50. ;
  51. ;  ICRT DEFINITIONS & SUCHLIKE
  52. ;
  53. VT    EQU    0BH    ; VERTICAL TAB
  54. HT    EQU    09H    ; HORIZONTAL TAB
  55. ESC    EQU    1BH    ; ESCAPE CODE
  56. ICH    EQU    40H    ; INSERT CHARACTER
  57. CUU    EQU    41H    ; CURSOR UP
  58. CUD    EQU    42H    ; CURSOR DOWN
  59. CUF    EQU    43H    ; CURSOR FORWARD
  60. CUB    EQU    44H    ; CURSOR BACKWARDS
  61. CNL    EQU    45H    ; CURSOR NEXT LINE
  62. CPL    EQU    46H    ; CURSOR PRECEDING LINE
  63. CHA    EQU    47H    ; CURSOR HORIZONTAL ABSOLUTE
  64. CUP    EQU    48H    ; CURSOR POSITION
  65. CHT    EQU    49H    ; CURSOR HORIZONTAL TAB
  66. ED    EQU    4AH    ; ERASE IN DISPLAY
  67. EL    EQU    4BH    ; ERASE IN LINE
  68. IL    EQU    4CH    ; INSERT LINE
  69. DL    EQU    4DH    ; DELETE LINE
  70. DCH    EQU    50H    ; DELETE CHARACTER
  71. SU    EQU    53H    ; SCROLL UP
  72. SD    EQU    54H    ; SCROLL DOWN
  73. CTC    EQU    57H    ; CURSOR TAB CONTROL
  74. CVT    EQU    59H    ; CURSOR VERTICAL TAB
  75. CBT    EQU    5AH    ; CURSOR BACKWARDS TAB
  76. CVA    EQU    5BH    ; CURSOR VERTICAL ABSOLUTE
  77. SGR    EQU    6DH    ; SELECT GRAPHIC RENDITION
  78. ;
  79. ;
  80. ; VB3 ATTRIBUTE DEFINITIONS:
  81. ;
  82. NORMAL    EQU    3    ; NORMAL ATTRIBUTE
  83. REVERSE    EQU    4    ; BLACK ON WHITE
  84. BLANK    EQU    8    ; NOTHING..
  85. UNDERLINE  EQU    16    ; ___ EVERYTHING
  86. BLINK    EQU    32    ; BLINK THE CHAR.
  87. STRIKE$THRU EQU 64    ; / THROUGH THE CHAR.
  88. REDUCE    EQU    128    ; GREY ZONE.
  89. ;
  90. ;*** 80X33.LIB -- 80 COLUMNS BY 33 ROWS, TV STANDARDS
  91. ;
  92. ;*** HARDWARE CONFIGURATION
  93. ;
  94. ;    16 MHZ DOT CLOCK
  95. ;     9 DOTS PER CHARACTER
  96. ;    80 CHARACTER PROMS (STANDARD OR WHATEVER -- )
  97. ;
  98. ;*** DEFINE THE EQUATES NEEDED FOR THE VB3 BOARD:
  99. ;
  100. VIDEOX    EQU    0E000H    ;RELATIVE ADDRESS OF THE VIDEO MEMORY
  101. OFFSET    EQU    01000H    ;RELATIVE OFFSET TO THE ATTRIBUTE
  102. VTAC    EQU    0D0H    ;I/O ADDRESS OF THE (VTAC) VIDEO CONTROLLER
  103. KSTAT    EQU    0E0H    ;KEYBOARD STATUS / VB3 BOARD DISABLE PORT
  104. KDATA    EQU    0E1H    ;KEYBOARD DATA  / VB3 BOARD ENABLE  PORT
  105. ;
  106. NCOLS    EQU    80    ;DEFINE SCREEN WIDTH
  107. CODE    EQU    5    ; THE 'CODE' FOR 80 COLUMNS...
  108. NROWS    EQU    33    ;DEFINE SCREEN HEIGTH (NO. LINES)
  109. SKEW    EQU    0    ;NO SKEW BELEIVED REQUIRED --
  110. SCANF    EQU    525    ;SCANS PER FRAME (RASTER)
  111. SCANR    EQU    15    ;SCANS PER DATA ROW (LINE)
  112. HCOUNT    EQU    113    ;CHARACTER TIMES IN ONE HORIZ. SCAN LINE --
  113. CRT5027    EQU    FALSE
  114. CRT5037    EQU    TRUE    ;THIS IS THE TYPE OF VTAC USED --
  115. INTERLACED    EQU    TRUE    ;WE ARE INTERLACING -----
  116. ;
  117. ;
  118. PUSHALL    MACRO    ;PUSH EVERYTHING IN THE PLACE ONTO THE STACK.
  119.     PUSH    AF
  120.     PUSH    HL
  121.     PUSH    DE
  122.     PUSH    BC
  123.     ENDM
  124. ;
  125. POPALL    MACRO        ;LIKEWISE, POP EVERYTHING FROM THE STACK.
  126.     POP    BC
  127.     POP    DE
  128.     POP    HL
  129.     POP    AF
  130.     ENDM
  131. ;
  132. ; SWIN   OLD,NEW
  133. ;
  134. ;     SWAP OUT WORLD, STORE STACK POINTER AT PLACCE 'OLD',
  135. ;                     GET NEW ONE FROM 'NEW', STORE REGISTERS:
  136. ;
  137. SWIN    MACRO    OLD,NEW
  138.     LD    (OLD),SP    ; SAVE CALLER'S POINTER
  139.     LD    SP,(NEW)    ; GET NEW POINTER
  140.     PUSH    AF
  141.     PUSH    HL
  142.     PUSH    DE
  143.     PUSH    BC
  144.     ENDM
  145. ;
  146. ; SWOT   OLD,NEW
  147. ;
  148. ;       SWAP WORLD BACK - REVERSE OF SWIN.
  149. ;
  150. SWOT    MACRO    OLD2,NEW2
  151.     POP    BC
  152.     POP    DE
  153.     POP    HL
  154.     POP    AF
  155.     LD    (NEW2),SP    ; SAVE THIS PROGRAM'S POINTER
  156.     LD    SP,(OLD2)    ; GET THE CALLING POINTER
  157.     ENDM
  158. ;
  159. ;
  160. ;  STORE CURRENT SP, GET CALLING PROGRAM'S SP --
  161. ;   PREPARATORY TO CALLING A PROGRAM KNOWN TO REQUIRE ITS
  162. ;   OWN STACK, SUCH AS CP/M OR CBIOS.
  163. ;
  164. ;  SPOT => PRIOR TO CALL, STORE OLD, GET NEW:
  165. ;
  166. ;    SPOT    OLDSP,TEMPNEWSP
  167. ;
  168. ;  SPIN => FOLLOWING THE CALL, INVERSE:
  169. ;
  170. ;    SPIN    OLDSP,TEMPNEWSP   ; RESTORES OWN SP
  171. ;
  172. SPOT    MACRO    OSP,NSP
  173.     LD    (NSP),SP
  174.     LD    SP,(OSP)
  175.     ENDM
  176. ;
  177. SPIN    MACRO    OSP,NSP
  178.     LD    (OSP),SP
  179.     LD    SP,(NSP)        ;; & GET OWN (NEW) SP BACK.
  180.     ENDM
  181. ;
  182. ;
  183. ;  STORE A REGISTER (SINGLE):
  184. ;   -- IF USING ANY OTHER THAN -A-, THIS DESTROYS <A>.
  185. ;
  186. STORE    MACRO    LOC,REG
  187.     LOCAL    LABA
  188. LABA    EQU    'A'
  189.     IF '®' EQ LABA
  190.     LD    (LOC),A        ;; STORE A.
  191.     ELSE
  192.     LD    A,REG        ;; DESTROYS <A>
  193.     LD    (LOC),A
  194.     ENDIF
  195.     ENDM
  196. ;
  197. ;
  198. ;  ****  ICRT-UNIQUE DEFINITIONS & MACROS ******
  199. ;
  200. ;
  201. ;  MACRO TO DO A 16-BIT COMPARE ON THE HL REGISTER.
  202. ;    - WORKS WITH:  BC, DE, AF, IX, IY
  203. ;
  204. ;    CMPD    REGP    ; COMPARES -HL- WITH -REGP-
  205. ;
  206. CMPD    MACRO     REGP 
  207.     LOCAL     L1,L2,L3,L4,L5,L6,L7,CMPD1,CMPD2
  208.     .8080
  209. L1    SET    'BC'
  210. L2    SET    'DE'
  211. L3    SET    'IX'
  212. L4    SET    'IY'
  213. L5    SET    'AF'
  214. L6    SET    'PC'
  215. L7    SET    'SP'
  216.     .Z80
  217. ;
  218.      IF '®P' EQ L1
  219.      LD    A,H
  220.      CP    B
  221.      JR    NZ,CMPD1
  222.      LD    A,L
  223.      CP    C
  224.      ENDIF
  225. ;
  226.      IF '®P' EQ L2
  227.      LD    A,H
  228.      CP    D
  229.      JR    NZ,CMPD1
  230.      LD    A,L
  231.      CP    E
  232.      ENDIF
  233. ;
  234.      IF '®P' EQ L3
  235.      PUSH    BC
  236.      PUSH    IX    ;; PUT IX IN BC
  237.      POP    BC
  238.      LD    A,H
  239.      CP    B
  240.      JR    NZ,CMPD2  ;; MUST POP BC
  241.      LD    A,L
  242.      CP    C
  243.      JR    CMPD2    ;; MUST POP BC
  244.      ENDIF
  245. ;
  246.      IF '®P' EQ L4
  247.      PUSH    BC
  248.      PUSH    IY
  249.      POP    BC
  250.      LD    A,H
  251.      CP    B
  252.      JR    NZ,CMPD2  ;; MUST POP BC
  253.      LD    A,L
  254.      CP    C
  255.      JR    CMPD2      ;; MUST POP BC
  256.      ENDIF
  257. ;
  258.      IF '®P' EQ L5
  259.      PUSH    BC
  260.      PUSH    AF
  261.      POP    BC    ;; PUT AF IN BC
  262.      LD    A,H
  263.      CP    B
  264.      JR    NZ,CMPD2  ;; MUST POP BC
  265.      LD    A,L
  266.      CP    C
  267.      JR    CMPD2      ;; MUST POP BC
  268.      ENDIF
  269. ;
  270.      IF '®P' EQ L6
  271.      PUSH    BC    ;; DOING PC, SAVE BC
  272.      CALL    ZZZZ
  273.     LD    A,H
  274.     CP    B
  275.     JR    NZ,CMPD2
  276.     LD    A,L
  277.     CP    C
  278.     JR    CMPD2    ;; MUST RESTORE BC
  279. ;
  280. ZZZZ:    POP    BC    ;; GET PC FROM STACK TO BC.
  281.     PUSH    BC    ;; PUT IT BACK GOING TO
  282.     RET        ;;  RETURN...
  283. ;
  284. ;
  285.      ENDIF
  286. ;
  287.      IF '®P' EQ L7
  288.     PUSH    BC
  289.     PUSH    SP
  290.     POP    BC
  291.     LD    A,H
  292.     CP    B
  293.     JR    NZ,CMPD2
  294.     LD    A,L
  295.     CP    B
  296.     JR    CMPD2    ;; SAVE BC BEFORE EXITING
  297.      ENDIF
  298. ;
  299.   IF '®P' NE L1 AND '®P' NE L2
  300. CMPD2:     POP    BC    ;; RESTORE BC
  301.   ENDIF
  302. CMPD1:
  303.     ENDM
  304. ;
  305. ;       MXI    REGP,ROW,COL    ; SETS THE 16-BIT REGISTER TO THE
  306. ;                ; VALUE  ROW*256 + COL.
  307. ;                ; CAN NE USED WITH ANY LOADABLE PAIR.
  308. ;
  309. MXI    MACRO    REGP,ROW,COL
  310.     LOCAL    X,Y,Z
  311.     .8080
  312. X    SET    ROW
  313. Y    SET    COL
  314. Z    SET    (X * 256 + Y) AND 0FFFFH
  315.     .Z80
  316.     LD    REGP,Z
  317.     ENDM
  318. ;
  319. ;
  320. ;  CIJR:   COMPARE (A) IMMEDIATE, AND DO A CONDITIONAL RELATIVE JUMP:
  321. ;
  322. ;    CIJR    DATA,CONDITION,LOCATION
  323. ;
  324. ;  GENERATES:
  325. ;
  326. ;    CP    DATA
  327. ;    JP    CONDITION,LOCATION
  328. ;  NOTE:  NO TEST IS MADE FOR OUT-OF-RANGE CONDITIONAL JUMP.
  329. ;  ____
  330. ;
  331. CIJR    MACRO    DATA,COND,PLACE
  332.     CP    DATA
  333.     JP    COND,PLACE
  334.     ENDM
  335. ;
  336. ; DOIT:  A MACRO TO PERFORM LOTS OF OTHERWISE REDUNDANT CODE IN ICRT,
  337. ;        AND MAKE SOME TESTS AND CALL AN OPTIONAL ROUTINE.
  338. ;
  339. ;    DOIT    VALUE,CONDITION,ROUTINE
  340. ;
  341. DOIT    MACRO    VALUE,COND,ROUT
  342.     LOCAL    XX
  343.     LD    A,VALUE
  344.     CALL    GET1P        ;; THIS IS AN ICRT SUBROUTINE.
  345.     RET    COND
  346.     LD    B,A
  347. XX:     PUSH    BC
  348.     CALL    ROUT
  349.     POP    BC
  350.     DJNZ    XX
  351.     RET
  352.     ENDM
  353. ;
  354. ;
  355. ;  DOSP:  A SPECIAL-PURPOSE MACRO TO SUPPORT ICRT:
  356. ;
  357. DOSP    MACRO    V1,C1,R1,R2,H2,L2,REG
  358.     LOCAL    XX1,XX2,Y,Z
  359.     .8080
  360. Y    SET    NORMAL
  361. Z    SET    ' '
  362.     .Z80
  363. ;
  364.     LD    A,V1
  365.     CALL    GET1P
  366.     JP    C1,R1    ; CONDITIONAL JUMP TO ROUTINE R1.
  367.     PUSH    HL
  368.     CP    1
  369.     JR    NZ,XX1
  370.     EX    DE,HL
  371.     LD    H,H2    ; VALUE <H2> GOES IN REG. H
  372.     LD    L,L2    ; VALUE <L2> GOES IN REG. L
  373.     MXI    BC,Y,Z
  374.     CALL    FILLS
  375.     JR    XX2
  376. XX1:     CP    2
  377.     JR    NZ,XX2
  378.     LD    REG,0    ; LOAD ZERO IN SPECIFIED REGISTER.
  379.     CALL    R2    ; CALL ROUTINE R2.
  380. XX2:     POP    HL
  381.     RET
  382.     ENDM
  383. ;
  384. ;  WCTC:  THIS MACRO SUPPORTS ICRT SUBROUTINES CTC0...CTC6.
  385. ;
  386. ;         'OPT' IS A BINARY QUANTUM AND MAY BE NULL OR ANY CHAR(S).
  387. ;
  388. WCTC    MACRO    NAM,QUAN,OPT
  389. ;
  390.     IFNB <OPT>
  391.     LD    L,H
  392.     ENDIF
  393. ;
  394.     LD    H,0
  395.     LD    DE,NAM
  396.     ADD    HL,DE
  397.     LD    (HL),QUAN
  398.     RET
  399. ;
  400.     ENDM
  401. ;
  402. ;  GGP:      THIS MACRO EXPANDS TO:
  403. ;
  404. ;    LD    A,QUAN
  405. ;    CALL    GET1P
  406. ;
  407. ;  PLUS RET    COND    ; DO A CONDITIONAL RETURN IF THE CONDITION
  408. ;              IS SPECIFIED IN THE MACRO CALL.  IF IT IS NULL,
  409. ;                DO NOT PERFORM THE RETURN.
  410. ;
  411. ;
  412. GGP    MACRO    QUAN2,COND2
  413.     LD    A,QUAN2
  414.     CALL    GET1P
  415. ;
  416.     IFNB <COND2>
  417.     RET    COND2
  418.     ENDIF
  419. ;
  420.     ENDM
  421. ;
  422. ;  MAPX:  GENERATES A TABLE OF VIDEO LOCATIONS BASED
  423. ;
  424. ;         ON VIDEOX, NCOLS, & NROWS
  425. ;
  426. MAPX    MACRO
  427.     LOCAL    I,J
  428.     .8080
  429. J    SET    (NCOLS + 15) AND 0FFF0H
  430. I    SET    0
  431. ;
  432.     REPT    NROWS
  433.      DW    VIDEOX + J * I
  434. I     SET    I + 1
  435.     ENDM
  436. ;
  437.     ENDM
  438.     .Z80
  439. ;
  440. ;
  441. ;
  442. ;
  443. ;
  444. ;
  445.