;*********************************** VISIO: IN A,(PORT_Y) PUSH AF ; LD A,(.ADD_PAR) OR A LD A,1 ; lines JR NZ,.set_lines INC A ; lines .set_lines: LD (.lines),A LD B,A LD HL,(SND_A) LD (.ADDRESS),HL ; OR A ; JR Z,.no_add .no_add: LD A,H CALL .PUT_DOT ; выход .exit: POP AF OUT (PORT_Y),A RET ; ВХОД: A - старший байт адреса SND_A ; B = (количество полосок)/2 .PUT_DOT: ADD A,A ; AND #7F ; !HARDCODE длина окна - 128 байтов LD L,A LD H,#B0 ; !HARDCODE буффер LD BC,7 ; !HARDCODE смещение от начала рамки ADD HL,BC ; LD A,(SND_A) RLCA LD C,A ADD HL,BC ; CALL .SET_Y_COLOR ; LD A,#50 OUT (SLOT3),A LD A,(HL) ; old LD (.OLD_),A LD A,(.NEW_) LD (HL),A ; переключаем в HL адрес с буфера на экран LD A,H ADD A,#10 LD H,A ; LD A,(SND_A) RLCA JR NC,.no_dec_hl INC HL .no_dec_hl: ; ; стереть по старой координате ; LD A,(.lines) ; LD B,A ; LD C,A ; .OLD_+1: LD A,0 OUT (PORT_Y),A ; old ; стереть .clear+1: LD A,0 ; clear .loop_clear: LD (HL),A INC L LD (HL),A ; стереть ; INC L ; DJNZ .loop_clear ; DEC L ; нарисовать по новой координате ; LD B,C ; DEC L ; DEC L ; DEC L .loop_draw: ; .NEW_+1: LD A,0 OUT (PORT_Y),A ; new .COLOR_+1: LD A,#FF ; нарисовать LD (HL),A DEC L LD (HL),A ; INC L ; ; LD A,(.ADDRESS) ; ADD A,8 ; LD (.ADDRESS),A ; LD D,B ; CALL .SET_Y_COLOR ; ; ; LD B,D ; DJNZ .loop_draw ; .no_draw: LD A,CBL.BUFFER_PAGE OUT (SLOT3),A RET ; ; .SET_Y_COLOR: ; .ADDRESS+1: LD BC,0 LD A,(BC) RRA CPL AND #7F ADD A,#40 LD (.COLOR_),A INC BC LD A,(BC) ; new .ADD_PAR+1: ADD A,0 ; parameter for 8/16 bit RRA RRA AND #3F ADD A,#40 ; !HARDCODE Vertical Shift LD (.NEW_),A ; LD B,A LD A,(MAX_) CP B RET NC LD A,B LD (MAX_),A RET ; .lines: DB 1 ; 1 = 1, 2 = 2