Код:
;печать готовой карты из памяти
MapPrint
ld a,(PrintMapPag) ;включаем нужную страницу
call PageSlot2G
ld hl,(PrintMapAddr)
ld de, BaseScrAddr
ld bc, (PrintMapCol) ;ширина левой части
;inc c
;dec c
;jp z,MapPrint3 ;если C=0, левую часть не рисуем. !JP вместо JR
ld a,80
sub c
ld (skip_R+1),a ;ширина пропуска правой части
rlca
ld c,a
ld ix,MapPr_L-2 ;адрес начала строки LDI'шек
add ix,bc ;получаем в IX адрес прыжка
ld a,160 ;кол-во строк
MapPr_L jp (ix) ;начало цикла левой части
dup 78
ldi ;перенос
edup
skip_R ld bc,0 ;в C загружена ширина пропуска, B=0
ex de,hl
add hl,bc
ex de,hl
add hl,bc
dec a
jp nz,MapPr_L ;JP вместо JR, т.к. команды LDI развернуты в цикле - у JR не хватит смещения
MapPrint3 ;печать (или не печать) правой части из след. страницы
ld a,(PrintMapCol)
cp RightCol+1
ret z ;!JP вместо JR. А по уму достаточно команды RET Z
ld a,(PrintMapPag) ;включаем нужную страницу
inc a
call PageSlot2G
ld hl,(PrintMapAddr)
ld de,BaseScrAddr ;или ld d,BaseScrAddr/256 (нам нужен только старший байт)
ld bc,(PrintMapCol)
ld e,c
; ld b,0
; ld a,78 ;сразу отнимаем 2, зачем лишняя команда (sub 2)
; sub c
ld a,c
rlca ;умножаем на 2
ld c,a ;смещение для jp (ix)
ld ix,MapPr_R+2
add ix,bc
ld a,80
sub l
ld (skip_L+1),a ;пропуск левой части
ld l,b ;b=0
ld a, 160
MapPr_R jp (ix) ;начало цикла правой части
dup 78
ldi
edup
skip_L ld bc,0
ex de,hl
add hl,bc
ex de,hl
add hl,bc
dec a
jp nz,MapPr_R ;JP вместо JR
;MapPrintE ; можно удалить метку и RET, если ниже MapPrint3 поставить RET Z вместо JP Z
ret