;----------------------------- ; Универсальный оконный модуль. Концепция Data Press ; (c) Андрей Леликов. ;------ Один раз в жизни мы настраиваемся WINIT:: .WORD 106417 CLR R0 CLR (R0)+ MOV #161716,(R0)+ MOV #2,(R0)+ CLR (R0)+ MOV #1330,177664 RESET MOV #KK6,60 MOV #200,62 MOV #KK6,274 MOV #201,276 CLR 177660 RTS PC ;------ Редактирование строки. --------- ; JSR R1,ESTR ; .WORD Адрес в памяти ; .WORD Адрес первого байта после строки (адрес+длина) ; .WORD Адрес в экране ESTR:: CLR 1$ MOV (R1),R2 5$: MOV R2,R3 ADD 4(R1),R3 2$: TST 122 BNE 31$ MOV #20000,R4 INC (PC)+ 1$: .WORD 0 COMB 1000(R3) COMB 1100(R3) 3$: DEC R4 BEQ 2$ DEC 64 BNE 32$ ;TST 122 ;BNE 31$ BIT #100,177716 BEQ 31$ 32$: TSTB 105 BEQ 3$ 31$: JSR PC,KEY BIT #1,1$ BEQ 4$ COMB 1000(R3) COMB 1100(R3) INC 1$ 4$: CMP R0,#10 BNE 6$ CMP R2,(R1) BEQ 2$ DEC R2 7$: MOV R1,-(SP) MOV R2,-(SP) JSR PC,SOUND MOV (SP)+,R2 MOV (SP)+,R1 BR 5$ 6$: CMP R0,#31 BNE 8$ 11$: CMP R2,2(R1) BEQ 2$ 12$: INC R2 BR 7$ 8$: CMP R0,#30 BNE 9$ CMP R2,(R1) BEQ 2$ DEC R2 MOVB #40,(R2) JSR PC,ESO1 BR 7$ 9$: CMP R0,#12 BNE 10$ ADD #6,R1 MOV R1,(SP) JMP SOUND 10$: CMP #40,R0 BHI 2$ CMP R2,2(R1) BEQ 2$ MOVB R0,(R2) JSR PC,ESO1 BR 12$ ESO1: MOV R1,-(SP) MOV R2,-(SP) MOVB (R2),R0 ADD 4(R1),R2 JSR PC,PRCHR MOV (SP)+,R2 MOV (SP)+,R1 RTS PC ;------ Кнопочку взять. ---------- KEY:: TST 177662 MTPS #0 2$: BIT #100,177716 BEQ 1$ JMP 101010 1$: DEC 64 BPL 2$ MOV #3000,64 .WORD 10737,66 JMP 101122 ;------ Пропищать. ------- SOUND:: TST 122 BNE 2$ MOV #5,R2 MOV #50,R3 TST 66 BEQ 1$ MOV #100,R3 1$: JMP 102062 2$: RTS PC ;------ Клавиатура. ----- KK6:: MOV #20000,64 MOV #0,66 JSR R4,110346 MOV R5,-(SP) MOV 177662,R0 BCS 1$ BEQ 2$ ; MAINS CMP R0,#15 BEQ 2$ CMP R0,#20 BEQ 2$ 3$: CMP R0,#16 BNE 31$ MOVB #200,43 BR 2$ 31$: CMP R0,#17 BNE 32$ CLRB 43 2$: CLR R0 INC R0 32$: JMP 101150 1$: CMP #77,R0 BHI 2$ JMP 101374 ;------ Печать текстового блока. ------- ; .W ADR ; 4 - R5=OLD, 10 - R2=OLD+1200 ; .W SCR ADR ; TBLK:: TST (PC)+ TPWT: .WORD 0 BNE 2$ MOV (R0)+,R1 BEQ RTS2 BIT #40000,R1 BEQ 1$ TST R1 BMI 10$ MOV R1,R2 BR 6$ 10$: BIT #20000,R1 BEQ 2$ BIT #10000,R1 BEQ 7$ MOVB R1,TPWT BR TBLK 7$: BIC #170000,R1 MOVB (R0)+,R3 MOV R3,R2 BIC #177700,R3 SWAB R2 ASR R2 ASR R2 BIC #147777,R2 ADD #40000,R2 ADD R2,R1 11$: CLR R4 BISB (R0)+,R4 JSR PC,INCOM BR TBLK 1$: MOV R1,R5 5$: BMI 2$ MOV (R0)+,R2 6$: MOV R2,(PC)+ 3$: .WORD 0 BR 4$ 2$: ADD #1200,3$ MOV 3$,R2 DEC TPWT 4$: BIC #140000,R5 CMP R5,#100 BHI 41$ MOV (R0)+,R1 MOV (R0)+,R3 MOV R0,-(SP) MOV #100,R4 SUB R5,R4 43$: MOV R5,R0 42$: MOVB (R1)+,(R2)+ SOB R0,42$ ADD R4,R1 ADD R4,R2 SOB R3,43$ BR 44$ 41$: MOV R0,-(SP) JSR PC,STRING 44$: MOV (SP)+,R0 BR TBLK RTS2: RTS R0 ;------ Инверсия фрагмента. ------- INCOM:: MOV R1,R2 ADD #100,R1 MOV R3,R5 8$: COMB (R2)+ SOB R5,8$ SOB R4,INCOM RTS PC ;----- Вывод строки символов. ---------- ; R5 - ADR IN MEMORY ; R2 - ARD IN SCREEN STRING:: .ENABL LSB CLR -(SP) 1$: TST (PC)+ MDT: .WORD -1 BMI 2$ BNE 3$ MOV (PC)+,R5 MDO: .WORD 0 3$: DEC MDT 2$: MOVB (R5)+,R0 BEQ 21$ MOV R5,(SP) JSR PC,PRCHR MOV (SP),R5 BR 1$ 21$: TST (SP)+ RTS1: RTS PC .DSABL LSB ;------ Печать символа или установка режима. --- ; R0 - CODE ; R2 - SCR ADR PRCHR:: MOVB R0,R4 BPL 3$ SUB #177640,R4 BPL 11$ CMP R4,#-5 BGT 34$ MOV #>,R3 BR 2$ 34$: MOV 2(SP),R1 MOVB (R4),R0 ADD #MDD,R0 MOVB (R0)+,R5 BPL 35$ MOVB (R0)+,36$ .WORD 112160 ; MOVB (R1)+,X(R0) 36$: .WORD 0 NEG R5 35$: MOV R1,MDO MOV R5,MDT MOV R0,2(SP) ; WARNING! вызов только из PRSTR RTS PC 3$: SUB #20,R4 BPL 1$ CMP R4,#<14-20> BEQ 55$ ASL R4 ASL R4 MOV (R4),R3 BPL 5$ MOV (SP)+,R0 MOV (SP),R1 INC (SP) MOVB (R1),R1 ; ONLY >0 !!!! MOV #77,R3 MOV #<2-1200>,R4 52$: MOV #12,R5 DEC R2 51$: MOVB (R2)+,(R2) ADD R3,R2 SOB R5,51$ ADD R4,R2 SOB R1,52$ JMP (R0) 55$: MOV R2,R4 INC R2 MOV #100,R3 MOV #12,R0 56$: BICB #^B11001100,(R4) ADD R3,R4 SOB R0,56$ RTS PC 5$: MOV R3,TTYP MOV (R4),R0 BMI 4$ BIC #40000,(R0) RTS PC 4$: BIS #40000,100000(R0) RTS PC 11$: MOV #<112036+<160*12>>,R3 BR 2$ 1$: MOV #112036,R3 2$: MOV R4,R1 ASL R1 ASL R1 ADD R4,R1 ASL R1 ADD R3,R1 .WORD 137 TTYP: .WORD 0 ;------ Вывод жирного символа. --------- BOLD: MOV #BADCHR,R3 MOV #27.,R4 CLR R5 2$: CMPB R0,(R3)+ BEQ QBOLD SOB R4,2$ ;------ Обычный жирный символ. ------- TBOLD: MOV #12,R0 MOV #100,R3 MOV R2,R4 INC R2 M1: MOVB (R1)+,R5 MBOL: BISB R5,(R4) ASL R5 BISB R5,(R4) ADD R3,R4 SOB R0,M1 RTS PC ;------ Вывод жирного символа красиво. ------ QBOLD: MOV #100,R3 MOV #12,R0 M2: MOVB (R1)+,R4 MQBO: BISB R4,(R2) MOV R4,R5 ASL R4 ASR R5 BIC #37,R4 BIC #374,R5 BISB R4,(R2) BISB R5,(R2) ADD R3,R2 SOB R0,M2 ADD #<1-1200>,R2 RTS PC ;------ Рисование обычного символа. ---------- QSYMB: MOV #12,R0 MOV #100,R3 MOV R2,R4 INC R2 MSYM: MOVB (R1)+,(R4) ADD R3,R4 SOB R0,MSYM RTS PC ;------ Для окошек. ---- TSYMB: MOV #11,R0 MOV #100,R3 MOV R2,R4 INC R2 MOVB #377,(R4) ADD R3,R4 BR MSYM ;------ Инверсная печать ----- ISYMB: MOV #12,R0 MOV #100,R3 MOV R2,R4 INC R2 ISYM: MOVB (R1)+,(R4) COMB (R4) ADD R3,R4 SOB R0,ISYM RTS PC ;------ Таблица подпрограмм режимов. ---- STYP: .WORD QSYMB,MSYM ; 1 .WORD QSYMB,MSYM+100000 ; 2 .WORD BOLD,MBOL ; 3 .WORD BOLD,MBOL+100000 ; 4 .WORD QBOLD,MQBO ; 5 .WORD QBOLD,MQBO+100000 ; 6 .WORD TBOLD,MBOL ; 7 .WORD TBOLD,MBOL+100000 ; 10 .WORD TSYMB,MSYM ; 11 .WORD TSYMB,MSYM+100000 ; 12 .WORD -1,0 ; 13 .BLKW 2 ; 14 - Очистка © .WORD ISYMB,ISYM ; 15 ;------ Данные для окошек. ------ BADCHR: .BYTE '#,'&,'@,'W,'w,'Ю,'ю,'Ф,'ф,'Ж,'ж,'Ш,'ш,'Щ,'щ .BYTE 'M,'m,'Q,'М,'м,'n,'p,'р,'r,'b,'h,'u ;------ Макроопределения ----- MDA: .BYTE 0,,, MDD: .BYTE <400-6>,3,214,216,13,0,215,14,0 MD3: .BYTE <400-5>,4,2,40,14,13,0,1 MD1: .BYTE 6,1,200,201,202,203,11 MD2: .BYTE <400-13>,10,1,204,205,206,0,207,203,13,0,211,14,0 .EVEN SZNAK: .BYTE 377,377,017,017,217,017,017,017 .BYTE 017,377,377,377,000,000,377,176 .BYTE 030,000,000,377,377,377,360,360 .BYTE 361,360,360,360,360,377,377,000 .BYTE 000,000,000,000,000,000,000,000 .BYTE 377,377,017,017,017,017,017,017 .BYTE 017,377,377,377,000,000,000,377 .BYTE 000,000,000,377,377,377,360,360 .BYTE 360,360,360,360,360,377,377,017 .BYTE 017,017,017,017,017,017,017,017 .BYTE 000,300,140,061,033,016,004,000 .BYTE 000,000,377,360,360,360,360,360 .BYTE 360,360,360,360,017,017,017,017 .BYTE 017,017,017,017,017,017,360,360 .BYTE 360,360,360,360,360,360,360,360 .BYTE 017,017,017,017,017,017,017,017 .BYTE 377,377,360,360,360,360,360,360 .BYTE 360,360,377,377,000,000,000,000 .BYTE 000,000,000,000,377,377,377,377 .BYTE 000,000,000,000,000,000,000,000 .BYTE 124,105,124,105,124,105,124,105 .BYTE 124,105,210,042,210,042,210,042 .BYTE 210,042,210,042 FREMEM:: .BLKW 5 .END