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 >
Wrap
Text File
|
1985-07-13
|
4KB
|
120 lines
% ***************************************************************************
% ** COPYRIGHT (C) MASSACHUSETTS INSTITUTE OF TECHNOLOGY AND HARVARD **
% ** UNIVERSITY, BIOMEDICAL ENGINEERING CENTER 1977. ALL RIGHTS RESERVED. **
% ***************************************************************************
% GRAPHICS PACKAGE FOR DUAL D/A CARD
% DUAL D/A CARD MUST BE IN SLOT E1
% J. SACHS 2/9/77
RADIX @ HEX
0 'XDSP VARIABLE % CURRENT X
0 'YDSP VARIABLE % CURRENT Y
0 'XDSP1 VARIABLE % FINAL X
0 'YDSP1 VARIABLE % FINAL Y
% INITIALIZE DUAL D/A CARD
% DISPLAY ON Y COORD; ENTER STORAGE MODE
'INIT-DISPLAY : 3 0E101 B! 6 0E102 B! ;
% ERASE STORAGE SCOPE
'ERASE : 2 0E102 B! INIT-DISPLAY ;
% X Y DOT
% DISPLAY A DOT (X,Y) ON STACK
'DOT CODE< D POP, H POP, 0E104 SHLD, XCHG, 0E106 SHLD, NEXT JMP, >
% X Y MOVE
% SETS XDSP, YDSP
'MOVE CODE< H POP, YDSP SHLD, H POP, XDSP SHLD, NEXT JMP, >
% X Y DRAW
% DRAWS A LINE FROM (XDSP,YDSP) TO (X,Y)
% THEN SETS (XDSP,YDSP) TO (X,Y)
'DRAW CODE<
% COMPUTE DELTA Y, Y INCREMENT
H POP, YDSP1 SHLD, XCHG,
YDSP LHLD, -HL CALL, D DAD, H A MOV, A ORA, 2 D LXI,
IFP, -HL CALL, -2 D LXI, THEN, T1 2 + SHLD, XCHG, T1 6 + SHLD,
% COMPUTE DELTA X, X INCREMENT
H POP, XDSP1 SHLD, XCHG,
XDSP LHLD, -HL CALL, D DAD, H A MOV, A ORA, 2 D LXI,
IFP, -HL CALL, -2 D LXI, THEN, T1 SHLD, XCHG, T1 4 + SHLD,
% DISPLAY 1ST DOT OF LINE
XDSP LHLD, 0E104 SHLD, YDSP LHLD, 0E106 SHLD,
% SET COUNT TO 1/2 MAX(ABS(DELTA X),ABS(DELTA Y))
T1 2 + LHLD, -DE CALL, D DAD, H A MOV, A ORA, IFP, T1 LHLD, ELSE,
T1 2 + LHLD, THEN, H A MOV, RAR, A H MOV, L A MOV, RAR, A L MOV,
T1 8 + SHLD, H A MOV, L ORA, IFZ, 0 H LXI, T1 0A + SHLD,
% TEST FOR VERTICAL LINE
T1 LHLD, H A MOV, L ORA, IFNZ, <L
T1 8 + LHLD, H B MOV, L C MOV, T1 6 + LHLD, XCHG,
. YDSP LHLD, D DAD, YDSP SHLD, 0E106 SHLD, B DCX, B A MOV, C ORA,
JNZ, IF,
L> THEN,
% TEST FOR HORIZONTAL LINE
T1 2 + LHLD, H A MOV, L ORA, IFNZ, <L
0E101 H LXI, 2 M MVI,
T1 8 + LHLD, H B MOV, L C MOV, T1 4 + LHLD, XCHG,
. XDSP LHLD, D DAD, XDSP SHLD, 0E104 SHLD, B DCX, B A MOV, C ORA,
JNZ, 0E101 H LXI, 3 M MVI, IF,
L> THEN,
% SKEW LINE
.
T1 0A + LHLD, H A MOV, A ORA, IFM,
XCHG, T1 2 + LHLD, -HL CALL, D DAD, T1 0A + SHLD, T1 4 + LHLD,
XCHG, XDSP LHLD, D DAD, XDSP SHLD, 0E104 SHLD,
T1 0A + LHLD, H A MOV, A ORA, IFP, SWAP THEN,
XCHG, T1 LHLD, D DAD, T1 0A + SHLD, T1 6 + LHLD, XCHG, YDSP LHLD,
D DAD, YDSP SHLD, ELSE, YDSP LHLD, THEN, 0E106 SHLD,
T1 8 + LHLD, H DCX, T1 8 + SHLD, H A MOV, L ORA, JNZ,
% SET XDSP,YDSP TO XDSP1,YDSP1 AND DISPLAY LAST POINT
THEN, THEN, THEN,
XDSP1 LHLD, XDSP SHLD, 0E104 SHLD,
YDSP1 LHLD, YDSP SHLD, 0E106 SHLD,
NEXT JMP, >
% X0 Y0 X1 Y1 LINE
% DRAWS A LINE FROM (X0,Y0) TO (X1,Y1)
'LINE : DSWAP MOVE DRAW ;
% X0 Y0 X1 Y1 BOX
% DRAWS A BOX WITH (X0,Y0) AT LOWER LEFT CORNER, (X1,Y1) AT UPPER RIGHT
'BOX : DOVER MOVE 3OVER OVER DRAW DDUP DRAW OVER 3OVER DRAW 2DROP DRAW ;
0 'N VARIABLE
0 'XMIN VARIABLE
0 'XDEL VARIABLE
0 'YMIN VARIABLE
0 'YDEL VARIABLE
0 'VMIN VARIABLE
0 'VDEL VARIABLE
'SETSCALE : OVER - VDEL ! VMIN ! OVER - YDEL ! YMIN ! OVER - XDEL ! XMIN ! ;
'XSCALE : XDEL @ N @ 1- */ XMIN @ + ;
'YSCALE : VMIN @ - 0 MAX VDEL @ MIN YDEL @ VDEL @ */ YMIN @ + ;
'GRAPH : N ! XMIN @ YMIN @ OVER XDEL @ + OVER YDEL @ + BOX
XMIN @ OVER @ YSCALE MOVE
N @ 0 DO I XSCALE OVER I 2* + @ YSCALE DRAW LOOP DROP ;
RADIX !
;F
***EOF***