apple2js/test/js/formats/testdata/16sector.ts
Ian Flanigan 9d4a265daf Refactor storage types
Today, lots of information about how a file or JSON becomes a disk
image is embedded in the metadata for the image and/or disk. This
makes it hard to write back to the source when the in-memory disk
image changes.

This refactoring is an attempt to break out all of the bits of logic
into composable pieces.  While this is mestly concerned with reading
right now, the idea is that it will eventually allow configuring
writing as well.  The main goal is to allow round-tripping to the same
file on disk, but, in theory, it could also save to a different file
or the local database, too.

Note that this is a work in progress.
2022-06-05 23:30:34 +02:00

79 lines
2.0 KiB
TypeScript

import { memory } from 'js/types';
import { concat } from 'js/util';
function generateBytesInOrder() {
const data: memory[][] = [];
for (let t = 0; t < 35; t++) {
const track: memory[] = [];
for (let s = 0; s < 16; s++) {
const sector = new Uint8Array(256);
for (let b = 0; b < 256; b++) {
sector[b] = b;
}
track[s] = sector;
}
data[t] = track;
}
return data;
}
export const BYTES_IN_ORDER: memory[][] = generateBytesInOrder();
function generateBytesBySector() {
const data: memory[][] = [];
for (let t = 0; t < 35; t++) {
const track: memory[] = [];
for (let s = 0; s < 16; s++) {
const sector = new Uint8Array(256);
for (let b = 0; b < 256; b++) {
sector[b] = s;
}
track[s] = sector;
}
data[t] = track;
}
return data;
}
export const BYTES_BY_SECTOR: memory[][] = generateBytesBySector();
function generateBytesByTrack() {
const data: memory[][] = [];
for (let t = 0; t < 35; t++) {
const track: memory[] = [];
for (let s = 0; s < 16; s++) {
const sector = new Uint8Array(256);
for (let b = 0; b < 256; b++) {
sector[b] = t;
}
track[s] = sector;
}
data[t] = track;
}
return data;
}
export const BYTES_BY_TRACK: memory[][] = generateBytesByTrack();
function toImage(disk: memory[][]) {
const tracks: Uint8Array[] = [];
for (let t = 0; t < disk.length; t++) {
const track = concat(...disk[t]);
tracks.push(track);
}
return concat(...tracks);
}
export const BYTES_BY_SECTOR_IMAGE = toImage(BYTES_BY_SECTOR);
export const BYTES_BY_TRACK_IMAGE = toImage(BYTES_BY_TRACK);
function randomImage() {
const result = new Uint8Array(35 * 16 * 256);
for (let i = 0; i < result.length; i++) {
result[i] = Math.floor(Math.random() * 256);
}
return result;
}
export const RANDOM_IMAGE = randomImage();