OFSF8=400
SYNCW=55000
SCRCRD=160
SCRY=156
SCRFNT=166
SCRLNC=164
LNGTST=400
DECBUF=410
	.asect
	.=1000
BEG:    MTPS    #340
        MOV        #4,R4
        MOV        #PZP1,(R4)+
        MFPS    (R4)
        MOV        #177716,R5
        MOV        #500,R2
        MOV        #60,(R2)
        MOV        #42400,@#177662
        MOV        #100140,(R2)
        MOV        #16000,(R5)
PZP1:    CLR        R1
        MOV        (PC),R0
        MOV        #177130,R3
4$:    	MOV        R4,(R3)
        MOVB    (PC),(R5)
        MOV        (R2),(R3)
        MOV        R1,(R3)
        MOVB    (PC),(R5)
        MOV        #1000,SP
        SOB        R0,4$
TESTS:    CALL    SETLNT
        MOV        #100,@#177660
        MOV        #DISTRP,@#34
        MFPS    @#36
        TRAP    0
        TRAP    40
        MOV        #TTL,R3
        TRAP    20
        CALL    DETECT
        TST        VALUE1
        BEQ        MEMTS1
        BMI        MEMTS1
        JMP        STOPT
MEMTS1:    MOV        #TZPREP,R3
        TRAP    20
        CLR        R5
        MOV        #TRST11,@#4
        MOV        #123456,R4
        BR        OTR3
OTR2:    TST        (R5)+
OTR3:    CLR        PGEERR(R5)
        MOV        @#502,R2
        MOV        RAMCOD(R5),R1
        BEQ        MEMTS2
        MOV        #'.,R0
        TRAP    16
        MOV        R1,R0
        TRAP    2
        MOV        R0,R1
        MOV        #1,R3
        MOV        R2,R0
        CMP        (R0)+,R4
        BEQ        1$
        NOP
        INC        R3
        MOV        R4,(R2)+
        BR        2$
        NOP
        BR        OTR2
2$:        MOV        #17777,R0
3$:        MOV        R1,(R2)+
        SOB        R0,3$
        BR        4$
        BR        OTR2
4$:
        MOV        R4,R2
        MOV        R2,(R2)
        NOP
        BR        8$
        BR        9$
8$:        MOVB    R2,1(R2)
        NOP
        BR        10$
        BR        9$
10$:    CMP        #27056,(R2)
        BEQ        OTR2
        NOP
9$:        BIS        #10,PGEERR(R5)
        BR        OTR2
1$:        BIS        #100000,PGEERR(R5)
        BR        OTR2
TRST21:    BIT        (SP)+,(SP)+
        CLR        R1
        BR        HLT
MEMTS2:    CLR        VALUE1
        MOV        #TRST21,@#4
        MOV        #TZDOZU,R3
        TRAP    20
        CLR        R5
        CLR        R1
NEXT1:    MOV        RAMCOD(R5),R0
        BEQ        END0
        TRAP    22
        MOV        #40,R0
        TRAP    16
        MOV        PGEERR(R5),R4
        BPL        1$
        MOV        R1,-(SP)
        MOV        RAMCOD(R5),R0
        TRAP    2
        MOV        R0,R1
        MOV        #TZ2US1,R3
        TRAP    20
        TRAP    24
        MOV        #TZ2US2,R3
        TRAP    20
        MOV        @#502,R1
        MOV        2(R1),R1
HLT:    TRAP    24
        MOV        (SP)+,R1
        BR        NEXT0
1$:        BIT        #1,R4
        BEQ        2$
        MOV        #TZ3RD,R3
        TRAP    20
        MOV        #TZ3HL,R3
        TRAP    20
2$:        BIT        #2,R4
        BEQ        7$
        MOV        #TZ3WR,R3
        TRAP    20
        MOV        #TZ3HL,R3
        TRAP    20
7$:        BIT        #10,R4
        BEQ        NEXT0
        MOV        #TZ3BY,R3
        TRAP    20
NEXT0:    MOV        #TZ2ERC,R3
        TST        R4
        BNE        5$
        MOV        #6,R2
        TRAP    14
        BR        6$
5$:        TRAP    20
        BMI        4$
6$:        ADD        #16.,R1
4$:        TST        (R5)+
        CMP        R5,TZCN
        BLO        NEXT1
END0:    TRAP    22
        CALL    TSTHDD
        CALL    TSTHDR
        CALL    TSTRST
        CALL    TSTBT2
        CALL    TSTBT3
TREZ:    CALL    MEMTS4
        MOV        #7,ZN
        TRAP    40
        MOV        #TRZINF,R3
        TRAP    20
        CLR        ERCOD
        CMPB    @#167777,#374
        BLO        1$
        CMPB    @#167776,#300
        BHIS    1$
        MOV        #240,SMKCON
1$:        MOV        #REZ,R5
        MOV        TZCODS,R4
        MOV        #SYNCW,R2
        MOV        #AH,@#4
        MOV        #277,-(SP)
Z1:        MOV        @#500,R0
        BPL        10$
        TRAP    4
        MOV        #100000,R1
        MOV        #20000,R0
12$:    CLR        (R1)+
        SOB        R0,12$
10$:    MOVB    (R5),R1
        TRAP    24
        MOV        #':,R0
        TRAP    16
        CLR        VALUE1
        MOV        #100172,R3
Z2:        MOV        R3,TZADDR
        MOV        #1003,ZC
        MOVB    (R5),R0
        BNE        7$
        TST        @#500
        BMI        7$
        CMP        R3,#120000
        BHIS    7$
        MOV        #240,ZC
7$:        MOV        R0,TZMODE
        TRAP    4
        CMP        R3,#177172
        BEQ        2$
        INCB    (SP)
        BEQ        ZE
2$:        CLR        R0
        CMP        R2,(R3)
ZC:        BNE        3$
        BEQ        4$
        CMP        (R0)+,(R0)+
4$:        CMP        (R0)+,(R0)+
3$:        MOV        R3,(R3)
        CMP        R2,(R3)
        BEQ        6$
        NOP
        MOV        R2,(R3)
        CMP        R2,(R3)
        BR        5$
        BR        1$
5$:        BNE        6$
        INC        R0
6$:        INC        R0
1$:        CMP        R0,#11
        BNE        7$
        CMPB    (SP),#327
        BNE        7$
        DEC        R0
7$:        CMPB    (SP),#366
        BNE        SMKCON
        CMP        R0,#4
        BNE        SMKCON
        TST        (R0)+
SMKCON:    BR        70$
        CMP        R3,#170172
        BNE        70$
        CMPB    (SP),#307
        BEQ        70$
        SUB        #1000,R3
        MOV        #6,R1
        BR        3$
70$:        MOVB    (R4)+,R1
3$:        CMPB    R0,R1
        BEQ        2$
        MOVB    R0,TRCODE
        MOVB    R1,TRCODE+1
        CALL    TRERR
        INC        VALUE1
        INC        ERCOD
2$:        ADD        #10000,R3
        BMI        Z2
        INC        R5
        TST        VALUE1
        BNE        8$
        MOV        #TROK,R3
        TRAP    20
8$:        TRAP    12
        DEC        (PC)+
ZN:        .WORD    7
        BPL        Z1
ZE:        TST        ERCOD
        BEQ        11$
        MOV        #ERINFO,R3
        TRAP    20
11$:
TREZ2:    TRAP    40
        CMPB    @#167777,#374
        BLO        0MEMTS
        MOV        #TRSWPG,R3
        TRAP    20
        MOV        #TRST31,@#4
        MOV        #SWREZ,R4
70$:        MOV        R4,-(SP)
        CALL    MEMTS4
        MOV        (SP)+,R4
        MOVB    (R4)+,R0
        TSTB    (R4)
        BMI        MEMTS3
        MOV        R0,R1
        TRAP    4
        TRAP    24
        MOV        #"->,R0
        TRAP    16
        SWAB    R0
        TRAP    16
        MOVB    (R4),R0
        MOV        R0,TZMODE
        MOV        R0,R1
        TRAP    4
        TRAP    24
        TRAP    12
        TST        R1
        BNE        1$
        MOV        #TRSKIP,R3
        TRAP    20
        BR        70$
1$:        MOV        @#502,R2
        MOV        #20000,R5
        CALL    SYNCTS
        TRAP    12
        BR        70$
MEMTS3:    CALL    MEMTS4
0MEMTS:    MOV        #TZERRS,R3
        TRAP    20
        MOV        #MEMTST,R4
        CALL    MEMSSS
        CALL    MEMTS4
        MOV        #TZEST2,R3
        TRAP    20
        MOV        #MEMTSU,R4
        CALL    MEMSSS
        SOB        R3,.
        SOB        R3,.
        SOB        R3,.
        SOB        R3,.
CRCCHK:    TRAP    40
        MOV        #4,R4
        MOV        #STOPT,(R4)
        MOV        #CRCINF,R3
        TRAP    20
        TRAP    6
        TRAP    20
        CALL    CRC
        MOV        R0,R5
2$:        MOV        #4,R1
        CLR        R2
1$:        ROL        R0
        ROL        R2
        SOB        R1,1$
        ADD        #101,R2
        MOVB    R2,(R3)+
        SOB        R4,2$
        CMP        -(R3),-(R3)
        TRAP    20
3$:        MOV        #12,R4
4$:        CALL    CRC
        CMP        R5,R0
        BNE        5$
        SOB        R4,4$
        TRAP    20
        TST        -(R3)
        BR        3$
5$:        CLR        R0
        CALL    ERRR0
        SOB        R0,.
        BR        3$
TRST11:
        BIS        R3,PGEERR(R5)
AH:
        ADD        #4,(SP)
        RTI
MEMSSS:    MOV        #TRST31,@#4
        CLR        R1
NEXT32:    MOV        RAMCOD(R1),R0
        BEQ        END31
        TST        PGEERR(R1)
        BMI        NEXT31
        MOV        @#502,R2
        MOV        #20000,R5
        TRAP    2
        MOV        R0,TZMODE
4$:        CALL    KEYPRS
        BEQ        4$
        CALL    SYNCTS
        CALL    MEMTSS
NEXT31:    TST        (R1)+
        CMP        R1,TZCN
        BLO        NEXT32
END31:    RETURN
SYNCTS:    CALL    MTINF2
        MOV        R1,-(SP)
        MOV        R5,R1
        MOV        R2,R3
        MOV        #SYNCW,R0
        MOV        R0,ERT31
2$:        CALL    KEYPRS
        BEQ        SKIP0
        CLR        VALUE1
        CMP        R0,(R3)
        BEQ        1$
        TST        VALUE1
        BNE        1$
        CALL    EROUT2
1$:        INC        R3
        INC        R3
        SOB        R1,2$
SKIP0:    CALL    KEYPRS
        BEQ        SKIP0
        MOV        (SP)+,R1
        RETURN
        
TRST31:    CALL    EROUT1
TRST30:    RTI
MEMTSS:    MOV        #2,R3
        CLR        R0
1$:        COM        R0
        CALL    (R4)
        COM        R0
        CALL    (R4)
        SOB        R3,1$
        MOV        #16.,R3
        INC        R0
2$:        CALL    (R4)
        ASL        R0
        SOB        R3,2$
        TST        (R3)+
3$:        CLR        R0
        CALL    (R4)
        COM        R0
        CALL    (R4)
        SOB        R3,3$
        MOV        #16.,R3
        DEC        R0
4$:        CALL    (R4)
        SEC
        ROL        R0
        SOB        R3,4$
        TST        (R3)+
5$:        CALL    (R4)
        COM        R0
        CALL    (R4)
        COM        R0
        SOB        R3,5$
        MOV        #16.,R3
6$:        CALL    (R4)
        CLC
        ROR        R0
        SOB        R3,6$
        MOV        #16.,R3
7$:        CALL    (R4)
        SEC
        ROR        R0
        SOB        R3,7$
        TST        (R3)+
8$:        CALL    (R4)
        COM        R0
        CALL    (R4)
        COM        R0
        SOB        R3,8$
        TST        @#LNGTST
        BEQ        10$
9$:        MOV        #-1,R0
        CALL    RANDOM
        CALL    (R4)
        SOB        R3,9$
10$:    RETURN
MEMTST:    MOV        R3,-(SP)
        MOV        R4,-(SP)
        TRAP    32
        MOV        R5,R4
        MOV        R2,R3
1$:        CALL    KEYPRS
        BEQ        MSKIP
        CLR        VALUE1
        CLR        ERT31
        MOV        R0,(R3)
        INC        ERT31
        CMP        R0,(R3)
        BEQ        70$
        TST        VALUE1
        BNE        70$
        CALL    ERROUT
70$:        INC        R3
        INC        R3
        SOB        R4,1$
        BR        0MOUT
MEMTSU:    MOV        R3,-(SP)
        MOV        R4,-(SP)
        TRAP    32
        MOV        R5,R4
        MOV        R2,R3
        CLR        ERT31
1$:        CALL    KEYPRS
        BEQ        MSKIP
        MOV        R0,(R3)
        INC        R3
        INC        R3
        SOB        R4,1$
        MOV        R5,R4
        MOV        R2,R3
        INC        ERT31
2$:        CALL    KEYPRS
        BEQ        MSKIP
        CLR        VALUE1
        CMP        R0,(R3)
        BEQ        70$
        TST        VALUE1
        BNE        70$
        CALL    ERROUT
70$:        INC        R3
        INC        R3
        SOB        R4,2$
0MOUT:    MOV        (SP)+,R4
        MOV        (SP)+,R3
        RETURN
MSKIP:    MOV        (SP)+,R4
        MOV        (SP)+,R3
        TST        (SP)+
        RETURN
ERRR0:    MOV        R3,-(SP)
        MOV        R1,-(SP)
        MOV        R0,-(SP)
        MOV        #TERR,R3
        TRAP    20
        MOV        SP,R3
        TRAP    20
        MOV        (SP)+,R0
        MOV        (SP)+,R1
        MOV        (SP)+,R3
        RETURN
TRERR:
        MOV        TZADDR,R1
        SWAB    R1
        ASR        R1
        ASR        R1
        ASR        R1
        ASR        R1
        BIC        #177760,R1
        MOV        #26440,R0
        TRAP    16
        TRAP    10
        SWAB    R0
        TRAP    16
        MOV        TRCODE,R1
        MOV        R1,-(SP)
        CLRB    (SP)
        BIC        (SP),R1
        TRAP    10
        MOV        #"(),R0
        TRAP    16
        MOV        (SP)+,R1
        SWAB    R1
        TRAP    10
        SWAB    R0
        TRAP    16
        RETURN
MEMTS4:    CLR        R5
        MOV        #SYNCW,R4
        MOV        #TRST30,@#4
11$:    MOV        @#502,R2
        MOV        RAMCOD(R5),R0
        BEQ        10$
        TST        PGEERR(R5)
        BNE        12$
        TRAP    2
        MOV        #20000,R1
13$:    MOV        R4,(R2)+
        SOB        R1,13$
12$:    TST        (R5)+
        CMP        R5,TZCN
        BLO        11$
10$:    RETURN
MTMIN2:    TRAP    24
        MOV        #" -,R0
        TRAP    16
        SWAB    R0
        TRAP    16
        SWAB    R0
        TRAP    16
        MOV        R5,R1
        TRAP    30
        RETURN
MTMIN3:    TRAP    24
        MOV        #TZSYN1,R3
        TRAP    20
        RETURN
MTINFO:    JSR        R5,PUSHA
        MOV        R0,R5
        MOV        TZMODE,R1
        TRAP    34
        BR        EROUE3
MTINF2:    JSR        R5,PUSHA
        MOV        TZMODE,R1
        TRAP    36
EROUE3:    MOV        #15,R0
        TRAP    16
        BR        EROUE2
EROUT2:    JSR        R5,PUSHA
        MOV        TZMODE,R1
        MOV        R3,-(SP)
        TRAP    36
        MOV        (SP),R1
        TRAP    26
        MOV        #':,R0
        TRAP    16
        MOV        @(SP)+,R1
        TRAP    26
        MOV        #TZSYNF,R3
        TRAP    20
        BR        EROUEN
ERROUT:    JSR        R5,PUSHA
        MOV        R0,R5
        MOV        TZMODE,R1
        MOV        (R3),-(SP)
        MOV        R3,-(SP)
        TRAP    34
        MOV        #" :,R0
        TRAP    16
        MOV        (SP)+,R1
        TRAP    26
        SWAB    R0
        TRAP    16
        MOV        (SP)+,R1
        TRAP    30
        BR        EROUEN
EROUT1:    INC        VALUE1
        JSR        R5,PUSHA
        MOV        R0,R5
        MOV        TZMODE,R1
2$:        MOV        R3,-(SP)
        TRAP    34
        MOV        #" :,R0
        TRAP    16
        MOV        (SP)+,R1
        TRAP    26
        SWAB    R0
        TRAP    16
        MOV        #TZ3WR,R3
        TST        ERT31
        BEQ        70$
        MOV        #TZ3RD,R3
70$:        TRAP    20
        MOV        #TZ3HL,R3
        TRAP    20
EROUEN:    MOV        #12,R0
        TRAP    16
EROUE2:    RETURN
SETPGE:    TST        @#500
        BPL        VKL
        BIC        #40,R0
VKL:    MOV        R0,CURMOD
VKL0:    MOV        @#4,VV4BUF
        MOV        #TRST30,@#4
        MOV        R0,@#177716
        MOV        #6,@#177130
        MOV        R0,@#177130
        MOV        #0,@#177130
        CLR        @#177716
        MOV        VV4BUF,@#4
        RETURN
VV4BUF:    .WORD    0
CURMOD:    .WORD    0
VKLSTD:    MOV        R0,-(SP)
        MOV        @#500,R0
        TRAP    4
        MOV        (SP)+,R0
        RETURN
STOPT:    MOV        @#506,@#4
        MOV        #1000,SP
        TRAP    40
        MOV        #ENDTST,R3
        TRAP    20
        TRAP    6
        HALT
ZAGR:    CALL    @#150170
        EMT        0
        EMT        1
        HALT
