summaryrefslogtreecommitdiffstats
path: root/hacks/images/m6502/crunch6502.asm
diff options
context:
space:
mode:
authorSimon Rettberg2024-09-06 14:42:37 +0200
committerSimon Rettberg2024-09-06 14:42:37 +0200
commitbadef32037f52f79abc1f1440b786cd71afdf270 (patch)
tree412b792d4cab4a7a110db82fcf74fe8a1ac55ec1 /hacks/images/m6502/crunch6502.asm
parentDelete pre-6.00 files (diff)
downloadxscreensaver-master.tar.gz
xscreensaver-master.tar.xz
xscreensaver-master.zip
Diffstat (limited to 'hacks/images/m6502/crunch6502.asm')
-rw-r--r--hacks/images/m6502/crunch6502.asm292
1 files changed, 0 insertions, 292 deletions
diff --git a/hacks/images/m6502/crunch6502.asm b/hacks/images/m6502/crunch6502.asm
deleted file mode 100644
index 56ea507..0000000
--- a/hacks/images/m6502/crunch6502.asm
+++ /dev/null
@@ -1,292 +0,0 @@
-;; Show "6502" on the screen waving up and down.
-;; Jeremy English 29-December-2007
-;;
-;; Each digit is stored as a pattern of vertical bits.
-;; For example:
-;;
-;; 111111 This is the digit six. We think of the digit
-;; 111111 by it's column pattern. The column patterns
-;; 110000 are labeled at the bottom of the example.
-;; 110000 Pattern B is 1100110011. The basic algorithm
-;; 111111 is that we get the pattern, paint the first
-;; 111111 bit (1 foreground, 0 background) then dec y
-;; 110011 and get the next bit.
-;; 110011
-;; 111111 The pattern for each digit is:
-;; 111111 6 = AABBCC
-;; ------ 5 = DDBBCC
-;; AABBCC 0 = AAEEAA
-;; 2 = CCBBDD
-
-;; Addresses $0 and $1 are used by the paint subroutine.
-;; Addresses $2 through $6 are used by the display pattern subroutine
-;; Address $7 is used in the main loop
-;; Address $8 through $1a are used for the start positions
-;; Address $1b is used by the display pattern subroutine
-;; Address $1c is used as the color row offset.
-;; Addresses $d0 through $ef store the font table
-
-jmp init_font_table
-start:
-
-;; Initialize the pointers to the start position.
-lda #<y_start_pos1
-sta $b
-lda #>y_start_pos1
-sta $c
-lda #<y_start_pos2
-sta $d
-lda #>y_start_pos2
-sta $e
-lda #<y_start_pos3
-sta $f
-lda #>y_start_pos3
-sta $10
-lda #<y_start_pos4
-sta $11
-lda #>y_start_pos4
-sta $12
-lda #<y_start_pos5
-sta $13
-lda #>y_start_pos5
-sta $14
-lda #<y_start_pos4
-sta $15
-lda #>y_start_pos4
-sta $16
-lda #<y_start_pos3
-sta $17
-lda #>y_start_pos3
-sta $18
-lda #<y_start_pos2
-sta $19
-lda #>y_start_pos2
-sta $1a
-
-
-lda #0 ; start position to use
-sta $8
-
-main_loop:
-inc $1c ; increment the color offset.
-inc $1d ; increment the starting x position
-ldy $8 ; load the current start position index
-ldx $b,y ; get the lsb from the table
-txa
-sta $9 ; store the msb of the start position pointer
-iny ; move to the next position in the table
-ldx $b,y ; get the msb from the table
-txa
-sta $a ; store the lsb of the start position pointer
-iny ; move the index up by one
-tya
-cmp #$10 ; have we looked at all 16 start positions?
-bne store_idx ; if not then keep the index and store it
-lda #0 ; set the index back to zero
-store_idx:
-sta $8 ; save the index back in memory
-
-ldy #0
-lda #$ff
-sta $4 ; initialize the column to FF
-display_loop:
- inc $4 ; increment the column
- ldx $d0,y ; load the lsb from the font table
- stx $2
- iny
- ldx $d0,y ; load the msb from the font table
- stx $3
- sty $7 ; save y in memory
- jsr dis_pat ; Jump to the display pattern subroutine.
- inc $4 ; increment the column
- jsr dis_pat ; Each pattern gets painted twice so we have a thicker font
- ldy $7 ; get y out of memory
- iny ; increment the index
- tya
- cmp #$20 ; Did we display all of the columns?
- bne display_loop ;if not continue
-jmp main_loop
-rts
-
-init_font_table:
- ;;Setup a table in the zero page that contains the string "6502"
- lda #<pattern_a ;start with digit 6. It's pattern is aabbcc
- sta $d0
- lda #>pattern_a
- sta $d1
- lda #<pattern_b
- sta $d2
- lda #>pattern_b
- sta $d3
- lda #<pattern_c
- sta $d4
- lda #>pattern_c
- sta $d5
- lda #<pattern_null ;We want to space everything out with blanks
- sta $d6
- lda #>pattern_null
- sta $d7
- lda #<pattern_d ;load memory for digit 5 ddbbcc
- sta $d8
- lda #>pattern_d
- sta $d9
- lda #<pattern_b
- sta $da
- lda #>pattern_b
- sta $db
- lda #<pattern_c
- sta $dc
- lda #>pattern_c
- sta $dd
- lda #<pattern_null
- sta $de
- lda #>pattern_null
- sta $df
- lda #<pattern_a ;load memory for digit 0 aaeeaa
- sta $e0
- lda #>pattern_a
- sta $e1
- lda #<pattern_e
- sta $e2
- lda #>pattern_e
- sta $e3
- lda #<pattern_a
- sta $e4
- lda #>pattern_a
- sta $e5
- lda #<pattern_null
- sta $e6
- lda #>pattern_null
- sta $e7
- lda #<pattern_c ;load memory for digit 2 ccbbdd
- sta $e8
- lda #>pattern_c
- sta $e9
- lda #<pattern_b
- sta $ea
- lda #>pattern_b
- sta $eb
- lda #<pattern_d
- sta $ec
- lda #>pattern_d
- sta $ed
- lda #<pattern_null
- sta $ee
- lda #>pattern_null
- sta $ef
- jmp start
-
-
-;; Display a pattern on the screen. The pattern to use is
-;; stored at $2 and $3. The current column is stored at $4.
-dis_pat:
- ldy $4 ; Load the current column into y
- lda ($9),y ; Get the start position for y
- tay
- sty $5 ; Store the starting position in memory
- ldy #0 ; We have 12 bits that need to be painted
-dis_pat_loop:
- lda ($2),y ; get a bit from the pattern
- pha ; save the color on the stack
- tya ; move the index into the accumulator
- clc ; clear the carry
- adc $5 ; add the starting position to the index
- sty $6 ; store the index
- tay ; The calculated y position
- ldx $4 ; The x position is the current column
- pla ; pop the color off of the stack
- beq go_paint ; black just paint it
- clc ; get rid of any carry bit
- sty $1b ; save the y coordinate
- tya
- clc
- adc $1c ; add the color offset
- and #$7 ; make sure the look up is in range
- tay ; move the new index into y so we can look up the color
- lda color_row,y ; if not black get the row color
- ldy $1b ; restore the y coordinate
-go_paint:
- jsr paint ; paint the pixel on the screen
- ldy $6 ; get the index out of memory
- iny ; increment the index
- tya
- cmp #12 ; Have we looked at all of the bits?
- bne dis_pat_loop ; if not then continue looking
- rts ; else return from the subroutine
-
-;; Paint - Put a pixel on the screen by using the x registry for
-;; the x position, the y registry for the y position and
-;; the accumulator for the color.
-paint:
- pha ; Save the color
- lda yl,y ; Get the LSB of the memory address for y
- sta $0 ; Store it first
- lda yh,y ; Get the MSB of the memory address for y
- sta $1 ; Store it next
- txa ; We want x in the y registry so we transfer it to A
- tay ; and then A into y.
- pla ; Pop the color off of the stack
- sta ($0),y ; Store the color at the correct y + x address.
- rts ; return from the subroutine.
-
-;; Paint uses the following two tables to look up the
-;; correct address for a y coordinate between
-;; 0 and 31.
-
-;; Y cord MSB
-yh:
- dcb $02, $02, $02, $02, $02, $02, $02, $02
- dcb $03, $03, $03, $03, $03, $03, $03, $03
- dcb $04, $04, $04, $04, $04, $04, $04, $04
- dcb $05, $05, $05, $05, $05, $05, $05, $05
-;; Y cord LSB
-yl:
- dcb $00, $20, $40, $60, $80, $a0, $c0, $e0
- dcb $00, $20, $40, $60, $80, $a0, $c0, $e0
- dcb $00, $20, $40, $60, $80, $a0, $c0, $e0
- dcb $00, $20, $40, $60, $80, $a0, $c0, $e0
-
-;; A zero is on the end of each pattern to clean up
-;; residue left by waving.
-pattern_a:
- dcb 0,1,1,1,1,1,1,1,1,1,1,0
-
-pattern_b:
- dcb 0,1,1,0,0,1,1,0,0,1,1,0
-
-pattern_c:
- dcb 0,1,1,0,0,1,1,1,1,1,1,0
-
-pattern_d:
- dcb 0,1,1,1,1,1,1,0,0,1,1,0
-
-pattern_e:
- dcb 0,1,1,0,0,0,0,0,0,1,1,0
-
-pattern_null:
- dcb 0,0,0,0,0,0,0,0,0,0,0,0
-
-;; Table that store the current start position
-;; of each y column.
-y_start_pos1:
- dcb 10,10,9,9,8,8,7,7,6,6,7,7,8,8,9,9,10,10,9,9,8,8,7,7
- dcb 6,6,7,7,8,8
-
-y_start_pos2:
- dcb 9,9,8,8,8,8,8,8,7,7,8,8,8,8,8,8,9,9,8,8,8,8,8,8
- dcb 7,7,8,8,8,8
-
-y_start_pos3:
- dcb 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8
- dcb 8,8,8,8,8,8
-
-y_start_pos4:
- dcb 7,7,8,8,8,8,8,8,9,9,8,8,8,8,8,8,7,7,8,8,8,8,8,8
- dcb 9,9,8,8,8,8
-
-y_start_pos5:
- dcb 6, 6,7,7,8,8,9,9,10,10,9,9,8,8,7,7, 6, 6,7,7,8,8,9,9
- dcb 10,10,9,9,8,8
-
-color_row:
- dcb $7,$8,$9,$2,$4,$6,$e,$3,$d,$5