home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
64'er
/
64ER_CD.iso
/
87xx
/
8712b.d64
/
source.teil1
< prev
next >
Wrap
Text File
|
1995-03-30
|
28KB
|
1,337 lines
* = $801
; SPEICHERBELEGUNG:
; $E000 - $FFFF : BILD 1
; DEND - $DFFF : DATEN
; $C800 - DEND-1 : PROGRAMM
; $C780 - $C7FF : VARIABLEN
; $C700 - $C77F : VARTAB (DEFAULTS)
; $C400 - $C6FF : COSINUSTABELLE
; $C000 - $C3FF : FARBEN 1
; $A000 - $BFFF : BILD 2
; $9000 - $9FFF : PROGRAMM
; $8C00 - $8FFF : FARBEN 2
; $8800 - $8BFF : PROGRAMM
PANF = $37 ;ANFANG DER PUNKTE
PVEK = $59 ;ZEIGER AUF PUNKT
LVEK = $5B ; " " LINIE
FAC = $61 ;3BYTES
ARG = $69 ;3BYTES
HILF = $64 ;ARITHMETISCHES
;HILFSREGISTER (3BYTES)
BASIS = $29
ZERO = FAC
VIC = $D000
VONX = $5D
VONY = $5F
NACHX = $6C
NACHY = $67
DX = FAC
DY = FAC+2
DS = HILF+1
SP = HILF+2
VB = $C780 ;ANFANG VARIABLEN
ZW = VB
BA = ZW+2
BI = BA+1
EVENTL = BI+2
IMMER = EVENTL+2
LANF = IMMER+2 ;ANFANG DER LINIEN
WA = LANF+2 ;WINKEL A
WB = WA+3 ;WINKEL B
DWA = WB+3 ;DELTA WINKEL A
DWB = DWA+3 ;DELTA EINKEL B
X = DWB+3 ;VERSCHIEBUNG X
Y = X+2 ;VERSCHIEBUNG Y
Z = Y+2 ;VERSCHIEBUNG Z
DELX = Z+2 ;DELTA X
DELY = DELX+2 ;DELTA Y
DELZ = DELY+2 ;DELTA Z
DIMFLAG = DELZ+2 ;FLAG DIMENSIONRNG.
AUTOFLG = DIMFLAG+1;FLAG AUTOMATISCHE
;BASIC -
;INTERPRETATION
JOYFLG = AUTOFLG+1;FLAG JOYSTICK-
;STEUERUNG
;0=JOYSTICK
;1=AUTOMATISCH
PERSPFLG = JOYFLG+1 ;0=PARALLELP.
;1=FLUCHTP.
AUG = PERSPFLG+1;AUGPUNKT
S = AUG+2 ;SCHIRM
AS = S+2 ;S-AUG
XMIN = AS+2 ;MINIMUM VON X
YMIN = XMIN+2 ; " " Y
ZMIN = YMIN+2 ; " " Z
XMAX = ZMIN+2 ;MAXIMUM VON X
YMAX = XMAX+2 ; " " Y
ZMAX = YMAX+2 ; " " Z
VONZ = ZMAX+2
NACHZ = VONZ+2
NEG = NACHZ+2 ;NEGATIVFLAG
WINKEL = NEG+1
PMAX = WINKEL+3 ;MAX. PUNKTNR.
LMAX = PMAX+2 ;MAX. LINIENNR.
SA = LMAX+2 ;SIN(WA)
SB = SA+3 ;SIN(WB)
CA = SB+3 ;COS(WA)
CB = CA+3 ;COS(WB)
PUFF = CB+3 ;PUFFER
FRMNUM = $AD8A
GETADR = $B7F7
ILLEGAL = $B248
MOVE .SEGMENT A,B
LDA &A&
STA &B&
LDA &A&+1
STA &B&+1
.MEND
MOVEW .SEGMENT A,B
#MOVE &A&,&B&
LDA &A&+2
STA &B&+2
.MEND
MOVEI .SEGMENT IM,B
LDA #<[&IM&]
STA &B&
LDA #>[&IM&]
STA &B&+1
.MEND
MOVEVIN .SEGMENT VEK,OFFSET,AD
LDY #&OFFSET&
LDA (&VEK&),Y
STA &AD&
INY
LDA (&VEK&),Y
STA &AD&+1
.MEND
MOVENIN .SEGMENT AD,OFFSET,VEK
LDY #&OFFSET&
LDA &AD&
STA (&VEK&),Y
INY
LDA &AD&+1
STA (&VEK&),Y
.MEND
ADD .SEGMENT A,B,C
CLC
LDA &A&
ADC &B&
STA &C&
LDA &A&+1
ADC &B&+1
STA &C&+1
.MEND
ADDI .SEGMENT A,B,C
CLC
LDA #<&A&
ADC &B&
STA &C&
LDA #>&A&
ADC &B&+1
STA &C&+1
.MEND
SUB .SEGMENT A,B,C
SEC
LDA &A&
SBC &B&
STA &C&
LDA &A&+1
SBC &B&+1
STA &C&+1
.MEND
SUBI .SEGMENT A,B,C
SEC
LDA #<&A&
SBC &B&
STA &C&
LDA #>&A&
SBC &B&+1
STA &C&+1
.MEND
SHIFTR .MACRO A
CLC
BVS L1
BPL L3
BMI L2
L1 BMI L3
L2 SEC
L3 ROR &A&+1
ROR &A&
.MEND
SLADD .SEGMENT A,B,C
ASL &A&
ROL &A&+1
#ADD &A&,&B&,&C&
.MEND
SUBSR .SEGMENT A,B,C
#SUB &A&,&B&,&C&
#SHIFTR &C&
.MEND
SUBSRI .SEGMENT A,B,C
#SUBI &A&,&B&,&C&
#SHIFTR &C&
.MEND
ASHL .SEGMENT A
ASL &A&
ROL &A&+1
.MEND
SWAP .SEGMENT A,B
LDA &A&
LDX &B&
STA &B&
STX &A&
.MEND
SWAPW .SEGMENT A,B
#SWAP &A&,&B&
#SWAP &A&+1,&B&+1
.MEND
ROTR .SEGMENT A
LDA &A&+1
ASL
ROR &A&+1
ROR &A&
.MEND
T8 .SEGMENT A
LDA &A&+1
TAX
ASL
ROR &A&+1
ROR &A&
TXA
ASL
ROR &A&+1
ROR &A&
TXA
ASL
ROR &A&+1
ROR &A&
.MEND
.BYTE $0F,$08,$0A,$00,$9E,$20,$32,$30
.BYTE $36,$35,$20,$20,$20,$00,$00,$00
#MOVEI [ANFANG+OFFSET],$5F
#MOVEI [END1+OFFSET],$5A
#MOVEI END1,$58
JSR $A3BF
#MOVEI [$C500+OFFSET1],$5F
#MOVEI [MELDEND+OFFSET1],$5A
#MOVEI MELDEND,$58
JSR $A3BF
#MOVEI [$C800+OFFSET2],$5F
#MOVEI [DEND+OFFSET2],$5A
#MOVEI DEND,$58
JSR $A3BF
#MOVEI [GIGA+OFFSET3],$5F
#MOVEI [GIGAEND+OFFSET3],$5A
#MOVEI GIGAEND,$58
JSR $A3BF
JSR INITSUB
JSR $E3BF ;BASIC INIT
LDA $2B
LDY $2C
JSR $A408
LDA #<MELDUNG
LDY #>MELDUNG
JSR $E42D ;MELDUNG,NEW
JMP $A474 ;READY
OFFSET = *-$9000
* = $9000
.OFFS OFFSET
ANFANG ;
KOMMA LDA 1
PHA
LDA #$37
STA 1
JSR $AEFD
PLA
STA 1
RTS
MEMON #MOVEI NMI,$FFFA ;NMI-VEK
LDA #$34
SEI
STA 1
RTS
NMI JSR MEMOFF
JMP $E37B ;WARMSTART
MEMOFF LDA #$37
STA 1
CLI
RTS
G .VAR 1
K .VAR 2
GG .VAR 3
KG .VAR 4
COMP .MACRO AD,CON,NUM,LAB,WEIT
C .VAR &CON&
LDX &AD&+1
N .VAR &NUM&
.IF C .= 3
N .SET N-1
C .SET 1
.CEND
.IF C .= 4
N .SET N+1
C .SET 2
.CEND
.IFPL N
.IF C .= 1
BMI END
.IF &WEIT&
BEQ L2
JMP &LAB&
.ELSE
BNE &LAB&
.CEND
.ELSE
.IF &WEIT&
BPL L1
JMP &LAB&
.ELSE
BMI &LAB&
.CEND
L1 BNE END
.CEND
.ELSE
.IF C .= 2
BPL END
INX
.IF &WEIT&
BPL L2
JMP &LAB&
.ELSE
BMI &LAB&
.CEND
.ELSE
.IF &WEIT&
BMI L1
JMP &LAB&
.ELSE
BPL &LAB&
.CEND
L1 INX
BMI END
.CEND
.CEND
L2 ;
.IF C .= 1
LDA #N
CMP &AD&
.ELSE
LDA &AD&
CMP #N
.CEND
.IF NOT &WEIT&
BCC &LAB&
.ELSE
BCS END
JMP &LAB&
.CEND
END .MEND
;ANFANG GRAF
CLRSCREEN LDA BA
STA ZERO+1
LDY #0
STY ZERO
LDX #31
LDA #0
LCR1 STA (ZERO),Y
DEY
BNE LCR1
INC ZERO+1
DEX
BNE LCR1
LDY #64
LCR2 STA (ZERO),Y
DEY
BPL LCR2
RTS
GRAN LDA #$E0 ;ANFANGSSEITE
STA BA
LDA #$10
FARBEN LDX #0
FARBEN1 STA $C000,X
STA $C100,X
STA $C200,X
STA $C300,X
STA $8C00,X
STA $8D00,X
STA $8E00,X
STA $8F00,X
DEX
BNE FARBEN1
RTS
GRAUS LDA #27
STA VIC+17
LDA #200
STA VIC+22
LDA #21
STA VIC+24
LDA #3
STA $DD00
RTS
ANZEIGEN LDA #$37 ;I/O EINBLENDEN
STA 1
LAN2 LDA VIC+18 ;WARTEN AUF
BNE LAN2 ;RASTERZEILE=0
LDA VIC+17
AND #$80
BNE LAN2
LDA #$BB
STA VIC+17
LDA BA
CMP #$A0
BNE LAN1
LDA #$E0 ;BA=$A0
STA BA
LDA #$38
STA VIC+24
LDA #1
STA $DD00
LDA #$34
STA 1
RTS
LAN1 LDA #$A0 ;BA=$E0
STA BA
LDA #$08
STA VIC+24
LDA #0
STA $DD00
LDA #$34
STA 1
RTS
PKTSET .SEGMENT
LDA BI
ORA (BASIS),Y
STA (BASIS),Y
.MEND
PLOT .BLCK
LDA VONY
LSR
LSR
LSR
TAY
CLC
LDA VONY
AND #7
ADC MALTAB,Y
STA BASIS
LDA VONX
AND #$F8
ADC BASIS
STA BASIS
LDA MALTAB1,Y
ADC BA
ADC VONX+1
STA BASIS+1
LDA VONX
AND #7
TAY
LDA HOCHTAB,Y
STA BI
LDY #0
#PKTSET
RTS
MALTAB .BYTE $00,$40,$80,$C0
.BYTE $00,$40,$80,$C0
.BYTE $00,$40,$80,$C0
.BYTE $00,$40,$80,$C0
.BYTE $00,$40,$80,$C0
.BYTE $00,$40,$80,$C0
.BYTE $00
MALTAB1 .BYTE $00,$01,$02,$03
.BYTE $05,$06,$07,$08
.BYTE $0A,$0B,$0C,$0D
.BYTE $0F,$10,$11,$12
.BYTE $14,$15,$16,$17
.BYTE $19,$1A,$1B,$1C
.BYTE $1E
HOCHTAB .BYTE $80,$40,$20,$10
.BYTE $08,$04,$02,$01
.BEND
XP LSR BI
BCS LXP1
RTS
LXP1 ROR BI
CLC
LDA BASIS
ADC #8
STA BASIS
BCC LXP2
INC BASIS+1
LXP2 RTS
YP INC BASIS
BNE LYP1
INC BASIS+1
LYP1 LDA BASIS
AND #$07
BEQ LYP2
RTS
LYP2 #ADDI $138,BASIS,BASIS
RTS
XM ASL BI
BCS LXM1
RTS
LXM1 ROL BI
SEC
LDA BASIS
SBC #8
STA BASIS
LDA BASIS+1
SBC #0
STA BASIS+1
RTS
YM LDA BASIS
AND #$7
BEQ LYM1
DEC BASIS
RTS
LYM1 SEC
LDA BASIS
SBC #$39
STA BASIS
LDA BASIS+1
SBC #1
STA BASIS+1
RTS
CUT .BLCK
LAB1 JSR CUTSUB ;VON
#SWAPW VONX,NACHX
#SWAPW VONY,NACHY
JSR CUTSUB ;NACH
RTS
NOLINE PLA ;KEINE LINIE ->
PLA ;ZWEI RUECKSPRUNG-
PLA ;ADRESSEN HOLEN
PLA
RTS
CUTSUB #COMP VONY,K,100,L12,$FFFF
#COMP NACHY,G,99,NOLINE,0
L13 #COMP VONX,GG,$FF60,L15,0
#COMP NACHX,K,$FF60,NOLINE,0
L16 JSR DOYA
L20 #COMP FAC,K,$FF9C,NOLINE,0
#COMP FAC,G,99,L17,0
#MOVE FAC,VONY
#MOVEI $FF60,VONX
RTS
L17 JSR DOXD
#COMP FAC,G,159,NOLINE,$FFFF
#MOVE FAC,VONX
#MOVEI 99,VONY
RTS
L15 #COMP VONX,K,160,L18,$FFFF
#COMP NACHX,K,160,L19,0
JMP NOLINE
L19 JSR DOYC
L25 #COMP FAC,K,$FF9C,NOLINE,$FFFF
#COMP FAC,G,99,L26,0
#MOVE FAC,VONY
#MOVEI 159,VONX
RTS
L26 JSR DOXD
#COMP FAC,K,$FF60,NOLINE,$FFFF
#MOVE FAC,VONX
#MOVEI 99,VONY
RTS
L18 JSR DOXD
#MOVE FAC,VONX
#MOVEI 99,VONY
RTS
L12 #COMP VONY,GG,$FF9C,L21,$FFFF
#COMP NACHY,GG,$FF9C,L22,0
JMP NOLINE
L22 #COMP VONX,GG,$FF60,L23,0
#COMP NACHX,GG,$FF60,L24,0
JMP NOLINE
L24 JSR DOYA
L33 #COMP FAC,K,$FF9C,L34,0
#COMP FAC,G,99,NOLINE,$FFFF
#MOVE FAC,VONY
#MOVEI $FF60,VONX
RTS
L34 JSR DOXB
#COMP FAC,G,159,NOLINE,$FFFF
#MOVE FAC,VONX
#MOVEI $FF9C,VONY
RTS
L23 #COMP VONX,K,160,L27,0
#COMP NACHX,K,160,L28,0
JMP NOLINE
L28 JSR DOYC
L35 #COMP FAC,K,$FF9C,L36,0
#COMP FAC,G,99,NOLINE,$FFFF
#MOVE FAC,VONY
#MOVEI 159,VONX
RTS
L36 JSR DOXB
#COMP FAC,K,$FF60,NOLINE,$FFFF
#MOVE FAC,VONX
#MOVEI $FF9C,VONY
RTS
L27 JSR DOXB
#MOVE FAC,VONX
#MOVEI $FF9C,VONY
RTS
L21 #COMP VONX,GG,$FF60,L29,0
#COMP NACHX,K,$FF60,NOLINE,$FFFF
L30 JSR DOYA
#COMP FAC,K,$FF9C,NOLINE,$FFFF
#COMP FAC,G,99,NOLINE,$FFFF
#MOVE FAC,VONY
#MOVEI $FF60,VONX
RTS
L29 #COMP VONX,G,159,L31,0
RTS
L31 #COMP NACHX,G,159,NOLINE,$FFFF
L32 JSR DOYC
#COMP FAC,K,$FF9C,NOLINE,$FFFF
#COMP FAC,G,99,NOLINE,$FFFF
#MOVE FAC,VONY
#MOVEI 159,VONX
RTS
NEGARG .MACRO
LDY #0
LDA ARG+1
BPL LAB
SEC
TYA
SBC ARG
STA ARG
TYA
SBC ARG+1
STA ARG+1
DEY
TYA
EOR NEG
STA NEG ;NEGATIVFLAG
LAB .MEND
MUL .BLCK ;FAC HILF:=FAC*ARG
LDY #0
STY HILF
STY HILF+1
LDA FAC+1
STA NEG ;VORZEICHEN
BPL L1
SEC ;FAC<0
TYA
SBC FAC
STA FAC
TYA
SBC FAC+1
STA FAC+1
L1 #NEGARG
LDX #13
#ASHL FAC
#ASHL FAC
#ASHL FAC
BCC L4 ;UNBEDINGT
L3 ASL HILF
ROL HILF+1
L4 ROL FAC
ROL FAC+1
BCC L2
#ADD HILF,ARG,HILF
BCC L2
INC FAC
BNE L2
INC FAC+1
L2 DEX
BNE L3
RTS
.BEND
DIV .BLCK ;FAC:=(NEG)FAC HILF/ARG
#NEGARG
LDA FAC+1
BNE L1
LDA FAC
BNE L1
LDA HILF+1
CMP ARG+1
BCS L1
LDA HILF
CMP ARG
BCS L1
STY FAC+1 ;ARG>HILF -> FAC:=0
STY FAC
RTS
L1 LDX #16
CLC
L6 ROL HILF
ROL HILF+1
ROL FAC
ROL FAC+1
SEC
LDA FAC
SBC ARG
TAY
LDA FAC+1
SBC ARG+1
BCC L5 ;UNTERLAUF
STA FAC+1
STY FAC
L5 DEX
BNE L6
ROL HILF
ROL HILF+1
LDA NEG ;VORZEICHEN
BPL L7 ;POSITIV
#SUBI 0,HILF,FAC ;NEGATIV
RTS
L7 #MOVE HILF,FAC ;POSITIV
RTS
.BEND
DOYA #SUBI $FF60,VONX,FAC
#SUB NACHY,VONY,ARG
JSR MUL
#SUB NACHX,VONX,ARG
JSR DIV
#ADD FAC,VONY,FAC
RTS
DOXB #SUBI $FF9C,VONY,FAC
#SUB NACHX,VONX,ARG
JSR MUL
#SUB NACHY,VONY,ARG
JSR DIV
#ADD FAC,VONX,FAC
RTS
DOYC #SUBI 159,VONX,FAC
#SUB NACHY,VONY,ARG
JSR MUL
#SUB NACHX,VONX,ARG
JSR DIV
#ADD FAC,VONY,FAC
RTS
DOXD #SUBI 99,VONY,FAC
#SUB NACHX,VONX,ARG
JSR MUL
#SUB NACHY,VONY,ARG
JSR DIV
#ADD FAC,VONX,FAC
RTS
.BEND
VEK .BLCK
#T8 VONX
#T8 VONY
#T8 NACHX
#T8 NACHY
JSR CUT
#ADDI 160,VONX,VONX ;MITTE
#ADDI 160,NACHX,NACHX
#SUBI 99,VONY,VONY
#SUBI 99,NACHY,NACHY
L15 LDA NACHX+1
CMP VONX+1
BCC L4
BNE L5
LDA NACHX
CMP VONX
BNE L21
LDA VONY
CMP NACHY
BNE L21
JMP PLOT ;VON=NACH
L21 BCS L5
L4 LDA VONX ;VONX > NACHX
#SWAPW VONX,NACHX
#SWAP VONY,NACHY
L5 JSR PLOT
#SUB NACHX,VONX,DX
SEC ;DY:=NACHY-VONY
LDA NACHY
SBC VONY
STA DY
BCC L6 ;VONY>NACHY
LDA DX+1
BNE L7 ;DX>DY
LDA DX
CMP DY
BCC L8 ;DY>DX
L7 #MOVEI YP,EVENTL ;DX>DY
#MOVEI XP,IMMER
LDX #0 ;FLAG ALGO1
JMP L9
L8 #MOVEI XP,EVENTL
#MOVEI YP,IMMER
LDX #1 ;FLAG ALGO2
JMP L9
L6 SEC
LDA #0 ;NEG DY
SBC DY
STA DY
LDA DX+1
BNE L10 ;DX>DY
LDA DX
CMP DY
BCC L11 ;DY>DX
L10 #MOVEI YM,EVENTL ;DX>DY
#MOVEI XP,IMMER
LDX #0 ;FLAG ALGO1
JMP L9
L11 #MOVEI XP,EVENTL ;DY>DX
#MOVEI YM,IMMER
LDX #1 ;FLAG ALGO2
L9 LDY #0 ;FUER PKTSET LOESCHEN
LDA DX+1
BEQ L16 ;DX HIGH=0
LDA DX ;LINIE HALBIEREN
SEC
ROR
STA NACHX
STA DX
BCC L19
INC NACHX
L19 LDA DY
LSR
STA NACHY
STA DY
BCC L20
INC NACHY
L20 JSR L16 ;ERSTE HAELFTE
LDA NACHX
STA DX
LDA NACHY
STA DY
L16 TXA ;FLAG HOLEN
BNE ALGO2
.BEND
ALGO1 .BLCK
LDA DX
STA SP
LSR
STA DS
L1 CLC
LDA DS
ADC DY
STA DS
BCS L22
CMP DX
BCC L2
L22 LDA DS
SBC DX
STA DS
JSR L13
#PKTSET
L2 JSR L14
L3 #PKTSET
DEC SP
BNE L1
RTS
.BEND
ALGO2 .BLCK
LDA DY
STA SP
LSR
STA DS
L17 CLC
LDA DS
ADC DX
STA DS
BCS L23
CMP DY
BCC L18
L23 LDA DS
SBC DY
STA DS
JSR L13
#PKTSET
L18 JSR L14
#PKTSET
DEC SP
BNE L17
RTS
.BEND
L13 JMP (EVENTL)
L14 JMP (IMMER)
;ANFANG DREH
MULDREH .BLCK ;FAC:=FAC*ARG
LDY #0 ; FAC:KOORDINATE
STY HILF ; ARG:SIN V COS
STY HILF+1
LDA FAC+1
STA HILF+2
BPL L6 ;FAC POSITIV
SEC
TYA
SBC FAC
STA FAC
TYA
SBC FAC+1
STA FAC+1
L6 LDA ARG+2
LSR
BCS L4 ;ARG=1
LDX #16
CLC
JMP L5
L2 ASL HILF
ROL HILF+1
L5 ROL FAC
ROL FAC+1
BCC L1
CLC
LDA HILF
ADC ARG
STA HILF
LDA HILF+1
ADC ARG+1
STA HILF+1
BCC L1
INC FAC
BNE L1
INC FAC+1
L1 DEX
BNE L2
L4 LDA ARG+2
EOR HILF+2
BPL L3
SEC
TYA
SBC FAC
STA FAC
TYA
SBC FAC+1
STA FAC+1
L3 RTS
.BEND
DIVDREH .BLCK ;HILF:=FAC/ARG
LDY #0 ;HILF:SIN V COS
STY HILF ;FAC,ARG:POSITIV
STY HILF+1 ;ARG>=FAC
STY HILF+2
LDA FAC+1
CMP ARG+1
BNE L1
LDA FAC
CMP ARG
BNE L1
INC HILF+2 ;FAC=ARG
RTS
L1 LDX #16
LDA ARG+1
BPL L2
LSR ARG+1
ROR ARG
JMP L8
L2 ASL FAC
ROL FAC+1
JMP L8
L5 ROL HILF
ROL HILF+1
ROL FAC
ROL FAC+1
L8 SEC
LDA FAC
SBC ARG
TAY
LDA FAC+1
SBC ARG+1
BCC L4
STA FAC+1
STY FAC
L4 DEX
BNE L5
ROL HILF
ROL HILF+1
RTS
.BEND
COS .BLCK ;FAC:=COS(FAC)
LDA FAC+1
LSR
BCS L1
LSR
BCS L2
LDX FAC ;I
L5 LDA COSTAB,X
L3 STA FAC+2
LDA COSTAB2,X
STA FAC
LDA COSTAB3,X
STA FAC+1
RTS
L1 LSR
BCS L4
SEC ;II
LDA #0
SBC FAC
BNE L6
L7 STA FAC
STA FAC+1
STA FAC+2
RTS
L6 TAX
LDA COSTAB,X
ORA #$80
JMP L3
L2 LDX FAC ;III
LDA COSTAB,X
ORA #$80
JMP L3
L4 LDA #0 ;IV
SBC FAC
TAX
BEQ L7
JMP L5
.BEND
SIN .BLCK ;FAC:=SIN(FAC)
SEC ;FAC:=FAC-90 GRAD
LDA FAC+1
SBC #1
STA FAC+1
JMP COS
.BEND
ZERR .BLCK
LDA FAC+1 ;FAC+=FAC/4
BMI L3
L1 LSR
TAY
LDA FAC
ROR
TAX
TYA
LSR
L2 TAY
TXA
ROR
CLC
ADC FAC
STA FAC
TYA
ADC FAC+1
STA FAC+1
RTS
L3 SEC
ROR
TAY
LDA FAC
ROR
TAX
TYA
SEC
ROR
JMP L2
.BEND
PERSPSUB .BLCK
LDA PERSPFLG
BNE FLUCHTP
PARALLEL #MOVEVIN PVEK,6,FAC ;FAC:=XD
JSR ZERR
#MOVENIN FAC,12,PVEK ;XDP:=FAC
#MOVEVIN PVEK,8,FAC ;FAC:=YD
#MOVENIN FAC,14,PVEK ;YDP:=FAC
RTS
FLUCHTP LDY #10 ;ARG:=ZD-AUG
SEC
LDA (PVEK),Y
SBC AUG
STA ARG
INY
LDA (PVEK),Y
SBC AUG+1
STA ARG+1
#MOVE AS,FAC ;FAC:=AS
JSR DIVDREH
#MOVEW HILF,ARG ;ARG:=FAC/ARG
#MOVEVIN PVEK,6,FAC ;FAC:=XD
JSR MULDREH ;FAC:=FAC*ARG
JSR ZERR
#MOVENIN FAC,12,PVEK ;XDP:=FAC
#MOVEVIN PVEK,8,FAC ;FAC:=YD
JSR MULDREH ;YD:=FAC*ARG
#MOVENIN FAC,14,PVEK ;YDP:=FAC
RTS
.BEND
ZW1 = VONX
ZW2 = VONY
ZW3 = NACHX
ZWX = NACHY
ZWY = LVEK
ZWZ = $6E
ADDOB .SEGMENT A,B,C
LDY #&A&
CLC
LDA (PVEK),Y
ADC &B&
STA &C&
INY
LDA (PVEK),Y
ADC &B&+1
STA &C&+1
.MEND
DREHEN .BLCK
#SUBI 0,WA,FAC ;SA
JSR SIN
#MOVEW FAC,SA
#MOVE WB,FAC ;SB
JSR SIN
#MOVEW FAC,SB
#SUBI 0,WA,FAC ;CA
JSR COS
#MOVEW FAC,CA
#MOVE WB,FAC ;CB
JSR COS
#MOVEW FAC,CB
#MOVEI 0,$14
JSR PUMRECH
L1 LDY #1
LDA (PVEK),Y
CMP #$80
BNE L8
JMP INPVEK ;PUNKT UNBELEGT
L8 #ADDOB 0,X,ZWX
#ADDOB 2,Y,ZWY
#ADDOB 4,Z,ZWZ
#MOVEW CA,ARG
#MOVE ZWX,FAC
JSR MULDREH
#MOVE FAC,ZW1
#MOVE ZWZ,FAC
JSR MULDREH
#MOVE FAC,ZW2
#MOVEW SA,ARG
#MOVE ZWZ,FAC
JSR MULDREH
LDY #6 ;XD
LDA FAC
ADC ZW1
STA (PVEK),Y
INY
LDA FAC+1
ADC ZW1+1
STA (PVEK),Y
#MOVE ZWX,FAC
JSR MULDREH
SEC
LDA ZW2
SBC FAC
STA FAC
STA ZW3
LDA ZW2+1
SBC FAC+1
STA FAC+1
STA ZW3+1
#MOVEW CB,ARG
JSR MULDREH
#MOVE FAC,ZW1
#MOVE ZWY,FAC
JSR MULDREH
#MOVE FAC,ZW2
#MOVEW SB,ARG
#MOVE ZWY,FAC
JSR MULDREH
CLC
LDY #10 ;ZD
LDA ZW1
ADC FAC
STA (PVEK),Y
INY
LDA ZW1+1
ADC FAC+1
STA (PVEK),Y
#MOVE ZW3,FAC
JSR MULDREH
SEC
LDY #8 ;YD
LDA ZW2
SBC FAC
STA (PVEK),Y
INY
LDA ZW2+1
SBC FAC+1
STA (PVEK),Y
LDY #10 ;ZD-S
LDA (PVEK),Y
CMP S
INY
LDA (PVEK),Y
SBC S+1
BVS L5
BMI INPVEK ;ZD<S
BPL L6
L5 BPL INPVEK ;ZD<S
L6 JSR PERSPSUB
INPVEK CLC
LDA PVEK
ADC #16
STA PVEK
BCC L2
INC PVEK+1
L2 LDA PVEK+1
CMP #$87
BNE L3
LDA #>DEND+1
STA PVEK+1
L3 CMP LANF+1
BNE L7
LDA PVEK
CMP LANF
BEQ L4
L7 JMP L1
L4 RTS
.BEND
BILD .BLCK ;ERZEUGT DAS BILD
#MOVE LMAX,$14
JSR LUMRECH
L1 #MOVEVIN LVEK,0,PVEK
CMP #$FF
BNE L12
JMP DELVEK ;NICHT BELEGT
L12 #MOVEVIN PVEK,12,VONX
#MOVEVIN PVEK,14,VONY
#MOVEVIN PVEK,10,VONZ
#MOVEVIN LVEK,2,$14
LDY #1
LDA (PVEK),Y
CMP #$80 ;BELEGT?
BNE L17
L18 JMP NOTBEL ;NICHT BELEGT
L17 LDA ($14),Y
CMP #$80
BEQ L18
#MOVEVIN $14,12,NACHX
#MOVEVIN $14,14,NACHY
#MOVEVIN $14,10,NACHZ
LDA VONZ
CMP S
LDA VONZ+1
SBC S+1
BVS L2
BMI L3
BPL L4
L2 BPL L3
L4 JMP L5 ;VONZ>=S
L3 LDA NACHZ ;VONZ<S
CMP S
LDA NACHZ+1
SBC S+1
BVS L6
BMI L7
BPL L8
L6 BMI L8
L7 JMP DELVEK ;NACHZ<S
L8 #MOVEVIN PVEK,6,VONX ;NACHZ>=S
#MOVEVIN PVEK,8,VONY
#SUB S,VONZ,FAC
#SUB NACHZ,VONZ,ARG
JSR DIVDREH ;HILF:=FAC/ARG
#MOVEW HILF,ARG
#MOVEVIN $14,6,HILF ;NACHX
#SUB HILF,VONX,FAC
JSR D2
JSR MULDREH
ASL FAC
ROL FAC+1
#ADD VONX,FAC,FAC
JSR ZERR
#MOVE FAC,VONX
#MOVEVIN $14,8,HILF ;NACHY
#SUB HILF,VONY,FAC
JSR D2
JSR MULDREH
ASL FAC
ROL FAC+1
#ADD VONY,FAC,VONY
JMP LAB1
L5 #SUB S,NACHZ,FAC
BVS L14
BMI L16 ;NACHZ>S
BPL L15
L14 BMI L15
L16 JMP LAB1 ;NACHZ>S
L15 #MOVEVIN $14,6,NACHX
#MOVEVIN $14,8,NACHY
#SUB VONZ,NACHZ,ARG
JSR DIVDREH
#MOVEW HILF,ARG
#MOVEVIN PVEK,6,HILF ;VONX
#SUB HILF,NACHX,FAC
JSR D2
JSR MULDREH
ASL FAC
ROL FAC+1
#ADD NACHX,FAC,FAC
JSR ZERR
#MOVE FAC,NACHX
#MOVEVIN PVEK,8,HILF ;VONY
#SUB HILF,NACHY,FAC
JSR D2
JSR MULDREH
ASL FAC
ROL FAC+1
#ADD NACHY,FAC,NACHY
LAB1 JSR VEK
DELVEK SEC
LDA LVEK
SBC #4
STA LVEK
BCS L11
DEC LVEK+1
L11 LDA LVEK+1
CMP #>DEND
BNE L9 ;LVEK>=DEND+1
LDA #$86
STA LVEK+1
L9 LDA LVEK+1
CMP LANF+1
BEQ L13
BCS L10 ;LVEK>LANF
L19 RTS
L13 LDA LVEK
CMP LANF
BCC L19 ;LVEK<LANF
L10 JMP L1
D2 .BLCK
CLC
BVS L1
BPL L3
BMI L2
L1 BMI L3
L2 SEC
L3 ROR FAC+1
ROR FAC
RTS
.BEND
.BEND
.FILE SOURCE.TEIL2