INIT:    MOV        #500,R1
        MOV        (R1)+,R0
        BPL        2$
        MOV        #100000,(R1)+
        TST        (R1)+
        MOV        #ZAGR,(R1)
        MOV        #16000,@#114
        BR        1$
2$:        MOV        #120000,(R1)+
        TST        (R1)+
        MOV        #100274,(R1)
1$:        TRAP    4
        CALL    SCRINI
        RETURN
EMT6:    CALL    KEYPRS
        BNE        EMT6
        MOVB    @#177662,R0
        RETURN
KEYPRS:    BIT        #100,@#177716
        RETURN
JIRN:    MOV        R2,-(SP)
        MOV        R5,-(SP)
3$:        MOVB    (R3)+,R0
        BEQ        1$
        CMPB    R0,#220
        BGT        4$
        BLT        6$
        MOVB    #277,R0
6$:        MOVB    R0,R2
        CLR        -(SP)
        MOVB    (R3)+,(SP)
        MOV        R3,R5
5$:        MOV        SP,R3
        CALL    JIRN
        DECB    R2
        BMI        5$
        MOV        R5,R3
        TST        (SP)+
        BR        3$
4$:        CALL    PUTCH
        BR        3$
1$:        MOV        (SP)+,R5
        MOV        (SP)+,R2
        RETURN
CURLT:    MOV        #10,R0
7$:        TRAP    16
        SOB        R2,7$
        RETURN
TTIM:    MOV        R2,2(R5)
        MOV        R2,R0
        CALL    (R2)
        MOV        (R5),R0
        RETURN
CRC:    MOV        #160000,R1
        MOV        #4000,R2
        CLR        R0
70$:        ADD        (R1)+,R0
        ADC        R0
        SOB        R2,70$
        RETURN
BINOUT:    JSR        R5,PUSHA
        MOV        #16.,R2
70$:        MOV        #30,R0
        ASL        R1
        ROL        R0
        TRAP    16
        SOB        R2,70$
        RETURN
D6OUT3:    JSR        R5,PUSHA
        MOV     #6,R4
        BR        DGOUT$
D4OUT3:    JSR        R5,PUSHA
        MOV     #4,R4
DGOUT$:    MOV        R4,R5
70$:        MOV     R1,R0
        BIC     #177770,R0
        ADD     #'0,R0
        MOV     R0,-(SP)
        ROR     R1
        ASR     R1
        ASR     R1
        SOB     R4,70$
1$:        MOV     (SP)+,R0
        TRAP    16
        SOB     R5,1$
        RETURN
DECOUT: JSR        R5,PUSHA
        CLR        R5
        MOV        #CONST,R2
6$:        CLR        R0
        MOV        (R2)+,R4
        BEQ        2$
1$:        SUB        R4,R1
        BCS        70$
        INC        R0
        BR        1$
70$:        ADD        R4,R1
        BIS        R0,R5
        BNE        4$
        CMP        #1,R4
        BEQ        4$
        MOV        #-20,R0
4$:        ADD        #'0,R0
        TRAP    16
        BR        6$
2$:        RETURN
DGOUT:    JSR        R5,PUSHA
        MOV     #6,R4
        CLR        R5
70$:        MOV     R1,R0
        BIC     #177770,R0
        ADD     #'0,R0
        MOV     R0,-(SP)
        INC        R5
        ROR     R1
        ASR     R1
        ASR     R1
        BEQ        1$
        SOB     R4,70$
1$:        MOV     (SP)+,R0
        TRAP    16
        SOB     R5,1$
        RETURN
DISTRP:    MOV        (SP),-(SP)
        SUB        #2,(SP)
        MOV        @(SP)+,-(SP)
        BIC        #177401,(SP)
        ADD        #TRPTBL,(SP)
        MOV        @(SP)+,-(SP)
        CALL    @(SP)+
        RTI
TRPTBL:    .WORD    INIT
        .WORD    SETPGE
        .WORD    VKL
        .WORD    EMT6
        .WORD    DGOUT
        .WORD    OUTCR
        .WORD    CURLT
        .WORD    PUTCH
        .WORD    JIRN
        .WORD    DECOUT
        .WORD    D4OUT3
        .WORD    D6OUT3
        .WORD    BINOUT
        .WORD    MTINFO
        .WORD    MTMIN2
        .WORD    MTMIN3
        .WORD    VKLSTD
PUSHA:    MOV        R4,-(SP)
        MOV        R3,-(SP)
        MOV        R2,-(SP)
        MOV        R1,-(SP)
        MOV        R0,-(SP)
        CALL    (R5)
        MOV        (SP)+,R0
        MOV        (SP)+,R1
        MOV        (SP)+,R2
        MOV        (SP)+,R3
        MOV        (SP)+,R4
        MOV        (SP)+,R5
        RETURN
SCRINI:    MOV        #40000,R1
        MOV        R1,R0
        MOV        R1,@#SCRCRD
        CLR        @#SCRY
        CLR        @#SCRLNC
        MOV        #1330,@#177664
1$:        CLRB    (R1)+
        SOB        R0,1$
        MOV        #FONT8,R0
        SUB        #OFSF8,R0
        MOV        R0,@#SCRFNT
        RETURN
OUTCR:    MOV        #12,R0
PUTCH:  JSR        R5,PUSHA
        CALL    VKLSTP
        BIC        #177400,R0
        BITB    #140,R0
        BNE        1$
        MOV        @#SCRCRD,R3
        CMP        #15,R0
        BNE        23$
        BIC        #77,R3
        BR        31$
23$:        CMP        #12,R0
        BNE        21
        BIC        #77,R3
        BR        22$
21$:        CMP        #10,R0
        BNE        20$
        BIT        #77,R3
        BEQ        20$
        DEC        @#SCRCRD
        BR        20$
1$:        TSTB    R0
        BPL        2$
        SUB        #40,R0
2$:        ASL        R0
        ASL        R0
        ASL        R0
        ADD        @#SCRFNT,R0
        MOV        #10,R2
        MOV        @#SCRCRD,R1
        MOV        R1,R3
3$:        MOVB    (R0)+,(R1)
        ADD    #100,R1
        BPL        4$
        SUB        #40000,R1
