;основная программа, компилировать CL в модуль EQUAL.OBJ
;порядок линковки:
;KERN.OBJ(+TRI.FNT+FREQ.DAT), EQUAL.OBJ, FILER.OBJ в модуль
;EQ0.OVL





NS:     .ASCIZ  "*.TSN "" "" "" "" "" "" "" "" "" "" "
        .EVEN

PWE:    .WORD   0,141,264,124
PWW:    .WORD   264,141,114,124
PWP1:   .WORD   0,0,176.,27.
PWP2:   .WORD   176.,0,80.,27.
PWMN:   .WORD   0,264,256.,114

BPP1:   .BYTE   8.,5.,96.,17.
        .BYTE   47.,5.,72.,21.
BPP3:   .BYTE   0,24.,255.,88.
        .BYTE   0,88.,255.,97.
BPE:    .BYTE   4,17,19.,116
        .BYTE   24.,17,71.,116
        .BYTE   76.,17,123.,116
        .BYTE   128.,17,175.,116
BPWW:   .BYTE   4,72,106,115

BPM1:   .BYTE   101.,3,145.,36.
        .BYTE   101.,38.,145.,55.
        .BYTE   147.,3,171.,55.
        .BYTE   173.,3,206.,55.
        .BYTE   127.,56.,208.,73.
        .BYTE   127.,3,208.,56.

        .BYTE   100.,4.,100.,56.,34.,56.
        .BYTE   34.,48.,4,48.


BPMN:   .BYTE   220,0
        .WORD   0
        .BYTE   4,28.,31.,44.

        .BYTE   120,0
        .WORD   EDSEQ
        .BYTE   36.,4,98.,27.

        .BYTE   121,'F
        .WORD   PHM
        .BYTE   36.,28.,42.,39.
        .WORD   LTST
        .BYTE   121,'W
        .WORD   PHP
        .BYTE   92.,28.,98.,39.
        .WORD   RTST
        .BYTE   121,'Q
        .WORD   RAZM
        .BYTE   40.,42.,46.,53.
        .WORD   LTST
        .BYTE   121,'^
        .WORD   RAZP
        .BYTE   88.,42.,94.,53.
        .WORD   RTST
        ;pattern
        .BYTE   221,'[
        .WORD   0
        .BYTE   36.,58.,42.,69.
        .WORD   LTST
        .BYTE   221,']
        .WORD   0
        .BYTE   88.,58.,94.,69.
        .WORD   RTST
        ;temp
        .BYTE   121,'V
        .WORD   TMPM
        .BYTE   104.,42.,110.,53.
        .WORD   LTST
        .BYTE   121,'\
        .WORD   TMPP
        .BYTE   136.,42.,142.,53.
        .WORD   RTST

        .BYTE   124,'A
        .WORD   0
        .BYTE   104.,4.,132.,13.
        .WORD   MNCA
        .WORD   CHA+4
        .BYTE   124,'B
        .WORD   0
        .BYTE   104.,14.,132.,23.
        .WORD   MNCB
        .WORD   CHB+4
        .BYTE   124,'C
        .WORD   0
        .BYTE   104.,24.,132.,33.
        .WORD   MNCC
        .WORD   CHC+4
        .BYTE   104,'K
        .WORD   0
        .BYTE   220.,39.,248.,48.
        .WORD   MNCD
        .WORD   CYCLE
        .BYTE   104,'R
        .WORD   SETSTE
        .BYTE   220.,49.,248.,58.
        .WORD   MNST
        .WORD   STEREO

        .BYTE   201,'P
        .WORD   0
        .BYTE   104.,59.,123.,70.
        .WORD   MNPPL
        .BYTE   101,'1
        .WORD   PATBGN
        .BYTE   130.,59.,149.,70.
        .WORD   MNPB
        .BYTE   121,'2
        .WORD   PATM
        .BYTE   149.,59.,168.,70.
        .WORD   MNPM
        .BYTE   101,'3
        .WORD   PLAYUP
        .BYTE   168.,59.,187.,70.
        .WORD   MNPL
        .BYTE   101,'4
        .WORD   PLYOFF
        .BYTE   187.,59.,206.,70.
        .WORD   MNPS
        .BYTE   121,'5
        .WORD   PATP
        .BYTE   206.,59.,225.,70.
        .WORD   MNPP
        .BYTE   101,'6
        .WORD   PATEND
        .BYTE   225.,59.,244.,70.
        .WORD   MNPE

        .BYTE   101,'L
        .WORD   LODTSN
        .BYTE   149.,4.,169.,15.
        .WORD   MNLO
        .BYTE   201,'S
        .WORD   0
        .BYTE   149.,15.,169.,26.
        .WORD   MNSV
        .BYTE   201,'E
        .WORD   0
        .BYTE   149.,26.,169.,37.
        .WORD   MNED
        .BYTE   1,'X
        .WORD   QNO
        .BYTE   149.,37.,169.,48.
        .WORD   MNEX

        .BYTE   101,'M
        .WORD   SAED
        .BYTE   176.,4.,204.,15.
        .WORD   MNSA
        .BYTE   201,'Y
        .WORD   0
        .BYTE   176.,15.,204.,26.
        .WORD   MNCP
        .BYTE   201,'T
        .WORD   0
        .BYTE   176.,26.,204.,37.
        .WORD   MNTR
        .BYTE   201,'D
        .WORD   0
        .BYTE   176.,37.,204.,48.
        .WORD   MNDE

        .BYTE   201,'I
        .WORD   0
        .BYTE   214.,4.,246.,15.
        .WORD   MNCO
        .BYTE   201,'H
        .WORD   0
        .BYTE   220.,15.,240.,26.
        .WORD   MNHE
        .BYTE   201,'O
        .WORD   0
        .BYTE   214.,26.,246.,37.
        .WORD   MNOP
        .WORD   EOREC

NHE:    .ASCIZ  <207><1>"Nr"<3>"Channel A"<4>"Channel B"<4>"Channel C"
HSA:    .ASCIZ  <213><207><23.>"spectrum analyser"
LTST:   .ASCIZ  "←"
RTST:   .ASCIZ  "→"
UPST:   .ASCIZ  "↑"
DNST:   .ASCIZ  "↓"
MNCA:   .ASCIZ  "chan."<207>"A"
MNCB:   .ASCIZ  "chan."<207>"B"
MNCC:   .ASCIZ  "chan."<207>"C"
MNCD:   .ASCIZ  "cycle"
MNST:   .ASCIZ  "ste"<207>"R"<206>"eo"
MNPB:   .ASCIZ  <1>"<<"
MNPM:   .ASCIZ  <1>"←|"
MNPL:   .ASCIZ  <1>"¶╫"
MNPS:   .ASCIZ  <1>"♥♥"
MNPP:   .ASCIZ  <1>"|→"
MNPE:   .ASCIZ  <1>">>"
MNPPL:  .ASCIZ  <207>"P"<206>"lay"
MNHE:   .ASCIZ  <207>"H"<206>"elp"
MNLO:   .ASCIZ  <207>"L"<206>"oad"
MNSV:   .ASCIZ  <207>"S"<206>"ave"
MNED:   .ASCIZ  <207>"E"<206>"dit"
MNEX:   .ASCIZ  "e"<207>"X"<206>"it"
MNSA:   .ASCIZ  "sa"<207>"M"<206>"ple"
MNCO:   .ASCIZ  "comp"<207>"I"<206>"le"
MNCP:   .ASCIZ  <1>"cop"<207>"Y"
MNTR:   .ASCIZ  <207>"T"<206>"ransp"
MNDE:   .ASCIZ  <207>"D"<206>"elete"
MNOP:   .ASCIZ  <207>"O"<206>"ptions"
M2OK:   .ASCIZ  <1><207>"O"<206>"k"
M2CAN:  .ASCIZ  <207>"C"<206>"ancel"
        .EVEN


