Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- define r16al $f0
- define r16ah $f1
- define r16bl $f2
- define r16bh $f3
- define r16cl $f4
- define r16ch $f5
- define arg0 $f6
- define arg1 $f7
- define tmp0 $fc
- define tmp1 $fd
- define random $fe
- define key $ff
- init:
- lda #$00
- ldx #<amoog
- ldy #>amoog
- sta pos
- loop:
- lda random
- jsr blit
- jmp loop
- amoog:
- dcb 0,10,10,10
- dcb 10,10, 3, 3
- dcb 10,10,10,10
- dcb 0,10, 0,10
- ;(automatically loads pos into A)
- pos: dcb 0
- pos_loadInc:
- lda pos
- sta tmp0
- inc pos
- lda pos
- and #%00001000
- beq pos_loadInc_noYInc
- lda pos
- and #%01110111
- clc
- adc #16
- sta pos
- pos_loadInc_noYInc:
- lda tmp0
- rts
- ;blits a 4x4 color tile
- ;(restores A,X,Y)
- ;A = position (as #$YX)
- ;X = color (0 -> 15)
- blit_color:
- ;(X is read-only here; storing is unnecessary)
- sta arg0 ;store arguments
- sty arg1 ;^^
- jsr blit_load_dst ;load dst addr to r16a
- ;completely unrolled loop
- ldy #0 ;init index to 0
- txa ;pixel 0
- sta (r16al),y ;^^
- iny ;^^
- sta (r16al),y ;pixel 1
- iny ;^^
- sta (r16al),y ;pixel 2
- iny ;^^
- sta (r16al),y ;pixel 3
- tya ;^^
- clc ;^^
- adc #29 ;^^
- tay ;^^
- txa ;pixel 4
- sta (r16al),y ;^^
- iny ;^^
- sta (r16al),y ;pixel 5
- iny ;^^
- sta (r16al),y ;pixel 6
- iny ;^^
- sta (r16al),y ;pixel 7
- tya ;^^
- clc ;^^
- adc #29 ;^^
- tay ;^^
- txa ;pixel 8
- sta (r16al),y ;^^
- iny ;^^
- sta (r16al),y ;pixel 9
- iny ;^^
- sta (r16al),y ;pixel 10
- iny ;^^
- sta (r16al),y ;pixel 11
- tya ;^^
- clc ;^^
- adc #29 ;^^
- tay ;^^
- txa ;pixel 12
- sta (r16al),y ;^^
- iny ;^^
- sta (r16al),y ;pixel 13
- iny ;^^
- sta (r16al),y ;pixel 14
- iny ;^^
- sta (r16al),y ;pixel 15
- lda arg0 ;restore registers
- ldy arg1 ;^^
- rts
- ;blits a 4x4 bitmap tile
- ;(restores A,X,Y)
- ;A = position (as #$YX)
- ;X = bitmap addr lo byte
- ;Y = bitmap addr hi byte
- blit:
- sta arg0 ;store arguments
- stx r16bl ;^^
- sty r16bh ;^^
- jsr blit_load_dst ;load dst addr to r16a
- ;completely unrolled loop
- ldy #0 ;pixel 0,0 (0,0)
- lda (r16bl),y ;^^
- sta (r16al),y ;^^
- iny ;^^
- lda (r16bl),y ;pixel 1,0 (1,1)
- sta (r16al),y ;^^
- iny ;^^
- lda (r16bl),y ;pixel 2,0 (2,2)
- sta (r16al),y ;^^
- iny ;^^
- lda (r16bl),y ;pixel 3,0 (3,3)
- sta (r16al),y ;^^
- iny ;^^
- sty tmp0 ;^^
- tya ;^^
- clc ;^^
- adc #28 ;^^
- sta tmp1 ;^^
- lda (r16bl),y ;pixel 0,1 (4,32)
- ldy tmp1 ;^^
- sta (r16al),y ;^^
- inc tmp0 ;^^
- iny ;^^
- sty tmp1 ;^^
- ldy tmp0 ;pixel 1,1 (5,33)
- lda (r16bl),y ;^^
- ldy tmp1 ;^^
- sta (r16al),y ;^^
- inc tmp0 ;^^
- iny ;^^
- sty tmp1 ;^^
- ldy tmp0 ;pixel 2,1 (6,34)
- lda (r16bl),y ;^^
- ldy tmp1 ;^^
- sta (r16al),y ;^^
- inc tmp0 ;^^
- iny ;^^
- sty tmp1 ;^^
- ldy tmp0 ;pixel 3,1 (7,35)
- lda (r16bl),y ;^^
- ldy tmp1 ;^^
- sta (r16al),y ;^^
- inc tmp0 ;^^
- tya ;^^
- clc ;^^
- adc #29 ;^^
- sta tmp1 ;^^
- ldy tmp0 ;pixel 0,2 (4,64)
- lda (r16bl),y ;^^
- ldy tmp1 ;^^
- sta (r16al),y ;^^
- inc tmp0 ;^^
- iny ;^^
- sty tmp1 ;^^
- ldy tmp0 ;pixel 1,2 (5,65)
- lda (r16bl),y ;^^
- ldy tmp1 ;^^
- sta (r16al),y ;^^
- inc tmp0 ;^^
- iny ;^^
- sty tmp1 ;^^
- ldy tmp0 ;pixel 2,2 (6,66)
- lda (r16bl),y ;^^
- ldy tmp1 ;^^
- sta (r16al),y ;^^
- inc tmp0 ;^^
- iny ;^^
- sty tmp1 ;^^
- ldy tmp0 ;pixel 3,2 (7,67)
- lda (r16bl),y ;^^
- ldy tmp1 ;^^
- sta (r16al),y ;^^
- inc tmp0 ;^^
- tya ;^^
- clc ;^^
- adc #29 ;^^
- sta tmp1 ;^^
- ldy tmp0 ;pixel 0,3 (4,96)
- lda (r16bl),y ;^^
- ldy tmp1 ;^^
- sta (r16al),y ;^^
- inc tmp0 ;^^
- iny ;^^
- sty tmp1 ;^^
- ldy tmp0 ;pixel 1,3 (5,97)
- lda (r16bl),y ;^^
- ldy tmp1 ;^^
- sta (r16al),y ;^^
- inc tmp0 ;^^
- iny ;^^
- sty tmp1 ;^^
- ldy tmp0 ;pixel 2,3 (6,98)
- lda (r16bl),y ;^^
- ldy tmp1 ;^^
- sta (r16al),y ;^^
- inc tmp0 ;^^
- iny ;^^
- sty tmp1 ;^^
- ldy tmp0 ;pixel 3,3 (7,99)
- lda (r16bl),y ;^^
- ldy tmp1 ;^^
- sta (r16al),y ;^^
- lda arg0 ;restore registers
- ldx r16bl ;^^
- ldy r16bh ;^^
- rts
- ;private routine that loads tile's
- ;destination address into r16a
- blit_load_dst:
- tay ;lookup table offset into Y
- and #%00000111 ;^^
- sta tmp0 ;^^
- tya ;^^
- lsr ;^^
- and #%00111000 ;^^
- ora tmp0 ;^^
- asl ;^^
- tay ;^^
- lda #<blit_lookup ;lookup table addr. into r16c
- sta r16cl ;^^
- lda #>blit_lookup ;^^
- sta r16ch ;^^
- lda (r16cl),y ;destination addr. into r16a
- sta r16al ;^^
- iny ;^^
- lda (r16cl),y ;^^
- sta r16ah ;^^
- rts
- blit_lookup:
- dcb $00,$02,$04,$02,$08,$02,$0c,$02,$10,$02,$14,$02,$18,$02,$1c,$02
- dcb $80,$02,$84,$02,$88,$02,$8c,$02,$90,$02,$94,$02,$98,$02,$9c,$02
- dcb $00,$03,$04,$03,$08,$03,$0c,$03,$10,$03,$14,$03,$18,$03,$1c,$03
- dcb $80,$03,$84,$03,$88,$03,$8c,$03,$90,$03,$94,$03,$98,$03,$9c,$03
- dcb $00,$04,$04,$04,$08,$04,$0c,$04,$10,$04,$14,$04,$18,$04,$1c,$04
- dcb $80,$04,$84,$04,$88,$04,$8c,$04,$90,$04,$94,$04,$98,$04,$9c,$04
- dcb $00,$05,$04,$05,$08,$05,$0c,$05,$10,$05,$14,$05,$18,$05,$1c,$05
- dcb $80,$05,$84,$05,$88,$05,$8c,$05,$90,$05,$94,$05,$98,$05,$9c,$05
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement