;-------------------------------------------------- ; Mailer ; (c) Andrey Lelikov, 1995 ; Corrected by MKT 11.07.96 Tst2==120064 Screen=120074 START: BR St ;---Маски переключений страниц памяти MTRM:: .WORD 36000 ;страница для чтения терминалки MMLR:: .WORD 26000 ;где хранится мейлер во время работы ZMODEM MLOG:: .WORD 26000 ;.LOG MIMG:: .WORD 16000 ;рабочая страница ST: MOV #774,SP ;--- Определение варианта контроллера винта mov #vint1,@#4 clr r0 mov #177640,r4 ;Самара? tst @r4 mov r4,r0 vint1: mov #novint,@#4 mov #177740,r4 ;Альтпро! tst @r4 mov r4,r0 novint: mov r0,(pc)+ vint:: .word 0 ;--- Инициализация и подготовка к работе JSR PC,WINIT CLR 62 MOV #1,276 JSR R4,FILERD ;считать файл конфига .WORD TXT51,DMCNF bcc 1$ mov #txt6,r1 jmp quit 1$: MOV #10.,R5 MOV #DMCNF,R0 CALL SQUEEZ ;сквизирование лишней информации в конфиге MOV #DMCNF,R1 mov #-1,r3 2$: movb (r1)+,r0 beq 3$ call @tst2 cmpb r0,#'F bne 2$ clr r3 3$: mov r3,xonoff MOV #8.,R2 CALL IN2 ;CONFIG 5$: MOVB (R1)+,R0 BEQ 4$ CMPB R0,#'0 BLO 5$ CMPB R0,#'9 BHI 5$ SUB #60,R0 COMB ACTB(R0) BR 5$ 4$: JSR PC,LINIT TSTRT: MOV #774,SP .WORD 106427,0 JSR PC,DSKS JSR R0,TBLK .WORD TXT0,40000,41200,41200 .WORD 100,42400,41400,354 ; Копирование. .WORD TXT1,76600 .WORD TXT2,50026,170011,0 ;--- Выжидание 5 сек, если кнопку не нажмут и нет ключа INC (PC)+ .WORD -1 BNE MMM1 TST 122 BNE MMM1 CLR TIME 1$: TSTB 105 BNE MMM1 CMP TIME,#50.*5 BLOS 1$ MOV #9.,R2 ;5 сек прошло - взять ключ из конфига CALL IN2 MOV #400,R2 MOV R2,R3 4$: MOVB (R1)+,R0 BEQ 3$ CMPB R0,#'_ BNE 2$ MOVB #12,R0 2$: MOVB R0,(R2)+ BR 4$ 3$: SUB R3,R2 BEQ MMM1 MOV R3,124 ;Aдрес ключа MOV R2,122 ;Длина ключа MMM1: JSR PC,KEY CMPB R0,#240 BHI 1$ TSTB R0 BMI 2$ CMPB R0,#140 BLO 2$ 1$: BIC #240,R0 2$: MOV #TXT3,R1 3$: TSTB (R1) BEQ MMM1 CMPB R0,(R1)+ BNE 3$ ASL R1 MOV *2>>(R1),-(SP) JMP SOUND ADCM1: .WORD MCTERM,MCPROG,MCAUTO,MCZABR,MCREGI,MCEXIT .WORD MCCONF,MCCONF,MCCONF,MCCONF,MCCONF,MCCONF .WORD MCCONF,MCCONF,MCCONF,MCCONF ;--- передать строку инициализации --- INI:: jsr pc,rinit mov #2,r2 jsr pc,in2 jsr pc,inout CALL crout mov #50.,r0 clr time cmp time,r0 blo .-4 jmp rinit ;--- найти строку в конфиге по номеру в R2--- in2:: mov #dmcnf,r1 1$: tstb (r1)+ bne 1$ sob r2,1$ rts pc ;--- вывести строку на линию по адресу в R1 --- inout:: br 2$ 1$: jsr pc,sbyte 2$: movb (r1)+,r0 bne 1$ rts pc ;--- взять DEC число из (R1) и поклать в R3 --- indec:: CLR R3 2$: MOVB (R1)+,R0 BNE 1$ RTS PC 1$: SUB #'0,R0 MOV R3,R4 ASL R3 ASL R3 ASL R3 ASL R4 ADD R4,R3 ADD R0,R3 BR 2$ ;------ Конфиг ---- MCCONF: MOV #ACTB,R1 MOV #10.,R2 CLRB (R1)+ SOB R2,.-2 BICB #60,R0 COMB ACTB(R0) JSR PC,MTCONF JMP MCZABR BR MT1 ;------ Гуляем ... -- MCEXIT: CLR 1000 CLR 176560 TST 176562 TST 176562 MOV #40000,177662 CLR 120114 CLR R0 SOB R0,. JMP 100000 ;------ Кому звоним ----- MCREGI:: JSR R0,TBLK .WORD 24.,50026,46626,<12*12> .WORD TXT12,50026,170007,0 2$: JSR PC,SAB 1$: JSR PC,KEY CMP R0,#3 BEQ MT1 CMP R0,#12 BEQ MT1 SUB #60,R0 BMI 1$ CMP R0,#9. BHI 1$ COMB ACTB(R0) JSR PC,SOUND BR 2$ SAB: MOV #ACTB,R5 MOV #50026+2+<5*1200>,R2 MOV #10.,R4 2$: MOV #"-+,R0 TSTB (R5)+ BEQ 1$ SWAB R0 1$: MOV R5,-(SP) MOV R4,-(SP) JSR PC,PRCHR MOV (SP)+,R4 MOV (SP)+,R5 INC R2 SOB R4,2$ RTS PC ;------ Через время --- MCPROG: JSR PC,MTPROG BR MT1 ;------ Терминал --------- MCTERM: mov #MODULL+2,@#120114 mov #6,r2 call in2 mov r1,1$ mov mtrm,177716 jsr r4,filerd 1$: .word 0,40000 mov mimg,177716 bcs 2$ CLR RECSEN call trmzm 2$: clr @#120114 CALL LINIT MT1: JMP TSTRT ;------ Point session ---- MCZABR: JSR R0,TBLK .WORD 24.,50026,46626,<12*12>,0 JSR PC,MTZABR BR MT1 ;------ Ввести время старта ---- INFTIM::JSR R0,TBLK .WORD 24.,50026,46626,<12*12> .WORD TXT10,50030,170007,0 MOV #326,R0 MOV #20040,R1 MOV R1,(R0)+ MOV R1,(R0)+ MOV R1,(R0)+ JSR R1,ESTR .WORD 326,333,<50030+6+<5*1200>-326> MOV #326,R1 JSR PC,DC MOV R5,THR INC R1 JSR PC,DC MOV R5,TMN MOV #30,TSC JSR R0,TBLK .WORD TXT11,50030,170007,0 RTS PC IFT== 50030+5+<5*1200> DC: CLR R5 CLR R4 3$: MOVB (R1)+,R0 SUB #'0,R0 BMI 2$ CMP R0,#9. BLOS 1$ 2$: CLR R0 1$: MOV R5,R3 ASL R3 ASL R3 ADD R3,R5 ASL R5 ADD R0,R5 COM R4 BNE 3$ RTS PC ;------ Автодозвон ----- MCAUTO: JSR R0,TBLK .WORD 24.,50026,46626,<12*12> .WORD TXT7,50030,170007 .WORD 0 MOV #326,R0 MOV #8.,R1 1$: MOV #20040,(R0)+ SOB R1,1$ JSR R1,ESTR .WORD 326,340,50030+4+<4*1200>-326 CLR 324 MOV #340,R0 2$: CMPB -(R0),#40 BEQ 2$ CLRB 1(R0) CMP R0,#325 BEQ 3$ clr fldial jsr pc,ini JSR PC,MTDIAL ;Переходить в терминал BCC 4$ 3$: BR MT1 4$: JMP MCTERM ;------ Dialing ----- .enable lsb MTDIAL::MOV SP,(PC)+ 1$: .WORD 0 MOV #23$,4 MOV #5,R2 ;Количество дозвонов ( def=100.) JSR PC,IN2 ;если жмут кнопки - не используется JSR PC,INDEC ;если не BUSY - вдвое быстрее MOV R3,(PC)+ KOLDOZ: .WORD 100. 2$: JSR R0,TBLK .WORD TXT9,50030,170007 .WORD 326,50036+<1200*2> .WORD 0 mov #<3*50.>,r0 br 5$ 3$: MOV #"**,CNTDN JSR R0,TBLK .WORD TXT8,50030+<3*1200>+14.,0 Tst (pc)+ fldial::.word 0 beq 4$ Jsr pc,nmtwo br 2$ 4$: mov #4,r2 ;Dial pause jsr pc,in2 jsr pc,indec clr r0 add #50.,r0 sob r3,.-4 5$: CLR TIME ; Пауза 6$: CMP TIME,r0 BLO 6$ JSR PC,RINIT MOV #3,13$ MOV #2,12$ mov #3,r2 ;answer time jsr pc,in2 movb (r1)+,cntdn movb (r1),cntdn+1 mov #1,r2 ;dial prefix call in2 call inout MOV #326,R1 call inout JSR PC,SETTIM ; NUMER SKIP .WORD <3*50.> JSR PC,CROUT 7$: JSR PC,RBYTE BCS 23$ CMP R0,#15 BHI 7$ 8$: JSR PC,RINIT CLR TIME 9$: CMP UBYTE,TBYTE BNE 19$ TSTB 105 BEQ 11$ JSR PC,KEY TST 12$ BPL 11$ CMP R0,#3 BEQ 23$ 10$: JSR PC,CROUT inc koldoz ;если жмут кнопки, счетчик не трогать BR 9$ 11$: CMP TIME,#50. BLO 9$ SUB #50.,TIME DEC (PC)+ 12$: .WORD 0 CMPB CNTDN+1,#'0 BNE 16$ CMPB CNTDN,#40 BNE 15$ DEC (PC)+ 13$: .WORD 1 BNE 10$ 14$: BR 3$ ; Если три раза 15$: DECB CNTDN MOVB #'9,CNTDN+1 BR 17$ 16$: DECB CNTDN+1 17$: CMPB CNTDN,#'0 BNE 18$ MOVB #40,CNTDN ; Пробел старшая цифра 18$: JSR R0,TBLK .WORD TXT8,50030+<3*1200>+14.,0 CMP CNTDN,#" 0 BNE 9$ BR 10$ 19$: JSR PC,SETTIM .WORD <2*50.> JSR PC,RBYTE BCS 23$ CMPB R0,#40 BLOS 9$ MOV #BPM,R1 CMPB R0,#'C BEQ 25$ movb r0,(R1)+ cmpb r0,#'B beq 20$ dec koldoz 20$: JSR PC,RBYTE BCS 23$ MOVB R0,(R1)+ CMP R0,#20 BHI 20$ MOVB #40,-1(R1) 21$: CMP R1,#BPM+15. BEQ 22$ MOVB #40,(R1)+ BR 21$ 22$: CLR BPM+10. MOV #7,R0 JSR PC,PRCHR MOV #50034+<1200*5>,R2 MOV #BPM,R5 JSR PC,STRING dec koldoz bpl 14$ 23$: JSR PC,CROUT JSR PC,CROUT SEc 24$: MOV #2,4 MOV 1$,SP RTS PC 25$: movb r0,(r1)+ ;вывод на экран скорости CONNECT 26$: jsr pc,rbyte bcs 27$ movb r0,(r1)+ cmp r0,#20 bhi 26$ clrb -1(r1) mov #42022,r2 mov #bpm,r5 jsr pc,string 27$: CLC BR 24$ .dsable lsb ;------ Инициализация ---- LINIT:: MOV #V100,100 MOV #0,102 MOV #V360,360 MOV #340,362 TST 176562 BIS #100,176560 MOV #0,177662 MOV MIMG,177716 RTS PC V100: INC (PC)+ TIME:: .WORD 0 DEC (PC)+ TICKS:: .WORD 49. BPL TIMR1 MOV #49.,TICKS INC (PC)+ SECINC::.WORD DEC (PC)+ SECDEC::.WORD INC (PC)+ TIMSC:: .WORD 0 CMP TIMSC,#60. BNE TIMR1 CLR TIMSC INC (PC)+ TIMMN:: .WORD 0 CMP TIMMN,#60. BNE TIMR1 CLR TIMMN INC (PC)+ TIMCH:: .WORD 0 CMP TIMCH,#12. BNE TIMR1 ; JSR PC,INCDATE CLR TIMCH TIMR1: RTi ;------ STOP ---- DSKS:: CLR 177130 CMP 100036,#120002 BNE 2$ CLR @120006 2$: RTS PC ;------ Прочитать файл ---- FILERD::MOV (R4)+,R3 ;адрес имени MOV #BPM,R1 MOV #33,(R1)+ MOV (R4)+,(R1)+ ;АДРЕС ЗАГРУЗКИ TST (R1)+ MOV #20,R2 1$: MOVB (R3)+,(R1)+ tstb (r3) beq 4$ SOB R2,1$ 2$: MOV #BPM,R1 MOV #SCOUT,SCREEN EMT 36 CLR SCREEN TSTB 1(R1) BEQ 3$ SEC 3$: RTS R4 4$: movb #40,(r1)+ sob r2,4$ br 2$ SCOUT: mov Mimg,177716 ;MOV #7,R0 EMT 16 RTS PC ;------ Прочитать настройки ---- MTCONF::BISB #60,R0 BIC #200,R0 MOVB R0,TXT5+4 ;Взять имя "IMAG0.CNF" JSR R4,FILERD .WORD TXT5,DATABF BCC 2$ MOV #TXT6,R1 ;выход, если ошибка чтения файла jmp quit 2$: MOV #16.,R5 ;перемещаем 15.строк (после ": ") в MOV #DATABF,R0 ;DATABF SQUEEZ: MOV R0,R1 3$: CMPB (R0)+,#': BNE 3$ 4$: CMPB (R0)+,#40 BEQ 4$ DEC R0 5$: CMPB (R0),#12 BEQ 6$ CMPB (R0),#15 BEQ 6$ TSTB (R0) BEQ 6$ MOVB (R0)+,(R1)+ BR 5$ 6$: CMPB -(R1),#40 BEQ 6$ INC R1 CLRB (R1)+ SOB R5,3$ 61$: JSR PC,DSKS 67$: RTS PC ;------ Байтик .... ------ V360: MOV R0,-(SP) MOVB 176562,R0 TST (PC)+ XONOFF::.WORD 1 BEQ 1$ CMPB R0,#21 BNE 2$ CLR FBUSY BR M361 2$: CMPB R0,#22 BNE 1$ MOV SP,FBUSY BR M361 1$: .WORD 110037 UKAZ:: ; Специально для ED UBYTE:: .WORD 30000 INC UBYTE INC (PC)+ CPS:: .WORD 0 BIC #4000,UBYTE M361: MOV (SP)+,R0 RTI RINIT:: MOV #30000,R0 MOV R0,UBYTE MOV R0,(PC)+ TBYTE:: .WORD 30000 RTS PC ;------ CRC-16 ------- CRC16.::MOV R0,-(SP) MOV R1,-(SP) MOV R2,-(SP) MOV R3,-(SP) MOV R5,-(SP) MOV CRC,R3 MOV #1,R5 MOV #177400,R2 BR C2 CRC16:: MOV R0,-(SP) MOV R1,-(SP) MOV R2,-(SP) MOV R3,-(SP) MOV R5,-(SP) CLR R3 MOV #177400,R2 C1: MOVB (R1)+,R0 C2: SWAB R3 XOR R3,R0 BIC R2,R0 ASL R0 MOV CRCTAB(R0),R0 CLRB R3 XOR R0,R3 SOB R5,C1 MOV R3,(PC)+ CRC:: HALT MOV (SP)+,R5 MOV (SP)+,R3 MOV (SP)+,R2 MOV (SP)+,R1 MOV (SP)+,R0 RTS PC ;------ Окошко терминала ----- EUROPA:: JSR R0,TBLK .WORD TXT4,50013,170002 .WORD 44.,52013,51613,<14.*12> .WORD TXT41,52013+<14.*1200>-600,170001 .WORD 0 RTS PC ;------ Текстики ------ TXT0: .BYTE 236,13,4 .ASCII /(c)ImageMailer V1.22 1995-96 LAV & MKT corp./ .BYTE 1,203,13,10,204,205,206,0 .BYTE 220,13,77,0 .BYTE 2,207,203,13,75,211,0 TXT1: .BYTE 214,216,13,75,215,0 TXT3: .ASCII/TPAZRW0123456789/ .BYTE 0 TXT2: .BYTE 236 .ASCII/ Главное меню / .BYTE 237,19. .ASCIZ<212>/ /<3><5><7>/Т/<1>/ерминал /<213><14> .ASCIZ<212>/ /<7>/П/<1>/рограммный режим /<213><14> .ASCIZ<212>/ /<7>/А/<1>/втодозвон /<213><14> .ASCIZ<212>/ /<7>/З/<1>/абрать почту /<213><14> .ASCIZ<212>/ /<7>/Р/<1>/ежим /<213><14> .ASCIZ<212>/ /<7>/В/<1>/ыход в DOS /<213><14> .BYTE 234,19.,235,21.,0 TXT4: .BYTE 236 .ASCII/ Окно в Европу / .BYTE 237,39.,0,1,0 TXT41: .BYTE 1,234,39.,235,41.,0 TXT5: .ASCII/IMAG0.CNF / TXT51: .ASCII/DM.CNF / TXT6: .ASCIZ/?IMG-F-Нет базового файла конфигурации/<12><12> TXT7: .BYTE 236 .ASCII/Автодозвон / .BYTE 237,15. .ASCIZ<212>/ Введите номер: /<213><14> .ASCIZ<212>/ /<213><14> .ASCIZ<212>/ /<213><14> .ASCIZ<212>/ /<213><14> .BYTE 234,15.,235,17.,0 TXT9: .BYTE 236 .ASCII/ Автодозвон / .BYTE 237,17. .ASCIZ<212>/ Ph: /<213><14> .ASCIZ<212>/ Countdown : /<213><14> .ASCIZ<212>/ Last replay: /<213><14> .ASCIZ<212>/ /<213><14> .BYTE 234,17.,235,19.,1,0 .ODD TXT8: .BYTE 7 CNTDN: .BYTE 0,0,1,0 TXT10: .BYTE 236 .ASCII/Час. бомба / .BYTE 237,15. .ASCIZ<212>/ Через сколько /<213><14> .ASCIZ<212>/ взорвемся? /<213><14> .ASCIZ<212>/ /<213><14> .ASCIZ<212>/ 00:00 /<213><14> .BYTE 234,15.,235,17.,1,0 TXT11: .BYTE 236 .ASCII/Час. бомба / .BYTE 237,15. .ASCIZ<212>/ Каюк настанет /<213><14> .ASCIZ<212>/ примерно через /<213><14> .ASCIZ<212>/ /<213><14> .ASCIZ<212>/ 00:00:00 /<213><14> .BYTE 234,15.,235,17.,1,0 TXT12: .BYTE 236 .ASCII/ Активные BOSSы / .BYTE 237,20. .ASCIZ<212>/ Нажимайте циферки /<213><14> .ASCIZ<212>/ /<213><14> .ASCIZ<212>/ 0 1 2 3 4 5 6 7 8 9 /<213><14> .ASCIZ<212>/ - - - - - - - - - - /<213><14> .BYTE 234,20.,235,22.,1,0 ; .ASCIZ<212>//<213><14> ; .ASCIZ<212>//<213><14> ; .ASCIZ<212>//<213><14> ; .ASCIZ<212>//<213><14> ; .ASCIZ<212>//<213><14> .EVEN ACTB:: .BLKB 10. BPM:: .BLKB <400-320> .WORD 0 .END START