4$:        SOB        R2,03
5$:        MOV        R3,R1
        MOV        #177700,R0
        BIC        R0,R1
        COM        R0
        CMP        R1,R0
        BHIS    10$
        INC        @#SCRCRD
        BR        20$
10$:        BIC        R0,R3
22$:        INC        @#SCRLNC
        ADD        #1000,R3
        BPL        11$
        SUB        #40000,R3
11$:        MOV        R3,R2
        CMP        @#SCRY,#37
        BHIS    13$
        INC        @#SCRY
        BR        31$
13$:
        MOV        @#177664,R0
        BIC        #177400,R0
        MOV        #10,R1
15$:        MOV        #40,R4
14$:        CLR        (R2)+
        SOB        R4,14
        TST        R2
        BPL        16$
        SUB        #40000,R2
16$:        INCB    R0
        BIS        #1000,R0
        MOV        R0,@#177664
        SOB        R1,15
31$:        MOV        R3,@#SCRCRD
        CMP        @#SCRLNC,#37
        BLT        20$
        MOV        #-1,@#SCRLNC
        MOV        #PRANYK,R3
        CALL    JIRN
32$:        CALL    KEYPRS
        BNE        32$
        TST        @#177662
33$:        CALL    KEYPRS
        BEQ        33$
        CALL    OUTCR
20$:
RETVKL:    MOV        R0,-(SP)
        MOV        CURMOD,R0
        BR        00VKL
VKLSTP:    MOV        R0,-(SP)
        MOV        @#500,R0
00VKL:    CALL    VKL0
        MOV        (SP)+,R0
        RETURN
RANDOM:    MOV        R1,-(SP)
        MOV        R2,-(SP)
        CALL    FRN
        MOV        R0,R1
        CLR        R2
        MOV        RAN,R0
        SEC
3A:        BIC        R2,R0
        ROR        R2
        CMP        R0,R1
        BHI        3A
        MOV        (SP)+,R2
        MOV        (SP)+,R1
        RETURN
FRN:    SWAB    (PC)+
RAN:    .WORD    0
        INCB    RAN
        ROLB    RAN+1
MM:        ADD        #0,RAN
        ADD        #3337,MM+2
        RETURN
DETECT:    TST        @#500
        BPL        20$
        MOV        #140000,R0
        BR        21$
20$:    MOV        #100000,R0
21$:    MOV        #137,@#1000
        MOV        R0,@#1002
        CLR        VALUE1
        CLR        SMKHDD
        MOV        @#167776,R5
        MOV        R5,R0
        CLRB    R0
        BIC        R0,R5
        SWAB    R0
        CMPB    R0,#370
        BLO        70$
        MOV        #CODES,R3
        CLR        R4
2$:        TSTB    (R3)
        BEQ        70$
        CMPB    R0,(R3)+
        BEQ        1$
        INC        R4
        BR        2$
70$:        MOV        #NOALTP,R3
        TRAP    20
        INC        VALUE1
        RETURN
1$:
        MOV        #4,R3
        CMP        R4,R3
        BLO        3$
        CMPB    R5,#300
        BHIS    3$
        COM        SMKHDD
        ADD        R3,R4
3$:        ASL        R4
        MOV        #FOUND,R3
        TRAP    20
        MOV        TZCTB(R4),TZCN
        MOV        NMTBL(R4),R3
        TRAP    20
        MOV        #VERS,R3
        TRAP    20
        MOV        R5,R1
        TRAP    10
        TRAP    12
        CMP        R4,#10
        BLO        15$
        TST        @#500
        BPL        17$
        MOV        #CODS11,TZCODS
        BR        18$
17$:    MOV        #CODS,TZCODS
18$:    MOV        #AH,@#4
        MOV        #100,R0
        MOV        #SYNCW,R2
        MOV        #160172,R3
        CLR        R5
        CALL    DTOLD
        CMP        #4,R0
        BNE        10$
        INC        R5
10$:    MOV        #120,R0
        MOV        #177172,R3
        CALL    DTOLD
        CMP        #11,R0
        BNE        11$
        INC        R5
11$:    MOV        #VERRT,R3
        TRAP    20
        TST        R5
        BNE        12$
        MOV        #RTOK,R3
        BR        14$
12$:    COM        VALUE1
        CMP        #2,R5
        BNE        13$
        MOV        #RTBAD,R3
        BR        14$
13$:    MOV        #RTERR,R3
14$:    TRAP    20
        RETURN
15$:    TST        @#500
        BPL        16$
        MOV        #CODA11,TZCODS
        RETURN
16$:    MOV        #CODA,TZCODS
        RETURN
DTOLD:    MOV        R0,-(SP)
        MOV        #20,R0
        TRAP    4
        MOV        R2,-40000(R3)
        MOV        (SP)+,R0
        TRAP    4
        CLR        R0
        CMP        R2,(R3)
        BNE        3$
        BEQ        4$
        CMP        (R0)+,(R0)+
4$:        CMP        (R0)+,(R0)+
3$:        MOV        R3,(R3)
        CMP        R2,(R3)
        BEQ        6$
        NOP
        MOV        R2,(R3)
        CMP        R2,(R3)
        BR        5$
        BR        1$
5$:        BNE        6$
        INC        R0
6$:        INC        R0
1$:        RETURN
TSTHDD:    TRAP    40
        MOV        #THINFO,R3
        TRAP    20
        TST        SMKHDD
        BNE        0OK
        MOV        #THERR,R3
        TRAP    20
        RETURN
0OK:    MOV        #AH,@#4
        MOV        #REGHDD,R5
        MOV        #377,R4
03$:    MOV        (R5)+,R1
        BEQ        0EX
        TRAP    10
        MOV        #": ,R0
        TRAP    16
        SWAB    R0
        TRAP    16
        MOV        #THRESL,R3
        MOV        R4,(R1)
        BR        00$
        NOP
        BR        01$
00$:    CMP        (R1),R4
        BR        02$
        NOP
        BR        01$
02$:    TST        (R3)+
01$:    TRAP    20
        BR        03$
0EX:    RETURN
REGHDD:    .WORD 177740,177742,177744,177746,177750,177752,177754,177756,177741,177743,0
TSTHDR:    TRAP    40
        MOV        #THINF2,R3
        TRAP    20
        TST        SMKHDD
        BNE        0OK
        MOV        #THERR,R3
        TRAP    20
        RETURN
