home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
64'er
/
64ER_CD.iso
/
s85xx
/
s8504b.d64
/
graph.src
< prev
next >
Wrap
Text File
|
1995-03-30
|
5KB
|
251 lines
; GRAPHICS UTILITIES
;
; RICHARD L. RYLANDER 11/4/84
;
; LOAD ARITHMETIC UTILITIES FIRST
;
RAM=$033E
ORIGIN=$C0E2
;
MLPCND=$AC ; MULTIPLICAND (S)
MLPLER=$AD ; MULTIPLIER (S)
PROD=$AE ; PRODUCT (D)
MULT=$C011 ; CALL FOR MULTIPLY
;
RNDM=$C000 ; RANDOM NUMBER
RANDOM=$C0C8 ; CALL FOR RANDOM
; NOTE - A CALL TO 'RANDOM' LEAVES A RANDOM BYTE
; IN THE ACCUMULATOR
;
*=RAM
PLTFLG *=*+1 ; PLOT/UNPLOT FLAG
XPLT *=*+2 ; ABSOLUTE PLOT COORD
YPLT *=*+1 ; ABSOLUTE PLOT COORD
VIC1 *=*+1 ; REGISTER STORAGE
VIC2 *=*+1 ; REGISTER STORAGE
VALUE *=*+2 ; FINAL NORMALIZED SHADE VALUE
HTORRN *=*+1 ; SHADE FLAG, 1=HALFTONE
NOSCAL *=*+1 ; SCALE FLAG, 1=NO SCALE
TEMP *=*+2 ; TEMPORARY STORAGE
;
*=ORIGIN
;
;*****************************************
;
; TURN ON BIT MAP GRAPHICS MODE,
; SAVING REGISTER VALUES FOR
; RETURN TO TEXT MODE LATER.
;
GRFON LDA $D011
ORA #$20
STA $D011
LDA $DD00
STA VIC1
AND #$FC
ORA #$01
STA $DD00
LDA $D018
STA VIC2
LDA #$19
STA $D018
RTS
;
;*****************************************
;
; RETURN TO TEXT SCREEN
;
GRFOFF LDA $D011
AND #$DF
STA $D011
LDA VIC1
STA $DD00
LDA VIC2
STA $D018
RTS
;
;*****************************************
;
; FILL COLOR MAP FOR BLACK DOTS ON WHITE
;
COLOR LDA #$01 ; POKE NEW COLORS HERE
LDX #0
COL1 STA $8400,X
STA $8500,X
STA $8600,X
STA $8700,X
DEX
BNE COL1
RTS
;
;*****************************************
;
; CLEAR HI-RES GRAPHICS SCREEN
;
CLEAR LDA #$A0
STA $FC
LDY #0
STY $FB
LDA #0 ; CLEAR BYTE
LDX #$20
CLRLP STA ($FB),Y
INY
BNE CLRLP
INC $FC
DEX
BNE CLRLP
RTS
;
;*****************************************
;
; PLOT AND UNPLOT POINTS ON HI-RES GRAPHICS
; SCREEN. ABSOLUTE X AND Y SCREEN COORDINATES
; ARE POKED INTO XPLT, XPLT+1, AND YPLT
;
PLOT LDA #0
.BYTE $2C
UNPLOT LDA #$80
STA PLTFLG
LDA $01 ; BASIC ROM OUT
AND #$FE
STA $01
SEC ; INVERT Y COORDINATE TO
LDA #$C7 ; PUT ORIGIN IN LOWER LEFT
SBC YPLT ; CORNER OF SCREEN
TAX ; (199.-YPLT)
LSR A
LSR A
LSR A
TAY
LDA TABLE1,Y
STA $FB
LDA TABLE2,Y
STA $FC
TXA
AND #$07
CLC
ADC $FB
STA $FB
LDA XPLT
AND #$F8
ADC $FB
STA $FB
LDA XPLT+1
ADC $FC
STA $FC
LDA #$A0
ADC $FC
STA $FC
LDA XPLT
AND #$07
EOR #$07
TAX
LDA #$01
PLOTLP DEX
BMI PLOT2
ASL A
BNE PLOTLP
PLOT2 LDY #0
BIT PLTFLG
BPL NOPLOT
EOR #$FF
AND ($FB),Y
.BYTE $2C
NOPLOT ORA ($FB),Y
STA ($FB),Y
LDA $01 ; BASIC ROM RESTORED
ORA #$01
STA $01
RTS
;
TABLE1 .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,$00
;
TABLE2 .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,$1E
;
;*****************************************
;
; SHADING BY HYBRID DITHER/DOT-GROWTH
;
SHADE LDA XPLT ; USE BITS -----***
AND #$07 ; OF 'X' SCREEN COORD
STA TEMP
LDA YPLT ; AND BITS -----***
AND #$07 ; OF 'Y' SCREEN COORD
ASL A ; SHIFTED INTO --***---
ASL A ; POSITION TO DETERMINE
ASL A ; 6-BIT OFFSET IN
ORA TEMP ; THRESHOLD TABLE
TAX
LDA THRESH,X ; SCREEN-POSITION-WEIGHTED
CMP VALUE ; THRESHOLD VALUE
BPL GREATR
JMP UNPLOT
GREATR JMP PLOT
;
;*****************************************
;
; SHADING BY RANDOM HALFTONE
;
RSHADE JSR RANDOM
LSR A ; REDUCE RANDOM BYTE
LSR A ; TO 6 BITS FOR SHADE
CMP VALUE ; VALUE COMPARISON
BPL MORE
JMP UNPLOT
MORE JMP PLOT
;
;*****************************************
;
; PLOT A POINT WEIGHTED BY SHADING SCHEME
; AND SHADE VALUE
; CHECK 'NOSCAL' FLAG FOR SCALING OF Y COORD
; CHECK 'HTORRN' FLAG FOR TYPE OF SHADING
;
PLTSHD LDA NOSCAL
BEQ NORM
;
; SCALE Y FROM 0-239 PSEUDO-COORDINATES
; TO 0-199 TRUE SCREEN COORDINATES BY
; Y = (Y+1)*213/256
;
SCALE LDY YPLT
INY
STY MLPLER
LDA #$D5 ; 213.
STA MLPCND
JSR MULT ; RETURN WITH HIGH BYTE
STA YPLT ; IN ACCUMULATOR
NORM LDA HTORRN
BEQ RPLT
JMP SHADE
RPLT JMP RSHADE
;
;
;
THRESH .BYTE $00,$08,$35,$3D
.BYTE $02,$0A,$37,$3F
.BYTE $10,$18,$25,$2D
.BYTE $12,$1A,$27,$2F
.BYTE $31,$39,$04,$0C
.BYTE $33,$3B,$06,$0E
.BYTE $21,$29,$14,$1C
.BYTE $23,$2B,$16,$1E
.BYTE $03,$0B,$36,$3E
.BYTE $01,$09,$34,$3C
.BYTE $13,$1B,$26,$2E
.BYTE $11,$19,$24,$2C
.BYTE $32,$3A,$07,$0F
.BYTE $30,$38,$05,$0D
.BYTE $22,$2A,$17,$1F
.BYTE $20,$28,$15,$1D
.END