Думаю начну с одной микросхемы ОЗУ 2КБ и буду писать туда прям как есть - байт за байтом. От ВГ75 отрезать и подключать к шине данных буду по сигналу /WR OR /CS_E800 - всё равно запись данных на окончании строба /WR происходит. Процесс заливки на экране буду отображать подчёркиваниями, которые мимо регистра сдвига выводятся, хотя надо прикинуть - временно отрубать видео или пока не залью весь шрифт? Заливка одного байта командой MOV M,A занимает 7 тактов из которых сама запись займёт от силы 2 - это полторы плашки знакоместа? И потом обрамление цикла с INX и передачей управления с проверкой на конец цикла - ещё порядка 20 знакомест? Наверное нестрашно - по экрану просто будет бегать чёрный снег, занимающий 10% площади экрана или меньше
Шрифт будет поджатый алгоритмом
SHAFF0 - надо прикинуть размер (напомню, что у нас половина 8-килобайтного ПЗУ пустая, но всё равно непожатый шрифт туда класть как-то расточительно).
P.S. Склеил оригинальный шрифт РК и первую половинку шрифта
Dinobyte как и планировал и прошёлся по ним своим SHAFF-ом:
Code: Select all
$ shaff fonts.bin
SHAFF v1.2 (C) 2013,2017 A.A.Shabarshin <me@shaos.net>
Opening input file 'fonts.bin'
Original file size: 2048 bytes (SNA=N)
Opening output file 'fonts.binFF'
Chosen method: SHAFF0
Minimal length to detect: 4 bytes
Prefix byte for references: 0xFF
Total number of blocks to encode: 1
Size of the last block: 2048
Block 1:
Current offset 12
Reading 2048 bytes...
Autocorrelation...
Greedy algorithm...
14 13 12 11 11 11 11 11 11 11 11 11 11 10 10 9 9 9 9 9 9 9 8 8 8 8 8 8 8 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 Number of matches: 218
Writing data to the file...
Number of references = 212
Number of literals = 859
Compression: 81% (2048 -> 1662)
Literal balance: 0 vs 859
Rarest literals: F4 E9 DA
You may get 101 bytes less (6%) if set rarest byte as a prefix (option -xF4)
Compressed file size: 1674 bytes (81%)
Working time: 0m07s
Good bye!
и пересжал с одним из самых редких байтов в качестве ключевого:
Code: Select all
$ shaff -xE9 fonts.bin
SHAFF v1.2 (C) 2013,2017 A.A.Shabarshin <me@shaos.net>
Opening input file 'fonts.bin'
Original file size: 2048 bytes (SNA=N)
Opening output file 'fonts.binFF'
Chosen method: SHAFF0
Minimal length to detect: 4 bytes
Prefix byte for references: 0xE9
Total number of blocks to encode: 1
Size of the last block: 2048
Block 1:
Current offset 12
Reading 2048 bytes...
Autocorrelation...
Greedy algorithm...
14 13 12 11 11 11 11 11 11 11 11 11 11 10 10 9 9 9 9 9 9 9 8 8 8 8 8 8 8 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 Number of matches: 218
Writing data to the file...
Number of references = 193
Number of literals = 935
Compression: 76% (2048 -> 1561)
Literal balance: 0 vs 935
Rarest literals: F4 E9 DA
Compressed file size: 1573 bytes (76%)
Working time: 0m06s
Good bye!
Получилось 1573 байта или 76% от оригинала.
SHAFF1 конечно получше сжимает, но его распаковщика для 8080 у меня ещё нету
Code: Select all
$ shaff -1 fonts.bin
SHAFF v1.2 (C) 2013,2017 A.A.Shabarshin <me@shaos.net>
Opening input file 'fonts.bin'
Original file size: 2048 bytes (SNA=N)
Opening output file 'fonts.binFF'
Chosen method: SHAFF1
Minimal length to detect: 2 bytes
Total number of blocks to encode: 1
Size of the last block: 2048
Block 1:
Current offset 12
Reading 2048 bytes...
Autocorrelation...
Greedy algorithm...
14 13 12 11 11 11 11 11 11 11 11 11 11 10 10 9 9 9 9 9 9 9 8 8 8 8 8 8 8 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 Number of matches: 427
Writing data to the file...
Number of references = 452
Number of literals = 307
Compression: 55% (2048 -> 1136)
Literal balance: 0 vs 307
Rarest literals: F4 E9 DA
Compressed file size: 1148 bytes (56%)
Working time: 0m12s
Good bye!
И для разнообразия сжал инвертированный шрифт (SHAFF1 может сжимать лучше инвертированные данные, если в оригинале было много байт со значениями >=128):
Code: Select all
$ shaff -1 fontsi.bin
SHAFF v1.2 (C) 2013,2017 A.A.Shabarshin <me@shaos.net>
Opening input file 'fontsi.bin'
Original file size: 2048 bytes (SNA=N)
Opening output file 'fontsi.binFF'
Chosen method: SHAFF1
Minimal length to detect: 2 bytes
Total number of blocks to encode: 1
Size of the last block: 2048
Block 1:
Current offset 12
Reading 2048 bytes...
Autocorrelation...
Greedy algorithm...
14 13 12 11 11 11 11 11 11 11 11 11 11 10 10 9 9 9 9 9 9 9 8 8 8 8 8 8 8 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 Number of matches: 427
Writing data to the file...
Number of references = 435
Number of literals = 340
Compression: 53% (2048 -> 1096)
Literal balance: 340 vs 0
Rarest literals: FF FE FD
Compressed file size: 1108 bytes (54%)
Working time: 0m12s
Good bye!
Для сравнения ещё сжал LZ4, ZX0, ZX7, MegaLZ, Hrum и Hrust:
Code: Select all
-rw-r--r-- 1 shaos shaos 2048 Jan 23 21:48 fonts.bin
-rw-r--r-- 1 shaos shaos 1573 Jan 23 21:52 fonts.bff <<<<<<<<<<<< SHAFF0
-rw-r--r-- 1 shaos shaos 1501 Jan 23 21:48 fonts.bin.lz4
-rw-r--r-- 1 shaos shaos 1148 Jan 23 21:53 fonts.binFF <<<<<<<<<< SHAFF1
-rw-r--r-- 1 shaos shaos 1108 Jan 23 22:08 fontsi.binFF <<<<<<<<< SHAFF1 (inverted)
-rw-r--r-- 1 shaos shaos 1064 Jan 23 22:13 fonts.bin.zx7
-rw-r--r-- 1 shaos shaos 1056 Jan 23 21:56 fonts.bin.hrm
-rw-r--r-- 1 shaos shaos 1054 Jan 23 21:56 fonts.bin.mlz
-rw-r--r-- 1 shaos shaos 1021 Jan 23 21:56 fonts.bin.hst
-rw-r--r-- 1 shaos shaos 1019 Jan 23 22:13 fonts.bin.zx0
P.P.S. Надо попробовать ещё раскрашенные шрифты посжимать:
