Вот моя процедура зеркалирования окна. Если вы видите как её оптимизнуть (не для демостроя, без таблиц), то милости прошу. У нас техническая тема, так что по возможности без эмоций, ладно?
Код:void Laser2_MIRV (unsigned char col, unsigned char row, unsigned char len, unsigned char hgt) __z88dk_callee { __asm POP DE POP BC ; C = col; B = row CALL __Laser2_XYtoScr POP BC ; C = len; B = hgt PUSH DE LD A, C LD (MIRV_WIDTH$+1), A INC A SRL A LD (MIRV_WIDTH_DIV2$+1), A MIRV_HLINE$: PUSH BC ; Begin of loop on charlines LD A, #8 MIRV_LINE8$: EX AF, AF LD (MIRV_SCR_ADR$+1), HL LD A, L MIRV_WIDTH$: ADD #0 LD E, A LD D, H MIRV_WIDTH_DIV2$: LD B, #0 MIRV_COL_MIRROR$: DEC E LD A, (DE) LD C, (HL) ; ------------------ ; 2 bytes mirroring ; ------------------ RLA RR C RLA RR C RLA RR C RLA RR C RLA RR C RLA RR C RLA RR C RLA RR C ; ------------------ RLA LD (DE), A LD (HL), C INC L DJNZ MIRV_COL_MIRROR$ MIRV_SCR_ADR$: LD HL, #0 INC H EX AF, AF DEC A JR NZ, MIRV_LINE8$ LD A, L ADD #0x20 ; Next charline LD L, A ; If carry then jump to next third of screen JR C, MIRV_CONT_1_3$ LD A, H SUB #8 ; HL := HL - 0x0800 LD H, A MIRV_CONT_1_3$: POP BC DJNZ MIRV_HLINE$ ; End of loop on charlines (the same third) __endasm; } //Laser2_MIRV




Ответить с цитированием