SETKAM: MOV     #BPM1-4,R4
        CALL    LODCRI
        TRAP    251
        MOV     #3,R5
0:      CALL    LODCRI
        TRAP    247
        SOB     R5,0
        CALL    LODCRI
        CALL    ULL
        CALL    LODCRI
        CALL    DRL
        CLR     R0
        TRAP    232
        MOV     PC,-(SP)
        MOV     PC,-(SP)
        CALL    LODCRI
        TST     -(R4)
        TRAP    277
        RETURN

LODCRI: CALL    LODCRD
        BIT     (R4)+,(R4)+
        RETURN

RECC:   CALL    LODCRI
        BR      0RECC
GETCR2: CLR     R0
        BISB    (R4)+,R0
        CLR     R1
        BISB    (R4)+,R1
        CLR     R2
        BISB    (R4)+,R2
        CLR     R3
        BISB    (R4)+,R3
0RECC:  TRAP    267
        RETURN

PANEL:  TRAP    204
        .WORD   PWP1,0,0
        MOV     #BPP1-4,R4
        CALL    RECC
        TRAP    246
        TRAP    220
        .ASCIZ  <207><30>"L"<2>"output"<200><30>"R"<2>"power"
        .EVEN
        TRAP    204
        .WORD   PWP2,0,0
        CALL    RECC
        TRAP    246
        TRAP    220
        .ASCIZ  <207><2>"channel"<200><2>"power"
        .EVEN
        MOVB    COLBCK,R0
        TRAP    232
        BIT     (R4)+,(R4)+
        CALL    GETCR2
        MOVB    COLPAN,R0
        TRAP    232
        CALL    GETCR2
        TRAP    251
        INC     R1
        MOV     R1,R2
        MOV     R0,R1
        MOV     #HSA,R3
        CLR     R4
        TRAP    223
        RETURN

MAKSPC: MOV     #15000,@#CCM
        CALL    @#BPOFF
        MOV     #100000,R0
        MOV     #20000,R1
1:      CLR     (R0)+
        SOB     R1,1
        SUB     #2000,R0
        MOV     #20,R1
11:     MOV     #7417,(R0)
        MOV     (R0)+,(R0)
        MOV     -(R0),10(R0)
        ADD     #100,R0
        SOB     R1,11
        CLR     LODFIL
        RETURN

START:  CLR     FLTP
        CLR     FLTE
        TRAP    200
        .WORD   130,370,DRAWMS
        CALL    MAKSPC
        CALL    PANEL
        TRAP    205
        .WORD   PWE,NHE,0
        MOVB    COLBCK,R0
        TRAP    232
        MOV     #BPE-4,R4
        MOV     #4,R5
3:      CALL    RECC
        SOB     R5,3

        TRAP    205
        .WORD   PWW,0,0
        CALL    RECC
        TRAP    221
        .ASCII  <207><201><4>
        .ASCII  "EditFile:"<200><200>
        .ASCII  <206>"Position:000/000"<200>
        .ASCIZ  "Pattern :000/000"
        .EVEN

        TRAP    205
        .WORD   PWMN,0,BPMN
        TRAP    221
        .ASCII  <207>"Position"<200>
        .ASCII  <1>"Pattern"<200>
        .ASCII  <2>"Height"<200>
        .ASCII  <1><204>"Free:"<200><200>
        .ASCII  <11.><207>"Length:"<204>"001"
        .ASCII  <6><207>"Temp:"<204>"1"<200>
        .ASCII  <207>"Length:"<200>
        .ASCIZ  <3><204>"000"<207><4>"Pattern:"<204>"000"
        .EVEN
        CALL    SETKAM
        CALL    OUTFRE
18:     TRAP    214
        .WORD   BPMN
        BVS     18
        BCC     18
        TRAP    302
        TST     (PC)+
        BR      18
        CALL    ZDATT
        MOV     #43000,@#177662
        CALL    SETBPG
        MOV     #SYSNM,R1
        MOV     #AEX,@#USRERR
        CALL    @DIRFND
        BCS     AEX
        MOV     #24,R0
        MOV     #4000,R1
        MOV     #110000,R2
        MOV     #120020,R3
        CALL    @#160004
        BCS     AEX
        MOV     #6000,@#177716
        MOV     #40000,R1
        MOV     #12623,(R1)+
0E:     CLR     (R1)+
        TST     R1
        BPL     0E
        MOV     #117070,R0
        MOV     #40,R2
        MOV     #40600,R1
1E:     MOV     -(R0),-(R1)
        SOB     R2,1E
        MOVB    #230,23(R1)
        CLRB    24(R1)
        CALL    SETBPG
        JMP     @#100000
AEX:    JMP     @#140000
SYSNM:  .ASCII  "ANDOS "" "" SYS"
        .EVEN

SETBPG: MOV     #16000,@#177716
        RETURN

LODTSN: CALL    ZDATT
        MOV     #26000,@#PAGE
        MOV     #NS,R0
        MOV     #LOADDR,R1
        CALL    LOAD
        BCS     0
        CALL    SETBPG
        JSR     R5,SETREG
        .BYTE   3,3
        MOV     #334,R1
        MOV     #215,R2
        MOV     #NAMBUF,R3
        MOV     #10,R4
        TRAP    223
        CALL    @#BPOFF
        MOV     PC,(PC)+
LODFIL: .WORD   0
        MOV     #133000,R0
        MOV     R0,FRN
1:      TST     -(R0)
        BEQ     1
        TST     (R0)+
        SUB     R0,(PC)+
FRN:    .WORD   0
        MOV     #FREE,R0
        MOV     #5,R1
2:      MOVB    #40,(R0)+
        SOB     R1,2
        TRAP    234
        .WORD   FRN,FREE
        CALL    INITPL
OUTFRE: CALL    DRPHL
        TRAP    221
        .ASCII  <204><201><3><1>
FREE:   .ASCIZ  "16384 "
        .EVEN
0:      CCC
        RETURN

PLAYUP: TST     LODFIL
        BEQ     01
        MOV     PC,FLTP
        CALL    GETEQD
        MOV     R0,FLTE
01:     RETURN

PLYOFF: TST     FLTP
        BEQ     02
SHUDUP: CLR     FLTP
RESAY:  RESET
        CLR     @#177660
        CLR     VARPRT+260
        CLRB    VARPRT+262
02:     RETURN

GETEQD: MOVB    CNTDLY,R0
        ASL     R0
        ASL     R0
        ASL     R0
        ASL     R0
        CMPB    CNTDLM,R0
        BLOS    2
        MOVB    CNTDLM,R0
2:      TST     (R0)+
        RETURN

ZDATT:  MOV     FLTE,R0
        BEQ     1
        CALL    SHUDUP
0:      WAIT
        SOB     R0,0
        CLR     FLTE
1:      RETURN

;16-ричный вывод числа от 0 до 15.
;R1 - адрес
;R0 - число
HEXOUT: MOV     R2,-(SP)
        CMPB    #10.,R0
        BHI     0
        ADD     #7,R0
0:      ASL     R0
        ASL     R0
        ASL     R0
        ADD     #FONT4+200,R0
        MOV     #10,R2
1:      MOVB    (R0)+,(R1)
        ADD     #100,R1
        SOB     R2,1
        MOV     (SP)+,R2
        RETURN

;десятичный вывод числа на экран.
;обращение: trap 212
;вход:  R1 - адрес вывода
;       R0 - число в интервале 0..999
OUT10:  MOV     R4,-(SP)
        MOV     R0,R2
        MOV     #CONST+4,R3
4:      MOV     (R3),R4
        BEQ     5
        CLR     R0
2:      SUB     R4,R2
        BCS     3
        INC     R0
        BR      2
5:      MOV     R2,R0
3:      ADD     R4,R2
        ASL     R0
        ASL     R0
        ASL     R0
        ADD     #FONT4+201,R0
        MOV     #100,R4
        MOVB    (R0)+,(R1)
        ADD     R4,R1
        MOVB    (R0)+,(R1)
        ADD     R4,R1
        MOVB    (R0)+,(R1)
        ADD     R4,R1
        MOVB    (R0)+,(R1)
        ADD     R4,R1
        MOVB    (R0)+,(R1)
        ADD     R4,R1
        MOVB    (R0)+,(R1)
        SUB     #477,R1
        TST     (R3)+
        BNE     4
        MOV     (SP)+,R4
        RETURN

SETSTE: TSTB    (PC)+
STEREO: .WORD   377
        BEQ     0
        BIS     #200,@#CCS
        BR      1
0:      BIC     #200,@#CCS
1:      MOV     @#CCS,@#177716
        RETURN

;обработчик мышки
DRAWMS: MOV     R5,-(SP)
        MOV     R4,-(SP)
        MOV     R3,-(SP)
        MOV     R2,-(SP)
        MOV     R1,-(SP)
        MOV     R0,-(SP)
        TSTB    (PC)+
FLMS:   .WORD   0
        BEQ     09
        CLR     (PC)+
LB:     .BYTE   0
RB:     .BYTE   0
        CALL    RESTMS
        MOV     @#177714,R0
        BEQ     09
        MOV     @#MXG,R1
        MOV     @#MYG,R2
        MOV     #2,R3

0LB:    BIT     #40,R0
        BEQ     0RB
        INCB    LB
0RB:    BIT     #100,R0
        BEQ     0LT
        INCB    RB
0LT:    BIT     #10,R0
        BEQ     0RT
        TST     R1
        BEQ     0UP
        SUB     R3,R1
        BR      0UP
0RT:    BIT     #2,R0
        BEQ     0UP
        CMP     #376,R1
        BLOS    0UP
        ADD     R3,R1
0UP:    BIT     #1,R0
        BEQ     0DN
        CMP     (PC)+,R2
MINY:   .WORD   0
        BGE     0EX
        SUB     R3,R2
        BR      0EX
0DN:    BIT     #4,R0
        BEQ     0EX
        CMP     (PC)+,R2
MAXY:   .WORD   366
        BLOS    0EX
        ADD     R3,R2
0EX:    CALL    DMS0
09:     ;вставляются команды, которые должны выполняться, пока
        ;стрелки нет на экране
        TST     FLTP
        BEQ     010
        CALL    PLAY
010:
        CALL    DMS1
        ;сюда тоже можно вставить команды, когда стрелка уже
        ;на экране
        TST     (PC)+
FLTE:   .WORD   0
        BEQ     012
        TST     (PC)+
FLTP:   .WORD   0
        BNE     013
        CALL    SHUDUP
013:    CALL    EQUA
012:
        MOV     (SP)+,R0
        MOV     (SP)+,R1
        MOV     (SP)+,R2
        MOV     (SP)+,R3
        MOV     (SP)+,R4
        MOV     (SP)+,R5
        RTI

INMS:   JSR     R5,@#PUSHA
        CLR     R1
        MOV     MINY,R2
        CALL    DMS0
        MOVB    #-1,FLMS
DMS1:   TSTB    FLMS
        BEQ     08
        CALL    STORMS
        CLR     @#177714
        MOV     #DSTROB,@#177714
08:     RETURN

DMS0:   MOV     R1,@#MXG
        MOV     R2,@#MYG
        SWAB    R2
        BIS     R2,R1
        CLR     R2
        SEC
        ROR     R1
        ROL     R2
        ROR     R1
        ROL     R2
        MOVB    OFFST(R2),@#SHIFT
        MOV     R1,@#MADDR
        BIC     #177700,R1
        MOVB    R1,@#MX
        RETURN


OFFST:  .BYTE   0,60,30,110

MSOFF:  TSTB    FLMS
        BEQ     0EX
        WAIT
        COMB    FLMS
        JSR     R5,@#PUSHA
;восстановим экран под стрелкой
RESTMS: MOV     @#MADDR,R1
        MOV     #STIL,R2
        MOV     #8.,R3
        MOV     #76,R4
        CMPB    @#MX,R4
        BEQ     2
        BHI     1
0:      MOVB    (R2)+,(R1)+
        MOVB    (R2)+,(R1)+
        MOVB    (R2)+,(R1)
        ADD     R4,R1
        SOB     R3,0
0EX:    RETURN
2:      MOVB    (R2)+,(R1)+
        MOVB    (R2)+,(R1)+
        INC     R2
        ADD     R4,R1
        SOB     R3,2
        RETURN
1:      MOVB    (R2)+,(R1)
        CMP     (R2)+,(R1)+
        ADD     R4,R1
        SOB     R3,1
        RETURN

MSON:   TSTB    FLMS
        BNE     0EX
        WAIT
        COMB    FLMS
        JSR     R5,@#PUSHA
;сохраним экран под стрелкой и выведем стрелку
STORMS: MOV     @#MADDR,R1
        MOV     #76,R0
        MOV     #STIL,R2
        MOVB    @#SHIFT,R3
        MOV     R3,R4
        ADD     #STILM0,R3
        ADD     #STILI0,R4
        MOV     #8.,R5
        CMPB    @#MX,R0
        BEQ     12
        BHI     11
10:     MOVB    (R1),(R2)+
        BICB    (R3)+,(R1)
        BISB    (R4)+,(R1)+
        MOVB    (R1),(R2)+
        BICB    (R3)+,(R1)
        BISB    (R4)+,(R1)+
        MOVB    (R1),(R2)+
        BICB    (R3)+,(R1)
        BISB    (R4)+,(R1)
        ADD     R0,R1
        SOB     R5,10
0EX:    RETURN
12:     MOVB    (R1),(R2)+
        BICB    (R3)+,(R1)
        BISB    (R4)+,(R1)+
        MOVB    (R1),(R2)+
        BICB    (R3)+,(R1)
        BISB    (R4)+,(R1)+
        INC     R3
        INC     R4
        INC     R2
        ADD     R0,R1
        SOB     R5,12
        RETURN
