diff options
| author | Simon Rettberg | 2024-09-06 14:42:37 +0200 |
|---|---|---|
| committer | Simon Rettberg | 2024-09-06 14:42:37 +0200 |
| commit | badef32037f52f79abc1f1440b786cd71afdf270 (patch) | |
| tree | 412b792d4cab4a7a110db82fcf74fe8a1ac55ec1 /hacks/images/m6502/sierpinsky.asm | |
| parent | Delete pre-6.00 files (diff) | |
| download | xscreensaver-master.tar.gz xscreensaver-master.tar.xz xscreensaver-master.zip | |
Diffstat (limited to 'hacks/images/m6502/sierpinsky.asm')
| -rw-r--r-- | hacks/images/m6502/sierpinsky.asm | 131 |
1 files changed, 0 insertions, 131 deletions
diff --git a/hacks/images/m6502/sierpinsky.asm b/hacks/images/m6502/sierpinsky.asm deleted file mode 100644 index 6a67906..0000000 --- a/hacks/images/m6502/sierpinsky.asm +++ /dev/null @@ -1,131 +0,0 @@ -; 6502 assembler Sierpinsky Triangle ver.2 -; by Magnus Wedmark 2007-05-02 -; This program is especially written for -; the 6502asm.com competition and -; uses the 32*32 pixel display used in that -; virtual platform. The sierpinsky -; fractal is one of the simplest to -; implement. Here is a walk-through: -; 1) Specify 3 points that form a triangle -; 2) Choose one of them as a starting point -; 3) Choose one of them as targetpoint randomly -; 4) Set the new current position half-way -; between the current point and the target -; point. -; 5) Goto 3 - - LDX #0 - LDY #0 -new_rnd: - LDA $FE ; random 0-255 - AND #3 ; only 0-3 left - CMP #3 - BNE good_rnd - JMP new_rnd -good_rnd: -; random = 0-2 - PHA -; transform X and Y values according to: -; X=X/2+(P*8) and Y=Y/2+(P*16) - ASL - ASL - ASL - STA $F3 ; P*8 - PLA - AND #1 - ASL - ASL - ASL - ASL - STA $F4 ; (P AND 1)*16 - TXA - LSR - ADC $F3 - TAX - TYA - LSR - ADC $F4 - TAY - JSR set_point ; use and restore regs - JMP new_rnd - -set_point: ; uses both X,Y,A and restores them - PHA ; backup all reg-value (X,Y,A) - TXA - PHA - TYA - PHA - PHA - PHA ; triple Y push, two for int. use - STX $F2 ; transfer X to Y using $F2 - LDY $F2 - LDA #0 - STA $F0 - LDA #$2 - STA $F1 ; set base vector to $200 - LDA #0 - PLA ; transfer the pushed Y-coord to A - AND #$07 ; the value %0000'0111 - ASL - ASL - ASL - ASL - ASL - CLC - ADC $F0 - STA $F0 - BCC no_carry - INC $F1 -no_carry: - CLC - PLA ; transfer the pushed Y-coord to A - AND #$18 - LSR - LSR - LSR - ADC $F1 - STA $F1 - - CLC - TYA - ADC $F0 - ADC $F1 - - LDA #1 ;1 = white for trouble-shooting - JSR set_toning_point ; use for shading - STA ($F0),Y ; set pixel - PLA ; restore all reg-value (X,Y,A) - TAY - PLA - TAX - PLA - RTS - -; sub routine to shade the current pixel ($F0),Y -; lighter on a scale: $0, $B, $C, $F, $1 -; Black, DarkGrey, Grey, LightGrey, White -set_toning_point: - LDA ($F0),Y - CMP #$00 - BNE not_black - LDA #$0B - RTS -not_black: - CMP #$0B - BNE not_dgrey - LDA #$0C - RTS -not_dgrey: - CMP #$0C - BNE not_grey - LDA #$0F - RTS -not_grey: - CMP #$0F - BNE not_lgrey - LDA #$01 - RTS -not_lgrey: -; white stays white - RTS - |
