File SYMBOL.SB (8k SABR macro assembler source file)

Directory of image this file is from
This file as a plain text file

/ 7	OS/8 PLOTTER/DISPLAY SOFTWARE
/ 
/      SYMBOL.SB	[ DRAFTING LETTER SET ]
/ 
/      AUFBAU DER KOORDINATENTABELLE
/ 
/      I-----------------------------------------------I
/      I   I   I   I   I   I   I   I   I   I   I 1 I 1 I
/      I 0 I 1 I 2 I 3 I 4 I 5 I 6 I 7 I 8 I 9 I 0 I 1 I
/      I-----------------------------------------------I
/      I           I           I           I           I
/      I     Y1    I     X1    I     Y2    I     X2    I
/      I           I           I           I           I
/      I-----------------------------------------------I
/ 
/      Y1,X1,Y2,X2 :
/ 
/      0 ... 6         KOORDINATEN
/ 
/      07              PEN-CHANGE
/ 
/      77 [ Y1,X1 ]    CHAR-ENDE
/ 
/      SUBROUTINE SYMBOL(XPAGE,YPAGE,HEIGH,IBCD,ANGLE,NC)
	LAP
\XPAGE,	BLOCK	2
\YPAGE,	BLOCK	2
\HEIGH,	BLOCK	2
\IBCD,	BLOCK	2
\ANGLE,	BLOCK	2
\NC,	BLOCK	2
\X1,	BLOCK	3
\Y1,	BLOCK	3
\H,	BLOCK	3
\X,	BLOCK	3
\Y,	BLOCK	3
\OLDH,	BLOCK	3
\OLDA,	BLOCK	3
\S,	BLOCK	3
\C,	BLOCK	3
\IP,	BLOCK	1
\I,	BLOCK	1
\J,	BLOCK	1
\K,	BLOCK	1
\L,	BLOCK	1
\IX,	BLOCK	1
\IY,	BLOCK	1
\X2,	BLOCK	3
\Y2,	BLOCK	3
\TAL,	1756;3146;3146	/ 0.1
\ASPS,	BLOCK	3
\ASPC,	BLOCK	3
\ASP,	2014;0;0		/ 1.0
\SPAS,	BLOCK	3
\SPAC,	BLOCK	3
\SPA,	2036;0;0		/ 6.0
]A,	BLOCK	3
]11,	1765;2525;2525		/ 0.1666667
]6,	2036;0;0		/ 6.0
]3,	2127;6340;0		/ 999.0
	EAP
	ENTRY	SYMBO
	DUMMY	\XPAGE
	DUMMY	\YPAGE
	DUMMY	\HEIGH
	DUMMY	\IBCD
	DUMMY	\ANGLE
	DUMMY	\NC
	OPDEF	BSW	7002
	OPDEF	SNC	7650
	OPDEF	TADI	1400
	OPDEF	JMPI	5400
XPNT,	\XPAGE
PNTR,	0
CNTR,	0
SYMBO,	BLOCK	2
	CLA CLL
	TAD	XPNT
	DCA	PNTR
	TAD	(-14
	DCA	CNTR
A1,	TAD I	SYMBO
	INC	SYMBO#
	DCA I	PNTR
	INC	PNTR
	ISZ	CNTR
	JMP	A1
/-------------------------------------------------------
	TAD	\IBCD
	DCA	STR
	TAD	\IBCD#
	DCA	STR#
	CALL	1,IFAD
	ARG	\XPAGE
	CALL	1,STO
	ARG	\X1
	CALL	1,IFAD
	ARG	\YPAGE
	CALL	1,STO
	ARG	\Y1
	CALL	1,IFAD
	ARG	\HEIGH
	CALL	1,STO
	ARG	\H
	CALL	1,IFAD
	ARG	\ANGLE
	CALL	1,STO
	ARG	\X2
	TAD I	\NC
	DCA	\NC
/------------------------------------------------------
	TAD	\H	/ SET MODE CALL ?
	SPC
	JMP	\1000	/ YES :
\80,	CALL	1,FAD	/ XPAGE = 999. ?
	ARG	\X1
	JMS	IF999
	SNC
	JMP	\100	/ YES :
\90,	CALL	2,FMOV	/ X = XPAGE
	ARG	\X1
	ARG	\X
\100,	CALL	1,FAD	/ YPAGE = 999. ?
	ARG	\Y1
	JMS	IF999
	SNC
	JMP	\200	/ YES :
\150,	CALL	2,FMOV	/ Y = YPAGE
	ARG	\Y1
	ARG	\Y
/
/	SIN UND COS WERDEN NUR AUFGERUFEN, WENN SICH DIE
/	ZEICHENHOEHE ODER DER ZEICHENWINKEL AENDERN.
/
\200,	CALL	1,FAD	/ OLDH = HEIGH ?
	ARG	\H
	CALL	1,FSB
	ARG	\OLDH
	TAD	ACH
	CALL	0,CLEAR
	SNC
	JMP	\300	/ YES :
\250,	CALL	1,FAD	/ H = HEIGH * 0.166666
	ARG	\H
	CALL	1,FMP
	ARG	]11
	CALL	1,STO
	ARG	\H
	CALL	2,FMOV	/ OLDH = HEIGH
	ARG	\H
	ARG	\OLDH
	JMP	\400	/ GOTO 400
