Я тебе заодно сразу скину пару идей.
Первая - избавится от DJNZ. Но для этого надо разложить цикл из 8 итераций в течение высоты одного знакоместа. Примерно так:Код:Loop:; Дублировать 8 разEntry0: LDA,(HL)ORCLD(HL),ADECDRETZINCHEXAF,AF'ADDA,EJRNC,.noOverRRCCJPNC,.noOverINCL.noOver:EXAF,AF'; конец фрагментаLDA,LADDA,$20LDL,AJRC,LoopLDA,HSUB$08LDH,AJPLoop
Единственное усложнение, что изначально тебе придется в зависимости от номера линии в знакоместе входить в точку входа от Entry0 до Entry7.
Если еще оптимизировать, то можно избавиться и от DEC D / RET Z.
Но для этого надо сделать две функции рисования линии. Одну обычную с DEC D / RET Z, а другую примерно такую:Код:Loop:; Дублировать 8 разEntry0: LDA,(HL)ORCLD(HL),AINCHEXAF,AF'ADDA,EJRNC,.noOverRRCCJPNC,.noOverINCL.noOver:EXAF,AF'; конец фрагментаLDA,LADDA,$20LDL,AJRC,.CarryLDA,HSUB$08LDH,A.Carry:DJNZLoopRET
Перед рисованием линии ты рассчитываешь, сколько знакомест по вертикали у тебя займет линия, и сперва рисуешь в течение целых знакомест посредством второй функции, а потом оставшееся последнее знакоместо дорисовываешь первой функцией.Отредактировано dr.Titus (2016-11-19 21:35:50)