User Tag List

Показано с 421 по 430 из 450

Тема: Исходные тексты ZASM 3.10

Древовидный режим

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #19

    Регистрация
    02.05.2015
    Адрес
    г. Таллин, Эстония
    Сообщений
    1,697
    Спасибо Благодарностей отдано 
    305
    Спасибо Благодарностей получено 
    226
    Поблагодарили
    160 сообщений
    Mentioned
    11 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Rubts0FF Посмотреть сообщение
    А в общем шрифты сжались где то на треть. Здесь другой вопрос - распаковщики, у меня нет места, откуда они привыкли работать, для этих операций. В идеале, нужно что бы он не сходя с места, в смысле с какого бы адреса его не запустили, он взял и распаковал .. в то место в которое мне надо и я как то должен ему это указать.
    А если попробовать жать ZX0? Распаковщик 68 байт, если его таскать по памяти, то внутри есть четыре call, которые придётся поправить.
    Или ZX2 - жмёт хуже, но распаковщик 56 байт.

    Попробовал пожать 150 стандартных 768 шрифтов из коллекции Damien - 112 килобайт превратилось в 67 (паковал каждый файл отдельно).

    ; -----------------------------------------------------------------------------
    ; ZX0 decoder by Einar Saukas & Urusergi
    ; "Standard" version (68 bytes only)
    ; -----------------------------------------------------------------------------
    ; Parameters:
    ; HL: source address (compressed data)
    ; DE: destination address (decompressing)
    ; -----------------------------------------------------------------------------

    dzx0_standard:
    ld bc, $ffff ; preserve default offset 1
    push bc
    inc bc
    ld a, $80

    dzx0s_literals:
    call dzx0s_elias ; obtain length
    ldir ; copy literals
    add a, a ; copy from last offset or new offset?
    jr c, dzx0s_new_offset
    call dzx0s_elias ; obtain length

    dzx0s_copy:
    ex (sp), hl ; preserve source, restore offset
    push hl ; preserve offset
    add hl, de ; calculate destination - offset
    ldir ; copy from offset
    pop hl ; restore offset
    ex (sp), hl ; preserve offset, restore source
    add a, a ; copy from literals or new offset?
    jr nc, dzx0s_literals

    dzx0s_new_offset:
    pop bc ; discard last offset
    ld c, $fe ; prepare negative offset
    call dzx0s_elias_loop ; obtain offset MSB
    inc c
    ret z ; check end marker
    ld b, c
    ld c, (hl) ; obtain offset LSB
    inc hl
    rr b ; last offset bit becomes first length bit
    rr c
    push bc ; preserve new offset
    ld bc, 1 ; obtain length
    call nc, dzx0s_elias_backtrack
    inc bc
    jr dzx0s_copy

    dzx0s_elias:
    inc c ; interlaced Elias gamma coding

    dzx0s_elias_loop:
    add a, a
    jr nz, dzx0s_elias_skip
    ld a, (hl) ; load another group of 8 bits
    inc hl
    rla

    dzx0s_elias_skip:
    ret c

    dzx0s_elias_backtrack:
    add a, a
    rl c
    rl b
    jr dzx0s_elias_loop
    ; -----------------------------------------------------------------------------
    Последний раз редактировалось Bedazzle; 27.07.2025 в 10:38.
    Heavy on the disasm
    Eric and the disasm
    Mask 3: Venom strikes disasm
    Bard's disasm

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •