WORKS
This commit is contained in:
parent
cb2898f6a6
commit
ce7e051504
2 changed files with 81 additions and 18 deletions
|
@ -663,7 +663,7 @@ function genAssembly(width, height, nbits, lines) {
|
|||
let palette1 = new Uint8Array(height);
|
||||
let palette2 = new Uint8Array(height);
|
||||
let palette3 = new Uint8Array(height);
|
||||
let framebuffer = new Uint8Array(stride * height);
|
||||
let bitmap = new Uint8Array(stride * height);
|
||||
for (let y = 0; y < height; y++) {
|
||||
palette1[y] = lines[y].palette[1];
|
||||
palette2[y] = lines[y].palette[2];
|
||||
|
@ -672,7 +672,7 @@ function genAssembly(width, height, nbits, lines) {
|
|||
width,
|
||||
nbits,
|
||||
lines[y].output,
|
||||
framebuffer.subarray(y * stride, (y + 1) * stride)
|
||||
bitmap.subarray(y * stride, (y + 1) * stride)
|
||||
);
|
||||
}
|
||||
|
||||
|
@ -680,7 +680,7 @@ function genAssembly(width, height, nbits, lines) {
|
|||
.export palette1
|
||||
.export palette2
|
||||
.export palette3
|
||||
.export framebuffer
|
||||
.export bitmap
|
||||
|
||||
palette1:
|
||||
${byte2byte(palette1)}
|
||||
|
@ -691,8 +691,8 @@ ${byte2byte(palette2)}
|
|||
palette3:
|
||||
${byte2byte(palette3)}
|
||||
|
||||
framebuffer:
|
||||
${byte2byte(framebuffer)}
|
||||
bitmap:
|
||||
${byte2byte(bitmap)}
|
||||
`;
|
||||
}
|
||||
|
||||
|
|
89
dither4.s
89
dither4.s
|
@ -12,29 +12,41 @@ WSYNC = $D40A
|
|||
VCOUNT = $D40B
|
||||
NMIEN = $D40E
|
||||
|
||||
framebuffer = $a000
|
||||
framebuffer2 = $b000
|
||||
|
||||
temp1l = $80
|
||||
temp1h = $81
|
||||
temp1 = temp1l
|
||||
temp2l = $82
|
||||
temp2h = $83
|
||||
temp2 = temp2l
|
||||
|
||||
height = 192
|
||||
bytes_per_line = 40
|
||||
pages_per_frame = 32
|
||||
|
||||
.data
|
||||
|
||||
.import palette1
|
||||
.import palette2
|
||||
.import palette3
|
||||
.import framebuffer
|
||||
.import bitmap
|
||||
|
||||
displaylist:
|
||||
; @fixme resolve the line counts
|
||||
.repeat 3
|
||||
.byte $70 ; 8 blank lines
|
||||
.endrep
|
||||
; Note the framebuffer cannot cross a 4KiB boundary
|
||||
; so this is split in half
|
||||
; ANTIC mode e (160px 2bpp, 1 scan line per line)
|
||||
.byte $4e
|
||||
.addr framebuffer
|
||||
.repeat 95
|
||||
.repeat height / 2 - 1
|
||||
.byte $0e
|
||||
.endrep
|
||||
.byte $4e
|
||||
.addr framebuffer + 96*40
|
||||
.repeat 95
|
||||
.addr framebuffer2
|
||||
.repeat height / 2 - 1
|
||||
.byte $0e
|
||||
.endrep
|
||||
.byte $41 ; jump and blank
|
||||
|
@ -46,19 +58,35 @@ displaylist:
|
|||
.export start
|
||||
|
||||
.proc start
|
||||
; Copy the bitmap into our framebuffer
|
||||
lda #.lobyte(bitmap)
|
||||
sta temp1l
|
||||
lda #.hibyte(bitmap)
|
||||
sta temp1h
|
||||
lda #.lobyte(framebuffer)
|
||||
sta temp2h
|
||||
lda #.hibyte(framebuffer)
|
||||
sta temp2h
|
||||
jsr copy_half_frame
|
||||
|
||||
; Second half of bitmap has to be separately aligned
|
||||
lda #.lobyte(framebuffer2)
|
||||
sta temp2h
|
||||
lda #.hibyte(framebuffer2)
|
||||
sta temp2h
|
||||
jsr copy_half_frame
|
||||
|
||||
|
||||
; Disable display DMA
|
||||
lda #$00
|
||||
sta SDMCTL
|
||||
|
||||
; Set up the display list
|
||||
lda #.lobyte(displaylist)
|
||||
sta SDLSTL
|
||||
lda #.hibyte(displaylist)
|
||||
sta SDLSTH
|
||||
|
||||
; Turn off interrupts except reset button
|
||||
;lda #$20
|
||||
;sta NMIEN
|
||||
|
||||
; Manually wait for first scan line
|
||||
wait_vblank:
|
||||
lda VCOUNT
|
||||
|
@ -97,14 +125,49 @@ each_scanline:
|
|||
pla
|
||||
tay
|
||||
iny
|
||||
cpy #192
|
||||
cpy height
|
||||
bne each_scanline
|
||||
|
||||
jmp wait_start
|
||||
|
||||
.endproc
|
||||
|
||||
; Loop through scan lines updating the palette
|
||||
.proc update_palette
|
||||
; temp1 contains source address
|
||||
; temp2 contains dest address
|
||||
; clobbers a/x/y
|
||||
; incremepts temp1 and temp2 to the end of their regions
|
||||
.proc copy_half_frame
|
||||
ldx #0
|
||||
|
||||
copy_loop_lines:
|
||||
ldy #00
|
||||
|
||||
copy_loop_bytes:
|
||||
lda (temp1),y
|
||||
sta (temp2),y
|
||||
iny
|
||||
cpy #bytes_per_line
|
||||
bne copy_loop_bytes
|
||||
|
||||
clc
|
||||
lda temp1l
|
||||
adc #bytes_per_line
|
||||
sta temp1l
|
||||
lda temp1h
|
||||
adc #00
|
||||
sta temp1h
|
||||
|
||||
clc
|
||||
lda temp2l
|
||||
adc #bytes_per_line
|
||||
sta temp2l
|
||||
lda temp2h
|
||||
adc #00
|
||||
sta temp2h
|
||||
|
||||
inx
|
||||
cpx #(height / 2)
|
||||
bne copy_loop_lines
|
||||
|
||||
rts
|
||||
.endproc
|
||||
|
|
Loading…
Reference in a new issue