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 / CPMUG023.ARK / STOICD_A.STC < prev    next >
Text File  |  1985-07-13  |  4KB  |  120 lines

  1.  
  2.  
  3. % ***************************************************************************
  4. % ** COPYRIGHT (C) MASSACHUSETTS INSTITUTE OF TECHNOLOGY AND HARVARD       **
  5. % ** UNIVERSITY, BIOMEDICAL ENGINEERING CENTER 1977.  ALL RIGHTS RESERVED. **
  6. % ***************************************************************************
  7.  
  8. % GRAPHICS PACKAGE FOR DUAL D/A CARD
  9. % DUAL D/A CARD MUST BE IN SLOT E1
  10. % J. SACHS 2/9/77
  11.  
  12. RADIX @ HEX
  13.  
  14. 0 'XDSP VARIABLE    % CURRENT X
  15. 0 'YDSP VARIABLE    % CURRENT Y
  16. 0 'XDSP1 VARIABLE    % FINAL X
  17. 0 'YDSP1 VARIABLE    % FINAL Y
  18.  
  19. % INITIALIZE DUAL D/A CARD
  20. % DISPLAY ON Y COORD; ENTER STORAGE MODE
  21. 'INIT-DISPLAY : 3 0E101 B! 6 0E102 B! ;
  22.  
  23. % ERASE STORAGE SCOPE
  24. 'ERASE : 2 0E102 B! INIT-DISPLAY ;
  25.  
  26. % X Y DOT
  27. % DISPLAY A DOT (X,Y) ON STACK
  28. 'DOT CODE<  D POP,  H POP,  0E104 SHLD,  XCHG,  0E106 SHLD,  NEXT JMP,  >
  29.  
  30. % X Y MOVE
  31. % SETS XDSP, YDSP
  32. 'MOVE CODE<  H POP,  YDSP SHLD,  H POP,  XDSP SHLD,  NEXT JMP,  >
  33.  
  34. % X Y DRAW
  35. % DRAWS A LINE FROM (XDSP,YDSP) TO (X,Y)
  36. % THEN SETS (XDSP,YDSP) TO (X,Y)
  37. 'DRAW CODE<
  38.  
  39. % COMPUTE DELTA Y, Y INCREMENT
  40.   H POP,  YDSP1 SHLD,  XCHG,
  41.   YDSP LHLD,  -HL CALL,  D DAD,  H A MOV,  A ORA,  2 D LXI,
  42.   IFP,  -HL CALL,  -2 D LXI,  THEN,  T1 2 + SHLD,  XCHG,  T1 6 + SHLD,
  43.  
  44. % COMPUTE DELTA X, X INCREMENT
  45.   H POP,  XDSP1 SHLD,  XCHG,
  46.   XDSP LHLD,  -HL CALL,  D DAD,  H A MOV,  A ORA,  2 D LXI,
  47.   IFP,  -HL CALL,  -2 D LXI,  THEN,  T1 SHLD,  XCHG,  T1 4 + SHLD,
  48.  
  49. % DISPLAY 1ST DOT OF LINE
  50.   XDSP LHLD,  0E104 SHLD,  YDSP LHLD,  0E106 SHLD,
  51.  
  52. % SET COUNT TO 1/2 MAX(ABS(DELTA X),ABS(DELTA Y))
  53.   T1 2 + LHLD,  -DE CALL,  D DAD,  H A MOV,  A ORA,  IFP,  T1 LHLD,  ELSE,
  54.   T1 2 + LHLD,  THEN,  H A MOV,  RAR,  A H MOV,  L A MOV,  RAR,  A L MOV,
  55.   T1 8 + SHLD,  H A MOV,  L ORA,  IFZ,  0 H LXI,  T1 0A + SHLD,
  56.  
  57. % TEST FOR VERTICAL LINE
  58.   T1 LHLD,  H A MOV,  L ORA,  IFNZ, <L
  59.   T1 8 + LHLD,  H B MOV,  L C MOV,  T1 6 + LHLD,  XCHG,
  60.   . YDSP LHLD,  D DAD,  YDSP SHLD,  0E106 SHLD,  B DCX,  B A MOV,  C ORA,
  61.   JNZ,  IF,
  62.   L> THEN,
  63.  
  64. % TEST FOR HORIZONTAL LINE
  65.   T1 2 + LHLD,  H A MOV,  L ORA,  IFNZ, <L
  66.   0E101 H LXI,  2 M MVI,
  67.   T1 8 + LHLD,  H B MOV,  L C MOV,  T1 4 + LHLD,  XCHG,
  68.   . XDSP LHLD,  D DAD,  XDSP SHLD,  0E104 SHLD,  B DCX,  B A MOV,  C ORA,
  69.   JNZ,  0E101 H LXI,  3 M MVI,  IF,
  70.   L> THEN,
  71.  
  72. % SKEW LINE
  73.   .
  74.   T1 0A + LHLD,  H A MOV,  A ORA,  IFM,
  75.   XCHG,  T1 2 + LHLD,  -HL CALL,  D DAD,  T1 0A + SHLD,  T1 4 + LHLD,
  76.   XCHG,  XDSP LHLD,  D DAD,  XDSP SHLD,  0E104 SHLD,
  77.   T1 0A + LHLD,  H A MOV,  A ORA,  IFP,  SWAP THEN,
  78.   XCHG,  T1 LHLD,  D DAD,  T1 0A + SHLD,  T1 6 + LHLD,  XCHG,  YDSP LHLD,
  79.   D DAD,  YDSP SHLD,  ELSE,  YDSP LHLD,  THEN,  0E106 SHLD,
  80.   T1 8 + LHLD,  H DCX,  T1 8 + SHLD,  H A MOV,  L ORA,  JNZ,
  81.  
  82. % SET XDSP,YDSP TO XDSP1,YDSP1 AND DISPLAY LAST POINT
  83.   THEN, THEN, THEN,
  84.   XDSP1 LHLD,  XDSP SHLD,  0E104 SHLD,
  85.   YDSP1 LHLD,  YDSP SHLD,  0E106 SHLD,
  86.   NEXT JMP,  >
  87.  
  88. % X0 Y0 X1 Y1 LINE
  89. % DRAWS A LINE FROM (X0,Y0) TO (X1,Y1)
  90. 'LINE : DSWAP MOVE DRAW ;
  91.  
  92. % X0 Y0 X1 Y1 BOX
  93. % DRAWS A BOX WITH (X0,Y0) AT LOWER LEFT CORNER, (X1,Y1) AT UPPER RIGHT
  94. 'BOX : DOVER MOVE 3OVER OVER DRAW DDUP DRAW OVER 3OVER DRAW 2DROP DRAW ;
  95.  
  96. 0 'N VARIABLE
  97. 0 'XMIN VARIABLE
  98. 0 'XDEL VARIABLE
  99. 0 'YMIN VARIABLE
  100. 0 'YDEL VARIABLE
  101. 0 'VMIN VARIABLE
  102. 0 'VDEL VARIABLE
  103.  
  104. 'SETSCALE : OVER - VDEL ! VMIN ! OVER - YDEL ! YMIN ! OVER - XDEL ! XMIN ! ;
  105.  
  106. 'XSCALE : XDEL @ N @ 1- */ XMIN @ + ;
  107. 'YSCALE : VMIN @ - 0 MAX VDEL @ MIN YDEL @ VDEL @ */ YMIN @ + ;
  108.  
  109. 'GRAPH : N ! XMIN @ YMIN @ OVER XDEL @ + OVER YDEL @ + BOX
  110.   XMIN @ OVER @ YSCALE MOVE
  111.   N @ 0 DO I XSCALE OVER I 2* + @ YSCALE DRAW LOOP DROP ;
  112.  
  113. RADIX !
  114. ;F
  115.  
  116.  
  117.  
  118. ***EOF***
  119.  
  120.