\300,	CALL	1,FAD	/ OLDA = ANGLE ?
	ARG	\X2
	CALL	1,FSB
	ARG	\OLDA
	TAD	ACH
	CALL	0,CLEAR
	SNC
	JMP	\500	/ YES :
\400,	CALL	2,FMOV	/ OLDA = ANGLE
	ARG	\X2
	ARG	\OLDA
	CALL	1,TSIN	/ S = TSIN(OLDA)*H
	ARG	\OLDA
	CALL	1,FMP
	ARG	\H
	CALL	1,STO
	ARG	\S
	CALL	1,TCOS	/ C = TCOS(OLDA)*H
	ARG	\OLDA
	CALL	1,FMP
	ARG	\H
	CALL	1,STO
	ARG	\C
/------------------------------------------------------
	CALL	1,FAD
	ARG	\ASP
	CALL	1,FMP
	ARG	\S
	CALL	1,STO
	ARG	\ASPS	/ ASP*S
	CALL	1,FAD
	ARG	\ASP
	CALL	1,FMP
	ARG	\C
	CALL	1,STO
	ARG	\ASPC	/ ASP*C
	CALL	1,FAD
	ARG	\SPA
	CALL	1,FMP
	ARG	\S
	CALL	1,STO
	ARG	\SPAS	/ SPA*S
	CALL	1,FAD
	ARG	\SPA
	CALL	1,FMP
	ARG	\C
	CALL	1,STO
	ARG	\SPAC	/ SPA*C
/------------------------------------------------------
\500,	CLA CLL CML IAC RAL / IP = 3
	DCA	\IP
/
/	BEI ZENTRIERTEN ZEICHEN SICHTBAR VERBINDEN ?
/
	CLA CLL CML IAC RAL/ NC <=  -2 ?
	TAD	\NC
	SMA CLA
	JMP	\540	/ NO :
\520,	CLA CLL IAC RAL	/ IP = 2
	DCA	\IP
\540,	CALL	3,PLOT	
	ARG	\X
	ARG	\Y
	ARG	\IP
	TAD	\NC	/ IF NC = 0
	SNA CLA
	IAC		/ THEN I = 2
	IAC		/ ELSE I = 1
	DCA	\I