11:     MOVB    (R1),(R2)+
        BICB    (R3)+,(R1)
        BISB    (R4)+,(R1)
        BIT     (R3)+,(R4)+
        BIT     (R2)+,(R1)+
        ADD     R0,R1
        SOB     R5,11
        RETURN

CNTDLP: .WORD   DLP		;скорость спада эквалайзера
CNTDLY: .WORD   DLY		;скорость спада эквалайзера
CNTDLM: .WORD   DLM		;длительность свечения максимума

EQUA:   TST     FLTP
        BNE     0EQUA
        DEC     FLTE
0EQUA:  MOV     #VARPRT+250,R4	;адрес блока регистров AY
        MOV     #CW,R5
        MOV     #CW+4,R0
        CLR     (R0)+
        CLR     (R0)+
        CLR     (R0)+
        CLR     (R0)+
        CLR     (R0)+
        CLR     R0
        BISB    13(R4),R0		;период волпака
        ASL     R0
        ASL     R0
        ASL     R0
        ASL     R0				;умножаем на 16
        MOVB    FREQ(R0),(R5)+  ;колонка волпака
; из частот сделаем номера колонок
        MOV     (R4)+,R0
        MOVB    FREQ(R0),(R5)+  ;колонка звука канала A
        MOV     (R4)+,R0
        MOVB    FREQ(R0),(R5)+  ;колонка звука канала B
        MOV     (R4)+,R0
        MOVB    FREQ(R0),(R5)+  ;колонка звука канала C
        MOVB    (R4)+,R0
        SWAB    R0
        ROR     R0
        MOVB    FREQ(R0),(R5)+  ;колонка шума
        MOVB    (R4)+,R3        ;смеситель
; сформируем амплитуды
        MOVB    (R4)+,R0        ;амплитуда канала A
        MOVB    (R4)+,R1        ;амплитуда канала B
        MOVB    (R4)+,R2        ;амплитуда канала C
        MOV     #420,R4
        BITB    R4,R0   ;волпак есть?
        BEQ     03      ;нет - переход
        DEC     R0
        MOVB    R0,(R5)
03:     INC     R5
        BITB    R4,R1   ;волпак есть?
        BEQ     13      ;нет - переход
        DEC     R1
        MOVB    R1,(R5)
13:     INC     R5
        BITB    R4,R2   ;волпак есть?
        BEQ     23      ;нет - переход
        DEC     R2
        MOVB    R2,(R5)
23:     INC     R5
        SWAB    R4

000:    BITB    R4,R3   ;звук/шум в канале A есть?
        BNE     00
        MOVB    R0,(R5)
00:     INC     R5
        ASLB    R4
        BITB    R4,R3   ;звук/шум в канале B есть?
        BNE     10
        MOVB    R1,(R5)
10:     INC     R5
        ASLB    R4
        BITB    R4,R3   ;звук/шум в канале C есть?
        BNE     20
        MOVB    R2,(R5)
20:     INC     R5
        ASLB    R4
        INC     PC
        BR      000

        ADD     R1,R0
        ADD     R1,R2
        MOVB    PTAB(R0),(R5)+ ;PL
        MOVB    PTAB(R2),(R5)+ ;PR

        TST     FLTP
        BEQ     30
        MOV     #CW,R1	;номера колонок
        MOV     #WA,R2	;уровни амплитуды
; рисуем волпаки
        MOVB    (R1)+,R3	;номер колонки волпака
        MOVB    (R2)+,R0	;амплитуда волпака канала A, или 0, если нет 
        BEQ     0
        CALL    DRAWUP
0:      MOVB    (R2)+,R0	;амплитуда волпака канала B, или 0, если нет 
        BEQ     1
        CALL    DRAWUP
1:      MOVB    (R2)+,R0	;амплитуда волпака канала C, или 0, если нет 
        BEQ     2
        CALL    DRAWUP
; рисуем звуки
2:      MOVB    (R1)+,R3	;номер колонки канала A
        MOVB    (R2)+,R0	;амплитуда тона канала A, или 0, если тон выключен
        BEQ     01
        CALL    DRAWUP
01:     MOVB    (R1)+,R3	;номер колонки канала B
        MOVB    (R2)+,R0	;амплитуда тона канала B, или 0, если тон выключен
        BEQ     11
        CALL    DRAWUP
11:     MOVB    (R1)+,R3	;номер колонки канала C
        MOVB    (R2)+,R0	;амплитуда тона канала C, или 0, если тон выключен
        BEQ     21
        CALL    DRAWUP
; рисуем шум
21:     MOVB    (R1)+,R3	;номер колонки шума
        MOVB    (R2)+,R0	;амплитуда шума канала A, или 0, если шум выключен
        BEQ     02
        CALL    DRAWUP
02:     MOVB    (R2)+,R0	;амплитуда шума канала B, или 0, если шум выключен
        BEQ     12
        CALL    DRAWUP
12:     MOVB    (R2)+,R0	;амплитуда шума канала C, или 0, если шум выключен
        BEQ     22
        CALL    DRAWUP
22:

30:     MOV     #TABL,R4	;обрабатываем спад колонок
        CLR     R3			;счетчик колонок
31:     MOVB    (R4)+,R5	;берём текущее значение
        BLE     41			;если 0 или меньше - пропускаем
        DECB    (R4)+		;уменьшаем счётчик
        BGT     4			;если больше 0 - пропускаем
        CALL    DRAWDN		;гасим сегмент
41:     INC     R4
4:      MOVB    (R4)+,R5	;берём уровень максимума
        BLE     51			;если нету - пропускаем
        DECB    (R4)+		;уменьшаем счётчик
        BGT     5			;если больше 0 - пропускаем
        CLR     -(R4)		;очищаем максимум
        CALL    DRWDNM		;гасим максимум
        INC     R4
51:     INC     R4
5:      INC     R3
        CMP     #EQUCHA,R3
        BHI     31
; output power
EQP:    MOV     PL,R0
        MOV     (PC)+,R1
        .BYTE   250,374
        MOV     #PWRTB+1,R2
        MOV     #PWRTB+3,R3
        TST     FLTP
        BEQ     8
        MOVB    -(R2),R5
        MOV     #PVAD+200,R4
        ADD     R5,R4
0:      CMPB    R5,R0
        BHI     2
        BEQ     3
        INC     R5
        MOVB    R1,(R4)+
        MOVB    R1,77(R4)
        CMPB    #23,R5
        BHI     0
        SWAB    R1
        MOVB    R1,-1(R4)
        MOVB    R1,77(R4)
        SWAB    R1
        BR      0
2:      INC     R2
        BR      7
3:      MOVB    R5,(R2)+
        MOVB    CNTDLP,(R2)

7:      SWAB    R0
        MOVB    -(R3),R5
        MOV     #PVAD+1000,R4
        ADD     R5,R4
1:      CMPB    R5,R0
        BHI     9
        BEQ     4
        INC     R5
        MOVB    R1,(R4)+
        MOVB    R1,77(R4)
        CMPB    #23,R5
        BHI     1
        SWAB    R1
        MOVB    R1,-1(R4)
        MOVB    R1,77(R4)
        SWAB    R1
        BR      1
