5 ms·
Thinking on it: 1664 bits is 26 * 8 * 8, which is a little low. ASCII uses indices 32 to 127 for visible characters, so this would be 95 * 8 * 8, or 6080 bits.
by willis936 7y ago
Thinking on it: 1664 bits is 26 * 8 * 8, which is a little low. ASCII uses indices 32 to 127 for visible characters, so this would be 95 * 8 * 8, or 6080 bits. It's still a trivially small amount of information and there are very few ways to make unique English fonts out of it, so I still don't think it should be possible to copyright it.
Looking at the actual IBM_VGA_8x8.bin file: the file size is 1024 bytes (8192 bits). I calculated the entropy of the data to be only 638 bits of information.
MATLAB code:
fid = fopen('IBM_PC_BIOS_1981-04-24_HALF_8x8.bin','r');
ibmVga = fread(fid);
fclose(fid);
p = histogram(double(ibmVga),255);
E = -sum(log2(p.Values(p.Values > 0)).*log2(p.Values(p.Values > 0)));
- perl4ever 7y agoCounterpoint, 2^638 is a large number. So a particular 638 bits is very particular.
- willis936 7y agoThis is meaningless. Information is information. Specifying a size has virtually no information. The number "638" stored in uint16 has two bits of information using any word size between 8 and 15 bits.
- willis936 7y agoSo I went on a bit of a rabbit hole on this one. The above code is wrong. I have since fixed it. It's the same idea with some added terms to normalize for data size. Word size matters when calculating entropy. Calculating entropy on this file using 2 to 64 bits nets a minimum information of 860 bits using a 64 bit word size. Moving past a 64 bit word size requires rethinking some things. MATLAB doesn't have great support for data sizes greater than 64 bits (and I'm certain the performance impact would be great). words = double(unique(X))'; binEdges = [words-0.5; words+0.5]; binEdges = unique(binEdges(:)); P = histcounts(X, binEdges) / M; P(P == 0) = []; M = numel(X); H = -sum(P .* log(P) ./ log(max([nBits, 2]))) / nBits * log2(max([nBits, 2])); E = H * M * nBits;