home *** CD-ROM | disk | FTP | other *** search
/ io Programmo 23 / IOPROG_23.ISO / SOFT / ASM / BCDASM.ZIP / BCDASM / EXAMPLES / BCD.PAS < prev    next >
Encoding:
Pascal/Delphi Source File  |  1997-06-03  |  5.7 KB  |  173 lines

  1. Unit BCD;       (* 16-bit BCDASM routines (for Turbo Pascal 6.0) *)
  2. {$G+}           (* Requires 80286+ CPU *)
  3.  
  4. INTERFACE
  5.  
  6. const
  7.         MIN_SIZEOF_BCD  = 4;
  8.         MAX_SIZEOF_BCD  = (65535-MIN_SIZEOF_BCD+1);
  9.         MAX_SIZEOF_XBCD = (MAX_SIZEOF_BCD SHR 1);
  10.  
  11. type
  12.     uint  = word;    (* 16-bit *)
  13.     pbyte = ^byte;    (* BCD is an array of bytes *)
  14.         pchar = ^char;  (* Pointer to a zero-terminated
  15.                            string, NOT to a Pascal string *)
  16.  
  17.  
  18. (* BCDASM procedure/function prototypes *)
  19. (* math *)
  20. procedure bcdAbs    (dst:pbyte; sz:uint);
  21. function  bcdNeg    (dst:pbyte; sz:uint) : integer;
  22. function  bcdCmp    (dst:pbyte; src:pbyte; sz:uint) : integer;
  23. function  bcdCmpz   (dst:pbyte; sz:uint) : integer;
  24. function  bcdAdd    (dst:pbyte; src:pbyte; sz:uint) : integer;
  25. function  bcdSub    (dst:pbyte; src:pbyte; sz:uint) : integer;
  26. procedure bcdImul   (xdst:pbyte; xsrc:pbyte; sz:uint);
  27. function  bcdIdiv   (xdst:pbyte; xsrc:pbyte; sz:uint) : integer;
  28. function  bcdShr    (dst:pbyte; sz:uint; count:uint) : integer;
  29. function  bcdShl    (dst:pbyte; sz:uint; count:uint) : integer;
  30. (* transfer *)
  31. procedure bcdMov    (dst:pbyte; src:pbyte; sz:uint);
  32. procedure bcdSwap   (dst:pbyte; src:pbyte; sz:uint);
  33. procedure bcdLdz    (dst:pbyte; sz:uint);
  34. procedure bcdLd1    (dst:pbyte; sz:uint);
  35. procedure bcdLd100  (dst:pbyte; sz:uint);
  36. (* conversion *)
  37. procedure bcdSx     (xdst:pbyte; src:pbyte; srcsz:uint);
  38. function  bcdIsbcd  (dst:pbyte; sz:uint) : integer;
  39. function  bcdA2p    (dst:pbyte; dstsz:uint; pStr:pchar) : integer;
  40. function  bcdP2a    (pStr:pchar; src:pbyte; srcsz:uint) : uint;
  41. function  bcdB2p    (dst:pbyte; dstsz:uint; src:pointer; srcsz:uint) : integer;
  42. procedure bcdP2b    (dst:pointer; dstsz:uint; src:pbyte; srcsz:uint);
  43. procedure bcdBe2le  (dst:pbyte; src:pbyte; srcsz:uint);
  44. procedure bcdLe2be  (dst:pbyte; src:pbyte; srcsz:uint);
  45. function  bcdU2p    (dst:pbyte; usrc:pbyte; srcsz:uint) : integer;
  46. procedure bcdP2u    (udst:pbyte; src:pbyte; srcsz:uint);
  47. function  bcdFmt    (pStr:pchar; strsz:uint; pBCD:pbyte; sz:uint;
  48.              width:uint; numDec:uint; prec:uint; rtJust:byte;
  49.              signCh:char; fillCh:char; sepCh:char; sepMCh:char) :uint;
  50.  
  51.  
  52. (* BCDUU prototypes (for unpacked unsigned BCDs) *)
  53. procedure BCDUUmov  (dst:pbyte; src:pbyte; sz:uint);
  54. function  BCDUUadd  (dst:pbyte; src:pbyte; sz:uint) : integer;
  55. function  BCDUUsub  (dst:pbyte; src:pbyte; sz:uint) : integer;
  56. function  BCDUUu2p  (dst:pbyte; src:pbyte; srcsz:uint) : integer;
  57. function  BCDUUu2a  (pStr:pchar; src:pbyte; srcsz:uint) : uint;
  58. procedure BCDUUmul  (xdst:pbyte; xsrc:pbyte; sz:uint);
  59.  
  60.  
  61. (* BIN2ASC *)
  62. function  bin2asc   (pStr:pchar; src:pbyte; srcsz:uint) : uint;
  63. function  HexN        (pStr:pchar; mval:uint) : uint;
  64.  
  65.  
  66. (* CONSOLIO *)
  67. function  IsDevRedir (hDev:uint) : integer;
  68. function  GetKey     : char;
  69. function  WriteZStr  (pStr:pchar) : uint;
  70. function  WriteNL    : uint;
  71.  
  72.  
  73. (*
  74.  Function return values
  75.  Fnx         < 0        = 0         > 0
  76.  bcdNeg    dst < 0    dst = 0     dst > 0
  77.  bcdCmp    dst < src  dst = src   dst > src
  78.  bcdCmpz   dst < 0    dst = 0     dst > 0
  79.  bcdAdd    n/a        No carry    Carry
  80.  bcdSub    n/a        No borrow   Borrow
  81.  bcdIdiv   n/a        DivZ/Ovf    No error
  82.  bcdShr    n/a        dst = 0     dst <> 0
  83.  bcdShl    n/a        dst = 0     dst <> 0
  84.  bcdIsbcd  n/a        Error       No error
  85.  bcdA2p    n/a        Error       No error
  86.  bcdP2a    n/a        n/a         String length
  87.  bcdB2p    n/a        Error       No error
  88.  bcdU2p    n/a        Error       No error
  89.  bcdFmt    n/a        Error       String length
  90.  -
  91.  BCDUUadd  n/a        No carry    Carry
  92.  BCDUUsub  n/a        No borrow   Borrow
  93.  BCDUUu2p  n/a        Error       No error
  94.  BCDUUu2a  n/a        n/a         String length
  95.  -
  96.  bin2asc   n/a        Error       String length  (C string)
  97.  HexN      n/a        n/a         String length  (C string)
  98.  -
  99.  IsDevRedir Error     No          Yes
  100.  GetKey     n/a       Ascii character
  101.  WriteZStr  n/a       No. of bytes written to stdout (C string)
  102.  WriteNL    n/a       No. of bytes written to stdout
  103. *)
  104.  
  105.  
  106.  
  107. IMPLEMENTATION
  108. (* Assemble externals as '.model large, pascal' *)
  109. {$L bcdAbs.obj}
  110. procedure bcdAbs;    external;
  111. {$L bcdNeg.obj}
  112. function  bcdNeg;    external;
  113. {$L bcdCmp.obj}
  114. function  bcdCmp;    external;
  115. {$L bcdCmpz.obj}
  116. function  bcdCmpz;   external;
  117. {$L bcdAdd.obj}
  118. function  bcdAdd;    external;
  119. function  bcdSub;    external;
  120. {$L bcdImul.obj}
  121. procedure bcdImul;   external;
  122. {$L bcdIdiv.obj}
  123. function  bcdIdiv;   external;
  124. {$L bcdShr.obj}
  125. function  bcdShr;    external;
  126. {$L bcdShl.obj}
  127. function  bcdShl;    external;
  128. {$L bcdMov.obj}
  129. procedure bcdMov;    external;
  130. {$L bcdSwap.obj}
  131. procedure bcdSwap;   external;
  132. {$L bcdLd.obj}
  133. procedure bcdLdz;    external;
  134. procedure bcdLd1;    external;
  135. procedure bcdLd100;  external;
  136. {$L bcdSx.obj}
  137. procedure bcdSx;     external;
  138. {$L bcdIsbcd.obj}
  139. function  bcdIsbcd;  external;
  140. {$L bcdP2a.obj}
  141. function  bcdA2p;    external;
  142. function  bcdP2a;    external;
  143. {$L bcdP2b.obj}
  144. function  bcdB2p;    external;
  145. procedure bcdP2b;    external;
  146. {$L bcdBe2le.obj}
  147. procedure bcdBe2le;  external;
  148. procedure bcdLe2be;  external;
  149. {$L bcdP2u.obj}
  150. function  bcdU2p;    external;
  151. procedure bcdP2u;    external;
  152. {$L bcdFmt.obj}
  153. function  bcdFmt;    external;
  154. {}
  155. {$L bcduu.obj}
  156. procedure BCDUUmov;  external;
  157. function  BCDUUadd;  external;
  158. function  BCDUUsub;  external;
  159. function  BCDUUu2p;  external;
  160. function  BCDUUu2a;  external;
  161. procedure BCDUUmul;  external;
  162. {}
  163. {$L bin2asc.obj}
  164. function  bin2asc;   external;
  165. function  HexN;      external;
  166. {}
  167. {$L consolio.obj}
  168. function  IsDevRedir;external;
  169. function  GetKey;    external;
  170. function  WriteZStr; external;
  171. function  WriteNL;   external;
  172. END.
  173.