9:      INC     R3
        BR      8
4:      MOVB    R5,(R3)+
        MOVB    CNTDLP,(R3)

8:      DECB    (R2)
        BGT     5
        MOVB    -(R2),R5
        BLE     5
        CLRB    PVAD+200(R5)
        CLRB    PVAD+300(R5)
        DECB    (R2)+
        MOVB    CNTDLP,(R2)
5:
        DECB    (R3)
        BGT     6
        MOVB    -(R3),R5
        BLE     6
        CLRB    PVAD+1000(R5)
        CLRB    PVAD+1100(R5)
        DECB    (R3)+
        MOVB    CNTDLP,(R3)
6:
; channel power
EQC:    MOV     #VARPRT+260,R1
        MOV     #VARPRT+263,R5
        MOV     #PVOL,R2
        CALL    2(PC)
        MOV     PC,-(SP)
;это безинерционная шкала
        MOVB    (R1)+,R3
        BITB    #20,R3
        BEQ     3
        MOV     #17,R3
        COM     (PC)+
        .WORD   0
        BNE     3
        MOV     #10,R3
        COM     (PC)+
        .WORD   0
        BNE     3
        MOVB    (R5),R3
        ASR     R3
        ASR     R3
3:      BIC     #177760,R3
        MOV     R3,-(SP)

        MOV     (R2),R4
        MOV     R3,(R2)+
        MOV     (R2),R0
        SUB     R3,R4
        BEQ     020
        MOV     #100,R3
        BCS     010
00:     ADD     R3,R0
        CLRB    (R0)
        SOB     R4,00
        BR      020
010:    NEG     R4
10:     MOVB    #12,(R0)
        SUB     R3,R0
        SOB     R4,10
020:    MOV     R0,(R2)+
;это инерционная шкала
        MOV     (SP)+,R3
        MOV     (R2),R4 ;старое значение
        MOV     R3,(R2)+ ;обновим
        MOV     (R2),R0 ;это текущий адрес экрана
        CMP     R3,R4
        BEQ     02
        BHI     01
        TST     R4
        BEQ     0
        DEC     R4
        ADD     #100,R0
        CLRB    (R0)
0:      MOV     R4,-2(R2)
        BR      02
01:     SUB     R4,R3
        MOV     #100,R4
1:      MOVB    #74,(R0)
        SUB     R4,R0
        SOB     R3,1
02:     MOV     R0,(R2)+
        RETURN

;вход:  R3 - номер текущей колонки
;       R0 - мл. байт - новое значение амплитуды
DRAWUP: MOV     R3,R4
        ASL     R4
        ASL     R4
        ADD     #TABL,R4
        MOVB    (R4),R5 ;текущее значение
        CMPB    R0,R5	;если новое значение меньше текущего
        BLO     0		;ничего не делаем
        BEQ     5		;если равно текущему - обновляем счётчик
		;если текущее меньше нового - рисуем поднятие уровня
        SWAB    R5		;из текущего значения делаем адрес
        SUB     R3,R5
        SUB     R3,R5
        NEG     R5
2:      SUB     #400,R5
        INCB    (R4)	;повышаем уровень
        MOV     #LINE2,CLKAD(R5)
        MOV     #LINE2,CLKAD+100(R5)
        MOV     #LINE2,CLKAD+200(R5)
        CMPB    (R4),#16
        BLO     3
        MOV     #LINE1,CLKAD(R5)
        MOV     #LINE1,CLKAD+100(R5)
        MOV     #LINE1,CLKAD+200(R5)
3:      CMPB    (R4),R0	;пока не дойдёт до нового значения
        BLO     2
		;формируем максимум
        MOV     R4,R0
        MOV     (R0)+,R5	;берём текущее значение
        CMPB    (R0),R5		;сравниваем
        BHI     5			;текущий максимум больше текущего значения - пропускаем
        MOVB    R5,(R0)+	;обновляем текущий максимум
        MOVB    CNTDLM,(R0)	;задаём длительность
        DECB    R5
        MOVB    R5,(R4)		;а уровень уменьшаем на 1
5:      MOVB    CNTDLY,1(R4)
0:      RETURN

;вход:  R4 - адрес текущей колонки
;       R5 - значение тек. колонки
DRAWDN: MOVB    CNTDLY,-(R4)	;иинциализируем счётчик
        DECB    -(R4)		;уменьшаем значение
        INC     R4
DRWDNM: SWAB    R5			;гасим сегмент
        SUB     R3,R5
        SUB     R3,R5
        NEG     R5
        CLR     CLKAD(R5)
        CLR     CLKAD+100(R5)
        CLR     CLKAD+200(R5)
        RETURN
;            0   1   2   3   4   5   6   7   8   9  10  11  12  13  14  15
PTAB: .BYTE 00.,02.,04.,06.,07.,08.,09.,10.,11.,11.,12.,13.,13.,14.,14.,15.
;           16  17  18  19  20  21  22  23  24  25  26  27  28  29  30
      .BYTE 15.,15.,16.,16.,17.,17.,17.,18.,18.,18.,19.,19.,19.,19.,20.
        .EVEN
PVOL:   .WORD   0,42471,0,42470
        .WORD   0,42473,0,42472
        .WORD   0,42475,0,42474

CW:     .BYTE   0,0,0,0,0
WA:     .BYTE   0,0,0,0,0,0,0,0,0
PL:     .BYTE   0,0
PWRTB:  .WORD   0,0
TABL:   .BLKW   100     ;мл. байт - значение,
                        ;ст. байт -  счетчик

;--------------часть player
OUTPHL: MOV     LPOZ,R5
        CMP     @#134776,R5
        BLO     200
        BR      0OUTP

PHM2:   JSR     R5,@#PUSHA
PHM:    MOV     LPOZ,R5
        DEC     R5
        BPL     0OUTP
200:    MOV     @#134776,R5
        BR      0OUTP
PHP2:   JSR     R5,@#PUSHA
PHP:    MOV     LPOZ,R5
        INC     R5
        CMP     @#134776,R5
        BHIS    0OUTP
        CLR     R5

0OUTP:  MOV     R5,(PC)+
LPOZ:   .WORD   0
        MOV     #67111,R1
        MOV     #4,R4
1:      INC     R5
        MOV     R5,R0
        TRAP    212
        ADD     #775,R1
        MOV     R5,R3
        ASL     R3
        MOV     134776(R3),R0
        MOV     R0,-(SP)
        CLRB    (SP)
        BIC     (SP),R0
        SWAB    (SP)
        TRAP    212
        ADD     #775,R1
        MOV     (SP)+,R0
        TRAP    212
        SUB     #1777,R1
        CMP     R5,@#134776
        BLOS    0
        CLR     R5
0:      SOB     R4,1
2:      RETURN

RAZM:   TST     FLTP
        BNE     0TMP
        MOV     @#134776,R5
        BLE     0TMP
        DEC     R5
        CMP     LPOZ,R5
        BLOS    0RAZ
        DEC     LPOZ
        BR      0RAZ

RAZP:   TST     FLTP
        BNE     0TMP
        MOV     @#134776,R5
        CMP     R5,#377
        BGE     0TMP
        INC     R5