0OK:    MOV        #30000,R5
        MOV        #3400,R4
        MOV        R5,R1
        MOV        R4,R2
        MOV        #123456,R0
        MOV        #65432,R3
2:        MOV        R0,(R1)+
        XOR        R0,R3
        ROL        R3
        ROR        R0
        ADC        R3
        BCC        1
        SWAB    R0
1:        ROL        R3
        ROR        R0
        ADC        R3
        BCC        0
        SWAB    R3
0:        ADD        R3,R0
        SOB        R2,2
        MOV        #TH4TR,@#4
        MOV        R5,R1
        MOV        R4,R2
        MOV        #170000,R3
        CLR        R0
70$:        MOV        (R1),(R3)+
        ADD        (R1)+,R0
        ADC        R0
        SOB        R2,70$
        MOV        R0,R5
        MOV        #160,R0
        TRAP    4
        SOB        R2,.
        TRAP    40
        MOV        #170000,R1
        MOV        R4,R2
        CLR        R0
1$:        ADD        (R1)+,R0
        ADC        R0
        SOB        R2,1$
        MOV        #THROK,R3
        CMP        R0,R5
        BEQ        2$
        MOV        #THRER,R3
        BR        2$
TH4TR:    BIT        (SP)+,(SP)+
        MOV        #THRERN,R3
2$:        TRAP    20
        RETURN
TSTRST:
        MOV        #TRINFO,R3
        TRAP    20
        CALL    MEMFIL
        TST        @#500
        BMI        011
        MOV        #120,R0
        TRAP    4
        BR        010
011:    MOV        #140,R0
        TRAP    4
        MOV        #16000,@#177716
        MOV        #100000,R1
        MOV        #20000,R0
10$:    CLR        (R1)+
        SOB        R0,10$
010:
        CALL    RDCRD
        RESET
        CALL    RDRES
        MOV        #ADDRSS,R5
        MOV        #DTAB,R4
12$:    MOV        (R5)+,R1
        BEQ        11$
        MOV        #TADDR,R3
        TRAP    20
        TRAP    26
        CMP        DTAA-DTAB(R4),(R4)+
        BNE        13$
        CMP        DTAA-DTAB(R4),(R4)+
        BNE        14$
        MOV        #TANRM,R3
        TRAP    20
        BR        12$
14$:    MOV        -2(R4),R1
        BR        15$
13$:    MOV        (R4),R1
15$:    MOV        #TAERR,R3
        TRAP    20
        TRAP    10
        MOV        #12,R0
        TRAP    16
        BR        12$
11$:    MOV        #TRRSOK,R3
        TST        VALUE1
        BEQ        16$
        MOV        #TRRSER,R3
16$:    TRAP    20
        MOV        #TRRSTL,R3
        TRAP    20
        RETURN
RDRES:    MOV        #DTAA,R2
        BR        0RD
RDCRD:    MOV        #DTAB,R2
0RD:    MOV        #ADDRSS,R1
1:        MOV        (R1)+,R0
        BEQ        0
        MOV        (R0)+,(R2)+
        MOV        (R0)+,(R2)+
        BR        1
0:        RETURN
ADDRSS:    .WORD    100000,120000,140000,160000,0
MEMFIL:    CLR        R5
        MOV        #SYNCW,R4
        MOV        #TRST30,@#4
11$:    MOV        @#502,R2
        MOV        RAMCOD(R5),R0
        BEQ        10$
        TST        PGEERR(R5)
        BNE        12$
        TRAP    2
        MOV        #123456,(R2)+
        MOV        R0,(R2)+
        MOV        #17776,R1
13$:    MOV        R4,(R2)+
        SOB        R1,13$
12$:    TST        (R5)+
        CMP        R5,TZCN
        BLO        11$
10$:    RETURN
TSTBT2:    MOV        #T2INFO,R3
        TRAP    20
        MOV        #TR4T2,@#4
        MOV        #REZ,R5
1$:        MOVB    (R5)+,R0
        BMI        70$
        TRAP    4
        MOV        #4,@#177130
        CLR        VALUE1
        TST        @#177130
        TST        @#177132
        BR        1$
70$:        MOV        #T21,R5
        TST        VALUE1
        BEQ        03
        MOV        #T2OK,R3
        TRAP    20
        MOV        R5,R3
        TRAP    20
        MOV        #T23,R3
        TRAP    20
        RETURN
03:        MOV        #T2ERR,R3
        TRAP    20
        MOV        R5,R3
        TRAP    20
        MOV        #T22,R3
        TRAP    20
        RETURN
TR4T2:    INC        VALUE1
        RTI
TSTBT3:    MOV        #T3INFO,R3
        TRAP    20
        TST        @#500
        BPL        0OK
        MOV        #T3NONE,R3
        TRAP    20
        RETURN
0OK:    CALL    MEMFIL
        MOV        #VALUE1,R3
        CLR        (R3)
        MOV        #TR4T2,@#4
        MOV        #SYNCW,R4
        MOV        #120,R0
        TRAP    4
        MOV        #10,@#177130
        MOV        #120010,R5
        CMP        (R5),R4
        BEQ        70$
        INC        (R3)
70$:        CLR        (R5)
        ADD        #40000,R5
        CMP        (R5),R4
        BEQ        1$
        INC        (R3)
1$:        CLR        (R5)
        MOV        #AH,@#4
        MOV        #140,R0
        TRAP    4
        MOV        #10,@#177130
        MOV        #120020,R5
        TST        (R5)
        INC        (R3)
        NOP
        ADD        #20000,R5
        TST        (R5)
        INC        (R3)
        NOP
        CMP        TZCN,#C128-RAMCOD
        BLO        01
        TST        VALUE1
        BEQ        02
        MOV        #T2ERR,R3
        BR        05
02:        MOV        #T2OK,R3
        BR        04
01:        TST        VALUE1
        BEQ        03
        MOV        #T2OK,R3
05:        TRAP    20
        MOV        #T31+3,R3
        TRAP    20
        RETURN
