Re: Old school 3-D Vector Gaphics on new system
Posted: Fri Apr 04, 2014 10:30 am
Thanks!
The 6502 Microprocessor Resource
http://forum.6502.org/
Code: Select all
side_map1 .MACRO ;1st SQUARE OF CUBE FROM SINEWAVE MAP 1
LDY START
LDA scratchx1,Y
STA lx0
LDA scratchy1,Y
STA ly0
LDY STOP
LDA scratchx1,Y
STA lx1
LDA scratchy1,Y
STA ly1
.ENDM
square_map1 .MACRO
LDA OFFSET
STA START
LDA #256
CLC
ADC OFFSET
STA STOP
side_map1
LDA #256
CLC
ADC OFFSET
STA START
LDA #512
CLC
ADC OFFSET
STA STOP
side_map1
LDA #512
CLC
ADC OFFSET
STA START
LDA #768
CLC
ADC OFFSET
STA STOP
side_map1
LDA #768
CLC
ADC OFFSET
STA START
LDA OFFSET
STA STOP
side_map1
.ENDM
side_map2 .MACRO ;2nd SQUARE OF CUBE FROM SINEWAVE MAP 1
LDY START
LDA scratchx2,Y
STA lx0
LDA scratchy2,Y
STA ly0
LDY STOP
LDA scratchx2,Y
STA lx1
LDA scratchy2,Y
STA ly1
.ENDM
;2nd SQUARE OF CUBE
square_map2 .MACRO
LDA OFFSET
STA START
LDA #256
CLC
ADC OFFSET
STA STOP
side_map2
LDA #256
CLC
ADC OFFSET
STA START
LDA #512
CLC
ADC OFFSET
STA STOP
side_map2
LDA #512
CLC
ADC OFFSET
STA START
LDA #768
CLC
ADC OFFSET
STA STOP
side_map2
LDA #768
CLC
ADC OFFSET
STA START
LDA OFFSET
STA STOP
side_map2
.ENDM
cube_map12 .MACRO ;MAP A CUBE
square_map1 ;SQUARE1
square_map2 ;SQUARE2
LDY OFFSET ;DIAGONAL INTERCONNECTS
LDA scratchx1,Y
STA lx0
LDA scratchy1,Y
STA ly0
LDA scratchx2,Y
STA lx1
LDA scratchy2,Y
STA ly1
LDA #256
CLC
ADC OFFSET
TAY
LDA scratchx1,Y
STA lx0
LDA scratchy1,Y
STA ly0
LDA scratchx2,Y
STA lx1
LDA scratchy2,Y
STA ly1
LDA #512
CLC
ADC OFFSET
TAY
LDA scratchx1,Y
STA lx0
LDA scratchy1,Y
STA ly0
LDA scratchx2,Y
STA lx1
LDA scratchy2,Y
STA ly1
LDA #768
CLC
ADC OFFSET
TAY
LDA scratchx1,Y
STA lx0
LDA scratchy1,Y
STA ly0
LDA scratchx2,Y
STA lx1
LDA scratchy2,Y
STA ly1
.ENDMCode: Select all
side_map1 .MACRO ;1st SQUARE OF CUBE FROM SINEWAVE MAP 1
LDY START
LDA scratchx1,Y
STA lx0
LDA scratchy1,Y
STA ly0
LDY STOP
LDA scratchx1,Y
STA lx1
LDA scratchy1,Y
STA ly1
.ENDM
square_map1 .MACRO
LDA OFFSET
STA START
LDA #256
CLC
ADC OFFSET
AND #%0000011111111111 ;mask off unneeded bits to accommodate 10-bit LUT max value
STA STOP
side_map1
LDA #256
CLC
ADC OFFSET
AND #%0000001111111111
STA START
LDA #512
CLC
ADC OFFSET
AND #%0000001111111111
STA STOP
side_map1
LDA #512
CLC
ADC OFFSET
AND #%0000001111111111
STA START
LDA #768
CLC
ADC OFFSET
AND #%0000001111111111
STA STOP
side_map1
LDA #768
CLC
ADC OFFSET
AND #%0000001111111111
STA START
LDA OFFSET
STA STOP
side_map1
.ENDM
side_map2 .MACRO ;2nd SQUARE OF CUBE FROM SINEWAVE MAP 1
LDY START
LDA scratchx2,Y
STA lx0
LDA scratchy2,Y
STA ly0
LDY STOP
LDA scratchx2,Y
STA lx1
LDA scratchy2,Y
STA ly1
.ENDM
;2nd SQUARE OF CUBE
square_map2 .MACRO
LDA OFFSET
STA START
LDA #256
CLC
ADC OFFSET
AND #%0000001111111111
STA STOP
side_map2
LDA #256
CLC
ADC OFFSET
AND #%0000001111111111
STA START
LDA #512
CLC
ADC OFFSET
AND #%0000001111111111
STA STOP
side_map2
LDA #512
CLC
ADC OFFSET
AND #%0000001111111111
STA START
LDA #768
CLC
ADC OFFSET
AND #%0000001111111111
STA STOP
side_map2
LDA #768
CLC
ADC OFFSET
AND #%0000001111111111
STA START
LDA OFFSET
STA STOP
side_map2
.ENDM
cube_map12 .MACRO ;MAP A CUBE
square_map1 ;SQUARE1
square_map2 ;SQUARE2
LDY OFFSET ;DIAGONAL INTERCONNECTS
LDA scratchx1,Y
STA lx0
LDA scratchy1,Y
STA ly0
LDA scratchx2,Y
STA lx1
LDA scratchy2,Y
STA ly1
LDA #256
CLC
ADC OFFSET
AND #%0000001111111111
TAY
LDA scratchx1,Y
STA lx0
LDA scratchy1,Y
STA ly0
LDA scratchx2,Y
STA lx1
LDA scratchy2,Y
STA ly1
LDA #512
CLC
ADC OFFSET
AND #%0000001111111111
TAY
LDA scratchx1,Y
STA lx0
LDA scratchy1,Y
STA ly0
LDA scratchx2,Y
STA lx1
LDA scratchy2,Y
STA ly1
LDA #768
CLC
ADC OFFSET
AND #%0000001111111111
TAY
LDA scratchx1,Y
STA lx0
LDA scratchy1,Y
STA ly0
LDA scratchx2,Y
STA lx1
LDA scratchy2,Y
STA ly1
.ENDMCode: Select all
rcube LDX #0
triplot LDA #%0000011111100000 ;green pixels
STA color
STX OFFSET
BCF1C $FFFE ;Branch if Control Flag 1 is Clear (0), CF1 is VSYNC input, so branch to itself and wait until vsync = 1, a non display period
cube_map12
LDY #$03FF
GH DEY
BNE GH
LDA #%0000000000000000 ;black pixels. clear previous plot
STA color
BCF1C $FFFE
cube_map12
INX
CPX #1023 ;cycle through the LUTs
BNE triplot
triplot2 LDA #%0000011111100000 ;green pixels
STA color
STX OFFSET
BCF1C $FFFE ;Branch if Control Flag 1 is Clear (0), CF1 is VSYNC input, so branch to itself and wait until vsync = 1, a non display period
cube_map12
LDY #$03FF
GH2 DEY
BNE GH2
LDA #%0000000000000000 ;black pixels. clear previous plot
STA color
BCF1C $FFFE
cube_map12
DEX
BNE triplot2
JMP rcube