0RAZ:   MOV     R5,@#134776
        CALL    OUTPHL
        JMP     INITPL

TMPM:   CMP     #1,TEMP
        BGE     0TMP
        DEC     TEMP
        BR      OUTTMP
TMPP:   CMP     #17,TEMP
        BLE     0TMP
        INC     TEMP
OUTTMP: MOV     #74041,R1
        MOV     TEMP,R0
        MOV     R0,@#134772
        CALL    HEXOUT
0TMP:   RETURN

PATM:   TST     LODFIL
        BEQ     03
        TST     FLTP
        BEQ     0PATM
        SUB     #4,CURATR
        ADD     #2,NUMRAZ
        CMP     CURATR,BGNATR
        BHIS    04
        BR      05

PATEND: TST     LODFIL
        BEQ     03
        TST     FLTP
        BEQ     0PATEN
05:
ENDATR: MOV     #0,CURATR
        MOV     #1,NUMRAZ
        BR      04

PATP:   TST     LODFIL
        BEQ     03
        TST     FLTP
        BEQ     0PATP
        BR      04

PATBGN: TST     LODFIL
        BEQ     03
        TST     FLTP
        BEQ     0PATBG
PATINI: MOV     BGNATR,CURATR
        MOV     BNUMR+2,NUMRAZ
04:     MOV     #L1226,VARPRT+52
03:     RETURN

0PATM:  MOV     CURATR,R1
        CMP     -(R1),-(R1)
        ADD     #2,NUMRAZ
        CMP     R1,BGNATR
        BHIS    02
0PATEN: MOV     ENDATR+2,R1
        MOV     #1,NUMRAZ
        BR      02

0PATP:  MOV     CURATR,R1
02:     CLR     R0
        BISB    (R1)+,R0
        MOVB    (R1)+,R2
        DEC     NUMRAZ
        BPL     01
0PATBG: MOV     BGNATR,R1
        MOV     BNUMR+2,NUMRAZ
        BR      02
01:     MOV     R2,HEIGHT
        MOV     R1,CURATR
        MOV     R0,-(SP)
        MOV     #64667,R1
        TRAP    212
        MOV     BNUMR+2,R0
        SUB     NUMRAZ,R0
        MOV     #63667,R1
        TRAP    212
        MOV     (SP)+,R0
        ASL     R0
        ASL     R0
        ADD     BGNONA,R0
        MOV     (R0)+,R1
        MOV     #VARPRT,R5
        CALL    2(PC)
        MOV     PC,-(SP)
        CLR     (R5)
        MOV     R1,52(R5)
        ADD     (R0),R1
        ADD     #70,R5
        RETURN

;блок проигрывания от Rock Mon
;ПРОИГРЫВАНИЕ НОТНЫХ ТЕКСТОВ с адреса 100000

PLAY:   CALL    L2116
        ADD     #15,R3
        MOV     #363,R2
        MOV     #177714,R5
0:      MOV     R2,(R5)
        MOVB    -(R3),R0
        COM     R0
        MOVB    R0,(R5)
        INCB    R2
        BMI     0
        RETURN

;деление
;вход:  R1 - делимое
;       R2 - делитель
;выход: R1 - целая часть
;       R3 - остаток
DIVIDE: CLR     R3
        MOV     #20,R0
1:      ASL     R1
        ROL     R3
        CMP     R3,R2
        BLO     0
        SUB     R2,R3
        INC     R1
0:      SOB     R0,1
        BIC     #140000,R1
        TST     R4
        RETURN

;чтение очередной ноты в голосе
GETNOT: MOVB    (PC)+,(R5)
TEMP:   .WORD   0
L1204:  MOV     52(R5),R4
        MOVB    (R4)+,R1        ;берем первый байт
        CMPB    (PC)+,R1        ;конец паттерна?
L1226:  .WORD   377
        BNE     0               ;нет
        MOV     (PC)+,R1        ;да
CURATR: .WORD   0               ;текущий адрес в таблице разделов
L1236:  CLR     R0
        BISB    (R1)+,R0        ;номер следующего паттерна
        MOVB    (R1)+,R2
        DEC     (PC)+
NUMRAZ: .WORD   0
        BPL     1
        ;а паттерны то кончились
        MOV     (PC)+,R1        ;тогда - начнем сначала
BGNATR: .WORD   0
BNUMR:  MOV     #0,NUMRAZ
        TST     (PC)+
CYCLE:  .WORD   377
        BNE     L1236
        BIT     (SP)+,(SP)+
        CLR     FLTP
        JMP     PATINI

1:      MOV     R2,HEIGHT       ;высота паттерна
        MOV     R1,CURATR
        MOV     R0,-(SP)
        MOV     #64667,R1
        CALL    OUT10
        MOV     BNUMR+2,R0
        SUB     NUMRAZ,R0
        MOV     #63667,R1
        CALL    OUT10
        MOV     (SP)+,R0
        ASL     R0              ;умножаем номер паттерна на 4
        ASL     R0
        ADD     (PC)+,R0        ;адрес начала таблицы адресов
BGNONA: .WORD   0               ;паттернов
        MOV     (R0)+,R1
        MOV     R1,52(R5)       ;адрес голоса A
        ADD     (R0),R1
        MOV     R1,142(R5)      ;адрес голоса B
        ADD     (R0),R1
        MOV     R1,232(R5)      ;адрес голоса C
        BR      L1204

0:      MOVB    (R4)+,R0        ;атрибуты ноты
        ASLB    R1              ;бит 7 → в бит 0 атрибутов
        ADCB    R0
        RORB    R1
        BEQ     2               ;если 0,то пауза
        CMPB    #176,R1         ;отсутствует нота?
        BNE     3
;обработка отсутствия ноты
        CLR     60(R5)
        BR      4

3:      CLR     R2
        BISB    (R4),R2
        MOV     R2,R3
        BIC     #360,R2 ;тут громкость
        BIC     R2,R3   ;тут номер сэмпла
        TSTB    R0      ;что это, нота или волпак
        BMI     5
        ;волпак
        MOVB    (PC),62(R5)
        BITB    #100,R0 ;форма пакета есть?
        BNE     13
;обработка формы пакета в R2
        COMB    R2
        MOVB    R2,55(R5)
13:     MOV     #362,@#177714
        MOVB    55(R5),@#177714 ;устанавливаем форму пакета

        BITB    #1,R0  ;период пакета есть?
        BNE     12
        MOVB    1(R4),56(R5)    ;период пакета
        BR      12

5:      ;нота
        CLRB    62(R5)
        MOVB    66(R5),60(R5)
        BITB    #100,R0 ;громкость есть?
        BNE     10
;обработка громкостей в R2
        SUB     #17,R2
        NEG     R2
        MOVB    R2,57(R5)       ;громкость - это 17-value

10:     BITB    #1,R0 ;длительность есть?
        BNE     12
;обработка длительностей ноты
        MOVB    1(R4),R2
        BICB    #360,R2
        ASLB    R2
        MOVB    R2,66(R5)
        MOVB    R2,60(R5)

12:     BITB    #40,R0 ;номер сэмпла есть?
        BNE     11
;обработка номеров сэмплов в R3
        ASL     R3              ;умножим номер сэмпла на 100
        ASL     R3
        ADD     (PC)+,R3        ;прибавим адрес начала сэмплов
