Only my 2nd post and I'm needing help already
I'm still learning 6502 machine code ATM and wondered is one of the resident guru's could shine some light on my code.
What I am trying to achieve here is take an 8x8 character matrix and display it on screen as a double height magnified x 8 (ie: when a pixel is set an inverse space is displayed x2 one below the other, otherwise a normal space is displayed x2).
Now my code works fine no problem, but struggled to find a way to fit a 8 way loop around my code (for each of the 8 bytes that make up the character - to keep it as small as possible as I am programming with unexpanded VIC in mind) instead of repeating the code block 8 times (well only 7 in the example ATM).
The problem was with adding to the screen address for each successive byte, I just ended up scratching my head.
Thanks in advance for any input
KingTrode
P.S: Sorry about the wonky code formatting, it went all skewed when I pasted it
Code: Select all
CHAR_CODE equ $01
CHAR_ROM equ $8000
PIXEL_ON equ 96+128
PIXEL_OFF equ 96
SCREEN_START equ $1e00
COLOR_START equ $9600
COLOR_CODE equ $00
SYS_ADDRESS
ldx #$00
BYTE_LOOP lda CHAR_ROM + (#CHAR_CODE * #$08),x
ldy #$00
BIT_LOOP pha
and #$80
bne SET_PIXEL
lda #PIXEL_OFF
jmp SHOW_PIXEL
SET_PIXEL lda #PIXEL_ON
SHOW_PIXEL sta SCREEN_START,y
sta SCREEN_START+22,y
lda #COLOR_CODE
sta COLOR_START,y
sta COLOR_START+22,y
pla
rol
iny
cpy #$08
bne BIT_LOOP
lda CHAR_ROM + (#CHAR_CODE * $08) +1,x
ldy #$00
BIT_LOOP1 pha
and #$80
bne SET_PIXEL1
lda #PIXEL_OFF
jmp SHOW_PIXEL1
SET_PIXEL1 lda #PIXEL_ON
SHOW_PIXEL1 sta SCREEN_START+44,y
sta SCREEN_START+66,y
lda #COLOR_CODE
sta COLOR_START+44,y
sta COLOR_START+66,y
pla
rol
iny
cpy #$08
bne BIT_LOOP1
lda CHAR_ROM + (#CHAR_CODE * $08) +2,x
ldy #$00
BIT_LOOP2 pha
and #$80
bne SET_PIXEL2
lda #PIXEL_OFF
jmp SHOW_PIXEL2
SET_PIXEL2 lda #PIXEL_ON
SHOW_PIXEL2 sta SCREEN_START+88,y
sta SCREEN_START+110,y
lda #COLOR_CODE
sta COLOR_START+88,y
sta COLOR_START+110,y
pla
rol
iny
cpy #$08
bne BIT_LOOP2
lda CHAR_ROM + (#CHAR_CODE * $08) +3,x
ldy #$00
BIT_LOOP3 pha
and #$80
bne SET_PIXEL3
lda #PIXEL_OFF
jmp SHOW_PIXEL3
SET_PIXEL3 lda #PIXEL_ON
SHOW_PIXEL3 sta SCREEN_START+132,y
sta SCREEN_START+154,y
lda #COLOR_CODE
sta COLOR_START+132,y
sta COLOR_START+154,y
pla
rol
iny
cpy #$08
bne BIT_LOOP3
lda CHAR_ROM + (#CHAR_CODE * $08) +4,x
ldy #$00
BIT_LOOP4 pha
and #$80
bne SET_PIXEL4
lda #PIXEL_OFF
jmp SHOW_PIXEL4
SET_PIXEL4 lda #PIXEL_ON
SHOW_PIXEL4 sta SCREEN_START+176,y
sta SCREEN_START+198,y
lda #COLOR_CODE
sta COLOR_START+176,y
sta COLOR_START+198,y
pla
rol
iny
cpy #$08
bne BIT_LOOP4
lda CHAR_ROM + (#CHAR_CODE * $08) +5,x
ldy #$00
BIT_LOOP5 pha
and #$80
bne SET_PIXEL5
lda #PIXEL_OFF
jmp SHOW_PIXEL5
SET_PIXEL5 lda #PIXEL_ON
SHOW_PIXEL5 sta SCREEN_START+220,y
sta SCREEN_START+242,y
lda #COLOR_CODE
sta COLOR_START+220,y
sta COLOR_START+242,y
pla
rol
iny
cpy #$08
bne BIT_LOOP5
lda CHAR_ROM + (#CHAR_CODE * $08) +6,x
ldy #$00
BIT_LOOP6 pha
and #$80
bne SET_PIXEL6
lda #PIXEL_OFF
jmp SHOW_PIXEL6
SET_PIXEL6 lda #PIXEL_ON
SHOW_PIXEL6 sta SCREEN_START+264,y
sta SCREEN_START+286,y
lda #COLOR_CODE
sta COLOR_START+264,y
sta COLOR_START+286,y
pla
rol
iny
cpy #$08
bne BIT_LOOP6
FINISHED rts ; Return to BASIC