123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175 |
- .text
- #include "memmap.i65"
- hiprint:
- sep #$20 : .as
- lda print_count
- sta print_count_tmp
- stz print_done
- rep #$30 : .xl : .al
- lda print_x
- and #$00ff
- lsr
- bcs print_bg1
- ldx #!BG1_TILE_BUF ; for 2nd loop
- phx
- ldx #!BG2_TILE_BUF ; for 1st loop
- phx
- bra print_bg_cont
- print_bg1
- ldx #!BG2_TILE_BUF+2 ; for 2nd loop
- phx
- ldx #!BG1_TILE_BUF ; for 1st loop da whoop
- phx
- bra print_bg_cont
- print_bg_cont
- sta !print_temp
- lda !print_y
- and #$00ff
- asl
- asl
- asl
- asl
- asl
- clc
- adc !print_temp
- asl ; double the offset for WRAM addressing
- tay ; zonday
- plx
- phy ; offset from tilemap start
- stx !print_temp
- clc
- adc !print_temp
- ; we need to transfer to WRAM and from there to VRAM via DMA during VBLANK
- ; because VRAM can only be accessed during VBLANK and forced blanking.
- sta $2181
- sep #$20 : .as
- lda #$7f ;we really only need bit 0. full bank given for clarity
- sta $2183
- print_loop
- ldx !print_src
- lda !print_bank
- pha
- plb
- phx ; source addr
- print_loop_inner
- lda !0,x
- asl
- sta @$2180
- lda @print_pal
- asl
- asl
- adc #$00
- sta @$2180
- lda @print_done
- inc
- sta @print_done
- inx
- lda !0,x
- beq print_loop2
- inx
- lda !0,x
- beq print_loop2
- lda @print_count_tmp
- dec
- dec
- sta @print_count_tmp
- beq print_loop2
- bmi print_loop2
- bra print_loop_inner
- print_loop2
- lda @print_count
- dec
- sta @print_count_tmp
- lda #$00
- pha
- plb
- rep #$30 : .al : .xl
- ply ; source addr
- iny
- pla ; offset from tilemap start
- plx ; other tilemap addr
- stx !print_temp
- clc
- adc !print_temp ; tilemap+offset
- sta $2181
- tyx
- sep #$20 : .as
- lda print_bank
- pha
- plb
- print_loop2_inner
- lda !0,x
- asl
- sta @$2180
- lda @print_pal
- asl
- asl
- adc #$00
- sta @$2180
- lda @print_done
- inc
- sta @print_done
- inx
- lda !0,x
- beq print_end
- inx
- lda !0,x
- beq print_end
- lda @print_count_tmp
- dec
- dec
- sta @print_count_tmp
- beq print_end
- bmi print_end
- bra print_loop2_inner
- print_end
- lda #$00
- pha
- plb
- rts
- loprint:
- rep #$30 : .xl : .al
- lda !print_x
- and #$00ff
- asl ;double the offset for WRAM addressing
- clc
- adc #!BG2_TILE_BUF
- sta !print_temp
- lda !print_y
- and #$00ff
- asl
- asl
- asl
- asl
- asl
- asl ;double the offset for WRAM addressing
- clc
- adc !print_temp
- ; we need to transfer to WRAM and from there to VRAM via DMA during VBLANK
- ; because VRAM can only be accessed during VBLANK and forced blanking.
- sta $2181
- sep #$20 : .as
- lda #$7f ;we really only need bit 0. full bank given for clarity
- sta $2183
- ldx !print_src
- lda !print_bank
- pha
- plb
- loprint_loop_inner
- lda !0,x
- beq loprint_end
- sta @$2180
- lda #$00
- adc #$00
- ora #$20
- sta @$2180
- inx
- bra loprint_loop_inner
- loprint_end
- lda #$00
- pha
- plb
- rts
-
|