Сравнил своим пакером.
У меня гороскоп упаковался до 9251, а MegaLZ упаковал до 7692. Выигрыш заметный. Единственное, что скорость распаковки у меня сравнима с линейным копированием памяти.
Вид для печати
Ну дык и у MegaLZ тоже:
распаковка - 3 518 299 тактов
копирование командой монитора T - 3 151 860
Хотя в мониторе команда Т немного не оптимальна, на каждый байт дважды делает CALL.
Я имею ввиду линейное копирование методом типа LDI )
---------- Post added at 17:17 ---------- Previous post was at 17:12 ----------
На других программах, разница не так заметна, байт 400-500. Но все равно ощутима. Так что если места во флешке под завязку, то лучше выбрать тот пакер, который архивирует лучше. А если не под завязку, то тот, что быстрее распаковывает)
Загрузчик, конечно, прикольный, но преимуществ перед тем, что был предложен ранее нет. Наоборот, лишние некрасивости в параметрах запуска.
Если загрузчик располагается по диагонали, как и было предложено, то, что там диагональ была занята, что здесь - один фиг. А диагональ эта всего лишь 256 байт, т.к. у нас не квадрат, а прямоугольник со стороной 8 бит. Если же располагать его по диагонали эксклюзивно, не поверх массива программ, то это уменьшит емкость флешки уже не на 256 байт, а на несколько килобайт, что тоже в минус, нежели в плюс.
Я выделил жирным часть, отвечающую за пропуск. Две команды из 14. Переход происходит с вероятностью 1/128, поэтому его можно и не считать. Даже не 14, а еще расходы на CALL. Да и LD (N), A выполняется в 3 раза дольше CP 0. Итого замедление не более 10%.
LD A, D
LD (0EE02h), A
LD A, E
CP 0
JP Z, IGNOREBYTE
LD (0EE01h), A
LD A, 0
LD (0EE02h), A
LD A, 1
LD (0EE01h), A
LD A, (0EE00h)
INC E
INC E
RET
---------- Post added at 23:15 ---------- Previous post was at 22:00 ----------
Строки столбцы перепутаны. Или строки и столбцы защелкиваются одновременно. Пытаюсь из твоего конфига убрать символ ~. Пока только хуже стало.
Исправил конфигурацию эмулятора. Вроде бы работает.
А разве row это младшие биты адреса?
Я конечно мог ошибиться, но я 10 раз с помощью Ардуино проверил, что: младшие биты - спад - старшие биты - подъем.
Если перед спадом изменять выводы микросхемы A7-A10, то изменяются данные а входе. Если изменять перед подъемом A7-A10, то данные стабильны.
Вот эта программа роняет эмулятор.
Запускал несколько раз - всё нормально.
Странненько.
Запускаем эмулятор, Файл, Открыть, Выбираем файл и все падает.
Если запускать до этой программы что либо еще, или загружать её через команду монитора I, то все работает.
Всё равно не получилось. Может ты чего менял в конфигах?
Распакуй эмулятор в отдельный каталог и попробуй. Вроде не роняется.
Ничего не менял. Фиг с ним.
Прошивка для 49lf040 только что заработала. В эмуляторе.
Запустить можно в эмуляторе b2m, с конфигурацией Apogey R2.
Команды запуска R0,100 G1.
Чуть чуть попозже добавлю программ в прошивку (тут не все). Выложу мастер, позволяющий создавать свои прошивки. Визуальные глюки при перемещении курсора уберу. Пропорции изображения дискеты поправлю. Возможно прогресс бар, скролл добавлю.
UPD: Эта прошивка устарела, ищи новую дальше по форуму.
Ай маладес! :)
http://s02.radikal.ru/i175/1111/3b/ac1fb0d649f2.jpg
Красота же :) Почти ANSI графика.
---------- Post added at 00:25 ---------- Previous post was at 00:05 ----------
Графические игры так не отобразить. И инструмент надо писать извлекающий текстовые изображения из дампов.
У Апогея два знакогенератора, три стандартных видеорежима 64x24 (шрифт 10 пикселей), 64x24 (шрифт 8 пикселей) и 64x64 (шрифт 4 пикселя), два режима отображения цвета, видеопамять может быть расположена в любом месте. И еще масса нестандартных настроек видеоконтроллера.
Одновременно со своим текстом, графику из игры отобразить будет сложно.
У Апогея цветовое разрешение выше, чем у ZX Spectrum. Два цвета на 3x2 пикселя (один из цветов черный и ограничено кол-во изменений цветов на строку до 16). А при удачном стечении обстоятельств и граф. разрешение выше: 384*256. Еще есть аппаратный скролл. Будет масса свободного времени, обязательно напишу красивую игрушку.
Попробовал порисовать в граф. режиме.
http://s017.radikal.ru/i412/1111/82/c77dcf7fc709.png
Судя по эмулятору, видимое разрешение 234x118.
Красиво. Но на реале может выглядеть не так. Эмулятор не совсем корректно отображает атрибуты. Если сможешь, сделай пожалуйста фотку с реального цветного Апогея.
---------- Post added at 13:09 ---------- Previous post was at 13:04 ----------
Если выбрать в меню "Size to ..." то увидишь цифры 468х256 - это размер окна на данный момент. С учётом того, что псевдопикселы 2х2 получается разрешение 234х128.
Не хватает видеопамяти для рисования фона до края экрана.
Я так понял суть графики Апогея. Нам дается 69 байт видеопамяти для рисования строки из 64 символов. Каждая смена цвета съедает 1 байт, когда мы израсходуем 5 запасных байт, то приходится жертвовать видимыми символами справа.
Правда есть еще 8 символов с левой, невидимой на ТВ части экрана. Но толку от них нет.
http://s48.radikal.ru/i122/1111/fb/b01e10cc8b90.png
---------- Post added at 11:20 ---------- Previous post was at 11:14 ----------
Подпаять RGB надо. И для монитора нужен PAL-кодер, который я еще не приоберл
Максимальная ширина строки, которую поддерживает ВГ75, 80 символов. Максимальное количество атрибутов в режиме, когда атрибут не занимает места, 16 штук. В силу особенностей развёртки ТВ, приходится ограничиваться только 78 символами. И даже в этом случае слева и справа символы скрываются за краем экрана (хотя в эмуляторе показано полностью). Но атрибутов можно использовать все 16.
Вот только, если их нет на экране, то ширина строки будет 78+16=94 символа, и телевизор откажется такое отображать. Поэтому можно сделать так: инициализировать экран так, чтобы присутствовали все 16 атрибутов (но не подряд, а минимум через 1 символ), настроить ПДП на новый размер экрана 94*64=6016 символа, и когда нужно будет в определённом месте изменить цвет, то просто подвинуть атрибуты в соответствии с нужными цветами.
Управляющий код 0F1h в этом случае можно не использовать.
Если графика состоит из блоков, то можно разместить атрибуты каждые 4 символа, тогда ширина блока будет 12 точек. Получим блоки одного цвета 12х2 точек.
Есть подозрение, что нужно убрать в конфиге строчку mode=3, тогда, судя по схеме, будет более соответствовать реалу.
Прошил 74LF004 и подключил к реальному железу. Работает. Только первые 3 байта часто принимают случайные значения.
Черно-белый Апогей (тот который без Ц), на голубой цвет реагирует установкой серого фона. На желтый цвет никак не реагирует.
http://s45.radikal.ru/i108/1111/ec/ed981558d69a.jpg
http://s017.radikal.ru/i405/1111/ee/1d0cca1bcf28.jpg
Причем, в эмуляторе цветовые атрибуты действуют на следующий или после следующий символ. Здесь же видно, что цветовые атрибуты начинают работать в предыдущем знакоместе.
http://s52.radikal.ru/i137/1111/fe/16a682a6e52b.jpg
А невидимые атрибуты не работают. Найду программу использующую скрытие атрибутов (не свою), проверю на ней.
http://s46.radikal.ru/i112/1111/44/1a357a706115.jpg
И еще есть вот такие полоски шириной в один пиксель цвета C0C0C0h, там где стоит атрибут инвертирующий символ.
http://s003.radikal.ru/i204/1111/b4/da518a3c9cb4.jpg
Это из-за mode=3, если его убрать, то в режиме, когда атрибуты занимают знакоместо, должно быть правильно. А режим, когда атрибуты не занимают знакоместо даже в этом случае работает неправильно, вроде бы.
Я как раз хотел попросить тебя проверить в этом режиме работу инверсии, её-то ведь видно и на ч/б мониторе. А судя по схеме, атрибуты цвета будут влиять на изображение по тому-же принципу.
vinxru, у меня есть пал кодер недописи , могу дать поиграться...
Написал тест отображающий все атрибуты. Тут всего 4 градации цвета, 80=000000, 81=606060, 90=C0C0C0, 91=FFFFFF. То есть первый бит - это повышенная яркость. Остальные атрибуты повторяются, а на фото глюк фотоаппарата и монитора.
Замечу, что повышенная яркость включается для предыдущего знакоместа, а инверсия включается для текущего. Возможно это настраивается программно, не знаю.
http://s017.radikal.ru/i424/1111/7b/e33c3c288cee.jpg
И в том числе для режима скрытых атрибутов. Опа, он в этом примере работает :-/
http://i041.radikal.ru/1111/8e/f7d5858469fa.jpg
Тест-то дай, для сравнения в эмуляторе! :)
Да, точно. Меня тут отвлекают.
Код:y11:
call initScreen
; Графика
ld hl, txt1
ld bc, 0
call print
call 0F803h
call 0FACEh
; Графика
ld hl, txt1
ld bc, 0
call print
call 0F803h
jp y11
txt1: db "123",0x80, "45.80.12",0x80,"123 123",0x90, "45.90.12",0x80,"345",255
db "123",0x81, "45.81.12",0x80,"123 123",0x91, "45.91.12",0x80,"345",255
db "123",0x82, "45.82.12",0x80,"123 123",0x92, "45.92.12",0x80,"345",255
db "123",0x83, "45.83.12",0x80,"123 123",0x93, "45.93.12",0x80,"345",255
db "123",0x84, "45.84.12",0x80,"123 123",0x94, "45.94.12",0x80,"345",255
db "123",0x85, "45.85.12",0x80,"123 123",0x95, "45.95.12",0x80,"345",255
db "123",0x86, "45.86.12",0x80,"123 123",0x96, "45.96.12",0x80,"345",255
db "123",0x87, "45.87.12",0x80,"123 123",0x97, "45.97.12",0x80,"345",255
db "123",0x88, "45.88.12",0x80,"123 123",0x98, "45.98.12",0x80,"345",255
db "123",0x89, "45.89.12",0x80,"123 123",0x99, "45.99.12",0x80,"345",255
db "123",0x8A, "45.8A.12",0x80,"123 123",0x9A, "45.9A.12",0x80,"345",255
db "123",0x8B, "45.8B.12",0x80,"123 123",0x9B, "45.9B.12",0x80,"345",255
db "123",0x8C, "45.8C.12",0x80,"123 123",0x9C, "45.9C.12",0x80,"345",255
db "123",0x8D, "45.8D.12",0x80,"123 123",0x9D, "45.9D.12",0x80,"345",255
db "123",0x8E, "45.8E.12",0x80,"123 123",0x9E, "45.9E.12",0x80,"345",255
db "123",0x8F, "45.8F.12",0x80,"123 123",0x9F, "45.9F.12",0x80,"345",0
;----------------------------------------------------------------------------
initScreen:
ld c, 1Fh
call 0F809h
ld hl, 0EF01h
ld (hl), 0
dec hl
ld (hl), 04Dh
ld (hl), 01Dh
ld (hl), 088h
ld (hl), 64 ^ 0D3h
call initS2
ld b, 30
ld hl, 0E1D0h+77
xxd: ld (hl), 0F1h
ld de, 78
add hl, de
dec b
jp nz, xxd
ret
initS2: push hl
jp 0FADDh
;----------------------------------------------------------------------------
print: push de
print5: push bc
push hl
ld hl, 0E2C3h - 78
ld de, 78
inc c
print1: add hl, de
dec c
jp nz, print1
ld e, b
add hl, de
ex hl, de
pop hl
print2: ld a, (hl)
inc hl
or a
jp z, print3
cp 255
jp z, print4
ld (de), a
inc de
jp print2
print3: pop bc
pop de
ret
print4: pop bc
inc c
jp print5
Я думал, раз там атрибуты защёлкиваются в регистре, то они тоже будут задержаны до следующего знакоместа, вместе с точками символа, а судя по картинкам, это не так.
Атрибуты 81,83, 86,87... в общем которых на фото не видно - мигающие.
Инверсия тоже включается для предыдущего (посмотри на момент выключения), но пока отображается атрибут, действует сигнал VSP, который гасит изображение, если атрибут занимает знакоместо. Видимо из за несогласованности изменения сигналов VSP и RVV возникает полоска перед включением инверсии.
У меня есть подозрение, что, отключить атрибут повышенной яркости можно отпаяв один резистор.
Вобщем ясно, первая картинка в эмуляторе выглядит аналогично (если убрать mode=3), а вот режим скрытых атрибутов надо доделывать.
---------- Post added at 19:42 ---------- Previous post was at 19:40 ----------
А инверсия, похоже, действительно включается для текущего, а выключается для предыдущего символа.