home *** CD-ROM | disk | FTP | other *** search
/ ftp.barnyard.co.uk / 2015.02.ftp.barnyard.co.uk.tar / ftp.barnyard.co.uk / cpm / walnut-creek-CDROM / SIMTEL / CPMUG / CPMUG051.ARK / STG2SUP.ASM < prev    next >
Assembly Source File  |  1984-04-29  |  4KB  |  218 lines

  1. %SREV: DB 31H ;    05/31/79  R. CURTISS
  2. %;
  3. %; PUT REVISION INFO INTO SIGNON MESSAGE
  4. %;
  5. %;    HL - REVISION LIST POINTER
  6. %;    DE - DESTINATION STRING POINTER
  7. %;    C  - COUNT OF REVISION ITEMS
  8. %;
  9. %DSPR:    MOV    A,M
  10. %    INX    H
  11. %    STAX    D    ; PUT REV ID CHARACTER
  12. %    INX    D
  13. %
  14. %    PUSH    B    ; SAVE COUNT
  15. %    MOV    C,M
  16. %    INX    H
  17. %    MOV    B,M    ; BC POINTS TO REV NUMBER
  18. %    INX    H
  19. %
  20. %    LDAX    B    ; GET REVISION BYTE
  21. %    RRC
  22. %    RRC
  23. %    RRC
  24. %    RRC
  25. %    CALL    DSPR1
  26. %    LDAX    B
  27. %    CALL    DSPR1
  28. %    INX    D    ; SKIP FOR SPACING
  29. %
  30. %    POP    B    ; RECALL COUNT
  31. %    DCR    C
  32. %    JNZ    DSPR
  33. %
  34. %    RET
  35. %
  36. %
  37. %DSPR1:    ANI    0FH
  38. %    ADI    '0'
  39. %    CPI    '9'+1
  40. %    JC    $+5
  41. %    ADI    7
  42. %    STAX    D
  43. %    INX    D
  44. %    RET
  45. %;
  46. %; ----------------------------------- INITL
  47. %; STAGE2 INITIALIZATION
  48. %;
  49. %INITL:    LXI    H,LINE    ; LINE BUFFER ORIGIN
  50. %    SHLD    IPTR
  51. %    SHLD    OPTR
  52. %    SHLD    WPTR
  53. %    XRA    A
  54. %    STA    LENGTH
  55. %;
  56. %    LXI    D,MEMLOW
  57. %    CALL    MEMSET
  58. %    PUSH    H    ; SAVE HIGH BOUND
  59. %
  60. %    XCHG
  61. %    LXI    D,15
  62. %    DAD    D
  63. %    MOV    A,L
  64. %    ANI    0F0H
  65. %    MOV    L,A    ; ADJUSTED FOR 4 BYTE BOUNDRY
  66. %    CALL    UDIV4    ; DIVIDE BY 4
  67. %    SHLD    K8    ; LOW MEMORY BOUND
  68. %
  69. %    POP    H    ; RECALL HIGH BOUND
  70. %    LXI    D,-15
  71. %    DAD    D
  72. %    MOV    A,L
  73. %    ANI    0F0H
  74. %    MOV    L,A    ; ADJUSTED FOR 4 BYTE BOUNDRY
  75. %    CALL    UDIV4    ; DIVIDE BY 4
  76. %    SHLD    K9    ; HIGH MEMORY BOUND
  77. %    RET
  78. %;
  79. %; ------------------------------------ MOVE
  80. %;  MOVE A FLUB WORD TO OR FROM MEMORY
  81. %;
  82. %;    REG(DE) = MEM(4*HL)
  83. %;
  84. %GMOVE:    DAD    H
  85. %    DAD    H    ; MULTIPLY BY 4
  86. %    XCHG
  87. %    JMP    MOVE
  88. %;
  89. %;    MEM(4*HL) = REG(DE)
  90. %;
  91. %SMOVE:    DAD    H
  92. %    DAD    H    ; MULTIPLY BY 4
  93. %
  94. %MOVE:    LDAX    D
  95. %    MOV    M,A
  96. %    INX    H
  97. %    INX    D
  98. %
  99. %    LDAX    D
  100. %    MOV    M,A
  101. %    INX    H
  102. %    INX    D
  103. %
  104. %    LDAX    D
  105. %    MOV    M,A
  106. %    INX    H
  107. %    INX    D
  108. %
  109. %    LDAX    D
  110. %    MOV    M,A
  111. %    RET
  112. %;
  113. %; ------------------------------------------ REWIND
  114. %;  REWIND ON CHANNEL (A)
  115. %;
  116. %REWIND:    MOV    B,A    ; CHANNEL NUMBER
  117. %    MVI    A,0    ; OPERATION CODE
  118. %    CALL    IOOP
  119. %    RET    
  120. %;
  121. %; ------------------------------------------- READ
  122. %;  INPUT NEXT LINE FROM CHANNEL (A)
  123. %;
  124. %READ:    MOV    B,A    ; CHANNEL NUMBER
  125. %    MVI    A,0FFH    ; OPERATION CODE
  126. %    LXI    H,LINE    ; START OF LINE BUFFER
  127. %    SHLD    IPTR
  128. %    CALL    IOOP
  129. %    LXI    H,LENGTH
  130. %    MOV    E,M    ; GET LINE LENGTH
  131. %    MVI    D,0
  132. %    INX    H    ; POINT TO START OF LINE
  133. %    SHLD    OPTR    ; RESET LINE BUFFER POINTER
  134. %    DAD    D    ; POINT ONE PAST END OF LINE
  135. %    MVI    M,0FFH    ; TERMINATE LINE
  136. %    RET    
  137. %;
  138. %; ------------------------------------------- LEN
  139. %;  COMPUTE LINE LENGTH (LENGTH) = (HL) - LINE  ; (HL) = LINE
  140. %;
  141. %LEN:    PUSH    PSW    ; SAVE (A)
  142. %    LXI    D,LINE    ; START OF LINE BUFFER
  143. %    CALL    DSUB
  144. %    MOV    A,L    ; LINE LENGTH .LT. 255
  145. %    STA    LENGTH
  146. %    XCHG        ; (HL) = LINE
  147. %    POP    PSW    ; RESTORE (A)
  148. %    RET    
  149. %;
  150. %; ---------------------------------------------- RDCH
  151. %;  GET CHARACTER FROM LINE
  152. %;
  153. %RDCH:    LHLD    IPTR    ; GET LINE BUFFER POINTER
  154. %    MOV    A,M
  155. %    INX    H
  156. %    SHLD    IPTR
  157. %    RET
  158. %;
  159. %; ------------------------------------------------- WRCH
  160. %;  STORE CHARACTER INTO LINE BUFFER
  161. %;
  162. %WRCH:    LHLD    OPTR    ; GET LINE BUFFER POINTER
  163. %    ORA    A    ; TEST (A)
  164. %    JM    WRCH1    ; JUMP IF NEGATIVE
  165. %;
  166. %    MOV    B,A    ; SAVE CHARACTER POINTER
  167. %    LXI    D,LINE+132    ; END OF LINE POINTER
  168. %    CALL    UCMPLT    ; UNSIGNED COMPARE LESS THAN
  169. %    JNC    WRCH1    ; JUMP IF OPTR AT END OF BUFFER
  170. %;
  171. %    MOV    M,B    ; PUT CHARACTER INTO BUFFER
  172. %    INX    H    ; INCREMENT POINTER
  173. %    SHLD    OPTR    ; SAVE LINE BUFFER POINTER
  174. %    XRA    A    ; (A) = 0 = STATUS
  175. %    RET    
  176. %;
  177. %WRCH1:    MVI    M,0FFH    ; MARK END OF LINE
  178. %    CALL    LEN
  179. %    SHLD    OPTR    ; RESET LINE BUFFER POINTER
  180. %    MVI    A,1    ; (A) = 1 = STATUS
  181. %    RET    
  182. %;
  183. %; ----------------------------------------- WRITE
  184. %;  OUTPUT LINE ON CHANNEL (A)
  185. %;
  186. %WRITE:    MOV    B,A    ; CHANNEL NUMBER
  187. %    MVI    A,1    ; OPERATION CODE
  188. %    LXI    H,LINE    ; START OF LINE BUFFER
  189. %    SHLD    OPTR    ; INITIALIZE FOR NEXT LINE
  190. %    CALL    IOOP
  191. %    RET    
  192. %;
  193. %; ------------------------------------------ MWRITE
  194. %;  OUTPUT ERROR MESSAGE ON CHANNEL (A)
  195. %;
  196. %MWRITE:    MOV    B,A    ; CHANNEL NUMBER
  197. %    MVI    A,1    ; OPERATION CODE
  198. %    INX    H    ; (HL) = START OF MESSAGE
  199. %    CALL    IOOP
  200. %    RET    
  201. %;
  202. %; ----------------------------------------- STORAGE
  203. %;  STORAGE FOR I/O
  204. %;
  205. %IPTR:    DW    LINE    ; INPUT POINTER
  206. %OPTR:    DW    LINE    ; OUTPUT POINTER
  207. %WPTR:    DW    LINE    ; WCH POINTER
  208. %;
  209. %;    THE NEXT THREE ITEMS MUST APPEAR IN ORDER
  210. %;
  211. %MAXLEN:    DB    132    ; MAX LENGTH OF LINE
  212. %LENGTH:    DB    0    ; LINE LENGTH
  213. %LINE:    DS    133    ; LINE BUFFER
  214. %;
  215. %    DB    0,0,0,0,0,0,0,0,0,0 ; UNUSED SPACE
  216. %;
  217. %;
  218.