BGNASA: .WORD   0
        MOV     R5,R2
        CMP     (R2)+,(R2)+
        MOV     R3,(R2)+        ;адрес сэмпла
        MOVB    (R3)+,(R2)+     ;начало зацикливания для громкости
        MOVB    7(R3),(R2)+     ;начало зацикливания для шума
        MOVB    1(R3),(R2)+     ;начало зацикливания для тона
        MOVB    (R3)+,(R2)+     ;конец зацикливания для громкости
        MOVB    7(R3),(R2)+     ;конец зацикливания для шумп
        MOVB    1(R3),(R2)      ;конец зацикливания для тона
        BICB    #200,(R2)
;обработка значения нот
11:     DEC     R1
        ADD     (PC)+,R1        ;прибавим высоту паттерна
HEIGHT: .WORD   0               ;высота проигрыша всего паттерна
        SWAB    R1
        CLRB    R1
        MOV     R1,42(R5)
        MOVB    #-1,1(R5)
        MOV     #-1,2(R5)
        BR      6

;обработка паузы
2:      CLR     60(R5)
        TSTB    42(R5)
        BNE     4
        DECB    42(R5)
        MOV     R5,R3
        INC     R3
        MOVB    11(R5),(R3)+
        MOVB    12(R5),(R3)+
        MOVB    13(R5),(R3)
6:      CLR     14(R5)
        CLRB    44(R5)
4:      TST     (R4)+
        MOV     R4,52(R5)
        RETURN

L1700:  MOV     R0,R3
        INC     R3
        CLR     R4
        SEC
1:      ROL     R4
        SOB     R3,1
        MOV     4(R5),R3
        ADD     R3,R0
        RETURN

;работа с длительностями звучания, сюда попадает длит*16
;результат:
;0 -0; 1 -1; 2 -5; 3 -9; и т.д.
L1724:  ASR     R2
        ASR     R2
        BEQ     0
        SUB     #3,R2
0:      ADD     60(R5),R2
        RETURN

L1744:  BIT     R4,R3
        BNE     00
        BISB    R0,VARPRT+257
        BR      0
00:     BICB    R0,VARPRT+257   ;адрес смесителя
0:      CALL    L1724
        MOVB    R1,23(R5)
        TST     R3              ;огибающую изменять плавно?
        BMI     1
        MOVB    R1,21(R5)       ;нет
        RETURN

1:      MOVB    21(R5),R0       ;да - плавное изменение
        CLR     R4
        SUB     R0,R1
        BPL     2
        NEG     R1
        INC     R4
2:      SWAB    R1
        CALL    DIVIDE
        BEQ     3
        NEG     R1
3:      MOV     R1,16(R5)
        RETURN

L2042:  INC     R4
        INCB    (R4)
        MOVB    (R4),R0
        TSTB    42(R5)
        BNE     0
        CMPB    10(R4),R0
        BHIS    0
        MOVB    5(R4),R0
        MOVB    R0,(R4)
0:      CMPB    R0,#15
        BLO     1
        DECB    (R4)
1:      RETURN

        .ASCII  " Song player by (c) GID "
        .EVEN

L2116:  MOV     #VARPRT,R5
        CLRB    VARPRT+265      ;адрес формы волпака
        CALL    2(PC)
        MOV     PC,-(SP)
        DECB    (R5)
        BGT     0
        CALL    GETNOT
0:      DECB    14(R5)
        BPL     1
;достаем из сэмпла новую громкость и ее длительность
        MOV     R5,R4
        CLR     16(R5)
        CALL    L2042
        BCS     2
        CLR     20(R5)
        BR      1

2:      CALL    L1700
        MOV     4(R3),R3
        CLR     R1
        BISB    46(R0),R1
        MOV     R1,R2
        BIC     #360,R1
        BIC     R1,R2
        MOVB    63(R5),R0
        CALL    L1744
        MOVB    R2,14(R5)
1:      DECB    15(R5)
        BPL     3
;достаем из сэмпла новый уровень шума и его длительность
        MOV     R5,R4
        INC     R4
        CLR     24(R5)
        CALL    L2042
        BCC     3
        CALL    L1700
        CLR     R1
        BISB    63(R0),R1
        MOV     R1,R2
        BIC     #340,R1
        BIC     R1,R2
        BIT     12(R3),R4
        BEQ     4
        BIS     #20,R2
4:      MOV     6(R3),R3
        MOVB    64(R5),R0
        ADD     #6,R5
        CALL    L1744
        ADD     #-6,R5
        MOVB    R2,15(R5)
3:      DECB    44(R5)
        BPL     5
;достаем из сэмпла новый тон и его длительность
        MOV     R5,R4
        TST     (R4)+
        CLR     32(R5)
        CLR     34(R5)
        CALL    L2042
        BCC     5
        ASL     R0
        MOV     4(R5),R3
        ADD     R3,R0
        MOV     14(R0),R2
        MOV     R2,R4
        MOV     #2000,R0
        BIC     #176000,R4
        BIT     R0,R2           ;минус?
        BEQ     6
        BIS     #176000,R4      ;да
6:      MOVB    43(R5),R1
        ASL     R0
        BIT     R0,R2           ;изменение в полутонах?
        BEQ     7               ;нет
        ADD     R4,R1           ;да - просто прибавим
        BPL     8               ;и проконтролируем
        CLR     R1              ;чтоб не вылезло
        BR      7
8:      CMP     #140,R1         ;за пределы
        BHI     7
        MOV     #137,R1
7:      ASL     R1
        MOV     NOTCLK(R1),R1   ;получим частоту
        BIT     R0,R2           ;снова проверим: изменение в полутонах??
        BNE     9               ;да пойдем туда
        SUB     R4,R1           ;отнимем значение от частоты
        BPL     9
        CLR     R1
9:      SWAB    R2
        BIC     #177417,R2      ;получим длительность * 16
        CALL    L1724
        MOVB    R2,44(R5)
        MOV     R1,50(R5)
        TST     2(R3)           ;ноту менять плавно?
        BMI     10
        MOV     R1,40(R5)       ;нет
        BR      5

10:     CLR     R4              ;плавное изменение ноты
        SUB     40(R5),R1
        BPL     11
        NEG     R1
        INC     R4
11:     CALL    DIVIDE
        BEQ     12
        NEG     R1
        DEC     R1
12:     MOV     R1,34(R5)
        MOV     #10,R0
        CLR     R1
14:     ASL     R1
        ASL     R3
        CMP     R3,R2
        BLO     13
        SUB     R2,R3
        INC     R1
13:     SOB     R0,14
        TST     R4
        BEQ     15
        NEG     R1
15:     MOVB    R1,33(R5)

5:      MOV     #VARPRT+250,R3   ;начало снимка памяти для сопра
        MOVB    65(R5),R4       ;смещение до регистра амплитуды
        ADD     R3,R4
        MOV     R5,R0
        ADD     #16,R0
        ADD     (R0)+,(R0)+     ;прибавляем к текущей амплитуде значение для плавного изменения
        TSTB    14(R5)          ;а надо ли плавно изменять?
        BNE     16
        MOV     (R0),-2(R0)     ;нет - сразу подставляем конечный результат
