Код:
;JIT алгоритм
;кстати что значит JIT?
итак изначально имеем рабочую область 160 на 256
т.е 20 тайловых строк
итак производим генерацию кода для обработки тайловой строки
для начала определяемся как все будет
итак
буфер под код 256 байтов
при максимальной загрузке
вида
ld e,l
rl (hl)
ldd
5*32 - 160 байтов
буфер должен выглядеть как то так
rl (hl)
ldd
rl (hl)
ldd
dec l
dec l
dec l
dec l
ld e,l
rl (hl)
ldd
ret
l_init
;h-старший байт адреса
звполняем таблицу
ld l,-1
;инициируем таблицу переходов
ld b,32
ld (hl),-27
dec l
djnz $-3
;создаем ссылку на текущий байт в таблице переходов
ld (hl),-1
dec l
;закручиваем скроллер в кольцо
ld (hl),1
dec l
ld (hl),h
dec l
ld (hl),#c3
dec l
ld (hl),#c9
ld a,l
ld l,0
;инициируем трамплин
ld (hl),a
ret
l_proc
;обработчик
ld l,0
ld l,(hl)
ld (jmp_item),hl
ex de,hl
ld a,l
call $+3
call $+3
call $+3
call $
jmp_item equ $-2
ld l,a
ret
l_gen
;генератор
d-старший байт
a-статусный байт
;статусы
0-пустота (камень или вода)
1-начало линии
2-середина линии
3-конец линии
add a,a
add a,jmp_gen
ld l,a
adc a,jmp_gen/256
sub l
ld h,a
ld a,(hl)
inc hl
ld h,(hl)
ld l,a
jp (hl)
jmp_gen dw jit_0,jit_1,jit_2,jit_3
jit_0
ex de,hl
ld l,-32
ld a,(hl)
dec a
or #e0
ld c,a
ld (hl),a
ld b,h
ld l,0
ld l,(hl)
ld a,l
dec a
call z,corr_jitb
dec l
ld (hl),#2d dec l
ld a,l
ld (bc),a
ld l,0
ld (hl),a
ret
corr_jitb
ld a,l
ld l,-33
ld (hl),a
dec l
ld (hl),h
dec l
ld (hl),#c3
ret
jit_1
ex de,hl
ld l,-32
ld a,(hl)
dec a
or #e0
ld c,a
ld (hl),a
ld b,h
ld l,0
ld l,(hl)
dec l
call z,corr_jitb
ld (hl),#5d ld e,l
ld de,#cb16 rl (hl)
call place_word
ld de,#eda8 ldd
call place_word
ld a,l
ld (bc),a
ld l,0
ld (hl),a
ret
place_word
ld a,l
cp 3
call c,corr_jitb
dec l
ld (hl),e
dec l
ld (hl),d
ret
както так
это предварительные прикидки - позже наверное напишу остальное да и багу выловить надо :)