2019-09-18 19:53:32 +00:00
|
|
|
// Illustrates problem with bitmap-draw.kc line()
|
|
|
|
// Reported by Janne Johansson
|
|
|
|
.pc = $801 "Basic"
|
|
|
|
:BasicUpstart(main)
|
|
|
|
.pc = $80d "Program"
|
|
|
|
.label BORDERCOL = $d020
|
|
|
|
.label BGCOL = $d021
|
|
|
|
.label D011 = $d011
|
|
|
|
.const VIC_BMM = $20
|
|
|
|
.const VIC_DEN = $10
|
|
|
|
.const VIC_RSEL = 8
|
|
|
|
.label VIC_MEMORY = $d018
|
|
|
|
.label SCREEN = $400
|
|
|
|
.label BITMAP = $2000
|
|
|
|
.label next = 5
|
|
|
|
main: {
|
2020-02-23 08:44:36 +00:00
|
|
|
// *BORDERCOL = 0
|
2019-09-18 19:53:32 +00:00
|
|
|
lda #0
|
|
|
|
sta BORDERCOL
|
2020-02-23 08:44:36 +00:00
|
|
|
// *BGCOL = 0
|
2019-09-18 19:53:32 +00:00
|
|
|
sta BGCOL
|
2020-02-23 08:44:36 +00:00
|
|
|
// *D011 = VIC_BMM|VIC_DEN|VIC_RSEL|3
|
2019-09-18 19:53:32 +00:00
|
|
|
lda #VIC_BMM|VIC_DEN|VIC_RSEL|3
|
|
|
|
sta D011
|
2020-02-23 08:44:36 +00:00
|
|
|
// *VIC_MEMORY = (byte)((((word)SCREEN&$3fff)/$40)|(((word)BITMAP&$3fff)/$400))
|
2019-09-18 19:53:32 +00:00
|
|
|
lda #(SCREEN&$3fff)/$40|(BITMAP&$3fff)/$400
|
|
|
|
sta VIC_MEMORY
|
2020-02-23 08:44:36 +00:00
|
|
|
// bitmap_init(BITMAP)
|
2019-09-18 19:53:32 +00:00
|
|
|
jsr bitmap_init
|
2020-02-23 08:44:36 +00:00
|
|
|
// bitmap_clear()
|
2019-09-18 19:53:32 +00:00
|
|
|
jsr bitmap_clear
|
2020-02-23 08:44:36 +00:00
|
|
|
// init_screen()
|
2019-09-18 19:53:32 +00:00
|
|
|
jsr init_screen
|
|
|
|
lda #0
|
|
|
|
sta.z next
|
2019-09-29 21:13:37 +00:00
|
|
|
__b1:
|
2020-02-23 08:44:36 +00:00
|
|
|
// bitmap_line(0,next,0,100)
|
2019-09-18 19:53:32 +00:00
|
|
|
ldx.z next
|
|
|
|
jsr bitmap_line
|
2020-02-23 08:44:36 +00:00
|
|
|
// next++;
|
2019-09-18 19:53:32 +00:00
|
|
|
inc.z next
|
2019-09-29 21:13:37 +00:00
|
|
|
jmp __b1
|
2019-09-18 19:53:32 +00:00
|
|
|
}
|
|
|
|
// Draw a line on the bitmap
|
|
|
|
// bitmap_line(byte register(X) x1)
|
|
|
|
bitmap_line: {
|
|
|
|
.label x0 = 0
|
|
|
|
.label y0 = 0
|
|
|
|
.label y1 = $64
|
2020-02-23 08:44:36 +00:00
|
|
|
// if(x0<x1)
|
2019-09-18 19:53:32 +00:00
|
|
|
cpx #x0
|
|
|
|
beq !+
|
2019-09-29 21:13:37 +00:00
|
|
|
bcs __b1
|
2019-09-18 19:53:32 +00:00
|
|
|
!:
|
2020-02-23 08:44:36 +00:00
|
|
|
// xd = x0-x1
|
2019-09-18 19:53:32 +00:00
|
|
|
txa
|
2020-02-23 08:44:36 +00:00
|
|
|
// if(yd<xd)
|
2019-09-18 19:53:32 +00:00
|
|
|
cmp #y1
|
|
|
|
beq !+
|
2019-09-29 21:13:37 +00:00
|
|
|
bcs __b4
|
2019-09-18 19:53:32 +00:00
|
|
|
!:
|
2020-02-23 08:44:36 +00:00
|
|
|
// bitmap_line_ydxd(y0, x0, y1, yd, xd)
|
2019-09-18 19:53:32 +00:00
|
|
|
sta.z bitmap_line_ydxd.xd
|
|
|
|
jsr bitmap_line_ydxd
|
2020-02-23 08:44:36 +00:00
|
|
|
// }
|
2019-09-18 19:53:32 +00:00
|
|
|
rts
|
2019-09-29 21:13:37 +00:00
|
|
|
__b4:
|
2020-02-23 08:44:36 +00:00
|
|
|
// bitmap_line_xdyd(x1, y1, x0, xd, yd)
|
2019-09-18 19:53:32 +00:00
|
|
|
stx.z bitmap_line_xdyd.x
|
|
|
|
sta.z bitmap_line_xdyd.xd
|
|
|
|
jsr bitmap_line_xdyd
|
|
|
|
rts
|
2019-09-29 21:13:37 +00:00
|
|
|
__b1:
|
2020-02-23 08:44:36 +00:00
|
|
|
// xd = x1-x0
|
2019-09-18 19:53:32 +00:00
|
|
|
txa
|
2020-02-23 08:44:36 +00:00
|
|
|
// if(yd<xd)
|
2019-09-18 19:53:32 +00:00
|
|
|
cmp #y1
|
|
|
|
beq !+
|
2019-09-29 21:13:37 +00:00
|
|
|
bcs __b7
|
2019-09-18 19:53:32 +00:00
|
|
|
!:
|
2020-02-23 08:44:36 +00:00
|
|
|
// bitmap_line_ydxi(y0, x0, y1, yd, xd)
|
2019-09-18 19:53:32 +00:00
|
|
|
sta.z bitmap_line_ydxi.xd
|
|
|
|
jsr bitmap_line_ydxi
|
|
|
|
rts
|
2019-09-29 21:13:37 +00:00
|
|
|
__b7:
|
2020-02-23 08:44:36 +00:00
|
|
|
// bitmap_line_xdyi(x0, y0, x1, xd, yd)
|
2019-09-18 19:53:32 +00:00
|
|
|
stx.z bitmap_line_xdyi.x1
|
|
|
|
sta.z bitmap_line_xdyi.xd
|
|
|
|
jsr bitmap_line_xdyi
|
|
|
|
rts
|
|
|
|
}
|
2019-12-26 08:51:41 +00:00
|
|
|
// bitmap_line_xdyi(byte zp(2) x, byte zp(3) y, byte zp(6) x1, byte zp($b) xd)
|
2019-09-18 19:53:32 +00:00
|
|
|
bitmap_line_xdyi: {
|
|
|
|
.label x1 = 6
|
|
|
|
.label xd = $b
|
|
|
|
.label x = 2
|
|
|
|
.label e = 4
|
|
|
|
.label y = 3
|
|
|
|
lda #bitmap_line.y1>>1
|
|
|
|
sta.z e
|
|
|
|
lda #bitmap_line.y0
|
|
|
|
sta.z y
|
|
|
|
lda #bitmap_line.x0
|
|
|
|
sta.z x
|
2019-09-29 21:13:37 +00:00
|
|
|
__b1:
|
2020-02-23 08:44:36 +00:00
|
|
|
// bitmap_plot(x,y)
|
2019-09-18 19:53:32 +00:00
|
|
|
ldx.z x
|
|
|
|
ldy.z y
|
|
|
|
jsr bitmap_plot
|
2020-02-23 08:44:36 +00:00
|
|
|
// x++;
|
2019-09-18 19:53:32 +00:00
|
|
|
inc.z x
|
2020-02-23 08:44:36 +00:00
|
|
|
// e = e+yd
|
2019-09-18 19:53:32 +00:00
|
|
|
lax.z e
|
|
|
|
axs #-[bitmap_line.y1]
|
|
|
|
stx.z e
|
2020-02-23 08:44:36 +00:00
|
|
|
// if(xd<e)
|
2019-09-18 19:53:32 +00:00
|
|
|
lda.z xd
|
|
|
|
cmp.z e
|
2019-09-29 21:13:37 +00:00
|
|
|
bcs __b2
|
2020-02-23 08:44:36 +00:00
|
|
|
// y++;
|
2019-09-18 19:53:32 +00:00
|
|
|
inc.z y
|
2020-02-23 08:44:36 +00:00
|
|
|
// e = e - xd
|
2019-09-18 19:53:32 +00:00
|
|
|
txa
|
|
|
|
sec
|
|
|
|
sbc.z xd
|
|
|
|
sta.z e
|
2019-09-29 21:13:37 +00:00
|
|
|
__b2:
|
2020-02-23 08:44:36 +00:00
|
|
|
// x1+1
|
2019-09-18 19:53:32 +00:00
|
|
|
ldx.z x1
|
|
|
|
inx
|
2020-02-23 08:44:36 +00:00
|
|
|
// while (x!=(x1+1))
|
2019-09-18 19:53:32 +00:00
|
|
|
cpx.z x
|
2019-09-29 21:13:37 +00:00
|
|
|
bne __b1
|
2020-02-23 08:44:36 +00:00
|
|
|
// }
|
2019-09-18 19:53:32 +00:00
|
|
|
rts
|
|
|
|
}
|
|
|
|
// bitmap_plot(byte register(X) x, byte register(Y) y)
|
|
|
|
bitmap_plot: {
|
|
|
|
.label plotter_x = 7
|
|
|
|
.label plotter_y = 9
|
|
|
|
.label plotter = 7
|
2020-02-23 08:44:36 +00:00
|
|
|
// plotter_x = { bitmap_plot_xhi[x], bitmap_plot_xlo[x] }
|
2019-09-18 19:53:32 +00:00
|
|
|
lda bitmap_plot_xhi,x
|
|
|
|
sta.z plotter_x+1
|
|
|
|
lda bitmap_plot_xlo,x
|
|
|
|
sta.z plotter_x
|
2020-02-23 08:44:36 +00:00
|
|
|
// plotter_y = { bitmap_plot_yhi[y], bitmap_plot_ylo[y] }
|
2019-09-18 19:53:32 +00:00
|
|
|
lda bitmap_plot_yhi,y
|
|
|
|
sta.z plotter_y+1
|
|
|
|
lda bitmap_plot_ylo,y
|
|
|
|
sta.z plotter_y
|
2020-02-23 08:44:36 +00:00
|
|
|
// plotter_x+plotter_y
|
2019-09-18 19:53:32 +00:00
|
|
|
lda.z plotter
|
|
|
|
clc
|
|
|
|
adc.z plotter_y
|
|
|
|
sta.z plotter
|
|
|
|
lda.z plotter+1
|
|
|
|
adc.z plotter_y+1
|
|
|
|
sta.z plotter+1
|
2020-02-23 08:44:36 +00:00
|
|
|
// *plotter | bitmap_plot_bit[x]
|
2019-09-18 19:53:32 +00:00
|
|
|
lda bitmap_plot_bit,x
|
|
|
|
ldy #0
|
|
|
|
ora (plotter),y
|
2020-02-23 08:44:36 +00:00
|
|
|
// *plotter = *plotter | bitmap_plot_bit[x]
|
2019-09-18 19:53:32 +00:00
|
|
|
sta (plotter),y
|
2020-02-23 08:44:36 +00:00
|
|
|
// }
|
2019-09-18 19:53:32 +00:00
|
|
|
rts
|
|
|
|
}
|
2019-12-26 08:51:41 +00:00
|
|
|
// bitmap_line_ydxi(byte zp(3) y, byte zp(2) x, byte zp(6) xd)
|
2019-09-18 19:53:32 +00:00
|
|
|
bitmap_line_ydxi: {
|
|
|
|
.label xd = 6
|
|
|
|
.label e = 4
|
|
|
|
.label y = 3
|
|
|
|
.label x = 2
|
2020-02-23 08:44:36 +00:00
|
|
|
// e = xd>>1
|
2019-09-18 19:53:32 +00:00
|
|
|
lda.z xd
|
|
|
|
lsr
|
|
|
|
sta.z e
|
|
|
|
lda #bitmap_line.y0
|
|
|
|
sta.z y
|
|
|
|
lda #bitmap_line.x0
|
|
|
|
sta.z x
|
2019-09-29 21:13:37 +00:00
|
|
|
__b1:
|
2020-02-23 08:44:36 +00:00
|
|
|
// bitmap_plot(x,y)
|
2019-09-18 19:53:32 +00:00
|
|
|
ldx.z x
|
|
|
|
ldy.z y
|
|
|
|
jsr bitmap_plot
|
2020-02-23 08:44:36 +00:00
|
|
|
// y++;
|
2019-09-18 19:53:32 +00:00
|
|
|
inc.z y
|
2020-02-23 08:44:36 +00:00
|
|
|
// e = e+xd
|
2019-09-18 19:53:32 +00:00
|
|
|
lda.z e
|
|
|
|
clc
|
|
|
|
adc.z xd
|
|
|
|
sta.z e
|
2020-02-23 08:44:36 +00:00
|
|
|
// if(yd<e)
|
2019-09-18 19:53:32 +00:00
|
|
|
lda #bitmap_line.y1
|
|
|
|
cmp.z e
|
2019-09-29 21:13:37 +00:00
|
|
|
bcs __b2
|
2020-02-23 08:44:36 +00:00
|
|
|
// x++;
|
2019-09-18 19:53:32 +00:00
|
|
|
inc.z x
|
2020-02-23 08:44:36 +00:00
|
|
|
// e = e - yd
|
2019-09-18 19:53:32 +00:00
|
|
|
lax.z e
|
|
|
|
axs #bitmap_line.y1
|
|
|
|
stx.z e
|
2019-09-29 21:13:37 +00:00
|
|
|
__b2:
|
2020-02-23 08:44:36 +00:00
|
|
|
// while (y!=(y1+1))
|
2019-09-18 19:53:32 +00:00
|
|
|
lda #bitmap_line.y1+1
|
|
|
|
cmp.z y
|
2019-09-29 21:13:37 +00:00
|
|
|
bne __b1
|
2020-02-23 08:44:36 +00:00
|
|
|
// }
|
2019-09-18 19:53:32 +00:00
|
|
|
rts
|
|
|
|
}
|
2019-12-26 08:51:41 +00:00
|
|
|
// bitmap_line_xdyd(byte zp(2) x, byte zp(3) y, byte zp(6) xd)
|
2019-09-18 19:53:32 +00:00
|
|
|
bitmap_line_xdyd: {
|
|
|
|
.label x = 2
|
|
|
|
.label xd = 6
|
|
|
|
.label e = 4
|
|
|
|
.label y = 3
|
|
|
|
lda #bitmap_line.y1>>1
|
|
|
|
sta.z e
|
|
|
|
lda #bitmap_line.y1
|
|
|
|
sta.z y
|
2019-09-29 21:13:37 +00:00
|
|
|
__b1:
|
2020-02-23 08:44:36 +00:00
|
|
|
// bitmap_plot(x,y)
|
2019-09-18 19:53:32 +00:00
|
|
|
ldx.z x
|
|
|
|
ldy.z y
|
|
|
|
jsr bitmap_plot
|
2020-02-23 08:44:36 +00:00
|
|
|
// x++;
|
2019-09-18 19:53:32 +00:00
|
|
|
inc.z x
|
2020-02-23 08:44:36 +00:00
|
|
|
// e = e+yd
|
2019-09-18 19:53:32 +00:00
|
|
|
lax.z e
|
|
|
|
axs #-[bitmap_line.y1]
|
|
|
|
stx.z e
|
2020-02-23 08:44:36 +00:00
|
|
|
// if(xd<e)
|
2019-09-18 19:53:32 +00:00
|
|
|
lda.z xd
|
|
|
|
cmp.z e
|
2019-09-29 21:13:37 +00:00
|
|
|
bcs __b2
|
2020-02-23 08:44:36 +00:00
|
|
|
// y--;
|
2019-09-18 19:53:32 +00:00
|
|
|
dec.z y
|
2020-02-23 08:44:36 +00:00
|
|
|
// e = e - xd
|
2019-09-18 19:53:32 +00:00
|
|
|
txa
|
|
|
|
sec
|
|
|
|
sbc.z xd
|
|
|
|
sta.z e
|
2019-09-29 21:13:37 +00:00
|
|
|
__b2:
|
2020-02-23 08:44:36 +00:00
|
|
|
// while (x!=(x1+1))
|
2019-09-18 19:53:32 +00:00
|
|
|
lda #1
|
|
|
|
cmp.z x
|
2019-09-29 21:13:37 +00:00
|
|
|
bne __b1
|
2020-02-23 08:44:36 +00:00
|
|
|
// }
|
2019-09-18 19:53:32 +00:00
|
|
|
rts
|
|
|
|
}
|
2019-12-26 08:51:41 +00:00
|
|
|
// bitmap_line_ydxd(byte zp(3) y, byte zp(2) x, byte zp(6) xd)
|
2019-09-18 19:53:32 +00:00
|
|
|
bitmap_line_ydxd: {
|
|
|
|
.label xd = 6
|
|
|
|
.label e = 4
|
|
|
|
.label y = 3
|
|
|
|
.label x = 2
|
2020-02-23 08:44:36 +00:00
|
|
|
// e = xd>>1
|
2019-09-18 19:53:32 +00:00
|
|
|
lda.z xd
|
|
|
|
lsr
|
|
|
|
sta.z e
|
|
|
|
lda #bitmap_line.y0
|
|
|
|
sta.z y
|
|
|
|
lda #bitmap_line.x0
|
|
|
|
sta.z x
|
2019-09-29 21:13:37 +00:00
|
|
|
__b1:
|
2020-02-23 08:44:36 +00:00
|
|
|
// bitmap_plot(x,y)
|
2019-09-18 19:53:32 +00:00
|
|
|
ldx.z x
|
|
|
|
ldy.z y
|
|
|
|
jsr bitmap_plot
|
2020-02-23 08:44:36 +00:00
|
|
|
// y = y++;
|
2019-09-18 19:53:32 +00:00
|
|
|
inc.z y
|
2020-02-23 08:44:36 +00:00
|
|
|
// e = e+xd
|
2019-09-18 19:53:32 +00:00
|
|
|
lda.z e
|
|
|
|
clc
|
|
|
|
adc.z xd
|
|
|
|
sta.z e
|
2020-02-23 08:44:36 +00:00
|
|
|
// if(yd<e)
|
2019-09-18 19:53:32 +00:00
|
|
|
lda #bitmap_line.y1
|
|
|
|
cmp.z e
|
2019-09-29 21:13:37 +00:00
|
|
|
bcs __b2
|
2020-02-23 08:44:36 +00:00
|
|
|
// x--;
|
2019-09-18 19:53:32 +00:00
|
|
|
dec.z x
|
2020-02-23 08:44:36 +00:00
|
|
|
// e = e - yd
|
2019-09-18 19:53:32 +00:00
|
|
|
lax.z e
|
|
|
|
axs #bitmap_line.y1
|
|
|
|
stx.z e
|
2019-09-29 21:13:37 +00:00
|
|
|
__b2:
|
2020-02-23 08:44:36 +00:00
|
|
|
// while (y!=(y1+1))
|
2019-09-18 19:53:32 +00:00
|
|
|
lda #bitmap_line.y1+1
|
|
|
|
cmp.z y
|
2019-09-29 21:13:37 +00:00
|
|
|
bne __b1
|
2020-02-23 08:44:36 +00:00
|
|
|
// }
|
2019-09-18 19:53:32 +00:00
|
|
|
rts
|
|
|
|
}
|
|
|
|
init_screen: {
|
|
|
|
.label c = 7
|
|
|
|
lda #<SCREEN
|
|
|
|
sta.z c
|
|
|
|
lda #>SCREEN
|
|
|
|
sta.z c+1
|
2019-09-29 21:13:37 +00:00
|
|
|
__b1:
|
2020-02-23 08:44:36 +00:00
|
|
|
// for(byte* c = SCREEN; c!=SCREEN+$400;c++)
|
2019-09-18 19:53:32 +00:00
|
|
|
lda.z c+1
|
|
|
|
cmp #>SCREEN+$400
|
2019-09-29 21:13:37 +00:00
|
|
|
bne __b2
|
2019-09-18 19:53:32 +00:00
|
|
|
lda.z c
|
|
|
|
cmp #<SCREEN+$400
|
2019-09-29 21:13:37 +00:00
|
|
|
bne __b2
|
2020-02-23 08:44:36 +00:00
|
|
|
// }
|
2019-09-18 19:53:32 +00:00
|
|
|
rts
|
2019-09-29 21:13:37 +00:00
|
|
|
__b2:
|
2020-02-23 08:44:36 +00:00
|
|
|
// *c = $14
|
2019-09-18 19:53:32 +00:00
|
|
|
lda #$14
|
|
|
|
ldy #0
|
|
|
|
sta (c),y
|
2020-02-23 08:44:36 +00:00
|
|
|
// for(byte* c = SCREEN; c!=SCREEN+$400;c++)
|
2019-09-18 19:53:32 +00:00
|
|
|
inc.z c
|
|
|
|
bne !+
|
|
|
|
inc.z c+1
|
|
|
|
!:
|
2019-09-29 21:13:37 +00:00
|
|
|
jmp __b1
|
2019-09-18 19:53:32 +00:00
|
|
|
}
|
|
|
|
// Clear all graphics on the bitmap
|
|
|
|
bitmap_clear: {
|
|
|
|
.label bitmap = 7
|
|
|
|
.label y = 5
|
2020-02-23 08:44:36 +00:00
|
|
|
// (byte*) { bitmap_plot_xhi[0], bitmap_plot_xlo[0] }
|
2019-09-18 19:53:32 +00:00
|
|
|
lda bitmap_plot_xlo
|
|
|
|
sta.z bitmap
|
|
|
|
lda bitmap_plot_xhi
|
|
|
|
sta.z bitmap+1
|
|
|
|
lda #0
|
|
|
|
sta.z y
|
2019-09-29 21:13:37 +00:00
|
|
|
__b1:
|
2019-09-18 19:53:32 +00:00
|
|
|
ldx #0
|
2019-09-29 21:13:37 +00:00
|
|
|
__b2:
|
2020-02-23 08:44:36 +00:00
|
|
|
// *bitmap++ = 0
|
2019-09-18 19:53:32 +00:00
|
|
|
lda #0
|
|
|
|
tay
|
|
|
|
sta (bitmap),y
|
2020-02-23 08:44:36 +00:00
|
|
|
// *bitmap++ = 0;
|
2019-09-18 19:53:32 +00:00
|
|
|
inc.z bitmap
|
|
|
|
bne !+
|
|
|
|
inc.z bitmap+1
|
|
|
|
!:
|
2020-02-23 08:44:36 +00:00
|
|
|
// for( byte x: 0..199 )
|
2019-09-18 19:53:32 +00:00
|
|
|
inx
|
|
|
|
cpx #$c8
|
2019-09-29 21:13:37 +00:00
|
|
|
bne __b2
|
2020-02-23 08:44:36 +00:00
|
|
|
// for( byte y: 0..39 )
|
2019-09-18 19:53:32 +00:00
|
|
|
inc.z y
|
|
|
|
lda #$28
|
|
|
|
cmp.z y
|
2019-09-29 21:13:37 +00:00
|
|
|
bne __b1
|
2020-02-23 08:44:36 +00:00
|
|
|
// }
|
2019-09-18 19:53:32 +00:00
|
|
|
rts
|
|
|
|
}
|
|
|
|
// Initialize the bitmap plotter tables for a specific bitmap
|
|
|
|
bitmap_init: {
|
2019-09-29 21:13:37 +00:00
|
|
|
.label __10 = $b
|
2019-09-18 19:53:32 +00:00
|
|
|
.label yoffs = 7
|
|
|
|
ldy #$80
|
|
|
|
ldx #0
|
2019-09-29 21:13:37 +00:00
|
|
|
__b1:
|
2020-02-23 08:44:36 +00:00
|
|
|
// x&$f8
|
2019-09-18 19:53:32 +00:00
|
|
|
txa
|
|
|
|
and #$f8
|
2020-02-23 08:44:36 +00:00
|
|
|
// bitmap_plot_xlo[x] = x&$f8
|
2019-09-18 19:53:32 +00:00
|
|
|
sta bitmap_plot_xlo,x
|
2020-02-23 08:44:36 +00:00
|
|
|
// bitmap_plot_xhi[x] = >bitmap
|
2019-09-18 19:53:32 +00:00
|
|
|
lda #>BITMAP
|
|
|
|
sta bitmap_plot_xhi,x
|
2020-02-23 08:44:36 +00:00
|
|
|
// bitmap_plot_bit[x] = bits
|
2019-09-18 19:53:32 +00:00
|
|
|
tya
|
|
|
|
sta bitmap_plot_bit,x
|
2020-02-23 08:44:36 +00:00
|
|
|
// bits = bits>>1
|
2019-09-18 19:53:32 +00:00
|
|
|
tya
|
|
|
|
lsr
|
|
|
|
tay
|
2020-02-23 08:44:36 +00:00
|
|
|
// if(bits==0)
|
2019-09-18 19:53:32 +00:00
|
|
|
cpy #0
|
2019-09-29 21:13:37 +00:00
|
|
|
bne __b2
|
2019-09-18 19:53:32 +00:00
|
|
|
ldy #$80
|
2019-09-29 21:13:37 +00:00
|
|
|
__b2:
|
2020-02-23 08:44:36 +00:00
|
|
|
// for(byte x : 0..255)
|
2019-09-18 19:53:32 +00:00
|
|
|
inx
|
|
|
|
cpx #0
|
2019-09-29 21:13:37 +00:00
|
|
|
bne __b1
|
2019-09-18 19:53:32 +00:00
|
|
|
lda #<0
|
|
|
|
sta.z yoffs
|
|
|
|
sta.z yoffs+1
|
|
|
|
tax
|
2019-09-29 21:13:37 +00:00
|
|
|
__b3:
|
2020-02-23 08:44:36 +00:00
|
|
|
// y&$7
|
2019-09-18 19:53:32 +00:00
|
|
|
lda #7
|
2019-09-29 21:13:37 +00:00
|
|
|
sax.z __10
|
2020-02-23 08:44:36 +00:00
|
|
|
// <yoffs
|
2019-09-18 19:53:32 +00:00
|
|
|
lda.z yoffs
|
2020-02-23 08:44:36 +00:00
|
|
|
// y&$7 | <yoffs
|
2019-09-29 21:13:37 +00:00
|
|
|
ora.z __10
|
2020-02-23 08:44:36 +00:00
|
|
|
// bitmap_plot_ylo[y] = y&$7 | <yoffs
|
2019-09-18 19:53:32 +00:00
|
|
|
sta bitmap_plot_ylo,x
|
2020-02-23 08:44:36 +00:00
|
|
|
// >yoffs
|
2019-09-18 19:53:32 +00:00
|
|
|
lda.z yoffs+1
|
2020-02-23 08:44:36 +00:00
|
|
|
// bitmap_plot_yhi[y] = >yoffs
|
2019-09-18 19:53:32 +00:00
|
|
|
sta bitmap_plot_yhi,x
|
2020-02-23 08:44:36 +00:00
|
|
|
// if((y&$7)==7)
|
2019-09-18 19:53:32 +00:00
|
|
|
lda #7
|
2019-09-29 21:13:37 +00:00
|
|
|
cmp.z __10
|
|
|
|
bne __b4
|
2020-02-23 08:44:36 +00:00
|
|
|
// yoffs = yoffs + 40*8
|
2019-09-18 19:53:32 +00:00
|
|
|
clc
|
|
|
|
lda.z yoffs
|
|
|
|
adc #<$28*8
|
|
|
|
sta.z yoffs
|
|
|
|
lda.z yoffs+1
|
|
|
|
adc #>$28*8
|
|
|
|
sta.z yoffs+1
|
2019-09-29 21:13:37 +00:00
|
|
|
__b4:
|
2020-02-23 08:44:36 +00:00
|
|
|
// for(byte y : 0..255)
|
2019-09-18 19:53:32 +00:00
|
|
|
inx
|
|
|
|
cpx #0
|
2019-09-29 21:13:37 +00:00
|
|
|
bne __b3
|
2020-02-23 08:44:36 +00:00
|
|
|
// }
|
2019-09-18 19:53:32 +00:00
|
|
|
rts
|
|
|
|
}
|
|
|
|
// Tables for the plotter - initialized by calling bitmap_draw_init();
|
|
|
|
bitmap_plot_xlo: .fill $100, 0
|
|
|
|
bitmap_plot_xhi: .fill $100, 0
|
|
|
|
bitmap_plot_ylo: .fill $100, 0
|
|
|
|
bitmap_plot_yhi: .fill $100, 0
|
|
|
|
bitmap_plot_bit: .fill $100, 0
|