03:        MOV        #T2ERR,R3
04:        TRAP    20
        MOV        #T31,R3
        TRAP    20
        RETURN
NMTBL:    .WORD    NA16
        .WORD    NA16H
        .WORD    NA16M
        .WORD    NAUNK
        .WORD    NA64M
        .WORD    NA128M
        .WORD    NA256M
        .WORD    NA512M
        .WORD    NS64
        .WORD    NS128
        .WORD    NS256
        .WORD    NS512
CONST:    .WORD    10000.,1000.,100.,10.,1,0
FREQ:    .WORD    2561,2457,2252,177777
TZCODS:    .WORD    CODS11
CODS:    .BYTE    00,00,06,06,06,06,00,00
        .BYTE    00,00,06,06,06,06,00,10
        .BYTE    06,06,06,06,06,06,06,10
        .BYTE    06,06,06,06,06,06,06,04
        .BYTE    00,00,10,10,10,10,00,10
        .BYTE    00,00,10,10,06,06,06,10
        .BYTE    04,06,06,06,06,06,06,11
        .BYTE    10,10,10,10,06,06,06,11
CODS11:    .BYTE    10,10,06,06,06,06,00,00
        .BYTE    10,10,06,06,06,06,00,10
        .BYTE    06,06,06,06,06,06,06,10
        .BYTE    06,06,06,06,06,06,06,04
        .BYTE    02,02,02,02,00,00,00,10
        .BYTE    02,02,02,02,06,06,06,10
        .BYTE    05,06,06,06,06,06,06,11
        .BYTE    02,02,02,02,06,06,06,11
CODA:    .BYTE    00,00,06,06,06,06,00,00
        .BYTE    00,00,06,06,06,06,00,10
        .BYTE    06,06,06,06,10,10,00,10
        .BYTE    04,06,10,10,10,10,10,10
        .BYTE    00,00,10,10,10,10,00,10
        .BYTE    00,00,10,10,06,06,06,10
        .BYTE    04,06,06,06,10,10,00,10
        .BYTE    10,10,10,10,06,06,06,11
CODA11:    .BYTE    10,10,06,06,01,01,00,00
        .BYTE    10,10,06,06,06,06,00,10
        .BYTE    06,06,06,06,00,00,00,10
        .BYTE    04,06,10,10,10,10,10,10
        .BYTE    02,02,02,02,00,00,00,10
        .BYTE    02,02,02,02,06,06,06,10
        .BYTE    05,06,06,06,00,00,00,10
        .BYTE    02,02,02,02,06,06,06,11
REZ:    .BYTE    160,60,120,20,140,40,100,0
SWREZ:    .BYTE    120,20,120,100,20,100,0,20,0,377
TZCN:    .WORD C512-RAMCOD
RAMCOD:    .WORD 160
C016:    .WORD 60
C032:    .WORD 2160
        .WORD 2060
C064:    .WORD 164
        .WORD 64
        .WORD 2164
        .WORD 2064
C128:    .WORD 170
        .WORD 70
        .WORD 2170
        .WORD 2070
        .WORD 174
        .WORD 74
        .WORD 2174
        .WORD 2074
C256:    .WORD 161
        .WORD 61
        .WORD 2161
        .WORD 2061
        .WORD 165
        .WORD 65
        .WORD 2165
        .WORD 2065
        .WORD 171
        .WORD 71
        .WORD 2171
        .WORD 2071
        .WORD 175
        .WORD 75
        .WORD 2175
        .WORD 2075
C512:    .WORD 0
TZCTB:    .WORD    C016-RAMCOD
        .WORD    C016-RAMCOD
        .WORD    C016-RAMCOD
        .WORD    C016-RAMCOD
        .WORD    C064-RAMCOD
        .WORD    C128-RAMCOD
        .WORD    C256-RAMCOD
        .WORD    C512-RAMCOD
        .WORD    C064-RAMCOD
        .WORD    C128-RAMCOD
        .WORD    C256-RAMCOD
        .WORD    C512-RAMCOD
CODES:    .BYTE    370
        .BYTE    371
        .BYTE    372
        .BYTE    373
        .BYTE    374
        .BYTE    375
        .BYTE    376
        .BYTE    377
        .BYTE    0
NA16:    .ASCIZ    "A16"
NA16H:    .ASCIZ    "A16HDD"
NA16M:    .ASCIZ    "A16M"
NAUNK:    .ASCIZ    "Несуществующий"
NA64M:    .ASCIZ    "A64M"
NA128M:    .ASCIZ    "A128M"
NA256M:    .ASCIZ    "A256M"
NA512M:    .ASCIZ    "A512M"
NS64:    .ASCIZ    "SMK64"
NS128:    .ASCIZ    "SMK128"
NS256:    .ASCIZ    "SMK256"
NS512:    .ASCIZ    "SMK512"
NOALTP:    .ASCIZ    "Не обнаружен контроллер АльтПро"<12>
FOUND:    .ASCIZ    "Обнаружен контроллер "
VERS:    .ASCIZ    " версия прошивки: "
VERRT:    .ASCIZ    "Версия прошивки 555РТ5: "
RTOK:    .ASCIZ    "новая"<12>
RTBAD:    .ASCII    "старая, не рекомендуется к использованию"
        .ASCII    "из-за неправильных режимов работы, тест будет показывать ошибки"<12>
        .ASCIZ    "синхронизации на БК11М"<12>
RTERR:    .ASCIZ    "повреждена."<12>
TTL:    .ASCII <220>/"/
        .ASCII <210>/ Тест контроллера "АльтПро" с ДОЗУ 64-512 Кб/<12>
        .ASCII <220>/"/
        .ASCIZ <211>" (c) АльтПро 1997, gid 2012, v4.74F"<12>
