mirror of
https://github.com/whscullin/apple2js.git
synced 2024-01-12 14:14:38 +00:00
dc13b6a59a
Like the DOS 3.3 and ProDOS sector order issues, this change fixes the physical order of the sectors on 13-sector disks when nibblized. This change also adds tests for the 13-sector format to verify the sector order. One of the crazy things is that _Beneath Apple DOS_ failed me in this instance because it doesn't discuss what happens to the last byte in "5 and 3" encoding anywhere (AFAICT). I went back to the DOS 3.1 source released by the Computer History Museum here: https://computerhistory.org/blog/apple-ii-dos-source-code/ The code is in `appdos31.lst` in the `POSTNIB` routine on line 4777.
56 lines
1.4 KiB
TypeScript
56 lines
1.4 KiB
TypeScript
import { byte } from '../../../../js/types';
|
|
|
|
function generateBytesInOrder() {
|
|
const data: byte[][][] = [];
|
|
for (let t = 0; t < 35; t++) {
|
|
const track: byte[][] = [];
|
|
for (let s = 0; s < 13; s++) {
|
|
const sector: byte[] = [];
|
|
for (let b = 0; b < 256; b++) {
|
|
sector[b] = b;
|
|
}
|
|
track[s] = sector;
|
|
}
|
|
data[t] = track;
|
|
}
|
|
return data;
|
|
}
|
|
|
|
export const BYTES_IN_ORDER: byte[][][] = generateBytesInOrder();
|
|
|
|
function generateBytesBySector() {
|
|
const data: byte[][][] = [];
|
|
for (let t = 0; t < 35; t++) {
|
|
const track: byte[][] = [];
|
|
for (let s = 0; s < 13; s++) {
|
|
const sector: byte[] = [];
|
|
for (let b = 0; b < 256; b++) {
|
|
sector[b] = s;
|
|
}
|
|
track[s] = sector;
|
|
}
|
|
data[t] = track;
|
|
}
|
|
return data;
|
|
}
|
|
|
|
export const BYTES_BY_SECTOR: byte[][][] = generateBytesBySector();
|
|
|
|
function generateBytesByTrack() {
|
|
const data: byte[][][] = [];
|
|
for (let t = 0; t < 35; t++) {
|
|
const track: byte[][] = [];
|
|
for (let s = 0; s < 13; s++) {
|
|
const sector: byte[] = [];
|
|
for (let b = 0; b < 256; b++) {
|
|
sector[b] = t;
|
|
}
|
|
track[s] = sector;
|
|
}
|
|
data[t] = track;
|
|
}
|
|
return data;
|
|
}
|
|
|
|
export const BYTES_BY_TRACK: byte[][][] = generateBytesByTrack();
|