This page (revision-3) was last changed on 03-Feb-2023 15:21 by Carsten Strotmann 

This page was created on 13-Mar-2010 14:43 by Carsten Strotmann

Only authorized users are allowed to rename pages.

Only authorized users are allowed to delete pages.

Page revision history

Version Date Modified Size Author Changes ... Change note
3 03-Feb-2023 15:21 12 KB Carsten Strotmann to previous
2 13-Mar-2010 14:45 12 KB Carsten Strotmann to previous | to last
1 13-Mar-2010 14:43 3 KB Carsten Strotmann to last

Page References

Incoming links Outgoing links

Version management

Difference between version and

At line 10 added 3 lines
[{TableOfContents }]
At line 337 added 565 lines
! 1st Version
{{{
;********************************
;** FAST GRAPH **
;** PHOENIX SOFTCREW 1990 **
;** SCHNELLE GRAPHIKROUTINEN **
;** FUER GRAPHICS 8 **
;********************************
BYTE FUNC Sgn (INT wert)
Byte u
IF wert<0 THEN
u=-1
ELSE
u=1
FI
RETURN (u)
CARD FUNC Abs (CARD wert)
IF wert<0 THEN
wert=-wert
FI
RETURN (wert)
PROC Point (CARD x,BYTE y,mode)
BYTE yp=$54
CARD savmsc=$58,xp=$55
BYTE ARRAY pixt=[ $80 $40 $20 $10 $08 $04 $02 $01 ]
BYTE POINTER z
xp=x
yp=y
mode==MOD 2
IF x<320 AND x>=0 AND y>=0 AND y<192 THEN
z=savmsc
z==+y*40
z==+(x RSH 3)
IF mode=1 THEN
z^==%pixt(x&7)
ELSE
z^==!pixt(x&7)
FI
FI
RETURN
PROC Line (CARD x,BYTE y)
BYTE yp=$54,d1x,d2x,d1y,d2y
CARD xp=$55,xa,ya,u,v,n,m,zp,s,z
xa=xp
ya=yp
u=x-xa
v=y-ya
d1x=Sgn (u)
d2x=Sgn (u)
d1y=Sgn (v)
d2y=0
m=Abs (u)
n=Abs (v)
IF n>m THEN
d2x=0
d2y=d1y
zp=m
m=n
n=zp
FI
s=m/2
z=0
DO
Point (xa,ya,1)
s==+n
IF m<s THEN
s==-m
xa==+d1x
ya==+d1y
ELSE
xa==+d2x
ya==+d2y
FI
z==+1
UNTIL z=m
OD
RETURN
PROC Circle(INT x,y,r,c)
INT Phi,Phiy,Phixy,
x1,y1
Phi=0
x1=r
y1=0
color=c
DO
Phiy=Phi+y1+y1+1
Phixy=Phiy-x1-x1+1
Point(x+x1,y+y1,1) ;
Point(x-x1,y+y1,1) ;|
Point(x+x1,y-y1,1) ;|
Point(x-x1,y-y1,1) ; 8 way symmetry
Point(x+y1,y+x1,1) ; plotting points
Point(x-y1,y+x1,1) ;|
Point(x+y1,y-x1,1) ;|
Point(x-y1,y-x1,1) ;
Phi=Phiy
y1=y1+1
IF Abs(Phixy)+0<Abs(Phiy) THEN
Phi=Phixy
x1=x1-1
FI
UNTIL y1>x1
OD
RETURN
}}}
! 2nd version
{{{
;********************************
;** FAST GRAPH **
;** PHOENIX SOFTCREW 1990 **
;** FOR GRAPHICS 8 **
;********************************
BYTE FUNC Sgn (INT wert)
Byte u
IF wert<0 THEN
u=-1
ELSE
u=1
FI
RETURN (u)
CARD FUNC Abs (INT wert)
IF wert<0 THEN
wert=-wert
FI
RETURN (wert)
PROC Point (CARD x,BYTE y)
BYTE yp=$54,oldy=$5A,mode
CARD savmsc=$58,xp=$55,oldx=$5B
BYTE ARRAY pixt=[$80 $40 $20 $10 $8 $4 $2 $1]
BYTE POINTER z
xp=x
yp=y
oldx=x
oldy=y
mode=color
mode==MOD 2
IF x<320 AND x>=0 AND y>=0 AND y<192 THEN
z=savmsc
z==+y*40
z==+(x RSH 3)
IF mode=1 THEN
z^==%pixt(x&7)
ELSE
z^==!pixt(x&7)
FI
FI
RETURN
PROC Line (CARD x,BYTE y)
BYTE yp=$54
CARD xp=$55,z
INT xs,ys
DrawTo (x,y)
RETURN
PROC Circle(INT x,y,r)
INT Phi,Phiy,Phixy,
x1,y1
Phi=0
x1=r
y1=0
DO
Phiy=Phi+y1+y1+1
Phixy=Phiy-x1-x1+1
Point(x+x1,y+y1) ;
Point(x-x1,y+y1) ;|
Point(x+x1,y-y1) ;|
Point(x-x1,y-y1) ; 8 way symmetry
Point(x+y1,y+x1) ; plotting points
Point(x-y1,y+x1) ;|
Point(x+y1,y-x1) ;|
Point(x-y1,y-x1) ;
Phi=Phiy
y1=y1+1
IF Abs(Phixy)+0<Abs(Phiy) THEN
Phi=Phixy
x1=x1-1
FI
UNTIL y1>x1
OD
RETURN
PROC Disk (CARD x,y,r)
BYTE u
FOR u=0 TO r
DO
Circle (x,y,u)
OD
RETURN
PROC Frame (CARD x1,y1,x2,y2)
Point (x1,y1)
Line (x2,y1)
Line (x2,y2)
Line (x1,y2)
Line (x1,y1)
RETURN
PROC Box (CARD x1,y1,x2,y2)
BYTE xs
CARD xw
IF x1<x2 THEN
xs=1
ELSE
xs=-1
FI
FOR xw=x1 TO x2 STEP xs
DO
Plot (xw,y1)
Line (xw,y2)
OD
RETURN
}}}
! Assembler Source (BIBO Assembler)
{{{
00010 .LI OFF
00020 ******************************
00030 * *
00040 * PROGRAMM:SCHNELLER GR8.PLOT*
00050 * AUTOR :CARSTEN STROTMANN *
00060 * DATUM :12.12.90 *
00070 * VERSION :.2 *
00080 * FUER :ACTION! *
00090 * *
00100 ******************************
00110 ;
00120 .OR $7000
00130 .OF "D:GR8.COM"
00140 ;
00150 ROWCRS = $54
00160 COLCRS = $55
00170 ROWAC = $70
00180 COLAC = $72
00190 ATACHR = $2FB
00200 SAVMSC = $58
00210 OLDROW = $5A
00220 OLDCOL = $5B
00230 ZAEHLER = $E4
00240 DELTAX = $77
00250 DELTAY = $76
00260 XFLAG = $74
00270 YFLAG = $75
00280 HILFA = $E9
00290 HILFB = $EB
00300 HILFT = $ED
00310 HLP1 = $E6
00320 HLP2 = $E7
00330 HLP3 = $E8
00340 TXTROW = $290
00350 TXTCOL = $291
00360 CADR = $70
00370 CHBAS = $2F4
00380 CHAR = $2FA
00390 ;
00400 ;
00410 CALC
00420 STA COLCRS
00430 STX COLCRS+1
00440 STY ROWCRS
00450 ;
00460 LDA #0
00470 STA HLP1
00480 STA HLP2
00490 STA HLP3
00500 ;
00510 TYA
00520 ASL
00530 ROL HLP1
00540 ASL
00550 ROL HLP1
00560 ASL
00570 ROL HLP1 ;Y*8
00580 STA HLP2
00590 LDX HLP1
00600 STX HLP3
00610 ASL
00620 ROL HLP1
00630 ASL
00640 ROL HLP1 ;Y*32
00650 ;
00660 CLC
00670 ADC HLP2
00680 STA HLP2
00690 LDA HLP3
00700 ADC HLP1
00710 STA HLP3 ;*8+*32=*40
00720 ;
00730 CLC
00740 LDA SAVMSC
00750 ADC HLP2
00760 STA ROWAC
00770 LDA SAVMSC+1
00780 ADC HLP3
00790 STA ROWAC+1
00800 ;
00810 LDA COLCRS
00820 AND #7
00830 TAX
00840 LDA COLCRS
00850 LSR
00860 LSR
00870 LSR
00880 TAY
00890 LDA COLCRS+1
00900 BEQ .1
00910 TYA
00920 CLC
00930 ADC #32
00940 TAY
00950 ;
00960 .1
00970 LDA ATACHR
00980 BEQ CLEAR
00990 CMP #1
01000 BEQ PLOT
01010 CMP #2
01020 BEQ XPLOT
01030 ;
01040 LOCATE
01050 LDA (ROWAC),Y
01060 AND PTAB,X
01070 STA ATACHR
01080 RTS
01090 ;
01100 PLOT
01110 LDA (ROWAC),Y
01120 ORA PTAB,X
01130 STA (ROWAC),Y
01140 RTS
01150 ;
01160 XPLOT
01170 LDA (ROWAC),Y
01180 EOR PTAB,X
01190 STA (ROWAC),Y
01200 RTS
01210 ;
01220 CLEAR
01230 LDA (ROWAC),Y
01240 AND CTAB,X
01250 STA (ROWAC),Y
01260 RTS
01270 ------------------------------
01280 * BITTABELLE
01290 PTAB .HX 8040201008040201
01300 CTAB .HX 7FBFDFEFF7FBFDFE
01310 ------------------------------
01320 SHAPE
01330 ; ZEICHENSATZ AUF GRAFIK
01340 ; BILDSCHIRM
01350 ; A = X-POSITION LSB
01360 ; X = X-POSITION MSB
01370 ; Y = Y-POSITION
01380 ; CHAR=ZEICHEN IM INT-CODE
01390 ;
01400 STA TXTCOL
01410 STX TXTCOL+1
01420 STY TXTROW
01430 ;
01440 LDA #0
01450 STA HLP1
01460 STA HLP2
01470 STA HLP3
01480 ;
01490 LDA CHBAS
01500 STA CADR+1
01510 LDA #0
01520 STA CADR
01530 ;
01540 LDA CHAR
01550 ASL
01560 ROL HLP1
01570 ASL
01580 ROL HLP1
01590 ASL
01600 ROL HLP1
01610 CLC
01620 ADC CADR
01630 STA CADR
01640 LDA HLP1
01650 ADC CADR+1
01660 STA CADR+1
01670 LDA #0
01680 STA HLP1
01690 ;
01700 ; ZEICHEN UEBERTRAGEN
01710 ;
01720 LDX #16
01730 LDY #8
01740 .1
01750 LDA (CADR),Y
01760 STA CTABL,X
01770 DEX
01780 DEX
01790 DEY
01800 BNE .1
01810 ;
01820 ; ZEICHEN SCHIFTEN
01830 ;
01840 LDA TXTCOL
01850 AND #7
01860 TAY
01870 .3
01880 LDX #16
01890 ;
01900 .2
01910 LSR CTABL,X
01920 ROR CTABL+1,X
01930 DEX
01940 DEX
01950 BNE .2
01960 ;
01970 DEY
01980 BNE .3
01990 ;
02000 ; ADRESSE ERRECHNEN
02010 ;
02020 LDA TXTROW
02030 ASL
02040 ROL HLP1
02050 ASL
02060 ROL HLP1
02070 ASL
02080 ROL HLP1
02090 LDA HLP1
02100 STA HLP2
02110 LDX HLP1
02120 STX HLP3
02130 ASL
02140 ROL HLP1
02150 ASL
02160 ROL HLP1
02170 CLC
02180 ADC HLP2
02190 STA HLP2
02200 LDA HLP3
02210 ADC HLP1
02220 STA HLP3
02230 ;
02240 CLC
02250 LDA SAVMSC
02260 ADC HLP1
02270 STA ROWAC
02280 LDA SAVMSC+1
02290 ADC HLP3
02300 STA ROWAC+1
02310 ;
02320 LDA TXTCOL
02330 LSR
02340 LSR
02350 LSR
02360 TAY
02370 LDA TXTCOL+1
02380 BEQ .4
02390 TYA
02400 CLC
02410 ADC #32
02420 TAY
02430 ;
02440 ; ZEICHEN AUF BILDSCHIRM
02450 ;
02460 .4
02470 LDX #8
02480 .6
02490 LDA (ROWAC),Y
02500 EOR CTAB,X
02510 STA (ROWAC),Y
02520 INY
02530 LDA (ROWAC),Y
02540 EOR CTAB+1,X
02550 STA (ROWAC),Y
02560 DEY
02570 CLC
02580 LDA ROWAC
02590 ADC #40
02600 STA ROWAC
02610 BCC .5
02620 INC ROWAC+1
02630 .5 DEX
02640 BNE .6
02650 ;
02660 RTS
02670 ------------------------------
02680 ; BUFFERTABLLE FUER ZEICHEN
02690 CTABL
02700 .HX 0000
02710 .HX 0000
02720 .HX 0000
02730 .HX 0000
02740 .HX 0000
02750 .HX 0000
02760 .HX 0000
02770 .HX 0000
02780 ------------------------------
}}}