/
/	STRINGANFANG
/
\600,	CALL	2,LGET	/ J = LGET(IBCD,I)
STR,	ARG	0	/ STRINGADRESSE
	ARG	\I
	DCA	\J
	TAD	\NC	/ NC < 0 ?
	SPC
	JMP	\630	/ YES :
	TAD	(20
	TAD	\J
	DCA	\J
/
/	ZEICHENANFANG
/
\630,	TAD	\J	/ J = IVER(J)
	TAD	\IVER
	DCA	7
	TADI	7
	DCA	\J1#	/ 1. KOORDINATENPAAR
	IAC		/ L = 1
	DCA	\L
	CLA CLL IAC RAL	/ IP = 2
	DCA	\IP
\700,	CALL	2,LGET	/ K = LGET(IZEI(J),L)
\J1,	ARG	\IZEI
	ARG	\L
	DCA	\K
	TAD	\K	/ K = 7 ? PEN CHANGE ?
	TAD	(-7
	SZA CLA
	JMP	\730	/ NO :
	TAD	\IP	/ IP = 5 - IP
	CIA
	TAD	(5
	DCA	\IP
	JMP	\810	/ GOTO 810
\730,	TAD	\K	/ K = 63 ? CHAR ENDE ?
	TAD	(-77
	SNC
	JMP	\900	/ YES :
\740,	TAD	\K
	AND	(7
	DCA	\IX
	TAD	\K
	RAR
	RTR
	AND	(7
	DCA	\IY
	TAD	\NC	/ NC >= 0 ?
	SMA CLA
	JMP	\800	/ YES :

/ / ZENTRIERTE ZEICHEN SIND MIT OFFSET VERSEHEN ! / \710, CLA CMA CLL RTL / IX = IX - 3 TAD \IX DCA \IX CLA CMA CLL RTL / IY = IY - 3 TAD \IY DCA \IY \800, TAD \IX / X2 = IX CALL 0,FLOT CALL 1,STO ARG \X2 TAD \IY / Y2 = IY CALL 0,FLOT CALL 1,STO ARG \Y2 CALL 1,FAD ARG \Y2 CALL 1,FMP ARG \TAL CALL 1,FAD ARG \X2 CALL 1,STO ARG ]A / = (IX+IY*TAL) CALL 1,FAD ARG ]A CALL 1,FMP ARG \ASPC CALL 1,FAD ARG \X CALL 1,STO ARG \X1 / = X+(IX+IY*TAL)*ASP*C CALL 1,FAD ARG \Y2 CALL 1,FMP ARG \S / = IY*S CALL 0,CHS CALL 1,FAD ARG \X1 CALL 1,STO ARG \X1 / = X+(IX+IY*TAL)*ASP*C-Y2*S CALL 1,FAD ARG ]A CALL 1,FMP ARG \ASPS CALL 1,FAD ARG \Y CALL 1,STO ARG \Y1 / = Y+(IX+IY*TAL)*ASP*S CALL 1,FAD ARG \Y2 CALL 1,FMP ARG \C CALL 1,FAD ARG \Y1 CALL 1,STO ARG \Y1 / = Y+(IX+IY*TAL)*ASP*S+IY*C CALL 3,PLOT ARG \X1 ARG \Y1 ARG \IP \810, INC \L / L = L + 1 JMP \700 / GOTO 700 \900, TAD \NC / IF NC <= 0 ? SPA SNA CLA JMP \1100 / YES : \910, INC \I / I = I + 1 CALL 1,FAD / X = X + SPAC ARG \SPAC CALL 1,FAD ARG \X CALL 1,STO ARG \X CALL 1,FAD / Y = Y + SPAS ARG \SPAS CALL 1,FAD ARG \Y CALL 1,STO ARG \Y CALL 3,PLOT ARG \X ARG \Y ARG (3 TAD \NC / IF I > NC ? CIA TAD \I SPA SNA CLA JMP \600 / NO : JMP \1100 / YES : / / SET MODE CALL PARAMETER UEBERNEHMEN ! / \1000, CALL 1,FAD / IF XPAGE = 999. ? ARG \X1 JMS IF999 SNC JMP \1020 / YES : \1010, CALL 2,FMOV / ASP = XPAGE ARG \X1 ARG \ASP CALL 1,STO ARG \OLDH \1020, CALL 1,FAD / IF YPAGE = 999. ? ARG \Y1 JMS IF999 SNC JMP \1040 / YES : \1030, CALL 2,FMOV / TAL = YPAGE ARG \Y1 ARG \TAL \1040, CALL 1,FAD / IF ANGLE = 999. ? ARG \X2 JMS IF999 SNC JMP \1100 / YES : \1050, CALL 1,FAD / SPA = ANGLE * 6 * ASP ARG \X2 CALL 1,FMP ARG ]6 CALL 1,FMP ARG \ASP CALL 1,STO ARG \SPA CALL 1,STO ARG \OLDH \1100, RETRN SYMBO / RETURN IF999, 0 / FAC = FAC - 999. CALL 1,FSB ARG ]3 TAD ACH CALL 0,CLEAR JMP I IF999 ENTRY FMOV DUMMY FMOV1 DUMMY FMOV2 FMOV1, BLOCK 2 FMOV2, BLOCK 2 FMOV3, FMOV1 FMOV4, 0 FMOV5, 0 FMOV, BLOCK 2 TAD FMOV3 DCA FMOV4 TAD (-4 DCA FMOV5 FMOV6, TAD I FMOV INC FMOV# DCA I FMOV4 INC FMOV4 ISZ FMOV5 JMP FMOV6 CALL 1,IFAD ARG FMOV1 CALL 1,ISTO ARG FMOV2 RETRN FMOV



Feel free to contact me, David Gesswein djg@pdp8online.com with any questions, comments on the web site, or if you have related equipment, documentation, software etc. you are willing to part with.  I am interested in anything PDP-8 related, computers, peripherals used with them, DEC or third party, or documentation. 

PDP-8 Home Page   PDP-8 Site Map   PDP-8 Site Search