work in progress
This commit is contained in:
parent
dcf5cd2edd
commit
f5f2c5dbbf
3 changed files with 97 additions and 17 deletions
5
.gitignore
vendored
Normal file
5
.gitignore
vendored
Normal file
|
@ -0,0 +1,5 @@
|
|||
.DS_Store
|
||||
*.o
|
||||
*.xex
|
||||
*.pxd
|
||||
canvas*.png
|
11
dither4.js
11
dither4.js
|
@ -530,9 +530,12 @@ function decimate(input, palette, n) {
|
|||
let least = Infinity;
|
||||
let pick = -1;
|
||||
for (let i = 1; i < decimated.length; i++) {
|
||||
if (i == 0) {
|
||||
if (decimated[i] === palette256[0]) {
|
||||
continue; // keep black always
|
||||
}
|
||||
if (decimated[i] === palette256[0x0f]) {
|
||||
continue; // keep white always
|
||||
}
|
||||
|
||||
//let coolFactor = popularity[i];
|
||||
|
||||
|
@ -552,11 +555,15 @@ function decimate(input, palette, n) {
|
|||
}
|
||||
}
|
||||
let old = decimated.length;
|
||||
//decimated.splice(pick, 1);
|
||||
decimated = decimated.filter((rgb, i) => {
|
||||
if (i == pick) {
|
||||
return false;
|
||||
}
|
||||
if (i > 0 && popularity[i] == 0) {
|
||||
if (rgb !== palette256[0] && popularity[i] == 0) {
|
||||
return false;
|
||||
}
|
||||
if (rgb !== palette256[0x0f] && popularity[i] == 0) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
|
|
98
dither4.s
98
dither4.s
|
@ -1,23 +1,91 @@
|
|||
SAVMSC = $58
|
||||
SDMCTL = $22F
|
||||
SDLSTL = $230
|
||||
SDLSTH = $231
|
||||
COLPF0 = $D016
|
||||
COLPF1 = $D017
|
||||
COLPF2 = $D018
|
||||
COLPF3 = $D019
|
||||
COLBK = $D01A
|
||||
|
||||
WSYNC = $D40A
|
||||
VCOUNT = $D40B
|
||||
NMIEN = $D40E
|
||||
|
||||
.data
|
||||
|
||||
.import palette1
|
||||
.import palette2
|
||||
.import palette3
|
||||
.import framebuffer
|
||||
|
||||
displaylist:
|
||||
.repeat 3
|
||||
.byte $70 ; 8 blank lines
|
||||
.endrep
|
||||
.byte $4e ; ANTIC mode e (160px 2bpp, 1 scan line per line)
|
||||
.addr framebuffer
|
||||
.repeat 191
|
||||
.byte $0e
|
||||
.endrep
|
||||
.byte $41 ; jump and blank
|
||||
.addr displaylist
|
||||
|
||||
|
||||
.code
|
||||
|
||||
.export start
|
||||
|
||||
.proc start
|
||||
; Get the framebuffer address and just write new fun values into it
|
||||
; x: byte to write in
|
||||
; y: index into the first 256 bytes of buffer
|
||||
; Loop through scan lines updating the palette
|
||||
.proc update_palette
|
||||
lda palette1,y
|
||||
pha
|
||||
ldx palette2,y
|
||||
lda palette3,y
|
||||
tay
|
||||
pla
|
||||
|
||||
; Wait for horizontal blank
|
||||
sta WSYNC
|
||||
|
||||
; Update color registers as fast as possible
|
||||
sta COLPF0
|
||||
stx COLPF1
|
||||
sty COLPF2
|
||||
rst
|
||||
.endproc
|
||||
|
||||
.proc start
|
||||
; Disable display DMA
|
||||
lda #$00
|
||||
sta SDMCTL
|
||||
; Set up the display list
|
||||
lda .low displaylist
|
||||
sta SDLSTL
|
||||
lda .high displaylist
|
||||
sta SDLSTH
|
||||
|
||||
; Turn off interrupts except reset button
|
||||
lda #$20
|
||||
sta NMIEN
|
||||
|
||||
; Manually wait for first scan line
|
||||
wait_vblank:
|
||||
lda VCOUNT
|
||||
bnz wait_vblank
|
||||
|
||||
; Re-enable display DMA
|
||||
lda #$22
|
||||
sta SDMCTL
|
||||
|
||||
even_scanline:
|
||||
ldy VCOUNT
|
||||
jsr update_palette
|
||||
|
||||
odd_scanline:
|
||||
ldy VCOUNT
|
||||
iny
|
||||
jsr update_palette
|
||||
jmp even_scanline
|
||||
|
||||
ldx #00
|
||||
outer_loop:
|
||||
txa
|
||||
ldy #00
|
||||
inner_loop:
|
||||
sta (SAVMSC),y
|
||||
iny
|
||||
bne inner_loop
|
||||
inx
|
||||
jmp outer_loop
|
||||
; infinite loop
|
||||
.endproc
|
||||
|
|
Loading…
Reference in a new issue