TERR:    .ASCIZ <7><7>" Error "
TZPREP:    .ASCIZ    "Подготовка"
TZDOZU:    .ASCIZ    <12>"ДОЗУ, Кбайт:"
TZ2ERC:    .ASCIZ    <12><213>" "
TZERRS:    .ASCII    <12>"Тест памяти на ошибки..."
TZEST1:    .ASCIZ    <12>"Этап 1"<12>
TZEST2:    .ASCIZ    <12>"Этап 2"<12>
TZ3WR:    .ASCIZ    "write-"
TZ3RD:    .ASCIZ    "read-"
TZ3HL:    .ASCIZ    "halt "
TZ3BY:    .ASCIZ    "byte-test fail"
TZ2US1:    .ASCIZ    "стр. с кодом "
TZ2US2:    .ASCIZ    " уже подключали с "
TZSYN1:    .ASCIZ    " - синхро           "
TZSYNF:    .ASCIZ    ":ошибка"
TRZINF:    .ASCIZ    <12>"Тест режимов..."<12>
TRSWPG:    .ASCIZ    <12>"Тест переключения страниц..."<12>
TROK:    .ASCIZ    " OK"
TRSKIP:    .ASCIZ    "пропуск."<12>
ERINFO:    .ASCII    "Код ошибки: Сегмент-Код(Код). Сегмент -"<12>
        .ASCII    "сегмент памяти по 10000 байтов, Код - код ошибки, в скобках"<12>
        .ASCII    "ожидаемый код. Расшифровка кодов:"<12>
        .ASCII    "6-ОЗУ, 4-ОЗУзз, 0-ПЗУ, 10-пусто, остальные коды"<12>
        .ASCIZ    "недокументированы: 11-ОЗУзч, 1-ОЗУ на ПЗУ, 2-чужое ОЗУ"<12>
CRCINF:    .ASCII <12><202>"* Для запуска непрерывного теста контрольной суммы ПЗУ"<12>
        .ASCII <203>" нажмите любую клавишу. Правильное значение уточните"<12>
        .ASCIZ <203>" по документации. Прервать тест - СТОП."<12>
        .ASCIZ    <12>"   Код К.С.= "
        .ASCIZ "1234 "
        .ASCIZ "."
TRINFO:    .ASCIZ    <12>"Тест влияния RESET..."<12>
TADDR:    .ASCIZ    "Адрес: "
TANRM:    .ASCIZ    " - без изменений"<12>
TAERR:    .ASCIZ    " - "
TRRSOK:    .ASCIZ    "Норма. RESET не"
TRRSER:    .ASCIZ    "ОШИБКА. RESET"
TRRSTL:    .ASCIZ    " влияет на режимы."<12>
THINFO:    .ASCIZ    <12>"Тест доступности регистров HDD..."<12>
THERR:    .ASCIZ    "Это не СМК, пропускаем тест."<12>
THRESL:    .ASCIZ    "недоступен"<12>
T2INFO:    .ASCIZ    <12>"Тест влияния бита 2..."<12>
THINF2:    .ASCIZ    <12>"Тест буфера ОЗУ HDD..."<12>
THROK:    .ASCIZ    "ОЗУ в норме."<12>
THRER:    .ASCIZ    "Внимание! ОЗУ повредилось!"<12>
THRERN:    .ASCIZ    "Внимание! ОЗУ недоступно!"<12>
T2ERR:    .ASCIZ    "ОШИБКА! "
T2OK:    .ASCIZ    "Норма. "
T21:    .ASCIZ    "Регистры 177130, 177132 "
T22:    .ASCIZ    "должны блокироваться!"<12>
T23:    .ASCIZ    "блокируются."<12>
T3INFO:    .ASCIZ    <12>"Тест влияния бита 3..."<12>
T31:    .ASCIZ    "не подключается ПЗУ Бейсика."<12>
T3NONE:    .ASCIZ    "На БК11(М) бит 3 влияния не имеет."<12>
ENDTST:    .ASCIZ <12><202>"* Тестирование окончено !"
PRANYK:    .ASCIZ    <216>" *** Нажмите любую клавишу. ***"
TZLNTS:    .ASCIZ    "Задайте длительность длинного теста (0 - без теста) ["
        .EVEN
TZADDR:    .WORD    0
TZMODE:    .WORD    0
TRCODE:    .WORD    0
VALUE1:    .WORD    0
ERCOD:    .WORD    0
ERT31:    .WORD    0
SMKHDD:    .WORD    0
PGEERR:    .BLKW    40
DTAB:    .BLKW    10
DTAA:    .BLKW    10
SETLNT:    .ADDR    R1,TZLNTS
        CLR        R2
        EMT        20
        MOV        #32.,R1
        MOV        R1,@#LNGTST
        CALL    DECOU$
        MOV        #"]:,R0
        EMT        16
        SWAB    R0
        EMT        16
        CALL    DECIN
        BCS        1$
        MOV        R1,@#LNGTST
1$:        MOV        #12,R0
        EMT        16
        RETURN
DECIN:    CLR        R1
        MOV        #DECBUF,R2
2$:        EMT        6
        CMPB    #3,R0
        BEQ        1CANS
        CMPB    #12,R0
        BEQ        10$
        CMPB    #30,R0
        BNE        1$
        TST        R1
        BEQ        2$
        EMT        16
        DEC        R1
        DEC        R2
        BR        2$
1$:        CMPB    R0,#'0
        BLO    2$
        CMPB    R0,#'9
        BHI        2$
        CMP        R1,#5
        BGE        2$
        EMT        16
        SUB        #'0,R0
        MOVB    R0,(R2)+
        INC        R1
        BR        2$
10$:    TST        R1
        BEQ        3$
        MOV        #DECBUF,R2
        CLR        R3
4$:        ASL        R3
        MOV        R3,R4
        ASL        R3
        ASL        R3
        ADD        R4,R3
        MOVB    (R2)+,R0
        ADD        R0,R3
        SOB        R1,4$
        MOV        R3,R1
        BR        5$
1CANS:    TST        R1
        BNE        3$
5$:        TST        (PC)+
3$:        SEC
        RETURN
DECOU$: JSR        R5,PUSHA
        CLR        R5
        MOV        #CONST,R2
6$:        CLR        R0
        MOV        (R2)+,R4
        BEQ        2$
1$:        SUB        R4,R1
        BCS        70$
        INC        R0
        BR        1$
70$:        ADD        R4,R1
        BIS        R0,R5
        BNE        4$
        CMP        #1,R4
        BNE        6$
4$:        ADD        #'0,R0
        EMT        16
        BR        6$
2$:        RETURN
        .END
 