16:     MOVB    21(R5),R1
        TSTB    62(R5)
        BEQ     17
        TSTB    R1
        BEQ     18
        BISB    64(R5),VARPRT+257 ;адрес смесителя
        MOVB    56(R5),VARPRT+263 ;адрес периода волпака
        MOVB    #20,(R4)
        BR      191

17:     MOVB    57(R5),R2
        SUB     R2,R1
        BPL     18
        CLR     R1
18:     MOVB    R1,(R4)         ;формируем амплитуду в канале
191:    TSTB    54(R5)
        BNE     19
        CLRB    (R4)
19:     MOVB    63(R5),R4       ;смещение до регистра частоты
        ADD     R3,R4
        MOV     R5,R2
        ADD     #36,R2
        TST     (R0)+
        ADD     (R0)+,(R0)+
        TSTB    15(R5)
        BNE     20
        MOV     (R0),-(R0)
20:     BITB    64(R5),VARPRT+257 ;адрес смесителя
        BNE     21
        MOVB    27(R5),VARPRT+256 ;адрес уровня шума

21:     ADD     32(R5),(R2)+
        ADC     (R2)
        ADD     34(R5),(R2)
        TSTB    44(R5)
        BNE     22
        MOV     50(R5),(R2)
22:     MOV     (R2),(R4)
        CLR     60(R5)
        ADD     #70,R5
        RETURN

INITPL: CALL    RESAY
        MOVB    #377,VARPRT+257 ;адрес смесителя
        MOV     #134772,R5
        MOV     (R5)+,TEMP
        CALL    OUTTMP
        MOV     (R5)+,R0  ;число паттернов
        MOV     #64673,R1
        TRAP    212
        MOV     (R5)+,R0 ;число разделов
        MOV     R0,R1
        ASL     R1
        MOV     R1,ENDATR+2
        INC     R0
        MOV     R0,NUMRAZ
        MOV     R0,BNUMR+2
        MOV     #63673,R1
        MOV     R0,-(SP)
        TRAP    212
        MOV     (SP)+,R0
        MOV     #74123,R1
        TRAP    212
        ADD     R5,ENDATR+2
        MOV     R5,BGNATR       ;это начало
        MOV     R5,CURATR       ;списка разделов
        MOV     #133000,BGNONA  ;это начало таблицы адресов
                                ;паттернов
        MOV     #136000,R0
        MOV     R0,BGNASA  ;это начало сэмплов
        MOV     #VARPRT,R5
        MOV     #L1226,R4
        MOV     R4,52(R5)
        CALL    2(PC)
        MOV     PC,-(SP)
        CLR     (R5)
        MOV     R0,4(R5)
        MOV     #20,57(R5)
        ADD     #70,R5
        RETURN

NOTCLK: .WORD   7370,7020,6540,6200,5730,5450,5210,4760
        .WORD   4540,4340,4130,3740
        .WORD   3574,3410,3260,3100,2754,2624,2504,2370
        .WORD   2260,2160,2054,1760
        .WORD   1676,1604,1530,1440,1366,1312,1242,1174
        .WORD   1130,1070,1026,770
        .WORD   737,702,654,620,573,545,521,476
        .WORD   454,434,413,374
        .WORD   357,341,326,310,275,262,250,237
        .WORD   226,216,205,176
        .WORD   167,160,153,144,136,131,124,117
        .WORD   113,107,102,77
        .WORD   73,70,65,62,57,54,52,47,45,43,41,37
        .WORD   35,34,32,31,27,26,25,23,22,21,20,17

;начало переменной части на каждый канал по 70 байтов
VARPRT: .WORD   0,0,0,0
        .WORD   0,0,0,0
        .WORD   0,0,0,0
        .WORD   0,0,0,0
        .WORD   0,0,0,0
CHA:    .WORD   0,0,377,0
        .WORD   0,400,4010,0

        .WORD   0,0,0,0
        .WORD   0,0,0,0
        .WORD   0,0,0,0
        .WORD   0,0,0,0
        .WORD   0,0,0,0
CHB:    .WORD   0,0,377,0
        .WORD   0,1000,4420,0

        .WORD   0,0,0,0
        .WORD   0,0,0,0
        .WORD   0,0,0,0
        .WORD   0,0,0,0
        .WORD   0,0,0,0
CHC:    .WORD   0,0,377,0
        .WORD   0,2000,5040,0

        .WORD   0,0,0,0,0,0,0

EDSEQ:  TST     FLTP
        BNE     11
        MOV     #70111,R5
        MOV     @#MYG,R2
        SUB     R1,R2     ;dY
        MOV     R2,R3
        BIC     #17,R2
        BNE     10
        ADD     #10,R1
10:     ADD     R1,R2     ;Yout
        SUB     #14,R2
        MOV     R2,PWDCH+2

        ASR     R3
        ASR     R3
        ASR     R3
        ASR     R3        ;numY
        BEQ     1
        ADD     #1000,R5
1:      MOV     @#MXG,R1
        SUB     R0,R1     ;dX
        MOV     R1,R2
        BIC     #17,R1
        ADD     R0,R1     ;Xout
        ADD     #14,R1
        MOV     R1,PWDCH

        ASR     R2
        ASR     R2
        ASR     R2
        ASR     R2        ;numX
        MOV     R2,R0
        BEQ     2
3:      BIT     (R5)+,(R5)+
        SOB     R2,3
2:      MOV     R5,(PC)+
DATADR: .WORD   0

        ADD     LPOZ,R0
        CMP     R0,@#134776
        BLOS    0
        SUB     @#134776,R0
        DEC     R0
0:      ASL     R0
        ADD     #135000,R0
        ADD     R3,R0
        MOV     R0,(PC)+
DATA:   .WORD   0 ;адрес чего изменяем
        TRAP    203
        .WORD   PWDCH,0,PBDCH
4:      TRAP    214
        .WORD   PBDCH
        BVS     4
        TRAP    207
DRPHL:  TRAP    270
        CALL    OUTPHL
        TRAP    272
11:     RETURN

PWDCH:  .WORD   0,0,18.,35.
PBDCH:  .BYTE   121,32
        .WORD   DATAUP
        .BYTE   6,6,12.,17.
        .WORD   UPST
        .BYTE   121,33
        .WORD   DATADN
        .BYTE   6,17.,12.,28.
        .WORD   DNST
        .WORD   EOREC

DATAUP: INCB    @DATA
        BR      00
DATADN: DECB    @DATA
00:     CLR     R0
        BISB    @DATA,R0
        MOV     DATADR,R1
        TRAP    212
        RETURN

SAED:   TST     FLTP
        BNE     0
        MOV     @#CCM,-(SP)
        MOV     #14000,@#CCM
        CALL    @#BPOFF
        CALL    @#100000
        MOV     (SP)+,@#CCM
        CALL    @#BPOFF
0:      RETURN

;часть инициализации, нужна только в начале
BEGIN:  MOV     #1000,SP
        MTPS    SP
        MOV     #DISTRP,@#34
        MFPS    @#36

        CALL    SETBPG
        MOV     #110400,R2
        MOV     #BGNMVF,R1
        MOV     #ENDMVF-BGNMVF,R0
2:      MOVB    (R1)+,(R2)+
        SOB     R0,2
        JMP     START
        .END



