home *** CD-ROM | disk | FTP | other *** search
/ Columbia Kermit / kermit.zip / norskdata / ndkmon.mac < prev    next >
Text File  |  2020-01-01  |  18KB  |  553 lines

  1. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  2. %      This is an ecstract of a library of monitor-calls for Nord-Pascal.     %
  3. %      The routines are well tested, but should any errors surface,           %
  4. %      please report them to H}vard Eidnes/Erlend Dahl c/o Studio 54          %
  5. %                                                                             %
  6. %      Assembeled at Nord-10.54 "computing centre"  30.01.84                  %
  7. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  8. %                                                                             %
  9. %      Contributing programmers :                                             %
  10. %                                  Bernt Marius Johnsen - bmj                 %
  11. %                                  Frode Hernes         - fh                  %
  12. %                                  Bjarte Holmedal      - bjh                 %
  13. %                                  H}vard Eidnes        - he                  %
  14. %                                  Anders Herbj|rnsen   - ah                  %
  15. %                                      + many more for the original library.. %
  16. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  17. %
  18. %%%%%
  19. % bmj  FUNCTION PM1 (DEV: INTEGER): CHAR; EXTERN;
  20. %               INBT ^x,Inbt;
  21. %
  22. %      Function to input one byte from a device.
  23. %      The routine removes parity
  24. % ^cc,
  25. )9BEG
  26. )9LIB  PM1   INBT
  27. )9ENT  PM1   INBT
  28. INBT=*
  29. PM1,   COPY  SA DX           % pointer to parameter-list
  30.        LDT   ,X,B 7          % get device number
  31.        MON   1               % INBT
  32.        MON   65              % error return ( QERMS )
  33.        SAT   177             % mask to remove parity bit
  34.        RAND  ST DA           % remove parity
  35.        STA   ,X,B 6          % store returned value from function
  36.        EXIT
  37. )9END
  38. % ;^cp,6;
  39. %%%%%
  40. % bmj  PROCEDURE PM2(DEV: INTEGER; CH: CHAR); EXTERN;
  41. %                OUTBT ^x,Outbt;
  42. %
  43. %        Procedure to output a byte to a device
  44. % ^cc,
  45. )9BEG
  46. )9LIB  PM2   OUTBT
  47. )9ENT  PM2   OUTBT
  48. OUTBT=*
  49. PM2,   COPY  SA DX           % pointer to parameter list
  50.        LDT   ,X,B 6          % get device number
  51.        LDA   ,X,B 7          % get input character
  52.        MON   2               % OUTBT
  53.        MON   65              % error return ( QERMS )
  54.        EXIT                  % skip return : ok
  55. )9END
  56. % ;^cp,9;
  57. %%%%%
  58. % bmj  PROCEDURE PM3(MODE: INTEGER); EXTERN;
  59. %                ECHOM ^x,Echom;
  60. %
  61. %      Procedure to set the echo mode as specified in
  62. %      the Sintran manual.  Be aware that this is not
  63. %      the full monitor call.
  64. %      Only for MODE < 3.
  65. % ^cc,
  66. )9BEG
  67. )9LIB  PM3   ECHOM
  68. )9ENT  PM3   ECHOM
  69. ECHOM=*
  70. PM3,   COPY  SA DX
  71.        LDA   ,X,B 6          % Get echo mode
  72.        MON   3               % ECHOM
  73.        EXIT
  74. )FILL
  75. )9END
  76. % ;^cp,10;
  77. %%%%%
  78. % bmj  PROCEDURE PM4(MODE: INTEGER); EXTERN;
  79. %                BRKM ^x,Brkm;
  80. %            NOT FOR MODE > 2
  81. %
  82. %      Procedure to set the break mode as specified in the
  83. %      Sintran manual. The procedure XBRKM should be used
  84. %      if the one wants to set break mode for an arbitrary
  85. %      device. (Only possible for RT-programs)
  86. % ^cc,
  87. )9BEG
  88. )9LIB  PM4   BRKM
  89. )9ENT  PM4   BRKM
  90. BRKM=*
  91. PM4,   COPY  SA DX
  92.        LDA   ,X,B 6          % Get mode
  93.        MON   4               % BRKM
  94.        EXIT
  95. )9END
  96. % ;^cp,6;
  97. %%%%%
  98. % bmj  PROCEDURE PM13(DEV: INTEGER); EXTERN;
  99. %                CIBUF ^x,Cibuf;
  100. %
  101. %      Procedure to clear the input buffer of a device
  102. % ^cc,
  103. )9BEG
  104. )9LIB  PM13  CIBUF
  105. )9ENT  PM13  CIBUF
  106. CIBUF=*
  107. PM13,  COPY  SA DX
  108.        LDT   ,X,B 6          % Get device number
  109.        MON   13              % CIBUF
  110.        MON   65              % Error return ( QERMS )
  111.        EXIT
  112. )FILL
  113. )9END
  114. % ;^cp,7;
  115. %%%%%
  116. % bmj  FUNCTION PM66(DEV: INTEGER): INTEGER; EXTERN;
  117. %               ISIZE ^x,Isize;
  118. %
  119. %      Procedure to get the size of the input buffer of
  120. %      a device given the device number.
  121. % ^cc,
  122. )9BEG
  123. )9LIB  PM66  ISIZE
  124. )9ENT  PM66  ISIZE
  125. ISIZE=*
  126. PM66,  COPY  SA DX
  127.        LDT   ,X,B 7          % Get device number
  128.        MON   66              % Isize
  129.        MON   65              % Error return
  130.        STA   ,X,B 6          % Store size
  131.        EXIT
  132. )9END
  133. % ;^cp,7;
  134. %%%%%
  135. % bmj  PROCEDURE PM71(DEV: INTEGER); Extern;
  136. %                DESCF ^x,Descf;
  137. %
  138. %      Procedure to disable escape.
  139. % ^cc,
  140. )9BEG
  141. )9LIB  PM71  DESCF
  142. )9ENT  PM71  DESCF
  143. DESCF=*
  144. PM71,  COPY  SA DX
  145.        LDT   ,X,B 6
  146.        MON   71
  147.        EXIT
  148. )9END
  149. % ;^cp,6;
  150. %%%%%
  151. % bmj  PROCEDURE PM72(DEV: INTEGER); Extern;
  152. %                EESCF ^x,Eescf;
  153. %
  154. %      Procedure to enable escape
  155. % ^cc,
  156. )9BEG
  157. )9LIB  PM72  EESCF
  158. )9ENT  PM72  EESCF
  159. EESCF=*
  160. PM72,  COPY  SA DX
  161.        LDT   ,X,B 6
  162.        MON   72
  163.        EXIT
  164. )9END
  165. % ;^cp,7;
  166. %%%%%
  167. % bmj  FUNCTION ADDR(VAR X: ANYTYPE): INTEGER; EXTERN;
  168. %            ^x,Addr;
  169. %
  170. %      Procedure to get the address of any type except, of
  171. %      course, a file. The "var" is essential !!!!
  172. % ^cc,
  173. )9BEG
  174. )9LIB  ADDR
  175. )9ENT  ADDR
  176. ADDR,  COPY  SA DX
  177.        LDA   ,X,B 7          % The address lies on the stack
  178.        STA   ,X,B 6          % Store address as function out value
  179.        EXIT
  180. )9END
  181. % ;^cp,16;
  182. %%%%%
  183. % bmj  PROCEDURE PM143(VAR RUNMOD,IDEV,ODEV,USNO : INTEGER); EXTERN;
  184. %                RSIO ^x,Rsio;
  185. %
  186. %      Procedure to get execution mode of calling background
  187. %      program, user, input and output file numbers.
  188. %      USNO contains main directory index (most significant byte)
  189. %      and user number (least significant byte) of the user under
  190. %      which the program is running.
  191. % ^cc,
  192. )9BEG
  193. )9LIB  PM143 RSIO
  194. )9ENT  PM143 RSIO
  195. PAROF=6
  196. BSAV=PAROF+4
  197. RSIO=*
  198. PM143, SWAP  SA DB           % Exchange A-reg and B-reg
  199.        RADD  SA DB           % Get stack pointer
  200.        STA   ,B BSAV         % In order to generate reentrant code.
  201.        MON   143             % RSIO
  202. %       JMP   *+1            % This one seems to be superfluous.
  203.        STA   I ,B PAROF      % Store mode
  204.        STT   I ,B PAROF+1    % Store input device number
  205.        COPY  SD DA           % Get  output device number
  206.        STA   I ,B PAROF+2    % Store output device number
  207.        STX   I ,B PAROF+3    % Store user number
  208.        LDA   ,B BSAV         % Restore B-reg
  209.        COPY  SA DB
  210.        EXIT
  211. )9END
  212. % ;^cp,10;
  213. %%%%%
  214. % he    PROCEDURE  SETBT(FILENUMBER:INTEGER;
  215. %                        BTPTR:LONGINT);EXTERN;
  216. %                  PM74      ^x,Setbt;
  217. %       Procedure to set the byte pointer on an open file
  218. %       The byte pointer must be a double integer.
  219. % ^cc,
  220. )9BEG
  221. )9LIB SETBT  PM74
  222. )9ENT SETBT  PM74
  223. QERMS=65
  224. SETBT=*
  225. PM74,  RADD DA SB            % get pointer to parameter list
  226.        COPY DX SA
  227.        LDT ,X 6              % filenumber
  228.        LDD ,X 7              % get byte pointer (double word)
  229.        MON 74                % SETBT
  230.        MON QERMS             % error ?
  231.        EXIT
  232. )9END
  233. % ;^cp,8;
  234. %%%%%
  235. % he   PROCEDURE  REABT(FILNUMBER:INTEGER;
  236. %                       VAR BTPTR:LONGINT);EXTERN;
  237. %                 PM75       ^x,Reabt;
  238. %
  239. %      Procedure to read the byte pointer of an open file.
  240. %      The byte pointer must be a double word.
  241. % ^cc,
  242. )9BEG
  243. )9LIB  REABT PM75
  244. )9ENT  REABT PM75
  245. QERMS=65
  246. REABT=*
  247. PM75,  COPY  SB DX           % save B-reg
  248.        RADD  DB SA           % get pointer to parameters
  249.        LDT   ,B 6            % first parameter - file number
  250.        MON   75              % REABT
  251.        MON   QERMS           % error ?
  252.        STD   I,B 7           % store indirect
  253.        COPY  SX DB           % restore B-reg
  254.        EXIT
  255. )9END
  256. % ;^cp,9;
  257. %%%%%
  258. % he   FUNCTION    XOPEN(VAR FILENAME:CHARARR; VAR FILETYPE:FTTYPE;
  259. %                        ACCESS:INTEGER;
  260. %                        VAR STATUS:INTEGER):INTEGER;EXTERN;
  261. %               ^x,XOpen;
  262. %
  263. %      Function to open a file and return status. Otherwise, this
  264. %      routine is identical with OPEN.
  265. % ^cc,
  266. )9BEG
  267. )9LIB  XOPEN
  268. )9ENT  XOPEN
  269. SAVB=13
  270. XOPEN, RADD  DA SB           % get base of parameters
  271.        SWAP  SA DB
  272.        STA   ,B SAVB         % save B register
  273.        LDX   ,B 7            % first parameter  (address of filename string)
  274.        LDA   ,B 10           % second parameter (address of filetype string)
  275.        LDT   ,B 11           % access code
  276.        MON   50              % open
  277.        JMP   ERROR           % comment?
  278.        STA   ,B 6            % ok, store file number as function return value
  279.        SAA   0               % zero error-code
  280. ERROR, STA   I,B 12          % error-code in sintranIII
  281.        LDA   ,B 6            % function value in A-reg also
  282.        LDT   ,B SAVB
  283.        SWAP  ST DB           % restore B
  284.        EXIT
  285. )FILL
  286. )9END
  287. % ;^cp,6;
  288. %%%%%
  289. % ah   PROCEDURE PM12(VAR S: CHARARR); EXTERN;
  290. %                SETCM ^x,Setcm;
  291. %
  292. %      Procedure to transfer a string to the
  293. %      command input buffer.
  294. %      The string must be terminated by a CR.
  295. %      NB : The "var" is essential !!!!
  296. % ^cc,
  297. )9BEG
  298. )9LIB  PM12  SETCM
  299. )9ENT  PM12  SETCM
  300. SETCM=*
  301. PM12,  COPY  SA DX
  302.        LDA   ,X,B 6          % Get address of string
  303.        MON   12              % SETCM
  304.        EXIT
  305. )FILL
  306. )9END
  307. % ;^cp,14;
  308. %%%%%%%
  309. % he   PROCEDURE T8INB ( Dev : integer;
  310. %                PM310   VAR Data : AnyType;
  311. %                        VAR BreakRead : boolean;
  312. %                        VAR NByt : integer );extern;
  313. %             ^x,T8inb;
  314. %      Procedure to input 8 bytes from given logical device number.
  315. %      Does appropriate break- and echo-checking.
  316. %      Reads bytes up to and including break character.
  317. %
  318. %      Stores all eight bytes from registers, so watch out if less
  319. %      than 8 bytes has been transfered.
  320. %
  321. %      NByt is returned as number of bytes actually read.
  322. %
  323. %      Data should be a buffer to store bytes in, any type will
  324. %      be acceptable as long it is transferable using VAR, and
  325. %      sufficient space is available (ie. 8 bytes).
  326. %
  327. %      The routine is reentrant - uses B+A+ 12,13 & 14 for temporary storage.
  328. % ^cc,
  329. )9BEG
  330. )9ENT T8INB PM310
  331. )9LIB T8INB PM310
  332. SAVL= 12
  333. SAVB= 13
  334. XBYTS=14
  335. PM310=*
  336. T8INB, SWAP  SA DB           % In order to save B-register.
  337.        RADD  DB SA           % Get pointer to parameter-list.
  338.        STA   ,B SAVB         %  save B-register on top of stack.
  339.        COPY  SL DA           % save L-register also
  340.        STA   ,B SAVL         %  in SAVLink
  341.        LDT   ,B 6            % Set up device number
  342.        MON   310             % and do the actual input - T8INB
  343.        MON   65              % THIS ANIMAL HAS SKIP-RETURN - UNDOCUMENTED!!!
  344.        STX   ,B XBYTS        % Save the bytes read into X-register in XBYTS
  345.        SAX   0               %  and use X-reg as offset in data-area.
  346.        STD   I,B,X 7         % Store first four bytes.
  347.        SAX   2               % Adjust offset
  348.        COPY  SL DA           % In order to store bytes read into L-register.
  349.        STA   I,B,X 7         % Store bytes - address in 4th byte relative B
  350.        SAX   3               %  and adjust offset once again.
  351.        LDA   ,B XBYTS        % Get bytes read into X-reg
  352.        STA   I,B,X 7         %  and store them also.
  353.        SAA   -1              % Make pattern 077777
  354.        SHA   ZIN SHR 1       %  in A-reg.
  355.        RAND  ST DA           % Mask off upper bit
  356.        STA   I,B 10          %  and store in NByt.
  357.        SAA   1               % Make pattern 100000
  358.        SHA   ROT 17          %  in A-reg.
  359.        RAND  ST DA           % Mask out upper bit
  360.        SHA   ZIN SHR 17      %   and shift to lower position.
  361.        STA   I,B 11          %   and store value in BreakRead.
  362.        LDA   ,B SAVL         % Save return-address in A-register
  363.        LDX   ,B SAVB         % Restore
  364.        COPY  SX DB           %   B-register
  365.        COPY  SA DP           % .. return
  366. )9END                        % END of BRF-unit
  367. % ;^cp,19;
  368. %%%%%%%
  369. % he   procedure m8out ( Dev : integer; VAR Buffer : AnyType ); extern;
  370. %                PM22        ^x,M8out;
  371. %
  372. %      Procedure to output 8 bytes to a device.  Stops output when an
  373. %      null is encountered.  "Buffer" shold be a buffer containing
  374. %      at least 8 bytes to be output (any type will work -
  375. %      as long as the parameter is possible to transfer using VAR.)
  376. % ^cc,
  377. )9BEG
  378. )9ENT  M8OUT PM22
  379. )9LIB  M8OUT PM22
  380. SAVL=10
  381. SAVB=11
  382. PM22=*
  383. M8OUT, SWAP  SA DB           % In order to save B-register
  384.        RADD  SA DB           % Get pointer to top of stack
  385.        STA   ,B SAVB         %  and save B-register in SAVB
  386.        COPY  SL DA           % Save return-address also
  387.        STA   ,B SAVL         %  in SAVL
  388.        LDD   I,B 7           % Get first 4 bytes into A- and D-registers
  389.        SAX   2               % Offset into Buffer
  390.        LDT   I,B,X 7         % Get next two bytes
  391.        COPY  ST DL           %  and copy to L-register
  392.        SAX   3               % New offset
  393.        LDX   I,B,X 7         % Get last 2 bytes
  394.        LDT   ,B 6            % Fetch device-number
  395.        MON   22              % MON M8OUT
  396.        MON   64              % Error?
  397.        LDX   ,B SAVB         % Get saved B-register
  398.        LDT   ,B SAVL         % Get return-address into T-register
  399.        COPY  SX DB           % Restore B-register
  400.        COPY  ST DP           %  and return
  401. )9END
  402. % ;^cp,8;
  403. %%%%%%
  404. % he   Procedure xhold( unit,n : integer ); extern;
  405. %                PM104 ^x,XHold;
  406. %
  407. %      In order to be runnable on both 32- and 48-bits floating ND-machines,
  408. %      the library routine Hold from pas-lib must be avoided (uses floating
  409. %      point arithmetic).  See SINTRAN REF. MAN.
  410. % ^cc,
  411. )9BEG
  412. )9LIB PM104 XHOLD
  413. )9ENT PM104 XHOLD
  414. SAVB=  10    % Save location relative stack top
  415. NADDR= 11    % Displacement to address-location
  416. UADDR= 12    % Displacement to address-location
  417. PM104=*
  418. XHOLD, RADD  SB DA           % Get pointer to top of stack in A-reg
  419.        SWAP  SA DB           %  and swap so that we can
  420.        STA   ,B SAVB         %  save B-reg as it was on entry.
  421.        COPY  SB DA           % Get address to top of stack in A-reg
  422.        AAA   6               %  add 3 to get address of "unit"
  423.        STA   ,B UADDR        % Store calculated address.
  424.        AAA   1               % Increment to get address of "n"
  425.        STA   ,B NADDR        % Store calculated address.
  426.        AAA   2               % And now get address of address-list.
  427.        MON   104             % HOLD
  428.        LDA   ,B SAVB         % Get saved B-reg to A
  429.        COPY  SA DB           %  and restore.
  430.        EXIT
  431. )9END
  432. % ;^cp,6;
  433. %%%%%%
  434. % he   function xtusd:longint; extern;
  435. %               (pm114)      ^x,XTusd;
  436. %      Possible to use both on 32- and 48-bits floating machines without
  437. %      recompilation.  (Routine in pas-lib involves FP-arithmetic.)
  438. % ^cc,
  439. )9BEG
  440. )9ENT  PM114 XTUSD
  441. )9LIB  PM114 XTUSD
  442. PM114=*
  443. XTUSD, MON 114               % Get time used in AD
  444.        EXIT
  445. )9END
  446. % ;^cp,6;
  447. %%%%%%
  448. % he   function xtime:longint; extern; ^x,XTime;
  449. %              (pm11)
  450. %      Possible to use on 32- and 48-bits floating machines without
  451. %      recompilation.
  452. % ^cc,
  453. )9BEG
  454. )9ENT  PM11  XTIME
  455. )9LIB  PM11  XTIME
  456. PM11=*
  457. XTIME, MON 11                % Give current internal time in basic time-units.
  458.        EXIT                  % (20 ms)
  459. )9END
  460. % ;^cp,6;
  461. %%%%%
  462. %      PROCEDURE RMAX(filenumber:integer;VAR bytptr:longint;
  463. %                     VAR status : integer);extern;
  464. % fh/bjh/he      PM62        ^x,Rmax;
  465. %      Procedure returning max-byte-pointer of file.
  466. %      Filenumber is open-file-number (logic device in S III)
  467. % ^cc,
  468. )9BEG
  469. )9ENT  RMAX  PM62
  470. )9LIB  RMAX  PM62
  471. PM62=*
  472. RMAX,  COPY  SB DX
  473.        RADD  SA DB           % get pointer to parameter-list
  474.        LDT   ,B 6            % first parameter of procedure
  475.        MON   62              % RMAX
  476.        JMP   ERROR           % error-code in A-reg
  477.        STD   I ,B 7          % store resulting byte-pointer ( skip-return )
  478.        SAA   0               % set error code to 0
  479. ERROR, STA   I ,B 10         % store error code
  480.        COPY  SX DB
  481.        EXIT
  482. )9END
  483. % ;^cp,11;
  484. %%%%%
  485. % bmj  PROCEDURE PM43(NO: INTEGER); EXTERN;
  486. %                CLOSE ^x,Close;
  487. %
  488. %      Procedure to close a file from open file number
  489. % ^cc,
  490. )9BEG
  491. )9LIB  PM43  CLOSE
  492. )9ENT  PM43  CLOSE
  493. CLOSE=*
  494. PM43,  COPY  SA DX
  495.        LDT   ,X,B 6          % Get file number
  496.        MON   43              % Close
  497.        MON   65              % Error return
  498.        EXIT
  499. )9END
  500. %%%%%
  501. % bjh  FUNCTION IAND (I,J:INTEGER):INTEGER;EXTERN;
  502. %
  503. %      Function returning the bitwise and of two integers.
  504. %
  505. %
  506. )9BEG
  507. )9ENT IAND
  508. )9LIB IAND
  509. IAND,  COPY  DX SA           % saves stack-pointer
  510.        LDA   ,X,B 7          % loads in first integer
  511.        LDT   ,X,B 10         % loads in second integer
  512.        RAND  DA ST           % takes bitwise and stores
  513.        STA   ,X,B 6          % return in first field
  514.        EXIT
  515. )FILL
  516. )9END
  517. %%%%%
  518. % bjh  FUNCTION IOR  (I,J:INTEGER):INTEGER;EXTERN;
  519. %
  520. %      Function returning the bitwise or of two integers.
  521. %
  522. )9BEG
  523. )9ENT IOR 
  524. )9LIB IOR 
  525. IOR,   COPY  DX SA           % saves stack-pointer
  526.        LDA   ,X,B 7          % loads in first integer
  527.        LDT   ,X,B 10         % loads in second integer
  528.        RORA  DA ST           % takes bitwise or and stores
  529.        STA   ,X,B 6          % return in first field
  530.        EXIT
  531. )FILL
  532. )9END
  533. %%%%%
  534. % he   FUNCTION    CXOR(CH1,CH2:CHAR):CHAR;EXTERN;
  535. %
  536. %      Function returning the logical 'xor' of two characters.
  537. %
  538. )9BEG
  539. )9ENT  CXOR
  540. )9LIB  CXOR
  541. CXOR,  COPY DX SA           
  542.        LDA  ,X,B 7           % first parameter
  543.        LDT  ,X,B 10          % secind parameter
  544.        REXO DA ST            % execute EXOR
  545.        STA  ,X,B 6           % store function value
  546.        EXIT
  547. )FILL
  548. )9END
  549.  
  550. )9EOF
  551. )LINE
  552. 
  553.