wip 160px height

This commit is contained in:
Brooke Vibber 2022-11-30 08:53:47 -08:00
parent 3826fe8205
commit 7d7a5bd064
2 changed files with 15 additions and 29 deletions

View file

@ -529,8 +529,15 @@ function decimate(input, palette, n, inputError) {
*/ */
async function loadImage(src) { async function loadImage(src) {
let image = await Jimp.read(src); let image = await Jimp.read(src);
let width = image.bitmap.width; let width = image.bitmap.width;
let height = image.bitmap.height; let height = image.bitmap.height;
if (width != 160 || height != 160) {
width = 160;
height = 160;
image = image.resize(width, height);
}
let rgba = image.bitmap.data.slice(); let rgba = image.bitmap.data.slice();
return { return {
width, width,
@ -539,23 +546,6 @@ async function loadImage(src) {
}; };
} }
/**
* Halve the horizontal resolution, interpolating input.
* @param {Uint8Array} rgba
* @returns {Uint8Array}
**/
function halveImage(rgba) {
let out = new Uint8Array(rgba.length >> 1);
for (let i = 0; i < rgba.length; i += 8) {
let j = i >> 1;
out[j + 0] = (rgba[i + 0] + rgba[i + 4] + 1) >> 1;
out[j + 1] = (rgba[i + 1] + rgba[i + 5] + 1) >> 1;
out[j + 2] = (rgba[i + 2] + rgba[i + 6] + 1) >> 1;
out[j + 3] = (rgba[i + 3] + rgba[i + 7] + 1) >> 1;
}
return out;
}
function imageToLinearRGB(rgba) { function imageToLinearRGB(rgba) {
let input = []; let input = [];
for (let i = 0; i < rgba.length; i += 4) { for (let i = 0; i < rgba.length; i += 4) {
@ -583,18 +573,13 @@ async function convert(source, nbits) {
rgba rgba
} = await loadImage(source); } = await loadImage(source);
if (width == 320) {
width = 160;
rgba = halveImage(rgba);
}
if (width !== 160) { if (width !== 160) {
throw new Error(`expected 160px-compatible width, got ${width} pixels`); throw new Error(`expected 160px-compatible width, got ${width} pixels`);
} }
if (height !== 192) { if (height !== 160) {
// @fixme support up to 240px // @fixme support up to 240px
throw new Error(`expected 192px height, got ${height} pixels`); throw new Error(`expected 160px height, got ${height} pixels`);
} }
if (rgba.length != width * 4 * height) { if (rgba.length != width * 4 * height) {

View file

@ -27,11 +27,12 @@ sample_ptrh = $85
sample_ptr = sample_ptrl sample_ptr = sample_ptrl
scanline = $86 scanline = $86
height = 192 height = 160
bytes_per_line = 40 bytes_per_line = 40
pages_per_frame = 32 pages_per_frame = 32
lines_per_frame = 262 lines_per_frame = 262
scanline_offset = 31 ;scanline_offset = 31 + (40 - 24) / 2
scanline_offset = 47
scanline_max = (lines_per_frame - scanline_offset) / 2 scanline_max = (lines_per_frame - scanline_offset) / 2
.data .data
@ -44,12 +45,12 @@ scanline_max = (lines_per_frame - scanline_offset) / 2
.import audio_samples_end .import audio_samples_end
displaylist: displaylist:
; 24 lines overscan ; 40 lines overscan
.repeat 3 .repeat 5
.byte $70 ; 8 blank lines .byte $70 ; 8 blank lines
.endrep .endrep
; 192 lines graphics ; 160 lines graphics
; ANTIC mode e (160px 2bpp, 1 scan line per line) ; ANTIC mode e (160px 2bpp, 1 scan line per line)
.byte $4e .byte $4e
.addr framebuffer .addr framebuffer