mirror of
https://github.com/moshix/mvs.git
synced 2026-05-04 07:18:47 +00:00
121 lines
3.5 KiB
Plaintext
121 lines
3.5 KiB
Plaintext
TITLE 'PLOTXY.ALC - PLOT Y=SIN(X) USING 320 X 200 COLOR SCREEN'
|
||
*
|
||
* PGM-ID. GRAPH.ALC
|
||
* AUTHOR. DON HIGGINS
|
||
* DATE. 08/20/87
|
||
* REMARKS. PLOT SIN WAVE ON 320X200 SCREEN USING 80X87 SCIENTIFIC
|
||
* SUBROUTINE PACKAGE SIN FUNCTION.
|
||
*
|
||
PLOTXY CSECT
|
||
LR R12,R15
|
||
USING PLOTXY,R12
|
||
LA R2,=C' PLOTXY.ALC GRAPH OF SIN WAVE$'
|
||
SVC WTO
|
||
LA R2,=C' THIS PGM REQUIRES COLOR 320X200 MONITOR AND 80X87$'
|
||
SVC WTO
|
||
LA R2,=C' HIT ANY KEY TO START$'
|
||
SVC WTO
|
||
SVC READCON
|
||
ICM R0,B'0011',=AL1(VIOSETM,VIOM320)
|
||
SVC VIDEOIO SET GRAPHIC 320 X 200 MODE
|
||
LD FR0,=D'0'
|
||
STD FR0,XMIN XMIN=0.
|
||
STD FR0,X X=XMIN
|
||
L R15,=V(PI)
|
||
BALR R14,R15
|
||
MD FR0,=D'2'
|
||
STD FR0,XMAX XMAX=2*PI
|
||
SD FR0,XMIN
|
||
DD FR0,XPIXILS
|
||
STD FR0,XINC XINC=(XMAX-XMIN)/XPIXILS
|
||
LD FR2,=D'1'
|
||
DDR FR2,FR0
|
||
STD FR2,XSCALE XSCALE=XPIXILS/(XMAX-XMIN)
|
||
LD FR0,=D'-1'
|
||
STD FR0,YMIN YMIN=-1 FOR SIN
|
||
LD FR0,=D'1'
|
||
STD FR0,YMAX YMAX=1 FOR SIN
|
||
SD FR0,YMIN
|
||
LD FR2,YPIXILS
|
||
DDR FR2,FR0
|
||
STD FR2,YSCALE YSCALE=YPIXILS/(YMAX-YMIN)
|
||
LOOP EQU * PLOT Y=F(X) FOR X=XMIN,XMAX,XINC
|
||
LD FR0,X
|
||
LDR FR2,FR0 SAVE X IN FR2 FOR DEBUG
|
||
L R15,=V(SIN)
|
||
BALR R14,R15 FR0=SIN(X)
|
||
LDR FR4,FR0 SAVE SIN(X) IN FR4 FOR DEBUG
|
||
STD FR0,Y
|
||
BAL R14,PLOT
|
||
LD FR0,X
|
||
AD FR0,XINC
|
||
STD FR0,X
|
||
CD FR0,XMAX
|
||
BL LOOP
|
||
EOJ EQU *
|
||
SVC READCON HOLD SCREEN UNTIL NEXT KEY
|
||
ICM R0,B'0011',=AL1(VIOSETM,VIOM2480)
|
||
SVC VIDEOIO SET 24X80 CHARACTER MODE
|
||
SVC EXIT EXIT TO MS-DOS
|
||
PLOT EQU * PLOT (X,Y) SCALED TO 320X200 SCREEN
|
||
ST R14,SAVE14
|
||
LD FR0,Y
|
||
SD FR0,YMIN
|
||
MD FR0,YSCALE
|
||
L R15,=V(INT)
|
||
BALR R14,R15 R0=INT((Y-YMIN)*YSCALE)
|
||
ST R0,IY
|
||
LR R4,R0 SAVE IY IN R4 FOR DEBUG
|
||
LD FR0,X
|
||
SD FR0,XMIN
|
||
MD FR0,XSCALE
|
||
L R15,=V(INT)
|
||
BALR R14,R15 R0=INT((X-XMIN)*XSCALE)
|
||
ST R0,IX
|
||
LR R2,R0 SAVE IX IN R2 FOR DEBUG
|
||
ICM R0,B'0011',=AL1(VIOPSET,VIOPCV)
|
||
L R14,IX
|
||
L R15,IYPIXILS
|
||
S R15,IY
|
||
SVC VIDEOIO SET PIXIL AT (IX,IY)
|
||
L R14,SAVE14
|
||
BR R14
|
||
R0 EQU 0
|
||
R1 EQU 1
|
||
R2 EQU 2
|
||
R3 EQU 3
|
||
R4 EQU 4
|
||
R5 EQU 5
|
||
R12 EQU 12
|
||
R14 EQU 14
|
||
R15 EQU 15
|
||
FR0 EQU 0 FLOATING POINT REG 0
|
||
FR2 EQU 2
|
||
FR4 EQU 4
|
||
FR6 EQU 6
|
||
VIOSETM EQU 0 AH VALUE FOR VIDEOIO SET MODE (SEE A-48)
|
||
VIOM320 EQU 4 AL VALUE FOR 320 X 200 MODE
|
||
VIOM2480 EQU 2 AL VALUE FOR 24 X 80 BW CHARACTER MODE
|
||
VIOPSET EQU 12 AH VALUE FOR VIDEOIO SET BIT (SEE A-49)
|
||
VIOPCV EQU 1 AL VALUE FOR COLOR VALUE
|
||
VIDEOIO EQU X'80'+X'10' 8086 VIDEO BIOS INTERRUPT SVC
|
||
EXIT EQU 0 EXIT TO MS-DOS
|
||
WTO EQU 209 WRITE TO OPERATOR
|
||
READCON EQU 207 READ KEYBOARD CHARACTER INTO R0
|
||
XPIXILS DC D'318' 320-2 TO AVOID MISSING PIXILS AT EDGE
|
||
YPIXILS DC D'198' 200-2 TO AVOID MISSING PIXILS AT EDGE
|
||
IYPIXILS DC F'199' REVERSE IY TO MOVE ORIGIN FROM UPPER LEFT TO LOWER
|
||
X DC D'0'
|
||
XMAX DC D'0'
|
||
XMIN DC D'0'
|
||
XINC DC D'0' CALC (XMAX-XMIN)/XPIXILS
|
||
XSCALE DC D'0' CALC XPIXILS/(XMAX-XMIN)
|
||
Y DC D'0'
|
||
YMAX DC D'0'
|
||
YMIN DC D'0'
|
||
YSCALE DC D'0' CALC YPIXILS/(YMAX-YMIN)
|
||
IX DC F'0'
|
||
IY DC F'0'
|
||
SAVE14 DC A(0)
|
||
END PLOTXY
|
||
|