mirror of
https://github.com/fadden/6502bench.git
synced 2024-09-11 20:54:37 +00:00
Also, added a colStride/rowStride test to Apple II bitmap test. Removed ClunkyColor. Made color conversion mode selectable for debugging.
211 lines
4.7 KiB
ArmAsm
211 lines
4.7 KiB
ArmAsm
; Copyright 2019 faddenSoft. All Rights Reserved.
|
|
; See the LICENSE.txt file for distribution terms (Apache 2.0).
|
|
;
|
|
; Assembler: Merlin 32
|
|
|
|
HGR equ $f3e2
|
|
src_ptr equ $00
|
|
xoff equ $02
|
|
width equ $03
|
|
line equ $04
|
|
count equ $05
|
|
|
|
org $1000
|
|
|
|
bit bitmap1 ;give the disassembler a reason to label them
|
|
bit bitmap2
|
|
bit bitmap3
|
|
bit bitmap4
|
|
bit bitmap5
|
|
bit bitmap6
|
|
|
|
jsr HGR ;clear screen, set hi-res mode
|
|
lda #<bitmap1
|
|
sta src_ptr
|
|
lda #>bitmap1
|
|
sta src_ptr+1
|
|
lda #$00
|
|
sta xoff
|
|
lda #$01 ;1x8
|
|
sta width
|
|
jsr draw
|
|
|
|
lda #<bitmap2
|
|
sta src_ptr
|
|
lda #>bitmap2
|
|
sta src_ptr+1
|
|
lda #$03 ;start in odd column
|
|
sta xoff
|
|
lda #$01 ;1x8
|
|
sta width
|
|
jsr draw
|
|
|
|
lda #<bitmap3
|
|
sta src_ptr
|
|
lda #>bitmap3
|
|
sta src_ptr+1
|
|
lda #$06
|
|
sta xoff
|
|
lda #$02 ;2x8
|
|
sta width
|
|
jsr draw
|
|
|
|
lda #<bitmap4
|
|
sta src_ptr
|
|
lda #>bitmap4
|
|
sta src_ptr+1
|
|
lda #$0a
|
|
sta xoff
|
|
lda #$02 ;2x8
|
|
sta width
|
|
jsr draw
|
|
|
|
lda #<bitmap5
|
|
sta src_ptr
|
|
lda #>bitmap5
|
|
sta src_ptr+1
|
|
lda #$0e
|
|
sta xoff
|
|
lda #$03 ;3x8
|
|
sta width
|
|
jsr draw
|
|
|
|
lda #<bitmap6
|
|
sta src_ptr
|
|
lda #>bitmap6
|
|
sta src_ptr+1
|
|
lda #$12
|
|
sta xoff
|
|
lda #$03 ;3x8
|
|
sta width
|
|
jsr odd_draw
|
|
|
|
rts
|
|
|
|
; Copies an Nx8 bitmap to the hi-res screen.
|
|
;
|
|
; Put X offset in "xoff", width-1 in "width_m1", and a pointer to the bitmap
|
|
; data in "src_ptr".
|
|
draw
|
|
ldy #$00 ;index to input byte
|
|
sty line ;init line index to zero
|
|
:loop ldx line
|
|
lda addrs,x
|
|
beq :done
|
|
sta :_copy+2
|
|
lda xoff
|
|
sta :_copy+1
|
|
|
|
ldx #$00
|
|
:loop1 lda (src_ptr),y
|
|
:_copy sta $2000,x
|
|
iny
|
|
inx
|
|
cpx width
|
|
bne :loop1
|
|
inc line
|
|
bne :loop ;(always... more or less)
|
|
:done rts
|
|
|
|
odd_draw
|
|
ldy #$00
|
|
sty line
|
|
:loop ldx line
|
|
lda addrs,x
|
|
beq :done
|
|
sta :_ocopy+2
|
|
lda xoff
|
|
sta :_ocopy+1
|
|
|
|
ldx #$00
|
|
:loop1 lda (src_ptr),y
|
|
:_ocopy sta $2000,x
|
|
iny ;incr source index twice (colStride)
|
|
iny
|
|
inx
|
|
cpx width
|
|
bne :loop1
|
|
iny ;advance twice more (rowStride)
|
|
iny
|
|
inc line
|
|
bne :loop ;(always)
|
|
:done rts
|
|
|
|
; hi byte of base addresses on hi-res screen; must be 8 of them
|
|
addrs
|
|
dfb $20
|
|
dfb $24
|
|
dfb $28
|
|
dfb $2c
|
|
dfb $30
|
|
dfb $34
|
|
dfb $38
|
|
dfb $3c
|
|
dfb $00
|
|
|
|
; 1x8
|
|
bitmap1
|
|
dfb $00
|
|
dfb $01
|
|
dfb $02
|
|
dfb $04
|
|
dfb $08
|
|
dfb $10
|
|
dfb $20
|
|
dfb $40
|
|
|
|
; 1x8 (odd byte)
|
|
bitmap2
|
|
dfb $c0
|
|
dfb $a0
|
|
dfb $90
|
|
dfb $88
|
|
dfb $84
|
|
dfb $82
|
|
dfb $81
|
|
dfb $80
|
|
|
|
; 2x8
|
|
bitmap3
|
|
dfb $d5,$aa ;pure colors
|
|
dfb $aa,$d5
|
|
dfb $55,$2a
|
|
dfb $2a,$55
|
|
dfb $d5,$2a ;high bit split
|
|
dfb $aa,$55
|
|
dfb $55,$aa
|
|
dfb $2a,$d5
|
|
|
|
; 2x8
|
|
bitmap4
|
|
dfb $40,$00 ;bits at the edge
|
|
dfb $00,$01
|
|
dfb $40,$01
|
|
dfb $60,$03
|
|
dfb $40,$02
|
|
dfb $d5,$d5 ;same byte odd/even
|
|
dfb $aa,$aa
|
|
dfb $d5,$55
|
|
|
|
; 3x8
|
|
bitmap5
|
|
dfb $7f,$7f,$7f
|
|
dfb $03,$08,$60
|
|
dfb $03,$1c,$60
|
|
dfb $06,$3e,$30
|
|
dfb $06,$7f,$30
|
|
dfb $43,$77,$61
|
|
dfb $63,$63,$63
|
|
dfb $7f,$7f,$7f
|
|
|
|
; 3x8, colStride=2 rowStride=8
|
|
bitmap6
|
|
dfb $55,7,$08,7,$55,7,1,1
|
|
dfb $15,7,$1c,7,$54,7,1,1
|
|
dfb $05,7,$2a,7,$50,7,1,1
|
|
dfb $01,7,$14,7,$40,7,1,1
|
|
dfb $81,7,$94,7,$c0,7,1,1
|
|
dfb $85,7,$aa,7,$d0,7,1,1
|
|
dfb $95,7,$9c,7,$d4,7,1,1
|
|
dfb $d5,7,$88,7,$d5,7,1,1
|